diff --git a/.github/workflows/compile_host_redirect_js.yml b/.github/workflows/compile_host_redirect_js.yml new file mode 100644 index 0000000000..9d61ead761 --- /dev/null +++ b/.github/workflows/compile_host_redirect_js.yml @@ -0,0 +1,32 @@ +name: Compile host-redirect.min.js + +on: + workflow_dispatch: + push: + branches: + - main + paths: + - "firebase.json" + - "tool/host-redirect/**" + +permissions: + contents: write + +env: + NODE_VERSION: 20 + +jobs: + compile_host_redirect_js: + if: ${{ github.actor.login != 'cfug-dev' && + github.repository == 'cfug/flutter.cn' }} + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + with: + submodules: recursive + - uses: actions/setup-node@v4 + with: + node-version: ${{ env.NODE_VERSION }} + - name: Build JS + run: bash ./tool/host-redirect/build.sh + shell: bash \ No newline at end of file diff --git a/firebase.json b/firebase.json index 65e2d02520..77700b8e05 100644 --- a/firebase.json +++ b/firebase.json @@ -12,8 +12,624 @@ ], "rewrites": [], "redirects": [ + { "regex": "^\/(flutter(\/.*)?)", "destination": "https://api.flutter-io.cn/:1", "type": 301 }, + { "regex": "^\/(objcdoc(\/.*)?)", "destination": "https://api.flutter-io.cn/:1", "type": 301 }, + { "regex": "^\/(javadoc(\/.*)?)", "destination": "https://api.flutter-io.cn/:1", "type": 301 }, { "regex": "(?P.*)\\.html$", "destination": ":basename", "type": 301 }, - { "regex": "(?P.*)\\.$", "destination": ":basename", "type": 301 } + { "regex": "(?P.*)\\.$", "destination": ":basename", "type": 301 }, + + { "source": "/ads", "destination": "https://flutter.cn/monetization", "type": 301 }, + { "source": "/community", "destination": "https://flutter.cn/community", "type": 301 }, + { "source": "/gallery", "destination": "https://github.com/flutter/gallery#flutter-gallery", "type": 301 }, + { "source": "/showcase", "destination": "https://flutter.cn/showcase", "type": 301 }, + { "source": "/support", "destination": "https://flutter.cn/community", "type": 301 }, + { "source": "/docs/:rest*", "destination": "/:rest*", "type": 301 }, + { "source": "/subscribe/**", "destination": "https://flutter.cn#newsletter", "type": 301 }, + + { "source": "/accessibility", "destination": "/ui/accessibility-and-internationalization/accessibility", "type": 301 }, + { "source": "/adaptations", "destination": "/platform-integration/platform-adaptations", "type": 301 }, + { "source": "/adaptive*", "destination": "/ui/adaptive-responsive", "type": 301 }, + { "source": "/android-release", "destination": "/deployment/android", "type": 301 }, + { "source": "/animations", "destination": "/ui/animations", "type": 301 }, + { "source": "/animations/:rest*", "destination": "/ui/animations/:rest*", "type": 301 }, + { "source": "/assets-and-images", "destination": "/ui/assets/assets-and-images", "type": 301 }, + { "source": "/bootstrap-into-dart", "destination": "/resources/bootstrap-into-dart", "type": 301 }, + { "source": "/bug-reports", "destination": "/resources/bug-reports", "type": 301 }, + { "source": "/cd", "destination": "/deployment/cd", "type": 301 }, + { "source": "/custom-fonts", "destination": "/cookbook/design/fonts", "type": 301 }, + { "source": "/data-and-backend/json", "destination": "/data-and-backend/serialization/json", "type": 301 }, + { "source": "/debugging", "destination": "/testing/debugging", "type": 301 }, + { "source": "/deferred-components", "destination": "/perf/deferred-components", "type": 301 }, + { "source": "/desktop", "destination": "/platform-integration/desktop", "type": 301 }, + { "source": "/desktop/windows", "destination": "/platform-integration/windows/building", "type": 301 }, + { "source": "/desktop/macos", "destination": "/platform-integration/macos/building", "type": 301 }, + { "source": "/desktop/linux", "destination": "/platform-integration/linux/building", "type": 301 }, + { "source": "/perf/rendering/*", "destination": "/perf", "type": 301 }, + { "source": "/developing-packages", "destination": "/packages-and-plugins/developing-packages", "type": 301 }, + { "source": "/development", "destination": "/", "type": 301 }, + { "source": "/development/:rest*", "destination": "/:rest*", "type": 301 }, + { "source": "/devtools/:rest*", "destination": "/tools/devtools/:rest*", "type": 301 }, + { "source": "/downloads/:resource*", "destination": "/resources/:resource*", "type": 301 }, + { "source": "/f/flutter-survey-metadata.json", "destination": "https://storage.googleapis.com/flutter-uxr/surveys/flutter-survey-metadata.json", "type": 301 }, + { "source": "/faq", "destination": "/resources/faq", "type": 301 }, + { "source": "/fastlane-cd", "destination": "/deployment/cd#fastlane", "type": 301 }, + { "source": "/flutter-for-:platform*", "destination": "/get-started/flutter-for/:platform*-devs", "type": 301 }, + { "source": "/formatting", "destination": "/tools/formatting", "type": 301 }, + { "source": "/gestures", "destination": "/ui/advanced/gestures", "type": 301 }, + { "source": "/hot-reload", "destination": "/tools/hot-reload", "type": 301 }, + { "source": "/ide-setup", "destination": "/get-started/editor", "type": 301 }, + { "source": "/images/catalog-widget-placeholder.png", "destination": "/assets/images/docs/catalog-widget-placeholder.png", "type": 301 }, + { "source": "/inspector", "destination": "/tools/devtools/inspector", "type": 301 }, + { "source": "/intellij-ide", "destination": "/tools/android-studio", "type": 301 }, + { "source": "/intellij-setup", "destination": "/get-started/editor", "type": 301 }, + { "source": "/ios-release", "destination": "/deployment/ios", "type": 301 }, + { "source": "/jobs/**", "destination": "/jobs", "type": 301 }, + { "source": "/json", "destination": "/data-and-backend/serialization/json", "type": 301 }, + { "source": "/ui/media", "destination": "/ui/assets", "type": 301 }, + { "source": "/ui/media/:rest*", "destination": "/ui/assets/:rest*", "type": 301 }, + { "source": "/networking", "destination": "/data-and-backend/networking", "type": 301 }, + { "source": "/overview", "destination": "/resources/architectural-overview", "type": 301 }, + { "source": "/platform-channels", "destination": "/platform-integration/platform-channels", "type": 301 }, + { "source": "/packages-and-plugins/happy-paths", "destination": "/packages-and-plugins/favorites", "type": 301 }, + { "source": "/packages-and-plugins/happy-paths/recommended", "destination": "/packages-and-plugins/favorites", "type": 301 }, + { "source": "/platform-plugins*", "destination": "/packages-and-plugins/using-packages", "type": 301 }, + { "source": "/platform-services", "destination": "/platform-integration/platform-channels", "type": 301 }, + { "source": "/predictive-back", "destination": "/release/breaking-changes/android-predictive-back#migration-guide", "type": 301 }, + { "source": "/reading-writing-files", "destination": "/cookbook/persistence/reading-writing-files", "type": 301 }, + { "source": "/reference/tutorials", "destination": "/codelabs", "type": 301 }, + { "source": "/release-notes", "destination": "/release/release-notes", "type": 301 }, + { "source": "/release-notes/:version*", "destination": "/release/release-notes/release-notes-:version*", "type": 301 }, + { "source": "/responsive*", "destination": "/ui/layout/responsive/adaptive-responsive", "type": 301 }, + { "source": "/routing-and-navigation", "destination": "/ui/navigation", "type": 301 }, + { "source": "/sdk-archive", "destination": "/release/archive", "type": 301 }, + { "source": "/setup-:os*", "destination": "/get-started/install/:os*", "type": 301 }, + { "source": "/setup", "destination": "/get-started/install", "type": 301 }, + { "source": "/technical-overview", "destination": "/resources/architectural-overview", "type": 301 }, + { "source": "/text-input", "destination": "/cookbook/forms/text-input", "type": 301 }, + { "source": "/ui/widgets-intro", "destination": "/ui", "type": 301 }, + { "source": "/tutorials", "destination": "/codelabs", "type": 301 }, + { "source": "/unbounded-constraints", "destination": "/ui/layout/constraints#unbounded", "type": 301 }, + { "source": "/ui-performance", "destination": "/perf/ui-performance", "type": 301 }, + { "source": "/upgrading", "destination": "/release/upgrade", "type": 301 }, + { "source": "/using-ide-vscode", "destination": "/tools/vs-code", "type": 301 }, + { "source": "/using-ide", "destination": "/tools/android-studio", "type": 301 }, + { "source": "/using-packages", "destination": "/packages-and-plugins/using-packages", "type": 301 }, + { "source": "/web-analogs", "destination": "/get-started/flutter-for/web-devs", "type": 301 }, + { "source": "/webflutter.dev/web", "destination": "/web", "type": 301 }, + { "source": "/widgets-intro", "destination": "/ui", "type": 301 }, + { "source": "/widgets", "destination": "/ui/widgets/catalog", "type": 301 }, + { "source": "/widgets/:rest*", "destination": "/ui/widgets/:rest*", "type": 301 }, + + { "source": "/accessibility-and-localization", "destination": "/ui/accessibility-and-internationalization", "type": 301 }, + { "source": "/accessibility-and-localization/:rest*", "destination": "/ui/accessibility-and-internationalization/:rest*", "type": 301 }, + { "source": "/add-to-app/android/add-splash-screen", "destination": "/platform-integration/android/splash-screen", "type": 301 }, + { "source": "/codelabs/layout-basics", "destination": "/ui/layout", "type": 301 }, + { "source": "/codelabs/explicit-animations", "destination": "/ui/animations/tutorial", "type": 301 }, + { "source": "/cookbook/games/google-mobile-ads", "destination": "/cookbook/plugins/google-mobile-ads", "type": 301 }, + { "source": "/cookbook/images/cached-images", "destination": "/cookbook/images/network-image", "type": 301 }, + { "source": "/cookbook/networking/named-routes", "destination": "/cookbook/navigation/named-routes", "type": 301 }, + { "source": "/cookbook/testing/integration-test-introduction", "destination": "/cookbook/testing/integration", "type": 301 }, + { "source": "/cookbook/testing/integration-test-profiling", "destination": "/cookbook/testing/integration/profiling", "type": 301 }, + { "source": "/cookbook/testing/integration-test-scrolling", "destination": "/cookbook/testing/integration/scrolling", "type": 301 }, + { "source": "/cookbook/testing/mocking", "destination": "/cookbook/testing/unit/mocking", "type": 301 }, + { "source": "/cookbook/testing/unit-test", "destination": "/cookbook/testing/unit/introduction", "type": 301 }, + { "source": "/cookbook/testing/widget-test-finders", "destination": "/cookbook/testing/widget/finders", "type": 301 }, + { "source": "/cookbook/testing/widget-test-introduction", "destination": "/cookbook/testing/widget", "type": 301 }, + { "source": "/cookbook/testing/widget-test-tap-drag", "destination": "/cookbook/testing/widget/tap-drag", "type": 301 }, + { "source": "/deployment/fastlane-cd", "destination": "/deployment/cd#fastlane", "type": 301 }, + { "source": "/get-started", "destination": "/get-started/install", "type": 301 }, + { "source": "/get-started/flutter-for", "destination": "/get-started/learn-more", "type": 301 }, + { "source": "/get-started/flutter-for/ios-devs", "destination": "/get-started/flutter-for/swiftui-devs", "type": 301 }, + { "source": "/get-started/install/null", "destination": "/get-started/install", "type": 301 }, + { "source": "/get-started/web", "destination": "/platform-integration/web/building", "type": 301 }, + { "source": "/ios-14", "destination": "/platform-integration/ios/ios-debugging", "type": 301 }, + { "source": "/ios-project-migration", "destination": "/platform-integration/ios", "type": 301 }, + { "source": "/layout", "destination": "/ui/layout", "type": 301 }, + { "source": "/material-3-migration", "destination": "/release/breaking-changes/material-3-migration", "type": 301 }, + { "source": "/packages-and-plugins/androidx-compatibility", "destination": "/platform-integration/android/androidx-migration", "type": 301 }, + { "source": "/packages-and-plugins/c-interop", "destination": "/platform-integration/android/c-interop", "type": 301 }, + { "source": "/packages-and-plugins/plugins-in-tests", "destination": "/testing/plugins-in-tests", "type": 301 }, + { "source": "/packages-and-plugins/plugin-api-migration", "destination": "/release/breaking-changes/plugin-api-migration", "type": 301 }, + { "source": "/platform-integration/android/androidx-migration", "destination": "/release/breaking-changes/androidx-migration", "type": 301 }, + { "source": "/platform-integration/android/splash-screen-migration", "destination": "/release/breaking-changes/splash-screen-migration", "type": 301 }, + { "source": "/platform-integration/c-interop", "destination": "/platform-integration", "type": 301 }, + { "source": "/platform-integration/ios-app-clip", "destination": "/platform-integration/ios/ios-app-clip", "type": 301 }, + { "source": "/platform-integration/ios/splash-screen", "destination": "/platform-integration/ios/launch-screen", "type": 301 }, + { "source": "/platform-integration/platform-views", "destination": "/platform-integration/android/platform-views", "type": 301 }, + { "source": "/platform-integration/web-images", "destination": "/platform-integration/web/web-images", "type": 301 }, + { "source": "/platform-integration/windows/run-loop-migration", "destination": "/release/breaking-changes/windows-run-loop", "type": 301 }, + { "source": "/platform-integration/windows/version-migration", "destination": "/release/breaking-changes/windows-version-information", "type": 301 }, + { "source": "/platform-integration/windows/dark-mode-migration", "destination": "/release/breaking-changes/windows-dark-mode", "type": 301 }, + { "source": "/release/release-notes/changelogs/changelog-1.17.0", "destination": "/release/release-notes/release-notes-1.17.0", "type": 301 }, + { "source": "/release/release-notes/supported-platforms", "destination": "/reference/supported-platforms", "type": 301 }, + { "source": "/reference/widgets/:catalogpage+", "destination": "/ui/widgets/:catalogpage+", "type": 301 }, + { "source": "/reference/widgets/widgetindex", "destination": "/reference/widgets", "type": 301 }, + { "source": "/release/breaking-changes/scrollable_alert_dialog", "destination": "/release/breaking-changes/scrollable-alert-dialog", "type": 301 }, + { "source": "/release/breaking-changes/win_lifecycle_process_function", "destination": "/release/breaking-changes/win-lifecycle-process-function", "type": 301 }, + { "source": "/resources/compatibility", "destination": "/release/compatibility-policy", "type": 301 }, + { "source": "/resources/dart-swift-concurrency", "destination": "/get-started/flutter-for/dart-swift-concurrency", "type": 301 }, + { "source": "/resources/platform-adaptations", "destination": "/platform-integration/platform-adaptations", "type": 301 }, + { "source": "/resources/rendering", "destination": "/resources/architectural-overview#rendering-and-layout", "type": 301 }, + { "source": "/resources/security-false-positives", "destination": "/reference/security-false-positives", "type": 301 }, + { "source": "/resources/technical-overview", "destination": "/resources/architectural-overview", "type": 301 }, + { "source": "/resources/design-docs", "destination": "https://github.com/flutter/flutter/issues?q=is%3Aopen+is%3Aissue+label%3A%22design+doc%22", "type": 301 }, + { "source": "/resources/Flutter-IntelliJ-cheat-sheet-MacOS.pdf", "destination": "/tools/android-studio", "type": 301 }, + { "source": "/resources/Flutter-IntelliJ-cheat-sheet-WindowsLinux.pdf", "destination": "/tools/android-studio", "type": 301 }, + { "source": "/testing/best-practices", "destination": "/perf/best-practices", "type": 301 }, + { "source": "/testing/integration-tests/migration", "destination": "/release/breaking-changes/flutter-driver-migration", "type": 301 }, + { "source": "/testing/ui-performance", "destination": "/perf/ui-performance", "type": 301 }, + { "source": "/tools/devtools", "destination": "/tools/devtools/overview", "type": 301 }, + { "source": "/tools/devtools/code-size", "destination": "/tools/devtools/app-size", "type": 301 }, + { "source": "/tools/devtools/codeSize", "destination": "/tools/devtools/app-size", "type": 301 }, + { "source": "/tools/devtools/timeline", "destination": "/tools/devtools/performance", "type": 301 }, + { "source": "/tools/ide", "destination": "/tools/android-studio", "type": 301 }, + { "source": "/tools/ide/android-studio", "destination": "/tools/android-studio", "type": 301 }, + { "source": "/tools/ide/vs-code", "destination": "/tools/vs-code", "type": 301 }, + { "source": "/tools/inspector", "destination": "/tools/devtools/inspector", "type": 301 }, + { "source": "/tools/sdk/archive", "destination": "/release/archive", "type": 301 }, + { "source": "/tools/sdk/overview", "destination": "/tools/sdk", "type": 301 }, + { "source": "/tools/sdk/releases", "destination": "/release/archive", "type": 301 }, + { "source": "/tools/sdk/release-notes", "destination": "/release/release-notes", "type": 301 }, + { "source": "/tools/sdk/release-notes/:rest*", "destination": "/release/release-notes/:rest*", "type": 301 }, + { "source": "/tools/sdk/release-notes/supported-platforms", "destination": "/reference/supported-platforms", "type": 301 }, + { "source": "/tools/sdk/upgrading", "destination": "/release/upgrade", "type": 301 }, + { "source": "/tools/web-renderers", "destination": "/platform-integration/web/renderers", "type": 301 }, + { "source": "/tutorials/animation", "destination": "/ui/animations/tutorial", "type": 301 }, + { "source": "/tutorials/interactive", "destination": "/ui/interactive", "type": 301 }, + { "source": "/tutorials/internationalization", "destination": "/ui/accessibility-and-internationalization/internationalization", "type": 301 }, + { "source": "/tutorials/layout", "destination": "/ui/layout", "type": 301 }, + { "source": "/ui/accessibility-and-localization", "destination": "/ui/accessibility-and-internationalization", "type": 301 }, + { "source": "/ui/accessibility-and-localization/:rest*", "destination": "/ui/accessibility-and-internationalization/:rest*", "type": 301 }, + { "source": "/ui/advanced", "destination": "/ui", "type": 301 }, + { "source": "/ui/advanced/actions_and_shortcuts", "destination": "/ui/interactivity/actions-and-shortcuts", "type": 301 }, + { "source": "/ui/advanced/actions-and-shortcuts", "destination": "/ui/interactivity/actions-and-shortcuts", "type": 301 }, + { "source": "/ui/advanced/focus", "destination": "/ui/interactivity/focus", "type": 301 }, + { "source": "/ui/advanced/gestures", "destination": "/ui/interactivity/gestures", "type": 301 }, + { "source": "/ui/advanced/shaders", "destination": "/ui/design/graphics/fragment-shaders", "type": 301 }, + { "source": "/ui/advanced/slivers", "destination": "/ui/layout/scrolling/slivers", "type": 301 }, + { "source": "/ui/advanced/splash-screen", "destination": "/platform-integration/android/splash-screen", "type": 301 }, + { "source": "/ui/advanced/typography", "destination": "/ui/design/text/typography", "type": 301 }, + { "source": "/ui/assets-and-images", "destination": "/ui/assets/assets-and-images", "type": 301 }, + { "source": "/ui/building-adaptive-apps", "destination": "/ui/adaptive-responsive", "type": 301 }, + { "source": "/ui/interactive", "destination": "/ui/interactivity", "type": 301 }, + { "source": "/ui/layout/adaptive-responsive", "destination": "/ui/adaptive-responsive", "type": 301 }, + { "source": "/ui/layout/box-constraints", "destination": "/ui/layout/constraints#unbounded", "type": 301 }, + { "source": "/ui/layout/building-adaptive-apps", "destination": "/ui/adaptive-responsive", "type": 301 }, + { "source": "/ui/layout/responsive", "destination": "/ui/adaptive-responsive", "type": 301 }, + { "source": "/ui/layout/responsive/adaptive-responsive", "destination": "/ui/adaptive-responsive", "type": 301 }, + { "source": "/ui/material", "destination": "/ui/design/material", "type": 301 }, + { "source": "/ui/material3-updates", "destination": "/ui/design/material", "type": 301 }, + { "source": "/ui/scrolling", "destination": "/ui/layout/scrolling", "type": 301 }, + { "source": "/ui/scrolling/:rest*", "destination": "/ui/layout/scrolling/:rest*", "type": 301 }, + { "source": "/ui/splash-screen", "destination": "/platform-integration/android/splash-screen", "type": 301 }, + { "source": "/ui/splash-screen/android-splash-screen", "destination": "/platform-integration/android/splash-screen", "type": 301 }, + { "source": "/ui/widgets/catalog", "destination": "/ui/widgets", "type": 301 }, + { "source": "/ui/widgets/widgetindex", "destination": "/reference/widgets", "type": 301 }, + { "source": "/web", "destination": "/platform-integration/web", "type": 301 }, + { "source": "/whats-new-archive", "destination": "/release/whats-new", "type": 301 }, + { "source": "/whats-new", "destination": "/release/whats-new", "type": 301 }, + { "source": "/testing/oem-debuggers", "destination": "/testing/native-debugging", "type": 301 }, + + { "source": "/adoptawidget", "destination": "https://github.com/flutter/flutter/blob/main/CONTRIBUTING.md", "type": 301 }, + { "source": "/apprentice-giveaway", "destination": "https://www.youtube.com/playlist?list=PL4dBIh1xps-HAaadBRWQobCO_IJ4gMOG2", "type": 301 }, + { "source": "/clock", "destination": "https://medium.com/flutter/its-time-the-flutter-clock-contest-results-dcebe2eb3957", "type": 301 }, + { "source": "/create", "destination": "https://medium.com/flutter/the-flutter-create-winners-are-40980f2d20b3", "type": 301 }, + { "source": "/assets/images/docs/intellij/hot-reload.gif", "destination": "https://raw.githubusercontent.com/flutter/website/main/src/assets/images/docs/tools/android-studio/hot-reload.gif", "type": 301 }, + { "source": "/brick-breaker", "destination": "https://codelabs.developers.google.com/codelabs/flutter-flame-brick-breaker", "type": 301 }, + { "source": "/catalog/samples", "destination": "https://flutter.github.io/samples/#", "type": 301 }, + { "source": "/catalog/samples/*", "destination": "https://flutter.github.io/samples/#", "type": 301 }, + { "source": "/chat", "destination": "https://github.com/flutter/flutter/wiki/Chat", "type": 302 }, + { "source": "/custom-deferred-components", "destination": "https://github.com/flutter/flutter/wiki/Deferred-Components#custom-implementations", "type": 301 }, + { "source": "/deferred-components-wiki", "destination": "https://github.com/flutter/flutter/wiki/Deferred-Components", "type": 301 }, + { "source": "/design-principles", "destination": "https://github.com/flutter/flutter/wiki/Style-guide-for-Flutter-repo", "type": 301 }, + { "source": "/fully-deferred-flutter", "destination": "https://github.com/flutter/flutter/wiki/Deferred-Components#fully-deferring-flutter-in-add-to-app", "type": 301 }, + { "source": "/null-safety", "destination": "https://dart.dev/null-safety", "type": 301 }, + { "source": "/privacy", "destination": "https://www.google.com/intl/en/policies/privacy", "type": 301 }, + { "source": "/report-jank", "destination": "https://github.com/flutter/flutter/issues/74833", "type": 301 }, + { "source": "/research-optout", "destination": "https://docs.google.com/forms/d/e/1FAIpQLSeG2Nhj0YQkr3m75P74Zb9G-v7zgNhAE9arCyig-a5B1A8uDw/viewform?usp=sf_link", "type": 301 }, + { "source": "/research-signup", "destination": "https://docs.google.com/forms/d/e/1FAIpQLSe0i4De809KXVCdljGKrjMj3lxhuzbuFKCtY5PEQPCYtGxFMg/viewform?usp=sf_link", "type": 301 }, + { "source": "/resources/design-principles", "destination": "https://github.com/flutter/flutter/wiki/Style-guide-for-Flutter-repo", "type": 301 }, + { "source": "/style-guide*", "destination": "https://github.com/flutter/flutter/wiki/Style-guide-for-Flutter-repo", "type": 301 }, + { "source": "/youtube", "destination": "https://youtube.com/@flutterdev", "type": 301 }, + + { "source": "/go/2D-Foundation", "destination": "https://docs.google.com/document/d/1C2hAq-gMAIx4Cbym7EMhVAcPZ2hmNxlgijpYmgTpmUU/edit?usp=sharing", "type": 301 }, + { "source": "/go/a11y-links", "destination": "https://docs.google.com/document/d/1FxzANiyJFkoRxJ7V2IejpfB5DX19gxiJps-8N2oUW_U/edit#", "type": 301 }, + { "source": "/go/a11y-text-attributes", "destination": "https://docs.google.com/document/d/1vhbwxFOTRTUvW2C_onFffEH5Fn2pAfMQDyv-gekias0/edit?usp=sharing&resourcekey=0-ChQvjIoWYO7jXcaCXMj5Qw", "type": 301 }, + { "source": "/go/actions-and-shortcuts-design-revision", "destination": "https://docs.google.com/document/d/1A9yald55O_C6Weqp4tOtyMisfOC1ZC0UMq7Yc-pNfVQ/edit", "type": 301 }, + { "source": "/go/adaptive", "destination": "/ui/adaptive-responsive", "type": 301 }, + { "source": "/go/adaptive-layout-foldables", "destination": "https://docs.google.com/document/d/1qhrpTWYs5f67X8v32NCCNTRMIjSrVHuaMEFAul-Q_Ms/edit?usp=sharing", "type": 301 }, + { "source": "/go/add-missing-features-to-selection-controls", "destination": "https://docs.google.com/document/d/1QizXwBiO-2REIcEovl5pK06BaLPOWYmNwOE5jactJZA/edit?usp=sharing&resourcekey=0-1pb9mJiAq29Gesmt25GAug", "type": 301 }, + { "source": "/go/add-to-app-samples", "destination": "https://docs.google.com/document/d/1M_GsAL8C1NxbsmzI35w2Th1wvX1KMoPHY5yeeNbzjY0", "type": 301 }, + { "source": "/go/allow-datatable-row-height-to-expand", "destination": "https://docs.google.com/document/d/1qr1IgaU2z9eaM6zCa4u-Q8kJD5Zq7IcdxVyrgR7CwZc/edit?usp=sharing&resourcekey=0-1bNp0ocF4AwGBj6NvRfrEA", "type": 301 }, + { "source": "/go/android-assets-in-flutter", "destination": "https://docs.google.com/document/d/1jymgQYxRTe5rdprt74ERh7Jsa0lfnRuMnkOmJusLWsE/edit", "type": 301 }, + { "source": "/go/android-dependency-versions", "destination": "https://docs.google.com/document/d/1qeeM5QG-jiafttSgvc7yvC19IDRggFFZQTktBVxL6sI/edit?usp=sharing&resourcekey=0-HLEAiBOMxAlQxDs-mEeffw", "type": 301 }, + { "source": "/go/android-embedding-dependencies", "destination": "https://docs.google.com/document/d/1vITp2mUZRa-cmll0sPH0zjNgPlyvOMx7awxPNRAPyic/edit", "type": 301 }, + { "source": "/go/android-embedding-move", "destination": "https://docs.google.com/document/d/1nQujwZfEe3QOHTyZn160eImpoJOYioADP09DtumcLcc/edit?ts=5d8041db#", "type": 301 }, + { "source": "/go/android-java-gradle-error", "destination": "/release/breaking-changes/android-java-gradle-migration-guide", "type": 301 }, + { "source": "/go/android-migration-summary", "destination": "https://docs.google.com/document/d/1wKspwf6LQu6uo32uQ9NcukfiKhLL4ButV9cwpjeb8QI", "type": 301 }, + { "source": "/go/android-ndk-version", "destination": "https://docs.google.com/document/d/1sljfqHpI5m4uxsL7B89yhYluO97Mz1YKyA0VgzzXyZ4/edit?usp=sharing&resourcekey=0-Ts9Rk8jbJor7WBMMiehKWg", "type": 301 }, + { "source": "/go/android-plugin-migration", "destination": "/release/breaking-changes/plugin-api-migration", "type": 301 }, + { "source": "/go/android-project-migration", "destination": "/platform-integration/android/androidx-migration", "type": 301 }, + { "source": "/go/android-root-predictive-back", "destination": "https://docs.google.com/document/d/1BGCWy1_LRrXEB6qeqTAKlk-U2CZlKJ5xI97g45U7azk/edit#", "type": 301 }, + { "source": "/go/android-splash-migration", "destination": "/platform-integration/android/splash-screen-migration", "type": 301 }, + { "source": "/go/android-startup-tracing", "destination": "https://docs.google.com/document/d/1I7jvRg3UmG7P84hdis-9A00fEr2Ntj-K7f_FbGLubGE/edit?usp=sharing", "type": 301 }, + { "source": "/go/androidx-transition", "destination": "https://docs.google.com/document/d/1JnMxQinUeouuV5kcenoq03TsvLyn_xaHXIT_6c5b7nQ", "type": 301 }, + { "source": "/go/annotator-tree", "destination": "https://docs.google.com/document/d/1YtkdZSx1687Ipbff06qp3XglmJym3Wc9boY4I-bYs4A/edit", "type": 301 }, + { "source": "/go/api-for-transform-performance", "destination": "https://docs.google.com/document/d/1Fxdlf7JsA-yAwc_RNuboMG-vhIhchRBZGvDSwg5qR0A/edit?usp=sharing", "type": 301 }, + { "source": "/go/app-extensions", "destination": "https://docs.google.com/document/d/1WloBrAYpqNKOhEHytTqJEHshcXxHflLUGKvULKRHbuU/edit?usp=sharing", "type": 301 }, + { "source": "/go/application-lifecycle-events", "destination": "https://docs.google.com/document/d/1FL5Fgk7EzMNOpJL0GZJt-lfWtGt2igHuC2ZznItS2l8/edit?usp=sharing&resourcekey=0-IZNfpSVPkMbigQLLXoJcfw", "type": 301 }, + { "source": "/go/apple-pencil-double-tap-support", "destination": "https://docs.google.com/document/d/1r4P5r-jGt2Sjqro3ldCU2axUiHTpu3yhIycnI94OKQw/edit?usp=sharing", "type": 301 }, + { "source": "/go/asset-lookup-in-plugin-binding", "destination": "https://docs.google.com/document/d/1iwGFWipC0v0FKvAgbjGl0kaV9IGox1YiD8jUP8Vvkjc/edit", "type": 301 }, + { "source": "/go/asset-transformation", "destination": "https://docs.google.com/document/d/1i_trjTF-gJ3Xj-GUtVmyLETa5CwStvabEjtD5z8ArC4/edit?usp=sharing", "type": 301}, + { "source": "/go/autocomplete", "destination": "https://docs.google.com/document/d/1fV4FDNdcza1ITU7hlgweCDUZdWyCqd-rjz_J7K2KkfY/edit?usp=sharing", "type": 301 }, + { "source": "/go/autosubmit", "destination": "https://docs.google.com/document/d/14oAi2gHMDnqOVe2rEl0syny7_7xsCHh83HtdomQgouM/edit?usp=sharing", "type": 301 }, + { "source": "/go/automatic-android-plugin-registration", "destination": "https://docs.google.com/document/d/1xNkBmcdVL1yEXqtZ65KzTwfr5UXDD05VVKYXIXGX7p8/edit", "type": 301 }, + { "source": "/go/automated-revert-workflow", "destination": "https://docs.google.com/document/d/1lBkWo9rzHseoYaEaa12HOjVS32uQ5rFdLRUCO_CQoiQ/edit?usp=sharing", "type": 301 }, + { "source": "/go/backdrop-filter-with-overlay-canvas", "destination": "https://docs.google.com/document/d/1t_offKOgkuVzvB3fqGTfcltovb-yxqV6tbuP1qIBqVI/edit?usp=sharing", "type": 301 }, + { "source": "/go/backing-stores-for-multi-view-partial-repaint", "destination": "https://docs.google.com/document/d/1CPpA86BTF6JTvztmRWCeLGQoPEqX_msYMG6avdqhaFk/edit?usp=sharing", "type": 301 }, + { "source": "/go/base-annotations-local-position-on-region", "destination": "https://docs.google.com/document/d/1r7FQTOw2vZJZ5c0VoNqi9CWmZY3MvUfz0spdf0-nK6k/edit", "type": 301 }, + { "source": "/go/blankcanvas", "destination": "https://docs.google.com/document/d/1rS_RO2DQ_d4_roc3taAB6vXFjv7-9hJP7pyZ9NhPOdA/edit?resourcekey=0-VBzTPoqLwsruo0j9dokuOg", "type": 301 }, + { "source": "/go/bottom-navigation-bar-title-deprecation", "destination": "https://docs.google.com/document/d/1L-2nPf5hbLGNoRvOSUmnxgUHahBVzW1ybhTXGY3ObDw/edit?usp=sharing", "type": 301 }, + { "source": "/go/buffer-queue", "destination": "https://docs.google.com/document/d/1rXl9G-VmISVlVkKVgrnQKeX7Mexyez0x9HZ5F5yKxrQ/edit?usp=sharing", "type": 301 }, + { "source": "/go/build-aar", "destination": "/add-to-app/android/project-setup#option-a---depend-on-the-android-archive-aar", "type": 301 }, + { "source": "/go/build-dashboard-v2", "destination": "https://docs.google.com/document/d/1kwh48xYuoVtadYFb2I2t6BJMGEW07K7T5WYcieAZZiY", "type": 301 }, + { "source": "/go/build-flows", "destination": "https://docs.google.com/document/d/1imsVxbeAsttTi90EFpbnbVzov9z0xXd7tLCAr_QAJ38", "type": 301 }, + { "source": "/go/buildtextspan-buildcontext", "destination": "https://docs.google.com/document/d/1nr-g45gXcWTYoW9UmChZV7Ije3lKP4pEvDQCdz6NFdI/edit?usp=sharing", "type": 301 }, + { "source": "/go/cacheless-shared-preferences", "destination": "https://docs.google.com/document/d/1DNhUYIJaDA10g2cOqipKyPuPkgL_FYPfgkF9Coqcc6k/edit?usp=sharing", "type": 301 }, + { "source": "/go/calculating-flutter-frame-rate", "destination": "https://docs.google.com/document/d/1YGLELXWdC6YIN03QzEzcIRJc56gCnabPBW8BHCAFR58/edit", "type": 301 }, + { "source": "/go/camera-privacy", "destination": "https://docs.google.com/document/d/1t_5FYzOTlBWC6arHc4_8VuG0BUOtIyP9xWvbDER5Y9I/edit", "type": 301 }, + { "source": "/go/cascading-menus", "destination": "https://docs.google.com/document/d/17XOSGzLzqbpNcCUwakM_WQ2ZOMcUOXcPC__7nPORwms/edit?usp=sharing&resourcekey=0-hg74S2vAAqwJFN984ZXQHg", "type": 301 }, + { "source": "/go/center-floating-label-inputdecoration", "destination": "https://docs.google.com/document/d/1sxP91vZiY7McmSMmzrboklIJWQ_6pSS9MBSCrQq016M/edit#", "type": 301 }, + { "source": "/go/change-default-textselectionhandlecolor-to-accentcolor", "destination": "https://docs.google.com/document/d/1RJQd5ABWJ_7DZN19aTZBCE7xHzlC4MYBP1bWE2FWcvc/edit", "type": 301 }, + { "source": "/go/chip-usedeletebuttontooltip-deprecation", "destination": "https://docs.google.com/document/d/1wc9ot7T2E7hJubYxEWMX230a79wYSiFey4BHxnEzHtw/edit?usp=sharing&resourcekey=0-Bo7KPqEtkWgZcSuRCqwQ5w", "type": 301 }, + { "source": "/go/ci-post-test-analysis", "destination": "https://docs.google.com/document/d/1V0W6q7gkk2hHFLYb3t7JFr84Km5uhKl9T3Ksb1IpkLQ/edit?usp=sharing", "type": 301 }, + { "source": "/go/clean-up-not-disposed-disposables-in-ff", "destination": "https://docs.google.com/document/d/1bXannXQ8rEtfwxEVd7LDo7xiVu5-QxRoall28MIIFss", "type": 301 }, + { "source": "/go/clip-behavior", "destination": "https://docs.google.com/document/d/1gC5Di4ykTCqupD77PWpy9D8xXo0Ide5CnrH0zzVIhKo/edit", "type": 301 }, + { "source": "/go/colorscheme-generation", "destination": "https://docs.google.com/document/d/1P7f-DGPWz6HCbwLoAruRuWtakPx4VY-e8nT_yuQ71sc/edit?usp=sharing&resourcekey=0-qxeub7yCKa_No0HlrzEk-g", "type": 301 }, + { "source": "/go/colorscheme-m3", "destination": "https://docs.google.com/document/d/1mY1ahBQEMAfsawGJMX5S34pXb7c8dHGatyotClReeas/edit#heading=h.cnnhzna3pz6d", "type": 301 }, + { "source": "/go/configurable-autosubmit", "destination": "https://docs.google.com/document/d/14pf4jfBy1-PHYmJLVbeqrh1swTF01SZ2YD3DR_Qv3kM/edit?usp=sharing&resourcekey=0-AW7-kNNGmmpSUqyOvBdwRg", "type": 301 }, + { "source": "/go/contextual-menus", "destination": "https://docs.google.com/document/d/1F1itGgbSS3Cbq70hScSCNriDoux1sMGF9LHZsMdvU74/edit?resourcekey=0-RkHGwhe-tcoTGlaQyclPtQ", "type": 301 }, + { "source": "/go/cross_file-content-uri-implementation", "destination": "https://docs.google.com/document/d/1-d7uWlB9ERPIOFRQ1nJGGiPDb9ALh7QxincEPOmGc3c", "type": 301 }, + { "source": "/go/cupertino-context-menu-action", "destination": "https://docs.google.com/document/d/1lCuPyAbIzAr0c2KIEZhREC_EnkTKBxNiqP6lGLT-KpU/edit", "type": 301 }, + { "source": "/go/cupertino-datepicker-redesign", "destination": "https://docs.google.com/document/d/1Ib5ztLzc19e1Uggz16BFlrJMg1TOdYLyP-WqtTpDltM/edit?usp=sharing&resourcekey=0-11oVmOsTHLD5fqxdAHZqNg", "type": 301 }, + { "source": "/go/cupertino-increase-contrast", "destination": "https://docs.google.com/document/d/1kePVlqWvJu5Ph0RL6wgg67F3SATmsJ8QY5N0S1MvaGg/edit#", "type": 301 }, + { "source": "/go/cupertino-bottom-sheet-routes", "destination": "https://docs.google.com/document/d/16eMliX4HsDjRmEob2lksM6JBq2_LPVM26uYGyTid1ec/edit#", "type": 301 }, + { "source": "/go/cupertino-switch-onoff-labels", "destination": "https://docs.google.com/document/d/1DD5gx8x0ej5AJzGxzpr4hpgpqsvcDu-ozKliGnhHm7c/edit#", "type": 301 }, + { "source": "/go/custom-colors-m3", "destination": "https://docs.google.com/document/d/1LbD4JqBgAfHex02oR3r2jyu9lTBBNBmyec2ovT59Kr8/edit?usp=sharing", "type": 301 }, + { "source": "/go/custom-tabs-support", "destination": "https://docs.google.com/document/d/1GvsmPQz6aKixNUphL10XmSOL7M6nOH7W1jYwNp0LwnA", "type": 301 }, + { "source": "/go/dart-flutterbuffers", "destination": "https://docs.google.com/document/d/1rqKq6DwqaeBfTLTixxurrdT9HwZ02DyRjFigO9SiB1Q/edit#", "type": 301 }, + { "source": "/go/dart-static-analysis-ir", "destination": "https://docs.google.com/document/d/1xJYGBSoXL7h1z43NnjFsXxauQGXvUnacef4XR1zmeGA/edit#", "type": 301 }, + { "source": "/go/dartle", "destination": "https://docs.google.com/document/d/1Ei0ZIqdqNjxTHoGB3Ay6SWQg3DMSsKKWl70XoBUCFTA", "type": 301 }, + { "source": "/go/dart-tooling-daemon", "destination": "https://docs.google.com/document/d/1Qldlyi2TmzTsDN1AS5AfjE93-A2nR296Np5bZW2aBwU/edit?usp=sharing&resourcekey=0-ckijCX_-ZSy-J_KBI-FQ1Q", "type": 301 }, + { "source": "/go/dart-workspace-support", "destination": "https://docs.google.com/document/d/1_SfTg0W8PASZ2neTkNhYjcVDdFvomeoAnZ_XqflIx88/edit?usp=sharing&resourcekey=0-dcmTZFHicV9ZZL863zC5-w", "type": 301 }, + { "source": "/go/dash-tooling-plugin-strategy", "destination": "https://docs.google.com/document/d/1Zc0AE8JTKfOSA-IFpEYcPFJ2eALbXE3AG4ZucWXeMig/", "type": 301 }, + { "source": "/go/data-sync", "destination": "https://docs.google.com/document/d/1yH96-p-SkMmt6hL5xHHDtMvCKRz2XGrMuw9ZY_nE954", "type": 301 }, + { "source": "/go/dds-daemon", "destination": "https://docs.google.com/document/d/18IgFakijiv9CLFGT5BckbwZuf2pqhOUeN27mB9XqvpQ/edit?usp=sharing&resourcekey=0-rBHvH9gLXLjGPWt5WE-XFg", "type": 301 }, + { "source": "/go/deep-link-flag-migration", "destination": "https://docs.google.com/document/d/1TUhaEhNdi2BUgKWQFEbOzJgmUAlLJwIAhnFfZraKgQs/edit?usp=sharing", "type": 301 }, + { "source": "/go/default-scroll-action", "destination": "https://docs.google.com/document/d/1SJvom6k4YW4EtFIY4VpAhAOH-jWhRkHVfpVsOBB56KM/edit?usp=sharing", "type": 301 }, + { "source": "/go/deferred-image-decoding", "destination": "https://docs.google.com/document/d/1f-NCEF0lrHGd3DsieS1tZ_NWbYTjA4GTqESMbGFsU2U/edit?ts=5e17a77d&pli=1#", "type": 301 }, + { "source": "/go/delegate-route-transitions", "destination": "https://docs.google.com/document/d/10C5VbqhU7FkkDSVlcVZmrl8UyL7nw4CeL4QdPKMjsEk/edit?usp=sharing", "type": 301 }, + { "source": "/go/deprecate-html-renderer", "destination": "https://docs.google.com/document/d/1DGamHsa2lz_Qtgfrfa3j3fRaEopJXc7tCFVM1TQlck8/edit?usp=sharing&resourcekey=0-IjkqrCoo_EcRRS2bPYKI8w", "type": 301 }, + { "source": "/go/deprecation-lifetime", "destination": "https://docs.google.com/document/d/1Gc3ecrMghzc7WU4pgzKB8uBaTPpRdWfozn0otBbxR7s/edit?usp=sharing", "type": 301 }, + { "source": "/go/deprecation-statustransitionwidget", "destination": "https://docs.google.com/document/d/1NdxSKSEKa-E9YDUAyONQVad1bAZdc8bqT4zGVjSBQPo/edit?usp=sharing&resourcekey=0-CkJogS7MIhfZeabrIAUPhQ", "type": 301 }, + { "source": "/go/deprecations-removed-after-1-22", "destination": "https://docs.google.com/spreadsheets/d/1kZOej-h4AiRW2Td3NUnVMSb8PYLB63mpj-oFYqb_4tc/edit?usp=sharing", "type": 301 }, + { "source": "/go/deprecations-removed-after-2-2", "destination": "https://docs.google.com/spreadsheets/d/18VuxojMGFKrFJCeilg3tErAtp23-_tp43XUioC_34To/edit?usp=sharing", "type": 301 }, + { "source": "/go/deprecations-removed-after-2-5", "destination": "https://docs.google.com/spreadsheets/d/191-PZEOmlT7Xw6MDFFyf5HyneTaiCqI4OITtolbXD6c/edit?usp=sharing", "type": 301 }, + { "source": "/go/deprecations-removed-after-2-10", "destination": "https://docs.google.com/spreadsheets/d/12krawYCu6X_g_5wLGpmiAIi-VcTRV6xG7RGbRovuatQ/edit?usp=sharing", "type": 301 }, + { "source": "/go/deprecations-removed-after-3-3", "destination": "https://docs.google.com/spreadsheets/d/13cZzXz3_yMhnMH3Fyv2TKR_3974el103xlZuNWdevZM/edit?usp=sharing", "type": 301 }, + { "source": "/go/deprecations-removed-after-3-7", "destination": "https://docs.google.com/spreadsheets/d/1WCQmKobsgslfhqf6uL7I2BKk5KKhGX-n_xfk9g3CTEE/edit?usp=sharing", "type": 301 }, + { "source": "/go/deprecations-removed-after-3-10", "destination": "https://docs.google.com/spreadsheets/d/1gs2tvYBuwycP1XAZsDbMuqP5jUa6gWH1a0ZQGrzjXvw/edit?usp=sharing", "type": 301 }, + { "source": "/go/deprecations-removed-after-3-13", "destination": "https://docs.google.com/spreadsheets/d/1zzyBRdIkqiEcpv_njEQA7pyG7X8PcNhvXFYrEAB8P78/edit?usp=sharing", "type": 301 }, + { "source": "/go/deprecations-removed-after-3-16", "destination": "https://docs.google.com/spreadsheets/d/1ei3UmfvhmGGuwAGgLaQo1k_pgdu9Mu06tHPuSaS4TI4/edit?usp=sharing", "type": 301 }, + { "source": "/go/deprecations-removed-after-3-19", "destination": "https://docs.google.com/spreadsheets/d/1x_UJ7GiB61ByBo6cPLm_JfLrgFqAfkQo7pPK_lHvsUo/edit?usp=sharing", "type": 301 }, + { "source": "/go/desktop-multi-window-support", "destination": "https://docs.google.com/document/d/11_4wntz_9IJTQOo_Qhp7QF4RfpIMTfVygtOTxQ4OGHY/edit", "type": 301 }, + { "source": "/go/desktop-multi-view-runner-apis", "destination": "https://docs.google.com/document/d/1WkJuzifgJXyceaSoCCu8qTETYmYBOYKoz7Qaxtsore4/edit?usp=sharing", "type": 301 }, + { "source": "/go/desktop-release-conductor", "destination": "https://docs.google.com/document/d/15AwPXNd5FvItAqM0wa2VK0tRrqtRTgM8vR5LQeT2Mag/edit?usp=sharing&resourcekey=0-yZ2FAN-wEKwKT-ymdisetA", "type": 301 }, + { "source": "/go/desktop-resize-macos", "destination": "https://docs.google.com/document/d/1slGllp1Jhde7wkF6snqGhdrZwHV1VVmXeIF3f0t24JU/edit?usp=sharing", "type": 301 }, + { "source": "/go/desktop-resize", "destination": "https://docs.google.com/document/d/1OTy-qCGdP7tYfrEKCNX9A24sgnx5vshfK6FupfniyxA", "type": 301 }, + { "source": "/go/detect-memory-leaks", "destination": "https://docs.google.com/document/d/1hvRVpULPnwGjBc5nw52iSaDfB8hjIzbaQuECHmKvDrY/edit", "type": 301 }, + { "source": "/go/developing-plugins", "destination": "/packages-and-plugins/developing-packages#plugin", "type": 301 }, + { "source": "/go/devintel-q3-2023", "destination": "https://docs.google.com/document/d/1VGux5IxePO8lN_7kUuzYJtcJ76fkldr_TJv4R0tciYk", "type": 301 }, + { "source": "/go/devintel-q1-2024", "destination": "https://docs.google.com/document/d/15W9wsqzFcidXR12DiPH5r5ZDcZw_wDa7Zi9CAAe34Y4/edit?usp=sharing&resourcekey=0-XH0RYaDhNkqa_WCjbH0otA", "type": 301 }, + { "source": "/go/dirty-region-management", "destination": "https://docs.google.com/document/d/19WDvGJql1bmnECTdEzJFeH9Ixw4AP2R7JlgujBSbDbk/edit?usp=sharing", "type": 301 }, + { "source": "/go/disable-dropdownmenuitem", "destination": "https://docs.google.com/document/d/13W6PupVZUt6TenoE3NaTP9OCYsKBIYg9YgdurKe1XKs/edit?usp=sharing&resourcekey=0-6n8D5zSLjWs2ZncIyG6HUw", "type": 301 }, + { "source": "/go/docs-nnbd-migration-guide", "destination": "https://docs.google.com/document/d/1U8blxmkArsd09C-IGe3cQbJ5SvDLhwn0rWWsY2SthZ4/edit?usp=sharing&resourcekey=0-0CviWT1D47VGxK-Li4_NIw", "type": 301 }, + { "source": "/go/double-buffered-window-resize", "destination": "https://docs.google.com/document/d/1allwMZXgX9gGVPguFy3-XydjXEIJgYR1Uhz8Vhm9Rrs/edit?usp=sharing", "type": 301 }, + { "source": "/go/downward-memory-pressure", "destination": "https://docs.google.com/document/d/15zslrHsWigh9e8LeQxfieWwnXDBx5jicFPXD6l_SsH4/edit?usp=sharing", "type": 301 }, + { "source": "/go/drm-embedder-api", "destination": "https://docs.google.com/document/d/13Y0npyYM8iIXDqfvvHNYWFj3aO1xGT20rFbwV4-gRq8/edit?usp=sharing", "type": 301 }, + { "source": "/go/drm-embedder", "destination": "https://docs.google.com/document/d/1XbzbpbVBFC4H-iJfibdKEFOWn8PUCd3PQQDAOaj--wQ/edit?usp=sharing", "type": 301 }, + { "source": "/go/drm-embedder-metal", "destination": "https://docs.google.com/document/d/1ed0hv_0UWUyRCpRWRbv-Ff7sxMimIXwCk5kepWbNA5k/edit?usp=sharing&resourcekey=0-sCLVUBH5gQh-CvdULgkOhw", "type": 301 }, + { "source": "/go/drm-embedder-vulkan", "destination": "https://docs.google.com/document/d/1MC-2vM1eqlpnm1QFvijCzTDL8pvHpaxqNxaKnA7Soec/edit?usp=sharing", "type": 301 }, + { "source": "/go/dynamic-plugins", "destination": "https://docs.google.com/document/d/18AQCXxFrCu8UahRVy__VAQTWUnaonKtl24TUr86KkXs", "type": 301 }, + { "source": "/go/education", "destination": "https://docs.google.com/document/d/1PG2aPAkWkJ4q6k0wKlVwo86QZ9yLlZOeMVHStzDhwp4/edit?resourcekey=0-rzmUbzd7yaIHRbgh0kqqMg", "type": 301 }, + { "source": "/go/eliminating-nullok-parameters", "destination": "https://docs.google.com/document/d/1LKBL0S1uyhACDiUXILhLKFZH8Cpl_w3mXjHgaE8_--U/edit?usp=sharing", "type": 301 }, + { "source": "/go/embedder-vulkan-support", "destination": "https://docs.google.com/document/d/1vaUkfDett2mzKIUmq6uC-7Se2NEAf4XkwKU7ISTJpQE/edit", "type": 301 }, + { "source": "/go/encoded-image-dimensions", "destination": "https://docs.google.com/document/d/18KL4CILgjwjeb6vXDsIn5U7vHGSonpgR05FqaSsvoVc/edit", "type": 301 }, + { "source": "/go/engine-build-definition-language", "destination": "https://docs.google.com/document/d/1R2X4-YztJMyt82nPLXbQhDA50PcMDgavXN4JUu39hKI", "type": 301 }, + { "source": "/go/engine-cpu-profiling", "destination": "https://docs.google.com/document/d/1z_V69XzRct3vR7mBZ9tuuS1pZ_e7FQkuzbVJjXxMeaI/edit", "type": 301 }, + { "source": "/go/engine-rtree", "destination": "https://docs.google.com/document/d/1UGV0qerZ8o3eGrjm1axp0NoLWrT0KmTonMamb-xifEM/edit?usp=sharing&resourcekey=0-wh0paKk1H1vZbzxKxIj2jA", "type": 301 }, + { "source": "/go/engine-v2-recipes", "destination": "https://docs.google.com/document/d/1vP26tMAJqqHlIF2QZUfcirFe5zmei7gZ1zQ6IVGQPU4", "type": 301 }, + { "source": "/go/error-handling", "destination": "https://docs.google.com/document/d/1HdGLKoVw_KWLrVzDNZ8Lk5nN-biHQzi_CS5mCkpiDwA/edit", "type": 301 }, + { "source": "/go/everything-builds-from-a-module", "destination": "https://docs.google.com/document/d/1fkUpos4hbJF0NYSwjNLWct2UGDg-AfhxzlR6p2g0w9M", "type": 301 }, + { "source": "/go/exposing-scroll-behaviors", "destination": "https://docs.google.com/document/d/1W5PSIO1cVj7v6_xayydyFN3abWFOJTmFHKGBA9VKbbg/edit?usp=sharing&resourcekey=0-AHb9dJP8Knv3GWwZLnzZWQ", "type": 301 }, + { "source": "/go/external-drag-and-drop", "destination": "https://docs.google.com/document/d/1toFc3Fjafv8jDToQ85S5AquC7NOoJ2ZO_Or484nsEuo/edit?usp=sharing", "type": 301 }, + { "source": "/go/fallback-image-decoding", "destination": "https://docs.google.com/document/d/1G-5s6uoP1H_7f_ByLrvCVcoFXYZ80CixkMbbHMsMCag/edit?usp=sharing", "type": 301 }, + { "source": "/go/faster-cocoon", "destination": "https://docs.google.com/document/d/1NXP0_9TJ1qz674iYyOGVLEHWVpmbXr5yjhBrdoU_x5g/edit", "type": 301 }, + { "source": "/go/federated-platforms", "destination": "https://docs.google.com/document/d/1z_4Z5JMTbk5c4FpayVAb-PTz2wLP-aSCirbieavT3Ws/edit?usp=sharing", "type": 301 }, + { "source": "/go/federated-plugins", "destination": "https://docs.google.com/document/d/1LD7QjmzJZLCopUrFAAE98wOUQpjmguyGTN2wd_89Srs/edit", "type": 301 }, + { "source": "/go/ffi-plugins", "destination": "https://docs.google.com/document/d/1vMw-W6L-r-uL1SUgzDh6J5rmtqum7SZdO9khWACrZJI/edit?resourcekey=0-vvjEK88N-pApyKTPWJ2IZQ", "type": 301 }, + { "source": "/go/file-system-access-from-devtools", "destination": "https://docs.google.com/document/d/1BNgZka2N9HYL11A4IdR8FqsSW1VMr9Vo7CSrjY9rcic/edit?usp=sharing&resourcekey=0-H1f6lS5KjytrUCWc1vcS_w", "type": 301 }, + { "source": "/go/flavor-specific-assets", "destination": "https://docs.google.com/document/d/1_3GwdRZ1WPBqR9koNxESfAXHqynv36__ctMqN-NRG0k/edit?usp=sharing", "type": 301 }, + { "source": "/go/flame-dartpad", "destination": "https://dartpad.dev/?id=3e52ca7b51ba15f989ad880b8b3314a2", "type": 301 }, + { "source": "/go/floating-snackbar-offset", "destination": "https://docs.google.com/document/d/1elP-y83PtvfAZHNcpHCtnOFhZO9VnnlobwfQ33QO4hg/edit", "type": 301 }, + { "source": "/go/floating-widgetspans", "destination": "https://docs.google.com/document/d/1I-VqCxvszXGAas_6EE9b6ZIzyMY3HjxDxGW9_DWWd7M/edit", "type": 301 }, + { "source": "/go/flutter-developer-tooling-plugins", "destination": "https://docs.google.com/document/d/189A-T-pcHPuds8pOtbzLS8Wl6Hr0AIAIl0aRTPvLKec/", "type": 301 }, + { "source": "/go/flutter-devtools-extensions", "destination": "https://docs.google.com/document/d/189A-T-pcHPuds8pOtbzLS8Wl6Hr0AIAIl0aRTPvLKec/", "type": 301 }, + { "source": "/go/flutter-devtools-static-extensions", "destination": "https://docs.google.com/document/d/11J4h1oEfB9wBoRYUy4KzclnKITBY-234jKpU3kq4V4w/edit?resourcekey=0-pPo85Svkb9lKdtlrhMCTbw", "type": 301 }, + { "source": "/go/flutter-drop-android-jellybean-2023", "destination": "https://docs.google.com/document/d/1wWNly2SZRDqupSsHkBWDI_lS2MohBGEwPSXF6W05NOc/edit?usp=sharing", "type": 301 }, + { "source": "/go/flutter-doctor-app-folder", "destination": "https://docs.google.com/document/d/1_N70oh5rl0pMlz-epE_3fIr7gqE94dgoV-DHq5OlF2I/edit", "type": 301 }, + { "source": "/go/flutter-drop-macOS-10.13-2022-q4", "destination": "https://docs.google.com/document/d/1wHqr2cob78VfUKhOFEKjaUM_mnV4gL-mg3gSQCFhF7Y/edit", "type": 301 }, + { "source": "/go/flutter-drop-win7-2024", "destination": "https://docs.google.com/document/d/18gfRT8klo0zEvn6fIpders7ghoWIBKO22cNYS22WLhc/edit?resourcekey=0-SFkxdqfyM6KNNkG4zS6aaA", "type": 301 }, + { "source": "/go/flutter-android-emulator-testing", "destination": "https://docs.google.com/document/d/10wYUcLcSTF4Epg2EUGoBqOkkOe4zxKHvYKjXFZAOgGs/edit?usp=sharing&resourcekey=0-pltjPvEtVezXDADMbUwFHQ", "type": 301 }, + { "source": "/go/flutter-engine-clocks", "destination": "https://docs.google.com/document/d/1Sx8QA1qXgJGw5r4ESviDnU2LSShNHiq_LjbRWPgSvXQ/edit?usp=sharing&resourcekey=0-BoBvLxgqf_nc_rwLc0zmTw", "type": 301 }, + { "source": "/go/flutter-engine-extensions", "destination": "https://docs.google.com/document/d/1xG7jR4FserdW7TdwnklF3_lXUGmt4myPQjDGF3LFtCQ/edit?resourcekey=0-Iug4D2mWuyQI6suvC_2itw#", "type": 301 }, + { "source": "/go/flutter-for-embedded-linux", "destination": "https://docs.google.com/document/d/1n4NXCk0QlGz16gUCtywR79H0Z1fzPqB2iNL8oxuexuk/edit?usp=sharing", "type": 301 }, + { "source": "/go/flutter-gradle-plugin-apply", "destination": "/release/breaking-changes/flutter-gradle-plugin-apply", "type": 301 }, + { "source": "/go/flutter-iap-migrate-pblv2", "destination": "https://docs.google.com/document/d/1XM16UsLE_aPWoZnheE9waO06mhxLkkWjpPf9jtI1AdY/edit", "type": 301 }, + { "source": "/go/flutter-ios-system-font", "destination": "https://docs.google.com/document/d/1FG9ONkG-sLuFkb9vUAL2i7oeUtUqm8qiQJe_poK754w/edit", "type": 301 }, + { "source": "/go/flutter-lints", "destination": "https://docs.google.com/document/d/1b0X0HOzvFY3WxI363U8BXx6Am13qFm96KlbS72mmFAk/edit", "type": 301 }, + { "source": "/go/flutter-migrate", "destination": "https://docs.google.com/document/d/1fPnpUI6gXE9PkNWuFoAW20m_sQ87ZSC1rrn_D7fxBvs", "type": 301 }, + { "source": "/go/flutter-nonhost", "destination": "https://docs.google.com/document/d/1rTLxAxsshEir-B2vE6DU_MaqMMusOdCgLGEGpBYG3CM", "type": 301 }, + { "source": "/go/flutter-pigeon-native-wrapper", "destination": "https://docs.google.com/document/d/1Sw6F8GbNiO_lvS2fFjXrRYk2Go5RNDHudDT6kIX6Sm0/edit?usp=sharing", "type": 301 }, + { "source": "/go/flutter-platform-idling", "destination": "https://docs.google.com/document/d/1RhSluOcHED6wEckY8CGK1mowRcWGAEGWraN6REPaORs/edit", "type": 301 }, + { "source": "/go/flutter-platform-views-windows", "destination": "https://docs.google.com/document/d/10nVF2f-QTQ5o2HMEZ1fUlBJzK4dEmhuPHTVFEgW-JRs/edit?usp=sharing&resourcekey=0-J-Lsp7xfA-Nr5EMr1av-Xg", "type": 301 }, + { "source": "/go/flutter-plugin-languages", "destination": "https://docs.google.com/document/d/1Ok_mUPgmw8_l-ynLueEKtXm2Fs48lEVB0JqZd7M7uyA/edit", "type": 301 }, + { "source": "/go/flutter-plugins-repo-migration", "destination": "https://docs.google.com/document/d/1VihAgx1e-X_H8VRc9WmUv_7qqsi81eeHrrhwhHgwtjQ/edit?usp=sharing", "type": 301 }, + { "source": "/go/flutter-skia-ios-font-problem", "destination": "https://docs.google.com/document/d/1UkAhEKUEWNUjfKlqoBjJnx8zXrqErIqidPYjd9FBwsg", "type": 301 }, + { "source": "/go/flutter-support-multi-architecture", "destination": "https://docs.google.com/document/d/19tzWySgtgtTA99XQsjx5Pg0SFJeZKXyUlYavR0EXv8c/edit?usp=sharing", "type": 301 }, + { "source": "/go/flutter-test-runner-simplification", "destination": "https://docs.google.com/document/d/1BBjSAQRJYC3OxgpPq6MxEiO8Dp5qGYaxYYenF17mS1I/edit?usp=sharing", "type": 301 }, + { "source": "/go/flutter-tool-extension-api", "destination": "https://docs.google.com/document/d/12iXm23TP6e6qS1Ntx-i-azcBWByiUl_kWjRxRC2YTz8/edit?usp=sharing&resourcekey=0-pVl2giJzGAHqOYEaZagVow", "type": 301 }, + { "source": "/go/flutter-web-scenelets", "destination": "https://docs.google.com/document/d/1GUAx3aqdtEoaBMTNpsS1-i59QZlwTi6vUCASbaanPCo", "type": 301 }, + { "source": "/go/focus-management", "destination": "https://docs.google.com/document/d/1-NS3NJFd2j9kzKj5GOPoWq-G0B6jrpiCL892EX5Nxgk/edit", "type": 301 }, + { "source": "/go/forge2d-workshop", "destination": "https://codelabs.developers.google.com/codelabs/flutter-flame-forge2d#0", "type": 301 }, + { "source": "/go/form-field-autovalidation", "destination": "https://docs.google.com/document/d/16HAURcOtYAoHntDOEtdGy9KkKSItulG9Ldyjzdaosqo/edit", "type": 301 }, + { "source": "/go/fragment-program-support", "destination": "https://docs.google.com/document/d/1R0qx3znTe_wcKZoeWwkMlgxs1MtrdiPJ_1xiuExZuH0/edit", "type": 301 }, + { "source": "/go/games-revenue", "destination": "https://services.google.com/fh/files/blogs/gaming_ux_and_revenue_optimizations.pdf", "type": 301 }, + { "source": "/go/generated-plugin-registration", "destination": "https://docs.google.com/document/d/17-GIBYMgaoYS_G34w-fL9oe8W_GX70v6X2bhfKSBrdo/edit", "type": 301 }, + { "source": "/go/generating-flutter-localizations", "destination": "https://docs.google.com/document/d/18saQREDwBMPA_svFe9IkU22ljNXsLpYxiy__jzPCzEc/edit", "type": 301 }, + { "source": "/go/global-selection", "destination": "https://docs.google.com/document/d/1q_ns8VVTS2vaKqGwr_hheZpsoli52wAM0QWi9_uBdnk", "type": 301 }, + { "source": "/go/global-surface-pool-for-macos", "destination": "https://docs.google.com/document/d/1YUDyCQ1ocdFICOdWeZuuoOm_8bmmxWr0CnC-Y-qXuNI/edit?usp=sharing", "type": 301 }, + { "source": "/go/globalkey-duplication-refactoring", "destination": "https://docs.google.com/document/d/15U1XDLrP-SXfgeu5DBBsA7MQuFpDUW005Y2ObwmYWIc/", "type": 301 }, + { "source": "/go/gn-ninja-engine-artifacts", "destination": "https://docs.google.com/document/d/10C0yexPKlx4CdlF-fO4efGhQXEvDH92-RiAhBTj5EF8/", "type": 301 }, + { "source": "/go/golden-workflow", "destination": "https://docs.google.com/document/d/1MuIUz9pyE_bBZPbtMCj3pYgkdgG4s4Egh6FMknTngKw", "type": 301 }, + { "source": "/go/google-apis", "destination": "/data-and-backend/google-apis?utm_source=go-link&utm_medium=referral&utm_campaign=go-google-apis", "type": 301 }, + { "source": "/go/google-testing-v2", "destination": "https://docs.google.com/document/d/1Sg_CsGa3VxMNOXFKvoXEPNneD6OUuXIUsmFEjhluhDw", "type": 301 }, + { "source": "/go/go-router-improvements", "destination": "https://docs.google.com/document/d/1_mRXinbL_rb0mUt6DAFZ8kj0kh33ZjEMJuUq4PJgwj8/edit?usp=sharing&resourcekey=0-sYbRzE9opneOFZ5F8J3gGw", "type": 301 }, + { "source": "/go/go-router-redirect", "destination": "https://docs.google.com/document/d/1L940WGrM1YJ8BkJEpNd67fUqoqC6OsTfch4eH86E0xU/edit?usp=sharing&resourcekey=0-9oxsWU1tLpAACTUXyNjpkA", "type": 301 }, + { "source": "/go/go-router-support-imperative-routing", "destination": "https://docs.google.com/document/d/1HCgLi7ialw2Eqv-f_2z9ogdOfcmepIIqCsRhF-DT9dM/edit?usp=sharing", "type": 301 }, + { "source": "/go/go-router-v2-5-breaking-changes", "destination": "https://docs.google.com/document/d/1MoEM3C6sDvMUuZYCxlYoMI2QJlkONu8i9G53uy5xk-M/edit", "type": 301 }, + { "source": "/go/go-router-v2-breaking-changes", "destination": "https://docs.google.com/document/d/12iXx214phOag-XCetaGbSzziXGaHX82V-wMi_-8W04M/edit", "type": 301 }, + { "source": "/go/go-router-v3-breaking-changes", "destination": "https://docs.google.com/document/d/1TZ8G_TZ6Dqcpz64qXxArGhtHKFECDEPZFEuxYwQjJz4/edit#", "type": 301 }, + { "source": "/go/go-router-v4-breaking-changes", "destination": "https://docs.google.com/document/d/1T2LmzMj5HpD7hEexXL4Xz6vqoJD81bEGaa9NsV24faw/edit?usp=sharing&resourcekey=0-PuQbtDVl7ZabpJ2B9AHWUg", "type": 301 }, + { "source": "/go/go-router-v5-breaking-changes", "destination": "https://docs.google.com/document/d/10l22o4ml4Ss83UyzqUC8_xYOv_QjZEi80lJDNE4q7wM/edit?pli=1&resourcekey=0-U-BXBQzNfkk4v241Ow-vZg", "type": 301 }, + { "source": "/go/go-router-v5-1-2-breaking-changes", "destination": "https://docs.google.com/document/d/1HMUZA-lgeGFZ5JyU4g5jOFhbYAbk9ysfz9Ok1tGvqRw/edit?resourcekey=0-7otvjyBeefkQ9xQP9S2-9w#", "type": 301 }, + { "source": "/go/go-router-v6-breaking-changes", "destination": "https://docs.google.com/document/d/1CMJwd5Moq_scvHf-trRldy9RW5MU7_Y8IB1aTrny-6s/edit", "type": 301 }, + { "source": "/go/go-router-v7-breaking-changes", "destination": "https://docs.google.com/document/d/10Xbpifbs4E-zh6YE5akIO8raJq_m3FIXs6nUGdOspOg/edit?usp=sharing", "type": 301 }, + { "source": "/go/go-router-v8-breaking-changes", "destination": "https://docs.google.com/document/d/1VCuB85D5kYxPR3qYOjVmw8boAGKb7k62heFyfFHTOvw/edit?usp=sharing", "type": 301 }, + { "source": "/go/go-router-v9-breaking-changes", "destination": "https://docs.google.com/document/d/16plvWc9ablQsUs7w6bWDpTZ7PwMP4YUhV-qMQ3iljE0/edit?usp=sharing", "type": 301 }, + { "source": "/go/go-router-v10-breaking-changes", "destination": "https://docs.google.com/document/d/1vjupshmFJtfGSOppZxp7Tzkq7dotcLxCcpdluuNYe1o/edit?usp=sharing&resourcekey=0-aS66t4OcDTjJW50s-veSzQ", "type": 301 }, + { "source": "/go/go-router-v11-breaking-changes", "destination": "https://docs.google.com/document/d/1L2LPM_DBqKQx1pTRRfG7pi33P88iAypBju65rcMW_dU/edit?usp=sharing", "type": 301 }, + { "source": "/go/go-router-v12-breaking-changes", "destination": "https://docs.google.com/document/d/1KIf_08oHZ18BU0JpNG9dxWP7g4cH0xmF8m7Wmgq80Zk/edit?usp=sharing&resourcekey=0-twH8Zo2kaaIC-vlvVag4yw", "type": 301 }, + { "source": "/go/go-router-v13-breaking-changes", "destination": "https://docs.google.com/document/d/1FRdW_p29zH0I3KEMQKW_QMMN7owiQ5Wx-PUhhZpehSg/edit?usp=sharing", "type": 301 }, + { "source": "/go/go-router-v14-breaking-changes", "destination": "https://docs.google.com/document/d/1Z6RYo7rGIdtryvQvAntekF53zoz4iy4XvIamBxRWa4Y/edit?usp=sharing&resourcekey=0-CH_yB7ur4gLvSuqPtB5bZA", "type": 301 }, + { "source": "/go/handling-synchronous-keyboard-events", "destination": "https://docs.google.com/document/d/1rWXSjkb2ZKv-cpg26lVK0aZi4cVeXJ8j7YmSJdq2TOM/edit", "type": 301 }, + { "source": "/go/hermetic-xcode-installation", "destination": "https://docs.google.com/document/d/1EcXm4Woq48GR_ky07mEJka6NfV1vFBN2OHDEeGfPk34/edit?resourcekey=0-0Gjtt1I66mGJ8AwiCTlFNw", "type": 301 }, + { "source": "/go/hero-refactor", "destination": "https://docs.google.com/document/d/1JZVqykFjhDXcJyj_Ep5gfTmF-Eu4pQXXNRcLCN04tls/edit?usp=sharing", "type": 301 }, + { "source": "/go/hero-use-cases", "destination": "https://docs.google.com/document/d/1xCxKy_KtYK1dsqycsZyV3fOMJCxjZMPx87M-MoK-Tmc/edit?usp=sharing&resourcekey=0-kJYMNVh31SmrjEZ_xuZRPA", "type": 301 }, + { "source": "/go/hot-ui-early-prototype-demos", "destination": "https://docs.google.com/document/d/1ZaHqKnON8-WEhke3Y6FpHeuB5BNlxDQj1cCYB1SoI_g", "type": 301 }, + { "source": "/go/i18n-user-guide", "destination": "https://docs.google.com/document/d/10e0saTfAv32OZLRmONy866vnaw0I2jwL8zukykpgWBc/edit", "type": 301 }, + { "source": "/go/icu-message-parser", "destination": "https://docs.google.com/document/d/1wj5rBbuz1bXM1lvt0s0d35F5JRtIPmYUs1UDk1G3HLc/edit?usp=sharing", "type": 301 }, + { "source": "/go/idle-gc-metrics", "destination": "https://docs.google.com/document/d/1QjLTDr2cTsmS3DGIWdw9WSgqBMKJkFXD7Q8acziGIIA/edit?usp=sharing", "type": 301 }, + { "source": "/go/image-decoding-registry", "destination": "https://docs.google.com/document/d/167qWrlaSAmJm5muqQ-iiJKZy6Q7ZlugIeXmraXava5Y/edit?resourcekey=0-mVrr_zBiSI2Qmd6vqae7Bw", "type": 301 }, + { "source": "/go/impeller-dart", "destination": "https://docs.google.com/document/d/1Sh1BAC5c_kkuMVreo7ymBzPoMzb7lamZRPsI7GBXv5M/edit?resourcekey=0-5w8u2V-LS41tCHeoE8bDTQ", "type": 301 }, + { "source": "/go/impeller-geometry", "destination": "https://docs.google.com/document/d/1t-dzzi04nCdkIReoJp8ZyGNskqIip1TG3WhGEz7Osd8/edit?usp=sharing", "type": 301 }, + { "source": "/go/infinite-scroll", "destination": "https://docs.google.com/document/d/1TV2oF2iLIZtGd48336korxMTQrGizDAASAeZAeteMSc/edit?usp=sharing", "type": 301 }, + { "source": "/go/inheritedwidget-subscription", "destination": "https://docs.google.com/document/d/14BhIyj52NFYuyrWXe8bHJTZp7I67iKNmtOQXHCNH5GQ/edit?usp=sharing", "type": 301 }, + { "source": "/go/inheritedwidget-workshop", "destination": "https://dartpad.dev/workshops.html?webserver=https://dartpad-workshops-io2021.web.app/inherited_widget", "type": 301 }, + { "source": "/go/input-field-autofill", "destination": "https://docs.google.com/document/d/1wYLsoc7NiHl2jFueB4Ros09E3nDCotdWVovDCFSMcAk/edit", "type": 301 }, + { "source": "/go/introduce-disposable", "destination": "https://docs.google.com/document/d/1cjylBOczGk70x-sn1iZYVNAfpPZdtGWsm_KzoNQX0jc/edit", "type": 301 }, + { "source": "/go/io22concurrency", "destination": "https://github.com/goderbauer/io22concurrency", "type": 301 }, + { "source": "/go/ios16-video-player-blank-screen", "destination": "https://docs.google.com/document/d/1zelzxGf6kUEvtF6hbFRExs5UOz8ODtUCa7ogiouxbpo/edit", "type": 301 }, + { "source": "/go/ios-17-text-input", "destination": "https://docs.google.com/document/d/1sM3HMv-SQin39yX1aPUU7vtGv7Hcef1Quc3QhRXBl6A/edit?resourcekey=0-SFYD8vmOIkXiXCZvB1Wlcw", "type": 301 }, + { "source": "/go/ios-autocorrection-highlight-support", "destination": "https://docs.google.com/document/d/18ZO7ThKu2wwCofGOKZSInPsq93IzkQTRn9eiyskeh7I/edit", "type": 301 }, + { "source": "/go/ios-camera-plugin-thread-model", "destination": "https://docs.google.com/document/d/1Znjp-BduXIb1Ix3JOE1YKyJi1Z0d6rB-2q6Lt7j8xSo/edit", "type": 301 }, + { "source": "/go/ios-storekit2", "destination": "https://docs.google.com/document/d/1YBlb6J6rjgdtfnHYrQLJ4i_FLpboh41UnFoEF8TfyE0/edit?usp=sharing&resourcekey=0-3-p9q6ludxmTw6u3uMehgA", "type": 301 }, + { "source": "/go/ios-keyboard-calculating-inset", "destination": "https://docs.google.com/document/d/1pb1oqTanWSxwM8nAdm_-_ero3P6MM05vR1JjcdeFkiM/edit?usp=sharing&resourcekey=0-syHrzFB8A4zywVaHBicZNg", "type": 301 }, + { "source": "/go/ios-platformview-backdrop-filter-blur", "destination": "https://docs.google.com/document/d/1V7Jc_RGaknrBBPPBBKB8lT7f3PKhYr8sin35MSMFAf4/edit?usp=sharing", "type": 301 }, + { "source": "/go/ios-platform-view-focus", "destination": "https://docs.google.com/document/d/1GG8VfYeuVtTQHiMWQXbrSG5HEUorzqU8IGbNySVJ-bY", "type": 301 }, + { "source": "/go/ios-plugins-swift-migration", "destination": "https://docs.google.com/document/d/1XsaulkJA6_ZSpM7chkQLhQY25sQqhEMiqHMYzw8H85o/edit?resourcekey=0-_cUjF1c0iBvRLKfV-3gK5A", "type": 301 }, + { "source": "/go/ios-platform-view-engine-overview", "destination": "https://docs.google.com/document/d/1G6RNt_5y20g2SfI_V25c02PAXHGH9PgfGnk5dOmBdVI/", "type": 301 }, + { "source": "/go/ios-platform-view-hittest-blocking", "destination": "https://docs.google.com/document/d/1jVBK6fqLdN7qA8jGM8PryQeUYMYBNvP-808w4K6KBGw/edit?usp=sharing&resourcekey=0-D8jiTjjIZjFSiA20osvrHw", "type": 301 }, + { "source": "/go/ios-pull-to-refresh", "destination": "https://docs.google.com/document/d/1oUgNd3fsJ1QVuEmA6ENBT8vq3o6QKCRUPGCB6q91VgI/edit", "type": 301 }, + { "source": "/go/ios-secure-paste", "destination": "https://docs.google.com/document/d/16-8kn58h_oD902e7vPSh6W20aHRBJKyNOdSe5rbAe_g/edit?resourcekey=0-gVdJ3fbOybV70ZKeHU7fkQ", "type": 301 }, + { "source": "/go/ios-scribble", "destination": "https://docs.google.com/document/d/1mjQbsSRQnHuAgMNdouaSgTS-Xv-w57fdKfOUUafWpRo", "type": 301 }, + { "source": "/go/ios-spell-check", "destination": "https://docs.google.com/document/d/10Lvkz802QpzAGFi3Q9WVTMVUV-SPJyG3_xs8XfxG59Q/edit?usp=sharing", "type": 301 }, + { "source": "/go/ios-switch-controll-scrolling", "destination": "https://docs.google.com/document/d/1CZ2CRXihPQ1hBUXWODpyPVJ_2Yc0es6tkXrJSnpDajA", "type": 301 }, + { "source": "/go/ios-wireless-device-discovery", "destination": "https://docs.google.com/document/d/1AY4zhW9C3Q9Ml_YfjM00um1mwQxXblLU6lHrteBdiF4/edit?usp=sharing&resourcekey=0-LOZQ6YinTH1xuDd19vcpOw", "type": 301 }, + { "source": "/go/issue-priority-standards", "destination": "https://docs.google.com/document/d/1x-BpbFHUKndv2ojd6LmS-At-pxd6SrIbgfYUepjP7D4/", "type": 301 }, + { "source": "/go/issue-triage-changes", "destination": "https://docs.google.com/document/d/1KJVPMxzfFaL_gIB6Z3oNRTBKA-NP25YpM8xi3xUKbBY", "type": 301 }, + { "source": "/go/job", "destination": "https://forms.gle/omPUhztq27KnH1LG8", "type": 301 }, + { "source": "/go/key-based-mouse-tracker-annotation", "destination": "https://docs.google.com/document/d/18DCRSX4-KjJIrnru_Cv9cJjzQmUWM95r8n6uvbS45-E/edit", "type": 301 }, + { "source": "/go/layout-builder-optimization", "destination": "https://docs.google.com/document/d/1H8Z48vZAemV0Kw0It65JMoGhqVlDLQErkKZN8-r9pdU", "type": 301 }, + { "source": "/go/leak-tracker-high-level-design", "destination": "https://docs.google.com/document/d/158JfU9JKRqfhRPF5C0ceTuOAIWPber_MYftRiuTzlVE/edit?resourcekey=0-SFa6mZ69muVqA5eXi30wIQ", "type": 301 }, + { "source": "/go/legacy-material", "destination": "https://docs.google.com/document/d/1REsg982YG2MlspsMOiNLpu8OIWkyehRRQUXHMU3tAAM/edit?usp=sharing", "type": 301 }, + { "source": "/go/lifecycle-debug-flag", "destination": "https://docs.google.com/document/d/1WowGJhAMzYvwoyYLOzwjj1Jb0lwIjUpNfqvKjFWQZIM/edit", "type": 301 }, + { "source": "/go/link-widget-2", "destination": "https://docs.google.com/document/d/1-BJ4Rp6-glA9S__o97xDiNdd_lbuj7y6e394VE-5y4U", "type": 301 }, + { "source": "/go/link-widget", "destination": "https://docs.google.com/document/d/1HMadUQ2g7BRoCYmUvUYPAALU520fFv9PoPDkoz0wjAc", "type": 301 }, + { "source": "/go/lints-migration", "destination": "/release/breaking-changes/flutter-lints-package", "type": 301 }, + { "source": "/go/localizing-datetime", "destination": "https://docs.google.com/document/d/1QR3qLXWdroTVLbnAQ8mq-Ia6tsZ8NY3lmi7gySQAstU/edit", "type": 301 }, + { "source": "/go/mac-voiceover-text-editing", "destination": "https://docs.google.com/document/d/19YP1o4Shba6NzQTBH_EWC8y1GUhKAbo9dan4digFbZs", "type": 301 }, + { "source": "/go/macros-for-leak-tracker", "destination": "https://docs.google.com/document/d/1ireWmX4J5Jc6oDO1PmAXPlLdiAlCHvTz8SVC_Sg9KM8/edit?usp=sharing&resourcekey=0-yODb_SAStMgMefYpQeX8uQ", "type": 301 }, + { "source": "/go/make-dropdownmenuitem-value-param-required", "destination": "https://docs.google.com/document/d/1x5jsgnLxI3wSDwXRzO0n5hdXKn2a_XTJcsXdjFZLX44/edit", "type": 301 }, + { "source": "/go/match-xcode-deployment-range", "destination": "https://docs.google.com/document/d/1Y1WpbQPMOL3GvL8ow_OTD_-ENG3uuhS46CGRhLt12I8/edit?usp=sharing", "type": 301 }, + { "source": "/go/material-banner-updates", "destination": "https://docs.google.com/document/d/12Jet1gW2B_QFxig5B4K7f_lrpGhkbjR3LYpsKd4ZtJs/edit?usp=sharing&resourcekey=0-CfFoZ-0oqWPtz2WH0Jj0aw", "type": 301 }, + { "source": "/go/material-button-migration-guide", "destination": "https://docs.google.com/document/d/1yohSuYrvyya5V1hB6j9pJskavCdVq9sVeTqSoEPsWH0", "type": 301 }, + { "source": "/go/material-button-system-updates", "destination": "https://docs.google.com/document/d/10Fbn59hiHkppqJ6y_1Rjwl7klN-OvJXQU3SFEqicpME/edit", "type": 301 }, + { "source": "/go/material-date-picker-redesign", "destination": "https://docs.google.com/document/d/1AGKjBvO7EL2PuJGcwaa2PoCusjtTAvpYO7i_3A2vVpc/edit", "type": 301 }, + { "source": "/go/material-symbols", "destination": "https://docs.google.com/document/d/1UHRKDl8-lzl_hW_K2AHnpMwvdPo0vGPbDI7mqACWXJY/edit?usp=sharing", "type": 301 }, + { "source": "/go/material-theme-system-updates", "destination": "https://docs.google.com/document/d/1kzIOQN4QYfVsc5lMZgy_A-FWGXBAJBMySGqZqsJytcE/edit", "type": 301 }, + { "source": "/go/max-length-enforcement", "destination": "https://docs.google.com/document/d/1S900lQaTPOsePnIeE7o3-Ia8f39VZaSv0JnjNyBfCvU", "type": 301 }, + { "source": "/go/medium-sized-code-samples", "destination": "https://docs.google.com/document/d/1-jjYru2ljRSRSY4hn4qwLj9oQj8UiqrDOgY10-FE2tY/edit?usp=sharing", "type": 301 }, + { "source": "/go/migrate-flutter-wiki", "destination": "https://docs.google.com/document/d/1naONKJd-eqPj8zEVfHfjGa5TCZNyJErBY4ca1gjSCq4/edit?usp=sharing", "type": 301 }, + { "source": "/go/migrate-flutter-wiki-spreadsheet", "destination": "https://docs.google.com/spreadsheets/d/1x65189ZBdNiLRygpUYoU08pwvXD4M-Z157c6pm8deGI/edit?usp=sharing", "type": 301 }, + { "source": "/go/migrating-to-vertical-alignment", "destination": "https://docs.google.com/document/d/1vi6d6On6EXN82Q8KmXSLbWNnsnm9YjWtTWhSyjPF59Q/edit?usp=sharing", "type": 301 }, + { "source": "/go/mixin-modifier", "destination": "https://docs.google.com/document/d/1la2S1uJrNAawc1yja8hrSxFZJ0cFHnYopmaBYDLwMjg/edit?usp=sharing&resourcekey=0-br1LWMlYC63Q30VGiPtAHg", "type": 301 }, + { "source": "/go/mouse-tracker-no-longer-attaches-annotations", "destination": "https://docs.google.com/document/d/1YuOcepqZjNknAMz1si2m-jAiLT4MP28XEzBcKLHnNiA/edit", "type": 301 }, + { "source": "/go/move-mouse-tracker-to-rendering", "destination": "https://docs.google.com/document/d/1dYNOTZ4kdq6ndNHopjUlrGlGBw3W-3jMbnoNJouIYtE/edit", "type": 301 }, + { "source": "/go/multiple-applications", "destination": "https://docs.google.com/document/d/1alrr7qimNDazmQx5D80BSHh62V2OINO4UQ5N3HcPnmo/edit?resourcekey=0-wPs1Go9AiKR-yG0-xStuKw", "type": 301 }, + { "source": "/go/multiple-engines", "destination": "https://docs.google.com/document/d/1NwiZPWHd1te46eP2GWwIezDV9CdMQkODAMuF5kWdtLw", "type": 301 }, + { "source": "/go/multiple-flutters", "destination": "https://docs.google.com/document/d/1fdKRufqUzQvERcqNIUSq-GdabXc4k8VIsClzRElJ6KY", "type": 301 }, + { "source": "/go/multiple-views", "destination": "https://docs.google.com/document/d/1Z7Qrb08dOnfB8IxPgsyujVn4MsDcYPUUku9CeF70_S0/edit?usp=sharing", "type": 301 }, + { "source": "/go/multi-view-embedder-apis", "destination": "https://docs.google.com/document/d/1kegGJ235y1778-vzyyv90MgSHmYQcROTupMuLtEDBq0/edit?usp=sharing", "type": 301 }, + { "source": "/go/multi-view-pipeline-and-rasterizer", "destination": "https://docs.google.com/document/d/1xoD02qOxt2OSe3eN1ARsBUUWNFawdrxC2JXUURx7218/edit?usp=sharing", "type": 301 }, + { "source": "/go/multi-view-sync-embedder-apis", "destination": "https://docs.google.com/document/d/14z-e-x6M3P53ZMD6qBh4UaJ3nJdG_VdMNqGKERv31hw/edit?usp=sharing", "type": 301 }, + { "source": "/go/multi-view-sync-over-async", "destination": "https://docs.google.com/document/d/14z-e-x6M3P53ZMD6qBh4UaJ3nJdG_VdMNqGKERv31hw/edit?usp=sharing", "type": 301 }, + { "source": "/go/multi-window-single-isolate", "destination": "https://docs.google.com/document/d/1Wdqs79TY3b1VkOZMDmt12psg5AhO-q9k5-Uv28Snr8M/edit?resourcekey=0-qvOf6jo8bR9W4ozLrbLMcQ", "type": 301 }, + { "source": "/go/multi-window-status", "destination": "https://docs.google.com/document/d/13E27tD8_9f6lDgwg3MpGNTV8XIRCZH3ByI-t9kI9IUM/edit?usp=sharing", "type": 301 }, + { "source": "/go/navigator-with-router", "destination": "https://docs.google.com/document/d/1Q0jx0l4-xymph9O6zLaOY4d_f7YFpNWX_eGbzYxr9wY/edit", "type": 301 }, + { "source": "/go/nshc", "destination": "https://docs.google.com/document/d/1uwHQ3ZEGN2cH6bFwa3CCXTTXCeDfOWw-kUa_B6oTMuA/edit", "type": 301 }, + { "source": "/go/null-safety-workshop", "destination": "https://dartpad.dev/workshops.html?webserver=https://dartpad-workshops-io2021.web.app/null_safety_workshop", "type": 301 }, + { "source": "/go/nullable-cupertinothemedata-brightness", "destination": "https://docs.google.com/document/d/1qivq0CdkWGst5LU5iTLFUe_LTfLY84679-NxWiDgJXg/edit", "type": 301 }, + { "source": "/go/ondirtycallbacks", "destination": "https://docs.google.com/document/d/1Vk_QWC92fFGxx2oIrIjkCL0ZZFHxmrprlLedyQsnkus/edit?usp=sharing", "type": 301 }, + { "source": "/go/opengl-on-ios", "destination":"https://docs.google.com/document/d/1kvrb6HeTRN4noAKO82o6x-Ii61PW-BQ-8s9YNtLgosM", "type": 301 }, + { "source": "/go/optimized-platform-view-layers", "destination": "https://docs.google.com/document/d/1YHwVz7-F03psEzHxByGka_lIFaDV5K90BJMbNxQeK4k/edit?resourcekey=0-n4_VcUnMU-99sjJ6C1_Ycw#", "type": 301 }, + { "source": "/go/os-adaptive-shortcut-activator", "destination": "https://docs.google.com/document/d/11NWj13MSDw1XQg4MpYIeqzcCFGuzQ_Cz7tYXW7fqzPY/edit?usp=sharing", "type": 301 }, + { "source": "/go/outline-input-border-padding-fix", "destination": "https://docs.google.com/document/d/1QBM5oM9qPWVeFSPSqpXOFbdXV9dH9A9ABKsNMs1J2XU/edit?usp=sharing", "type": 301 }, + { "source": "/go/overridable-text-actions", "destination": "https://docs.google.com/document/d/11vmEZTjB4_E4el1IjTo2VBI2d_fR7tjQWeCajsQc-q4/edit?usp=sharing", "type": 301 }, + { "source": "/go/performance-best-practices", "destination": "https://docs.google.com/document/d/16bd3HtkuvzAk0uizDGTT3aNtjI8Mfr0f6C3ZVrYYqvI", "type": 301 }, + { "source": "/go/performance-android-orientation-changes", "destination": "https://docs.google.com/document/d/1L7NMG8YfWXoAuCFPv9oX11M1FEWXKbyaWc03mOmXJGc/edit?usp=sharing", "type": 301 }, + { "source": "/go/permissible-slider-interaction", "destination": "https://docs.google.com/document/d/151iaqbK-rZSRI34NdkvfIk4RkzOpAevoJ87TwiXfTpM/edit?usp=sharing&resourcekey=0-o0Gx6nrgl-fpw7_zUdMaQA", "type": 301 }, + { "source": "/go/picture-lifecycle", "destination": "https://docs.google.com/document/d/1aTBj38k6NSVsYRwySEBItlqxdQbjzurjmHsXAr3yGiI/edit?usp=sharing&resourcekey=0-TbKDu4BVInqphkzAlasBnw", "type": 301 }, + { "source": "/go/platform-api-breakages", "destination": "https://docs.google.com/document/d/1OxDsf_eot7TlsRn57z-1_dGbvuqnMxO7QEGIAmOCZtA/edit?usp=sharing", "type": 301 }, + { "source": "/go/platform-based-key-events", "destination": "https://docs.google.com/document/d/1FDuxxEh810XpY561SgeiyUR0gU2eVz5kRpCFI55ibec/edit", "type": 301 }, + { "source": "/go/platform-channels-in-federated-plugins", "destination": "https://docs.google.com/document/d/1BSrDA_FjLU-3T0H774RocJ4IYyc0ytMl937rAimGJdg/edit?usp=sharing", "type": 301 }, + { "source": "/go/platform-interface-breaking-changes", "destination": "https://docs.google.com/document/d/1LD7QjmzJZLCopUrFAAE98wOUQpjmguyGTN2wd_89Srs/edit#heading=h.xabf9lffxrkb", "type": 301 }, + { "source": "/go/platinum-tests", "destination": "https://docs.google.com/document/d/1yqGEMsLp6dstSlq56E2BqNP2PinKB9Z7WXC3pGjcD7Y/edit?usp=sharing", "type": 301 }, + { "source": "/go/plugin-binding-review", "destination": "https://docs.google.com/document/d/1-9Si_ocFYh-Wa1qKV4PV2ocywKDYdiR_1yO3twPvrfM", "type": 301 }, + { "source": "/go/plugin-platforms", "destination": "/packages-and-plugins/developing-packages#plugin-platforms", "type": 301 }, + { "source": "/go/plugin-shared-ios-macos", "destination": "https://docs.google.com/document/d/1JdgBrMXV0a6fnVoooILNTQB8dNCvLloT4D4TBkECQ6c/edit?usp=sharing&resourcekey=0-iPL3CzwOjUquabkMiucaHA", "type": 301 }, + { "source": "/go/plugin-support-for-custom-embeddings", "destination": "https://docs.google.com/document/d/1AJTHdC20JhD3viR4JWTghagIztqL5jg_R9NFQmnwAMw/edit?usp=sharing&resourcekey=0-qAECjzHKB5tM47azrVnH1w", "type": 301 }, + { "source": "/go/plugins-list-migration", "destination": "https://docs.google.com/document/d/1itYyHax0bzL3-hRtQd1zRPqJfOrLYih1fW0nPDJDytc/edit", "type": 301 }, + { "source": "/go/plugins-team", "destination": "https://docs.google.com/forms/d/e/1FAIpQLSfpPqJYuL_RzLaTCjrWYw73Zrrei3YiU8B5eTrDBh4fuGhbXw/viewform?usp=sf_link", "type": 301 }, + { "source": "/go/profile-and-release-mode-for-custom-devices", "destination": "https://docs.google.com/document/d/1jcMyJvsWLizYOIJAdyosLSW-Io0-E_MGsU_uL_Q4Wt8/edit?usp=sharing", "type": 301 }, + { "source": "/go/programmatic-sheet", "destination": "https://docs.google.com/document/d/15A3q1QrcvEU82uG4heTCKV230depmaJZTIP5rEz7V8g/edit?usp=sharing&resourcekey=0-q-TH-9-LVmygnp6Ku4xKIg", "type": 301 }, + { "source": "/go/pub-automated-publishing", "destination": "https://docs.google.com/document/d/1LSYVjDdgGNCc7p5Y2_hu8UA_Ms9MgZs3Jm974D1J344", "type": 301 }, + { "source": "/go/pub-workspace", "destination": "https://docs.google.com/document/d/1UEEAGdWIgVf0X7o8WPQCPmL4LSzaGCfJTM0pURoDLfE/edit?usp=sharing&resourcekey=0-c5CMaOoc_pg3ZwJKMAM0og", "type": 301 }, + { "source": "/go/publish-on-homebrew", "destination": "https://docs.google.com/document/d/1dk82qavQxT633LAonAM2xsqirWBmsqoHC4caJvYE584/edit?usp=sharing", "type": 301 }, + { "source": "/go/pull-request-revert-api", "destination": "https://docs.google.com/document/d/1mVVetlCjv9PM5gtg57nipDFd5TvWsd24rXPWS0FzVvE/edit?usp=sharing&resourcekey=0-McwG6wn0s6YQ7qxHffkcdw", "type": 301 }, + { "source": "/go/pull-request-revert-api-v2", "destination": "https://docs.google.com/document/d/1lfPVtrq_6YB-I6bEHEXRPeJCE32EvKxx-nSYmLpJIYI/edit?usp=sharing&resourcekey=0-BZghqoHCZBXuoQ2alTyRiw", "type": 301 }, + { "source": "/go/rasterizer-pipeline-improvements", "destination": "https://docs.google.com/document/d/1Hg5Wfx8JTgYmLboxFRr5DDd9EfdrdEuMbNGGMvDjd6E/edit?usp=sharing", "type": 301 }, + { "source": "/go/reduce-ci-tests", "destination": "https://docs.google.com/document/d/1-HRz-dXoIKjEgbCs9CF2-TO_3wSFK-V4ispXg-IoarY/edit?usp=sharing", "type": 301 }, + { "source": "/go/reference-plugin", "destination": "https://docs.google.com/document/d/1NJFbRMVxVL9YS_FcWi7W08DsBr_eRAJtQI9FQkk9MXk/edit", "type": 301 }, + { "source": "/go/registered-actions", "destination": "https://docs.google.com/document/d/1RrAWQ-rq-XcrjJx4Jegn8NdJKNHfLem6MkAJrI8Q_1w/edit?usp=sharing", "type": 301 }, + { "source": "/go/remove-fab-accent-theme-dependency", "destination": "https://docs.google.com/document/d/1kmXWerkykXXjMfibsc9O105NocBGH3dGW8UL2VH5Q48/edit", "type": 301 }, + { "source": "/go/remove-include-flutter-groovy", "destination": "https://docs.google.com/document/d/1OulURfRSWgJnnFA_cSup4ev7wrJwnZ7Siao_FGbLN9I", "type": 301 }, + { "source": "/go/reorderable-list-view-update", "destination": "https://docs.google.com/document/d/1JzNtMQ-jnPnSHEBoi6IO0x2qMMylwhvRslEDcmqiwSs", "type": 301 }, + { "source": "/go/respecting-tabcontroller-animateto-duration", "destination": "https://docs.google.com/document/d/1wzSzUYstDM-Kg5kwskyXcEUX7QTb-lBOso7Z5ebrCTk/edit", "type": 301 }, + { "source": "/go/restoring-anonymous-routes", "destination": "https://docs.google.com/document/d/1vnjDruoiDz0eEd4eVzg3IS6W_LRaFxNSlKWtU6iXp2M/edit", "type": 301 }, + { "source": "/go/router-api-improvement", "destination": "https://docs.google.com/document/d/1kbUPagtDl30jqYAq-mDMdd-ftHm3q9AMq55ufZCo9lE/edit?usp=sharing&resourcekey=0-JBqYh_UD3h9OSA8NS5OO4g", "type": 301 }, + { "source": "/go/analyze-flutter-in-runtime", "destination": "https://docs.google.com/document/d/1VZOv9NsmNeXaqM9h9EjKTz5cg7lEsA623XBfbojXU5U/edit?usp=sharing", "type": 301 }, + { "source": "/go/rfc-32-bit-ios-support", "destination": "https://docs.google.com/document/d/1Xz8B2w42ZGmrSdvQHo6LVLhiSZBIxnHxZxoZ-8oyRUc/edit", "type": 301 }, + { "source": "/go/rfc-32-bit-ios-unsupported", "destination": "https://docs.google.com/document/d/1cc5EOsuTlbf4dTDTwmkD3aKjS8XEbVCIqi9BFct9XHM/edit?resourcekey=0-Iv0gXDx7nSDCe3YDfxDKqw", "type": 301 }, + { "source": "/go/rfc-android-j-deprecation", "destination": "https://docs.google.com/document/d/1N06Pm1x19AIWorENk6OdmY5T8kMzPJUOZs8aL9VccG4/edit", "type": 301 }, + { "source": "/go/rfc-android-k-deprecation", "destination": "https://docs.google.com/document/d/1gQGvMk2ydxieivDjO8zqM7DdwOBybKVgoUqZUOCuTo0/edit?usp=sharing&resourcekey=0-ew5kIQr2FPVp7qyydtBQeg", "type": 301 }, + { "source": "/go/rfc-ios8-deprecation", "destination": "https://docs.google.com/document/d/1HtzJLUBnvi-VjcG3XEjwVHQGWeOzlrA77ozp9TvCWVE/edit", "type": 301 }, + { "source": "/go/router-and-widgetsapp-integration", "destination": "https://docs.google.com/document/d/1QodTFmwVr1yk8dyQvoqkeILxvm92oikB1bVhHTtp6R4/edit", "type": 301 }, + { "source": "/go/semantics-roles", "destination": "https://docs.google.com/document/d/1VRagJfHEbehVPa023xGUcFTqe5LgYGU2wYBmnNkwVmA/edit?usp=sharing", "type": 301 }, + { "source": "/go/scaffold-messenger", "destination": "https://docs.google.com/document/d/1TCH0T-X42z96lAcSkFttHAQMJ0MsvMojDKa6F4IQI3Y/edit?usp=sharing", "type": 301 }, + { "source": "/go/scalable-flutter-infrastructure", "destination": "https://docs.google.com/document/d/19GEUwAwJbNI-gO9ziV_oDESB28E_Pqppwx8ku9jdEqY", "type": 301 }, + { "source": "/go/scale-selection-handles-ios-rich-text", "destination": "https://docs.google.com/document/d/1XuvdYUzZQAxCLYT2H1DNtOi1s6fGmFE-cgmweaijfe4/edit?usp=sharing", "type": 301 }, + { "source": "/go/scrollable-alert-dialog", "destination": "https://docs.google.com/document/d/1qtVfjoKXE8BtkNbraKk9IzfRcks5btkKcyE4iGVwkbg/edit", "type": 301 }, + { "source": "/go/sdk-per-platform-installers", "destination": "https://docs.google.com/document/d/1VooN2bddQ52Z2B4qYi1Lp20PGhyYDr1AKaXwo9e7PCw", "type": 301 }, + { "source": "/go/sfsymbols", "destination": "https://docs.google.com/document/d/18V4ohqwp7fblJmhy7l9vVEPP1FGG4xXUorByjRHA19s/edit?usp=sharing&resourcekey=0-IVkjSy7jbMZ5FHPH_9yn9A", "type": 301 }, + { "source": "/go/shaders", "destination": "https://docs.google.com/document/d/1z9K5LernwQ0LVAzfbAMW6ITx63QRdRsoax1NLYEfm4Y/edit", "type": 301 }, + { "source": "/go/sharding-mac-ios-builders", "destination": "https://docs.google.com/document/d/1zLafqoFhKRMChUDGnnhzabnmhE2Vl1AWsrJzF8OWAGk/edit?usp=sharing", "type": 301 }, + { "source": "/go/simple-flutter-tool-memory-benchmarks", "destination": "https://docs.google.com/document/d/1vlARGxdABMeZoj4HF0p075-81q7G9gv_GnDYgoF7e3I", "type": 301 }, + { "source": "/go/sixty-fps", "destination": "https://docs.google.com/document/d/1FuNcBvAPghUyjeqQCOYxSt6lGDAQ1YxsNlOvrUx0Gko/edit", "type": 301 }, + { "source": "/go/slider-v2", "destination": "https://docs.google.com/document/d/1NCuRe-TUp8u6-Yzx_wrXZcqAwv5NP8hEJwUYSxVECwU/edit", "type": 301 }, + { "source": "/go/sliver-flex-and-friends", "destination": "https://docs.google.com/document/d/1W4_5oD5z7JHhUjuQYwS_NJRAv27Ih7IazcMm739O5JU/edit", "type": 301 }, + { "source": "/go/sliver-workshop", "destination": "https://dartpad.dev/workshops.html?webserver=https://dartpad-workshops-io2021.web.app/getting_started_with_slivers", "type": 301 }, + { "source": "/go/state-restoration-design", "destination": "https://docs.google.com/document/d/1KIiq5CdqnSXxQXbZIDy2Ukc-JHFyLak1JR8e2cm3eO4/edit", "type": 301 }, + { "source": "/go/stateful-macro", "destination": "https://docs.google.com/document/d/1TMVFn2jXw705px7bUggk8vTvpLrUjxEG9mzb-cSqZuo/edit?usp=sharing&resourcekey=0-0s5mvWGH3OcW8GN-Rmr36A", "type": 301 }, + { "source": "/go/static-tooling-in-devtools", "destination": "https://docs.google.com/document/d/1i6ISzzSKKDiiVftTnkCCvdgXEjK2eqYlPjCOKTjnvx8/edit?resourcekey=0-uyAiZEjFplyibsAkDAqKJw#", "type": 301 }, + { "source": "/go/strategy-2022", "destination": "https://docs.google.com/document/d/e/2PACX-1vTI9X2XHN_IY8wDO4epQSD1CkRT8WDxf2CEExp5Ef4Id206UOMopkYqU73FvAnnYG6NAecNSDo9TaEO/pub", "type": 301 }, + { "source": "/go/strategy-2023", "destination": "https://docs.google.com/document/d/e/2PACX-1vRknZ4Jkc-pWSMsDDyKwMrry7k2BSL_I94JCCQrg8FiHuy4fcypkgIVFbQVKPmzDQHfd20uZf2rFiXP/pub", "type": 301 }, + { "source": "/go/studio-rasterization-context-for-multi-view", "destination": "https://docs.google.com/document/d/1Eqb8xeoRKpLq2OVkJX_ux3azVLGJgJcaY5uSWzqdc_4/edit", "type": 301 }, + { "source": "/go/subpixel-antialiasing", "destination": "https://docs.google.com/document/d/1yEycgo5ivZ_lu2MAnMBLreZvROFdamy9-9q-QvMvL9U/edit?usp=sharing", "type": 301 }, + { "source": "/go/supporting-dart-callbacks", "destination": "https://docs.google.com/document/d/1k7OimxbxXzdv3U7-TfB88yG5hIScN3TH6Jcvdcl4izM/edit", "type": 301 }, + { "source": "/go/swift-package-manager-plugins", "destination": "https://docs.google.com/document/d/10S7anpgWdJ0wNCgsse8MvHY2PShrr9PeuufwYHi5v6U/edit", "type": 301 }, + { "source": "/go/swift-package-manager-plugins-v2", "destination": "https://docs.google.com/document/d/1oUvM5e2a3QrKAk9pTPExPp3my4FD4lYz9Z-EXsUGuHI/edit?usp=sharing&resourcekey=0-Vu8vKukw0Dqqv7pW5aIxKQ", "type": 301 }, + { "source": "/go/synchronized-widgettester", "destination": "https://docs.google.com/document/d/1VumsuG6dEFUVpPQLqqKJnhI0CoIS9fCAMN-NFHIPmo0/edit", "type": 301 }, + { "source": "/go/system-mouse-cursor", "destination": "https://docs.google.com/document/d/1bJLRy6flZ0wDCbpl2QA8SURUWXIvRJKMRRemxlOo1cA/edit", "type": 301 }, + { "source": "/go/table-view", "destination": "https://docs.google.com/document/d/15ecTZE1g3WeswLGFWrnEgMP6SyL6jDRdxOgPsczOcV0/edit?usp=sharing&resourcekey=0-yNd_qFhiPjz6z2TgezWc0A", "type": 301 }, + { "source": "/go/table-view-merged-cells", "destination": "https://docs.google.com/document/d/1UekXjG_VKmWYbsxDEzMqTb7F-6oUr05v998n5IqtVWs/edit?usp=sharing", "type": 301 }, + { "source": "/go/tabs-and-text-fields", "destination": "https://docs.google.com/document/d/1aHucsI0NWGWu2Dm_XFsBLxiTgJRM8h2XBB7PVAnVxlU/edit?usp=sharing&resourcekey=0-zLbXFlP_A2e_Yoi43vdiiw", "type": 301 }, + { "source": "/go/take-flutter-home", "destination": "https://github.com/flutter/put-flutter-to-work", "type": 301 }, + { "source": "/go/table-development", "destination": "https://docs.google.com/document/d/1fCE-zQNql0nnqJXhycpg902lhL7jrOOz-6sT8s8tv5c/edit?usp=sharing", "type": 301 }, + { "source": "/go/template", "destination": "https://docs.google.com/document/d/1SFRO8U2toOlAaZ38dsuEU7Wm5fn41wvBCWKiwADqfmw/edit", "type": 301 }, + { "source": "/go/test-all-platforms", "destination": "https://docs.google.com/document/d/1-gw2zYFs_jBqsFPpXRonRNLYn6XNgvm34jc9HT84VKE/edit?usp=sharing", "type": 301 }, + { "source": "/go/test-widgets-flutter-binding-clock", "destination": "https://docs.google.com/document/d/1EkkLbECNBwHgddBQAZqEy7iQLTIxR1rgChKzxcLwhio/edit", "type": 301 }, + { "source": "/go/testing-code-samples", "destination": "https://docs.google.com/document/d/11JXF-9d0u1jGJ9-gdpMGAZr5YudAiyHhXI_pT2vTpnw/edit?usp=sharing", "type": 301 }, + { "source": "/go/text-editing-actions", "destination": "https://docs.google.com/document/d/1QaVIr1bbOWJGNyyNsB75sXgTDRMuxP268sLGTBNDut0/edit?usp=sharing", "type": 301 }, + { "source": "/go/text-editing-deltas", "destination": "https://docs.google.com/document/d/1PXNd_LwJudiUTnCM2AXRxbd98_p4BlFf6qFhEhv3wvs/edit?usp=sharing", "type": 301 }, + { "source": "/go/text-editing-model", "destination": "https://docs.google.com/document/d/1lkpg4dfVZif9NJ_dDQ01QkwQC3OqzhUFahhjgv_rcbM/edit#", "type": 301 }, + { "source": "/go/text-editing-magnifying-glass", "destination": "https://docs.google.com/document/d/1RWq0Kd_xsHR8j7IXtgc25feV3RV8Hzq2KSQEVaDDXUs/edit?resourcekey=0-qLXzpPdvKRwQM8nlCijclQ", "type": 301 }, + { "source": "/go/text-field-characters", "destination": "https://docs.google.com/document/d/1OOFW0PEZf0orBl445YXJ3nfjyKOqZdmeQ6KU3glUh7s/edit", "type": 301 }, + { "source": "/go/text-selection-menu-appearance", "destination": "https://docs.google.com/document/d/1Or32nViSjym0Sk29HccxEzcEITj2oWdielOaeR5cmiY/edit", "type": 301 }, + { "source": "/go/text-selection-menu-customization", "destination": "https://docs.google.com/document/d/1hyay1TyUZB7DXzWw45-ruGMZM1yCMWEnC3DzOJYemuc/edit", "type": 301 }, + { "source": "/go/text-selection-menu-modernization", "destination": "https://docs.google.com/document/d/1qSEvbgi3m-OvB_dUKch8LHOk-iyPFeLgCsXbK0bI2DA/edit", "type": 301 }, + { "source": "/go/text-selection-programatically", "destination": "https://docs.google.com/document/d/1NK4GJ0Wk5eJ3IUw_9oAtz1oYgZ-Sn-kAKHxTvsgr75o/edit?usp=sharing", "type": 301 }, + { "source": "/go/text-selection-theme", "destination": "https://docs.google.com/document/d/1sCe7Y_lhREljtn6m0Uu_EycbS82zRvWnNtkfEwFX9W0", "type": 301 }, + { "source": "/go/texttheme-m3", "destination": "https://docs.google.com/document/d/1y3K08vL9rMTsGmF_T65fXmWJbsPZohvaVB3T6JuqgjM/edit?resourcekey=0-Gnl-tX58L4yPdV3NgeXFBg", "type": 301 }, + { "source": "/go/theme-extensions", "destination": "https://docs.google.com/document/d/1LbD4JqBgAfHex02oR3r2jyu9lTBBNBmyec2ovT59Kr8/edit?usp=sharing", "type": 301 }, + { "source": "/go/tool-announcements", "destination": "https://docs.google.com/document/d/1Lv9pkmouTPz5BoRJn441tNdVaLvw8pEtZqLUW4u0HLo/edit?resourcekey=0-8TKBpp9OgxmqvJSqLgtyoQ", "type": 301 }, + { "source": "/go/tool-integration-test-support", "destination": "https://docs.google.com/document/d/1jMMZpRAiQC2XTUFnzFsBrWwMsf7KyMuCScYgrJQJOV0/edit?resourcekey=0-ne9HbH1hXCHcIglomNfwtw", "type": 301 }, + { "source": "/go/top-errors-analysis", "destination": "https://docs.google.com/document/d/1ZJ9t_uPeXqZnoDOIVes_Yu2BBxP42l99nSfHQPfswZw/edit?usp=sharing", "type": 301 }, + { "source": "/go/towards-improved-performance-tooling", "destination": "https://docs.google.com/document/d/1wSDNcG0ww2V6JX1EE8avilCwnOiRVy83zSCWt916O0o", "type": 301 }, + { "source": "/go/tracking-material-states", "destination": "https://docs.google.com/document/d/1PJdsOoXhWdhnpYKlW5Nm2Di3Di5XARoYyHerMwWovXE", "type": 301 }, + { "source": "/go/trackpad-gestures", "destination": "https://docs.google.com/document/d/1oRvebwjpsC3KlxN1gOYnEdxtNpQDYpPtUFAkmTUe-K8/edit?usp=sharing&resourcekey=0-pt4_T7uggSTrsq2gWeGsYQ", "type": 301 }, + { "source": "/go/triage-2022-rfp", "destination": "https://docs.google.com/document/d/1Kyrh1WijM04XqtUkVbL2uwDthlG9v3sljgl9HRlU4bU/edit", "type": 301 }, + { "source": "/go/triage-2023-rfc", "destination": "https://docs.google.com/document/d/1RBvsolWL9nUkcEFhPZV4b-tstVUDHfHKzs-uQ3HiX-w/edit", "type": 301 }, + { "source": "/go/try", "destination": "https://github.com/flutter/put-flutter-to-work", "type": 301 }, + { "source": "/go/ui-imitation-games", "destination": "https://docs.google.com/document/d/1SbMjMiFhD2OZGTT3TCAOx6yfG-SYQ5F_fn7wwlZMumM/edit", "type": 301 }, + { "source": "/go/union-typed-transform-stack-in-hit-test", "destination": "https://docs.google.com/document/d/1EsH7g-oyQIDZpRteg94iKJKgD7kVngZWq9ngDe6ORbM/edit?usp=sharing", "type": 301 }, + { "source": "/go/unobstructed-platform-views", "destination": "https://docs.google.com/document/d/1_P3wa_nMqnhKsy-lDlNxT9GThZX2WhfVym4O4M7Q9qs/edit#", "type": 301 }, + { "source": "/go/update-psc", "destination": "https://docs.google.com/document/d/12OQx7h8UQzzAi0Kxh-saDC2dg7h2fghCCzwJ0ysPmZE/edit?usp=sharing&resourcekey=0-ATO-1Er3HO2HITm59I0IdA", "type": 301 }, + { "source": "/go/update-scrollbars", "destination": "https://docs.google.com/document/d/1mRlc-sRyadE6301aZsD1LJkPG2B9K97Bg_GDHvFhMQI/edit?usp=sharing&resourcekey=0-v4Gk8H280RaPo5qClmDqpA", "type": 301 }, + { "source": "/go/update-text-theme-api", "destination": "https://docs.google.com/document/d/1B1s4mm6OYM7mKQ3vZfSTI2HR_KljB78gN6oBHg_zYUs/edit", "type": 301 }, + { "source": "/go/use-dart-style-in-flutter-engine", "destination": "https://docs.google.com/document/d/1E2ZLNasExXMpSYcxWrd5qSp24WmhIPiFq9FjBC5GoVY?resourcekey=0-bmXuMwfoCn8a9QdQiMd3hA", "type": 301 }, + { "source": "/go/variable-refresh-rate", "destination": "https://docs.google.com/document/d/1O-ot6MydAl5pAr_XGnpR-Qq5A5CPDF6edaPu8xQtgCQ/edit?usp=sharing&resourcekey=0-LlXeGtGRC67XL4NrGoc91A", "type": 301 }, + { "source": "/go/vector-graphics", "destination": "https://docs.google.com/document/d/1YWffrlc6ZqRwfIiR1qwp1AOkS9JyA_lEURI8p5PsZlg/edit", "type": 301 }, + { "source": "/go/verbatim-logical-keys-for-non-latin-layout", "destination": "https://docs.google.com/document/d/1ZNgNxito-NVUS1JKlcjdzHUcKyyiupy8Za-jb131dD4/edit?usp=sharing&resourcekey=0-eeEZ5X0jAzuqSTdmPWlv0w", "type": 301 }, + { "source": "/go/web-add-to-app", "destination": "https://docs.google.com/document/d/1rFM0qmYds1JkntTruBh8eO72xbT2KoP9JdbizucAAwQ/edit", "type": 301 }, + { "source": "/go/web-astral-projections", "destination": "https://docs.google.com/document/d/1pvH-J8opXsjntTpFf1bbsbU8N1vFd8tPKvBgcNn8UKQ", "type": 301 }, + { "source": "/go/web-declarative-bootstrap", "destination": "https://docs.google.com/document/d/1jVXxC0tNDW45ypfVESyHipL2lHCX32GmFyJNO0u9c6Y/edit?resourcekey=0-AQ8z_0_U8Vq3JBdyracNuQ", "type": 301 }, + { "source": "/go/web-multiview-js-api", "destination": "https://docs.google.com/document/d/1ixwPBG7YIHEONc15t9SOmrfgDK3gghvkk7it_8AFOmw/edit?resourcekey=0-VQC2nby6Coe5OG-R833yXw", "type": 301 }, + { "source": "/go/web-native-text-editing", "destination": "https://docs.google.com/document/d/1t6qAX46tsR1tdBS42yro6G_5Igtrj7WzmKKiUI_JC-k/edit", "type": 301 }, + { "source": "/go/web-plugins-layout", "destination": "https://docs.google.com/document/d/1PeS-QSAFydHXhjZrqkub-GRPMs83roh8VwhbUScWuGQ", "type": 301 }, + { "source": "/go/web-programmatic-bootstrap", "destination": "https://docs.google.com/document/d/13kVA40gQ3T0FLqmV4w5rNvLHjmU6XWFbb7j0_YV7k9M", "type": 301 }, + { "source": "/go/web-renderer-options", "destination": "https://docs.google.com/document/d/1aY0iU16wf_sdT7nwfpjgT-IatHNfF3slTiYHKmxcIog", "type": 301 }, + { "source": "/go/web-slot-content", "destination": "https://docs.google.com/document/d/1U6aCSuzQsFpOP8_OseL-fwl2-MC2bxJAsgt2R_-sC30", "type": 301 }, + { "source": "/go/webview_flutter_4_interface", "destination": "https://docs.google.com/document/d/14tZpyj5oxB6a5ugaR7-kQrxD2wBgctlK5jxwvItv0LI/edit?usp=sharing&resourcekey=0-M5oUr3Pm3f5wtE7v4aQbkQ", "type":301 }, + { "source": "/go/widget-test-frame-precision", "destination": "https://docs.google.com/document/d/1lECLbcmfWdyZFUG5TTGtem3l_SEefcJWHwPO_aZIqwM/edit?usp=sharing&resourcekey=0-6L6P_D571XnvK5oIfpe4MQ", "type": 301 }, + { "source": "/go/widget-tree-image-cache", "destination": "https://docs.google.com/document/d/1deEtxZk1VYRmzvkL4gTb3sEnjBrHejQkWObQ4yrP5jE/edit?pli=1#", "type": 301 }, + { "source": "/go/widgetspan-in-selectabletext", "destination": "https://docs.google.com/document/d/1nrVRytWVF-1hr8LvUKyENE5s074UInni9ZiColtIIxI", "type": 301 }, + { "source": "/go/widget-budget", "destination": "https://docs.google.com/document/d/1JTmf7ae8hWJ3zzqhI-__I9DcUJdQ3TopWsJbKyNDO5A/edit?usp=sharing&resourcekey=0--A0AbM19K-zDXRmIIzaUAg", "type": 301 }, + { "source": "/go/windows-arm64", "destination": "https://docs.google.com/document/d/1yuexY-EtzeVhU3V6RGBII_kH-znLSkQCspzW70jayZk/edit?resourcekey=0-8pQRSXSHQlwOo7QtCVLvBA#heading=h.pub7jnop54q0", "type": 301 }, + { "source": "/go/windows-multi-view-ownership-updates", "destination": "https://docs.google.com/document/d/1QSnnu4SK0H_Zuik_x2ceHc8KTpxcG_HDS9KSm6xd5iY/edit?usp=sharing", "type": 301 }, + { "source": "/go/windows-x86-arm64-support", "destination": "https://docs.google.com/document/d/1gAGqtTAjO0GntR8bPonIO1aZJnTghPCI_PHJPdNzEmo/edit?resourcekey=0-l1tL7iai47yw3bMl9IcpHw", "type": 301 }, + { "source": "/go/wrap-layout", "destination": "https://docs.google.com/document/d/1auZtWT1T5CkUKOUTUld8rF91iN7PvQoOF0IlBNXiDSo/edit?usp=sharing", "type": 301 }, + { "source": "/go/wrap-popupmenu-with-safearea", "destination": "https://docs.google.com/document/d/15uBmyEKiOeYGYt1PuBVf4SFK5YhH07EP9ylWP-H9mVE/edit?usp=sharing", "type": 301 } ], "headers": [ { @@ -32,8 +648,18 @@ { "source": "**", "headers": [ - { "key": "Referrer-Policy", "value": "strict-origin-when-cross-origin"}, - { "key": "X-Content-Type-Options", "value": "nosniff"} + { + "key": "Referrer-Policy", + "value": "strict-origin-when-cross-origin" + }, + { + "key": "X-Content-Type-Options", + "value": "nosniff" + }, + { + "key": "X-Frame-Options", + "value": "'SAMEORIGIN' always;" + } ] } ] diff --git a/src/content/404.html b/src/content/404.html index f029ef748b..e462b230a2 100644 --- a/src/content/404.html +++ b/src/content/404.html @@ -5,6 +5,8 @@ body_class: landing-page not-found permalink: /404.html sitemap: false +js: + - url: /assets/js/host-redirect.min.js ---
diff --git a/src/content/assets/js/host-redirect.min.js b/src/content/assets/js/host-redirect.min.js new file mode 100644 index 0000000000..7d1561cde1 --- /dev/null +++ b/src/content/assets/js/host-redirect.min.js @@ -0,0 +1,2 @@ +/*! For license information please see host-redirect.min.js.LICENSE.txt */ +var hostRedirect;(()=>{var t={505:t=>{"use strict";function e(t,e,i){t instanceof RegExp&&(t=s(t,i)),e instanceof RegExp&&(e=s(e,i));var n=o(t,e,i);return n&&{start:n[0],end:n[1],pre:i.slice(0,n[0]),body:i.slice(n[0]+t.length,n[1]),post:i.slice(n[1]+e.length)}}function s(t,e){var s=e.match(t);return s?s[0]:null}function o(t,e,s){var o,i,n,r,a,c=s.indexOf(t),d=s.indexOf(e,c+1),p=c;if(c>=0&&d>0){if(t===e)return[c,d];for(o=[],n=s.length;p>=0&&!a;)p==c?(o.push(p),c=s.indexOf(t,p+1)):1==o.length?a=[o.pop(),d]:((i=o.pop())=0?c:d;o.length&&(a=[n,r])}return a}t.exports=e,e.range=o},928:(t,e,s)=>{var o=s(505);t.exports=function(t){return t?("{}"===t.substr(0,2)&&(t="\\{\\}"+t.substr(2)),f(function(t){return t.split("\\\\").join(i).split("\\{").join(n).split("\\}").join(r).split("\\,").join(a).split("\\.").join(c)}(t),!0).map(p)):[]};var i="\0SLASH"+Math.random()+"\0",n="\0OPEN"+Math.random()+"\0",r="\0CLOSE"+Math.random()+"\0",a="\0COMMA"+Math.random()+"\0",c="\0PERIOD"+Math.random()+"\0";function d(t){return parseInt(t,10)==t?parseInt(t,10):t.charCodeAt(0)}function p(t){return t.split(i).join("\\").split(n).join("{").split(r).join("}").split(a).join(",").split(c).join(".")}function u(t){if(!t)return[""];var e=[],s=o("{","}",t);if(!s)return t.split(",");var i=s.pre,n=s.body,r=s.post,a=i.split(",");a[a.length-1]+="{"+n+"}";var c=u(r);return r.length&&(a[a.length-1]+=c.shift(),a.push.apply(a,c)),e.push.apply(e,a),e}function g(t){return"{"+t+"}"}function l(t){return/^-?0\d/.test(t)}function h(t,e){return t<=e}function m(t,e){return t>=e}function f(t,e){var s=[],i=o("{","}",t);if(!i)return[t];var n=i.pre,a=i.post.length?f(i.post,!1):[""];if(/\$$/.test(i.pre))for(var c=0;c=0;if(!w&&!C)return i.post.match(/,.*\}/)?f(t=i.pre+"{"+i.body+r+i.post):[t];if(w)y=i.body.split(/\.\./);else if(1===(y=u(i.body)).length&&1===(y=f(y[0],!1).map(g)).length)return a.map((function(t){return i.pre+y[0]+t}));if(w){var O=d(y[0]),k=d(y[1]),_=Math.max(y[0].length,y[1].length),S=3==y.length?Math.abs(d(y[2])):1,T=h;k0){var L=new Array(M+1).join("0");v=N<0?"-"+L+v.slice(1):L+v}}E.push(v)}}else{E=[];for(var I=0;I{for(var o in e)s.o(e,o)&&!s.o(t,o)&&Object.defineProperty(t,o,{enumerable:!0,get:e[o]})},s.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),s.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})};var o={};(()=>{"use strict";s.r(o),s.d(o,{getRedirect:()=>ee});class t{static FOLD_CASE=1;static LITERAL=2;static CLASS_NL=4;static DOT_NL=8;static ONE_LINE=16;static NON_GREEDY=32;static PERL_X=64;static UNICODE_GROUPS=128;static WAS_DOLLAR=256;static MATCH_NL=t.CLASS_NL|t.DOT_NL;static PERL=t.CLASS_NL|t.ONE_LINE|t.PERL_X|t.UNICODE_GROUPS;static POSIX=0;static UNANCHORED=0;static ANCHOR_START=1;static ANCHOR_BOTH=2}class e{static CODES=new Map([["",7],["\b",8],["\t",9],["\n",10],["\v",11],["\f",12],["\r",13],[" ",32],['"',34],["$",36],["&",38],["(",40],[")",41],["*",42],["+",43],["-",45],[".",46],["0",48],["1",49],["2",50],["3",51],["4",52],["5",53],["6",54],["7",55],["8",56],["9",57],[":",58],["<",60],[">",62],["?",63],["A",65],["B",66],["C",67],["F",70],["P",80],["Q",81],["U",85],["Z",90],["[",91],["\\",92],["]",93],["^",94],["_",95],["a",97],["b",98],["f",102],["i",105],["m",109],["n",110],["r",114],["s",115],["t",116],["v",118],["x",120],["z",122],["{",123],["|",124],["}",125]]);static toUpperCase(t){const e=String.fromCodePoint(t).toUpperCase();if(e.length>1)return t;const s=String.fromCodePoint(e.codePointAt(0)).toLowerCase();return s.length>1||s.codePointAt(0)!==t?t:e.codePointAt(0)}static toLowerCase(t){const e=String.fromCodePoint(t).toLowerCase();if(e.length>1)return t;const s=String.fromCodePoint(e.codePointAt(0)).toUpperCase();return s.length>1||s.codePointAt(0)!==t?t:e.codePointAt(0)}}class i{static CASE_ORBIT=new Map([[75,107],[107,8490],[8490,75],[83,115],[115,383],[383,83],[181,924],[924,956],[956,181],[197,229],[229,8491],[8491,197],[452,453],[453,454],[454,452],[455,456],[456,457],[457,455],[458,459],[459,460],[460,458],[497,498],[498,499],[499,497],[837,921],[921,953],[953,8126],[8126,837],[914,946],[946,976],[976,914],[917,949],[949,1013],[1013,917],[920,952],[952,977],[977,1012],[1012,920],[922,954],[954,1008],[1008,922],[928,960],[960,982],[982,928],[929,961],[961,1009],[1009,929],[931,962],[962,963],[963,931],[934,966],[966,981],[981,934],[937,969],[969,8486],[8486,937],[1042,1074],[1074,7296],[7296,1042],[1044,1076],[1076,7297],[7297,1044],[1054,1086],[1086,7298],[7298,1054],[1057,1089],[1089,7299],[7299,1057],[1058,1090],[1090,7300],[7300,7301],[7301,1058],[1066,1098],[1098,7302],[7302,1066],[1122,1123],[1123,7303],[7303,1122],[7304,42570],[42570,42571],[42571,7304],[7776,7777],[7777,7835],[7835,7776],[223,7838],[7838,223],[8064,8072],[8072,8064],[8065,8073],[8073,8065],[8066,8074],[8074,8066],[8067,8075],[8075,8067],[8068,8076],[8076,8068],[8069,8077],[8077,8069],[8070,8078],[8078,8070],[8071,8079],[8079,8071],[8080,8088],[8088,8080],[8081,8089],[8089,8081],[8082,8090],[8090,8082],[8083,8091],[8091,8083],[8084,8092],[8092,8084],[8085,8093],[8093,8085],[8086,8094],[8094,8086],[8087,8095],[8095,8087],[8096,8104],[8104,8096],[8097,8105],[8105,8097],[8098,8106],[8106,8098],[8099,8107],[8107,8099],[8100,8108],[8108,8100],[8101,8109],[8109,8101],[8102,8110],[8110,8102],[8103,8111],[8111,8103],[8115,8124],[8124,8115],[8131,8140],[8140,8131],[912,8147],[8147,912],[944,8163],[8163,944],[8179,8188],[8188,8179],[64261,64262],[64262,64261],[66560,66600],[66600,66560],[66561,66601],[66601,66561],[66562,66602],[66602,66562],[66563,66603],[66603,66563],[66564,66604],[66604,66564],[66565,66605],[66605,66565],[66566,66606],[66606,66566],[66567,66607],[66607,66567],[66568,66608],[66608,66568],[66569,66609],[66609,66569],[66570,66610],[66610,66570],[66571,66611],[66611,66571],[66572,66612],[66612,66572],[66573,66613],[66613,66573],[66574,66614],[66614,66574],[66575,66615],[66615,66575],[66576,66616],[66616,66576],[66577,66617],[66617,66577],[66578,66618],[66618,66578],[66579,66619],[66619,66579],[66580,66620],[66620,66580],[66581,66621],[66621,66581],[66582,66622],[66622,66582],[66583,66623],[66623,66583],[66584,66624],[66624,66584],[66585,66625],[66625,66585],[66586,66626],[66626,66586],[66587,66627],[66627,66587],[66588,66628],[66628,66588],[66589,66629],[66629,66589],[66590,66630],[66630,66590],[66591,66631],[66631,66591],[66592,66632],[66632,66592],[66593,66633],[66633,66593],[66594,66634],[66634,66594],[66595,66635],[66635,66595],[66596,66636],[66636,66596],[66597,66637],[66637,66597],[66598,66638],[66638,66598],[66599,66639],[66639,66599],[66736,66776],[66776,66736],[66737,66777],[66777,66737],[66738,66778],[66778,66738],[66739,66779],[66779,66739],[66740,66780],[66780,66740],[66741,66781],[66781,66741],[66742,66782],[66782,66742],[66743,66783],[66783,66743],[66744,66784],[66784,66744],[66745,66785],[66785,66745],[66746,66786],[66786,66746],[66747,66787],[66787,66747],[66748,66788],[66788,66748],[66749,66789],[66789,66749],[66750,66790],[66790,66750],[66751,66791],[66791,66751],[66752,66792],[66792,66752],[66753,66793],[66793,66753],[66754,66794],[66794,66754],[66755,66795],[66795,66755],[66756,66796],[66796,66756],[66757,66797],[66797,66757],[66758,66798],[66798,66758],[66759,66799],[66799,66759],[66760,66800],[66800,66760],[66761,66801],[66801,66761],[66762,66802],[66802,66762],[66763,66803],[66803,66763],[66764,66804],[66804,66764],[66765,66805],[66805,66765],[66766,66806],[66806,66766],[66767,66807],[66807,66767],[66768,66808],[66808,66768],[66769,66809],[66809,66769],[66770,66810],[66810,66770],[66771,66811],[66811,66771],[66928,66967],[66967,66928],[66929,66968],[66968,66929],[66930,66969],[66969,66930],[66931,66970],[66970,66931],[66932,66971],[66971,66932],[66933,66972],[66972,66933],[66934,66973],[66973,66934],[66935,66974],[66974,66935],[66936,66975],[66975,66936],[66937,66976],[66976,66937],[66938,66977],[66977,66938],[66940,66979],[66979,66940],[66941,66980],[66980,66941],[66942,66981],[66981,66942],[66943,66982],[66982,66943],[66944,66983],[66983,66944],[66945,66984],[66984,66945],[66946,66985],[66985,66946],[66947,66986],[66986,66947],[66948,66987],[66987,66948],[66949,66988],[66988,66949],[66950,66989],[66989,66950],[66951,66990],[66990,66951],[66952,66991],[66991,66952],[66953,66992],[66992,66953],[66954,66993],[66993,66954],[66956,66995],[66995,66956],[66957,66996],[66996,66957],[66958,66997],[66997,66958],[66959,66998],[66998,66959],[66960,66999],[66999,66960],[66961,67e3],[67e3,66961],[66962,67001],[67001,66962],[66964,67003],[67003,66964],[66965,67004],[67004,66965],[68736,68800],[68800,68736],[68737,68801],[68801,68737],[68738,68802],[68802,68738],[68739,68803],[68803,68739],[68740,68804],[68804,68740],[68741,68805],[68805,68741],[68742,68806],[68806,68742],[68743,68807],[68807,68743],[68744,68808],[68808,68744],[68745,68809],[68809,68745],[68746,68810],[68810,68746],[68747,68811],[68811,68747],[68748,68812],[68812,68748],[68749,68813],[68813,68749],[68750,68814],[68814,68750],[68751,68815],[68815,68751],[68752,68816],[68816,68752],[68753,68817],[68817,68753],[68754,68818],[68818,68754],[68755,68819],[68819,68755],[68756,68820],[68820,68756],[68757,68821],[68821,68757],[68758,68822],[68822,68758],[68759,68823],[68823,68759],[68760,68824],[68824,68760],[68761,68825],[68825,68761],[68762,68826],[68826,68762],[68763,68827],[68827,68763],[68764,68828],[68828,68764],[68765,68829],[68829,68765],[68766,68830],[68830,68766],[68767,68831],[68831,68767],[68768,68832],[68832,68768],[68769,68833],[68833,68769],[68770,68834],[68834,68770],[68771,68835],[68835,68771],[68772,68836],[68836,68772],[68773,68837],[68837,68773],[68774,68838],[68838,68774],[68775,68839],[68839,68775],[68776,68840],[68840,68776],[68777,68841],[68841,68777],[68778,68842],[68842,68778],[68779,68843],[68843,68779],[68780,68844],[68844,68780],[68781,68845],[68845,68781],[68782,68846],[68846,68782],[68783,68847],[68847,68783],[68784,68848],[68848,68784],[68785,68849],[68849,68785],[68786,68850],[68850,68786],[71840,71872],[71872,71840],[71841,71873],[71873,71841],[71842,71874],[71874,71842],[71843,71875],[71875,71843],[71844,71876],[71876,71844],[71845,71877],[71877,71845],[71846,71878],[71878,71846],[71847,71879],[71879,71847],[71848,71880],[71880,71848],[71849,71881],[71881,71849],[71850,71882],[71882,71850],[71851,71883],[71883,71851],[71852,71884],[71884,71852],[71853,71885],[71885,71853],[71854,71886],[71886,71854],[71855,71887],[71887,71855],[71856,71888],[71888,71856],[71857,71889],[71889,71857],[71858,71890],[71890,71858],[71859,71891],[71891,71859],[71860,71892],[71892,71860],[71861,71893],[71893,71861],[71862,71894],[71894,71862],[71863,71895],[71895,71863],[71864,71896],[71896,71864],[71865,71897],[71897,71865],[71866,71898],[71898,71866],[71867,71899],[71899,71867],[71868,71900],[71900,71868],[71869,71901],[71901,71869],[71870,71902],[71902,71870],[71871,71903],[71903,71871],[93760,93792],[93792,93760],[93761,93793],[93793,93761],[93762,93794],[93794,93762],[93763,93795],[93795,93763],[93764,93796],[93796,93764],[93765,93797],[93797,93765],[93766,93798],[93798,93766],[93767,93799],[93799,93767],[93768,93800],[93800,93768],[93769,93801],[93801,93769],[93770,93802],[93802,93770],[93771,93803],[93803,93771],[93772,93804],[93804,93772],[93773,93805],[93805,93773],[93774,93806],[93806,93774],[93775,93807],[93807,93775],[93776,93808],[93808,93776],[93777,93809],[93809,93777],[93778,93810],[93810,93778],[93779,93811],[93811,93779],[93780,93812],[93812,93780],[93781,93813],[93813,93781],[93782,93814],[93814,93782],[93783,93815],[93815,93783],[93784,93816],[93816,93784],[93785,93817],[93817,93785],[93786,93818],[93818,93786],[93787,93819],[93819,93787],[93788,93820],[93820,93788],[93789,93821],[93821,93789],[93790,93822],[93822,93790],[93791,93823],[93823,93791],[125184,125218],[125218,125184],[125185,125219],[125219,125185],[125186,125220],[125220,125186],[125187,125221],[125221,125187],[125188,125222],[125222,125188],[125189,125223],[125223,125189],[125190,125224],[125224,125190],[125191,125225],[125225,125191],[125192,125226],[125226,125192],[125193,125227],[125227,125193],[125194,125228],[125228,125194],[125195,125229],[125229,125195],[125196,125230],[125230,125196],[125197,125231],[125231,125197],[125198,125232],[125232,125198],[125199,125233],[125233,125199],[125200,125234],[125234,125200],[125201,125235],[125235,125201],[125202,125236],[125236,125202],[125203,125237],[125237,125203],[125204,125238],[125238,125204],[125205,125239],[125239,125205],[125206,125240],[125240,125206],[125207,125241],[125241,125207],[125208,125242],[125242,125208],[125209,125243],[125243,125209],[125210,125244],[125244,125210],[125211,125245],[125245,125211],[125212,125246],[125246,125212],[125213,125247],[125247,125213],[125214,125248],[125248,125214],[125215,125249],[125249,125215],[125216,125250],[125250,125216],[125217,125251],[125251,125217]]);static C=[[0,31,1],[127,159,1],[173,888,715],[889,896,7],[897,899,1],[907,909,2],[930,1328,398],[1367,1368,1],[1419,1420,1],[1424,1480,56],[1481,1487,1],[1515,1518,1],[1525,1541,1],[1564,1757,193],[1806,1807,1],[1867,1868,1],[1970,1983,1],[2043,2044,1],[2094,2095,1],[2111,2140,29],[2141,2143,2],[2155,2159,1],[2191,2199,1],[2274,2436,162],[2445,2446,1],[2449,2450,1],[2473,2481,8],[2483,2485,1],[2490,2491,1],[2501,2502,1],[2505,2506,1],[2511,2518,1],[2520,2523,1],[2526,2532,6],[2533,2559,26],[2560,2564,4],[2571,2574,1],[2577,2578,1],[2601,2609,8],[2612,2618,3],[2619,2621,2],[2627,2630,1],[2633,2634,1],[2638,2640,1],[2642,2648,1],[2653,2655,2],[2656,2661,1],[2679,2688,1],[2692,2702,10],[2706,2729,23],[2737,2740,3],[2746,2747,1],[2758,2766,4],[2767,2769,2],[2770,2783,1],[2788,2789,1],[2802,2808,1],[2816,2820,4],[2829,2830,1],[2833,2834,1],[2857,2865,8],[2868,2874,6],[2875,2885,10],[2886,2889,3],[2890,2894,4],[2895,2900,1],[2904,2907,1],[2910,2916,6],[2917,2936,19],[2937,2945,1],[2948,2955,7],[2956,2957,1],[2961,2966,5],[2967,2968,1],[2971,2973,2],[2976,2978,1],[2981,2983,1],[2987,2989,1],[3002,3005,1],[3011,3013,1],[3017,3022,5],[3023,3025,2],[3026,3030,1],[3032,3045,1],[3067,3071,1],[3085,3089,4],[3113,3130,17],[3131,3141,10],[3145,3150,5],[3151,3156,1],[3159,3163,4],[3164,3166,2],[3167,3172,5],[3173,3184,11],[3185,3190,1],[3213,3217,4],[3241,3252,11],[3258,3259,1],[3269,3273,4],[3278,3284,1],[3287,3292,1],[3295,3300,5],[3301,3312,11],[3316,3327,1],[3341,3345,4],[3397,3401,4],[3408,3411,1],[3428,3429,1],[3456,3460,4],[3479,3481,1],[3506,3516,10],[3518,3519,1],[3527,3529,1],[3531,3534,1],[3541,3543,2],[3552,3557,1],[3568,3569,1],[3573,3584,1],[3643,3646,1],[3676,3712,1],[3715,3717,2],[3723,3748,25],[3750,3774,24],[3775,3781,6],[3783,3791,8],[3802,3803,1],[3808,3839,1],[3912,3949,37],[3950,3952,1],[3992,4029,37],[4045,4059,14],[4060,4095,1],[4294,4296,2],[4297,4300,1],[4302,4303,1],[4681,4686,5],[4687,4695,8],[4697,4702,5],[4703,4745,42],[4750,4751,1],[4785,4790,5],[4791,4799,8],[4801,4806,5],[4807,4823,16],[4881,4886,5],[4887,4955,68],[4956,4989,33],[4990,4991,1],[5018,5023,1],[5110,5111,1],[5118,5119,1],[5789,5791,1],[5881,5887,1],[5910,5918,1],[5943,5951,1],[5972,5983,1],[5997,6001,4],[6004,6015,1],[6110,6111,1],[6122,6127,1],[6138,6143,1],[6158,6170,12],[6171,6175,1],[6265,6271,1],[6315,6319,1],[6390,6399,1],[6431,6444,13],[6445,6447,1],[6460,6463,1],[6465,6467,1],[6510,6511,1],[6517,6527,1],[6572,6575,1],[6602,6607,1],[6619,6621,1],[6684,6685,1],[6751,6781,30],[6782,6794,12],[6795,6799,1],[6810,6815,1],[6830,6831,1],[6863,6911,1],[6989,6991,1],[7039,7156,117],[7157,7163,1],[7224,7226,1],[7242,7244,1],[7305,7311,1],[7355,7356,1],[7368,7375,1],[7419,7423,1],[7958,7959,1],[7966,7967,1],[8006,8007,1],[8014,8015,1],[8024,8030,2],[8062,8063,1],[8117,8133,16],[8148,8149,1],[8156,8176,20],[8177,8181,4],[8191,8203,12],[8204,8207,1],[8234,8238,1],[8288,8303,1],[8306,8307,1],[8335,8349,14],[8350,8351,1],[8385,8399,1],[8433,8447,1],[8588,8591,1],[9255,9279,1],[9291,9311,1],[11124,11125,1],[11158,11508,350],[11509,11512,1],[11558,11560,2],[11561,11564,1],[11566,11567,1],[11624,11630,1],[11633,11646,1],[11671,11679,1],[11687,11743,8],[11870,11903,1],[11930,12020,90],[12021,12031,1],[12246,12271,1],[12352,12439,87],[12440,12544,104],[12545,12548,1],[12592,12687,95],[12772,12782,1],[12831,42125,29294],[42126,42127,1],[42183,42191,1],[42540,42559,1],[42744,42751,1],[42955,42959,1],[42962,42964,2],[42970,42993,1],[43053,43055,1],[43066,43071,1],[43128,43135,1],[43206,43213,1],[43226,43231,1],[43348,43358,1],[43389,43391,1],[43470,43482,12],[43483,43485,1],[43519,43575,56],[43576,43583,1],[43598,43599,1],[43610,43611,1],[43715,43738,1],[43767,43776,1],[43783,43784,1],[43791,43792,1],[43799,43807,1],[43815,43823,8],[43884,43887,1],[44014,44015,1],[44026,44031,1],[55204,55215,1],[55239,55242,1],[55292,63743,1],[64110,64111,1],[64218,64255,1],[64263,64274,1],[64280,64284,1],[64311,64317,6],[64319,64325,3],[64451,64466,1],[64912,64913,1],[64968,64974,1],[64976,65007,1],[65050,65055,1],[65107,65127,20],[65132,65135,1],[65141,65277,136],[65278,65280,1],[65471,65473,1],[65480,65481,1],[65488,65489,1],[65496,65497,1],[65501,65503,1],[65511,65519,8],[65520,65531,1],[65534,65535,1],[65548,65575,27],[65595,65598,3],[65614,65615,1],[65630,65663,1],[65787,65791,1],[65795,65798,1],[65844,65846,1],[65935,65949,14],[65950,65951,1],[65953,65999,1],[66046,66175,1],[66205,66207,1],[66257,66271,1],[66300,66303,1],[66340,66348,1],[66379,66383,1],[66427,66431,1],[66462,66500,38],[66501,66503,1],[66518,66559,1],[66718,66719,1],[66730,66735,1],[66772,66775,1],[66812,66815,1],[66856,66863,1],[66916,66926,1],[66939,66955,16],[66963,66966,3],[66978,66994,16],[67002,67005,3],[67006,67071,1],[67383,67391,1],[67414,67423,1],[67432,67455,1],[67462,67505,43],[67515,67583,1],[67590,67591,1],[67593,67638,45],[67641,67643,1],[67645,67646,1],[67670,67743,73],[67744,67750,1],[67760,67807,1],[67827,67830,3],[67831,67834,1],[67868,67870,1],[67898,67902,1],[67904,67967,1],[68024,68027,1],[68048,68049,1],[68100,68103,3],[68104,68107,1],[68116,68120,4],[68150,68151,1],[68155,68158,1],[68169,68175,1],[68185,68191,1],[68256,68287,1],[68327,68330,1],[68343,68351,1],[68406,68408,1],[68438,68439,1],[68467,68471,1],[68498,68504,1],[68509,68520,1],[68528,68607,1],[68681,68735,1],[68787,68799,1],[68851,68857,1],[68904,68911,1],[68922,69215,1],[69247,69290,43],[69294,69295,1],[69298,69372,1],[69416,69423,1],[69466,69487,1],[69514,69551,1],[69580,69599,1],[69623,69631,1],[69710,69713,1],[69750,69758,1],[69821,69827,6],[69828,69839,1],[69865,69871,1],[69882,69887,1],[69941,69960,19],[69961,69967,1],[70007,70015,1],[70112,70133,21],[70134,70143,1],[70162,70210,48],[70211,70271,1],[70279,70281,2],[70286,70302,16],[70314,70319,1],[70379,70383,1],[70394,70399,1],[70404,70413,9],[70414,70417,3],[70418,70441,23],[70449,70452,3],[70458,70469,11],[70470,70473,3],[70474,70478,4],[70479,70481,2],[70482,70486,1],[70488,70492,1],[70500,70501,1],[70509,70511,1],[70517,70655,1],[70748,70754,6],[70755,70783,1],[70856,70863,1],[70874,71039,1],[71094,71095,1],[71134,71167,1],[71237,71247,1],[71258,71263,1],[71277,71295,1],[71354,71359,1],[71370,71423,1],[71451,71452,1],[71468,71471,1],[71495,71679,1],[71740,71839,1],[71923,71934,1],[71943,71944,1],[71946,71947,1],[71956,71959,3],[71990,71993,3],[71994,72007,13],[72008,72015,1],[72026,72095,1],[72104,72105,1],[72152,72153,1],[72165,72191,1],[72264,72271,1],[72355,72367,1],[72441,72447,1],[72458,72703,1],[72713,72759,46],[72774,72783,1],[72813,72815,1],[72848,72849,1],[72872,72887,15],[72888,72959,1],[72967,72970,3],[73015,73017,1],[73019,73022,3],[73032,73039,1],[73050,73055,1],[73062,73065,3],[73103,73106,3],[73113,73119,1],[73130,73439,1],[73465,73471,1],[73489,73531,42],[73532,73533,1],[73562,73647,1],[73649,73663,1],[73714,73726,1],[74650,74751,1],[74863,74869,6],[74870,74879,1],[75076,77711,1],[77811,77823,1],[78896,78911,1],[78934,82943,1],[83527,92159,1],[92729,92735,1],[92767,92778,11],[92779,92781,1],[92863,92874,11],[92875,92879,1],[92910,92911,1],[92918,92927,1],[92998,93007,1],[93018,93026,8],[93048,93052,1],[93072,93759,1],[93851,93951,1],[94027,94030,1],[94088,94094,1],[94112,94175,1],[94181,94191,1],[94194,94207,1],[100344,100351,1],[101590,101631,1],[101641,110575,1],[110580,110588,8],[110591,110883,292],[110884,110897,1],[110899,110927,1],[110931,110932,1],[110934,110947,1],[110952,110959,1],[111356,113663,1],[113771,113775,1],[113789,113791,1],[113801,113807,1],[113818,113819,1],[113824,118527,1],[118574,118575,1],[118599,118607,1],[118724,118783,1],[119030,119039,1],[119079,119080,1],[119155,119162,1],[119275,119295,1],[119366,119487,1],[119508,119519,1],[119540,119551,1],[119639,119647,1],[119673,119807,1],[119893,119965,72],[119968,119969,1],[119971,119972,1],[119975,119976,1],[119981,119994,13],[119996,120004,8],[120070,120075,5],[120076,120085,9],[120093,120122,29],[120127,120133,6],[120135,120137,1],[120145,120486,341],[120487,120780,293],[120781,121484,703],[121485,121498,1],[121504,121520,16],[121521,122623,1],[122655,122660,1],[122667,122879,1],[122887,122905,18],[122906,122914,8],[122917,122923,6],[122924,122927,1],[122990,123022,1],[123024,123135,1],[123181,123183,1],[123198,123199,1],[123210,123213,1],[123216,123535,1],[123567,123583,1],[123642,123646,1],[123648,124111,1],[124154,124895,1],[124903,124908,5],[124911,124927,16],[125125,125126,1],[125143,125183,1],[125260,125263,1],[125274,125277,1],[125280,126064,1],[126133,126208,1],[126270,126463,1],[126468,126496,28],[126499,126501,2],[126502,126504,2],[126515,126520,5],[126522,126524,2],[126525,126529,1],[126531,126534,1],[126536,126540,2],[126544,126547,3],[126549,126550,1],[126552,126560,2],[126563,126565,2],[126566,126571,5],[126579,126589,5],[126591,126602,11],[126620,126624,1],[126628,126634,6],[126652,126703,1],[126706,126975,1],[127020,127023,1],[127124,127135,1],[127151,127152,1],[127168,127184,16],[127222,127231,1],[127406,127461,1],[127491,127503,1],[127548,127551,1],[127561,127567,1],[127570,127583,1],[127590,127743,1],[128728,128731,1],[128749,128751,1],[128765,128767,1],[128887,128890,1],[128986,128991,1],[129004,129007,1],[129009,129023,1],[129036,129039,1],[129096,129103,1],[129114,129119,1],[129160,129167,1],[129198,129199,1],[129202,129279,1],[129620,129631,1],[129646,129647,1],[129661,129663,1],[129673,129679,1],[129726,129734,8],[129735,129741,1],[129756,129759,1],[129769,129775,1],[129785,129791,1],[129939,129995,56],[129996,130031,1],[130042,131071,1],[173792,173823,1],[177978,177983,1],[178206,178207,1],[183970,183983,1],[191457,191471,1],[192094,194559,1],[195102,196607,1],[201547,201551,1],[205744,917759,1],[918e3,1114111,1]];static Cc=[[0,31,1],[127,159,1]];static Cf=[[173,1536,1363],[1537,1541,1],[1564,1757,193],[1807,2192,385],[2193,2274,81],[6158,8203,2045],[8204,8207,1],[8234,8238,1],[8288,8292,1],[8294,8303,1],[65279,65529,250],[65530,65531,1],[69821,69837,16],[78896,78911,1],[113824,113827,1],[119155,119162,1],[917505,917536,31],[917537,917631,1]];static Co=[[57344,63743,1],[983040,1048573,1],[1048576,1114109,1]];static Cs=[[55296,57343,1]];static L=[[65,90,1],[97,122,1],[170,181,11],[186,192,6],[193,214,1],[216,246,1],[248,705,1],[710,721,1],[736,740,1],[748,750,2],[880,884,1],[886,887,1],[890,893,1],[895,902,7],[904,906,1],[908,910,2],[911,929,1],[931,1013,1],[1015,1153,1],[1162,1327,1],[1329,1366,1],[1369,1376,7],[1377,1416,1],[1488,1514,1],[1519,1522,1],[1568,1610,1],[1646,1647,1],[1649,1747,1],[1749,1765,16],[1766,1774,8],[1775,1786,11],[1787,1788,1],[1791,1808,17],[1810,1839,1],[1869,1957,1],[1969,1994,25],[1995,2026,1],[2036,2037,1],[2042,2048,6],[2049,2069,1],[2074,2084,10],[2088,2112,24],[2113,2136,1],[2144,2154,1],[2160,2183,1],[2185,2190,1],[2208,2249,1],[2308,2361,1],[2365,2384,19],[2392,2401,1],[2417,2432,1],[2437,2444,1],[2447,2448,1],[2451,2472,1],[2474,2480,1],[2482,2486,4],[2487,2489,1],[2493,2510,17],[2524,2525,1],[2527,2529,1],[2544,2545,1],[2556,2565,9],[2566,2570,1],[2575,2576,1],[2579,2600,1],[2602,2608,1],[2610,2611,1],[2613,2614,1],[2616,2617,1],[2649,2652,1],[2654,2674,20],[2675,2676,1],[2693,2701,1],[2703,2705,1],[2707,2728,1],[2730,2736,1],[2738,2739,1],[2741,2745,1],[2749,2768,19],[2784,2785,1],[2809,2821,12],[2822,2828,1],[2831,2832,1],[2835,2856,1],[2858,2864,1],[2866,2867,1],[2869,2873,1],[2877,2908,31],[2909,2911,2],[2912,2913,1],[2929,2947,18],[2949,2954,1],[2958,2960,1],[2962,2965,1],[2969,2970,1],[2972,2974,2],[2975,2979,4],[2980,2984,4],[2985,2986,1],[2990,3001,1],[3024,3077,53],[3078,3084,1],[3086,3088,1],[3090,3112,1],[3114,3129,1],[3133,3160,27],[3161,3162,1],[3165,3168,3],[3169,3200,31],[3205,3212,1],[3214,3216,1],[3218,3240,1],[3242,3251,1],[3253,3257,1],[3261,3293,32],[3294,3296,2],[3297,3313,16],[3314,3332,18],[3333,3340,1],[3342,3344,1],[3346,3386,1],[3389,3406,17],[3412,3414,1],[3423,3425,1],[3450,3455,1],[3461,3478,1],[3482,3505,1],[3507,3515,1],[3517,3520,3],[3521,3526,1],[3585,3632,1],[3634,3635,1],[3648,3654,1],[3713,3714,1],[3716,3718,2],[3719,3722,1],[3724,3747,1],[3749,3751,2],[3752,3760,1],[3762,3763,1],[3773,3776,3],[3777,3780,1],[3782,3804,22],[3805,3807,1],[3840,3904,64],[3905,3911,1],[3913,3948,1],[3976,3980,1],[4096,4138,1],[4159,4176,17],[4177,4181,1],[4186,4189,1],[4193,4197,4],[4198,4206,8],[4207,4208,1],[4213,4225,1],[4238,4256,18],[4257,4293,1],[4295,4301,6],[4304,4346,1],[4348,4680,1],[4682,4685,1],[4688,4694,1],[4696,4698,2],[4699,4701,1],[4704,4744,1],[4746,4749,1],[4752,4784,1],[4786,4789,1],[4792,4798,1],[4800,4802,2],[4803,4805,1],[4808,4822,1],[4824,4880,1],[4882,4885,1],[4888,4954,1],[4992,5007,1],[5024,5109,1],[5112,5117,1],[5121,5740,1],[5743,5759,1],[5761,5786,1],[5792,5866,1],[5873,5880,1],[5888,5905,1],[5919,5937,1],[5952,5969,1],[5984,5996,1],[5998,6e3,1],[6016,6067,1],[6103,6108,5],[6176,6264,1],[6272,6276,1],[6279,6312,1],[6314,6320,6],[6321,6389,1],[6400,6430,1],[6480,6509,1],[6512,6516,1],[6528,6571,1],[6576,6601,1],[6656,6678,1],[6688,6740,1],[6823,6917,94],[6918,6963,1],[6981,6988,1],[7043,7072,1],[7086,7087,1],[7098,7141,1],[7168,7203,1],[7245,7247,1],[7258,7293,1],[7296,7304,1],[7312,7354,1],[7357,7359,1],[7401,7404,1],[7406,7411,1],[7413,7414,1],[7418,7424,6],[7425,7615,1],[7680,7957,1],[7960,7965,1],[7968,8005,1],[8008,8013,1],[8016,8023,1],[8025,8031,2],[8032,8061,1],[8064,8116,1],[8118,8124,1],[8126,8130,4],[8131,8132,1],[8134,8140,1],[8144,8147,1],[8150,8155,1],[8160,8172,1],[8178,8180,1],[8182,8188,1],[8305,8319,14],[8336,8348,1],[8450,8455,5],[8458,8467,1],[8469,8473,4],[8474,8477,1],[8484,8490,2],[8491,8493,1],[8495,8505,1],[8508,8511,1],[8517,8521,1],[8526,8579,53],[8580,11264,2684],[11265,11492,1],[11499,11502,1],[11506,11507,1],[11520,11557,1],[11559,11565,6],[11568,11623,1],[11631,11648,17],[11649,11670,1],[11680,11686,1],[11688,11694,1],[11696,11702,1],[11704,11710,1],[11712,11718,1],[11720,11726,1],[11728,11734,1],[11736,11742,1],[11823,12293,470],[12294,12337,43],[12338,12341,1],[12347,12348,1],[12353,12438,1],[12445,12447,1],[12449,12538,1],[12540,12543,1],[12549,12591,1],[12593,12686,1],[12704,12735,1],[12784,12799,1],[13312,19903,1],[19968,42124,1],[42192,42237,1],[42240,42508,1],[42512,42527,1],[42538,42539,1],[42560,42606,1],[42623,42653,1],[42656,42725,1],[42775,42783,1],[42786,42888,1],[42891,42954,1],[42960,42961,1],[42963,42965,2],[42966,42969,1],[42994,43009,1],[43011,43013,1],[43015,43018,1],[43020,43042,1],[43072,43123,1],[43138,43187,1],[43250,43255,1],[43259,43261,2],[43262,43274,12],[43275,43301,1],[43312,43334,1],[43360,43388,1],[43396,43442,1],[43471,43488,17],[43489,43492,1],[43494,43503,1],[43514,43518,1],[43520,43560,1],[43584,43586,1],[43588,43595,1],[43616,43638,1],[43642,43646,4],[43647,43695,1],[43697,43701,4],[43702,43705,3],[43706,43709,1],[43712,43714,2],[43739,43741,1],[43744,43754,1],[43762,43764,1],[43777,43782,1],[43785,43790,1],[43793,43798,1],[43808,43814,1],[43816,43822,1],[43824,43866,1],[43868,43881,1],[43888,44002,1],[44032,55203,1],[55216,55238,1],[55243,55291,1],[63744,64109,1],[64112,64217,1],[64256,64262,1],[64275,64279,1],[64285,64287,2],[64288,64296,1],[64298,64310,1],[64312,64316,1],[64318,64320,2],[64321,64323,2],[64324,64326,2],[64327,64433,1],[64467,64829,1],[64848,64911,1],[64914,64967,1],[65008,65019,1],[65136,65140,1],[65142,65276,1],[65313,65338,1],[65345,65370,1],[65382,65470,1],[65474,65479,1],[65482,65487,1],[65490,65495,1],[65498,65500,1],[65536,65547,1],[65549,65574,1],[65576,65594,1],[65596,65597,1],[65599,65613,1],[65616,65629,1],[65664,65786,1],[66176,66204,1],[66208,66256,1],[66304,66335,1],[66349,66368,1],[66370,66377,1],[66384,66421,1],[66432,66461,1],[66464,66499,1],[66504,66511,1],[66560,66717,1],[66736,66771,1],[66776,66811,1],[66816,66855,1],[66864,66915,1],[66928,66938,1],[66940,66954,1],[66956,66962,1],[66964,66965,1],[66967,66977,1],[66979,66993,1],[66995,67001,1],[67003,67004,1],[67072,67382,1],[67392,67413,1],[67424,67431,1],[67456,67461,1],[67463,67504,1],[67506,67514,1],[67584,67589,1],[67592,67594,2],[67595,67637,1],[67639,67640,1],[67644,67647,3],[67648,67669,1],[67680,67702,1],[67712,67742,1],[67808,67826,1],[67828,67829,1],[67840,67861,1],[67872,67897,1],[67968,68023,1],[68030,68031,1],[68096,68112,16],[68113,68115,1],[68117,68119,1],[68121,68149,1],[68192,68220,1],[68224,68252,1],[68288,68295,1],[68297,68324,1],[68352,68405,1],[68416,68437,1],[68448,68466,1],[68480,68497,1],[68608,68680,1],[68736,68786,1],[68800,68850,1],[68864,68899,1],[69248,69289,1],[69296,69297,1],[69376,69404,1],[69415,69424,9],[69425,69445,1],[69488,69505,1],[69552,69572,1],[69600,69622,1],[69635,69687,1],[69745,69746,1],[69749,69763,14],[69764,69807,1],[69840,69864,1],[69891,69926,1],[69956,69959,3],[69968,70002,1],[70006,70019,13],[70020,70066,1],[70081,70084,1],[70106,70108,2],[70144,70161,1],[70163,70187,1],[70207,70208,1],[70272,70278,1],[70280,70282,2],[70283,70285,1],[70287,70301,1],[70303,70312,1],[70320,70366,1],[70405,70412,1],[70415,70416,1],[70419,70440,1],[70442,70448,1],[70450,70451,1],[70453,70457,1],[70461,70480,19],[70493,70497,1],[70656,70708,1],[70727,70730,1],[70751,70753,1],[70784,70831,1],[70852,70853,1],[70855,71040,185],[71041,71086,1],[71128,71131,1],[71168,71215,1],[71236,71296,60],[71297,71338,1],[71352,71424,72],[71425,71450,1],[71488,71494,1],[71680,71723,1],[71840,71903,1],[71935,71942,1],[71945,71948,3],[71949,71955,1],[71957,71958,1],[71960,71983,1],[71999,72001,2],[72096,72103,1],[72106,72144,1],[72161,72163,2],[72192,72203,11],[72204,72242,1],[72250,72272,22],[72284,72329,1],[72349,72368,19],[72369,72440,1],[72704,72712,1],[72714,72750,1],[72768,72818,50],[72819,72847,1],[72960,72966,1],[72968,72969,1],[72971,73008,1],[73030,73056,26],[73057,73061,1],[73063,73064,1],[73066,73097,1],[73112,73440,328],[73441,73458,1],[73474,73476,2],[73477,73488,1],[73490,73523,1],[73648,73728,80],[73729,74649,1],[74880,75075,1],[77712,77808,1],[77824,78895,1],[78913,78918,1],[82944,83526,1],[92160,92728,1],[92736,92766,1],[92784,92862,1],[92880,92909,1],[92928,92975,1],[92992,92995,1],[93027,93047,1],[93053,93071,1],[93760,93823,1],[93952,94026,1],[94032,94099,67],[94100,94111,1],[94176,94177,1],[94179,94208,29],[94209,100343,1],[100352,101589,1],[101632,101640,1],[110576,110579,1],[110581,110587,1],[110589,110590,1],[110592,110882,1],[110898,110928,30],[110929,110930,1],[110933,110948,15],[110949,110951,1],[110960,111355,1],[113664,113770,1],[113776,113788,1],[113792,113800,1],[113808,113817,1],[119808,119892,1],[119894,119964,1],[119966,119967,1],[119970,119973,3],[119974,119977,3],[119978,119980,1],[119982,119993,1],[119995,119997,2],[119998,120003,1],[120005,120069,1],[120071,120074,1],[120077,120084,1],[120086,120092,1],[120094,120121,1],[120123,120126,1],[120128,120132,1],[120134,120138,4],[120139,120144,1],[120146,120485,1],[120488,120512,1],[120514,120538,1],[120540,120570,1],[120572,120596,1],[120598,120628,1],[120630,120654,1],[120656,120686,1],[120688,120712,1],[120714,120744,1],[120746,120770,1],[120772,120779,1],[122624,122654,1],[122661,122666,1],[122928,122989,1],[123136,123180,1],[123191,123197,1],[123214,123536,322],[123537,123565,1],[123584,123627,1],[124112,124139,1],[124896,124902,1],[124904,124907,1],[124909,124910,1],[124912,124926,1],[124928,125124,1],[125184,125251,1],[125259,126464,1205],[126465,126467,1],[126469,126495,1],[126497,126498,1],[126500,126503,3],[126505,126514,1],[126516,126519,1],[126521,126523,2],[126530,126535,5],[126537,126541,2],[126542,126543,1],[126545,126546,1],[126548,126551,3],[126553,126561,2],[126562,126564,2],[126567,126570,1],[126572,126578,1],[126580,126583,1],[126585,126588,1],[126590,126592,2],[126593,126601,1],[126603,126619,1],[126625,126627,1],[126629,126633,1],[126635,126651,1],[131072,173791,1],[173824,177977,1],[177984,178205,1],[178208,183969,1],[183984,191456,1],[191472,192093,1],[194560,195101,1],[196608,201546,1],[201552,205743,1]];static foldL=[[837,837,1]];static Ll=[[97,122,1],[181,223,42],[224,246,1],[248,255,1],[257,311,2],[312,328,2],[329,375,2],[378,382,2],[383,384,1],[387,389,2],[392,396,4],[397,402,5],[405,409,4],[410,411,1],[414,417,3],[419,421,2],[424,426,2],[427,429,2],[432,436,4],[438,441,3],[442,445,3],[446,447,1],[454,460,3],[462,476,2],[477,495,2],[496,499,3],[501,505,4],[507,563,2],[564,569,1],[572,575,3],[576,578,2],[583,591,2],[592,659,1],[661,687,1],[881,883,2],[887,891,4],[892,893,1],[912,940,28],[941,974,1],[976,977,1],[981,983,1],[985,1007,2],[1008,1011,1],[1013,1019,3],[1020,1072,52],[1073,1119,1],[1121,1153,2],[1163,1215,2],[1218,1230,2],[1231,1327,2],[1376,1416,1],[4304,4346,1],[4349,4351,1],[5112,5117,1],[7296,7304,1],[7424,7467,1],[7531,7543,1],[7545,7578,1],[7681,7829,2],[7830,7837,1],[7839,7935,2],[7936,7943,1],[7952,7957,1],[7968,7975,1],[7984,7991,1],[8e3,8005,1],[8016,8023,1],[8032,8039,1],[8048,8061,1],[8064,8071,1],[8080,8087,1],[8096,8103,1],[8112,8116,1],[8118,8119,1],[8126,8130,4],[8131,8132,1],[8134,8135,1],[8144,8147,1],[8150,8151,1],[8160,8167,1],[8178,8180,1],[8182,8183,1],[8458,8462,4],[8463,8467,4],[8495,8505,5],[8508,8509,1],[8518,8521,1],[8526,8580,54],[11312,11359,1],[11361,11365,4],[11366,11372,2],[11377,11379,2],[11380,11382,2],[11383,11387,1],[11393,11491,2],[11492,11500,8],[11502,11507,5],[11520,11557,1],[11559,11565,6],[42561,42605,2],[42625,42651,2],[42787,42799,2],[42800,42801,1],[42803,42865,2],[42866,42872,1],[42874,42876,2],[42879,42887,2],[42892,42894,2],[42897,42899,2],[42900,42901,1],[42903,42921,2],[42927,42933,6],[42935,42947,2],[42952,42954,2],[42961,42969,2],[42998,43002,4],[43824,43866,1],[43872,43880,1],[43888,43967,1],[64256,64262,1],[64275,64279,1],[65345,65370,1],[66600,66639,1],[66776,66811,1],[66967,66977,1],[66979,66993,1],[66995,67001,1],[67003,67004,1],[68800,68850,1],[71872,71903,1],[93792,93823,1],[119834,119859,1],[119886,119892,1],[119894,119911,1],[119938,119963,1],[119990,119993,1],[119995,119997,2],[119998,120003,1],[120005,120015,1],[120042,120067,1],[120094,120119,1],[120146,120171,1],[120198,120223,1],[120250,120275,1],[120302,120327,1],[120354,120379,1],[120406,120431,1],[120458,120485,1],[120514,120538,1],[120540,120545,1],[120572,120596,1],[120598,120603,1],[120630,120654,1],[120656,120661,1],[120688,120712,1],[120714,120719,1],[120746,120770,1],[120772,120777,1],[120779,122624,1845],[122625,122633,1],[122635,122654,1],[122661,122666,1],[125218,125251,1]];static foldLl=[[65,90,1],[192,214,1],[216,222,1],[256,302,2],[306,310,2],[313,327,2],[330,376,2],[377,381,2],[385,386,1],[388,390,2],[391,393,2],[394,395,1],[398,401,1],[403,404,1],[406,408,1],[412,413,1],[415,416,1],[418,422,2],[423,425,2],[428,430,2],[431,433,2],[434,435,1],[437,439,2],[440,444,4],[452,453,1],[455,456,1],[458,459,1],[461,475,2],[478,494,2],[497,498,1],[500,502,2],[503,504,1],[506,562,2],[570,571,1],[573,574,1],[577,579,2],[580,582,1],[584,590,2],[837,880,43],[882,886,4],[895,902,7],[904,906,1],[908,910,2],[911,913,2],[914,929,1],[931,939,1],[975,984,9],[986,1006,2],[1012,1015,3],[1017,1018,1],[1021,1071,1],[1120,1152,2],[1162,1216,2],[1217,1229,2],[1232,1326,2],[1329,1366,1],[4256,4293,1],[4295,4301,6],[5024,5109,1],[7312,7354,1],[7357,7359,1],[7680,7828,2],[7838,7934,2],[7944,7951,1],[7960,7965,1],[7976,7983,1],[7992,7999,1],[8008,8013,1],[8025,8031,2],[8040,8047,1],[8072,8079,1],[8088,8095,1],[8104,8111,1],[8120,8124,1],[8136,8140,1],[8152,8155,1],[8168,8172,1],[8184,8188,1],[8486,8490,4],[8491,8498,7],[8579,11264,2685],[11265,11311,1],[11360,11362,2],[11363,11364,1],[11367,11373,2],[11374,11376,1],[11378,11381,3],[11390,11392,1],[11394,11490,2],[11499,11501,2],[11506,42560,31054],[42562,42604,2],[42624,42650,2],[42786,42798,2],[42802,42862,2],[42873,42877,2],[42878,42886,2],[42891,42893,2],[42896,42898,2],[42902,42922,2],[42923,42926,1],[42928,42932,1],[42934,42948,2],[42949,42951,1],[42953,42960,7],[42966,42968,2],[42997,65313,22316],[65314,65338,1],[66560,66599,1],[66736,66771,1],[66928,66938,1],[66940,66954,1],[66956,66962,1],[66964,66965,1],[68736,68786,1],[71840,71871,1],[93760,93791,1],[125184,125217,1]];static Lm=[[688,705,1],[710,721,1],[736,740,1],[748,750,2],[884,890,6],[1369,1600,231],[1765,1766,1],[2036,2037,1],[2042,2074,32],[2084,2088,4],[2249,2417,168],[3654,3782,128],[4348,6103,1755],[6211,6823,612],[7288,7293,1],[7468,7530,1],[7544,7579,35],[7580,7615,1],[8305,8319,14],[8336,8348,1],[11388,11389,1],[11631,11823,192],[12293,12337,44],[12338,12341,1],[12347,12445,98],[12446,12540,94],[12541,12542,1],[40981,42232,1251],[42233,42237,1],[42508,42623,115],[42652,42653,1],[42775,42783,1],[42864,42888,24],[42994,42996,1],[43e3,43001,1],[43471,43494,23],[43632,43741,109],[43763,43764,1],[43868,43871,1],[43881,65392,21511],[65438,65439,1],[67456,67461,1],[67463,67504,1],[67506,67514,1],[92992,92995,1],[94099,94111,1],[94176,94177,1],[94179,110576,16397],[110577,110579,1],[110581,110587,1],[110589,110590,1],[122928,122989,1],[123191,123197,1],[124139,125259,1120]];static Lo=[[170,186,16],[443,448,5],[449,451,1],[660,1488,828],[1489,1514,1],[1519,1522,1],[1568,1599,1],[1601,1610,1],[1646,1647,1],[1649,1747,1],[1749,1774,25],[1775,1786,11],[1787,1788,1],[1791,1808,17],[1810,1839,1],[1869,1957,1],[1969,1994,25],[1995,2026,1],[2048,2069,1],[2112,2136,1],[2144,2154,1],[2160,2183,1],[2185,2190,1],[2208,2248,1],[2308,2361,1],[2365,2384,19],[2392,2401,1],[2418,2432,1],[2437,2444,1],[2447,2448,1],[2451,2472,1],[2474,2480,1],[2482,2486,4],[2487,2489,1],[2493,2510,17],[2524,2525,1],[2527,2529,1],[2544,2545,1],[2556,2565,9],[2566,2570,1],[2575,2576,1],[2579,2600,1],[2602,2608,1],[2610,2611,1],[2613,2614,1],[2616,2617,1],[2649,2652,1],[2654,2674,20],[2675,2676,1],[2693,2701,1],[2703,2705,1],[2707,2728,1],[2730,2736,1],[2738,2739,1],[2741,2745,1],[2749,2768,19],[2784,2785,1],[2809,2821,12],[2822,2828,1],[2831,2832,1],[2835,2856,1],[2858,2864,1],[2866,2867,1],[2869,2873,1],[2877,2908,31],[2909,2911,2],[2912,2913,1],[2929,2947,18],[2949,2954,1],[2958,2960,1],[2962,2965,1],[2969,2970,1],[2972,2974,2],[2975,2979,4],[2980,2984,4],[2985,2986,1],[2990,3001,1],[3024,3077,53],[3078,3084,1],[3086,3088,1],[3090,3112,1],[3114,3129,1],[3133,3160,27],[3161,3162,1],[3165,3168,3],[3169,3200,31],[3205,3212,1],[3214,3216,1],[3218,3240,1],[3242,3251,1],[3253,3257,1],[3261,3293,32],[3294,3296,2],[3297,3313,16],[3314,3332,18],[3333,3340,1],[3342,3344,1],[3346,3386,1],[3389,3406,17],[3412,3414,1],[3423,3425,1],[3450,3455,1],[3461,3478,1],[3482,3505,1],[3507,3515,1],[3517,3520,3],[3521,3526,1],[3585,3632,1],[3634,3635,1],[3648,3653,1],[3713,3714,1],[3716,3718,2],[3719,3722,1],[3724,3747,1],[3749,3751,2],[3752,3760,1],[3762,3763,1],[3773,3776,3],[3777,3780,1],[3804,3807,1],[3840,3904,64],[3905,3911,1],[3913,3948,1],[3976,3980,1],[4096,4138,1],[4159,4176,17],[4177,4181,1],[4186,4189,1],[4193,4197,4],[4198,4206,8],[4207,4208,1],[4213,4225,1],[4238,4352,114],[4353,4680,1],[4682,4685,1],[4688,4694,1],[4696,4698,2],[4699,4701,1],[4704,4744,1],[4746,4749,1],[4752,4784,1],[4786,4789,1],[4792,4798,1],[4800,4802,2],[4803,4805,1],[4808,4822,1],[4824,4880,1],[4882,4885,1],[4888,4954,1],[4992,5007,1],[5121,5740,1],[5743,5759,1],[5761,5786,1],[5792,5866,1],[5873,5880,1],[5888,5905,1],[5919,5937,1],[5952,5969,1],[5984,5996,1],[5998,6e3,1],[6016,6067,1],[6108,6176,68],[6177,6210,1],[6212,6264,1],[6272,6276,1],[6279,6312,1],[6314,6320,6],[6321,6389,1],[6400,6430,1],[6480,6509,1],[6512,6516,1],[6528,6571,1],[6576,6601,1],[6656,6678,1],[6688,6740,1],[6917,6963,1],[6981,6988,1],[7043,7072,1],[7086,7087,1],[7098,7141,1],[7168,7203,1],[7245,7247,1],[7258,7287,1],[7401,7404,1],[7406,7411,1],[7413,7414,1],[7418,8501,1083],[8502,8504,1],[11568,11623,1],[11648,11670,1],[11680,11686,1],[11688,11694,1],[11696,11702,1],[11704,11710,1],[11712,11718,1],[11720,11726,1],[11728,11734,1],[11736,11742,1],[12294,12348,54],[12353,12438,1],[12447,12449,2],[12450,12538,1],[12543,12549,6],[12550,12591,1],[12593,12686,1],[12704,12735,1],[12784,12799,1],[13312,19903,1],[19968,40980,1],[40982,42124,1],[42192,42231,1],[42240,42507,1],[42512,42527,1],[42538,42539,1],[42606,42656,50],[42657,42725,1],[42895,42999,104],[43003,43009,1],[43011,43013,1],[43015,43018,1],[43020,43042,1],[43072,43123,1],[43138,43187,1],[43250,43255,1],[43259,43261,2],[43262,43274,12],[43275,43301,1],[43312,43334,1],[43360,43388,1],[43396,43442,1],[43488,43492,1],[43495,43503,1],[43514,43518,1],[43520,43560,1],[43584,43586,1],[43588,43595,1],[43616,43631,1],[43633,43638,1],[43642,43646,4],[43647,43695,1],[43697,43701,4],[43702,43705,3],[43706,43709,1],[43712,43714,2],[43739,43740,1],[43744,43754,1],[43762,43777,15],[43778,43782,1],[43785,43790,1],[43793,43798,1],[43808,43814,1],[43816,43822,1],[43968,44002,1],[44032,55203,1],[55216,55238,1],[55243,55291,1],[63744,64109,1],[64112,64217,1],[64285,64287,2],[64288,64296,1],[64298,64310,1],[64312,64316,1],[64318,64320,2],[64321,64323,2],[64324,64326,2],[64327,64433,1],[64467,64829,1],[64848,64911,1],[64914,64967,1],[65008,65019,1],[65136,65140,1],[65142,65276,1],[65382,65391,1],[65393,65437,1],[65440,65470,1],[65474,65479,1],[65482,65487,1],[65490,65495,1],[65498,65500,1],[65536,65547,1],[65549,65574,1],[65576,65594,1],[65596,65597,1],[65599,65613,1],[65616,65629,1],[65664,65786,1],[66176,66204,1],[66208,66256,1],[66304,66335,1],[66349,66368,1],[66370,66377,1],[66384,66421,1],[66432,66461,1],[66464,66499,1],[66504,66511,1],[66640,66717,1],[66816,66855,1],[66864,66915,1],[67072,67382,1],[67392,67413,1],[67424,67431,1],[67584,67589,1],[67592,67594,2],[67595,67637,1],[67639,67640,1],[67644,67647,3],[67648,67669,1],[67680,67702,1],[67712,67742,1],[67808,67826,1],[67828,67829,1],[67840,67861,1],[67872,67897,1],[67968,68023,1],[68030,68031,1],[68096,68112,16],[68113,68115,1],[68117,68119,1],[68121,68149,1],[68192,68220,1],[68224,68252,1],[68288,68295,1],[68297,68324,1],[68352,68405,1],[68416,68437,1],[68448,68466,1],[68480,68497,1],[68608,68680,1],[68864,68899,1],[69248,69289,1],[69296,69297,1],[69376,69404,1],[69415,69424,9],[69425,69445,1],[69488,69505,1],[69552,69572,1],[69600,69622,1],[69635,69687,1],[69745,69746,1],[69749,69763,14],[69764,69807,1],[69840,69864,1],[69891,69926,1],[69956,69959,3],[69968,70002,1],[70006,70019,13],[70020,70066,1],[70081,70084,1],[70106,70108,2],[70144,70161,1],[70163,70187,1],[70207,70208,1],[70272,70278,1],[70280,70282,2],[70283,70285,1],[70287,70301,1],[70303,70312,1],[70320,70366,1],[70405,70412,1],[70415,70416,1],[70419,70440,1],[70442,70448,1],[70450,70451,1],[70453,70457,1],[70461,70480,19],[70493,70497,1],[70656,70708,1],[70727,70730,1],[70751,70753,1],[70784,70831,1],[70852,70853,1],[70855,71040,185],[71041,71086,1],[71128,71131,1],[71168,71215,1],[71236,71296,60],[71297,71338,1],[71352,71424,72],[71425,71450,1],[71488,71494,1],[71680,71723,1],[71935,71942,1],[71945,71948,3],[71949,71955,1],[71957,71958,1],[71960,71983,1],[71999,72001,2],[72096,72103,1],[72106,72144,1],[72161,72163,2],[72192,72203,11],[72204,72242,1],[72250,72272,22],[72284,72329,1],[72349,72368,19],[72369,72440,1],[72704,72712,1],[72714,72750,1],[72768,72818,50],[72819,72847,1],[72960,72966,1],[72968,72969,1],[72971,73008,1],[73030,73056,26],[73057,73061,1],[73063,73064,1],[73066,73097,1],[73112,73440,328],[73441,73458,1],[73474,73476,2],[73477,73488,1],[73490,73523,1],[73648,73728,80],[73729,74649,1],[74880,75075,1],[77712,77808,1],[77824,78895,1],[78913,78918,1],[82944,83526,1],[92160,92728,1],[92736,92766,1],[92784,92862,1],[92880,92909,1],[92928,92975,1],[93027,93047,1],[93053,93071,1],[93952,94026,1],[94032,94208,176],[94209,100343,1],[100352,101589,1],[101632,101640,1],[110592,110882,1],[110898,110928,30],[110929,110930,1],[110933,110948,15],[110949,110951,1],[110960,111355,1],[113664,113770,1],[113776,113788,1],[113792,113800,1],[113808,113817,1],[122634,123136,502],[123137,123180,1],[123214,123536,322],[123537,123565,1],[123584,123627,1],[124112,124138,1],[124896,124902,1],[124904,124907,1],[124909,124910,1],[124912,124926,1],[124928,125124,1],[126464,126467,1],[126469,126495,1],[126497,126498,1],[126500,126503,3],[126505,126514,1],[126516,126519,1],[126521,126523,2],[126530,126535,5],[126537,126541,2],[126542,126543,1],[126545,126546,1],[126548,126551,3],[126553,126561,2],[126562,126564,2],[126567,126570,1],[126572,126578,1],[126580,126583,1],[126585,126588,1],[126590,126592,2],[126593,126601,1],[126603,126619,1],[126625,126627,1],[126629,126633,1],[126635,126651,1],[131072,173791,1],[173824,177977,1],[177984,178205,1],[178208,183969,1],[183984,191456,1],[191472,192093,1],[194560,195101,1],[196608,201546,1],[201552,205743,1]];static Lt=[[453,459,3],[498,8072,7574],[8073,8079,1],[8088,8095,1],[8104,8111,1],[8124,8140,16],[8188,8188,1]];static foldLt=[[452,454,2],[455,457,2],[458,460,2],[497,499,2],[8064,8071,1],[8080,8087,1],[8096,8103,1],[8115,8131,16],[8179,8179,1]];static Lu=[[65,90,1],[192,214,1],[216,222,1],[256,310,2],[313,327,2],[330,376,2],[377,381,2],[385,386,1],[388,390,2],[391,393,2],[394,395,1],[398,401,1],[403,404,1],[406,408,1],[412,413,1],[415,416,1],[418,422,2],[423,425,2],[428,430,2],[431,433,2],[434,435,1],[437,439,2],[440,444,4],[452,461,3],[463,475,2],[478,494,2],[497,500,3],[502,504,1],[506,562,2],[570,571,1],[573,574,1],[577,579,2],[580,582,1],[584,590,2],[880,882,2],[886,895,9],[902,904,2],[905,906,1],[908,910,2],[911,913,2],[914,929,1],[931,939,1],[975,978,3],[979,980,1],[984,1006,2],[1012,1015,3],[1017,1018,1],[1021,1071,1],[1120,1152,2],[1162,1216,2],[1217,1229,2],[1232,1326,2],[1329,1366,1],[4256,4293,1],[4295,4301,6],[5024,5109,1],[7312,7354,1],[7357,7359,1],[7680,7828,2],[7838,7934,2],[7944,7951,1],[7960,7965,1],[7976,7983,1],[7992,7999,1],[8008,8013,1],[8025,8031,2],[8040,8047,1],[8120,8123,1],[8136,8139,1],[8152,8155,1],[8168,8172,1],[8184,8187,1],[8450,8455,5],[8459,8461,1],[8464,8466,1],[8469,8473,4],[8474,8477,1],[8484,8490,2],[8491,8493,1],[8496,8499,1],[8510,8511,1],[8517,8579,62],[11264,11311,1],[11360,11362,2],[11363,11364,1],[11367,11373,2],[11374,11376,1],[11378,11381,3],[11390,11392,1],[11394,11490,2],[11499,11501,2],[11506,42560,31054],[42562,42604,2],[42624,42650,2],[42786,42798,2],[42802,42862,2],[42873,42877,2],[42878,42886,2],[42891,42893,2],[42896,42898,2],[42902,42922,2],[42923,42926,1],[42928,42932,1],[42934,42948,2],[42949,42951,1],[42953,42960,7],[42966,42968,2],[42997,65313,22316],[65314,65338,1],[66560,66599,1],[66736,66771,1],[66928,66938,1],[66940,66954,1],[66956,66962,1],[66964,66965,1],[68736,68786,1],[71840,71871,1],[93760,93791,1],[119808,119833,1],[119860,119885,1],[119912,119937,1],[119964,119966,2],[119967,119973,3],[119974,119977,3],[119978,119980,1],[119982,119989,1],[120016,120041,1],[120068,120069,1],[120071,120074,1],[120077,120084,1],[120086,120092,1],[120120,120121,1],[120123,120126,1],[120128,120132,1],[120134,120138,4],[120139,120144,1],[120172,120197,1],[120224,120249,1],[120276,120301,1],[120328,120353,1],[120380,120405,1],[120432,120457,1],[120488,120512,1],[120546,120570,1],[120604,120628,1],[120662,120686,1],[120720,120744,1],[120778,125184,4406],[125185,125217,1]];static Upper=this.Lu;static foldLu=[[97,122,1],[181,223,42],[224,246,1],[248,255,1],[257,303,2],[307,311,2],[314,328,2],[331,375,2],[378,382,2],[383,384,1],[387,389,2],[392,396,4],[402,405,3],[409,410,1],[414,417,3],[419,421,2],[424,429,5],[432,436,4],[438,441,3],[445,447,2],[453,454,1],[456,457,1],[459,460,1],[462,476,2],[477,495,2],[498,499,1],[501,505,4],[507,543,2],[547,563,2],[572,575,3],[576,578,2],[583,591,2],[592,596,1],[598,599,1],[601,603,2],[604,608,4],[609,613,2],[614,616,2],[617,620,1],[623,625,2],[626,629,3],[637,640,3],[642,643,1],[647,652,1],[658,669,11],[670,837,167],[881,883,2],[887,891,4],[892,893,1],[940,943,1],[945,974,1],[976,977,1],[981,983,1],[985,1007,2],[1008,1011,1],[1013,1019,3],[1072,1119,1],[1121,1153,2],[1163,1215,2],[1218,1230,2],[1231,1327,2],[1377,1414,1],[4304,4346,1],[4349,4351,1],[5112,5117,1],[7296,7304,1],[7545,7549,4],[7566,7681,115],[7683,7829,2],[7835,7841,6],[7843,7935,2],[7936,7943,1],[7952,7957,1],[7968,7975,1],[7984,7991,1],[8e3,8005,1],[8017,8023,2],[8032,8039,1],[8048,8061,1],[8112,8113,1],[8126,8144,18],[8145,8160,15],[8161,8165,4],[8526,8580,54],[11312,11359,1],[11361,11365,4],[11366,11372,2],[11379,11382,3],[11393,11491,2],[11500,11502,2],[11507,11520,13],[11521,11557,1],[11559,11565,6],[42561,42605,2],[42625,42651,2],[42787,42799,2],[42803,42863,2],[42874,42876,2],[42879,42887,2],[42892,42897,5],[42899,42900,1],[42903,42921,2],[42933,42947,2],[42952,42954,2],[42961,42967,6],[42969,42998,29],[43859,43888,29],[43889,43967,1],[65345,65370,1],[66600,66639,1],[66776,66811,1],[66967,66977,1],[66979,66993,1],[66995,67001,1],[67003,67004,1],[68800,68850,1],[71872,71903,1],[93792,93823,1],[125218,125251,1]];static M=[[768,879,1],[1155,1161,1],[1425,1469,1],[1471,1473,2],[1474,1476,2],[1477,1479,2],[1552,1562,1],[1611,1631,1],[1648,1750,102],[1751,1756,1],[1759,1764,1],[1767,1768,1],[1770,1773,1],[1809,1840,31],[1841,1866,1],[1958,1968,1],[2027,2035,1],[2045,2070,25],[2071,2073,1],[2075,2083,1],[2085,2087,1],[2089,2093,1],[2137,2139,1],[2200,2207,1],[2250,2273,1],[2275,2307,1],[2362,2364,1],[2366,2383,1],[2385,2391,1],[2402,2403,1],[2433,2435,1],[2492,2494,2],[2495,2500,1],[2503,2504,1],[2507,2509,1],[2519,2530,11],[2531,2558,27],[2561,2563,1],[2620,2622,2],[2623,2626,1],[2631,2632,1],[2635,2637,1],[2641,2672,31],[2673,2677,4],[2689,2691,1],[2748,2750,2],[2751,2757,1],[2759,2761,1],[2763,2765,1],[2786,2787,1],[2810,2815,1],[2817,2819,1],[2876,2878,2],[2879,2884,1],[2887,2888,1],[2891,2893,1],[2901,2903,1],[2914,2915,1],[2946,3006,60],[3007,3010,1],[3014,3016,1],[3018,3021,1],[3031,3072,41],[3073,3076,1],[3132,3134,2],[3135,3140,1],[3142,3144,1],[3146,3149,1],[3157,3158,1],[3170,3171,1],[3201,3203,1],[3260,3262,2],[3263,3268,1],[3270,3272,1],[3274,3277,1],[3285,3286,1],[3298,3299,1],[3315,3328,13],[3329,3331,1],[3387,3388,1],[3390,3396,1],[3398,3400,1],[3402,3405,1],[3415,3426,11],[3427,3457,30],[3458,3459,1],[3530,3535,5],[3536,3540,1],[3542,3544,2],[3545,3551,1],[3570,3571,1],[3633,3636,3],[3637,3642,1],[3655,3662,1],[3761,3764,3],[3765,3772,1],[3784,3790,1],[3864,3865,1],[3893,3897,2],[3902,3903,1],[3953,3972,1],[3974,3975,1],[3981,3991,1],[3993,4028,1],[4038,4139,101],[4140,4158,1],[4182,4185,1],[4190,4192,1],[4194,4196,1],[4199,4205,1],[4209,4212,1],[4226,4237,1],[4239,4250,11],[4251,4253,1],[4957,4959,1],[5906,5909,1],[5938,5940,1],[5970,5971,1],[6002,6003,1],[6068,6099,1],[6109,6155,46],[6156,6157,1],[6159,6277,118],[6278,6313,35],[6432,6443,1],[6448,6459,1],[6679,6683,1],[6741,6750,1],[6752,6780,1],[6783,6832,49],[6833,6862,1],[6912,6916,1],[6964,6980,1],[7019,7027,1],[7040,7042,1],[7073,7085,1],[7142,7155,1],[7204,7223,1],[7376,7378,1],[7380,7400,1],[7405,7412,7],[7415,7417,1],[7616,7679,1],[8400,8432,1],[11503,11505,1],[11647,11744,97],[11745,11775,1],[12330,12335,1],[12441,12442,1],[42607,42610,1],[42612,42621,1],[42654,42655,1],[42736,42737,1],[43010,43014,4],[43019,43043,24],[43044,43047,1],[43052,43136,84],[43137,43188,51],[43189,43205,1],[43232,43249,1],[43263,43302,39],[43303,43309,1],[43335,43347,1],[43392,43395,1],[43443,43456,1],[43493,43561,68],[43562,43574,1],[43587,43596,9],[43597,43643,46],[43644,43645,1],[43696,43698,2],[43699,43700,1],[43703,43704,1],[43710,43711,1],[43713,43755,42],[43756,43759,1],[43765,43766,1],[44003,44010,1],[44012,44013,1],[64286,65024,738],[65025,65039,1],[65056,65071,1],[66045,66272,227],[66422,66426,1],[68097,68099,1],[68101,68102,1],[68108,68111,1],[68152,68154,1],[68159,68325,166],[68326,68900,574],[68901,68903,1],[69291,69292,1],[69373,69375,1],[69446,69456,1],[69506,69509,1],[69632,69634,1],[69688,69702,1],[69744,69747,3],[69748,69759,11],[69760,69762,1],[69808,69818,1],[69826,69888,62],[69889,69890,1],[69927,69940,1],[69957,69958,1],[70003,70016,13],[70017,70018,1],[70067,70080,1],[70089,70092,1],[70094,70095,1],[70188,70199,1],[70206,70209,3],[70367,70378,1],[70400,70403,1],[70459,70460,1],[70462,70468,1],[70471,70472,1],[70475,70477,1],[70487,70498,11],[70499,70502,3],[70503,70508,1],[70512,70516,1],[70709,70726,1],[70750,70832,82],[70833,70851,1],[71087,71093,1],[71096,71104,1],[71132,71133,1],[71216,71232,1],[71339,71351,1],[71453,71467,1],[71724,71738,1],[71984,71989,1],[71991,71992,1],[71995,71998,1],[72e3,72002,2],[72003,72145,142],[72146,72151,1],[72154,72160,1],[72164,72193,29],[72194,72202,1],[72243,72249,1],[72251,72254,1],[72263,72273,10],[72274,72283,1],[72330,72345,1],[72751,72758,1],[72760,72767,1],[72850,72871,1],[72873,72886,1],[73009,73014,1],[73018,73020,2],[73021,73023,2],[73024,73029,1],[73031,73098,67],[73099,73102,1],[73104,73105,1],[73107,73111,1],[73459,73462,1],[73472,73473,1],[73475,73524,49],[73525,73530,1],[73534,73538,1],[78912,78919,7],[78920,78933,1],[92912,92916,1],[92976,92982,1],[94031,94033,2],[94034,94087,1],[94095,94098,1],[94180,94192,12],[94193,113821,19628],[113822,118528,4706],[118529,118573,1],[118576,118598,1],[119141,119145,1],[119149,119154,1],[119163,119170,1],[119173,119179,1],[119210,119213,1],[119362,119364,1],[121344,121398,1],[121403,121452,1],[121461,121476,15],[121499,121503,1],[121505,121519,1],[122880,122886,1],[122888,122904,1],[122907,122913,1],[122915,122916,1],[122918,122922,1],[123023,123184,161],[123185,123190,1],[123566,123628,62],[123629,123631,1],[124140,124143,1],[125136,125142,1],[125252,125258,1],[917760,917999,1]];static foldM=[[921,953,32],[8126,8126,1]];static Mc=[[2307,2363,56],[2366,2368,1],[2377,2380,1],[2382,2383,1],[2434,2435,1],[2494,2496,1],[2503,2504,1],[2507,2508,1],[2519,2563,44],[2622,2624,1],[2691,2750,59],[2751,2752,1],[2761,2763,2],[2764,2818,54],[2819,2878,59],[2880,2887,7],[2888,2891,3],[2892,2903,11],[3006,3007,1],[3009,3010,1],[3014,3016,1],[3018,3020,1],[3031,3073,42],[3074,3075,1],[3137,3140,1],[3202,3203,1],[3262,3264,2],[3265,3268,1],[3271,3272,1],[3274,3275,1],[3285,3286,1],[3315,3330,15],[3331,3390,59],[3391,3392,1],[3398,3400,1],[3402,3404,1],[3415,3458,43],[3459,3535,76],[3536,3537,1],[3544,3551,1],[3570,3571,1],[3902,3903,1],[3967,4139,172],[4140,4145,5],[4152,4155,3],[4156,4182,26],[4183,4194,11],[4195,4196,1],[4199,4205,1],[4227,4228,1],[4231,4236,1],[4239,4250,11],[4251,4252,1],[5909,5940,31],[6070,6078,8],[6079,6085,1],[6087,6088,1],[6435,6438,1],[6441,6443,1],[6448,6449,1],[6451,6456,1],[6681,6682,1],[6741,6743,2],[6753,6755,2],[6756,6765,9],[6766,6770,1],[6916,6965,49],[6971,6973,2],[6974,6977,1],[6979,6980,1],[7042,7073,31],[7078,7079,1],[7082,7143,61],[7146,7148,1],[7150,7154,4],[7155,7204,49],[7205,7211,1],[7220,7221,1],[7393,7415,22],[12334,12335,1],[43043,43044,1],[43047,43136,89],[43137,43188,51],[43189,43203,1],[43346,43347,1],[43395,43444,49],[43445,43450,5],[43451,43454,3],[43455,43456,1],[43567,43568,1],[43571,43572,1],[43597,43643,46],[43645,43755,110],[43758,43759,1],[43765,44003,238],[44004,44006,2],[44007,44009,2],[44010,44012,2],[69632,69634,2],[69762,69808,46],[69809,69810,1],[69815,69816,1],[69932,69957,25],[69958,70018,60],[70067,70069,1],[70079,70080,1],[70094,70188,94],[70189,70190,1],[70194,70195,1],[70197,70368,171],[70369,70370,1],[70402,70403,1],[70462,70463,1],[70465,70468,1],[70471,70472,1],[70475,70477,1],[70487,70498,11],[70499,70709,210],[70710,70711,1],[70720,70721,1],[70725,70832,107],[70833,70834,1],[70841,70843,2],[70844,70846,1],[70849,71087,238],[71088,71089,1],[71096,71099,1],[71102,71216,114],[71217,71218,1],[71227,71228,1],[71230,71340,110],[71342,71343,1],[71350,71456,106],[71457,71462,5],[71724,71726,1],[71736,71984,248],[71985,71989,1],[71991,71992,1],[71997,72e3,3],[72002,72145,143],[72146,72147,1],[72156,72159,1],[72164,72249,85],[72279,72280,1],[72343,72751,408],[72766,72873,107],[72881,72884,3],[73098,73102,1],[73107,73108,1],[73110,73461,351],[73462,73475,13],[73524,73525,1],[73534,73535,1],[73537,94033,20496],[94034,94087,1],[94192,94193,1],[119141,119142,1],[119149,119154,1]];static Me=[[1160,1161,1],[6846,8413,1567],[8414,8416,1],[8418,8420,1],[42608,42610,1]];static Mn=[[768,879,1],[1155,1159,1],[1425,1469,1],[1471,1473,2],[1474,1476,2],[1477,1479,2],[1552,1562,1],[1611,1631,1],[1648,1750,102],[1751,1756,1],[1759,1764,1],[1767,1768,1],[1770,1773,1],[1809,1840,31],[1841,1866,1],[1958,1968,1],[2027,2035,1],[2045,2070,25],[2071,2073,1],[2075,2083,1],[2085,2087,1],[2089,2093,1],[2137,2139,1],[2200,2207,1],[2250,2273,1],[2275,2306,1],[2362,2364,2],[2369,2376,1],[2381,2385,4],[2386,2391,1],[2402,2403,1],[2433,2492,59],[2497,2500,1],[2509,2530,21],[2531,2558,27],[2561,2562,1],[2620,2625,5],[2626,2631,5],[2632,2635,3],[2636,2637,1],[2641,2672,31],[2673,2677,4],[2689,2690,1],[2748,2753,5],[2754,2757,1],[2759,2760,1],[2765,2786,21],[2787,2810,23],[2811,2815,1],[2817,2876,59],[2879,2881,2],[2882,2884,1],[2893,2901,8],[2902,2914,12],[2915,2946,31],[3008,3021,13],[3072,3076,4],[3132,3134,2],[3135,3136,1],[3142,3144,1],[3146,3149,1],[3157,3158,1],[3170,3171,1],[3201,3260,59],[3263,3270,7],[3276,3277,1],[3298,3299,1],[3328,3329,1],[3387,3388,1],[3393,3396,1],[3405,3426,21],[3427,3457,30],[3530,3538,8],[3539,3540,1],[3542,3633,91],[3636,3642,1],[3655,3662,1],[3761,3764,3],[3765,3772,1],[3784,3790,1],[3864,3865,1],[3893,3897,2],[3953,3966,1],[3968,3972,1],[3974,3975,1],[3981,3991,1],[3993,4028,1],[4038,4141,103],[4142,4144,1],[4146,4151,1],[4153,4154,1],[4157,4158,1],[4184,4185,1],[4190,4192,1],[4209,4212,1],[4226,4229,3],[4230,4237,7],[4253,4957,704],[4958,4959,1],[5906,5908,1],[5938,5939,1],[5970,5971,1],[6002,6003,1],[6068,6069,1],[6071,6077,1],[6086,6089,3],[6090,6099,1],[6109,6155,46],[6156,6157,1],[6159,6277,118],[6278,6313,35],[6432,6434,1],[6439,6440,1],[6450,6457,7],[6458,6459,1],[6679,6680,1],[6683,6742,59],[6744,6750,1],[6752,6754,2],[6757,6764,1],[6771,6780,1],[6783,6832,49],[6833,6845,1],[6847,6862,1],[6912,6915,1],[6964,6966,2],[6967,6970,1],[6972,6978,6],[7019,7027,1],[7040,7041,1],[7074,7077,1],[7080,7081,1],[7083,7085,1],[7142,7144,2],[7145,7149,4],[7151,7153,1],[7212,7219,1],[7222,7223,1],[7376,7378,1],[7380,7392,1],[7394,7400,1],[7405,7412,7],[7416,7417,1],[7616,7679,1],[8400,8412,1],[8417,8421,4],[8422,8432,1],[11503,11505,1],[11647,11744,97],[11745,11775,1],[12330,12333,1],[12441,12442,1],[42607,42612,5],[42613,42621,1],[42654,42655,1],[42736,42737,1],[43010,43014,4],[43019,43045,26],[43046,43052,6],[43204,43205,1],[43232,43249,1],[43263,43302,39],[43303,43309,1],[43335,43345,1],[43392,43394,1],[43443,43446,3],[43447,43449,1],[43452,43453,1],[43493,43561,68],[43562,43566,1],[43569,43570,1],[43573,43574,1],[43587,43596,9],[43644,43696,52],[43698,43700,1],[43703,43704,1],[43710,43711,1],[43713,43756,43],[43757,43766,9],[44005,44008,3],[44013,64286,20273],[65024,65039,1],[65056,65071,1],[66045,66272,227],[66422,66426,1],[68097,68099,1],[68101,68102,1],[68108,68111,1],[68152,68154,1],[68159,68325,166],[68326,68900,574],[68901,68903,1],[69291,69292,1],[69373,69375,1],[69446,69456,1],[69506,69509,1],[69633,69688,55],[69689,69702,1],[69744,69747,3],[69748,69759,11],[69760,69761,1],[69811,69814,1],[69817,69818,1],[69826,69888,62],[69889,69890,1],[69927,69931,1],[69933,69940,1],[70003,70016,13],[70017,70070,53],[70071,70078,1],[70089,70092,1],[70095,70191,96],[70192,70193,1],[70196,70198,2],[70199,70206,7],[70209,70367,158],[70371,70378,1],[70400,70401,1],[70459,70460,1],[70464,70502,38],[70503,70508,1],[70512,70516,1],[70712,70719,1],[70722,70724,1],[70726,70750,24],[70835,70840,1],[70842,70847,5],[70848,70850,2],[70851,71090,239],[71091,71093,1],[71100,71101,1],[71103,71104,1],[71132,71133,1],[71219,71226,1],[71229,71231,2],[71232,71339,107],[71341,71344,3],[71345,71349,1],[71351,71453,102],[71454,71455,1],[71458,71461,1],[71463,71467,1],[71727,71735,1],[71737,71738,1],[71995,71996,1],[71998,72003,5],[72148,72151,1],[72154,72155,1],[72160,72193,33],[72194,72202,1],[72243,72248,1],[72251,72254,1],[72263,72273,10],[72274,72278,1],[72281,72283,1],[72330,72342,1],[72344,72345,1],[72752,72758,1],[72760,72765,1],[72767,72850,83],[72851,72871,1],[72874,72880,1],[72882,72883,1],[72885,72886,1],[73009,73014,1],[73018,73020,2],[73021,73023,2],[73024,73029,1],[73031,73104,73],[73105,73109,4],[73111,73459,348],[73460,73472,12],[73473,73526,53],[73527,73530,1],[73536,73538,2],[78912,78919,7],[78920,78933,1],[92912,92916,1],[92976,92982,1],[94031,94095,64],[94096,94098,1],[94180,113821,19641],[113822,118528,4706],[118529,118573,1],[118576,118598,1],[119143,119145,1],[119163,119170,1],[119173,119179,1],[119210,119213,1],[119362,119364,1],[121344,121398,1],[121403,121452,1],[121461,121476,15],[121499,121503,1],[121505,121519,1],[122880,122886,1],[122888,122904,1],[122907,122913,1],[122915,122916,1],[122918,122922,1],[123023,123184,161],[123185,123190,1],[123566,123628,62],[123629,123631,1],[124140,124143,1],[125136,125142,1],[125252,125258,1],[917760,917999,1]];static foldMn=[[921,953,32],[8126,8126,1]];static N=[[48,57,1],[178,179,1],[185,188,3],[189,190,1],[1632,1641,1],[1776,1785,1],[1984,1993,1],[2406,2415,1],[2534,2543,1],[2548,2553,1],[2662,2671,1],[2790,2799,1],[2918,2927,1],[2930,2935,1],[3046,3058,1],[3174,3183,1],[3192,3198,1],[3302,3311,1],[3416,3422,1],[3430,3448,1],[3558,3567,1],[3664,3673,1],[3792,3801,1],[3872,3891,1],[4160,4169,1],[4240,4249,1],[4969,4988,1],[5870,5872,1],[6112,6121,1],[6128,6137,1],[6160,6169,1],[6470,6479,1],[6608,6618,1],[6784,6793,1],[6800,6809,1],[6992,7001,1],[7088,7097,1],[7232,7241,1],[7248,7257,1],[8304,8308,4],[8309,8313,1],[8320,8329,1],[8528,8578,1],[8581,8585,1],[9312,9371,1],[9450,9471,1],[10102,10131,1],[11517,12295,778],[12321,12329,1],[12344,12346,1],[12690,12693,1],[12832,12841,1],[12872,12879,1],[12881,12895,1],[12928,12937,1],[12977,12991,1],[42528,42537,1],[42726,42735,1],[43056,43061,1],[43216,43225,1],[43264,43273,1],[43472,43481,1],[43504,43513,1],[43600,43609,1],[44016,44025,1],[65296,65305,1],[65799,65843,1],[65856,65912,1],[65930,65931,1],[66273,66299,1],[66336,66339,1],[66369,66378,9],[66513,66517,1],[66720,66729,1],[67672,67679,1],[67705,67711,1],[67751,67759,1],[67835,67839,1],[67862,67867,1],[68028,68029,1],[68032,68047,1],[68050,68095,1],[68160,68168,1],[68221,68222,1],[68253,68255,1],[68331,68335,1],[68440,68447,1],[68472,68479,1],[68521,68527,1],[68858,68863,1],[68912,68921,1],[69216,69246,1],[69405,69414,1],[69457,69460,1],[69573,69579,1],[69714,69743,1],[69872,69881,1],[69942,69951,1],[70096,70105,1],[70113,70132,1],[70384,70393,1],[70736,70745,1],[70864,70873,1],[71248,71257,1],[71360,71369,1],[71472,71483,1],[71904,71922,1],[72016,72025,1],[72784,72812,1],[73040,73049,1],[73120,73129,1],[73552,73561,1],[73664,73684,1],[74752,74862,1],[92768,92777,1],[92864,92873,1],[93008,93017,1],[93019,93025,1],[93824,93846,1],[119488,119507,1],[119520,119539,1],[119648,119672,1],[120782,120831,1],[123200,123209,1],[123632,123641,1],[124144,124153,1],[125127,125135,1],[125264,125273,1],[126065,126123,1],[126125,126127,1],[126129,126132,1],[126209,126253,1],[126255,126269,1],[127232,127244,1],[130032,130041,1]];static Nd=[[48,57,1],[1632,1641,1],[1776,1785,1],[1984,1993,1],[2406,2415,1],[2534,2543,1],[2662,2671,1],[2790,2799,1],[2918,2927,1],[3046,3055,1],[3174,3183,1],[3302,3311,1],[3430,3439,1],[3558,3567,1],[3664,3673,1],[3792,3801,1],[3872,3881,1],[4160,4169,1],[4240,4249,1],[6112,6121,1],[6160,6169,1],[6470,6479,1],[6608,6617,1],[6784,6793,1],[6800,6809,1],[6992,7001,1],[7088,7097,1],[7232,7241,1],[7248,7257,1],[42528,42537,1],[43216,43225,1],[43264,43273,1],[43472,43481,1],[43504,43513,1],[43600,43609,1],[44016,44025,1],[65296,65305,1],[66720,66729,1],[68912,68921,1],[69734,69743,1],[69872,69881,1],[69942,69951,1],[70096,70105,1],[70384,70393,1],[70736,70745,1],[70864,70873,1],[71248,71257,1],[71360,71369,1],[71472,71481,1],[71904,71913,1],[72016,72025,1],[72784,72793,1],[73040,73049,1],[73120,73129,1],[73552,73561,1],[92768,92777,1],[92864,92873,1],[93008,93017,1],[120782,120831,1],[123200,123209,1],[123632,123641,1],[124144,124153,1],[125264,125273,1],[130032,130041,1]];static Nl=[[5870,5872,1],[8544,8578,1],[8581,8584,1],[12295,12321,26],[12322,12329,1],[12344,12346,1],[42726,42735,1],[65856,65908,1],[66369,66378,9],[66513,66517,1],[74752,74862,1]];static No=[[178,179,1],[185,188,3],[189,190,1],[2548,2553,1],[2930,2935,1],[3056,3058,1],[3192,3198,1],[3416,3422,1],[3440,3448,1],[3882,3891,1],[4969,4988,1],[6128,6137,1],[6618,8304,1686],[8308,8313,1],[8320,8329,1],[8528,8543,1],[8585,9312,727],[9313,9371,1],[9450,9471,1],[10102,10131,1],[11517,12690,1173],[12691,12693,1],[12832,12841,1],[12872,12879,1],[12881,12895,1],[12928,12937,1],[12977,12991,1],[43056,43061,1],[65799,65843,1],[65909,65912,1],[65930,65931,1],[66273,66299,1],[66336,66339,1],[67672,67679,1],[67705,67711,1],[67751,67759,1],[67835,67839,1],[67862,67867,1],[68028,68029,1],[68032,68047,1],[68050,68095,1],[68160,68168,1],[68221,68222,1],[68253,68255,1],[68331,68335,1],[68440,68447,1],[68472,68479,1],[68521,68527,1],[68858,68863,1],[69216,69246,1],[69405,69414,1],[69457,69460,1],[69573,69579,1],[69714,69733,1],[70113,70132,1],[71482,71483,1],[71914,71922,1],[72794,72812,1],[73664,73684,1],[93019,93025,1],[93824,93846,1],[119488,119507,1],[119520,119539,1],[119648,119672,1],[125127,125135,1],[126065,126123,1],[126125,126127,1],[126129,126132,1],[126209,126253,1],[126255,126269,1],[127232,127244,1]];static P=[[33,35,1],[37,42,1],[44,47,1],[58,59,1],[63,64,1],[91,93,1],[95,123,28],[125,161,36],[167,171,4],[182,183,1],[187,191,4],[894,903,9],[1370,1375,1],[1417,1418,1],[1470,1472,2],[1475,1478,3],[1523,1524,1],[1545,1546,1],[1548,1549,1],[1563,1565,2],[1566,1567,1],[1642,1645,1],[1748,1792,44],[1793,1805,1],[2039,2041,1],[2096,2110,1],[2142,2404,262],[2405,2416,11],[2557,2678,121],[2800,3191,391],[3204,3572,368],[3663,3674,11],[3675,3844,169],[3845,3858,1],[3860,3898,38],[3899,3901,1],[3973,4048,75],[4049,4052,1],[4057,4058,1],[4170,4175,1],[4347,4960,613],[4961,4968,1],[5120,5742,622],[5787,5788,1],[5867,5869,1],[5941,5942,1],[6100,6102,1],[6104,6106,1],[6144,6154,1],[6468,6469,1],[6686,6687,1],[6816,6822,1],[6824,6829,1],[7002,7008,1],[7037,7038,1],[7164,7167,1],[7227,7231,1],[7294,7295,1],[7360,7367,1],[7379,8208,829],[8209,8231,1],[8240,8259,1],[8261,8273,1],[8275,8286,1],[8317,8318,1],[8333,8334,1],[8968,8971,1],[9001,9002,1],[10088,10101,1],[10181,10182,1],[10214,10223,1],[10627,10648,1],[10712,10715,1],[10748,10749,1],[11513,11516,1],[11518,11519,1],[11632,11776,144],[11777,11822,1],[11824,11855,1],[11858,11869,1],[12289,12291,1],[12296,12305,1],[12308,12319,1],[12336,12349,13],[12448,12539,91],[42238,42239,1],[42509,42511,1],[42611,42622,11],[42738,42743,1],[43124,43127,1],[43214,43215,1],[43256,43258,1],[43260,43310,50],[43311,43359,48],[43457,43469,1],[43486,43487,1],[43612,43615,1],[43742,43743,1],[43760,43761,1],[44011,64830,20819],[64831,65040,209],[65041,65049,1],[65072,65106,1],[65108,65121,1],[65123,65128,5],[65130,65131,1],[65281,65283,1],[65285,65290,1],[65292,65295,1],[65306,65307,1],[65311,65312,1],[65339,65341,1],[65343,65371,28],[65373,65375,2],[65376,65381,1],[65792,65794,1],[66463,66512,49],[66927,67671,744],[67871,67903,32],[68176,68184,1],[68223,68336,113],[68337,68342,1],[68409,68415,1],[68505,68508,1],[69293,69461,168],[69462,69465,1],[69510,69513,1],[69703,69709,1],[69819,69820,1],[69822,69825,1],[69952,69955,1],[70004,70005,1],[70085,70088,1],[70093,70107,14],[70109,70111,1],[70200,70205,1],[70313,70731,418],[70732,70735,1],[70746,70747,1],[70749,70854,105],[71105,71127,1],[71233,71235,1],[71264,71276,1],[71353,71484,131],[71485,71486,1],[71739,72004,265],[72005,72006,1],[72162,72255,93],[72256,72262,1],[72346,72348,1],[72350,72354,1],[72448,72457,1],[72769,72773,1],[72816,72817,1],[73463,73464,1],[73539,73551,1],[73727,74864,1137],[74865,74868,1],[77809,77810,1],[92782,92783,1],[92917,92983,66],[92984,92987,1],[92996,93847,851],[93848,93850,1],[94178,113823,19645],[121479,121483,1],[125278,125279,1]];static Pc=[[95,8255,8160],[8256,8276,20],[65075,65076,1],[65101,65103,1],[65343,65343,1]];static Pd=[[45,1418,1373],[1470,5120,3650],[6150,8208,2058],[8209,8213,1],[11799,11802,3],[11834,11835,1],[11840,11869,29],[12316,12336,20],[12448,65073,52625],[65074,65112,38],[65123,65293,170],[69293,69293,1]];static Pe=[[41,93,52],[125,3899,3774],[3901,5788,1887],[8262,8318,56],[8334,8969,635],[8971,9002,31],[10089,10101,2],[10182,10215,33],[10217,10223,2],[10628,10648,2],[10713,10715,2],[10749,11811,1062],[11813,11817,2],[11862,11868,2],[12297,12305,2],[12309,12315,2],[12318,12319,1],[64830,65048,218],[65078,65092,2],[65096,65114,18],[65116,65118,2],[65289,65341,52],[65373,65379,3]];static Pf=[[187,8217,8030],[8221,8250,29],[11779,11781,2],[11786,11789,3],[11805,11809,4]];static Pi=[[171,8216,8045],[8219,8220,1],[8223,8249,26],[11778,11780,2],[11785,11788,3],[11804,11808,4]];static Po=[[33,35,1],[37,39,1],[42,46,2],[47,58,11],[59,63,4],[64,92,28],[161,167,6],[182,183,1],[191,894,703],[903,1370,467],[1371,1375,1],[1417,1472,55],[1475,1478,3],[1523,1524,1],[1545,1546,1],[1548,1549,1],[1563,1565,2],[1566,1567,1],[1642,1645,1],[1748,1792,44],[1793,1805,1],[2039,2041,1],[2096,2110,1],[2142,2404,262],[2405,2416,11],[2557,2678,121],[2800,3191,391],[3204,3572,368],[3663,3674,11],[3675,3844,169],[3845,3858,1],[3860,3973,113],[4048,4052,1],[4057,4058,1],[4170,4175,1],[4347,4960,613],[4961,4968,1],[5742,5867,125],[5868,5869,1],[5941,5942,1],[6100,6102,1],[6104,6106,1],[6144,6149,1],[6151,6154,1],[6468,6469,1],[6686,6687,1],[6816,6822,1],[6824,6829,1],[7002,7008,1],[7037,7038,1],[7164,7167,1],[7227,7231,1],[7294,7295,1],[7360,7367,1],[7379,8214,835],[8215,8224,9],[8225,8231,1],[8240,8248,1],[8251,8254,1],[8257,8259,1],[8263,8273,1],[8275,8277,2],[8278,8286,1],[11513,11516,1],[11518,11519,1],[11632,11776,144],[11777,11782,5],[11783,11784,1],[11787,11790,3],[11791,11798,1],[11800,11801,1],[11803,11806,3],[11807,11818,11],[11819,11822,1],[11824,11833,1],[11836,11839,1],[11841,11843,2],[11844,11855,1],[11858,11860,1],[12289,12291,1],[12349,12539,190],[42238,42239,1],[42509,42511,1],[42611,42622,11],[42738,42743,1],[43124,43127,1],[43214,43215,1],[43256,43258,1],[43260,43310,50],[43311,43359,48],[43457,43469,1],[43486,43487,1],[43612,43615,1],[43742,43743,1],[43760,43761,1],[44011,65040,21029],[65041,65046,1],[65049,65072,23],[65093,65094,1],[65097,65100,1],[65104,65106,1],[65108,65111,1],[65119,65121,1],[65128,65130,2],[65131,65281,150],[65282,65283,1],[65285,65287,1],[65290,65294,2],[65295,65306,11],[65307,65311,4],[65312,65340,28],[65377,65380,3],[65381,65792,411],[65793,65794,1],[66463,66512,49],[66927,67671,744],[67871,67903,32],[68176,68184,1],[68223,68336,113],[68337,68342,1],[68409,68415,1],[68505,68508,1],[69461,69465,1],[69510,69513,1],[69703,69709,1],[69819,69820,1],[69822,69825,1],[69952,69955,1],[70004,70005,1],[70085,70088,1],[70093,70107,14],[70109,70111,1],[70200,70205,1],[70313,70731,418],[70732,70735,1],[70746,70747,1],[70749,70854,105],[71105,71127,1],[71233,71235,1],[71264,71276,1],[71353,71484,131],[71485,71486,1],[71739,72004,265],[72005,72006,1],[72162,72255,93],[72256,72262,1],[72346,72348,1],[72350,72354,1],[72448,72457,1],[72769,72773,1],[72816,72817,1],[73463,73464,1],[73539,73551,1],[73727,74864,1137],[74865,74868,1],[77809,77810,1],[92782,92783,1],[92917,92983,66],[92984,92987,1],[92996,93847,851],[93848,93850,1],[94178,113823,19645],[121479,121483,1],[125278,125279,1]];static Ps=[[40,91,51],[123,3898,3775],[3900,5787,1887],[8218,8222,4],[8261,8317,56],[8333,8968,635],[8970,9001,31],[10088,10100,2],[10181,10214,33],[10216,10222,2],[10627,10647,2],[10712,10714,2],[10748,11810,1062],[11812,11816,2],[11842,11861,19],[11863,11867,2],[12296,12304,2],[12308,12314,2],[12317,64831,52514],[65047,65077,30],[65079,65091,2],[65095,65113,18],[65115,65117,2],[65288,65339,51],[65371,65375,4],[65378,65378,1]];static S=[[36,43,7],[60,62,1],[94,96,2],[124,126,2],[162,166,1],[168,169,1],[172,174,2],[175,177,1],[180,184,4],[215,247,32],[706,709,1],[722,735,1],[741,747,1],[749,751,2],[752,767,1],[885,900,15],[901,1014,113],[1154,1421,267],[1422,1423,1],[1542,1544,1],[1547,1550,3],[1551,1758,207],[1769,1789,20],[1790,2038,248],[2046,2047,1],[2184,2546,362],[2547,2554,7],[2555,2801,246],[2928,3059,131],[3060,3066,1],[3199,3407,208],[3449,3647,198],[3841,3843,1],[3859,3861,2],[3862,3863,1],[3866,3871,1],[3892,3896,2],[4030,4037,1],[4039,4044,1],[4046,4047,1],[4053,4056,1],[4254,4255,1],[5008,5017,1],[5741,6107,366],[6464,6622,158],[6623,6655,1],[7009,7018,1],[7028,7036,1],[8125,8127,2],[8128,8129,1],[8141,8143,1],[8157,8159,1],[8173,8175,1],[8189,8190,1],[8260,8274,14],[8314,8316,1],[8330,8332,1],[8352,8384,1],[8448,8449,1],[8451,8454,1],[8456,8457,1],[8468,8470,2],[8471,8472,1],[8478,8483,1],[8485,8489,2],[8494,8506,12],[8507,8512,5],[8513,8516,1],[8522,8525,1],[8527,8586,59],[8587,8592,5],[8593,8967,1],[8972,9e3,1],[9003,9254,1],[9280,9290,1],[9372,9449,1],[9472,10087,1],[10132,10180,1],[10183,10213,1],[10224,10626,1],[10649,10711,1],[10716,10747,1],[10750,11123,1],[11126,11157,1],[11159,11263,1],[11493,11498,1],[11856,11857,1],[11904,11929,1],[11931,12019,1],[12032,12245,1],[12272,12287,1],[12292,12306,14],[12307,12320,13],[12342,12343,1],[12350,12351,1],[12443,12444,1],[12688,12689,1],[12694,12703,1],[12736,12771,1],[12783,12800,17],[12801,12830,1],[12842,12871,1],[12880,12896,16],[12897,12927,1],[12938,12976,1],[12992,13311,1],[19904,19967,1],[42128,42182,1],[42752,42774,1],[42784,42785,1],[42889,42890,1],[43048,43051,1],[43062,43065,1],[43639,43641,1],[43867,43882,15],[43883,64297,20414],[64434,64450,1],[64832,64847,1],[64975,65020,45],[65021,65023,1],[65122,65124,2],[65125,65126,1],[65129,65284,155],[65291,65308,17],[65309,65310,1],[65342,65344,2],[65372,65374,2],[65504,65510,1],[65512,65518,1],[65532,65533,1],[65847,65855,1],[65913,65929,1],[65932,65934,1],[65936,65948,1],[65952,66e3,48],[66001,66044,1],[67703,67704,1],[68296,71487,3191],[73685,73713,1],[92988,92991,1],[92997,113820,20823],[118608,118723,1],[118784,119029,1],[119040,119078,1],[119081,119140,1],[119146,119148,1],[119171,119172,1],[119180,119209,1],[119214,119274,1],[119296,119361,1],[119365,119552,187],[119553,119638,1],[120513,120539,26],[120571,120597,26],[120629,120655,26],[120687,120713,26],[120745,120771,26],[120832,121343,1],[121399,121402,1],[121453,121460,1],[121462,121475,1],[121477,121478,1],[123215,123647,432],[126124,126128,4],[126254,126704,450],[126705,126976,271],[126977,127019,1],[127024,127123,1],[127136,127150,1],[127153,127167,1],[127169,127183,1],[127185,127221,1],[127245,127405,1],[127462,127490,1],[127504,127547,1],[127552,127560,1],[127568,127569,1],[127584,127589,1],[127744,128727,1],[128732,128748,1],[128752,128764,1],[128768,128886,1],[128891,128985,1],[128992,129003,1],[129008,129024,16],[129025,129035,1],[129040,129095,1],[129104,129113,1],[129120,129159,1],[129168,129197,1],[129200,129201,1],[129280,129619,1],[129632,129645,1],[129648,129660,1],[129664,129672,1],[129680,129725,1],[129727,129733,1],[129742,129755,1],[129760,129768,1],[129776,129784,1],[129792,129938,1],[129940,129994,1]];static Sc=[[36,162,126],[163,165,1],[1423,1547,124],[2046,2047,1],[2546,2547,1],[2555,2801,246],[3065,3647,582],[6107,8352,2245],[8353,8384,1],[43064,65020,21956],[65129,65284,155],[65504,65505,1],[65509,65510,1],[73693,73696,1],[123647,126128,2481]];static Sk=[[94,96,2],[168,175,7],[180,184,4],[706,709,1],[722,735,1],[741,747,1],[749,751,2],[752,767,1],[885,900,15],[901,2184,1283],[8125,8127,2],[8128,8129,1],[8141,8143,1],[8157,8159,1],[8173,8175,1],[8189,8190,1],[12443,12444,1],[42752,42774,1],[42784,42785,1],[42889,42890,1],[43867,43882,15],[43883,64434,20551],[64435,64450,1],[65342,65344,2],[65507,127995,62488],[127996,127999,1]];static Sm=[[43,60,17],[61,62,1],[124,126,2],[172,177,5],[215,247,32],[1014,1542,528],[1543,1544,1],[8260,8274,14],[8314,8316,1],[8330,8332,1],[8472,8512,40],[8513,8516,1],[8523,8592,69],[8593,8596,1],[8602,8603,1],[8608,8614,3],[8622,8654,32],[8655,8658,3],[8660,8692,32],[8693,8959,1],[8992,8993,1],[9084,9115,31],[9116,9139,1],[9180,9185,1],[9655,9665,10],[9720,9727,1],[9839,10176,337],[10177,10180,1],[10183,10213,1],[10224,10239,1],[10496,10626,1],[10649,10711,1],[10716,10747,1],[10750,11007,1],[11056,11076,1],[11079,11084,1],[64297,65122,825],[65124,65126,1],[65291,65308,17],[65309,65310,1],[65372,65374,2],[65506,65513,7],[65514,65516,1],[120513,120539,26],[120571,120597,26],[120629,120655,26],[120687,120713,26],[120745,120771,26],[126704,126705,1]];static So=[[166,169,3],[174,176,2],[1154,1421,267],[1422,1550,128],[1551,1758,207],[1769,1789,20],[1790,2038,248],[2554,2928,374],[3059,3064,1],[3066,3199,133],[3407,3449,42],[3841,3843,1],[3859,3861,2],[3862,3863,1],[3866,3871,1],[3892,3896,2],[4030,4037,1],[4039,4044,1],[4046,4047,1],[4053,4056,1],[4254,4255,1],[5008,5017,1],[5741,6464,723],[6622,6655,1],[7009,7018,1],[7028,7036,1],[8448,8449,1],[8451,8454,1],[8456,8457,1],[8468,8470,2],[8471,8478,7],[8479,8483,1],[8485,8489,2],[8494,8506,12],[8507,8522,15],[8524,8525,1],[8527,8586,59],[8587,8597,10],[8598,8601,1],[8604,8607,1],[8609,8610,1],[8612,8613,1],[8615,8621,1],[8623,8653,1],[8656,8657,1],[8659,8661,2],[8662,8691,1],[8960,8967,1],[8972,8991,1],[8994,9e3,1],[9003,9083,1],[9085,9114,1],[9140,9179,1],[9186,9254,1],[9280,9290,1],[9372,9449,1],[9472,9654,1],[9656,9664,1],[9666,9719,1],[9728,9838,1],[9840,10087,1],[10132,10175,1],[10240,10495,1],[11008,11055,1],[11077,11078,1],[11085,11123,1],[11126,11157,1],[11159,11263,1],[11493,11498,1],[11856,11857,1],[11904,11929,1],[11931,12019,1],[12032,12245,1],[12272,12287,1],[12292,12306,14],[12307,12320,13],[12342,12343,1],[12350,12351,1],[12688,12689,1],[12694,12703,1],[12736,12771,1],[12783,12800,17],[12801,12830,1],[12842,12871,1],[12880,12896,16],[12897,12927,1],[12938,12976,1],[12992,13311,1],[19904,19967,1],[42128,42182,1],[43048,43051,1],[43062,43063,1],[43065,43639,574],[43640,43641,1],[64832,64847,1],[64975,65021,46],[65022,65023,1],[65508,65512,4],[65517,65518,1],[65532,65533,1],[65847,65855,1],[65913,65929,1],[65932,65934,1],[65936,65948,1],[65952,66e3,48],[66001,66044,1],[67703,67704,1],[68296,71487,3191],[73685,73692,1],[73697,73713,1],[92988,92991,1],[92997,113820,20823],[118608,118723,1],[118784,119029,1],[119040,119078,1],[119081,119140,1],[119146,119148,1],[119171,119172,1],[119180,119209,1],[119214,119274,1],[119296,119361,1],[119365,119552,187],[119553,119638,1],[120832,121343,1],[121399,121402,1],[121453,121460,1],[121462,121475,1],[121477,121478,1],[123215,126124,2909],[126254,126976,722],[126977,127019,1],[127024,127123,1],[127136,127150,1],[127153,127167,1],[127169,127183,1],[127185,127221,1],[127245,127405,1],[127462,127490,1],[127504,127547,1],[127552,127560,1],[127568,127569,1],[127584,127589,1],[127744,127994,1],[128e3,128727,1],[128732,128748,1],[128752,128764,1],[128768,128886,1],[128891,128985,1],[128992,129003,1],[129008,129024,16],[129025,129035,1],[129040,129095,1],[129104,129113,1],[129120,129159,1],[129168,129197,1],[129200,129201,1],[129280,129619,1],[129632,129645,1],[129648,129660,1],[129664,129672,1],[129680,129725,1],[129727,129733,1],[129742,129755,1],[129760,129768,1],[129776,129784,1],[129792,129938,1],[129940,129994,1]];static Z=[[32,160,128],[5760,8192,2432],[8193,8202,1],[8232,8233,1],[8239,8287,48],[12288,12288,1]];static Zl=[[8232,8232,1]];static Zp=[[8233,8233,1]];static Zs=[[32,160,128],[5760,8192,2432],[8193,8202,1],[8239,8287,48],[12288,12288,1]];static Adlam=[[125184,125259,1],[125264,125273,1],[125278,125279,1]];static Ahom=[[71424,71450,1],[71453,71467,1],[71472,71494,1]];static Anatolian_Hieroglyphs=[[82944,83526,1]];static Arabic=[[1536,1540,1],[1542,1547,1],[1549,1562,1],[1564,1566,1],[1568,1599,1],[1601,1610,1],[1622,1647,1],[1649,1756,1],[1758,1791,1],[1872,1919,1],[2160,2190,1],[2192,2193,1],[2200,2273,1],[2275,2303,1],[64336,64450,1],[64467,64829,1],[64832,64911,1],[64914,64967,1],[64975,65008,33],[65009,65023,1],[65136,65140,1],[65142,65276,1],[69216,69246,1],[69373,69375,1],[126464,126467,1],[126469,126495,1],[126497,126498,1],[126500,126503,3],[126505,126514,1],[126516,126519,1],[126521,126523,2],[126530,126535,5],[126537,126541,2],[126542,126543,1],[126545,126546,1],[126548,126551,3],[126553,126561,2],[126562,126564,2],[126567,126570,1],[126572,126578,1],[126580,126583,1],[126585,126588,1],[126590,126592,2],[126593,126601,1],[126603,126619,1],[126625,126627,1],[126629,126633,1],[126635,126651,1],[126704,126705,1]];static Armenian=[[1329,1366,1],[1369,1418,1],[1421,1423,1],[64275,64279,1]];static Avestan=[[68352,68405,1],[68409,68415,1]];static Balinese=[[6912,6988,1],[6992,7038,1]];static Bamum=[[42656,42743,1],[92160,92728,1]];static Bassa_Vah=[[92880,92909,1],[92912,92917,1]];static Batak=[[7104,7155,1],[7164,7167,1]];static Bengali=[[2432,2435,1],[2437,2444,1],[2447,2448,1],[2451,2472,1],[2474,2480,1],[2482,2486,4],[2487,2489,1],[2492,2500,1],[2503,2504,1],[2507,2510,1],[2519,2524,5],[2525,2527,2],[2528,2531,1],[2534,2558,1]];static Bhaiksuki=[[72704,72712,1],[72714,72758,1],[72760,72773,1],[72784,72812,1]];static Bopomofo=[[746,747,1],[12549,12591,1],[12704,12735,1]];static Brahmi=[[69632,69709,1],[69714,69749,1],[69759,69759,1]];static Braille=[[10240,10495,1]];static Buginese=[[6656,6683,1],[6686,6687,1]];static Buhid=[[5952,5971,1]];static Canadian_Aboriginal=[[5120,5759,1],[6320,6389,1],[72368,72383,1]];static Carian=[[66208,66256,1]];static Caucasian_Albanian=[[66864,66915,1],[66927,66927,1]];static Chakma=[[69888,69940,1],[69942,69959,1]];static Cham=[[43520,43574,1],[43584,43597,1],[43600,43609,1],[43612,43615,1]];static Cherokee=[[5024,5109,1],[5112,5117,1],[43888,43967,1]];static Chorasmian=[[69552,69579,1]];static Common=[[0,64,1],[91,96,1],[123,169,1],[171,185,1],[187,191,1],[215,247,32],[697,735,1],[741,745,1],[748,767,1],[884,894,10],[901,903,2],[1541,1548,7],[1563,1567,4],[1600,1757,157],[2274,2404,130],[2405,3647,1242],[4053,4056,1],[4347,5867,1520],[5868,5869,1],[5941,5942,1],[6146,6147,1],[6149,7379,1230],[7393,7401,8],[7402,7404,1],[7406,7411,1],[7413,7415,1],[7418,8192,774],[8193,8203,1],[8206,8292,1],[8294,8304,1],[8308,8318,1],[8320,8334,1],[8352,8384,1],[8448,8485,1],[8487,8489,1],[8492,8497,1],[8499,8525,1],[8527,8543,1],[8585,8587,1],[8592,9254,1],[9280,9290,1],[9312,10239,1],[10496,11123,1],[11126,11157,1],[11159,11263,1],[11776,11869,1],[12272,12292,1],[12294,12296,2],[12297,12320,1],[12336,12343,1],[12348,12351,1],[12443,12444,1],[12448,12539,91],[12540,12688,148],[12689,12703,1],[12736,12771,1],[12783,12832,49],[12833,12895,1],[12927,13007,1],[13055,13144,89],[13145,13311,1],[19904,19967,1],[42752,42785,1],[42888,42890,1],[43056,43065,1],[43310,43471,161],[43867,43882,15],[43883,64830,20947],[64831,65040,209],[65041,65049,1],[65072,65106,1],[65108,65126,1],[65128,65131,1],[65279,65281,2],[65282,65312,1],[65339,65344,1],[65371,65381,1],[65392,65438,46],[65439,65504,65],[65505,65510,1],[65512,65518,1],[65529,65533,1],[65792,65794,1],[65799,65843,1],[65847,65855,1],[65936,65948,1],[66e3,66044,1],[66273,66299,1],[113824,113827,1],[118608,118723,1],[118784,119029,1],[119040,119078,1],[119081,119142,1],[119146,119162,1],[119171,119172,1],[119180,119209,1],[119214,119274,1],[119488,119507,1],[119520,119539,1],[119552,119638,1],[119648,119672,1],[119808,119892,1],[119894,119964,1],[119966,119967,1],[119970,119973,3],[119974,119977,3],[119978,119980,1],[119982,119993,1],[119995,119997,2],[119998,120003,1],[120005,120069,1],[120071,120074,1],[120077,120084,1],[120086,120092,1],[120094,120121,1],[120123,120126,1],[120128,120132,1],[120134,120138,4],[120139,120144,1],[120146,120485,1],[120488,120779,1],[120782,120831,1],[126065,126132,1],[126209,126269,1],[126976,127019,1],[127024,127123,1],[127136,127150,1],[127153,127167,1],[127169,127183,1],[127185,127221,1],[127232,127405,1],[127462,127487,1],[127489,127490,1],[127504,127547,1],[127552,127560,1],[127568,127569,1],[127584,127589,1],[127744,128727,1],[128732,128748,1],[128752,128764,1],[128768,128886,1],[128891,128985,1],[128992,129003,1],[129008,129024,16],[129025,129035,1],[129040,129095,1],[129104,129113,1],[129120,129159,1],[129168,129197,1],[129200,129201,1],[129280,129619,1],[129632,129645,1],[129648,129660,1],[129664,129672,1],[129680,129725,1],[129727,129733,1],[129742,129755,1],[129760,129768,1],[129776,129784,1],[129792,129938,1],[129940,129994,1],[130032,130041,1],[917505,917536,31],[917537,917631,1]];static foldCommon=[[924,956,32]];static Coptic=[[994,1007,1],[11392,11507,1],[11513,11519,1]];static Cuneiform=[[73728,74649,1],[74752,74862,1],[74864,74868,1],[74880,75075,1]];static Cypriot=[[67584,67589,1],[67592,67594,2],[67595,67637,1],[67639,67640,1],[67644,67647,3]];static Cypro_Minoan=[[77712,77810,1]];static Cyrillic=[[1024,1156,1],[1159,1327,1],[7296,7304,1],[7467,7544,77],[11744,11775,1],[42560,42655,1],[65070,65071,1],[122928,122989,1],[123023,123023,1]];static Deseret=[[66560,66639,1]];static Devanagari=[[2304,2384,1],[2389,2403,1],[2406,2431,1],[43232,43263,1],[72448,72457,1]];static Dives_Akuru=[[71936,71942,1],[71945,71948,3],[71949,71955,1],[71957,71958,1],[71960,71989,1],[71991,71992,1],[71995,72006,1],[72016,72025,1]];static Dogra=[[71680,71739,1]];static Duployan=[[113664,113770,1],[113776,113788,1],[113792,113800,1],[113808,113817,1],[113820,113823,1]];static Egyptian_Hieroglyphs=[[77824,78933,1]];static Elbasan=[[66816,66855,1]];static Elymaic=[[69600,69622,1]];static Ethiopic=[[4608,4680,1],[4682,4685,1],[4688,4694,1],[4696,4698,2],[4699,4701,1],[4704,4744,1],[4746,4749,1],[4752,4784,1],[4786,4789,1],[4792,4798,1],[4800,4802,2],[4803,4805,1],[4808,4822,1],[4824,4880,1],[4882,4885,1],[4888,4954,1],[4957,4988,1],[4992,5017,1],[11648,11670,1],[11680,11686,1],[11688,11694,1],[11696,11702,1],[11704,11710,1],[11712,11718,1],[11720,11726,1],[11728,11734,1],[11736,11742,1],[43777,43782,1],[43785,43790,1],[43793,43798,1],[43808,43814,1],[43816,43822,1],[124896,124902,1],[124904,124907,1],[124909,124910,1],[124912,124926,1]];static Georgian=[[4256,4293,1],[4295,4301,6],[4304,4346,1],[4348,4351,1],[7312,7354,1],[7357,7359,1],[11520,11557,1],[11559,11565,6]];static Glagolitic=[[11264,11359,1],[122880,122886,1],[122888,122904,1],[122907,122913,1],[122915,122916,1],[122918,122922,1]];static Gothic=[[66352,66378,1]];static Grantha=[[70400,70403,1],[70405,70412,1],[70415,70416,1],[70419,70440,1],[70442,70448,1],[70450,70451,1],[70453,70457,1],[70460,70468,1],[70471,70472,1],[70475,70477,1],[70480,70487,7],[70493,70499,1],[70502,70508,1],[70512,70516,1]];static Greek=[[880,883,1],[885,887,1],[890,893,1],[895,900,5],[902,904,2],[905,906,1],[908,910,2],[911,929,1],[931,993,1],[1008,1023,1],[7462,7466,1],[7517,7521,1],[7526,7530,1],[7615,7936,321],[7937,7957,1],[7960,7965,1],[7968,8005,1],[8008,8013,1],[8016,8023,1],[8025,8031,2],[8032,8061,1],[8064,8116,1],[8118,8132,1],[8134,8147,1],[8150,8155,1],[8157,8175,1],[8178,8180,1],[8182,8190,1],[8486,43877,35391],[65856,65934,1],[65952,119296,53344],[119297,119365,1]];static foldGreek=[[181,837,656]];static Gujarati=[[2689,2691,1],[2693,2701,1],[2703,2705,1],[2707,2728,1],[2730,2736,1],[2738,2739,1],[2741,2745,1],[2748,2757,1],[2759,2761,1],[2763,2765,1],[2768,2784,16],[2785,2787,1],[2790,2801,1],[2809,2815,1]];static Gunjala_Gondi=[[73056,73061,1],[73063,73064,1],[73066,73102,1],[73104,73105,1],[73107,73112,1],[73120,73129,1]];static Gurmukhi=[[2561,2563,1],[2565,2570,1],[2575,2576,1],[2579,2600,1],[2602,2608,1],[2610,2611,1],[2613,2614,1],[2616,2617,1],[2620,2622,2],[2623,2626,1],[2631,2632,1],[2635,2637,1],[2641,2649,8],[2650,2652,1],[2654,2662,8],[2663,2678,1]];static Han=[[11904,11929,1],[11931,12019,1],[12032,12245,1],[12293,12295,2],[12321,12329,1],[12344,12347,1],[13312,19903,1],[19968,40959,1],[63744,64109,1],[64112,64217,1],[94178,94179,1],[94192,94193,1],[131072,173791,1],[173824,177977,1],[177984,178205,1],[178208,183969,1],[183984,191456,1],[191472,192093,1],[194560,195101,1],[196608,201546,1],[201552,205743,1]];static Hangul=[[4352,4607,1],[12334,12335,1],[12593,12686,1],[12800,12830,1],[12896,12926,1],[43360,43388,1],[44032,55203,1],[55216,55238,1],[55243,55291,1],[65440,65470,1],[65474,65479,1],[65482,65487,1],[65490,65495,1],[65498,65500,1]];static Hanifi_Rohingya=[[68864,68903,1],[68912,68921,1]];static Hanunoo=[[5920,5940,1]];static Hatran=[[67808,67826,1],[67828,67829,1],[67835,67839,1]];static Hebrew=[[1425,1479,1],[1488,1514,1],[1519,1524,1],[64285,64310,1],[64312,64316,1],[64318,64320,2],[64321,64323,2],[64324,64326,2],[64327,64335,1]];static Hiragana=[[12353,12438,1],[12445,12447,1],[110593,110879,1],[110898,110928,30],[110929,110930,1],[127488,127488,1]];static Imperial_Aramaic=[[67648,67669,1],[67671,67679,1]];static Inherited=[[768,879,1],[1157,1158,1],[1611,1621,1],[1648,2385,737],[2386,2388,1],[6832,6862,1],[7376,7378,1],[7380,7392,1],[7394,7400,1],[7405,7412,7],[7416,7417,1],[7616,7679,1],[8204,8205,1],[8400,8432,1],[12330,12333,1],[12441,12442,1],[65024,65039,1],[65056,65069,1],[66045,66272,227],[70459,118528,48069],[118529,118573,1],[118576,118598,1],[119143,119145,1],[119163,119170,1],[119173,119179,1],[119210,119213,1],[917760,917999,1]];static foldInherited=[[921,953,32],[8126,8126,1]];static Inscriptional_Pahlavi=[[68448,68466,1],[68472,68479,1]];static Inscriptional_Parthian=[[68416,68437,1],[68440,68447,1]];static Javanese=[[43392,43469,1],[43472,43481,1],[43486,43487,1]];static Kaithi=[[69760,69826,1],[69837,69837,1]];static Kannada=[[3200,3212,1],[3214,3216,1],[3218,3240,1],[3242,3251,1],[3253,3257,1],[3260,3268,1],[3270,3272,1],[3274,3277,1],[3285,3286,1],[3293,3294,1],[3296,3299,1],[3302,3311,1],[3313,3315,1]];static Katakana=[[12449,12538,1],[12541,12543,1],[12784,12799,1],[13008,13054,1],[13056,13143,1],[65382,65391,1],[65393,65437,1],[110576,110579,1],[110581,110587,1],[110589,110590,1],[110592,110880,288],[110881,110882,1],[110933,110948,15],[110949,110951,1]];static Kawi=[[73472,73488,1],[73490,73530,1],[73534,73561,1]];static Kayah_Li=[[43264,43309,1],[43311,43311,1]];static Kharoshthi=[[68096,68099,1],[68101,68102,1],[68108,68115,1],[68117,68119,1],[68121,68149,1],[68152,68154,1],[68159,68168,1],[68176,68184,1]];static Khitan_Small_Script=[[94180,101120,6940],[101121,101589,1]];static Khmer=[[6016,6109,1],[6112,6121,1],[6128,6137,1],[6624,6655,1]];static Khojki=[[70144,70161,1],[70163,70209,1]];static Khudawadi=[[70320,70378,1],[70384,70393,1]];static Lao=[[3713,3714,1],[3716,3718,2],[3719,3722,1],[3724,3747,1],[3749,3751,2],[3752,3773,1],[3776,3780,1],[3782,3784,2],[3785,3790,1],[3792,3801,1],[3804,3807,1]];static Latin=[[65,90,1],[97,122,1],[170,186,16],[192,214,1],[216,246,1],[248,696,1],[736,740,1],[7424,7461,1],[7468,7516,1],[7522,7525,1],[7531,7543,1],[7545,7614,1],[7680,7935,1],[8305,8319,14],[8336,8348,1],[8490,8491,1],[8498,8526,28],[8544,8584,1],[11360,11391,1],[42786,42887,1],[42891,42954,1],[42960,42961,1],[42963,42965,2],[42966,42969,1],[42994,43007,1],[43824,43866,1],[43868,43876,1],[43878,43881,1],[64256,64262,1],[65313,65338,1],[65345,65370,1],[67456,67461,1],[67463,67504,1],[67506,67514,1],[122624,122654,1],[122661,122666,1]];static Lepcha=[[7168,7223,1],[7227,7241,1],[7245,7247,1]];static Limbu=[[6400,6430,1],[6432,6443,1],[6448,6459,1],[6464,6468,4],[6469,6479,1]];static Linear_A=[[67072,67382,1],[67392,67413,1],[67424,67431,1]];static Linear_B=[[65536,65547,1],[65549,65574,1],[65576,65594,1],[65596,65597,1],[65599,65613,1],[65616,65629,1],[65664,65786,1]];static Lisu=[[42192,42239,1],[73648,73648,1]];static Lycian=[[66176,66204,1]];static Lydian=[[67872,67897,1],[67903,67903,1]];static Mahajani=[[69968,70006,1]];static Makasar=[[73440,73464,1]];static Malayalam=[[3328,3340,1],[3342,3344,1],[3346,3396,1],[3398,3400,1],[3402,3407,1],[3412,3427,1],[3430,3455,1]];static Mandaic=[[2112,2139,1],[2142,2142,1]];static Manichaean=[[68288,68326,1],[68331,68342,1]];static Marchen=[[72816,72847,1],[72850,72871,1],[72873,72886,1]];static Masaram_Gondi=[[72960,72966,1],[72968,72969,1],[72971,73014,1],[73018,73020,2],[73021,73023,2],[73024,73031,1],[73040,73049,1]];static Medefaidrin=[[93760,93850,1]];static Meetei_Mayek=[[43744,43766,1],[43968,44013,1],[44016,44025,1]];static Mende_Kikakui=[[124928,125124,1],[125127,125142,1]];static Meroitic_Cursive=[[68e3,68023,1],[68028,68047,1],[68050,68095,1]];static Meroitic_Hieroglyphs=[[67968,67999,1]];static Miao=[[93952,94026,1],[94031,94087,1],[94095,94111,1]];static Modi=[[71168,71236,1],[71248,71257,1]];static Mongolian=[[6144,6145,1],[6148,6150,2],[6151,6169,1],[6176,6264,1],[6272,6314,1],[71264,71276,1]];static Mro=[[92736,92766,1],[92768,92777,1],[92782,92783,1]];static Multani=[[70272,70278,1],[70280,70282,2],[70283,70285,1],[70287,70301,1],[70303,70313,1]];static Myanmar=[[4096,4255,1],[43488,43518,1],[43616,43647,1]];static Nabataean=[[67712,67742,1],[67751,67759,1]];static Nag_Mundari=[[124112,124153,1]];static Nandinagari=[[72096,72103,1],[72106,72151,1],[72154,72164,1]];static New_Tai_Lue=[[6528,6571,1],[6576,6601,1],[6608,6618,1],[6622,6623,1]];static Newa=[[70656,70747,1],[70749,70753,1]];static Nko=[[1984,2042,1],[2045,2047,1]];static Nushu=[[94177,110960,16783],[110961,111355,1]];static Nyiakeng_Puachue_Hmong=[[123136,123180,1],[123184,123197,1],[123200,123209,1],[123214,123215,1]];static Ogham=[[5760,5788,1]];static Ol_Chiki=[[7248,7295,1]];static Old_Hungarian=[[68736,68786,1],[68800,68850,1],[68858,68863,1]];static Old_Italic=[[66304,66339,1],[66349,66351,1]];static Old_North_Arabian=[[68224,68255,1]];static Old_Permic=[[66384,66426,1]];static Old_Persian=[[66464,66499,1],[66504,66517,1]];static Old_Sogdian=[[69376,69415,1]];static Old_South_Arabian=[[68192,68223,1]];static Old_Turkic=[[68608,68680,1]];static Old_Uyghur=[[69488,69513,1]];static Oriya=[[2817,2819,1],[2821,2828,1],[2831,2832,1],[2835,2856,1],[2858,2864,1],[2866,2867,1],[2869,2873,1],[2876,2884,1],[2887,2888,1],[2891,2893,1],[2901,2903,1],[2908,2909,1],[2911,2915,1],[2918,2935,1]];static Osage=[[66736,66771,1],[66776,66811,1]];static Osmanya=[[66688,66717,1],[66720,66729,1]];static Pahawh_Hmong=[[92928,92997,1],[93008,93017,1],[93019,93025,1],[93027,93047,1],[93053,93071,1]];static Palmyrene=[[67680,67711,1]];static Pau_Cin_Hau=[[72384,72440,1]];static Phags_Pa=[[43072,43127,1]];static Phoenician=[[67840,67867,1],[67871,67871,1]];static Psalter_Pahlavi=[[68480,68497,1],[68505,68508,1],[68521,68527,1]];static Rejang=[[43312,43347,1],[43359,43359,1]];static Runic=[[5792,5866,1],[5870,5880,1]];static Samaritan=[[2048,2093,1],[2096,2110,1]];static Saurashtra=[[43136,43205,1],[43214,43225,1]];static Sharada=[[70016,70111,1]];static Shavian=[[66640,66687,1]];static Siddham=[[71040,71093,1],[71096,71133,1]];static SignWriting=[[120832,121483,1],[121499,121503,1],[121505,121519,1]];static Sinhala=[[3457,3459,1],[3461,3478,1],[3482,3505,1],[3507,3515,1],[3517,3520,3],[3521,3526,1],[3530,3535,5],[3536,3540,1],[3542,3544,2],[3545,3551,1],[3558,3567,1],[3570,3572,1],[70113,70132,1]];static Sogdian=[[69424,69465,1]];static Sora_Sompeng=[[69840,69864,1],[69872,69881,1]];static Soyombo=[[72272,72354,1]];static Sundanese=[[7040,7103,1],[7360,7367,1]];static Syloti_Nagri=[[43008,43052,1]];static Syriac=[[1792,1805,1],[1807,1866,1],[1869,1871,1],[2144,2154,1]];static Tagalog=[[5888,5909,1],[5919,5919,1]];static Tagbanwa=[[5984,5996,1],[5998,6e3,1],[6002,6003,1]];static Tai_Le=[[6480,6509,1],[6512,6516,1]];static Tai_Tham=[[6688,6750,1],[6752,6780,1],[6783,6793,1],[6800,6809,1],[6816,6829,1]];static Tai_Viet=[[43648,43714,1],[43739,43743,1]];static Takri=[[71296,71353,1],[71360,71369,1]];static Tamil=[[2946,2947,1],[2949,2954,1],[2958,2960,1],[2962,2965,1],[2969,2970,1],[2972,2974,2],[2975,2979,4],[2980,2984,4],[2985,2986,1],[2990,3001,1],[3006,3010,1],[3014,3016,1],[3018,3021,1],[3024,3031,7],[3046,3066,1],[73664,73713,1],[73727,73727,1]];static Tangsa=[[92784,92862,1],[92864,92873,1]];static Tangut=[[94176,94208,32],[94209,100343,1],[100352,101119,1],[101632,101640,1]];static Telugu=[[3072,3084,1],[3086,3088,1],[3090,3112,1],[3114,3129,1],[3132,3140,1],[3142,3144,1],[3146,3149,1],[3157,3158,1],[3160,3162,1],[3165,3168,3],[3169,3171,1],[3174,3183,1],[3191,3199,1]];static Thaana=[[1920,1969,1]];static Thai=[[3585,3642,1],[3648,3675,1]];static Tibetan=[[3840,3911,1],[3913,3948,1],[3953,3991,1],[3993,4028,1],[4030,4044,1],[4046,4052,1],[4057,4058,1]];static Tifinagh=[[11568,11623,1],[11631,11632,1],[11647,11647,1]];static Tirhuta=[[70784,70855,1],[70864,70873,1]];static Toto=[[123536,123566,1]];static Ugaritic=[[66432,66461,1],[66463,66463,1]];static Vai=[[42240,42539,1]];static Vithkuqi=[[66928,66938,1],[66940,66954,1],[66956,66962,1],[66964,66965,1],[66967,66977,1],[66979,66993,1],[66995,67001,1],[67003,67004,1]];static Wancho=[[123584,123641,1],[123647,123647,1]];static Warang_Citi=[[71840,71922,1],[71935,71935,1]];static Yezidi=[[69248,69289,1],[69291,69293,1],[69296,69297,1]];static Yi=[[40960,42124,1],[42128,42182,1]];static Zanabazar_Square=[[72192,72263,1]];static CATEGORIES=new Map([["C",i.C],["Cc",i.Cc],["Cf",i.Cf],["Co",i.Co],["Cs",i.Cs],["L",i.L],["Ll",i.Ll],["Lm",i.Lm],["Lo",i.Lo],["Lt",i.Lt],["Lu",i.Lu],["M",i.M],["Mc",i.Mc],["Me",i.Me],["Mn",i.Mn],["N",i.N],["Nd",i.Nd],["Nl",i.Nl],["No",i.No],["P",i.P],["Pc",i.Pc],["Pd",i.Pd],["Pe",i.Pe],["Pf",i.Pf],["Pi",i.Pi],["Po",i.Po],["Ps",i.Ps],["S",i.S],["Sc",i.Sc],["Sk",i.Sk],["Sm",i.Sm],["So",i.So],["Z",i.Z],["Zl",i.Zl],["Zp",i.Zp],["Zs",i.Zs]]);static SCRIPTS=new Map([["Adlam",i.Adlam],["Ahom",i.Ahom],["Anatolian_Hieroglyphs",i.Anatolian_Hieroglyphs],["Arabic",i.Arabic],["Armenian",i.Armenian],["Avestan",i.Avestan],["Balinese",i.Balinese],["Bamum",i.Bamum],["Bassa_Vah",i.Bassa_Vah],["Batak",i.Batak],["Bengali",i.Bengali],["Bhaiksuki",i.Bhaiksuki],["Bopomofo",i.Bopomofo],["Brahmi",i.Brahmi],["Braille",i.Braille],["Buginese",i.Buginese],["Buhid",i.Buhid],["Canadian_Aboriginal",i.Canadian_Aboriginal],["Carian",i.Carian],["Caucasian_Albanian",i.Caucasian_Albanian],["Chakma",i.Chakma],["Cham",i.Cham],["Cherokee",i.Cherokee],["Chorasmian",i.Chorasmian],["Common",i.Common],["Coptic",i.Coptic],["Cuneiform",i.Cuneiform],["Cypriot",i.Cypriot],["Cypro_Minoan",i.Cypro_Minoan],["Cyrillic",i.Cyrillic],["Deseret",i.Deseret],["Devanagari",i.Devanagari],["Dives_Akuru",i.Dives_Akuru],["Dogra",i.Dogra],["Duployan",i.Duployan],["Egyptian_Hieroglyphs",i.Egyptian_Hieroglyphs],["Elbasan",i.Elbasan],["Elymaic",i.Elymaic],["Ethiopic",i.Ethiopic],["Georgian",i.Georgian],["Glagolitic",i.Glagolitic],["Gothic",i.Gothic],["Grantha",i.Grantha],["Greek",i.Greek],["Gujarati",i.Gujarati],["Gunjala_Gondi",i.Gunjala_Gondi],["Gurmukhi",i.Gurmukhi],["Han",i.Han],["Hangul",i.Hangul],["Hanifi_Rohingya",i.Hanifi_Rohingya],["Hanunoo",i.Hanunoo],["Hatran",i.Hatran],["Hebrew",i.Hebrew],["Hiragana",i.Hiragana],["Imperial_Aramaic",i.Imperial_Aramaic],["Inherited",i.Inherited],["Inscriptional_Pahlavi",i.Inscriptional_Pahlavi],["Inscriptional_Parthian",i.Inscriptional_Parthian],["Javanese",i.Javanese],["Kaithi",i.Kaithi],["Kannada",i.Kannada],["Katakana",i.Katakana],["Kawi",i.Kawi],["Kayah_Li",i.Kayah_Li],["Kharoshthi",i.Kharoshthi],["Khitan_Small_Script",i.Khitan_Small_Script],["Khmer",i.Khmer],["Khojki",i.Khojki],["Khudawadi",i.Khudawadi],["Lao",i.Lao],["Latin",i.Latin],["Lepcha",i.Lepcha],["Limbu",i.Limbu],["Linear_A",i.Linear_A],["Linear_B",i.Linear_B],["Lisu",i.Lisu],["Lycian",i.Lycian],["Lydian",i.Lydian],["Mahajani",i.Mahajani],["Makasar",i.Makasar],["Malayalam",i.Malayalam],["Mandaic",i.Mandaic],["Manichaean",i.Manichaean],["Marchen",i.Marchen],["Masaram_Gondi",i.Masaram_Gondi],["Medefaidrin",i.Medefaidrin],["Meetei_Mayek",i.Meetei_Mayek],["Mende_Kikakui",i.Mende_Kikakui],["Meroitic_Cursive",i.Meroitic_Cursive],["Meroitic_Hieroglyphs",i.Meroitic_Hieroglyphs],["Miao",i.Miao],["Modi",i.Modi],["Mongolian",i.Mongolian],["Mro",i.Mro],["Multani",i.Multani],["Myanmar",i.Myanmar],["Nabataean",i.Nabataean],["Nag_Mundari",i.Nag_Mundari],["Nandinagari",i.Nandinagari],["New_Tai_Lue",i.New_Tai_Lue],["Newa",i.Newa],["Nko",i.Nko],["Nushu",i.Nushu],["Nyiakeng_Puachue_Hmong",i.Nyiakeng_Puachue_Hmong],["Ogham",i.Ogham],["Ol_Chiki",i.Ol_Chiki],["Old_Hungarian",i.Old_Hungarian],["Old_Italic",i.Old_Italic],["Old_North_Arabian",i.Old_North_Arabian],["Old_Permic",i.Old_Permic],["Old_Persian",i.Old_Persian],["Old_Sogdian",i.Old_Sogdian],["Old_South_Arabian",i.Old_South_Arabian],["Old_Turkic",i.Old_Turkic],["Old_Uyghur",i.Old_Uyghur],["Oriya",i.Oriya],["Osage",i.Osage],["Osmanya",i.Osmanya],["Pahawh_Hmong",i.Pahawh_Hmong],["Palmyrene",i.Palmyrene],["Pau_Cin_Hau",i.Pau_Cin_Hau],["Phags_Pa",i.Phags_Pa],["Phoenician",i.Phoenician],["Psalter_Pahlavi",i.Psalter_Pahlavi],["Rejang",i.Rejang],["Runic",i.Runic],["Samaritan",i.Samaritan],["Saurashtra",i.Saurashtra],["Sharada",i.Sharada],["Shavian",i.Shavian],["Siddham",i.Siddham],["SignWriting",i.SignWriting],["Sinhala",i.Sinhala],["Sogdian",i.Sogdian],["Sora_Sompeng",i.Sora_Sompeng],["Soyombo",i.Soyombo],["Sundanese",i.Sundanese],["Syloti_Nagri",i.Syloti_Nagri],["Syriac",i.Syriac],["Tagalog",i.Tagalog],["Tagbanwa",i.Tagbanwa],["Tai_Le",i.Tai_Le],["Tai_Tham",i.Tai_Tham],["Tai_Viet",i.Tai_Viet],["Takri",i.Takri],["Tamil",i.Tamil],["Tangsa",i.Tangsa],["Tangut",i.Tangut],["Telugu",i.Telugu],["Thaana",i.Thaana],["Thai",i.Thai],["Tibetan",i.Tibetan],["Tifinagh",i.Tifinagh],["Tirhuta",i.Tirhuta],["Toto",i.Toto],["Ugaritic",i.Ugaritic],["Vai",i.Vai],["Vithkuqi",i.Vithkuqi],["Wancho",i.Wancho],["Warang_Citi",i.Warang_Citi],["Yezidi",i.Yezidi],["Yi",i.Yi],["Zanabazar_Square",i.Zanabazar_Square]]);static FOLD_CATEGORIES=new Map([["L",i.foldL],["Ll",i.foldLl],["Lt",i.foldLt],["Lu",i.foldLu],["M",i.foldM],["Mn",i.foldMn]]);static FOLD_SCRIPT=new Map([["Common",i.foldCommon],["Greek",i.foldGreek],["Inherited",i.foldInherited]])}class n{static MAX_RUNE=1114111;static MAX_ASCII=127;static MAX_LATIN1=255;static MAX_BMP=65535;static MIN_FOLD=65;static MAX_FOLD=66639;static is32(t,e){let s=0,o=t.length;for(;ss[1]))return!(e0&&e>=t[0][0]&&this.is32(t,e)}static isUpper(t){if(t<=this.MAX_LATIN1){const e=String.fromCodePoint(t);return e.toUpperCase()===e&&e.toLowerCase()!==e}return this.is(i.Upper,t)}static isPrint(t){return t<=this.MAX_LATIN1?t>=32&&t<127||t>=161&&173!==t:this.is(i.L,t)||this.is(i.M,t)||this.is(i.N,t)||this.is(i.P,t)||this.is(i.S,t)}static simpleFold(t){if(i.CASE_ORBIT.has(t))return i.CASE_ORBIT.get(t);const s=e.toLowerCase(t);return s!==t?s:e.toUpperCase(t)}static equalsIgnoreCase(t,s){if(t<0||s<0||t===s)return!0;if(t<=this.MAX_ASCII&&s<=this.MAX_ASCII)return e.CODES.get("A")<=t&&t<=e.CODES.get("Z")&&(t|=32),e.CODES.get("A")<=s&&s<=e.CODES.get("Z")&&(s|=32),t===s;for(let e=this.simpleFold(t);e!==t;e=this.simpleFold(e))if(e===s)return!0;return!1}}class r{static METACHARACTERS="\\.+*?()|[]{}^$";static EMPTY_BEGIN_LINE=1;static EMPTY_END_LINE=2;static EMPTY_BEGIN_TEXT=4;static EMPTY_END_TEXT=8;static EMPTY_WORD_BOUNDARY=16;static EMPTY_NO_WORD_BOUNDARY=32;static EMPTY_ALL=-1;static emptyInts(){return[]}static isalnum(t){return e.CODES.get("0")<=t&&t<=e.CODES.get("9")||e.CODES.get("a")<=t&&t<=e.CODES.get("z")||e.CODES.get("A")<=t&&t<=e.CODES.get("Z")}static unhex(t){return e.CODES.get("0")<=t&&t<=e.CODES.get("9")?t-e.CODES.get("0"):e.CODES.get("a")<=t&&t<=e.CODES.get("f")?t-e.CODES.get("a")+10:e.CODES.get("A")<=t&&t<=e.CODES.get("F")?t-e.CODES.get("A")+10:-1}static escapeRune(t){let s="";if(n.isPrint(t))this.METACHARACTERS.indexOf(String.fromCodePoint(t))>=0&&(s+="\\"),s+=String.fromCodePoint(t);else switch(t){case e.CODES.get('"'):s+='\\"';break;case e.CODES.get("\\"):s+="\\\\";break;case e.CODES.get("\t"):s+="\\t";break;case e.CODES.get("\n"):s+="\\n";break;case e.CODES.get("\r"):s+="\\r";break;case e.CODES.get("\b"):s+="\\b";break;case e.CODES.get("\f"):s+="\\f";break;default:{let e=t.toString(16);t<256?(s+="\\x",1===e.length&&(s+="0"),s+=e):s+=`\\x{${e}}`;break}}return s}static stringToRunes(t){return String(t).split("").map((t=>t.codePointAt(0)))}static runeToString(t){return String.fromCodePoint(t)}static isWordRune(t){return e.CODES.get("a")<=t&&t<=e.CODES.get("z")||e.CODES.get("A")<=t&&t<=e.CODES.get("Z")||e.CODES.get("0")<=t&&t<=e.CODES.get("9")||t===e.CODES.get("_")}static emptyOpContext(t,s){let o=0;return t<0&&(o|=this.EMPTY_BEGIN_TEXT|this.EMPTY_BEGIN_LINE),t===e.CODES.get("\n")&&(o|=this.EMPTY_BEGIN_LINE),s<0&&(o|=this.EMPTY_END_TEXT|this.EMPTY_END_LINE),s===e.CODES.get("\n")&&(o|=this.EMPTY_END_LINE),this.isWordRune(t)!==this.isWordRune(s)?o|=this.EMPTY_WORD_BOUNDARY:o|=this.EMPTY_NO_WORD_BOUNDARY,o}static quoteMeta(t){return t.split("").map((t=>this.METACHARACTERS.indexOf(t)>=0?`\\${t}`:t)).join("")}static charCount(t){return t>n.MAX_BMP?2:1}static stringToUtf8ByteArray(t){if(globalThis.TextEncoder)return Array.from((new TextEncoder).encode(t));{let e=[],s=0;for(let o=0;o>6|192,e[s++]=63&i|128):55296==(64512&i)&&o+1>18|240,e[s++]=i>>12&63|128,e[s++]=i>>6&63|128,e[s++]=63&i|128):(e[s++]=i>>12|224,e[s++]=i>>6&63|128,e[s++]=63&i|128)}return e}}static utf8ByteArrayToString(t){if(globalThis.TextDecoder)return new TextDecoder("utf-8").decode(new Uint8Array(t));{let e=[],s=0,o=0;for(;s191&&i<224){let n=t[s++];e[o++]=String.fromCharCode((31&i)<<6|63&n)}else if(i>239&&i<365){let n=((7&i)<<18|(63&t[s++])<<12|(63&t[s++])<<6|63&t[s++])-65536;e[o++]=String.fromCharCode(55296+(n>>10)),e[o++]=String.fromCharCode(56320+(1023&n))}else{let n=t[s++],r=t[s++];e[o++]=String.fromCharCode((15&i)<<12|(63&n)<<6|63&r)}}return e.join("")}}}const a=(t=[],e=0)=>{const s={};for(let o=0;ot.codePointAt(0)))}length(){return this.charSequence.length}}class u{static utf16(t){return new p(t)}static utf8(t){return Array.isArray(t)?new d(t):new d(r.stringToUtf8ByteArray(t))}}class g extends Error{constructor(t){super(t),this.name="RE2JSException"}}class l extends g{constructor(t,e=null){let s=`error parsing regexp: ${t}`;e&&(s+=`: \`${e}\``),super(s),this.name="RE2JSSyntaxException",this.message=s,this.error=t,this.input=e}getDescription(){return this.error}getPattern(){return this.input}}class h extends g{constructor(t){super(t),this.name="RE2JSCompileException"}}class m extends g{constructor(t){super(t),this.name="RE2JSGroupException"}}class f extends g{constructor(t){super(t),this.name="RE2JSFlagsException"}}class y{static quoteReplacement(t){return t.indexOf("\\")<0&&t.indexOf("$")<0?t:t.split("").map((t=>{const s=t.codePointAt(0);return s===e.CODES["\\"]||s===e.CODES.$?`\\${t}`:t})).join("")}constructor(t,e){if(null===t)throw new Error("pattern is null");this.patternInput=t;const s=this.patternInput.re2();this.patternGroupCount=s.numberOfCapturingGroups(),this.groups=[],this.namedGroups=s.namedGroups,e instanceof c?this.resetMatcherInput(e):Array.isArray(e)?this.resetMatcherInput(u.utf8(e)):this.resetMatcherInput(u.utf16(e))}pattern(){return this.patternInput}reset(){return this.matcherInputLength=this.matcherInput.length(),this.appendPos=0,this.hasMatch=!1,this.hasGroups=!1,this.anchorFlag=0,this}resetMatcherInput(t){if(null===t)throw new Error("input is null");return this.matcherInput=t,this.reset(),this}start(t=0){if("string"==typeof t){const e=this.namedGroups[t];if(!Number.isFinite(e))throw new m(`group '${t}' not found`);t=e}return this.loadGroup(t),this.groups[2*t]}end(t=0){if("string"==typeof t){const e=this.namedGroups[t];if(!Number.isFinite(e))throw new m(`group '${t}' not found`);t=e}return this.loadGroup(t),this.groups[2*t+1]}group(t=0){if("string"==typeof t){const e=this.namedGroups[t];if(!Number.isFinite(e))throw new m(`group '${t}' not found`);t=e}const e=this.start(t),s=this.end(t);return e<0&&s<0?null:this.substring(e,s)}groupCount(){return this.patternGroupCount}loadGroup(t){if(t<0||t>this.patternGroupCount)throw new m(`Group index out of bounds: ${t}`);if(!this.hasMatch)throw new m("perhaps no match attempted");if(0===t||this.hasGroups)return;let e=this.groups[1]+1;e>this.matcherInputLength&&(e=this.matcherInputLength);const s=this.patternInput.re2().matchMachineInput(this.matcherInput,this.groups[0],e,this.anchorFlag,1+this.patternGroupCount);if(!s[0])throw new m("inconsistency in matching group data");this.groups=s[1],this.hasGroups=!0}matches(){return this.genMatch(0,t.ANCHOR_BOTH)}lookingAt(){return this.genMatch(0,t.ANCHOR_START)}find(e=null){if(null!==e){if(e<0||e>this.matcherInputLength)throw new m(`start index out of bounds: ${e}`);return this.reset(),this.genMatch(e,0)}return e=0,this.hasMatch&&(e=this.groups[1],this.groups[0]===this.groups[1]&&e++),this.genMatch(e,t.UNANCHORED)}genMatch(t,e){const s=this.patternInput.re2().matchMachineInput(this.matcherInput,t,this.matcherInputLength,e,1);return!!s[0]&&(this.groups=s[1],this.hasMatch=!0,this.hasGroups=!1,this.anchorFlag=e,!0)}substring(t,e){return this.matcherInput.isUTF8Encoding()?r.utf8ByteArrayToString(this.matcherInput.asBytes().slice(t,e)):this.matcherInput.asCharSequence().substring(t,e).toString()}inputLength(){return this.matcherInputLength}appendReplacement(t,e=!1){let s="";const o=this.start(),i=this.end();return this.appendPose.CODES.get("9")||10*a+r-e.CODES.get("0")>this.patternGroupCount));n++)a=10*a+r-e.CODES.get("0");if(a>this.patternGroupCount)throw new m(`n > number of groups: ${a}`);const c=this.group(a);null!==c&&(s+=c),o=n,n--;continue}if(r===e.CODES.get("{")){oe.CODES.get("9")||10*a+r-e.CODES.get("0")>this.patternGroupCount));n++)a=10*a+r-e.CODES.get("0");if(a>this.patternGroupCount){s+=`$${a}`,o=n,n--;continue}const c=this.group(a);null!==c&&(s+=c),o=n,n--;continue}if(r===e.CODES.get("<")){o")&&t.codePointAt(i)!==e.CODES.get(" ");)i++;if(i===t.length||t.codePointAt(i)!==e.CODES.get(">")){s+=t.substring(n-1,i+1),o=i+1;continue}const r=t.substring(n+1,i);Object.prototype.hasOwnProperty.call(this.namedGroups,r)?s+=this.group(r):s+=`$<${r}>`,o=i+1}}return o=this.end)return E.EOF();let e=255&this.bytes[t++];return 128&e?192==(224&e)?(e&=31,t>=this.end?E.EOF():(e=e<<6|63&this.bytes[t++],e<<3|2)):224==(240&e)?(e&=15,t+1>=this.end?E.EOF():(e=e<<6|63&this.bytes[t++],e=e<<6|63&this.bytes[t++],e<<3|3)):(e&=7,t+2>=this.end?E.EOF():(e=e<<6|63&this.bytes[t++],e=e<<6|63&this.bytes[t++],e=e<<6|63&this.bytes[t++],e<<3|4)):e<<3|1}index(t,e){e+=this.start;const s=this.indexOf(this.bytes,t.prefixUTF8,e);return s<0?s:s-e}context(t){let e=-1;if((t+=this.start)>this.start&&t<=this.end){let s=t-1;if(e=this.bytes[s--],e>=128){let o=t-4;for(o=o&&128==(192&this.bytes[s]);)s--;s>3}}const s=t>3:-1;return r.emptyOpContext(e,s)}indexOf(t,e,s=0){let o=e.length;if(0===o)return-1;let i=t.length;for(let n=s;n<=i-o;n++)for(let s=0;s0&&t<=this.charSequence.length?this.charSequence.codePointAt(t-1):-1,s=t=C.Op.LEFT_PAREN}static emptySubs(){return[]}static quoteIfHyphen(t){return t===e.CODES.get("-")?"\\":""}static fromRegexp(t){const e=new C(t.op);return e.flags=t.flags,e.subs=t.subs,e.runes=t.runes,e.cap=t.cap,e.min=t.min,e.max=t.max,e.name=t.name,e.namedGroups=t.namedGroups,e}constructor(t){this.op=t,this.flags=0,this.subs=C.emptySubs(),this.runes=null,this.min=0,this.max=0,this.cap=0,this.name=null,this.namedGroups={}}reinit(){this.flags=0,this.subs=C.emptySubs(),this.runes=null,this.cap=0,this.min=0,this.max=0,this.name=null,this.namedGroups={}}toString(){return this.appendTo()}appendTo(){let e="";switch(this.op){case C.Op.NO_MATCH:e+="[^\\x00-\\x{10FFFF}]";break;case C.Op.EMPTY_MATCH:e+="(?:)";break;case C.Op.STAR:case C.Op.PLUS:case C.Op.QUEST:case C.Op.REPEAT:{const s=this.subs[0];switch(s.op>C.Op.CAPTURE||s.op===C.Op.LITERAL&&s.runes.length>1?e+=`(?:${s.appendTo()})`:e+=s.appendTo(),this.op){case C.Op.STAR:e+="*";break;case C.Op.PLUS:e+="+";break;case C.Op.QUEST:e+="?";break;case C.Op.REPEAT:e+=`{${this.min}`,this.min!==this.max&&(e+=",",this.max>=0&&(e+=this.max)),e+="}"}this.flags&t.NON_GREEDY&&(e+="?");break}case C.Op.CONCAT:for(let t of this.subs)t.op===C.Op.ALTERNATE?e+=`(?:${t.appendTo()})`:e+=t.appendTo();break;case C.Op.ALTERNATE:{let t="";for(let s of this.subs)e+=t,t="|",e+=s.appendTo();break}case C.Op.LITERAL:this.flags&t.FOLD_CASE&&(e+="(?i:");for(let t of this.runes)e+=r.escapeRune(t);this.flags&t.FOLD_CASE&&(e+=")");break;case C.Op.ANY_CHAR_NOT_NL:e+="(?-s:.)";break;case C.Op.ANY_CHAR:e+="(?s:.)";break;case C.Op.CAPTURE:null===this.name||0===this.name.length?e+="(":e+=`(?P<${this.name}>`,this.subs[0].op!==C.Op.EMPTY_MATCH&&(e+=this.subs[0].appendTo()),e+=")";break;case C.Op.BEGIN_TEXT:e+="\\A";break;case C.Op.END_TEXT:this.flags&t.WAS_DOLLAR?e+="(?-m:$)":e+="\\z";break;case C.Op.BEGIN_LINE:e+="^";break;case C.Op.END_LINE:e+="$";break;case C.Op.WORD_BOUNDARY:e+="\\b";break;case C.Op.NO_WORD_BOUNDARY:e+="\\B";break;case C.Op.CHAR_CLASS:if(this.runes.length%2!=0){e+="[invalid char class]";break}if(e+="[",0===this.runes.length)e+="^\\x00-\\x{10FFFF}";else if(0===this.runes[0]&&this.runes[this.runes.length-1]===n.MAX_RUNE){e+="^";for(let t=1;t ${this.out}, ${this.arg}`;case O.ALT_MATCH:return`altmatch -> ${this.out}, ${this.arg}`;case O.CAPTURE:return`cap ${this.arg} -> ${this.out}`;case O.EMPTY_WIDTH:return`empty ${this.arg} -> ${this.out}`;case O.MATCH:return"match";case O.FAIL:return"fail";case O.NOP:return`nop -> ${this.out}`;case O.RUNE:return null===this.runes?"rune ":["rune ",O.escapeRunes(this.runes),this.arg&t.FOLD_CASE?"/i":""," -> ",this.out].join("");case O.RUNE1:return`rune1 ${O.escapeRunes(this.runes)} -> ${this.out}`;case O.RUNE_ANY:return`any -> ${this.out}`;case O.RUNE_ANY_NOT_NL:return`anynotnl -> ${this.out}`;default:throw new Error("unhandled case in Inst.toString")}}}class k{constructor(){this.inst=[],this.start=0,this.numCap=2}getInst(t){return this.inst[t]}numInst(){return this.inst.length}addInst(t){this.inst.push(new O(t))}skipNop(t){let e=this.inst[t];for(;e.op===O.NOP||e.op===O.CAPTURE;)e=this.inst[t],t=e.out;return e}prefix(){let e="",s=this.skipNop(this.start);if(!O.isRuneOp(s.op)||1!==s.runes.length)return[s.op===O.MATCH,e];for(;O.isRuneOp(s.op)&&1===s.runes.length&&!(s.arg&t.FOLD_CASE);)e+=String.fromCodePoint(s.runes[0]),s=this.skipNop(s.out);return[s.op===O.MATCH,e]}startCond(){let t=0,e=this.start;t:for(;;){const s=this.inst[e];switch(s.op){case O.EMPTY_WIDTH:t|=s.arg;break;case O.FAIL:return-1;case O.CAPTURE:case O.NOP:break;default:break t}e=s.out}return t}next(t){const e=this.inst[t>>1];return 1&t?e.arg:e.out}patch(t,e){for(;0!==t;){const s=this.inst[t>>1];1&t?(t=s.arg,s.arg=e):(t=s.out,s.out=e)}}append(t,e){if(0===t)return e;if(0===e)return t;let s=t;for(;;){const t=this.next(s);if(0===t)break;s=t}const o=this.inst[s>>1];return 1&s?o.arg=e:o.out=e,t}toString(){let t="";for(let e=0;e0){s=[];for(let o=0;ot.min){let o=T.simplify1(C.Op.QUEST,t.flags,e,null);for(let s=t.min+1;s0&&(s+=" ");const e=t[o],i=t[o+1];s+=e===i?`0x${e.toString(16)}`:`0x${e.toString(16)}-0x${i.toString(16)}`}return s+="]",s}static cmp(t,e,s,o){const i=t[e]-s;return 0!==i?i:o-t[e+1]}static qsortIntPair(t,e,s){const o=(e+s)/2&-2,i=t[o],n=t[o+1];let r=e,a=s;for(;r<=a;){for(;re&&Q.cmp(t,a,i,n)>0;)a-=2;if(r<=a){if(r!==a){let e=t[r];t[r]=t[a],t[a]=e,e=t[r+1],t[r+1]=t[a+1],t[a+1]=e}r+=2,a-=2}}ethis.r[t-1]&&(this.r[t-1]=o):(this.r[t]=s,this.r[t+1]=o,t+=2)}return this.len=t,this}appendLiteral(e,s){return s&t.FOLD_CASE?this.appendFoldedRange(e,e):this.appendRange(e,e)}appendRange(t,e){if(this.len>0)for(let s=2;s<=4;s+=2)if(this.len>=s){const o=this.r[this.len-s],i=this.r[this.len-s+1];if(t<=i+1&&o<=e+1)return ti&&(this.r[this.len-s+1]=e),this}return this.r[this.len++]=t,this.r[this.len++]=e,this}appendFoldedRange(t,e){if(t<=n.MIN_FOLD&&e>=n.MAX_FOLD)return this.appendRange(t,e);if(en.MAX_FOLD)return this.appendRange(t,e);tn.MAX_FOLD&&(this.appendRange(n.MAX_FOLD+1,e),e=n.MAX_FOLD);for(let s=t;s<=e;s++){this.appendRange(s,s);for(let t=n.simpleFold(s);t!==s;t=n.simpleFold(t))this.appendRange(t,t)}return this}appendClass(t){for(let e=0;en.MAX_FOLD)return t;let e=t;const s=t;for(t=n.simpleFold(t);t!==s;t=n.simpleFold(t))e>t&&(e=t);return e}static leadingRegexp(t){if(t.op===C.Op.EMPTY_MATCH)return null;if(t.op===C.Op.CONCAT&&t.subs.length>0){const e=t.subs[0];return e.op===C.Op.EMPTY_MATCH?null:e}return t}static literalRegexp(t,e){const s=new C(C.Op.LITERAL);return s.flags=e,s.runes=r.stringToRunes(t),s}static parse(t,e){return new Z(t,e).parseInternal()}static parseRepeat(t){const e=t.pos();if(!t.more()||!t.lookingAt("{"))return-1;t.skip(1);const s=Z.parseInt(t);if(-1===s)return-1;if(!t.more())return-1;let o;if(t.lookingAt(",")){if(t.skip(1),!t.more())return-1;if(t.lookingAt("}"))o=-1;else if(-1===(o=Z.parseInt(t)))return-1}else o=s;if(!t.more()||!t.lookingAt("}"))return-1;if(t.skip(1),s<0||s>1e3||-2===o||o>1e3||o>=0&&s>o)throw new l(Z.ERR_INVALID_REPEAT_SIZE,t.from(e));return s<<16|o&n.MAX_BMP}static isValidCaptureName(t){if(0===t.length)return!1;for(let s=0;s=e.CODES.get("0")&&t.peek()<=e.CODES.get("9");)t.skip(1);const o=t.from(s);return 0===o.length||o.length>1&&o.codePointAt(0)===e.CODES.get("0")?-1:o.length>8?-2:parseFloat(o,10)}static isCharClass(t){return t.op===C.Op.LITERAL&&1===t.runes.length||t.op===C.Op.CHAR_CLASS||t.op===C.Op.ANY_CHAR_NOT_NL||t.op===C.Op.ANY_CHAR}static matchRune(t,s){switch(t.op){case C.Op.LITERAL:return 1===t.runes.length&&t.runes[0]===s;case C.Op.CHAR_CLASS:for(let e=0;ee.CODES.get("7"))break;case e.CODES.get("0"):{let s=o-e.CODES.get("0");for(let o=1;o<3&&!(!t.more()||t.peek()e.CODES.get("7"));o++)s=8*s+t.peek()-e.CODES.get("0"),t.skip(1);return s}case e.CODES.get("x"):{if(!t.more())break;if(o=t.pop(),o===e.CODES.get("{")){let s=0,i=0;for(;;){if(!t.more())break t;if(o=t.pop(),o===e.CODES.get("}"))break;const a=r.unhex(o);if(a<0)break t;if(i=16*i+a,i>n.MAX_RUNE)break t;s++}if(0===s)break t;return i}const s=r.unhex(o);if(!t.more())break;o=t.pop();const i=r.unhex(o);if(s<0||i<0)break;return 16*s+i}case e.CODES.get("a"):return e.CODES.get("");case e.CODES.get("f"):return e.CODES.get("\f");case e.CODES.get("n"):return e.CODES.get("\n");case e.CODES.get("r"):return e.CODES.get("\r");case e.CODES.get("t"):return e.CODES.get("\t");case e.CODES.get("v"):return e.CODES.get("\v");default:if(!r.isalnum(o))return o}throw new l(Z.ERR_INVALID_ESCAPE,t.from(s))}static parseClassChar(t,e){if(!t.more())throw new l(Z.ERR_MISSING_BRACKET,t.from(e));return t.lookingAt("\\")?Z.parseEscape(t):t.pop()}static concatRunes(t,e){return[...t,...e]}constructor(t,e=0){this.wholeRegexp=t,this.flags=e,this.numCap=0,this.namedGroups={},this.stack=[],this.free=null}newRegexp(t){let e=this.free;return null!==e&&null!==e.subs&&e.subs.length>0?(this.free=e.subs[0],e.reinit(),e.op=t):e=new C(t),e}reuse(t){null!==t.subs&&t.subs.length>0&&(t.subs[0]=this.free),this.free=t}pop(){return this.stack.pop()}popToPseudo(){const t=this.stack.length;let e=t;for(;e>0&&!C.isPseudoOp(this.stack[e-1].op);)e--;const s=this.stack.slice(e,t);return this.stack=this.stack.slice(0,e),s}push(e){if(e.op===C.Op.CHAR_CLASS&&2===e.runes.length&&e.runes[0]===e.runes[1]){if(this.maybeConcat(e.runes[0],this.flags&~t.FOLD_CASE))return null;e.op=C.Op.LITERAL,e.runes=[e.runes[0]],e.flags=this.flags&~t.FOLD_CASE}else if(e.op===C.Op.CHAR_CLASS&&4===e.runes.length&&e.runes[0]===e.runes[1]&&e.runes[2]===e.runes[3]&&n.simpleFold(e.runes[0])===e.runes[2]&&n.simpleFold(e.runes[2])===e.runes[0]||e.op===C.Op.CHAR_CLASS&&2===e.runes.length&&e.runes[0]+1===e.runes[1]&&n.simpleFold(e.runes[0])===e.runes[1]&&n.simpleFold(e.runes[1])===e.runes[0]){if(this.maybeConcat(e.runes[0],this.flags|t.FOLD_CASE))return null;e.op=C.Op.LITERAL,e.runes=[e.runes[0]],e.flags=this.flags|t.FOLD_CASE}else this.maybeConcat(-1,0);return this.stack.push(e),e}maybeConcat(e,s){const o=this.stack.length;if(o<2)return!1;const i=this.stack[o-1],n=this.stack[o-2];return i.op===C.Op.LITERAL&&n.op===C.Op.LITERAL&&(i.flags&t.FOLD_CASE)==(n.flags&t.FOLD_CASE)&&(n.runes=Z.concatRunes(n.runes,i.runes),e>=0?(i.runes=[e],i.flags=s,!0):(this.pop(),this.reuse(i),!1))}newLiteral(e,s){const o=this.newRegexp(C.Op.LITERAL);return o.flags=s,s&t.FOLD_CASE&&(e=Z.minFoldRune(e)),o.runes=[e],o}literal(t){this.push(this.newLiteral(t,this.flags))}op(t){const e=this.newRegexp(t);return e.flags=this.flags,this.push(e)}repeat(e,s,o,i,n,r){let a=this.flags;if(a&t.PERL_X&&(n.more()&&n.lookingAt("?")&&(n.skip(1),a^=t.NON_GREEDY),-1!==r))throw new l(Z.ERR_INVALID_REPEAT_OP,n.from(r));const c=this.stack.length;if(0===c)throw new l(Z.ERR_MISSING_REPEAT_ARGUMENT,n.from(i));const d=this.stack[c-1];if(C.isPseudoOp(d.op))throw new l(Z.ERR_MISSING_REPEAT_ARGUMENT,n.from(i));const p=this.newRegexp(e);p.min=s,p.max=o,p.flags=a,p.subs=[d],this.stack[c-1]=p}concat(){this.maybeConcat(-1,0);const t=this.popToPseudo();return 0===t.length?this.push(this.newRegexp(C.Op.EMPTY_MATCH)):this.push(this.collapse(t,C.Op.CONCAT))}alternate(){const t=this.popToPseudo();return t.length>0&&this.cleanAlt(t[t.length-1]),0===t.length?this.push(this.newRegexp(C.Op.NO_MATCH)):this.push(this.collapse(t,C.Op.ALTERNATE))}cleanAlt(t){t.op===C.Op.CHAR_CLASS&&(t.runes=new Q(t.runes).cleanClass().toArray(),2===t.runes.length&&0===t.runes[0]&&t.runes[1]===n.MAX_RUNE?(t.runes=null,t.op=C.Op.ANY_CHAR):4===t.runes.length&&0===t.runes[0]&&t.runes[1]===e.CODES.get("\n")-1&&t.runes[2]===e.CODES.get("\n")+1&&t.runes[3]===n.MAX_RUNE&&(t.runes=null,t.op=C.Op.ANY_CHAR_NOT_NL))}collapse(t,e){if(1===t.length)return t[0];let s=0;for(let o of t)s+=o.op===e?o.subs.length:1;let o=new Array(s).fill(null),i=0;for(let s of t)s.op===e?(o.splice(i,s.subs.length,...s.subs),i+=s.subs.length,this.reuse(s)):o[i++]=s;let n=this.newRegexp(e);if(n.subs=o,e===C.Op.ALTERNATE&&(n.subs=this.factor(n.subs),1===n.subs.length)){const t=n;n=n.subs[0],this.reuse(t)}return n}factor(e){if(e.length<2)return e;let s=0,o=e.length,i=0,n=null,r=0,a=0,c=0;for(let d=0;d<=o;d++){let p=null,u=0,g=0;if(d0&&(o=o.subs[0]),o.op===C.Op.LITERAL&&(p=o.runes,u=o.runes.length,g=o.flags&t.FOLD_CASE),g===a){let t=0;for(;t0){r=t;continue}}}if(d===c);else if(d===c+1)e[i++]=e[s+c];else{const t=this.newRegexp(C.Op.LITERAL);t.flags=a,t.runes=n.slice(0,r);for(let t=c;t0){const s=this.removeLeadingString(t.subs[0],e);if(t.subs[0]=s,s.op===C.Op.EMPTY_MATCH)switch(this.reuse(s),t.subs.length){case 0:case 1:t.op=C.Op.EMPTY_MATCH,t.subs=null;break;case 2:{const e=t;t=t.subs[1],this.reuse(e);break}default:t.subs=t.subs.slice(1,t.subs.length)}return t}return t.op===C.Op.LITERAL&&(t.runes=t.runes.slice(e,t.runes.length),0===t.runes.length&&(t.op=C.Op.EMPTY_MATCH)),t}removeLeadingRegexp(t,e){if(t.op===C.Op.CONCAT&&t.subs.length>0){switch(e&&this.reuse(t.subs[0]),t.subs=t.subs.slice(1,t.subs.length),t.subs.length){case 0:t.op=C.Op.EMPTY_MATCH,t.subs=C.emptySubs();break;case 1:{const e=t;t=t.subs[0],this.reuse(e);break}}return t}return e&&this.reuse(t),this.newRegexp(C.Op.EMPTY_MATCH)}parseInternal(){if(this.flags&t.LITERAL)return Z.literalRegexp(this.wholeRegexp,this.flags);let s=-1,o=-1,i=-1;const a=new K(this.wholeRegexp);for(;a.more();){let c=-1;t:switch(a.peek()){case e.CODES.get("("):if(this.flags&t.PERL_X&&a.lookingAt("(?")){this.parsePerlFlags(a);break}this.op(C.Op.LEFT_PAREN).cap=++this.numCap,a.skip(1);break;case e.CODES.get("|"):this.parseVerticalBar(),a.skip(1);break;case e.CODES.get(")"):this.parseRightParen(),a.skip(1);break;case e.CODES.get("^"):this.flags&t.ONE_LINE?this.op(C.Op.BEGIN_TEXT):this.op(C.Op.BEGIN_LINE),a.skip(1);break;case e.CODES.get("$"):this.flags&t.ONE_LINE?this.op(C.Op.END_TEXT).flags|=t.WAS_DOLLAR:this.op(C.Op.END_LINE),a.skip(1);break;case e.CODES.get("."):this.flags&t.DOT_NL?this.op(C.Op.ANY_CHAR):this.op(C.Op.ANY_CHAR_NOT_NL),a.skip(1);break;case e.CODES.get("["):this.parseClass(a);break;case e.CODES.get("*"):case e.CODES.get("+"):case e.CODES.get("?"):{c=a.pos();let t=null;switch(a.pop()){case e.CODES.get("*"):t=C.Op.STAR;break;case e.CODES.get("+"):t=C.Op.PLUS;break;case e.CODES.get("?"):t=C.Op.QUEST}this.repeat(t,o,i,c,a,s);break}case e.CODES.get("{"):{c=a.pos();const t=Z.parseRepeat(a);if(t<0){a.rewindTo(c),this.literal(a.pop());break}o=t>>16,i=(t&n.MAX_BMP)<<16>>16,this.repeat(C.Op.REPEAT,o,i,c,a,s);break}case e.CODES.get("\\"):{const s=a.pos();if(a.skip(1),this.flags&t.PERL_X&&a.more())switch(a.pop()){case e.CODES.get("A"):this.op(C.Op.BEGIN_TEXT);break t;case e.CODES.get("b"):this.op(C.Op.WORD_BOUNDARY);break t;case e.CODES.get("B"):this.op(C.Op.NO_WORD_BOUNDARY);break t;case e.CODES.get("C"):throw new l(Z.ERR_INVALID_ESCAPE,"\\C");case e.CODES.get("Q"):{let t=a.rest();const e=t.indexOf("\\E");e>=0&&(t=t.substring(0,e)),a.skipString(t),a.skipString("\\E");let s=0;for(;s");if(e<0)throw new l(Z.ERR_INVALID_NAMED_CAPTURE,i);const o=i.substring(t,e);if(s.skipString(o),s.skip(t+1),!Z.isValidCaptureName(o))throw new l(Z.ERR_INVALID_NAMED_CAPTURE,i.substring(0,e+1));const n=this.op(C.Op.LEFT_PAREN);if(n.cap=++this.numCap,this.namedGroups[o])throw new l(Z.ERR_DUPLICATE_NAMED_CAPTURE,o);return this.namedGroups[o]=this.numCap,void(n.name=o)}s.skip(2);let n=this.flags,r=1,a=!1;t:for(;s.more();){const o=s.pop();switch(o){case e.CODES.get("i"):n|=t.FOLD_CASE,a=!0;break;case e.CODES.get("m"):n&=~t.ONE_LINE,a=!0;break;case e.CODES.get("s"):n|=t.DOT_NL,a=!0;break;case e.CODES.get("U"):n|=t.NON_GREEDY,a=!0;break;case e.CODES.get("-"):if(r<0)break t;r=-1,n=~n,a=!1;break;case e.CODES.get(":"):case e.CODES.get(")"):if(r<0){if(!a)break t;n=~n}return o===e.CODES.get(":")&&this.op(C.Op.LEFT_PAREN),void(this.flags=n);default:break t}}throw new l(Z.ERR_INVALID_PERL_OP,s.from(o))}parseVerticalBar(){this.concat(),this.swapVerticalBar()||this.op(C.Op.VERTICAL_BAR)}swapVerticalBar(){const t=this.stack.length;if(t>=3&&this.stack[t-2].op===C.Op.VERTICAL_BAR&&Z.isCharClass(this.stack[t-1])&&Z.isCharClass(this.stack[t-3])){let e=this.stack[t-1],s=this.stack[t-3];if(e.op>s.op){const o=s;s=e,e=o,this.stack[t-3]=s}return Z.mergeCharClass(s,e),this.reuse(e),this.pop(),!0}if(t>=2){const e=this.stack[t-1],s=this.stack[t-2];if(s.op===C.Op.VERTICAL_BAR)return t>=3&&this.cleanAlt(this.stack[t-3]),this.stack[t-2]=e,this.stack[t-1]=s,!0}return!1}parseRightParen(){if(this.concat(),this.swapVerticalBar()&&this.pop(),this.alternate(),this.stack.length<2)throw new l(Z.ERR_INTERNAL_ERROR,"stack underflow");const t=this.pop(),e=this.pop();if(e.op!==C.Op.LEFT_PAREN)throw new l(Z.ERR_MISSING_PAREN,this.wholeRegexp);this.flags=e.flags,0===e.cap?this.push(t):(e.op=C.Op.CAPTURE,e.subs=[t],this.push(e))}parsePerlClassEscape(s,o){const i=s.pos();if(!(this.flags&t.PERL_X&&s.more()&&s.pop()===e.CODES.get("\\")&&s.more()))return!1;s.pop();const n=s.from(i),r=L.has(n)?L.get(n):null;return null!==r&&(o.appendGroup(r,!!(this.flags&t.FOLD_CASE)),!0)}parseNamedClass(e,s){const o=e.rest(),i=o.indexOf(":]");if(i<0)return!1;const n=o.substring(0,i+2);e.skipString(n);const r=X.has(n)?X.get(n):null;if(null===r)throw new l(Z.ERR_INVALID_CHAR_RANGE,n);return s.appendGroup(r,!!(this.flags&t.FOLD_CASE)),!0}parseUnicodeClass(s,o){const i=s.pos();if(!(this.flags&t.UNICODE_GROUPS)||!s.lookingAt("\\p")&&!s.lookingAt("\\P"))return!1;s.skip(1);let n,a=1,c=s.pop();if(c===e.CODES.get("P")&&(a=-1),!s.more())throw s.rewindTo(i),new l(Z.ERR_INVALID_CHAR_RANGE,s.rest());if(c=s.pop(),c!==e.CODES.get("{"))n=r.runeToString(c);else{const t=s.rest(),e=t.indexOf("}");if(e<0)throw s.rewindTo(i),new l(Z.ERR_INVALID_CHAR_RANGE,s.rest());n=t.substring(0,e),s.skipString(n),s.skip(1)}0!==n.length&&n.codePointAt(0)===e.CODES.get("^")&&(a=0-a,n=n.substring(1));const d=Z.unicodeTable(n);if(null===d)throw new l(Z.ERR_INVALID_CHAR_RANGE,s.from(i));const p=d.first,u=d.second;if(this.flags&t.FOLD_CASE&&null!==u){const t=(new Q).appendTable(p).appendTable(u).cleanClass().toArray();o.appendClassWithSign(t,a)}else o.appendTableWithSign(p,a);return!0}parseClass(s){const o=s.pos();s.skip(1);const i=this.newRegexp(C.Op.CHAR_CLASS);i.flags=this.flags;const n=new Q;let r=1;s.more()&&s.lookingAt("^")&&(r=-1,s.skip(1),this.flags&t.CLASS_NL||n.appendRange(e.CODES.get("\n"),e.CODES.get("\n")));let a=!0;for(;!s.more()||s.peek()!==e.CODES.get("]")||a;){if(s.more()&&s.lookingAt("-")&&!(this.flags&t.PERL_X)&&!a){const t=s.rest();if("-"===t||!t.startsWith("-]"))throw s.rewindTo(o),new l(Z.ERR_INVALID_CHAR_RANGE,s.rest())}a=!1;const e=s.pos();if(s.lookingAt("[:")){if(this.parseNamedClass(s,n))continue;s.rewindTo(e)}if(this.parseUnicodeClass(s,n))continue;if(this.parsePerlClassEscape(s,n))continue;s.rewindTo(e);const i=Z.parseClassChar(s,o);let r=i;if(s.more()&&s.lookingAt("-"))if(s.skip(1),s.more()&&s.lookingAt("]"))s.skip(-1);else if(r=Z.parseClassChar(s,o),rthis.matchcap.length?this.initNewCap(t):this.resetCap(t)}resetCap(t){for(let e=0;e0?(this.poolSize--,e=this.pool[this.poolSize]):e=new J,e.inst=t,e}freeQueue(t,e=0){const s=t.size-e,o=this.poolSize+s;this.pool.length>3,u=7&d,g=-1,l=0;for(d!==E.EOF()&&(d=e.step(s+u),g=d>>3,l=7&d),n=0===s?r.emptyOpContext(-1,p):e.context(s);;){if(a.isEmpty()){if(i&r.EMPTY_BEGIN_TEXT&&0!==s)break;if(this.matched)break;if(0!==this.re2.prefix.length&&g!==this.re2.prefixRune&&e.canCheckPrefix()){const t=e.index(this.re2,s);if(t<0)break;s+=t,d=e.step(s),p=d>>3,u=7&d,d=e.step(s+u),g=d>>3,l=7&d}}this.matched||0!==s&&o!==t.UNANCHORED||(this.ncap>0&&(this.matchcap[0]=s),this.add(a,this.prog.start,s,this.matchcap,n,null));const h=s+u;if(n=e.context(h),this.step(a,c,s,h,p,n,o,s===e.endPos()),0===u)break;if(0===this.ncap&&this.matched)break;s+=u,p=g,u=l,-1!==p&&(d=e.step(s+u),g=d>>3,l=7&d);const m=a;a=c,c=m}return this.freeQueue(c),this.matched}step(s,o,i,n,r,a,c,d){const p=this.re2.longest;for(let u=0;u0&&this.matchcap[0]0&&(!p||!this.matched||this.matchcap[1]0&&n.cap!==o&&(n.cap=o.slice(0,this.ncap)),t.denseThreads[r]=n,n=null;break;default:throw new Error("unhandled")}return n}}class et{constructor(t){this.value=t}get(){return this.value}set(t){this.value=t}compareAndSet(t,e){return this.value===t&&(this.value=e,!0)}}class st{static initTest(t){const e=st.compile(t),s=new st(e.expr,e.prog,e.numSubexp,e.longest);return s.cond=e.cond,s.prefix=e.prefix,s.prefixUTF8=e.prefixUTF8,s.prefixComplete=e.prefixComplete,s.prefixRune=e.prefixRune,s}static compile(e){return st.compileImpl(e,t.PERL,!1)}static compilePOSIX(e){return st.compileImpl(e,t.POSIX,!0)}static compileImpl(t,e,s){let o=Z.parse(t,e);const i=o.maxCap();o=T.simplify(o);const n=S.compileRegexp(o),a=new st(t,n,i,s),[c,d]=n.prefix();return a.prefixComplete=c,a.prefix=d,a.prefixUTF8=r.stringToUtf8ByteArray(a.prefix),a.prefix.length>0&&(a.prefixRune=a.prefix.codePointAt(0)),a.namedGroups=o.namedGroups,a}static match(t,e){return st.compile(t).match(e)}constructor(t,e,s=0,o=0){this.expr=t,this.prog=e,this.numSubexp=s,this.longest=o,this.cond=e.startCond(),this.prefix=null,this.prefixUTF8=null,this.prefixComplete=!1,this.prefixRune=0,this.pooled=new et}numberOfCapturingGroups(){return this.numSubexp}get(){let t;do{t=this.pooled.get()}while(t&&!this.pooled.compareAndSet(t,t.next));return t}reset(){this.pooled.set(null)}put(t,e){let s=this.pooled.get();do{s=this.pooled.get(),!e&&s&&(t=tt.fromMachine(t),e=!0),t.next!==s&&(t.next=s)}while(!this.pooled.compareAndSet(s,t))}toString(){return this.expr}doExecute(t,e,s,o){let i=this.get(),n=!1;i?null!==i.next&&(i=tt.fromMachine(i),n=!0):(i=tt.fromRE2(this),n=!0),i.init(o);const r=i.match(t,e,s)?i.submatches():null;return this.put(i,n),r}match(e){return null!==this.doExecute(w.fromUTF16(e),0,t.UNANCHORED,0)}matchWithGroup(t,e,s,o,i){return t instanceof c||(t=u.utf16(t)),this.matchMachineInput(t,e,s,o,i)}matchMachineInput(t,e,s,o,i){if(e>s)return[!1,null];const n=t.isUTF16Encoding()?w.fromUTF16(t.asCharSequence(),0,s):w.fromUTF8(t.asBytes(),0,s),r=this.doExecute(n,e,o,2*i);return null===r?[!1,null]:[!0,r]}matchUTF8(e){return null!==this.doExecute(w.fromUTF8(e),0,t.UNANCHORED,0)}replaceAll(t,e){return this.replaceAllFunc(t,(()=>e),2*t.length+1)}replaceFirst(t,e){return this.replaceAllFunc(t,(()=>e),1)}replaceAllFunc(e,s,o){let i=0,n=0,r="";const a=w.fromUTF16(e);let c=0;for(;n<=e.length;){const d=this.doExecute(a,n,t.UNANCHORED,2);if(null===d||0===d.length)break;r+=e.substring(i,d[0]),(d[1]>i||0===d[0])&&(r+=s(e.substring(d[0],d[1])),c++),i=d[1];const p=7&a.step(n);if(n+p>d[1]?n+=p:n+1>d[1]?n++:n=d[1],c>=o)break}return r+=e.substring(i),r}pad(t){if(null===t)return null;let e=2*(1+this.numSubexp);if(t.lengtht)){let i=[];const n=e.endPos();s<0&&(s=n+1);let r=0,a=0,c=-1;for(;a=0&&(o[t]=e.slice(s[2*t],s[2*t+1]));return o}findUTF8SubmatchIndex(e){return this.pad(this.doExecute(w.fromUTF8(e),0,t.UNANCHORED,this.prog.numCap))}findSubmatch(e){const s=this.doExecute(w.fromUTF16(e),0,t.UNANCHORED,this.prog.numCap);if(null===s)return null;const o=new Array(1+this.numSubexp).fill(null);for(let t=0;t=0&&(o[t]=e.substring(s[2*t],s[2*t+1]));return o}findSubmatchIndex(e){return this.pad(this.doExecute(w.fromUTF16(e),0,t.UNANCHORED,this.prog.numCap))}findAllUTF8(t,e){const s=this.allMatches(w.fromUTF8(t),e,(e=>t.slice(e[0],e[1])));return 0===s.length?null:s}findAllUTF8Index(t,e){const s=this.allMatches(w.fromUTF8(t),e,(t=>t.slice(0,2)));return 0===s.length?null:s}findAll(t,e){const s=this.allMatches(w.fromUTF16(t),e,(e=>t.substring(e[0],e[1])));return 0===s.length?null:s}findAllIndex(t,e){const s=this.allMatches(w.fromUTF16(t),e,(t=>t.slice(0,2)));return 0===s.length?null:s}findAllUTF8Submatch(t,e){const s=this.allMatches(w.fromUTF8(t),e,(e=>{let s=new Array(e.length/2|0).fill(null);for(let o=0;o=0&&(s[o]=t.slice(e[2*o],e[2*o+1]));return s}));return 0===s.length?null:s}findAllUTF8SubmatchIndex(t,e){const s=this.allMatches(w.fromUTF8(t),e);return 0===s.length?null:s}findAllSubmatch(t,e){const s=this.allMatches(w.fromUTF16(t),e,(e=>{let s=new Array(e.length/2|0).fill(null);for(let o=0;o=0&&(s[o]=t.substring(e[2*o],e[2*o+1]));return s}));return 0===s.length?null:s}findAllSubmatchIndex(t,e){const s=this.allMatches(w.fromUTF16(t),e);return 0===s.length?null:s}}class ot{static CASE_INSENSITIVE=1;static DOTALL=2;static MULTILINE=4;static DISABLE_UNICODE_GROUPS=8;static LONGEST_MATCH=16;static quote(t){return r.quoteMeta(t)}static compile(e,s=0){let o=e;if(s&ot.CASE_INSENSITIVE&&(o=`(?i)${o}`),s&ot.DOTALL&&(o=`(?s)${o}`),s&ot.MULTILINE&&(o=`(?m)${o}`),s&~(ot.MULTILINE|ot.DOTALL|ot.CASE_INSENSITIVE|ot.DISABLE_UNICODE_GROUPS|ot.LONGEST_MATCH))throw new f("Flags should only be a combination of MULTILINE, DOTALL, CASE_INSENSITIVE, DISABLE_UNICODE_GROUPS, LONGEST_MATCH");let i=t.PERL;s&ot.DISABLE_UNICODE_GROUPS&&(i&=~t.UNICODE_GROUPS);const n=new ot(e,s);return n.re2Input=st.compileImpl(o,i,!!(s&ot.LONGEST_MATCH)),n}static matches(t,e){return ot.compile(t).matcher(e).matches()}static initTest(t,e,s){if(null==t)throw new Error("pattern is null");if(null==s)throw new Error("re2 is null");const o=new ot(t,e);return o.re2Input=s,o}constructor(t,e){this.patternInput=t,this.flagsInput=e}reset(){this.re2Input.reset()}flags(){return this.flagsInput}pattern(){return this.patternInput}re2(){return this.re2Input}matches(t){return this.matcher(t).matches()}matcher(t){return Array.isArray(t)&&(t=u.utf8(t)),new y(this,t)}split(t,e=0){const s=this.matcher(t),o=[];let i=0,n=0;for(;s.find();)if(0!==n||0!==s.end()){if(e>0&&o.length===e-1)break;if(n===s.start()){if(0===e){i+=1,n=s.end();continue}}else for(;i>0;)o.push(""),i-=1;o.push(s.substring(n,s.start())),n=s.end()}else n=s.end();if(0===e&&n!==s.inputLength()){for(;i>0;)o.push(""),i-=1;o.push(s.substring(n,s.inputLength()))}return 0===e&&0!==o.length||o.push(s.substring(n,s.inputLength())),o}toString(){return this.patternInput}groupCount(){return this.re2Input.numberOfCapturingGroups()}namedGroups(){return this.re2Input.namedGroups}equals(t){return this===t||null!==t&&this.constructor===t.constructor&&this.flagsInput===t.flagsInput&&this.patternInput===t.patternInput}}var it=s(928);const nt=t=>{if("string"!=typeof t)throw new TypeError("invalid pattern");if(t.length>65536)throw new TypeError("pattern is too long")},rt={"[:alnum:]":["\\p{L}\\p{Nl}\\p{Nd}",!0],"[:alpha:]":["\\p{L}\\p{Nl}",!0],"[:ascii:]":["\\x00-\\x7f",!1],"[:blank:]":["\\p{Zs}\\t",!0],"[:cntrl:]":["\\p{Cc}",!0],"[:digit:]":["\\p{Nd}",!0],"[:graph:]":["\\p{Z}\\p{C}",!0,!0],"[:lower:]":["\\p{Ll}",!0],"[:print:]":["\\p{C}",!0],"[:punct:]":["\\p{P}",!0],"[:space:]":["\\p{Z}\\t\\r\\n\\v\\f",!0],"[:upper:]":["\\p{Lu}",!0],"[:word:]":["\\p{L}\\p{Nl}\\p{Nd}\\p{Pc}",!0],"[:xdigit:]":["A-Fa-f0-9",!1]},at=t=>t.replace(/[[\]\\-]/g,"\\$&"),ct=t=>t.join(""),dt=(t,e)=>{const s=e;if("["!==t.charAt(s))throw new Error("not in a brace expression");const o=[],i=[];let n=s+1,r=!1,a=!1,c=!1,d=!1,p=s,u="";t:for(;nu?o.push(at(u)+"-"+at(e)):e===u&&o.push(at(e)),u="",n++):t.startsWith("-]",n+1)?(o.push(at(e+"-")),n+=2):t.startsWith("-",n+1)?(u=e,n+=2):(o.push(at(e)),n++)}else c=!0,n++}else d=!0,n++}if(pe?t.replace(/\[([^\/\\])\]/g,"$1"):t.replace(/((?!\\).|^)\[([^\/\\])\]/g,"$1$2").replace(/\\([^\/])/g,"$1"),ut=new Set(["!","?","+","*","@"]),gt=t=>ut.has(t),lt="(?!\\.)",ht=new Set(["[","."]),mt=new Set(["..","."]),ft=new Set("().*{}+?[]^$\\!"),yt="[^/]",Et=yt+"*?",bt=yt+"+?";class At{type;#t;#e;#s=!1;#o=[];#i;#n;#r;#a=!1;#c;#d;#p=!1;constructor(t,e,s={}){this.type=t,t&&(this.#e=!0),this.#i=e,this.#t=this.#i?this.#i.#t:this,this.#c=this.#t===this?s:this.#t.#c,this.#r=this.#t===this?[]:this.#t.#r,"!"!==t||this.#t.#a||this.#r.push(this),this.#n=this.#i?this.#i.#o.length:0}get hasMagic(){if(void 0!==this.#e)return this.#e;for(const t of this.#o)if("string"!=typeof t&&(t.type||t.hasMagic))return this.#e=!0;return this.#e}toString(){return void 0!==this.#d?this.#d:this.type?this.#d=this.type+"("+this.#o.map((t=>String(t))).join("|")+")":this.#d=this.#o.map((t=>String(t))).join("")}#u(){if(this!==this.#t)throw new Error("should only call on root");if(this.#a)return this;let t;for(this.toString(),this.#a=!0;t=this.#r.pop();){if("!"!==t.type)continue;let e=t,s=e.#i;for(;s;){for(let o=e.#n+1;!s.type&&o"string"==typeof t?t:t.toJSON())):[this.type,...this.#o.map((t=>t.toJSON()))];return this.isStart()&&!this.type&&t.unshift([]),this.isEnd()&&(this===this.#t||this.#t.#a&&"!"===this.#i?.type)&&t.push({}),t}isStart(){if(this.#t===this)return!0;if(!this.#i?.isStart())return!1;if(0===this.#n)return!0;const t=this.#i;for(let e=0;e{const[o,i,n,r]="string"==typeof e?At.#l(e,this.#e,s):e.toRegExpSource(t);return this.#e=this.#e||n,this.#s=this.#s||r,o})).join("");let i="";if(this.isStart()&&"string"==typeof this.#o[0]&&(1!==this.#o.length||!mt.has(this.#o[0]))){const s=ht,n=e&&s.has(o.charAt(0))||o.startsWith("\\.")&&s.has(o.charAt(2))||o.startsWith("\\.\\.")&&s.has(o.charAt(4)),r=!e&&!t&&s.has(o.charAt(0));i=n?"(?!(?:^|/)\\.\\.?(?:$|/))":r?lt:""}let n="";return this.isEnd()&&this.#t.#a&&"!"===this.#i?.type&&(n="(?:$|\\/)"),[i+o+n,pt(o),this.#e=!!this.#e,this.#s]}const s="*"===this.type||"+"===this.type,o="!"===this.type?"(?:(?!(?:":"(?:";let i=this.#h(e);if(this.isStart()&&this.isEnd()&&!i&&"!"!==this.type){const t=this.toString();return this.#o=[t],this.type=null,this.#e=void 0,[t,pt(this.toString()),!1,!1]}let n=!s||t||e?"":this.#h(!0);n===i&&(n=""),n&&(i=`(?:${i})(?:${n})*?`);let r="";return r="!"===this.type&&this.#p?(this.isStart()&&!e?lt:"")+bt:o+i+("!"===this.type?"))"+(!this.isStart()||e||t?"":lt)+Et+")":"@"===this.type?")":"?"===this.type?")?":"+"===this.type&&n?")":"*"===this.type&&n?")?":`)${this.type}`),[r,pt(i),this.#e=!!this.#e,this.#s]}#h(t){return this.#o.map((e=>{if("string"==typeof e)throw new Error("string type in extglob ast??");const[s,o,i,n]=e.toRegExpSource(t);return this.#s=this.#s||n,s})).filter((t=>!(this.isStart()&&this.isEnd()&&!t))).join("|")}static#l(t,e,s=!1){let o=!1,i="",n=!1;for(let r=0;r(nt(e),!(!s.nocomment&&"#"===e.charAt(0))&&new Qt(e,s).match(t)),Ct=/^\*+([^+@!?\*\[\(]*)$/,Ot=t=>e=>!e.startsWith(".")&&e.endsWith(t),kt=t=>e=>e.endsWith(t),_t=t=>(t=t.toLowerCase(),e=>!e.startsWith(".")&&e.toLowerCase().endsWith(t)),St=t=>(t=t.toLowerCase(),e=>e.toLowerCase().endsWith(t)),Tt=/^\*+\.\*+$/,Rt=t=>!t.startsWith(".")&&t.includes("."),Nt=t=>"."!==t&&".."!==t&&t.includes("."),vt=/^\.\*+$/,Mt=t=>"."!==t&&".."!==t&&t.startsWith("."),Lt=/^\*+$/,It=t=>0!==t.length&&!t.startsWith("."),xt=t=>0!==t.length&&"."!==t&&".."!==t,Pt=/^\?+([^+@!?\*\[\(]*)?$/,Dt=([t,e=""])=>{const s=Ht([t]);return e?(e=e.toLowerCase(),t=>s(t)&&t.toLowerCase().endsWith(e)):s},Ut=([t,e=""])=>{const s=Yt([t]);return e?(e=e.toLowerCase(),t=>s(t)&&t.toLowerCase().endsWith(e)):s},Gt=([t,e=""])=>{const s=Yt([t]);return e?t=>s(t)&&t.endsWith(e):s},Ft=([t,e=""])=>{const s=Ht([t]);return e?t=>s(t)&&t.endsWith(e):s},Ht=([t])=>{const e=t.length;return t=>t.length===e&&!t.startsWith(".")},Yt=([t])=>{const e=t.length;return t=>t.length===e&&"."!==t&&".."!==t},Bt="object"==typeof process&&process?"object"==typeof process.env&&process.env&&process.env.__MINIMATCH_TESTING_PLATFORM__||process.platform:"posix",zt="win32"===Bt?"\\":"/";wt.sep=zt;const qt=Symbol("globstar **");wt.GLOBSTAR=qt,wt.filter=(t,e={})=>s=>wt(s,t,e);const jt=(t,e={})=>Object.assign({},t,e);wt.defaults=t=>{if(!t||"object"!=typeof t||!Object.keys(t).length)return wt;const e=wt;return Object.assign(((s,o,i={})=>e(s,o,jt(t,i))),{Minimatch:class extends e.Minimatch{constructor(e,s={}){super(e,jt(t,s))}static defaults(s){return e.defaults(jt(t,s)).Minimatch}},AST:class extends e.AST{constructor(e,s,o={}){super(e,s,jt(t,o))}static fromGlob(s,o={}){return e.AST.fromGlob(s,jt(t,o))}},unescape:(s,o={})=>e.unescape(s,jt(t,o)),escape:(s,o={})=>e.escape(s,jt(t,o)),filter:(s,o={})=>e.filter(s,jt(t,o)),defaults:s=>e.defaults(jt(t,s)),makeRe:(s,o={})=>e.makeRe(s,jt(t,o)),braceExpand:(s,o={})=>e.braceExpand(s,jt(t,o)),match:(s,o,i={})=>e.match(s,o,jt(t,i)),sep:e.sep,GLOBSTAR:qt})};const Wt=(t,e={})=>(nt(t),e.nobrace||!/\{(?:(?!\{).)*\}/.test(t)?[t]:it(t));wt.braceExpand=Wt,wt.makeRe=(t,e={})=>new Qt(t,e).makeRe(),wt.match=(t,e,s={})=>{const o=new Qt(e,s);return t=t.filter((t=>o.match(t))),o.options.nonull&&!t.length&&t.push(e),t};const Xt=/[?*]|[+@!]\(.*?\)|\[|\]/;class Qt{options;set;pattern;windowsPathsNoEscape;nonegate;negate;comment;empty;preserveMultipleSlashes;partial;globSet;globParts;nocase;isWindows;platform;windowsNoMagicRoot;regexp;constructor(t,e={}){nt(t),e=e||{},this.options=e,this.pattern=t,this.platform=e.platform||Bt,this.isWindows="win32"===this.platform,this.windowsPathsNoEscape=!!e.windowsPathsNoEscape||!1===e.allowWindowsEscape,this.windowsPathsNoEscape&&(this.pattern=this.pattern.replace(/\\/g,"/")),this.preserveMultipleSlashes=!!e.preserveMultipleSlashes,this.regexp=null,this.negate=!1,this.nonegate=!!e.nonegate,this.comment=!1,this.empty=!1,this.partial=!!e.partial,this.nocase=!!this.options.nocase,this.windowsNoMagicRoot=void 0!==e.windowsNoMagicRoot?e.windowsNoMagicRoot:!(!this.isWindows||!this.nocase),this.globSet=[],this.globParts=[],this.set=[],this.make()}hasMagic(){if(this.options.magicalBraces&&this.set.length>1)return!0;for(const t of this.set)for(const e of t)if("string"!=typeof e)return!0;return!1}debug(...t){}make(){const t=this.pattern,e=this.options;if(!e.nocomment&&"#"===t.charAt(0))return void(this.comment=!0);if(!t)return void(this.empty=!0);this.parseNegate(),this.globSet=[...new Set(this.braceExpand())],e.debug&&(this.debug=(...t)=>console.error(...t)),this.debug(this.pattern,this.globSet);const s=this.globSet.map((t=>this.slashSplit(t)));this.globParts=this.preprocess(s),this.debug(this.pattern,this.globParts);let o=this.globParts.map(((t,e,s)=>{if(this.isWindows&&this.windowsNoMagicRoot){const e=!(""!==t[0]||""!==t[1]||"?"!==t[2]&&Xt.test(t[2])||Xt.test(t[3])),s=/^[a-z]:/i.test(t[0]);if(e)return[...t.slice(0,4),...t.slice(4).map((t=>this.parse(t)))];if(s)return[t[0],...t.slice(1).map((t=>this.parse(t)))]}return t.map((t=>this.parse(t)))}));if(this.debug(this.pattern,o),this.set=o.filter((t=>-1===t.indexOf(!1))),this.isWindows)for(let t=0;t=2?(t=this.firstPhasePreProcess(t),t=this.secondPhasePreProcess(t)):t=e>=1?this.levelOneOptimize(t):this.adjascentGlobstarOptimize(t),t}adjascentGlobstarOptimize(t){return t.map((t=>{let e=-1;for(;-1!==(e=t.indexOf("**",e+1));){let s=e;for(;"**"===t[s+1];)s++;s!==e&&t.splice(e,s-e)}return t}))}levelOneOptimize(t){return t.map((t=>0===(t=t.reduce(((t,e)=>{const s=t[t.length-1];return"**"===e&&"**"===s?t:".."===e&&s&&".."!==s&&"."!==s&&"**"!==s?(t.pop(),t):(t.push(e),t)}),[])).length?[""]:t))}levelTwoFileOptimize(t){Array.isArray(t)||(t=this.slashSplit(t));let e=!1;do{if(e=!1,!this.preserveMultipleSlashes){for(let s=1;so&&s.splice(o+1,i-o);let n=s[o+1];const r=s[o+2],a=s[o+3];if(".."!==n)continue;if(!r||"."===r||".."===r||!a||"."===a||".."===a)continue;e=!0,s.splice(o,1);const c=s.slice(0);c[o]="**",t.push(c),o--}if(!this.preserveMultipleSlashes){for(let t=1;tt.length))}partsMatch(t,e,s=!1){let o=0,i=0,n=[],r="";for(;on?e=e.slice(r):n>r&&(t=t.slice(n)))}}const{optimizationLevel:i=1}=this.options;i>=2&&(t=this.levelTwoFileOptimize(t)),this.debug("matchOne",this,{file:t,pattern:e}),this.debug("matchOne",t.length,e.length);for(var n=0,r=0,a=t.length,c=e.length;n>> no match, partial?",t,u,e,g),u!==a))}let i;if("string"==typeof d?(i=p===d,this.debug("string match",d,p,i)):(i=d.test(p),this.debug("pattern match",d,p,i)),!i)return!1}if(n===a&&r===c)return!0;if(n===a)return s;if(r===c)return n===a-1&&""===t[n];throw new Error("wtf?")}braceExpand(){return Wt(this.pattern,this.options)}parse(t){nt(t);const e=this.options;if("**"===t)return qt;if(""===t)return"";let s,o=null;(s=t.match(Lt))?o=e.dot?xt:It:(s=t.match(Ct))?o=(e.nocase?e.dot?St:_t:e.dot?kt:Ot)(s[1]):(s=t.match(Pt))?o=(e.nocase?e.dot?Ut:Dt:e.dot?Gt:Ft)(s):(s=t.match(Tt))?o=e.dot?Nt:Rt:(s=t.match(vt))&&(o=Mt);const i=At.fromGlob(t,this.options).toMMPattern();return o&&"object"==typeof i&&Reflect.defineProperty(i,"test",{value:o}),i}makeRe(){if(this.regexp||!1===this.regexp)return this.regexp;const t=this.set;if(!t.length)return this.regexp=!1,this.regexp;const e=this.options,s=e.noglobstar?"[^/]*?":e.dot?"(?:(?!(?:\\/|^)(?:\\.{1,2})($|\\/)).)*?":"(?:(?!(?:\\/|^)\\.).)*?",o=new Set(e.nocase?["i"]:[]);let i=t.map((t=>{const e=t.map((t=>{if(t instanceof RegExp)for(const e of t.flags.split(""))o.add(e);return"string"==typeof t?t.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&"):t===qt?qt:t._src}));return e.forEach(((t,o)=>{const i=e[o+1],n=e[o-1];t===qt&&n!==qt&&(void 0===n?void 0!==i&&i!==qt?e[o+1]="(?:\\/|"+s+"\\/)?"+i:e[o]=s:void 0===i?e[o-1]=n+"(?:\\/|"+s+")?":i!==qt&&(e[o-1]=n+"(?:\\/|\\/"+s+"\\/)"+i,e[o+1]=qt))})),e.filter((t=>t!==qt)).join("/")})).join("|");const[n,r]=t.length>1?["(?:",")"]:["",""];i="^"+n+i+r+"$",this.negate&&(i="^(?!"+i+").+$");try{this.regexp=new RegExp(i,[...o].join(""))}catch(t){this.regexp=!1}return this.regexp}slashSplit(t){return this.preserveMultipleSlashes?t.split("/"):this.isWindows&&/^\/\/[^\/]+/.test(t)?["",...t.split(/\/+/)]:t.split(/\/+/)}match(t,e=this.partial){if(this.debug("match",t,this.pattern),this.comment)return!1;if(this.empty)return""===t;if("/"===t&&e)return!0;const s=this.options;this.isWindows&&(t=t.split("\\").join("/"));const o=this.slashSplit(t);this.debug(this.pattern,"split",o);const i=this.set;this.debug(this.pattern,"set",i);let n=o[o.length-1];if(!n)for(let t=o.length-2;!n&&t>=0;t--)n=o[t];for(let t=0;t=48&&c<=57||c>=65&&c<=90||c>=97&&c<=122||95===c))break;r+=t[a++]}if(!r)throw new TypeError("Missing parameter name at ".concat(s));e.push({type:"NAME",index:s,value:r}),s=a}else e.push({type:"CLOSE",index:s,value:t[s++]});else e.push({type:"OPEN",index:s,value:t[s++]});else e.push({type:"ESCAPED_CHAR",index:s++,value:t[s++]});else e.push({type:"MODIFIER",index:s,value:t[s++]})}return e.push({type:"END",index:s,value:""}),e}(t),o=e.prefixes,i=void 0===o?"./":o,n="[^".concat(Kt(e.delimiter||"/#?"),"]+?"),r=[],a=0,c=0,d="",p=function(t){if(c)?(?!\?)/g,o=0,i=s.exec(t.source);i;)e.push({name:i[1]||o++,prefix:"",suffix:"",modifier:"",pattern:""}),i=s.exec(t.source);return t}(t,e):Array.isArray(t)?function(t,e,s){var o=t.map((function(t){return Jt(t,e,s).source}));return new RegExp("(?:".concat(o.join("|"),")"),Zt(s))}(t,e,s):function(t,e,s){return function(t,e,s){void 0===s&&(s={});for(var o=s.strict,i=void 0!==o&&o,n=s.start,r=void 0===n||n,a=s.end,c=void 0===a||a,d=s.encode,p=void 0===d?function(t){return t}:d,u=s.delimiter,g=void 0===u?"/#?":u,l=s.endsWith,h="[".concat(Kt(void 0===l?"":l),"]|$"),m="[".concat(Kt(g),"]"),f=r?"^":"",y=0,E=t;y-1:void 0===O;i||(f+="(?:".concat(m,"(?=").concat(h,"))?")),k||(f+="(?=".concat(m,"|").concat(h,")"))}return new RegExp(f,Zt(s))}(Vt(t,s),e,s)}(t,e,s)}wt.AST=At,wt.Minimatch=Qt,wt.escape=(t,{windowsPathsNoEscape:e=!1}={})=>e?t.replace(/[?*()[\]]/g,"[$&]"):t.replace(/[?*()[\]\\]/g,"\\$&"),wt.unescape=pt;const $t={hosting:{public:"_site",cleanUrls:!0,trailingSlash:!1,ignore:["firebase.json","**/.*","tool","src","**/node_modules/**"],rewrites:[],redirects:[{regex:"^/(flutter(/.*)?)",destination:"https://api.flutter-io.cn/:1",type:301},{regex:"^/(objcdoc(/.*)?)",destination:"https://api.flutter-io.cn/:1",type:301},{regex:"^/(javadoc(/.*)?)",destination:"https://api.flutter-io.cn/:1",type:301},{regex:"(?P.*)\\.html$",destination:":basename",type:301},{regex:"(?P.*)\\.$",destination:":basename",type:301},{source:"/ads",destination:"https://flutter.cn/monetization",type:301},{source:"/community",destination:"https://flutter.cn/community",type:301},{source:"/gallery",destination:"https://github.com/flutter/gallery#flutter-gallery",type:301},{source:"/showcase",destination:"https://flutter.cn/showcase",type:301},{source:"/support",destination:"https://flutter.cn/community",type:301},{source:"/docs/:rest*",destination:"/:rest*",type:301},{source:"/subscribe/**",destination:"https://flutter.cn#newsletter",type:301},{source:"/accessibility",destination:"/ui/accessibility-and-internationalization/accessibility",type:301},{source:"/adaptations",destination:"/platform-integration/platform-adaptations",type:301},{source:"/adaptive*",destination:"/ui/adaptive-responsive",type:301},{source:"/android-release",destination:"/deployment/android",type:301},{source:"/animations",destination:"/ui/animations",type:301},{source:"/animations/:rest*",destination:"/ui/animations/:rest*",type:301},{source:"/assets-and-images",destination:"/ui/assets/assets-and-images",type:301},{source:"/bootstrap-into-dart",destination:"/resources/bootstrap-into-dart",type:301},{source:"/bug-reports",destination:"/resources/bug-reports",type:301},{source:"/cd",destination:"/deployment/cd",type:301},{source:"/custom-fonts",destination:"/cookbook/design/fonts",type:301},{source:"/data-and-backend/json",destination:"/data-and-backend/serialization/json",type:301},{source:"/debugging",destination:"/testing/debugging",type:301},{source:"/deferred-components",destination:"/perf/deferred-components",type:301},{source:"/desktop",destination:"/platform-integration/desktop",type:301},{source:"/desktop/windows",destination:"/platform-integration/windows/building",type:301},{source:"/desktop/macos",destination:"/platform-integration/macos/building",type:301},{source:"/desktop/linux",destination:"/platform-integration/linux/building",type:301},{source:"/perf/rendering/*",destination:"/perf",type:301},{source:"/developing-packages",destination:"/packages-and-plugins/developing-packages",type:301},{source:"/development",destination:"/",type:301},{source:"/development/:rest*",destination:"/:rest*",type:301},{source:"/devtools/:rest*",destination:"/tools/devtools/:rest*",type:301},{source:"/downloads/:resource*",destination:"/resources/:resource*",type:301},{source:"/f/flutter-survey-metadata.json",destination:"https://storage.googleapis.com/flutter-uxr/surveys/flutter-survey-metadata.json",type:301},{source:"/faq",destination:"/resources/faq",type:301},{source:"/fastlane-cd",destination:"/deployment/cd#fastlane",type:301},{source:"/flutter-for-:platform*",destination:"/get-started/flutter-for/:platform*-devs",type:301},{source:"/formatting",destination:"/tools/formatting",type:301},{source:"/gestures",destination:"/ui/advanced/gestures",type:301},{source:"/hot-reload",destination:"/tools/hot-reload",type:301},{source:"/ide-setup",destination:"/get-started/editor",type:301},{source:"/images/catalog-widget-placeholder.png",destination:"/assets/images/docs/catalog-widget-placeholder.png",type:301},{source:"/inspector",destination:"/tools/devtools/inspector",type:301},{source:"/intellij-ide",destination:"/tools/android-studio",type:301},{source:"/intellij-setup",destination:"/get-started/editor",type:301},{source:"/ios-release",destination:"/deployment/ios",type:301},{source:"/jobs/**",destination:"/jobs",type:301},{source:"/json",destination:"/data-and-backend/serialization/json",type:301},{source:"/ui/media",destination:"/ui/assets",type:301},{source:"/ui/media/:rest*",destination:"/ui/assets/:rest*",type:301},{source:"/networking",destination:"/data-and-backend/networking",type:301},{source:"/overview",destination:"/resources/architectural-overview",type:301},{source:"/platform-channels",destination:"/platform-integration/platform-channels",type:301},{source:"/packages-and-plugins/happy-paths",destination:"/packages-and-plugins/favorites",type:301},{source:"/packages-and-plugins/happy-paths/recommended",destination:"/packages-and-plugins/favorites",type:301},{source:"/platform-plugins*",destination:"/packages-and-plugins/using-packages",type:301},{source:"/platform-services",destination:"/platform-integration/platform-channels",type:301},{source:"/predictive-back",destination:"/release/breaking-changes/android-predictive-back#migration-guide",type:301},{source:"/reading-writing-files",destination:"/cookbook/persistence/reading-writing-files",type:301},{source:"/reference/tutorials",destination:"/codelabs",type:301},{source:"/release-notes",destination:"/release/release-notes",type:301},{source:"/release-notes/:version*",destination:"/release/release-notes/release-notes-:version*",type:301},{source:"/responsive*",destination:"/ui/layout/responsive/adaptive-responsive",type:301},{source:"/routing-and-navigation",destination:"/ui/navigation",type:301},{source:"/sdk-archive",destination:"/release/archive",type:301},{source:"/setup-:os*",destination:"/get-started/install/:os*",type:301},{source:"/setup",destination:"/get-started/install",type:301},{source:"/technical-overview",destination:"/resources/architectural-overview",type:301},{source:"/text-input",destination:"/cookbook/forms/text-input",type:301},{source:"/ui/widgets-intro",destination:"/ui",type:301},{source:"/tutorials",destination:"/codelabs",type:301},{source:"/unbounded-constraints",destination:"/ui/layout/constraints#unbounded",type:301},{source:"/ui-performance",destination:"/perf/ui-performance",type:301},{source:"/upgrading",destination:"/release/upgrade",type:301},{source:"/using-ide-vscode",destination:"/tools/vs-code",type:301},{source:"/using-ide",destination:"/tools/android-studio",type:301},{source:"/using-packages",destination:"/packages-and-plugins/using-packages",type:301},{source:"/web-analogs",destination:"/get-started/flutter-for/web-devs",type:301},{source:"/webflutter.dev/web",destination:"/web",type:301},{source:"/widgets-intro",destination:"/ui",type:301},{source:"/widgets",destination:"/ui/widgets/catalog",type:301},{source:"/widgets/:rest*",destination:"/ui/widgets/:rest*",type:301},{source:"/accessibility-and-localization",destination:"/ui/accessibility-and-internationalization",type:301},{source:"/accessibility-and-localization/:rest*",destination:"/ui/accessibility-and-internationalization/:rest*",type:301},{source:"/add-to-app/android/add-splash-screen",destination:"/platform-integration/android/splash-screen",type:301},{source:"/codelabs/layout-basics",destination:"/ui/layout",type:301},{source:"/codelabs/explicit-animations",destination:"/ui/animations/tutorial",type:301},{source:"/cookbook/games/google-mobile-ads",destination:"/cookbook/plugins/google-mobile-ads",type:301},{source:"/cookbook/images/cached-images",destination:"/cookbook/images/network-image",type:301},{source:"/cookbook/networking/named-routes",destination:"/cookbook/navigation/named-routes",type:301},{source:"/cookbook/testing/integration-test-introduction",destination:"/cookbook/testing/integration",type:301},{source:"/cookbook/testing/integration-test-profiling",destination:"/cookbook/testing/integration/profiling",type:301},{source:"/cookbook/testing/integration-test-scrolling",destination:"/cookbook/testing/integration/scrolling",type:301},{source:"/cookbook/testing/mocking",destination:"/cookbook/testing/unit/mocking",type:301},{source:"/cookbook/testing/unit-test",destination:"/cookbook/testing/unit/introduction",type:301},{source:"/cookbook/testing/widget-test-finders",destination:"/cookbook/testing/widget/finders",type:301},{source:"/cookbook/testing/widget-test-introduction",destination:"/cookbook/testing/widget",type:301},{source:"/cookbook/testing/widget-test-tap-drag",destination:"/cookbook/testing/widget/tap-drag",type:301},{source:"/deployment/fastlane-cd",destination:"/deployment/cd#fastlane",type:301},{source:"/get-started",destination:"/get-started/install",type:301},{source:"/get-started/flutter-for",destination:"/get-started/learn-more",type:301},{source:"/get-started/flutter-for/ios-devs",destination:"/get-started/flutter-for/swiftui-devs",type:301},{source:"/get-started/install/null",destination:"/get-started/install",type:301},{source:"/get-started/web",destination:"/platform-integration/web/building",type:301},{source:"/ios-14",destination:"/platform-integration/ios/ios-debugging",type:301},{source:"/ios-project-migration",destination:"/platform-integration/ios",type:301},{source:"/layout",destination:"/ui/layout",type:301},{source:"/material-3-migration",destination:"/release/breaking-changes/material-3-migration",type:301},{source:"/packages-and-plugins/androidx-compatibility",destination:"/platform-integration/android/androidx-migration",type:301},{source:"/packages-and-plugins/c-interop",destination:"/platform-integration/android/c-interop",type:301},{source:"/packages-and-plugins/plugins-in-tests",destination:"/testing/plugins-in-tests",type:301},{source:"/packages-and-plugins/plugin-api-migration",destination:"/release/breaking-changes/plugin-api-migration",type:301},{source:"/platform-integration/android/androidx-migration",destination:"/release/breaking-changes/androidx-migration",type:301},{source:"/platform-integration/android/splash-screen-migration",destination:"/release/breaking-changes/splash-screen-migration",type:301},{source:"/platform-integration/c-interop",destination:"/platform-integration",type:301},{source:"/platform-integration/ios-app-clip",destination:"/platform-integration/ios/ios-app-clip",type:301},{source:"/platform-integration/ios/splash-screen",destination:"/platform-integration/ios/launch-screen",type:301},{source:"/platform-integration/platform-views",destination:"/platform-integration/android/platform-views",type:301},{source:"/platform-integration/web-images",destination:"/platform-integration/web/web-images",type:301},{source:"/platform-integration/windows/run-loop-migration",destination:"/release/breaking-changes/windows-run-loop",type:301},{source:"/platform-integration/windows/version-migration",destination:"/release/breaking-changes/windows-version-information",type:301},{source:"/platform-integration/windows/dark-mode-migration",destination:"/release/breaking-changes/windows-dark-mode",type:301},{source:"/release/release-notes/changelogs/changelog-1.17.0",destination:"/release/release-notes/release-notes-1.17.0",type:301},{source:"/release/release-notes/supported-platforms",destination:"/reference/supported-platforms",type:301},{source:"/reference/widgets/:catalogpage+",destination:"/ui/widgets/:catalogpage+",type:301},{source:"/reference/widgets/widgetindex",destination:"/reference/widgets",type:301},{source:"/release/breaking-changes/scrollable_alert_dialog",destination:"/release/breaking-changes/scrollable-alert-dialog",type:301},{source:"/release/breaking-changes/win_lifecycle_process_function",destination:"/release/breaking-changes/win-lifecycle-process-function",type:301},{source:"/resources/compatibility",destination:"/release/compatibility-policy",type:301},{source:"/resources/dart-swift-concurrency",destination:"/get-started/flutter-for/dart-swift-concurrency",type:301},{source:"/resources/platform-adaptations",destination:"/platform-integration/platform-adaptations",type:301},{source:"/resources/rendering",destination:"/resources/architectural-overview#rendering-and-layout",type:301},{source:"/resources/security-false-positives",destination:"/reference/security-false-positives",type:301},{source:"/resources/technical-overview",destination:"/resources/architectural-overview",type:301},{source:"/resources/design-docs",destination:"https://github.com/flutter/flutter/issues?q=is%3Aopen+is%3Aissue+label%3A%22design+doc%22",type:301},{source:"/resources/Flutter-IntelliJ-cheat-sheet-MacOS.pdf",destination:"/tools/android-studio",type:301},{source:"/resources/Flutter-IntelliJ-cheat-sheet-WindowsLinux.pdf",destination:"/tools/android-studio",type:301},{source:"/testing/best-practices",destination:"/perf/best-practices",type:301},{source:"/testing/integration-tests/migration",destination:"/release/breaking-changes/flutter-driver-migration",type:301},{source:"/testing/ui-performance",destination:"/perf/ui-performance",type:301},{source:"/tools/devtools",destination:"/tools/devtools/overview",type:301},{source:"/tools/devtools/code-size",destination:"/tools/devtools/app-size",type:301},{source:"/tools/devtools/codeSize",destination:"/tools/devtools/app-size",type:301},{source:"/tools/devtools/timeline",destination:"/tools/devtools/performance",type:301},{source:"/tools/ide",destination:"/tools/android-studio",type:301},{source:"/tools/ide/android-studio",destination:"/tools/android-studio",type:301},{source:"/tools/ide/vs-code",destination:"/tools/vs-code",type:301},{source:"/tools/inspector",destination:"/tools/devtools/inspector",type:301},{source:"/tools/sdk/archive",destination:"/release/archive",type:301},{source:"/tools/sdk/overview",destination:"/tools/sdk",type:301},{source:"/tools/sdk/releases",destination:"/release/archive",type:301},{source:"/tools/sdk/release-notes",destination:"/release/release-notes",type:301},{source:"/tools/sdk/release-notes/:rest*",destination:"/release/release-notes/:rest*",type:301},{source:"/tools/sdk/release-notes/supported-platforms",destination:"/reference/supported-platforms",type:301},{source:"/tools/sdk/upgrading",destination:"/release/upgrade",type:301},{source:"/tools/web-renderers",destination:"/platform-integration/web/renderers",type:301},{source:"/tutorials/animation",destination:"/ui/animations/tutorial",type:301},{source:"/tutorials/interactive",destination:"/ui/interactive",type:301},{source:"/tutorials/internationalization",destination:"/ui/accessibility-and-internationalization/internationalization",type:301},{source:"/tutorials/layout",destination:"/ui/layout",type:301},{source:"/ui/accessibility-and-localization",destination:"/ui/accessibility-and-internationalization",type:301},{source:"/ui/accessibility-and-localization/:rest*",destination:"/ui/accessibility-and-internationalization/:rest*",type:301},{source:"/ui/advanced",destination:"/ui",type:301},{source:"/ui/advanced/actions_and_shortcuts",destination:"/ui/interactivity/actions-and-shortcuts",type:301},{source:"/ui/advanced/actions-and-shortcuts",destination:"/ui/interactivity/actions-and-shortcuts",type:301},{source:"/ui/advanced/focus",destination:"/ui/interactivity/focus",type:301},{source:"/ui/advanced/gestures",destination:"/ui/interactivity/gestures",type:301},{source:"/ui/advanced/shaders",destination:"/ui/design/graphics/fragment-shaders",type:301},{source:"/ui/advanced/slivers",destination:"/ui/layout/scrolling/slivers",type:301},{source:"/ui/advanced/splash-screen",destination:"/platform-integration/android/splash-screen",type:301},{source:"/ui/advanced/typography",destination:"/ui/design/text/typography",type:301},{source:"/ui/assets-and-images",destination:"/ui/assets/assets-and-images",type:301},{source:"/ui/building-adaptive-apps",destination:"/ui/adaptive-responsive",type:301},{source:"/ui/interactive",destination:"/ui/interactivity",type:301},{source:"/ui/layout/adaptive-responsive",destination:"/ui/adaptive-responsive",type:301},{source:"/ui/layout/box-constraints",destination:"/ui/layout/constraints#unbounded",type:301},{source:"/ui/layout/building-adaptive-apps",destination:"/ui/adaptive-responsive",type:301},{source:"/ui/layout/responsive",destination:"/ui/adaptive-responsive",type:301},{source:"/ui/layout/responsive/adaptive-responsive",destination:"/ui/adaptive-responsive",type:301},{source:"/ui/material",destination:"/ui/design/material",type:301},{source:"/ui/material3-updates",destination:"/ui/design/material",type:301},{source:"/ui/scrolling",destination:"/ui/layout/scrolling",type:301},{source:"/ui/scrolling/:rest*",destination:"/ui/layout/scrolling/:rest*",type:301},{source:"/ui/splash-screen",destination:"/platform-integration/android/splash-screen",type:301},{source:"/ui/splash-screen/android-splash-screen",destination:"/platform-integration/android/splash-screen",type:301},{source:"/ui/widgets/catalog",destination:"/ui/widgets",type:301},{source:"/ui/widgets/widgetindex",destination:"/reference/widgets",type:301},{source:"/web",destination:"/platform-integration/web",type:301},{source:"/whats-new-archive",destination:"/release/whats-new",type:301},{source:"/whats-new",destination:"/release/whats-new",type:301},{source:"/testing/oem-debuggers",destination:"/testing/native-debugging",type:301},{source:"/adoptawidget",destination:"https://github.com/flutter/flutter/blob/main/CONTRIBUTING.md",type:301},{source:"/apprentice-giveaway",destination:"https://www.youtube.com/playlist?list=PL4dBIh1xps-HAaadBRWQobCO_IJ4gMOG2",type:301},{source:"/clock",destination:"https://medium.com/flutter/its-time-the-flutter-clock-contest-results-dcebe2eb3957",type:301},{source:"/create",destination:"https://medium.com/flutter/the-flutter-create-winners-are-40980f2d20b3",type:301},{source:"/assets/images/docs/intellij/hot-reload.gif",destination:"https://raw.githubusercontent.com/flutter/website/main/src/assets/images/docs/tools/android-studio/hot-reload.gif",type:301},{source:"/brick-breaker",destination:"https://codelabs.developers.google.com/codelabs/flutter-flame-brick-breaker",type:301},{source:"/catalog/samples",destination:"https://flutter.github.io/samples/#",type:301},{source:"/catalog/samples/*",destination:"https://flutter.github.io/samples/#",type:301},{source:"/chat",destination:"https://github.com/flutter/flutter/wiki/Chat",type:302},{source:"/custom-deferred-components",destination:"https://github.com/flutter/flutter/wiki/Deferred-Components#custom-implementations",type:301},{source:"/deferred-components-wiki",destination:"https://github.com/flutter/flutter/wiki/Deferred-Components",type:301},{source:"/design-principles",destination:"https://github.com/flutter/flutter/wiki/Style-guide-for-Flutter-repo",type:301},{source:"/fully-deferred-flutter",destination:"https://github.com/flutter/flutter/wiki/Deferred-Components#fully-deferring-flutter-in-add-to-app",type:301},{source:"/null-safety",destination:"https://dart.dev/null-safety",type:301},{source:"/privacy",destination:"https://www.google.com/intl/en/policies/privacy",type:301},{source:"/report-jank",destination:"https://github.com/flutter/flutter/issues/74833",type:301},{source:"/research-optout",destination:"https://docs.google.com/forms/d/e/1FAIpQLSeG2Nhj0YQkr3m75P74Zb9G-v7zgNhAE9arCyig-a5B1A8uDw/viewform?usp=sf_link",type:301},{source:"/research-signup",destination:"https://docs.google.com/forms/d/e/1FAIpQLSe0i4De809KXVCdljGKrjMj3lxhuzbuFKCtY5PEQPCYtGxFMg/viewform?usp=sf_link",type:301},{source:"/resources/design-principles",destination:"https://github.com/flutter/flutter/wiki/Style-guide-for-Flutter-repo",type:301},{source:"/style-guide*",destination:"https://github.com/flutter/flutter/wiki/Style-guide-for-Flutter-repo",type:301},{source:"/youtube",destination:"https://youtube.com/@flutterdev",type:301},{source:"/go/2D-Foundation",destination:"https://docs.google.com/document/d/1C2hAq-gMAIx4Cbym7EMhVAcPZ2hmNxlgijpYmgTpmUU/edit?usp=sharing",type:301},{source:"/go/a11y-links",destination:"https://docs.google.com/document/d/1FxzANiyJFkoRxJ7V2IejpfB5DX19gxiJps-8N2oUW_U/edit#",type:301},{source:"/go/a11y-text-attributes",destination:"https://docs.google.com/document/d/1vhbwxFOTRTUvW2C_onFffEH5Fn2pAfMQDyv-gekias0/edit?usp=sharing&resourcekey=0-ChQvjIoWYO7jXcaCXMj5Qw",type:301},{source:"/go/actions-and-shortcuts-design-revision",destination:"https://docs.google.com/document/d/1A9yald55O_C6Weqp4tOtyMisfOC1ZC0UMq7Yc-pNfVQ/edit",type:301},{source:"/go/adaptive",destination:"/ui/adaptive-responsive",type:301},{source:"/go/adaptive-layout-foldables",destination:"https://docs.google.com/document/d/1qhrpTWYs5f67X8v32NCCNTRMIjSrVHuaMEFAul-Q_Ms/edit?usp=sharing",type:301},{source:"/go/add-missing-features-to-selection-controls",destination:"https://docs.google.com/document/d/1QizXwBiO-2REIcEovl5pK06BaLPOWYmNwOE5jactJZA/edit?usp=sharing&resourcekey=0-1pb9mJiAq29Gesmt25GAug",type:301},{source:"/go/add-to-app-samples",destination:"https://docs.google.com/document/d/1M_GsAL8C1NxbsmzI35w2Th1wvX1KMoPHY5yeeNbzjY0",type:301},{source:"/go/allow-datatable-row-height-to-expand",destination:"https://docs.google.com/document/d/1qr1IgaU2z9eaM6zCa4u-Q8kJD5Zq7IcdxVyrgR7CwZc/edit?usp=sharing&resourcekey=0-1bNp0ocF4AwGBj6NvRfrEA",type:301},{source:"/go/android-assets-in-flutter",destination:"https://docs.google.com/document/d/1jymgQYxRTe5rdprt74ERh7Jsa0lfnRuMnkOmJusLWsE/edit",type:301},{source:"/go/android-dependency-versions",destination:"https://docs.google.com/document/d/1qeeM5QG-jiafttSgvc7yvC19IDRggFFZQTktBVxL6sI/edit?usp=sharing&resourcekey=0-HLEAiBOMxAlQxDs-mEeffw",type:301},{source:"/go/android-embedding-dependencies",destination:"https://docs.google.com/document/d/1vITp2mUZRa-cmll0sPH0zjNgPlyvOMx7awxPNRAPyic/edit",type:301},{source:"/go/android-embedding-move",destination:"https://docs.google.com/document/d/1nQujwZfEe3QOHTyZn160eImpoJOYioADP09DtumcLcc/edit?ts=5d8041db#",type:301},{source:"/go/android-java-gradle-error",destination:"/release/breaking-changes/android-java-gradle-migration-guide",type:301},{source:"/go/android-migration-summary",destination:"https://docs.google.com/document/d/1wKspwf6LQu6uo32uQ9NcukfiKhLL4ButV9cwpjeb8QI",type:301},{source:"/go/android-ndk-version",destination:"https://docs.google.com/document/d/1sljfqHpI5m4uxsL7B89yhYluO97Mz1YKyA0VgzzXyZ4/edit?usp=sharing&resourcekey=0-Ts9Rk8jbJor7WBMMiehKWg",type:301},{source:"/go/android-plugin-migration",destination:"/release/breaking-changes/plugin-api-migration",type:301},{source:"/go/android-project-migration",destination:"/platform-integration/android/androidx-migration",type:301},{source:"/go/android-root-predictive-back",destination:"https://docs.google.com/document/d/1BGCWy1_LRrXEB6qeqTAKlk-U2CZlKJ5xI97g45U7azk/edit#",type:301},{source:"/go/android-splash-migration",destination:"/platform-integration/android/splash-screen-migration",type:301},{source:"/go/android-startup-tracing",destination:"https://docs.google.com/document/d/1I7jvRg3UmG7P84hdis-9A00fEr2Ntj-K7f_FbGLubGE/edit?usp=sharing",type:301},{source:"/go/androidx-transition",destination:"https://docs.google.com/document/d/1JnMxQinUeouuV5kcenoq03TsvLyn_xaHXIT_6c5b7nQ",type:301},{source:"/go/annotator-tree",destination:"https://docs.google.com/document/d/1YtkdZSx1687Ipbff06qp3XglmJym3Wc9boY4I-bYs4A/edit",type:301},{source:"/go/api-for-transform-performance",destination:"https://docs.google.com/document/d/1Fxdlf7JsA-yAwc_RNuboMG-vhIhchRBZGvDSwg5qR0A/edit?usp=sharing",type:301},{source:"/go/app-extensions",destination:"https://docs.google.com/document/d/1WloBrAYpqNKOhEHytTqJEHshcXxHflLUGKvULKRHbuU/edit?usp=sharing",type:301},{source:"/go/application-lifecycle-events",destination:"https://docs.google.com/document/d/1FL5Fgk7EzMNOpJL0GZJt-lfWtGt2igHuC2ZznItS2l8/edit?usp=sharing&resourcekey=0-IZNfpSVPkMbigQLLXoJcfw",type:301},{source:"/go/apple-pencil-double-tap-support",destination:"https://docs.google.com/document/d/1r4P5r-jGt2Sjqro3ldCU2axUiHTpu3yhIycnI94OKQw/edit?usp=sharing",type:301},{source:"/go/asset-lookup-in-plugin-binding",destination:"https://docs.google.com/document/d/1iwGFWipC0v0FKvAgbjGl0kaV9IGox1YiD8jUP8Vvkjc/edit",type:301},{source:"/go/asset-transformation",destination:"https://docs.google.com/document/d/1i_trjTF-gJ3Xj-GUtVmyLETa5CwStvabEjtD5z8ArC4/edit?usp=sharing",type:301},{source:"/go/autocomplete",destination:"https://docs.google.com/document/d/1fV4FDNdcza1ITU7hlgweCDUZdWyCqd-rjz_J7K2KkfY/edit?usp=sharing",type:301},{source:"/go/autosubmit",destination:"https://docs.google.com/document/d/14oAi2gHMDnqOVe2rEl0syny7_7xsCHh83HtdomQgouM/edit?usp=sharing",type:301},{source:"/go/automatic-android-plugin-registration",destination:"https://docs.google.com/document/d/1xNkBmcdVL1yEXqtZ65KzTwfr5UXDD05VVKYXIXGX7p8/edit",type:301},{source:"/go/automated-revert-workflow",destination:"https://docs.google.com/document/d/1lBkWo9rzHseoYaEaa12HOjVS32uQ5rFdLRUCO_CQoiQ/edit?usp=sharing",type:301},{source:"/go/backdrop-filter-with-overlay-canvas",destination:"https://docs.google.com/document/d/1t_offKOgkuVzvB3fqGTfcltovb-yxqV6tbuP1qIBqVI/edit?usp=sharing",type:301},{source:"/go/backing-stores-for-multi-view-partial-repaint",destination:"https://docs.google.com/document/d/1CPpA86BTF6JTvztmRWCeLGQoPEqX_msYMG6avdqhaFk/edit?usp=sharing",type:301},{source:"/go/base-annotations-local-position-on-region",destination:"https://docs.google.com/document/d/1r7FQTOw2vZJZ5c0VoNqi9CWmZY3MvUfz0spdf0-nK6k/edit",type:301},{source:"/go/blankcanvas",destination:"https://docs.google.com/document/d/1rS_RO2DQ_d4_roc3taAB6vXFjv7-9hJP7pyZ9NhPOdA/edit?resourcekey=0-VBzTPoqLwsruo0j9dokuOg",type:301},{source:"/go/bottom-navigation-bar-title-deprecation",destination:"https://docs.google.com/document/d/1L-2nPf5hbLGNoRvOSUmnxgUHahBVzW1ybhTXGY3ObDw/edit?usp=sharing",type:301},{source:"/go/buffer-queue",destination:"https://docs.google.com/document/d/1rXl9G-VmISVlVkKVgrnQKeX7Mexyez0x9HZ5F5yKxrQ/edit?usp=sharing",type:301},{source:"/go/build-aar",destination:"/add-to-app/android/project-setup#option-a---depend-on-the-android-archive-aar",type:301},{source:"/go/build-dashboard-v2",destination:"https://docs.google.com/document/d/1kwh48xYuoVtadYFb2I2t6BJMGEW07K7T5WYcieAZZiY",type:301},{source:"/go/build-flows",destination:"https://docs.google.com/document/d/1imsVxbeAsttTi90EFpbnbVzov9z0xXd7tLCAr_QAJ38",type:301},{source:"/go/buildtextspan-buildcontext",destination:"https://docs.google.com/document/d/1nr-g45gXcWTYoW9UmChZV7Ije3lKP4pEvDQCdz6NFdI/edit?usp=sharing",type:301},{source:"/go/cacheless-shared-preferences",destination:"https://docs.google.com/document/d/1DNhUYIJaDA10g2cOqipKyPuPkgL_FYPfgkF9Coqcc6k/edit?usp=sharing",type:301},{source:"/go/calculating-flutter-frame-rate",destination:"https://docs.google.com/document/d/1YGLELXWdC6YIN03QzEzcIRJc56gCnabPBW8BHCAFR58/edit",type:301},{source:"/go/camera-privacy",destination:"https://docs.google.com/document/d/1t_5FYzOTlBWC6arHc4_8VuG0BUOtIyP9xWvbDER5Y9I/edit",type:301},{source:"/go/cascading-menus",destination:"https://docs.google.com/document/d/17XOSGzLzqbpNcCUwakM_WQ2ZOMcUOXcPC__7nPORwms/edit?usp=sharing&resourcekey=0-hg74S2vAAqwJFN984ZXQHg",type:301},{source:"/go/center-floating-label-inputdecoration",destination:"https://docs.google.com/document/d/1sxP91vZiY7McmSMmzrboklIJWQ_6pSS9MBSCrQq016M/edit#",type:301},{source:"/go/change-default-textselectionhandlecolor-to-accentcolor",destination:"https://docs.google.com/document/d/1RJQd5ABWJ_7DZN19aTZBCE7xHzlC4MYBP1bWE2FWcvc/edit",type:301},{source:"/go/chip-usedeletebuttontooltip-deprecation",destination:"https://docs.google.com/document/d/1wc9ot7T2E7hJubYxEWMX230a79wYSiFey4BHxnEzHtw/edit?usp=sharing&resourcekey=0-Bo7KPqEtkWgZcSuRCqwQ5w",type:301},{source:"/go/ci-post-test-analysis",destination:"https://docs.google.com/document/d/1V0W6q7gkk2hHFLYb3t7JFr84Km5uhKl9T3Ksb1IpkLQ/edit?usp=sharing",type:301},{source:"/go/clean-up-not-disposed-disposables-in-ff",destination:"https://docs.google.com/document/d/1bXannXQ8rEtfwxEVd7LDo7xiVu5-QxRoall28MIIFss",type:301},{source:"/go/clip-behavior",destination:"https://docs.google.com/document/d/1gC5Di4ykTCqupD77PWpy9D8xXo0Ide5CnrH0zzVIhKo/edit",type:301},{source:"/go/colorscheme-generation",destination:"https://docs.google.com/document/d/1P7f-DGPWz6HCbwLoAruRuWtakPx4VY-e8nT_yuQ71sc/edit?usp=sharing&resourcekey=0-qxeub7yCKa_No0HlrzEk-g",type:301},{source:"/go/colorscheme-m3",destination:"https://docs.google.com/document/d/1mY1ahBQEMAfsawGJMX5S34pXb7c8dHGatyotClReeas/edit#heading=h.cnnhzna3pz6d",type:301},{source:"/go/configurable-autosubmit",destination:"https://docs.google.com/document/d/14pf4jfBy1-PHYmJLVbeqrh1swTF01SZ2YD3DR_Qv3kM/edit?usp=sharing&resourcekey=0-AW7-kNNGmmpSUqyOvBdwRg",type:301},{source:"/go/contextual-menus",destination:"https://docs.google.com/document/d/1F1itGgbSS3Cbq70hScSCNriDoux1sMGF9LHZsMdvU74/edit?resourcekey=0-RkHGwhe-tcoTGlaQyclPtQ",type:301},{source:"/go/cross_file-content-uri-implementation",destination:"https://docs.google.com/document/d/1-d7uWlB9ERPIOFRQ1nJGGiPDb9ALh7QxincEPOmGc3c",type:301},{source:"/go/cupertino-context-menu-action",destination:"https://docs.google.com/document/d/1lCuPyAbIzAr0c2KIEZhREC_EnkTKBxNiqP6lGLT-KpU/edit",type:301},{source:"/go/cupertino-datepicker-redesign",destination:"https://docs.google.com/document/d/1Ib5ztLzc19e1Uggz16BFlrJMg1TOdYLyP-WqtTpDltM/edit?usp=sharing&resourcekey=0-11oVmOsTHLD5fqxdAHZqNg",type:301},{source:"/go/cupertino-increase-contrast",destination:"https://docs.google.com/document/d/1kePVlqWvJu5Ph0RL6wgg67F3SATmsJ8QY5N0S1MvaGg/edit#",type:301},{source:"/go/cupertino-bottom-sheet-routes",destination:"https://docs.google.com/document/d/16eMliX4HsDjRmEob2lksM6JBq2_LPVM26uYGyTid1ec/edit#",type:301},{source:"/go/cupertino-switch-onoff-labels",destination:"https://docs.google.com/document/d/1DD5gx8x0ej5AJzGxzpr4hpgpqsvcDu-ozKliGnhHm7c/edit#",type:301},{source:"/go/custom-colors-m3",destination:"https://docs.google.com/document/d/1LbD4JqBgAfHex02oR3r2jyu9lTBBNBmyec2ovT59Kr8/edit?usp=sharing",type:301},{source:"/go/custom-tabs-support",destination:"https://docs.google.com/document/d/1GvsmPQz6aKixNUphL10XmSOL7M6nOH7W1jYwNp0LwnA",type:301},{source:"/go/dart-flutterbuffers",destination:"https://docs.google.com/document/d/1rqKq6DwqaeBfTLTixxurrdT9HwZ02DyRjFigO9SiB1Q/edit#",type:301},{source:"/go/dart-static-analysis-ir",destination:"https://docs.google.com/document/d/1xJYGBSoXL7h1z43NnjFsXxauQGXvUnacef4XR1zmeGA/edit#",type:301},{source:"/go/dartle",destination:"https://docs.google.com/document/d/1Ei0ZIqdqNjxTHoGB3Ay6SWQg3DMSsKKWl70XoBUCFTA",type:301},{source:"/go/dart-tooling-daemon",destination:"https://docs.google.com/document/d/1Qldlyi2TmzTsDN1AS5AfjE93-A2nR296Np5bZW2aBwU/edit?usp=sharing&resourcekey=0-ckijCX_-ZSy-J_KBI-FQ1Q",type:301},{source:"/go/dart-workspace-support",destination:"https://docs.google.com/document/d/1_SfTg0W8PASZ2neTkNhYjcVDdFvomeoAnZ_XqflIx88/edit?usp=sharing&resourcekey=0-dcmTZFHicV9ZZL863zC5-w",type:301},{source:"/go/dash-tooling-plugin-strategy",destination:"https://docs.google.com/document/d/1Zc0AE8JTKfOSA-IFpEYcPFJ2eALbXE3AG4ZucWXeMig/",type:301},{source:"/go/data-sync",destination:"https://docs.google.com/document/d/1yH96-p-SkMmt6hL5xHHDtMvCKRz2XGrMuw9ZY_nE954",type:301},{source:"/go/dds-daemon",destination:"https://docs.google.com/document/d/18IgFakijiv9CLFGT5BckbwZuf2pqhOUeN27mB9XqvpQ/edit?usp=sharing&resourcekey=0-rBHvH9gLXLjGPWt5WE-XFg",type:301},{source:"/go/deep-link-flag-migration",destination:"https://docs.google.com/document/d/1TUhaEhNdi2BUgKWQFEbOzJgmUAlLJwIAhnFfZraKgQs/edit?usp=sharing",type:301},{source:"/go/default-scroll-action",destination:"https://docs.google.com/document/d/1SJvom6k4YW4EtFIY4VpAhAOH-jWhRkHVfpVsOBB56KM/edit?usp=sharing",type:301},{source:"/go/deferred-image-decoding",destination:"https://docs.google.com/document/d/1f-NCEF0lrHGd3DsieS1tZ_NWbYTjA4GTqESMbGFsU2U/edit?ts=5e17a77d&pli=1#",type:301},{source:"/go/delegate-route-transitions",destination:"https://docs.google.com/document/d/10C5VbqhU7FkkDSVlcVZmrl8UyL7nw4CeL4QdPKMjsEk/edit?usp=sharing",type:301},{source:"/go/deprecate-html-renderer",destination:"https://docs.google.com/document/d/1DGamHsa2lz_Qtgfrfa3j3fRaEopJXc7tCFVM1TQlck8/edit?usp=sharing&resourcekey=0-IjkqrCoo_EcRRS2bPYKI8w",type:301},{source:"/go/deprecation-lifetime",destination:"https://docs.google.com/document/d/1Gc3ecrMghzc7WU4pgzKB8uBaTPpRdWfozn0otBbxR7s/edit?usp=sharing",type:301},{source:"/go/deprecation-statustransitionwidget",destination:"https://docs.google.com/document/d/1NdxSKSEKa-E9YDUAyONQVad1bAZdc8bqT4zGVjSBQPo/edit?usp=sharing&resourcekey=0-CkJogS7MIhfZeabrIAUPhQ",type:301},{source:"/go/deprecations-removed-after-1-22",destination:"https://docs.google.com/spreadsheets/d/1kZOej-h4AiRW2Td3NUnVMSb8PYLB63mpj-oFYqb_4tc/edit?usp=sharing",type:301},{source:"/go/deprecations-removed-after-2-2",destination:"https://docs.google.com/spreadsheets/d/18VuxojMGFKrFJCeilg3tErAtp23-_tp43XUioC_34To/edit?usp=sharing",type:301},{source:"/go/deprecations-removed-after-2-5",destination:"https://docs.google.com/spreadsheets/d/191-PZEOmlT7Xw6MDFFyf5HyneTaiCqI4OITtolbXD6c/edit?usp=sharing",type:301},{source:"/go/deprecations-removed-after-2-10",destination:"https://docs.google.com/spreadsheets/d/12krawYCu6X_g_5wLGpmiAIi-VcTRV6xG7RGbRovuatQ/edit?usp=sharing",type:301},{source:"/go/deprecations-removed-after-3-3",destination:"https://docs.google.com/spreadsheets/d/13cZzXz3_yMhnMH3Fyv2TKR_3974el103xlZuNWdevZM/edit?usp=sharing",type:301},{source:"/go/deprecations-removed-after-3-7",destination:"https://docs.google.com/spreadsheets/d/1WCQmKobsgslfhqf6uL7I2BKk5KKhGX-n_xfk9g3CTEE/edit?usp=sharing",type:301},{source:"/go/deprecations-removed-after-3-10",destination:"https://docs.google.com/spreadsheets/d/1gs2tvYBuwycP1XAZsDbMuqP5jUa6gWH1a0ZQGrzjXvw/edit?usp=sharing",type:301},{source:"/go/deprecations-removed-after-3-13",destination:"https://docs.google.com/spreadsheets/d/1zzyBRdIkqiEcpv_njEQA7pyG7X8PcNhvXFYrEAB8P78/edit?usp=sharing",type:301},{source:"/go/deprecations-removed-after-3-16",destination:"https://docs.google.com/spreadsheets/d/1ei3UmfvhmGGuwAGgLaQo1k_pgdu9Mu06tHPuSaS4TI4/edit?usp=sharing",type:301},{source:"/go/deprecations-removed-after-3-19",destination:"https://docs.google.com/spreadsheets/d/1x_UJ7GiB61ByBo6cPLm_JfLrgFqAfkQo7pPK_lHvsUo/edit?usp=sharing",type:301},{source:"/go/desktop-multi-window-support",destination:"https://docs.google.com/document/d/11_4wntz_9IJTQOo_Qhp7QF4RfpIMTfVygtOTxQ4OGHY/edit",type:301},{source:"/go/desktop-multi-view-runner-apis",destination:"https://docs.google.com/document/d/1WkJuzifgJXyceaSoCCu8qTETYmYBOYKoz7Qaxtsore4/edit?usp=sharing",type:301},{source:"/go/desktop-release-conductor",destination:"https://docs.google.com/document/d/15AwPXNd5FvItAqM0wa2VK0tRrqtRTgM8vR5LQeT2Mag/edit?usp=sharing&resourcekey=0-yZ2FAN-wEKwKT-ymdisetA",type:301},{source:"/go/desktop-resize-macos",destination:"https://docs.google.com/document/d/1slGllp1Jhde7wkF6snqGhdrZwHV1VVmXeIF3f0t24JU/edit?usp=sharing",type:301},{source:"/go/desktop-resize",destination:"https://docs.google.com/document/d/1OTy-qCGdP7tYfrEKCNX9A24sgnx5vshfK6FupfniyxA",type:301},{source:"/go/detect-memory-leaks",destination:"https://docs.google.com/document/d/1hvRVpULPnwGjBc5nw52iSaDfB8hjIzbaQuECHmKvDrY/edit",type:301},{source:"/go/developing-plugins",destination:"/packages-and-plugins/developing-packages#plugin",type:301},{source:"/go/devintel-q3-2023",destination:"https://docs.google.com/document/d/1VGux5IxePO8lN_7kUuzYJtcJ76fkldr_TJv4R0tciYk",type:301},{source:"/go/devintel-q1-2024",destination:"https://docs.google.com/document/d/15W9wsqzFcidXR12DiPH5r5ZDcZw_wDa7Zi9CAAe34Y4/edit?usp=sharing&resourcekey=0-XH0RYaDhNkqa_WCjbH0otA",type:301},{source:"/go/dirty-region-management",destination:"https://docs.google.com/document/d/19WDvGJql1bmnECTdEzJFeH9Ixw4AP2R7JlgujBSbDbk/edit?usp=sharing",type:301},{source:"/go/disable-dropdownmenuitem",destination:"https://docs.google.com/document/d/13W6PupVZUt6TenoE3NaTP9OCYsKBIYg9YgdurKe1XKs/edit?usp=sharing&resourcekey=0-6n8D5zSLjWs2ZncIyG6HUw",type:301},{source:"/go/docs-nnbd-migration-guide",destination:"https://docs.google.com/document/d/1U8blxmkArsd09C-IGe3cQbJ5SvDLhwn0rWWsY2SthZ4/edit?usp=sharing&resourcekey=0-0CviWT1D47VGxK-Li4_NIw",type:301},{source:"/go/double-buffered-window-resize",destination:"https://docs.google.com/document/d/1allwMZXgX9gGVPguFy3-XydjXEIJgYR1Uhz8Vhm9Rrs/edit?usp=sharing",type:301},{source:"/go/downward-memory-pressure",destination:"https://docs.google.com/document/d/15zslrHsWigh9e8LeQxfieWwnXDBx5jicFPXD6l_SsH4/edit?usp=sharing",type:301},{source:"/go/drm-embedder-api",destination:"https://docs.google.com/document/d/13Y0npyYM8iIXDqfvvHNYWFj3aO1xGT20rFbwV4-gRq8/edit?usp=sharing",type:301},{source:"/go/drm-embedder",destination:"https://docs.google.com/document/d/1XbzbpbVBFC4H-iJfibdKEFOWn8PUCd3PQQDAOaj--wQ/edit?usp=sharing",type:301},{source:"/go/drm-embedder-metal",destination:"https://docs.google.com/document/d/1ed0hv_0UWUyRCpRWRbv-Ff7sxMimIXwCk5kepWbNA5k/edit?usp=sharing&resourcekey=0-sCLVUBH5gQh-CvdULgkOhw",type:301},{source:"/go/drm-embedder-vulkan",destination:"https://docs.google.com/document/d/1MC-2vM1eqlpnm1QFvijCzTDL8pvHpaxqNxaKnA7Soec/edit?usp=sharing",type:301},{source:"/go/dynamic-plugins",destination:"https://docs.google.com/document/d/18AQCXxFrCu8UahRVy__VAQTWUnaonKtl24TUr86KkXs",type:301},{source:"/go/education",destination:"https://docs.google.com/document/d/1PG2aPAkWkJ4q6k0wKlVwo86QZ9yLlZOeMVHStzDhwp4/edit?resourcekey=0-rzmUbzd7yaIHRbgh0kqqMg",type:301},{source:"/go/eliminating-nullok-parameters",destination:"https://docs.google.com/document/d/1LKBL0S1uyhACDiUXILhLKFZH8Cpl_w3mXjHgaE8_--U/edit?usp=sharing",type:301},{source:"/go/embedder-vulkan-support",destination:"https://docs.google.com/document/d/1vaUkfDett2mzKIUmq6uC-7Se2NEAf4XkwKU7ISTJpQE/edit",type:301},{source:"/go/encoded-image-dimensions",destination:"https://docs.google.com/document/d/18KL4CILgjwjeb6vXDsIn5U7vHGSonpgR05FqaSsvoVc/edit",type:301},{source:"/go/engine-build-definition-language",destination:"https://docs.google.com/document/d/1R2X4-YztJMyt82nPLXbQhDA50PcMDgavXN4JUu39hKI",type:301},{source:"/go/engine-cpu-profiling",destination:"https://docs.google.com/document/d/1z_V69XzRct3vR7mBZ9tuuS1pZ_e7FQkuzbVJjXxMeaI/edit",type:301},{source:"/go/engine-rtree",destination:"https://docs.google.com/document/d/1UGV0qerZ8o3eGrjm1axp0NoLWrT0KmTonMamb-xifEM/edit?usp=sharing&resourcekey=0-wh0paKk1H1vZbzxKxIj2jA",type:301},{source:"/go/engine-v2-recipes",destination:"https://docs.google.com/document/d/1vP26tMAJqqHlIF2QZUfcirFe5zmei7gZ1zQ6IVGQPU4",type:301},{source:"/go/error-handling",destination:"https://docs.google.com/document/d/1HdGLKoVw_KWLrVzDNZ8Lk5nN-biHQzi_CS5mCkpiDwA/edit",type:301},{source:"/go/everything-builds-from-a-module",destination:"https://docs.google.com/document/d/1fkUpos4hbJF0NYSwjNLWct2UGDg-AfhxzlR6p2g0w9M",type:301},{source:"/go/exposing-scroll-behaviors",destination:"https://docs.google.com/document/d/1W5PSIO1cVj7v6_xayydyFN3abWFOJTmFHKGBA9VKbbg/edit?usp=sharing&resourcekey=0-AHb9dJP8Knv3GWwZLnzZWQ",type:301},{source:"/go/external-drag-and-drop",destination:"https://docs.google.com/document/d/1toFc3Fjafv8jDToQ85S5AquC7NOoJ2ZO_Or484nsEuo/edit?usp=sharing",type:301},{source:"/go/fallback-image-decoding",destination:"https://docs.google.com/document/d/1G-5s6uoP1H_7f_ByLrvCVcoFXYZ80CixkMbbHMsMCag/edit?usp=sharing",type:301},{source:"/go/faster-cocoon",destination:"https://docs.google.com/document/d/1NXP0_9TJ1qz674iYyOGVLEHWVpmbXr5yjhBrdoU_x5g/edit",type:301},{source:"/go/federated-platforms",destination:"https://docs.google.com/document/d/1z_4Z5JMTbk5c4FpayVAb-PTz2wLP-aSCirbieavT3Ws/edit?usp=sharing",type:301},{source:"/go/federated-plugins",destination:"https://docs.google.com/document/d/1LD7QjmzJZLCopUrFAAE98wOUQpjmguyGTN2wd_89Srs/edit",type:301},{source:"/go/ffi-plugins",destination:"https://docs.google.com/document/d/1vMw-W6L-r-uL1SUgzDh6J5rmtqum7SZdO9khWACrZJI/edit?resourcekey=0-vvjEK88N-pApyKTPWJ2IZQ",type:301},{source:"/go/file-system-access-from-devtools",destination:"https://docs.google.com/document/d/1BNgZka2N9HYL11A4IdR8FqsSW1VMr9Vo7CSrjY9rcic/edit?usp=sharing&resourcekey=0-H1f6lS5KjytrUCWc1vcS_w",type:301},{source:"/go/flavor-specific-assets",destination:"https://docs.google.com/document/d/1_3GwdRZ1WPBqR9koNxESfAXHqynv36__ctMqN-NRG0k/edit?usp=sharing",type:301},{source:"/go/flame-dartpad",destination:"https://dartpad.dev/?id=3e52ca7b51ba15f989ad880b8b3314a2",type:301},{source:"/go/floating-snackbar-offset",destination:"https://docs.google.com/document/d/1elP-y83PtvfAZHNcpHCtnOFhZO9VnnlobwfQ33QO4hg/edit",type:301},{source:"/go/floating-widgetspans",destination:"https://docs.google.com/document/d/1I-VqCxvszXGAas_6EE9b6ZIzyMY3HjxDxGW9_DWWd7M/edit",type:301},{source:"/go/flutter-developer-tooling-plugins",destination:"https://docs.google.com/document/d/189A-T-pcHPuds8pOtbzLS8Wl6Hr0AIAIl0aRTPvLKec/",type:301},{source:"/go/flutter-devtools-extensions",destination:"https://docs.google.com/document/d/189A-T-pcHPuds8pOtbzLS8Wl6Hr0AIAIl0aRTPvLKec/",type:301},{source:"/go/flutter-devtools-static-extensions",destination:"https://docs.google.com/document/d/11J4h1oEfB9wBoRYUy4KzclnKITBY-234jKpU3kq4V4w/edit?resourcekey=0-pPo85Svkb9lKdtlrhMCTbw",type:301},{source:"/go/flutter-drop-android-jellybean-2023",destination:"https://docs.google.com/document/d/1wWNly2SZRDqupSsHkBWDI_lS2MohBGEwPSXF6W05NOc/edit?usp=sharing",type:301},{source:"/go/flutter-doctor-app-folder",destination:"https://docs.google.com/document/d/1_N70oh5rl0pMlz-epE_3fIr7gqE94dgoV-DHq5OlF2I/edit",type:301},{source:"/go/flutter-drop-macOS-10.13-2022-q4",destination:"https://docs.google.com/document/d/1wHqr2cob78VfUKhOFEKjaUM_mnV4gL-mg3gSQCFhF7Y/edit",type:301},{source:"/go/flutter-drop-win7-2024",destination:"https://docs.google.com/document/d/18gfRT8klo0zEvn6fIpders7ghoWIBKO22cNYS22WLhc/edit?resourcekey=0-SFkxdqfyM6KNNkG4zS6aaA",type:301},{source:"/go/flutter-android-emulator-testing",destination:"https://docs.google.com/document/d/10wYUcLcSTF4Epg2EUGoBqOkkOe4zxKHvYKjXFZAOgGs/edit?usp=sharing&resourcekey=0-pltjPvEtVezXDADMbUwFHQ",type:301},{source:"/go/flutter-engine-clocks",destination:"https://docs.google.com/document/d/1Sx8QA1qXgJGw5r4ESviDnU2LSShNHiq_LjbRWPgSvXQ/edit?usp=sharing&resourcekey=0-BoBvLxgqf_nc_rwLc0zmTw",type:301},{source:"/go/flutter-engine-extensions",destination:"https://docs.google.com/document/d/1xG7jR4FserdW7TdwnklF3_lXUGmt4myPQjDGF3LFtCQ/edit?resourcekey=0-Iug4D2mWuyQI6suvC_2itw#",type:301},{source:"/go/flutter-for-embedded-linux",destination:"https://docs.google.com/document/d/1n4NXCk0QlGz16gUCtywR79H0Z1fzPqB2iNL8oxuexuk/edit?usp=sharing",type:301},{source:"/go/flutter-gradle-plugin-apply",destination:"/release/breaking-changes/flutter-gradle-plugin-apply",type:301},{source:"/go/flutter-iap-migrate-pblv2",destination:"https://docs.google.com/document/d/1XM16UsLE_aPWoZnheE9waO06mhxLkkWjpPf9jtI1AdY/edit",type:301},{source:"/go/flutter-ios-system-font",destination:"https://docs.google.com/document/d/1FG9ONkG-sLuFkb9vUAL2i7oeUtUqm8qiQJe_poK754w/edit",type:301},{source:"/go/flutter-lints",destination:"https://docs.google.com/document/d/1b0X0HOzvFY3WxI363U8BXx6Am13qFm96KlbS72mmFAk/edit",type:301},{source:"/go/flutter-migrate",destination:"https://docs.google.com/document/d/1fPnpUI6gXE9PkNWuFoAW20m_sQ87ZSC1rrn_D7fxBvs",type:301},{source:"/go/flutter-nonhost",destination:"https://docs.google.com/document/d/1rTLxAxsshEir-B2vE6DU_MaqMMusOdCgLGEGpBYG3CM",type:301},{source:"/go/flutter-pigeon-native-wrapper",destination:"https://docs.google.com/document/d/1Sw6F8GbNiO_lvS2fFjXrRYk2Go5RNDHudDT6kIX6Sm0/edit?usp=sharing",type:301},{source:"/go/flutter-platform-idling",destination:"https://docs.google.com/document/d/1RhSluOcHED6wEckY8CGK1mowRcWGAEGWraN6REPaORs/edit",type:301},{source:"/go/flutter-platform-views-windows",destination:"https://docs.google.com/document/d/10nVF2f-QTQ5o2HMEZ1fUlBJzK4dEmhuPHTVFEgW-JRs/edit?usp=sharing&resourcekey=0-J-Lsp7xfA-Nr5EMr1av-Xg",type:301},{source:"/go/flutter-plugin-languages",destination:"https://docs.google.com/document/d/1Ok_mUPgmw8_l-ynLueEKtXm2Fs48lEVB0JqZd7M7uyA/edit",type:301},{source:"/go/flutter-plugins-repo-migration",destination:"https://docs.google.com/document/d/1VihAgx1e-X_H8VRc9WmUv_7qqsi81eeHrrhwhHgwtjQ/edit?usp=sharing",type:301},{source:"/go/flutter-skia-ios-font-problem",destination:"https://docs.google.com/document/d/1UkAhEKUEWNUjfKlqoBjJnx8zXrqErIqidPYjd9FBwsg",type:301},{source:"/go/flutter-support-multi-architecture",destination:"https://docs.google.com/document/d/19tzWySgtgtTA99XQsjx5Pg0SFJeZKXyUlYavR0EXv8c/edit?usp=sharing",type:301},{source:"/go/flutter-test-runner-simplification",destination:"https://docs.google.com/document/d/1BBjSAQRJYC3OxgpPq6MxEiO8Dp5qGYaxYYenF17mS1I/edit?usp=sharing",type:301},{source:"/go/flutter-tool-extension-api",destination:"https://docs.google.com/document/d/12iXm23TP6e6qS1Ntx-i-azcBWByiUl_kWjRxRC2YTz8/edit?usp=sharing&resourcekey=0-pVl2giJzGAHqOYEaZagVow",type:301},{source:"/go/flutter-web-scenelets",destination:"https://docs.google.com/document/d/1GUAx3aqdtEoaBMTNpsS1-i59QZlwTi6vUCASbaanPCo",type:301},{source:"/go/focus-management",destination:"https://docs.google.com/document/d/1-NS3NJFd2j9kzKj5GOPoWq-G0B6jrpiCL892EX5Nxgk/edit",type:301},{source:"/go/forge2d-workshop",destination:"https://codelabs.developers.google.com/codelabs/flutter-flame-forge2d#0",type:301},{source:"/go/form-field-autovalidation",destination:"https://docs.google.com/document/d/16HAURcOtYAoHntDOEtdGy9KkKSItulG9Ldyjzdaosqo/edit",type:301},{source:"/go/fragment-program-support",destination:"https://docs.google.com/document/d/1R0qx3znTe_wcKZoeWwkMlgxs1MtrdiPJ_1xiuExZuH0/edit",type:301},{source:"/go/games-revenue",destination:"https://services.google.com/fh/files/blogs/gaming_ux_and_revenue_optimizations.pdf",type:301},{source:"/go/generated-plugin-registration",destination:"https://docs.google.com/document/d/17-GIBYMgaoYS_G34w-fL9oe8W_GX70v6X2bhfKSBrdo/edit",type:301},{source:"/go/generating-flutter-localizations",destination:"https://docs.google.com/document/d/18saQREDwBMPA_svFe9IkU22ljNXsLpYxiy__jzPCzEc/edit",type:301},{source:"/go/global-selection",destination:"https://docs.google.com/document/d/1q_ns8VVTS2vaKqGwr_hheZpsoli52wAM0QWi9_uBdnk",type:301},{source:"/go/global-surface-pool-for-macos",destination:"https://docs.google.com/document/d/1YUDyCQ1ocdFICOdWeZuuoOm_8bmmxWr0CnC-Y-qXuNI/edit?usp=sharing",type:301},{source:"/go/globalkey-duplication-refactoring",destination:"https://docs.google.com/document/d/15U1XDLrP-SXfgeu5DBBsA7MQuFpDUW005Y2ObwmYWIc/",type:301},{source:"/go/gn-ninja-engine-artifacts",destination:"https://docs.google.com/document/d/10C0yexPKlx4CdlF-fO4efGhQXEvDH92-RiAhBTj5EF8/",type:301},{source:"/go/golden-workflow",destination:"https://docs.google.com/document/d/1MuIUz9pyE_bBZPbtMCj3pYgkdgG4s4Egh6FMknTngKw",type:301},{source:"/go/google-apis",destination:"/data-and-backend/google-apis?utm_source=go-link&utm_medium=referral&utm_campaign=go-google-apis",type:301},{source:"/go/google-testing-v2",destination:"https://docs.google.com/document/d/1Sg_CsGa3VxMNOXFKvoXEPNneD6OUuXIUsmFEjhluhDw",type:301},{source:"/go/go-router-improvements",destination:"https://docs.google.com/document/d/1_mRXinbL_rb0mUt6DAFZ8kj0kh33ZjEMJuUq4PJgwj8/edit?usp=sharing&resourcekey=0-sYbRzE9opneOFZ5F8J3gGw",type:301},{source:"/go/go-router-redirect",destination:"https://docs.google.com/document/d/1L940WGrM1YJ8BkJEpNd67fUqoqC6OsTfch4eH86E0xU/edit?usp=sharing&resourcekey=0-9oxsWU1tLpAACTUXyNjpkA",type:301},{source:"/go/go-router-support-imperative-routing",destination:"https://docs.google.com/document/d/1HCgLi7ialw2Eqv-f_2z9ogdOfcmepIIqCsRhF-DT9dM/edit?usp=sharing",type:301},{source:"/go/go-router-v2-5-breaking-changes",destination:"https://docs.google.com/document/d/1MoEM3C6sDvMUuZYCxlYoMI2QJlkONu8i9G53uy5xk-M/edit",type:301},{source:"/go/go-router-v2-breaking-changes",destination:"https://docs.google.com/document/d/12iXx214phOag-XCetaGbSzziXGaHX82V-wMi_-8W04M/edit",type:301},{source:"/go/go-router-v3-breaking-changes",destination:"https://docs.google.com/document/d/1TZ8G_TZ6Dqcpz64qXxArGhtHKFECDEPZFEuxYwQjJz4/edit#",type:301},{source:"/go/go-router-v4-breaking-changes",destination:"https://docs.google.com/document/d/1T2LmzMj5HpD7hEexXL4Xz6vqoJD81bEGaa9NsV24faw/edit?usp=sharing&resourcekey=0-PuQbtDVl7ZabpJ2B9AHWUg",type:301},{source:"/go/go-router-v5-breaking-changes",destination:"https://docs.google.com/document/d/10l22o4ml4Ss83UyzqUC8_xYOv_QjZEi80lJDNE4q7wM/edit?pli=1&resourcekey=0-U-BXBQzNfkk4v241Ow-vZg",type:301},{source:"/go/go-router-v5-1-2-breaking-changes",destination:"https://docs.google.com/document/d/1HMUZA-lgeGFZ5JyU4g5jOFhbYAbk9ysfz9Ok1tGvqRw/edit?resourcekey=0-7otvjyBeefkQ9xQP9S2-9w#",type:301},{source:"/go/go-router-v6-breaking-changes",destination:"https://docs.google.com/document/d/1CMJwd5Moq_scvHf-trRldy9RW5MU7_Y8IB1aTrny-6s/edit",type:301},{source:"/go/go-router-v7-breaking-changes",destination:"https://docs.google.com/document/d/10Xbpifbs4E-zh6YE5akIO8raJq_m3FIXs6nUGdOspOg/edit?usp=sharing",type:301},{source:"/go/go-router-v8-breaking-changes",destination:"https://docs.google.com/document/d/1VCuB85D5kYxPR3qYOjVmw8boAGKb7k62heFyfFHTOvw/edit?usp=sharing",type:301},{source:"/go/go-router-v9-breaking-changes",destination:"https://docs.google.com/document/d/16plvWc9ablQsUs7w6bWDpTZ7PwMP4YUhV-qMQ3iljE0/edit?usp=sharing",type:301},{source:"/go/go-router-v10-breaking-changes",destination:"https://docs.google.com/document/d/1vjupshmFJtfGSOppZxp7Tzkq7dotcLxCcpdluuNYe1o/edit?usp=sharing&resourcekey=0-aS66t4OcDTjJW50s-veSzQ",type:301},{source:"/go/go-router-v11-breaking-changes",destination:"https://docs.google.com/document/d/1L2LPM_DBqKQx1pTRRfG7pi33P88iAypBju65rcMW_dU/edit?usp=sharing",type:301},{source:"/go/go-router-v12-breaking-changes",destination:"https://docs.google.com/document/d/1KIf_08oHZ18BU0JpNG9dxWP7g4cH0xmF8m7Wmgq80Zk/edit?usp=sharing&resourcekey=0-twH8Zo2kaaIC-vlvVag4yw",type:301},{source:"/go/go-router-v13-breaking-changes",destination:"https://docs.google.com/document/d/1FRdW_p29zH0I3KEMQKW_QMMN7owiQ5Wx-PUhhZpehSg/edit?usp=sharing",type:301},{source:"/go/go-router-v14-breaking-changes",destination:"https://docs.google.com/document/d/1Z6RYo7rGIdtryvQvAntekF53zoz4iy4XvIamBxRWa4Y/edit?usp=sharing&resourcekey=0-CH_yB7ur4gLvSuqPtB5bZA",type:301},{source:"/go/handling-synchronous-keyboard-events",destination:"https://docs.google.com/document/d/1rWXSjkb2ZKv-cpg26lVK0aZi4cVeXJ8j7YmSJdq2TOM/edit",type:301},{source:"/go/hermetic-xcode-installation",destination:"https://docs.google.com/document/d/1EcXm4Woq48GR_ky07mEJka6NfV1vFBN2OHDEeGfPk34/edit?resourcekey=0-0Gjtt1I66mGJ8AwiCTlFNw",type:301},{source:"/go/hero-refactor",destination:"https://docs.google.com/document/d/1JZVqykFjhDXcJyj_Ep5gfTmF-Eu4pQXXNRcLCN04tls/edit?usp=sharing",type:301},{source:"/go/hero-use-cases",destination:"https://docs.google.com/document/d/1xCxKy_KtYK1dsqycsZyV3fOMJCxjZMPx87M-MoK-Tmc/edit?usp=sharing&resourcekey=0-kJYMNVh31SmrjEZ_xuZRPA",type:301},{source:"/go/hot-ui-early-prototype-demos",destination:"https://docs.google.com/document/d/1ZaHqKnON8-WEhke3Y6FpHeuB5BNlxDQj1cCYB1SoI_g",type:301},{source:"/go/i18n-user-guide",destination:"https://docs.google.com/document/d/10e0saTfAv32OZLRmONy866vnaw0I2jwL8zukykpgWBc/edit",type:301},{source:"/go/icu-message-parser",destination:"https://docs.google.com/document/d/1wj5rBbuz1bXM1lvt0s0d35F5JRtIPmYUs1UDk1G3HLc/edit?usp=sharing",type:301},{source:"/go/idle-gc-metrics",destination:"https://docs.google.com/document/d/1QjLTDr2cTsmS3DGIWdw9WSgqBMKJkFXD7Q8acziGIIA/edit?usp=sharing",type:301},{source:"/go/image-decoding-registry",destination:"https://docs.google.com/document/d/167qWrlaSAmJm5muqQ-iiJKZy6Q7ZlugIeXmraXava5Y/edit?resourcekey=0-mVrr_zBiSI2Qmd6vqae7Bw",type:301},{source:"/go/impeller-dart",destination:"https://docs.google.com/document/d/1Sh1BAC5c_kkuMVreo7ymBzPoMzb7lamZRPsI7GBXv5M/edit?resourcekey=0-5w8u2V-LS41tCHeoE8bDTQ",type:301},{source:"/go/impeller-geometry",destination:"https://docs.google.com/document/d/1t-dzzi04nCdkIReoJp8ZyGNskqIip1TG3WhGEz7Osd8/edit?usp=sharing",type:301},{source:"/go/infinite-scroll",destination:"https://docs.google.com/document/d/1TV2oF2iLIZtGd48336korxMTQrGizDAASAeZAeteMSc/edit?usp=sharing",type:301},{source:"/go/inheritedwidget-subscription",destination:"https://docs.google.com/document/d/14BhIyj52NFYuyrWXe8bHJTZp7I67iKNmtOQXHCNH5GQ/edit?usp=sharing",type:301},{source:"/go/inheritedwidget-workshop",destination:"https://dartpad.dev/workshops.html?webserver=https://dartpad-workshops-io2021.web.app/inherited_widget",type:301},{source:"/go/input-field-autofill",destination:"https://docs.google.com/document/d/1wYLsoc7NiHl2jFueB4Ros09E3nDCotdWVovDCFSMcAk/edit",type:301},{source:"/go/introduce-disposable",destination:"https://docs.google.com/document/d/1cjylBOczGk70x-sn1iZYVNAfpPZdtGWsm_KzoNQX0jc/edit",type:301},{source:"/go/io22concurrency",destination:"https://github.com/goderbauer/io22concurrency",type:301},{source:"/go/ios16-video-player-blank-screen",destination:"https://docs.google.com/document/d/1zelzxGf6kUEvtF6hbFRExs5UOz8ODtUCa7ogiouxbpo/edit",type:301},{source:"/go/ios-17-text-input",destination:"https://docs.google.com/document/d/1sM3HMv-SQin39yX1aPUU7vtGv7Hcef1Quc3QhRXBl6A/edit?resourcekey=0-SFYD8vmOIkXiXCZvB1Wlcw",type:301},{source:"/go/ios-autocorrection-highlight-support",destination:"https://docs.google.com/document/d/18ZO7ThKu2wwCofGOKZSInPsq93IzkQTRn9eiyskeh7I/edit",type:301},{source:"/go/ios-camera-plugin-thread-model",destination:"https://docs.google.com/document/d/1Znjp-BduXIb1Ix3JOE1YKyJi1Z0d6rB-2q6Lt7j8xSo/edit",type:301},{source:"/go/ios-storekit2",destination:"https://docs.google.com/document/d/1YBlb6J6rjgdtfnHYrQLJ4i_FLpboh41UnFoEF8TfyE0/edit?usp=sharing&resourcekey=0-3-p9q6ludxmTw6u3uMehgA",type:301},{source:"/go/ios-keyboard-calculating-inset",destination:"https://docs.google.com/document/d/1pb1oqTanWSxwM8nAdm_-_ero3P6MM05vR1JjcdeFkiM/edit?usp=sharing&resourcekey=0-syHrzFB8A4zywVaHBicZNg",type:301},{source:"/go/ios-platformview-backdrop-filter-blur",destination:"https://docs.google.com/document/d/1V7Jc_RGaknrBBPPBBKB8lT7f3PKhYr8sin35MSMFAf4/edit?usp=sharing",type:301},{source:"/go/ios-platform-view-focus",destination:"https://docs.google.com/document/d/1GG8VfYeuVtTQHiMWQXbrSG5HEUorzqU8IGbNySVJ-bY",type:301},{source:"/go/ios-plugins-swift-migration",destination:"https://docs.google.com/document/d/1XsaulkJA6_ZSpM7chkQLhQY25sQqhEMiqHMYzw8H85o/edit?resourcekey=0-_cUjF1c0iBvRLKfV-3gK5A",type:301},{source:"/go/ios-platform-view-engine-overview",destination:"https://docs.google.com/document/d/1G6RNt_5y20g2SfI_V25c02PAXHGH9PgfGnk5dOmBdVI/",type:301},{source:"/go/ios-platform-view-hittest-blocking",destination:"https://docs.google.com/document/d/1jVBK6fqLdN7qA8jGM8PryQeUYMYBNvP-808w4K6KBGw/edit?usp=sharing&resourcekey=0-D8jiTjjIZjFSiA20osvrHw",type:301},{source:"/go/ios-pull-to-refresh",destination:"https://docs.google.com/document/d/1oUgNd3fsJ1QVuEmA6ENBT8vq3o6QKCRUPGCB6q91VgI/edit",type:301},{source:"/go/ios-secure-paste",destination:"https://docs.google.com/document/d/16-8kn58h_oD902e7vPSh6W20aHRBJKyNOdSe5rbAe_g/edit?resourcekey=0-gVdJ3fbOybV70ZKeHU7fkQ",type:301},{source:"/go/ios-scribble",destination:"https://docs.google.com/document/d/1mjQbsSRQnHuAgMNdouaSgTS-Xv-w57fdKfOUUafWpRo",type:301},{source:"/go/ios-spell-check",destination:"https://docs.google.com/document/d/10Lvkz802QpzAGFi3Q9WVTMVUV-SPJyG3_xs8XfxG59Q/edit?usp=sharing",type:301},{source:"/go/ios-switch-controll-scrolling",destination:"https://docs.google.com/document/d/1CZ2CRXihPQ1hBUXWODpyPVJ_2Yc0es6tkXrJSnpDajA",type:301},{source:"/go/ios-wireless-device-discovery",destination:"https://docs.google.com/document/d/1AY4zhW9C3Q9Ml_YfjM00um1mwQxXblLU6lHrteBdiF4/edit?usp=sharing&resourcekey=0-LOZQ6YinTH1xuDd19vcpOw",type:301},{source:"/go/issue-priority-standards",destination:"https://docs.google.com/document/d/1x-BpbFHUKndv2ojd6LmS-At-pxd6SrIbgfYUepjP7D4/",type:301},{source:"/go/issue-triage-changes",destination:"https://docs.google.com/document/d/1KJVPMxzfFaL_gIB6Z3oNRTBKA-NP25YpM8xi3xUKbBY",type:301},{source:"/go/job",destination:"https://forms.gle/omPUhztq27KnH1LG8",type:301},{source:"/go/key-based-mouse-tracker-annotation",destination:"https://docs.google.com/document/d/18DCRSX4-KjJIrnru_Cv9cJjzQmUWM95r8n6uvbS45-E/edit",type:301},{source:"/go/layout-builder-optimization",destination:"https://docs.google.com/document/d/1H8Z48vZAemV0Kw0It65JMoGhqVlDLQErkKZN8-r9pdU",type:301},{source:"/go/leak-tracker-high-level-design",destination:"https://docs.google.com/document/d/158JfU9JKRqfhRPF5C0ceTuOAIWPber_MYftRiuTzlVE/edit?resourcekey=0-SFa6mZ69muVqA5eXi30wIQ",type:301},{source:"/go/legacy-material",destination:"https://docs.google.com/document/d/1REsg982YG2MlspsMOiNLpu8OIWkyehRRQUXHMU3tAAM/edit?usp=sharing",type:301},{source:"/go/lifecycle-debug-flag",destination:"https://docs.google.com/document/d/1WowGJhAMzYvwoyYLOzwjj1Jb0lwIjUpNfqvKjFWQZIM/edit",type:301},{source:"/go/link-widget-2",destination:"https://docs.google.com/document/d/1-BJ4Rp6-glA9S__o97xDiNdd_lbuj7y6e394VE-5y4U",type:301},{source:"/go/link-widget",destination:"https://docs.google.com/document/d/1HMadUQ2g7BRoCYmUvUYPAALU520fFv9PoPDkoz0wjAc",type:301},{source:"/go/lints-migration",destination:"/release/breaking-changes/flutter-lints-package",type:301},{source:"/go/localizing-datetime",destination:"https://docs.google.com/document/d/1QR3qLXWdroTVLbnAQ8mq-Ia6tsZ8NY3lmi7gySQAstU/edit",type:301},{source:"/go/mac-voiceover-text-editing",destination:"https://docs.google.com/document/d/19YP1o4Shba6NzQTBH_EWC8y1GUhKAbo9dan4digFbZs",type:301},{source:"/go/macros-for-leak-tracker",destination:"https://docs.google.com/document/d/1ireWmX4J5Jc6oDO1PmAXPlLdiAlCHvTz8SVC_Sg9KM8/edit?usp=sharing&resourcekey=0-yODb_SAStMgMefYpQeX8uQ",type:301},{source:"/go/make-dropdownmenuitem-value-param-required",destination:"https://docs.google.com/document/d/1x5jsgnLxI3wSDwXRzO0n5hdXKn2a_XTJcsXdjFZLX44/edit",type:301},{source:"/go/match-xcode-deployment-range",destination:"https://docs.google.com/document/d/1Y1WpbQPMOL3GvL8ow_OTD_-ENG3uuhS46CGRhLt12I8/edit?usp=sharing",type:301},{source:"/go/material-banner-updates",destination:"https://docs.google.com/document/d/12Jet1gW2B_QFxig5B4K7f_lrpGhkbjR3LYpsKd4ZtJs/edit?usp=sharing&resourcekey=0-CfFoZ-0oqWPtz2WH0Jj0aw",type:301},{source:"/go/material-button-migration-guide",destination:"https://docs.google.com/document/d/1yohSuYrvyya5V1hB6j9pJskavCdVq9sVeTqSoEPsWH0",type:301},{source:"/go/material-button-system-updates",destination:"https://docs.google.com/document/d/10Fbn59hiHkppqJ6y_1Rjwl7klN-OvJXQU3SFEqicpME/edit",type:301},{source:"/go/material-date-picker-redesign",destination:"https://docs.google.com/document/d/1AGKjBvO7EL2PuJGcwaa2PoCusjtTAvpYO7i_3A2vVpc/edit",type:301},{source:"/go/material-symbols",destination:"https://docs.google.com/document/d/1UHRKDl8-lzl_hW_K2AHnpMwvdPo0vGPbDI7mqACWXJY/edit?usp=sharing",type:301},{source:"/go/material-theme-system-updates",destination:"https://docs.google.com/document/d/1kzIOQN4QYfVsc5lMZgy_A-FWGXBAJBMySGqZqsJytcE/edit",type:301},{source:"/go/max-length-enforcement",destination:"https://docs.google.com/document/d/1S900lQaTPOsePnIeE7o3-Ia8f39VZaSv0JnjNyBfCvU",type:301},{source:"/go/medium-sized-code-samples",destination:"https://docs.google.com/document/d/1-jjYru2ljRSRSY4hn4qwLj9oQj8UiqrDOgY10-FE2tY/edit?usp=sharing",type:301},{source:"/go/migrate-flutter-wiki",destination:"https://docs.google.com/document/d/1naONKJd-eqPj8zEVfHfjGa5TCZNyJErBY4ca1gjSCq4/edit?usp=sharing",type:301},{source:"/go/migrate-flutter-wiki-spreadsheet",destination:"https://docs.google.com/spreadsheets/d/1x65189ZBdNiLRygpUYoU08pwvXD4M-Z157c6pm8deGI/edit?usp=sharing",type:301},{source:"/go/migrating-to-vertical-alignment",destination:"https://docs.google.com/document/d/1vi6d6On6EXN82Q8KmXSLbWNnsnm9YjWtTWhSyjPF59Q/edit?usp=sharing",type:301},{source:"/go/mixin-modifier",destination:"https://docs.google.com/document/d/1la2S1uJrNAawc1yja8hrSxFZJ0cFHnYopmaBYDLwMjg/edit?usp=sharing&resourcekey=0-br1LWMlYC63Q30VGiPtAHg",type:301},{source:"/go/mouse-tracker-no-longer-attaches-annotations",destination:"https://docs.google.com/document/d/1YuOcepqZjNknAMz1si2m-jAiLT4MP28XEzBcKLHnNiA/edit",type:301},{source:"/go/move-mouse-tracker-to-rendering",destination:"https://docs.google.com/document/d/1dYNOTZ4kdq6ndNHopjUlrGlGBw3W-3jMbnoNJouIYtE/edit",type:301},{source:"/go/multiple-applications",destination:"https://docs.google.com/document/d/1alrr7qimNDazmQx5D80BSHh62V2OINO4UQ5N3HcPnmo/edit?resourcekey=0-wPs1Go9AiKR-yG0-xStuKw",type:301},{source:"/go/multiple-engines",destination:"https://docs.google.com/document/d/1NwiZPWHd1te46eP2GWwIezDV9CdMQkODAMuF5kWdtLw",type:301},{source:"/go/multiple-flutters",destination:"https://docs.google.com/document/d/1fdKRufqUzQvERcqNIUSq-GdabXc4k8VIsClzRElJ6KY",type:301},{source:"/go/multiple-views",destination:"https://docs.google.com/document/d/1Z7Qrb08dOnfB8IxPgsyujVn4MsDcYPUUku9CeF70_S0/edit?usp=sharing",type:301},{source:"/go/multi-view-embedder-apis",destination:"https://docs.google.com/document/d/1kegGJ235y1778-vzyyv90MgSHmYQcROTupMuLtEDBq0/edit?usp=sharing",type:301},{source:"/go/multi-view-pipeline-and-rasterizer",destination:"https://docs.google.com/document/d/1xoD02qOxt2OSe3eN1ARsBUUWNFawdrxC2JXUURx7218/edit?usp=sharing",type:301},{source:"/go/multi-view-sync-embedder-apis",destination:"https://docs.google.com/document/d/14z-e-x6M3P53ZMD6qBh4UaJ3nJdG_VdMNqGKERv31hw/edit?usp=sharing",type:301},{source:"/go/multi-view-sync-over-async",destination:"https://docs.google.com/document/d/14z-e-x6M3P53ZMD6qBh4UaJ3nJdG_VdMNqGKERv31hw/edit?usp=sharing",type:301},{source:"/go/multi-window-single-isolate",destination:"https://docs.google.com/document/d/1Wdqs79TY3b1VkOZMDmt12psg5AhO-q9k5-Uv28Snr8M/edit?resourcekey=0-qvOf6jo8bR9W4ozLrbLMcQ",type:301},{source:"/go/multi-window-status",destination:"https://docs.google.com/document/d/13E27tD8_9f6lDgwg3MpGNTV8XIRCZH3ByI-t9kI9IUM/edit?usp=sharing",type:301},{source:"/go/navigator-with-router",destination:"https://docs.google.com/document/d/1Q0jx0l4-xymph9O6zLaOY4d_f7YFpNWX_eGbzYxr9wY/edit",type:301},{source:"/go/nshc",destination:"https://docs.google.com/document/d/1uwHQ3ZEGN2cH6bFwa3CCXTTXCeDfOWw-kUa_B6oTMuA/edit",type:301},{source:"/go/null-safety-workshop",destination:"https://dartpad.dev/workshops.html?webserver=https://dartpad-workshops-io2021.web.app/null_safety_workshop",type:301},{source:"/go/nullable-cupertinothemedata-brightness",destination:"https://docs.google.com/document/d/1qivq0CdkWGst5LU5iTLFUe_LTfLY84679-NxWiDgJXg/edit",type:301},{source:"/go/ondirtycallbacks",destination:"https://docs.google.com/document/d/1Vk_QWC92fFGxx2oIrIjkCL0ZZFHxmrprlLedyQsnkus/edit?usp=sharing",type:301},{source:"/go/opengl-on-ios",destination:"https://docs.google.com/document/d/1kvrb6HeTRN4noAKO82o6x-Ii61PW-BQ-8s9YNtLgosM",type:301},{source:"/go/optimized-platform-view-layers",destination:"https://docs.google.com/document/d/1YHwVz7-F03psEzHxByGka_lIFaDV5K90BJMbNxQeK4k/edit?resourcekey=0-n4_VcUnMU-99sjJ6C1_Ycw#",type:301},{source:"/go/os-adaptive-shortcut-activator",destination:"https://docs.google.com/document/d/11NWj13MSDw1XQg4MpYIeqzcCFGuzQ_Cz7tYXW7fqzPY/edit?usp=sharing",type:301},{source:"/go/outline-input-border-padding-fix",destination:"https://docs.google.com/document/d/1QBM5oM9qPWVeFSPSqpXOFbdXV9dH9A9ABKsNMs1J2XU/edit?usp=sharing",type:301},{source:"/go/overridable-text-actions",destination:"https://docs.google.com/document/d/11vmEZTjB4_E4el1IjTo2VBI2d_fR7tjQWeCajsQc-q4/edit?usp=sharing",type:301},{source:"/go/performance-best-practices",destination:"https://docs.google.com/document/d/16bd3HtkuvzAk0uizDGTT3aNtjI8Mfr0f6C3ZVrYYqvI",type:301},{source:"/go/performance-android-orientation-changes",destination:"https://docs.google.com/document/d/1L7NMG8YfWXoAuCFPv9oX11M1FEWXKbyaWc03mOmXJGc/edit?usp=sharing",type:301},{source:"/go/permissible-slider-interaction",destination:"https://docs.google.com/document/d/151iaqbK-rZSRI34NdkvfIk4RkzOpAevoJ87TwiXfTpM/edit?usp=sharing&resourcekey=0-o0Gx6nrgl-fpw7_zUdMaQA",type:301},{source:"/go/picture-lifecycle",destination:"https://docs.google.com/document/d/1aTBj38k6NSVsYRwySEBItlqxdQbjzurjmHsXAr3yGiI/edit?usp=sharing&resourcekey=0-TbKDu4BVInqphkzAlasBnw",type:301},{source:"/go/platform-api-breakages",destination:"https://docs.google.com/document/d/1OxDsf_eot7TlsRn57z-1_dGbvuqnMxO7QEGIAmOCZtA/edit?usp=sharing",type:301},{source:"/go/platform-based-key-events",destination:"https://docs.google.com/document/d/1FDuxxEh810XpY561SgeiyUR0gU2eVz5kRpCFI55ibec/edit",type:301},{source:"/go/platform-channels-in-federated-plugins",destination:"https://docs.google.com/document/d/1BSrDA_FjLU-3T0H774RocJ4IYyc0ytMl937rAimGJdg/edit?usp=sharing",type:301},{source:"/go/platform-interface-breaking-changes",destination:"https://docs.google.com/document/d/1LD7QjmzJZLCopUrFAAE98wOUQpjmguyGTN2wd_89Srs/edit#heading=h.xabf9lffxrkb",type:301},{source:"/go/platinum-tests",destination:"https://docs.google.com/document/d/1yqGEMsLp6dstSlq56E2BqNP2PinKB9Z7WXC3pGjcD7Y/edit?usp=sharing",type:301},{source:"/go/plugin-binding-review",destination:"https://docs.google.com/document/d/1-9Si_ocFYh-Wa1qKV4PV2ocywKDYdiR_1yO3twPvrfM",type:301},{source:"/go/plugin-platforms",destination:"/packages-and-plugins/developing-packages#plugin-platforms",type:301},{source:"/go/plugin-shared-ios-macos",destination:"https://docs.google.com/document/d/1JdgBrMXV0a6fnVoooILNTQB8dNCvLloT4D4TBkECQ6c/edit?usp=sharing&resourcekey=0-iPL3CzwOjUquabkMiucaHA",type:301},{source:"/go/plugin-support-for-custom-embeddings",destination:"https://docs.google.com/document/d/1AJTHdC20JhD3viR4JWTghagIztqL5jg_R9NFQmnwAMw/edit?usp=sharing&resourcekey=0-qAECjzHKB5tM47azrVnH1w",type:301},{source:"/go/plugins-list-migration",destination:"https://docs.google.com/document/d/1itYyHax0bzL3-hRtQd1zRPqJfOrLYih1fW0nPDJDytc/edit",type:301},{source:"/go/plugins-team",destination:"https://docs.google.com/forms/d/e/1FAIpQLSfpPqJYuL_RzLaTCjrWYw73Zrrei3YiU8B5eTrDBh4fuGhbXw/viewform?usp=sf_link",type:301},{source:"/go/profile-and-release-mode-for-custom-devices",destination:"https://docs.google.com/document/d/1jcMyJvsWLizYOIJAdyosLSW-Io0-E_MGsU_uL_Q4Wt8/edit?usp=sharing",type:301},{source:"/go/programmatic-sheet",destination:"https://docs.google.com/document/d/15A3q1QrcvEU82uG4heTCKV230depmaJZTIP5rEz7V8g/edit?usp=sharing&resourcekey=0-q-TH-9-LVmygnp6Ku4xKIg",type:301},{source:"/go/pub-automated-publishing",destination:"https://docs.google.com/document/d/1LSYVjDdgGNCc7p5Y2_hu8UA_Ms9MgZs3Jm974D1J344",type:301},{source:"/go/pub-workspace",destination:"https://docs.google.com/document/d/1UEEAGdWIgVf0X7o8WPQCPmL4LSzaGCfJTM0pURoDLfE/edit?usp=sharing&resourcekey=0-c5CMaOoc_pg3ZwJKMAM0og",type:301},{source:"/go/publish-on-homebrew",destination:"https://docs.google.com/document/d/1dk82qavQxT633LAonAM2xsqirWBmsqoHC4caJvYE584/edit?usp=sharing",type:301},{source:"/go/pull-request-revert-api",destination:"https://docs.google.com/document/d/1mVVetlCjv9PM5gtg57nipDFd5TvWsd24rXPWS0FzVvE/edit?usp=sharing&resourcekey=0-McwG6wn0s6YQ7qxHffkcdw",type:301},{source:"/go/pull-request-revert-api-v2",destination:"https://docs.google.com/document/d/1lfPVtrq_6YB-I6bEHEXRPeJCE32EvKxx-nSYmLpJIYI/edit?usp=sharing&resourcekey=0-BZghqoHCZBXuoQ2alTyRiw",type:301},{source:"/go/rasterizer-pipeline-improvements",destination:"https://docs.google.com/document/d/1Hg5Wfx8JTgYmLboxFRr5DDd9EfdrdEuMbNGGMvDjd6E/edit?usp=sharing",type:301},{source:"/go/reduce-ci-tests",destination:"https://docs.google.com/document/d/1-HRz-dXoIKjEgbCs9CF2-TO_3wSFK-V4ispXg-IoarY/edit?usp=sharing",type:301},{source:"/go/reference-plugin",destination:"https://docs.google.com/document/d/1NJFbRMVxVL9YS_FcWi7W08DsBr_eRAJtQI9FQkk9MXk/edit",type:301},{source:"/go/registered-actions",destination:"https://docs.google.com/document/d/1RrAWQ-rq-XcrjJx4Jegn8NdJKNHfLem6MkAJrI8Q_1w/edit?usp=sharing",type:301},{source:"/go/remove-fab-accent-theme-dependency",destination:"https://docs.google.com/document/d/1kmXWerkykXXjMfibsc9O105NocBGH3dGW8UL2VH5Q48/edit",type:301},{source:"/go/remove-include-flutter-groovy",destination:"https://docs.google.com/document/d/1OulURfRSWgJnnFA_cSup4ev7wrJwnZ7Siao_FGbLN9I",type:301},{source:"/go/reorderable-list-view-update",destination:"https://docs.google.com/document/d/1JzNtMQ-jnPnSHEBoi6IO0x2qMMylwhvRslEDcmqiwSs",type:301},{source:"/go/respecting-tabcontroller-animateto-duration",destination:"https://docs.google.com/document/d/1wzSzUYstDM-Kg5kwskyXcEUX7QTb-lBOso7Z5ebrCTk/edit",type:301},{source:"/go/restoring-anonymous-routes",destination:"https://docs.google.com/document/d/1vnjDruoiDz0eEd4eVzg3IS6W_LRaFxNSlKWtU6iXp2M/edit",type:301},{source:"/go/router-api-improvement",destination:"https://docs.google.com/document/d/1kbUPagtDl30jqYAq-mDMdd-ftHm3q9AMq55ufZCo9lE/edit?usp=sharing&resourcekey=0-JBqYh_UD3h9OSA8NS5OO4g",type:301},{source:"/go/analyze-flutter-in-runtime",destination:"https://docs.google.com/document/d/1VZOv9NsmNeXaqM9h9EjKTz5cg7lEsA623XBfbojXU5U/edit?usp=sharing",type:301},{source:"/go/rfc-32-bit-ios-support",destination:"https://docs.google.com/document/d/1Xz8B2w42ZGmrSdvQHo6LVLhiSZBIxnHxZxoZ-8oyRUc/edit",type:301},{source:"/go/rfc-32-bit-ios-unsupported",destination:"https://docs.google.com/document/d/1cc5EOsuTlbf4dTDTwmkD3aKjS8XEbVCIqi9BFct9XHM/edit?resourcekey=0-Iv0gXDx7nSDCe3YDfxDKqw",type:301},{source:"/go/rfc-android-j-deprecation",destination:"https://docs.google.com/document/d/1N06Pm1x19AIWorENk6OdmY5T8kMzPJUOZs8aL9VccG4/edit",type:301},{source:"/go/rfc-android-k-deprecation",destination:"https://docs.google.com/document/d/1gQGvMk2ydxieivDjO8zqM7DdwOBybKVgoUqZUOCuTo0/edit?usp=sharing&resourcekey=0-ew5kIQr2FPVp7qyydtBQeg",type:301},{source:"/go/rfc-ios8-deprecation",destination:"https://docs.google.com/document/d/1HtzJLUBnvi-VjcG3XEjwVHQGWeOzlrA77ozp9TvCWVE/edit",type:301},{source:"/go/router-and-widgetsapp-integration",destination:"https://docs.google.com/document/d/1QodTFmwVr1yk8dyQvoqkeILxvm92oikB1bVhHTtp6R4/edit",type:301},{source:"/go/semantics-roles",destination:"https://docs.google.com/document/d/1VRagJfHEbehVPa023xGUcFTqe5LgYGU2wYBmnNkwVmA/edit?usp=sharing",type:301},{source:"/go/scaffold-messenger",destination:"https://docs.google.com/document/d/1TCH0T-X42z96lAcSkFttHAQMJ0MsvMojDKa6F4IQI3Y/edit?usp=sharing",type:301},{source:"/go/scalable-flutter-infrastructure",destination:"https://docs.google.com/document/d/19GEUwAwJbNI-gO9ziV_oDESB28E_Pqppwx8ku9jdEqY",type:301},{source:"/go/scale-selection-handles-ios-rich-text",destination:"https://docs.google.com/document/d/1XuvdYUzZQAxCLYT2H1DNtOi1s6fGmFE-cgmweaijfe4/edit?usp=sharing",type:301},{source:"/go/scrollable-alert-dialog",destination:"https://docs.google.com/document/d/1qtVfjoKXE8BtkNbraKk9IzfRcks5btkKcyE4iGVwkbg/edit",type:301},{source:"/go/sdk-per-platform-installers",destination:"https://docs.google.com/document/d/1VooN2bddQ52Z2B4qYi1Lp20PGhyYDr1AKaXwo9e7PCw",type:301},{source:"/go/sfsymbols",destination:"https://docs.google.com/document/d/18V4ohqwp7fblJmhy7l9vVEPP1FGG4xXUorByjRHA19s/edit?usp=sharing&resourcekey=0-IVkjSy7jbMZ5FHPH_9yn9A",type:301},{source:"/go/shaders",destination:"https://docs.google.com/document/d/1z9K5LernwQ0LVAzfbAMW6ITx63QRdRsoax1NLYEfm4Y/edit",type:301},{source:"/go/sharding-mac-ios-builders",destination:"https://docs.google.com/document/d/1zLafqoFhKRMChUDGnnhzabnmhE2Vl1AWsrJzF8OWAGk/edit?usp=sharing",type:301},{source:"/go/simple-flutter-tool-memory-benchmarks",destination:"https://docs.google.com/document/d/1vlARGxdABMeZoj4HF0p075-81q7G9gv_GnDYgoF7e3I",type:301},{source:"/go/sixty-fps",destination:"https://docs.google.com/document/d/1FuNcBvAPghUyjeqQCOYxSt6lGDAQ1YxsNlOvrUx0Gko/edit",type:301},{source:"/go/slider-v2",destination:"https://docs.google.com/document/d/1NCuRe-TUp8u6-Yzx_wrXZcqAwv5NP8hEJwUYSxVECwU/edit",type:301},{source:"/go/sliver-flex-and-friends",destination:"https://docs.google.com/document/d/1W4_5oD5z7JHhUjuQYwS_NJRAv27Ih7IazcMm739O5JU/edit",type:301},{source:"/go/sliver-workshop",destination:"https://dartpad.dev/workshops.html?webserver=https://dartpad-workshops-io2021.web.app/getting_started_with_slivers",type:301},{source:"/go/state-restoration-design",destination:"https://docs.google.com/document/d/1KIiq5CdqnSXxQXbZIDy2Ukc-JHFyLak1JR8e2cm3eO4/edit",type:301},{source:"/go/stateful-macro",destination:"https://docs.google.com/document/d/1TMVFn2jXw705px7bUggk8vTvpLrUjxEG9mzb-cSqZuo/edit?usp=sharing&resourcekey=0-0s5mvWGH3OcW8GN-Rmr36A",type:301},{source:"/go/static-tooling-in-devtools",destination:"https://docs.google.com/document/d/1i6ISzzSKKDiiVftTnkCCvdgXEjK2eqYlPjCOKTjnvx8/edit?resourcekey=0-uyAiZEjFplyibsAkDAqKJw#",type:301},{source:"/go/strategy-2022",destination:"https://docs.google.com/document/d/e/2PACX-1vTI9X2XHN_IY8wDO4epQSD1CkRT8WDxf2CEExp5Ef4Id206UOMopkYqU73FvAnnYG6NAecNSDo9TaEO/pub",type:301},{source:"/go/strategy-2023",destination:"https://docs.google.com/document/d/e/2PACX-1vRknZ4Jkc-pWSMsDDyKwMrry7k2BSL_I94JCCQrg8FiHuy4fcypkgIVFbQVKPmzDQHfd20uZf2rFiXP/pub",type:301},{source:"/go/studio-rasterization-context-for-multi-view",destination:"https://docs.google.com/document/d/1Eqb8xeoRKpLq2OVkJX_ux3azVLGJgJcaY5uSWzqdc_4/edit",type:301},{source:"/go/subpixel-antialiasing",destination:"https://docs.google.com/document/d/1yEycgo5ivZ_lu2MAnMBLreZvROFdamy9-9q-QvMvL9U/edit?usp=sharing",type:301},{source:"/go/supporting-dart-callbacks",destination:"https://docs.google.com/document/d/1k7OimxbxXzdv3U7-TfB88yG5hIScN3TH6Jcvdcl4izM/edit",type:301},{source:"/go/swift-package-manager-plugins",destination:"https://docs.google.com/document/d/10S7anpgWdJ0wNCgsse8MvHY2PShrr9PeuufwYHi5v6U/edit",type:301},{source:"/go/swift-package-manager-plugins-v2",destination:"https://docs.google.com/document/d/1oUvM5e2a3QrKAk9pTPExPp3my4FD4lYz9Z-EXsUGuHI/edit?usp=sharing&resourcekey=0-Vu8vKukw0Dqqv7pW5aIxKQ",type:301},{source:"/go/synchronized-widgettester",destination:"https://docs.google.com/document/d/1VumsuG6dEFUVpPQLqqKJnhI0CoIS9fCAMN-NFHIPmo0/edit",type:301},{source:"/go/system-mouse-cursor",destination:"https://docs.google.com/document/d/1bJLRy6flZ0wDCbpl2QA8SURUWXIvRJKMRRemxlOo1cA/edit",type:301},{source:"/go/table-view",destination:"https://docs.google.com/document/d/15ecTZE1g3WeswLGFWrnEgMP6SyL6jDRdxOgPsczOcV0/edit?usp=sharing&resourcekey=0-yNd_qFhiPjz6z2TgezWc0A",type:301},{source:"/go/table-view-merged-cells",destination:"https://docs.google.com/document/d/1UekXjG_VKmWYbsxDEzMqTb7F-6oUr05v998n5IqtVWs/edit?usp=sharing",type:301},{source:"/go/tabs-and-text-fields",destination:"https://docs.google.com/document/d/1aHucsI0NWGWu2Dm_XFsBLxiTgJRM8h2XBB7PVAnVxlU/edit?usp=sharing&resourcekey=0-zLbXFlP_A2e_Yoi43vdiiw",type:301},{source:"/go/take-flutter-home",destination:"https://github.com/flutter/put-flutter-to-work",type:301},{source:"/go/table-development",destination:"https://docs.google.com/document/d/1fCE-zQNql0nnqJXhycpg902lhL7jrOOz-6sT8s8tv5c/edit?usp=sharing",type:301},{source:"/go/template",destination:"https://docs.google.com/document/d/1SFRO8U2toOlAaZ38dsuEU7Wm5fn41wvBCWKiwADqfmw/edit",type:301},{source:"/go/test-all-platforms",destination:"https://docs.google.com/document/d/1-gw2zYFs_jBqsFPpXRonRNLYn6XNgvm34jc9HT84VKE/edit?usp=sharing",type:301},{source:"/go/test-widgets-flutter-binding-clock",destination:"https://docs.google.com/document/d/1EkkLbECNBwHgddBQAZqEy7iQLTIxR1rgChKzxcLwhio/edit",type:301},{source:"/go/testing-code-samples",destination:"https://docs.google.com/document/d/11JXF-9d0u1jGJ9-gdpMGAZr5YudAiyHhXI_pT2vTpnw/edit?usp=sharing",type:301},{source:"/go/text-editing-actions",destination:"https://docs.google.com/document/d/1QaVIr1bbOWJGNyyNsB75sXgTDRMuxP268sLGTBNDut0/edit?usp=sharing",type:301},{source:"/go/text-editing-deltas",destination:"https://docs.google.com/document/d/1PXNd_LwJudiUTnCM2AXRxbd98_p4BlFf6qFhEhv3wvs/edit?usp=sharing",type:301},{source:"/go/text-editing-model",destination:"https://docs.google.com/document/d/1lkpg4dfVZif9NJ_dDQ01QkwQC3OqzhUFahhjgv_rcbM/edit#",type:301},{source:"/go/text-editing-magnifying-glass",destination:"https://docs.google.com/document/d/1RWq0Kd_xsHR8j7IXtgc25feV3RV8Hzq2KSQEVaDDXUs/edit?resourcekey=0-qLXzpPdvKRwQM8nlCijclQ",type:301},{source:"/go/text-field-characters",destination:"https://docs.google.com/document/d/1OOFW0PEZf0orBl445YXJ3nfjyKOqZdmeQ6KU3glUh7s/edit",type:301},{source:"/go/text-selection-menu-appearance",destination:"https://docs.google.com/document/d/1Or32nViSjym0Sk29HccxEzcEITj2oWdielOaeR5cmiY/edit",type:301},{source:"/go/text-selection-menu-customization",destination:"https://docs.google.com/document/d/1hyay1TyUZB7DXzWw45-ruGMZM1yCMWEnC3DzOJYemuc/edit",type:301},{source:"/go/text-selection-menu-modernization",destination:"https://docs.google.com/document/d/1qSEvbgi3m-OvB_dUKch8LHOk-iyPFeLgCsXbK0bI2DA/edit",type:301},{source:"/go/text-selection-programatically",destination:"https://docs.google.com/document/d/1NK4GJ0Wk5eJ3IUw_9oAtz1oYgZ-Sn-kAKHxTvsgr75o/edit?usp=sharing",type:301},{source:"/go/text-selection-theme",destination:"https://docs.google.com/document/d/1sCe7Y_lhREljtn6m0Uu_EycbS82zRvWnNtkfEwFX9W0",type:301},{source:"/go/texttheme-m3",destination:"https://docs.google.com/document/d/1y3K08vL9rMTsGmF_T65fXmWJbsPZohvaVB3T6JuqgjM/edit?resourcekey=0-Gnl-tX58L4yPdV3NgeXFBg",type:301},{source:"/go/theme-extensions",destination:"https://docs.google.com/document/d/1LbD4JqBgAfHex02oR3r2jyu9lTBBNBmyec2ovT59Kr8/edit?usp=sharing",type:301},{source:"/go/tool-announcements",destination:"https://docs.google.com/document/d/1Lv9pkmouTPz5BoRJn441tNdVaLvw8pEtZqLUW4u0HLo/edit?resourcekey=0-8TKBpp9OgxmqvJSqLgtyoQ",type:301},{source:"/go/tool-integration-test-support",destination:"https://docs.google.com/document/d/1jMMZpRAiQC2XTUFnzFsBrWwMsf7KyMuCScYgrJQJOV0/edit?resourcekey=0-ne9HbH1hXCHcIglomNfwtw",type:301},{source:"/go/top-errors-analysis",destination:"https://docs.google.com/document/d/1ZJ9t_uPeXqZnoDOIVes_Yu2BBxP42l99nSfHQPfswZw/edit?usp=sharing",type:301},{source:"/go/towards-improved-performance-tooling",destination:"https://docs.google.com/document/d/1wSDNcG0ww2V6JX1EE8avilCwnOiRVy83zSCWt916O0o",type:301},{source:"/go/tracking-material-states",destination:"https://docs.google.com/document/d/1PJdsOoXhWdhnpYKlW5Nm2Di3Di5XARoYyHerMwWovXE",type:301},{source:"/go/trackpad-gestures",destination:"https://docs.google.com/document/d/1oRvebwjpsC3KlxN1gOYnEdxtNpQDYpPtUFAkmTUe-K8/edit?usp=sharing&resourcekey=0-pt4_T7uggSTrsq2gWeGsYQ",type:301},{source:"/go/triage-2022-rfp",destination:"https://docs.google.com/document/d/1Kyrh1WijM04XqtUkVbL2uwDthlG9v3sljgl9HRlU4bU/edit",type:301},{source:"/go/triage-2023-rfc",destination:"https://docs.google.com/document/d/1RBvsolWL9nUkcEFhPZV4b-tstVUDHfHKzs-uQ3HiX-w/edit",type:301},{source:"/go/try",destination:"https://github.com/flutter/put-flutter-to-work",type:301},{source:"/go/ui-imitation-games",destination:"https://docs.google.com/document/d/1SbMjMiFhD2OZGTT3TCAOx6yfG-SYQ5F_fn7wwlZMumM/edit",type:301},{source:"/go/union-typed-transform-stack-in-hit-test",destination:"https://docs.google.com/document/d/1EsH7g-oyQIDZpRteg94iKJKgD7kVngZWq9ngDe6ORbM/edit?usp=sharing",type:301},{source:"/go/unobstructed-platform-views",destination:"https://docs.google.com/document/d/1_P3wa_nMqnhKsy-lDlNxT9GThZX2WhfVym4O4M7Q9qs/edit#",type:301},{source:"/go/update-psc",destination:"https://docs.google.com/document/d/12OQx7h8UQzzAi0Kxh-saDC2dg7h2fghCCzwJ0ysPmZE/edit?usp=sharing&resourcekey=0-ATO-1Er3HO2HITm59I0IdA",type:301},{source:"/go/update-scrollbars",destination:"https://docs.google.com/document/d/1mRlc-sRyadE6301aZsD1LJkPG2B9K97Bg_GDHvFhMQI/edit?usp=sharing&resourcekey=0-v4Gk8H280RaPo5qClmDqpA",type:301},{source:"/go/update-text-theme-api",destination:"https://docs.google.com/document/d/1B1s4mm6OYM7mKQ3vZfSTI2HR_KljB78gN6oBHg_zYUs/edit",type:301},{source:"/go/use-dart-style-in-flutter-engine",destination:"https://docs.google.com/document/d/1E2ZLNasExXMpSYcxWrd5qSp24WmhIPiFq9FjBC5GoVY?resourcekey=0-bmXuMwfoCn8a9QdQiMd3hA",type:301},{source:"/go/variable-refresh-rate",destination:"https://docs.google.com/document/d/1O-ot6MydAl5pAr_XGnpR-Qq5A5CPDF6edaPu8xQtgCQ/edit?usp=sharing&resourcekey=0-LlXeGtGRC67XL4NrGoc91A",type:301},{source:"/go/vector-graphics",destination:"https://docs.google.com/document/d/1YWffrlc6ZqRwfIiR1qwp1AOkS9JyA_lEURI8p5PsZlg/edit",type:301},{source:"/go/verbatim-logical-keys-for-non-latin-layout",destination:"https://docs.google.com/document/d/1ZNgNxito-NVUS1JKlcjdzHUcKyyiupy8Za-jb131dD4/edit?usp=sharing&resourcekey=0-eeEZ5X0jAzuqSTdmPWlv0w",type:301},{source:"/go/web-add-to-app",destination:"https://docs.google.com/document/d/1rFM0qmYds1JkntTruBh8eO72xbT2KoP9JdbizucAAwQ/edit",type:301},{source:"/go/web-astral-projections",destination:"https://docs.google.com/document/d/1pvH-J8opXsjntTpFf1bbsbU8N1vFd8tPKvBgcNn8UKQ",type:301},{source:"/go/web-declarative-bootstrap",destination:"https://docs.google.com/document/d/1jVXxC0tNDW45ypfVESyHipL2lHCX32GmFyJNO0u9c6Y/edit?resourcekey=0-AQ8z_0_U8Vq3JBdyracNuQ",type:301},{source:"/go/web-multiview-js-api",destination:"https://docs.google.com/document/d/1ixwPBG7YIHEONc15t9SOmrfgDK3gghvkk7it_8AFOmw/edit?resourcekey=0-VQC2nby6Coe5OG-R833yXw",type:301},{source:"/go/web-native-text-editing",destination:"https://docs.google.com/document/d/1t6qAX46tsR1tdBS42yro6G_5Igtrj7WzmKKiUI_JC-k/edit",type:301},{source:"/go/web-plugins-layout",destination:"https://docs.google.com/document/d/1PeS-QSAFydHXhjZrqkub-GRPMs83roh8VwhbUScWuGQ",type:301},{source:"/go/web-programmatic-bootstrap",destination:"https://docs.google.com/document/d/13kVA40gQ3T0FLqmV4w5rNvLHjmU6XWFbb7j0_YV7k9M",type:301},{source:"/go/web-renderer-options",destination:"https://docs.google.com/document/d/1aY0iU16wf_sdT7nwfpjgT-IatHNfF3slTiYHKmxcIog",type:301},{source:"/go/web-slot-content",destination:"https://docs.google.com/document/d/1U6aCSuzQsFpOP8_OseL-fwl2-MC2bxJAsgt2R_-sC30",type:301},{source:"/go/webview_flutter_4_interface",destination:"https://docs.google.com/document/d/14tZpyj5oxB6a5ugaR7-kQrxD2wBgctlK5jxwvItv0LI/edit?usp=sharing&resourcekey=0-M5oUr3Pm3f5wtE7v4aQbkQ",type:301},{source:"/go/widget-test-frame-precision",destination:"https://docs.google.com/document/d/1lECLbcmfWdyZFUG5TTGtem3l_SEefcJWHwPO_aZIqwM/edit?usp=sharing&resourcekey=0-6L6P_D571XnvK5oIfpe4MQ",type:301},{source:"/go/widget-tree-image-cache",destination:"https://docs.google.com/document/d/1deEtxZk1VYRmzvkL4gTb3sEnjBrHejQkWObQ4yrP5jE/edit?pli=1#",type:301},{source:"/go/widgetspan-in-selectabletext",destination:"https://docs.google.com/document/d/1nrVRytWVF-1hr8LvUKyENE5s074UInni9ZiColtIIxI",type:301},{source:"/go/widget-budget",destination:"https://docs.google.com/document/d/1JTmf7ae8hWJ3zzqhI-__I9DcUJdQ3TopWsJbKyNDO5A/edit?usp=sharing&resourcekey=0--A0AbM19K-zDXRmIIzaUAg",type:301},{source:"/go/windows-arm64",destination:"https://docs.google.com/document/d/1yuexY-EtzeVhU3V6RGBII_kH-znLSkQCspzW70jayZk/edit?resourcekey=0-8pQRSXSHQlwOo7QtCVLvBA#heading=h.pub7jnop54q0",type:301},{source:"/go/windows-multi-view-ownership-updates",destination:"https://docs.google.com/document/d/1QSnnu4SK0H_Zuik_x2ceHc8KTpxcG_HDS9KSm6xd5iY/edit?usp=sharing",type:301},{source:"/go/windows-x86-arm64-support",destination:"https://docs.google.com/document/d/1gAGqtTAjO0GntR8bPonIO1aZJnTghPCI_PHJPdNzEmo/edit?resourcekey=0-l1tL7iai47yw3bMl9IcpHw",type:301},{source:"/go/wrap-layout",destination:"https://docs.google.com/document/d/1auZtWT1T5CkUKOUTUld8rF91iN7PvQoOF0IlBNXiDSo/edit?usp=sharing",type:301},{source:"/go/wrap-popupmenu-with-safearea",destination:"https://docs.google.com/document/d/15uBmyEKiOeYGYt1PuBVf4SFK5YhH07EP9ylWP-H9mVE/edit?usp=sharing",type:301}],headers:[{source:"/f/*.json",headers:[{key:"Access-Control-Allow-Origin",value:"*"}]},{source:"**/*.@(avif|jpg|jpeg|gif|png|webp|webm|svg|md|css|js)",headers:[{key:"Cache-Control",value:"max-age=3600"},{key:"Access-Control-Allow-Origin",value:"*"}]},{source:"**",headers:[{key:"Referrer-Policy",value:"strict-origin-when-cross-origin"},{key:"X-Content-Type-Options",value:"nosniff"},{key:"X-Frame-Options",value:"'SAMEORIGIN' always;"}]}]},emulators:{hosting:{port:5500}}},te=ee(window.location.pathname);function ee(t){const e=$t.hosting.redirects;for(const s of e)try{if(s.regex){const e=ot.compile(s.regex),o=e.matcher(t);if(o.matches()){let t=s.destination;const i=e.namedGroups();if(Object.keys(i).length>0)for(const e in i)t=t.replace(`:${e}`,o.group(e));const n=o.groupCount();if(n>0)for(let e=0;e + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file diff --git a/tool/host-redirect/README.md b/tool/host-redirect/README.md new file mode 100644 index 0000000000..4ff36b8565 --- /dev/null +++ b/tool/host-redirect/README.md @@ -0,0 +1,24 @@ +## 临时的重定向方案 + +由于 OSS 部分限制的问题, +无法将大量重定向逻辑在服务端直接使用(类似 Nginx、Apache 等), + +所有无法访问的链接会被重定向至 404 页, +该方案利用 404 页, +将 firebase.json 内的重定向逻辑运行在 404 页面。 + +关于 firebase.json 内重定向的相关资料: +> https://firebase.google.cn/docs/hosting/full-config?hl=zh-cn#redirects + +### 环境 + +- node v20.11.0 +- npm v10.2.4 + +### 使用 + +```sh +npm install + +npm run build # ./build/host-redirect.min.js +``` diff --git a/tool/host-redirect/build.sh b/tool/host-redirect/build.sh new file mode 100644 index 0000000000..96e07e5635 --- /dev/null +++ b/tool/host-redirect/build.sh @@ -0,0 +1,16 @@ +#!/usr/bin/bash + +cd tool/host-redirect +npm install +npm run build + +cd - +cp ./tool/host-redirect/build/host-redirect.min.js ./src/content/assets/js/host-redirect.min.js + +git init +git config --global user.name "cfug-dev" +git config --global user.email "cfug-dev@googlegroups.com" + +git add ./src/content/assets/js/host-redirect.min.js +git commit -m "[sync] Update: host-redirect.min.js" +git push -u -f \ No newline at end of file diff --git a/tool/host-redirect/package.json b/tool/host-redirect/package.json new file mode 100644 index 0000000000..b279d14949 --- /dev/null +++ b/tool/host-redirect/package.json @@ -0,0 +1,21 @@ +{ + "name": "host_redirect", + "version": "1.0.0", + "description": "", + "main": "./src/index.js", + "scripts": { + "build": "node ./src/generate_firebase_data.js && webpack" + }, + "author": "AmosHuKe", + "homepage": "https://github.com/cfug/flutter.cn/tree/main/tool/host-redirect", + "license": "MIT", + "devDependencies": { + "webpack": "^5.91.0", + "webpack-cli": "^5.1.4" + }, + "dependencies": { + "minimatch": "^9.0.4", + "path-to-regexp": "^6.2.2", + "re2js": "^0.4.1" + } +} \ No newline at end of file diff --git a/tool/host-redirect/src/generate_firebase_data.js b/tool/host-redirect/src/generate_firebase_data.js new file mode 100644 index 0000000000..58926548a7 --- /dev/null +++ b/tool/host-redirect/src/generate_firebase_data.js @@ -0,0 +1,40 @@ +/** + * 读取 firebase.json 并 + * 生成 firebase_json.js 文件 + */ + +const fs = require('fs') + +// firebase.json 文件路径 +const READ_FILE_FIREBASE_JSON = '../../firebase.json' +// 生成 firebase_json.js 的文件路径 +const WRITE_FILE_FIREBASE_JSON_JS = './src/data/' + +// 读取 JSON 文件 +fs.readFile(READ_FILE_FIREBASE_JSON, 'utf8', (err, data) => { + if (err) { + console.error('Error reading the file:', err) + return + } + try { + const jsonData = JSON.parse(data) + // 生成包含 JSON 数据的 JavaScript 文件内容 + const jsContent = `const data = ${JSON.stringify(jsonData, null, 2)}; export default data;` + fs.mkdir(WRITE_FILE_FIREBASE_JSON_JS, { recursive: true }, (err) => { + if (err) { + console.error('Failed to create directory:', err) + return + } + // 写入到新的 JavaScript 文件 + fs.writeFile(`${WRITE_FILE_FIREBASE_JSON_JS}firebase_json.js`, jsContent, 'utf8', (err) => { + if (err) { + console.error('Error writing the file:', err) + return + } + console.log('firebase_json.js file has been generated successfully!') + }) + }) + } catch (parseErr) { + console.error('Error parsing JSON:', parseErr) + } +}) \ No newline at end of file diff --git a/tool/host-redirect/src/index.js b/tool/host-redirect/src/index.js new file mode 100644 index 0000000000..66edc5d40e --- /dev/null +++ b/tool/host-redirect/src/index.js @@ -0,0 +1,85 @@ + +import { RE2JS } from 're2js' +import { minimatch } from 'minimatch' +import { pathToRegexp, match, parse, compile } from 'path-to-regexp' +import data from './data/firebase_json.js' + +const currentPath = window.location.pathname; +const redirect = getRedirect(currentPath) +console.log('Redirect: ', redirect) +if (redirect) { + window.location.href = redirect +} + + +/** + * 获取重定向路由 + * + * @param {String} currentPath 当前路由 + * @returns {String | null} 重定向路由 + */ +function getRedirect(currentPath) { + const redirects = data.hosting.redirects + for (const redirect of redirects) { + try { + // redirects[].regex + if (redirect.regex) { + const regexp = RE2JS.compile(redirect.regex) + const regexpMatcher = regexp.matcher(currentPath) + if (regexpMatcher.matches()) { + let destination = redirect.destination + + // 处理有命名的变量(类似 P) + const namedGroups = regexp.namedGroups() + if (Object.keys(namedGroups).length > 0) { + for (const name in namedGroups) { + destination = destination.replace(`:${name}`, regexpMatcher.group(name)) + } + } + + // 处理未命名的变量 + const groupCount = regexpMatcher.groupCount() + if (groupCount > 0) { + for (let i = 0; i < groupCount; i++) { + destination = destination.replace(`:${i}`, regexpMatcher.group(i)) + } + } + return destination + } + } + + // redirects[].source + if (redirect.source) { + // Glob + const globMatch = minimatch(currentPath, redirect.source) + if (globMatch) { + return redirect.destination + } + + // Regexp + const regexpMatch = pathToRegexp(redirect.source).exec(currentPath) + if (regexpMatch) { + let destination = redirect.destination + const params = parse(redirect.source) + for (let i = 0; i < params.length; i++) { + const { name, modifier } = params[i] + // 处理有命名的变量(类似 :name 、:name* 、:name? 等) + if (name) { + destination = destination.replace(`:${name}${modifier}`, regexpMatch[i]) + } + + // 处理未命名的变量 + if (!name) { + destination = destination.replace(`:${i}`, params[i]) + } + } + return destination + } + + } + } catch (error) { } + } + return null +} + +export { getRedirect } \ No newline at end of file diff --git a/tool/host-redirect/webpack.config.js b/tool/host-redirect/webpack.config.js new file mode 100644 index 0000000000..6e2f908be3 --- /dev/null +++ b/tool/host-redirect/webpack.config.js @@ -0,0 +1,15 @@ +const path = require('path'); + +module.exports = { + entry: './src/index.js', + output: { + path: path.resolve(__dirname, 'build'), + filename: 'host-redirect.min.js', + library: 'hostRedirect', + }, + mode: 'production', + performance: { + maxEntrypointSize: 512000, + maxAssetSize: 512000, + }, +}; \ No newline at end of file