From 5c2717d6c99786d140f4865630419c30b98f1602 Mon Sep 17 00:00:00 2001 From: Nathan Wasson Date: Tue, 13 Feb 2024 10:55:06 -0600 Subject: [PATCH 1/9] Update S3 provider in android-build-test.yml (#855) * Update S3 provider in android-build-test.yml * Update env var name --------- Co-authored-by: Anh --- .github/workflows/android-build-test.yml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/.github/workflows/android-build-test.yml b/.github/workflows/android-build-test.yml index 0ac420f01..8ced2cd29 100644 --- a/.github/workflows/android-build-test.yml +++ b/.github/workflows/android-build-test.yml @@ -86,10 +86,10 @@ jobs: python3 -m pip install awscli - name: Download Samsung libraries env: - AWS_ACCESS_KEY_ID: ${{ secrets.READONLY_AWS_ID }} - AWS_SECRET_ACCESS_KEY: ${{ secrets.READONLY_AWS_KEY }} + AWS_ACCESS_KEY_ID: ${{ secrets.READONLY_R2_ACCESS_KEY }} + AWS_SECRET_ACCESS_KEY: ${{ secrets.READONLY_R2_SECRET_KEY }} run: | - aws s3 --endpoint-url=https://s3.us-east-1.lyvecloud.seagate.com \ + aws s3 --endpoint-url=https://c2686074cb2caf5cbaf6d134bdba8b47.r2.cloudflarestorage.com \ cp --quiet s3://mlcommons-mobile-wg-private/libs/v3.1/samsung_libs_v3.1_20231116.zip /tmp/ && \ unzip /tmp/samsung_libs_v3.1_20231116.zip -d /tmp/samsung_libs_v3.1_20231116 && \ rm /tmp/samsung_libs_v3.1_20231116.zip && \ @@ -97,12 +97,12 @@ jobs: mv /tmp/samsung_libs_v3.1_20231116/* mobile_back_samsung/samsung/lib/internal/ - name: Download QTI libraries env: - AWS_ACCESS_KEY_ID: ${{ secrets.READONLY_AWS_ID }} - AWS_SECRET_ACCESS_KEY: ${{ secrets.READONLY_AWS_KEY }} + AWS_ACCESS_KEY_ID: ${{ secrets.READONLY_R2_ACCESS_KEY }} + AWS_SECRET_ACCESS_KEY: ${{ secrets.READONLY_R2_SECRET_KEY }} run: | - aws s3 --endpoint-url=https://s3.us-east-1.lyvecloud.seagate.com \ + aws s3 --endpoint-url=https://c2686074cb2caf5cbaf6d134bdba8b47.r2.cloudflarestorage.com \ cp --quiet s3://mlcommons-mobile-wg-private/libs/v3.1/qaisw-2.13.4.230831213719_60417-linux.zip /tmp/ && \ - unzip -P ${AWS_SECRET_ACCESS_KEY} /tmp/qaisw-2.13.4.230831213719_60417-linux.zip -d /tmp/qaisw-2.13.4.230831213719_60417-linux && \ + unzip -P ${{ secrets.READONLY_AWS_KEY }} /tmp/qaisw-2.13.4.230831213719_60417-linux.zip -d /tmp/qaisw-2.13.4.230831213719_60417-linux && \ rm /tmp/qaisw-2.13.4.230831213719_60417-linux.zip && \ mv /tmp/qaisw-2.13.4.230831213719_60417-linux/qaisw-2.13.4.230831213719_60417 mobile_back_qti/ - name: Cache bazel From 89991f580766d86ce666a46b9a98d81d769f40a9 Mon Sep 17 00:00:00 2001 From: Anh Date: Thu, 29 Feb 2024 15:42:25 +0700 Subject: [PATCH 2/9] fix: performance drop caused by UI animation (#857) * Remove InfiniteProgressCircle * Use GitHub vars for --num-flaky-test-attempts flag * Format Dart code * Add DottedProgressCircle * Add setting for progress animation style * Revert "Add setting for progress animation style" This reverts commit c14cc6309b5cb4d4e75b2d1e5a899cb385a5ef82. * Revert "Add DottedProgressCircle" This reverts commit ef1c42795fe563ee87d2146a1eb177840c144912. * Use ProgressCircle with no animation * Format Dart code --- .github/workflows/android-build-test.yml | 8 +- .../lib/ui/home/benchmark_running_screen.dart | 12 +- .../gradient_circular_progress_indicator.dart | 106 ------------------ flutter/lib/ui/home/progress_circle.dart | 62 ++++++++++ flutter/lib/ui/home/progress_circles.dart | 54 --------- 5 files changed, 72 insertions(+), 170 deletions(-) delete mode 100644 flutter/lib/ui/home/gradient_circular_progress_indicator.dart create mode 100644 flutter/lib/ui/home/progress_circle.dart delete mode 100644 flutter/lib/ui/home/progress_circles.dart diff --git a/.github/workflows/android-build-test.yml b/.github/workflows/android-build-test.yml index 8ced2cd29..ccf84647c 100644 --- a/.github/workflows/android-build-test.yml +++ b/.github/workflows/android-build-test.yml @@ -204,7 +204,7 @@ jobs: --app $GCLOUD_BUCKET_PATH/test-main-tflite.apk \ --test $GCLOUD_BUCKET_PATH/test-helper-tflite.apk \ --timeout 30m \ - --num-flaky-test-attempts 2 \ + --num-flaky-test-attempts ${{ vars.NUM_FLAKY_TEST_ATTEMPTS }} \ --device model=redfin,version=30,locale=en,orientation=portrait \ --client-details=buildNumber=${{ github.run_number }} @@ -229,7 +229,7 @@ jobs: --app $GCLOUD_BUCKET_PATH/test-main-pixel.apk \ --test $GCLOUD_BUCKET_PATH/test-helper-pixel.apk \ --timeout 30m \ - --num-flaky-test-attempts 2 \ + --num-flaky-test-attempts ${{ vars.NUM_FLAKY_TEST_ATTEMPTS }} \ --device model=oriole,version=32,locale=en,orientation=portrait \ --client-details=buildNumber=${{ github.run_number }} @@ -254,7 +254,7 @@ jobs: --app $GCLOUD_BUCKET_PATH/test-main-qti.apk \ --test $GCLOUD_BUCKET_PATH/test-helper-qti.apk \ --timeout 30m \ - --num-flaky-test-attempts 2 \ + --num-flaky-test-attempts ${{ vars.NUM_FLAKY_TEST_ATTEMPTS }} \ --device model=b0q,version=33,locale=en,orientation=portrait \ --client-details=buildNumber=${{ github.run_number }} @@ -279,6 +279,6 @@ jobs: --app $GCLOUD_BUCKET_PATH/test-main-mtk.apk \ --test $GCLOUD_BUCKET_PATH/test-helper-mtk.apk \ --timeout 30m \ - --num-flaky-test-attempts 2 \ + --num-flaky-test-attempts ${{ vars.NUM_FLAKY_TEST_ATTEMPTS }} \ --device model=OP515BL1,version=33,locale=en,orientation=portrait \ --client-details=buildNumber=${{ github.run_number }} diff --git a/flutter/lib/ui/home/benchmark_running_screen.dart b/flutter/lib/ui/home/benchmark_running_screen.dart index 05b590ca8..3113e918f 100644 --- a/flutter/lib/ui/home/benchmark_running_screen.dart +++ b/flutter/lib/ui/home/benchmark_running_screen.dart @@ -13,7 +13,7 @@ import 'package:mlperfbench/localizations/app_localizations.dart'; import 'package:mlperfbench/state/task_runner.dart'; import 'package:mlperfbench/ui/app_styles.dart'; import 'package:mlperfbench/ui/formatter.dart'; -import 'package:mlperfbench/ui/home/progress_circles.dart'; +import 'package:mlperfbench/ui/home/progress_circle.dart'; import 'package:mlperfbench/ui/icons.dart'; class BenchmarkRunningScreen extends StatefulWidget { @@ -114,9 +114,9 @@ class _BenchmarkRunningScreenState extends State { ), ), ), - InfiniteProgressCircle( + ProgressCircle( + strokeWidth: 6, size: containerWidth + 20, - strokeWidth: 6.0, ), ], ); @@ -201,9 +201,9 @@ class _BenchmarkRunningScreenState extends State { const trailingWidth = 24.0; Widget? doneIcon; if (progress.currentBenchmark?.taskName == benchmarkInfo.taskName) { - doneIcon = const InfiniteProgressCircle( - size: trailingWidth, + doneIcon = const ProgressCircle( strokeWidth: 2, + size: trailingWidth - 4, ); } else if (progress.completedBenchmarks.contains(benchmarkInfo)) { doneIcon = const Icon( @@ -238,7 +238,7 @@ class _BenchmarkRunningScreenState extends State { trailing: SizedBox( width: trailingWidth, height: trailingWidth, - child: doneIcon, + child: Center(child: doneIcon), ), ); } diff --git a/flutter/lib/ui/home/gradient_circular_progress_indicator.dart b/flutter/lib/ui/home/gradient_circular_progress_indicator.dart deleted file mode 100644 index 9fa879ce4..000000000 --- a/flutter/lib/ui/home/gradient_circular_progress_indicator.dart +++ /dev/null @@ -1,106 +0,0 @@ -// Source: https://github.com/mryadavdilip/gradient_circular_progress_indicator/blob/e3621c0744bd1b88b00ae4e6a6068c8197789ef6/lib/gradient_circular_progress_indicator.dart - -import 'dart:math'; - -import 'package:flutter/material.dart'; - -class GradientCircularProgressIndicator extends StatelessWidget { - /// progress value between or equal to 0 and 1 (0 <= progress <= 1) - final double progress; - final Gradient gradient; - - /// default background Colors.transparent - final Color? backgroundColor; - - /// default stroke is (size of child divided by 10) - final double? stroke; - - /// default size is size of child - final double? size; - final Widget? child; - - const GradientCircularProgressIndicator({ - super.key, - required this.progress, - required this.gradient, - this.backgroundColor, - this.stroke, - this.size, - this.child, - }); - - @override - Widget build(BuildContext context) { - return CustomPaint( - size: size != null ? Size(size!, size!) : MediaQuery.of(context).size, - painter: _GradientCircularProgressPainter( - progress: progress, - gradient: gradient, - backgroundColor: backgroundColor ?? Colors.transparent, - stroke: stroke), - child: SizedBox( - height: size, - width: size, - child: child, - ), - ); - } -} - -class _GradientCircularProgressPainter extends CustomPainter { - final double progress; - final Gradient gradient; - final Color backgroundColor; // New parameter for background color - final double? stroke; - - _GradientCircularProgressPainter({ - required this.progress, - required this.gradient, - required this.backgroundColor, - this.stroke, - }); - - @override - void paint(Canvas canvas, Size size) { - final center = Offset(size.width / 2, size.height / 2); - final radius = size.width / 2; - const startAngle = -pi / 2; - const fullSweepAngle = 2 * pi; - final progressSweepAngle = 2 * pi * progress; - - final backgroundPaint = Paint() - ..color = backgroundColor // Set the background color - ..style = PaintingStyle.stroke - ..strokeWidth = stroke ?? size.width / 10; - - final gradientPaint = Paint() - ..shader = - gradient.createShader(Rect.fromCircle(center: center, radius: radius)) - ..strokeCap = StrokeCap.round - ..style = PaintingStyle.stroke - ..strokeWidth = stroke ?? size.width / 10; - - // Draw the background arc - canvas.drawArc( - Rect.fromCircle(center: center, radius: radius), - startAngle + progressSweepAngle, - fullSweepAngle - progressSweepAngle, - false, - backgroundPaint, - ); - - // Draw the gradient arc - canvas.drawArc( - Rect.fromCircle(center: center, radius: radius), - startAngle, - progressSweepAngle, - false, - gradientPaint, - ); - } - - @override - bool shouldRepaint(covariant CustomPainter oldDelegate) { - return true; - } -} diff --git a/flutter/lib/ui/home/progress_circle.dart b/flutter/lib/ui/home/progress_circle.dart new file mode 100644 index 000000000..1762bada0 --- /dev/null +++ b/flutter/lib/ui/home/progress_circle.dart @@ -0,0 +1,62 @@ +import 'package:flutter/material.dart'; + +class ProgressCircle extends StatelessWidget { + final double strokeWidth; + final double size; + + const ProgressCircle({ + super.key, + required this.size, + required this.strokeWidth, + }); + + @override + Widget build(BuildContext context) { + return _BorderedCircle( + strokeWidth: strokeWidth, + radius: size / 2, + color: Colors.white.withOpacity(0.88), + ); + } +} + +class _BorderedCircle extends StatelessWidget { + final double strokeWidth; + final double radius; + final Color color; + + const _BorderedCircle({ + required this.strokeWidth, + required this.radius, + required this.color, + }); + + @override + Widget build(BuildContext context) { + return CustomPaint( + painter: DrawCircle(strokeWidth, radius, color), + ); + } +} + +class DrawCircle extends CustomPainter { + final double strokeWidth; + final double radius; + final Color color; + + DrawCircle(this.strokeWidth, this.radius, this.color); + + @override + void paint(Canvas canvas, Size size) { + final paint = Paint() + ..color = color + ..strokeWidth = strokeWidth + ..style = PaintingStyle.stroke; + canvas.drawCircle(const Offset(0.0, 0.0), radius, paint); + } + + @override + bool shouldRepaint(CustomPainter oldDelegate) { + return false; + } +} diff --git a/flutter/lib/ui/home/progress_circles.dart b/flutter/lib/ui/home/progress_circles.dart deleted file mode 100644 index b22a86d7b..000000000 --- a/flutter/lib/ui/home/progress_circles.dart +++ /dev/null @@ -1,54 +0,0 @@ -import 'package:flutter/material.dart'; - -import 'package:mlperfbench/ui/home/gradient_circular_progress_indicator.dart'; - -class InfiniteProgressCircle extends StatefulWidget { - final double size; - final double strokeWidth; - - const InfiniteProgressCircle( - {Key? key, required this.size, required this.strokeWidth}) - : super(key: key); - - @override - State createState() => _InfiniteProgressCircleState(); -} - -class _InfiniteProgressCircleState extends State - with SingleTickerProviderStateMixin { - late AnimationController _controller; - - @override - void initState() { - _controller = - AnimationController(vsync: this, duration: const Duration(seconds: 2)); - _controller.addListener(() => setState(() {})); - _controller.repeat(); - super.initState(); - } - - @override - void dispose() { - _controller.dispose(); - super.dispose(); - } - - @override - Widget build(BuildContext context) { - return RotationTransition( - turns: Tween(begin: 0.0, end: 1.0).animate(_controller), - child: GradientCircularProgressIndicator( - progress: 1.0, - // Specify the progress value between 0 and 1 - gradient: const LinearGradient( - colors: [Colors.white, Colors.white, Colors.white10, Colors.white10], - begin: Alignment.topLeft, - end: Alignment.bottomRight, - ), - backgroundColor: Colors.transparent, - stroke: widget.strokeWidth, - size: widget.size, - ), - ); - } -} From bd79e128d1d22fa150ec999ede20d838a5e8b001 Mon Sep 17 00:00:00 2001 From: Anh Date: Fri, 1 Mar 2024 15:23:14 +0700 Subject: [PATCH 3/9] ci: use new device for test-android-apk-tflite (#860) * Use GitHub vars for --num-flaky-test-attempts flag * Use Pixel 6 for test-android-apk-tflite * Add expected_throughput for _kTFLiteBackend -> _kPixel6 * Update expected_throughput for _kTFLiteBackend -> _kPixel6 * Replace obsolete Windows image * Update expected_throughput for _kDN2103 * Use Pixel 6 - API level 31 for higher device capacity --- .github/cloudbuild/flutter-windows.yaml | 2 +- .github/workflows/android-build-test.yml | 4 ++-- .../integration_test/expected_throughput.dart | 18 ++++++++++++------ 3 files changed, 15 insertions(+), 9 deletions(-) diff --git a/.github/cloudbuild/flutter-windows.yaml b/.github/cloudbuild/flutter-windows.yaml index 44cc66a8f..4ce58a010 100644 --- a/.github/cloudbuild/flutter-windows.yaml +++ b/.github/cloudbuild/flutter-windows.yaml @@ -34,7 +34,7 @@ steps: - --region=$_CE_REGION - --zone=$_CE_ZONE - --machineType=$_CE_MACHINE_TYPE - - --image=projects/gce-uefi-images/global/images/windows-server-2019-dc-for-containers-v20200609 + - --image=projects/gce-uefi-images/global/images/windows-server-2019-dc-for-containers-v20200512 # When using other disk types image pulling and image building could take up to 3 hours - --diskType=pd-ssd - --workspace-bucket=$_WORKSPACE_TMP_BUCKET diff --git a/.github/workflows/android-build-test.yml b/.github/workflows/android-build-test.yml index ccf84647c..793adc06f 100644 --- a/.github/workflows/android-build-test.yml +++ b/.github/workflows/android-build-test.yml @@ -197,7 +197,7 @@ jobs: with: version: '>= 363.0.0' project_id: mobile-app-build-290400 - - name: Trigger Firebase Test Lab for [Google Pixel 5](redfin) + - name: Trigger Firebase Test Lab for [Google Pixel 6](oriole) run: | gcloud firebase test android run \ --type instrumentation \ @@ -205,7 +205,7 @@ jobs: --test $GCLOUD_BUCKET_PATH/test-helper-tflite.apk \ --timeout 30m \ --num-flaky-test-attempts ${{ vars.NUM_FLAKY_TEST_ATTEMPTS }} \ - --device model=redfin,version=30,locale=en,orientation=portrait \ + --device model=oriole,version=31,locale=en,orientation=portrait \ --client-details=buildNumber=${{ github.run_number }} test-android-apk-pixel: diff --git a/flutter/integration_test/expected_throughput.dart b/flutter/integration_test/expected_throughput.dart index 10854dfdb..092b9fb00 100644 --- a/flutter/integration_test/expected_throughput.dart +++ b/flutter/integration_test/expected_throughput.dart @@ -35,6 +35,7 @@ const Map> _imageClassification = { _kCloudBuildX28: Interval(min: 4, max: 13), _kRyzen5600: Interval(min: 31, max: 37), _kPixel5: Interval(min: 80, max: 130), + _kPixel6: Interval(min: 600, max: 1100), _kIphoneOnGitHubAction: Interval(min: 1, max: 8), _kIphoneOnMacbookM1: Interval(min: 19, max: 27), }, @@ -48,7 +49,7 @@ const Map> _imageClassification = { _kS22Ultra: Interval(min: 1900, max: 2400), }, _kMediatekBackend: { - _kDN2103: Interval(min: 30, max: 50), + _kDN2103: Interval(min: 30, max: 55), }, }; @@ -58,6 +59,7 @@ const Map> _objectDetection = { _kCloudBuildX28: Interval(min: 3.5, max: 8), _kRyzen5600: Interval(min: 14, max: 22), _kPixel5: Interval(min: 40, max: 60), + _kPixel6: Interval(min: 200, max: 450), _kIphoneOnGitHubAction: Interval(min: 0.5, max: 4), _kIphoneOnMacbookM1: Interval(min: 9, max: 16), }, @@ -71,7 +73,7 @@ const Map> _objectDetection = { _kS22Ultra: Interval(min: 800, max: 1400), }, _kMediatekBackend: { - _kDN2103: Interval(min: 120, max: 180), + _kDN2103: Interval(min: 120, max: 210), }, }; @@ -81,6 +83,7 @@ const Map> _imageSegmentationV2 = { _kCloudBuildX28: Interval(min: 0.5, max: 4), _kRyzen5600: Interval(min: 5, max: 7), _kPixel5: Interval(min: 25, max: 40), + _kPixel6: Interval(min: 80, max: 180), _kIphoneOnGitHubAction: Interval(min: 0.1, max: 2.5), _kIphoneOnMacbookM1: Interval(min: 3, max: 6), }, @@ -94,7 +97,7 @@ const Map> _imageSegmentationV2 = { _kS22Ultra: Interval(min: 450, max: 700), }, _kMediatekBackend: { - _kDN2103: Interval(min: 45, max: 65), + _kDN2103: Interval(min: 45, max: 70), }, }; @@ -104,6 +107,7 @@ const Map> _naturalLanguageProcessing = { _kCloudBuildX28: Interval(min: 0.5, max: 1.3), _kRyzen5600: Interval(min: 2.8, max: 3.2), _kPixel5: Interval(min: 2.3, max: 3.0), + _kPixel6: Interval(min: 2, max: 75), _kIphoneOnGitHubAction: Interval(min: 0.1, max: 1), _kIphoneOnMacbookM1: Interval(min: 1.8, max: 3), }, @@ -118,7 +122,7 @@ const Map> _naturalLanguageProcessing = { _kS22Ultra: Interval(min: 120, max: 180), }, _kMediatekBackend: { - _kDN2103: Interval(min: 1, max: 5), + _kDN2103: Interval(min: 1, max: 6), }, }; @@ -128,6 +132,7 @@ const Map> _superResolution = { _kCloudBuildX28: Interval(min: 0.1, max: 4), _kRyzen5600: Interval(min: 0.1, max: 3), _kPixel5: Interval(min: 4, max: 8), + _kPixel6: Interval(min: 7, max: 14), _kIphoneOnGitHubAction: Interval(min: 0.02, max: 1.0), _kIphoneOnMacbookM1: Interval(min: 0.1, max: 10), }, @@ -141,7 +146,7 @@ const Map> _superResolution = { _kS22Ultra: Interval(min: 35, max: 55), }, _kMediatekBackend: { - _kDN2103: Interval(min: 5, max: 12), + _kDN2103: Interval(min: 5, max: 15), }, }; @@ -151,6 +156,7 @@ const Map> _imageClassificationOffline = { _kCloudBuildX28: Interval(min: 7, max: 16), _kRyzen5600: Interval(min: 45, max: 60), _kPixel5: Interval(min: 120, max: 190), + _kPixel6: Interval(min: 800, max: 1700), _kIphoneOnGitHubAction: Interval(min: 2, max: 15), _kIphoneOnMacbookM1: Interval(min: 30, max: 45), }, @@ -164,7 +170,7 @@ const Map> _imageClassificationOffline = { _kS22Ultra: Interval(min: 2600, max: 3500), }, _kMediatekBackend: { - _kDN2103: Interval(min: 75, max: 110), + _kDN2103: Interval(min: 75, max: 140), }, }; From 3e19125185248b96db469d51834dedafe3213366 Mon Sep 17 00:00:00 2001 From: Anh Date: Fri, 1 Mar 2024 15:24:22 +0700 Subject: [PATCH 4/9] ci: replace obsolete Windows image (#861) Replace obsolete Windows image From 5ef666daf1d88c2d46f2f5aee08810d84413e978 Mon Sep 17 00:00:00 2001 From: Anh Date: Mon, 4 Mar 2024 14:49:37 +0700 Subject: [PATCH 5/9] feat: add flag enforce_max_duration (#798) * Use dev version of loadgen * Set enforce_max_duration to false * Add min_duration_ms and max_duration_ms to dev Makefile * update enforce_max_duration logic * use updated loadgen * Show different colors for performance result based on multiple conditions. * Fix Dart linter issue * Use GitHub vars for --num-flaky-test-attempts flag * Update expected_throughput for _kS22Ultra * Use latest commit from inference/mobile_update branch --------- Co-authored-by: Koan-Sin Tan --- WORKSPACE | 10 ++--- docs/result-spec.md | 20 ++++++--- flutter/cpp/mlperf_driver.cc | 1 + .../integration_test/expected_throughput.dart | 12 ++--- flutter/lib/backend/loadgen_info.dart | 44 ++++++++++++++----- flutter/lib/benchmark/benchmark.dart | 24 +++++----- .../edit_json_schema.main.dart | 2 +- .../generation_helpers/sample_generator.dart | 12 +++-- .../lib/data/results/benchmark_result.dart | 20 ++------- .../lib/resources/export_result_helper.dart | 13 +----- flutter/lib/resources/result_manager.dart | 2 +- flutter/lib/state/task_runner.dart | 27 ++++++++---- flutter/lib/ui/app_styles.dart | 1 + .../benchmark_export_result_screen.dart | 2 +- .../ui/history/extended_result_screen.dart | 3 +- .../lib/ui/home/benchmark_result_screen.dart | 34 ++++++++++---- .../unit_test/backend/loadgen_info_test.dart | 16 ++++++- mobile_back_apple/dev-utils/Makefile | 8 ++-- tools/extended_result_schema.json | 40 ++++++++++++----- 19 files changed, 185 insertions(+), 106 deletions(-) diff --git a/WORKSPACE b/WORKSPACE index 718454c3a..48d1bab2a 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -1,6 +1,7 @@ workspace(name = "mlperf_app") load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") +load("@bazel_tools//tools/build_defs/repo:git.bzl", "new_git_repository") http_archive( name = "bazel_skylib", @@ -88,17 +89,14 @@ http_archive( urls = ["https://github.com/MediaTek-NeuroPilot/tflite-neuron-delegate/archive/refs/heads/update_for_dujac.zip"], ) -http_archive( +new_git_repository( name = "org_mlperf_inference", build_file = "@//flutter/android/third_party:loadgen.BUILD", + commit = "238d035ab41d7ddd390b35471af169ea641380f6", patch_args = ["-p1"], patch_cmds = ["python3 loadgen/version_generator.py loadgen/version_generated.cc loadgen"], patches = [], - sha256 = "e664f980e84fcab3573447c0cc3adddd1fcf900367c5dcbff17179ece24c484e", - strip_prefix = "inference-2da0c52666e21e4b296b09e1dbd287bf3a814e96", - urls = [ - "https://github.com/mlcommons/inference/archive/2da0c52666e21e4b296b09e1dbd287bf3a814e96.tar.gz", - ], + remote = "https://github.com/mlcommons/inference.git", ) # This is required to pass SNPE SDK path from external environment to sources, diff --git a/docs/result-spec.md b/docs/result-spec.md index e1a1bfa84..bc6bb8b74 100644 --- a/docs/result-spec.md +++ b/docs/result-spec.md @@ -76,12 +76,22 @@ If you enable Submission mode, both `performance_run` and `accuracy_run` values Actual duration of the benchmark in seconds from start to finish. * `measured_samples`: integer number Actual number of samples evaluated during the benchmark - * `loadgen_info`: map + * `loadgen`: map Info provided by loadgen. May be null for accuracy runs. - * `validity`: bool - Indicates whether all constraints were satisfied or not. - * `duration`: floating point number - Duration of the benchmark without loadgen overhead in seconds. + * `queryCount`: bool + Number of queries performed. + * `latencyMean`: bool + Mean latency in seconds. + * `latency90`: bool + 90th percentile in seconds. + * `isMinDurationMet`: bool + Indicates whether the min duration condition is met or not. + * `isMinQueryMet`: bool + Indicates whether the min query condition is met or not. + * `isEarlyStoppingMet`: bool + Indicates whether the early stopping condition is met or not. + * `isResultValid`: bool + Indicates whether the result is valid or not. * `start_datetime`: string Datetime of the moment when benchmark started Format is Iso 8601 in UTC timezone: `2022-04-14T03:54:54.687Z` diff --git a/flutter/cpp/mlperf_driver.cc b/flutter/cpp/mlperf_driver.cc index 8dc61b649..bdf1b06f3 100644 --- a/flutter/cpp/mlperf_driver.cc +++ b/flutter/cpp/mlperf_driver.cc @@ -105,6 +105,7 @@ void MlperfDriver::RunMLPerfTest(const std::string& mode, int min_query_count, // See https://github.com/mlcommons/inference/issues/1397 mlperf_settings.max_duration_ms = static_cast(std::ceil(max_duration * 1000.0)); + mlperf_settings.enforce_max_duration = true; if (scenario_ == "Offline") { mlperf_settings.scenario = ::mlperf::TestScenario::Offline; diff --git a/flutter/integration_test/expected_throughput.dart b/flutter/integration_test/expected_throughput.dart index 092b9fb00..61242f643 100644 --- a/flutter/integration_test/expected_throughput.dart +++ b/flutter/integration_test/expected_throughput.dart @@ -46,7 +46,7 @@ const Map> _imageClassification = { _kPixel6: Interval(min: 800, max: 1100), }, _kQtiBackend: { - _kS22Ultra: Interval(min: 1900, max: 2400), + _kS22Ultra: Interval(min: 1700, max: 2400), }, _kMediatekBackend: { _kDN2103: Interval(min: 30, max: 55), @@ -70,7 +70,7 @@ const Map> _objectDetection = { _kPixel6: Interval(min: 250, max: 450), }, _kQtiBackend: { - _kS22Ultra: Interval(min: 800, max: 1400), + _kS22Ultra: Interval(min: 700, max: 1400), }, _kMediatekBackend: { _kDN2103: Interval(min: 120, max: 210), @@ -94,7 +94,7 @@ const Map> _imageSegmentationV2 = { _kPixel6: Interval(min: 100, max: 180), }, _kQtiBackend: { - _kS22Ultra: Interval(min: 450, max: 700), + _kS22Ultra: Interval(min: 400, max: 700), }, _kMediatekBackend: { _kDN2103: Interval(min: 45, max: 70), @@ -119,7 +119,7 @@ const Map> _naturalLanguageProcessing = { _kPixel6: Interval(min: 2, max: 75), }, _kQtiBackend: { - _kS22Ultra: Interval(min: 120, max: 180), + _kS22Ultra: Interval(min: 100, max: 180), }, _kMediatekBackend: { _kDN2103: Interval(min: 1, max: 6), @@ -143,7 +143,7 @@ const Map> _superResolution = { _kPixel6: Interval(min: 10, max: 14), }, _kQtiBackend: { - _kS22Ultra: Interval(min: 35, max: 55), + _kS22Ultra: Interval(min: 25, max: 55), }, _kMediatekBackend: { _kDN2103: Interval(min: 5, max: 15), @@ -167,7 +167,7 @@ const Map> _imageClassificationOffline = { _kPixel6: Interval(min: 1000, max: 1700), }, _kQtiBackend: { - _kS22Ultra: Interval(min: 2600, max: 3500), + _kS22Ultra: Interval(min: 2500, max: 3500), }, _kMediatekBackend: { _kDN2103: Interval(min: 75, max: 140), diff --git a/flutter/lib/backend/loadgen_info.dart b/flutter/lib/backend/loadgen_info.dart index 1c14906a7..0311cb4e1 100644 --- a/flutter/lib/backend/loadgen_info.dart +++ b/flutter/lib/backend/loadgen_info.dart @@ -1,19 +1,28 @@ import 'dart:convert'; import 'dart:io'; +import 'package:json_annotation/json_annotation.dart'; + +part 'loadgen_info.g.dart'; + +@JsonSerializable(fieldRename: FieldRename.snake) class LoadgenInfo { - // Mean latency in seconds - final double meanLatency; final int queryCount; - // 90th percentile in seconds - final double latency90; - final bool validity; + final double latencyMean; // Mean latency in seconds + final double latency90; // 90th percentile in seconds + final bool isMinDurationMet; + final bool isMinQueryMet; + final bool isEarlyStoppingMet; + final bool isResultValid; LoadgenInfo({ - required this.meanLatency, required this.queryCount, + required this.latencyMean, required this.latency90, - required this.validity, + required this.isMinDurationMet, + required this.isMinQueryMet, + required this.isEarlyStoppingMet, + required this.isResultValid, }); static Future fromFile({required String filepath}) { @@ -57,6 +66,10 @@ class LoadgenInfo { const latency90Key = 'result_90.00_percentile_latency_ns'; // https://github.com/mlcommons/inference/blob/318cb131c0adf3bffcbc3379a502f40891331c54/loadgen/loadgen.cc#L1028-L1029 const validityKey = 'result_validity'; + // https://github.com/mlcommons/inference/blob/318cb131c0adf3bffcbc3379a502f40891331c54/loadgen/loadgen.cc#L1033C23-L1035 + const minDurationMetKey = 'result_min_duration_met'; + const minQueriesMetKey = 'result_min_queries_met'; + const earlyStoppingMetKey = 'early_stopping_met'; final result = await extractKeys( logLines: logLines, @@ -65,6 +78,9 @@ class LoadgenInfo { queryCountKey, latency90Key, validityKey, + minDurationMetKey, + minQueriesMetKey, + earlyStoppingMetKey, }, ); @@ -72,15 +88,23 @@ class LoadgenInfo { return null; } - final validity = result[validityKey] as String == 'VALID'; + final isResultValid = result[validityKey] as String == 'VALID'; const nanosecondsPerSecond = 1000 * Duration.microsecondsPerSecond; return LoadgenInfo( - meanLatency: (result[latencyKey] as int) / nanosecondsPerSecond, queryCount: result[queryCountKey] as int, + latencyMean: (result[latencyKey] as int) / nanosecondsPerSecond, latency90: (result[latency90Key] as int) / nanosecondsPerSecond, - validity: validity, + isMinDurationMet: result[minDurationMetKey] as bool, + isMinQueryMet: result[minQueriesMetKey] as bool, + isEarlyStoppingMet: result[earlyStoppingMetKey] as bool, + isResultValid: isResultValid, ); } + + factory LoadgenInfo.fromJson(Map json) => + _$LoadgenInfoFromJson(json); + + Map toJson() => _$LoadgenInfoToJson(this); } diff --git a/flutter/lib/benchmark/benchmark.dart b/flutter/lib/benchmark/benchmark.dart index 8da2fee1d..362f0e5ff 100644 --- a/flutter/lib/benchmark/benchmark.dart +++ b/flutter/lib/benchmark/benchmark.dart @@ -2,6 +2,7 @@ import 'package:collection/collection.dart'; import 'package:mlperfbench/app_constants.dart'; import 'package:mlperfbench/backend/bridge/run_settings.dart'; +import 'package:mlperfbench/backend/loadgen_info.dart'; import 'package:mlperfbench/benchmark/info.dart'; import 'package:mlperfbench/benchmark/run_mode.dart'; import 'package:mlperfbench/data/results/benchmark_result.dart'; @@ -19,17 +20,18 @@ class BenchmarkResult { final String acceleratorName; final String delegateName; final int batchSize; - final bool validity; - - BenchmarkResult( - {required this.throughput, - required this.accuracy, - required this.accuracy2, - required this.backendName, - required this.acceleratorName, - required this.delegateName, - required this.batchSize, - required this.validity}); + final LoadgenInfo? loadgenInfo; + + BenchmarkResult({ + required this.throughput, + required this.accuracy, + required this.accuracy2, + required this.backendName, + required this.acceleratorName, + required this.delegateName, + required this.batchSize, + required this.loadgenInfo, + }); } class Benchmark { diff --git a/flutter/lib/data/generation_helpers/edit_json_schema.main.dart b/flutter/lib/data/generation_helpers/edit_json_schema.main.dart index de7915a55..c36ee5899 100644 --- a/flutter/lib/data/generation_helpers/edit_json_schema.main.dart +++ b/flutter/lib/data/generation_helpers/edit_json_schema.main.dart @@ -44,7 +44,7 @@ Future main() async { makeNullable(definitions['Run']['properties']['throughput']); makeNullable(definitions['Run']['properties']['accuracy']); makeNullable(definitions['Run']['properties']['accuracy2']); - makeNullable(definitions['Run']['properties']['loadgen_info']); + makeNullable(definitions['Run']['properties']['loadgen']); makeNullable(definitions['Value']['properties']['android']); makeNullable(definitions['Value']['properties']['ios']); makeNullable(definitions['Value']['properties']['windows']); diff --git a/flutter/lib/data/generation_helpers/sample_generator.dart b/flutter/lib/data/generation_helpers/sample_generator.dart index db63da831..9124bfc28 100644 --- a/flutter/lib/data/generation_helpers/sample_generator.dart +++ b/flutter/lib/data/generation_helpers/sample_generator.dart @@ -1,5 +1,6 @@ import 'package:uuid/uuid.dart'; +import 'package:mlperfbench/backend/loadgen_info.dart'; import 'package:mlperfbench/data/build_info/build_info.dart'; import 'package:mlperfbench/data/environment/env_android.dart'; import 'package:mlperfbench/data/environment/env_ios.dart'; @@ -37,9 +38,14 @@ class SampleGenerator { measuredDuration: 123.456, measuredSamples: 8, startDatetime: DateTime.now(), - loadgenInfo: BenchmarkLoadgenInfo( - duration: 10.6, - validity: true, + loadgenInfo: LoadgenInfo( + queryCount: 12345, + latencyMean: 0.123, + latency90: 0.123, + isMinDurationMet: true, + isMinQueryMet: true, + isEarlyStoppingMet: true, + isResultValid: true, ), ); diff --git a/flutter/lib/data/results/benchmark_result.dart b/flutter/lib/data/results/benchmark_result.dart index 1ca982a09..894526b8e 100644 --- a/flutter/lib/data/results/benchmark_result.dart +++ b/flutter/lib/data/results/benchmark_result.dart @@ -1,5 +1,6 @@ import 'package:json_annotation/json_annotation.dart'; +import 'package:mlperfbench/backend/loadgen_info.dart'; import 'package:mlperfbench/data/results/backend_info.dart'; import 'package:mlperfbench/data/results/backend_settings.dart'; import 'package:mlperfbench/data/results/dataset_info.dart'; @@ -108,22 +109,6 @@ class Accuracy implements Comparable { String toUIString() => (normalized * 100).toStringAsFixed(1); } -@JsonSerializable(fieldRename: FieldRename.snake) -class BenchmarkLoadgenInfo { - final bool validity; - final double duration; - - BenchmarkLoadgenInfo({ - required this.validity, - required this.duration, - }); - - factory BenchmarkLoadgenInfo.fromJson(Map json) => - _$BenchmarkLoadgenInfoFromJson(json); - - Map toJson() => _$BenchmarkLoadgenInfoToJson(this); -} - @JsonSerializable(fieldRename: FieldRename.snake) class BenchmarkRunResult { final Throughput? throughput; @@ -133,7 +118,8 @@ class BenchmarkRunResult { final double measuredDuration; final int measuredSamples; final DateTime startDatetime; - final BenchmarkLoadgenInfo? loadgenInfo; + @JsonKey(name: 'loadgen') + final LoadgenInfo? loadgenInfo; BenchmarkRunResult({ required this.throughput, diff --git a/flutter/lib/resources/export_result_helper.dart b/flutter/lib/resources/export_result_helper.dart index ad67624c2..be16c110a 100644 --- a/flutter/lib/resources/export_result_helper.dart +++ b/flutter/lib/resources/export_result_helper.dart @@ -1,6 +1,5 @@ import 'package:mlperfbench/backend/bridge/run_result.dart'; import 'package:mlperfbench/backend/list.dart'; -import 'package:mlperfbench/backend/loadgen_info.dart'; import 'package:mlperfbench/benchmark/benchmark.dart'; import 'package:mlperfbench/benchmark/run_info.dart'; import 'package:mlperfbench/benchmark/run_mode.dart'; @@ -71,17 +70,7 @@ class ResultHelper { measuredDuration: result.duration, measuredSamples: result.numSamples, startDatetime: result.startTime, - loadgenInfo: _makeLoadgenInfo(info.loadgenInfo), - ); - } - - BenchmarkLoadgenInfo? _makeLoadgenInfo(LoadgenInfo? source) { - if (source == null) { - return null; - } - return BenchmarkLoadgenInfo( - validity: source.validity, - duration: source.meanLatency * source.queryCount, + loadgenInfo: info.loadgenInfo, ); } diff --git a/flutter/lib/resources/result_manager.dart b/flutter/lib/resources/result_manager.dart index 5b7919faa..dec4ffd2b 100644 --- a/flutter/lib/resources/result_manager.dart +++ b/flutter/lib/resources/result_manager.dart @@ -121,7 +121,7 @@ class ResultManager { acceleratorName: export.backendInfo.acceleratorName, delegateName: export.backendSettings.delegate, batchSize: export.backendSettings.batchSize, - validity: runResult.loadgenInfo?.validity ?? false, + loadgenInfo: runResult.loadgenInfo, ); } diff --git a/flutter/lib/state/task_runner.dart b/flutter/lib/state/task_runner.dart index 653e47940..be9083147 100644 --- a/flutter/lib/state/task_runner.dart +++ b/flutter/lib/state/task_runner.dart @@ -240,7 +240,7 @@ class TaskRunner { acceleratorName: performanceResult.acceleratorName, delegateName: benchmark.benchmarkSettings.delegateSelected, batchSize: benchmark.selectedDelegate.batchSize, - validity: performanceRunInfo.loadgenInfo!.validity, + loadgenInfo: performanceRunInfo.loadgenInfo!, ); resultHelper.performanceRunInfo = performanceRunInfo; } else if (mode == accuracyMode) { @@ -278,7 +278,7 @@ class TaskRunner { acceleratorName: accuracyResult.acceleratorName, delegateName: benchmark.benchmarkSettings.delegateSelected, batchSize: benchmark.selectedDelegate.batchSize, - validity: false, + loadgenInfo: accuracyRunInfo.loadgenInfo, ); } else { throw 'Unknown BenchmarkRunMode: $mode'; @@ -341,21 +341,32 @@ class _NativeRunHelper { } Future _invokeNativeRun() async { - final logPrefix = '${benchmark.id}: $runMode mode'; + final logPrefix = '[${benchmark.id}: $runMode mode]'; - print('$logPrefix: starting...'); + print('$logPrefix starting...'); final stopwatch = Stopwatch()..start(); final nativeResult = await backendBridge.run(runSettings); final elapsed = stopwatch.elapsed; - print('$logPrefix: elapsed: $elapsed'); - print('$logPrefix: result: $nativeResult'); + print('$logPrefix elapsed: $elapsed'); + print('$logPrefix result: $nativeResult'); if (!_checkAccuracy(nativeResult)) { - throw '$logPrefix: accuracy is invalid (backend may be corrupted)'; + throw '$logPrefix accuracy is invalid (backend may be corrupted)'; } final runInfo = await _makeRunInfo(nativeResult); - print('$logPrefix: throughput: ${runInfo.throughput}'); + + final throughput = runInfo.throughput; + if (throughput != null) { + print('$logPrefix throughput: $throughput'); + } + final loadgenInfo = runInfo.loadgenInfo; + if (loadgenInfo != null) { + print('$logPrefix isMinDurationMet: ${loadgenInfo.isMinDurationMet}'); + print('$logPrefix isMinQueryMet: ${loadgenInfo.isMinQueryMet}'); + print('$logPrefix isEarlyStoppingMet: ${loadgenInfo.isEarlyStoppingMet}'); + print('$logPrefix isResultValid: ${loadgenInfo.isResultValid}'); + } return runInfo; } diff --git a/flutter/lib/ui/app_styles.dart b/flutter/lib/ui/app_styles.dart index 6c14b8f13..663cd262d 100644 --- a/flutter/lib/ui/app_styles.dart +++ b/flutter/lib/ui/app_styles.dart @@ -17,6 +17,7 @@ class AppColors { static const darkText = Colors.black; static const resultValidText = Colors.indigo; static const resultInvalidText = Colors.red; + static const resultSemiValidText = Colors.purple; static const errorText = Colors.red; static const primary = _blue2; diff --git a/flutter/lib/ui/history/benchmark_export_result_screen.dart b/flutter/lib/ui/history/benchmark_export_result_screen.dart index 92dc19b26..83ad4350b 100644 --- a/flutter/lib/ui/history/benchmark_export_result_screen.dart +++ b/flutter/lib/ui/history/benchmark_export_result_screen.dart @@ -77,7 +77,7 @@ class _BenchmarkExportResultScreenState helper.makeInfo(l10n.historyRunDetailsPerfQps, perf.throughput?.toUIString() ?? l10n.resultsNotAvailable), helper.makeInfo(l10n.historyRunDetailsValid, - (perf.loadgenInfo?.validity ?? false).toString()), + (perf.loadgenInfo?.isResultValid).toString()), helper.makeInfo(l10n.historyRunDetailsDuration, perf.measuredDuration.toDurationUIString()), helper.makeInfo( diff --git a/flutter/lib/ui/history/extended_result_screen.dart b/flutter/lib/ui/history/extended_result_screen.dart index bfae2e401..2daa756b7 100644 --- a/flutter/lib/ui/history/extended_result_screen.dart +++ b/flutter/lib/ui/history/extended_result_screen.dart @@ -239,7 +239,8 @@ class _ExtendedResultViewState extends State { name: runInfo.benchmarkName, throughput: runInfo.performanceRun?.throughput?.toUIString() ?? l10n.resultsNotAvailable, - throughputValid: runInfo.performanceRun?.loadgenInfo?.validity ?? false, + throughputValid: + runInfo.performanceRun?.loadgenInfo?.isResultValid ?? false, accuracy: runInfo.accuracyRun?.accuracy?.formatted ?? l10n.resultsNotAvailable, onTap: () { diff --git a/flutter/lib/ui/home/benchmark_result_screen.dart b/flutter/lib/ui/home/benchmark_result_screen.dart index 12ddc9d82..8015ccb5d 100644 --- a/flutter/lib/ui/home/benchmark_result_screen.dart +++ b/flutter/lib/ui/home/benchmark_result_screen.dart @@ -223,7 +223,7 @@ class _BenchmarkResultScreenState extends State late final String? resultText2; late final double? progressBarValue2; late final BenchmarkResult? benchmarkResult; - late final bool resultIsValid; + late final Color resultTextColor; switch (_screenMode) { case _ScreenMode.performance: benchmarkResult = benchmark.performanceModeResult; @@ -233,7 +233,22 @@ class _BenchmarkResultScreenState extends State (throughput?.value ?? 0.0) / benchmark.info.maxThroughput; resultText2 = null; progressBarValue2 = null; - resultIsValid = benchmarkResult?.validity ?? false; + final loadgenInfo = benchmarkResult?.loadgenInfo; + if (loadgenInfo != null) { + if (loadgenInfo.isMinDurationMet == true && + loadgenInfo.isMinQueryMet == true && + loadgenInfo.isEarlyStoppingMet == true) { + resultTextColor = AppColors.resultValidText; + } else if (loadgenInfo.isMinDurationMet == true && + loadgenInfo.isMinQueryMet == false && + loadgenInfo.isEarlyStoppingMet == true) { + resultTextColor = AppColors.resultSemiValidText; + } else { + resultTextColor = AppColors.resultInvalidText; + } + } else { + resultTextColor = AppColors.resultInvalidText; + } break; case _ScreenMode.accuracy: benchmarkResult = benchmark.accuracyModeResult; @@ -241,10 +256,13 @@ class _BenchmarkResultScreenState extends State progressBarValue = benchmarkResult?.accuracy?.normalized; resultText2 = benchmarkResult?.accuracy2?.formatted; progressBarValue2 = benchmarkResult?.accuracy2?.normalized; - resultIsValid = - (benchmarkResult?.accuracy?.normalized ?? -1.0) >= 0.0 && - (benchmarkResult?.accuracy?.normalized ?? -1.0) <= 1.0 && - (benchmarkResult?.accuracy2?.normalized ?? -1.0) <= 1.0; + if ((benchmarkResult?.accuracy?.normalized ?? -1.0) >= 0.0 && + (benchmarkResult?.accuracy?.normalized ?? -1.0) <= 1.0 && + (benchmarkResult?.accuracy2?.normalized ?? -1.0) <= 1.0) { + resultTextColor = AppColors.resultValidText; + } else { + resultTextColor = AppColors.resultInvalidText; + } break; } final perfResult = benchmark.performanceModeResult; @@ -258,9 +276,7 @@ class _BenchmarkResultScreenState extends State var subtitleColumnChildren = []; subtitleColumnChildren.add(const SizedBox(height: 4)); final resultTextStyle = TextStyle( - color: resultIsValid - ? AppColors.resultValidText - : AppColors.resultInvalidText, + color: resultTextColor, fontSize: 18.0, fontWeight: FontWeight.bold, ); diff --git a/flutter/unit_test/backend/loadgen_info_test.dart b/flutter/unit_test/backend/loadgen_info_test.dart index 2698b3915..fe8c0f7fc 100644 --- a/flutter/unit_test/backend/loadgen_info_test.dart +++ b/flutter/unit_test/backend/loadgen_info_test.dart @@ -15,6 +15,12 @@ class _Examples { ':::MLLOG {"key": "result_90.00_percentile_latency_ns", "value": 41013900, "time_ms": 273.005400, "namespace": "mlperf::logging", "event_type": "POINT_IN_TIME", "metadata": {"is_error": false, "is_warning": false, "file": "external/org_mlperf_inference/loadgen/loadgen.cc", "line_no": 1124, "pid": 38760, "tid": 37352}}'; static const validity = ':::MLLOG {"key": "result_validity", "value": "INVALID", "time_ms": 273.005400, "namespace": "mlperf::logging", "event_type": "POINT_IN_TIME", "metadata": {"is_error": false, "is_warning": false, "file": "external/org_mlperf_inference/loadgen/loadgen.cc", "line_no": 1029, "pid": 38760, "tid": 37352}}'; + static const minDurationMet = + ':::MLLOG {"key": "result_min_duration_met", "value": true, "time_ms": 41253.016458, "namespace": "mlperf::logging", "event_type": "POINT_IN_TIME", "metadata": {"is_error": false, "is_warning": false, "file": "external/org_mlperf_inference/loadgen/results.cc", "line_no": 451, "pid": 33655, "tid": 13951061273224140806}}'; + static const minQueriesMet = + ':::MLLOG {"key": "result_min_queries_met", "value": false, "time_ms": 41253.016458, "namespace": "mlperf::logging", "event_type": "POINT_IN_TIME", "metadata": {"is_error": false, "is_warning": false, "file": "external/org_mlperf_inference/loadgen/results.cc", "line_no": 452, "pid": 33655, "tid": 13951061273224140806}}'; + static const earlyStoppingMet = + ':::MLLOG {"key": "early_stopping_met", "value": true, "time_ms": 41253.016458, "namespace": "mlperf::logging", "event_type": "POINT_IN_TIME", "metadata": {"is_error": false, "is_warning": false, "file": "external/org_mlperf_inference/loadgen/results.cc", "line_no": 453, "pid": 33655, "tid": 13951061273224140806}}'; } void main() { @@ -51,6 +57,9 @@ void main() { _Examples.latency90, _Examples.validity, _Examples.queries, + _Examples.minDurationMet, + _Examples.minQueriesMet, + _Examples.earlyStoppingMet, ]; final info = await LoadgenInfo.extractLoadgenInfo( @@ -60,9 +69,12 @@ void main() { expect(info, isNotNull); info!; expect(info.latency90, 0.0410139); - expect(info.meanLatency, 0.031329862); + expect(info.latencyMean, 0.031329862); expect(info.queryCount, 8); - expect(info.validity, false); + expect(info.isResultValid, false); + expect(info.isMinDurationMet, true); + expect(info.isMinQueryMet, false); + expect(info.isEarlyStoppingMet, true); }); test('extract info: missing keys: all', () async { const lines = [ diff --git a/mobile_back_apple/dev-utils/Makefile b/mobile_back_apple/dev-utils/Makefile index 1fcb9f60e..50868717b 100644 --- a/mobile_back_apple/dev-utils/Makefile +++ b/mobile_back_apple/dev-utils/Makefile @@ -8,7 +8,7 @@ REPO_ROOT_DIR="/Users/anh/dev/mlcommons/mobile_app_open" #REPO_ROOT_DIR="/Users/freedom/work/mobile_app_open" -tflite: tflite-build tflite-run-ic +tflite: tflite-build tflite-run-sr coreml: coreml-build coreml-run-ic tflite-all: tflite-build tflite-run-ic tflite-run-ic-offline tflite-run-od tflite-run-is tflite-run-lu tflite-run-sr coreml-all: coreml-build coreml-run-ic coreml-run-ic-offline coreml-run-od coreml-run-is coreml-run-lu coreml-run-sr @@ -22,7 +22,7 @@ app: tflite-build: cd ${REPO_ROOT_DIR} && \ - bazel build -c opt --cxxopt=-std=c++14 --host_cxxopt=-std=c++14 //flutter/cpp/binary:main //mobile_back_tflite:tflitebackend + bazel build -c opt --cxxopt=-std=c++17 --host_cxxopt=-std=c++17 //flutter/cpp/binary:main //mobile_back_tflite:tflitebackend tflite-run-ic: cd ${REPO_ROOT_DIR} && \ @@ -93,10 +93,12 @@ tflite-run-sr: --lib_path="bazel-bin/mobile_back_tflite/cpp/backend_tflite/libtflitebackend.so" \ --images_directory="${REPO_ROOT_DIR}/mobile_back_apple/dev-resources/psnr/LR" \ --ground_truth_directory="${REPO_ROOT_DIR}/mobile_back_apple/dev-resources/psnr/HR" \ + --max_duration_ms=60000 \ + --min_duration_ms=100 coreml-build: cd ${REPO_ROOT_DIR} && \ - bazel build -c opt --cxxopt=-fobjc-arc --cxxopt=-xobjective-c++ --cxxopt=-std=c++14 --host_cxxopt=-std=c++14 \ + bazel build -c opt --cxxopt=-fobjc-arc --cxxopt=-xobjective-c++ --cxxopt=-std=c++17 --host_cxxopt=-std=c++17 \ //flutter/cpp/binary:main //mobile_back_apple:coremlbackend coreml-run-ic: diff --git a/tools/extended_result_schema.json b/tools/extended_result_schema.json index 87b782e0f..b25e9c052 100644 --- a/tools/extended_result_schema.json +++ b/tools/extended_result_schema.json @@ -377,10 +377,10 @@ "start_datetime": { "type": "string" }, - "loadgen_info": { + "loadgen": { "oneOf": [ { - "$ref": "#/definitions/LoadgenInfo" + "$ref": "#/definitions/Loadgen" }, { "type": "null" @@ -392,7 +392,7 @@ "accuracy", "accuracy2", "dataset", - "loadgen_info", + "loadgen", "measured_duration", "measured_samples", "start_datetime", @@ -442,22 +442,42 @@ ], "title": "Dataset" }, - "LoadgenInfo": { + "Loadgen": { "type": "object", "additionalProperties": false, "properties": { - "validity": { - "type": "boolean" + "query_count": { + "type": "integer" + }, + "latency_mean": { + "type": "number" }, - "duration": { + "latency90": { "type": "number" + }, + "is_min_duration_met": { + "type": "boolean" + }, + "is_min_query_met": { + "type": "boolean" + }, + "is_early_stopping_met": { + "type": "boolean" + }, + "is_result_valid": { + "type": "boolean" } }, "required": [ - "duration", - "validity" + "is_early_stopping_met", + "is_min_duration_met", + "is_min_query_met", + "is_result_valid", + "latency90", + "latency_mean", + "query_count" ], - "title": "LoadgenInfo" + "title": "Loadgen" }, "Throughput": { "type": "object", From e44548bd4c789937f4126c50254fcafc6aa20665 Mon Sep 17 00:00:00 2001 From: Anh Date: Fri, 22 Mar 2024 12:48:07 +0700 Subject: [PATCH 6/9] ci: fix Windows and Markdown check (#868) * Remove GitHub Action markdown-link-check since it's deprecated and caused many false positives * Replace Windows image with newer version * Temporary delete other workflows * Install Docker engine * Revert changes in cloudbuild scripts * Use Python v3.11 * Revert "Temporary delete other workflows" This reverts commit ba41eb141824a8a69b0b6f8dbc5b9574518afab6. --- .github/workflows/format-and-lint.yml | 5 ----- flutter/windows/docker/Dockerfile | 2 +- 2 files changed, 1 insertion(+), 6 deletions(-) diff --git a/.github/workflows/format-and-lint.yml b/.github/workflows/format-and-lint.yml index 4e46c45ea..51a5efcc7 100644 --- a/.github/workflows/format-and-lint.yml +++ b/.github/workflows/format-and-lint.yml @@ -118,11 +118,6 @@ jobs: run: git config --global --add safe.directory "$GITHUB_WORKSPACE" - name: markdown-format run: make lint/markdown - - name: markdown-link - uses: gaurav-nelson/github-action-markdown-link-check@v1 - with: - use-verbose-mode: yes - use-quiet-mode: yes yaml: needs: build-image diff --git a/flutter/windows/docker/Dockerfile b/flutter/windows/docker/Dockerfile index a86f057d8..732e1a399 100644 --- a/flutter/windows/docker/Dockerfile +++ b/flutter/windows/docker/Dockerfile @@ -32,7 +32,7 @@ RUN choco install -y --no-progress flutter --version 3.7.6 RUN choco install -y --no-progress git --version 2.33.0.2 RUN choco install -y --no-progress make --version 4.3 RUN choco install -y --no-progress bazelisk --version 1.16.0 -RUN choco install -y --no-progress python3 --version 3.9.0 && copy "C:\Python39\python.exe" "C:\Python39\python3.exe" +RUN choco install -y --no-progress python3 --version 3.11 && copy "C:\Python311\python.exe" "C:\Python311\python3.exe" RUN choco install -y --no-progress protoc --version 3.18.1 RUN python3 -m pip install --user numpy absl-py From 9af9e757bd4f390b7a8ebd69b5b1f9154068a639 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 26 Mar 2024 06:10:39 +0100 Subject: [PATCH 7/9] chore(deps): update react packages to resolve security alerts (#867) * chore(deps): bump the npm_and_yarn group across 1 directory with 1 update Bumps the npm_and_yarn group with 1 update in the /react directory: [follow-redirects](https://github.com/follow-redirects/follow-redirects). Updates `follow-redirects` from 1.15.5 to 1.15.6 - [Release notes](https://github.com/follow-redirects/follow-redirects/releases) - [Commits](https://github.com/follow-redirects/follow-redirects/compare/v1.15.5...v1.15.6) --- updated-dependencies: - dependency-name: follow-redirects dependency-type: indirect dependency-group: npm_and_yarn-security-group ... Signed-off-by: dependabot[bot] * Update package.json * Update package version * Update package version --------- Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Anh --- react/package.json | 10 +- react/yarn.lock | 2370 ++++++++++++++++++++++++-------------------- 2 files changed, 1326 insertions(+), 1054 deletions(-) diff --git a/react/package.json b/react/package.json index d2f01de3f..be432db30 100644 --- a/react/package.json +++ b/react/package.json @@ -27,8 +27,9 @@ "@types/react-dom": "^18.2.17", "axios": "^1.6.2", "date-fns": "^2.30.0", - "firebase": "^10.7.0", + "firebase": "^10.9.0", "framer-motion": "^10.16.12", + "nth-check": "^2.1.1", "ramda": "^0.29.1", "react": "^18.2.0", "react-date-picker": "^8.4.0", @@ -80,8 +81,9 @@ "prettier": "^3.1.0" }, "resolutions": { - "react-scripts/@svgr/webpack/@svgr/plugin-svgo/svgo/css-select/nth-check": "^2.1.1", - "react-scripts/resolve-url-loader/postcss": "^8.4.31", - "react-scripts/http-proxy/follow-redirects": "^1.15.0" + "react-scripts/@svgr/webpack/@svgr/plugin-svgo/svgo/css-select/nth-check": ">=2.1.1", + "react-scripts/resolve-url-loader/postcss": ">=8.4.31", + "react-scripts/http-proxy/follow-redirects": ">=1.15.6", + "webpack-dev-middleware": ">=5.3.4" } } diff --git a/react/yarn.lock b/react/yarn.lock index 7ea73baea..7414a283f 100644 --- a/react/yarn.lock +++ b/react/yarn.lock @@ -18,12 +18,12 @@ integrity sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw== "@ampproject/remapping@^2.2.0": - version "2.2.1" - resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.1.tgz#99e8e11851128b8702cd57c33684f1d0f260b630" - integrity sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg== + version "2.3.0" + resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.3.0.tgz#ed441b6fa600072520ce18b43d2c8cc8caecc7f4" + integrity sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw== dependencies: - "@jridgewell/gen-mapping" "^0.3.0" - "@jridgewell/trace-mapping" "^0.3.9" + "@jridgewell/gen-mapping" "^0.3.5" + "@jridgewell/trace-mapping" "^0.3.24" "@apideck/better-ajv-errors@^0.3.1": version "0.3.6" @@ -34,7 +34,7 @@ jsonpointer "^5.0.0" leven "^3.1.0" -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.16.0", "@babel/code-frame@^7.22.13", "@babel/code-frame@^7.23.5", "@babel/code-frame@^7.8.3": +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.16.0", "@babel/code-frame@^7.23.5", "@babel/code-frame@^7.8.3": version "7.23.5" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.23.5.tgz#9009b69a8c602293476ad598ff53e4562e15c244" integrity sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA== @@ -42,26 +42,26 @@ "@babel/highlight" "^7.23.4" chalk "^2.4.2" -"@babel/compat-data@^7.22.6", "@babel/compat-data@^7.22.9", "@babel/compat-data@^7.23.3", "@babel/compat-data@^7.23.5": +"@babel/compat-data@^7.22.6", "@babel/compat-data@^7.23.5": version "7.23.5" resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.23.5.tgz#ffb878728bb6bdcb6f4510aa51b1be9afb8cfd98" integrity sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw== "@babel/core@^7.1.0", "@babel/core@^7.11.1", "@babel/core@^7.12.3", "@babel/core@^7.16.0", "@babel/core@^7.7.2", "@babel/core@^7.8.0": - version "7.23.5" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.23.5.tgz#6e23f2acbcb77ad283c5ed141f824fd9f70101c7" - integrity sha512-Cwc2XjUrG4ilcfOw4wBAK+enbdgwAcAJCfGUItPBKR7Mjw4aEfAFYrLxeRp4jWgtNIKn3n2AlBOfwwafl+42/g== + version "7.24.0" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.24.0.tgz#56cbda6b185ae9d9bed369816a8f4423c5f2ff1b" + integrity sha512-fQfkg0Gjkza3nf0c7/w6Xf34BW4YvzNfACRLmmb7XRLa6XHdR+K9AlJlxneFfWYf6uhOzuzZVTjF/8KfndZANw== dependencies: "@ampproject/remapping" "^2.2.0" "@babel/code-frame" "^7.23.5" - "@babel/generator" "^7.23.5" - "@babel/helper-compilation-targets" "^7.22.15" + "@babel/generator" "^7.23.6" + "@babel/helper-compilation-targets" "^7.23.6" "@babel/helper-module-transforms" "^7.23.3" - "@babel/helpers" "^7.23.5" - "@babel/parser" "^7.23.5" - "@babel/template" "^7.22.15" - "@babel/traverse" "^7.23.5" - "@babel/types" "^7.23.5" + "@babel/helpers" "^7.24.0" + "@babel/parser" "^7.24.0" + "@babel/template" "^7.24.0" + "@babel/traverse" "^7.24.0" + "@babel/types" "^7.24.0" convert-source-map "^2.0.0" debug "^4.1.0" gensync "^1.0.0-beta.2" @@ -69,20 +69,20 @@ semver "^6.3.1" "@babel/eslint-parser@^7.16.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/eslint-parser/-/eslint-parser-7.23.3.tgz#7bf0db1c53b54da0c8a12627373554a0828479ca" - integrity sha512-9bTuNlyx7oSstodm1cR1bECj4fkiknsDa1YniISkJemMY3DGhJNYBECbe6QD/q54mp2J8VO66jW3/7uP//iFCw== + version "7.23.10" + resolved "https://registry.yarnpkg.com/@babel/eslint-parser/-/eslint-parser-7.23.10.tgz#2d4164842d6db798873b40e0c4238827084667a2" + integrity sha512-3wSYDPZVnhseRnxRJH6ZVTNknBz76AEnyC+AYYhasjP3Yy23qz0ERR7Fcd2SHmYuSFJ2kY9gaaDd3vyqU09eSw== dependencies: "@nicolo-ribaudo/eslint-scope-5-internals" "5.1.1-v1" eslint-visitor-keys "^2.1.0" semver "^6.3.1" -"@babel/generator@^7.23.5", "@babel/generator@^7.7.2": - version "7.23.5" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.23.5.tgz#17d0a1ea6b62f351d281350a5f80b87a810c4755" - integrity sha512-BPssCHrBD+0YrxviOa3QzpqwhNIXKEtOa2jQrm4FlmkC2apYgRnQcmPWiGZDlGxiNtltnUFolMe8497Esry+jA== +"@babel/generator@^7.23.6", "@babel/generator@^7.7.2": + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.23.6.tgz#9e1fca4811c77a10580d17d26b57b036133f3c2e" + integrity sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw== dependencies: - "@babel/types" "^7.23.5" + "@babel/types" "^7.23.6" "@jridgewell/gen-mapping" "^0.3.2" "@jridgewell/trace-mapping" "^0.3.17" jsesc "^2.5.1" @@ -101,18 +101,33 @@ dependencies: "@babel/types" "^7.22.15" -"@babel/helper-compilation-targets@^7.22.15", "@babel/helper-compilation-targets@^7.22.6": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.15.tgz#0698fc44551a26cf29f18d4662d5bf545a6cfc52" - integrity sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw== +"@babel/helper-compilation-targets@^7.22.15", "@babel/helper-compilation-targets@^7.22.6", "@babel/helper-compilation-targets@^7.23.6": + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz#4d79069b16cbcf1461289eccfbbd81501ae39991" + integrity sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ== dependencies: - "@babel/compat-data" "^7.22.9" - "@babel/helper-validator-option" "^7.22.15" - browserslist "^4.21.9" + "@babel/compat-data" "^7.23.5" + "@babel/helper-validator-option" "^7.23.5" + browserslist "^4.22.2" lru-cache "^5.1.1" semver "^6.3.1" -"@babel/helper-create-class-features-plugin@^7.18.6", "@babel/helper-create-class-features-plugin@^7.21.0", "@babel/helper-create-class-features-plugin@^7.22.15", "@babel/helper-create-class-features-plugin@^7.23.5": +"@babel/helper-create-class-features-plugin@^7.18.6", "@babel/helper-create-class-features-plugin@^7.22.15", "@babel/helper-create-class-features-plugin@^7.23.6", "@babel/helper-create-class-features-plugin@^7.24.0": + version "7.24.0" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.24.0.tgz#fc7554141bdbfa2d17f7b4b80153b9b090e5d158" + integrity sha512-QAH+vfvts51BCsNZ2PhY6HAggnlS6omLLFTsIpeqZk/MmJ6cW7tgz5yRv0fMJThcr6FmbMrENh1RgrWPTYA76g== + dependencies: + "@babel/helper-annotate-as-pure" "^7.22.5" + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-function-name" "^7.23.0" + "@babel/helper-member-expression-to-functions" "^7.23.0" + "@babel/helper-optimise-call-expression" "^7.22.5" + "@babel/helper-replace-supers" "^7.22.20" + "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" + "@babel/helper-split-export-declaration" "^7.22.6" + semver "^6.3.1" + +"@babel/helper-create-class-features-plugin@^7.21.0": version "7.23.5" resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.23.5.tgz#2a8792357008ae9ce8c0f2b78b9f646ac96b314b" integrity sha512-QELlRWxSpgdwdJzSJn4WAhKC+hvw/AtHbbrIoncKHkhKKR/luAlKkgBDcri1EzWAo8f8VvYVryEHN4tax/V67A== @@ -136,10 +151,21 @@ regexpu-core "^5.3.1" semver "^6.3.1" -"@babel/helper-define-polyfill-provider@^0.4.3": - version "0.4.3" - resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.3.tgz#a71c10f7146d809f4a256c373f462d9bba8cf6ba" - integrity sha512-WBrLmuPP47n7PNwsZ57pqam6G/RGo1vw/87b0Blc53tZNGZ4x7YvZ6HgQe2vo1W/FR20OgjeZuGXzudPiXHFug== +"@babel/helper-define-polyfill-provider@^0.5.0": + version "0.5.0" + resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.5.0.tgz#465805b7361f461e86c680f1de21eaf88c25901b" + integrity sha512-NovQquuQLAQ5HuyjCz7WQP9MjRj7dx++yspwiyUiGl9ZyadHRSql1HZh5ogRd8W8w6YM6EQ/NTB8rgjLt5W65Q== + dependencies: + "@babel/helper-compilation-targets" "^7.22.6" + "@babel/helper-plugin-utils" "^7.22.5" + debug "^4.1.1" + lodash.debounce "^4.0.8" + resolve "^1.14.2" + +"@babel/helper-define-polyfill-provider@^0.6.1": + version "0.6.1" + resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.1.tgz#fadc63f0c2ff3c8d02ed905dcea747c5b0fb74fd" + integrity sha512-o7SDgTJuvx5vLKD6SFvkydkSMBvahDKGiNJzG22IZYXhiqoe9efY7zocICBgzHV4IRg5wdgl2nEL/tulKIEIbA== dependencies: "@babel/helper-compilation-targets" "^7.22.6" "@babel/helper-plugin-utils" "^7.22.5" @@ -199,10 +225,10 @@ dependencies: "@babel/types" "^7.22.5" -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.20.2", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz#dd7ee3735e8a313b9f7b05a773d892e88e6d7295" - integrity sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg== +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.20.2", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.24.0", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": + version "7.24.0" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.0.tgz#945681931a52f15ce879fd5b86ce2dae6d3d7f2a" + integrity sha512-9cUznXMG0+FxRuJfvL82QlTqIzhVW9sL0KjMPHhAOOvpQGL8QtdxnBKILjBqxlHyliz0yCa1G903ZXI/FuHy2w== "@babel/helper-remap-async-to-generator@^7.22.20": version "7.22.20" @@ -267,14 +293,14 @@ "@babel/template" "^7.22.15" "@babel/types" "^7.22.19" -"@babel/helpers@^7.23.5": - version "7.23.5" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.23.5.tgz#52f522840df8f1a848d06ea6a79b79eefa72401e" - integrity sha512-oO7us8FzTEsG3U6ag9MfdF1iA/7Z6dz+MtFhifZk8C8o453rGJFFWUP1t+ULM9TUIAzC9uxXEiXjOiVMyd7QPg== +"@babel/helpers@^7.24.0": + version "7.24.0" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.24.0.tgz#a3dd462b41769c95db8091e49cfe019389a9409b" + integrity sha512-ulDZdc0Aj5uLc5nETsa7EPx2L7rM0YJM8r7ck7U73AXi7qOV44IHHRAYZHY6iU1rr3C5N4NtTmMRUJP6kwCWeA== dependencies: - "@babel/template" "^7.22.15" - "@babel/traverse" "^7.23.5" - "@babel/types" "^7.23.5" + "@babel/template" "^7.24.0" + "@babel/traverse" "^7.24.0" + "@babel/types" "^7.24.0" "@babel/highlight@^7.23.4": version "7.23.4" @@ -285,10 +311,10 @@ chalk "^2.4.2" js-tokens "^4.0.0" -"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.22.15", "@babel/parser@^7.23.5": - version "7.23.5" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.5.tgz#37dee97c4752af148e1d38c34b856b2507660563" - integrity sha512-hOOqoiNXrmGdFbhgCzu6GiURxUgM27Xwd/aPuu8RfHEZPBzL1Z54okAHAQjXfcQNwvrlkAmAp4SlRTZ45vlthQ== +"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.24.0": + version "7.24.0" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.24.0.tgz#26a3d1ff49031c53a97d03b604375f028746a9ac" + integrity sha512-QuP/FxEAzMSjXygs8v4N9dvdXzEHN4W1oF3PxuWAtPo08UdM17u89RDMgjLn/mlc56iM0HlLmVkO/wgR+rDgHg== "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.23.3": version "7.23.3" @@ -306,10 +332,10 @@ "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" "@babel/plugin-transform-optional-chaining" "^7.23.3" -"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.23.3.tgz#20c60d4639d18f7da8602548512e9d3a4c8d7098" - integrity sha512-XaJak1qcityzrX0/IU5nKHb34VaibwP3saKqG6a/tppelgllOH13LUann4ZCIBcVOeE6H18K4Vx9QKkVww3z/w== +"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@^7.23.7": + version "7.23.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.23.7.tgz#516462a95d10a9618f197d39ad291a9b47ae1d7b" + integrity sha512-LlRT7HgaifEpQA1ZgLVOIJZZFVPWN5iReq/7/JixwBtwcoeVGDBD53ZV28rrsLYOZs1Y/EHhA8N/Z6aazHR8cw== dependencies: "@babel/helper-environment-visitor" "^7.22.20" "@babel/helper-plugin-utils" "^7.22.5" @@ -323,15 +349,13 @@ "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-proposal-decorators@^7.16.4": - version "7.23.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.23.5.tgz#eeaa49d0dc9229aec4d23378653738cdc5a3ea0a" - integrity sha512-6IsY8jOeWibsengGlWIezp7cuZEFzNlAghFpzh9wiZwhQ42/hRcPnY/QV9HJoKTlujupinSlnQPiEy/u2C1ZfQ== + version "7.24.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.24.0.tgz#845b42189e7441faa60a37682de1038eae97c382" + integrity sha512-LiT1RqZWeij7X+wGxCoYh3/3b8nVOX6/7BZ9wiQgAIyjoeQWdROaodJCgT+dwtbjHaz0r7bEbHJzjSbVfcOyjQ== dependencies: - "@babel/helper-create-class-features-plugin" "^7.23.5" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-replace-supers" "^7.22.20" - "@babel/helper-split-export-declaration" "^7.22.6" - "@babel/plugin-syntax-decorators" "^7.23.3" + "@babel/helper-create-class-features-plugin" "^7.24.0" + "@babel/helper-plugin-utils" "^7.24.0" + "@babel/plugin-syntax-decorators" "^7.24.0" "@babel/plugin-proposal-nullish-coalescing-operator@^7.16.0": version "7.18.6" @@ -409,12 +433,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-syntax-decorators@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.23.3.tgz#a1d351d6c25bfdcf2e16f99b039101bc0ffcb0ca" - integrity sha512-cf7Niq4/+/juY67E0PbgH0TDhLQ5J7zS8C/Q5FFx+DWyrRa9sUQdTXkjqKu8zGvuqr7vw1muKiukseihU+PJDA== +"@babel/plugin-syntax-decorators@^7.24.0": + version "7.24.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.24.0.tgz#7a15e20aeaf412469c53ed0d5666f31a1fc41215" + integrity sha512-MXW3pQCu9gUiVGzqkGqsgiINDVYXoAnrY8FYF/rmb+OfufNF0zHMpHPN4ulRrinxYT8Vk/aZJxYqOKsDECjKAw== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" "@babel/plugin-syntax-dynamic-import@^7.8.3": version "7.8.3" @@ -550,10 +574,10 @@ dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-async-generator-functions@^7.23.4": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.23.4.tgz#93ac8e3531f347fba519b4703f9ff2a75c6ae27a" - integrity sha512-efdkfPhHYTtn0G6n2ddrESE91fgXxjlqLsnUtPWnJs4a4mZIbUaK7ffqKIIUKXSHwcDvaCVX6GXkaJJFqtX7jw== +"@babel/plugin-transform-async-generator-functions@^7.23.9": + version "7.23.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.23.9.tgz#9adaeb66fc9634a586c5df139c6240d41ed801ce" + integrity sha512-8Q3veQEDGe14dTYuwagbRtwxQDnytyg1JFu4/HwEMETeofocrB0U0ejBJIXoeG/t2oXZ8kzCyI0ZZfbT80VFNQ== dependencies: "@babel/helper-environment-visitor" "^7.22.20" "@babel/helper-plugin-utils" "^7.22.5" @@ -600,16 +624,15 @@ "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-class-static-block" "^7.14.5" -"@babel/plugin-transform-classes@^7.23.5": - version "7.23.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.23.5.tgz#e7a75f815e0c534cc4c9a39c56636c84fc0d64f2" - integrity sha512-jvOTR4nicqYC9yzOHIhXG5emiFEOpappSJAl73SDSEDcybD+Puuze8Tnpb9p9qEyYup24tq891gkaygIFvWDqg== +"@babel/plugin-transform-classes@^7.23.8": + version "7.23.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.23.8.tgz#d08ae096c240347badd68cdf1b6d1624a6435d92" + integrity sha512-yAYslGsY1bX6Knmg46RjiCiNSwJKv2IUC8qOdYKqMMr0491SXFhcHqOdRDeCRohOOIzwN/90C6mQ9qAKgrP7dg== dependencies: "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-compilation-targets" "^7.22.15" + "@babel/helper-compilation-targets" "^7.23.6" "@babel/helper-environment-visitor" "^7.22.20" "@babel/helper-function-name" "^7.23.0" - "@babel/helper-optimise-call-expression" "^7.22.5" "@babel/helper-plugin-utils" "^7.22.5" "@babel/helper-replace-supers" "^7.22.20" "@babel/helper-split-export-declaration" "^7.22.6" @@ -677,12 +700,13 @@ "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-flow" "^7.23.3" -"@babel/plugin-transform-for-of@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.23.3.tgz#afe115ff0fbce735e02868d41489093c63e15559" - integrity sha512-X8jSm8X1CMwxmK878qsUGJRmbysKNbdpTv/O1/v0LuY/ZkZrng5WYiekYSdg9m09OTmDDUWeEDsTE+17WYbAZw== +"@babel/plugin-transform-for-of@^7.23.6": + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.23.6.tgz#81c37e24171b37b370ba6aaffa7ac86bcb46f94e" + integrity sha512-aYH4ytZ0qSuBbpfhuofbg/e96oQ7U2w1Aw/UQmKT+1l39uEhUPoFS3fHevDc1G0OvewyDudfMKY1OulczHzWIw== dependencies: "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" "@babel/plugin-transform-function-name@^7.23.3": version "7.23.3" @@ -740,10 +764,10 @@ "@babel/helper-plugin-utils" "^7.22.5" "@babel/helper-simple-access" "^7.22.5" -"@babel/plugin-transform-modules-systemjs@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.23.3.tgz#fa7e62248931cb15b9404f8052581c302dd9de81" - integrity sha512-ZxyKGTkF9xT9YJuKQRo19ewf3pXpopuYQd8cDXqNzc3mUNbOME0RKMoZxviQk74hwzfQsEe66dE92MaZbdHKNQ== +"@babel/plugin-transform-modules-systemjs@^7.23.9": + version "7.23.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.23.9.tgz#105d3ed46e4a21d257f83a2f9e2ee4203ceda6be" + integrity sha512-KDlPRM6sLo4o1FkiSlXoAa8edLXFsKKIda779fbLrvmeuc3itnjCtaO6RrtoaANsIJANj+Vk1zqbZIMhkCAHVw== dependencies: "@babel/helper-hoist-variables" "^7.22.5" "@babel/helper-module-transforms" "^7.23.3" @@ -789,14 +813,14 @@ "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-numeric-separator" "^7.10.4" -"@babel/plugin-transform-object-rest-spread@^7.23.4": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.23.4.tgz#2b9c2d26bf62710460bdc0d1730d4f1048361b83" - integrity sha512-9x9K1YyeQVw0iOXJlIzwm8ltobIIv7j2iLyP2jIhEbqPRQ7ScNgwQufU2I0Gq11VjyG4gI4yMXt2VFags+1N3g== +"@babel/plugin-transform-object-rest-spread@^7.24.0": + version "7.24.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.24.0.tgz#7b836ad0088fdded2420ce96d4e1d3ed78b71df1" + integrity sha512-y/yKMm7buHpFFXfxVFS4Vk1ToRJDilIa6fKRioB9Vjichv58TDGXTvqV0dN7plobAmTW5eSEGXDngE+Mm+uO+w== dependencies: - "@babel/compat-data" "^7.23.3" - "@babel/helper-compilation-targets" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/compat-data" "^7.23.5" + "@babel/helper-compilation-targets" "^7.23.6" + "@babel/helper-plugin-utils" "^7.24.0" "@babel/plugin-syntax-object-rest-spread" "^7.8.3" "@babel/plugin-transform-parameters" "^7.23.3" @@ -913,15 +937,15 @@ "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-transform-runtime@^7.16.4": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.23.4.tgz#5132b388580002fc5cb7c84eccfb968acdc231cb" - integrity sha512-ITwqpb6V4btwUG0YJR82o2QvmWrLgDnx/p2A3CTPYGaRgULkDiC0DRA2C4jlRB9uXGUEfaSS/IGHfVW+ohzYDw== + version "7.24.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.24.0.tgz#e308fe27d08b74027d42547081eefaf4f2ffbcc9" + integrity sha512-zc0GA5IitLKJrSfXlXmp8KDqLrnGECK7YRfQBmEKg1NmBOQ7e+KuclBEKJgzifQeUYLdNiAw4B4bjyvzWVLiSA== dependencies: "@babel/helper-module-imports" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" - babel-plugin-polyfill-corejs2 "^0.4.6" - babel-plugin-polyfill-corejs3 "^0.8.5" - babel-plugin-polyfill-regenerator "^0.5.3" + "@babel/helper-plugin-utils" "^7.24.0" + babel-plugin-polyfill-corejs2 "^0.4.8" + babel-plugin-polyfill-corejs3 "^0.9.0" + babel-plugin-polyfill-regenerator "^0.5.5" semver "^6.3.1" "@babel/plugin-transform-shorthand-properties@^7.23.3": @@ -961,12 +985,12 @@ "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-transform-typescript@^7.23.3": - version "7.23.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.23.5.tgz#83da13ef62a1ebddf2872487527094b31c9adb84" - integrity sha512-2fMkXEJkrmwgu2Bsv1Saxgj30IXZdJ+84lQcKKI7sm719oXs0BBw2ZENKdJdR1PjWndgLCEBNXJOri0fk7RYQA== + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.23.6.tgz#aa36a94e5da8d94339ae3a4e22d40ed287feb34c" + integrity sha512-6cBG5mBvUu4VUD04OHKnYzbuHNP8huDsD3EDqqpIpsswTDoqHCjLoHb6+QgsV1WsT2nipRqCPgxD3LXnEO7XfA== dependencies: "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-create-class-features-plugin" "^7.23.5" + "@babel/helper-create-class-features-plugin" "^7.23.6" "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-typescript" "^7.23.3" @@ -1002,17 +1026,17 @@ "@babel/helper-plugin-utils" "^7.22.5" "@babel/preset-env@^7.11.0", "@babel/preset-env@^7.12.1", "@babel/preset-env@^7.16.4": - version "7.23.5" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.23.5.tgz#350a3aedfa9f119ad045b068886457e895ba0ca1" - integrity sha512-0d/uxVD6tFGWXGDSfyMD1p2otoaKmu6+GD+NfAx0tMaH+dxORnp7T9TaVQ6mKyya7iBtCIVxHjWT7MuzzM9z+A== + version "7.24.0" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.24.0.tgz#11536a7f4b977294f0bdfad780f01a8ac8e183fc" + integrity sha512-ZxPEzV9IgvGn73iK0E6VB9/95Nd7aMFpbE0l8KQFDG70cOV9IxRP7Y2FUPmlK0v6ImlLqYX50iuZ3ZTVhOF2lA== dependencies: "@babel/compat-data" "^7.23.5" - "@babel/helper-compilation-targets" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-compilation-targets" "^7.23.6" + "@babel/helper-plugin-utils" "^7.24.0" "@babel/helper-validator-option" "^7.23.5" "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.23.3" "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.23.3" - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly" "^7.23.3" + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly" "^7.23.7" "@babel/plugin-proposal-private-property-in-object" "7.21.0-placeholder-for-preset-env.2" "@babel/plugin-syntax-async-generators" "^7.8.4" "@babel/plugin-syntax-class-properties" "^7.12.13" @@ -1033,13 +1057,13 @@ "@babel/plugin-syntax-top-level-await" "^7.14.5" "@babel/plugin-syntax-unicode-sets-regex" "^7.18.6" "@babel/plugin-transform-arrow-functions" "^7.23.3" - "@babel/plugin-transform-async-generator-functions" "^7.23.4" + "@babel/plugin-transform-async-generator-functions" "^7.23.9" "@babel/plugin-transform-async-to-generator" "^7.23.3" "@babel/plugin-transform-block-scoped-functions" "^7.23.3" "@babel/plugin-transform-block-scoping" "^7.23.4" "@babel/plugin-transform-class-properties" "^7.23.3" "@babel/plugin-transform-class-static-block" "^7.23.4" - "@babel/plugin-transform-classes" "^7.23.5" + "@babel/plugin-transform-classes" "^7.23.8" "@babel/plugin-transform-computed-properties" "^7.23.3" "@babel/plugin-transform-destructuring" "^7.23.3" "@babel/plugin-transform-dotall-regex" "^7.23.3" @@ -1047,7 +1071,7 @@ "@babel/plugin-transform-dynamic-import" "^7.23.4" "@babel/plugin-transform-exponentiation-operator" "^7.23.3" "@babel/plugin-transform-export-namespace-from" "^7.23.4" - "@babel/plugin-transform-for-of" "^7.23.3" + "@babel/plugin-transform-for-of" "^7.23.6" "@babel/plugin-transform-function-name" "^7.23.3" "@babel/plugin-transform-json-strings" "^7.23.4" "@babel/plugin-transform-literals" "^7.23.3" @@ -1055,13 +1079,13 @@ "@babel/plugin-transform-member-expression-literals" "^7.23.3" "@babel/plugin-transform-modules-amd" "^7.23.3" "@babel/plugin-transform-modules-commonjs" "^7.23.3" - "@babel/plugin-transform-modules-systemjs" "^7.23.3" + "@babel/plugin-transform-modules-systemjs" "^7.23.9" "@babel/plugin-transform-modules-umd" "^7.23.3" "@babel/plugin-transform-named-capturing-groups-regex" "^7.22.5" "@babel/plugin-transform-new-target" "^7.23.3" "@babel/plugin-transform-nullish-coalescing-operator" "^7.23.4" "@babel/plugin-transform-numeric-separator" "^7.23.4" - "@babel/plugin-transform-object-rest-spread" "^7.23.4" + "@babel/plugin-transform-object-rest-spread" "^7.24.0" "@babel/plugin-transform-object-super" "^7.23.3" "@babel/plugin-transform-optional-catch-binding" "^7.23.4" "@babel/plugin-transform-optional-chaining" "^7.23.4" @@ -1081,9 +1105,9 @@ "@babel/plugin-transform-unicode-regex" "^7.23.3" "@babel/plugin-transform-unicode-sets-regex" "^7.23.3" "@babel/preset-modules" "0.1.6-no-external-plugins" - babel-plugin-polyfill-corejs2 "^0.4.6" - babel-plugin-polyfill-corejs3 "^0.8.5" - babel-plugin-polyfill-regenerator "^0.5.3" + babel-plugin-polyfill-corejs2 "^0.4.8" + babel-plugin-polyfill-corejs3 "^0.9.0" + babel-plugin-polyfill-regenerator "^0.5.5" core-js-compat "^3.31.0" semver "^6.3.1" @@ -1124,42 +1148,49 @@ resolved "https://registry.yarnpkg.com/@babel/regjsgen/-/regjsgen-0.8.0.tgz#f0ba69b075e1f05fb2825b7fad991e7adbb18310" integrity sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA== -"@babel/runtime@^7.0.0", "@babel/runtime@^7.11.2", "@babel/runtime@^7.12.13", "@babel/runtime@^7.12.5", "@babel/runtime@^7.16.3", "@babel/runtime@^7.18.3", "@babel/runtime@^7.21.0", "@babel/runtime@^7.23.2", "@babel/runtime@^7.8.4", "@babel/runtime@^7.9.2": +"@babel/runtime@^7.0.0", "@babel/runtime@^7.12.13", "@babel/runtime@^7.18.3", "@babel/runtime@^7.21.0", "@babel/runtime@^7.9.2": version "7.23.5" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.23.5.tgz#11edb98f8aeec529b82b211028177679144242db" integrity sha512-NdUTHcPe4C99WxPub+K9l9tK5/lV4UXIoaHSYgzco9BCyjKAAwzdBI+wWtYqHt7LJdbo74ZjRPJgzVweq1sz0w== dependencies: regenerator-runtime "^0.14.0" -"@babel/template@^7.22.15", "@babel/template@^7.3.3": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.22.15.tgz#09576efc3830f0430f4548ef971dde1350ef2f38" - integrity sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w== +"@babel/runtime@^7.11.2", "@babel/runtime@^7.12.5", "@babel/runtime@^7.16.3", "@babel/runtime@^7.23.2", "@babel/runtime@^7.8.4": + version "7.24.0" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.24.0.tgz#584c450063ffda59697021430cb47101b085951e" + integrity sha512-Chk32uHMg6TnQdvw2e9IlqPpFX/6NLuK0Ys2PqLb7/gL5uFn9mXvK715FGLlOLQrcO4qIkNHkvPGktzzXexsFw== dependencies: - "@babel/code-frame" "^7.22.13" - "@babel/parser" "^7.22.15" - "@babel/types" "^7.22.15" + regenerator-runtime "^0.14.0" -"@babel/traverse@^7.23.5", "@babel/traverse@^7.7.2": - version "7.23.5" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.23.5.tgz#f546bf9aba9ef2b042c0e00d245990c15508e7ec" - integrity sha512-czx7Xy5a6sapWWRx61m1Ke1Ra4vczu1mCTtJam5zRTBOonfdJ+S/B6HYmGYu3fJtr8GGET3si6IhgWVBhJ/m8w== +"@babel/template@^7.22.15", "@babel/template@^7.24.0", "@babel/template@^7.3.3": + version "7.24.0" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.24.0.tgz#c6a524aa93a4a05d66aaf31654258fae69d87d50" + integrity sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA== dependencies: "@babel/code-frame" "^7.23.5" - "@babel/generator" "^7.23.5" + "@babel/parser" "^7.24.0" + "@babel/types" "^7.24.0" + +"@babel/traverse@^7.24.0", "@babel/traverse@^7.7.2": + version "7.24.0" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.24.0.tgz#4a408fbf364ff73135c714a2ab46a5eab2831b1e" + integrity sha512-HfuJlI8qq3dEDmNU5ChzzpZRWq+oxCZQyMzIMEqLho+AQnhMnKQUzH6ydo3RBl/YjPCuk68Y6s0Gx0AeyULiWw== + dependencies: + "@babel/code-frame" "^7.23.5" + "@babel/generator" "^7.23.6" "@babel/helper-environment-visitor" "^7.22.20" "@babel/helper-function-name" "^7.23.0" "@babel/helper-hoist-variables" "^7.22.5" "@babel/helper-split-export-declaration" "^7.22.6" - "@babel/parser" "^7.23.5" - "@babel/types" "^7.23.5" - debug "^4.1.0" + "@babel/parser" "^7.24.0" + "@babel/types" "^7.24.0" + debug "^4.3.1" globals "^11.1.0" -"@babel/types@^7.0.0", "@babel/types@^7.12.6", "@babel/types@^7.20.7", "@babel/types@^7.22.15", "@babel/types@^7.22.19", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.23.4", "@babel/types@^7.23.5", "@babel/types@^7.3.3", "@babel/types@^7.4.4": - version "7.23.5" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.23.5.tgz#48d730a00c95109fa4393352705954d74fb5b602" - integrity sha512-ON5kSOJwVO6xXVRTvOI0eOnWe7VdUcIpsovGo9U/Br4Ie4UVFQTboO2cYnDhAGU6Fp+UxSiT+pMft0SMHfuq6w== +"@babel/types@^7.0.0", "@babel/types@^7.12.6", "@babel/types@^7.20.7", "@babel/types@^7.22.15", "@babel/types@^7.22.19", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.23.4", "@babel/types@^7.23.6", "@babel/types@^7.24.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4": + version "7.24.0" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.24.0.tgz#3b951f435a92e7333eba05b7566fd297960ea1bf" + integrity sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w== dependencies: "@babel/helper-string-parser" "^7.23.4" "@babel/helper-validator-identifier" "^7.22.20" @@ -1984,9 +2015,9 @@ integrity sha512-KmKDg01SrQ7VbTD3+cPWf/UfpF5MSwm3v7MWi0n5t8HnnadT13MF0MJCDSXbBWnzLv1ZKJ6zlyAOeARWX+DpjQ== "@csstools/normalize.css@*": - version "12.0.0" - resolved "https://registry.yarnpkg.com/@csstools/normalize.css/-/normalize.css-12.0.0.tgz#a9583a75c3f150667771f30b60d9f059473e62c4" - integrity sha512-M0qqxAcwCsIVfpFQSlGN5XjXWu8l5JDZN+fPt1LeW5SZexQTgnaEvgXAY+CeygRw0EeppWHi12JxESWiWrB0Sg== + version "12.1.1" + resolved "https://registry.yarnpkg.com/@csstools/normalize.css/-/normalize.css-12.1.1.tgz#f0ad221b7280f3fc814689786fd9ee092776ef8f" + integrity sha512-YAYeJ+Xqh7fUou1d1j9XHl44BmsuThiTr4iNrgCQ3J27IbhXsxXDGZ1cXv8Qvs99d4rBbLiSKy3+WZiet32PcQ== "@csstools/postcss-cascade-layers@^1.1.1": version "1.1.1" @@ -2240,25 +2271,25 @@ minimatch "^3.1.2" strip-json-comments "^3.1.1" -"@eslint/js@8.55.0": - version "8.55.0" - resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.55.0.tgz#b721d52060f369aa259cf97392403cb9ce892ec6" - integrity sha512-qQfo2mxH5yVom1kacMtZZJFVdW+E70mqHMJvVg6WTLo+VBuQJ4TojZlfWBjK0ve5BdEeNAVxOsl/nvNMpJOaJA== +"@eslint/js@8.57.0": + version "8.57.0" + resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.57.0.tgz#a5417ae8427873f1dd08b70b3574b453e67b5f7f" + integrity sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g== "@fastify/busboy@^2.0.0": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@fastify/busboy/-/busboy-2.1.0.tgz#0709e9f4cb252351c609c6e6d8d6779a8d25edff" - integrity sha512-+KpH+QxZU7O4675t3mnkQKcZZg56u+K/Ct2K+N2AZYNVK8kyeo/bI18tI8aPm3tvNNRyTWfj6s5tnGNlcbQRsA== + version "2.1.1" + resolved "https://registry.yarnpkg.com/@fastify/busboy/-/busboy-2.1.1.tgz#b9da6a878a371829a0502c9b6c1c143ef6663f4d" + integrity sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA== -"@firebase/analytics-compat@0.2.6": - version "0.2.6" - resolved "https://registry.yarnpkg.com/@firebase/analytics-compat/-/analytics-compat-0.2.6.tgz#50063978c42f13eb800e037e96ac4b17236841f4" - integrity sha512-4MqpVLFkGK7NJf/5wPEEP7ePBJatwYpyjgJ+wQHQGHfzaCDgntOnl9rL2vbVGGKCnRqWtZDIWhctB86UWXaX2Q== +"@firebase/analytics-compat@0.2.7": + version "0.2.7" + resolved "https://registry.yarnpkg.com/@firebase/analytics-compat/-/analytics-compat-0.2.7.tgz#affad547d6db9c13424950df972019fb0e2ecaeb" + integrity sha512-17VCly4P0VFBDqaaal7m1nhyYQwsygtaTpSsnc51sFPRrr9XIYtnD8ficon9fneEGEoJQ2g7OtASvhwX9EbK8g== dependencies: - "@firebase/analytics" "0.10.0" + "@firebase/analytics" "0.10.1" "@firebase/analytics-types" "0.8.0" - "@firebase/component" "0.6.4" - "@firebase/util" "1.9.3" + "@firebase/component" "0.6.5" + "@firebase/util" "1.9.4" tslib "^2.1.0" "@firebase/analytics-types@0.8.0": @@ -2266,27 +2297,27 @@ resolved "https://registry.yarnpkg.com/@firebase/analytics-types/-/analytics-types-0.8.0.tgz#551e744a29adbc07f557306530a2ec86add6d410" integrity sha512-iRP+QKI2+oz3UAh4nPEq14CsEjrjD6a5+fuypjScisAh9kXKFvdJOZJDwk7kikLvWVLGEs9+kIUS4LPQV7VZVw== -"@firebase/analytics@0.10.0": - version "0.10.0" - resolved "https://registry.yarnpkg.com/@firebase/analytics/-/analytics-0.10.0.tgz#9c6986acd573c6c6189ffb52d0fd63c775db26d7" - integrity sha512-Locv8gAqx0e+GX/0SI3dzmBY5e9kjVDtD+3zCFLJ0tH2hJwuCAiL+5WkHuxKj92rqQj/rvkBUCfA1ewlX2hehg== +"@firebase/analytics@0.10.1": + version "0.10.1" + resolved "https://registry.yarnpkg.com/@firebase/analytics/-/analytics-0.10.1.tgz#97d750020c5b3b41fd5191074c683a7a8c8900a5" + integrity sha512-5mnH1aQa99J5lZMJwTNzIoRc4yGXHf+fOn+EoEWhCDA3XGPweGHcylCbqq+G1wVJmfILL57fohDMa8ftMZ+44g== dependencies: - "@firebase/component" "0.6.4" - "@firebase/installations" "0.6.4" + "@firebase/component" "0.6.5" + "@firebase/installations" "0.6.5" "@firebase/logger" "0.4.0" - "@firebase/util" "1.9.3" + "@firebase/util" "1.9.4" tslib "^2.1.0" -"@firebase/app-check-compat@0.3.8": - version "0.3.8" - resolved "https://registry.yarnpkg.com/@firebase/app-check-compat/-/app-check-compat-0.3.8.tgz#b71d324c27d49f2a9cab7c5aeab84e1350bd87a9" - integrity sha512-EaETtChR4UgMokJFw+r6jfcIyCTUZSe0a6ivF37D9MxlG9G3wzK1COyXgxoX96GzXmDPc2aubX4PxCrdVHhrnA== +"@firebase/app-check-compat@0.3.9": + version "0.3.9" + resolved "https://registry.yarnpkg.com/@firebase/app-check-compat/-/app-check-compat-0.3.9.tgz#c67caa1cd5043fecab7f8ba1bc45ab047210ad83" + integrity sha512-7LxyupQ8XeEHRh72mO+tqm69kHT6KbWi2KtFMGedJ6tNbwzFzojcXESMKN8RpADXbYoQgY3loWMJjMx4r2Zt7w== dependencies: - "@firebase/app-check" "0.8.1" + "@firebase/app-check" "0.8.2" "@firebase/app-check-types" "0.5.0" - "@firebase/component" "0.6.4" + "@firebase/component" "0.6.5" "@firebase/logger" "0.4.0" - "@firebase/util" "1.9.3" + "@firebase/util" "1.9.4" tslib "^2.1.0" "@firebase/app-check-interop-types@0.3.0": @@ -2299,25 +2330,25 @@ resolved "https://registry.yarnpkg.com/@firebase/app-check-types/-/app-check-types-0.5.0.tgz#1b02826213d7ce6a1cf773c329b46ea1c67064f4" integrity sha512-uwSUj32Mlubybw7tedRzR24RP8M8JUVR3NPiMk3/Z4bCmgEKTlQBwMXrehDAZ2wF+TsBq0SN1c6ema71U/JPyQ== -"@firebase/app-check@0.8.1": - version "0.8.1" - resolved "https://registry.yarnpkg.com/@firebase/app-check/-/app-check-0.8.1.tgz#df335c896552d76783b06a6be0fc2ff1bc423f03" - integrity sha512-zi3vbM5tb/eGRWyiqf+1DXbxFu9Q07dnm46rweodgUpH9B8svxYkHfNwYWx7F5mjHU70SQDuaojH1We5ws9OKA== +"@firebase/app-check@0.8.2": + version "0.8.2" + resolved "https://registry.yarnpkg.com/@firebase/app-check/-/app-check-0.8.2.tgz#9ede3558cc7dc1ac8206a772ba692e67daf7e65e" + integrity sha512-A2B5+ldOguYAeqW1quFN5qNdruSNRrg4W59ag1Eq6QzxuHNIkrE+TrapfrW/z5NYFjCxAYqr/unVCgmk80Dwcg== dependencies: - "@firebase/component" "0.6.4" + "@firebase/component" "0.6.5" "@firebase/logger" "0.4.0" - "@firebase/util" "1.9.3" + "@firebase/util" "1.9.4" tslib "^2.1.0" -"@firebase/app-compat@0.2.25": - version "0.2.25" - resolved "https://registry.yarnpkg.com/@firebase/app-compat/-/app-compat-0.2.25.tgz#214bfd602994966ed765247ba8f6948b9eb0985e" - integrity sha512-B/JtCp1FsTuzlh1tIGQpYM2AXps21/zlzpFsk5LRsROOTRhBcR2N45AyaONPFD06C0yS0Tw19foxADzHyOSC3A== +"@firebase/app-compat@0.2.29": + version "0.2.29" + resolved "https://registry.yarnpkg.com/@firebase/app-compat/-/app-compat-0.2.29.tgz#d55a5800acaebc0a1a0ea33d548bb80dc711ec93" + integrity sha512-NqUdegXJfwphx9i/2bOE2CTZ55TC9bbDg+iwkxVShsPBJhD3CzQJkFhoDz4ccfbJaKZGsqjY3fisgX5kbDROnA== dependencies: - "@firebase/app" "0.9.25" - "@firebase/component" "0.6.4" + "@firebase/app" "0.9.29" + "@firebase/component" "0.6.5" "@firebase/logger" "0.4.0" - "@firebase/util" "1.9.3" + "@firebase/util" "1.9.4" tslib "^2.1.0" "@firebase/app-types@0.9.0": @@ -2325,28 +2356,28 @@ resolved "https://registry.yarnpkg.com/@firebase/app-types/-/app-types-0.9.0.tgz#35b5c568341e9e263b29b3d2ba0e9cfc9ec7f01e" integrity sha512-AeweANOIo0Mb8GiYm3xhTEBVCmPwTYAu9Hcd2qSkLuga/6+j9b1Jskl5bpiSQWy9eJ/j5pavxj6eYogmnuzm+Q== -"@firebase/app@0.9.25": - version "0.9.25" - resolved "https://registry.yarnpkg.com/@firebase/app/-/app-0.9.25.tgz#411607c9d11f2d2d66c9b1a0de2ffa6d1232261c" - integrity sha512-fX22gL5USXhOK21Hlh3oTeOzQZ6th6S2JrjXNEpBARmwzuUkqmVGVdsOCIFYIsLpK0dQE3o8xZnLrRg5wnzZ/g== +"@firebase/app@0.9.29": + version "0.9.29" + resolved "https://registry.yarnpkg.com/@firebase/app/-/app-0.9.29.tgz#444280f0ddf1da4b2a974c86a6a8c6405d950fb7" + integrity sha512-HbKTjfmILklasIu/ij6zKnFf3SgLYXkBDVN7leJfVGmohl+zA7Ig+eXM1ZkT1pyBJ8FTYR+mlOJer/lNEnUCtw== dependencies: - "@firebase/component" "0.6.4" + "@firebase/component" "0.6.5" "@firebase/logger" "0.4.0" - "@firebase/util" "1.9.3" + "@firebase/util" "1.9.4" idb "7.1.1" tslib "^2.1.0" -"@firebase/auth-compat@0.5.1": - version "0.5.1" - resolved "https://registry.yarnpkg.com/@firebase/auth-compat/-/auth-compat-0.5.1.tgz#2a8a3ce05520bfa1e73f8c2caa1c9eb81d2df25e" - integrity sha512-rgDZnrDoekRvtzXVji8Z61wxxkof6pTkjYEkybILrjM8tGP9tx4xa9qGpF4ax3AzF+rKr7mIa9NnoXEK4UNqmQ== +"@firebase/auth-compat@0.5.4": + version "0.5.4" + resolved "https://registry.yarnpkg.com/@firebase/auth-compat/-/auth-compat-0.5.4.tgz#a7ae705e5f85e786f280bae87fe06bda2d686d05" + integrity sha512-EtRVW9s0YsuJv3GnOGDoLUW3Pp9f3HcqWA2WK92E30Qa0FEVRwCSRLVQwn9td+SLVY3AP9gi/auC1q3osd4yCg== dependencies: - "@firebase/auth" "1.5.1" + "@firebase/auth" "1.6.2" "@firebase/auth-types" "0.12.0" - "@firebase/component" "0.6.4" - "@firebase/util" "1.9.3" + "@firebase/component" "0.6.5" + "@firebase/util" "1.9.4" tslib "^2.1.0" - undici "5.26.5" + undici "5.28.3" "@firebase/auth-interop-types@0.2.1": version "0.2.1" @@ -2358,67 +2389,67 @@ resolved "https://registry.yarnpkg.com/@firebase/auth-types/-/auth-types-0.12.0.tgz#f28e1b68ac3b208ad02a15854c585be6da3e8e79" integrity sha512-pPwaZt+SPOshK8xNoiQlK5XIrS97kFYc3Rc7xmy373QsOJ9MmqXxLaYssP5Kcds4wd2qK//amx/c+A8O2fVeZA== -"@firebase/auth@1.5.1": - version "1.5.1" - resolved "https://registry.yarnpkg.com/@firebase/auth/-/auth-1.5.1.tgz#214718a45cbdf6bdbe5086e92a70d1a0fea61962" - integrity sha512-sVi7rq2YneLGJFqHa5S6nDfCHix9yuVV3RLhj/pWPlB4a36ofXal4E6PJwpeMc8uLjWEr1aovYN1jkXWNB6Avw== +"@firebase/auth@1.6.2": + version "1.6.2" + resolved "https://registry.yarnpkg.com/@firebase/auth/-/auth-1.6.2.tgz#d8a9a622b8d4e8eb8c42ea544fcf647d0494651c" + integrity sha512-BFo/Nj1AAbKLbFiUyXCcnT/bSqMJicFOgdTAKzlXvCul7+eUE29vWmzd1g59O3iKAxvv3+fbQYjQVJpNTTHIyw== dependencies: - "@firebase/component" "0.6.4" + "@firebase/component" "0.6.5" "@firebase/logger" "0.4.0" - "@firebase/util" "1.9.3" + "@firebase/util" "1.9.4" tslib "^2.1.0" - undici "5.26.5" + undici "5.28.3" -"@firebase/component@0.6.4": - version "0.6.4" - resolved "https://registry.yarnpkg.com/@firebase/component/-/component-0.6.4.tgz#8981a6818bd730a7554aa5e0516ffc9b1ae3f33d" - integrity sha512-rLMyrXuO9jcAUCaQXCMjCMUsWrba5fzHlNK24xz5j2W6A/SRmK8mZJ/hn7V0fViLbxC0lPMtrK1eYzk6Fg03jA== +"@firebase/component@0.6.5": + version "0.6.5" + resolved "https://registry.yarnpkg.com/@firebase/component/-/component-0.6.5.tgz#8cc7334f2081d700f2769caaa8dae3ac4c1fe37e" + integrity sha512-2tVDk1ixi12sbDmmfITK8lxSjmcb73BMF6Qwc3U44hN/J1Fi1QY/Hnnb6klFlbB9/G16a3J3d4nXykye2EADTw== dependencies: - "@firebase/util" "1.9.3" + "@firebase/util" "1.9.4" tslib "^2.1.0" -"@firebase/database-compat@1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@firebase/database-compat/-/database-compat-1.0.2.tgz#be6e91fcac6cb392fb7f9285e065c115c810ae5f" - integrity sha512-09ryJnXDvuycsxn8aXBzLhBTuCos3HEnCOBWY6hosxfYlNCGnLvG8YMlbSAt5eNhf7/00B095AEfDsdrrLjxqA== +"@firebase/database-compat@1.0.3": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@firebase/database-compat/-/database-compat-1.0.3.tgz#f7a255af6208d2d4d7af10ec2c9ecd9af4ff52d5" + integrity sha512-7tHEOcMbK5jJzHWyphPux4osogH/adWwncxdMxdBpB9g1DNIyY4dcz1oJdlkXGM/i/AjUBesZsd5CuwTRTBNTw== dependencies: - "@firebase/component" "0.6.4" - "@firebase/database" "1.0.2" - "@firebase/database-types" "1.0.0" + "@firebase/component" "0.6.5" + "@firebase/database" "1.0.3" + "@firebase/database-types" "1.0.1" "@firebase/logger" "0.4.0" - "@firebase/util" "1.9.3" + "@firebase/util" "1.9.4" tslib "^2.1.0" -"@firebase/database-types@1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@firebase/database-types/-/database-types-1.0.0.tgz#3f7f71c2c3fd1e29d15fce513f14dae2e7543f2a" - integrity sha512-SjnXStoE0Q56HcFgNQ+9SsmJc0c8TqGARdI/T44KXy+Ets3r6x/ivhQozT66bMnCEjJRywYoxNurRTMlZF8VNg== +"@firebase/database-types@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@firebase/database-types/-/database-types-1.0.1.tgz#1e7cd9fec03f6ca772c019d839cc72d9b2eda63c" + integrity sha512-Tmcmx5XgiI7UVF/4oGg2P3AOTfq3WKEPsm2yf+uXtN7uG/a4WTWhVMrXGYRY2ZUL1xPxv9V33wQRJ+CcrUhVXw== dependencies: "@firebase/app-types" "0.9.0" - "@firebase/util" "1.9.3" + "@firebase/util" "1.9.4" -"@firebase/database@1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@firebase/database/-/database-1.0.2.tgz#2d13768f7920715065cc8c65d96cc38179008c13" - integrity sha512-8X6NBJgUQzDz0xQVaCISoOLINKat594N2eBbMR3Mu/MH/ei4WM+aAMlsNzngF22eljXu1SILP5G3evkyvsG3Ng== +"@firebase/database@1.0.3": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@firebase/database/-/database-1.0.3.tgz#88caee93188d28aca355236e9ad69f373f628804" + integrity sha512-9fjqLt9JzL46gw9+NRqsgQEMjgRwfd8XtzcKqG+UYyhVeFCdVRQ0Wp6Dw/dvYHnbH5vNEKzNv36dcB4p+PIAAA== dependencies: "@firebase/app-check-interop-types" "0.3.0" "@firebase/auth-interop-types" "0.2.1" - "@firebase/component" "0.6.4" + "@firebase/component" "0.6.5" "@firebase/logger" "0.4.0" - "@firebase/util" "1.9.3" + "@firebase/util" "1.9.4" faye-websocket "0.11.4" tslib "^2.1.0" -"@firebase/firestore-compat@0.3.23": - version "0.3.23" - resolved "https://registry.yarnpkg.com/@firebase/firestore-compat/-/firestore-compat-0.3.23.tgz#7d17831edc384a2f889cae6ddec52373f6741c4a" - integrity sha512-uUTBiP0GLVBETaOCfB11d33OWB8x1r2G1Xrl0sRK3Va0N5LJ/GRvKVSGfM7VScj+ypeHe8RpdwKoCqLpN1e+uA== +"@firebase/firestore-compat@0.3.27": + version "0.3.27" + resolved "https://registry.yarnpkg.com/@firebase/firestore-compat/-/firestore-compat-0.3.27.tgz#146024bf772f1b6aa65a7b9e17979d59c2fb5fe0" + integrity sha512-gY2q0fCDJvPg/IurZQbBM7MIVjxA1/LsvfgFOubUTrex5KTY9qm4/2V2R79eAs8Q+b4B8soDtlEjk6L8BW1Crw== dependencies: - "@firebase/component" "0.6.4" - "@firebase/firestore" "4.4.0" + "@firebase/component" "0.6.5" + "@firebase/firestore" "4.5.0" "@firebase/firestore-types" "3.0.0" - "@firebase/util" "1.9.3" + "@firebase/util" "1.9.4" tslib "^2.1.0" "@firebase/firestore-types@3.0.0": @@ -2426,29 +2457,29 @@ resolved "https://registry.yarnpkg.com/@firebase/firestore-types/-/firestore-types-3.0.0.tgz#f3440d5a1cc2a722d361b24cefb62ca8b3577af3" integrity sha512-Meg4cIezHo9zLamw0ymFYBD4SMjLb+ZXIbuN7T7ddXN6MGoICmOTq3/ltdCGoDCS2u+H1XJs2u/cYp75jsX9Qw== -"@firebase/firestore@4.4.0": - version "4.4.0" - resolved "https://registry.yarnpkg.com/@firebase/firestore/-/firestore-4.4.0.tgz#c90c65c270538c34a6271827f20d67244f121933" - integrity sha512-VeDXD9PUjvcWY1tInBOMTIu2pijR3YYy+QAe5cxCo1Q1vW+aA/mpQHhebPM1J6b4Zd1MuUh8xpBRvH9ujKR56A== +"@firebase/firestore@4.5.0": + version "4.5.0" + resolved "https://registry.yarnpkg.com/@firebase/firestore/-/firestore-4.5.0.tgz#f614495970d897b146c5d6cec17c213db0528497" + integrity sha512-rXS6v4HbsN6vZQlq2fLW1ZHb+J5SnS+8Zqb/McbKFIrGYjPUZo5CyO75mkgtlR1tCYAwCebaqoEWb6JHgZv/ww== dependencies: - "@firebase/component" "0.6.4" + "@firebase/component" "0.6.5" "@firebase/logger" "0.4.0" - "@firebase/util" "1.9.3" + "@firebase/util" "1.9.4" "@firebase/webchannel-wrapper" "0.10.5" "@grpc/grpc-js" "~1.9.0" "@grpc/proto-loader" "^0.7.8" tslib "^2.1.0" - undici "5.26.5" + undici "5.28.3" -"@firebase/functions-compat@0.3.6": - version "0.3.6" - resolved "https://registry.yarnpkg.com/@firebase/functions-compat/-/functions-compat-0.3.6.tgz#7074b88c4a56e6a4adc61bd692e2a872bd62b196" - integrity sha512-RQpO3yuHtnkqLqExuAT2d0u3zh8SDbeBYK5EwSCBKI9mjrFeJRXBnd3pEG+x5SxGJLy56/5pQf73mwt0OuH5yg== +"@firebase/functions-compat@0.3.8": + version "0.3.8" + resolved "https://registry.yarnpkg.com/@firebase/functions-compat/-/functions-compat-0.3.8.tgz#a83a7ad2788db48483ccc86a80a12f0d824133da" + integrity sha512-VDHSw6UOu8RxfgAY/q8e+Jn+9Fh60Fc28yck0yfMsi2e0BiWgonIMWkFspFGGLgOJebTHl+hc+9v91rhzU6xlg== dependencies: - "@firebase/component" "0.6.4" - "@firebase/functions" "0.11.0" + "@firebase/component" "0.6.5" + "@firebase/functions" "0.11.2" "@firebase/functions-types" "0.6.0" - "@firebase/util" "1.9.3" + "@firebase/util" "1.9.4" tslib "^2.1.0" "@firebase/functions-types@0.6.0": @@ -2456,28 +2487,28 @@ resolved "https://registry.yarnpkg.com/@firebase/functions-types/-/functions-types-0.6.0.tgz#ccd7000dc6fc668f5acb4e6a6a042a877a555ef2" integrity sha512-hfEw5VJtgWXIRf92ImLkgENqpL6IWpYaXVYiRkFY1jJ9+6tIhWM7IzzwbevwIIud/jaxKVdRzD7QBWfPmkwCYw== -"@firebase/functions@0.11.0": - version "0.11.0" - resolved "https://registry.yarnpkg.com/@firebase/functions/-/functions-0.11.0.tgz#ce48ba39be7ec4cd20eb449616868e8c2bee4a8a" - integrity sha512-n1PZxKnJ++k73Q8khTPwihlbeKo6emnGzE0hX6QVQJsMq82y/XKmNpw2t/q30VJgwaia3ZXU1fd1C5wHncL+Zg== +"@firebase/functions@0.11.2": + version "0.11.2" + resolved "https://registry.yarnpkg.com/@firebase/functions/-/functions-0.11.2.tgz#bcd10d7e7fa3cd185a6c3efe1776731b0222c14d" + integrity sha512-2NULTYOZbu0rXczwfYdqQH0w1FmmYrKjTy1YPQSHLCAkMBdfewoKmVm4Lyo2vRn0H9ZndciLY7NszKDFt9MKCQ== dependencies: "@firebase/app-check-interop-types" "0.3.0" "@firebase/auth-interop-types" "0.2.1" - "@firebase/component" "0.6.4" + "@firebase/component" "0.6.5" "@firebase/messaging-interop-types" "0.2.0" - "@firebase/util" "1.9.3" + "@firebase/util" "1.9.4" tslib "^2.1.0" - undici "5.26.5" + undici "5.28.3" -"@firebase/installations-compat@0.2.4": - version "0.2.4" - resolved "https://registry.yarnpkg.com/@firebase/installations-compat/-/installations-compat-0.2.4.tgz#b5557c897b4cd3635a59887a8bf69c3731aaa952" - integrity sha512-LI9dYjp0aT9Njkn9U4JRrDqQ6KXeAmFbRC0E7jI7+hxl5YmRWysq5qgQl22hcWpTk+cm3es66d/apoDU/A9n6Q== +"@firebase/installations-compat@0.2.5": + version "0.2.5" + resolved "https://registry.yarnpkg.com/@firebase/installations-compat/-/installations-compat-0.2.5.tgz#e23ff86dc5a4b856f5f3d3abafeda7362daa38c5" + integrity sha512-usvoIaog5CHEw082HXLrKAZ1qd4hIC3N/LDe2NqBgI3pkGE/7auLVM4Gn5gvyryp0x8z/IP1+d9fkGUj2OaGLQ== dependencies: - "@firebase/component" "0.6.4" - "@firebase/installations" "0.6.4" + "@firebase/component" "0.6.5" + "@firebase/installations" "0.6.5" "@firebase/installations-types" "0.5.0" - "@firebase/util" "1.9.3" + "@firebase/util" "1.9.4" tslib "^2.1.0" "@firebase/installations-types@0.5.0": @@ -2485,14 +2516,14 @@ resolved "https://registry.yarnpkg.com/@firebase/installations-types/-/installations-types-0.5.0.tgz#2adad64755cd33648519b573ec7ec30f21fb5354" integrity sha512-9DP+RGfzoI2jH7gY4SlzqvZ+hr7gYzPODrbzVD82Y12kScZ6ZpRg/i3j6rleto8vTFC8n6Len4560FnV1w2IRg== -"@firebase/installations@0.6.4": - version "0.6.4" - resolved "https://registry.yarnpkg.com/@firebase/installations/-/installations-0.6.4.tgz#20382e33e6062ac5eff4bede8e468ed4c367609e" - integrity sha512-u5y88rtsp7NYkCHC3ElbFBrPtieUybZluXyzl7+4BsIz4sqb4vSAuwHEUgCgCeaQhvsnxDEU6icly8U9zsJigA== +"@firebase/installations@0.6.5": + version "0.6.5" + resolved "https://registry.yarnpkg.com/@firebase/installations/-/installations-0.6.5.tgz#1d6e0a581747bfaca54f11bf722e1f3da00dcc9c" + integrity sha512-0xxnQWw8rSRzu0ZOCkZaO+MJ0LkDAfwwTB2Z1SxRK6FAz5xkxD1ZUwM0WbCRni49PKubCrZYOJ6yg7tSjU7AKA== dependencies: - "@firebase/component" "0.6.4" - "@firebase/util" "1.9.3" - idb "7.0.1" + "@firebase/component" "0.6.5" + "@firebase/util" "1.9.4" + idb "7.1.1" tslib "^2.1.0" "@firebase/logger@0.4.0": @@ -2502,14 +2533,14 @@ dependencies: tslib "^2.1.0" -"@firebase/messaging-compat@0.2.5": - version "0.2.5" - resolved "https://registry.yarnpkg.com/@firebase/messaging-compat/-/messaging-compat-0.2.5.tgz#9be03c70eac8f6f6c93f3fc804fe345bd05dcf57" - integrity sha512-qHQZxm4hEG8/HFU/ls5/bU+rpnlPDoZoqi3ATMeb6s4hovYV9+PfV5I7ZrKV5eFFv47Hx1PWLe5uPnS4e7gMwQ== +"@firebase/messaging-compat@0.2.6": + version "0.2.6" + resolved "https://registry.yarnpkg.com/@firebase/messaging-compat/-/messaging-compat-0.2.6.tgz#ea89934bff5f048576dc1c4ce87e0c4c2141829b" + integrity sha512-Q2xC1s4L7Vpss7P7Gy6GuIS+xmJrf/vm9+gX76IK1Bo1TjoKwleCLHt1LHkPz5Rvqg5pTgzzI8qqPhBpZosFCg== dependencies: - "@firebase/component" "0.6.4" - "@firebase/messaging" "0.12.5" - "@firebase/util" "1.9.3" + "@firebase/component" "0.6.5" + "@firebase/messaging" "0.12.6" + "@firebase/util" "1.9.4" tslib "^2.1.0" "@firebase/messaging-interop-types@0.2.0": @@ -2517,28 +2548,28 @@ resolved "https://registry.yarnpkg.com/@firebase/messaging-interop-types/-/messaging-interop-types-0.2.0.tgz#6056f8904a696bf0f7fdcf5f2ca8f008e8f6b064" integrity sha512-ujA8dcRuVeBixGR9CtegfpU4YmZf3Lt7QYkcj693FFannwNuZgfAYaTmbJ40dtjB81SAu6tbFPL9YLNT15KmOQ== -"@firebase/messaging@0.12.5": - version "0.12.5" - resolved "https://registry.yarnpkg.com/@firebase/messaging/-/messaging-0.12.5.tgz#59c84353974f851887b8a4b0e43e26560213d0e7" - integrity sha512-i/rrEI2k9ueFhdIr8KQsptWGskrsnkC5TkohCTrJKz9P0C/PbNv14IAMkwhMJTqIur5VwuOnrUkc9Kdz7awekw== +"@firebase/messaging@0.12.6": + version "0.12.6" + resolved "https://registry.yarnpkg.com/@firebase/messaging/-/messaging-0.12.6.tgz#ac7c59ed39a89e00990e3b6dfd7929e13dd77563" + integrity sha512-IORsPp9IPWq4j4yEhTOZ6GAGi3gQwGc+4yexmTAlya+qeBRSdRnJg2iIU/aj+tcKDQYr9RQuQPgHHOdFIx//vA== dependencies: - "@firebase/component" "0.6.4" - "@firebase/installations" "0.6.4" + "@firebase/component" "0.6.5" + "@firebase/installations" "0.6.5" "@firebase/messaging-interop-types" "0.2.0" - "@firebase/util" "1.9.3" + "@firebase/util" "1.9.4" idb "7.1.1" tslib "^2.1.0" -"@firebase/performance-compat@0.2.4": - version "0.2.4" - resolved "https://registry.yarnpkg.com/@firebase/performance-compat/-/performance-compat-0.2.4.tgz#95cbf32057b5d9f0c75d804bc50e6ed3ba486274" - integrity sha512-nnHUb8uP9G8islzcld/k6Bg5RhX62VpbAb/Anj7IXs/hp32Eb2LqFPZK4sy3pKkBUO5wcrlRWQa6wKOxqlUqsg== +"@firebase/performance-compat@0.2.5": + version "0.2.5" + resolved "https://registry.yarnpkg.com/@firebase/performance-compat/-/performance-compat-0.2.5.tgz#9b827b1801fca19d8c379792326c076877ac5b91" + integrity sha512-jJwJkVyDcIMBaVGrZ6CRGs4m5FCZsWB5QCWYI3FdsHyIa9/TfteNDilxj9wGciF2naFIHDW7TgE69U5dAH9Ktg== dependencies: - "@firebase/component" "0.6.4" + "@firebase/component" "0.6.5" "@firebase/logger" "0.4.0" - "@firebase/performance" "0.6.4" + "@firebase/performance" "0.6.5" "@firebase/performance-types" "0.2.0" - "@firebase/util" "1.9.3" + "@firebase/util" "1.9.4" tslib "^2.1.0" "@firebase/performance-types@0.2.0": @@ -2546,27 +2577,27 @@ resolved "https://registry.yarnpkg.com/@firebase/performance-types/-/performance-types-0.2.0.tgz#400685f7a3455970817136d9b48ce07a4b9562ff" integrity sha512-kYrbr8e/CYr1KLrLYZZt2noNnf+pRwDq2KK9Au9jHrBMnb0/C9X9yWSXmZkFt4UIdsQknBq8uBB7fsybZdOBTA== -"@firebase/performance@0.6.4": - version "0.6.4" - resolved "https://registry.yarnpkg.com/@firebase/performance/-/performance-0.6.4.tgz#0ad766bfcfab4f386f4fe0bef43bbcf505015069" - integrity sha512-HfTn/bd8mfy/61vEqaBelNiNnvAbUtME2S25A67Nb34zVuCSCRIX4SseXY6zBnOFj3oLisaEqhVcJmVPAej67g== +"@firebase/performance@0.6.5": + version "0.6.5" + resolved "https://registry.yarnpkg.com/@firebase/performance/-/performance-0.6.5.tgz#5255fb18329719bc1fb2db29262e5ec15cbace06" + integrity sha512-OzAGcWhOqEFH9GdwUuY0oC5FSlnMejcnmSAhR+EjpI7exdDvixyLyCR4txjSHYNTbumrFBG+EP8GO11CNXRaJA== dependencies: - "@firebase/component" "0.6.4" - "@firebase/installations" "0.6.4" + "@firebase/component" "0.6.5" + "@firebase/installations" "0.6.5" "@firebase/logger" "0.4.0" - "@firebase/util" "1.9.3" + "@firebase/util" "1.9.4" tslib "^2.1.0" -"@firebase/remote-config-compat@0.2.4": - version "0.2.4" - resolved "https://registry.yarnpkg.com/@firebase/remote-config-compat/-/remote-config-compat-0.2.4.tgz#1f494c81a6c9560b1f9ca1b4fbd4bbbe47cf4776" - integrity sha512-FKiki53jZirrDFkBHglB3C07j5wBpitAaj8kLME6g8Mx+aq7u9P7qfmuSRytiOItADhWUj7O1JIv7n9q87SuwA== +"@firebase/remote-config-compat@0.2.5": + version "0.2.5" + resolved "https://registry.yarnpkg.com/@firebase/remote-config-compat/-/remote-config-compat-0.2.5.tgz#b6850a45567db5372778668c796a8d49723413f3" + integrity sha512-ImkNnLuGrD/bylBHDJigSY6LMwRrwt37wQbsGZhWG4QQ6KLzHzSf0nnFRRFvkOZodEUE57Ib8l74d6Yn/6TDUQ== dependencies: - "@firebase/component" "0.6.4" + "@firebase/component" "0.6.5" "@firebase/logger" "0.4.0" - "@firebase/remote-config" "0.4.4" + "@firebase/remote-config" "0.4.5" "@firebase/remote-config-types" "0.3.0" - "@firebase/util" "1.9.3" + "@firebase/util" "1.9.4" tslib "^2.1.0" "@firebase/remote-config-types@0.3.0": @@ -2574,26 +2605,26 @@ resolved "https://registry.yarnpkg.com/@firebase/remote-config-types/-/remote-config-types-0.3.0.tgz#689900dcdb3e5c059e8499b29db393e4e51314b4" integrity sha512-RtEH4vdcbXZuZWRZbIRmQVBNsE7VDQpet2qFvq6vwKLBIQRQR5Kh58M4ok3A3US8Sr3rubYnaGqZSurCwI8uMA== -"@firebase/remote-config@0.4.4": - version "0.4.4" - resolved "https://registry.yarnpkg.com/@firebase/remote-config/-/remote-config-0.4.4.tgz#6a496117054de58744bc9f382d2a6d1e14060c65" - integrity sha512-x1ioTHGX8ZwDSTOVp8PBLv2/wfwKzb4pxi0gFezS5GCJwbLlloUH4YYZHHS83IPxnua8b6l0IXUaWd0RgbWwzQ== +"@firebase/remote-config@0.4.5": + version "0.4.5" + resolved "https://registry.yarnpkg.com/@firebase/remote-config/-/remote-config-0.4.5.tgz#1aae1a4639bb0dddc14671c10dcd92c8a83c58c1" + integrity sha512-rGLqc/4OmxrS39RA9kgwa6JmgWytQuMo+B8pFhmGp3d++x2Hf9j+MLQfhOLyyUo64fNw20J19mLXhrXvKHsjZQ== dependencies: - "@firebase/component" "0.6.4" - "@firebase/installations" "0.6.4" + "@firebase/component" "0.6.5" + "@firebase/installations" "0.6.5" "@firebase/logger" "0.4.0" - "@firebase/util" "1.9.3" + "@firebase/util" "1.9.4" tslib "^2.1.0" -"@firebase/storage-compat@0.3.3": - version "0.3.3" - resolved "https://registry.yarnpkg.com/@firebase/storage-compat/-/storage-compat-0.3.3.tgz#9c670cd7bf37733bd5f4235e97a5f5dc2c3d9c7e" - integrity sha512-WNtjYPhpOA1nKcRu5lIodX0wZtP8pI0VxDJnk6lr+av7QZNS1s6zvr+ERDTve+Qu4Hq/ZnNaf3kBEQR2ccXn6A== +"@firebase/storage-compat@0.3.5": + version "0.3.5" + resolved "https://registry.yarnpkg.com/@firebase/storage-compat/-/storage-compat-0.3.5.tgz#4c55531dc5aa7d8b5f6c1ed4b5eeee09190072f1" + integrity sha512-5dJXfY5NxCF5NAk4dLvJqC+m6cgcf0Fr29nrMHwhwI34pBheQq2PdRZqALsqZCES9dnHTuFNlqGQDpLr+Ph4rw== dependencies: - "@firebase/component" "0.6.4" - "@firebase/storage" "0.12.0" + "@firebase/component" "0.6.5" + "@firebase/storage" "0.12.2" "@firebase/storage-types" "0.8.0" - "@firebase/util" "1.9.3" + "@firebase/util" "1.9.4" tslib "^2.1.0" "@firebase/storage-types@0.8.0": @@ -2601,20 +2632,20 @@ resolved "https://registry.yarnpkg.com/@firebase/storage-types/-/storage-types-0.8.0.tgz#f1e40a5361d59240b6e84fac7fbbbb622bfaf707" integrity sha512-isRHcGrTs9kITJC0AVehHfpraWFui39MPaU7Eo8QfWlqW7YPymBmRgjDrlOgFdURh6Cdeg07zmkLP5tzTKRSpg== -"@firebase/storage@0.12.0": - version "0.12.0" - resolved "https://registry.yarnpkg.com/@firebase/storage/-/storage-0.12.0.tgz#de23aca9a6504b3b08281c93111e655f15b7f566" - integrity sha512-SGs02Y/mmWBRsqZiYLpv4Sf7uZYZzMWVNN+aKiDqPsFBCzD6hLvGkXz+u98KAl8FqcjgB8BtSu01wm4pm76KHA== +"@firebase/storage@0.12.2": + version "0.12.2" + resolved "https://registry.yarnpkg.com/@firebase/storage/-/storage-0.12.2.tgz#73b1679fca74ec21a0f183beaa1b0b1a50f7e68b" + integrity sha512-MzanOBcxDx9oOwDaDPMuiYxd6CxcN1xZm+os5uNE3C1itbRKLhM9rzpODDKWzcbnHHFtXk3Q3lsK/d3Xa1WYYw== dependencies: - "@firebase/component" "0.6.4" - "@firebase/util" "1.9.3" + "@firebase/component" "0.6.5" + "@firebase/util" "1.9.4" tslib "^2.1.0" - undici "5.26.5" + undici "5.28.3" -"@firebase/util@1.9.3": - version "1.9.3" - resolved "https://registry.yarnpkg.com/@firebase/util/-/util-1.9.3.tgz#45458dd5cd02d90e55c656e84adf6f3decf4b7ed" - integrity sha512-DY02CRhOZwpzO36fHpuVysz6JZrscPiBXD0fXp6qSrL9oNOx5KWICKdR95C0lSITzxp0TZosVyHqzatE8JbcjA== +"@firebase/util@1.9.4": + version "1.9.4" + resolved "https://registry.yarnpkg.com/@firebase/util/-/util-1.9.4.tgz#68eee380ab7e7828ec0d8684c46a1abed2d7e334" + integrity sha512-WLonYmS1FGHT97TsUmRN3qnTh5TeeoJp1Gg5fithzuAgdZOUtsYECfy7/noQ3llaguios8r5BuXSEiK82+UrxQ== dependencies: tslib "^2.1.0" @@ -2624,9 +2655,9 @@ integrity sha512-eSkJsnhBWv5kCTSU1tSUVl9mpFu+5NXXunZc83le8GMjMlsWwQArSc7cJJ4yl+aDFY0NGLi0AjZWMn1axOrkRg== "@grpc/grpc-js@~1.9.0": - version "1.9.12" - resolved "https://registry.yarnpkg.com/@grpc/grpc-js/-/grpc-js-1.9.12.tgz#a45b23a7d9ee1eadc9fa8fe480e27edbc6544cdd" - integrity sha512-Um5MBuge32TS3lAKX02PGCnFM4xPT996yLgZNb5H03pn6NyJ4Iwn5YcPq6Jj9yxGRk7WOgaZFtVRH5iTdYBeUg== + version "1.9.14" + resolved "https://registry.yarnpkg.com/@grpc/grpc-js/-/grpc-js-1.9.14.tgz#236378822876cbf7903f9d61a0330410e8dcc5a1" + integrity sha512-nOpuzZ2G3IuMFN+UPPpKrC6NsLmWsTqSsm66IRfnBt1D4pwTqE27lmbpcPM+l2Ua4gE7PfjRHI6uedAy7hoXUw== dependencies: "@grpc/proto-loader" "^0.7.8" "@types/node" ">=12.12.47" @@ -2651,13 +2682,13 @@ resolved "https://registry.yarnpkg.com/@hookform/resolvers/-/resolvers-3.3.2.tgz#5c40f06fe8137390b071d961c66d27ee8f76f3bc" integrity sha512-Tw+GGPnBp+5DOsSg4ek3LCPgkBOuOgS5DsDV7qsWNH9LZc433kgsWICjlsh2J9p04H2K66hsXPPb9qn9ILdUtA== -"@humanwhocodes/config-array@^0.11.13": - version "0.11.13" - resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.13.tgz#075dc9684f40a531d9b26b0822153c1e832ee297" - integrity sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ== +"@humanwhocodes/config-array@^0.11.14": + version "0.11.14" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.14.tgz#d78e481a039f7566ecc9660b4ea7fe6b1fec442b" + integrity sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg== dependencies: - "@humanwhocodes/object-schema" "^2.0.1" - debug "^4.1.1" + "@humanwhocodes/object-schema" "^2.0.2" + debug "^4.3.1" minimatch "^3.0.5" "@humanwhocodes/module-importer@^1.0.1": @@ -2665,10 +2696,22 @@ resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== -"@humanwhocodes/object-schema@^2.0.1": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.1.tgz#e5211452df060fa8522b55c7b3c0c4d1981cb044" - integrity sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw== +"@humanwhocodes/object-schema@^2.0.2": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz#d9fae00a2d5cb40f92cfe64b47ad749fbc38f917" + integrity sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw== + +"@isaacs/cliui@^8.0.2": + version "8.0.2" + resolved "https://registry.yarnpkg.com/@isaacs/cliui/-/cliui-8.0.2.tgz#b37667b7bc181c168782259bab42474fbf52b550" + integrity sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA== + dependencies: + string-width "^5.1.2" + string-width-cjs "npm:string-width@^4.2.0" + strip-ansi "^7.0.1" + strip-ansi-cjs "npm:strip-ansi@^6.0.1" + wrap-ansi "^8.1.0" + wrap-ansi-cjs "npm:wrap-ansi@^7.0.0" "@istanbuljs/load-nyc-config@^1.0.0": version "1.1.0" @@ -2922,42 +2965,42 @@ "@types/yargs" "^17.0.8" chalk "^4.0.0" -"@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.2": - version "0.3.3" - resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz#7e02e6eb5df901aaedb08514203b096614024098" - integrity sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ== +"@jridgewell/gen-mapping@^0.3.2", "@jridgewell/gen-mapping@^0.3.5": + version "0.3.5" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz#dcce6aff74bdf6dad1a95802b69b04a2fcb1fb36" + integrity sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg== dependencies: - "@jridgewell/set-array" "^1.0.1" + "@jridgewell/set-array" "^1.2.1" "@jridgewell/sourcemap-codec" "^1.4.10" - "@jridgewell/trace-mapping" "^0.3.9" + "@jridgewell/trace-mapping" "^0.3.24" "@jridgewell/resolve-uri@^3.1.0": - version "3.1.1" - resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz#c08679063f279615a3326583ba3a90d1d82cc721" - integrity sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA== + version "3.1.2" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6" + integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== -"@jridgewell/set-array@^1.0.1": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" - integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== +"@jridgewell/set-array@^1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.2.1.tgz#558fb6472ed16a4c850b889530e6b36438c49280" + integrity sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A== "@jridgewell/source-map@^0.3.3": - version "0.3.5" - resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.5.tgz#a3bb4d5c6825aab0d281268f47f6ad5853431e91" - integrity sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ== + version "0.3.6" + resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.6.tgz#9d71ca886e32502eb9362c9a74a46787c36df81a" + integrity sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ== dependencies: - "@jridgewell/gen-mapping" "^0.3.0" - "@jridgewell/trace-mapping" "^0.3.9" + "@jridgewell/gen-mapping" "^0.3.5" + "@jridgewell/trace-mapping" "^0.3.25" "@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14": version "1.4.15" resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== -"@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.9": - version "0.3.20" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz#72e45707cf240fa6b081d0366f8265b0cd10197f" - integrity sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q== +"@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.20", "@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25": + version "0.3.25" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz#15f190e98895f3fc23276ee14bc76b675c2e50f0" + integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ== dependencies: "@jridgewell/resolve-uri" "^3.1.0" "@jridgewell/sourcemap-codec" "^1.4.14" @@ -2995,6 +3038,11 @@ "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" +"@pkgjs/parseargs@^0.11.0": + version "0.11.0" + resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33" + integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg== + "@pmmmwh/react-refresh-webpack-plugin@^0.5.3": version "0.5.11" resolved "https://registry.yarnpkg.com/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.5.11.tgz#7c2268cedaa0644d677e8c4f377bc8fb304f714a" @@ -3136,9 +3184,9 @@ picomatch "^2.2.2" "@rushstack/eslint-patch@^1.1.0": - version "1.6.0" - resolved "https://registry.yarnpkg.com/@rushstack/eslint-patch/-/eslint-patch-1.6.0.tgz#1898e7a7b943680d757417a47fb10f5fcc230b39" - integrity sha512-2/U3GXA6YiPYQDLGwtGlnNgKYBSwCFIHf8Y9LUY5VATHdtbLlU0Y1R3QoBnT0aB4qv/BEiVVsj7LJXoQCgJ2vA== + version "1.7.2" + resolved "https://registry.yarnpkg.com/@rushstack/eslint-patch/-/eslint-patch-1.7.2.tgz#2d4260033e199b3032a08b41348ac10de21c47e9" + integrity sha512-RbhOOTCNoCrbfkRyoXODZp75MlpiHMgbE5MEBZAnnnLyQNgrigEj4p0lzsMDyc1zVsJDLrivB58tgg3emX0eEA== "@sinclair/typebox@^0.24.1": version "0.24.51" @@ -3406,9 +3454,9 @@ "@types/babel__traverse" "*" "@types/babel__generator@*": - version "7.6.7" - resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.7.tgz#a7aebf15c7bc0eb9abd638bdb5c0b8700399c9d0" - integrity sha512-6Sfsq+EaaLrw4RmdFWE9Onp63TOUue71AWb4Gpa6JxzgTYtimbM086WnYTy2U67AofR++QKCo08ZP6pwx8YFHQ== + version "7.6.8" + resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.8.tgz#f836c61f48b1346e7d2b0d93c6dacc5b9535d3ab" + integrity sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw== dependencies: "@babel/types" "^7.0.0" @@ -3421,9 +3469,9 @@ "@babel/types" "^7.0.0" "@types/babel__traverse@*", "@types/babel__traverse@^7.0.4", "@types/babel__traverse@^7.0.6": - version "7.20.4" - resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.20.4.tgz#ec2c06fed6549df8bc0eb4615b683749a4a92e1b" - integrity sha512-mSM/iKUk5fDDrEV/e83qY+Cr3I1+Q3qqTuEn++HAWYjEa1+NxZr6CNrcJGf2ZTnq4HoFGC3zaTPZTobCzCFukA== + version "7.20.5" + resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.20.5.tgz#7b7502be0aa80cc4ef22978846b983edaafcd4dd" + integrity sha512-WXCyOcRtH37HAUkpXhUduaxdm82b4GSlyTqajXviN4EfiuPgNYR109xMCKvpl6zPIpua0DGlMEDCq+g8EdoheQ== dependencies: "@babel/types" "^7.20.7" @@ -3466,14 +3514,14 @@ "@types/estree" "*" "@types/eslint@*", "@types/eslint@^7.29.0 || ^8.4.1": - version "8.44.8" - resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-8.44.8.tgz#f4fe1dab9b3d3dd98082d4b9f80e59ab40f1261c" - integrity sha512-4K8GavROwhrYl2QXDXm0Rv9epkA8GBFu0EI+XrrnnuCl7u8CWBRusX7fXJfanhZTDWSAL24gDI/UqXyUM0Injw== + version "8.56.5" + resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-8.56.5.tgz#94b88cab77588fcecdd0771a6d576fa1c0af9d02" + integrity sha512-u5/YPJHo1tvkSF2CE0USEkxon82Z5DBy2xR+qfyYNszpX9qcs4sT6uq2kBbj4BXY1+DBGDPnrhMZV3pKWGNukw== dependencies: "@types/estree" "*" "@types/json-schema" "*" -"@types/estree@*", "@types/estree@^1.0.0": +"@types/estree@*", "@types/estree@^1.0.5": version "1.0.5" resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.5.tgz#a6ce3e556e00fd9895dd872dd172ad0d4bd687f4" integrity sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw== @@ -3484,9 +3532,9 @@ integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw== "@types/express-serve-static-core@*", "@types/express-serve-static-core@^4.17.33": - version "4.17.41" - resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.41.tgz#5077defa630c2e8d28aa9ffc2c01c157c305bef6" - integrity sha512-OaJ7XLaelTgrvlZD8/aa0vvvxZdUmlCn6MtWeB7TkiKW70BQLc9XEPpDLPdbo52ZhXUCrznlWdCHWxJWtdyajA== + version "4.17.43" + resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.43.tgz#10d8444be560cb789c4735aea5eac6e5af45df54" + integrity sha512-oaYtiBirUOPQGSWNGPWnzyAFJ0BP3cwvN4oWZQY+zUBwpVIGsKUkpBpSztp74drYcjavs7SKFZ4DX1V2QeN8rg== dependencies: "@types/node" "*" "@types/qs" "*" @@ -3595,16 +3643,16 @@ integrity sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w== "@types/node-forge@^1.3.0": - version "1.3.10" - resolved "https://registry.yarnpkg.com/@types/node-forge/-/node-forge-1.3.10.tgz#62a19d4f75a8b03290578c2b04f294b1a5a71b07" - integrity sha512-y6PJDYN4xYBxwd22l+OVH35N+1fCYWiuC3aiP2SlXVE6Lo7SS+rSx9r89hLxrP4pn6n1lBGhHJ12pj3F3Mpttw== + version "1.3.11" + resolved "https://registry.yarnpkg.com/@types/node-forge/-/node-forge-1.3.11.tgz#0972ea538ddb0f4d9c2fa0ec5db5724773a604da" + integrity sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ== dependencies: "@types/node" "*" "@types/node@*", "@types/node@>=12.12.47", "@types/node@>=13.7.0": - version "20.10.4" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.10.4.tgz#b246fd84d55d5b1b71bf51f964bd514409347198" - integrity sha512-D08YG6rr8X90YB56tSIuBaddy/UXAA9RKJoFvrsnogAum/0pmjkgi4+2nx96A330FmioegBWmEYQ+syqCFaveg== + version "20.11.29" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.11.29.tgz#431253cede34f392d6aaf7acad427b9c23aa60f6" + integrity sha512-P99thMkD/1YkCvAtOd6/zGedKNA0p2fj4ZpjCzcNiSCBWgm3cNRTBfa/qjFnsKkkojxu4vVLtWpesnZ9+ap+gA== dependencies: undici-types "~5.26.4" @@ -3634,9 +3682,9 @@ integrity sha512-hroOstUScF6zhIi+5+x0dzqrHA1EJi+Irri6b1fxolMTqqHIV/Cg77EtnQcZqZCu8hR3mX2BzIxN4/GzI68Kfw== "@types/qs@*": - version "6.9.10" - resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.10.tgz#0af26845b5067e1c9a622658a51f60a3934d51e8" - integrity sha512-3Gnx08Ns1sEoCrWssEgTSJs/rsT2vhGP+Ja9cnnk9k4ALxinORlQneLXFeFKOTJMOeZUFD1s7w+w2AphTpvzZw== + version "6.9.13" + resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.13.tgz#c7e2406bdc6bd512f8a3651632568c72d43eb1e7" + integrity sha512-iLR+1vTTJ3p0QaOUq6ACbY1mzKTODFDT/XedZI8BksOotFmL4ForwDfRQ/DZeuTHR7/2i4lI1D203gdfxuqTlA== "@types/ramda@^0.29.9": version "0.29.9" @@ -3691,9 +3739,9 @@ integrity sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A== "@types/semver@^7.3.12": - version "7.5.6" - resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.6.tgz#c65b2bfce1bec346582c07724e3f8c1017a20339" - integrity sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A== + version "7.5.8" + resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.8.tgz#8268a8c57a3e4abd25c165ecd36237db7948a55e" + integrity sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ== "@types/send@*": version "0.17.4" @@ -3870,10 +3918,10 @@ resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.2.0.tgz#756641adb587851b5ccb3e095daf27ae581c8406" integrity sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ== -"@webassemblyjs/ast@1.11.6", "@webassemblyjs/ast@^1.11.5": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.11.6.tgz#db046555d3c413f8966ca50a95176a0e2c642e24" - integrity sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q== +"@webassemblyjs/ast@1.12.1", "@webassemblyjs/ast@^1.11.5": + version "1.12.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.12.1.tgz#bb16a0e8b1914f979f45864c23819cc3e3f0d4bb" + integrity sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg== dependencies: "@webassemblyjs/helper-numbers" "1.11.6" "@webassemblyjs/helper-wasm-bytecode" "1.11.6" @@ -3888,10 +3936,10 @@ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz#6132f68c4acd59dcd141c44b18cbebbd9f2fa768" integrity sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q== -"@webassemblyjs/helper-buffer@1.11.6": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz#b66d73c43e296fd5e88006f18524feb0f2c7c093" - integrity sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA== +"@webassemblyjs/helper-buffer@1.12.1": + version "1.12.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.12.1.tgz#6df20d272ea5439bf20ab3492b7fb70e9bfcb3f6" + integrity sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw== "@webassemblyjs/helper-numbers@1.11.6": version "1.11.6" @@ -3907,15 +3955,15 @@ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz#bb2ebdb3b83aa26d9baad4c46d4315283acd51e9" integrity sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA== -"@webassemblyjs/helper-wasm-section@1.11.6": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz#ff97f3863c55ee7f580fd5c41a381e9def4aa577" - integrity sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g== +"@webassemblyjs/helper-wasm-section@1.12.1": + version "1.12.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.12.1.tgz#3da623233ae1a60409b509a52ade9bc22a37f7bf" + integrity sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g== dependencies: - "@webassemblyjs/ast" "1.11.6" - "@webassemblyjs/helper-buffer" "1.11.6" + "@webassemblyjs/ast" "1.12.1" + "@webassemblyjs/helper-buffer" "1.12.1" "@webassemblyjs/helper-wasm-bytecode" "1.11.6" - "@webassemblyjs/wasm-gen" "1.11.6" + "@webassemblyjs/wasm-gen" "1.12.1" "@webassemblyjs/ieee754@1.11.6": version "1.11.6" @@ -3937,58 +3985,58 @@ integrity sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA== "@webassemblyjs/wasm-edit@^1.11.5": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz#c72fa8220524c9b416249f3d94c2958dfe70ceab" - integrity sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw== + version "1.12.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.12.1.tgz#9f9f3ff52a14c980939be0ef9d5df9ebc678ae3b" + integrity sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g== dependencies: - "@webassemblyjs/ast" "1.11.6" - "@webassemblyjs/helper-buffer" "1.11.6" + "@webassemblyjs/ast" "1.12.1" + "@webassemblyjs/helper-buffer" "1.12.1" "@webassemblyjs/helper-wasm-bytecode" "1.11.6" - "@webassemblyjs/helper-wasm-section" "1.11.6" - "@webassemblyjs/wasm-gen" "1.11.6" - "@webassemblyjs/wasm-opt" "1.11.6" - "@webassemblyjs/wasm-parser" "1.11.6" - "@webassemblyjs/wast-printer" "1.11.6" + "@webassemblyjs/helper-wasm-section" "1.12.1" + "@webassemblyjs/wasm-gen" "1.12.1" + "@webassemblyjs/wasm-opt" "1.12.1" + "@webassemblyjs/wasm-parser" "1.12.1" + "@webassemblyjs/wast-printer" "1.12.1" -"@webassemblyjs/wasm-gen@1.11.6": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz#fb5283e0e8b4551cc4e9c3c0d7184a65faf7c268" - integrity sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA== +"@webassemblyjs/wasm-gen@1.12.1": + version "1.12.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.12.1.tgz#a6520601da1b5700448273666a71ad0a45d78547" + integrity sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w== dependencies: - "@webassemblyjs/ast" "1.11.6" + "@webassemblyjs/ast" "1.12.1" "@webassemblyjs/helper-wasm-bytecode" "1.11.6" "@webassemblyjs/ieee754" "1.11.6" "@webassemblyjs/leb128" "1.11.6" "@webassemblyjs/utf8" "1.11.6" -"@webassemblyjs/wasm-opt@1.11.6": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz#d9a22d651248422ca498b09aa3232a81041487c2" - integrity sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g== +"@webassemblyjs/wasm-opt@1.12.1": + version "1.12.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.12.1.tgz#9e6e81475dfcfb62dab574ac2dda38226c232bc5" + integrity sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg== dependencies: - "@webassemblyjs/ast" "1.11.6" - "@webassemblyjs/helper-buffer" "1.11.6" - "@webassemblyjs/wasm-gen" "1.11.6" - "@webassemblyjs/wasm-parser" "1.11.6" + "@webassemblyjs/ast" "1.12.1" + "@webassemblyjs/helper-buffer" "1.12.1" + "@webassemblyjs/wasm-gen" "1.12.1" + "@webassemblyjs/wasm-parser" "1.12.1" -"@webassemblyjs/wasm-parser@1.11.6", "@webassemblyjs/wasm-parser@^1.11.5": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz#bb85378c527df824004812bbdb784eea539174a1" - integrity sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ== +"@webassemblyjs/wasm-parser@1.12.1", "@webassemblyjs/wasm-parser@^1.11.5": + version "1.12.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz#c47acb90e6f083391e3fa61d113650eea1e95937" + integrity sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ== dependencies: - "@webassemblyjs/ast" "1.11.6" + "@webassemblyjs/ast" "1.12.1" "@webassemblyjs/helper-api-error" "1.11.6" "@webassemblyjs/helper-wasm-bytecode" "1.11.6" "@webassemblyjs/ieee754" "1.11.6" "@webassemblyjs/leb128" "1.11.6" "@webassemblyjs/utf8" "1.11.6" -"@webassemblyjs/wast-printer@1.11.6": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz#a7bf8dd7e362aeb1668ff43f35cb849f188eff20" - integrity sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A== +"@webassemblyjs/wast-printer@1.12.1": + version "1.12.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.12.1.tgz#bcecf661d7d1abdaf989d8341a4833e33e2b31ac" + integrity sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA== dependencies: - "@webassemblyjs/ast" "1.11.6" + "@webassemblyjs/ast" "1.12.1" "@xtuc/long" "4.2.2" "@wojtekmaj/date-utils@^1.0.2", "@wojtekmaj/date-utils@^1.0.3": @@ -4065,9 +4113,9 @@ acorn@^7.1.1: integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== acorn@^8.2.4, acorn@^8.7.1, acorn@^8.8.2, acorn@^8.9.0: - version "8.11.2" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.2.tgz#ca0d78b51895be5390a5903c5b3bdcdaf78ae40b" - integrity sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w== + version "8.11.3" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.3.tgz#71e0b14e13a4ec160724b38fb7b0f233b1b81d7a" + integrity sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg== address@^1.0.1, address@^1.1.2: version "1.2.2" @@ -4169,6 +4217,11 @@ ansi-styles@^5.0.0: resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b" integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== +ansi-styles@^6.1.0: + version "6.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5" + integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== + any-promise@^1.0.0: version "1.3.0" resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" @@ -4220,24 +4273,19 @@ aria-query@^5.0.0, aria-query@^5.3.0: dependencies: dequal "^2.0.3" -array-buffer-byte-length@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz#fabe8bc193fea865f317fe7807085ee0dee5aead" - integrity sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A== +array-buffer-byte-length@^1.0.0, array-buffer-byte-length@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz#1e5583ec16763540a27ae52eed99ff899223568f" + integrity sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg== dependencies: - call-bind "^1.0.2" - is-array-buffer "^3.0.1" + call-bind "^1.0.5" + is-array-buffer "^3.0.4" array-flatten@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== -array-flatten@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.2.tgz#24ef80a28c1a893617e2149b0c6d0d788293b099" - integrity sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ== - array-includes@^3.1.6, array-includes@^3.1.7: version "3.1.7" resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.7.tgz#8cd2e01b26f7a3086cbc87271593fe921c62abda" @@ -4254,16 +4302,27 @@ array-union@^2.1.0: resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== +array.prototype.findlast@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/array.prototype.findlast/-/array.prototype.findlast-1.2.4.tgz#eeb9e45fc894055c82e5675c463e8077b827ad36" + integrity sha512-BMtLxpV+8BD+6ZPFIWmnUBpQoy+A+ujcg4rhp2iwCRJYA7PEh2MS4NL3lz8EiDlLrJPp2hg9qWihr5pd//jcGw== + dependencies: + call-bind "^1.0.5" + define-properties "^1.2.1" + es-abstract "^1.22.3" + es-errors "^1.3.0" + es-shim-unscopables "^1.0.2" + array.prototype.findlastindex@^1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.3.tgz#b37598438f97b579166940814e2c0493a4f50207" - integrity sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA== + version "1.2.4" + resolved "https://registry.yarnpkg.com/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.4.tgz#d1c50f0b3a9da191981ff8942a0aedd82794404f" + integrity sha512-hzvSHUshSpCflDR1QMUBLHGHP1VIEBegT4pix9H/Z92Xw3ySoy6c2qh7lJWTJnRJ8JCZ9bJNCgTyYaJGcJu6xQ== dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - es-shim-unscopables "^1.0.0" - get-intrinsic "^1.2.1" + call-bind "^1.0.5" + define-properties "^1.2.1" + es-abstract "^1.22.3" + es-errors "^1.3.0" + es-shim-unscopables "^1.0.2" array.prototype.flat@^1.3.1, array.prototype.flat@^1.3.2: version "1.3.2" @@ -4275,7 +4334,7 @@ array.prototype.flat@^1.3.1, array.prototype.flat@^1.3.2: es-abstract "^1.22.1" es-shim-unscopables "^1.0.0" -array.prototype.flatmap@^1.3.1, array.prototype.flatmap@^1.3.2: +array.prototype.flatmap@^1.3.2: version "1.3.2" resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz#c9a7c6831db8e719d6ce639190146c24bbd3e527" integrity sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ== @@ -4296,28 +4355,39 @@ array.prototype.reduce@^1.0.6: es-array-method-boxes-properly "^1.0.0" is-string "^1.0.7" -array.prototype.tosorted@^1.1.1: +array.prototype.toreversed@^1.1.2: version "1.1.2" - resolved "https://registry.yarnpkg.com/array.prototype.tosorted/-/array.prototype.tosorted-1.1.2.tgz#620eff7442503d66c799d95503f82b475745cefd" - integrity sha512-HuQCHOlk1Weat5jzStICBCd83NxiIMwqDg/dHEsoefabn/hJRj5pVdWcPUSpRrwhwxZOsQassMpgN/xRYFBMIg== + resolved "https://registry.yarnpkg.com/array.prototype.toreversed/-/array.prototype.toreversed-1.1.2.tgz#b989a6bf35c4c5051e1dc0325151bf8088954eba" + integrity sha512-wwDCoT4Ck4Cz7sLtgUmzR5UV3YF5mFHUlbChCzZBQZ+0m2cl/DH3tKgvphv1nKgFsJ48oCSg6p91q2Vm0I/ZMA== dependencies: call-bind "^1.0.2" define-properties "^1.2.0" es-abstract "^1.22.1" es-shim-unscopables "^1.0.0" - get-intrinsic "^1.2.1" -arraybuffer.prototype.slice@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz#98bd561953e3e74bb34938e77647179dfe6e9f12" - integrity sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw== +array.prototype.tosorted@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/array.prototype.tosorted/-/array.prototype.tosorted-1.1.3.tgz#c8c89348337e51b8a3c48a9227f9ce93ceedcba8" + integrity sha512-/DdH4TiTmOKzyQbp/eadcCVexiCb36xJg7HshYOYJnNZFDj33GEv0P7GxsynpShhq4OLYJzbGcBDkLsDt7MnNg== dependencies: - array-buffer-byte-length "^1.0.0" - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - get-intrinsic "^1.2.1" - is-array-buffer "^3.0.2" + call-bind "^1.0.5" + define-properties "^1.2.1" + es-abstract "^1.22.3" + es-errors "^1.1.0" + es-shim-unscopables "^1.0.2" + +arraybuffer.prototype.slice@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz#097972f4255e41bc3425e37dc3f6421cf9aefde6" + integrity sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A== + dependencies: + array-buffer-byte-length "^1.0.1" + call-bind "^1.0.5" + define-properties "^1.2.1" + es-abstract "^1.22.3" + es-errors "^1.2.1" + get-intrinsic "^1.2.3" + is-array-buffer "^3.0.4" is-shared-array-buffer "^1.0.2" asap@~2.0.6: @@ -4335,13 +4405,6 @@ async@^3.2.3: resolved "https://registry.yarnpkg.com/async/-/async-3.2.5.tgz#ebd52a8fdaf7a2289a24df399f8d8485c8a46b66" integrity sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg== -asynciterator.prototype@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/asynciterator.prototype/-/asynciterator.prototype-1.0.0.tgz#8c5df0514936cdd133604dfcc9d3fb93f09b2b62" - integrity sha512-wwHYEIS0Q80f5mosx3L/dfG5t5rjEa9Ft51GTaNt862EnpyGHpgz2RkZvLPp1oF5TnAiTohkEKVEu8pQPJI7Vg== - dependencies: - has-symbols "^1.0.3" - asynckit@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" @@ -4353,21 +4416,23 @@ at-least-node@^1.0.0: integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== autoprefixer@^10.4.13: - version "10.4.16" - resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.16.tgz#fad1411024d8670880bdece3970aa72e3572feb8" - integrity sha512-7vd3UC6xKp0HLfua5IjZlcXvGAGy7cBAXTg2lyQ/8WpNhd6SiZ8Be+xm3FyBSYJx5GKcpRCzBh7RH4/0dnY+uQ== + version "10.4.18" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.18.tgz#fcb171a3b017be7cb5d8b7a825f5aacbf2045163" + integrity sha512-1DKbDfsr6KUElM6wg+0zRNkB/Q7WcKYAaK+pzXn+Xqmszm/5Xa9coeNdtP88Vi+dPzZnMjhge8GIV49ZQkDa+g== dependencies: - browserslist "^4.21.10" - caniuse-lite "^1.0.30001538" - fraction.js "^4.3.6" + browserslist "^4.23.0" + caniuse-lite "^1.0.30001591" + fraction.js "^4.3.7" normalize-range "^0.1.2" picocolors "^1.0.0" postcss-value-parser "^4.2.0" -available-typed-arrays@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7" - integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== +available-typed-arrays@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz#a5cc375d6a03c2efc87a553f3e0b1522def14846" + integrity sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ== + dependencies: + possible-typed-array-names "^1.0.0" axe-core@=4.7.0: version "4.7.0" @@ -4449,29 +4514,29 @@ babel-plugin-named-asset-import@^0.3.8: resolved "https://registry.yarnpkg.com/babel-plugin-named-asset-import/-/babel-plugin-named-asset-import-0.3.8.tgz#6b7fa43c59229685368683c28bc9734f24524cc2" integrity sha512-WXiAc++qo7XcJ1ZnTYGtLxmBCVbddAml3CEXgWaBzNzLNoxtQ8AiGEFDMOhot9XjTCQbvP5E77Fj9Gk924f00Q== -babel-plugin-polyfill-corejs2@^0.4.6: - version "0.4.6" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.6.tgz#b2df0251d8e99f229a8e60fc4efa9a68b41c8313" - integrity sha512-jhHiWVZIlnPbEUKSSNb9YoWcQGdlTLq7z1GHL4AjFxaoOUMuuEVJ+Y4pAaQUGOGk93YsVCKPbqbfw3m0SM6H8Q== +babel-plugin-polyfill-corejs2@^0.4.8: + version "0.4.10" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.10.tgz#276f41710b03a64f6467433cab72cbc2653c38b1" + integrity sha512-rpIuu//y5OX6jVU+a5BCn1R5RSZYWAl2Nar76iwaOdycqb6JPxediskWFMMl7stfwNJR4b7eiQvh5fB5TEQJTQ== dependencies: "@babel/compat-data" "^7.22.6" - "@babel/helper-define-polyfill-provider" "^0.4.3" + "@babel/helper-define-polyfill-provider" "^0.6.1" semver "^6.3.1" -babel-plugin-polyfill-corejs3@^0.8.5: - version "0.8.6" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.6.tgz#25c2d20002da91fe328ff89095c85a391d6856cf" - integrity sha512-leDIc4l4tUgU7str5BWLS2h8q2N4Nf6lGZP6UrNDxdtfF2g69eJ5L0H7S8A5Ln/arfFAfHor5InAdZuIOwZdgQ== +babel-plugin-polyfill-corejs3@^0.9.0: + version "0.9.0" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.9.0.tgz#9eea32349d94556c2ad3ab9b82ebb27d4bf04a81" + integrity sha512-7nZPG1uzK2Ymhy/NbaOWTg3uibM2BmGASS4vHS4szRZAIR8R6GwA/xAujpdrXU5iyklrimWnLWU+BLF9suPTqg== dependencies: - "@babel/helper-define-polyfill-provider" "^0.4.3" - core-js-compat "^3.33.1" + "@babel/helper-define-polyfill-provider" "^0.5.0" + core-js-compat "^3.34.0" -babel-plugin-polyfill-regenerator@^0.5.3: - version "0.5.3" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.3.tgz#d4c49e4b44614607c13fb769bcd85c72bb26a4a5" - integrity sha512-8sHeDOmXC8csczMrYEOf0UTNa4yE2SxV5JGeT/LP1n0OYVDUUFPxG9vdk2AlDlIit4t+Kf0xCtpgXPBwnn/9pw== +babel-plugin-polyfill-regenerator@^0.5.5: + version "0.5.5" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.5.tgz#8b0c8fc6434239e5d7b8a9d1f832bb2b0310f06a" + integrity sha512-OJGYZlhLqBh2DDHeqAxWB1XIvr49CxiJ2gIt61/PU55CQK4Z58OzMqjDe1zwQdQk+rBYsRc+1rJmdajM3gimHg== dependencies: - "@babel/helper-define-polyfill-provider" "^0.4.3" + "@babel/helper-define-polyfill-provider" "^0.5.0" babel-plugin-transform-react-remove-prop-types@^0.4.24: version "0.4.24" @@ -4553,22 +4618,22 @@ big.js@^5.2.2: integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== binary-extensions@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" - integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== + version "2.3.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.3.0.tgz#f6e14a97858d327252200242d4ccfe522c445522" + integrity sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw== bluebird@^3.7.2: version "3.7.2" resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== -body-parser@1.20.1: - version "1.20.1" - resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.1.tgz#b1812a8912c195cd371a3ee5e66faa2338a5c668" - integrity sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw== +body-parser@1.20.2: + version "1.20.2" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.2.tgz#6feb0e21c4724d06de7ff38da36dad4f57a747fd" + integrity sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA== dependencies: bytes "3.1.2" - content-type "~1.0.4" + content-type "~1.0.5" debug "2.6.9" depd "2.0.0" destroy "1.2.0" @@ -4576,17 +4641,15 @@ body-parser@1.20.1: iconv-lite "0.4.24" on-finished "2.4.1" qs "6.11.0" - raw-body "2.5.1" + raw-body "2.5.2" type-is "~1.6.18" unpipe "1.0.0" bonjour-service@^1.0.11: - version "1.1.1" - resolved "https://registry.yarnpkg.com/bonjour-service/-/bonjour-service-1.1.1.tgz#960948fa0e0153f5d26743ab15baf8e33752c135" - integrity sha512-Z/5lQRMOG9k7W+FkeGTNjh7htqn/2LMnfOvBZ8pynNZCM9MwkQkI3zeI4oz09uWdcgmgHugVvBqxGg4VQJ5PCg== + version "1.2.1" + resolved "https://registry.yarnpkg.com/bonjour-service/-/bonjour-service-1.2.1.tgz#eb41b3085183df3321da1264719fbada12478d02" + integrity sha512-oSzCS2zV14bh2kji6vNe7vrpJYCHGvcZnlffFQ1MEoX/WOeQ/teD8SYWKR942OI3INjq8OMNJlbPK5LLLUxFDw== dependencies: - array-flatten "^2.1.2" - dns-equal "^1.0.0" fast-deep-equal "^3.1.3" multicast-dns "^7.2.5" @@ -4622,13 +4685,13 @@ browser-process-hrtime@^1.0.0: resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626" integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow== -browserslist@^4.0.0, browserslist@^4.14.5, browserslist@^4.18.1, browserslist@^4.21.10, browserslist@^4.21.4, browserslist@^4.21.9, browserslist@^4.22.2: - version "4.22.2" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.22.2.tgz#704c4943072bd81ea18997f3bd2180e89c77874b" - integrity sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A== +browserslist@^4.0.0, browserslist@^4.18.1, browserslist@^4.21.10, browserslist@^4.21.4, browserslist@^4.22.2, browserslist@^4.23.0: + version "4.23.0" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.23.0.tgz#8f3acc2bbe73af7213399430890f86c63a5674ab" + integrity sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ== dependencies: - caniuse-lite "^1.0.30001565" - electron-to-chromium "^1.4.601" + caniuse-lite "^1.0.30001587" + electron-to-chromium "^1.4.668" node-releases "^2.0.14" update-browserslist-db "^1.0.13" @@ -4659,14 +4722,16 @@ bytes@3.1.2: resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== -call-bind@^1.0.0, call-bind@^1.0.2, call-bind@^1.0.4, call-bind@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.5.tgz#6fa2b7845ce0ea49bf4d8b9ef64727a2c2e2e513" - integrity sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ== +call-bind@^1.0.2, call-bind@^1.0.5, call-bind@^1.0.6, call-bind@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.7.tgz#06016599c40c56498c18769d2730be242b6fa3b9" + integrity sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w== dependencies: + es-define-property "^1.0.0" + es-errors "^1.3.0" function-bind "^1.1.2" - get-intrinsic "^1.2.1" - set-function-length "^1.1.1" + get-intrinsic "^1.2.4" + set-function-length "^1.2.1" callsites@^3.0.0: version "3.1.0" @@ -4706,10 +4771,10 @@ caniuse-api@^3.0.0: lodash.memoize "^4.1.2" lodash.uniq "^4.5.0" -caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001538, caniuse-lite@^1.0.30001565: - version "1.0.30001566" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001566.tgz#61a8e17caf3752e3e426d4239c549ebbb37fef0d" - integrity sha512-ggIhCsTxmITBAMmK8yZjEhCO5/47jKXPu6Dha/wuCS4JePVL+3uiDEBuhu2aIoT+bqTOR8L76Ip1ARL9xYsEJA== +caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001587, caniuse-lite@^1.0.30001591: + version "1.0.30001599" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001599.tgz#571cf4f3f1506df9bf41fcbb6d10d5d017817bce" + integrity sha512-LRAQHZ4yT1+f9LemSMeqdMpMxZcc4RMWdj4tiFe3G8tNkWK+E58g+/tzotb5cU6TbcVJLr4fySiAW7XmxQvZQA== case-sensitive-paths-webpack-plugin@^2.4.0: version "2.4.0" @@ -4757,9 +4822,9 @@ check-types@^11.2.3: integrity sha512-+67P1GkJRaxQD6PKK0Et9DhwQB+vGg3PM5+aavopCpZT1lj9jeqfvpgTLAWErNj8qApkkmXlu/Ug74kmhagkXg== chokidar@^3.4.2, chokidar@^3.5.3: - version "3.5.3" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" - integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== + version "3.6.0" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b" + integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw== dependencies: anymatch "~3.1.2" braces "~3.0.2" @@ -4958,7 +5023,7 @@ content-disposition@0.5.4: dependencies: safe-buffer "5.2.1" -content-type@~1.0.4: +content-type@~1.0.4, content-type@~1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918" integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== @@ -4990,22 +5055,22 @@ copy-to-clipboard@3.3.3: dependencies: toggle-selection "^1.0.6" -core-js-compat@^3.31.0, core-js-compat@^3.33.1: - version "3.34.0" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.34.0.tgz#61a4931a13c52f8f08d924522bba65f8c94a5f17" - integrity sha512-4ZIyeNbW/Cn1wkMMDy+mvrRUxrwFNjKwbhCfQpDd+eLgYipDqp8oGFGtLmhh18EDPKA0g3VUBYOxQGGwvWLVpA== +core-js-compat@^3.31.0, core-js-compat@^3.34.0: + version "3.36.1" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.36.1.tgz#1818695d72c99c25d621dca94e6883e190cea3c8" + integrity sha512-Dk997v9ZCt3X/npqzyGdTlq6t7lDBhZwGvV94PKzDArjp7BTRm7WlDAXYd/OWdeFHO8OChQYRJNJvUCqCbrtKA== dependencies: - browserslist "^4.22.2" + browserslist "^4.23.0" core-js-pure@^3.23.3: - version "3.34.0" - resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.34.0.tgz#981e462500708664c91b827a75b011f04a8134a0" - integrity sha512-pmhivkYXkymswFfbXsANmBAewXx86UBfmagP+w0wkK06kLsLlTK5oQmsURPivzMkIBQiYq2cjamcZExIwlFQIg== + version "3.36.1" + resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.36.1.tgz#1461c89e76116528b54eba20a0aff30164087a94" + integrity sha512-NXCvHvSVYSrewP0L5OhltzXeWFJLo2AL2TYnj6iLV3Bw8mM62wAQMNgUCRI6EBu6hVVpbCxmOPlxh1Ikw2PfUA== core-js@^3.19.2: - version "3.34.0" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.34.0.tgz#5705e6ad5982678612e96987d05b27c6c7c274a5" - integrity sha512-aDdvlDder8QmY91H88GzNi9EtQi2TjvQhpCX6B1v/dAZHU1AuLgHvRh54RiOerpEhEW46Tkf+vgAViB/CWC0ag== + version "3.36.1" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.36.1.tgz#c97a7160ebd00b2de19e62f4bbd3406ab720e578" + integrity sha512-BTvUrwxVBezj5SZ3f10ImnX2oRByMxql3EimVqMysepbC9EeMUOpLwdy6Eoili2x6E4kf+ZUB5k/+Jv55alPfA== core-util-is@~1.0.0: version "1.0.3" @@ -5034,7 +5099,7 @@ cosmiconfig@^7.0.0: path-type "^4.0.0" yaml "^1.10.0" -cross-spawn@^7.0.2, cross-spawn@^7.0.3: +cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3: version "7.0.3" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== @@ -5075,18 +5140,18 @@ css-has-pseudo@^3.0.4: postcss-selector-parser "^6.0.9" css-loader@^6.5.1: - version "6.8.1" - resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-6.8.1.tgz#0f8f52699f60f5e679eab4ec0fcd68b8e8a50a88" - integrity sha512-xDAXtEVGlD0gJ07iclwWVkLoZOpEvAWaSyf6W18S2pOC//K8+qUDIx8IIT3D+HjnmkJPQeesOPv5aiUaJsCM2g== + version "6.10.0" + resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-6.10.0.tgz#7c172b270ec7b833951b52c348861206b184a4b7" + integrity sha512-LTSA/jWbwdMlk+rhmElbDR2vbtQoTBPr7fkJE+mxrHj+7ru0hUmHafDRzWIjIHTwpitWVaqY2/UWGRca3yUgRw== dependencies: icss-utils "^5.1.0" - postcss "^8.4.21" + postcss "^8.4.33" postcss-modules-extract-imports "^3.0.0" - postcss-modules-local-by-default "^4.0.3" - postcss-modules-scope "^3.0.0" + postcss-modules-local-by-default "^4.0.4" + postcss-modules-scope "^3.1.1" postcss-modules-values "^4.0.0" postcss-value-parser "^4.2.0" - semver "^7.3.8" + semver "^7.5.4" css-minimizer-webpack-plugin@^3.2.0: version "3.4.1" @@ -5163,9 +5228,9 @@ css.escape@^1.5.1: integrity sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg== cssdb@^7.1.0: - version "7.9.0" - resolved "https://registry.yarnpkg.com/cssdb/-/cssdb-7.9.0.tgz#d42d8269ff3d3e1c366280ab1f9f6207057b262c" - integrity sha512-WPMT9seTQq6fPAa1yN4zjgZZeoTriSN2LqW9C+otjar12DQIWA4LuSfFrvFJiKp4oD0xIk1vumDLw8K9ur4NBw== + version "7.11.2" + resolved "https://registry.yarnpkg.com/cssdb/-/cssdb-7.11.2.tgz#127a2f5b946ee653361a5af5333ea85a39df5ae5" + integrity sha512-lhQ32TFkc1X4eTefGfYPvgovRSzIMofHkigfH8nWtyRL4XJLsRhJFreRvEgKzept7x1rjBuy3J/MurXLaFxW/A== cssesc@^3.0.0: version "3.0.0" @@ -5264,6 +5329,33 @@ data-urls@^2.0.0: whatwg-mimetype "^2.3.0" whatwg-url "^8.0.0" +data-view-buffer@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/data-view-buffer/-/data-view-buffer-1.0.1.tgz#8ea6326efec17a2e42620696e671d7d5a8bc66b2" + integrity sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA== + dependencies: + call-bind "^1.0.6" + es-errors "^1.3.0" + is-data-view "^1.0.1" + +data-view-byte-length@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz#90721ca95ff280677eb793749fce1011347669e2" + integrity sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ== + dependencies: + call-bind "^1.0.7" + es-errors "^1.3.0" + is-data-view "^1.0.1" + +data-view-byte-offset@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz#5e0bbfb4828ed2d1b9b400cd8a7d119bca0ff18a" + integrity sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA== + dependencies: + call-bind "^1.0.6" + es-errors "^1.3.0" + is-data-view "^1.0.1" + date-fns@^2.30.0: version "2.30.0" resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.30.0.tgz#f367e644839ff57894ec6ac480de40cae4b0f4d0" @@ -5278,7 +5370,7 @@ debug@2.6.9, debug@^2.6.0: dependencies: ms "2.0.0" -debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.4: +debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4: version "4.3.4" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== @@ -5343,14 +5435,14 @@ default-gateway@^6.0.3: dependencies: execa "^5.0.0" -define-data-property@^1.0.1, define-data-property@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.1.tgz#c35f7cd0ab09883480d12ac5cb213715587800b3" - integrity sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ== +define-data-property@^1.0.1, define-data-property@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e" + integrity sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A== dependencies: - get-intrinsic "^1.2.1" + es-define-property "^1.0.0" + es-errors "^1.3.0" gopd "^1.0.1" - has-property-descriptors "^1.0.0" define-lazy-prop@^2.0.0: version "2.0.0" @@ -5446,11 +5538,6 @@ dlv@^1.1.3: resolved "https://registry.yarnpkg.com/dlv/-/dlv-1.1.3.tgz#5c198a8a11453596e751494d49874bc7732f2e79" integrity sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA== -dns-equal@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/dns-equal/-/dns-equal-1.0.0.tgz#b39e7f1da6eb0a75ba9c17324b34753c47e0654d" - integrity sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg== - dns-packet@^5.2.2: version "5.6.1" resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-5.6.1.tgz#ae888ad425a9d1478a0674256ab866de1012cf2f" @@ -5565,6 +5652,11 @@ duplexer@^0.1.2: resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6" integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg== +eastasianwidth@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" + integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== + ee-first@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" @@ -5577,10 +5669,10 @@ ejs@^3.1.6: dependencies: jake "^10.8.5" -electron-to-chromium@^1.4.601: - version "1.4.609" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.609.tgz#5790a70aaa96de232501b56e14b64d17aff93988" - integrity sha512-ihiCP7PJmjoGNuLpl7TjNA8pCQWu09vGyjlPYw1Rqww4gvNuCcmvl+44G+2QyJ6S2K4o+wbTS++Xz0YN8Q9ERw== +electron-to-chromium@^1.4.668: + version "1.4.710" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.710.tgz#d0ec4ea8a97df4c5eaeb8c69d45bf81f248b3855" + integrity sha512-w+9yAVHoHhysCa+gln7AzbO9CdjFcL/wN/5dd+XW/Msl2d/4+WisEaCF1nty0xbAKaxdaJfgLB2296U7zZB7BA== emittery@^0.10.2: version "0.10.2" @@ -5613,9 +5705,9 @@ encodeurl@~1.0.2: integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== enhanced-resolve@^5.15.0: - version "5.15.0" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz#1af946c7d93603eb88e9896cee4904dc012e9c35" - integrity sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg== + version "5.16.0" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.16.0.tgz#65ec88778083056cb32487faa9aef82ed0864787" + integrity sha512-O+QWCviPNSSLAD9Ucn8Awv+poAkqn3T1XY5/N7kR7rQO9yfSGWkYZDwpJ+iKF7B8rxaQKWngSqACpgzeapSyoA== dependencies: graceful-fs "^4.2.4" tapable "^2.2.0" @@ -5639,56 +5731,122 @@ error-stack-parser@^2.0.6: dependencies: stackframe "^1.3.4" -es-abstract@^1.17.2, es-abstract@^1.22.1: - version "1.22.3" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.22.3.tgz#48e79f5573198de6dee3589195727f4f74bc4f32" - integrity sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA== - dependencies: - array-buffer-byte-length "^1.0.0" - arraybuffer.prototype.slice "^1.0.2" - available-typed-arrays "^1.0.5" - call-bind "^1.0.5" - es-set-tostringtag "^2.0.1" +es-abstract@^1.17.2, es-abstract@^1.22.1, es-abstract@^1.22.3: + version "1.22.5" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.22.5.tgz#1417df4e97cc55f09bf7e58d1e614bc61cb8df46" + integrity sha512-oW69R+4q2wG+Hc3KZePPZxOiisRIqfKBVo/HLx94QcJeWGU/8sZhCvc829rd1kS366vlJbzBfXf9yWwf0+Ko7w== + dependencies: + array-buffer-byte-length "^1.0.1" + arraybuffer.prototype.slice "^1.0.3" + available-typed-arrays "^1.0.7" + call-bind "^1.0.7" + es-define-property "^1.0.0" + es-errors "^1.3.0" + es-set-tostringtag "^2.0.3" es-to-primitive "^1.2.1" function.prototype.name "^1.1.6" - get-intrinsic "^1.2.2" - get-symbol-description "^1.0.0" + get-intrinsic "^1.2.4" + get-symbol-description "^1.0.2" globalthis "^1.0.3" gopd "^1.0.1" - has-property-descriptors "^1.0.0" - has-proto "^1.0.1" + has-property-descriptors "^1.0.2" + has-proto "^1.0.3" has-symbols "^1.0.3" - hasown "^2.0.0" - internal-slot "^1.0.5" - is-array-buffer "^3.0.2" + hasown "^2.0.1" + internal-slot "^1.0.7" + is-array-buffer "^3.0.4" is-callable "^1.2.7" - is-negative-zero "^2.0.2" + is-negative-zero "^2.0.3" is-regex "^1.1.4" - is-shared-array-buffer "^1.0.2" + is-shared-array-buffer "^1.0.3" is-string "^1.0.7" - is-typed-array "^1.1.12" + is-typed-array "^1.1.13" is-weakref "^1.0.2" object-inspect "^1.13.1" object-keys "^1.1.1" - object.assign "^4.1.4" - regexp.prototype.flags "^1.5.1" - safe-array-concat "^1.0.1" - safe-regex-test "^1.0.0" + object.assign "^4.1.5" + regexp.prototype.flags "^1.5.2" + safe-array-concat "^1.1.0" + safe-regex-test "^1.0.3" string.prototype.trim "^1.2.8" string.prototype.trimend "^1.0.7" string.prototype.trimstart "^1.0.7" - typed-array-buffer "^1.0.0" - typed-array-byte-length "^1.0.0" - typed-array-byte-offset "^1.0.0" - typed-array-length "^1.0.4" + typed-array-buffer "^1.0.2" + typed-array-byte-length "^1.0.1" + typed-array-byte-offset "^1.0.2" + typed-array-length "^1.0.5" unbox-primitive "^1.0.2" - which-typed-array "^1.1.13" + which-typed-array "^1.1.14" + +es-abstract@^1.23.0, es-abstract@^1.23.1, es-abstract@^1.23.2: + version "1.23.2" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.23.2.tgz#693312f3940f967b8dd3eebacb590b01712622e0" + integrity sha512-60s3Xv2T2p1ICykc7c+DNDPLDMm9t4QxCOUU0K9JxiLjM3C1zB9YVdN7tjxrFd4+AkZ8CdX1ovUga4P2+1e+/w== + dependencies: + array-buffer-byte-length "^1.0.1" + arraybuffer.prototype.slice "^1.0.3" + available-typed-arrays "^1.0.7" + call-bind "^1.0.7" + data-view-buffer "^1.0.1" + data-view-byte-length "^1.0.1" + data-view-byte-offset "^1.0.0" + es-define-property "^1.0.0" + es-errors "^1.3.0" + es-object-atoms "^1.0.0" + es-set-tostringtag "^2.0.3" + es-to-primitive "^1.2.1" + function.prototype.name "^1.1.6" + get-intrinsic "^1.2.4" + get-symbol-description "^1.0.2" + globalthis "^1.0.3" + gopd "^1.0.1" + has-property-descriptors "^1.0.2" + has-proto "^1.0.3" + has-symbols "^1.0.3" + hasown "^2.0.2" + internal-slot "^1.0.7" + is-array-buffer "^3.0.4" + is-callable "^1.2.7" + is-data-view "^1.0.1" + is-negative-zero "^2.0.3" + is-regex "^1.1.4" + is-shared-array-buffer "^1.0.3" + is-string "^1.0.7" + is-typed-array "^1.1.13" + is-weakref "^1.0.2" + object-inspect "^1.13.1" + object-keys "^1.1.1" + object.assign "^4.1.5" + regexp.prototype.flags "^1.5.2" + safe-array-concat "^1.1.2" + safe-regex-test "^1.0.3" + string.prototype.trim "^1.2.9" + string.prototype.trimend "^1.0.8" + string.prototype.trimstart "^1.0.7" + typed-array-buffer "^1.0.2" + typed-array-byte-length "^1.0.1" + typed-array-byte-offset "^1.0.2" + typed-array-length "^1.0.5" + unbox-primitive "^1.0.2" + which-typed-array "^1.1.15" es-array-method-boxes-properly@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz#873f3e84418de4ee19c5be752990b2e44718d09e" integrity sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA== +es-define-property@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.0.tgz#c7faefbdff8b2696cf5f46921edfb77cc4ba3845" + integrity sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ== + dependencies: + get-intrinsic "^1.2.4" + +es-errors@^1.1.0, es-errors@^1.2.1, es-errors@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" + integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== + es-get-iterator@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/es-get-iterator/-/es-get-iterator-1.1.3.tgz#3ef87523c5d464d41084b2c3c9c214f1199763d6" @@ -5704,41 +5862,48 @@ es-get-iterator@^1.1.3: isarray "^2.0.5" stop-iteration-iterator "^1.0.0" -es-iterator-helpers@^1.0.12, es-iterator-helpers@^1.0.15: - version "1.0.15" - resolved "https://registry.yarnpkg.com/es-iterator-helpers/-/es-iterator-helpers-1.0.15.tgz#bd81d275ac766431d19305923707c3efd9f1ae40" - integrity sha512-GhoY8uYqd6iwUl2kgjTm4CZAf6oo5mHK7BPqx3rKgx893YSsy0LGHV6gfqqQvZt/8xM8xeOnfXBCfqclMKkJ5g== +es-iterator-helpers@^1.0.15, es-iterator-helpers@^1.0.17: + version "1.0.18" + resolved "https://registry.yarnpkg.com/es-iterator-helpers/-/es-iterator-helpers-1.0.18.tgz#4d3424f46b24df38d064af6fbbc89274e29ea69d" + integrity sha512-scxAJaewsahbqTYrGKJihhViaM6DDZDDoucfvzNbK0pOren1g/daDQ3IAhzn+1G14rBG7w+i5N+qul60++zlKA== dependencies: - asynciterator.prototype "^1.0.0" - call-bind "^1.0.2" + call-bind "^1.0.7" define-properties "^1.2.1" - es-abstract "^1.22.1" - es-set-tostringtag "^2.0.1" - function-bind "^1.1.1" - get-intrinsic "^1.2.1" + es-abstract "^1.23.0" + es-errors "^1.3.0" + es-set-tostringtag "^2.0.3" + function-bind "^1.1.2" + get-intrinsic "^1.2.4" globalthis "^1.0.3" - has-property-descriptors "^1.0.0" - has-proto "^1.0.1" + has-property-descriptors "^1.0.2" + has-proto "^1.0.3" has-symbols "^1.0.3" - internal-slot "^1.0.5" + internal-slot "^1.0.7" iterator.prototype "^1.1.2" - safe-array-concat "^1.0.1" + safe-array-concat "^1.1.2" es-module-lexer@^1.2.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-1.4.1.tgz#41ea21b43908fe6a287ffcbe4300f790555331f5" - integrity sha512-cXLGjP0c4T3flZJKQSuziYoq7MlT+rnvfZjfp7h+I7K9BNX54kP9nyWvdbwjQ4u1iWbOL4u96fgeZLToQlZC7w== + version "1.4.2" + resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-1.4.2.tgz#ba1a62255ff9b41023aaf9bd08c016a5f1a3fef3" + integrity sha512-7nOqkomXZEaxUDJw21XZNtRk739QvrPSoZoRtbsEfcii00vdzZUh6zh1CQwHhrib8MdEtJfv5rJiGeb4KuV/vw== -es-set-tostringtag@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.2.tgz#11f7cc9f63376930a5f20be4915834f4bc74f9c9" - integrity sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q== +es-object-atoms@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/es-object-atoms/-/es-object-atoms-1.0.0.tgz#ddb55cd47ac2e240701260bc2a8e31ecb643d941" + integrity sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw== dependencies: - get-intrinsic "^1.2.2" - has-tostringtag "^1.0.0" - hasown "^2.0.0" + es-errors "^1.3.0" + +es-set-tostringtag@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz#8bb60f0a440c2e4281962428438d58545af39777" + integrity sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ== + dependencies: + get-intrinsic "^1.2.4" + has-tostringtag "^1.0.2" + hasown "^2.0.1" -es-shim-unscopables@^1.0.0: +es-shim-unscopables@^1.0.0, es-shim-unscopables@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz#1f6942e71ecc7835ed1c8a83006d8771a63a3763" integrity sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw== @@ -5755,9 +5920,9 @@ es-to-primitive@^1.2.1: is-symbol "^1.0.2" escalade@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" - integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== + version "3.1.2" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.2.tgz#54076e9ab29ea5bf3d8f1ed62acffbb88272df27" + integrity sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA== escape-html@~1.0.3: version "1.0.3" @@ -5832,9 +5997,9 @@ eslint-import-resolver-node@^0.3.9: resolve "^1.22.4" eslint-module-utils@^2.8.0: - version "2.8.0" - resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz#e439fee65fc33f6bba630ff621efc38ec0375c49" - integrity sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw== + version "2.8.1" + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.8.1.tgz#52f2404300c3bd33deece9d7372fb337cc1d7c34" + integrity sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q== dependencies: debug "^3.2.7" @@ -5847,9 +6012,9 @@ eslint-plugin-flowtype@^8.0.3: string-natural-compare "^3.0.1" eslint-plugin-import@^2.25.3: - version "2.29.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.29.0.tgz#8133232e4329ee344f2f612885ac3073b0b7e155" - integrity sha512-QPOO5NO6Odv5lpoTkddtutccQjysJuFxoPS7fAHO+9m9udNHvTCPSAMW9zGAYj8lAIdr40I8yPCdUYrncXtrwg== + version "2.29.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz#d45b37b5ef5901d639c15270d74d46d161150643" + integrity sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw== dependencies: array-includes "^3.1.7" array.prototype.findlastindex "^1.2.3" @@ -5867,7 +6032,7 @@ eslint-plugin-import@^2.25.3: object.groupby "^1.0.1" object.values "^1.1.7" semver "^6.3.1" - tsconfig-paths "^3.14.2" + tsconfig-paths "^3.15.0" eslint-plugin-jest@^25.3.0: version "25.7.0" @@ -5904,26 +6069,28 @@ eslint-plugin-react-hooks@^4.3.0: integrity sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g== eslint-plugin-react@^7.27.1: - version "7.33.2" - resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.33.2.tgz#69ee09443ffc583927eafe86ffebb470ee737608" - integrity sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw== + version "7.34.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.34.1.tgz#6806b70c97796f5bbfb235a5d3379ece5f4da997" + integrity sha512-N97CxlouPT1AHt8Jn0mhhN2RrADlUAsk1/atcT2KyA/l9Q/E6ll7OIGwNumFmWfZ9skV3XXccYS19h80rHtgkw== dependencies: - array-includes "^3.1.6" - array.prototype.flatmap "^1.3.1" - array.prototype.tosorted "^1.1.1" + array-includes "^3.1.7" + array.prototype.findlast "^1.2.4" + array.prototype.flatmap "^1.3.2" + array.prototype.toreversed "^1.1.2" + array.prototype.tosorted "^1.1.3" doctrine "^2.1.0" - es-iterator-helpers "^1.0.12" + es-iterator-helpers "^1.0.17" estraverse "^5.3.0" jsx-ast-utils "^2.4.1 || ^3.0.0" minimatch "^3.1.2" - object.entries "^1.1.6" - object.fromentries "^2.0.6" - object.hasown "^1.1.2" - object.values "^1.1.6" + object.entries "^1.1.7" + object.fromentries "^2.0.7" + object.hasown "^1.1.3" + object.values "^1.1.7" prop-types "^15.8.1" - resolve "^2.0.0-next.4" + resolve "^2.0.0-next.5" semver "^6.3.1" - string.prototype.matchall "^4.0.8" + string.prototype.matchall "^4.0.10" eslint-plugin-testing-library@^5.0.1: version "5.11.1" @@ -5970,15 +6137,15 @@ eslint-webpack-plugin@^3.1.1: schema-utils "^4.0.0" eslint@^8.3.0: - version "8.55.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.55.0.tgz#078cb7b847d66f2c254ea1794fa395bf8e7e03f8" - integrity sha512-iyUUAM0PCKj5QpwGfmCAG9XXbZCWsqP/eWAWrG/W0umvjuLRBECwSFdt+rCntju0xEH7teIABPwXpahftIaTdA== + version "8.57.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.57.0.tgz#c786a6fd0e0b68941aaf624596fb987089195668" + integrity sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ== dependencies: "@eslint-community/eslint-utils" "^4.2.0" "@eslint-community/regexpp" "^4.6.1" "@eslint/eslintrc" "^2.1.4" - "@eslint/js" "8.55.0" - "@humanwhocodes/config-array" "^0.11.13" + "@eslint/js" "8.57.0" + "@humanwhocodes/config-array" "^0.11.14" "@humanwhocodes/module-importer" "^1.0.1" "@nodelib/fs.walk" "^1.2.8" "@ungap/structured-clone" "^1.2.0" @@ -6123,13 +6290,13 @@ expect@^29.0.0: jest-util "^29.7.0" express@^4.17.3: - version "4.18.2" - resolved "https://registry.yarnpkg.com/express/-/express-4.18.2.tgz#3fabe08296e930c796c19e3c516979386ba9fd59" - integrity sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ== + version "4.18.3" + resolved "https://registry.yarnpkg.com/express/-/express-4.18.3.tgz#6870746f3ff904dee1819b82e4b51509afffb0d4" + integrity sha512-6VyCijWQ+9O7WuVMTRBTl+cjNNIzD5cY5mQ1WM8r/LEkI2u8EYpOotESNwzNlyCn3g+dmjKYI6BmNneSr/FSRw== dependencies: accepts "~1.3.8" array-flatten "1.1.1" - body-parser "1.20.1" + body-parser "1.20.2" content-disposition "0.5.4" content-type "~1.0.4" cookie "0.5.0" @@ -6186,9 +6353,9 @@ fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6: integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== fastq@^1.6.0: - version "1.15.0" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.15.0.tgz#d04d07c6a2a68fe4599fea8d2e103a937fae6b3a" - integrity sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw== + version "1.17.1" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.17.1.tgz#2a523f07a4e7b1e81a42b91b8bf2254107753b47" + integrity sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w== dependencies: reusify "^1.0.4" @@ -6290,37 +6457,37 @@ find-up@^5.0.0: locate-path "^6.0.0" path-exists "^4.0.0" -firebase@^10.7.0: - version "10.7.1" - resolved "https://registry.yarnpkg.com/firebase/-/firebase-10.7.1.tgz#71fa17a10146f388746ecc216a3e1e477a7bf9b5" - integrity sha512-Mlt7y7zQ43FtKp4SCyYie3tnrOL3UMF2XXiV4ZXMrC0d0wtcOYmABuybhkJpJCKILpdekxr39wjnaai0DZlWFg== - dependencies: - "@firebase/analytics" "0.10.0" - "@firebase/analytics-compat" "0.2.6" - "@firebase/app" "0.9.25" - "@firebase/app-check" "0.8.1" - "@firebase/app-check-compat" "0.3.8" - "@firebase/app-compat" "0.2.25" +firebase@^10.9.0: + version "10.9.0" + resolved "https://registry.yarnpkg.com/firebase/-/firebase-10.9.0.tgz#748899beb0ed8e381864566c223c4208d2306091" + integrity sha512-R8rDU3mg2dq0uPOoZ5Nc3BeZTbXxBPJS8HcZLtnV0f5/YrmpNsHngzmMHRVB+91T+ViJGVL/42dV23gS9w9ccw== + dependencies: + "@firebase/analytics" "0.10.1" + "@firebase/analytics-compat" "0.2.7" + "@firebase/app" "0.9.29" + "@firebase/app-check" "0.8.2" + "@firebase/app-check-compat" "0.3.9" + "@firebase/app-compat" "0.2.29" "@firebase/app-types" "0.9.0" - "@firebase/auth" "1.5.1" - "@firebase/auth-compat" "0.5.1" - "@firebase/database" "1.0.2" - "@firebase/database-compat" "1.0.2" - "@firebase/firestore" "4.4.0" - "@firebase/firestore-compat" "0.3.23" - "@firebase/functions" "0.11.0" - "@firebase/functions-compat" "0.3.6" - "@firebase/installations" "0.6.4" - "@firebase/installations-compat" "0.2.4" - "@firebase/messaging" "0.12.5" - "@firebase/messaging-compat" "0.2.5" - "@firebase/performance" "0.6.4" - "@firebase/performance-compat" "0.2.4" - "@firebase/remote-config" "0.4.4" - "@firebase/remote-config-compat" "0.2.4" - "@firebase/storage" "0.12.0" - "@firebase/storage-compat" "0.3.3" - "@firebase/util" "1.9.3" + "@firebase/auth" "1.6.2" + "@firebase/auth-compat" "0.5.4" + "@firebase/database" "1.0.3" + "@firebase/database-compat" "1.0.3" + "@firebase/firestore" "4.5.0" + "@firebase/firestore-compat" "0.3.27" + "@firebase/functions" "0.11.2" + "@firebase/functions-compat" "0.3.8" + "@firebase/installations" "0.6.5" + "@firebase/installations-compat" "0.2.5" + "@firebase/messaging" "0.12.6" + "@firebase/messaging-compat" "0.2.6" + "@firebase/performance" "0.6.5" + "@firebase/performance-compat" "0.2.5" + "@firebase/remote-config" "0.4.5" + "@firebase/remote-config-compat" "0.2.5" + "@firebase/storage" "0.12.2" + "@firebase/storage-compat" "0.3.5" + "@firebase/util" "1.9.4" flat-cache@^3.0.4: version "3.2.0" @@ -6332,9 +6499,9 @@ flat-cache@^3.0.4: rimraf "^3.0.2" flatted@^3.2.9: - version "3.2.9" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.9.tgz#7eb4c67ca1ba34232ca9d2d93e9886e611ad7daf" - integrity sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ== + version "3.3.1" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.3.1.tgz#21db470729a6734d4997002f439cb308987f567a" + integrity sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw== focus-lock@^1.0.0: version "1.0.0" @@ -6343,10 +6510,10 @@ focus-lock@^1.0.0: dependencies: tslib "^2.0.3" -follow-redirects@^1.0.0, follow-redirects@^1.15.0: - version "1.15.5" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.5.tgz#54d4d6d062c0fa7d9d17feb008461550e3ba8020" - integrity sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw== +follow-redirects@>=1.15.6, follow-redirects@^1.0.0, follow-redirects@^1.15.0: + version "1.15.6" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.6.tgz#7f815c0cda4249c74ff09e95ef97c23b5fd0399b" + integrity sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA== for-each@^0.3.3: version "0.3.3" @@ -6355,6 +6522,14 @@ for-each@^0.3.3: dependencies: is-callable "^1.1.3" +foreground-child@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.1.1.tgz#1d173e776d75d2772fed08efe4a0de1ea1b12d0d" + integrity sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg== + dependencies: + cross-spawn "^7.0.0" + signal-exit "^4.0.1" + fork-ts-checker-webpack-plugin@^6.5.0: version "6.5.3" resolved "https://registry.yarnpkg.com/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.3.tgz#eda2eff6e22476a2688d10661688c47f611b37f3" @@ -6397,7 +6572,7 @@ forwarded@0.2.0: resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== -fraction.js@^4.3.6: +fraction.js@^4.3.7: version "4.3.7" resolved "https://registry.yarnpkg.com/fraction.js/-/fraction.js-4.3.7.tgz#06ca0085157e42fda7f9e726e79fefc4068840f7" integrity sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew== @@ -6457,7 +6632,7 @@ fsevents@^2.3.2, fsevents@~2.3.2: resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== -function-bind@^1.1.1, function-bind@^1.1.2: +function-bind@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== @@ -6487,11 +6662,12 @@ get-caller-file@^2.0.5: resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== -get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@^1.2.0, get-intrinsic@^1.2.1, get-intrinsic@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.2.tgz#281b7622971123e1ef4b3c90fd7539306da93f3b" - integrity sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA== +get-intrinsic@^1.1.3, get-intrinsic@^1.2.1, get-intrinsic@^1.2.2, get-intrinsic@^1.2.3, get-intrinsic@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.4.tgz#e385f5a4b5227d449c3eabbad05494ef0abbeadd" + integrity sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ== dependencies: + es-errors "^1.3.0" function-bind "^1.1.2" has-proto "^1.0.1" has-symbols "^1.0.3" @@ -6517,13 +6693,14 @@ get-stream@^6.0.0: resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== -get-symbol-description@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6" - integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw== +get-symbol-description@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.2.tgz#533744d5aa20aca4e079c8e5daf7fd44202821f5" + integrity sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg== dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.1.1" + call-bind "^1.0.5" + es-errors "^1.3.0" + get-intrinsic "^1.2.4" get-user-locale@^1.2.0: version "1.5.1" @@ -6551,17 +6728,16 @@ glob-to-regexp@^0.4.1: resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e" integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== -glob@7.1.6: - version "7.1.6" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" - integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== +glob@^10.3.10: + version "10.3.10" + resolved "https://registry.yarnpkg.com/glob/-/glob-10.3.10.tgz#0351ebb809fd187fe421ab96af83d3a70715df4b" + integrity sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g== dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.4" - once "^1.3.0" - path-is-absolute "^1.0.0" + foreground-child "^3.1.0" + jackspeak "^2.3.5" + minimatch "^9.0.1" + minipass "^5.0.0 || ^6.0.2 || ^7.0.0" + path-scurry "^1.10.1" glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: version "7.2.3" @@ -6597,9 +6773,9 @@ globals@^11.1.0: integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== globals@^13.19.0: - version "13.23.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-13.23.0.tgz#ef31673c926a0976e1f61dab4dca57e0c0a8af02" - integrity sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA== + version "13.24.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.24.0.tgz#8432a19d78ce0c1e833949c36adb345400bb1171" + integrity sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ== dependencies: type-fest "^0.20.2" @@ -6671,34 +6847,34 @@ has-flag@^4.0.0: resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== -has-property-descriptors@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz#52ba30b6c5ec87fd89fa574bc1c39125c6f65340" - integrity sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg== +has-property-descriptors@^1.0.0, has-property-descriptors@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz#963ed7d071dc7bf5f084c5bfbe0d1b6222586854" + integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg== dependencies: - get-intrinsic "^1.2.2" + es-define-property "^1.0.0" -has-proto@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.1.tgz#1885c1305538958aff469fef37937c22795408e0" - integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg== +has-proto@^1.0.1, has-proto@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.3.tgz#b31ddfe9b0e6e9914536a6ab286426d0214f77fd" + integrity sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q== has-symbols@^1.0.1, has-symbols@^1.0.2, has-symbols@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== -has-tostringtag@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25" - integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== +has-tostringtag@^1.0.0, has-tostringtag@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz#2cdc42d40bef2e5b4eeab7c01a73c54ce7ab5abc" + integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw== dependencies: - has-symbols "^1.0.2" + has-symbols "^1.0.3" -hasown@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.0.tgz#f4c513d454a57b7c7e1650778de226b11700546c" - integrity sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA== +hasown@^2.0.0, hasown@^2.0.1, hasown@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" + integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== dependencies: function-bind "^1.1.2" @@ -6737,9 +6913,9 @@ html-encoding-sniffer@^2.0.1: whatwg-encoding "^1.0.5" html-entities@^2.1.0, html-entities@^2.3.2: - version "2.4.0" - resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-2.4.0.tgz#edd0cee70402584c8c76cc2c0556db09d1f45061" - integrity sha512-igBTJcNNNhvZFRtm8uA6xMY6xYleeDwn3PeBCkDz7tHttv4F2hsDI2aPgNERWzvRcNYHNT3ymRaQzllmXj4YsQ== + version "2.5.2" + resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-2.5.2.tgz#201a3cf95d3a15be7099521620d19dfb4f65359f" + integrity sha512-K//PSRMQk4FZ78Kyau+mZurHn3FH0Vwr+H36eE0rPbeYkRRi9YxceYPhuN60UwWorxyKHhqoAJl2OFKa4BVtaA== html-escaper@^2.0.0: version "2.0.2" @@ -6760,9 +6936,9 @@ html-minifier-terser@^6.0.2: terser "^5.10.0" html-webpack-plugin@^5.5.0: - version "5.5.4" - resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-5.5.4.tgz#517a48e6f046ff1ae1a172c983cd993eb79d2f6a" - integrity sha512-3wNSaVVxdxcu0jd4FpQFoICdqgxs4zIQQvj+2yQKFfBOnLETQ6X5CDWdeasuGlSsooFlMkEioWDTqBv1wvw5Iw== + version "5.6.0" + resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-5.6.0.tgz#50a8fa6709245608cb00e811eacecb8e0d7b7ea0" + integrity sha512-iwaY4wzbe48AfKLZ/Cc8k0L+FKG6oSNRaZ8x5A/T/IVDGyXcbHncM9TdDa93wn0FsSm82FhTKW7f3vS61thXAw== dependencies: "@types/html-minifier-terser" "^6.0.0" html-minifier-terser "^6.0.2" @@ -6872,11 +7048,6 @@ icss-utils@^5.0.0, icss-utils@^5.1.0: resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-5.1.0.tgz#c6be6858abd013d768e98366ae47e25d5887b1ae" integrity sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA== -idb@7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/idb/-/idb-7.0.1.tgz#d2875b3a2f205d854ee307f6d196f246fea590a7" - integrity sha512-UUxlE7vGWK5RfB/fDwEGgRf84DY/ieqNha6msMV99UsEMQhJ1RwbCd8AYBj3QMgnE3VZnfQvm4oKVCJTYlqIgg== - idb@7.1.1, idb@^7.0.1: version "7.1.1" resolved "https://registry.yarnpkg.com/idb/-/idb-7.1.1.tgz#d910ded866d32c7ced9befc5bfdf36f572ced72b" @@ -6890,9 +7061,9 @@ identity-obj-proxy@^3.0.0: harmony-reflect "^1.4.6" ignore@^5.2.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.0.tgz#67418ae40d34d6999c95ff56016759c718c82f78" - integrity sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg== + version "5.3.1" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.1.tgz#5073e554cd42c5b33b394375f538b8593e34d4ef" + integrity sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw== immer@^10.0.3: version "10.0.3" @@ -6953,7 +7124,7 @@ ini@^1.3.5: resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== -internal-slot@^1.0.4, internal-slot@^1.0.5: +internal-slot@^1.0.4: version "1.0.6" resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.6.tgz#37e756098c4911c5e912b8edbf71ed3aa116f930" integrity sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg== @@ -6962,6 +7133,15 @@ internal-slot@^1.0.4, internal-slot@^1.0.5: hasown "^2.0.0" side-channel "^1.0.4" +internal-slot@^1.0.5, internal-slot@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.7.tgz#c06dcca3ed874249881007b0a5523b172a190802" + integrity sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g== + dependencies: + es-errors "^1.3.0" + hasown "^2.0.0" + side-channel "^1.0.4" + invariant@^2.2.4: version "2.2.4" resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" @@ -6987,14 +7167,13 @@ is-arguments@^1.1.1: call-bind "^1.0.2" has-tostringtag "^1.0.0" -is-array-buffer@^3.0.1, is-array-buffer@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.2.tgz#f2653ced8412081638ecb0ebbd0c41c6e0aecbbe" - integrity sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w== +is-array-buffer@^3.0.2, is-array-buffer@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.4.tgz#7a1f92b3d61edd2bc65d24f130530ea93d7fae98" + integrity sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw== dependencies: call-bind "^1.0.2" - get-intrinsic "^1.2.0" - is-typed-array "^1.1.10" + get-intrinsic "^1.2.1" is-arrayish@^0.2.1: version "0.2.1" @@ -7042,6 +7221,13 @@ is-core-module@^2.13.0, is-core-module@^2.13.1: dependencies: hasown "^2.0.0" +is-data-view@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-data-view/-/is-data-view-1.0.1.tgz#4b4d3a511b70f3dc26d42c03ca9ca515d847759f" + integrity sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w== + dependencies: + is-typed-array "^1.1.13" + is-date-object@^1.0.1, is-date-object@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" @@ -7090,20 +7276,25 @@ is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: dependencies: is-extglob "^2.1.1" -is-map@^2.0.1, is-map@^2.0.2: +is-map@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.2.tgz#00922db8c9bf73e81b7a335827bc2a43f2b91127" integrity sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg== +is-map@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.3.tgz#ede96b7fe1e270b3c4465e3a465658764926d62e" + integrity sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw== + is-module@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-module/-/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591" integrity sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g== -is-negative-zero@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150" - integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA== +is-negative-zero@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.3.tgz#ced903a027aca6381b777a5743069d7376a49747" + integrity sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw== is-number-object@^1.0.4: version "1.0.7" @@ -7160,17 +7351,22 @@ is-root@^2.1.0: resolved "https://registry.yarnpkg.com/is-root/-/is-root-2.1.0.tgz#809e18129cf1129644302a4f8544035d51984a9c" integrity sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg== -is-set@^2.0.1, is-set@^2.0.2: +is-set@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.2.tgz#90755fa4c2562dc1c5d4024760d6119b94ca18ec" integrity sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g== -is-shared-array-buffer@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz#8f259c573b60b6a32d4058a1a07430c0a7344c79" - integrity sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA== +is-set@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.3.tgz#8ab209ea424608141372ded6e0cb200ef1d9d01d" + integrity sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg== + +is-shared-array-buffer@^1.0.2, is-shared-array-buffer@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz#1237f1cba059cdb62431d378dcc37d9680181688" + integrity sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg== dependencies: - call-bind "^1.0.2" + call-bind "^1.0.7" is-stream@^2.0.0: version "2.0.1" @@ -7191,22 +7387,22 @@ is-symbol@^1.0.2, is-symbol@^1.0.3: dependencies: has-symbols "^1.0.2" -is-typed-array@^1.1.10, is-typed-array@^1.1.12, is-typed-array@^1.1.9: - version "1.1.12" - resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.12.tgz#d0bab5686ef4a76f7a73097b95470ab199c57d4a" - integrity sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg== +is-typed-array@^1.1.13: + version "1.1.13" + resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.13.tgz#d6c5ca56df62334959322d7d7dd1cca50debe229" + integrity sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw== dependencies: - which-typed-array "^1.1.11" + which-typed-array "^1.1.14" is-typedarray@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" integrity sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA== -is-weakmap@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-weakmap/-/is-weakmap-2.0.1.tgz#5008b59bdc43b698201d18f62b37b2ca243e8cf2" - integrity sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA== +is-weakmap@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/is-weakmap/-/is-weakmap-2.0.2.tgz#bf72615d649dfe5f699079c54b83e47d1ae19cfd" + integrity sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w== is-weakref@^1.0.2: version "1.0.2" @@ -7215,13 +7411,13 @@ is-weakref@^1.0.2: dependencies: call-bind "^1.0.2" -is-weakset@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/is-weakset/-/is-weakset-2.0.2.tgz#4569d67a747a1ce5a994dfd4ef6dcea76e7c0a1d" - integrity sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg== +is-weakset@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/is-weakset/-/is-weakset-2.0.3.tgz#e801519df8c0c43e12ff2834eead84ec9e624007" + integrity sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ== dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.1.1" + call-bind "^1.0.7" + get-intrinsic "^1.2.4" is-wsl@^2.2.0: version "2.2.0" @@ -7280,9 +7476,9 @@ istanbul-lib-source-maps@^4.0.0: source-map "^0.6.1" istanbul-reports@^3.1.3: - version "3.1.6" - resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.6.tgz#2544bcab4768154281a2f0870471902704ccaa1a" - integrity sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg== + version "3.1.7" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.7.tgz#daed12b9e1dca518e15c056e1e537e741280fa0b" + integrity sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g== dependencies: html-escaper "^2.0.0" istanbul-lib-report "^3.0.0" @@ -7298,6 +7494,15 @@ iterator.prototype@^1.1.2: reflect.getprototypeof "^1.0.4" set-function-name "^2.0.1" +jackspeak@^2.3.5: + version "2.3.6" + resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-2.3.6.tgz#647ecc472238aee4b06ac0e461acc21a8c505ca8" + integrity sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ== + dependencies: + "@isaacs/cliui" "^8.0.2" + optionalDependencies: + "@pkgjs/parseargs" "^0.11.0" + jake@^10.8.5: version "10.8.7" resolved "https://registry.yarnpkg.com/jake/-/jake-10.8.7.tgz#63a32821177940c33f356e0ba44ff9d34e1c7d8f" @@ -8054,9 +8259,9 @@ lilconfig@^2.0.3, lilconfig@^2.1.0: integrity sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ== lilconfig@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-3.0.0.tgz#f8067feb033b5b74dab4602a5f5029420be749bc" - integrity sha512-K2U4W2Ff5ibV7j7ydLr+zLAkIg5JJ4lPn1Ltsdt+Tz/IjQ8buJ55pZAxoP34lqIiwtF9iAvtLv3JGv7CAyAg+g== + version "3.1.1" + resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-3.1.1.tgz#9d8a246fa753106cfc205fd2d77042faca56e5e3" + integrity sha512-O18pf7nyvHTckunPWCV1XUNXU1piu01y2b7ATJ0ppkUkk8ocqVWBrYjJBCwHDjD/ZWcfyrA0P4gKhzWGi5EINQ== lines-and-columns@^1.1.6: version "1.2.4" @@ -8182,6 +8387,11 @@ lru-cache@^6.0.0: dependencies: yallist "^4.0.0" +"lru-cache@^9.1.1 || ^10.0.0": + version "10.2.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.2.0.tgz#0bd445ca57363465900f4d1f9bd8db343a4d95c3" + integrity sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q== + lz-string@^1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/lz-string/-/lz-string-1.5.0.tgz#c1ab50f77887b712621201ba9fd4e3a6ed099941" @@ -8235,13 +8445,20 @@ media-typer@0.3.0: resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== -memfs@^3.1.2, memfs@^3.4.3: +memfs@^3.1.2: version "3.6.0" resolved "https://registry.yarnpkg.com/memfs/-/memfs-3.6.0.tgz#d7a2110f86f79dd950a8b6df6d57bc984aa185f6" integrity sha512-EGowvkkgbMcIChjMTMkESFDbZeSh8xZ7kNSF0hAiAN4Jh6jgHCRS0Ga/+C8y6Au+oqpezRHCfPsmJ2+DwAgiwQ== dependencies: fs-monkey "^1.0.4" +memfs@^4.6.0: + version "4.8.0" + resolved "https://registry.yarnpkg.com/memfs/-/memfs-4.8.0.tgz#0ea1ecb137219883c2e7c5139f4fa109935f7e39" + integrity sha512-fcs7trFxZlOMadmTw5nyfOwS3il9pr3y+6xzLfXNwmuR/D0i4wz6rJURxArAbcJDGalbpbMvQ/IFI0NojRZgRg== + dependencies: + tslib "^2.0.0" + merge-class-names@^1.1.1: version "1.4.2" resolved "https://registry.yarnpkg.com/merge-class-names/-/merge-class-names-1.4.2.tgz#78d6d95ab259e7e647252a7988fd25a27d5a8835" @@ -8315,11 +8532,12 @@ min-indent@^1.0.0: integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== mini-css-extract-plugin@^2.4.5: - version "2.7.6" - resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-2.7.6.tgz#282a3d38863fddcd2e0c220aaed5b90bc156564d" - integrity sha512-Qk7HcgaPkGG6eD77mLvZS1nmxlao3j+9PkrT9Uc7HAE1id3F41+DdBRYRYkbyfNRGzm8/YWtzhw7nVPmwhqTQw== + version "2.8.1" + resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-2.8.1.tgz#75245f3f30ce3a56dbdd478084df6fe475f02dc7" + integrity sha512-/1HDlyFRxWIZPI1ZpgqlZ8jMw/1Dp/dl3P0L1jtZ+zVcHqwPhGwaJwKL00WVgfnBy6PWCde9W65or7IIETImuA== dependencies: schema-utils "^4.0.0" + tapable "^2.2.1" minimalistic-assert@^1.0.0: version "1.0.1" @@ -8340,11 +8558,23 @@ minimatch@^5.0.1: dependencies: brace-expansion "^2.0.1" +minimatch@^9.0.1: + version "9.0.3" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.3.tgz#a6e00c3de44c3a542bfaae70abfc22420a6da825" + integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg== + dependencies: + brace-expansion "^2.0.1" + minimist@^1.2.0, minimist@^1.2.6: version "1.2.8" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== +"minipass@^5.0.0 || ^6.0.2 || ^7.0.0": + version "7.0.4" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.0.4.tgz#dbce03740f50a4786ba994c1fb908844d27b038c" + integrity sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ== + mkdirp@~0.5.1: version "0.5.6" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" @@ -8454,7 +8684,7 @@ npm-run-path@^4.0.1: dependencies: path-key "^3.0.0" -nth-check@^1.0.2, nth-check@^2.0.1, nth-check@^2.1.1: +nth-check@>=2.1.1, nth-check@^1.0.2, nth-check@^2.0.1, nth-check@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.1.1.tgz#c9eab428effce36cd6b92c924bdb000ef1f1ed1d" integrity sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w== @@ -8476,7 +8706,7 @@ object-hash@^3.0.0: resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-3.0.0.tgz#73f97f753e7baffc0e2cc9d6e079079744ac82e9" integrity sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw== -object-inspect@^1.13.1, object-inspect@^1.9.0: +object-inspect@^1.13.1: version "1.13.1" resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.1.tgz#b96c6109324ccfef6b12216a956ca4dc2ff94bc2" integrity sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ== @@ -8494,7 +8724,7 @@ object-keys@^1.1.1: resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== -object.assign@^4.1.4: +object.assign@^4.1.4, object.assign@^4.1.5: version "4.1.5" resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.5.tgz#3a833f9ab7fdb80fc9e8d2300c803d216d8fdbb0" integrity sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ== @@ -8504,23 +8734,24 @@ object.assign@^4.1.4: has-symbols "^1.0.3" object-keys "^1.1.1" -object.entries@^1.1.6, object.entries@^1.1.7: - version "1.1.7" - resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.7.tgz#2b47760e2a2e3a752f39dd874655c61a7f03c131" - integrity sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA== +object.entries@^1.1.7: + version "1.1.8" + resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.8.tgz#bffe6f282e01f4d17807204a24f8edd823599c41" + integrity sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ== dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" + call-bind "^1.0.7" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" -object.fromentries@^2.0.6, object.fromentries@^2.0.7: - version "2.0.7" - resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.7.tgz#71e95f441e9a0ea6baf682ecaaf37fa2a8d7e616" - integrity sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA== +object.fromentries@^2.0.7: + version "2.0.8" + resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.8.tgz#f7195d8a9b97bd95cbc1999ea939ecd1a2b00c65" + integrity sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ== dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" + es-object-atoms "^1.0.0" object.getownpropertydescriptors@^2.1.0: version "2.1.7" @@ -8534,16 +8765,15 @@ object.getownpropertydescriptors@^2.1.0: safe-array-concat "^1.0.0" object.groupby@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/object.groupby/-/object.groupby-1.0.1.tgz#d41d9f3c8d6c778d9cbac86b4ee9f5af103152ee" - integrity sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ== + version "1.0.3" + resolved "https://registry.yarnpkg.com/object.groupby/-/object.groupby-1.0.3.tgz#9b125c36238129f6f7b61954a1e7176148d5002e" + integrity sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ== dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - get-intrinsic "^1.2.1" + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" -object.hasown@^1.1.2: +object.hasown@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/object.hasown/-/object.hasown-1.1.3.tgz#6a5f2897bb4d3668b8e79364f98ccf971bda55ae" integrity sha512-fFI4VcYpRHvSLXxP7yiZOMAd331cPfd2p7PFDVbgUsYOfCT3tICVqXWngbjr4m49OvsBwUBQ6O2uQoJvy3RexA== @@ -8552,20 +8782,20 @@ object.hasown@^1.1.2: es-abstract "^1.22.1" object.values@^1.1.0, object.values@^1.1.6, object.values@^1.1.7: - version "1.1.7" - resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.7.tgz#617ed13272e7e1071b43973aa1655d9291b8442a" - integrity sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng== + version "1.2.0" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.2.0.tgz#65405a9d92cee68ac2d303002e0b8470a4d9ab1b" + integrity sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ== dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" + call-bind "^1.0.7" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" obuf@^1.0.0, obuf@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.2.tgz#09bea3343d41859ebd446292d11c9d4db619084e" integrity sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg== -on-finished@2.4.1: +on-finished@2.4.1, on-finished@^2.4.1: version "2.4.1" resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== @@ -8740,6 +8970,14 @@ path-parse@^1.0.7: resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== +path-scurry@^1.10.1: + version "1.10.1" + resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.10.1.tgz#9ba6bf5aa8500fe9fd67df4f0d9483b2b0bfc698" + integrity sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ== + dependencies: + lru-cache "^9.1.1 || ^10.0.0" + minipass "^5.0.0 || ^6.0.2 || ^7.0.0" + path-to-regexp@0.1.7: version "0.1.7" resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" @@ -8789,6 +9027,11 @@ pkg-up@^3.1.0: dependencies: find-up "^3.0.0" +possible-typed-array-names@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz#89bb63c6fada2c3e90adc4a647beeeb39cc7bf8f" + integrity sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q== + postcss-attribute-case-insensitive@^5.0.2: version "5.0.2" resolved "https://registry.yarnpkg.com/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-5.0.2.tgz#03d761b24afc04c09e757e92ff53716ae8ea2741" @@ -9065,19 +9308,19 @@ postcss-modules-extract-imports@^3.0.0: resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz#cda1f047c0ae80c97dbe28c3e76a43b88025741d" integrity sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw== -postcss-modules-local-by-default@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.3.tgz#b08eb4f083050708998ba2c6061b50c2870ca524" - integrity sha512-2/u2zraspoACtrbFRnTijMiQtb4GW4BvatjaG/bCjYQo8kLTdevCUlwuBHx2sCnSyrI3x3qj4ZK1j5LQBgzmwA== +postcss-modules-local-by-default@^4.0.4: + version "4.0.4" + resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.4.tgz#7cbed92abd312b94aaea85b68226d3dec39a14e6" + integrity sha512-L4QzMnOdVwRm1Qb8m4x8jsZzKAaPAgrUF1r/hjDR2Xj7R+8Zsf97jAlSQzWtKx5YNiNGN8QxmPFIc/sh+RQl+Q== dependencies: icss-utils "^5.0.0" postcss-selector-parser "^6.0.2" postcss-value-parser "^4.1.0" -postcss-modules-scope@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz#9ef3151456d3bbfa120ca44898dfca6f2fa01f06" - integrity sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg== +postcss-modules-scope@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-3.1.1.tgz#32cfab55e84887c079a19bbb215e721d683ef134" + integrity sha512-uZgqzdTleelWjzJY+Fhti6F3C9iF1JR/dODLs/JDefozYcKTBCdD8BIl6nNPbTbcLnGrk56hzwZC2DaGNvYjzA== dependencies: postcss-selector-parser "^6.0.4" @@ -9297,9 +9540,9 @@ postcss-selector-not@^6.0.1: postcss-selector-parser "^6.0.10" postcss-selector-parser@^6.0.10, postcss-selector-parser@^6.0.11, postcss-selector-parser@^6.0.2, postcss-selector-parser@^6.0.4, postcss-selector-parser@^6.0.5, postcss-selector-parser@^6.0.9: - version "6.0.13" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz#d05d8d76b1e8e173257ef9d60b706a8e5e99bf1b" - integrity sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ== + version "6.0.16" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.16.tgz#3b88b9f5c5abd989ef4e2fc9ec8eedd34b20fb04" + integrity sha512-A0RVJrX+IUkVZbW3ClroRWurercFhieevHB38sr2+l9eUClMqome3LmEmnhlNy+5Mr2EYN6B2Kaw9wYdd+VHiw== dependencies: cssesc "^3.0.0" util-deprecate "^1.0.2" @@ -9324,23 +9567,14 @@ postcss-value-parser@^4.0.0, postcss-value-parser@^4.1.0, postcss-value-parser@^ resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514" integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== -postcss@^7.0.35, postcss@^8.4.31: - version "8.4.33" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.33.tgz#1378e859c9f69bf6f638b990a0212f43e2aaa742" - integrity sha512-Kkpbhhdjw2qQs2O2DGX+8m5OVqEcbB9HRBvuYM9pgrjEFUg30A9LmXNlTAUj4S9kgtGyrMbTzVjH7E+s5Re2yg== +postcss@>=8.4.31, postcss@^7.0.35, postcss@^8.3.5, postcss@^8.4.23, postcss@^8.4.33, postcss@^8.4.4: + version "8.4.36" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.36.tgz#dba513c3c3733c44e0288a712894f8910bbaabc6" + integrity sha512-/n7eumA6ZjFHAsbX30yhHup/IMkOmlmvtEi7P+6RMYf+bGJSUHc3geH4a0NSZxAz/RJfiS9tooCTs9LAVYUZKw== dependencies: nanoid "^3.3.7" picocolors "^1.0.0" - source-map-js "^1.0.2" - -postcss@^8.3.5, postcss@^8.4.21, postcss@^8.4.23, postcss@^8.4.4: - version "8.4.32" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.32.tgz#1dac6ac51ab19adb21b8b34fd2d93a86440ef6c9" - integrity sha512-D/kj5JNu6oo2EIy+XL/26JEDTlIbB8hw85G8StOE6L74RQAVVP5rej6wxCNqyMbR4RkPfqvezVbPw81Ngd6Kcw== - dependencies: - nanoid "^3.3.7" - picocolors "^1.0.0" - source-map-js "^1.0.2" + source-map-js "^1.1.0" prelude-ls@^1.2.1: version "1.2.1" @@ -9433,9 +9667,9 @@ property-expr@^2.0.5: integrity sha512-SVtmxhRE/CGkn3eZY1T6pC8Nln6Fr/lu1mKSgRud0eC73whjGfoAogbn78LkD8aFL0zz3bAFerKSnOl7NlErBA== protobufjs@^7.2.4: - version "7.2.5" - resolved "https://registry.yarnpkg.com/protobufjs/-/protobufjs-7.2.5.tgz#45d5c57387a6d29a17aab6846dcc283f9b8e7f2d" - integrity sha512-gGXRSXvxQ7UiPgfw8gevrfRWcTlSbOFg+p/N+JVJEK5VhueL2miT6qTymqAmjr1Q5WbOCyJbyrk6JfWKwlFn6A== + version "7.2.6" + resolved "https://registry.yarnpkg.com/protobufjs/-/protobufjs-7.2.6.tgz#4a0ccd79eb292717aacf07530a07e0ed20278215" + integrity sha512-dgJaEDDL6x8ASUZ1YqWciTRrdOuYNzoOf27oHNfdyvKqHr5i0FV7FSLU+aIeFjyFgVxrpTOtQUi0BLLBymZaBw== dependencies: "@protobufjs/aspromise" "^1.1.2" "@protobufjs/base64" "^1.1.2" @@ -9519,10 +9753,10 @@ range-parser@^1.2.1, range-parser@~1.2.1: resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== -raw-body@2.5.1: - version "2.5.1" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.1.tgz#fe1b1628b181b700215e5fd42389f98b71392857" - integrity sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig== +raw-body@2.5.2: + version "2.5.2" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.2.tgz#99febd83b90e08975087e8f1f9419a149366b68a" + integrity sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA== dependencies: bytes "3.1.2" http-errors "2.0.0" @@ -9858,14 +10092,15 @@ redux@^5.0.0: integrity sha512-blLIYmYetpZMET6Q6uCY7Jtl/Im5OBldy+vNPauA8vvsdqyt66oep4EUpAMWNHauTC6xa9JuRPhRB72rY82QGA== reflect.getprototypeof@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/reflect.getprototypeof/-/reflect.getprototypeof-1.0.4.tgz#aaccbf41aca3821b87bb71d9dcbc7ad0ba50a3f3" - integrity sha512-ECkTw8TmJwW60lOTR+ZkODISW6RQ8+2CL3COqtiJKLd6MmB45hN51HprHFziKLGkAuTGQhBb91V8cy+KHlaCjw== + version "1.0.6" + resolved "https://registry.yarnpkg.com/reflect.getprototypeof/-/reflect.getprototypeof-1.0.6.tgz#3ab04c32a8390b770712b7a8633972702d278859" + integrity sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg== dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - get-intrinsic "^1.2.1" + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.1" + es-errors "^1.3.0" + get-intrinsic "^1.2.4" globalthis "^1.0.3" which-builtin-type "^1.1.3" @@ -9887,9 +10122,9 @@ regenerator-runtime@^0.13.9: integrity sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg== regenerator-runtime@^0.14.0: - version "0.14.0" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz#5e19d68eb12d486f797e15a3c6a918f7cec5eb45" - integrity sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA== + version "0.14.1" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz#356ade10263f685dda125100cd862c1db895327f" + integrity sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw== regenerator-transform@^0.15.2: version "0.15.2" @@ -9899,18 +10134,19 @@ regenerator-transform@^0.15.2: "@babel/runtime" "^7.8.4" regex-parser@^2.2.11: - version "2.2.11" - resolved "https://registry.yarnpkg.com/regex-parser/-/regex-parser-2.2.11.tgz#3b37ec9049e19479806e878cabe7c1ca83ccfe58" - integrity sha512-jbD/FT0+9MBU2XAZluI7w2OBs1RBi6p9M83nkoZayQXXU9e8Robt69FcZc7wU4eJD/YFTjn1JdCk3rbMJajz8Q== + version "2.3.0" + resolved "https://registry.yarnpkg.com/regex-parser/-/regex-parser-2.3.0.tgz#4bb61461b1a19b8b913f3960364bb57887f920ee" + integrity sha512-TVILVSz2jY5D47F4mA4MppkBrafEaiUWJO/TcZHEIuI13AqoZMkK1WMA4Om1YkYbTx+9Ki1/tSUXbceyr9saRg== -regexp.prototype.flags@^1.5.0, regexp.prototype.flags@^1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz#90ce989138db209f81492edd734183ce99f9677e" - integrity sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg== +regexp.prototype.flags@^1.5.0, regexp.prototype.flags@^1.5.1, regexp.prototype.flags@^1.5.2: + version "1.5.2" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz#138f644a3350f981a858c44f6bb1a61ff59be334" + integrity sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw== dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - set-function-name "^2.0.0" + call-bind "^1.0.6" + define-properties "^1.2.1" + es-errors "^1.3.0" + set-function-name "^2.0.1" regexpu-core@^5.3.1: version "5.3.2" @@ -10014,7 +10250,7 @@ resolve@^1.1.7, resolve@^1.14.2, resolve@^1.19.0, resolve@^1.20.0, resolve@^1.22 path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" -resolve@^2.0.0-next.4: +resolve@^2.0.0-next.5: version "2.0.0-next.5" resolved "https://registry.yarnpkg.com/resolve/-/resolve-2.0.0-next.5.tgz#6b0ec3107e671e52b68cd068ef327173b90dc03c" integrity sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA== @@ -10064,13 +10300,13 @@ run-parallel@^1.1.9: dependencies: queue-microtask "^1.2.2" -safe-array-concat@^1.0.0, safe-array-concat@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.0.1.tgz#91686a63ce3adbea14d61b14c99572a8ff84754c" - integrity sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q== +safe-array-concat@^1.0.0, safe-array-concat@^1.1.0, safe-array-concat@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.1.2.tgz#81d77ee0c4e8b863635227c721278dd524c20edb" + integrity sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q== dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.2.1" + call-bind "^1.0.7" + get-intrinsic "^1.2.4" has-symbols "^1.0.3" isarray "^2.0.5" @@ -10084,13 +10320,13 @@ safe-buffer@5.2.1, safe-buffer@>=5.1.0, safe-buffer@^5.1.0, safe-buffer@~5.2.0: resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== -safe-regex-test@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.0.tgz#793b874d524eb3640d1873aad03596db2d4f2295" - integrity sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA== +safe-regex-test@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.3.tgz#a5b4c0f06e0ab50ea2c395c14d8371232924c377" + integrity sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw== dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.1.3" + call-bind "^1.0.6" + es-errors "^1.3.0" is-regex "^1.1.4" "safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0": @@ -10185,10 +10421,10 @@ semver@^6.0.0, semver@^6.3.0, semver@^6.3.1: resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== -semver@^7.3.2, semver@^7.3.5, semver@^7.3.7, semver@^7.3.8, semver@^7.5.3: - version "7.5.4" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" - integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== +semver@^7.3.2, semver@^7.3.5, semver@^7.3.7, semver@^7.5.3, semver@^7.5.4: + version "7.6.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.0.tgz#1a46a4db4bffcccd97b743b5005c8325f23d4e2d" + integrity sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg== dependencies: lru-cache "^6.0.0" @@ -10219,9 +10455,9 @@ serialize-javascript@^4.0.0: randombytes "^2.1.0" serialize-javascript@^6.0.0, serialize-javascript@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.1.tgz#b206efb27c3da0b0ab6b52f48d170b7996458e5c" - integrity sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w== + version "6.0.2" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.2.tgz#defa1e055c83bf6d59ea805d8da862254eb6a6c2" + integrity sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g== dependencies: randombytes "^2.1.0" @@ -10248,24 +10484,27 @@ serve-static@1.15.0: parseurl "~1.3.3" send "0.18.0" -set-function-length@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.1.1.tgz#4bc39fafb0307224a33e106a7d35ca1218d659ed" - integrity sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ== +set-function-length@^1.2.1: + version "1.2.2" + resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.2.tgz#aac72314198eaed975cf77b2c3b6b880695e5449" + integrity sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg== dependencies: - define-data-property "^1.1.1" - get-intrinsic "^1.2.1" + define-data-property "^1.1.4" + es-errors "^1.3.0" + function-bind "^1.1.2" + get-intrinsic "^1.2.4" gopd "^1.0.1" - has-property-descriptors "^1.0.0" + has-property-descriptors "^1.0.2" set-function-name@^2.0.0, set-function-name@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/set-function-name/-/set-function-name-2.0.1.tgz#12ce38b7954310b9f61faa12701620a0c882793a" - integrity sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA== + version "2.0.2" + resolved "https://registry.yarnpkg.com/set-function-name/-/set-function-name-2.0.2.tgz#16a705c5a0dc2f5e638ca96d8a8cd4e1c2b90985" + integrity sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ== dependencies: - define-data-property "^1.0.1" + define-data-property "^1.1.4" + es-errors "^1.3.0" functions-have-names "^1.2.3" - has-property-descriptors "^1.0.0" + has-property-descriptors "^1.0.2" setprototypeof@1.1.0: version "1.1.0" @@ -10295,19 +10534,25 @@ shell-quote@^1.7.3, shell-quote@^1.8.1: integrity sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA== side-channel@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" - integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== + version "1.0.6" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.6.tgz#abd25fb7cd24baf45466406b1096b7831c9215f2" + integrity sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA== dependencies: - call-bind "^1.0.0" - get-intrinsic "^1.0.2" - object-inspect "^1.9.0" + call-bind "^1.0.7" + es-errors "^1.3.0" + get-intrinsic "^1.2.4" + object-inspect "^1.13.1" signal-exit@^3.0.2, signal-exit@^3.0.3: version "3.0.7" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== +signal-exit@^4.0.1: + version "4.1.0" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04" + integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== + sisteransi@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" @@ -10337,10 +10582,10 @@ source-list-map@^2.0.0, source-list-map@^2.0.1: resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34" integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw== -source-map-js@^1.0.1, source-map-js@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" - integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== +source-map-js@^1.0.1, source-map-js@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.1.0.tgz#9e7d5cb46f0689fb6691b30f226937558d0fa94b" + integrity sha512-9vC2SfsJzlej6MAaMPLu8HiBSHGdRAJ9hVFYN1ibZoNkeanmDmLUcIrj6G9DGL7XMJ54AKg/G75akXl1/izTOw== source-map-loader@^3.0.0: version "3.0.2" @@ -10476,7 +10721,7 @@ string-natural-compare@^3.0.1: resolved "https://registry.yarnpkg.com/string-natural-compare/-/string-natural-compare-3.0.1.tgz#7a42d58474454963759e8e8b7ae63d71c1e7fdf4" integrity sha512-n3sPwynL1nwKi3WJ6AIsClwBMa0zTi54fn2oLU6ndfTSIO05xaznjSf15PcBZU6FNWbmN5Q6cxT4V5hGvB4taw== -string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: +"string-width-cjs@npm:string-width@^4.2.0", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== @@ -10485,7 +10730,16 @@ string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.1" -string.prototype.matchall@^4.0.6, string.prototype.matchall@^4.0.8: +string-width@^5.0.1, string-width@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794" + integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== + dependencies: + eastasianwidth "^0.2.0" + emoji-regex "^9.2.2" + strip-ansi "^7.0.1" + +string.prototype.matchall@^4.0.10, string.prototype.matchall@^4.0.6: version "4.0.10" resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.10.tgz#a1553eb532221d4180c51581d6072cd65d1ee100" integrity sha512-rGXbGmOEosIQi6Qva94HUjgPs9vKW+dkG7Y8Q5O2OYkWL6wFaTRZO8zM4mhP94uX55wgyrXzfS2aGtGzUL7EJQ== @@ -10500,23 +10754,24 @@ string.prototype.matchall@^4.0.6, string.prototype.matchall@^4.0.8: set-function-name "^2.0.0" side-channel "^1.0.4" -string.prototype.trim@^1.2.8: - version "1.2.8" - resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz#f9ac6f8af4bd55ddfa8895e6aea92a96395393bd" - integrity sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ== +string.prototype.trim@^1.2.8, string.prototype.trim@^1.2.9: + version "1.2.9" + resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz#b6fa326d72d2c78b6df02f7759c73f8f6274faa4" + integrity sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw== dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.0" + es-object-atoms "^1.0.0" -string.prototype.trimend@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz#1bb3afc5008661d73e2dc015cd4853732d6c471e" - integrity sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA== +string.prototype.trimend@^1.0.7, string.prototype.trimend@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz#3651b8513719e8a9f48de7f2f77640b26652b229" + integrity sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ== dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" + call-bind "^1.0.7" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" string.prototype.trimstart@^1.0.7: version "1.0.7" @@ -10550,7 +10805,7 @@ stringify-object@^3.3.0: is-obj "^1.0.1" is-regexp "^1.0.0" -strip-ansi@^6.0.0, strip-ansi@^6.0.1: +"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.0, strip-ansi@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== @@ -10597,9 +10852,9 @@ strip-json-comments@^3.1.1: integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== style-loader@^3.3.1: - version "3.3.3" - resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-3.3.3.tgz#bba8daac19930169c0c9c96706749a597ae3acff" - integrity sha512-53BiGLXAcll9maCYtZi2RCQZKa8NQQai5C4horqKyRmHj9H7QmcUyucrH+4KW/gBQbXM2AsB0axoEcFZPlfPcw== + version "3.3.4" + resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-3.3.4.tgz#f30f786c36db03a45cbd55b6a70d930c479090e7" + integrity sha512-0WqXzrsMTyb8yjZJHDqwmnwRJvhALK9LfRtRc6B4UTWe8AijYLZYZ9thuJTZc2VfQWINADW/j+LiJnfy2RoC1w== stylehacks@^5.1.1: version "5.1.1" @@ -10615,13 +10870,13 @@ stylis@4.2.0: integrity sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw== sucrase@^3.32.0: - version "3.34.0" - resolved "https://registry.yarnpkg.com/sucrase/-/sucrase-3.34.0.tgz#1e0e2d8fcf07f8b9c3569067d92fbd8690fb576f" - integrity sha512-70/LQEZ07TEcxiU2dz51FKaE6hCTWC6vr7FOk3Gr0U60C3shtAN+H+BFr9XlYe5xqf3RA8nrc+VIwzCfnxuXJw== + version "3.35.0" + resolved "https://registry.yarnpkg.com/sucrase/-/sucrase-3.35.0.tgz#57f17a3d7e19b36d8995f06679d121be914ae263" + integrity sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA== dependencies: "@jridgewell/gen-mapping" "^0.3.2" commander "^4.0.0" - glob "7.1.6" + glob "^10.3.10" lines-and-columns "^1.1.6" mz "^2.7.0" pirates "^4.0.1" @@ -10704,9 +10959,9 @@ symbol-tree@^3.2.4: integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== tailwindcss@^3.0.2: - version "3.3.6" - resolved "https://registry.yarnpkg.com/tailwindcss/-/tailwindcss-3.3.6.tgz#4dd7986bf4902ad385d90d45fd4b2fa5fab26d5f" - integrity sha512-AKjF7qbbLvLaPieoKeTjG1+FyNZT6KaJMJPFeQyLfIp7l82ggH1fbHJSsYIvnbTFQOlkh+gBYpyby5GT1LIdLw== + version "3.4.1" + resolved "https://registry.yarnpkg.com/tailwindcss/-/tailwindcss-3.4.1.tgz#f512ca5d1dd4c9503c7d3d28a968f1ad8f5c839d" + integrity sha512-qAYmXRfk3ENzuPBakNK0SRrUDipP8NQnEY6772uDhflcQz5EhRdD7JNZxyrFHVQNCwULPBn6FNPp9brpO7ctcA== dependencies: "@alloc/quick-lru" "^5.2.0" arg "^5.0.2" @@ -10736,7 +10991,7 @@ tapable@^1.0.0: resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== -tapable@^2.0.0, tapable@^2.1.1, tapable@^2.2.0: +tapable@^2.0.0, tapable@^2.1.1, tapable@^2.2.0, tapable@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0" integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== @@ -10764,21 +11019,21 @@ terminal-link@^2.0.0: ansi-escapes "^4.2.1" supports-hyperlinks "^2.0.0" -terser-webpack-plugin@^5.2.5, terser-webpack-plugin@^5.3.7: - version "5.3.9" - resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.9.tgz#832536999c51b46d468067f9e37662a3b96adfe1" - integrity sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA== +terser-webpack-plugin@^5.2.5, terser-webpack-plugin@^5.3.10: + version "5.3.10" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz#904f4c9193c6fd2a03f693a2150c62a92f40d199" + integrity sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w== dependencies: - "@jridgewell/trace-mapping" "^0.3.17" + "@jridgewell/trace-mapping" "^0.3.20" jest-worker "^27.4.5" schema-utils "^3.1.1" serialize-javascript "^6.0.1" - terser "^5.16.8" + terser "^5.26.0" -terser@^5.0.0, terser@^5.10.0, terser@^5.16.8: - version "5.26.0" - resolved "https://registry.yarnpkg.com/terser/-/terser-5.26.0.tgz#ee9f05d929f4189a9c28a0feb889d96d50126fe1" - integrity sha512-dytTGoE2oHgbNV9nTzgBEPaqAWvcJNl66VZ0BkJqlvp71IjO8CxdBx/ykCNb47cLnCmCvRZ6ZR0tLkqvZCdVBQ== +terser@^5.0.0, terser@^5.10.0, terser@^5.26.0: + version "5.29.2" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.29.2.tgz#c17d573ce1da1b30f21a877bffd5655dd86fdb35" + integrity sha512-ZiGkhUBIM+7LwkNjXYJq8svgkd+QK3UUr0wJqY4MieaezBSAIPgbSPZyIx0idM6XWK5CMzSWa8MJIzmRcB8Caw== dependencies: "@jridgewell/source-map" "^0.3.3" acorn "^8.8.2" @@ -10909,10 +11164,10 @@ ts-toolbelt@^9.6.0: resolved "https://registry.yarnpkg.com/ts-toolbelt/-/ts-toolbelt-9.6.0.tgz#50a25426cfed500d4a09bd1b3afb6f28879edfd5" integrity sha512-nsZd8ZeNUzukXPlJmTBwUAuABDe/9qtVDelJeT/qW0ow3ZS3BsQJtNkan1802aM9Uf68/Y8ljw86Hu0h5IUW3w== -tsconfig-paths@^3.14.2: - version "3.14.2" - resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz#6e32f1f79412decd261f92d633a9dc1cfa99f088" - integrity sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g== +tsconfig-paths@^3.15.0: + version "3.15.0" + resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz#5299ec605e55b1abb23ec939ef15edaf483070d4" + integrity sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg== dependencies: "@types/json5" "^0.0.29" json5 "^1.0.2" @@ -10988,44 +11243,49 @@ type-is@~1.6.18: media-typer "0.3.0" mime-types "~2.1.24" -typed-array-buffer@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz#18de3e7ed7974b0a729d3feecb94338d1472cd60" - integrity sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw== +typed-array-buffer@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz#1867c5d83b20fcb5ccf32649e5e2fc7424474ff3" + integrity sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ== dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.2.1" - is-typed-array "^1.1.10" + call-bind "^1.0.7" + es-errors "^1.3.0" + is-typed-array "^1.1.13" -typed-array-byte-length@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz#d787a24a995711611fb2b87a4052799517b230d0" - integrity sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA== +typed-array-byte-length@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz#d92972d3cff99a3fa2e765a28fcdc0f1d89dec67" + integrity sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw== dependencies: - call-bind "^1.0.2" + call-bind "^1.0.7" for-each "^0.3.3" - has-proto "^1.0.1" - is-typed-array "^1.1.10" + gopd "^1.0.1" + has-proto "^1.0.3" + is-typed-array "^1.1.13" -typed-array-byte-offset@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz#cbbe89b51fdef9cd6aaf07ad4707340abbc4ea0b" - integrity sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg== +typed-array-byte-offset@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz#f9ec1acb9259f395093e4567eb3c28a580d02063" + integrity sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA== dependencies: - available-typed-arrays "^1.0.5" - call-bind "^1.0.2" + available-typed-arrays "^1.0.7" + call-bind "^1.0.7" for-each "^0.3.3" - has-proto "^1.0.1" - is-typed-array "^1.1.10" + gopd "^1.0.1" + has-proto "^1.0.3" + is-typed-array "^1.1.13" -typed-array-length@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.4.tgz#89d83785e5c4098bec72e08b319651f0eac9c1bb" - integrity sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng== +typed-array-length@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.5.tgz#57d44da160296d8663fd63180a1802ebf25905d5" + integrity sha512-yMi0PlwuznKHxKmcpoOdeLwxBoVPkqZxd7q2FgMkmD3bNwvF5VW0+UlUQ1k1vmktTu4Yu13Q0RIxEP8+B+wloA== dependencies: - call-bind "^1.0.2" + call-bind "^1.0.7" for-each "^0.3.3" - is-typed-array "^1.1.9" + gopd "^1.0.1" + has-proto "^1.0.3" + is-typed-array "^1.1.13" + possible-typed-array-names "^1.0.0" typedarray-to-buffer@^3.1.5: version "3.1.5" @@ -11066,10 +11326,10 @@ undici-types@~5.26.4: resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== -undici@5.26.5: - version "5.26.5" - resolved "https://registry.yarnpkg.com/undici/-/undici-5.26.5.tgz#f6dc8c565e3cad8c4475b187f51a13e505092838" - integrity sha512-cSb4bPFd5qgR7qr2jYAi0hlX9n5YKK2ONKkLFkxl+v/9BvC0sOpZjBHDBSXc5lWAf5ty9oZdRXytBIHzgUcerw== +undici@5.28.3: + version "5.28.3" + resolved "https://registry.yarnpkg.com/undici/-/undici-5.28.3.tgz#a731e0eff2c3fcfd41c1169a869062be222d1e5b" + integrity sha512-3ItfzbrhDlINjaP0duwnNsKpDQk3acHI3gVJ1z4fmwMK31k5G9OVIAMLSIaP6w4FaGkaAkN6zaQO9LUvZ1t7VA== dependencies: "@fastify/busboy" "^2.0.0" @@ -11242,9 +11502,9 @@ walker@^1.0.7: makeerror "1.0.12" watchpack@^2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.4.0.tgz#fa33032374962c78113f93c7f2fb4c54c9862a5d" - integrity sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg== + version "2.4.1" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.4.1.tgz#29308f2cac150fa8e4c92f90e0ec954a9fed7fff" + integrity sha512-8wrBCMtVhqcXP2Sup1ctSkga6uc2Bx0IIvKyT7yTFier5AXHooSI+QyQQAtTb7+E0IUCCKyTFmXqdqgum2XWGg== dependencies: glob-to-regexp "^0.4.1" graceful-fs "^4.1.2" @@ -11276,14 +11536,15 @@ webidl-conversions@^6.1.0: resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-6.1.0.tgz#9111b4d7ea80acd40f5270d666621afa78b69514" integrity sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w== -webpack-dev-middleware@^5.3.1: - version "5.3.3" - resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz#efae67c2793908e7311f1d9b06f2a08dcc97e51f" - integrity sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA== +webpack-dev-middleware@>=5.3.4, webpack-dev-middleware@^5.3.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-7.1.1.tgz#29aefd73720a03889e1c5c8dd7e552c4d333d572" + integrity sha512-NmRVq4AvRQs66dFWyDR4GsFDJggtSi2Yn38MXLk0nffgF9n/AIP4TFBg2TQKYaRAN4sHuKOTiz9BnNCENDLEVA== dependencies: colorette "^2.0.10" - memfs "^3.4.3" + memfs "^4.6.0" mime-types "^2.1.31" + on-finished "^2.4.1" range-parser "^1.2.1" schema-utils "^4.0.0" @@ -11353,18 +11614,18 @@ webpack-sources@^3.2.3: integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w== webpack@^5.64.4: - version "5.89.0" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.89.0.tgz#56b8bf9a34356e93a6625770006490bf3a7f32dc" - integrity sha512-qyfIC10pOr70V+jkmud8tMfajraGCZMBWJtrmuBymQKCrLTRejBI8STDp1MCyZu/QTdZSeacCQYpYNQVOzX5kw== + version "5.90.3" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.90.3.tgz#37b8f74d3ded061ba789bb22b31e82eed75bd9ac" + integrity sha512-h6uDYlWCctQRuXBs1oYpVe6sFcWedl0dpcVaTf/YF67J9bKvwJajFulMVSYKHrksMB3I/pIagRzDxwxkebuzKA== dependencies: "@types/eslint-scope" "^3.7.3" - "@types/estree" "^1.0.0" + "@types/estree" "^1.0.5" "@webassemblyjs/ast" "^1.11.5" "@webassemblyjs/wasm-edit" "^1.11.5" "@webassemblyjs/wasm-parser" "^1.11.5" acorn "^8.7.1" acorn-import-assertions "^1.9.0" - browserslist "^4.14.5" + browserslist "^4.21.10" chrome-trace-event "^1.0.2" enhanced-resolve "^5.15.0" es-module-lexer "^1.2.1" @@ -11378,7 +11639,7 @@ webpack@^5.64.4: neo-async "^2.6.2" schema-utils "^3.2.0" tapable "^2.1.1" - terser-webpack-plugin "^5.3.7" + terser-webpack-plugin "^5.3.10" watchpack "^2.4.0" webpack-sources "^3.2.3" @@ -11404,9 +11665,9 @@ whatwg-encoding@^1.0.5: iconv-lite "0.4.24" whatwg-fetch@^3.6.2: - version "3.6.19" - resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-3.6.19.tgz#caefd92ae630b91c07345537e67f8354db470973" - integrity sha512-d67JP4dHSbm2TrpFj8AbO8DnL1JXL5J9u0Kq2xW6d0TFDbCA3Muhdt8orXC22utleTVj7Prqt82baN6RBvnEgw== + version "3.6.20" + resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-3.6.20.tgz#580ce6d791facec91d37c72890995a0b48d31c70" + integrity sha512-EqhiFU6daOA8kpjOWTL0olhVOF3i7OrFzSYiGsEMB8GcXS+RrzauAERX65xMeNWVqxA6HXH2m69Z9LaKKdisfg== whatwg-mimetype@^2.3.0: version "2.3.0" @@ -11461,25 +11722,25 @@ which-builtin-type@^1.1.3: which-typed-array "^1.1.9" which-collection@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/which-collection/-/which-collection-1.0.1.tgz#70eab71ebbbd2aefaf32f917082fc62cdcb70906" - integrity sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A== + version "1.0.2" + resolved "https://registry.yarnpkg.com/which-collection/-/which-collection-1.0.2.tgz#627ef76243920a107e7ce8e96191debe4b16c2a0" + integrity sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw== dependencies: - is-map "^2.0.1" - is-set "^2.0.1" - is-weakmap "^2.0.1" - is-weakset "^2.0.1" + is-map "^2.0.3" + is-set "^2.0.3" + is-weakmap "^2.0.2" + is-weakset "^2.0.3" -which-typed-array@^1.1.11, which-typed-array@^1.1.13, which-typed-array@^1.1.9: - version "1.1.13" - resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.13.tgz#870cd5be06ddb616f504e7b039c4c24898184d36" - integrity sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow== +which-typed-array@^1.1.13, which-typed-array@^1.1.14, which-typed-array@^1.1.15, which-typed-array@^1.1.9: + version "1.1.15" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.15.tgz#264859e9b11a649b388bfaaf4f767df1f779b38d" + integrity sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA== dependencies: - available-typed-arrays "^1.0.5" - call-bind "^1.0.4" + available-typed-arrays "^1.0.7" + call-bind "^1.0.7" for-each "^0.3.3" gopd "^1.0.1" - has-tostringtag "^1.0.0" + has-tostringtag "^1.0.2" which@^1.3.1: version "1.3.1" @@ -11669,7 +11930,7 @@ workbox-window@6.6.1: "@types/trusted-types" "^2.0.2" workbox-core "6.6.1" -wrap-ansi@^7.0.0: +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0", wrap-ansi@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== @@ -11678,6 +11939,15 @@ wrap-ansi@^7.0.0: string-width "^4.1.0" strip-ansi "^6.0.0" +wrap-ansi@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214" + integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ== + dependencies: + ansi-styles "^6.1.0" + string-width "^5.0.1" + strip-ansi "^7.0.1" + wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" @@ -11699,9 +11969,9 @@ ws@^7.4.6: integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== ws@^8.13.0: - version "8.14.2" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.14.2.tgz#6c249a806eb2db7a20d26d51e7709eab7b2e6c7f" - integrity sha512-wEBG1ftX4jcglPxgFCMJmZ2PLtSbJ2Peg6TmpJFTbe9GZYOQCDPdMYu/Tm0/bGZkw8paZnJY45J4K2PZrLYq8g== + version "8.16.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.16.0.tgz#d1cd774f36fbc07165066a60e40323eab6446fd4" + integrity sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ== xml-name-validator@^3.0.0: version "3.0.0" @@ -11734,9 +12004,9 @@ yaml@^1.10.0, yaml@^1.10.2, yaml@^1.7.2: integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== yaml@^2.3.4: - version "2.3.4" - resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.3.4.tgz#53fc1d514be80aabf386dc6001eb29bf3b7523b2" - integrity sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA== + version "2.4.1" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.4.1.tgz#2e57e0b5e995292c25c75d2658f0664765210eed" + integrity sha512-pIXzoImaqmfOrL7teGUBt/T7ZDnyeGBWyXQBvOVhLkWLN37GXv8NMLK406UY6dS51JfcQHsmcW5cJ441bHg6Lg== yargs-parser@^20.2.2: version "20.2.9" From 2ddf503834cf91fa80ab5fa097986a3867b2cd75 Mon Sep 17 00:00:00 2001 From: Anh Date: Tue, 26 Mar 2024 14:29:47 +0900 Subject: [PATCH 8/9] ui: new history screen (#866) * Show list of ExtendedResult instead of BenchmarkExportResult in history_list_screen * Show result overview in horizontal list * Update design * Add LoadgenInfo.resultValidity * Update result text color * Clean up * Use ResultValidityEnum in benchmark_result_screen * Fix rendering issue on small screen --- flutter/lib/backend/loadgen_info.dart | 16 ++ .../lib/data/benchmarks_data_provider.dart | 20 -- flutter/lib/data/result_filter.dart | 14 +- flutter/lib/data/result_sort.dart | 45 +--- flutter/lib/l10n/app_en.arb | 2 - flutter/lib/ui/history/history_list_item.dart | 204 +++++++++++++----- .../lib/ui/history/history_list_screen.dart | 49 +---- flutter/lib/ui/history/list_item.dart | 5 - .../lib/ui/home/benchmark_result_screen.dart | 23 +- .../unit_test/data/result_filter_test.dart | 18 -- flutter/unit_test/data/result_sort_test.dart | 57 ++--- 11 files changed, 208 insertions(+), 245 deletions(-) delete mode 100644 flutter/lib/data/benchmarks_data_provider.dart delete mode 100644 flutter/lib/ui/history/list_item.dart diff --git a/flutter/lib/backend/loadgen_info.dart b/flutter/lib/backend/loadgen_info.dart index 0311cb4e1..92b4054ba 100644 --- a/flutter/lib/backend/loadgen_info.dart +++ b/flutter/lib/backend/loadgen_info.dart @@ -5,6 +5,8 @@ import 'package:json_annotation/json_annotation.dart'; part 'loadgen_info.g.dart'; +enum ResultValidityEnum { valid, invalid, semivalid } + @JsonSerializable(fieldRename: FieldRename.snake) class LoadgenInfo { final int queryCount; @@ -107,4 +109,18 @@ class LoadgenInfo { _$LoadgenInfoFromJson(json); Map toJson() => _$LoadgenInfoToJson(this); + + ResultValidityEnum get resultValidity { + if (isMinDurationMet == true && + isMinQueryMet == true && + isEarlyStoppingMet == true) { + return ResultValidityEnum.valid; + } else if (isMinDurationMet == true && + isMinQueryMet == false && + isEarlyStoppingMet == true) { + return ResultValidityEnum.semivalid; + } else { + return ResultValidityEnum.invalid; + } + } } diff --git a/flutter/lib/data/benchmarks_data_provider.dart b/flutter/lib/data/benchmarks_data_provider.dart deleted file mode 100644 index c7bd2bf0c..000000000 --- a/flutter/lib/data/benchmarks_data_provider.dart +++ /dev/null @@ -1,20 +0,0 @@ -import 'package:mlperfbench/data/extended_result.dart'; -import 'package:mlperfbench/data/result_filter.dart'; -import 'package:mlperfbench/data/result_sort.dart'; -import 'package:mlperfbench/data/results/benchmark_result.dart'; - -class BenchmarksDataProvider { - List results; - - BenchmarksDataProvider(this.results); - - List resultItems( - ResultFilter filter, ResultSort sort) { - final benchmarks = results - .where((result) => filter.match(result)) - .expand((item) => item.results) - .where((benchmark) => filter.matchBenchmark(benchmark)) - .toList(); - return sort.apply(benchmarks); - } -} diff --git a/flutter/lib/data/result_filter.dart b/flutter/lib/data/result_filter.dart index 959d4aafe..c71b13b83 100644 --- a/flutter/lib/data/result_filter.dart +++ b/flutter/lib/data/result_filter.dart @@ -2,7 +2,6 @@ import 'package:json_annotation/json_annotation.dart'; import 'package:mlperfbench/data/environment/environment_info.dart'; import 'package:mlperfbench/data/extended_result.dart'; -import 'package:mlperfbench/data/results/benchmark_result.dart'; import 'package:mlperfbench/data/string_constants.dart'; part 'result_filter.g.dart'; @@ -68,20 +67,17 @@ class ResultFilter { bool manufacturerMatched = resultManufacturer.containsIgnoreCase(manufacturer ?? ''); bool socMatched = resultSoc.containsIgnoreCase(soc ?? ''); - + bool benchmarkIdMatched = benchmarkId == null + ? true + : result.results.any((e) => e.benchmarkId == benchmarkId); return fromCreationDateMatched && toCreationDateMatched && platformMatched && deviceModelMatched && backendMatched && manufacturerMatched && - socMatched; - } - - bool matchBenchmark(BenchmarkExportResult result) { - bool benchmarkIdMatched = - benchmarkId == null ? true : result.benchmarkId == benchmarkId; - return benchmarkIdMatched; + socMatched && + benchmarkIdMatched; } bool get anyFilterActive { diff --git a/flutter/lib/data/result_sort.dart b/flutter/lib/data/result_sort.dart index 2c4b1b2de..0df58ab7d 100644 --- a/flutter/lib/data/result_sort.dart +++ b/flutter/lib/data/result_sort.dart @@ -1,51 +1,24 @@ -import 'package:mlperfbench/data/results/benchmark_result.dart'; +import 'package:mlperfbench/data/extended_result.dart'; -enum SortByEnum { dateAsc, dateDesc, taskThroughputAsc, taskThroughputDesc } +enum SortByEnum { dateAsc, dateDesc } class ResultSort { SortByEnum sortBy = SortByEnum.dateDesc; ResultSort(); - List apply(List items) { - List sortedItems = - List.from(items); + List apply(List results) { + List items = List.from(results); switch (sortBy) { case SortByEnum.dateAsc: - sortedItems.sort((a, b) => _sortByDates(a, b, true)); + items + .sort((a, b) => a.meta.creationDate.compareTo(b.meta.creationDate)); break; case SortByEnum.dateDesc: - sortedItems.sort((a, b) => _sortByDates(a, b, false)); + items + .sort((a, b) => b.meta.creationDate.compareTo(a.meta.creationDate)); break; - case SortByEnum.taskThroughputAsc: - sortedItems.sort((a, b) => _sortByTaskThroughput(b, a)); - break; - case SortByEnum.taskThroughputDesc: - sortedItems.sort((a, b) => _sortByTaskThroughput(a, b)); - break; - } - return sortedItems; - } - - int _sortByDates( - BenchmarkExportResult a, BenchmarkExportResult b, bool isAsc) { - DateTime aDateTime = a.performanceRun?.startDatetime ?? - a.accuracyRun?.startDatetime ?? - DateTime.now(); - DateTime bDateTime = b.performanceRun?.startDatetime ?? - b.accuracyRun?.startDatetime ?? - DateTime.now(); - - if (isAsc) { - return aDateTime.compareTo(bDateTime); } - return bDateTime.compareTo(aDateTime); - } - - int _sortByTaskThroughput(BenchmarkExportResult a, BenchmarkExportResult b) { - const noThroughput = Throughput(value: 0); - final aThroughput = a.performanceRun?.throughput ?? noThroughput; - final bThroughput = b.performanceRun?.throughput ?? noThroughput; - return bThroughput.compareTo(aThroughput); + return items; } } diff --git a/flutter/lib/l10n/app_en.arb b/flutter/lib/l10n/app_en.arb index 78d464599..565a683fa 100644 --- a/flutter/lib/l10n/app_en.arb +++ b/flutter/lib/l10n/app_en.arb @@ -154,9 +154,7 @@ "historyFilterDeviceModel": "Device Model", "historyFilterManufacturer": "Manufacturer", "historyFilterSoC": "SoC", - "historySortBy": "Sort by", "historySortByDate": "Date", - "historySortByTaskThroughput": "Task Throughput", "historyDetailsTitle": "Result details", "historyDetailsBuildTypeDebug": "debug build", diff --git a/flutter/lib/ui/history/history_list_item.dart b/flutter/lib/ui/history/history_list_item.dart index 2a3ac8fe4..c99e22fe1 100644 --- a/flutter/lib/ui/history/history_list_item.dart +++ b/flutter/lib/ui/history/history_list_item.dart @@ -1,42 +1,51 @@ import 'package:flutter/material.dart'; -import 'package:mlperfbench/data/results/benchmark_result.dart'; +import 'package:collection/collection.dart'; +import 'package:intl/intl.dart'; + +import 'package:mlperfbench/app_constants.dart'; +import 'package:mlperfbench/backend/loadgen_info.dart'; +import 'package:mlperfbench/data/extended_result.dart'; import 'package:mlperfbench/ui/app_styles.dart'; -import 'package:mlperfbench/ui/formatter.dart'; -import 'package:mlperfbench/ui/history/list_item.dart'; import 'package:mlperfbench/ui/icons.dart'; +abstract class ListItem { + Widget build(BuildContext context); +} + class HistoryListItem implements ListItem { - final BenchmarkExportResult item; + final ExtendedResult item; final void Function()? tapHandler; HistoryListItem(this.item, this.tapHandler); + final dateFormat = DateFormat('yyyy-MM-dd HH:mm'); + @override Widget build(BuildContext context) { - final leadingWidth = 0.08 * MediaQuery.of(context).size.width; - final subtitleWidth = 0.64 * MediaQuery.of(context).size.width; - final trailingWidth = 0.28 * MediaQuery.of(context).size.width; + final subtitleWidth = 0.40 * MediaQuery.of(context).size.width; + final trailingWidth = 0.60 * MediaQuery.of(context).size.width; return ListTile( contentPadding: const EdgeInsets.fromLTRB(10, 8, 10, 16), minVerticalPadding: 0, - leading: SizedBox( - width: leadingWidth, - height: leadingWidth, - child: BenchmarkIcons.getDarkIcon(item.benchmarkId), - ), title: SizedBox( width: subtitleWidth, child: Text( - item.benchmarkName, + '${item.environmentInfo.modelDescription}\n', + maxLines: 2, + overflow: TextOverflow.ellipsis, style: const TextStyle(fontWeight: FontWeight.bold), ), ), subtitle: SizedBox( width: subtitleWidth, - child: Text( - '${itemAdditionalInfo()}\n${itemDateTime()}', - style: const TextStyle(fontWeight: FontWeight.normal, height: 1.4), + height: 24, + child: FittedBox( + fit: BoxFit.fitWidth, + child: Text( + dateFormat.format(item.meta.creationDate), + style: const TextStyle(fontWeight: FontWeight.normal), + ), ), ), trailing: SizedBox( @@ -46,21 +55,14 @@ class HistoryListItem implements ListItem { crossAxisAlignment: CrossAxisAlignment.center, children: [ Flexible( - flex: 8, + flex: 9, fit: FlexFit.tight, - child: Text( - itemScore(), - style: const TextStyle( - fontWeight: FontWeight.bold, - fontSize: 16.0, - color: AppColors.resultValidText, - ), - ), + child: _resultList(), ), const Flexible( - flex: 2, + flex: 1, fit: FlexFit.tight, - child: Icon(Icons.chevron_right), + child: Icon(Icons.chevron_right, color: AppColors.primary), ), ], )), @@ -68,38 +70,122 @@ class HistoryListItem implements ListItem { ); } - String itemScore() { - final throughput = item.performanceRun?.throughput; - final accuracy = item.accuracyRun?.accuracy; - var throughputString = 'n/a'; - var accuracyString = 'n/a'; - if (throughput != null) { - throughputString = throughput.toUIString(); - } - if (accuracy != null) { - accuracyString = accuracy.formatted; - } - return '$throughputString\n$accuracyString'; - } - - String itemDateTime() { - final prDateTime = item.performanceRun?.startDatetime; - final arDateTime = item.accuracyRun?.startDatetime; - if (prDateTime != null) { - return prDateTime.toUIString(); - } else if (arDateTime != null) { - return arDateTime.toUIString(); - } else { - return 'unknown'; + Widget _resultList() { + List children = []; + for (String id in BenchmarkId.allIds) { + final benchmark = + item.results.firstWhereOrNull((e) => e.benchmarkId == id); + Color throughputTextColor = AppColors.resultValidText; + Color accuracyTextColor = AppColors.resultValidText; + final icon = SizedBox( + width: 20, + height: 20, + child: BenchmarkIcons.getDarkIcon(id), + ); + Widget iconWidget; + if (benchmark != null) { + iconWidget = icon; + } else { + iconWidget = ColorFiltered( + colorFilter: _greyscaleColorFilter, + child: Opacity( + opacity: 0.4, + child: icon, + ), + ); + throughputTextColor = Colors.transparent; + accuracyTextColor = Colors.transparent; + } + final throughput = benchmark?.performanceRun?.throughput; + final accuracy = benchmark?.accuracyRun?.accuracy; + var throughputString = 'n/a'; + var accuracyString = 'n/a'; + if (throughput != null) { + throughputString = throughput.value.toStringAsFixed(0); + switch (benchmark?.performanceRun?.loadgenInfo?.resultValidity) { + case ResultValidityEnum.valid: + throughputTextColor = AppColors.resultValidText; + break; + case ResultValidityEnum.invalid: + throughputTextColor = AppColors.resultInvalidText; + break; + case ResultValidityEnum.semivalid: + throughputTextColor = AppColors.resultSemiValidText; + break; + case null: + break; + } + } + if (accuracy != null) { + accuracyString = accuracy.normalized.toStringAsFixed(2); + accuracyTextColor = accuracy.isInBounds() + ? AppColors.resultValidText + : AppColors.resultInvalidText; + } + children.add( + Container( + width: 44, + padding: const EdgeInsets.symmetric(vertical: 0, horizontal: 4), + child: Column( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + Expanded( + flex: 4, + child: iconWidget, + ), + const SizedBox(height: 8), + Expanded( + flex: 3, + child: FittedBox( + fit: BoxFit.fitWidth, + child: Text( + throughputString, + style: TextStyle(fontSize: 12, color: throughputTextColor), + ), + ), + ), + Expanded( + flex: 3, + child: FittedBox( + fit: BoxFit.fitWidth, + child: Text( + accuracyString, + style: TextStyle(fontSize: 12, color: accuracyTextColor), + ), + ), + ), + ], + ), + ), + ); } - } - - String itemAdditionalInfo() { - final backendName = item.backendInfo.backendName; - final delegateName = item.backendSettings.delegate; - final acceleratorName = item.backendInfo.acceleratorName; - // This matched the UI in ResultScreen._createListOfBenchmarkResultBottomWidgets() - final backendInfo = '$backendName | $delegateName | $acceleratorName'; - return backendInfo; + return ListView( + scrollDirection: Axis.horizontal, + children: children, + ); } } + +const _greyscaleColorFilter = ColorFilter.matrix([ + 0.2126, + 0.7152, + 0.0722, + 0, + 0, + 0.2126, + 0.7152, + 0.0722, + 0, + 0, + 0.2126, + 0.7152, + 0.0722, + 0, + 0, + 0, + 0, + 0, + 1, + 0, +]); diff --git a/flutter/lib/ui/history/history_list_screen.dart b/flutter/lib/ui/history/history_list_screen.dart index e2f066f38..c7316b2d1 100644 --- a/flutter/lib/ui/history/history_list_screen.dart +++ b/flutter/lib/ui/history/history_list_screen.dart @@ -3,15 +3,13 @@ import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; import 'package:mlperfbench/benchmark/state.dart'; -import 'package:mlperfbench/data/benchmarks_data_provider.dart'; +import 'package:mlperfbench/data/extended_result.dart'; import 'package:mlperfbench/data/result_filter.dart'; import 'package:mlperfbench/data/result_sort.dart'; -import 'package:mlperfbench/data/results/benchmark_result.dart'; import 'package:mlperfbench/localizations/app_localizations.dart'; -import 'package:mlperfbench/ui/history/benchmark_export_result_screen.dart'; +import 'package:mlperfbench/ui/history/extended_result_screen.dart'; import 'package:mlperfbench/ui/history/history_filter_screen.dart'; import 'package:mlperfbench/ui/history/history_list_item.dart'; -import 'package:mlperfbench/ui/history/list_item.dart'; class HistoryListScreen extends StatefulWidget { const HistoryListScreen({Key? key}) : super(key: key); @@ -31,13 +29,11 @@ class _HistoryListScreenState extends State { final remoteResults = state.resourceManager.resultManager.remoteResults; final filter = state.resourceManager.resultManager.resultFilter; final sort = state.resourceManager.resultManager.resultSort; - final results = localResults + remoteResults; - final resultsDataProvider = BenchmarksDataProvider(results); + List results = localResults + remoteResults; + results = results.where((result) => filter.match(result)).toList(); + results = sort.apply(results); - List resultItems = - resultsDataProvider.resultItems(filter, sort); - - List itemsList = _listItems(resultItems); + final itemsList = results.map((e) => _listItem(e)).toList(); return Scaffold( appBar: AppBar( @@ -94,27 +90,6 @@ class _HistoryListScreenState extends State { title: Text(l10n.historySortByDate), ), ), - const PopupMenuDivider(), - PopupMenuItem( - value: SortByEnum.taskThroughputDesc, - child: ListTile( - contentPadding: const EdgeInsets.fromLTRB(4, 0, 4, 0), - minLeadingWidth: 32, - leading: const Icon(Icons.speed), - trailing: const Icon(Icons.south), - title: Text(l10n.historySortByTaskThroughput), - ), - ), - PopupMenuItem( - value: SortByEnum.taskThroughputAsc, - child: ListTile( - contentPadding: const EdgeInsets.fromLTRB(4, 0, 4, 0), - minLeadingWidth: 32, - leading: const Icon(Icons.speed), - trailing: const Icon(Icons.north), - title: Text(l10n.historySortByTaskThroughput), - ), - ), ]; }, ); @@ -136,18 +111,12 @@ class _HistoryListScreenState extends State { ); } - List _listItems(List resultItems) { - return resultItems.map((resultItem) { - return _benchmarkListItem(resultItem); - }).toList(); - } - - ListItem _benchmarkListItem(BenchmarkExportResult item) { - return HistoryListItem(item, () { + HistoryListItem _listItem(ExtendedResult result) { + return HistoryListItem(result, () { Navigator.push( context, MaterialPageRoute( - builder: (context) => BenchmarkExportResultScreen(result: item), + builder: (context) => LocalExtendedResultScreen(result: result), ), ).then((value) => setState(() {})); }); diff --git a/flutter/lib/ui/history/list_item.dart b/flutter/lib/ui/history/list_item.dart deleted file mode 100644 index d185fd53f..000000000 --- a/flutter/lib/ui/history/list_item.dart +++ /dev/null @@ -1,5 +0,0 @@ -import 'package:flutter/material.dart'; - -abstract class ListItem { - Widget build(BuildContext context); -} diff --git a/flutter/lib/ui/home/benchmark_result_screen.dart b/flutter/lib/ui/home/benchmark_result_screen.dart index 8015ccb5d..86749ebb9 100644 --- a/flutter/lib/ui/home/benchmark_result_screen.dart +++ b/flutter/lib/ui/home/benchmark_result_screen.dart @@ -3,6 +3,7 @@ import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; import 'package:mlperfbench/app_constants.dart'; +import 'package:mlperfbench/backend/loadgen_info.dart'; import 'package:mlperfbench/benchmark/benchmark.dart'; import 'package:mlperfbench/benchmark/state.dart'; import 'package:mlperfbench/device_info.dart'; @@ -233,21 +234,19 @@ class _BenchmarkResultScreenState extends State (throughput?.value ?? 0.0) / benchmark.info.maxThroughput; resultText2 = null; progressBarValue2 = null; - final loadgenInfo = benchmarkResult?.loadgenInfo; - if (loadgenInfo != null) { - if (loadgenInfo.isMinDurationMet == true && - loadgenInfo.isMinQueryMet == true && - loadgenInfo.isEarlyStoppingMet == true) { + switch (benchmarkResult?.loadgenInfo?.resultValidity) { + case ResultValidityEnum.valid: resultTextColor = AppColors.resultValidText; - } else if (loadgenInfo.isMinDurationMet == true && - loadgenInfo.isMinQueryMet == false && - loadgenInfo.isEarlyStoppingMet == true) { + break; + case ResultValidityEnum.invalid: + resultTextColor = AppColors.resultInvalidText; + break; + case ResultValidityEnum.semivalid: resultTextColor = AppColors.resultSemiValidText; - } else { + break; + case null: resultTextColor = AppColors.resultInvalidText; - } - } else { - resultTextColor = AppColors.resultInvalidText; + break; } break; case _ScreenMode.accuracy: diff --git a/flutter/unit_test/data/result_filter_test.dart b/flutter/unit_test/data/result_filter_test.dart index 143e6458a..01fd173b6 100644 --- a/flutter/unit_test/data/result_filter_test.dart +++ b/flutter/unit_test/data/result_filter_test.dart @@ -6,7 +6,6 @@ import 'package:flutter_test/flutter_test.dart'; import 'package:mlperfbench/data/environment/environment_info.dart'; import 'package:mlperfbench/data/extended_result.dart'; import 'package:mlperfbench/data/result_filter.dart'; -import 'package:mlperfbench/data/results/benchmark_result.dart'; void main() { group('ResultFilter', () { @@ -79,23 +78,6 @@ void main() { expect(filter.match(result), isFalse); }); - test('benchmarkId matched', () { - final filter = ResultFilter()..benchmarkId = 'image_classification'; - List benchmarks = result.results - .where((benchmark) => filter.matchBenchmark(benchmark)) - .toList(); - - expect(benchmarks.length == 1, isTrue); - }); - - test('benchmarkId not matched', () { - final filter = ResultFilter()..benchmarkId = 'image_classification_v2'; - List benchmarks = result.results - .where((benchmark) => filter.matchBenchmark(benchmark)) - .toList(); - expect(benchmarks.length == 1, isFalse); - }); - test('multiple filters matched', () { final filter = ResultFilter() ..platform = EnvPlatform.ios.name diff --git a/flutter/unit_test/data/result_sort_test.dart b/flutter/unit_test/data/result_sort_test.dart index 847c36972..2b96ca672 100644 --- a/flutter/unit_test/data/result_sort_test.dart +++ b/flutter/unit_test/data/result_sort_test.dart @@ -1,63 +1,32 @@ -import 'dart:convert'; -import 'dart:io'; - import 'package:flutter_test/flutter_test.dart'; - import 'package:mlperfbench/data/extended_result.dart'; + +import 'package:mlperfbench/data/generation_helpers/sample_generator.dart'; import 'package:mlperfbench/data/result_sort.dart'; void main() { group('ResultSort', () { - const file = 'unit_test/data/extended_result_unittest.json'; - final jsonString = File(file).readAsStringSync(); - final data = jsonDecode(jsonString) as Map; - final result = ExtendedResult.fromJson(data); - final benchmarks = result.results; - - test('number of benchmarks', () { - expect(benchmarks.length, 6); - }); - - final earliestBenchmark = benchmarks.first; - final latestBenchmark = benchmarks.last; + final generator = SampleGenerator(); + final result1 = generator.extendedResult; + final result2 = generator.extendedResult; + final result3 = generator.extendedResult; + List results = [result1, result2, result3]; - final minTaskThroughput = benchmarks - .map((benchmark) => benchmark.performanceRun?.throughput?.value ?? 0) - .reduce((a, b) => a < b ? a : b); - final maxTaskThroughput = benchmarks - .map((benchmark) => benchmark.performanceRun?.throughput?.value ?? 0) - .reduce((a, b) => a > b ? a : b); + final earliestResult = result1.meta.uuid; + final latestResult = result3.meta.uuid; test('sort by Date ASC (from oldest to most recent)', () { final sort = ResultSort(); sort.sortBy = SortByEnum.dateAsc; - expect(sort.apply(benchmarks).first, earliestBenchmark); - expect(sort.apply(benchmarks).last, latestBenchmark); + expect(sort.apply(results).first.meta.uuid, earliestResult); + expect(sort.apply(results).last.meta.uuid, latestResult); }); test('sort by Date DESC (from most recent to oldest)', () { final sort = ResultSort(); sort.sortBy = SortByEnum.dateDesc; - expect(sort.apply(benchmarks).first, latestBenchmark); - expect(sort.apply(benchmarks).last, earliestBenchmark); - }); - - test('sort by Task Throughput ASC (from lowest to highest)', () { - final sort = ResultSort(); - sort.sortBy = SortByEnum.taskThroughputAsc; - expect(sort.apply(benchmarks).first.performanceRun?.throughput?.value, - minTaskThroughput); - expect(sort.apply(benchmarks).last.performanceRun?.throughput?.value, - maxTaskThroughput); - }); - - test('sort by Task Throughput DESC (from highest to lowest)', () { - final sort = ResultSort(); - sort.sortBy = SortByEnum.taskThroughputDesc; - expect(sort.apply(benchmarks).first.performanceRun?.throughput?.value, - maxTaskThroughput); - expect(sort.apply(benchmarks).last.performanceRun?.throughput?.value, - minTaskThroughput); + expect(sort.apply(results).first.meta.uuid, latestResult); + expect(sort.apply(results).last.meta.uuid, earliestResult); }); }); } From 01029c754e502b134658306d098417e419879d61 Mon Sep 17 00:00:00 2001 From: Anh Date: Tue, 2 Apr 2024 14:13:15 +0900 Subject: [PATCH 9/9] ci: deploy Android app to Play Store (#864) * Set up app signing * Update app icon for Android and Windows * Add Make cmd to build Android appbundle * Add env var to control signing * Add GitHub workflow to deploy app to Play Store * Update android-build-test.yml * Format Markdown file * Update android-build-test.yml * Update android-build-test.yml * Update track name * Get external libs from GCloud * Use env for lib file name * Add draft status * Update env * Update actions/checkout * Deploy only if on master branch --- .github/workflows/android-build-test.yml | 78 +++++++++++++----- docs/build-and-run.md | 11 +++ flutter/android/android.mk | 13 ++- flutter/android/app/build.gradle | 23 +++++- .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin 544 -> 4399 bytes .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin 442 -> 2565 bytes .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 721 -> 6583 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 1031 -> 11686 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 1443 -> 17934 bytes flutter/pubspec.yaml | 10 ++- flutter/tool/generate-apk-filename.sh | 3 +- flutter/windows/runner/resources/app_icon.ico | Bin 33772 -> 27365 bytes 12 files changed, 107 insertions(+), 31 deletions(-) diff --git a/.github/workflows/android-build-test.yml b/.github/workflows/android-build-test.yml index 793adc06f..25d56b5d9 100644 --- a/.github/workflows/android-build-test.yml +++ b/.github/workflows/android-build-test.yml @@ -16,7 +16,7 @@ jobs: contents: read packages: write steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v2 - name: Log in to the Container registry @@ -55,12 +55,18 @@ jobs: FLUTTER_BUILD_NUMBER: ${{ github.run_number }} FIREBASE_ANDROID_API_KEY: ${{ secrets.FIREBASE_ANDROID_API_KEY }} FIREBASE_ANDROID_APP_ID: ${{ secrets.FIREBASE_ANDROID_APP_ID }} - FIREBASE_PROJECT_ID: ${{ secrets.FIREBASE_PROJECT_ID }} + FIREBASE_PROJECT_ID: mobile-app-build-290400 FIREBASE_MESSAGING_SENDER_ID: ${{ secrets.FIREBASE_MESSAGING_SENDER_ID }} FIREBASE_DATABASE_URL: ${{ secrets.FIREBASE_DATABASE_URL }} FIREBASE_STORAGE_BUCKET: ${{ secrets.FIREBASE_STORAGE_BUCKET }} + SIGNING_FOR_RELEASE: true + SIGNING_STORE_FILE: /tmp/mlperf-keystore.jks + SIGNING_STORE_FILE_BASE64: ${{ secrets.SIGNING_STORE_FILE_BASE64 }} + SIGNING_STORE_PASSWORD: ${{ secrets.SIGNING_STORE_PASSWORD }} + SIGNING_KEY_ALIAS: upload + SIGNING_KEY_PASSWORD: ${{ secrets.SIGNING_KEY_PASSWORD }} steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 # Preinstalled tools from host at `/opt/hostedtoolcache` is not needed since we run commands inside our own Docker container. # `/opt/hostedtoolcache` is mounted to `/__t`. We delete it to free up disk space. - name: Free up disk space @@ -72,6 +78,10 @@ jobs: df -h - name: Configure Git run: git config --global --add safe.directory "$GITHUB_WORKSPACE" + - name: Create keystore file + run: | + echo "$SIGNING_STORE_FILE_BASE64" | base64 -d > "$SIGNING_STORE_FILE" + echo e4699f58310b85cbcb9e835e569e7e17 "$SIGNING_STORE_FILE" | md5sum --check - - name: Set up authentication for Google Cloud SDK uses: google-github-actions/auth@v2 with: @@ -81,30 +91,24 @@ jobs: with: version: '>= 363.0.0' project_id: mobile-app-build-290400 - - name: Install AWS CLI - run: | - python3 -m pip install awscli - name: Download Samsung libraries env: - AWS_ACCESS_KEY_ID: ${{ secrets.READONLY_R2_ACCESS_KEY }} - AWS_SECRET_ACCESS_KEY: ${{ secrets.READONLY_R2_SECRET_KEY }} + SAMSUNG_LIB: samsung_libs_v3.1_20231116 run: | - aws s3 --endpoint-url=https://c2686074cb2caf5cbaf6d134bdba8b47.r2.cloudflarestorage.com \ - cp --quiet s3://mlcommons-mobile-wg-private/libs/v3.1/samsung_libs_v3.1_20231116.zip /tmp/ && \ - unzip /tmp/samsung_libs_v3.1_20231116.zip -d /tmp/samsung_libs_v3.1_20231116 && \ - rm /tmp/samsung_libs_v3.1_20231116.zip && \ + gsutil cp gs://mobile-app-build-290400_github-actions/lib/v3.1/${SAMSUNG_LIB}.zip /tmp/ && \ + unzip /tmp/${SAMSUNG_LIB}.zip -d /tmp/${SAMSUNG_LIB} && \ + rm /tmp/${SAMSUNG_LIB}.zip && \ mkdir -p mobile_back_samsung/samsung/lib/internal && \ - mv /tmp/samsung_libs_v3.1_20231116/* mobile_back_samsung/samsung/lib/internal/ + mv /tmp/${SAMSUNG_LIB}/* mobile_back_samsung/samsung/lib/internal/ - name: Download QTI libraries env: - AWS_ACCESS_KEY_ID: ${{ secrets.READONLY_R2_ACCESS_KEY }} - AWS_SECRET_ACCESS_KEY: ${{ secrets.READONLY_R2_SECRET_KEY }} + QTI_LIB: qaisw-2.13.4.230831213719_60417 run: | - aws s3 --endpoint-url=https://c2686074cb2caf5cbaf6d134bdba8b47.r2.cloudflarestorage.com \ - cp --quiet s3://mlcommons-mobile-wg-private/libs/v3.1/qaisw-2.13.4.230831213719_60417-linux.zip /tmp/ && \ - unzip -P ${{ secrets.READONLY_AWS_KEY }} /tmp/qaisw-2.13.4.230831213719_60417-linux.zip -d /tmp/qaisw-2.13.4.230831213719_60417-linux && \ - rm /tmp/qaisw-2.13.4.230831213719_60417-linux.zip && \ - mv /tmp/qaisw-2.13.4.230831213719_60417-linux/qaisw-2.13.4.230831213719_60417 mobile_back_qti/ + gsutil cp gs://mobile-app-build-290400_github-actions/lib/v3.1/${QTI_LIB}.zip /tmp/ && \ + unzip /tmp/${QTI_LIB}.zip -d /tmp/${QTI_LIB} && \ + rm /tmp/${QTI_LIB}.zip && \ + mkdir -p mobile_back_qti/${QTI_LIB} && \ + mv /tmp/${QTI_LIB}/* mobile_back_qti/${QTI_LIB}/ - name: Cache bazel uses: actions/cache@v3 with: @@ -175,12 +179,14 @@ jobs: WITH_APPLE: 0 run: | make flutter/android/release + gsutil cp flutter/build/app/outputs/bundle/release/app-release.aab $GCLOUD_BUCKET_PATH/app-release.aab + gsutil cp flutter/build/app/outputs/flutter-apk/app-release.apk $GCLOUD_BUCKET_PATH/app-release.apk - name: Archive Android APKs uses: actions/upload-artifact@v3 with: name: android-apks-${{ github.run_number }} path: output/android-apks/*.apk - retention-days: 30 + retention-days: 28 if-no-files-found: error test-android-apk-tflite: @@ -282,3 +288,33 @@ jobs: --num-flaky-test-attempts ${{ vars.NUM_FLAKY_TEST_ATTEMPTS }} \ --device model=OP515BL1,version=33,locale=en,orientation=portrait \ --client-details=buildNumber=${{ github.run_number }} + + deploy-playstore: + needs: + - build-android-apk + - test-android-apk-tflite + runs-on: ubuntu-22.04 + if: github.ref == 'refs/heads/master' + steps: + - uses: actions/checkout@v4 + - name: Set up authentication for Google Cloud SDK + uses: google-github-actions/auth@v2 + with: + credentials_json: ${{ secrets.GCLOUD_SERVICE_ACCOUNT_MOBILE_APP_BUILD }} + - name: Set up Google Cloud SDK + uses: google-github-actions/setup-gcloud@v2 + with: + version: '>= 363.0.0' + project_id: mobile-app-build-290400 + - name: Download Android release app + run: | + gsutil cp $GCLOUD_BUCKET_PATH/app-release.aab /tmp/app-release.aab + - name: Upload Android release app to Google Play + uses: r0adkll/upload-google-play@v1 + with: + releaseFiles: /tmp/app-release.aab + packageName: org.mlcommons.android.mlperfbench + serviceAccountJsonPlainText: ${{ secrets.GCLOUD_SERVICE_ACCOUNT_MOBILE_APP_BUILD }} + # track: "alpha", "beta", "internal" or "production" + track: internal + status: draft diff --git a/docs/build-and-run.md b/docs/build-and-run.md index e6b7bad0d..2b044b63f 100644 --- a/docs/build-and-run.md +++ b/docs/build-and-run.md @@ -114,6 +114,17 @@ See [Windows environment setup guide](./environment-setup/env-setup-windows.md#s Run `make OFFICIAL_BUILD=false FLUTTER_BUILD_NUMBER=0 flutter/android/release` to build APK from scratch, or run `make flutter/android/apk` after `make flutter/prepare` and you already have native libs. +By default, the Android app will be signed with a debug key. To sign it with a release key for publishing to Play Store, +follow the instructions at and set the environment variables: + +```shell +export SIGNING_FOR_RELEASE=true +export SIGNING_STORE_FILE=/path/to/keystore.jks +export SIGNING_STORE_PASSWORD=abc +export SIGNING_KEY_ALIAS=abc +export SIGNING_KEY_PASSWORD=abc +``` + You can build the app using docker. Run `make OFFICIAL_BUILD=false FLUTTER_BUILD_NUMBER=0 docker/flutter/android/release` to build release APK. Run `make docker/flutter/android/libs` to build just `.so` libs. This command is helpful if you want to build Android version of the app on Windows. diff --git a/flutter/android/android.mk b/flutter/android/android.mk index 65c3084a4..a88e41512 100644 --- a/flutter/android/android.mk +++ b/flutter/android/android.mk @@ -19,7 +19,7 @@ ANDROID_NDK_VERSION?=25 ANDROID_NDK_API_LEVEL?=33 flutter/android: flutter/android/libs flutter/check/firebase-env -flutter/android/release: flutter/check-release-env flutter/android flutter/prepare flutter/android/apk +flutter/android/release: flutter/check-release-env flutter/android flutter/prepare flutter/android/apk flutter/android/appbundle flutter/android/libs: flutter/android/libs/checksum flutter/android/libs/build flutter/android/libs/copy # run `make flutter/android/apk` before `flutter/android/test-apk` flutter/android/test-apk: flutter/android/test-apk/main flutter/android/test-apk/helper @@ -76,7 +76,16 @@ flutter/android/apk: ${flutter_firebase_crashlytics_arg} \ ${flutter_build_number_arg} \ ${flutter_folder_args} - cp -f flutter/build/app/outputs/flutter-apk/app-release.apk ${flutter_android_apk_release_path} + cp -f flutter/build/app/outputs/flutter-apk/app-release.apk ${flutter_android_apk_release_path}.apk +.PHONY: flutter/android/appbundle +flutter/android/appbundle: + mkdir -p $$(dirname ${flutter_android_apk_release_path}) + cd flutter && ${_start_args} flutter --no-version-check build appbundle \ + ${flutter_official_build_arg} \ + ${flutter_firebase_crashlytics_arg} \ + ${flutter_build_number_arg} \ + ${flutter_folder_args} + cp -f flutter/build/app/outputs/bundle/release/app-release.aab ${flutter_android_apk_release_path}.aab FLUTTER_ANDROID_APK_TEST_MAIN?=test-main.apk flutter_android_apk_test_main_path=${FLUTTER_ANDROID_APK_FOLDER}/${FLUTTER_ANDROID_APK_TEST_MAIN} diff --git a/flutter/android/app/build.gradle b/flutter/android/app/build.gradle index d57733e54..a70b71b5b 100644 --- a/flutter/android/app/build.gradle +++ b/flutter/android/app/build.gradle @@ -54,17 +54,32 @@ android { testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } + signingConfigs { + release { + keyAlias System.env['SIGNING_KEY_ALIAS'] + keyPassword System.env['SIGNING_KEY_PASSWORD'] + storeFile System.env['SIGNING_STORE_FILE'] ? file(System.env['SIGNING_STORE_FILE']) : null + storePassword System.env['SIGNING_STORE_PASSWORD'] + } + } + 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 - + // https://docs.flutter.dev/deployment/android#sign-the-app + if (System.env['SIGNING_FOR_RELEASE'] == 'true') { + println 'Using signingConfigs.release' + signingConfig signingConfigs.release + } else { + println 'Using signingConfigs.debug' + signingConfig signingConfigs.debug + } // By default we do not upload mapping file to Firebase firebaseCrashlytics { if (System.env['FIREBASE_CRASHLYTICS_ENABLED'] == 'true') { + println 'mappingFileUploadEnabled set to true' mappingFileUploadEnabled true } else { + println 'mappingFileUploadEnabled set to false' mappingFileUploadEnabled false } } diff --git a/flutter/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/flutter/android/app/src/main/res/mipmap-hdpi/ic_launcher.png index db77bb4b7b0906d62b1847e87f15cdcacf6a4f29..02545e2d0c61ce4c4382305ddcb870716e31140b 100644 GIT binary patch literal 4399 zcmV+~5zy|5P)VLLewHIXO5f001bFm5;wl!%!55zZ*rxp;idu;BY5VP;Aw~j7eLHAXuwIlC4QY zm0}WZu7COvj&2=X+19L@owV%MF9QHJwat9H|o zuIJ0y7iO3OfKHgDcB^#&5GQfO7~k&*fY(jC?li{xe=;AYN&_QcyBlR8hziiZ(y0b9 z1k9kHY7h^AsZQE85KlmAn5FyNHG$cp?1~E+cOi$Y$m)G`E`>neB7fk(*HFB9~M0WcG>6|u**izfL%6v2JEuYGhmmE zo&mdT^q~O5i6IEXMyrL7+wORQA4XAdj`HBu^g9bDW{;qlLoc*r;U~fPI0STnsR%sNLx-udQ!vZ%1)F>@1FRJDsJq zwdM8od?s^kYO<8iUlhCx02W2j`ztFe>l?{=&#aKkUaeNC)pD84t@$~}vYwu+rv+B6 z*Z=#yhYh*8G^9`GG;qAFQoE{NRIAed$bu)!toNs?=-G z-MFF1^10VJCoovu{r4Z0H#d*;L&&l$IhKu}r)#P#k@ce}Mqq5ZE+R@0gu~eDZl${M z`0>ot)cM%s&Ic?>lDFS`xW2vJ->Jybc&Rj2DrIdO5&U=zfQBKCW~;Tiv%9&y?F9i( z&F?tD$KYu>$2kXYJvuWm@b_SGsUMXj2-mJmLAp#oClR2EJfC$Oe6G(-uWoEUDwmPp z`p1ZZaD953IM{x2^MRk|&ta2i0|rzp8yn?~jV`YoSIp&ZU7tsuJyV!QnuaXKM@o

j_=*R4I?-ct7iiSCwX^qnb{A|@pIEx=C58o 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 literal 544 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY3?!3`olAj~WQl7;NpOBzNqJ&XDuZK6ep0G} zXKrG8YEWuoN@d~6R2!h8bpbvhu0Wd6uZuB!w&u2PAxD2eNXD>P5D~Wn-+_Wa#27Xc zC?Zj|6r#X(-D3u$NCt}(Ms06KgJ4FxJVv{GM)!I~&n8Bnc94O7-Hd)cjDZswgC;Qs zO=b+9!WcT8F?0rF7!Uys2bs@gozCP?z~o%U|N3vA*22NaGQG zlg@K`O_XuxvZ&Ks^m&R!`&1=spLvfx7oGDKDwpwW`#iqdw@AL`7MR}m`rwr|mZgU`8P7SBkL78fFf!WnuYWm$5Z0 zNXhDbCv&49sM544K|?c)WrFfiZvCi9h0O)B3Pgg&ebxsLQ05GG~ AQ2+n{ diff --git a/flutter/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/flutter/android/app/src/main/res/mipmap-mdpi/ic_launcher.png index 17987b79bb8a35cc66c3c1fd44f5a5526c1b78be..88ff610dc104771f0459468079bf7588984631e7 100644 GIT binary patch literal 2565 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 literal 721 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD3?#3*wSy!iOI#yLg7ec#$`gxH85~pclTsBt za}(23gHjVyDhp4h+5i=O3-AeX1=1l$e`s#|#^}+&7(N@w0CIr{$Oe+Uk^K-ZP~83C zcc@hG6rikF&NPT(23>y!y&wkt5C($~2D>~)O*cj@FGjOCM)M>_ixfudOh)?xMu#Fs z#}Y=@YDTwOM)x{K_j*Q;dPdJ?Mz0n|pLRx{4n|)f>SXlmV)XB04CrSJn#dS5nK2lM zrZ9#~WelCp7&e13Y$jvaEXHskn$2V!!DN-nWS__6T*l;H&Fopn?A6HZ-6WRLFP=R` zqG+CE#d4|IbyAI+rJJ`&x9*T`+a=p|0O(+s{UBcyZdkhj=yS1>AirP+0R;mf2uMgM zC}@~JfByORAh4SyRgi&!(cja>F(l*O+nd+@4m$|6K6KDn_&uvCpV23&>G9HJp{xgg zoq1^2_p9@|WEo z*X_Uko@K)qYYv~>43eQGMdbiGbo>E~Q& zrYBH{QP^@Sti!`2)uG{irBBq@y*$B zi#&(U-*=fp74j)RyIw49+0MRPMRU)+a2r*PJ$L5roHt2$UjExCTZSbq%V!HeS7J$N zdG@vOZB4v_lF7Plrx+hxo7(fCV&}fHq)$ diff --git a/flutter/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/flutter/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png index d5f1c8d34e7a88e3f88bea192c3a370d44689c3c..8fc3b6f7dce7b9b7bc22fc10714c47fa323a272a 100644 GIT binary patch literal 11686 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 YanM%x=+OCp|JP8ml1dUaV#Y!L1KXwL;Q#;t literal 1031 zcmeAS@N?(olHy`uVBq!ia0vp^6F``Q8Ax83A=Cw=BuiW)N`mv#O3D+9QW+dm@{>{( zJaZG%Q-e|yQz{EjrrIztFa`(sgt!6~Yi|1%a`XoT0ojZ}lNrNjb9xjc(B0U1_% zz5^97Xt*%oq$rQy4?0GKNfJ44uvxI)gC`h-NZ|&0-7(qS@?b!5r36oQ}zyZrNO3 zMO=Or+<~>+A&uN&E!^Sl+>xE!QC-|oJv`ApDhqC^EWD|@=#J`=d#Xzxs4ah}w&Jnc z$|q_opQ^2TrnVZ0o~wh<3t%W&flvYGe#$xqda2bR_R zvPYgMcHgjZ5nSA^lJr%;<&0do;O^tDDh~=pIxA#coaCY>&N%M2^tq^U%3DB@ynvKo}b?yu-bFc-u0JHzced$sg7S3zqI(2 z#Km{dPr7I=pQ5>FuK#)QwK?Y`E`B?nP+}U)I#c1+FM*1kNvWG|a(TpksZQ3B@sD~b zpQ2)*V*TdwjFOtHvV|;OsiDqHi=6%)o4b!)x$)%9pGTsE z-JL={-Ffv+T87W(Xpooq<`r*VzWQcgBN$$`u}f>-ZQI1BB8ykN*=e4rIsJx9>z}*o zo~|9I;xof diff --git a/flutter/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/flutter/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png index 4d6372eebdb28e45604e46eeda8dd24651419bc0..8d84a445c601f83c9a1c25fb6a7ee1e84058e9bf 100644 GIT binary patch literal 17934 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 FV1mDzkR|{C literal 1443 zcmb`G{WsKk6vsdJTdFg%tJav9_E4vzrOaqkWF|A724Nly!y+?N9`YV6wZ}5(X(D_N(?!*n3`|_r0Hc?=PQw&*vnU?QTFY zB_MsH|!j$PP;I}?dppoE_gA(4uc!jV&0!l7_;&p2^pxNo>PEcNJv za5_RT$o2Mf!<+r?&EbHH6nMoTsDOa;mN(wv8RNsHpG)`^ymG-S5By8=l9iVXzN_eG%Xg2@Xeq76tTZ*dGh~Lo9vl;Zfs+W#BydUw zCkZ$o1LqWQO$FC9aKlLl*7x9^0q%0}$OMlp@Kk_jHXOjofdePND+j!A{q!8~Jn+s3 z?~~w@4?egS02}8NuulUA=L~QQfm;MzCGd)XhiftT;+zFO&JVyp2mBww?;QByS_1w! zrQlx%{^cMj0|Bo1FjwY@Q8?Hx0cIPF*@-ZRFpPc#bBw{5@tD(5%sClzIfl8WU~V#u zm5Q;_F!wa$BSpqhN>W@2De?TKWR*!ujY;Yylk_X5#~V!L*Gw~;$%4Q8~Mad z@`-kG?yb$a9cHIApZDVZ^U6Xkp<*4rU82O7%}0jjHlK{id@?-wpN*fCHXyXh(bLt* zPc}H-x0e4E&nQ>y%B-(EL=9}RyC%MyX=upHuFhAk&MLbsF0LP-q`XnH78@fT+pKPW zu72MW`|?8ht^tz$iC}ZwLp4tB;Q49K!QCF3@!iB1qOI=?w z7In!}F~ij(18UYUjnbmC!qKhPo%24?8U1x{7o(+?^Zu0Hx81|FuS?bJ0jgBhEMzf< zCgUq7r2OCB(`XkKcN-TL>u5y#dD6D!)5W?`O5)V^>jb)P)GBdy%t$uUMpf$SNV31$ zb||OojAbvMP?T@$h_ZiFLFVHDmbyMhJF|-_)HX3%m=CDI+ID$0^C>kzxprBW)hw(v zr!Gmda);ICoQyhV_oP5+C%?jcG8v+D@9f?Dk*!BxY}dazmrT@64UrP3hlslANK)bq z$67n83eh}OeW&SV@HG95P|bjfqJ7gw$e+`Hxo!4cx`jdK1bJ>YDSpGKLPZ^1cv$ek zIB?0S<#tX?SJCLWdMd{-ME?$hc7A$zBOdIJ)4!KcAwb=VMov)nK;9z>x~rfT1>dS+ zZ6#`2v@`jgbqq)P22H)Tx2CpmM^o1$B+xT6`(v%5xJ(?j#>Q$+rx_R|7TzDZe{J6q zG1*EcU%tE?!kO%^M;3aM6JN*LAKUVb^xz8-Pxo#jR5(-KBeLJvA@-gxNHx0M-ZJLl z;#JwQoh~9V?`UVo#}{6ka@II>++D@%KqGpMdlQ}?9E*wFcf5(#XQnP$Dk5~%iX^>f z%$y;?M0BLp{O3a(-4A?ewryHrrD%cx#Q^%KY1H zNre$ve+vceSLZcNY4U(RBX&)oZn*Py()h)XkE?PL$!bNb{N5FVI2Y%LKEm%yvpyTP z(1P?z~7YxD~Rf<(a@_y` diff --git a/flutter/pubspec.yaml b/flutter/pubspec.yaml index 9f3a4d28c..459c77496 100644 --- a/flutter/pubspec.yaml +++ b/flutter/pubspec.yaml @@ -71,9 +71,15 @@ dependency_overrides: # https://github.com/mlcommons/mobile_app_open/issues/777 archive: ^3.3.9 -flutter_icons: - ios: true +flutter_launcher_icons: image_path: "assets/ic_launcher_ios.png" + ios: true + android: "ic_launcher" + min_sdk_android: 21 + windows: + generate: true + image_path: "assets/ic_launcher_ios.png" + icon_size: 256 # For information on the generic Dart part of this file, see the # following page: https://dart.dev/tools/pub/pubspec diff --git a/flutter/tool/generate-apk-filename.sh b/flutter/tool/generate-apk-filename.sh index b55954941..a96cd3bc8 100755 --- a/flutter/tool/generate-apk-filename.sh +++ b/flutter/tool/generate-apk-filename.sh @@ -12,8 +12,7 @@ if [ "${WITH_PIXEL}" = 1 ]; then suffix+="g"; fi if [ "${WITH_TFLITE}" = 1 ]; then suffix+="t"; fi today=$(date +%F) -commit=$(git rev-parse --short HEAD) -output="${today}_mlperfbench-${commit}-${suffix}.apk" +output="${today}_mlperfbench-${suffix}-${FLUTTER_BUILD_NUMBER}" echo "${output}" diff --git a/flutter/windows/runner/resources/app_icon.ico b/flutter/windows/runner/resources/app_icon.ico index c04e20caf6370ebb9253ad831cc31de4a9c965f6..1db8fa9ee65e6ebad8b8333e5bf8063f07f558fa 100644 GIT binary patch literal 27365 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 literal 33772 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