[
  {
    "path": ".github/CONTRIBUTING.md",
    "content": "# Contributing to GitMCP\n\nFirst of all, thank you for your interest in contributing to GitMCP! We appreciate the time and effort you're willing to invest in improving the project. This document provides guidelines and information to make the contribution process as smooth as possible.\n\n## Table of Contents\n\n- [Getting Started](#getting-started)\n- [Local Development](#local-development)\n  - [Prerequisites](#prerequisites)\n  - [Setting Up Your Development Environment](#setting-up-your-development-environment)\n  - [Running the Project Locally](#running-the-project-locally)\n  - [Testing](#testing)\n  - [Code Formatting](#code-formatting)\n  - [Development Workflow](#development-workflow)\n  - [Project Structure](#project-structure)\n- [How to Contribute](#how-to-contribute)\n  - [Reporting Bugs](#reporting-bugs)\n  - [Suggesting Enhancements](#suggesting-enhancements)\n  - [Submitting Pull Requests](#submitting-pull-requests)\n- [Style Guidelines](#style-guidelines)\n  - [Code Style](#code-style)\n  - [Commit Messages](#commit-messages)\n- [Additional Resources](#additional-resources)\n\n## Getting Started\n\n1. Fork the repository and clone it to your local machine.\n2. Set up the development environment.\n3. Explore the codebase, run tests, and verify that everything works as expected.\n\n## Local Development\n\n### Prerequisites\n\nBefore you start working on GitMCP, make sure you have the following installed:\n\n- [Node.js](https://nodejs.org/) (version 18 or higher recommended)\n- [pnpm](https://pnpm.io/) (version 8.15.7 or higher)\n- Git\n\n### Setting Up Your Development Environment\n\n1. Clone your forked repository:\n   ```bash\n   git clone https://github.com/your-username/git-mcp.git\n   cd git-mcp\n   ```\n\n2. Install dependencies:\n   ```bash\n   pnpm install\n   ```\n\n3. Set up environment variables:\n   - Create a `.env.local` file in the root directory\n   - Add any necessary environment variables (ask project maintainers if you need access to specific API keys)\n\n### Running the Project Locally\n\nTo start the development server:\n\n```bash\npnpm vercel dev\n```\n\nThis will start the Next.js development server, typically at http://localhost:3000.\n\nFor running with the MCP Inspector (useful for debugging MCP endpoints):\n\n```bash\npnpm run inspector\n```\n\n### Testing\n\nTo run tests:\n\n```bash\npnpm test\n```\n\nGitMCP uses Vitest as the testing framework. When adding new features, please include appropriate tests.\n\n### Code Formatting\n\nGitMCP uses Prettier for code formatting and lint-staged to ensure code is properly formatted before committing. Pre-commit hooks are set up with Husky to run these checks automatically.\n\nTo manually format your code:\n\n```bash\npnpm prettier --write .\n```\n\n### Development Workflow\n\n1. Create a new branch for your feature/bugfix\n2. Make your changes\n3. Add tests for your changes when applicable\n4. Run the tests to ensure they pass\n5. Commit your changes following the commit message guidelines\n6. Push your branch and open a pull request\n\n### Project Structure\n\n- `api/`: Contains the server-side code and MCP implementation\n  - `tools/`: MCP tools implementation\n  - `utils/`: Utility functions for the API\n- `app/`: Next.js app directory with React components\n- `pages/`: Additional Next.js pages\n- `public/`: Static assets\n- `shared/`: Shared utilities used across the codebase\n\n## How to Contribute\n\n### Reporting Bugs\n\nIf you encounter a bug or issue while using GitMCP, please open a new issue on the [GitHub Issues](https://github.com/idosal/git-mcp/issues) page. Provide a clear and concise description of the problem, steps to reproduce it, and any relevant error messages or logs.\n\n### Suggesting Enhancements\n\nWe welcome ideas for improvements and new features. To suggest an enhancement, open a new issue on the [GitHub Issues](https://github.com/idosal/git-mcp/issues) page. Describe the enhancement in detail, explain the use case, and outline the benefits it would bring to the project.\n\n### Submitting Pull Requests\n\n1. Create a new branch for your feature or bugfix. Use a descriptive name like `feature/your-feature-name` or `fix/your-bugfix-name`.\n2. Make your changes, following the [Style Guidelines](#style-guidelines) below.\n3. Test your changes and ensure that they don't introduce new issues or break existing functionality.\n4. Commit your changes, following the [commit message guidelines](#commit-messages).\n5. Push your branch to your fork on GitHub.\n6. Open a new pull request against the `main` branch of the Wolverine repository. Include a clear and concise description of your changes, referencing any related issues.\n\n## Style Guidelines\n\n### Code Style\n\nGitMCP uses [ESLint](https://eslint.org/) as its code style guide. Please ensure that your code follows these guidelines. \n\n### Commit Messages\n\nWrite clear and concise commit messages that briefly describe the changes made in each commit. Use the imperative mood and start with a capitalized verb, e.g., \"Add new feature\" or \"Fix bug in function\".\n\n## Additional Resources\n\n- [GitHub Help](https://help.github.com/)\n- [GitHub Pull Request Documentation](https://docs.github.com/en/github/collaborating-with-issues-and-pull-requests)\n- [ESLint Style Guide](https://eslint.org/)\n\nThank you once again for your interest in contributing to GitMCP. We look forward to collaborating with you and creating an even better project together!\n\n"
  },
  {
    "path": ".github/workflows/e2e-tests.yml",
    "content": "name: E2E Tests\n\non:\n  pull_request:\n    paths:\n      - 'src/**'\n      - 'tests/e2e/**'\n      - 'package.json'\n      - 'pnpm-lock.yaml'\n      - 'wrangler.jsonc'\n      - '.github/workflows/e2e-tests.yml'\n\njobs:\n  e2e_test:\n    runs-on: ubuntu-latest\n    timeout-minutes: 15 # Adjust timeout as needed\n    permissions:\n      contents: read\n      pull-requests: write # Required to post the preview URL comment back to the PR\n\n    steps:\n      - name: Checkout repository\n        uses: actions/checkout@v4\n\n      - name: Setup Node.js\n        uses: actions/setup-node@v4\n        with:\n          node-version: '20' # Match your project's Node.js version requirement\n\n      - name: Setup PNPM\n        uses: pnpm/action-setup@v4\n\n      - name: Get pnpm store directory\n        shell: bash\n        run: |\n          echo \"STORE_PATH=$(pnpm store path --silent)\" >> $GITHUB_ENV\n\n      - name: Setup pnpm cache\n        uses: actions/cache@v4\n        with:\n          path: ${{ env.STORE_PATH }}\n          key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}\n          restore-keys: |\n            ${{ runner.os }}-pnpm-store-\n\n      - name: Install dependencies\n        run: pnpm install --frozen-lockfile\n\n      - name: Install Playwright Browsers\n        run: npx playwright install chromium --with-deps\n\n      - name: Create .dev.vars with test environment\n        run: echo \"ENVIRONMENT=test\" > .dev.vars\n\n      - name: Run Playwright tests\n        run: pnpm run test:e2e"
  },
  {
    "path": ".github/workflows/run-tests.yml",
    "content": "name: Run Tests\n\non:\n  push:\n    branches: [ main ]\n  pull_request:\n    branches: [ main ]\n\njobs:\n  test:\n    runs-on: ubuntu-latest\n\n    steps:\n    - uses: actions/checkout@v4\n\n    - name: Setup Node.js\n      uses: actions/setup-node@v4\n      with:\n        node-version: '20'\n\n    - name: Setup pnpm\n      uses: pnpm/action-setup@v3\n      with:\n        version: '10.7.1'\n\n    - name: Get pnpm store directory\n      id: pnpm-cache\n      run: |\n        echo \"pnpm_cache_dir=$(pnpm store path)\" >> $GITHUB_OUTPUT\n\n    - name: Setup pnpm cache\n      uses: actions/cache@v4\n      with:\n        path: ${{ steps.pnpm-cache.outputs.pnpm_cache_dir }}\n        key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}\n        restore-keys: |\n          ${{ runner.os }}-pnpm-store-\n\n    - name: Install dependencies\n      run: pnpm install\n\n    - name: Run tests\n      run: pnpm test\n"
  },
  {
    "path": ".gitignore",
    "content": "node_modules\nbuild\n\n.nx\n.idea\n.vscode\n.zed\n# Logs\n\nlogs\n_.log\nnpm-debug.log_\nyarn-debug.log*\nyarn-error.log*\nlerna-debug.log*\n.pnpm-debug.log*\n\n# Diagnostic reports (https://nodejs.org/api/report.html)\n\nreport.[0-9]_.[0-9]_.[0-9]_.[0-9]_.json\n\n# Runtime data\n\npids\n_.pid\n_.seed\n\\*.pid.lock\n\n# Directory for instrumented libs generated by jscoverage/JSCover\n\nlib-cov\n\n# Coverage directory used by tools like istanbul\n\ncoverage\n\\*.lcov\n\n# nyc test coverage\n\n.nyc_output\n\n# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)\n\n.grunt\n\n# Bower dependency directory (https://bower.io/)\n\nbower_components\n\n# node-waf configuration\n\n.lock-wscript\n\n# Compiled binary addons (https://nodejs.org/api/addons.html)\n\nbuild/Release\n\n# Dependency directories\n\nnode_modules/\njspm_packages/\n\n# Snowpack dependency directory (https://snowpack.dev/)\n\nweb_modules/\n\n# TypeScript cache\n\n\\*.tsbuildinfo\n\n# Optional npm cache directory\n\n.npm\n\n# Optional eslint cache\n\n.eslintcache\n\n# Optional stylelint cache\n\n.stylelintcache\n\n# Microbundle cache\n\n.rpt2_cache/\n.rts2_cache_cjs/\n.rts2_cache_es/\n.rts2_cache_umd/\n\n# Optional REPL history\n\n.node_repl_history\n\n# Output of 'npm pack'\n\n\\*.tgz\n\n# Yarn Integrity file\n\n.yarn-integrity\n\n# dotenv environment variable files\n\n.env\n.env.development.local\n.env.test.local\n.env.production.local\n.env.local\n\n# parcel-bundler cache (https://parceljs.org/)\n\n.cache\n.parcel-cache\n\n# Next.js build output\n\n.next\nout\n\n# Nuxt.js build / generate output\n\n.nuxt\ndist\n\n# Gatsby files\n\n.cache/\n\n# Comment in the public line in if your project uses Gatsby and not Next.js\n\n# https://nextjs.org/blog/next-9-1#public-directory-support\n\n# public\n\n# vuepress build output\n\n.vuepress/dist\n\n# vuepress v2.x temp and cache directory\n\n.temp\n.cache\n\n# Docusaurus cache and generated files\n\n.docusaurus\n\n# Serverless directories\n\n.serverless/\n\n# FuseBox cache\n\n.fusebox/\n\n# DynamoDB Local files\n\n.dynamodb/\n\n# TernJS port file\n\n.tern-port\n\n# Stores VSCode versions used for testing VSCode extensions\n\n.vscode-test\n\n# yarn v2\n\n.yarn/cache\n.yarn/unplugged\n.yarn/build-state.yml\n.yarn/install-state.gz\n.pnp.\\*\n\n# wrangler project\n\n.dev.vars\n.wrangler/\n\n# playwright\n\nplaywright-results/\nplaywright-report/\ntest-results/"
  },
  {
    "path": ".husky/pre-commit",
    "content": "pnpm lint-staged\n"
  },
  {
    "path": ".prettierrc",
    "content": "{\n  \"semi\": true,\n  \"trailingComma\": \"all\",\n  \"singleQuote\": false,\n  \"printWidth\": 80,\n  \"tabWidth\": 2,\n  \"useTabs\": false,\n  \"bracketSpacing\": true,\n  \"arrowParens\": \"always\",\n  \"endOfLine\": \"lf\"\n}\n"
  },
  {
    "path": ".react-router/types/+register.ts",
    "content": "import \"react-router\";\n\ndeclare module \"react-router\" {\n  interface Register {\n    params: Params;\n  }\n}\n\ntype Params = {\n  \"/\": {};\n  \"/api/chat\": {};\n  \"/*\": {\n    \"*\": string;\n  };\n};"
  },
  {
    "path": ".react-router/types/+virtual.d.ts",
    "content": "declare module \"virtual:react-router/server-build\" {\n  import { ServerBuild } from \"react-router\";\n  export const assets: ServerBuild[\"assets\"];\n  export const assetsBuildDirectory: ServerBuild[\"assetsBuildDirectory\"];\n  export const basename: ServerBuild[\"basename\"];\n  export const entry: ServerBuild[\"entry\"];\n  export const future: ServerBuild[\"future\"];\n  export const isSpaMode: ServerBuild[\"isSpaMode\"];\n  export const prerender: ServerBuild[\"prerender\"];\n  export const publicPath: ServerBuild[\"publicPath\"];\n  export const routes: ServerBuild[\"routes\"];\n  export const ssr: ServerBuild[\"ssr\"];\n  export const unstable_getCriticalCss: ServerBuild[\"unstable_getCriticalCss\"];\n}"
  },
  {
    "path": ".react-router/types/app/+types/root.ts",
    "content": "// React Router generated types for route:\n// root.tsx\n\nimport type * as T from \"react-router/route-module\"\n\n\n\ntype Module = typeof import(\"../root.js\")\n\nexport type Info = {\n  parents: [],\n  id: \"root\"\n  file: \"root.tsx\"\n  path: \"\"\n  params: {} & { [key: string]: string | undefined }\n  module: Module\n  loaderData: T.CreateLoaderData<Module>\n  actionData: T.CreateActionData<Module>\n}\n\nexport namespace Route {\n  export type LinkDescriptors = T.LinkDescriptors\n  export type LinksFunction = () => LinkDescriptors\n\n  export type MetaArgs = T.CreateMetaArgs<Info>\n  export type MetaDescriptors = T.MetaDescriptors\n  export type MetaFunction = (args: MetaArgs) => MetaDescriptors\n\n  export type HeadersArgs = T.HeadersArgs\n  export type HeadersFunction = (args: HeadersArgs) => Headers | HeadersInit\n\n  export type unstable_MiddlewareFunction = T.CreateServerMiddlewareFunction<Info>\n  export type unstable_ClientMiddlewareFunction = T.CreateClientMiddlewareFunction<Info>\n  export type LoaderArgs = T.CreateServerLoaderArgs<Info>\n  export type ClientLoaderArgs = T.CreateClientLoaderArgs<Info>\n  export type ActionArgs = T.CreateServerActionArgs<Info>\n  export type ClientActionArgs = T.CreateClientActionArgs<Info>\n\n  export type HydrateFallbackProps = T.CreateHydrateFallbackProps<Info>\n  export type ComponentProps = T.CreateComponentProps<Info>\n  export type ErrorBoundaryProps = T.CreateErrorBoundaryProps<Info>\n}"
  },
  {
    "path": ".react-router/types/app/routes/+types/$.ts",
    "content": "// React Router generated types for route:\n// routes/$.tsx\n\nimport type * as T from \"react-router/route-module\"\n\nimport type { Info as Parent0 } from \"../../+types/root.js\"\n\ntype Module = typeof import(\"../$.js\")\n\nexport type Info = {\n  parents: [Parent0],\n  id: \"routes/$\"\n  file: \"routes/$.tsx\"\n  path: \"*\"\n  params: {\"*\": string} & { [key: string]: string | undefined }\n  module: Module\n  loaderData: T.CreateLoaderData<Module>\n  actionData: T.CreateActionData<Module>\n}\n\nexport namespace Route {\n  export type LinkDescriptors = T.LinkDescriptors\n  export type LinksFunction = () => LinkDescriptors\n\n  export type MetaArgs = T.CreateMetaArgs<Info>\n  export type MetaDescriptors = T.MetaDescriptors\n  export type MetaFunction = (args: MetaArgs) => MetaDescriptors\n\n  export type HeadersArgs = T.HeadersArgs\n  export type HeadersFunction = (args: HeadersArgs) => Headers | HeadersInit\n\n  export type unstable_MiddlewareFunction = T.CreateServerMiddlewareFunction<Info>\n  export type unstable_ClientMiddlewareFunction = T.CreateClientMiddlewareFunction<Info>\n  export type LoaderArgs = T.CreateServerLoaderArgs<Info>\n  export type ClientLoaderArgs = T.CreateClientLoaderArgs<Info>\n  export type ActionArgs = T.CreateServerActionArgs<Info>\n  export type ClientActionArgs = T.CreateClientActionArgs<Info>\n\n  export type HydrateFallbackProps = T.CreateHydrateFallbackProps<Info>\n  export type ComponentProps = T.CreateComponentProps<Info>\n  export type ErrorBoundaryProps = T.CreateErrorBoundaryProps<Info>\n}"
  },
  {
    "path": ".react-router/types/app/routes/+types/_index.ts",
    "content": "// React Router generated types for route:\n// routes/_index.tsx\n\nimport type * as T from \"react-router/route-module\"\n\nimport type { Info as Parent0 } from \"../../+types/root.js\"\n\ntype Module = typeof import(\"../_index.js\")\n\nexport type Info = {\n  parents: [Parent0],\n  id: \"routes/_index\"\n  file: \"routes/_index.tsx\"\n  path: \"undefined\"\n  params: {} & { [key: string]: string | undefined }\n  module: Module\n  loaderData: T.CreateLoaderData<Module>\n  actionData: T.CreateActionData<Module>\n}\n\nexport namespace Route {\n  export type LinkDescriptors = T.LinkDescriptors\n  export type LinksFunction = () => LinkDescriptors\n\n  export type MetaArgs = T.CreateMetaArgs<Info>\n  export type MetaDescriptors = T.MetaDescriptors\n  export type MetaFunction = (args: MetaArgs) => MetaDescriptors\n\n  export type HeadersArgs = T.HeadersArgs\n  export type HeadersFunction = (args: HeadersArgs) => Headers | HeadersInit\n\n  export type unstable_MiddlewareFunction = T.CreateServerMiddlewareFunction<Info>\n  export type unstable_ClientMiddlewareFunction = T.CreateClientMiddlewareFunction<Info>\n  export type LoaderArgs = T.CreateServerLoaderArgs<Info>\n  export type ClientLoaderArgs = T.CreateClientLoaderArgs<Info>\n  export type ActionArgs = T.CreateServerActionArgs<Info>\n  export type ClientActionArgs = T.CreateClientActionArgs<Info>\n\n  export type HydrateFallbackProps = T.CreateHydrateFallbackProps<Info>\n  export type ComponentProps = T.CreateComponentProps<Info>\n  export type ErrorBoundaryProps = T.CreateErrorBoundaryProps<Info>\n}"
  },
  {
    "path": ".react-router/types/app/routes/+types/api.chat.ts",
    "content": "// React Router generated types for route:\n// routes/api.chat.ts\n\nimport type * as T from \"react-router/route-module\"\n\nimport type { Info as Parent0 } from \"../../+types/root.js\"\n\ntype Module = typeof import(\"../api.chat.js\")\n\nexport type Info = {\n  parents: [Parent0],\n  id: \"routes/api.chat\"\n  file: \"routes/api.chat.ts\"\n  path: \"api/chat\"\n  params: {} & { [key: string]: string | undefined }\n  module: Module\n  loaderData: T.CreateLoaderData<Module>\n  actionData: T.CreateActionData<Module>\n}\n\nexport namespace Route {\n  export type LinkDescriptors = T.LinkDescriptors\n  export type LinksFunction = () => LinkDescriptors\n\n  export type MetaArgs = T.CreateMetaArgs<Info>\n  export type MetaDescriptors = T.MetaDescriptors\n  export type MetaFunction = (args: MetaArgs) => MetaDescriptors\n\n  export type HeadersArgs = T.HeadersArgs\n  export type HeadersFunction = (args: HeadersArgs) => Headers | HeadersInit\n\n  export type unstable_MiddlewareFunction = T.CreateServerMiddlewareFunction<Info>\n  export type unstable_ClientMiddlewareFunction = T.CreateClientMiddlewareFunction<Info>\n  export type LoaderArgs = T.CreateServerLoaderArgs<Info>\n  export type ClientLoaderArgs = T.CreateClientLoaderArgs<Info>\n  export type ActionArgs = T.CreateServerActionArgs<Info>\n  export type ClientActionArgs = T.CreateClientActionArgs<Info>\n\n  export type HydrateFallbackProps = T.CreateHydrateFallbackProps<Info>\n  export type ComponentProps = T.CreateComponentProps<Info>\n  export type ErrorBoundaryProps = T.CreateErrorBoundaryProps<Info>\n}"
  },
  {
    "path": "LICENSE",
    "content": "                                 Apache License\n                           Version 2.0, January 2004\n                        http://www.apache.org/licenses/\n\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n   1. Definitions.\n\n      \"License\" shall mean the terms and conditions for use, reproduction,\n      and distribution as defined by Sections 1 through 9 of this document.\n\n      \"Licensor\" shall mean the copyright owner or entity authorized by\n      the copyright owner that is granting the License.\n\n      \"Legal Entity\" shall mean the union of the acting entity and all\n      other entities that control, are controlled by, or are under common\n      control with that entity. For the purposes of this definition,\n      \"control\" means (i) the power, direct or indirect, to cause the\n      direction or management of such entity, whether by contract or\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\n      outstanding shares, or (iii) beneficial ownership of such entity.\n\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\n      exercising permissions granted by this License.\n\n      \"Source\" form shall mean the preferred form for making modifications,\n      including but not limited to software source code, documentation\n      source, and configuration files.\n\n      \"Object\" form shall mean any form resulting from mechanical\n      transformation or translation of a Source form, including but\n      not limited to compiled object code, generated documentation,\n      and conversions to other media types.\n\n      \"Work\" shall mean the work of authorship, whether in Source or\n      Object form, made available under the License, as indicated by a\n      copyright notice that is included in or attached to the work\n      (an example is provided in the Appendix below).\n\n      \"Derivative Works\" shall mean any work, whether in Source or Object\n      form, that is based on (or derived from) the Work and for which the\n      editorial revisions, annotations, elaborations, or other modifications\n      represent, as a whole, an original work of authorship. For the purposes\n      of this License, Derivative Works shall not include works that remain\n      separable from, or merely link (or bind by name) to the interfaces of,\n      the Work and Derivative Works thereof.\n\n      \"Contribution\" shall mean any work of authorship, including\n      the original version of the Work and any modifications or additions\n      to that Work or Derivative Works thereof, that is intentionally\n      submitted to Licensor for inclusion in the Work by the copyright owner\n      or by an individual or Legal Entity authorized to submit on behalf of\n      the copyright owner. For the purposes of this definition, \"submitted\"\n      means any form of electronic, verbal, or written communication sent\n      to the Licensor or its representatives, including but not limited to\n      communication on electronic mailing lists, source code control systems,\n      and issue tracking systems that are managed by, or on behalf of, the\n      Licensor for the purpose of discussing and improving the Work, but\n      excluding communication that is conspicuously marked or otherwise\n      designated in writing by the copyright owner as \"Not a Contribution.\"\n\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\n      on behalf of whom a Contribution has been received by Licensor and\n      subsequently incorporated within the Work.\n\n   2. Grant of Copyright License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      copyright license to reproduce, prepare Derivative Works of,\n      publicly display, publicly perform, sublicense, and distribute the\n      Work and such Derivative Works in Source or Object form.\n\n   3. Grant of Patent License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      (except as stated in this section) patent license to make, have made,\n      use, offer to sell, sell, import, and otherwise transfer the Work,\n      where such license applies only to those patent claims licensable\n      by such Contributor that are necessarily infringed by their\n      Contribution(s) alone or by combination of their Contribution(s)\n      with the Work to which such Contribution(s) was submitted. If You\n      institute patent litigation against any entity (including a\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\n      or a Contribution incorporated within the Work constitutes direct\n      or contributory patent infringement, then any patent licenses\n      granted to You under this License for that Work shall terminate\n      as of the date such litigation is filed.\n\n   4. Redistribution. You may reproduce and distribute copies of the\n      Work or Derivative Works thereof in any medium, with or without\n      modifications, and in Source or Object form, provided that You\n      meet the following conditions:\n\n      (a) You must give any other recipients of the Work or\n          Derivative Works a copy of this License; and\n\n      (b) You must cause any modified files to carry prominent notices\n          stating that You changed the files; and\n\n      (c) You must retain, in the Source form of any Derivative Works\n          that You distribute, all copyright, patent, trademark, and\n          attribution notices from the Source form of the Work,\n          excluding those notices that do not pertain to any part of\n          the Derivative Works; and\n\n      (d) If the Work includes a \"NOTICE\" text file as part of its\n          distribution, then any Derivative Works that You distribute must\n          include a readable copy of the attribution notices contained\n          within such NOTICE file, excluding those notices that do not\n          pertain to any part of the Derivative Works, in at least one\n          of the following places: within a NOTICE text file distributed\n          as part of the Derivative Works; within the Source form or\n          documentation, if provided along with the Derivative Works; or,\n          within a display generated by the Derivative Works, if and\n          wherever such third-party notices normally appear. The contents\n          of the NOTICE file are for informational purposes only and\n          do not modify the License. You may add Your own attribution\n          notices within Derivative Works that You distribute, alongside\n          or as an addendum to the NOTICE text from the Work, provided\n          that such additional attribution notices cannot be construed\n          as modifying the License.\n\n      You may add Your own copyright statement to Your modifications and\n      may provide additional or different license terms and conditions\n      for use, reproduction, or distribution of Your modifications, or\n      for any such Derivative Works as a whole, provided Your use,\n      reproduction, and distribution of the Work otherwise complies with\n      the conditions stated in this License.\n\n   5. Submission of Contributions. Unless You explicitly state otherwise,\n      any Contribution intentionally submitted for inclusion in the Work\n      by You to the Licensor shall be under the terms and conditions of\n      this License, without any additional terms or conditions.\n      Notwithstanding the above, nothing herein shall supersede or modify\n      the terms of any separate license agreement you may have executed\n      with Licensor regarding such Contributions.\n\n   6. Trademarks. This License does not grant permission to use the trade\n      names, trademarks, service marks, or product names of the Licensor,\n      except as required for reasonable and customary use in describing the\n      origin of the Work and reproducing the content of the NOTICE file.\n\n   7. Disclaimer of Warranty. Unless required by applicable law or\n      agreed to in writing, Licensor provides the Work (and each\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n      implied, including, without limitation, any warranties or conditions\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n      PARTICULAR PURPOSE. You are solely responsible for determining the\n      appropriateness of using or redistributing the Work and assume any\n      risks associated with Your exercise of permissions under this License.\n\n   8. Limitation of Liability. In no event and under no legal theory,\n      whether in tort (including negligence), contract, or otherwise,\n      unless required by applicable law (such as deliberate and grossly\n      negligent acts) or agreed to in writing, shall any Contributor be\n      liable to You for damages, including any direct, indirect, special,\n      incidental, or consequential damages of any character arising as a\n      result of this License or out of the use or inability to use the\n      Work (including but not limited to damages for loss of goodwill,\n      work stoppage, computer failure or malfunction, or any and all\n      other commercial damages or losses), even if such Contributor\n      has been advised of the possibility of such damages.\n\n   9. Accepting Warranty or Additional Liability. While redistributing\n      the Work or Derivative Works thereof, You may choose to offer,\n      and charge a fee for, acceptance of support, warranty, indemnity,\n      or other liability obligations and/or rights consistent with this\n      License. However, in accepting such obligations, You may act only\n      on Your own behalf and on Your sole responsibility, not on behalf\n      of any other Contributor, and only if You agree to indemnify,\n      defend, and hold each Contributor harmless for any liability\n      incurred by, or claims asserted against, such Contributor by reason\n      of your accepting any such warranty or additional liability.\n\n   END OF TERMS AND CONDITIONS\n\n   APPENDIX: How to apply the Apache License to your work.\n\n      To apply the Apache License to your work, attach the following\n      boilerplate notice, with the fields enclosed by brackets \"[]\"\n      replaced with your own identifying information. (Don't include\n      the brackets!)  The text should be enclosed in the appropriate\n      comment syntax for the file format. We also recommend that a\n      file or class name and description of purpose be included on the\n      same \"printed page\" as the copyright notice for easier\n      identification within third-party archives.\n\n   Copyright 2025 GitMCP Authors (Ido Salomon and Liad Yosef)\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n"
  },
  {
    "path": "README.md",
    "content": "# GitMCP\n\n<p align=\"center\">\n  <img width=\"884\" alt=\"image\" src=\"https://github.com/user-attachments/assets/2bf3e3df-556c-49c6-ab7b-36c279d53bba\" />\n</p>\n\n<p align=\"center\">\n  <a href=\"#-what-is-gitmcp\">What is GitMCP</a> •\n  <a href=\"#-features\">Features</a> •\n  <a href=\"#-getting-started\">Getting Started</a> •\n  <a href=\"#-how-it-works\">How It Works</a> •\n  <a href=\"#-badge\">Badge</a> •\n  <a href=\"#-examples\">Examples</a> •\n  <a href=\"#-faq\">FAQ</a> •\n  <a href=\"#-privacy\">Privacy</a> •\n  <a href=\"#-contributing\">Contributing</a> •\n  <a href=\"#-license\">License</a>\n</p>\n<div align=\"center\">\n\n[![GitMCP](https://img.shields.io/endpoint?url=https://gitmcp.io/badge/idosal/git-mcp)](https://gitmcp.io/idosal/git-mcp)\n[![Twitter Follow](https://img.shields.io/twitter/follow/idosal1?style=social)](https://twitter.com/idosal1)\n[![Twitter Follow](https://img.shields.io/twitter/follow/liadyosef?style=social)](https://twitter.com/liadyosef)\n</div>\n\n<div align=\"center\">\n  <a href=\"https://www.pulsemcp.com/servers/idosal-git-mcp\"><img src=\"https://www.pulsemcp.com/badge/top-pick/idosal-git-mcp\" width=\"400\" alt=\"Pulse MCP Badge\"></a>\n</div>\n\n## 🤔 What is GitMCP?\n**Stop vibe-hallucinating and start vibe-coding!**\n\n[GitMCP](https://gitmcp.io) is a free, open-source, remote [Model Context Protocol (MCP)](https://docs.anthropic.com/en/docs/agents-and-tools/mcp) server that transforms **any** GitHub project (repositories or GitHub pages) into a documentation hub. It enables AI tools like Cursor to access up-to-date documentation and code, even if the LLM has never encountered them, thereby eliminating code hallucinations seamlessly.\n\nGitMCP supports **two flavors** -\n\n*   **Specific Repository (`gitmcp.io/{owner}/{repo}` or `{owner}.gitmcp.io/{repo}`):** Use these when you primarily work with a select number of libraries. This ensures your AI assistant always targets the correct project, enhancing security and relevance by preventing access to unintended repositories.\n*   **Generic Server (`gitmcp.io/docs`):** Use this for maximum flexibility when you need to switch between different repositories frequently. The AI assistant will prompt you (or decide based on context) which repository to access for each request. Be mindful that this relies on correctly identifying the target repository each time.\n\n**With GitMCP:**\n\n*   AI assistants access the *latest* documentation and code directly from the source.\n*   Get accurate API usage and reliable code examples.\n*   Work effectively even with niche, new, or rapidly changing libraries.\n*   Significantly reduced hallucinations and improved code correctness.\n\nFor example, this side-by-side comparison shows the result for the same one-shot prompt in Cursor when creating a [three.js](https://github.com/mrdoob/three.js) scene -\n\nhttps://github.com/user-attachments/assets/fbf1b4a7-f9f0-4c0e-831c-4d64faae2c45\n\n## ✨ Features\n\n- 😎 **Latest Documentation on ANY GitHub Project**: Grant your AI assistant seamless access to the GitHub project's documentation and code. The built-in smart search capabilities help find exactly what the AI needs without using too many tokens!\n- 🧠 **No More Hallucinations**: With GitMCP, your AI assistant can provide accurate and relevant answers to your questions.\n- ☁️ **Zero Setup**: GitMCP runs in the cloud. Simply add the chosen GitMCP URL as an MCP server in your IDE — no downloads, installations, signups, or changes are required.\n- 💬 **Embedded Chat**: Start quickly by chatting directly with the repository's documentation through our in-browser chat!\n- ✅ **Open, Free, and Private**: GitMCP is open-source and completely free to use. It doesn't collect personal information or store queries. You can even self-host it!\n\n<video src=\"https://github.com/user-attachments/assets/2c3afaf9-6c08-436e-9efd-db8710554430\"></video>\n\n## 🚀 Getting Started\n\nUsing GitMCP is easy! Simply follow these steps:\n\n### Step 1: Choose the type of server you want\n\nChoose one of these URL formats depending on what you want to connect to:\n\n- For GitHub repositories: `gitmcp.io/{owner}/{repo}`\n- For GitHub Pages sites: `{owner}.gitmcp.io/{repo}`\n- For a generic tool that supports any repository (dynamic): `gitmcp.io/docs`\n\nReplace `{owner}` with the GitHub username or organization name, and `{repo}` with the repository name.\n\nFor your convenience, you can also use the conversion tool on the landing page to format the GitHub URL into an MCP URL!\n\n### Step 2: Connect your AI assistant\n\nSelect your AI assistant from the options below and follow the configuration instructions:\n\n#### Connecting Cursor\n\nUpdate your Cursor configuration file at `~/.cursor/mcp.json`:\n   ```json\n   {\n     \"mcpServers\": {\n       \"gitmcp\": {\n         \"url\": \"https://gitmcp.io/{owner}/{repo}\"\n       }\n     }\n   }\n   ```\n\n#### Connecting Claude Desktop\n\n1. In Claude Desktop, go to Settings > Developer > Edit Config\n2. Replace the configuration with:\n   ```json\n   {\n     \"mcpServers\": {\n       \"gitmcp\": {\n         \"command\": \"npx\",\n         \"args\": [\n           \"mcp-remote\",\n           \"https://gitmcp.io/{owner}/{repo}\"\n         ]\n       }\n     }\n   }\n   ```\n\n#### Connecting Windsurf\n\nUpdate your Windsurf configuration file at `~/.codeium/windsurf/mcp_config.json`:\n   ```json\n   {\n     \"mcpServers\": {\n       \"gitmcp\": {\n         \"serverUrl\": \"https://gitmcp.io/{owner}/{repo}\"\n       }\n     }\n   }\n   ```\n\n#### Connecting VSCode\n\nUpdate your VSCode configuration file at `.vscode/mcp.json`:\n   ```json\n   {\n     \"servers\": {\n       \"gitmcp\": {\n         \"type\": \"sse\",\n         \"url\": \"https://gitmcp.io/{owner}/{repo}\"\n       }\n     }\n   }\n   ```\n\n#### Connecting Cline\n\nUpdate your Cline configuration file at `~/Library/Application Support/Code/User/globalStorage/saoudrizwan.claude-dev/settings/cline_mcp_settings.json`:\n   ```json\n   {\n     \"mcpServers\": {\n       \"gitmcp\": {\n         \"url\": \"https://gitmcp.io/{owner}/{repo}\",\n         \"disabled\": false,\n         \"autoApprove\": []\n       }\n     }\n   }\n   ```\n\n#### Connecting Highlight AI\n\n1. Open Highlight AI and click the plugins icon (@ symbol) in the sidebar\n2. Click **Installed Plugins** at the top of the sidebar\n3. Select **Custom Plugin**\n4. Click **Add a plugin using a custom SSE URL**\n\nPlugin name: `gitmcp`\nSSE URL: `https://gitmcp.io/{owner}/{repo}`\n\nFor more details on adding custom MCP servers to HighlightAI, refer to [the documentation](https://docs.highlightai.com/plugins/custom).\n\n#### Connecting Augment Code\n\n1. Open Augment Code settings\n2. Navigate to the MCP section\n3. Add a new MCP server with the following details:\n\nName the MCP server: `git-mcp Docs`\n\nUse this command:\n```bash\nnpx mcp-remote https://gitmcp.io/{owner}/{repo}\n```\n\nOr use the following configuration:\n```json\n{\n  \"mcpServers\": {\n    \"git-mcp Docs\": {\n      \"command\": \"npx\",\n      \"args\": [\n        \"mcp-remote\",\n        \"https://gitmcp.io/{owner}/{repo}\"\n      ]\n    }\n  }\n}\n```\n\n#### Connecting Msty AI\n1. Open Msty Studio\n2. Go to Tools > Import Tools from JSON Clipboard\n3. Paste the following configuration:\n\n```json\n{\n  \"mcpServers\": {\n    \"git-mcp Docs\": {\n      \"command\": \"npx\",\n      \"args\": [\n        \"mcp-remote\",\n        \"https://gitmcp.io/{owner}/{repo}\"\n      ]\n    }\n  }\n}\n```\n\nFor more details on configuring MCP servers in Augment Code, visit [the Augment Code documentation](https://docs.augmentcode.com/setup-augment/mcp).\n\n> **Note:** Remember to replace `{owner}` and `{repo}` with the actual GitHub username/organization and repository name. You can also use the dynamic endpoint `https://gitmcp.io/docs` to allow your AI to access any repository on demand.\n\n## ⚙ How It Works\n\nGitMCP connects your AI assistant to GitHub repositories using the Model Context Protocol (MCP), a standard that lets AI tools request additional information from external sources.\n\nWhat happens when you use GitMCP:\n\n1. **You provide the GitMCP URL** to your AI assistant (e.g., `gitmcp.io/microsoft/typescript`). GitMCP exposes tools like documentation fetching, smart search, code search, etc.\n2. **Prompt the AI assistant** on documentation/code-related questions.\n3. **Your AI sends requests** to GitMCP to use its tools (with your approval).\n4. **GitMCP executes the AI's request** and returns the requested data.\n5. **Your AI receives the information** and generates a more accurate, grounded response without hallucinations.\n\n### Supported Documentation\n\nGitMCP currently supports the following documents (in order of priority):\n1. [llms.txt](https://llmstxt.org)\n2. AI-optimized version of the project's documentation\n3. `README.md`/root\n\n## 💡 Examples\n\nHere are some examples of how to use GitMCP with different AI assistants and repositories:\n\n### Example 1: Using Windsurf with a specific repository\n\nFor the GitHub repository `https://github.com/microsoft/playwright-mcp`, add `https://gitmcp.io/microsoft/playwright-mcp` as an MCP server to Windsurf.\n\n**Prompt to Claude:**\n> \"How do I use the Playwright MCP\"\n\nWindsurf will pull the relevant documentation from GitMCP to implement the memory feature correctly.\n\n### Example 2: Using Cursor with a GitHub Pages site\n\nFor the GitHub Pages site `langchain-ai.github.io/langgraph`, add `https://langchain-ai.gitmcp.io/langgraph` as an MCP server to Cursor.\n\n**Prompt to Cursor:**\n> \"Add memory to my LangGraph agent\"\n\nCursor will pull the relevant documentation and code from GitMCP to correctly implement the memory feature.\n\n### Example 3: Using Claude Desktop with the dynamic endpoint\n\nYou don't have to pick specific repositories. The generic `gitmcp.io/docs` endpoint allows AI to pick the GitHub project on the fly!\n\n**Prompt to any AI assistant:**\n> \"I want to learn about the OpenAI Whisper speech recognition model. Explain how it works.\"\n\nClaude will pull the data from GitMCP and answer the question.\n\n## 🛠️ Tools\n\nGitMCP provides AI assistants with several valuable tools to help them access, understand, and query GitHub repositories.\n\n### `fetch_<repo-name>_documentation`\n\nThis tool gets the primary documentation from a GitHub repository. It works by retrieving relevant documentation (e.g., `llms.txt`). This gives the AI a good overview of what the project is about\n\n**When it's useful:** For general questions about a project's purpose, features, or how to get started\n\n### `search_<repo-name>_documentation`\n\nThis tool lets the AI search through a repository's documentation by providing a specific search query. Instead of loading all the documentation (which could be very large), it uses intelligent search to find just the relevant parts.\n\n**When it's useful:** For specific questions about particular features, functions, or concepts within a project\n\n### `fetch_url_content`\n\nThis tool helps the AI get information from links mentioned in the documentation. It retrieves the content from those links and converts it to a format the AI can easily read.\n\n**When it's useful:** When documentation references external information that would help answer your question\n\n### `search_<repo-name>_code`\n\nThis tool searches through the actual code in the repository using GitHub's code search. It helps AI find specific code examples or implementation details.\n\n**When it's useful:** When you want examples of how something is implemented or need technical details not covered in documentation\n\n> **Note:** When using the dynamic endpoint (`gitmcp.io/docs`), these tools are named slightly differently (`fetch_generic_documentation`, `search_generic_code`, and `search_generic_documentation`) and need additional information about which repository to access.\n\n## 📊 Badge\n\nGitMCP has a badge for your repository's README. It allows users to quickly access your documentation through their IDE or browser (using the embedded chat). It also showcases how many times your documentation has been accessed through GitMCP.\n\nExample (`idosal/git-mcp`): [![GitMCP](https://img.shields.io/endpoint?url=https://gitmcp.io/badge/idosal/git-mcp)](https://gitmcp.io/idosal/git-mcp)\n\n### Adding the Badge to Your Repository\n\nAdd the following to your `README.md`:\n\n```markdown\n[![GitMCP](https://img.shields.io/endpoint?url=https://gitmcp.io/badge/OWNER/REPO)](https://gitmcp.io/OWNER/REPO)\n```\n\nReplace `OWNER` with your GitHub username or organization, and `REPO` with your repository name.\n\n### How We Count Views\n\nIncrement for each tool call on the specific repository.\n\n### Customizing the Badge\n\nYou can customize the badge's appearance with parameters:\n\n| Parameter | Description | Default | Example |\n|-----------|-------------|---------|---------|\n| `color` | Color for the badge value | `aquamarine` | `?color=green` |\n| `label` | Badge label | `GitMCP` | `Documentation`\n\nPlease reach out if you need help!\n\n## ❓ FAQ\n\n### What is the Model Context Protocol?\n\nThe [Model Context Protocol](https://modelcontextprotocol.io/introduction) is a standard that allows AI assistants to request and receive additional context from external sources in a structured manner, enhancing their understanding and performance.\n\n### Does GitMCP work with any AI assistant?\n\nYes, GitMCP is compatible with any AI assistant supporting the Model Context Protocol, including tools like Cursor, VSCode, Claude, etc.\n\n### Is GitMCP compatible with all GitHub projects?\n\nAbsolutely! GitMCP works with any public GitHub repository without requiring any modifications. It prioritizes the `llms.txt` file and falls back to `README.md` or other pages if the former is unavailable. Future updates aim to support additional documentation methods and even generate content dynamically.\n\n### Does GitMCP cost money?\n\nNo, GitMCP is a free service to the community with no associated costs.\n\n## 🔒 Privacy\n\nGitMCP is deeply committed to its users' privacy. The service doesn't have access to or store any personally identifiable information as it doesn't require authentication. In addition, it doesn't store any queries sent by the agents. Moreover, as GitMCP is an open-source project, it can be deployed independently in your environment.\n\nGitMCP only accesses content that is already publicly available and only when queried by a user. GitMCP does not automatically scrape repositories. Before accessing any GitHub Pages site, the code checks for `robots.txt` rules and follows the directives set by site owners, allowing them to opt out. Please note that GitMCP doesn't permanently store data regarding the GitHub projects or their content.\n\n## 👥 Contributing\n\nWe welcome contributions, feedback, and ideas! Please review our [contribution](https://github.com/idosal/git-mcp/blob/main/.github/CONTRIBUTING.md) guidelines.\n\n### Local Development Setup\n\n1. **Clone the repository**\n   ```bash\n   git clone https://github.com/idosal/git-mcp.git\n   cd git-mcp\n   ```\n\n2. **Install dependencies**\n   ```bash\n   pnpm install\n   ```\n\n3. **Run locally for development**\n   ```bash\n   npm run dev\n   # or\n   pnpm dev\n   ```\n\n#### Using MCP Inspector for Testing\n\n1. Install the MCP Inspector tool:\n   ```bash\n   npx @modelcontextprotocol/inspector\n   ```\n\n2. In the inspector interface:\n   - Set Transport Type to `SSE`\n   - Enter your GitMCP URL (e.g., `http://localhost:5173/docs`)\n   - Click \"Connect\"\n\n## 📄 License\n\nThis project is licensed under the [Apache License 2.0](LICENSE).\n\n## Disclaimer\n\nGitMCP is provided \"as is\" without warranty of any kind. While we strive to ensure the reliability and security of our service, we are not responsible for any damages or issues that may arise from its use. GitHub projects accessed through GitMCP are subject to their respective owners' terms and conditions. GitMCP is not affiliated with GitHub or any of the mentioned AI tools.\n\n\n## Star History\n\n[![Star History Chart](https://api.star-history.com/svg?repos=idosal/git-mcp&type=Timeline)](https://www.star-history.com/#idosal/git-mcp&Timeline)\n"
  },
  {
    "path": "SECURITY.md",
    "content": "# Security Policy\n\nGitMCP is committed to maintaining the security and privacy of its users. We welcome vulnerability disclosures, suggestions, and feedback that can improve it.\n\n## Reporting a Vulnerability\n\nPlease report vulnerabilities using this private [form](https://forms.gle/mMoVv69XFyPqDUTX8). All vulnerabilities will be patched as soon as possible.\n"
  },
  {
    "path": "app/app.css",
    "content": "@import \"tailwindcss\";\n\n@theme {\n  --font-sans: \"Inter\", ui-sans-serif, system-ui, sans-serif,\n    \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n}\n\nhtml,\nbody {\n  @apply bg-white dark:bg-gray-950;\n\n  @media (prefers-color-scheme: dark) {\n    color-scheme: dark;\n  }\n}\n"
  },
  {
    "path": "app/chat/ai/providers.server.ts",
    "content": "import { createOpenAI } from \"@ai-sdk/openai\";\nimport { createGroq } from \"@ai-sdk/groq\";\nimport { createAnthropic } from \"@ai-sdk/anthropic\";\nimport { createXai } from \"@ai-sdk/xai\";\n\nimport {\n  customProvider,\n  wrapLanguageModel,\n  extractReasoningMiddleware,\n  type LanguageModel,\n} from \"ai\";\nimport type { modelID, StorageKey } from \"./providers.shared\";\n\nconst middleware = extractReasoningMiddleware({\n  tagName: \"think\",\n});\n\nexport const getModel = (\n  env: CloudflareEnvironment,\n  apiKeys: Partial<Record<StorageKey, string>>,\n) => {\n  // Helper to get API keys from environment variables first, then localStorage\n  const getApiKey = (key: StorageKey): string | undefined => {\n    // Check for environment variables first\n    if (env[key]) {\n      return env[key] || undefined;\n    }\n\n    // Check for API keys in localStorage\n    if (apiKeys[key]) {\n      return apiKeys[key] || undefined;\n    }\n\n    return undefined;\n  };\n\n  // Create provider instances with API keys from env/user/localStorage\n  const openaiClient = createOpenAI({\n    apiKey: getApiKey(\"OPENAI_API_KEY\"),\n  });\n\n  const anthropicClient = createAnthropic({\n    apiKey: getApiKey(\"ANTHROPIC_API_KEY\"),\n  });\n\n  const groqClient = createGroq({\n    apiKey: getApiKey(\"GROQ_API_KEY\"),\n  });\n\n  const xaiClient = createXai({\n    apiKey: getApiKey(\"XAI_API_KEY\"),\n  });\n\n  const languageModels: Record<modelID, LanguageModel> = {\n    \"gpt-4.1-mini\": openaiClient(\"gpt-4.1-mini\"),\n    \"claude-3-7-sonnet\": anthropicClient(\"claude-3-7-sonnet-20250219\"),\n    \"qwen-qwq\": wrapLanguageModel({\n      model: groqClient(\"qwen-qwq-32b\"),\n      middleware,\n    }),\n    \"grok-3-mini\": xaiClient(\"grok-3-mini-latest\"),\n  };\n\n  const model = customProvider({\n    languageModels,\n  });\n\n  return model;\n};\n"
  },
  {
    "path": "app/chat/ai/providers.shared.ts",
    "content": "export interface ModelInfo {\n  provider: string;\n  name: string;\n  description: string;\n  apiVersion: string;\n  capabilities: string[];\n}\n\nexport type StorageKey =\n  | \"OPENAI_API_KEY\"\n  | \"ANTHROPIC_API_KEY\"\n  | \"GROQ_API_KEY\"\n  | \"XAI_API_KEY\";\n\nexport type modelID =\n  | \"gpt-4.1-mini\"\n  | \"claude-3-7-sonnet\"\n  | \"qwen-qwq\"\n  | \"grok-3-mini\";\n\nexport const modelDetails: Record<modelID, ModelInfo> = {\n  \"gpt-4.1-mini\": {\n    provider: \"OpenAI\",\n    name: \"GPT-4.1 Mini\",\n    description:\n      \"Compact version of OpenAI's GPT-4.1 with good balance of capabilities, including vision.\",\n    apiVersion: \"gpt-4.1-mini\",\n    capabilities: [\"Balance\", \"Creative\", \"Vision\"],\n  },\n  \"claude-3-7-sonnet\": {\n    provider: \"Anthropic\",\n    name: \"Claude 3.7 Sonnet\",\n    description:\n      \"Latest version of Anthropic's Claude 3.7 Sonnet with strong reasoning and coding capabilities.\",\n    apiVersion: \"claude-3-7-sonnet-20250219\",\n    capabilities: [\"Reasoning\", \"Efficient\", \"Agentic\"],\n  },\n  \"qwen-qwq\": {\n    provider: \"Groq\",\n    name: \"Qwen QWQ\",\n    description:\n      \"Latest version of Alibaba's Qwen QWQ with strong reasoning and coding capabilities.\",\n    apiVersion: \"qwen-qwq\",\n    capabilities: [\"Reasoning\", \"Efficient\", \"Agentic\"],\n  },\n  \"grok-3-mini\": {\n    provider: \"XAI\",\n    name: \"Grok 3 Mini\",\n    description:\n      \"Latest version of XAI's Grok 3 Mini with strong reasoning and coding capabilities.\",\n    apiVersion: \"grok-3-mini-latest\",\n    capabilities: [\"Reasoning\", \"Efficient\", \"Agentic\"],\n  },\n};\n\nexport const MODELS = Object.keys(modelDetails);\n\nexport const defaultModel: modelID = \"qwen-qwq\";\n"
  },
  {
    "path": "app/chat/components/api-key-manager.tsx",
    "content": "import { useState, useCallback } from \"react\";\nimport {\n  Dialog,\n  DialogContent,\n  DialogDescription,\n  DialogFooter,\n  DialogHeader,\n  DialogTitle,\n} from \"~/chat/components/ui/dialog\";\nimport { Button } from \"~/chat/components/ui/button\";\nimport { Input } from \"~/chat/components/ui/input\";\nimport { Label } from \"~/chat/components/ui/label\";\nimport { toast } from \"sonner\";\nimport { STORAGE_KEYS } from \"~/chat/lib/constants\";\nimport type { StorageKey } from \"../ai/providers.shared\";\nimport { useApiKeys } from \"./api-keys-provider\";\n\n// API key configuration\nexport interface ApiKeyConfig {\n  name: string;\n  key: string;\n  storageKey: StorageKey;\n  label: string;\n  placeholder: string;\n}\n\n// Available API keys configuration\nexport const API_KEYS_CONFIG: readonly ApiKeyConfig[] = [\n  {\n    name: \"OpenAI\",\n    key: \"openai\",\n    storageKey: \"OPENAI_API_KEY\",\n    label: \"OpenAI API Key\",\n    placeholder: \"sk-...\",\n  },\n  {\n    name: \"Anthropic\",\n    key: \"anthropic\",\n    storageKey: \"ANTHROPIC_API_KEY\",\n    label: \"Anthropic API Key\",\n    placeholder: \"sk-ant-...\",\n  },\n  {\n    name: \"Groq\",\n    key: \"groq\",\n    storageKey: \"GROQ_API_KEY\",\n    label: \"Groq API Key\",\n    placeholder: \"gsk_...\",\n  },\n  {\n    name: \"XAI\",\n    key: \"xai\",\n    storageKey: \"XAI_API_KEY\",\n    label: \"XAI API Key\",\n    placeholder: \"xai-...\",\n  },\n] as const;\n\ninterface ApiKeyManagerProps {\n  open: boolean;\n  onOpenChange: (open: boolean) => void;\n}\n\nexport function ApiKeyManager({ open, onOpenChange }: ApiKeyManagerProps) {\n  // State to store API keys\n  const { apiKeys, setApiKeys } = useApiKeys();\n  const [localApiKeys, setLocalApiKeys] =\n    useState<Partial<Record<StorageKey, string>>>(apiKeys);\n\n  // Update API key in state\n  const handleApiKeyChange = useCallback(\n    (storageKey: StorageKey, value: string) => {\n      setLocalApiKeys((prev) => ({\n        ...prev,\n        [storageKey]: value,\n      }));\n    },\n    [],\n  );\n\n  // Save API keys to localStorage\n  const handleSaveApiKeys = useCallback(() => {\n    try {\n      setApiKeys(localApiKeys);\n      localStorage.setItem(STORAGE_KEYS.API_KEYS, JSON.stringify(localApiKeys));\n\n      toast.success(\"API keys saved successfully\");\n      onOpenChange(false);\n    } catch (error) {\n      console.error(\"Error saving API keys:\", error);\n      toast.error(\"Failed to save API keys\");\n    }\n  }, [localApiKeys, setApiKeys, onOpenChange]);\n\n  // Clear all API keys\n  const handleClearApiKeys = useCallback(() => {\n    try {\n      setLocalApiKeys({});\n      setApiKeys({});\n      toast.success(\"All API keys cleared\");\n    } catch (error) {\n      console.error(\"Error clearing API keys:\", error);\n      toast.error(\"Failed to clear API keys\");\n    }\n  }, [setApiKeys, localApiKeys]);\n\n  return (\n    <Dialog open={open} onOpenChange={onOpenChange}>\n      <DialogContent className=\"sm:max-w-[500px]\">\n        <DialogHeader>\n          <DialogTitle>API Key Settings</DialogTitle>\n          <DialogDescription>\n            Enter your own API keys for different AI providers. Keys are stored\n            securely in your browser&apos;s local storage.\n          </DialogDescription>\n        </DialogHeader>\n\n        <div className=\"grid gap-4 py-4\">\n          {API_KEYS_CONFIG.map((config) => (\n            <div key={config.storageKey} className=\"grid gap-2\">\n              <Label htmlFor={config.storageKey}>{config.label}</Label>\n              <Input\n                id={config.storageKey}\n                type=\"password\"\n                value={localApiKeys[config.storageKey] || \"\"}\n                onChange={(e) =>\n                  handleApiKeyChange(config.storageKey, e.target.value)\n                }\n                placeholder={config.placeholder}\n              />\n            </div>\n          ))}\n        </div>\n\n        <DialogFooter className=\"flex justify-between sm:justify-between\">\n          <Button variant=\"destructive\" onClick={handleClearApiKeys}>\n            Clear All Keys\n          </Button>\n          <div className=\"flex gap-2\">\n            <Button variant=\"outline\" onClick={() => onOpenChange(false)}>\n              Cancel\n            </Button>\n            <Button onClick={handleSaveApiKeys}>Save Keys</Button>\n          </div>\n        </DialogFooter>\n      </DialogContent>\n    </Dialog>\n  );\n}\n"
  },
  {
    "path": "app/chat/components/api-keys-provider.tsx",
    "content": "import { createContext, useContext } from \"react\";\nimport type { StorageKey } from \"../ai/providers.shared\";\nimport { STORAGE_KEYS } from \"../lib/constants\";\nimport { useLocalStorage } from \"../lib/hooks/use-local-storage\";\n\nconst ApiKeysContext = createContext<{\n  apiKeys: Partial<Record<StorageKey, string>>;\n  setApiKeys: (apiKeys: Partial<Record<StorageKey, string>>) => void;\n}>({\n  apiKeys: {},\n  setApiKeys: () => {},\n});\n\nexport function ApiKeysProvider({ children }: { children: React.ReactNode }) {\n  const [apiKeys, setApiKeys] = useLocalStorage<\n    Partial<Record<StorageKey, string>>\n  >(STORAGE_KEYS.API_KEYS, {});\n\n  return (\n    <ApiKeysContext.Provider value={{ apiKeys, setApiKeys }}>\n      {children}\n    </ApiKeysContext.Provider>\n  );\n}\n\nexport function useApiKeys() {\n  return useContext(ApiKeysContext);\n}\n"
  },
  {
    "path": "app/chat/components/chat-sidebar.tsx",
    "content": "\"use client\";\n\nimport { useState } from \"react\";\nimport {\n  ServerIcon,\n  Settings,\n  Sparkles,\n  ChevronsUpDown,\n  Github,\n  Key,\n} from \"lucide-react\";\nimport {\n  Sidebar,\n  SidebarContent,\n  SidebarFooter,\n  SidebarGroup,\n  SidebarGroupContent,\n  SidebarHeader,\n  SidebarMenu,\n  SidebarMenuButton,\n  SidebarMenuItem,\n  SidebarMenuBadge,\n  useSidebar,\n} from \"~/chat/components/ui/sidebar\";\nimport { Badge } from \"~/chat/components/ui/badge\";\nimport { MCPServerManager } from \"./mcp-server-manager\";\nimport { ApiKeyManager } from \"./api-key-manager\";\nimport { ThemeToggle } from \"./theme-toggle\";\nimport { cn } from \"~/chat/lib/utils\";\n\nimport { useMCP } from \"~/chat/lib/context/mcp-context\";\n\nexport function ChatSidebar() {\n  const [mcpSettingsOpen, setMcpSettingsOpen] = useState(false);\n  const [apiKeySettingsOpen, setApiKeySettingsOpen] = useState(false);\n  const { state } = useSidebar();\n  const isCollapsed = state === \"collapsed\";\n\n  // Get MCP server data from context\n  const {\n    mcpServers,\n    setMcpServers,\n    selectedMcpServers,\n    setSelectedMcpServers,\n  } = useMCP();\n\n  // Get active MCP servers status\n  const activeServersCount = selectedMcpServers.length;\n\n  return (\n    <Sidebar\n      className=\"shadow-sm bg-background/80 dark:bg-background/40 ocean:bg-background/40 backdrop-blur-md\"\n      collapsible=\"icon\"\n    >\n      <SidebarHeader className=\"p-4 border-b border-border/40\">\n        <div className=\"flex items-center justify-start\">\n          <div\n            className={`flex items-center gap-2 ${\n              isCollapsed ? \"justify-center w-full\" : \"\"\n            }`}\n          >\n            <div\n              className={`relative rounded-full bg-primary/70 flex items-center justify-center ${\n                isCollapsed ? \"size-5 p-3\" : \"size-6\"\n              }`}\n            >\n              <img\n                src=\"/img/icon_cropped.png\"\n                alt=\"GitMCP Logo\"\n                width={24}\n                height={24}\n                className=\"absolute transform scale-75\"\n              />\n            </div>\n            {!isCollapsed && (\n              <div className=\"font-semibold text-lg text-foreground/90\">\n                GitMCP Chat\n              </div>\n            )}\n          </div>\n        </div>\n      </SidebarHeader>\n\n      <SidebarContent className=\"flex flex-col h-[calc(100vh-8rem)]\">\n        <SidebarGroup className=\"flex-shrink-0 pl-0 h-full\">\n          <SidebarGroupContent className=\"h-full flex flex-col\">\n            <SidebarMenu className=\"h-full flex flex-col\">\n              <SidebarMenuItem>\n                <SidebarMenuButton\n                  onClick={() => setMcpSettingsOpen(true)}\n                  className={cn(\n                    \"w-full flex items-center gap-2 transition-all\",\n                    \"hover:bg-secondary/50 active:bg-secondary/70 cursor-pointer\",\n                  )}\n                  tooltip={isCollapsed ? \"GitMCP Servers\" : undefined}\n                >\n                  <ServerIcon\n                    className={cn(\n                      \"h-4 w-4 flex-shrink-0\",\n                      activeServersCount > 0\n                        ? \"text-primary\"\n                        : \"text-muted-foreground\",\n                    )}\n                  />\n                  {!isCollapsed && (\n                    <span className=\"flex-grow text-sm text-foreground/80\">\n                      GitMCP Servers\n                    </span>\n                  )}\n                  {activeServersCount > 0 && !isCollapsed ? (\n                    <Badge\n                      variant=\"secondary\"\n                      className=\"ml-auto text-[10px] px-1.5 py-0 h-5 bg-secondary/80\"\n                    >\n                      {activeServersCount}\n                    </Badge>\n                  ) : activeServersCount > 0 && isCollapsed ? (\n                    <SidebarMenuBadge className=\"bg-secondary/80 text-secondary-foreground\">\n                      {activeServersCount}\n                    </SidebarMenuBadge>\n                  ) : null}\n                </SidebarMenuButton>\n              </SidebarMenuItem>\n              <div className=\"border-b border-border/40 w-full\" />\n              <SidebarMenuItem>\n                <SidebarMenuButton\n                  onClick={() => setApiKeySettingsOpen(true)}\n                  className=\"w-full flex items-center gap-2 transition-all hover:bg-secondary/50 active:bg-secondary/70 cursor-pointer\"\n                >\n                  <Key className=\"h-4 w-4 flex-shrink-0 text-muted-foreground\" />\n                  <span className=\"flex-grow text-sm text-foreground/80\">\n                    API Keys\n                  </span>\n                </SidebarMenuButton>\n              </SidebarMenuItem>\n              <SidebarMenuItem className=\"mt-auto\">\n                <SidebarMenuButton\n                  onClick={() =>\n                    window.open(\"https://git.new/gitmcp\", \"_blank\")\n                  }\n                  className=\"w-full flex items-center gap-2 transition-all hover:bg-secondary/50 active:bg-secondary/70 cursor-pointer\"\n                >\n                  <Github className=\"h-4 w-4 flex-shrink-0 text-muted-foreground\" />\n                  <span className=\"flex-grow text-sm text-foreground/80\">\n                    GitHub\n                  </span>\n                </SidebarMenuButton>\n              </SidebarMenuItem>\n              <SidebarMenuItem>\n                <SidebarMenuButton\n                  asComponent=\"div\"\n                  className=\"w-full p-2 flex items-center justify-between gap-2 transition-all hover:bg-secondary/50 active:bg-secondary/70 cursor-default\"\n                >\n                  <div className=\"flex items-center gap-2\">\n                    <Sparkles className=\"h-4 w-4 flex-shrink-0 text-muted-foreground\" />\n                    <span className=\"text-sm text-foreground/80\">Theme</span>\n                  </div>\n                  <ThemeToggle className=\"h-6 w-6\" />\n                </SidebarMenuButton>\n              </SidebarMenuItem>\n            </SidebarMenu>\n          </SidebarGroupContent>\n        </SidebarGroup>\n      </SidebarContent>\n      <SidebarFooter className=\"p-4 border-t border-border/40 mt-auto\">\n        <div className=\"flex flex-col gap-4 items-center\">\n          {!isCollapsed && (\n            <p className=\"text-xs text-muted-foreground\">\n              Built with{\" \"}\n              <a\n                target=\"_blank\"\n                rel=\"noopener noreferrer\"\n                href=\"https://git.new/s-mcp\"\n                className=\"text-primary hover:text-primary/80\"\n              >\n                Scira Chat\n              </a>\n            </p>\n          )}\n        </div>\n        <MCPServerManager\n          servers={mcpServers}\n          onServersChange={setMcpServers}\n          selectedServers={selectedMcpServers}\n          onSelectedServersChange={setSelectedMcpServers}\n          open={mcpSettingsOpen}\n          onOpenChange={setMcpSettingsOpen}\n        />\n\n        <ApiKeyManager\n          open={apiKeySettingsOpen}\n          onOpenChange={setApiKeySettingsOpen}\n        />\n      </SidebarFooter>\n    </Sidebar>\n  );\n}\n"
  },
  {
    "path": "app/chat/components/chat.tsx",
    "content": "\"use client\";\n\nimport { defaultModel, type modelID } from \"~/chat/ai/providers.shared\";\nimport { useChat } from \"@ai-sdk/react\";\nimport { Textarea } from \"./textarea\";\nimport { ProjectOverview } from \"./project-overview\";\nimport { Messages } from \"./messages\";\nimport { toast } from \"sonner\";\nimport { useLocalStorage } from \"~/chat/lib/hooks/use-local-storage\";\nimport { useMCP } from \"~/chat/lib/context/mcp-context\";\nimport { useCallback } from \"react\";\nimport { useApiKeys } from \"./api-keys-provider\";\n\nconst CHAT_API_URL = \"https://chat-api-worker.idosalomon.workers.dev/api/chat\";\n\nexport default function Chat() {\n  const [selectedModel, setSelectedModel] = useLocalStorage<modelID>(\n    \"selectedModel\",\n    defaultModel,\n  );\n\n  const { apiKeys } = useApiKeys();\n\n  // Get MCP server data from context\n  const { mcpServersForApi } = useMCP();\n\n  const { messages, input, handleInputChange, handleSubmit, status, stop } =\n    useChat({\n      api: CHAT_API_URL,\n      maxSteps: 20,\n      body: {\n        selectedModel,\n        mcpServers: mcpServersForApi,\n        apiKeys,\n      },\n      experimental_throttle: 500,\n      onError: (error) => {\n        toast.error(\n          error.message.length > 0\n            ? error.message\n            : \"An error occurred, please try again later.\",\n          { position: \"top-center\", richColors: true },\n        );\n      },\n    });\n\n  // Custom submit handler\n  const handleFormSubmit = useCallback(\n    (e: React.FormEvent<HTMLFormElement>) => {\n      e.preventDefault();\n      handleSubmit(e);\n    },\n    [input, handleSubmit],\n  );\n\n  const isLoading = status === \"streaming\" || status === \"submitted\";\n\n  return (\n    <div className=\"h-dvh flex flex-col justify-center w-full max-w-3xl mx-auto px-4 sm:px-6 md:py-4\">\n      {messages.length === 0 ? (\n        <div className=\"max-w-xl mx-auto w-full\">\n          <ProjectOverview />\n          <form onSubmit={handleFormSubmit} className=\"mt-4 w-full mx-auto\">\n            <Textarea\n              selectedModel={selectedModel}\n              setSelectedModel={setSelectedModel}\n              handleInputChange={handleInputChange}\n              input={input}\n              isLoading={isLoading}\n              status={status}\n              stop={stop}\n            />\n          </form>\n        </div>\n      ) : (\n        <>\n          <div className=\"flex-1 overflow-y-auto min-h-0 pb-2\">\n            <Messages\n              messages={messages}\n              isLoading={isLoading}\n              status={status}\n            />\n          </div>\n          <form\n            onSubmit={handleFormSubmit}\n            className=\"mt-2 w-full mx-auto mb-4 sm:mb-auto\"\n          >\n            <Textarea\n              selectedModel={selectedModel}\n              setSelectedModel={setSelectedModel}\n              handleInputChange={handleInputChange}\n              input={input}\n              isLoading={isLoading}\n              status={status}\n              stop={stop}\n            />\n          </form>\n        </>\n      )}\n    </div>\n  );\n}\n"
  },
  {
    "path": "app/chat/components/copy-button.tsx",
    "content": "import { CheckIcon, CopyIcon } from \"lucide-react\";\nimport { cn } from \"~/chat/lib/utils\";\nimport { useCopy } from \"~/chat/lib/hooks/use-copy\";\nimport { Button } from \"./ui/button\";\n\ninterface CopyButtonProps {\n  text: string;\n  className?: string;\n}\n\nexport function CopyButton({ text, className }: CopyButtonProps) {\n  const { copied, copy } = useCopy();\n\n  return (\n    <Button\n      variant=\"ghost\"\n      size=\"sm\"\n      className={cn(\n        \"transition-opacity opacity-0 group-hover/message:opacity-100 gap-1.5\",\n        className,\n      )}\n      onClick={() => copy(text)}\n      title=\"Copy to clipboard\"\n    >\n      {copied ? (\n        <>\n          <CheckIcon className=\"h-4 w-4\" />\n          <span className=\"text-xs\">Copied!</span>\n        </>\n      ) : (\n        <>\n          <CopyIcon className=\"h-4 w-4\" />\n          <span className=\"text-xs\">Copy</span>\n        </>\n      )}\n    </Button>\n  );\n}\n"
  },
  {
    "path": "app/chat/components/icons.tsx",
    "content": "import type { SVGProps } from \"react\";\n\nexport const VercelIcon = ({ size = 17 }) => {\n  return (\n    <svg\n      height={size}\n      strokeLinejoin=\"round\"\n      viewBox=\"0 0 16 16\"\n      width={size}\n      style={{ color: \"currentcolor\" }}\n    >\n      <title>Vercel Icon</title>\n      <path\n        fillRule=\"evenodd\"\n        clipRule=\"evenodd\"\n        d=\"M8 1L16 15H0L8 1Z\"\n        fill=\"currentColor\"\n      />\n    </svg>\n  );\n};\n\nexport const SpinnerIcon = ({ size = 16 }: { size?: number }) => (\n  <svg\n    height={size}\n    strokeLinejoin=\"round\"\n    viewBox=\"0 0 16 16\"\n    width={size}\n    style={{ color: \"currentcolor\" }}\n  >\n    <title>Spinner Icon</title>\n    <g clipPath=\"url(#clip0_2393_1490)\">\n      <path d=\"M8 0V4\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n      <path\n        opacity=\"0.5\"\n        d=\"M8 16V12\"\n        stroke=\"currentColor\"\n        strokeWidth=\"1.5\"\n      />\n      <path\n        opacity=\"0.9\"\n        d=\"M3.29773 1.52783L5.64887 4.7639\"\n        stroke=\"currentColor\"\n        strokeWidth=\"1.5\"\n      />\n      <path\n        opacity=\"0.1\"\n        d=\"M12.7023 1.52783L10.3511 4.7639\"\n        stroke=\"currentColor\"\n        strokeWidth=\"1.5\"\n      />\n      <path\n        opacity=\"0.4\"\n        d=\"M12.7023 14.472L10.3511 11.236\"\n        stroke=\"currentColor\"\n        strokeWidth=\"1.5\"\n      />\n      <path\n        opacity=\"0.6\"\n        d=\"M3.29773 14.472L5.64887 11.236\"\n        stroke=\"currentColor\"\n        strokeWidth=\"1.5\"\n      />\n      <path\n        opacity=\"0.2\"\n        d=\"M15.6085 5.52783L11.8043 6.7639\"\n        stroke=\"currentColor\"\n        strokeWidth=\"1.5\"\n      />\n      <path\n        opacity=\"0.7\"\n        d=\"M0.391602 10.472L4.19583 9.23598\"\n        stroke=\"currentColor\"\n        strokeWidth=\"1.5\"\n      />\n      <path\n        opacity=\"0.3\"\n        d=\"M15.6085 10.4722L11.8043 9.2361\"\n        stroke=\"currentColor\"\n        strokeWidth=\"1.5\"\n      />\n      <path\n        opacity=\"0.8\"\n        d=\"M0.391602 5.52783L4.19583 6.7639\"\n        stroke=\"currentColor\"\n        strokeWidth=\"1.5\"\n      />\n    </g>\n    <defs>\n      <clipPath id=\"clip0_2393_1490\">\n        <rect width=\"16\" height=\"16\" fill=\"white\" />\n      </clipPath>\n    </defs>\n  </svg>\n);\n\nexport const Github = (props: SVGProps<SVGSVGElement>) => (\n  <svg\n    viewBox=\"0 0 256 250\"\n    width=\"1em\"\n    height=\"1em\"\n    fill=\"currentColor\"\n    xmlns=\"http://www.w3.org/2000/svg\"\n    preserveAspectRatio=\"xMidYMid\"\n    {...props}\n  >\n    <title>GitHub Icon</title>\n    <path d=\"M128.001 0C57.317 0 0 57.307 0 128.001c0 56.554 36.676 104.535 87.535 121.46 6.397 1.185 8.746-2.777 8.746-6.158 0-3.052-.12-13.135-.174-23.83-35.61 7.742-43.124-15.103-43.124-15.103-5.823-14.795-14.213-18.73-14.213-18.73-11.613-7.944.876-7.78.876-7.78 12.853.902 19.621 13.19 19.621 13.19 11.417 19.568 29.945 13.911 37.249 10.64 1.149-8.272 4.466-13.92 8.127-17.116-28.431-3.236-58.318-14.212-58.318-63.258 0-13.975 5-25.394 13.188-34.358-1.329-3.224-5.71-16.242 1.24-33.874 0 0 10.749-3.44 35.21 13.121 10.21-2.836 21.16-4.258 32.038-4.307 10.878.049 21.837 1.47 32.066 4.307 24.431-16.56 35.165-13.12 35.165-13.12 6.967 17.63 2.584 30.65 1.255 33.873 8.207 8.964 13.173 20.383 13.173 34.358 0 49.163-29.944 59.988-58.447 63.157 4.591 3.972 8.682 11.762 8.682 23.704 0 17.126-.148 30.91-.148 35.126 0 3.407 2.304 7.398 8.792 6.14C219.37 232.5 256 184.537 256 128.002 256 57.307 198.691 0 128.001 0Zm-80.06 182.34c-.282.636-1.283.827-2.194.39-.929-.417-1.45-1.284-1.15-1.922.276-.655 1.279-.838 2.205-.399.93.418 1.46 1.293 1.139 1.931Zm6.296 5.618c-.61.566-1.804.303-2.614-.591-.837-.892-.994-2.086-.375-2.66.63-.566 1.787-.301 2.626.591.838.903 1 2.088.363 2.66Zm4.32 7.188c-.785.545-2.067.034-2.86-1.104-.784-1.138-.784-2.503.017-3.05.795-.547 2.058-.055 2.861 1.075.782 1.157.782 2.522-.019 3.08Zm7.304 8.325c-.701.774-2.196.566-3.29-.49-1.119-1.032-1.43-2.496-.726-3.27.71-.776 2.213-.558 3.315.49 1.11 1.03 1.45 2.505.701 3.27Zm9.442 2.81c-.31 1.003-1.75 1.459-3.199 1.033-1.448-.439-2.395-1.613-2.103-2.626.301-1.01 1.747-1.484 3.207-1.028 1.446.436 2.396 1.602 2.095 2.622Zm10.744 1.193c.036 1.055-1.193 1.93-2.715 1.95-1.53.034-2.769-.82-2.786-1.86 0-1.065 1.202-1.932 2.733-1.958 1.522-.03 2.768.818 2.768 1.868Zm10.555-.405c.182 1.03-.875 2.088-2.387 2.37-1.485.271-2.861-.365-3.05-1.386-.184-1.056.893-2.114 2.376-2.387 1.514-.263 2.868.356 3.061 1.403Z\" />\n  </svg>\n);\n\nexport const XAiIcon = ({ size = 16 }) => {\n  return (\n    <svg\n      xmlns=\"http://www.w3.org/2000/svg\"\n      height={size}\n      version=\"1.1\"\n      viewBox=\"0 0 438.7 481.4\"\n    >\n      <title>xAI Icon</title>\n      <path d=\"M355.5,155.1l8.3,326.4h66.6l8.3-445.2-83.2,118.8ZM438.7,0h-101.6l-159.4,227.6,50.8,72.5L438.7,0ZM0,481.4h101.6l50.8-72.5-50.8-72.5L0,481.4ZM0,155.1l228.5,326.4h101.6L101.6,155.1H0Z\" />\n    </svg>\n  );\n};\n"
  },
  {
    "path": "app/chat/components/input.tsx",
    "content": "import { ArrowUp } from \"lucide-react\";\nimport { Input as ShadcnInput } from \"./ui/input\";\n\ninterface InputProps {\n  input: string;\n  handleInputChange: (event: React.ChangeEvent<HTMLInputElement>) => void;\n  isLoading: boolean;\n  status: string;\n  stop: () => void;\n}\n\nexport const Input = ({\n  input,\n  handleInputChange,\n  isLoading,\n  status,\n  stop,\n}: InputProps) => {\n  return (\n    <div className=\"relative w-full\">\n      <ShadcnInput\n        className=\"bg-secondary py-6 w-full rounded-xl pr-12\"\n        value={input}\n        autoFocus\n        placeholder={\"Say something...\"}\n        onChange={handleInputChange}\n      />\n      {status === \"streaming\" || status === \"submitted\" ? (\n        <button\n          type=\"button\"\n          onClick={stop}\n          className=\"cursor-pointer absolute right-2 top-1/2 -translate-y-1/2 rounded-full p-2 bg-black hover:bg-zinc-800 disabled:bg-zinc-300 disabled:cursor-not-allowed transition-colors\"\n        >\n          <div className=\"animate-spin h-4 w-4\">\n            <svg className=\"h-4 w-4 text-white\" viewBox=\"0 0 24 24\">\n              <circle\n                className=\"opacity-25\"\n                cx=\"12\"\n                cy=\"12\"\n                r=\"10\"\n                stroke=\"currentColor\"\n                strokeWidth=\"4\"\n                fill=\"none\"\n              />\n              <path\n                className=\"opacity-75\"\n                fill=\"currentColor\"\n                d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\"\n              />\n            </svg>\n          </div>\n        </button>\n      ) : (\n        <button\n          type=\"submit\"\n          disabled={isLoading || !input.trim()}\n          className=\"absolute right-2 top-1/2 -translate-y-1/2 rounded-full p-2 bg-black hover:bg-zinc-800 disabled:bg-zinc-300 disabled:cursor-not-allowed transition-colors\"\n        >\n          <ArrowUp className=\"h-4 w-4 text-white\" />\n        </button>\n      )}\n    </div>\n  );\n};\n"
  },
  {
    "path": "app/chat/components/markdown.tsx",
    "content": "/* eslint-disable @typescript-eslint/no-unused-vars */\nimport React, { memo } from \"react\";\nimport ReactMarkdown, { type Components } from \"react-markdown\";\nimport remarkGfm from \"remark-gfm\";\nimport { cn } from \"~/chat/lib/utils\";\n\nconst components: Partial<Components> = {\n  pre: ({ children, ...props }) => (\n    <pre\n      className=\"overflow-x-auto rounded-lg bg-zinc-100 dark:bg-zinc-800/50 black:bg-zinc-800/50 ocean:bg-zinc-800/50 p-2.5 my-1.5 text-sm\"\n      {...props}\n    >\n      {children}\n    </pre>\n  ),\n  code: ({\n    children,\n    className,\n    ...props\n  }: React.HTMLProps<HTMLElement> & { className?: string }) => {\n    const match = /language-(\\w+)/.exec(className || \"\");\n    const isInline = !match && !className;\n\n    if (isInline) {\n      return (\n        <code\n          className=\"px-1 py-0.5 rounded-md bg-zinc-100 dark:bg-zinc-800/50 black:bg-zinc-800/50 ocean:bg-zinc-800/50 text-zinc-700 dark:text-zinc-300 black:text-zinc-300 ocean:text-zinc-300 text-[0.9em] font-mono\"\n          {...props}\n        >\n          {children}\n        </code>\n      );\n    }\n    return (\n      <code className={cn(\"block font-mono text-sm\", className)} {...props}>\n        {children}\n      </code>\n    );\n  },\n  ol: ({ node, children, ...props }) => (\n    <ol\n      className=\"list-decimal list-outside ml-4 space-y-0.5 my-1.5\"\n      {...props}\n    >\n      {children}\n    </ol>\n  ),\n  ul: ({ node, children, ...props }) => (\n    <ul className=\"list-disc list-outside ml-4 space-y-0.5 my-1.5\" {...props}>\n      {children}\n    </ul>\n  ),\n  li: ({ node, children, ...props }) => (\n    <li className=\"leading-normal\" {...props}>\n      {children}\n    </li>\n  ),\n  p: ({ node, children, ...props }) => (\n    <p className=\"leading-relaxed my-1\" {...props}>\n      {children}\n    </p>\n  ),\n  strong: ({ node, children, ...props }) => (\n    <strong className=\"font-semibold\" {...props}>\n      {children}\n    </strong>\n  ),\n  em: ({ node, children, ...props }) => (\n    <em className=\"italic\" {...props}>\n      {children}\n    </em>\n  ),\n  blockquote: ({ node, children, ...props }) => (\n    <blockquote\n      className=\"border-l-2 border-zinc-200 dark:border-zinc-700 black:border-zinc-700 ocean:border-zinc-700 pl-3 my-1.5 italic text-zinc-600 dark:text-zinc-400 black:text-zinc-400 ocean:text-zinc-400\"\n      {...props}\n    >\n      {children}\n    </blockquote>\n  ),\n  a: ({ node, children, ...props }) => (\n    <a\n      className=\"text-blue-500 hover:underline hover:text-blue-600 dark:text-blue-400 dark:hover:text-blue-300 black:text-blue-400 black:hover:text-blue-300 ocean:text-blue-400 ocean:hover:text-blue-300 transition-colors\"\n      target=\"_blank\"\n      rel=\"noreferrer\"\n      {...props}\n    >\n      {children}\n    </a>\n  ),\n  h1: ({ node, children, ...props }) => (\n    <h1\n      className=\"text-2xl font-semibold mt-3 mb-1.5 text-zinc-800 dark:text-zinc-200 black:text-zinc-200 ocean:text-zinc-200\"\n      {...props}\n    >\n      {children}\n    </h1>\n  ),\n  h2: ({ node, children, ...props }) => (\n    <h2\n      className=\"text-xl font-semibold mt-2.5 mb-1.5 text-zinc-800 dark:text-zinc-200 black:text-zinc-200 ocean:text-zinc-200\"\n      {...props}\n    >\n      {children}\n    </h2>\n  ),\n  h3: ({ node, children, ...props }) => (\n    <h3\n      className=\"text-lg font-semibold mt-2 mb-1 text-zinc-800 dark:text-zinc-200 black:text-zinc-200 ocean:text-zinc-200\"\n      {...props}\n    >\n      {children}\n    </h3>\n  ),\n  h4: ({ node, children, ...props }) => (\n    <h4\n      className=\"text-base font-semibold mt-2 mb-1 text-zinc-800 dark:text-zinc-200 black:text-zinc-200 ocean:text-zinc-200\"\n      {...props}\n    >\n      {children}\n    </h4>\n  ),\n  h5: ({ node, children, ...props }) => (\n    <h5\n      className=\"text-sm font-semibold mt-2 mb-1 text-zinc-800 dark:text-zinc-200 black:text-zinc-200 ocean:text-zinc-200\"\n      {...props}\n    >\n      {children}\n    </h5>\n  ),\n  h6: ({ node, children, ...props }) => (\n    <h6\n      className=\"text-xs font-semibold mt-2 mb-0.5 text-zinc-800 dark:text-zinc-200 black:text-zinc-200 ocean:text-zinc-200\"\n      {...props}\n    >\n      {children}\n    </h6>\n  ),\n  table: ({ node, children, ...props }) => (\n    <div className=\"my-1.5 overflow-x-auto\">\n      <table\n        className=\"min-w-full divide-y divide-zinc-200 dark:divide-zinc-700 black:divide-zinc-700 ocean:divide-zinc-700\"\n        {...props}\n      >\n        {children}\n      </table>\n    </div>\n  ),\n  thead: ({ node, children, ...props }) => (\n    <thead\n      className=\"bg-zinc-50 dark:bg-zinc-800/50 black:bg-zinc-800/50 ocean:bg-zinc-800/50\"\n      {...props}\n    >\n      {children}\n    </thead>\n  ),\n  tbody: ({ node, children, ...props }) => (\n    <tbody\n      className=\"divide-y divide-zinc-200 dark:divide-zinc-700 black:divide-zinc-700 ocean:divide-zinc-700 bg-white dark:bg-transparent black:bg-transparent ocean:bg-transparent\"\n      {...props}\n    >\n      {children}\n    </tbody>\n  ),\n  tr: ({ node, children, ...props }) => (\n    <tr\n      className=\"transition-colors hover:bg-zinc-50 dark:hover:bg-zinc-800/30 black:hover:bg-zinc-800/30 ocean:hover:bg-zinc-800/30\"\n      {...props}\n    >\n      {children}\n    </tr>\n  ),\n  th: ({ node, children, ...props }) => (\n    <th\n      className=\"px-3 py-1.5 text-left text-xs font-medium text-zinc-500 dark:text-zinc-400 black:text-zinc-400 ocean:text-zinc-400 uppercase tracking-wider\"\n      {...props}\n    >\n      {children}\n    </th>\n  ),\n  td: ({ node, children, ...props }) => (\n    <td className=\"px-3 py-1.5 text-sm\" {...props}>\n      {children}\n    </td>\n  ),\n  hr: ({ node, ...props }) => (\n    <hr\n      className=\"my-1.5 border-zinc-200 dark:border-zinc-700 black:border-zinc-700 ocean:border-zinc-700\"\n      {...props}\n    />\n  ),\n};\n\nconst remarkPlugins = [remarkGfm];\n\nconst NonMemoizedMarkdown = ({ children }: { children: string }) => {\n  return (\n    <ReactMarkdown remarkPlugins={remarkPlugins} components={components}>\n      {children}\n    </ReactMarkdown>\n  );\n};\n\nexport const Markdown = memo(\n  NonMemoizedMarkdown,\n  (prevProps, nextProps) => prevProps.children === nextProps.children,\n);\n"
  },
  {
    "path": "app/chat/components/mcp-server-manager.tsx",
    "content": "\"use client\";\n\nimport { useState } from \"react\";\nimport {\n  Dialog,\n  DialogContent,\n  DialogDescription,\n  DialogHeader,\n  DialogTitle,\n} from \"./ui/dialog\";\nimport { Button } from \"./ui/button\";\nimport { Input } from \"./ui/input\";\nimport { Label } from \"./ui/label\";\nimport {\n  PlusCircle,\n  ServerIcon,\n  Globe,\n  ExternalLink,\n  Trash2,\n  CheckCircle,\n  Edit2,\n} from \"lucide-react\";\nimport { toast } from \"sonner\";\nimport type { MCPServer } from \"~/chat/lib/context/mcp-context\";\nimport { getRepoData } from \"~/chat/lib/utils\";\n\n// Default template for a new MCP server\nconst INITIAL_NEW_SERVER: Omit<MCPServer, \"id\"> = {\n  name: \"\",\n  url: \"\",\n  type: \"sse\",\n  command: \"node\",\n  args: [],\n  env: [],\n  headers: [],\n};\n\ninterface MCPServerManagerProps {\n  servers: MCPServer[];\n  onServersChange: (servers: MCPServer[]) => void;\n  selectedServers: string[];\n  onSelectedServersChange: (serverIds: string[]) => void;\n  open: boolean;\n  onOpenChange: (open: boolean) => void;\n}\n\nexport const MCPServerManager = ({\n  servers,\n  onServersChange,\n  selectedServers,\n  onSelectedServersChange,\n  open,\n  onOpenChange,\n}: MCPServerManagerProps) => {\n  const [newServer, setNewServer] =\n    useState<Omit<MCPServer, \"id\">>(INITIAL_NEW_SERVER);\n  const [view, setView] = useState<\"list\" | \"add\">(\"list\");\n  const [editingServerId, setEditingServerId] = useState<string | null>(null);\n\n  const resetAndClose = () => {\n    setView(\"list\");\n    setNewServer(INITIAL_NEW_SERVER);\n    onOpenChange(false);\n  };\n\n  const generateServerFromUrl = (url: string): MCPServer | null => {\n    if (!url) {\n      toast.error(\"Server URL is required\");\n      return null;\n    }\n\n    const { owner, repo } = getRepoData(url);\n\n    if (!owner || (owner != \"docs\" && !repo)) {\n      toast.error(\"Invalid server URL\");\n      return null;\n    }\n\n    const newUrl = [\"https://gitmcp.io\", owner, repo].filter(Boolean).join(\"/\");\n\n    const name = repo ? `${repo} Docs` : \"MCP Docs\";\n\n    const id = crypto.randomUUID();\n\n    return { id, name, url: newUrl, type: \"sse\" } as const;\n  };\n\n  const addServer = () => {\n    const newServerToAdd = generateServerFromUrl(newServer.url);\n    if (!newServerToAdd) {\n      return;\n    }\n    const updatedServers = [...servers, newServerToAdd];\n    onServersChange(updatedServers);\n\n    toast.success(`Added MCP server: ${newServerToAdd.name}`);\n    setView(\"list\");\n    setNewServer(INITIAL_NEW_SERVER);\n  };\n\n  const removeServer = (id: string, e: React.MouseEvent) => {\n    e.stopPropagation();\n    const updatedServers = servers.filter((server) => server.id !== id);\n    onServersChange(updatedServers);\n\n    // If the removed server was selected, remove it from selected servers\n    if (selectedServers.includes(id)) {\n      onSelectedServersChange(\n        selectedServers.filter((serverId) => serverId !== id),\n      );\n    }\n\n    toast.success(\"Server removed\");\n  };\n\n  const toggleServer = (id: string) => {\n    if (selectedServers.includes(id)) {\n      // Remove from selected servers\n      onSelectedServersChange(\n        selectedServers.filter((serverId) => serverId !== id),\n      );\n      const server = servers.find((s) => s.id === id);\n      if (server) {\n        toast.success(`Disabled MCP server: ${server.name}`);\n      }\n    } else {\n      // Add to selected servers\n      onSelectedServersChange([...selectedServers, id]);\n      const server = servers.find((s) => s.id === id);\n      if (server) {\n        toast.success(`Enabled MCP server: ${server.name}`);\n      }\n    }\n  };\n\n  const clearAllServers = () => {\n    if (selectedServers.length > 0) {\n      onSelectedServersChange([]);\n      toast.success(\"All MCP servers disabled\");\n      resetAndClose();\n    }\n  };\n\n  // Editing support\n  const startEditing = (server: MCPServer) => {\n    setEditingServerId(server.id);\n    setNewServer({\n      name: server.name,\n      url: server.url,\n      type: server.type,\n      command: server.command,\n      args: server.args,\n      env: server.env,\n      headers: server.headers,\n    });\n    setView(\"add\");\n  };\n\n  const handleFormCancel = () => {\n    if (view === \"add\") {\n      setView(\"list\");\n      setEditingServerId(null);\n      setNewServer(INITIAL_NEW_SERVER);\n    } else {\n      resetAndClose();\n    }\n  };\n\n  const updateServer = () => {\n    const newServerToUpdate = generateServerFromUrl(newServer.url);\n    if (!newServerToUpdate) {\n      return;\n    }\n    const updated = servers.map((s) =>\n      s.id === editingServerId\n        ? { ...newServerToUpdate, id: editingServerId! }\n        : s,\n    );\n    onServersChange(updated);\n    toast.success(`Updated MCP server: ${newServerToUpdate.name}`);\n    setView(\"list\");\n    setEditingServerId(null);\n    setNewServer(INITIAL_NEW_SERVER);\n  };\n\n  return (\n    <Dialog open={open} onOpenChange={onOpenChange}>\n      <DialogContent className=\"sm:max-w-[480px] max-h-[85vh] overflow-hidden flex flex-col\">\n        <DialogHeader>\n          <DialogTitle className=\"flex items-center gap-2\">\n            <ServerIcon className=\"h-5 w-5 text-primary\" />\n            {view == \"list\"\n              ? \"MCP Server Configuration\"\n              : editingServerId\n                ? \"Edit GitMCP Server\"\n                : \"Add New GitMCP Server\"}\n          </DialogTitle>\n          <DialogDescription>\n            {selectedServers.length > 0 && (\n              <span className=\"block mt-1 text-xs font-medium text-primary\">\n                {selectedServers.length} server\n                {selectedServers.length !== 1 ? \"s\" : \"\"} currently active\n              </span>\n            )}\n          </DialogDescription>\n        </DialogHeader>\n\n        {view === \"list\" ? (\n          <div className=\"flex-1 overflow-hidden flex flex-col\">\n            {servers.length > 0 ? (\n              <div className=\"flex-1 overflow-hidden flex flex-col\">\n                <div className=\"flex-1 overflow-hidden flex flex-col\">\n                  <div className=\"flex items-center justify-between mb-3\">\n                    <h3 className=\"text-sm font-medium\">Available Servers</h3>\n                    <span className=\"text-xs text-muted-foreground\">\n                      Select multiple servers to combine their tools\n                    </span>\n                  </div>\n                  <div className=\"overflow-y-auto pr-1 flex-1 gap-2.5 flex flex-col pb-16\">\n                    {servers\n                      .sort((a, b) => {\n                        const aActive = selectedServers.includes(a.id);\n                        const bActive = selectedServers.includes(b.id);\n                        if (aActive && !bActive) return -1;\n                        if (!aActive && bActive) return 1;\n                        return 0;\n                      })\n                      .map((server) => {\n                        const isActive = selectedServers.includes(server.id);\n                        return (\n                          <McpServerListItem\n                            key={server.id}\n                            server={server}\n                            isActive={isActive}\n                            removeServer={removeServer}\n                            startEditing={startEditing}\n                            toggleServer={toggleServer}\n                          />\n                        );\n                      })}\n                  </div>\n                </div>\n              </div>\n            ) : (\n              <div className=\"flex-1 py-8 pb-16 flex flex-col items-center justify-center space-y-4\">\n                <div className=\"rounded-full p-3 bg-primary/10\">\n                  <ServerIcon className=\"h-7 w-7 text-primary\" />\n                </div>\n                <div className=\"text-center space-y-1\">\n                  <h3 className=\"text-base font-medium\">\n                    No MCP Servers Added\n                  </h3>\n                  <p className=\"text-sm text-muted-foreground max-w-[300px]\">\n                    Add your first MCP server to access additional AI tools\n                  </p>\n                </div>\n                <div className=\"flex items-center gap-1.5 text-xs text-muted-foreground mt-4\">\n                  <a\n                    href=\"https://modelcontextprotocol.io\"\n                    target=\"_blank\"\n                    rel=\"noopener noreferrer\"\n                    className=\"flex items-center gap-1 hover:text-primary transition-colors\"\n                  >\n                    Learn about MCP\n                    <ExternalLink className=\"h-3 w-3\" />\n                  </a>\n                </div>\n              </div>\n            )}\n          </div>\n        ) : (\n          <div className=\"space-y-4 overflow-y-auto px-1 py-0.5 mb-14 [scrollbar-width:none] [-ms-overflow-style:none] [&::-webkit-scrollbar]:hidden\">\n            <div className=\"space-y-4\">\n              <div className=\"grid gap-1.5\">\n                <Label htmlFor=\"url\" className=\"pb-1\">\n                  Server or Repository URL\n                </Label>\n                <Input\n                  id=\"url\"\n                  value={newServer.url}\n                  onChange={(e) =>\n                    setNewServer({ ...newServer, url: e.target.value })\n                  }\n                  placeholder=\"https://gitmcp.io/microsoft/playwright-mcp\"\n                  className=\"relative z-0 placeholder:text-muted-foreground/60\"\n                />\n                <p className=\"text-xs text-muted-foreground/80\">\n                  A gitmcp.io server, a github.com repository, or a github.io\n                  pages site\n                </p>\n              </div>\n            </div>\n          </div>\n        )}\n\n        {/* Persistent fixed footer with buttons */}\n        <div className=\"absolute bottom-0 left-0 right-0 p-4 bg-background border-t border-border flex justify-between z-10\">\n          {view === \"list\" ? (\n            <>\n              <span></span>\n              <Button\n                onClick={() => setView(\"add\")}\n                size=\"sm\"\n                className=\"gap-1.5\"\n              >\n                <PlusCircle className=\"h-3.5 w-3.5\" />\n                Add Server\n              </Button>\n            </>\n          ) : (\n            <>\n              <Button variant=\"outline\" onClick={handleFormCancel}>\n                Cancel\n              </Button>\n              <Button\n                onClick={editingServerId ? updateServer : addServer}\n                disabled={!newServer.url}\n              >\n                {editingServerId ? \"Save Changes\" : \"Add Server\"}\n              </Button>\n            </>\n          )}\n        </div>\n      </DialogContent>\n    </Dialog>\n  );\n};\n\nfunction McpServerListItem({\n  server,\n  isActive,\n  removeServer,\n  startEditing,\n  toggleServer,\n}: {\n  server: MCPServer;\n  isActive: boolean;\n  removeServer: (id: string, e: React.MouseEvent) => void;\n  startEditing: (server: MCPServer) => void;\n  toggleServer: (id: string) => void;\n}) {\n  return (\n    <div\n      key={server.id}\n      className={`\nrelative flex flex-col p-3.5 rounded-xl transition-colors\nborder ${\n        isActive\n          ? \"border-primary bg-primary/10\"\n          : \"border-border hover:border-primary/30 hover:bg-primary/5\"\n      }\n`}\n    >\n      {/* Server Header with Type Badge and Delete Button */}\n      <div className=\"flex items-center justify-between mb-2\">\n        <div className=\"flex items-center gap-2\">\n          <Globe\n            className={`h-4 w-4 ${\n              isActive ? \"text-primary\" : \"text-muted-foreground\"\n            } flex-shrink-0`}\n          />\n\n          <h4 className=\"text-sm font-medium truncate max-w-[220px]\">\n            {server.name}\n          </h4>\n        </div>\n        <div className=\"flex items-center gap-2\">\n          <span className=\"text-xs px-2 py-0.5 rounded-full bg-secondary text-secondary-foreground\">\n            {server.type.toUpperCase()}\n          </span>\n          {!server.isFixed && (\n            <>\n              <button\n                onClick={(e) => removeServer(server.id, e)}\n                className=\"p-1 rounded-full hover:bg-muted/70\"\n                aria-label=\"Remove server\"\n              >\n                <Trash2 className=\"h-3.5 w-3.5 text-muted-foreground\" />\n              </button>\n              <button\n                onClick={() => startEditing(server)}\n                className=\"p-1 rounded-full hover:bg-muted/50\"\n                aria-label=\"Edit server\"\n              >\n                <Edit2 className=\"h-3.5 w-3.5 text-muted-foreground\" />\n              </button>\n            </>\n          )}\n        </div>\n      </div>\n\n      {/* Server Details */}\n      <p className=\"text-xs text-muted-foreground mb-2.5 truncate\">\n        {server.type === \"sse\"\n          ? server.url\n          : `${server.command} ${server.args?.join(\" \")}`}\n      </p>\n\n      {/* Action Button */}\n      {!server.isFixed && (\n        <Button\n          size=\"sm\"\n          className=\"w-full gap-1.5 hover:text-black hover:dark:text-white hover:ocean:text-white rounded-lg\"\n          variant={isActive ? \"default\" : \"outline\"}\n          onClick={() => toggleServer(server.id)}\n        >\n          {isActive && <CheckCircle className=\"h-3.5 w-3.5\" />}\n          {isActive ? \"Active\" : \"Enable Server\"}\n        </Button>\n      )}\n    </div>\n  );\n}\n"
  },
  {
    "path": "app/chat/components/message.tsx",
    "content": "\"use client\";\n\nimport type { Message as TMessage } from \"ai\";\nimport { AnimatePresence, motion } from \"motion/react\";\nimport { memo, useCallback, useEffect, useState } from \"react\";\nimport equal from \"fast-deep-equal\";\nimport { Markdown } from \"./markdown\";\nimport { cn } from \"~/chat/lib/utils\";\nimport {\n  ChevronDownIcon,\n  ChevronUpIcon,\n  LightbulbIcon,\n  BrainIcon,\n} from \"lucide-react\";\nimport { SpinnerIcon } from \"./icons\";\nimport { ToolInvocation } from \"./tool-invocation\";\nimport { CopyButton } from \"./copy-button\";\n\ninterface ReasoningPart {\n  type: \"reasoning\";\n  reasoning: string;\n  details: Array<{ type: \"text\"; text: string }>;\n}\n\ninterface ReasoningMessagePartProps {\n  part: ReasoningPart;\n  isReasoning: boolean;\n}\n\nexport function ReasoningMessagePart({\n  part,\n  isReasoning,\n}: ReasoningMessagePartProps) {\n  const [isExpanded, setIsExpanded] = useState(false);\n\n  const memoizedSetIsExpanded = useCallback((value: boolean) => {\n    setIsExpanded(value);\n  }, []);\n\n  useEffect(() => {\n    memoizedSetIsExpanded(isReasoning);\n  }, [isReasoning, memoizedSetIsExpanded]);\n\n  return (\n    <div className=\"flex flex-col mb-2 group\">\n      {isReasoning ? (\n        <div\n          className={cn(\n            \"flex items-center gap-2.5 rounded-full py-1.5 px-3\",\n            \"bg-indigo-50/50 dark:bg-indigo-900/10 ocean:bg-indigo-900/10 text-indigo-700 dark:text-indigo-300 ocean:text-indigo-300\",\n            \"border border-indigo-200/50 dark:border-indigo-700/20 ocean:border-indigo-700/20 w-fit\",\n          )}\n        >\n          <div className=\"animate-spin h-3.5 w-3.5\">\n            <SpinnerIcon />\n          </div>\n          <div className=\"text-xs font-medium tracking-tight\">Thinking...</div>\n        </div>\n      ) : (\n        <button\n          onClick={() => setIsExpanded(!isExpanded)}\n          className={cn(\n            \"flex items-center justify-between w-full\",\n            \"rounded-md py-2 px-3 mb-0.5\",\n            \"bg-muted/50 border border-border/60 hover:border-border/80\",\n            \"transition-all duration-150 cursor-pointer\",\n            isExpanded ? \"bg-muted border-primary/20\" : \"\",\n          )}\n        >\n          <div className=\"flex items-center gap-2.5\">\n            <div\n              className={cn(\n                \"flex items-center justify-center w-6 h-6 rounded-full\",\n                \"bg-amber-50 dark:bg-amber-900/20 ocean:bg-amber-900/20\",\n                \"text-amber-600 dark:text-amber-400 ocean:text-amber-400 ring-1 ring-amber-200 dark:ring-amber-700/30 ocean:ring-amber-700/30\",\n              )}\n            >\n              <LightbulbIcon className=\"h-3.5 w-3.5\" />\n            </div>\n            <div className=\"text-sm font-medium text-foreground flex items-center gap-1.5\">\n              Reasoning\n              <span className=\"text-xs text-muted-foreground font-normal\">\n                (click to {isExpanded ? \"hide\" : \"view\"})\n              </span>\n            </div>\n          </div>\n          <div\n            className={cn(\n              \"flex items-center justify-center\",\n              \"rounded-full p-0.5 w-5 h-5\",\n              \"text-muted-foreground hover:text-foreground\",\n              \"bg-background/80 border border-border/50\",\n              \"transition-colors\",\n            )}\n          >\n            {isExpanded ? (\n              <ChevronDownIcon className=\"h-3 w-3\" />\n            ) : (\n              <ChevronUpIcon className=\"h-3 w-3\" />\n            )}\n          </div>\n        </button>\n      )}\n\n      <AnimatePresence initial={false}>\n        {isExpanded && (\n          <motion.div\n            key=\"reasoning\"\n            className={cn(\n              \"text-sm text-muted-foreground flex flex-col gap-2\",\n              \"pl-3.5 ml-0.5 mt-1\",\n              \"border-l border-amber-200/50 dark:border-amber-700/30 ocean:border-amber-700/30\",\n            )}\n            initial={{ height: 0, opacity: 0 }}\n            animate={{ height: \"auto\", opacity: 1 }}\n            exit={{ height: 0, opacity: 0 }}\n            transition={{ duration: 0.2, ease: \"easeInOut\" }}\n          >\n            <div className=\"text-xs text-muted-foreground/70 pl-1 font-medium\">\n              The assistant&apos;s thought process:\n            </div>\n            {part.details.map((detail, detailIndex) =>\n              detail.type === \"text\" ? (\n                <div\n                  key={detailIndex}\n                  className=\"px-2 py-1.5 bg-muted/10 rounded-md border border-border/30\"\n                >\n                  <Markdown>{detail.text}</Markdown>\n                </div>\n              ) : (\n                \"<redacted>\"\n              ),\n            )}\n          </motion.div>\n        )}\n      </AnimatePresence>\n    </div>\n  );\n}\n\nconst PurePreviewMessage = ({\n  message,\n  isLatestMessage,\n  status,\n}: {\n  message: TMessage;\n  isLoading: boolean;\n  status: \"error\" | \"submitted\" | \"streaming\" | \"ready\";\n  isLatestMessage: boolean;\n}) => {\n  // Create a string with all text parts for copy functionality\n  const getMessageText = () => {\n    if (!message.parts) return \"\";\n    return message.parts\n      .filter((part) => part.type === \"text\")\n      .map((part) => (part.type === \"text\" ? part.text : \"\"))\n      .join(\"\\n\\n\");\n  };\n\n  // Only show copy button if the message is from the assistant and not currently streaming\n  const shouldShowCopyButton =\n    message.role === \"assistant\" &&\n    (!isLatestMessage || status !== \"streaming\");\n\n  return (\n    <AnimatePresence key={message.id}>\n      <motion.div\n        className={cn(\n          \"w-full mx-auto px-4 group/message\",\n          message.role === \"assistant\" ? \"mb-8\" : \"mb-6\",\n        )}\n        initial={{ y: 5, opacity: 0 }}\n        animate={{ y: 0, opacity: 1 }}\n        key={`message-${message.id}`}\n        data-role={message.role}\n      >\n        <div\n          className={cn(\n            \"flex gap-4 w-full group-data-[role=user]/message:ml-auto group-data-[role=user]/message:max-w-2xl\",\n            \"group-data-[role=user]/message:w-fit\",\n          )}\n        >\n          <div className=\"flex flex-col w-full space-y-3\">\n            {message.parts?.map((part, i) => {\n              switch (part.type) {\n                case \"text\":\n                  return (\n                    <motion.div\n                      initial={{ y: 5, opacity: 0 }}\n                      animate={{ y: 0, opacity: 1 }}\n                      key={`message-${message.id}-part-${i}`}\n                      className=\"flex flex-row gap-2 items-start w-full\"\n                    >\n                      <div\n                        className={cn(\"flex flex-col gap-3 w-full\", {\n                          \"bg-secondary text-secondary-foreground px-4 py-3 rounded-2xl\":\n                            message.role === \"user\",\n                        })}\n                      >\n                        <Markdown>{part.text}</Markdown>\n                      </div>\n                    </motion.div>\n                  );\n                case \"tool-invocation\":\n                  const { toolName, state, args } = part.toolInvocation;\n                  const result =\n                    \"result\" in part.toolInvocation\n                      ? part.toolInvocation.result\n                      : null;\n\n                  return (\n                    <ToolInvocation\n                      key={`message-${message.id}-part-${i}`}\n                      toolName={toolName}\n                      state={state}\n                      args={args}\n                      result={result}\n                      isLatestMessage={isLatestMessage}\n                      status={status}\n                    />\n                  );\n                case \"reasoning\":\n                  return (\n                    <ReasoningMessagePart\n                      key={`message-${message.id}-${i}`}\n                      // @ts-expect-error part\n                      part={part}\n                      isReasoning={\n                        (message.parts &&\n                          status === \"streaming\" &&\n                          i === message.parts.length - 1) ??\n                        false\n                      }\n                    />\n                  );\n                default:\n                  return null;\n              }\n            })}\n            {shouldShowCopyButton && (\n              <div className=\"flex justify-start mt-2\">\n                <CopyButton text={getMessageText()} />\n              </div>\n            )}\n          </div>\n        </div>\n      </motion.div>\n    </AnimatePresence>\n  );\n};\n\nexport const Message = memo(PurePreviewMessage, (prevProps, nextProps) => {\n  if (prevProps.status !== nextProps.status) return false;\n  if (prevProps.message.annotations !== nextProps.message.annotations)\n    return false;\n  if (!equal(prevProps.message.parts, nextProps.message.parts)) return false;\n  return true;\n});\n"
  },
  {
    "path": "app/chat/components/messages.tsx",
    "content": "import type { Message as TMessage } from \"ai\";\nimport { Message } from \"./message\";\nimport { useScrollToBottom } from \"~/chat/lib/hooks/use-scroll-to-bottom\";\n\nexport const Messages = ({\n  messages,\n  isLoading,\n  status,\n}: {\n  messages: TMessage[];\n  isLoading: boolean;\n  status: \"error\" | \"submitted\" | \"streaming\" | \"ready\";\n}) => {\n  const [containerRef, endRef] = useScrollToBottom();\n\n  return (\n    <div className=\"h-full overflow-y-auto no-scrollbar\" ref={containerRef}>\n      <div className=\"max-w-lg sm:max-w-3xl mx-auto py-4\">\n        {messages.map((m, i) => (\n          <Message\n            key={i}\n            isLatestMessage={i === messages.length - 1}\n            isLoading={isLoading}\n            message={m}\n            status={status}\n          />\n        ))}\n        <div className=\"h-1\" ref={endRef} />\n      </div>\n    </div>\n  );\n};\n"
  },
  {
    "path": "app/chat/components/model-picker.tsx",
    "content": "\"use client\";\nimport {\n  MODELS,\n  modelDetails,\n  type modelID,\n  defaultModel,\n} from \"~/chat/ai/providers.shared\";\nimport {\n  Select,\n  SelectContent,\n  SelectGroup,\n  SelectItem,\n  SelectTrigger,\n  SelectValue,\n} from \"./ui/select\";\nimport { cn } from \"~/chat/lib/utils\";\nimport {\n  Sparkles,\n  Zap,\n  Info,\n  Bolt,\n  Code,\n  Brain,\n  Lightbulb,\n  Image,\n  Gauge,\n  Rocket,\n  Bot,\n} from \"lucide-react\";\nimport { useState, useEffect } from \"react\";\n\ninterface ModelPickerProps {\n  selectedModel: modelID;\n  setSelectedModel: (model: modelID) => void;\n}\n\nexport const ModelPicker = ({\n  selectedModel,\n  setSelectedModel,\n}: ModelPickerProps) => {\n  const [hoveredModel, setHoveredModel] = useState<modelID | null>(null);\n\n  // Ensure we always have a valid model ID\n  const validModelId = MODELS.includes(selectedModel)\n    ? selectedModel\n    : defaultModel;\n\n  // If the selected model is invalid, update it to the default\n  useEffect(() => {\n    if (selectedModel !== validModelId) {\n      setSelectedModel(validModelId as modelID);\n    }\n  }, [selectedModel, validModelId, setSelectedModel]);\n\n  // Function to get the appropriate icon for each provider\n  const getProviderIcon = (provider: string) => {\n    switch (provider.toLowerCase()) {\n      case \"anthropic\":\n        return <Sparkles className=\"h-3 w-3 text-orange-600\" />;\n      case \"openai\":\n        return <Zap className=\"h-3 w-3 text-green-500\" />;\n      case \"google\":\n        return <Zap className=\"h-3 w-3 text-red-500\" />;\n      case \"groq\":\n        return <Sparkles className=\"h-3 w-3 text-blue-500\" />;\n      case \"xai\":\n        return <Sparkles className=\"h-3 w-3 text-yellow-500\" />;\n      default:\n        return <Info className=\"h-3 w-3 text-blue-500\" />;\n    }\n  };\n\n  // Function to get capability icon\n  const getCapabilityIcon = (capability: string) => {\n    switch (capability.toLowerCase()) {\n      case \"code\":\n        return <Code className=\"h-2.5 w-2.5\" />;\n      case \"reasoning\":\n        return <Brain className=\"h-2.5 w-2.5\" />;\n      case \"research\":\n        return <Lightbulb className=\"h-2.5 w-2.5\" />;\n      case \"vision\":\n        return <Image className=\"h-2.5 w-2.5\" />;\n      case \"fast\":\n      case \"rapid\":\n        return <Bolt className=\"h-2.5 w-2.5\" />;\n      case \"efficient\":\n      case \"compact\":\n        return <Gauge className=\"h-2.5 w-2.5\" />;\n      case \"creative\":\n      case \"balance\":\n        return <Rocket className=\"h-2.5 w-2.5\" />;\n      case \"agentic\":\n        return <Bot className=\"h-2.5 w-2.5\" />;\n      default:\n        return <Info className=\"h-2.5 w-2.5\" />;\n    }\n  };\n\n  // Get capability badge color\n  const getCapabilityColor = (capability: string) => {\n    switch (capability.toLowerCase()) {\n      case \"code\":\n        return \"bg-blue-100 text-blue-800 dark:bg-blue-900/30 dark:text-blue-300 ocean:bg-blue-900/30 ocean:text-blue-300\";\n      case \"reasoning\":\n      case \"research\":\n        return \"bg-purple-100 text-purple-800 dark:bg-purple-900/30 dark:text-purple-300 ocean:bg-purple-900/30 ocean:text-purple-300\";\n      case \"vision\":\n        return \"bg-indigo-100 text-indigo-800 dark:bg-indigo-900/30 dark:text-indigo-300 ocean:bg-indigo-900/30 ocean:text-indigo-300\";\n      case \"fast\":\n      case \"rapid\":\n        return \"bg-amber-100 text-amber-800 dark:bg-amber-900/30 dark:text-amber-300 ocean:bg-amber-900/30 ocean:text-amber-300\";\n      case \"efficient\":\n      case \"compact\":\n        return \"bg-emerald-100 text-emerald-800 dark:bg-emerald-900/30 dark:text-emerald-300 ocean:bg-emerald-900/30 ocean:text-emerald-300\";\n      case \"creative\":\n      case \"balance\":\n        return \"bg-rose-100 text-rose-800 dark:bg-rose-900/30 dark:text-rose-300 ocean:bg-rose-900/30 ocean:text-rose-300\";\n      case \"agentic\":\n        return \"bg-cyan-100 text-cyan-800 dark:bg-cyan-900/30 dark:text-cyan-300 ocean:bg-cyan-900/30 ocean:text-cyan-300\";\n      default:\n        return \"bg-gray-100 text-gray-800 dark:bg-gray-800 dark:text-gray-300 ocean:bg-gray-800 ocean:text-gray-300\";\n    }\n  };\n\n  // Get current model details to display\n  const displayModelId = hoveredModel || validModelId;\n  const currentModelDetails = modelDetails[displayModelId];\n\n  // Handle model change\n  const handleModelChange = (modelId: string) => {\n    if (MODELS.includes(modelId)) {\n      const typedModelId = modelId as modelID;\n      setSelectedModel(typedModelId);\n    }\n  };\n\n  return (\n    <div className=\"absolute bottom-2 left-2 z-10\">\n      <Select\n        value={validModelId}\n        onValueChange={handleModelChange}\n        defaultValue={validModelId}\n      >\n        <SelectTrigger className=\"max-w-[200px] sm:max-w-fit sm:w-56 px-2 sm:px-3 h-8 sm:h-9 rounded-full group border-primary/20 bg-primary/5 hover:bg-primary/10 dark:bg-primary/10 dark:hover:bg-primary/20 ocean:bg-primary/10 ocean:hover:bg-primary/20 transition-all duration-200 ring-offset-background focus:ring-2 focus:ring-primary/30 focus:ring-offset-2\">\n          <SelectValue\n            placeholder=\"Select model\"\n            className=\"text-xs font-medium flex items-center gap-1 sm:gap-2 text-primary dark:text-primary-foreground ocean:text-primary-foreground\"\n          >\n            <div className=\"flex items-center gap-1 sm:gap-2\">\n              {getProviderIcon(modelDetails[validModelId].provider)}\n              <span className=\"font-medium truncate\">\n                {modelDetails[validModelId].name}\n              </span>\n            </div>\n          </SelectValue>\n        </SelectTrigger>\n        <SelectContent\n          align=\"start\"\n          className=\"bg-background/95 dark:bg-muted/95 ocean:bg-muted/95 backdrop-blur-sm border-border/80 rounded-lg overflow-hidden p-0 w-[280px] sm:w-[350px] md:w-[515px]\"\n        >\n          <div className=\"grid grid-cols-1 sm:grid-cols-[120px_1fr] md:grid-cols-[200px_1fr] items-start\">\n            {/* Model selector column */}\n            <div className=\"sm:border-r border-border/40 bg-muted/20 p-0 pr-1\">\n              <SelectGroup className=\"space-y-1\">\n                {MODELS.map((id) => {\n                  const modelId = id as modelID;\n                  return (\n                    <SelectItem\n                      key={id}\n                      value={id}\n                      onMouseEnter={() => setHoveredModel(modelId)}\n                      onMouseLeave={() => setHoveredModel(null)}\n                      className={cn(\n                        \"!px-2 sm:!px-3 py-1.5 sm:py-2 cursor-pointer rounded-md text-xs transition-colors duration-150\",\n                        \"hover:bg-primary/5 hover:text-primary-foreground\",\n                        \"focus:bg-primary/10 focus:text-primary focus:outline-none\",\n                        \"data-[highlighted]:bg-primary/10 data-[highlighted]:text-primary\",\n                        validModelId === id &&\n                          \"!bg-primary/15 !text-primary font-medium\",\n                      )}\n                    >\n                      <div className=\"flex flex-col gap-0.5\">\n                        <div className=\"flex items-center gap-1.5\">\n                          {getProviderIcon(modelDetails[modelId].provider)}\n                          <span className=\"font-medium truncate\">\n                            {modelDetails[modelId].name}\n                          </span>\n                        </div>\n                        <span className=\"text-[10px] sm:text-xs text-muted-foreground\">\n                          {modelDetails[modelId].provider}\n                        </span>\n                      </div>\n                    </SelectItem>\n                  );\n                })}\n              </SelectGroup>\n            </div>\n\n            {/* Model details column - hidden on smallest screens, visible on sm+ */}\n            <div className=\"sm:block hidden p-2 sm:p-3 md:p-4 flex-col\">\n              <div>\n                <div className=\"flex items-center gap-2 mb-1\">\n                  {getProviderIcon(currentModelDetails.provider)}\n                  <h3 className=\"text-sm font-semibold\">\n                    {currentModelDetails.name}\n                  </h3>\n                </div>\n                <div className=\"text-xs text-muted-foreground mb-1\">\n                  Provider:{\" \"}\n                  <span className=\"font-medium\">\n                    {currentModelDetails.provider}\n                  </span>\n                </div>\n\n                {/* Capability badges */}\n                <div className=\"flex flex-wrap gap-1 mt-2 mb-3\">\n                  {currentModelDetails.capabilities.map((capability) => (\n                    <span\n                      key={capability}\n                      className={cn(\n                        \"inline-flex items-center gap-1 text-[9px] px-1.5 py-0.5 rounded-full font-medium\",\n                        getCapabilityColor(capability),\n                      )}\n                    >\n                      {getCapabilityIcon(capability)}\n                      <span>{capability}</span>\n                    </span>\n                  ))}\n                </div>\n\n                <div className=\"text-xs text-foreground/90 leading-relaxed mb-3 hidden md:block\">\n                  {currentModelDetails.description}\n                </div>\n              </div>\n\n              <div className=\"bg-muted/40 rounded-md p-2 hidden md:block\">\n                <div className=\"text-[10px] text-muted-foreground flex justify-between items-center\">\n                  <span>API Version:</span>\n                  <code className=\"bg-background/80 px-2 py-0.5 rounded text-[10px] font-mono\">\n                    {currentModelDetails.apiVersion}\n                  </code>\n                </div>\n              </div>\n            </div>\n\n            {/* Condensed model details for mobile only */}\n            <div className=\"p-3 sm:hidden border-t border-border/30\">\n              <div className=\"flex flex-wrap gap-1 mb-2\">\n                {currentModelDetails.capabilities\n                  .slice(0, 4)\n                  .map((capability) => (\n                    <span\n                      key={capability}\n                      className={cn(\n                        \"inline-flex items-center gap-1 text-[9px] px-1.5 py-0.5 rounded-full font-medium\",\n                        getCapabilityColor(capability),\n                      )}\n                    >\n                      {getCapabilityIcon(capability)}\n                      <span>{capability}</span>\n                    </span>\n                  ))}\n                {currentModelDetails.capabilities.length > 4 && (\n                  <span className=\"text-[10px] text-muted-foreground\">\n                    +{currentModelDetails.capabilities.length - 4} more\n                  </span>\n                )}\n              </div>\n            </div>\n          </div>\n        </SelectContent>\n      </Select>\n    </div>\n  );\n};\n"
  },
  {
    "path": "app/chat/components/project-overview.tsx",
    "content": "import { useMCP } from \"~/chat/lib/context/mcp-context\";\nexport const ProjectOverview = () => {\n  const { owner, repo, serverNameText } = useMCP();\n  return (\n    <div className=\"flex flex-col items-center justify-end\">\n      <h1 className=\"text-4xl font-semibold mb-4 text-center\">\n        {`Chat with ${serverNameText}`}\n      </h1>\n      <p className=\"text-foreground/80 text-lg mb-4 text-center\">\n        Ask questions about {repo ? `${owner}/${repo}` : \"any GitHub repo\"}{\" \"}\n        documentation.\n      </p>\n    </div>\n  );\n};\n"
  },
  {
    "path": "app/chat/components/suggested-prompts.tsx",
    "content": "\"use client\";\n\nimport { motion } from \"motion/react\";\nimport { Button } from \"./ui/button\";\nimport { memo } from \"react\";\n\ninterface SuggestedPromptsProps {\n  sendMessage: (input: string) => void;\n}\n\nfunction PureSuggestedPrompts({ sendMessage }: SuggestedPromptsProps) {\n  const suggestedActions = [\n    {\n      title: \"What are the advantages\",\n      label: \"of using Next.js?\",\n      action: \"What are the advantages of using Next.js?\",\n    },\n    {\n      title: \"What is the weather\",\n      label: \"in San Francisco?\",\n      action: \"What is the weather in San Francisco?\",\n    },\n  ];\n\n  return (\n    <div\n      data-testid=\"suggested-actions\"\n      className=\"grid sm:grid-cols-2 gap-2 w-full\"\n    >\n      {suggestedActions.map((suggestedAction, index) => (\n        <motion.div\n          initial={{ opacity: 0, y: 20 }}\n          animate={{ opacity: 1, y: 0 }}\n          exit={{ opacity: 0, y: 20 }}\n          transition={{ delay: 0.05 * index }}\n          key={`suggested-action-${suggestedAction.title}-${index}`}\n          className={index > 1 ? \"hidden sm:block\" : \"block\"}\n        >\n          <Button\n            variant=\"ghost\"\n            onClick={async () => {\n              sendMessage(suggestedAction.action);\n            }}\n            className=\"text-left border rounded-xl px-4 py-3.5 text-sm flex-1 gap-1 sm:flex-col w-full h-auto justify-start items-start\"\n          >\n            <span className=\"font-medium\">{suggestedAction.title}</span>\n            <span className=\"text-muted-foreground\">\n              {suggestedAction.label}\n            </span>\n          </Button>\n        </motion.div>\n      ))}\n    </div>\n  );\n}\n\nexport const SuggestedPrompts = memo(PureSuggestedPrompts, () => true);\n"
  },
  {
    "path": "app/chat/components/textarea.tsx",
    "content": "import type { modelID } from \"~/chat/ai/providers.shared\";\nimport { Textarea as ShadcnTextarea } from \"~/chat/components/ui/textarea\";\nimport { ArrowUp, Loader2 } from \"lucide-react\";\nimport { ModelPicker } from \"./model-picker\";\n\ninterface InputProps {\n  input: string;\n  handleInputChange: (event: React.ChangeEvent<HTMLTextAreaElement>) => void;\n  isLoading: boolean;\n  status: string;\n  stop: () => void;\n  selectedModel: modelID;\n  setSelectedModel: (model: modelID) => void;\n}\n\nexport const Textarea = ({\n  input,\n  handleInputChange,\n  isLoading,\n  status,\n  stop,\n  selectedModel,\n  setSelectedModel,\n}: InputProps) => {\n  const isStreaming = status === \"streaming\" || status === \"submitted\";\n\n  return (\n    <div className=\"relative w-full\">\n      <ShadcnTextarea\n        className=\"resize-none bg-background/50 dark:bg-muted/50 ocean:bg-muted/50 backdrop-blur-sm w-full rounded-2xl pr-12 pt-4 pb-16 border-input focus-visible:ring-ring placeholder:text-muted-foreground/80\"\n        value={input}\n        autoFocus\n        placeholder=\"Send a message...\"\n        onChange={handleInputChange}\n        onKeyDown={(e) => {\n          if (e.key === \"Enter\" && !e.shiftKey && !isLoading && input.trim()) {\n            e.preventDefault();\n            e.currentTarget.form?.requestSubmit();\n          }\n        }}\n      />\n      <ModelPicker\n        setSelectedModel={setSelectedModel}\n        selectedModel={selectedModel}\n      />\n\n      <button\n        type={isStreaming ? \"button\" : \"submit\"}\n        onClick={isStreaming ? stop : undefined}\n        disabled={\n          (!isStreaming && !input.trim()) ||\n          (isStreaming && status === \"submitted\")\n        }\n        className=\"absolute right-2 bottom-2 rounded-full p-2 bg-primary hover:bg-primary/90 disabled:bg-muted disabled:cursor-not-allowed transition-all duration-200\"\n      >\n        {isStreaming ? (\n          <Loader2 className=\"h-4 w-4 text-primary-foreground animate-spin\" />\n        ) : (\n          <ArrowUp className=\"h-4 w-4 text-primary-foreground\" />\n        )}\n      </button>\n    </div>\n  );\n};\n"
  },
  {
    "path": "app/chat/components/theme-provider.tsx",
    "content": "\"use client\";\n\nimport { ThemeProvider as NextThemesProvider } from \"next-themes\";\nimport type { ThemeProviderProps } from \"next-themes\";\n\nexport function ThemeProvider({ children, ...props }: ThemeProviderProps) {\n  return <NextThemesProvider {...props}>{children}</NextThemesProvider>;\n}\n"
  },
  {
    "path": "app/chat/components/theme-toggle.tsx",
    "content": "\"use client\";\n\nimport * as React from \"react\";\nimport {\n  CircleDashed,\n  Flame,\n  Sun,\n  Moon,\n  WavesIcon,\n  SunsetIcon,\n} from \"lucide-react\";\nimport { useTheme } from \"next-themes\";\nimport { Button } from \"./ui/button\";\nimport {\n  DropdownMenu,\n  DropdownMenuContent,\n  DropdownMenuItem,\n  DropdownMenuTrigger,\n} from \"./ui/dropdown-menu\";\nimport { cn } from \"~/chat/lib/utils\";\n\nexport function ThemeToggle({\n  className,\n  ...props\n}: React.ComponentProps<typeof Button>) {\n  const { setTheme } = useTheme();\n\n  return (\n    <DropdownMenu>\n      <DropdownMenuTrigger asChild={true}>\n        <Button\n          variant=\"ghost\"\n          size=\"icon\"\n          className={cn(`rounded-md h-8 w-8`, className)}\n          {...props}\n        >\n          <Flame className=\"h-4 w-4 rotate-0 scale-100 transition-all hover:text-sidebar-accent\" />\n          <span className=\"sr-only\">Toggle theme</span>\n        </Button>\n      </DropdownMenuTrigger>\n      <DropdownMenuContent align=\"end\">\n        <DropdownMenuItem onSelect={() => setTheme(\"dark\")}>\n          <Moon className=\"mr-2 h-4 w-4\" />\n          <span>Dark</span>\n        </DropdownMenuItem>\n        <DropdownMenuItem onSelect={() => setTheme(\"light\")}>\n          <Sun className=\"mr-2 h-4 w-4\" />\n          <span>Light</span>\n        </DropdownMenuItem>\n        <DropdownMenuItem onSelect={() => setTheme(\"black\")}>\n          <CircleDashed className=\"mr-2 h-4 w-4\" />\n          <span>Black</span>\n        </DropdownMenuItem>\n        {/* sunset theme */}\n        <DropdownMenuItem onSelect={() => setTheme(\"sunset\")}>\n          <SunsetIcon className=\"mr-2 h-4 w-4\" />\n          <span>Sunset</span>\n        </DropdownMenuItem>\n        <DropdownMenuItem onSelect={() => setTheme(\"ocean\")}>\n          <WavesIcon className=\"mr-2 h-4 w-4\" />\n          <span>Ocean</span>\n        </DropdownMenuItem>\n      </DropdownMenuContent>\n    </DropdownMenu>\n  );\n}\n"
  },
  {
    "path": "app/chat/components/tool-invocation.tsx",
    "content": "\"use client\";\n\nimport { useState } from \"react\";\nimport { motion, AnimatePresence } from \"motion/react\";\nimport {\n  ChevronDownIcon,\n  ChevronUpIcon,\n  Loader2,\n  CheckCircle2,\n  TerminalSquare,\n  Code,\n  ArrowRight,\n  Circle,\n} from \"lucide-react\";\nimport { cn } from \"~/chat/lib/utils\";\n\ninterface ToolInvocationProps {\n  toolName: string;\n  state: string;\n  args: any;\n  result: any;\n  isLatestMessage: boolean;\n  status: string;\n}\n\nexport function ToolInvocation({\n  toolName,\n  state,\n  args,\n  result,\n  isLatestMessage,\n  status,\n}: ToolInvocationProps) {\n  const [isExpanded, setIsExpanded] = useState(false);\n\n  const variants = {\n    collapsed: {\n      height: 0,\n      opacity: 0,\n    },\n    expanded: {\n      height: \"auto\",\n      opacity: 1,\n    },\n  };\n\n  const getStatusIcon = () => {\n    if (state === \"call\") {\n      if (isLatestMessage && status !== \"ready\") {\n        return <Loader2 className=\"animate-spin h-3.5 w-3.5 text-primary/70\" />;\n      }\n      return (\n        <Circle className=\"h-3.5 w-3.5 fill-muted-foreground/10 text-muted-foreground/70\" />\n      );\n    }\n    return <CheckCircle2 size={14} className=\"text-primary/90\" />;\n  };\n\n  const getStatusClass = () => {\n    if (state === \"call\") {\n      if (isLatestMessage && status !== \"ready\") {\n        return \"text-primary\";\n      }\n      return \"text-muted-foreground\";\n    }\n    return \"text-primary\";\n  };\n\n  const formatContent = (content: any): string => {\n    try {\n      if (typeof content === \"string\") {\n        try {\n          const parsed = JSON.parse(content);\n          return JSON.stringify(parsed, null, 2);\n        } catch {\n          return content;\n        }\n      }\n      return JSON.stringify(content, null, 2);\n    } catch {\n      return String(content);\n    }\n  };\n\n  return (\n    <div\n      className={cn(\n        \"flex flex-col mb-2 rounded-md border border-border/50 overflow-hidden\",\n        \"bg-gradient-to-b from-background to-muted/30 backdrop-blur-sm\",\n        \"transition-all duration-200 hover:border-border/80 group\",\n      )}\n    >\n      <div\n        className={cn(\n          \"flex items-center gap-2.5 px-3 py-2 cursor-pointer transition-colors\",\n          \"hover:bg-muted/20\",\n        )}\n        onClick={() => setIsExpanded(!isExpanded)}\n      >\n        <div className=\"flex items-center justify-center rounded-full w-5 h-5 bg-primary/5 text-primary\">\n          <TerminalSquare className=\"h-3.5 w-3.5\" />\n        </div>\n        <div className=\"flex items-center gap-1.5 text-xs font-medium text-muted-foreground flex-1\">\n          <span className=\"text-foreground font-semibold tracking-tight\">\n            {toolName}\n          </span>\n          <ArrowRight className=\"h-3 w-3 text-muted-foreground/50\" />\n          <span className={cn(\"font-medium\", getStatusClass())}>\n            {state === \"call\"\n              ? isLatestMessage && status !== \"ready\"\n                ? \"Running\"\n                : \"Waiting\"\n              : \"Completed\"}\n          </span>\n        </div>\n        <div className=\"flex items-center gap-2 opacity-70 group-hover:opacity-100 transition-opacity\">\n          {getStatusIcon()}\n          <div className=\"bg-muted/30 rounded-full p-0.5 border border-border/30\">\n            {isExpanded ? (\n              <ChevronUpIcon className=\"h-3 w-3 text-foreground/70\" />\n            ) : (\n              <ChevronDownIcon className=\"h-3 w-3 text-foreground/70\" />\n            )}\n          </div>\n        </div>\n      </div>\n\n      <AnimatePresence initial={false}>\n        {isExpanded && (\n          <motion.div\n            initial=\"collapsed\"\n            animate=\"expanded\"\n            exit=\"collapsed\"\n            variants={variants}\n            transition={{ duration: 0.2 }}\n            className=\"space-y-2 px-3 pb-3\"\n          >\n            {!!args && (\n              <div className=\"space-y-1.5\">\n                <div className=\"flex items-center gap-1.5 text-xs text-muted-foreground/70 pt-1.5\">\n                  <Code className=\"h-3 w-3\" />\n                  <span className=\"font-medium\">Arguments</span>\n                </div>\n                <pre\n                  className={cn(\n                    \"text-xs font-mono p-2.5 rounded-md overflow-x-auto\",\n                    \"border border-border/40 bg-muted/10\",\n                  )}\n                >\n                  {formatContent(args)}\n                </pre>\n              </div>\n            )}\n\n            {!!result && (\n              <div className=\"space-y-1.5\">\n                <div className=\"flex items-center gap-1.5 text-xs text-muted-foreground/70\">\n                  <ArrowRight className=\"h-3 w-3\" />\n                  <span className=\"font-medium\">Result</span>\n                </div>\n                <pre\n                  className={cn(\n                    \"text-xs font-mono p-2.5 rounded-md overflow-x-auto max-h-[300px] overflow-y-auto\",\n                    \"border border-border/40 bg-muted/10\",\n                  )}\n                >\n                  {formatContent(result)}\n                </pre>\n              </div>\n            )}\n          </motion.div>\n        )}\n      </AnimatePresence>\n    </div>\n  );\n}\n"
  },
  {
    "path": "app/chat/components/ui/accordion.tsx",
    "content": "\"use client\";\n\nimport * as React from \"react\";\nimport * as AccordionPrimitive from \"@radix-ui/react-accordion\";\nimport { ChevronDownIcon } from \"lucide-react\";\n\nimport { cn } from \"~/chat/lib/utils\";\n\nfunction Accordion({\n  ...props\n}: React.ComponentProps<typeof AccordionPrimitive.Root>) {\n  return <AccordionPrimitive.Root data-slot=\"accordion\" {...props} />;\n}\n\nfunction AccordionItem({\n  className,\n  ...props\n}: React.ComponentProps<typeof AccordionPrimitive.Item>) {\n  return (\n    <AccordionPrimitive.Item\n      data-slot=\"accordion-item\"\n      className={cn(\"mb-1\", className)}\n      {...props}\n    />\n  );\n}\n\nfunction AccordionTrigger({\n  className,\n  children,\n  ...props\n}: React.ComponentProps<typeof AccordionPrimitive.Trigger>) {\n  return (\n    <AccordionPrimitive.Header className=\"flex\">\n      <AccordionPrimitive.Trigger\n        data-slot=\"accordion-trigger\"\n        className={cn(\n          \"focus-visible:ring-ring/30 flex flex-1 items-center justify-between py-3 text-left text-sm font-medium transition-all outline-none focus-visible:ring-2 rounded-md disabled:opacity-50 [&[data-state=open]>svg]:rotate-180\",\n          className,\n        )}\n        {...props}\n      >\n        {children}\n        <ChevronDownIcon className=\"text-muted-foreground/70 size-3.5 shrink-0 transition-transform duration-200\" />\n      </AccordionPrimitive.Trigger>\n    </AccordionPrimitive.Header>\n  );\n}\n\nfunction AccordionContent({\n  className,\n  children,\n  ...props\n}: React.ComponentProps<typeof AccordionPrimitive.Content>) {\n  return (\n    <AccordionPrimitive.Content\n      data-slot=\"accordion-content\"\n      className=\"overflow-hidden text-sm transition-all data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down\"\n      {...props}\n    >\n      <div className={cn(\"py-2 pl-1\", className)}>{children}</div>\n    </AccordionPrimitive.Content>\n  );\n}\n\nexport { Accordion, AccordionItem, AccordionTrigger, AccordionContent };\n"
  },
  {
    "path": "app/chat/components/ui/avatar.tsx",
    "content": "\"use client\";\n\nimport * as React from \"react\";\nimport * as AvatarPrimitive from \"@radix-ui/react-avatar\";\n\nimport { cn } from \"~/chat/lib/utils\";\n\nfunction Avatar({\n  className,\n  ...props\n}: React.ComponentProps<typeof AvatarPrimitive.Root>) {\n  return (\n    <AvatarPrimitive.Root\n      data-slot=\"avatar\"\n      className={cn(\n        \"relative flex size-8 shrink-0 overflow-hidden rounded-full\",\n        className,\n      )}\n      {...props}\n    />\n  );\n}\n\nfunction AvatarImage({\n  className,\n  ...props\n}: React.ComponentProps<typeof AvatarPrimitive.Image>) {\n  return (\n    <AvatarPrimitive.Image\n      data-slot=\"avatar-image\"\n      className={cn(\"aspect-square size-full\", className)}\n      {...props}\n    />\n  );\n}\n\nfunction AvatarFallback({\n  className,\n  ...props\n}: React.ComponentProps<typeof AvatarPrimitive.Fallback>) {\n  return (\n    <AvatarPrimitive.Fallback\n      data-slot=\"avatar-fallback\"\n      className={cn(\n        \"bg-muted flex size-full items-center justify-center rounded-full\",\n        className,\n      )}\n      {...props}\n    />\n  );\n}\n\nexport { Avatar, AvatarImage, AvatarFallback };\n"
  },
  {
    "path": "app/chat/components/ui/badge.tsx",
    "content": "import * as React from \"react\";\nimport { Slot } from \"@radix-ui/react-slot\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"~/chat/lib/utils\";\n\nconst badgeVariants = cva(\n  \"inline-flex items-center justify-center rounded-md border px-2 py-0.5 text-xs font-medium w-fit whitespace-nowrap shrink-0 [&>svg]:size-3 gap-1 [&>svg]:pointer-events-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 ocean:aria-invalid:ring-destructive/40 aria-invalid:border-destructive transition-[color,box-shadow] overflow-hidden\",\n  {\n    variants: {\n      variant: {\n        default:\n          \"border-transparent bg-primary text-primary-foreground [a&]:hover:bg-primary/90\",\n        secondary:\n          \"border-transparent bg-secondary text-secondary-foreground [a&]:hover:bg-secondary/90\",\n        destructive:\n          \"border-transparent bg-destructive text-white [a&]:hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 ocean:focus-visible:ring-destructive/40 dark:bg-destructive/60 ocean:bg-destructive/60\",\n        outline:\n          \"text-foreground [a&]:hover:bg-accent [a&]:hover:text-accent-foreground\",\n      },\n    },\n    defaultVariants: {\n      variant: \"default\",\n    },\n  },\n);\n\nfunction Badge({\n  className,\n  variant,\n  asChild = false,\n  ...props\n}: React.ComponentProps<\"span\"> &\n  VariantProps<typeof badgeVariants> & { asChild?: boolean }) {\n  const Comp = asChild ? Slot : \"span\";\n\n  return (\n    <Comp\n      data-slot=\"badge\"\n      className={cn(badgeVariants({ variant }), className)}\n      {...props}\n    />\n  );\n}\n\nexport { Badge, badgeVariants };\n"
  },
  {
    "path": "app/chat/components/ui/button.tsx",
    "content": "import * as React from \"react\";\nimport { Slot } from \"@radix-ui/react-slot\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"~/chat/lib/utils\";\n\nconst buttonVariants = cva(\n  \"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 ocean:aria-invalid:ring-destructive/40 aria-invalid:border-destructive\",\n  {\n    variants: {\n      variant: {\n        default:\n          \"bg-primary text-primary-foreground shadow-xs hover:bg-primary/90\",\n        destructive:\n          \"bg-destructive text-white shadow-xs hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 ocean:focus-visible:ring-destructive/40 dark:bg-destructive/60 ocean:bg-destructive/60\",\n        outline:\n          \"border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 ocean:bg-input/30 dark:border-input ocean:border-input dark:hover:bg-input/50 ocean:hover:bg-input/50\",\n        secondary:\n          \"bg-secondary text-secondary-foreground shadow-xs hover:bg-secondary/80\",\n        ghost:\n          \"hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50 ocean:hover:bg-accent/50\",\n        link: \"text-primary underline-offset-4 hover:underline\",\n      },\n      size: {\n        default: \"h-9 px-4 py-2 has-[>svg]:px-3\",\n        sm: \"h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5\",\n        lg: \"h-10 rounded-md px-6 has-[>svg]:px-4\",\n        icon: \"size-9\",\n      },\n    },\n    defaultVariants: {\n      variant: \"default\",\n      size: \"default\",\n    },\n  },\n);\n\nfunction Button({\n  className,\n  variant,\n  size,\n  asChild = false,\n  ...props\n}: React.ComponentProps<\"button\"> &\n  VariantProps<typeof buttonVariants> & {\n    asChild?: boolean;\n  }) {\n  const Comp = asChild ? Slot : \"button\";\n\n  return (\n    <Comp\n      data-slot=\"button\"\n      className={cn(buttonVariants({ variant, size, className }))}\n      {...props}\n    />\n  );\n}\n\nexport { Button, buttonVariants };\n"
  },
  {
    "path": "app/chat/components/ui/dialog.tsx",
    "content": "\"use client\";\n\nimport * as React from \"react\";\nimport * as DialogPrimitive from \"@radix-ui/react-dialog\";\nimport { XIcon } from \"lucide-react\";\n\nimport { cn } from \"~/chat/lib/utils\";\n\nfunction Dialog({\n  ...props\n}: React.ComponentProps<typeof DialogPrimitive.Root>) {\n  return <DialogPrimitive.Root data-slot=\"dialog\" {...props} />;\n}\n\nfunction DialogTrigger({\n  ...props\n}: React.ComponentProps<typeof DialogPrimitive.Trigger>) {\n  return <DialogPrimitive.Trigger data-slot=\"dialog-trigger\" {...props} />;\n}\n\nfunction DialogPortal({\n  ...props\n}: React.ComponentProps<typeof DialogPrimitive.Portal>) {\n  return <DialogPrimitive.Portal data-slot=\"dialog-portal\" {...props} />;\n}\n\nfunction DialogClose({\n  ...props\n}: React.ComponentProps<typeof DialogPrimitive.Close>) {\n  return <DialogPrimitive.Close data-slot=\"dialog-close\" {...props} />;\n}\n\nfunction DialogOverlay({\n  className,\n  ...props\n}: React.ComponentProps<typeof DialogPrimitive.Overlay>) {\n  return (\n    <DialogPrimitive.Overlay\n      data-slot=\"dialog-overlay\"\n      className={cn(\n        \"data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50\",\n        className,\n      )}\n      {...props}\n    />\n  );\n}\n\nfunction DialogContent({\n  className,\n  children,\n  ...props\n}: React.ComponentProps<typeof DialogPrimitive.Content>) {\n  return (\n    <DialogPortal data-slot=\"dialog-portal\">\n      <DialogOverlay />\n      <DialogPrimitive.Content\n        data-slot=\"dialog-content\"\n        className={cn(\n          \"bg-background data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border p-6 shadow-lg duration-200 sm:max-w-lg\",\n          className,\n        )}\n        {...props}\n      >\n        {children}\n        <DialogPrimitive.Close className=\"ring-offset-background focus:ring-ring data-[state=open]:bg-accent data-[state=open]:text-muted-foreground absolute top-4 right-4 rounded-xs opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\">\n          <XIcon />\n          <span className=\"sr-only\">Close</span>\n        </DialogPrimitive.Close>\n      </DialogPrimitive.Content>\n    </DialogPortal>\n  );\n}\n\nfunction DialogHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n  return (\n    <div\n      data-slot=\"dialog-header\"\n      className={cn(\"flex flex-col gap-2 text-center sm:text-left\", className)}\n      {...props}\n    />\n  );\n}\n\nfunction DialogFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n  return (\n    <div\n      data-slot=\"dialog-footer\"\n      className={cn(\n        \"flex flex-col-reverse gap-2 sm:flex-row sm:justify-end\",\n        className,\n      )}\n      {...props}\n    />\n  );\n}\n\nfunction DialogTitle({\n  className,\n  ...props\n}: React.ComponentProps<typeof DialogPrimitive.Title>) {\n  return (\n    <DialogPrimitive.Title\n      data-slot=\"dialog-title\"\n      className={cn(\"text-lg leading-none font-semibold\", className)}\n      {...props}\n    />\n  );\n}\n\nfunction DialogDescription({\n  className,\n  ...props\n}: React.ComponentProps<typeof DialogPrimitive.Description>) {\n  return (\n    <DialogPrimitive.Description\n      data-slot=\"dialog-description\"\n      className={cn(\"text-muted-foreground text-sm\", className)}\n      {...props}\n    />\n  );\n}\n\nexport {\n  Dialog,\n  DialogClose,\n  DialogContent,\n  DialogDescription,\n  DialogFooter,\n  DialogHeader,\n  DialogOverlay,\n  DialogPortal,\n  DialogTitle,\n  DialogTrigger,\n};\n"
  },
  {
    "path": "app/chat/components/ui/dropdown-menu.tsx",
    "content": "\"use client\";\n\nimport * as React from \"react\";\nimport * as DropdownMenuPrimitive from \"@radix-ui/react-dropdown-menu\";\nimport { CheckIcon, ChevronRightIcon, CircleIcon } from \"lucide-react\";\n\nimport { cn } from \"~/chat/lib/utils\";\n\nfunction DropdownMenu({\n  ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Root>) {\n  return <DropdownMenuPrimitive.Root data-slot=\"dropdown-menu\" {...props} />;\n}\n\nfunction DropdownMenuPortal({\n  ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Portal>) {\n  return (\n    <DropdownMenuPrimitive.Portal data-slot=\"dropdown-menu-portal\" {...props} />\n  );\n}\n\nfunction DropdownMenuTrigger({\n  ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Trigger>) {\n  return (\n    <DropdownMenuPrimitive.Trigger\n      data-slot=\"dropdown-menu-trigger\"\n      {...props}\n    />\n  );\n}\n\nfunction DropdownMenuContent({\n  className,\n  sideOffset = 4,\n  ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Content>) {\n  return (\n    <DropdownMenuPrimitive.Portal>\n      <DropdownMenuPrimitive.Content\n        data-slot=\"dropdown-menu-content\"\n        sideOffset={sideOffset}\n        className={cn(\n          \"bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 max-h-(--radix-dropdown-menu-content-available-height) min-w-[8rem] origin-(--radix-dropdown-menu-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border p-1 shadow-md\",\n          className,\n        )}\n        {...props}\n      />\n    </DropdownMenuPrimitive.Portal>\n  );\n}\n\nfunction DropdownMenuGroup({\n  ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Group>) {\n  return (\n    <DropdownMenuPrimitive.Group data-slot=\"dropdown-menu-group\" {...props} />\n  );\n}\n\nfunction DropdownMenuItem({\n  className,\n  inset,\n  variant = \"default\",\n  ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Item> & {\n  inset?: boolean;\n  variant?: \"default\" | \"destructive\";\n}) {\n  return (\n    <DropdownMenuPrimitive.Item\n      data-slot=\"dropdown-menu-item\"\n      data-inset={inset}\n      data-variant={variant}\n      className={cn(\n        \"focus:bg-accent focus:text-accent-foreground data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 dark:data-[variant=destructive]:focus:bg-destructive/20 ocean:data-[variant=destructive]:focus:bg-destructive/20 data-[variant=destructive]:focus:text-destructive data-[variant=destructive]:*:[svg]:!text-destructive [&_svg:not([class*='text-'])]:text-muted-foreground relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[inset]:pl-8 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n        className,\n      )}\n      {...props}\n    />\n  );\n}\n\nfunction DropdownMenuCheckboxItem({\n  className,\n  children,\n  checked,\n  ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.CheckboxItem>) {\n  return (\n    <DropdownMenuPrimitive.CheckboxItem\n      data-slot=\"dropdown-menu-checkbox-item\"\n      className={cn(\n        \"focus:bg-accent focus:text-accent-foreground relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pr-2 pl-8 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n        className,\n      )}\n      checked={checked}\n      {...props}\n    >\n      <span className=\"pointer-events-none absolute left-2 flex size-3.5 items-center justify-center\">\n        <DropdownMenuPrimitive.ItemIndicator>\n          <CheckIcon className=\"size-4\" />\n        </DropdownMenuPrimitive.ItemIndicator>\n      </span>\n      {children}\n    </DropdownMenuPrimitive.CheckboxItem>\n  );\n}\n\nfunction DropdownMenuRadioGroup({\n  ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.RadioGroup>) {\n  return (\n    <DropdownMenuPrimitive.RadioGroup\n      data-slot=\"dropdown-menu-radio-group\"\n      {...props}\n    />\n  );\n}\n\nfunction DropdownMenuRadioItem({\n  className,\n  children,\n  ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.RadioItem>) {\n  return (\n    <DropdownMenuPrimitive.RadioItem\n      data-slot=\"dropdown-menu-radio-item\"\n      className={cn(\n        \"focus:bg-accent focus:text-accent-foreground relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pr-2 pl-8 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n        className,\n      )}\n      {...props}\n    >\n      <span className=\"pointer-events-none absolute left-2 flex size-3.5 items-center justify-center\">\n        <DropdownMenuPrimitive.ItemIndicator>\n          <CircleIcon className=\"size-2 fill-current\" />\n        </DropdownMenuPrimitive.ItemIndicator>\n      </span>\n      {children}\n    </DropdownMenuPrimitive.RadioItem>\n  );\n}\n\nfunction DropdownMenuLabel({\n  className,\n  inset,\n  ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Label> & {\n  inset?: boolean;\n}) {\n  return (\n    <DropdownMenuPrimitive.Label\n      data-slot=\"dropdown-menu-label\"\n      data-inset={inset}\n      className={cn(\n        \"px-2 py-1.5 text-sm font-medium data-[inset]:pl-8\",\n        className,\n      )}\n      {...props}\n    />\n  );\n}\n\nfunction DropdownMenuSeparator({\n  className,\n  ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Separator>) {\n  return (\n    <DropdownMenuPrimitive.Separator\n      data-slot=\"dropdown-menu-separator\"\n      className={cn(\"bg-border -mx-1 my-1 h-px\", className)}\n      {...props}\n    />\n  );\n}\n\nfunction DropdownMenuShortcut({\n  className,\n  ...props\n}: React.ComponentProps<\"span\">) {\n  return (\n    <span\n      data-slot=\"dropdown-menu-shortcut\"\n      className={cn(\n        \"text-muted-foreground ml-auto text-xs tracking-widest\",\n        className,\n      )}\n      {...props}\n    />\n  );\n}\n\nfunction DropdownMenuSub({\n  ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Sub>) {\n  return <DropdownMenuPrimitive.Sub data-slot=\"dropdown-menu-sub\" {...props} />;\n}\n\nfunction DropdownMenuSubTrigger({\n  className,\n  inset,\n  children,\n  ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.SubTrigger> & {\n  inset?: boolean;\n}) {\n  return (\n    <DropdownMenuPrimitive.SubTrigger\n      data-slot=\"dropdown-menu-sub-trigger\"\n      data-inset={inset}\n      className={cn(\n        \"focus:bg-accent focus:text-accent-foreground data-[state=open]:bg-accent data-[state=open]:text-accent-foreground flex cursor-default items-center rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[inset]:pl-8\",\n        className,\n      )}\n      {...props}\n    >\n      {children}\n      <ChevronRightIcon className=\"ml-auto size-4\" />\n    </DropdownMenuPrimitive.SubTrigger>\n  );\n}\n\nfunction DropdownMenuSubContent({\n  className,\n  ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.SubContent>) {\n  return (\n    <DropdownMenuPrimitive.SubContent\n      data-slot=\"dropdown-menu-sub-content\"\n      className={cn(\n        \"bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 min-w-[8rem] origin-(--radix-dropdown-menu-content-transform-origin) overflow-hidden rounded-md border p-1 shadow-lg\",\n        className,\n      )}\n      {...props}\n    />\n  );\n}\n\nexport {\n  DropdownMenu,\n  DropdownMenuPortal,\n  DropdownMenuTrigger,\n  DropdownMenuContent,\n  DropdownMenuGroup,\n  DropdownMenuLabel,\n  DropdownMenuItem,\n  DropdownMenuCheckboxItem,\n  DropdownMenuRadioGroup,\n  DropdownMenuRadioItem,\n  DropdownMenuSeparator,\n  DropdownMenuShortcut,\n  DropdownMenuSub,\n  DropdownMenuSubTrigger,\n  DropdownMenuSubContent,\n};\n"
  },
  {
    "path": "app/chat/components/ui/input.tsx",
    "content": "import * as React from \"react\";\n\nimport { cn } from \"~/chat/lib/utils\";\n\nfunction Input({ className, type, ...props }: React.ComponentProps<\"input\">) {\n  return (\n    <input\n      type={type}\n      data-slot=\"input\"\n      className={cn(\n        \"file:text-foreground placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground dark:bg-input/30 ocean:bg-input/30 border-input flex h-9 w-full min-w-0 rounded-md border bg-transparent px-3 py-1 text-base shadow-xs transition-[color,box-shadow] outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm\",\n        \"focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]\",\n        \"aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 ocean:aria-invalid:ring-destructive/40 aria-invalid:border-destructive\",\n        className,\n      )}\n      {...props}\n    />\n  );\n}\n\nexport { Input };\n"
  },
  {
    "path": "app/chat/components/ui/label.tsx",
    "content": "\"use client\";\n\nimport * as React from \"react\";\nimport * as LabelPrimitive from \"@radix-ui/react-label\";\n\nimport { cn } from \"~/chat/lib/utils\";\n\nfunction Label({\n  className,\n  ...props\n}: React.ComponentProps<typeof LabelPrimitive.Root>) {\n  return (\n    <LabelPrimitive.Root\n      data-slot=\"label\"\n      className={cn(\n        \"flex items-center gap-2 text-sm leading-none font-medium select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50\",\n        className,\n      )}\n      {...props}\n    />\n  );\n}\n\nexport { Label };\n"
  },
  {
    "path": "app/chat/components/ui/popover.tsx",
    "content": "\"use client\";\n\nimport * as React from \"react\";\nimport * as PopoverPrimitive from \"@radix-ui/react-popover\";\n\nimport { cn } from \"~/chat/lib/utils\";\n\nfunction Popover({\n  ...props\n}: React.ComponentProps<typeof PopoverPrimitive.Root>) {\n  return <PopoverPrimitive.Root data-slot=\"popover\" {...props} />;\n}\n\nfunction PopoverTrigger({\n  ...props\n}: React.ComponentProps<typeof PopoverPrimitive.Trigger>) {\n  return <PopoverPrimitive.Trigger data-slot=\"popover-trigger\" {...props} />;\n}\n\nfunction PopoverContent({\n  className,\n  align = \"center\",\n  sideOffset = 4,\n  ...props\n}: React.ComponentProps<typeof PopoverPrimitive.Content>) {\n  return (\n    <PopoverPrimitive.Portal>\n      <PopoverPrimitive.Content\n        data-slot=\"popover-content\"\n        align={align}\n        sideOffset={sideOffset}\n        className={cn(\n          \"bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 w-72 origin-(--radix-popover-content-transform-origin) rounded-md border p-4 shadow-md outline-hidden\",\n          className,\n        )}\n        {...props}\n      />\n    </PopoverPrimitive.Portal>\n  );\n}\n\nfunction PopoverAnchor({\n  ...props\n}: React.ComponentProps<typeof PopoverPrimitive.Anchor>) {\n  return <PopoverPrimitive.Anchor data-slot=\"popover-anchor\" {...props} />;\n}\n\nexport { Popover, PopoverTrigger, PopoverContent, PopoverAnchor };\n"
  },
  {
    "path": "app/chat/components/ui/scroll-area.tsx",
    "content": "\"use client\";\n\nimport * as React from \"react\";\nimport * as ScrollAreaPrimitive from \"@radix-ui/react-scroll-area\";\n\nimport { cn } from \"~/chat/lib/utils\";\n\nfunction ScrollArea({\n  className,\n  children,\n  ...props\n}: React.ComponentProps<typeof ScrollAreaPrimitive.Root>) {\n  return (\n    <ScrollAreaPrimitive.Root\n      data-slot=\"scroll-area\"\n      className={cn(\"relative\", className)}\n      {...props}\n    >\n      <ScrollAreaPrimitive.Viewport\n        data-slot=\"scroll-area-viewport\"\n        className=\"focus-visible:ring-ring/50 size-full rounded-[inherit] transition-[color,box-shadow] outline-none focus-visible:ring-[3px] focus-visible:outline-1\"\n      >\n        {children}\n      </ScrollAreaPrimitive.Viewport>\n      <ScrollBar />\n      <ScrollAreaPrimitive.Corner />\n    </ScrollAreaPrimitive.Root>\n  );\n}\n\nfunction ScrollBar({\n  className,\n  orientation = \"vertical\",\n  ...props\n}: React.ComponentProps<typeof ScrollAreaPrimitive.ScrollAreaScrollbar>) {\n  return (\n    <ScrollAreaPrimitive.ScrollAreaScrollbar\n      data-slot=\"scroll-area-scrollbar\"\n      orientation={orientation}\n      className={cn(\n        \"flex touch-none p-px transition-colors select-none\",\n        orientation === \"vertical\" &&\n          \"h-full w-2.5 border-l border-l-transparent\",\n        orientation === \"horizontal\" &&\n          \"h-2.5 flex-col border-t border-t-transparent\",\n        className,\n      )}\n      {...props}\n    >\n      <ScrollAreaPrimitive.ScrollAreaThumb\n        data-slot=\"scroll-area-thumb\"\n        className=\"bg-border relative flex-1 rounded-full\"\n      />\n    </ScrollAreaPrimitive.ScrollAreaScrollbar>\n  );\n}\n\nexport { ScrollArea, ScrollBar };\n"
  },
  {
    "path": "app/chat/components/ui/select.tsx",
    "content": "\"use client\";\n\nimport * as React from \"react\";\nimport * as SelectPrimitive from \"@radix-ui/react-select\";\nimport { CheckIcon, ChevronDownIcon, ChevronUpIcon } from \"lucide-react\";\n\nimport { cn } from \"~/chat/lib/utils\";\n\nfunction Select({\n  ...props\n}: React.ComponentProps<typeof SelectPrimitive.Root>) {\n  return <SelectPrimitive.Root data-slot=\"select\" {...props} />;\n}\n\nfunction SelectGroup({\n  ...props\n}: React.ComponentProps<typeof SelectPrimitive.Group>) {\n  return <SelectPrimitive.Group data-slot=\"select-group\" {...props} />;\n}\n\nfunction SelectValue({\n  ...props\n}: React.ComponentProps<typeof SelectPrimitive.Value>) {\n  return <SelectPrimitive.Value data-slot=\"select-value\" {...props} />;\n}\n\nfunction SelectTrigger({\n  className,\n  children,\n  ...props\n}: React.ComponentProps<typeof SelectPrimitive.Trigger>) {\n  return (\n    <SelectPrimitive.Trigger\n      data-slot=\"select-trigger\"\n      className={cn(\n        \"text-muted-foreground data-[placeholder]:text-muted-foreground [&_svg:not([class*='text-'])]:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive flex h-9 w-fit items-center justify-between gap-2 rounded-md bg-transparent px-3 py-2 text-sm whitespace-nowrap transition-[color,box-shadow] outline-none hover:bg-secondary data-[state=open]:bg-secondary disabled:cursor-not-allowed disabled:opacity-50 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-2 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n        className,\n      )}\n      {...props}\n    >\n      {children}\n      <SelectPrimitive.Icon asChild>\n        <ChevronDownIcon className=\"size-4 opacity-50\" />\n      </SelectPrimitive.Icon>\n    </SelectPrimitive.Trigger>\n  );\n}\n\nfunction SelectContent({\n  className,\n  children,\n  position = \"popper\",\n  ...props\n}: React.ComponentProps<typeof SelectPrimitive.Content>) {\n  return (\n    <SelectPrimitive.Portal>\n      <SelectPrimitive.Content\n        data-slot=\"select-content\"\n        className={cn(\n          \"bg-secondary text-secondary-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 relative z-50 max-h-(--radix-select-content-available-height) min-w-[8rem] overflow-x-hidden overflow-y-auto rounded-md border shadow-md\",\n          position === \"popper\" &&\n            \"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1\",\n          className,\n        )}\n        position={position}\n        {...props}\n      >\n        <SelectScrollUpButton />\n        <SelectPrimitive.Viewport\n          className={cn(\n            \"p-1\",\n            position === \"popper\" &&\n              \"h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)] scroll-my-1\",\n          )}\n        >\n          {children}\n        </SelectPrimitive.Viewport>\n        <SelectScrollDownButton />\n      </SelectPrimitive.Content>\n    </SelectPrimitive.Portal>\n  );\n}\n\nfunction SelectLabel({\n  className,\n  ...props\n}: React.ComponentProps<typeof SelectPrimitive.Label>) {\n  return (\n    <SelectPrimitive.Label\n      data-slot=\"select-label\"\n      className={cn(\"px-2 py-1.5 text-sm font-medium\", className)}\n      {...props}\n    />\n  );\n}\n\nfunction SelectItem({\n  className,\n  children,\n  ...props\n}: React.ComponentProps<typeof SelectPrimitive.Item>) {\n  return (\n    <SelectPrimitive.Item\n      data-slot=\"select-item\"\n      className={cn(\n        \"focus:bg-accent focus:text-accent-foreground [&_svg:not([class*='text-'])]:text-muted-foreground relative flex w-full cursor-default items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2\",\n        className,\n      )}\n      {...props}\n    >\n      <span className=\"absolute right-2 flex size-3.5 items-center justify-center\">\n        <SelectPrimitive.ItemIndicator>\n          <CheckIcon className=\"size-4\" />\n        </SelectPrimitive.ItemIndicator>\n      </span>\n      <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>\n    </SelectPrimitive.Item>\n  );\n}\n\nfunction SelectSeparator({\n  className,\n  ...props\n}: React.ComponentProps<typeof SelectPrimitive.Separator>) {\n  return (\n    <SelectPrimitive.Separator\n      data-slot=\"select-separator\"\n      className={cn(\"bg-border pointer-events-none -mx-1 my-1 h-px\", className)}\n      {...props}\n    />\n  );\n}\n\nfunction SelectScrollUpButton({\n  className,\n  ...props\n}: React.ComponentProps<typeof SelectPrimitive.ScrollUpButton>) {\n  return (\n    <SelectPrimitive.ScrollUpButton\n      data-slot=\"select-scroll-up-button\"\n      className={cn(\n        \"flex cursor-default items-center justify-center py-1\",\n        className,\n      )}\n      {...props}\n    >\n      <ChevronUpIcon className=\"size-4\" />\n    </SelectPrimitive.ScrollUpButton>\n  );\n}\n\nfunction SelectScrollDownButton({\n  className,\n  ...props\n}: React.ComponentProps<typeof SelectPrimitive.ScrollDownButton>) {\n  return (\n    <SelectPrimitive.ScrollDownButton\n      data-slot=\"select-scroll-down-button\"\n      className={cn(\n        \"flex cursor-default items-center justify-center py-1\",\n        className,\n      )}\n      {...props}\n    >\n      <ChevronDownIcon className=\"size-4\" />\n    </SelectPrimitive.ScrollDownButton>\n  );\n}\n\nexport {\n  Select,\n  SelectContent,\n  SelectGroup,\n  SelectItem,\n  SelectLabel,\n  SelectScrollDownButton,\n  SelectScrollUpButton,\n  SelectSeparator,\n  SelectTrigger,\n  SelectValue,\n};\n"
  },
  {
    "path": "app/chat/components/ui/separator.tsx",
    "content": "\"use client\";\n\nimport * as React from \"react\";\nimport * as SeparatorPrimitive from \"@radix-ui/react-separator\";\n\nimport { cn } from \"~/chat/lib/utils\";\n\nfunction Separator({\n  className,\n  orientation = \"horizontal\",\n  decorative = true,\n  ...props\n}: React.ComponentProps<typeof SeparatorPrimitive.Root>) {\n  return (\n    <SeparatorPrimitive.Root\n      data-slot=\"separator-root\"\n      decorative={decorative}\n      orientation={orientation}\n      className={cn(\n        \"bg-border shrink-0 data-[orientation=horizontal]:h-px data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-px\",\n        className,\n      )}\n      {...props}\n    />\n  );\n}\n\nexport { Separator };\n"
  },
  {
    "path": "app/chat/components/ui/sheet.tsx",
    "content": "\"use client\";\n\nimport * as React from \"react\";\nimport * as SheetPrimitive from \"@radix-ui/react-dialog\";\nimport { XIcon } from \"lucide-react\";\n\nimport { cn } from \"~/chat/lib/utils\";\n\nfunction Sheet({ ...props }: React.ComponentProps<typeof SheetPrimitive.Root>) {\n  return <SheetPrimitive.Root data-slot=\"sheet\" {...props} />;\n}\n\nfunction SheetTrigger({\n  ...props\n}: React.ComponentProps<typeof SheetPrimitive.Trigger>) {\n  return <SheetPrimitive.Trigger data-slot=\"sheet-trigger\" {...props} />;\n}\n\nfunction SheetClose({\n  ...props\n}: React.ComponentProps<typeof SheetPrimitive.Close>) {\n  return <SheetPrimitive.Close data-slot=\"sheet-close\" {...props} />;\n}\n\nfunction SheetPortal({\n  ...props\n}: React.ComponentProps<typeof SheetPrimitive.Portal>) {\n  return <SheetPrimitive.Portal data-slot=\"sheet-portal\" {...props} />;\n}\n\nfunction SheetOverlay({\n  className,\n  ...props\n}: React.ComponentProps<typeof SheetPrimitive.Overlay>) {\n  return (\n    <SheetPrimitive.Overlay\n      data-slot=\"sheet-overlay\"\n      className={cn(\n        \"data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50\",\n        className,\n      )}\n      {...props}\n    />\n  );\n}\n\nfunction SheetContent({\n  className,\n  children,\n  side = \"right\",\n  ...props\n}: React.ComponentProps<typeof SheetPrimitive.Content> & {\n  side?: \"top\" | \"right\" | \"bottom\" | \"left\";\n}) {\n  return (\n    <SheetPortal>\n      <SheetOverlay />\n      <SheetPrimitive.Content\n        data-slot=\"sheet-content\"\n        className={cn(\n          \"bg-background data-[state=open]:animate-in data-[state=closed]:animate-out fixed z-50 flex flex-col gap-4 shadow-lg transition ease-in-out data-[state=closed]:duration-300 data-[state=open]:duration-500\",\n          side === \"right\" &&\n            \"data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right inset-y-0 right-0 h-full w-3/4 border-l sm:max-w-sm\",\n          side === \"left\" &&\n            \"data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left inset-y-0 left-0 h-full w-3/4 border-r sm:max-w-sm\",\n          side === \"top\" &&\n            \"data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top inset-x-0 top-0 h-auto border-b\",\n          side === \"bottom\" &&\n            \"data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom inset-x-0 bottom-0 h-auto border-t\",\n          className,\n        )}\n        {...props}\n      >\n        {children}\n        <SheetPrimitive.Close className=\"ring-offset-background focus:ring-ring data-[state=open]:bg-secondary absolute top-4 right-4 rounded-xs opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none\">\n          <XIcon className=\"size-4\" />\n          <span className=\"sr-only\">Close</span>\n        </SheetPrimitive.Close>\n      </SheetPrimitive.Content>\n    </SheetPortal>\n  );\n}\n\nfunction SheetHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n  return (\n    <div\n      data-slot=\"sheet-header\"\n      className={cn(\"flex flex-col gap-1.5 p-4\", className)}\n      {...props}\n    />\n  );\n}\n\nfunction SheetFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n  return (\n    <div\n      data-slot=\"sheet-footer\"\n      className={cn(\"mt-auto flex flex-col gap-2 p-4\", className)}\n      {...props}\n    />\n  );\n}\n\nfunction SheetTitle({\n  className,\n  ...props\n}: React.ComponentProps<typeof SheetPrimitive.Title>) {\n  return (\n    <SheetPrimitive.Title\n      data-slot=\"sheet-title\"\n      className={cn(\"text-foreground font-semibold\", className)}\n      {...props}\n    />\n  );\n}\n\nfunction SheetDescription({\n  className,\n  ...props\n}: React.ComponentProps<typeof SheetPrimitive.Description>) {\n  return (\n    <SheetPrimitive.Description\n      data-slot=\"sheet-description\"\n      className={cn(\"text-muted-foreground text-sm\", className)}\n      {...props}\n    />\n  );\n}\n\nexport {\n  Sheet,\n  SheetTrigger,\n  SheetClose,\n  SheetContent,\n  SheetHeader,\n  SheetFooter,\n  SheetTitle,\n  SheetDescription,\n};\n"
  },
  {
    "path": "app/chat/components/ui/sidebar.tsx",
    "content": "import * as React from \"react\";\nimport { Slot } from \"@radix-ui/react-slot\";\nimport { type VariantProps, cva } from \"class-variance-authority\";\nimport { PanelLeftIcon } from \"lucide-react\";\n\nimport { useIsMobile } from \"~/chat/hooks/use-mobile\";\nimport { cn } from \"~/chat/lib/utils\";\nimport { Button } from \"~/chat/components/ui/button\";\nimport { Input } from \"~/chat/components/ui/input\";\nimport { Separator } from \"~/chat/components/ui/separator\";\nimport {\n  Sheet,\n  SheetContent,\n  SheetDescription,\n  SheetHeader,\n  SheetTitle,\n} from \"~/chat/components/ui/sheet\";\nimport { Skeleton } from \"~/chat/components/ui/skeleton\";\nimport {\n  Tooltip,\n  TooltipContent,\n  TooltipProvider,\n  TooltipTrigger,\n} from \"~/chat/components/ui/tooltip\";\n\nconst SIDEBAR_COOKIE_NAME = \"sidebar_state\";\nconst SIDEBAR_COOKIE_MAX_AGE = 60 * 60 * 24 * 7;\nconst SIDEBAR_WIDTH = \"13rem\";\nconst SIDEBAR_WIDTH_MOBILE = \"15rem\";\nconst SIDEBAR_WIDTH_ICON = \"3rem\";\nconst SIDEBAR_KEYBOARD_SHORTCUT = \"b\";\n\ntype SidebarContextProps = {\n  state: \"expanded\" | \"collapsed\";\n  open: boolean;\n  setOpen: (open: boolean) => void;\n  openMobile: boolean;\n  setOpenMobile: (open: boolean) => void;\n  isMobile: boolean;\n  toggleSidebar: () => void;\n};\n\nconst SidebarContext = React.createContext<SidebarContextProps | null>(null);\n\nfunction useSidebar() {\n  const context = React.useContext(SidebarContext);\n  if (!context) {\n    throw new Error(\"useSidebar must be used within a SidebarProvider.\");\n  }\n\n  return context;\n}\n\nfunction SidebarProvider({\n  defaultOpen = true,\n  open: openProp,\n  onOpenChange: setOpenProp,\n  className,\n  style,\n  children,\n  ...props\n}: React.ComponentProps<\"div\"> & {\n  defaultOpen?: boolean;\n  open?: boolean;\n  onOpenChange?: (open: boolean) => void;\n}) {\n  const isMobile = useIsMobile();\n  const [openMobile, setOpenMobile] = React.useState(false);\n\n  // This is the internal state of the sidebar.\n  // We use openProp and setOpenProp for control from outside the component.\n  const [_open, _setOpen] = React.useState(defaultOpen);\n  const open = openProp ?? _open;\n  const setOpen = React.useCallback(\n    (value: boolean | ((value: boolean) => boolean)) => {\n      const openState = typeof value === \"function\" ? value(open) : value;\n      if (setOpenProp) {\n        setOpenProp(openState);\n      } else {\n        _setOpen(openState);\n      }\n\n      // This sets the cookie to keep the sidebar state.\n      document.cookie = `${SIDEBAR_COOKIE_NAME}=${openState}; path=/; max-age=${SIDEBAR_COOKIE_MAX_AGE}`;\n    },\n    [setOpenProp, open],\n  );\n\n  // Helper to toggle the sidebar.\n  const toggleSidebar = React.useCallback(() => {\n    return isMobile ? setOpenMobile((open) => !open) : setOpen((open) => !open);\n  }, [isMobile, setOpen, setOpenMobile]);\n\n  // Adds a keyboard shortcut to toggle the sidebar.\n  React.useEffect(() => {\n    const handleKeyDown = (event: KeyboardEvent) => {\n      if (\n        event.key === SIDEBAR_KEYBOARD_SHORTCUT &&\n        (event.metaKey || event.ctrlKey)\n      ) {\n        event.preventDefault();\n        toggleSidebar();\n      }\n    };\n\n    window.addEventListener(\"keydown\", handleKeyDown);\n    return () => window.removeEventListener(\"keydown\", handleKeyDown);\n  }, [toggleSidebar]);\n\n  // We add a state so that we can do data-state=\"expanded\" or \"collapsed\".\n  // This makes it easier to style the sidebar with Tailwind classes.\n  const state = open ? \"expanded\" : \"collapsed\";\n\n  const contextValue = React.useMemo<SidebarContextProps>(\n    () => ({\n      state,\n      open,\n      setOpen,\n      isMobile,\n      openMobile,\n      setOpenMobile,\n      toggleSidebar,\n    }),\n    [state, open, setOpen, isMobile, openMobile, setOpenMobile, toggleSidebar],\n  );\n\n  return (\n    <SidebarContext.Provider value={contextValue}>\n      <TooltipProvider delayDuration={0}>\n        <div\n          data-slot=\"sidebar-wrapper\"\n          style={\n            {\n              \"--sidebar-width\": SIDEBAR_WIDTH,\n              \"--sidebar-width-icon\": SIDEBAR_WIDTH_ICON,\n              ...style,\n            } as React.CSSProperties\n          }\n          className={cn(\n            \"group/sidebar-wrapper has-data-[variant=inset]:bg-sidebar flex min-h-svh w-full\",\n            className,\n          )}\n          {...props}\n        >\n          {children}\n        </div>\n      </TooltipProvider>\n    </SidebarContext.Provider>\n  );\n}\n\nfunction Sidebar({\n  side = \"left\",\n  variant = \"sidebar\",\n  collapsible = \"offcanvas\",\n  className,\n  children,\n  ...props\n}: React.ComponentProps<\"div\"> & {\n  side?: \"left\" | \"right\";\n  variant?: \"sidebar\" | \"floating\" | \"inset\";\n  collapsible?: \"offcanvas\" | \"icon\" | \"none\";\n}) {\n  const { isMobile, state, openMobile, setOpenMobile } = useSidebar();\n\n  if (collapsible === \"none\") {\n    return (\n      <div\n        data-slot=\"sidebar\"\n        className={cn(\n          \"bg-sidebar text-sidebar-foreground flex h-full w-(--sidebar-width) flex-col\",\n          className,\n        )}\n        {...props}\n      >\n        {children}\n      </div>\n    );\n  }\n\n  if (isMobile) {\n    return (\n      <Sheet open={openMobile} onOpenChange={setOpenMobile} {...props}>\n        <SheetContent\n          data-sidebar=\"sidebar\"\n          data-slot=\"sidebar\"\n          data-mobile=\"true\"\n          className=\"bg-sidebar text-sidebar-foreground w-(--sidebar-width) p-0 [&>button]:hidden\"\n          style={\n            {\n              \"--sidebar-width\": SIDEBAR_WIDTH_MOBILE,\n            } as React.CSSProperties\n          }\n          side={side}\n        >\n          <SheetHeader className=\"sr-only\">\n            <SheetTitle>Sidebar</SheetTitle>\n            <SheetDescription>Displays the mobile sidebar.</SheetDescription>\n          </SheetHeader>\n          <div className=\"flex h-full w-full flex-col\">{children}</div>\n        </SheetContent>\n      </Sheet>\n    );\n  }\n\n  return (\n    <div\n      className=\"group peer text-sidebar-foreground hidden md:block\"\n      data-state={state}\n      data-collapsible={state === \"collapsed\" ? collapsible : \"\"}\n      data-variant={variant}\n      data-side={side}\n      data-slot=\"sidebar\"\n    >\n      {/* This is what handles the sidebar gap on desktop */}\n      <div\n        data-slot=\"sidebar-gap\"\n        className={cn(\n          \"relative w-(--sidebar-width) bg-transparent transition-[width] duration-200 ease-linear\",\n          \"group-data-[collapsible=offcanvas]:w-0\",\n          \"group-data-[side=right]:rotate-180\",\n          variant === \"floating\" || variant === \"inset\"\n            ? \"group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4)))]\"\n            : \"group-data-[collapsible=icon]:w-(--sidebar-width-icon)\",\n        )}\n      />\n      <div\n        data-slot=\"sidebar-container\"\n        className={cn(\n          \"fixed inset-y-0 z-10 hidden h-svh w-(--sidebar-width) transition-[left,right,width] duration-200 ease-linear md:flex\",\n          side === \"left\"\n            ? \"left-0 group-data-[collapsible=offcanvas]:left-[calc(var(--sidebar-width)*-1)]\"\n            : \"right-0 group-data-[collapsible=offcanvas]:right-[calc(var(--sidebar-width)*-1)]\",\n          // Adjust the padding for floating and inset variants.\n          variant === \"floating\" || variant === \"inset\"\n            ? \"p-2 group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4))+2px)]\"\n            : \"group-data-[collapsible=icon]:w-(--sidebar-width-icon) group-data-[side=left]:border-r group-data-[side=right]:border-l\",\n          className,\n        )}\n        {...props}\n      >\n        <div\n          data-sidebar=\"sidebar\"\n          data-slot=\"sidebar-inner\"\n          className=\"bg-sidebar group-data-[variant=floating]:border-sidebar-border flex h-full w-full flex-col group-data-[variant=floating]:rounded-lg group-data-[variant=floating]:border group-data-[variant=floating]:shadow-sm\"\n        >\n          {children}\n        </div>\n      </div>\n    </div>\n  );\n}\n\nfunction SidebarTrigger({\n  className,\n  onClick,\n  ...props\n}: React.ComponentProps<typeof Button>) {\n  const { toggleSidebar } = useSidebar();\n\n  return (\n    <Button\n      data-sidebar=\"trigger\"\n      data-slot=\"sidebar-trigger\"\n      variant=\"ghost\"\n      size=\"icon\"\n      className={cn(\"size-7\", className)}\n      onClick={(event) => {\n        onClick?.(event);\n        toggleSidebar();\n      }}\n      {...props}\n    >\n      <PanelLeftIcon />\n      <span className=\"sr-only\">Toggle Sidebar</span>\n    </Button>\n  );\n}\n\nfunction SidebarRail({ className, ...props }: React.ComponentProps<\"button\">) {\n  const { toggleSidebar } = useSidebar();\n\n  return (\n    <button\n      data-sidebar=\"rail\"\n      data-slot=\"sidebar-rail\"\n      aria-label=\"Toggle Sidebar\"\n      tabIndex={-1}\n      onClick={toggleSidebar}\n      title=\"Toggle Sidebar\"\n      className={cn(\n        \"hover:after:bg-sidebar-border absolute inset-y-0 z-20 hidden w-4 -translate-x-1/2 transition-all ease-linear group-data-[side=left]:-right-4 group-data-[side=right]:left-0 after:absolute after:inset-y-0 after:left-1/2 after:w-[2px] sm:flex\",\n        \"in-data-[side=left]:cursor-w-resize in-data-[side=right]:cursor-e-resize\",\n        \"[[data-side=left][data-state=collapsed]_&]:cursor-e-resize [[data-side=right][data-state=collapsed]_&]:cursor-w-resize\",\n        \"hover:group-data-[collapsible=offcanvas]:bg-sidebar group-data-[collapsible=offcanvas]:translate-x-0 group-data-[collapsible=offcanvas]:after:left-full\",\n        \"[[data-side=left][data-collapsible=offcanvas]_&]:-right-2\",\n        \"[[data-side=right][data-collapsible=offcanvas]_&]:-left-2\",\n        className,\n      )}\n      {...props}\n    />\n  );\n}\n\nfunction SidebarInset({ className, ...props }: React.ComponentProps<\"main\">) {\n  return (\n    <main\n      data-slot=\"sidebar-inset\"\n      className={cn(\n        \"bg-background relative flex w-full flex-1 flex-col\",\n        \"md:peer-data-[variant=inset]:m-2 md:peer-data-[variant=inset]:ml-0 md:peer-data-[variant=inset]:rounded-xl md:peer-data-[variant=inset]:shadow-sm md:peer-data-[variant=inset]:peer-data-[state=collapsed]:ml-2\",\n        className,\n      )}\n      {...props}\n    />\n  );\n}\n\nfunction SidebarInput({\n  className,\n  ...props\n}: React.ComponentProps<typeof Input>) {\n  return (\n    <Input\n      data-slot=\"sidebar-input\"\n      data-sidebar=\"input\"\n      className={cn(\"bg-background h-8 w-full shadow-none\", className)}\n      {...props}\n    />\n  );\n}\n\nfunction SidebarHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n  return (\n    <div\n      data-slot=\"sidebar-header\"\n      data-sidebar=\"header\"\n      className={cn(\"flex flex-col gap-2 p-2\", className)}\n      {...props}\n    />\n  );\n}\n\nfunction SidebarFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n  return (\n    <div\n      data-slot=\"sidebar-footer\"\n      data-sidebar=\"footer\"\n      className={cn(\"flex flex-col gap-2 p-2\", className)}\n      {...props}\n    />\n  );\n}\n\nfunction SidebarSeparator({\n  className,\n  ...props\n}: React.ComponentProps<typeof Separator>) {\n  return (\n    <Separator\n      data-slot=\"sidebar-separator\"\n      data-sidebar=\"separator\"\n      className={cn(\"bg-sidebar-border mx-2 w-auto\", className)}\n      {...props}\n    />\n  );\n}\n\nfunction SidebarContent({ className, ...props }: React.ComponentProps<\"div\">) {\n  return (\n    <div\n      data-slot=\"sidebar-content\"\n      data-sidebar=\"content\"\n      className={cn(\n        \"flex min-h-0 flex-1 flex-col gap-2 overflow-auto group-data-[collapsible=icon]:overflow-hidden\",\n        className,\n      )}\n      {...props}\n    />\n  );\n}\n\nfunction SidebarGroup({ className, ...props }: React.ComponentProps<\"div\">) {\n  return (\n    <div\n      data-slot=\"sidebar-group\"\n      data-sidebar=\"group\"\n      className={cn(\"relative flex w-full min-w-0 flex-col p-2\", className)}\n      {...props}\n    />\n  );\n}\n\nfunction SidebarGroupLabel({\n  className,\n  asChild = false,\n  ...props\n}: React.ComponentProps<\"div\"> & { asChild?: boolean }) {\n  const Comp = asChild ? Slot : \"div\";\n\n  return (\n    <Comp\n      data-slot=\"sidebar-group-label\"\n      data-sidebar=\"group-label\"\n      className={cn(\n        \"text-sidebar-foreground/70 ring-sidebar-ring flex h-8 shrink-0 items-center rounded-md px-2 text-xs font-medium outline-hidden transition-[margin,opacity] duration-200 ease-linear focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0\",\n        \"group-data-[collapsible=icon]:-mt-8 group-data-[collapsible=icon]:opacity-0\",\n        className,\n      )}\n      {...props}\n    />\n  );\n}\n\nfunction SidebarGroupAction({\n  className,\n  asChild = false,\n  ...props\n}: React.ComponentProps<\"button\"> & { asChild?: boolean }) {\n  const Comp = asChild ? Slot : \"button\";\n\n  return (\n    <Comp\n      data-slot=\"sidebar-group-action\"\n      data-sidebar=\"group-action\"\n      className={cn(\n        \"text-sidebar-foreground ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground absolute top-3.5 right-3 flex aspect-square w-5 items-center justify-center rounded-md p-0 outline-hidden transition-transform focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0\",\n        // Increases the hit area of the button on mobile.\n        \"after:absolute after:-inset-2 md:after:hidden\",\n        \"group-data-[collapsible=icon]:hidden\",\n        className,\n      )}\n      {...props}\n    />\n  );\n}\n\nfunction SidebarGroupContent({\n  className,\n  ...props\n}: React.ComponentProps<\"div\">) {\n  return (\n    <div\n      data-slot=\"sidebar-group-content\"\n      data-sidebar=\"group-content\"\n      className={cn(\"w-full text-sm\", className)}\n      {...props}\n    />\n  );\n}\n\nfunction SidebarMenu({ className, ...props }: React.ComponentProps<\"ul\">) {\n  return (\n    <ul\n      data-slot=\"sidebar-menu\"\n      data-sidebar=\"menu\"\n      className={cn(\"flex w-full min-w-0 flex-col gap-1\", className)}\n      {...props}\n    />\n  );\n}\n\nfunction SidebarMenuItem({ className, ...props }: React.ComponentProps<\"li\">) {\n  return (\n    <li\n      data-slot=\"sidebar-menu-item\"\n      data-sidebar=\"menu-item\"\n      className={cn(\"group/menu-item relative\", className)}\n      {...props}\n    />\n  );\n}\n\nconst sidebarMenuButtonVariants = cva(\n  \"peer/menu-button flex w-full items-center gap-2 overflow-hidden rounded-md p-2 text-left text-sm outline-hidden ring-sidebar-ring transition-[width,height,padding] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 active:bg-sidebar-accent active:text-sidebar-accent-foreground disabled:pointer-events-none disabled:opacity-50 group-has-data-[sidebar=menu-action]/menu-item:pr-8 aria-disabled:pointer-events-none aria-disabled:opacity-50 data-[active=true]:bg-sidebar-accent data-[active=true]:font-medium data-[active=true]:text-sidebar-accent-foreground data-[state=open]:hover:bg-sidebar-accent data-[state=open]:hover:text-sidebar-accent-foreground group-data-[collapsible=icon]:size-8! group-data-[collapsible=icon]:p-2! [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0\",\n  {\n    variants: {\n      variant: {\n        default: \"hover:bg-sidebar-accent hover:text-sidebar-accent-foreground\",\n        outline:\n          \"bg-background shadow-[0_0_0_1px_hsl(var(--sidebar-border))] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground hover:shadow-[0_0_0_1px_hsl(var(--sidebar-accent))]\",\n      },\n      size: {\n        default: \"h-8 text-sm\",\n        sm: \"h-7 text-xs\",\n        lg: \"h-12 text-sm group-data-[collapsible=icon]:p-0!\",\n      },\n    },\n    defaultVariants: {\n      variant: \"default\",\n      size: \"default\",\n    },\n  },\n);\n\nfunction SidebarMenuButton({\n  asChild = false,\n  isActive = false,\n  variant = \"default\",\n  size = \"default\",\n  tooltip,\n  className,\n  asComponent = \"button\",\n  ...props\n}: React.ComponentProps<\"button\"> & {\n  asChild?: boolean;\n  isActive?: boolean;\n  asComponent?: \"button\" | \"span\" | \"a\" | \"div\";\n  tooltip?: string | React.ComponentProps<typeof TooltipContent>;\n} & VariantProps<typeof sidebarMenuButtonVariants>) {\n  const Comp = asChild ? Slot : (asComponent as React.ElementType);\n  const { isMobile, state } = useSidebar();\n\n  const button = (\n    <Comp\n      data-slot=\"sidebar-menu-button\"\n      data-sidebar=\"menu-button\"\n      data-size={size}\n      data-active={isActive}\n      className={cn(sidebarMenuButtonVariants({ variant, size }), className)}\n      {...props}\n    />\n  );\n\n  if (!tooltip) {\n    return button;\n  }\n\n  if (typeof tooltip === \"string\") {\n    tooltip = {\n      children: tooltip,\n    };\n  }\n\n  return (\n    <Tooltip>\n      <TooltipTrigger asChild>{button}</TooltipTrigger>\n      <TooltipContent\n        side=\"right\"\n        align=\"center\"\n        hidden={state !== \"collapsed\" || isMobile}\n        {...tooltip}\n      />\n    </Tooltip>\n  );\n}\n\nfunction SidebarMenuAction({\n  className,\n  asChild = false,\n  showOnHover = false,\n  ...props\n}: React.ComponentProps<\"button\"> & {\n  asChild?: boolean;\n  showOnHover?: boolean;\n}) {\n  const Comp = asChild ? Slot : \"button\";\n\n  return (\n    <Comp\n      data-slot=\"sidebar-menu-action\"\n      data-sidebar=\"menu-action\"\n      className={cn(\n        \"text-sidebar-foreground ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground peer-hover/menu-button:text-sidebar-accent-foreground absolute top-1.5 right-1 flex aspect-square w-5 items-center justify-center rounded-md p-0 outline-hidden transition-transform focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0\",\n        // Increases the hit area of the button on mobile.\n        \"after:absolute after:-inset-2 md:after:hidden\",\n        \"peer-data-[size=sm]/menu-button:top-1\",\n        \"peer-data-[size=default]/menu-button:top-1.5\",\n        \"peer-data-[size=lg]/menu-button:top-2.5\",\n        \"group-data-[collapsible=icon]:hidden\",\n        showOnHover &&\n          \"peer-data-[active=true]/menu-button:text-sidebar-accent-foreground group-focus-within/menu-item:opacity-100 group-hover/menu-item:opacity-100 data-[state=open]:opacity-100 md:opacity-0\",\n        className,\n      )}\n      {...props}\n    />\n  );\n}\n\nfunction SidebarMenuBadge({\n  className,\n  ...props\n}: React.ComponentProps<\"div\">) {\n  return (\n    <div\n      data-slot=\"sidebar-menu-badge\"\n      data-sidebar=\"menu-badge\"\n      className={cn(\n        \"text-sidebar-foreground pointer-events-none absolute right-1 flex h-5 min-w-5 items-center justify-center rounded-md px-1 text-xs font-medium tabular-nums select-none\",\n        \"peer-hover/menu-button:text-sidebar-accent-foreground peer-data-[active=true]/menu-button:text-sidebar-accent-foreground\",\n        \"peer-data-[size=sm]/menu-button:top-1\",\n        \"peer-data-[size=default]/menu-button:top-1.5\",\n        \"peer-data-[size=lg]/menu-button:top-2.5\",\n        \"group-data-[collapsible=icon]:hidden\",\n        className,\n      )}\n      {...props}\n    />\n  );\n}\n\nfunction SidebarMenuSkeleton({\n  className,\n  showIcon = false,\n  ...props\n}: React.ComponentProps<\"div\"> & {\n  showIcon?: boolean;\n}) {\n  // Random width between 50 to 90%.\n  const width = React.useMemo(() => {\n    return `${Math.floor(Math.random() * 40) + 50}%`;\n  }, []);\n\n  return (\n    <div\n      data-slot=\"sidebar-menu-skeleton\"\n      data-sidebar=\"menu-skeleton\"\n      className={cn(\"flex h-8 items-center gap-2 rounded-md px-2\", className)}\n      {...props}\n    >\n      {showIcon && (\n        <Skeleton\n          className=\"size-4 rounded-md\"\n          data-sidebar=\"menu-skeleton-icon\"\n        />\n      )}\n      <Skeleton\n        className=\"h-4 max-w-(--skeleton-width) flex-1\"\n        data-sidebar=\"menu-skeleton-text\"\n        style={\n          {\n            \"--skeleton-width\": width,\n          } as React.CSSProperties\n        }\n      />\n    </div>\n  );\n}\n\nfunction SidebarMenuSub({ className, ...props }: React.ComponentProps<\"ul\">) {\n  return (\n    <ul\n      data-slot=\"sidebar-menu-sub\"\n      data-sidebar=\"menu-sub\"\n      className={cn(\n        \"border-sidebar-border mx-3.5 flex min-w-0 translate-x-px flex-col gap-1 border-l px-2.5 py-0.5\",\n        \"group-data-[collapsible=icon]:hidden\",\n        className,\n      )}\n      {...props}\n    />\n  );\n}\n\nfunction SidebarMenuSubItem({\n  className,\n  ...props\n}: React.ComponentProps<\"li\">) {\n  return (\n    <li\n      data-slot=\"sidebar-menu-sub-item\"\n      data-sidebar=\"menu-sub-item\"\n      className={cn(\"group/menu-sub-item relative\", className)}\n      {...props}\n    />\n  );\n}\n\nfunction SidebarMenuSubButton({\n  asChild = false,\n  size = \"md\",\n  isActive = false,\n  className,\n  ...props\n}: React.ComponentProps<\"a\"> & {\n  asChild?: boolean;\n  size?: \"sm\" | \"md\";\n  isActive?: boolean;\n}) {\n  const Comp = asChild ? Slot : \"a\";\n\n  return (\n    <Comp\n      data-slot=\"sidebar-menu-sub-button\"\n      data-sidebar=\"menu-sub-button\"\n      data-size={size}\n      data-active={isActive}\n      className={cn(\n        \"text-sidebar-foreground ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground active:bg-sidebar-accent active:text-sidebar-accent-foreground [&>svg]:text-sidebar-accent-foreground flex h-7 min-w-0 -translate-x-px items-center gap-2 overflow-hidden rounded-md px-2 outline-hidden focus-visible:ring-2 disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0\",\n        \"data-[active=true]:bg-sidebar-accent data-[active=true]:text-sidebar-accent-foreground\",\n        size === \"sm\" && \"text-xs\",\n        size === \"md\" && \"text-sm\",\n        \"group-data-[collapsible=icon]:hidden\",\n        className,\n      )}\n      {...props}\n    />\n  );\n}\n\nexport {\n  Sidebar,\n  SidebarContent,\n  SidebarFooter,\n  SidebarGroup,\n  SidebarGroupAction,\n  SidebarGroupContent,\n  SidebarGroupLabel,\n  SidebarHeader,\n  SidebarInput,\n  SidebarInset,\n  SidebarMenu,\n  SidebarMenuAction,\n  SidebarMenuBadge,\n  SidebarMenuButton,\n  SidebarMenuItem,\n  SidebarMenuSkeleton,\n  SidebarMenuSub,\n  SidebarMenuSubButton,\n  SidebarMenuSubItem,\n  SidebarProvider,\n  SidebarRail,\n  SidebarSeparator,\n  SidebarTrigger,\n  useSidebar,\n};\n"
  },
  {
    "path": "app/chat/components/ui/skeleton.tsx",
    "content": "import { cn } from \"~/chat/lib/utils\";\n\nfunction Skeleton({ className, ...props }: React.ComponentProps<\"div\">) {\n  return (\n    <div\n      data-slot=\"skeleton\"\n      className={cn(\"bg-accent animate-pulse rounded-md\", className)}\n      {...props}\n    />\n  );\n}\n\nexport { Skeleton };\n"
  },
  {
    "path": "app/chat/components/ui/sonner.tsx",
    "content": "\"use client\";\n\nimport { useTheme } from \"next-themes\";\nimport { Toaster as Sonner, type ToasterProps } from \"sonner\";\n\nconst Toaster = ({ ...props }: ToasterProps) => {\n  const { theme = \"system\" } = useTheme();\n\n  return (\n    <Sonner\n      theme={theme as ToasterProps[\"theme\"]}\n      className=\"toaster group\"\n      style={\n        {\n          \"--normal-bg\": \"var(--popover)\",\n          \"--normal-text\": \"var(--popover-foreground)\",\n          \"--normal-border\": \"var(--border)\",\n        } as React.CSSProperties\n      }\n      {...props}\n    />\n  );\n};\n\nexport { Toaster };\n"
  },
  {
    "path": "app/chat/components/ui/text-morph.tsx",
    "content": "import { cn } from \"~/chat/lib/utils\";\nimport {\n  AnimatePresence,\n  motion,\n  type Transition,\n  type Variants,\n} from \"motion/react\";\nimport { useMemo, useId } from \"react\";\n\nexport type TextMorphProps = {\n  children: string;\n  as?: React.ElementType;\n  className?: string;\n  style?: React.CSSProperties;\n  variants?: Variants;\n  transition?: Transition;\n};\n\nexport function TextMorph({\n  children,\n  as: Component = \"p\",\n  className,\n  style,\n  variants,\n  transition,\n}: TextMorphProps) {\n  const uniqueId = useId();\n\n  const characters = useMemo(() => {\n    const charCounts: Record<string, number> = {};\n\n    return children.split(\"\").map((char) => {\n      const lowerChar = char.toLowerCase();\n      charCounts[lowerChar] = (charCounts[lowerChar] || 0) + 1;\n\n      return {\n        id: `${uniqueId}-${lowerChar}${charCounts[lowerChar]}`,\n        label: char === \" \" ? \"\\u00A0\" : char,\n      };\n    });\n  }, [children, uniqueId]);\n\n  const defaultVariants: Variants = {\n    initial: { opacity: 0 },\n    animate: { opacity: 1 },\n    exit: { opacity: 0 },\n  };\n\n  const defaultTransition: Transition = {\n    type: \"spring\",\n    stiffness: 280,\n    damping: 18,\n    mass: 0.3,\n  };\n\n  return (\n    <Component className={cn(className)} aria-label={children} style={style}>\n      <AnimatePresence mode=\"popLayout\" initial={false}>\n        {characters.map((character) => (\n          <motion.span\n            key={character.id}\n            layoutId={character.id}\n            className=\"inline-block\"\n            aria-hidden=\"true\"\n            initial=\"initial\"\n            animate=\"animate\"\n            exit=\"exit\"\n            variants={variants || defaultVariants}\n            transition={transition || defaultTransition}\n          >\n            {character.label}\n          </motion.span>\n        ))}\n      </AnimatePresence>\n    </Component>\n  );\n}\n"
  },
  {
    "path": "app/chat/components/ui/textarea.tsx",
    "content": "import * as React from \"react\";\n\nimport { cn } from \"~/chat/lib/utils\";\n\nfunction Textarea({ className, ...props }: React.ComponentProps<\"textarea\">) {\n  return (\n    <textarea\n      data-slot=\"textarea\"\n      className={cn(\n        \"border-input placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 ocean:aria-invalid:ring-destructive/40 aria-invalid:border-destructive flex field-sizing-content min-h-16 w-full rounded-md border bg-transparent px-3 py-2 text-base shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 md:text-sm\",\n        className,\n      )}\n      {...props}\n    />\n  );\n}\n\nexport { Textarea };\n"
  },
  {
    "path": "app/chat/components/ui/tooltip.tsx",
    "content": "\"use client\";\n\nimport * as React from \"react\";\nimport * as TooltipPrimitive from \"@radix-ui/react-tooltip\";\n\nimport { cn } from \"~/chat/lib/utils\";\n\nfunction TooltipProvider({\n  delayDuration = 0,\n  ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Provider>) {\n  return (\n    <TooltipPrimitive.Provider\n      data-slot=\"tooltip-provider\"\n      delayDuration={delayDuration}\n      {...props}\n    />\n  );\n}\n\nfunction Tooltip({\n  ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Root>) {\n  return (\n    <TooltipProvider>\n      <TooltipPrimitive.Root data-slot=\"tooltip\" {...props} />\n    </TooltipProvider>\n  );\n}\n\nfunction TooltipTrigger({\n  ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Trigger>) {\n  return <TooltipPrimitive.Trigger data-slot=\"tooltip-trigger\" {...props} />;\n}\n\nfunction TooltipContent({\n  className,\n  sideOffset = 0,\n  children,\n  ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Content>) {\n  return (\n    <TooltipPrimitive.Portal>\n      <TooltipPrimitive.Content\n        data-slot=\"tooltip-content\"\n        sideOffset={sideOffset}\n        className={cn(\n          \"bg-primary text-primary-foreground animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 w-fit origin-(--radix-tooltip-content-transform-origin) rounded-md px-3 py-1.5 text-xs text-balance\",\n          className,\n        )}\n        {...props}\n      >\n        {children}\n        <TooltipPrimitive.Arrow className=\"bg-primary fill-primary z-50 size-2.5 translate-y-[calc(-50%_-_2px)] rotate-45 rounded-[2px]\" />\n      </TooltipPrimitive.Content>\n    </TooltipPrimitive.Portal>\n  );\n}\n\nexport { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider };\n"
  },
  {
    "path": "app/chat/hooks/use-mobile.ts",
    "content": "import * as React from \"react\";\n\nconst MOBILE_BREAKPOINT = 768;\n\nexport function useIsMobile() {\n  const [isMobile, setIsMobile] = React.useState<boolean | undefined>(\n    undefined,\n  );\n\n  React.useEffect(() => {\n    const mql = window.matchMedia(`(max-width: ${MOBILE_BREAKPOINT - 1}px)`);\n    const onChange = () => {\n      setIsMobile(window.innerWidth < MOBILE_BREAKPOINT);\n    };\n    mql.addEventListener(\"change\", onChange);\n    setIsMobile(window.innerWidth < MOBILE_BREAKPOINT);\n    return () => mql.removeEventListener(\"change\", onChange);\n  }, []);\n\n  return !!isMobile;\n}\n"
  },
  {
    "path": "app/chat/lib/constants.ts",
    "content": "/**\n * Constants used throughout the application\n */\n\n// Local storage keys\nexport const STORAGE_KEYS = {\n  MCP_SERVERS: \"mcp-servers\",\n  SELECTED_MCP_SERVERS: \"selected-mcp-servers\",\n  SIDEBAR_STATE: \"sidebar-state\",\n  API_KEYS: \"api-keys\",\n};\n"
  },
  {
    "path": "app/chat/lib/context/mcp-context.tsx",
    "content": "\"use client\";\n\nimport React, {\n  createContext,\n  useContext,\n  useEffect,\n  useMemo,\n  useState,\n} from \"react\";\nimport { useLocalStorage } from \"~/chat/lib/hooks/use-local-storage\";\nimport { STORAGE_KEYS } from \"~/chat/lib/constants\";\n\n// Define types for MCP server\nexport interface KeyValuePair {\n  key: string;\n  value: string;\n}\n\nexport interface MCPServer {\n  id: string;\n  name: string;\n  url: string;\n  type: \"sse\" | \"stdio\";\n  command?: string;\n  args?: string[];\n  env?: KeyValuePair[];\n  headers?: KeyValuePair[];\n  description?: string;\n  isFixed?: boolean;\n}\n\n// Type for processed MCP server config for API\nexport interface MCPServerApi {\n  type: \"sse\" | \"stdio\";\n  url: string;\n  command?: string;\n  args?: string[];\n  env?: KeyValuePair[];\n  headers?: KeyValuePair[];\n}\n\ninterface MCPContextType {\n  mcpServers: MCPServer[];\n  setMcpServers: (servers: MCPServer[]) => void;\n  selectedMcpServers: string[];\n  setSelectedMcpServers: (serverIds: string[]) => void;\n  mcpServersForApi: MCPServerApi[];\n  owner: string;\n  repo: string | null;\n  serverNameText: string;\n}\n\nconst MCPContext = createContext<MCPContextType | undefined>(undefined);\n\nexport function MCPProvider(props: {\n  children: React.ReactNode;\n  owner: string;\n  repo: string | null;\n  persist?: boolean;\n}) {\n  const { children, owner, repo, persist = false } = props;\n  const [mcpServersFromLocalStorage, setMcpServersFromLocalStorage] =\n    useLocalStorage<MCPServer[]>(STORAGE_KEYS.MCP_SERVERS, []);\n  const [\n    selectedMcpServersFromLocalStorage,\n    setSelectedMcpServersFromLocalStorage,\n  ] = useLocalStorage<string[]>(STORAGE_KEYS.SELECTED_MCP_SERVERS, []);\n\n  const [mcpServersFromState, setMcpServersFromState] = useState<MCPServer[]>(\n    [],\n  );\n  const [selectedMcpServersFromState, setSelectedMcpServersFromState] =\n    useState<string[]>([]);\n\n  const { serverNameText, serverUrl, serverName } = useMemo(() => {\n    const repoName = repo || \"\";\n    if (owner == \"cloudflare\" && repoName == \"docs\") {\n      return {\n        serverNameText: \"Cloudflare docs\",\n        serverUrl: \"https://docs.mcp.cloudflare.com/sse\",\n        serverName: \"Cloudflare Docs\",\n      };\n    }\n    return {\n      serverNameText: repoName ? `${repoName} docs` : \"Github docs\",\n      serverUrl: [\"https://gitmcp.io\", owner, repo].filter(Boolean).join(\"/\"),\n      serverName: repoName ? `${repoName} Docs` : \"MCP Docs\",\n    };\n  }, [owner, repo]);\n\n  const gitMcpServer = useMemo<MCPServer>(() => {\n    return {\n      id: [\"gitMcp\", owner, repo].filter(Boolean).join(\"-\"),\n      name: serverName,\n      url: serverUrl,\n      type: \"sse\",\n      isFixed: true,\n    };\n  }, [owner, repo]);\n\n  const {\n    mcpServers,\n    setMcpServers,\n    selectedMcpServers,\n    setSelectedMcpServers,\n  } = useMemo(() => {\n    if (persist) {\n      return {\n        mcpServers: [\n          gitMcpServer,\n          ...mcpServersFromLocalStorage.filter(\n            (server) => server.id !== gitMcpServer.id,\n          ),\n        ],\n        setMcpServers: setMcpServersFromLocalStorage,\n        selectedMcpServers: [\n          gitMcpServer.id,\n          ...selectedMcpServersFromLocalStorage.filter(\n            (id) => id !== gitMcpServer.id,\n          ),\n        ],\n        setSelectedMcpServers: setSelectedMcpServersFromLocalStorage,\n      };\n    }\n    return {\n      mcpServers: [\n        gitMcpServer,\n        ...mcpServersFromState.filter(\n          (server) => server.id !== gitMcpServer.id,\n        ),\n      ],\n      setMcpServers: setMcpServersFromState,\n      selectedMcpServers: [\n        gitMcpServer.id,\n        ...selectedMcpServersFromState.filter((id) => id !== gitMcpServer.id),\n      ],\n      setSelectedMcpServers: setSelectedMcpServersFromState,\n    };\n  }, [\n    persist,\n    mcpServersFromLocalStorage,\n    setMcpServersFromLocalStorage,\n    mcpServersFromState,\n    setMcpServersFromState,\n    selectedMcpServersFromState,\n    setSelectedMcpServersFromState,\n    selectedMcpServersFromLocalStorage,\n    setSelectedMcpServersFromLocalStorage,\n    gitMcpServer,\n  ]);\n\n  const [mcpServersForApi, setMcpServersForApi] = useState<MCPServerApi[]>([]);\n\n  // Process MCP servers for API consumption whenever server data changes\n  useEffect(() => {\n    if (!selectedMcpServers.length) {\n      setMcpServersForApi([]);\n      return;\n    }\n\n    const processedServers: MCPServerApi[] = selectedMcpServers\n      .map((id) => mcpServers.find((server) => server.id === id))\n      .filter((server): server is MCPServer => Boolean(server))\n      .map((server) => ({\n        type: server.type,\n        url: server.url,\n        command: server.command,\n        args: server.args,\n        env: server.env,\n        headers: server.headers,\n      }));\n\n    setMcpServersForApi(processedServers);\n  }, [mcpServers, selectedMcpServers]);\n\n  return (\n    <MCPContext.Provider\n      value={{\n        mcpServers,\n        setMcpServers,\n        selectedMcpServers,\n        setSelectedMcpServers,\n        mcpServersForApi,\n        owner,\n        repo,\n        serverNameText,\n      }}\n    >\n      {children}\n    </MCPContext.Provider>\n  );\n}\n\nexport function useMCP() {\n  const context = useContext(MCPContext);\n  if (context === undefined) {\n    throw new Error(\"useMCP must be used within an MCPProvider\");\n  }\n  return context;\n}\n"
  },
  {
    "path": "app/chat/lib/db/schema.ts",
    "content": "// Message role enum type\nexport enum MessageRole {\n  USER = \"user\",\n  ASSISTANT = \"assistant\",\n  TOOL = \"tool\",\n}\n\n// Types for structured message content\nexport type MessagePart = {\n  type: string;\n  text?: string;\n  toolCallId?: string;\n  toolName?: string;\n  args?: any;\n  result?: any;\n  [key: string]: any;\n};\n\nexport type Attachment = {\n  type: string;\n  [key: string]: any;\n};\n\nexport type Chat = {\n  id: string;\n  userId: string;\n  title: string;\n  createdAt: Date;\n  updatedAt: Date;\n};\nexport type Message = {\n  id: string;\n  chatId: string;\n  role: string;\n  parts: MessagePart[];\n  createdAt: Date;\n};\n"
  },
  {
    "path": "app/chat/lib/hooks/use-copy.ts",
    "content": "import { useState, useCallback } from \"react\";\n\nexport function useCopy(timeout = 2000) {\n  const [copied, setCopied] = useState(false);\n\n  const copy = useCallback(\n    async (text: string) => {\n      if (!navigator.clipboard) {\n        console.error(\"Clipboard API not available\");\n        return false;\n      }\n\n      try {\n        await navigator.clipboard.writeText(text);\n        setCopied(true);\n\n        setTimeout(() => {\n          setCopied(false);\n        }, timeout);\n\n        return true;\n      } catch (error) {\n        console.error(\"Failed to copy text:\", error);\n        return false;\n      }\n    },\n    [timeout],\n  );\n\n  return { copied, copy };\n}\n"
  },
  {
    "path": "app/chat/lib/hooks/use-local-storage.ts",
    "content": "import { useState, useEffect, useCallback } from \"react\";\n\ntype SetValue<T> = T | ((val: T) => T);\n\n/**\n * Custom hook for persistent localStorage state with SSR support\n * @param key The localStorage key\n * @param initialValue The initial value if no value exists in localStorage\n * @returns A stateful value and a function to update it\n */\nexport function useLocalStorage<T>(key: string, initialValue: T) {\n  // State to store our value\n  // Pass initial state function to useState so logic is only executed once\n  const [storedValue, setStoredValue] = useState<T>(initialValue);\n\n  // Check if we're in the browser environment\n  const isBrowser = typeof window !== \"undefined\";\n\n  // Initialize state from localStorage or use initialValue\n  useEffect(() => {\n    if (!isBrowser) return;\n\n    try {\n      const item = window.localStorage.getItem(key);\n      if (item) {\n        setStoredValue(parseJSON(item));\n      }\n    } catch (error) {\n      console.error(`Error reading localStorage key \"${key}\":`, error);\n    }\n  }, [key, isBrowser]);\n\n  // Return a wrapped version of useState's setter function that\n  // persists the new value to localStorage.\n  const setValue = useCallback(\n    (value: SetValue<T>) => {\n      if (!isBrowser) return;\n\n      try {\n        // Allow value to be a function so we have same API as useState\n        const valueToStore =\n          value instanceof Function ? value(storedValue) : value;\n\n        // Save state\n        setStoredValue(valueToStore);\n\n        // Save to localStorage\n        if (valueToStore === undefined) {\n          window.localStorage.removeItem(key);\n        } else {\n          window.localStorage.setItem(key, JSON.stringify(valueToStore));\n        }\n      } catch (error) {\n        console.error(`Error setting localStorage key \"${key}\":`, error);\n      }\n    },\n    [key, storedValue, isBrowser],\n  );\n\n  return [storedValue, setValue] as const;\n}\n\n// Helper function to parse JSON with error handling\nfunction parseJSON<T>(value: string): T {\n  try {\n    return JSON.parse(value);\n  } catch {\n    console.error(\"Error parsing JSON from localStorage\");\n    return {} as T;\n  }\n}\n\n/**\n * A hook to get a value from localStorage (read-only) with SSR support\n * @param key The localStorage key\n * @param defaultValue The default value if the key doesn't exist\n * @returns The value from localStorage or the default value\n */\nexport function useLocalStorageValue<T>(key: string, defaultValue: T): T {\n  const [value] = useLocalStorage<T>(key, defaultValue);\n  return value;\n}\n"
  },
  {
    "path": "app/chat/lib/hooks/use-scroll-to-bottom.tsx",
    "content": "import { useEffect, useRef, type RefObject } from \"react\";\n\nexport function useScrollToBottom(): [\n  RefObject<HTMLDivElement>,\n  RefObject<HTMLDivElement>,\n] {\n  const containerRef = useRef<HTMLDivElement>(null);\n  const endRef = useRef<HTMLDivElement>(null);\n  const isUserScrollingRef = useRef(false);\n\n  useEffect(() => {\n    const container = containerRef.current;\n    const end = endRef.current;\n\n    if (!container || !end) return;\n\n    // Initial scroll to bottom\n    setTimeout(() => {\n      end.scrollIntoView({ behavior: \"instant\", block: \"end\" });\n    }, 100);\n\n    // Track if user has manually scrolled up\n    const handleScroll = () => {\n      if (!container) return;\n\n      const { scrollTop, scrollHeight, clientHeight } = container;\n      const distanceFromBottom = scrollHeight - scrollTop - clientHeight;\n\n      // If user is scrolled up, mark as manually scrolling\n      isUserScrollingRef.current = distanceFromBottom > 100;\n    };\n\n    // Handle mutations\n    const observer = new MutationObserver((mutations) => {\n      if (!container || !end) return;\n\n      // Check if mutation is related to expand/collapse\n      const isToggleSection = mutations.some((mutation) => {\n        // Check if the target or parent is a motion-div (expanded content)\n        let target = mutation.target as HTMLElement;\n        let isExpand = false;\n\n        while (target && target !== container) {\n          if (target.classList?.contains(\"motion-div\")) {\n            isExpand = true;\n            break;\n          }\n          target = target.parentElement as HTMLElement;\n        }\n        return isExpand;\n      });\n\n      // Don't scroll for expand/collapse actions\n      if (isToggleSection) return;\n\n      // Only auto-scroll if user hasn't manually scrolled up\n      if (!isUserScrollingRef.current) {\n        // For new messages, use smooth scrolling\n        end.scrollIntoView({ behavior: \"smooth\", block: \"end\" });\n      }\n    });\n\n    observer.observe(container, {\n      childList: true,\n      subtree: true,\n    });\n\n    // Add scroll event listener\n    container.addEventListener(\"scroll\", handleScroll);\n\n    return () => {\n      observer.disconnect();\n      container.removeEventListener(\"scroll\", handleScroll);\n    };\n  }, []);\n\n  return [containerRef, endRef] as [\n    RefObject<HTMLDivElement>,\n    RefObject<HTMLDivElement>,\n  ];\n}\n"
  },
  {
    "path": "app/chat/lib/user-id.ts",
    "content": "import { nanoid } from \"nanoid\";\n\nconst USER_ID_KEY = \"ai-chat-user-id\";\n\nexport function getUserId(): string {\n  // Only run this on the client side\n  if (typeof window === \"undefined\") return \"\";\n\n  let userId = localStorage.getItem(USER_ID_KEY);\n\n  if (!userId) {\n    // Generate a new user ID and store it\n    userId = nanoid();\n    localStorage.setItem(USER_ID_KEY, userId);\n  }\n\n  return userId;\n}\n\nexport function updateUserId(newUserId: string): void {\n  if (typeof window === \"undefined\") return;\n  localStorage.setItem(USER_ID_KEY, newUserId);\n}\n"
  },
  {
    "path": "app/chat/lib/utils.ts",
    "content": "import { clsx, type ClassValue } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n  return twMerge(clsx(inputs));\n}\n\nexport function getRepoData(url: string): {\n  owner: string | null;\n  repo: string | null;\n} {\n  // Handle simple owner/repo format\n  if (!url.includes(\"/\") && !url.includes(\".\")) {\n    return { owner: null, repo: null };\n  }\n\n  // Remove protocol if present\n  const urlWithoutProtocol = url.replace(/^https?:\\/\\//, \"\");\n\n  // Different URL patterns\n  const patterns = [\n    // github.com/owner/repo\n    /^(?:www\\.)?github\\.com\\/([^\\/]+)\\/([^\\/]+)/,\n    // owner.github.io/repo\n    /^(?:www\\.)?([^\\/]+)\\.github\\.io\\/([^\\/]+)/,\n    // gitmcp.io/owner/repo\n    /^(?:www\\.)?gitmcp\\.io\\/([^\\/]+)\\/([^\\/]+)/,\n    // owner.gitmcp.io/repo\n    /^(?:www\\.)?([^\\/]+)\\.gitmcp\\.io\\/([^\\/]+)/,\n    // owner.gitmcp.io\n    /^(?:www\\.)?([^\\/]+)\\.gitmcp\\.io/,\n    // owner.github.io\n    /^(?:www\\.)?([^\\/]+)\\.github\\.io/,\n    // gitmcp.io/docs\n    /^(?:www\\.)?gitmcp\\.io\\/(docs)/,\n    // Simple owner/repo format\n    /^([a-zA-Z0-9_-]+)\\/([a-zA-Z0-9_-]+)/,\n  ];\n\n  for (const pattern of patterns) {\n    const match = urlWithoutProtocol.match(pattern);\n    if (match) {\n      return { owner: match[1], repo: match[2] };\n    }\n  }\n\n  // Default fallback\n  return { owner: null, repo: null };\n}\n"
  },
  {
    "path": "app/components/.client/chatPage.client.tsx",
    "content": "import Chat from \"~/chat/components/chat\";\nimport { ChatSidebar } from \"~/chat/components/chat-sidebar\";\nimport { SidebarTrigger } from \"~/chat/components/ui/sidebar\";\nimport { MCPProvider } from \"~/chat/lib/context/mcp-context\";\nimport { Menu } from \"lucide-react\";\nimport { ThemeProvider } from \"~/chat/components/theme-provider\";\nimport { SidebarProvider } from \"~/chat/components/ui/sidebar\";\nimport { Toaster } from \"sonner\";\nimport { useLocalStorage } from \"~/chat/lib/hooks/use-local-storage\";\nimport { STORAGE_KEYS } from \"~/chat/lib/constants\";\nimport \"./chatPage.css\";\nimport { ApiKeysProvider } from \"~/chat/components/api-keys-provider\";\n\nexport default function ChatPage({\n  owner,\n  repo,\n}: {\n  owner: string | null;\n  repo: string | null;\n}) {\n  const [sidebarOpen, setSidebarOpen] = useLocalStorage<boolean>(\n    STORAGE_KEYS.SIDEBAR_STATE,\n    true,\n  );\n  return (\n    <ThemeProvider\n      attribute=\"class\"\n      defaultTheme=\"ocean\"\n      enableSystem={true}\n      disableTransitionOnChange\n      themes={[\"light\", \"dark\", \"sunset\", \"black\", \"ocean\"]}\n    >\n      <ApiKeysProvider>\n        <SidebarProvider\n          defaultOpen={sidebarOpen}\n          open={sidebarOpen}\n          onOpenChange={setSidebarOpen}\n        >\n          <MCPProvider owner={owner || \"docs\"} repo={repo || null}>\n            <div className=\"flex h-dvh w-full\">\n              <ChatSidebar />\n              <main className=\"flex-1 flex flex-col relative\">\n                <div className=\"absolute top-4 left-4 z-50\">\n                  <SidebarTrigger>\n                    <button className=\"flex items-center justify-center h-8 w-8 bg-muted hover:bg-accent rounded-md transition-colors\">\n                      <Menu className=\"h-4 w-4\" />\n                    </button>\n                  </SidebarTrigger>\n                </div>\n                <Chat />\n                <div className=\"flex-1 flex justify-center\"></div>\n              </main>\n            </div>\n          </MCPProvider>\n          <Toaster position=\"top-center\" richColors />\n        </SidebarProvider>\n      </ApiKeysProvider>\n    </ThemeProvider>\n  );\n}\n"
  },
  {
    "path": "app/components/.client/chatPage.css",
    "content": "@import \"tailwindcss\";\n\n@plugin \"tailwindcss-animate\";\n\n@custom-variant dark (&:is(.dark *));\n@custom-variant sunset (&:is(.sunset *));\n@custom-variant black (&:is(.black *));\n@custom-variant ocean (&:is(.ocean *));\n:root {\n  --background: oklch(0.99 0.01 56.32);\n  --foreground: oklch(0.34 0.01 2.77);\n  --card: oklch(1 0 0);\n  --card-foreground: oklch(0.34 0.01 2.77);\n  --popover: oklch(1 0 0);\n  --popover-foreground: oklch(0.34 0.01 2.77);\n  --primary: oklch(0.74 0.16 34.71);\n  --primary-foreground: oklch(1 0 0);\n  --secondary: oklch(0.96 0.02 28.9);\n  --secondary-foreground: oklch(0.56 0.13 32.74);\n  --muted: oklch(0.97 0.02 39.4);\n  --muted-foreground: oklch(0.49 0.05 26.45);\n  --accent: oklch(0.83 0.11 58);\n  --accent-foreground: oklch(0.34 0.01 2.77);\n  --destructive: oklch(0.61 0.21 22.24);\n  --destructive-foreground: oklch(1 0 0);\n  --border: oklch(0.93 0.04 38.69);\n  --input: oklch(0.93 0.04 38.69);\n  --ring: oklch(0.74 0.16 34.71);\n  --chart-1: oklch(0.74 0.16 34.71);\n  --chart-2: oklch(0.83 0.11 58);\n  --chart-3: oklch(0.88 0.08 54.93);\n  --chart-4: oklch(0.82 0.11 40.89);\n  --chart-5: oklch(0.64 0.13 32.07);\n  --sidebar: oklch(0.97 0.02 39.4);\n  --sidebar-foreground: oklch(0.34 0.01 2.77);\n  --sidebar-primary: oklch(0.74 0.16 34.71);\n  --sidebar-primary-foreground: oklch(1 0 0);\n  --sidebar-accent: oklch(0.83 0.11 58);\n  --sidebar-accent-foreground: oklch(0.34 0.01 2.77);\n  --sidebar-border: oklch(0.93 0.04 38.69);\n  --sidebar-ring: oklch(0.74 0.16 34.71);\n  --font-sans: Montserrat, sans-serif;\n  --font-serif: Merriweather, serif;\n  --font-mono: Ubuntu Mono, monospace;\n  --radius: 0.625rem;\n  --shadow-2xs: 0px 6px 12px -3px hsl(0 0% 0% / 0.04);\n  --shadow-xs: 0px 6px 12px -3px hsl(0 0% 0% / 0.04);\n  --shadow-sm:\n    0px 6px 12px -3px hsl(0 0% 0% / 0.09), 0px 1px 2px -4px hsl(0 0% 0% / 0.09);\n  --shadow:\n    0px 6px 12px -3px hsl(0 0% 0% / 0.09), 0px 1px 2px -4px hsl(0 0% 0% / 0.09);\n  --shadow-md:\n    0px 6px 12px -3px hsl(0 0% 0% / 0.09), 0px 2px 4px -4px hsl(0 0% 0% / 0.09);\n  --shadow-lg:\n    0px 6px 12px -3px hsl(0 0% 0% / 0.09), 0px 4px 6px -4px hsl(0 0% 0% / 0.09);\n  --shadow-xl:\n    0px 6px 12px -3px hsl(0 0% 0% / 0.09), 0px 8px 10px -4px hsl(0 0% 0% / 0.09);\n  --shadow-2xl: 0px 6px 12px -3px hsl(0 0% 0% / 0.22);\n}\n\n.dark {\n  --background: oklch(0.26 0.02 352.4);\n  --foreground: oklch(0.94 0.01 51.32);\n  --card: oklch(0.32 0.02 341.45);\n  --card-foreground: oklch(0.94 0.01 51.32);\n  --popover: oklch(0.32 0.02 341.45);\n  --popover-foreground: oklch(0.94 0.01 51.32);\n  --primary: oklch(0.57 0.15 35.26);\n  --primary-foreground: oklch(1 0 0);\n  --secondary: oklch(0.36 0.02 342.27);\n  --secondary-foreground: oklch(0.94 0.01 51.32);\n  --muted: oklch(0.32 0.02 341.45);\n  --muted-foreground: oklch(0.84 0.02 52.63);\n  --accent: oklch(0.83 0.11 58);\n  --accent-foreground: oklch(0.26 0.02 352.4);\n  --destructive: oklch(0.51 0.16 20.19);\n  --destructive-foreground: oklch(1 0 0);\n  --border: oklch(0.36 0.02 342.27);\n  --input: oklch(0.36 0.02 342.27);\n  --ring: oklch(0.74 0.16 34.71);\n  --chart-1: oklch(0.74 0.16 34.71);\n  --chart-2: oklch(0.83 0.11 58);\n  --chart-3: oklch(0.88 0.08 54.93);\n  --chart-4: oklch(0.82 0.11 40.89);\n  --chart-5: oklch(0.64 0.13 32.07);\n  --sidebar: oklch(0.26 0.02 352.4);\n  --sidebar-foreground: oklch(0.94 0.01 51.32);\n  --sidebar-primary: oklch(0.47 0.08 34.31);\n  --sidebar-primary-foreground: oklch(1 0 0);\n  --sidebar-accent: oklch(0.67 0.09 56);\n  --sidebar-accent-foreground: oklch(0.26 0.01 353.48);\n  --sidebar-border: oklch(0.36 0.02 342.27);\n  --sidebar-ring: oklch(0.74 0.16 34.71);\n  --font-sans: Montserrat, sans-serif;\n  --font-serif: Merriweather, serif;\n  --font-mono: Ubuntu Mono, monospace;\n  --radius: 0.625rem;\n  --shadow-2xs: 0px 6px 12px -3px hsl(0 0% 0% / 0.04);\n  --shadow-xs: 0px 6px 12px -3px hsl(0 0% 0% / 0.04);\n  --shadow-sm:\n    0px 6px 12px -3px hsl(0 0% 0% / 0.09), 0px 1px 2px -4px hsl(0 0% 0% / 0.09);\n  --shadow:\n    0px 6px 12px -3px hsl(0 0% 0% / 0.09), 0px 1px 2px -4px hsl(0 0% 0% / 0.09);\n  --shadow-md:\n    0px 6px 12px -3px hsl(0 0% 0% / 0.09), 0px 2px 4px -4px hsl(0 0% 0% / 0.09);\n  --shadow-lg:\n    0px 6px 12px -3px hsl(0 0% 0% / 0.09), 0px 4px 6px -4px hsl(0 0% 0% / 0.09);\n  --shadow-xl:\n    0px 6px 12px -3px hsl(0 0% 0% / 0.09), 0px 8px 10px -4px hsl(0 0% 0% / 0.09);\n  --shadow-2xl: 0px 6px 12px -3px hsl(0 0% 0% / 0.22);\n}\n\n.sunset {\n  --background: oklch(0.98 0.03 80);\n  --foreground: oklch(0.34 0.01 2.77);\n  --card: oklch(1 0 0);\n  --card-foreground: oklch(0.34 0.01 2.77);\n  --popover: oklch(1 0 0);\n  --popover-foreground: oklch(0.34 0.01 2.77);\n  --primary: oklch(0.65 0.26 34);\n  --primary-foreground: oklch(1 0 0);\n  --secondary: oklch(0.96 0.05 60);\n  --secondary-foreground: oklch(0.56 0.13 32.74);\n  --muted: oklch(0.97 0.02 39.4);\n  --muted-foreground: oklch(0.49 0.05 26.45);\n  --accent: oklch(0.83 0.22 50);\n  --accent-foreground: oklch(0.34 0.01 2.77);\n  --destructive: oklch(0.61 0.21 22.24);\n  --destructive-foreground: oklch(1 0 0);\n  --border: oklch(0.93 0.06 60);\n  --input: oklch(0.93 0.06 60);\n  --ring: oklch(0.65 0.26 34);\n  --chart-1: oklch(0.65 0.26 34);\n  --chart-2: oklch(0.83 0.22 50);\n  --chart-3: oklch(0.88 0.15 54.93);\n  --chart-4: oklch(0.82 0.2 40.89);\n  --chart-5: oklch(0.64 0.18 32.07);\n  --sidebar: oklch(0.97 0.04 70);\n  --sidebar-foreground: oklch(0.34 0.01 2.77);\n  --sidebar-primary: oklch(0.65 0.26 34);\n  --sidebar-primary-foreground: oklch(1 0 0);\n  --sidebar-accent: oklch(0.83 0.22 50);\n  --sidebar-accent-foreground: oklch(0.34 0.01 2.77);\n  --sidebar-border: oklch(0.93 0.06 60);\n  --sidebar-ring: oklch(0.65 0.26 34);\n  --font-sans: Montserrat, sans-serif;\n  --font-serif: Merriweather, serif;\n  --font-mono: Ubuntu Mono, monospace;\n  --radius: 0.625rem;\n  --shadow-2xs: 0px 6px 12px -3px hsl(0 0% 0% / 0.04);\n  --shadow-xs: 0px 6px 12px -3px hsl(0 0% 0% / 0.04);\n  --shadow-sm:\n    0px 6px 12px -3px hsl(0 0% 0% / 0.09), 0px 1px 2px -4px hsl(0 0% 0% / 0.09);\n  --shadow:\n    0px 6px 12px -3px hsl(0 0% 0% / 0.09), 0px 1px 2px -4px hsl(0 0% 0% / 0.09);\n  --shadow-md:\n    0px 6px 12px -3px hsl(0 0% 0% / 0.09), 0px 2px 4px -4px hsl(0 0% 0% / 0.09);\n  --shadow-lg:\n    0px 6px 12px -3px hsl(0 0% 0% / 0.09), 0px 4px 6px -4px hsl(0 0% 0% / 0.09);\n  --shadow-xl:\n    0px 6px 12px -3px hsl(0 0% 0% / 0.09), 0px 8px 10px -4px hsl(0 0% 0% / 0.09);\n  --shadow-2xl: 0px 6px 12px -3px hsl(0 0% 0% / 0.22);\n}\n\n.black {\n  --background: oklch(0.15 0.01 350);\n  --foreground: oklch(0.95 0.01 60);\n  --card: oklch(0.2 0.01 340);\n  --card-foreground: oklch(0.95 0.01 60);\n  --popover: oklch(0.2 0.01 340);\n  --popover-foreground: oklch(0.95 0.01 60);\n  --primary: oklch(0.45 0.1 35);\n  --primary-foreground: oklch(1 0 0);\n  --secondary: oklch(0.25 0.01 340);\n  --secondary-foreground: oklch(0.95 0.01 60);\n  --muted: oklch(0.22 0.01 340);\n  --muted-foreground: oklch(0.86 0.01 60);\n  --accent: oklch(0.7 0.09 58);\n  --accent-foreground: oklch(0.15 0.01 350);\n  --destructive: oklch(0.45 0.16 20);\n  --destructive-foreground: oklch(1 0 0);\n  --border: oklch(0.25 0.01 340);\n  --input: oklch(0.25 0.01 340);\n  --ring: oklch(0.45 0.1 35);\n  --chart-1: oklch(0.45 0.1 35);\n  --chart-2: oklch(0.7 0.09 58);\n  --chart-3: oklch(0.8 0.06 54);\n  --chart-4: oklch(0.75 0.08 40);\n  --chart-5: oklch(0.55 0.1 32);\n  --sidebar: oklch(0.15 0.01 350);\n  --sidebar-foreground: oklch(0.95 0.01 60);\n  --sidebar-primary: oklch(0.4 0.06 34);\n  --sidebar-primary-foreground: oklch(1 0 0);\n  --sidebar-accent: oklch(0.6 0.07 56);\n  --sidebar-accent-foreground: oklch(0.15 0.01 350);\n  --sidebar-border: oklch(0.25 0.01 340);\n  --sidebar-ring: oklch(0.45 0.1 35);\n  --font-sans: Montserrat, sans-serif;\n  --font-serif: Merriweather, serif;\n  --font-mono: Ubuntu Mono, monospace;\n  --radius: 0.625rem;\n  --shadow-2xs: 0px 6px 12px -3px hsl(0 0% 0% / 0.04);\n  --shadow-xs: 0px 6px 12px -3px hsl(0 0% 0% / 0.04);\n  --shadow-sm:\n    0px 6px 12px -3px hsl(0 0% 0% / 0.09), 0px 1px 2px -4px hsl(0 0% 0% / 0.09);\n  --shadow:\n    0px 6px 12px -3px hsl(0 0% 0% / 0.09), 0px 1px 2px -4px hsl(0 0% 0% / 0.09);\n  --shadow-md:\n    0px 6px 12px -3px hsl(0 0% 0% / 0.09), 0px 2px 4px -4px hsl(0 0% 0% / 0.09);\n  --shadow-lg:\n    0px 6px 12px -3px hsl(0 0% 0% / 0.09), 0px 4px 6px -4px hsl(0 0% 0% / 0.09);\n  --shadow-xl:\n    0px 6px 12px -3px hsl(0 0% 0% / 0.09), 0px 8px 10px -4px hsl(0 0% 0% / 0.09);\n  --shadow-2xl: 0px 6px 12px -3px hsl(0 0% 0% / 0.22);\n}\n\n.ocean {\n  --background: oklch(0.2 0.05 240);\n  --foreground: oklch(0.95 0.02 210);\n  --card: oklch(0.25 0.06 245);\n  --card-foreground: oklch(0.95 0.02 210);\n  --popover: oklch(0.25 0.06 245);\n  --popover-foreground: oklch(0.95 0.02 210);\n  --primary: oklch(0.55 0.15 220);\n  --primary-foreground: oklch(1 0 0);\n  --secondary: oklch(0.3 0.06 250);\n  --secondary-foreground: oklch(0.95 0.02 210);\n  --muted: oklch(0.28 0.04 245);\n  --muted-foreground: oklch(0.86 0.02 210);\n  --accent: oklch(0.65 0.2 190);\n  --accent-foreground: oklch(0.2 0.05 240);\n  --destructive: oklch(0.5 0.18 20);\n  --destructive-foreground: oklch(1 0 0);\n  --border: oklch(0.3 0.08 240);\n  --input: oklch(0.3 0.08 240);\n  --ring: oklch(0.55 0.15 220);\n  --chart-1: oklch(0.55 0.15 220);\n  --chart-2: oklch(0.65 0.2 190);\n  --chart-3: oklch(0.7 0.18 200);\n  --chart-4: oklch(0.6 0.16 225);\n  --chart-5: oklch(0.5 0.12 235);\n  --sidebar: oklch(0.18 0.05 235);\n  --sidebar-foreground: oklch(0.95 0.02 210);\n  --sidebar-primary: oklch(0.5 0.12 220);\n  --sidebar-primary-foreground: oklch(1 0 0);\n  --sidebar-accent: oklch(0.6 0.18 190);\n  --sidebar-accent-foreground: oklch(0.18 0.05 235);\n  --sidebar-border: oklch(0.3 0.08 240);\n  --sidebar-ring: oklch(0.55 0.15 220);\n  --font-sans: Montserrat, sans-serif;\n  --font-serif: Merriweather, serif;\n  --font-mono: Ubuntu Mono, monospace;\n  --radius: 0.625rem;\n  --shadow-2xs: 0px 6px 12px -3px hsl(220 70% 5% / 0.04);\n  --shadow-xs: 0px 6px 12px -3px hsl(220 70% 5% / 0.04);\n  --shadow-sm:\n    0px 6px 12px -3px hsl(220 70% 5% / 0.09),\n    0px 1px 2px -4px hsl(220 70% 5% / 0.09);\n  --shadow:\n    0px 6px 12px -3px hsl(220 70% 5% / 0.09),\n    0px 1px 2px -4px hsl(220 70% 5% / 0.09);\n  --shadow-md:\n    0px 6px 12px -3px hsl(220 70% 5% / 0.09),\n    0px 2px 4px -4px hsl(220 70% 5% / 0.09);\n  --shadow-lg:\n    0px 6px 12px -3px hsl(220 70% 5% / 0.09),\n    0px 4px 6px -4px hsl(220 70% 5% / 0.09);\n  --shadow-xl:\n    0px 6px 12px -3px hsl(220 70% 5% / 0.09),\n    0px 8px 10px -4px hsl(220 70% 5% / 0.09);\n  --shadow-2xl: 0px 6px 12px -3px hsl(220 70% 5% / 0.22);\n}\n\n@theme inline {\n  --color-background: var(--background);\n  --color-foreground: var(--foreground);\n  --color-card: var(--card);\n  --color-card-foreground: var(--card-foreground);\n  --color-popover: var(--popover);\n  --color-popover-foreground: var(--popover-foreground);\n  --color-primary: var(--primary);\n  --color-primary-foreground: var(--primary-foreground);\n  --color-secondary: var(--secondary);\n  --color-secondary-foreground: var(--secondary-foreground);\n  --color-muted: var(--muted);\n  --color-muted-foreground: var(--muted-foreground);\n  --color-accent: var(--accent);\n  --color-accent-foreground: var(--accent-foreground);\n  --color-destructive: var(--destructive);\n  --color-destructive-foreground: var(--destructive-foreground);\n  --color-border: var(--border);\n  --color-input: var(--input);\n  --color-ring: var(--ring);\n  --color-chart-1: var(--chart-1);\n  --color-chart-2: var(--chart-2);\n  --color-chart-3: var(--chart-3);\n  --color-chart-4: var(--chart-4);\n  --color-chart-5: var(--chart-5);\n  --color-sidebar: var(--sidebar);\n  --color-sidebar-foreground: var(--sidebar-foreground);\n  --color-sidebar-primary: var(--sidebar-primary);\n  --color-sidebar-primary-foreground: var(--sidebar-primary-foreground);\n  --color-sidebar-accent: var(--sidebar-accent);\n  --color-sidebar-accent-foreground: var(--sidebar-accent-foreground);\n  --color-sidebar-border: var(--sidebar-border);\n  --color-sidebar-ring: var(--sidebar-ring);\n\n  --font-sans: var(--font-sans);\n  --font-mono: var(--font-mono);\n  --font-serif: var(--font-serif);\n\n  --radius-sm: calc(var(--radius) - 4px);\n  --radius-md: calc(var(--radius) - 2px);\n  --radius-lg: var(--radius);\n  --radius-xl: calc(var(--radius) + 4px);\n\n  --shadow-2xs: var(--shadow-2xs);\n  --shadow-xs: var(--shadow-xs);\n  --shadow-sm: var(--shadow-sm);\n  --shadow: var(--shadow);\n  --shadow-md: var(--shadow-md);\n  --shadow-lg: var(--shadow-lg);\n  --shadow-xl: var(--shadow-xl);\n  --shadow-2xl: var(--shadow-2xl);\n}\n\n@layer base {\n  * {\n    @apply border-border outline-ring/50;\n  }\n  body {\n    @apply bg-background text-foreground;\n    letter-spacing: var(--tracking-normal);\n  }\n}\n\n@layer utilities {\n  /* Hide scrollbar for Chrome, Safari and Opera */\n  .no-scrollbar::-webkit-scrollbar {\n    display: none;\n  }\n\n  /* Hide scrollbar for IE, Edge and Firefox */\n  .no-scrollbar {\n    -ms-overflow-style: none; /* IE and Edge */\n    /* Use Firefox-specific scrollbar hiding when supported */\n    scrollbar-width: none;\n  }\n}\n"
  },
  {
    "path": "app/components/chatPage.tsx",
    "content": "import { useState, useEffect } from \"react\";\nimport ChatPageClient from \"./.client/chatPage.client\";\nexport default function ChatPageServer({\n  owner,\n  repo,\n}: {\n  owner: string | null;\n  repo: string | null;\n}) {\n  const [client, setClient] = useState(false);\n  useEffect(() => {\n    if (typeof document !== \"undefined\") {\n      setClient(true);\n    }\n  }, []);\n  if (client) {\n    return <ChatPageClient owner={owner} repo={repo} />;\n  } else {\n    return <div></div>;\n  }\n}\n"
  },
  {
    "path": "app/components/content.tsx",
    "content": "import React, { useState } from \"react\";\nimport { ClipboardCopy, Check, Github } from \"lucide-react\";\nimport type { UrlType } from \"../../src/shared/repoData\";\nimport { generateServerName } from \"../../src/shared/nameUtils\";\n\nexport default function Content({\n  urlType,\n  owner,\n  repo,\n  url,\n}: {\n  urlType: UrlType;\n  owner?: string | null;\n  repo?: string | null;\n  url?: string;\n}) {\n  const [activeTabIndex, setActiveTabIndex] = useState(0);\n\n  let documentationServerPrefix = \"GitMCP\";\n  let docsText = owner === \"docs\" ? \"all GitHub docs\" : `${owner}/${repo} docs`;\n  let serverName = generateServerName(repo);\n\n  if (owner == \"cloudflare\" && repo == \"docs\") {\n    url = \"https://docs.mcp.cloudflare.com/sse\";\n    documentationServerPrefix = \"MCP\";\n    docsText = \"Cloudflare docs\";\n    serverName = \"Cloudflare Docs\";\n  }\n\n  const description: React.ReactNode = (() => {\n    if (owner == \"cloudflare\" && repo == \"docs\") {\n      return (\n        <div>\n          <span> for</span>{\" \"}\n          <strong className=\"text-blue-500\">\n            <a\n              href={`https://developers.cloudflare.com/`}\n              target=\"_blank\"\n              rel=\"noopener noreferrer\"\n              className=\"text-blue-500 hover:underline\"\n            >\n              Cloudflare Documentation\n            </a>\n          </strong>{\" \"}\n        </div>\n      );\n    }\n\n    if (urlType === \"subdomain\") {\n      return (\n        <div>\n          <span> for the</span>{\" \"}\n          <strong className=\"text-blue-500\">\n            <a\n              href={`https://github.com/${owner}/${repo}`}\n              target=\"_blank\"\n              rel=\"noopener noreferrer\"\n              className=\"text-blue-500 hover:underline\"\n            >\n              {owner}/{repo}\n            </a>\n          </strong>{\" \"}\n          <span>GitHub Pages</span>\n        </div>\n      );\n    } else if (owner && repo) {\n      return (\n        <div>\n          <span> for the</span>{\" \"}\n          <strong className=\"text-blue-500\">\n            <a\n              href={`https://github.com/${owner}/${repo}`}\n              target=\"_blank\"\n              rel=\"noopener noreferrer\"\n              className=\"text-blue-500 hover:underline\"\n            >\n              {owner}/{repo}\n            </a>\n          </strong>{\" \"}\n          <span>GitHub repository</span>\n        </div>\n      );\n    }\n    return <div>Documentation MCP</div>;\n  })();\n\n  const [copied, setCopied] = useState(false);\n\n  const copyUrl = () => {\n    navigator.clipboard.writeText(url || \"\");\n    setCopied(true);\n    setTimeout(() => setCopied(false), 2000);\n  };\n\n  // Function to get favicon URL for different tools\n  const getToolFaviconUrl = (toolName: string): string => {\n    switch (toolName) {\n      case \"Cursor\":\n        return \"https://www.cursor.com/favicon.ico\";\n      case \"Claude Desktop\":\n        return \"https://claude.ai/favicon.ico\";\n      case \"Windsurf\":\n        return \"https://codeium.com/favicon.ico\";\n      case \"VSCode\":\n        return \"https://code.visualstudio.com/assets/favicon.ico\";\n      case \"Cline\":\n        return \"https://cline.bot/assets/branding/favicons/favicon-32x32.png\";\n      case \"Highlight AI\":\n        return \"https://highlightai.com/favicon.ico\";\n      case \"Augment Code\":\n        return \"https://cdn.prod.website-files.com/66d76c2202b335e39ad2b5e8/66f302d663108ca67c19ddbc_Favicon.png\";\n      case \"Msty AI\":\n        return \"https://msty.studio/favicon.ico\";\n      default:\n        return \"https://codeium.com/favicon.ico\";\n    }\n  };\n\n  return (\n    <div className=\"min-h-screen bg-gradient-to-b from-slate-50 to-slate-100 flex flex-col items-center p-8 px-4 sm:px-8 relative\">\n      {/* GitHub Link */}\n      <div className=\"absolute top-4 right-4 sm:top-6 sm:right-6 z-10\">\n        <a\n          href=\"https://github.com/idosal/git-mcp\"\n          target=\"_blank\"\n          rel=\"noopener noreferrer\"\n          className=\"flex items-center gap-2 bg-white hover:bg-gray-50 text-gray-800 px-3 py-2 rounded-md transition-colors duration-200 border border-gray-200 shadow-sm z-10\"\n        >\n          <Github className=\"h-5 w-5\" />\n          <span className=\"hidden sm:inline\">GitHub</span>\n        </a>\n      </div>\n      <div className=\"max-w-3xl w-full\">\n        <div className=\"text-center mb-8\">\n          <h1 className=\"text-xl sm:text-4xl font-bold mb-2 relative inline-block\">\n            <a\n              href=\"https://gitmcp.io\"\n              className=\"text-blue-800 hover:text-blue-600 transition-colors\"\n              target=\"_blank\"\n              rel=\"noopener noreferrer\"\n            >\n              {documentationServerPrefix} Documentation Server\n            </a>\n          </h1>\n          <div className=\"mt-4 text-lg sm:text-xl text-slate-700\">\n            {description}\n          </div>\n          <div className=\"flex items-center justify-center mt-6\">\n            <div className=\"h-0.5 w-12 bg-slate-300\"></div>\n            <div className=\"mx-4\">\n              <svg\n                width=\"24\"\n                height=\"24\"\n                viewBox=\"0 0 24 24\"\n                fill=\"none\"\n                xmlns=\"http://www.w3.org/2000/svg\"\n              >\n                <path\n                  fillRule=\"evenodd\"\n                  clipRule=\"evenodd\"\n                  d=\"M12 2C6.477 2 2 6.477 2 12C2 16.418 4.865 20.166 8.839 21.489C9.339 21.581 9.5 21.278 9.5 21.017C9.5 20.756 9.5 20.178 9.5 19.317C6.739 19.939 6.139 17.917 6.139 17.917C5.699 16.778 5.039 16.478 5.039 16.478C4.119 15.839 5.099 15.839 5.099 15.839C6.099 15.917 6.659 16.917 6.659 16.917C7.5 18.5 9.099 17.958 9.5 17.698C9.6 17.078 9.859 16.65 10.14 16.417C7.98 16.166 5.699 15.306 5.699 11.489C5.699 10.389 6.099 9.489 6.7 8.789C6.58 8.539 6.22 7.489 6.8 6.122C6.8 6.122 7.62 5.85 9.5 7.122C10.3 6.872 11.15 6.75 12 6.75C12.85 6.75 13.7 6.872 14.5 7.122C16.38 5.85 17.2 6.122 17.2 6.122C17.78 7.489 17.42 8.539 17.3 8.789C17.9 9.489 18.3 10.389 18.3 11.489C18.3 15.306 16.02 16.166 13.86 16.417C14.14 16.65 14.4 17.139 14.4 17.839C14.4 18.917 14.4 20.656 14.4 21.017C14.4 21.278 14.56 21.581 15.06 21.489C19.137 20.166 22 16.418 22 12C22 6.477 17.523 2 12 2Z\"\n                  fill=\"#2563EB\"\n                />\n              </svg>\n            </div>\n            <div className=\"h-0.5 w-12 bg-slate-300\"></div>\n          </div>\n        </div>\n\n        {/* a button - NEW! Chat with `${owner}/${repo}` docs! */}\n        <div className=\"my-8 \">\n          <div className=\"flex justify-center\">\n            <div className=\"relative group\">\n              <div className=\"absolute rounded-lg blur opacity-75 group-hover:opacity-100 transition duration-300 group-hover:duration-200\"></div>\n              <button\n                className=\"cursor-pointer relative px-6 py-3 bg-gradient-to-br from-blue-600 to-purple-700 hover:from-blue-500 hover:to-purple-600 text-white font-bold text-lg rounded-lg shadow-lg transform hover:scale-105 transition-all duration-200 flex items-center\"\n                onClick={() =>\n                  window.open(\n                    owner === \"docs\" ? \"/docs/chat\" : `/${owner}/${repo}/chat`,\n                    \"_blank\",\n                  )\n                }\n              >\n                <svg\n                  xmlns=\"http://www.w3.org/2000/svg\"\n                  className=\"h-5 w-5 mr-2\"\n                  viewBox=\"0 0 20 20\"\n                  fill=\"currentColor\"\n                >\n                  <path\n                    fillRule=\"evenodd\"\n                    d=\"M18 10c0 3.866-3.582 7-8 7a8.841 8.841 0 01-4.083-.98L2 17l1.338-3.123C2.493 12.767 2 11.434 2 10c0-3.866 3.582-7 8-7s8 3.134 8 7zM7 9H5v2h2V9zm8 0h-2v2h2V9zM9 9h2v2H9V9z\"\n                    clipRule=\"evenodd\"\n                  />\n                </svg>\n                <span className=\"hidden sm:inline\">\n                  New! Chat with {docsText} online!\n                </span>\n                <span className=\"sm:hidden\">Chat with docs</span>\n              </button>\n            </div>\n          </div>\n        </div>\n\n        <div className=\"bg-white shadow-lg rounded-lg p-4 sm:p-6 my-8 border border-slate-200\">\n          <h2 className=\"text-lg sm:text-xl font-semibold text-blue-800 mb-4\">\n            MCP Server URL\n          </h2>\n          <div className=\"bg-slate-50 border border-slate-200 rounded-lg p-3 flex items-center justify-between mb-2 relative\">\n            <code className=\"text-slate-700 pr-10 break-all text-xs sm:text-lg\">\n              {url}\n            </code>\n            <button\n              onClick={copyUrl}\n              className=\"absolute right-2 p-1.5 rounded-full hover:bg-slate-200 transition-colors\"\n              aria-label=\"Copy URL\"\n            >\n              {copied ? (\n                <Check className=\"w-5 h-5 text-emerald-500\" />\n              ) : (\n                <ClipboardCopy className=\"w-5 h-5 text-blue-600\" />\n              )}\n            </button>\n          </div>\n          {copied && (\n            <p className=\"text-emerald-500 text-sm\">URL copied to clipboard!</p>\n          )}\n        </div>\n\n        <div className=\"bg-white shadow-lg rounded-lg p-4 sm:p-6 my-8 border border-slate-200\">\n          <h2 className=\"text-lg sm:text-xl font-semibold text-blue-800 mb-4\">\n            Connect your AI assistant\n          </h2>\n\n          {/* Tabs for different integrations */}\n          <div className=\"mb-6\">\n            <div className=\"flex flex-wrap border-b border-slate-200 mb-4\">\n              {[\n                \"Cursor\",\n                \"Claude Desktop\",\n                \"Windsurf\",\n                \"VSCode\",\n                \"Cline\",\n                \"Highlight AI\",\n                \"Augment Code\",\n                \"Msty AI\",\n              ].map((tab, index) => (\n                <button\n                  key={tab}\n                  className={`py-2 px-3 sm:px-4 font-medium text-xs sm:text-sm focus:outline-none cursor-pointer ${\n                    activeTabIndex === index\n                      ? \"text-blue-600 border-b-2 border-blue-600\"\n                      : \"text-slate-600 hover:text-blue-600\"\n                  }`}\n                  onClick={(e) => {\n                    setActiveTabIndex(index);\n\n                    // Hide all tab contents\n                    document\n                      .querySelectorAll(\".tab-content\")\n                      .forEach((content) => {\n                        content.classList.add(\"hidden\");\n                      });\n\n                    // Show the selected tab content\n                    document\n                      .getElementById(\n                        `tab-${tab.replace(/\\s+/g, \"-\").toLowerCase()}`,\n                      )\n                      ?.classList.remove(\"hidden\");\n                  }}\n                >\n                  <div className=\"flex items-center\">\n                    <img\n                      src={getToolFaviconUrl(tab)}\n                      alt={tab}\n                      className=\"h-4 w-4 mr-2 inline-block\"\n                    />\n                    <span\n                      className={`${\n                        activeTabIndex === index ? \"inline\" : \"hidden\"\n                      } sm:inline`}\n                    >\n                      {tab}\n                    </span>\n                  </div>\n                </button>\n              ))}\n            </div>\n\n            {/* Tab content */}\n            <div id=\"tab-cursor\" className=\"tab-content\">\n              <div className=\"bg-slate-50 p-3 sm:p-4 rounded-md border border-slate-200\">\n                <p className=\"text-sm text-slate-700 mb-2\">\n                  To add this MCP to Cursor, update your{\" \"}\n                  <code className=\"bg-slate-200 px-1.5 py-0.5 rounded text-blue-700 break-words\">\n                    ~/.cursor/mcp.json\n                  </code>\n                  :\n                </p>\n                <CodeExample\n                  code={`{\n  \"mcpServers\": {\n    \"${serverName}\": {\n      \"url\": \"${url}\"\n    }\n  }\n}`}\n                  id=\"cursor\"\n                  name=\"Cursor\"\n                  popoutUrl=\"cursor://mcp-remote?url=${url}\"\n                />\n              </div>\n            </div>\n\n            <div id=\"tab-claude-desktop\" className=\"tab-content hidden\">\n              <div className=\"bg-slate-50 p-3 sm:p-4 rounded-md border border-slate-200\">\n                <p className=\"text-sm text-slate-700 mb-2\">\n                  To add this MCP to Claude Desktop, update your{\" \"}\n                  <code className=\"bg-slate-200 px-1.5 py-0.5 rounded text-blue-700 break-words\">\n                    claude_desktop_config.json\n                  </code>\n                  :\n                </p>\n                <CodeExample\n                  code={`{\n  \"mcpServers\": {\n    \"${serverName}\": {\n      \"command\": \"npx\",\n      \"args\": [\n        \"mcp-remote\",\n        \"${url}\"\n      ]\n    }\n  }\n}`}\n                  id=\"claude\"\n                  name=\"Claude Desktop\"\n                  popoutUrl=\"claude://\"\n                />\n              </div>\n            </div>\n\n            <div id=\"tab-windsurf\" className=\"tab-content hidden\">\n              <div className=\"bg-slate-50 p-3 sm:p-4 rounded-md border border-slate-200\">\n                <p className=\"text-sm text-slate-700 mb-2\">\n                  To add this MCP to Windsurf, update your{\" \"}\n                  <code className=\"bg-slate-200 px-1.5 py-0.5 rounded text-blue-700 break-words\">\n                    ~/.codeium/windsurf/mcp_config.json\n                  </code>\n                  :\n                </p>\n                <CodeExample\n                  code={`{\n  \"mcpServers\": {\n    \"${serverName}\": {\n      \"serverUrl\": \"${url}\"\n    }\n  }\n}`}\n                  id=\"windsurf\"\n                  popoutUrl=\"windsurf://\"\n                  name=\"Windsurf\"\n                />\n              </div>\n            </div>\n            <div id=\"tab-vscode\" className=\"tab-content hidden\">\n              <div className=\"bg-slate-50 p-3 sm:p-4 rounded-md border border-slate-200\">\n                <p className=\"text-sm text-slate-700 mb-2\">\n                  To add this MCP to VSCode, update your{\" \"}\n                  <code className=\"bg-slate-200 px-1.5 py-0.5 rounded text-blue-700 break-words\">\n                    .vscode/mcp.json\n                  </code>\n                  :\n                </p>\n                <CodeExample\n                  code={`{\n  \"servers\": {\n    \"${serverName}\": {\n      \"type\": \"sse\",\n      \"url\": \"${url}\"\n    }\n  }\n}`}\n                  id=\"vscode\"\n                  name=\"VSCode Insiders\"\n                  popoutUrl={`vscode://mcp-remote?url=${url}`}\n                />\n              </div>\n            </div>\n\n            <div id=\"tab-cline\" className=\"tab-content hidden\">\n              <div className=\"bg-slate-50 p-3 sm:p-4 rounded-md border border-slate-200\">\n                <p className=\"text-sm text-slate-700 mb-2\">\n                  To add this MCP to Cline, update your{\" \"}\n                  <code className=\"bg-slate-200 px-1.5 py-0.5 rounded text-blue-700 break-words\">\n                    ~/Library/Application\n                    Support/Code/User/globalStorage/saoudrizwan.claude-dev/settings/cline_mcp_settings.json\n                  </code>\n                  :\n                </p>\n                <CodeExample\n                  code={`{\n  \"mcpServers\": {\n    \"${serverName}\": {\n      \"url\": \"${url}\",\n      \"disabled\": false,\n      \"autoApprove\": []\n    }\n  }\n}`}\n                  id=\"cline\"\n                  name=\"Cline\"\n                />\n              </div>\n            </div>\n\n            <div id=\"tab-highlight-ai\" className=\"tab-content hidden\">\n              <div className=\"bg-slate-50 p-3 sm:p-4 rounded-md border border-slate-200\">\n                <div className=\"p-4\">\n                  <ul className=\"text-sm text-slate-700 mb-4 list-disc pl-5 space-y-2\">\n                    <li>\n                      Open Highlight AI and click the plugins icon (@ symbol) in\n                      the sidebar\n                    </li>\n                    <li>\n                      Click <strong>Installed Plugins</strong> at the top of the\n                      sidebar\n                    </li>\n                    <li>\n                      Select <strong>Custom Plugin</strong>\n                    </li>\n                    <li>\n                      Click <strong>Add a plugin using a custom SSE URL</strong>\n                    </li>\n                  </ul>\n\n                  <div className=\"my-6\">\n                    <img\n                      src=\"/img/highlight-add-custom-plugin.png\"\n                      alt=\"Highlight AI Add Custom Plugin\"\n                      className=\"w-full rounded shadow-md\"\n                    />\n                  </div>\n\n                  <p className=\"text-sm text-slate-700 mb-4\">\n                    Enter this as your plugin name:{\" \"}\n                    <code className=\"bg-slate-200 px-2 py-1 rounded text-blue-700 break-words block my-3\">\n                      {serverName}\n                    </code>\n                  </p>\n\n                  <p className=\"text-sm text-slate-700 mb-4\">\n                    Enter this URL as the SSE URL:{\" \"}\n                    <code className=\"bg-slate-200 px-2 py-1 rounded text-blue-700 break-words block my-3\">\n                      {url}\n                    </code>\n                  </p>\n\n                  <div className=\"my-6\">\n                    <img\n                      src=\"/img/highlight-sse-plugin-setup.png\"\n                      alt=\"Highlight AI MCP\"\n                      className=\"w-full rounded shadow-md\"\n                    />\n                  </div>\n\n                  <p className=\"text-sm text-slate-700 mt-4\">\n                    For more details on adding custom MCP servers, refer to{\" \"}\n                    <a\n                      href=\"https://docs.highlightai.com/learn/developers/plugins/custom-plugins-setup\"\n                      target=\"_blank\"\n                      rel=\"noopener noreferrer\"\n                      className=\"text-blue-600 hover:text-blue-800\"\n                    >\n                      the documentation\n                    </a>\n                    .\n                  </p>\n                </div>\n              </div>\n            </div>\n\n            <div id=\"tab-augment-code\" className=\"tab-content hidden\">\n              <div className=\"bg-slate-50 p-3 sm:p-4 rounded-md border border-slate-200\">\n                <div className=\"p-4\">\n                  <ul className=\"text-sm text-slate-700 mb-4 list-disc pl-5 space-y-2\">\n                    <li>Open Augment Code settings</li>\n                    <li>Navigate to the MCP section</li>\n                    <li>Add a new MCP server with the following details</li>\n                  </ul>\n\n                  <p className=\"text-sm text-slate-700 mb-4\">\n                    Name the MCP server:{\" \"}\n                    <code className=\"bg-slate-200 px-2 py-1 rounded text-blue-700 break-words block my-3\">\n                      git-mcp Docs\n                    </code>\n                  </p>\n\n                  <p className=\"text-sm text-slate-700 mb-4\">\n                    Use this command:{\" \"}\n                    <code className=\"bg-slate-200 px-2 py-1 rounded text-blue-700 break-words block my-3\">\n                      npx mcp-remote ${url}\n                    </code>\n                  </p>\n\n                  <p className=\"text-sm text-slate-700 mb-4\">\n                    Or use the following configuration:{\" \"}\n                  </p>\n\n                  <CodeExample\n                    code={`{\n  \"mcpServers\": {\n    \"git-mcp Docs\": {\n      \"command\": \"npx\",\n      \"args\": [\n        \"mcp-remote\",\n        \"${url}\"\n      ]\n    }\n  }\n}`}\n                    id=\"augment-code\"\n                    name=\"Augment Code\"\n                  />\n\n                  <p className=\"text-sm text-slate-700 mt-4\">\n                    For more details on configuring MCP servers in Augment Code,\n                    visit{\" \"}\n                    <a\n                      href=\"https://docs.augmentcode.com/setup-augment/mcp\"\n                      target=\"_blank\"\n                      rel=\"noopener noreferrer\"\n                      className=\"text-blue-600 hover:text-blue-800\"\n                    >\n                      the Augment Code documentation\n                    </a>\n                    .\n                  </p>\n                </div>\n              </div>\n            </div>\n\n            <div id=\"tab-msty-ai\" className=\"tab-content hidden\">\n              <div className=\"bg-slate-50 p-3 sm:p-4 rounded-md border border-slate-200\">\n                <ul className=\"text-sm text-slate-700 mb-4 list-disc pl-5 space-y-2\">\n                  <li>Copy the following JSON configuration: </li>\n                  <CodeExample\n                    code={`{\n                      \"mcpServers\": {\n                        \"${serverName}\": {\n                          \"command\": \"npx\",\n                          \"args\": [\n                            \"mcp-remote\",\n                            \"${url}\"\n                          ]\n                        }\n                      }\n                    }`}\n                    id=\"msty-ai\"\n                    name=\"Msty AI\"\n                  />\n                  <li>\n                    Go to Msty Studio &gt; Tools &gt; 'Import Tools from JSON\n                    Clipboard'\n                  </li>\n                </ul>\n                <p className=\"text-sm text-slate-700 mb-4\">\n                  For more details on using Msty AI, refer to{\" \"}\n                  <a\n                    href=\"https://docs.msty.ai\"\n                    target=\"_blank\"\n                    rel=\"noopener noreferrer\"\n                    className=\"text-blue-600 hover:text-blue-800\"\n                  >\n                    the documentation\n                  </a>\n                  .\n                </p>\n              </div>\n            </div>\n          </div>\n        </div>\n\n        {/* Footer with tool links */}\n        <div className=\"mt-8 flex flex-col items-center justify-center\">\n          <div className=\"flex justify-center space-x-8 mb-6\">\n            <a\n              href=\"https://claude.ai\"\n              className=\"text-blue-600 hover:text-blue-800 flex items-center transition-colors\"\n              target=\"_blank\"\n              rel=\"noopener noreferrer\"\n            >\n              <img\n                src={getToolFaviconUrl(\"Claude Desktop\")}\n                alt=\"Claude\"\n                className=\"h-6 w-6 mr-2\"\n              />\n              Claude\n            </a>\n            <a\n              href=\"https://cursor.com\"\n              className=\"text-blue-600 hover:text-blue-800 flex items-center transition-colors\"\n              target=\"_blank\"\n              rel=\"noopener noreferrer\"\n            >\n              <img\n                src={getToolFaviconUrl(\"Cursor\")}\n                alt=\"Cursor\"\n                className=\"h-6 w-6 mr-2\"\n              />\n              Cursor\n            </a>\n            <a\n              href=\"https://codeium.com/windsurf\"\n              className=\"text-blue-600 hover:text-blue-800 flex items-center transition-colors\"\n              target=\"_blank\"\n              rel=\"noopener noreferrer\"\n            >\n              <img\n                src={getToolFaviconUrl(\"Windsurf\")}\n                alt=\"Windsurf\"\n                className=\"h-6 w-6 mr-2\"\n              />\n              Windsurf\n            </a>\n            <a\n              href=\"https://code.visualstudio.com/\"\n              className=\"text-blue-600 hover:text-blue-800 flex items-center transition-colors\"\n              target=\"_blank\"\n              rel=\"noopener noreferrer\"\n            >\n              <img\n                src=\"https://code.visualstudio.com/assets/favicon.ico\"\n                alt=\"VSCode\"\n                className=\"h-6 w-6 mr-2\"\n              />\n              VSCode\n            </a>\n          </div>\n          <div className=\"flex justify-center space-x-8\">\n            <a\n              href=\"https://cline.tools\"\n              className=\"text-blue-600 hover:text-blue-800 flex items-center transition-colors\"\n              target=\"_blank\"\n              rel=\"noopener noreferrer\"\n            >\n              <img\n                src={getToolFaviconUrl(\"Cline\")}\n                alt=\"Cline\"\n                className=\"h-6 w-6 mr-2\"\n              />\n              Cline\n            </a>\n            <a\n              href=\"https://highlightai.com\"\n              className=\"text-blue-600 hover:text-blue-800 flex items-center transition-colors\"\n              target=\"_blank\"\n              rel=\"noopener noreferrer\"\n            >\n              <img\n                src={getToolFaviconUrl(\"Highlight AI\")}\n                alt=\"Highlight AI\"\n                className=\"h-6 w-6 mr-2\"\n              />\n              Highlight AI\n            </a>\n            <a\n              href=\"https://augmentcode.com\"\n              className=\"text-blue-600 hover:text-blue-800 flex items-center transition-colors\"\n              target=\"_blank\"\n              rel=\"noopener noreferrer\"\n            >\n              <img\n                src={getToolFaviconUrl(\"Augment Code\")}\n                alt=\"Augment Code\"\n                className=\"h-6 w-6 mr-2\"\n              />\n              Augment Code\n            </a>\n            <a\n              href=\"https://msty.ai\"\n              className=\"text-blue-600 hover:text-blue-800 flex items-center transition-colors\"\n              target=\"_blank\"\n              rel=\"noopener noreferrer\"\n            >\n              <img\n                src={getToolFaviconUrl(\"Msty AI\")}\n                alt=\"Msty AI\"\n                className=\"h-6 w-6 mr-2\"\n              />\n              Msty AI\n            </a>\n          </div>\n        </div>\n      </div>\n    </div>\n  );\n}\n\nfunction CodeExample({\n  code,\n  id,\n  name,\n  popoutUrl,\n}: {\n  code: string;\n  id: string;\n  name: string;\n  popoutUrl?: string;\n}) {\n  return (\n    <div className=\"bg-slate-800 text-slate-100 p-3 rounded-md text-sm overflow-x-auto relative\">\n      <button\n        onClick={() => {\n          navigator.clipboard.writeText(code);\n          const copyBtn = document.querySelector(`#${id}-copy-btn`);\n          if (copyBtn) {\n            copyBtn.innerHTML = `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"text-emerald-500\"><polyline points=\"20 6 9 17 4 12\"></polyline></svg>`;\n            setTimeout(() => {\n              copyBtn.innerHTML = `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><rect x=\"9\" y=\"9\" width=\"13\" height=\"13\" rx=\"2\" ry=\"2\"></rect><path d=\"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1\"></path></svg>`;\n            }, 2000);\n          }\n        }}\n        id={`${id}-copy-btn`}\n        className=\"absolute top-2 right-2 p-1 rounded-md hover:bg-slate-700 transition-colors focus:outline-none z-10\"\n        aria-label=\"Copy code\"\n      >\n        <svg\n          xmlns=\"http://www.w3.org/2000/svg\"\n          width=\"16\"\n          height=\"16\"\n          viewBox=\"0 0 24 24\"\n          fill=\"none\"\n          stroke=\"currentColor\"\n          strokeWidth=\"2\"\n          strokeLinecap=\"round\"\n          strokeLinejoin=\"round\"\n        >\n          <rect x=\"9\" y=\"9\" width=\"13\" height=\"13\" rx=\"2\" ry=\"2\"></rect>\n          <path d=\"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1\"></path>\n        </svg>\n      </button>\n      {popoutUrl && (\n        <button\n          onClick={() => {\n            window.open(popoutUrl);\n          }}\n          id={`${id}-open-btn`}\n          className=\"absolute top-2 right-8 p-1 rounded-md hover:bg-slate-700 transition-colors focus:outline-none z-10\"\n          aria-label={`Open ${name}`}\n        >\n          <svg\n            xmlns=\"http://www.w3.org/2000/svg\"\n            width=\"16\"\n            height=\"16\"\n            viewBox=\"0 0 24 24\"\n            fill=\"none\"\n            stroke=\"currentColor\"\n            strokeWidth=\"2\"\n            strokeLinecap=\"round\"\n            strokeLinejoin=\"round\"\n          >\n            <path d=\"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6\"></path>\n            <polyline points=\"15 3 21 3 21 9\"></polyline>\n            <line x1=\"10\" y1=\"14\" x2=\"21\" y2=\"3\"></line>\n          </svg>\n        </button>\n      )}\n      <pre className=\"bg-slate-800 text-slate-100 rounded-md text-sm overflow-x-auto relative\">\n        {code}\n      </pre>\n    </div>\n  );\n}\n"
  },
  {
    "path": "app/entry.server.tsx",
    "content": "import type { AppLoadContext, EntryContext } from \"react-router\";\nimport { ServerRouter } from \"react-router\";\nimport { isbot } from \"isbot\";\nimport { renderToReadableStream } from \"react-dom/server\";\n\nexport default async function handleRequest(\n  request: Request,\n  responseStatusCode: number,\n  responseHeaders: Headers,\n  routerContext: EntryContext,\n  _loadContext: AppLoadContext,\n) {\n  let shellRendered = false;\n  const userAgent = request.headers.get(\"user-agent\");\n\n  const body = await renderToReadableStream(\n    <ServerRouter context={routerContext} url={request.url} />,\n    {\n      onError(error: unknown) {\n        responseStatusCode = 500;\n        // Log streaming rendering errors from inside the shell.  Don't log\n        // errors encountered during initial shell rendering since they'll\n        // reject and get logged in handleDocumentRequest.\n        if (shellRendered) {\n          console.error(error);\n        }\n      },\n    },\n  );\n  shellRendered = true;\n\n  // Ensure requests from bots and SPA Mode renders wait for all content to load before responding\n  // https://react.dev/reference/react-dom/server/renderToPipeableStream#waiting-for-all-content-to-load-for-crawlers-and-static-generation\n  if ((userAgent && isbot(userAgent)) || routerContext.isSpaMode) {\n    await body.allReady;\n  }\n\n  responseHeaders.set(\"Content-Type\", \"text/html\");\n  return new Response(body, {\n    headers: responseHeaders,\n    status: responseStatusCode,\n  });\n}\n"
  },
  {
    "path": "app/globals.css",
    "content": "@import \"tailwindcss\";\n@tailwind base;\n@tailwind components;\n@tailwind utilities;\n\n@layer base {\n  html {\n    -webkit-font-smoothing: antialiased;\n    -moz-osx-font-smoothing: grayscale;\n  }\n\n  h1,\n  h2,\n  h3,\n  h4,\n  h5,\n  h6 {\n    letter-spacing: -0.025em;\n  }\n}\n\n@layer utilities {\n  .text-gradient {\n    background-clip: text;\n    -webkit-background-clip: text;\n    -webkit-text-fill-color: transparent;\n  }\n\n  @keyframes gradient-x {\n    0%,\n    100% {\n      background-position: 0% 50%;\n    }\n    50% {\n      background-position: 100% 50%;\n    }\n  }\n\n  .animate-gradient-x {\n    background-size: 200% 200%;\n    animation: gradient-x 15s ease infinite;\n  }\n}\n"
  },
  {
    "path": "app/root.tsx",
    "content": "import \"./globals.css\";\nimport { Links, Meta, Outlet, Scripts, ScrollRestoration } from \"react-router\";\n\nexport default function App() {\n  return (\n    <html lang=\"en\" suppressHydrationWarning>\n      <head>\n        <meta charSet=\"utf-8\" />\n        <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n        <link rel=\"icon\" href=\"/img/icon_black_cropped.png\" />\n        <title>GitMCP</title>\n        <meta\n          name=\"description\"\n          content=\"Instantly create an MCP server for any GitHub project\"\n        />\n\n        <meta property=\"og:url\" content=\"https://gitmcp.io/\" />\n        <meta property=\"og:type\" content=\"website\" />\n        <meta property=\"og:title\" content=\"GitMCP\" />\n        <meta\n          property=\"og:description\"\n          content=\"Instantly create an MCP server for any GitHub project\"\n        />\n        <meta property=\"og:image\" content=\"https://gitmcp.io/img/OG.png\" />\n\n        <meta name=\"twitter:card\" content=\"summary_large_image\" />\n        <meta property=\"twitter:domain\" content=\"gitmcp.io\" />\n        <meta property=\"twitter:url\" content=\"https://gitmcp.io/\" />\n        <meta name=\"twitter:title\" content=\"GitMCP\" />\n        <meta\n          name=\"twitter:description\"\n          content=\"Instantly create an MCP server for any GitHub project\"\n        />\n        <meta name=\"twitter:image\" content=\"https://gitmcp.io/img/OG.png\" />\n        {/* All `meta` exports on all routes will render here */}\n        <Meta />\n\n        {/* All `link` exports on all routes will render here */}\n        <Links />\n      </head>\n      <body className=\"font-sans antialiased\">\n        {/* Child routes render here */}\n        <Outlet />\n\n        {/* Manages scroll position for client-side transitions */}\n        {/* If you use a nonce-based content security policy for scripts, you must provide the `nonce` prop. Otherwise, omit the nonce prop as shown here. */}\n        <ScrollRestoration />\n\n        {/* Script tags go here */}\n        {/* If you use a nonce-based content security policy for scripts, you must provide the `nonce` prop. Otherwise, omit the nonce prop as shown here. */}\n        <Scripts />\n      </body>\n    </html>\n  );\n}\n"
  },
  {
    "path": "app/routes/$.tsx",
    "content": "import { getRepoData } from \"../../src/shared/repoData\";\nimport Content from \"../components/content\";\nimport ChatPageServer from \"../components/chatPage\";\nimport type { MetaFunction } from \"react-router\";\n\nexport const meta: MetaFunction<typeof loader> = ({ data }) => {\n  if (!data) {\n    return [];\n  }\n  const { owner, repo, url } = data;\n  const repoDescription = repo ? `${owner}/${repo}` : \"any GitHub repo\";\n  if (isChatPage({ owner, repo, url })) {\n    return [\n      { title: \"GitMCP Chat\" },\n      {\n        name: \"description\",\n        content: `Chat with the documentation for ${repoDescription}`,\n      },\n    ];\n  }\n  return [\n    { title: `GitMCP` },\n    {\n      name: \"description\",\n      content: `Get the documentation for ${repoDescription}`,\n    },\n  ];\n};\n\nexport const loader = async ({ request }: { request: Request }) => {\n  const url = new URL(request.url);\n  const host = url.host;\n  const pathname = url.pathname;\n\n  const { urlType, owner, repo } = getRepoData({\n    requestHost: host,\n    requestUrl: pathname,\n  });\n\n  return { urlType, owner, repo, url: url.toString() };\n};\n\nexport function HydrateFallback() {\n  return <p>Skeleton rendered during SSR</p>; // (2)\n}\n\nexport default function ContentPage({\n  loaderData,\n}: {\n  loaderData: Awaited<ReturnType<typeof loader>>;\n}) {\n  const { urlType, owner, repo, url } = loaderData;\n\n  if (isChatPage({ owner, repo, url })) {\n    return <ChatPageServer owner={owner} repo={repo} />;\n  }\n\n  return <Content urlType={urlType} owner={owner} repo={repo} url={url} />;\n}\n\nfunction isChatPage({\n  owner,\n  repo,\n  url,\n}: {\n  owner: string | null;\n  repo: string | null;\n  url: string;\n}) {\n  // is a valid repo\n  const isValid = (owner && repo) || (!repo && owner == \"docs\");\n  if (!isValid) {\n    return false;\n  }\n  // is a chat page\n  return owner != \"chat\" && repo != \"chat\" && url.endsWith(\"/chat\");\n}\n"
  },
  {
    "path": "app/routes/_index.tsx",
    "content": "import { Github, Code, Globe, Zap } from \"lucide-react\";\nimport { useState, type FormEvent, useEffect } from \"react\";\nimport Typewriter from \"typewriter-effect\";\n\nexport default function Home() {\n  const [url, setUrl] = useState(\"\");\n  const [error, setError] = useState<string | null>(null);\n\n  const handleSubmit = (e: FormEvent) => {\n    e.preventDefault();\n    setError(null);\n\n    const action = (\n      (e.nativeEvent as SubmitEvent).submitter as HTMLButtonElement\n    ).value as \"mcp\" | \"chat\" | null;\n\n    // Basic URL validation\n    let processedUrl = url.trim();\n    if (!processedUrl) {\n      setError(\"Please use a valid GitHub URL\");\n      return;\n    }\n\n    // Add https:// if not present\n    if (!/^https?:\\/\\//i.test(processedUrl)) {\n      processedUrl = `https://${processedUrl}`;\n    }\n\n    let targetUrl: string | null = null;\n\n    try {\n      const urlObj = new URL(processedUrl);\n      const hostname = urlObj.hostname;\n      const pathname = urlObj.pathname.replace(/^\\/+|\\/+$/g, \"\");\n\n      // Case 1: GitHub repository URL (github.com/owner/repo)\n      if (hostname === \"github.com\") {\n        const parts = pathname.split(\"/\");\n        if (parts.length >= 2) {\n          const owner = parts[0];\n          const repo = parts[1];\n          if (owner && repo) {\n            targetUrl = `https://gitmcp.io/${owner}/${repo}${action === \"chat\" ? \"/chat\" : \"\"}`;\n          }\n        }\n      }\n      // Case 2: GitHub Pages URL (owner.github.io/repo)\n      else if (hostname.endsWith(\".github.io\")) {\n        const owner = hostname.replace(\".github.io\", \"\");\n        if (owner && pathname) {\n          const repo = pathname.split(\"/\")[0];\n          if (repo) {\n            targetUrl = `https://${owner}.gitmcp.io/${repo}${action === \"chat\" ? \"/chat\" : \"\"}`;\n          }\n        }\n      }\n\n      if (!targetUrl) {\n        setError(\n          \"Invalid GitHub URL format. Please use github.com/owner/repo or owner.github.io/repo\",\n        );\n        return;\n      }\n\n      // Open the GitMCP URL in a new tab\n      window.open(targetUrl, \"_blank\", \"noopener,noreferrer\");\n    } catch (err) {\n      setError(\"Please enter a valid URL\");\n    }\n  };\n\n  const handleTryExample = () => {\n    setUrl(\"github.com/langchain-ai/langgraph\");\n    setError(null);\n  };\n\n  return (\n    <div className=\"min-h-screen bg-gray-900 text-gray-100\">\n      {/* GitHub Link */}\n      <div className=\"absolute top-4 right-4 sm:top-6 sm:right-6 z-10\">\n        <a\n          href=\"https://github.com/idosal/git-mcp\"\n          target=\"_blank\"\n          rel=\"noopener noreferrer\"\n          className=\"flex items-center gap-2 bg-gray-800 hover:bg-gray-700 text-gray-200 px-3 py-2 rounded-md transition-colors duration-200 border border-gray-700 z-10\"\n        >\n          <Github className=\"h-5 w-5\" />\n          <span className=\"hidden sm:inline\">GitHub</span>\n        </a>\n      </div>\n\n      {/* Hero Section */}\n      <div className=\"relative overflow-hidden\">\n        <div className=\"absolute inset-0 bg-grid-gray-800 [mask-image:linear-gradient(0deg,rgba(17,24,39,0.7),rgba(17,24,39,0.5))] bg-[length:20px_20px]\"></div>\n        <div className=\"relative max-w-7xl mx-auto px-4 pb-2 sm:px-6 lg:px-8\">\n          <div className=\"text-center\">\n            <div className=\"flex justify-center\">\n              <img\n                src=\"/img/icon_cropped.png\"\n                alt=\"GitMCP Logo\"\n                className=\"h-auto w-48 sm:w-64 mt-6\"\n              />\n            </div>\n            <h1 className=\"max-w-4xl mx-auto text-4xl sm:text-5xl md:text-[72px] font-bold tracking-tight my-6 mb-2 text-white\">\n              GitMCP\n            </h1>\n            <div className=\"flex flex-wrap text-center justify-center items-center\">\n              <div className=\"flex flex-wrap justify-center whitespace-pre text-2xl sm:text-3xl md:text-[48px] tracking-tight bg-gradient-to-r from-blue-500 via-emerald-400 to-purple-500 text-gradient animate-gradient-x text-center\">\n                <span className=\"font-bold\">Code with</span>\n                <Typewriter\n                  options={{\n                    strings: [\n                      \" confidence\",\n                      \"out hallucinations\",\n                      \" any GitHub project\",\n                      \" MCP documentation\",\n                    ],\n                    autoStart: true,\n                    loop: true,\n                    delay: 40,\n                    deleteSpeed: 15,\n                    pauseFor: 4500,\n                    wrapperClassName: \"font-extrabold\",\n                    cursor: \"\",\n                  }}\n                />\n              </div>\n              <span\n                style={{\n                  color: \"white\",\n                  animation: \"typewriterCursor 1s infinite\",\n                  fontSize: \"42px\",\n                  lineHeight: \"1.33\",\n                }}\n              >\n                |\n              </span>\n            </div>\n\n            <style jsx=\"true\" global=\"true\">{`\n              @keyframes typewriterCursor {\n                0% {\n                  opacity: 0;\n                }\n                50% {\n                  opacity: 1;\n                }\n                100% {\n                  opacity: 0;\n                }\n              }\n            `}</style>\n          </div>\n        </div>\n      </div>\n\n      {/* How It Works Section */}\n      <section id=\"how-it-works\" className=\"py-8 bg-gray-900 pt-0\">\n        <div className=\"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8\">\n          <div className=\"text-center mb-8 sm:mb-16\">\n            <div className=\"mt-0 max-w-3xl mx-auto sm:mt-6\">\n              <div className=\"bg-gray-800 border border-gray-700 rounded-lg p-3 sm:p-4 mb-3\">\n                <Example\n                  from=\"github.com/username/repo\"\n                  to=\"gitmcp.io/username/repo\"\n                  bold=\"gitmcp.io\"\n                />\n                <Divider simple />\n                <Example\n                  from=\"username.github.io/repo\"\n                  to=\"username.gitmcp.io/repo\"\n                  bold=\"gitmcp.io\"\n                />\n                <Divider simple />\n                <Example\n                  from=\"any GitHub repository\"\n                  to=\"gitmcp.io/docs\"\n                  bold={[\"gitmcp.io\", \"any\"]}\n                />\n              </div>\n\n              <Divider text=\"or try the instant GitHub URL converter\" />\n              <div className=\"bg-gray-800 border border-gray-700 rounded-lg sm:p-2 sm:pt-2  mb-8\">\n                <form onSubmit={handleSubmit} className=\"m-3\">\n                  <div className=\"flex rounded-md shadow-sm flex-col sm:flex-row gap-3 sm:gap-0\">\n                    <div className=\"relative flex-1\">\n                      <input\n                        type=\"text\"\n                        name=\"github-url\"\n                        id=\"github-url\"\n                        className=\"w-full bg-gray-700 border border-gray-600 rounded-md py-2 pl-3 pr-28 text-base text-gray-100 placeholder-gray-400 focus:outline-none focus:ring-2 focus:ring-emerald-500 focus:border-emerald-500\"\n                        placeholder=\"Example: github.com/langchain-ai/langgraph\"\n                        value={url}\n                        onChange={(e) => setUrl(e.target.value)}\n                      />\n                      <button\n                        type=\"button\"\n                        onClick={handleTryExample}\n                        className=\"absolute right-2 top-1/2 transform -translate-y-1/2 px-3 py-1 bg-gray-600 hover:bg-gray-500 text-xs text-gray-200 rounded-md transition-colors duration-200\"\n                      >\n                        Try Example\n                      </button>\n                    </div>\n                    <div className=\"flex justify-center sm:justify-start\">\n                      <button\n                        type=\"submit\"\n                        name=\"action\"\n                        value=\"mcp\"\n                        className=\" cursor-pointer ml-3 inline-flex items-center px-2 py-1 border border-transparent text-sm font-bold  rounded-md shadow-sm text-gray-900 bg-emerald-400 hover:bg-emerald-500 transition-colors duration-200 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-emerald-500\"\n                      >\n                        <span className=\"text-gray-800\">To MCP</span>\n                      </button>\n                      <button\n                        type=\"submit\"\n                        name=\"action\"\n                        value=\"chat\"\n                        className=\" cursor-pointer ml-3 inline-flex items-center px-2 py-1 border border-transparent text-sm font-bold  rounded-md shadow-sm text-gray-900 bg-blue-400 hover:bg-blue-500 transition-colors duration-200 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500 relative\"\n                      >\n                        <span className=\"text-gray-800\">To Chat</span>\n                      </button>\n                    </div>\n                  </div>\n                  {error && (\n                    <p\n                      className=\"mt-2 text-sm text-red-400\"\n                      id=\"github-url-error\"\n                    >\n                      {error}\n                    </p>\n                  )}\n                </form>\n              </div>\n              <p className=\"max-w-3xl mx-auto text-lg sm:text-xl md:text-3xl font-light tracking-tight text-gray-300/90 leading-relaxed\">\n                Instantly create a{\" \"}\n                <span className=\"text-emerald-400 font-medium\">\n                  Remote MCP server\n                </span>{\" \"}\n                for any GitHub repository\n              </p>\n              <p className=\"text-base pt-0 sm:text-xl text-gray-300 max-w-3xl mx-auto font-light px-2\">\n                Simply change the domain from{\" \"}\n                <span className=\"text-gray-200 font-medium\">github.com</span> or{\" \"}\n                <span className=\"text-gray-200 font-medium\">github.io</span> to{\" \"}\n                <span className=\"text-emerald-400 font-medium\">gitmcp.io</span>{\" \"}\n                and get instant AI context for any GitHub repository.\n              </p>\n            </div>\n          </div>\n\n          <div className=\"grid grid-cols-1 md:grid-cols-3 gap-6 sm:gap-8\">\n            <div className=\"bg-gray-800 p-4 sm:p-6 rounded-xl border border-gray-700 transform transition-all duration-300 hover:translate-y-[-5px] hover:shadow-xl hover:shadow-emerald-900/20\">\n              <div className=\"w-10 h-10 bg-blue-600 text-white rounded-full flex items-center justify-center mb-4 sm:mb-5 font-bold mx-auto\">\n                1\n              </div>\n              <h3 className=\"text-lg sm:text-xl font-semibold mb-2 sm:mb-3 text-center\">\n                Create MCP URL\n              </h3>\n              <p className=\"text-sm sm:text-base text-gray-400 text-center\">\n                Replace{\" \"}\n                <code className=\"bg-gray-700 px-1.5 py-0.5 rounded\">\n                  github.com\n                </code>{\" \"}\n                with{\" \"}\n                <code className=\"bg-gray-700 px-1.5 py-0.5 rounded text-emerald-400\">\n                  gitmcp.io\n                </code>{\" \"}\n                in any repository URL.\n              </p>\n            </div>\n\n            <div className=\"bg-gray-800 p-4 sm:p-6 rounded-xl border border-gray-700 transform transition-all duration-300 hover:translate-y-[-5px] hover:shadow-xl hover:shadow-emerald-900/20\">\n              <div className=\"w-10 h-10 bg-blue-600 text-white rounded-full flex items-center justify-center mb-4 sm:mb-5 font-bold mx-auto\">\n                2\n              </div>\n              <h3 className=\"text-lg sm:text-xl font-semibold mb-2 sm:mb-3 text-center\">\n                Add to AI Assistant\n              </h3>\n              <p className=\"text-sm sm:text-base text-gray-400 text-center\">\n                Configure your AI tool to use the GitMCP URL as a custom MCP\n                server.\n              </p>\n            </div>\n\n            <div className=\"bg-gray-800 p-4 sm:p-6 rounded-xl border border-gray-700 transform transition-all duration-300 hover:translate-y-[-5px] hover:shadow-xl hover:shadow-emerald-900/20\">\n              <div className=\"w-10 h-10 bg-blue-600 text-white rounded-full flex items-center justify-center mb-4 sm:mb-5 font-bold mx-auto\">\n                3\n              </div>\n              <h3 className=\"text-lg sm:text-xl font-semibold mb-2 sm:mb-3 text-center\">\n                Enhanced AI Coding\n              </h3>\n              <p className=\"text-sm sm:text-base text-gray-400 text-center\">\n                Your AI now understands your repository's context for more\n                accurate and helpful responses.\n              </p>\n            </div>\n          </div>\n        </div>\n      </section>\n\n      {/* Video Demo Section */}\n      <section id=\"github-pages-demo\" className=\"py-8 bg-gray-900\">\n        <div className=\"text-center mb-4 sm:mb-4\">\n          <h2 className=\"text-2xl sm:text-3xl font-bold bg-gradient-to-r from-emerald-400 to-blue-500 text-gradient\">\n            With GitHub Pages\n          </h2>\n          <p className=\"mt-4 text-base sm:text-xl text-gray-300 max-w-3xl mx-auto font-light px-2\">\n            GitMCP works seamlessly with <b>GitHub Pages</b>. Here's an example:\n          </p>\n        </div>\n        <div className=\"max-w-5xl mx-auto px-4 sm:px-6 lg:px-8\">\n          <div className=\"relative rounded-xl overflow-hidden shadow-2xl border border-gray-700\">\n            <video className=\"w-full h-auto\" controls muted loop playsInline>\n              <source src=\"./img/GitMCP_final.mp4\" type=\"video/mp4\" />\n              Your browser does not support the video tag.\n            </video>\n          </div>\n        </div>\n      </section>\n\n      {/* Video PW Demo Section */}\n      <section id=\"github-repo-demo\" className=\"py-8 bg-gray-900\">\n        <div className=\"text-center mb-4 sm:mb-4\">\n          <h2 className=\"text-2xl sm:text-3xl font-bold bg-gradient-to-r from-emerald-400 to-blue-500 text-gradient\">\n            A GitHub Repo\n          </h2>\n          <p className=\"mt-4 text-base sm:text-xl text-gray-300 max-w-3xl mx-auto font-light px-2\">\n            GitMCP works with <b>any public GitHub repository</b>. Here's an\n            example:\n          </p>\n        </div>\n        <div className=\"max-w-5xl mx-auto px-4 sm:px-6 lg:px-8\">\n          <div className=\"relative rounded-xl overflow-hidden shadow-2xl border border-gray-700\">\n            <video className=\"w-full h-auto\" controls muted loop playsInline>\n              <source src=\"./img/GitMCP_PW.mp4\" type=\"video/mp4\" />\n              Your browser does not support the video tag.\n            </video>\n          </div>\n        </div>\n      </section>\n\n      {/* What is GitMCP Section */}\n      <section className=\"py-10 sm:py-16 bg-gray-800\">\n        <div className=\"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8\">\n          <div className=\"text-center mb-10 sm:mb-16\">\n            <h2 className=\"text-2xl sm:text-3xl font-bold bg-gradient-to-r from-emerald-400 to-blue-500 text-gradient\">\n              What is GitMCP?\n            </h2>\n            <p className=\"mt-4 text-base sm:text-xl text-gray-300 max-w-3xl mx-auto font-light px-2\">\n              GitMCP creates a dedicated Model Context Protocol (MCP) server for\n              any GitHub project, enabling AI assistants to understand your code\n              in context.\n            </p>\n          </div>\n\n          <div className=\"grid grid-cols-1 md:grid-cols-3 gap-6 sm:gap-8\">\n            <div className=\"bg-gray-900 p-4 sm:p-6 rounded-xl border border-gray-700\">\n              <div className=\"w-12 h-12 bg-blue-900 rounded-lg flex items-center justify-center mb-4\">\n                <Code className=\"h-5 w-5 sm:h-6 sm:w-6 text-blue-400\" />\n              </div>\n              <h3 className=\"text-lg sm:text-xl font-semibold mb-2 text-gray-100\">\n                Code Understanding\n              </h3>\n              <p className=\"text-sm sm:text-base text-gray-400\">\n                AI assistants gain a deep context of the code repo, reading{\" \"}\n                <span className=\"text-blue-400\">llms.txt</span>,{\" \"}\n                <span className=\"text-blue-400\">llms-full.txt</span>,{\" \"}\n                <span className=\"text-blue-400\">readme.md</span> and more,\n                making their responses more accurate and relevant.\n              </p>\n            </div>\n\n            <div className=\"bg-gray-900 p-4 sm:p-6 rounded-xl border border-gray-700\">\n              <div className=\"w-12 h-12 bg-emerald-900 rounded-lg flex items-center justify-center mb-4\">\n                <Zap className=\"h-5 w-5 sm:h-6 sm:w-6 text-emerald-400\" />\n              </div>\n              <h3 className=\"text-lg sm:text-xl font-semibold mb-2 text-gray-100\">\n                Instant Setup\n              </h3>\n              <p className=\"text-sm sm:text-base text-gray-400\">\n                No complex configuration needed. Just point to your GitHub\n                repository and connect your AI tools.\n              </p>\n            </div>\n\n            <div className=\"bg-gray-900 p-4 sm:p-6 rounded-xl border border-gray-700\">\n              <div className=\"w-12 h-12 bg-purple-900 rounded-lg flex items-center justify-center mb-4\">\n                <Globe className=\"h-5 w-5 sm:h-6 sm:w-6 text-purple-400\" />\n              </div>\n              <h3 className=\"text-lg sm:text-xl font-semibold mb-2 text-gray-100\">\n                Universal Access\n              </h3>\n              <p className=\"text-sm sm:text-base text-gray-400\">\n                Works seamlessly with any public GitHub repository and GitHub\n                Pages, making your documentation and code accessible to AI\n                tools.\n              </p>\n            </div>\n          </div>\n        </div>\n      </section>\n\n      {/* Compatible With Section */}\n      <section className=\"py-10 sm:py-16 bg-gray-800\">\n        <div className=\"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8\">\n          <div className=\"text-center mb-8 sm:mb-12\">\n            <h2 className=\"text-2xl sm:text-3xl font-bold bg-gradient-to-r from-purple-400 to-emerald-500 text-gradient\">\n              Compatible With\n            </h2>\n            <p className=\"mt-4 text-base sm:text-xl text-gray-300 max-w-3xl mx-auto font-light\">\n              Works with all popular MCP-compatible AI tools\n            </p>\n          </div>\n\n          <div className=\"flex flex-wrap justify-center gap-8 sm:gap-16 items-center\">\n            <div className=\"flex flex-col items-center\">\n              <a\n                href=\"https://claude.ai\"\n                target=\"_blank\"\n                rel=\"noopener noreferrer\"\n                className=\"group hover:opacity-90 transition-opacity flex flex-col items-center\"\n              >\n                <div className=\"w-16 h-16 sm:w-20 sm:h-20 bg-gradient-to-br from-gray-700 to-gray-800 rounded-xl shadow-lg flex items-center justify-center mb-3 group-hover:from-gray-650 group-hover:to-gray-750 transition-all\">\n                  <img\n                    src=\"https://claude.ai/favicon.ico\"\n                    alt=\"Claude\"\n                    className=\"h-8 w-8 sm:h-10 sm:w-10\"\n                  />\n                </div>\n                <span className=\"text-gray-200 text-base sm:text-lg font-medium\">\n                  Claude\n                </span>\n              </a>\n            </div>\n\n            <div className=\"flex flex-col items-center\">\n              <a\n                href=\"https://cursor.com\"\n                target=\"_blank\"\n                rel=\"noopener noreferrer\"\n                className=\"group hover:opacity-90 transition-opacity flex flex-col items-center\"\n              >\n                <div className=\"w-16 h-16 sm:w-20 sm:h-20 bg-gradient-to-br from-gray-700 to-gray-800 rounded-xl shadow-lg flex items-center justify-center mb-3 group-hover:from-gray-650 group-hover:to-gray-750 transition-all\">\n                  <img\n                    src=\"https://www.cursor.com/favicon.ico\"\n                    alt=\"Cursor\"\n                    className=\"h-8 w-8 sm:h-10 sm:w-10\"\n                  />\n                </div>\n                <span className=\"text-gray-200 text-base sm:text-lg font-medium\">\n                  Cursor\n                </span>\n              </a>\n            </div>\n\n            <div className=\"flex flex-col items-center\">\n              <a\n                href=\"https://codeium.com/windsurf\"\n                target=\"_blank\"\n                rel=\"noopener noreferrer\"\n                className=\"group hover:opacity-90 transition-opacity flex flex-col items-center\"\n              >\n                <div className=\"w-16 h-16 sm:w-20 sm:h-20 bg-gradient-to-br from-gray-700 to-gray-800 rounded-xl shadow-lg flex items-center justify-center mb-3 group-hover:from-gray-650 group-hover:to-gray-750 transition-all\">\n                  <img\n                    src=\"https://codeium.com/favicon.ico\"\n                    alt=\"Windsurf\"\n                    className=\"h-8 w-8 sm:h-10 sm:w-10\"\n                  />\n                </div>\n                <span className=\"text-gray-200 text-base sm:text-lg font-medium\">\n                  Windsurf\n                </span>\n              </a>\n            </div>\n\n            <div className=\"flex flex-col items-center\">\n              <a\n                href=\"https://code.visualstudio.com/\"\n                target=\"_blank\"\n                rel=\"noopener noreferrer\"\n                className=\"group hover:opacity-90 transition-opacity flex flex-col items-center\"\n              >\n                <div className=\"w-16 h-16 sm:w-20 sm:h-20 bg-gradient-to-br from-gray-700 to-gray-800 rounded-xl shadow-lg flex items-center justify-center mb-3 group-hover:from-gray-650 group-hover:to-gray-750 transition-all\">\n                  <img\n                    src=\"https://code.visualstudio.com/assets/favicon.ico\"\n                    alt=\"VSCode\"\n                    className=\"h-8 w-8 sm:h-10 sm:w-10\"\n                  />\n                </div>\n                <span className=\"text-gray-200 text-base sm:text-lg font-medium\">\n                  VSCode\n                </span>\n              </a>\n            </div>\n\n            <div className=\"flex flex-col items-center\">\n              <a\n                href=\"https://cline.bot\"\n                target=\"_blank\"\n                rel=\"noopener noreferrer\"\n                className=\"group hover:opacity-90 transition-opacity flex flex-col items-center\"\n              >\n                <div className=\"w-16 h-16 sm:w-20 sm:h-20 bg-gradient-to-br from-gray-700 to-gray-800 rounded-xl shadow-lg flex items-center justify-center mb-3 group-hover:from-gray-650 group-hover:to-gray-750 transition-all\">\n                  <img\n                    src=\"https://cline.bot/assets/branding/favicons/favicon-256x256.png\"\n                    alt=\"Cline\"\n                    className=\"h-8 w-8 sm:h-10 sm:w-10\"\n                  />\n                </div>\n                <span className=\"text-gray-200 text-base sm:text-lg font-medium\">\n                  Cline\n                </span>\n              </a>\n            </div>\n\n            <div className=\"flex flex-col items-center\">\n              <a\n                href=\"https://highlightai.com\"\n                target=\"_blank\"\n                rel=\"noopener noreferrer\"\n                className=\"group hover:opacity-90 transition-opacity flex flex-col items-center\"\n              >\n                <div className=\"w-16 h-16 sm:w-20 sm:h-20 bg-gradient-to-br from-gray-700 to-gray-800 rounded-xl shadow-lg flex items-center justify-center mb-3 group-hover:from-gray-650 group-hover:to-gray-750 transition-all\">\n                  <img\n                    src=\"https://highlightai.com/favicon.ico\"\n                    alt=\"Highlight AI\"\n                    className=\"h-8 w-8 sm:h-10 sm:w-10\"\n                  />\n                </div>\n                <span className=\"text-gray-200 text-base sm:text-lg font-medium\">\n                  Highlight AI\n                </span>\n              </a>\n            </div>\n\n            <div className=\"flex flex-col items-center\">\n              <a\n                href=\"https://augmentcode.com/\"\n                target=\"_blank\"\n                rel=\"noopener noreferrer\"\n                className=\"group hover:opacity-90 transition-opacity flex flex-col items-center\"\n              >\n                <div className=\"w-16 h-16 sm:w-20 sm:h-20 bg-gradient-to-br from-gray-700 to-gray-800 rounded-xl shadow-lg flex items-center justify-center mb-3 group-hover:from-gray-650 group-hover:to-gray-750 transition-all\">\n                  <img\n                    src=\"https://cdn.prod.website-files.com/66d76c2202b335e39ad2b5e8/66f302d663108ca67c19ddbc_Favicon.png\"\n                    alt=\"Augment Code\"\n                    className=\"h-8 w-8 sm:h-10 sm:w-10\"\n                  />\n                </div>\n                <span className=\"text-gray-200 text-base sm:text-lg font-medium\">\n                  Augment Code\n                </span>\n              </a>\n            </div>\n\n            <div className=\"flex flex-col items-center\">\n              <a\n                href=\"https://msty.studio\"\n                target=\"_blank\"\n                rel=\"noopener noreferrer\"\n                className=\"group hover:opacity-90 transition-opacity flex flex-col items-center\"\n              >\n                <div className=\"w-16 h-16 sm:w-20 sm:h-20 bg-gradient-to-br from-gray-700 to-gray-800 rounded-xl shadow-lg flex items-center justify-center mb-3 group-hover:from-gray-650 group-hover:to-gray-750 transition-all\">\n                  <img\n                    src=\"https://msty.studio/favicon.ico\"\n                    alt=\"Msty AI\"\n                    className=\"h-8 w-8 sm:h-10 sm:w-10\"\n                  />\n                </div>\n                <span className=\"text-gray-200 text-base sm:text-lg font-medium\">\n                  Msty AI\n                </span>\n              </a>\n            </div>\n          </div>\n        </div>\n      </section>\n\n      {/* Footer */}\n      <footer className=\"bg-gray-950 text-gray-400 py-4 sm:py-6\">\n        <div className=\"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8\">\n          <div className=\"flex flex-col md:flex-row justify-between items-center\">\n            <div className=\"mb-6 md:mb-0\">\n              <div className=\"text-xl sm:text-2xl font-bold mb-2\">\n                <span className=\"text-blue-400\">Git</span>\n                <span className=\"text-emerald-400\">MCP</span>\n              </div>\n              <p className=\"text-sm sm:text-base text-gray-500\">\n                © 2025 GitMCP. All rights reserved.\n              </p>\n            </div>\n          </div>\n        </div>\n      </footer>\n    </div>\n  );\n}\n\nfunction Example({\n  from,\n  to,\n  bold,\n}: {\n  from: string;\n  to: string;\n  bold: string | string[];\n}) {\n  const withBold = (text: string) => {\n    let result = text;\n    const boldArray = Array.isArray(bold) ? bold : [bold];\n    boldArray.forEach((b) => {\n      result = result.replace(b, `<b>${b}</b>`);\n    });\n    return result;\n  };\n  return (\n    <div className=\"flex flex-col sm:flex-row items-center pb-3 pt-2\">\n      <div className=\"flex-1 flex items-center justify-center sm:justify-end text-gray-300 text-sm sm:text-lg font-mono px-2 sm:px-4 mb-2 sm:mb-0\">\n        <span dangerouslySetInnerHTML={{ __html: withBold(from) }} />\n      </div>\n      <div className=\"mx-2 sm:mx-4 text-gray-500 transform rotate-90 sm:rotate-0\">\n        →\n      </div>\n      <div className=\"flex-1 flex items-center justify-center sm:justify-start text-emerald-400 text-sm sm:text-lg font-mono px-2 sm:px-4\">\n        <span dangerouslySetInnerHTML={{ __html: withBold(to) }} />\n      </div>\n    </div>\n  );\n}\n\nfunction Divider({ text, simple }: { text?: string; simple?: boolean }) {\n  if (simple) {\n    return (\n      <div className=\"flex justify-center py-1\">\n        <div className=\"w-48 h-px bg-gray-700/70\"></div>\n      </div>\n    );\n  }\n\n  return (\n    <div className=\"flex items-center w-full my-4\">\n      <div className=\"h-0.5 flex-1 bg-gradient-to-r from-transparent to-gray-700\"></div>\n      {text && (\n        <div className=\"px-4 py-1 bg-gray-800 text-gray-400 text-sm rounded-full border border-gray-700\">\n          {text}\n        </div>\n      )}\n      <div className=\"h-0.5 flex-1 bg-gradient-to-l from-transparent to-gray-700\"></div>\n    </div>\n  );\n}\n\nfunction Carousel() {\n  const [currentSlide, setCurrentSlide] = useState(0);\n  const slides = [\n    {\n      text: \"Remote documentation server\",\n      icon: (\n        <Globe className=\"mr-2 sm:mr-3 h-6 w-6 sm:h-7 sm:w-7 md:h-8 md:w-8 text-blue-400\" />\n      ),\n    },\n    {\n      text: \"Connect your IDE to the world\",\n      icon: (\n        <Code className=\"mr-2 sm:mr-3 h-6 w-6 sm:h-7 sm:w-7 md:h-8 md:w-8 text-purple-400\" />\n      ),\n    },\n    {\n      text: \"Prevent AI code hallucinations\",\n      icon: (\n        <Zap className=\"mr-2 sm:mr-3 h-6 w-6 sm:h-7 sm:w-7 md:h-8 md:w-8 text-emerald-400\" />\n      ),\n    },\n  ];\n\n  useEffect(() => {\n    const interval = setInterval(() => {\n      setCurrentSlide((prev) => (prev + 1) % slides.length);\n    }, 8000);\n\n    return () => clearInterval(interval);\n  }, [slides.length]);\n\n  const getSlideClass = (index: number) => {\n    // Current slide\n    if (index === currentSlide) {\n      return \"opacity-100 z-10\";\n    }\n\n    // All other slides - simple opacity change for cross-fade\n    return \"opacity-0 z-0\";\n  };\n\n  return (\n    <div className=\"relative my-4 mt-0 h-[70px] sm:h-[80px] md:h-[100px] mx-auto max-w-4xl\">\n      <div className=\"overflow-hidden h-full relative \">\n        {slides.map((slide, index) => (\n          <div\n            key={index}\n            className={`absolute w-full h-full flex items-center justify-center transition-opacity duration-2000 ease-in-out ${getSlideClass(index)}`}\n          >\n            <div className=\"flex items-center justify-center\">\n              {/* <div\n                className={`transition-all duration-2000 ${\n                  index === currentSlide ? \"opacity-100\" : \"opacity-0\"\n                }`}\n              >\n                {slide.icon}\n              </div> */}\n              <h3 className=\"text-2xl sm:text-3xl md:text-[48px] font-bold tracking-tight bg-gradient-to-r from-blue-500 via-emerald-400 to-purple-500 text-gradient animate-gradient-x px-4 text-center\">\n                {slide.text}\n              </h3>\n            </div>\n          </div>\n        ))}\n      </div>\n    </div>\n  );\n}\n"
  },
  {
    "path": "app/routes/api.chat.ts",
    "content": "import { getModel } from \"~/chat/ai/providers.server\";\nimport type { modelID } from \"~/chat/ai/providers.shared\";\nimport { streamText, type ToolSet, type UIMessage } from \"ai\";\n\nimport type { StorageKey } from \"~/chat/ai/providers.shared\";\nimport { MCPClientManager } from \"agents/mcp/client\";\n\n// Allow streaming responses up to 30 seconds\nexport const maxDuration = 60;\n\ninterface KeyValuePair {\n  key: string;\n  value: string;\n}\n\ninterface MCPServerConfig {\n  url: string;\n  type: \"sse\" | \"stdio\";\n  command?: string;\n  args?: string[];\n  env?: KeyValuePair[];\n  headers?: KeyValuePair[];\n}\n\nexport async function action({\n  request,\n  context,\n}: {\n  request: Request;\n  context: any;\n}) {\n  const {\n    messages,\n    selectedModel,\n    mcpServers = [],\n    apiKeys,\n  }: {\n    messages: UIMessage[];\n    selectedModel: modelID;\n    mcpServers?: MCPServerConfig[];\n    apiKeys: Record<StorageKey, string>;\n  } = await request.json();\n\n  const env = context.cloudflare.env as CloudflareEnvironment;\n  const model = getModel(env, apiKeys);\n\n  // // Initialize tools\n  // let tools = {};\n  // const mcpClients: any[] = [];\n\n  // // Process each MCP server configuration\n  // for (const mcpServer of mcpServers) {\n  //   try {\n  //     // Create appropriate transport based on type\n  //     let transport:\n  //       | MCPTransport\n  //       | { type: \"sse\"; url: string; headers?: Record<string, string> };\n\n  //     if (mcpServer.type === \"sse\") {\n  //       // Convert headers array to object for SSE transport\n  //       const headers: Record<string, string> = {};\n  //       if (mcpServer.headers && mcpServer.headers.length > 0) {\n  //         mcpServer.headers.forEach((header) => {\n  //           if (header.key) headers[header.key] = header.value || \"\";\n  //         });\n  //       }\n\n  //       transport = {\n  //         type: \"sse\" as const,\n  //         url: mcpServer.url,\n  //         headers: Object.keys(headers).length > 0 ? headers : undefined,\n  //       };\n  //     } else {\n  //       console.warn(\n  //         `Skipping MCP server with unsupported transport type: ${mcpServer.type}`,\n  //       );\n  //       continue;\n  //     }\n\n  //     const mcpClient = await createMCPClient({ transport });\n  //     mcpClients.push(mcpClient);\n\n  //     const mcptools = await mcpClient.tools();\n  //     console.log(\"mcptools\", mcptools);\n\n  //     console.log(\n  //       `MCP tools from ${mcpServer.type} transport:`,\n  //       Object.keys(mcptools),\n  //     );\n\n  //     // Add MCP tools to tools object\n  //     tools = { ...tools, ...mcptools };\n  //   } catch (error) {\n  //     console.error(\"Failed to initialize MCP client:\", error);\n  //     // Continue with other servers instead of failing the entire request\n  //   }\n  // }\n\n  // // Register cleanup for all clients\n  // if (mcpClients.length > 0) {\n  //   request.signal.addEventListener(\"abort\", async () => {\n  //     for (const client of mcpClients) {\n  //       try {\n  //         await client.close();\n  //       } catch (error) {\n  //         console.error(\"Error closing MCP client:\", error);\n  //       }\n  //     }\n  //   });\n  // }\n\n  let tools: ToolSet = {};\n  const mcp = new MCPClientManager(\"my-agent\", \"1.0.0\");\n  for (const originalUrl of mcpServers.map((mcpServer) => mcpServer.url)) {\n    const url = originalUrl.replace(\n      \"https://gitmcp.io\",\n      \"https://git-mcp.idosalomon.workers.dev\",\n    );\n    try {\n      const { id } = await mcp.connect(url);\n      if (mcp.mcpConnections[id]?.connectionState === \"ready\") {\n        const mcptools = await mcp.unstable_getAITools();\n        tools = { ...tools, ...mcptools };\n      }\n    } catch (error) {\n      console.error(\"Error getting tools for url\", url, error);\n    }\n  }\n\n  // console.log(\"messages\", messages);\n  // console.log(\n  //   \"parts\",\n  //   messages.map((m) => m.parts.map((p) => p)),\n  // );\n\n  // If there was an error setting up MCP clients but we at least have composio tools, continue\n  const result = streamText({\n    model: model.languageModel(selectedModel),\n    system: `You are a helpful assistant with access to a variety of tools.\n\n    Today's date is ${new Date().toISOString().split(\"T\")[0]}.\n\n    The tools are very powerful, and you can use them to answer the user's question.\n    So choose the tool that is most relevant to the user's question.\n\n    If tools are not available, say you don't know or if the user wants a tool they can add one from the server icon in bottom left corner in the sidebar.\n\n    You can use multiple tools in a single response.\n    Always respond after using the tools for better user experience.\n    You can run multiple steps using all the tools!!!!\n    Make sure to use the right tool to respond to the user's question.\n\n    Multiple tools can be used in a single response and multiple steps can be used to answer the user's question.\n\n    ## Response Format\n    - Markdown is supported.\n    - Respond according to tool's response.\n    - Use the tools to answer the user's question.\n    - If you don't know the answer, use the tools to find the answer or say you don't know.\n    `,\n    messages,\n    tools,\n    maxSteps: 20,\n    providerOptions: {\n      google: {\n        thinkingConfig: {\n          thinkingBudget: 2048,\n        },\n      },\n      anthropic: {\n        thinking: {\n          type: \"enabled\",\n          budgetTokens: 12000,\n        },\n      },\n    },\n    onError: (error) => {\n      console.error(JSON.stringify(error, null, 2));\n    },\n  });\n\n  result.consumeStream();\n  return result.toDataStreamResponse({\n    sendReasoning: true,\n    getErrorMessage: (error) => {\n      if (error instanceof Error) {\n        if (error.message.includes(\"Rate limit\")) {\n          return \"Rate limit exceeded. Please try again later.\";\n        }\n      }\n      if (error instanceof Error) {\n        if (error.name === \"AI_LoadAPIKeyError\") {\n          return (\n            error.message.split(\".\")[0] +\n            \". Please add an API key in the settings.\"\n          );\n        }\n      }\n      const message =\n        error instanceof Error ? error.message : \"An error occurred.\";\n      console.error(error);\n      return message;\n    },\n  });\n}\n"
  },
  {
    "path": "app/routes.ts",
    "content": "import { type RouteConfig } from \"@react-router/dev/routes\";\nimport { flatRoutes } from \"@react-router/fs-routes\";\n\nexport default flatRoutes() satisfies RouteConfig;\n"
  },
  {
    "path": "biome.json",
    "content": "{\n  \"$schema\": \"https://biomejs.dev/schemas/1.6.2/schema.json\",\n  \"organizeImports\": {\n    \"enabled\": true\n  },\n  \"files\": {\n    \"ignore\": [\"worker-configuration.d.ts\"]\n  },\n  \"vcs\": {\n    \"enabled\": true,\n    \"clientKind\": \"git\",\n    \"useIgnoreFile\": true\n  },\n  \"linter\": {\n    \"enabled\": true,\n    \"rules\": {\n      \"recommended\": true,\n      \"suspicious\": {\n        \"noExplicitAny\": \"off\",\n        \"noDebugger\": \"off\",\n        \"noConsoleLog\": \"off\",\n        \"noConfusingVoidType\": \"off\"\n      },\n      \"style\": {\n        \"noNonNullAssertion\": \"off\"\n      }\n    }\n  },\n  \"formatter\": {\n    \"enabled\": true,\n    \"indentWidth\": 4,\n    \"lineWidth\": 100\n  }\n}\n"
  },
  {
    "path": "components.json",
    "content": "{\n  \"$schema\": \"https://ui.shadcn.com/schema.json\",\n  \"style\": \"new-york\",\n  \"rsc\": true,\n  \"tsx\": true,\n  \"tailwind\": {\n    \"config\": \"\",\n    \"css\": \"app/globals.css\",\n    \"baseColor\": \"zinc\",\n    \"cssVariables\": true,\n    \"prefix\": \"\"\n  },\n  \"aliases\": {\n    \"components\": \"@/components\",\n    \"utils\": \"@/lib/utils\",\n    \"ui\": \"@/components/ui\",\n    \"lib\": \"@/lib\",\n    \"hooks\": \"@/hooks\"\n  },\n  \"iconLibrary\": \"lucide\"\n}"
  },
  {
    "path": "package.json",
    "content": "{\n  \"name\": \"git-mcp\",\n  \"version\": \"1.0.0\",\n  \"description\": \"GitMCP is a tool that allows you to get the documentation for a given repository.\",\n  \"private\": true,\n  \"type\": \"module\",\n  \"scripts\": {\n    \"build\": \"react-router build\",\n    \"deploy\": \"npm run build && wrangler deploy\",\n    \"dev\": \"react-router dev\",\n    \"preview\": \"vite preview\",\n    \"start\": \"wrangler dev\",\n    \"format\": \"biome format --write\",\n    \"lint:fix\": \"biome lint --fix\",\n    \"cf-typegen\": \"wrangler types\",\n    \"test\": \"vitest run\",\n    \"test:e2e\": \"playwright test\",\n    \"prepare\": \"husky\"\n  },\n  \"lint-staged\": {\n    \"src/**/*.ts\": [\n      \"prettier --write\"\n    ],\n    \"src/**/*.tsx\": [\n      \"prettier --write\"\n    ],\n    \"app/**/*.ts\": [\n      \"prettier --write\"\n    ],\n    \"app/**/*.tsx\": [\n      \"prettier --write\"\n    ]\n  },\n  \"keywords\": [],\n  \"author\": \"\",\n  \"license\": \"ISC\",\n  \"packageManager\": \"pnpm@10.7.1+sha512.2d92c86b7928dc8284f53494fb4201f983da65f0fb4f0d40baafa5cf628fa31dae3e5968f12466f17df7e97310e30f343a648baea1b9b350685dafafffdf5808\",\n  \"dependencies\": {\n    \"@ai-sdk/anthropic\": \"^1.2.10\",\n    \"@ai-sdk/cohere\": \"^1.2.9\",\n    \"@ai-sdk/google\": \"^1.2.13\",\n    \"@ai-sdk/groq\": \"^1.2.8\",\n    \"@ai-sdk/openai\": \"^1.3.20\",\n    \"@ai-sdk/react\": \"^1.2.9\",\n    \"@ai-sdk/xai\": \"^1.2.15\",\n    \"@cloudflare/workers-oauth-provider\": \"^0.0.2\",\n    \"@modelcontextprotocol/sdk\": \"^1.11.2\",\n    \"@radix-ui/react-accordion\": \"^1.2.8\",\n    \"@radix-ui/react-avatar\": \"^1.1.7\",\n    \"@radix-ui/react-dialog\": \"^1.1.11\",\n    \"@radix-ui/react-dropdown-menu\": \"^2.1.12\",\n    \"@radix-ui/react-label\": \"^2.1.4\",\n    \"@radix-ui/react-popover\": \"^1.1.11\",\n    \"@radix-ui/react-scroll-area\": \"^1.2.6\",\n    \"@radix-ui/react-select\": \"^2.2.2\",\n    \"@radix-ui/react-separator\": \"^1.1.4\",\n    \"@radix-ui/react-slot\": \"^1.2.0\",\n    \"@radix-ui/react-tooltip\": \"^1.2.4\",\n    \"@react-router/fs-routes\": \"^7.5.2\",\n    \"@remix-run/cloudflare\": \"^2.16.5\",\n    \"@types/react\": \"^19.1.2\",\n    \"@types/react-dom\": \"^19.1.2\",\n    \"agents\": \"^0.0.84\",\n    \"ai\": \"^4.3.10\",\n    \"class-variance-authority\": \"^0.7.1\",\n    \"clsx\": \"^2.1.1\",\n    \"dotenv\": \"^16.5.0\",\n    \"fast-deep-equal\": \"^3.1.3\",\n    \"hono\": \"^4.7.7\",\n    \"html-to-md\": \"^0.8.7\",\n    \"isbot\": \"^5.1.27\",\n    \"lucide-react\": \"^0.487.0\",\n    \"motion\": \"^12.9.2\",\n    \"next-themes\": \"^0.4.6\",\n    \"react\": \"^19.1.0\",\n    \"react-dom\": \"^19.1.0\",\n    \"react-markdown\": \"^10.1.0\",\n    \"react-router\": \"^7.5.2\",\n    \"react-router-dom\": \"^7.5.2\",\n    \"remark-gfm\": \"^4.0.1\",\n    \"sonner\": \"^2.0.3\",\n    \"tailwind-merge\": \"^3.2.0\",\n    \"tailwindcss-animate\": \"^1.0.7\",\n    \"typewriter-effect\": \"^2.21.0\",\n    \"zod\": \"^3.24.3\"\n  },\n  \"devDependencies\": {\n    \"@cloudflare/vite-plugin\": \"^0.1.21\",\n    \"@cloudflare/workers-types\": \"^4.20250505.0\",\n    \"@playwright/test\": \"^1.52.0\",\n    \"@react-router/dev\": \"^7.5.2\",\n    \"@tailwindcss/postcss\": \"^4.1.4\",\n    \"@tailwindcss/vite\": \"^4.1.4\",\n    \"@types/node\": \"^20.17.31\",\n    \"@types/node-fetch\": \"^2.6.12\",\n    \"@types/react\": \"^19.0.1\",\n    \"@types/react-dom\": \"^19.0.1\",\n    \"husky\": \"^9.1.7\",\n    \"lint-staged\": \"^15.5.1\",\n    \"marked\": \"^15.0.11\",\n    \"node-fetch\": \"^3.3.2\",\n    \"prettier\": \"^3.5.3\",\n    \"tailwindcss\": \"^4.1.4\",\n    \"typescript\": \"^5.8.3\",\n    \"vite\": \"^6.3.3\",\n    \"vite-tsconfig-paths\": \"^5.1.4\",\n    \"vitest\": \"^1.6.1\",\n    \"workers-mcp\": \"0.1.0-3\",\n    \"wrangler\": \"^4.14.1\"\n  }\n}\n"
  },
  {
    "path": "playwright.config.ts",
    "content": "import { defineConfig, devices } from '@playwright/test';\nimport path from 'path';\nimport { fileURLToPath } from 'url'; // Import necessary functions\n\n// ES Module equivalent of __dirname\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = path.dirname(__filename);\n\n/**\n * See https://playwright.dev/docs/test-configuration.\n */\nexport default defineConfig({\n  testDir: './tests/e2e', // Point to your end-to-end tests directory\n\n  // Path to the global setup file.\n  // Use the derived __dirname for correct path resolution in ESM\n  globalSetup: path.resolve(__dirname, './tests/global-setup.ts'),\n\n  /* Run tests in files in parallel */\n  fullyParallel: true,\n  /* Fail the build on CI if you accidentally left test.only in the source code. */\n  forbidOnly: !!process.env.CI,\n  /* Retry on CI only */\n  retries: process.env.CI ? 3 : 0,\n  /* Opt out of parallel tests on CI. */\n  workers: process.env.CI ? 1 : undefined,\n  /* Reporter to use. See https://playwright.dev/docs/test-reporters */\n  reporter: 'html',\n  /* Shared settings for all the projects below. See https://playwright.dev/docs/api/class-testoptions. */\n  use: {\n    /* Base URL to use in actions like `await page.goto('/')`. */\n    baseURL: 'http://localhost:5174', // Point to the local Inspector UI\n\n    /* Run tests in headed mode */\n    headless: process.env.CI ? true : false,\n\n    /* Collect trace when retrying the failed test. See https://playwright.dev/docs/trace-viewer */\n    trace: 'on-first-retry',\n  },\n\n  /* Configure projects for major browsers */\n  projects: [\n    {\n      name: 'chromium',\n      use: { ...devices['Desktop Chrome'] },\n    },\n\n    // {\n    //   name: 'firefox',\n    //   use: { ...devices['Desktop Firefox'] },\n    // },\n\n    // {\n    //   name: 'webkit',\n    //   use: { ...devices['Desktop Safari'] },\n    // },\n  ],\n\n  /* Configure multiple web servers */\n  webServer: [\n    {\n      name: 'GitMCP-DevServer',\n      command: 'pnpm run dev',\n      url: 'http://localhost:5173',\n      stderr: 'pipe',\n      timeout: 120 * 1000,\n    },\n    {\n      name: 'MCP Inspector',\n      command: 'CLIENT_PORT=5174 SERVER_PORT=6277 npx @modelcontextprotocol/inspector',\n      url: 'http://localhost:5174', // Inspector UI URL (matches baseURL)\n      stdout: 'ignore',\n      stderr: 'pipe',\n      timeout: 120 * 1000, // Give inspector time to start\n    }\n  ],\n}); "
  },
  {
    "path": "postcss.config.mjs",
    "content": "/** @type {import('tailwindcss').Config} */\nexport default {\n  plugins: {\n    \"@tailwindcss/postcss\": {},\n  },\n};\n"
  },
  {
    "path": "react-router.config.ts",
    "content": "import type { Config } from \"@react-router/dev/config\";\n\nexport default {\n  ssr: true,\n  future: {\n    unstable_viteEnvironmentApi: true,\n  },\n} satisfies Config;\n"
  },
  {
    "path": "src/api/test-setup.ts",
    "content": "export interface TestSetupBindings extends Env {\n  DOCS_BUCKET: R2Bucket; // Ensure this matches CloudflareEnvironment definition\n  ENVIRONMENT?: string; // Environment variable to check if we are in 'test' mode\n}\n\nconst dummyFilesToUpload = [\n  {\n    bucketPath: \"remix-run/react-router/llms.txt\",\n    content:\n      \"# React Router Dummy Test File\\n\\nThis is hardcoded content for E2E testing R2 population.\",\n  },\n  {\n    bucketPath: \"answerdotai/fasthtml/llms.txt\",\n    content:\n      \"# FastHTML Dummy Test File\\n\\nThis is hardcoded content for E2E testing R2 population.\",\n  },\n  {\n    bucketPath: \"mrdoob/three.js/llms.txt\",\n    content:\n      \"# Three.js Dummy Test File\\n\\nThis is hardcoded content for E2E testing R2 population.\",\n  },\n];\n\nexport async function handleR2TestSetup(\n  env: TestSetupBindings,\n): Promise<Response> {\n  if (env.ENVIRONMENT !== \"test\") {\n    console.warn(\"Attempted to run R2 setup outside test environment.\");\n    return new Response(\"Forbidden\", {\n      status: 403,\n      headers: { \"Content-Type\": \"application/json\" },\n    });\n  }\n\n  console.log(\"Handling R2 setup for tests using hardcoded content...\");\n\n  if (!env.DOCS_BUCKET) {\n    console.error(\"DOCS_BUCKET binding not found in environment.\");\n    return new Response(\n      JSON.stringify({ error: \"R2 bucket binding not configured\" }),\n      {\n        status: 500,\n        headers: { \"Content-Type\": \"application/json\" },\n      },\n    );\n  }\n\n  const results = [];\n  let errors = 0;\n\n  for (const file of dummyFilesToUpload) {\n    try {\n      await env.DOCS_BUCKET.put(file.bucketPath, file.content);\n      results.push(\n        `Successfully uploaded hardcoded content to ${file.bucketPath}`,\n      );\n      console.log(`Uploaded hardcoded content to ${file.bucketPath} in R2`);\n    } catch (error) {\n      const errorMessage =\n        error instanceof Error ? error.message : String(error);\n      console.error(\n        `Error uploading hardcoded content to ${file.bucketPath} in R2:`,\n        errorMessage,\n      );\n      results.push(\n        `Failed to upload hardcoded content to ${file.bucketPath}: ${errorMessage}`,\n      );\n      errors++;\n    }\n  }\n\n  const responseBody = {\n    message:\n      errors > 0\n        ? `R2 setup partially failed. ${errors} errors.`\n        : \"R2 setup with hardcoded content successful.\",\n    details: results,\n  };\n  const status = errors > 0 ? 500 : 200;\n\n  return new Response(JSON.stringify(responseBody), {\n    status: status,\n    headers: { \"Content-Type\": \"application/json\" },\n  });\n}\n"
  },
  {
    "path": "src/api/tools/commonTools.test.ts",
    "content": "import { describe, it, expect } from \"vitest\";\nimport { enforceToolNameLengthLimit, LIMIT } from \"./commonTools\";\nimport { generateServerName } from \"../../shared/nameUtils\";\n\ndescribe(\"enforceToolNameLengthLimit\", () => {\n  it(\"should return a tool name that is less than LIMIT characters\", () => {\n    const repoName = \"nestjs-context-logger\";\n    const toolName = enforceToolNameLengthLimit(\"fetch_\", repoName, \"_docs\");\n    const serverNameLength = generateServerName(repoName).length;\n    expect(toolName).toBe(\"fetch_nestjs_context_docs\");\n    const totalNameLength = toolName.length + serverNameLength;\n    expect(totalNameLength).toBeLessThanOrEqual(LIMIT);\n  });\n\n  it(\"should preserve the original tool name if it's already less than LIMIT characters\", () => {\n    const toolName = enforceToolNameLengthLimit(\n      \"search_\",\n      \"playwright-mcp\",\n      \"_docs\",\n    );\n    const serverNameLength = generateServerName(\"playwright-mcp\").length;\n    expect(toolName).toBe(\"search_playwright_mcp_docs\");\n    const totalNameLength = toolName.length + serverNameLength;\n    expect(totalNameLength).toBeLessThanOrEqual(LIMIT);\n  });\n\n  it(\"should return 'repo' if the repo name is too long\", () => {\n    const repoName = \"nestjs-context-logger-is-long\";\n    const toolName = enforceToolNameLengthLimit(\"search_\", repoName, \"_docs\");\n    const serverNameLength = generateServerName(repoName).length;\n    expect(toolName).toBe(\"search_repo_docs\");\n    const totalNameLength = toolName.length + serverNameLength;\n    expect(totalNameLength).toBeLessThanOrEqual(LIMIT);\n  });\n  it(\"should return nothing if the repo name is too long\", () => {\n    const repoName = \"nestjs-context-logger-very-very-long\";\n    const toolName = enforceToolNameLengthLimit(\"search_\", repoName, \"_docs\");\n    expect(toolName).toBe(\"search_docs\");\n  });\n});\n"
  },
  {
    "path": "src/api/tools/commonTools.ts",
    "content": "import type { RepoData } from \"../../shared/repoData.js\";\nimport {\n  constructGithubUrl,\n  fetchFileFromGitHub,\n  getRepoBranch,\n  searchGitHubRepo,\n} from \"../utils/github.js\";\nimport { fetchFileWithRobotsTxtCheck } from \"../utils/robotsTxt.js\";\nimport htmlToMd from \"html-to-md\";\nimport { searchCode } from \"../utils/githubClient.js\";\nimport { fetchFileFromR2 } from \"../utils/r2.js\";\nimport { generateServerName } from \"../../shared/nameUtils.js\";\nimport {\n  getCachedFetchDocResult,\n  cacheFetchDocResult,\n} from \"../utils/cache.js\";\n\n// Define the return type for fetchDocumentation\nexport type FetchDocumentationResult = {\n  fileUsed: string;\n  content: { type: \"text\"; text: string }[];\n};\n\n// Add env parameter to access Cloudflare's bindings\nexport async function fetchDocumentation({\n  repoData,\n  env,\n  ctx,\n}: {\n  repoData: RepoData;\n  env: CloudflareEnvironment;\n  ctx: any;\n}): Promise<FetchDocumentationResult> {\n  const { owner, repo, urlType } = repoData;\n  const cacheTTL = 30 * 60; // 30 minutes in seconds\n\n  // Try fetching from cache first\n  if (owner && repo) {\n    const cachedResult = await getCachedFetchDocResult(owner, repo, env);\n    if (cachedResult) {\n      console.log(\n        `Returning cached fetchDocumentation result for ${owner}/${repo}`,\n      );\n      return cachedResult;\n    }\n  }\n\n  // Initialize fileUsed to prevent \"used before assigned\" error\n  let fileUsed = \"unknown\";\n  let content: string | null = null;\n  let docsPath: string = \"\";\n  let docsBranch: string = \"\";\n  let blockedByRobots = false;\n\n  // Check for subdomain pattern: {subdomain}.gitmcp.io/{path}\n  if (urlType === \"subdomain\") {\n    // Map to github.io\n    const githubIoDomain = `${owner}.github.io`;\n    const pathWithSlash = repo ? `/${repo}` : \"\";\n    const baseURL = `https://${githubIoDomain}${pathWithSlash}/`;\n\n    // Try to fetch llms.txt with robots.txt check\n    const llmsResult = await fetchFileWithRobotsTxtCheck(\n      baseURL + \"llms.txt\",\n      env,\n    );\n\n    if (llmsResult.blockedByRobots) {\n      blockedByRobots = true;\n      console.log(`Access to ${baseURL}llms.txt disallowed by robots.txt`);\n    } else if (llmsResult.content) {\n      content = llmsResult.content;\n      fileUsed = \"llms.txt\";\n    } else {\n      // If llms.txt is not found or disallowed, fall back to the landing page\n      console.warn(\n        `llms.txt not found or not allowed at ${baseURL}, trying base URL`,\n      );\n      const indexResult = await fetchFileWithRobotsTxtCheck(baseURL, env);\n\n      if (indexResult.blockedByRobots) {\n        blockedByRobots = true;\n        console.log(`Access to ${baseURL} disallowed by robots.txt`);\n      } else if (indexResult.content) {\n        try {\n          // Convert HTML to Markdown for proper processing\n          content = htmlToMd(indexResult.content);\n          fileUsed = \"landing page (index.html, converted to Markdown)\";\n        } catch (error) {\n          console.warn(\n            `Error converting HTML to Markdown for ${baseURL}: ${error}`,\n          );\n        }\n      }\n\n      // If index page was blocked or not available, try readme.md\n      if (!content && !blockedByRobots) {\n        const readmeResult = await fetchFileWithRobotsTxtCheck(\n          baseURL + \"README.md\",\n          env,\n        );\n\n        if (readmeResult.blockedByRobots) {\n          blockedByRobots = true;\n          console.log(`Access to ${baseURL}README.md disallowed by robots.txt`);\n        } else if (readmeResult.content) {\n          content = readmeResult.content;\n          fileUsed = \"README.md\";\n        }\n      }\n    }\n\n    // If any path was blocked by robots.txt, return appropriate message\n    if (blockedByRobots) {\n      content =\n        \"Access to this GitHub Pages site is restricted by robots.txt. GitMCP respects robots.txt directives.\";\n      fileUsed = \"robots.txt restriction\";\n    }\n  } else if (urlType === \"github\" && owner && repo) {\n    // Try static paths + search for llms.txt directly\n    docsBranch = await getRepoBranch(owner, repo, env); // Get branch once\n\n    console.log(`Checking static paths for llms.txt in ${owner}/${repo}`);\n    const possibleLocations = [\n      \"docs/docs/llms.txt\", // Current default\n      \"llms.txt\", // Root directory\n      \"docs/llms.txt\", // Common docs folder\n    ];\n\n    // Create array of all location+branch combinations to try\n    const fetchPromises = possibleLocations.flatMap((location) => [\n      {\n        promise: fetchFileFromGitHub(\n          owner,\n          repo,\n          docsBranch,\n          location,\n          env,\n          false,\n        ),\n        location,\n        branch: docsBranch,\n      },\n    ]);\n\n    // Execute all fetch promises in parallel\n    const results = await Promise.all(\n      fetchPromises.map(async ({ promise, location, branch }) => {\n        const content = await promise;\n        return { content, location, branch };\n      }),\n    );\n\n    for (const location of possibleLocations) {\n      const mainResult = results.find(\n        (r) => r.location === location && r.content !== null,\n      );\n      if (mainResult) {\n        content = mainResult.content;\n        fileUsed = `llms.txt`;\n\n        docsPath = constructGithubUrl(\n          owner,\n          repo,\n          mainResult.branch,\n          mainResult.location,\n        );\n        break;\n      }\n    }\n\n    // Fallback to GitHub Search API if static paths don't work for llms.txt\n    if (!content) {\n      console.log(\n        `llms.txt not found in static paths, trying GitHub Search API`,\n      );\n\n      const result = await searchGitHubRepo(\n        owner,\n        repo,\n        \"llms.txt\",\n        docsBranch,\n        env,\n        ctx,\n      );\n      if (result) {\n        content = result.content;\n        docsPath = result.path;\n        fileUsed = \"llms.txt\";\n      }\n    }\n\n    // Try R2 fallback if llms.txt wasn't found via GitHub\n    if (!content) {\n      // Try to fetch pre-generated llms.txt\n      content = (await fetchFileFromR2(owner, repo, \"llms.txt\", env)) ?? null;\n      if (content) {\n        console.log(`Fetched pre-generated llms.txt for ${owner}/${repo}`);\n        fileUsed = \"llms.txt (generated)\";\n      } else {\n        console.error(`No pre-generated llms.txt found for ${owner}/${repo}`);\n      }\n    }\n\n    // Fallback to README if llms.txt not found in any location (GitHub or R2)\n    if (!content) {\n      console.log(\n        `llms.txt not found, trying README.* at root`,\n        owner,\n        repo,\n        docsBranch,\n      );\n      // Ensure docsBranch is available (should be fetched above)\n      if (!docsBranch) {\n        docsBranch = await getRepoBranch(owner, repo, env);\n      }\n\n      // Search for README.* files in the root directory\n      const readmeResult = await searchGitHubRepo(\n        owner,\n        repo,\n        \"README+path:/\", // Search for files like README.* in root\n        docsBranch, // Use the determined branch\n        env,\n        ctx,\n      );\n\n      if (readmeResult) {\n        content = readmeResult.content;\n        // Extract filename from the path for clarity, default to full path if extraction fails\n        const filename =\n          readmeResult.path.split(\"/\").pop() || readmeResult.path;\n        fileUsed = filename; // e.g., \"README.md\", \"README.asciidoc\"\n        docsPath = constructGithubUrl(\n          owner,\n          repo,\n          docsBranch,\n          readmeResult.path,\n        ); // Use the full path found\n        console.log(`Found README file via search: ${fileUsed}`);\n      } else {\n        console.log(`No README file found at root for ${owner}/${repo}`);\n      }\n    }\n\n    if (!content) {\n      console.error(`Failed to find documentation for ${owner}/${repo}`);\n    }\n  }\n\n  if (owner && repo) {\n    ctx.waitUntil(\n      enqueueDocumentationProcessing(\n        owner,\n        repo,\n        content,\n        fileUsed,\n        docsPath,\n        docsBranch,\n        env,\n      ),\n    );\n  }\n\n  if (!content) {\n    content = \"No documentation found.\";\n    return {\n      fileUsed,\n      content: [\n        {\n          type: \"text\" as const,\n          text: content,\n        },\n      ],\n    };\n  }\n\n  const result: FetchDocumentationResult = {\n    fileUsed,\n    content: [\n      {\n        type: \"text\" as const,\n        text: content,\n      },\n    ],\n  };\n\n  if (owner && repo) {\n    ctx.waitUntil(\n      cacheFetchDocResult(owner, repo, result, cacheTTL, env).catch((error) => {\n        console.warn(`Failed to cache fetch documentation result: ${error}`);\n      }),\n    );\n  }\n\n  return result;\n}\n\nasync function enqueueDocumentationProcessing(\n  owner: string,\n  repo: string,\n  content: string | null,\n  fileUsed: string,\n  docsPath: string,\n  docsBranch: string,\n  env: Env,\n) {\n  try {\n    if (env.MY_QUEUE) {\n      console.log(\"Enqueuing documentation processing\", owner, repo);\n      const repoUrl = `https://github.com/${owner}/${repo}`;\n\n      // Prepare and send message to queue\n      const message = {\n        owner,\n        repo,\n        repo_url: repoUrl,\n        file_url: docsPath,\n        content_length: content?.length,\n        file_used: fileUsed,\n        docs_branch: docsBranch,\n      };\n\n      await env.MY_QUEUE.send(JSON.stringify(message));\n      console.log(\n        `Queued documentation processing for ${owner}/${repo}`,\n        message,\n      );\n    } else {\n      console.error(\"Queue 'MY_QUEUE' not available in environment\");\n    }\n  } catch (error) {\n    console.error(\n      `Failed to enqueue documentation request for ${owner}/${repo}`,\n      error,\n    );\n  }\n}\n\nexport async function searchRepositoryDocumentation({\n  repoData,\n  query,\n  env,\n  ctx,\n  fallbackSearch = searchRepositoryDocumentationNaive,\n}: {\n  repoData: RepoData;\n  query: string;\n  env: CloudflareEnvironment;\n  ctx: any;\n  fallbackSearch?: typeof searchRepositoryDocumentationNaive;\n}): Promise<{\n  searchQuery: string;\n  content: { type: \"text\"; text: string }[];\n}> {\n  if (!env.DOCS_BUCKET) {\n    throw new Error(\"DOCS_BUCKET is not available in environment\");\n  }\n  const docsInR2 = !!(await env.DOCS_BUCKET.head(\n    `${repoData.owner}/${repoData.repo}/llms.txt`,\n  ));\n  if (docsInR2) {\n    try {\n      const autoragResult = await searchRepositoryDocumentationAutoRag({\n        repoData,\n        query,\n        env,\n        ctx,\n        autoragPipeline: \"docs-rag\",\n      });\n      if (\n        autoragResult?.content[0]?.text?.startsWith(\"No results found\") ===\n        false\n      ) {\n        console.log(\"Found results in AutoRAG\", autoragResult);\n        return autoragResult;\n      }\n\n      console.log(\"No results in AutoRAG\", autoragResult);\n    } catch (error) {\n      console.error(\"Error in AutoRAG search\", error);\n    }\n  }\n\n  return await fallbackSearch({\n    repoData,\n    query,\n    env,\n    ctx,\n  });\n}\n\nexport async function searchRepositoryDocumentationAutoRag({\n  repoData,\n  query,\n  env,\n  ctx,\n  autoragPipeline = \"docs-rag\",\n}: {\n  repoData: RepoData;\n  query: string;\n  env: CloudflareEnvironment;\n  ctx: any;\n  autoragPipeline: string;\n}): Promise<{\n  searchQuery: string;\n  content: { type: \"text\"; text: string }[];\n}> {\n  if (!repoData.owner || !repoData.repo) {\n    return {\n      searchQuery: query,\n      content: [{ type: \"text\", text: \"No repository data provided\" }],\n    };\n  }\n\n  const repoPrefix = `${repoData.owner}/${repoData.repo}/`;\n  const searchRequest = {\n    query: query,\n    rewrite_query: true,\n    max_num_results: 12,\n    ranking_options: {\n      score_threshold: 0.4,\n    },\n    filters: {\n      type: \"and\",\n      filters: [\n        {\n          type: \"gte\",\n          key: \"folder\",\n          value: `${repoPrefix}`,\n        },\n        {\n          type: \"lte\",\n          key: \"folder\",\n          value: `${repoPrefix}~`,\n        },\n      ],\n    },\n  };\n\n  const answer = await env.AI.autorag(autoragPipeline).search(searchRequest);\n\n  let responseText =\n    `## Query\\n\\n${query}.\\n\\n## Response\\n\\n` ||\n    `No results found for: \"${query}\"`;\n\n  // Add source data if available\n  if (answer.data && answer.data.length > 0) {\n    const filteredData = answer.data.filter((item) => {\n      return item.filename.startsWith(`${repoData.owner}/${repoData.repo}/`);\n    });\n\n    if (filteredData.length > 0) {\n      responseText +=\n        \"### Sources:\\nImportant: you can fetch the full content of any source using the fetch_url_content tool\\n\";\n      const defaultBranch = await getRepoBranch(\n        repoData.owner,\n        repoData.repo,\n        env,\n      );\n\n      for (const item of filteredData) {\n        let rawUrl = constructGithubUrl(\n          repoData.owner,\n          repoData.repo,\n          defaultBranch,\n          item.filename.replace(`${repoData.owner}/${repoData.repo}/`, \"\"),\n        );\n\n        if (item.filename.endsWith(\".ipynb.txt\")) {\n          rawUrl = `https://pub-39b02ce1b5a441b2a4658c1fc71dbb9c.r2.dev/${repoData.owner}/${repoData.repo}/${item.filename}`;\n        }\n\n        responseText += `\\n#### (${item.filename})[${rawUrl}] (Score: ${item.score.toFixed(2)})\\n`;\n\n        if (item.content && item.content.length > 0) {\n          for (const content of item.content) {\n            if (content.text) {\n              responseText += `- ${content.text}\\n`;\n            }\n          }\n        }\n      }\n    } else {\n      responseText = `No results found for: \"${query}\"`;\n    }\n  } else {\n    responseText = `No results found for: \"${query}\"`;\n  }\n\n  return {\n    searchQuery: answer.search_query || query,\n    content: [\n      {\n        type: \"text\",\n        text: responseText,\n      },\n    ],\n  };\n}\n\n/**\n * Search documentation using vector search\n * Will fetch and index documentation if none exists\n */\nexport async function searchRepositoryDocumentationNaive({\n  repoData,\n  query,\n  forceReindex = false,\n  env,\n  ctx,\n}: {\n  repoData: RepoData;\n  query: string;\n  forceReindex?: boolean;\n  env: CloudflareEnvironment;\n  ctx: any;\n}): Promise<{\n  searchQuery: string;\n  content: { type: \"text\"; text: string }[];\n}> {\n  // Initialize owner and repo\n  let owner: string | null =\n    repoData.owner ?? repoData.host.replace(/\\./g, \"_\");\n  let repo: string | null = repoData.repo ?? \"docs\";\n\n  console.log(`Searching ${owner}/${repo}`);\n\n  try {\n    // Fetch the documentation - pass env\n    const docResult = await fetchDocumentation({ repoData, env, ctx });\n    const content = docResult.content[0].text;\n    const fileUsed = docResult.fileUsed;\n\n    console.log(\n      `Fetched documentation from ${fileUsed} (${content.length} characters)`,\n    );\n\n    // Format search results as text for MCP response, or provide a helpful message if none\n    const formattedText =\n      `### Search Results for: \"${query}\"\\n\\n` +\n      `No relevant documentation found for your query. It's either being indexed or the search query did not match any documentation.\\n\\n` +\n      `As a fallback, this is the documentation for ${owner}/${repo}:\\n\\n` +\n      `${content}\\n\\n` +\n      `If you'd like to retry the search, try changing the query to increase the likelihood of a match.`;\n\n    // Return search results in proper MCP format\n    return {\n      searchQuery: query,\n      content: [\n        {\n          type: \"text\" as const,\n          text: formattedText,\n        },\n      ],\n    };\n  } catch (error) {\n    console.error(`Error in searchRepositoryDocumentation: ${error}`);\n    return {\n      searchQuery: query,\n      content: [\n        {\n          type: \"text\" as const,\n          text:\n            `### Search Results for: \"${query}\"\\n\\n` +\n            `An error occurred while searching the documentation. Please try again later.`,\n        },\n      ],\n    };\n  }\n}\n\n/**\n * Search for code in a GitHub repository\n * Uses the GitHub Search API to find code matching a query\n * Supports pagination for retrieving more results\n */\nexport async function searchRepositoryCode({\n  repoData,\n  query,\n  page = 1,\n  env,\n  ctx,\n}: {\n  repoData: RepoData;\n  query: string;\n  page?: number;\n  env: Env;\n  ctx: any;\n}): Promise<{\n  searchQuery: string;\n  content: { type: \"text\"; text: string }[];\n  pagination?: {\n    totalCount: number;\n    currentPage: number;\n    perPage: number;\n    hasMorePages: boolean;\n  };\n}> {\n  try {\n    // Initialize owner and repo from the provided repoData\n    const owner = repoData.owner;\n    const repo = repoData.repo;\n\n    if (!owner || !repo) {\n      return {\n        searchQuery: query,\n        content: [\n          {\n            type: \"text\" as const,\n            text: `### Code Search Results for: \"${query}\"\\n\\nCannot perform code search without repository information.`,\n          },\n        ],\n      };\n    }\n\n    // Use fixed resultsPerPage of 30 and normalize page value\n    const currentPage = Math.max(1, page);\n    const resultsPerPage = 30; // Fixed at 30 results per page\n\n    console.log(\n      `Searching code in ${owner}/${repo}\" (page ${currentPage}, ${resultsPerPage} per page)`,\n    );\n\n    const data = await searchCode(\n      query,\n      owner,\n      repo,\n      env,\n      currentPage,\n      resultsPerPage,\n    );\n\n    if (!data) {\n      return {\n        searchQuery: query,\n        content: [\n          {\n            type: \"text\" as const,\n            text: `### Code Search Results for: \"${query}\"\\n\\nFailed to search code in ${owner}/${repo}. GitHub API request failed.`,\n          },\n        ],\n      };\n    }\n\n    // Check if we found any matches\n    if (data.total_count === 0 || !data.items || data.items.length === 0) {\n      return {\n        searchQuery: query,\n        content: [\n          {\n            type: \"text\" as const,\n            text: `### Code Search Results for: \"${query}\"\\n\\nNo code matches found in ${owner}/${repo}.`,\n          },\n        ],\n      };\n    }\n\n    // Calculate pagination information\n    const totalCount = data.total_count;\n    const hasMorePages = currentPage * resultsPerPage < totalCount;\n    const totalPages = Math.ceil(totalCount / resultsPerPage);\n\n    // Format the search results\n    let formattedResults = `### Code Search Results for: \"${query}\"\\n\\n`;\n    formattedResults += `Found ${totalCount} matches in ${owner}/${repo}.\\n`;\n    formattedResults += `Page ${currentPage} of ${totalPages}.\\n\\n`;\n\n    for (const item of data.items) {\n      formattedResults += `#### ${item.name}\\n`;\n      formattedResults += `- **Path**: ${item.path}\\n`;\n      formattedResults += `- **URL**: ${item.html_url}\\n`;\n      formattedResults += `- **Git URL**: ${item.git_url}\\n`;\n      formattedResults += `- **Score**: ${item.score}\\n\\n`;\n    }\n\n    // Add pagination information to the response\n    if (hasMorePages) {\n      formattedResults += `_Showing ${data.items.length} of ${totalCount} results. Use pagination to see more results._\\n\\n`;\n    }\n\n    return {\n      searchQuery: query,\n      content: [\n        {\n          type: \"text\" as const,\n          text: formattedResults,\n        },\n      ],\n      pagination: {\n        totalCount,\n        currentPage,\n        perPage: resultsPerPage,\n        hasMorePages,\n      },\n    };\n  } catch (error) {\n    console.error(`Error in searchRepositoryCode: ${error}`);\n    return {\n      searchQuery: query,\n      content: [\n        {\n          type: \"text\" as const,\n          text: `### Code Search Results for: \"${query}\"\\n\\nAn error occurred while searching code: ${error}`,\n        },\n      ],\n    };\n  }\n}\n\nexport async function fetchUrlContent({ url, env }: { url: string; env: Env }) {\n  try {\n    // Use the robotsTxt checking function to respect robots.txt rules\n    const result = await fetchFileWithRobotsTxtCheck(url, env);\n\n    if (result.blockedByRobots) {\n      return {\n        url,\n        status: \"blocked\",\n        content: [\n          {\n            type: \"text\" as const,\n            text: `Access to ${url} is disallowed by robots.txt. GitMCP respects robots.txt directives.`,\n          },\n        ],\n      };\n    }\n\n    if (!result.content) {\n      return {\n        url,\n        status: \"not_found\",\n        content: [\n          {\n            type: \"text\" as const,\n            text: `Content at ${url} could not be retrieved. The resource may not exist or may require authentication.`,\n          },\n        ],\n      };\n    }\n\n    let finalContent = result.content;\n\n    // Convert HTML to markdown if content appears to be HTML\n    if (\n      finalContent.trim().startsWith(\"<!DOCTYPE\") ||\n      finalContent.trim().startsWith(\"<html\") ||\n      finalContent.includes(\"<body\")\n    ) {\n      try {\n        finalContent = htmlToMd(finalContent);\n      } catch (error) {\n        console.warn(`Error converting HTML to Markdown for ${url}: ${error}`);\n        // Continue with the original content if conversion fails\n      }\n    }\n\n    return {\n      url,\n      status: \"success\",\n      content: [\n        {\n          type: \"text\" as const,\n          text: finalContent,\n        },\n      ],\n    };\n  } catch (error) {\n    console.error(`Error fetching ${url}: ${error}`);\n    return {\n      url,\n      status: \"error\",\n      content: [\n        {\n          type: \"text\" as const,\n          text: `Error fetching content from ${url}: ${error}`,\n        },\n      ],\n    };\n  }\n}\n\nexport const LIMIT = 51;\n\n/**\n * Enforces the 50-character limit on the combined server and tool names\n * @param prefix - The prefix for the tool name (fetch_ or search_)\n * @param repo - The repository name\n * @param suffix - The suffix for the tool name (_documentation)\n * @returns A tool name that ensures combined length with server name stays under 50 characters\n */\nexport function enforceToolNameLengthLimit(\n  prefix: string,\n  repo: string | null | undefined,\n  suffix: string,\n): string {\n  if (!repo) {\n    console.error(\n      \"Repository name is null/undefined in enforceToolNameLengthLimit\",\n    );\n    return `${prefix}${suffix}`;\n  }\n\n  // Generate the server name to check combined length\n  const serverNameLen = generateServerName(repo).length;\n\n  // Replace non-alphanumeric characters with underscores\n  let repoName = repo.replace(/[^a-zA-Z0-9]/g, \"_\");\n  let toolName = `${prefix}${repoName}${suffix}`;\n\n  // Calculate combined length\n  const combinedLength = toolName.length + serverNameLen;\n\n  // If combined length is already under limit, return it\n  if (combinedLength <= LIMIT) {\n    return toolName;\n  }\n\n  const shorterSuffix = suffix === \"_documentation\" ? \"_docs\" : suffix;\n\n  toolName = `${prefix}${repoName}${shorterSuffix}`;\n  if (toolName.length + serverNameLen <= LIMIT) {\n    return toolName;\n  }\n\n  // Step 2: Shorten the repo name by removing words\n  const words = repoName.split(\"_\");\n  if (words.length > 1) {\n    // Keep removing words from the end until we're under the limit or have only one word left\n    let shortenedRepo = repoName;\n    for (let i = words.length - 1; i > 0; i--) {\n      shortenedRepo = words.slice(0, i).join(\"_\");\n      toolName = `${prefix}${shortenedRepo}${shorterSuffix}`;\n      if (toolName.length + serverNameLen <= LIMIT) {\n        return toolName;\n      }\n    }\n  }\n\n  const result = `${prefix}repo${shorterSuffix}`;\n  if (result.length + serverNameLen <= LIMIT) {\n    return result;\n  }\n\n  // Step 3: As a last resort, change repo name to \"repo\"\n  return `${prefix}${shorterSuffix}`.replace(/__/g, \"_\");\n}\n\n/**\n * Generate a dynamic search tool name for the search_documentation tool based on the URL\n * @param requestHost - The host from the request\n * @param requestUrl - The full request URL (optional)\n * @returns A descriptive string for the tool name\n */\nexport function generateSearchToolName({ urlType, repo }: RepoData): string {\n  try {\n    // Default tool name as fallback\n    let toolName = \"search_documentation\";\n    if (urlType == \"subdomain\" || urlType == \"github\") {\n      // Use enforceLengthLimit to ensure the tool name doesn't exceed 55 characters\n      return enforceToolNameLengthLimit(\"search_\", repo, \"_documentation\");\n    }\n    // replace non-alphanumeric characters with underscores\n    return toolName.replace(/[^a-zA-Z0-9]/g, \"_\");\n  } catch (error) {\n    console.error(\"Error generating search tool name:\", error);\n    // Return default tool name if there's any error parsing the URL\n    return \"search_documentation\";\n  }\n}\n\n/**\n * Generate a dynamic description for the search_documentation tool based on the URL\n * @param requestHost - The host from the request\n * @param requestUrl - The full request URL (optional)\n * @returns A descriptive string for the tool\n */\nexport function generateSearchToolDescription({\n  urlType,\n  owner,\n  repo,\n}: RepoData): string {\n  try {\n    // Default description as fallback\n    let description =\n      \"Semantically search within the fetched documentation for the current repository.\";\n\n    if (urlType == \"subdomain\") {\n      description = `Semantically search within the fetched documentation from the ${owner}/${repo} GitHub Pages. Useful for specific queries.`;\n    } else if (urlType == \"github\") {\n      description = `Semantically search within the fetched documentation from GitHub repository: ${owner}/${repo}. Useful for specific queries.`;\n    }\n\n    return description;\n  } catch (error) {\n    // Return default description if there's any error parsing the URL\n    return \"Search documentation for the current repository.\";\n  }\n}\n\n/**\n * Generate a dynamic description for the fetch_documentation tool based on the URL\n * @param requestHost - The host from the request\n * @param requestUrl - The full request URL (optional)\n * @returns A descriptive string for the tool\n */\nexport function generateFetchToolDescription({\n  urlType,\n  owner,\n  repo,\n}: Omit<RepoData, \"host\">): string {\n  try {\n    // Default description as fallback\n    let description = \"Fetch entire documentation for the current repository.\";\n\n    if (urlType == \"subdomain\") {\n      description = `Fetch entire documentation file from the ${owner}/${repo} GitHub Pages. Useful for general questions. Always call this tool first if asked about ${owner}/${repo}.`;\n    } else if (urlType == \"github\") {\n      description = `Fetch entire documentation file from GitHub repository: ${owner}/${repo}. Useful for general questions. Always call this tool first if asked about ${owner}/${repo}.`;\n    }\n\n    return description;\n  } catch (error) {\n    // Return default description if there's any error parsing the URL\n    return \"Fetch documentation for the current repository.\";\n  }\n}\n\n/**\n * Generate a dynamic tool name for the fetch_documentation tool based on the URL\n * @param requestHost - The host from the request\n * @param requestUrl - The full request URL (optional)\n * @returns A descriptive string for the tool\n */\nexport function generateFetchToolName({\n  urlType,\n  owner,\n  repo,\n}: Omit<RepoData, \"host\">): string {\n  try {\n    // Default tool name as fallback\n    let toolName = \"fetch_documentation\";\n\n    if (urlType == \"subdomain\" || urlType == \"github\") {\n      // Use enforceLengthLimit to ensure the tool name doesn't exceed 55 characters\n      return enforceToolNameLengthLimit(\"fetch_\", repo, \"_documentation\");\n    }\n\n    // replace non-alphanumeric characters with underscores\n    return toolName.replace(/[^a-zA-Z0-9]/g, \"_\");\n  } catch (error) {\n    console.error(\"Error generating tool name:\", error);\n    // Return default tool name if there's any error parsing the URL\n    return \"fetch_documentation\";\n  }\n}\n\n/**\n * Generate a dynamic tool name for the code search tool based on the URL\n * @param repoData - The repository data object\n * @returns A descriptive string for the tool\n */\nexport function generateCodeSearchToolName({\n  urlType,\n  repo,\n}: RepoData): string {\n  try {\n    // Default tool name as fallback\n    let toolName = \"search_code\";\n    if (urlType == \"subdomain\" || urlType == \"github\") {\n      // Use enforceLengthLimit to ensure the tool name doesn't exceed 55 characters\n      return enforceToolNameLengthLimit(\"search_\", repo, \"_code\");\n    }\n    // replace non-alphanumeric characters with underscores\n    return toolName.replace(/[^a-zA-Z0-9]/g, \"_\");\n  } catch (error) {\n    console.error(\"Error generating code search tool name:\", error);\n    // Return default tool name if there's any error parsing the URL\n    return \"search_code\";\n  }\n}\n\n/**\n * Generate a dynamic description for the code search tool based on the URL\n * @param repoData - The repository data object\n * @returns A descriptive string for the tool\n */\nexport function generateCodeSearchToolDescription({\n  owner,\n  repo,\n}: RepoData): string {\n  return `Search for code within the GitHub repository: \"${owner}/${repo}\" using the GitHub Search API (exact match). Returns matching files for you to query further if relevant.`;\n}\n\n/**\n * Recursively list every subfolder prefix under `startPrefix`.\n * @param {R2Bucket} bucket – the Workers-bound R2 bucket\n * @param {string} startPrefix – e.g. \"path/to/folder/\"\n * @returns {Promise<string[]>}\n */\nasync function listAllSubfolders(bucket: R2Bucket, startPrefix: string) {\n  const all: string[] = [];\n\n  // Define an inner async recursion\n  async function recurse(prefix: string) {\n    let cursor;\n    do {\n      // 1. List one page of prefixes under `prefix`\n      const listResult = await bucket.list({ prefix, delimiter: \"/\", cursor });\n      const { delimitedPrefixes = [], truncated } = listResult;\n\n      // 2. For each child prefix, record it and recurse into it\n      // Ensure the child prefix ends with '/' before adding/recursing\n      for (const childPrefix of delimitedPrefixes) {\n        const ensuredChildPrefix = childPrefix.endsWith(\"/\")\n          ? childPrefix\n          : childPrefix + \"/\";\n        all.push(ensuredChildPrefix);\n        await recurse(ensuredChildPrefix);\n      }\n      cursor = truncated ? listResult.cursor : undefined;\n    } while (cursor);\n  }\n\n  // Kick off recursion\n  await recurse(startPrefix);\n  return Array.from(new Set(all)); // dedupe just in case\n}\n"
  },
  {
    "path": "src/api/tools/index.test.ts",
    "content": "import { describe, it, expect, vi, beforeEach, afterEach } from \"vitest\";\nimport * as toolsModule from \"./index\";\nimport { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport { MockMcp } from \"./repoHandlers/test/utils.js\";\n// Mock the fetch function\nglobal.fetch = vi.fn();\n\n// Access the non-exported fetchFile function through dynamic require\nconst { default: fetchFile } = vi.hoisted(() => {\n  return {\n    default: vi.fn().mockImplementation(async (url: string) => {\n      try {\n        const response = await fetch(url);\n        return response.ok ? await response.text() : null;\n      } catch {\n        return null;\n      }\n    }),\n  };\n});\n\n// @ts-ignore\nconst mockEnv: Env = {};\n\ndescribe(\"Tools Module\", () => {\n  // Reset mocks before each test\n  beforeEach(() => {\n    vi.resetAllMocks();\n  });\n\n  // Clean up after tests\n  afterEach(() => {\n    vi.restoreAllMocks();\n  });\n\n  describe(\"Tool registration\", () => {\n    const tests: {\n      host: string;\n      url: string;\n      expectedTools: Record<string, { description: string }>;\n    }[] = [\n      // default handler\n      {\n        host: \"gitmcp.io\",\n        url: \"https://gitmcp.io/myorg/myrepo\",\n        expectedTools: {\n          fetch_myrepo_documentation: {\n            description:\n              \"Fetch entire documentation file from GitHub repository: myorg/myrepo. Useful for general questions. Always call this tool first if asked about myorg/myrepo.\",\n          },\n          search_myrepo_documentation: {\n            description:\n              \"Semantically search within the fetched documentation from GitHub repository: myorg/myrepo. Useful for specific queries.\",\n          },\n          fetch_generic_url_content: {\n            description:\n              \"Generic tool to fetch content from any absolute URL, respecting robots.txt rules. Use this to retrieve referenced urls (absolute urls) that were mentioned in previously fetched documentation.\",\n          },\n          search_myrepo_code: {\n            description:\n              'Search for code within the GitHub repository: \"myorg/myrepo\" using the GitHub Search API (exact match). Returns matching files for you to query further if relevant.',\n          },\n        },\n      },\n      // default handler - subdomain\n      {\n        host: \"myorg.gitmcp.io\",\n        url: \"https://myorg.gitmcp.io/myrepo\",\n        expectedTools: {\n          fetch_myrepo_documentation: {\n            description:\n              \"Fetch entire documentation file from the myorg/myrepo GitHub Pages. Useful for general questions. Always call this tool first if asked about myorg/myrepo.\",\n          },\n          search_myrepo_documentation: {\n            description:\n              \"Semantically search within the fetched documentation from the myorg/myrepo GitHub Pages. Useful for specific queries.\",\n          },\n          fetch_generic_url_content: {\n            description:\n              \"Generic tool to fetch content from any absolute URL, respecting robots.txt rules. Use this to retrieve referenced urls (absolute urls) that were mentioned in previously fetched documentation.\",\n          },\n          search_myrepo_code: {\n            description:\n              'Search for code within the GitHub repository: \"myorg/myrepo\" using the GitHub Search API (exact match). Returns matching files for you to query further if relevant.',\n          },\n        },\n      },\n      // generic handler\n      {\n        host: \"docs.gitmcp.io\",\n        url: \"https://docs.gitmcp.io\",\n        expectedTools: {\n          fetch_generic_documentation: {\n            description:\n              \"Fetch documentation for any GitHub repository by providing owner and project name\",\n          },\n          search_generic_code: {\n            description:\n              \"Search for code in any GitHub repository by providing owner, project name, and search query. Returns matching files. Supports pagination with 30 results per page.\",\n          },\n          fetch_generic_url_content: {\n            description:\n              \"Generic tool to fetch content from any absolute URL, respecting robots.txt rules. Use this to retrieve referenced urls (absolute urls) that were mentioned in previously fetched documentation.\",\n          },\n          match_common_libs_owner_repo_mapping: {\n            description:\n              \"Match a library name to an owner/repo. Don't use it if you have an owner and repo already. Use this first if only a library name was provided. If found - you can use owner and repo to call other tools. If not found - try to use the library name directly in other tools.\",\n          },\n          search_generic_documentation: {\n            description:\n              \"Semantically search in documentation for any GitHub repository by providing owner, project name, and search query. Useful for specific queries.\",\n          },\n        },\n      },\n      // three.js handler\n      {\n        host: \"gitmcp.io\",\n        url: \"https://gitmcp.io/mrdoob/three.js\",\n        expectedTools: {\n          fetch_threejs_urls_inside_docs: {\n            description:\n              \"Fetch content from URLs that are inside the reference docs. Usually contains '#' in the url. Returns the content of the pages as markdown.\",\n          },\n          fetch_generic_url_content: {\n            description:\n              \"Generic tool to fetch content from any absolute URL, respecting robots.txt rules. Use this to retrieve referenced urls (absolute urls) that were mentioned in previously fetched documentation.\",\n          },\n          get_threejs_reference_docs_list: {\n            description:\n              \"Get the reference docs list. This should be the first step. It will return a list of all the reference docs and manuals and their corresponding urls.\",\n          },\n          search_threejs_documentation: {\n            description:\n              \"Semantically search the repository documentation for the given query. Use this if you need to find information you don't have in the reference docs.\",\n          },\n          get_threejs_specific_docs_content: {\n            description:\n              \"Get the content of specific docs or manuals. This should be the second step. It will return the content of the specific docs or manuals. You can pass in a list of document or manual names.\",\n          },\n        },\n      },\n    ];\n\n    tests.forEach((test) => {\n      it(`should register tool names correctly for ${test.url}`, () => {\n        const mockMcp = new MockMcp();\n\n        toolsModule\n          .getMcpTools(mockEnv, test.host, test.url)\n          .forEach((tool) => {\n            mockMcp.tool(\n              tool.name,\n              tool.description,\n              tool.paramsSchema,\n              tool.cb,\n            );\n          });\n\n        expect(mockMcp.getTools()).toEqual(test.expectedTools);\n      });\n    });\n  });\n});\n"
  },
  {
    "path": "src/api/tools/index.ts",
    "content": "import { z } from \"zod\";\nimport { getRepoData } from \"../../shared/repoData.js\";\nimport { fetchUrlContent } from \"./commonTools.js\";\nimport { getHandlerByRepoData } from \"./repoHandlers/handlers.js\";\nimport type { Tool } from \"./repoHandlers/RepoHandler.js\";\nimport type { ToolAnnotations } from \"@modelcontextprotocol/sdk/types.js\";\n\nexport function getMcpTools(\n  env: Env,\n  requestHost: string,\n  requestUrl?: string,\n  ctx?: any,\n): Array<Tool> {\n  const repoData = getRepoData({ requestHost, requestUrl });\n  const handler = getHandlerByRepoData(repoData);\n  const handlerTools = handler.getTools(repoData, env, ctx);\n  return [\n    ...handlerTools,\n    {\n      name: \"fetch_generic_url_content\",\n      description:\n        \"Generic tool to fetch content from any absolute URL, respecting robots.txt rules. Use this to retrieve referenced urls (absolute urls) that were mentioned in previously fetched documentation.\",\n      paramsSchema: {\n        url: z.string().describe(\"The URL of the document or page to fetch\"),\n      },\n      cb: async ({ url }) => {\n        return fetchUrlContent({ url, env });\n      },\n      annotations: {\n        title: \"Fetch URL Content\",\n        readOnlyHint: true,\n      },\n    },\n  ];\n}\n"
  },
  {
    "path": "src/api/tools/repoHandlers/DefaultRepoHandler.ts",
    "content": "import {\n  fetchDocumentation,\n  searchRepositoryDocumentation,\n  searchRepositoryCode,\n  fetchUrlContent,\n  generateFetchToolName,\n  generateFetchToolDescription,\n  generateSearchToolName,\n  generateSearchToolDescription,\n  generateCodeSearchToolName,\n  generateCodeSearchToolDescription,\n} from \"../commonTools.js\";\nimport { z } from \"zod\";\nimport type { RepoData } from \"../../../shared/repoData.js\";\nimport type { RepoHandler, Tool } from \"./RepoHandler.js\";\nimport type { ToolAnnotations } from \"@modelcontextprotocol/sdk/types.js\";\n\nclass DefaultRepoHandler implements RepoHandler {\n  name = \"default\";\n  getTools(repoData: RepoData, env: any, ctx: any): Array<Tool> {\n    // Generate a dynamic description based on the URL\n    const fetchToolName = generateFetchToolName(repoData);\n    const fetchToolDescription = generateFetchToolDescription(repoData);\n    const searchToolName = generateSearchToolName(repoData);\n    const searchToolDescription = generateSearchToolDescription(repoData);\n    const codeSearchToolName = generateCodeSearchToolName(repoData);\n    const codeSearchToolDescription =\n      generateCodeSearchToolDescription(repoData);\n\n    return [\n      {\n        name: fetchToolName,\n        description: fetchToolDescription,\n        paramsSchema: z.union([z.object({}), z.null()]),\n        cb: async () => {\n          return fetchDocumentation({ repoData, env, ctx });\n        },\n        annotations: {\n          title: \"Fetch Documentation\",\n          readOnlyHint: true,\n        },\n      },\n      {\n        name: searchToolName,\n        description: searchToolDescription,\n        paramsSchema: {\n          query: z\n            .string()\n            .describe(\"The search query to find relevant documentation\"),\n        },\n        cb: async ({ query }) => {\n          return searchRepositoryDocumentation({\n            repoData,\n            query,\n            env,\n            ctx,\n          });\n        },\n        annotations: {\n          title: \"Search Documentation\",\n          readOnlyHint: true,\n        },\n      },\n      {\n        name: codeSearchToolName,\n        description: codeSearchToolDescription,\n        paramsSchema: {\n          query: z\n            .string()\n            .describe(\"The search query to find relevant code files\"),\n          page: z\n            .number()\n            .optional()\n            .describe(\n              \"Page number to retrieve (starting from 1). Each page contains 30 results.\",\n            ),\n        },\n        cb: async ({ query, page }) => {\n          return searchRepositoryCode({\n            repoData,\n            query,\n            page,\n            env,\n            ctx,\n          });\n        },\n        annotations: {\n          title: \"Search Code\",\n          readOnlyHint: true,\n        },\n      },\n    ];\n  }\n\n  async fetchDocumentation({\n    repoData,\n    env,\n    ctx,\n  }: {\n    repoData: RepoData;\n    env: Env;\n    ctx: any;\n  }): Promise<{\n    fileUsed: string;\n    content: { type: \"text\"; text: string }[];\n  }> {\n    return await fetchDocumentation({ repoData, env, ctx });\n  }\n\n  async searchRepositoryDocumentation({\n    repoData,\n    query,\n    env,\n    ctx,\n  }: {\n    repoData: RepoData;\n    query: string;\n    env: Env;\n    ctx: any;\n  }): Promise<{\n    searchQuery: string;\n    content: { type: \"text\"; text: string }[];\n  }> {\n    return await searchRepositoryDocumentation({\n      repoData,\n      query,\n      env,\n      ctx,\n    });\n  }\n}\n\nlet defaultRepoHandler: DefaultRepoHandler;\nexport function getDefaultRepoHandler(): DefaultRepoHandler {\n  if (!defaultRepoHandler) {\n    defaultRepoHandler = new DefaultRepoHandler();\n  }\n  return defaultRepoHandler;\n}\n"
  },
  {
    "path": "src/api/tools/repoHandlers/GenericRepoHandler.ts",
    "content": "import type { RepoData } from \"../../../shared/repoData.js\";\nimport type { RepoHandler, Tool } from \"./RepoHandler.js\";\nimport { z } from \"zod\";\nimport {\n  fetchDocumentation,\n  searchRepositoryDocumentation,\n  searchRepositoryCode,\n} from \"../commonTools.js\";\nimport { incrementRepoViewCount } from \"../../utils/badge.js\";\nimport rawMapping from \"./generic/static-mapping.json\";\nimport type { ToolAnnotations } from \"@modelcontextprotocol/sdk/types.js\";\n\nconst badgeCountAllowedRepos = [\"mcp-ui\", \"git-mcp\"];\n\nclass GenericRepoHandler implements RepoHandler {\n  name = \"generic\";\n  getTools(_: RepoData, env: any, ctx: any): Array<Tool> {\n    console.debug(\"Creating tools for docs page\");\n\n    return [\n      {\n        name: \"match_common_libs_owner_repo_mapping\",\n        description:\n          \"Match a library name to an owner/repo. Don't use it if you have an owner and repo already. Use this first if only a library name was provided. If found - you can use owner and repo to call other tools. If not found - try to use the library name directly in other tools.\",\n        paramsSchema: {\n          library: z\n            .string()\n            .describe(\n              \"The name of the library to try and match to an owner/repo.\",\n            ),\n        },\n        cb: async ({ library }: { library: string }) => {\n          if (!library) {\n            return {\n              content: [\n                {\n                  type: \"text\",\n                  text: \"No library name provided\",\n                },\n              ],\n            };\n          }\n          const nameMapping = mappingCaseInsensitive;\n          const repoMapping = mappingByRepoCaseInsensitive;\n\n          const repo =\n            nameMapping[library?.toLowerCase()] ??\n            repoMapping[library?.toLowerCase()];\n          if (!repo) {\n            return {\n              content: [\n                {\n                  type: \"text\",\n                  text: `No owner/repo found for ${library}`,\n                },\n              ],\n            };\n          }\n\n          if (badgeCountAllowedRepos.includes(repo.repo)) {\n            ctx.waitUntil(\n              incrementRepoViewCount(\n                env as CloudflareEnvironment,\n                repo.owner,\n                repo.repo,\n              ).catch((err) => {\n                console.error(\"Error incrementing repo view count:\", err);\n              }),\n            );\n          }\n\n          return {\n            content: [\n              {\n                type: \"text\",\n                text: JSON.stringify({\n                  library,\n                  libraryTitle: repo.title,\n                  owner: repo.owner,\n                  repo: repo.repo,\n                }),\n              },\n            ],\n          };\n        },\n        annotations: {\n          title: \"Match Library to Repository\",\n          readOnlyHint: true,\n        },\n      },\n      {\n        name: \"fetch_generic_documentation\",\n        description:\n          \"Fetch documentation for any GitHub repository by providing owner and project name\",\n        paramsSchema: {\n          owner: z\n            .string()\n            .describe(\"The GitHub repository owner (username or organization)\"),\n          repo: z.string().describe(\"The GitHub repository name\"),\n        },\n        cb: async ({ owner, repo }) => {\n          const repoData: RepoData = {\n            owner,\n            repo,\n            urlType: \"github\",\n            host: \"gitmcp.io\",\n          };\n          return fetchDocumentation({ repoData, env, ctx });\n        },\n        annotations: {\n          title: \"Fetch Generic Documentation\",\n          readOnlyHint: true,\n        },\n      },\n      {\n        name: \"search_generic_documentation\",\n        description:\n          \"Semantically search in documentation for any GitHub repository by providing owner, project name, and search query. Useful for specific queries.\",\n        paramsSchema: {\n          owner: z\n            .string()\n            .describe(\"The GitHub repository owner (username or organization)\"),\n          repo: z.string().describe(\"The GitHub repository name\"),\n          query: z\n            .string()\n            .describe(\"The search query to find relevant documentation\"),\n        },\n        cb: async ({ owner, repo, query }) => {\n          const repoData: RepoData = {\n            owner,\n            repo,\n            urlType: \"github\",\n            host: \"gitmcp.io\",\n          };\n          return searchRepositoryDocumentation({ repoData, query, env, ctx });\n        },\n        annotations: {\n          title: \"Search Generic Documentation\",\n          readOnlyHint: true,\n        },\n      },\n      {\n        name: \"search_generic_code\",\n        description:\n          \"Search for code in any GitHub repository by providing owner, project name, and search query. Returns matching files. Supports pagination with 30 results per page.\",\n        paramsSchema: {\n          owner: z\n            .string()\n            .describe(\"The GitHub repository owner (username or organization)\"),\n          repo: z.string().describe(\"The GitHub repository name\"),\n          query: z\n            .string()\n            .describe(\"The search query to find relevant code files\"),\n          page: z\n            .number()\n            .optional()\n            .describe(\n              \"Page number to retrieve (starting from 1). Each page contains 30 results.\",\n            ),\n        },\n        cb: async ({ owner, repo, query, page }) => {\n          const repoData: RepoData = {\n            owner,\n            repo,\n            urlType: \"github\",\n            host: \"gitmcp.io\",\n          };\n          return searchRepositoryCode({ repoData, query, page, env, ctx });\n        },\n        annotations: {\n          title: \"Search Generic Code\",\n          readOnlyHint: true,\n        },\n      },\n    ];\n  }\n\n  async fetchDocumentation({\n    repoData,\n    env,\n    ctx,\n  }: {\n    repoData: RepoData;\n    env: CloudflareEnvironment;\n    ctx: any;\n  }): Promise<{\n    fileUsed: string;\n    content: { type: \"text\"; text: string }[];\n  }> {\n    return await fetchDocumentation({ repoData, env, ctx });\n  }\n\n  async searchRepositoryDocumentation({\n    repoData,\n    query,\n    env,\n    ctx,\n  }: {\n    repoData: RepoData;\n    query: string;\n    env: CloudflareEnvironment;\n    ctx: any;\n  }): Promise<{\n    searchQuery: string;\n    content: { type: \"text\"; text: string }[];\n  }> {\n    return await searchRepositoryDocumentation({ repoData, query, env, ctx });\n  }\n}\n\nlet genericRepoHandler: GenericRepoHandler;\nexport function getGenericRepoHandler(): GenericRepoHandler {\n  if (!genericRepoHandler) {\n    genericRepoHandler = new GenericRepoHandler();\n  }\n  return genericRepoHandler;\n}\n\nasync function fetchRepoMapping(): Promise<\n  Record<string, (typeof mapping)[string]>\n> {\n  return mappingCaseInsensitive;\n}\n\nasync function fetchRepoMappingByRepoName(): Promise<\n  Record<string, (typeof mapping)[string]>\n> {\n  return mappingByRepoCaseInsensitive;\n}\n\nconst mapping = rawMapping as unknown as {\n  [key: string]: {\n    title: string;\n    repoName: `${string}/${string}`;\n    githubUrl: string;\n    description: string;\n    owner: string;\n    repo: string;\n  };\n};\nconst mappingCaseInsensitive = Object.fromEntries(\n  Object.entries(mapping).map(([key, value]) => [key.toLowerCase(), value]),\n) as Record<string, (typeof mapping)[string]>;\n\nconst mappingByRepoCaseInsensitive = Object.fromEntries(\n  Object.entries(mapping).map(([, value]) => [value.repo.toLowerCase(), value]),\n) as Record<string, (typeof mapping)[string]>;\n"
  },
  {
    "path": "src/api/tools/repoHandlers/ReactRouterRepoHandler.ts",
    "content": "import {\n  fetchDocumentation,\n  generateSearchToolDescription,\n  generateSearchToolName,\n  searchRepositoryDocumentation,\n} from \"../commonTools.js\";\nimport type { RepoData } from \"../../../shared/repoData.js\";\nimport type { RepoHandler, Tool } from \"./RepoHandler.js\";\nimport { getDefaultRepoHandler } from \"./DefaultRepoHandler.js\";\nimport { z } from \"zod\";\nimport type { ToolAnnotations } from \"@modelcontextprotocol/sdk/types.js\";\n\nclass ReactRouterRepoHandler implements RepoHandler {\n  name = \"react-router\";\n  getTools(repoData: RepoData, env: any, ctx: any): Array<Tool> {\n    // Get all default tools, including the search tool which uses Cloudflare Vectorize\n    const defaultTools = getDefaultRepoHandler().getTools(repoData, env, ctx);\n    const searchToolName = generateSearchToolName(repoData);\n    const searchToolDescription = generateSearchToolDescription(repoData);\n\n    // Create our custom search tool\n    const searchTool = {\n      name: searchToolName,\n      description: searchToolDescription,\n      paramsSchema: {\n        query: z\n          .string()\n          .describe(\"The search query to find relevant documentation\"),\n      },\n      cb: async ({ query }: { query: string }) => {\n        return searchRepositoryDocumentation({\n          repoData,\n          query,\n          env,\n          ctx,\n        });\n      },\n      annotations: {\n        title: \"Search Documentation\",\n        readOnlyHint: true,\n      },\n    };\n\n    // Filter out the default search tool and add our specific implementation\n    const filteredTools = defaultTools.filter(\n      (tool) => tool.name !== searchToolName,\n    );\n    return [...filteredTools, searchTool];\n  }\n\n  async fetchDocumentation({\n    repoData,\n    env,\n    ctx,\n  }: {\n    repoData: RepoData;\n    env: Env;\n    ctx: any;\n  }): Promise<{\n    fileUsed: string;\n    content: { type: \"text\"; text: string }[];\n  }> {\n    return await fetchDocumentation({ repoData, env, ctx });\n  }\n\n  async searchRepositoryDocumentation({\n    repoData,\n    query,\n    env,\n    ctx,\n  }: {\n    repoData: RepoData;\n    query: string;\n    env: Env;\n    ctx: any;\n  }): Promise<{\n    searchQuery: string;\n    content: { type: \"text\"; text: string }[];\n  }> {\n    return await searchRepositoryDocumentation({\n      repoData,\n      query,\n      env,\n      ctx,\n    });\n  }\n}\n\nlet reactRouterRepoHandler: ReactRouterRepoHandler;\nexport function getReactRouterRepoHandler(): ReactRouterRepoHandler {\n  if (!reactRouterRepoHandler) {\n    reactRouterRepoHandler = new ReactRouterRepoHandler();\n  }\n  return reactRouterRepoHandler;\n}\n"
  },
  {
    "path": "src/api/tools/repoHandlers/RepoHandler.ts",
    "content": "import type { RepoData } from \"../../../shared/repoData.js\";\nimport type { ToolAnnotations } from \"@modelcontextprotocol/sdk/types.js\";\n\nexport interface Tool {\n  name: string;\n  description: string;\n  paramsSchema: any;\n  cb: (args: any) => Promise<any>;\n  annotations?: ToolAnnotations;\n}\n\nexport interface RepoHandler {\n  name: string;\n  getTools(repoData: RepoData, env: any, ctx: any): Array<Tool>;\n\n  // For the generic MCP to call\n  fetchDocumentation({\n    repoData,\n    env,\n    ctx,\n  }: {\n    repoData: RepoData;\n    env: Env;\n    ctx: any;\n  }): Promise<{\n    fileUsed: string;\n    content: { type: \"text\"; text: string }[];\n  }>;\n\n  // For the generic MCP to call\n  searchRepositoryDocumentation({\n    repoData,\n    query,\n    env,\n    ctx,\n  }: {\n    repoData: RepoData;\n    query: string;\n    env: Env;\n    ctx: any;\n  }): Promise<{\n    searchQuery: string;\n    content: { type: \"text\"; text: string }[];\n  }>;\n}\n"
  },
  {
    "path": "src/api/tools/repoHandlers/ThreejsRepoHandler.ts",
    "content": "import type { RepoHandler, Tool } from \"./RepoHandler.js\";\nimport type { RepoData } from \"../../../shared/repoData.js\";\nimport { z } from \"zod\";\nimport {\n  getReferenceDocsContent,\n  getReferenceDocsListAsMarkdown,\n  fetchThreeJsUrlsAsMarkdown,\n} from \"./threejs/utils.js\";\nimport { searchRepositoryDocumentation } from \"../commonTools.js\";\nimport type { ToolAnnotations } from \"@modelcontextprotocol/sdk/types.js\";\n\nconst GET_REFERENCE_DOCS_LIST_TOOL_NAME = \"get_threejs_reference_docs_list\";\nconst GET_SPECIFIC_DOCS_CONTENT_TOOL_NAME = \"get_threejs_specific_docs_content\";\n\nclass ThreejsRepoHandler implements RepoHandler {\n  name = \"threejs\";\n  getTools(repoData: RepoData, env: any, ctx: any): Array<Tool> {\n    const { owner, repo } = repoData;\n\n    return [\n      {\n        name: GET_REFERENCE_DOCS_LIST_TOOL_NAME,\n        description:\n          \"Get the reference docs list. This should be the first step. It will return a list of all the reference docs and manuals and their corresponding urls.\",\n        paramsSchema: {},\n        cb: async () => {\n          return await getReferenceDocsListAsMarkdown({ env });\n        },\n        annotations: {\n          title: \"Get Three.js Reference Docs List\",\n          readOnlyHint: true,\n        },\n      },\n      {\n        name: GET_SPECIFIC_DOCS_CONTENT_TOOL_NAME,\n        description:\n          \"Get the content of specific docs or manuals. This should be the second step. It will return the content of the specific docs or manuals. You can pass in a list of document or manual names.\",\n        paramsSchema: {\n          documents: z\n            .array(\n              z.object({\n                documentName: z\n                  .string()\n                  .describe(\"The document or manual name\"),\n              }),\n            )\n            .describe(\"The documents or manuals names to get the content of\"),\n        },\n        cb: async (args) => {\n          return await getReferenceDocsContent({\n            env,\n            documents: args.documents,\n          });\n        },\n        annotations: {\n          title: \"Get Three.js Specific Docs Content\",\n          readOnlyHint: true,\n        },\n      },\n      {\n        name: \"search_threejs_documentation\",\n        description:\n          \"Semantically search the repository documentation for the given query. Use this if you need to find information you don't have in the reference docs.\",\n        paramsSchema: {\n          query: z\n            .string()\n            .describe(\"The query to search the repository documentation for\"),\n        },\n        cb: async ({ query }) => {\n          return await searchRepositoryDocumentation({\n            repoData,\n            query,\n            env,\n            ctx,\n            fallbackSearch: noopFallbackSearch,\n          });\n        },\n        annotations: {\n          title: \"Search Three.js Documentation\",\n          readOnlyHint: true,\n        },\n      },\n      {\n        name: \"fetch_threejs_urls_inside_docs\",\n        description:\n          \"Fetch content from URLs that are inside the reference docs. Usually contains '#' in the url. Returns the content of the pages as markdown.\",\n        paramsSchema: {\n          urls: z\n            .array(\n              z.object({\n                url: z.string().describe(\"The URL of the page to fetch\"),\n                documentName: z\n                  .string()\n                  .describe(\"The document or manual name, if known\")\n                  .optional(),\n              }),\n            )\n            .describe(\"The URLs of the pages to fetch\"),\n        },\n        cb: async ({ urls }) => {\n          return await fetchThreeJsUrlsAsMarkdown(urls);\n        },\n        annotations: {\n          title: \"Fetch Three.js URLs Inside Docs\",\n          readOnlyHint: true,\n        },\n      },\n    ];\n  }\n\n  async fetchDocumentation({\n    repoData,\n    env,\n  }: {\n    repoData: RepoData;\n    env: Env;\n    ctx: any;\n  }): Promise<{\n    fileUsed: string;\n    content: { type: \"text\"; text: string }[];\n  }> {\n    const result = await getReferenceDocsListAsMarkdown({ env });\n    return {\n      fileUsed: result.filesUsed[0],\n      content: result.content,\n    };\n  }\n\n  async searchRepositoryDocumentation({\n    repoData,\n    query,\n    env,\n    ctx,\n  }: {\n    repoData: RepoData;\n    query: string;\n    env: Env;\n    ctx: any;\n  }): Promise<{\n    searchQuery: string;\n    content: { type: \"text\"; text: string }[];\n  }> {\n    console.debug(\"Searching repository documentation for threejs\");\n    return await searchRepositoryDocumentation({\n      repoData,\n      query,\n      env,\n      ctx,\n      fallbackSearch: noopFallbackSearch,\n    });\n  }\n}\n\nlet threejsRepoHandler: ThreejsRepoHandler;\nexport function getThreejsRepoHandler(): ThreejsRepoHandler {\n  if (!threejsRepoHandler) {\n    threejsRepoHandler = new ThreejsRepoHandler();\n  }\n  return threejsRepoHandler;\n}\n\nasync function noopFallbackSearch({\n  repoData,\n  query,\n  env,\n  ctx,\n}: {\n  repoData: RepoData;\n  query: string;\n  env: Env;\n  ctx: any;\n}): Promise<{\n  searchQuery: string;\n  content: { type: \"text\"; text: string }[];\n}> {\n  return {\n    searchQuery: query,\n    content: [\n      {\n        type: \"text\",\n        text: `Please use the ${GET_REFERENCE_DOCS_LIST_TOOL_NAME} tool first to get the list of reference docs and manuals, and then use the ${GET_SPECIFIC_DOCS_CONTENT_TOOL_NAME} tool to get the content of the specific docs or manuals.`,\n      },\n    ],\n  };\n}\n"
  },
  {
    "path": "src/api/tools/repoHandlers/generic/generic.test.ts",
    "content": "import { describe, it, expect, beforeAll } from \"vitest\";\nimport { MockMcp } from \"../test/utils\";\nimport * as toolsModule from \"../../index\";\n\n// @ts-ignore\nconst mockEnv: Env = {};\n\ndescribe(\"Generic Repo Handler\", () => {\n  let mockMcp: MockMcp;\n\n  beforeAll(() => {\n    mockMcp = new MockMcp();\n    toolsModule\n      .getMcpTools(mockEnv, \"docs.gitmcp.io\", \"https://docs.gitmcp.io\", {\n        waitUntil: () => Promise.resolve(),\n      })\n      .forEach((tool) => {\n        mockMcp.tool(tool.name, tool.description, tool.paramsSchema, tool.cb);\n      });\n  });\n\n  it(\"should return library correctly ElevenLabs\", async () => {\n    const library = \"ElevenLabs\";\n    const libraryTitle = \"ElevenLabs\";\n    const owner = \"elevenlabs\";\n    const repo = \"elevenlabs-docs\";\n\n    const tool = mockMcp.getTool(\"match_common_libs_owner_repo_mapping\");\n    const result = await tool.cb({ library });\n    expect(result).toEqual({\n      content: [\n        {\n          type: \"text\",\n          text: JSON.stringify({\n            library,\n            libraryTitle,\n            owner,\n            repo,\n          }),\n        },\n      ],\n    });\n  });\n\n  it(\"should return library correctly react-router\", async () => {\n    const library = \"react-router\";\n    const libraryTitle = \"React Router\";\n    const owner = \"remix-run\";\n    const repo = \"react-router\";\n\n    const tool = mockMcp.getTool(\"match_common_libs_owner_repo_mapping\");\n    const result = await tool.cb({ library });\n    expect(result).toEqual({\n      content: [\n        {\n          type: \"text\",\n          text: JSON.stringify({\n            library,\n            libraryTitle,\n            owner,\n            repo,\n          }),\n        },\n      ],\n    });\n  });\n\n  it(\"should return library correctly Next-Auth\", async () => {\n    const library = \"Next-Auth\";\n    const libraryTitle = \"NextAuth.js\";\n    const owner = \"nextauthjs\";\n    const repo = \"next-auth\";\n\n    const tool = mockMcp.getTool(\"match_common_libs_owner_repo_mapping\");\n    const result = await tool.cb({ library });\n    expect(result).toEqual({\n      content: [\n        {\n          type: \"text\",\n          text: JSON.stringify({\n            library,\n            libraryTitle,\n            owner,\n            repo,\n          }),\n        },\n      ],\n    });\n  });\n\n  it(\"should return library correctly for unknown library\", async () => {\n    const library = \"UnknownLibrary\";\n\n    const tool = mockMcp.getTool(\"match_common_libs_owner_repo_mapping\");\n    const result = await tool.cb({ library });\n    expect(result).toEqual({\n      content: [\n        {\n          type: \"text\",\n          text: `No owner/repo found for ${library}`,\n        },\n      ],\n    });\n  });\n});\n"
  },
  {
    "path": "src/api/tools/repoHandlers/generic/static-mapping.json",
    "content": "{\n  \"Peewee Async\": {\n    \"title\": \"Peewee Async\",\n    \"repoName\": \"05bit/peewee-async\",\n    \"githubUrl\": \"https://github.com/05bit/peewee-async\",\n    \"description\": \"Asynchronous interface for peewee ORM powered by asyncio\",\n    \"owner\": \"05bit\",\n    \"repo\": \"peewee-async\"\n  },\n  \"SenseVoice API\": {\n    \"title\": \"SenseVoice API\",\n    \"repoName\": \"0x5446/api4sensevoice\",\n    \"githubUrl\": \"https://github.com/0x5446/api4sensevoice\",\n    \"description\": \"API and websocket server for sensevoice. It has inherited some enhanced features, such as VAD detection, real-time streaming recognition, and speaker verification.\",\n    \"owner\": \"0x5446\",\n    \"repo\": \"api4sensevoice\"\n  },\n  \"ChatGPT DAN\": {\n    \"title\": \"ChatGPT DAN\",\n    \"repoName\": \"0xk1h0/chatgpt_dan\",\n    \"githubUrl\": \"https://github.com/0xk1h0/chatgpt_dan\",\n    \"description\": \"ChatGPT DAN, Jailbreaks prompt\",\n    \"owner\": \"0xk1h0\",\n    \"repo\": \"chatgpt_dan\"\n  },\n  \"Rig Framework\": {\n    \"title\": \"Rig Framework\",\n    \"repoName\": \"0xplaygrounds/rig-docs\",\n    \"githubUrl\": \"https://github.com/0xplaygrounds/rig-docs\",\n    \"description\": \" 📖 Standalone documentation for the Rig Framework\",\n    \"owner\": \"0xplaygrounds\",\n    \"repo\": \"rig-docs\"\n  },\n  \"Eleventy\": {\n    \"title\": \"Eleventy\",\n    \"repoName\": \"11ty/11ty-website\",\n    \"githubUrl\": \"https://github.com/11ty/11ty-website\",\n    \"description\": \"Documentation site for the Eleventy static site generator.\",\n    \"owner\": \"11ty\",\n    \"repo\": \"11ty-website\"\n  },\n  \"SwiftGlass\": {\n    \"title\": \"SwiftGlass\",\n    \"repoName\": \"1998code/swiftglass\",\n    \"githubUrl\": \"https://github.com/1998code/swiftglass\",\n    \"description\": \"Glassy Everything, even Old Devices. [ AI Assistant available below ]\",\n    \"owner\": \"1998code\",\n    \"repo\": \"swiftglass\"\n  },\n  \"Fquery\": {\n    \"title\": \"Fquery\",\n    \"repoName\": \"41y08h/fquery\",\n    \"githubUrl\": \"https://github.com/41y08h/fquery\",\n    \"description\": \"⚡fquery is a powerful async state management solution for flutter. It caches, updates and fully manages asynchronous data in your flutter apps.\",\n    \"owner\": \"41y08h\",\n    \"repo\": \"fquery\"\n  },\n  \"Fastify Cron\": {\n    \"title\": \"Fastify Cron\",\n    \"repoName\": \"47ng/fastify-cron\",\n    \"githubUrl\": \"https://github.com/47ng/fastify-cron\",\n    \"description\": \"Run cron jobs alongside your Fastify server 👷\",\n    \"owner\": \"47ng\",\n    \"repo\": \"fastify-cron\"\n  },\n  \"Nuqs\": {\n    \"title\": \"Nuqs\",\n    \"repoName\": \"47ng/nuqs\",\n    \"githubUrl\": \"https://github.com/47ng/nuqs\",\n    \"description\": \"Type-safe search params state manager for React frameworks - Like useState, but stored in the URL query string.\",\n    \"owner\": \"47ng\",\n    \"repo\": \"nuqs\"\n  },\n  \"Cookie Consent\": {\n    \"title\": \"Cookie Consent\",\n    \"repoName\": \"68publishers/cookie-consent\",\n    \"githubUrl\": \"https://github.com/68publishers/cookie-consent\",\n    \"description\": \":cookie: Cookie-consent widget with GTM, GCM & CMP integration\",\n    \"owner\": \"68publishers\",\n    \"repo\": \"cookie-consent\"\n  },\n  \"Dog Breed Classifier with Flask\": {\n    \"title\": \"Dog Breed Classifier with Flask\",\n    \"repoName\": \"7am7/dog-breed-classifier-with-flask\",\n    \"githubUrl\": \"https://github.com/7am7/dog-breed-classifier-with-flask\",\n    \"description\": \"\",\n    \"owner\": \"7am7\",\n    \"repo\": \"dog-breed-classifier-with-flask\"\n  },\n  \"Templ\": {\n    \"title\": \"Templ\",\n    \"repoName\": \"a-h/templ\",\n    \"githubUrl\": \"https://github.com/a-h/templ\",\n    \"description\": \"A language for writing HTML user interfaces in Go.\",\n    \"owner\": \"a-h\",\n    \"repo\": \"templ\"\n  },\n  \"AbapGit\": {\n    \"title\": \"AbapGit\",\n    \"repoName\": \"abapgit/abapgit\",\n    \"githubUrl\": \"https://github.com/abapgit/abapgit\",\n    \"description\": \"Git client for ABAP\",\n    \"owner\": \"abapgit\",\n    \"repo\": \"abapgit\"\n  },\n  \"NextFace\": {\n    \"title\": \"NextFace\",\n    \"repoName\": \"abdallahdib/nextface\",\n    \"githubUrl\": \"https://github.com/abdallahdib/nextface\",\n    \"description\": \"A high-fidelity 3D face reconstruction library from monocular RGB image(s)\",\n    \"owner\": \"abdallahdib\",\n    \"repo\": \"nextface\"\n  },\n  \"Axum Streams\": {\n    \"title\": \"Axum Streams\",\n    \"repoName\": \"abdolence/axum-streams-rs\",\n    \"githubUrl\": \"https://github.com/abdolence/axum-streams-rs\",\n    \"description\": \"Provides json/csv/protobuf/arrow streaming support for axum\",\n    \"owner\": \"abdolence\",\n    \"repo\": \"axum-streams-rs\"\n  },\n  \"Circles\": {\n    \"title\": \"Circles\",\n    \"repoName\": \"aboutcircles/circles-docs\",\n    \"githubUrl\": \"https://github.com/aboutcircles/circles-docs\",\n    \"description\": \"\",\n    \"owner\": \"aboutcircles\",\n    \"repo\": \"circles-docs\"\n  },\n  \"ABP Framework\": {\n    \"title\": \"ABP Framework\",\n    \"repoName\": \"abpframework/abp\",\n    \"githubUrl\": \"https://github.com/abpframework/abp\",\n    \"description\": \"Open-source web application framework for ASP.NET Core! Offers an opinionated architecture to build enterprise software solutions with best practices on top of the .NET. Provides the fundamental infrastructure, cross-cutting-concern implementations, startup templates, application modules, UI themes, tooling and documentation.\",\n    \"owner\": \"abpframework\",\n    \"repo\": \"abp\"\n  },\n  \"CreepJS\": {\n    \"title\": \"CreepJS\",\n    \"repoName\": \"abrahamjuliot/creepjs\",\n    \"githubUrl\": \"https://github.com/abrahamjuliot/creepjs\",\n    \"description\": \"Creepy device and browser fingerprinting\",\n    \"owner\": \"abrahamjuliot\",\n    \"repo\": \"creepjs\"\n  },\n  \"Activepieces\": {\n    \"title\": \"Activepieces\",\n    \"repoName\": \"activepieces/activepieces\",\n    \"githubUrl\": \"https://github.com/activepieces/activepieces\",\n    \"description\": \"AI Agents & MCPs & AI Workflow Automation • (280+ MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents\",\n    \"owner\": \"activepieces\",\n    \"repo\": \"activepieces\"\n  },\n  \"Actix Web\": {\n    \"title\": \"Actix Web\",\n    \"repoName\": \"actix/actix-web\",\n    \"githubUrl\": \"https://github.com/actix/actix-web\",\n    \"description\": \"Actix Web is a powerful, pragmatic, and extremely fast web framework for Rust.\",\n    \"owner\": \"actix\",\n    \"repo\": \"actix-web\"\n  },\n  \"CircuitPython\": {\n    \"title\": \"CircuitPython\",\n    \"repoName\": \"adafruit/circuitpython\",\n    \"githubUrl\": \"https://github.com/adafruit/circuitpython\",\n    \"description\": \"CircuitPython - a Python implementation for teaching coding with microcontrollers\",\n    \"owner\": \"adafruit\",\n    \"repo\": \"circuitpython\"\n  },\n  \"MinVer\": {\n    \"title\": \"MinVer\",\n    \"repoName\": \"adamralph/minver\",\n    \"githubUrl\": \"https://github.com/adamralph/minver\",\n    \"description\": \"🏷 Minimalistic versioning using Git tags.\",\n    \"owner\": \"adamralph\",\n    \"repo\": \"minver\"\n  },\n  \"React Data Grid\": {\n    \"title\": \"React Data Grid\",\n    \"repoName\": \"adazzle/react-data-grid\",\n    \"githubUrl\": \"https://github.com/adazzle/react-data-grid\",\n    \"description\": \"Feature-rich and customizable data grid React component\",\n    \"owner\": \"adazzle\",\n    \"repo\": \"react-data-grid\"\n  },\n  \"React Spectrum\": {\n    \"title\": \"React Spectrum\",\n    \"repoName\": \"adobe/react-spectrum\",\n    \"githubUrl\": \"https://github.com/adobe/react-spectrum\",\n    \"description\": \"A collection of libraries and tools that help you build adaptive, accessible, and robust user experiences.\",\n    \"owner\": \"adobe\",\n    \"repo\": \"react-spectrum\"\n  },\n  \"React Spectrum Charts\": {\n    \"title\": \"React Spectrum Charts\",\n    \"repoName\": \"adobe/react-spectrum-charts\",\n    \"githubUrl\": \"https://github.com/adobe/react-spectrum-charts\",\n    \"description\": \"Build compelling visualizations using declarative react components. \",\n    \"owner\": \"adobe\",\n    \"repo\": \"react-spectrum-charts\"\n  },\n  \"AdonisJS Ally\": {\n    \"title\": \"AdonisJS Ally\",\n    \"repoName\": \"adonisjs/ally\",\n    \"githubUrl\": \"https://github.com/adonisjs/ally\",\n    \"description\": \"AdonisJS Social Authentication Provider\",\n    \"owner\": \"adonisjs\",\n    \"repo\": \"ally\"\n  },\n  \"AdonisJS Lucid\": {\n    \"title\": \"AdonisJS Lucid\",\n    \"repoName\": \"adonisjs/lucid.adonisjs.com\",\n    \"githubUrl\": \"https://github.com/adonisjs/lucid.adonisjs.com\",\n    \"description\": \"Documentation for Lucid\",\n    \"owner\": \"adonisjs\",\n    \"repo\": \"lucid.adonisjs.com\"\n  },\n  \"AdonisJS\": {\n    \"title\": \"AdonisJS\",\n    \"repoName\": \"adonisjs/v6-docs\",\n    \"githubUrl\": \"https://github.com/adonisjs/v6-docs\",\n    \"description\": \"Documentation website for AdonisJS v6\",\n    \"owner\": \"adonisjs\",\n    \"repo\": \"v6-docs\"\n  },\n  \"AdsPower Local API\": {\n    \"title\": \"AdsPower Local API\",\n    \"repoName\": \"adspower/localapi\",\n    \"githubUrl\": \"https://github.com/adspower/localapi\",\n    \"description\": \"AdsPower supports Local API, which has functions like reading and writing account configuration information, opening and closing browsers, searching for accounts. Besides, it can cooperate with Selenium and Puppeteer to execute browser operations automatically. \",\n    \"owner\": \"adspower\",\n    \"repo\": \"localapi\"\n  },\n  \"Audiobookshelf\": {\n    \"title\": \"Audiobookshelf\",\n    \"repoName\": \"advplyr/audiobookshelf\",\n    \"githubUrl\": \"https://github.com/advplyr/audiobookshelf\",\n    \"description\": \"Self-hosted audiobook and podcast server\",\n    \"owner\": \"advplyr\",\n    \"repo\": \"audiobookshelf\"\n  },\n  \"Adyen Web\": {\n    \"title\": \"Adyen Web\",\n    \"repoName\": \"adyen/adyen-web\",\n    \"githubUrl\": \"https://github.com/adyen/adyen-web\",\n    \"description\": \"Adyen Web Drop-in and Components\",\n    \"owner\": \"adyen\",\n    \"repo\": \"adyen-web\"\n  },\n  \"Fred.rs\": {\n    \"title\": \"Fred.rs\",\n    \"repoName\": \"aembke/fred.rs\",\n    \"githubUrl\": \"https://github.com/aembke/fred.rs\",\n    \"description\": \"An async client for Valkey and Redis\",\n    \"owner\": \"aembke\",\n    \"repo\": \"fred.rs\"\n  },\n  \"MCPSharp\": {\n    \"title\": \"MCPSharp\",\n    \"repoName\": \"afrise/mcpsharp\",\n    \"githubUrl\": \"https://github.com/afrise/mcpsharp\",\n    \"description\": \"MCPSharp is a .NET library that helps you build Model Context Protocol (MCP) servers and clients - the standardized API protocol used by AI assistants and models.\",\n    \"owner\": \"afrise\",\n    \"repo\": \"mcpsharp\"\n  },\n  \"AG Charts\": {\n    \"title\": \"AG Charts\",\n    \"repoName\": \"ag-grid/ag-charts\",\n    \"githubUrl\": \"https://github.com/ag-grid/ag-charts\",\n    \"description\": \"AG Charts is a fully-featured and highly customizable JavaScript charting library. The professional choice for developers building enterprise applications\",\n    \"owner\": \"ag-grid\",\n    \"repo\": \"ag-charts\"\n  },\n  \"AG Grid\": {\n    \"title\": \"AG Grid\",\n    \"repoName\": \"ag-grid/ag-grid\",\n    \"githubUrl\": \"https://github.com/ag-grid/ag-grid\",\n    \"description\": \"The best JavaScript Data Table for building Enterprise Applications. Supports React / Angular / Vue / Plain JavaScript.\",\n    \"owner\": \"ag-grid\",\n    \"repo\": \"ag-grid\"\n  },\n  \"AG2\": {\n    \"title\": \"AG2\",\n    \"repoName\": \"ag2ai/ag2\",\n    \"githubUrl\": \"https://github.com/ag2ai/ag2\",\n    \"description\": \"AG2 (formerly AutoGen): The Open-Source AgentOS. Join us at: https://discord.gg/pAbnFJrkgZ\",\n    \"owner\": \"ag2ai\",\n    \"repo\": \"ag2\"\n  },\n  \"AgentOps\": {\n    \"title\": \"AgentOps\",\n    \"repoName\": \"agentops-ai/agentops\",\n    \"githubUrl\": \"https://github.com/agentops-ai/agentops\",\n    \"description\": \"Python SDK for AI agent monitoring, LLM cost tracking, benchmarking, and more. Integrates with most LLMs and agent frameworks including OpenAI Agents SDK, CrewAI, Langchain, Autogen, AG2, and CamelAI\",\n    \"owner\": \"agentops-ai\",\n    \"repo\": \"agentops\"\n  },\n  \"AgileRL\": {\n    \"title\": \"AgileRL\",\n    \"repoName\": \"agilerl/agilerl\",\n    \"githubUrl\": \"https://github.com/agilerl/agilerl\",\n    \"description\": \"Streamlining reinforcement learning with RLOps. State-of-the-art RL algorithms and tools.\",\n    \"owner\": \"agilerl\",\n    \"repo\": \"agilerl\"\n  },\n  \"Agent UI\": {\n    \"title\": \"Agent UI\",\n    \"repoName\": \"agno-agi/agent-ui\",\n    \"githubUrl\": \"https://github.com/agno-agi/agent-ui\",\n    \"description\": \"A modern chat interface for AI agents built with Next.js, Tailwind CSS, and TypeScript. \",\n    \"owner\": \"agno-agi\",\n    \"repo\": \"agent-ui\"\n  },\n  \"Agno\": {\n    \"title\": \"Agno\",\n    \"repoName\": \"agno-agi/agno-docs\",\n    \"githubUrl\": \"https://github.com/agno-agi/agno-docs\",\n    \"description\": \"\",\n    \"owner\": \"agno-agi\",\n    \"repo\": \"agno-docs\"\n  },\n  \"Agora RTC Web\": {\n    \"title\": \"Agora RTC Web\",\n    \"repoName\": \"agoraio/agora-rtc-web\",\n    \"githubUrl\": \"https://github.com/agoraio/agora-rtc-web\",\n    \"description\": \"\",\n    \"owner\": \"agoraio\",\n    \"repo\": \"agora-rtc-web\"\n  },\n  \"Agora Docs\": {\n    \"title\": \"Agora Docs\",\n    \"repoName\": \"agoraio/docs-source\",\n    \"githubUrl\": \"https://github.com/agoraio/docs-source\",\n    \"description\": \"A repository for the Agora Docs source content.\",\n    \"owner\": \"agoraio\",\n    \"repo\": \"docs-source\"\n  },\n  \"Dynamo\": {\n    \"title\": \"Dynamo\",\n    \"repoName\": \"ai-dynamo/dynamo\",\n    \"githubUrl\": \"https://github.com/ai-dynamo/dynamo\",\n    \"description\": \"A Datacenter Scale Distributed Inference Serving Framework\",\n    \"owner\": \"ai-dynamo\",\n    \"repo\": \"dynamo\"\n  },\n  \"Recml\": {\n    \"title\": \"Recml\",\n    \"repoName\": \"ai-hypercomputer/recml\",\n    \"githubUrl\": \"https://github.com/ai-hypercomputer/recml\",\n    \"description\": \"\",\n    \"owner\": \"ai-hypercomputer\",\n    \"repo\": \"recml\"\n  },\n  \"Kysely D1\": {\n    \"title\": \"Kysely D1\",\n    \"repoName\": \"aidenwallis/kysely-d1\",\n    \"githubUrl\": \"https://github.com/aidenwallis/kysely-d1\",\n    \"description\": \"D1 dialect for Kysely\",\n    \"owner\": \"aidenwallis\",\n    \"repo\": \"kysely-d1\"\n  },\n  \"React Scan\": {\n    \"title\": \"React Scan\",\n    \"repoName\": \"aidenybai/react-scan\",\n    \"githubUrl\": \"https://github.com/aidenybai/react-scan\",\n    \"description\": \"Scan for React performance issues and eliminate slow renders in your app\",\n    \"owner\": \"aidenybai\",\n    \"repo\": \"react-scan\"\n  },\n  \"Aider\": {\n    \"title\": \"Aider\",\n    \"repoName\": \"aider-ai/aider\",\n    \"githubUrl\": \"https://github.com/aider-ai/aider\",\n    \"description\": \"aider is AI pair programming in your terminal\",\n    \"owner\": \"aider-ai\",\n    \"repo\": \"aider\"\n  },\n  \"Grep AST\": {\n    \"title\": \"Grep AST\",\n    \"repoName\": \"aider-ai/grep-ast\",\n    \"githubUrl\": \"https://github.com/aider-ai/grep-ast\",\n    \"description\": \"Grep source code and see useful code context about matching lines\",\n    \"owner\": \"aider-ai\",\n    \"repo\": \"grep-ast\"\n  },\n  \"Gspread Pandas\": {\n    \"title\": \"Gspread Pandas\",\n    \"repoName\": \"aiguofer/gspread-pandas\",\n    \"githubUrl\": \"https://github.com/aiguofer/gspread-pandas\",\n    \"description\": \"A package to easily open an instance of a Google spreadsheet and interact with worksheets through Pandas DataFrames.\",\n    \"owner\": \"aiguofer\",\n    \"repo\": \"gspread-pandas\"\n  },\n  \"Aiodns\": {\n    \"title\": \"Aiodns\",\n    \"repoName\": \"aio-libs/aiodns\",\n    \"githubUrl\": \"https://github.com/aio-libs/aiodns\",\n    \"description\": \"Simple DNS resolver for asyncio\",\n    \"owner\": \"aio-libs\",\n    \"repo\": \"aiodns\"\n  },\n  \"Aiohttp\": {\n    \"title\": \"Aiohttp\",\n    \"repoName\": \"aio-libs/aiohttp\",\n    \"githubUrl\": \"https://github.com/aio-libs/aiohttp\",\n    \"description\": \"Asynchronous HTTP client/server framework for asyncio and Python\",\n    \"owner\": \"aio-libs\",\n    \"repo\": \"aiohttp\"\n  },\n  \"Yarl\": {\n    \"title\": \"Yarl\",\n    \"repoName\": \"aio-libs/yarl\",\n    \"githubUrl\": \"https://github.com/aio-libs/yarl\",\n    \"description\": \"Yet another URL library\",\n    \"owner\": \"aio-libs\",\n    \"repo\": \"yarl\"\n  },\n  \"Aiogram\": {\n    \"title\": \"Aiogram\",\n    \"repoName\": \"aiogram/aiogram\",\n    \"githubUrl\": \"https://github.com/aiogram/aiogram\",\n    \"description\": \"aiogram is a modern and fully asynchronous framework for Telegram Bot API written in Python using asyncio\",\n    \"owner\": \"aiogram\",\n    \"repo\": \"aiogram\"\n  },\n  \"Airwindows\": {\n    \"title\": \"Airwindows\",\n    \"repoName\": \"airwindows/airwindows\",\n    \"githubUrl\": \"https://github.com/airwindows/airwindows\",\n    \"description\": \"This contains all the Airwindows audio open source code\",\n    \"owner\": \"airwindows\",\n    \"repo\": \"airwindows\"\n  },\n  \"OpenScholar\": {\n    \"title\": \"OpenScholar\",\n    \"repoName\": \"akariasai/openscholar\",\n    \"githubUrl\": \"https://github.com/akariasai/openscholar\",\n    \"description\": \"This repository includes the official implementation of OpenScholar: Synthesizing Scientific Literature with Retrieval-augmented LMs. \",\n    \"owner\": \"akariasai\",\n    \"repo\": \"openscholar\"\n  },\n  \"Python Keepa.com API\": {\n    \"title\": \"Python Keepa.com API\",\n    \"repoName\": \"akaszynski/keepa\",\n    \"githubUrl\": \"https://github.com/akaszynski/keepa\",\n    \"description\": \"Python Keepa.com API  \",\n    \"owner\": \"akaszynski\",\n    \"repo\": \"keepa\"\n  },\n  \"Akka\": {\n    \"title\": \"Akka\",\n    \"repoName\": \"akka/akka\",\n    \"githubUrl\": \"https://github.com/akka/akka\",\n    \"description\": \"A platform to build and run apps that are elastic, agile, and resilient. SDK, libraries, and hosted environments.\",\n    \"owner\": \"akka\",\n    \"repo\": \"akka\"\n  },\n  \"Akka SDK\": {\n    \"title\": \"Akka SDK\",\n    \"repoName\": \"akka/akka-sdk\",\n    \"githubUrl\": \"https://github.com/akka/akka-sdk\",\n    \"description\": \"The Akka SDK offer a set of components that let you build durable, responsive, real-time services.\",\n    \"owner\": \"akka\",\n    \"repo\": \"akka-sdk\"\n  },\n  \"Akka.NET\": {\n    \"title\": \"Akka.NET\",\n    \"repoName\": \"akkadotnet/akka.net\",\n    \"githubUrl\": \"https://github.com/akkadotnet/akka.net\",\n    \"description\": \"Canonical actor model implementation for .NET with local + distributed actors in C# and F#.\",\n    \"owner\": \"akkadotnet\",\n    \"repo\": \"akka.net\"\n  },\n  \"Alchemy SDK JS\": {\n    \"title\": \"Alchemy SDK JS\",\n    \"repoName\": \"alchemyplatform/alchemy-sdk-js\",\n    \"githubUrl\": \"https://github.com/alchemyplatform/alchemy-sdk-js\",\n    \"description\": \"The easiest way to connect your dApp to the blockchain.\",\n    \"owner\": \"alchemyplatform\",\n    \"repo\": \"alchemy-sdk-js\"\n  },\n  \"LegendsGraph\": {\n    \"title\": \"LegendsGraph\",\n    \"repoName\": \"alekseishevkoplias/legendsgraph\",\n    \"githubUrl\": \"https://github.com/alekseishevkoplias/legendsgraph\",\n    \"description\": \"My attempts to plot relationship graphs based on the Dwarf Fortress Legends Mode data.\",\n    \"owner\": \"alekseishevkoplias\",\n    \"repo\": \"legendsgraph\"\n  },\n  \"Controls.UserDialogs.MAUI\": {\n    \"title\": \"Controls.UserDialogs.MAUI\",\n    \"repoName\": \"alex-dobrynin/controls.userdialogs.maui.git\",\n    \"githubUrl\": \"https://github.com/alex-dobrynin/controls.userdialogs.maui.git\",\n    \"description\": \"This is the updated version of Acr.Userdialogs. It supports latest version of .Net and you have an ability to style your diloags as you want\",\n    \"owner\": \"alex-dobrynin\",\n    \"repo\": \"controls.userdialogs.maui.git\"\n  },\n  \"Electron Vite\": {\n    \"title\": \"Electron Vite\",\n    \"repoName\": \"alex8088/electron-vite\",\n    \"githubUrl\": \"https://github.com/alex8088/electron-vite\",\n    \"description\": \"Next generation Electron build tooling based on Vite 新一代 Electron 开发构建工具，支持源代码保护\",\n    \"owner\": \"alex8088\",\n    \"repo\": \"electron-vite\"\n  },\n  \"Schwab Py\": {\n    \"title\": \"Schwab Py\",\n    \"repoName\": \"alexgolec/schwab-py\",\n    \"githubUrl\": \"https://github.com/alexgolec/schwab-py\",\n    \"description\": \"Unofficial API wrapper for the Schwab HTTP API \",\n    \"owner\": \"alexgolec\",\n    \"repo\": \"schwab-py\"\n  },\n  \"Ruby OpenAI\": {\n    \"title\": \"Ruby OpenAI\",\n    \"repoName\": \"alexrudall/ruby-openai\",\n    \"githubUrl\": \"https://github.com/alexrudall/ruby-openai\",\n    \"description\": \"OpenAI API + Ruby! 🤖❤️ Now with Responses API + DeepSeek!\",\n    \"owner\": \"alexrudall\",\n    \"repo\": \"ruby-openai\"\n  },\n  \"Algolia InstantSearch\": {\n    \"title\": \"Algolia InstantSearch\",\n    \"repoName\": \"algolia/instantsearch\",\n    \"githubUrl\": \"https://github.com/algolia/instantsearch\",\n    \"description\": \"⚡️ Libraries for building performant and instant search and recommend experiences with Algolia. Compatible with JavaScript, TypeScript, React and Vue.\",\n    \"owner\": \"algolia\",\n    \"repo\": \"instantsearch\"\n  },\n  \"Alibaba Fusion Next\": {\n    \"title\": \"Alibaba Fusion Next\",\n    \"repoName\": \"alibaba-fusion/next\",\n    \"githubUrl\": \"https://github.com/alibaba-fusion/next\",\n    \"description\": \"🦍 A configurable component library for web built on React. \",\n    \"owner\": \"alibaba-fusion\",\n    \"repo\": \"next\"\n  },\n  \"Higress\": {\n    \"title\": \"Higress\",\n    \"repoName\": \"alibaba/higress\",\n    \"githubUrl\": \"https://github.com/alibaba/higress\",\n    \"description\": \"🤖 AI Gateway | AI Native API Gateway\",\n    \"owner\": \"alibaba\",\n    \"repo\": \"higress\"\n  },\n  \"Ice.js\": {\n    \"title\": \"Ice.js\",\n    \"repoName\": \"alibaba/ice\",\n    \"githubUrl\": \"https://github.com/alibaba/ice\",\n    \"description\": \"🚀 ice.js: The Progressive App Framework Based On React（基于 React 的渐进式应用框架）\",\n    \"owner\": \"alibaba\",\n    \"repo\": \"ice\"\n  },\n  \"LowCode Engine\": {\n    \"title\": \"LowCode Engine\",\n    \"repoName\": \"alibaba/lowcode-engine\",\n    \"githubUrl\": \"https://github.com/alibaba/lowcode-engine\",\n    \"description\": \"An enterprise-class low-code technology stack with scale-out design / 一套面向扩展设计的企业级低代码技术体系\",\n    \"owner\": \"alibaba\",\n    \"repo\": \"lowcode-engine\"\n  },\n  \"NGAquila\": {\n    \"title\": \"NGAquila\",\n    \"repoName\": \"allianz/ng-aquila\",\n    \"githubUrl\": \"https://github.com/allianz/ng-aquila\",\n    \"description\": \"Angular UI Component library for the Open Insurance Platform\",\n    \"owner\": \"allianz\",\n    \"repo\": \"ng-aquila\"\n  },\n  \"Alpaca Python SDK\": {\n    \"title\": \"Alpaca Python SDK\",\n    \"repoName\": \"alpacahq/alpaca-py\",\n    \"githubUrl\": \"https://github.com/alpacahq/alpaca-py\",\n    \"description\": \"The Official Python SDK for Alpaca API\",\n    \"owner\": \"alpacahq\",\n    \"repo\": \"alpaca-py\"\n  },\n  \"Alpine\": {\n    \"title\": \"Alpine\",\n    \"repoName\": \"alpinejs/alpine\",\n    \"githubUrl\": \"https://github.com/alpinejs/alpine\",\n    \"description\": \"A rugged, minimal framework for composing JavaScript behavior in your markup. \",\n    \"owner\": \"alpinejs\",\n    \"repo\": \"alpine\"\n  },\n  \"Next Intl\": {\n    \"title\": \"Next Intl\",\n    \"repoName\": \"amannn/next-intl\",\n    \"githubUrl\": \"https://github.com/amannn/next-intl\",\n    \"description\": \"🌐 Internationalization (i18n) for Next.js \",\n    \"owner\": \"amannn\",\n    \"repo\": \"next-intl\"\n  },\n  \"Error Or\": {\n    \"title\": \"Error Or\",\n    \"repoName\": \"amantinband/error-or\",\n    \"githubUrl\": \"https://github.com/amantinband/error-or\",\n    \"description\": \"A simple, fluent discriminated union of an error or a result.\",\n    \"owner\": \"amantinband\",\n    \"repo\": \"error-or\"\n  },\n  \"Gun\": {\n    \"title\": \"Gun\",\n    \"repoName\": \"amark/gun\",\n    \"githubUrl\": \"https://github.com/amark/gun\",\n    \"description\": \"An open source cybersecurity protocol for syncing decentralized graph data.\",\n    \"owner\": \"amark\",\n    \"repo\": \"gun\"\n  },\n  \"Dozzle\": {\n    \"title\": \"Dozzle\",\n    \"repoName\": \"amir20/dozzle\",\n    \"githubUrl\": \"https://github.com/amir20/dozzle\",\n    \"description\": \"Realtime log viewer for docker containers. \",\n    \"owner\": \"amir20\",\n    \"repo\": \"dozzle\"\n  },\n  \"Python Ooo Dev Tools\": {\n    \"title\": \"Python Ooo Dev Tools\",\n    \"repoName\": \"amourspirit/python_ooo_dev_tools\",\n    \"githubUrl\": \"https://github.com/amourspirit/python_ooo_dev_tools\",\n    \"description\": \"\",\n    \"owner\": \"amourspirit\",\n    \"repo\": \"python_ooo_dev_tools\"\n  },\n  \"Lector\": {\n    \"title\": \"Lector\",\n    \"repoName\": \"anaralabs/lector\",\n    \"githubUrl\": \"https://github.com/anaralabs/lector\",\n    \"description\": \"Simple, fast primitives for building pdf viewers. maintained by @anaralabs\",\n    \"owner\": \"anaralabs\",\n    \"repo\": \"lector\"\n  },\n  \"Python-Repomix\": {\n    \"title\": \"Python-Repomix\",\n    \"repoName\": \"andersonby/python-repomix\",\n    \"githubUrl\": \"https://github.com/andersonby/python-repomix\",\n    \"description\": \"📦 python-repomix is a powerful tool that packs your entire repository into a single, AI-friendly file. Perfect for when you need to feed your codebase to Large Language Models (LLMs) or other AI tools like Claude, ChatGPT, and Gemini.\",\n    \"owner\": \"andersonby\",\n    \"repo\": \"python-repomix\"\n  },\n  \"Android Architecture Samples\": {\n    \"title\": \"Android Architecture Samples\",\n    \"repoName\": \"android/architecture-samples\",\n    \"githubUrl\": \"https://github.com/android/architecture-samples\",\n    \"description\": \"A collection of samples to discuss and showcase different architectural tools and patterns for Android apps.\",\n    \"owner\": \"android\",\n    \"repo\": \"architecture-samples\"\n  },\n  \"Android NDK\": {\n    \"title\": \"Android NDK\",\n    \"repoName\": \"android/ndk\",\n    \"githubUrl\": \"https://github.com/android/ndk\",\n    \"description\": \"The Android Native Development Kit\",\n    \"owner\": \"android\",\n    \"repo\": \"ndk\"\n  },\n  \"AngleSharp\": {\n    \"title\": \"AngleSharp\",\n    \"repoName\": \"anglesharp/anglesharp\",\n    \"githubUrl\": \"https://github.com/anglesharp/anglesharp\",\n    \"description\": \":angel: The ultimate angle brackets parser library parsing HTML5, MathML, SVG and CSS to construct a DOM based on the official W3C specifications.\",\n    \"owner\": \"anglesharp\",\n    \"repo\": \"anglesharp\"\n  },\n  \"Angular\": {\n    \"title\": \"Angular\",\n    \"repoName\": \"angular/angular\",\n    \"githubUrl\": \"https://github.com/angular/angular\",\n    \"description\": \"Deliver web apps with confidence 🚀\",\n    \"owner\": \"angular\",\n    \"repo\": \"angular\"\n  },\n  \"Angular Components\": {\n    \"title\": \"Angular Components\",\n    \"repoName\": \"angular/components\",\n    \"githubUrl\": \"https://github.com/angular/components\",\n    \"description\": \"Component infrastructure and Material Design components for Angular\",\n    \"owner\": \"angular\",\n    \"repo\": \"components\"\n  },\n  \"Node Rate Limiter Flexible\": {\n    \"title\": \"Node Rate Limiter Flexible\",\n    \"repoName\": \"animir/node-rate-limiter-flexible\",\n    \"githubUrl\": \"https://github.com/animir/node-rate-limiter-flexible\",\n    \"description\": \"Atomic counters and rate limiting tools. Limit resource access at any scale.\",\n    \"owner\": \"animir\",\n    \"repo\": \"node-rate-limiter-flexible\"\n  },\n  \"LitMotion\": {\n    \"title\": \"LitMotion\",\n    \"repoName\": \"annulusgames/litmotion\",\n    \"githubUrl\": \"https://github.com/annulusgames/litmotion\",\n    \"description\": \"Lightning-fast and Zero Allocation Tween Library for Unity.\",\n    \"owner\": \"annulusgames\",\n    \"repo\": \"litmotion\"\n  },\n  \"IBM QRadar Ansible Collection\": {\n    \"title\": \"IBM QRadar Ansible Collection\",\n    \"repoName\": \"ansible-collections/ibm.qradar\",\n    \"githubUrl\": \"https://github.com/ansible-collections/ibm.qradar\",\n    \"description\": \"IBM QRadar Ansible Collection\",\n    \"owner\": \"ansible-collections\",\n    \"repo\": \"ibm.qradar\"\n  },\n  \"Ansible\": {\n    \"title\": \"Ansible\",\n    \"repoName\": \"ansible/ansible-documentation\",\n    \"githubUrl\": \"https://github.com/ansible/ansible-documentation\",\n    \"description\": \"Ansible community documentation\",\n    \"owner\": \"ansible\",\n    \"repo\": \"ansible-documentation\"\n  },\n  \"Ansible Lint\": {\n    \"title\": \"Ansible Lint\",\n    \"repoName\": \"ansible/ansible-lint\",\n    \"githubUrl\": \"https://github.com/ansible/ansible-lint\",\n    \"description\": \"ansible-lint checks playbooks for practices and behavior that could potentially be improved and can fix some of the most common ones for you\",\n    \"owner\": \"ansible\",\n    \"repo\": \"ansible-lint\"\n  },\n  \"AWX\": {\n    \"title\": \"AWX\",\n    \"repoName\": \"ansible/awx\",\n    \"githubUrl\": \"https://github.com/ansible/awx\",\n    \"description\": \"AWX provides a web-based user interface, REST API, and task engine built on top of Ansible. It is one of the upstream projects for Red Hat Ansible Automation Platform.\",\n    \"owner\": \"ansible\",\n    \"repo\": \"awx\"\n  },\n  \"FastHtml\": {\n    \"title\": \"FastHtml\",\n    \"repoName\": \"answerdotai/fasthtml\",\n    \"githubUrl\": \"https://github.com/answerdotai/fasthtml\",\n    \"description\": \"The fastest way to create an HTML app\",\n    \"owner\": \"answerdotai\",\n    \"repo\": \"fasthtml\"\n  },\n  \"AnswerDotAI LLMS TXT\": {\n    \"title\": \"AnswerDotAI LLMS TXT\",\n    \"repoName\": \"answerdotai/llms-txt\",\n    \"githubUrl\": \"https://github.com/answerdotai/llms-txt\",\n    \"description\": \"The /llms.txt file, helping language models use your website\",\n    \"owner\": \"answerdotai\",\n    \"repo\": \"llms-txt\"\n  },\n  \"AEDT Python Client Package\": {\n    \"title\": \"AEDT Python Client Package\",\n    \"repoName\": \"ansys/pyaedt\",\n    \"githubUrl\": \"https://github.com/ansys/pyaedt\",\n    \"description\": \"AEDT Python Client Package\",\n    \"owner\": \"ansys\",\n    \"repo\": \"pyaedt\"\n  },\n  \"Ant Design\": {\n    \"title\": \"Ant Design\",\n    \"repoName\": \"ant-design/ant-design\",\n    \"githubUrl\": \"https://github.com/ant-design/ant-design\",\n    \"description\": \"An enterprise-class UI design language and React UI library\",\n    \"owner\": \"ant-design\",\n    \"repo\": \"ant-design\"\n  },\n  \"Ni\": {\n    \"title\": \"Ni\",\n    \"repoName\": \"antfu-collective/ni\",\n    \"githubUrl\": \"https://github.com/antfu-collective/ni\",\n    \"description\": \"💡 Use the right package manager\",\n    \"owner\": \"antfu-collective\",\n    \"repo\": \"ni\"\n  },\n  \"ESLint Config\": {\n    \"title\": \"ESLint Config\",\n    \"repoName\": \"antfu/eslint-config\",\n    \"githubUrl\": \"https://github.com/antfu/eslint-config\",\n    \"description\": \"Anthony's ESLint config preset\",\n    \"owner\": \"antfu\",\n    \"repo\": \"eslint-config\"\n  },\n  \"Anthropic Cookbook\": {\n    \"title\": \"Anthropic Cookbook\",\n    \"repoName\": \"anthropics/anthropic-cookbook\",\n    \"githubUrl\": \"https://github.com/anthropics/anthropic-cookbook\",\n    \"description\": \"A collection of notebooks/recipes showcasing some fun and effective ways of using Claude.\",\n    \"owner\": \"anthropics\",\n    \"repo\": \"anthropic-cookbook\"\n  },\n  \"Anthropic SDK Go\": {\n    \"title\": \"Anthropic SDK Go\",\n    \"repoName\": \"anthropics/anthropic-sdk-go\",\n    \"githubUrl\": \"https://github.com/anthropics/anthropic-sdk-go\",\n    \"description\": \"Access to Anthropic's safety-first language model APIs via Go\",\n    \"owner\": \"anthropics\",\n    \"repo\": \"anthropic-sdk-go\"\n  },\n  \"Anthropic SDK TypeScript\": {\n    \"title\": \"Anthropic SDK TypeScript\",\n    \"repoName\": \"anthropics/anthropic-sdk-typescript\",\n    \"githubUrl\": \"https://github.com/anthropics/anthropic-sdk-typescript\",\n    \"description\": \"Access to Anthropic's safety-first language model APIs\",\n    \"owner\": \"anthropics\",\n    \"repo\": \"anthropic-sdk-typescript\"\n  },\n  \"Claude Code\": {\n    \"title\": \"Claude Code\",\n    \"repoName\": \"anthropics/claude-code\",\n    \"githubUrl\": \"https://github.com/anthropics/claude-code\",\n    \"description\": \"Claude Code is an agentic coding tool that lives in your terminal, understands your codebase, and helps you code faster by executing routine tasks, explaining complex code, and handling git workflows - all through natural language commands.\",\n    \"owner\": \"anthropics\",\n    \"repo\": \"claude-code\"\n  },\n  \"ANTLR\": {\n    \"title\": \"ANTLR\",\n    \"repoName\": \"antlr/antlr4.git\",\n    \"githubUrl\": \"https://github.com/antlr/antlr4.git\",\n    \"description\": \"ANTLR (ANother Tool for Language Recognition) is a powerful parser generator for reading, processing, executing, or translating structured text or binary files.\",\n    \"owner\": \"antlr\",\n    \"repo\": \"antlr4.git\"\n  },\n  \"Supabase Go\": {\n    \"title\": \"Supabase Go\",\n    \"repoName\": \"antoineross/supabase-go\",\n    \"githubUrl\": \"https://github.com/antoineross/supabase-go\",\n    \"description\": \"A Go Client library for Supabase — adapted to be closer to the JS SDK\",\n    \"owner\": \"antoineross\",\n    \"repo\": \"supabase-go\"\n  },\n  \"Cargo Swift\": {\n    \"title\": \"Cargo Swift\",\n    \"repoName\": \"antoniusnaumann/cargo-swift\",\n    \"githubUrl\": \"https://github.com/antoniusnaumann/cargo-swift\",\n    \"description\": \"A cargo plugin to easily build Swift packages from Rust code\",\n    \"owner\": \"antoniusnaumann\",\n    \"repo\": \"cargo-swift\"\n  },\n  \"F2\": {\n    \"title\": \"F2\",\n    \"repoName\": \"antvis/f2\",\n    \"githubUrl\": \"https://github.com/antvis/f2\",\n    \"description\": \"📱📈An elegant, interactive and flexible charting library for mobile.\",\n    \"owner\": \"antvis\",\n    \"repo\": \"f2\"\n  },\n  \"AntV S2\": {\n    \"title\": \"AntV S2\",\n    \"repoName\": \"antvis/s2\",\n    \"githubUrl\": \"https://github.com/antvis/s2\",\n    \"description\": \"⚡️ A practical visualization library for tabular analysis.\",\n    \"owner\": \"antvis\",\n    \"repo\": \"s2\"\n  },\n  \"Django Anymail\": {\n    \"title\": \"Django Anymail\",\n    \"repoName\": \"anymail/django-anymail\",\n    \"githubUrl\": \"https://github.com/anymail/django-anymail\",\n    \"description\": \"Django email backends and webhooks for Amazon SES, Brevo (Sendinblue), MailerSend, Mailgun, Mailjet, Postmark, Postal, Resend, SendGrid, SparkPost, Unisender Go and more\",\n    \"owner\": \"anymail\",\n    \"repo\": \"django-anymail\"\n  },\n  \"Agave\": {\n    \"title\": \"Agave\",\n    \"repoName\": \"anza-xyz/agave\",\n    \"githubUrl\": \"https://github.com/anza-xyz/agave\",\n    \"description\": \"Web-Scale Blockchain for fast, secure, scalable, decentralized apps and marketplaces.\",\n    \"owner\": \"anza-xyz\",\n    \"repo\": \"agave\"\n  },\n  \"Kit\": {\n    \"title\": \"Kit\",\n    \"repoName\": \"anza-xyz/kit\",\n    \"githubUrl\": \"https://github.com/anza-xyz/kit\",\n    \"description\": \"Solana JavaScript SDK\",\n    \"owner\": \"anza-xyz\",\n    \"repo\": \"kit\"\n  },\n  \"Solana SDK\": {\n    \"title\": \"Solana SDK\",\n    \"repoName\": \"anza-xyz/solana-sdk\",\n    \"githubUrl\": \"https://github.com/anza-xyz/solana-sdk\",\n    \"description\": \"Rust SDK for the Solana blockchain, used by on-chain program developers and the Agave validator\",\n    \"owner\": \"anza-xyz\",\n    \"repo\": \"solana-sdk\"\n  },\n  \"Anza Wallet Adapter\": {\n    \"title\": \"Anza Wallet Adapter\",\n    \"repoName\": \"anza-xyz/wallet-adapter\",\n    \"githubUrl\": \"https://github.com/anza-xyz/wallet-adapter\",\n    \"description\": \"Modular TypeScript wallet adapters and components for Solana applications.\",\n    \"owner\": \"anza-xyz\",\n    \"repo\": \"wallet-adapter\"\n  },\n  \"Apache Accumulo\": {\n    \"title\": \"Apache Accumulo\",\n    \"repoName\": \"apache/accumulo-website\",\n    \"githubUrl\": \"https://github.com/apache/accumulo-website\",\n    \"description\": \"Apache Accumulo Website\",\n    \"owner\": \"apache\",\n    \"repo\": \"accumulo-website\"\n  },\n  \"Apache ActiveMQ\": {\n    \"title\": \"Apache ActiveMQ\",\n    \"repoName\": \"apache/activemq-website\",\n    \"githubUrl\": \"https://github.com/apache/activemq-website\",\n    \"description\": \"Apache ActiveMQ Website\",\n    \"owner\": \"apache\",\n    \"repo\": \"activemq-website\"\n  },\n  \"Apache AGE\": {\n    \"title\": \"Apache AGE\",\n    \"repoName\": \"apache/age\",\n    \"githubUrl\": \"https://github.com/apache/age\",\n    \"description\": \"Graph database optimized for fast analysis and real-time data processing. It is provided as an extension to PostgreSQL.\",\n    \"owner\": \"apache\",\n    \"repo\": \"age\"\n  },\n  \"AGE\": {\n    \"title\": \"AGE\",\n    \"repoName\": \"apache/age-website\",\n    \"githubUrl\": \"https://github.com/apache/age-website\",\n    \"description\": \"AGE Project\",\n    \"owner\": \"apache\",\n    \"repo\": \"age-website\"\n  },\n  \"Apache Airflow\": {\n    \"title\": \"Apache Airflow\",\n    \"repoName\": \"apache/airflow\",\n    \"githubUrl\": \"https://github.com/apache/airflow\",\n    \"description\": \"Apache Airflow - A platform to programmatically author, schedule, and monitor workflows\",\n    \"owner\": \"apache\",\n    \"repo\": \"airflow\"\n  },\n  \"Apache Arrow\": {\n    \"title\": \"Apache Arrow\",\n    \"repoName\": \"apache/arrow-site\",\n    \"githubUrl\": \"https://github.com/apache/arrow-site\",\n    \"description\": \"Mirror of Apache Arrow site\",\n    \"owner\": \"apache\",\n    \"repo\": \"arrow-site\"\n  },\n  \"Apache Arrow RS\": {\n    \"title\": \"Apache Arrow RS\",\n    \"repoName\": \"apache/arrow-rs\",\n    \"githubUrl\": \"https://github.com/apache/arrow-rs\",\n    \"description\": \"Official Rust implementation of Apache Arrow\",\n    \"owner\": \"apache\",\n    \"repo\": \"arrow-rs\"\n  },\n  \"Apache Arrow RS Object Store\": {\n    \"title\": \"Apache Arrow RS Object Store\",\n    \"repoName\": \"apache/arrow-rs-object-store\",\n    \"githubUrl\": \"https://github.com/apache/arrow-rs-object-store\",\n    \"description\": \"Rust object_store crate\",\n    \"owner\": \"apache\",\n    \"repo\": \"arrow-rs-object-store\"\n  },\n  \"Apache Camel\": {\n    \"title\": \"Apache Camel\",\n    \"repoName\": \"apache/camel-website\",\n    \"githubUrl\": \"https://github.com/apache/camel-website\",\n    \"description\": \"Apache Camel Website\",\n    \"owner\": \"apache\",\n    \"repo\": \"camel-website\"\n  },\n  \"Apache Commons Configuration\": {\n    \"title\": \"Apache Commons Configuration\",\n    \"repoName\": \"apache/commons-configuration\",\n    \"githubUrl\": \"https://github.com/apache/commons-configuration\",\n    \"description\": \"Apache Commons Configuration\",\n    \"owner\": \"apache\",\n    \"repo\": \"commons-configuration\"\n  },\n  \"Apache Cordova\": {\n    \"title\": \"Apache Cordova\",\n    \"repoName\": \"apache/cordova-docs\",\n    \"githubUrl\": \"https://github.com/apache/cordova-docs\",\n    \"description\": \"Apache Cordova Documentation\",\n    \"owner\": \"apache\",\n    \"repo\": \"cordova-docs\"\n  },\n  \"CouchDB\": {\n    \"title\": \"CouchDB\",\n    \"repoName\": \"apache/couchdb\",\n    \"githubUrl\": \"https://github.com/apache/couchdb\",\n    \"description\": \"Seamless multi-primary syncing database with an intuitive HTTP/JSON API, designed for reliability\",\n    \"owner\": \"apache\",\n    \"repo\": \"couchdb\"\n  },\n  \"CouchDB Nano\": {\n    \"title\": \"CouchDB Nano\",\n    \"repoName\": \"apache/couchdb-nano\",\n    \"githubUrl\": \"https://github.com/apache/couchdb-nano\",\n    \"description\": \"Nano: The official Apache CouchDB library for Node.js\",\n    \"owner\": \"apache\",\n    \"repo\": \"couchdb-nano\"\n  },\n  \"Apache DolphinScheduler\": {\n    \"title\": \"Apache DolphinScheduler\",\n    \"repoName\": \"apache/dolphinscheduler-website\",\n    \"githubUrl\": \"https://github.com/apache/dolphinscheduler-website\",\n    \"description\": \"Apache DolphinScheduler website\",\n    \"owner\": \"apache\",\n    \"repo\": \"dolphinscheduler-website\"\n  },\n  \"Apache Druid Website\": {\n    \"title\": \"Apache Druid Website\",\n    \"repoName\": \"apache/druid-website\",\n    \"githubUrl\": \"https://github.com/apache/druid-website\",\n    \"description\": \"Apache Druid Website Incubating\",\n    \"owner\": \"apache\",\n    \"repo\": \"druid-website\"\n  },\n  \"Apache Dubbo\": {\n    \"title\": \"Apache Dubbo\",\n    \"repoName\": \"apache/dubbo-website\",\n    \"githubUrl\": \"https://github.com/apache/dubbo-website\",\n    \"description\": \"Apache Dubbo documents\",\n    \"owner\": \"apache\",\n    \"repo\": \"dubbo-website\"\n  },\n  \"Apache ECharts\": {\n    \"title\": \"Apache ECharts\",\n    \"repoName\": \"apache/echarts-website\",\n    \"githubUrl\": \"https://github.com/apache/echarts-website\",\n    \"description\": \"Apache ECharts Website\",\n    \"owner\": \"apache\",\n    \"repo\": \"echarts-website\"\n  },\n  \"Apache Flink\": {\n    \"title\": \"Apache Flink\",\n    \"repoName\": \"apache/flink-web\",\n    \"githubUrl\": \"https://github.com/apache/flink-web\",\n    \"description\": \"Apache Flink Website\",\n    \"owner\": \"apache\",\n    \"repo\": \"flink-web\"\n  },\n  \"Apache Guacamole\": {\n    \"title\": \"Apache Guacamole\",\n    \"repoName\": \"apache/guacamole-manual\",\n    \"githubUrl\": \"https://github.com/apache/guacamole-manual\",\n    \"description\": \"Mirror of Apache Guacamole Manual\",\n    \"owner\": \"apache\",\n    \"repo\": \"guacamole-manual\"\n  },\n  \"Apache Hadoop\": {\n    \"title\": \"Apache Hadoop\",\n    \"repoName\": \"apache/hadoop-site\",\n    \"githubUrl\": \"https://github.com/apache/hadoop-site\",\n    \"description\": \"Apache Hadoop Site\",\n    \"owner\": \"apache\",\n    \"repo\": \"hadoop-site\"\n  },\n  \"Apache Hive\": {\n    \"title\": \"Apache Hive\",\n    \"repoName\": \"apache/hive-site\",\n    \"githubUrl\": \"https://github.com/apache/hive-site\",\n    \"description\": \"Apache Hive Website\",\n    \"owner\": \"apache\",\n    \"repo\": \"hive-site\"\n  },\n  \"Apache Kafka\": {\n    \"title\": \"Apache Kafka\",\n    \"repoName\": \"apache/kafka\",\n    \"githubUrl\": \"https://github.com/apache/kafka\",\n    \"description\": \"Mirror of Apache Kafka\",\n    \"owner\": \"apache\",\n    \"repo\": \"kafka\"\n  },\n  \"Apache Lucene\": {\n    \"title\": \"Apache Lucene\",\n    \"repoName\": \"apache/lucene-site\",\n    \"githubUrl\": \"https://github.com/apache/lucene-site\",\n    \"description\": \"Apache Lucene website\",\n    \"owner\": \"apache\",\n    \"repo\": \"lucene-site\"\n  },\n  \"Apache Maven Site\": {\n    \"title\": \"Apache Maven Site\",\n    \"repoName\": \"apache/maven-site\",\n    \"githubUrl\": \"https://github.com/apache/maven-site\",\n    \"description\": \"Apache Maven site\",\n    \"owner\": \"apache\",\n    \"repo\": \"maven-site\"\n  },\n  \"Apache POI\": {\n    \"title\": \"Apache POI\",\n    \"repoName\": \"apache/poi\",\n    \"githubUrl\": \"https://github.com/apache/poi\",\n    \"description\": \"Mirror of Apache POI\",\n    \"owner\": \"apache\",\n    \"repo\": \"poi\"\n  },\n  \"Apache RocketMQ\": {\n    \"title\": \"Apache RocketMQ\",\n    \"repoName\": \"apache/rocketmq-site\",\n    \"githubUrl\": \"https://github.com/apache/rocketmq-site\",\n    \"description\": \"Apache RocketMQ is a cloud native messaging and streaming platform, making it simple to build event-driven applications.\",\n    \"owner\": \"apache\",\n    \"repo\": \"rocketmq-site\"\n  },\n  \"Apache SkyWalking\": {\n    \"title\": \"Apache SkyWalking\",\n    \"repoName\": \"apache/skywalking-website\",\n    \"githubUrl\": \"https://github.com/apache/skywalking-website\",\n    \"description\": \"Apache SkyWalking Website\",\n    \"owner\": \"apache\",\n    \"repo\": \"skywalking-website\"\n  },\n  \"Apache Solr\": {\n    \"title\": \"Apache Solr\",\n    \"repoName\": \"apache/solr\",\n    \"githubUrl\": \"https://github.com/apache/solr\",\n    \"description\": \"Apache Solr open-source search software\",\n    \"owner\": \"apache\",\n    \"repo\": \"solr\"\n  },\n  \"Apache Spark\": {\n    \"title\": \"Apache Spark\",\n    \"repoName\": \"apache/spark-website\",\n    \"githubUrl\": \"https://github.com/apache/spark-website\",\n    \"description\": \"Apache Spark Website\",\n    \"owner\": \"apache\",\n    \"repo\": \"spark-website\"\n  },\n  \"Apache Storm\": {\n    \"title\": \"Apache Storm\",\n    \"repoName\": \"apache/storm-site\",\n    \"githubUrl\": \"https://github.com/apache/storm-site\",\n    \"description\": \"Mirror of Apache storm website Git repo\",\n    \"owner\": \"apache\",\n    \"repo\": \"storm-site\"\n  },\n  \"Apache Struts\": {\n    \"title\": \"Apache Struts\",\n    \"repoName\": \"apache/struts-site\",\n    \"githubUrl\": \"https://github.com/apache/struts-site\",\n    \"description\": \"Mirror of Apache Struts site\",\n    \"owner\": \"apache\",\n    \"repo\": \"struts-site\"\n  },\n  \"Apache TinkerPop\": {\n    \"title\": \"Apache TinkerPop\",\n    \"repoName\": \"apache/tinkerpop\",\n    \"githubUrl\": \"https://github.com/apache/tinkerpop\",\n    \"description\": \"Apache TinkerPop - a graph computing framework\",\n    \"owner\": \"apache\",\n    \"repo\": \"tinkerpop\"\n  },\n  \"Apache Velocity Engine\": {\n    \"title\": \"Apache Velocity Engine\",\n    \"repoName\": \"apache/velocity-engine\",\n    \"githubUrl\": \"https://github.com/apache/velocity-engine\",\n    \"description\": \"Mirror of Apache Velocity Engine\",\n    \"owner\": \"apache\",\n    \"repo\": \"velocity-engine\"\n  },\n  \"ApexCharts.js\": {\n    \"title\": \"ApexCharts.js\",\n    \"repoName\": \"apexcharts/apexcharts.js\",\n    \"githubUrl\": \"https://github.com/apexcharts/apexcharts.js\",\n    \"description\": \"📊 Interactive JavaScript Charts built on SVG\",\n    \"owner\": \"apexcharts\",\n    \"repo\": \"apexcharts.js\"\n  },\n  \"API Platform\": {\n    \"title\": \"API Platform\",\n    \"repoName\": \"api-platform/api-platform\",\n    \"githubUrl\": \"https://github.com/api-platform/api-platform\",\n    \"description\": \"🕸️ Create REST and GraphQL APIs, scaffold Jamstack webapps, stream changes in real-time.\",\n    \"owner\": \"api-platform\",\n    \"repo\": \"api-platform\"\n  },\n  \"Apify\": {\n    \"title\": \"Apify\",\n    \"repoName\": \"apify/apify-docs\",\n    \"githubUrl\": \"https://github.com/apify/apify-docs\",\n    \"description\": \"This project is the home of Apify's documentation.\",\n    \"owner\": \"apify\",\n    \"repo\": \"apify-docs\"\n  },\n  \"Crawlee\": {\n    \"title\": \"Crawlee\",\n    \"repoName\": \"apify/crawlee\",\n    \"githubUrl\": \"https://github.com/apify/crawlee\",\n    \"description\": \"Crawlee—A web scraping and browser automation library for Node.js to build reliable crawlers. In JavaScript and TypeScript. Extract data for AI, LLMs, RAG, or GPTs. Download HTML, PDF, JPG, PNG, and other files from websites. Works with Puppeteer, Playwright, Cheerio, JSDOM, and raw HTTP. Both headful and headless mode. With proxy rotation.\",\n    \"owner\": \"apify\",\n    \"repo\": \"crawlee\"\n  },\n  \"Apollo Client Next.js App Router Integration\": {\n    \"title\": \"Apollo Client Next.js App Router Integration\",\n    \"repoName\": \"apollographql/apollo-client-integrations\",\n    \"githubUrl\": \"https://github.com/apollographql/apollo-client-integrations\",\n    \"description\": \"Apollo Client support for the Next.js App Router\",\n    \"owner\": \"apollographql\",\n    \"repo\": \"apollo-client-integrations\"\n  },\n  \"Sanitize HTML\": {\n    \"title\": \"Sanitize HTML\",\n    \"repoName\": \"apostrophecms/sanitize-html\",\n    \"githubUrl\": \"https://github.com/apostrophecms/sanitize-html\",\n    \"description\": \"Clean up user-submitted HTML, preserving whitelisted elements and whitelisted attributes on a per-element basis. Built on htmlparser2 for speed and tolerance\",\n    \"owner\": \"apostrophecms\",\n    \"repo\": \"sanitize-html\"\n  },\n  \"Polly\": {\n    \"title\": \"Polly\",\n    \"repoName\": \"app-vnext/polly\",\n    \"githubUrl\": \"https://github.com/app-vnext/polly\",\n    \"description\": \"Polly is a .NET resilience and transient-fault-handling library that allows developers to express policies such as Retry, Circuit Breaker, Timeout, Bulkhead Isolation, and Fallback in a fluent and thread-safe manner. From version 6.0.1, Polly targets .NET Standard 1.1 and 2.0+.\",\n    \"owner\": \"app-vnext\",\n    \"repo\": \"polly\"\n  },\n  \"SaaS Boilerplate\": {\n    \"title\": \"SaaS Boilerplate\",\n    \"repoName\": \"apptension/saas-boilerplate\",\n    \"githubUrl\": \"https://github.com/apptension/saas-boilerplate\",\n    \"description\": \"SaaS Boilerplate - Open Source and free SaaS stack that lets you build SaaS products faster in React, Django and AWS. Focus on essential business logic instead of coding repeatable features!\",\n    \"owner\": \"apptension\",\n    \"repo\": \"saas-boilerplate\"\n  },\n  \"Appwrite Node.js SDK\": {\n    \"title\": \"Appwrite Node.js SDK\",\n    \"repoName\": \"appwrite/sdk-for-node\",\n    \"githubUrl\": \"https://github.com/appwrite/sdk-for-node\",\n    \"description\": \"[READ-ONLY] Official Appwrite Node.js SDK 🟢\",\n    \"owner\": \"appwrite\",\n    \"repo\": \"sdk-for-node\"\n  },\n  \"Appwrite React Native SDK\": {\n    \"title\": \"Appwrite React Native SDK\",\n    \"repoName\": \"appwrite/sdk-for-react-native\",\n    \"githubUrl\": \"https://github.com/appwrite/sdk-for-react-native\",\n    \"description\": \"[READ ONLY] Official Appwrite React Native SDK 💙 ⚛︎\",\n    \"owner\": \"appwrite\",\n    \"repo\": \"sdk-for-react-native\"\n  },\n  \"Appwrite Website\": {\n    \"title\": \"Appwrite Website\",\n    \"repoName\": \"appwrite/website.git\",\n    \"githubUrl\": \"https://github.com/appwrite/website.git\",\n    \"description\": \"The Appwrite website, docs and blog 🏠\",\n    \"owner\": \"appwrite\",\n    \"repo\": \"website.git\"\n  },\n  \"Trivy\": {\n    \"title\": \"Trivy\",\n    \"repoName\": \"aquasecurity/trivy\",\n    \"githubUrl\": \"https://github.com/aquasecurity/trivy\",\n    \"description\": \"Find vulnerabilities, misconfigurations, secrets, SBOM in containers, Kubernetes, code repositories, clouds and more\",\n    \"owner\": \"aquasecurity\",\n    \"repo\": \"trivy\"\n  },\n  \"ArangoDB\": {\n    \"title\": \"ArangoDB\",\n    \"repoName\": \"arangodb/arangodb\",\n    \"githubUrl\": \"https://github.com/arangodb/arangodb\",\n    \"description\": \"🥑 ArangoDB is a native multi-model database with flexible data models for documents, graphs, and key-values. Build high performance applications using a convenient SQL-like query language or JavaScript extensions.\",\n    \"owner\": \"arangodb\",\n    \"repo\": \"arangodb\"\n  },\n  \"Arcade AI NodeJS Client\": {\n    \"title\": \"Arcade AI NodeJS Client\",\n    \"repoName\": \"arcadeai/arcade-js\",\n    \"githubUrl\": \"https://github.com/arcadeai/arcade-js\",\n    \"description\": \"Arcade AI NodeJS Client\",\n    \"owner\": \"arcadeai\",\n    \"repo\": \"arcade-js\"\n  },\n  \"Arcjet\": {\n    \"title\": \"Arcjet\",\n    \"repoName\": \"arcjet/arcjet-docs\",\n    \"githubUrl\": \"https://github.com/arcjet/arcjet-docs\",\n    \"description\": \"Arcjet's documentation.\",\n    \"owner\": \"arcjet\",\n    \"repo\": \"arcjet-docs\"\n  },\n  \"Arco Design\": {\n    \"title\": \"Arco Design\",\n    \"repoName\": \"arco-design/arco-design\",\n    \"githubUrl\": \"https://github.com/arco-design/arco-design\",\n    \"description\": \"A comprehensive React UI components library based on Arco Design\",\n    \"owner\": \"arco-design\",\n    \"repo\": \"arco-design\"\n  },\n  \"Arduino\": {\n    \"title\": \"Arduino\",\n    \"repoName\": \"arduino/docs-content\",\n    \"githubUrl\": \"https://github.com/arduino/docs-content\",\n    \"description\": \"Arduino documentation (docs.arduino.cc)\",\n    \"owner\": \"arduino\",\n    \"repo\": \"docs-content\"\n  },\n  \"Argo CD\": {\n    \"title\": \"Argo CD\",\n    \"repoName\": \"argoproj/argo-cd\",\n    \"githubUrl\": \"https://github.com/argoproj/argo-cd\",\n    \"description\": \"Declarative Continuous Deployment for Kubernetes\",\n    \"owner\": \"argoproj\",\n    \"repo\": \"argo-cd\"\n  },\n  \"Ariakit\": {\n    \"title\": \"Ariakit\",\n    \"repoName\": \"ariakit/ariakit\",\n    \"githubUrl\": \"https://github.com/ariakit/ariakit\",\n    \"description\": \"Toolkit with accessible components, styles, and examples for your next web app\",\n    \"owner\": \"ariakit\",\n    \"repo\": \"ariakit\"\n  },\n  \"Arklex\": {\n    \"title\": \"Arklex\",\n    \"repoName\": \"arklexai/agent-first-organization\",\n    \"githubUrl\": \"https://github.com/arklexai/agent-first-organization\",\n    \"description\": \"The official Python library for Arklex framework\",\n    \"owner\": \"arklexai\",\n    \"repo\": \"agent-first-organization\"\n  },\n  \"Arktype\": {\n    \"title\": \"Arktype\",\n    \"repoName\": \"arktypeio/arktype\",\n    \"githubUrl\": \"https://github.com/arktypeio/arktype\",\n    \"description\": \"TypeScript's 1:1 validator, optimized from editor to runtime\",\n    \"owner\": \"arktypeio\",\n    \"repo\": \"arktype\"\n  },\n  \"Einops\": {\n    \"title\": \"Einops\",\n    \"repoName\": \"arogozhnikov/einops\",\n    \"githubUrl\": \"https://github.com/arogozhnikov/einops\",\n    \"description\": \"Flexible and powerful tensor operations for readable and reliable code (for pytorch, jax, TF and others)\",\n    \"owner\": \"arogozhnikov\",\n    \"repo\": \"einops\"\n  },\n  \"Laravel Linkedin\": {\n    \"title\": \"Laravel Linkedin\",\n    \"repoName\": \"artesaos/laravel-linkedin\",\n    \"githubUrl\": \"https://github.com/artesaos/laravel-linkedin\",\n    \"description\": \"Linkedin API integration for Laravel and Lumen 5\",\n    \"owner\": \"artesaos\",\n    \"repo\": \"laravel-linkedin\"\n  },\n  \"MuPDF.js\": {\n    \"title\": \"MuPDF.js\",\n    \"repoName\": \"artifexsoftware/mupdf.js\",\n    \"githubUrl\": \"https://github.com/artifexsoftware/mupdf.js\",\n    \"description\": \"JavaScript bindings for MuPDF\",\n    \"owner\": \"artifexsoftware\",\n    \"repo\": \"mupdf.js\"\n  },\n  \"Pdf2docx\": {\n    \"title\": \"Pdf2docx\",\n    \"repoName\": \"artifexsoftware/pdf2docx\",\n    \"githubUrl\": \"https://github.com/artifexsoftware/pdf2docx\",\n    \"description\": \"Open source Python library for converting PDF to DOCX.\",\n    \"owner\": \"artifexsoftware\",\n    \"repo\": \"pdf2docx\"\n  },\n  \"Artillery\": {\n    \"title\": \"Artillery\",\n    \"repoName\": \"artilleryio/artillery\",\n    \"githubUrl\": \"https://github.com/artilleryio/artillery\",\n    \"description\": \"The complete load testing platform. Everything you need for production-grade load tests. Serverless & distributed. Load test with Playwright. Load test HTTP APIs, GraphQL, WebSocket, and more. Use any Node.js module.\",\n    \"owner\": \"artilleryio\",\n    \"repo\": \"artillery\"\n  },\n  \"Pine Script\": {\n    \"title\": \"Pine Script\",\n    \"repoName\": \"arunkbhaskar/pinescript\",\n    \"githubUrl\": \"https://github.com/arunkbhaskar/pinescript\",\n    \"description\": \"A collection of TradingView Pine Script codes.\",\n    \"owner\": \"arunkbhaskar\",\n    \"repo\": \"pinescript\"\n  },\n  \"ArviZ\": {\n    \"title\": \"ArviZ\",\n    \"repoName\": \"arviz-devs/arviz\",\n    \"githubUrl\": \"https://github.com/arviz-devs/arviz\",\n    \"description\": \"Exploratory analysis of Bayesian models with Python\",\n    \"owner\": \"arviz-devs\",\n    \"repo\": \"arviz\"\n  },\n  \"Sycamore\": {\n    \"title\": \"Sycamore\",\n    \"repoName\": \"sycamore-rs/sycamore\",\n    \"githubUrl\": \"https://github.com/sycamore-rs/sycamore\",\n    \"description\": \"A library for creating reactive web apps in Rust and WebAssembly\",\n    \"owner\": \"sycamore-rs\",\n    \"repo\": \"sycamore\"\n  },\n  \"Node.js\": {\n    \"title\": \"Node.js\",\n    \"repoName\": \"nodejs/nodejs.org\",\n    \"githubUrl\": \"https://github.com/nodejs/nodejs.org\",\n    \"description\": \"The Node.js® Website\",\n    \"owner\": \"nodejs\",\n    \"repo\": \"nodejs.org\"\n  },\n  \"Asana Python Client\": {\n    \"title\": \"Asana Python Client\",\n    \"repoName\": \"asana/python-asana\",\n    \"githubUrl\": \"https://github.com/asana/python-asana\",\n    \"description\": \"Official Python client library for the Asana API v1\",\n    \"owner\": \"asana\",\n    \"repo\": \"python-asana\"\n  },\n  \"Unpic\": {\n    \"title\": \"Unpic\",\n    \"repoName\": \"ascorbic/unpic\",\n    \"githubUrl\": \"https://github.com/ascorbic/unpic\",\n    \"description\": \"Universal image CDN translator\",\n    \"owner\": \"ascorbic\",\n    \"repo\": \"unpic\"\n  },\n  \"Aserto\": {\n    \"title\": \"Aserto\",\n    \"repoName\": \"aserto-dev/aserto-docs\",\n    \"githubUrl\": \"https://github.com/aserto-dev/aserto-docs\",\n    \"description\": \"Public documentation for Aserto, hosted on docs.aserto.com\",\n    \"owner\": \"aserto-dev\",\n    \"repo\": \"aserto-docs\"\n  },\n  \"Ash\": {\n    \"title\": \"Ash\",\n    \"repoName\": \"ash-project/ash\",\n    \"githubUrl\": \"https://github.com/ash-project/ash\",\n    \"description\": \"A declarative, extensible framework for building Elixir applications.\",\n    \"owner\": \"ash-project\",\n    \"repo\": \"ash\"\n  },\n  \"Ash GraphQL\": {\n    \"title\": \"Ash GraphQL\",\n    \"repoName\": \"ash-project/ash_graphql\",\n    \"githubUrl\": \"https://github.com/ash-project/ash_graphql\",\n    \"description\": \"The extension for building GraphQL APIs with Ash\",\n    \"owner\": \"ash-project\",\n    \"repo\": \"ash_graphql\"\n  },\n  \"Ash Json API\": {\n    \"title\": \"Ash Json API\",\n    \"repoName\": \"ash-project/ash_json_api\",\n    \"githubUrl\": \"https://github.com/ash-project/ash_json_api\",\n    \"description\": \"The JSON:API extension for the Ash Framework\",\n    \"owner\": \"ash-project\",\n    \"repo\": \"ash_json_api\"\n  },\n  \"Ash Phoenix\": {\n    \"title\": \"Ash Phoenix\",\n    \"repoName\": \"ash-project/ash_phoenix\",\n    \"githubUrl\": \"https://github.com/ash-project/ash_phoenix\",\n    \"description\": \"Utilities for integrating Ash and Phoenix\",\n    \"owner\": \"ash-project\",\n    \"repo\": \"ash_phoenix\"\n  },\n  \"Ash Postgres\": {\n    \"title\": \"Ash Postgres\",\n    \"repoName\": \"ash-project/ash_postgres\",\n    \"githubUrl\": \"https://github.com/ash-project/ash_postgres\",\n    \"description\": \"The PostgreSQL data layer for Ash Framework\",\n    \"owner\": \"ash-project\",\n    \"repo\": \"ash_postgres\"\n  },\n  \"Reactor\": {\n    \"title\": \"Reactor\",\n    \"repoName\": \"ash-project/reactor\",\n    \"githubUrl\": \"https://github.com/ash-project/reactor\",\n    \"description\": \"Reactor is a dynamic, concurrent, dependency resolving saga orchestrator.\",\n    \"owner\": \"ash-project\",\n    \"repo\": \"reactor\"\n  },\n  \"Ash Spark\": {\n    \"title\": \"Ash Spark\",\n    \"repoName\": \"ash-project/spark\",\n    \"githubUrl\": \"https://github.com/ash-project/spark\",\n    \"description\": \"Tooling for building DSLs in Elixir\",\n    \"owner\": \"ash-project\",\n    \"repo\": \"spark\"\n  },\n  \"GPT Researcher\": {\n    \"title\": \"GPT Researcher\",\n    \"repoName\": \"assafelovic/gpt-researcher\",\n    \"githubUrl\": \"https://github.com/assafelovic/gpt-researcher\",\n    \"description\": \"LLM based autonomous agent that conducts deep local and web research on any topic and generates a long report with citations.\",\n    \"owner\": \"assafelovic\",\n    \"repo\": \"gpt-researcher\"\n  },\n  \"AssemblyAI Node SDK\": {\n    \"title\": \"AssemblyAI Node SDK\",\n    \"repoName\": \"assemblyai/assemblyai-node-sdk\",\n    \"githubUrl\": \"https://github.com/assemblyai/assemblyai-node-sdk\",\n    \"description\": \"The AssemblyAI JavaScript SDK provides an easy-to-use interface for interacting with the AssemblyAI API, which supports async and real-time transcription, audio intelligence models, as well as the latest LeMUR models.\",\n    \"owner\": \"assemblyai\",\n    \"repo\": \"assemblyai-node-sdk\"\n  },\n  \"Assistant UI\": {\n    \"title\": \"Assistant UI\",\n    \"repoName\": \"assistant-ui/assistant-ui\",\n    \"githubUrl\": \"https://github.com/assistant-ui/assistant-ui\",\n    \"description\": \"Typescript/React Library for AI Chat💬🚀\",\n    \"owner\": \"assistant-ui\",\n    \"repo\": \"assistant-ui\"\n  },\n  \"Ast-Grep\": {\n    \"title\": \"Ast-Grep\",\n    \"repoName\": \"ast-grep/ast-grep.github.io\",\n    \"githubUrl\": \"https://github.com/ast-grep/ast-grep.github.io\",\n    \"description\": \"Website for ast-grep!\",\n    \"owner\": \"ast-grep\",\n    \"repo\": \"ast-grep.github.io\"\n  },\n  \"No Frills Magento Layout\": {\n    \"title\": \"No Frills Magento Layout\",\n    \"repoName\": \"astorm/magento-layout-no-frills\",\n    \"githubUrl\": \"https://github.com/astorm/magento-layout-no-frills\",\n    \"description\": \"Repo for the Creative Commons published No Frills Magento Layout\",\n    \"owner\": \"astorm\",\n    \"repo\": \"magento-layout-no-frills\"\n  },\n  \"Ruff\": {\n    \"title\": \"Ruff\",\n    \"repoName\": \"astral-sh/ruff\",\n    \"githubUrl\": \"https://github.com/astral-sh/ruff\",\n    \"description\": \"An extremely fast Python linter and code formatter, written in Rust.\",\n    \"owner\": \"astral-sh\",\n    \"repo\": \"ruff\"\n  },\n  \"Uv\": {\n    \"title\": \"Uv\",\n    \"repoName\": \"astral-sh/uv\",\n    \"githubUrl\": \"https://github.com/astral-sh/uv\",\n    \"description\": \"An extremely fast Python package and project manager, written in Rust.\",\n    \"owner\": \"astral-sh\",\n    \"repo\": \"uv\"\n  },\n  \"AsyncAPI Specification\": {\n    \"title\": \"AsyncAPI Specification\",\n    \"repoName\": \"asyncapi/spec\",\n    \"githubUrl\": \"https://github.com/asyncapi/spec\",\n    \"description\": \"The AsyncAPI specification allows you to create machine-readable definitions of your asynchronous APIs.\",\n    \"owner\": \"asyncapi\",\n    \"repo\": \"spec\"\n  },\n  \"Nuxt Auth Utils\": {\n    \"title\": \"Nuxt Auth Utils\",\n    \"repoName\": \"atinux/nuxt-auth-utils\",\n    \"githubUrl\": \"https://github.com/atinux/nuxt-auth-utils\",\n    \"description\": \"Add Authentication to Nuxt applications with secured & sealed cookies sessions.\",\n    \"owner\": \"atinux\",\n    \"repo\": \"nuxt-auth-utils\"\n  },\n  \"React Resource Router\": {\n    \"title\": \"React Resource Router\",\n    \"repoName\": \"atlassian-labs/react-resource-router\",\n    \"githubUrl\": \"https://github.com/atlassian-labs/react-resource-router\",\n    \"description\": \"Configuration driven routing solution for React SPAs that manages route matching, data fetching and progressive rendering\",\n    \"owner\": \"atlassian-labs\",\n    \"repo\": \"react-resource-router\"\n  },\n  \"Pragmatic Drag and Drop\": {\n    \"title\": \"Pragmatic Drag and Drop\",\n    \"repoName\": \"atlassian/pragmatic-drag-and-drop\",\n    \"githubUrl\": \"https://github.com/atlassian/pragmatic-drag-and-drop\",\n    \"description\": \"Fast drag and drop for any experience on any tech stack\",\n    \"owner\": \"atlassian\",\n    \"repo\": \"pragmatic-drag-and-drop\"\n  },\n  \"Semantic Router\": {\n    \"title\": \"Semantic Router\",\n    \"repoName\": \"aurelio-labs/semantic-router\",\n    \"githubUrl\": \"https://github.com/aurelio-labs/semantic-router\",\n    \"description\": \"Superfast AI decision making and intelligent processing of multi-modal data.\",\n    \"owner\": \"aurelio-labs\",\n    \"repo\": \"semantic-router\"\n  },\n  \"Auth0 Vue\": {\n    \"title\": \"Auth0 Vue\",\n    \"repoName\": \"auth0/auth0-vue\",\n    \"githubUrl\": \"https://github.com/auth0/auth0-vue\",\n    \"description\": \"Auth0 authentication SDK for Vue.js apps\",\n    \"owner\": \"auth0\",\n    \"repo\": \"auth0-vue\"\n  },\n  \"Next.js Auth0\": {\n    \"title\": \"Next.js Auth0\",\n    \"repoName\": \"auth0/nextjs-auth0\",\n    \"githubUrl\": \"https://github.com/auth0/nextjs-auth0\",\n    \"description\": \"Next.js SDK for signing in with Auth0\",\n    \"owner\": \"auth0\",\n    \"repo\": \"nextjs-auth0\"\n  },\n  \"Authelia\": {\n    \"title\": \"Authelia\",\n    \"repoName\": \"authelia/authelia\",\n    \"githubUrl\": \"https://github.com/authelia/authelia\",\n    \"description\": \"The Single Sign-On Multi-Factor portal for web apps\",\n    \"owner\": \"authelia\",\n    \"repo\": \"authelia\"\n  },\n  \"APS SDK Nodejs\": {\n    \"title\": \"APS SDK Nodejs\",\n    \"repoName\": \"autodesk-platform-services/aps-sdk-node\",\n    \"githubUrl\": \"https://github.com/autodesk-platform-services/aps-sdk-node\",\n    \"description\": \"The official APS SDK for Nodejs\",\n    \"owner\": \"autodesk-platform-services\",\n    \"repo\": \"aps-sdk-node\"\n  },\n  \"AutoFixture\": {\n    \"title\": \"AutoFixture\",\n    \"repoName\": \"autofixture/autofixture\",\n    \"githubUrl\": \"https://github.com/autofixture/autofixture\",\n    \"description\": \"AutoFixture is an open source library for .NET designed to minimize the 'Arrange' phase of your unit tests in order to maximize maintainability. Its primary goal is to allow developers to focus on what is being tested rather than how to setup the test scenario, by making it easier to create object graphs containing test data.\",\n    \"owner\": \"autofixture\",\n    \"repo\": \"autofixture\"\n  },\n  \"AutoGluon\": {\n    \"title\": \"AutoGluon\",\n    \"repoName\": \"autogluon/autogluon\",\n    \"githubUrl\": \"https://github.com/autogluon/autogluon\",\n    \"description\": \"Fast and Accurate ML in 3 Lines of Code\",\n    \"owner\": \"autogluon\",\n    \"repo\": \"autogluon\"\n  },\n  \"AutoHotkey\": {\n    \"title\": \"AutoHotkey\",\n    \"repoName\": \"autohotkey/autohotkeydocs\",\n    \"githubUrl\": \"https://github.com/autohotkey/autohotkeydocs\",\n    \"description\": \"Documentation for AutoHotkey\",\n    \"owner\": \"autohotkey\",\n    \"repo\": \"autohotkeydocs\"\n  },\n  \"AutoMapper\": {\n    \"title\": \"AutoMapper\",\n    \"repoName\": \"automapper/automapper\",\n    \"githubUrl\": \"https://github.com/automapper/automapper\",\n    \"description\": \"A convention-based object-object mapper in .NET. \",\n    \"owner\": \"automapper\",\n    \"repo\": \"automapper\"\n  },\n  \"Mongoose\": {\n    \"title\": \"Mongoose\",\n    \"repoName\": \"automattic/mongoose\",\n    \"githubUrl\": \"https://github.com/automattic/mongoose\",\n    \"description\": \"MongoDB object modeling designed to work in an asynchronous environment.\",\n    \"owner\": \"automattic\",\n    \"repo\": \"mongoose\"\n  },\n  \"Pydoll\": {\n    \"title\": \"Pydoll\",\n    \"repoName\": \"autoscrape-labs/pydoll\",\n    \"githubUrl\": \"https://github.com/autoscrape-labs/pydoll\",\n    \"description\": \"Pydoll is a library for automating chromium-based browsers without a WebDriver, offering realistic interactions. \",\n    \"owner\": \"autoscrape-labs\",\n    \"repo\": \"pydoll\"\n  },\n  \"Avalonia\": {\n    \"title\": \"Avalonia\",\n    \"repoName\": \"avaloniaui/avalonia\",\n    \"githubUrl\": \"https://github.com/avaloniaui/avalonia\",\n    \"description\": \"Develop Desktop, Embedded, Mobile and WebAssembly apps with C# and XAML. The most popular .NET UI client technology\",\n    \"owner\": \"avaloniaui\",\n    \"repo\": \"avalonia\"\n  },\n  \"AWS Amplify JS\": {\n    \"title\": \"AWS Amplify JS\",\n    \"repoName\": \"aws-amplify/amplify-js\",\n    \"githubUrl\": \"https://github.com/aws-amplify/amplify-js\",\n    \"description\": \"A declarative JavaScript library for application development using cloud services.\",\n    \"owner\": \"aws-amplify\",\n    \"repo\": \"amplify-js\"\n  },\n  \"Powertools for AWS Lambda (Python)\": {\n    \"title\": \"Powertools for AWS Lambda (Python)\",\n    \"repoName\": \"aws-powertools/powertools-lambda-python\",\n    \"githubUrl\": \"https://github.com/aws-powertools/powertools-lambda-python\",\n    \"description\": \"A developer toolkit to implement Serverless best practices and increase developer velocity.\",\n    \"owner\": \"aws-powertools\",\n    \"repo\": \"powertools-lambda-python\"\n  },\n  \"Amazon Textract Textractor\": {\n    \"title\": \"Amazon Textract Textractor\",\n    \"repoName\": \"aws-samples/amazon-textract-textractor\",\n    \"githubUrl\": \"https://github.com/aws-samples/amazon-textract-textractor\",\n    \"description\": \"Analyze documents with Amazon Textract and generate output in multiple formats.\",\n    \"owner\": \"aws-samples\",\n    \"repo\": \"amazon-textract-textractor\"\n  },\n  \"AWS Advanced JDBC Wrapper\": {\n    \"title\": \"AWS Advanced JDBC Wrapper\",\n    \"repoName\": \"aws/aws-advanced-jdbc-wrapper\",\n    \"githubUrl\": \"https://github.com/aws/aws-advanced-jdbc-wrapper\",\n    \"description\": \"The Amazon Web Services JDBC Driver has been redesigned as an advanced JDBC wrapper. This wrapper is complementary to and extends the functionality of an existing JDBC driver to help an application take advantage of the features of clustered databases such as Amazon Aurora.\",\n    \"owner\": \"aws\",\n    \"repo\": \"aws-advanced-jdbc-wrapper\"\n  },\n  \"AWS Cloud Development Kit\": {\n    \"title\": \"AWS Cloud Development Kit\",\n    \"repoName\": \"aws/aws-cdk\",\n    \"githubUrl\": \"https://github.com/aws/aws-cdk\",\n    \"description\": \"The AWS Cloud Development Kit is a framework for defining cloud infrastructure in code\",\n    \"owner\": \"aws\",\n    \"repo\": \"aws-cdk\"\n  },\n  \"AWS SDK for Go V2\": {\n    \"title\": \"AWS SDK for Go V2\",\n    \"repoName\": \"aws/aws-sdk-go-v2\",\n    \"githubUrl\": \"https://github.com/aws/aws-sdk-go-v2\",\n    \"description\": \"AWS SDK for the Go programming language. \",\n    \"owner\": \"aws\",\n    \"repo\": \"aws-sdk-go-v2\"\n  },\n  \"AWS SDK for JavaScript\": {\n    \"title\": \"AWS SDK for JavaScript\",\n    \"repoName\": \"aws/aws-sdk-js-v3\",\n    \"githubUrl\": \"https://github.com/aws/aws-sdk-js-v3\",\n    \"description\": \"Modularized AWS SDK for JavaScript.\",\n    \"owner\": \"aws\",\n    \"repo\": \"aws-sdk-js-v3\"\n  },\n  \"AWS SDK for .NET\": {\n    \"title\": \"AWS SDK for .NET\",\n    \"repoName\": \"aws/aws-sdk-net\",\n    \"githubUrl\": \"https://github.com/aws/aws-sdk-net\",\n    \"description\": \"The official AWS SDK for .NET. For more information on the AWS SDK for .NET, see our web site:\",\n    \"owner\": \"aws\",\n    \"repo\": \"aws-sdk-net\"\n  },\n  \"Karpenter AWS Provider\": {\n    \"title\": \"Karpenter AWS Provider\",\n    \"repoName\": \"aws/karpenter-provider-aws\",\n    \"githubUrl\": \"https://github.com/aws/karpenter-provider-aws\",\n    \"description\": \"Karpenter is a Kubernetes Node Autoscaler built for flexibility, performance, and simplicity.\",\n    \"owner\": \"aws\",\n    \"repo\": \"karpenter-provider-aws\"\n  },\n  \"AWS SDKs\": {\n    \"title\": \"AWS SDKs\",\n    \"repoName\": \"awsdocs/aws-doc-sdk-examples\",\n    \"githubUrl\": \"https://github.com/awsdocs/aws-doc-sdk-examples\",\n    \"description\": \"Welcome to the AWS Code Examples Repository.  This repo contains code examples used in the AWS documentation, AWS SDK Developer Guides, and more. For more information, see the Readme.md file below.\",\n    \"owner\": \"awsdocs\",\n    \"repo\": \"aws-doc-sdk-examples\"\n  },\n  \"AWS Lambda Rust Runtime\": {\n    \"title\": \"AWS Lambda Rust Runtime\",\n    \"repoName\": \"awslabs/aws-lambda-rust-runtime\",\n    \"githubUrl\": \"https://github.com/awslabs/aws-lambda-rust-runtime\",\n    \"description\": \"A Rust runtime for AWS Lambda\",\n    \"owner\": \"awslabs\",\n    \"repo\": \"aws-lambda-rust-runtime\"\n  },\n  \"AWS SDK for Rust\": {\n    \"title\": \"AWS SDK for Rust\",\n    \"repoName\": \"awslabs/aws-sdk-rust\",\n    \"githubUrl\": \"https://github.com/awslabs/aws-sdk-rust\",\n    \"description\": \"AWS SDK for the Rust Programming Language\",\n    \"owner\": \"awslabs\",\n    \"repo\": \"aws-sdk-rust\"\n  },\n  \"Spring Cloud AWS\": {\n    \"title\": \"Spring Cloud AWS\",\n    \"repoName\": \"awspring/spring-cloud-aws\",\n    \"githubUrl\": \"https://github.com/awspring/spring-cloud-aws\",\n    \"description\": \"The New Home for Spring Cloud AWS\",\n    \"owner\": \"awspring\",\n    \"repo\": \"spring-cloud-aws\"\n  },\n  \"Parsr\": {\n    \"title\": \"Parsr\",\n    \"repoName\": \"axa-group/parsr\",\n    \"githubUrl\": \"https://github.com/axa-group/parsr\",\n    \"description\": \"Transforms PDF, Documents and Images into Enriched Structured Data\",\n    \"owner\": \"axa-group\",\n    \"repo\": \"parsr\"\n  },\n  \"Liburing\": {\n    \"title\": \"Liburing\",\n    \"repoName\": \"axboe/liburing\",\n    \"githubUrl\": \"https://github.com/axboe/liburing\",\n    \"description\": \"Library providing helpers for the Linux kernel io_uring support\",\n    \"owner\": \"axboe\",\n    \"repo\": \"liburing\"\n  },\n  \"Axiom\": {\n    \"title\": \"Axiom\",\n    \"repoName\": \"axiomhq/docs\",\n    \"githubUrl\": \"https://github.com/axiomhq/docs\",\n    \"description\": \"Axiom Documentation\",\n    \"owner\": \"axiomhq\",\n    \"repo\": \"docs\"\n  },\n  \"Axios\": {\n    \"title\": \"Axios\",\n    \"repoName\": \"axios/axios-docs\",\n    \"githubUrl\": \"https://github.com/axios/axios-docs\",\n    \"description\": \"Official documentation for the axios HTTP library\",\n    \"owner\": \"axios\",\n    \"repo\": \"axios-docs\"\n  },\n  \"React Pro Sidebar\": {\n    \"title\": \"React Pro Sidebar\",\n    \"repoName\": \"azouaoui-med/react-pro-sidebar\",\n    \"githubUrl\": \"https://github.com/azouaoui-med/react-pro-sidebar\",\n    \"description\": \"React Pro Sidebar provides a set of components for creating high level and customizable side navigation\",\n    \"owner\": \"azouaoui-med\",\n    \"repo\": \"react-pro-sidebar\"\n  },\n  \"Azure MCP Server\": {\n    \"title\": \"Azure MCP Server\",\n    \"repoName\": \"azure/azure-mcp\",\n    \"githubUrl\": \"https://github.com/azure/azure-mcp\",\n    \"description\": \"This repository is for development of the Azure MCP Server, bringing the power of Azure to your agents.\",\n    \"owner\": \"azure\",\n    \"repo\": \"azure-mcp\"\n  },\n  \"Azure SDK for Go\": {\n    \"title\": \"Azure SDK for Go\",\n    \"repoName\": \"azure/azure-sdk-for-go\",\n    \"githubUrl\": \"https://github.com/azure/azure-sdk-for-go\",\n    \"description\": \"This repository is for active development of the Azure SDK for Go. For consumers of the SDK we recommend visiting our public developer docs at:\",\n    \"owner\": \"azure\",\n    \"repo\": \"azure-sdk-for-go\"\n  },\n  \"Azure SDK for Java\": {\n    \"title\": \"Azure SDK for Java\",\n    \"repoName\": \"azure/azure-sdk-for-java\",\n    \"githubUrl\": \"https://github.com/azure/azure-sdk-for-java\",\n    \"description\": \"This repository is for active development of the Azure SDK for Java. For consumers of the SDK we recommend visiting our public developer docs at https://docs.microsoft.com/java/azure/ or our versioned developer docs at https://azure.github.io/azure-sdk-for-java. \",\n    \"owner\": \"azure\",\n    \"repo\": \"azure-sdk-for-java\"\n  },\n  \"Azure SDK for .NET\": {\n    \"title\": \"Azure SDK for .NET\",\n    \"repoName\": \"azure/azure-sdk-for-net\",\n    \"githubUrl\": \"https://github.com/azure/azure-sdk-for-net\",\n    \"description\": \"This repository is for active development of the Azure SDK for .NET. For consumers of the SDK we recommend visiting our public developer docs at https://learn.microsoft.com/dotnet/azure/ or our versioned developer docs at https://azure.github.io/azure-sdk-for-net. \",\n    \"owner\": \"azure\",\n    \"repo\": \"azure-sdk-for-net\"\n  },\n  \"Microsoft Authentication Library for JS\": {\n    \"title\": \"Microsoft Authentication Library for JS\",\n    \"repoName\": \"azuread/microsoft-authentication-library-for-js\",\n    \"githubUrl\": \"https://github.com/azuread/microsoft-authentication-library-for-js\",\n    \"description\": \"Microsoft Authentication Library (MSAL) for JS\",\n    \"owner\": \"azuread\",\n    \"repo\": \"microsoft-authentication-library-for-js\"\n  },\n  \"Azurelib\": {\n    \"title\": \"Azurelib\",\n    \"repoName\": \"azuredoom/azurelib\",\n    \"githubUrl\": \"https://github.com/azuredoom/azurelib\",\n    \"description\": \"Based off Geckolib but now just for my own needs. \",\n    \"owner\": \"azuredoom\",\n    \"repo\": \"azurelib\"\n  },\n  \"Babel\": {\n    \"title\": \"Babel\",\n    \"repoName\": \"babel/website\",\n    \"githubUrl\": \"https://github.com/babel/website\",\n    \"description\": \":globe_with_meridians: The Babel documentation website\",\n    \"owner\": \"babel\",\n    \"repo\": \"website\"\n  },\n  \"Babylon.js\": {\n    \"title\": \"Babylon.js\",\n    \"repoName\": \"babylonjs/documentation\",\n    \"githubUrl\": \"https://github.com/babylonjs/documentation\",\n    \"description\": \"Babylon.js's documentation website\",\n    \"owner\": \"babylonjs\",\n    \"repo\": \"documentation\"\n  },\n  \"Backstage\": {\n    \"title\": \"Backstage\",\n    \"repoName\": \"backstage/backstage\",\n    \"githubUrl\": \"https://github.com/backstage/backstage\",\n    \"description\": \"Backstage is an open framework for building developer portals\",\n    \"owner\": \"backstage\",\n    \"repo\": \"backstage\"\n  },\n  \"Backstage Helm Charts\": {\n    \"title\": \"Backstage Helm Charts\",\n    \"repoName\": \"backstage/charts\",\n    \"githubUrl\": \"https://github.com/backstage/charts\",\n    \"description\": \"Backstage Helm Charts\",\n    \"owner\": \"backstage\",\n    \"repo\": \"charts\"\n  },\n  \"Backstage Community\": {\n    \"title\": \"Backstage Community\",\n    \"repoName\": \"backstage/community\",\n    \"githubUrl\": \"https://github.com/backstage/community\",\n    \"description\": \"All about the Backstage community (Meetups, Sessions etc.)\",\n    \"owner\": \"backstage\",\n    \"repo\": \"community\"\n  },\n  \"Backstage Mkdocs Monorepo Plugin\": {\n    \"title\": \"Backstage Mkdocs Monorepo Plugin\",\n    \"repoName\": \"backstage/mkdocs-monorepo-plugin\",\n    \"githubUrl\": \"https://github.com/backstage/mkdocs-monorepo-plugin\",\n    \"description\": \"✚ Build multiple documentation folders in a single Mkdocs. Designed for large codebases.\",\n    \"owner\": \"backstage\",\n    \"repo\": \"mkdocs-monorepo-plugin\"\n  },\n  \"Block Theme\": {\n    \"title\": \"Block Theme\",\n    \"repoName\": \"bacoords/block-theme\",\n    \"githubUrl\": \"https://github.com/bacoords/block-theme\",\n    \"description\": \"A starter block theme for modern WordPress developers.\",\n    \"owner\": \"bacoords\",\n    \"repo\": \"block-theme\"\n  },\n  \"Sails\": {\n    \"title\": \"Sails\",\n    \"repoName\": \"balderdashy/sails\",\n    \"githubUrl\": \"https://github.com/balderdashy/sails\",\n    \"description\": \"Realtime MVC Framework for Node.js\",\n    \"owner\": \"balderdashy\",\n    \"repo\": \"sails\"\n  },\n  \"Barter RS\": {\n    \"title\": \"Barter RS\",\n    \"repoName\": \"barter-rs/barter-rs\",\n    \"githubUrl\": \"https://github.com/barter-rs/barter-rs\",\n    \"description\": \"Open-source Rust framework for building event-driven live-trading & backtesting systems\",\n    \"owner\": \"barter-rs\",\n    \"repo\": \"barter-rs\"\n  },\n  \"Base MCP\": {\n    \"title\": \"Base MCP\",\n    \"repoName\": \"base/base-mcp\",\n    \"githubUrl\": \"https://github.com/base/base-mcp\",\n    \"description\": \"A Model Context Protocol (MCP) server that provides onchain tools for LLMs, allowing them to interact with the Base network and Coinbase API.\",\n    \"owner\": \"base\",\n    \"repo\": \"base-mcp\"\n  },\n  \"Commerce Toolkit\": {\n    \"title\": \"Commerce Toolkit\",\n    \"repoName\": \"basementstudio/commerce-toolkit\",\n    \"githubUrl\": \"https://github.com/basementstudio/commerce-toolkit\",\n    \"description\": \"Ship better storefronts 🛍\",\n    \"owner\": \"basementstudio\",\n    \"repo\": \"commerce-toolkit\"\n  },\n  \"Scrollytelling\": {\n    \"title\": \"Scrollytelling\",\n    \"repoName\": \"basementstudio/scrollytelling\",\n    \"githubUrl\": \"https://github.com/basementstudio/scrollytelling\",\n    \"description\": \"A library for creating Scrollytelling animations, powered by React & GSAP.\",\n    \"owner\": \"basementstudio\",\n    \"repo\": \"scrollytelling\"\n  },\n  \"Basic Memory\": {\n    \"title\": \"Basic Memory\",\n    \"repoName\": \"basicmachines-co/basic-memory\",\n    \"githubUrl\": \"https://github.com/basicmachines-co/basic-memory\",\n    \"description\": \"Basic Memory is a knowledge management system that allows you to build a persistent semantic graph from conversations with AI assistants. All knowledge is stored in standard Markdown files on your computer, giving you full control and ownership of your data. Integrates directly with Obsidan.md\",\n    \"owner\": \"basicmachines-co\",\n    \"repo\": \"basic-memory\"\n  },\n  \"Adonis Attachment\": {\n    \"title\": \"Adonis Attachment\",\n    \"repoName\": \"batosai/adonis-attachment\",\n    \"githubUrl\": \"https://github.com/batosai/adonis-attachment\",\n    \"description\": \"\",\n    \"owner\": \"batosai\",\n    \"repo\": \"adonis-attachment\"\n  },\n  \"Bats Core\": {\n    \"title\": \"Bats Core\",\n    \"repoName\": \"bats-core/bats-core\",\n    \"githubUrl\": \"https://github.com/bats-core/bats-core\",\n    \"description\": \"Bash Automated Testing System\",\n    \"owner\": \"bats-core\",\n    \"repo\": \"bats-core\"\n  },\n  \"Bazel\": {\n    \"title\": \"Bazel\",\n    \"repoName\": \"bazelbuild/bazel-website\",\n    \"githubUrl\": \"https://github.com/bazelbuild/bazel-website\",\n    \"description\": \"Website for Bazel, a fast, scalable, multi-language and extensible build system\",\n    \"owner\": \"bazelbuild\",\n    \"repo\": \"bazel-website\"\n  },\n  \"Vue Flow\": {\n    \"title\": \"Vue Flow\",\n    \"repoName\": \"bcakmakoglu/vue-flow\",\n    \"githubUrl\": \"https://github.com/bcakmakoglu/vue-flow\",\n    \"description\": \"A highly customizable Flowchart component for Vue 3. Features seamless zoom & pan 🔎, additional components like a Minimap 🗺 and utilities to interact with state and graph.\",\n    \"owner\": \"bcakmakoglu\",\n    \"repo\": \"vue-flow\"\n  },\n  \"Bogus\": {\n    \"title\": \"Bogus\",\n    \"repoName\": \"bchavez/bogus\",\n    \"githubUrl\": \"https://github.com/bchavez/bogus\",\n    \"description\": \":card_index: A simple fake data generator for C#, F#, and VB.NET. Based on and ported from the famed faker.js.\",\n    \"owner\": \"bchavez\",\n    \"repo\": \"bogus\"\n  },\n  \"CodeIgniter\": {\n    \"title\": \"CodeIgniter\",\n    \"repoName\": \"codeigniter4/codeigniter4\",\n    \"githubUrl\": \"https://github.com/codeigniter4/codeigniter4\",\n    \"description\": \"Open Source PHP Framework (originally from EllisLab)\",\n    \"owner\": \"codeigniter4\",\n    \"repo\": \"codeigniter4\"\n  },\n  \"Beam Cloud Beta9\": {\n    \"title\": \"Beam Cloud Beta9\",\n    \"repoName\": \"beam-cloud/beta9\",\n    \"githubUrl\": \"https://github.com/beam-cloud/beta9\",\n    \"description\": \"Run serverless GPU workloads with fast cold starts on bare-metal servers, anywhere in the world\",\n    \"owner\": \"beam-cloud\",\n    \"repo\": \"beta9\"\n  },\n  \"Beam Cloud Examples\": {\n    \"title\": \"Beam Cloud Examples\",\n    \"repoName\": \"beam-cloud/examples\",\n    \"githubUrl\": \"https://github.com/beam-cloud/examples\",\n    \"description\": \"Examples for beam.cloud\",\n    \"owner\": \"beam-cloud\",\n    \"repo\": \"examples\"\n  },\n  \"Beanie\": {\n    \"title\": \"Beanie\",\n    \"repoName\": \"beanieodm/beanie\",\n    \"githubUrl\": \"https://github.com/beanieodm/beanie\",\n    \"description\": \"Asynchronous Python ODM for MongoDB\",\n    \"owner\": \"beanieodm\",\n    \"repo\": \"beanie\"\n  },\n  \"Beartype\": {\n    \"title\": \"Beartype\",\n    \"repoName\": \"beartype/beartype\",\n    \"githubUrl\": \"https://github.com/beartype/beartype\",\n    \"description\": \"Unbearably fast near-real-time hybrid runtime-static type-checking in pure Python.\",\n    \"owner\": \"beartype\",\n    \"repo\": \"beartype\"\n  },\n  \"Bee Queue\": {\n    \"title\": \"Bee Queue\",\n    \"repoName\": \"bee-queue/bee-queue\",\n    \"githubUrl\": \"https://github.com/bee-queue/bee-queue\",\n    \"description\": \"A simple, fast, robust job/task queue for Node.js, backed by Redis.\",\n    \"owner\": \"bee-queue\",\n    \"repo\": \"bee-queue\"\n  },\n  \"Beercss\": {\n    \"title\": \"Beercss\",\n    \"repoName\": \"beercss/beercss\",\n    \"githubUrl\": \"https://github.com/beercss/beercss\",\n    \"description\": \"Build material design interfaces in record time... without stress for devs... 🍺💛\",\n    \"owner\": \"beercss\",\n    \"repo\": \"beercss\"\n  },\n  \"Better Call\": {\n    \"title\": \"Better Call\",\n    \"repoName\": \"bekacru/better-call\",\n    \"githubUrl\": \"https://github.com/bekacru/better-call\",\n    \"description\": \"a tiny web framework for typescript\",\n    \"owner\": \"bekacru\",\n    \"repo\": \"better-call\"\n  },\n  \"Better Fetch\": {\n    \"title\": \"Better Fetch\",\n    \"repoName\": \"bekacru/better-fetch\",\n    \"githubUrl\": \"https://github.com/bekacru/better-fetch\",\n    \"description\": \"Advanced fetch wrapper for typescript\",\n    \"owner\": \"bekacru\",\n    \"repo\": \"better-fetch\"\n  },\n  \"Dwarf Fortress AI\": {\n    \"title\": \"Dwarf Fortress AI\",\n    \"repoName\": \"benlubar/df-ai\",\n    \"githubUrl\": \"https://github.com/benlubar/df-ai\",\n    \"description\": \"Dwarf Fortress + Artificial Intelligence\",\n    \"owner\": \"benlubar\",\n    \"repo\": \"df-ai\"\n  },\n  \"ComfyUI Deploy\": {\n    \"title\": \"ComfyUI Deploy\",\n    \"repoName\": \"bennykok/comfyui-deploy\",\n    \"githubUrl\": \"https://github.com/bennykok/comfyui-deploy\",\n    \"description\": \"An open source `vercel` like deployment platform for Comfy UI\",\n    \"owner\": \"bennykok\",\n    \"repo\": \"comfyui-deploy\"\n  },\n  \"Litellm\": {\n    \"title\": \"Litellm\",\n    \"repoName\": \"berriai/litellm\",\n    \"githubUrl\": \"https://github.com/berriai/litellm\",\n    \"description\": \"Python SDK, Proxy Server (LLM Gateway) to call 100+ LLM APIs in OpenAI format - [Bedrock, Azure, OpenAI, VertexAI, Cohere, Anthropic, Sagemaker, HuggingFace, Replicate, Groq]\",\n    \"owner\": \"berriai\",\n    \"repo\": \"litellm\"\n  },\n  \"Better Auth\": {\n    \"title\": \"Better Auth\",\n    \"repoName\": \"better-auth/better-auth\",\n    \"githubUrl\": \"https://github.com/better-auth/better-auth\",\n    \"description\": \"The most comprehensive authentication framework for TypeScript\",\n    \"owner\": \"better-auth\",\n    \"repo\": \"better-auth\"\n  },\n  \"Bevy\": {\n    \"title\": \"Bevy\",\n    \"repoName\": \"bevyengine/bevy\",\n    \"githubUrl\": \"https://github.com/bevyengine/bevy\",\n    \"description\": \"A refreshingly simple data-driven game engine built in Rust\",\n    \"owner\": \"bevyengine\",\n    \"repo\": \"bevy\"\n  },\n  \"Svelte Google Maps\": {\n    \"title\": \"Svelte Google Maps\",\n    \"repoName\": \"beyonk-adventures/svelte-googlemaps\",\n    \"githubUrl\": \"https://github.com/beyonk-adventures/svelte-googlemaps\",\n    \"description\": \"Svelte Google Maps Components\",\n    \"owner\": \"beyonk-adventures\",\n    \"repo\": \"svelte-googlemaps\"\n  },\n  \"Filament Shield\": {\n    \"title\": \"Filament Shield\",\n    \"repoName\": \"bezhansalleh/filament-shield\",\n    \"githubUrl\": \"https://github.com/bezhansalleh/filament-shield\",\n    \"description\": \"The easiest and most intuitive way to add access management to your Filament Panel; Resources, Pages & Widgets through `spatie/laravel-permission`\",\n    \"owner\": \"bezhansalleh\",\n    \"repo\": \"filament-shield\"\n  },\n  \"BitGraph\": {\n    \"title\": \"BitGraph\",\n    \"repoName\": \"bgamer50/bitgraph\",\n    \"githubUrl\": \"https://github.com/bgamer50/bitgraph\",\n    \"description\": \"BitGraph: A C++ Backend for the Gremlin Traversal Language with GPU Acceleration\",\n    \"owner\": \"bgamer50\",\n    \"repo\": \"bitgraph\"\n  },\n  \"BigBlueButton\": {\n    \"title\": \"BigBlueButton\",\n    \"repoName\": \"bigbluebutton/bigbluebutton\",\n    \"githubUrl\": \"https://github.com/bigbluebutton/bigbluebutton\",\n    \"description\": \"Complete open source web conferencing system.\",\n    \"owner\": \"bigbluebutton\",\n    \"repo\": \"bigbluebutton\"\n  },\n  \"BigchainDB Driver\": {\n    \"title\": \"BigchainDB Driver\",\n    \"repoName\": \"bigchaindb/bigchaindb-driver\",\n    \"githubUrl\": \"https://github.com/bigchaindb/bigchaindb-driver\",\n    \"description\": \"Official Python driver for BigchainDB\",\n    \"owner\": \"bigchaindb\",\n    \"repo\": \"bigchaindb-driver\"\n  },\n  \"Bigcommerce API Python\": {\n    \"title\": \"Bigcommerce API Python\",\n    \"repoName\": \"bigcommerce/bigcommerce-api-python\",\n    \"githubUrl\": \"https://github.com/bigcommerce/bigcommerce-api-python\",\n    \"description\": \"Python client library for Bigcommerce API\",\n    \"owner\": \"bigcommerce\",\n    \"repo\": \"bigcommerce-api-python\"\n  },\n  \"BigCommerce\": {\n    \"title\": \"BigCommerce\",\n    \"repoName\": \"bigcommerce/docs\",\n    \"githubUrl\": \"https://github.com/bigcommerce/docs\",\n    \"description\": \"The open source docs home for BigCommerce, including API specifications in OAS YAML and narrative docs in MDX\",\n    \"owner\": \"bigcommerce\",\n    \"repo\": \"docs\"\n  },\n  \"Hyperscript\": {\n    \"title\": \"Hyperscript\",\n    \"repoName\": \"bigskysoftware/_hyperscript\",\n    \"githubUrl\": \"https://github.com/bigskysoftware/_hyperscript\",\n    \"description\": \"a small scripting language for the web\",\n    \"owner\": \"bigskysoftware\",\n    \"repo\": \"_hyperscript\"\n  },\n  \"HTMX\": {\n    \"title\": \"HTMX\",\n    \"repoName\": \"bigskysoftware/htmx\",\n    \"githubUrl\": \"https://github.com/bigskysoftware/htmx\",\n    \"description\": \"</> htmx - high power tools for HTML\",\n    \"owner\": \"bigskysoftware\",\n    \"repo\": \"htmx\"\n  },\n  \"Binance Futures Connector Python\": {\n    \"title\": \"Binance Futures Connector Python\",\n    \"repoName\": \"binance/binance-futures-connector-python\",\n    \"githubUrl\": \"https://github.com/binance/binance-futures-connector-python\",\n    \"description\": \"Simple python connector to Binance Futures API\",\n    \"owner\": \"binance\",\n    \"repo\": \"binance-futures-connector-python\"\n  },\n  \"Binance Spot APIs and Streams\": {\n    \"title\": \"Binance Spot APIs and Streams\",\n    \"repoName\": \"binance/binance-spot-api-docs\",\n    \"githubUrl\": \"https://github.com/binance/binance-spot-api-docs\",\n    \"description\": \"Official Documentation for the Binance Spot APIs and Streams \",\n    \"owner\": \"binance\",\n    \"repo\": \"binance-spot-api-docs\"\n  },\n  \"Ntfy\": {\n    \"title\": \"Ntfy\",\n    \"repoName\": \"binwiederhier/ntfy\",\n    \"githubUrl\": \"https://github.com/binwiederhier/ntfy\",\n    \"description\": \"Send push notifications to your phone or desktop using PUT/POST\",\n    \"owner\": \"binwiederhier\",\n    \"repo\": \"ntfy\"\n  },\n  \"Biome\": {\n    \"title\": \"Biome\",\n    \"repoName\": \"biomejs/biome\",\n    \"githubUrl\": \"https://github.com/biomejs/biome\",\n    \"description\": \"A toolchain for web projects, aimed to provide functionalities to maintain them. Biome offers formatter and linter, usable via CLI and LSP.\",\n    \"owner\": \"biomejs\",\n    \"repo\": \"biome\"\n  },\n  \"Bitcoin Core\": {\n    \"title\": \"Bitcoin Core\",\n    \"repoName\": \"bitcoin/bitcoin\",\n    \"githubUrl\": \"https://github.com/bitcoin/bitcoin\",\n    \"description\": \"Bitcoin Core integration/staging tree\",\n    \"owner\": \"bitcoin\",\n    \"repo\": \"bitcoin\"\n  },\n  \"BitcoinJS\": {\n    \"title\": \"BitcoinJS\",\n    \"repoName\": \"bitcoinjs/bitcoinjs-lib\",\n    \"githubUrl\": \"https://github.com/bitcoinjs/bitcoinjs-lib\",\n    \"description\": \"A javascript Bitcoin library for node.js and browsers.\",\n    \"owner\": \"bitcoinjs\",\n    \"repo\": \"bitcoinjs-lib\"\n  },\n  \"Bitrix24\": {\n    \"title\": \"Bitrix24\",\n    \"repoName\": \"bitrix-tools/b24-rest-docs\",\n    \"githubUrl\": \"https://github.com/bitrix-tools/b24-rest-docs\",\n    \"description\": \"Полная документация по REST API  Битрикс24, разработке приложений и интеграций\",\n    \"owner\": \"bitrix-tools\",\n    \"repo\": \"b24-rest-docs\"\n  },\n  \"Libgraph\": {\n    \"title\": \"Libgraph\",\n    \"repoName\": \"bitwalker/libgraph\",\n    \"githubUrl\": \"https://github.com/bitwalker/libgraph\",\n    \"description\": \"A graph data structure library for Elixir projects\",\n    \"owner\": \"bitwalker\",\n    \"repo\": \"libgraph\"\n  },\n  \"Obsidian Dataview\": {\n    \"title\": \"Obsidian Dataview\",\n    \"repoName\": \"blacksmithgu/obsidian-dataview\",\n    \"githubUrl\": \"https://github.com/blacksmithgu/obsidian-dataview\",\n    \"description\": \"A data index and query language over Markdown files, for https://obsidian.md/.\",\n    \"owner\": \"blacksmithgu\",\n    \"repo\": \"obsidian-dataview\"\n  },\n  \"Frigate\": {\n    \"title\": \"Frigate\",\n    \"repoName\": \"blakeblackshear/frigate\",\n    \"githubUrl\": \"https://github.com/blakeblackshear/frigate\",\n    \"description\": \"NVR with realtime local object detection for IP cameras\",\n    \"owner\": \"blakeblackshear\",\n    \"repo\": \"frigate\"\n  },\n  \"Blender\": {\n    \"title\": \"Blender\",\n    \"repoName\": \"blender/blender\",\n    \"githubUrl\": \"https://github.com/blender/blender\",\n    \"description\": \"Official mirror of Blender\",\n    \"owner\": \"blender\",\n    \"repo\": \"blender\"\n  },\n  \"Node Rdkafka\": {\n    \"title\": \"Node Rdkafka\",\n    \"repoName\": \"blizzard/node-rdkafka\",\n    \"githubUrl\": \"https://github.com/blizzard/node-rdkafka\",\n    \"description\": \"Node.js bindings for librdkafka\",\n    \"owner\": \"blizzard\",\n    \"repo\": \"node-rdkafka\"\n  },\n  \"Goose\": {\n    \"title\": \"Goose\",\n    \"repoName\": \"block/goose\",\n    \"githubUrl\": \"https://github.com/block/goose\",\n    \"description\": \"an open source, extensible AI agent that goes beyond code suggestions - install, execute, edit, and test with any LLM\",\n    \"owner\": \"block\",\n    \"repo\": \"goose\"\n  },\n  \"Blockscout\": {\n    \"title\": \"Blockscout\",\n    \"repoName\": \"blockscout/blockscout\",\n    \"githubUrl\": \"https://github.com/blockscout/blockscout\",\n    \"description\": \"Blockchain explorer for Ethereum based network and a tool for inspecting and analyzing EVM based blockchains. \",\n    \"owner\": \"blockscout\",\n    \"repo\": \"blockscout\"\n  },\n  \"Blockscout Frontend\": {\n    \"title\": \"Blockscout Frontend\",\n    \"repoName\": \"blockscout/frontend\",\n    \"githubUrl\": \"https://github.com/blockscout/frontend\",\n    \"description\": \"Front-end application for Blockscout\",\n    \"owner\": \"blockscout\",\n    \"repo\": \"frontend\"\n  },\n  \"Phaser\": {\n    \"title\": \"Phaser\",\n    \"repoName\": \"phaserjs/phaser\",\n    \"githubUrl\": \"https://github.com/phaserjs/phaser\",\n    \"description\": \"Phaser is a fun, free and fast 2D game framework for making HTML5 games for desktop and mobile web browsers, supporting Canvas and WebGL rendering.\",\n    \"owner\": \"phaserjs\",\n    \"repo\": \"phaser\"\n  },\n  \"Go Shopify\": {\n    \"title\": \"Go Shopify\",\n    \"repoName\": \"bold-commerce/go-shopify\",\n    \"githubUrl\": \"https://github.com/bold-commerce/go-shopify\",\n    \"description\": \"Go client for the Shopify API\",\n    \"owner\": \"bold-commerce\",\n    \"repo\": \"go-shopify\"\n  },\n  \"Terraspace\": {\n    \"title\": \"Terraspace\",\n    \"repoName\": \"boltops-tools/terraspace\",\n    \"githubUrl\": \"https://github.com/boltops-tools/terraspace\",\n    \"description\": \"Terraspace: The Terraform Framework\",\n    \"owner\": \"boltops-tools\",\n    \"repo\": \"terraspace\"\n  },\n  \"Boost\": {\n    \"title\": \"Boost\",\n    \"repoName\": \"boostorg/boost\",\n    \"githubUrl\": \"https://github.com/boostorg/boost\",\n    \"description\": \"Super-project for modularized Boost\",\n    \"owner\": \"boostorg\",\n    \"repo\": \"boost\"\n  },\n  \"Boto3\": {\n    \"title\": \"Boto3\",\n    \"repoName\": \"boto/boto3\",\n    \"githubUrl\": \"https://github.com/boto/boto3\",\n    \"description\": \"AWS SDK for Python\",\n    \"owner\": \"boto\",\n    \"repo\": \"boto3\"\n  },\n  \"Botpress\": {\n    \"title\": \"Botpress\",\n    \"repoName\": \"botpress/botpress\",\n    \"githubUrl\": \"https://github.com/botpress/botpress\",\n    \"description\": \"The open-source hub to build & deploy GPT/LLM Agents ⚡️\",\n    \"owner\": \"botpress\",\n    \"repo\": \"botpress\"\n  },\n  \"Baml\": {\n    \"title\": \"Baml\",\n    \"repoName\": \"boundaryml/baml\",\n    \"githubUrl\": \"https://github.com/boundaryml/baml\",\n    \"description\": \"The AI framework that adds the engineering to prompt engineering (Python/TS/Ruby/Java/C#/Rust/Go compatible)\",\n    \"owner\": \"boundaryml\",\n    \"repo\": \"baml\"\n  },\n  \"Degenbot\": {\n    \"title\": \"Degenbot\",\n    \"repoName\": \"bowtieddevil/degenbot\",\n    \"githubUrl\": \"https://github.com/bowtieddevil/degenbot\",\n    \"description\": \"Python classes to aid rapid development of Uniswap V2 & V3, Curve V1, and Solidly V2 arbitrage bots on EVM-compatible blockchains\",\n    \"owner\": \"bowtieddevil\",\n    \"repo\": \"degenbot\"\n  },\n  \"Jackson\": {\n    \"title\": \"Jackson\",\n    \"repoName\": \"boxyhq/jackson\",\n    \"githubUrl\": \"https://github.com/boxyhq/jackson\",\n    \"description\": \"🔥 Streamline your web application's authentication with Jackson, an SSO service supporting SAML and OpenID Connect protocols. Beyond enterprise-grade Single Sign-On, it also supports Directory Sync via the SCIM 2.0 protocol for automatic user and group provisioning/de-provisioning. 🤩\",\n    \"owner\": \"boxyhq\",\n    \"repo\": \"jackson\"\n  },\n  \"Atomic Agents\": {\n    \"title\": \"Atomic Agents\",\n    \"repoName\": \"brainblend-ai/atomic-agents\",\n    \"githubUrl\": \"https://github.com/brainblend-ai/atomic-agents\",\n    \"description\": \"Building AI agents, atomically\",\n    \"owner\": \"brainblend-ai\",\n    \"repo\": \"atomic-agents\"\n  },\n  \"Braintree Java\": {\n    \"title\": \"Braintree Java\",\n    \"repoName\": \"braintree/braintree_java\",\n    \"githubUrl\": \"https://github.com/braintree/braintree_java\",\n    \"description\": \"Braintree Java library\",\n    \"owner\": \"braintree\",\n    \"repo\": \"braintree_java\"\n  },\n  \"Drizzle Zero\": {\n    \"title\": \"Drizzle Zero\",\n    \"repoName\": \"briefhq/drizzle-zero\",\n    \"githubUrl\": \"https://github.com/briefhq/drizzle-zero\",\n    \"description\": \"Generate Zero schemas from Drizzle ORM schemas.\",\n    \"owner\": \"briefhq\",\n    \"repo\": \"drizzle-zero\"\n  },\n  \"Components\": {\n    \"title\": \"Components\",\n    \"repoName\": \"brijr/components\",\n    \"githubUrl\": \"https://github.com/brijr/components\",\n    \"description\": \"Next JS Components built with Tailwind, Typescript, brijr/craft, shadcn/ui, and more.\",\n    \"owner\": \"brijr\",\n    \"repo\": \"components\"\n  },\n  \"Telefunc\": {\n    \"title\": \"Telefunc\",\n    \"repoName\": \"brillout/telefunc\",\n    \"githubUrl\": \"https://github.com/brillout/telefunc\",\n    \"description\": \"Remote Functions. Instead of API.\",\n    \"owner\": \"brillout\",\n    \"repo\": \"telefunc\"\n  },\n  \"React Arborist\": {\n    \"title\": \"React Arborist\",\n    \"repoName\": \"brimdata/react-arborist\",\n    \"githubUrl\": \"https://github.com/brimdata/react-arborist\",\n    \"description\": \"The complete tree view component for React\",\n    \"owner\": \"brimdata\",\n    \"repo\": \"react-arborist\"\n  },\n  \"CryptoJS\": {\n    \"title\": \"CryptoJS\",\n    \"repoName\": \"brix/crypto-js\",\n    \"githubUrl\": \"https://github.com/brix/crypto-js\",\n    \"description\": \"JavaScript library of crypto standards.\",\n    \"owner\": \"brix\",\n    \"repo\": \"crypto-js\"\n  },\n  \"Browser Use\": {\n    \"title\": \"Browser Use\",\n    \"repoName\": \"browser-use/browser-use\",\n    \"githubUrl\": \"https://github.com/browser-use/browser-use\",\n    \"description\": \"Make websites accessible for AI agents\",\n    \"owner\": \"browser-use\",\n    \"repo\": \"browser-use\"\n  },\n  \"Browserbase\": {\n    \"title\": \"Browserbase\",\n    \"repoName\": \"browserbase/docs\",\n    \"githubUrl\": \"https://github.com/browserbase/docs\",\n    \"description\": \"\",\n    \"owner\": \"browserbase\",\n    \"repo\": \"docs\"\n  },\n  \"Stagehand\": {\n    \"title\": \"Stagehand\",\n    \"repoName\": \"browserbase/stagehand\",\n    \"githubUrl\": \"https://github.com/browserbase/stagehand\",\n    \"description\": \"An AI web browsing framework focused on simplicity and extensibility.\",\n    \"owner\": \"browserbase\",\n    \"repo\": \"stagehand\"\n  },\n  \"BSV Blockchain Go SDK\": {\n    \"title\": \"BSV Blockchain Go SDK\",\n    \"repoName\": \"bsv-blockchain/go-sdk\",\n    \"githubUrl\": \"https://github.com/bsv-blockchain/go-sdk\",\n    \"description\": \"\",\n    \"owner\": \"bsv-blockchain\",\n    \"repo\": \"go-sdk\"\n  },\n  \"Bucketeer\": {\n    \"title\": \"Bucketeer\",\n    \"repoName\": \"bucketeer-io/bucketeer\",\n    \"githubUrl\": \"https://github.com/bucketeer-io/bucketeer\",\n    \"description\": \"Feature Flag Management and A/B Testing platform\",\n    \"owner\": \"bucketeer-io\",\n    \"repo\": \"bucketeer\"\n  },\n  \"Buf\": {\n    \"title\": \"Buf\",\n    \"repoName\": \"bufbuild/buf\",\n    \"githubUrl\": \"https://github.com/bufbuild/buf\",\n    \"description\": \"The best way of working with Protocol Buffers.\",\n    \"owner\": \"bufbuild\",\n    \"repo\": \"buf\"\n  },\n  \"Buggregator\": {\n    \"title\": \"Buggregator\",\n    \"repoName\": \"buggregator/docs\",\n    \"githubUrl\": \"https://github.com/buggregator/docs\",\n    \"description\": \"Buggregator official documentation\",\n    \"owner\": \"buggregator\",\n    \"repo\": \"docs\"\n  },\n  \"BugSnag Laravel\": {\n    \"title\": \"BugSnag Laravel\",\n    \"repoName\": \"bugsnag/bugsnag-laravel.git\",\n    \"githubUrl\": \"https://github.com/bugsnag/bugsnag-laravel.git\",\n    \"description\": \"BugSnag notifier for the Laravel PHP framework. Monitor and report Laravel errors.\",\n    \"owner\": \"bugsnag\",\n    \"repo\": \"bugsnag-laravel.git\"\n  },\n  \"BunnyCDN PHP Storage\": {\n    \"title\": \"BunnyCDN PHP Storage\",\n    \"repoName\": \"bunnyway/bunnycdn.php.storage\",\n    \"githubUrl\": \"https://github.com/bunnyway/bunnycdn.php.storage\",\n    \"description\": \"The official PHP library used for interacting with the BunnyCDN Storage API.\",\n    \"owner\": \"bunnyway\",\n    \"repo\": \"bunnycdn.php.storage\"\n  },\n  \"EdgeScript SDK\": {\n    \"title\": \"EdgeScript SDK\",\n    \"repoName\": \"bunnyway/edge-script-sdk\",\n    \"githubUrl\": \"https://github.com/bunnyway/edge-script-sdk\",\n    \"description\": \"EdgeScript SDK Javscript Libraries\",\n    \"owner\": \"bunnyway\",\n    \"repo\": \"edge-script-sdk\"\n  },\n  \"Pathrag\": {\n    \"title\": \"Pathrag\",\n    \"repoName\": \"bupt-gamma/pathrag\",\n    \"githubUrl\": \"https://github.com/bupt-gamma/pathrag\",\n    \"description\": \"\",\n    \"owner\": \"bupt-gamma\",\n    \"repo\": \"pathrag\"\n  },\n  \"Gspread\": {\n    \"title\": \"Gspread\",\n    \"repoName\": \"burnash/gspread\",\n    \"githubUrl\": \"https://github.com/burnash/gspread\",\n    \"description\": \"Google Sheets Python API\",\n    \"owner\": \"burnash\",\n    \"repo\": \"gspread\"\n  },\n  \"React Resizable Panels\": {\n    \"title\": \"React Resizable Panels\",\n    \"repoName\": \"bvaughn/react-resizable-panels\",\n    \"githubUrl\": \"https://github.com/bvaughn/react-resizable-panels\",\n    \"description\": \"\",\n    \"owner\": \"bvaughn\",\n    \"repo\": \"react-resizable-panels\"\n  },\n  \"DiscordGo\": {\n    \"title\": \"DiscordGo\",\n    \"repoName\": \"katara-ai-inc/discordgo\",\n    \"githubUrl\": \"https://github.com/katara-ai-inc/discordgo\",\n    \"description\": \" (Golang) Go bindings for Discord\",\n    \"owner\": \"katara-ai-inc\",\n    \"repo\": \"discordgo\"\n  },\n  \"Bytewax Platform\": {\n    \"title\": \"Bytewax Platform\",\n    \"repoName\": \"bytewax/platform-docs-content\",\n    \"githubUrl\": \"https://github.com/bytewax/platform-docs-content\",\n    \"description\": \"Source of Platform Website content\",\n    \"owner\": \"bytewax\",\n    \"repo\": \"platform-docs-content\"\n  },\n  \"C3 Website\": {\n    \"title\": \"C3 Website\",\n    \"repoName\": \"c3lang/c3-web.git\",\n    \"githubUrl\": \"https://github.com/c3lang/c3-web.git\",\n    \"description\": \"The website for C3 made with Astro!\",\n    \"owner\": \"c3lang\",\n    \"repo\": \"c3-web.git\"\n  },\n  \"Deno Cliffy\": {\n    \"title\": \"Deno Cliffy\",\n    \"repoName\": \"c4spar/deno-cliffy\",\n    \"githubUrl\": \"https://github.com/c4spar/deno-cliffy\",\n    \"description\": \"Command line framework for deno 🦕 Including Commandline-Interfaces, Prompts, CLI-Table, Arguments Parser and more...\",\n    \"owner\": \"c4spar\",\n    \"repo\": \"deno-cliffy\"\n  },\n  \"Qasync\": {\n    \"title\": \"Qasync\",\n    \"repoName\": \"cabbagedevelopment/qasync\",\n    \"githubUrl\": \"https://github.com/cabbagedevelopment/qasync\",\n    \"description\": \"Python library for using asyncio in Qt-based applications.\",\n    \"owner\": \"cabbagedevelopment\",\n    \"repo\": \"qasync\"\n  },\n  \"Devenv\": {\n    \"title\": \"Devenv\",\n    \"repoName\": \"cachix/devenv\",\n    \"githubUrl\": \"https://github.com/cachix/devenv\",\n    \"description\": \"Fast, Declarative, Reproducible, and Composable Developer Environments using Nix\",\n    \"owner\": \"cachix\",\n    \"repo\": \"devenv\"\n  },\n  \"Caddy\": {\n    \"title\": \"Caddy\",\n    \"repoName\": \"caddyserver/website\",\n    \"githubUrl\": \"https://github.com/caddyserver/website\",\n    \"description\": \"The Caddy website\",\n    \"owner\": \"caddyserver\",\n    \"repo\": \"website\"\n  },\n  \"Caido\": {\n    \"title\": \"Caido\",\n    \"repoName\": \"caido/doc-developer\",\n    \"githubUrl\": \"https://github.com/caido/doc-developer\",\n    \"description\": \"📙 Developer documentation for Caido\",\n    \"owner\": \"caido\",\n    \"repo\": \"doc-developer\"\n  },\n  \"Cal.com\": {\n    \"title\": \"Cal.com\",\n    \"repoName\": \"calcom/cal.com\",\n    \"githubUrl\": \"https://github.com/calcom/cal.com\",\n    \"description\": \"Scheduling infrastructure for absolutely everyone.\",\n    \"owner\": \"calcom\",\n    \"repo\": \"cal.com\"\n  },\n  \"Mono Fuel\": {\n    \"title\": \"Mono Fuel\",\n    \"repoName\": \"calldelegation/mono-fuel-docs\",\n    \"githubUrl\": \"https://github.com/calldelegation/mono-fuel-docs\",\n    \"description\": \"\",\n    \"owner\": \"calldelegation\",\n    \"repo\": \"mono-fuel-docs\"\n  },\n  \"React Native Paper\": {\n    \"title\": \"React Native Paper\",\n    \"repoName\": \"callstack/react-native-paper\",\n    \"githubUrl\": \"https://github.com/callstack/react-native-paper\",\n    \"description\": \"Material Design for React Native (Android & iOS)\",\n    \"owner\": \"callstack\",\n    \"repo\": \"react-native-paper\"\n  },\n  \"React Native Bottom Tabs\": {\n    \"title\": \"React Native Bottom Tabs\",\n    \"repoName\": \"callstackincubator/react-native-bottom-tabs\",\n    \"githubUrl\": \"https://github.com/callstackincubator/react-native-bottom-tabs\",\n    \"description\": \"Native Bottom Tabs for React Native\",\n    \"owner\": \"callstackincubator\",\n    \"repo\": \"react-native-bottom-tabs\"\n  },\n  \"CAMEL\": {\n    \"title\": \"CAMEL\",\n    \"repoName\": \"camel-ai/camel\",\n    \"githubUrl\": \"https://github.com/camel-ai/camel\",\n    \"description\": \"🐫 CAMEL: The first and the best multi-agent framework. Finding the Scaling Law of Agents. https://www.camel-ai.org\",\n    \"owner\": \"camel-ai\",\n    \"repo\": \"camel\"\n  },\n  \"OWL\": {\n    \"title\": \"OWL\",\n    \"repoName\": \"camel-ai/owl\",\n    \"githubUrl\": \"https://github.com/camel-ai/owl\",\n    \"description\": \"🦉 OWL: Optimized Workforce Learning for General Multi-Agent Assistance in Real-World Task Automation\",\n    \"owner\": \"camel-ai\",\n    \"repo\": \"owl\"\n  },\n  \"Camunda 8\": {\n    \"title\": \"Camunda 8\",\n    \"repoName\": \"camunda/camunda-docs\",\n    \"githubUrl\": \"https://github.com/camunda/camunda-docs\",\n    \"description\": \"Camunda 8 Documentation, including all components and features\",\n    \"owner\": \"camunda\",\n    \"repo\": \"camunda-docs\"\n  },\n  \"Canva Apps SDK Starter Kit\": {\n    \"title\": \"Canva Apps SDK Starter Kit\",\n    \"repoName\": \"canva-sdks/canva-apps-sdk-starter-kit\",\n    \"githubUrl\": \"https://github.com/canva-sdks/canva-apps-sdk-starter-kit\",\n    \"description\": \"\",\n    \"owner\": \"canva-sdks\",\n    \"repo\": \"canva-apps-sdk-starter-kit\"\n  },\n  \"Capacitor Social Login\": {\n    \"title\": \"Capacitor Social Login\",\n    \"repoName\": \"cap-go/capacitor-social-login\",\n    \"githubUrl\": \"https://github.com/cap-go/capacitor-social-login\",\n    \"description\": \"One plugin to make login with Google,Apple,Facebook and so on, simple and fast to implement\",\n    \"owner\": \"cap-go\",\n    \"repo\": \"capacitor-social-login\"\n  },\n  \"CAP\": {\n    \"title\": \"CAP\",\n    \"repoName\": \"cap-js/docs\",\n    \"githubUrl\": \"https://github.com/cap-js/docs\",\n    \"description\": \"CAP Documentation\",\n    \"owner\": \"cap-js\",\n    \"repo\": \"docs\"\n  },\n  \"Data Wizard\": {\n    \"title\": \"Data Wizard\",\n    \"repoName\": \"capevace/data-wizard-docs\",\n    \"githubUrl\": \"https://github.com/capevace/data-wizard-docs\",\n    \"description\": \"\",\n    \"owner\": \"capevace\",\n    \"repo\": \"data-wizard-docs\"\n  },\n  \"Carbon Design System\": {\n    \"title\": \"Carbon Design System\",\n    \"repoName\": \"carbon-design-system/carbon\",\n    \"githubUrl\": \"https://github.com/carbon-design-system/carbon\",\n    \"description\": \"A design system built by IBM\",\n    \"owner\": \"carbon-design-system\",\n    \"repo\": \"carbon\"\n  },\n  \"Gitmoji\": {\n    \"title\": \"Gitmoji\",\n    \"repoName\": \"carloscuesta/gitmoji\",\n    \"githubUrl\": \"https://github.com/carloscuesta/gitmoji\",\n    \"description\": \"An emoji guide for your commit messages. 😜 \",\n    \"owner\": \"carloscuesta\",\n    \"repo\": \"gitmoji\"\n  },\n  \"Apprise\": {\n    \"title\": \"Apprise\",\n    \"repoName\": \"caronc/apprise\",\n    \"githubUrl\": \"https://github.com/caronc/apprise\",\n    \"description\": \"Apprise - Push Notifications that work with just about every platform!\",\n    \"owner\": \"caronc\",\n    \"repo\": \"apprise\"\n  },\n  \"Casbin\": {\n    \"title\": \"Casbin\",\n    \"repoName\": \"casbin/casbin-website-v2\",\n    \"githubUrl\": \"https://github.com/casbin/casbin-website-v2\",\n    \"description\": \"The new docs website for Casbin based on Docusaurus v2\",\n    \"owner\": \"casbin\",\n    \"repo\": \"casbin-website-v2\"\n  },\n  \"Casdoor\": {\n    \"title\": \"Casdoor\",\n    \"repoName\": \"casdoor/casdoor-website\",\n    \"githubUrl\": \"https://github.com/casdoor/casdoor-website\",\n    \"description\": \"The docs website for Casdoor: https://github.com/casdoor/casdoor\",\n    \"owner\": \"casdoor\",\n    \"repo\": \"casdoor-website\"\n  },\n  \"React Color\": {\n    \"title\": \"React Color\",\n    \"repoName\": \"casesandberg/react-color\",\n    \"githubUrl\": \"https://github.com/casesandberg/react-color\",\n    \"description\": \":art: Color Pickers from Sketch, Photoshop, Chrome, Github, Twitter & more\",\n    \"owner\": \"casesandberg\",\n    \"repo\": \"react-color\"\n  },\n  \"Just\": {\n    \"title\": \"Just\",\n    \"repoName\": \"casey/just\",\n    \"githubUrl\": \"https://github.com/casey/just\",\n    \"description\": \"🤖 Just a command runner\",\n    \"owner\": \"casey\",\n    \"repo\": \"just\"\n  },\n  \"Cashfree Javascript Library\": {\n    \"title\": \"Cashfree Javascript Library\",\n    \"repoName\": \"cashfree/cashfree-js\",\n    \"githubUrl\": \"https://github.com/cashfree/cashfree-js\",\n    \"description\": \"Cashfree Javascript Library\",\n    \"owner\": \"cashfree\",\n    \"repo\": \"cashfree-js\"\n  },\n  \"Cashfree PG SDK Nodejs\": {\n    \"title\": \"Cashfree PG SDK Nodejs\",\n    \"repoName\": \"cashfree/cashfree-pg-sdk-nodejs\",\n    \"githubUrl\": \"https://github.com/cashfree/cashfree-pg-sdk-nodejs\",\n    \"description\": \"Cashfree Nodejs Plugin\",\n    \"owner\": \"cashfree\",\n    \"repo\": \"cashfree-pg-sdk-nodejs\"\n  },\n  \"Casper Node\": {\n    \"title\": \"Casper Node\",\n    \"repoName\": \"casper-network/casper-node\",\n    \"githubUrl\": \"https://github.com/casper-network/casper-node\",\n    \"description\": \"Reference node for CASPER protocol\",\n    \"owner\": \"casper-network\",\n    \"repo\": \"casper-node\"\n  },\n  \"Casper Node Util\": {\n    \"title\": \"Casper Node Util\",\n    \"repoName\": \"casper-network/casper-node-util\",\n    \"githubUrl\": \"https://github.com/casper-network/casper-node-util\",\n    \"description\": \"To hold node_util script or program that will be installed rather than bundled with casper-node-launcher\",\n    \"owner\": \"casper-network\",\n    \"repo\": \"casper-node-util\"\n  },\n  \"Casper Sidecar\": {\n    \"title\": \"Casper Sidecar\",\n    \"repoName\": \"casper-network/casper-sidecar\",\n    \"githubUrl\": \"https://github.com/casper-network/casper-sidecar\",\n    \"description\": \"\",\n    \"owner\": \"casper-network\",\n    \"repo\": \"casper-sidecar\"\n  },\n  \"Casper Network\": {\n    \"title\": \"Casper Network\",\n    \"repoName\": \"casper-network/docs-redux\",\n    \"githubUrl\": \"https://github.com/casper-network/docs-redux\",\n    \"description\": \"Casper Network's official documentation repository\",\n    \"owner\": \"casper-network\",\n    \"repo\": \"docs-redux\"\n  },\n  \"CatBoost\": {\n    \"title\": \"CatBoost\",\n    \"repoName\": \"catboost/catboost\",\n    \"githubUrl\": \"https://github.com/catboost/catboost\",\n    \"description\": \"A fast, scalable, high performance Gradient Boosting on Decision Trees library, used for ranking, classification, regression and other machine learning tasks for Python, R, Java, C++. Supports computation on CPU and GPU.\",\n    \"owner\": \"catboost\",\n    \"repo\": \"catboost\"\n  },\n  \"WebPageTest\": {\n    \"title\": \"WebPageTest\",\n    \"repoName\": \"catchpoint/webpagetest\",\n    \"githubUrl\": \"https://github.com/catchpoint/webpagetest\",\n    \"description\": \"Official repository for WebPageTest\",\n    \"owner\": \"catchpoint\",\n    \"repo\": \"webpagetest\"\n  },\n  \"Medoo\": {\n    \"title\": \"Medoo\",\n    \"repoName\": \"catfan/medoo\",\n    \"githubUrl\": \"https://github.com/catfan/medoo\",\n    \"description\": \"The lightweight PHP database framework to accelerate the development.\",\n    \"owner\": \"catfan\",\n    \"repo\": \"medoo\"\n  },\n  \"Klaxon\": {\n    \"title\": \"Klaxon\",\n    \"repoName\": \"cbeust/klaxon\",\n    \"githubUrl\": \"https://github.com/cbeust/klaxon\",\n    \"description\": \"A JSON parser for Kotlin\",\n    \"owner\": \"cbeust\",\n    \"repo\": \"klaxon\"\n  },\n  \"CCXT\": {\n    \"title\": \"CCXT\",\n    \"repoName\": \"ccxt/ccxt\",\n    \"githubUrl\": \"https://github.com/ccxt/ccxt\",\n    \"description\": \"A JavaScript / TypeScript / Python / C# / PHP / Go cryptocurrency trading API with support for more than 100 bitcoin/altcoin exchanges\",\n    \"owner\": \"ccxt\",\n    \"repo\": \"ccxt\"\n  },\n  \"Schemdraw\": {\n    \"title\": \"Schemdraw\",\n    \"repoName\": \"cdelker/schemdraw\",\n    \"githubUrl\": \"https://github.com/cdelker/schemdraw\",\n    \"description\": \"\",\n    \"owner\": \"cdelker\",\n    \"repo\": \"schemdraw\"\n  },\n  \"Celery\": {\n    \"title\": \"Celery\",\n    \"repoName\": \"celery/celery\",\n    \"githubUrl\": \"https://github.com/celery/celery\",\n    \"description\": \"Distributed Task Queue (development branch)\",\n    \"owner\": \"celery\",\n    \"repo\": \"celery\"\n  },\n  \"Django Celery Beat\": {\n    \"title\": \"Django Celery Beat\",\n    \"repoName\": \"celery/django-celery-beat\",\n    \"githubUrl\": \"https://github.com/celery/django-celery-beat\",\n    \"description\": \"Celery Periodic Tasks backed by the Django ORM\",\n    \"owner\": \"celery\",\n    \"repo\": \"django-celery-beat\"\n  },\n  \"Kombu\": {\n    \"title\": \"Kombu\",\n    \"repoName\": \"celery/kombu\",\n    \"githubUrl\": \"https://github.com/celery/kombu\",\n    \"description\": \"Messaging library for Python.\",\n    \"owner\": \"celery\",\n    \"repo\": \"kombu\"\n  },\n  \"Pytest Celery\": {\n    \"title\": \"Pytest Celery\",\n    \"repoName\": \"celery/pytest-celery\",\n    \"githubUrl\": \"https://github.com/celery/pytest-celery\",\n    \"description\": \"Official pytest plugin for Celery.\",\n    \"owner\": \"celery\",\n    \"repo\": \"pytest-celery\"\n  },\n  \"Celluloid\": {\n    \"title\": \"Celluloid\",\n    \"repoName\": \"celluloid/celluloid\",\n    \"githubUrl\": \"https://github.com/celluloid/celluloid\",\n    \"description\": \"Actor-based concurrent object framework for Ruby\",\n    \"owner\": \"celluloid\",\n    \"repo\": \"celluloid\"\n  },\n  \"Certbot\": {\n    \"title\": \"Certbot\",\n    \"repoName\": \"certbot/certbot\",\n    \"githubUrl\": \"https://github.com/certbot/certbot\",\n    \"description\": \"Certbot is EFF's tool to obtain certs from Let's Encrypt and (optionally) auto-enable HTTPS on your server.  It can also act as a client for any other CA that uses the ACME protocol.\",\n    \"owner\": \"certbot\",\n    \"repo\": \"certbot\"\n  },\n  \"MCP Client Chatbot\": {\n    \"title\": \"MCP Client Chatbot\",\n    \"repoName\": \"cgoinglove/mcp-client-chatbot\",\n    \"githubUrl\": \"https://github.com/cgoinglove/mcp-client-chatbot\",\n    \"description\": \"🚀 Multi-provider AI chatbot client powered by MCP\",\n    \"owner\": \"cgoinglove\",\n    \"repo\": \"mcp-client-chatbot\"\n  },\n  \"Chai\": {\n    \"title\": \"Chai\",\n    \"repoName\": \"chaijs/chai-docs\",\n    \"githubUrl\": \"https://github.com/chaijs/chai-docs\",\n    \"description\": \"The chaijs.com website source code. Contributions welcome.\",\n    \"owner\": \"chaijs\",\n    \"repo\": \"chai-docs\"\n  },\n  \"Chainlit\": {\n    \"title\": \"Chainlit\",\n    \"repoName\": \"chainlit/docs\",\n    \"githubUrl\": \"https://github.com/chainlit/docs\",\n    \"description\": \"\",\n    \"owner\": \"chainlit\",\n    \"repo\": \"docs\"\n  },\n  \"Chainlit Cookbook\": {\n    \"title\": \"Chainlit Cookbook\",\n    \"repoName\": \"chainlit/cookbook\",\n    \"githubUrl\": \"https://github.com/chainlit/cookbook\",\n    \"description\": \"Chainlit's cookbook repo\",\n    \"owner\": \"chainlit\",\n    \"repo\": \"cookbook\"\n  },\n  \"Ark\": {\n    \"title\": \"Ark\",\n    \"repoName\": \"chakra-ui/ark\",\n    \"githubUrl\": \"https://github.com/chakra-ui/ark\",\n    \"description\": \"Build your design system with React, Svelte, Vue, and Solid. Powered by State Machines\",\n    \"owner\": \"chakra-ui\",\n    \"repo\": \"ark\"\n  },\n  \"Chakra UI\": {\n    \"title\": \"Chakra UI\",\n    \"repoName\": \"chakra-ui/chakra-ui\",\n    \"githubUrl\": \"https://github.com/chakra-ui/chakra-ui\",\n    \"description\": \"Chakra UI is a component system for building products with speed ⚡️\",\n    \"owner\": \"chakra-ui\",\n    \"repo\": \"chakra-ui\"\n  },\n  \"Panda\": {\n    \"title\": \"Panda\",\n    \"repoName\": \"chakra-ui/panda\",\n    \"githubUrl\": \"https://github.com/chakra-ui/panda\",\n    \"description\": \"🐼 Universal, Type-Safe, CSS-in-JS Framework for Product Teams ⚡️\",\n    \"owner\": \"chakra-ui\",\n    \"repo\": \"panda\"\n  },\n  \"Cellxgene\": {\n    \"title\": \"Cellxgene\",\n    \"repoName\": \"chanzuckerberg/cellxgene\",\n    \"githubUrl\": \"https://github.com/chanzuckerberg/cellxgene\",\n    \"description\": \"An interactive explorer for single-cell transcriptomics data\",\n    \"owner\": \"chanzuckerberg\",\n    \"repo\": \"cellxgene\"\n  },\n  \"Modal Manager\": {\n    \"title\": \"Modal Manager\",\n    \"repoName\": \"chappy202/modal-manager\",\n    \"githubUrl\": \"https://github.com/chappy202/modal-manager\",\n    \"description\": \"A lightweight, flexible library for managing multi-step modals in React applications.\",\n    \"owner\": \"chappy202\",\n    \"repo\": \"modal-manager\"\n  },\n  \"Chart.js\": {\n    \"title\": \"Chart.js\",\n    \"repoName\": \"chartjs/chart.js\",\n    \"githubUrl\": \"https://github.com/chartjs/chart.js\",\n    \"description\": \"Simple HTML5 Charts using the <canvas> tag\",\n    \"owner\": \"chartjs\",\n    \"repo\": \"chart.js\"\n  },\n  \"Checkmarx One Vulnerability for ServiceNow\": {\n    \"title\": \"Checkmarx One Vulnerability for ServiceNow\",\n    \"repoName\": \"checkmarx-ltd/servicenowcxone\",\n    \"githubUrl\": \"https://github.com/checkmarx-ltd/servicenowcxone\",\n    \"description\": \"Repository to add code changes of Checkmarx One Vulnerability application changes of SNOW.\",\n    \"owner\": \"checkmarx-ltd\",\n    \"repo\": \"servicenowcxone\"\n  },\n  \"Chromiumly\": {\n    \"title\": \"Chromiumly\",\n    \"repoName\": \"cherfia/chromiumly\",\n    \"githubUrl\": \"https://github.com/cherfia/chromiumly\",\n    \"description\": \"A lightweight Typescript library that interacts with Gotenberg's different modules to convert a variety of document formats to PDF files.\",\n    \"owner\": \"cherfia\",\n    \"repo\": \"chromiumly\"\n  },\n  \"Cherry Studio\": {\n    \"title\": \"Cherry Studio\",\n    \"repoName\": \"cherryhq/cherry-studio\",\n    \"githubUrl\": \"https://github.com/cherryhq/cherry-studio\",\n    \"description\": \"🍒 Cherry Studio is a desktop client that supports for multiple LLM providers.\",\n    \"owner\": \"cherryhq\",\n    \"repo\": \"cherry-studio\"\n  },\n  \"AI Vibe Code Setup\": {\n    \"title\": \"AI Vibe Code Setup\",\n    \"repoName\": \"chrisroyse/ai-vibe-code-setup\",\n    \"githubUrl\": \"https://github.com/chrisroyse/ai-vibe-code-setup\",\n    \"description\": \"\",\n    \"owner\": \"chrisroyse\",\n    \"repo\": \"ai-vibe-code-setup\"\n  },\n  \"Chroma\": {\n    \"title\": \"Chroma\",\n    \"repoName\": \"chroma-core/chroma\",\n    \"githubUrl\": \"https://github.com/chroma-core/chroma\",\n    \"description\": \"the AI-native open-source embedding database\",\n    \"owner\": \"chroma-core\",\n    \"repo\": \"chroma\"\n  },\n  \"Chromium\": {\n    \"title\": \"Chromium\",\n    \"repoName\": \"chromium/chromium\",\n    \"githubUrl\": \"https://github.com/chromium/chromium\",\n    \"description\": \"The official GitHub mirror of the Chromium source\",\n    \"owner\": \"chromium\",\n    \"repo\": \"chromium\"\n  },\n  \"FluidGradient\": {\n    \"title\": \"FluidGradient\",\n    \"repoName\": \"cindori/fluidgradient\",\n    \"githubUrl\": \"https://github.com/cindori/fluidgradient\",\n    \"description\": \"A fluid, animated gradient implemented with CoreAnimation and SwiftUI. \",\n    \"owner\": \"cindori\",\n    \"repo\": \"fluidgradient\"\n  },\n  \"CircleCI\": {\n    \"title\": \"CircleCI\",\n    \"repoName\": \"circleci/circleci-docs\",\n    \"githubUrl\": \"https://github.com/circleci/circleci-docs\",\n    \"description\": \"Documentation for CircleCI.\",\n    \"owner\": \"circleci\",\n    \"repo\": \"circleci-docs\"\n  },\n  \"Stacks\": {\n    \"title\": \"Stacks\",\n    \"repoName\": \"cisco-open/stacks\",\n    \"githubUrl\": \"https://github.com/cisco-open/stacks\",\n    \"description\": \"Stacks, the Terraform code pre-processor\",\n    \"owner\": \"cisco-open\",\n    \"repo\": \"stacks\"\n  },\n  \"Terraform Cisco IOS-XE Provider\": {\n    \"title\": \"Terraform Cisco IOS-XE Provider\",\n    \"repoName\": \"ciscodevnet/terraform-provider-iosxe\",\n    \"githubUrl\": \"https://github.com/ciscodevnet/terraform-provider-iosxe\",\n    \"description\": \"Terraform Cisco IOS-XE Provider\",\n    \"owner\": \"ciscodevnet\",\n    \"repo\": \"terraform-provider-iosxe\"\n  },\n  \"SvelteKit Flash Message\": {\n    \"title\": \"SvelteKit Flash Message\",\n    \"repoName\": \"ciscoheat/sveltekit-flash-message\",\n    \"githubUrl\": \"https://github.com/ciscoheat/sveltekit-flash-message\",\n    \"description\": \"Send temporary data after redirect, usually from endpoints. Works with both SSR and client.\",\n    \"owner\": \"ciscoheat\",\n    \"repo\": \"sveltekit-flash-message\"\n  },\n  \"SvelteKit Superforms\": {\n    \"title\": \"SvelteKit Superforms\",\n    \"repoName\": \"ciscoheat/sveltekit-superforms\",\n    \"githubUrl\": \"https://github.com/ciscoheat/sveltekit-superforms\",\n    \"description\": \"Making SvelteKit forms a pleasure to use!\",\n    \"owner\": \"ciscoheat\",\n    \"repo\": \"sveltekit-superforms\"\n  },\n  \"FiveM\": {\n    \"title\": \"FiveM\",\n    \"repoName\": \"citizenfx/fivem-docs\",\n    \"githubUrl\": \"https://github.com/citizenfx/fivem-docs\",\n    \"description\": \"FiveM documentation repository\",\n    \"owner\": \"citizenfx\",\n    \"repo\": \"fivem-docs\"\n  },\n  \"CKEditor 5\": {\n    \"title\": \"CKEditor 5\",\n    \"repoName\": \"ckeditor/ckeditor5\",\n    \"githubUrl\": \"https://github.com/ckeditor/ckeditor5\",\n    \"description\": \"Powerful rich text editor framework with a modular architecture, modern integrations, and features like collaborative editing.\",\n    \"owner\": \"ckeditor\",\n    \"repo\": \"ckeditor5\"\n  },\n  \"Clap\": {\n    \"title\": \"Clap\",\n    \"repoName\": \"clap-rs/clap\",\n    \"githubUrl\": \"https://github.com/clap-rs/clap\",\n    \"description\": \"A full featured, fast Command Line Argument Parser for Rust\",\n    \"owner\": \"clap-rs\",\n    \"repo\": \"clap\"\n  },\n  \"Dnd Kit\": {\n    \"title\": \"Dnd Kit\",\n    \"repoName\": \"clauderic/dnd-kit\",\n    \"githubUrl\": \"https://github.com/clauderic/dnd-kit\",\n    \"description\": \"The modern, lightweight, performant, accessible and extensible drag & drop toolkit for React.\",\n    \"owner\": \"clauderic\",\n    \"repo\": \"dnd-kit\"\n  },\n  \"Clerk\": {\n    \"title\": \"Clerk\",\n    \"repoName\": \"clerk/clerk-docs\",\n    \"githubUrl\": \"https://github.com/clerk/clerk-docs\",\n    \"description\": \"The documentation content for Clerk, an authentication and user management platform.\",\n    \"owner\": \"clerk\",\n    \"repo\": \"clerk-docs\"\n  },\n  \"Clerk SDK Java\": {\n    \"title\": \"Clerk SDK Java\",\n    \"repoName\": \"clerk/clerk-sdk-java\",\n    \"githubUrl\": \"https://github.com/clerk/clerk-sdk-java\",\n    \"description\": \"\",\n    \"owner\": \"clerk\",\n    \"repo\": \"clerk-sdk-java\"\n  },\n  \"Clerk SDK Python\": {\n    \"title\": \"Clerk SDK Python\",\n    \"repoName\": \"clerk/clerk-sdk-python\",\n    \"githubUrl\": \"https://github.com/clerk/clerk-sdk-python\",\n    \"description\": \"\",\n    \"owner\": \"clerk\",\n    \"repo\": \"clerk-sdk-python\"\n  },\n  \"Yoyo\": {\n    \"title\": \"Yoyo\",\n    \"repoName\": \"clickfwd/yoyo\",\n    \"githubUrl\": \"https://github.com/clickfwd/yoyo\",\n    \"description\": \"Yoyo is a full-stack PHP framework to create rich, dynamic interfaces using server-rendered HTML. You keep on writing PHP and let Yoyo make your creations come alive.\",\n    \"owner\": \"clickfwd\",\n    \"repo\": \"yoyo\"\n  },\n  \"ClickHouse\": {\n    \"title\": \"ClickHouse\",\n    \"repoName\": \"clickhouse/clickhouse\",\n    \"githubUrl\": \"https://github.com/clickhouse/clickhouse\",\n    \"description\": \"ClickHouse® is a real-time analytics database management system\",\n    \"owner\": \"clickhouse\",\n    \"repo\": \"clickhouse\"\n  },\n  \"Cline\": {\n    \"title\": \"Cline\",\n    \"repoName\": \"cline/cline\",\n    \"githubUrl\": \"https://github.com/cline/cline\",\n    \"description\": \"Autonomous coding agent right in your IDE, capable of creating/editing files, executing commands, using the browser, and more with your permission every step of the way.\",\n    \"owner\": \"cline\",\n    \"repo\": \"cline\"\n  },\n  \"Linear MCP\": {\n    \"title\": \"Linear MCP\",\n    \"repoName\": \"ibraheem4/linear-mcp\",\n    \"githubUrl\": \"https://github.com/ibraheem4/linear-mcp\",\n    \"description\": \"Enables AI agents to manage issues, projects, and teams on the Linear platform. MCP server.\",\n    \"owner\": \"ibraheem4\",\n    \"repo\": \"linear-mcp\"\n  },\n  \"Spacetime\": {\n    \"title\": \"Spacetime\",\n    \"repoName\": \"clockworklabs/spacetime-docs\",\n    \"githubUrl\": \"https://github.com/clockworklabs/spacetime-docs\",\n    \"description\": \"\",\n    \"owner\": \"clockworklabs\",\n    \"repo\": \"spacetime-docs\"\n  },\n  \"SpacetimeDB\": {\n    \"title\": \"SpacetimeDB\",\n    \"repoName\": \"clockworklabs/spacetimedb\",\n    \"githubUrl\": \"https://github.com/clockworklabs/spacetimedb\",\n    \"description\": \"Multiplayer at the speed of light\",\n    \"owner\": \"clockworklabs\",\n    \"repo\": \"spacetimedb\"\n  },\n  \"Cloudflare Agents\": {\n    \"title\": \"Cloudflare Agents\",\n    \"repoName\": \"cloudflare/agents\",\n    \"githubUrl\": \"https://github.com/cloudflare/agents\",\n    \"description\": \"Build and deploy AI Agents on Cloudflare \",\n    \"owner\": \"cloudflare\",\n    \"repo\": \"agents\"\n  },\n  \"Cloudflare\": {\n    \"title\": \"Cloudflare\",\n    \"repoName\": \"cloudflare/cloudflare-docs\",\n    \"githubUrl\": \"https://github.com/cloudflare/cloudflare-docs\",\n    \"description\": \"Cloudflare’s documentation\",\n    \"owner\": \"cloudflare\",\n    \"repo\": \"cloudflare-docs\"\n  },\n  \"Cloudflare TypeScript\": {\n    \"title\": \"Cloudflare TypeScript\",\n    \"repoName\": \"cloudflare/cloudflare-typescript\",\n    \"githubUrl\": \"https://github.com/cloudflare/cloudflare-typescript\",\n    \"description\": \"The official Typescript library for the Cloudflare API\",\n    \"owner\": \"cloudflare\",\n    \"repo\": \"cloudflare-typescript\"\n  },\n  \"MCP Server Cloudflare\": {\n    \"title\": \"MCP Server Cloudflare\",\n    \"repoName\": \"cloudflare/mcp-server-cloudflare\",\n    \"githubUrl\": \"https://github.com/cloudflare/mcp-server-cloudflare\",\n    \"description\": \"\",\n    \"owner\": \"cloudflare\",\n    \"repo\": \"mcp-server-cloudflare\"\n  },\n  \"Cloudflare Workers Templates\": {\n    \"title\": \"Cloudflare Workers Templates\",\n    \"repoName\": \"cloudflare/templates\",\n    \"githubUrl\": \"https://github.com/cloudflare/templates\",\n    \"description\": \"Templates for Cloudflare Workers\",\n    \"owner\": \"cloudflare\",\n    \"repo\": \"templates\"\n  },\n  \"Workerd\": {\n    \"title\": \"Workerd\",\n    \"repoName\": \"cloudflare/workerd\",\n    \"githubUrl\": \"https://github.com/cloudflare/workerd\",\n    \"description\": \"The JavaScript / Wasm runtime that powers Cloudflare Workers\",\n    \"owner\": \"cloudflare\",\n    \"repo\": \"workerd\"\n  },\n  \"Cloudflare Workers\": {\n    \"title\": \"Cloudflare Workers\",\n    \"repoName\": \"cloudflare/workers-sdk\",\n    \"githubUrl\": \"https://github.com/cloudflare/workers-sdk\",\n    \"description\": \"⛅️ Home to Wrangler, the CLI for Cloudflare Workers®\",\n    \"owner\": \"cloudflare\",\n    \"repo\": \"workers-sdk\"\n  },\n  \"Cloudscape Board Components\": {\n    \"title\": \"Cloudscape Board Components\",\n    \"repoName\": \"cloudscape-design/board-components\",\n    \"githubUrl\": \"https://github.com/cloudscape-design/board-components\",\n    \"description\": \"Board components for Cloudscape design system\",\n    \"owner\": \"cloudscape-design\",\n    \"repo\": \"board-components\"\n  },\n  \"Cloudscape Design Chat Components\": {\n    \"title\": \"Cloudscape Design Chat Components\",\n    \"repoName\": \"cloudscape-design/chat-components\",\n    \"githubUrl\": \"https://github.com/cloudscape-design/chat-components\",\n    \"description\": \"\",\n    \"owner\": \"cloudscape-design\",\n    \"repo\": \"chat-components\"\n  },\n  \"Cloudscape Design System Components\": {\n    \"title\": \"Cloudscape Design System Components\",\n    \"repoName\": \"cloudscape-design/components\",\n    \"githubUrl\": \"https://github.com/cloudscape-design/components\",\n    \"description\": \"React components for Cloudscape Design System\",\n    \"owner\": \"cloudscape-design\",\n    \"repo\": \"components\"\n  },\n  \"Clutch\": {\n    \"title\": \"Clutch\",\n    \"repoName\": \"clutch-creator/clutch\",\n    \"githubUrl\": \"https://github.com/clutch-creator/clutch\",\n    \"description\": \"The Next Website Builder for High-Performance Marketing\",\n    \"owner\": \"clutch-creator\",\n    \"repo\": \"clutch\"\n  },\n  \"GetDist\": {\n    \"title\": \"GetDist\",\n    \"repoName\": \"cmbant/getdist\",\n    \"githubUrl\": \"https://github.com/cmbant/getdist\",\n    \"description\": \"MCMC sample analysis, kernel densities, plotting, and GUI\",\n    \"owner\": \"cmbant\",\n    \"repo\": \"getdist\"\n  },\n  \"Cloud Native Interactive Landscape\": {\n    \"title\": \"Cloud Native Interactive Landscape\",\n    \"repoName\": \"cncf/landscape\",\n    \"githubUrl\": \"https://github.com/cncf/landscape\",\n    \"description\": \"🌄 The Cloud Native Interactive Landscape filters and sorts hundreds of projects and products, and shows details including GitHub stars, funding, first and last commits, contributor counts and headquarters location.\",\n    \"owner\": \"cncf\",\n    \"repo\": \"landscape\"\n  },\n  \"Cobaya\": {\n    \"title\": \"Cobaya\",\n    \"repoName\": \"cobayasampler/cobaya\",\n    \"githubUrl\": \"https://github.com/cobayasampler/cobaya\",\n    \"description\": \"Code for Bayesian Analysis\",\n    \"owner\": \"cobayasampler\",\n    \"repo\": \"cobaya\"\n  },\n  \"Codama\": {\n    \"title\": \"Codama\",\n    \"repoName\": \"codama-idl/codama\",\n    \"githubUrl\": \"https://github.com/codama-idl/codama\",\n    \"description\": \"Generate clients, CLIs, documentation and more from your Solana programs\",\n    \"owner\": \"codama-idl\",\n    \"repo\": \"codama\"\n  },\n  \"Mantra Dex\": {\n    \"title\": \"Mantra Dex\",\n    \"repoName\": \"code-423n4/2024-11-mantra-dex\",\n    \"githubUrl\": \"https://github.com/code-423n4/2024-11-mantra-dex\",\n    \"description\": \"\",\n    \"owner\": \"code-423n4\",\n    \"repo\": \"2024-11-mantra-dex\"\n  },\n  \"CodeceptJS\": {\n    \"title\": \"CodeceptJS\",\n    \"repoName\": \"codeceptjs/codeceptjs\",\n    \"githubUrl\": \"https://github.com/codeceptjs/codeceptjs\",\n    \"description\": \"Supercharged End 2 End Testing Framework for NodeJS\",\n    \"owner\": \"codeceptjs\",\n    \"repo\": \"codeceptjs\"\n  },\n  \"CodeGen\": {\n    \"title\": \"CodeGen\",\n    \"repoName\": \"codegen-sh/codegen\",\n    \"githubUrl\": \"https://github.com/codegen-sh/codegen\",\n    \"description\": \"Python SDK to Interact with Intelligent Code Generation Agents\",\n    \"owner\": \"codegen-sh\",\n    \"repo\": \"codegen\"\n  },\n  \"CodeIgniter 4\": {\n    \"title\": \"CodeIgniter 4\",\n    \"repoName\": \"codeigniter4/userguide\",\n    \"githubUrl\": \"https://github.com/codeigniter4/userguide\",\n    \"description\": \"CodeIgniter 4 User Guide\",\n    \"owner\": \"codeigniter4\",\n    \"repo\": \"userguide\"\n  },\n  \"Chat2DB\": {\n    \"title\": \"Chat2DB\",\n    \"repoName\": \"codephiliax/chat2db\",\n    \"githubUrl\": \"https://github.com/codephiliax/chat2db\",\n    \"description\": \"🔥🔥🔥AI-driven database tool and SQL client, The hottest GUI client, supporting MySQL, Oracle, PostgreSQL, DB2, SQL Server, DB2, SQLite, H2, ClickHouse, and more.\",\n    \"owner\": \"codephiliax\",\n    \"repo\": \"chat2db\"\n  },\n  \"Coder\": {\n    \"title\": \"Coder\",\n    \"repoName\": \"coder/coder\",\n    \"githubUrl\": \"https://github.com/coder/coder\",\n    \"description\": \"Provision remote development environments via Terraform\",\n    \"owner\": \"coder\",\n    \"repo\": \"coder\"\n  },\n  \"Sandpack\": {\n    \"title\": \"Sandpack\",\n    \"repoName\": \"codesandbox/sandpack\",\n    \"githubUrl\": \"https://github.com/codesandbox/sandpack\",\n    \"description\": \"A component toolkit for creating live-running code editing experiences, using the power of CodeSandbox.\",\n    \"owner\": \"codesandbox\",\n    \"repo\": \"sandpack\"\n  },\n  \"Cohere Toolkit\": {\n    \"title\": \"Cohere Toolkit\",\n    \"repoName\": \"cohere-ai/cohere-toolkit\",\n    \"githubUrl\": \"https://github.com/cohere-ai/cohere-toolkit\",\n    \"description\": \"Cohere Toolkit is a collection of prebuilt components enabling users to quickly build and deploy RAG applications.\",\n    \"owner\": \"cohere-ai\",\n    \"repo\": \"cohere-toolkit\"\n  },\n  \"Cohere TypeScript SDK\": {\n    \"title\": \"Cohere TypeScript SDK\",\n    \"repoName\": \"cohere-ai/cohere-typescript\",\n    \"githubUrl\": \"https://github.com/cohere-ai/cohere-typescript\",\n    \"description\": \"The Cohere TypeScript SDK\",\n    \"owner\": \"cohere-ai\",\n    \"repo\": \"cohere-typescript\"\n  },\n  \"AgentKit\": {\n    \"title\": \"AgentKit\",\n    \"repoName\": \"coinbase/agentkit\",\n    \"githubUrl\": \"https://github.com/coinbase/agentkit\",\n    \"description\": \"Every AI Agent deserves a wallet.\",\n    \"owner\": \"coinbase\",\n    \"repo\": \"agentkit\"\n  },\n  \"OnChainKit\": {\n    \"title\": \"OnChainKit\",\n    \"repoName\": \"coinbase/onchainkit\",\n    \"githubUrl\": \"https://github.com/coinbase/onchainkit\",\n    \"description\": \"React components and TypeScript utilities to help you build top-tier onchain apps.\",\n    \"owner\": \"coinbase\",\n    \"repo\": \"onchainkit\"\n  },\n  \"Archon\": {\n    \"title\": \"Archon\",\n    \"repoName\": \"coleam00/archon\",\n    \"githubUrl\": \"https://github.com/coleam00/archon\",\n    \"description\": \"Archon is an AI agent that is able to create other AI agents using an advanced agentic coding workflow and framework knowledge base to unlock a new frontier of automated agents.\",\n    \"owner\": \"coleam00\",\n    \"repo\": \"archon\"\n  },\n  \"Zod\": {\n    \"title\": \"Zod\",\n    \"repoName\": \"colinhacks/zod\",\n    \"githubUrl\": \"https://github.com/colinhacks/zod\",\n    \"description\": \"TypeScript-first schema validation with static type inference\",\n    \"owner\": \"colinhacks\",\n    \"repo\": \"zod\"\n  },\n  \"Colyseus\": {\n    \"title\": \"Colyseus\",\n    \"repoName\": \"colyseus/colyseus\",\n    \"githubUrl\": \"https://github.com/colyseus/colyseus\",\n    \"description\": \"⚔ Multiplayer Framework for Node.js\",\n    \"owner\": \"colyseus\",\n    \"repo\": \"colyseus\"\n  },\n  \"Mill\": {\n    \"title\": \"Mill\",\n    \"repoName\": \"com-lihaoyi/mill\",\n    \"githubUrl\": \"https://github.com/com-lihaoyi/mill\",\n    \"description\": \"Mill is a fast JVM build tool that supports Java, Scala, Kotlin and many other languages. 3-6x faster than Maven or Gradle for common workflows, Mill aims to make your project’s build process performant, maintainable, and flexible\",\n    \"owner\": \"com-lihaoyi\",\n    \"repo\": \"mill\"\n  },\n  \"CometBFT\": {\n    \"title\": \"CometBFT\",\n    \"repoName\": \"cometbft/cometbft\",\n    \"githubUrl\": \"https://github.com/cometbft/cometbft\",\n    \"description\": \"CometBFT: A distributed, Byzantine fault-tolerant, deterministic state machine replication engine. A fork and successor to Tendermint Core.\",\n    \"owner\": \"cometbft\",\n    \"repo\": \"cometbft\"\n  },\n  \"CometChat UIKit React\": {\n    \"title\": \"CometChat UIKit React\",\n    \"repoName\": \"cometchat/cometchat-uikit-react\",\n    \"githubUrl\": \"https://github.com/cometchat/cometchat-uikit-react\",\n    \"description\": \"Voice & Video Calling and Text Chat App for React (JavaScript/Web)\",\n    \"owner\": \"cometchat\",\n    \"repo\": \"cometchat-uikit-react\"\n  },\n  \"CometChat UIKit React Native\": {\n    \"title\": \"CometChat UIKit React Native\",\n    \"repoName\": \"cometchat/cometchat-uikit-react-native\",\n    \"githubUrl\": \"https://github.com/cometchat/cometchat-uikit-react-native\",\n    \"description\": \"Voice & Video Calling and Text Chat App for React Native\",\n    \"owner\": \"cometchat\",\n    \"repo\": \"cometchat-uikit-react-native\"\n  },\n  \"ComfyUI\": {\n    \"title\": \"ComfyUI\",\n    \"repoName\": \"comfyanonymous/comfyui\",\n    \"githubUrl\": \"https://github.com/comfyanonymous/comfyui\",\n    \"description\": \"The most powerful and modular diffusion model GUI, api and backend with a graph/nodes interface.\",\n    \"owner\": \"comfyanonymous\",\n    \"repo\": \"comfyui\"\n  },\n  \"commercetools\": {\n    \"title\": \"commercetools\",\n    \"repoName\": \"commercetools/commercetools-api-reference\",\n    \"githubUrl\": \"https://github.com/commercetools/commercetools-api-reference\",\n    \"description\": \"commercetools API reference documentation\",\n    \"owner\": \"commercetools\",\n    \"repo\": \"commercetools-api-reference\"\n  },\n  \".NET MAUI Community Toolkit\": {\n    \"title\": \".NET MAUI Community Toolkit\",\n    \"repoName\": \"communitytoolkit/maui.git\",\n    \"githubUrl\": \"https://github.com/communitytoolkit/maui.git\",\n    \"description\": \"The .NET MAUI Community Toolkit is a community-created library that contains .NET MAUI Extensions, Advanced UI/UX Controls, and Behaviors to help make your life as a .NET MAUI developer easier\",\n    \"owner\": \"communitytoolkit\",\n    \"repo\": \"maui.git\"\n  },\n  \"CommunityToolkit Windows\": {\n    \"title\": \"CommunityToolkit Windows\",\n    \"repoName\": \"communitytoolkit/windows\",\n    \"githubUrl\": \"https://github.com/communitytoolkit/windows\",\n    \"description\": \"Collection of controls, helpers and extension for WinUI 2, WinUI 3, and Uno Platform developers. Simplifies and demonstrates common developer tasks building experiences for Windows with .NET.\",\n    \"owner\": \"communitytoolkit\",\n    \"repo\": \"windows\"\n  },\n  \"Windows Community Toolkit\": {\n    \"title\": \"Windows Community Toolkit\",\n    \"repoName\": \"communitytoolkit/windowscommunitytoolkit\",\n    \"githubUrl\": \"https://github.com/communitytoolkit/windowscommunitytoolkit\",\n    \"description\": \"The Windows Community Toolkit is a collection of helpers, extensions, and custom controls. It simplifies and demonstrates common developer tasks building .NET apps with UWP and the Windows App SDK / WinUI 3 for Windows 10 and Windows 11. The toolkit is part of the .NET Foundation.\",\n    \"owner\": \"communitytoolkit\",\n    \"repo\": \"windowscommunitytoolkit\"\n  },\n  \"Composio\": {\n    \"title\": \"Composio\",\n    \"repoName\": \"composiohq/composio\",\n    \"githubUrl\": \"https://github.com/composiohq/composio\",\n    \"description\": \"Composio equip's your AI agents & LLMs with 100+ high-quality integrations via function calling\",\n    \"owner\": \"composiohq\",\n    \"repo\": \"composio\"\n  },\n  \"Miniforge\": {\n    \"title\": \"Miniforge\",\n    \"repoName\": \"conda-forge/miniforge\",\n    \"githubUrl\": \"https://github.com/conda-forge/miniforge\",\n    \"description\": \"A conda-forge distribution.\",\n    \"owner\": \"conda-forge\",\n    \"repo\": \"miniforge\"\n  },\n  \"Conda\": {\n    \"title\": \"Conda\",\n    \"repoName\": \"conda/conda-docs\",\n    \"githubUrl\": \"https://github.com/conda/conda-docs\",\n    \"description\": \"Conda documentation\",\n    \"owner\": \"conda\",\n    \"repo\": \"conda-docs\"\n  },\n  \"Pumpkin\": {\n    \"title\": \"Pumpkin\",\n    \"repoName\": \"consol-lab/pumpkin\",\n    \"githubUrl\": \"https://github.com/consol-lab/pumpkin\",\n    \"description\": \"A lazy clause generation constraint solver written in Rust.\",\n    \"owner\": \"consol-lab\",\n    \"repo\": \"pumpkin\"\n  },\n  \"Containerd\": {\n    \"title\": \"Containerd\",\n    \"repoName\": \"containerd/containerd\",\n    \"githubUrl\": \"https://github.com/containerd/containerd\",\n    \"description\": \"An open and reliable container runtime\",\n    \"owner\": \"containerd\",\n    \"repo\": \"containerd\"\n  },\n  \"Contentful.js\": {\n    \"title\": \"Contentful.js\",\n    \"repoName\": \"contentful/contentful.js\",\n    \"githubUrl\": \"https://github.com/contentful/contentful.js\",\n    \"description\": \"JavaScript library for Contentful's Delivery API (node & browser)\",\n    \"owner\": \"contentful\",\n    \"repo\": \"contentful.js\"\n  },\n  \"Experience Builder\": {\n    \"title\": \"Experience Builder\",\n    \"repoName\": \"contentful/experience-builder\",\n    \"githubUrl\": \"https://github.com/contentful/experience-builder\",\n    \"description\": \"\",\n    \"owner\": \"contentful\",\n    \"repo\": \"experience-builder\"\n  },\n  \"Context Generator\": {\n    \"title\": \"Context Generator\",\n    \"repoName\": \"context-hub/docs\",\n    \"githubUrl\": \"https://github.com/context-hub/docs\",\n    \"description\": \"Context Generator documentation.\",\n    \"owner\": \"context-hub\",\n    \"repo\": \"docs\"\n  },\n  \"Continue\": {\n    \"title\": \"Continue\",\n    \"repoName\": \"continuedev/continue\",\n    \"githubUrl\": \"https://github.com/continuedev/continue\",\n    \"description\": \"⏩ Create, share, and use custom AI code assistants with our open-source IDE extensions and hub of models, rules, prompts, docs, and other building blocks\",\n    \"owner\": \"continuedev\",\n    \"repo\": \"continue\"\n  },\n  \"Conventional Commits\": {\n    \"title\": \"Conventional Commits\",\n    \"repoName\": \"conventional-commits/conventionalcommits.org\",\n    \"githubUrl\": \"https://github.com/conventional-commits/conventionalcommits.org\",\n    \"description\": \"The conventional commits specification\",\n    \"owner\": \"conventional-commits\",\n    \"repo\": \"conventionalcommits.org\"\n  },\n  \"Cookiecutter Django\": {\n    \"title\": \"Cookiecutter Django\",\n    \"repoName\": \"cookiecutter/cookiecutter-django\",\n    \"githubUrl\": \"https://github.com/cookiecutter/cookiecutter-django\",\n    \"description\": \"Cookiecutter Django is a framework for jumpstarting production-ready Django projects quickly.\",\n    \"owner\": \"cookiecutter\",\n    \"repo\": \"cookiecutter-django\"\n  },\n  \"Coolify\": {\n    \"title\": \"Coolify\",\n    \"repoName\": \"coollabsio/documentation-coolify\",\n    \"githubUrl\": \"https://github.com/coollabsio/documentation-coolify\",\n    \"description\": \"Documentation for Coolify\",\n    \"owner\": \"coollabsio\",\n    \"repo\": \"documentation-coolify\"\n  },\n  \"CopilotKit\": {\n    \"title\": \"CopilotKit\",\n    \"repoName\": \"copilotkit/copilotkit\",\n    \"githubUrl\": \"https://github.com/copilotkit/copilotkit\",\n    \"description\": \"React UI + elegant infrastructure for AI Copilots, AI chatbots, and in-app AI agents. The Agentic last-mile 🪁\",\n    \"owner\": \"copilotkit\",\n    \"repo\": \"copilotkit\"\n  },\n  \"Cornerstone\": {\n    \"title\": \"Cornerstone\",\n    \"repoName\": \"cornerstonejs/cornerstone3d\",\n    \"githubUrl\": \"https://github.com/cornerstonejs/cornerstone3d\",\n    \"description\": \"Cornerstone is a set of JavaScript libraries that can be used to build web-based medical imaging applications. It provides a framework to build radiology applications such as the OHIF Viewer.\",\n    \"owner\": \"cornerstonejs\",\n    \"repo\": \"cornerstone3d\"\n  },\n  \"Corvus JsonSchema\": {\n    \"title\": \"Corvus JsonSchema\",\n    \"repoName\": \"corvus-dotnet/corvus.jsonschema\",\n    \"githubUrl\": \"https://github.com/corvus-dotnet/corvus.jsonschema\",\n    \"description\": \"Support for Json Schema validation and entity generation\",\n    \"owner\": \"corvus-dotnet\",\n    \"repo\": \"corvus.jsonschema\"\n  },\n  \"Cosmos SDK\": {\n    \"title\": \"Cosmos SDK\",\n    \"repoName\": \"cosmos/cosmos-sdk\",\n    \"githubUrl\": \"https://github.com/cosmos/cosmos-sdk\",\n    \"description\": \":chains: A Framework for Building High Value Public Blockchains :sparkles:\",\n    \"owner\": \"cosmos\",\n    \"repo\": \"cosmos-sdk\"\n  },\n  \"Craft CMS\": {\n    \"title\": \"Craft CMS\",\n    \"repoName\": \"craftcms/docs\",\n    \"githubUrl\": \"https://github.com/craftcms/docs\",\n    \"description\": \"Documentation for Craft CMS, Craft Commerce, and other official products.\",\n    \"owner\": \"craftcms\",\n    \"repo\": \"docs\"\n  },\n  \"Exams\": {\n    \"title\": \"Exams\",\n    \"repoName\": \"cran/exams.git\",\n    \"githubUrl\": \"https://github.com/cran/exams.git\",\n    \"description\": \":exclamation: This is a read-only mirror of the CRAN R package repository.  exams — Automatic Generation of Exams in R. Homepage: https://www.R-exams.org/  Report bugs for this package: https://www.R-exams.org/contact/\",\n    \"owner\": \"cran\",\n    \"repo\": \"exams.git\"\n  },\n  \"rENA\": {\n    \"title\": \"rENA\",\n    \"repoName\": \"cran/rena\",\n    \"githubUrl\": \"https://github.com/cran/rena\",\n    \"description\": \":exclamation: This is a read-only mirror of the CRAN R package repository.  rENA — Epistemic Network Analysis. Homepage: https://gitlab.com/epistemic-analytics/qe-packages/rENA  Report bugs for this package: https://gitlab.com/epistemic-analytics/qe-packages/rENA/-/issues\",\n    \"owner\": \"cran\",\n    \"repo\": \"rena\"\n  },\n  \"Three Nebula\": {\n    \"title\": \"Three Nebula\",\n    \"repoName\": \"creativelifeform/three-nebula\",\n    \"githubUrl\": \"https://github.com/creativelifeform/three-nebula\",\n    \"description\": \"WebGL based particle system engine for three.js\",\n    \"owner\": \"creativelifeform\",\n    \"repo\": \"three-nebula\"\n  },\n  \"CrewAI\": {\n    \"title\": \"CrewAI\",\n    \"repoName\": \"crewaiinc/crewai\",\n    \"githubUrl\": \"https://github.com/crewaiinc/crewai\",\n    \"description\": \"Framework for orchestrating role-playing, autonomous AI agents. By fostering collaborative intelligence, CrewAI empowers agents to work together seamlessly, tackling complex tasks.\",\n    \"owner\": \"crewaiinc\",\n    \"repo\": \"crewai\"\n  },\n  \"AdsPower\": {\n    \"title\": \"AdsPower\",\n    \"repoName\": \"crocofactory/adspower\",\n    \"githubUrl\": \"https://github.com/crocofactory/adspower\",\n    \"description\": \"The package for interacting with anti-detect browser AdsPower API\",\n    \"owner\": \"crocofactory\",\n    \"repo\": \"adspower\"\n  },\n  \"Function PKL\": {\n    \"title\": \"Function PKL\",\n    \"repoName\": \"crossplane-contrib/function-pkl\",\n    \"githubUrl\": \"https://github.com/crossplane-contrib/function-pkl\",\n    \"description\": \"An @apple pkl composition function\",\n    \"owner\": \"crossplane-contrib\",\n    \"repo\": \"function-pkl\"\n  },\n  \"Crossplane Function Shell\": {\n    \"title\": \"Crossplane Function Shell\",\n    \"repoName\": \"crossplane-contrib/function-shell\",\n    \"githubUrl\": \"https://github.com/crossplane-contrib/function-shell\",\n    \"description\": \"\",\n    \"owner\": \"crossplane-contrib\",\n    \"repo\": \"function-shell\"\n  },\n  \"Crossplane\": {\n    \"title\": \"Crossplane\",\n    \"repoName\": \"crossplane/docs\",\n    \"githubUrl\": \"https://github.com/crossplane/docs\",\n    \"description\": \"Repo for Crossplane documentation.\",\n    \"owner\": \"crossplane\",\n    \"repo\": \"docs\"\n  },\n  \"Pathviz\": {\n    \"title\": \"Pathviz\",\n    \"repoName\": \"crystalfiction/pathviz\",\n    \"githubUrl\": \"https://github.com/crystalfiction/pathviz\",\n    \"description\": \"A path logging and visualization tool for Dwarf Fortress\",\n    \"owner\": \"crystalfiction\",\n    \"repo\": \"pathviz\"\n  },\n  \"Cssnano\": {\n    \"title\": \"Cssnano\",\n    \"repoName\": \"cssnano/cssnano\",\n    \"githubUrl\": \"https://github.com/cssnano/cssnano\",\n    \"description\": \"A modular minifier, built on top of the PostCSS ecosystem.\",\n    \"owner\": \"cssnano\",\n    \"repo\": \"cssnano\"\n  },\n  \"Cube\": {\n    \"title\": \"Cube\",\n    \"repoName\": \"cube-js/cube\",\n    \"githubUrl\": \"https://github.com/cube-js/cube\",\n    \"description\": \"📊 Cube’s universal semantic layer platform is the next evolution of OLAP technology for AI, BI, spreadsheets, and embedded analytics\",\n    \"owner\": \"cube-js\",\n    \"repo\": \"cube\"\n  },\n  \"Cucumber\": {\n    \"title\": \"Cucumber\",\n    \"repoName\": \"cucumber/docs\",\n    \"githubUrl\": \"https://github.com/cucumber/docs\",\n    \"description\": \"Cucumber user documentation\",\n    \"owner\": \"cucumber\",\n    \"repo\": \"docs\"\n  },\n  \"CuPy\": {\n    \"title\": \"CuPy\",\n    \"repoName\": \"cupy/cupy\",\n    \"githubUrl\": \"https://github.com/cupy/cupy\",\n    \"description\": \"NumPy & SciPy for GPU\",\n    \"owner\": \"cupy\",\n    \"repo\": \"cupy\"\n  },\n  \"Cycle ORM\": {\n    \"title\": \"Cycle ORM\",\n    \"repoName\": \"cycle/docs\",\n    \"githubUrl\": \"https://github.com/cycle/docs\",\n    \"description\": \"Cycle ORM Documentation\",\n    \"owner\": \"cycle\",\n    \"repo\": \"docs\"\n  },\n  \"Cypress\": {\n    \"title\": \"Cypress\",\n    \"repoName\": \"cypress-io/cypress-documentation\",\n    \"githubUrl\": \"https://github.com/cypress-io/cypress-documentation\",\n    \"description\": \"Cypress Documentation for the Cypress App, API, Cypress Cloud, UI Coverage and Cypress Accessibility.\",\n    \"owner\": \"cypress-io\",\n    \"repo\": \"cypress-documentation\"\n  },\n  \"UniTask\": {\n    \"title\": \"UniTask\",\n    \"repoName\": \"cysharp/unitask\",\n    \"githubUrl\": \"https://github.com/cysharp/unitask\",\n    \"description\": \"Provides an efficient allocation free async/await integration for Unity.\",\n    \"owner\": \"cysharp\",\n    \"repo\": \"unitask\"\n  },\n  \"ZString\": {\n    \"title\": \"ZString\",\n    \"repoName\": \"cysharp/zstring\",\n    \"githubUrl\": \"https://github.com/cysharp/zstring\",\n    \"description\": \"Zero Allocation StringBuilder for .NET and Unity.\",\n    \"owner\": \"cysharp\",\n    \"repo\": \"zstring\"\n  },\n  \"D3\": {\n    \"title\": \"D3\",\n    \"repoName\": \"d3/d3\",\n    \"githubUrl\": \"https://github.com/d3/d3\",\n    \"description\": \"Bring data to life with SVG, Canvas and HTML. :bar_chart::chart_with_upwards_trend::tada:\",\n    \"owner\": \"d3\",\n    \"repo\": \"d3\"\n  },\n  \"Dagger\": {\n    \"title\": \"Dagger\",\n    \"repoName\": \"dagger/dagger.git\",\n    \"githubUrl\": \"https://github.com/dagger/dagger.git\",\n    \"description\": \"An open-source runtime for composable workflows. Great for AI agents and CI/CD.\",\n    \"owner\": \"dagger\",\n    \"repo\": \"dagger.git\"\n  },\n  \"Dagster\": {\n    \"title\": \"Dagster\",\n    \"repoName\": \"dagster-io/dagster\",\n    \"githubUrl\": \"https://github.com/dagster-io/dagster\",\n    \"description\": \"An orchestration platform for the development, production, and observation of data assets.\",\n    \"owner\": \"dagster-io\",\n    \"repo\": \"dagster\"\n  },\n  \"Daily Client SDK for Python\": {\n    \"title\": \"Daily Client SDK for Python\",\n    \"repoName\": \"daily-co/daily-python\",\n    \"githubUrl\": \"https://github.com/daily-co/daily-python\",\n    \"description\": \"Daily Client SDK for Python\",\n    \"owner\": \"daily-co\",\n    \"repo\": \"daily-python\"\n  },\n  \"Prompt Engineering Guide\": {\n    \"title\": \"Prompt Engineering Guide\",\n    \"repoName\": \"dair-ai/prompt-engineering-guide\",\n    \"githubUrl\": \"https://github.com/dair-ai/prompt-engineering-guide\",\n    \"description\": \"🐙 Guides, papers, lecture, notebooks and resources for prompt engineering\",\n    \"owner\": \"dair-ai\",\n    \"repo\": \"prompt-engineering-guide\"\n  },\n  \"Python BetterProto\": {\n    \"title\": \"Python BetterProto\",\n    \"repoName\": \"danielgtaylor/python-betterproto\",\n    \"githubUrl\": \"https://github.com/danielgtaylor/python-betterproto\",\n    \"description\": \"Clean, modern, Python 3.6+ code generator & library for Protobuf 3 and async gRPC\",\n    \"owner\": \"danielgtaylor\",\n    \"repo\": \"python-betterproto\"\n  },\n  \"Fabric\": {\n    \"title\": \"Fabric\",\n    \"repoName\": \"fabricmc/fabric-docs\",\n    \"githubUrl\": \"https://github.com/fabricmc/fabric-docs\",\n    \"description\": \"Official curated documentation for Fabric, a modding toolchain for Minecraft.\",\n    \"owner\": \"fabricmc\",\n    \"repo\": \"fabric-docs\"\n  },\n  \"Zero Vue\": {\n    \"title\": \"Zero Vue\",\n    \"repoName\": \"danielroe/zero-vue\",\n    \"githubUrl\": \"https://github.com/danielroe/zero-vue\",\n    \"description\": \"Vue bindings for Zero\",\n    \"owner\": \"danielroe\",\n    \"repo\": \"zero-vue\"\n  },\n  \"Civet\": {\n    \"title\": \"Civet\",\n    \"repoName\": \"danielxmoore/civet\",\n    \"githubUrl\": \"https://github.com/danielxmoore/civet\",\n    \"description\": \"A TypeScript superset that favors more types and less typing\",\n    \"owner\": \"danielxmoore\",\n    \"repo\": \"civet\"\n  },\n  \"React Content Loader\": {\n    \"title\": \"React Content Loader\",\n    \"repoName\": \"danilowoz/react-content-loader\",\n    \"githubUrl\": \"https://github.com/danilowoz/react-content-loader\",\n    \"description\": \"⚪ SVG-Powered component to easily create skeleton loadings.\",\n    \"owner\": \"danilowoz\",\n    \"repo\": \"react-content-loader\"\n  },\n  \"LibreChat\": {\n    \"title\": \"LibreChat\",\n    \"repoName\": \"danny-avila/librechat\",\n    \"githubUrl\": \"https://github.com/danny-avila/librechat\",\n    \"description\": \"Enhanced ChatGPT Clone: Features Agents, DeepSeek, Anthropic, AWS, OpenAI, Assistants API, Azure, Groq, o1, GPT-4o, Mistral, OpenRouter, Vertex AI, Gemini, Artifacts, AI model switching, message search, Code Interpreter, langchain, DALL-E-3, OpenAPI Actions, Functions, Secure Multi-User Auth, Presets, open-source for self-hosting. Active project.\",\n    \"owner\": \"danny-avila\",\n    \"repo\": \"librechat\"\n  },\n  \"ZIM\": {\n    \"title\": \"ZIM\",\n    \"repoName\": \"danzen/zimjs\",\n    \"githubUrl\": \"https://github.com/danzen/zimjs\",\n    \"description\": \"ZIM JavaScript Canvas Framework - Code Creativity! Interactive Media For All.\",\n    \"owner\": \"danzen\",\n    \"repo\": \"zimjs\"\n  },\n  \"Dapper\": {\n    \"title\": \"Dapper\",\n    \"repoName\": \"dapperlib/dapper\",\n    \"githubUrl\": \"https://github.com/dapperlib/dapper\",\n    \"description\": \"Dapper - a simple object mapper for .Net\",\n    \"owner\": \"dapperlib\",\n    \"repo\": \"dapper\"\n  },\n  \"Dapr\": {\n    \"title\": \"Dapr\",\n    \"repoName\": \"dapr/docs\",\n    \"githubUrl\": \"https://github.com/dapr/docs\",\n    \"description\": \"Dapr user documentation, used to build docs.dapr.io\",\n    \"owner\": \"dapr\",\n    \"repo\": \"docs\"\n  },\n  \"Dart\": {\n    \"title\": \"Dart\",\n    \"repoName\": \"dart-lang/site-www\",\n    \"githubUrl\": \"https://github.com/dart-lang/site-www\",\n    \"description\": \"The source for the Dart website.\",\n    \"owner\": \"dart-lang\",\n    \"repo\": \"site-www\"\n  },\n  \"Dask\": {\n    \"title\": \"Dask\",\n    \"repoName\": \"dask/dask\",\n    \"githubUrl\": \"https://github.com/dask/dask\",\n    \"description\": \"Parallel computing with task scheduling\",\n    \"owner\": \"dask\",\n    \"repo\": \"dask\"\n  },\n  \"Datadog Agent\": {\n    \"title\": \"Datadog Agent\",\n    \"repoName\": \"datadog/datadog-agent\",\n    \"githubUrl\": \"https://github.com/datadog/datadog-agent\",\n    \"description\": \"Main repository for Datadog Agent\",\n    \"owner\": \"datadog\",\n    \"repo\": \"datadog-agent\"\n  },\n  \"DataForSEO PythonClient\": {\n    \"title\": \"DataForSEO PythonClient\",\n    \"repoName\": \"dataforseo/pythonclient\",\n    \"githubUrl\": \"https://github.com/dataforseo/pythonclient\",\n    \"description\": \"\",\n    \"owner\": \"dataforseo\",\n    \"repo\": \"pythonclient\"\n  },\n  \"DataTables\": {\n    \"title\": \"DataTables\",\n    \"repoName\": \"datatables/datatables\",\n    \"githubUrl\": \"https://github.com/datatables/datatables\",\n    \"description\": \"Tables plug-in for jQuery\",\n    \"owner\": \"datatables\",\n    \"repo\": \"datatables\"\n  },\n  \"Date-fns\": {\n    \"title\": \"Date-fns\",\n    \"repoName\": \"date-fns/date-fns\",\n    \"githubUrl\": \"https://github.com/date-fns/date-fns\",\n    \"description\": \"⏳ Modern JavaScript date utility library ⌛️\",\n    \"owner\": \"date-fns\",\n    \"repo\": \"date-fns\"\n  },\n  \"DatoCMS React\": {\n    \"title\": \"DatoCMS React\",\n    \"repoName\": \"datocms/react-datocms\",\n    \"githubUrl\": \"https://github.com/datocms/react-datocms\",\n    \"description\": \"A set of components and utilities to work faster with DatoCMS in React environments\",\n    \"owner\": \"datocms\",\n    \"repo\": \"react-datocms\"\n  },\n  \"AI Cookbook\": {\n    \"title\": \"AI Cookbook\",\n    \"repoName\": \"daveebbelaar/ai-cookbook\",\n    \"githubUrl\": \"https://github.com/daveebbelaar/ai-cookbook\",\n    \"description\": \"Examples and tutorials to help developers build AI systems\",\n    \"owner\": \"daveebbelaar\",\n    \"repo\": \"ai-cookbook\"\n  },\n  \"Better Auth UI\": {\n    \"title\": \"Better Auth UI\",\n    \"repoName\": \"daveyplate/better-auth-ui\",\n    \"githubUrl\": \"https://github.com/daveyplate/better-auth-ui\",\n    \"description\": \"Beautiful shadcn/ui components built for better-auth.\",\n    \"owner\": \"daveyplate\",\n    \"repo\": \"better-auth-ui\"\n  },\n  \"PyWa\": {\n    \"title\": \"PyWa\",\n    \"repoName\": \"david-lev/pywa\",\n    \"githubUrl\": \"https://github.com/david-lev/pywa\",\n    \"description\": \"🤖 Hey there! I am using PyWa.\",\n    \"owner\": \"david-lev\",\n    \"repo\": \"pywa\"\n  },\n  \"ASP.NET Core Diagnostic Scenarios\": {\n    \"title\": \"ASP.NET Core Diagnostic Scenarios\",\n    \"repoName\": \"davidfowl/aspnetcorediagnosticscenarios\",\n    \"githubUrl\": \"https://github.com/davidfowl/aspnetcorediagnosticscenarios\",\n    \"description\": \"This repository has examples of broken patterns in ASP.NET Core applications\",\n    \"owner\": \"davidfowl\",\n    \"repo\": \"aspnetcorediagnosticscenarios\"\n  },\n  \"SmartLoadBalancer\": {\n    \"title\": \"SmartLoadBalancer\",\n    \"repoName\": \"davidfowl/smartloadbalancer\",\n    \"githubUrl\": \"https://github.com/davidfowl/smartloadbalancer\",\n    \"description\": \"Sticky sessions without sticky sessions\",\n    \"owner\": \"davidfowl\",\n    \"repo\": \"smartloadbalancer\"\n  },\n  \"Embla Carousel\": {\n    \"title\": \"Embla Carousel\",\n    \"repoName\": \"davidjerleke/embla-carousel\",\n    \"githubUrl\": \"https://github.com/davidjerleke/embla-carousel\",\n    \"description\": \"A lightweight carousel library with fluid motion and great swipe precision.\",\n    \"owner\": \"davidjerleke\",\n    \"repo\": \"embla-carousel\"\n  },\n  \"CloudBeaver\": {\n    \"title\": \"CloudBeaver\",\n    \"repoName\": \"dbeaver/cloudbeaver\",\n    \"githubUrl\": \"https://github.com/dbeaver/cloudbeaver\",\n    \"description\": \"Cloud Database Manager\",\n    \"owner\": \"dbeaver\",\n    \"repo\": \"cloudbeaver\"\n  },\n  \"Pytest PostgreSQL\": {\n    \"title\": \"Pytest PostgreSQL\",\n    \"repoName\": \"dbfixtures/pytest-postgresql\",\n    \"githubUrl\": \"https://github.com/dbfixtures/pytest-postgresql\",\n    \"description\": \"This is a pytest plugin, that enables you to test your code that relies on a running PostgreSQL Database. It allows you to specify fixtures for PostgreSQL process and client.\",\n    \"owner\": \"dbfixtures\",\n    \"repo\": \"pytest-postgresql\"\n  },\n  \"DBOS Transact\": {\n    \"title\": \"DBOS Transact\",\n    \"repoName\": \"dbos-inc/dbos-transact-py\",\n    \"githubUrl\": \"https://github.com/dbos-inc/dbos-transact-py\",\n    \"description\": \"Ultra-Lightweight Durable Execution in Python\",\n    \"owner\": \"dbos-inc\",\n    \"repo\": \"dbos-transact-py\"\n  },\n  \"Expression\": {\n    \"title\": \"Expression\",\n    \"repoName\": \"dbrattli/expression\",\n    \"githubUrl\": \"https://github.com/dbrattli/expression\",\n    \"description\": \"Functional programming for Python\",\n    \"owner\": \"dbrattli\",\n    \"repo\": \"expression\"\n  },\n  \"dbt\": {\n    \"title\": \"dbt\",\n    \"repoName\": \"dbt-labs/docs.getdbt.com\",\n    \"githubUrl\": \"https://github.com/dbt-labs/docs.getdbt.com\",\n    \"description\": \"The code behind docs.getdbt.com\",\n    \"owner\": \"dbt-labs\",\n    \"repo\": \"docs.getdbt.com\"\n  },\n  \"Next Export Optimize Images\": {\n    \"title\": \"Next Export Optimize Images\",\n    \"repoName\": \"dc7290/next-export-optimize-images\",\n    \"githubUrl\": \"https://github.com/dc7290/next-export-optimize-images\",\n    \"description\": \"Optimize images at build time with Next.js.\",\n    \"owner\": \"dc7290\",\n    \"repo\": \"next-export-optimize-images\"\n  },\n  \"Bcrypt.js\": {\n    \"title\": \"Bcrypt.js\",\n    \"repoName\": \"dcodeio/bcrypt.js\",\n    \"githubUrl\": \"https://github.com/dcodeio/bcrypt.js\",\n    \"description\": \"Optimized bcrypt in JavaScript with zero dependencies, with TypeScript support.\",\n    \"owner\": \"dcodeio\",\n    \"repo\": \"bcrypt.js\"\n  },\n  \"Meta Vision API\": {\n    \"title\": \"Meta Vision API\",\n    \"repoName\": \"dcrebbin/meta-vision-api\",\n    \"githubUrl\": \"https://github.com/dcrebbin/meta-vision-api\",\n    \"description\": \"Hacky Meta Glasses API with GPT4 Vision Integration\",\n    \"owner\": \"dcrebbin\",\n    \"repo\": \"meta-vision-api\"\n  },\n  \"DCSA OpenAPI\": {\n    \"title\": \"DCSA OpenAPI\",\n    \"repoName\": \"dcsaorg/dcsa-openapi\",\n    \"githubUrl\": \"https://github.com/dcsaorg/dcsa-openapi\",\n    \"description\": \"DCSA - Digital Container Shipping Association\",\n    \"owner\": \"dcsaorg\",\n    \"repo\": \"dcsa-openapi\"\n  },\n  \"DDEV\": {\n    \"title\": \"DDEV\",\n    \"repoName\": \"ddev/ddev\",\n    \"githubUrl\": \"https://github.com/ddev/ddev\",\n    \"description\": \"Docker-based local PHP+Node.js web development environments\",\n    \"owner\": \"ddev\",\n    \"repo\": \"ddev\"\n  },\n  \"Crop Image\": {\n    \"title\": \"Crop Image\",\n    \"repoName\": \"deakjahn/crop_image\",\n    \"githubUrl\": \"https://github.com/deakjahn/crop_image\",\n    \"description\": \"An image cropper widget. Supports mobile, web and desktop.\",\n    \"owner\": \"deakjahn\",\n    \"repo\": \"crop_image\"\n  },\n  \"Decap CMS\": {\n    \"title\": \"Decap CMS\",\n    \"repoName\": \"decaporg/decap-cms\",\n    \"githubUrl\": \"https://github.com/decaporg/decap-cms\",\n    \"description\": \"A Git-based CMS for Static Site Generators\",\n    \"owner\": \"decaporg\",\n    \"repo\": \"decap-cms\"\n  },\n  \"Decentraland SDK 7 Utils\": {\n    \"title\": \"Decentraland SDK 7 Utils\",\n    \"repoName\": \"decentraland/sdk7-utils\",\n    \"githubUrl\": \"https://github.com/decentraland/sdk7-utils\",\n    \"description\": \"SDK 7 Utils Library \",\n    \"owner\": \"decentraland\",\n    \"repo\": \"sdk7-utils\"\n  },\n  \"Deepgram JavaScript SDK\": {\n    \"title\": \"Deepgram JavaScript SDK\",\n    \"repoName\": \"deepgram/deepgram-js-sdk\",\n    \"githubUrl\": \"https://github.com/deepgram/deepgram-js-sdk\",\n    \"description\": \"Official JavaScript SDK for Deepgram.\",\n    \"owner\": \"deepgram\",\n    \"repo\": \"deepgram-js-sdk\"\n  },\n  \"Deephaven Plugins\": {\n    \"title\": \"Deephaven Plugins\",\n    \"repoName\": \"deephaven/deephaven-plugins\",\n    \"githubUrl\": \"https://github.com/deephaven/deephaven-plugins\",\n    \"description\": \"Deephaven Plugins\",\n    \"owner\": \"deephaven\",\n    \"repo\": \"deephaven-plugins\"\n  },\n  \"DeepSeek R1\": {\n    \"title\": \"DeepSeek R1\",\n    \"repoName\": \"deepseek-ai/deepseek-r1\",\n    \"githubUrl\": \"https://github.com/deepseek-ai/deepseek-r1\",\n    \"description\": \"\",\n    \"owner\": \"deepseek-ai\",\n    \"repo\": \"deepseek-r1\"\n  },\n  \"Haystack\": {\n    \"title\": \"Haystack\",\n    \"repoName\": \"deepset-ai/haystack\",\n    \"githubUrl\": \"https://github.com/deepset-ai/haystack\",\n    \"description\": \"AI orchestration framework to build customizable, production-ready LLM applications. Connect components (models, vector DBs, file converters) to pipelines or agents that can interact with your data. With advanced retrieval methods, it's best suited for building RAG, question answering, semantic search or conversational agent chatbots.\",\n    \"owner\": \"deepset-ai\",\n    \"repo\": \"haystack\"\n  },\n  \"DeepSpeed\": {\n    \"title\": \"DeepSpeed\",\n    \"repoName\": \"deepspeedai/deepspeed\",\n    \"githubUrl\": \"https://github.com/deepspeedai/deepspeed\",\n    \"description\": \"DeepSpeed is a deep learning optimization library that makes distributed training and inference easy, efficient, and effective.\",\n    \"owner\": \"deepspeedai\",\n    \"repo\": \"deepspeed\"\n  },\n  \"Loguru\": {\n    \"title\": \"Loguru\",\n    \"repoName\": \"delgan/loguru\",\n    \"githubUrl\": \"https://github.com/delgan/loguru\",\n    \"description\": \"Python logging made (stupidly) simple\",\n    \"owner\": \"delgan\",\n    \"repo\": \"loguru\"\n  },\n  \"Delta RS\": {\n    \"title\": \"Delta RS\",\n    \"repoName\": \"delta-io/delta-rs\",\n    \"githubUrl\": \"https://github.com/delta-io/delta-rs\",\n    \"description\": \"A native Rust library for Delta Lake, with bindings into Python\",\n    \"owner\": \"delta-io\",\n    \"repo\": \"delta-rs\"\n  },\n  \"Deno\": {\n    \"title\": \"Deno\",\n    \"repoName\": \"denoland/deno\",\n    \"githubUrl\": \"https://github.com/denoland/deno\",\n    \"description\": \"A modern runtime for JavaScript and TypeScript.\",\n    \"owner\": \"denoland\",\n    \"repo\": \"deno\"\n  },\n  \"Fresh\": {\n    \"title\": \"Fresh\",\n    \"repoName\": \"denoland/fresh\",\n    \"githubUrl\": \"https://github.com/denoland/fresh\",\n    \"description\": \"The next-gen web framework.\",\n    \"owner\": \"denoland\",\n    \"repo\": \"fresh\"\n  },\n  \"Deployer\": {\n    \"title\": \"Deployer\",\n    \"repoName\": \"deployphp/deployer\",\n    \"githubUrl\": \"https://github.com/deployphp/deployer\",\n    \"description\": \"The PHP deployment tool with support for popular frameworks out of the box\",\n    \"owner\": \"deployphp\",\n    \"repo\": \"deployer\"\n  },\n  \"Crystal Guava Expert System\": {\n    \"title\": \"Crystal Guava Expert System\",\n    \"repoName\": \"deri-kurniawan/sipbuk\",\n    \"githubUrl\": \"https://github.com/deri-kurniawan/sipbuk\",\n    \"description\": \"Crystal Guava Expert System with Certainty Factor Method Implementation (Deprecated PlanetScale Database Hobby Plan on April 8, 2024)\",\n    \"owner\": \"deri-kurniawan\",\n    \"repo\": \"sipbuk\"\n  },\n  \"Odoo 17 Documentation\": {\n    \"title\": \"Odoo 17 Documentation\",\n    \"repoName\": \"desarrollosur/odoo17docs\",\n    \"githubUrl\": \"https://github.com/desarrollosur/odoo17docs\",\n    \"owner\": \"desarrollosur\",\n    \"repo\": \"odoo17docs\"\n  },\n  \"Descope Flutter\": {\n    \"title\": \"Descope Flutter\",\n    \"repoName\": \"descope/descope-flutter\",\n    \"githubUrl\": \"https://github.com/descope/descope-flutter\",\n    \"description\": \"Flutter library used to integrate with Descope\",\n    \"owner\": \"descope\",\n    \"repo\": \"descope-flutter\"\n  },\n  \"Descope JS\": {\n    \"title\": \"Descope JS\",\n    \"repoName\": \"descope/descope-js\",\n    \"githubUrl\": \"https://github.com/descope/descope-js\",\n    \"description\": \"Descope JavaScript Packages \",\n    \"owner\": \"descope\",\n    \"repo\": \"descope-js\"\n  },\n  \"Descope Kotlin\": {\n    \"title\": \"Descope Kotlin\",\n    \"repoName\": \"descope/descope-kotlin\",\n    \"githubUrl\": \"https://github.com/descope/descope-kotlin\",\n    \"description\": \"Kotlin library (Android) used to integrate with Descope\",\n    \"owner\": \"descope\",\n    \"repo\": \"descope-kotlin\"\n  },\n  \"Descope Swift\": {\n    \"title\": \"Descope Swift\",\n    \"repoName\": \"descope/descope-swift\",\n    \"githubUrl\": \"https://github.com/descope/descope-swift\",\n    \"description\": \"Swift library (iOS) used to integrate with Descope\",\n    \"owner\": \"descope\",\n    \"repo\": \"descope-swift\"\n  },\n  \"DeSo\": {\n    \"title\": \"DeSo\",\n    \"repoName\": \"deso-protocol/docs\",\n    \"githubUrl\": \"https://github.com/deso-protocol/docs\",\n    \"description\": \"DeSo Documentation\",\n    \"owner\": \"deso-protocol\",\n    \"repo\": \"docs\"\n  },\n  \"DevClad\": {\n    \"title\": \"DevClad\",\n    \"repoName\": \"devclad-inc/devclad\",\n    \"githubUrl\": \"https://github.com/devclad-inc/devclad\",\n    \"description\": \"DevClad is a social-workspace platform for developers. Network, build, and ship your ideas rapidly.\",\n    \"owner\": \"devclad-inc\",\n    \"repo\": \"devclad\"\n  },\n  \"Dev Containers CI\": {\n    \"title\": \"Dev Containers CI\",\n    \"repoName\": \"devcontainers/ci\",\n    \"githubUrl\": \"https://github.com/devcontainers/ci\",\n    \"description\": \"A GitHub Action and Azure DevOps Task designed to simplify using Dev Containers (https://containers.dev) in CI/CD systems.\",\n    \"owner\": \"devcontainers\",\n    \"repo\": \"ci\"\n  },\n  \"Dev Containers CLI\": {\n    \"title\": \"Dev Containers CLI\",\n    \"repoName\": \"devcontainers/cli\",\n    \"githubUrl\": \"https://github.com/devcontainers/cli\",\n    \"description\": \"A reference implementation for the specification that can create and configure a dev container from a devcontainer.json.\",\n    \"owner\": \"devcontainers\",\n    \"repo\": \"cli\"\n  },\n  \"Dev Containers Features\": {\n    \"title\": \"Dev Containers Features\",\n    \"repoName\": \"devcontainers/features\",\n    \"githubUrl\": \"https://github.com/devcontainers/features\",\n    \"description\": \"A collection of Dev Container Features managed by Dev Container spec maintainers. See https://github.com/devcontainers/feature-starter to publish your own\",\n    \"owner\": \"devcontainers\",\n    \"repo\": \"features\"\n  },\n  \"Dev Containers Images\": {\n    \"title\": \"Dev Containers Images\",\n    \"repoName\": \"devcontainers/images\",\n    \"githubUrl\": \"https://github.com/devcontainers/images\",\n    \"description\": \"Repository for pre-built dev container images published under mcr.microsoft.com/devcontainers\",\n    \"owner\": \"devcontainers\",\n    \"repo\": \"images\"\n  },\n  \"Development Containers\": {\n    \"title\": \"Development Containers\",\n    \"repoName\": \"devcontainers/spec\",\n    \"githubUrl\": \"https://github.com/devcontainers/spec\",\n    \"description\": \"Development Containers: Use a container as a full-featured development environment.\",\n    \"owner\": \"devcontainers\",\n    \"repo\": \"spec\"\n  },\n  \"Dev Containers Templates\": {\n    \"title\": \"Dev Containers Templates\",\n    \"repoName\": \"devcontainers/templates\",\n    \"githubUrl\": \"https://github.com/devcontainers/templates\",\n    \"description\": \"Repository for Dev Container Templates that are managed by Dev Container spec maintainers. See https://github.com/devcontainers/template-starter to create your own!\",\n    \"owner\": \"devcontainers\",\n    \"repo\": \"templates\"\n  },\n  \"DevExtreme\": {\n    \"title\": \"DevExtreme\",\n    \"repoName\": \"devexpress/devextreme-documentation\",\n    \"githubUrl\": \"https://github.com/devexpress/devextreme-documentation\",\n    \"description\": \"DevExtreme documentation\",\n    \"owner\": \"devexpress\",\n    \"repo\": \"devextreme-documentation\"\n  },\n  \"DevExpress Data Form\": {\n    \"title\": \"DevExpress Data Form\",\n    \"repoName\": \"devexpress/maui-data-form-get-started\",\n    \"githubUrl\": \"https://github.com/devexpress/maui-data-form-get-started\",\n    \"description\": \"DevExpress Data Form for .NET MAUI\",\n    \"owner\": \"devexpress\",\n    \"repo\": \"maui-data-form-get-started\"\n  },\n  \"Trieve\": {\n    \"title\": \"Trieve\",\n    \"repoName\": \"devflowinc/trieve\",\n    \"githubUrl\": \"https://github.com/devflowinc/trieve\",\n    \"description\": \"All-in-one infrastructure for search, recommendations, RAG, and analytics offered via API\",\n    \"owner\": \"devflowinc\",\n    \"repo\": \"trieve\"\n  },\n  \"WAHA\": {\n    \"title\": \"WAHA\",\n    \"repoName\": \"devlikeapro/waha-docs\",\n    \"githubUrl\": \"https://github.com/devlikeapro/waha-docs\",\n    \"description\": \"WAHA - WhatsApp HTTP API that you can run in a click! (Documentation repo)\",\n    \"owner\": \"devlikeapro\",\n    \"repo\": \"waha-docs\"\n  },\n  \"Moq\": {\n    \"title\": \"Moq\",\n    \"repoName\": \"devlooped/moq\",\n    \"githubUrl\": \"https://github.com/devlooped/moq\",\n    \"description\": \"The most popular and friendly mocking framework for .NET\",\n    \"owner\": \"devlooped\",\n    \"repo\": \"moq\"\n  },\n  \"Dexie.js\": {\n    \"title\": \"Dexie.js\",\n    \"repoName\": \"dexie/dexie.js\",\n    \"githubUrl\": \"https://github.com/dexie/dexie.js\",\n    \"description\": \"A Minimalistic Wrapper for IndexedDB\",\n    \"owner\": \"dexie\",\n    \"repo\": \"dexie.js\"\n  },\n  \"Dwarf Fortress\": {\n    \"title\": \"Dwarf Fortress\",\n    \"repoName\": \"qartar/dwarf-fortress\",\n    \"githubUrl\": \"https://github.com/qartar/dwarf-fortress\",\n    \"description\": \"Unofficial repository for releases of Dwarf Fortress by Bay 12 Games\",\n    \"owner\": \"qartar\",\n    \"repo\": \"dwarf-fortress\"\n  },\n  \"DFHack Misc\": {\n    \"title\": \"DFHack Misc\",\n    \"repoName\": \"dfhack/df_misc\",\n    \"githubUrl\": \"https://github.com/dfhack/df_misc\",\n    \"description\": \"miscellanous stuff related to dwarf fortress hacking\",\n    \"owner\": \"dfhack\",\n    \"repo\": \"df_misc\"\n  },\n  \"DFHack\": {\n    \"title\": \"DFHack\",\n    \"repoName\": \"dfhack/dfhack\",\n    \"githubUrl\": \"https://github.com/dfhack/dfhack\",\n    \"description\": \"Memory hacking library for Dwarf Fortress and a set of tools that use it\",\n    \"owner\": \"dfhack\",\n    \"repo\": \"dfhack\"\n  },\n  \"DFHack Scripts\": {\n    \"title\": \"DFHack Scripts\",\n    \"repoName\": \"dfhack/scripts\",\n    \"githubUrl\": \"https://github.com/dfhack/scripts\",\n    \"description\": \"DFHack scripts\",\n    \"owner\": \"dfhack\",\n    \"repo\": \"scripts\"\n  },\n  \"Stonesense\": {\n    \"title\": \"Stonesense\",\n    \"repoName\": \"dfhack/stonesense\",\n    \"githubUrl\": \"https://github.com/dfhack/stonesense\",\n    \"description\": \"A retro isometric visualizer for Dwarf Fortress\",\n    \"owner\": \"dfhack\",\n    \"repo\": \"stonesense\"\n  },\n  \"Agent RS\": {\n    \"title\": \"Agent RS\",\n    \"repoName\": \"dfinity/agent-rs\",\n    \"githubUrl\": \"https://github.com/dfinity/agent-rs\",\n    \"description\": \"A collection of libraries and tools for building software around the Internet Computer, in Rust.\",\n    \"owner\": \"dfinity\",\n    \"repo\": \"agent-rs\"\n  },\n  \"Candid\": {\n    \"title\": \"Candid\",\n    \"repoName\": \"dfinity/candid\",\n    \"githubUrl\": \"https://github.com/dfinity/candid\",\n    \"description\": \"Candid Library for the Internet Computer\",\n    \"owner\": \"dfinity\",\n    \"repo\": \"candid\"\n  },\n  \"CDK RS\": {\n    \"title\": \"CDK RS\",\n    \"repoName\": \"dfinity/cdk-rs\",\n    \"githubUrl\": \"https://github.com/dfinity/cdk-rs\",\n    \"description\": \"Rust canister development kit for the Internet Computer.\",\n    \"owner\": \"dfinity\",\n    \"repo\": \"cdk-rs\"\n  },\n  \"Internet Computer Response Verification\": {\n    \"title\": \"Internet Computer Response Verification\",\n    \"repoName\": \"dfinity/response-verification\",\n    \"githubUrl\": \"https://github.com/dfinity/response-verification\",\n    \"description\": \"Client side response verification for the Internet Computer\",\n    \"owner\": \"dfinity\",\n    \"repo\": \"response-verification\"\n  },\n  \"Stable Structures\": {\n    \"title\": \"Stable Structures\",\n    \"repoName\": \"dfinity/stable-structures\",\n    \"githubUrl\": \"https://github.com/dfinity/stable-structures\",\n    \"description\": \"A collection of data structures for fearless canister upgrades.\",\n    \"owner\": \"dfinity\",\n    \"repo\": \"stable-structures\"\n  },\n  \"PyTransform3D\": {\n    \"title\": \"PyTransform3D\",\n    \"repoName\": \"dfki-ric/pytransform3d\",\n    \"githubUrl\": \"https://github.com/dfki-ric/pytransform3d\",\n    \"description\": \"3D transformations for Python.\",\n    \"owner\": \"dfki-ric\",\n    \"repo\": \"pytransform3d\"\n  },\n  \"DhanHQ Py\": {\n    \"title\": \"DhanHQ Py\",\n    \"repoName\": \"dhan-oss/dhanhq-py.git\",\n    \"githubUrl\": \"https://github.com/dhan-oss/dhanhq-py.git\",\n    \"description\": \"\",\n    \"owner\": \"dhan-oss\",\n    \"repo\": \"dhanhq-py.git\"\n  },\n  \"DiceDB\": {\n    \"title\": \"DiceDB\",\n    \"repoName\": \"dicedb/dice\",\n    \"githubUrl\": \"https://github.com/dicedb/dice\",\n    \"description\": \"DiceDB is an open-source, fast, reactive, in-memory database optimized for modern hardware.\",\n    \"owner\": \"dicedb\",\n    \"repo\": \"dice\"\n  },\n  \"Instagram Private API\": {\n    \"title\": \"Instagram Private API\",\n    \"repoName\": \"dilame/instagram-private-api\",\n    \"githubUrl\": \"https://github.com/dilame/instagram-private-api\",\n    \"description\": \"NodeJS Instagram private API SDK. Written in TypeScript.\",\n    \"owner\": \"dilame\",\n    \"repo\": \"instagram-private-api\"\n  },\n  \"Dioxus Components\": {\n    \"title\": \"Dioxus Components\",\n    \"repoName\": \"dioxuslabs/components.git\",\n    \"githubUrl\": \"https://github.com/dioxuslabs/components.git\",\n    \"description\": \"Accessible, unstyled, foundational components for Dioxus.\",\n    \"owner\": \"dioxuslabs\",\n    \"repo\": \"components.git\"\n  },\n  \"Dioxus\": {\n    \"title\": \"Dioxus\",\n    \"repoName\": \"dioxuslabs/dioxus\",\n    \"githubUrl\": \"https://github.com/dioxuslabs/dioxus\",\n    \"description\": \"Fullstack app framework for web, desktop, mobile, and more.\",\n    \"owner\": \"dioxuslabs\",\n    \"repo\": \"dioxus\"\n  },\n  \"Diplodoc\": {\n    \"title\": \"Diplodoc\",\n    \"repoName\": \"diplodoc-platform/docs\",\n    \"githubUrl\": \"https://github.com/diplodoc-platform/docs\",\n    \"description\": \"\",\n    \"owner\": \"diplodoc-platform\",\n    \"repo\": \"docs\"\n  },\n  \"EdiPress\": {\n    \"title\": \"EdiPress\",\n    \"repoName\": \"dippuraj1/edipress.git\",\n    \"githubUrl\": \"https://github.com/dippuraj1/edipress.git\",\n    \"description\": \"\",\n    \"owner\": \"dippuraj1\",\n    \"repo\": \"edipress.git\"\n  },\n  \"Directus\": {\n    \"title\": \"Directus\",\n    \"repoName\": \"directus/docs\",\n    \"githubUrl\": \"https://github.com/directus/docs\",\n    \"description\": \"Documentation website for Directus, including quick starts, guides, and tutorials.\",\n    \"owner\": \"directus\",\n    \"repo\": \"docs\"\n  },\n  \"Discord.Net\": {\n    \"title\": \"Discord.Net\",\n    \"repoName\": \"discord-net/discord.net\",\n    \"githubUrl\": \"https://github.com/discord-net/discord.net\",\n    \"description\": \"An unofficial .Net wrapper for the Discord API (https://discord.com/)\",\n    \"owner\": \"discord-net\",\n    \"repo\": \"discord.net\"\n  },\n  \"Discord.js\": {\n    \"title\": \"Discord.js\",\n    \"repoName\": \"discordjs/guide\",\n    \"githubUrl\": \"https://github.com/discordjs/guide\",\n    \"description\": \"The official guide for discord.js, created and maintained by core members of its community.\",\n    \"owner\": \"discordjs\",\n    \"repo\": \"guide\"\n  },\n  \"Discourse\": {\n    \"title\": \"Discourse\",\n    \"repoName\": \"discourse/discourse\",\n    \"githubUrl\": \"https://github.com/discourse/discourse\",\n    \"description\": \"A platform for community discussion. Free, open, simple.\",\n    \"owner\": \"discourse\",\n    \"repo\": \"discourse\"\n  },\n  \"Discovery\": {\n    \"title\": \"Discovery\",\n    \"repoName\": \"discoveryjs/discovery\",\n    \"githubUrl\": \"https://github.com/discoveryjs/discovery\",\n    \"description\": \"A framework for ad hoc JSON data analysis, shareable server-less reports and dashboards\",\n    \"owner\": \"discoveryjs\",\n    \"repo\": \"discovery\"\n  },\n  \"Discovery CLI\": {\n    \"title\": \"Discovery CLI\",\n    \"repoName\": \"discoveryjs/discovery-cli\",\n    \"githubUrl\": \"https://github.com/discoveryjs/discovery-cli\",\n    \"description\": \"CLI tools to serve & build projects based on Discovery.js\",\n    \"owner\": \"discoveryjs\",\n    \"repo\": \"discovery-cli\"\n  },\n  \"Jora\": {\n    \"title\": \"Jora\",\n    \"repoName\": \"discoveryjs/jora\",\n    \"githubUrl\": \"https://github.com/discoveryjs/jora\",\n    \"description\": \"JavaScript object query engine\",\n    \"owner\": \"discoveryjs\",\n    \"repo\": \"jora\"\n  },\n  \"Jora CLI\": {\n    \"title\": \"Jora CLI\",\n    \"repoName\": \"discoveryjs/jora-cli\",\n    \"githubUrl\": \"https://github.com/discoveryjs/jora-cli\",\n    \"description\": \"Command line interface for jora (a JSON query language)\",\n    \"owner\": \"discoveryjs\",\n    \"repo\": \"jora-cli\"\n  },\n  \"DisGo\": {\n    \"title\": \"DisGo\",\n    \"repoName\": \"disgoorg/disgo\",\n    \"githubUrl\": \"https://github.com/disgoorg/disgo\",\n    \"description\": \"A modular Golang Discord API Wrapper\",\n    \"owner\": \"disgoorg\",\n    \"repo\": \"disgo\"\n  },\n  \"Disnake\": {\n    \"title\": \"Disnake\",\n    \"repoName\": \"disnakedev/disnake\",\n    \"githubUrl\": \"https://github.com/disnakedev/disnake\",\n    \"description\": \"An API wrapper for Discord written in Python.\",\n    \"owner\": \"disnakedev\",\n    \"repo\": \"disnake\"\n  },\n  \"Django REST Framework JSON:API\": {\n    \"title\": \"Django REST Framework JSON:API\",\n    \"repoName\": \"django-json-api/django-rest-framework-json-api\",\n    \"githubUrl\": \"https://github.com/django-json-api/django-rest-framework-json-api\",\n    \"description\": \"JSON:API support for Django REST framework\",\n    \"owner\": \"django-json-api\",\n    \"repo\": \"django-rest-framework-json-api\"\n  },\n  \"Django Q2\": {\n    \"title\": \"Django Q2\",\n    \"repoName\": \"django-q2/django-q2\",\n    \"githubUrl\": \"https://github.com/django-q2/django-q2\",\n    \"description\": \"A multiprocessing distributed task queue for Django based on Django-Q\",\n    \"owner\": \"django-q2\",\n    \"repo\": \"django-q2\"\n  },\n  \"Django\": {\n    \"title\": \"Django\",\n    \"repoName\": \"django/django\",\n    \"githubUrl\": \"https://github.com/django/django\",\n    \"description\": \"The Web framework for perfectionists with deadlines.\",\n    \"owner\": \"django\",\n    \"repo\": \"django\"\n  },\n  \"Stable Baselines3\": {\n    \"title\": \"Stable Baselines3\",\n    \"repoName\": \"dlr-rm/stable-baselines3\",\n    \"githubUrl\": \"https://github.com/dlr-rm/stable-baselines3\",\n    \"description\": \"PyTorch version of Stable Baselines, reliable implementations of reinforcement learning algorithms. \",\n    \"owner\": \"dlr-rm\",\n    \"repo\": \"stable-baselines3\"\n  },\n  \"Data Load Tool\": {\n    \"title\": \"Data Load Tool\",\n    \"repoName\": \"dlt-hub/dlt\",\n    \"githubUrl\": \"https://github.com/dlt-hub/dlt\",\n    \"description\": \"data load tool (dlt) is an open source Python library that makes data loading easy 🛠️ \",\n    \"owner\": \"dlt-hub\",\n    \"repo\": \"dlt\"\n  },\n  \"Psaw\": {\n    \"title\": \"Psaw\",\n    \"repoName\": \"dmarx/psaw\",\n    \"githubUrl\": \"https://github.com/dmarx/psaw\",\n    \"description\": \"Python Pushshift.io API Wrapper (for comment/submission search)\",\n    \"owner\": \"dmarx\",\n    \"repo\": \"psaw\"\n  },\n  \"XGBoost\": {\n    \"title\": \"XGBoost\",\n    \"repoName\": \"dmlc/xgboost\",\n    \"githubUrl\": \"https://github.com/dmlc/xgboost\",\n    \"description\": \"Scalable, Portable and Distributed Gradient Boosting (GBDT, GBRT or GBM) Library,  for Python, R, Java, Scala, C++ and more. Runs on single machine, Hadoop, Spark, Dask, Flink and DataFlow\",\n    \"owner\": \"dmlc\",\n    \"repo\": \"xgboost\"\n  },\n  \"Anon Kode\": {\n    \"title\": \"Anon Kode\",\n    \"repoName\": \"dnakov/anon-kode\",\n    \"githubUrl\": \"https://github.com/dnakov/anon-kode\",\n    \"description\": \"koding with any LLMs\",\n    \"owner\": \"dnakov\",\n    \"repo\": \"anon-kode\"\n  },\n  \"Docker Compose\": {\n    \"title\": \"Docker Compose\",\n    \"repoName\": \"docker/compose\",\n    \"githubUrl\": \"https://github.com/docker/compose\",\n    \"description\": \"Define and run multi-container applications with Docker\",\n    \"owner\": \"docker\",\n    \"repo\": \"compose\"\n  },\n  \"Docker\": {\n    \"title\": \"Docker\",\n    \"repoName\": \"docker/docs\",\n    \"githubUrl\": \"https://github.com/docker/docs\",\n    \"description\": \"Source repo for Docker's Documentation\",\n    \"owner\": \"docker\",\n    \"repo\": \"docs\"\n  },\n  \"Docling\": {\n    \"title\": \"Docling\",\n    \"repoName\": \"docling-project/docling\",\n    \"githubUrl\": \"https://github.com/docling-project/docling\",\n    \"description\": \"Get your documents ready for gen AI\",\n    \"owner\": \"docling-project\",\n    \"repo\": \"docling\"\n  },\n  \"Docling Serve\": {\n    \"title\": \"Docling Serve\",\n    \"repoName\": \"docling-project/docling-serve\",\n    \"githubUrl\": \"https://github.com/docling-project/docling-serve\",\n    \"description\": \"Running Docling as an API service\",\n    \"owner\": \"docling-project\",\n    \"repo\": \"docling-serve\"\n  },\n  \"Docsify\": {\n    \"title\": \"Docsify\",\n    \"repoName\": \"docsifyjs/docsify\",\n    \"githubUrl\": \"https://github.com/docsifyjs/docsify\",\n    \"description\": \"🃏 A magical documentation site generator.\",\n    \"owner\": \"docsifyjs\",\n    \"repo\": \"docsify\"\n  },\n  \"Dokploy\": {\n    \"title\": \"Dokploy\",\n    \"repoName\": \"dokploy/dokploy\",\n    \"githubUrl\": \"https://github.com/dokploy/dokploy\",\n    \"description\": \"Open Source Alternative to Vercel, Netlify and Heroku.\",\n    \"owner\": \"dokploy\",\n    \"repo\": \"dokploy\"\n  },\n  \"Docx\": {\n    \"title\": \"Docx\",\n    \"repoName\": \"dolanmiu/docx\",\n    \"githubUrl\": \"https://github.com/dolanmiu/docx\",\n    \"description\": \"Easily generate and modify .docx files with JS/TS with a nice declarative API. Works for Node and on the Browser.\",\n    \"owner\": \"dolanmiu\",\n    \"repo\": \"docx\"\n  },\n  \"From Zero to Hero: OpenTelemetry in .NET\": {\n    \"title\": \"From Zero to Hero: OpenTelemetry in .NET\",\n    \"repoName\": \"dometrain/from-zero-to-hero-open-telemetry-in-dotnet\",\n    \"githubUrl\": \"https://github.com/dometrain/from-zero-to-hero-open-telemetry-in-dotnet\",\n    \"description\": \"Source code for the \\\"From Zero to Hero: OpenTelemetry in .NET\\\" course\",\n    \"owner\": \"dometrain\",\n    \"repo\": \"from-zero-to-hero-open-telemetry-in-dotnet\"\n  },\n  \"MCP Memory Service\": {\n    \"title\": \"MCP Memory Service\",\n    \"repoName\": \"doobidoo/mcp-memory-service\",\n    \"githubUrl\": \"https://github.com/doobidoo/mcp-memory-service\",\n    \"description\": \"MCP server providing semantic memory and persistent storage capabilities for Claude using ChromaDB and sentence transformers.\",\n    \"owner\": \"doobidoo\",\n    \"repo\": \"mcp-memory-service\"\n  },\n  \"Dotenv Vault\": {\n    \"title\": \"Dotenv Vault\",\n    \"repoName\": \"dotenv-org/dotenv-vault\",\n    \"githubUrl\": \"https://github.com/dotenv-org/dotenv-vault\",\n    \"description\": \"sync .env files—from the creator of `dotenv`.\",\n    \"owner\": \"dotenv-org\",\n    \"repo\": \"dotenv-vault\"\n  },\n  \".NET AI Samples\": {\n    \"title\": \".NET AI Samples\",\n    \"repoName\": \"dotnet/ai-samples\",\n    \"githubUrl\": \"https://github.com/dotnet/ai-samples\",\n    \"description\": \"\",\n    \"owner\": \"dotnet\",\n    \"repo\": \"ai-samples\"\n  },\n  \"Aspire\": {\n    \"title\": \"Aspire\",\n    \"repoName\": \"dotnet/aspire\",\n    \"githubUrl\": \"https://github.com/dotnet/aspire\",\n    \"description\": \"Tools, templates, and packages to accelerate building observable, production-ready apps\",\n    \"owner\": \"dotnet\",\n    \"repo\": \"aspire\"\n  },\n  \"ASP.NET Core\": {\n    \"title\": \"ASP.NET Core\",\n    \"repoName\": \"dotnet/aspnetcore.docs\",\n    \"githubUrl\": \"https://github.com/dotnet/aspnetcore.docs\",\n    \"description\": \"Documentation for ASP.NET Core\",\n    \"owner\": \"dotnet\",\n    \"repo\": \"aspnetcore.docs\"\n  },\n  \"BenchmarkDotNet\": {\n    \"title\": \"BenchmarkDotNet\",\n    \"repoName\": \"dotnet/benchmarkdotnet\",\n    \"githubUrl\": \"https://github.com/dotnet/benchmarkdotnet\",\n    \"description\": \"Powerful .NET library for benchmarking\",\n    \"owner\": \"dotnet\",\n    \"repo\": \"benchmarkdotnet\"\n  },\n  \"C#\": {\n    \"title\": \"C#\",\n    \"repoName\": \"dotnet/csharplang\",\n    \"githubUrl\": \"https://github.com/dotnet/csharplang\",\n    \"description\": \"The official repo for the design of the C# programming language\",\n    \"owner\": \"dotnet\",\n    \"repo\": \"csharplang\"\n  },\n  \".NET\": {\n    \"title\": \".NET\",\n    \"repoName\": \"dotnet/docs\",\n    \"githubUrl\": \"https://github.com/dotnet/docs\",\n    \"description\": \"This repository contains .NET Documentation.\",\n    \"owner\": \"dotnet\",\n    \"repo\": \"docs\"\n  },\n  \"EF Core\": {\n    \"title\": \"EF Core\",\n    \"repoName\": \"dotnet/efcore\",\n    \"githubUrl\": \"https://github.com/dotnet/efcore\",\n    \"description\": \"EF Core is a modern object-database mapper for .NET. It supports LINQ queries, change tracking, updates, and schema migrations.\",\n    \"owner\": \"dotnet\",\n    \"repo\": \"efcore\"\n  },\n  \".NET Extensions\": {\n    \"title\": \".NET Extensions\",\n    \"repoName\": \"dotnet/extensions\",\n    \"githubUrl\": \"https://github.com/dotnet/extensions\",\n    \"description\": \"This repository contains a suite of libraries that provide facilities commonly needed when creating production-ready applications.\",\n    \"owner\": \"dotnet\",\n    \"repo\": \"extensions\"\n  },\n  \".NET MAUI\": {\n    \"title\": \".NET MAUI\",\n    \"repoName\": \"dotnet/maui.git\",\n    \"githubUrl\": \"https://github.com/dotnet/maui.git\",\n    \"description\": \".NET MAUI is the .NET Multi-platform App UI, a framework for building native device applications spanning mobile, tablet, and desktop.\",\n    \"owner\": \"dotnet\",\n    \"repo\": \"maui.git\"\n  },\n  \".NET Multi-Platform App UI\": {\n    \"title\": \".NET Multi-Platform App UI\",\n    \"repoName\": \"dotnet/maui-samples.git\",\n    \"githubUrl\": \"https://github.com/dotnet/maui-samples.git\",\n    \"description\": \"Samples for .NET Multi-Platform App UI (.NET MAUI)\",\n    \"owner\": \"dotnet\",\n    \"repo\": \"maui-samples.git\"\n  },\n  \"Microsoft Build Engine\": {\n    \"title\": \"Microsoft Build Engine\",\n    \"repoName\": \"dotnet/msbuild\",\n    \"githubUrl\": \"https://github.com/dotnet/msbuild\",\n    \"description\": \"The Microsoft Build Engine (MSBuild) is the build platform for .NET and Visual Studio.\",\n    \"owner\": \"dotnet\",\n    \"repo\": \"msbuild\"\n  },\n  \"Orleans\": {\n    \"title\": \"Orleans\",\n    \"repoName\": \"dotnet/orleans\",\n    \"githubUrl\": \"https://github.com/dotnet/orleans\",\n    \"description\": \"Cloud Native application framework for .NET\",\n    \"owner\": \"dotnet\",\n    \"repo\": \"orleans\"\n  },\n  \"ASP.NET Core Razor\": {\n    \"title\": \"ASP.NET Core Razor\",\n    \"repoName\": \"dotnet/razor\",\n    \"githubUrl\": \"https://github.com/dotnet/razor\",\n    \"description\": \"Compiler and tooling experience for Razor ASP.NET Core apps in Visual Studio, Visual Studio for Mac, and VS Code.\",\n    \"owner\": \"dotnet\",\n    \"repo\": \"razor\"\n  },\n  \"Roslyn\": {\n    \"title\": \"Roslyn\",\n    \"repoName\": \"dotnet/roslyn\",\n    \"githubUrl\": \"https://github.com/dotnet/roslyn\",\n    \"description\": \"The Roslyn .NET compiler provides C# and Visual Basic languages with rich code analysis APIs.\",\n    \"owner\": \"dotnet\",\n    \"repo\": \"roslyn\"\n  },\n  \"Bootstrap Blazor\": {\n    \"title\": \"Bootstrap Blazor\",\n    \"repoName\": \"dotnetcore/bootstrapblazor\",\n    \"githubUrl\": \"https://github.com/dotnetcore/bootstrapblazor\",\n    \"description\": \"Bootstrap Blazor is an enterprise-level UI component library based on Bootstrap and Blazor.\",\n    \"owner\": \"dotnetcore\",\n    \"repo\": \"bootstrapblazor\"\n  },\n  \"Semi Design\": {\n    \"title\": \"Semi Design\",\n    \"repoName\": \"douyinfe/semi-design\",\n    \"githubUrl\": \"https://github.com/douyinfe/semi-design\",\n    \"description\": \"🚀A modern, comprehensive, flexible design system and React UI library. 🎨 Provide more than 3000+ Design Tokens, easy to build your design system. Make Semi Design to Any Design.  🧑🏻‍💻 Design to Code in one click \",\n    \"owner\": \"douyinfe\",\n    \"repo\": \"semi-design\"\n  },\n  \"Kafka Python\": {\n    \"title\": \"Kafka Python\",\n    \"repoName\": \"dpkp/kafka-python\",\n    \"githubUrl\": \"https://github.com/dpkp/kafka-python\",\n    \"description\": \"Python client for Apache Kafka\",\n    \"owner\": \"dpkp\",\n    \"repo\": \"kafka-python\"\n  },\n  \"Dragonfly\": {\n    \"title\": \"Dragonfly\",\n    \"repoName\": \"dragonflydb/dragonfly\",\n    \"githubUrl\": \"https://github.com/dragonflydb/dragonfly\",\n    \"description\": \"A modern replacement for Redis and Memcached\",\n    \"owner\": \"dragonflydb\",\n    \"repo\": \"dragonfly\"\n  },\n  \"OctoBot\": {\n    \"title\": \"OctoBot\",\n    \"repoName\": \"drakkar-software/octobot\",\n    \"githubUrl\": \"https://github.com/drakkar-software/octobot\",\n    \"description\": \"Open source crypto trading bot\",\n    \"owner\": \"drakkar-software\",\n    \"repo\": \"octobot\"\n  },\n  \"OctoBot Tentacles\": {\n    \"title\": \"OctoBot Tentacles\",\n    \"repoName\": \"drakkar-software/octobot-tentacles\",\n    \"githubUrl\": \"https://github.com/drakkar-software/octobot-tentacles\",\n    \"description\": \"This repository contains public tentacles (packages) for the OctoBot project\",\n    \"owner\": \"drakkar-software\",\n    \"repo\": \"octobot-tentacles\"\n  },\n  \"OpenCore for Virtualization\": {\n    \"title\": \"OpenCore for Virtualization\",\n    \"repoName\": \"drdonk/oc4vm\",\n    \"githubUrl\": \"https://github.com/drdonk/oc4vm\",\n    \"description\": \"OpenCore for Virtualization\",\n    \"owner\": \"drdonk\",\n    \"repo\": \"oc4vm\"\n  },\n  \"ServiceScan SourceGenerator\": {\n    \"title\": \"ServiceScan SourceGenerator\",\n    \"repoName\": \"dreamescaper/servicescan.sourcegenerator\",\n    \"githubUrl\": \"https://github.com/dreamescaper/servicescan.sourcegenerator\",\n    \"description\": \"Assembly scanning source generator for Microsoft.Extensions.DependencyInjection\",\n    \"owner\": \"dreamescaper\",\n    \"repo\": \"servicescan.sourcegenerator\"\n  },\n  \"Parsita\": {\n    \"title\": \"Parsita\",\n    \"repoName\": \"drhagen/parsita\",\n    \"githubUrl\": \"https://github.com/drhagen/parsita\",\n    \"description\": \"The easiest way to parse text in Python\",\n    \"owner\": \"drhagen\",\n    \"repo\": \"parsita\"\n  },\n  \"Drizzle ORM\": {\n    \"title\": \"Drizzle ORM\",\n    \"repoName\": \"drizzle-team/drizzle-orm\",\n    \"githubUrl\": \"https://github.com/drizzle-team/drizzle-orm\",\n    \"description\": \"Headless TypeScript ORM with a head. Runs on Node, Bun and Deno. Lives on the Edge and yes, it's a JavaScript ORM too 😅\",\n    \"owner\": \"drizzle-team\",\n    \"repo\": \"drizzle-orm\"\n  },\n  \"Dropwizard\": {\n    \"title\": \"Dropwizard\",\n    \"repoName\": \"dropwizard/dropwizard\",\n    \"githubUrl\": \"https://github.com/dropwizard/dropwizard\",\n    \"description\": \"A damn simple library for building production-ready RESTful web services.\",\n    \"owner\": \"dropwizard\",\n    \"repo\": \"dropwizard\"\n  },\n  \"Drupal\": {\n    \"title\": \"Drupal\",\n    \"repoName\": \"drupal/drupal\",\n    \"githubUrl\": \"https://github.com/drupal/drupal\",\n    \"description\": \"Verbatim mirror of the git.drupal.org repository for Drupal core. Please see the https://github.com/drupal/drupal#contributing. PRs are not accepted on GitHub.\",\n    \"owner\": \"drupal\",\n    \"repo\": \"drupal\"\n  },\n  \"Returns\": {\n    \"title\": \"Returns\",\n    \"repoName\": \"dry-python/returns\",\n    \"githubUrl\": \"https://github.com/dry-python/returns\",\n    \"description\": \"Make your functions return something meaningful, typed, and safe!\",\n    \"owner\": \"dry-python\",\n    \"repo\": \"returns\"\n  },\n  \"Dry Auto Inject\": {\n    \"title\": \"Dry Auto Inject\",\n    \"repoName\": \"dry-rb/dry-auto_inject\",\n    \"githubUrl\": \"https://github.com/dry-rb/dry-auto_inject\",\n    \"description\": \"Container-agnostic constructor injection mixin\",\n    \"owner\": \"dry-rb\",\n    \"repo\": \"dry-auto_inject\"\n  },\n  \"Dry Configurable\": {\n    \"title\": \"Dry Configurable\",\n    \"repoName\": \"dry-rb/dry-configurable\",\n    \"githubUrl\": \"https://github.com/dry-rb/dry-configurable\",\n    \"description\": \"A simple mixin to make Ruby classes configurable\",\n    \"owner\": \"dry-rb\",\n    \"repo\": \"dry-configurable\"\n  },\n  \"Dry Container\": {\n    \"title\": \"Dry Container\",\n    \"repoName\": \"dry-rb/dry-container\",\n    \"githubUrl\": \"https://github.com/dry-rb/dry-container\",\n    \"description\": \"A simple, configurable object container implemented in Ruby\",\n    \"owner\": \"dry-rb\",\n    \"repo\": \"dry-container\"\n  },\n  \"Dry-rb Monads\": {\n    \"title\": \"Dry-rb Monads\",\n    \"repoName\": \"dry-rb/dry-monads\",\n    \"githubUrl\": \"https://github.com/dry-rb/dry-monads\",\n    \"description\": \"Useful, common monads in idiomatic Ruby\",\n    \"owner\": \"dry-rb\",\n    \"repo\": \"dry-monads\"\n  },\n  \"Dry Operation\": {\n    \"title\": \"Dry Operation\",\n    \"repoName\": \"dry-rb/dry-operation\",\n    \"githubUrl\": \"https://github.com/dry-rb/dry-operation\",\n    \"description\": \"\",\n    \"owner\": \"dry-rb\",\n    \"repo\": \"dry-operation\"\n  },\n  \"Dry Schema\": {\n    \"title\": \"Dry Schema\",\n    \"repoName\": \"dry-rb/dry-schema\",\n    \"githubUrl\": \"https://github.com/dry-rb/dry-schema\",\n    \"description\": \"Coercion and validation for data structures\",\n    \"owner\": \"dry-rb\",\n    \"repo\": \"dry-schema\"\n  },\n  \"Dry Struct\": {\n    \"title\": \"Dry Struct\",\n    \"repoName\": \"dry-rb/dry-struct\",\n    \"githubUrl\": \"https://github.com/dry-rb/dry-struct\",\n    \"description\": \"Typed struct and value objects\",\n    \"owner\": \"dry-rb\",\n    \"repo\": \"dry-struct\"\n  },\n  \"Dry Types\": {\n    \"title\": \"Dry Types\",\n    \"repoName\": \"dry-rb/dry-types\",\n    \"githubUrl\": \"https://github.com/dry-rb/dry-types\",\n    \"description\": \"Flexible type system for Ruby with coercions and constraints\",\n    \"owner\": \"dry-rb\",\n    \"repo\": \"dry-types\"\n  },\n  \"Dry Validation\": {\n    \"title\": \"Dry Validation\",\n    \"repoName\": \"dry-rb/dry-validation\",\n    \"githubUrl\": \"https://github.com/dry-rb/dry-validation\",\n    \"description\": \"Validation library with type-safe schemas and rules\",\n    \"owner\": \"dry-rb\",\n    \"repo\": \"dry-validation\"\n  },\n  \"TS-Morph\": {\n    \"title\": \"TS-Morph\",\n    \"repoName\": \"dsherret/ts-morph\",\n    \"githubUrl\": \"https://github.com/dsherret/ts-morph\",\n    \"description\": \"TypeScript Compiler API wrapper for static analysis and programmatic code changes.\",\n    \"owner\": \"dsherret\",\n    \"repo\": \"ts-morph\"\n  },\n  \"Anyhow\": {\n    \"title\": \"Anyhow\",\n    \"repoName\": \"dtolnay/anyhow\",\n    \"githubUrl\": \"https://github.com/dtolnay/anyhow\",\n    \"description\": \"Flexible concrete Error type built on std::error::Error\",\n    \"owner\": \"dtolnay\",\n    \"repo\": \"anyhow\"\n  },\n  \"ThisError\": {\n    \"title\": \"ThisError\",\n    \"repoName\": \"dtolnay/thiserror\",\n    \"githubUrl\": \"https://github.com/dtolnay/thiserror\",\n    \"description\": \"derive(Error) for struct and enum error types\",\n    \"owner\": \"dtolnay\",\n    \"repo\": \"thiserror\"\n  },\n  \"Dub\": {\n    \"title\": \"Dub\",\n    \"repoName\": \"dubinc/docs\",\n    \"githubUrl\": \"https://github.com/dubinc/docs\",\n    \"description\": \"Official docs for Dub.co\",\n    \"owner\": \"dubinc\",\n    \"repo\": \"docs\"\n  },\n  \"Fast-Check\": {\n    \"title\": \"Fast-Check\",\n    \"repoName\": \"dubzzz/fast-check\",\n    \"githubUrl\": \"https://github.com/dubzzz/fast-check\",\n    \"description\": \"Property based testing framework for JavaScript (like QuickCheck) written in TypeScript\",\n    \"owner\": \"dubzzz\",\n    \"repo\": \"fast-check\"\n  },\n  \"BigColor\": {\n    \"title\": \"BigColor\",\n    \"repoName\": \"ducflair/bigcolor\",\n    \"githubUrl\": \"https://github.com/ducflair/bigcolor\",\n    \"description\": \"A powerful Rust color library for parsing, converting, and manipulating colors across multiple formats.\",\n    \"owner\": \"ducflair\",\n    \"repo\": \"bigcolor\"\n  },\n  \"DuckDB\": {\n    \"title\": \"DuckDB\",\n    \"repoName\": \"spile-io/duckdb-docs\",\n    \"githubUrl\": \"https://github.com/spile-io/duckdb-docs\",\n    \"description\": \"DuckDB Docs for LLM\",\n    \"owner\": \"spile-io\",\n    \"repo\": \"duckdb-docs\"\n  },\n  \"DuckDB Node Neo\": {\n    \"title\": \"DuckDB Node Neo\",\n    \"repoName\": \"duckdb/duckdb-node-neo\",\n    \"githubUrl\": \"https://github.com/duckdb/duckdb-node-neo\",\n    \"description\": \"Second iteration on a DuckDB Node.js client\",\n    \"owner\": \"duckdb\",\n    \"repo\": \"duckdb-node-neo\"\n  },\n  \"Dwarf Therapist\": {\n    \"title\": \"Dwarf Therapist\",\n    \"repoName\": \"dwarf-therapist/dwarf-therapist\",\n    \"githubUrl\": \"https://github.com/dwarf-therapist/dwarf-therapist\",\n    \"description\": \"Dwarf management tool for Dwarf Fortress\",\n    \"owner\": \"dwarf-therapist\",\n    \"repo\": \"dwarf-therapist\"\n  },\n  \"Ulid\": {\n    \"title\": \"Ulid\",\n    \"repoName\": \"ulid/javascript\",\n    \"githubUrl\": \"https://github.com/ulid/javascript\",\n    \"description\": \"Universally Unique Lexicographically Sortable Identifier\",\n    \"owner\": \"ulid\",\n    \"repo\": \"javascript\"\n  },\n  \"Mcp.run Servlets\": {\n    \"title\": \"Mcp.run Servlets\",\n    \"repoName\": \"dylibso/mcp.run-servlets\",\n    \"githubUrl\": \"https://github.com/dylibso/mcp.run-servlets\",\n    \"description\": \"Official servlets for mcp.run published by @dylibso\",\n    \"owner\": \"dylibso\",\n    \"repo\": \"mcp.run-servlets\"\n  },\n  \"MCPX Python\": {\n    \"title\": \"MCPX Python\",\n    \"repoName\": \"dylibso/mcpx-py\",\n    \"githubUrl\": \"https://github.com/dylibso/mcpx-py\",\n    \"description\": \"Python client library for https://mcp.run - call portable & secure tools for your AI Agents and Apps\",\n    \"owner\": \"dylibso\",\n    \"repo\": \"mcpx-py\"\n  },\n  \"Dynamic Global Wallet\": {\n    \"title\": \"Dynamic Global Wallet\",\n    \"repoName\": \"dynamic-labs/dynamic-global-wallet-example\",\n    \"githubUrl\": \"https://github.com/dynamic-labs/dynamic-global-wallet-example\",\n    \"description\": \"\",\n    \"owner\": \"dynamic-labs\",\n    \"repo\": \"dynamic-global-wallet-example\"\n  },\n  \"AugmenToolkit\": {\n    \"title\": \"AugmenToolkit\",\n    \"repoName\": \"e-p-armstrong/augmentoolkit\",\n    \"githubUrl\": \"https://github.com/e-p-armstrong/augmentoolkit\",\n    \"description\": \"\",\n    \"owner\": \"e-p-armstrong\",\n    \"repo\": \"augmentoolkit\"\n  },\n  \"Code Interpreter\": {\n    \"title\": \"Code Interpreter\",\n    \"repoName\": \"e2b-dev/code-interpreter\",\n    \"githubUrl\": \"https://github.com/e2b-dev/code-interpreter\",\n    \"description\": \"Python & JS/TS SDK for running AI-generated code/code interpreting in your AI app \",\n    \"owner\": \"e2b-dev\",\n    \"repo\": \"code-interpreter\"\n  },\n  \"E2B\": {\n    \"title\": \"E2B\",\n    \"repoName\": \"e2b-dev/e2b\",\n    \"githubUrl\": \"https://github.com/e2b-dev/e2b\",\n    \"description\": \"Secure open source cloud runtime for AI apps & AI agents\",\n    \"owner\": \"e2b-dev\",\n    \"repo\": \"e2b\"\n  },\n  \"Pandapower\": {\n    \"title\": \"Pandapower\",\n    \"repoName\": \"e2niee/pandapower\",\n    \"githubUrl\": \"https://github.com/e2niee/pandapower\",\n    \"description\": \"Convenient Power System Modelling and Analysis based on PYPOWER and pandas\",\n    \"owner\": \"e2niee\",\n    \"repo\": \"pandapower\"\n  },\n  \"Django Ninja Extra\": {\n    \"title\": \"Django Ninja Extra\",\n    \"repoName\": \"eadwincode/django-ninja-extra\",\n    \"githubUrl\": \"https://github.com/eadwincode/django-ninja-extra\",\n    \"description\": \"Django Ninja Extra - Class-Based Utility and more for Django Ninja(Fast Django REST framework)\",\n    \"owner\": \"eadwincode\",\n    \"repo\": \"django-ninja-extra\"\n  },\n  \"Django Ninja JWT\": {\n    \"title\": \"Django Ninja JWT\",\n    \"repoName\": \"eadwincode/django-ninja-jwt\",\n    \"githubUrl\": \"https://github.com/eadwincode/django-ninja-jwt\",\n    \"description\": \"A JSON Web Token authentication plugin for the Django REST Framework.\",\n    \"owner\": \"eadwincode\",\n    \"repo\": \"django-ninja-jwt\"\n  },\n  \"Earthly\": {\n    \"title\": \"Earthly\",\n    \"repoName\": \"earthly/earthly\",\n    \"githubUrl\": \"https://github.com/earthly/earthly\",\n    \"description\": \"Super simple build framework with fast, repeatable builds and an instantly familiar syntax – like Dockerfile and Makefile had a baby.\",\n    \"owner\": \"earthly\",\n    \"repo\": \"earthly\"\n  },\n  \"Easypanel Templates\": {\n    \"title\": \"Easypanel Templates\",\n    \"repoName\": \"easypanel-io/templates\",\n    \"githubUrl\": \"https://github.com/easypanel-io/templates\",\n    \"description\": \"\",\n    \"owner\": \"easypanel-io\",\n    \"repo\": \"templates\"\n  },\n  \"L1b3rt45\": {\n    \"title\": \"L1b3rt45\",\n    \"repoName\": \"ebergel/l1b3rt45\",\n    \"githubUrl\": \"https://github.com/ebergel/l1b3rt45\",\n    \"description\": \"JAILBREAK PROMPTS FOR ALL MAJOR AI MODELS\",\n    \"owner\": \"ebergel\",\n    \"repo\": \"l1b3rt45\"\n  },\n  \"Django Admin Easy\": {\n    \"title\": \"Django Admin Easy\",\n    \"repoName\": \"ebertti/django-admin-easy\",\n    \"githubUrl\": \"https://github.com/ebertti/django-admin-easy\",\n    \"description\": \"Collection of admin fields and decorators to help to create computed or custom fields more friendly and easy way\",\n    \"owner\": \"ebertti\",\n    \"repo\": \"django-admin-easy\"\n  },\n  \"GWAS Rest API\": {\n    \"title\": \"GWAS Rest API\",\n    \"repoName\": \"ebispot/gwas-rest-api\",\n    \"githubUrl\": \"https://github.com/ebispot/gwas-rest-api\",\n    \"description\": \"Refactoring Code for Rest API\",\n    \"owner\": \"ebispot\",\n    \"repo\": \"gwas-rest-api\"\n  },\n  \"GWAS UI\": {\n    \"title\": \"GWAS UI\",\n    \"repoName\": \"ebispot/gwas-ui\",\n    \"githubUrl\": \"https://github.com/ebispot/gwas-ui\",\n    \"description\": \"\",\n    \"owner\": \"ebispot\",\n    \"repo\": \"gwas-ui\"\n  },\n  \"Eclipse BaSyx Python SDK\": {\n    \"title\": \"Eclipse BaSyx Python SDK\",\n    \"repoName\": \"eclipse-basyx/basyx-python-sdk\",\n    \"githubUrl\": \"https://github.com/eclipse-basyx/basyx-python-sdk\",\n    \"description\": \"\",\n    \"owner\": \"eclipse-basyx\",\n    \"repo\": \"basyx-python-sdk\"\n  },\n  \"Eclipse Ditto\": {\n    \"title\": \"Eclipse Ditto\",\n    \"repoName\": \"eclipse-ditto/ditto\",\n    \"githubUrl\": \"https://github.com/eclipse-ditto/ditto\",\n    \"description\": \"Eclipse Ditto™: Digital Twin framework of Eclipse IoT - main repository\",\n    \"owner\": \"eclipse-ditto\",\n    \"repo\": \"ditto\"\n  },\n  \"Jakarta EE\": {\n    \"title\": \"Jakarta EE\",\n    \"repoName\": \"eclipse-ee4j/jakartaee-tutorial\",\n    \"githubUrl\": \"https://github.com/eclipse-ee4j/jakartaee-tutorial\",\n    \"description\": \"Jakarta EE Tutorial\",\n    \"owner\": \"eclipse-ee4j\",\n    \"repo\": \"jakartaee-tutorial\"\n  },\n  \"Eclipse Theia\": {\n    \"title\": \"Eclipse Theia\",\n    \"repoName\": \"eclipse-theia/theia\",\n    \"githubUrl\": \"https://github.com/eclipse-theia/theia\",\n    \"description\": \"Eclipse Theia is a cloud & desktop IDE framework implemented in TypeScript.\",\n    \"owner\": \"eclipse-theia\",\n    \"repo\": \"theia\"\n  },\n  \"Eclipse Che\": {\n    \"title\": \"Eclipse Che\",\n    \"repoName\": \"eclipse/che-docs\",\n    \"githubUrl\": \"https://github.com/eclipse/che-docs\",\n    \"description\": \"Official Eclipse Che Documentation\",\n    \"owner\": \"eclipse\",\n    \"repo\": \"che-docs\"\n  },\n  \"Edge\": {\n    \"title\": \"Edge\",\n    \"repoName\": \"edge-js/edgejs.dev\",\n    \"githubUrl\": \"https://github.com/edge-js/edgejs.dev\",\n    \"description\": \"Documentation website for Edge\",\n    \"owner\": \"edge-js\",\n    \"repo\": \"edgejs.dev\"\n  },\n  \"Return Crunchyroll Random\": {\n    \"title\": \"Return Crunchyroll Random\",\n    \"repoName\": \"edghd/return-crunchyroll-random\",\n    \"githubUrl\": \"https://github.com/edghd/return-crunchyroll-random\",\n    \"description\": \"Web extension to bring back the Crunchyroll Random button\",\n    \"owner\": \"edghd\",\n    \"repo\": \"return-crunchyroll-random\"\n  },\n  \"Conform\": {\n    \"title\": \"Conform\",\n    \"repoName\": \"edmundhung/conform\",\n    \"githubUrl\": \"https://github.com/edmundhung/conform\",\n    \"description\": \"A type-safe form validation library utilizing web fundamentals to progressively enhance HTML Forms with full support for server frameworks like Remix and Next.js.\",\n    \"owner\": \"edmundhung\",\n    \"repo\": \"conform\"\n  },\n  \"Effect\": {\n    \"title\": \"Effect\",\n    \"repoName\": \"effect-ts/effect\",\n    \"githubUrl\": \"https://github.com/effect-ts/effect\",\n    \"description\": \"Build production-ready applications in TypeScript\",\n    \"owner\": \"effect-ts\",\n    \"repo\": \"effect\"\n  },\n  \"Svelte Stepper\": {\n    \"title\": \"Svelte Stepper\",\n    \"repoName\": \"efstajas/svelte-stepper\",\n    \"githubUrl\": \"https://github.com/efstajas/svelte-stepper\",\n    \"description\": \"🚶 A simple library for building delightfully animated stepped flows with Svelte.\",\n    \"owner\": \"efstajas\",\n    \"repo\": \"svelte-stepper\"\n  },\n  \"Typed Struct\": {\n    \"title\": \"Typed Struct\",\n    \"repoName\": \"ejpcmac/typed_struct\",\n    \"githubUrl\": \"https://github.com/ejpcmac/typed_struct\",\n    \"description\": \"An Elixir library for defining structs with a type without writing boilerplate code.\",\n    \"owner\": \"ejpcmac\",\n    \"repo\": \"typed_struct\"\n  },\n  \"Alpaca Dataset Generator\": {\n    \"title\": \"Alpaca Dataset Generator\",\n    \"repoName\": \"ekatraone/alpaca-dataset-generator\",\n    \"githubUrl\": \"https://github.com/ekatraone/alpaca-dataset-generator\",\n    \"description\": \"\",\n    \"owner\": \"ekatraone\",\n    \"repo\": \"alpaca-dataset-generator\"\n  },\n  \"Eksctl\": {\n    \"title\": \"Eksctl\",\n    \"repoName\": \"eksctl-io/eksctl\",\n    \"githubUrl\": \"https://github.com/eksctl-io/eksctl\",\n    \"description\": \"The official CLI for Amazon EKS\",\n    \"owner\": \"eksctl-io\",\n    \"repo\": \"eksctl\"\n  },\n  \"Elastic APM .NET Agent\": {\n    \"title\": \"Elastic APM .NET Agent\",\n    \"repoName\": \"elastic/apm-agent-dotnet\",\n    \"githubUrl\": \"https://github.com/elastic/apm-agent-dotnet\",\n    \"description\": \"\",\n    \"owner\": \"elastic\",\n    \"repo\": \"apm-agent-dotnet\"\n  },\n  \"Elastic Cloud on Kubernetes\": {\n    \"title\": \"Elastic Cloud on Kubernetes\",\n    \"repoName\": \"elastic/cloud-on-k8s\",\n    \"githubUrl\": \"https://github.com/elastic/cloud-on-k8s\",\n    \"description\": \"Elastic Cloud on Kubernetes\",\n    \"owner\": \"elastic\",\n    \"repo\": \"cloud-on-k8s\"\n  },\n  \"Elasticsearch\": {\n    \"title\": \"Elasticsearch\",\n    \"repoName\": \"elastic/elasticsearch\",\n    \"githubUrl\": \"https://github.com/elastic/elasticsearch\",\n    \"description\": \"Free and Open Source, Distributed, RESTful Search Engine\",\n    \"owner\": \"elastic\",\n    \"repo\": \"elasticsearch\"\n  },\n  \"Elasticsearch .NET\": {\n    \"title\": \"Elasticsearch .NET\",\n    \"repoName\": \"elastic/elasticsearch-net\",\n    \"githubUrl\": \"https://github.com/elastic/elasticsearch-net\",\n    \"description\": \"This strongly-typed, client library enables working with Elasticsearch. It is the official client maintained and supported by Elastic.\",\n    \"owner\": \"elastic\",\n    \"repo\": \"elasticsearch-net\"\n  },\n  \"Electric\": {\n    \"title\": \"Electric\",\n    \"repoName\": \"electric-sql/electric\",\n    \"githubUrl\": \"https://github.com/electric-sql/electric\",\n    \"description\": \"Real-time sync for Postgres.\",\n    \"owner\": \"electric-sql\",\n    \"repo\": \"electric\"\n  },\n  \"Pglite\": {\n    \"title\": \"Pglite\",\n    \"repoName\": \"electric-sql/pglite\",\n    \"githubUrl\": \"https://github.com/electric-sql/pglite\",\n    \"description\": \"Embeddable Postgres with real-time, reactive bindings.\",\n    \"owner\": \"electric-sql\",\n    \"repo\": \"pglite\"\n  },\n  \"Electron\": {\n    \"title\": \"Electron\",\n    \"repoName\": \"electron/electron\",\n    \"githubUrl\": \"https://github.com/electron/electron\",\n    \"description\": \":electron: Build cross-platform desktop apps with JavaScript, HTML, and CSS\",\n    \"owner\": \"electron\",\n    \"repo\": \"electron\"\n  },\n  \"Element Plus\": {\n    \"title\": \"Element Plus\",\n    \"repoName\": \"element-plus/element-plus.git\",\n    \"githubUrl\": \"https://github.com/element-plus/element-plus.git\",\n    \"description\": \"🎉 A Vue.js 3 UI Library made by Element team\",\n    \"owner\": \"element-plus\",\n    \"repo\": \"element-plus.git\"\n  },\n  \"Elementor\": {\n    \"title\": \"Elementor\",\n    \"repoName\": \"elementor/elementor-developers-docs\",\n    \"githubUrl\": \"https://github.com/elementor/elementor-developers-docs\",\n    \"description\": \"Resources and tutorials for Elementor developers.\",\n    \"owner\": \"elementor\",\n    \"repo\": \"elementor-developers-docs\"\n  },\n  \"ElevenLabs\": {\n    \"title\": \"ElevenLabs\",\n    \"repoName\": \"elevenlabs/elevenlabs-docs\",\n    \"githubUrl\": \"https://github.com/elevenlabs/elevenlabs-docs\",\n    \"description\": \"Documentation for elevenlabs.io/docs\",\n    \"owner\": \"elevenlabs\",\n    \"repo\": \"elevenlabs-docs\"\n  },\n  \"ElevenLabs MCP\": {\n    \"title\": \"ElevenLabs MCP\",\n    \"repoName\": \"elevenlabs/elevenlabs-mcp\",\n    \"githubUrl\": \"https://github.com/elevenlabs/elevenlabs-mcp\",\n    \"description\": \"The official ElevenLabs MCP server\",\n    \"owner\": \"elevenlabs\",\n    \"repo\": \"elevenlabs-mcp\"\n  },\n  \"Elevenlabs Packages\": {\n    \"title\": \"Elevenlabs Packages\",\n    \"repoName\": \"elevenlabs/packages\",\n    \"githubUrl\": \"https://github.com/elevenlabs/packages\",\n    \"description\": \"Monorepo for public npm packages\",\n    \"owner\": \"elevenlabs\",\n    \"repo\": \"packages\"\n  },\n  \"Elixir\": {\n    \"title\": \"Elixir\",\n    \"repoName\": \"elixir-lang/elixir\",\n    \"githubUrl\": \"https://github.com/elixir-lang/elixir\",\n    \"description\": \"Elixir is a dynamic, functional language for building scalable and maintainable applications\",\n    \"owner\": \"elixir-lang\",\n    \"repo\": \"elixir\"\n  },\n  \"GenStage\": {\n    \"title\": \"GenStage\",\n    \"repoName\": \"elixir-lang/gen_stage\",\n    \"githubUrl\": \"https://github.com/elixir-lang/gen_stage\",\n    \"description\": \"Producer and consumer actors with back-pressure for Elixir\",\n    \"owner\": \"elixir-lang\",\n    \"repo\": \"gen_stage\"\n  },\n  \"Eliza\": {\n    \"title\": \"Eliza\",\n    \"repoName\": \"elizaos/eliza\",\n    \"githubUrl\": \"https://github.com/elizaos/eliza\",\n    \"description\": \"Autonomous agents for everyone\",\n    \"owner\": \"elizaos\",\n    \"repo\": \"eliza\"\n  },\n  \"Elm Core\": {\n    \"title\": \"Elm Core\",\n    \"repoName\": \"elm/core\",\n    \"githubUrl\": \"https://github.com/elm/core\",\n    \"description\": \"Elm's core libraries\",\n    \"owner\": \"elm\",\n    \"repo\": \"core\"\n  },\n  \"Elm\": {\n    \"title\": \"Elm\",\n    \"repoName\": \"elm/elm-lang.org\",\n    \"githubUrl\": \"https://github.com/elm/elm-lang.org\",\n    \"description\": \"Server and client code for the Elm website.\",\n    \"owner\": \"elm\",\n    \"repo\": \"elm-lang.org\"\n  },\n  \"Vite Ruby\": {\n    \"title\": \"Vite Ruby\",\n    \"repoName\": \"elmassimo/vite_ruby\",\n    \"githubUrl\": \"https://github.com/elmassimo/vite_ruby\",\n    \"description\": \"⚡️ Vite.js in Ruby, bringing joy to your JavaScript experience\",\n    \"owner\": \"elmassimo\",\n    \"repo\": \"vite_ruby\"\n  },\n  \"Elysia.js\": {\n    \"title\": \"Elysia.js\",\n    \"repoName\": \"elysiajs/documentation\",\n    \"githubUrl\": \"https://github.com/elysiajs/documentation\",\n    \"description\": \"Documentation for Elysia.js\",\n    \"owner\": \"elysiajs\",\n    \"repo\": \"documentation\"\n  },\n  \"EmailJS SDK\": {\n    \"title\": \"EmailJS SDK\",\n    \"repoName\": \"emailjs-com/emailjs-sdk\",\n    \"githubUrl\": \"https://github.com/emailjs-com/emailjs-sdk\",\n    \"description\": \"EmailJS helps sending emails using client side technologies only. No server is required.\",\n    \"owner\": \"emailjs-com\",\n    \"repo\": \"emailjs-sdk\"\n  },\n  \"Ember Template Imports\": {\n    \"title\": \"Ember Template Imports\",\n    \"repoName\": \"ember-cli/ember-template-imports\",\n    \"githubUrl\": \"https://github.com/ember-cli/ember-template-imports\",\n    \"description\": \"Template import support in Ember!\",\n    \"owner\": \"ember-cli\",\n    \"repo\": \"ember-template-imports\"\n  },\n  \"Ember Engines\": {\n    \"title\": \"Ember Engines\",\n    \"repoName\": \"ember-engines/ember-engines.com\",\n    \"githubUrl\": \"https://github.com/ember-engines/ember-engines.com\",\n    \"description\": \"Step-by-step guides for using the ember-engines to create composable apps\",\n    \"owner\": \"ember-engines\",\n    \"repo\": \"ember-engines.com\"\n  },\n  \"WarpDrive\": {\n    \"title\": \"WarpDrive\",\n    \"repoName\": \"emberjs/data\",\n    \"githubUrl\": \"https://github.com/emberjs/data\",\n    \"description\": \"WarpDrive is a lightweight data library for web apps — universal, typed, reactive, and ready to scale.\",\n    \"owner\": \"emberjs\",\n    \"repo\": \"data\"\n  },\n  \"Ember QUnit\": {\n    \"title\": \"Ember QUnit\",\n    \"repoName\": \"emberjs/ember-qunit\",\n    \"githubUrl\": \"https://github.com/emberjs/ember-qunit\",\n    \"description\": \"QUnit test helpers for Ember\",\n    \"owner\": \"emberjs\",\n    \"repo\": \"ember-qunit\"\n  },\n  \"Baybe\": {\n    \"title\": \"Baybe\",\n    \"repoName\": \"emdgroup/baybe\",\n    \"githubUrl\": \"https://github.com/emdgroup/baybe\",\n    \"description\": \"Bayesian Optimization and Design of Experiments\",\n    \"owner\": \"emdgroup\",\n    \"repo\": \"baybe\"\n  },\n  \"Diago\": {\n    \"title\": \"Diago\",\n    \"repoName\": \"emiago/diago\",\n    \"githubUrl\": \"https://github.com/emiago/diago\",\n    \"description\": \"Short of Dialog + GO. Library for building VOIP solutions in GO\",\n    \"owner\": \"emiago\",\n    \"repo\": \"diago\"\n  },\n  \"Sipgo\": {\n    \"title\": \"Sipgo\",\n    \"repoName\": \"emiago/sipgo\",\n    \"githubUrl\": \"https://github.com/emiago/sipgo\",\n    \"description\": \"SIP library for writing fast SIP services in GO\",\n    \"owner\": \"emiago\",\n    \"repo\": \"sipgo\"\n  },\n  \"Egui\": {\n    \"title\": \"Egui\",\n    \"repoName\": \"emilk/egui\",\n    \"githubUrl\": \"https://github.com/emilk/egui\",\n    \"description\": \"egui: an easy-to-use immediate mode GUI in Rust that runs on both web and native\",\n    \"owner\": \"emilk\",\n    \"repo\": \"egui\"\n  },\n  \"Sonner\": {\n    \"title\": \"Sonner\",\n    \"repoName\": \"emilkowalski/sonner\",\n    \"githubUrl\": \"https://github.com/emilkowalski/sonner\",\n    \"description\": \"An opinionated toast component for React.\",\n    \"owner\": \"emilkowalski\",\n    \"repo\": \"sonner\"\n  },\n  \"Vaul\": {\n    \"title\": \"Vaul\",\n    \"repoName\": \"emilkowalski/vaul\",\n    \"githubUrl\": \"https://github.com/emilkowalski/vaul\",\n    \"description\": \"A drawer component for React.\",\n    \"owner\": \"emilkowalski\",\n    \"repo\": \"vaul\"\n  },\n  \"Granian\": {\n    \"title\": \"Granian\",\n    \"repoName\": \"emmett-framework/granian\",\n    \"githubUrl\": \"https://github.com/emmett-framework/granian\",\n    \"description\": \"A Rust HTTP server for Python applications\",\n    \"owner\": \"emmett-framework\",\n    \"repo\": \"granian\"\n  },\n  \"EMQX\": {\n    \"title\": \"EMQX\",\n    \"repoName\": \"emqx/emqx-docs\",\n    \"githubUrl\": \"https://github.com/emqx/emqx-docs\",\n    \"description\": \"EMQX product documentation\",\n    \"owner\": \"emqx\",\n    \"repo\": \"emqx-docs\"\n  },\n  \"Ciborium\": {\n    \"title\": \"Ciborium\",\n    \"repoName\": \"enarx/ciborium\",\n    \"githubUrl\": \"https://github.com/enarx/ciborium\",\n    \"description\": \"CBOR utilities\",\n    \"owner\": \"enarx\",\n    \"repo\": \"ciborium\"\n  },\n  \"Databases\": {\n    \"title\": \"Databases\",\n    \"repoName\": \"encode/databases\",\n    \"githubUrl\": \"https://github.com/encode/databases\",\n    \"description\": \"Async database support for Python. 🗄\",\n    \"owner\": \"encode\",\n    \"repo\": \"databases\"\n  },\n  \"Django REST Framework\": {\n    \"title\": \"Django REST Framework\",\n    \"repoName\": \"encode/django-rest-framework\",\n    \"githubUrl\": \"https://github.com/encode/django-rest-framework\",\n    \"description\": \"Web APIs for Django. 🎸\",\n    \"owner\": \"encode\",\n    \"repo\": \"django-rest-framework\"\n  },\n  \"HTTPX\": {\n    \"title\": \"HTTPX\",\n    \"repoName\": \"encode/httpx\",\n    \"githubUrl\": \"https://github.com/encode/httpx\",\n    \"description\": \"A next generation HTTP client for Python. 🦋\",\n    \"owner\": \"encode\",\n    \"repo\": \"httpx\"\n  },\n  \"Starlette\": {\n    \"title\": \"Starlette\",\n    \"repoName\": \"encode/starlette\",\n    \"githubUrl\": \"https://github.com/encode/starlette\",\n    \"description\": \"The little ASGI framework that shines. 🌟\",\n    \"owner\": \"encode\",\n    \"repo\": \"starlette\"\n  },\n  \"Uvicorn\": {\n    \"title\": \"Uvicorn\",\n    \"repoName\": \"encode/uvicorn\",\n    \"githubUrl\": \"https://github.com/encode/uvicorn\",\n    \"description\": \"An ASGI web server, for Python. 🦄\",\n    \"owner\": \"encode\",\n    \"repo\": \"uvicorn\"\n  },\n  \"Encore\": {\n    \"title\": \"Encore\",\n    \"repoName\": \"encoredev/encore\",\n    \"githubUrl\": \"https://github.com/encoredev/encore\",\n    \"description\": \"Open Source Development Platform for building robust type-safe distributed systems with declarative infrastructure\",\n    \"owner\": \"encoredev\",\n    \"repo\": \"encore\"\n  },\n  \"Hazelcast Grails Plugin\": {\n    \"title\": \"Hazelcast Grails Plugin\",\n    \"repoName\": \"enesakar/hazelgrails\",\n    \"githubUrl\": \"https://github.com/enesakar/hazelgrails\",\n    \"description\": \"Hazelcast plugin for grails\",\n    \"owner\": \"enesakar\",\n    \"repo\": \"hazelgrails\"\n  },\n  \"Ensembl REST\": {\n    \"title\": \"Ensembl REST\",\n    \"repoName\": \"ensembl/ensembl-rest\",\n    \"githubUrl\": \"https://github.com/ensembl/ensembl-rest\",\n    \"description\": \"Language agnostic RESTful data access to Ensembl data over HTTP\",\n    \"owner\": \"ensembl\",\n    \"repo\": \"ensembl-rest\"\n  },\n  \"SpecDAL\": {\n    \"title\": \"SpecDAL\",\n    \"repoName\": \"enspec/specdal\",\n    \"githubUrl\": \"https://github.com/enspec/specdal\",\n    \"description\": \"Website landing page for SpecDAL project. https://specdal.github.io now redirects here.\",\n    \"owner\": \"enspec\",\n    \"repo\": \"specdal\"\n  },\n  \"Ent\": {\n    \"title\": \"Ent\",\n    \"repoName\": \"ent/ent\",\n    \"githubUrl\": \"https://github.com/ent/ent\",\n    \"description\": \"An entity framework for Go\",\n    \"owner\": \"ent\",\n    \"repo\": \"ent\"\n  },\n  \"DB-GPT\": {\n    \"title\": \"DB-GPT\",\n    \"repoName\": \"eosphoros-ai/db-gpt\",\n    \"githubUrl\": \"https://github.com/eosphoros-ai/db-gpt\",\n    \"description\": \"AI Native Data App Development framework with AWEL(Agentic Workflow Expression Language) and Agents\",\n    \"owner\": \"eosphoros-ai\",\n    \"repo\": \"db-gpt\"\n  },\n  \"Cachified\": {\n    \"title\": \"Cachified\",\n    \"repoName\": \"epicweb-dev/cachified\",\n    \"githubUrl\": \"https://github.com/epicweb-dev/cachified\",\n    \"description\": \"🤑 wrap virtually everything that can store by key to act as cache with ttl/max-age, stale-while-validate, parallel fetch protection and type-safety support\",\n    \"owner\": \"epicweb-dev\",\n    \"repo\": \"cachified\"\n  },\n  \"Epic Stack\": {\n    \"title\": \"Epic Stack\",\n    \"repoName\": \"epicweb-dev/epic-stack\",\n    \"githubUrl\": \"https://github.com/epicweb-dev/epic-stack\",\n    \"description\": \"This is a Full Stack app starter with the foundational things setup and configured for you to hit the ground running on your next EPIC idea.\",\n    \"owner\": \"epicweb-dev\",\n    \"repo\": \"epic-stack\"\n  },\n  \"eQTL Catalogue Resources\": {\n    \"title\": \"eQTL Catalogue Resources\",\n    \"repoName\": \"eqtl-catalogue/eqtl-catalogue-resources\",\n    \"githubUrl\": \"https://github.com/eqtl-catalogue/eqtl-catalogue-resources\",\n    \"description\": \"\",\n    \"owner\": \"eqtl-catalogue\",\n    \"repo\": \"eqtl-catalogue-resources\"\n  },\n  \"ERC3643\": {\n    \"title\": \"ERC3643\",\n    \"repoName\": \"erc-3643/documentation\",\n    \"githubUrl\": \"https://github.com/erc-3643/documentation\",\n    \"description\": \"Developer documentation for the ERC3643 regulated token standard\",\n    \"owner\": \"erc-3643\",\n    \"repo\": \"documentation\"\n  },\n  \"IB Insync\": {\n    \"title\": \"IB Insync\",\n    \"repoName\": \"erdewit/ib_insync\",\n    \"githubUrl\": \"https://github.com/erdewit/ib_insync\",\n    \"description\": \"Python sync/async framework for Interactive Brokers API\",\n    \"owner\": \"erdewit\",\n    \"repo\": \"ib_insync\"\n  },\n  \"J2534 Logger\": {\n    \"title\": \"J2534 Logger\",\n    \"repoName\": \"erik-smit/j2534-logger\",\n    \"githubUrl\": \"https://github.com/erik-smit/j2534-logger\",\n    \"description\": \"Automatically exported from code.google.com/p/j2534-logger\",\n    \"owner\": \"erik-smit\",\n    \"repo\": \"j2534-logger\"\n  },\n  \"Erlang\": {\n    \"title\": \"Erlang\",\n    \"repoName\": \"erlang/erlang-org\",\n    \"githubUrl\": \"https://github.com/erlang/erlang-org\",\n    \"description\": \"The erlang.org website\",\n    \"owner\": \"erlang\",\n    \"repo\": \"erlang-org\"\n  },\n  \"Convex Better Auth\": {\n    \"title\": \"Convex Better Auth\",\n    \"repoName\": \"erquhart/convex-better-auth\",\n    \"githubUrl\": \"https://github.com/erquhart/convex-better-auth\",\n    \"description\": \"\",\n    \"owner\": \"erquhart\",\n    \"repo\": \"convex-better-auth\"\n  },\n  \"Acts as Tenant\": {\n    \"title\": \"Acts as Tenant\",\n    \"repoName\": \"erwinm/acts_as_tenant\",\n    \"githubUrl\": \"https://github.com/erwinm/acts_as_tenant\",\n    \"description\": \"Easy multi-tenancy for Rails in a shared database setup.\",\n    \"owner\": \"erwinm\",\n    \"repo\": \"acts_as_tenant\"\n  },\n  \"ESLint\": {\n    \"title\": \"ESLint\",\n    \"repoName\": \"eslint/eslint\",\n    \"githubUrl\": \"https://github.com/eslint/eslint\",\n    \"description\": \"Find and fix problems in your JavaScript code.\",\n    \"owner\": \"eslint\",\n    \"repo\": \"eslint\"\n  },\n  \"ESPHome\": {\n    \"title\": \"ESPHome\",\n    \"repoName\": \"esphome/esphome-docs\",\n    \"githubUrl\": \"https://github.com/esphome/esphome-docs\",\n    \"description\": \"Source for esphome.io documentation files.\",\n    \"owner\": \"esphome\",\n    \"repo\": \"esphome-docs\"\n  },\n  \"Espressif IoT Development Framework\": {\n    \"title\": \"Espressif IoT Development Framework\",\n    \"repoName\": \"espressif/esp-idf\",\n    \"githubUrl\": \"https://github.com/espressif/esp-idf\",\n    \"description\": \"Espressif IoT Development Framework. Official development framework for Espressif SoCs.\",\n    \"owner\": \"espressif\",\n    \"repo\": \"esp-idf\"\n  },\n  \"ArcGIS Maps SDK for Swift\": {\n    \"title\": \"ArcGIS Maps SDK for Swift\",\n    \"repoName\": \"esri/arcgis-maps-sdk-swift\",\n    \"githubUrl\": \"https://github.com/esri/arcgis-maps-sdk-swift\",\n    \"description\": \"Swift Package Manager support for ArcGIS Maps SDK for Swift\",\n    \"owner\": \"esri\",\n    \"repo\": \"arcgis-maps-sdk-swift\"\n  },\n  \"ArcGIS Pro SDK\": {\n    \"title\": \"ArcGIS Pro SDK\",\n    \"repoName\": \"esri/arcgis-pro-sdk\",\n    \"githubUrl\": \"https://github.com/esri/arcgis-pro-sdk\",\n    \"description\": \"ArcGIS Pro SDK for Microsoft .NET is the new .NET SDK for the ArcGIS Pro Application.\",\n    \"owner\": \"esri\",\n    \"repo\": \"arcgis-pro-sdk\"\n  },\n  \"Ethereum\": {\n    \"title\": \"Ethereum\",\n    \"repoName\": \"tunnckocore/ethereum-jsonrpc-api-docs\",\n    \"githubUrl\": \"https://github.com/tunnckocore/ethereum-jsonrpc-api-docs\",\n    \"description\": \"Ethereum JSON-RPC API docs - methods. params, everything. Because i need it easily on Githib in full as Markdown format, for Upstash Context7 to be able to index it.\",\n    \"owner\": \"tunnckocore\",\n    \"repo\": \"ethereum-jsonrpc-api-docs\"\n  },\n  \"Solidity\": {\n    \"title\": \"Solidity\",\n    \"repoName\": \"ethereum/solidity\",\n    \"githubUrl\": \"https://github.com/ethereum/solidity\",\n    \"description\": \"Solidity, the Smart Contract Programming Language\",\n    \"owner\": \"ethereum\",\n    \"repo\": \"solidity\"\n  },\n  \"Web3.py\": {\n    \"title\": \"Web3.py\",\n    \"repoName\": \"ethereum/web3.py\",\n    \"githubUrl\": \"https://github.com/ethereum/web3.py\",\n    \"description\": \"A python interface for interacting with the Ethereum blockchain and ecosystem.\",\n    \"owner\": \"ethereum\",\n    \"repo\": \"web3.py\"\n  },\n  \"Ethers.js\": {\n    \"title\": \"Ethers.js\",\n    \"repoName\": \"ethers-io/ethers.js\",\n    \"githubUrl\": \"https://github.com/ethers-io/ethers.js\",\n    \"description\": \"Complete Ethereum library and wallet implementation in JavaScript.\",\n    \"owner\": \"ethers-io\",\n    \"repo\": \"ethers.js\"\n  },\n  \"Ethereum Vault Connector\": {\n    \"title\": \"Ethereum Vault Connector\",\n    \"repoName\": \"euler-xyz/ethereum-vault-connector\",\n    \"githubUrl\": \"https://github.com/euler-xyz/ethereum-vault-connector\",\n    \"description\": \"The Ethereum Vault Connector (EVC) is a mediator between Vaults that may have borrowing functionality.\",\n    \"owner\": \"euler-xyz\",\n    \"repo\": \"ethereum-vault-connector\"\n  },\n  \"Euler Earn\": {\n    \"title\": \"Euler Earn\",\n    \"repoName\": \"euler-xyz/euler-earn\",\n    \"githubUrl\": \"https://github.com/euler-xyz/euler-earn\",\n    \"description\": \"Euler Earn, An ERC4626 vault for passive yield earning.\",\n    \"owner\": \"euler-xyz\",\n    \"repo\": \"euler-earn\"\n  },\n  \"Euler Price Oracles\": {\n    \"title\": \"Euler Price Oracles\",\n    \"repoName\": \"euler-xyz/euler-price-oracle\",\n    \"githubUrl\": \"https://github.com/euler-xyz/euler-price-oracle\",\n    \"description\": \"Euler Price Oracles, a library of immutable oracle adapters and components\",\n    \"owner\": \"euler-xyz\",\n    \"repo\": \"euler-price-oracle\"\n  },\n  \"Euler Vault Kit\": {\n    \"title\": \"Euler Vault Kit\",\n    \"repoName\": \"euler-xyz/euler-vault-kit\",\n    \"githubUrl\": \"https://github.com/euler-xyz/euler-vault-kit\",\n    \"description\": \"Build lending vaults which connect through Ethereum Vault Connector\",\n    \"owner\": \"euler-xyz\",\n    \"repo\": \"euler-vault-kit\"\n  },\n  \"Euler Vault Kit Periphery\": {\n    \"title\": \"Euler Vault Kit Periphery\",\n    \"repoName\": \"euler-xyz/evk-periphery\",\n    \"githubUrl\": \"https://github.com/euler-xyz/evk-periphery\",\n    \"description\": \"Periphery contracts for use with the Euler Vault Kit (EVK)\",\n    \"owner\": \"euler-xyz\",\n    \"repo\": \"evk-periphery\"\n  },\n  \"Fast Agent\": {\n    \"title\": \"Fast Agent\",\n    \"repoName\": \"evalstate/fast-agent\",\n    \"githubUrl\": \"https://github.com/evalstate/fast-agent\",\n    \"description\": \"Define, Prompt and Test MCP enabled Agents and Workflows\",\n    \"owner\": \"evalstate\",\n    \"repo\": \"fast-agent\"\n  },\n  \"Json Patch\": {\n    \"title\": \"Json Patch\",\n    \"repoName\": \"evanphx/json-patch\",\n    \"githubUrl\": \"https://github.com/evanphx/json-patch\",\n    \"description\": \"A Go library to apply RFC6902 patches and create and apply RFC7386 patches\",\n    \"owner\": \"evanphx\",\n    \"repo\": \"json-patch\"\n  },\n  \"Evidence\": {\n    \"title\": \"Evidence\",\n    \"repoName\": \"evidence-dev/evidence\",\n    \"githubUrl\": \"https://github.com/evidence-dev/evidence\",\n    \"description\": \"Business intelligence as code: build fast, interactive data visualizations in SQL and markdown\",\n    \"owner\": \"evidence-dev\",\n    \"repo\": \"evidence\"\n  },\n  \"Shadcn Svelte\": {\n    \"title\": \"Shadcn Svelte\",\n    \"repoName\": \"huntabyte/shadcn-svelte\",\n    \"githubUrl\": \"https://github.com/huntabyte/shadcn-svelte\",\n    \"description\": \"shadcn/ui, but for Svelte. ✨\",\n    \"owner\": \"huntabyte\",\n    \"repo\": \"shadcn-svelte\"\n  },\n  \"Evmos\": {\n    \"title\": \"Evmos\",\n    \"repoName\": \"evmos/evmos\",\n    \"githubUrl\": \"https://github.com/evmos/evmos\",\n    \"description\": \"Evmos is the canonical EVM chain on Cosmos. Evmos is the flagship implementation of evmOS, a stack to build forward compatible EVMs\",\n    \"owner\": \"evmos\",\n    \"repo\": \"evmos\"\n  },\n  \"Evolution API\": {\n    \"title\": \"Evolution API\",\n    \"repoName\": \"evolutionapi/evolution-api\",\n    \"githubUrl\": \"https://github.com/evolutionapi/evolution-api\",\n    \"description\": \"Evolution API is an open-source WhatsApp integration API\",\n    \"owner\": \"evolutionapi\",\n    \"repo\": \"evolution-api\"\n  },\n  \"Evolveum\": {\n    \"title\": \"Evolveum\",\n    \"repoName\": \"evolveum/docs\",\n    \"githubUrl\": \"https://github.com/evolveum/docs\",\n    \"description\": \"docs.evolveum.com\",\n    \"owner\": \"evolveum\",\n    \"repo\": \"docs\"\n  },\n  \"Evolveum MidPoint\": {\n    \"title\": \"Evolveum MidPoint\",\n    \"repoName\": \"evolveum/midpoint\",\n    \"githubUrl\": \"https://github.com/evolveum/midpoint\",\n    \"description\": \"Evolveum MidPoint: Identity Management (IDM) and Identity Governance (IGA)\",\n    \"owner\": \"evolveum\",\n    \"repo\": \"midpoint\"\n  },\n  \"Exa Javascript SDK\": {\n    \"title\": \"Exa Javascript SDK\",\n    \"repoName\": \"exa-labs/exa-js\",\n    \"githubUrl\": \"https://github.com/exa-labs/exa-js\",\n    \"description\": \"The Official Exa Javascript SDK\",\n    \"owner\": \"exa-labs\",\n    \"repo\": \"exa-js\"\n  },\n  \"Excalibur\": {\n    \"title\": \"Excalibur\",\n    \"repoName\": \"excaliburjs/excalibur\",\n    \"githubUrl\": \"https://github.com/excaliburjs/excalibur\",\n    \"description\": \"🎮 Your friendly TypeScript 2D game engine for the web 🗡️\",\n    \"owner\": \"excaliburjs\",\n    \"repo\": \"excalibur\"\n  },\n  \"Excalidraw\": {\n    \"title\": \"Excalidraw\",\n    \"repoName\": \"excalidraw/excalidraw\",\n    \"githubUrl\": \"https://github.com/excalidraw/excalidraw\",\n    \"description\": \"Virtual whiteboard for sketching hand-drawn like diagrams\",\n    \"owner\": \"excalidraw\",\n    \"repo\": \"excalidraw\"\n  },\n  \"Excel-DNA\": {\n    \"title\": \"Excel-DNA\",\n    \"repoName\": \"excel-dna/exceldna\",\n    \"githubUrl\": \"https://github.com/excel-dna/exceldna\",\n    \"description\": \"Excel-DNA - Free and easy .NET for Excel. This repository contains the core Excel-DNA library.\",\n    \"owner\": \"excel-dna\",\n    \"repo\": \"exceldna\"\n  },\n  \"ExcelJS\": {\n    \"title\": \"ExcelJS\",\n    \"repoName\": \"exceljs/exceljs\",\n    \"githubUrl\": \"https://github.com/exceljs/exceljs\",\n    \"description\": \"Excel Workbook Manager\",\n    \"owner\": \"exceljs\",\n    \"repo\": \"exceljs\"\n  },\n  \"Ragas\": {\n    \"title\": \"Ragas\",\n    \"repoName\": \"explodinggradients/ragas\",\n    \"githubUrl\": \"https://github.com/explodinggradients/ragas\",\n    \"description\": \"Supercharge Your LLM Application Evaluations 🚀\",\n    \"owner\": \"explodinggradients\",\n    \"repo\": \"ragas\"\n  },\n  \"spaCy\": {\n    \"title\": \"spaCy\",\n    \"repoName\": \"explosion/spacy\",\n    \"githubUrl\": \"https://github.com/explosion/spacy\",\n    \"description\": \"💫 Industrial-strength Natural Language Processing (NLP) in Python\",\n    \"owner\": \"explosion\",\n    \"repo\": \"spacy\"\n  },\n  \"Expo\": {\n    \"title\": \"Expo\",\n    \"repoName\": \"expo/expo\",\n    \"githubUrl\": \"https://github.com/expo/expo\",\n    \"description\": \"An open-source framework for making universal native apps with React. Expo runs on Android, iOS, and the web.\",\n    \"owner\": \"expo\",\n    \"repo\": \"expo\"\n  },\n  \"ExpressionEngine\": {\n    \"title\": \"ExpressionEngine\",\n    \"repoName\": \"expressionengine/expressionengine-user-guide\",\n    \"githubUrl\": \"https://github.com/expressionengine/expressionengine-user-guide\",\n    \"description\": \"The source for the HTML ExpressionEngine user guides found at https://docs.expressionengine.com\",\n    \"owner\": \"expressionengine\",\n    \"repo\": \"expressionengine-user-guide\"\n  },\n  \"Express\": {\n    \"title\": \"Express\",\n    \"repoName\": \"expressjs/express\",\n    \"githubUrl\": \"https://github.com/expressjs/express\",\n    \"description\": \"Fast, unopinionated, minimalist web framework for node.\",\n    \"owner\": \"expressjs\",\n    \"repo\": \"express\"\n  },\n  \"Claude Task Master\": {\n    \"title\": \"Claude Task Master\",\n    \"repoName\": \"eyaltoledano/claude-task-master\",\n    \"githubUrl\": \"https://github.com/eyaltoledano/claude-task-master\",\n    \"description\": \"An AI-powered task-management system you can drop into Cursor, Lovable, Windsurf, Roo, and others.\",\n    \"owner\": \"eyaltoledano\",\n    \"repo\": \"claude-task-master\"\n  },\n  \"Claude Desktop\": {\n    \"title\": \"Claude Desktop\",\n    \"repoName\": \"ezyang/codemcp\",\n    \"githubUrl\": \"https://github.com/ezyang/codemcp\",\n    \"description\": \"Coding assistant MCP for Claude Desktop\",\n    \"owner\": \"ezyang\",\n    \"repo\": \"codemcp\"\n  },\n  \"Awesome ChatGPT Prompts\": {\n    \"title\": \"Awesome ChatGPT Prompts\",\n    \"repoName\": \"f/awesome-chatgpt-prompts\",\n    \"githubUrl\": \"https://github.com/f/awesome-chatgpt-prompts\",\n    \"description\": \"This repo includes ChatGPT prompt curation to use ChatGPT and other LLM tools better.\",\n    \"owner\": \"f\",\n    \"repo\": \"awesome-chatgpt-prompts\"\n  },\n  \"Valibot\": {\n    \"title\": \"Valibot\",\n    \"repoName\": \"fabian-hiller/valibot\",\n    \"githubUrl\": \"https://github.com/fabian-hiller/valibot\",\n    \"description\": \"The modular and type safe schema library for validating structural data 🤖\",\n    \"owner\": \"fabian-hiller\",\n    \"repo\": \"valibot\"\n  },\n  \"Fabric.js\": {\n    \"title\": \"Fabric.js\",\n    \"repoName\": \"fabricjs/fabricjs.com\",\n    \"githubUrl\": \"https://github.com/fabricjs/fabricjs.com\",\n    \"description\": \"http://fabricjs.com\",\n    \"owner\": \"fabricjs\",\n    \"repo\": \"fabricjs.com\"\n  },\n  \"Docusaurus\": {\n    \"title\": \"Docusaurus\",\n    \"repoName\": \"facebook/docusaurus\",\n    \"githubUrl\": \"https://github.com/facebook/docusaurus\",\n    \"description\": \"Easy to maintain open source documentation websites.\",\n    \"owner\": \"facebook\",\n    \"repo\": \"docusaurus\"\n  },\n  \"Meta Facebook Node.js Business SDK\": {\n    \"title\": \"Meta Facebook Node.js Business SDK\",\n    \"repoName\": \"facebook/facebook-nodejs-business-sdk\",\n    \"githubUrl\": \"https://github.com/facebook/facebook-nodejs-business-sdk\",\n    \"description\": \"Node.js SDK for Meta Marketing APIs\",\n    \"owner\": \"facebook\",\n    \"repo\": \"facebook-nodejs-business-sdk\"\n  },\n  \"Fresco\": {\n    \"title\": \"Fresco\",\n    \"repoName\": \"facebook/fresco\",\n    \"githubUrl\": \"https://github.com/facebook/fresco\",\n    \"description\": \"An Android library for managing images and the memory they use.\",\n    \"owner\": \"facebook\",\n    \"repo\": \"fresco\"\n  },\n  \"Lexical\": {\n    \"title\": \"Lexical\",\n    \"repoName\": \"facebook/lexical\",\n    \"githubUrl\": \"https://github.com/facebook/lexical\",\n    \"description\": \"Lexical is an extensible text editor framework that provides excellent reliability, accessibility and performance.\",\n    \"owner\": \"facebook\",\n    \"repo\": \"lexical\"\n  },\n  \"Prophet\": {\n    \"title\": \"Prophet\",\n    \"repoName\": \"facebook/prophet\",\n    \"githubUrl\": \"https://github.com/facebook/prophet\",\n    \"description\": \"Tool for producing high quality forecasts for time series data that has multiple seasonality with linear or non-linear growth.\",\n    \"owner\": \"facebook\",\n    \"repo\": \"prophet\"\n  },\n  \"React\": {\n    \"title\": \"React\",\n    \"repoName\": \"reactjs/react.dev\",\n    \"githubUrl\": \"https://github.com/reactjs/react.dev\",\n    \"description\": \"The React documentation website\",\n    \"owner\": \"reactjs\",\n    \"repo\": \"react.dev\"\n  },\n  \"React Native\": {\n    \"title\": \"React Native\",\n    \"repoName\": \"facebook/react-native-website\",\n    \"githubUrl\": \"https://github.com/facebook/react-native-website\",\n    \"description\": \"The React Native website and docs\",\n    \"owner\": \"facebook\",\n    \"repo\": \"react-native-website\"\n  },\n  \"React Strict DOM\": {\n    \"title\": \"React Strict DOM\",\n    \"repoName\": \"facebook/react-strict-dom\",\n    \"githubUrl\": \"https://github.com/facebook/react-strict-dom\",\n    \"description\": \"React Strict DOM (RSD) standardizes the development of styled React components for web and native.\",\n    \"owner\": \"facebook\",\n    \"repo\": \"react-strict-dom\"\n  },\n  \"Relay\": {\n    \"title\": \"Relay\",\n    \"repoName\": \"facebook/relay\",\n    \"githubUrl\": \"https://github.com/facebook/relay\",\n    \"description\": \"Relay is a JavaScript framework for building data-driven React applications.\",\n    \"owner\": \"facebook\",\n    \"repo\": \"relay\"\n  },\n  \"RocksDB\": {\n    \"title\": \"RocksDB\",\n    \"repoName\": \"facebook/rocksdb\",\n    \"githubUrl\": \"https://github.com/facebook/rocksdb\",\n    \"description\": \"A library that provides an embeddable, persistent key-value store for fast storage.\",\n    \"owner\": \"facebook\",\n    \"repo\": \"rocksdb\"\n  },\n  \"StyleX\": {\n    \"title\": \"StyleX\",\n    \"repoName\": \"facebook/stylex\",\n    \"githubUrl\": \"https://github.com/facebook/stylex\",\n    \"description\": \"StyleX is the styling system for ambitious user interfaces.\",\n    \"owner\": \"facebook\",\n    \"repo\": \"stylex\"\n  },\n  \"Detectron2\": {\n    \"title\": \"Detectron2\",\n    \"repoName\": \"facebookresearch/detectron2\",\n    \"githubUrl\": \"https://github.com/facebookresearch/detectron2\",\n    \"description\": \"Detectron2 is a platform for object detection, segmentation and other visual recognition tasks.\",\n    \"owner\": \"facebookresearch\",\n    \"repo\": \"detectron2\"\n  },\n  \"Hydra\": {\n    \"title\": \"Hydra\",\n    \"repoName\": \"facebookresearch/hydra\",\n    \"githubUrl\": \"https://github.com/facebookresearch/hydra\",\n    \"description\": \"Hydra is a framework for elegantly configuring complex applications\",\n    \"owner\": \"facebookresearch\",\n    \"repo\": \"hydra\"\n  },\n  \"Dash Bootstrap Components\": {\n    \"title\": \"Dash Bootstrap Components\",\n    \"repoName\": \"facultyai/dash-bootstrap-components\",\n    \"githubUrl\": \"https://github.com/facultyai/dash-bootstrap-components\",\n    \"description\": \"Bootstrap components for Plotly Dash\",\n    \"owner\": \"facultyai\",\n    \"repo\": \"dash-bootstrap-components\"\n  },\n  \"Fail2ban\": {\n    \"title\": \"Fail2ban\",\n    \"repoName\": \"fail2ban/fail2ban\",\n    \"githubUrl\": \"https://github.com/fail2ban/fail2ban\",\n    \"description\": \"Daemon to ban hosts that cause multiple authentication errors\",\n    \"owner\": \"fail2ban\",\n    \"repo\": \"fail2ban\"\n  },\n  \"Pluto\": {\n    \"title\": \"Pluto\",\n    \"repoName\": \"fairwindsops/pluto\",\n    \"githubUrl\": \"https://github.com/fairwindsops/pluto\",\n    \"description\": \"A cli tool to help discover deprecated apiVersions in Kubernetes\",\n    \"owner\": \"fairwindsops\",\n    \"repo\": \"pluto\"\n  },\n  \"Faker\": {\n    \"title\": \"Faker\",\n    \"repoName\": \"faker-js/faker\",\n    \"githubUrl\": \"https://github.com/faker-js/faker\",\n    \"description\": \"Generate massive amounts of fake data in the browser and node.js\",\n    \"owner\": \"faker-js\",\n    \"repo\": \"faker\"\n  },\n  \"Fal\": {\n    \"title\": \"Fal\",\n    \"repoName\": \"fal-ai/fal\",\n    \"githubUrl\": \"https://github.com/fal-ai/fal\",\n    \"description\": \"⚡ Fastest way to serve open source ML models to millions\",\n    \"owner\": \"fal-ai\",\n    \"repo\": \"fal\"\n  },\n  \"Farcaster Miniapps\": {\n    \"title\": \"Farcaster Miniapps\",\n    \"repoName\": \"farcasterxyz/miniapps\",\n    \"githubUrl\": \"https://github.com/farcasterxyz/miniapps\",\n    \"description\": \"\",\n    \"owner\": \"farcasterxyz\",\n    \"repo\": \"miniapps\"\n  },\n  \"Farcaster Snapchain\": {\n    \"title\": \"Farcaster Snapchain\",\n    \"repoName\": \"farcasterxyz/snapchain\",\n    \"githubUrl\": \"https://github.com/farcasterxyz/snapchain\",\n    \"description\": \"The open-source, canonical implementation of Farcaster's Snapchain network.\",\n    \"owner\": \"farcasterxyz\",\n    \"repo\": \"snapchain\"\n  },\n  \"Django Jazzmin\": {\n    \"title\": \"Django Jazzmin\",\n    \"repoName\": \"farridav/django-jazzmin\",\n    \"githubUrl\": \"https://github.com/farridav/django-jazzmin\",\n    \"description\": \"Jazzy theme for Django\",\n    \"owner\": \"farridav\",\n    \"repo\": \"django-jazzmin\"\n  },\n  \"SQLModel\": {\n    \"title\": \"SQLModel\",\n    \"repoName\": \"fastapi/sqlmodel\",\n    \"githubUrl\": \"https://github.com/fastapi/sqlmodel\",\n    \"description\": \"SQL databases in Python, designed for simplicity, compatibility, and robustness.\",\n    \"owner\": \"fastapi\",\n    \"repo\": \"sqlmodel\"\n  },\n  \"Typer\": {\n    \"title\": \"Typer\",\n    \"repoName\": \"fastapi/typer.git\",\n    \"githubUrl\": \"https://github.com/fastapi/typer.git\",\n    \"description\": \"Typer, build great CLIs. Easy to code. Based on Python type hints.\",\n    \"owner\": \"fastapi\",\n    \"repo\": \"typer.git\"\n  },\n  \"FastEndpoints\": {\n    \"title\": \"FastEndpoints\",\n    \"repoName\": \"fastendpoints/library\",\n    \"githubUrl\": \"https://github.com/fastendpoints/library\",\n    \"description\": \"A light-weight REST API development framework for ASP.NET 8 and newer.\",\n    \"owner\": \"fastendpoints\",\n    \"repo\": \"library\"\n  },\n  \"Fastify\": {\n    \"title\": \"Fastify\",\n    \"repoName\": \"fastify/fastify\",\n    \"githubUrl\": \"https://github.com/fastify/fastify\",\n    \"description\": \"Fast and low overhead web framework, for Node.js\",\n    \"owner\": \"fastify\",\n    \"repo\": \"fastify\"\n  },\n  \"Fastify CLI\": {\n    \"title\": \"Fastify CLI\",\n    \"repoName\": \"fastify/fastify-cli\",\n    \"githubUrl\": \"https://github.com/fastify/fastify-cli\",\n    \"description\": \"Run a Fastify application with one command!\",\n    \"owner\": \"fastify\",\n    \"repo\": \"fastify-cli\"\n  },\n  \"Fastify Rate Limit\": {\n    \"title\": \"Fastify Rate Limit\",\n    \"repoName\": \"fastify/fastify-rate-limit\",\n    \"githubUrl\": \"https://github.com/fastify/fastify-rate-limit\",\n    \"description\": \"A low overhead rate limiter for your routes\",\n    \"owner\": \"fastify\",\n    \"repo\": \"fastify-rate-limit\"\n  },\n  \"Fastlane\": {\n    \"title\": \"Fastlane\",\n    \"repoName\": \"fastlane/fastlane\",\n    \"githubUrl\": \"https://github.com/fastlane/fastlane\",\n    \"description\": \"🚀 The easiest way to automate building and releasing your iOS and Android apps\",\n    \"owner\": \"fastlane\",\n    \"repo\": \"fastlane\"\n  },\n  \"Telegraf\": {\n    \"title\": \"Telegraf\",\n    \"repoName\": \"telegraf/telegraf\",\n    \"githubUrl\": \"https://github.com/telegraf/telegraf\",\n    \"description\": \"Modern Telegram Bot Framework for Node.js\",\n    \"owner\": \"telegraf\",\n    \"repo\": \"telegraf\"\n  },\n  \"Feathers\": {\n    \"title\": \"Feathers\",\n    \"repoName\": \"feathersjs/feathers\",\n    \"githubUrl\": \"https://github.com/feathersjs/feathers\",\n    \"description\": \"The API and real-time application framework\",\n    \"owner\": \"feathersjs\",\n    \"repo\": \"feathers\"\n  },\n  \"Feature Sliced\": {\n    \"title\": \"Feature Sliced\",\n    \"repoName\": \"feature-sliced/documentation\",\n    \"githubUrl\": \"https://github.com/feature-sliced/documentation\",\n    \"description\": \"🍰 Architectural methodology for frontend projects\",\n    \"owner\": \"feature-sliced\",\n    \"repo\": \"documentation\"\n  },\n  \"Bloc\": {\n    \"title\": \"Bloc\",\n    \"repoName\": \"felangel/bloc\",\n    \"githubUrl\": \"https://github.com/felangel/bloc\",\n    \"description\": \"A predictable state management library that helps implement the BLoC design pattern\",\n    \"owner\": \"felangel\",\n    \"repo\": \"bloc\"\n  },\n  \"Bull Board\": {\n    \"title\": \"Bull Board\",\n    \"repoName\": \"felixmosh/bull-board\",\n    \"githubUrl\": \"https://github.com/felixmosh/bull-board\",\n    \"description\": \"🎯 Queue background jobs inspector \",\n    \"owner\": \"felixmosh\",\n    \"repo\": \"bull-board\"\n  },\n  \"CropperJS\": {\n    \"title\": \"CropperJS\",\n    \"repoName\": \"fengyuanchen/cropperjs\",\n    \"githubUrl\": \"https://github.com/fengyuanchen/cropperjs\",\n    \"description\": \"JavaScript image cropper.\",\n    \"owner\": \"fengyuanchen\",\n    \"repo\": \"cropperjs\"\n  },\n  \"FetchFox\": {\n    \"title\": \"FetchFox\",\n    \"repoName\": \"fetchfox/fetchfox\",\n    \"githubUrl\": \"https://github.com/fetchfox/fetchfox\",\n    \"description\": \"\",\n    \"owner\": \"fetchfox\",\n    \"repo\": \"fetchfox\"\n  },\n  \"FFmpeg\": {\n    \"title\": \"FFmpeg\",\n    \"repoName\": \"ffmpeg/ffmpeg\",\n    \"githubUrl\": \"https://github.com/ffmpeg/ffmpeg\",\n    \"description\": \"Mirror of https://git.ffmpeg.org/ffmpeg.git\",\n    \"owner\": \"ffmpeg\",\n    \"repo\": \"ffmpeg\"\n  },\n  \"Fiberplane\": {\n    \"title\": \"Fiberplane\",\n    \"repoName\": \"fiberplane/fiberplane\",\n    \"githubUrl\": \"https://github.com/fiberplane/fiberplane\",\n    \"description\": \"Supercharge your local development\",\n    \"owner\": \"fiberplane\",\n    \"repo\": \"fiberplane\"\n  },\n  \"Figma REST API\": {\n    \"title\": \"Figma REST API\",\n    \"repoName\": \"figma/rest-api-spec\",\n    \"githubUrl\": \"https://github.com/figma/rest-api-spec\",\n    \"description\": \"OpenAPI specification and types for the Figma REST API\",\n    \"owner\": \"figma\",\n    \"repo\": \"rest-api-spec\"\n  },\n  \"Filament\": {\n    \"title\": \"Filament\",\n    \"repoName\": \"filamentphp/filament\",\n    \"githubUrl\": \"https://github.com/filamentphp/filament\",\n    \"description\": \"A collection of beautiful full-stack components for Laravel. The perfect starting point for your next app. Using Livewire, Alpine.js and Tailwind CSS.\",\n    \"owner\": \"filamentphp\",\n    \"repo\": \"filament\"\n  },\n  \"Sidekiq RS\": {\n    \"title\": \"Sidekiq RS\",\n    \"repoName\": \"film42/sidekiq-rs\",\n    \"githubUrl\": \"https://github.com/film42/sidekiq-rs\",\n    \"description\": \"A port of sidekiq to rust using tokio\",\n    \"owner\": \"film42\",\n    \"repo\": \"sidekiq-rs\"\n  },\n  \"Finbuckle MultiTenant\": {\n    \"title\": \"Finbuckle MultiTenant\",\n    \"repoName\": \"finbuckle/finbuckle.multitenant\",\n    \"githubUrl\": \"https://github.com/finbuckle/finbuckle.multitenant\",\n    \"description\": \"Finbuckle.MultiTenant is an open-source multitenancy middleware library for .NET. It enables tenant resolution, per-tenant app behavior, and per-tenant data isolation.\",\n    \"owner\": \"finbuckle\",\n    \"repo\": \"finbuckle.multitenant\"\n  },\n  \"Finbuckle\": {\n    \"title\": \"Finbuckle\",\n    \"repoName\": \"finbuckle/finbuckle.website\",\n    \"githubUrl\": \"https://github.com/finbuckle/finbuckle.website\",\n    \"description\": \"Finbuckle Website\",\n    \"owner\": \"finbuckle\",\n    \"repo\": \"finbuckle.website\"\n  },\n  \"FingerprintJS\": {\n    \"title\": \"FingerprintJS\",\n    \"repoName\": \"fingerprintjs/fingerprintjs\",\n    \"githubUrl\": \"https://github.com/fingerprintjs/fingerprintjs\",\n    \"description\": \"The most advanced browser fingerprinting library.\",\n    \"owner\": \"fingerprintjs\",\n    \"repo\": \"fingerprintjs\"\n  },\n  \"Firebase Admin Node.js SDK\": {\n    \"title\": \"Firebase Admin Node.js SDK\",\n    \"repoName\": \"firebase/firebase-admin-node\",\n    \"githubUrl\": \"https://github.com/firebase/firebase-admin-node\",\n    \"description\": \"Firebase Admin Node.js SDK\",\n    \"owner\": \"firebase\",\n    \"repo\": \"firebase-admin-node\"\n  },\n  \"Firebase Admin Python SDK\": {\n    \"title\": \"Firebase Admin Python SDK\",\n    \"repoName\": \"firebase/firebase-admin-python\",\n    \"githubUrl\": \"https://github.com/firebase/firebase-admin-python\",\n    \"description\": \"Firebase Admin Python SDK\",\n    \"owner\": \"firebase\",\n    \"repo\": \"firebase-admin-python\"\n  },\n  \"Firebase Cloud Functions\": {\n    \"title\": \"Firebase Cloud Functions\",\n    \"repoName\": \"firebase/firebase-functions\",\n    \"githubUrl\": \"https://github.com/firebase/firebase-functions\",\n    \"description\": \"Firebase SDK for Cloud Functions\",\n    \"owner\": \"firebase\",\n    \"repo\": \"firebase-functions\"\n  },\n  \"Firebase iOS SDK\": {\n    \"title\": \"Firebase iOS SDK\",\n    \"repoName\": \"firebase/firebase-ios-sdk\",\n    \"githubUrl\": \"https://github.com/firebase/firebase-ios-sdk\",\n    \"description\": \"Firebase SDK for Apple App Development\",\n    \"owner\": \"firebase\",\n    \"repo\": \"firebase-ios-sdk\"\n  },\n  \"Firebase JavaScript SDK\": {\n    \"title\": \"Firebase JavaScript SDK\",\n    \"repoName\": \"firebase/firebase-js-sdk\",\n    \"githubUrl\": \"https://github.com/firebase/firebase-js-sdk\",\n    \"description\": \"Firebase Javascript SDK\",\n    \"owner\": \"firebase\",\n    \"repo\": \"firebase-js-sdk\"\n  },\n  \"Firebase Command Line Tools\": {\n    \"title\": \"Firebase Command Line Tools\",\n    \"repoName\": \"firebase/firebase-tools\",\n    \"githubUrl\": \"https://github.com/firebase/firebase-tools\",\n    \"description\": \"The Firebase Command Line Tools\",\n    \"owner\": \"firebase\",\n    \"repo\": \"firebase-tools\"\n  },\n  \"FlutterFire\": {\n    \"title\": \"FlutterFire\",\n    \"repoName\": \"firebase/flutterfire\",\n    \"githubUrl\": \"https://github.com/firebase/flutterfire\",\n    \"description\": \"🔥 A collection of Firebase plugins for Flutter apps.\",\n    \"owner\": \"firebase\",\n    \"repo\": \"flutterfire\"\n  },\n  \"Firebase Functions Samples\": {\n    \"title\": \"Firebase Functions Samples\",\n    \"repoName\": \"firebase/functions-samples\",\n    \"githubUrl\": \"https://github.com/firebase/functions-samples\",\n    \"description\": \"Collection of sample apps showcasing popular use cases using Cloud Functions for Firebase\",\n    \"owner\": \"firebase\",\n    \"repo\": \"functions-samples\"\n  },\n  \"Genkit\": {\n    \"title\": \"Genkit\",\n    \"repoName\": \"firebase/genkit\",\n    \"githubUrl\": \"https://github.com/firebase/genkit\",\n    \"description\": \"An open source framework for building AI-powered apps with familiar code-centric patterns. Genkit makes it easy to develop, integrate, and test AI features with observability and evaluations. Genkit works with various models and platforms.\",\n    \"owner\": \"firebase\",\n    \"repo\": \"genkit\"\n  },\n  \"Firebase Quickstart Nodejs\": {\n    \"title\": \"Firebase Quickstart Nodejs\",\n    \"repoName\": \"firebase/quickstart-nodejs\",\n    \"githubUrl\": \"https://github.com/firebase/quickstart-nodejs\",\n    \"description\": \"\",\n    \"owner\": \"firebase\",\n    \"repo\": \"quickstart-nodejs\"\n  },\n  \"Firecracker Containerd\": {\n    \"title\": \"Firecracker Containerd\",\n    \"repoName\": \"firecracker-microvm/firecracker-containerd\",\n    \"githubUrl\": \"https://github.com/firecracker-microvm/firecracker-containerd\",\n    \"description\": \"firecracker-containerd enables containerd to manage containers as Firecracker microVMs\",\n    \"owner\": \"firecracker-microvm\",\n    \"repo\": \"firecracker-containerd\"\n  },\n  \"Firecracker Go SDK\": {\n    \"title\": \"Firecracker Go SDK\",\n    \"repoName\": \"firecracker-microvm/firecracker-go-sdk\",\n    \"githubUrl\": \"https://github.com/firecracker-microvm/firecracker-go-sdk\",\n    \"description\": \"An SDK in Go for the Firecracker microVM API\",\n    \"owner\": \"firecracker-microvm\",\n    \"repo\": \"firecracker-go-sdk\"\n  },\n  \"Fish Shell\": {\n    \"title\": \"Fish Shell\",\n    \"repoName\": \"fish-shell/fish-shell\",\n    \"githubUrl\": \"https://github.com/fish-shell/fish-shell\",\n    \"description\": \"The user-friendly command line shell.\",\n    \"owner\": \"fish-shell\",\n    \"repo\": \"fish-shell\"\n  },\n  \"Slsk Batchdl\": {\n    \"title\": \"Slsk Batchdl\",\n    \"repoName\": \"fiso64/slsk-batchdl\",\n    \"githubUrl\": \"https://github.com/fiso64/slsk-batchdl\",\n    \"description\": \"Advanced download tool for Soulseek.\",\n    \"owner\": \"fiso64\",\n    \"repo\": \"slsk-batchdl\"\n  },\n  \"Ultravox\": {\n    \"title\": \"Ultravox\",\n    \"repoName\": \"fixie-ai/ultradox\",\n    \"githubUrl\": \"https://github.com/fixie-ai/ultradox\",\n    \"description\": \"Docs for Ultravox\",\n    \"owner\": \"fixie-ai\",\n    \"repo\": \"ultradox\"\n  },\n  \"React Toastify\": {\n    \"title\": \"React Toastify\",\n    \"repoName\": \"fkhadra/react-toastify\",\n    \"githubUrl\": \"https://github.com/fkhadra/react-toastify\",\n    \"description\": \"React notification made easy 🚀 !\",\n    \"owner\": \"fkhadra\",\n    \"repo\": \"react-toastify\"\n  },\n  \"Flagsmith\": {\n    \"title\": \"Flagsmith\",\n    \"repoName\": \"flagsmith/flagsmith\",\n    \"githubUrl\": \"https://github.com/flagsmith/flagsmith\",\n    \"description\": \"Flagsmith is an open source feature flagging and remote config service. Self-host, or use our SaaS at https://app.flagsmith.com.\",\n    \"owner\": \"flagsmith\",\n    \"repo\": \"flagsmith\"\n  },\n  \"Flame\": {\n    \"title\": \"Flame\",\n    \"repoName\": \"phoenixframework/flame\",\n    \"githubUrl\": \"https://github.com/phoenixframework/flame\",\n    \"description\": \"Fleeting Lambda Application for Modular Execution: auto scale parts of your existing app with a single function call\",\n    \"owner\": \"phoenixframework\",\n    \"repo\": \"flame\"\n  },\n  \"Flaresolverr\": {\n    \"title\": \"Flaresolverr\",\n    \"repoName\": \"flaresolverr/flaresolverr\",\n    \"githubUrl\": \"https://github.com/flaresolverr/flaresolverr\",\n    \"description\": \"Proxy server to bypass Cloudflare protection\",\n    \"owner\": \"flaresolverr\",\n    \"repo\": \"flaresolverr\"\n  },\n  \"Flarum\": {\n    \"title\": \"Flarum\",\n    \"repoName\": \"flarum/docs\",\n    \"githubUrl\": \"https://github.com/flarum/docs\",\n    \"description\": \"Flarum documentation.\",\n    \"owner\": \"flarum\",\n    \"repo\": \"docs\"\n  },\n  \"Flet\": {\n    \"title\": \"Flet\",\n    \"repoName\": \"flet-dev/flet\",\n    \"githubUrl\": \"https://github.com/flet-dev/flet\",\n    \"description\": \"Flet enables developers to easily build realtime web, mobile and desktop apps in Python. No frontend experience required.\",\n    \"owner\": \"flet-dev\",\n    \"repo\": \"flet\"\n  },\n  \"FlexSimPy\": {\n    \"title\": \"FlexSimPy\",\n    \"repoName\": \"flexsim/flexsimpy\",\n    \"githubUrl\": \"https://github.com/flexsim/flexsimpy\",\n    \"description\": \"FlexSimPy\",\n    \"owner\": \"flexsim\",\n    \"repo\": \"flexsimpy\"\n  },\n  \"Mission Object Oriented Scripting Environment\": {\n    \"title\": \"Mission Object Oriented Scripting Environment\",\n    \"repoName\": \"flightcontrol-master/moose\",\n    \"githubUrl\": \"https://github.com/flightcontrol-master/moose\",\n    \"description\": \"Mission Object Oriented Scripting Environment (MOOSE) for lua mission scripting design in DCS World\",\n    \"owner\": \"flightcontrol-master\",\n    \"repo\": \"moose\"\n  },\n  \"Flight Core\": {\n    \"title\": \"Flight Core\",\n    \"repoName\": \"flightphp/core\",\n    \"githubUrl\": \"https://github.com/flightphp/core\",\n    \"description\": \"An extensible micro-framework for PHP\",\n    \"owner\": \"flightphp\",\n    \"repo\": \"core\"\n  },\n  \"Supabase RS\": {\n    \"title\": \"Supabase RS\",\n    \"repoName\": \"floris-xlx/supabase_rs\",\n    \"githubUrl\": \"https://github.com/floris-xlx/supabase_rs\",\n    \"description\": \"Supabase SDK for Rust\",\n    \"owner\": \"floris-xlx\",\n    \"repo\": \"supabase_rs\"\n  },\n  \"Node-RED Dashboard\": {\n    \"title\": \"Node-RED Dashboard\",\n    \"repoName\": \"flowfuse/node-red-dashboard\",\n    \"githubUrl\": \"https://github.com/flowfuse/node-red-dashboard\",\n    \"description\": \"\",\n    \"owner\": \"flowfuse\",\n    \"repo\": \"node-red-dashboard\"\n  },\n  \"Flowise\": {\n    \"title\": \"Flowise\",\n    \"repoName\": \"flowiseai/flowisedocs\",\n    \"githubUrl\": \"https://github.com/flowiseai/flowisedocs\",\n    \"description\": \"Docs for Flowise\",\n    \"owner\": \"flowiseai\",\n    \"repo\": \"flowisedocs\"\n  },\n  \"FluentValidation\": {\n    \"title\": \"FluentValidation\",\n    \"repoName\": \"fluentvalidation/fluentvalidation\",\n    \"githubUrl\": \"https://github.com/fluentvalidation/fluentvalidation\",\n    \"description\": \"A popular .NET validation library for building strongly-typed validation rules.\",\n    \"owner\": \"fluentvalidation\",\n    \"repo\": \"fluentvalidation\"\n  },\n  \"Flutter\": {\n    \"title\": \"Flutter\",\n    \"repoName\": \"flutter/website\",\n    \"githubUrl\": \"https://github.com/flutter/website\",\n    \"description\": \"Flutter documentation web site\",\n    \"owner\": \"flutter\",\n    \"repo\": \"website\"\n  },\n  \"Flutter Data\": {\n    \"title\": \"Flutter Data\",\n    \"repoName\": \"flutterdata/flutter_data.git\",\n    \"githubUrl\": \"https://github.com/flutterdata/flutter_data.git\",\n    \"description\": \"Seamlessly manage persistent data in your Flutter apps\",\n    \"owner\": \"flutterdata\",\n    \"repo\": \"flutter_data.git\"\n  },\n  \"Flagger\": {\n    \"title\": \"Flagger\",\n    \"repoName\": \"fluxcd/flagger\",\n    \"githubUrl\": \"https://github.com/fluxcd/flagger\",\n    \"description\": \"Progressive delivery Kubernetes operator (Canary, A/B Testing and Blue/Green deployments)\",\n    \"owner\": \"fluxcd\",\n    \"repo\": \"flagger\"\n  },\n  \"Sfp\": {\n    \"title\": \"Sfp\",\n    \"repoName\": \"flxbl-io/docs-sfp\",\n    \"githubUrl\": \"https://github.com/flxbl-io/docs-sfp\",\n    \"description\": \"\",\n    \"owner\": \"flxbl-io\",\n    \"repo\": \"docs-sfp\"\n  },\n  \"Flyte\": {\n    \"title\": \"Flyte\",\n    \"repoName\": \"flyteorg/flytesnacks\",\n    \"githubUrl\": \"https://github.com/flyteorg/flytesnacks\",\n    \"description\": \"Flyte Documentation 📖\",\n    \"owner\": \"flyteorg\",\n    \"repo\": \"flytesnacks\"\n  },\n  \"Flytekit\": {\n    \"title\": \"Flytekit\",\n    \"repoName\": \"flyteorg/flytekit\",\n    \"githubUrl\": \"https://github.com/flyteorg/flytekit\",\n    \"description\": \"Extensible Python SDK for developing Flyte tasks and workflows. Simple to get started and learn and highly extensible. \",\n    \"owner\": \"flyteorg\",\n    \"repo\": \"flytekit\"\n  },\n  \"Flyway\": {\n    \"title\": \"Flyway\",\n    \"repoName\": \"flyway/flywaydb.org\",\n    \"githubUrl\": \"https://github.com/flyway/flywaydb.org\",\n    \"description\": \"The main marketing and documentation site for Flyway by Redgate\",\n    \"owner\": \"flyway\",\n    \"repo\": \"flywaydb.org\"\n  },\n  \"Forest Admin Node.js Agent\": {\n    \"title\": \"Forest Admin Node.js Agent\",\n    \"repoName\": \"forestadmin/agent-nodejs\",\n    \"githubUrl\": \"https://github.com/forestadmin/agent-nodejs\",\n    \"description\": \"🌱  Node.js agent for Forest Admin\",\n    \"owner\": \"forestadmin\",\n    \"repo\": \"agent-nodejs\"\n  },\n  \"Formbricks\": {\n    \"title\": \"Formbricks\",\n    \"repoName\": \"formbricks/formbricks\",\n    \"githubUrl\": \"https://github.com/formbricks/formbricks\",\n    \"description\": \"Open Source Survey Platform\",\n    \"owner\": \"formbricks\",\n    \"repo\": \"formbricks\"\n  },\n  \"Auto Animate\": {\n    \"title\": \"Auto Animate\",\n    \"repoName\": \"formkit/auto-animate\",\n    \"githubUrl\": \"https://github.com/formkit/auto-animate\",\n    \"description\": \"A zero-config, drop-in animation utility that adds smooth transitions to your web app. You can use it with React, Vue, or any other JavaScript application.\",\n    \"owner\": \"formkit\",\n    \"repo\": \"auto-animate\"\n  },\n  \"FormKit Drag And Drop\": {\n    \"title\": \"FormKit Drag And Drop\",\n    \"repoName\": \"formkit/drag-and-drop\",\n    \"githubUrl\": \"https://github.com/formkit/drag-and-drop\",\n    \"description\": \"\",\n    \"owner\": \"formkit\",\n    \"repo\": \"drag-and-drop\"\n  },\n  \"FormKit\": {\n    \"title\": \"FormKit\",\n    \"repoName\": \"formkit/formkit\",\n    \"githubUrl\": \"https://github.com/formkit/formkit\",\n    \"description\": \"Vue Forms ⚡️ Supercharged\",\n    \"owner\": \"formkit\",\n    \"repo\": \"formkit\"\n  },\n  \"Formwerk\": {\n    \"title\": \"Formwerk\",\n    \"repoName\": \"formwerkjs/formwerk.dev\",\n    \"githubUrl\": \"https://github.com/formwerkjs/formwerk.dev\",\n    \"description\": \"Docs for Formwerk\",\n    \"owner\": \"formwerkjs\",\n    \"repo\": \"formwerk.dev\"\n  },\n  \"Forui\": {\n    \"title\": \"Forui\",\n    \"repoName\": \"forus-labs/forui\",\n    \"githubUrl\": \"https://github.com/forus-labs/forui\",\n    \"description\": \"Forus Lab's Flutter UI library\",\n    \"owner\": \"forus-labs\",\n    \"repo\": \"forui\"\n  },\n  \"Foundry\": {\n    \"title\": \"Foundry\",\n    \"repoName\": \"foundry-rs/book\",\n    \"githubUrl\": \"https://github.com/foundry-rs/book\",\n    \"description\": \"A book on all things Foundry, available at https://book.getfoundry.sh.\",\n    \"owner\": \"foundry-rs\",\n    \"repo\": \"book\"\n  },\n  \"Framer Plugin OAuth\": {\n    \"title\": \"Framer Plugin OAuth\",\n    \"repoName\": \"framer/plugin-oauth\",\n    \"githubUrl\": \"https://github.com/framer/plugin-oauth\",\n    \"description\": \"\",\n    \"owner\": \"framer\",\n    \"repo\": \"plugin-oauth\"\n  },\n  \"Framer Plugins\": {\n    \"title\": \"Framer Plugins\",\n    \"repoName\": \"framer/plugins\",\n    \"githubUrl\": \"https://github.com/framer/plugins\",\n    \"description\": \"A collection of example Framer Plugins.\",\n    \"owner\": \"framer\",\n    \"repo\": \"plugins\"\n  },\n  \"Framework7\": {\n    \"title\": \"Framework7\",\n    \"repoName\": \"framework7io/framework7\",\n    \"githubUrl\": \"https://github.com/framework7io/framework7\",\n    \"description\": \"Full featured HTML framework for building iOS & Android apps\",\n    \"owner\": \"framework7io\",\n    \"repo\": \"framework7\"\n  },\n  \"ERPNext\": {\n    \"title\": \"ERPNext\",\n    \"repoName\": \"frappe/erpnext\",\n    \"githubUrl\": \"https://github.com/frappe/erpnext\",\n    \"description\": \"Free and Open Source Enterprise Resource Planning (ERP)\",\n    \"owner\": \"frappe\",\n    \"repo\": \"erpnext\"\n  },\n  \"Frappe\": {\n    \"title\": \"Frappe\",\n    \"repoName\": \"frappe/frappe\",\n    \"githubUrl\": \"https://github.com/frappe/frappe\",\n    \"description\": \"Low code web framework for real world applications, in Python and Javascript\",\n    \"owner\": \"frappe\",\n    \"repo\": \"frappe\"\n  },\n  \"Frappe HRMS\": {\n    \"title\": \"Frappe HRMS\",\n    \"repoName\": \"frappe/hrms\",\n    \"githubUrl\": \"https://github.com/frappe/hrms\",\n    \"description\": \"Open Source HR and Payroll Software\",\n    \"owner\": \"frappe\",\n    \"repo\": \"hrms\"\n  },\n  \"Agent Zero\": {\n    \"title\": \"Agent Zero\",\n    \"repoName\": \"frdel/agent-zero\",\n    \"githubUrl\": \"https://github.com/frdel/agent-zero\",\n    \"description\": \"Agent Zero AI framework\",\n    \"owner\": \"frdel\",\n    \"repo\": \"agent-zero\"\n  },\n  \"Freqtrade\": {\n    \"title\": \"Freqtrade\",\n    \"repoName\": \"freqtrade/freqtrade\",\n    \"githubUrl\": \"https://github.com/freqtrade/freqtrade\",\n    \"description\": \"Free, open source crypto trading bot\",\n    \"owner\": \"freqtrade\",\n    \"repo\": \"freqtrade\"\n  },\n  \"Friends Of Adonis\": {\n    \"title\": \"Friends Of Adonis\",\n    \"repoName\": \"friendsofadonis/friendsofadonis\",\n    \"githubUrl\": \"https://github.com/friendsofadonis/friendsofadonis\",\n    \"description\": \"The monorepository for the Friends Of Adonis packages\",\n    \"owner\": \"friendsofadonis\",\n    \"repo\": \"friendsofadonis\"\n  },\n  \"Fondue\": {\n    \"title\": \"Fondue\",\n    \"repoName\": \"frontify/fondue\",\n    \"githubUrl\": \"https://github.com/frontify/fondue\",\n    \"description\": \"Design System of Frontify\",\n    \"owner\": \"frontify\",\n    \"repo\": \"fondue\"\n  },\n  \"Compose\": {\n    \"title\": \"Compose\",\n    \"repoName\": \"frozengee/compose\",\n    \"githubUrl\": \"https://github.com/frozengee/compose\",\n    \"description\": \"分享compose模板，方便新人，老手快速部署docker容器，注释特别多，不懂看注释和最上方的链接，文字量巨大，劝退预警XD，懒得建站建博客，直接拿github当博客lol\",\n    \"owner\": \"frozengee\",\n    \"repo\": \"compose\"\n  },\n  \"Sway\": {\n    \"title\": \"Sway\",\n    \"repoName\": \"fuellabs/sway\",\n    \"githubUrl\": \"https://github.com/fuellabs/sway\",\n    \"description\": \"🌴 Empowering everyone to build reliable and efficient smart contracts.\",\n    \"owner\": \"fuellabs\",\n    \"repo\": \"sway\"\n  },\n  \"FullCalendar\": {\n    \"title\": \"FullCalendar\",\n    \"repoName\": \"fullcalendar/fullcalendar\",\n    \"githubUrl\": \"https://github.com/fullcalendar/fullcalendar\",\n    \"description\": \"Full-sized drag & drop event calendar in JavaScript\",\n    \"owner\": \"fullcalendar\",\n    \"repo\": \"fullcalendar\"\n  },\n  \"Astro UI\": {\n    \"title\": \"Astro UI\",\n    \"repoName\": \"fulldotdev/ui\",\n    \"githubUrl\": \"https://github.com/fulldotdev/ui\",\n    \"description\": \"The Astro UI library to build content sites\",\n    \"owner\": \"fulldotdev\",\n    \"repo\": \"ui\"\n  },\n  \"Fumadocs\": {\n    \"title\": \"Fumadocs\",\n    \"repoName\": \"fuma-nama/fumadocs\",\n    \"githubUrl\": \"https://github.com/fuma-nama/fumadocs\",\n    \"description\": \"The beautiful docs framework with Next.js.\",\n    \"owner\": \"fuma-nama\",\n    \"repo\": \"fumadocs\"\n  },\n  \"CosyVoice\": {\n    \"title\": \"CosyVoice\",\n    \"repoName\": \"funaudiollm/cosyvoice\",\n    \"githubUrl\": \"https://github.com/funaudiollm/cosyvoice\",\n    \"description\": \"Multi-lingual large voice generation model, providing inference, training and deployment full-stack ability.\",\n    \"owner\": \"funaudiollm\",\n    \"repo\": \"cosyvoice\"\n  },\n  \"SenseVoice\": {\n    \"title\": \"SenseVoice\",\n    \"repoName\": \"funaudiollm/sensevoice\",\n    \"githubUrl\": \"https://github.com/funaudiollm/sensevoice\",\n    \"description\": \"Multilingual Voice Understanding Model\",\n    \"owner\": \"funaudiollm\",\n    \"repo\": \"sensevoice\"\n  },\n  \"FusionAuth Containers\": {\n    \"title\": \"FusionAuth Containers\",\n    \"repoName\": \"fusionauth/fusionauth-containers\",\n    \"githubUrl\": \"https://github.com/fusionauth/fusionauth-containers\",\n    \"description\": \"Container definitions for docker, kubernetes, helm, and whatever containers come next!\",\n    \"owner\": \"fusionauth\",\n    \"repo\": \"fusionauth-containers\"\n  },\n  \"Zeitwerk\": {\n    \"title\": \"Zeitwerk\",\n    \"repoName\": \"fxn/zeitwerk\",\n    \"githubUrl\": \"https://github.com/fxn/zeitwerk\",\n    \"description\": \"Efficient and thread-safe code loader for Ruby\",\n    \"owner\": \"fxn\",\n    \"repo\": \"zeitwerk\"\n  },\n  \"DrissionPage\": {\n    \"title\": \"DrissionPage\",\n    \"repoName\": \"g1879/drissionpage\",\n    \"githubUrl\": \"https://github.com/g1879/drissionpage\",\n    \"description\": \"Python based web automation tool. Powerful and elegant.\",\n    \"owner\": \"g1879\",\n    \"repo\": \"drissionpage\"\n  },\n  \"RedBean\": {\n    \"title\": \"RedBean\",\n    \"repoName\": \"gabordemooij/redbean\",\n    \"githubUrl\": \"https://github.com/gabordemooij/redbean\",\n    \"description\": \"ORM layer that creates models, config and database on the fly\",\n    \"owner\": \"gabordemooij\",\n    \"repo\": \"redbean\"\n  },\n  \"Billd Desk\": {\n    \"title\": \"Billd Desk\",\n    \"repoName\": \"galaxy-s10/billd-desk\",\n    \"githubUrl\": \"https://github.com/galaxy-s10/billd-desk\",\n    \"description\": \"基于Vue3 + WebRTC + Nodejs + Electron搭建的远程桌面控制\",\n    \"owner\": \"galaxy-s10\",\n    \"repo\": \"billd-desk\"\n  },\n  \"Multiplayer Tutorial\": {\n    \"title\": \"Multiplayer Tutorial\",\n    \"repoName\": \"gamedev-at-ariel/multiplayer-fusion\",\n    \"githubUrl\": \"https://github.com/gamedev-at-ariel/multiplayer-fusion\",\n    \"description\": \"Multiplayer Tutorial using Photon Fusion\",\n    \"owner\": \"gamedev-at-ariel\",\n    \"repo\": \"multiplayer-fusion\"\n  },\n  \"Jazz\": {\n    \"title\": \"Jazz\",\n    \"repoName\": \"garden-co/jazz\",\n    \"githubUrl\": \"https://github.com/garden-co/jazz\",\n    \"description\": \"Toolkit for backendless apps\",\n    \"owner\": \"garden-co\",\n    \"repo\": \"jazz\"\n  },\n  \"Gardener\": {\n    \"title\": \"Gardener\",\n    \"repoName\": \"gardener/gardener\",\n    \"githubUrl\": \"https://github.com/gardener/gardener\",\n    \"description\": \"Homogeneous Kubernetes clusters at scale on any infrastructure using hosted control planes.\",\n    \"owner\": \"gardener\",\n    \"repo\": \"gardener\"\n  },\n  \"GCC\": {\n    \"title\": \"GCC\",\n    \"repoName\": \"gcc-mirror/gcc\",\n    \"githubUrl\": \"https://github.com/gcc-mirror/gcc\",\n    \"description\": \"\",\n    \"owner\": \"gcc-mirror\",\n    \"repo\": \"gcc\"\n  },\n  \"MetaGPT\": {\n    \"title\": \"MetaGPT\",\n    \"repoName\": \"geekan/metagpt\",\n    \"githubUrl\": \"https://github.com/geekan/metagpt\",\n    \"description\": \"🌟 The Multi-Agent Framework: First AI Software Company, Towards Natural Language Programming\",\n    \"owner\": \"geekan\",\n    \"repo\": \"metagpt\"\n  },\n  \"Aiko Services\": {\n    \"title\": \"Aiko Services\",\n    \"repoName\": \"geekscape/aiko_services\",\n    \"githubUrl\": \"https://github.com/geekscape/aiko_services\",\n    \"description\": \"Distributed service framework using asynchronous messages supporting IoT, Machine Learning and Video\",\n    \"owner\": \"geekscape\",\n    \"repo\": \"aiko_services\"\n  },\n  \"Gel\": {\n    \"title\": \"Gel\",\n    \"repoName\": \"geldata/gel\",\n    \"githubUrl\": \"https://github.com/geldata/gel\",\n    \"description\": \"Gel supercharges Postgres with a modern data model, graph queries, Auth & AI solutions, and much more.\",\n    \"owner\": \"geldata\",\n    \"repo\": \"gel\"\n  },\n  \"Scrcpy\": {\n    \"title\": \"Scrcpy\",\n    \"repoName\": \"genymobile/scrcpy\",\n    \"githubUrl\": \"https://github.com/genymobile/scrcpy\",\n    \"description\": \"Display and control your Android device\",\n    \"owner\": \"genymobile\",\n    \"repo\": \"scrcpy\"\n  },\n  \"GeoPandas\": {\n    \"title\": \"GeoPandas\",\n    \"repoName\": \"geopandas/geopandas\",\n    \"githubUrl\": \"https://github.com/geopandas/geopandas\",\n    \"description\": \"Python tools for geographic data\",\n    \"owner\": \"geopandas\",\n    \"repo\": \"geopandas\"\n  },\n  \"React Reader\": {\n    \"title\": \"React Reader\",\n    \"repoName\": \"gerhardsletten/react-reader\",\n    \"githubUrl\": \"https://github.com/gerhardsletten/react-reader\",\n    \"description\": \"An ePub-reader for React, powered by Epub.js\",\n    \"owner\": \"gerhardsletten\",\n    \"repo\": \"react-reader\"\n  },\n  \"German Transformer Training\": {\n    \"title\": \"German Transformer Training\",\n    \"repoName\": \"german-nlp-group/german-transformer-training\",\n    \"githubUrl\": \"https://github.com/german-nlp-group/german-transformer-training\",\n    \"description\": \"Plan and train German transformer models.\",\n    \"owner\": \"german-nlp-group\",\n    \"repo\": \"german-transformer-training\"\n  },\n  \"PhoenixTest\": {\n    \"title\": \"PhoenixTest\",\n    \"repoName\": \"germsvel/phoenix_test\",\n    \"githubUrl\": \"https://github.com/germsvel/phoenix_test\",\n    \"description\": \"PhoenixTest provides a unified way of writing feature tests -- regardless of whether you're testing LiveView pages or static (non-LiveView) pages.\",\n    \"owner\": \"germsvel\",\n    \"repo\": \"phoenix_test\"\n  },\n  \"Convex Agent\": {\n    \"title\": \"Convex Agent\",\n    \"repoName\": \"get-convex/agent\",\n    \"githubUrl\": \"https://github.com/get-convex/agent\",\n    \"description\": \"Build AI agents on Convex with persistent chat history\",\n    \"owner\": \"get-convex\",\n    \"repo\": \"agent\"\n  },\n  \"Convex Aggregate\": {\n    \"title\": \"Convex Aggregate\",\n    \"repoName\": \"get-convex/aggregate\",\n    \"githubUrl\": \"https://github.com/get-convex/aggregate\",\n    \"description\": \"Component for aggregating counts and sums of Convex documents\",\n    \"owner\": \"get-convex\",\n    \"repo\": \"aggregate\"\n  },\n  \"Convex Auth\": {\n    \"title\": \"Convex Auth\",\n    \"repoName\": \"get-convex/convex-auth\",\n    \"githubUrl\": \"https://github.com/get-convex/convex-auth\",\n    \"description\": \"Library for built-in auth\",\n    \"owner\": \"get-convex\",\n    \"repo\": \"convex-auth\"\n  },\n  \"Convex Backend\": {\n    \"title\": \"Convex Backend\",\n    \"repoName\": \"get-convex/convex-backend\",\n    \"githubUrl\": \"https://github.com/get-convex/convex-backend\",\n    \"description\": \"The open-source reactive database for app developers\",\n    \"owner\": \"get-convex\",\n    \"repo\": \"convex-backend\"\n  },\n  \"Convex Demos\": {\n    \"title\": \"Convex Demos\",\n    \"repoName\": \"get-convex/convex-demos\",\n    \"githubUrl\": \"https://github.com/get-convex/convex-demos\",\n    \"description\": \"Demo apps built on Convex.\",\n    \"owner\": \"get-convex\",\n    \"repo\": \"convex-demos\"\n  },\n  \"Convex Helpers\": {\n    \"title\": \"Convex Helpers\",\n    \"repoName\": \"get-convex/convex-helpers\",\n    \"githubUrl\": \"https://github.com/get-convex/convex-helpers\",\n    \"description\": \"A collection of useful code to complement the official packages.\",\n    \"owner\": \"get-convex\",\n    \"repo\": \"convex-helpers\"\n  },\n  \"Convex Workflow\": {\n    \"title\": \"Convex Workflow\",\n    \"repoName\": \"get-convex/workflow\",\n    \"githubUrl\": \"https://github.com/get-convex/workflow\",\n    \"description\": \"Convex component for durably executing workflows.\",\n    \"owner\": \"get-convex\",\n    \"repo\": \"workflow\"\n  },\n  \"Brevo Python\": {\n    \"title\": \"Brevo Python\",\n    \"repoName\": \"getbrevo/brevo-python\",\n    \"githubUrl\": \"https://github.com/getbrevo/brevo-python\",\n    \"description\": \"A fully-featured Python API client to interact with Brevo.\",\n    \"owner\": \"getbrevo\",\n    \"repo\": \"brevo-python\"\n  },\n  \"Ditto Chat Package\": {\n    \"title\": \"Ditto Chat Package\",\n    \"repoName\": \"getditto/dittochatpackage\",\n    \"githubUrl\": \"https://github.com/getditto/dittochatpackage\",\n    \"description\": \"A swift package of a chat feature\",\n    \"owner\": \"getditto\",\n    \"repo\": \"dittochatpackage\"\n  },\n  \"DittoSwift\": {\n    \"title\": \"DittoSwift\",\n    \"repoName\": \"getditto/dittoswiftpackage\",\n    \"githubUrl\": \"https://github.com/getditto/dittoswiftpackage\",\n    \"description\": \"Swift package for the DittoSwift framework.\",\n    \"owner\": \"getditto\",\n    \"repo\": \"dittoswiftpackage\"\n  },\n  \"DittoSwift Tools\": {\n    \"title\": \"DittoSwift Tools\",\n    \"repoName\": \"getditto/dittoswifttools\",\n    \"githubUrl\": \"https://github.com/getditto/dittoswifttools\",\n    \"description\": \"Diagnostic and Debugging Tools for DittoSwift\",\n    \"owner\": \"getditto\",\n    \"repo\": \"dittoswifttools\"\n  },\n  \"Ditto React\": {\n    \"title\": \"Ditto React\",\n    \"repoName\": \"getditto/react-ditto\",\n    \"githubUrl\": \"https://github.com/getditto/react-ditto\",\n    \"description\": \"React wrappers for Ditto for easy integration using both components or hooks\",\n    \"owner\": \"getditto\",\n    \"repo\": \"react-ditto\"\n  },\n  \"Kirby\": {\n    \"title\": \"Kirby\",\n    \"repoName\": \"getkirby/getkirby.com?folders=content/docs\",\n    \"githubUrl\": \"https://github.com/getkirby/getkirby.com\",\n    \"description\": \"Source code and content for the Kirby website\",\n    \"owner\": \"getkirby\",\n    \"repo\": \"getkirby.com?folders=content\"\n  },\n  \"Lago\": {\n    \"title\": \"Lago\",\n    \"repoName\": \"getlago/lago\",\n    \"githubUrl\": \"https://github.com/getlago/lago\",\n    \"description\": \"Open Source Metering and Usage Based Billing API ⭐️ Consumption tracking, Subscription management, Pricing iterations, Payment orchestration & Revenue analytics\",\n    \"owner\": \"getlago\",\n    \"repo\": \"lago\"\n  },\n  \"Sentry\": {\n    \"title\": \"Sentry\",\n    \"repoName\": \"getsentry/sentry-docs\",\n    \"githubUrl\": \"https://github.com/getsentry/sentry-docs\",\n    \"description\": \"Sentry's documentation (and tools to build it)\",\n    \"owner\": \"getsentry\",\n    \"repo\": \"sentry-docs\"\n  },\n  \"Stream Chat React\": {\n    \"title\": \"Stream Chat React\",\n    \"repoName\": \"getstream/stream-chat-react\",\n    \"githubUrl\": \"https://github.com/getstream/stream-chat-react\",\n    \"description\": \"React Chat SDK ➜ Stream Chat 💬\",\n    \"owner\": \"getstream\",\n    \"repo\": \"stream-chat-react\"\n  },\n  \"Graphiti\": {\n    \"title\": \"Graphiti\",\n    \"repoName\": \"getzep/graphiti\",\n    \"githubUrl\": \"https://github.com/getzep/graphiti\",\n    \"description\": \"Build Real-Time Knowledge Graphs for AI Agents\",\n    \"owner\": \"getzep\",\n    \"repo\": \"graphiti\"\n  },\n  \"Llama.cpp\": {\n    \"title\": \"Llama.cpp\",\n    \"repoName\": \"ggml-org/llama.cpp\",\n    \"githubUrl\": \"https://github.com/ggml-org/llama.cpp\",\n    \"description\": \"LLM inference in C/C++\",\n    \"owner\": \"ggml-org\",\n    \"repo\": \"llama.cpp\"\n  },\n  \"Whisper.cpp\": {\n    \"title\": \"Whisper.cpp\",\n    \"repoName\": \"ggml-org/whisper.cpp\",\n    \"githubUrl\": \"https://github.com/ggml-org/whisper.cpp\",\n    \"description\": \"Port of OpenAI's Whisper model in C/C++\",\n    \"owner\": \"ggml-org\",\n    \"repo\": \"whisper.cpp\"\n  },\n  \"JSF\": {\n    \"title\": \"JSF\",\n    \"repoName\": \"ghandic/jsf\",\n    \"githubUrl\": \"https://github.com/ghandic/jsf\",\n    \"description\": \"Creates fake JSON files from a JSON schema\",\n    \"owner\": \"ghandic\",\n    \"repo\": \"jsf\"\n  },\n  \"Ghostty\": {\n    \"title\": \"Ghostty\",\n    \"repoName\": \"ghostty-org/website\",\n    \"githubUrl\": \"https://github.com/ghostty-org/website\",\n    \"description\": \"Ghostty website. For the source to the Ghostty project, please see https://github.com/ghostty-org/ghostty\",\n    \"owner\": \"ghostty-org\",\n    \"repo\": \"website\"\n  },\n  \"Gin\": {\n    \"title\": \"Gin\",\n    \"repoName\": \"gin-gonic/gin\",\n    \"githubUrl\": \"https://github.com/gin-gonic/gin\",\n    \"description\": \"Gin is a HTTP web framework written in Go (Golang). It features a Martini-like API with much better performance -- up to 40 times faster. If you need smashing performance, get yourself some Gin.\",\n    \"owner\": \"gin-gonic\",\n    \"repo\": \"gin\"\n  },\n  \"DuckDB .NET\": {\n    \"title\": \"DuckDB .NET\",\n    \"repoName\": \"giorgi/duckdb.net\",\n    \"githubUrl\": \"https://github.com/giorgi/duckdb.net\",\n    \"description\": \"Bindings and ADO.NET Provider for DuckDB\",\n    \"owner\": \"giorgi\",\n    \"repo\": \"duckdb.net\"\n  },\n  \"EntityFramework.Exceptions\": {\n    \"title\": \"EntityFramework.Exceptions\",\n    \"repoName\": \"giorgi/entityframework.exceptions\",\n    \"githubUrl\": \"https://github.com/giorgi/entityframework.exceptions\",\n    \"description\": \"Strongly typed exceptions for Entity Framework Core. Supports SQLServer, PostgreSQL, SQLite, Oracle and  MySql.\",\n    \"owner\": \"giorgi\",\n    \"repo\": \"entityframework.exceptions\"\n  },\n  \"Git\": {\n    \"title\": \"Git\",\n    \"repoName\": \"git/htmldocs\",\n    \"githubUrl\": \"https://github.com/git/htmldocs\",\n    \"description\": \"Pre-built HTML Git documentation\",\n    \"owner\": \"git\",\n    \"repo\": \"htmldocs\"\n  },\n  \"GitHub Docs\": {\n    \"title\": \"GitHub Docs\",\n    \"repoName\": \"github/docs\",\n    \"githubUrl\": \"https://github.com/github/docs\",\n    \"description\": \"The open-source repo for docs.github.com\",\n    \"owner\": \"github\",\n    \"repo\": \"docs\"\n  },\n  \"GitLab CE\": {\n    \"title\": \"GitLab CE\",\n    \"repoName\": \"gitlabhq/gitlabhq\",\n    \"githubUrl\": \"https://github.com/gitlabhq/gitlabhq\",\n    \"description\": \"GitLab CE Mirror | Please open new issues in our issue tracker on GitLab.com\",\n    \"owner\": \"gitlabhq\",\n    \"repo\": \"gitlabhq\"\n  },\n  \"Postiz App\": {\n    \"title\": \"Postiz App\",\n    \"repoName\": \"gitroomhq/postiz-app\",\n    \"githubUrl\": \"https://github.com/gitroomhq/postiz-app\",\n    \"description\": \"📨 The ultimate social media scheduling tool, with a bunch of AI  🤖\",\n    \"owner\": \"gitroomhq\",\n    \"repo\": \"postiz-app\"\n  },\n  \"Postiz Docs\": {\n    \"title\": \"Postiz Docs\",\n    \"repoName\": \"gitroomhq/postiz-docs\",\n    \"githubUrl\": \"https://github.com/gitroomhq/postiz-docs\",\n    \"description\": \"\",\n    \"owner\": \"gitroomhq\",\n    \"repo\": \"postiz-docs\"\n  },\n  \"Gleap JavaScript SDK\": {\n    \"title\": \"Gleap JavaScript SDK\",\n    \"repoName\": \"gleapsdk/javascript-sdk\",\n    \"githubUrl\": \"https://github.com/gleapsdk/javascript-sdk\",\n    \"description\": \"Gleap helps developers build the best software faster. It is your affordable in-app bug reporting tool for apps, websites and industrial applications.\",\n    \"owner\": \"gleapsdk\",\n    \"repo\": \"javascript-sdk\"\n  },\n  \"Gluestack UI\": {\n    \"title\": \"Gluestack UI\",\n    \"repoName\": \"gluestack/gluestack-ui\",\n    \"githubUrl\": \"https://github.com/gluestack/gluestack-ui\",\n    \"description\": \"React & React Native Components & Patterns (copy-paste components & patterns crafted with Tailwind CSS (NativeWind))\",\n    \"owner\": \"gluestack\",\n    \"repo\": \"gluestack-ui\"\n  },\n  \"AsyncQt\": {\n    \"title\": \"AsyncQt\",\n    \"repoName\": \"gmarull/asyncqt\",\n    \"githubUrl\": \"https://github.com/gmarull/asyncqt\",\n    \"description\": \"asyncio + PyQt5/PySide2\",\n    \"owner\": \"gmarull\",\n    \"repo\": \"asyncqt\"\n  },\n  \"Klipfolio Functions\": {\n    \"title\": \"Klipfolio Functions\",\n    \"repoName\": \"gneius/klipfolio-functions\",\n    \"githubUrl\": \"https://github.com/gneius/klipfolio-functions\",\n    \"description\": \"\",\n    \"owner\": \"gneius\",\n    \"repo\": \"klipfolio-functions\"\n  },\n  \"GTK\": {\n    \"title\": \"GTK\",\n    \"repoName\": \"gnome/gtk\",\n    \"githubUrl\": \"https://github.com/gnome/gtk\",\n    \"description\": \"Read-only mirror of https://gitlab.gnome.org/GNOME/gtk\",\n    \"owner\": \"gnome\",\n    \"repo\": \"gtk\"\n  },\n  \"Gitea\": {\n    \"title\": \"Gitea\",\n    \"repoName\": \"go-gitea/gitea\",\n    \"githubUrl\": \"https://github.com/go-gitea/gitea\",\n    \"description\": \"Git with a cup of tea! Painless self-hosted all-in-one software development service, including Git hosting, code review, team collaboration, package registry and CI/CD\",\n    \"owner\": \"go-gitea\",\n    \"repo\": \"gitea\"\n  },\n  \"GORM\": {\n    \"title\": \"GORM\",\n    \"repoName\": \"go-gorm/gorm\",\n    \"githubUrl\": \"https://github.com/go-gorm/gorm\",\n    \"description\": \"The fantastic ORM library for Golang, aims to be developer friendly\",\n    \"owner\": \"go-gorm\",\n    \"repo\": \"gorm\"\n  },\n  \"Goyave\": {\n    \"title\": \"Goyave\",\n    \"repoName\": \"go-goyave/goyave\",\n    \"githubUrl\": \"https://github.com/go-goyave/goyave\",\n    \"description\": \"🍐 The enterprise REST API framework\",\n    \"owner\": \"go-goyave\",\n    \"repo\": \"goyave\"\n  },\n  \"Resty\": {\n    \"title\": \"Resty\",\n    \"repoName\": \"go-resty/resty\",\n    \"githubUrl\": \"https://github.com/go-resty/resty\",\n    \"description\": \"Simple HTTP, REST, and SSE client library for Go\",\n    \"owner\": \"go-resty\",\n    \"repo\": \"resty\"\n  },\n  \"Authentik\": {\n    \"title\": \"Authentik\",\n    \"repoName\": \"goauthentik/authentik\",\n    \"githubUrl\": \"https://github.com/goauthentik/authentik\",\n    \"description\": \"The authentication glue you need.\",\n    \"owner\": \"goauthentik\",\n    \"repo\": \"authentik\"\n  },\n  \"Goclone\": {\n    \"title\": \"Goclone\",\n    \"repoName\": \"goclone-dev/goclone\",\n    \"githubUrl\": \"https://github.com/goclone-dev/goclone\",\n    \"description\": \" Website Cloner - Utilizes powerful Go routines to clone websites to your computer within seconds.\",\n    \"owner\": \"goclone-dev\",\n    \"repo\": \"goclone\"\n  },\n  \"Godot Engine\": {\n    \"title\": \"Godot Engine\",\n    \"repoName\": \"godotengine/godot-docs\",\n    \"githubUrl\": \"https://github.com/godotengine/godot-docs\",\n    \"description\": \"Godot Engine official documentation\",\n    \"owner\": \"godotengine\",\n    \"repo\": \"godot-docs\"\n  },\n  \"Godspeed Framework\": {\n    \"title\": \"Godspeed Framework\",\n    \"repoName\": \"godspeedsystems/gs-documentation\",\n    \"githubUrl\": \"https://github.com/godspeedsystems/gs-documentation\",\n    \"description\": \"Godspeed framework v2 documentation\",\n    \"owner\": \"godspeedsystems\",\n    \"repo\": \"gs-documentation\"\n  },\n  \"Fiber\": {\n    \"title\": \"Fiber\",\n    \"repoName\": \"gofiber/fiber\",\n    \"githubUrl\": \"https://github.com/gofiber/fiber\",\n    \"description\": \"⚡️ Express inspired web framework written in Go\",\n    \"owner\": \"gofiber\",\n    \"repo\": \"fiber\"\n  },\n  \"Hugo\": {\n    \"title\": \"Hugo\",\n    \"repoName\": \"gohugoio/hugodocs\",\n    \"githubUrl\": \"https://github.com/gohugoio/hugodocs\",\n    \"description\": \"The source for https://gohugo.io/\",\n    \"owner\": \"gohugoio\",\n    \"repo\": \"hugodocs\"\n  },\n  \"Migrate\": {\n    \"title\": \"Migrate\",\n    \"repoName\": \"golang-migrate/migrate\",\n    \"githubUrl\": \"https://github.com/golang-migrate/migrate\",\n    \"description\": \"Database migrations. CLI and Golang library.\",\n    \"owner\": \"golang-migrate\",\n    \"repo\": \"migrate\"\n  },\n  \"Go\": {\n    \"title\": \"Go\",\n    \"repoName\": \"golang/go\",\n    \"githubUrl\": \"https://github.com/golang/go\",\n    \"description\": \"The Go programming language\",\n    \"owner\": \"golang\",\n    \"repo\": \"go\"\n  },\n  \"Factorio Doku MCP\": {\n    \"title\": \"Factorio Doku MCP\",\n    \"repoName\": \"gomgom50/factoriodokumcp\",\n    \"githubUrl\": \"https://github.com/gomgom50/factoriodokumcp\",\n    \"description\": \"\",\n    \"owner\": \"gomgom50\",\n    \"repo\": \"factoriodokumcp\"\n  },\n  \"Optax\": {\n    \"title\": \"Optax\",\n    \"repoName\": \"google-deepmind/optax\",\n    \"githubUrl\": \"https://github.com/google-deepmind/optax\",\n    \"description\": \"Optax is a gradient processing and optimization library for JAX.\",\n    \"owner\": \"google-deepmind\",\n    \"repo\": \"optax\"\n  },\n  \"Gemini 2.0 Image Editing with Next.js\": {\n    \"title\": \"Gemini 2.0 Image Editing with Next.js\",\n    \"repoName\": \"google-gemini/gemini-image-editing-nextjs-quickstart\",\n    \"githubUrl\": \"https://github.com/google-gemini/gemini-image-editing-nextjs-quickstart\",\n    \"description\": \"Get started with native image generation and editing using Gemini 2.0 and Next.js\",\n    \"owner\": \"google-gemini\",\n    \"repo\": \"gemini-image-editing-nextjs-quickstart\"\n  },\n  \"Google GenAI\": {\n    \"title\": \"Google GenAI\",\n    \"repoName\": \"google-gemini/generative-ai-js\",\n    \"githubUrl\": \"https://github.com/google-gemini/generative-ai-js\",\n    \"description\": \"This SDK is now deprecated, use the new unified Google GenAI SDK.\",\n    \"owner\": \"google-gemini\",\n    \"repo\": \"generative-ai-js\"\n  },\n  \"Google GitHub Actions Deploy CloudRun\": {\n    \"title\": \"Google GitHub Actions Deploy CloudRun\",\n    \"repoName\": \"google-github-actions/deploy-cloudrun\",\n    \"githubUrl\": \"https://github.com/google-github-actions/deploy-cloudrun\",\n    \"description\": \"A GitHub Action for deploying services to Google Cloud Run.\",\n    \"owner\": \"google-github-actions\",\n    \"repo\": \"deploy-cloudrun\"\n  },\n  \"A2A\": {\n    \"title\": \"A2A\",\n    \"repoName\": \"google/a2a\",\n    \"githubUrl\": \"https://github.com/google/a2a\",\n    \"description\": \"An open protocol enabling communication and interoperability between opaque agentic applications.\",\n    \"owner\": \"google\",\n    \"repo\": \"a2a\"\n  },\n  \"AI Development Kit\": {\n    \"title\": \"AI Development Kit\",\n    \"repoName\": \"google/adk-docs\",\n    \"githubUrl\": \"https://github.com/google/adk-docs\",\n    \"description\": \"An open-source, code-first Python toolkit for building, evaluating, and deploying sophisticated AI agents with flexibility and control.\",\n    \"owner\": \"google\",\n    \"repo\": \"adk-docs\"\n  },\n  \"ADK Python\": {\n    \"title\": \"ADK Python\",\n    \"repoName\": \"google/adk-python\",\n    \"githubUrl\": \"https://github.com/google/adk-python\",\n    \"description\": \"An open-source, code-first Python toolkit for building, evaluating, and deploying sophisticated AI agents with flexibility and control.\",\n    \"owner\": \"google\",\n    \"repo\": \"adk-python\"\n  },\n  \"Agent Development Kit Samples\": {\n    \"title\": \"Agent Development Kit Samples\",\n    \"repoName\": \"google/adk-samples\",\n    \"githubUrl\": \"https://github.com/google/adk-samples\",\n    \"description\": \"A collection of sample agents built with Agent Development (ADK) \",\n    \"owner\": \"google\",\n    \"repo\": \"adk-samples\"\n  },\n  \"Blockly\": {\n    \"title\": \"Blockly\",\n    \"repoName\": \"google/blockly\",\n    \"githubUrl\": \"https://github.com/google/blockly\",\n    \"description\": \"The web-based visual programming editor.\",\n    \"owner\": \"google\",\n    \"repo\": \"blockly\"\n  },\n  \"FlatBuffers\": {\n    \"title\": \"FlatBuffers\",\n    \"repoName\": \"google/flatbuffers\",\n    \"githubUrl\": \"https://github.com/google/flatbuffers\",\n    \"description\": \"FlatBuffers: Memory Efficient Serialization Library\",\n    \"owner\": \"google\",\n    \"repo\": \"flatbuffers\"\n  },\n  \"Google Sign-In iOS\": {\n    \"title\": \"Google Sign-In iOS\",\n    \"repoName\": \"google/googlesignin-ios\",\n    \"githubUrl\": \"https://github.com/google/googlesignin-ios\",\n    \"description\": \"Enables iOS and macOS apps to sign in with Google.\",\n    \"owner\": \"google\",\n    \"repo\": \"googlesignin-ios\"\n  },\n  \"GTM AppAuth\": {\n    \"title\": \"GTM AppAuth\",\n    \"repoName\": \"google/gtmappauth.git\",\n    \"githubUrl\": \"https://github.com/google/gtmappauth.git\",\n    \"description\": \"Apple platforms SDK for using AppAuth with Google libraries.\",\n    \"owner\": \"google\",\n    \"repo\": \"gtmappauth.git\"\n  },\n  \"Meridian\": {\n    \"title\": \"Meridian\",\n    \"repoName\": \"google/meridian\",\n    \"githubUrl\": \"https://github.com/google/meridian\",\n    \"description\": \"Meridian is an MMM framework that enables advertisers to set up and run their own in-house models.\",\n    \"owner\": \"google\",\n    \"repo\": \"meridian\"\n  },\n  \"Google OR-Tools\": {\n    \"title\": \"Google OR-Tools\",\n    \"repoName\": \"google/or-tools\",\n    \"githubUrl\": \"https://github.com/google/or-tools\",\n    \"description\": \"Google's Operations Research tools:\",\n    \"owner\": \"google\",\n    \"repo\": \"or-tools\"\n  },\n  \"Skia\": {\n    \"title\": \"Skia\",\n    \"repoName\": \"google/skia\",\n    \"githubUrl\": \"https://github.com/google/skia\",\n    \"description\": \"Skia is a complete 2D graphic library for drawing Text, Geometries, and Images.\",\n    \"owner\": \"google\",\n    \"repo\": \"skia\"\n  },\n  \"Wire\": {\n    \"title\": \"Wire\",\n    \"repoName\": \"google/wire\",\n    \"githubUrl\": \"https://github.com/google/wire\",\n    \"description\": \"Compile-time Dependency Injection for Go\",\n    \"owner\": \"google\",\n    \"repo\": \"wire\"\n  },\n  \"Zx\": {\n    \"title\": \"Zx\",\n    \"repoName\": \"google/zx\",\n    \"githubUrl\": \"https://github.com/google/zx\",\n    \"description\": \"A tool for writing better scripts\",\n    \"owner\": \"google\",\n    \"repo\": \"zx\"\n  },\n  \"Google Mobile Ads Swift Package Manager\": {\n    \"title\": \"Google Mobile Ads Swift Package Manager\",\n    \"repoName\": \"googleads/swift-package-manager-google-mobile-ads.git\",\n    \"githubUrl\": \"https://github.com/googleads/swift-package-manager-google-mobile-ads.git\",\n    \"description\": \"\",\n    \"owner\": \"googleads\",\n    \"repo\": \"swift-package-manager-google-mobile-ads.git\"\n  },\n  \"Google API Node.js Client\": {\n    \"title\": \"Google API Node.js Client\",\n    \"repoName\": \"googleapis/google-api-nodejs-client\",\n    \"githubUrl\": \"https://github.com/googleapis/google-api-nodejs-client\",\n    \"description\": \"Google's officially supported Node.js client library for accessing Google APIs. Support for authorization and authentication with OAuth 2.0, API Keys and JWT (Service Tokens) is included. \",\n    \"owner\": \"googleapis\",\n    \"repo\": \"google-api-nodejs-client\"\n  },\n  \"Google Cloud Node.js Client Library\": {\n    \"title\": \"Google Cloud Node.js Client Library\",\n    \"repoName\": \"googleapis/google-cloud-node\",\n    \"githubUrl\": \"https://github.com/googleapis/google-cloud-node\",\n    \"description\": \"Google Cloud Client Library for Node.js\",\n    \"owner\": \"googleapis\",\n    \"repo\": \"google-cloud-node\"\n  },\n  \"Google Cloud Rust\": {\n    \"title\": \"Google Cloud Rust\",\n    \"repoName\": \"googleapis/google-cloud-rust\",\n    \"githubUrl\": \"https://github.com/googleapis/google-cloud-rust\",\n    \"description\": \"Google Cloud Platform Rust [Experimental] Client Libraries\",\n    \"owner\": \"googleapis\",\n    \"repo\": \"google-cloud-rust\"\n  },\n  \"GenAI\": {\n    \"title\": \"GenAI\",\n    \"repoName\": \"googleapis/js-genai\",\n    \"githubUrl\": \"https://github.com/googleapis/js-genai\",\n    \"description\": \"TypeScript/JavaScript SDK for Gemini and Vertex AI. [PREVIEW]\",\n    \"owner\": \"googleapis\",\n    \"repo\": \"js-genai\"\n  },\n  \"Google Gen AI Python SDK\": {\n    \"title\": \"Google Gen AI Python SDK\",\n    \"repoName\": \"googleapis/python-genai\",\n    \"githubUrl\": \"https://github.com/googleapis/python-genai\",\n    \"description\": \"Google Gen AI Python SDK provides an interface for developers to integrate Google's generative models into their Python applications.\",\n    \"owner\": \"googleapis\",\n    \"repo\": \"python-genai\"\n  },\n  \"Comlink\": {\n    \"title\": \"Comlink\",\n    \"repoName\": \"googlechromelabs/comlink\",\n    \"githubUrl\": \"https://github.com/googlechromelabs/comlink\",\n    \"description\": \"Comlink makes WebWorkers enjoyable.\",\n    \"owner\": \"googlechromelabs\",\n    \"repo\": \"comlink\"\n  },\n  \"Firebase Extensions\": {\n    \"title\": \"Firebase Extensions\",\n    \"repoName\": \"googlecloudplatform/firebase-extensions\",\n    \"githubUrl\": \"https://github.com/googlecloudplatform/firebase-extensions\",\n    \"description\": \"\",\n    \"owner\": \"googlecloudplatform\",\n    \"repo\": \"firebase-extensions\"\n  },\n  \"Generative AI on Google Cloud\": {\n    \"title\": \"Generative AI on Google Cloud\",\n    \"repoName\": \"googlecloudplatform/generative-ai\",\n    \"githubUrl\": \"https://github.com/googlecloudplatform/generative-ai\",\n    \"description\": \"Sample code and notebooks for Generative AI on Google Cloud, with Gemini on Vertex AI\",\n    \"owner\": \"googlecloudplatform\",\n    \"repo\": \"generative-ai\"\n  },\n  \"Google Cloud Java & Kotlin Samples\": {\n    \"title\": \"Google Cloud Java & Kotlin Samples\",\n    \"repoName\": \"googlecloudplatform/java-docs-samples\",\n    \"githubUrl\": \"https://github.com/googlecloudplatform/java-docs-samples\",\n    \"description\": \"Java and Kotlin Code samples used on cloud.google.com\",\n    \"owner\": \"googlecloudplatform\",\n    \"repo\": \"java-docs-samples\"\n  },\n  \"Distroless\": {\n    \"title\": \"Distroless\",\n    \"repoName\": \"googlecontainertools/distroless\",\n    \"githubUrl\": \"https://github.com/googlecontainertools/distroless\",\n    \"description\": \"🥑  Language focused docker images, minus the operating system.  \",\n    \"owner\": \"googlecontainertools\",\n    \"repo\": \"distroless\"\n  },\n  \"Google Workspace Apps Script Samples\": {\n    \"title\": \"Google Workspace Apps Script Samples\",\n    \"repoName\": \"googleworkspace/apps-script-samples\",\n    \"githubUrl\": \"https://github.com/googleworkspace/apps-script-samples\",\n    \"description\": \"Apps Script samples for Google Workspace products.\",\n    \"owner\": \"googleworkspace\",\n    \"repo\": \"apps-script-samples\"\n  },\n  \"Watchdog\": {\n    \"title\": \"Watchdog\",\n    \"repoName\": \"gorakhargosh/watchdog\",\n    \"githubUrl\": \"https://github.com/gorakhargosh/watchdog\",\n    \"description\": \"Python library and shell utilities to monitor filesystem events.\",\n    \"owner\": \"gorakhargosh\",\n    \"repo\": \"watchdog\"\n  },\n  \"Goravel\": {\n    \"title\": \"Goravel\",\n    \"repoName\": \"goravel/goravel\",\n    \"githubUrl\": \"https://github.com/goravel/goravel\",\n    \"description\": \"A Golang framework for web artisans. Tribute to Laravel.\",\n    \"owner\": \"goravel\",\n    \"repo\": \"goravel\"\n  },\n  \"React Native Bottom Sheet\": {\n    \"title\": \"React Native Bottom Sheet\",\n    \"repoName\": \"gorhom/react-native-bottom-sheet\",\n    \"githubUrl\": \"https://github.com/gorhom/react-native-bottom-sheet\",\n    \"description\": \"A performant interactive bottom sheet with fully configurable options 🚀\",\n    \"owner\": \"gorhom\",\n    \"repo\": \"react-native-bottom-sheet\"\n  },\n  \"React Day Picker\": {\n    \"title\": \"React Day Picker\",\n    \"repoName\": \"gpbl/react-day-picker\",\n    \"githubUrl\": \"https://github.com/gpbl/react-day-picker\",\n    \"description\": \"DayPicker is a customizable date picker component for React. Add date pickers, calendars, and date inputs to your web applications.\",\n    \"owner\": \"gpbl\",\n    \"repo\": \"react-day-picker\"\n  },\n  \"GPUStack\": {\n    \"title\": \"GPUStack\",\n    \"repoName\": \"gpustack/gpustack\",\n    \"githubUrl\": \"https://github.com/gpustack/gpustack\",\n    \"description\": \"Manage GPU clusters for running AI models\",\n    \"owner\": \"gpustack\",\n    \"repo\": \"gpustack\"\n  },\n  \"FastRTC\": {\n    \"title\": \"FastRTC\",\n    \"repoName\": \"gradio-app/fastrtc\",\n    \"githubUrl\": \"https://github.com/gradio-app/fastrtc\",\n    \"description\": \"The python library for real-time communication\",\n    \"owner\": \"gradio-app\",\n    \"repo\": \"fastrtc\"\n  },\n  \"Gradio\": {\n    \"title\": \"Gradio\",\n    \"repoName\": \"gradio-app/gradio\",\n    \"githubUrl\": \"https://github.com/gradio-app/gradio\",\n    \"description\": \"Build and share delightful machine learning apps, all in Python. 🌟 Star to support our work!\",\n    \"owner\": \"gradio-app\",\n    \"repo\": \"gradio\"\n  },\n  \"Gradle Community\": {\n    \"title\": \"Gradle Community\",\n    \"repoName\": \"gradle/community\",\n    \"githubUrl\": \"https://github.com/gradle/community\",\n    \"description\": \"Gradle Community content and Gradle Cookbook. Open for Contributions\",\n    \"owner\": \"gradle\",\n    \"repo\": \"community\"\n  },\n  \"Gradle\": {\n    \"title\": \"Gradle\",\n    \"repoName\": \"gradle/gradle\",\n    \"githubUrl\": \"https://github.com/gradle/gradle\",\n    \"description\": \"Adaptable, fast automation for all\",\n    \"owner\": \"gradle\",\n    \"repo\": \"gradle\"\n  },\n  \"Gradle Guides\": {\n    \"title\": \"Gradle Guides\",\n    \"repoName\": \"gradle/guides\",\n    \"githubUrl\": \"https://github.com/gradle/guides\",\n    \"description\": \"The Gradle Guides at https://guides.gradle.org. \",\n    \"owner\": \"gradle\",\n    \"repo\": \"guides\"\n  },\n  \"Alloy\": {\n    \"title\": \"Alloy\",\n    \"repoName\": \"grafana/alloy\",\n    \"githubUrl\": \"https://github.com/grafana/alloy\",\n    \"description\": \"OpenTelemetry Collector distribution with programmable pipelines\",\n    \"owner\": \"grafana\",\n    \"repo\": \"alloy\"\n  },\n  \"Grafana Docker Otel LGTM\": {\n    \"title\": \"Grafana Docker Otel LGTM\",\n    \"repoName\": \"grafana/docker-otel-lgtm\",\n    \"githubUrl\": \"https://github.com/grafana/docker-otel-lgtm\",\n    \"description\": \"OpenTelemetry backend in a Docker image\",\n    \"owner\": \"grafana\",\n    \"repo\": \"docker-otel-lgtm\"\n  },\n  \"Grafana\": {\n    \"title\": \"Grafana\",\n    \"repoName\": \"grafana/grafana\",\n    \"githubUrl\": \"https://github.com/grafana/grafana\",\n    \"description\": \"The open and composable observability and data visualization platform. Visualize metrics, logs, and traces from multiple sources like Prometheus, Loki, Elasticsearch, InfluxDB, Postgres and many more. \",\n    \"owner\": \"grafana\",\n    \"repo\": \"grafana\"\n  },\n  \"k6\": {\n    \"title\": \"k6\",\n    \"repoName\": \"grafana/k6-docs\",\n    \"githubUrl\": \"https://github.com/grafana/k6-docs\",\n    \"description\": \"The k6 documentation website.\",\n    \"owner\": \"grafana\",\n    \"repo\": \"k6-docs\"\n  },\n  \"Loki\": {\n    \"title\": \"Loki\",\n    \"repoName\": \"grafana/loki\",\n    \"githubUrl\": \"https://github.com/grafana/loki\",\n    \"description\": \"Like Prometheus, but for logs.\",\n    \"owner\": \"grafana\",\n    \"repo\": \"loki\"\n  },\n  \"Grafana Mimir\": {\n    \"title\": \"Grafana Mimir\",\n    \"repoName\": \"grafana/mimir\",\n    \"githubUrl\": \"https://github.com/grafana/mimir\",\n    \"description\": \"Grafana Mimir provides horizontally scalable, highly available, multi-tenant, long-term storage for Prometheus.\",\n    \"owner\": \"grafana\",\n    \"repo\": \"mimir\"\n  },\n  \"Grafana Tempo\": {\n    \"title\": \"Grafana Tempo\",\n    \"repoName\": \"grafana/tempo\",\n    \"githubUrl\": \"https://github.com/grafana/tempo\",\n    \"description\": \"Grafana Tempo is a high volume, minimal dependency distributed tracing backend.\",\n    \"owner\": \"grafana\",\n    \"repo\": \"tempo\"\n  },\n  \"Wrapt\": {\n    \"title\": \"Wrapt\",\n    \"repoName\": \"grahamdumpleton/wrapt\",\n    \"githubUrl\": \"https://github.com/grahamdumpleton/wrapt\",\n    \"description\": \"A Python module for decorators, wrappers and monkey patching.\",\n    \"owner\": \"grahamdumpleton\",\n    \"repo\": \"wrapt\"\n  },\n  \"Grammy\": {\n    \"title\": \"Grammy\",\n    \"repoName\": \"grammyjs/grammy\",\n    \"githubUrl\": \"https://github.com/grammyjs/grammy\",\n    \"description\": \"The Telegram Bot Framework.\",\n    \"owner\": \"grammyjs\",\n    \"repo\": \"grammy\"\n  },\n  \"Graphlit Client\": {\n    \"title\": \"Graphlit Client\",\n    \"repoName\": \"graphlit/graphlit-client-typescript\",\n    \"githubUrl\": \"https://github.com/graphlit/graphlit-client-typescript\",\n    \"description\": \"TypeScript client for Graphlit Platform\",\n    \"owner\": \"graphlit\",\n    \"repo\": \"graphlit-client-typescript\"\n  },\n  \"Graphology\": {\n    \"title\": \"Graphology\",\n    \"repoName\": \"graphology/graphology\",\n    \"githubUrl\": \"https://github.com/graphology/graphology\",\n    \"description\": \"A robust & multipurpose Graph object for JavaScript & TypeScript.\",\n    \"owner\": \"graphology\",\n    \"repo\": \"graphology\"\n  },\n  \"Graph Protocol Common TS\": {\n    \"title\": \"Graph Protocol Common TS\",\n    \"repoName\": \"graphprotocol/common-ts\",\n    \"githubUrl\": \"https://github.com/graphprotocol/common-ts\",\n    \"description\": \"Common TypeScript library for use in Graph Protocol components\",\n    \"owner\": \"graphprotocol\",\n    \"repo\": \"common-ts\"\n  },\n  \"The Graph\": {\n    \"title\": \"The Graph\",\n    \"repoName\": \"graphprotocol/docs\",\n    \"githubUrl\": \"https://github.com/graphprotocol/docs\",\n    \"description\": \"Documentation for The Graph\",\n    \"owner\": \"graphprotocol\",\n    \"repo\": \"docs\"\n  },\n  \"The Graph Client\": {\n    \"title\": \"The Graph Client\",\n    \"repoName\": \"graphprotocol/graph-client\",\n    \"githubUrl\": \"https://github.com/graphprotocol/graph-client\",\n    \"description\": \"The Graph library for building GraphQL-based dapps in a decentralized way.  \",\n    \"owner\": \"graphprotocol\",\n    \"repo\": \"graph-client\"\n  },\n  \"Graph Explorer Subgraph\": {\n    \"title\": \"Graph Explorer Subgraph\",\n    \"repoName\": \"graphprotocol/graph-network-subgraph\",\n    \"githubUrl\": \"https://github.com/graphprotocol/graph-network-subgraph\",\n    \"description\": \"The subgraph, the smart contracts, the tests, and documents for the Graph Explorer Decentralized Application\",\n    \"owner\": \"graphprotocol\",\n    \"repo\": \"graph-network-subgraph\"\n  },\n  \"Graph Node\": {\n    \"title\": \"Graph Node\",\n    \"repoName\": \"graphprotocol/graph-node\",\n    \"githubUrl\": \"https://github.com/graphprotocol/graph-node\",\n    \"description\": \"Graph Node indexes data from blockchains such as Ethereum and serves it over GraphQL\",\n    \"owner\": \"graphprotocol\",\n    \"repo\": \"graph-node\"\n  },\n  \"The Graph Tooling\": {\n    \"title\": \"The Graph Tooling\",\n    \"repoName\": \"graphprotocol/graph-tooling\",\n    \"githubUrl\": \"https://github.com/graphprotocol/graph-tooling\",\n    \"description\": \"Monorepo for various tools used by subgraph developers.\",\n    \"owner\": \"graphprotocol\",\n    \"repo\": \"graph-tooling\"\n  },\n  \"The Graph TypeScript/AssemblyScript\": {\n    \"title\": \"The Graph TypeScript/AssemblyScript\",\n    \"repoName\": \"graphprotocol/graph-ts\",\n    \"githubUrl\": \"https://github.com/graphprotocol/graph-ts\",\n    \"description\": \"TypeScript/AssemblyScript library for writing mappings for The Graph\",\n    \"owner\": \"graphprotocol\",\n    \"repo\": \"graph-ts\"\n  },\n  \"Graph Protocol GRC 20 TS\": {\n    \"title\": \"Graph Protocol GRC 20 TS\",\n    \"repoName\": \"graphprotocol/grc-20-ts\",\n    \"githubUrl\": \"https://github.com/graphprotocol/grc-20-ts\",\n    \"description\": \"\",\n    \"owner\": \"graphprotocol\",\n    \"repo\": \"grc-20-ts\"\n  },\n  \"GraphQL for .NET\": {\n    \"title\": \"GraphQL for .NET\",\n    \"repoName\": \"graphql-dotnet/graphql-dotnet\",\n    \"githubUrl\": \"https://github.com/graphql-dotnet/graphql-dotnet\",\n    \"description\": \"GraphQL for .NET\",\n    \"owner\": \"graphql-dotnet\",\n    \"repo\": \"graphql-dotnet\"\n  },\n  \"GraphQL Yoga\": {\n    \"title\": \"GraphQL Yoga\",\n    \"repoName\": \"graphql-hive/graphql-yoga\",\n    \"githubUrl\": \"https://github.com/graphql-hive/graphql-yoga\",\n    \"description\": \"🧘 Rewrite of a fully-featured GraphQL Server with focus on easy setup, performance & great developer experience.  The core of Yoga implements WHATWG Fetch API and can run/deploy on any JS environment.\",\n    \"owner\": \"graphql-hive\",\n    \"repo\": \"graphql-yoga\"\n  },\n  \"GraphQL\": {\n    \"title\": \"GraphQL\",\n    \"repoName\": \"graphql/graphql.github.io\",\n    \"githubUrl\": \"https://github.com/graphql/graphql.github.io\",\n    \"description\": \"GraphQL Documentation at graphql.org\",\n    \"owner\": \"graphql\",\n    \"repo\": \"graphql.github.io\"\n  },\n  \"Gravity UI Graph\": {\n    \"title\": \"Gravity UI Graph\",\n    \"repoName\": \"gravity-ui/graph\",\n    \"githubUrl\": \"https://github.com/gravity-ui/graph\",\n    \"description\": \"\",\n    \"owner\": \"gravity-ui\",\n    \"repo\": \"graph\"\n  },\n  \"Gravity UI Page Constructor\": {\n    \"title\": \"Gravity UI Page Constructor\",\n    \"repoName\": \"gravity-ui/page-constructor\",\n    \"githubUrl\": \"https://github.com/gravity-ui/page-constructor\",\n    \"description\": \"A library for rendering web pages or their parts from JSON data.\",\n    \"owner\": \"gravity-ui\",\n    \"repo\": \"page-constructor\"\n  },\n  \"RooFlow\": {\n    \"title\": \"RooFlow\",\n    \"repoName\": \"greatscottymac/rooflow\",\n    \"githubUrl\": \"https://github.com/greatscottymac/rooflow\",\n    \"description\": \"RooFlow - Enhanced Memory Bank System with ☢️Footgun Power☢️  Next-gen Memory Bank system with five integrated modes and system-level customization. Uses Roo Code's experimental \\\"Footgun\\\" feature for deep AI assistant customization while maintaining efficient token usage! \",\n    \"owner\": \"greatscottymac\",\n    \"repo\": \"rooflow\"\n  },\n  \"GSAP\": {\n    \"title\": \"GSAP\",\n    \"repoName\": \"greensock/gsap\",\n    \"githubUrl\": \"https://github.com/greensock/gsap\",\n    \"description\": \"GSAP (GreenSock Animation Platform), a JavaScript animation library for the modern web\",\n    \"owner\": \"greensock\",\n    \"repo\": \"gsap\"\n  },\n  \"GreptimeDB\": {\n    \"title\": \"GreptimeDB\",\n    \"repoName\": \"greptimeteam/docs\",\n    \"githubUrl\": \"https://github.com/greptimeteam/docs\",\n    \"description\": \"Document for GreptimeDB\",\n    \"owner\": \"greptimeteam\",\n    \"repo\": \"docs\"\n  },\n  \"Greenhouse Software\": {\n    \"title\": \"Greenhouse Software\",\n    \"repoName\": \"grnhse/greenhouse-api-docs\",\n    \"githubUrl\": \"https://github.com/grnhse/greenhouse-api-docs\",\n    \"description\": \"Documentation for Greenhouse Software's APIs\",\n    \"owner\": \"grnhse\",\n    \"repo\": \"greenhouse-api-docs\"\n  },\n  \"gRPC Gateway\": {\n    \"title\": \"gRPC Gateway\",\n    \"repoName\": \"grpc-ecosystem/grpc-gateway\",\n    \"githubUrl\": \"https://github.com/grpc-ecosystem/grpc-gateway\",\n    \"description\": \"gRPC to JSON proxy generator following the gRPC HTTP spec\",\n    \"owner\": \"grpc-ecosystem\",\n    \"repo\": \"grpc-gateway\"\n  },\n  \"gRPC for .NET\": {\n    \"title\": \"gRPC for .NET\",\n    \"repoName\": \"grpc/grpc-dotnet\",\n    \"githubUrl\": \"https://github.com/grpc/grpc-dotnet\",\n    \"description\": \"gRPC for .NET\",\n    \"owner\": \"grpc\",\n    \"repo\": \"grpc-dotnet\"\n  },\n  \"gRPC\": {\n    \"title\": \"gRPC\",\n    \"repoName\": \"grpc/grpc.io\",\n    \"githubUrl\": \"https://github.com/grpc/grpc.io\",\n    \"description\": \"Repository for the gRPC website and documentation\",\n    \"owner\": \"grpc\",\n    \"repo\": \"grpc.io\"\n  },\n  \"React Activity Calendar\": {\n    \"title\": \"React Activity Calendar\",\n    \"repoName\": \"grubersjoe/react-activity-calendar\",\n    \"githubUrl\": \"https://github.com/grubersjoe/react-activity-calendar\",\n    \"description\": \"A React component to display activity data in a calendar (heatmap).\",\n    \"owner\": \"grubersjoe\",\n    \"repo\": \"react-activity-calendar\"\n  },\n  \"Grunt\": {\n    \"title\": \"Grunt\",\n    \"repoName\": \"gruntjs/grunt-docs\",\n    \"githubUrl\": \"https://github.com/gruntjs/grunt-docs\",\n    \"description\": \"Grunt documentation. https://github.com/gruntjs/gruntjs.com\",\n    \"owner\": \"gruntjs\",\n    \"repo\": \"grunt-docs\"\n  },\n  \"Terragrunt\": {\n    \"title\": \"Terragrunt\",\n    \"repoName\": \"gruntwork-io/terragrunt\",\n    \"githubUrl\": \"https://github.com/gruntwork-io/terragrunt\",\n    \"description\": \"Terragrunt is a flexible orchestration tool that allows Infrastructure as Code written in OpenTofu/Terraform to scale.\",\n    \"owner\": \"gruntwork-io\",\n    \"repo\": \"terragrunt\"\n  },\n  \"PyAirtable\": {\n    \"title\": \"PyAirtable\",\n    \"repoName\": \"gtalarico/pyairtable\",\n    \"githubUrl\": \"https://github.com/gtalarico/pyairtable\",\n    \"description\": \"Python Api Client for Airtable\",\n    \"owner\": \"gtalarico\",\n    \"repo\": \"pyairtable\"\n  },\n  \"Luxe\": {\n    \"title\": \"Luxe\",\n    \"repoName\": \"guhrodrrigues/luxe\",\n    \"githubUrl\": \"https://github.com/guhrodrrigues/luxe\",\n    \"description\": \"Copy and paste components ready to use. Practical. Customizable.\",\n    \"owner\": \"guhrodrrigues\",\n    \"repo\": \"luxe\"\n  },\n  \"Input OTP\": {\n    \"title\": \"Input OTP\",\n    \"repoName\": \"guilhermerodz/input-otp\",\n    \"githubUrl\": \"https://github.com/guilhermerodz/input-otp\",\n    \"description\": \"One time passcode Input. Accessible & unstyled.\",\n    \"owner\": \"guilhermerodz\",\n    \"repo\": \"input-otp\"\n  },\n  \"Time Slots\": {\n    \"title\": \"Time Slots\",\n    \"repoName\": \"gund/time-slots\",\n    \"githubUrl\": \"https://github.com/gund/time-slots\",\n    \"description\": \"Small library to generate slots for a date range between a time range with optional intervals\",\n    \"owner\": \"gund\",\n    \"repo\": \"time-slots\"\n  },\n  \"TS-Pattern\": {\n    \"title\": \"TS-Pattern\",\n    \"repoName\": \"gvergnaud/ts-pattern\",\n    \"githubUrl\": \"https://github.com/gvergnaud/ts-pattern\",\n    \"description\": \"🎨 The exhaustive Pattern Matching library for TypeScript, with smart type inference.\",\n    \"owner\": \"gvergnaud\",\n    \"repo\": \"ts-pattern\"\n  },\n  \"Google Web Toolkit\": {\n    \"title\": \"Google Web Toolkit\",\n    \"repoName\": \"gwtproject/gwt-site\",\n    \"githubUrl\": \"https://github.com/gwtproject/gwt-site\",\n    \"description\": \"Sources of the pages of the gwtproject.org website.\",\n    \"owner\": \"gwtproject\",\n    \"repo\": \"gwt-site\"\n  },\n  \"React Datepicker\": {\n    \"title\": \"React Datepicker\",\n    \"repoName\": \"hacker0x01/react-datepicker\",\n    \"githubUrl\": \"https://github.com/hacker0x01/react-datepicker\",\n    \"description\": \"A simple and reusable datepicker component for React\",\n    \"owner\": \"hacker0x01\",\n    \"repo\": \"react-datepicker\"\n  },\n  \"HACS\": {\n    \"title\": \"HACS\",\n    \"repoName\": \"hacs/documentation\",\n    \"githubUrl\": \"https://github.com/hacs/documentation\",\n    \"description\": \"Documentation for HACS\",\n    \"owner\": \"hacs\",\n    \"repo\": \"documentation\"\n  },\n  \"Reveal.js\": {\n    \"title\": \"Reveal.js\",\n    \"repoName\": \"hakimel/reveal.js\",\n    \"githubUrl\": \"https://github.com/hakimel/reveal.js\",\n    \"description\": \"The HTML Presentation Framework\",\n    \"owner\": \"hakimel\",\n    \"repo\": \"reveal.js\"\n  },\n  \"Dash User Contributions\": {\n    \"title\": \"Dash User Contributions\",\n    \"repoName\": \"hammerspoon/dash-user-contributions\",\n    \"githubUrl\": \"https://github.com/hammerspoon/dash-user-contributions\",\n    \"description\": \"Dash repo of user contributed docsets\",\n    \"owner\": \"hammerspoon\",\n    \"repo\": \"dash-user-contributions\"\n  },\n  \"Hammerspoon\": {\n    \"title\": \"Hammerspoon\",\n    \"repoName\": \"hammerspoon/hammerspoon.github.io\",\n    \"githubUrl\": \"https://github.com/hammerspoon/hammerspoon.github.io\",\n    \"description\": \"Website\",\n    \"owner\": \"hammerspoon\",\n    \"repo\": \"hammerspoon.github.io\"\n  },\n  \"Handsontable\": {\n    \"title\": \"Handsontable\",\n    \"repoName\": \"handsontable/handsontable\",\n    \"githubUrl\": \"https://github.com/handsontable/handsontable\",\n    \"description\": \"JavaScript Data Grid / Data Table with a Spreadsheet Look & Feel. Works with React, Angular, and Vue. Supported by the Handsontable team ⚡\",\n    \"owner\": \"handsontable\",\n    \"repo\": \"handsontable\"\n  },\n  \"Hangfire\": {\n    \"title\": \"Hangfire\",\n    \"repoName\": \"hangfireio/hangfire\",\n    \"githubUrl\": \"https://github.com/hangfireio/hangfire\",\n    \"description\": \"An easy way to perform background job processing in .NET and .NET Core applications. No Windows Service or separate process required\",\n    \"owner\": \"hangfireio\",\n    \"repo\": \"hangfire\"\n  },\n  \"Hapi\": {\n    \"title\": \"Hapi\",\n    \"repoName\": \"hapijs/hapi.dev\",\n    \"githubUrl\": \"https://github.com/hapijs/hapi.dev\",\n    \"description\": \"The hapi.dev developer portal\",\n    \"owner\": \"hapijs\",\n    \"repo\": \"hapi.dev\"\n  },\n  \"Joi\": {\n    \"title\": \"Joi\",\n    \"repoName\": \"hapijs/joi\",\n    \"githubUrl\": \"https://github.com/hapijs/joi\",\n    \"description\": \"The most powerful data validation library for JS\",\n    \"owner\": \"hapijs\",\n    \"repo\": \"joi\"\n  },\n  \"Puppeteer Sharp\": {\n    \"title\": \"Puppeteer Sharp\",\n    \"repoName\": \"hardkoded/puppeteer-sharp\",\n    \"githubUrl\": \"https://github.com/hardkoded/puppeteer-sharp\",\n    \"description\": \"Headless Chrome .NET API\",\n    \"owner\": \"hardkoded\",\n    \"repo\": \"puppeteer-sharp\"\n  },\n  \"LinkPreviewSwift\": {\n    \"title\": \"LinkPreviewSwift\",\n    \"repoName\": \"harlanhaskins/linkpreviewswift\",\n    \"githubUrl\": \"https://github.com/harlanhaskins/linkpreviewswift\",\n    \"description\": \"A Swift library for generating link previews client-side or server-side\",\n    \"owner\": \"harlanhaskins\",\n    \"repo\": \"linkpreviewswift\"\n  },\n  \"Harness Developer Hub\": {\n    \"title\": \"Harness Developer Hub\",\n    \"repoName\": \"harness/developer-hub\",\n    \"githubUrl\": \"https://github.com/harness/developer-hub\",\n    \"description\": \"Harness Developer Hub\",\n    \"owner\": \"harness\",\n    \"repo\": \"developer-hub\"\n  },\n  \"Prettier Config\": {\n    \"title\": \"Prettier Config\",\n    \"repoName\": \"harshalkatakiya/prettier-config\",\n    \"githubUrl\": \"https://github.com/harshalkatakiya/prettier-config\",\n    \"description\": \"A shareable Prettier configuration by Harshal Katakiya, with built-in support for Tailwind CSS and a simple CLI setup command for your projects.\",\n    \"owner\": \"harshalkatakiya\",\n    \"repo\": \"prettier-config\"\n  },\n  \"Sealnotes\": {\n    \"title\": \"Sealnotes\",\n    \"repoName\": \"harshsbhat/sealnotes\",\n    \"githubUrl\": \"https://github.com/harshsbhat/sealnotes\",\n    \"description\": \"Open-source lightweight encrypted notepad\",\n    \"owner\": \"harshsbhat\",\n    \"repo\": \"sealnotes\"\n  },\n  \"Nomad\": {\n    \"title\": \"Nomad\",\n    \"repoName\": \"hashicorp/nomad\",\n    \"githubUrl\": \"https://github.com/hashicorp/nomad\",\n    \"description\": \"Nomad is an easy-to-use, flexible, and performant workload orchestrator that can deploy a mix of microservice, batch, containerized, and non-containerized applications. Nomad is easy to operate and scale and has native Consul and Vault integrations.\",\n    \"owner\": \"hashicorp\",\n    \"repo\": \"nomad\"\n  },\n  \"Terraform\": {\n    \"title\": \"Terraform\",\n    \"repoName\": \"hashicorp/terraform\",\n    \"githubUrl\": \"https://github.com/hashicorp/terraform\",\n    \"description\": \"Terraform enables you to safely and predictably create, change, and improve infrastructure. It is a source-available tool that codifies APIs into declarative configuration files that can be shared amongst team members, treated as code, edited, reviewed, and versioned.\",\n    \"owner\": \"hashicorp\",\n    \"repo\": \"terraform\"\n  },\n  \"Terraform AWS Provider\": {\n    \"title\": \"Terraform AWS Provider\",\n    \"repoName\": \"hashicorp/terraform-provider-aws\",\n    \"githubUrl\": \"https://github.com/hashicorp/terraform-provider-aws\",\n    \"description\": \"The AWS Provider enables Terraform to manage AWS resources.\",\n    \"owner\": \"hashicorp\",\n    \"repo\": \"terraform-provider-aws\"\n  },\n  \"Terraform AzureRM Provider\": {\n    \"title\": \"Terraform AzureRM Provider\",\n    \"repoName\": \"hashicorp/terraform-provider-azurerm\",\n    \"githubUrl\": \"https://github.com/hashicorp/terraform-provider-azurerm\",\n    \"description\": \"Terraform provider for Azure Resource Manager\",\n    \"owner\": \"hashicorp\",\n    \"repo\": \"terraform-provider-azurerm\"\n  },\n  \"Vault\": {\n    \"title\": \"Vault\",\n    \"repoName\": \"hashicorp/vault\",\n    \"githubUrl\": \"https://github.com/hashicorp/vault\",\n    \"description\": \"A tool for secrets management, encryption as a service, and privileged access management\",\n    \"owner\": \"hashicorp\",\n    \"repo\": \"vault\"\n  },\n  \"Hasura DDN\": {\n    \"title\": \"Hasura DDN\",\n    \"repoName\": \"hasura/ddn-docs\",\n    \"githubUrl\": \"https://github.com/hasura/ddn-docs\",\n    \"description\": \"Repository for the Hasura DDN version of docs\",\n    \"owner\": \"hasura\",\n    \"repo\": \"ddn-docs\"\n  },\n  \"Hasura GraphQL Engine\": {\n    \"title\": \"Hasura GraphQL Engine\",\n    \"repoName\": \"hasura/graphql-engine\",\n    \"githubUrl\": \"https://github.com/hasura/graphql-engine\",\n    \"description\": \"Blazing fast, instant realtime GraphQL APIs on all your data with fine grained access control, also trigger webhooks on database events.\",\n    \"owner\": \"hasura\",\n    \"repo\": \"graphql-engine\"\n  },\n  \"PromptQL\": {\n    \"title\": \"PromptQL\",\n    \"repoName\": \"hasura/promptql-docs\",\n    \"githubUrl\": \"https://github.com/hasura/promptql-docs\",\n    \"description\": \"Repository for PromptQL docs.\",\n    \"owner\": \"hasura\",\n    \"repo\": \"promptql-docs\"\n  },\n  \"Next Forge\": {\n    \"title\": \"Next Forge\",\n    \"repoName\": \"haydenbleasel/next-forge\",\n    \"githubUrl\": \"https://github.com/haydenbleasel/next-forge\",\n    \"description\": \"Production-grade Turborepo template for Next.js apps.\",\n    \"owner\": \"haydenbleasel\",\n    \"repo\": \"next-forge\"\n  },\n  \"Pothos GraphQL\": {\n    \"title\": \"Pothos GraphQL\",\n    \"repoName\": \"hayes/pothos\",\n    \"githubUrl\": \"https://github.com/hayes/pothos\",\n    \"description\": \"Pothos GraphQL is library for creating GraphQL schemas in typescript using a strongly typed code first approach\",\n    \"owner\": \"hayes\",\n    \"repo\": \"pothos\"\n  },\n  \"Python Decouple\": {\n    \"title\": \"Python Decouple\",\n    \"repoName\": \"hbnetwork/python-decouple\",\n    \"githubUrl\": \"https://github.com/hbnetwork/python-decouple\",\n    \"description\": \"Strict separation of config from code.\",\n    \"owner\": \"hbnetwork\",\n    \"repo\": \"python-decouple\"\n  },\n  \"Sim#\": {\n    \"title\": \"Sim#\",\n    \"repoName\": \"heal-research/simsharp\",\n    \"githubUrl\": \"https://github.com/heal-research/simsharp\",\n    \"description\": \"Sim# is a .NET port of SimPy, process-based discrete event simulation framework\",\n    \"owner\": \"heal-research\",\n    \"repo\": \"simsharp\"\n  },\n  \"Devise\": {\n    \"title\": \"Devise\",\n    \"repoName\": \"heartcombo/devise\",\n    \"githubUrl\": \"https://github.com/heartcombo/devise\",\n    \"description\": \"Flexible authentication solution for Rails with Warden.\",\n    \"owner\": \"heartcombo\",\n    \"repo\": \"devise\"\n  },\n  \"Hebcal\": {\n    \"title\": \"Hebcal\",\n    \"repoName\": \"hebcal/hebcal-es6\",\n    \"githubUrl\": \"https://github.com/hebcal/hebcal-es6\",\n    \"description\": \"perpetual Jewish Calendar with holidays, Shabbat and holiday candle lighting and havdalah times, Torah readings, and more\",\n    \"owner\": \"hebcal\",\n    \"repo\": \"hebcal-es6\"\n  },\n  \"Helius SDK\": {\n    \"title\": \"Helius SDK\",\n    \"repoName\": \"helius-labs/helius-sdk\",\n    \"githubUrl\": \"https://github.com/helius-labs/helius-sdk\",\n    \"description\": \"\",\n    \"owner\": \"helius-labs\",\n    \"repo\": \"helius-sdk\"\n  },\n  \"Dnd\": {\n    \"title\": \"Dnd\",\n    \"repoName\": \"hello-pangea/dnd\",\n    \"githubUrl\": \"https://github.com/hello-pangea/dnd\",\n    \"description\": \"💅 Beautiful and accessible drag and drop for lists with React. ⭐️ Star to support our work!\",\n    \"owner\": \"hello-pangea\",\n    \"repo\": \"dnd\"\n  },\n  \"Helm\": {\n    \"title\": \"Helm\",\n    \"repoName\": \"helm/helm-www\",\n    \"githubUrl\": \"https://github.com/helm/helm-www\",\n    \"description\": \"The Helm website for docs, blog and project info.\",\n    \"owner\": \"helm\",\n    \"repo\": \"helm-www\"\n  },\n  \"Bevy Quinnet\": {\n    \"title\": \"Bevy Quinnet\",\n    \"repoName\": \"henauxg/bevy_quinnet\",\n    \"githubUrl\": \"https://github.com/henauxg/bevy_quinnet\",\n    \"description\": \"A Client/Server game networking plugin using QUIC, for the Bevy game engine.\",\n    \"owner\": \"henauxg\",\n    \"repo\": \"bevy_quinnet\"\n  },\n  \"Poker-Hand-Evaluator\": {\n    \"title\": \"Poker-Hand-Evaluator\",\n    \"repoName\": \"henryrlee/pokerhandevaluator\",\n    \"githubUrl\": \"https://github.com/henryrlee/pokerhandevaluator\",\n    \"description\": \"Poker-Hand-Evaluator: An efficient poker hand evaluation algorithm and its implementation, supporting 7-card poker and Omaha poker evaluation\",\n    \"owner\": \"henryrlee\",\n    \"repo\": \"pokerhandevaluator\"\n  },\n  \"Heroui\": {\n    \"title\": \"Heroui\",\n    \"repoName\": \"heroui-inc/heroui\",\n    \"githubUrl\": \"https://github.com/heroui-inc/heroui\",\n    \"description\": \"🚀 Beautiful, fast and modern React UI library. (Previously NextUI)\",\n    \"owner\": \"heroui-inc\",\n    \"repo\": \"heroui\"\n  },\n  \"Tailwind Variants\": {\n    \"title\": \"Tailwind Variants\",\n    \"repoName\": \"heroui-inc/tailwind-variants\",\n    \"githubUrl\": \"https://github.com/heroui-inc/tailwind-variants\",\n    \"description\": \"🦄 Tailwindcss first-class variant API\",\n    \"owner\": \"heroui-inc\",\n    \"repo\": \"tailwind-variants\"\n  },\n  \"Hexo\": {\n    \"title\": \"Hexo\",\n    \"repoName\": \"hexojs/site\",\n    \"githubUrl\": \"https://github.com/hexojs/site\",\n    \"description\": \"The website for Hexo. https://hexo.io/\",\n    \"owner\": \"hexojs\",\n    \"repo\": \"site\"\n  },\n  \"Hex\": {\n    \"title\": \"Hex\",\n    \"repoName\": \"hexpm/hexpm\",\n    \"githubUrl\": \"https://github.com/hexpm/hexpm\",\n    \"description\": \"API server and website for Hex\",\n    \"owner\": \"hexpm\",\n    \"repo\": \"hexpm\"\n  },\n  \"OpenAPI TS\": {\n    \"title\": \"OpenAPI TS\",\n    \"repoName\": \"hey-api/openapi-ts\",\n    \"githubUrl\": \"https://github.com/hey-api/openapi-ts\",\n    \"description\": \"🚀 The OpenAPI to TypeScript codegen. Generate clients, SDKs, validators, and more. Support: @mrlubos\",\n    \"owner\": \"hey-api\",\n    \"repo\": \"openapi-ts\"\n  },\n  \"Puter\": {\n    \"title\": \"Puter\",\n    \"repoName\": \"heyputer/puter\",\n    \"githubUrl\": \"https://github.com/heyputer/puter\",\n    \"description\": \"🌐 The Internet OS! Free, Open-Source, and Self-Hostable.\",\n    \"owner\": \"heyputer\",\n    \"repo\": \"puter\"\n  },\n  \"Hi.Events\": {\n    \"title\": \"Hi.Events\",\n    \"repoName\": \"hieventsdev/hi.events\",\n    \"githubUrl\": \"https://github.com/hieventsdev/hi.events\",\n    \"description\": \"Open-source event management and ticket selling platform. Perfect for concerts, conferences, and everything in between 🎟️\",\n    \"owner\": \"hieventsdev\",\n    \"repo\": \"hi.events\"\n  },\n  \"Highcharts JS\": {\n    \"title\": \"Highcharts JS\",\n    \"repoName\": \"highcharts/highcharts\",\n    \"githubUrl\": \"https://github.com/highcharts/highcharts\",\n    \"description\": \"Highcharts JS, the JavaScript charting framework\",\n    \"owner\": \"highcharts\",\n    \"repo\": \"highcharts\"\n  },\n  \"Hikari\": {\n    \"title\": \"Hikari\",\n    \"repoName\": \"hikari-py/hikari\",\n    \"githubUrl\": \"https://github.com/hikari-py/hikari\",\n    \"description\": \"A Discord API wrapper for Python and asyncio built on good intentions.\",\n    \"owner\": \"hikari-py\",\n    \"repo\": \"hikari\"\n  },\n  \"Trustcall\": {\n    \"title\": \"Trustcall\",\n    \"repoName\": \"hinthornw/trustcall\",\n    \"githubUrl\": \"https://github.com/hinthornw/trustcall\",\n    \"description\": \"Tenacious tool calling built on LangGraph\",\n    \"owner\": \"hinthornw\",\n    \"repo\": \"trustcall\"\n  },\n  \"LightRAG\": {\n    \"title\": \"LightRAG\",\n    \"repoName\": \"hkuds/lightrag\",\n    \"githubUrl\": \"https://github.com/hkuds/lightrag\",\n    \"description\": \"\\\"LightRAG: Simple and Fast Retrieval-Augmented Generation\\\"\",\n    \"owner\": \"hkuds\",\n    \"repo\": \"lightrag\"\n  },\n  \"MiniRAG\": {\n    \"title\": \"MiniRAG\",\n    \"repoName\": \"hkuds/minirag\",\n    \"githubUrl\": \"https://github.com/hkuds/minirag\",\n    \"description\": \"\\\"MiniRAG: Making RAG Simpler with Small and Free Language Models\\\"\",\n    \"owner\": \"hkuds\",\n    \"repo\": \"minirag\"\n  },\n  \"Composer Suite\": {\n    \"title\": \"Composer Suite\",\n    \"repoName\": \"hmans/composer-suite\",\n    \"githubUrl\": \"https://github.com/hmans/composer-suite\",\n    \"description\": \"A suite of libraries for making game development with Three.js and React not only awesome, but so good, it would feel wrong to use anything else.\",\n    \"owner\": \"hmans\",\n    \"repo\": \"composer-suite\"\n  },\n  \"Miniplex\": {\n    \"title\": \"Miniplex\",\n    \"repoName\": \"hmans/miniplex\",\n    \"githubUrl\": \"https://github.com/hmans/miniplex\",\n    \"description\": \"A 👩‍💻 developer-friendly entity management system for 🕹 games and similarly demanding applications, based on 🛠 ECS architecture.\",\n    \"owner\": \"hmans\",\n    \"repo\": \"miniplex\"\n  },\n  \"Flutter Image Cropper\": {\n    \"title\": \"Flutter Image Cropper\",\n    \"repoName\": \"hnvn/flutter_image_cropper\",\n    \"githubUrl\": \"https://github.com/hnvn/flutter_image_cropper\",\n    \"description\": \"A Flutter plugin for Android and iOS supports cropping images\",\n    \"owner\": \"hnvn\",\n    \"repo\": \"flutter_image_cropper\"\n  },\n  \"React Native Element Dropdown\": {\n    \"title\": \"React Native Element Dropdown\",\n    \"repoName\": \"hoaphantn7604/react-native-element-dropdown\",\n    \"githubUrl\": \"https://github.com/hoaphantn7604/react-native-element-dropdown\",\n    \"description\": \"A react-native dropdown component easy to customize for both iOS and Android. \",\n    \"owner\": \"hoaphantn7604\",\n    \"repo\": \"react-native-element-dropdown\"\n  },\n  \"Homarr\": {\n    \"title\": \"Homarr\",\n    \"repoName\": \"homarr-labs/homarr\",\n    \"githubUrl\": \"https://github.com/homarr-labs/homarr\",\n    \"description\": \"A modern and easy to use dashboard. 14+ integrations. 10K+ icons built in. Authentication out of the box. No YAML, drag and drop configuration.\",\n    \"owner\": \"homarr-labs\",\n    \"repo\": \"homarr\"\n  },\n  \"Home Assistant Developers\": {\n    \"title\": \"Home Assistant Developers\",\n    \"repoName\": \"home-assistant/developers.home-assistant\",\n    \"githubUrl\": \"https://github.com/home-assistant/developers.home-assistant\",\n    \"description\": \"Developers website for Home Assistant.\",\n    \"owner\": \"home-assistant\",\n    \"repo\": \"developers.home-assistant\"\n  },\n  \"Home Assistant\": {\n    \"title\": \"Home Assistant\",\n    \"repoName\": \"home-assistant/home-assistant.io\",\n    \"githubUrl\": \"https://github.com/home-assistant/home-assistant.io\",\n    \"description\": \":blue_book: Home Assistant User documentation\",\n    \"owner\": \"home-assistant\",\n    \"repo\": \"home-assistant.io\"\n  },\n  \"Hono\": {\n    \"title\": \"Hono\",\n    \"repoName\": \"honojs/website\",\n    \"githubUrl\": \"https://github.com/honojs/website\",\n    \"description\": \"Repository for hono.dev\",\n    \"owner\": \"honojs\",\n    \"repo\": \"website\"\n  },\n  \"HonoX\": {\n    \"title\": \"HonoX\",\n    \"repoName\": \"honojs/honox\",\n    \"githubUrl\": \"https://github.com/honojs/honox\",\n    \"description\": \"HonoX - Hono based meta framework\",\n    \"owner\": \"honojs\",\n    \"repo\": \"honox\"\n  },\n  \"Hono X Website\": {\n    \"title\": \"Hono X Website\",\n    \"repoName\": \"honojs/honox-website\",\n    \"githubUrl\": \"https://github.com/honojs/honox-website\",\n    \"description\": \"WIP\",\n    \"owner\": \"honojs\",\n    \"repo\": \"honox-website\"\n  },\n  \"Hono Middleware\": {\n    \"title\": \"Hono Middleware\",\n    \"repoName\": \"honojs/middleware\",\n    \"githubUrl\": \"https://github.com/honojs/middleware\",\n    \"description\": \"monorepo for Hono third-party middleware/helpers/wrappers\",\n    \"owner\": \"honojs\",\n    \"repo\": \"middleware\"\n  },\n  \"PDF-Lib\": {\n    \"title\": \"PDF-Lib\",\n    \"repoName\": \"hopding/pdf-lib\",\n    \"githubUrl\": \"https://github.com/hopding/pdf-lib\",\n    \"description\": \"Create and modify PDF documents in any JavaScript environment\",\n    \"owner\": \"hopding\",\n    \"repo\": \"pdf-lib\"\n  },\n  \"Hoppscotch\": {\n    \"title\": \"Hoppscotch\",\n    \"repoName\": \"hoppscotch/docs\",\n    \"githubUrl\": \"https://github.com/hoppscotch/docs\",\n    \"description\": \"📖 Hoppscotch documentation - https://docs.hoppscotch.io\",\n    \"owner\": \"hoppscotch\",\n    \"repo\": \"docs\"\n  },\n  \"Hostaway API\": {\n    \"title\": \"Hostaway API\",\n    \"repoName\": \"hostaway/api\",\n    \"githubUrl\": \"https://github.com/hostaway/api\",\n    \"description\": \"Beautiful static documentation for your API\",\n    \"owner\": \"hostaway\",\n    \"repo\": \"api\"\n  },\n  \"Hotwire Native Android\": {\n    \"title\": \"Hotwire Native Android\",\n    \"repoName\": \"hotwired/hotwire-native-android\",\n    \"githubUrl\": \"https://github.com/hotwired/hotwire-native-android\",\n    \"description\": \"Hotwire Native for Android\",\n    \"owner\": \"hotwired\",\n    \"repo\": \"hotwire-native-android\"\n  },\n  \"Hotwire Native iOS\": {\n    \"title\": \"Hotwire Native iOS\",\n    \"repoName\": \"hotwired/hotwire-native-ios\",\n    \"githubUrl\": \"https://github.com/hotwired/hotwire-native-ios\",\n    \"description\": \"Hotwire Native for iOS\",\n    \"owner\": \"hotwired\",\n    \"repo\": \"hotwire-native-ios\"\n  },\n  \"Stimulus\": {\n    \"title\": \"Stimulus\",\n    \"repoName\": \"hotwired/stimulus\",\n    \"githubUrl\": \"https://github.com/hotwired/stimulus\",\n    \"description\": \"A modest JavaScript framework for the HTML you already have\",\n    \"owner\": \"hotwired\",\n    \"repo\": \"stimulus\"\n  },\n  \"Turbo\": {\n    \"title\": \"Turbo\",\n    \"repoName\": \"hotwired/turbo\",\n    \"githubUrl\": \"https://github.com/hotwired/turbo\",\n    \"description\": \"The speed of a single-page web application without having to write any JavaScript\",\n    \"owner\": \"hotwired\",\n    \"repo\": \"turbo\"\n  },\n  \"Smart\": {\n    \"title\": \"Smart\",\n    \"repoName\": \"htmlelements/smart-custom-element\",\n    \"githubUrl\": \"https://github.com/htmlelements/smart-custom-element\",\n    \"description\": \"Smart a lightweight web component library that provides capabilities for web components, such as data binding, using es6 native class inheritance. This library is focused for providing the developer the ability to write robust and native web components without the need of dependencies and an overhead of a framework.\",\n    \"owner\": \"htmlelements\",\n    \"repo\": \"smart-custom-element\"\n  },\n  \"Preline UI\": {\n    \"title\": \"Preline UI\",\n    \"repoName\": \"htmlstreamofficial/preline\",\n    \"githubUrl\": \"https://github.com/htmlstreamofficial/preline\",\n    \"description\": \"Preline UI is an open-source set of prebuilt UI components based on the utility-first Tailwind CSS framework.\",\n    \"owner\": \"htmlstreamofficial\",\n    \"repo\": \"preline\"\n  },\n  \"Node-HTTP-Proxy\": {\n    \"title\": \"Node-HTTP-Proxy\",\n    \"repoName\": \"http-party/node-http-proxy\",\n    \"githubUrl\": \"https://github.com/http-party/node-http-proxy\",\n    \"description\": \"A full-featured http proxy for node.js\",\n    \"owner\": \"http-party\",\n    \"repo\": \"node-http-proxy\"\n  },\n  \"HubSpot API NodeJS\": {\n    \"title\": \"HubSpot API NodeJS\",\n    \"repoName\": \"hubspot/hubspot-api-nodejs\",\n    \"githubUrl\": \"https://github.com/hubspot/hubspot-api-nodejs\",\n    \"description\": \"HubSpot API NodeJS Client Libraries for V3 version of the API\",\n    \"owner\": \"hubspot\",\n    \"repo\": \"hubspot-api-nodejs\"\n  },\n  \"HubSpot Public API Spec Collection\": {\n    \"title\": \"HubSpot Public API Spec Collection\",\n    \"repoName\": \"hubspot/hubspot-public-api-spec-collection\",\n    \"githubUrl\": \"https://github.com/hubspot/hubspot-public-api-spec-collection\",\n    \"description\": \"\",\n    \"owner\": \"hubspot\",\n    \"repo\": \"hubspot-public-api-spec-collection\"\n  },\n  \"Accelerate\": {\n    \"title\": \"Accelerate\",\n    \"repoName\": \"huggingface/accelerate\",\n    \"githubUrl\": \"https://github.com/huggingface/accelerate\",\n    \"description\": \"🚀 A simple way to launch, train, and use PyTorch models on almost any device and distributed configuration, automatic mixed precision (including fp8), and easy-to-configure FSDP and DeepSpeed support\",\n    \"owner\": \"huggingface\",\n    \"repo\": \"accelerate\"\n  },\n  \"Candle\": {\n    \"title\": \"Candle\",\n    \"repoName\": \"huggingface/candle\",\n    \"githubUrl\": \"https://github.com/huggingface/candle\",\n    \"description\": \"Minimalist ML framework for Rust\",\n    \"owner\": \"huggingface\",\n    \"repo\": \"candle\"\n  },\n  \"Hugging Face Datasets\": {\n    \"title\": \"Hugging Face Datasets\",\n    \"repoName\": \"huggingface/datasets\",\n    \"githubUrl\": \"https://github.com/huggingface/datasets\",\n    \"description\": \"🤗 The largest hub of ready-to-use datasets for ML models with fast, easy-to-use and efficient data manipulation tools\",\n    \"owner\": \"huggingface\",\n    \"repo\": \"datasets\"\n  },\n  \"Diffusers\": {\n    \"title\": \"Diffusers\",\n    \"repoName\": \"huggingface/diffusers\",\n    \"githubUrl\": \"https://github.com/huggingface/diffusers\",\n    \"description\": \"🤗 Diffusers: State-of-the-art diffusion models for image, video, and audio generation in PyTorch and FLAX.\",\n    \"owner\": \"huggingface\",\n    \"repo\": \"diffusers\"\n  },\n  \"Optimum Quanto\": {\n    \"title\": \"Optimum Quanto\",\n    \"repoName\": \"huggingface/optimum-quanto\",\n    \"githubUrl\": \"https://github.com/huggingface/optimum-quanto\",\n    \"description\": \"A pytorch quantization backend for optimum\",\n    \"owner\": \"huggingface\",\n    \"repo\": \"optimum-quanto\"\n  },\n  \"Smolagents\": {\n    \"title\": \"Smolagents\",\n    \"repoName\": \"huggingface/smolagents\",\n    \"githubUrl\": \"https://github.com/huggingface/smolagents\",\n    \"description\": \"🤗 smolagents: a barebones library for agents that think in python code.\",\n    \"owner\": \"huggingface\",\n    \"repo\": \"smolagents\"\n  },\n  \"Text Embeddings Inference\": {\n    \"title\": \"Text Embeddings Inference\",\n    \"repoName\": \"huggingface/text-embeddings-inference\",\n    \"githubUrl\": \"https://github.com/huggingface/text-embeddings-inference\",\n    \"description\": \"A blazing fast inference solution for text embeddings models\",\n    \"owner\": \"huggingface\",\n    \"repo\": \"text-embeddings-inference\"\n  },\n  \"Transformers\": {\n    \"title\": \"Transformers\",\n    \"repoName\": \"huggingface/transformers\",\n    \"githubUrl\": \"https://github.com/huggingface/transformers\",\n    \"description\": \"🤗 Transformers: State-of-the-art Machine Learning for Pytorch, TensorFlow, and JAX.\",\n    \"owner\": \"huggingface\",\n    \"repo\": \"transformers\"\n  },\n  \"Transformers.js\": {\n    \"title\": \"Transformers.js\",\n    \"repoName\": \"huggingface/transformers.js\",\n    \"githubUrl\": \"https://github.com/huggingface/transformers.js\",\n    \"description\": \"State-of-the-art Machine Learning for the web. Run 🤗 Transformers directly in your browser, with no need for a server!\",\n    \"owner\": \"huggingface\",\n    \"repo\": \"transformers.js\"\n  },\n  \"Imitation\": {\n    \"title\": \"Imitation\",\n    \"repoName\": \"humancompatibleai/imitation\",\n    \"githubUrl\": \"https://github.com/humancompatibleai/imitation\",\n    \"description\": \"Clean PyTorch implementations of imitation and reward learning algorithms\",\n    \"owner\": \"humancompatibleai\",\n    \"repo\": \"imitation\"\n  },\n  \"Hummingbot\": {\n    \"title\": \"Hummingbot\",\n    \"repoName\": \"hummingbot/hummingbot\",\n    \"githubUrl\": \"https://github.com/hummingbot/hummingbot\",\n    \"description\": \"Open source software that helps you create and deploy high-frequency crypto trading bots\",\n    \"owner\": \"hummingbot\",\n    \"repo\": \"hummingbot\"\n  },\n  \"Bits UI\": {\n    \"title\": \"Bits UI\",\n    \"repoName\": \"huntabyte/bits-ui\",\n    \"githubUrl\": \"https://github.com/huntabyte/bits-ui\",\n    \"description\": \"The headless components for Svelte.\",\n    \"owner\": \"huntabyte\",\n    \"repo\": \"bits-ui\"\n  },\n  \"React Query Kit\": {\n    \"title\": \"React Query Kit\",\n    \"repoName\": \"huolalatech/react-query-kit\",\n    \"githubUrl\": \"https://github.com/huolalatech/react-query-kit\",\n    \"description\": \"🕊️ A toolkit for ReactQuery that make ReactQuery hooks reusable and typesafe\",\n    \"owner\": \"huolalatech\",\n    \"repo\": \"react-query-kit\"\n  },\n  \"Stamina\": {\n    \"title\": \"Stamina\",\n    \"repoName\": \"hynek/stamina\",\n    \"githubUrl\": \"https://github.com/hynek/stamina\",\n    \"description\": \"Production-grade retries for Python\",\n    \"owner\": \"hynek\",\n    \"repo\": \"stamina\"\n  },\n  \"Structlog\": {\n    \"title\": \"Structlog\",\n    \"repoName\": \"hynek/structlog\",\n    \"githubUrl\": \"https://github.com/hynek/structlog\",\n    \"description\": \"Simple, powerful, and fast logging for Python.\",\n    \"owner\": \"hynek\",\n    \"repo\": \"structlog\"\n  },\n  \"Hikari Arc\": {\n    \"title\": \"Hikari Arc\",\n    \"repoName\": \"hypergonial/hikari-arc\",\n    \"githubUrl\": \"https://github.com/hypergonial/hikari-arc\",\n    \"description\": \"A command handler for hikari with a focus on type-safety and correctness.\",\n    \"owner\": \"hypergonial\",\n    \"repo\": \"hikari-arc\"\n  },\n  \"Hyper\": {\n    \"title\": \"Hyper\",\n    \"repoName\": \"hyperium/hyper\",\n    \"githubUrl\": \"https://github.com/hyperium/hyper\",\n    \"description\": \"An HTTP library for Rust\",\n    \"owner\": \"hyperium\",\n    \"repo\": \"hyper\"\n  },\n  \"Identus Platform\": {\n    \"title\": \"Identus Platform\",\n    \"repoName\": \"hyperledger-identus/docs\",\n    \"githubUrl\": \"https://github.com/hyperledger-identus/docs\",\n    \"description\": \"Documentation website for the Identus Platform\",\n    \"owner\": \"hyperledger-identus\",\n    \"repo\": \"docs\"\n  },\n  \"InterchainJS\": {\n    \"title\": \"InterchainJS\",\n    \"repoName\": \"hyperweb-io/interchainjs\",\n    \"githubUrl\": \"https://github.com/hyperweb-io/interchainjs\",\n    \"description\": \"A single, universal signing interface for any network (CosmJS 2.0)\",\n    \"owner\": \"hyperweb-io\",\n    \"repo\": \"interchainjs\"\n  },\n  \"I18next\": {\n    \"title\": \"I18next\",\n    \"repoName\": \"i18next/i18next\",\n    \"githubUrl\": \"https://github.com/i18next/i18next\",\n    \"description\": \" i18next: learn once - translate everywhere\",\n    \"owner\": \"i18next\",\n    \"repo\": \"i18next\"\n  },\n  \"Day.js\": {\n    \"title\": \"Day.js\",\n    \"repoName\": \"iamkun/dayjs\",\n    \"githubUrl\": \"https://github.com/iamkun/dayjs\",\n    \"description\": \"⏰ Day.js 2kB immutable date-time library alternative to Moment.js with the same modern API\",\n    \"owner\": \"iamkun\",\n    \"repo\": \"dayjs\"\n  },\n  \"React Paystack\": {\n    \"title\": \"React Paystack\",\n    \"repoName\": \"iamraphson/react-paystack\",\n    \"githubUrl\": \"https://github.com/iamraphson/react-paystack\",\n    \"description\": \"ReactJS library for implementing paystack payment gateway\",\n    \"owner\": \"iamraphson\",\n    \"repo\": \"react-paystack\"\n  },\n  \"Ib Async\": {\n    \"title\": \"Ib Async\",\n    \"repoName\": \"ib-api-reloaded/ib_async\",\n    \"githubUrl\": \"https://github.com/ib-api-reloaded/ib_async\",\n    \"description\": \"Python sync/async framework for Interactive Brokers API (replaces ib_insync)\",\n    \"owner\": \"ib-api-reloaded\",\n    \"repo\": \"ib_async\"\n  },\n  \"Motion Primitives\": {\n    \"title\": \"Motion Primitives\",\n    \"repoName\": \"ibelick/motion-primitives\",\n    \"githubUrl\": \"https://github.com/ibelick/motion-primitives\",\n    \"description\": \"UI kit to make beautiful, animated interfaces, faster. Customizable. Open Source.\",\n    \"owner\": \"ibelick\",\n    \"repo\": \"motion-primitives\"\n  },\n  \"Prompt Kit\": {\n    \"title\": \"Prompt Kit\",\n    \"repoName\": \"ibelick/prompt-kit\",\n    \"githubUrl\": \"https://github.com/ibelick/prompt-kit\",\n    \"description\": \"Core building blocks for AI apps.  High-quality, accessible, and customizable components for AI interfaces.\",\n    \"owner\": \"ibelick\",\n    \"repo\": \"prompt-kit\"\n  },\n  \"Ibis\": {\n    \"title\": \"Ibis\",\n    \"repoName\": \"ibis-project/ibis\",\n    \"githubUrl\": \"https://github.com/ibis-project/ibis\",\n    \"description\": \"the portable Python dataframe library\",\n    \"owner\": \"ibis-project\",\n    \"repo\": \"ibis\"\n  },\n  \"QRadar API Samples\": {\n    \"title\": \"QRadar API Samples\",\n    \"repoName\": \"ibm/api-samples\",\n    \"githubUrl\": \"https://github.com/ibm/api-samples\",\n    \"description\": \"Samples code that uses QRadar API's\",\n    \"owner\": \"ibm\",\n    \"repo\": \"api-samples\"\n  },\n  \"PySigma Backend QRadar AQL\": {\n    \"title\": \"PySigma Backend QRadar AQL\",\n    \"repoName\": \"ibm/pysigma-backend-qradar-aql\",\n    \"githubUrl\": \"https://github.com/ibm/pysigma-backend-qradar-aql\",\n    \"description\": \"QRadar AQL backend for converting Sigma rules to QRadar AQL queries\",\n    \"owner\": \"ibm\",\n    \"repo\": \"pysigma-backend-qradar-aql\"\n  },\n  \"QPylib\": {\n    \"title\": \"QPylib\",\n    \"repoName\": \"ibm/qpylib\",\n    \"githubUrl\": \"https://github.com/ibm/qpylib\",\n    \"description\": \"Python utility functions for QRadar\",\n    \"owner\": \"ibm\",\n    \"repo\": \"qpylib\"\n  },\n  \"QRadar\": {\n    \"title\": \"QRadar\",\n    \"repoName\": \"ibm/qradar-sample-apps\",\n    \"githubUrl\": \"https://github.com/ibm/qradar-sample-apps\",\n    \"description\": \"QRadar Sample Apps for use with V2 of the QRadar App Framework\",\n    \"owner\": \"ibm\",\n    \"repo\": \"qradar-sample-apps\"\n  },\n  \"Icestark\": {\n    \"title\": \"Icestark\",\n    \"repoName\": \"ice-lab/icestark\",\n    \"githubUrl\": \"https://github.com/ice-lab/icestark\",\n    \"description\": \":tiger: Micro Frontends solution for large application（面向大型应用的微前端解决方案），站点国内镜像：https://icestark.gitee.io\",\n    \"owner\": \"ice-lab\",\n    \"repo\": \"icestark\"\n  },\n  \"Iced\": {\n    \"title\": \"Iced\",\n    \"repoName\": \"iced-rs/iced\",\n    \"githubUrl\": \"https://github.com/iced-rs/iced\",\n    \"description\": \"A cross-platform GUI library for Rust, inspired by Elm\",\n    \"owner\": \"iced-rs\",\n    \"repo\": \"iced\"\n  },\n  \"Iconoir\": {\n    \"title\": \"Iconoir\",\n    \"repoName\": \"iconoir-icons/iconoir\",\n    \"githubUrl\": \"https://github.com/iconoir-icons/iconoir\",\n    \"description\": \"An open source icons library with 1600+ icons, supporting React, React Native, Flutter, Vue, Figma, and Framer.\",\n    \"owner\": \"iconoir-icons\",\n    \"repo\": \"iconoir\"\n  },\n  \"IDAPython\": {\n    \"title\": \"IDAPython\",\n    \"repoName\": \"idapython/src\",\n    \"githubUrl\": \"https://github.com/idapython/src\",\n    \"description\": \"IDAPython project for Hex-Ray's IDA Pro\",\n    \"owner\": \"idapython\",\n    \"repo\": \"src\"\n  },\n  \"Circom\": {\n    \"title\": \"Circom\",\n    \"repoName\": \"iden3/circom\",\n    \"githubUrl\": \"https://github.com/iden3/circom\",\n    \"description\": \"zkSnark circuit compiler\",\n    \"owner\": \"iden3\",\n    \"repo\": \"circom\"\n  },\n  \"Yet Another React Lightbox\": {\n    \"title\": \"Yet Another React Lightbox\",\n    \"repoName\": \"igordanchenko/yet-another-react-lightbox\",\n    \"githubUrl\": \"https://github.com/igordanchenko/yet-another-react-lightbox\",\n    \"description\": \"Modern React lightbox component\",\n    \"owner\": \"igordanchenko\",\n    \"repo\": \"yet-another-react-lightbox\"\n  },\n  \"Android Developer Reference\": {\n    \"title\": \"Android Developer Reference\",\n    \"repoName\": \"imangazalievm/android-developer-reference\",\n    \"githubUrl\": \"https://github.com/imangazalievm/android-developer-reference\",\n    \"description\": \"🔥 A curated list of awesome Android articles sorted by topic.\",\n    \"owner\": \"imangazalievm\",\n    \"repo\": \"android-developer-reference\"\n  },\n  \"Index Supply\": {\n    \"title\": \"Index Supply\",\n    \"repoName\": \"indexsupply/indexsupply.com\",\n    \"githubUrl\": \"https://github.com/indexsupply/indexsupply.com\",\n    \"description\": \"website\",\n    \"owner\": \"indexsupply\",\n    \"repo\": \"indexsupply.com\"\n  },\n  \"Anomaly Detection Getting Started\": {\n    \"title\": \"Anomaly Detection Getting Started\",\n    \"repoName\": \"industrial-edge/anomaly-detection-getting-started\",\n    \"githubUrl\": \"https://github.com/industrial-edge/anomaly-detection-getting-started\",\n    \"description\": \"Getting-Started tutorial to train a neural network with the Anomaly Detection\",\n    \"owner\": \"industrial-edge\",\n    \"repo\": \"anomaly-detection-getting-started\"\n  },\n  \"Bring Own Apps to Shopfloor\": {\n    \"title\": \"Bring Own Apps to Shopfloor\",\n    \"repoName\": \"industrial-edge/bring-own-apps-to-shopfloor\",\n    \"githubUrl\": \"https://github.com/industrial-edge/bring-own-apps-to-shopfloor\",\n    \"description\": \"Bring own applications to shopfloor - PCB quality re-check and production optimization based on AI techonology\",\n    \"owner\": \"industrial-edge\",\n    \"repo\": \"bring-own-apps-to-shopfloor\"\n  },\n  \"Industrial Edge Developer Guide\": {\n    \"title\": \"Industrial Edge Developer Guide\",\n    \"repoName\": \"industrial-edge/developer-guide-hands-on-app\",\n    \"githubUrl\": \"https://github.com/industrial-edge/developer-guide-hands-on-app\",\n    \"description\": \"Handson application for Industrial Edge Developer Guide\",\n    \"owner\": \"industrial-edge\",\n    \"repo\": \"developer-guide-hands-on-app\"\n  },\n  \"IIH Essentials\": {\n    \"title\": \"IIH Essentials\",\n    \"repoName\": \"industrial-edge/iih-essentials-getting-started\",\n    \"githubUrl\": \"https://github.com/industrial-edge/iih-essentials-getting-started\",\n    \"description\": \"Guide how to use the app Data Service to model data structures, collect machine data from the Databus and store it for a certain time period.\",\n    \"owner\": \"industrial-edge\",\n    \"repo\": \"iih-essentials-getting-started\"\n  },\n  \"Machine Insight\": {\n    \"title\": \"Machine Insight\",\n    \"repoName\": \"industrial-edge/machine-insight-getting-started\",\n    \"githubUrl\": \"https://github.com/industrial-edge/machine-insight-getting-started\",\n    \"description\": \"Guide how to use the app Machine Insight for an easy remote diagnosis of machines.\",\n    \"owner\": \"industrial-edge\",\n    \"repo\": \"machine-insight-getting-started\"\n  },\n  \"Notifier OpenAPI\": {\n    \"title\": \"Notifier OpenAPI\",\n    \"repoName\": \"industrial-edge/notifier-api\",\n    \"githubUrl\": \"https://github.com/industrial-edge/notifier-api\",\n    \"description\": \"Guide to implement the Notifier OpenAPI\",\n    \"owner\": \"industrial-edge\",\n    \"repo\": \"notifier-api\"\n  },\n  \"Performance Insight OEE Dashboard\": {\n    \"title\": \"Performance Insight OEE Dashboard\",\n    \"repoName\": \"industrial-edge/performance-insight-oee-dashboard\",\n    \"githubUrl\": \"https://github.com/industrial-edge/performance-insight-oee-dashboard\",\n    \"description\": \"Guide how to use the Overall Equipment Effectiveness (OEE) feature of the app Performance Insight to visualize the productivity of a plant.\",\n    \"owner\": \"industrial-edge\",\n    \"repo\": \"performance-insight-oee-dashboard\"\n  },\n  \"Industrial Edge Upload App to Management\": {\n    \"title\": \"Industrial Edge Upload App to Management\",\n    \"repoName\": \"industrial-edge/upload-app-to-industrial-edge-management\",\n    \"githubUrl\": \"https://github.com/industrial-edge/upload-app-to-industrial-edge-management\",\n    \"description\": \"This application examples shows how to upload an application to the Industrial Edge Management using the Industrial Edge Publisher\",\n    \"owner\": \"industrial-edge\",\n    \"repo\": \"upload-app-to-industrial-edge-management\"\n  },\n  \"Inertia.js\": {\n    \"title\": \"Inertia.js\",\n    \"repoName\": \"inertiajs/inertia\",\n    \"githubUrl\": \"https://github.com/inertiajs/inertia\",\n    \"description\": \"Inertia.js lets you quickly build modern single-page React, Vue and Svelte apps using classic server-side routing and controllers.\",\n    \"owner\": \"inertiajs\",\n    \"repo\": \"inertia\"\n  },\n  \"Inertia.js Rails\": {\n    \"title\": \"Inertia.js Rails\",\n    \"repoName\": \"inertiajs/inertia-rails\",\n    \"githubUrl\": \"https://github.com/inertiajs/inertia-rails\",\n    \"description\": \"The Rails adapter for Inertia.js.\",\n    \"owner\": \"inertiajs\",\n    \"repo\": \"inertia-rails\"\n  },\n  \"RAGFlow\": {\n    \"title\": \"RAGFlow\",\n    \"repoName\": \"infiniflow/ragflow\",\n    \"githubUrl\": \"https://github.com/infiniflow/ragflow\",\n    \"description\": \"RAGFlow is an open-source RAG (Retrieval-Augmented Generation) engine based on deep document understanding.\",\n    \"owner\": \"infiniflow\",\n    \"repo\": \"ragflow\"\n  },\n  \"InfluxDB\": {\n    \"title\": \"InfluxDB\",\n    \"repoName\": \"influxdata/influxdb\",\n    \"githubUrl\": \"https://github.com/influxdata/influxdb\",\n    \"description\": \"Scalable datastore for metrics, events, and real-time analytics\",\n    \"owner\": \"influxdata\",\n    \"repo\": \"influxdb\"\n  },\n  \"Injective TypeScript\": {\n    \"title\": \"Injective TypeScript\",\n    \"repoName\": \"injectivelabs/injective-ts\",\n    \"githubUrl\": \"https://github.com/injectivelabs/injective-ts\",\n    \"description\": \"Collection of TypeScript packages that consume and interact with the Injective Chain\",\n    \"owner\": \"injectivelabs\",\n    \"repo\": \"injective-ts\"\n  },\n  \"Inngest\": {\n    \"title\": \"Inngest\",\n    \"repoName\": \"inngest/website\",\n    \"githubUrl\": \"https://github.com/inngest/website\",\n    \"description\": \"Website and Documentation for Inngest\",\n    \"owner\": \"inngest\",\n    \"repo\": \"website\"\n  },\n  \"Neuron AI\": {\n    \"title\": \"Neuron AI\",\n    \"repoName\": \"inspector-apm/neuron-ai\",\n    \"githubUrl\": \"https://github.com/inspector-apm/neuron-ai\",\n    \"description\": \"Open source framework to create full featured AI Agents in PHP - powered by Inspector.dev\",\n    \"owner\": \"inspector-apm\",\n    \"repo\": \"neuron-ai\"\n  },\n  \"Instaloader\": {\n    \"title\": \"Instaloader\",\n    \"repoName\": \"instaloader/instaloader\",\n    \"githubUrl\": \"https://github.com/instaloader/instaloader\",\n    \"description\": \"Download pictures (or videos) along with their captions and other metadata from Instagram.\",\n    \"owner\": \"instaloader\",\n    \"repo\": \"instaloader\"\n  },\n  \"Instant\": {\n    \"title\": \"Instant\",\n    \"repoName\": \"instantdb/instant\",\n    \"githubUrl\": \"https://github.com/instantdb/instant\",\n    \"description\": \"Instant is a modern Firebase. We make you productive by giving your frontend a real-time database.\",\n    \"owner\": \"instantdb\",\n    \"repo\": \"instant\"\n  },\n  \"InstructLab Core\": {\n    \"title\": \"InstructLab Core\",\n    \"repoName\": \"instructlab/instructlab\",\n    \"githubUrl\": \"https://github.com/instructlab/instructlab\",\n    \"description\": \"InstructLab Core package.  Use this to chat with a model and execute the InstructLab workflow to train a model using custom taxonomy data.\",\n    \"owner\": \"instructlab\",\n    \"repo\": \"instructlab\"\n  },\n  \"Instructor\": {\n    \"title\": \"Instructor\",\n    \"repoName\": \"instructor-ai/instructor\",\n    \"githubUrl\": \"https://github.com/instructor-ai/instructor\",\n    \"description\": \"structured outputs for llms \",\n    \"owner\": \"instructor-ai\",\n    \"repo\": \"instructor\"\n  },\n  \"Instructor JS\": {\n    \"title\": \"Instructor JS\",\n    \"repoName\": \"instructor-ai/instructor-js\",\n    \"githubUrl\": \"https://github.com/instructor-ai/instructor-js\",\n    \"description\": \"structured extraction for llms\",\n    \"owner\": \"instructor-ai\",\n    \"repo\": \"instructor-js\"\n  },\n  \"Make TypeScript SDK\": {\n    \"title\": \"Make TypeScript SDK\",\n    \"repoName\": \"integromat/make-typescript-sdk\",\n    \"githubUrl\": \"https://github.com/integromat/make-typescript-sdk\",\n    \"description\": \"Make TypeScript SDK\",\n    \"owner\": \"integromat\",\n    \"repo\": \"make-typescript-sdk\"\n  },\n  \"SRCL\": {\n    \"title\": \"SRCL\",\n    \"repoName\": \"internet-development/www-sacred\",\n    \"githubUrl\": \"https://github.com/internet-development/www-sacred\",\n    \"description\": \"SRCL is an open-source React component and style repository that helps you build web applications, desktop applications, and static websites with terminal aesthetics.\",\n    \"owner\": \"internet-development\",\n    \"repo\": \"www-sacred\"\n  },\n  \"SlackAPI\": {\n    \"title\": \"SlackAPI\",\n    \"repoName\": \"inumedia/slackapi\",\n    \"githubUrl\": \"https://github.com/inumedia/slackapi\",\n    \"description\": \".NET Implementation of the Slack team communication platform API.\",\n    \"owner\": \"inumedia\",\n    \"repo\": \"slackapi\"\n  },\n  \"InvenTree\": {\n    \"title\": \"InvenTree\",\n    \"repoName\": \"inventree/inventree\",\n    \"githubUrl\": \"https://github.com/inventree/inventree\",\n    \"description\": \"Open Source Inventory Management System\",\n    \"owner\": \"inventree\",\n    \"repo\": \"inventree\"\n  },\n  \"Melos\": {\n    \"title\": \"Melos\",\n    \"repoName\": \"invertase/melos\",\n    \"githubUrl\": \"https://github.com/invertase/melos\",\n    \"description\": \"🌋  A tool for managing Dart projects with multiple packages. With IntelliJ and Vscode IDE support. Supports automated versioning, changelogs & publishing via Conventional Commits.\",\n    \"owner\": \"invertase\",\n    \"repo\": \"melos\"\n  },\n  \"Notifee\": {\n    \"title\": \"Notifee\",\n    \"repoName\": \"invertase/notifee\",\n    \"githubUrl\": \"https://github.com/invertase/notifee\",\n    \"description\": \"⚛️ A feature rich notifications library for React Native.\",\n    \"owner\": \"invertase\",\n    \"repo\": \"notifee\"\n  },\n  \"React Native Firebase\": {\n    \"title\": \"React Native Firebase\",\n    \"repoName\": \"invertase/react-native-firebase\",\n    \"githubUrl\": \"https://github.com/invertase/react-native-firebase\",\n    \"description\": \"🔥 A well-tested feature-rich modular Firebase implementation for React Native. Supports both iOS & Android platforms for all Firebase services.\",\n    \"owner\": \"invertase\",\n    \"repo\": \"react-native-firebase\"\n  },\n  \"Stripe Firebase Extensions\": {\n    \"title\": \"Stripe Firebase Extensions\",\n    \"repoName\": \"invertase/stripe-firebase-extensions\",\n    \"githubUrl\": \"https://github.com/invertase/stripe-firebase-extensions\",\n    \"description\": \"Repository of Firebase Extensions built by Stripe.\",\n    \"owner\": \"invertase\",\n    \"repo\": \"stripe-firebase-extensions\"\n  },\n  \"ioBroker Controller\": {\n    \"title\": \"ioBroker Controller\",\n    \"repoName\": \"iobroker/iobroker.js-controller\",\n    \"githubUrl\": \"https://github.com/iobroker/iobroker.js-controller\",\n    \"description\": \"ioBroker controller\",\n    \"owner\": \"iobroker\",\n    \"repo\": \"iobroker.js-controller\"\n  },\n  \"Capacitor\": {\n    \"title\": \"Capacitor\",\n    \"repoName\": \"ionic-team/capacitor-docs\",\n    \"githubUrl\": \"https://github.com/ionic-team/capacitor-docs\",\n    \"description\": \"\",\n    \"owner\": \"ionic-team\",\n    \"repo\": \"capacitor-docs\"\n  },\n  \"Ionic Framework\": {\n    \"title\": \"Ionic Framework\",\n    \"repoName\": \"ionic-team/ionic-framework\",\n    \"githubUrl\": \"https://github.com/ionic-team/ionic-framework\",\n    \"description\": \"A powerful cross-platform UI toolkit for building native-quality iOS, Android, and Progressive Web Apps with HTML, CSS, and JavaScript.\",\n    \"owner\": \"ionic-team\",\n    \"repo\": \"ionic-framework\"\n  },\n  \"Stencil\": {\n    \"title\": \"Stencil\",\n    \"repoName\": \"ionic-team/stencil-site\",\n    \"githubUrl\": \"https://github.com/ionic-team/stencil-site\",\n    \"description\": \"Stencil site and documentation source.\",\n    \"owner\": \"ionic-team\",\n    \"repo\": \"stencil-site\"\n  },\n  \"Helia\": {\n    \"title\": \"Helia\",\n    \"repoName\": \"ipfs/helia\",\n    \"githubUrl\": \"https://github.com/ipfs/helia\",\n    \"description\": \"An implementation of IPFS in TypeScript\",\n    \"owner\": \"ipfs\",\n    \"repo\": \"helia\"\n  },\n  \"PowerShell Universal\": {\n    \"title\": \"PowerShell Universal\",\n    \"repoName\": \"ironmansoftware/universal-docs\",\n    \"githubUrl\": \"https://github.com/ironmansoftware/universal-docs\",\n    \"description\": \"Documentation for PowerShell Universal\",\n    \"owner\": \"ironmansoftware\",\n    \"repo\": \"universal-docs\"\n  },\n  \"Intent UI\": {\n    \"title\": \"Intent UI\",\n    \"repoName\": \"irsyadadl/intentui\",\n    \"githubUrl\": \"https://github.com/irsyadadl/intentui\",\n    \"description\": \"Intent UI is a chill set of React components, built on top of React Aria Components and Tailwind CSS. Easy to customize and just copy & paste into your React projects.\",\n    \"owner\": \"irsyadadl\",\n    \"repo\": \"intentui\"\n  },\n  \"Vue 3 Carousel\": {\n    \"title\": \"Vue 3 Carousel\",\n    \"repoName\": \"ismail9k/vue3-carousel\",\n    \"githubUrl\": \"https://github.com/ismail9k/vue3-carousel\",\n    \"description\": \"A highly customizable, lightweight Vue 3 carousel component for your next awesome project.\",\n    \"owner\": \"ismail9k\",\n    \"repo\": \"vue3-carousel\"\n  },\n  \"eBPF\": {\n    \"title\": \"eBPF\",\n    \"repoName\": \"isovalent/ebpf-docs\",\n    \"githubUrl\": \"https://github.com/isovalent/ebpf-docs\",\n    \"description\": \"An effort to comprehensively document eBPF\",\n    \"owner\": \"isovalent\",\n    \"repo\": \"ebpf-docs\"\n  },\n  \"TtkBootstrap\": {\n    \"title\": \"TtkBootstrap\",\n    \"repoName\": \"israel-dryer/ttkbootstrap\",\n    \"githubUrl\": \"https://github.com/israel-dryer/ttkbootstrap\",\n    \"description\": \"A supercharged theme extension for tkinter that enables on-demand modern flat style themes inspired by Bootstrap.\",\n    \"owner\": \"israel-dryer\",\n    \"repo\": \"ttkbootstrap\"\n  },\n  \"Istio\": {\n    \"title\": \"Istio\",\n    \"repoName\": \"istio/istio.io\",\n    \"githubUrl\": \"https://github.com/istio/istio.io\",\n    \"description\": \"Source for the istio.io site\",\n    \"owner\": \"istio\",\n    \"repo\": \"istio.io\"\n  },\n  \"DVC\": {\n    \"title\": \"DVC\",\n    \"repoName\": \"iterative/dvc.org\",\n    \"githubUrl\": \"https://github.com/iterative/dvc.org\",\n    \"description\": \"📖 DVC website and documentation\",\n    \"owner\": \"iterative\",\n    \"repo\": \"dvc.org\"\n  },\n  \"Domo\": {\n    \"title\": \"Domo\",\n    \"repoName\": \"ivanrublev/domo\",\n    \"githubUrl\": \"https://github.com/ivanrublev/domo\",\n    \"description\": \"A library to validate values of nested structs with their type spec t() and associated precondition functions\",\n    \"owner\": \"ivanrublev\",\n    \"repo\": \"domo\"\n  },\n  \"Knowledge Graph of Thoughts\": {\n    \"title\": \"Knowledge Graph of Thoughts\",\n    \"repoName\": \"j-94/knowledge-graph-of-thoughts\",\n    \"githubUrl\": \"https://github.com/j-94/knowledge-graph-of-thoughts\",\n    \"description\": \"Official Implementation of \\\"Affordable AI Assistants with Knowledge Graph of Thoughts\\\"\",\n    \"owner\": \"j-94\",\n    \"repo\": \"knowledge-graph-of-thoughts\"\n  },\n  \"Pgx\": {\n    \"title\": \"Pgx\",\n    \"repoName\": \"jackc/pgx\",\n    \"githubUrl\": \"https://github.com/jackc/pgx\",\n    \"description\": \"PostgreSQL driver and toolkit for Go\",\n    \"owner\": \"jackc\",\n    \"repo\": \"pgx\"\n  },\n  \"IDB\": {\n    \"title\": \"IDB\",\n    \"repoName\": \"jakearchibald/idb\",\n    \"githubUrl\": \"https://github.com/jakearchibald/idb\",\n    \"description\": \"IndexedDB, but with promises\",\n    \"owner\": \"jakearchibald\",\n    \"repo\": \"idb\"\n  },\n  \"Binrw\": {\n    \"title\": \"Binrw\",\n    \"repoName\": \"jam1garner/binrw\",\n    \"githubUrl\": \"https://github.com/jam1garner/binrw\",\n    \"description\": \"A Rust crate for helping parse and rebuild binary data using ✨macro magic✨.\",\n    \"owner\": \"jam1garner\",\n    \"repo\": \"binrw\"\n  },\n  \"Coravel\": {\n    \"title\": \"Coravel\",\n    \"repoName\": \"jamesmh/coravel\",\n    \"githubUrl\": \"https://github.com/jamesmh/coravel\",\n    \"description\": \"Near-zero config .NET library that makes advanced application features like Task Scheduling, Caching, Queuing, Event Broadcasting, and more a breeze!\",\n    \"owner\": \"jamesmh\",\n    \"repo\": \"coravel\"\n  },\n  \"Json.NET\": {\n    \"title\": \"Json.NET\",\n    \"repoName\": \"jamesnk/newtonsoft.json\",\n    \"githubUrl\": \"https://github.com/jamesnk/newtonsoft.json\",\n    \"description\": \"Json.NET is a popular high-performance JSON framework for .NET\",\n    \"owner\": \"jamesnk\",\n    \"repo\": \"newtonsoft.json\"\n  },\n  \"Tailwind CSS Animate\": {\n    \"title\": \"Tailwind CSS Animate\",\n    \"repoName\": \"jamiebuilds/tailwindcss-animate\",\n    \"githubUrl\": \"https://github.com/jamiebuilds/tailwindcss-animate\",\n    \"description\": \"A Tailwind CSS plugin for creating beautiful animations\",\n    \"owner\": \"jamiebuilds\",\n    \"repo\": \"tailwindcss-animate\"\n  },\n  \"TypedTSQL\": {\n    \"title\": \"TypedTSQL\",\n    \"repoName\": \"jannesen/typedtsql\",\n    \"githubUrl\": \"https://github.com/jannesen/typedtsql\",\n    \"description\": \"Typed Transact-SQL\",\n    \"owner\": \"jannesen\",\n    \"repo\": \"typedtsql\"\n  },\n  \"Japa\": {\n    \"title\": \"Japa\",\n    \"repoName\": \"japa/japa.dev\",\n    \"githubUrl\": \"https://github.com/japa/japa.dev\",\n    \"description\": \"The documentation website for Japa\",\n    \"owner\": \"japa\",\n    \"repo\": \"japa.dev\"\n  },\n  \"Formik\": {\n    \"title\": \"Formik\",\n    \"repoName\": \"jaredpalmer/formik\",\n    \"githubUrl\": \"https://github.com/jaredpalmer/formik\",\n    \"description\": \"Build forms in React, without the tears 😭 \",\n    \"owner\": \"jaredpalmer\",\n    \"repo\": \"formik\"\n  },\n  \"Jasmine\": {\n    \"title\": \"Jasmine\",\n    \"repoName\": \"jasmine/jasmine.github.io\",\n    \"githubUrl\": \"https://github.com/jasmine/jasmine.github.io\",\n    \"description\": \"Source for Jasmine's documentation\",\n    \"owner\": \"jasmine\",\n    \"repo\": \"jasmine.github.io\"\n  },\n  \"Javalin\": {\n    \"title\": \"Javalin\",\n    \"repoName\": \"javalin/website\",\n    \"githubUrl\": \"https://github.com/javalin/website\",\n    \"description\": \"Javalin website source code\",\n    \"owner\": \"javalin\",\n    \"repo\": \"website\"\n  },\n  \"JAX\": {\n    \"title\": \"JAX\",\n    \"repoName\": \"jax-ml/jax\",\n    \"githubUrl\": \"https://github.com/jax-ml/jax\",\n    \"description\": \"Composable transformations of Python+NumPy programs: differentiate, vectorize, JIT to GPU/TPU, and more\",\n    \"owner\": \"jax-ml\",\n    \"repo\": \"jax\"\n  },\n  \"Django REST Knox\": {\n    \"title\": \"Django REST Knox\",\n    \"repoName\": \"jazzband/django-rest-knox\",\n    \"githubUrl\": \"https://github.com/jazzband/django-rest-knox\",\n    \"description\": \"Authentication Module for django rest auth\",\n    \"owner\": \"jazzband\",\n    \"repo\": \"django-rest-knox\"\n  },\n  \"MediatR\": {\n    \"title\": \"MediatR\",\n    \"repoName\": \"jbogard/mediatr\",\n    \"githubUrl\": \"https://github.com/jbogard/mediatr\",\n    \"description\": \"Simple, unambitious mediator implementation in .NET\",\n    \"owner\": \"jbogard\",\n    \"repo\": \"mediatr\"\n  },\n  \"Respawn\": {\n    \"title\": \"Respawn\",\n    \"repoName\": \"jbogard/respawn\",\n    \"githubUrl\": \"https://github.com/jbogard/respawn\",\n    \"description\": \"Intelligent database cleaner for integration tests\",\n    \"owner\": \"jbogard\",\n    \"repo\": \"respawn\"\n  },\n  \"Msgspec\": {\n    \"title\": \"Msgspec\",\n    \"repoName\": \"jcrist/msgspec\",\n    \"githubUrl\": \"https://github.com/jcrist/msgspec\",\n    \"description\": \"A fast serialization and validation library, with builtin support for JSON, MessagePack, YAML, and TOML\",\n    \"owner\": \"jcrist\",\n    \"repo\": \"msgspec\"\n  },\n  \"Tenacity\": {\n    \"title\": \"Tenacity\",\n    \"repoName\": \"jd/tenacity\",\n    \"githubUrl\": \"https://github.com/jd/tenacity\",\n    \"description\": \"Retrying library for Python\",\n    \"owner\": \"jd\",\n    \"repo\": \"tenacity\"\n  },\n  \"YouTube Transcript API\": {\n    \"title\": \"YouTube Transcript API\",\n    \"repoName\": \"jdepoix/youtube-transcript-api\",\n    \"githubUrl\": \"https://github.com/jdepoix/youtube-transcript-api\",\n    \"description\": \"This is a python API which allows you to get the transcript/subtitles for a given YouTube video. It also works for automatically generated subtitles and it does not require an API key nor a headless browser, like other selenium based solutions do!\",\n    \"owner\": \"jdepoix\",\n    \"repo\": \"youtube-transcript-api\"\n  },\n  \"Mise\": {\n    \"title\": \"Mise\",\n    \"repoName\": \"jdx/mise\",\n    \"githubUrl\": \"https://github.com/jdx/mise\",\n    \"description\": \"dev tools, env vars, task runner\",\n    \"owner\": \"jdx\",\n    \"repo\": \"mise\"\n  },\n  \"React Select\": {\n    \"title\": \"React Select\",\n    \"repoName\": \"jedwatson/react-select\",\n    \"githubUrl\": \"https://github.com/jedwatson/react-select\",\n    \"description\": \"The Select Component for React.js\",\n    \"owner\": \"jedwatson\",\n    \"repo\": \"react-select\"\n  },\n  \"Jellyfin\": {\n    \"title\": \"Jellyfin\",\n    \"repoName\": \"jellyfin/jellyfin.org\",\n    \"githubUrl\": \"https://github.com/jellyfin/jellyfin.org\",\n    \"description\": \"Jellyfin Project website, blog, and user documentation\",\n    \"owner\": \"jellyfin\",\n    \"repo\": \"jellyfin.org\"\n  },\n  \"Jenkins\": {\n    \"title\": \"Jenkins\",\n    \"repoName\": \"jenkinsci/jenkins\",\n    \"githubUrl\": \"https://github.com/jenkinsci/jenkins\",\n    \"description\": \"Jenkins automation server\",\n    \"owner\": \"jenkinsci\",\n    \"repo\": \"jenkins\"\n  },\n  \"Rodauth\": {\n    \"title\": \"Rodauth\",\n    \"repoName\": \"jeremyevans/rodauth\",\n    \"githubUrl\": \"https://github.com/jeremyevans/rodauth\",\n    \"description\": \"Ruby's Most Advanced Authentication Framework\",\n    \"owner\": \"jeremyevans\",\n    \"repo\": \"rodauth\"\n  },\n  \"Ruby Trello\": {\n    \"title\": \"Ruby Trello\",\n    \"repoName\": \"jeremytregunna/ruby-trello\",\n    \"githubUrl\": \"https://github.com/jeremytregunna/ruby-trello\",\n    \"description\": \"Implementation of the Trello API for Ruby\",\n    \"owner\": \"jeremytregunna\",\n    \"repo\": \"ruby-trello\"\n  },\n  \"Jest\": {\n    \"title\": \"Jest\",\n    \"repoName\": \"jestjs/jest\",\n    \"githubUrl\": \"https://github.com/jestjs/jest\",\n    \"description\": \"Delightful JavaScript Testing.\",\n    \"owner\": \"jestjs\",\n    \"repo\": \"jest\"\n  },\n  \"Compose Multiplatform\": {\n    \"title\": \"Compose Multiplatform\",\n    \"repoName\": \"jetbrains/compose-multiplatform\",\n    \"githubUrl\": \"https://github.com/jetbrains/compose-multiplatform\",\n    \"description\": \"Compose Multiplatform, a modern UI framework for Kotlin that makes building performant and beautiful user interfaces easy and enjoyable.\",\n    \"owner\": \"jetbrains\",\n    \"repo\": \"compose-multiplatform\"\n  },\n  \"Exposed\": {\n    \"title\": \"Exposed\",\n    \"repoName\": \"jetbrains/exposed\",\n    \"githubUrl\": \"https://github.com/jetbrains/exposed\",\n    \"description\": \"Kotlin SQL Framework\",\n    \"owner\": \"jetbrains\",\n    \"repo\": \"exposed\"\n  },\n  \"ReSharper External Annotations\": {\n    \"title\": \"ReSharper External Annotations\",\n    \"repoName\": \"jetbrains/externalannotations\",\n    \"githubUrl\": \"https://github.com/jetbrains/externalannotations\",\n    \"description\": \"JetBrains ReSharper External Annotations\",\n    \"owner\": \"jetbrains\",\n    \"repo\": \"externalannotations\"\n  },\n  \"IntelliJ SDK\": {\n    \"title\": \"IntelliJ SDK\",\n    \"repoName\": \"jetbrains/intellij-sdk-docs\",\n    \"githubUrl\": \"https://github.com/jetbrains/intellij-sdk-docs\",\n    \"description\": \"IntelliJ SDK Platform Documentation\",\n    \"owner\": \"jetbrains\",\n    \"repo\": \"intellij-sdk-docs\"\n  },\n  \"Kotlin\": {\n    \"title\": \"Kotlin\",\n    \"repoName\": \"jetbrains/kotlin-web-site\",\n    \"githubUrl\": \"https://github.com/jetbrains/kotlin-web-site\",\n    \"description\": \"The Kotlin programming language website\",\n    \"owner\": \"jetbrains\",\n    \"repo\": \"kotlin-web-site\"\n  },\n  \"Devbox\": {\n    \"title\": \"Devbox\",\n    \"repoName\": \"jetify-com/devbox\",\n    \"githubUrl\": \"https://github.com/jetify-com/devbox\",\n    \"description\": \"Instant, easy, and predictable development environments\",\n    \"owner\": \"jetify-com\",\n    \"repo\": \"devbox\"\n  },\n  \"Roo Commander\": {\n    \"title\": \"Roo Commander\",\n    \"repoName\": \"jezweb/roo-commander.git\",\n    \"githubUrl\": \"https://github.com/jezweb/roo-commander.git\",\n    \"description\": \"Think of it like having a virtual, specialized software development team right inside your editor, orchestrated by the 👑 Roo Commander, powered by Roo Code on VS Code\",\n    \"owner\": \"jezweb\",\n    \"repo\": \"roo-commander.git\"\n  },\n  \"Diagrams.net\": {\n    \"title\": \"Diagrams.net\",\n    \"repoName\": \"jgraph/www.diagrams.net-source\",\n    \"githubUrl\": \"https://github.com/jgraph/www.diagrams.net-source\",\n    \"description\": \"Source to www.diagrams.net\",\n    \"owner\": \"jgraph\",\n    \"repo\": \"www.diagrams.net-source\"\n  },\n  \"Bulma\": {\n    \"title\": \"Bulma\",\n    \"repoName\": \"jgthms/bulma\",\n    \"githubUrl\": \"https://github.com/jgthms/bulma\",\n    \"description\": \"Modern CSS framework based on Flexbox\",\n    \"owner\": \"jgthms\",\n    \"repo\": \"bulma\"\n  },\n  \"Jina Reader\": {\n    \"title\": \"Jina Reader\",\n    \"repoName\": \"jina-ai/reader\",\n    \"githubUrl\": \"https://github.com/jina-ai/reader\",\n    \"description\": \"Convert any URL to an LLM-friendly input with a simple prefix https://r.jina.ai/\",\n    \"owner\": \"jina-ai\",\n    \"repo\": \"reader\"\n  },\n  \"Jitsi Meet\": {\n    \"title\": \"Jitsi Meet\",\n    \"repoName\": \"jitsi/jitsi-meet\",\n    \"githubUrl\": \"https://github.com/jitsi/jitsi-meet\",\n    \"description\": \"Jitsi Meet - Secure, Simple and Scalable Video Conferences that you use as a standalone app or embed in your web application.\",\n    \"owner\": \"jitsi\",\n    \"repo\": \"jitsi-meet\"\n  },\n  \"Jitsi Videobridge\": {\n    \"title\": \"Jitsi Videobridge\",\n    \"repoName\": \"jitsi/jitsi-videobridge\",\n    \"githubUrl\": \"https://github.com/jitsi/jitsi-videobridge\",\n    \"description\": \"Jitsi Videobridge is a WebRTC compatible video router or SFU that lets build highly scalable video conferencing infrastructure (i.e., up to hundreds of conferences per server).\",\n    \"owner\": \"jitsi\",\n    \"repo\": \"jitsi-videobridge\"\n  },\n  \"JJ\": {\n    \"title\": \"JJ\",\n    \"repoName\": \"jj-vcs/jj\",\n    \"githubUrl\": \"https://github.com/jj-vcs/jj\",\n    \"description\": \"A Git-compatible VCS that is both simple and powerful\",\n    \"owner\": \"jj-vcs\",\n    \"repo\": \"jj\"\n  },\n  \"Internet Archive\": {\n    \"title\": \"Internet Archive\",\n    \"repoName\": \"jjjake/internetarchive\",\n    \"githubUrl\": \"https://github.com/jjjake/internetarchive\",\n    \"description\": \"A Python and Command-Line Interface to Archive.org\",\n    \"owner\": \"jjjake\",\n    \"repo\": \"internetarchive\"\n  },\n  \"RRule\": {\n    \"title\": \"RRule\",\n    \"repoName\": \"jkbrzt/rrule\",\n    \"githubUrl\": \"https://github.com/jkbrzt/rrule\",\n    \"description\": \"JavaScript library for working with recurrence rules for calendar dates as defined in the iCalendar RFC and more.\",\n    \"owner\": \"jkbrzt\",\n    \"repo\": \"rrule\"\n  },\n  \"FastMCP\": {\n    \"title\": \"FastMCP\",\n    \"repoName\": \"punkpeye/fastmcp\",\n    \"githubUrl\": \"https://github.com/punkpeye/fastmcp\",\n    \"description\": \"A TypeScript framework for building MCP servers.\",\n    \"owner\": \"punkpeye\",\n    \"repo\": \"fastmcp\"\n  },\n  \"Django QStash\": {\n    \"title\": \"Django QStash\",\n    \"repoName\": \"jmitchel3/django-qstash\",\n    \"githubUrl\": \"https://github.com/jmitchel3/django-qstash\",\n    \"description\": \"Background tasks with Django, Upstash QStash, and webhooks. Designed to work instead of or with Celery.\",\n    \"owner\": \"jmitchel3\",\n    \"repo\": \"django-qstash\"\n  },\n  \"Class Variance Authority\": {\n    \"title\": \"Class Variance Authority\",\n    \"repoName\": \"joe-bell/cva\",\n    \"githubUrl\": \"https://github.com/joe-bell/cva\",\n    \"description\": \"Class Variance Authority\",\n    \"owner\": \"joe-bell\",\n    \"repo\": \"cva\"\n  },\n  \"Plaiceholder\": {\n    \"title\": \"Plaiceholder\",\n    \"repoName\": \"joe-bell/plaiceholder\",\n    \"githubUrl\": \"https://github.com/joe-bell/plaiceholder\",\n    \"description\": \"Beautiful image placeholders, without the hassle.\",\n    \"owner\": \"joe-bell\",\n    \"repo\": \"plaiceholder\"\n  },\n  \"Poster\": {\n    \"title\": \"Poster\",\n    \"repoName\": \"joinposter/docs\",\n    \"githubUrl\": \"https://github.com/joinposter/docs\",\n    \"description\": \"\",\n    \"owner\": \"joinposter\",\n    \"repo\": \"docs\"\n  },\n  \"ComplexHeatmap\": {\n    \"title\": \"ComplexHeatmap\",\n    \"repoName\": \"jokergoo/complexheatmap.git\",\n    \"githubUrl\": \"https://github.com/jokergoo/complexheatmap.git\",\n    \"description\": \"Make Complex Heatmaps \",\n    \"owner\": \"jokergoo\",\n    \"repo\": \"complexheatmap.git\"\n  },\n  \"GetX\": {\n    \"title\": \"GetX\",\n    \"repoName\": \"jonataslaw/getx\",\n    \"githubUrl\": \"https://github.com/jonataslaw/getx\",\n    \"description\": \"Open screens/snackbars/dialogs/bottomSheets without context, manage states and inject dependencies easily with Get.\",\n    \"owner\": \"jonataslaw\",\n    \"repo\": \"getx\"\n  },\n  \"Borb\": {\n    \"title\": \"Borb\",\n    \"repoName\": \"jorisschellekens/borb\",\n    \"githubUrl\": \"https://github.com/jorisschellekens/borb\",\n    \"description\": \"borb is a library for reading, creating and manipulating PDF files in python.\",\n    \"owner\": \"jorisschellekens\",\n    \"repo\": \"borb\"\n  },\n  \"CsvHelper\": {\n    \"title\": \"CsvHelper\",\n    \"repoName\": \"joshclose/csvhelper\",\n    \"githubUrl\": \"https://github.com/joshclose/csvhelper\",\n    \"description\": \"Library to help reading and writing CSV files\",\n    \"owner\": \"joshclose\",\n    \"repo\": \"csvhelper\"\n  },\n  \"CosyVoice2\": {\n    \"title\": \"CosyVoice2\",\n    \"repoName\": \"journey-ad/cosyvoice2-ex\",\n    \"githubUrl\": \"https://github.com/journey-ad/cosyvoice2-ex\",\n    \"description\": \"CosyVoice2 功能扩充（预训练音色推理/3s极速复刻/自然语言控制/自动识别/音色模型保存/API）\",\n    \"owner\": \"journey-ad\",\n    \"repo\": \"cosyvoice2-ex\"\n  },\n  \"Starlette Admin\": {\n    \"title\": \"Starlette Admin\",\n    \"repoName\": \"jowilf/starlette-admin\",\n    \"githubUrl\": \"https://github.com/jowilf/starlette-admin\",\n    \"description\": \"Fast, beautiful and extensible administrative interface framework for Starlette & FastApi applications\",\n    \"owner\": \"jowilf\",\n    \"repo\": \"starlette-admin\"\n  },\n  \"React Native Unistyles\": {\n    \"title\": \"React Native Unistyles\",\n    \"repoName\": \"jpudysz/react-native-unistyles\",\n    \"githubUrl\": \"https://github.com/jpudysz/react-native-unistyles\",\n    \"description\": \"Level up your React Native StyleSheet\",\n    \"owner\": \"jpudysz\",\n    \"repo\": \"react-native-unistyles\"\n  },\n  \"Jq\": {\n    \"title\": \"Jq\",\n    \"repoName\": \"jqlang/jq\",\n    \"githubUrl\": \"https://github.com/jqlang/jq\",\n    \"description\": \"Command-line JSON processor\",\n    \"owner\": \"jqlang\",\n    \"repo\": \"jq\"\n  },\n  \"React Big Calendar\": {\n    \"title\": \"React Big Calendar\",\n    \"repoName\": \"jquense/react-big-calendar\",\n    \"githubUrl\": \"https://github.com/jquense/react-big-calendar\",\n    \"description\": \"gcal/outlook like calendar component\",\n    \"owner\": \"jquense\",\n    \"repo\": \"react-big-calendar\"\n  },\n  \"Yup\": {\n    \"title\": \"Yup\",\n    \"repoName\": \"jquense/yup\",\n    \"githubUrl\": \"https://github.com/jquense/yup\",\n    \"description\": \"Dead simple Object schema validation\",\n    \"owner\": \"jquense\",\n    \"repo\": \"yup\"\n  },\n  \"jQuery\": {\n    \"title\": \"jQuery\",\n    \"repoName\": \"jquery/jquery\",\n    \"githubUrl\": \"https://github.com/jquery/jquery\",\n    \"description\": \"jQuery JavaScript Library\",\n    \"owner\": \"jquery\",\n    \"repo\": \"jquery\"\n  },\n  \"JSDoc\": {\n    \"title\": \"JSDoc\",\n    \"repoName\": \"jsdoc/jsdoc.github.io\",\n    \"githubUrl\": \"https://github.com/jsdoc/jsdoc.github.io\",\n    \"description\": \"JSDoc website\",\n    \"owner\": \"jsdoc\",\n    \"repo\": \"jsdoc.github.io\"\n  },\n  \"Pdfplumber\": {\n    \"title\": \"Pdfplumber\",\n    \"repoName\": \"jsvine/pdfplumber\",\n    \"githubUrl\": \"https://github.com/jsvine/pdfplumber\",\n    \"description\": \"Plumb a PDF for detailed information about each char, rectangle, line, et cetera — and easily extract text and tables.\",\n    \"owner\": \"jsvine\",\n    \"repo\": \"pdfplumber\"\n  },\n  \"ESLint Plugin React\": {\n    \"title\": \"ESLint Plugin React\",\n    \"repoName\": \"jsx-eslint/eslint-plugin-react\",\n    \"githubUrl\": \"https://github.com/jsx-eslint/eslint-plugin-react\",\n    \"description\": \"React-specific linting rules for ESLint\",\n    \"owner\": \"jsx-eslint\",\n    \"repo\": \"eslint-plugin-react\"\n  },\n  \"JUCE\": {\n    \"title\": \"JUCE\",\n    \"repoName\": \"juce-framework/juce\",\n    \"githubUrl\": \"https://github.com/juce-framework/juce\",\n    \"description\": \"JUCE is an open-source cross-platform C++ application framework for desktop and mobile applications, including VST, VST3, AU, AUv3, LV2 and AAX audio plug-ins.\",\n    \"owner\": \"juce-framework\",\n    \"repo\": \"juce\"\n  },\n  \"Anime\": {\n    \"title\": \"Anime\",\n    \"repoName\": \"juliangarnier/anime\",\n    \"githubUrl\": \"https://github.com/juliangarnier/anime\",\n    \"description\": \"JavaScript animation engine\",\n    \"owner\": \"juliangarnier\",\n    \"repo\": \"anime\"\n  },\n  \"Tuyau\": {\n    \"title\": \"Tuyau\",\n    \"repoName\": \"julien-r44/tuyau\",\n    \"githubUrl\": \"https://github.com/julien-r44/tuyau\",\n    \"description\": \"RPC / E2E Client For AdonisJS\",\n    \"owner\": \"julien-r44\",\n    \"repo\": \"tuyau\"\n  },\n  \"SymmetricDS\": {\n    \"title\": \"SymmetricDS\",\n    \"repoName\": \"jumpmind/symmetric-ds\",\n    \"githubUrl\": \"https://github.com/jumpmind/symmetric-ds\",\n    \"description\": \"SymmetricDS is database replication and file synchronization software that is platform independent, web enabled, and database agnostic.  It is designed to make bi-directional data replication fast, easy, and resilient.  It scales to a large number of nodes and works in near real-time across WAN and LAN networks.\",\n    \"owner\": \"jumpmind\",\n    \"repo\": \"symmetric-ds\"\n  },\n  \"JUnit 5\": {\n    \"title\": \"JUnit 5\",\n    \"repoName\": \"junit-team/junit5\",\n    \"githubUrl\": \"https://github.com/junit-team/junit5\",\n    \"description\": \"✅ The 5th major version of the programmer-friendly testing framework for Java and the JVM\",\n    \"owner\": \"junit-team\",\n    \"repo\": \"junit5\"\n  },\n  \"Jupiter\": {\n    \"title\": \"Jupiter\",\n    \"repoName\": \"jup-ag/docs\",\n    \"githubUrl\": \"https://github.com/jup-ag/docs\",\n    \"description\": \"Jupiter Developer Docs\",\n    \"owner\": \"jup-ag\",\n    \"repo\": \"docs\"\n  },\n  \"Jupyter Widgets\": {\n    \"title\": \"Jupyter Widgets\",\n    \"repoName\": \"jupyter-widgets/ipywidgets\",\n    \"githubUrl\": \"https://github.com/jupyter-widgets/ipywidgets\",\n    \"description\": \"Interactive Widgets for the Jupyter Notebook\",\n    \"owner\": \"jupyter-widgets\",\n    \"repo\": \"ipywidgets\"\n  },\n  \"Hyperswitch\": {\n    \"title\": \"Hyperswitch\",\n    \"repoName\": \"juspay/hyperswitch\",\n    \"githubUrl\": \"https://github.com/juspay/hyperswitch\",\n    \"description\": \"An open source payments switch written in Rust to make payments fast, reliable and affordable\",\n    \"owner\": \"juspay\",\n    \"repo\": \"hyperswitch\"\n  },\n  \"React Social Media Embed\": {\n    \"title\": \"React Social Media Embed\",\n    \"repoName\": \"justinmahar/react-social-media-embed\",\n    \"githubUrl\": \"https://github.com/justinmahar/react-social-media-embed\",\n    \"description\": \"📰 Easily embed social media posts from Facebook, Instagram, LinkedIn, Pinterest, TikTok, X (Twitter), and YouTube in React.\",\n    \"owner\": \"justinmahar\",\n    \"repo\": \"react-social-media-embed\"\n  },\n  \"Scrapy Impersonate\": {\n    \"title\": \"Scrapy Impersonate\",\n    \"repoName\": \"jxlil/scrapy-impersonate\",\n    \"githubUrl\": \"https://github.com/jxlil/scrapy-impersonate\",\n    \"description\": \"Scrapy download handler that can impersonate browser' TLS signatures or JA3 fingerprints.\",\n    \"owner\": \"jxlil\",\n    \"repo\": \"scrapy-impersonate\"\n  },\n  \"Language Tool Python\": {\n    \"title\": \"Language Tool Python\",\n    \"repoName\": \"jxmorris12/language_tool_python\",\n    \"githubUrl\": \"https://github.com/jxmorris12/language_tool_python\",\n    \"description\": \"a free python grammar checker 📝✅\",\n    \"owner\": \"jxmorris12\",\n    \"repo\": \"language_tool_python\"\n  },\n  \"K3s\": {\n    \"title\": \"K3s\",\n    \"repoName\": \"k3s-io/k3s\",\n    \"githubUrl\": \"https://github.com/k3s-io/k3s\",\n    \"description\": \"Lightweight Kubernetes\",\n    \"owner\": \"k3s-io\",\n    \"repo\": \"k3s\"\n  },\n  \"AdonisJS Scheduler\": {\n    \"title\": \"AdonisJS Scheduler\",\n    \"repoName\": \"kabbouchi/adonisjs-scheduler\",\n    \"githubUrl\": \"https://github.com/kabbouchi/adonisjs-scheduler\",\n    \"description\": \"Task scheduler for AdonisJS\",\n    \"owner\": \"kabbouchi\",\n    \"repo\": \"adonisjs-scheduler\"\n  },\n  \"Micrograd\": {\n    \"title\": \"Micrograd\",\n    \"repoName\": \"karpathy/micrograd\",\n    \"githubUrl\": \"https://github.com/karpathy/micrograd\",\n    \"description\": \"A tiny scalar-valued autograd engine and a neural net library on top of it with PyTorch-like API\",\n    \"owner\": \"karpathy\",\n    \"repo\": \"micrograd\"\n  },\n  \"Karrio\": {\n    \"title\": \"Karrio\",\n    \"repoName\": \"karrioapi/karrio\",\n    \"githubUrl\": \"https://github.com/karrioapi/karrio\",\n    \"description\": \"Programmable Shipping APIs (self-hosted)\",\n    \"owner\": \"karrioapi\",\n    \"repo\": \"karrio\"\n  },\n  \"Active Record Associated Object\": {\n    \"title\": \"Active Record Associated Object\",\n    \"repoName\": \"kaspth/active_record-associated_object\",\n    \"githubUrl\": \"https://github.com/kaspth/active_record-associated_object\",\n    \"description\": \"Extract Collaborator Objects from your Active Records, a new concept called Associated Objects\",\n    \"owner\": \"kaspth\",\n    \"repo\": \"active_record-associated_object\"\n  },\n  \"Tera\": {\n    \"title\": \"Tera\",\n    \"repoName\": \"keats/tera\",\n    \"githubUrl\": \"https://github.com/keats/tera\",\n    \"description\": \"A template engine for Rust based on Jinja2/Django\",\n    \"owner\": \"keats\",\n    \"repo\": \"tera\"\n  },\n  \"Validator\": {\n    \"title\": \"Validator\",\n    \"repoName\": \"keats/validator\",\n    \"githubUrl\": \"https://github.com/keats/validator\",\n    \"description\": \"Simple validation for Rust structs\",\n    \"owner\": \"keats\",\n    \"repo\": \"validator\"\n  },\n  \"Kedro\": {\n    \"title\": \"Kedro\",\n    \"repoName\": \"kedro-org/kedro\",\n    \"githubUrl\": \"https://github.com/kedro-org/kedro\",\n    \"description\": \"Kedro is a toolbox for production-ready data science. It uses software engineering best practices to help you create data engineering and data science pipelines that are reproducible, maintainable, and modular.\",\n    \"owner\": \"kedro-org\",\n    \"repo\": \"kedro\"\n  },\n  \"Kent C. Dodds Personal Website\": {\n    \"title\": \"Kent C. Dodds Personal Website\",\n    \"repoName\": \"kentcdodds/kentcdodds.com\",\n    \"githubUrl\": \"https://github.com/kentcdodds/kentcdodds.com\",\n    \"description\": \"My personal website\",\n    \"owner\": \"kentcdodds\",\n    \"repo\": \"kentcdodds.com\"\n  },\n  \"Keras\": {\n    \"title\": \"Keras\",\n    \"repoName\": \"keras-team/keras-io\",\n    \"githubUrl\": \"https://github.com/keras-team/keras-io\",\n    \"description\": \"Keras documentation, hosted live at keras.io\",\n    \"owner\": \"keras-team\",\n    \"repo\": \"keras-io\"\n  },\n  \"Backtesting.py\": {\n    \"title\": \"Backtesting.py\",\n    \"repoName\": \"kernc/backtesting.py\",\n    \"githubUrl\": \"https://github.com/kernc/backtesting.py\",\n    \"description\": \":mag_right: :chart_with_upwards_trend: :snake: :moneybag:  Backtest trading strategies in Python.\",\n    \"owner\": \"kernc\",\n    \"repo\": \"backtesting.py\"\n  },\n  \"Kestra\": {\n    \"title\": \"Kestra\",\n    \"repoName\": \"kestra-io/kestra\",\n    \"githubUrl\": \"https://github.com/kestra-io/kestra\",\n    \"description\": \":zap: Workflow Automation Platform. Orchestrate & Schedule code in any language, run anywhere, 600+ plugins. Alternative to Airflow, VMware vRealize Automation, Rundeck...\",\n    \"owner\": \"kestra-io\",\n    \"repo\": \"kestra\"\n  },\n  \"React Glider\": {\n    \"title\": \"React Glider\",\n    \"repoName\": \"kevinfarrugia/react-glider\",\n    \"githubUrl\": \"https://github.com/kevinfarrugia/react-glider\",\n    \"description\": \"A ReactJS wrapper for Glider.js\",\n    \"owner\": \"kevinfarrugia\",\n    \"repo\": \"react-glider\"\n  },\n  \"Keycloak\": {\n    \"title\": \"Keycloak\",\n    \"repoName\": \"keycloak/keycloak\",\n    \"githubUrl\": \"https://github.com/keycloak/keycloak\",\n    \"description\": \"Open Source Identity and Access Management For Modern Applications and Services\",\n    \"owner\": \"keycloak\",\n    \"repo\": \"keycloak\"\n  },\n  \"Keystone\": {\n    \"title\": \"Keystone\",\n    \"repoName\": \"keystonejs/keystone\",\n    \"githubUrl\": \"https://github.com/keystonejs/keystone\",\n    \"description\": \"The superpowered headless CMS for Node.js — built with GraphQL and React\",\n    \"owner\": \"keystonejs\",\n    \"repo\": \"keystone\"\n  },\n  \"Perseus\": {\n    \"title\": \"Perseus\",\n    \"repoName\": \"khan/perseus\",\n    \"githubUrl\": \"https://github.com/khan/perseus\",\n    \"description\": \"Perseus is Khan Academy's exercise question editor and renderer.\",\n    \"owner\": \"khan\",\n    \"repo\": \"perseus\"\n  },\n  \"Bazza UI\": {\n    \"title\": \"Bazza UI\",\n    \"repoName\": \"kianbazza/ui\",\n    \"githubUrl\": \"https://github.com/kianbazza/ui\",\n    \"description\": \"bazza/ui is a React component library with hand-crafted, powerful, modern components.\",\n    \"owner\": \"kianbazza\",\n    \"repo\": \"ui\"\n  },\n  \"Createorderator\": {\n    \"title\": \"Createorderator\",\n    \"repoName\": \"kibopartners/createorderator\",\n    \"githubUrl\": \"https://github.com/kibopartners/createorderator\",\n    \"description\": \"Helper Function to Create OMS Order Payload\",\n    \"owner\": \"kibopartners\",\n    \"repo\": \"createorderator\"\n  },\n  \"Kibo Shipping Extensibility Starter Kit\": {\n    \"title\": \"Kibo Shipping Extensibility Starter Kit\",\n    \"repoName\": \"kibopartners/shippingextensibilitystarterkit\",\n    \"githubUrl\": \"https://github.com/kibopartners/shippingextensibilitystarterkit\",\n    \"description\": \"Typescript Starter Kit for Shipping Extensibility in Kibo\",\n    \"owner\": \"kibopartners\",\n    \"repo\": \"shippingextensibilitystarterkit\"\n  },\n  \"Third Party Payments TypeScript Starter Kit\": {\n    \"title\": \"Third Party Payments TypeScript Starter Kit\",\n    \"repoName\": \"kibopartners/thirdpartypaymentstypescriptstarterkit\",\n    \"githubUrl\": \"https://github.com/kibopartners/thirdpartypaymentstypescriptstarterkit\",\n    \"description\": \"Example implementation of Third Party payments in KCCP platform\",\n    \"owner\": \"kibopartners\",\n    \"repo\": \"thirdpartypaymentstypescriptstarterkit\"\n  },\n  \"KIE Docs\": {\n    \"title\": \"KIE Docs\",\n    \"repoName\": \"kiegroup/kie-docs\",\n    \"githubUrl\": \"https://github.com/kiegroup/kie-docs\",\n    \"description\": \"Mirror of https://github.com/apache/incubator-kie-docs\",\n    \"owner\": \"kiegroup\",\n    \"repo\": \"kie-docs\"\n  },\n  \"Symfony MCP Profiler Bundle\": {\n    \"title\": \"Symfony MCP Profiler Bundle\",\n    \"repoName\": \"killerwolf/mcp-profiler-bundle\",\n    \"githubUrl\": \"https://github.com/killerwolf/mcp-profiler-bundle\",\n    \"description\": \"The Symfony MCP Profiler Bundle mimics the WebProfiler Bundle. It bridges the gap between Profiler data and your favorite MCP-enabled AI-powered IDE.\",\n    \"owner\": \"killerwolf\",\n    \"repo\": \"mcp-profiler-bundle\"\n  },\n  \"Visual Image Tool\": {\n    \"title\": \"Visual Image Tool\",\n    \"repoName\": \"killerwolf/visual-image-tool\",\n    \"githubUrl\": \"https://github.com/killerwolf/visual-image-tool\",\n    \"description\": \"UI JS lib that helps the user choose a focus point and a crop zone coordiantes of an image.\",\n    \"owner\": \"killerwolf\",\n    \"repo\": \"visual-image-tool\"\n  },\n  \"Kinde SvelteKit SDK\": {\n    \"title\": \"Kinde SvelteKit SDK\",\n    \"repoName\": \"kinde-oss/kinde-sveltekit-sdk\",\n    \"githubUrl\": \"https://github.com/kinde-oss/kinde-sveltekit-sdk\",\n    \"description\": \"\",\n    \"owner\": \"kinde-oss\",\n    \"repo\": \"kinde-sveltekit-sdk\"\n  },\n  \"React Native Keyboard Controller\": {\n    \"title\": \"React Native Keyboard Controller\",\n    \"repoName\": \"kirillzyusko/react-native-keyboard-controller\",\n    \"githubUrl\": \"https://github.com/kirillzyusko/react-native-keyboard-controller\",\n    \"description\": \"Keyboard manager which works in identical way on both iOS and Android\",\n    \"owner\": \"kirillzyusko\",\n    \"repo\": \"react-native-keyboard-controller\"\n  },\n  \"KITOPS\": {\n    \"title\": \"KITOPS\",\n    \"repoName\": \"kitops-ml/kitops.git\",\n    \"githubUrl\": \"https://github.com/kitops-ml/kitops.git\",\n    \"description\": \"An open source DevOps tool for packaging and versioning AI/ML models, datasets, code, and configuration into an OCI artifact.\",\n    \"owner\": \"kitops-ml\",\n    \"repo\": \"kitops.git\"\n  },\n  \"Visualization Toolkit\": {\n    \"title\": \"Visualization Toolkit\",\n    \"repoName\": \"kitware/vtk\",\n    \"githubUrl\": \"https://github.com/kitware/vtk\",\n    \"description\": \"Mirror of Visualization Toolkit repository\",\n    \"owner\": \"kitware\",\n    \"repo\": \"vtk\"\n  },\n  \"Kivy\": {\n    \"title\": \"Kivy\",\n    \"repoName\": \"kivy/kivy\",\n    \"githubUrl\": \"https://github.com/kivy/kivy\",\n    \"description\": \"Open source UI framework written in Python, running on Windows, Linux, macOS, Android and iOS\",\n    \"owner\": \"kivy\",\n    \"repo\": \"kivy\"\n  },\n  \"Pyjnius\": {\n    \"title\": \"Pyjnius\",\n    \"repoName\": \"kivy/pyjnius\",\n    \"githubUrl\": \"https://github.com/kivy/pyjnius\",\n    \"description\": \"Access Java classes from Python\",\n    \"owner\": \"kivy\",\n    \"repo\": \"pyjnius\"\n  },\n  \"Klinechart\": {\n    \"title\": \"Klinechart\",\n    \"repoName\": \"klinecharts/klinechart\",\n    \"githubUrl\": \"https://github.com/klinecharts/klinechart\",\n    \"description\": \"📈Lightweight k-line chart that can be highly customized. Zero dependencies. Support mobile.（可高度自定义的轻量级k线图，无第三方依赖，支持移动端）\",\n    \"owner\": \"klinecharts\",\n    \"repo\": \"klinechart\"\n  },\n  \"Listmonk\": {\n    \"title\": \"Listmonk\",\n    \"repoName\": \"knadh/listmonk\",\n    \"githubUrl\": \"https://github.com/knadh/listmonk\",\n    \"description\": \"High performance, self-hosted, newsletter and mailing list manager with a modern dashboard. Single binary app.\",\n    \"owner\": \"knadh\",\n    \"repo\": \"listmonk\"\n  },\n  \"Zigbee2MQTT\": {\n    \"title\": \"Zigbee2MQTT\",\n    \"repoName\": \"koenkk/zigbee2mqtt.io\",\n    \"githubUrl\": \"https://github.com/koenkk/zigbee2mqtt.io\",\n    \"description\": \"📘 Zigbee2mqtt documentation\",\n    \"owner\": \"koenkk\",\n    \"repo\": \"zigbee2mqtt.io\"\n  },\n  \"Konsta\": {\n    \"title\": \"Konsta\",\n    \"repoName\": \"konstaui/konsta\",\n    \"githubUrl\": \"https://github.com/konstaui/konsta\",\n    \"description\": \"Mobile UI components made with Tailwind CSS\",\n    \"owner\": \"konstaui\",\n    \"repo\": \"konsta\"\n  },\n  \"Konva.js\": {\n    \"title\": \"Konva.js\",\n    \"repoName\": \"konvajs/site\",\n    \"githubUrl\": \"https://github.com/konvajs/site\",\n    \"description\": \"Homepage generator for Konva.js project\",\n    \"owner\": \"konvajs\",\n    \"repo\": \"site\"\n  },\n  \"Kornia\": {\n    \"title\": \"Kornia\",\n    \"repoName\": \"kornia/kornia\",\n    \"githubUrl\": \"https://github.com/kornia/kornia\",\n    \"description\": \"🐍 Geometric Computer Vision Library for Spatial AI\",\n    \"owner\": \"kornia\",\n    \"repo\": \"kornia\"\n  },\n  \"Kotest\": {\n    \"title\": \"Kotest\",\n    \"repoName\": \"kotest/kotest\",\n    \"githubUrl\": \"https://github.com/kotest/kotest\",\n    \"description\": \"Powerful, elegant and flexible test framework for Kotlin with assertions, property testing and data driven tests.\",\n    \"owner\": \"kotest\",\n    \"repo\": \"kotest\"\n  },\n  \"QR Code Styling\": {\n    \"title\": \"QR Code Styling\",\n    \"repoName\": \"kozakdenys/qr-code-styling\",\n    \"githubUrl\": \"https://github.com/kozakdenys/qr-code-styling\",\n    \"description\": \"Automaticly generate your styled QR code in your web app.\",\n    \"owner\": \"kozakdenys\",\n    \"repo\": \"qr-code-styling\"\n  },\n  \"WeasyPrint\": {\n    \"title\": \"WeasyPrint\",\n    \"repoName\": \"kozea/weasyprint\",\n    \"githubUrl\": \"https://github.com/kozea/weasyprint\",\n    \"description\": \"The awesome document factory\",\n    \"owner\": \"kozea\",\n    \"repo\": \"weasyprint\"\n  },\n  \"Fuse\": {\n    \"title\": \"Fuse\",\n    \"repoName\": \"krisk/fuse\",\n    \"githubUrl\": \"https://github.com/krisk/fuse\",\n    \"description\": \"Lightweight fuzzy-search, in JavaScript\",\n    \"owner\": \"krisk\",\n    \"repo\": \"fuse\"\n  },\n  \"LegendsViewer Next\": {\n    \"title\": \"LegendsViewer Next\",\n    \"repoName\": \"kromtec/legendsviewer-next\",\n    \"githubUrl\": \"https://github.com/kromtec/legendsviewer-next\",\n    \"description\": \"Recreates Dwarf Fortress' Legends Mode from exported files.\",\n    \"owner\": \"kromtec\",\n    \"repo\": \"legendsviewer-next\"\n  },\n  \"KServe\": {\n    \"title\": \"KServe\",\n    \"repoName\": \"kserve/kserve\",\n    \"githubUrl\": \"https://github.com/kserve/kserve\",\n    \"description\": \"Standardized Serverless ML Inference Platform on Kubernetes\",\n    \"owner\": \"kserve\",\n    \"repo\": \"kserve\"\n  },\n  \"Svelte\": {\n    \"title\": \"Svelte\",\n    \"repoName\": \"sveltejs/svelte\",\n    \"githubUrl\": \"https://github.com/sveltejs/svelte\",\n    \"description\": \"web development for the rest of us\",\n    \"owner\": \"sveltejs\",\n    \"repo\": \"svelte\"\n  },\n  \"Ktor\": {\n    \"title\": \"Ktor\",\n    \"repoName\": \"ktorio/ktor-documentation\",\n    \"githubUrl\": \"https://github.com/ktorio/ktor-documentation\",\n    \"description\": \"Documentation for the Ktor framework.\",\n    \"owner\": \"ktorio\",\n    \"repo\": \"ktor-documentation\"\n  },\n  \"Kubeflow Website\": {\n    \"title\": \"Kubeflow Website\",\n    \"repoName\": \"kubeflow/website\",\n    \"githubUrl\": \"https://github.com/kubeflow/website\",\n    \"description\": \"Kubeflow Website\",\n    \"owner\": \"kubeflow\",\n    \"repo\": \"website\"\n  },\n  \"Kube-OVN\": {\n    \"title\": \"Kube-OVN\",\n    \"repoName\": \"kubeovn/kube-ovn\",\n    \"githubUrl\": \"https://github.com/kubeovn/kube-ovn\",\n    \"description\": \"A Bridge between SDN and Cloud Native (Project under CNCF)\",\n    \"owner\": \"kubeovn\",\n    \"repo\": \"kube-ovn\"\n  },\n  \"Kubernetes Cluster API\": {\n    \"title\": \"Kubernetes Cluster API\",\n    \"repoName\": \"kubernetes-sigs/cluster-api\",\n    \"githubUrl\": \"https://github.com/kubernetes-sigs/cluster-api\",\n    \"description\": \"Home for Cluster API, a subproject of sig-cluster-lifecycle\",\n    \"owner\": \"kubernetes-sigs\",\n    \"repo\": \"cluster-api\"\n  },\n  \"Cluster API Provider Azure\": {\n    \"title\": \"Cluster API Provider Azure\",\n    \"repoName\": \"kubernetes-sigs/cluster-api-provider-azure\",\n    \"githubUrl\": \"https://github.com/kubernetes-sigs/cluster-api-provider-azure\",\n    \"description\": \"Cluster API implementation for Microsoft Azure\",\n    \"owner\": \"kubernetes-sigs\",\n    \"repo\": \"cluster-api-provider-azure\"\n  },\n  \"Karpenter\": {\n    \"title\": \"Karpenter\",\n    \"repoName\": \"kubernetes-sigs/karpenter\",\n    \"githubUrl\": \"https://github.com/kubernetes-sigs/karpenter\",\n    \"description\": \"Karpenter is a Kubernetes Node Autoscaler built for flexibility, performance, and simplicity.\",\n    \"owner\": \"kubernetes-sigs\",\n    \"repo\": \"karpenter\"\n  },\n  \"Kubebuilder\": {\n    \"title\": \"Kubebuilder\",\n    \"repoName\": \"kubernetes-sigs/kubebuilder\",\n    \"githubUrl\": \"https://github.com/kubernetes-sigs/kubebuilder\",\n    \"description\": \"Kubebuilder - SDK for building Kubernetes APIs using CRDs\",\n    \"owner\": \"kubernetes-sigs\",\n    \"repo\": \"kubebuilder\"\n  },\n  \"Kubernetes Kubectl\": {\n    \"title\": \"Kubernetes Kubectl\",\n    \"repoName\": \"kubernetes/kubectl\",\n    \"githubUrl\": \"https://github.com/kubernetes/kubectl\",\n    \"description\": \"Issue tracker and mirror of kubectl code\",\n    \"owner\": \"kubernetes\",\n    \"repo\": \"kubectl\"\n  },\n  \"Kubernetes\": {\n    \"title\": \"Kubernetes\",\n    \"repoName\": \"kubernetes/website\",\n    \"githubUrl\": \"https://github.com/kubernetes/website\",\n    \"description\": \"Kubernetes website and documentation repo: \",\n    \"owner\": \"kubernetes\",\n    \"repo\": \"website\"\n  },\n  \"Minikube\": {\n    \"title\": \"Minikube\",\n    \"repoName\": \"kubernetes/minikube\",\n    \"githubUrl\": \"https://github.com/kubernetes/minikube\",\n    \"description\": \"Run Kubernetes locally\",\n    \"owner\": \"kubernetes\",\n    \"repo\": \"minikube\"\n  },\n  \"KubeKey\": {\n    \"title\": \"KubeKey\",\n    \"repoName\": \"kubesphere/kubekey\",\n    \"githubUrl\": \"https://github.com/kubesphere/kubekey\",\n    \"description\": \"Install Kubernetes/K3s only, both Kubernetes/K3s and KubeSphere, and related cloud-native add-ons, it supports all-in-one, multi-node, and HA 🔥 ⎈ 🐳\",\n    \"owner\": \"kubesphere\",\n    \"repo\": \"kubekey\"\n  },\n  \"KubeSphere\": {\n    \"title\": \"KubeSphere\",\n    \"repoName\": \"kubesphere/kubesphere\",\n    \"githubUrl\": \"https://github.com/kubesphere/kubesphere\",\n    \"description\": \"The container platform tailored for Kubernetes multi-cloud, datacenter, and edge management ⎈ 🖥 ☁️\",\n    \"owner\": \"kubesphere\",\n    \"repo\": \"kubesphere\"\n  },\n  \"KuCoin Python SDK\": {\n    \"title\": \"KuCoin Python SDK\",\n    \"repoName\": \"kucoin/kucoin-python-sdk\",\n    \"githubUrl\": \"https://github.com/kucoin/kucoin-python-sdk\",\n    \"description\": \"\",\n    \"owner\": \"kucoin\",\n    \"repo\": \"kucoin-python-sdk\"\n  },\n  \"Subscribe\": {\n    \"title\": \"Subscribe\",\n    \"repoName\": \"kucukkanat/subscribe\",\n    \"githubUrl\": \"https://github.com/kucukkanat/subscribe\",\n    \"description\": \"Event Emitter\",\n    \"owner\": \"kucukkanat\",\n    \"repo\": \"subscribe\"\n  },\n  \"Kuzu\": {\n    \"title\": \"Kuzu\",\n    \"repoName\": \"kuzudb/kuzu\",\n    \"githubUrl\": \"https://github.com/kuzudb/kuzu\",\n    \"description\": \"Embedded property graph database built for speed. Vector search and full-text search built in. Implements Cypher.\",\n    \"owner\": \"kuzudb\",\n    \"repo\": \"kuzu\"\n  },\n  \"Vue Query Builder\": {\n    \"title\": \"Vue Query Builder\",\n    \"repoName\": \"kwesterfeld2/vue-query-builder\",\n    \"githubUrl\": \"https://github.com/kwesterfeld2/vue-query-builder\",\n    \"description\": \"A Vue-Query-Builder\",\n    \"owner\": \"kwesterfeld2\",\n    \"repo\": \"vue-query-builder\"\n  },\n  \"KDB.AI\": {\n    \"title\": \"KDB.AI\",\n    \"repoName\": \"kxsystems/kdbai-samples\",\n    \"githubUrl\": \"https://github.com/kxsystems/kdbai-samples\",\n    \"description\": \"Developer samples for the KDB.AI vector database\",\n    \"owner\": \"kxsystems\",\n    \"repo\": \"kdbai-samples\"\n  },\n  \"KyberSwap\": {\n    \"title\": \"KyberSwap\",\n    \"repoName\": \"kybernetwork/kyberswap-documentation.git\",\n    \"githubUrl\": \"https://github.com/kybernetwork/kyberswap-documentation.git\",\n    \"description\": \"KyberSwap Docs\",\n    \"owner\": \"kybernetwork\",\n    \"repo\": \"kyberswap-documentation.git\"\n  },\n  \"Kysely\": {\n    \"title\": \"Kysely\",\n    \"repoName\": \"kysely-org/kysely\",\n    \"githubUrl\": \"https://github.com/kysely-org/kysely\",\n    \"description\": \"A type-safe typescript SQL query builder\",\n    \"owner\": \"kysely-org\",\n    \"repo\": \"kysely\"\n  },\n  \"Kyverno Chainsaw\": {\n    \"title\": \"Kyverno Chainsaw\",\n    \"repoName\": \"kyverno/chainsaw\",\n    \"githubUrl\": \"https://github.com/kyverno/chainsaw\",\n    \"description\": \"Declarative K8s e2e testing\",\n    \"owner\": \"kyverno\",\n    \"repo\": \"chainsaw\"\n  },\n  \"Kyverno\": {\n    \"title\": \"Kyverno\",\n    \"repoName\": \"kyverno/kyverno\",\n    \"githubUrl\": \"https://github.com/kyverno/kyverno\",\n    \"description\": \"Cloud Native Policy Management\",\n    \"owner\": \"kyverno\",\n    \"repo\": \"kyverno\"\n  },\n  \"Rstest\": {\n    \"title\": \"Rstest\",\n    \"repoName\": \"la10736/rstest\",\n    \"githubUrl\": \"https://github.com/la10736/rstest\",\n    \"description\": \"Fixture-based test framework for Rust\",\n    \"owner\": \"la10736\",\n    \"repo\": \"rstest\"\n  },\n  \"FastGPT\": {\n    \"title\": \"FastGPT\",\n    \"repoName\": \"labring/fastgpt\",\n    \"githubUrl\": \"https://github.com/labring/fastgpt\",\n    \"description\": \"FastGPT is a knowledge-based platform built on the LLMs, offers a comprehensive suite of out-of-the-box capabilities such as data processing, RAG retrieval, and visual AI workflow orchestration, letting you easily develop and deploy complex question-answering systems without the need for extensive setup or configuration.\",\n    \"owner\": \"labring\",\n    \"repo\": \"fastgpt\"\n  },\n  \"Echo\": {\n    \"title\": \"Echo\",\n    \"repoName\": \"labstack/echo\",\n    \"githubUrl\": \"https://github.com/labstack/echo\",\n    \"description\": \"High performance, minimalist Go web framework\",\n    \"owner\": \"labstack\",\n    \"repo\": \"echo\"\n  },\n  \"AuxiliaryExecute\": {\n    \"title\": \"AuxiliaryExecute\",\n    \"repoName\": \"lakr233/auxiliaryexecute\",\n    \"githubUrl\": \"https://github.com/lakr233/auxiliaryexecute\",\n    \"description\": \"A Swift wrapper for system shell over posix_spawn with search path and env support.\",\n    \"owner\": \"lakr233\",\n    \"repo\": \"auxiliaryexecute\"\n  },\n  \"LanceDB\": {\n    \"title\": \"LanceDB\",\n    \"repoName\": \"lancedb/lancedb\",\n    \"githubUrl\": \"https://github.com/lancedb/lancedb\",\n    \"description\": \"Developer-friendly, embedded retrieval engine for multimodal AI. Search More; Manage Less.\",\n    \"owner\": \"lancedb\",\n    \"repo\": \"lancedb\"\n  },\n  \"LangChain\": {\n    \"title\": \"LangChain\",\n    \"repoName\": \"langchain-ai/langchain\",\n    \"githubUrl\": \"https://github.com/langchain-ai/langchain\",\n    \"description\": \"🦜🔗 Build context-aware reasoning applications\",\n    \"owner\": \"langchain-ai\",\n    \"repo\": \"langchain\"\n  },\n  \"LangChain MCP Adapters\": {\n    \"title\": \"LangChain MCP Adapters\",\n    \"repoName\": \"langchain-ai/langchain-mcp-adapters\",\n    \"githubUrl\": \"https://github.com/langchain-ai/langchain-mcp-adapters\",\n    \"description\": \"\",\n    \"owner\": \"langchain-ai\",\n    \"repo\": \"langchain-mcp-adapters\"\n  },\n  \"LangChainJS\": {\n    \"title\": \"LangChainJS\",\n    \"repoName\": \"langchain-ai/langchainjs\",\n    \"githubUrl\": \"https://github.com/langchain-ai/langchainjs\",\n    \"description\": \"🦜🔗 Build context-aware reasoning applications 🦜🔗\",\n    \"owner\": \"langchain-ai\",\n    \"repo\": \"langchainjs\"\n  },\n  \"LangGraph\": {\n    \"title\": \"LangGraph\",\n    \"repoName\": \"langchain-ai/langgraph\",\n    \"githubUrl\": \"https://github.com/langchain-ai/langgraph\",\n    \"description\": \"Build resilient language agents as graphs.\",\n    \"owner\": \"langchain-ai\",\n    \"repo\": \"langgraph\"\n  },\n  \"LangGraph Supervisor\": {\n    \"title\": \"LangGraph Supervisor\",\n    \"repoName\": \"langchain-ai/langgraph-supervisor-py\",\n    \"githubUrl\": \"https://github.com/langchain-ai/langgraph-supervisor-py\",\n    \"description\": \"\",\n    \"owner\": \"langchain-ai\",\n    \"repo\": \"langgraph-supervisor-py\"\n  },\n  \"Langgraph Swarm\": {\n    \"title\": \"Langgraph Swarm\",\n    \"repoName\": \"langchain-ai/langgraph-swarm-py\",\n    \"githubUrl\": \"https://github.com/langchain-ai/langgraph-swarm-py\",\n    \"description\": \"\",\n    \"owner\": \"langchain-ai\",\n    \"repo\": \"langgraph-swarm-py\"\n  },\n  \"LangGraphJS\": {\n    \"title\": \"LangGraphJS\",\n    \"repoName\": \"langchain-ai/langgraphjs\",\n    \"githubUrl\": \"https://github.com/langchain-ai/langgraphjs\",\n    \"description\": \"Framework to build resilient language agents as graphs.\",\n    \"owner\": \"langchain-ai\",\n    \"repo\": \"langgraphjs\"\n  },\n  \"LangGraph.js Generative UI Examples\": {\n    \"title\": \"LangGraph.js Generative UI Examples\",\n    \"repoName\": \"langchain-ai/langgraphjs-gen-ui-examples\",\n    \"githubUrl\": \"https://github.com/langchain-ai/langgraphjs-gen-ui-examples\",\n    \"description\": \"A collection of generative UI agents written with LangGraph.js\",\n    \"owner\": \"langchain-ai\",\n    \"repo\": \"langgraphjs-gen-ui-examples\"\n  },\n  \"LangSmith SDK\": {\n    \"title\": \"LangSmith SDK\",\n    \"repoName\": \"langchain-ai/langsmith-sdk\",\n    \"githubUrl\": \"https://github.com/langchain-ai/langsmith-sdk\",\n    \"description\": \"LangSmith Client SDK Implementations\",\n    \"owner\": \"langchain-ai\",\n    \"repo\": \"langsmith-sdk\"\n  },\n  \"Open Canvas\": {\n    \"title\": \"Open Canvas\",\n    \"repoName\": \"langchain-ai/open-canvas\",\n    \"githubUrl\": \"https://github.com/langchain-ai/open-canvas\",\n    \"description\": \"📃 A better UX for chat, writing content, and coding with LLMs.\",\n    \"owner\": \"langchain-ai\",\n    \"repo\": \"open-canvas\"\n  },\n  \"LangChain4j\": {\n    \"title\": \"LangChain4j\",\n    \"repoName\": \"langchain4j/langchain4j\",\n    \"githubUrl\": \"https://github.com/langchain4j/langchain4j\",\n    \"description\": \"Java version of LangChain\",\n    \"owner\": \"langchain4j\",\n    \"repo\": \"langchain4j\"\n  },\n  \"Langflow\": {\n    \"title\": \"Langflow\",\n    \"repoName\": \"langflow-ai/langflow\",\n    \"githubUrl\": \"https://github.com/langflow-ai/langflow\",\n    \"description\": \"Langflow is a powerful tool for building and deploying AI-powered agents and workflows.\",\n    \"owner\": \"langflow-ai\",\n    \"repo\": \"langflow\"\n  },\n  \"Langfuse\": {\n    \"title\": \"Langfuse\",\n    \"repoName\": \"langfuse/langfuse\",\n    \"githubUrl\": \"https://github.com/langfuse/langfuse\",\n    \"description\": \"🪢 Open source LLM engineering platform: LLM Observability, metrics, evals, prompt management, playground, datasets. Integrates with OpenTelemetry, Langchain, OpenAI SDK, LiteLLM, and more. 🍊YC W23 \",\n    \"owner\": \"langfuse\",\n    \"repo\": \"langfuse\"\n  },\n  \"Langfuse Python SDK\": {\n    \"title\": \"Langfuse Python SDK\",\n    \"repoName\": \"langfuse/langfuse-python\",\n    \"githubUrl\": \"https://github.com/langfuse/langfuse-python\",\n    \"description\": \"🪢 Langfuse Python SDK - Instrument your LLM app with decorators or low-level SDK and get detailed tracing/observability. Works with any LLM or framework\",\n    \"owner\": \"langfuse\",\n    \"repo\": \"langfuse-python\"\n  },\n  \"Dify\": {\n    \"title\": \"Dify\",\n    \"repoName\": \"langgenius/dify-docs\",\n    \"githubUrl\": \"https://github.com/langgenius/dify-docs\",\n    \"description\": \"The open-source repo for docs.dify.ai\",\n    \"owner\": \"langgenius\",\n    \"repo\": \"dify-docs\"\n  },\n  \"Laravel Backpack\": {\n    \"title\": \"Laravel Backpack\",\n    \"repoName\": \"laravel-backpack/docs?folders=6.x\",\n    \"githubUrl\": \"https://github.com/laravel-backpack/docs\",\n    \"description\": \"\",\n    \"owner\": \"laravel-backpack\",\n    \"repo\": \"docs?folders=6.x\"\n  },\n  \"Laravel\": {\n    \"title\": \"Laravel\",\n    \"repoName\": \"laravel/docs\",\n    \"githubUrl\": \"https://github.com/laravel/docs\",\n    \"description\": \"The Laravel documentation.\",\n    \"owner\": \"laravel\",\n    \"repo\": \"docs\"\n  },\n  \"Laravel Wayfinder\": {\n    \"title\": \"Laravel Wayfinder\",\n    \"repoName\": \"laravel/wayfinder\",\n    \"githubUrl\": \"https://github.com/laravel/wayfinder\",\n    \"description\": \"\",\n    \"owner\": \"laravel\",\n    \"repo\": \"wayfinder\"\n  },\n  \"Open-Vocabulary Camouflaged Object Segmentation\": {\n    \"title\": \"Open-Vocabulary Camouflaged Object Segmentation\",\n    \"repoName\": \"lartpang/ovcamo\",\n    \"githubUrl\": \"https://github.com/lartpang/ovcamo\",\n    \"description\": \"(ECCV 2024) Open-Vocabulary Camouflaged Object Segmentation\",\n    \"owner\": \"lartpang\",\n    \"repo\": \"ovcamo\"\n  },\n  \"MCP Agent\": {\n    \"title\": \"MCP Agent\",\n    \"repoName\": \"lastmile-ai/mcp-agent\",\n    \"githubUrl\": \"https://github.com/lastmile-ai/mcp-agent\",\n    \"description\": \"Build effective agents using Model Context Protocol and simple workflow patterns\",\n    \"owner\": \"lastmile-ai\",\n    \"repo\": \"mcp-agent\"\n  },\n  \"SQLx\": {\n    \"title\": \"SQLx\",\n    \"repoName\": \"launchbadge/sqlx\",\n    \"githubUrl\": \"https://github.com/launchbadge/sqlx\",\n    \"description\": \"🧰 The Rust SQL Toolkit. An async, pure Rust SQL crate featuring compile-time checked queries without a DSL. Supports PostgreSQL, MySQL, and SQLite.\",\n    \"owner\": \"launchbadge\",\n    \"repo\": \"sqlx\"\n  },\n  \"Wavs Foundry Template\": {\n    \"title\": \"Wavs Foundry Template\",\n    \"repoName\": \"lay3rlabs/wavs-foundry-template\",\n    \"githubUrl\": \"https://github.com/lay3rlabs/wavs-foundry-template\",\n    \"description\": \"\",\n    \"owner\": \"lay3rlabs\",\n    \"repo\": \"wavs-foundry-template\"\n  },\n  \"EigenLayer\": {\n    \"title\": \"EigenLayer\",\n    \"repoName\": \"layr-labs/eigenlayer-docs\",\n    \"githubUrl\": \"https://github.com/layr-labs/eigenlayer-docs\",\n    \"description\": \"\",\n    \"owner\": \"layr-labs\",\n    \"repo\": \"eigenlayer-docs\"\n  },\n  \"Leaflet\": {\n    \"title\": \"Leaflet\",\n    \"repoName\": \"leaflet/leaflet\",\n    \"githubUrl\": \"https://github.com/leaflet/leaflet\",\n    \"description\": \"🍃 JavaScript library for mobile-friendly interactive maps 🇺🇦\",\n    \"owner\": \"leaflet\",\n    \"repo\": \"leaflet\"\n  },\n  \"LearnOpenGL\": {\n    \"title\": \"LearnOpenGL\",\n    \"repoName\": \"learnopengl-cn/learnopengl-cn\",\n    \"githubUrl\": \"https://github.com/learnopengl-cn/learnopengl-cn\",\n    \"description\": \"http://learnopengl.com 系列教程的简体中文翻译\",\n    \"owner\": \"learnopengl-cn\",\n    \"repo\": \"learnopengl-cn\"\n  },\n  \"Legend\": {\n    \"title\": \"Legend\",\n    \"repoName\": \"legendapp/legend-docs\",\n    \"githubUrl\": \"https://github.com/legendapp/legend-docs\",\n    \"description\": \"The documentation for Legend's open source projects\",\n    \"owner\": \"legendapp\",\n    \"repo\": \"legend-docs\"\n  },\n  \"Legend-State\": {\n    \"title\": \"Legend-State\",\n    \"repoName\": \"legendapp/legend-state\",\n    \"githubUrl\": \"https://github.com/legendapp/legend-state\",\n    \"description\": \"Legend-State is a super fast and powerful state library that enables fine-grained reactivity and easy automatic persistence\",\n    \"owner\": \"legendapp\",\n    \"repo\": \"legend-state\"\n  },\n  \"Leptos\": {\n    \"title\": \"Leptos\",\n    \"repoName\": \"leptos-rs/leptos\",\n    \"githubUrl\": \"https://github.com/leptos-rs/leptos\",\n    \"description\": \"Build fast web applications with Rust.\",\n    \"owner\": \"leptos-rs\",\n    \"repo\": \"leptos\"\n  },\n  \"Let's Encrypt\": {\n    \"title\": \"Let's Encrypt\",\n    \"repoName\": \"letsencrypt/website\",\n    \"githubUrl\": \"https://github.com/letsencrypt/website\",\n    \"description\": \"Let's Encrypt Website and Documentation\",\n    \"owner\": \"letsencrypt\",\n    \"repo\": \"website\"\n  },\n  \"Letta\": {\n    \"title\": \"Letta\",\n    \"repoName\": \"letta-ai/letta\",\n    \"githubUrl\": \"https://github.com/letta-ai/letta\",\n    \"description\": \"Letta (formerly MemGPT) is the stateful agents framework with memory, reasoning, and context management.\",\n    \"owner\": \"letta-ai\",\n    \"repo\": \"letta\"\n  },\n  \"Curl CFFI\": {\n    \"title\": \"Curl CFFI\",\n    \"repoName\": \"lexiforest/curl_cffi\",\n    \"githubUrl\": \"https://github.com/lexiforest/curl_cffi\",\n    \"description\": \"Python binding for curl-impersonate fork via cffi. A http client that can impersonate browser tls/ja3/http2 fingerprints.\",\n    \"owner\": \"lexiforest\",\n    \"repo\": \"curl_cffi\"\n  },\n  \"PySMI\": {\n    \"title\": \"PySMI\",\n    \"repoName\": \"lextudio/pysmi.git\",\n    \"githubUrl\": \"https://github.com/lextudio/pysmi.git\",\n    \"description\": \"SNMP MIB parser\",\n    \"owner\": \"lextudio\",\n    \"repo\": \"pysmi.git\"\n  },\n  \"PySNMP\": {\n    \"title\": \"PySNMP\",\n    \"repoName\": \"lextudio/pysnmp.git\",\n    \"githubUrl\": \"https://github.com/lextudio/pysnmp.git\",\n    \"description\": \"Python SNMP library\",\n    \"owner\": \"lextudio\",\n    \"repo\": \"pysnmp.git\"\n  },\n  \"C++ Requests: Curl for People\": {\n    \"title\": \"C++ Requests: Curl for People\",\n    \"repoName\": \"libcpr/cpr\",\n    \"githubUrl\": \"https://github.com/libcpr/cpr\",\n    \"description\": \"C++ Requests: Curl for People, a spiritual port of Python Requests.\",\n    \"owner\": \"libcpr\",\n    \"repo\": \"cpr\"\n  },\n  \"Cpr\": {\n    \"title\": \"Cpr\",\n    \"repoName\": \"libcpr/docs\",\n    \"githubUrl\": \"https://github.com/libcpr/docs\",\n    \"description\": \"GitHub Pages repo containing documentation for cpr.\",\n    \"owner\": \"libcpr\",\n    \"repo\": \"docs\"\n  },\n  \"Libigl Python Bindings\": {\n    \"title\": \"Libigl Python Bindings\",\n    \"repoName\": \"libigl/libigl-python-bindings\",\n    \"githubUrl\": \"https://github.com/libigl/libigl-python-bindings\",\n    \"description\": \"libigl python bindings\",\n    \"owner\": \"libigl\",\n    \"repo\": \"libigl-python-bindings\"\n  },\n  \"Simple Directmedia Layer\": {\n    \"title\": \"Simple Directmedia Layer\",\n    \"repoName\": \"libsdl-org/sdl\",\n    \"githubUrl\": \"https://github.com/libsdl-org/sdl\",\n    \"description\": \"Simple Directmedia Layer\",\n    \"owner\": \"libsdl-org\",\n    \"repo\": \"sdl\"\n  },\n  \"SDL Wiki\": {\n    \"title\": \"SDL Wiki\",\n    \"repoName\": \"libsdl-org/sdlwiki\",\n    \"githubUrl\": \"https://github.com/libsdl-org/sdlwiki\",\n    \"description\": \"This is the raw contents of SDL's wiki. You can edit this through GitHub or at https://wiki.libsdl.org/ now!\",\n    \"owner\": \"libsdl-org\",\n    \"repo\": \"sdlwiki\"\n  },\n  \"Omni SenseVoice\": {\n    \"title\": \"Omni SenseVoice\",\n    \"repoName\": \"lifeiteng/omnisensevoice\",\n    \"githubUrl\": \"https://github.com/lifeiteng/omnisensevoice\",\n    \"description\": \"Omni SenseVoice: High-Speed Speech Recognition with words timestamps 🗣️🎯\",\n    \"owner\": \"lifeiteng\",\n    \"repo\": \"omnisensevoice\"\n  },\n  \"Liferay Portal\": {\n    \"title\": \"Liferay Portal\",\n    \"repoName\": \"liferay/liferay-portal\",\n    \"githubUrl\": \"https://github.com/liferay/liferay-portal\",\n    \"description\": \"\",\n    \"owner\": \"liferay\",\n    \"repo\": \"liferay-portal\"\n  },\n  \"PyTorch Lightning\": {\n    \"title\": \"PyTorch Lightning\",\n    \"repoName\": \"lightning-ai/pytorch-lightning\",\n    \"githubUrl\": \"https://github.com/lightning-ai/pytorch-lightning\",\n    \"description\": \"Pretrain, finetune ANY AI model of ANY size on multiple GPUs, TPUs with zero code changes.\",\n    \"owner\": \"lightning-ai\",\n    \"repo\": \"pytorch-lightning\"\n  },\n  \"Lightning Network Daemon\": {\n    \"title\": \"Lightning Network Daemon\",\n    \"repoName\": \"lightningnetwork/lnd\",\n    \"githubUrl\": \"https://github.com/lightningnetwork/lnd\",\n    \"description\": \"Lightning Network Daemon ⚡️\",\n    \"owner\": \"lightningnetwork\",\n    \"repo\": \"lnd\"\n  },\n  \"Notifiers\": {\n    \"title\": \"Notifiers\",\n    \"repoName\": \"liiight/notifiers\",\n    \"githubUrl\": \"https://github.com/liiight/notifiers\",\n    \"description\": \"The easy way to send notifications\",\n    \"owner\": \"liiight\",\n    \"repo\": \"notifiers\"\n  },\n  \"LikeC4\": {\n    \"title\": \"LikeC4\",\n    \"repoName\": \"likec4/likec4\",\n    \"githubUrl\": \"https://github.com/likec4/likec4\",\n    \"description\": \"Visualize, collaborate, and evolve the software architecture with always actual and live diagrams from your code\",\n    \"owner\": \"likec4\",\n    \"repo\": \"likec4\"\n  },\n  \"Vello\": {\n    \"title\": \"Vello\",\n    \"repoName\": \"linebender/vello\",\n    \"githubUrl\": \"https://github.com/linebender/vello\",\n    \"description\": \"A GPU compute-centric 2D renderer.\",\n    \"owner\": \"linebender\",\n    \"repo\": \"vello\"\n  },\n  \"Vello SVG\": {\n    \"title\": \"Vello SVG\",\n    \"repoName\": \"linebender/vello_svg\",\n    \"githubUrl\": \"https://github.com/linebender/vello_svg\",\n    \"description\": \"An integration to render SVG files with Vello.\",\n    \"owner\": \"linebender\",\n    \"repo\": \"vello_svg\"\n  },\n  \"Lingui\": {\n    \"title\": \"Lingui\",\n    \"repoName\": \"lingui/js-lingui\",\n    \"githubUrl\": \"https://github.com/lingui/js-lingui\",\n    \"description\": \"🌍 📖 A readable, automated, and optimized (3 kb) internationalization for JavaScript\",\n    \"owner\": \"lingui\",\n    \"repo\": \"js-lingui\"\n  },\n  \"LinkML\": {\n    \"title\": \"LinkML\",\n    \"repoName\": \"linkml/linkml\",\n    \"githubUrl\": \"https://github.com/linkml/linkml\",\n    \"description\": \"Linked Open Data Modeling Language\",\n    \"owner\": \"linkml\",\n    \"repo\": \"linkml\"\n  },\n  \"Astral\": {\n    \"title\": \"Astral\",\n    \"repoName\": \"lino-levan/astral\",\n    \"githubUrl\": \"https://github.com/lino-levan/astral\",\n    \"description\": \"A high-level puppeteer/playwright-like library for Deno\",\n    \"owner\": \"lino-levan\",\n    \"repo\": \"astral\"\n  },\n  \"Lint Staged\": {\n    \"title\": \"Lint Staged\",\n    \"repoName\": \"lint-staged/lint-staged\",\n    \"githubUrl\": \"https://github.com/lint-staged/lint-staged\",\n    \"description\": \"🚫💩 — Run tasks like formatters and linters against staged git files\",\n    \"owner\": \"lint-staged\",\n    \"repo\": \"lint-staged\"\n  },\n  \"LinuxCNC\": {\n    \"title\": \"LinuxCNC\",\n    \"repoName\": \"linuxcnc/linuxcnc\",\n    \"githubUrl\": \"https://github.com/linuxcnc/linuxcnc\",\n    \"description\": \"LinuxCNC controls CNC machines. It can drive milling machines, lathes, 3d printers, laser cutters, plasma cutters, robot arms, hexapods, and more.\",\n    \"owner\": \"linuxcnc\",\n    \"repo\": \"linuxcnc\"\n  },\n  \"Lit Protocol\": {\n    \"title\": \"Lit Protocol\",\n    \"repoName\": \"lit-protocol/docs\",\n    \"githubUrl\": \"https://github.com/lit-protocol/docs\",\n    \"description\": \"Developer docs for Lit Protocol. Learn about encryption, access control. and programmatic signing.\",\n    \"owner\": \"lit-protocol\",\n    \"repo\": \"docs\"\n  },\n  \"LitElement\": {\n    \"title\": \"LitElement\",\n    \"repoName\": \"lit/lit-element\",\n    \"githubUrl\": \"https://github.com/lit/lit-element\",\n    \"description\": \"LEGACY REPO. This repository is for maintenance of the legacy LitElement library. The LitElement base class is now part of the Lit library, which is developed in the lit monorepo.\",\n    \"owner\": \"lit\",\n    \"repo\": \"lit-element\"\n  },\n  \"Lit\": {\n    \"title\": \"Lit\",\n    \"repoName\": \"lit/lit.dev\",\n    \"githubUrl\": \"https://github.com/lit/lit.dev\",\n    \"description\": \"The Lit website\",\n    \"owner\": \"lit\",\n    \"repo\": \"lit.dev\"\n  },\n  \"OpenLiteSpeed Docker Environment\": {\n    \"title\": \"OpenLiteSpeed Docker Environment\",\n    \"repoName\": \"litespeedtech/ols-docker-env\",\n    \"githubUrl\": \"https://github.com/litespeedtech/ols-docker-env\",\n    \"description\": \"OpenLiteSpeed Docker Environment\",\n    \"owner\": \"litespeedtech\",\n    \"repo\": \"ols-docker-env\"\n  },\n  \"OpenLiteSpeed\": {\n    \"title\": \"OpenLiteSpeed\",\n    \"repoName\": \"litespeedtech/openlitespeed\",\n    \"githubUrl\": \"https://github.com/litespeedtech/openlitespeed\",\n    \"description\": \"Our high-performance, lightweight, open source HTTP server \",\n    \"owner\": \"litespeedtech\",\n    \"repo\": \"openlitespeed\"\n  },\n  \"Advanced Alchemy\": {\n    \"title\": \"Advanced Alchemy\",\n    \"repoName\": \"litestar-org/advanced-alchemy\",\n    \"githubUrl\": \"https://github.com/litestar-org/advanced-alchemy\",\n    \"description\": \"A carefully crafted, thoroughly tested, optimized companion library for SQLAlchemy\",\n    \"owner\": \"litestar-org\",\n    \"repo\": \"advanced-alchemy\"\n  },\n  \"Litestar\": {\n    \"title\": \"Litestar\",\n    \"repoName\": \"litestar-org/litestar\",\n    \"githubUrl\": \"https://github.com/litestar-org/litestar\",\n    \"description\": \"Production-ready, Light, Flexible and Extensible ASGI API framework | Effortlessly Build Performant APIs\",\n    \"owner\": \"litestar-org\",\n    \"repo\": \"litestar\"\n  },\n  \"LiveCodes\": {\n    \"title\": \"LiveCodes\",\n    \"repoName\": \"live-codes/livecodes\",\n    \"githubUrl\": \"https://github.com/live-codes/livecodes\",\n    \"description\": \"A Code Playground That Just Works!\",\n    \"owner\": \"live-codes\",\n    \"repo\": \"livecodes\"\n  },\n  \"Frimousse\": {\n    \"title\": \"Frimousse\",\n    \"repoName\": \"liveblocks/frimousse\",\n    \"githubUrl\": \"https://github.com/liveblocks/frimousse\",\n    \"description\": \"A lightweight, unstyled, and composable emoji picker for React.\",\n    \"owner\": \"liveblocks\",\n    \"repo\": \"frimousse\"\n  },\n  \"Liveblocks\": {\n    \"title\": \"Liveblocks\",\n    \"repoName\": \"liveblocks/liveblocks\",\n    \"githubUrl\": \"https://github.com/liveblocks/liveblocks\",\n    \"description\": \"The best apps in the AI era aren’t solo experiences—they’re collaborative. Liveblocks provides customizable pre‑built features to make your product multiplayer, engaging, and AI‑ready. All without derailing your roadmap.\",\n    \"owner\": \"liveblocks\",\n    \"repo\": \"liveblocks\"\n  },\n  \"Livebook\": {\n    \"title\": \"Livebook\",\n    \"repoName\": \"livebook-dev/livebook\",\n    \"githubUrl\": \"https://github.com/livebook-dev/livebook\",\n    \"description\": \"Automate code & data workflows with interactive Elixir notebooks\",\n    \"owner\": \"livebook-dev\",\n    \"repo\": \"livebook\"\n  },\n  \"Pythonx\": {\n    \"title\": \"Pythonx\",\n    \"repoName\": \"livebook-dev/pythonx\",\n    \"githubUrl\": \"https://github.com/livebook-dev/pythonx\",\n    \"description\": \"Python interpreter embedded in Elixir\",\n    \"owner\": \"livebook-dev\",\n    \"repo\": \"pythonx\"\n  },\n  \"LiveKit Agents\": {\n    \"title\": \"LiveKit Agents\",\n    \"repoName\": \"livekit/agents\",\n    \"githubUrl\": \"https://github.com/livekit/agents\",\n    \"description\": \"A powerful framework for building realtime voice AI agents 🤖🎙️📹 \",\n    \"owner\": \"livekit\",\n    \"repo\": \"agents\"\n  },\n  \"LiveKit Components JS\": {\n    \"title\": \"LiveKit Components JS\",\n    \"repoName\": \"livekit/components-js\",\n    \"githubUrl\": \"https://github.com/livekit/components-js\",\n    \"description\": \"Official open source React components and examples for building with LiveKit.\",\n    \"owner\": \"livekit\",\n    \"repo\": \"components-js\"\n  },\n  \"LiveKit\": {\n    \"title\": \"LiveKit\",\n    \"repoName\": \"livekit/livekit\",\n    \"githubUrl\": \"https://github.com/livekit/livekit\",\n    \"description\": \"End-to-end stack for WebRTC. SFU media server and SDKs.\",\n    \"owner\": \"livekit\",\n    \"repo\": \"livekit\"\n  },\n  \"LiveKit Python SDKs\": {\n    \"title\": \"LiveKit Python SDKs\",\n    \"repoName\": \"livekit/python-sdks\",\n    \"githubUrl\": \"https://github.com/livekit/python-sdks\",\n    \"description\": \"LiveKit real-time and server SDKs for Python\",\n    \"owner\": \"livekit\",\n    \"repo\": \"python-sdks\"\n  },\n  \"LiveView Native\": {\n    \"title\": \"LiveView Native\",\n    \"repoName\": \"liveview-native/live_view_native\",\n    \"githubUrl\": \"https://github.com/liveview-native/live_view_native\",\n    \"description\": \"A framework for building native applications with Phoenix LiveView\",\n    \"owner\": \"liveview-native\",\n    \"repo\": \"live_view_native\"\n  },\n  \"LiveView Native Client SwiftUI\": {\n    \"title\": \"LiveView Native Client SwiftUI\",\n    \"repoName\": \"liveview-native/liveview-client-swiftui\",\n    \"githubUrl\": \"https://github.com/liveview-native/liveview-client-swiftui\",\n    \"description\": \"\",\n    \"owner\": \"liveview-native\",\n    \"repo\": \"liveview-client-swiftui\"\n  },\n  \"Livewire Flux\": {\n    \"title\": \"Livewire Flux\",\n    \"repoName\": \"livewire/flux\",\n    \"githubUrl\": \"https://github.com/livewire/flux\",\n    \"description\": \"The official Livewire UI component library\",\n    \"owner\": \"livewire\",\n    \"repo\": \"flux\"\n  },\n  \"Livewire\": {\n    \"title\": \"Livewire\",\n    \"repoName\": \"livewire/livewire\",\n    \"githubUrl\": \"https://github.com/livewire/livewire\",\n    \"description\": \"A full-stack framework for Laravel that takes the pain out of building dynamic UIs.\",\n    \"owner\": \"livewire\",\n    \"repo\": \"livewire\"\n  },\n  \"Volt\": {\n    \"title\": \"Volt\",\n    \"repoName\": \"livewire/volt\",\n    \"githubUrl\": \"https://github.com/livewire/volt\",\n    \"description\": \"Volt is an elegantly crafted functional API for Livewire.\",\n    \"owner\": \"livewire\",\n    \"repo\": \"volt\"\n  },\n  \"LlamaEdge\": {\n    \"title\": \"LlamaEdge\",\n    \"repoName\": \"llamaedge/llamaedge\",\n    \"githubUrl\": \"https://github.com/llamaedge/llamaedge\",\n    \"description\": \"The easiest & fastest way to run customized and fine-tuned LLMs locally or on the edge\",\n    \"owner\": \"llamaedge\",\n    \"repo\": \"llamaedge\"\n  },\n  \"LLVM Project\": {\n    \"title\": \"LLVM Project\",\n    \"repoName\": \"llvm/llvm-project\",\n    \"githubUrl\": \"https://github.com/llvm/llvm-project\",\n    \"description\": \"The LLVM Project is a collection of modular and reusable compiler and toolchain technologies.\",\n    \"owner\": \"llvm\",\n    \"repo\": \"llvm-project\"\n  },\n  \"RouteLLM\": {\n    \"title\": \"RouteLLM\",\n    \"repoName\": \"lm-sys/routellm\",\n    \"githubUrl\": \"https://github.com/lm-sys/routellm\",\n    \"description\": \"A framework for serving and evaluating LLM routers - save LLM costs without compromising quality\",\n    \"owner\": \"lm-sys\",\n    \"repo\": \"routellm\"\n  },\n  \"Lemon Squeezy.js\": {\n    \"title\": \"Lemon Squeezy.js\",\n    \"repoName\": \"lmsqueezy/lemonsqueezy.js\",\n    \"githubUrl\": \"https://github.com/lmsqueezy/lemonsqueezy.js\",\n    \"description\": \"Official JavaScript SDK for Lemon Squeezy.\",\n    \"owner\": \"lmsqueezy\",\n    \"repo\": \"lemonsqueezy.js\"\n  },\n  \"LM Studio\": {\n    \"title\": \"LM Studio\",\n    \"repoName\": \"lmstudio-ai/docs\",\n    \"githubUrl\": \"https://github.com/lmstudio-ai/docs\",\n    \"description\": \"LM Studio App and Developer Docs\",\n    \"owner\": \"lmstudio-ai\",\n    \"repo\": \"docs\"\n  },\n  \"LM Studio JS\": {\n    \"title\": \"LM Studio JS\",\n    \"repoName\": \"lmstudio-ai/lmstudio-js\",\n    \"githubUrl\": \"https://github.com/lmstudio-ai/lmstudio-js\",\n    \"description\": \"LM Studio TypeScript SDK\",\n    \"owner\": \"lmstudio-ai\",\n    \"repo\": \"lmstudio-js\"\n  },\n  \"LM Studio Python SDK\": {\n    \"title\": \"LM Studio Python SDK\",\n    \"repoName\": \"lmstudio-ai/lmstudio-python\",\n    \"githubUrl\": \"https://github.com/lmstudio-ai/lmstudio-python\",\n    \"description\": \"LM Studio Python SDK\",\n    \"owner\": \"lmstudio-ai\",\n    \"repo\": \"lmstudio-python\"\n  },\n  \"Lobe Chat\": {\n    \"title\": \"Lobe Chat\",\n    \"repoName\": \"lobehub/lobe-chat\",\n    \"githubUrl\": \"https://github.com/lobehub/lobe-chat\",\n    \"description\": \"🤯 Lobe Chat - an open-source, modern-design AI chat framework. Supports Multi AI Providers( OpenAI / Claude 3 / Gemini / Ollama / DeepSeek / Qwen), Knowledge Base (file upload / knowledge management / RAG ), Multi-Modals (Plugins/Artifacts) and Thinking. One-click FREE deployment of your private ChatGPT/ Claude / DeepSeek application.\",\n    \"owner\": \"lobehub\",\n    \"repo\": \"lobe-chat\"\n  },\n  \"Lobe Icons\": {\n    \"title\": \"Lobe Icons\",\n    \"repoName\": \"lobehub/lobe-icons\",\n    \"githubUrl\": \"https://github.com/lobehub/lobe-icons\",\n    \"description\": \"🥨 Lobe Icons - Popular AI / LLM Model Brand SVG Logo and Icon Collection.\",\n    \"owner\": \"lobehub\",\n    \"repo\": \"lobe-icons\"\n  },\n  \"Loco\": {\n    \"title\": \"Loco\",\n    \"repoName\": \"loco-rs/loco\",\n    \"githubUrl\": \"https://github.com/loco-rs/loco\",\n    \"description\": \"🚂 🦀 The one-person framework for Rust for side-projects and startups\",\n    \"owner\": \"loco-rs\",\n    \"repo\": \"loco\"\n  },\n  \"Lodash\": {\n    \"title\": \"Lodash\",\n    \"repoName\": \"lodash/lodash\",\n    \"githubUrl\": \"https://github.com/lodash/lodash\",\n    \"description\": \"A modern JavaScript utility library delivering modularity, performance, & extras.\",\n    \"owner\": \"lodash\",\n    \"repo\": \"lodash\"\n  },\n  \"React Native True Sheet\": {\n    \"title\": \"React Native True Sheet\",\n    \"repoName\": \"lodev09/react-native-true-sheet\",\n    \"githubUrl\": \"https://github.com/lodev09/react-native-true-sheet\",\n    \"description\": \"The true native bottom sheet experience 💩\",\n    \"owner\": \"lodev09\",\n    \"repo\": \"react-native-true-sheet\"\n  },\n  \"VeeValidate\": {\n    \"title\": \"VeeValidate\",\n    \"repoName\": \"logaretm/vee-validate\",\n    \"githubUrl\": \"https://github.com/logaretm/vee-validate\",\n    \"description\": \"✅  Painless Vue forms\",\n    \"owner\": \"logaretm\",\n    \"repo\": \"vee-validate\"\n  },\n  \"Logflare\": {\n    \"title\": \"Logflare\",\n    \"repoName\": \"logflare/logflare\",\n    \"githubUrl\": \"https://github.com/logflare/logflare\",\n    \"description\": \"Never get surprised by a logging bill again. Centralized structured logging for Cloudflare, Vercel, Elixir and Javascript.\",\n    \"owner\": \"logflare\",\n    \"repo\": \"logflare\"\n  },\n  \"Retroui\": {\n    \"title\": \"Retroui\",\n    \"repoName\": \"logging-stuff/retroui\",\n    \"githubUrl\": \"https://github.com/logging-stuff/retroui\",\n    \"description\": \"A retro-styled UI library for modern web applications.\",\n    \"owner\": \"logging-stuff\",\n    \"repo\": \"retroui\"\n  },\n  \"Model Context Protocol SDK for PHP\": {\n    \"title\": \"Model Context Protocol SDK for PHP\",\n    \"repoName\": \"logiscape/mcp-sdk-php\",\n    \"githubUrl\": \"https://github.com/logiscape/mcp-sdk-php\",\n    \"description\": \"Model Context Protocol SDK for PHP\",\n    \"owner\": \"logiscape\",\n    \"repo\": \"mcp-sdk-php\"\n  },\n  \"Logo\": {\n    \"title\": \"Logo\",\n    \"repoName\": \"logo-dev/docs.logo.dev.git\",\n    \"githubUrl\": \"https://github.com/logo-dev/docs.logo.dev.git\",\n    \"description\": \"\",\n    \"owner\": \"logo-dev\",\n    \"repo\": \"docs.logo.dev.git\"\n  },\n  \"Logo API\": {\n    \"title\": \"Logo API\",\n    \"repoName\": \"logo-dev/logo-api.git\",\n    \"githubUrl\": \"https://github.com/logo-dev/logo-api.git\",\n    \"description\": \"Free company logo and brand API 🖼️\",\n    \"owner\": \"logo-dev\",\n    \"repo\": \"logo-api.git\"\n  },\n  \"Logtalk\": {\n    \"title\": \"Logtalk\",\n    \"repoName\": \"logtalkdotorg/logtalk3\",\n    \"githubUrl\": \"https://github.com/logtalkdotorg/logtalk3\",\n    \"description\": \"Logtalk - declarative object-oriented logic programming language\",\n    \"owner\": \"logtalkdotorg\",\n    \"repo\": \"logtalk3\"\n  },\n  \"Logto\": {\n    \"title\": \"Logto\",\n    \"repoName\": \"logto-io/docs.git\",\n    \"githubUrl\": \"https://github.com/logto-io/docs.git\",\n    \"description\": \"📖 Logto docs.\",\n    \"owner\": \"logto-io\",\n    \"repo\": \"docs.git\"\n  },\n  \"Telethon\": {\n    \"title\": \"Telethon\",\n    \"repoName\": \"lonamiwebs/telethon\",\n    \"githubUrl\": \"https://github.com/lonamiwebs/telethon\",\n    \"description\": \"Pure Python 3 MTProto API Telegram client library, for bots too!\",\n    \"owner\": \"lonamiwebs\",\n    \"repo\": \"telethon\"\n  },\n  \"AdonisJS Lucid Filter\": {\n    \"title\": \"AdonisJS Lucid Filter\",\n    \"repoName\": \"lookinlab/adonis-lucid-filter\",\n    \"githubUrl\": \"https://github.com/lookinlab/adonis-lucid-filter\",\n    \"description\": \"Addon for filtering AdonisJS Lucid ORM\",\n    \"owner\": \"lookinlab\",\n    \"repo\": \"adonis-lucid-filter\"\n  },\n  \"AdonisJS Lucid Soft Deletes\": {\n    \"title\": \"AdonisJS Lucid Soft Deletes\",\n    \"repoName\": \"lookinlab/adonis-lucid-soft-deletes\",\n    \"githubUrl\": \"https://github.com/lookinlab/adonis-lucid-soft-deletes\",\n    \"description\": \"Addon for soft deletes AdonisJS Lucid ORM\",\n    \"owner\": \"lookinlab\",\n    \"repo\": \"adonis-lucid-soft-deletes\"\n  },\n  \"LoopBack\": {\n    \"title\": \"LoopBack\",\n    \"repoName\": \"loopbackio/loopback.io\",\n    \"githubUrl\": \"https://github.com/loopbackio/loopback.io\",\n    \"description\": \"LoopBack project site - now with documentation!\",\n    \"owner\": \"loopbackio\",\n    \"repo\": \"loopback.io\"\n  },\n  \"Laravel Actions\": {\n    \"title\": \"Laravel Actions\",\n    \"repoName\": \"lorisleiva/laravel-actions\",\n    \"githubUrl\": \"https://github.com/lorisleiva/laravel-actions\",\n    \"description\": \"⚡️ Laravel components that take care of one specific task\",\n    \"owner\": \"lorisleiva\",\n    \"repo\": \"laravel-actions\"\n  },\n  \"LOTUS\": {\n    \"title\": \"LOTUS\",\n    \"repoName\": \"lotus-data/lotus\",\n    \"githubUrl\": \"https://github.com/lotus-data/lotus\",\n    \"description\": \"LOTUS: A semantic query engine for fast and easy LLM-powered data processing\",\n    \"owner\": \"lotus-data\",\n    \"repo\": \"lotus\"\n  },\n  \"LÖVE\": {\n    \"title\": \"LÖVE\",\n    \"repoName\": \"love2d/love\",\n    \"githubUrl\": \"https://github.com/love2d/love\",\n    \"description\": \"LÖVE is an awesome 2D game framework for Lua.\",\n    \"owner\": \"love2d\",\n    \"repo\": \"love\"\n  },\n  \"Sharp\": {\n    \"title\": \"Sharp\",\n    \"repoName\": \"lovell/sharp\",\n    \"githubUrl\": \"https://github.com/lovell/sharp\",\n    \"description\": \"High performance Node.js image processing, the fastest module to resize JPEG, PNG, WebP, AVIF and TIFF images. Uses the libvips library.\",\n    \"owner\": \"lovell\",\n    \"repo\": \"sharp\"\n  },\n  \"Luau\": {\n    \"title\": \"Luau\",\n    \"repoName\": \"luau-lang/luau\",\n    \"githubUrl\": \"https://github.com/luau-lang/luau\",\n    \"description\": \"A fast, small, safe, gradually typed embeddable scripting language derived from Lua\",\n    \"owner\": \"luau-lang\",\n    \"repo\": \"luau\"\n  },\n  \"Lucide\": {\n    \"title\": \"Lucide\",\n    \"repoName\": \"lucide-icons/lucide\",\n    \"githubUrl\": \"https://github.com/lucide-icons/lucide\",\n    \"description\": \"Beautiful & consistent icon toolkit made by the community. Open-source project and a fork of Feather Icons.\",\n    \"owner\": \"lucide-icons\",\n    \"repo\": \"lucide\"\n  },\n  \"Clsx\": {\n    \"title\": \"Clsx\",\n    \"repoName\": \"lukeed/clsx\",\n    \"githubUrl\": \"https://github.com/lukeed/clsx\",\n    \"description\": \"A tiny (239B) utility for constructing `className` strings conditionally.\",\n    \"owner\": \"lukeed\",\n    \"repo\": \"clsx\"\n  },\n  \"Lume.land\": {\n    \"title\": \"Lume.land\",\n    \"repoName\": \"lumeland/lume.land\",\n    \"githubUrl\": \"https://github.com/lumeland/lume.land\",\n    \"description\": \"The website of lume.land\",\n    \"owner\": \"lumeland\",\n    \"repo\": \"lume.land\"\n  },\n  \"Lunar\": {\n    \"title\": \"Lunar\",\n    \"repoName\": \"lunarphp/lunar\",\n    \"githubUrl\": \"https://github.com/lunarphp/lunar\",\n    \"description\": \"An open-source package that brings the power of modern headless e-commerce functionality to Laravel.\",\n    \"owner\": \"lunarphp\",\n    \"repo\": \"lunar\"\n  },\n  \"MCP Bridge\": {\n    \"title\": \"MCP Bridge\",\n    \"repoName\": \"lutzleonhardt/mcp-bridge\",\n    \"githubUrl\": \"https://github.com/lutzleonhardt/mcp-bridge\",\n    \"description\": \"A middleware to provide an openAI compatible endpoint that can call MCP tools\",\n    \"owner\": \"lutzleonhardt\",\n    \"repo\": \"mcp-bridge\"\n  },\n  \"Incus\": {\n    \"title\": \"Incus\",\n    \"repoName\": \"lxc/incus\",\n    \"githubUrl\": \"https://github.com/lxc/incus\",\n    \"description\": \"Powerful system container and virtual machine manager \",\n    \"owner\": \"lxc\",\n    \"repo\": \"incus\"\n  },\n  \"Lxml\": {\n    \"title\": \"Lxml\",\n    \"repoName\": \"lxml/lxml\",\n    \"githubUrl\": \"https://github.com/lxml/lxml\",\n    \"description\": \"The lxml XML toolkit for Python\",\n    \"owner\": \"lxml\",\n    \"repo\": \"lxml\"\n  },\n  \"Lynx\": {\n    \"title\": \"Lynx\",\n    \"repoName\": \"lynx-family/lynx-examples\",\n    \"githubUrl\": \"https://github.com/lynx-family/lynx-examples\",\n    \"description\": \"🚀 Comprehensive Lynx Examples\",\n    \"owner\": \"lynx-family\",\n    \"repo\": \"lynx-examples\"\n  },\n  \"Lynx Stack\": {\n    \"title\": \"Lynx Stack\",\n    \"repoName\": \"lynx-family/lynx-stack\",\n    \"githubUrl\": \"https://github.com/lynx-family/lynx-stack\",\n    \"description\": \"The framework and toolset of Lynx\",\n    \"owner\": \"lynx-family\",\n    \"repo\": \"lynx-stack\"\n  },\n  \"Lynx Family Website\": {\n    \"title\": \"Lynx Family Website\",\n    \"repoName\": \"lynx-family/lynx-website\",\n    \"githubUrl\": \"https://github.com/lynx-family/lynx-website\",\n    \"description\": \"Official Website of the Lynx Family\",\n    \"owner\": \"lynx-family\",\n    \"repo\": \"lynx-website\"\n  },\n  \"WhisperX\": {\n    \"title\": \"WhisperX\",\n    \"repoName\": \"m-bain/whisperx\",\n    \"githubUrl\": \"https://github.com/m-bain/whisperx\",\n    \"description\": \"WhisperX:  Automatic Speech Recognition with Word-level Timestamps (& Diarization)\",\n    \"owner\": \"m-bain\",\n    \"repo\": \"whisperx\"\n  },\n  \"UIFlow MicroPython\": {\n    \"title\": \"UIFlow MicroPython\",\n    \"repoName\": \"m5stack/uiflow-micropython\",\n    \"githubUrl\": \"https://github.com/m5stack/uiflow-micropython\",\n    \"description\": \"uiflow micropython project\",\n    \"owner\": \"m5stack\",\n    \"repo\": \"uiflow-micropython\"\n  },\n  \"Magento 2\": {\n    \"title\": \"Magento 2\",\n    \"repoName\": \"magento/magento2\",\n    \"githubUrl\": \"https://github.com/magento/magento2\",\n    \"description\": \"Prior to making any Submission(s), you must sign an Adobe Contributor License Agreement, available here at: https://opensource.adobe.com/cla.html. All Submissions you make to Adobe Inc. and its affiliates, assigns and subsidiaries (collectively “Adobe”) are subject to the terms of the Adobe Contributor License Agreement.\",\n    \"owner\": \"magento\",\n    \"repo\": \"magento2\"\n  },\n  \"Shadcn\": {\n    \"title\": \"Shadcn\",\n    \"repoName\": \"magicpatterns/shadcdn\",\n    \"githubUrl\": \"https://github.com/magicpatterns/shadcdn\",\n    \"description\": \"Shadcn hosted on a CDN\",\n    \"owner\": \"magicpatterns\",\n    \"repo\": \"shadcdn\"\n  },\n  \"Asyncpg\": {\n    \"title\": \"Asyncpg\",\n    \"repoName\": \"magicstack/asyncpg\",\n    \"githubUrl\": \"https://github.com/magicstack/asyncpg\",\n    \"description\": \"A fast PostgreSQL Database Client Library for Python/asyncio.\",\n    \"owner\": \"magicstack\",\n    \"repo\": \"asyncpg\"\n  },\n  \"Magic UI\": {\n    \"title\": \"Magic UI\",\n    \"repoName\": \"magicuidesign/magicui\",\n    \"githubUrl\": \"https://github.com/magicuidesign/magicui\",\n    \"description\": \"UI Library for Design Engineers. Animated components and effects you can copy and paste into your apps. Free. Open Source.\",\n    \"owner\": \"magicuidesign\",\n    \"repo\": \"magicui\"\n  },\n  \"Maglev Core\": {\n    \"title\": \"Maglev Core\",\n    \"repoName\": \"maglevhq/maglev-core\",\n    \"githubUrl\": \"https://github.com/maglevhq/maglev-core\",\n    \"description\": \"Ruby on Rails website builder \",\n    \"owner\": \"maglevhq\",\n    \"repo\": \"maglev-core\"\n  },\n  \"Boltons\": {\n    \"title\": \"Boltons\",\n    \"repoName\": \"mahmoud/boltons\",\n    \"githubUrl\": \"https://github.com/mahmoud/boltons\",\n    \"description\": \"🔩 Like builtins, but boltons. 250+ constructs, recipes, and snippets which extend (and rely on nothing but) the Python standard library.  Nothing like Michael Bolton.\",\n    \"owner\": \"mahmoud\",\n    \"repo\": \"boltons\"\n  },\n  \"Mailgun\": {\n    \"title\": \"Mailgun\",\n    \"repoName\": \"mailgun/documentation.git\",\n    \"githubUrl\": \"https://github.com/mailgun/documentation.git\",\n    \"description\": \"Mailgun Documentation\",\n    \"owner\": \"mailgun\",\n    \"repo\": \"documentation.git\"\n  },\n  \"QUnit DOM\": {\n    \"title\": \"QUnit DOM\",\n    \"repoName\": \"mainmatter/qunit-dom\",\n    \"githubUrl\": \"https://github.com/mainmatter/qunit-dom\",\n    \"description\": \"High Level DOM Assertions for QUnit\",\n    \"owner\": \"mainmatter\",\n    \"repo\": \"qunit-dom\"\n  },\n  \"Casper .NET SDK\": {\n    \"title\": \"Casper .NET SDK\",\n    \"repoName\": \"make-software/casper-net-sdk\",\n    \"githubUrl\": \"https://github.com/make-software/casper-net-sdk\",\n    \"description\": \".NET SDK to interact with the Casper Network nodes via RPC\",\n    \"owner\": \"make-software\",\n    \"repo\": \"casper-net-sdk\"\n  },\n  \"Makerkit\": {\n    \"title\": \"Makerkit\",\n    \"repoName\": \"sahilpanhotra/makerkitdocs.git\",\n    \"githubUrl\": \"https://github.com/sahilpanhotra/makerkitdocs.git\",\n    \"description\": \"The source of files of the documentation on makerkit.dev\",\n    \"owner\": \"sahilpanhotra\",\n    \"repo\": \"makerkitdocs.git\"\n  },\n  \"Decluttarr\": {\n    \"title\": \"Decluttarr\",\n    \"repoName\": \"manimatter/decluttarr\",\n    \"githubUrl\": \"https://github.com/manimatter/decluttarr\",\n    \"description\": \"Watches radarr, sonarr, lidarr, readarr and whisparr download queues and removes downloads if they become stalled or no longer needed.\",\n    \"owner\": \"manimatter\",\n    \"repo\": \"decluttarr\"\n  },\n  \"Manim\": {\n    \"title\": \"Manim\",\n    \"repoName\": \"manimcommunity/manim\",\n    \"githubUrl\": \"https://github.com/manimcommunity/manim\",\n    \"description\": \"A community-maintained Python framework for creating mathematical animations. \",\n    \"owner\": \"manimcommunity\",\n    \"repo\": \"manim\"\n  },\n  \"OpenManus\": {\n    \"title\": \"OpenManus\",\n    \"repoName\": \"mannaandpoem/openmanus\",\n    \"githubUrl\": \"https://github.com/mannaandpoem/openmanus\",\n    \"description\": \"No fortress, purely open ground.  OpenManus is Coming.\",\n    \"owner\": \"mannaandpoem\",\n    \"repo\": \"openmanus\"\n  },\n  \"Manticore Search\": {\n    \"title\": \"Manticore Search\",\n    \"repoName\": \"manticoresoftware/manticoresearch\",\n    \"githubUrl\": \"https://github.com/manticoresoftware/manticoresearch\",\n    \"description\": \"Easy to use open source fast database for search | Good alternative to Elasticsearch now | Drop-in replacement for E in the ELK soon\",\n    \"owner\": \"manticoresoftware\",\n    \"repo\": \"manticoresearch\"\n  },\n  \"Mantine\": {\n    \"title\": \"Mantine\",\n    \"repoName\": \"mantinedev/mantine\",\n    \"githubUrl\": \"https://github.com/mantinedev/mantine\",\n    \"description\": \"A fully featured React components library\",\n    \"owner\": \"mantinedev\",\n    \"repo\": \"mantine\"\n  },\n  \"Mapbox GL JS\": {\n    \"title\": \"Mapbox GL JS\",\n    \"repoName\": \"mapbox/mapbox-gl-js\",\n    \"githubUrl\": \"https://github.com/mapbox/mapbox-gl-js\",\n    \"description\": \"Interactive, thoroughly customizable maps in the browser, powered by vector tiles and WebGL\",\n    \"owner\": \"mapbox\",\n    \"repo\": \"mapbox-gl-js\"\n  },\n  \"Mapbox Maps iOS\": {\n    \"title\": \"Mapbox Maps iOS\",\n    \"repoName\": \"mapbox/mapbox-maps-ios.git\",\n    \"githubUrl\": \"https://github.com/mapbox/mapbox-maps-ios.git\",\n    \"description\": \"Interactive, thoroughly customizable maps for iOS powered by vector tiles and Metal\",\n    \"owner\": \"mapbox\",\n    \"repo\": \"mapbox-maps-ios.git\"\n  },\n  \"MapLibre GL JS\": {\n    \"title\": \"MapLibre GL JS\",\n    \"repoName\": \"maplibre/maplibre-gl-js\",\n    \"githubUrl\": \"https://github.com/maplibre/maplibre-gl-js\",\n    \"description\": \"MapLibre GL JS - Interactive vector tile maps in the browser\",\n    \"owner\": \"maplibre\",\n    \"repo\": \"maplibre-gl-js\"\n  },\n  \"MapLibre React Native\": {\n    \"title\": \"MapLibre React Native\",\n    \"repoName\": \"maplibre/maplibre-react-native\",\n    \"githubUrl\": \"https://github.com/maplibre/maplibre-react-native\",\n    \"description\": \"React Native library for creating maps with MapLibre Native for Android & iOS.\",\n    \"owner\": \"maplibre\",\n    \"repo\": \"maplibre-react-native\"\n  },\n  \"Gomponents\": {\n    \"title\": \"Gomponents\",\n    \"repoName\": \"maragudk/gomponents\",\n    \"githubUrl\": \"https://github.com/maragudk/gomponents\",\n    \"description\": \"HTML components in pure Go.\",\n    \"owner\": \"maragudk\",\n    \"repo\": \"gomponents\"\n  },\n  \"Bauplan\": {\n    \"title\": \"Bauplan\",\n    \"repoName\": \"marcoeg/bauplan\",\n    \"githubUrl\": \"https://github.com/marcoeg/bauplan\",\n    \"description\": \"Bauplan -  serverless data lakehouse platform for versioned pipelines\",\n    \"owner\": \"marcoeg\",\n    \"repo\": \"bauplan\"\n  },\n  \"Vedo\": {\n    \"title\": \"Vedo\",\n    \"repoName\": \"marcomusy/vedo\",\n    \"githubUrl\": \"https://github.com/marcomusy/vedo\",\n    \"description\": \"A python module for scientific analysis of 3D data based on VTK and Numpy\",\n    \"owner\": \"marcomusy\",\n    \"repo\": \"vedo\"\n  },\n  \"React Native Quick Crypto\": {\n    \"title\": \"React Native Quick Crypto\",\n    \"repoName\": \"margelo/react-native-quick-crypto\",\n    \"githubUrl\": \"https://github.com/margelo/react-native-quick-crypto\",\n    \"description\": \"⚡️ A fast implementation of Node's `crypto` module written in C/C++ JSI\",\n    \"owner\": \"margelo\",\n    \"repo\": \"react-native-quick-crypto\"\n  },\n  \"Marimo\": {\n    \"title\": \"Marimo\",\n    \"repoName\": \"marimo-team/marimo\",\n    \"githubUrl\": \"https://github.com/marimo-team/marimo\",\n    \"description\": \"A reactive notebook for Python — run reproducible experiments, query with SQL, execute as a script, deploy as an app, and version with git. All in a modern, AI-native editor.\",\n    \"owner\": \"marimo-team\",\n    \"repo\": \"marimo\"\n  },\n  \"MCP Go\": {\n    \"title\": \"MCP Go\",\n    \"repoName\": \"mark3labs/mcp-go\",\n    \"githubUrl\": \"https://github.com/mark3labs/mcp-go\",\n    \"description\": \"A Go implementation of the Model Context Protocol (MCP), enabling seamless integration between LLM applications and external data sources and tools.\",\n    \"owner\": \"mark3labs\",\n    \"repo\": \"mcp-go\"\n  },\n  \"HyperUI\": {\n    \"title\": \"HyperUI\",\n    \"repoName\": \"markmead/hyperui\",\n    \"githubUrl\": \"https://github.com/markmead/hyperui\",\n    \"description\": \"Free Tailwind CSS v4 components for your next project, designed to enhance your web development with the latest features and styles 🚀\",\n    \"owner\": \"markmead\",\n    \"repo\": \"hyperui\"\n  },\n  \"React Admin\": {\n    \"title\": \"React Admin\",\n    \"repoName\": \"marmelab/react-admin\",\n    \"githubUrl\": \"https://github.com/marmelab/react-admin\",\n    \"description\": \"A frontend Framework for single-page applications on top of REST/GraphQL APIs, using TypeScript, React and Material Design\",\n    \"owner\": \"marmelab\",\n    \"repo\": \"react-admin\"\n  },\n  \"Marp CLI\": {\n    \"title\": \"Marp CLI\",\n    \"repoName\": \"marp-team/marp-cli\",\n    \"githubUrl\": \"https://github.com/marp-team/marp-cli\",\n    \"description\": \"A CLI interface for Marp and Marpit based converters\",\n    \"owner\": \"marp-team\",\n    \"repo\": \"marp-cli\"\n  },\n  \"TorchODE\": {\n    \"title\": \"TorchODE\",\n    \"repoName\": \"martenlienen/torchode\",\n    \"githubUrl\": \"https://github.com/martenlienen/torchode\",\n    \"description\": \"A parallel ODE solver for PyTorch\",\n    \"owner\": \"martenlienen\",\n    \"repo\": \"torchode\"\n  },\n  \"Mediator\": {\n    \"title\": \"Mediator\",\n    \"repoName\": \"martinothamar/mediator\",\n    \"githubUrl\": \"https://github.com/martinothamar/mediator\",\n    \"description\": \"A high performance implementation of Mediator pattern in .NET using source generators.\",\n    \"owner\": \"martinothamar\",\n    \"repo\": \"mediator\"\n  },\n  \"Svelte 5 LLM Compact\": {\n    \"title\": \"Svelte 5 LLM Compact\",\n    \"repoName\": \"martypara/svelte5-llm-compact\",\n    \"githubUrl\": \"https://github.com/martypara/svelte5-llm-compact\",\n    \"description\": \"Minimal example set for teaching LLMs how Svelte 5 works. Focused on runes, reactivity, event handling, snippets, and typing. Small, clean, prompt-ready. Not official. Not exhaustive.\",\n    \"owner\": \"martypara\",\n    \"repo\": \"svelte5-llm-compact\"\n  },\n  \"MassTransit\": {\n    \"title\": \"MassTransit\",\n    \"repoName\": \"masstransit/masstransit\",\n    \"githubUrl\": \"https://github.com/masstransit/masstransit\",\n    \"description\": \"Distributed Application Framework for .NET\",\n    \"owner\": \"masstransit\",\n    \"repo\": \"masstransit\"\n  },\n  \"Mastra\": {\n    \"title\": \"Mastra\",\n    \"repoName\": \"mastra-ai/mastra\",\n    \"githubUrl\": \"https://github.com/mastra-ai/mastra\",\n    \"description\": \"The TypeScript AI agent framework. ⚡ Assistants, RAG, observability. Supports any LLM: GPT-4, Claude, Gemini, Llama.\",\n    \"owner\": \"mastra-ai\",\n    \"repo\": \"mastra\"\n  },\n  \"MateCat\": {\n    \"title\": \"MateCat\",\n    \"repoName\": \"matecat/matecat\",\n    \"githubUrl\": \"https://github.com/matecat/matecat\",\n    \"description\": \"MateCat is an AI driven translation tool for language industry professionals. Matecat makes machine translation post-editing and project outsourcing easy.\",\n    \"owner\": \"matecat\",\n    \"repo\": \"matecat\"\n  },\n  \"Material Web\": {\n    \"title\": \"Material Web\",\n    \"repoName\": \"material-components/material-web\",\n    \"githubUrl\": \"https://github.com/material-components/material-web\",\n    \"description\": \"Material Design Web Components\",\n    \"owner\": \"material-components\",\n    \"repo\": \"material-web\"\n  },\n  \"Dockview\": {\n    \"title\": \"Dockview\",\n    \"repoName\": \"mathuo/dockview\",\n    \"githubUrl\": \"https://github.com/mathuo/dockview\",\n    \"description\": \"Zero dependency Docking Layout Manager. Supports Vanilla TypeScript, React and Vue.\",\n    \"owner\": \"mathuo\",\n    \"repo\": \"dockview\"\n  },\n  \"React Native Sortables\": {\n    \"title\": \"React Native Sortables\",\n    \"repoName\": \"matipl01/react-native-sortables\",\n    \"githubUrl\": \"https://github.com/matipl01/react-native-sortables\",\n    \"description\": \"🚀 Powerful Sortable Components for Flexible Content Reordering in React Native\",\n    \"owner\": \"matipl01\",\n    \"repo\": \"react-native-sortables\"\n  },\n  \"Matplotlib\": {\n    \"title\": \"Matplotlib\",\n    \"repoName\": \"matplotlib/matplotlib\",\n    \"githubUrl\": \"https://github.com/matplotlib/matplotlib\",\n    \"description\": \"matplotlib: plotting with Python\",\n    \"owner\": \"matplotlib\",\n    \"repo\": \"matplotlib\"\n  },\n  \"MATPOWER\": {\n    \"title\": \"MATPOWER\",\n    \"repoName\": \"matpower/matpower\",\n    \"githubUrl\": \"https://github.com/matpower/matpower\",\n    \"description\": \"MATPOWER – steady state power flow simulation and optimization for MATLAB and Octave\",\n    \"owner\": \"matpower\",\n    \"repo\": \"matpower\"\n  },\n  \"Matrix Nio\": {\n    \"title\": \"Matrix Nio\",\n    \"repoName\": \"matrix-nio/matrix-nio\",\n    \"githubUrl\": \"https://github.com/matrix-nio/matrix-nio\",\n    \"description\": \"A Python Matrix client library, designed according to sans I/O (http://sans-io.readthedocs.io/) principles\",\n    \"owner\": \"matrix-nio\",\n    \"repo\": \"matrix-nio\"\n  },\n  \"Matrix JS SDK\": {\n    \"title\": \"Matrix JS SDK\",\n    \"repoName\": \"matrix-org/matrix-js-sdk\",\n    \"githubUrl\": \"https://github.com/matrix-org/matrix-js-sdk\",\n    \"description\": \"Matrix Client-Server SDK for JavaScript\",\n    \"owner\": \"matrix-org\",\n    \"repo\": \"matrix-js-sdk\"\n  },\n  \"Python Markdownify\": {\n    \"title\": \"Python Markdownify\",\n    \"repoName\": \"matthewwithanm/python-markdownify\",\n    \"githubUrl\": \"https://github.com/matthewwithanm/python-markdownify\",\n    \"description\": \"Convert HTML to Markdown\",\n    \"owner\": \"matthewwithanm\",\n    \"repo\": \"python-markdownify\"\n  },\n  \"PyHanko\": {\n    \"title\": \"PyHanko\",\n    \"repoName\": \"matthiasvalvekens/pyhanko\",\n    \"githubUrl\": \"https://github.com/matthiasvalvekens/pyhanko\",\n    \"description\": \"pyHanko: sign and stamp PDF files\",\n    \"owner\": \"matthiasvalvekens\",\n    \"repo\": \"pyhanko\"\n  },\n  \"Mautic Developer Documentation\": {\n    \"title\": \"Mautic Developer Documentation\",\n    \"repoName\": \"mautic/developer-documentation-new\",\n    \"githubUrl\": \"https://github.com/mautic/developer-documentation-new\",\n    \"description\": \"New developer documentation on Read the Docs\",\n    \"owner\": \"mautic\",\n    \"repo\": \"developer-documentation-new\"\n  },\n  \"Mautic\": {\n    \"title\": \"Mautic\",\n    \"repoName\": \"mautic/mautic\",\n    \"githubUrl\": \"https://github.com/mautic/mautic\",\n    \"description\": \"Mautic: Open Source Marketing Automation Software.\",\n    \"owner\": \"mautic\",\n    \"repo\": \"mautic\"\n  },\n  \"OneOf\": {\n    \"title\": \"OneOf\",\n    \"repoName\": \"mcintyre321/oneof\",\n    \"githubUrl\": \"https://github.com/mcintyre321/oneof\",\n    \"description\": \"Easy to use F#-like ~discriminated~ unions for C# with exhaustive compile time matching\",\n    \"owner\": \"mcintyre321\",\n    \"repo\": \"oneof\"\n  },\n  \"MDB UI Kit\": {\n    \"title\": \"MDB UI Kit\",\n    \"repoName\": \"mdbootstrap/mdb-ui-kit\",\n    \"githubUrl\": \"https://github.com/mdbootstrap/mdb-ui-kit\",\n    \"description\": \"Bootstrap 5 & Material Design UI KIT\",\n    \"owner\": \"mdbootstrap\",\n    \"repo\": \"mdb-ui-kit\"\n  },\n  \"MDN Web Docs\": {\n    \"title\": \"MDN Web Docs\",\n    \"repoName\": \"mdn/content\",\n    \"githubUrl\": \"https://github.com/mdn/content\",\n    \"description\": \"The content behind MDN Web Docs\",\n    \"owner\": \"mdn\",\n    \"repo\": \"content\"\n  },\n  \"Python ULID\": {\n    \"title\": \"Python ULID\",\n    \"repoName\": \"mdomke/python-ulid\",\n    \"githubUrl\": \"https://github.com/mdomke/python-ulid\",\n    \"description\": \"ULID implementation for Python\",\n    \"owner\": \"mdomke\",\n    \"repo\": \"python-ulid\"\n  },\n  \"MDX Editor\": {\n    \"title\": \"MDX Editor\",\n    \"repoName\": \"mdx-editor/editor\",\n    \"githubUrl\": \"https://github.com/mdx-editor/editor\",\n    \"description\": \"A rich text editor React component for markdown\",\n    \"owner\": \"mdx-editor\",\n    \"repo\": \"editor\"\n  },\n  \"Medusa\": {\n    \"title\": \"Medusa\",\n    \"repoName\": \"medusajs/medusa\",\n    \"githubUrl\": \"https://github.com/medusajs/medusa\",\n    \"description\": \"The world's most flexible commerce platform.\",\n    \"owner\": \"medusajs\",\n    \"repo\": \"medusa\"\n  },\n  \"Blazorise\": {\n    \"title\": \"Blazorise\",\n    \"repoName\": \"megabit/blazorise\",\n    \"githubUrl\": \"https://github.com/megabit/blazorise\",\n    \"description\": \"Blazorise is a component library built on top of Blazor with support for CSS frameworks like Bootstrap, Tailwind, Bulma, AntDesign, and Material.\",\n    \"owner\": \"megabit\",\n    \"repo\": \"blazorise\"\n  },\n  \"Meilisearch\": {\n    \"title\": \"Meilisearch\",\n    \"repoName\": \"meilisearch/meilisearch\",\n    \"githubUrl\": \"https://github.com/meilisearch/meilisearch\",\n    \"description\": \"A lightning-fast search engine API bringing AI-powered hybrid search to your sites and applications.\",\n    \"owner\": \"meilisearch\",\n    \"repo\": \"meilisearch\"\n  },\n  \"Mem0\": {\n    \"title\": \"Mem0\",\n    \"repoName\": \"mem0ai/mem0\",\n    \"githubUrl\": \"https://github.com/mem0ai/mem0\",\n    \"description\": \"The Memory layer for AI Agents\",\n    \"owner\": \"mem0ai\",\n    \"repo\": \"mem0\"\n  },\n  \"Backtrader\": {\n    \"title\": \"Backtrader\",\n    \"repoName\": \"mementum/backtrader\",\n    \"githubUrl\": \"https://github.com/mementum/backtrader\",\n    \"description\": \"Python Backtesting library for trading strategies\",\n    \"owner\": \"mementum\",\n    \"repo\": \"backtrader\"\n  },\n  \"FireCrawl\": {\n    \"title\": \"FireCrawl\",\n    \"repoName\": \"mendableai/firecrawl\",\n    \"githubUrl\": \"https://github.com/mendableai/firecrawl\",\n    \"description\": \"🔥 Turn entire websites into LLM-ready markdown or structured data. Scrape, crawl and extract with a single API.\",\n    \"owner\": \"mendableai\",\n    \"repo\": \"firecrawl\"\n  },\n  \"Mendix\": {\n    \"title\": \"Mendix\",\n    \"repoName\": \"mendix/docs\",\n    \"githubUrl\": \"https://github.com/mendix/docs\",\n    \"description\": \"Mendix documentation repository\",\n    \"owner\": \"mendix\",\n    \"repo\": \"docs\"\n  },\n  \"Mercado Pago Devsite\": {\n    \"title\": \"Mercado Pago Devsite\",\n    \"repoName\": \"mercadopago/devsite-docs.git\",\n    \"githubUrl\": \"https://github.com/mercadopago/devsite-docs.git\",\n    \"description\": \"Mercado Pago's Devsite Documentation\",\n    \"owner\": \"mercadopago\",\n    \"repo\": \"devsite-docs.git\"\n  },\n  \"Mercado Pago SDK Go\": {\n    \"title\": \"Mercado Pago SDK Go\",\n    \"repoName\": \"mercadopago/sdk-go.git\",\n    \"githubUrl\": \"https://github.com/mercadopago/sdk-go.git\",\n    \"description\": \"Mercado Pago's Official Go Lang\",\n    \"owner\": \"mercadopago\",\n    \"repo\": \"sdk-go.git\"\n  },\n  \"Mercado Pago Node.js SDK\": {\n    \"title\": \"Mercado Pago Node.js SDK\",\n    \"repoName\": \"mercadopago/sdk-nodejs.git\",\n    \"githubUrl\": \"https://github.com/mercadopago/sdk-nodejs.git\",\n    \"description\": \"Mercado Pago's Official Node.js SDK\",\n    \"owner\": \"mercadopago\",\n    \"repo\": \"sdk-nodejs.git\"\n  },\n  \"Boutique\": {\n    \"title\": \"Boutique\",\n    \"repoName\": \"mergesort/boutique\",\n    \"githubUrl\": \"https://github.com/mergesort/boutique\",\n    \"description\": \"✨ A magical persistence library (and so much more) for state-driven iOS and Mac apps ✨\",\n    \"owner\": \"mergesort\",\n    \"repo\": \"boutique\"\n  },\n  \"Mermaid\": {\n    \"title\": \"Mermaid\",\n    \"repoName\": \"mermaid-js/mermaid\",\n    \"githubUrl\": \"https://github.com/mermaid-js/mermaid\",\n    \"description\": \"Generation of diagrams like flowcharts or sequence diagrams from text in a similar manner as markdown\",\n    \"owner\": \"mermaid-js\",\n    \"repo\": \"mermaid\"\n  },\n  \"PraisonAI\": {\n    \"title\": \"PraisonAI\",\n    \"repoName\": \"mervinpraison/praisonai\",\n    \"githubUrl\": \"https://github.com/mervinpraison/praisonai\",\n    \"description\": \"PraisonAI is a production-ready Multi AI Agents framework, designed to create AI Agents to automate and solve problems ranging from simple tasks to complex challenges. It provides a low-code solution to streamline the building and management of multi-agent LLM systems, emphasising simplicity, customisation, and effective human-agent collaboration.\",\n    \"owner\": \"mervinpraison\",\n    \"repo\": \"praisonai\"\n  },\n  \"Llama\": {\n    \"title\": \"Llama\",\n    \"repoName\": \"meta-llama/llama-cookbook\",\n    \"githubUrl\": \"https://github.com/meta-llama/llama-cookbook\",\n    \"description\": \"Welcome to the Llama Cookbook! This is your go to guide for Building with Llama: Getting started with Inference, Fine-Tuning, RAG. We also show you how to solve end to end problems using Llama model family and using them on various provider services  \",\n    \"owner\": \"meta-llama\",\n    \"repo\": \"llama-cookbook\"\n  },\n  \"Llama Models\": {\n    \"title\": \"Llama Models\",\n    \"repoName\": \"meta-llama/llama-models\",\n    \"githubUrl\": \"https://github.com/meta-llama/llama-models\",\n    \"description\": \"Utilities intended for use with Llama models.\",\n    \"owner\": \"meta-llama\",\n    \"repo\": \"llama-models\"\n  },\n  \"Metabase\": {\n    \"title\": \"Metabase\",\n    \"repoName\": \"metabase/metabase\",\n    \"githubUrl\": \"https://github.com/metabase/metabase\",\n    \"description\": \"The easy-to-use open source Business Intelligence and Embedded Analytics tool that lets everyone work with data :bar_chart:\",\n    \"owner\": \"metabase\",\n    \"repo\": \"metabase\"\n  },\n  \"MetalLB\": {\n    \"title\": \"MetalLB\",\n    \"repoName\": \"metallb/metallb\",\n    \"githubUrl\": \"https://github.com/metallb/metallb\",\n    \"description\": \"A network load-balancer implementation for Kubernetes using standard routing protocols\",\n    \"owner\": \"metallb\",\n    \"repo\": \"metallb\"\n  },\n  \"Metaplex Developer Hub\": {\n    \"title\": \"Metaplex Developer Hub\",\n    \"repoName\": \"metaplex-foundation/developer-hub\",\n    \"githubUrl\": \"https://github.com/metaplex-foundation/developer-hub\",\n    \"description\": \"One place for all Metaplex developer resources\",\n    \"owner\": \"metaplex-foundation\",\n    \"repo\": \"developer-hub\"\n  },\n  \"Kinobi\": {\n    \"title\": \"Kinobi\",\n    \"repoName\": \"metaplex-foundation/kinobi\",\n    \"githubUrl\": \"https://github.com/metaplex-foundation/kinobi\",\n    \"description\": \"Generate powerful clients for your Solana programs.\",\n    \"owner\": \"metaplex-foundation\",\n    \"repo\": \"kinobi\"\n  },\n  \"Metaplex Core\": {\n    \"title\": \"Metaplex Core\",\n    \"repoName\": \"metaplex-foundation/mpl-core\",\n    \"githubUrl\": \"https://github.com/metaplex-foundation/mpl-core\",\n    \"description\": \"\",\n    \"owner\": \"metaplex-foundation\",\n    \"repo\": \"mpl-core\"\n  },\n  \"Umi\": {\n    \"title\": \"Umi\",\n    \"repoName\": \"metaplex-foundation/umi\",\n    \"githubUrl\": \"https://github.com/metaplex-foundation/umi\",\n    \"description\": \"A Solana Framework for JS Clients.\",\n    \"owner\": \"metaplex-foundation\",\n    \"repo\": \"umi\"\n  },\n  \"Meteor\": {\n    \"title\": \"Meteor\",\n    \"repoName\": \"meteor/docs\",\n    \"githubUrl\": \"https://github.com/meteor/docs\",\n    \"description\": \"The Meteor API documentation.\",\n    \"owner\": \"meteor\",\n    \"repo\": \"docs\"\n  },\n  \"MEXC API SDK\": {\n    \"title\": \"MEXC API SDK\",\n    \"repoName\": \"mexcdevelop/mexc-api-sdk\",\n    \"githubUrl\": \"https://github.com/mexcdevelop/mexc-api-sdk\",\n    \"description\": \"\",\n    \"owner\": \"mexcdevelop\",\n    \"repo\": \"mexc-api-sdk\"\n  },\n  \"Helium\": {\n    \"title\": \"Helium\",\n    \"repoName\": \"mherrmann/helium\",\n    \"githubUrl\": \"https://github.com/mherrmann/helium\",\n    \"description\": \"Lighter web automation with Python\",\n    \"owner\": \"mherrmann\",\n    \"repo\": \"helium\"\n  },\n  \"90DaysOfDevOps\": {\n    \"title\": \"90DaysOfDevOps\",\n    \"repoName\": \"michaelcade/90daysofdevops\",\n    \"githubUrl\": \"https://github.com/michaelcade/90daysofdevops\",\n    \"description\": \"This repository started out as a learning in public project for myself and has now become a structured learning map for many in the community. We have 3 years under our belt covering all things DevOps, including Principles, Processes, Tooling and Use Cases surrounding this vast topic. \",\n    \"owner\": \"michaelcade\",\n    \"repo\": \"90daysofdevops\"\n  },\n  \"Infinity\": {\n    \"title\": \"Infinity\",\n    \"repoName\": \"michaelfeil/infinity\",\n    \"githubUrl\": \"https://github.com/michaelfeil/infinity\",\n    \"description\": \"Infinity is a high-throughput, low-latency serving engine for text-embeddings, reranking models, clip, clap and colpali\",\n    \"owner\": \"michaelfeil\",\n    \"repo\": \"infinity\"\n  },\n  \"Solana Python SDK\": {\n    \"title\": \"Solana Python SDK\",\n    \"repoName\": \"michaelhly/solana-py\",\n    \"githubUrl\": \"https://github.com/michaelhly/solana-py\",\n    \"description\": \"Solana Python SDK\",\n    \"owner\": \"michaelhly\",\n    \"repo\": \"solana-py\"\n  },\n  \"Micrometer\": {\n    \"title\": \"Micrometer\",\n    \"repoName\": \"micrometer-metrics/micrometer-docs\",\n    \"githubUrl\": \"https://github.com/micrometer-metrics/micrometer-docs\",\n    \"description\": \"Static website and documentation for Micrometer.\",\n    \"owner\": \"micrometer-metrics\",\n    \"repo\": \"micrometer-docs\"\n  },\n  \"Micronaut\": {\n    \"title\": \"Micronaut\",\n    \"repoName\": \"micronaut-projects/micronaut-docs\",\n    \"githubUrl\": \"https://github.com/micronaut-projects/micronaut-docs\",\n    \"description\": \"Documentation Utilities for Micronaut\",\n    \"owner\": \"micronaut-projects\",\n    \"repo\": \"micronaut-docs\"\n  },\n  \"MicroPython\": {\n    \"title\": \"MicroPython\",\n    \"repoName\": \"micropython/micropython\",\n    \"githubUrl\": \"https://github.com/micropython/micropython\",\n    \"description\": \"MicroPython - a lean and efficient Python implementation for microcontrollers and constrained systems\",\n    \"owner\": \"micropython\",\n    \"repo\": \"micropython\"\n  },\n  \"AI Agents for Beginners\": {\n    \"title\": \"AI Agents for Beginners\",\n    \"repoName\": \"microsoft/ai-agents-for-beginners\",\n    \"githubUrl\": \"https://github.com/microsoft/ai-agents-for-beginners\",\n    \"description\": \"10 Lessons to Get Started Building AI Agents\",\n    \"owner\": \"microsoft\",\n    \"repo\": \"ai-agents-for-beginners\"\n  },\n  \"Autogen\": {\n    \"title\": \"Autogen\",\n    \"repoName\": \"microsoft/autogen\",\n    \"githubUrl\": \"https://github.com/microsoft/autogen\",\n    \"description\": \"A programming framework for agentic AI 🤖 PyPi: autogen-agentchat Discord: https://aka.ms/autogen-discord Office Hour: https://aka.ms/autogen-officehour\",\n    \"owner\": \"microsoft\",\n    \"repo\": \"autogen\"\n  },\n  \"Azure Pipelines Tasks\": {\n    \"title\": \"Azure Pipelines Tasks\",\n    \"repoName\": \"microsoft/azure-pipelines-tasks\",\n    \"githubUrl\": \"https://github.com/microsoft/azure-pipelines-tasks\",\n    \"description\": \"Tasks for Azure Pipelines\",\n    \"owner\": \"microsoft\",\n    \"repo\": \"azure-pipelines-tasks\"\n  },\n  \"BitNet\": {\n    \"title\": \"BitNet\",\n    \"repoName\": \"microsoft/bitnet\",\n    \"githubUrl\": \"https://github.com/microsoft/bitnet\",\n    \"description\": \"Official inference framework for 1-bit LLMs\",\n    \"owner\": \"microsoft\",\n    \"repo\": \"bitnet\"\n  },\n  \"CsWin32\": {\n    \"title\": \"CsWin32\",\n    \"repoName\": \"microsoft/cswin32\",\n    \"githubUrl\": \"https://github.com/microsoft/cswin32\",\n    \"description\": \"A source generator to add a user-defined set of Win32 P/Invoke methods and supporting types to a C# project.\",\n    \"owner\": \"microsoft\",\n    \"repo\": \"cswin32\"\n  },\n  \"Fluent UI\": {\n    \"title\": \"Fluent UI\",\n    \"repoName\": \"microsoft/fluentui\",\n    \"githubUrl\": \"https://github.com/microsoft/fluentui\",\n    \"description\": \"Fluent UI web represents a collection of utilities, React components, and web components for building web applications.\",\n    \"owner\": \"microsoft\",\n    \"repo\": \"fluentui\"\n  },\n  \"Microsoft Fluent UI Blazor\": {\n    \"title\": \"Microsoft Fluent UI Blazor\",\n    \"repoName\": \"microsoft/fluentui-blazor\",\n    \"githubUrl\": \"https://github.com/microsoft/fluentui-blazor\",\n    \"description\": \"Microsoft Fluent UI Blazor components library. For use with ASP.NET Core Blazor applications\",\n    \"owner\": \"microsoft\",\n    \"repo\": \"fluentui-blazor\"\n  },\n  \"Markitdown\": {\n    \"title\": \"Markitdown\",\n    \"repoName\": \"microsoft/markitdown\",\n    \"githubUrl\": \"https://github.com/microsoft/markitdown\",\n    \"description\": \"Python tool for converting files and office documents to Markdown.\",\n    \"owner\": \"microsoft\",\n    \"repo\": \"markitdown\"\n  },\n  \"WinUI\": {\n    \"title\": \"WinUI\",\n    \"repoName\": \"microsoft/microsoft-ui-xaml\",\n    \"githubUrl\": \"https://github.com/microsoft/microsoft-ui-xaml\",\n    \"description\": \"WinUI: a modern UI framework with a rich set of controls and styles to build dynamic and high-performing Windows applications.\",\n    \"owner\": \"microsoft\",\n    \"repo\": \"microsoft-ui-xaml\"\n  },\n  \"Omniparser\": {\n    \"title\": \"Omniparser\",\n    \"repoName\": \"microsoft/omniparser\",\n    \"githubUrl\": \"https://github.com/microsoft/omniparser\",\n    \"description\": \"A simple screen parsing tool towards pure vision based GUI agent\",\n    \"owner\": \"microsoft\",\n    \"repo\": \"omniparser\"\n  },\n  \"Playwright\": {\n    \"title\": \"Playwright\",\n    \"repoName\": \"microsoft/playwright\",\n    \"githubUrl\": \"https://github.com/microsoft/playwright\",\n    \"description\": \"Playwright is a framework for Web Testing and Automation. It allows testing Chromium, Firefox and WebKit with a single API. \",\n    \"owner\": \"microsoft\",\n    \"repo\": \"playwright\"\n  },\n  \"Playwright MCP\": {\n    \"title\": \"Playwright MCP\",\n    \"repoName\": \"microsoft/playwright-mcp\",\n    \"githubUrl\": \"https://github.com/microsoft/playwright-mcp\",\n    \"description\": \"Playwright MCP server\",\n    \"owner\": \"microsoft\",\n    \"repo\": \"playwright-mcp\"\n  },\n  \"Playwright Python\": {\n    \"title\": \"Playwright Python\",\n    \"repoName\": \"microsoft/playwright-python\",\n    \"githubUrl\": \"https://github.com/microsoft/playwright-python\",\n    \"description\": \"Python version of the Playwright testing and automation library.\",\n    \"owner\": \"microsoft\",\n    \"repo\": \"playwright-python\"\n  },\n  \"Power Platform\": {\n    \"title\": \"Power Platform\",\n    \"repoName\": \"microsoft/powerplatform\",\n    \"githubUrl\": \"https://github.com/microsoft/powerplatform\",\n    \"description\": \"The official repository for Power Platform tools and resources.\",\n    \"owner\": \"microsoft\",\n    \"repo\": \"powerplatform\"\n  },\n  \"PowerToys\": {\n    \"title\": \"PowerToys\",\n    \"repoName\": \"microsoft/powertoys\",\n    \"githubUrl\": \"https://github.com/microsoft/powertoys\",\n    \"description\": \"Windows system utilities to maximize productivity\",\n    \"owner\": \"microsoft\",\n    \"repo\": \"powertoys\"\n  },\n  \"PromptWizard\": {\n    \"title\": \"PromptWizard\",\n    \"repoName\": \"microsoft/promptwizard\",\n    \"githubUrl\": \"https://github.com/microsoft/promptwizard\",\n    \"description\": \"Task-Aware Agent-driven Prompt Optimization Framework\",\n    \"owner\": \"microsoft\",\n    \"repo\": \"promptwizard\"\n  },\n  \"Qlib\": {\n    \"title\": \"Qlib\",\n    \"repoName\": \"microsoft/qlib\",\n    \"githubUrl\": \"https://github.com/microsoft/qlib\",\n    \"description\": \"Qlib is an AI-oriented quantitative investment platform that aims to realize the potential, empower research, and create value using AI technologies in quantitative investment, from exploring ideas to implementing productions. Qlib supports diverse machine learning modeling paradigms. including supervised learning, market dynamics modeling, and RL.\",\n    \"owner\": \"microsoft\",\n    \"repo\": \"qlib\"\n  },\n  \"Semantic Kernel\": {\n    \"title\": \"Semantic Kernel\",\n    \"repoName\": \"microsoft/semantic-kernel\",\n    \"githubUrl\": \"https://github.com/microsoft/semantic-kernel\",\n    \"description\": \"Integrate cutting-edge LLM technology quickly and easily into your apps\",\n    \"owner\": \"microsoft\",\n    \"repo\": \"semantic-kernel\"\n  },\n  \"TinyTroupe\": {\n    \"title\": \"TinyTroupe\",\n    \"repoName\": \"microsoft/tinytroupe\",\n    \"githubUrl\": \"https://github.com/microsoft/tinytroupe\",\n    \"description\": \"LLM-powered multiagent persona simulation for imagination enhancement and business insights.\",\n    \"owner\": \"microsoft\",\n    \"repo\": \"tinytroupe\"\n  },\n  \"Tsyringe\": {\n    \"title\": \"Tsyringe\",\n    \"repoName\": \"microsoft/tsyringe\",\n    \"githubUrl\": \"https://github.com/microsoft/tsyringe\",\n    \"description\": \"Lightweight dependency injection container for JavaScript/TypeScript\",\n    \"owner\": \"microsoft\",\n    \"repo\": \"tsyringe\"\n  },\n  \"TypeScript\": {\n    \"title\": \"TypeScript\",\n    \"repoName\": \"microsoft/typescript\",\n    \"githubUrl\": \"https://github.com/microsoft/typescript\",\n    \"description\": \"TypeScript is a superset of JavaScript that compiles to clean JavaScript output.\",\n    \"owner\": \"microsoft\",\n    \"repo\": \"typescript\"\n  },\n  \"TypeScript Go\": {\n    \"title\": \"TypeScript Go\",\n    \"repoName\": \"microsoft/typescript-go\",\n    \"githubUrl\": \"https://github.com/microsoft/typescript-go\",\n    \"description\": \"Staging repo for development of native port of TypeScript\",\n    \"owner\": \"microsoft\",\n    \"repo\": \"typescript-go\"\n  },\n  \"TypeScript Website\": {\n    \"title\": \"TypeScript Website\",\n    \"repoName\": \"microsoft/typescript-website\",\n    \"githubUrl\": \"https://github.com/microsoft/typeScript-website\",\n    \"description\": \"The Website and web infrastructure for learning TypeScript\",\n    \"owner\": \"microsoft\",\n    \"repo\": \"typescript-website\"\n  },\n  \"Visual Studio Code\": {\n    \"title\": \"Visual Studio Code\",\n    \"repoName\": \"microsoft/vscode-docs\",\n    \"githubUrl\": \"https://github.com/microsoft/vscode-docs\",\n    \"description\": \"Public documentation for Visual Studio Code\",\n    \"owner\": \"microsoft\",\n    \"repo\": \"vscode-docs\"\n  },\n  \"Azure AI\": {\n    \"title\": \"Azure AI\",\n    \"repoName\": \"microsoftdocs/azure-ai-docs\",\n    \"githubUrl\": \"https://github.com/microsoftdocs/azure-ai-docs\",\n    \"description\": \"Open Source Azure AI documentation including, azure ai, azure studio, machine learning, genomics, open-datasets, and search\",\n    \"owner\": \"microsoftdocs\",\n    \"repo\": \"azure-ai-docs\"\n  },\n  \"Azure AKS\": {\n    \"title\": \"Azure AKS\",\n    \"repoName\": \"microsoftdocs/azure-aks-docs.git\",\n    \"githubUrl\": \"https://github.com/microsoftdocs/azure-aks-docs.git\",\n    \"description\": \"Public sync with private repo azure-aks-docs-pr\",\n    \"owner\": \"microsoftdocs\",\n    \"repo\": \"azure-aks-docs.git\"\n  },\n  \"Azure DevOps YAML Schema\": {\n    \"title\": \"Azure DevOps YAML Schema\",\n    \"repoName\": \"microsoftdocs/azure-devops-yaml-schema\",\n    \"githubUrl\": \"https://github.com/microsoftdocs/azure-devops-yaml-schema\",\n    \"description\": \"Public mirror for the azure-devops-yaml-schema-pr repo. \",\n    \"owner\": \"microsoftdocs\",\n    \"repo\": \"azure-devops-yaml-schema\"\n  },\n  \"Microsoft Azure\": {\n    \"title\": \"Microsoft Azure\",\n    \"repoName\": \"microsoftdocs/azure-docs\",\n    \"githubUrl\": \"https://github.com/microsoftdocs/azure-docs\",\n    \"description\": \"Open source documentation of Microsoft Azure\",\n    \"owner\": \"microsoftdocs\",\n    \"repo\": \"azure-docs\"\n  },\n  \"C++\": {\n    \"title\": \"C++\",\n    \"repoName\": \"microsoftdocs/cpp-docs\",\n    \"githubUrl\": \"https://github.com/microsoftdocs/cpp-docs\",\n    \"description\": \"C++ Documentation\",\n    \"owner\": \"microsoftdocs\",\n    \"repo\": \"cpp-docs\"\n  },\n  \"Microsoft Power Platform\": {\n    \"title\": \"Microsoft Power Platform\",\n    \"repoName\": \"microsoftdocs/power-platform\",\n    \"githubUrl\": \"https://github.com/microsoftdocs/power-platform\",\n    \"description\": \"Documentation for Microsoft Power Platform\",\n    \"owner\": \"microsoftdocs\",\n    \"repo\": \"power-platform\"\n  },\n  \"Microsoft Power Apps\": {\n    \"title\": \"Microsoft Power Apps\",\n    \"repoName\": \"microsoftdocs/powerapps-docs\",\n    \"githubUrl\": \"https://github.com/microsoftdocs/powerapps-docs\",\n    \"description\": \"Technical Documentation for Microsoft Power Apps\",\n    \"owner\": \"microsoftdocs\",\n    \"repo\": \"powerapps-docs\"\n  },\n  \"PowerShell\": {\n    \"title\": \"PowerShell\",\n    \"repoName\": \"microsoftdocs/powershell-docs\",\n    \"githubUrl\": \"https://github.com/microsoftdocs/powershell-docs\",\n    \"description\": \"The official PowerShell documentation sources\",\n    \"owner\": \"microsoftdocs\",\n    \"repo\": \"powershell-docs\"\n  },\n  \"Win32 API\": {\n    \"title\": \"Win32 API\",\n    \"repoName\": \"microsoftdocs/sdk-api\",\n    \"githubUrl\": \"https://github.com/microsoftdocs/sdk-api\",\n    \"description\": \"Public contributions for win32 API documentation\",\n    \"owner\": \"microsoftdocs\",\n    \"repo\": \"sdk-api\"\n  },\n  \"Windows Subsystem for Linux\": {\n    \"title\": \"Windows Subsystem for Linux\",\n    \"repoName\": \"microsoftdocs/wsl\",\n    \"githubUrl\": \"https://github.com/microsoftdocs/wsl\",\n    \"description\": \"Source code behind the Windows Subsystem for Linux documentation.\",\n    \"owner\": \"microsoftdocs\",\n    \"repo\": \"wsl\"\n  },\n  \"Microsoft Graph\": {\n    \"title\": \"Microsoft Graph\",\n    \"repoName\": \"microsoftgraph/microsoft-graph-docs-contrib\",\n    \"githubUrl\": \"https://github.com/microsoftgraph/microsoft-graph-docs-contrib\",\n    \"description\": \"Documentation for the Microsoft Graph REST API\",\n    \"owner\": \"microsoftgraph\",\n    \"repo\": \"microsoft-graph-docs-contrib\"\n  },\n  \"Microsoft Graph SDK JavaScript\": {\n    \"title\": \"Microsoft Graph SDK JavaScript\",\n    \"repoName\": \"microsoftgraph/msgraph-sdk-javascript\",\n    \"githubUrl\": \"https://github.com/microsoftgraph/msgraph-sdk-javascript\",\n    \"description\": \"Microsoft Graph client library for JavaScript\",\n    \"owner\": \"microsoftgraph\",\n    \"repo\": \"msgraph-sdk-javascript\"\n  },\n  \"Microsoft Graph PowerShell SDK\": {\n    \"title\": \"Microsoft Graph PowerShell SDK\",\n    \"repoName\": \"microsoftgraph/msgraph-sdk-powershell\",\n    \"githubUrl\": \"https://github.com/microsoftgraph/msgraph-sdk-powershell\",\n    \"description\": \"Powershell SDK for Microsoft Graph\",\n    \"owner\": \"microsoftgraph\",\n    \"repo\": \"msgraph-sdk-powershell\"\n  },\n  \"Microsoft Graph SDK for Python\": {\n    \"title\": \"Microsoft Graph SDK for Python\",\n    \"repoName\": \"microsoftgraph/msgraph-sdk-python\",\n    \"githubUrl\": \"https://github.com/microsoftgraph/msgraph-sdk-python\",\n    \"description\": \"\",\n    \"owner\": \"microsoftgraph\",\n    \"repo\": \"msgraph-sdk-python\"\n  },\n  \"Trackintel\": {\n    \"title\": \"Trackintel\",\n    \"repoName\": \"mie-lab/trackintel\",\n    \"githubUrl\": \"https://github.com/mie-lab/trackintel\",\n    \"description\": \"trackintel is a framework for spatio-temporal analysis of movement trajectory and mobility data.\",\n    \"owner\": \"mie-lab\",\n    \"repo\": \"trackintel\"\n  },\n  \"Flask Migrate\": {\n    \"title\": \"Flask Migrate\",\n    \"repoName\": \"miguelgrinberg/flask-migrate\",\n    \"githubUrl\": \"https://github.com/miguelgrinberg/flask-migrate\",\n    \"description\": \"SQLAlchemy database migrations for Flask applications using Alembic\",\n    \"owner\": \"miguelgrinberg\",\n    \"repo\": \"flask-migrate\"\n  },\n  \"VSSS\": {\n    \"title\": \"VSSS\",\n    \"repoName\": \"mikelodder7/vsss-rs\",\n    \"githubUrl\": \"https://github.com/mikelodder7/vsss-rs\",\n    \"description\": \"Verifiable Secret Sharing Schemes\",\n    \"owner\": \"mikelodder7\",\n    \"repo\": \"vsss-rs\"\n  },\n  \"Decimal.js\": {\n    \"title\": \"Decimal.js\",\n    \"repoName\": \"mikemcl/decimal.js\",\n    \"githubUrl\": \"https://github.com/mikemcl/decimal.js\",\n    \"description\": \"An arbitrary-precision Decimal type for JavaScript\",\n    \"owner\": \"mikemcl\",\n    \"repo\": \"decimal.js\"\n  },\n  \"Repominify\": {\n    \"title\": \"Repominify\",\n    \"repoName\": \"mikewcasale/repominify\",\n    \"githubUrl\": \"https://github.com/mikewcasale/repominify\",\n    \"description\": \"A Python package that optimizes codebase representations for Large Language Models (LLMs) by generating compact, context-rich summaries that minimize token usage while preserving essential structural information.\",\n    \"owner\": \"mikewcasale\",\n    \"repo\": \"repominify\"\n  },\n  \"Mikro-ORM\": {\n    \"title\": \"Mikro-ORM\",\n    \"repoName\": \"mikro-orm/mikro-orm\",\n    \"githubUrl\": \"https://github.com/mikro-orm/mikro-orm\",\n    \"description\": \"TypeScript ORM for Node.js based on Data Mapper, Unit of Work and Identity Map patterns. Supports MongoDB, MySQL, MariaDB, MS SQL Server, PostgreSQL and SQLite/libSQL databases.\",\n    \"owner\": \"mikro-orm\",\n    \"repo\": \"mikro-orm\"\n  },\n  \"Milvus\": {\n    \"title\": \"Milvus\",\n    \"repoName\": \"milvus-io/milvus\",\n    \"githubUrl\": \"https://github.com/milvus-io/milvus\",\n    \"description\": \"Milvus is a high-performance, cloud-native vector database built for scalable vector ANN search\",\n    \"owner\": \"milvus-io\",\n    \"repo\": \"milvus\"\n  },\n  \"Second Me\": {\n    \"title\": \"Second Me\",\n    \"repoName\": \"mindverse/second-me\",\n    \"githubUrl\": \"https://github.com/mindverse/second-me\",\n    \"description\": \"Train your AI self, amplify you, bridge the world\",\n    \"owner\": \"mindverse\",\n    \"repo\": \"second-me\"\n  },\n  \"MinecraftForge\": {\n    \"title\": \"MinecraftForge\",\n    \"repoName\": \"minecraftforge/documentation\",\n    \"githubUrl\": \"https://github.com/minecraftforge/documentation\",\n    \"description\": \"Read the docs MinecraftForge documentation\",\n    \"owner\": \"minecraftforge\",\n    \"repo\": \"documentation\"\n  },\n  \"MinIO\": {\n    \"title\": \"MinIO\",\n    \"repoName\": \"minio/minio\",\n    \"githubUrl\": \"https://github.com/minio/minio\",\n    \"description\": \"MinIO is a high-performance, S3 compatible object store, open sourced under GNU AGPLv3 license.\",\n    \"owner\": \"minio\",\n    \"repo\": \"minio\"\n  },\n  \"Mintlify\": {\n    \"title\": \"Mintlify\",\n    \"repoName\": \"mintlify/docs\",\n    \"githubUrl\": \"https://github.com/mintlify/docs\",\n    \"description\": \"Official Mintlify documentation\",\n    \"owner\": \"mintlify\",\n    \"repo\": \"docs\"\n  },\n  \"Draive\": {\n    \"title\": \"Draive\",\n    \"repoName\": \"miquido/draive\",\n    \"githubUrl\": \"https://github.com/miquido/draive\",\n    \"description\": \"Framework for building AI oriented applications. The project was made by Miquido: https://www.miquido.com/\",\n    \"owner\": \"miquido\",\n    \"repo\": \"draive\"\n  },\n  \"Mirascope\": {\n    \"title\": \"Mirascope\",\n    \"repoName\": \"mirascope/mirascope\",\n    \"githubUrl\": \"https://github.com/mirascope/mirascope\",\n    \"description\": \"LLM abstractions that aren't obstructions\",\n    \"owner\": \"mirascope\",\n    \"repo\": \"mirascope\"\n  },\n  \"Mirror\": {\n    \"title\": \"Mirror\",\n    \"repoName\": \"mirrornetworking/mirror\",\n    \"githubUrl\": \"https://github.com/mirrornetworking/mirror\",\n    \"description\": \"#1 Open Source Unity Networking Library\",\n    \"owner\": \"mirrornetworking\",\n    \"repo\": \"mirror\"\n  },\n  \"Mistral AI Client Python\": {\n    \"title\": \"Mistral AI Client Python\",\n    \"repoName\": \"mistralai/client-python\",\n    \"githubUrl\": \"https://github.com/mistralai/client-python\",\n    \"description\": \"Python client library for Mistral AI platform\",\n    \"owner\": \"mistralai\",\n    \"repo\": \"client-python\"\n  },\n  \"Hydra Zen\": {\n    \"title\": \"Hydra Zen\",\n    \"repoName\": \"mit-ll-responsible-ai/hydra-zen\",\n    \"githubUrl\": \"https://github.com/mit-ll-responsible-ai/hydra-zen\",\n    \"description\": \"Create powerful Hydra applications without the yaml files and boilerplate code.\",\n    \"owner\": \"mit-ll-responsible-ai\",\n    \"repo\": \"hydra-zen\"\n  },\n  \"Mithril.js\": {\n    \"title\": \"Mithril.js\",\n    \"repoName\": \"mithriljs/mithril.js\",\n    \"githubUrl\": \"https://github.com/mithriljs/mithril.js\",\n    \"description\": \"A JavaScript Framework for Building Brilliant Applications\",\n    \"owner\": \"mithriljs\",\n    \"repo\": \"mithril.js\"\n  },\n  \"Mitsuba 3\": {\n    \"title\": \"Mitsuba 3\",\n    \"repoName\": \"mitsuba-renderer/mitsuba3\",\n    \"githubUrl\": \"https://github.com/mitsuba-renderer/mitsuba3\",\n    \"description\": \"Mitsuba 3: A Retargetable Forward and Inverse Renderer\",\n    \"owner\": \"mitsuba-renderer\",\n    \"repo\": \"mitsuba3\"\n  },\n  \"Mixpanel JavaScript Client Library\": {\n    \"title\": \"Mixpanel JavaScript Client Library\",\n    \"repoName\": \"mixpanel/mixpanel-js\",\n    \"githubUrl\": \"https://github.com/mixpanel/mixpanel-js\",\n    \"description\": \"Official Mixpanel JavaScript Client Library\",\n    \"owner\": \"mixpanel\",\n    \"repo\": \"mixpanel-js\"\n  },\n  \"OSMBonusPack\": {\n    \"title\": \"OSMBonusPack\",\n    \"repoName\": \"mkergall/osmbonuspack\",\n    \"githubUrl\": \"https://github.com/mkergall/osmbonuspack\",\n    \"description\": \"A third-party library of (very) useful additional objects for osmdroid\",\n    \"owner\": \"mkergall\",\n    \"repo\": \"osmbonuspack\"\n  },\n  \"MLX\": {\n    \"title\": \"MLX\",\n    \"repoName\": \"ml-explore/mlx\",\n    \"githubUrl\": \"https://github.com/ml-explore/mlx\",\n    \"description\": \"MLX: An array framework for Apple silicon\",\n    \"owner\": \"ml-explore\",\n    \"repo\": \"mlx\"\n  },\n  \"ML5 Next Gen\": {\n    \"title\": \"ML5 Next Gen\",\n    \"repoName\": \"ml5js/ml5-next-gen\",\n    \"githubUrl\": \"https://github.com/ml5js/ml5-next-gen\",\n    \"description\": \"\",\n    \"owner\": \"ml5js\",\n    \"repo\": \"ml5-next-gen\"\n  },\n  \"MLflow\": {\n    \"title\": \"MLflow\",\n    \"repoName\": \"mlflow/mlflow\",\n    \"githubUrl\": \"https://github.com/mlflow/mlflow\",\n    \"description\": \"Open source platform for the machine learning lifecycle\",\n    \"owner\": \"mlflow\",\n    \"repo\": \"mlflow\"\n  },\n  \"MLx Graphs\": {\n    \"title\": \"MLx Graphs\",\n    \"repoName\": \"mlx-graphs/mlx-graphs\",\n    \"githubUrl\": \"https://github.com/mlx-graphs/mlx-graphs\",\n    \"description\": \"Graph Neural Network library made for Apple Silicon\",\n    \"owner\": \"mlx-graphs\",\n    \"repo\": \"mlx-graphs\"\n  },\n  \"unknown-project:https://github.com/mmorafah/flis\": {\n    \"title\": \"unknown-project:https://github.com/mmorafah/flis\",\n    \"repoName\": \"mmorafah/flis\",\n    \"githubUrl\": \"https://github.com/mmorafah/flis\",\n    \"description\": \"FLIS: Clustered Federated Learning via Inference Similarity for Non-IID Data Distribution\",\n    \"owner\": \"mmorafah\",\n    \"repo\": \"flis\"\n  },\n  \"Maestro\": {\n    \"title\": \"Maestro\",\n    \"repoName\": \"mobile-dev-inc/maestro\",\n    \"githubUrl\": \"https://github.com/mobile-dev-inc/maestro\",\n    \"description\": \"Painless E2E Automation for Mobile and Web\",\n    \"owner\": \"mobile-dev-inc\",\n    \"repo\": \"maestro\"\n  },\n  \"MachinaTrader\": {\n    \"title\": \"MachinaTrader\",\n    \"repoName\": \"mobileguru1013/machinatrader\",\n    \"githubUrl\": \"https://github.com/mobileguru1013/machinatrader\",\n    \"description\": \"\",\n    \"owner\": \"mobileguru1013\",\n    \"repo\": \"machinatrader\"\n  },\n  \"MobX\": {\n    \"title\": \"MobX\",\n    \"repoName\": \"mobxjs/mobx\",\n    \"githubUrl\": \"https://github.com/mobxjs/mobx\",\n    \"description\": \"Simple, scalable state management.\",\n    \"owner\": \"mobxjs\",\n    \"repo\": \"mobx\"\n  },\n  \"Moby\": {\n    \"title\": \"Moby\",\n    \"repoName\": \"moby/moby\",\n    \"githubUrl\": \"https://github.com/moby/moby\",\n    \"description\": \"The Moby Project - a collaborative project for the container ecosystem to assemble container-based systems\",\n    \"owner\": \"moby\",\n    \"repo\": \"moby\"\n  },\n  \"Mocha\": {\n    \"title\": \"Mocha\",\n    \"repoName\": \"mochajs/mocha\",\n    \"githubUrl\": \"https://github.com/mochajs/mocha\",\n    \"description\": \"☕️ simple, flexible, fun javascript test framework for node.js & the browser\",\n    \"owner\": \"mochajs\",\n    \"repo\": \"mocha\"\n  },\n  \"Modal Client\": {\n    \"title\": \"Modal Client\",\n    \"repoName\": \"modal-labs/modal-client\",\n    \"githubUrl\": \"https://github.com/modal-labs/modal-client\",\n    \"description\": \"Python client library for Modal\",\n    \"owner\": \"modal-labs\",\n    \"repo\": \"modal-client\"\n  },\n  \"Model Context Protocol C# SDK\": {\n    \"title\": \"Model Context Protocol C# SDK\",\n    \"repoName\": \"modelcontextprotocol/csharp-sdk\",\n    \"githubUrl\": \"https://github.com/modelcontextprotocol/csharp-sdk\",\n    \"description\": \"The official C# SDK for Model Context Protocol servers and clients. Maintained in collaboration with Microsoft.\",\n    \"owner\": \"modelcontextprotocol\",\n    \"repo\": \"csharp-sdk\"\n  },\n  \"Model Context Protocol\": {\n    \"title\": \"Model Context Protocol\",\n    \"repoName\": \"modelcontextprotocol/modelcontextprotocol\",\n    \"githubUrl\": \"https://github.com/modelcontextprotocol/modelcontextprotocol\",\n    \"description\": \"Specification and documentation for the Model Context Protocol\",\n    \"owner\": \"modelcontextprotocol\",\n    \"repo\": \"modelcontextprotocol\"\n  },\n  \"Model Context Protocol Python SDK\": {\n    \"title\": \"Model Context Protocol Python SDK\",\n    \"repoName\": \"modelcontextprotocol/python-sdk\",\n    \"githubUrl\": \"https://github.com/modelcontextprotocol/python-sdk\",\n    \"description\": \"The official Python SDK for Model Context Protocol servers and clients\",\n    \"owner\": \"modelcontextprotocol\",\n    \"repo\": \"python-sdk\"\n  },\n  \"Model Context Protocol Servers\": {\n    \"title\": \"Model Context Protocol Servers\",\n    \"repoName\": \"modelcontextprotocol/servers.git\",\n    \"githubUrl\": \"https://github.com/modelcontextprotocol/servers.git\",\n    \"description\": \"Model Context Protocol Servers\",\n    \"owner\": \"modelcontextprotocol\",\n    \"repo\": \"servers.git\"\n  },\n  \"Model Context Protocol Typescript SDK\": {\n    \"title\": \"Model Context Protocol Typescript SDK\",\n    \"repoName\": \"modelcontextprotocol/typescript-sdk\",\n    \"githubUrl\": \"https://github.com/modelcontextprotocol/typescript-sdk\",\n    \"description\": \"The official Typescript SDK for Model Context Protocol servers and clients\",\n    \"owner\": \"modelcontextprotocol\",\n    \"repo\": \"typescript-sdk\"\n  },\n  \"MAX Platform\": {\n    \"title\": \"MAX Platform\",\n    \"repoName\": \"modular/max\",\n    \"githubUrl\": \"https://github.com/modular/max\",\n    \"description\": \"The MAX Platform (includes Mojo)\",\n    \"owner\": \"modular\",\n    \"repo\": \"max\"\n  },\n  \"Module Federation Core\": {\n    \"title\": \"Module Federation Core\",\n    \"repoName\": \"module-federation/core\",\n    \"githubUrl\": \"https://github.com/module-federation/core\",\n    \"description\": \"Module Federation is a concept that allows developers to share code and resources across multiple JavaScript applications\",\n    \"owner\": \"module-federation\",\n    \"repo\": \"core\"\n  },\n  \"Module Federation Examples\": {\n    \"title\": \"Module Federation Examples\",\n    \"repoName\": \"module-federation/module-federation-examples\",\n    \"githubUrl\": \"https://github.com/module-federation/module-federation-examples\",\n    \"description\": \"Implementation examples of module federation , by the creators of module federation\",\n    \"owner\": \"module-federation\",\n    \"repo\": \"module-federation-examples\"\n  },\n  \"Vite Module Federation\": {\n    \"title\": \"Vite Module Federation\",\n    \"repoName\": \"module-federation/vite\",\n    \"githubUrl\": \"https://github.com/module-federation/vite\",\n    \"description\": \"Vite Plugin for Module Federation \",\n    \"owner\": \"module-federation\",\n    \"repo\": \"vite\"\n  },\n  \"MODX\": {\n    \"title\": \"MODX\",\n    \"repoName\": \"modxorg/docs\",\n    \"githubUrl\": \"https://github.com/modxorg/docs\",\n    \"description\": \"MODX documentation in markdown\",\n    \"owner\": \"modxorg\",\n    \"repo\": \"docs\"\n  },\n  \"Komodo\": {\n    \"title\": \"Komodo\",\n    \"repoName\": \"moghtech/komodo\",\n    \"githubUrl\": \"https://github.com/moghtech/komodo\",\n    \"description\": \"🦎 a tool to build and deploy software on many servers 🦎\",\n    \"owner\": \"moghtech\",\n    \"repo\": \"komodo\"\n  },\n  \"Splink\": {\n    \"title\": \"Splink\",\n    \"repoName\": \"moj-analytical-services/splink\",\n    \"githubUrl\": \"https://github.com/moj-analytical-services/splink\",\n    \"description\": \"Fast, accurate and scalable probabilistic data linkage with support for multiple SQL backends\",\n    \"owner\": \"moj-analytical-services\",\n    \"repo\": \"splink\"\n  },\n  \"Minecraft: Bedrock Edition\": {\n    \"title\": \"Minecraft: Bedrock Edition\",\n    \"repoName\": \"mojang/bedrock-samples\",\n    \"githubUrl\": \"https://github.com/mojang/bedrock-samples\",\n    \"description\": \"Samples and assets for building Minecraft: Bedrock Edition add-ons\",\n    \"owner\": \"mojang\",\n    \"repo\": \"bedrock-samples\"\n  },\n  \"Luxon\": {\n    \"title\": \"Luxon\",\n    \"repoName\": \"moment/luxon\",\n    \"githubUrl\": \"https://github.com/moment/luxon\",\n    \"description\": \"⏱ A library for working with dates and times in JS\",\n    \"owner\": \"moment\",\n    \"repo\": \"luxon\"\n  },\n  \"Moment.js\": {\n    \"title\": \"Moment.js\",\n    \"repoName\": \"moment/momentjs.com\",\n    \"githubUrl\": \"https://github.com/moment/momentjs.com\",\n    \"description\": \"The website for momentjs\",\n    \"owner\": \"moment\",\n    \"repo\": \"momentjs.com\"\n  },\n  \"Monday API Python SDK\": {\n    \"title\": \"Monday API Python SDK\",\n    \"repoName\": \"mondaycom/monday-api-python-sdk\",\n    \"githubUrl\": \"https://github.com/mondaycom/monday-api-python-sdk\",\n    \"description\": \"\",\n    \"owner\": \"mondaycom\",\n    \"repo\": \"monday-api-python-sdk\"\n  },\n  \"Monday App Deploy Action\": {\n    \"title\": \"Monday App Deploy Action\",\n    \"repoName\": \"mondaycom/monday-app-deploy-action\",\n    \"githubUrl\": \"https://github.com/mondaycom/monday-app-deploy-action\",\n    \"description\": \"\",\n    \"owner\": \"mondaycom\",\n    \"repo\": \"monday-app-deploy-action\"\n  },\n  \"Monday App Promote Action\": {\n    \"title\": \"Monday App Promote Action\",\n    \"repoName\": \"mondaycom/monday-app-promote-action\",\n    \"githubUrl\": \"https://github.com/mondaycom/monday-app-promote-action\",\n    \"description\": \"Promote app to live\",\n    \"owner\": \"mondaycom\",\n    \"repo\": \"monday-app-promote-action\"\n  },\n  \"Monday Code Quickstarts\": {\n    \"title\": \"Monday Code Quickstarts\",\n    \"repoName\": \"mondaycom/monday-code-quickstarts\",\n    \"githubUrl\": \"https://github.com/mondaycom/monday-code-quickstarts\",\n    \"description\": \"\",\n    \"owner\": \"mondaycom\",\n    \"repo\": \"monday-code-quickstarts\"\n  },\n  \"Monday.com SDK JS\": {\n    \"title\": \"Monday.com SDK JS\",\n    \"repoName\": \"mondaycom/monday-sdk-js\",\n    \"githubUrl\": \"https://github.com/mondaycom/monday-sdk-js\",\n    \"description\": \"Node.js and JavaScript SDK for developing over the monday.com platform\",\n    \"owner\": \"mondaycom\",\n    \"repo\": \"monday-sdk-js\"\n  },\n  \"Monday SDK JS\": {\n    \"title\": \"Monday SDK JS\",\n    \"repoName\": \"mondaycom/monday-sdk-js.git\",\n    \"githubUrl\": \"https://github.com/mondaycom/monday-sdk-js.git\",\n    \"description\": \"Node.js and JavaScript SDK for developing over the monday.com platform\",\n    \"owner\": \"mondaycom\",\n    \"repo\": \"monday-sdk-js.git\"\n  },\n  \"Monday.com Vibe\": {\n    \"title\": \"Monday.com Vibe\",\n    \"repoName\": \"mondaycom/vibe\",\n    \"githubUrl\": \"https://github.com/mondaycom/vibe\",\n    \"description\": \"🎨 Official monday.com UI resources for application development in React.js\",\n    \"owner\": \"mondaycom\",\n    \"repo\": \"vibe\"\n  },\n  \"Monday.com Welcome Apps\": {\n    \"title\": \"Monday.com Welcome Apps\",\n    \"repoName\": \"mondaycom/welcome-apps.git\",\n    \"githubUrl\": \"https://github.com/mondaycom/welcome-apps.git\",\n    \"description\": \"A collection of \\\"Hello World\\\" monday.com apps\",\n    \"owner\": \"mondaycom\",\n    \"repo\": \"welcome-apps.git\"\n  },\n  \"MongoDB\": {\n    \"title\": \"MongoDB\",\n    \"repoName\": \"mongodb/docs\",\n    \"githubUrl\": \"https://github.com/mongodb/docs\",\n    \"description\": \"The MongoDB Documentation Project Source.\",\n    \"owner\": \"mongodb\",\n    \"repo\": \"docs\"\n  },\n  \"MongoDB C# .NET Driver\": {\n    \"title\": \"MongoDB C# .NET Driver\",\n    \"repoName\": \"mongodb/mongo-csharp-driver\",\n    \"githubUrl\": \"https://github.com/mongodb/mongo-csharp-driver\",\n    \"description\": \"The Official C# .NET Driver for MongoDB\",\n    \"owner\": \"mongodb\",\n    \"repo\": \"mongo-csharp-driver\"\n  },\n  \"Motor\": {\n    \"title\": \"Motor\",\n    \"repoName\": \"mongodb/motor\",\n    \"githubUrl\": \"https://github.com/mongodb/motor\",\n    \"description\": \"Motor - the async Python driver for MongoDB and Tornado or asyncio\",\n    \"owner\": \"mongodb\",\n    \"repo\": \"motor\"\n  },\n  \"Moodle\": {\n    \"title\": \"Moodle\",\n    \"repoName\": \"moodle/moodle\",\n    \"githubUrl\": \"https://github.com/moodle/moodle\",\n    \"description\": \"Moodle - the world's open source learning platform\",\n    \"owner\": \"moodle\",\n    \"repo\": \"moodle\"\n  },\n  \"FastCRUD\": {\n    \"title\": \"FastCRUD\",\n    \"repoName\": \"moonstorm/fastcrud\",\n    \"githubUrl\": \"https://github.com/moonstorm/fastcrud\",\n    \"description\": \"fast .NET ORM for strongly typed people\",\n    \"owner\": \"moonstorm\",\n    \"repo\": \"fastcrud\"\n  },\n  \"Bitrix\": {\n    \"title\": \"Bitrix\",\n    \"repoName\": \"sodegov/bitrixdocs\",\n    \"githubUrl\": \"https://github.com/sodegov/bitrixdocs\",\n    \"description\": \"Docs bitrix markdown\",\n    \"owner\": \"sodegov\",\n    \"repo\": \"bitrixdocs\"\n  },\n  \"Aio Pika\": {\n    \"title\": \"Aio Pika\",\n    \"repoName\": \"mosquito/aio-pika\",\n    \"githubUrl\": \"https://github.com/mosquito/aio-pika\",\n    \"description\": \"AMQP 0.9 client designed for asyncio and humans.\",\n    \"owner\": \"mosquito\",\n    \"repo\": \"aio-pika\"\n  },\n  \"Motia\": {\n    \"title\": \"Motia\",\n    \"repoName\": \"motiadev/motia\",\n    \"githubUrl\": \"https://github.com/motiadev/motia\",\n    \"description\": \"AI Agent Framework For Software Engineers \",\n    \"owner\": \"motiadev\",\n    \"repo\": \"motia\"\n  },\n  \"Motion Canvas\": {\n    \"title\": \"Motion Canvas\",\n    \"repoName\": \"motion-canvas/motion-canvas\",\n    \"githubUrl\": \"https://github.com/motion-canvas/motion-canvas\",\n    \"description\": \"Visualize Your Ideas With Code\",\n    \"owner\": \"motion-canvas\",\n    \"repo\": \"motion-canvas\"\n  },\n  \"Motion\": {\n    \"title\": \"Motion\",\n    \"repoName\": \"motiondivision/motion\",\n    \"githubUrl\": \"https://github.com/motiondivision/motion\",\n    \"description\": \"A modern animation library for React and JavaScript\",\n    \"owner\": \"motiondivision\",\n    \"repo\": \"motion\"\n  },\n  \"RBush\": {\n    \"title\": \"RBush\",\n    \"repoName\": \"mourner/rbush\",\n    \"githubUrl\": \"https://github.com/mourner/rbush\",\n    \"description\": \"RBush — a high-performance JavaScript R-tree-based 2D spatial index for points and rectangles\",\n    \"owner\": \"mourner\",\n    \"repo\": \"rbush\"\n  },\n  \"Google Cloud Client Library for Rust\": {\n    \"title\": \"Google Cloud Client Library for Rust\",\n    \"repoName\": \"mozilla-services/google-cloud-rust\",\n    \"githubUrl\": \"https://github.com/mozilla-services/google-cloud-rust\",\n    \"description\": \"Google Cloud Client Library for Rust\",\n    \"owner\": \"mozilla-services\",\n    \"repo\": \"google-cloud-rust\"\n  },\n  \"PDF.js\": {\n    \"title\": \"PDF.js\",\n    \"repoName\": \"mozilla/pdf.js\",\n    \"githubUrl\": \"https://github.com/mozilla/pdf.js\",\n    \"description\": \"PDF Reader in JavaScript\",\n    \"owner\": \"mozilla\",\n    \"repo\": \"pdf.js\"\n  },\n  \"Fastify SSE\": {\n    \"title\": \"Fastify SSE\",\n    \"repoName\": \"mpetrunic/fastify-sse-v2\",\n    \"githubUrl\": \"https://github.com/mpetrunic/fastify-sse-v2\",\n    \"description\": \"Provide Server-Sent Events to Fastify\",\n    \"owner\": \"mpetrunic\",\n    \"repo\": \"fastify-sse-v2\"\n  },\n  \"MPV\": {\n    \"title\": \"MPV\",\n    \"repoName\": \"mpv-player/mpv\",\n    \"githubUrl\": \"https://github.com/mpv-player/mpv\",\n    \"description\": \"🎥 Command line media player\",\n    \"owner\": \"mpv-player\",\n    \"repo\": \"mpv\"\n  },\n  \"Three.js\": {\n    \"title\": \"Three.js\",\n    \"repoName\": \"mrdoob/three.js\",\n    \"githubUrl\": \"https://github.com/mrdoob/three.js\",\n    \"description\": \"JavaScript 3D Library.\",\n    \"owner\": \"mrdoob\",\n    \"repo\": \"three.js\"\n  },\n  \"Nitro\": {\n    \"title\": \"Nitro\",\n    \"repoName\": \"nitrojs/nitro\",\n    \"githubUrl\": \"https://github.com/nitrojs/nitro\",\n    \"description\": \"Next Generation Server Toolkit. Create web servers with everything you need and deploy them wherever you prefer.\",\n    \"owner\": \"nitrojs\",\n    \"repo\": \"nitro\"\n  },\n  \"React Native MMKV\": {\n    \"title\": \"React Native MMKV\",\n    \"repoName\": \"mrousavy/react-native-mmkv\",\n    \"githubUrl\": \"https://github.com/mrousavy/react-native-mmkv\",\n    \"description\": \"⚡️ The fastest key/value storage for React Native. ~30x faster than AsyncStorage!\",\n    \"owner\": \"mrousavy\",\n    \"repo\": \"react-native-mmkv\"\n  },\n  \"React Native Vision Camera\": {\n    \"title\": \"React Native Vision Camera\",\n    \"repoName\": \"mrousavy/react-native-vision-camera\",\n    \"githubUrl\": \"https://github.com/mrousavy/react-native-vision-camera\",\n    \"description\": \"📸 A powerful, high-performance React Native Camera library.\",\n    \"owner\": \"mrousavy\",\n    \"repo\": \"react-native-vision-camera\"\n  },\n  \"React Native Reusables\": {\n    \"title\": \"React Native Reusables\",\n    \"repoName\": \"mrzachnugent/react-native-reusables\",\n    \"githubUrl\": \"https://github.com/mrzachnugent/react-native-reusables\",\n    \"description\": \"Universal shadcn/ui for React Native featuring a focused collection of components - Crafted with NativeWind v4 and accessibility in mind.\",\n    \"owner\": \"mrzachnugent\",\n    \"repo\": \"react-native-reusables\"\n  },\n  \"Mock Service Worker\": {\n    \"title\": \"Mock Service Worker\",\n    \"repoName\": \"mswjs/msw\",\n    \"githubUrl\": \"https://github.com/mswjs/msw\",\n    \"description\": \"Industry standard API mocking for JavaScript.\",\n    \"owner\": \"mswjs\",\n    \"repo\": \"msw\"\n  },\n  \"Hammox\": {\n    \"title\": \"Hammox\",\n    \"repoName\": \"msz/hammox\",\n    \"githubUrl\": \"https://github.com/msz/hammox\",\n    \"description\": \"🏝 automated contract testing via type checking for Elixir functions and mocks\",\n    \"owner\": \"msz\",\n    \"repo\": \"hammox\"\n  },\n  \"MudBlazor\": {\n    \"title\": \"MudBlazor\",\n    \"repoName\": \"mudblazor/mudblazor\",\n    \"githubUrl\": \"https://github.com/mudblazor/mudblazor\",\n    \"description\": \"Blazor Component Library based on Material Design principles with an emphasis on ease of use and extensibility\",\n    \"owner\": \"mudblazor\",\n    \"repo\": \"mudblazor\"\n  },\n  \"Yuka\": {\n    \"title\": \"Yuka\",\n    \"repoName\": \"mugen87/yuka\",\n    \"githubUrl\": \"https://github.com/mugen87/yuka\",\n    \"description\": \"JavaScript library for developing Game AI.\",\n    \"owner\": \"mugen87\",\n    \"repo\": \"yuka\"\n  },\n  \"MUI Base UI\": {\n    \"title\": \"MUI Base UI\",\n    \"repoName\": \"mui/base-ui\",\n    \"githubUrl\": \"https://github.com/mui/base-ui\",\n    \"description\": \"Unstyled UI components for building accessible web apps and design systems. From the creators of Radix, Floating UI, and Material UI.\",\n    \"owner\": \"mui\",\n    \"repo\": \"base-ui\"\n  },\n  \"Material UI\": {\n    \"title\": \"Material UI\",\n    \"repoName\": \"mui/material-ui\",\n    \"githubUrl\": \"https://github.com/mui/material-ui\",\n    \"description\": \"Material UI: Comprehensive React component library that implements Google's Material Design. Free forever.\",\n    \"owner\": \"mui\",\n    \"repo\": \"material-ui\"\n  },\n  \"MUI X\": {\n    \"title\": \"MUI X\",\n    \"repoName\": \"mui/mui-x\",\n    \"githubUrl\": \"https://github.com/mui/mui-x\",\n    \"description\": \"MUI X: Build complex and data-rich applications using a growing list of advanced React components, like the Data Grid, Date and Time Pickers, Charts, and more!\",\n    \"owner\": \"mui\",\n    \"repo\": \"mui-x\"\n  },\n  \"Tmuxify\": {\n    \"title\": \"Tmuxify\",\n    \"repoName\": \"mustafamohsen/tmuxify\",\n    \"githubUrl\": \"https://github.com/mustafamohsen/tmuxify\",\n    \"description\": \"\",\n    \"owner\": \"mustafamohsen\",\n    \"repo\": \"tmuxify\"\n  },\n  \"Mux Node SDK\": {\n    \"title\": \"Mux Node SDK\",\n    \"repoName\": \"muxinc/mux-node-sdk\",\n    \"githubUrl\": \"https://github.com/muxinc/mux-node-sdk\",\n    \"description\": \"Official Mux API wrapper for Node projects, supporting both Mux Data and Mux Video.\",\n    \"owner\": \"muxinc\",\n    \"repo\": \"mux-node-sdk\"\n  },\n  \"Seaborn\": {\n    \"title\": \"Seaborn\",\n    \"repoName\": \"mwaskom/seaborn\",\n    \"githubUrl\": \"https://github.com/mwaskom/seaborn\",\n    \"description\": \"Statistical data visualization in Python\",\n    \"owner\": \"mwaskom\",\n    \"repo\": \"seaborn\"\n  },\n  \"MySQL Server\": {\n    \"title\": \"MySQL Server\",\n    \"repoName\": \"mysql/mysql-server\",\n    \"githubUrl\": \"https://github.com/mysql/mysql-server\",\n    \"description\": \"MySQL Server, the world's most popular open source database, and MySQL Cluster, a real-time, open source transactional database.\",\n    \"owner\": \"mysql\",\n    \"repo\": \"mysql-server\"\n  },\n  \"MySQL\": {\n    \"title\": \"MySQL\",\n    \"repoName\": \"mysqljs/mysql\",\n    \"githubUrl\": \"https://github.com/mysqljs/mysql\",\n    \"description\": \"A pure node.js JavaScript Client implementing the MySQL protocol.\",\n    \"owner\": \"mysqljs\",\n    \"repo\": \"mysql\"\n  },\n  \"Move\": {\n    \"title\": \"Move\",\n    \"repoName\": \"mystenlabs/move-book\",\n    \"githubUrl\": \"https://github.com/mystenlabs/move-book\",\n    \"description\": \"The Move Book and The Move Reference\",\n    \"owner\": \"mystenlabs\",\n    \"repo\": \"move-book\"\n  },\n  \"Sui\": {\n    \"title\": \"Sui\",\n    \"repoName\": \"mystenlabs/sui\",\n    \"githubUrl\": \"https://github.com/mystenlabs/sui\",\n    \"description\": \" Sui, a next-generation smart contract platform with high throughput, low latency, and an asset-oriented programming model powered by the Move programming language\",\n    \"owner\": \"mystenlabs\",\n    \"repo\": \"sui\"\n  },\n  \"Mysten Labs TS SDKs\": {\n    \"title\": \"Mysten Labs TS SDKs\",\n    \"repoName\": \"mystenlabs/ts-sdks\",\n    \"githubUrl\": \"https://github.com/mystenlabs/ts-sdks\",\n    \"description\": \"\",\n    \"owner\": \"mystenlabs\",\n    \"repo\": \"ts-sdks\"\n  },\n  \"n8n\": {\n    \"title\": \"n8n\",\n    \"repoName\": \"n8n-io/n8n-docs\",\n    \"githubUrl\": \"https://github.com/n8n-io/n8n-docs\",\n    \"description\": \"Documentation for n8n, a fair-code licensed automation tool with a free community edition and powerful enterprise options. Build AI functionality into your workflows.\",\n    \"owner\": \"n8n-io\",\n    \"repo\": \"n8n-docs\"\n  },\n  \"n8n Nodes Starter\": {\n    \"title\": \"n8n Nodes Starter\",\n    \"repoName\": \"n8n-io/n8n-nodes-starter\",\n    \"githubUrl\": \"https://github.com/n8n-io/n8n-nodes-starter\",\n    \"description\": \"Example starter module for custom n8n nodes.\",\n    \"owner\": \"n8n-io\",\n    \"repo\": \"n8n-nodes-starter\"\n  },\n  \"Moti\": {\n    \"title\": \"Moti\",\n    \"repoName\": \"nandorojo/moti\",\n    \"githubUrl\": \"https://github.com/nandorojo/moti\",\n    \"description\": \"🐼  The React Native (+ Web) animation library, powered by Reanimated 3.\",\n    \"owner\": \"nandorojo\",\n    \"repo\": \"moti\"\n  },\n  \"Mapper\": {\n    \"title\": \"Mapper\",\n    \"repoName\": \"nartc/mapper\",\n    \"githubUrl\": \"https://github.com/nartc/mapper\",\n    \"description\": \"🔥 An Object-Object AutoMapper for TypeScript 🔥\",\n    \"owner\": \"nartc\",\n    \"repo\": \"mapper\"\n  },\n  \"Bitecs\": {\n    \"title\": \"Bitecs\",\n    \"repoName\": \"natethegreatt/bitecs\",\n    \"githubUrl\": \"https://github.com/natethegreatt/bitecs\",\n    \"description\": \" Flexible, minimal, data-oriented ECS library for Typescript\",\n    \"owner\": \"natethegreatt\",\n    \"repo\": \"bitecs\"\n  },\n  \"Split\": {\n    \"title\": \"Split\",\n    \"repoName\": \"nathancahill/split\",\n    \"githubUrl\": \"https://github.com/nathancahill/split\",\n    \"description\": \"Unopinionated utilities for resizeable split views\",\n    \"owner\": \"nathancahill\",\n    \"repo\": \"split\"\n  },\n  \"Ghidra\": {\n    \"title\": \"Ghidra\",\n    \"repoName\": \"nationalsecurityagency/ghidra\",\n    \"githubUrl\": \"https://github.com/nationalsecurityagency/ghidra\",\n    \"description\": \"Ghidra is a software reverse engineering (SRE) framework\",\n    \"owner\": \"nationalsecurityagency\",\n    \"repo\": \"ghidra\"\n  },\n  \"NativeScript\": {\n    \"title\": \"NativeScript\",\n    \"repoName\": \"nativescript/docs\",\n    \"githubUrl\": \"https://github.com/nativescript/docs\",\n    \"description\": \"The NativeScript Docs! \",\n    \"owner\": \"nativescript\",\n    \"repo\": \"docs\"\n  },\n  \"NativeWind\": {\n    \"title\": \"NativeWind\",\n    \"repoName\": \"nativewind/nativewind\",\n    \"githubUrl\": \"https://github.com/nativewind/nativewind\",\n    \"description\": \"React Native utility-first universal design system - powered by Tailwind CSS\",\n    \"owner\": \"nativewind\",\n    \"repo\": \"nativewind\"\n  },\n  \"NATS Server\": {\n    \"title\": \"NATS Server\",\n    \"repoName\": \"nats-io/nats-server\",\n    \"githubUrl\": \"https://github.com/nats-io/nats-server\",\n    \"description\": \"High-Performance server for NATS.io, the cloud and edge native messaging system.\",\n    \"owner\": \"nats-io\",\n    \"repo\": \"nats-server\"\n  },\n  \"NATS Go\": {\n    \"title\": \"NATS Go\",\n    \"repoName\": \"nats-io/nats.go\",\n    \"githubUrl\": \"https://github.com/nats-io/nats.go\",\n    \"description\": \"Golang client for NATS, the cloud native messaging system.\",\n    \"owner\": \"nats-io\",\n    \"repo\": \"nats.go\"\n  },\n  \"NATS Python3 Client\": {\n    \"title\": \"NATS Python3 Client\",\n    \"repoName\": \"nats-io/nats.py\",\n    \"githubUrl\": \"https://github.com/nats-io/nats.py\",\n    \"description\": \"Python3 client for NATS\",\n    \"owner\": \"nats-io\",\n    \"repo\": \"nats.py\"\n  },\n  \"Fast XML Parser\": {\n    \"title\": \"Fast XML Parser\",\n    \"repoName\": \"naturalintelligence/fast-xml-parser\",\n    \"githubUrl\": \"https://github.com/naturalintelligence/fast-xml-parser\",\n    \"description\": \"Validate XML, Parse XML and Build XML rapidly without C/C++ based libraries and no callback.\",\n    \"owner\": \"naturalintelligence\",\n    \"repo\": \"fast-xml-parser\"\n  },\n  \"Nautilus Trader\": {\n    \"title\": \"Nautilus Trader\",\n    \"repoName\": \"nautechsystems/nautilus_trader\",\n    \"githubUrl\": \"https://github.com/nautechsystems/nautilus_trader\",\n    \"description\": \"A high-performance algorithmic trading platform and event-driven backtester\",\n    \"owner\": \"nautechsystems\",\n    \"repo\": \"nautilus_trader\"\n  },\n  \"MauiTubePlayer\": {\n    \"title\": \"MauiTubePlayer\",\n    \"repoName\": \"naweed/mauitubeplayer.git\",\n    \"githubUrl\": \"https://github.com/naweed/mauitubeplayer.git\",\n    \"description\": \"A Youtube Clone app building using .Net Maui\",\n    \"owner\": \"naweed\",\n    \"repo\": \"mauitubeplayer.git\"\n  },\n  \"Neo4j\": {\n    \"title\": \"Neo4j\",\n    \"repoName\": \"neo4j/neo4j-documentation\",\n    \"githubUrl\": \"https://github.com/neo4j/neo4j-documentation\",\n    \"description\": \"\",\n    \"owner\": \"neo4j\",\n    \"repo\": \"neo4j-documentation\"\n  },\n  \"Neoforge\": {\n    \"title\": \"Neoforge\",\n    \"repoName\": \"neoforged/neoforge\",\n    \"githubUrl\": \"https://github.com/neoforged/neoforge\",\n    \"description\": \"Neo Modding API for Minecraft, based on Forge\",\n    \"owner\": \"neoforged\",\n    \"repo\": \"neoforge\"\n  },\n  \"Neon\": {\n    \"title\": \"Neon\",\n    \"repoName\": \"neondatabase/website\",\n    \"githubUrl\": \"https://github.com/neondatabase/website\",\n    \"description\": \"Official docs and website for Neon.\",\n    \"owner\": \"neondatabase\",\n    \"repo\": \"website\"\n  },\n  \"Neovim\": {\n    \"title\": \"Neovim\",\n    \"repoName\": \"neovim/neovim\",\n    \"githubUrl\": \"https://github.com/neovim/neovim\",\n    \"description\": \"Vim-fork focused on extensibility and usability\",\n    \"owner\": \"neovim\",\n    \"repo\": \"neovim\"\n  },\n  \"Nerves\": {\n    \"title\": \"Nerves\",\n    \"repoName\": \"nerves-project/nerves\",\n    \"githubUrl\": \"https://github.com/nerves-project/nerves\",\n    \"description\": \"Craft and deploy bulletproof embedded software in Elixir\",\n    \"owner\": \"nerves-project\",\n    \"repo\": \"nerves\"\n  },\n  \"Taro\": {\n    \"title\": \"Taro\",\n    \"repoName\": \"nervjs/taro\",\n    \"githubUrl\": \"https://github.com/nervjs/taro\",\n    \"description\": \"开放式跨端跨框架解决方案，支持使用 React/Vue/Nerv 等框架来开发微信/京东/百度/支付宝/字节跳动/ QQ 小程序/H5/React Native 等应用。  https://taro.zone/\",\n    \"owner\": \"nervjs\",\n    \"repo\": \"taro\"\n  },\n  \"NestJS\": {\n    \"title\": \"NestJS\",\n    \"repoName\": \"nestjs/nest\",\n    \"githubUrl\": \"https://github.com/nestjs/nest\",\n    \"description\": \"A progressive Node.js framework for building efficient, scalable, and enterprise-grade server-side applications with TypeScript/JavaScript 🚀\",\n    \"owner\": \"nestjs\",\n    \"repo\": \"nest\"\n  },\n  \"NetBird\": {\n    \"title\": \"NetBird\",\n    \"repoName\": \"netbirdio/netbird\",\n    \"githubUrl\": \"https://github.com/netbirdio/netbird\",\n    \"description\": \"Connect your devices into a secure WireGuard®-based overlay network with SSO, MFA and granular access controls.\",\n    \"owner\": \"netbirdio\",\n    \"repo\": \"netbird\"\n  },\n  \"NetBox\": {\n    \"title\": \"NetBox\",\n    \"repoName\": \"netbox-community/netbox\",\n    \"githubUrl\": \"https://github.com/netbox-community/netbox\",\n    \"description\": \"The premier source of truth powering network automation. Open source under Apache 2. Try NetBox Cloud free: https://netboxlabs.com/free-netbox-cloud/\",\n    \"owner\": \"netbox-community\",\n    \"repo\": \"netbox\"\n  },\n  \"Netdata\": {\n    \"title\": \"Netdata\",\n    \"repoName\": \"netdata/netdata\",\n    \"githubUrl\": \"https://github.com/netdata/netdata\",\n    \"description\": \"X-Ray Vision for your infrastructure!\",\n    \"owner\": \"netdata\",\n    \"repo\": \"netdata\"\n  },\n  \"Go Expect\": {\n    \"title\": \"Go Expect\",\n    \"repoName\": \"netflix/go-expect\",\n    \"githubUrl\": \"https://github.com/netflix/go-expect\",\n    \"description\": \"an expect-like golang library to automate control of terminal or console based programs.\",\n    \"owner\": \"netflix\",\n    \"repo\": \"go-expect\"\n  },\n  \"Nette\": {\n    \"title\": \"Nette\",\n    \"repoName\": \"nette/docs\",\n    \"githubUrl\": \"https://github.com/nette/docs\",\n    \"description\": \"📖 The Nette documentation\",\n    \"owner\": \"nette\",\n    \"repo\": \"docs\"\n  },\n  \"NextAuth.js\": {\n    \"title\": \"NextAuth.js\",\n    \"repoName\": \"nextauthjs/next-auth\",\n    \"githubUrl\": \"https://github.com/nextauthjs/next-auth\",\n    \"description\": \"Authentication for the Web.\",\n    \"owner\": \"nextauthjs\",\n    \"repo\": \"next-auth\"\n  },\n  \"NextAuth\": {\n    \"title\": \"NextAuth.js\",\n    \"repoName\": \"nextauthjs/next-auth\",\n    \"githubUrl\": \"https://github.com/nextauthjs/next-auth\",\n    \"description\": \"Authentication for the Web.\",\n    \"owner\": \"nextauthjs\",\n    \"repo\": \"next-auth\"\n  },\n  \"Next.js\": {\n    \"title\": \"Next.js\",\n    \"repoName\": \"vercel/next.js\",\n    \"githubUrl\": \"https://github.com/vercel/next.js\",\n    \"description\": \"The React Framework\",\n    \"owner\": \"vercel\",\n    \"repo\": \"next.js\"\n  },\n  \"NGINX\": {\n    \"title\": \"NGINX\",\n    \"repoName\": \"nginx/nginx\",\n    \"githubUrl\": \"https://github.com/nginx/nginx\",\n    \"description\": \"The official NGINX Open Source repository.\",\n    \"owner\": \"nginx\",\n    \"repo\": \"nginx\"\n  },\n  \"NGINX Unit\": {\n    \"title\": \"NGINX Unit\",\n    \"repoName\": \"nginx/unit\",\n    \"githubUrl\": \"https://github.com/nginx/unit\",\n    \"description\": \"NGINX Unit - universal web app server - a lightweight and versatile open source server that simplifies the application stack by natively executing application code across eight different programming language runtimes.\",\n    \"owner\": \"nginx\",\n    \"repo\": \"unit\"\n  },\n  \"Nginx Proxy Manager\": {\n    \"title\": \"Nginx Proxy Manager\",\n    \"repoName\": \"nginxproxymanager/nginx-proxy-manager\",\n    \"githubUrl\": \"https://github.com/nginxproxymanager/nginx-proxy-manager\",\n    \"description\": \"Docker container for managing Nginx proxy hosts with a simple, powerful interface\",\n    \"owner\": \"nginxproxymanager\",\n    \"repo\": \"nginx-proxy-manager\"\n  },\n  \"NgRx Signals Builds\": {\n    \"title\": \"NgRx Signals Builds\",\n    \"repoName\": \"ngrx/signals-builds\",\n    \"githubUrl\": \"https://github.com/ngrx/signals-builds\",\n    \"description\": \"\",\n    \"owner\": \"ngrx\",\n    \"repo\": \"signals-builds\"\n  },\n  \"Obsidian Text Generator Plugin\": {\n    \"title\": \"Obsidian Text Generator Plugin\",\n    \"repoName\": \"nhaouari/obsidian-textgenerator-plugin\",\n    \"githubUrl\": \"https://github.com/nhaouari/obsidian-textgenerator-plugin\",\n    \"description\": \"Text Generator is a versatile plugin for Obsidian that allows you to generate text content using various AI providers, including OpenAI, Anthropic, Google and local models.\",\n    \"owner\": \"nhaouari\",\n    \"repo\": \"obsidian-textgenerator-plugin\"\n  },\n  \"NI-DAQmx Python\": {\n    \"title\": \"NI-DAQmx Python\",\n    \"repoName\": \"ni/nidaqmx-python\",\n    \"githubUrl\": \"https://github.com/ni/nidaqmx-python\",\n    \"description\": \"NI-DAQmx API for Python, created and supported by NI\",\n    \"owner\": \"ni\",\n    \"repo\": \"nidaqmx-python\"\n  },\n  \"Clay\": {\n    \"title\": \"Clay\",\n    \"repoName\": \"nicbarker/clay\",\n    \"githubUrl\": \"https://github.com/nicbarker/clay\",\n    \"description\": \"High performance UI layout library in C.\",\n    \"owner\": \"nicbarker\",\n    \"repo\": \"clay\"\n  },\n  \"Agentipy\": {\n    \"title\": \"Agentipy\",\n    \"repoName\": \"niceberginc/agentipy\",\n    \"githubUrl\": \"https://github.com/niceberginc/agentipy\",\n    \"description\": \"The #Python framework for connecting AI agents to any onchain app on  @solana-labs  🤖🐍\",\n    \"owner\": \"niceberginc\",\n    \"repo\": \"agentipy\"\n  },\n  \"Typed Inject\": {\n    \"title\": \"Typed Inject\",\n    \"repoName\": \"nicojs/typed-inject\",\n    \"githubUrl\": \"https://github.com/nicojs/typed-inject\",\n    \"description\": \"Type safe dependency injection for TypeScript\",\n    \"owner\": \"nicojs\",\n    \"repo\": \"typed-inject\"\n  },\n  \"Nightwatch\": {\n    \"title\": \"Nightwatch\",\n    \"repoName\": \"nightwatchjs/nightwatch-docs\",\n    \"githubUrl\": \"https://github.com/nightwatchjs/nightwatch-docs\",\n    \"description\": \"Source for https://nightwatchjs.org website\",\n    \"owner\": \"nightwatchjs\",\n    \"repo\": \"nightwatch-docs\"\n  },\n  \"PHP Parser\": {\n    \"title\": \"PHP Parser\",\n    \"repoName\": \"nikic/php-parser\",\n    \"githubUrl\": \"https://github.com/nikic/php-parser\",\n    \"description\": \"A PHP parser written in PHP\",\n    \"owner\": \"nikic\",\n    \"repo\": \"php-parser\"\n  },\n  \"Node XSD Schema Validator\": {\n    \"title\": \"Node XSD Schema Validator\",\n    \"repoName\": \"nikku/node-xsd-schema-validator\",\n    \"githubUrl\": \"https://github.com/nikku/node-xsd-schema-validator\",\n    \"description\": \"A schema (XSD) validator for NodeJS\",\n    \"owner\": \"nikku\",\n    \"repo\": \"node-xsd-schema-validator\"\n  },\n  \"Bevy Kira Audio\": {\n    \"title\": \"Bevy Kira Audio\",\n    \"repoName\": \"niklasei/bevy_kira_audio\",\n    \"githubUrl\": \"https://github.com/niklasei/bevy_kira_audio\",\n    \"description\": \"A Bevy plugin to use Kira for game audio\",\n    \"owner\": \"niklasei\",\n    \"repo\": \"bevy_kira_audio\"\n  },\n  \"NextJS Template\": {\n    \"title\": \"NextJS Template\",\n    \"repoName\": \"nishkohli96/nextjs-template\",\n    \"githubUrl\": \"https://github.com/nishkohli96/nextjs-template\",\n    \"description\": \"NextJS v15 Template with MUI\",\n    \"owner\": \"nishkohli96\",\n    \"repo\": \"nextjs-template\"\n  },\n  \"BunnyCDNStorageLib\": {\n    \"title\": \"BunnyCDNStorageLib\",\n    \"repoName\": \"niveditjain/bunnycdnstoragelib\",\n    \"githubUrl\": \"https://github.com/niveditjain/bunnycdnstoragelib\",\n    \"description\": \"Python Lib to connect to BunnyCDNStorage\",\n    \"owner\": \"niveditjain\",\n    \"repo\": \"bunnycdnstoragelib\"\n  },\n  \"Home Manager\": {\n    \"title\": \"Home Manager\",\n    \"repoName\": \"nix-community/home-manager\",\n    \"githubUrl\": \"https://github.com/nix-community/home-manager\",\n    \"description\": \"Manage a user environment using Nix  [maintainer=@rycee] \",\n    \"owner\": \"nix-community\",\n    \"repo\": \"home-manager\"\n  },\n  \"Nix\": {\n    \"title\": \"Nix\",\n    \"repoName\": \"nixos/nix.dev\",\n    \"githubUrl\": \"https://github.com/nixos/nix.dev\",\n    \"description\": \"Official documentation for getting things done with Nix.\",\n    \"owner\": \"nixos\",\n    \"repo\": \"nix.dev\"\n  },\n  \"Vinxi\": {\n    \"title\": \"Vinxi\",\n    \"repoName\": \"nksaraf/vinxi\",\n    \"githubUrl\": \"https://github.com/nksaraf/vinxi\",\n    \"description\": \"The Full Stack JavaScript SDK\",\n    \"owner\": \"nksaraf\",\n    \"repo\": \"vinxi\"\n  },\n  \"NLog\": {\n    \"title\": \"NLog\",\n    \"repoName\": \"nlog/nlog.git\",\n    \"githubUrl\": \"https://github.com/nlog/nlog.git\",\n    \"description\": \"NLog - Advanced and Structured Logging for Various .NET Platforms\",\n    \"owner\": \"nlog\",\n    \"repo\": \"nlog.git\"\n  },\n  \"JSON for Modern C++\": {\n    \"title\": \"JSON for Modern C++\",\n    \"repoName\": \"nlohmann/json\",\n    \"githubUrl\": \"https://github.com/nlohmann/json\",\n    \"description\": \"JSON for Modern C++\",\n    \"owner\": \"nlohmann\",\n    \"repo\": \"json\"\n  },\n  \"Formidable\": {\n    \"title\": \"Formidable\",\n    \"repoName\": \"node-formidable/formidable\",\n    \"githubUrl\": \"https://github.com/node-formidable/formidable\",\n    \"description\": \"The most used, flexible, fast and streaming parser for multipart form data. Supports uploading to serverless environments, AWS S3, Azure, GCP or the filesystem. Used in production.\",\n    \"owner\": \"node-formidable\",\n    \"repo\": \"formidable\"\n  },\n  \"Node-RED\": {\n    \"title\": \"Node-RED\",\n    \"repoName\": \"node-red/node-red.github.io\",\n    \"githubUrl\": \"https://github.com/node-red/node-red.github.io\",\n    \"description\": \"Node-RED Site\",\n    \"owner\": \"node-red\",\n    \"repo\": \"node-red.github.io\"\n  },\n  \"Swiper\": {\n    \"title\": \"Swiper\",\n    \"repoName\": \"nolimits4web/swiper\",\n    \"githubUrl\": \"https://github.com/nolimits4web/swiper\",\n    \"description\": \"Most modern mobile touch slider with hardware accelerated transitions\",\n    \"owner\": \"nolimits4web\",\n    \"repo\": \"swiper\"\n  },\n  \"Cult UI\": {\n    \"title\": \"Cult UI\",\n    \"repoName\": \"nolly-studio/cult-ui\",\n    \"githubUrl\": \"https://github.com/nolly-studio/cult-ui\",\n    \"description\": \"Components crafted for Design Engineers. Styled using Tailwind CSS, fully compatible with Shadcn, and easy to integrate—just copy and paste. MIT 🤌\",\n    \"owner\": \"nolly-studio\",\n    \"repo\": \"cult-ui\"\n  },\n  \"Hardhat\": {\n    \"title\": \"Hardhat\",\n    \"repoName\": \"nomicfoundation/hardhat\",\n    \"githubUrl\": \"https://github.com/nomicfoundation/hardhat\",\n    \"description\": \"Hardhat is a development environment to compile, deploy, test, and debug your Ethereum software. \",\n    \"owner\": \"nomicfoundation\",\n    \"repo\": \"hardhat\"\n  },\n  \"NopeCHA Extension\": {\n    \"title\": \"NopeCHA Extension\",\n    \"repoName\": \"nopechallc/nopecha-extension\",\n    \"githubUrl\": \"https://github.com/nopechallc/nopecha-extension\",\n    \"description\": \"Automated CAPTCHA solver for your browser. Works with Selenium, Puppeteer, Playwright, and more.\",\n    \"owner\": \"nopechallc\",\n    \"repo\": \"nopecha-extension\"\n  },\n  \"Nostr\": {\n    \"title\": \"Nostr\",\n    \"repoName\": \"nostr-protocol/nips\",\n    \"githubUrl\": \"https://github.com/nostr-protocol/nips\",\n    \"description\": \"Nostr Implementation Possibilities\",\n    \"owner\": \"nostr-protocol\",\n    \"repo\": \"nips\"\n  },\n  \"Novu\": {\n    \"title\": \"Novu\",\n    \"repoName\": \"novuhq/docs\",\n    \"githubUrl\": \"https://github.com/novuhq/docs\",\n    \"description\": \"Novu documentation - The Masterpiece\",\n    \"owner\": \"novuhq\",\n    \"repo\": \"docs\"\n  },\n  \"WatermelonDB\": {\n    \"title\": \"WatermelonDB\",\n    \"repoName\": \"nozbe/watermelondb\",\n    \"githubUrl\": \"https://github.com/nozbe/watermelondb\",\n    \"description\": \"🍉 Reactive & asynchronous database for powerful React and React Native apps ⚡️\",\n    \"owner\": \"nozbe\",\n    \"repo\": \"watermelondb\"\n  },\n  \"nRF Connect SDK\": {\n    \"title\": \"nRF Connect SDK\",\n    \"repoName\": \"nrfconnect/sdk-nrf\",\n    \"githubUrl\": \"https://github.com/nrfconnect/sdk-nrf\",\n    \"description\": \"nRF Connect SDK main repository\",\n    \"owner\": \"nrfconnect\",\n    \"repo\": \"sdk-nrf\"\n  },\n  \"NCS Zephyr\": {\n    \"title\": \"NCS Zephyr\",\n    \"repoName\": \"nrfconnect/sdk-zephyr\",\n    \"githubUrl\": \"https://github.com/nrfconnect/sdk-zephyr\",\n    \"description\": \"NCS downstream of https://github.com/zephyrproject-rtos/zephyr\",\n    \"owner\": \"nrfconnect\",\n    \"repo\": \"sdk-zephyr\"\n  },\n  \"Nx\": {\n    \"title\": \"Nx\",\n    \"repoName\": \"nrwl/nx\",\n    \"githubUrl\": \"https://github.com/nrwl/nx\",\n    \"description\": \"Build system, optimized for monorepos, with AI-powered architectural awareness and advanced CI capabilities.\",\n    \"owner\": \"nrwl\",\n    \"repo\": \"nx\"\n  },\n  \"Nx Console\": {\n    \"title\": \"Nx Console\",\n    \"repoName\": \"nrwl/nx-console\",\n    \"githubUrl\": \"https://github.com/nrwl/nx-console\",\n    \"description\": \"Nx Console is the user interface for Nx & Lerna.\",\n    \"owner\": \"nrwl\",\n    \"repo\": \"nx-console\"\n  },\n  \"Nx Examples\": {\n    \"title\": \"Nx Examples\",\n    \"repoName\": \"nrwl/nx-examples\",\n    \"githubUrl\": \"https://github.com/nrwl/nx-examples\",\n    \"description\": \"Example repo for Nx workspace\",\n    \"owner\": \"nrwl\",\n    \"repo\": \"nx-examples\"\n  },\n  \"Nuitka\": {\n    \"title\": \"Nuitka\",\n    \"repoName\": \"nuitka/nuitka\",\n    \"githubUrl\": \"https://github.com/nuitka/nuitka\",\n    \"description\": \"Nuitka is a Python compiler written in Python.  It's fully compatible with Python 2.6, 2.7, 3.4-3.13. You feed it your Python app, it does a lot of clever things, and spits out an executable or extension module. \",\n    \"owner\": \"nuitka\",\n    \"repo\": \"nuitka\"\n  },\n  \"NumPy\": {\n    \"title\": \"NumPy\",\n    \"repoName\": \"numpy/numpy.org\",\n    \"githubUrl\": \"https://github.com/numpy/numpy.org\",\n    \"description\": \"The NumPy home page\",\n    \"owner\": \"numpy\",\n    \"repo\": \"numpy.org\"\n  },\n  \"Nushell\": {\n    \"title\": \"Nushell\",\n    \"repoName\": \"nushell/nushell.github.io\",\n    \"githubUrl\": \"https://github.com/nushell/nushell.github.io\",\n    \"description\": \"Nushell's main website, blog, book, and more\",\n    \"owner\": \"nushell\",\n    \"repo\": \"nushell.github.io\"\n  },\n  \"Nuxt Apollo\": {\n    \"title\": \"Nuxt Apollo\",\n    \"repoName\": \"nuxt-modules/apollo\",\n    \"githubUrl\": \"https://github.com/nuxt-modules/apollo\",\n    \"description\": \"Nuxt.js module to use Vue-Apollo. The Apollo integration for GraphQL.\",\n    \"owner\": \"nuxt-modules\",\n    \"repo\": \"apollo\"\n  },\n  \"Nuxt I18n\": {\n    \"title\": \"Nuxt I18n\",\n    \"repoName\": \"nuxt-modules/i18n\",\n    \"githubUrl\": \"https://github.com/nuxt-modules/i18n\",\n    \"description\": \"I18n module for Nuxt\",\n    \"owner\": \"nuxt-modules\",\n    \"repo\": \"i18n\"\n  },\n  \"Nuxt Supabase\": {\n    \"title\": \"Nuxt Supabase\",\n    \"repoName\": \"nuxt-modules/supabase\",\n    \"githubUrl\": \"https://github.com/nuxt-modules/supabase\",\n    \"description\": \"Supabase module for Nuxt.\",\n    \"owner\": \"nuxt-modules\",\n    \"repo\": \"supabase\"\n  },\n  \"Nuxt Tailwind CSS\": {\n    \"title\": \"Nuxt Tailwind CSS\",\n    \"repoName\": \"nuxt-modules/tailwindcss\",\n    \"githubUrl\": \"https://github.com/nuxt-modules/tailwindcss\",\n    \"description\": \"Tailwind CSS module for Nuxt\",\n    \"owner\": \"nuxt-modules\",\n    \"repo\": \"tailwindcss\"\n  },\n  \"Nuxt Content\": {\n    \"title\": \"Nuxt Content\",\n    \"repoName\": \"nuxt/content\",\n    \"githubUrl\": \"https://github.com/nuxt/content\",\n    \"description\": \"The file-based CMS for your Nuxt application, powered by Markdown and Vue components.\",\n    \"owner\": \"nuxt\",\n    \"repo\": \"content\"\n  },\n  \"Nuxt Image\": {\n    \"title\": \"Nuxt Image\",\n    \"repoName\": \"nuxt/image\",\n    \"githubUrl\": \"https://github.com/nuxt/image\",\n    \"description\": \"Plug-and-play image optimization for Nuxt applications.\",\n    \"owner\": \"nuxt\",\n    \"repo\": \"image\"\n  },\n  \"Nuxt\": {\n    \"title\": \"Nuxt\",\n    \"repoName\": \"nuxt/nuxt\",\n    \"githubUrl\": \"https://github.com/nuxt/nuxt\",\n    \"description\": \"The Intuitive Vue Framework.\",\n    \"owner\": \"nuxt\",\n    \"repo\": \"nuxt\"\n  },\n  \"Nuxt UI\": {\n    \"title\": \"Nuxt UI\",\n    \"repoName\": \"nuxt/ui\",\n    \"githubUrl\": \"https://github.com/nuxt/ui\",\n    \"description\": \"The Intuitive Vue UI Library powered by Reka UI & Tailwind CSS.\",\n    \"owner\": \"nuxt\",\n    \"repo\": \"ui\"\n  },\n  \"CUDA Python\": {\n    \"title\": \"CUDA Python\",\n    \"repoName\": \"nvidia/cuda-python\",\n    \"githubUrl\": \"https://github.com/nvidia/cuda-python\",\n    \"description\": \"CUDA Python: Performance meets Productivity\",\n    \"owner\": \"nvidia\",\n    \"repo\": \"cuda-python\"\n  },\n  \"CUDA Samples\": {\n    \"title\": \"CUDA Samples\",\n    \"repoName\": \"nvidia/cuda-samples\",\n    \"githubUrl\": \"https://github.com/nvidia/cuda-samples\",\n    \"description\": \"Samples for CUDA Developers which demonstrates features in CUDA Toolkit\",\n    \"owner\": \"nvidia\",\n    \"repo\": \"cuda-samples\"\n  },\n  \"Spark RAPIDS\": {\n    \"title\": \"Spark RAPIDS\",\n    \"repoName\": \"nvidia/spark-rapids\",\n    \"githubUrl\": \"https://github.com/nvidia/spark-rapids\",\n    \"description\": \"Spark RAPIDS plugin - accelerate Apache Spark with GPUs\",\n    \"owner\": \"nvidia\",\n    \"repo\": \"spark-rapids\"\n  },\n  \"NVIDIA TensorRT\": {\n    \"title\": \"NVIDIA TensorRT\",\n    \"repoName\": \"nvidia/tensorrt\",\n    \"githubUrl\": \"https://github.com/nvidia/tensorrt\",\n    \"description\": \"NVIDIA® TensorRT™ is an SDK for high-performance deep learning inference on NVIDIA GPUs. This repository contains the open source components of TensorRT.\",\n    \"owner\": \"nvidia\",\n    \"repo\": \"tensorrt\"\n  },\n  \"TensorRT LLM\": {\n    \"title\": \"TensorRT LLM\",\n    \"repoName\": \"nvidia/tensorrt-llm\",\n    \"githubUrl\": \"https://github.com/nvidia/tensorrt-llm\",\n    \"description\": \"TensorRT-LLM provides users with an easy-to-use Python API to define Large Language Models (LLMs) and support state-of-the-art optimizations to perform inference efficiently on NVIDIA GPUs. TensorRT-LLM also contains components to create Python and C++ runtimes that orchestrate the inference execution in performant way.\",\n    \"owner\": \"nvidia\",\n    \"repo\": \"tensorrt-llm\"\n  },\n  \"Node Version Manager\": {\n    \"title\": \"Node Version Manager\",\n    \"repoName\": \"nvm-sh/nvm\",\n    \"githubUrl\": \"https://github.com/nvm-sh/nvm\",\n    \"description\": \"Node Version Manager - POSIX-compliant bash script to manage multiple active node.js versions\",\n    \"owner\": \"nvm-sh\",\n    \"repo\": \"nvm\"\n  },\n  \"Dfraw Parser\": {\n    \"title\": \"Dfraw Parser\",\n    \"repoName\": \"nwesterhausen/dfraw_parser\",\n    \"githubUrl\": \"https://github.com/nwesterhausen/dfraw_parser\",\n    \"description\": \"A rust library for parsing raw files from the game Dwarf Fortress\",\n    \"owner\": \"nwesterhausen\",\n    \"repo\": \"dfraw_parser\"\n  },\n  \"React Share\": {\n    \"title\": \"React Share\",\n    \"repoName\": \"nygardk/react-share\",\n    \"githubUrl\": \"https://github.com/nygardk/react-share\",\n    \"description\": \"Social media share buttons and share counts for React\",\n    \"owner\": \"nygardk\",\n    \"repo\": \"react-share\"\n  },\n  \"OpenAPI Specification\": {\n    \"title\": \"OpenAPI Specification\",\n    \"repoName\": \"oai/openapi-specification\",\n    \"githubUrl\": \"https://github.com/oai/openapi-specification\",\n    \"description\": \"The OpenAPI Specification Repository\",\n    \"owner\": \"oai\",\n    \"repo\": \"openapi-specification\"\n  },\n  \"OASIS XLIFF\": {\n    \"title\": \"OASIS XLIFF\",\n    \"repoName\": \"oasis-tcs/xliff-xliff-22\",\n    \"githubUrl\": \"https://github.com/oasis-tcs/xliff-xliff-22\",\n    \"description\": \"OASIS XLIFF TC: A repository designed for use in development of TC chartered work products and test suites\",\n    \"owner\": \"oasis-tcs\",\n    \"repo\": \"xliff-xliff-22\"\n  },\n  \"Oasis Network\": {\n    \"title\": \"Oasis Network\",\n    \"repoName\": \"oasisprotocol/docs\",\n    \"githubUrl\": \"https://github.com/oasisprotocol/docs\",\n    \"description\": \"Official documentation for the Oasis Network.\",\n    \"owner\": \"oasisprotocol\",\n    \"repo\": \"docs\"\n  },\n  \"Oasis SDK\": {\n    \"title\": \"Oasis SDK\",\n    \"repoName\": \"oasisprotocol/oasis-sdk\",\n    \"githubUrl\": \"https://github.com/oasisprotocol/oasis-sdk\",\n    \"description\": \"Official SDK for the Oasis Network.\",\n    \"owner\": \"oasisprotocol\",\n    \"repo\": \"oasis-sdk\"\n  },\n  \"Oasis Sapphire\": {\n    \"title\": \"Oasis Sapphire\",\n    \"repoName\": \"oasisprotocol/sapphire-paratime\",\n    \"githubUrl\": \"https://github.com/oasisprotocol/sapphire-paratime\",\n    \"description\": \"Oasis Sapphire - the confidential EVM-compatible ParaTime for the Oasis Network\",\n    \"owner\": \"oasisprotocol\",\n    \"repo\": \"sapphire-paratime\"\n  },\n  \"Oban\": {\n    \"title\": \"Oban\",\n    \"repoName\": \"oban-bg/oban\",\n    \"githubUrl\": \"https://github.com/oban-bg/oban\",\n    \"description\": \"💎 Robust job processing in Elixir, backed by modern PostgreSQL, SQLite3, and MySQL\",\n    \"owner\": \"oban-bg\",\n    \"repo\": \"oban\"\n  },\n  \"Oban Met\": {\n    \"title\": \"Oban Met\",\n    \"repoName\": \"oban-bg/oban_met\",\n    \"githubUrl\": \"https://github.com/oban-bg/oban_met\",\n    \"description\": \"Distributed, compacted, timeseries metrics with keyframes and optional persistence for Oban\",\n    \"owner\": \"oban-bg\",\n    \"repo\": \"oban_met\"\n  },\n  \"Oban Notifiers Phoenix\": {\n    \"title\": \"Oban Notifiers Phoenix\",\n    \"repoName\": \"oban-bg/oban_notifiers_phoenix\",\n    \"githubUrl\": \"https://github.com/oban-bg/oban_notifiers_phoenix\",\n    \"description\": \"An Oban.Notifier that uses an application's Phoenix.PubSub for notifications.\",\n    \"owner\": \"oban-bg\",\n    \"repo\": \"oban_notifiers_phoenix\"\n  },\n  \"Oban Training\": {\n    \"title\": \"Oban Training\",\n    \"repoName\": \"oban-bg/oban_training\",\n    \"githubUrl\": \"https://github.com/oban-bg/oban_training\",\n    \"description\": \"📓 Oban Training curriculum derived from in-person training at Elixirconf 2023\",\n    \"owner\": \"oban-bg\",\n    \"repo\": \"oban_training\"\n  },\n  \"Oban Web\": {\n    \"title\": \"Oban Web\",\n    \"repoName\": \"oban-bg/oban_web\",\n    \"githubUrl\": \"https://github.com/oban-bg/oban_web\",\n    \"description\": \"🧭 Oban Web live dashboard\",\n    \"owner\": \"oban-bg\",\n    \"repo\": \"oban_web\"\n  },\n  \"Oblix Python\": {\n    \"title\": \"Oblix Python\",\n    \"repoName\": \"oblix-ai/oblix-python\",\n    \"githubUrl\": \"https://github.com/oblix-ai/oblix-python\",\n    \"description\": \"Oblix-python APIs for seamless orchestration between Cloud and Edge LLMs\",\n    \"owner\": \"oblix-ai\",\n    \"repo\": \"oblix-python\"\n  },\n  \"Observable Framework\": {\n    \"title\": \"Observable Framework\",\n    \"repoName\": \"observablehq/framework\",\n    \"githubUrl\": \"https://github.com/observablehq/framework\",\n    \"description\": \"A static site generator for data apps, dashboards, reports, and more. Observable Framework combines JavaScript on the front-end for interactive graphics with any language on the back-end for data analysis.\",\n    \"owner\": \"observablehq\",\n    \"repo\": \"framework\"\n  },\n  \"Observable Plot\": {\n    \"title\": \"Observable Plot\",\n    \"repoName\": \"observablehq/plot\",\n    \"githubUrl\": \"https://github.com/observablehq/plot\",\n    \"description\": \"A concise API for exploratory data visualization implementing a layered grammar of graphics\",\n    \"owner\": \"observablehq\",\n    \"repo\": \"plot\"\n  },\n  \"Obsidian JsonCanvas\": {\n    \"title\": \"Obsidian JsonCanvas\",\n    \"repoName\": \"obsidianmd/jsoncanvas\",\n    \"githubUrl\": \"https://github.com/obsidianmd/jsoncanvas\",\n    \"description\": \"An open file format for infinite canvas data.\",\n    \"owner\": \"obsidianmd\",\n    \"repo\": \"jsoncanvas\"\n  },\n  \"Obsidian\": {\n    \"title\": \"Obsidian\",\n    \"repoName\": \"obsidianmd/obsidian-help\",\n    \"githubUrl\": \"https://github.com/obsidianmd/obsidian-help\",\n    \"description\": \"Help documentation for Obsidian.\",\n    \"owner\": \"obsidianmd\",\n    \"repo\": \"obsidian-help\"\n  },\n  \"React Native Template Obytes\": {\n    \"title\": \"React Native Template Obytes\",\n    \"repoName\": \"obytes/react-native-template-obytes\",\n    \"githubUrl\": \"https://github.com/obytes/react-native-template-obytes\",\n    \"description\": \"📱 A template for your next React Native project: Expo, PNPM, TypeScript, TailwindCSS, Husky, EAS, GitHub Actions, Env Vars, expo-router, react-query, react-hook-form.\",\n    \"owner\": \"obytes\",\n    \"repo\": \"react-native-template-obytes\"\n  },\n  \"Dear ImGui\": {\n    \"title\": \"Dear ImGui\",\n    \"repoName\": \"ocornut/imgui\",\n    \"githubUrl\": \"https://github.com/ocornut/imgui\",\n    \"description\": \"Dear ImGui: Bloat-free Graphical User interface for C++ with minimal dependencies\",\n    \"owner\": \"ocornut\",\n    \"repo\": \"imgui\"\n  },\n  \"October CMS\": {\n    \"title\": \"October CMS\",\n    \"repoName\": \"octobercms/docs\",\n    \"githubUrl\": \"https://github.com/octobercms/docs\",\n    \"description\": \"The October CMS Documentation\",\n    \"owner\": \"octobercms\",\n    \"repo\": \"docs\"\n  },\n  \"Octokit.js\": {\n    \"title\": \"Octokit.js\",\n    \"repoName\": \"octokit/octokit.js\",\n    \"githubUrl\": \"https://github.com/octokit/octokit.js\",\n    \"description\": \"The all-batteries-included GitHub SDK for Browsers, Node.js, and Deno.\",\n    \"owner\": \"octokit\",\n    \"repo\": \"octokit.js\"\n  },\n  \"Odin\": {\n    \"title\": \"Odin\",\n    \"repoName\": \"odin-lang/examples.git\",\n    \"githubUrl\": \"https://github.com/odin-lang/examples.git\",\n    \"description\": \"Examples of idiomatic Odin code\",\n    \"owner\": \"odin-lang\",\n    \"repo\": \"examples.git\"\n  },\n  \"Odin Programming Language\": {\n    \"title\": \"Odin Programming Language\",\n    \"repoName\": \"odin-lang/odin.git\",\n    \"githubUrl\": \"https://github.com/odin-lang/odin.git\",\n    \"description\": \"Odin Programming Language\",\n    \"owner\": \"odin-lang\",\n    \"repo\": \"odin.git\"\n  },\n  \"Odin Pkg\": {\n    \"title\": \"Odin Pkg\",\n    \"repoName\": \"odin-lang/pkg.odin-lang.org.git\",\n    \"githubUrl\": \"https://github.com/odin-lang/pkg.odin-lang.org.git\",\n    \"description\": \"https://pkg.odin-lang.org\",\n    \"owner\": \"odin-lang\",\n    \"repo\": \"pkg.odin-lang.org.git\"\n  },\n  \"Odoo\": {\n    \"title\": \"Odoo\",\n    \"repoName\": \"odoo/documentation\",\n    \"githubUrl\": \"https://github.com/odoo/documentation\",\n    \"description\": \"Odoo documentation sources\",\n    \"owner\": \"odoo\",\n    \"repo\": \"documentation\"\n  },\n  \"Odra Framework\": {\n    \"title\": \"Odra Framework\",\n    \"repoName\": \"odradev/odra\",\n    \"githubUrl\": \"https://github.com/odradev/odra\",\n    \"description\": \"Odra framework\",\n    \"owner\": \"odradev\",\n    \"repo\": \"odra\"\n  },\n  \"Pg-mem\": {\n    \"title\": \"Pg-mem\",\n    \"repoName\": \"oguimbal/pg-mem\",\n    \"githubUrl\": \"https://github.com/oguimbal/pg-mem\",\n    \"description\": \"An in memory postgres DB instance for your unit tests\",\n    \"owner\": \"oguimbal\",\n    \"repo\": \"pg-mem\"\n  },\n  \"Anime.js\": {\n    \"title\": \"Anime.js\",\n    \"repoName\": \"ogyeet10/animejs-docs\",\n    \"githubUrl\": \"https://github.com/ogyeet10/animejs-docs\",\n    \"description\": \"\",\n    \"owner\": \"ogyeet10\",\n    \"repo\": \"animejs-docs\"\n  },\n  \"Oh My Zsh\": {\n    \"title\": \"Oh My Zsh\",\n    \"repoName\": \"ohmyzsh/ohmyzsh\",\n    \"githubUrl\": \"https://github.com/ohmyzsh/ohmyzsh\",\n    \"description\": \"🙃   A delightful community-driven (with 2,400+ contributors) framework for managing your zsh configuration. Includes 300+ optional plugins (rails, git, macOS, hub, docker, homebrew, node, php, python, etc), 140+ themes to spice up your morning, and an auto-update tool that makes it easy to keep up with the latest updates from the community.\",\n    \"owner\": \"ohmyzsh\",\n    \"repo\": \"ohmyzsh\"\n  },\n  \"OI Wiki\": {\n    \"title\": \"OI Wiki\",\n    \"repoName\": \"oi-wiki/oi-wiki\",\n    \"githubUrl\": \"https://github.com/oi-wiki/oi-wiki\",\n    \"description\": \":star2: Wiki of OI / ICPC for everyone. （某大型游戏线上攻略，内含炫酷算术魔法）\",\n    \"owner\": \"oi-wiki\",\n    \"repo\": \"oi-wiki\"\n  },\n  \"Pytest Check\": {\n    \"title\": \"Pytest Check\",\n    \"repoName\": \"okken/pytest-check\",\n    \"githubUrl\": \"https://github.com/okken/pytest-check\",\n    \"description\": \"A pytest plugin that allows multiple failures per test.\",\n    \"owner\": \"okken\",\n    \"repo\": \"pytest-check\"\n  },\n  \"Tabulator\": {\n    \"title\": \"Tabulator\",\n    \"repoName\": \"olifolkerd/tabulator\",\n    \"githubUrl\": \"https://github.com/olifolkerd/tabulator\",\n    \"description\": \"Interactive Tables and Data Grids for JavaScript\",\n    \"owner\": \"olifolkerd\",\n    \"repo\": \"tabulator\"\n  },\n  \"Ollama\": {\n    \"title\": \"Ollama\",\n    \"repoName\": \"ollama/ollama\",\n    \"githubUrl\": \"https://github.com/ollama/ollama\",\n    \"description\": \"Get up and running with Llama 3.3, DeepSeek-R1, Phi-4, Gemma 3, Mistral Small 3.1 and other large language models.\",\n    \"owner\": \"ollama\",\n    \"repo\": \"ollama\"\n  },\n  \"One\": {\n    \"title\": \"One\",\n    \"repoName\": \"onejs/one\",\n    \"githubUrl\": \"https://github.com/onejs/one\",\n    \"description\": \"❶ One is a new React framework - target web and native with a single Vite plugin and fully shared code, so you can ship cross-platform nearly as easy as single-platform.\",\n    \"owner\": \"onejs\",\n    \"repo\": \"one\"\n  },\n  \"OneSignal Android SDK\": {\n    \"title\": \"OneSignal Android SDK\",\n    \"repoName\": \"onesignal/onesignal-android-sdk\",\n    \"githubUrl\": \"https://github.com/onesignal/onesignal-android-sdk\",\n    \"description\": \"OneSignal is a free push notification service for mobile apps. This plugin makes it easy to integrate your native Android or Amazon app with OneSignal. https://onesignal.com\",\n    \"owner\": \"onesignal\",\n    \"repo\": \"onesignal-android-sdk\"\n  },\n  \"OneSignal Flutter SDK\": {\n    \"title\": \"OneSignal Flutter SDK\",\n    \"repoName\": \"onesignal/onesignal-flutter-sdk\",\n    \"githubUrl\": \"https://github.com/onesignal/onesignal-flutter-sdk\",\n    \"description\": \"OneSignal is a free push notification service for mobile apps. This plugin makes it easy to integrate your flutter app with OneSignal\",\n    \"owner\": \"onesignal\",\n    \"repo\": \"onesignal-flutter-sdk\"\n  },\n  \"OneSignal iOS SDK\": {\n    \"title\": \"OneSignal iOS SDK\",\n    \"repoName\": \"onesignal/onesignal-ios-sdk\",\n    \"githubUrl\": \"https://github.com/onesignal/onesignal-ios-sdk\",\n    \"description\": \"OneSignal is a free push notification service for mobile apps. This plugin makes it easy to integrate your native iOS app with OneSignal. https://onesignal.com\",\n    \"owner\": \"onesignal\",\n    \"repo\": \"onesignal-ios-sdk\"\n  },\n  \"OneSignal Unity SDK\": {\n    \"title\": \"OneSignal Unity SDK\",\n    \"repoName\": \"onesignal/onesignal-unity-sdk\",\n    \"githubUrl\": \"https://github.com/onesignal/onesignal-unity-sdk\",\n    \"description\": \"OneSignal is a free push notification service for mobile apps. This plugin makes it easy to integrate your Unity app with OneSignal. https://onesignal.com\",\n    \"owner\": \"onesignal\",\n    \"repo\": \"onesignal-unity-sdk\"\n  },\n  \"OneSignal Vue 3\": {\n    \"title\": \"OneSignal Vue 3\",\n    \"repoName\": \"onesignal/onesignal-vue3\",\n    \"githubUrl\": \"https://github.com/onesignal/onesignal-vue3\",\n    \"description\": \"Vue 3 OneSignal Plugin: Make it easy to integrate OneSignal with your Vue App!\",\n    \"owner\": \"onesignal\",\n    \"repo\": \"onesignal-vue3\"\n  },\n  \"OneSignal Website SDK\": {\n    \"title\": \"OneSignal Website SDK\",\n    \"repoName\": \"onesignal/onesignal-website-sdk\",\n    \"githubUrl\": \"https://github.com/onesignal/onesignal-website-sdk\",\n    \"description\": \"OneSignal is a push notification service for web and mobile apps. This SDK makes it easy to integrate your website with OneSignal Push Notifications. https://onesignal.com\",\n    \"owner\": \"onesignal\",\n    \"repo\": \"onesignal-website-sdk\"\n  },\n  \"React OneSignal\": {\n    \"title\": \"React OneSignal\",\n    \"repoName\": \"onesignal/react-onesignal\",\n    \"githubUrl\": \"https://github.com/onesignal/react-onesignal\",\n    \"description\": \"React OneSignal Module: Make it easy to integrate OneSignal with your React App!\",\n    \"owner\": \"onesignal\",\n    \"repo\": \"react-onesignal\"\n  },\n  \"Optic\": {\n    \"title\": \"Optic\",\n    \"repoName\": \"onjara/optic\",\n    \"githubUrl\": \"https://github.com/onjara/optic\",\n    \"description\": \"A powerful logging framework for Deno\",\n    \"owner\": \"onjara\",\n    \"repo\": \"optic\"\n  },\n  \"OOHTTP\": {\n    \"title\": \"OOHTTP\",\n    \"repoName\": \"ooni/oohttp\",\n    \"githubUrl\": \"https://github.com/ooni/oohttp\",\n    \"description\": \"Fork of Go stdlib's net/http that works with alternative TLS libraries like refraction-networking/utls.\",\n    \"owner\": \"ooni\",\n    \"repo\": \"oohttp\"\n  },\n  \"Op SQLite\": {\n    \"title\": \"Op SQLite\",\n    \"repoName\": \"op-engineering/op-sqlite\",\n    \"githubUrl\": \"https://github.com/op-engineering/op-sqlite\",\n    \"description\": \"Fastest SQLite library for react-native by @ospfranco\",\n    \"owner\": \"op-engineering\",\n    \"repo\": \"op-sqlite\"\n  },\n  \"OpenMetadata\": {\n    \"title\": \"OpenMetadata\",\n    \"repoName\": \"open-metadata/openmetadata\",\n    \"githubUrl\": \"https://github.com/open-metadata/openmetadata\",\n    \"description\": \"OpenMetadata is a unified metadata platform for data discovery, data observability, and data governance powered by a central metadata repository, in-depth column level lineage, and seamless team collaboration.\",\n    \"owner\": \"open-metadata\",\n    \"repo\": \"openmetadata\"\n  },\n  \"OpenTelemetry Collector Contrib\": {\n    \"title\": \"OpenTelemetry Collector Contrib\",\n    \"repoName\": \"open-telemetry/opentelemetry-collector-contrib\",\n    \"githubUrl\": \"https://github.com/open-telemetry/opentelemetry-collector-contrib\",\n    \"description\": \"Contrib repository for the OpenTelemetry Collector\",\n    \"owner\": \"open-telemetry\",\n    \"repo\": \"opentelemetry-collector-contrib\"\n  },\n  \"OpenTelemetry .NET\": {\n    \"title\": \"OpenTelemetry .NET\",\n    \"repoName\": \"open-telemetry/opentelemetry-dotnet\",\n    \"githubUrl\": \"https://github.com/open-telemetry/opentelemetry-dotnet\",\n    \"description\": \"The OpenTelemetry .NET Client\",\n    \"owner\": \"open-telemetry\",\n    \"repo\": \"opentelemetry-dotnet\"\n  },\n  \"OpenTelemetry Python\": {\n    \"title\": \"OpenTelemetry Python\",\n    \"repoName\": \"open-telemetry/opentelemetry-python\",\n    \"githubUrl\": \"https://github.com/open-telemetry/opentelemetry-python\",\n    \"description\": \"OpenTelemetry Python API and SDK \",\n    \"owner\": \"open-telemetry\",\n    \"repo\": \"opentelemetry-python\"\n  },\n  \"OpenTelemetry\": {\n    \"title\": \"OpenTelemetry\",\n    \"repoName\": \"open-telemetry/opentelemetry.io\",\n    \"githubUrl\": \"https://github.com/open-telemetry/opentelemetry.io\",\n    \"description\": \"The OpenTelemetry website and documentation\",\n    \"owner\": \"open-telemetry\",\n    \"repo\": \"opentelemetry.io\"\n  },\n  \"Open WebUI\": {\n    \"title\": \"Open WebUI\",\n    \"repoName\": \"open-webui/docs\",\n    \"githubUrl\": \"https://github.com/open-webui/docs\",\n    \"description\": \"https://docs.openwebui.com\",\n    \"owner\": \"open-webui\",\n    \"repo\": \"docs\"\n  },\n  \"Open62541\": {\n    \"title\": \"Open62541\",\n    \"repoName\": \"open62541/open62541-www\",\n    \"githubUrl\": \"https://github.com/open62541/open62541-www\",\n    \"description\": \"Repository to host open62541 webpage and documentation\",\n    \"owner\": \"open62541\",\n    \"repo\": \"open62541-www\"\n  },\n  \"OpenAI PHP\": {\n    \"title\": \"OpenAI PHP\",\n    \"repoName\": \"openai-php/client\",\n    \"githubUrl\": \"https://github.com/openai-php/client\",\n    \"description\": \"⚡️ OpenAI PHP is a supercharged community-maintained PHP API client that allows you to interact with OpenAI API.\",\n    \"owner\": \"openai-php\",\n    \"repo\": \"client\"\n  },\n  \"Codex\": {\n    \"title\": \"Codex\",\n    \"repoName\": \"openai/codex\",\n    \"githubUrl\": \"https://github.com/openai/codex\",\n    \"description\": \"Lightweight coding agent that runs in your terminal\",\n    \"owner\": \"openai\",\n    \"repo\": \"codex\"\n  },\n  \"Gym\": {\n    \"title\": \"Gym\",\n    \"repoName\": \"openai/gym\",\n    \"githubUrl\": \"https://github.com/openai/gym\",\n    \"description\": \"A toolkit for developing and comparing reinforcement learning algorithms.\",\n    \"owner\": \"openai\",\n    \"repo\": \"gym\"\n  },\n  \"OpenAI Agents Python\": {\n    \"title\": \"OpenAI Agents Python\",\n    \"repoName\": \"openai/openai-agents-python\",\n    \"githubUrl\": \"https://github.com/openai/openai-agents-python\",\n    \"description\": \"A lightweight, powerful framework for multi-agent workflows\",\n    \"owner\": \"openai\",\n    \"repo\": \"openai-agents-python\"\n  },\n  \"OpenAI API\": {\n    \"title\": \"OpenAI API\",\n    \"repoName\": \"openai/openai-cookbook\",\n    \"githubUrl\": \"https://github.com/openai/openai-cookbook\",\n    \"description\": \"Examples and guides for using the OpenAI API\",\n    \"owner\": \"openai\",\n    \"repo\": \"openai-cookbook\"\n  },\n  \"OpenAI Java\": {\n    \"title\": \"OpenAI Java\",\n    \"repoName\": \"openai/openai-java\",\n    \"githubUrl\": \"https://github.com/openai/openai-java\",\n    \"description\": \"The official Java library for the OpenAI API\",\n    \"owner\": \"openai\",\n    \"repo\": \"openai-java\"\n  },\n  \"OpenAI Node\": {\n    \"title\": \"OpenAI Node\",\n    \"repoName\": \"openai/openai-node\",\n    \"githubUrl\": \"https://github.com/openai/openai-node\",\n    \"description\": \"Official JavaScript / TypeScript library for the OpenAI API\",\n    \"owner\": \"openai\",\n    \"repo\": \"openai-node\"\n  },\n  \"OpenAI Python\": {\n    \"title\": \"OpenAI Python\",\n    \"repoName\": \"openai/openai-python\",\n    \"githubUrl\": \"https://github.com/openai/openai-python\",\n    \"description\": \"The official Python library for the OpenAI API\",\n    \"owner\": \"openai\",\n    \"repo\": \"openai-python\"\n  },\n  \"OpenAI Realtime Agents\": {\n    \"title\": \"OpenAI Realtime Agents\",\n    \"repoName\": \"openai/openai-realtime-agents\",\n    \"githubUrl\": \"https://github.com/openai/openai-realtime-agents\",\n    \"description\": \"This is a simple demonstration of more advanced, agentic patterns built on top of the Realtime API.\",\n    \"owner\": \"openai\",\n    \"repo\": \"openai-realtime-agents\"\n  },\n  \"Whisper\": {\n    \"title\": \"Whisper\",\n    \"repoName\": \"openai/whisper\",\n    \"githubUrl\": \"https://github.com/openai/whisper\",\n    \"description\": \"Robust Speech Recognition via Large-Scale Weak Supervision\",\n    \"owner\": \"openai\",\n    \"repo\": \"whisper\"\n  },\n  \"OpenAPI TypeScript\": {\n    \"title\": \"OpenAPI TypeScript\",\n    \"repoName\": \"openapi-ts/openapi-typescript\",\n    \"githubUrl\": \"https://github.com/openapi-ts/openapi-typescript\",\n    \"description\": \"Generate TypeScript types from OpenAPI 3 specs\",\n    \"owner\": \"openapi-ts\",\n    \"repo\": \"openapi-typescript\"\n  },\n  \"OpenCart\": {\n    \"title\": \"OpenCart\",\n    \"repoName\": \"opencart/opencart\",\n    \"githubUrl\": \"https://github.com/opencart/opencart\",\n    \"description\": \"A free shopping cart system. OpenCart is an open source PHP-based online e-commerce solution.\",\n    \"owner\": \"opencart\",\n    \"repo\": \"opencart\"\n  },\n  \"OpenCV\": {\n    \"title\": \"OpenCV\",\n    \"repoName\": \"opencv/opencv\",\n    \"githubUrl\": \"https://github.com/opencv/opencv\",\n    \"description\": \"Open Source Computer Vision Library\",\n    \"owner\": \"opencv\",\n    \"repo\": \"opencv\"\n  },\n  \"Mineru\": {\n    \"title\": \"Mineru\",\n    \"repoName\": \"opendatalab/mineru\",\n    \"githubUrl\": \"https://github.com/opendatalab/mineru\",\n    \"description\": \"A high-quality tool for convert PDF to Markdown and JSON.一站式开源高质量数据提取工具，将PDF转换成Markdown和JSON格式。\",\n    \"owner\": \"opendatalab\",\n    \"repo\": \"mineru\"\n  },\n  \"GeoParquet\": {\n    \"title\": \"GeoParquet\",\n    \"repoName\": \"opengeospatial/geoparquet\",\n    \"githubUrl\": \"https://github.com/opengeospatial/geoparquet\",\n    \"description\": \"Specification for storing geospatial vector data (point, line, polygon) in Parquet\",\n    \"owner\": \"opengeospatial\",\n    \"repo\": \"geoparquet\"\n  },\n  \"openHAB\": {\n    \"title\": \"openHAB\",\n    \"repoName\": \"openhab/openhab-docs\",\n    \"githubUrl\": \"https://github.com/openhab/openhab-docs\",\n    \"description\": \"This repository contains the documentation for openHAB.\",\n    \"owner\": \"openhab\",\n    \"repo\": \"openhab-docs\"\n  },\n  \"JDK\": {\n    \"title\": \"JDK\",\n    \"repoName\": \"openjdk/jdk\",\n    \"githubUrl\": \"https://github.com/openjdk/jdk\",\n    \"description\": \"JDK main-line development https://openjdk.org/projects/jdk\",\n    \"owner\": \"openjdk\",\n    \"repo\": \"jdk\"\n  },\n  \"Open Liberty\": {\n    \"title\": \"Open Liberty\",\n    \"repoName\": \"openliberty/docs\",\n    \"githubUrl\": \"https://github.com/openliberty/docs\",\n    \"description\": \"See Open Liberty documentation on https://openliberty.io/docs/\",\n    \"owner\": \"openliberty\",\n    \"repo\": \"docs\"\n  },\n  \"OpenMeter\": {\n    \"title\": \"OpenMeter\",\n    \"repoName\": \"openmeterio/openmeter\",\n    \"githubUrl\": \"https://github.com/openmeterio/openmeter\",\n    \"description\": \"Metering and Billing for AI, API and DevOps. Collect and aggregate millions of usage events in real-time and enable usage-based billing.\",\n    \"owner\": \"openmeterio\",\n    \"repo\": \"openmeter\"\n  },\n  \"Open Next.js Cloudflare\": {\n    \"title\": \"Open Next.js Cloudflare\",\n    \"repoName\": \"opennextjs/opennextjs-cloudflare\",\n    \"githubUrl\": \"https://github.com/opennextjs/opennextjs-cloudflare\",\n    \"description\": \"Open Next.js adapter for Cloudflare\",\n    \"owner\": \"opennextjs\",\n    \"repo\": \"opennextjs-cloudflare\"\n  },\n  \"OpenRemote\": {\n    \"title\": \"OpenRemote\",\n    \"repoName\": \"openremote/openremote\",\n    \"githubUrl\": \"https://github.com/openremote/openremote\",\n    \"description\": \"100% open-source IoT Platform - Integrate your devices, create rules, and analyse and visualise your data\",\n    \"owner\": \"openremote\",\n    \"repo\": \"openremote\"\n  },\n  \"OpenResty\": {\n    \"title\": \"OpenResty\",\n    \"repoName\": \"openresty/openresty\",\n    \"githubUrl\": \"https://github.com/openresty/openresty\",\n    \"description\": \"High Performance Web Platform Based on Nginx and LuaJIT\",\n    \"owner\": \"openresty\",\n    \"repo\": \"openresty\"\n  },\n  \"Vercel AI SDK OpenRouter Provider\": {\n    \"title\": \"Vercel AI SDK OpenRouter Provider\",\n    \"repoName\": \"openrouterteam/ai-sdk-provider\",\n    \"githubUrl\": \"https://github.com/openrouterteam/ai-sdk-provider\",\n    \"description\": \"The OpenRouter provider for the Vercel AI SDK contains support for hundreds of models through the OpenRouter chat and completion APIs.\",\n    \"owner\": \"openrouterteam\",\n    \"repo\": \"ai-sdk-provider\"\n  },\n  \"OpenRouter\": {\n    \"title\": \"OpenRouter\",\n    \"repoName\": \"openrouterteam/openrouter-examples\",\n    \"githubUrl\": \"https://github.com/openrouterteam/openrouter-examples\",\n    \"description\": \"Examples of integrating the OpenRouter API\",\n    \"owner\": \"openrouterteam\",\n    \"repo\": \"openrouter-examples\"\n  },\n  \"OpenRouter Examples Python\": {\n    \"title\": \"OpenRouter Examples Python\",\n    \"repoName\": \"openrouterteam/openrouter-examples-python\",\n    \"githubUrl\": \"https://github.com/openrouterteam/openrouter-examples-python\",\n    \"description\": \"Examples of calling OpenRouter models from Python code\",\n    \"owner\": \"openrouterteam\",\n    \"repo\": \"openrouter-examples-python\"\n  },\n  \"OpenRouter Runner\": {\n    \"title\": \"OpenRouter Runner\",\n    \"repoName\": \"openrouterteam/openrouter-runner\",\n    \"githubUrl\": \"https://github.com/openrouterteam/openrouter-runner\",\n    \"description\": \"Inference engine powering open source models on OpenRouter\",\n    \"owner\": \"openrouterteam\",\n    \"repo\": \"openrouter-runner\"\n  },\n  \"OpenRouter Tool Calling\": {\n    \"title\": \"OpenRouter Tool Calling\",\n    \"repoName\": \"openrouterteam/tool-calling\",\n    \"githubUrl\": \"https://github.com/openrouterteam/tool-calling\",\n    \"description\": \"Tool calling demo for OpenRouter\",\n    \"owner\": \"openrouterteam\",\n    \"repo\": \"tool-calling\"\n  },\n  \"OpenSCAD\": {\n    \"title\": \"OpenSCAD\",\n    \"repoName\": \"openscad/openscad\",\n    \"githubUrl\": \"https://github.com/openscad/openscad\",\n    \"description\": \"OpenSCAD - The Programmers Solid 3D CAD Modeller  \",\n    \"owner\": \"openscad\",\n    \"repo\": \"openscad\"\n  },\n  \"OpenSearch Documentation Website\": {\n    \"title\": \"OpenSearch Documentation Website\",\n    \"repoName\": \"opensearch-project/documentation-website\",\n    \"githubUrl\": \"https://github.com/opensearch-project/documentation-website\",\n    \"description\": \"The documentation for OpenSearch, OpenSearch Dashboards, and their associated plugins.\",\n    \"owner\": \"opensearch-project\",\n    \"repo\": \"documentation-website\"\n  },\n  \"SFCC\": {\n    \"title\": \"SFCC\",\n    \"repoName\": \"opensfcc/sfcc-docs\",\n    \"githubUrl\": \"https://github.com/opensfcc/sfcc-docs\",\n    \"description\": \"SFCC Docs Engine for sfccdocs.com\",\n    \"owner\": \"opensfcc\",\n    \"repo\": \"sfcc-docs\"\n  },\n  \"OpenSilver\": {\n    \"title\": \"OpenSilver\",\n    \"repoName\": \"opensilver/opensilver\",\n    \"githubUrl\": \"https://github.com/opensilver/opensilver\",\n    \"description\": \"This repository contains the source of both OpenSilver and CSHTML5. More information is available at: www.opensilver.net and www.cshtml5.com - Read README.md for the instructions on how to build the source code and how to test it.\",\n    \"owner\": \"opensilver\",\n    \"repo\": \"opensilver\"\n  },\n  \"KAG\": {\n    \"title\": \"KAG\",\n    \"repoName\": \"openspg/kag\",\n    \"githubUrl\": \"https://github.com/openspg/kag\",\n    \"description\": \"KAG is a logical form-guided reasoning and retrieval framework based on OpenSPG engine and LLMs.  It is used to build logical reasoning and factual Q&A solutions for professional domain knowledge bases. It can effectively overcome the shortcomings of the traditional RAG vector similarity calculation model.\",\n    \"owner\": \"openspg\",\n    \"repo\": \"kag\"\n  },\n  \"OpenSPG\": {\n    \"title\": \"OpenSPG\",\n    \"repoName\": \"openspg/openspg\",\n    \"githubUrl\": \"https://github.com/openspg/openspg\",\n    \"description\": \"OpenSPG is a Knowledge Graph Engine developed by Ant Group in collaboration with OpenKG, based on the SPG (Semantic-enhanced Programmable Graph) framework.   Core Capabilities: 1) domain model constrained knowledge modeling, 2) facts and logic fused  representation, 3) natively support KAG...\",\n    \"owner\": \"openspg\",\n    \"repo\": \"openspg\"\n  },\n  \"OpenStack Helm\": {\n    \"title\": \"OpenStack Helm\",\n    \"repoName\": \"openstack/openstack-helm\",\n    \"githubUrl\": \"https://github.com/openstack/openstack-helm\",\n    \"description\": \"Helm charts for deploying OpenStack on Kubernetes. Mirror of code maintained at opendev.org.\",\n    \"owner\": \"openstack\",\n    \"repo\": \"openstack-helm\"\n  },\n  \"OpenStatus\": {\n    \"title\": \"OpenStatus\",\n    \"repoName\": \"openstatushq/openstatus\",\n    \"githubUrl\": \"https://github.com/openstatushq/openstatus\",\n    \"description\": \"🏓  The open-source synthetic monitoring platform  🏓\",\n    \"owner\": \"openstatushq\",\n    \"repo\": \"openstatus\"\n  },\n  \"Open Targets Platform API\": {\n    \"title\": \"Open Targets Platform API\",\n    \"repoName\": \"opentargets/platform-api\",\n    \"githubUrl\": \"https://github.com/opentargets/platform-api\",\n    \"description\": \"GraphQL and Rest API rewrite of the current Open Targets platform API\",\n    \"owner\": \"opentargets\",\n    \"repo\": \"platform-api\"\n  },\n  \"Bittensor\": {\n    \"title\": \"Bittensor\",\n    \"repoName\": \"opentensor/developer-docs\",\n    \"githubUrl\": \"https://github.com/opentensor/developer-docs\",\n    \"description\": \"Developer documentation for Bittensor.\",\n    \"owner\": \"opentensor\",\n    \"repo\": \"developer-docs\"\n  },\n  \"Bittensor CLI\": {\n    \"title\": \"Bittensor CLI\",\n    \"repoName\": \"opentensor/btcli\",\n    \"githubUrl\": \"https://github.com/opentensor/btcli\",\n    \"description\": \"Bittensor command line tool\",\n    \"owner\": \"opentensor\",\n    \"repo\": \"btcli\"\n  },\n  \"Bittensor Subtensor\": {\n    \"title\": \"Bittensor Subtensor\",\n    \"repoName\": \"opentensor/subtensor\",\n    \"githubUrl\": \"https://github.com/opentensor/subtensor\",\n    \"description\": \"Bittensor Blockchain Layer\",\n    \"owner\": \"opentensor\",\n    \"repo\": \"subtensor\"\n  },\n  \"OpenTofu\": {\n    \"title\": \"OpenTofu\",\n    \"repoName\": \"opentofu/opentofu\",\n    \"githubUrl\": \"https://github.com/opentofu/opentofu\",\n    \"description\": \"OpenTofu lets you declaratively manage your cloud infrastructure.\",\n    \"owner\": \"opentofu\",\n    \"repo\": \"opentofu\"\n  },\n  \"Openwebinars Spring Formaciones\": {\n    \"title\": \"Openwebinars Spring Formaciones\",\n    \"repoName\": \"openwebinarsnet/spring\",\n    \"githubUrl\": \"https://github.com/openwebinarsnet/spring\",\n    \"description\": \"Formaciones en ecosistema Spring: Spring Framework, Spring Boot, Spring MVC, Spring Security, Spring Cloud, Spring Testing, Spring AOP, Spring + Thymeleaf, Spring WebFlux, Spring con Angular + React + Vue, Spring con Docker.\",\n    \"owner\": \"openwebinarsnet\",\n    \"repo\": \"spring\"\n  },\n  \"OpenZeppelin Defender\": {\n    \"title\": \"OpenZeppelin Defender\",\n    \"repoName\": \"openzeppelin/defender-docs\",\n    \"githubUrl\": \"https://github.com/openzeppelin/defender-docs\",\n    \"description\": \" Security Management to Protect the Open Economy\",\n    \"owner\": \"openzeppelin\",\n    \"repo\": \"defender-docs\"\n  },\n  \"OpenZeppelin\": {\n    \"title\": \"OpenZeppelin\",\n    \"repoName\": \"openzeppelin/docs.openzeppelin.com\",\n    \"githubUrl\": \"https://github.com/openzeppelin/docs.openzeppelin.com\",\n    \"description\": \"Source for the OpenZeppelin documentation site\",\n    \"owner\": \"openzeppelin\",\n    \"repo\": \"docs.openzeppelin.com\"\n  },\n  \"OpenZeppelin Contracts\": {\n    \"title\": \"OpenZeppelin Contracts\",\n    \"repoName\": \"openzeppelin/openzeppelin-contracts\",\n    \"githubUrl\": \"https://github.com/openzeppelin/openzeppelin-contracts\",\n    \"description\": \"OpenZeppelin Contracts is a library for secure smart contract development.\",\n    \"owner\": \"openzeppelin\",\n    \"repo\": \"openzeppelin-contracts\"\n  },\n  \"OpenZeppelin SDK\": {\n    \"title\": \"OpenZeppelin SDK\",\n    \"repoName\": \"openzeppelin/openzeppelin-sdk\",\n    \"githubUrl\": \"https://github.com/openzeppelin/openzeppelin-sdk\",\n    \"description\": \"OpenZeppelin SDK repository for CLI and upgrades.js. No longer actively developed.\",\n    \"owner\": \"openzeppelin\",\n    \"repo\": \"openzeppelin-sdk\"\n  },\n  \"OpenZeppelin Upgrades\": {\n    \"title\": \"OpenZeppelin Upgrades\",\n    \"repoName\": \"openzeppelin/openzeppelin-upgrades\",\n    \"githubUrl\": \"https://github.com/openzeppelin/openzeppelin-upgrades\",\n    \"description\": \"Plugins for Hardhat and Foundry to deploy and manage upgradeable contracts on Ethereum.\",\n    \"owner\": \"openzeppelin\",\n    \"repo\": \"openzeppelin-upgrades\"\n  },\n  \"OpenZeppelin Starter Kit\": {\n    \"title\": \"OpenZeppelin Starter Kit\",\n    \"repoName\": \"openzeppelin/starter-kit\",\n    \"githubUrl\": \"https://github.com/openzeppelin/starter-kit\",\n    \"description\": \"An OpenZeppelin starter kit containing React, OpenZeppelin SDK & OpenZeppelin Contracts.\",\n    \"owner\": \"openzeppelin\",\n    \"repo\": \"starter-kit\"\n  },\n  \"Lix Inlang\": {\n    \"title\": \"Lix Inlang\",\n    \"repoName\": \"opral/monorepo\",\n    \"githubUrl\": \"https://github.com/opral/monorepo\",\n    \"description\": \"lix (change control system) && inlang (globalization ecosystem for software built on lix)\",\n    \"owner\": \"opral\",\n    \"repo\": \"monorepo\"\n  },\n  \"Bull\": {\n    \"title\": \"Bull\",\n    \"repoName\": \"optimalbits/bull\",\n    \"githubUrl\": \"https://github.com/optimalbits/bull\",\n    \"description\": \"Premium Queue package for handling distributed jobs and messages in NodeJS.\",\n    \"owner\": \"optimalbits\",\n    \"repo\": \"bull\"\n  },\n  \"Optuna\": {\n    \"title\": \"Optuna\",\n    \"repoName\": \"optuna/optuna\",\n    \"githubUrl\": \"https://github.com/optuna/optuna\",\n    \"description\": \"A hyperparameter optimization framework\",\n    \"owner\": \"optuna\",\n    \"repo\": \"optuna\"\n  },\n  \"Terraform Oracle Cloud Infrastructure Provider\": {\n    \"title\": \"Terraform Oracle Cloud Infrastructure Provider\",\n    \"repoName\": \"oracle/terraform-provider-oci\",\n    \"githubUrl\": \"https://github.com/oracle/terraform-provider-oci\",\n    \"description\": \"Terraform Oracle Cloud Infrastructure provider\",\n    \"owner\": \"oracle\",\n    \"repo\": \"terraform-provider-oci\"\n  },\n  \"Serena\": {\n    \"title\": \"Serena\",\n    \"repoName\": \"oraios/serena\",\n    \"githubUrl\": \"https://github.com/oraios/serena\",\n    \"description\": \"a powerful coding agent toolkit providing semantic retrieval and editing capabilities (MCP server & Agno integration)\",\n    \"owner\": \"oraios\",\n    \"repo\": \"serena\"\n  },\n  \"Orama\": {\n    \"title\": \"Orama\",\n    \"repoName\": \"oramasearch/orama\",\n    \"githubUrl\": \"https://github.com/oramasearch/orama\",\n    \"description\": \"🌌  A complete search engine and RAG pipeline in your browser, server or edge network with support for full-text, vector, and hybrid search in less than 2kb.\",\n    \"owner\": \"oramasearch\",\n    \"repo\": \"orama\"\n  },\n  \"OrbitDB\": {\n    \"title\": \"OrbitDB\",\n    \"repoName\": \"orbitdb/orbitdb\",\n    \"githubUrl\": \"https://github.com/orbitdb/orbitdb\",\n    \"description\": \"Peer-to-Peer Databases for the Decentralized Web\",\n    \"owner\": \"orbitdb\",\n    \"repo\": \"orbitdb\"\n  },\n  \"OrbStack\": {\n    \"title\": \"OrbStack\",\n    \"repoName\": \"orbstack/orbstack\",\n    \"githubUrl\": \"https://github.com/orbstack/orbstack\",\n    \"description\": \"Fast, light, simple Docker containers & Linux machines\",\n    \"owner\": \"orbstack\",\n    \"repo\": \"orbstack\"\n  },\n  \"Origin UI\": {\n    \"title\": \"Origin UI\",\n    \"repoName\": \"origin-space/originui\",\n    \"githubUrl\": \"https://github.com/origin-space/originui\",\n    \"description\": \"Origin UI is an extensive collection of copy-and-paste components for quickly building application UIs. Powered by Tailwind CSS and React.\",\n    \"owner\": \"origin-space\",\n    \"repo\": \"originui\"\n  },\n  \"Ory\": {\n    \"title\": \"Ory\",\n    \"repoName\": \"ory/docs\",\n    \"githubUrl\": \"https://github.com/ory/docs\",\n    \"description\": \"The Ory documentation\",\n    \"owner\": \"ory\",\n    \"repo\": \"docs\"\n  },\n  \"ScraperFC\": {\n    \"title\": \"ScraperFC\",\n    \"repoName\": \"oseymour/scraperfc.git\",\n    \"githubUrl\": \"https://github.com/oseymour/scraperfc.git\",\n    \"description\": \"Python package for scraping soccer data from a variety of sources\",\n    \"owner\": \"oseymour\",\n    \"repo\": \"scraperfc.git\"\n  },\n  \"Oslo ASN1\": {\n    \"title\": \"Oslo ASN1\",\n    \"repoName\": \"oslo-project/asn1\",\n    \"githubUrl\": \"https://github.com/oslo-project/asn1\",\n    \"description\": \"Encode and decode ASN.1 with Distinguished Encoding Rules (DER)\",\n    \"owner\": \"oslo-project\",\n    \"repo\": \"asn1\"\n  },\n  \"Oslo Binary\": {\n    \"title\": \"Oslo Binary\",\n    \"repoName\": \"oslo-project/binary\",\n    \"githubUrl\": \"https://github.com/oslo-project/binary\",\n    \"description\": \"Basic primitives for working with binary data\",\n    \"owner\": \"oslo-project\",\n    \"repo\": \"binary\"\n  },\n  \"Oslo CBOR\": {\n    \"title\": \"Oslo CBOR\",\n    \"repoName\": \"oslo-project/cbor\",\n    \"githubUrl\": \"https://github.com/oslo-project/cbor\",\n    \"description\": \"CBOR library for JavaScript\",\n    \"owner\": \"oslo-project\",\n    \"repo\": \"cbor\"\n  },\n  \"Oslo Crypto\": {\n    \"title\": \"Oslo Crypto\",\n    \"repoName\": \"oslo-project/crypto\",\n    \"githubUrl\": \"https://github.com/oslo-project/crypto\",\n    \"description\": \"A very basic, runtime-agnostic crypto library\",\n    \"owner\": \"oslo-project\",\n    \"repo\": \"crypto\"\n  },\n  \"Oslo Encoding\": {\n    \"title\": \"Oslo Encoding\",\n    \"repoName\": \"oslo-project/encoding\",\n    \"githubUrl\": \"https://github.com/oslo-project/encoding\",\n    \"description\": \"Encode binary data with hex, base32, and base64\",\n    \"owner\": \"oslo-project\",\n    \"repo\": \"encoding\"\n  },\n  \"Oslo JWT\": {\n    \"title\": \"Oslo JWT\",\n    \"repoName\": \"oslo-project/jwt\",\n    \"githubUrl\": \"https://github.com/oslo-project/jwt\",\n    \"description\": \"Parse and encode JSON web tokens\",\n    \"owner\": \"oslo-project\",\n    \"repo\": \"jwt\"\n  },\n  \"Oslo OAuth2\": {\n    \"title\": \"Oslo OAuth2\",\n    \"repoName\": \"oslo-project/oauth2\",\n    \"githubUrl\": \"https://github.com/oslo-project/oauth2\",\n    \"description\": \"A small library for parsing OAuth responses\",\n    \"owner\": \"oslo-project\",\n    \"repo\": \"oauth2\"\n  },\n  \"Oslo OTP\": {\n    \"title\": \"Oslo OTP\",\n    \"repoName\": \"oslo-project/otp\",\n    \"githubUrl\": \"https://github.com/oslo-project/otp\",\n    \"description\": \"One-time passwords with HOTP and TOTP\",\n    \"owner\": \"oslo-project\",\n    \"repo\": \"otp\"\n  },\n  \"Oslo Webauthn\": {\n    \"title\": \"Oslo Webauthn\",\n    \"repoName\": \"oslo-project/webauthn\",\n    \"githubUrl\": \"https://github.com/oslo-project/webauthn\",\n    \"description\": \"Parse and verify Web Authentication data\",\n    \"owner\": \"oslo-project\",\n    \"repo\": \"webauthn\"\n  },\n  \"Osmdroid\": {\n    \"title\": \"Osmdroid\",\n    \"repoName\": \"osmdroid/osmdroid\",\n    \"githubUrl\": \"https://github.com/osmdroid/osmdroid\",\n    \"description\": \"OpenStreetMap-Tools for Android\",\n    \"owner\": \"osmdroid\",\n    \"repo\": \"osmdroid\"\n  },\n  \"OSSEC\": {\n    \"title\": \"OSSEC\",\n    \"repoName\": \"ossec/ossec-hids\",\n    \"githubUrl\": \"https://github.com/ossec/ossec-hids\",\n    \"description\": \"OSSEC is an Open Source Host-based Intrusion Detection System that performs log analysis, file integrity checking, policy monitoring, rootkit detection, real-time alerting and active response.\",\n    \"owner\": \"ossec\",\n    \"repo\": \"ossec-hids\"\n  },\n  \"OudyPlat\": {\n    \"title\": \"OudyPlat\",\n    \"repoName\": \"oudmane/oudyplat\",\n    \"githubUrl\": \"https://github.com/oudmane/oudyplat\",\n    \"description\": \"OudyPlat is a framework for PHP developed to build robust Web Applications\",\n    \"owner\": \"oudmane\",\n    \"repo\": \"oudyplat\"\n  },\n  \"Bun\": {\n    \"title\": \"Bun\",\n    \"repoName\": \"oven-sh/bun\",\n    \"githubUrl\": \"https://github.com/oven-sh/bun\",\n    \"description\": \"Incredibly fast JavaScript runtime, bundler, test runner, and package manager – all in one\",\n    \"owner\": \"oven-sh\",\n    \"repo\": \"bun\"\n  },\n  \"Overextended\": {\n    \"title\": \"Overextended\",\n    \"repoName\": \"overextended/overextended.github.io\",\n    \"githubUrl\": \"https://github.com/overextended/overextended.github.io\",\n    \"description\": \"Official documentation for Overextended resources. Not for support.\",\n    \"owner\": \"overextended\",\n    \"repo\": \"overextended.github.io\"\n  },\n  \"Overture Maps Data\": {\n    \"title\": \"Overture Maps Data\",\n    \"repoName\": \"overturemaps/data\",\n    \"githubUrl\": \"https://github.com/overturemaps/data\",\n    \"description\": \"Overture Maps Data\",\n    \"owner\": \"overturemaps\",\n    \"repo\": \"data\"\n  },\n  \"Overture Maps\": {\n    \"title\": \"Overture Maps\",\n    \"repoName\": \"overturemaps/docs\",\n    \"githubUrl\": \"https://github.com/overturemaps/docs\",\n    \"description\": \"Documentation Website for Overture Maps Foundation\",\n    \"owner\": \"overturemaps\",\n    \"repo\": \"docs\"\n  },\n  \"Terraform OVH Provider\": {\n    \"title\": \"Terraform OVH Provider\",\n    \"repoName\": \"ovh/terraform-provider-ovh\",\n    \"githubUrl\": \"https://github.com/ovh/terraform-provider-ovh\",\n    \"description\": \"Terraform OVH provider\",\n    \"owner\": \"ovh\",\n    \"repo\": \"terraform-provider-ovh\"\n  },\n  \"DummyJSON\": {\n    \"title\": \"DummyJSON\",\n    \"repoName\": \"ovi/dummyjson\",\n    \"githubUrl\": \"https://github.com/ovi/dummyjson\",\n    \"description\": \"DummyJSON.com provides different types of REST Endpoints filled with JSON data which you can use in developing the frontend with your favorite framework and library without worrying about writing a backend.\",\n    \"owner\": \"ovi\",\n    \"repo\": \"dummyjson\"\n  },\n  \"ModSecurity\": {\n    \"title\": \"ModSecurity\",\n    \"repoName\": \"owasp-modsecurity/modsecurity\",\n    \"githubUrl\": \"https://github.com/owasp-modsecurity/modsecurity\",\n    \"description\": \"ModSecurity is an open source, cross platform web application firewall (WAF) engine for Apache, IIS and Nginx. It has a robust event-based programming language which provides protection from a range of attacks against web applications and allows for HTTP traffic monitoring, logging and real-time analysis.\",\n    \"owner\": \"owasp-modsecurity\",\n    \"repo\": \"modsecurity\"\n  },\n  \"Web Security Testing Guide\": {\n    \"title\": \"Web Security Testing Guide\",\n    \"repoName\": \"owasp/wstg\",\n    \"githubUrl\": \"https://github.com/owasp/wstg\",\n    \"description\": \"The Web Security Testing Guide is a comprehensive Open Source guide to testing the security of web applications and web services.\",\n    \"owner\": \"owasp\",\n    \"repo\": \"wstg\"\n  },\n  \"Obsidian Vertical Tabs\": {\n    \"title\": \"Obsidian Vertical Tabs\",\n    \"repoName\": \"oxdc/obsidian-vertical-tabs\",\n    \"githubUrl\": \"https://github.com/oxdc/obsidian-vertical-tabs\",\n    \"description\": \"An Obsidian plugin that displays open tabs vertically, allowing users to group and organize tabs for a better navigation experience.\",\n    \"owner\": \"oxdc\",\n    \"repo\": \"obsidian-vertical-tabs\"\n  },\n  \".NET MAUI Cookbook\": {\n    \"title\": \".NET MAUI Cookbook\",\n    \"repoName\": \"packtpublishing/.net-maui-cookbook.git\",\n    \"githubUrl\": \"https://github.com/packtpublishing/.net-maui-cookbook.git\",\n    \"description\": \".NET MAUI Cookbook, published by Packt\",\n    \"owner\": \"packtpublishing\",\n    \"repo\": \".net-maui-cookbook.git\"\n  },\n  \"Cmdk\": {\n    \"title\": \"Cmdk\",\n    \"repoName\": \"pacocoursey/cmdk\",\n    \"githubUrl\": \"https://github.com/pacocoursey/cmdk\",\n    \"description\": \"Fast, unstyled command menu React component.\",\n    \"owner\": \"pacocoursey\",\n    \"repo\": \"cmdk\"\n  },\n  \"Next Themes\": {\n    \"title\": \"Next Themes\",\n    \"repoName\": \"pacocoursey/next-themes\",\n    \"githubUrl\": \"https://github.com/pacocoursey/next-themes\",\n    \"description\": \"Perfect Next.js dark mode in 2 lines of code. Support System preference and any other theme with no flashing\",\n    \"owner\": \"pacocoursey\",\n    \"repo\": \"next-themes\"\n  },\n  \"Paddle Go SDK\": {\n    \"title\": \"Paddle Go SDK\",\n    \"repoName\": \"paddlehq/paddle-go-sdk\",\n    \"githubUrl\": \"https://github.com/paddlehq/paddle-go-sdk\",\n    \"description\": \"Go SDK for working with the Paddle API in server-side apps.\",\n    \"owner\": \"paddlehq\",\n    \"repo\": \"paddle-go-sdk\"\n  },\n  \"Paddle Node SDK\": {\n    \"title\": \"Paddle Node SDK\",\n    \"repoName\": \"paddlehq/paddle-node-sdk\",\n    \"githubUrl\": \"https://github.com/paddlehq/paddle-node-sdk\",\n    \"description\": \"Node.js SDK for working with the Paddle API in server-side apps.\",\n    \"owner\": \"paddlehq\",\n    \"repo\": \"paddle-node-sdk\"\n  },\n  \"Blueprint\": {\n    \"title\": \"Blueprint\",\n    \"repoName\": \"palantir/blueprint\",\n    \"githubUrl\": \"https://github.com/palantir/blueprint\",\n    \"description\": \"A React-based UI toolkit for the web\",\n    \"owner\": \"palantir\",\n    \"repo\": \"blueprint\"\n  },\n  \"Flask SQLAlchemy\": {\n    \"title\": \"Flask SQLAlchemy\",\n    \"repoName\": \"pallets-eco/flask-sqlalchemy\",\n    \"githubUrl\": \"https://github.com/pallets-eco/flask-sqlalchemy\",\n    \"description\": \"Adds SQLAlchemy support to Flask\",\n    \"owner\": \"pallets-eco\",\n    \"repo\": \"flask-sqlalchemy\"\n  },\n  \"Click\": {\n    \"title\": \"Click\",\n    \"repoName\": \"pallets/click\",\n    \"githubUrl\": \"https://github.com/pallets/click\",\n    \"description\": \"Python composable command line interface toolkit\",\n    \"owner\": \"pallets\",\n    \"repo\": \"click\"\n  },\n  \"Flask\": {\n    \"title\": \"Flask\",\n    \"repoName\": \"pallets/flask\",\n    \"githubUrl\": \"https://github.com/pallets/flask\",\n    \"description\": \"The Python micro framework for building web applications.\",\n    \"owner\": \"pallets\",\n    \"repo\": \"flask\"\n  },\n  \"Jinja\": {\n    \"title\": \"Jinja\",\n    \"repoName\": \"pallets/jinja\",\n    \"githubUrl\": \"https://github.com/pallets/jinja\",\n    \"description\": \"A very fast and expressive template engine.\",\n    \"owner\": \"pallets\",\n    \"repo\": \"jinja\"\n  },\n  \"Pancake Developer\": {\n    \"title\": \"Pancake Developer\",\n    \"repoName\": \"pancakeswap/pancake-developer\",\n    \"githubUrl\": \"https://github.com/pancakeswap/pancake-developer\",\n    \"description\": \"\",\n    \"owner\": \"pancakeswap\",\n    \"repo\": \"pancake-developer\"\n  },\n  \"PandaDoc API Node Client\": {\n    \"title\": \"PandaDoc API Node Client\",\n    \"repoName\": \"pandadoc/pandadoc-api-node-client\",\n    \"githubUrl\": \"https://github.com/pandadoc/pandadoc-api-node-client\",\n    \"description\": \"The Official PandaDoc Node client SDK\",\n    \"owner\": \"pandadoc\",\n    \"repo\": \"pandadoc-api-node-client\"\n  },\n  \"Pandas\": {\n    \"title\": \"Pandas\",\n    \"repoName\": \"pandas-dev/pandas\",\n    \"githubUrl\": \"https://github.com/pandas-dev/pandas\",\n    \"description\": \"Flexible and powerful data analysis / manipulation library for Python, providing labeled data structures similar to R data.frame objects, statistical functions, and much more\",\n    \"owner\": \"pandas-dev\",\n    \"repo\": \"pandas\"\n  },\n  \"Node OIDC Provider\": {\n    \"title\": \"Node OIDC Provider\",\n    \"repoName\": \"panva/node-oidc-provider\",\n    \"githubUrl\": \"https://github.com/panva/node-oidc-provider\",\n    \"description\": \"OpenID Certified™ OAuth 2.0 Authorization Server implementation for Node.js\",\n    \"owner\": \"panva\",\n    \"repo\": \"node-oidc-provider\"\n  },\n  \"PaperMC Documentation\": {\n    \"title\": \"PaperMC Documentation\",\n    \"repoName\": \"papermc/docs\",\n    \"githubUrl\": \"https://github.com/papermc/docs\",\n    \"description\": \"Documentation for all projects under the PaperMC umbrella.\",\n    \"owner\": \"papermc\",\n    \"repo\": \"docs\"\n  },\n  \"Folia\": {\n    \"title\": \"Folia\",\n    \"repoName\": \"papermc/folia\",\n    \"githubUrl\": \"https://github.com/papermc/folia\",\n    \"description\": \"Fork of Paper which adds regionised multithreading to the dedicated server.\",\n    \"owner\": \"papermc\",\n    \"repo\": \"folia\"\n  },\n  \"Velocity\": {\n    \"title\": \"Velocity\",\n    \"repoName\": \"papermc/velocity\",\n    \"githubUrl\": \"https://github.com/papermc/velocity\",\n    \"description\": \"The modern, next-generation Minecraft server proxy.\",\n    \"owner\": \"papermc\",\n    \"repo\": \"velocity\"\n  },\n  \"Artemis\": {\n    \"title\": \"Artemis\",\n    \"repoName\": \"paradigmxyz/artemis\",\n    \"githubUrl\": \"https://github.com/paradigmxyz/artemis\",\n    \"description\": \"A simple, modular, and fast framework for writing MEV bots in Rust.\",\n    \"owner\": \"paradigmxyz\",\n    \"repo\": \"artemis\"\n  },\n  \"Cryo\": {\n    \"title\": \"Cryo\",\n    \"repoName\": \"paradigmxyz/cryo\",\n    \"githubUrl\": \"https://github.com/paradigmxyz/cryo\",\n    \"description\": \"cryo is the easiest way to extract blockchain data to parquet, csv, json, or python dataframes\",\n    \"owner\": \"paradigmxyz\",\n    \"repo\": \"cryo\"\n  },\n  \"Paradigm Data Portal\": {\n    \"title\": \"Paradigm Data Portal\",\n    \"repoName\": \"paradigmxyz/paradigm-data-portal\",\n    \"githubUrl\": \"https://github.com/paradigmxyz/paradigm-data-portal\",\n    \"description\": \"a collection of open source crypto datasets for researchers and tool builders\",\n    \"owner\": \"paradigmxyz\",\n    \"repo\": \"paradigm-data-portal\"\n  },\n  \"Ress\": {\n    \"title\": \"Ress\",\n    \"repoName\": \"paradigmxyz/ress\",\n    \"githubUrl\": \"https://github.com/paradigmxyz/ress\",\n    \"description\": \"The implementation of Stateless Ethereum client based on Reth\",\n    \"owner\": \"paradigmxyz\",\n    \"repo\": \"ress\"\n  },\n  \"Reth\": {\n    \"title\": \"Reth\",\n    \"repoName\": \"paradigmxyz/reth\",\n    \"githubUrl\": \"https://github.com/paradigmxyz/reth\",\n    \"description\": \"Modular, contributor-friendly and blazing-fast implementation of the Ethereum protocol, in Rust\",\n    \"owner\": \"paradigmxyz\",\n    \"repo\": \"reth\"\n  },\n  \"Solar\": {\n    \"title\": \"Solar\",\n    \"repoName\": \"paradigmxyz/solar\",\n    \"githubUrl\": \"https://github.com/paradigmxyz/solar\",\n    \"description\": \"Blazingly fast, modular and contributor friendly Solidity compiler, written in Rust\",\n    \"owner\": \"paradigmxyz\",\n    \"repo\": \"solar\"\n  },\n  \"ParaSpell\": {\n    \"title\": \"ParaSpell\",\n    \"repoName\": \"paraspell/xcm-tools\",\n    \"githubUrl\": \"https://github.com/paraspell/xcm-tools\",\n    \"description\": \"ParaSpell✨: Set of XCM-Tools for Polkadot and Kusama ecosystem\",\n    \"owner\": \"paraspell\",\n    \"repo\": \"xcm-tools\"\n  },\n  \"Parcel\": {\n    \"title\": \"Parcel\",\n    \"repoName\": \"parcel-bundler/website\",\n    \"githubUrl\": \"https://github.com/parcel-bundler/website\",\n    \"description\": \"🌎 Parcel website\",\n    \"owner\": \"parcel-bundler\",\n    \"repo\": \"website\"\n  },\n  \"Harmony\": {\n    \"title\": \"Harmony\",\n    \"repoName\": \"pardeike/harmony\",\n    \"githubUrl\": \"https://github.com/pardeike/harmony\",\n    \"description\": \"A library for patching, replacing and decorating .NET and Mono methods during runtime\",\n    \"owner\": \"pardeike\",\n    \"repo\": \"harmony\"\n  },\n  \"Parity Polkadot Blockchain SDK\": {\n    \"title\": \"Parity Polkadot Blockchain SDK\",\n    \"repoName\": \"paritytech/polkadot-sdk\",\n    \"githubUrl\": \"https://github.com/paritytech/polkadot-sdk\",\n    \"description\": \"The Parity Polkadot Blockchain SDK\",\n    \"owner\": \"paritytech\",\n    \"repo\": \"polkadot-sdk\"\n  },\n  \"Parse Platform\": {\n    \"title\": \"Parse Platform\",\n    \"repoName\": \"parse-community/docs\",\n    \"githubUrl\": \"https://github.com/parse-community/docs\",\n    \"description\": \"Parse Platform docs\",\n    \"owner\": \"parse-community\",\n    \"repo\": \"docs\"\n  },\n  \"Parse Server\": {\n    \"title\": \"Parse Server\",\n    \"repoName\": \"parse-community/parse-server\",\n    \"githubUrl\": \"https://github.com/parse-community/parse-server\",\n    \"description\": \"Parse Server for Node.js / Express\",\n    \"owner\": \"parse-community\",\n    \"repo\": \"parse-server\"\n  },\n  \"Pgxmock\": {\n    \"title\": \"Pgxmock\",\n    \"repoName\": \"pashagolub/pgxmock\",\n    \"githubUrl\": \"https://github.com/pashagolub/pgxmock\",\n    \"description\": \"pgx mock driver for golang to test database interactions \",\n    \"owner\": \"pashagolub\",\n    \"repo\": \"pgxmock\"\n  },\n  \"Diffrax\": {\n    \"title\": \"Diffrax\",\n    \"repoName\": \"patrick-kidger/diffrax\",\n    \"githubUrl\": \"https://github.com/patrick-kidger/diffrax\",\n    \"description\": \"Numerical differential equation solvers in JAX. Autodifferentiable and GPU-capable. https://docs.kidger.site/diffrax/\",\n    \"owner\": \"patrick-kidger\",\n    \"repo\": \"diffrax\"\n  },\n  \"Jaxtyping\": {\n    \"title\": \"Jaxtyping\",\n    \"repoName\": \"patrick-kidger/jaxtyping\",\n    \"githubUrl\": \"https://github.com/patrick-kidger/jaxtyping\",\n    \"description\": \"Type annotations and runtime checking for shape and dtype of JAX/NumPy/PyTorch/etc. arrays. https://docs.kidger.site/jaxtyping/\",\n    \"owner\": \"patrick-kidger\",\n    \"repo\": \"jaxtyping\"\n  },\n  \"Optimistix\": {\n    \"title\": \"Optimistix\",\n    \"repoName\": \"patrick-kidger/optimistix\",\n    \"githubUrl\": \"https://github.com/patrick-kidger/optimistix\",\n    \"description\": \"Nonlinear optimisation (root-finding, least squares, ...) in JAX+Equinox. https://docs.kidger.site/optimistix/\",\n    \"owner\": \"patrick-kidger\",\n    \"repo\": \"optimistix\"\n  },\n  \"Morphdom\": {\n    \"title\": \"Morphdom\",\n    \"repoName\": \"patrick-steele-idem/morphdom\",\n    \"githubUrl\": \"https://github.com/patrick-steele-idem/morphdom\",\n    \"description\": \"Fast and lightweight DOM diffing/patching (no virtual DOM needed)\",\n    \"owner\": \"patrick-steele-idem\",\n    \"repo\": \"morphdom\"\n  },\n  \"PickleDB\": {\n    \"title\": \"PickleDB\",\n    \"repoName\": \"patx/pickledb\",\n    \"githubUrl\": \"https://github.com/patx/pickledb\",\n    \"description\": \"pickleDB is an in memory key-value store using Python's orjson module for persistence.\",\n    \"owner\": \"patx\",\n    \"repo\": \"pickledb\"\n  },\n  \"React Leaflet\": {\n    \"title\": \"React Leaflet\",\n    \"repoName\": \"paullecam/react-leaflet\",\n    \"githubUrl\": \"https://github.com/paullecam/react-leaflet\",\n    \"description\": \"React components for Leaflet maps\",\n    \"owner\": \"paullecam\",\n    \"repo\": \"react-leaflet\"\n  },\n  \"LibDataChannel\": {\n    \"title\": \"LibDataChannel\",\n    \"repoName\": \"paullouisageneau/libdatachannel\",\n    \"githubUrl\": \"https://github.com/paullouisageneau/libdatachannel\",\n    \"description\": \"C/C++ WebRTC network library featuring Data Channels, Media Transport, and WebSockets\",\n    \"owner\": \"paullouisageneau\",\n    \"repo\": \"libdatachannel\"\n  },\n  \"Toastification\": {\n    \"title\": \"Toastification\",\n    \"repoName\": \"payam-zahedi/toastification\",\n    \"githubUrl\": \"https://github.com/payam-zahedi/toastification\",\n    \"description\": \"Toastification is a Flutter package for displaying customizable toast messages. It provides predefined widgets for success, error, warning, and info messages, as well as a custom widget for flexibility. With Toastification, you can add and manage multiple toast messages at the same time with ease.\",\n    \"owner\": \"payam-zahedi\",\n    \"repo\": \"toastification\"\n  },\n  \"Payload\": {\n    \"title\": \"Payload\",\n    \"repoName\": \"payloadcms/payload\",\n    \"githubUrl\": \"https://github.com/payloadcms/payload\",\n    \"description\": \"Payload is the open-source, fullstack Next.js framework, giving you instant backend superpowers. Get a full TypeScript backend and admin panel instantly. Use Payload as a headless CMS or for building powerful applications.\",\n    \"owner\": \"payloadcms\",\n    \"repo\": \"payload\"\n  },\n  \"Paystack Node\": {\n    \"title\": \"Paystack Node\",\n    \"repoName\": \"paystackoss/paystack-node\",\n    \"githubUrl\": \"https://github.com/paystackoss/paystack-node\",\n    \"description\": \"Paystack API Node Client Library\",\n    \"owner\": \"paystackoss\",\n    \"repo\": \"paystack-node\"\n  },\n  \"PayU SDK Node\": {\n    \"title\": \"PayU SDK Node\",\n    \"repoName\": \"payu-india/payu-sdk-node\",\n    \"githubUrl\": \"https://github.com/payu-india/payu-sdk-node\",\n    \"description\": \"This sdk helps you to interact with PayU's APIs.\",\n    \"owner\": \"payu-india\",\n    \"repo\": \"payu-sdk-node\"\n  },\n  \"PayU Web SDK\": {\n    \"title\": \"PayU Web SDK\",\n    \"repoName\": \"payu-india/web-sdk-python\",\n    \"githubUrl\": \"https://github.com/payu-india/web-sdk-python\",\n    \"description\": \"PayU Web SDK for Python tech stack integration\",\n    \"owner\": \"payu-india\",\n    \"repo\": \"web-sdk-python\"\n  },\n  \"WhatsApp Web.js\": {\n    \"title\": \"WhatsApp Web.js\",\n    \"repoName\": \"pedroslopez/whatsapp-web.js\",\n    \"githubUrl\": \"https://github.com/pedroslopez/whatsapp-web.js\",\n    \"description\": \"A WhatsApp client library for NodeJS that connects through the WhatsApp Web browser app\",\n    \"owner\": \"pedroslopez\",\n    \"repo\": \"whatsapp-web.js\"\n  },\n  \"Django Allauth\": {\n    \"title\": \"Django Allauth\",\n    \"repoName\": \"pennersr/django-allauth\",\n    \"githubUrl\": \"https://github.com/pennersr/django-allauth\",\n    \"description\": \"Integrated set of Django applications addressing authentication, registration, account management as well as 3rd party (social) account authentication.\",\n    \"owner\": \"pennersr\",\n    \"repo\": \"django-allauth\"\n  },\n  \"Percona Toolkit\": {\n    \"title\": \"Percona Toolkit\",\n    \"repoName\": \"percona/percona-toolkit\",\n    \"githubUrl\": \"https://github.com/percona/percona-toolkit\",\n    \"description\": \"Percona Toolkit: a collection of advanced open source command-line tools.\",\n    \"owner\": \"percona\",\n    \"repo\": \"percona-toolkit\"\n  },\n  \"Permify\": {\n    \"title\": \"Permify\",\n    \"repoName\": \"permify/permify\",\n    \"githubUrl\": \"https://github.com/permify/permify\",\n    \"description\": \"An open-source authorization as a service inspired by Google Zanzibar, designed to build and manage fine-grained and scalable authorization systems for any application.\",\n    \"owner\": \"permify\",\n    \"repo\": \"permify\"\n  },\n  \"Permit.io\": {\n    \"title\": \"Permit.io\",\n    \"repoName\": \"permitio/docs\",\n    \"githubUrl\": \"https://github.com/permitio/docs\",\n    \"description\": \"Our docs site: https://docs.permit.io\",\n    \"owner\": \"permitio\",\n    \"repo\": \"docs\"\n  },\n  \"Pest\": {\n    \"title\": \"Pest\",\n    \"repoName\": \"pestphp/pest\",\n    \"githubUrl\": \"https://github.com/pestphp/pest\",\n    \"description\": \"Pest is an elegant PHP testing Framework with a focus on simplicity, meticulously designed to bring back the joy of testing in PHP.\",\n    \"owner\": \"pestphp\",\n    \"repo\": \"pest\"\n  },\n  \"OpenAI CLI\": {\n    \"title\": \"OpenAI CLI\",\n    \"repoName\": \"peterdemin/openai-cli\",\n    \"githubUrl\": \"https://github.com/peterdemin/openai-cli\",\n    \"description\": \"Command-line client for OpenAI APIs\",\n    \"owner\": \"peterdemin\",\n    \"repo\": \"openai-cli\"\n  },\n  \"Pgvector\": {\n    \"title\": \"Pgvector\",\n    \"repoName\": \"pgvector/pgvector\",\n    \"githubUrl\": \"https://github.com/pgvector/pgvector\",\n    \"description\": \"Open-source vector similarity search for Postgres\",\n    \"owner\": \"pgvector\",\n    \"repo\": \"pgvector\"\n  },\n  \"Pgvector Elixir\": {\n    \"title\": \"Pgvector Elixir\",\n    \"repoName\": \"pgvector/pgvector-elixir\",\n    \"githubUrl\": \"https://github.com/pgvector/pgvector-elixir\",\n    \"description\": \"pgvector support for Elixir\",\n    \"owner\": \"pgvector\",\n    \"repo\": \"pgvector-elixir\"\n  },\n  \"Pgvector Python\": {\n    \"title\": \"Pgvector Python\",\n    \"repoName\": \"pgvector/pgvector-python\",\n    \"githubUrl\": \"https://github.com/pgvector/pgvector-python\",\n    \"description\": \"pgvector support for Python\",\n    \"owner\": \"pgvector\",\n    \"repo\": \"pgvector-python\"\n  },\n  \"Phaser 3\": {\n    \"title\": \"Phaser 3\",\n    \"repoName\": \"rexrainbow/phaser3-rex-notes\",\n    \"githubUrl\": \"https://github.com/rexrainbow/phaser3-rex-notes\",\n    \"description\": \"Notes of phaser3 engine\",\n    \"owner\": \"rexrainbow\",\n    \"repo\": \"phaser3-rex-notes\"\n  },\n  \"TS Ghost\": {\n    \"title\": \"TS Ghost\",\n    \"repoName\": \"phildl/ts-ghost\",\n    \"githubUrl\": \"https://github.com/phildl/ts-ghost\",\n    \"description\": \"A collection of TypeScript packages and tools to interact with a ghost blog. Type-safe 🦾 Ghost Content API client and CLI 🤖 tool to export posts in Markdown.\",\n    \"owner\": \"phildl\",\n    \"repo\": \"ts-ghost\"\n  },\n  \"PhlexyUI\": {\n    \"title\": \"PhlexyUI\",\n    \"repoName\": \"phlexyui/phlexy_ui\",\n    \"githubUrl\": \"https://github.com/phlexyui/phlexy_ui\",\n    \"description\": \"✨ PhlexyUI is a Ruby UI component library for DaisyUI using Phlex\",\n    \"owner\": \"phlexyui\",\n    \"repo\": \"phlexy_ui\"\n  },\n  \"Phoenix Framework Esbuild\": {\n    \"title\": \"Phoenix Framework Esbuild\",\n    \"repoName\": \"phoenixframework/esbuild\",\n    \"githubUrl\": \"https://github.com/phoenixframework/esbuild\",\n    \"description\": \"An installer for esbuild\",\n    \"owner\": \"phoenixframework\",\n    \"repo\": \"esbuild\"\n  },\n  \"Phoenix\": {\n    \"title\": \"Phoenix\",\n    \"repoName\": \"phoenixframework/phoenix\",\n    \"githubUrl\": \"https://github.com/phoenixframework/phoenix\",\n    \"description\": \"Peace of mind from prototype to production\",\n    \"owner\": \"phoenixframework\",\n    \"repo\": \"phoenix\"\n  },\n  \"Phoenix LiveView\": {\n    \"title\": \"Phoenix LiveView\",\n    \"repoName\": \"phoenixframework/phoenix_live_view\",\n    \"githubUrl\": \"https://github.com/phoenixframework/phoenix_live_view\",\n    \"description\": \"Rich, real-time user experiences with server-rendered HTML\",\n    \"owner\": \"phoenixframework\",\n    \"repo\": \"phoenix_live_view\"\n  },\n  \"Phoenix Framework Tailwind\": {\n    \"title\": \"Phoenix Framework Tailwind\",\n    \"repoName\": \"phoenixframework/tailwind\",\n    \"githubUrl\": \"https://github.com/phoenixframework/tailwind\",\n    \"description\": \"An installer for tailwind\",\n    \"owner\": \"phoenixframework\",\n    \"repo\": \"tailwind\"\n  },\n  \"Phon\": {\n    \"title\": \"Phon\",\n    \"repoName\": \"phon-ca/phon\",\n    \"githubUrl\": \"https://github.com/phon-ca/phon\",\n    \"description\": \"Phon is a software program that greatly facilitates a number of tasks related to the analysis of phonological data.\",\n    \"owner\": \"phon-ca\",\n    \"repo\": \"phon\"\n  },\n  \"EntityFrameworkCore.SqlServer.SimpleBulks\": {\n    \"title\": \"EntityFrameworkCore.SqlServer.SimpleBulks\",\n    \"repoName\": \"phongnguyend/entityframeworkcore.sqlserver.simplebulks\",\n    \"githubUrl\": \"https://github.com/phongnguyend/entityframeworkcore.sqlserver.simplebulks\",\n    \"description\": \"Fast and simple bulk insert (retain client populated Ids or return db generated Ids), bulk update, bulk delete, bulk merge and bulk match for SQL Server.\",\n    \"owner\": \"phongnguyend\",\n    \"repo\": \"entityframeworkcore.sqlserver.simplebulks\"\n  },\n  \"PHP\": {\n    \"title\": \"PHP\",\n    \"repoName\": \"php/doc-en\",\n    \"githubUrl\": \"https://github.com/php/doc-en\",\n    \"description\": \"English PHP documentation\",\n    \"owner\": \"php\",\n    \"repo\": \"doc-en\"\n  },\n  \"PHPStan\": {\n    \"title\": \"PHPStan\",\n    \"repoName\": \"phpstan/phpstan\",\n    \"githubUrl\": \"https://github.com/phpstan/phpstan\",\n    \"description\": \"PHP Static Analysis Tool - discover bugs in your code without running it!\",\n    \"owner\": \"phpstan\",\n    \"repo\": \"phpstan\"\n  },\n  \"Pico\": {\n    \"title\": \"Pico\",\n    \"repoName\": \"picocss/pico\",\n    \"githubUrl\": \"https://github.com/picocss/pico\",\n    \"description\": \"Minimal CSS Framework for semantic HTML\",\n    \"owner\": \"picocss\",\n    \"repo\": \"pico\"\n  },\n  \"MCP-Use\": {\n    \"title\": \"MCP-Use\",\n    \"repoName\": \"pietrozullo/mcp-use\",\n    \"githubUrl\": \"https://github.com/pietrozullo/mcp-use\",\n    \"description\": \"mcp-use is the easiest way to interact with mcp servers with custom agents\",\n    \"owner\": \"pietrozullo\",\n    \"repo\": \"mcp-use\"\n  },\n  \"PikePDF\": {\n    \"title\": \"PikePDF\",\n    \"repoName\": \"pikepdf/pikepdf\",\n    \"githubUrl\": \"https://github.com/pikepdf/pikepdf\",\n    \"description\": \"A Python library for reading and writing PDF, powered by QPDF\",\n    \"owner\": \"pikepdf\",\n    \"repo\": \"pikepdf\"\n  },\n  \"Pimcore\": {\n    \"title\": \"Pimcore\",\n    \"repoName\": \"pimcore/pimcore\",\n    \"githubUrl\": \"https://github.com/pimcore/pimcore\",\n    \"description\": \"Core Framework for the Open Source Data & Experience Management Platform (PIM, MDM, CDP, DAM, DXP/CMS & Digital Commerce)\",\n    \"owner\": \"pimcore\",\n    \"repo\": \"pimcore\"\n  },\n  \"Pinecone Assistant MCP\": {\n    \"title\": \"Pinecone Assistant MCP\",\n    \"repoName\": \"pinecone-io/assistant-mcp\",\n    \"githubUrl\": \"https://github.com/pinecone-io/assistant-mcp\",\n    \"description\": \"Pinecone Assistant MCP server\",\n    \"owner\": \"pinecone-io\",\n    \"repo\": \"assistant-mcp\"\n  },\n  \"TiDB\": {\n    \"title\": \"TiDB\",\n    \"repoName\": \"pingcap/tidb\",\n    \"githubUrl\": \"https://github.com/pingcap/tidb\",\n    \"description\": \"TiDB - the open-source, cloud-native, distributed SQL database designed for modern applications.\",\n    \"owner\": \"pingcap\",\n    \"repo\": \"tidb\"\n  },\n  \"UploadThing\": {\n    \"title\": \"UploadThing\",\n    \"repoName\": \"pingdotgg/uploadthing\",\n    \"githubUrl\": \"https://github.com/pingdotgg/uploadthing\",\n    \"description\": \"File uploads for modern web devs\",\n    \"owner\": \"pingdotgg\",\n    \"repo\": \"uploadthing\"\n  },\n  \"Pino\": {\n    \"title\": \"Pino\",\n    \"repoName\": \"pinojs/pino\",\n    \"githubUrl\": \"https://github.com/pinojs/pino\",\n    \"description\": \"🌲 super fast, all natural json logger\",\n    \"owner\": \"pinojs\",\n    \"repo\": \"pino\"\n  },\n  \"Pinokio\": {\n    \"title\": \"Pinokio\",\n    \"repoName\": \"pinokiocomputer/pinokio\",\n    \"githubUrl\": \"https://github.com/pinokiocomputer/pinokio\",\n    \"description\": \"AI Browser\",\n    \"owner\": \"pinokiocomputer\",\n    \"repo\": \"pinokio\"\n  },\n  \"Pion SDP\": {\n    \"title\": \"Pion SDP\",\n    \"repoName\": \"pion/sdp\",\n    \"githubUrl\": \"https://github.com/pion/sdp\",\n    \"description\": \"A Go implementation of the SDP\",\n    \"owner\": \"pion\",\n    \"repo\": \"sdp\"\n  },\n  \"Pastel\": {\n    \"title\": \"Pastel\",\n    \"repoName\": \"piotrmurach/pastel\",\n    \"githubUrl\": \"https://github.com/piotrmurach/pastel\",\n    \"description\": \"Terminal output styling with intuitive and clean API.\",\n    \"owner\": \"piotrmurach\",\n    \"repo\": \"pastel\"\n  },\n  \"PipeCD\": {\n    \"title\": \"PipeCD\",\n    \"repoName\": \"pipe-cd/pipecd\",\n    \"githubUrl\": \"https://github.com/pipe-cd/pipecd\",\n    \"description\": \"The One CD for All {applications, platforms, operations}\",\n    \"owner\": \"pipe-cd\",\n    \"repo\": \"pipecd\"\n  },\n  \"Gemini WebRTC Web Simple\": {\n    \"title\": \"Gemini WebRTC Web Simple\",\n    \"repoName\": \"pipecat-ai/gemini-webrtc-web-simple\",\n    \"githubUrl\": \"https://github.com/pipecat-ai/gemini-webrtc-web-simple\",\n    \"description\": \"Gemini Multimodal Live + WebRTC in a single `app.ts`\",\n    \"owner\": \"pipecat-ai\",\n    \"repo\": \"gemini-webrtc-web-simple\"\n  },\n  \"PipeCat\": {\n    \"title\": \"PipeCat\",\n    \"repoName\": \"pipecat-ai/pipecat\",\n    \"githubUrl\": \"https://github.com/pipecat-ai/pipecat\",\n    \"description\": \"Open Source framework for voice and multimodal conversational AI\",\n    \"owner\": \"pipecat-ai\",\n    \"repo\": \"pipecat\"\n  },\n  \"Gensim\": {\n    \"title\": \"Gensim\",\n    \"repoName\": \"piskvorky/gensim\",\n    \"githubUrl\": \"https://github.com/piskvorky/gensim\",\n    \"description\": \"Topic Modelling for Humans\",\n    \"owner\": \"piskvorky\",\n    \"repo\": \"gensim\"\n  },\n  \"Pixeltable\": {\n    \"title\": \"Pixeltable\",\n    \"repoName\": \"pixeltable/pixeltable\",\n    \"githubUrl\": \"https://github.com/pixeltable/pixeltable\",\n    \"description\": \"Pixeltable — AI Data infrastructure providing a declarative, incremental approach for multimodal workloads.\",\n    \"owner\": \"pixeltable\",\n    \"repo\": \"pixeltable\"\n  },\n  \"Pixi React\": {\n    \"title\": \"Pixi React\",\n    \"repoName\": \"pixijs/pixi-react\",\n    \"githubUrl\": \"https://github.com/pixijs/pixi-react\",\n    \"description\": \"Write PIXI apps using React declarative style\",\n    \"owner\": \"pixijs\",\n    \"repo\": \"pixi-react\"\n  },\n  \"PixiJS\": {\n    \"title\": \"PixiJS\",\n    \"repoName\": \"pixijs/pixijs.com\",\n    \"githubUrl\": \"https://github.com/pixijs/pixijs.com\",\n    \"description\": \"\",\n    \"owner\": \"pixijs\",\n    \"repo\": \"pixijs.com\"\n  },\n  \"PizzaJS\": {\n    \"title\": \"PizzaJS\",\n    \"repoName\": \"pizzajsdev/pizzajs\",\n    \"githubUrl\": \"https://github.com/pizzajsdev/pizzajs\",\n    \"description\": \"Composable building blocks for React Router 7+ full-stack apps\",\n    \"owner\": \"pizzajsdev\",\n    \"repo\": \"pizzajs\"\n  },\n  \"Yolodb\": {\n    \"title\": \"Yolodb\",\n    \"repoName\": \"pizzajsdev/yolodb\",\n    \"githubUrl\": \"https://github.com/pizzajsdev/yolodb\",\n    \"description\": \"🚀 Zero-config JSON file database with SuperJSON powers - perfect for mocking and prototyping\",\n    \"owner\": \"pizzajsdev\",\n    \"repo\": \"yolodb\"\n  },\n  \"Align Anything\": {\n    \"title\": \"Align Anything\",\n    \"repoName\": \"pku-alignment/align-anything\",\n    \"githubUrl\": \"https://github.com/pku-alignment/align-anything\",\n    \"description\": \"Align Anything: Training All-modality Model with Feedback\",\n    \"owner\": \"pku-alignment\",\n    \"repo\": \"align-anything\"\n  },\n  \"Plaid Link iOS SDK\": {\n    \"title\": \"Plaid Link iOS SDK\",\n    \"repoName\": \"plaid/plaid-link-ios\",\n    \"githubUrl\": \"https://github.com/plaid/plaid-link-ios\",\n    \"description\": \"Plaid Link iOS SDK\",\n    \"owner\": \"plaid\",\n    \"repo\": \"plaid-link-ios\"\n  },\n  \"Plaid Link iOS\": {\n    \"title\": \"Plaid Link iOS\",\n    \"repoName\": \"plaid/plaid-link-ios-spm\",\n    \"githubUrl\": \"https://github.com/plaid/plaid-link-ios-spm\",\n    \"description\": \"This repo provides Swift Package Manager support for plaid-link-ios\",\n    \"owner\": \"plaid\",\n    \"repo\": \"plaid-link-ios-spm\"\n  },\n  \"Plaid Quickstart\": {\n    \"title\": \"Plaid Quickstart\",\n    \"repoName\": \"plaid/quickstart\",\n    \"githubUrl\": \"https://github.com/plaid/quickstart\",\n    \"description\": \"Get up and running with Plaid Link and the API in minutes\",\n    \"owner\": \"plaid\",\n    \"repo\": \"quickstart\"\n  },\n  \"Plain Text Accounting\": {\n    \"title\": \"Plain Text Accounting\",\n    \"repoName\": \"plaintextaccounting/plaintextaccounting\",\n    \"githubUrl\": \"https://github.com/plaintextaccounting/plaintextaccounting\",\n    \"description\": \"The plaintextaccounting.org website, a portal to Ledger, hledger, beancount and co. Also the PTA wiki.\",\n    \"owner\": \"plaintextaccounting\",\n    \"repo\": \"plaintextaccounting\"\n  },\n  \"PlanetScale Database JS\": {\n    \"title\": \"PlanetScale Database JS\",\n    \"repoName\": \"planetscale/database-js\",\n    \"githubUrl\": \"https://github.com/planetscale/database-js\",\n    \"description\": \"A Fetch API-compatible PlanetScale database driver\",\n    \"owner\": \"planetscale\",\n    \"repo\": \"database-js\"\n  },\n  \"PlantUML\": {\n    \"title\": \"PlantUML\",\n    \"repoName\": \"plantuml/plantuml\",\n    \"githubUrl\": \"https://github.com/plantuml/plantuml\",\n    \"description\": \"Generate diagrams from textual description\",\n    \"owner\": \"plantuml\",\n    \"repo\": \"plantuml\"\n  },\n  \"Scalene\": {\n    \"title\": \"Scalene\",\n    \"repoName\": \"plasma-umass/scalene\",\n    \"githubUrl\": \"https://github.com/plasma-umass/scalene\",\n    \"description\": \"Scalene: a high-performance, high-precision CPU, GPU, and memory profiler for Python with AI-powered optimization proposals\",\n    \"owner\": \"plasma-umass\",\n    \"repo\": \"scalene\"\n  },\n  \"Plasmo\": {\n    \"title\": \"Plasmo\",\n    \"repoName\": \"plasmohq/plasmo\",\n    \"githubUrl\": \"https://github.com/plasmohq/plasmo\",\n    \"description\": \"🧩 The Browser Extension Framework\",\n    \"owner\": \"plasmohq\",\n    \"repo\": \"plasmo\"\n  },\n  \"PlatformIO\": {\n    \"title\": \"PlatformIO\",\n    \"repoName\": \"platformio/platformio-docs\",\n    \"githubUrl\": \"https://github.com/platformio/platformio-docs\",\n    \"description\": \"PlatformIO Documentation\",\n    \"owner\": \"platformio\",\n    \"repo\": \"platformio-docs\"\n  },\n  \"Plausible Analytics\": {\n    \"title\": \"Plausible Analytics\",\n    \"repoName\": \"plausible/analytics\",\n    \"githubUrl\": \"https://github.com/plausible/analytics\",\n    \"description\": \"Simple, open source, lightweight (< 1 KB) and privacy-friendly web analytics alternative to Google Analytics.\",\n    \"owner\": \"plausible\",\n    \"repo\": \"analytics\"\n  },\n  \"PlayFab JavaScriptSDK\": {\n    \"title\": \"PlayFab JavaScriptSDK\",\n    \"repoName\": \"playfab/javascriptsdk\",\n    \"githubUrl\": \"https://github.com/playfab/javascriptsdk\",\n    \"description\": \"JavaScriptSDK for the Client API of PlayFab\",\n    \"owner\": \"playfab\",\n    \"repo\": \"javascriptsdk\"\n  },\n  \"PlayFab Java SDK\": {\n    \"title\": \"PlayFab Java SDK\",\n    \"repoName\": \"playfab/javasdk\",\n    \"githubUrl\": \"https://github.com/playfab/javasdk\",\n    \"description\": \"PlayFab SDK for Java applications\",\n    \"owner\": \"playfab\",\n    \"repo\": \"javasdk\"\n  },\n  \"Playfab NodeSDK\": {\n    \"title\": \"Playfab NodeSDK\",\n    \"repoName\": \"playfab/nodesdk\",\n    \"githubUrl\": \"https://github.com/playfab/nodesdk\",\n    \"description\": \"Playfab SDK for node.js applications\",\n    \"owner\": \"playfab\",\n    \"repo\": \"nodesdk\"\n  },\n  \"Play Framework\": {\n    \"title\": \"Play Framework\",\n    \"repoName\": \"playframework/playframework.com\",\n    \"githubUrl\": \"https://github.com/playframework/playframework.com\",\n    \"description\": \"The Play Framework website\",\n    \"owner\": \"playframework\",\n    \"repo\": \"playframework.com\"\n  },\n  \"Plebbit JS\": {\n    \"title\": \"Plebbit JS\",\n    \"repoName\": \"plebbit/plebbit-js\",\n    \"githubUrl\": \"https://github.com/plebbit/plebbit-js\",\n    \"description\": \"A Javascript API to build applications using plebbit\",\n    \"owner\": \"plebbit\",\n    \"repo\": \"plebbit-js\"\n  },\n  \"Plebbit React Hooks\": {\n    \"title\": \"Plebbit React Hooks\",\n    \"repoName\": \"plebbit/plebbit-react-hooks\",\n    \"githubUrl\": \"https://github.com/plebbit/plebbit-react-hooks\",\n    \"description\": \"Hooks for building React applications using plebbit\",\n    \"owner\": \"plebbit\",\n    \"repo\": \"plebbit-react-hooks\"\n  },\n  \"Dash\": {\n    \"title\": \"Dash\",\n    \"repoName\": \"plotly/dash\",\n    \"githubUrl\": \"https://github.com/plotly/dash\",\n    \"description\": \"Data Apps & Dashboards for Python. No JavaScript Required.\",\n    \"owner\": \"plotly\",\n    \"repo\": \"dash\"\n  },\n  \"Plotly Graphing Libraries\": {\n    \"title\": \"Plotly Graphing Libraries\",\n    \"repoName\": \"plotly/graphing-library-docs\",\n    \"githubUrl\": \"https://github.com/plotly/graphing-library-docs\",\n    \"description\": \"Plotly's graphing libraries documentation. \",\n    \"owner\": \"plotly\",\n    \"repo\": \"graphing-library-docs\"\n  },\n  \"Plotly.js\": {\n    \"title\": \"Plotly.js\",\n    \"repoName\": \"plotly/plotly.js\",\n    \"githubUrl\": \"https://github.com/plotly/plotly.js\",\n    \"description\": \"Open-source JavaScript charting library behind Plotly and Dash\",\n    \"owner\": \"plotly\",\n    \"repo\": \"plotly.js\"\n  },\n  \"Plotly\": {\n    \"title\": \"Plotly\",\n    \"repoName\": \"plotly/plotly.py\",\n    \"githubUrl\": \"https://github.com/plotly/plotly.py\",\n    \"description\": \"The interactive graphing library for Python :sparkles:\",\n    \"owner\": \"plotly\",\n    \"repo\": \"plotly.py\"\n  },\n  \"Nivo\": {\n    \"title\": \"Nivo\",\n    \"repoName\": \"plouc/nivo\",\n    \"githubUrl\": \"https://github.com/plouc/nivo\",\n    \"description\": \"nivo provides a rich set of dataviz components, built on top of the awesome d3 and React libraries\",\n    \"owner\": \"plouc\",\n    \"repo\": \"nivo\"\n  },\n  \"Vox Uristi\": {\n    \"title\": \"Vox Uristi\",\n    \"repoName\": \"plule/vox-uristi\",\n    \"githubUrl\": \"https://github.com/plule/vox-uristi\",\n    \"description\": \"Vox Uristi exports Dwarf Fortress maps to MagicaVoxel\",\n    \"owner\": \"plule\",\n    \"repo\": \"vox-uristi\"\n  },\n  \"Detect GPU\": {\n    \"title\": \"Detect GPU\",\n    \"repoName\": \"pmndrs/detect-gpu\",\n    \"githubUrl\": \"https://github.com/pmndrs/detect-gpu\",\n    \"description\": \"Classifies GPUs based on their 3D rendering benchmark score allowing the developer to provide sensible default settings for graphically intensive applications.\",\n    \"owner\": \"pmndrs\",\n    \"repo\": \"detect-gpu\"\n  },\n  \"Drei\": {\n    \"title\": \"Drei\",\n    \"repoName\": \"pmndrs/drei\",\n    \"githubUrl\": \"https://github.com/pmndrs/drei\",\n    \"description\": \"🥉 useful helpers for react-three-fiber\",\n    \"owner\": \"pmndrs\",\n    \"repo\": \"drei\"\n  },\n  \"Ecctrl\": {\n    \"title\": \"Ecctrl\",\n    \"repoName\": \"pmndrs/ecctrl\",\n    \"githubUrl\": \"https://github.com/pmndrs/ecctrl\",\n    \"description\": \"🕹️ A floating rigibody character controller\",\n    \"owner\": \"pmndrs\",\n    \"repo\": \"ecctrl\"\n  },\n  \"Gltfjsx\": {\n    \"title\": \"Gltfjsx\",\n    \"repoName\": \"pmndrs/gltfjsx\",\n    \"githubUrl\": \"https://github.com/pmndrs/gltfjsx\",\n    \"description\": \"🎮 Turns GLTFs into JSX components\",\n    \"owner\": \"pmndrs\",\n    \"repo\": \"gltfjsx\"\n  },\n  \"Jotai\": {\n    \"title\": \"Jotai\",\n    \"repoName\": \"pmndrs/jotai\",\n    \"githubUrl\": \"https://github.com/pmndrs/jotai\",\n    \"description\": \"👻 Primitive and flexible state management for React\",\n    \"owner\": \"pmndrs\",\n    \"repo\": \"jotai\"\n  },\n  \"Koota\": {\n    \"title\": \"Koota\",\n    \"repoName\": \"pmndrs/koota\",\n    \"githubUrl\": \"https://github.com/pmndrs/koota\",\n    \"description\": \"🌎 Performant real-time state management for React and TypeScript\",\n    \"owner\": \"pmndrs\",\n    \"repo\": \"koota\"\n  },\n  \"Leva\": {\n    \"title\": \"Leva\",\n    \"repoName\": \"pmndrs/leva\",\n    \"githubUrl\": \"https://github.com/pmndrs/leva\",\n    \"description\": \"🌋 React-first components GUI\",\n    \"owner\": \"pmndrs\",\n    \"repo\": \"leva\"\n  },\n  \"Maath\": {\n    \"title\": \"Maath\",\n    \"repoName\": \"pmndrs/maath\",\n    \"githubUrl\": \"https://github.com/pmndrs/maath\",\n    \"description\": \"🪶 Math helpers for the rest of us\",\n    \"owner\": \"pmndrs\",\n    \"repo\": \"maath\"\n  },\n  \"React Postprocessing\": {\n    \"title\": \"React Postprocessing\",\n    \"repoName\": \"pmndrs/react-postprocessing\",\n    \"githubUrl\": \"https://github.com/pmndrs/react-postprocessing\",\n    \"description\": \"📬  postprocessing for react-three-fiber\",\n    \"owner\": \"pmndrs\",\n    \"repo\": \"react-postprocessing\"\n  },\n  \"React Spring\": {\n    \"title\": \"React Spring\",\n    \"repoName\": \"pmndrs/react-spring\",\n    \"githubUrl\": \"https://github.com/pmndrs/react-spring\",\n    \"description\": \"✌️ A spring physics based React animation library\",\n    \"owner\": \"pmndrs\",\n    \"repo\": \"react-spring\"\n  },\n  \"React Three A11y\": {\n    \"title\": \"React Three A11y\",\n    \"repoName\": \"pmndrs/react-three-a11y\",\n    \"githubUrl\": \"https://github.com/pmndrs/react-three-a11y\",\n    \"description\": \"♿️ Accessibility tools for React Three Fiber\",\n    \"owner\": \"pmndrs\",\n    \"repo\": \"react-three-a11y\"\n  },\n  \"React Three CSG\": {\n    \"title\": \"React Three CSG\",\n    \"repoName\": \"pmndrs/react-three-csg\",\n    \"githubUrl\": \"https://github.com/pmndrs/react-three-csg\",\n    \"description\": \"🚧 Constructive solid geometry for React\",\n    \"owner\": \"pmndrs\",\n    \"repo\": \"react-three-csg\"\n  },\n  \"React Three Fiber\": {\n    \"title\": \"React Three Fiber\",\n    \"repoName\": \"pmndrs/react-three-fiber\",\n    \"githubUrl\": \"https://github.com/pmndrs/react-three-fiber\",\n    \"description\": \"🇨🇭 A React renderer for Three.js\",\n    \"owner\": \"pmndrs\",\n    \"repo\": \"react-three-fiber\"\n  },\n  \"React Three Flex\": {\n    \"title\": \"React Three Flex\",\n    \"repoName\": \"pmndrs/react-three-flex\",\n    \"githubUrl\": \"https://github.com/pmndrs/react-three-flex\",\n    \"description\": \"💪📦  Flexbox for react-three-fiber\",\n    \"owner\": \"pmndrs\",\n    \"repo\": \"react-three-flex\"\n  },\n  \"React Three GPU Pathtracer\": {\n    \"title\": \"React Three GPU Pathtracer\",\n    \"repoName\": \"pmndrs/react-three-gpu-pathtracer\",\n    \"githubUrl\": \"https://github.com/pmndrs/react-three-gpu-pathtracer\",\n    \"description\": \"⚡️ A React abstraction for the popular three-gpu-pathtracer\",\n    \"owner\": \"pmndrs\",\n    \"repo\": \"react-three-gpu-pathtracer\"\n  },\n  \"React Three Rapier\": {\n    \"title\": \"React Three Rapier\",\n    \"repoName\": \"pmndrs/react-three-rapier\",\n    \"githubUrl\": \"https://github.com/pmndrs/react-three-rapier\",\n    \"description\": \"🤺 Rapier physics in React\",\n    \"owner\": \"pmndrs\",\n    \"repo\": \"react-three-rapier\"\n  },\n  \"React Use Measure\": {\n    \"title\": \"React Use Measure\",\n    \"repoName\": \"pmndrs/react-use-measure\",\n    \"githubUrl\": \"https://github.com/pmndrs/react-use-measure\",\n    \"description\": \"🙌 Utility to measure view bounds\",\n    \"owner\": \"pmndrs\",\n    \"repo\": \"react-use-measure\"\n  },\n  \"UIKit\": {\n    \"title\": \"UIKit\",\n    \"repoName\": \"pmndrs/uikit\",\n    \"githubUrl\": \"https://github.com/pmndrs/uikit\",\n    \"description\": \"🎨 user interfaces for react-three-fiber\",\n    \"owner\": \"pmndrs\",\n    \"repo\": \"uikit\"\n  },\n  \"Use P2\": {\n    \"title\": \"Use P2\",\n    \"repoName\": \"pmndrs/use-p2\",\n    \"githubUrl\": \"https://github.com/pmndrs/use-p2\",\n    \"description\": \"👋💣 2d physics hooks for @react-three/fiber\",\n    \"owner\": \"pmndrs\",\n    \"repo\": \"use-p2\"\n  },\n  \"React-XR\": {\n    \"title\": \"React-XR\",\n    \"repoName\": \"pmndrs/xr\",\n    \"githubUrl\": \"https://github.com/pmndrs/xr\",\n    \"description\": \"🤳 VR/AR for react-three-fiber\",\n    \"owner\": \"pmndrs\",\n    \"repo\": \"xr\"\n  },\n  \"Zustand\": {\n    \"title\": \"Zustand\",\n    \"repoName\": \"pmndrs/zustand\",\n    \"githubUrl\": \"https://github.com/pmndrs/zustand\",\n    \"description\": \"🐻 Bear necessities for state management in React\",\n    \"owner\": \"pmndrs\",\n    \"repo\": \"zustand\"\n  },\n  \"Mdsvex\": {\n    \"title\": \"Mdsvex\",\n    \"repoName\": \"pngwn/mdsvex\",\n    \"githubUrl\": \"https://github.com/pngwn/mdsvex\",\n    \"description\": \"A markdown preprocessor for Svelte.\",\n    \"owner\": \"pngwn\",\n    \"repo\": \"mdsvex\"\n  },\n  \"pnpm\": {\n    \"title\": \"pnpm\",\n    \"repoName\": \"pnpm/pnpm\",\n    \"githubUrl\": \"https://github.com/pnpm/pnpm\",\n    \"description\": \"Fast, disk space efficient package manager\",\n    \"owner\": \"pnpm\",\n    \"repo\": \"pnpm\"\n  },\n  \"PocketBase JavaScript SDK\": {\n    \"title\": \"PocketBase JavaScript SDK\",\n    \"repoName\": \"pocketbase/js-sdk\",\n    \"githubUrl\": \"https://github.com/pocketbase/js-sdk\",\n    \"description\": \"PocketBase JavaScript SDK\",\n    \"owner\": \"pocketbase\",\n    \"repo\": \"js-sdk\"\n  },\n  \"PocketBase Site\": {\n    \"title\": \"PocketBase Site\",\n    \"repoName\": \"pocketbase/site\",\n    \"githubUrl\": \"https://github.com/pocketbase/site\",\n    \"description\": \"PocketBase Site\",\n    \"owner\": \"pocketbase\",\n    \"repo\": \"site\"\n  },\n  \"PocketSmith\": {\n    \"title\": \"PocketSmith\",\n    \"repoName\": \"pocketsmith/api\",\n    \"githubUrl\": \"https://github.com/pocketsmith/api\",\n    \"description\": \"The OpenAPI 3 documentation for the PocketSmith API\",\n    \"owner\": \"pocketsmith\",\n    \"repo\": \"api\"\n  },\n  \"Podcastindex.org API\": {\n    \"title\": \"Podcastindex.org API\",\n    \"repoName\": \"podcastindex-org/docs-api\",\n    \"githubUrl\": \"https://github.com/podcastindex-org/docs-api\",\n    \"description\": \"Developer documentation for the podcastindex.org api.\",\n    \"owner\": \"podcastindex-org\",\n    \"repo\": \"docs-api\"\n  },\n  \"Podcast Namespace\": {\n    \"title\": \"Podcast Namespace\",\n    \"repoName\": \"podcastindex-org/podcast-namespace\",\n    \"githubUrl\": \"https://github.com/podcastindex-org/podcast-namespace\",\n    \"description\": \"A wholistic rss namespace for podcasting\",\n    \"owner\": \"podcastindex-org\",\n    \"repo\": \"podcast-namespace\"\n  },\n  \"Sharing GRDB\": {\n    \"title\": \"Sharing GRDB\",\n    \"repoName\": \"pointfreeco/sharing-grdb\",\n    \"githubUrl\": \"https://github.com/pointfreeco/sharing-grdb\",\n    \"description\": \"A lightweight replacement for SwiftData and the Query macro.\",\n    \"owner\": \"pointfreeco\",\n    \"repo\": \"sharing-grdb\"\n  },\n  \"Swift Composable Architecture\": {\n    \"title\": \"Swift Composable Architecture\",\n    \"repoName\": \"pointfreeco/swift-composable-architecture\",\n    \"githubUrl\": \"https://github.com/pointfreeco/swift-composable-architecture\",\n    \"description\": \"A library for building applications in a consistent and understandable way, with composition, testing, and ergonomics in mind.\",\n    \"owner\": \"pointfreeco\",\n    \"repo\": \"swift-composable-architecture\"\n  },\n  \"Swift Dependencies\": {\n    \"title\": \"Swift Dependencies\",\n    \"repoName\": \"pointfreeco/swift-dependencies\",\n    \"githubUrl\": \"https://github.com/pointfreeco/swift-dependencies\",\n    \"description\": \"A dependency management library inspired by SwiftUI's \\\"environment.\\\"\",\n    \"owner\": \"pointfreeco\",\n    \"repo\": \"swift-dependencies\"\n  },\n  \"Swift Navigation\": {\n    \"title\": \"Swift Navigation\",\n    \"repoName\": \"pointfreeco/swift-navigation\",\n    \"githubUrl\": \"https://github.com/pointfreeco/swift-navigation\",\n    \"description\": \"Bringing simple and powerful navigation tools to all Swift platforms, inspired by SwiftUI.\",\n    \"owner\": \"pointfreeco\",\n    \"repo\": \"swift-navigation\"\n  },\n  \"Swift Sharing\": {\n    \"title\": \"Swift Sharing\",\n    \"repoName\": \"pointfreeco/swift-sharing\",\n    \"githubUrl\": \"https://github.com/pointfreeco/swift-sharing\",\n    \"description\": \"A universal solution to persistence and data sharing in surprisingly little code.\",\n    \"owner\": \"pointfreeco\",\n    \"repo\": \"swift-sharing\"\n  },\n  \"Swift Snapshot Testing\": {\n    \"title\": \"Swift Snapshot Testing\",\n    \"repoName\": \"pointfreeco/swift-snapshot-testing\",\n    \"githubUrl\": \"https://github.com/pointfreeco/swift-snapshot-testing\",\n    \"description\": \"📸 Delightful Swift snapshot testing.\",\n    \"owner\": \"pointfreeco\",\n    \"repo\": \"swift-snapshot-testing\"\n  },\n  \"PokéAPI\": {\n    \"title\": \"PokéAPI\",\n    \"repoName\": \"pokeapi/pokeapi\",\n    \"githubUrl\": \"https://github.com/pokeapi/pokeapi\",\n    \"description\": \"The Pokémon API\",\n    \"owner\": \"pokeapi\",\n    \"repo\": \"pokeapi\"\n  },\n  \"Polars\": {\n    \"title\": \"Polars\",\n    \"repoName\": \"pola-rs/polars\",\n    \"githubUrl\": \"https://github.com/pola-rs/polars\",\n    \"description\": \"Dataframes powered by a multithreaded, vectorized query engine, written in Rust\",\n    \"owner\": \"pola-rs\",\n    \"repo\": \"polars\"\n  },\n  \"Polar\": {\n    \"title\": \"Polar\",\n    \"repoName\": \"polarsource/polar\",\n    \"githubUrl\": \"https://github.com/polarsource/polar\",\n    \"description\": \"An open source engine for your digital products. Sell SaaS and digital products in minutes.\",\n    \"owner\": \"polarsource\",\n    \"repo\": \"polar\"\n  },\n  \"Polar Next App\": {\n    \"title\": \"Polar Next App\",\n    \"repoName\": \"polarsource/polar-next-app\",\n    \"githubUrl\": \"https://github.com/polarsource/polar-next-app\",\n    \"description\": \"A Polar example running on Next.js\",\n    \"owner\": \"polarsource\",\n    \"repo\": \"polar-next-app\"\n  },\n  \"Polkadot API\": {\n    \"title\": \"Polkadot API\",\n    \"repoName\": \"polkadot-api/polkadot-api\",\n    \"githubUrl\": \"https://github.com/polkadot-api/polkadot-api\",\n    \"description\": \"Polkadot-API is a meticulously crafted suite of libraries, each designed to be composable, modular, and aligned with a \\\"light-client first\\\" philosophy.\",\n    \"owner\": \"polkadot-api\",\n    \"repo\": \"polkadot-api\"\n  },\n  \"Polkadot-JS Docs\": {\n    \"title\": \"Polkadot-JS Docs\",\n    \"repoName\": \"polkadot-js/docs\",\n    \"githubUrl\": \"https://github.com/polkadot-js/docs\",\n    \"description\": \"This is the documentation portal for all Polkadot and Substrate related tools and libraries in the polkadot-js family of repos.\",\n    \"owner\": \"polkadot-js\",\n    \"repo\": \"docs\"\n  },\n  \"Pollinations\": {\n    \"title\": \"Pollinations\",\n    \"repoName\": \"pollinations/pollinations\",\n    \"githubUrl\": \"https://github.com/pollinations/pollinations\",\n    \"description\": \"Free Open-Source Image and Text Generation\",\n    \"owner\": \"pollinations\",\n    \"repo\": \"pollinations\"\n  },\n  \"Polygon Client Python\": {\n    \"title\": \"Polygon Client Python\",\n    \"repoName\": \"polygon-io/client-python\",\n    \"githubUrl\": \"https://github.com/polygon-io/client-python\",\n    \"description\": \"The official Python client library for the Polygon REST and WebSocket API.\",\n    \"owner\": \"polygon-io\",\n    \"repo\": \"client-python\"\n  },\n  \"Portainer\": {\n    \"title\": \"Portainer\",\n    \"repoName\": \"portainer/portainer-docs\",\n    \"githubUrl\": \"https://github.com/portainer/portainer-docs\",\n    \"description\": \"Portainer documentation\",\n    \"owner\": \"portainer\",\n    \"repo\": \"portainer-docs\"\n  },\n  \"PostGIS\": {\n    \"title\": \"PostGIS\",\n    \"repoName\": \"postgis/postgis\",\n    \"githubUrl\": \"https://github.com/postgis/postgis\",\n    \"description\": \"PostGIS spatial database extension to PostgreSQL [mirror]\",\n    \"owner\": \"postgis\",\n    \"repo\": \"postgis\"\n  },\n  \"PostgreSQL\": {\n    \"title\": \"PostgreSQL\",\n    \"repoName\": \"postgres/postgres\",\n    \"githubUrl\": \"https://github.com/postgres/postgres\",\n    \"description\": \"Mirror of the official PostgreSQL GIT repository. Note that this is just a *mirror* - we don't work with pull requests on github. To contribute, please see https://wiki.postgresql.org/wiki/Submitting_a_Patch\",\n    \"owner\": \"postgres\",\n    \"repo\": \"postgres\"\n  },\n  \"PostgresML\": {\n    \"title\": \"PostgresML\",\n    \"repoName\": \"postgresml/postgresml\",\n    \"githubUrl\": \"https://github.com/postgresml/postgresml\",\n    \"description\": \"Postgres with GPUs for ML/AI apps.\",\n    \"owner\": \"postgresml\",\n    \"repo\": \"postgresml\"\n  },\n  \"PostHog JS\": {\n    \"title\": \"PostHog JS\",\n    \"repoName\": \"posthog/posthog-js\",\n    \"githubUrl\": \"https://github.com/posthog/posthog-js\",\n    \"description\": \"Send usage data from your web app or site to PostHog, with autocapture.\",\n    \"owner\": \"posthog\",\n    \"repo\": \"posthog-js\"\n  },\n  \"PostHog\": {\n    \"title\": \"PostHog\",\n    \"repoName\": \"posthog/posthog.git\",\n    \"githubUrl\": \"https://github.com/posthog/posthog.git\",\n    \"description\": \"🦔 PostHog provides open-source web & product analytics, session recording, feature flagging and A/B testing that you can self-host. Get started - free.\",\n    \"owner\": \"posthog\",\n    \"repo\": \"posthog.git\"\n  },\n  \"Newman\": {\n    \"title\": \"Newman\",\n    \"repoName\": \"postmanlabs/newman\",\n    \"githubUrl\": \"https://github.com/postmanlabs/newman\",\n    \"description\": \"Newman is a command-line collection runner for Postman\",\n    \"owner\": \"postmanlabs\",\n    \"repo\": \"newman\"\n  },\n  \"Postman Collection\": {\n    \"title\": \"Postman Collection\",\n    \"repoName\": \"postmanlabs/postman-collection\",\n    \"githubUrl\": \"https://github.com/postmanlabs/postman-collection\",\n    \"description\": \"Javascript module that allows a developer to work with Postman Collections\",\n    \"owner\": \"postmanlabs\",\n    \"repo\": \"postman-collection\"\n  },\n  \"Pinia Colada\": {\n    \"title\": \"Pinia Colada\",\n    \"repoName\": \"posva/pinia-colada\",\n    \"githubUrl\": \"https://github.com/posva/pinia-colada\",\n    \"description\": \"🍹 The smart data fetching layer for Pinia\",\n    \"owner\": \"posva\",\n    \"repo\": \"pinia-colada\"\n  },\n  \"Unplugin Vue Router\": {\n    \"title\": \"Unplugin Vue Router\",\n    \"repoName\": \"posva/unplugin-vue-router\",\n    \"githubUrl\": \"https://github.com/posva/unplugin-vue-router\",\n    \"description\": \"Next Generation file based typed routing for Vue Router\",\n    \"owner\": \"posva\",\n    \"repo\": \"unplugin-vue-router\"\n  },\n  \"PouchDB\": {\n    \"title\": \"PouchDB\",\n    \"repoName\": \"pouchdb/pouchdb\",\n    \"githubUrl\": \"https://github.com/pouchdb/pouchdb\",\n    \"description\": \":kangaroo: - PouchDB is a pocket-sized database.\",\n    \"owner\": \"pouchdb\",\n    \"repo\": \"pouchdb\"\n  },\n  \"PowerSync Dart\": {\n    \"title\": \"PowerSync Dart\",\n    \"repoName\": \"powersync-ja/powersync.dart\",\n    \"githubUrl\": \"https://github.com/powersync-ja/powersync.dart\",\n    \"description\": \"SDK that enables local-first and real-time reactive apps with embedded SQLite for Flutter/Dart clients\",\n    \"owner\": \"powersync-ja\",\n    \"repo\": \"powersync.dart\"\n  },\n  \"PRAW\": {\n    \"title\": \"PRAW\",\n    \"repoName\": \"praw-dev/praw\",\n    \"githubUrl\": \"https://github.com/praw-dev/praw\",\n    \"description\": \"PRAW, an acronym for \\\"Python Reddit API Wrapper\\\", is a python package that allows for simple access to Reddit's API.\",\n    \"owner\": \"praw-dev\",\n    \"repo\": \"praw\"\n  },\n  \"Preact\": {\n    \"title\": \"Preact\",\n    \"repoName\": \"preactjs/preact-www\",\n    \"githubUrl\": \"https://github.com/preactjs/preact-www\",\n    \"description\": \":book: Preact documentation website.\",\n    \"owner\": \"preactjs\",\n    \"repo\": \"preact-www\"\n  },\n  \"Prefect\": {\n    \"title\": \"Prefect\",\n    \"repoName\": \"prefecthq/prefect\",\n    \"githubUrl\": \"https://github.com/prefecthq/prefect\",\n    \"description\": \"Prefect is a workflow orchestration framework for building resilient data pipelines in Python.\",\n    \"owner\": \"prefecthq\",\n    \"repo\": \"prefect\"\n  },\n  \"Prelude.js Refute\": {\n    \"title\": \"Prelude.js Refute\",\n    \"repoName\": \"preludejs/refute\",\n    \"githubUrl\": \"https://github.com/preludejs/refute\",\n    \"description\": \"Refute module.\",\n    \"owner\": \"preludejs\",\n    \"repo\": \"refute\"\n  },\n  \"PrestaShop\": {\n    \"title\": \"PrestaShop\",\n    \"repoName\": \"prestashop/docs\",\n    \"githubUrl\": \"https://github.com/prestashop/docs\",\n    \"description\": \"PrestaShop technical documentation\",\n    \"owner\": \"prestashop\",\n    \"repo\": \"docs\"\n  },\n  \"Presto\": {\n    \"title\": \"Presto\",\n    \"repoName\": \"prestodb/prestodb.github.io\",\n    \"githubUrl\": \"https://github.com/prestodb/prestodb.github.io\",\n    \"description\": \"Presto website\",\n    \"owner\": \"prestodb\",\n    \"repo\": \"prestodb.github.io\"\n  },\n  \"ESLint Config Prettier\": {\n    \"title\": \"ESLint Config Prettier\",\n    \"repoName\": \"prettier/eslint-config-prettier\",\n    \"githubUrl\": \"https://github.com/prettier/eslint-config-prettier\",\n    \"description\": \"Turns off all rules that are unnecessary or might conflict with Prettier.\",\n    \"owner\": \"prettier\",\n    \"repo\": \"eslint-config-prettier\"\n  },\n  \"Prettier\": {\n    \"title\": \"Prettier\",\n    \"repoName\": \"prettier/prettier\",\n    \"githubUrl\": \"https://github.com/prettier/prettier\",\n    \"description\": \"Prettier is an opinionated code formatter.\",\n    \"owner\": \"prettier\",\n    \"repo\": \"prettier\"\n  },\n  \"PrimeFaces\": {\n    \"title\": \"PrimeFaces\",\n    \"repoName\": \"primefaces/primefaces\",\n    \"githubUrl\": \"https://github.com/primefaces/primefaces\",\n    \"description\": \"Ultimate Component Suite for JavaServer Faces\",\n    \"owner\": \"primefaces\",\n    \"repo\": \"primefaces\"\n  },\n  \"PrimeNG\": {\n    \"title\": \"PrimeNG\",\n    \"repoName\": \"primefaces/primeng\",\n    \"githubUrl\": \"https://github.com/primefaces/primeng\",\n    \"description\": \"The Most Complete Angular UI Component Library\",\n    \"owner\": \"primefaces\",\n    \"repo\": \"primeng\"\n  },\n  \"PrimeReact\": {\n    \"title\": \"PrimeReact\",\n    \"repoName\": \"primefaces/primereact\",\n    \"githubUrl\": \"https://github.com/primefaces/primereact\",\n    \"description\": \"The Most Complete React UI Component Library\",\n    \"owner\": \"primefaces\",\n    \"repo\": \"primereact\"\n  },\n  \"PrimeVue\": {\n    \"title\": \"PrimeVue\",\n    \"repoName\": \"primefaces/primevue\",\n    \"githubUrl\": \"https://github.com/primefaces/primevue\",\n    \"description\": \"Next Generation Vue UI Component Library\",\n    \"owner\": \"primefaces\",\n    \"repo\": \"primevue\"\n  },\n  \"Primer Brand\": {\n    \"title\": \"Primer Brand\",\n    \"repoName\": \"primer/brand\",\n    \"githubUrl\": \"https://github.com/primer/brand\",\n    \"description\": \"React components and Primitives for GitHub marketing websites\",\n    \"owner\": \"primer\",\n    \"repo\": \"brand\"\n  },\n  \"React Nestable\": {\n    \"title\": \"React Nestable\",\n    \"repoName\": \"primetwig/react-nestable\",\n    \"githubUrl\": \"https://github.com/primetwig/react-nestable\",\n    \"description\": \"Drag & drop hierarchical list made as a react component\",\n    \"owner\": \"primetwig\",\n    \"repo\": \"react-nestable\"\n  },\n  \"Prism\": {\n    \"title\": \"Prism\",\n    \"repoName\": \"prism-php/prism\",\n    \"githubUrl\": \"https://github.com/prism-php/prism\",\n    \"description\": \"A unified interface for working with LLMs in Laravel\",\n    \"owner\": \"prism-php\",\n    \"repo\": \"prism\"\n  },\n  \"Prisma\": {\n    \"title\": \"Prisma\",\n    \"repoName\": \"prisma/docs\",\n    \"githubUrl\": \"https://github.com/prisma/docs\",\n    \"description\": \"📚 Prisma Documentation\",\n    \"owner\": \"prisma\",\n    \"repo\": \"docs\"\n  },\n  \"Create Next App\": {\n    \"title\": \"Create Next App\",\n    \"repoName\": \"privy-io/create-next-app\",\n    \"githubUrl\": \"https://github.com/privy-io/create-next-app\",\n    \"description\": \"\",\n    \"owner\": \"privy-io\",\n    \"repo\": \"create-next-app\"\n  },\n  \"Skore\": {\n    \"title\": \"Skore\",\n    \"repoName\": \"probabl-ai/skore\",\n    \"githubUrl\": \"https://github.com/probabl-ai/skore\",\n    \"description\": \"the scikit-learn sidekick\",\n    \"owner\": \"probabl-ai\",\n    \"repo\": \"skore\"\n  },\n  \"p5.js\": {\n    \"title\": \"p5.js\",\n    \"repoName\": \"processing/p5.js\",\n    \"githubUrl\": \"https://github.com/processing/p5.js\",\n    \"description\": \"p5.js is a client-side JS platform that empowers artists, designers, students, and anyone to learn to code and express themselves creatively on the web. It is based on the core principles of Processing. http://twitter.com/p5xjs —\",\n    \"owner\": \"processing\",\n    \"repo\": \"p5.js\"\n  },\n  \"Processing\": {\n    \"title\": \"Processing\",\n    \"repoName\": \"processing/processing-docs\",\n    \"githubUrl\": \"https://github.com/processing/processing-docs\",\n    \"description\": \"[Deprecated] Processing reference, examples, tutorials, and website\",\n    \"owner\": \"processing\",\n    \"repo\": \"processing-docs\"\n  },\n  \"ProcessWire\": {\n    \"title\": \"ProcessWire\",\n    \"repoName\": \"processwire/processwire\",\n    \"githubUrl\": \"https://github.com/processwire/processwire\",\n    \"description\": \"ProcessWire 3.x is a friendly and powerful open source CMS with a strong API. \",\n    \"owner\": \"processwire\",\n    \"repo\": \"processwire\"\n  },\n  \"ProjectDiscovery Docs\": {\n    \"title\": \"ProjectDiscovery Docs\",\n    \"repoName\": \"projectdiscovery/docs\",\n    \"githubUrl\": \"https://github.com/projectdiscovery/docs\",\n    \"description\": \"Centralized docs of ProjectDiscovery\",\n    \"owner\": \"projectdiscovery\",\n    \"repo\": \"docs\"\n  },\n  \"Sveltos Addon Controller\": {\n    \"title\": \"Sveltos Addon Controller\",\n    \"repoName\": \"projectsveltos/addon-controller\",\n    \"githubUrl\": \"https://github.com/projectsveltos/addon-controller\",\n    \"description\": \"Sveltos Kubernetes add-on controller programmatically deploys add-ons and applications in tens of clusters. Support for ClusterAPI powered clusters, Helm charts, kustomize ,YAMLs. Sveltos has built-in support for multi-tenancy.\",\n    \"owner\": \"projectsveltos\",\n    \"repo\": \"addon-controller\"\n  },\n  \"Sveltos Dashboard\": {\n    \"title\": \"Sveltos Dashboard\",\n    \"repoName\": \"projectsveltos/dashboard\",\n    \"githubUrl\": \"https://github.com/projectsveltos/dashboard\",\n    \"description\": \"Sveltos UI frontend \",\n    \"owner\": \"projectsveltos\",\n    \"repo\": \"dashboard\"\n  },\n  \"Sveltos Helm Charts\": {\n    \"title\": \"Sveltos Helm Charts\",\n    \"repoName\": \"projectsveltos/helm-charts\",\n    \"githubUrl\": \"https://github.com/projectsveltos/helm-charts\",\n    \"description\": \"Sveltos is tool for managing Kubernetes add-ons in tens of clusters. Support for ClusterAPI powered clusters and helm charts. Sveltos has built-in support for multi-tenancy.\",\n    \"owner\": \"projectsveltos\",\n    \"repo\": \"helm-charts\"\n  },\n  \"Sveltos Shard Controller\": {\n    \"title\": \"Sveltos Shard Controller\",\n    \"repoName\": \"projectsveltos/shard-controller\",\n    \"githubUrl\": \"https://github.com/projectsveltos/shard-controller\",\n    \"description\": \"Controller to manage Sveltos cluster sharding\",\n    \"owner\": \"projectsveltos\",\n    \"repo\": \"shard-controller\"\n  },\n  \"Project Sveltos\": {\n    \"title\": \"Project Sveltos\",\n    \"repoName\": \"projectsveltos/sveltos\",\n    \"githubUrl\": \"https://github.com/projectsveltos/sveltos\",\n    \"description\": \"Contains documentation for projectsveltos\",\n    \"owner\": \"projectsveltos\",\n    \"repo\": \"sveltos\"\n  },\n  \"Sveltos UI Backend\": {\n    \"title\": \"Sveltos UI Backend\",\n    \"repoName\": \"projectsveltos/ui-backend\",\n    \"githubUrl\": \"https://github.com/projectsveltos/ui-backend\",\n    \"description\": \"This repo contains a service that provides all APIs Sveltos dashboard uses\",\n    \"owner\": \"projectsveltos\",\n    \"repo\": \"ui-backend\"\n  },\n  \"Sveltos\": {\n    \"title\": \"Sveltos\",\n    \"repoName\": \"projectsveltos/website\",\n    \"githubUrl\": \"https://github.com/projectsveltos/website\",\n    \"description\": \"Sveltos website\",\n    \"owner\": \"projectsveltos\",\n    \"repo\": \"website\"\n  },\n  \"Prometheus\": {\n    \"title\": \"Prometheus\",\n    \"repoName\": \"prometheus/prometheus\",\n    \"githubUrl\": \"https://github.com/prometheus/prometheus\",\n    \"description\": \"The Prometheus monitoring system and time series database.\",\n    \"owner\": \"prometheus\",\n    \"repo\": \"prometheus\"\n  },\n  \"Promptfoo\": {\n    \"title\": \"Promptfoo\",\n    \"repoName\": \"promptfoo/promptfoo\",\n    \"githubUrl\": \"https://github.com/promptfoo/promptfoo\",\n    \"description\": \"Test your prompts, agents, and RAGs. Red teaming, pentesting, and vulnerability scanning for LLMs. Compare performance of GPT, Claude, Gemini, Llama, and more. Simple declarative configs with command line and CI/CD integration.\",\n    \"owner\": \"promptfoo\",\n    \"repo\": \"promptfoo\"\n  },\n  \"Protobuf-net\": {\n    \"title\": \"Protobuf-net\",\n    \"repoName\": \"protobuf-net/protobuf-net\",\n    \"githubUrl\": \"https://github.com/protobuf-net/protobuf-net\",\n    \"description\": \"Protocol Buffers library for idiomatic .NET \",\n    \"owner\": \"protobuf-net\",\n    \"repo\": \"protobuf-net\"\n  },\n  \"Protocol Buffers\": {\n    \"title\": \"Protocol Buffers\",\n    \"repoName\": \"protocolbuffers/protocolbuffers.github.io\",\n    \"githubUrl\": \"https://github.com/protocolbuffers/protocolbuffers.github.io\",\n    \"description\": \"\",\n    \"owner\": \"protocolbuffers\",\n    \"repo\": \"protocolbuffers.github.io\"\n  },\n  \"Kafka UI\": {\n    \"title\": \"Kafka UI\",\n    \"repoName\": \"provectus/kafka-ui\",\n    \"githubUrl\": \"https://github.com/provectus/kafka-ui\",\n    \"description\": \"Open-Source Web UI for Apache Kafka Management\",\n    \"owner\": \"provectus\",\n    \"repo\": \"kafka-ui\"\n  },\n  \"ESPN API\": {\n    \"title\": \"ESPN API\",\n    \"repoName\": \"pseudo-r/public-espn-api\",\n    \"githubUrl\": \"https://github.com/pseudo-r/public-espn-api\",\n    \"description\": \"The ESPN API documentation provides a list of available API endpoints and the parameters they accept. It also includes examples of how to call the API endpoints, as well as the expected response format.\",\n    \"owner\": \"pseudo-r\",\n    \"repo\": \"public-espn-api\"\n  },\n  \"Requests\": {\n    \"title\": \"Requests\",\n    \"repoName\": \"psf/requests\",\n    \"githubUrl\": \"https://github.com/psf/requests\",\n    \"description\": \"A simple, yet elegant, HTTP library.\",\n    \"owner\": \"psf\",\n    \"repo\": \"requests\"\n  },\n  \"Psycopg\": {\n    \"title\": \"Psycopg\",\n    \"repoName\": \"psycopg/psycopg\",\n    \"githubUrl\": \"https://github.com/psycopg/psycopg\",\n    \"description\": \"New generation PostgreSQL database adapter for the Python programming language \",\n    \"owner\": \"psycopg\",\n    \"repo\": \"psycopg\"\n  },\n  \"MRpro\": {\n    \"title\": \"MRpro\",\n    \"repoName\": \"ptb-mr/mrpro\",\n    \"githubUrl\": \"https://github.com/ptb-mr/mrpro\",\n    \"description\": \"MR image reconstruction and processing. \",\n    \"owner\": \"ptb-mr\",\n    \"repo\": \"mrpro\"\n  },\n  \"RxDB\": {\n    \"title\": \"RxDB\",\n    \"repoName\": \"pubkey/rxdb\",\n    \"githubUrl\": \"https://github.com/pubkey/rxdb\",\n    \"description\": \"A fast, local first, reactive Database for JavaScript Applications https://rxdb.info/\",\n    \"owner\": \"pubkey\",\n    \"repo\": \"rxdb\"\n  },\n  \"Pug\": {\n    \"title\": \"Pug\",\n    \"repoName\": \"pugjs/pug\",\n    \"githubUrl\": \"https://github.com/pugjs/pug\",\n    \"description\": \"Pug – robust, elegant, feature rich template engine for Node.js\",\n    \"owner\": \"pugjs\",\n    \"repo\": \"pug\"\n  },\n  \"Pulumi\": {\n    \"title\": \"Pulumi\",\n    \"repoName\": \"pulumi/docs\",\n    \"githubUrl\": \"https://github.com/pulumi/docs\",\n    \"description\": \"All things Pulumi docs!\",\n    \"owner\": \"pulumi\",\n    \"repo\": \"docs\"\n  },\n  \"Puppeteer\": {\n    \"title\": \"Puppeteer\",\n    \"repoName\": \"puppeteer/puppeteer\",\n    \"githubUrl\": \"https://github.com/puppeteer/puppeteer\",\n    \"description\": \"JavaScript API for Chrome and Firefox\",\n    \"owner\": \"puppeteer\",\n    \"repo\": \"puppeteer\"\n  },\n  \"Pusher JS\": {\n    \"title\": \"Pusher JS\",\n    \"repoName\": \"pusher/pusher-js\",\n    \"githubUrl\": \"https://github.com/pusher/pusher-js\",\n    \"description\": \"Pusher Javascript library\",\n    \"owner\": \"pusher\",\n    \"repo\": \"pusher-js\"\n  },\n  \"Dwarf Fortress Libgraphics\": {\n    \"title\": \"Dwarf Fortress Libgraphics\",\n    \"repoName\": \"putnam3145/dwarf-fortress--libgraphics--\",\n    \"githubUrl\": \"https://github.com/putnam3145/dwarf-fortress--libgraphics--\",\n    \"description\": \"The graphics portion of Dwarf Fortress.\",\n    \"owner\": \"putnam3145\",\n    \"repo\": \"dwarf-fortress--libgraphics--\"\n  },\n  \"Pvlib Python\": {\n    \"title\": \"Pvlib Python\",\n    \"repoName\": \"pvlib/pvlib-python.git\",\n    \"githubUrl\": \"https://github.com/pvlib/pvlib-python.git\",\n    \"description\": \"A set of documented functions for simulating the performance of photovoltaic energy systems.\",\n    \"owner\": \"pvlib\",\n    \"repo\": \"pvlib-python.git\"\n  },\n  \"PyPDF\": {\n    \"title\": \"PyPDF\",\n    \"repoName\": \"py-pdf/pypdf\",\n    \"githubUrl\": \"https://github.com/py-pdf/pypdf\",\n    \"description\": \"A pure-python PDF library capable of splitting, merging, cropping, and transforming the pages of PDF files\",\n    \"owner\": \"py-pdf\",\n    \"repo\": \"pypdf\"\n  },\n  \"PyOTP\": {\n    \"title\": \"PyOTP\",\n    \"repoName\": \"pyauth/pyotp\",\n    \"githubUrl\": \"https://github.com/pyauth/pyotp\",\n    \"description\": \"Python One-Time Password Library\",\n    \"owner\": \"pyauth\",\n    \"repo\": \"pyotp\"\n  },\n  \"PyAV\": {\n    \"title\": \"PyAV\",\n    \"repoName\": \"pyav-org/pyav\",\n    \"githubUrl\": \"https://github.com/pyav-org/pyav\",\n    \"description\": \"﻿﻿Pythonic bindings for FFmpeg's libraries.\",\n    \"owner\": \"pyav-org\",\n    \"repo\": \"pyav\"\n  },\n  \"Cryptography\": {\n    \"title\": \"Cryptography\",\n    \"repoName\": \"pyca/cryptography\",\n    \"githubUrl\": \"https://github.com/pyca/cryptography\",\n    \"description\": \"cryptography is a package designed to expose cryptographic primitives and recipes to Python developers.\",\n    \"owner\": \"pyca\",\n    \"repo\": \"cryptography\"\n  },\n  \"Pycord\": {\n    \"title\": \"Pycord\",\n    \"repoName\": \"pycord-development/pycord\",\n    \"githubUrl\": \"https://github.com/pycord-development/pycord\",\n    \"description\": \"Pycord is a modern, easy to use, feature-rich, and async ready API wrapper for Discord written in Python\",\n    \"owner\": \"pycord-development\",\n    \"repo\": \"pycord\"\n  },\n  \"Logfire\": {\n    \"title\": \"Logfire\",\n    \"repoName\": \"pydantic/logfire\",\n    \"githubUrl\": \"https://github.com/pydantic/logfire\",\n    \"description\": \"Uncomplicated Observability for Python and beyond! 🪵🔥\",\n    \"owner\": \"pydantic\",\n    \"repo\": \"logfire\"\n  },\n  \"Pydantic\": {\n    \"title\": \"Pydantic\",\n    \"repoName\": \"pydantic/pydantic\",\n    \"githubUrl\": \"https://github.com/pydantic/pydantic\",\n    \"description\": \"Data validation using Python type hints\",\n    \"owner\": \"pydantic\",\n    \"repo\": \"pydantic\"\n  },\n  \"Pydantic AI\": {\n    \"title\": \"Pydantic AI\",\n    \"repoName\": \"pydantic/pydantic-ai\",\n    \"githubUrl\": \"https://github.com/pydantic/pydantic-ai\",\n    \"description\": \"Agent Framework / shim to use Pydantic with LLMs\",\n    \"owner\": \"pydantic\",\n    \"repo\": \"pydantic-ai\"\n  },\n  \"Pydantic Settings\": {\n    \"title\": \"Pydantic Settings\",\n    \"repoName\": \"pydantic/pydantic-settings\",\n    \"githubUrl\": \"https://github.com/pydantic/pydantic-settings\",\n    \"description\": \"Settings management using pydantic\",\n    \"owner\": \"pydantic\",\n    \"repo\": \"pydantic-settings\"\n  },\n  \"Xarray\": {\n    \"title\": \"Xarray\",\n    \"repoName\": \"pydata/xarray\",\n    \"githubUrl\": \"https://github.com/pydata/xarray\",\n    \"description\": \"N-D labeled arrays and datasets in Python\",\n    \"owner\": \"pydata\",\n    \"repo\": \"xarray\"\n  },\n  \"PyEdifice\": {\n    \"title\": \"PyEdifice\",\n    \"repoName\": \"pyedifice/pyedifice\",\n    \"githubUrl\": \"https://github.com/pyedifice/pyedifice\",\n    \"description\": \"Declarative GUI framework for Python and Qt\",\n    \"owner\": \"pyedifice\",\n    \"repo\": \"pyedifice\"\n  },\n  \"PyTorch Geometric\": {\n    \"title\": \"PyTorch Geometric\",\n    \"repoName\": \"pyg-team/pytorch_geometric\",\n    \"githubUrl\": \"https://github.com/pyg-team/pytorch_geometric\",\n    \"description\": \"Graph Neural Network Library for PyTorch\",\n    \"owner\": \"pyg-team\",\n    \"repo\": \"pytorch_geometric\"\n  },\n  \"Pygame Community Edition\": {\n    \"title\": \"Pygame Community Edition\",\n    \"repoName\": \"pygame-community/pygame-ce\",\n    \"githubUrl\": \"https://github.com/pygame-community/pygame-ce\",\n    \"description\": \"🐍🎮 pygame - Community Edition is a FOSS Python library for multimedia applications (like games). Built on top of the excellent SDL library.\",\n    \"owner\": \"pygame-community\",\n    \"repo\": \"pygame-ce\"\n  },\n  \"Pygame\": {\n    \"title\": \"Pygame\",\n    \"repoName\": \"pygame/pygame\",\n    \"githubUrl\": \"https://github.com/pygame/pygame\",\n    \"description\": \"🐍🎮 pygame (the library) is a Free and Open Source python programming language library for making multimedia applications like games built on top of the excellent SDL library. C, Python, Native, OpenGL.\",\n    \"owner\": \"pygame\",\n    \"repo\": \"pygame\"\n  },\n  \"Pyloid\": {\n    \"title\": \"Pyloid\",\n    \"repoName\": \"pyloid/docs\",\n    \"githubUrl\": \"https://github.com/pyloid/docs\",\n    \"description\": \"Pyloid Docs\",\n    \"owner\": \"pyloid\",\n    \"repo\": \"docs\"\n  },\n  \"PyMC\": {\n    \"title\": \"PyMC\",\n    \"repoName\": \"pymc-devs/pymc\",\n    \"githubUrl\": \"https://github.com/pymc-devs/pymc\",\n    \"description\": \"Bayesian Modeling and Probabilistic Programming in Python\",\n    \"owner\": \"pymc-devs\",\n    \"repo\": \"pymc\"\n  },\n  \"PyMC Marketing\": {\n    \"title\": \"PyMC Marketing\",\n    \"repoName\": \"pymc-labs/pymc-marketing\",\n    \"githubUrl\": \"https://github.com/pymc-labs/pymc-marketing\",\n    \"description\": \"Bayesian marketing toolbox in PyMC. Media Mix (MMM), customer lifetime value (CLV), buy-till-you-die (BTYD) models and more.\",\n    \"owner\": \"pymc-labs\",\n    \"repo\": \"pymc-marketing\"\n  },\n  \"PyMoDAQ\": {\n    \"title\": \"PyMoDAQ\",\n    \"repoName\": \"pymodaq/pymodaq.git\",\n    \"githubUrl\": \"https://github.com/pymodaq/pymodaq.git\",\n    \"description\": \"Modular Data Acquisition with Python\",\n    \"owner\": \"pymodaq\",\n    \"repo\": \"pymodaq.git\"\n  },\n  \"PyMuPDF\": {\n    \"title\": \"PyMuPDF\",\n    \"repoName\": \"pymupdf/pymupdf\",\n    \"githubUrl\": \"https://github.com/pymupdf/pymupdf\",\n    \"description\": \"PyMuPDF is a high performance Python library for data extraction, analysis, conversion & manipulation of PDF (and other) documents.\",\n    \"owner\": \"pymupdf\",\n    \"repo\": \"pymupdf\"\n  },\n  \"PyO3\": {\n    \"title\": \"PyO3\",\n    \"repoName\": \"pyo3/pyo3\",\n    \"githubUrl\": \"https://github.com/pyo3/pyo3\",\n    \"description\": \"Rust bindings for the Python interpreter\",\n    \"owner\": \"pyo3\",\n    \"repo\": \"pyo3\"\n  },\n  \"Pyodide\": {\n    \"title\": \"Pyodide\",\n    \"repoName\": \"pyodide/pyodide\",\n    \"githubUrl\": \"https://github.com/pyodide/pyodide\",\n    \"description\": \"Pyodide is a Python distribution for the browser and Node.js based on WebAssembly\",\n    \"owner\": \"pyodide\",\n    \"repo\": \"pyodide\"\n  },\n  \"Hatch\": {\n    \"title\": \"Hatch\",\n    \"repoName\": \"pypa/hatch\",\n    \"githubUrl\": \"https://github.com/pypa/hatch\",\n    \"description\": \"Modern, extensible Python project management\",\n    \"owner\": \"pypa\",\n    \"repo\": \"hatch\"\n  },\n  \"Pyproject.nix\": {\n    \"title\": \"Pyproject.nix\",\n    \"repoName\": \"pyproject-nix/pyproject.nix\",\n    \"githubUrl\": \"https://github.com/pyproject-nix/pyproject.nix\",\n    \"description\": \"A collection of Nix utilities to work with Python projects [maintainer=@adisbladis]\",\n    \"owner\": \"pyproject-nix\",\n    \"repo\": \"pyproject.nix\"\n  },\n  \"Uv2nix\": {\n    \"title\": \"Uv2nix\",\n    \"repoName\": \"pyproject-nix/uv2nix\",\n    \"githubUrl\": \"https://github.com/pyproject-nix/uv2nix\",\n    \"description\": \"Uv2nix - Ingest uv workspaces using Nix [maintainer=@adisbladis] \",\n    \"owner\": \"pyproject-nix\",\n    \"repo\": \"uv2nix\"\n  },\n  \"PyQt Examples\": {\n    \"title\": \"PyQt Examples\",\n    \"repoName\": \"pyqt5/pyqt\",\n    \"githubUrl\": \"https://github.com/pyqt5/pyqt\",\n    \"description\": \"PyQt Examples（PyQt各种测试和例子） PyQt4 PyQt5\",\n    \"owner\": \"pyqt5\",\n    \"repo\": \"pyqt\"\n  },\n  \"Rehooks\": {\n    \"title\": \"Rehooks\",\n    \"repoName\": \"pyr33x/rehooks\",\n    \"githubUrl\": \"https://github.com/pyr33x/rehooks\",\n    \"description\": \"A CLI to scaffold your react custom hooks, with a focus on performance, reusability, and type-safety.\",\n    \"owner\": \"pyr33x\",\n    \"repo\": \"rehooks\"\n  },\n  \"pyRevit\": {\n    \"title\": \"pyRevit\",\n    \"repoName\": \"pyrevitlabs/pyrevit\",\n    \"githubUrl\": \"https://github.com/pyrevitlabs/pyrevit\",\n    \"description\": \"Rapid Application Development (RAD) Environment for Autodesk Revit®\",\n    \"owner\": \"pyrevitlabs\",\n    \"repo\": \"pyrevit\"\n  },\n  \"NumPyro\": {\n    \"title\": \"NumPyro\",\n    \"repoName\": \"pyro-ppl/numpyro\",\n    \"githubUrl\": \"https://github.com/pyro-ppl/numpyro\",\n    \"description\": \"Probabilistic programming with NumPy powered by JAX for autograd and JIT compilation to GPU/TPU/CPU.\",\n    \"owner\": \"pyro-ppl\",\n    \"repo\": \"numpyro\"\n  },\n  \"Pyro\": {\n    \"title\": \"Pyro\",\n    \"repoName\": \"pyro-ppl/pyro\",\n    \"githubUrl\": \"https://github.com/pyro-ppl/pyro\",\n    \"description\": \"Deep universal probabilistic programming with Python and PyTorch\",\n    \"owner\": \"pyro-ppl\",\n    \"repo\": \"pyro\"\n  },\n  \"PyScript\": {\n    \"title\": \"PyScript\",\n    \"repoName\": \"pyscript/pyscript\",\n    \"githubUrl\": \"https://github.com/pyscript/pyscript\",\n    \"description\": \"PyScript is an open source platform for Python in the browser. Try PyScript: https://pyscript.com  Examples: https://tinyurl.com/pyscript-examples  Community: https://discord.gg/HxvBtukrg2\",\n    \"owner\": \"pyscript\",\n    \"repo\": \"pyscript\"\n  },\n  \"Pytest\": {\n    \"title\": \"Pytest\",\n    \"repoName\": \"pytest-dev/pytest\",\n    \"githubUrl\": \"https://github.com/pytest-dev/pytest\",\n    \"description\": \"The pytest framework makes it easy to write small tests, yet scales to support complex functional testing\",\n    \"owner\": \"pytest-dev\",\n    \"repo\": \"pytest\"\n  },\n  \"Pytest BDD\": {\n    \"title\": \"Pytest BDD\",\n    \"repoName\": \"pytest-dev/pytest-bdd\",\n    \"githubUrl\": \"https://github.com/pytest-dev/pytest-bdd\",\n    \"description\": \"BDD library for the pytest runner\",\n    \"owner\": \"pytest-dev\",\n    \"repo\": \"pytest-bdd\"\n  },\n  \"Pytest Timeout\": {\n    \"title\": \"Pytest Timeout\",\n    \"repoName\": \"pytest-dev/pytest-timeout\",\n    \"githubUrl\": \"https://github.com/pytest-dev/pytest-timeout\",\n    \"description\": \"\",\n    \"owner\": \"pytest-dev\",\n    \"repo\": \"pytest-timeout\"\n  },\n  \"GPT Pilot\": {\n    \"title\": \"GPT Pilot\",\n    \"repoName\": \"pythagora-io/gpt-pilot\",\n    \"githubUrl\": \"https://github.com/pythagora-io/gpt-pilot\",\n    \"description\": \"The first real AI developer\",\n    \"owner\": \"pythagora-io\",\n    \"repo\": \"gpt-pilot\"\n  },\n  \"Arq\": {\n    \"title\": \"Arq\",\n    \"repoName\": \"python-arq/arq\",\n    \"githubUrl\": \"https://github.com/python-arq/arq\",\n    \"description\": \"Fast job queuing and RPC in python with asyncio and redis.\",\n    \"owner\": \"python-arq\",\n    \"repo\": \"arq\"\n  },\n  \"Eel\": {\n    \"title\": \"Eel\",\n    \"repoName\": \"python-eel/eel\",\n    \"githubUrl\": \"https://github.com/python-eel/eel\",\n    \"description\": \"A little Python library for making simple Electron-like HTML/JS GUI apps\",\n    \"owner\": \"python-eel\",\n    \"repo\": \"eel\"\n  },\n  \"Poetry\": {\n    \"title\": \"Poetry\",\n    \"repoName\": \"python-poetry/website\",\n    \"githubUrl\": \"https://github.com/python-poetry/website\",\n    \"description\": \"Source for the official Poetry website\",\n    \"owner\": \"python-poetry\",\n    \"repo\": \"website\"\n  },\n  \"Flask-Restx\": {\n    \"title\": \"Flask-Restx\",\n    \"repoName\": \"python-restx/flask-restx\",\n    \"githubUrl\": \"https://github.com/python-restx/flask-restx\",\n    \"description\": \"Fork of Flask-RESTPlus: Fully featured framework for fast, easy and documented API development with Flask\",\n    \"owner\": \"python-restx\",\n    \"repo\": \"flask-restx\"\n  },\n  \"Python Telegram Bot\": {\n    \"title\": \"Python Telegram Bot\",\n    \"repoName\": \"python-telegram-bot/python-telegram-bot\",\n    \"githubUrl\": \"https://github.com/python-telegram-bot/python-telegram-bot\",\n    \"description\": \"We have made you a wrapper you can't refuse\",\n    \"owner\": \"python-telegram-bot\",\n    \"repo\": \"python-telegram-bot\"\n  },\n  \"Python Thread\": {\n    \"title\": \"Python Thread\",\n    \"repoName\": \"python-thread/thread\",\n    \"githubUrl\": \"https://github.com/python-thread/thread\",\n    \"description\": \"A Python threading library extension ⭐️ Star to support our work! \",\n    \"owner\": \"python-thread\",\n    \"repo\": \"thread\"\n  },\n  \"Websockets\": {\n    \"title\": \"Websockets\",\n    \"repoName\": \"python-websockets/websockets\",\n    \"githubUrl\": \"https://github.com/python-websockets/websockets\",\n    \"description\": \"Library for building WebSocket servers and clients in Python\",\n    \"owner\": \"python-websockets\",\n    \"repo\": \"websockets\"\n  },\n  \"Python\": {\n    \"title\": \"Python\",\n    \"repoName\": \"python/cpython\",\n    \"githubUrl\": \"https://github.com/python/cpython\",\n    \"description\": \"The Python programming language\",\n    \"owner\": \"python\",\n    \"repo\": \"cpython\"\n  },\n  \"Toolz\": {\n    \"title\": \"Toolz\",\n    \"repoName\": \"pytoolz/toolz\",\n    \"githubUrl\": \"https://github.com/pytoolz/toolz\",\n    \"description\": \"A functional standard library for Python.\",\n    \"owner\": \"pytoolz\",\n    \"repo\": \"toolz\"\n  },\n  \"PyTorch\": {\n    \"title\": \"PyTorch\",\n    \"repoName\": \"pytorch/pytorch\",\n    \"githubUrl\": \"https://github.com/pytorch/pytorch\",\n    \"description\": \"Tensors and Dynamic neural networks in Python with strong GPU acceleration\",\n    \"owner\": \"pytorch\",\n    \"repo\": \"pytorch\"\n  },\n  \"PyTorch RL\": {\n    \"title\": \"PyTorch RL\",\n    \"repoName\": \"pytorch/rl\",\n    \"githubUrl\": \"https://github.com/pytorch/rl\",\n    \"description\": \"A modular, primitive-first, python-first PyTorch library for Reinforcement Learning.\",\n    \"owner\": \"pytorch\",\n    \"repo\": \"rl\"\n  },\n  \"PyTorch Tutorials\": {\n    \"title\": \"PyTorch Tutorials\",\n    \"repoName\": \"pytorch/tutorials\",\n    \"githubUrl\": \"https://github.com/pytorch/tutorials\",\n    \"description\": \"PyTorch tutorials.\",\n    \"owner\": \"pytorch\",\n    \"repo\": \"tutorials\"\n  },\n  \"PyVista\": {\n    \"title\": \"PyVista\",\n    \"repoName\": \"pyvista/pyvista\",\n    \"githubUrl\": \"https://github.com/pyvista/pyvista\",\n    \"description\": \"3D plotting and mesh analysis through a streamlined interface for the Visualization Toolkit (VTK)\",\n    \"owner\": \"pyvista\",\n    \"repo\": \"pyvista\"\n  },\n  \"Qbox\": {\n    \"title\": \"Qbox\",\n    \"repoName\": \"qbox-project/qbox-docs\",\n    \"githubUrl\": \"https://github.com/qbox-project/qbox-docs\",\n    \"description\": \"\",\n    \"owner\": \"qbox-project\",\n    \"repo\": \"qbox-docs\"\n  },\n  \"Qdrant Landing Page\": {\n    \"title\": \"Qdrant Landing Page\",\n    \"repoName\": \"qdrant/landing_page\",\n    \"githubUrl\": \"https://github.com/qdrant/landing_page\",\n    \"description\": \"Landing page for qdrant.tech\",\n    \"owner\": \"qdrant\",\n    \"repo\": \"landing_page\"\n  },\n  \"Qdrant\": {\n    \"title\": \"Qdrant\",\n    \"repoName\": \"qdrant/qdrant\",\n    \"githubUrl\": \"https://github.com/qdrant/qdrant\",\n    \"description\": \"Qdrant - High-performance, massive-scale Vector Database and Vector Search Engine for the next generation of AI. Also available in the cloud https://cloud.qdrant.io/\",\n    \"owner\": \"qdrant\",\n    \"repo\": \"qdrant\"\n  },\n  \"Qdrant Rust Client\": {\n    \"title\": \"Qdrant Rust Client\",\n    \"repoName\": \"qdrant/rust-client\",\n    \"githubUrl\": \"https://github.com/qdrant/rust-client\",\n    \"description\": \"Rust client for Qdrant vector search engine \",\n    \"owner\": \"qdrant\",\n    \"repo\": \"rust-client\"\n  },\n  \"Qiskit\": {\n    \"title\": \"Qiskit\",\n    \"repoName\": \"qiskit/qiskit\",\n    \"githubUrl\": \"https://github.com/qiskit/qiskit\",\n    \"description\": \"Qiskit is an open-source SDK for working with quantum computers at the level of extended quantum circuits, operators, and primitives.\",\n    \"owner\": \"qiskit\",\n    \"repo\": \"qiskit\"\n  },\n  \"Optimizely\": {\n    \"title\": \"Optimizely\",\n    \"repoName\": \"quan-tran-niteco/optimizely\",\n    \"githubUrl\": \"https://github.com/quan-tran-niteco/optimizely\",\n    \"description\": \"\",\n    \"owner\": \"quan-tran-niteco\",\n    \"repo\": \"optimizely\"\n  },\n  \"QuantConnect\": {\n    \"title\": \"QuantConnect\",\n    \"repoName\": \"quantconnect/documentation\",\n    \"githubUrl\": \"https://github.com/quantconnect/documentation\",\n    \"description\": \"QuantConnect Wiki Style Documentation Behind QuantConnect\",\n    \"owner\": \"quantconnect\",\n    \"repo\": \"documentation\"\n  },\n  \"Lean Algorithmic Trading Engine\": {\n    \"title\": \"Lean Algorithmic Trading Engine\",\n    \"repoName\": \"quantconnect/lean\",\n    \"githubUrl\": \"https://github.com/quantconnect/lean\",\n    \"description\": \"Lean Algorithmic Trading Engine by QuantConnect (Python, C#)\",\n    \"owner\": \"quantconnect\",\n    \"repo\": \"lean\"\n  },\n  \"Quarkus\": {\n    \"title\": \"Quarkus\",\n    \"repoName\": \"quarkusio/quarkusio.github.io\",\n    \"githubUrl\": \"https://github.com/quarkusio/quarkusio.github.io\",\n    \"description\": \"Website for Quarkus project\",\n    \"owner\": \"quarkusio\",\n    \"repo\": \"quarkusio.github.io\"\n  },\n  \"Quarto\": {\n    \"title\": \"Quarto\",\n    \"repoName\": \"quarto-dev/quarto-web\",\n    \"githubUrl\": \"https://github.com/quarto-dev/quarto-web\",\n    \"description\": \"Quarto website\",\n    \"owner\": \"quarto-dev\",\n    \"repo\": \"quarto-web\"\n  },\n  \"Quasar Framework\": {\n    \"title\": \"Quasar Framework\",\n    \"repoName\": \"quasarframework/quasar.git\",\n    \"githubUrl\": \"https://github.com/quasarframework/quasar.git\",\n    \"description\": \"Quasar Framework - Build high-performance VueJS user interfaces in record time\",\n    \"owner\": \"quasarframework\",\n    \"repo\": \"quasar.git\"\n  },\n  \"QuestDB\": {\n    \"title\": \"QuestDB\",\n    \"repoName\": \"questdb/questdb\",\n    \"githubUrl\": \"https://github.com/questdb/questdb\",\n    \"description\": \"QuestDB is a high performance, open-source, time-series database\",\n    \"owner\": \"questdb\",\n    \"repo\": \"questdb\"\n  },\n  \"QuestPDF\": {\n    \"title\": \"QuestPDF\",\n    \"repoName\": \"questpdf/questpdf\",\n    \"githubUrl\": \"https://github.com/questpdf/questpdf\",\n    \"description\": \"QuestPDF is a modern open-source .NET library for PDF document generation. Offering comprehensive layout engine powered by concise and discoverable C# Fluent API. Easily generate PDF reports, invoices, exports, etc.\",\n    \"owner\": \"questpdf\",\n    \"repo\": \"questpdf\"\n  },\n  \"Quinn\": {\n    \"title\": \"Quinn\",\n    \"repoName\": \"quinn-rs/quinn\",\n    \"githubUrl\": \"https://github.com/quinn-rs/quinn\",\n    \"description\": \"Async-friendly QUIC implementation in Rust\",\n    \"owner\": \"quinn-rs\",\n    \"repo\": \"quinn\"\n  },\n  \"Quivr\": {\n    \"title\": \"Quivr\",\n    \"repoName\": \"quivrhq/quivr\",\n    \"githubUrl\": \"https://github.com/quivrhq/quivr\",\n    \"description\": \"Opiniated RAG for integrating GenAI in your apps 🧠   Focus on your product rather than the RAG. Easy integration in existing products with customisation!  Any LLM: GPT4, Groq, Llama. Any Vectorstore: PGVector, Faiss. Any Files. Anyway you want. \",\n    \"owner\": \"quivrhq\",\n    \"repo\": \"quivr\"\n  },\n  \"QUnit\": {\n    \"title\": \"QUnit\",\n    \"repoName\": \"qunitjs/qunit\",\n    \"githubUrl\": \"https://github.com/qunitjs/qunit\",\n    \"description\": \"🔮 An easy-to-use JavaScript unit testing framework.\",\n    \"owner\": \"qunitjs\",\n    \"repo\": \"qunit\"\n  },\n  \"Qwen Agent\": {\n    \"title\": \"Qwen Agent\",\n    \"repoName\": \"qwenlm/qwen-agent\",\n    \"githubUrl\": \"https://github.com/qwenlm/qwen-agent\",\n    \"description\": \"Agent framework and applications built upon Qwen>=2.0, featuring Function Calling, Code Interpreter, RAG, and Chrome extension.\",\n    \"owner\": \"qwenlm\",\n    \"repo\": \"qwen-agent\"\n  },\n  \"Qwen2.5-Omni\": {\n    \"title\": \"Qwen2.5-Omni\",\n    \"repoName\": \"qwenlm/qwen2.5-omni\",\n    \"githubUrl\": \"https://github.com/qwenlm/qwen2.5-omni\",\n    \"description\": \"Qwen2.5-Omni is an end-to-end multimodal model by Qwen team at Alibaba Cloud, capable of understanding text, audio, vision, video, and performing real-time speech generation.\",\n    \"owner\": \"qwenlm\",\n    \"repo\": \"qwen2.5-omni\"\n  },\n  \"Qwik\": {\n    \"title\": \"Qwik\",\n    \"repoName\": \"qwikdev/qwik\",\n    \"githubUrl\": \"https://github.com/qwikdev/qwik\",\n    \"description\": \"Instant-loading web apps, without effort\",\n    \"owner\": \"qwikdev\",\n    \"repo\": \"qwik\"\n  },\n  \"DBI\": {\n    \"title\": \"DBI\",\n    \"repoName\": \"r-dbi/dbi\",\n    \"githubUrl\": \"https://github.com/r-dbi/dbi\",\n    \"description\": \"A database interface (DBI) definition for communication between R and RDBMSs\",\n    \"owner\": \"r-dbi\",\n    \"repo\": \"dbi\"\n  },\n  \"RabbitMQ\": {\n    \"title\": \"RabbitMQ\",\n    \"repoName\": \"rabbitmq/rabbitmq-website\",\n    \"githubUrl\": \"https://github.com/rabbitmq/rabbitmq-website\",\n    \"description\": \"RabbitMQ website\",\n    \"owner\": \"rabbitmq\",\n    \"repo\": \"rabbitmq-website\"\n  },\n  \"Genestack\": {\n    \"title\": \"Genestack\",\n    \"repoName\": \"rackerlabs/genestack\",\n    \"githubUrl\": \"https://github.com/rackerlabs/genestack\",\n    \"description\": \"Where Flex cloud brings infrastructures to where you are.\",\n    \"owner\": \"rackerlabs\",\n    \"repo\": \"genestack\"\n  },\n  \"Radix Primitives\": {\n    \"title\": \"Radix Primitives\",\n    \"repoName\": \"radix-ui/primitives\",\n    \"githubUrl\": \"https://github.com/radix-ui/primitives\",\n    \"description\": \"Radix Primitives is an open-source UI component library for building high-quality, accessible design systems and web apps. Maintained by @workos.\",\n    \"owner\": \"radix-ui\",\n    \"repo\": \"primitives\"\n  },\n  \"Radix Themes\": {\n    \"title\": \"Radix Themes\",\n    \"repoName\": \"radix-ui/themes\",\n    \"githubUrl\": \"https://github.com/radix-ui/themes\",\n    \"description\": \"Radix Themes is an open-source component library optimized for fast development, easy maintenance, and accessibility. Maintained by @workos.\",\n    \"owner\": \"radix-ui\",\n    \"repo\": \"themes\"\n  },\n  \"Radix\": {\n    \"title\": \"Radix\",\n    \"repoName\": \"radix-ui/website\",\n    \"githubUrl\": \"https://github.com/radix-ui/website\",\n    \"description\": \"Website and documentation for Radix.\",\n    \"owner\": \"radix-ui\",\n    \"repo\": \"website\"\n  },\n  \"Dwarf Explorer\": {\n    \"title\": \"Dwarf Explorer\",\n    \"repoName\": \"ragundo/dwarfexplorer\",\n    \"githubUrl\": \"https://github.com/ragundo/dwarfexplorer\",\n    \"description\": \"DFHack plugin for visualizing Dwarf Fortress structures\",\n    \"owner\": \"ragundo\",\n    \"repo\": \"dwarfexplorer\"\n  },\n  \"Ruby on Rails\": {\n    \"title\": \"Ruby on Rails\",\n    \"repoName\": \"rails/rails\",\n    \"githubUrl\": \"https://github.com/rails/rails\",\n    \"description\": \"Ruby on Rails\",\n    \"owner\": \"rails\",\n    \"repo\": \"rails\"\n  },\n  \"Railway\": {\n    \"title\": \"Railway\",\n    \"repoName\": \"railwayapp/docs\",\n    \"githubUrl\": \"https://github.com/railwayapp/docs\",\n    \"description\": \"Railway documentation\",\n    \"owner\": \"railwayapp\",\n    \"repo\": \"docs\"\n  },\n  \"Rainbow\": {\n    \"title\": \"Rainbow\",\n    \"repoName\": \"rainbow-me/rainbow\",\n    \"githubUrl\": \"https://github.com/rainbow-me/rainbow\",\n    \"description\": \"🌈‒ the Ethereum wallet that lives in your pocket \",\n    \"owner\": \"rainbow-me\",\n    \"repo\": \"rainbow\"\n  },\n  \"RainbowKit\": {\n    \"title\": \"RainbowKit\",\n    \"repoName\": \"rainbow-me/rainbowkit\",\n    \"githubUrl\": \"https://github.com/rainbow-me/rainbowkit\",\n    \"description\": \"The best way to connect a wallet 🌈 🧰\",\n    \"owner\": \"rainbow-me\",\n    \"repo\": \"rainbowkit\"\n  },\n  \"OpenXRS\": {\n    \"title\": \"OpenXRS\",\n    \"repoName\": \"ralith/openxrs\",\n    \"githubUrl\": \"https://github.com/ralith/openxrs\",\n    \"description\": \"OpenXR bindings for Rust\",\n    \"owner\": \"ralith\",\n    \"repo\": \"openxrs\"\n  },\n  \"Ramda.js\": {\n    \"title\": \"Ramda.js\",\n    \"repoName\": \"ramda/ramda.github.io\",\n    \"githubUrl\": \"https://github.com/ramda/ramda.github.io\",\n    \"description\": \":ram: :globe_with_meridians: Documentation for Ramda.js\",\n    \"owner\": \"ramda\",\n    \"repo\": \"ramda.github.io\"\n  },\n  \"RSpotify\": {\n    \"title\": \"RSpotify\",\n    \"repoName\": \"ramsayleung/rspotify\",\n    \"githubUrl\": \"https://github.com/ramsayleung/rspotify\",\n    \"description\": \"Spotify Web API SDK implemented on Rust\",\n    \"owner\": \"ramsayleung\",\n    \"repo\": \"rspotify\"\n  },\n  \"YFinance\": {\n    \"title\": \"YFinance\",\n    \"repoName\": \"ranaroussi/yfinance\",\n    \"githubUrl\": \"https://github.com/ranaroussi/yfinance\",\n    \"description\": \"Download market data from Yahoo! Finance's API\",\n    \"owner\": \"ranaroussi\",\n    \"repo\": \"yfinance\"\n  },\n  \"Rancher\": {\n    \"title\": \"Rancher\",\n    \"repoName\": \"rancher/rancher\",\n    \"githubUrl\": \"https://github.com/rancher/rancher\",\n    \"description\": \"Complete container management platform\",\n    \"owner\": \"rancher\",\n    \"repo\": \"rancher\"\n  },\n  \"cuDF\": {\n    \"title\": \"cuDF\",\n    \"repoName\": \"rapidsai/cudf\",\n    \"githubUrl\": \"https://github.com/rapidsai/cudf\",\n    \"description\": \"cuDF - GPU DataFrame Library \",\n    \"owner\": \"rapidsai\",\n    \"repo\": \"cudf\"\n  },\n  \"RAPIDS cuML\": {\n    \"title\": \"RAPIDS cuML\",\n    \"repoName\": \"rapidsai/cuml\",\n    \"githubUrl\": \"https://github.com/rapidsai/cuml\",\n    \"description\": \"cuML - RAPIDS Machine Learning Library\",\n    \"owner\": \"rapidsai\",\n    \"repo\": \"cuml\"\n  },\n  \"RAPIDS Dask-CUDA\": {\n    \"title\": \"RAPIDS Dask-CUDA\",\n    \"repoName\": \"rapidsai/dask-cuda\",\n    \"githubUrl\": \"https://github.com/rapidsai/dask-cuda\",\n    \"description\": \"Utilities for Dask and CUDA interactions\",\n    \"owner\": \"rapidsai\",\n    \"repo\": \"dask-cuda\"\n  },\n  \"Discord.py\": {\n    \"title\": \"Discord.py\",\n    \"repoName\": \"rapptz/discord.py\",\n    \"githubUrl\": \"https://github.com/rapptz/discord.py\",\n    \"description\": \"An API wrapper for Discord written in Python.\",\n    \"owner\": \"rapptz\",\n    \"repo\": \"discord.py\"\n  },\n  \"Airstream\": {\n    \"title\": \"Airstream\",\n    \"repoName\": \"raquo/airstream\",\n    \"githubUrl\": \"https://github.com/raquo/airstream\",\n    \"description\": \"State propagation and event streams with mandatory ownership and no glitches\",\n    \"owner\": \"raquo\",\n    \"repo\": \"airstream\"\n  },\n  \"Laminar\": {\n    \"title\": \"Laminar\",\n    \"repoName\": \"raquo/laminar\",\n    \"githubUrl\": \"https://github.com/raquo/laminar\",\n    \"description\": \"Simple, expressive, and safe UI library for Scala.js\",\n    \"owner\": \"raquo\",\n    \"repo\": \"laminar\"\n  },\n  \"Rasa\": {\n    \"title\": \"Rasa\",\n    \"repoName\": \"rasahq/rasa\",\n    \"githubUrl\": \"https://github.com/rasahq/rasa\",\n    \"description\": \"💬   Open source machine learning framework to automate text- and voice-based conversations: NLU, dialogue management, connect to Slack, Facebook, and more - Create chatbots and voice assistants\",\n    \"owner\": \"rasahq\",\n    \"repo\": \"rasa\"\n  },\n  \"Ray\": {\n    \"title\": \"Ray\",\n    \"repoName\": \"ray-project/ray\",\n    \"githubUrl\": \"https://github.com/ray-project/ray\",\n    \"description\": \"Ray is an AI compute engine. Ray consists of a core distributed runtime and a set of AI Libraries for accelerating ML workloads.\",\n    \"owner\": \"ray-project\",\n    \"repo\": \"ray\"\n  },\n  \"Raycast Extensions\": {\n    \"title\": \"Raycast Extensions\",\n    \"repoName\": \"raycast/extensions\",\n    \"githubUrl\": \"https://github.com/raycast/extensions\",\n    \"description\": \"Everything you need to extend Raycast.\",\n    \"owner\": \"raycast\",\n    \"repo\": \"extensions\"\n  },\n  \"Raylib\": {\n    \"title\": \"Raylib\",\n    \"repoName\": \"raysan5/raylib\",\n    \"githubUrl\": \"https://github.com/raysan5/raylib\",\n    \"description\": \"A simple and easy-to-use library to enjoy videogames programming\",\n    \"owner\": \"raysan5\",\n    \"repo\": \"raylib\"\n  },\n  \"Blade\": {\n    \"title\": \"Blade\",\n    \"repoName\": \"razorpay/blade\",\n    \"githubUrl\": \"https://github.com/razorpay/blade\",\n    \"description\": \"Design System that powers Razorpay\",\n    \"owner\": \"razorpay\",\n    \"repo\": \"blade\"\n  },\n  \"React Bootstrap\": {\n    \"title\": \"React Bootstrap\",\n    \"repoName\": \"react-bootstrap/react-bootstrap\",\n    \"githubUrl\": \"https://github.com/react-bootstrap/react-bootstrap\",\n    \"description\": \"\",\n    \"owner\": \"react-bootstrap\",\n    \"repo\": \"react-bootstrap\"\n  },\n  \"React Hook Form\": {\n    \"title\": \"React Hook Form\",\n    \"repoName\": \"react-hook-form/react-hook-form\",\n    \"githubUrl\": \"https://github.com/react-hook-form/react-hook-form\",\n    \"description\": \"📋 React Hooks for form state management and validation (Web + React Native)\",\n    \"owner\": \"react-hook-form\",\n    \"repo\": \"react-hook-form\"\n  },\n  \"React Icons\": {\n    \"title\": \"React Icons\",\n    \"repoName\": \"react-icons/react-icons\",\n    \"githubUrl\": \"https://github.com/react-icons/react-icons\",\n    \"description\": \"svg react icons of popular icon packs\",\n    \"owner\": \"react-icons\",\n    \"repo\": \"react-icons\"\n  },\n  \"React Native Google Sign-In\": {\n    \"title\": \"React Native Google Sign-In\",\n    \"repoName\": \"react-native-google-signin/google-signin\",\n    \"githubUrl\": \"https://github.com/react-native-google-signin/google-signin\",\n    \"description\": \"Google Sign-in for your React Native applications\",\n    \"owner\": \"react-native-google-signin\",\n    \"repo\": \"google-signin\"\n  },\n  \"React Native CallKeep\": {\n    \"title\": \"React Native CallKeep\",\n    \"repoName\": \"react-native-webrtc/react-native-callkeep\",\n    \"githubUrl\": \"https://github.com/react-native-webrtc/react-native-callkeep\",\n    \"description\": \"iOS CallKit framework and Android ConnectionService for React Native\",\n    \"owner\": \"react-native-webrtc\",\n    \"repo\": \"react-native-callkeep\"\n  },\n  \"React Native VoIP Push Notification\": {\n    \"title\": \"React Native VoIP Push Notification\",\n    \"repoName\": \"react-native-webrtc/react-native-voip-push-notification\",\n    \"githubUrl\": \"https://github.com/react-native-webrtc/react-native-voip-push-notification\",\n    \"description\": \"React Native VoIP Push Notification - Currently iOS only\",\n    \"owner\": \"react-native-webrtc\",\n    \"repo\": \"react-native-voip-push-notification\"\n  },\n  \"React Navigation\": {\n    \"title\": \"React Navigation\",\n    \"repoName\": \"react-navigation/react-navigation.github.io\",\n    \"githubUrl\": \"https://github.com/react-navigation/react-navigation.github.io\",\n    \"description\": \"Home of the documentation and other miscellanea\",\n    \"owner\": \"react-navigation\",\n    \"repo\": \"react-navigation.github.io\"\n  },\n  \"ReactiveX Website\": {\n    \"title\": \"ReactiveX Website\",\n    \"repoName\": \"reactivex/reactivex.github.io\",\n    \"githubUrl\": \"https://github.com/reactivex/reactivex.github.io\",\n    \"description\": \"ReactiveX Website\",\n    \"owner\": \"reactivex\",\n    \"repo\": \"reactivex.github.io\"\n  },\n  \"RxJS\": {\n    \"title\": \"RxJS\",\n    \"repoName\": \"reactivex/rxjs\",\n    \"githubUrl\": \"https://github.com/reactivex/rxjs\",\n    \"description\": \"A reactive programming library for JavaScript\",\n    \"owner\": \"reactivex\",\n    \"repo\": \"rxjs\"\n  },\n  \"ReactPHP Promise\": {\n    \"title\": \"ReactPHP Promise\",\n    \"repoName\": \"reactphp/promise\",\n    \"githubUrl\": \"https://github.com/reactphp/promise\",\n    \"description\": \"Promises/A implementation for PHP.\",\n    \"owner\": \"reactphp\",\n    \"repo\": \"promise\"\n  },\n  \"Realm Kotlin\": {\n    \"title\": \"Realm Kotlin\",\n    \"repoName\": \"realm/realm-kotlin\",\n    \"githubUrl\": \"https://github.com/realm/realm-kotlin\",\n    \"description\": \"Kotlin Multiplatform and Android SDK for the Realm Mobile Database: Build Better Apps Faster.\",\n    \"owner\": \"realm\",\n    \"repo\": \"realm-kotlin\"\n  },\n  \"Recharts\": {\n    \"title\": \"Recharts\",\n    \"repoName\": \"recharts/recharts\",\n    \"githubUrl\": \"https://github.com/recharts/recharts\",\n    \"description\": \"Redefined chart library built with React and D3\",\n    \"owner\": \"recharts\",\n    \"repo\": \"recharts\"\n  },\n  \"Rector\": {\n    \"title\": \"Rector\",\n    \"repoName\": \"rectorphp/rector\",\n    \"githubUrl\": \"https://github.com/rectorphp/rector\",\n    \"description\": \"Instant Upgrades and Automated Refactoring of any PHP 5.3+ code\",\n    \"owner\": \"rectorphp\",\n    \"repo\": \"rector\"\n  },\n  \"Go Redis\": {\n    \"title\": \"Go Redis\",\n    \"repoName\": \"redis/go-redis\",\n    \"githubUrl\": \"https://github.com/redis/go-redis\",\n    \"description\": \"Redis Go client\",\n    \"owner\": \"redis\",\n    \"repo\": \"go-redis\"\n  },\n  \"ioredis\": {\n    \"title\": \"ioredis\",\n    \"repoName\": \"redis/ioredis\",\n    \"githubUrl\": \"https://github.com/redis/ioredis\",\n    \"description\": \"🚀 A robust, performance-focused, and full-featured Redis client for Node.js.\",\n    \"owner\": \"redis\",\n    \"repo\": \"ioredis\"\n  },\n  \"Redis\": {\n    \"title\": \"Redis\",\n    \"repoName\": \"redis/redis-doc\",\n    \"githubUrl\": \"https://github.com/redis/redis-doc\",\n    \"description\": \"Redis documentation source code for markdown and metadata files, conversion scripts, and so forth\",\n    \"owner\": \"redis\",\n    \"repo\": \"redis-doc\"\n  },\n  \"Redis Py\": {\n    \"title\": \"Redis Py\",\n    \"repoName\": \"redis/redis-py\",\n    \"githubUrl\": \"https://github.com/redis/redis-py\",\n    \"description\": \"Redis Python client\",\n    \"owner\": \"redis\",\n    \"repo\": \"redis-py\"\n  },\n  \"Redotvideo\": {\n    \"title\": \"Redotvideo\",\n    \"repoName\": \"redotvideo/docs\",\n    \"githubUrl\": \"https://github.com/redotvideo/docs\",\n    \"description\": \"\",\n    \"owner\": \"redotvideo\",\n    \"repo\": \"docs\"\n  },\n  \"ReVideo\": {\n    \"title\": \"ReVideo\",\n    \"repoName\": \"redotvideo/revideo\",\n    \"githubUrl\": \"https://github.com/redotvideo/revideo\",\n    \"description\": \"Create Videos with Code\",\n    \"owner\": \"redotvideo\",\n    \"repo\": \"revideo\"\n  },\n  \"Credenza\": {\n    \"title\": \"Credenza\",\n    \"repoName\": \"redpangilinan/credenza\",\n    \"githubUrl\": \"https://github.com/redpangilinan/credenza\",\n    \"description\": \"Ready-made responsive modal component for shadcn/ui.\",\n    \"owner\": \"redpangilinan\",\n    \"repo\": \"credenza\"\n  },\n  \"Redux Saga\": {\n    \"title\": \"Redux Saga\",\n    \"repoName\": \"redux-saga/redux-saga\",\n    \"githubUrl\": \"https://github.com/redux-saga/redux-saga\",\n    \"description\": \"An alternative side effect model for Redux apps\",\n    \"owner\": \"redux-saga\",\n    \"repo\": \"redux-saga\"\n  },\n  \"React Redux\": {\n    \"title\": \"React Redux\",\n    \"repoName\": \"reduxjs/react-redux\",\n    \"githubUrl\": \"https://github.com/reduxjs/react-redux\",\n    \"description\": \"Official React bindings for Redux\",\n    \"owner\": \"reduxjs\",\n    \"repo\": \"react-redux\"\n  },\n  \"Redux\": {\n    \"title\": \"Redux\",\n    \"repoName\": \"reduxjs/redux\",\n    \"githubUrl\": \"https://github.com/reduxjs/redux\",\n    \"description\": \"A JS library for predictable global state management\",\n    \"owner\": \"reduxjs\",\n    \"repo\": \"redux\"\n  },\n  \"Redux Toolkit\": {\n    \"title\": \"Redux Toolkit\",\n    \"repoName\": \"reduxjs/redux-toolkit\",\n    \"githubUrl\": \"https://github.com/reduxjs/redux-toolkit\",\n    \"description\": \"The official, opinionated, batteries-included toolset for efficient Redux development\",\n    \"owner\": \"reduxjs\",\n    \"repo\": \"redux-toolkit\"\n  },\n  \"RedwoodSDK\": {\n    \"title\": \"RedwoodSDK\",\n    \"repoName\": \"redwoodjs/sdk\",\n    \"githubUrl\": \"https://github.com/redwoodjs/sdk\",\n    \"description\": \"RedwoodSDK is a React Framework for Cloudflare. It begins as a Vite plugin that unlocks SSR, React Server Components, Server Functions, and realtime features.  Its standards-based router, with support for middleware and  interruptors, gives you fine-grained control over every request and  response.\",\n    \"owner\": \"redwoodjs\",\n    \"repo\": \"sdk\"\n  },\n  \"Design Patterns C++\": {\n    \"title\": \"Design Patterns C++\",\n    \"repoName\": \"refactoringguru/design-patterns-cpp\",\n    \"githubUrl\": \"https://github.com/refactoringguru/design-patterns-cpp\",\n    \"description\": \"Design Pattern Examples in C++\",\n    \"owner\": \"refactoringguru\",\n    \"repo\": \"design-patterns-cpp\"\n  },\n  \"Design Patterns Go\": {\n    \"title\": \"Design Patterns Go\",\n    \"repoName\": \"refactoringguru/design-patterns-go\",\n    \"githubUrl\": \"https://github.com/refactoringguru/design-patterns-go\",\n    \"description\": \"\",\n    \"owner\": \"refactoringguru\",\n    \"repo\": \"design-patterns-go\"\n  },\n  \"Design Patterns TypeScript\": {\n    \"title\": \"Design Patterns TypeScript\",\n    \"repoName\": \"refactoringguru/design-patterns-typescript\",\n    \"githubUrl\": \"https://github.com/refactoringguru/design-patterns-typescript\",\n    \"description\": \"Design Pattern Examples in TypeScript\",\n    \"owner\": \"refactoringguru\",\n    \"repo\": \"design-patterns-typescript\"\n  },\n  \"Refine\": {\n    \"title\": \"Refine\",\n    \"repoName\": \"refinedev/refine\",\n    \"githubUrl\": \"https://github.com/refinedev/refine\",\n    \"description\": \"A React Framework for building  internal tools, admin panels, dashboards & B2B apps with unmatched flexibility.\",\n    \"owner\": \"refinedev\",\n    \"repo\": \"refine\"\n  },\n  \"Reflex\": {\n    \"title\": \"Reflex\",\n    \"repoName\": \"reflex-dev/reflex\",\n    \"githubUrl\": \"https://github.com/reflex-dev/reflex\",\n    \"description\": \"🕸️ Web apps in pure Python 🐍\",\n    \"owner\": \"reflex-dev\",\n    \"repo\": \"reflex\"\n  },\n  \"OpenAI\": {\n    \"title\": \"OpenAI\",\n    \"repoName\": \"rellfy/openai\",\n    \"githubUrl\": \"https://github.com/rellfy/openai\",\n    \"description\": \"An unofficial, async Rust library for the OpenAI API\",\n    \"owner\": \"rellfy\",\n    \"repo\": \"openai\"\n  },\n  \"React Markdown\": {\n    \"title\": \"React Markdown\",\n    \"repoName\": \"remarkjs/react-markdown\",\n    \"githubUrl\": \"https://github.com/remarkjs/react-markdown\",\n    \"description\": \"Markdown component for React\",\n    \"owner\": \"remarkjs\",\n    \"repo\": \"react-markdown\"\n  },\n  \"Remeda\": {\n    \"title\": \"Remeda\",\n    \"repoName\": \"remeda/remeda\",\n    \"githubUrl\": \"https://github.com/remeda/remeda\",\n    \"description\": \"A utility library for JavaScript and TypeScript.\",\n    \"owner\": \"remeda\",\n    \"repo\": \"remeda\"\n  },\n  \"React Router\": {\n    \"title\": \"React Router\",\n    \"repoName\": \"remix-run/react-router\",\n    \"githubUrl\": \"https://github.com/remix-run/react-router\",\n    \"description\": \"Declarative routing for React\",\n    \"owner\": \"remix-run\",\n    \"repo\": \"react-router\"\n  },\n  \"Remix\": {\n    \"title\": \"Remix\",\n    \"repoName\": \"remix-run/remix\",\n    \"githubUrl\": \"https://github.com/remix-run/remix\",\n    \"description\": \"Build Better Websites. Create modern, resilient user experiences with web fundamentals.\",\n    \"owner\": \"remix-run\",\n    \"repo\": \"remix\"\n  },\n  \"Remotion\": {\n    \"title\": \"Remotion\",\n    \"repoName\": \"remotion-dev/remotion\",\n    \"githubUrl\": \"https://github.com/remotion-dev/remotion\",\n    \"description\": \"🎥      Make videos programmatically with React\",\n    \"owner\": \"remotion-dev\",\n    \"repo\": \"remotion\"\n  },\n  \"Remult\": {\n    \"title\": \"Remult\",\n    \"repoName\": \"remult/remult\",\n    \"githubUrl\": \"https://github.com/remult/remult\",\n    \"description\": \"Full-stack CRUD, simplified, with SSOT TypeScript entities\",\n    \"owner\": \"remult\",\n    \"repo\": \"remult\"\n  },\n  \"Reown\": {\n    \"title\": \"Reown\",\n    \"repoName\": \"reown-com/reown-docs\",\n    \"githubUrl\": \"https://github.com/reown-com/reown-docs\",\n    \"description\": \"\",\n    \"owner\": \"reown-com\",\n    \"repo\": \"reown-docs\"\n  },\n  \"Replicate Models Metadata\": {\n    \"title\": \"Replicate Models Metadata\",\n    \"repoName\": \"replicate/all-the-public-replicate-models\",\n    \"githubUrl\": \"https://github.com/replicate/all-the-public-replicate-models\",\n    \"description\": \"📦 Metadata for all the public models on Replicate, bundled up into an npm package.\",\n    \"owner\": \"replicate\",\n    \"repo\": \"all-the-public-replicate-models\"\n  },\n  \"Replicate JavaScript\": {\n    \"title\": \"Replicate JavaScript\",\n    \"repoName\": \"replicate/replicate-javascript\",\n    \"githubUrl\": \"https://github.com/replicate/replicate-javascript\",\n    \"description\": \"Node.js client for Replicate\",\n    \"owner\": \"replicate\",\n    \"repo\": \"replicate-javascript\"\n  },\n  \"ReqnRoll\": {\n    \"title\": \"ReqnRoll\",\n    \"repoName\": \"reqnroll/reqnroll\",\n    \"githubUrl\": \"https://github.com/reqnroll/reqnroll\",\n    \"description\": \"Open-source Cucumber-style BDD test automation framework for .NET.\",\n    \"owner\": \"reqnroll\",\n    \"repo\": \"reqnroll\"\n  },\n  \"ReScript\": {\n    \"title\": \"ReScript\",\n    \"repoName\": \"rescript-lang/rescript-lang.org.git\",\n    \"githubUrl\": \"https://github.com/rescript-lang/rescript-lang.org.git\",\n    \"description\": \"Official documentation website for the ReScript programming language\",\n    \"owner\": \"rescript-lang\",\n    \"repo\": \"rescript-lang.org.git\"\n  },\n  \"React Email\": {\n    \"title\": \"React Email\",\n    \"repoName\": \"resend/react-email\",\n    \"githubUrl\": \"https://github.com/resend/react-email\",\n    \"description\": \"💌 Build and send emails using React\",\n    \"owner\": \"resend\",\n    \"repo\": \"react-email\"\n  },\n  \"Resend Node.js SDK\": {\n    \"title\": \"Resend Node.js SDK\",\n    \"repoName\": \"resend/resend-node\",\n    \"githubUrl\": \"https://github.com/resend/resend-node\",\n    \"description\": \"Resend's Official Node.js SDK\",\n    \"owner\": \"resend\",\n    \"repo\": \"resend-node\"\n  },\n  \"Rest Assured\": {\n    \"title\": \"Rest Assured\",\n    \"repoName\": \"rest-assured/rest-assured\",\n    \"githubUrl\": \"https://github.com/rest-assured/rest-assured\",\n    \"description\": \"Java DSL for easy testing of REST services\",\n    \"owner\": \"rest-assured\",\n    \"repo\": \"rest-assured\"\n  },\n  \"Restate\": {\n    \"title\": \"Restate\",\n    \"repoName\": \"restatedev/restate\",\n    \"githubUrl\": \"https://github.com/restatedev/restate\",\n    \"description\": \"Restate is the platform for building resilient applications that tolerate all infrastructure faults w/o the need for a PhD.\",\n    \"owner\": \"restatedev\",\n    \"repo\": \"restate\"\n  },\n  \"Restate SDK\": {\n    \"title\": \"Restate SDK\",\n    \"repoName\": \"restatedev/sdk-python\",\n    \"githubUrl\": \"https://github.com/restatedev/sdk-python\",\n    \"description\": \"Restate SDK for Python\",\n    \"owner\": \"restatedev\",\n    \"repo\": \"sdk-python\"\n  },\n  \"Rest Server\": {\n    \"title\": \"Rest Server\",\n    \"repoName\": \"restic/rest-server\",\n    \"githubUrl\": \"https://github.com/restic/rest-server\",\n    \"description\": \"Rest Server is a high performance HTTP server that implements restic's REST backend API.\",\n    \"owner\": \"restic\",\n    \"repo\": \"rest-server\"\n  },\n  \"Restic\": {\n    \"title\": \"Restic\",\n    \"repoName\": \"restic/restic\",\n    \"githubUrl\": \"https://github.com/restic/restic\",\n    \"description\": \"Fast, secure, efficient backup program\",\n    \"owner\": \"restic\",\n    \"repo\": \"restic\"\n  },\n  \"Rete Engine\": {\n    \"title\": \"Rete Engine\",\n    \"repoName\": \"retejs/engine\",\n    \"githubUrl\": \"https://github.com/retejs/engine\",\n    \"description\": \"\",\n    \"owner\": \"retejs\",\n    \"repo\": \"engine\"\n  },\n  \"Rete.js\": {\n    \"title\": \"Rete.js\",\n    \"repoName\": \"retejs/retejs.org\",\n    \"githubUrl\": \"https://github.com/retejs/retejs.org\",\n    \"description\": \"Website for Rete.js 2\",\n    \"owner\": \"retejs\",\n    \"repo\": \"retejs.org\"\n  },\n  \"Retell Python SDK\": {\n    \"title\": \"Retell Python SDK\",\n    \"repoName\": \"retellai/retell-python-sdk\",\n    \"githubUrl\": \"https://github.com/retellai/retell-python-sdk\",\n    \"description\": \"\",\n    \"owner\": \"retellai\",\n    \"repo\": \"retell-python-sdk\"\n  },\n  \"PacketEvents\": {\n    \"title\": \"PacketEvents\",\n    \"repoName\": \"retrooper/packetevents\",\n    \"githubUrl\": \"https://github.com/retrooper/packetevents\",\n    \"description\": \"A powerful networking library for Minecraft packet processing and manipulation.\",\n    \"owner\": \"retrooper\",\n    \"repo\": \"packetevents\"\n  },\n  \"RevenueCat Purchases Flutter\": {\n    \"title\": \"RevenueCat Purchases Flutter\",\n    \"repoName\": \"revenuecat/purchases-flutter\",\n    \"githubUrl\": \"https://github.com/revenuecat/purchases-flutter\",\n    \"description\": \"Flutter plugin for in-app purchases and subscriptions. Supports iOS, macOS and Android.\",\n    \"owner\": \"revenuecat\",\n    \"repo\": \"purchases-flutter\"\n  },\n  \"React Native Purchases\": {\n    \"title\": \"React Native Purchases\",\n    \"repoName\": \"revenuecat/react-native-purchases.git\",\n    \"githubUrl\": \"https://github.com/revenuecat/react-native-purchases.git\",\n    \"description\": \"React Native in-app purchases and subscriptions made easy. Support for iOS and Android.\",\n    \"owner\": \"revenuecat\",\n    \"repo\": \"react-native-purchases.git\"\n  },\n  \"Svelte Gestures\": {\n    \"title\": \"Svelte Gestures\",\n    \"repoName\": \"rezi/svelte-gestures.git\",\n    \"githubUrl\": \"https://github.com/rezi/svelte-gestures.git\",\n    \"description\": \"\",\n    \"owner\": \"rezi\",\n    \"repo\": \"svelte-gestures.git\"\n  },\n  \"Twistail\": {\n    \"title\": \"Twistail\",\n    \"repoName\": \"riipandi/twistail\",\n    \"githubUrl\": \"https://github.com/riipandi/twistail\",\n    \"description\": \"Modular and extensible React UI components powered by Radix UI, Tailwind CSS, and Tailwind Variants.\",\n    \"owner\": \"riipandi\",\n    \"repo\": \"twistail\"\n  },\n  \"GraphRAG Hybrid\": {\n    \"title\": \"GraphRAG Hybrid\",\n    \"repoName\": \"rileylemm/graphrag-hybrid\",\n    \"githubUrl\": \"https://github.com/rileylemm/graphrag-hybrid\",\n    \"description\": \"Hybrid Neo4j/Qdrant retrieval system for structured Markdown documentation with YAML frontmatter. Combines graph relationships and vector search for enhanced document retrieval, with built-in MCP integration for AI assistant platforms.\",\n    \"owner\": \"rileylemm\",\n    \"repo\": \"graphrag-hybrid\"\n  },\n  \"Mapperly\": {\n    \"title\": \"Mapperly\",\n    \"repoName\": \"riok/mapperly\",\n    \"githubUrl\": \"https://github.com/riok/mapperly\",\n    \"description\": \"A .NET source generator for generating object mappings. No runtime reflection.\",\n    \"owner\": \"riok\",\n    \"repo\": \"mapperly\"\n  },\n  \"Rive React\": {\n    \"title\": \"Rive React\",\n    \"repoName\": \"rive-app/rive-react\",\n    \"githubUrl\": \"https://github.com/rive-app/rive-react\",\n    \"description\": \"React runtime for Rive\",\n    \"owner\": \"rive-app\",\n    \"repo\": \"rive-react\"\n  },\n  \"Rive Wasm\": {\n    \"title\": \"Rive Wasm\",\n    \"repoName\": \"rive-app/rive-wasm\",\n    \"githubUrl\": \"https://github.com/rive-app/rive-wasm\",\n    \"description\": \"Wasm/JS runtime for Rive\",\n    \"owner\": \"rive-app\",\n    \"repo\": \"rive-wasm\"\n  },\n  \"Mapbox React Native\": {\n    \"title\": \"Mapbox React Native\",\n    \"repoName\": \"rnmapbox/maps\",\n    \"githubUrl\": \"https://github.com/rnmapbox/maps\",\n    \"description\": \"A Mapbox react native module for creating custom maps\",\n    \"owner\": \"rnmapbox\",\n    \"repo\": \"maps\"\n  },\n  \"Legends Browser\": {\n    \"title\": \"Legends Browser\",\n    \"repoName\": \"robertjanetzko/legendsbrowser2\",\n    \"githubUrl\": \"https://github.com/robertjanetzko/legendsbrowser2\",\n    \"description\": \"Legends Browser is an multi-platform, open source legends viewer for dwarf fortress 0.47.\",\n    \"owner\": \"robertjanetzko\",\n    \"repo\": \"legendsbrowser2\"\n  },\n  \"Roblox-TS\": {\n    \"title\": \"Roblox-TS\",\n    \"repoName\": \"roblox-ts/roblox-ts.com\",\n    \"githubUrl\": \"https://github.com/roblox-ts/roblox-ts.com\",\n    \"description\": \"The roblox-ts website\",\n    \"owner\": \"roblox-ts\",\n    \"repo\": \"roblox-ts.com\"\n  },\n  \"Roblox Creator\": {\n    \"title\": \"Roblox Creator\",\n    \"repoName\": \"roblox/creator-docs\",\n    \"githubUrl\": \"https://github.com/roblox/creator-docs\",\n    \"description\": \"Open Source Creator Documentation\",\n    \"owner\": \"roblox\",\n    \"repo\": \"creator-docs\"\n  },\n  \"Rodux\": {\n    \"title\": \"Rodux\",\n    \"repoName\": \"roblox/rodux\",\n    \"githubUrl\": \"https://github.com/roblox/rodux\",\n    \"description\": \"A state management library for Roblox Lua inspired by Redux\",\n    \"owner\": \"roblox\",\n    \"repo\": \"rodux\"\n  },\n  \"RF-DETR\": {\n    \"title\": \"RF-DETR\",\n    \"repoName\": \"roboflow/rf-detr\",\n    \"githubUrl\": \"https://github.com/roboflow/rf-detr\",\n    \"description\": \"RF-DETR is a real-time object detection model architecture developed by Roboflow, SOTA on COCO & designed for fine-tuning.\",\n    \"owner\": \"roboflow\",\n    \"repo\": \"rf-detr\"\n  },\n  \"Supervision\": {\n    \"title\": \"Supervision\",\n    \"repoName\": \"roboflow/supervision\",\n    \"githubUrl\": \"https://github.com/roboflow/supervision\",\n    \"description\": \"We write your reusable computer vision tools. 💜\",\n    \"owner\": \"roboflow\",\n    \"repo\": \"supervision\"\n  },\n  \"Trackers\": {\n    \"title\": \"Trackers\",\n    \"repoName\": \"roboflow/trackers\",\n    \"githubUrl\": \"https://github.com/roboflow/trackers\",\n    \"description\": \"A unified library for object tracking featuring clean room re-implementations of leading multi-object tracking algorithms\",\n    \"owner\": \"roboflow\",\n    \"repo\": \"trackers\"\n  },\n  \"Mary\": {\n    \"title\": \"Mary\",\n    \"repoName\": \"robsontenorio/mary\",\n    \"githubUrl\": \"https://github.com/robsontenorio/mary\",\n    \"description\": \"Gorgeous UI components for Livewire powered by daisyUI and Tailwind\",\n    \"owner\": \"robsontenorio\",\n    \"repo\": \"mary\"\n  },\n  \"Replicache\": {\n    \"title\": \"Replicache\",\n    \"repoName\": \"rocicorp/mono\",\n    \"githubUrl\": \"https://github.com/rocicorp/mono\",\n    \"description\": \"99% of Queries in Zero Milliseconds\",\n    \"owner\": \"rocicorp\",\n    \"repo\": \"mono\"\n  },\n  \"Zero\": {\n    \"title\": \"Zero\",\n    \"repoName\": \"rocicorp/zero-docs\",\n    \"githubUrl\": \"https://github.com/rocicorp/zero-docs\",\n    \"description\": \"Documentation for Zero\",\n    \"owner\": \"rocicorp\",\n    \"repo\": \"zero-docs\"\n  },\n  \"Rocket.Chat\": {\n    \"title\": \"Rocket.Chat\",\n    \"repoName\": \"rocketchat/docs\",\n    \"githubUrl\": \"https://github.com/rocketchat/docs\",\n    \"description\": \"Rocket.Chat's user documentation.\",\n    \"owner\": \"rocketchat\",\n    \"repo\": \"docs\"\n  },\n  \"Signals Dart\": {\n    \"title\": \"Signals Dart\",\n    \"repoName\": \"rodydavis/signals.dart\",\n    \"githubUrl\": \"https://github.com/rodydavis/signals.dart\",\n    \"description\": \"Reactive programming made simple for Dart and Flutter\",\n    \"owner\": \"rodydavis\",\n    \"repo\": \"signals.dart\"\n  },\n  \"Optics\": {\n    \"title\": \"Optics\",\n    \"repoName\": \"rolemodel/optics\",\n    \"githubUrl\": \"https://github.com/rolemodel/optics\",\n    \"description\": \"Optics, a RoleModel Design System is a CSS package that provides base styles and components that can be integrated and customized in a variety of projects.\",\n    \"owner\": \"rolemodel\",\n    \"repo\": \"optics\"\n  },\n  \"Rollup\": {\n    \"title\": \"Rollup\",\n    \"repoName\": \"rollup/rollup\",\n    \"githubUrl\": \"https://github.com/rollup/rollup\",\n    \"description\": \"Next-generation ES module bundler\",\n    \"owner\": \"rollup\",\n    \"repo\": \"rollup\"\n  },\n  \"AsyncSSH\": {\n    \"title\": \"AsyncSSH\",\n    \"repoName\": \"ronf/asyncssh\",\n    \"githubUrl\": \"https://github.com/ronf/asyncssh\",\n    \"description\": \"AsyncSSH is a Python package which provides an asynchronous client and server implementation of the SSHv2 protocol on top of the Python asyncio framework.\",\n    \"owner\": \"ronf\",\n    \"repo\": \"asyncssh\"\n  },\n  \"RN Primitives\": {\n    \"title\": \"RN Primitives\",\n    \"repoName\": \"roninoss/rn-primitives\",\n    \"githubUrl\": \"https://github.com/roninoss/rn-primitives\",\n    \"description\": \"Style-agnostic, accessible React Native components for iOS, Android, and Web\",\n    \"owner\": \"roninoss\",\n    \"repo\": \"rn-primitives\"\n  },\n  \"Roo Code\": {\n    \"title\": \"Roo Code\",\n    \"repoName\": \"roovetgit/roo-code.git\",\n    \"githubUrl\": \"https://github.com/roovetgit/roo-code.git\",\n    \"description\": \"Roo Code (prev. Roo Cline) gives you a whole dev team of AI agents in your code editor.\",\n    \"owner\": \"roovetgit\",\n    \"repo\": \"roo-code.git\"\n  },\n  \"Armok Vision\": {\n    \"title\": \"Armok Vision\",\n    \"repoName\": \"rosarymala/armok-vision\",\n    \"githubUrl\": \"https://github.com/rosarymala/armok-vision\",\n    \"description\": \"A 3d realtime visualizer for Dwarf Fortress\",\n    \"owner\": \"rosarymala\",\n    \"repo\": \"armok-vision\"\n  },\n  \"FFMpegCore\": {\n    \"title\": \"FFMpegCore\",\n    \"repoName\": \"rosenbjerg/ffmpegcore\",\n    \"githubUrl\": \"https://github.com/rosenbjerg/ffmpegcore\",\n    \"description\": \"A .NET FFMpeg/FFProbe wrapper for easily integrating media analysis and conversion into your C# applications\",\n    \"owner\": \"rosenbjerg\",\n    \"repo\": \"ffmpegcore\"\n  },\n  \"MCP Server Asana\": {\n    \"title\": \"MCP Server Asana\",\n    \"repoName\": \"roychri/mcp-server-asana\",\n    \"githubUrl\": \"https://github.com/roychri/mcp-server-asana\",\n    \"description\": \"\",\n    \"owner\": \"roychri\",\n    \"repo\": \"mcp-server-asana\"\n  },\n  \"Rpy2\": {\n    \"title\": \"Rpy2\",\n    \"repoName\": \"rpy2/rpy2\",\n    \"githubUrl\": \"https://github.com/rpy2/rpy2\",\n    \"description\": \"Interface to use R from Python\",\n    \"owner\": \"rpy2\",\n    \"repo\": \"rpy2\"\n  },\n  \"Flutter Hooks\": {\n    \"title\": \"Flutter Hooks\",\n    \"repoName\": \"rrousselgit/flutter_hooks\",\n    \"githubUrl\": \"https://github.com/rrousselgit/flutter_hooks\",\n    \"description\": \"React hooks for Flutter. Hooks are a new kind of object that manages a Widget life-cycles. They are used to increase code sharing between widgets and as a complete replacement for StatefulWidget.\",\n    \"owner\": \"rrousselgit\",\n    \"repo\": \"flutter_hooks\"\n  },\n  \"Freezed\": {\n    \"title\": \"Freezed\",\n    \"repoName\": \"rrousselgit/freezed\",\n    \"githubUrl\": \"https://github.com/rrousselgit/freezed\",\n    \"description\": \"Code generation for immutable classes that has a simple syntax/API without compromising on the features.\",\n    \"owner\": \"rrousselgit\",\n    \"repo\": \"freezed\"\n  },\n  \"Provider\": {\n    \"title\": \"Provider\",\n    \"repoName\": \"rrousselgit/provider\",\n    \"githubUrl\": \"https://github.com/rrousselgit/provider\",\n    \"description\": \"InheritedWidgets, but simple\",\n    \"owner\": \"rrousselgit\",\n    \"repo\": \"provider\"\n  },\n  \"Riverpod\": {\n    \"title\": \"Riverpod\",\n    \"repoName\": \"rrousselgit/riverpod\",\n    \"githubUrl\": \"https://github.com/rrousselgit/riverpod\",\n    \"description\": \"A reactive caching and data-binding framework.   Riverpod makes working with asynchronous code a breeze.\",\n    \"owner\": \"rrousselgit\",\n    \"repo\": \"riverpod\"\n  },\n  \"Zerolog\": {\n    \"title\": \"Zerolog\",\n    \"repoName\": \"rs/zerolog\",\n    \"githubUrl\": \"https://github.com/rs/zerolog\",\n    \"description\": \"Zero Allocation JSON Logger\",\n    \"owner\": \"rs\",\n    \"repo\": \"zerolog\"\n  },\n  \"Rsbuild Plugin React Router\": {\n    \"title\": \"Rsbuild Plugin React Router\",\n    \"repoName\": \"rspack-contrib/rsbuild-plugin-react-router\",\n    \"githubUrl\": \"https://github.com/rspack-contrib/rsbuild-plugin-react-router\",\n    \"description\": \"A Rsbuild plugin that provides seamless integration with React Router\",\n    \"owner\": \"rspack-contrib\",\n    \"repo\": \"rsbuild-plugin-react-router\"\n  },\n  \"unknown-project:https://github.com/rspack-contrib/rstack-examples\": {\n    \"title\": \"unknown-project:https://github.com/rspack-contrib/rstack-examples\",\n    \"repoName\": \"rspack-contrib/rstack-examples\",\n    \"githubUrl\": \"https://github.com/rspack-contrib/rstack-examples\",\n    \"description\": \"Examples of Rstack, including Rspack, Rsbuild, Rspress, Rsdoctor.\",\n    \"owner\": \"rspack-contrib\",\n    \"repo\": \"rstack-examples\"\n  },\n  \"RSpec\": {\n    \"title\": \"RSpec\",\n    \"repoName\": \"rspec/rspec\",\n    \"githubUrl\": \"https://github.com/rspec/rspec\",\n    \"description\": \"The RSpec monorepo\",\n    \"owner\": \"rspec\",\n    \"repo\": \"rspec\"\n  },\n  \"R Manuals\": {\n    \"title\": \"R Manuals\",\n    \"repoName\": \"rstudio/r-manuals\",\n    \"githubUrl\": \"https://github.com/rstudio/r-manuals\",\n    \"description\": \"A re-styled version of the R manuals\",\n    \"owner\": \"rstudio\",\n    \"repo\": \"r-manuals\"\n  },\n  \"Grape\": {\n    \"title\": \"Grape\",\n    \"repoName\": \"ruby-grape/grape\",\n    \"githubUrl\": \"https://github.com/ruby-grape/grape\",\n    \"description\": \"An opinionated framework for creating REST-like APIs in Ruby.\",\n    \"owner\": \"ruby-grape\",\n    \"repo\": \"grape\"\n  },\n  \"FlashRAG\": {\n    \"title\": \"FlashRAG\",\n    \"repoName\": \"ruc-nlpir/flashrag\",\n    \"githubUrl\": \"https://github.com/ruc-nlpir/flashrag\",\n    \"description\": \"⚡FlashRAG: A Python Toolkit for Efficient RAG Research (WWW2025 Resource)\",\n    \"owner\": \"ruc-nlpir\",\n    \"repo\": \"flashrag\"\n  },\n  \"LlamaIndex\": {\n    \"title\": \"LlamaIndex\",\n    \"repoName\": \"run-llama/llamaindexts.git\",\n    \"githubUrl\": \"https://github.com/run-llama/llamaindexts.git\",\n    \"description\": \"Data framework for your LLM applications. Focus on server side solution\",\n    \"owner\": \"run-llama\",\n    \"repo\": \"llamaindexts.git\"\n  },\n  \"Runware SDK JS\": {\n    \"title\": \"Runware SDK JS\",\n    \"repoName\": \"runware/sdk-js\",\n    \"githubUrl\": \"https://github.com/runware/sdk-js\",\n    \"description\": \"Javascript SDK for integrating the runware.ai web sockets API\",\n    \"owner\": \"runware\",\n    \"repo\": \"sdk-js\"\n  },\n  \"Rust Programming Language\": {\n    \"title\": \"Rust Programming Language\",\n    \"repoName\": \"rust-lang/book\",\n    \"githubUrl\": \"https://github.com/rust-lang/book\",\n    \"description\": \"The Rust Programming Language\",\n    \"owner\": \"rust-lang\",\n    \"repo\": \"book\"\n  },\n  \"Cargo\": {\n    \"title\": \"Cargo\",\n    \"repoName\": \"rust-lang/cargo.git\",\n    \"githubUrl\": \"https://github.com/rust-lang/cargo.git\",\n    \"description\": \"The Rust package manager\",\n    \"owner\": \"rust-lang\",\n    \"repo\": \"cargo.git\"\n  },\n  \"Docs.rs\": {\n    \"title\": \"Docs.rs\",\n    \"repoName\": \"rust-lang/docs.rs\",\n    \"githubUrl\": \"https://github.com/rust-lang/docs.rs\",\n    \"description\": \"crates.io documentation generator\",\n    \"owner\": \"rust-lang\",\n    \"repo\": \"docs.rs\"\n  },\n  \"Rust\": {\n    \"title\": \"Rust\",\n    \"repoName\": \"rust-lang/rust\",\n    \"githubUrl\": \"https://github.com/rust-lang/rust\",\n    \"description\": \"Empowering everyone to build reliable and efficient software.\",\n    \"owner\": \"rust-lang\",\n    \"repo\": \"rust\"\n  },\n  \"Rust by Example\": {\n    \"title\": \"Rust by Example\",\n    \"repoName\": \"rust-lang/rust-by-example.git\",\n    \"githubUrl\": \"https://github.com/rust-lang/rust-by-example.git\",\n    \"description\": \"Learn Rust with examples (Live code editor included)\",\n    \"owner\": \"rust-lang\",\n    \"repo\": \"rust-by-example.git\"\n  },\n  \"Rand\": {\n    \"title\": \"Rand\",\n    \"repoName\": \"rust-random/rand\",\n    \"githubUrl\": \"https://github.com/rust-random/rand\",\n    \"description\": \"A Rust library for random number generation.\",\n    \"owner\": \"rust-random\",\n    \"repo\": \"rand\"\n  },\n  \"Awesome Rust\": {\n    \"title\": \"Awesome Rust\",\n    \"repoName\": \"rust-unofficial/awesome-rust\",\n    \"githubUrl\": \"https://github.com/rust-unofficial/awesome-rust\",\n    \"description\": \"A curated list of Rust code and resources.\",\n    \"owner\": \"rust-unofficial\",\n    \"repo\": \"awesome-rust\"\n  },\n  \"Rustls\": {\n    \"title\": \"Rustls\",\n    \"repoName\": \"rustls/rustls\",\n    \"githubUrl\": \"https://github.com/rustls/rustls\",\n    \"description\": \"A modern TLS library in Rust\",\n    \"owner\": \"rustls\",\n    \"repo\": \"rustls\"\n  },\n  \"Wasm Bindgen\": {\n    \"title\": \"Wasm Bindgen\",\n    \"repoName\": \"rustwasm/wasm-bindgen\",\n    \"githubUrl\": \"https://github.com/rustwasm/wasm-bindgen\",\n    \"description\": \"Facilitating high-level interactions between Wasm modules and JavaScript\",\n    \"owner\": \"rustwasm\",\n    \"repo\": \"wasm-bindgen\"\n  },\n  \"PyTorch Scatter\": {\n    \"title\": \"PyTorch Scatter\",\n    \"repoName\": \"rusty1s/pytorch_scatter\",\n    \"githubUrl\": \"https://github.com/rusty1s/pytorch_scatter\",\n    \"description\": \"PyTorch Extension Library of Optimized Scatter Operations\",\n    \"owner\": \"rusty1s\",\n    \"repo\": \"pytorch_scatter\"\n  },\n  \"SynthLang\": {\n    \"title\": \"SynthLang\",\n    \"repoName\": \"ruvnet/synthlang\",\n    \"githubUrl\": \"https://github.com/ruvnet/synthlang\",\n    \"description\": \"SynthLang is a hyper-efficient prompt language designed to optimize interactions with Large Language Models (LLMs) like GPT-4o by leveraging logographical scripts and symbolic constructs.\",\n    \"owner\": \"ruvnet\",\n    \"repo\": \"synthlang\"\n  },\n  \"Svelte Fancy Darkmode\": {\n    \"title\": \"Svelte Fancy Darkmode\",\n    \"repoName\": \"ryoppippi/svelte-fancy-darkmode\",\n    \"githubUrl\": \"https://github.com/ryoppippi/svelte-fancy-darkmode\",\n    \"description\": \"svelte-fancy-darkmode.pages.dev\",\n    \"owner\": \"ryoppippi\",\n    \"repo\": \"svelte-fancy-darkmode\"\n  },\n  \"Unplugin Typia\": {\n    \"title\": \"Unplugin Typia\",\n    \"repoName\": \"ryoppippi/unplugin-typia\",\n    \"githubUrl\": \"https://github.com/ryoppippi/unplugin-typia\",\n    \"description\": \"unplugin for Typia with an extra Bun plugin 🫶\",\n    \"owner\": \"ryoppippi\",\n    \"repo\": \"unplugin-typia\"\n  },\n  \"DaisyUI\": {\n    \"title\": \"DaisyUI\",\n    \"repoName\": \"saadeghi/daisyui\",\n    \"githubUrl\": \"https://github.com/saadeghi/daisyui\",\n    \"description\": \"🌼 🌼 🌼 🌼 🌼  The most popular, free and open-source Tailwind CSS component library\",\n    \"owner\": \"saadeghi\",\n    \"repo\": \"daisyui\"\n  },\n  \"DiceUI\": {\n    \"title\": \"DiceUI\",\n    \"repoName\": \"sadmann7/diceui\",\n    \"githubUrl\": \"https://github.com/sadmann7/diceui\",\n    \"description\": \"A collection of composable, unstyled UI primitives for building accessible web applications.\",\n    \"owner\": \"sadmann7\",\n    \"repo\": \"diceui\"\n  },\n  \"Sing Box\": {\n    \"title\": \"Sing Box\",\n    \"repoName\": \"sagernet/sing-box\",\n    \"githubUrl\": \"https://github.com/sagernet/sing-box\",\n    \"description\": \"The universal proxy platform\",\n    \"owner\": \"sagernet\",\n    \"repo\": \"sing-box\"\n  },\n  \"System.css\": {\n    \"title\": \"System.css\",\n    \"repoName\": \"sakofchit/system.css\",\n    \"githubUrl\": \"https://github.com/sakofchit/system.css\",\n    \"description\": \"A design system for building retro Apple interfaces\",\n    \"owner\": \"sakofchit\",\n    \"repo\": \"system.css\"\n  },\n  \"Pyncthing\": {\n    \"title\": \"Pyncthing\",\n    \"repoName\": \"salamandar/pyncthing\",\n    \"githubUrl\": \"https://github.com/salamandar/pyncthing\",\n    \"description\": \"A REST API client for Synchting\",\n    \"owner\": \"salamandar\",\n    \"repo\": \"pyncthing\"\n  },\n  \"React Native Android Widget\": {\n    \"title\": \"React Native Android Widget\",\n    \"repoName\": \"saleksovski/react-native-android-widget\",\n    \"githubUrl\": \"https://github.com/saleksovski/react-native-android-widget\",\n    \"description\": \"Build Android Widgets with React Native\",\n    \"owner\": \"saleksovski\",\n    \"repo\": \"react-native-android-widget\"\n  },\n  \"LWC\": {\n    \"title\": \"LWC\",\n    \"repoName\": \"salesforce/lwc\",\n    \"githubUrl\": \"https://github.com/salesforce/lwc\",\n    \"description\": \"⚡️ LWC - A Blazing Fast, Enterprise-Grade Web Components Foundation\",\n    \"owner\": \"salesforce\",\n    \"repo\": \"lwc\"\n  },\n  \"Saloon\": {\n    \"title\": \"Saloon\",\n    \"repoName\": \"sammyjo20/saloon-docs\",\n    \"githubUrl\": \"https://github.com/sammyjo20/saloon-docs\",\n    \"description\": \"Documentation for Saloon\",\n    \"owner\": \"sammyjo20\",\n    \"repo\": \"saloon-docs\"\n  },\n  \"Salvo\": {\n    \"title\": \"Salvo\",\n    \"repoName\": \"salvo-rs/salvo\",\n    \"githubUrl\": \"https://github.com/salvo-rs/salvo\",\n    \"description\": \"A powerful web framework built with a simplified design.\",\n    \"owner\": \"salvo-rs\",\n    \"repo\": \"salvo\"\n  },\n  \"Lo\": {\n    \"title\": \"Lo\",\n    \"repoName\": \"samber/lo\",\n    \"githubUrl\": \"https://github.com/samber/lo\",\n    \"description\": \"💥  A Lodash-style Go library based on Go 1.18+ Generics (map, filter, contains, find...)\",\n    \"owner\": \"samber\",\n    \"repo\": \"lo\"\n  },\n  \"Typia\": {\n    \"title\": \"Typia\",\n    \"repoName\": \"samchon/typia\",\n    \"githubUrl\": \"https://github.com/samchon/typia\",\n    \"description\": \"Super-fast/easy runtime validators and serializers via transformation\",\n    \"owner\": \"samchon\",\n    \"repo\": \"typia\"\n  },\n  \"Sanic\": {\n    \"title\": \"Sanic\",\n    \"repoName\": \"sanic-org/sanic-guide\",\n    \"githubUrl\": \"https://github.com/sanic-org/sanic-guide\",\n    \"description\": \"Frontpage and user guide for Sanic\",\n    \"owner\": \"sanic-org\",\n    \"repo\": \"sanic-guide\"\n  },\n  \"GROQ\": {\n    \"title\": \"GROQ\",\n    \"repoName\": \"sanity-io/groq\",\n    \"githubUrl\": \"https://github.com/sanity-io/groq\",\n    \"description\": \"Specification for GROQ - The Query Language for JSON\",\n    \"owner\": \"sanity-io\",\n    \"repo\": \"groq\"\n  },\n  \"Sanity Studio\": {\n    \"title\": \"Sanity Studio\",\n    \"repoName\": \"sanity-io/sanity\",\n    \"githubUrl\": \"https://github.com/sanity-io/sanity\",\n    \"description\": \"Sanity Studio – Rapidly configure content workspaces powered by structured content\",\n    \"owner\": \"sanity-io\",\n    \"repo\": \"sanity\"\n  },\n  \"CosmicFishPie\": {\n    \"title\": \"CosmicFishPie\",\n    \"repoName\": \"santiagocasas/cosmicfishpie\",\n    \"githubUrl\": \"https://github.com/santiagocasas/cosmicfishpie\",\n    \"description\": \"CosmicFishPie: Python Fisher Matrix code for Cosmological probes\",\n    \"owner\": \"santiagocasas\",\n    \"repo\": \"cosmicfishpie\"\n  },\n  \"SAP Jenkins Library\": {\n    \"title\": \"SAP Jenkins Library\",\n    \"repoName\": \"sap/jenkins-library\",\n    \"githubUrl\": \"https://github.com/sap/jenkins-library\",\n    \"description\": \"Jenkins shared library for Continuous Delivery pipelines.\",\n    \"owner\": \"sap\",\n    \"repo\": \"jenkins-library\"\n  },\n  \"Project Piper Action\": {\n    \"title\": \"Project Piper Action\",\n    \"repoName\": \"sap/project-piper-action\",\n    \"githubUrl\": \"https://github.com/sap/project-piper-action\",\n    \"description\": \"CI/CD tooling for the SAP Ecosystem, integrated with GitHub Actions\",\n    \"owner\": \"sap\",\n    \"repo\": \"project-piper-action\"\n  },\n  \"SAP Style Guides\": {\n    \"title\": \"SAP Style Guides\",\n    \"repoName\": \"sap/styleguides\",\n    \"githubUrl\": \"https://github.com/sap/styleguides\",\n    \"description\": \"This repository provides SAP style guides for coding and coding-related topics.\",\n    \"owner\": \"sap\",\n    \"repo\": \"styleguides\"\n  },\n  \"UI5 Web Components\": {\n    \"title\": \"UI5 Web Components\",\n    \"repoName\": \"sap/ui5-webcomponents\",\n    \"githubUrl\": \"https://github.com/sap/ui5-webcomponents\",\n    \"description\": \"UI5 Web Components - the enterprise-flavored sugar on top of native APIs! Build SAP Fiori user interfaces with the technology of your choice.\",\n    \"owner\": \"sap\",\n    \"repo\": \"ui5-webcomponents\"\n  },\n  \"Sapphire\": {\n    \"title\": \"Sapphire\",\n    \"repoName\": \"sapphiredev/docs\",\n    \"githubUrl\": \"https://github.com/sapphiredev/docs\",\n    \"description\": \"Documentation files for the Sapphire website\",\n    \"owner\": \"sapphiredev\",\n    \"repo\": \"docs\"\n  },\n  \"Sass\": {\n    \"title\": \"Sass\",\n    \"repoName\": \"sass/sass-site\",\n    \"githubUrl\": \"https://github.com/sass/sass-site\",\n    \"description\": \"Sass Website\",\n    \"owner\": \"sass\",\n    \"repo\": \"sass-site\"\n  },\n  \"Danet\": {\n    \"title\": \"Danet\",\n    \"repoName\": \"savory/docs\",\n    \"githubUrl\": \"https://github.com/savory/docs\",\n    \"description\": \"Danet documentation\",\n    \"owner\": \"savory\",\n    \"repo\": \"docs\"\n  },\n  \"Scaffold-ETH 2\": {\n    \"title\": \"Scaffold-ETH 2\",\n    \"repoName\": \"scaffold-eth/se-2-docs\",\n    \"githubUrl\": \"https://github.com/scaffold-eth/se-2-docs\",\n    \"description\": \"Documentation site for Scaffold-ETH 2\",\n    \"owner\": \"scaffold-eth\",\n    \"repo\": \"se-2-docs\"\n  },\n  \"Scala.js\": {\n    \"title\": \"Scala.js\",\n    \"repoName\": \"scala-js/scala-js-website\",\n    \"githubUrl\": \"https://github.com/scala-js/scala-js-website\",\n    \"description\": \"Source for https://www.scala-js.org/\",\n    \"owner\": \"scala-js\",\n    \"repo\": \"scala-js-website\"\n  },\n  \"Scala\": {\n    \"title\": \"Scala\",\n    \"repoName\": \"scala/docs.scala-lang\",\n    \"githubUrl\": \"https://github.com/scala/docs.scala-lang\",\n    \"description\": \"The Scala Documentation website\",\n    \"owner\": \"scala\",\n    \"repo\": \"docs.scala-lang\"\n  },\n  \"Schedule X\": {\n    \"title\": \"Schedule X\",\n    \"repoName\": \"schedule-x/schedule-x\",\n    \"githubUrl\": \"https://github.com/schedule-x/schedule-x\",\n    \"description\": \"JavaScript event calendar. Modern alternative to fullcalendar and react-big-calendar.\",\n    \"owner\": \"schedule-x\",\n    \"repo\": \"schedule-x\"\n  },\n  \"NPoco\": {\n    \"title\": \"NPoco\",\n    \"repoName\": \"schotime/npoco\",\n    \"githubUrl\": \"https://github.com/schotime/npoco\",\n    \"description\": \"Simple microORM that maps the results of a query onto a POCO object. Project based on Schotime's branch of PetaPoco\",\n    \"owner\": \"schotime\",\n    \"repo\": \"npoco\"\n  },\n  \"P2.js\": {\n    \"title\": \"P2.js\",\n    \"repoName\": \"schteppe/p2.js\",\n    \"githubUrl\": \"https://github.com/schteppe/p2.js\",\n    \"description\": \"JavaScript 2D physics library\",\n    \"owner\": \"schteppe\",\n    \"repo\": \"p2.js\"\n  },\n  \"Dart Mappable\": {\n    \"title\": \"Dart Mappable\",\n    \"repoName\": \"schultek/dart_mappable\",\n    \"githubUrl\": \"https://github.com/schultek/dart_mappable\",\n    \"description\": \"Improved json serialization and data classes with full support for generics, inheritance, customization and more.\",\n    \"owner\": \"schultek\",\n    \"repo\": \"dart_mappable\"\n  },\n  \"Type Plus\": {\n    \"title\": \"Type Plus\",\n    \"repoName\": \"schultek/type_plus\",\n    \"githubUrl\": \"https://github.com/schultek/type_plus\",\n    \"description\": \"Give your types superpowers and spice up your generics.\",\n    \"owner\": \"schultek\",\n    \"repo\": \"type_plus\"\n  },\n  \"Awkward\": {\n    \"title\": \"Awkward\",\n    \"repoName\": \"scikit-hep/awkward\",\n    \"githubUrl\": \"https://github.com/scikit-hep/awkward\",\n    \"description\": \"Manipulate JSON-like data with NumPy-like idioms.\",\n    \"owner\": \"scikit-hep\",\n    \"repo\": \"awkward\"\n  },\n  \"Scikit-HEP Vector\": {\n    \"title\": \"Scikit-HEP Vector\",\n    \"repoName\": \"scikit-hep/vector\",\n    \"githubUrl\": \"https://github.com/scikit-hep/vector\",\n    \"description\": \"Vector classes and utilities\",\n    \"owner\": \"scikit-hep\",\n    \"repo\": \"vector\"\n  },\n  \"Scikit-learn\": {\n    \"title\": \"Scikit-learn\",\n    \"repoName\": \"scikit-learn/scikit-learn\",\n    \"githubUrl\": \"https://github.com/scikit-learn/scikit-learn\",\n    \"description\": \"scikit-learn: machine learning in Python\",\n    \"owner\": \"scikit-learn\",\n    \"repo\": \"scikit-learn\"\n  },\n  \"SciML Optimization\": {\n    \"title\": \"SciML Optimization\",\n    \"repoName\": \"sciml/optimization.jl\",\n    \"githubUrl\": \"https://github.com/sciml/optimization.jl\",\n    \"description\": \"Mathematical Optimization in Julia. Local, global, gradient-based and derivative-free. Linear, Quadratic, Convex, Mixed-Integer, and Nonlinear Optimization in one simple, fast, and differentiable interface.\",\n    \"owner\": \"sciml\",\n    \"repo\": \"optimization.jl\"\n  },\n  \"R2R\": {\n    \"title\": \"R2R\",\n    \"repoName\": \"sciphi-ai/r2r.git\",\n    \"githubUrl\": \"https://github.com/sciphi-ai/r2r.git\",\n    \"description\": \"SoTA production-ready AI retrieval system. Agentic Retrieval-Augmented Generation (RAG) with a RESTful API.\",\n    \"owner\": \"sciphi-ai\",\n    \"repo\": \"r2r.git\"\n  },\n  \"Scipp\": {\n    \"title\": \"Scipp\",\n    \"repoName\": \"scipp/scipp\",\n    \"githubUrl\": \"https://github.com/scipp/scipp\",\n    \"description\": \"Multi-dimensional data arrays with labeled dimensions\",\n    \"owner\": \"scipp\",\n    \"repo\": \"scipp\"\n  },\n  \"SciPy\": {\n    \"title\": \"SciPy\",\n    \"repoName\": \"scipy/scipy\",\n    \"githubUrl\": \"https://github.com/scipy/scipy\",\n    \"description\": \"SciPy library main repository\",\n    \"owner\": \"scipy\",\n    \"repo\": \"scipy\"\n  },\n  \"Extruct\": {\n    \"title\": \"Extruct\",\n    \"repoName\": \"scrapinghub/extruct\",\n    \"githubUrl\": \"https://github.com/scrapinghub/extruct\",\n    \"description\": \"Extract embedded metadata from HTML markup\",\n    \"owner\": \"scrapinghub\",\n    \"repo\": \"extruct\"\n  },\n  \"Scrapy\": {\n    \"title\": \"Scrapy\",\n    \"repoName\": \"scrapy/scrapy\",\n    \"githubUrl\": \"https://github.com/scrapy/scrapy\",\n    \"description\": \"Scrapy, a fast high-level web crawling & scraping framework for Python.\",\n    \"owner\": \"scrapy\",\n    \"repo\": \"scrapy\"\n  },\n  \"Scrapybara\": {\n    \"title\": \"Scrapybara\",\n    \"repoName\": \"scrapybara/scrapybara-python\",\n    \"githubUrl\": \"https://github.com/scrapybara/scrapybara-python\",\n    \"description\": \"Scrapybara Python SDK\",\n    \"owner\": \"scrapybara\",\n    \"repo\": \"scrapybara-python\"\n  },\n  \"Anndata\": {\n    \"title\": \"Anndata\",\n    \"repoName\": \"scverse/anndata\",\n    \"githubUrl\": \"https://github.com/scverse/anndata\",\n    \"description\": \"Annotated data.\",\n    \"owner\": \"scverse\",\n    \"repo\": \"anndata\"\n  },\n  \"Scanpy\": {\n    \"title\": \"Scanpy\",\n    \"repoName\": \"scverse/scanpy\",\n    \"githubUrl\": \"https://github.com/scverse/scanpy\",\n    \"description\": \"Single-cell analysis in Python. Scales to >100M cells.\",\n    \"owner\": \"scverse\",\n    \"repo\": \"scanpy\"\n  },\n  \"scvi-tools\": {\n    \"title\": \"scvi-tools\",\n    \"repoName\": \"scverse/scvi-tools\",\n    \"githubUrl\": \"https://github.com/scverse/scvi-tools\",\n    \"description\": \"Deep probabilistic analysis of single-cell and spatial omics data\",\n    \"owner\": \"scverse\",\n    \"repo\": \"scvi-tools\"\n  },\n  \"Scylla CDC Rust\": {\n    \"title\": \"Scylla CDC Rust\",\n    \"repoName\": \"scylladb/scylla-cdc-rust\",\n    \"githubUrl\": \"https://github.com/scylladb/scylla-cdc-rust\",\n    \"description\": \"\",\n    \"owner\": \"scylladb\",\n    \"repo\": \"scylla-cdc-rust\"\n  },\n  \"Scylla Rust Driver\": {\n    \"title\": \"Scylla Rust Driver\",\n    \"repoName\": \"scylladb/scylla-rust-driver\",\n    \"githubUrl\": \"https://github.com/scylladb/scylla-rust-driver\",\n    \"description\": \"Async CQL driver for Rust, optimized for ScyllaDB!\",\n    \"owner\": \"scylladb\",\n    \"repo\": \"scylla-rust-driver\"\n  },\n  \"Scylla Rust UDF\": {\n    \"title\": \"Scylla Rust UDF\",\n    \"repoName\": \"scylladb/scylla-rust-udf\",\n    \"githubUrl\": \"https://github.com/scylladb/scylla-rust-udf\",\n    \"description\": \"\",\n    \"owner\": \"scylladb\",\n    \"repo\": \"scylla-rust-udf\"\n  },\n  \"Reqwest\": {\n    \"title\": \"Reqwest\",\n    \"repoName\": \"seanmonstar/reqwest\",\n    \"githubUrl\": \"https://github.com/seanmonstar/reqwest\",\n    \"description\": \"An easy and powerful Rust HTTP Client\",\n    \"owner\": \"seanmonstar\",\n    \"repo\": \"reqwest\"\n  },\n  \"SeaOrm\": {\n    \"title\": \"SeaOrm\",\n    \"repoName\": \"seaql/sea-orm\",\n    \"githubUrl\": \"https://github.com/seaql/sea-orm\",\n    \"description\": \"🐚 An async & dynamic ORM for Rust\",\n    \"owner\": \"seaql\",\n    \"repo\": \"sea-orm\"\n  },\n  \"SearXNG\": {\n    \"title\": \"SearXNG\",\n    \"repoName\": \"searxng/searxng\",\n    \"githubUrl\": \"https://github.com/searxng/searxng\",\n    \"description\": \"SearXNG is a free internet metasearch engine which aggregates results from various search services and databases. Users are neither tracked nor profiled.\",\n    \"owner\": \"searxng\",\n    \"repo\": \"searxng\"\n  },\n  \"Hiqlite\": {\n    \"title\": \"Hiqlite\",\n    \"repoName\": \"sebadob/hiqlite\",\n    \"githubUrl\": \"https://github.com/sebadob/hiqlite\",\n    \"description\": \"Hiqlite - highly-available, embeddable, raft-based SQLite + cache\",\n    \"owner\": \"sebadob\",\n    \"repo\": \"hiqlite\"\n  },\n  \"React Ace\": {\n    \"title\": \"React Ace\",\n    \"repoName\": \"securingsincity/react-ace\",\n    \"githubUrl\": \"https://github.com/securingsincity/react-ace\",\n    \"description\": \"React Ace Component\",\n    \"owner\": \"securingsincity\",\n    \"repo\": \"react-ace\"\n  },\n  \"Kafka Go\": {\n    \"title\": \"Kafka Go\",\n    \"repoName\": \"segmentio/kafka-go\",\n    \"githubUrl\": \"https://github.com/segmentio/kafka-go\",\n    \"description\": \"Kafka library in Go\",\n    \"owner\": \"segmentio\",\n    \"repo\": \"kafka-go\"\n  },\n  \"Segmind\": {\n    \"title\": \"Segmind\",\n    \"repoName\": \"segmind/segmind-py\",\n    \"githubUrl\": \"https://github.com/segmind/segmind-py\",\n    \"description\": \"Python client for Segmind APIs\",\n    \"owner\": \"segmind\",\n    \"repo\": \"segmind-py\"\n  },\n  \"Select2\": {\n    \"title\": \"Select2\",\n    \"repoName\": \"select2/select2\",\n    \"githubUrl\": \"https://github.com/select2/select2\",\n    \"description\": \"Select2 is a jQuery based replacement for select boxes. It supports searching, remote data sets, and infinite scrolling of results.\",\n    \"owner\": \"select2\",\n    \"repo\": \"select2\"\n  },\n  \"SeleniumBase\": {\n    \"title\": \"SeleniumBase\",\n    \"repoName\": \"seleniumbase/seleniumbase\",\n    \"githubUrl\": \"https://github.com/seleniumbase/seleniumbase\",\n    \"description\": \"Python APIs for web automation, testing, and bypassing bot-detection.\",\n    \"owner\": \"seleniumbase\",\n    \"repo\": \"seleniumbase\"\n  },\n  \"Selenium\": {\n    \"title\": \"Selenium\",\n    \"repoName\": \"seleniumhq/seleniumhq.github.io\",\n    \"githubUrl\": \"https://github.com/seleniumhq/seleniumhq.github.io\",\n    \"description\": \"Official Selenium website and documentation\",\n    \"owner\": \"seleniumhq\",\n    \"repo\": \"seleniumhq.github.io\"\n  },\n  \"Semantic UI\": {\n    \"title\": \"Semantic UI\",\n    \"repoName\": \"semantic-org/semantic-ui-docs\",\n    \"githubUrl\": \"https://github.com/semantic-org/semantic-ui-docs\",\n    \"description\": \"Official Documentation for Semantic UI\",\n    \"owner\": \"semantic-org\",\n    \"repo\": \"semantic-ui-docs\"\n  },\n  \"Semantic Release\": {\n    \"title\": \"Semantic Release\",\n    \"repoName\": \"semantic-release/semantic-release\",\n    \"githubUrl\": \"https://github.com/semantic-release/semantic-release\",\n    \"description\": \":package::rocket: Fully automated version management and package publishing\",\n    \"owner\": \"semantic-release\",\n    \"repo\": \"semantic-release\"\n  },\n  \"Solana Agent Kit\": {\n    \"title\": \"Solana Agent Kit\",\n    \"repoName\": \"sendaifun/solana-agent-kit\",\n    \"githubUrl\": \"https://github.com/sendaifun/solana-agent-kit\",\n    \"description\": \"connect any ai agents to solana protocols\",\n    \"owner\": \"sendaifun\",\n    \"repo\": \"solana-agent-kit\"\n  },\n  \"Solana App Kit\": {\n    \"title\": \"Solana App Kit\",\n    \"repoName\": \"sendarcade/solana-app-kit\",\n    \"githubUrl\": \"https://github.com/sendarcade/solana-app-kit\",\n    \"description\": \"build solana apps under 15 mins\",\n    \"owner\": \"sendarcade\",\n    \"repo\": \"solana-app-kit\"\n  },\n  \"Sequelize\": {\n    \"title\": \"Sequelize\",\n    \"repoName\": \"sequelize/website\",\n    \"githubUrl\": \"https://github.com/sequelize/website\",\n    \"description\": \"Our beloved website that contains all versions of our documentations and the API references.\",\n    \"owner\": \"sequelize\",\n    \"repo\": \"website\"\n  },\n  \"Serde\": {\n    \"title\": \"Serde\",\n    \"repoName\": \"serde-rs/serde\",\n    \"githubUrl\": \"https://github.com/serde-rs/serde\",\n    \"description\": \"Serialization framework for Rust\",\n    \"owner\": \"serde-rs\",\n    \"repo\": \"serde\"\n  },\n  \"DeepFace\": {\n    \"title\": \"DeepFace\",\n    \"repoName\": \"serengil/deepface\",\n    \"githubUrl\": \"https://github.com/serengil/deepface\",\n    \"description\": \"A Lightweight Face Recognition and Facial Attribute Analysis (Age, Gender, Emotion and Race) Library for Python\",\n    \"owner\": \"serengil\",\n    \"repo\": \"deepface\"\n  },\n  \"Serenity JS\": {\n    \"title\": \"Serenity JS\",\n    \"repoName\": \"serenity-js/serenity-js\",\n    \"githubUrl\": \"https://github.com/serenity-js/serenity-js\",\n    \"description\": \"A next generation, full-stack acceptance testing framework optimised for collaboration, speed and scale!\",\n    \"owner\": \"serenity-js\",\n    \"repo\": \"serenity-js\"\n  },\n  \"Python Amazon PAAPI\": {\n    \"title\": \"Python Amazon PAAPI\",\n    \"repoName\": \"sergioteula/python-amazon-paapi\",\n    \"githubUrl\": \"https://github.com/sergioteula/python-amazon-paapi\",\n    \"description\": \"Amazon Product Advertising API 5.0 wrapper for Python 💰\",\n    \"owner\": \"sergioteula\",\n    \"repo\": \"python-amazon-paapi\"\n  },\n  \"Serilog\": {\n    \"title\": \"Serilog\",\n    \"repoName\": \"serilog/serilog\",\n    \"githubUrl\": \"https://github.com/serilog/serilog\",\n    \"description\": \"Simple .NET logging with fully-structured events\",\n    \"owner\": \"serilog\",\n    \"repo\": \"serilog\"\n  },\n  \"Serverless Framework\": {\n    \"title\": \"Serverless Framework\",\n    \"repoName\": \"serverless/serverless\",\n    \"githubUrl\": \"https://github.com/serverless/serverless\",\n    \"description\": \"⚡ Serverless Framework – Effortlessly build apps that auto-scale, incur zero costs when idle, and require minimal maintenance using AWS Lambda and other managed cloud services.\",\n    \"owner\": \"serverless\",\n    \"repo\": \"serverless\"\n  },\n  \"Serverpod\": {\n    \"title\": \"Serverpod\",\n    \"repoName\": \"serverpod/serverpod_docs\",\n    \"githubUrl\": \"https://github.com/serverpod/serverpod_docs\",\n    \"description\": \"Serverpod's official documentation.\",\n    \"owner\": \"serverpod\",\n    \"repo\": \"serverpod_docs\"\n  },\n  \"Docker PHP\": {\n    \"title\": \"Docker PHP\",\n    \"repoName\": \"serversideup/docker-php\",\n    \"githubUrl\": \"https://github.com/serversideup/docker-php\",\n    \"description\": \"🐳 Production-ready Docker images for PHP. Optimized for Laravel, WordPress, and more!\",\n    \"owner\": \"serversideup\",\n    \"repo\": \"docker-php\"\n  },\n  \"ServiceNow Vulnerability Response\": {\n    \"title\": \"ServiceNow Vulnerability Response\",\n    \"repoName\": \"servicenow/vulnerability-response\",\n    \"githubUrl\": \"https://github.com/servicenow/vulnerability-response\",\n    \"description\": \"A GitHub Action to facilitate integrating with ServiceNow SBOM Workspace.\",\n    \"owner\": \"servicenow\",\n    \"repo\": \"vulnerability-response\"\n  },\n  \"ServiceStack\": {\n    \"title\": \"ServiceStack\",\n    \"repoName\": \"servicestack/servicestack\",\n    \"githubUrl\": \"https://github.com/servicestack/servicestack\",\n    \"description\": \"Thoughtfully architected, obscenely fast, thoroughly enjoyable web services for all\",\n    \"owner\": \"servicestack\",\n    \"repo\": \"servicestack\"\n  },\n  \"SettleMint\": {\n    \"title\": \"SettleMint\",\n    \"repoName\": \"settlemint/docs\",\n    \"githubUrl\": \"https://github.com/settlemint/docs\",\n    \"description\": \"Get going with SettleMint in minutes.\",\n    \"owner\": \"settlemint\",\n    \"repo\": \"docs\"\n  },\n  \"SFML\": {\n    \"title\": \"SFML\",\n    \"repoName\": \"sfml/sfml\",\n    \"githubUrl\": \"https://github.com/sfml/sfml\",\n    \"description\": \"Simple and Fast Multimedia Library\",\n    \"owner\": \"sfml\",\n    \"repo\": \"sfml\"\n  },\n  \"Openage\": {\n    \"title\": \"Openage\",\n    \"repoName\": \"sfttech/openage\",\n    \"githubUrl\": \"https://github.com/sfttech/openage\",\n    \"description\": \"Clone of the Age of Empires II engine 🚀 \",\n    \"owner\": \"sfttech\",\n    \"repo\": \"openage\"\n  },\n  \"Shadcn UI\": {\n    \"title\": \"Shadcn UI\",\n    \"repoName\": \"shadcn-ui/ui\",\n    \"githubUrl\": \"https://github.com/shadcn-ui/ui\",\n    \"description\": \"A set of beautifully-designed, accessible components and a code distribution platform. Works with your favorite frameworks. Open Source. Open Code.\",\n    \"owner\": \"shadcn-ui\",\n    \"repo\": \"ui\"\n  },\n  \"Next PWA\": {\n    \"title\": \"Next PWA\",\n    \"repoName\": \"shadowwalker/next-pwa\",\n    \"githubUrl\": \"https://github.com/shadowwalker/next-pwa\",\n    \"description\": \"Zero config PWA plugin for Next.js, with workbox 🧰\",\n    \"owner\": \"shadowwalker\",\n    \"repo\": \"next-pwa\"\n  },\n  \"Shaka Player\": {\n    \"title\": \"Shaka Player\",\n    \"repoName\": \"shaka-project/shaka-player\",\n    \"githubUrl\": \"https://github.com/shaka-project/shaka-player\",\n    \"description\": \"JavaScript player library / DASH & HLS client / MSE-EME player\",\n    \"owner\": \"shaka-project\",\n    \"repo\": \"shaka-player\"\n  },\n  \"Shapely\": {\n    \"title\": \"Shapely\",\n    \"repoName\": \"shapely/shapely\",\n    \"githubUrl\": \"https://github.com/shapely/shapely\",\n    \"description\": \"Manipulation and analysis of geometric objects\",\n    \"owner\": \"shapely\",\n    \"repo\": \"shapely\"\n  },\n  \"Sharetribe Flex\": {\n    \"title\": \"Sharetribe Flex\",\n    \"repoName\": \"sharetribe/flex-docs\",\n    \"githubUrl\": \"https://github.com/sharetribe/flex-docs\",\n    \"description\": \"Sharetribe Flex documentation site a.k.a. Flex Docs\",\n    \"owner\": \"sharetribe\",\n    \"repo\": \"flex-docs\"\n  },\n  \"Shiki\": {\n    \"title\": \"Shiki\",\n    \"repoName\": \"shikijs/shiki\",\n    \"githubUrl\": \"https://github.com/shikijs/shiki\",\n    \"description\": \"A beautiful yet powerful syntax highlighter\",\n    \"owner\": \"shikijs\",\n    \"repo\": \"shiki\"\n  },\n  \"Shlink JS SDK\": {\n    \"title\": \"Shlink JS SDK\",\n    \"repoName\": \"shlinkio/shlink-js-sdk\",\n    \"githubUrl\": \"https://github.com/shlinkio/shlink-js-sdk\",\n    \"description\": \"A javascript Shlink's REST API client for the browser and node.js\",\n    \"owner\": \"shlinkio\",\n    \"repo\": \"shlink-js-sdk\"\n  },\n  \"Yemot Router2\": {\n    \"title\": \"Yemot Router2\",\n    \"repoName\": \"shlomocode/yemot-router2\",\n    \"githubUrl\": \"https://github.com/shlomocode/yemot-router2\",\n    \"description\": \"Make IVR development easy\",\n    \"owner\": \"shlomocode\",\n    \"repo\": \"yemot-router2\"\n  },\n  \"Shopify CLI\": {\n    \"title\": \"Shopify CLI\",\n    \"repoName\": \"shopify/cli\",\n    \"githubUrl\": \"https://github.com/shopify/cli\",\n    \"description\": \"Build apps, themes, and hydrogen storefronts for Shopify\",\n    \"owner\": \"shopify\",\n    \"repo\": \"cli\"\n  },\n  \"Flash List\": {\n    \"title\": \"Flash List\",\n    \"repoName\": \"shopify/flash-list\",\n    \"githubUrl\": \"https://github.com/shopify/flash-list\",\n    \"description\": \"A better list for React Native\",\n    \"owner\": \"shopify\",\n    \"repo\": \"flash-list\"\n  },\n  \"GraphQL Design Tutorial\": {\n    \"title\": \"GraphQL Design Tutorial\",\n    \"repoName\": \"shopify/graphql-design-tutorial\",\n    \"githubUrl\": \"https://github.com/shopify/graphql-design-tutorial\",\n    \"description\": \"\",\n    \"owner\": \"shopify\",\n    \"repo\": \"graphql-design-tutorial\"\n  },\n  \"GraphQL Schema\": {\n    \"title\": \"GraphQL Schema\",\n    \"repoName\": \"shopify/graphql_schema\",\n    \"githubUrl\": \"https://github.com/shopify/graphql_schema\",\n    \"description\": \"Classes to access the GraphQL instrospection result rather than using the parsed JSON directly as a hash.\",\n    \"owner\": \"shopify\",\n    \"repo\": \"graphql_schema\"\n  },\n  \"Hydrogen\": {\n    \"title\": \"Hydrogen\",\n    \"repoName\": \"shopify/hydrogen\",\n    \"githubUrl\": \"https://github.com/shopify/hydrogen\",\n    \"description\": \"Hydrogen lets you build faster headless storefronts in less time, on Shopify.\",\n    \"owner\": \"shopify\",\n    \"repo\": \"hydrogen\"\n  },\n  \"Liquid\": {\n    \"title\": \"Liquid\",\n    \"repoName\": \"shopify/liquid\",\n    \"githubUrl\": \"https://github.com/shopify/liquid\",\n    \"description\": \"Liquid markup language. Safe, customer facing template language for flexible web apps. \",\n    \"owner\": \"shopify\",\n    \"repo\": \"liquid\"\n  },\n  \"Shopify Polaris\": {\n    \"title\": \"Shopify Polaris\",\n    \"repoName\": \"shopify/polaris\",\n    \"githubUrl\": \"https://github.com/shopify/polaris\",\n    \"description\": \"Shopify’s design system to help us work together to build a great experience for all of our merchants.\",\n    \"owner\": \"shopify\",\n    \"repo\": \"polaris\"\n  },\n  \"React Native Skia\": {\n    \"title\": \"React Native Skia\",\n    \"repoName\": \"shopify/react-native-skia\",\n    \"githubUrl\": \"https://github.com/shopify/react-native-skia\",\n    \"description\": \"High-performance React Native Graphics using Skia\",\n    \"owner\": \"shopify\",\n    \"repo\": \"react-native-skia\"\n  },\n  \"Remote DOM\": {\n    \"title\": \"Remote DOM\",\n    \"repoName\": \"shopify/remote-dom\",\n    \"githubUrl\": \"https://github.com/shopify/remote-dom\",\n    \"description\": \"\",\n    \"owner\": \"shopify\",\n    \"repo\": \"remote-dom\"\n  },\n  \"Shopify API JS\": {\n    \"title\": \"Shopify API JS\",\n    \"repoName\": \"shopify/shopify-api-js\",\n    \"githubUrl\": \"https://github.com/shopify/shopify-api-js\",\n    \"description\": \"Shopify Admin API Library for Node. Accelerate development with support for authentication, graphql proxy, webhooks\",\n    \"owner\": \"shopify\",\n    \"repo\": \"shopify-api-js\"\n  },\n  \"Shopify App JS\": {\n    \"title\": \"Shopify App JS\",\n    \"repoName\": \"shopify/shopify-app-js\",\n    \"githubUrl\": \"https://github.com/shopify/shopify-app-js\",\n    \"description\": \"\",\n    \"owner\": \"shopify\",\n    \"repo\": \"shopify-app-js\"\n  },\n  \"Shopify App Template Remix\": {\n    \"title\": \"Shopify App Template Remix\",\n    \"repoName\": \"shopify/shopify-app-template-remix\",\n    \"githubUrl\": \"https://github.com/shopify/shopify-app-template-remix\",\n    \"description\": \"\",\n    \"owner\": \"shopify\",\n    \"repo\": \"shopify-app-template-remix\"\n  },\n  \"Shopify Python API\": {\n    \"title\": \"Shopify Python API\",\n    \"repoName\": \"shopify/shopify_python_api\",\n    \"githubUrl\": \"https://github.com/shopify/shopify_python_api\",\n    \"description\": \"ShopifyAPI library allows Python developers to programmatically access the admin section of stores\",\n    \"owner\": \"shopify\",\n    \"repo\": \"shopify_python_api\"\n  },\n  \"Shopify UI Extensions\": {\n    \"title\": \"Shopify UI Extensions\",\n    \"repoName\": \"shopify/ui-extensions\",\n    \"githubUrl\": \"https://github.com/shopify/ui-extensions\",\n    \"description\": \"Repo for the public definition of Shopify's UI extension APIs. Please use the community forum to ask questions or report issues: https://community.shopify.dev/c/extensions/5\",\n    \"owner\": \"shopify\",\n    \"repo\": \"ui-extensions\"\n  },\n  \"Shopware 6\": {\n    \"title\": \"Shopware 6\",\n    \"repoName\": \"shopware/docs\",\n    \"githubUrl\": \"https://github.com/shopware/docs\",\n    \"description\": \"Shopware 6 developer docs\",\n    \"owner\": \"shopware\",\n    \"repo\": \"docs\"\n  },\n  \"Shouldly\": {\n    \"title\": \"Shouldly\",\n    \"repoName\": \"shouldly/shouldly\",\n    \"githubUrl\": \"https://github.com/shouldly/shouldly\",\n    \"description\": \"Should testing for .NET—the way assertions should be!\",\n    \"owner\": \"shouldly\",\n    \"repo\": \"shouldly\"\n  },\n  \"Nextra\": {\n    \"title\": \"Nextra\",\n    \"repoName\": \"shuding/nextra\",\n    \"githubUrl\": \"https://github.com/shuding/nextra\",\n    \"description\": \"Simple, powerful and flexible site generation framework with everything you love from Next.js.\",\n    \"owner\": \"shuding\",\n    \"repo\": \"nextra\"\n  },\n  \"Nuxt Auth\": {\n    \"title\": \"Nuxt Auth\",\n    \"repoName\": \"sidebase/nuxt-auth\",\n    \"githubUrl\": \"https://github.com/sidebase/nuxt-auth\",\n    \"description\": \"Authentication built for Nuxt 3! Easily add authentication via OAuth providers, credentials or Email Magic URLs!\",\n    \"owner\": \"sidebase\",\n    \"repo\": \"nuxt-auth\"\n  },\n  \"Sidekiq\": {\n    \"title\": \"Sidekiq\",\n    \"repoName\": \"sidekiq/sidekiq\",\n    \"githubUrl\": \"https://github.com/sidekiq/sidekiq\",\n    \"description\": \"Simple, efficient background processing for Ruby\",\n    \"owner\": \"sidekiq\",\n    \"repo\": \"sidekiq\"\n  },\n  \"SignalR\": {\n    \"title\": \"SignalR\",\n    \"repoName\": \"signalr/signalr\",\n    \"githubUrl\": \"https://github.com/signalr/signalr\",\n    \"description\": \"Incredibly simple real-time web for .NET\",\n    \"owner\": \"signalr\",\n    \"repo\": \"signalr\"\n  },\n  \"Templater\": {\n    \"title\": \"Templater\",\n    \"repoName\": \"silentvoid13/templater\",\n    \"githubUrl\": \"https://github.com/silentvoid13/templater\",\n    \"description\": \"A template plugin for obsidian\",\n    \"owner\": \"silentvoid13\",\n    \"repo\": \"templater\"\n  },\n  \"Silex\": {\n    \"title\": \"Silex\",\n    \"repoName\": \"silexphp/silex\",\n    \"githubUrl\": \"https://github.com/silexphp/silex\",\n    \"description\": \"[DEPRECATED -- Use Symfony instead] The PHP micro-framework based on the Symfony Components\",\n    \"owner\": \"silexphp\",\n    \"repo\": \"silex\"\n  },\n  \"Silverstripe CMS\": {\n    \"title\": \"Silverstripe CMS\",\n    \"repoName\": \"silverstripe/developer-docs\",\n    \"githubUrl\": \"https://github.com/silverstripe/developer-docs\",\n    \"description\": \"Developer documentation for Silverstripe CMS\",\n    \"owner\": \"silverstripe\",\n    \"repo\": \"developer-docs\"\n  },\n  \"Drift\": {\n    \"title\": \"Drift\",\n    \"repoName\": \"simolus3/drift\",\n    \"githubUrl\": \"https://github.com/simolus3/drift\",\n    \"description\": \"Drift is an easy to use, reactive, typesafe persistence library for Dart & Flutter.\",\n    \"owner\": \"simolus3\",\n    \"repo\": \"drift\"\n  },\n  \"Polyfill\": {\n    \"title\": \"Polyfill\",\n    \"repoName\": \"simoncropp/polyfill\",\n    \"githubUrl\": \"https://github.com/simoncropp/polyfill\",\n    \"description\": \"Source only package that exposes newer .net and C# features to older runtimes.\",\n    \"owner\": \"simoncropp\",\n    \"repo\": \"polyfill\"\n  },\n  \"Viselect\": {\n    \"title\": \"Viselect\",\n    \"repoName\": \"simonwep/viselect\",\n    \"githubUrl\": \"https://github.com/simonwep/viselect\",\n    \"description\": \"✨ Viselect - A high performance and lightweight library to add a visual way of selecting elements, just like on your Desktop. Zero dependencies, super small. Support for major frameworks!\",\n    \"owner\": \"simonwep\",\n    \"repo\": \"viselect\"\n  },\n  \"PandasAI\": {\n    \"title\": \"PandasAI\",\n    \"repoName\": \"sinaptik-ai/pandas-ai\",\n    \"githubUrl\": \"https://github.com/sinaptik-ai/pandas-ai\",\n    \"description\": \"Chat with your database or your datalake (SQL, CSV, parquet). PandasAI makes data analysis conversational using LLMs and RAG.\",\n    \"owner\": \"sinaptik-ai\",\n    \"repo\": \"pandas-ai\"\n  },\n  \"Ky\": {\n    \"title\": \"Ky\",\n    \"repoName\": \"sindresorhus/ky\",\n    \"githubUrl\": \"https://github.com/sindresorhus/ky\",\n    \"description\": \"🌳 Tiny & elegant JavaScript HTTP client based on the Fetch API\",\n    \"owner\": \"sindresorhus\",\n    \"repo\": \"ky\"\n  },\n  \"TileDB SOMA\": {\n    \"title\": \"TileDB SOMA\",\n    \"repoName\": \"single-cell-data/tiledb-soma\",\n    \"githubUrl\": \"https://github.com/single-cell-data/tiledb-soma\",\n    \"description\": \"Python and R SOMA APIs using TileDB’s cloud-native format. Ideal for single-cell data at any scale.\",\n    \"owner\": \"single-cell-data\",\n    \"repo\": \"tiledb-soma\"\n  },\n  \"SiYuan\": {\n    \"title\": \"SiYuan\",\n    \"repoName\": \"siyuan-note/siyuan\",\n    \"githubUrl\": \"https://github.com/siyuan-note/siyuan\",\n    \"description\": \"A privacy-first, self-hosted, fully open source personal knowledge management software, written in typescript and golang.\",\n    \"owner\": \"siyuan-note\",\n    \"repo\": \"siyuan\"\n  },\n  \"Skeleton\": {\n    \"title\": \"Skeleton\",\n    \"repoName\": \"skeletonlabs/skeleton\",\n    \"githubUrl\": \"https://github.com/skeletonlabs/skeleton\",\n    \"description\": \"Skeleton is an adaptive design system powered by Tailwind CSS.\",\n    \"owner\": \"skeletonlabs\",\n    \"repo\": \"skeleton\"\n  },\n  \"Skforecast\": {\n    \"title\": \"Skforecast\",\n    \"repoName\": \"skforecast/skforecast\",\n    \"githubUrl\": \"https://github.com/skforecast/skforecast\",\n    \"description\": \"Time series forecasting with machine learning models\",\n    \"owner\": \"skforecast\",\n    \"repo\": \"skforecast\"\n  },\n  \"Skip\": {\n    \"title\": \"Skip\",\n    \"repoName\": \"skiplabs/skip\",\n    \"githubUrl\": \"https://github.com/skiplabs/skip\",\n    \"description\": \"Skip is a framework for building reactive services\",\n    \"owner\": \"skiplabs\",\n    \"repo\": \"skip\"\n  },\n  \"Skops\": {\n    \"title\": \"Skops\",\n    \"repoName\": \"skops-dev/skops\",\n    \"githubUrl\": \"https://github.com/skops-dev/skops\",\n    \"description\": \"skops is a Python library helping you share your scikit-learn based models and put them in production\",\n    \"owner\": \"skops-dev\",\n    \"repo\": \"skops\"\n  },\n  \"Skrub\": {\n    \"title\": \"Skrub\",\n    \"repoName\": \"skrub-data/skrub\",\n    \"githubUrl\": \"https://github.com/skrub-data/skrub\",\n    \"description\": \"Machine learning with dataframes\",\n    \"owner\": \"skrub-data\",\n    \"repo\": \"skrub\"\n  },\n  \"PyTorch Forecasting\": {\n    \"title\": \"PyTorch Forecasting\",\n    \"repoName\": \"sktime/pytorch-forecasting\",\n    \"githubUrl\": \"https://github.com/sktime/pytorch-forecasting\",\n    \"description\": \"Time series forecasting with PyTorch\",\n    \"owner\": \"sktime\",\n    \"repo\": \"pytorch-forecasting\"\n  },\n  \"Skyvern\": {\n    \"title\": \"Skyvern\",\n    \"repoName\": \"skyvern-ai/skyvern\",\n    \"githubUrl\": \"https://github.com/skyvern-ai/skyvern\",\n    \"description\": \"Automate browser-based workflows with LLMs and Computer Vision\",\n    \"owner\": \"skyvern-ai\",\n    \"repo\": \"skyvern\"\n  },\n  \"Quill\": {\n    \"title\": \"Quill\",\n    \"repoName\": \"slab/quill\",\n    \"githubUrl\": \"https://github.com/slab/quill\",\n    \"description\": \"Quill is a modern WYSIWYG editor built for compatibility and extensibility\",\n    \"owner\": \"slab\",\n    \"repo\": \"quill\"\n  },\n  \"Bolt for JavaScript\": {\n    \"title\": \"Bolt for JavaScript\",\n    \"repoName\": \"slackapi/bolt-js\",\n    \"githubUrl\": \"https://github.com/slackapi/bolt-js\",\n    \"description\": \"A framework to build Slack apps using JavaScript\",\n    \"owner\": \"slackapi\",\n    \"repo\": \"bolt-js\"\n  },\n  \"Bolt Python\": {\n    \"title\": \"Bolt Python\",\n    \"repoName\": \"slackapi/bolt-python\",\n    \"githubUrl\": \"https://github.com/slackapi/bolt-python\",\n    \"description\": \"A framework to build Slack apps using Python\",\n    \"owner\": \"slackapi\",\n    \"repo\": \"bolt-python\"\n  },\n  \"Deno Slack SDK\": {\n    \"title\": \"Deno Slack SDK\",\n    \"repoName\": \"slackapi/deno-slack-sdk\",\n    \"githubUrl\": \"https://github.com/slackapi/deno-slack-sdk\",\n    \"description\": \"SDK for building Run on Slack apps using Deno\",\n    \"owner\": \"slackapi\",\n    \"repo\": \"deno-slack-sdk\"\n  },\n  \"Slack Python Slack Hooks\": {\n    \"title\": \"Slack Python Slack Hooks\",\n    \"repoName\": \"slackapi/python-slack-hooks\",\n    \"githubUrl\": \"https://github.com/slackapi/python-slack-hooks\",\n    \"description\": \"Helper library implementing the contract between the Slack CLI and Bolt for Python\",\n    \"owner\": \"slackapi\",\n    \"repo\": \"python-slack-hooks\"\n  },\n  \"Slack SDK for Python\": {\n    \"title\": \"Slack SDK for Python\",\n    \"repoName\": \"slackapi/python-slack-sdk\",\n    \"githubUrl\": \"https://github.com/slackapi/python-slack-sdk\",\n    \"description\": \"Slack Developer Kit for Python\",\n    \"owner\": \"slackapi\",\n    \"repo\": \"python-slack-sdk\"\n  },\n  \"Slidev\": {\n    \"title\": \"Slidev\",\n    \"repoName\": \"slidevjs/slidev\",\n    \"githubUrl\": \"https://github.com/slidevjs/slidev\",\n    \"description\": \"Presentation Slides for Developers\",\n    \"owner\": \"slidevjs\",\n    \"repo\": \"slidev\"\n  },\n  \"Chainlink\": {\n    \"title\": \"Chainlink\",\n    \"repoName\": \"smartcontractkit/chainlink\",\n    \"githubUrl\": \"https://github.com/smartcontractkit/chainlink\",\n    \"description\": \"node of the decentralized oracle network, bridging on and off-chain computation\",\n    \"owner\": \"smartcontractkit\",\n    \"repo\": \"chainlink\"\n  },\n  \"Notivue\": {\n    \"title\": \"Notivue\",\n    \"repoName\": \"smastrom/notivue\",\n    \"githubUrl\": \"https://github.com/smastrom/notivue\",\n    \"description\": \"🔔 Powerful toast notification system for Vue and Nuxt.\",\n    \"owner\": \"smastrom\",\n    \"repo\": \"notivue\"\n  },\n  \"Jinni\": {\n    \"title\": \"Jinni\",\n    \"repoName\": \"smat-dev/jinni\",\n    \"githubUrl\": \"https://github.com/smat-dev/jinni\",\n    \"description\": \"Bring your project into LLM context - tool and MCP server\",\n    \"owner\": \"smat-dev\",\n    \"repo\": \"jinni\"\n  },\n  \"Cypress MailHog\": {\n    \"title\": \"Cypress MailHog\",\n    \"repoName\": \"smenigat/cypress-mailhog\",\n    \"githubUrl\": \"https://github.com/smenigat/cypress-mailhog\",\n    \"description\": \"Cypress Commands for MailHog 🌳🐗\",\n    \"owner\": \"smenigat\",\n    \"repo\": \"cypress-mailhog\"\n  },\n  \"Smile ElasticSuite\": {\n    \"title\": \"Smile ElasticSuite\",\n    \"repoName\": \"smile-sa/elasticsuite\",\n    \"githubUrl\": \"https://github.com/smile-sa/elasticsuite\",\n    \"description\": \"Smile ElasticSuite - Magento 2 merchandising and search engine built on ElasticSearch\",\n    \"owner\": \"smile-sa\",\n    \"repo\": \"elasticsuite\"\n  },\n  \"Smsmanpy\": {\n    \"title\": \"Smsmanpy\",\n    \"repoName\": \"smsmancom/smsmanpy\",\n    \"githubUrl\": \"https://github.com/smsmancom/smsmanpy\",\n    \"description\": \"This is  Python package for connection with SMS-Man API and an optimized method for quickly buying a large number of numbers\",\n    \"owner\": \"smsmancom\",\n    \"repo\": \"smsmanpy\"\n  },\n  \"JavaGuide\": {\n    \"title\": \"JavaGuide\",\n    \"repoName\": \"snailclimb/javaguide\",\n    \"githubUrl\": \"https://github.com/snailclimb/javaguide\",\n    \"description\": \"「Java学习+面试指南」一份涵盖大部分 Java 程序员所需要掌握的核心知识。准备 Java 面试，首选 JavaGuide！\",\n    \"owner\": \"snailclimb\",\n    \"repo\": \"javaguide\"\n  },\n  \"Dash Mantine Components\": {\n    \"title\": \"Dash Mantine Components\",\n    \"repoName\": \"snehilvj/dash-mantine-components\",\n    \"githubUrl\": \"https://github.com/snehilvj/dash-mantine-components\",\n    \"description\": \"Plotly Dash components based on Mantine React Components\",\n    \"owner\": \"snehilvj\",\n    \"repo\": \"dash-mantine-components\"\n  },\n  \"Snowflake Connector for .NET\": {\n    \"title\": \"Snowflake Connector for .NET\",\n    \"repoName\": \"snowflakedb/snowflake-connector-net\",\n    \"githubUrl\": \"https://github.com/snowflakedb/snowflake-connector-net\",\n    \"description\": \"Snowflake Connector for .NET\",\n    \"owner\": \"snowflakedb\",\n    \"repo\": \"snowflake-connector-net\"\n  },\n  \"Snyk\": {\n    \"title\": \"Snyk\",\n    \"repoName\": \"snyk/user-docs\",\n    \"githubUrl\": \"https://github.com/snyk/user-docs\",\n    \"description\": \"Gitbook documentation repo.\",\n    \"owner\": \"snyk\",\n    \"repo\": \"user-docs\"\n  },\n  \"Socket.IO\": {\n    \"title\": \"Socket.IO\",\n    \"repoName\": \"socketio/socket.io\",\n    \"githubUrl\": \"https://github.com/socketio/socket.io\",\n    \"description\": \"Realtime application framework (Node.JS server)\",\n    \"owner\": \"socketio\",\n    \"repo\": \"socket.io\"\n  },\n  \"React Native Gesture Handler\": {\n    \"title\": \"React Native Gesture Handler\",\n    \"repoName\": \"software-mansion/react-native-gesture-handler\",\n    \"githubUrl\": \"https://github.com/software-mansion/react-native-gesture-handler\",\n    \"description\": \"Declarative API exposing platform native touch and gesture system to React Native.\",\n    \"owner\": \"software-mansion\",\n    \"repo\": \"react-native-gesture-handler\"\n  },\n  \"React Native Reanimated\": {\n    \"title\": \"React Native Reanimated\",\n    \"repoName\": \"software-mansion/react-native-reanimated\",\n    \"githubUrl\": \"https://github.com/software-mansion/react-native-reanimated\",\n    \"description\": \"React Native's Animated library reimplemented\",\n    \"owner\": \"software-mansion\",\n    \"repo\": \"react-native-reanimated\"\n  },\n  \"React Native Screens\": {\n    \"title\": \"React Native Screens\",\n    \"repoName\": \"software-mansion/react-native-screens\",\n    \"githubUrl\": \"https://github.com/software-mansion/react-native-screens\",\n    \"description\": \"Native navigation primitives for your React Native app.\",\n    \"owner\": \"software-mansion\",\n    \"repo\": \"react-native-screens\"\n  },\n  \"AdminJS\": {\n    \"title\": \"AdminJS\",\n    \"repoName\": \"softwarebrothers/adminjs-docs\",\n    \"githubUrl\": \"https://github.com/softwarebrothers/adminjs-docs\",\n    \"description\": \"\",\n    \"owner\": \"softwarebrothers\",\n    \"repo\": \"adminjs-docs\"\n  },\n  \"Solana Anchor\": {\n    \"title\": \"Solana Anchor\",\n    \"repoName\": \"solana-foundation/anchor\",\n    \"githubUrl\": \"https://github.com/solana-foundation/anchor\",\n    \"description\": \"⚓ Solana Sealevel Framework\",\n    \"owner\": \"solana-foundation\",\n    \"repo\": \"anchor\"\n  },\n  \"Gill\": {\n    \"title\": \"Gill\",\n    \"repoName\": \"solana-foundation/gill\",\n    \"githubUrl\": \"https://github.com/solana-foundation/gill\",\n    \"description\": \"JavaScript/TypeScript client library for interacting with the Solana blockchain\",\n    \"owner\": \"solana-foundation\",\n    \"repo\": \"gill\"\n  },\n  \"Solana Web3.js\": {\n    \"title\": \"Solana Web3.js\",\n    \"repoName\": \"solana-foundation/solana-web3.js\",\n    \"githubUrl\": \"https://github.com/solana-foundation/solana-web3.js\",\n    \"description\": \"Solana JavaScript SDK\",\n    \"owner\": \"solana-foundation\",\n    \"repo\": \"solana-web3.js\"\n  },\n  \"SPL Associated Token Account\": {\n    \"title\": \"SPL Associated Token Account\",\n    \"repoName\": \"solana-program/associated-token-account\",\n    \"githubUrl\": \"https://github.com/solana-program/associated-token-account\",\n    \"description\": \"The SPL Associated Token Account program and its clients\",\n    \"owner\": \"solana-program\",\n    \"repo\": \"associated-token-account\"\n  },\n  \"Solana Memo\": {\n    \"title\": \"Solana Memo\",\n    \"repoName\": \"solana-program/memo\",\n    \"githubUrl\": \"https://github.com/solana-program/memo\",\n    \"description\": \"The Solana Memo program and its clients\",\n    \"owner\": \"solana-program\",\n    \"repo\": \"memo\"\n  },\n  \"Solana System\": {\n    \"title\": \"Solana System\",\n    \"repoName\": \"solana-program/system\",\n    \"githubUrl\": \"https://github.com/solana-program/system\",\n    \"description\": \"The Solana System program and its clients\",\n    \"owner\": \"solana-program\",\n    \"repo\": \"system\"\n  },\n  \"SPL Token 2022\": {\n    \"title\": \"SPL Token 2022\",\n    \"repoName\": \"solana-program/token-2022\",\n    \"githubUrl\": \"https://github.com/solana-program/token-2022\",\n    \"description\": \"The SPL Token 2022 program and its clients\",\n    \"owner\": \"solana-program\",\n    \"repo\": \"token-2022\"\n  },\n  \"Node QRCode\": {\n    \"title\": \"Node QRCode\",\n    \"repoName\": \"soldair/node-qrcode\",\n    \"githubUrl\": \"https://github.com/soldair/node-qrcode\",\n    \"description\": \"qr code generator\",\n    \"owner\": \"soldair\",\n    \"repo\": \"node-qrcode\"\n  },\n  \"Solid\": {\n    \"title\": \"Solid\",\n    \"repoName\": \"solidjs/solid-docs\",\n    \"githubUrl\": \"https://github.com/solidjs/solid-docs\",\n    \"description\": \"Official documentation for the Solid ecosystem\",\n    \"owner\": \"solidjs\",\n    \"repo\": \"solid-docs\"\n  },\n  \"Solid Router\": {\n    \"title\": \"Solid Router\",\n    \"repoName\": \"solidjs/solid-router\",\n    \"githubUrl\": \"https://github.com/solidjs/solid-router\",\n    \"description\": \"A universal router for Solid inspired by Ember and React Router\",\n    \"owner\": \"solidjs\",\n    \"repo\": \"solid-router\"\n  },\n  \"SolidStart\": {\n    \"title\": \"SolidStart\",\n    \"repoName\": \"solidjs/solid-start\",\n    \"githubUrl\": \"https://github.com/solidjs/solid-start\",\n    \"description\": \"SolidStart, the Solid app framework\",\n    \"owner\": \"solidjs\",\n    \"repo\": \"solid-start\"\n  },\n  \"Sonnetjs\": {\n    \"title\": \"Sonnetjs\",\n    \"repoName\": \"sonnetjs/sonnet\",\n    \"githubUrl\": \"https://github.com/sonnetjs/sonnet\",\n    \"description\": \"Sonnetjs is an opinionated frontend framework for crafting web ui\",\n    \"owner\": \"sonnetjs\",\n    \"repo\": \"sonnet\"\n  },\n  \"MCP Atlassian\": {\n    \"title\": \"MCP Atlassian\",\n    \"repoName\": \"sooperset/mcp-atlassian\",\n    \"githubUrl\": \"https://github.com/sooperset/mcp-atlassian\",\n    \"description\": \"MCP server for Atlassian tools (Confluence, Jira)\",\n    \"owner\": \"sooperset\",\n    \"repo\": \"mcp-atlassian\"\n  },\n  \"Mailparser\": {\n    \"title\": \"Mailparser\",\n    \"repoName\": \"spamscope/mail-parser\",\n    \"githubUrl\": \"https://github.com/spamscope/mail-parser\",\n    \"description\": \"Tokenizer for raw mails\",\n    \"owner\": \"spamscope\",\n    \"repo\": \"mail-parser\"\n  },\n  \"Spartan\": {\n    \"title\": \"Spartan\",\n    \"repoName\": \"spartan-ng/spartan\",\n    \"githubUrl\": \"https://github.com/spartan-ng/spartan\",\n    \"description\": \"Cutting-edge tools powering Angular full-stack development.\",\n    \"owner\": \"spartan-ng\",\n    \"repo\": \"spartan\"\n  },\n  \"Laravel Activitylog\": {\n    \"title\": \"Laravel Activitylog\",\n    \"repoName\": \"spatie/laravel-activitylog\",\n    \"githubUrl\": \"https://github.com/spatie/laravel-activitylog\",\n    \"description\": \"Log activity inside your Laravel app\",\n    \"owner\": \"spatie\",\n    \"repo\": \"laravel-activitylog\"\n  },\n  \"Laravel Analytics\": {\n    \"title\": \"Laravel Analytics\",\n    \"repoName\": \"spatie/laravel-analytics\",\n    \"githubUrl\": \"https://github.com/spatie/laravel-analytics\",\n    \"description\": \"A Laravel package to retrieve pageviews and other data from Google Analytics\",\n    \"owner\": \"spatie\",\n    \"repo\": \"laravel-analytics\"\n  },\n  \"Laravel Backup\": {\n    \"title\": \"Laravel Backup\",\n    \"repoName\": \"spatie/laravel-backup\",\n    \"githubUrl\": \"https://github.com/spatie/laravel-backup\",\n    \"description\": \"A package to backup your Laravel app\",\n    \"owner\": \"spatie\",\n    \"repo\": \"laravel-backup\"\n  },\n  \"Laravel Data\": {\n    \"title\": \"Laravel Data\",\n    \"repoName\": \"spatie/laravel-data\",\n    \"githubUrl\": \"https://github.com/spatie/laravel-data\",\n    \"description\": \"Powerful data objects for Laravel\",\n    \"owner\": \"spatie\",\n    \"repo\": \"laravel-data\"\n  },\n  \"Laravel Medialibrary\": {\n    \"title\": \"Laravel Medialibrary\",\n    \"repoName\": \"spatie/laravel-medialibrary\",\n    \"githubUrl\": \"https://github.com/spatie/laravel-medialibrary\",\n    \"description\": \"Associate files with Eloquent models\",\n    \"owner\": \"spatie\",\n    \"repo\": \"laravel-medialibrary\"\n  },\n  \"Laravel Model States\": {\n    \"title\": \"Laravel Model States\",\n    \"repoName\": \"spatie/laravel-model-states\",\n    \"githubUrl\": \"https://github.com/spatie/laravel-model-states\",\n    \"description\": \"State support for models\",\n    \"owner\": \"spatie\",\n    \"repo\": \"laravel-model-states\"\n  },\n  \"Laravel Permission\": {\n    \"title\": \"Laravel Permission\",\n    \"repoName\": \"spatie/laravel-permission\",\n    \"githubUrl\": \"https://github.com/spatie/laravel-permission\",\n    \"description\": \"Associate users with roles and permissions\",\n    \"owner\": \"spatie\",\n    \"repo\": \"laravel-permission\"\n  },\n  \"Laravel Query Builder\": {\n    \"title\": \"Laravel Query Builder\",\n    \"repoName\": \"spatie/laravel-query-builder\",\n    \"githubUrl\": \"https://github.com/spatie/laravel-query-builder\",\n    \"description\": \"Easily build Eloquent queries from API requests\",\n    \"owner\": \"spatie\",\n    \"repo\": \"laravel-query-builder\"\n  },\n  \"Speckle\": {\n    \"title\": \"Speckle\",\n    \"repoName\": \"specklesystems/speckle-docs\",\n    \"githubUrl\": \"https://github.com/specklesystems/speckle-docs\",\n    \"description\": \"Documentation on everything Speckle\",\n    \"owner\": \"specklesystems\",\n    \"repo\": \"speckle-docs\"\n  },\n  \"Printify SDK for Node.js\": {\n    \"title\": \"Printify SDK for Node.js\",\n    \"repoName\": \"spencerlepine/printify-sdk-js\",\n    \"githubUrl\": \"https://github.com/spencerlepine/printify-sdk-js\",\n    \"description\": \"Node.js SDK for the Printify API.\",\n    \"owner\": \"spencerlepine\",\n    \"repo\": \"printify-sdk-js\"\n  },\n  \"Spin\": {\n    \"title\": \"Spin\",\n    \"repoName\": \"spinframework/spin\",\n    \"githubUrl\": \"https://github.com/spinframework/spin\",\n    \"description\": \"Spin is the open source developer tool for building and running serverless applications powered by WebAssembly.\",\n    \"owner\": \"spinframework\",\n    \"repo\": \"spin\"\n  },\n  \"Spin JS SDK\": {\n    \"title\": \"Spin JS SDK\",\n    \"repoName\": \"spinframework/spin-js-sdk\",\n    \"githubUrl\": \"https://github.com/spinframework/spin-js-sdk\",\n    \"description\": \"https://developer.fermyon.com/spin/javascript-components\",\n    \"owner\": \"spinframework\",\n    \"repo\": \"spin-js-sdk\"\n  },\n  \"Spinnaker\": {\n    \"title\": \"Spinnaker\",\n    \"repoName\": \"spinnaker/spinnaker.github.io\",\n    \"githubUrl\": \"https://github.com/spinnaker/spinnaker.github.io\",\n    \"description\": \"spinnaker documentation site\",\n    \"owner\": \"spinnaker\",\n    \"repo\": \"spinnaker.github.io\"\n  },\n  \"Spiral Framework\": {\n    \"title\": \"Spiral Framework\",\n    \"repoName\": \"spiral/docs\",\n    \"githubUrl\": \"https://github.com/spiral/docs\",\n    \"description\": \"Spiral Framework and Components Documentation\",\n    \"owner\": \"spiral\",\n    \"repo\": \"docs\"\n  },\n  \"React Spline\": {\n    \"title\": \"React Spline\",\n    \"repoName\": \"splinetool/react-spline\",\n    \"githubUrl\": \"https://github.com/splinetool/react-spline\",\n    \"description\": \"React component for Spline scenes.\",\n    \"owner\": \"splinetool\",\n    \"repo\": \"react-spline\"\n  },\n  \"Splunk Observability Cloud\": {\n    \"title\": \"Splunk Observability Cloud\",\n    \"repoName\": \"splunk/public-o11y-docs\",\n    \"githubUrl\": \"https://github.com/splunk/public-o11y-docs\",\n    \"description\": \"Splunk Observability Cloud docs\",\n    \"owner\": \"splunk\",\n    \"repo\": \"public-o11y-docs\"\n  },\n  \"Splunk SDK Python\": {\n    \"title\": \"Splunk SDK Python\",\n    \"repoName\": \"splunk/splunk-sdk-python\",\n    \"githubUrl\": \"https://github.com/splunk/splunk-sdk-python\",\n    \"description\": \"Splunk Software Development Kit for Python\",\n    \"owner\": \"splunk\",\n    \"repo\": \"splunk-sdk-python\"\n  },\n  \"Spotify Web API TS SDK\": {\n    \"title\": \"Spotify Web API TS SDK\",\n    \"repoName\": \"spotify/spotify-web-api-ts-sdk\",\n    \"githubUrl\": \"https://github.com/spotify/spotify-web-api-ts-sdk\",\n    \"description\": \"A Typescript SDK for the Spotify Web API with types for returned data.\",\n    \"owner\": \"spotify\",\n    \"repo\": \"spotify-web-api-ts-sdk\"\n  },\n  \"OpenAPI Python\": {\n    \"title\": \"OpenAPI Python\",\n    \"repoName\": \"spotware/openapipy\",\n    \"githubUrl\": \"https://github.com/spotware/openapipy\",\n    \"description\": \"A Python package for interacting with cTrader Open API\",\n    \"owner\": \"spotware\",\n    \"repo\": \"openapipy\"\n  },\n  \"Spring AI\": {\n    \"title\": \"Spring AI\",\n    \"repoName\": \"spring-projects/spring-ai\",\n    \"githubUrl\": \"https://github.com/spring-projects/spring-ai\",\n    \"description\": \"An Application Framework for AI Engineering\",\n    \"owner\": \"spring-projects\",\n    \"repo\": \"spring-ai\"\n  },\n  \"Spring Batch\": {\n    \"title\": \"Spring Batch\",\n    \"repoName\": \"spring-projects/spring-batch\",\n    \"githubUrl\": \"https://github.com/spring-projects/spring-batch\",\n    \"description\": \"Spring Batch is a framework for writing batch applications using Java and Spring\",\n    \"owner\": \"spring-projects\",\n    \"repo\": \"spring-batch\"\n  },\n  \"Spring Boot\": {\n    \"title\": \"Spring Boot\",\n    \"repoName\": \"spring-projects/spring-boot\",\n    \"githubUrl\": \"https://github.com/spring-projects/spring-boot\",\n    \"description\": \"Spring Boot helps you to create Spring-powered, production-grade applications and services with absolute minimum fuss.\",\n    \"owner\": \"spring-projects\",\n    \"repo\": \"spring-boot\"\n  },\n  \"Spring Framework\": {\n    \"title\": \"Spring Framework\",\n    \"repoName\": \"spring-projects/spring-framework\",\n    \"githubUrl\": \"https://github.com/spring-projects/spring-framework\",\n    \"description\": \"Spring Framework\",\n    \"owner\": \"spring-projects\",\n    \"repo\": \"spring-framework\"\n  },\n  \"Spring gRPC\": {\n    \"title\": \"Spring gRPC\",\n    \"repoName\": \"spring-projects/spring-grpc\",\n    \"githubUrl\": \"https://github.com/spring-projects/spring-grpc\",\n    \"description\": \"\",\n    \"owner\": \"spring-projects\",\n    \"repo\": \"spring-grpc\"\n  },\n  \"Spring HATEOAS\": {\n    \"title\": \"Spring HATEOAS\",\n    \"repoName\": \"spring-projects/spring-hateoas\",\n    \"githubUrl\": \"https://github.com/spring-projects/spring-hateoas\",\n    \"description\": \"Spring HATEOAS - Library to support implementing representations for hyper-text driven REST web services.\",\n    \"owner\": \"spring-projects\",\n    \"repo\": \"spring-hateoas\"\n  },\n  \"Spring Integration\": {\n    \"title\": \"Spring Integration\",\n    \"repoName\": \"spring-projects/spring-integration\",\n    \"githubUrl\": \"https://github.com/spring-projects/spring-integration\",\n    \"description\": \"Spring Integration provides an extension of the Spring programming model to support the well-known Enterprise Integration Patterns (EIP)\",\n    \"owner\": \"spring-projects\",\n    \"repo\": \"spring-integration\"\n  },\n  \"Spring LDAP\": {\n    \"title\": \"Spring LDAP\",\n    \"repoName\": \"spring-projects/spring-ldap\",\n    \"githubUrl\": \"https://github.com/spring-projects/spring-ldap\",\n    \"description\": \"Spring LDAP\",\n    \"owner\": \"spring-projects\",\n    \"repo\": \"spring-ldap\"\n  },\n  \"Spring Modulith\": {\n    \"title\": \"Spring Modulith\",\n    \"repoName\": \"spring-projects/spring-modulith\",\n    \"githubUrl\": \"https://github.com/spring-projects/spring-modulith\",\n    \"description\": \"Modular applications with Spring Boot\",\n    \"owner\": \"spring-projects\",\n    \"repo\": \"spring-modulith\"\n  },\n  \"Spring REST Docs\": {\n    \"title\": \"Spring REST Docs\",\n    \"repoName\": \"spring-projects/spring-restdocs\",\n    \"githubUrl\": \"https://github.com/spring-projects/spring-restdocs\",\n    \"description\": \"Test-driven documentation for RESTful services\",\n    \"owner\": \"spring-projects\",\n    \"repo\": \"spring-restdocs\"\n  },\n  \"Spring Security\": {\n    \"title\": \"Spring Security\",\n    \"repoName\": \"spring-projects/spring-security\",\n    \"githubUrl\": \"https://github.com/spring-projects/spring-security\",\n    \"description\": \"Spring Security\",\n    \"owner\": \"spring-projects\",\n    \"repo\": \"spring-security\"\n  },\n  \"SQLAlchemy\": {\n    \"title\": \"SQLAlchemy\",\n    \"repoName\": \"sqlalchemy/sqlalchemy\",\n    \"githubUrl\": \"https://github.com/sqlalchemy/sqlalchemy\",\n    \"description\": \"The Database Toolkit for Python\",\n    \"owner\": \"sqlalchemy\",\n    \"repo\": \"sqlalchemy\"\n  },\n  \"SQLC\": {\n    \"title\": \"SQLC\",\n    \"repoName\": \"sqlc-dev/sqlc\",\n    \"githubUrl\": \"https://github.com/sqlc-dev/sqlc\",\n    \"description\": \"Generate type-safe code from SQL\",\n    \"owner\": \"sqlc-dev\",\n    \"repo\": \"sqlc\"\n  },\n  \"SQLFluff\": {\n    \"title\": \"SQLFluff\",\n    \"repoName\": \"sqlfluff/sqlfluff\",\n    \"githubUrl\": \"https://github.com/sqlfluff/sqlfluff\",\n    \"description\": \"A modular SQL linter and auto-formatter with support for multiple dialects and templated code.\",\n    \"owner\": \"sqlfluff\",\n    \"repo\": \"sqlfluff\"\n  },\n  \"SqlKata QueryBuilder\": {\n    \"title\": \"SqlKata QueryBuilder\",\n    \"repoName\": \"sqlkata/querybuilder\",\n    \"githubUrl\": \"https://github.com/sqlkata/querybuilder\",\n    \"description\": \"SQL query builder, written in c#, helps you build complex queries easily, supports SqlServer, MySql, PostgreSql, Oracle, Sqlite and Firebird\",\n    \"owner\": \"sqlkata\",\n    \"repo\": \"querybuilder\"\n  },\n  \"OkHttp\": {\n    \"title\": \"OkHttp\",\n    \"repoName\": \"square/okhttp\",\n    \"githubUrl\": \"https://github.com/square/okhttp\",\n    \"description\": \"Square’s meticulous HTTP client for the JVM, Android, and GraalVM.\",\n    \"owner\": \"square\",\n    \"repo\": \"okhttp\"\n  },\n  \"SST\": {\n    \"title\": \"SST\",\n    \"repoName\": \"sst/sst\",\n    \"githubUrl\": \"https://github.com/sst/sst\",\n    \"description\": \"Build full-stack apps on your own infrastructure.\",\n    \"owner\": \"sst\",\n    \"repo\": \"sst\"\n  },\n  \"StableSwarmUI\": {\n    \"title\": \"StableSwarmUI\",\n    \"repoName\": \"stability-ai/stableswarmui\",\n    \"githubUrl\": \"https://github.com/stability-ai/stableswarmui\",\n    \"description\": \"StableSwarmUI, A Modular Stable Diffusion Web-User-Interface, with an emphasis on making powertools easily accessible, high performance, and extensibility.\",\n    \"owner\": \"stability-ai\",\n    \"repo\": \"stableswarmui\"\n  },\n  \"Stack Auth\": {\n    \"title\": \"Stack Auth\",\n    \"repoName\": \"stack-auth/stack-auth\",\n    \"githubUrl\": \"https://github.com/stack-auth/stack-auth\",\n    \"description\": \"Open-source Auth0/Clerk alternative\",\n    \"owner\": \"stack-auth\",\n    \"repo\": \"stack-auth\"\n  },\n  \"Bolt DIY\": {\n    \"title\": \"Bolt DIY\",\n    \"repoName\": \"stackblitz-labs/bolt.diy\",\n    \"githubUrl\": \"https://github.com/stackblitz-labs/bolt.diy\",\n    \"description\": \"Prompt, run, edit, and deploy full-stack web applications using any LLM you want!\",\n    \"owner\": \"stackblitz-labs\",\n    \"repo\": \"bolt.diy\"\n  },\n  \"TutorialKit\": {\n    \"title\": \"TutorialKit\",\n    \"repoName\": \"stackblitz/tutorialkit\",\n    \"githubUrl\": \"https://github.com/stackblitz/tutorialkit\",\n    \"description\": \"TutorialKit by StackBlitz - Create interactive tutorials powered by the WebContainer API\",\n    \"owner\": \"stackblitz\",\n    \"repo\": \"tutorialkit\"\n  },\n  \"WebContainer Core\": {\n    \"title\": \"WebContainer Core\",\n    \"repoName\": \"stackblitz/webcontainer-core\",\n    \"githubUrl\": \"https://github.com/stackblitz/webcontainer-core\",\n    \"description\": \"Dev environments. In your web app.\",\n    \"owner\": \"stackblitz\",\n    \"repo\": \"webcontainer-core\"\n  },\n  \"CodeGate\": {\n    \"title\": \"CodeGate\",\n    \"repoName\": \"stacklok/codegate\",\n    \"githubUrl\": \"https://github.com/stacklok/codegate\",\n    \"description\": \"CodeGate: Security, Workspaces and Muxing for AI Applications, coding assistants, and agentic frameworks.\",\n    \"owner\": \"stacklok\",\n    \"repo\": \"codegate\"\n  },\n  \"CASL\": {\n    \"title\": \"CASL\",\n    \"repoName\": \"stalniy/casl\",\n    \"githubUrl\": \"https://github.com/stalniy/casl\",\n    \"description\": \"CASL is an isomorphic authorization JavaScript library which restricts what resources a given user is allowed to access\",\n    \"owner\": \"stalniy\",\n    \"repo\": \"casl\"\n  },\n  \"BifrostQL\": {\n    \"title\": \"BifrostQL\",\n    \"repoName\": \"standardbeagle/bifrostql\",\n    \"githubUrl\": \"https://github.com/standardbeagle/bifrostql\",\n    \"description\": \"\",\n    \"owner\": \"standardbeagle\",\n    \"repo\": \"bifrostql\"\n  },\n  \"DSPy\": {\n    \"title\": \"DSPy\",\n    \"repoName\": \"stanfordnlp/dspy\",\n    \"githubUrl\": \"https://github.com/stanfordnlp/dspy\",\n    \"description\": \"DSPy: The framework for programming—not prompting—language models\",\n    \"owner\": \"stanfordnlp\",\n    \"repo\": \"dspy\"\n  },\n  \"Bevy Ecs Tilemap\": {\n    \"title\": \"Bevy Ecs Tilemap\",\n    \"repoName\": \"stararawn/bevy_ecs_tilemap\",\n    \"githubUrl\": \"https://github.com/stararawn/bevy_ecs_tilemap\",\n    \"description\": \"A tilemap rendering crate for bevy which is more ECS friendly.\",\n    \"owner\": \"stararawn\",\n    \"repo\": \"bevy_ecs_tilemap\"\n  },\n  \"Eflatun Scene Reference\": {\n    \"title\": \"Eflatun Scene Reference\",\n    \"repoName\": \"starikcetin/eflatun.scenereference\",\n    \"githubUrl\": \"https://github.com/starikcetin/eflatun.scenereference\",\n    \"description\": \"Unity Scene References for Runtime and Editor. Strongly typed, robust, and reliable. Provides GUID, Path, Build Index, Name, and Address.\",\n    \"owner\": \"starikcetin\",\n    \"repo\": \"eflatun.scenereference\"\n  },\n  \"Datagen\": {\n    \"title\": \"Datagen\",\n    \"repoName\": \"starpig1129/datagen\",\n    \"githubUrl\": \"https://github.com/starpig1129/datagen\",\n    \"description\": \"DATAGEN: AI-driven multi-agent research assistant automating hypothesis generation, data analysis, and report writing. Now expanding into crypto market intelligence. Learn more: https://datagen.digital/.\",\n    \"owner\": \"starpig1129\",\n    \"repo\": \"datagen\"\n  },\n  \"StarRocks\": {\n    \"title\": \"StarRocks\",\n    \"repoName\": \"starrocks/starrocks\",\n    \"githubUrl\": \"https://github.com/starrocks/starrocks\",\n    \"description\": \"The world's fastest open query engine for sub-second analytics both on and off the data lakehouse. With the flexibility to support nearly any scenario, StarRocks provides best-in-class performance for multi-dimensional analytics, real-time analytics, and ad-hoc queries. A Linux Foundation project.\",\n    \"owner\": \"starrocks\",\n    \"repo\": \"starrocks\"\n  },\n  \"Starship\": {\n    \"title\": \"Starship\",\n    \"repoName\": \"starship/starship\",\n    \"githubUrl\": \"https://github.com/starship/starship\",\n    \"description\": \"☄🌌️  The minimal, blazing-fast, and infinitely customizable prompt for any shell!\",\n    \"owner\": \"starship\",\n    \"repo\": \"starship\"\n  },\n  \"Statamic\": {\n    \"title\": \"Statamic\",\n    \"repoName\": \"statamic/docs\",\n    \"githubUrl\": \"https://github.com/statamic/docs\",\n    \"description\": \"Statamic Documentation\",\n    \"owner\": \"statamic\",\n    \"repo\": \"docs\"\n  },\n  \"XState\": {\n    \"title\": \"XState\",\n    \"repoName\": \"statelyai/xstate\",\n    \"githubUrl\": \"https://github.com/statelyai/xstate\",\n    \"description\": \"Actor-based state management & orchestration for complex app logic.\",\n    \"owner\": \"statelyai\",\n    \"repo\": \"xstate\"\n  },\n  \"Bob\": {\n    \"title\": \"Bob\",\n    \"repoName\": \"stephenafamo/bob\",\n    \"githubUrl\": \"https://github.com/stephenafamo/bob\",\n    \"description\": \"SQL query builder and ORM/Factory generator for Go with support for PostgreSQL, MySQL and SQLite\",\n    \"owner\": \"stephenafamo\",\n    \"repo\": \"bob\"\n  },\n  \"Mafs\": {\n    \"title\": \"Mafs\",\n    \"repoName\": \"stevenpetryk/mafs\",\n    \"githubUrl\": \"https://github.com/stevenpetryk/mafs\",\n    \"description\": \"React components for interactive math\",\n    \"owner\": \"stevenpetryk\",\n    \"repo\": \"mafs\"\n  },\n  \"CoreIdent\": {\n    \"title\": \"CoreIdent\",\n    \"repoName\": \"stimpy77/coreident\",\n    \"githubUrl\": \"https://github.com/stimpy77/coreident\",\n    \"description\": \"\",\n    \"owner\": \"stimpy77\",\n    \"repo\": \"coreident\"\n  },\n  \"Stirling PDF\": {\n    \"title\": \"Stirling PDF\",\n    \"repoName\": \"stirling-tools/stirling-pdf\",\n    \"githubUrl\": \"https://github.com/stirling-tools/stirling-pdf\",\n    \"description\": \"#1 Locally hosted web application that allows you to perform various operations on PDF files\",\n    \"owner\": \"stirling-tools\",\n    \"repo\": \"stirling-pdf\"\n  },\n  \"Storj\": {\n    \"title\": \"Storj\",\n    \"repoName\": \"storj/docs\",\n    \"githubUrl\": \"https://github.com/storj/docs\",\n    \"description\": \"Source for Storj docs\",\n    \"owner\": \"storj\",\n    \"repo\": \"docs\"\n  },\n  \"Storyblok React\": {\n    \"title\": \"Storyblok React\",\n    \"repoName\": \"storyblok/storyblok-react\",\n    \"githubUrl\": \"https://github.com/storyblok/storyblok-react\",\n    \"description\": \"React SDK for Storyblok CMS\",\n    \"owner\": \"storyblok\",\n    \"repo\": \"storyblok-react\"\n  },\n  \"Storybook\": {\n    \"title\": \"Storybook\",\n    \"repoName\": \"storybookjs/web\",\n    \"githubUrl\": \"https://github.com/storybookjs/web\",\n    \"description\": \"Storybook documentation site\",\n    \"owner\": \"storybookjs\",\n    \"repo\": \"web\"\n  },\n  \"Adonis Auditing\": {\n    \"title\": \"Adonis Auditing\",\n    \"repoName\": \"stouderio/adonis-auditing\",\n    \"githubUrl\": \"https://github.com/stouderio/adonis-auditing\",\n    \"description\": \"Audit your Lucid models with ease.\",\n    \"owner\": \"stouderio\",\n    \"repo\": \"adonis-auditing\"\n  },\n  \"Strapi\": {\n    \"title\": \"Strapi\",\n    \"repoName\": \"strapi/documentation\",\n    \"githubUrl\": \"https://github.com/strapi/documentation\",\n    \"description\": \"Strapi Documentation\",\n    \"owner\": \"strapi\",\n    \"repo\": \"documentation\"\n  },\n  \"Strawberry\": {\n    \"title\": \"Strawberry\",\n    \"repoName\": \"strawberry-graphql/strawberry\",\n    \"githubUrl\": \"https://github.com/strawberry-graphql/strawberry\",\n    \"description\": \"A GraphQL library for Python that leverages type annotations 🍓\",\n    \"owner\": \"strawberry-graphql\",\n    \"repo\": \"strawberry\"\n  },\n  \"React Use\": {\n    \"title\": \"React Use\",\n    \"repoName\": \"streamich/react-use\",\n    \"githubUrl\": \"https://github.com/streamich/react-use\",\n    \"description\": \"React Hooks — 👍\",\n    \"owner\": \"streamich\",\n    \"repo\": \"react-use\"\n  },\n  \"Streamlit\": {\n    \"title\": \"Streamlit\",\n    \"repoName\": \"streamlit/streamlit\",\n    \"githubUrl\": \"https://github.com/streamlit/streamlit\",\n    \"description\": \"Streamlit — A faster way to build and share data apps.\",\n    \"owner\": \"streamlit\",\n    \"repo\": \"streamlit\"\n  },\n  \"Testify\": {\n    \"title\": \"Testify\",\n    \"repoName\": \"stretchr/testify\",\n    \"githubUrl\": \"https://github.com/stretchr/testify\",\n    \"description\": \"A toolkit with common assertions and mocks that plays nicely with the standard library\",\n    \"owner\": \"stretchr\",\n    \"repo\": \"testify\"\n  },\n  \"Stripe.net\": {\n    \"title\": \"Stripe.net\",\n    \"repoName\": \"stripe/stripe-dotnet\",\n    \"githubUrl\": \"https://github.com/stripe/stripe-dotnet\",\n    \"description\": \"Stripe.net is a sync/async .NET 4.6.1+ client, and a portable class library for stripe.com.\",\n    \"owner\": \"stripe\",\n    \"repo\": \"stripe-dotnet\"\n  },\n  \"Stripe Java\": {\n    \"title\": \"Stripe Java\",\n    \"repoName\": \"stripe/stripe-java\",\n    \"githubUrl\": \"https://github.com/stripe/stripe-java\",\n    \"description\": \"Java library for the Stripe API.    \",\n    \"owner\": \"stripe\",\n    \"repo\": \"stripe-java\"\n  },\n  \"Stripe.js\": {\n    \"title\": \"Stripe.js\",\n    \"repoName\": \"stripe/stripe-js\",\n    \"githubUrl\": \"https://github.com/stripe/stripe-js\",\n    \"description\": \"Loading wrapper for Stripe.js\",\n    \"owner\": \"stripe\",\n    \"repo\": \"stripe-js\"\n  },\n  \"Stripe Node\": {\n    \"title\": \"Stripe Node\",\n    \"repoName\": \"stripe/stripe-node\",\n    \"githubUrl\": \"https://github.com/stripe/stripe-node\",\n    \"description\": \"Node.js library for the Stripe API.    \",\n    \"owner\": \"stripe\",\n    \"repo\": \"stripe-node\"\n  },\n  \"Stripe PHP\": {\n    \"title\": \"Stripe PHP\",\n    \"repoName\": \"stripe/stripe-php\",\n    \"githubUrl\": \"https://github.com/stripe/stripe-php\",\n    \"description\": \"PHP library for the Stripe API.    \",\n    \"owner\": \"stripe\",\n    \"repo\": \"stripe-php\"\n  },\n  \"Stripe Python\": {\n    \"title\": \"Stripe Python\",\n    \"repoName\": \"stripe/stripe-python\",\n    \"githubUrl\": \"https://github.com/stripe/stripe-python\",\n    \"description\": \"Python library for the Stripe API.    \",\n    \"owner\": \"stripe\",\n    \"repo\": \"stripe-python\"\n  },\n  \"Stripe Ruby\": {\n    \"title\": \"Stripe Ruby\",\n    \"repoName\": \"stripe/stripe-ruby\",\n    \"githubUrl\": \"https://github.com/stripe/stripe-ruby\",\n    \"description\": \"Ruby library for the Stripe API.    \",\n    \"owner\": \"stripe\",\n    \"repo\": \"stripe-ruby\"\n  },\n  \"Athena\": {\n    \"title\": \"Athena\",\n    \"repoName\": \"stuyk/altv-athena\",\n    \"githubUrl\": \"https://github.com/stuyk/altv-athena\",\n    \"description\": \"A Roleplay Framework for alt:V by Stuyk\",\n    \"owner\": \"stuyk\",\n    \"repo\": \"altv-athena\"\n  },\n  \"Styled Components\": {\n    \"title\": \"Styled Components\",\n    \"repoName\": \"styled-components/styled-components.git\",\n    \"githubUrl\": \"https://github.com/styled-components/styled-components.git\",\n    \"description\": \"Visual primitives for the component age. Use the best bits of ES6 and CSS to style your apps without stress 💅\",\n    \"owner\": \"styled-components\",\n    \"repo\": \"styled-components.git\"\n  },\n  \"Stytch Node\": {\n    \"title\": \"Stytch Node\",\n    \"repoName\": \"stytchauth/stytch-node\",\n    \"githubUrl\": \"https://github.com/stytchauth/stytch-node\",\n    \"description\": \"Official Stytch Backend SDK for Node.js\",\n    \"owner\": \"stytchauth\",\n    \"repo\": \"stytch-node\"\n  },\n  \"Submariner Operator\": {\n    \"title\": \"Submariner Operator\",\n    \"repoName\": \"submariner-io/submariner-operator\",\n    \"githubUrl\": \"https://github.com/submariner-io/submariner-operator\",\n    \"description\": \"Operator that deploys the various Submariner components.\",\n    \"owner\": \"submariner-io\",\n    \"repo\": \"submariner-operator\"\n  },\n  \"Instagrapi\": {\n    \"title\": \"Instagrapi\",\n    \"repoName\": \"subzeroid/instagrapi\",\n    \"githubUrl\": \"https://github.com/subzeroid/instagrapi\",\n    \"description\": \"🔥 The fastest and powerful Python library for Instagram Private API 2025 with HikerAPI SaaS\",\n    \"owner\": \"subzeroid\",\n    \"repo\": \"instagrapi\"\n  },\n  \"Suites\": {\n    \"title\": \"Suites\",\n    \"repoName\": \"suites-dev/suites\",\n    \"githubUrl\": \"https://github.com/suites-dev/suites\",\n    \"description\": \"Unit testing framework for dependency injection that automates mocking and simplifies test setup, reducing boilerplate code and enabling developers to build comprehensive and reliable test suites with a standardized, type-safe API\",\n    \"owner\": \"suites-dev\",\n    \"repo\": \"suites\"\n  },\n  \"Shadcn Image Cropper\": {\n    \"title\": \"Shadcn Image Cropper\",\n    \"repoName\": \"sujjeee/shadcn-image-cropper\",\n    \"githubUrl\": \"https://github.com/sujjeee/shadcn-image-cropper\",\n    \"description\": \"Image cropper built with shadcn/ui and react-image-crop\",\n    \"owner\": \"sujjeee\",\n    \"repo\": \"shadcn-image-cropper\"\n  },\n  \"Supabase SSR\": {\n    \"title\": \"Supabase SSR\",\n    \"repoName\": \"supabase/ssr\",\n    \"githubUrl\": \"https://github.com/supabase/ssr\",\n    \"description\": \"Supabase clients for use in server-side rendering frameworks.\",\n    \"owner\": \"supabase\",\n    \"repo\": \"ssr\"\n  },\n  \"Supabase\": {\n    \"title\": \"Supabase\",\n    \"repoName\": \"supabase/supabase\",\n    \"githubUrl\": \"https://github.com/supabase/supabase\",\n    \"description\": \"The open source Firebase alternative. Supabase gives you a dedicated Postgres database to build your web, mobile, and AI applications.\",\n    \"owner\": \"supabase\",\n    \"repo\": \"supabase\"\n  },\n  \"Supabase Flutter\": {\n    \"title\": \"Supabase Flutter\",\n    \"repoName\": \"supabase/supabase-flutter\",\n    \"githubUrl\": \"https://github.com/supabase/supabase-flutter\",\n    \"description\": \"Flutter integration for Supabase. This package makes it simple for developers to build secure and scalable products.\",\n    \"owner\": \"supabase\",\n    \"repo\": \"supabase-flutter\"\n  },\n  \"Supabase JS\": {\n    \"title\": \"Supabase JS\",\n    \"repoName\": \"supabase/supabase-js\",\n    \"githubUrl\": \"https://github.com/supabase/supabase-js\",\n    \"description\": \"An isomorphic Javascript client for Supabase. Query your Supabase database, subscribe to realtime events, upload and download files, browse typescript examples, invoke postgres functions via rpc, invoke supabase edge functions, query pgvector.\",\n    \"owner\": \"supabase\",\n    \"repo\": \"supabase-js\"\n  },\n  \"Supabase Python\": {\n    \"title\": \"Supabase Python\",\n    \"repoName\": \"supabase/supabase-py\",\n    \"githubUrl\": \"https://github.com/supabase/supabase-py\",\n    \"description\": \"Python Client for Supabase. Query Postgres from Flask, Django, FastAPI. Python user authentication, security policies, edge functions, file storage, and realtime data streaming. Good first issue.\",\n    \"owner\": \"supabase\",\n    \"repo\": \"supabase-py\"\n  },\n  \"Supabase Swift\": {\n    \"title\": \"Supabase Swift\",\n    \"repoName\": \"supabase/supabase-swift\",\n    \"githubUrl\": \"https://github.com/supabase/supabase-swift\",\n    \"description\": \"A Swift client for Supabase\",\n    \"owner\": \"supabase\",\n    \"repo\": \"supabase-swift\"\n  },\n  \"Supadata SDK\": {\n    \"title\": \"Supadata SDK\",\n    \"repoName\": \"supadata-ai/js\",\n    \"githubUrl\": \"https://github.com/supadata-ai/js\",\n    \"description\": \"Official TypeScript/JavaScript SDK for the Supadata API.\",\n    \"owner\": \"supadata-ai\",\n    \"repo\": \"js\"\n  },\n  \"Superalgos\": {\n    \"title\": \"Superalgos\",\n    \"repoName\": \"superalgos/superalgos\",\n    \"githubUrl\": \"https://github.com/superalgos/superalgos\",\n    \"description\": \"Free, open-source crypto trading bot, automated bitcoin / cryptocurrency trading software, algorithmic trading bots. Visually design your crypto trading bot, leveraging an integrated charting system, data-mining, backtesting, paper trading, and multi-server crypto bot deployments.\",\n    \"owner\": \"superalgos\",\n    \"repo\": \"superalgos\"\n  },\n  \"Fly Docs\": {\n    \"title\": \"Fly Docs\",\n    \"repoName\": \"superfly/docs\",\n    \"githubUrl\": \"https://github.com/superfly/docs\",\n    \"description\": \"\",\n    \"owner\": \"superfly\",\n    \"repo\": \"docs\"\n  },\n  \"Neverthrow\": {\n    \"title\": \"Neverthrow\",\n    \"repoName\": \"supermacro/neverthrow\",\n    \"githubUrl\": \"https://github.com/supermacro/neverthrow\",\n    \"description\": \"Type-Safe Errors for JS & TypeScript\",\n    \"owner\": \"supermacro\",\n    \"repo\": \"neverthrow\"\n  },\n  \"SuperMemory\": {\n    \"title\": \"SuperMemory\",\n    \"repoName\": \"supermemoryai/supermemory\",\n    \"githubUrl\": \"https://github.com/supermemoryai/supermemory\",\n    \"description\": \"Build your own second brain with supermemory. It's a ChatGPT for your bookmarks. Import tweets or save websites and content using the chrome extension.\",\n    \"owner\": \"supermemoryai\",\n    \"repo\": \"supermemory\"\n  },\n  \"SuperTokens Auth React\": {\n    \"title\": \"SuperTokens Auth React\",\n    \"repoName\": \"supertokens/supertokens-auth-react\",\n    \"githubUrl\": \"https://github.com/supertokens/supertokens-auth-react\",\n    \"description\": \"ReactJS authentication module for SuperTokens\",\n    \"owner\": \"supertokens\",\n    \"repo\": \"supertokens-auth-react\"\n  },\n  \"SuperTokens Core\": {\n    \"title\": \"SuperTokens Core\",\n    \"repoName\": \"supertokens/supertokens-core\",\n    \"githubUrl\": \"https://github.com/supertokens/supertokens-core\",\n    \"description\": \"Open source alternative to Auth0 / Firebase Auth / AWS Cognito \",\n    \"owner\": \"supertokens\",\n    \"repo\": \"supertokens-core\"\n  },\n  \"SuperTokens Web JS\": {\n    \"title\": \"SuperTokens Web JS\",\n    \"repoName\": \"supertokens/supertokens-web-js\",\n    \"githubUrl\": \"https://github.com/supertokens/supertokens-web-js\",\n    \"description\": \"SuperTokens SDK for vanilla JS for all recipes\",\n    \"owner\": \"supertokens\",\n    \"repo\": \"supertokens-web-js\"\n  },\n  \"React Native Superwall\": {\n    \"title\": \"React Native Superwall\",\n    \"repoName\": \"superwall/react-native-superwall.git\",\n    \"githubUrl\": \"https://github.com/superwall/react-native-superwall.git\",\n    \"description\": \"Remotely configure every aspect of your paywall and double your revenue.\",\n    \"owner\": \"superwall\",\n    \"repo\": \"react-native-superwall.git\"\n  },\n  \"Monaco React\": {\n    \"title\": \"Monaco React\",\n    \"repoName\": \"suren-atoyan/monaco-react\",\n    \"githubUrl\": \"https://github.com/suren-atoyan/monaco-react\",\n    \"description\": \"Monaco Editor for React - use the monaco-editor in any React application without needing to use webpack (or rollup/parcel/etc) configuration files / plugins\",\n    \"owner\": \"suren-atoyan\",\n    \"repo\": \"monaco-react\"\n  },\n  \"SurrealDB\": {\n    \"title\": \"SurrealDB\",\n    \"repoName\": \"surrealdb/surrealdb\",\n    \"githubUrl\": \"https://github.com/surrealdb/surrealdb\",\n    \"description\": \"A scalable, distributed, collaborative, document-graph database, for the realtime web\",\n    \"owner\": \"surrealdb\",\n    \"repo\": \"surrealdb\"\n  },\n  \"SurveyJS Survey Analytics\": {\n    \"title\": \"SurveyJS Survey Analytics\",\n    \"repoName\": \"surveyjs/survey-analytics\",\n    \"githubUrl\": \"https://github.com/surveyjs/survey-analytics\",\n    \"description\": \"Customizable JavaScript library to create interactive survey data dashboards and facilitate survey results analysis for your end-users.\",\n    \"owner\": \"surveyjs\",\n    \"repo\": \"survey-analytics\"\n  },\n  \"Survey Creator\": {\n    \"title\": \"Survey Creator\",\n    \"repoName\": \"surveyjs/survey-creator\",\n    \"githubUrl\": \"https://github.com/surveyjs/survey-creator\",\n    \"description\": \"Scalable open-source survey software to generate dynamic JSON-driven forms within your JavaScript application. The form builder features a drag-and-drop UI, CSS Theme Editor, and GUI for conditional logic and form branching. \",\n    \"owner\": \"surveyjs\",\n    \"repo\": \"survey-creator\"\n  },\n  \"SurveyJS\": {\n    \"title\": \"SurveyJS\",\n    \"repoName\": \"surveyjs/survey-library\",\n    \"githubUrl\": \"https://github.com/surveyjs/survey-library\",\n    \"description\": \"Free JavaScript form builder library with integration for React, Angular, Vue, jQuery, and Knockout.\",\n    \"owner\": \"surveyjs\",\n    \"repo\": \"survey-library\"\n  },\n  \"SurveyJS PDF\": {\n    \"title\": \"SurveyJS PDF\",\n    \"repoName\": \"surveyjs/survey-pdf\",\n    \"githubUrl\": \"https://github.com/surveyjs/survey-pdf\",\n    \"description\": \"Supplementary component to the SurveyJS Form Library to download surveys as PDF files and generate editable PDF forms.\",\n    \"owner\": \"surveyjs\",\n    \"repo\": \"survey-pdf\"\n  },\n  \"UserUtils\": {\n    \"title\": \"UserUtils\",\n    \"repoName\": \"sv443-network/userutils\",\n    \"githubUrl\": \"https://github.com/sv443-network/userutils\",\n    \"description\": \"General purpose DOM/GreaseMonkey library: register listeners for when CSS selectors exist, intercept events, create persistent & synchronous data stores, modify the DOM more easily and much more\",\n    \"owner\": \"sv443-network\",\n    \"repo\": \"userutils\"\n  },\n  \"Runed\": {\n    \"title\": \"Runed\",\n    \"repoName\": \"svecosystem/runed\",\n    \"githubUrl\": \"https://github.com/svecosystem/runed\",\n    \"description\": \"Magical utilities for your Svelte applications.\",\n    \"owner\": \"svecosystem\",\n    \"repo\": \"runed\"\n  },\n  \"SvelteKit\": {\n    \"title\": \"SvelteKit\",\n    \"repoName\": \"sveltejs/kit\",\n    \"githubUrl\": \"https://github.com/sveltejs/kit\",\n    \"description\": \"web development, streamlined\",\n    \"owner\": \"sveltejs\",\n    \"repo\": \"kit\"\n  },\n  \"Swagger Codegen\": {\n    \"title\": \"Swagger Codegen\",\n    \"repoName\": \"swagger-api/swagger-codegen\",\n    \"githubUrl\": \"https://github.com/swagger-api/swagger-codegen\",\n    \"description\": \"swagger-codegen contains a template-driven engine to generate documentation, API clients and server stubs in different languages by parsing your OpenAPI / Swagger definition.\",\n    \"owner\": \"swagger-api\",\n    \"repo\": \"swagger-codegen\"\n  },\n  \"Swagger JS\": {\n    \"title\": \"Swagger JS\",\n    \"repoName\": \"swagger-api/swagger-js\",\n    \"githubUrl\": \"https://github.com/swagger-api/swagger-js\",\n    \"description\": \"Javascript library to connect to swagger-enabled APIs via browser or nodejs\",\n    \"owner\": \"swagger-api\",\n    \"repo\": \"swagger-js\"\n  },\n  \"Swagger UI\": {\n    \"title\": \"Swagger UI\",\n    \"repoName\": \"swagger-api/swagger-ui\",\n    \"githubUrl\": \"https://github.com/swagger-api/swagger-ui\",\n    \"description\": \"Swagger UI is a collection of HTML, JavaScript, and CSS assets that dynamically generate beautiful documentation from a Swagger-compliant API.\",\n    \"owner\": \"swagger-api\",\n    \"repo\": \"swagger-ui\"\n  },\n  \"Swag\": {\n    \"title\": \"Swag\",\n    \"repoName\": \"swaggo/swag\",\n    \"githubUrl\": \"https://github.com/swaggo/swag\",\n    \"description\": \"Automatically generate RESTful API documentation with Swagger 2.0 for Go.\",\n    \"owner\": \"swaggo\",\n    \"repo\": \"swag\"\n  },\n  \"SWC\": {\n    \"title\": \"SWC\",\n    \"repoName\": \"swc-project/swc\",\n    \"githubUrl\": \"https://github.com/swc-project/swc\",\n    \"description\": \"Rust-based platform for the Web\",\n    \"owner\": \"swc-project\",\n    \"repo\": \"swc\"\n  },\n  \"Swell JS\": {\n    \"title\": \"Swell JS\",\n    \"repoName\": \"swellstores/swell-js\",\n    \"githubUrl\": \"https://github.com/swellstores/swell-js\",\n    \"description\": \"JS library for building storefronts and checkouts with Swell ecommerce.\",\n    \"owner\": \"swellstores\",\n    \"repo\": \"swell-js\"\n  },\n  \"Swell NodeJS\": {\n    \"title\": \"Swell NodeJS\",\n    \"repoName\": \"swellstores/swell-node\",\n    \"githubUrl\": \"https://github.com/swellstores/swell-node\",\n    \"description\": \"Swell NodeJS library for building storefronts and checkouts with Swell ecommerce.\",\n    \"owner\": \"swellstores\",\n    \"repo\": \"swell-node\"\n  },\n  \"Swift\": {\n    \"title\": \"Swift\",\n    \"repoName\": \"swiftlang/swift\",\n    \"githubUrl\": \"https://github.com/swiftlang/swift\",\n    \"description\": \"The Swift Programming Language\",\n    \"owner\": \"swiftlang\",\n    \"repo\": \"swift\"\n  },\n  \"Swift Testing\": {\n    \"title\": \"Swift Testing\",\n    \"repoName\": \"swiftlang/swift-testing\",\n    \"githubUrl\": \"https://github.com/swiftlang/swift-testing\",\n    \"description\": \"A modern, expressive testing package for Swift\",\n    \"owner\": \"swiftlang\",\n    \"repo\": \"swift-testing\"\n  },\n  \"NiceGUI\": {\n    \"title\": \"NiceGUI\",\n    \"repoName\": \"zauberzeug/nicegui\",\n    \"githubUrl\": \"https://github.com/zauberzeug/nicegui\",\n    \"description\": \"Create web-based user interfaces with Python. The nice way.\",\n    \"owner\": \"zauberzeug\",\n    \"repo\": \"nicegui\"\n  },\n  \"Sylius\": {\n    \"title\": \"Sylius\",\n    \"repoName\": \"sylius/sylius\",\n    \"githubUrl\": \"https://github.com/sylius/sylius\",\n    \"description\": \"Open Source eCommerce Framework on Symfony\",\n    \"owner\": \"sylius\",\n    \"repo\": \"sylius\"\n  },\n  \"AdalFlow\": {\n    \"title\": \"AdalFlow\",\n    \"repoName\": \"sylphai-inc/adalflow\",\n    \"githubUrl\": \"https://github.com/sylphai-inc/adalflow\",\n    \"description\": \"AdalFlow: The library to build & auto-optimize LLM applications.\",\n    \"owner\": \"sylphai-inc\",\n    \"repo\": \"adalflow\"\n  },\n  \"Symfony\": {\n    \"title\": \"Symfony\",\n    \"repoName\": \"symfony/symfony-docs\",\n    \"githubUrl\": \"https://github.com/symfony/symfony-docs\",\n    \"description\": \"The Symfony documentation\",\n    \"owner\": \"symfony\",\n    \"repo\": \"symfony-docs\"\n  },\n  \"Symfony UX\": {\n    \"title\": \"Symfony UX\",\n    \"repoName\": \"symfony/ux\",\n    \"githubUrl\": \"https://github.com/symfony/ux\",\n    \"description\": \"Symfony UX initiative: a JavaScript ecosystem for Symfony\",\n    \"owner\": \"symfony\",\n    \"repo\": \"ux\"\n  },\n  \"Syncfusion Blazor\": {\n    \"title\": \"Syncfusion Blazor\",\n    \"repoName\": \"syncfusion/blazor-samples\",\n    \"githubUrl\": \"https://github.com/syncfusion/blazor-samples\",\n    \"description\": \"Explore and learn Syncfusion Blazor components using large collection of demos, example applications and tutorial samples\",\n    \"owner\": \"syncfusion\",\n    \"repo\": \"blazor-samples\"\n  },\n  \"Syncfusion JavaScript UI Controls\": {\n    \"title\": \"Syncfusion JavaScript UI Controls\",\n    \"repoName\": \"syncfusion/ej2-javascript-ui-controls.git\",\n    \"githubUrl\": \"https://github.com/syncfusion/ej2-javascript-ui-controls.git\",\n    \"description\": \"Syncfusion JavaScript UI controls library offer more than 50+ cross-browser, responsive, and lightweight HTML5 UI controls for building modern web applications.\",\n    \"owner\": \"syncfusion\",\n    \"repo\": \"ej2-javascript-ui-controls.git\"\n  },\n  \"Syncthing GTK\": {\n    \"title\": \"Syncthing GTK\",\n    \"repoName\": \"syncthing-gtk/syncthing-gtk\",\n    \"githubUrl\": \"https://github.com/syncthing-gtk/syncthing-gtk\",\n    \"description\": \"GTK & Python based GUI for Syncthing\",\n    \"owner\": \"syncthing-gtk\",\n    \"repo\": \"syncthing-gtk\"\n  },\n  \"Syncthing\": {\n    \"title\": \"Syncthing\",\n    \"repoName\": \"syncthing/syncthing\",\n    \"githubUrl\": \"https://github.com/syncthing/syncthing\",\n    \"description\": \"Open Source Continuous File Synchronization\",\n    \"owner\": \"syncthing\",\n    \"repo\": \"syncthing\"\n  },\n  \"Create T3 App\": {\n    \"title\": \"Create T3 App\",\n    \"repoName\": \"t3-oss/create-t3-app\",\n    \"githubUrl\": \"https://github.com/t3-oss/create-t3-app\",\n    \"description\": \"The best way to start a full-stack, typesafe Next.js app \",\n    \"owner\": \"t3-oss\",\n    \"repo\": \"create-t3-app\"\n  },\n  \"T3 Env\": {\n    \"title\": \"T3 Env\",\n    \"repoName\": \"t3-oss/t3-env\",\n    \"githubUrl\": \"https://github.com/t3-oss/t3-env\",\n    \"description\": \"\",\n    \"owner\": \"t3-oss\",\n    \"repo\": \"t3-env\"\n  },\n  \"TA-Lib Python\": {\n    \"title\": \"TA-Lib Python\",\n    \"repoName\": \"ta-lib/ta-lib-python\",\n    \"githubUrl\": \"https://github.com/ta-lib/ta-lib-python\",\n    \"description\": \"Python wrapper for TA-Lib (http://ta-lib.org/).\",\n    \"owner\": \"ta-lib\",\n    \"repo\": \"ta-lib-python\"\n  },\n  \"Tabler\": {\n    \"title\": \"Tabler\",\n    \"repoName\": \"tabler/tabler\",\n    \"githubUrl\": \"https://github.com/tabler/tabler\",\n    \"description\": \"Tabler is free and open-source HTML Dashboard UI Kit built on Bootstrap\",\n    \"owner\": \"tabler\",\n    \"repo\": \"tabler\"\n  },\n  \"Swapy\": {\n    \"title\": \"Swapy\",\n    \"repoName\": \"tahash/swapy\",\n    \"githubUrl\": \"https://github.com/tahash/swapy\",\n    \"description\": \"✨ A framework-agnostic tool that converts any layout into a drag-to-swap one with just a few lines of code https://swapy.tahazsh.com/\",\n    \"owner\": \"tahash\",\n    \"repo\": \"swapy\"\n  },\n  \"Taiga UI\": {\n    \"title\": \"Taiga UI\",\n    \"repoName\": \"taiga-family/taiga-ui\",\n    \"githubUrl\": \"https://github.com/taiga-family/taiga-ui\",\n    \"description\": \"Angular UI Kit and components library for awesome people\",\n    \"owner\": \"taiga-family\",\n    \"repo\": \"taiga-ui\"\n  },\n  \"Tailscale\": {\n    \"title\": \"Tailscale\",\n    \"repoName\": \"tailscale/tailscale\",\n    \"githubUrl\": \"https://github.com/tailscale/tailscale\",\n    \"description\": \"The easiest, most secure way to use WireGuard and 2FA.\",\n    \"owner\": \"tailscale\",\n    \"repo\": \"tailscale\"\n  },\n  \"Headless UI\": {\n    \"title\": \"Headless UI\",\n    \"repoName\": \"tailwindlabs/headlessui\",\n    \"githubUrl\": \"https://github.com/tailwindlabs/headlessui\",\n    \"description\": \"Completely unstyled, fully accessible UI components, designed to integrate beautifully with Tailwind CSS.\",\n    \"owner\": \"tailwindlabs\",\n    \"repo\": \"headlessui\"\n  },\n  \"Prettier Plugin Tailwind CSS\": {\n    \"title\": \"Prettier Plugin Tailwind CSS\",\n    \"repoName\": \"tailwindlabs/prettier-plugin-tailwindcss\",\n    \"githubUrl\": \"https://github.com/tailwindlabs/prettier-plugin-tailwindcss\",\n    \"description\": \"A Prettier plugin for Tailwind CSS that automatically sorts classes based on our recommended class order.\",\n    \"owner\": \"tailwindlabs\",\n    \"repo\": \"prettier-plugin-tailwindcss\"\n  },\n  \"Tailwind CSS\": {\n    \"title\": \"Tailwind CSS\",\n    \"repoName\": \"tailwindlabs/tailwindcss.git\",\n    \"githubUrl\": \"https://github.com/tailwindlabs/tailwindcss.git\",\n    \"description\": \"A utility-first CSS framework for rapid UI development.\",\n    \"owner\": \"tailwindlabs\",\n    \"repo\": \"tailwindcss.git\"\n  },\n  \"React Native Actions Sheet Replacement\": {\n    \"title\": \"React Native Actions Sheet Replacement\",\n    \"repoName\": \"talktothelaw/react-native-actions-sheet-replacement\",\n    \"githubUrl\": \"https://github.com/talktothelaw/react-native-actions-sheet-replacement\",\n    \"description\": \"\",\n    \"owner\": \"talktothelaw\",\n    \"repo\": \"react-native-actions-sheet-replacement\"\n  },\n  \"Tamagui\": {\n    \"title\": \"Tamagui\",\n    \"repoName\": \"tamagui/tamagui\",\n    \"githubUrl\": \"https://github.com/tamagui/tamagui\",\n    \"description\": \"Style React fast with 100% parity on React Native, an optional UI kit, and optimizing compiler.\",\n    \"owner\": \"tamagui\",\n    \"repo\": \"tamagui\"\n  },\n  \"Create TSRouter App\": {\n    \"title\": \"Create TSRouter App\",\n    \"repoName\": \"tanstack/create-tsrouter-app\",\n    \"githubUrl\": \"https://github.com/tanstack/create-tsrouter-app\",\n    \"description\": \"Create-tsrouter-app is drop-in replacement for create-react-app that builds TanStack Router based SPA applications\",\n    \"owner\": \"tanstack\",\n    \"repo\": \"create-tsrouter-app\"\n  },\n  \"TanStack Form\": {\n    \"title\": \"TanStack Form\",\n    \"repoName\": \"tanstack/form\",\n    \"githubUrl\": \"https://github.com/tanstack/form\",\n    \"description\": \"🤖 Headless, performant, and type-safe form state management for TS/JS, React, Vue, Angular, Solid, and Lit.\",\n    \"owner\": \"tanstack\",\n    \"repo\": \"form\"\n  },\n  \"TanStack Query\": {\n    \"title\": \"TanStack Query\",\n    \"repoName\": \"tanstack/query\",\n    \"githubUrl\": \"https://github.com/tanstack/query\",\n    \"description\": \"🤖 Powerful asynchronous state management, server-state utilities and data fetching for the web. TS/JS, React Query, Solid Query, Svelte Query and Vue Query.\",\n    \"owner\": \"tanstack\",\n    \"repo\": \"query\"\n  },\n  \"TanStack Router\": {\n    \"title\": \"TanStack Router\",\n    \"repoName\": \"tanstack/router\",\n    \"githubUrl\": \"https://github.com/tanstack/router\",\n    \"description\": \"🤖 Fully typesafe Router for React (and friends) w/ built-in caching, 1st class search-param APIs, client-side cache integration and isomorphic rendering.\",\n    \"owner\": \"tanstack\",\n    \"repo\": \"router\"\n  },\n  \"TanStack Store\": {\n    \"title\": \"TanStack Store\",\n    \"repoName\": \"tanstack/store\",\n    \"githubUrl\": \"https://github.com/tanstack/store\",\n    \"description\": \"🤖 Framework agnostic, type-safe store w/ reactive framework adapters\",\n    \"owner\": \"tanstack\",\n    \"repo\": \"store\"\n  },\n  \"TanStack Table\": {\n    \"title\": \"TanStack Table\",\n    \"repoName\": \"tanstack/table\",\n    \"githubUrl\": \"https://github.com/tanstack/table\",\n    \"description\": \"🤖 Headless UI for building powerful tables & datagrids for TS/JS -  React-Table, Vue-Table, Solid-Table, Svelte-Table\",\n    \"owner\": \"tanstack\",\n    \"repo\": \"table\"\n  },\n  \"TanStack\": {\n    \"title\": \"TanStack\",\n    \"repoName\": \"tanstack/tanstack.com\",\n    \"githubUrl\": \"https://github.com/tanstack/tanstack.com\",\n    \"description\": \"The marketing and docs site for all TanStack projects\",\n    \"owner\": \"tanstack\",\n    \"repo\": \"tanstack.com\"\n  },\n  \"TanStack Virtual\": {\n    \"title\": \"TanStack Virtual\",\n    \"repoName\": \"tanstack/virtual\",\n    \"githubUrl\": \"https://github.com/tanstack/virtual\",\n    \"description\": \"🤖 Headless UI for Virtualizing Large Element Lists in JS/TS, React, Solid, Vue and Svelte\",\n    \"owner\": \"tanstack\",\n    \"repo\": \"virtual\"\n  },\n  \"TDengine\": {\n    \"title\": \"TDengine\",\n    \"repoName\": \"taosdata/tdengine\",\n    \"githubUrl\": \"https://github.com/taosdata/tdengine\",\n    \"description\": \"High-performance, scalable time-series database designed for Industrial IoT (IIoT) scenarios\",\n    \"owner\": \"taosdata\",\n    \"repo\": \"tdengine\"\n  },\n  \"BullMQ\": {\n    \"title\": \"BullMQ\",\n    \"repoName\": \"taskforcesh/bullmq\",\n    \"githubUrl\": \"https://github.com/taskforcesh/bullmq\",\n    \"description\": \"BullMQ - Message Queue and Batch processing for NodeJS and Python based on Redis\",\n    \"owner\": \"taskforcesh\",\n    \"repo\": \"bullmq\"\n  },\n  \"Tauri\": {\n    \"title\": \"Tauri\",\n    \"repoName\": \"tauri-apps/tauri-docs\",\n    \"githubUrl\": \"https://github.com/tauri-apps/tauri-docs\",\n    \"description\": \"The source for all Tauri project documentation.\",\n    \"owner\": \"tauri-apps\",\n    \"repo\": \"tauri-docs\"\n  },\n  \"DIContainer Swift\": {\n    \"title\": \"DIContainer Swift\",\n    \"repoName\": \"tavernari/dicontainer\",\n    \"githubUrl\": \"https://github.com/tavernari/dicontainer\",\n    \"description\": \"DIContainer Swift is an ultra-light dependency injection container made to help developers to handle dependencies easily. It works with Swift 5.1 or above.\",\n    \"owner\": \"tavernari\",\n    \"repo\": \"dicontainer\"\n  },\n  \"SimpleMock\": {\n    \"title\": \"SimpleMock\",\n    \"repoName\": \"tavernari/simplemock\",\n    \"githubUrl\": \"https://github.com/tavernari/simplemock\",\n    \"description\": \"SimpleMock is a very light way to create Mocks as you need.\",\n    \"owner\": \"tavernari\",\n    \"repo\": \"simplemock\"\n  },\n  \"StringContainsOperators\": {\n    \"title\": \"StringContainsOperators\",\n    \"repoName\": \"tavernari/stringcontainsoperators\",\n    \"githubUrl\": \"https://github.com/tavernari/stringcontainsoperators\",\n    \"description\": \"StringContainsOperators is a Swift library that provides custom operators for performing advanced string search operations with an intuitive and expressive syntax. This library simplifies the process of checking if a string contains multiple substrings with different logical conditions.\",\n    \"owner\": \"tavernari\",\n    \"repo\": \"stringcontainsoperators\"\n  },\n  \"ChatGPT Telegram Workers\": {\n    \"title\": \"ChatGPT Telegram Workers\",\n    \"repoName\": \"tbxark/chatgpt-telegram-workers\",\n    \"githubUrl\": \"https://github.com/tbxark/chatgpt-telegram-workers\",\n    \"description\": \"Easily deploy your Telegram ChatGPT bot on Cloudflare Workers (or Vercel, Docker...).\",\n    \"owner\": \"tbxark\",\n    \"repo\": \"chatgpt-telegram-workers\"\n  },\n  \"UAE Design System\": {\n    \"title\": \"UAE Design System\",\n    \"repoName\": \"tdra-ae/aegov-dls\",\n    \"githubUrl\": \"https://github.com/tdra-ae/aegov-dls\",\n    \"description\": \"The UAE Design System version 2.0 presents a manual for federal government entities (FGEs) of the United Arab Emirates to plan and arrange content on their websites with simplicity and creativity. \",\n    \"owner\": \"tdra-ae\",\n    \"repo\": \"aegov-dls\"\n  },\n  \"Ash Authentication\": {\n    \"title\": \"Ash Authentication\",\n    \"repoName\": \"team-alembic/ash_authentication\",\n    \"githubUrl\": \"https://github.com/team-alembic/ash_authentication\",\n    \"description\": \"The Ash Authentication framework\",\n    \"owner\": \"team-alembic\",\n    \"repo\": \"ash_authentication\"\n  },\n  \"Telnyx WebRTC SDK\": {\n    \"title\": \"Telnyx WebRTC SDK\",\n    \"repoName\": \"team-telnyx/webrtc\",\n    \"githubUrl\": \"https://github.com/team-telnyx/webrtc\",\n    \"description\": \"SDK for Telnyx's WebRTC platform\",\n    \"owner\": \"team-telnyx\",\n    \"repo\": \"webrtc\"\n  },\n  \"Zod to Vertex Schema\": {\n    \"title\": \"Zod to Vertex Schema\",\n    \"repoName\": \"techery/zod-to-vertex-schema\",\n    \"githubUrl\": \"https://github.com/techery/zod-to-vertex-schema\",\n    \"description\": \"\",\n    \"owner\": \"techery\",\n    \"repo\": \"zod-to-vertex-schema\"\n  },\n  \"Tecton HTTP Client Python\": {\n    \"title\": \"Tecton HTTP Client Python\",\n    \"repoName\": \"tecton-ai/tecton-http-client-python\",\n    \"githubUrl\": \"https://github.com/tecton-ai/tecton-http-client-python\",\n    \"description\": \"\",\n    \"owner\": \"tecton-ai\",\n    \"repo\": \"tecton-http-client-python\"\n  },\n  \"Tecton Sample Repo\": {\n    \"title\": \"Tecton Sample Repo\",\n    \"repoName\": \"tecton-ai/tecton-sample-repo\",\n    \"githubUrl\": \"https://github.com/tecton-ai/tecton-sample-repo\",\n    \"description\": \"Tecton's Sample Repository of Feature Definitions\",\n    \"owner\": \"tecton-ai\",\n    \"repo\": \"tecton-sample-repo\"\n  },\n  \"Audiobookshelf API\": {\n    \"title\": \"Audiobookshelf API\",\n    \"repoName\": \"teekeks/audiobookshelfapi\",\n    \"githubUrl\": \"https://github.com/teekeks/audiobookshelfapi\",\n    \"description\": \"Python implementation of the Audiobookshelf API\",\n    \"owner\": \"teekeks\",\n    \"repo\": \"audiobookshelfapi\"\n  },\n  \"PyTwitchAPI\": {\n    \"title\": \"PyTwitchAPI\",\n    \"repoName\": \"teekeks/pytwitchapi\",\n    \"githubUrl\": \"https://github.com/teekeks/pytwitchapi\",\n    \"description\": \"A Python 3.7 compatible implementation of the Twitch API, EventSub, PubSub and Chat\",\n    \"owner\": \"teekeks\",\n    \"repo\": \"pytwitchapi\"\n  },\n  \"Tekton\": {\n    \"title\": \"Tekton\",\n    \"repoName\": \"tektoncd/website\",\n    \"githubUrl\": \"https://github.com/tektoncd/website\",\n    \"description\": \"Tekton Website\",\n    \"owner\": \"tektoncd\",\n    \"repo\": \"website\"\n  },\n  \"Telegram Apps\": {\n    \"title\": \"Telegram Apps\",\n    \"repoName\": \"telegram-mini-apps/telegram-apps\",\n    \"githubUrl\": \"https://github.com/telegram-mini-apps/telegram-apps\",\n    \"description\": \"Made from scratch TypeScript packages, examples and documentation you will surely need to start developing on Telegram Mini Apps.\",\n    \"owner\": \"telegram-mini-apps\",\n    \"repo\": \"telegram-apps\"\n  },\n  \"Telegram Bot\": {\n    \"title\": \"Telegram Bot\",\n    \"repoName\": \"telegrambots/telegram.bot\",\n    \"githubUrl\": \"https://github.com/telegrambots/telegram.bot\",\n    \"description\": \".NET Client for Telegram Bot API\",\n    \"owner\": \"telegrambots\",\n    \"repo\": \"telegram.bot\"\n  },\n  \"Kendo UI for Angular\": {\n    \"title\": \"Kendo UI for Angular\",\n    \"repoName\": \"telerik/kendo-angular\",\n    \"githubUrl\": \"https://github.com/telerik/kendo-angular\",\n    \"description\": \"Issue tracker - Kendo UI for Angular\",\n    \"owner\": \"telerik\",\n    \"repo\": \"kendo-angular\"\n  },\n  \"KendoReact\": {\n    \"title\": \"KendoReact\",\n    \"repoName\": \"telerik/kendo-react.git\",\n    \"githubUrl\": \"https://github.com/telerik/kendo-react.git\",\n    \"description\": \"Issue tracker - KendoReact http://www.telerik.com/kendo-react-ui/\",\n    \"owner\": \"telerik\",\n    \"repo\": \"kendo-react.git\"\n  },\n  \"Telerik UI for MAUI\": {\n    \"title\": \"Telerik UI for MAUI\",\n    \"repoName\": \"telerik/maui-docs\",\n    \"githubUrl\": \"https://github.com/telerik/maui-docs\",\n    \"description\": \"Public Documentation for Telerik UI for MAUI\",\n    \"owner\": \"telerik\",\n    \"repo\": \"maui-docs\"\n  },\n  \"Telerik UI for .NET MAUI\": {\n    \"title\": \"Telerik UI for .NET MAUI\",\n    \"repoName\": \"telerik/maui-samples.git\",\n    \"githubUrl\": \"https://github.com/telerik/maui-samples.git\",\n    \"description\": \"Repo containing source for Telerik UI for .NET MAUI showcase apps\",\n    \"owner\": \"telerik\",\n    \"repo\": \"maui-samples.git\"\n  },\n  \"Telerik Reporting\": {\n    \"title\": \"Telerik Reporting\",\n    \"repoName\": \"telerik/reporting-docs.git\",\n    \"githubUrl\": \"https://github.com/telerik/reporting-docs.git\",\n    \"description\": \"Public Documentation for Reporting\",\n    \"owner\": \"telerik\",\n    \"repo\": \"reporting-docs.git\"\n  },\n  \"Telerik UI for WinForms\": {\n    \"title\": \"Telerik UI for WinForms\",\n    \"repoName\": \"telerik/winforms-docs.git\",\n    \"githubUrl\": \"https://github.com/telerik/winforms-docs.git\",\n    \"description\": \"This repository contains the content for the Telerik UI for WinForms documentation.\",\n    \"owner\": \"telerik\",\n    \"repo\": \"winforms-docs.git\"\n  },\n  \"Telerik UI for WPF\": {\n    \"title\": \"Telerik UI for WPF\",\n    \"repoName\": \"telerik/xaml-docs\",\n    \"githubUrl\": \"https://github.com/telerik/xaml-docs\",\n    \"description\": \"Public Documentation for Telerik UI for WPF \",\n    \"owner\": \"telerik\",\n    \"repo\": \"xaml-docs\"\n  },\n  \"Terraform Provider Proxmox\": {\n    \"title\": \"Terraform Provider Proxmox\",\n    \"repoName\": \"telmate/terraform-provider-proxmox\",\n    \"githubUrl\": \"https://github.com/telmate/terraform-provider-proxmox\",\n    \"description\": \"Terraform provider plugin for proxmox\",\n    \"owner\": \"telmate\",\n    \"repo\": \"terraform-provider-proxmox\"\n  },\n  \"Telosys\": {\n    \"title\": \"Telosys\",\n    \"repoName\": \"telosys-tools-bricks/telosys-doc\",\n    \"githubUrl\": \"https://github.com/telosys-tools-bricks/telosys-doc\",\n    \"description\": \"Telosys user documentation \",\n    \"owner\": \"telosys-tools-bricks\",\n    \"repo\": \"telosys-doc\"\n  },\n  \"Telosys DSL Parser\": {\n    \"title\": \"Telosys DSL Parser\",\n    \"repoName\": \"telosys-tools-bricks/telosys-tools-dsl-parser\",\n    \"githubUrl\": \"https://github.com/telosys-tools-bricks/telosys-tools-dsl-parser\",\n    \"description\": \"Telosys DSL MODEL management including parser\",\n    \"owner\": \"telosys-tools-bricks\",\n    \"repo\": \"telosys-tools-dsl-parser\"\n  },\n  \"Temporal Python SDK\": {\n    \"title\": \"Temporal Python SDK\",\n    \"repoName\": \"temporalio/sdk-python\",\n    \"githubUrl\": \"https://github.com/temporalio/sdk-python\",\n    \"description\": \"Temporal Python SDK\",\n    \"owner\": \"temporalio\",\n    \"repo\": \"sdk-python\"\n  },\n  \"Temporal TypeScript SDK\": {\n    \"title\": \"Temporal TypeScript SDK\",\n    \"repoName\": \"temporalio/sdk-typescript\",\n    \"githubUrl\": \"https://github.com/temporalio/sdk-typescript\",\n    \"description\": \"Temporal TypeScript SDK\",\n    \"owner\": \"temporalio\",\n    \"repo\": \"sdk-typescript\"\n  },\n  \"TDesign MiniProgram\": {\n    \"title\": \"TDesign MiniProgram\",\n    \"repoName\": \"tencent/tdesign-miniprogram\",\n    \"githubUrl\": \"https://github.com/tencent/tdesign-miniprogram\",\n    \"description\": \"A Wechat MiniProgram UI components lib for TDesign.\",\n    \"owner\": \"tencent\",\n    \"repo\": \"tdesign-miniprogram\"\n  },\n  \"TensorFlow\": {\n    \"title\": \"TensorFlow\",\n    \"repoName\": \"tensorflow/docs\",\n    \"githubUrl\": \"https://github.com/tensorflow/docs\",\n    \"description\": \"TensorFlow documentation\",\n    \"owner\": \"tensorflow\",\n    \"repo\": \"docs\"\n  },\n  \"Terraform AWS ElastiCache\": {\n    \"title\": \"Terraform AWS ElastiCache\",\n    \"repoName\": \"terraform-aws-modules/terraform-aws-elasticache\",\n    \"githubUrl\": \"https://github.com/terraform-aws-modules/terraform-aws-elasticache\",\n    \"description\": \"Terraform module to create AWS ElastiCache resources 🇺🇦 \",\n    \"owner\": \"terraform-aws-modules\",\n    \"repo\": \"terraform-aws-elasticache\"\n  },\n  \"System.IO.Abstractions\": {\n    \"title\": \"System.IO.Abstractions\",\n    \"repoName\": \"testableio/system.io.abstractions\",\n    \"githubUrl\": \"https://github.com/testableio/system.io.abstractions\",\n    \"description\": \"Just like System.Web.Abstractions, but for System.IO. Yay for testable IO access!\",\n    \"owner\": \"testableio\",\n    \"repo\": \"system.io.abstractions\"\n  },\n  \"Testcontainers for .NET\": {\n    \"title\": \"Testcontainers for .NET\",\n    \"repoName\": \"testcontainers/testcontainers-dotnet\",\n    \"githubUrl\": \"https://github.com/testcontainers/testcontainers-dotnet\",\n    \"description\": \"A library to support tests with throwaway instances of Docker containers for all compatible .NET Standard versions.\",\n    \"owner\": \"testcontainers\",\n    \"repo\": \"testcontainers-dotnet\"\n  },\n  \"Testcontainers RS\": {\n    \"title\": \"Testcontainers RS\",\n    \"repoName\": \"testcontainers/testcontainers-rs\",\n    \"githubUrl\": \"https://github.com/testcontainers/testcontainers-rs\",\n    \"description\": \"A library for integration-testing against docker containers from within Rust.\",\n    \"owner\": \"testcontainers\",\n    \"repo\": \"testcontainers-rs\"\n  },\n  \"Testing Library Jest DOM\": {\n    \"title\": \"Testing Library Jest DOM\",\n    \"repoName\": \"testing-library/jest-dom\",\n    \"githubUrl\": \"https://github.com/testing-library/jest-dom\",\n    \"description\": \":owl: Custom jest matchers to test the state of the DOM\",\n    \"owner\": \"testing-library\",\n    \"repo\": \"jest-dom\"\n  },\n  \"React Testing Library\": {\n    \"title\": \"React Testing Library\",\n    \"repoName\": \"testing-library/react-testing-library\",\n    \"githubUrl\": \"https://github.com/testing-library/react-testing-library\",\n    \"description\": \"🐐 Simple and complete React DOM testing utilities that encourage good testing practices.\",\n    \"owner\": \"testing-library\",\n    \"repo\": \"react-testing-library\"\n  },\n  \"Svelte Testing Library\": {\n    \"title\": \"Svelte Testing Library\",\n    \"repoName\": \"testing-library/svelte-testing-library\",\n    \"githubUrl\": \"https://github.com/testing-library/svelte-testing-library\",\n    \"description\": \":chipmunk: Simple and complete Svelte DOM testing utilities that encourage good testing practices\",\n    \"owner\": \"testing-library\",\n    \"repo\": \"svelte-testing-library\"\n  },\n  \"Testing Library\": {\n    \"title\": \"Testing Library\",\n    \"repoName\": \"testing-library/testing-library-docs\",\n    \"githubUrl\": \"https://github.com/testing-library/testing-library-docs\",\n    \"description\": \"docs site for @testing-library/*\",\n    \"owner\": \"testing-library\",\n    \"repo\": \"testing-library-docs\"\n  },\n  \"微擎社区版\": {\n    \"title\": \"微擎社区版\",\n    \"repoName\": \"testing365/w7\",\n    \"githubUrl\": \"https://github.com/testing365/w7\",\n    \"description\": \"微擎社区版-无云服务\",\n    \"owner\": \"testing365\",\n    \"repo\": \"w7\"\n  },\n  \"Text.ru API\": {\n    \"title\": \"Text.ru API\",\n    \"repoName\": \"text-media/exchange-doc\",\n    \"githubUrl\": \"https://github.com/text-media/exchange-doc\",\n    \"description\": \"Документация API биржи text.ru\",\n    \"owner\": \"text-media\",\n    \"repo\": \"exchange-doc\"\n  },\n  \"Rich\": {\n    \"title\": \"Rich\",\n    \"repoName\": \"textualize/rich\",\n    \"githubUrl\": \"https://github.com/textualize/rich\",\n    \"description\": \"Rich is a Python library for rich text and beautiful formatting in the terminal.\",\n    \"owner\": \"textualize\",\n    \"repo\": \"rich\"\n  },\n  \"Textual\": {\n    \"title\": \"Textual\",\n    \"repoName\": \"textualize/textual\",\n    \"githubUrl\": \"https://github.com/textualize/textual\",\n    \"description\": \"The lean application framework for Python.  Build sophisticated user interfaces with a simple Python API. Run your apps in the terminal and a web browser.\",\n    \"owner\": \"textualize\",\n    \"repo\": \"textual\"\n  },\n  \"DRF Spectacular\": {\n    \"title\": \"DRF Spectacular\",\n    \"repoName\": \"tfranzel/drf-spectacular\",\n    \"githubUrl\": \"https://github.com/tfranzel/drf-spectacular\",\n    \"description\": \"Sane and flexible OpenAPI 3 schema generation for Django REST framework.\",\n    \"owner\": \"tfranzel\",\n    \"repo\": \"drf-spectacular\"\n  },\n  \"Teldrive\": {\n    \"title\": \"Teldrive\",\n    \"repoName\": \"tgdrive/teldrive\",\n    \"githubUrl\": \"https://github.com/tgdrive/teldrive\",\n    \"description\": \"Teldrive\",\n    \"owner\": \"tgdrive\",\n    \"repo\": \"teldrive\"\n  },\n  \"Raven\": {\n    \"title\": \"Raven\",\n    \"repoName\": \"the-commit-company/raven\",\n    \"githubUrl\": \"https://github.com/the-commit-company/raven\",\n    \"description\": \"Simple, open source team messaging platform\",\n    \"owner\": \"the-commit-company\",\n    \"repo\": \"raven\"\n  },\n  \"The Odds API\": {\n    \"title\": \"The Odds API\",\n    \"repoName\": \"the-odds-api/samples-python\",\n    \"githubUrl\": \"https://github.com/the-odds-api/samples-python\",\n    \"description\": \"Python code samples for The Odds API\",\n    \"owner\": \"the-odds-api\",\n    \"repo\": \"samples-python\"\n  },\n  \"Pocket Flow Framework\": {\n    \"title\": \"Pocket Flow Framework\",\n    \"repoName\": \"the-pocket-world/pocket-flow-framework\",\n    \"githubUrl\": \"https://github.com/the-pocket-world/pocket-flow-framework\",\n    \"description\": \"Enable LLMs to Program Themselves.\",\n    \"owner\": \"the-pocket-world\",\n    \"repo\": \"pocket-flow-framework\"\n  },\n  \"Pocket Flow\": {\n    \"title\": \"Pocket Flow\",\n    \"repoName\": \"the-pocket/pocketflow\",\n    \"githubUrl\": \"https://github.com/the-pocket/pocketflow\",\n    \"description\": \"Pocket Flow: 100-line LLM framework. Let Agents build Agents!\",\n    \"owner\": \"the-pocket\",\n    \"repo\": \"pocketflow\"\n  },\n  \"Pocketflow Template Python\": {\n    \"title\": \"Pocketflow Template Python\",\n    \"repoName\": \"the-pocket/pocketflow-template-python\",\n    \"githubUrl\": \"https://github.com/the-pocket/pocketflow-template-python\",\n    \"description\": \"\",\n    \"owner\": \"the-pocket\",\n    \"repo\": \"pocketflow-template-python\"\n  },\n  \"Theatre.js\": {\n    \"title\": \"Theatre.js\",\n    \"repoName\": \"theatre-js/theatre\",\n    \"githubUrl\": \"https://github.com/theatre-js/theatre\",\n    \"description\": \"Motion design editor for the web\",\n    \"owner\": \"theatre-js\",\n    \"repo\": \"theatre\"\n  },\n  \"Openrouter AI\": {\n    \"title\": \"Openrouter AI\",\n    \"repoName\": \"thechickenisonfire/openrouter-docs\",\n    \"githubUrl\": \"https://github.com/thechickenisonfire/openrouter-docs\",\n    \"description\": \"Openrouter AI documentation\",\n    \"owner\": \"thechickenisonfire\",\n    \"repo\": \"openrouter-docs\"\n  },\n  \"Async Await Best Practices\": {\n    \"title\": \"Async Await Best Practices\",\n    \"repoName\": \"thecodetraveler/asyncawaitbestpractices\",\n    \"githubUrl\": \"https://github.com/thecodetraveler/asyncawaitbestpractices\",\n    \"description\": \"Extensions for System.Threading.Tasks.Task and System.Threading.Tasks.ValueTask\",\n    \"owner\": \"thecodetraveler\",\n    \"repo\": \"asyncawaitbestpractices\"\n  },\n  \"Next Safe Action\": {\n    \"title\": \"Next Safe Action\",\n    \"repoName\": \"theedoran/next-safe-action\",\n    \"githubUrl\": \"https://github.com/theedoran/next-safe-action\",\n    \"description\": \"Type safe and validated Server Actions in your Next.js project.\",\n    \"owner\": \"theedoran\",\n    \"repo\": \"next-safe-action\"\n  },\n  \"Flowbite\": {\n    \"title\": \"Flowbite\",\n    \"repoName\": \"themesberg/flowbite\",\n    \"githubUrl\": \"https://github.com/themesberg/flowbite\",\n    \"description\": \"Open-source UI component library and front-end development framework based on Tailwind CSS\",\n    \"owner\": \"themesberg\",\n    \"repo\": \"flowbite\"\n  },\n  \"FlyonUI\": {\n    \"title\": \"FlyonUI\",\n    \"repoName\": \"themeselection/flyonui\",\n    \"githubUrl\": \"https://github.com/themeselection/flyonui\",\n    \"description\": \"🚀 The easiest, free and open-source Tailwind CSS component library with semantic classes.\",\n    \"owner\": \"themeselection\",\n    \"repo\": \"flyonui\"\n  },\n  \"FlyonUI Nextjs Integration\": {\n    \"title\": \"FlyonUI Nextjs Integration\",\n    \"repoName\": \"themeselection/flyonui-nextjs-integration\",\n    \"githubUrl\": \"https://github.com/themeselection/flyonui-nextjs-integration\",\n    \"description\": \"\",\n    \"owner\": \"themeselection\",\n    \"repo\": \"flyonui-nextjs-integration\"\n  },\n  \"FastF1\": {\n    \"title\": \"FastF1\",\n    \"repoName\": \"theoehrly/fast-f1\",\n    \"githubUrl\": \"https://github.com/theoehrly/fast-f1\",\n    \"description\": \"FastF1 is a python package for accessing and analyzing Formula 1 results, schedules, timing data and telemetry\",\n    \"owner\": \"theoehrly\",\n    \"repo\": \"fast-f1\"\n  },\n  \"THEOplayer React Native UI\": {\n    \"title\": \"THEOplayer React Native UI\",\n    \"repoName\": \"theoplayer/react-native-theoplayer-ui\",\n    \"githubUrl\": \"https://github.com/theoplayer/react-native-theoplayer-ui\",\n    \"description\": \"A React Native UI for @theoplayer/react-native\",\n    \"owner\": \"theoplayer\",\n    \"repo\": \"react-native-theoplayer-ui\"\n  },\n  \"React Native Video\": {\n    \"title\": \"React Native Video\",\n    \"repoName\": \"thewidlarzgroup/react-native-video\",\n    \"githubUrl\": \"https://github.com/thewidlarzgroup/react-native-video\",\n    \"description\": \"A <Video /> component for react-native\",\n    \"owner\": \"thewidlarzgroup\",\n    \"repo\": \"react-native-video\"\n  },\n  \"Thirdweb JS\": {\n    \"title\": \"Thirdweb JS\",\n    \"repoName\": \"thirdweb-dev/js\",\n    \"githubUrl\": \"https://github.com/thirdweb-dev/js\",\n    \"description\": \"Best in class web3 SDKs for Browser, Node and Mobile apps\",\n    \"owner\": \"thirdweb-dev\",\n    \"repo\": \"js\"\n  },\n  \"Tunit\": {\n    \"title\": \"Tunit\",\n    \"repoName\": \"thomhurst/tunit\",\n    \"githubUrl\": \"https://github.com/thomhurst/tunit\",\n    \"description\": \"A modern, fast and flexible .NET testing framework \",\n    \"owner\": \"thomhurst\",\n    \"repo\": \"tunit\"\n  },\n  \"Python Template Microservice\": {\n    \"title\": \"Python Template Microservice\",\n    \"repoName\": \"thorgilis/python.template.microservice\",\n    \"githubUrl\": \"https://github.com/thorgilis/python.template.microservice\",\n    \"description\": \"A fully configured FastAPI microservice template with built-in code quality tools, CI/CD, and Docker support. This template provides a structured foundation for developing and deploying Python microservices with best practices in security, testing, and maintainability.\",\n    \"owner\": \"thorgilis\",\n    \"repo\": \"python.template.microservice\"\n  },\n  \"Daffy\": {\n    \"title\": \"Daffy\",\n    \"repoName\": \"thoughtworksinc/daffy\",\n    \"githubUrl\": \"https://github.com/thoughtworksinc/daffy\",\n    \"description\": \"Function decorators for Pandas Dataframe column name and data type validation\",\n    \"owner\": \"thoughtworksinc\",\n    \"repo\": \"daffy\"\n  },\n  \"Watermill\": {\n    \"title\": \"Watermill\",\n    \"repoName\": \"threedotslabs/watermill\",\n    \"githubUrl\": \"https://github.com/threedotslabs/watermill\",\n    \"description\": \"Building event-driven applications the easy way in Go.\",\n    \"owner\": \"threedotslabs\",\n    \"repo\": \"watermill\"\n  },\n  \"PartyKit\": {\n    \"title\": \"PartyKit\",\n    \"repoName\": \"threepointone/partyserver\",\n    \"githubUrl\": \"https://github.com/threepointone/partyserver\",\n    \"description\": \"PartyKit, for Workers\",\n    \"owner\": \"threepointone\",\n    \"repo\": \"partyserver\"\n  },\n  \"Threlte\": {\n    \"title\": \"Threlte\",\n    \"repoName\": \"threlte/threlte.git\",\n    \"githubUrl\": \"https://github.com/threlte/threlte.git\",\n    \"description\": \"3D framework for Svelte\",\n    \"owner\": \"threlte\",\n    \"repo\": \"threlte.git\"\n  },\n  \"FastAPI\": {\n    \"title\": \"FastAPI\",\n    \"repoName\": \"tiangolo/fastapi\",\n    \"githubUrl\": \"https://github.com/tiangolo/fastapi\",\n    \"description\": \"FastAPI framework, high performance, easy to learn, fast to code, ready for production\",\n    \"owner\": \"tiangolo\",\n    \"repo\": \"fastapi\"\n  },\n  \"Broom\": {\n    \"title\": \"Broom\",\n    \"repoName\": \"tidymodels/broom\",\n    \"githubUrl\": \"https://github.com/tidymodels/broom\",\n    \"description\": \"Convert statistical analysis objects from R into tidy format\",\n    \"owner\": \"tidymodels\",\n    \"repo\": \"broom\"\n  },\n  \"Dbplyr\": {\n    \"title\": \"Dbplyr\",\n    \"repoName\": \"tidyverse/dbplyr\",\n    \"githubUrl\": \"https://github.com/tidyverse/dbplyr\",\n    \"description\": \"Database (DBI) backend for dplyr\",\n    \"owner\": \"tidyverse\",\n    \"repo\": \"dbplyr\"\n  },\n  \"Dplyr\": {\n    \"title\": \"Dplyr\",\n    \"repoName\": \"tidyverse/dplyr\",\n    \"githubUrl\": \"https://github.com/tidyverse/dplyr\",\n    \"description\": \"dplyr: A grammar of data manipulation\",\n    \"owner\": \"tidyverse\",\n    \"repo\": \"dplyr\"\n  },\n  \"Duckplyr\": {\n    \"title\": \"Duckplyr\",\n    \"repoName\": \"tidyverse/duckplyr\",\n    \"githubUrl\": \"https://github.com/tidyverse/duckplyr\",\n    \"description\": \"A drop-in replacement for dplyr, powered by DuckDB for speed.\",\n    \"owner\": \"tidyverse\",\n    \"repo\": \"duckplyr\"\n  },\n  \"ggplot2\": {\n    \"title\": \"ggplot2\",\n    \"repoName\": \"tidyverse/ggplot2\",\n    \"githubUrl\": \"https://github.com/tidyverse/ggplot2\",\n    \"description\": \"An implementation of the Grammar of Graphics in R\",\n    \"owner\": \"tidyverse\",\n    \"repo\": \"ggplot2\"\n  },\n  \"HMS\": {\n    \"title\": \"HMS\",\n    \"repoName\": \"tidyverse/hms\",\n    \"githubUrl\": \"https://github.com/tidyverse/hms\",\n    \"description\": \"A simple class for storing time-of-day values\",\n    \"owner\": \"tidyverse\",\n    \"repo\": \"hms\"\n  },\n  \"Lubridate\": {\n    \"title\": \"Lubridate\",\n    \"repoName\": \"tidyverse/lubridate\",\n    \"githubUrl\": \"https://github.com/tidyverse/lubridate\",\n    \"description\": \"Make working with dates in R just that little bit easier\",\n    \"owner\": \"tidyverse\",\n    \"repo\": \"lubridate\"\n  },\n  \"Multidplyr\": {\n    \"title\": \"Multidplyr\",\n    \"repoName\": \"tidyverse/multidplyr\",\n    \"githubUrl\": \"https://github.com/tidyverse/multidplyr\",\n    \"description\": \"A dplyr backend that partitions a data frame over multiple processes\",\n    \"owner\": \"tidyverse\",\n    \"repo\": \"multidplyr\"\n  },\n  \"Purrr\": {\n    \"title\": \"Purrr\",\n    \"repoName\": \"tidyverse/purrr\",\n    \"githubUrl\": \"https://github.com/tidyverse/purrr\",\n    \"description\": \"A functional programming toolkit for R\",\n    \"owner\": \"tidyverse\",\n    \"repo\": \"purrr\"\n  },\n  \"Rvest\": {\n    \"title\": \"Rvest\",\n    \"repoName\": \"tidyverse/rvest\",\n    \"githubUrl\": \"https://github.com/tidyverse/rvest\",\n    \"description\": \"Simple web scraping for R\",\n    \"owner\": \"tidyverse\",\n    \"repo\": \"rvest\"\n  },\n  \"Stringr\": {\n    \"title\": \"Stringr\",\n    \"repoName\": \"tidyverse/stringr\",\n    \"githubUrl\": \"https://github.com/tidyverse/stringr\",\n    \"description\": \"A fresh approach to string manipulation in R\",\n    \"owner\": \"tidyverse\",\n    \"repo\": \"stringr\"\n  },\n  \"Tidyr\": {\n    \"title\": \"Tidyr\",\n    \"repoName\": \"tidyverse/tidyr\",\n    \"githubUrl\": \"https://github.com/tidyverse/tidyr\",\n    \"description\": \"Tidy Messy Data\",\n    \"owner\": \"tidyverse\",\n    \"repo\": \"tidyr\"\n  },\n  \"LongRAG\": {\n    \"title\": \"LongRAG\",\n    \"repoName\": \"tiger-ai-lab/longrag\",\n    \"githubUrl\": \"https://github.com/tiger-ai-lab/longrag\",\n    \"description\": \"Official repo for \\\"LongRAG: Enhancing Retrieval-Augmented Generation with Long-context LLMs\\\".\",\n    \"owner\": \"tiger-ai-lab\",\n    \"repo\": \"longrag\"\n  },\n  \"TigerBeetle\": {\n    \"title\": \"TigerBeetle\",\n    \"repoName\": \"tigerbeetle/tigerbeetle\",\n    \"githubUrl\": \"https://github.com/tigerbeetle/tigerbeetle\",\n    \"description\": \"The financial transactions database designed for mission critical safety and performance.\",\n    \"owner\": \"tigerbeetle\",\n    \"repo\": \"tigerbeetle\"\n  },\n  \"Ziggy\": {\n    \"title\": \"Ziggy\",\n    \"repoName\": \"tighten/ziggy\",\n    \"githubUrl\": \"https://github.com/tighten/ziggy\",\n    \"description\": \"Use your Laravel routes in JavaScript.\",\n    \"owner\": \"tighten\",\n    \"repo\": \"ziggy\"\n  },\n  \"TileDB\": {\n    \"title\": \"TileDB\",\n    \"repoName\": \"tiledb-inc/tiledb\",\n    \"githubUrl\": \"https://github.com/tiledb-inc/tiledb\",\n    \"description\": \"The Universal Storage Engine\",\n    \"owner\": \"tiledb-inc\",\n    \"repo\": \"tiledb\"\n  },\n  \"Effect Io Ai\": {\n    \"title\": \"Effect Io Ai\",\n    \"repoName\": \"tim-smart/effect-io-ai\",\n    \"githubUrl\": \"https://github.com/tim-smart/effect-io-ai\",\n    \"description\": \"\",\n    \"owner\": \"tim-smart\",\n    \"repo\": \"effect-io-ai\"\n  },\n  \"Kbar\": {\n    \"title\": \"Kbar\",\n    \"repoName\": \"timc1/kbar\",\n    \"githubUrl\": \"https://github.com/timc1/kbar\",\n    \"description\": \"fast, portable, and extensible cmd+k interface for your site\",\n    \"owner\": \"timc1\",\n    \"repo\": \"kbar\"\n  },\n  \"PGAI\": {\n    \"title\": \"PGAI\",\n    \"repoName\": \"timescale/pgai\",\n    \"githubUrl\": \"https://github.com/timescale/pgai\",\n    \"description\": \"A suite of tools to develop RAG, semantic search, and other AI applications more easily with PostgreSQL\",\n    \"owner\": \"timescale\",\n    \"repo\": \"pgai\"\n  },\n  \"TimescaleDB\": {\n    \"title\": \"TimescaleDB\",\n    \"repoName\": \"timescale/timescaledb\",\n    \"githubUrl\": \"https://github.com/timescale/timescaledb\",\n    \"description\": \"A time-series database for high-performance real-time analytics packaged as a Postgres extension\",\n    \"owner\": \"timescale\",\n    \"repo\": \"timescaledb\"\n  },\n  \"React Hot Toast\": {\n    \"title\": \"React Hot Toast\",\n    \"repoName\": \"timolins/react-hot-toast\",\n    \"githubUrl\": \"https://github.com/timolins/react-hot-toast\",\n    \"description\": \"Smoking Hot React Notifications 🔥 \",\n    \"owner\": \"timolins\",\n    \"repo\": \"react-hot-toast\"\n  },\n  \"TinaCMS\": {\n    \"title\": \"TinaCMS\",\n    \"repoName\": \"tinacms/tinacms\",\n    \"githubUrl\": \"https://github.com/tinacms/tinacms\",\n    \"description\": \"A fully open-source headless CMS that supports Markdown and Visual Editing\",\n    \"owner\": \"tinacms\",\n    \"repo\": \"tinacms\"\n  },\n  \"TinyMCE\": {\n    \"title\": \"TinyMCE\",\n    \"repoName\": \"tinymce/tinymce-docs\",\n    \"githubUrl\": \"https://github.com/tinymce/tinymce-docs\",\n    \"description\": \"TinyMCE Documentation\",\n    \"owner\": \"tinymce\",\n    \"repo\": \"tinymce-docs\"\n  },\n  \"TinyBase\": {\n    \"title\": \"TinyBase\",\n    \"repoName\": \"tinyplex/tinybase\",\n    \"githubUrl\": \"https://github.com/tinyplex/tinybase\",\n    \"description\": \"A reactive data store & sync engine.\",\n    \"owner\": \"tinyplex\",\n    \"repo\": \"tinybase\"\n  },\n  \"Turnkey SDK\": {\n    \"title\": \"Turnkey SDK\",\n    \"repoName\": \"tkhq/sdk\",\n    \"githubUrl\": \"https://github.com/tkhq/sdk\",\n    \"description\": \"Turnkey TypeScript SDK\",\n    \"owner\": \"tkhq\",\n    \"repo\": \"sdk\"\n  },\n  \"Tldraw\": {\n    \"title\": \"Tldraw\",\n    \"repoName\": \"tldraw/tldraw\",\n    \"githubUrl\": \"https://github.com/tldraw/tldraw\",\n    \"description\": \"whiteboard SDK / infinite canvas SDK\",\n    \"owner\": \"tldraw\",\n    \"repo\": \"tldraw\"\n  },\n  \"Tmuxp\": {\n    \"title\": \"Tmuxp\",\n    \"repoName\": \"tmux-python/tmuxp\",\n    \"githubUrl\": \"https://github.com/tmux-python/tmuxp\",\n    \"description\": \"🖥️ Session manager for tmux, build on libtmux.\",\n    \"owner\": \"tmux-python\",\n    \"repo\": \"tmuxp\"\n  },\n  \"Tmux\": {\n    \"title\": \"Tmux\",\n    \"repoName\": \"tmux/tmux\",\n    \"githubUrl\": \"https://github.com/tmux/tmux\",\n    \"description\": \"tmux source code\",\n    \"owner\": \"tmux\",\n    \"repo\": \"tmux\"\n  },\n  \"UniFi Controller API\": {\n    \"title\": \"UniFi Controller API\",\n    \"repoName\": \"tnware/unifi-controller-api\",\n    \"githubUrl\": \"https://github.com/tnware/unifi-controller-api\",\n    \"description\": \"A Python client library for interacting with Ubiquiti UniFi Network Controllers.\",\n    \"owner\": \"tnware\",\n    \"repo\": \"unifi-controller-api\"\n  },\n  \"Pyrsistent\": {\n    \"title\": \"Pyrsistent\",\n    \"repoName\": \"tobgu/pyrsistent\",\n    \"githubUrl\": \"https://github.com/tobgu/pyrsistent\",\n    \"description\": \"Persistent/Immutable/Functional data structures for Python\",\n    \"owner\": \"tobgu\",\n    \"repo\": \"pyrsistent\"\n  },\n  \"SQLGlot\": {\n    \"title\": \"SQLGlot\",\n    \"repoName\": \"tobymao/sqlglot\",\n    \"githubUrl\": \"https://github.com/tobymao/sqlglot\",\n    \"description\": \"Python SQL Parser and Transpiler\",\n    \"owner\": \"tobymao\",\n    \"repo\": \"sqlglot\"\n  },\n  \"Together Cookbook\": {\n    \"title\": \"Together Cookbook\",\n    \"repoName\": \"togethercomputer/together-cookbook\",\n    \"githubUrl\": \"https://github.com/togethercomputer/together-cookbook\",\n    \"description\": \"A collection of notebooks/recipes showcasing usecases of open-source models with Together AI.\",\n    \"owner\": \"togethercomputer\",\n    \"repo\": \"together-cookbook\"\n  },\n  \"Together Python\": {\n    \"title\": \"Together Python\",\n    \"repoName\": \"togethercomputer/together-python\",\n    \"githubUrl\": \"https://github.com/togethercomputer/together-python\",\n    \"description\": \"The Official Python Client for Together's API\",\n    \"owner\": \"togethercomputer\",\n    \"repo\": \"together-python\"\n  },\n  \"Together AI TypeScript\": {\n    \"title\": \"Together AI TypeScript\",\n    \"repoName\": \"togethercomputer/together-typescript\",\n    \"githubUrl\": \"https://github.com/togethercomputer/together-typescript\",\n    \"description\": \"The official Together AI TypeScript library.\",\n    \"owner\": \"togethercomputer\",\n    \"repo\": \"together-typescript\"\n  },\n  \"Axum\": {\n    \"title\": \"Axum\",\n    \"repoName\": \"tokio-rs/axum\",\n    \"githubUrl\": \"https://github.com/tokio-rs/axum\",\n    \"description\": \"Ergonomic and modular web framework built with Tokio, Tower, and Hyper\",\n    \"owner\": \"tokio-rs\",\n    \"repo\": \"axum\"\n  },\n  \"Tokio Console\": {\n    \"title\": \"Tokio Console\",\n    \"repoName\": \"tokio-rs/console\",\n    \"githubUrl\": \"https://github.com/tokio-rs/console\",\n    \"description\": \"a debugger for async rust!\",\n    \"owner\": \"tokio-rs\",\n    \"repo\": \"console\"\n  },\n  \"Tokio\": {\n    \"title\": \"Tokio\",\n    \"repoName\": \"tokio-rs/tokio\",\n    \"githubUrl\": \"https://github.com/tokio-rs/tokio\",\n    \"description\": \"A runtime for writing reliable asynchronous applications with Rust. Provides I/O, networking, scheduling, timers, ...\",\n    \"owner\": \"tokio-rs\",\n    \"repo\": \"tokio\"\n  },\n  \"Tokio Tracing\": {\n    \"title\": \"Tokio Tracing\",\n    \"repoName\": \"tokio-rs/tracing\",\n    \"githubUrl\": \"https://github.com/tokio-rs/tracing\",\n    \"description\": \"Application level tracing for Rust.\",\n    \"owner\": \"tokio-rs\",\n    \"repo\": \"tracing\"\n  },\n  \"Tomorrow.io API\": {\n    \"title\": \"Tomorrow.io API\",\n    \"repoName\": \"tomorrow-io-api/tomorrow-samples\",\n    \"githubUrl\": \"https://github.com/tomorrow-io-api/tomorrow-samples\",\n    \"description\": \"The official collection of handy scripts and samples to kickoff the work with the Tomorrow.io API\",\n    \"owner\": \"tomorrow-io-api\",\n    \"repo\": \"tomorrow-samples\"\n  },\n  \"Tomorrow Timelines Widget\": {\n    \"title\": \"Tomorrow Timelines Widget\",\n    \"repoName\": \"tomorrow-io-api/tomorrow-timelines-widget\",\n    \"githubUrl\": \"https://github.com/tomorrow-io-api/tomorrow-timelines-widget\",\n    \"description\": \"The official example of a Weather Widget based on the Tomorrow.io API Timelines interface.\",\n    \"owner\": \"tomorrow-io-api\",\n    \"repo\": \"tomorrow-timelines-widget\"\n  },\n  \"Tomorrow.io Weather Codes\": {\n    \"title\": \"Tomorrow.io Weather Codes\",\n    \"repoName\": \"tomorrow-io-api/tomorrow-weather-codes\",\n    \"githubUrl\": \"https://github.com/tomorrow-io-api/tomorrow-weather-codes\",\n    \"description\": \"The official collection of Tomorrow.io weather icons\",\n    \"owner\": \"tomorrow-io-api\",\n    \"repo\": \"tomorrow-weather-codes\"\n  },\n  \"Blizzard Interface Code\": {\n    \"title\": \"Blizzard Interface Code\",\n    \"repoName\": \"tomrus88/blizzardinterfacecode\",\n    \"githubUrl\": \"https://github.com/tomrus88/blizzardinterfacecode\",\n    \"description\": \"\",\n    \"owner\": \"tomrus88\",\n    \"repo\": \"blizzardinterfacecode\"\n  },\n  \"TON\": {\n    \"title\": \"TON\",\n    \"repoName\": \"ton-org/ton\",\n    \"githubUrl\": \"https://github.com/ton-org/ton\",\n    \"description\": \"Most popular TON Typescript Library\",\n    \"owner\": \"ton-org\",\n    \"repo\": \"ton\"\n  },\n  \"TON HTTP API\": {\n    \"title\": \"TON HTTP API\",\n    \"repoName\": \"toncenter/ton-http-api\",\n    \"githubUrl\": \"https://github.com/toncenter/ton-http-api\",\n    \"description\": \"HTTP API for TON (The Open Network)\",\n    \"owner\": \"toncenter\",\n    \"repo\": \"ton-http-api\"\n  },\n  \"OpenAuth\": {\n    \"title\": \"OpenAuth\",\n    \"repoName\": \"toolbeam/openauth\",\n    \"githubUrl\": \"https://github.com/toolbeam/openauth\",\n    \"description\": \"▦ Universal, standards-based auth provider.\",\n    \"owner\": \"toolbeam\",\n    \"repo\": \"openauth\"\n  },\n  \"Think ORM\": {\n    \"title\": \"Think ORM\",\n    \"repoName\": \"top-think/think-orm\",\n    \"githubUrl\": \"https://github.com/top-think/think-orm\",\n    \"description\": \"Think ORM——the PHP Database&ORM Framework\",\n    \"owner\": \"top-think\",\n    \"repo\": \"think-orm\"\n  },\n  \"Cognee\": {\n    \"title\": \"Cognee\",\n    \"repoName\": \"topoteretes/cognee\",\n    \"githubUrl\": \"https://github.com/topoteretes/cognee\",\n    \"description\": \"Memory for AI Agents in 5 lines of code\",\n    \"owner\": \"topoteretes\",\n    \"repo\": \"cognee\"\n  },\n  \"Tortoise ORM\": {\n    \"title\": \"Tortoise ORM\",\n    \"repoName\": \"tortoise/tortoise-orm\",\n    \"githubUrl\": \"https://github.com/tortoise/tortoise-orm\",\n    \"description\": \"Familiar asyncio ORM for python, built with relations in mind\",\n    \"owner\": \"tortoise\",\n    \"repo\": \"tortoise-orm\"\n  },\n  \"Linux\": {\n    \"title\": \"Linux\",\n    \"repoName\": \"torvalds/linux\",\n    \"githubUrl\": \"https://github.com/torvalds/linux\",\n    \"description\": \"Linux kernel source tree\",\n    \"owner\": \"torvalds\",\n    \"repo\": \"linux\"\n  },\n  \"Dolibarr Utils\": {\n    \"title\": \"Dolibarr Utils\",\n    \"repoName\": \"tosave04/dolibarr-utils-ts\",\n    \"githubUrl\": \"https://github.com/tosave04/dolibarr-utils-ts\",\n    \"description\": \"Typescript communication tools, zod schemas and utils for Dolibarr REST API\",\n    \"owner\": \"tosave04\",\n    \"repo\": \"dolibarr-utils-ts\"\n  },\n  \"ES Toolkit\": {\n    \"title\": \"ES Toolkit\",\n    \"repoName\": \"toss/es-toolkit\",\n    \"githubUrl\": \"https://github.com/toss/es-toolkit\",\n    \"description\": \"A modern JavaScript utility library that's 2-3 times faster and up to 97% smaller—a major upgrade to lodash.\",\n    \"owner\": \"toss\",\n    \"repo\": \"es-toolkit\"\n  },\n  \"Tower\": {\n    \"title\": \"Tower\",\n    \"repoName\": \"tower-rs/tower\",\n    \"githubUrl\": \"https://github.com/tower-rs/tower\",\n    \"description\": \"async fn(Request) -> Result<Response, Error>\",\n    \"owner\": \"tower-rs\",\n    \"repo\": \"tower\"\n  },\n  \"Tqdm\": {\n    \"title\": \"Tqdm\",\n    \"repoName\": \"tqdm/tqdm\",\n    \"githubUrl\": \"https://github.com/tqdm/tqdm\",\n    \"description\": \":zap: A Fast, Extensible Progress Bar for Python and CLI\",\n    \"owner\": \"tqdm\",\n    \"repo\": \"tqdm\"\n  },\n  \"Openllmetry\": {\n    \"title\": \"Openllmetry\",\n    \"repoName\": \"traceloop/openllmetry\",\n    \"githubUrl\": \"https://github.com/traceloop/openllmetry\",\n    \"description\": \"Open-source observability for your LLM application, based on OpenTelemetry\",\n    \"owner\": \"traceloop\",\n    \"repo\": \"openllmetry\"\n  },\n  \"Unity 6\": {\n    \"title\": \"Unity 6\",\n    \"repoName\": \"tradesdontlie/unity-6-documentation.git\",\n    \"githubUrl\": \"https://github.com/tradesdontlie/unity-6-documentation.git\",\n    \"description\": \"Comprehensive documentation for Unity 6 - features, APIs, tutorials, and best practices\",\n    \"owner\": \"tradesdontlie\",\n    \"repo\": \"unity-6-documentation.git\"\n  },\n  \"Lightweight Charts\": {\n    \"title\": \"Lightweight Charts\",\n    \"repoName\": \"tradingview/lightweight-charts\",\n    \"githubUrl\": \"https://github.com/tradingview/lightweight-charts\",\n    \"description\": \"Performant financial charts built with HTML5 canvas\",\n    \"owner\": \"tradingview\",\n    \"repo\": \"lightweight-charts\"\n  },\n  \"Tradovate Example API JS\": {\n    \"title\": \"Tradovate Example API JS\",\n    \"repoName\": \"tradovate/example-api-js\",\n    \"githubUrl\": \"https://github.com/tradovate/example-api-js\",\n    \"description\": \"\",\n    \"owner\": \"tradovate\",\n    \"repo\": \"example-api-js\"\n  },\n  \"Traefik\": {\n    \"title\": \"Traefik\",\n    \"repoName\": \"traefik/traefik\",\n    \"githubUrl\": \"https://github.com/traefik/traefik\",\n    \"description\": \"The Cloud Native Application Proxy\",\n    \"owner\": \"traefik\",\n    \"repo\": \"traefik\"\n  },\n  \"Agentic\": {\n    \"title\": \"Agentic\",\n    \"repoName\": \"transitive-bullshit/agentic\",\n    \"githubUrl\": \"https://github.com/transitive-bullshit/agentic\",\n    \"description\": \"AI agent stdlib that works with any LLM and TypeScript AI SDK.\",\n    \"owner\": \"transitive-bullshit\",\n    \"repo\": \"agentic\"\n  },\n  \"Tree-sitter Python Bindings\": {\n    \"title\": \"Tree-sitter Python Bindings\",\n    \"repoName\": \"tree-sitter/py-tree-sitter\",\n    \"githubUrl\": \"https://github.com/tree-sitter/py-tree-sitter\",\n    \"description\": \"Python bindings to the Tree-sitter parsing library\",\n    \"owner\": \"tree-sitter\",\n    \"repo\": \"py-tree-sitter\"\n  },\n  \"Tree-sitter\": {\n    \"title\": \"Tree-sitter\",\n    \"repoName\": \"tree-sitter/tree-sitter\",\n    \"githubUrl\": \"https://github.com/tree-sitter/tree-sitter\",\n    \"description\": \"An incremental parsing system for programming tools\",\n    \"owner\": \"tree-sitter\",\n    \"repo\": \"tree-sitter\"\n  },\n  \"Tremor\": {\n    \"title\": \"Tremor\",\n    \"repoName\": \"tremorlabs/tremor\",\n    \"githubUrl\": \"https://github.com/tremorlabs/tremor\",\n    \"description\": \"Copy & Paste React components to build modern web applications. \",\n    \"owner\": \"tremorlabs\",\n    \"repo\": \"tremor\"\n  },\n  \"Trigger.dev\": {\n    \"title\": \"Trigger.dev\",\n    \"repoName\": \"triggerdotdev/trigger.dev\",\n    \"githubUrl\": \"https://github.com/triggerdotdev/trigger.dev\",\n    \"description\": \"Trigger.dev – open source background jobs and AI infrastructure\",\n    \"owner\": \"triggerdotdev\",\n    \"repo\": \"trigger.dev\"\n  },\n  \"Trongate\": {\n    \"title\": \"Trongate\",\n    \"repoName\": \"trongate/trongate-docs\",\n    \"githubUrl\": \"https://github.com/trongate/trongate-docs\",\n    \"description\": \"The documentation for the Trongate PHP framework\",\n    \"owner\": \"trongate\",\n    \"repo\": \"trongate-docs\"\n  },\n  \"Tron Protocol\": {\n    \"title\": \"Tron Protocol\",\n    \"repoName\": \"tronprotocol/documentation-en\",\n    \"githubUrl\": \"https://github.com/tronprotocol/documentation-en\",\n    \"description\": \"\",\n    \"owner\": \"tronprotocol\",\n    \"repo\": \"documentation-en\"\n  },\n  \"TronWeb\": {\n    \"title\": \"TronWeb\",\n    \"repoName\": \"tronprotocol/tronweb\",\n    \"githubUrl\": \"https://github.com/tronprotocol/tronweb\",\n    \"description\": \"Javascript API Library for interacting with the TRON Network \",\n    \"owner\": \"tronprotocol\",\n    \"repo\": \"tronweb\"\n  },\n  \"tRPC\": {\n    \"title\": \"tRPC\",\n    \"repoName\": \"trpc/trpc\",\n    \"githubUrl\": \"https://github.com/trpc/trpc\",\n    \"description\": \"🧙‍♀️  Move Fast and Break Nothing. End-to-end typesafe APIs made easy. \",\n    \"owner\": \"trpc\",\n    \"repo\": \"trpc\"\n  },\n  \"Trubrics Python\": {\n    \"title\": \"Trubrics Python\",\n    \"repoName\": \"trubrics/trubrics-python\",\n    \"githubUrl\": \"https://github.com/trubrics/trubrics-python\",\n    \"description\": \"Product analytics for AI Assistants\",\n    \"owner\": \"trubrics\",\n    \"repo\": \"trubrics-python\"\n  },\n  \"Trunk\": {\n    \"title\": \"Trunk\",\n    \"repoName\": \"trunk-rs/trunk\",\n    \"githubUrl\": \"https://github.com/trunk-rs/trunk\",\n    \"description\": \"Build, bundle & ship your Rust WASM application to the web.\",\n    \"owner\": \"trunk-rs\",\n    \"repo\": \"trunk\"\n  },\n  \"Ghost\": {\n    \"title\": \"Ghost\",\n    \"repoName\": \"tryghost/docs\",\n    \"githubUrl\": \"https://github.com/tryghost/docs\",\n    \"description\": \"Ghost's official documentation\",\n    \"owner\": \"tryghost\",\n    \"repo\": \"docs\"\n  },\n  \"ts-rest\": {\n    \"title\": \"ts-rest\",\n    \"repoName\": \"ts-rest/ts-rest\",\n    \"githubUrl\": \"https://github.com/ts-rest/ts-rest\",\n    \"description\": \"RPC-like client, contract, and server implementation for a pure REST API\",\n    \"owner\": \"ts-rest\",\n    \"repo\": \"ts-rest\"\n  },\n  \"Ts.ED\": {\n    \"title\": \"Ts.ED\",\n    \"repoName\": \"tsedio/tsed\",\n    \"githubUrl\": \"https://github.com/tsedio/tsed\",\n    \"description\": \" :triangular_ruler:  Ts.ED is a Node.js and TypeScript framework on top of Express to write your application with TypeScript (or ES6). It provides a lot of decorators and guideline to make your code more readable and less error-prone. ⭐️ Star to support our work! \",\n    \"owner\": \"tsedio\",\n    \"repo\": \"tsed\"\n  },\n  \"Vite Plugin Csp Guard\": {\n    \"title\": \"Vite Plugin Csp Guard\",\n    \"repoName\": \"tsotimus/vite-plugin-csp-guard\",\n    \"githubUrl\": \"https://github.com/tsotimus/vite-plugin-csp-guard\",\n    \"description\": \"A vite plugin for your content security policy\",\n    \"owner\": \"tsotimus\",\n    \"repo\": \"vite-plugin-csp-guard\"\n  },\n  \"Tuist\": {\n    \"title\": \"Tuist\",\n    \"repoName\": \"tuist/tuist\",\n    \"githubUrl\": \"https://github.com/tuist/tuist\",\n    \"description\": \"Build better Swift apps faster\",\n    \"owner\": \"tuist\",\n    \"repo\": \"tuist\"\n  },\n  \"KafkaJS\": {\n    \"title\": \"KafkaJS\",\n    \"repoName\": \"tulios/kafkajs\",\n    \"githubUrl\": \"https://github.com/tulios/kafkajs\",\n    \"description\": \"A modern Apache Kafka client for node.js\",\n    \"owner\": \"tulios\",\n    \"repo\": \"kafkajs\"\n  },\n  \"JSON-RPC v2.0 Specification\": {\n    \"title\": \"JSON-RPC v2.0 Specification\",\n    \"repoName\": \"tunnckocore/jsonrpc-v2.0-spec\",\n    \"githubUrl\": \"https://github.com/tunnckocore/jsonrpc-v2.0-spec\",\n    \"description\": \"JSON-RPC v2.0 Specification in markdown format. On github, because i couldn't find any, and i need it in Github to be able to be requested through Context7 MCP for LLMs.\",\n    \"owner\": \"tunnckocore\",\n    \"repo\": \"jsonrpc-v2.0-spec\"\n  },\n  \"Turf\": {\n    \"title\": \"Turf\",\n    \"repoName\": \"turfjs/turf\",\n    \"githubUrl\": \"https://github.com/turfjs/turf\",\n    \"description\": \"A modular geospatial engine written in JavaScript and TypeScript\",\n    \"owner\": \"turfjs\",\n    \"repo\": \"turf\"\n  },\n  \"Turing.jl\": {\n    \"title\": \"Turing.jl\",\n    \"repoName\": \"turinglang/turing.jl\",\n    \"githubUrl\": \"https://github.com/turinglang/turing.jl\",\n    \"description\": \"Bayesian inference with probabilistic programming.\",\n    \"owner\": \"turinglang\",\n    \"repo\": \"turing.jl\"\n  },\n  \"libSQL\": {\n    \"title\": \"libSQL\",\n    \"repoName\": \"tursodatabase/libsql\",\n    \"githubUrl\": \"https://github.com/tursodatabase/libsql\",\n    \"description\": \"libSQL is a fork of SQLite that is both Open Source, and Open Contributions.\",\n    \"owner\": \"tursodatabase\",\n    \"repo\": \"libsql\"\n  },\n  \"Naive UI\": {\n    \"title\": \"Naive UI\",\n    \"repoName\": \"tusen-ai/naive-ui\",\n    \"githubUrl\": \"https://github.com/tusen-ai/naive-ui\",\n    \"description\": \"A Vue 3 Component Library. Fairly Complete. Theme Customizable. Uses TypeScript. Fast.\",\n    \"owner\": \"tusen-ai\",\n    \"repo\": \"naive-ui\"\n  },\n  \"Bootstrap\": {\n    \"title\": \"Bootstrap\",\n    \"repoName\": \"twbs/bootstrap\",\n    \"githubUrl\": \"https://github.com/twbs/bootstrap\",\n    \"description\": \"The most popular HTML, CSS, and JavaScript framework for developing responsive, mobile first projects on the web.\",\n    \"owner\": \"twbs\",\n    \"repo\": \"bootstrap\"\n  },\n  \"Twig\": {\n    \"title\": \"Twig\",\n    \"repoName\": \"twigphp/twig\",\n    \"githubUrl\": \"https://github.com/twigphp/twig\",\n    \"description\": \"Twig, the flexible, fast, and secure template language for PHP\",\n    \"owner\": \"twigphp\",\n    \"repo\": \"twig\"\n  },\n  \"Twilight\": {\n    \"title\": \"Twilight\",\n    \"repoName\": \"twilight-rs/twilight\",\n    \"githubUrl\": \"https://github.com/twilight-rs/twilight\",\n    \"description\": \"Powerful, flexible, and scalable ecosystem of Rust libraries for the Discord API.\",\n    \"owner\": \"twilight-rs\",\n    \"repo\": \"twilight\"\n  },\n  \"Twilio Go\": {\n    \"title\": \"Twilio Go\",\n    \"repoName\": \"twilio/twilio-go\",\n    \"githubUrl\": \"https://github.com/twilio/twilio-go\",\n    \"description\": \"A Go package for communicating with the Twilio API.\",\n    \"owner\": \"twilio\",\n    \"repo\": \"twilio-go\"\n  },\n  \"Twilio Java\": {\n    \"title\": \"Twilio Java\",\n    \"repoName\": \"twilio/twilio-java\",\n    \"githubUrl\": \"https://github.com/twilio/twilio-java\",\n    \"description\": \"A Java library for communicating with the Twilio REST API and generating TwiML.\",\n    \"owner\": \"twilio\",\n    \"repo\": \"twilio-java\"\n  },\n  \"Twilio Node\": {\n    \"title\": \"Twilio Node\",\n    \"repoName\": \"twilio/twilio-node\",\n    \"githubUrl\": \"https://github.com/twilio/twilio-node\",\n    \"description\": \"Node.js helper library\",\n    \"owner\": \"twilio\",\n    \"repo\": \"twilio-node\"\n  },\n  \"Twilio PHP\": {\n    \"title\": \"Twilio PHP\",\n    \"repoName\": \"twilio/twilio-php\",\n    \"githubUrl\": \"https://github.com/twilio/twilio-php\",\n    \"description\": \"A PHP library for communicating with the Twilio REST API and generating TwiML.\",\n    \"owner\": \"twilio\",\n    \"repo\": \"twilio-php\"\n  },\n  \"Twilio Python\": {\n    \"title\": \"Twilio Python\",\n    \"repoName\": \"twilio/twilio-python\",\n    \"githubUrl\": \"https://github.com/twilio/twilio-python\",\n    \"description\": \"A Python module for communicating with the Twilio API and generating TwiML.\",\n    \"owner\": \"twilio\",\n    \"repo\": \"twilio-python\"\n  },\n  \"Twilio Ruby\": {\n    \"title\": \"Twilio Ruby\",\n    \"repoName\": \"twilio/twilio-ruby\",\n    \"githubUrl\": \"https://github.com/twilio/twilio-ruby\",\n    \"description\": \"A Ruby gem for communicating with the Twilio API and generating TwiML\",\n    \"owner\": \"twilio\",\n    \"repo\": \"twilio-ruby\"\n  },\n  \"Pandas TA\": {\n    \"title\": \"Pandas TA\",\n    \"repoName\": \"twopirllc/pandas-ta\",\n    \"githubUrl\": \"https://github.com/twopirllc/pandas-ta\",\n    \"description\": \"Technical Analysis Indicators - Pandas TA is an easy to use Python 3 Pandas Extension with 150+ Indicators\",\n    \"owner\": \"twopirllc\",\n    \"repo\": \"pandas-ta\"\n  },\n  \"Apple Pass Generator\": {\n    \"title\": \"Apple Pass Generator\",\n    \"repoName\": \"twopointone/applepassgenerator\",\n    \"githubUrl\": \"https://github.com/twopointone/applepassgenerator\",\n    \"description\": \"Python library to generate passes i.e (.pkpass) files compatible with Apple Wallet \",\n    \"owner\": \"twopointone\",\n    \"repo\": \"applepassgenerator\"\n  },\n  \"BlockNote\": {\n    \"title\": \"BlockNote\",\n    \"repoName\": \"typecellos/blocknote\",\n    \"githubUrl\": \"https://github.com/typecellos/blocknote\",\n    \"description\": \"A React Rich Text Editor that's block-based (Notion style) and extensible. Built on top of Prosemirror and Tiptap.\",\n    \"owner\": \"typecellos\",\n    \"repo\": \"blocknote\"\n  },\n  \"Typegoose\": {\n    \"title\": \"Typegoose\",\n    \"repoName\": \"typegoose/typegoose\",\n    \"githubUrl\": \"https://github.com/typegoose/typegoose\",\n    \"description\": \"Typegoose - Define Mongoose models using TypeScript classes.\",\n    \"owner\": \"typegoose\",\n    \"repo\": \"typegoose\"\n  },\n  \"TypeORM\": {\n    \"title\": \"TypeORM\",\n    \"repoName\": \"typeorm/typeorm\",\n    \"githubUrl\": \"https://github.com/typeorm/typeorm\",\n    \"description\": \"ORM for TypeScript and JavaScript. Supports MySQL, PostgreSQL, MariaDB, SQLite, MS SQL Server, Oracle, SAP Hana, WebSQL databases. Works in NodeJS, Browser, Ionic, Cordova and Electron platforms.\",\n    \"owner\": \"typeorm\",\n    \"repo\": \"typeorm\"\n  },\n  \"TypeScript ESLint\": {\n    \"title\": \"TypeScript ESLint\",\n    \"repoName\": \"typescript-eslint/typescript-eslint\",\n    \"githubUrl\": \"https://github.com/typescript-eslint/typescript-eslint\",\n    \"description\": \":sparkles: Monorepo for all the tooling which enables ESLint to support TypeScript\",\n    \"owner\": \"typescript-eslint\",\n    \"repo\": \"typescript-eslint\"\n  },\n  \"Typesense\": {\n    \"title\": \"Typesense\",\n    \"repoName\": \"typesense/typesense\",\n    \"githubUrl\": \"https://github.com/typesense/typesense\",\n    \"description\": \"Open Source alternative to Algolia + Pinecone and an Easier-to-Use alternative to ElasticSearch ⚡ 🔍 ✨ Fast, typo tolerant, in-memory fuzzy Search Engine for building delightful search experiences\",\n    \"owner\": \"typesense\",\n    \"repo\": \"typesense\"\n  },\n  \"Husky\": {\n    \"title\": \"Husky\",\n    \"repoName\": \"typicode/husky\",\n    \"githubUrl\": \"https://github.com/typicode/husky\",\n    \"description\": \"Git hooks made easy 🐶 woof!\",\n    \"owner\": \"typicode\",\n    \"repo\": \"husky\"\n  },\n  \"TYPO3 CMS Exceptions\": {\n    \"title\": \"TYPO3 CMS Exceptions\",\n    \"repoName\": \"typo3-documentation/typo3cms-exceptions\",\n    \"githubUrl\": \"https://github.com/typo3-documentation/typo3cms-exceptions\",\n    \"description\": \"\",\n    \"owner\": \"typo3-documentation\",\n    \"repo\": \"typo3cms-exceptions\"\n  },\n  \"TYPO3\": {\n    \"title\": \"TYPO3\",\n    \"repoName\": \"typo3-documentation/typo3cms-reference-coreapi\",\n    \"githubUrl\": \"https://github.com/typo3-documentation/typo3cms-reference-coreapi\",\n    \"description\": \"\\\"TYPO3 Explained\\\": Main TYPO3 Core Document: Main classes, Security, TypoScript syntax, Extension API and much more\",\n    \"owner\": \"typo3-documentation\",\n    \"repo\": \"typo3cms-reference-coreapi\"\n  },\n  \"TYPO3 CMS TCA Reference\": {\n    \"title\": \"TYPO3 CMS TCA Reference\",\n    \"repoName\": \"typo3-documentation/typo3cms-reference-tca\",\n    \"githubUrl\": \"https://github.com/typo3-documentation/typo3cms-reference-tca\",\n    \"description\": \"Complete reference to the Table Configuration Array ($GLOBALS['TCA']).\",\n    \"owner\": \"typo3-documentation\",\n    \"repo\": \"typo3cms-reference-tca\"\n  },\n  \"TYPO3 TypoScript\": {\n    \"title\": \"TYPO3 TypoScript\",\n    \"repoName\": \"typo3-documentation/typo3cms-reference-typoscript\",\n    \"githubUrl\": \"https://github.com/typo3-documentation/typo3cms-reference-typoscript\",\n    \"description\": \"The TypoScript Reference (TSref) is a true reference describing the core Content Objects and functions available for Template building using the TypoScript template engine.\",\n    \"owner\": \"typo3-documentation\",\n    \"repo\": \"typo3cms-reference-typoscript\"\n  },\n  \"TYPO3 CMS\": {\n    \"title\": \"TYPO3 CMS\",\n    \"repoName\": \"typo3-documentation/typo3cms-reference-viewhelper\",\n    \"githubUrl\": \"https://github.com/typo3-documentation/typo3cms-reference-viewhelper\",\n    \"description\": \"Automatically generated ViewHelper reference\",\n    \"owner\": \"typo3-documentation\",\n    \"repo\": \"typo3cms-reference-viewhelper\"\n  },\n  \"QuickChart\": {\n    \"title\": \"QuickChart\",\n    \"repoName\": \"typpo/quickchart\",\n    \"githubUrl\": \"https://github.com/typpo/quickchart\",\n    \"description\": \"Chart image and QR code web API\",\n    \"owner\": \"typpo\",\n    \"repo\": \"quickchart\"\n  },\n  \"Typst\": {\n    \"title\": \"Typst\",\n    \"repoName\": \"typst/typst\",\n    \"githubUrl\": \"https://github.com/typst/typst\",\n    \"description\": \"A new markup-based typesetting system that is powerful and easy to learn.\",\n    \"owner\": \"typst\",\n    \"repo\": \"typst\"\n  },\n  \"ElectroDB\": {\n    \"title\": \"ElectroDB\",\n    \"repoName\": \"tywalch/electrodb\",\n    \"githubUrl\": \"https://github.com/tywalch/electrodb\",\n    \"description\": \"A DynamoDB library to ease the use of modeling complex hierarchical relationships and implementing a Single Table Design while keeping your query code readable.\",\n    \"owner\": \"tywalch\",\n    \"repo\": \"electrodb\"\n  },\n  \"GoMock\": {\n    \"title\": \"GoMock\",\n    \"repoName\": \"uber-go/mock\",\n    \"githubUrl\": \"https://github.com/uber-go/mock\",\n    \"description\": \"GoMock is a mocking framework for the Go programming language.\",\n    \"owner\": \"uber-go\",\n    \"repo\": \"mock\"\n  },\n  \"Zap\": {\n    \"title\": \"Zap\",\n    \"repoName\": \"uber-go/zap\",\n    \"githubUrl\": \"https://github.com/uber-go/zap\",\n    \"description\": \"Blazing fast, structured, leveled logging in Go.\",\n    \"owner\": \"uber-go\",\n    \"repo\": \"zap\"\n  },\n  \"Base Web\": {\n    \"title\": \"Base Web\",\n    \"repoName\": \"uber/baseweb\",\n    \"githubUrl\": \"https://github.com/uber/baseweb\",\n    \"description\": \"A React Component library implementing the Base design language\",\n    \"owner\": \"uber\",\n    \"repo\": \"baseweb\"\n  },\n  \"Plate\": {\n    \"title\": \"Plate\",\n    \"repoName\": \"udecode/plate\",\n    \"githubUrl\": \"https://github.com/udecode/plate\",\n    \"description\": \"A rich-text editor powered by AI\",\n    \"owner\": \"udecode\",\n    \"repo\": \"plate\"\n  },\n  \"Hocuspocus\": {\n    \"title\": \"Hocuspocus\",\n    \"repoName\": \"ueberdosis/hocuspocus\",\n    \"githubUrl\": \"https://github.com/ueberdosis/hocuspocus\",\n    \"description\": \"The CRDT Yjs WebSocket backend for conflict-free real-time collaboration in your app.\",\n    \"owner\": \"ueberdosis\",\n    \"repo\": \"hocuspocus\"\n  },\n  \"Tiptap\": {\n    \"title\": \"Tiptap\",\n    \"repoName\": \"ueberdosis/tiptap-docs\",\n    \"githubUrl\": \"https://github.com/ueberdosis/tiptap-docs\",\n    \"description\": \"\",\n    \"owner\": \"ueberdosis\",\n    \"repo\": \"tiptap-docs\"\n  },\n  \"PdfPig\": {\n    \"title\": \"PdfPig\",\n    \"repoName\": \"uglytoad/pdfpig\",\n    \"githubUrl\": \"https://github.com/uglytoad/pdfpig\",\n    \"description\": \"Read and extract text and other content from PDFs in C# (port of PDFBox)\",\n    \"owner\": \"uglytoad\",\n    \"repo\": \"pdfpig\"\n  },\n  \"UseHooks\": {\n    \"title\": \"UseHooks\",\n    \"repoName\": \"uidotdev/usehooks\",\n    \"githubUrl\": \"https://github.com/uidotdev/usehooks\",\n    \"description\": \"A collection of modern, server-safe React hooks – from the ui.dev team\",\n    \"owner\": \"uidotdev\",\n    \"repo\": \"usehooks\"\n  },\n  \"Sentence Transformers\": {\n    \"title\": \"Sentence Transformers\",\n    \"repoName\": \"ukplab/sentence-transformers\",\n    \"githubUrl\": \"https://github.com/ukplab/sentence-transformers\",\n    \"description\": \"State-of-the-Art Text Embeddings\",\n    \"owner\": \"ukplab\",\n    \"repo\": \"sentence-transformers\"\n  },\n  \"ULID\": {\n    \"title\": \"ULID\",\n    \"repoName\": \"ulid/spec\",\n    \"githubUrl\": \"https://github.com/ulid/spec\",\n    \"description\": \"The canonical spec for ulid\",\n    \"owner\": \"ulid\",\n    \"repo\": \"spec\"\n  },\n  \"Nodriver\": {\n    \"title\": \"Nodriver\",\n    \"repoName\": \"ultrafunkamsterdam/nodriver\",\n    \"githubUrl\": \"https://github.com/ultrafunkamsterdam/nodriver\",\n    \"description\": \"Successor of Undetected-Chromedriver. Providing a blazing fast framework for web automation, webscraping, bots and any other creative ideas which are normally hindered by annoying anti bot systems like Captcha / CloudFlare / Imperva / hCaptcha \",\n    \"owner\": \"ultrafunkamsterdam\",\n    \"repo\": \"nodriver\"\n  },\n  \"Ultralytics YOLO\": {\n    \"title\": \"Ultralytics YOLO\",\n    \"repoName\": \"ultralytics/ultralytics\",\n    \"githubUrl\": \"https://github.com/ultralytics/ultralytics\",\n    \"description\": \"Ultralytics YOLO11 🚀\",\n    \"owner\": \"ultralytics\",\n    \"repo\": \"ultralytics\"\n  },\n  \"Umbraco CMS\": {\n    \"title\": \"Umbraco CMS\",\n    \"repoName\": \"umbraco/umbraco-cms\",\n    \"githubUrl\": \"https://github.com/umbraco/umbraco-cms\",\n    \"description\": \"Umbraco is a free and open source .NET content management system helping you deliver delightful digital experiences.\",\n    \"owner\": \"umbraco\",\n    \"repo\": \"umbraco-cms\"\n  },\n  \"Una UI\": {\n    \"title\": \"Una UI\",\n    \"repoName\": \"una-ui/una-ui\",\n    \"githubUrl\": \"https://github.com/una-ui/una-ui\",\n    \"description\": \"The Atomic UI framework for Nuxt, powered by Unocss engine 💛\",\n    \"owner\": \"una-ui\",\n    \"repo\": \"una-ui\"\n  },\n  \"Crawl4AI\": {\n    \"title\": \"Crawl4AI\",\n    \"repoName\": \"unclecode/crawl4ai\",\n    \"githubUrl\": \"https://github.com/unclecode/crawl4ai\",\n    \"description\": \"🚀🤖 Crawl4AI: Open-source LLM Friendly Web Crawler & Scraper. Don't be shy, join here: https://discord.gg/jP8KfhDhyN\",\n    \"owner\": \"unclecode\",\n    \"repo\": \"crawl4ai\"\n  },\n  \"MathBox\": {\n    \"title\": \"MathBox\",\n    \"repoName\": \"unconed/mathbox\",\n    \"githubUrl\": \"https://github.com/unconed/mathbox\",\n    \"description\": \"Presentation-quality WebGL math graphing\",\n    \"owner\": \"unconed\",\n    \"repo\": \"mathbox\"\n  },\n  \"UWebSockets\": {\n    \"title\": \"UWebSockets\",\n    \"repoName\": \"unetworking/uwebsockets\",\n    \"githubUrl\": \"https://github.com/unetworking/uwebsockets\",\n    \"description\": \"Simple, secure & standards compliant web server for the most demanding of applications\",\n    \"owner\": \"unetworking\",\n    \"repo\": \"uwebsockets\"\n  },\n  \"Django Unfold\": {\n    \"title\": \"Django Unfold\",\n    \"repoName\": \"unfoldadmin/django-unfold\",\n    \"githubUrl\": \"https://github.com/unfoldadmin/django-unfold\",\n    \"description\": \"Elevate your Django admin with a stunning modern interface, powerful features, and seamless user experience - without compromising functionality.\",\n    \"owner\": \"unfoldadmin\",\n    \"repo\": \"django-unfold\"\n  },\n  \"Unipile Node SDK\": {\n    \"title\": \"Unipile Node SDK\",\n    \"repoName\": \"unipile/unipile-node-sdk\",\n    \"githubUrl\": \"https://github.com/unipile/unipile-node-sdk\",\n    \"description\": \"A Node.js wrapper for Unipile’s API to manage LinkedIn API, WhatsApp API, Email API...\",\n    \"owner\": \"unipile\",\n    \"repo\": \"unipile-node-sdk\"\n  },\n  \"Uniswap Widgets\": {\n    \"title\": \"Uniswap Widgets\",\n    \"repoName\": \"uniswap/widgets\",\n    \"githubUrl\": \"https://github.com/uniswap/widgets\",\n    \"description\": \"\",\n    \"owner\": \"uniswap\",\n    \"repo\": \"widgets\"\n  },\n  \"Darts\": {\n    \"title\": \"Darts\",\n    \"repoName\": \"unit8co/darts\",\n    \"githubUrl\": \"https://github.com/unit8co/darts\",\n    \"description\": \"A python library for user-friendly forecasting and anomaly detection on time series.\",\n    \"owner\": \"unit8co\",\n    \"repo\": \"darts\"\n  },\n  \"H3\": {\n    \"title\": \"H3\",\n    \"repoName\": \"unjs/h3\",\n    \"githubUrl\": \"https://github.com/unjs/h3\",\n    \"description\": \"⚡️ Minimal H(TTP) framework built for high performance and portability \",\n    \"owner\": \"unjs\",\n    \"repo\": \"h3\"\n  },\n  \"Unstorage\": {\n    \"title\": \"Unstorage\",\n    \"repoName\": \"unjs/unstorage\",\n    \"githubUrl\": \"https://github.com/unjs/unstorage\",\n    \"description\": \" 💾 Unstorage provides an async Key-Value storage API with conventional features like multi driver mounting, watching and working with metadata, dozens of built-in drivers and a tiny core.\",\n    \"owner\": \"unjs\",\n    \"repo\": \"unstorage\"\n  },\n  \"Unkey\": {\n    \"title\": \"Unkey\",\n    \"repoName\": \"unkeyed/unkey\",\n    \"githubUrl\": \"https://github.com/unkeyed/unkey\",\n    \"description\": \"Open source API management platform\",\n    \"owner\": \"unkeyed\",\n    \"repo\": \"unkey\"\n  },\n  \"React Email Editor\": {\n    \"title\": \"React Email Editor\",\n    \"repoName\": \"unlayer/react-email-editor\",\n    \"githubUrl\": \"https://github.com/unlayer/react-email-editor\",\n    \"description\": \"Drag-n-Drop Email Editor Component for React.js\",\n    \"owner\": \"unlayer\",\n    \"repo\": \"react-email-editor\"\n  },\n  \"Unleash\": {\n    \"title\": \"Unleash\",\n    \"repoName\": \"unleash/unleash\",\n    \"githubUrl\": \"https://github.com/unleash/unleash\",\n    \"description\": \"Open-source feature management platform\",\n    \"owner\": \"unleash\",\n    \"repo\": \"unleash\"\n  },\n  \"Orpc\": {\n    \"title\": \"Orpc\",\n    \"repoName\": \"unnoq/orpc\",\n    \"githubUrl\": \"https://github.com/unnoq/orpc\",\n    \"description\": \"Typesafe APIs Made Simple 🪄\",\n    \"owner\": \"unnoq\",\n    \"repo\": \"orpc\"\n  },\n  \"UnoCSS\": {\n    \"title\": \"UnoCSS\",\n    \"repoName\": \"unocss/unocss\",\n    \"githubUrl\": \"https://github.com/unocss/unocss\",\n    \"description\": \"The instant on-demand atomic CSS engine.\",\n    \"owner\": \"unocss\",\n    \"repo\": \"unocss\"\n  },\n  \"Shadcn Vue\": {\n    \"title\": \"Shadcn Vue\",\n    \"repoName\": \"unovue/shadcn-vue\",\n    \"githubUrl\": \"https://github.com/unovue/shadcn-vue\",\n    \"description\": \"Vue port of shadcn-ui\",\n    \"owner\": \"unovue\",\n    \"repo\": \"shadcn-vue\"\n  },\n  \"Unpoly\": {\n    \"title\": \"Unpoly\",\n    \"repoName\": \"unpoly/unpoly\",\n    \"githubUrl\": \"https://github.com/unpoly/unpoly\",\n    \"description\": \"Progressive enhancement for HTML\",\n    \"owner\": \"unpoly\",\n    \"repo\": \"unpoly\"\n  },\n  \"Unstructured\": {\n    \"title\": \"Unstructured\",\n    \"repoName\": \"unstructured-io/unstructured\",\n    \"githubUrl\": \"https://github.com/unstructured-io/unstructured\",\n    \"description\": \"Open source libraries and APIs to build custom preprocessing pipelines for labeling, training, or production machine learning pipelines. \",\n    \"owner\": \"unstructured-io\",\n    \"repo\": \"unstructured\"\n  },\n  \"PokerKit\": {\n    \"title\": \"PokerKit\",\n    \"repoName\": \"uoftcprg/pokerkit\",\n    \"githubUrl\": \"https://github.com/uoftcprg/pokerkit\",\n    \"description\": \"An open-source Python library for poker game simulations, hand evaluations, and statistical analysis\",\n    \"owner\": \"uoftcprg\",\n    \"repo\": \"pokerkit\"\n  },\n  \"Update JS\": {\n    \"title\": \"Update JS\",\n    \"repoName\": \"updatedotdev/js\",\n    \"githubUrl\": \"https://github.com/updatedotdev/js\",\n    \"description\": \"Add payments to your app in five minutes.\",\n    \"owner\": \"updatedotdev\",\n    \"repo\": \"js\"\n  },\n  \"Upptime\": {\n    \"title\": \"Upptime\",\n    \"repoName\": \"upptime/upptime\",\n    \"githubUrl\": \"https://github.com/upptime/upptime\",\n    \"description\": \"⬆️ GitHub Actions uptime monitor & status page by @AnandChowdhary\",\n    \"owner\": \"upptime\",\n    \"repo\": \"upptime\"\n  },\n  \"Upsonic\": {\n    \"title\": \"Upsonic\",\n    \"repoName\": \"upsonic/upsonic\",\n    \"githubUrl\": \"https://github.com/upsonic/upsonic\",\n    \"description\": \"The most reliable AI agent framework that supports MCP.\",\n    \"owner\": \"upsonic\",\n    \"repo\": \"upsonic\"\n  },\n  \"Context7 MCP Server\": {\n    \"title\": \"Context7 MCP Server\",\n    \"repoName\": \"wilsonsilva/context7-mcp\",\n    \"githubUrl\": \"https://github.com/wilsonsilva/context7-mcp\",\n    \"description\": \"Context7 MCP Server\",\n    \"owner\": \"wilsonsilva\",\n    \"repo\": \"context7-mcp\"\n  },\n  \"Upstash QStash\": {\n    \"title\": \"Upstash QStash\",\n    \"repoName\": \"upstash/docs?folders=qstash\",\n    \"githubUrl\": \"https://github.com/upstash/docs\",\n    \"description\": \"Upstash documentation\",\n    \"owner\": \"upstash\",\n    \"repo\": \"docs?folders=qstash\"\n  },\n  \"Upstash Redis\": {\n    \"title\": \"Upstash Redis\",\n    \"repoName\": \"upstash/docs?folders=redis\",\n    \"githubUrl\": \"https://github.com/upstash/docs\",\n    \"description\": \"Upstash documentation\",\n    \"owner\": \"upstash\",\n    \"repo\": \"docs?folders=redis\"\n  },\n  \"Upstash Workflow\": {\n    \"title\": \"Upstash Workflow\",\n    \"repoName\": \"upstash/docs?folders=workflow\",\n    \"githubUrl\": \"https://github.com/upstash/docs\",\n    \"description\": \"Upstash documentation\",\n    \"owner\": \"upstash\",\n    \"repo\": \"docs?folders=workflow\"\n  },\n  \"JStack\": {\n    \"title\": \"JStack\",\n    \"repoName\": \"upstash/jstack\",\n    \"githubUrl\": \"https://github.com/upstash/jstack\",\n    \"description\": \"Build seriously fast, lightweight and end-to-end typesafe Next.js apps\",\n    \"owner\": \"upstash\",\n    \"repo\": \"jstack\"\n  },\n  \"Upstash Lock\": {\n    \"title\": \"Upstash Lock\",\n    \"repoName\": \"upstash/lock\",\n    \"githubUrl\": \"https://github.com/upstash/lock\",\n    \"description\": \"Basic Lock Service using Redis\",\n    \"owner\": \"upstash\",\n    \"repo\": \"lock\"\n  },\n  \"Ratelimit JS\": {\n    \"title\": \"Ratelimit JS\",\n    \"repoName\": \"upstash/ratelimit-js\",\n    \"githubUrl\": \"https://github.com/upstash/ratelimit-js\",\n    \"description\": \"Rate limiting library for serverless runtimes\",\n    \"owner\": \"upstash\",\n    \"repo\": \"ratelimit-js\"\n  },\n  \"Ratelimit Py\": {\n    \"title\": \"Ratelimit Py\",\n    \"repoName\": \"upstash/ratelimit-py\",\n    \"githubUrl\": \"https://github.com/upstash/ratelimit-py\",\n    \"description\": \"Rate limiting library for serverless runtimes in Python\",\n    \"owner\": \"upstash\",\n    \"repo\": \"ratelimit-py\"\n  },\n  \"React Redis Browser\": {\n    \"title\": \"React Redis Browser\",\n    \"repoName\": \"upstash/react-redis-browser\",\n    \"githubUrl\": \"https://github.com/upstash/react-redis-browser\",\n    \"description\": \"React component for Redis data browser\",\n    \"owner\": \"upstash\",\n    \"repo\": \"react-redis-browser\"\n  },\n  \"Semantic Cache\": {\n    \"title\": \"Semantic Cache\",\n    \"repoName\": \"upstash/semantic-cache\",\n    \"githubUrl\": \"https://github.com/upstash/semantic-cache\",\n    \"description\": \"A fuzzy key value store based on semantic similarity rather lexical equality.\",\n    \"owner\": \"upstash\",\n    \"repo\": \"semantic-cache\"\n  },\n  \"Wikipedia Semantic Search\": {\n    \"title\": \"Wikipedia Semantic Search\",\n    \"repoName\": \"upstash/wikipedia-semantic-search\",\n    \"githubUrl\": \"https://github.com/upstash/wikipedia-semantic-search\",\n    \"description\": \"Semantic Search on Wikipedia with Upstash Vector\",\n    \"owner\": \"upstash\",\n    \"repo\": \"wikipedia-semantic-search\"\n  },\n  \"Upstox Python SDK\": {\n    \"title\": \"Upstox Python SDK\",\n    \"repoName\": \"upstox/upstox-python.git\",\n    \"githubUrl\": \"https://github.com/upstox/upstox-python.git\",\n    \"description\": \"Official Python SDK for accessing Upstox API\",\n    \"owner\": \"upstox\",\n    \"repo\": \"upstox-python.git\"\n  },\n  \"Pyzotero\": {\n    \"title\": \"Pyzotero\",\n    \"repoName\": \"urschrei/pyzotero.git\",\n    \"githubUrl\": \"https://github.com/urschrei/pyzotero.git\",\n    \"description\": \"Pyzotero: a Python client for the Zotero API\",\n    \"owner\": \"urschrei\",\n    \"repo\": \"pyzotero.git\"\n  },\n  \"Bruno\": {\n    \"title\": \"Bruno\",\n    \"repoName\": \"usebruno/bruno-docs\",\n    \"githubUrl\": \"https://github.com/usebruno/bruno-docs\",\n    \"description\": \"Documentation Site for Bruno\",\n    \"owner\": \"usebruno\",\n    \"repo\": \"bruno-docs\"\n  },\n  \"Graffy\": {\n    \"title\": \"Graffy\",\n    \"repoName\": \"usegraffy/graffy\",\n    \"githubUrl\": \"https://github.com/usegraffy/graffy\",\n    \"description\": \"Live queries for graph-shaped data\",\n    \"owner\": \"usegraffy\",\n    \"repo\": \"graffy\"\n  },\n  \"Uuid\": {\n    \"title\": \"Uuid\",\n    \"repoName\": \"uuid-rs/uuid\",\n    \"githubUrl\": \"https://github.com/uuid-rs/uuid\",\n    \"description\": \"Generate and parse UUIDs.\",\n    \"owner\": \"uuid-rs\",\n    \"repo\": \"uuid\"\n  },\n  \"UUID\": {\n    \"title\": \"UUID\",\n    \"repoName\": \"uuidjs/uuid\",\n    \"githubUrl\": \"https://github.com/uuidjs/uuid\",\n    \"description\": \"Generate RFC-compliant UUIDs in JavaScript\",\n    \"owner\": \"uuidjs\",\n    \"repo\": \"uuid\"\n  },\n  \"Variable Infiltration Capacity\": {\n    \"title\": \"Variable Infiltration Capacity\",\n    \"repoName\": \"uw-hydro/vic\",\n    \"githubUrl\": \"https://github.com/uw-hydro/vic\",\n    \"description\": \"The Variable Infiltration Capacity (VIC) Macroscale Hydrologic Model\",\n    \"owner\": \"uw-hydro\",\n    \"repo\": \"vic\"\n  },\n  \"Mosaic\": {\n    \"title\": \"Mosaic\",\n    \"repoName\": \"uwdata/mosaic\",\n    \"githubUrl\": \"https://github.com/uwdata/mosaic\",\n    \"description\": \"An extensible framework for linking databases and interactive views.\",\n    \"owner\": \"uwdata\",\n    \"repo\": \"mosaic\"\n  },\n  \"V8\": {\n    \"title\": \"V8\",\n    \"repoName\": \"v8/v8.dev\",\n    \"githubUrl\": \"https://github.com/v8/v8.dev\",\n    \"description\": \"The source code of v8.dev, the official website of the V8 project.\",\n    \"owner\": \"v8\",\n    \"repo\": \"v8.dev\"\n  },\n  \"Vaadin and Hilla\": {\n    \"title\": \"Vaadin and Hilla\",\n    \"repoName\": \"vaadin/docs\",\n    \"githubUrl\": \"https://github.com/vaadin/docs\",\n    \"description\": \"Official documentation for Vaadin and Hilla.\",\n    \"owner\": \"vaadin\",\n    \"repo\": \"docs\"\n  },\n  \"Ink UI\": {\n    \"title\": \"Ink UI\",\n    \"repoName\": \"vadimdemedes/ink-ui\",\n    \"githubUrl\": \"https://github.com/vadimdemedes/ink-ui\",\n    \"description\": \"💄 Ink-redible command-line interfaces made easy\",\n    \"owner\": \"vadimdemedes\",\n    \"repo\": \"ink-ui\"\n  },\n  \"Vala\": {\n    \"title\": \"Vala\",\n    \"repoName\": \"vala-lang/vala-docs\",\n    \"githubUrl\": \"https://github.com/vala-lang/vala-docs\",\n    \"description\": \"Vala Documentation Website\",\n    \"owner\": \"vala-lang\",\n    \"repo\": \"vala-docs\"\n  },\n  \"Vanilla Extract\": {\n    \"title\": \"Vanilla Extract\",\n    \"repoName\": \"vanilla-extract-css/vanilla-extract\",\n    \"githubUrl\": \"https://github.com/vanilla-extract-css/vanilla-extract\",\n    \"description\": \"Zero-runtime Stylesheets-in-TypeScript\",\n    \"owner\": \"vanilla-extract-css\",\n    \"repo\": \"vanilla-extract\"\n  },\n  \"Vanna\": {\n    \"title\": \"Vanna\",\n    \"repoName\": \"vanna-ai/vanna\",\n    \"githubUrl\": \"https://github.com/vanna-ai/vanna\",\n    \"description\": \"🤖 Chat with your SQL database 📊. Accurate Text-to-SQL Generation via LLMs using RAG 🔄.\",\n    \"owner\": \"vanna-ai\",\n    \"repo\": \"vanna\"\n  },\n  \"Winston Elasticsearch\": {\n    \"title\": \"Winston Elasticsearch\",\n    \"repoName\": \"vanthome/winston-elasticsearch\",\n    \"githubUrl\": \"https://github.com/vanthome/winston-elasticsearch\",\n    \"description\": \"An elasticsearch transport for winston\",\n    \"owner\": \"vanthome\",\n    \"repo\": \"winston-elasticsearch\"\n  },\n  \"Vapi\": {\n    \"title\": \"Vapi\",\n    \"repoName\": \"vapiai/docs\",\n    \"githubUrl\": \"https://github.com/vapiai/docs\",\n    \"description\": \"Vapi docs\",\n    \"owner\": \"vapiai\",\n    \"repo\": \"docs\"\n  },\n  \"Dumsum\": {\n    \"title\": \"Dumsum\",\n    \"repoName\": \"varlabz/dumsum\",\n    \"githubUrl\": \"https://github.com/varlabz/dumsum\",\n    \"description\": \"Enhance the LinkedIn user experience with AI\",\n    \"owner\": \"varlabz\",\n    \"repo\": \"dumsum\"\n  },\n  \"Varnish Cache\": {\n    \"title\": \"Varnish Cache\",\n    \"repoName\": \"varnishcache/varnish-cache\",\n    \"githubUrl\": \"https://github.com/varnishcache/varnish-cache\",\n    \"description\": \"Varnish Cache source code repository\",\n    \"owner\": \"varnishcache\",\n    \"repo\": \"varnish-cache\"\n  },\n  \"Pundit\": {\n    \"title\": \"Pundit\",\n    \"repoName\": \"varvet/pundit\",\n    \"githubUrl\": \"https://github.com/varvet/pundit\",\n    \"description\": \"Minimal authorization through OO design and pure Ruby classes\",\n    \"owner\": \"varvet\",\n    \"repo\": \"pundit\"\n  },\n  \"D3 Force 3D\": {\n    \"title\": \"D3 Force 3D\",\n    \"repoName\": \"vasturiano/d3-force-3d\",\n    \"githubUrl\": \"https://github.com/vasturiano/d3-force-3d\",\n    \"description\": \"Force-directed graph layout in 1D, 2D or 3D using velocity Verlet integration.\",\n    \"owner\": \"vasturiano\",\n    \"repo\": \"d3-force-3d\"\n  },\n  \"Vectorize Clients\": {\n    \"title\": \"Vectorize Clients\",\n    \"repoName\": \"vectorize-io/vectorize-clients\",\n    \"githubUrl\": \"https://github.com/vectorize-io/vectorize-clients\",\n    \"description\": \"Vectorize Clients monorepo\",\n    \"owner\": \"vectorize-io\",\n    \"repo\": \"vectorize-clients\"\n  },\n  \"Solady\": {\n    \"title\": \"Solady\",\n    \"repoName\": \"vectorized/solady\",\n    \"githubUrl\": \"https://github.com/vectorized/solady\",\n    \"description\": \"Optimized Solidity snippets.\",\n    \"owner\": \"vectorized\",\n    \"repo\": \"solady\"\n  },\n  \"Altair\": {\n    \"title\": \"Altair\",\n    \"repoName\": \"vega/altair\",\n    \"githubUrl\": \"https://github.com/vega/altair\",\n    \"description\": \"Declarative visualization library for Python\",\n    \"owner\": \"vega\",\n    \"repo\": \"altair\"\n  },\n  \"Vega\": {\n    \"title\": \"Vega\",\n    \"repoName\": \"vega/vega\",\n    \"githubUrl\": \"https://github.com/vega/vega\",\n    \"description\": \"A visualization grammar.\",\n    \"owner\": \"vega\",\n    \"repo\": \"vega\"\n  },\n  \"Vega Embed\": {\n    \"title\": \"Vega Embed\",\n    \"repoName\": \"vega/vega-embed\",\n    \"githubUrl\": \"https://github.com/vega/vega-embed\",\n    \"description\": \"Publish Vega visualizations as embedded web components with interactive parameters.\",\n    \"owner\": \"vega\",\n    \"repo\": \"vega-embed\"\n  },\n  \"Vega Lite\": {\n    \"title\": \"Vega Lite\",\n    \"repoName\": \"vega/vega-lite\",\n    \"githubUrl\": \"https://github.com/vega/vega-lite\",\n    \"description\": \"A concise grammar of interactive graphics, built on Vega.\",\n    \"owner\": \"vega\",\n    \"repo\": \"vega-lite\"\n  },\n  \"Vendure\": {\n    \"title\": \"Vendure\",\n    \"repoName\": \"vendure-ecommerce/vendure\",\n    \"githubUrl\": \"https://github.com/vendure-ecommerce/vendure\",\n    \"description\": \"The commerce platform with customization in its DNA. \",\n    \"owner\": \"vendure-ecommerce\",\n    \"repo\": \"vendure\"\n  },\n  \"Vercel AI SDK\": {\n    \"title\": \"Vercel AI SDK\",\n    \"repoName\": \"vercel/ai\",\n    \"githubUrl\": \"https://github.com/vercel/ai\",\n    \"description\": \"The AI Toolkit for TypeScript. From the creators of Next.js, the AI SDK is a free open-source library for building AI-powered applications and agents \",\n    \"owner\": \"vercel\",\n    \"repo\": \"ai\"\n  },\n  \"Vercel AI Chatbot\": {\n    \"title\": \"Vercel AI Chatbot\",\n    \"repoName\": \"vercel/ai-chatbot\",\n    \"githubUrl\": \"https://github.com/vercel/ai-chatbot\",\n    \"description\": \"A full-featured, hackable Next.js AI chatbot built by Vercel\",\n    \"owner\": \"vercel\",\n    \"repo\": \"ai-chatbot\"\n  },\n  \"Flags SDK\": {\n    \"title\": \"Flags SDK\",\n    \"repoName\": \"vercel/flags\",\n    \"githubUrl\": \"https://github.com/vercel/flags\",\n    \"description\": \"Flags SDK by Vercel\",\n    \"owner\": \"vercel\",\n    \"repo\": \"flags\"\n  },\n  \"Satori\": {\n    \"title\": \"Satori\",\n    \"repoName\": \"vercel/satori\",\n    \"githubUrl\": \"https://github.com/vercel/satori\",\n    \"description\": \"Enlightened library to convert HTML and CSS to SVG\",\n    \"owner\": \"vercel\",\n    \"repo\": \"satori\"\n  },\n  \"Vercel Storage\": {\n    \"title\": \"Vercel Storage\",\n    \"repoName\": \"vercel/storage\",\n    \"githubUrl\": \"https://github.com/vercel/storage\",\n    \"description\": \"Vercel Postgres, KV, Blob, and Edge Config \",\n    \"owner\": \"vercel\",\n    \"repo\": \"storage\"\n  },\n  \"SWR\": {\n    \"title\": \"SWR\",\n    \"repoName\": \"vercel/swr-site\",\n    \"githubUrl\": \"https://github.com/vercel/swr-site\",\n    \"description\": \"The official website for SWR.\",\n    \"owner\": \"vercel\",\n    \"repo\": \"swr-site\"\n  },\n  \"Turborepo\": {\n    \"title\": \"Turborepo\",\n    \"repoName\": \"vercel/turborepo\",\n    \"githubUrl\": \"https://github.com/vercel/turborepo\",\n    \"description\": \"Build system optimized for JavaScript and TypeScript, written in Rust\",\n    \"owner\": \"vercel\",\n    \"repo\": \"turborepo\"\n  },\n  \"Verify\": {\n    \"title\": \"Verify\",\n    \"repoName\": \"verifytests/verify\",\n    \"githubUrl\": \"https://github.com/verifytests/verify\",\n    \"description\": \"Verify is a snapshot testing tool that simplifies the assertion of complex data models and documents.\",\n    \"owner\": \"verifytests\",\n    \"repo\": \"verify\"\n  },\n  \"Vert.x Web\": {\n    \"title\": \"Vert.x Web\",\n    \"repoName\": \"vert-x3/vertx-web-site\",\n    \"githubUrl\": \"https://github.com/vert-x3/vertx-web-site\",\n    \"description\": \"Former vertx.io 3.x web-site, now archived. Instead use https://github.com/vertx-web-site/vertx-web-site\",\n    \"owner\": \"vert-x3\",\n    \"repo\": \"vertx-web-site\"\n  },\n  \"Vexide\": {\n    \"title\": \"Vexide\",\n    \"repoName\": \"vexide/vexide\",\n    \"githubUrl\": \"https://github.com/vexide/vexide\",\n    \"description\": \"Open-source Rust runtime for VEX robots.\",\n    \"owner\": \"vexide\",\n    \"repo\": \"vexide\"\n  },\n  \"Victoria Metrics\": {\n    \"title\": \"Victoria Metrics\",\n    \"repoName\": \"victoriametrics/ansible-playbooks\",\n    \"githubUrl\": \"https://github.com/victoriametrics/ansible-playbooks\",\n    \"description\": \"Ansible Playbooks for Victoria Metrics monorepo\",\n    \"owner\": \"victoriametrics\",\n    \"repo\": \"ansible-playbooks\"\n  },\n  \"VictoriaMetrics\": {\n    \"title\": \"VictoriaMetrics\",\n    \"repoName\": \"victoriametrics/victoriametrics\",\n    \"githubUrl\": \"https://github.com/victoriametrics/victoriametrics\",\n    \"description\": \"VictoriaMetrics: fast, cost-effective monitoring solution and time series database\",\n    \"owner\": \"victoriametrics\",\n    \"repo\": \"victoriametrics\"\n  },\n  \"Video.js\": {\n    \"title\": \"Video.js\",\n    \"repoName\": \"videojs/video.js\",\n    \"githubUrl\": \"https://github.com/videojs/video.js\",\n    \"description\": \"Video.js - open source HTML5 video player\",\n    \"owner\": \"videojs\",\n    \"repo\": \"video.js\"\n  },\n  \"View Component\": {\n    \"title\": \"View Component\",\n    \"repoName\": \"viewcomponent/view_component\",\n    \"githubUrl\": \"https://github.com/viewcomponent/view_component\",\n    \"description\": \"A framework for building reusable, testable & encapsulated view components in Ruby on Rails.\",\n    \"owner\": \"viewcomponent\",\n    \"repo\": \"view_component\"\n  },\n  \"Vike\": {\n    \"title\": \"Vike\",\n    \"repoName\": \"vikejs/vike\",\n    \"githubUrl\": \"https://github.com/vikejs/vike\",\n    \"description\": \"🔨 The Framework *You* Control - Next.js & Nuxt alternative for unprecedented flexibility and dependability.\",\n    \"owner\": \"vikejs\",\n    \"repo\": \"vike\"\n  },\n  \"Marker\": {\n    \"title\": \"Marker\",\n    \"repoName\": \"vikparuchuri/marker\",\n    \"githubUrl\": \"https://github.com/vikparuchuri/marker\",\n    \"description\": \"Convert PDF to markdown + JSON quickly with high accuracy\",\n    \"owner\": \"vikparuchuri\",\n    \"repo\": \"marker\"\n  },\n  \"Flask JWT Extended\": {\n    \"title\": \"Flask JWT Extended\",\n    \"repoName\": \"vimalloc/flask-jwt-extended\",\n    \"githubUrl\": \"https://github.com/vimalloc/flask-jwt-extended\",\n    \"description\": \" An open source Flask extension that provides JWT support (with batteries included)!\",\n    \"owner\": \"vimalloc\",\n    \"repo\": \"flask-jwt-extended\"\n  },\n  \"Datatables\": {\n    \"title\": \"Datatables\",\n    \"repoName\": \"vincjo/datatables\",\n    \"githubUrl\": \"https://github.com/vincjo/datatables\",\n    \"description\": \"A toolkit for creating datatable components with Svelte\",\n    \"owner\": \"vincjo\",\n    \"repo\": \"datatables\"\n  },\n  \"VineJS\": {\n    \"title\": \"VineJS\",\n    \"repoName\": \"vinejs/vinejs.dev\",\n    \"githubUrl\": \"https://github.com/vinejs/vinejs.dev\",\n    \"description\": \"Documentation website for VineJS\",\n    \"owner\": \"vinejs\",\n    \"repo\": \"vinejs.dev\"\n  },\n  \"VChart\": {\n    \"title\": \"VChart\",\n    \"repoName\": \"visactor/vchart\",\n    \"githubUrl\": \"https://github.com/visactor/vchart\",\n    \"description\": \"VChart, more than just a cross-platform charting library, but also an expressive data storyteller.\",\n    \"owner\": \"visactor\",\n    \"repo\": \"vchart\"\n  },\n  \"Deck.gl\": {\n    \"title\": \"Deck.gl\",\n    \"repoName\": \"visgl/deck.gl\",\n    \"githubUrl\": \"https://github.com/visgl/deck.gl\",\n    \"description\": \"WebGL2 powered visualization framework\",\n    \"owner\": \"visgl\",\n    \"repo\": \"deck.gl\"\n  },\n  \"React Google Maps\": {\n    \"title\": \"React Google Maps\",\n    \"repoName\": \"visgl/react-google-maps\",\n    \"githubUrl\": \"https://github.com/visgl/react-google-maps\",\n    \"description\": \"React components and hooks for the Google Maps JavaScript API\",\n    \"owner\": \"visgl\",\n    \"repo\": \"react-google-maps\"\n  },\n  \"Vispy\": {\n    \"title\": \"Vispy\",\n    \"repoName\": \"vispy/vispy\",\n    \"githubUrl\": \"https://github.com/vispy/vispy\",\n    \"description\": \"Main repository for Vispy\",\n    \"owner\": \"vispy\",\n    \"repo\": \"vispy\"\n  },\n  \"Playwright BDD\": {\n    \"title\": \"Playwright BDD\",\n    \"repoName\": \"vitalets/playwright-bdd\",\n    \"githubUrl\": \"https://github.com/vitalets/playwright-bdd\",\n    \"description\": \"BDD testing with Playwright runner\",\n    \"owner\": \"vitalets\",\n    \"repo\": \"playwright-bdd\"\n  },\n  \"Django Ninja\": {\n    \"title\": \"Django Ninja\",\n    \"repoName\": \"vitalik/django-ninja\",\n    \"githubUrl\": \"https://github.com/vitalik/django-ninja\",\n    \"description\": \"💨  Fast, Async-ready, Openapi, type hints based framework for building APIs\",\n    \"owner\": \"vitalik\",\n    \"repo\": \"django-ninja\"\n  },\n  \"Vite.js\": {\n    \"title\": \"Vite.js\",\n    \"repoName\": \"vitejs/awesome-vite\",\n    \"githubUrl\": \"https://github.com/vitejs/awesome-vite\",\n    \"description\": \"⚡️ A curated list of awesome things related to Vite.js\",\n    \"owner\": \"vitejs\",\n    \"repo\": \"awesome-vite\"\n  },\n  \"Vite\": {\n    \"title\": \"Vite\",\n    \"repoName\": \"vitejs/vite\",\n    \"githubUrl\": \"https://github.com/vitejs/vite\",\n    \"description\": \"Next generation frontend tooling. It's fast!\",\n    \"owner\": \"vitejs\",\n    \"repo\": \"vite\"\n  },\n  \"Vitest\": {\n    \"title\": \"Vitest\",\n    \"repoName\": \"vitest-dev/vitest\",\n    \"githubUrl\": \"https://github.com/vitest-dev/vitest\",\n    \"description\": \"Next generation testing framework powered by Vite.\",\n    \"owner\": \"vitest-dev\",\n    \"repo\": \"vitest\"\n  },\n  \"VKUI\": {\n    \"title\": \"VKUI\",\n    \"repoName\": \"vkcom/vkui\",\n    \"githubUrl\": \"https://github.com/vkcom/vkui\",\n    \"description\": \"VKUI – это набор React-компонентов, с помощью которых можно создавать интерфейсы, внешне неотличимые от наших iOS и Android приложений.\",\n    \"owner\": \"vkcom\",\n    \"repo\": \"vkui\"\n  },\n  \"VkNet\": {\n    \"title\": \"VkNet\",\n    \"repoName\": \"vknet/vk\",\n    \"githubUrl\": \"https://github.com/vknet/vk\",\n    \"description\": \"Vkontakte API for .NET\",\n    \"owner\": \"vknet\",\n    \"repo\": \"vk\"\n  },\n  \"Bevy Egui\": {\n    \"title\": \"Bevy Egui\",\n    \"repoName\": \"vladbat00/bevy_egui\",\n    \"githubUrl\": \"https://github.com/vladbat00/bevy_egui\",\n    \"description\": \"This crate provides an Egui integration for the Bevy game engine. 🇺🇦 Please support the Ukrainian army: https://savelife.in.ua/en/\",\n    \"owner\": \"vladbat00\",\n    \"repo\": \"bevy_egui\"\n  },\n  \"V\": {\n    \"title\": \"V\",\n    \"repoName\": \"vlang/v\",\n    \"githubUrl\": \"https://github.com/vlang/v\",\n    \"description\": \"Simple, fast, safe, compiled language for developing maintainable software. Compiles itself in <1s with zero library dependencies. Supports automatic C => V translation. https://vlang.io\",\n    \"owner\": \"vlang\",\n    \"repo\": \"v\"\n  },\n  \"vLLM\": {\n    \"title\": \"vLLM\",\n    \"repoName\": \"vllm-project/vllm\",\n    \"githubUrl\": \"https://github.com/vllm-project/vllm\",\n    \"description\": \"A high-throughput and memory-efficient inference and serving engine for LLMs\",\n    \"owner\": \"vllm-project\",\n    \"repo\": \"vllm\"\n  },\n  \"Grpclib\": {\n    \"title\": \"Grpclib\",\n    \"repoName\": \"vmagamedov/grpclib\",\n    \"githubUrl\": \"https://github.com/vmagamedov/grpclib\",\n    \"description\": \"Pure-Python gRPC implementation for asyncio\",\n    \"owner\": \"vmagamedov\",\n    \"repo\": \"grpclib\"\n  },\n  \"Voice Engine Echo Canceller\": {\n    \"title\": \"Voice Engine Echo Canceller\",\n    \"repoName\": \"voice-engine/ec\",\n    \"githubUrl\": \"https://github.com/voice-engine/ec\",\n    \"description\": \"Echo Canceller, part of Voice Engine project\",\n    \"owner\": \"voice-engine\",\n    \"repo\": \"ec\"\n  },\n  \"Ash Jason\": {\n    \"title\": \"Ash Jason\",\n    \"repoName\": \"vonagam/ash_jason\",\n    \"githubUrl\": \"https://github.com/vonagam/ash_jason\",\n    \"description\": \"Ash resource extension for implementing Jason protocol\",\n    \"owner\": \"vonagam\",\n    \"repo\": \"ash_jason\"\n  },\n  \"Agencii Railway Starter\": {\n    \"title\": \"Agencii Railway Starter\",\n    \"repoName\": \"vrsen-ai-solutions/agencii-railway-starter\",\n    \"githubUrl\": \"https://github.com/vrsen-ai-solutions/agencii-railway-starter\",\n    \"description\": \"A template repository for deploying tools on Railway\",\n    \"owner\": \"vrsen-ai-solutions\",\n    \"repo\": \"agencii-railway-starter\"\n  },\n  \"Agency Swarm Tools Template\": {\n    \"title\": \"Agency Swarm Tools Template\",\n    \"repoName\": \"vrsen-ai-solutions/agency-swarm-tools-template\",\n    \"githubUrl\": \"https://github.com/vrsen-ai-solutions/agency-swarm-tools-template\",\n    \"description\": \"\",\n    \"owner\": \"vrsen-ai-solutions\",\n    \"repo\": \"agency-swarm-tools-template\"\n  },\n  \"Agency Swarm\": {\n    \"title\": \"Agency Swarm\",\n    \"repoName\": \"vrsen/agency-swarm\",\n    \"githubUrl\": \"https://github.com/vrsen/agency-swarm\",\n    \"description\": \"The only reliable agent framework built on top of the latest OpenAI Assistants API.\",\n    \"owner\": \"vrsen\",\n    \"repo\": \"agency-swarm\"\n  },\n  \"Ant Design Vue\": {\n    \"title\": \"Ant Design Vue\",\n    \"repoName\": \"vuecomponent/ant-design-vue\",\n    \"githubUrl\": \"https://github.com/vuecomponent/ant-design-vue\",\n    \"description\": \"🌈  An enterprise-class UI components based on Ant Design and Vue. 🐜\",\n    \"owner\": \"vuecomponent\",\n    \"repo\": \"ant-design-vue\"\n  },\n  \"Vue 3\": {\n    \"title\": \"Vue 3\",\n    \"repoName\": \"vuejs/docs\",\n    \"githubUrl\": \"https://github.com/vuejs/docs\",\n    \"description\": \"📄 Documentation for Vue 3\",\n    \"owner\": \"vuejs\",\n    \"repo\": \"docs\"\n  },\n  \"Pinia\": {\n    \"title\": \"Pinia\",\n    \"repoName\": \"vuejs/pinia\",\n    \"githubUrl\": \"https://github.com/vuejs/pinia\",\n    \"description\": \"🍍 Intuitive, type safe, light and flexible Store for Vue using the composition api with DevTools support\",\n    \"owner\": \"vuejs\",\n    \"repo\": \"pinia\"\n  },\n  \"Vue.js Router\": {\n    \"title\": \"Vue.js Router\",\n    \"repoName\": \"vuejs/router\",\n    \"githubUrl\": \"https://github.com/vuejs/router\",\n    \"description\": \"🚦 The official router for Vue.js\",\n    \"owner\": \"vuejs\",\n    \"repo\": \"router\"\n  },\n  \"Vue Router\": {\n    \"title\": \"Vue Router\",\n    \"repoName\": \"vuejs/vue-router\",\n    \"githubUrl\": \"https://github.com/vuejs/vue-router\",\n    \"description\": \"🚦 The official router for Vue 2\",\n    \"owner\": \"vuejs\",\n    \"repo\": \"vue-router\"\n  },\n  \"Vuex\": {\n    \"title\": \"Vuex\",\n    \"repoName\": \"vuejs/vuex\",\n    \"githubUrl\": \"https://github.com/vuejs/vuex\",\n    \"description\": \"🗃️ Centralized State Management for Vue.js.\",\n    \"owner\": \"vuejs\",\n    \"repo\": \"vuex\"\n  },\n  \"Vuetify\": {\n    \"title\": \"Vuetify\",\n    \"repoName\": \"vuetifyjs/vuetify\",\n    \"githubUrl\": \"https://github.com/vuetifyjs/vuetify\",\n    \"description\": \"🐉 Vue Component Framework\",\n    \"owner\": \"vuetifyjs\",\n    \"repo\": \"vuetify\"\n  },\n  \"VueUse\": {\n    \"title\": \"VueUse\",\n    \"repoName\": \"vueuse/vueuse\",\n    \"githubUrl\": \"https://github.com/vueuse/vueuse\",\n    \"description\": \"Collection of essential Vue Composition Utilities for Vue 3\",\n    \"owner\": \"vueuse\",\n    \"repo\": \"vueuse\"\n  },\n  \"Vulkano\": {\n    \"title\": \"Vulkano\",\n    \"repoName\": \"vulkano-rs/vulkano\",\n    \"githubUrl\": \"https://github.com/vulkano-rs/vulkano\",\n    \"description\": \"Safe and rich Rust wrapper around the Vulkan API\",\n    \"owner\": \"vulkano-rs\",\n    \"repo\": \"vulkano\"\n  },\n  \"Realtime Voice Changer\": {\n    \"title\": \"Realtime Voice Changer\",\n    \"repoName\": \"w-okada/voice-changer\",\n    \"githubUrl\": \"https://github.com/w-okada/voice-changer\",\n    \"description\": \"リアルタイムボイスチェンジャー Realtime Voice Changer\",\n    \"owner\": \"w-okada\",\n    \"repo\": \"voice-changer\"\n  },\n  \"EasyWeChat\": {\n    \"title\": \"EasyWeChat\",\n    \"repoName\": \"w7corp/easywechat.git\",\n    \"githubUrl\": \"https://github.com/w7corp/easywechat.git\",\n    \"description\": \"📦 一个 PHP 微信 SDK\",\n    \"owner\": \"w7corp\",\n    \"repo\": \"easywechat.git\"\n  },\n  \"Wagtail\": {\n    \"title\": \"Wagtail\",\n    \"repoName\": \"wagtail/wagtail\",\n    \"githubUrl\": \"https://github.com/wagtail/wagtail\",\n    \"description\": \"A Django content management system focused on flexibility and user experience\",\n    \"owner\": \"wagtail\",\n    \"repo\": \"wagtail\"\n  },\n  \"Wails\": {\n    \"title\": \"Wails\",\n    \"repoName\": \"wailsapp/wails\",\n    \"githubUrl\": \"https://github.com/wailsapp/wails\",\n    \"description\": \"Create beautiful applications using Go\",\n    \"owner\": \"wailsapp\",\n    \"repo\": \"wails\"\n  },\n  \"WasmEdge\": {\n    \"title\": \"WasmEdge\",\n    \"repoName\": \"wasmedge/docs\",\n    \"githubUrl\": \"https://github.com/wasmedge/docs\",\n    \"description\": \"\",\n    \"owner\": \"wasmedge\",\n    \"repo\": \"docs\"\n  },\n  \"Open SaaS\": {\n    \"title\": \"Open SaaS\",\n    \"repoName\": \"wasp-lang/open-saas\",\n    \"githubUrl\": \"https://github.com/wasp-lang/open-saas\",\n    \"description\": \"A free, open-source SaaS app starter for React & Node.js with superpowers. Full-featured. Community-driven.\",\n    \"owner\": \"wasp-lang\",\n    \"repo\": \"open-saas\"\n  },\n  \"Wasp\": {\n    \"title\": \"Wasp\",\n    \"repoName\": \"wasp-lang/wasp\",\n    \"githubUrl\": \"https://github.com/wasp-lang/wasp\",\n    \"description\": \"The fastest way to develop full-stack web apps with React & Node.js. \",\n    \"owner\": \"wasp-lang\",\n    \"repo\": \"wasp\"\n  },\n  \"Baserow Client\": {\n    \"title\": \"Baserow Client\",\n    \"repoName\": \"watzon/baserow-client\",\n    \"githubUrl\": \"https://github.com/watzon/baserow-client\",\n    \"description\": \"Extensive Baserow client library supporting Node, Bun, Deno, and the web. \",\n    \"owner\": \"watzon\",\n    \"repo\": \"baserow-client\"\n  },\n  \"Wazuh\": {\n    \"title\": \"Wazuh\",\n    \"repoName\": \"wazuh/wazuh\",\n    \"githubUrl\": \"https://github.com/wazuh/wazuh\",\n    \"description\": \"Wazuh - The Open Source Security Platform. Unified XDR and SIEM protection for endpoints and cloud workloads.\",\n    \"owner\": \"wazuh\",\n    \"repo\": \"wazuh\"\n  },\n  \"Weaviate TypeScript Client\": {\n    \"title\": \"Weaviate TypeScript Client\",\n    \"repoName\": \"weaviate/typescript-client\",\n    \"githubUrl\": \"https://github.com/weaviate/typescript-client\",\n    \"description\": \"Official Weaviate TypeScript Client\",\n    \"owner\": \"weaviate\",\n    \"repo\": \"typescript-client\"\n  },\n  \"Weaviate Python Client\": {\n    \"title\": \"Weaviate Python Client\",\n    \"repoName\": \"weaviate/weaviate-python-client\",\n    \"githubUrl\": \"https://github.com/weaviate/weaviate-python-client\",\n    \"description\": \"A python native client for easy interaction with a Weaviate instance.\",\n    \"owner\": \"weaviate\",\n    \"repo\": \"weaviate-python-client\"\n  },\n  \"Modern.js\": {\n    \"title\": \"Modern.js\",\n    \"repoName\": \"web-infra-dev/modern.js\",\n    \"githubUrl\": \"https://github.com/web-infra-dev/modern.js\",\n    \"description\": \"A progressive web framework based on React and Rsbuild.\",\n    \"owner\": \"web-infra-dev\",\n    \"repo\": \"modern.js\"\n  },\n  \"Rsbuild\": {\n    \"title\": \"Rsbuild\",\n    \"repoName\": \"web-infra-dev/rsbuild\",\n    \"githubUrl\": \"https://github.com/web-infra-dev/rsbuild\",\n    \"description\": \"A zero-config, instant build tool powered by Rspack.\",\n    \"owner\": \"web-infra-dev\",\n    \"repo\": \"rsbuild\"\n  },\n  \"Rsdoctor\": {\n    \"title\": \"Rsdoctor\",\n    \"repoName\": \"web-infra-dev/rsdoctor\",\n    \"githubUrl\": \"https://github.com/web-infra-dev/rsdoctor\",\n    \"description\": \"A one-stop build analyzer for Rspack and webpack. Support us with a star ⭐️\",\n    \"owner\": \"web-infra-dev\",\n    \"repo\": \"rsdoctor\"\n  },\n  \"RSLib\": {\n    \"title\": \"RSLib\",\n    \"repoName\": \"web-infra-dev/rslib\",\n    \"githubUrl\": \"https://github.com/web-infra-dev/rslib\",\n    \"description\": \"Create JavaScript libraries in a simple and intuitive way.\",\n    \"owner\": \"web-infra-dev\",\n    \"repo\": \"rslib\"\n  },\n  \"Rspack\": {\n    \"title\": \"Rspack\",\n    \"repoName\": \"web-infra-dev/rspack\",\n    \"githubUrl\": \"https://github.com/web-infra-dev/rspack\",\n    \"description\": \"The fast Rust-based web bundler with webpack-compatible API 🦀️\",\n    \"owner\": \"web-infra-dev\",\n    \"repo\": \"rspack\"\n  },\n  \"JWT Framework\": {\n    \"title\": \"JWT Framework\",\n    \"repoName\": \"web-token/jwt-doc\",\n    \"githubUrl\": \"https://github.com/web-token/jwt-doc\",\n    \"description\": \"Documentation for the JWT Framework\",\n    \"owner\": \"web-token\",\n    \"repo\": \"jwt-doc\"\n  },\n  \"Web3.js\": {\n    \"title\": \"Web3.js\",\n    \"repoName\": \"web3/web3.js\",\n    \"githubUrl\": \"https://github.com/web3/web3.js\",\n    \"description\": \"Collection of comprehensive TypeScript libraries for Interaction with the Ethereum JSON RPC API and utility functions.\",\n    \"owner\": \"web3\",\n    \"repo\": \"web3.js\"\n  },\n  \"WebdriverIO\": {\n    \"title\": \"WebdriverIO\",\n    \"repoName\": \"webdriverio/webdriverio\",\n    \"githubUrl\": \"https://github.com/webdriverio/webdriverio\",\n    \"description\": \"Next-gen browser and mobile automation test framework for Node.js\",\n    \"owner\": \"webdriverio\",\n    \"repo\": \"webdriverio\"\n  },\n  \"WebGoat\": {\n    \"title\": \"WebGoat\",\n    \"repoName\": \"webgoat/webgoat\",\n    \"githubUrl\": \"https://github.com/webgoat/webgoat\",\n    \"description\": \"WebGoat is a deliberately insecure application\",\n    \"owner\": \"webgoat\",\n    \"repo\": \"webgoat\"\n  },\n  \"Webman\": {\n    \"title\": \"Webman\",\n    \"repoName\": \"webman-php/webman-manual\",\n    \"githubUrl\": \"https://github.com/webman-php/webman-manual\",\n    \"description\": \"Manual for webman \",\n    \"owner\": \"webman-php\",\n    \"repo\": \"webman-manual\"\n  },\n  \"Webpack\": {\n    \"title\": \"Webpack\",\n    \"repoName\": \"webpack/webpack\",\n    \"githubUrl\": \"https://github.com/webpack/webpack\",\n    \"description\": \"A bundler for javascript and friends. Packs many modules into a few bundled assets. Code Splitting allows for loading parts of the application on demand. Through \\\"loaders\\\", modules can be CommonJs, AMD, ES6 modules, CSS, Images, JSON, Coffeescript, LESS, ... and your custom stuff.\",\n    \"owner\": \"webpack\",\n    \"repo\": \"webpack\"\n  },\n  \"WebStudio Community\": {\n    \"title\": \"WebStudio Community\",\n    \"repoName\": \"webstudio-is/webstudio-community.git\",\n    \"githubUrl\": \"https://github.com/webstudio-is/webstudio-community.git\",\n    \"description\": \"🤗 Start Here! Discussions, issues, docs and roadmap\",\n    \"owner\": \"webstudio-is\",\n    \"repo\": \"webstudio-community.git\"\n  },\n  \"Webstudio\": {\n    \"title\": \"Webstudio\",\n    \"repoName\": \"webstudio-is/webstudio.git\",\n    \"githubUrl\": \"https://github.com/webstudio-is/webstudio.git\",\n    \"description\": \"Open source website builder and Webflow alternative. Webstudio is an advanced visual builder that connects to any headless CMS, supports all CSS properties, and can be hosted anywhere, including with us.\",\n    \"owner\": \"webstudio-is\",\n    \"repo\": \"webstudio.git\"\n  },\n  \"Why Did You Render\": {\n    \"title\": \"Why Did You Render\",\n    \"repoName\": \"welldone-software/why-did-you-render\",\n    \"githubUrl\": \"https://github.com/welldone-software/why-did-you-render\",\n    \"description\": \"why-did-you-render by Welldone Software monkey patches React to notify you about potentially avoidable re-renders. (Works with React Native as well.)\",\n    \"owner\": \"welldone-software\",\n    \"repo\": \"why-did-you-render\"\n  },\n  \"Weserv Images\": {\n    \"title\": \"Weserv Images\",\n    \"repoName\": \"weserv/images\",\n    \"githubUrl\": \"https://github.com/weserv/images\",\n    \"description\": \"Source code of wsrv.nl (formerly images.weserv.nl), to be used on your own server(s).\",\n    \"owner\": \"weserv\",\n    \"repo\": \"images\"\n  },\n  \"Viem\": {\n    \"title\": \"Viem\",\n    \"repoName\": \"wevm/viem\",\n    \"githubUrl\": \"https://github.com/wevm/viem\",\n    \"description\": \"TypeScript Interface for Ethereum\",\n    \"owner\": \"wevm\",\n    \"repo\": \"viem\"\n  },\n  \"Wagmi\": {\n    \"title\": \"Wagmi\",\n    \"repoName\": \"wevm/wagmi\",\n    \"githubUrl\": \"https://github.com/wevm/wagmi\",\n    \"description\": \"Reactive primitives for Ethereum apps\",\n    \"owner\": \"wevm\",\n    \"repo\": \"wagmi\"\n  },\n  \"WhatsApp Flows Tools\": {\n    \"title\": \"WhatsApp Flows Tools\",\n    \"repoName\": \"whatsapp/whatsapp-flows-tools\",\n    \"githubUrl\": \"https://github.com/whatsapp/whatsapp-flows-tools\",\n    \"description\": \"Tools and examples to help you create WhatsApp Flows https://developers.facebook.com/docs/whatsapp/flows\",\n    \"owner\": \"whatsapp\",\n    \"repo\": \"whatsapp-flows-tools\"\n  },\n  \"Dioxus Motion\": {\n    \"title\": \"Dioxus Motion\",\n    \"repoName\": \"wheregmis/dioxus-motion.git\",\n    \"githubUrl\": \"https://github.com/wheregmis/dioxus-motion.git\",\n    \"description\": \"A lightweight, cross-platform animation library for Dioxus, designed to bring smooth, flexible animations to your Rust web, desktop, and mobile applications.\",\n    \"owner\": \"wheregmis\",\n    \"repo\": \"dioxus-motion.git\"\n  },\n  \"Baileys\": {\n    \"title\": \"Baileys\",\n    \"repoName\": \"whiskeysockets/baileys\",\n    \"githubUrl\": \"https://github.com/whiskeysockets/baileys\",\n    \"description\": \"Lightweight full-featured typescript/javascript WhatsApp Web API\",\n    \"owner\": \"whiskeysockets\",\n    \"repo\": \"baileys\"\n  },\n  \"Agentic Data Analysis\": {\n    \"title\": \"Agentic Data Analysis\",\n    \"repoName\": \"whitew1994ww/agenticdataanalysis\",\n    \"githubUrl\": \"https://github.com/whitew1994ww/agenticdataanalysis\",\n    \"description\": \"Perform Data Analysis using Agentic AI - The code to accompany my youtube video\",\n    \"owner\": \"whitew1994ww\",\n    \"repo\": \"agenticdataanalysis\"\n  },\n  \"Streamlit WebRTC\": {\n    \"title\": \"Streamlit WebRTC\",\n    \"repoName\": \"whitphx/streamlit-webrtc\",\n    \"githubUrl\": \"https://github.com/whitphx/streamlit-webrtc\",\n    \"description\": \"Real-time video and audio processing on Streamlit\",\n    \"owner\": \"whitphx\",\n    \"repo\": \"streamlit-webrtc\"\n  },\n  \"Cryptography Kotlin\": {\n    \"title\": \"Cryptography Kotlin\",\n    \"repoName\": \"whyoleg/cryptography-kotlin\",\n    \"githubUrl\": \"https://github.com/whyoleg/cryptography-kotlin\",\n    \"description\": \"Kotlin Multiplatform cryptography / crypto library\",\n    \"owner\": \"whyoleg\",\n    \"repo\": \"cryptography-kotlin\"\n  },\n  \"Python Cheatsheet\": {\n    \"title\": \"Python Cheatsheet\",\n    \"repoName\": \"wilfredinni/python-cheatsheet\",\n    \"githubUrl\": \"https://github.com/wilfredinni/python-cheatsheet\",\n    \"description\": \"All-inclusive Python cheatsheet\",\n    \"owner\": \"wilfredinni\",\n    \"repo\": \"python-cheatsheet\"\n  },\n  \"Mason.nvim\": {\n    \"title\": \"Mason.nvim\",\n    \"repoName\": \"williamboman/mason.nvim\",\n    \"githubUrl\": \"https://github.com/williamboman/mason.nvim\",\n    \"description\": \"Portable package manager for Neovim that runs everywhere Neovim runs. Easily install and manage LSP servers, DAP servers, linters, and formatters.\",\n    \"owner\": \"williamboman\",\n    \"repo\": \"mason.nvim\"\n  },\n  \"Windmill\": {\n    \"title\": \"Windmill\",\n    \"repoName\": \"windmill-labs/windmill\",\n    \"githubUrl\": \"https://github.com/windmill-labs/windmill\",\n    \"description\": \"Open-source developer platform to power your entire infra and turn scripts into webhooks, workflows and UIs. Fastest workflow engine (13x vs Airflow). Open-source alternative to Retool and Temporal.\",\n    \"owner\": \"windmill-labs\",\n    \"repo\": \"windmill\"\n  },\n  \"Wink NLP\": {\n    \"title\": \"Wink NLP\",\n    \"repoName\": \"winkjs/wink-nlp\",\n    \"githubUrl\": \"https://github.com/winkjs/wink-nlp\",\n    \"description\": \"Developer friendly Natural Language Processing ✨\",\n    \"owner\": \"winkjs\",\n    \"repo\": \"wink-nlp\"\n  },\n  \"Winston\": {\n    \"title\": \"Winston\",\n    \"repoName\": \"winstonjs/winston\",\n    \"githubUrl\": \"https://github.com/winstonjs/winston\",\n    \"description\": \"A logger for just about everything.\",\n    \"owner\": \"winstonjs\",\n    \"repo\": \"winston\"\n  },\n  \"Astro\": {\n    \"title\": \"Astro\",\n    \"repoName\": \"withastro/docs\",\n    \"githubUrl\": \"https://github.com/withastro/docs\",\n    \"description\": \"Astro documentation\",\n    \"owner\": \"withastro\",\n    \"repo\": \"docs\"\n  },\n  \"Nanobind\": {\n    \"title\": \"Nanobind\",\n    \"repoName\": \"wjakob/nanobind\",\n    \"githubUrl\": \"https://github.com/wjakob/nanobind\",\n    \"description\": \"nanobind: tiny and efficient C++/Python bindings\",\n    \"owner\": \"wjakob\",\n    \"repo\": \"nanobind\"\n  },\n  \"Aibitat\": {\n    \"title\": \"Aibitat\",\n    \"repoName\": \"wladpaiva/aibitat\",\n    \"githubUrl\": \"https://github.com/wladpaiva/aibitat\",\n    \"description\": \"Multi-Agent Conversation Framework in TypeScript\",\n    \"owner\": \"wladpaiva\",\n    \"repo\": \"aibitat\"\n  },\n  \"Svelte Sonner\": {\n    \"title\": \"Svelte Sonner\",\n    \"repoName\": \"wobsoriano/svelte-sonner\",\n    \"githubUrl\": \"https://github.com/wobsoriano/svelte-sonner\",\n    \"description\": \"An opinionated toast component for Svelte. A port of @emilkowalski's sonner.\",\n    \"owner\": \"wobsoriano\",\n    \"repo\": \"svelte-sonner\"\n  },\n  \"React PDF\": {\n    \"title\": \"React PDF\",\n    \"repoName\": \"wojtekmaj/react-pdf\",\n    \"githubUrl\": \"https://github.com/wojtekmaj/react-pdf\",\n    \"description\": \"Display PDFs in your React app as easily as if they were images.\",\n    \"owner\": \"wojtekmaj\",\n    \"repo\": \"react-pdf\"\n  },\n  \"WooCommerce\": {\n    \"title\": \"WooCommerce\",\n    \"repoName\": \"woocommerce/woocommerce\",\n    \"githubUrl\": \"https://github.com/woocommerce/woocommerce\",\n    \"description\": \"A customizable, open-source ecommerce platform built on WordPress. Build any commerce solution you can imagine.\",\n    \"owner\": \"woocommerce\",\n    \"repo\": \"woocommerce\"\n  },\n  \"ISO 639-3\": {\n    \"title\": \"ISO 639-3\",\n    \"repoName\": \"wooorm/iso-639-3\",\n    \"githubUrl\": \"https://github.com/wooorm/iso-639-3\",\n    \"description\": \"Info on ISO 639-3\",\n    \"owner\": \"wooorm\",\n    \"repo\": \"iso-639-3\"\n  },\n  \"WordPress Block Theme Examples\": {\n    \"title\": \"WordPress Block Theme Examples\",\n    \"repoName\": \"wordpress/block-theme-examples\",\n    \"githubUrl\": \"https://github.com/wordpress/block-theme-examples\",\n    \"description\": \"A repository of feature examples for block themes.\",\n    \"owner\": \"wordpress\",\n    \"repo\": \"block-theme-examples\"\n  },\n  \"WordPress Community Themes\": {\n    \"title\": \"WordPress Community Themes\",\n    \"repoName\": \"wordpress/community-themes\",\n    \"githubUrl\": \"https://github.com/wordpress/community-themes\",\n    \"description\": \"A collection of Block Themes built by the WordPress community.\",\n    \"owner\": \"wordpress\",\n    \"repo\": \"community-themes\"\n  },\n  \"WordPress Create Block Theme\": {\n    \"title\": \"WordPress Create Block Theme\",\n    \"repoName\": \"wordpress/create-block-theme\",\n    \"githubUrl\": \"https://github.com/wordpress/create-block-theme\",\n    \"description\": \"A WordPress plugin to create block themes\",\n    \"owner\": \"wordpress\",\n    \"repo\": \"create-block-theme\"\n  },\n  \"WordPress Plugin Developer Handbook\": {\n    \"title\": \"WordPress Plugin Developer Handbook\",\n    \"repoName\": \"wordpress/developer-plugins-handbook\",\n    \"githubUrl\": \"https://github.com/wordpress/developer-plugins-handbook\",\n    \"description\": \"Welcome to the WordPress Plugin Developer Handbook; are you ready to jump right in to the world of WordPress plugins?\",\n    \"owner\": \"wordpress\",\n    \"repo\": \"developer-plugins-handbook\"\n  },\n  \"WordPress Gutenberg\": {\n    \"title\": \"WordPress Gutenberg\",\n    \"repoName\": \"wordpress/gutenberg\",\n    \"githubUrl\": \"https://github.com/wordpress/gutenberg\",\n    \"description\": \"The Block Editor project for WordPress and beyond. Plugin is available from the official repository.\",\n    \"owner\": \"wordpress\",\n    \"repo\": \"gutenberg\"\n  },\n  \"WordPress HelpHub\": {\n    \"title\": \"WordPress HelpHub\",\n    \"repoName\": \"wordpress/helphub\",\n    \"githubUrl\": \"https://github.com/wordpress/helphub\",\n    \"description\": \"The WordPress user documentation portal\",\n    \"owner\": \"wordpress\",\n    \"repo\": \"helphub\"\n  },\n  \"WordPress\": {\n    \"title\": \"WordPress\",\n    \"repoName\": \"wordpress/wordpress\",\n    \"githubUrl\": \"https://github.com/wordpress/wordpress\",\n    \"description\": \"WordPress, Git-ified. This repository is just a mirror of the WordPress subversion repository. Please do not send pull requests. Submit pull requests to https://github.com/WordPress/wordpress-develop and patches to https://core.trac.wordpress.org/ instead.\",\n    \"owner\": \"wordpress\",\n    \"repo\": \"wordpress\"\n  },\n  \"WordPress Develop\": {\n    \"title\": \"WordPress Develop\",\n    \"repoName\": \"wordpress/wordpress-develop\",\n    \"githubUrl\": \"https://github.com/wordpress/wordpress-develop\",\n    \"description\": \"WordPress Develop, Git-ified. Synced from git://develop.git.wordpress.org/, including branches and tags! This repository is just a mirror of the WordPress subversion repository. Please include a link to a pre-existing ticket on https://core.trac.wordpress.org/ with every pull request.\",\n    \"owner\": \"wordpress\",\n    \"repo\": \"wordpress-develop\"\n  },\n  \"WordPress Meta\": {\n    \"title\": \"WordPress Meta\",\n    \"repoName\": \"wordpress/wordpress.org\",\n    \"githubUrl\": \"https://github.com/wordpress/wordpress.org\",\n    \"description\": \"WordPress.org Meta, Git-ified. Synced from git://meta.git.wordpress.org/ This repository is just a mirror of the WordPress Meta subversion repository. Please include a link to a pre-existing ticket on https://meta.trac.wordpress.org/ with every pull request.\",\n    \"owner\": \"wordpress\",\n    \"repo\": \"wordpress.org\"\n  },\n  \"AuthKit\": {\n    \"title\": \"AuthKit\",\n    \"repoName\": \"workos/authkit\",\n    \"githubUrl\": \"https://github.com/workos/authkit\",\n    \"description\": \"The world's best login box powered by WorkOS and Radix.\",\n    \"owner\": \"workos\",\n    \"repo\": \"authkit\"\n  },\n  \"WorkOS Node SDK\": {\n    \"title\": \"WorkOS Node SDK\",\n    \"repoName\": \"workos/workos-node\",\n    \"githubUrl\": \"https://github.com/workos/workos-node\",\n    \"description\": \"Official Node SDK for interacting with the WorkOS API\",\n    \"owner\": \"workos\",\n    \"repo\": \"workos-node\"\n  },\n  \"WP-CLI\": {\n    \"title\": \"WP-CLI\",\n    \"repoName\": \"wp-cli/wp-cli\",\n    \"githubUrl\": \"https://github.com/wp-cli/wp-cli\",\n    \"description\": \"⚙️ WP-CLI framework\",\n    \"owner\": \"wp-cli\",\n    \"repo\": \"wp-cli\"\n  },\n  \"Meta Box\": {\n    \"title\": \"Meta Box\",\n    \"repoName\": \"wpmetabox/meta-box\",\n    \"githubUrl\": \"https://github.com/wpmetabox/meta-box\",\n    \"description\": \"The best plugin for WordPress custom fields and custom meta boxes\",\n    \"owner\": \"wpmetabox\",\n    \"repo\": \"meta-box\"\n  },\n  \"Awesome Diarization\": {\n    \"title\": \"Awesome Diarization\",\n    \"repoName\": \"wq2012/awesome-diarization\",\n    \"githubUrl\": \"https://github.com/wq2012/awesome-diarization\",\n    \"description\": \"A curated list of awesome Speaker Diarization papers, libraries, datasets, and other resources.\",\n    \"owner\": \"wq2012\",\n    \"repo\": \"awesome-diarization\"\n  },\n  \"Agentica\": {\n    \"title\": \"Agentica\",\n    \"repoName\": \"wrtnlabs/agentica\",\n    \"githubUrl\": \"https://github.com/wrtnlabs/agentica\",\n    \"description\": \"TypeScript Agentic AI Library specialized for LLM Function Calling enhanced by compiler skills.\",\n    \"owner\": \"wrtnlabs\",\n    \"repo\": \"agentica\"\n  },\n  \"WunderGraph\": {\n    \"title\": \"WunderGraph\",\n    \"repoName\": \"wundergraph/wundergraph.git\",\n    \"githubUrl\": \"https://github.com/wundergraph/wundergraph.git\",\n    \"description\": \"WunderGraph is a Backend for Frontend Framework to optimize frontend, fullstack and backend developer workflows through API Composition.\",\n    \"owner\": \"wundergraph\",\n    \"repo\": \"wundergraph.git\"\n  },\n  \"WXT\": {\n    \"title\": \"WXT\",\n    \"repoName\": \"wxt-dev/wxt\",\n    \"githubUrl\": \"https://github.com/wxt-dev/wxt\",\n    \"description\": \"⚡ Next-gen Web Extension Framework\",\n    \"owner\": \"wxt-dev\",\n    \"repo\": \"wxt\"\n  },\n  \"Kodi\": {\n    \"title\": \"Kodi\",\n    \"repoName\": \"xbmc/xbmc\",\n    \"githubUrl\": \"https://github.com/xbmc/xbmc\",\n    \"description\": \"Kodi is an award-winning free and open source home theater/media center software and entertainment hub for digital media. With its beautiful interface and powerful skinning engine, it's available for Android, BSD, Linux, macOS, iOS, tvOS and Windows.\",\n    \"owner\": \"xbmc\",\n    \"repo\": \"xbmc\"\n  },\n  \"Dart Download\": {\n    \"title\": \"Dart Download\",\n    \"repoName\": \"xclud/dart_download\",\n    \"githubUrl\": \"https://github.com/xclud/dart_download\",\n    \"description\": \"Cross-Platform file downloader for Dart and Flutter projects.\",\n    \"owner\": \"xclud\",\n    \"repo\": \"dart_download\"\n  },\n  \"Xero Node SDK\": {\n    \"title\": \"Xero Node SDK\",\n    \"repoName\": \"xeroapi/xero-node\",\n    \"githubUrl\": \"https://github.com/xeroapi/xero-node\",\n    \"description\": \"Xero Node SDK for OAuth 2.0 generated from XeroAPI/Xero-OpenAPI\",\n    \"owner\": \"xeroapi\",\n    \"repo\": \"xero-node\"\n  },\n  \"Apple LLMs\": {\n    \"title\": \"Apple LLMs\",\n    \"repoName\": \"xoridius/apple-llms\",\n    \"githubUrl\": \"https://github.com/xoridius/apple-llms\",\n    \"description\": \"\",\n    \"owner\": \"xoridius\",\n    \"repo\": \"apple-llms\"\n  },\n  \"XRPL Py\": {\n    \"title\": \"XRPL Py\",\n    \"repoName\": \"xrplf/xrpl-py.git\",\n    \"githubUrl\": \"https://github.com/xrplf/xrpl-py.git\",\n    \"description\": \"A Python library to interact with the XRP Ledger (XRPL) blockchain\",\n    \"owner\": \"xrplf\",\n    \"repo\": \"xrpl-py.git\"\n  },\n  \"Xterm.js\": {\n    \"title\": \"Xterm.js\",\n    \"repoName\": \"xtermjs/xterm.js\",\n    \"githubUrl\": \"https://github.com/xtermjs/xterm.js\",\n    \"description\": \"A terminal for the web\",\n    \"owner\": \"xtermjs\",\n    \"repo\": \"xterm.js\"\n  },\n  \"xUnit.net Assert\": {\n    \"title\": \"xUnit.net Assert\",\n    \"repoName\": \"xunit/assert.xunit\",\n    \"githubUrl\": \"https://github.com/xunit/assert.xunit\",\n    \"description\": \"xUnit.net assertion library for sub-module purposes (please open issues in https://github.com/xunit/xunit) \",\n    \"owner\": \"xunit\",\n    \"repo\": \"assert.xunit\"\n  },\n  \"xUnit.net Samples\": {\n    \"title\": \"xUnit.net Samples\",\n    \"repoName\": \"xunit/samples.xunit\",\n    \"githubUrl\": \"https://github.com/xunit/samples.xunit\",\n    \"description\": \"Samples for xUnit.net (please open issues in https://github.com/xunit/xunit)\",\n    \"owner\": \"xunit\",\n    \"repo\": \"samples.xunit\"\n  },\n  \"xUnit.net\": {\n    \"title\": \"xUnit.net\",\n    \"repoName\": \"xunit/xunit\",\n    \"githubUrl\": \"https://github.com/xunit/xunit\",\n    \"description\": \"xUnit.net is a free, open source, community-focused unit testing tool for .NET.\",\n    \"owner\": \"xunit\",\n    \"repo\": \"xunit\"\n  },\n  \"Xyflow\": {\n    \"title\": \"Xyflow\",\n    \"repoName\": \"xyflow/web\",\n    \"githubUrl\": \"https://github.com/xyflow/web\",\n    \"description\": \"📖 This monorepo contains the xyflow website and the documentation sites for React Flow and Svelte Flow.\",\n    \"owner\": \"xyflow\",\n    \"repo\": \"web\"\n  },\n  \"React Flow\": {\n    \"title\": \"React Flow\",\n    \"repoName\": \"xyflow/xyflow\",\n    \"githubUrl\": \"https://github.com/xyflow/xyflow\",\n    \"description\": \"React Flow | Svelte Flow - Powerful open source libraries for building node-based UIs with React (https://reactflow.dev) or Svelte (https://svelteflow.dev). Ready out-of-the-box and infinitely customizable.\",\n    \"owner\": \"xyflow\",\n    \"repo\": \"xyflow\"\n  },\n  \"Repomix\": {\n    \"title\": \"Repomix\",\n    \"repoName\": \"yamadashy/repomix\",\n    \"githubUrl\": \"https://github.com/yamadashy/repomix\",\n    \"description\": \"📦 Repomix (formerly Repopack) is a powerful tool that packs your entire repository into a single, AI-friendly file. Perfect for when you need to feed your codebase to Large Language Models (LLMs) or other AI tools like Claude, ChatGPT, DeepSeek, Perplexity, Gemini, Gemma, Llama, Grok, and more.\",\n    \"owner\": \"yamadashy\",\n    \"repo\": \"repomix\"\n  },\n  \"JQL\": {\n    \"title\": \"JQL\",\n    \"repoName\": \"yamafaktory/jql\",\n    \"githubUrl\": \"https://github.com/yamafaktory/jql\",\n    \"description\": \"A JSON Query Language CLI tool\",\n    \"owner\": \"yamafaktory\",\n    \"repo\": \"jql\"\n  },\n  \"PyYAML\": {\n    \"title\": \"PyYAML\",\n    \"repoName\": \"yaml/pyyaml\",\n    \"githubUrl\": \"https://github.com/yaml/pyyaml\",\n    \"description\": \"Canonical source repository for PyYAML\",\n    \"owner\": \"yaml\",\n    \"repo\": \"pyyaml\"\n  },\n  \"Macos Defaults\": {\n    \"title\": \"Macos Defaults\",\n    \"repoName\": \"yannbertrand/macos-defaults\",\n    \"githubUrl\": \"https://github.com/yannbertrand/macos-defaults\",\n    \"description\": \"Incomplete list of macOS `defaults` commands with demos ✨\",\n    \"owner\": \"yannbertrand\",\n    \"repo\": \"macos-defaults\"\n  },\n  \"Yarn\": {\n    \"title\": \"Yarn\",\n    \"repoName\": \"yarnpkg/website\",\n    \"githubUrl\": \"https://github.com/yarnpkg/website\",\n    \"description\": \"Yarn package manager website\",\n    \"owner\": \"yarnpkg\",\n    \"repo\": \"website\"\n  },\n  \"Vue3 Deferred Content\": {\n    \"title\": \"Vue3 Deferred Content\",\n    \"repoName\": \"yesworld/vue3-deferred-content\",\n    \"githubUrl\": \"https://github.com/yesworld/vue3-deferred-content\",\n    \"description\": \"A Vue3 component to detect when a lazy component is becoming visible/hidden on the page.\",\n    \"owner\": \"yesworld\",\n    \"repo\": \"vue3-deferred-content\"\n  },\n  \"Yew\": {\n    \"title\": \"Yew\",\n    \"repoName\": \"yewstack/yew\",\n    \"githubUrl\": \"https://github.com/yewstack/yew\",\n    \"description\": \"Rust / Wasm framework for creating reliable and efficient web applications\",\n    \"owner\": \"yewstack\",\n    \"repo\": \"yew\"\n  },\n  \"Cpp-httplib\": {\n    \"title\": \"Cpp-httplib\",\n    \"repoName\": \"yhirose/cpp-httplib\",\n    \"githubUrl\": \"https://github.com/yhirose/cpp-httplib\",\n    \"description\": \"A C++ header-only HTTP/HTTPS server and client library\",\n    \"owner\": \"yhirose\",\n    \"repo\": \"cpp-httplib\"\n  },\n  \"Yii 2\": {\n    \"title\": \"Yii 2\",\n    \"repoName\": \"yiisoft/yii2.git\",\n    \"githubUrl\": \"https://github.com/yiisoft/yii2.git\",\n    \"description\": \"Yii 2: The Fast, Secure and Professional PHP Framework\",\n    \"owner\": \"yiisoft\",\n    \"repo\": \"yii2.git\"\n  },\n  \"Open Codex\": {\n    \"title\": \"Open Codex\",\n    \"repoName\": \"ymichael/open-codex\",\n    \"githubUrl\": \"https://github.com/ymichael/open-codex\",\n    \"description\": \"Lightweight coding agent that runs in your terminal\",\n    \"owner\": \"ymichael\",\n    \"repo\": \"open-codex\"\n  },\n  \"YNAB SDK JS\": {\n    \"title\": \"YNAB SDK JS\",\n    \"repoName\": \"ynab/ynab-sdk-js\",\n    \"githubUrl\": \"https://github.com/ynab/ynab-sdk-js\",\n    \"description\": \"Official JavaScript client for the YNAB API\",\n    \"owner\": \"ynab\",\n    \"repo\": \"ynab-sdk-js\"\n  },\n  \"Yt-Dlp\": {\n    \"title\": \"Yt-Dlp\",\n    \"repoName\": \"yt-dlp/yt-dlp\",\n    \"githubUrl\": \"https://github.com/yt-dlp/yt-dlp\",\n    \"description\": \"A feature-rich command-line audio/video downloader\",\n    \"owner\": \"yt-dlp\",\n    \"repo\": \"yt-dlp\"\n  },\n  \"Create Figma Plugin\": {\n    \"title\": \"Create Figma Plugin\",\n    \"repoName\": \"yuanqing/create-figma-plugin\",\n    \"githubUrl\": \"https://github.com/yuanqing/create-figma-plugin\",\n    \"description\": \":battery: The comprehensive toolkit for developing plugins and widgets for Figma\",\n    \"owner\": \"yuanqing\",\n    \"repo\": \"create-figma-plugin\"\n  },\n  \"YB Voyager\": {\n    \"title\": \"YB Voyager\",\n    \"repoName\": \"yugabyte/yb-voyager\",\n    \"githubUrl\": \"https://github.com/yugabyte/yb-voyager\",\n    \"description\": \"Data migration Engine for YugabyteDB database\",\n    \"owner\": \"yugabyte\",\n    \"repo\": \"yb-voyager\"\n  },\n  \"YugabyteDB\": {\n    \"title\": \"YugabyteDB\",\n    \"repoName\": \"yugabyte/yugabyte-db\",\n    \"githubUrl\": \"https://github.com/yugabyte/yugabyte-db\",\n    \"description\": \"YugabyteDB - the cloud native distributed SQL database for mission-critical applications.\",\n    \"owner\": \"yugabyte\",\n    \"repo\": \"yugabyte-db\"\n  },\n  \"Windrecorder\": {\n    \"title\": \"Windrecorder\",\n    \"repoName\": \"yuka-friends/windrecorder\",\n    \"githubUrl\": \"https://github.com/yuka-friends/windrecorder\",\n    \"description\": \"Windrecorder is a memory search app by records everything on your screen in small size, to let you rewind what you have seen, query through OCR text or image description, and get activity statistics.\",\n    \"owner\": \"yuka-friends\",\n    \"repo\": \"windrecorder\"\n  },\n  \"Simple MCP Server\": {\n    \"title\": \"Simple MCP Server\",\n    \"repoName\": \"yuvraj1898/simple_mcp_server\",\n    \"githubUrl\": \"https://github.com/yuvraj1898/simple_mcp_server\",\n    \"description\": \"\",\n    \"owner\": \"yuvraj1898\",\n    \"repo\": \"simple_mcp_server\"\n  },\n  \"サバイバルTypeScript\": {\n    \"title\": \"サバイバルTypeScript\",\n    \"repoName\": \"yytypescript/book\",\n    \"githubUrl\": \"https://github.com/yytypescript/book\",\n    \"description\": \"TypeScriptの入門書『サバイバルTypeScript』\",\n    \"owner\": \"yytypescript\",\n    \"repo\": \"book\"\n  },\n  \"Zapier Platform\": {\n    \"title\": \"Zapier Platform\",\n    \"repoName\": \"zapier/zapier-platform\",\n    \"githubUrl\": \"https://github.com/zapier/zapier-platform\",\n    \"description\": \"The SDK for you to build an integration on Zapier\",\n    \"owner\": \"zapier\",\n    \"repo\": \"zapier-platform\"\n  },\n  \"ZAP\": {\n    \"title\": \"ZAP\",\n    \"repoName\": \"zaproxy/zaproxy-website\",\n    \"githubUrl\": \"https://github.com/zaproxy/zaproxy-website\",\n    \"description\": \"The source of ZAP website\",\n    \"owner\": \"zaproxy\",\n    \"repo\": \"zaproxy-website\"\n  },\n  \"Zarr Python\": {\n    \"title\": \"Zarr Python\",\n    \"repoName\": \"zarr-developers/zarr-python\",\n    \"githubUrl\": \"https://github.com/zarr-developers/zarr-python\",\n    \"description\": \"An implementation of chunked, compressed, N-dimensional arrays for Python.\",\n    \"owner\": \"zarr-developers\",\n    \"repo\": \"zarr-python\"\n  },\n  \"Zed\": {\n    \"title\": \"Zed\",\n    \"repoName\": \"zed-industries/zed\",\n    \"githubUrl\": \"https://github.com/zed-industries/zed\",\n    \"description\": \"Code at the speed of thought – Zed is a high-performance, multiplayer code editor from the creators of Atom and Tree-sitter.\",\n    \"owner\": \"zed-industries\",\n    \"repo\": \"zed\"\n  },\n  \"Zellij\": {\n    \"title\": \"Zellij\",\n    \"repoName\": \"zellij-org/zellij\",\n    \"githubUrl\": \"https://github.com/zellij-org/zellij\",\n    \"description\": \"A terminal workspace with batteries included\",\n    \"owner\": \"zellij-org\",\n    \"repo\": \"zellij\"\n  },\n  \"ZenStack\": {\n    \"title\": \"ZenStack\",\n    \"repoName\": \"zenstackhq/zenstack-docs\",\n    \"githubUrl\": \"https://github.com/zenstackhq/zenstack-docs\",\n    \"description\": \"ZenStack documentation\",\n    \"owner\": \"zenstackhq\",\n    \"repo\": \"zenstack-docs\"\n  },\n  \"Zephyr\": {\n    \"title\": \"Zephyr\",\n    \"repoName\": \"zephyrproject-rtos/zephyr\",\n    \"githubUrl\": \"https://github.com/zephyrproject-rtos/zephyr\",\n    \"description\": \"Primary Git Repository for the Zephyr Project. Zephyr is a new generation, scalable, optimized, secure RTOS for multiple hardware architectures.\",\n    \"owner\": \"zephyrproject-rtos\",\n    \"repo\": \"zephyr\"\n  },\n  \"Zepp OS\": {\n    \"title\": \"Zepp OS\",\n    \"repoName\": \"zepp-health/zeppos-docs\",\n    \"githubUrl\": \"https://github.com/zepp-health/zeppos-docs\",\n    \"description\": \"https://docs.zepp.com/\",\n    \"owner\": \"zepp-health\",\n    \"repo\": \"zeppos-docs\"\n  },\n  \"Kite Connect Go Client\": {\n    \"title\": \"Kite Connect Go Client\",\n    \"repoName\": \"zerodha/gokiteconnect\",\n    \"githubUrl\": \"https://github.com/zerodha/gokiteconnect\",\n    \"description\": \"Official Go client for Kite Connect API's\",\n    \"owner\": \"zerodha\",\n    \"repo\": \"gokiteconnect\"\n  },\n  \"Kite Connect\": {\n    \"title\": \"Kite Connect\",\n    \"repoName\": \"zerodha/pykiteconnect\",\n    \"githubUrl\": \"https://github.com/zerodha/pykiteconnect\",\n    \"description\": \"The official Python client library for the Kite Connect trading APIs\",\n    \"owner\": \"zerodha\",\n    \"repo\": \"pykiteconnect\"\n  },\n  \"Go Zero\": {\n    \"title\": \"Go Zero\",\n    \"repoName\": \"zeromicro/zero-doc\",\n    \"githubUrl\": \"https://github.com/zeromicro/zero-doc\",\n    \"description\": \"The docs for go-zero\",\n    \"owner\": \"zeromicro\",\n    \"repo\": \"zero-doc\"\n  },\n  \"PyZMQ\": {\n    \"title\": \"PyZMQ\",\n    \"repoName\": \"zeromq/pyzmq\",\n    \"githubUrl\": \"https://github.com/zeromq/pyzmq\",\n    \"description\": \"PyZMQ:  Python bindings for zeromq\",\n    \"owner\": \"zeromq\",\n    \"repo\": \"pyzmq\"\n  },\n  \"ZeroMQ\": {\n    \"title\": \"ZeroMQ\",\n    \"repoName\": \"zeromq/zeromq.org\",\n    \"githubUrl\": \"https://github.com/zeromq/zeromq.org\",\n    \"description\": \"ZeroMQ Website\",\n    \"owner\": \"zeromq\",\n    \"repo\": \"zeromq.org\"\n  },\n  \"Zharta Lending Protocol V2\": {\n    \"title\": \"Zharta Lending Protocol V2\",\n    \"repoName\": \"zharta/lending-protocol-v2\",\n    \"githubUrl\": \"https://github.com/zharta/lending-protocol-v2\",\n    \"description\": \"\",\n    \"owner\": \"zharta\",\n    \"repo\": \"lending-protocol-v2\"\n  },\n  \"FusionCache\": {\n    \"title\": \"FusionCache\",\n    \"repoName\": \"ziggycreatures/fusioncache\",\n    \"githubUrl\": \"https://github.com/ziggycreatures/fusioncache\",\n    \"description\": \"FusionCache is an easy to use, fast and robust hybrid cache with advanced resiliency features.\",\n    \"owner\": \"ziggycreatures\",\n    \"repo\": \"fusioncache\"\n  },\n  \"Zig\": {\n    \"title\": \"Zig\",\n    \"repoName\": \"ziglang/zig\",\n    \"githubUrl\": \"https://github.com/ziglang/zig\",\n    \"description\": \"General-purpose programming language and toolchain for maintaining robust, optimal, and reusable software.\",\n    \"owner\": \"ziglang\",\n    \"repo\": \"zig\"\n  },\n  \"DeepKE\": {\n    \"title\": \"DeepKE\",\n    \"repoName\": \"zjunlp/deepke\",\n    \"githubUrl\": \"https://github.com/zjunlp/deepke\",\n    \"description\": \"[EMNLP 2022] An Open Toolkit for Knowledge Graph Extraction and Construction\",\n    \"owner\": \"zjunlp\",\n    \"repo\": \"deepke\"\n  },\n  \"Cadwyn\": {\n    \"title\": \"Cadwyn\",\n    \"repoName\": \"zmievsa/cadwyn\",\n    \"githubUrl\": \"https://github.com/zmievsa/cadwyn\",\n    \"description\": \"Production-ready community-driven modern Stripe-like API versioning in FastAPI\",\n    \"owner\": \"zmievsa\",\n    \"repo\": \"cadwyn\"\n  },\n  \"React Native Edge To Edge\": {\n    \"title\": \"React Native Edge To Edge\",\n    \"repoName\": \"zoontek/react-native-edge-to-edge\",\n    \"githubUrl\": \"https://github.com/zoontek/react-native-edge-to-edge\",\n    \"description\": \"Effortlessly enable edge-to-edge display in React Native (formerly known as react-native-bars).\",\n    \"owner\": \"zoontek\",\n    \"repo\": \"react-native-edge-to-edge\"\n  },\n  \"Zotero\": {\n    \"title\": \"Zotero\",\n    \"repoName\": \"zotero/zotero.git\",\n    \"githubUrl\": \"https://github.com/zotero/zotero.git\",\n    \"description\": \"Zotero is a free, easy-to-use tool to help you collect, organize, annotate, cite, and share your research sources.\",\n    \"owner\": \"zotero\",\n    \"repo\": \"zotero.git\"\n  },\n  \"GSEApy\": {\n    \"title\": \"GSEApy\",\n    \"repoName\": \"zqfang/gseapy\",\n    \"githubUrl\": \"https://github.com/zqfang/gseapy\",\n    \"description\": \"Gene Set Enrichment Analysis in Python\",\n    \"owner\": \"zqfang\",\n    \"repo\": \"gseapy\"\n  },\n  \"Terraform Provider for Zscaler Internet Access\": {\n    \"title\": \"Terraform Provider for Zscaler Internet Access\",\n    \"repoName\": \"zscaler/terraform-provider-zia\",\n    \"githubUrl\": \"https://github.com/zscaler/terraform-provider-zia\",\n    \"description\": \":cloud: Terraform Provider for Zscaler Internet Access :cloud:\",\n    \"owner\": \"zscaler\",\n    \"repo\": \"terraform-provider-zia\"\n  },\n  \"Terraform Provider for Zscaler Private Access\": {\n    \"title\": \"Terraform Provider for Zscaler Private Access\",\n    \"repoName\": \"zscaler/terraform-provider-zpa\",\n    \"githubUrl\": \"https://github.com/zscaler/terraform-provider-zpa\",\n    \"description\": \":cloud: Terraform Provider for Zscaler Private Access :cloud:\",\n    \"owner\": \"zscaler\",\n    \"repo\": \"terraform-provider-zpa\"\n  },\n  \"MoviePy\": {\n    \"title\": \"MoviePy\",\n    \"repoName\": \"zulko/moviepy\",\n    \"githubUrl\": \"https://github.com/zulko/moviepy\",\n    \"description\": \"Video editing with Python\",\n    \"owner\": \"zulko\",\n    \"repo\": \"moviepy\"\n  },\n  \"Zuplo\": {\n    \"title\": \"Zuplo\",\n    \"repoName\": \"zuplo/docs\",\n    \"githubUrl\": \"https://github.com/zuplo/docs\",\n    \"description\": \"Zuplo Documentation\",\n    \"owner\": \"zuplo\",\n    \"repo\": \"docs\"\n  },\n  \"BrainyFlow\": {\n    \"title\": \"BrainyFlow\",\n    \"repoName\": \"zvictor/brainyflow\",\n    \"githubUrl\": \"https://github.com/zvictor/brainyflow\",\n    \"description\": \"BrainyFlow: More AI with less coding 🎤🐤\",\n    \"owner\": \"zvictor\",\n    \"repo\": \"brainyflow\"\n  }\n}\n"
  },
  {
    "path": "src/api/tools/repoHandlers/handlers.test.ts",
    "content": "import { describe, it, expect, vi, beforeEach, afterEach } from \"vitest\";\nimport { getHandlerByRepoData } from \"./handlers.js\";\nimport type { RequestData } from \"../../../shared/repoData.js\";\nimport { getRepoData } from \"../../../shared/repoData.js\";\n\ndescribe(\"getHandlerByRepoData\", () => {\n  it(\"should return the correct handler for three.js\", () => {\n    const requests: RequestData[] = [\n      {\n        requestHost: \"gitmcp.io\",\n        requestUrl: \"/mrdoob/three.js\",\n      },\n      {\n        requestHost: \"mrdoob.gitmcp.io\",\n        requestUrl: \"/three.js\",\n      },\n    ];\n    requests.forEach((request) => {\n      const repoData = getRepoData(request);\n      const handler = getHandlerByRepoData(repoData);\n      expect(handler.name).toBe(\"threejs\");\n    });\n  });\n  it(\"should return the generic handler for generic repos\", () => {\n    const requests: RequestData[] = [\n      {\n        requestHost: \"gitmcp.io\",\n        requestUrl: \"/docs\",\n      },\n      {\n        requestHost: \"docs.gitmcp.io\",\n        requestUrl: \"/\",\n      },\n    ];\n    requests.forEach((request) => {\n      const repoData = getRepoData(request);\n      const handler = getHandlerByRepoData(repoData);\n      expect(handler.name).toBe(\"generic\");\n    });\n  });\n  it(\"should not return the generic handler urls that only look generic \", () => {\n    const requests: RequestData[] = [\n      {\n        requestHost: \"docs.gitmcp.io\",\n        requestUrl: \"/some-repo\",\n      },\n      {\n        requestHost: \"gitmcp.io\",\n        requestUrl: \"/docs/other-path\",\n      },\n    ];\n    requests.forEach((request) => {\n      const repoData = getRepoData(request);\n      const handler = getHandlerByRepoData(repoData);\n      expect(handler.name).not.toBe(\"generic\");\n    });\n  });\n  it(\"should return the react-router handler for react-router\", () => {\n    const repoData = getRepoData({\n      requestHost: \"gitmcp.io\",\n      requestUrl: \"/remix-run/react-router\",\n    });\n    const handler = getHandlerByRepoData(repoData);\n    expect(handler.name).toBe(\"react-router\");\n  });\n  it(\"should return the default handler for other repos\", () => {\n    const requests: RequestData[] = [\n      {\n        requestHost: \"gitmcp.io\",\n        requestUrl: \"/some-owner/some-repo\",\n      },\n      {\n        requestHost: \"owner.gitmcp.io\",\n        requestUrl: \"/some-repo\",\n      },\n    ];\n    requests.forEach((request) => {\n      const repoData = getRepoData(request);\n      const handler = getHandlerByRepoData(repoData);\n      expect(handler.name).toBe(\"default\");\n    });\n  });\n});\n"
  },
  {
    "path": "src/api/tools/repoHandlers/handlers.ts",
    "content": "import type { RepoData, UrlType } from \"../../../shared/repoData.js\";\nimport type { RepoHandler } from \"./RepoHandler.js\";\nimport { getDefaultRepoHandler } from \"./DefaultRepoHandler.js\";\nimport { getGenericRepoHandler } from \"./GenericRepoHandler.js\";\nimport { getThreejsRepoHandler } from \"./ThreejsRepoHandler.js\";\nimport { getReactRouterRepoHandler } from \"./ReactRouterRepoHandler.js\";\n\nconst handlers: RepoHandlerMap = {\n  // handle all types of urls for three.js\n  \"all::mrdoob/three.js\": getThreejsRepoHandler(),\n  // handle only the github type of urls for \"generic\" repos\n  \"all::docs/\": getGenericRepoHandler(),\n  \"all::remix-run/react-router\": getReactRouterRepoHandler(),\n};\n\nexport function getHandlerByRepoData(repoData: RepoData): RepoHandler {\n  if (!repoData.repo && repoData.owner !== \"docs\") {\n    console.log(\"Invalid repo data:\", repoData);\n\n    throw new Error(\n      `Invalid repository data: ${JSON.stringify(repoData, null, 2)}`,\n    );\n  }\n\n  const repoKey = `${repoData.owner ?? \"\"}/${repoData.repo ?? \"\"}` as RepoKey;\n\n  return (\n    // check if the keyWithUrlType is in the handlers\n    handlers[`${repoData.urlType}::${repoKey}` as UrlTypeRepoKey] ??\n    // check if the allKey is in the handlers\n    handlers[`all::${repoKey}` as AllRepoKey] ??\n    // if not, return the default handler\n    getDefaultRepoHandler()\n  );\n}\n\ntype RepoKey = `${string}/${string}`;\ntype UrlTypeRepoKey = `${UrlType}::${RepoKey}`;\ntype AllRepoKey = `all::${RepoKey}`;\ntype MapRepoKey = UrlTypeRepoKey | AllRepoKey;\n\ntype RepoHandlerMap = {\n  [key in MapRepoKey]: RepoHandler;\n};\n"
  },
  {
    "path": "src/api/tools/repoHandlers/test/utils.ts",
    "content": "import type { ZodRawShape } from \"zod\";\n\nexport class MockMcp {\n  #tools: Record<\n    string,\n    {\n      description: string;\n      cb: (args: Record<string, any>) => Promise<any>;\n    }\n  > = {};\n\n  tool(\n    name: string,\n    description: string,\n    paramsSchema: ZodRawShape,\n    cb: (args: Record<string, any>) => Promise<any>,\n  ): void {\n    this.#tools[name] = { description, cb };\n  }\n\n  getTool(name: string) {\n    return this.#tools[name];\n  }\n\n  getTools() {\n    // filter out the cb from the tools\n    return Object.fromEntries(\n      Object.entries(this.#tools).map(([name, { description }]) => [\n        name,\n        { description },\n      ]),\n    );\n  }\n}\n"
  },
  {
    "path": "src/api/tools/repoHandlers/threejs/__snapshots__/utils.test.ts.snap",
    "content": "// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html\n\nexports[`Threejs Utils > should get the reference docs list as markdown 1`] = `\n\"\n      \n      \n      \n      \n      # AudioContext\n      # Documentation\n\nContent for the requested page.\n      \n      # api/en/constants/BufferAttributeUsage\n      # Documentation\n\nContent for the requested page.\n      \n      # Debugging JavaScript\n      # Documentation\n\nContent for the requested page.\n      \n      # en/tips#preservedrawingbuffer\n      # Documentation\n\nContent for the requested page.\n      \"\n`;\n"
  },
  {
    "path": "src/api/tools/repoHandlers/threejs/utils.test.ts",
    "content": "import { describe, it, expect, vi } from \"vitest\";\nimport { getReferenceDocsContent } from \"./utils.js\";\n\nconst THREEJS_DOCS_REF_URL = \"https://threejs.org/docs/list.json\";\nconst THREEJS_MANUAL_REF_URL = \"https://threejs.org/manual/list.json\";\n\nvi.mock(\"../../../utils/cache.js\", () => ({\n  fetchUrlContent: vi.fn(\n    async ({\n      url,\n      format,\n    }: {\n      url: string;\n      format: \"json\" | \"text\";\n    }): Promise<Record<string, unknown> | string | null> => {\n      if (format === \"json\") {\n        if (url === THREEJS_DOCS_REF_URL) {\n          return {\n            en: {\n              api: {\n                audio: { AudioContext: \"api/en/audio/AudioContext\" },\n                constants: {\n                  \"api/en/constants/BufferAttributeUsage\":\n                    \"api/en/constants/BufferAttributeUsage\",\n                },\n              },\n            },\n          };\n        }\n        if (url === THREEJS_MANUAL_REF_URL) {\n          return {\n            en: {\n              section: {\n                \"Debugging JavaScript\": \"en/Debugging-JavaScript\",\n                \"en/tips#preservedrawingbuffer\":\n                  \"en/tips#preservedrawingbuffer\",\n              },\n            },\n          };\n        }\n      }\n      if (format === \"text\" && url.includes(\"threejs.org\")) {\n        return \"<h1>Documentation</h1><p>Content for the requested page.</p>\";\n      }\n      return null;\n    },\n  ),\n}));\n\ndescribe(\"Threejs Utils\", () => {\n  it(\"should get the reference docs list as markdown\", async () => {\n    const result = await getReferenceDocsContent({\n      // @ts-ignore\n      env: {},\n      documents: [\n        { documentName: \"AudioContext\" },\n        { documentName: \"api/en/constants/BufferAttributeUsage\" },\n        { documentName: \"Debugging JavaScript\" },\n        { documentName: \"en/tips#preservedrawingbuffer\" },\n      ],\n    });\n    expect(result.content[0].text).toMatchSnapshot();\n  });\n});\n"
  },
  {
    "path": "src/api/tools/repoHandlers/threejs/utils.ts",
    "content": "import htmlToMd from \"html-to-md\";\nimport { fetchUrlContent } from \"../../../utils/cache.js\";\nconst THREEJS_BASE_URL = \"https://threejs.org\";\nconst THREEJS_DOCS_BASE_URL = `${THREEJS_BASE_URL}/docs`;\nconst THREEJS_MANUAL_BASE_URL = `${THREEJS_BASE_URL}/manual`;\nconst THREEJS_DOCS_REF_URL = `${THREEJS_DOCS_BASE_URL}/list.json`;\nconst THREEJS_MANUAL_REF_URL = `${THREEJS_MANUAL_BASE_URL}/list.json`;\n\n/**\n * Get the url of a document by key, flattens the docs and manual lists\n */\nasync function getByKey(\n  key: string,\n  env: Env,\n): Promise<{ type: \"doc\" | \"manual\"; url: string }> {\n  const { docsCacheByInnerKey, manualCacheByInnerKey } =\n    await getListFlatCache(env);\n  if (docsCacheByInnerKey[key]) {\n    return { type: \"doc\", url: docsCacheByInnerKey[key] };\n  }\n  if (manualCacheByInnerKey[key]) {\n    return { type: \"manual\", url: manualCacheByInnerKey[key] };\n  }\n  const docAsValue = Object.entries(docsCacheByInnerKey).find(\n    ([_, url]) => url === key,\n  );\n  if (docAsValue) {\n    return { type: \"doc\", url: key };\n  }\n  const manualAsValue = Object.entries(manualCacheByInnerKey).find(\n    ([_, url]) => url === key,\n  );\n  if (manualAsValue) {\n    return { type: \"manual\", url: key };\n  }\n  throw new Error(`No url found for key ${key}`);\n}\n\nlet docsCacheByInnerKey: Record<string, string> | null = null;\nlet manualCacheByInnerKey: Record<string, string> | null = null;\n/**\n * Flatten the docs and manual lists\n */\nasync function getListFlatCache(env: Env) {\n  // build the cache if it's not built\n  if (!docsCacheByInnerKey || !manualCacheByInnerKey) {\n    const { docs, manual } = await getReferenceDocsList({ env });\n    docsCacheByInnerKey = {};\n    manualCacheByInnerKey = {};\n    Object.entries(docs).forEach(([_, part]) => {\n      Object.entries(part).forEach(([_, section]) => {\n        Object.entries(section).forEach(([documentName, url]) => {\n          if (docsCacheByInnerKey) {\n            docsCacheByInnerKey[documentName] = url;\n          }\n        });\n      });\n    });\n    Object.entries(manual).forEach(([_, section]) => {\n      Object.entries(section).forEach(([documentName, url]) => {\n        if (manualCacheByInnerKey) {\n          manualCacheByInnerKey[documentName] = url;\n        }\n      });\n    });\n  }\n  return { docsCacheByInnerKey, manualCacheByInnerKey };\n}\n\n/**\n * Fetches https://threejs.org/docs/list.json and https://threejs.org/manual/list.json\n */\nasync function getReferenceDocsList({ env }: { env: Env }): Promise<{\n  docs: Record<string, Record<string, Record<string, string>>>;\n  manual: Record<string, Record<string, string>>;\n}> {\n  const [docs, manual] = await Promise.all([\n    (await fetchUrlContent({\n      url: THREEJS_DOCS_REF_URL,\n      format: \"json\",\n    })) as {\n      en: Record<string, Record<string, Record<string, string>>>;\n    } | null,\n    (await fetchUrlContent({\n      url: THREEJS_MANUAL_REF_URL,\n      format: \"json\",\n    })) as {\n      en: Record<string, Record<string, string>>;\n    } | null,\n  ]);\n  if (!docs || !manual) {\n    console.error(\"Error fetching docs or manual\");\n  }\n  return { docs: docs?.en ?? {}, manual: manual?.en ?? {} };\n}\n\n/**\n * Get the docs and manual lists as markdown\n */\nexport async function getReferenceDocsListAsMarkdown({\n  env,\n}: {\n  env: Env;\n}): Promise<{\n  filesUsed: string[];\n  content: { type: \"text\"; text: string }[];\n}> {\n  const { docs, manual } = await getReferenceDocsList({ env });\n\n  const result = `\n  # Three.js Documentation\n\n  ## Reference Documentation\n  ${Object.entries(docs)\n    .map(\n      ([partName, part]) => `\n    ### ${partName}\n    ${Object.entries(part)\n      .map(\n        ([sectionName, section]) => `\n      - ${sectionName}\n      ${Object.entries(section)\n        .map(\n          ([documentName, url]) => `\n        - ${documentName}: ${url}\n        `,\n        )\n        .join(\"\\n\")}\n      `,\n      )\n      .join(\"\\n\")}\n    `,\n    )\n    .join(\"\\n\")}\n\n  ## Manual Documentation\n  ${Object.entries(manual)\n    .map(\n      ([key, value]) => `\n    ### ${key}\n    ${Object.entries(value)\n      .map(\n        ([key, value]) => `\n      ${key}: ${value}\n      `,\n      )\n      .join(\"\\n\")}\n    `,\n    )\n    .join(\"\\n\")}\n  `;\n\n  return {\n    filesUsed: [THREEJS_DOCS_REF_URL, THREEJS_MANUAL_REF_URL],\n    content: [\n      {\n        type: \"text\" as const,\n        text: result,\n      },\n    ],\n  };\n}\n\n/**\n * Get the content of specific documents\n */\nexport async function getReferenceDocsContent({\n  env,\n  documents,\n}: {\n  env: Env;\n  documents: { documentName: string }[];\n}): Promise<{\n  filesUsed: string[];\n  content: { type: \"text\"; text: string }[];\n}> {\n  // get the urls to fetch\n  const urlsToFetch = await Promise.all(\n    documents.map(async ({ documentName }) => {\n      const { type, url } = await getByKey(documentName, env);\n      if (type === \"doc\") {\n        return {\n          documentName,\n          url: `/docs/${url}.html`,\n        };\n      }\n      return {\n        documentName,\n        url: `/manual/${url}.html`,\n      };\n    }),\n  );\n\n  return await fetchThreeJsUrlsAsMarkdown(urlsToFetch);\n}\n\n/**\n * A specific tool for fetching links inside threejs documentation, since the urls are not standard\n */\nexport async function fetchThreeJsUrlsAsMarkdown(\n  urlsToFetch: { documentName?: string; url: string }[],\n): Promise<{\n  filesUsed: string[];\n  content: { type: \"text\"; text: string }[];\n}> {\n  // get the html content of each page\n  const htmlContent = await Promise.all(\n    urlsToFetch.map(async ({ documentName, url }) => {\n      let urlToFetch: URL;\n      if (url.startsWith(\"http\")) {\n        urlToFetch = new URL(url);\n      } else if (\n        url.endsWith(\".html\") &&\n        !url.includes(\"api\") &&\n        !url.includes(\"manual\") &&\n        !url.includes(\"docs\") &&\n        !url.includes(\"examples\")\n      ) {\n        urlToFetch = new URL(`/manual/en/${url}`, THREEJS_BASE_URL);\n      } else {\n        const urlObject = new URL(url, THREEJS_BASE_URL);\n        const urlObjectPath = urlObject.pathname;\n        // remove hashes\n        const cleanUrl = urlObjectPath.replace(/#/g, \"\");\n        urlToFetch = new URL(cleanUrl, THREEJS_BASE_URL);\n        if (\n          !urlToFetch.toString().includes(`${THREEJS_BASE_URL}/docs`) &&\n          !urlToFetch.toString().includes(`${THREEJS_BASE_URL}/manual`)\n        ) {\n          urlToFetch = new URL(\n            urlToFetch\n              .toString()\n              .replace(THREEJS_BASE_URL, `${THREEJS_BASE_URL}/docs`),\n          );\n        }\n      }\n      let documentNameToUse = documentName;\n      if (!documentNameToUse) {\n        try {\n          documentNameToUse = urlToFetch.pathname\n            .split(\"/\")\n            .pop()\n            ?.replace(\".html\", \"\");\n        } catch (e) {\n          console.error(`Error getting document name from url ${url}`, e);\n        }\n      }\n      const text = await fetchUrlContent({\n        url: urlToFetch.toString(),\n        format: \"text\",\n      });\n\n      if (!text) {\n        console.error(`Error fetching url ${urlToFetch}`);\n        return {\n          documentName: documentName ?? urlToFetch.pathname,\n          text: \"\",\n        };\n      }\n\n      return {\n        documentName: documentName ?? urlToFetch.pathname,\n        text: text.replace(\n          new RegExp(`\\\\[name\\\\]`, \"g\"),\n          documentNameToUse ?? \"[name]\",\n        ),\n      };\n    }),\n  );\n\n  // convert the html to markdown and concatenate the content use htmltomd\n  const content = htmlContent.reduce((acc, { documentName, text }) => {\n    return `\n      ${acc}\n      # ${documentName}\n      ${htmlToMd(text)}\n      `;\n  }, \"\");\n\n  return {\n    filesUsed: urlsToFetch.map(({ url }) => url),\n    content: [\n      {\n        type: \"text\" as const,\n        text: content,\n      },\n    ],\n  };\n}\n"
  },
  {
    "path": "src/api/utils/ViewCounterDO.ts",
    "content": "/**\n * Durable Object for handling repository view counts\n * This provides atomic operations to avoid race conditions when incrementing view counts\n */\n\nexport class ViewCounterDO {\n  private state: DurableObjectState;\n  private counts: Map<string, number> = new Map();\n  private buffer: Map<string, number> = new Map();\n  private bufferTimer: number | null = null;\n  private initialized = false;\n  private BUFFER_TIME_MS = 5000; // 5 seconds\n  private isTestEnvironment = false;\n\n  constructor(state: DurableObjectState) {\n    this.state = state;\n    // Check if we're in a test environment (setAlarm won't be available)\n    this.isTestEnvironment = !this.state.storage.setAlarm;\n    // Set up periodic alarm to ensure buffer gets flushed even with low activity\n    this.setupAlarm();\n  }\n\n  /**\n   * Initialize the Durable Object by loading stored data\n   */\n  private async initialize() {\n    if (this.initialized) return;\n\n    // Load stored counts from persistent storage\n    const stored = await this.state.storage.get<Map<string, number>>(\"counts\");\n    if (stored) {\n      this.counts = stored;\n    }\n\n    this.initialized = true;\n  }\n\n  /**\n   * Setup alarm for periodic buffer flushing\n   */\n  private setupAlarm() {\n    try {\n      if (this.state.storage.setAlarm) {\n        this.state.storage.setAlarm(Date.now() + this.BUFFER_TIME_MS);\n      } else {\n        // In test environment, we won't have the setAlarm method\n        console.error(\"Error setting alarm: setAlarm is not available\");\n      }\n    } catch (error) {\n      console.error(\"Error setting alarm:\", error);\n    }\n  }\n\n  /**\n   * Handle DO alarm - used to flush buffer on a timer\n   */\n  async alarm() {\n    await this.flushBuffer();\n    // Set another alarm\n    this.setupAlarm();\n  }\n\n  /**\n   * Flush the buffer to persistent storage\n   */\n  private async flushBuffer() {\n    if (this.buffer.size === 0) return;\n\n    try {\n      // Ensure we're initialized\n      await this.initialize();\n\n      // Apply buffer changes to main counts\n      for (const [key, incrementAmount] of this.buffer.entries()) {\n        const currentCount = this.counts.get(key) || 0;\n        this.counts.set(key, currentCount + incrementAmount);\n      }\n\n      // Persist to storage\n      await this.state.storage.put(\"counts\", this.counts);\n    } catch (error) {\n      console.error(\"Error flushing buffer:\", error);\n      // We'll leave the buffer intact so we can try again later\n      return;\n    }\n\n    // Clear buffer only after successful write\n    this.buffer.clear();\n\n    // Clear any pending timer\n    if (this.bufferTimer !== null) {\n      clearTimeout(this.bufferTimer);\n      this.bufferTimer = null;\n    }\n  }\n\n  /**\n   * Add an increment to the buffer and schedule a flush\n   */\n  private bufferIncrement(key: string, amount: number = 1): number {\n    // Add to buffer\n    const currentBufferAmount = this.buffer.get(key) || 0;\n    const newBufferAmount = currentBufferAmount + amount;\n    this.buffer.set(key, newBufferAmount);\n\n    // Calculate the current total (including buffered amounts)\n    const persistedCount = this.counts.get(key) || 0;\n    const currentTotal = persistedCount + newBufferAmount;\n\n    // Schedule buffer flush if not already scheduled\n    if (this.bufferTimer === null && !this.isTestEnvironment) {\n      this.bufferTimer = setTimeout(\n        () => this.flushBuffer(),\n        this.BUFFER_TIME_MS,\n      ) as unknown as number;\n    }\n\n    return currentTotal;\n  }\n\n  /**\n   * Handle fetch requests to the Durable Object\n   */\n  async fetch(request: Request): Promise<Response> {\n    await this.initialize();\n\n    const url = new URL(request.url);\n    const pathParts = url.pathname.slice(1).split(\"/\"); // Remove leading slash and split by /\n\n    // Ensure we have at least a repository key\n    if (pathParts.length === 0 || !pathParts[0]) {\n      return new Response(\"Missing repository key\", { status: 400 });\n    }\n\n    const repoKey = pathParts[0];\n\n    // Handle flush request - for admin/debug use\n    if (\n      pathParts.length > 1 &&\n      pathParts[1] === \"flush\" &&\n      request.method === \"POST\"\n    ) {\n      await this.flushBuffer();\n      return new Response(\n        JSON.stringify({\n          success: true,\n          flushed: true,\n        }),\n        {\n          headers: { \"Content-Type\": \"application/json\" },\n        },\n      );\n    }\n\n    // Standard increment and get operations\n    if (request.method === \"POST\") {\n      // Increment count using buffer\n      const newCount = this.bufferIncrement(repoKey);\n\n      // In test environment, ensure buffer is flushed immediately\n      if (this.isTestEnvironment) {\n        await this.flushBuffer();\n      }\n\n      return new Response(JSON.stringify({ count: newCount }), {\n        headers: { \"Content-Type\": \"application/json\" },\n      });\n    } else if (request.method === \"GET\") {\n      // Get current count - calculate from persisted + buffered\n      const persistedCount = this.counts.get(repoKey) || 0;\n      const bufferedIncrement = this.buffer.get(repoKey) || 0;\n      const totalCount = persistedCount + bufferedIncrement;\n\n      return new Response(JSON.stringify({ count: totalCount }), {\n        headers: { \"Content-Type\": \"application/json\" },\n      });\n    } else {\n      return new Response(\"Method not allowed\", { status: 405 });\n    }\n  }\n}\n"
  },
  {
    "path": "src/api/utils/badge.ts",
    "content": "/**\n * Badge utilities for GitMCP documentation tracking\n */\n\nconst badgeCountAllowedRepos = [\"mcp-ui\", \"git-mcp\"];\n\n/**\n * Gets a Durable Object stub for the view counter\n * @param env Cloudflare environment\n * @param owner Repository owner/organization\n * @param repo Repository name\n * @returns The Durable Object stub\n */\nfunction getViewCounterStub(\n  env: CloudflareEnvironment,\n  owner: string,\n  repo: string,\n) {\n  try {\n    const key = `${owner}/${repo}`;\n    // Create a deterministic ID based on the repository key\n    const id = env.VIEW_COUNTER.idFromName(key);\n    // Get the stub of the Durable Object with that ID\n    return env.VIEW_COUNTER.get(id);\n  } catch (error) {\n    console.error(`Error getting view counter stub:`, error);\n    return null;\n  }\n}\n\n/**\n * Increments the view count for a specific repository\n * This operation is \"fire and forget\" and will never throw an error\n * or block the calling code - designed to be completely non-blocking\n *\n * @param env Cloudflare environment\n * @param owner Repository owner/organization\n * @param repo Repository name\n * @returns The new count or 0 if there was an error\n */\nexport async function incrementRepoViewCount(\n  env: CloudflareEnvironment,\n  owner: string,\n  repo: string,\n): Promise<number> {\n  if (!env?.VIEW_COUNTER) {\n    console.warn(\"VIEW_COUNTER binding not available\");\n    return 0;\n  }\n\n  try {\n    const stub = getViewCounterStub(env, owner, repo);\n    if (!stub) return 0;\n\n    // Send a POST request to the Durable Object to increment the count\n    // Add a timeout to ensure we don't hang\n    const controller = new AbortController();\n    const timeoutId = setTimeout(() => controller.abort(), 1000); // 1 second timeout\n\n    try {\n      const response = await stub.fetch(`https://counter/${owner}/${repo}`, {\n        method: \"POST\",\n        signal: controller.signal,\n      });\n\n      clearTimeout(timeoutId);\n\n      if (!response.ok) {\n        console.warn(\n          `Counter response not OK: ${response.status} ${response.statusText}`,\n        );\n        return 0;\n      }\n\n      const data = await response.json<{ count: number }>();\n      return data.count;\n    } catch (fetchError) {\n      clearTimeout(timeoutId);\n      console.error(`Failed to increment counter via fetch:`, fetchError);\n      return 0;\n    }\n  } catch (error) {\n    console.error(`Error incrementing repo view count:`, error);\n    return 0;\n  }\n}\n\n/**\n * Gets the current view count for a specific repository\n * This operation should never throw or cause disruption in the calling code\n *\n * @param env Cloudflare environment\n * @param owner Repository owner/organization\n * @param repo Repository name\n * @returns The current count or 0 if there was an error\n */\nexport async function getRepoViewCount(\n  env: CloudflareEnvironment,\n  owner: string,\n  repo: string,\n): Promise<number> {\n  if (!env?.VIEW_COUNTER) {\n    console.warn(\"VIEW_COUNTER binding not available\");\n    return 0;\n  }\n\n  try {\n    const stub = getViewCounterStub(env, owner, repo);\n    if (!stub) return 0;\n\n    // Send a GET request to the Durable Object to get the count\n    // Add a timeout to ensure we don't hang\n    const controller = new AbortController();\n    const timeoutId = setTimeout(() => controller.abort(), 1000); // 1 second timeout\n\n    try {\n      const response = await stub.fetch(`https://counter/${owner}/${repo}`, {\n        method: \"GET\",\n        signal: controller.signal,\n      });\n\n      clearTimeout(timeoutId);\n\n      if (!response.ok) {\n        console.warn(\n          `Counter response not OK: ${response.status} ${response.statusText}`,\n        );\n        return 0;\n      }\n\n      const data = await response.json<{ count: number }>();\n      return data.count;\n    } catch (fetchError) {\n      clearTimeout(timeoutId);\n      console.error(`Failed to get counter via fetch:`, fetchError);\n      return 0;\n    }\n  } catch (error) {\n    console.error(`Error getting repo view count:`, error);\n    return 0;\n  }\n}\n\n/**\n * Wrapper for tool callbacks that increments the view count for a repository\n * whenever an MCP tool is called to access the repository's data.\n *\n * This ensures we accurately track how often each repository is accessed through\n * GitMCP's MCP protocol. Every MCP tool call for a specific repository\n * (documentation fetch, documentation search, code search) will increment the counter.\n *\n * The implementation ensures that count failures will never impact tool execution.\n *\n * @param env Cloudflare environment\n * @param ctx Execution context or Durable Object state\n * @param repoData Repository data containing owner and repo\n * @param originalCallback The original tool callback function\n * @returns A new callback function that increments the view count before calling the original\n */\nexport function withViewTracking<T, R>(\n  env: CloudflareEnvironment,\n  ctx: any,\n  repoData: { owner: string | null; repo: string | null },\n  originalCallback: (args: T) => Promise<R>,\n): (args: T) => Promise<R> {\n  return async (args: T) => {\n    // Only track if we have both owner and repo and counter binding available\n    if (\n      repoData.owner &&\n      repoData.repo &&\n      badgeCountAllowedRepos.includes(repoData.repo) &&\n      env?.VIEW_COUNTER\n    ) {\n      // Handle the view count tracking\n      try {\n        const incrementPromise = incrementRepoViewCount(\n          env,\n          repoData.owner,\n          repoData.repo,\n        );\n\n        ctx.waitUntil(\n          incrementPromise.catch((err) => {\n            console.warn(\"Error incrementing repo view count:\", err);\n            return 0; // Always resolve, never reject\n          }),\n        );\n      } catch (error) {\n        // Just log the error and continue, never let it affect the main execution\n        console.warn(\"Error in view tracking:\", error);\n      }\n    }\n\n    // Call the original callback and return its result\n    return originalCallback(args);\n  };\n}\n\n/**\n * Returns the escaped SVG logo for GitMCP\n * @returns The 3scaped SVG string\n */\nfunction getEscapedLogo(): string {\n  return '<svg version=\"1.1\" xmlns=\"http:\\/\\/www.w3.org\\/2000\\/svg\" width=\"696\" height=\"691\">\\r\\n<path d=\"M0 0 C0.66 0.33 1.32 0.66 2 1 C3.69148762 2.64677208 5.34854633 4.31394974 7 6 C8.07467107 7.06792255 9.15136145 8.13381569 10.22973633 9.19799805 C13.41361799 12.34645689 16.59153006 15.50086521 19.76733398 18.6574707 C21.13797377 20.01796609 22.5103902 21.37667377 23.88452148 22.73364258 C25.8716961 24.69669009 27.85245706 26.6660109 29.83203125 28.63671875 C30.45068558 29.24505051 31.0693399 29.85338226 31.70674133 30.48014832 C33.1762751 31.9492888 34.5937742 33.47015287 36 35 C36 35.66 36 36.32 36 37 C36.66 37 37.32 37 38 37 C39.71191552 38.62015456 41.37190953 40.29563004 43 42 C43.76699219 42.76699219 44.53398437 43.53398438 45.32421875 44.32421875 C153 152 153 152 155.21937561 154.22147846 C158.30481391 157.30458339 161.39677798 160.38104317 164.48999023 163.4563446 C165.81551749 164.77453979 167.14102725 166.09275257 168.46652222 167.41098022 C169.17033901 168.11091976 169.87415581 168.8108593 170.59930038 169.53200912 C186.80216646 185.64646841 202.99078004 201.77518106 219.17121887 217.91215801 C228.52307292 227.23821697 237.87958202 236.55951575 247.24707031 245.86987305 C255.42869882 254.00162875 263.60146686 262.14216873 271.7637682 270.29332572 C276.0806501 274.60370009 280.40179603 278.90959175 284.73361206 283.20496178 C288.80907749 287.24640902 292.87256592 291.29952511 296.92730331 295.36176491 C298.41404818 296.84713831 299.9050582 298.32825726 301.40069962 299.80467224 C315.75503012 313.98351942 315.75503012 313.98351942 319 323 C319.3521608 323.86060878 319.70432159 324.72121756 320.06715393 325.60790539 C323.92754259 335.50708942 322.5703104 347.23451684 319 357 C315.50548871 363.94771631 311.69504318 371.00688065 305.5625 375.9375 C303.43784958 377.70804201 301.79560645 379.25714027 300.0625 381.4375 C298.18087559 383.77527578 296.3374044 385.50213357 294.0625 387.4375 C291.588648 389.54688025 289.59687631 391.48374843 287.5 394 C285.52853009 396.3657639 283.78559722 398.11612984 281.46484375 400.07421875 C276.43361566 404.42576763 271.75340578 409.0998603 267.0625 413.8125 C266.20076172 414.67037109 265.33902344 415.52824219 264.45117188 416.41210938 C263.63326172 417.23130859 262.81535156 418.05050781 261.97265625 418.89453125 C261.23281494 419.63550049 260.49297363 420.37646973 259.73071289 421.13989258 C257.93551332 422.8940907 257.93551332 422.8940907 257 425 C256.34 425 255.68 425 255 425 C255 425.66 255 426.32 255 427 C253.57299805 428.40576172 253.57299805 428.40576172 251.57421875 430.0546875 C246.73348673 434.17160163 242.27932051 438.609505 237.8125 443.125 C236.64170898 444.30255859 236.64170898 444.30255859 235.44726562 445.50390625 C233.29641323 447.66752876 231.14789592 449.83344319 229 452 C226.04144155 454.97679301 223.05510342 457.92126288 220.046875 460.84765625 C218.61443256 462.25245044 217.18214416 463.65740172 215.75 465.0625 C215.0178125 465.76955078 214.285625 466.47660156 213.53125 467.20507812 C212.83515625 467.89150391 212.1390625 468.57792969 211.421875 469.28515625 C210.78862305 469.90269775 210.15537109 470.52023926 209.50292969 471.15649414 C207.87965516 473.14761597 207.57371302 474.54465267 207 477 C205.34302621 477.69040574 203.6744239 478.3530635 202 479 C198.947232 481.731424 196.3427942 484.76812515 193.6875 487.875 C190.65125819 491.38751504 187.3824707 494.40411278 183.8515625 497.41015625 C180.62731114 500.178659 177.71626469 503.0688559 175.125 506.4375 C172.83756556 509.19587682 170.36457814 511.32555915 167.5859375 513.5703125 C165.75106596 515.10625904 165.75106596 515.10625904 164 518 C163.34 518 162.68 518 162 518 C161.67 518.99 161.34 519.98 161 521 C160.34 521 159.68 521 159 521 C159 521.66 159 522.32 159 523 C157.38025441 524.71230248 155.7041054 526.37163262 154 528 C153.113125 528.928125 152.22625 529.85625 151.3125 530.8125 C149 533 149 533 147 533 C146.34 534.32 145.68 535.64 145 537 C144.34 537 143.68 537 143 537 C142.7525 537.5775 142.505 538.155 142.25 538.75 C140.81700012 541.32939979 139.21575324 543.06121592 137 545 C136.34 545 135.68 545 135 545 C135 545.66 135 546.32 135 547 C134.34 547 133.68 547 133 547 C133 547.66 133 548.32 133 549 C132.319375 549.53625 131.63875 550.0725 130.9375 550.625 C128.50285861 552.59343347 126.70130777 554.39439917 124.6875 556.75 C119.376487 562.94810194 113.67455478 568.61391661 107.34765625 573.7734375 C105.86020853 574.97920282 105.86020853 574.97920282 105 577 C104.34 577 103.68 577 103 577 C102.67 577.99 102.34 578.98 102 580 C100.43359375 581.54296875 100.43359375 581.54296875 98.4375 583.1875 C93.17275157 587.65542164 87.84718417 592.22922374 84 598 C82.00334402 599.67067133 80.00348966 601.33752986 78 603 C77.67 603.66 77.34 604.32 77 605 C76.34 605 75.68 605 75 605 C75 605.66 75 606.32 75 607 C74.34 607 73.68 607 73 607 C73.33 607.99 73.66 608.98 74 610 C72.02 610.66 70.04 611.32 68 612 C68 613.32 68 614.64 68 616 C67.01 616 66.02 616 65 616 C64.34 616.66 63.68 617.32 63 618 C63 617.34 63 616.68 63 616 C61.68 616 60.36 616 59 616 C59 614.68 59 613.36 59 612 C57.27062171 609.68721883 57.27062171 609.68721883 55 608 C54.01 608 53.02 608 52 608 C52 607.34 52 606.68 52 606 C50.68 605.67 49.36 605.34 48 605 C48.99 605 49.98 605 51 605 C46.53318509 599.12779369 46.53318509 599.12779369 40 596 C40 594.68 40 593.36 40 592 C39.34 592 38.68 592 38 592 C37.34 591.01 36.68 590.02 36 589 C35.01 588.34 34.02 587.68 33 587 C31.80949989 585.59019724 30.61880803 584.1796442 29.4765625 582.73046875 C27.44571047 580.35039614 25.22814317 578.19658307 23 576 C20.74757469 573.77327167 18.4984379 571.54325356 16.25 569.3125 C15.66089844 568.73177734 15.07179688 568.15105469 14.46484375 567.55273438 C10.11290179 563.22580357 10.11290179 563.22580357 9 561 C8.01 560.34 7.02 559.68 6 559 C4.94617352 557.86304725 3.92644563 556.69381672 2.9375 555.5 C1.33892985 553.58008878 -0.23130724 551.76869276 -2 550 C-1.84783044 545.18642097 0.52929224 542.97966629 3.83984375 539.69921875 C4.32199844 539.2179805 4.80415314 538.73674225 5.30091858 538.24092102 C6.31755526 537.23030596 7.33902825 536.22453549 8.36499023 535.22338867 C9.93931409 533.68572815 11.4968905 532.13250648 13.05273438 530.57617188 C20.70480787 523 20.70480787 523 23 523 C23.37125 522.13375 23.37125 522.13375 23.75 521.25 C25.18299988 518.67060021 26.78424676 516.93878408 29 515 C29.66 515 30.32 515 31 515 C31.33 513.68 31.66 512.36 32 511 C32.9590625 510.8453125 32.9590625 510.8453125 33.9375 510.6875 C34.618125 510.460625 35.29875 510.23375 36 510 C36.33 509.01 36.66 508.02 37 507 C39.31891104 504.48784637 41.65642684 502.26220057 44.375 500.1875 C47.42334221 497.64721483 49.88262788 494.82085859 52.44921875 491.8046875 C54 490 54 490 56 488 C56 486.68 56 485.36 56 484 C56.78375 483.9175 57.5675 483.835 58.375 483.75 C61.14749104 483.27193661 61.14749104 483.27193661 62.3125 480.9375 C62.539375 480.298125 62.76625 479.65875 63 479 C63.66 479 64.32 479 65 479 C64.67 478.01 64.34 477.02 64 476 C65.10988281 475.87238281 65.10988281 475.87238281 66.2421875 475.7421875 C69.55770348 474.84990983 70.79997129 473.61414838 73.125 471.125 C73.78757812 470.42632812 74.45015625 469.72765625 75.1328125 469.0078125 C75.74898438 468.34523438 76.36515625 467.68265625 77 467 C77.57492187 466.50242187 78.14984375 466.00484375 78.7421875 465.4921875 C80.42967033 463.8155324 80.42967033 463.8155324 80 460 C81.0209375 459.9690625 81.0209375 459.9690625 82.0625 459.9375 C85.93702916 458.70094814 87.75721296 456.46267219 90.44921875 453.49609375 C92 452 92 452 94 452 C94 451.34 94 450.68 94 450 C94.66 450 95.32 450 96 450 C96.309375 449.20335937 96.309375 449.20335937 96.625 448.390625 C98.57961192 444.99226564 101.22123717 442.48944072 104 439.75 C104.5465625 439.19570313 105.093125 438.64140625 105.65625 438.0703125 C109.7466133 434 109.7466133 434 112 434 C112.37125 433.13375 112.37125 433.13375 112.75 432.25 C114.18299988 429.67060021 115.78424676 427.93878408 118 426 C118.66 426 119.32 426 120 426 C120.268125 425.401875 120.53625 424.80375 120.8125 424.1875 C121.99917406 422.00152146 123.09599113 420.58667406 125 419 C125.66 419 126.32 419 127 419 C127 418.34 127 417.68 127 417 C128.875 414.875 128.875 414.875 131 413 C131.66 413 132.32 413 133 413 C133.33 412.01 133.66 411.02 134 410 C135.7421875 408.28125 135.7421875 408.28125 137.875 406.5 C141.42310419 403.51487913 144.41648785 400.87526823 147 397 C148.01477027 396.11404772 149.05792973 395.25971115 150.125 394.4375 C151.548125 393.2309375 151.548125 393.2309375 153 392 C153 391.34 153 390.68 153 390 C153.969375 389.360625 154.93875 388.72125 155.9375 388.0625 C159.24255225 386.28938993 159.24255225 386.28938993 160 383 C161.6015625 381.7109375 161.6015625 381.7109375 163.625 380.375 C168.3111305 376.999971 171.98975571 372.93868204 175 368 C175 367.01 175 366.02 175 365 C175.60070312 364.75894531 176.20140625 364.51789063 176.8203125 364.26953125 C184.00103771 360.08720922 188.12935403 347.4072078 191 340 C191.633544 337.23807942 191.8885998 334.840705 192 332 C192.66 332 193.32 332 194 332 C194 330.68 194 329.36 194 328 C193.34 327.67 192.68 327.34 192 327 C192 326.01 192 325.02 192 324 C192.99 323.67 193.98 323.34 195 323 C195.020625 321.741875 195.04125 320.48375 195.0625 319.1875 C195.07990234 318.12595703 195.07990234 318.12595703 195.09765625 317.04296875 C195.08263217 314.79694539 195.08263217 314.79694539 194 312 C193.34 311.67 192.68 311.34 192 311 C193 308 193 308 194 307 C193.34 307 192.68 307 192 307 C192.33 305.02 192.66 303.04 193 301 C193.66 301 194.32 301 195 301 C194.43338559 298.26638688 193.84754751 295.53936791 193.25 292.8125 C193.09273437 292.04357422 192.93546875 291.27464844 192.7734375 290.48242188 C191.69877567 285.66711023 190.36180203 282.74758259 187 279 C186.25 276.1875 186.25 276.1875 186 274 C186 274.66 186 275.32 186 276 C185.34 276 184.68 276 184 276 C183.9175 274.80375 183.835 273.6075 183.75 272.375 C183.21733698 268.09847689 181.82507007 265.32361185 179 262 C178.01 262 177.02 262 176 262 C176 260.35 176 258.7 176 257 C175.38125 256.9175 174.7625 256.835 174.125 256.75 C172 256 172 256 170.75 253.9375 C170.5025 253.298125 170.255 252.65875 170 252 C169.34 252 168.68 252 168 252 C167.5875 251.2575 167.175 250.515 166.75 249.75 C164.6354611 246.42715316 162.31350146 245.07093842 159 243 C158.46375 242.443125 157.9275 241.88625 157.375 241.3125 C155.67845363 239.69306938 154.28050956 239.3931913 152 239 C152 238.34 152 237.68 152 237 C147.7362719 234.64089647 147.7362719 234.64089647 143 234 C143.33 233.34 143.66 232.68 144 232 C143.236875 231.855625 142.47375 231.71125 141.6875 231.5625 C139 231 139 231 136 230 C136 229.34 136 228.68 136 228 C134.824375 227.8453125 134.824375 227.8453125 133.625 227.6875 C129.75663885 226.9538453 126.18204442 225.80361087 122.46484375 224.5234375 C119.97509534 223.82275319 119.97509534 223.82275319 117.37890625 224.5390625 C115 225 115 225 112 223 C109.24582682 222.69933846 106.57354853 222.49074701 103.8125 222.375 C102.68811523 222.31699219 102.68811523 222.31699219 101.54101562 222.2578125 C99.69440801 222.16371784 97.8472381 222.08077681 96 222 C95.67 223.32 95.34 224.64 95 226 C94.34 224.68 93.68 223.36 93 222 C92.67 222.66 92.34 223.32 92 224 C91.67 223.34 91.34 222.68 91 222 C90.01 221.34 89.02 220.68 88 220 C88.99 219.67 89.98 219.34 91 219 C91.33 218.01 91.66 217.02 92 216 C91.34 215.67 90.68 215.34 90 215 C90.99 214.67 91.98 214.34 93 214 C93.76636091 210.53910321 94.17149371 207.23922512 94.31640625 203.69921875 C94.35830078 202.72275391 94.40019531 201.74628906 94.44335938 200.74023438 C94.48267578 199.73283203 94.52199219 198.72542969 94.5625 197.6875 C94.60568359 196.66076172 94.64886719 195.63402344 94.69335938 194.57617188 C94.79906825 192.05090431 94.90116468 189.52554438 95 187 C94.34 186.67 93.68 186.34 93 186 C93 184.35 93 182.7 93 181 C92.34 180.67 91.68 180.34 91 180 C90.38933346 177.08237098 90.02068901 174.17354431 89.66796875 171.21484375 C86.42374716 155.60084157 73.42157013 138.93455984 60.46875 130.19140625 C59.9840625 129.79824219 59.499375 129.40507812 59 129 C59 128.34 59 127.68 59 127 C57.9790625 126.6596875 57.9790625 126.6596875 56.9375 126.3125 C53.82228125 124.92059375 51.42483376 123.20593297 48.74609375 121.12109375 C46.83819672 119.89611288 45.18383524 119.54037641 43 119 C42.34 118.34 41.68 117.68 41 117 C38.79749008 116.53993654 38.79749008 116.53993654 36.375 116.375 C35.55773437 116.30023438 34.74046875 116.22546875 33.8984375 116.1484375 C32.95871094 116.07496094 32.95871094 116.07496094 32 116 C32.33 115.01 32.66 114.02 33 113 C30.03 112.67 27.06 112.34 24 112 C24 111.34 24 110.68 24 110 C5.62052342 107.84125241 -11.64446243 107.73711885 -28.84375 115.1328125 C-31 116 -31 116 -33.21875 116.4921875 C-33.8065625 116.65976563 -34.394375 116.82734375 -35 117 C-35.33 117.66 -35.66 118.32 -36 119 C-37.73659206 120.21704964 -39.51436512 121.375868 -41.3125 122.5 C-42.27800781 123.1084375 -43.24351562 123.716875 -44.23828125 124.34375 C-46.45980722 125.67603715 -48.66257047 126.88958217 -51 128 C-51 128.66 -51 129.32 -51 130 C-52.49609375 131.21875 -52.49609375 131.21875 -54.4375 132.5 C-57.22531847 134.2865363 -57.22531847 134.2865363 -59 137 C-59.66 137 -60.32 137 -61 137 C-61 137.66 -61 138.32 -61 139 C-62.64453125 140.62109375 -62.64453125 140.62109375 -64.8125 142.4375 C-67.82463265 144.97339332 -67.82463265 144.97339332 -70.63671875 147.72265625 C-72 149 -72 149 -74 149 C-74.309375 149.804375 -74.309375 149.804375 -74.625 150.625 C-76.53250426 153.91978009 -79.04819384 156.59363628 -82 159 C-82.66 159 -83.32 159 -84 159 C-84.33 159.99 -84.66 160.98 -85 162 C-85.66 162 -86.32 162 -87 162 C-87.226875 162.556875 -87.45375 163.11375 -87.6875 163.6875 C-89.37377267 166.65855185 -91.530354 168.64522125 -94 171 C-94.721875 171.721875 -95.44375 172.44375 -96.1875 173.1875 C-98.34695148 175.34695148 -100.51809489 177.49153224 -102.69921875 179.62890625 C-104.02873598 180.94001276 -105.35816131 182.25121247 -106.6875 183.5625 C-107.36361328 184.22185547 -108.03972656 184.88121094 -108.73632812 185.56054688 C-109.38408203 186.20185547 -110.03183594 186.84316406 -110.69921875 187.50390625 C-111.57839966 188.36737671 -111.57839966 188.36737671 -112.4753418 189.24829102 C-114.08784789 190.95348254 -114.08784789 190.95348254 -115.06567383 193.13256836 C-116.40242591 195.80432604 -118.44349512 196.48933802 -121 198 C-122.08624869 199.03820821 -123.14811769 200.1023747 -124.1875 201.1875 C-125.115625 202.115625 -126.04375 203.04375 -127 204 C-127.66 204 -128.32 204 -129 204 C-129.2475 204.61875 -129.495 205.2375 -129.75 205.875 C-131.23740369 208.40358627 -132.43678009 208.71839004 -135 210 C-135.268125 210.57234375 -135.53625 211.1446875 -135.8125 211.734375 C-137.40781398 214.77806615 -139.56774232 216.83188335 -142 219.25 C-143.3303125 220.58804688 -143.3303125 220.58804688 -144.6875 221.953125 C-147 224 -147 224 -149 224 C-149.39638672 224.88316895 -149.39638672 224.88316895 -149.80078125 225.78417969 C-151.04368944 228.08072584 -152.35006481 229.60833166 -154.1875 231.453125 C-154.80367187 232.071875 -155.41984375 232.690625 -156.0546875 233.328125 C-156.69664062 233.96234375 -157.33859375 234.5965625 -158 235.25 C-158.64195312 235.8996875 -159.28390625 236.549375 -159.9453125 237.21875 C-160.56148437 237.83234375 -161.17765625 238.4459375 -161.8125 239.078125 C-162.37582031 239.63918945 -162.93914062 240.20025391 -163.51953125 240.77832031 C-165 242 -165 242 -167 242 C-167.24314941 242.56912109 -167.48629883 243.13824219 -167.73681641 243.72460938 C-169.23544585 246.42411197 -171.01269022 248.23829445 -173.2109375 250.40625 C-174.46003906 251.64568359 -174.46003906 251.64568359 -175.734375 252.91015625 C-176.60578125 253.76480469 -177.4771875 254.61945313 -178.375 255.5 C-179.23867187 256.35464844 -180.10234375 257.20929688 -180.9921875 258.08984375 C-182.60368882 259.68393688 -184.2172376 261.27596477 -185.83349609 262.86523438 C-187.29951095 264.30977279 -188.73961221 265.78100904 -190.15478516 267.27539062 C-192 269 -192 269 -194 269 C-194.20625 269.53625 -194.4125 270.0725 -194.625 270.625 C-196.53250426 273.91978009 -199.04819384 276.59363628 -202 279 C-202.66 279 -203.32 279 -204 279 C-204.33 279.99 -204.66 280.98 -205 282 C-205.66 282 -206.32 282 -207 282 C-207 282.66 -207 283.32 -207 284 C-208.62626404 285.38232443 -210.2925002 286.71937515 -212 288 C-211.67 288.66 -211.34 289.32 -211 290 C-211.59554687 290.09152344 -212.19109375 290.18304688 -212.8046875 290.27734375 C-215.52562732 291.17302679 -216.39124634 292.31588204 -218.125 294.5625 C-219.6328125 296.50390625 -219.6328125 296.50390625 -221 298 C-221.66 298 -222.32 298 -223 298 C-223 298.66 -223 299.32 -223 300 C-224.46875 301.4453125 -224.46875 301.4453125 -226.5 303.125 C-230.9046751 306.86702486 -234.95242409 310.87971314 -239 315 C-241.53967281 317.54793191 -244.08768713 320.08652314 -246.6484375 322.61328125 C-258.92551286 333.59889619 -258.92551286 333.59889619 -264.5 348.3125 C-264.37499013 352.98474386 -262.82804429 355.86572053 -259.83984375 359.40234375 C-255.84331795 362.8727876 -251.45417968 362.87463968 -246.375 363.3125 C-240.31062737 362.75098402 -236.22524675 359.63410015 -231.8125 355.625 C-230.55373047 354.49964844 -230.55373047 354.49964844 -229.26953125 353.3515625 C-227.03399558 351.03522434 -225.58941377 348.78147409 -224 346 C-220.5862069 343 -220.5862069 343 -218 343 C-217.67 342.01 -217.34 341.02 -217 340 C-215.328125 338.3515625 -215.328125 338.3515625 -213.25 336.625 C-208.31461193 332.42992014 -204.0165607 328.08764355 -200 323 C-198.375 321.1875 -198.375 321.1875 -197 320 C-196.34 320 -195.68 320 -195 320 C-195 319.34 -195 318.68 -195 318 C-194.34 318 -193.68 318 -193 318 C-192.74476563 317.42894531 -192.48953125 316.85789062 -192.2265625 316.26953125 C-190.86118469 313.74314747 -189.28568001 311.83035427 -187.375 309.6875 C-186.74335938 308.96949219 -186.11171875 308.25148438 -185.4609375 307.51171875 C-183.4843775 305.49437259 -181.50122842 303.67521818 -179.36328125 301.83984375 C-174.26324098 297.43369862 -169.55294867 292.6614038 -164.8125 287.875 C-163.49862305 286.55435547 -163.49862305 286.55435547 -162.15820312 285.20703125 C-159.77032349 282.80647902 -157.38493774 280.40347423 -155 278 C-152.38518537 275.37404269 -149.75928697 272.76215533 -147.10546875 270.17578125 C-146.13278804 269.2213791 -145.16013192 268.26695188 -144.1875 267.3125 C-143.68541016 266.82716797 -143.18332031 266.34183594 -142.66601562 265.84179688 C-141.40582727 264.59875394 -140.19808956 263.30300108 -139 262 C-139 261.34 -139 260.68 -139 260 C-138.01 259.34 -137.02 258.68 -136 258 C-135.7497843 254.91634129 -135.7497843 254.91634129 -136 252 C-134.02 252.33 -132.04 252.66 -130 253 C-129.34 252.01 -128.68 251.02 -128 250 C-127.34 250 -126.68 250 -126 250 C-126 249.34 -126 248.68 -126 248 C-123.3448818 245.10350742 -120.51524651 242.57630508 -117.5 240.0625 C-114.22681225 237.29941943 -111.69117688 234.32856088 -109 231 C-107.3540349 229.31288577 -105.68762851 227.6454378 -104 226 C-102.88625 224.8553125 -102.88625 224.8553125 -101.75 223.6875 C-99.43385795 221.42399754 -97.06906759 219.30845357 -94.625 217.1875 C-91.06447522 214.04931094 -87.94732158 210.77701068 -84.90234375 207.14453125 C-81.82897469 203.67989138 -78.42022598 200.55607233 -75.0390625 197.39453125 C-72.85484866 194.82954449 -72.3174074 193.30926607 -72 190 C-71.071875 189.731875 -70.14375 189.46375 -69.1875 189.1875 C-66.1688359 188.06289965 -65.0844857 187.29293427 -63 185 C-62.34 185 -61.68 185 -61 185 C-60.731875 184.401875 -60.46375 183.80375 -60.1875 183.1875 C-59.00082594 181.00152146 -57.90400887 179.58667406 -56 178 C-55.34 178 -54.68 178 -54 178 C-53.67 177.01 -53.34 176.02 -53 175 C-51.5625 173.3125 -51.5625 173.3125 -50 172 C-49.34 172 -48.68 172 -48 172 C-47.76667969 171.43023437 -47.53335937 170.86046875 -47.29296875 170.2734375 C-45.14569391 166.49786663 -41.80722144 164.05516205 -38.55859375 161.23046875 C-37.12205942 159.97816173 -35.70161533 158.70443693 -34.34765625 157.36328125 C-27.74531779 150.9710968 -15.47296937 144.09276219 -6.3125 143.9375 C-5.219375 143.958125 -4.12625 143.97875 -3 144 C-2.67 143.34 -2.34 142.68 -2 142 C-1.05125 142.020625 -0.1025 142.04125 0.875 142.0625 C3.90666283 142.22551826 3.90666283 142.22551826 6 141 C6 141.66 6 142.32 6 143 C7.65 142.67 9.3 142.34 11 142 C11 142.66 11 143.32 11 144 C12.134375 144.0825 13.26875 144.165 14.4375 144.25 C28.13006697 146.0276315 40.23562157 155.92865286 49 166 C51.89707818 169.85665893 54.35918205 173.87856858 56.75 178.0625 C57.1625 178.701875 57.575 179.34125 58 180 C58.66 180 59.32 180 60 180 C59.96519531 181.73056641 59.96519531 181.73056641 59.9296875 183.49609375 C59.92811697 187.06984242 60.27780802 190.45862839 60.8137207 193.98632812 C62.61312827 205.98802377 61.81459554 217.7025938 57 229 C56.68546875 229.76183594 56.3709375 230.52367187 56.046875 231.30859375 C50.78805558 242.88169987 42.1230192 252.33397805 33 261 C30.36900683 263.6096377 27.7620209 266.24068616 25.17578125 268.89453125 C24.2213791 269.86721196 23.26695188 270.83986808 22.3125 271.8125 C21.82716797 272.31458984 21.34183594 272.81667969 20.84179688 273.33398438 C19.59875394 274.59417273 18.30300108 275.80191044 17 277 C16.34 277 15.68 277 15 277 C14.74476563 277.58193115 14.48953125 278.1638623 14.2265625 278.76342773 C12.87583737 281.22640403 11.38452615 282.82791981 9.375 284.78515625 C8.66859375 285.48060547 7.9621875 286.17605469 7.234375 286.89257812 C6.49703125 287.60865234 5.7596875 288.32472656 5 289.0625 C3.53943012 290.48859839 2.08100233 291.91689484 0.625 293.34765625 C-0.34566406 294.29137085 -0.34566406 294.29137085 -1.3359375 295.25415039 C-3.1916303 297.10051934 -3.1916303 297.10051934 -5 300 C-6.07494116 300.99100369 -7.18216595 301.94767495 -8.3125 302.875 C-12.06462795 306.02647545 -15.69995713 309.17993999 -18.5625 313.1875 C-20 315 -20 315 -22.0625 316 C-25.36923285 317.70670082 -25.87059771 320.61179314 -27 324 C-27.59941406 324.13921875 -28.19882812 324.2784375 -28.81640625 324.421875 C-31.86166985 325.22813442 -32.9357857 326.85587042 -34.9375 329.25 C-37.84728568 332.65736985 -40.78792397 335.87969757 -44 339 C-44.556875 339.598125 -45.11375 340.19625 -45.6875 340.8125 C-47 342 -47 342 -49 342 C-49.2475 342.61875 -49.495 343.2375 -49.75 343.875 C-51.22770762 346.38710296 -52.43955177 346.76107344 -55 348 C-55.33 348.99 -55.66 349.98 -56 351 C-57.7421875 352.68359375 -57.7421875 352.68359375 -59.875 354.4375 C-63.30237294 357.26413414 -65.99870094 359.99740187 -68 364 C-68.66 363.67 -69.32 363.34 -70 363 C-70 363.66 -70 364.32 -70 365 C-70.66 365 -71.32 365 -72 365 C-72 365.66 -72 366.32 -72 367 C-73.390625 368.33203125 -73.390625 368.33203125 -75.25 369.8125 C-78.26731409 372.30875181 -80.60605539 374.88787201 -83 378 C-87.50549451 382.83516484 -87.50549451 382.83516484 -91 384 C-91 384.99 -91 385.98 -91 387 C-91.61875 387.0825 -92.2375 387.165 -92.875 387.25 C-95.18437567 387.81258459 -95.18437567 387.81258459 -96.25 390.0625 C-96.4975 390.701875 -96.745 391.34125 -97 392 C-97.66 392 -98.32 392 -99 392 C-98.67 393.32 -98.34 394.64 -98 396 C-99.65 396.66 -101.3 397.32 -103 398 C-103 398.66 -103 399.32 -103 400 C-103.66 400.33 -104.32 400.66 -105 401 C-105.38160272 405.77003402 -105.4609004 409.09465992 -103.25 413.4375 C-101.16147336 415.81609978 -99.91806388 416.93004324 -97 418 C-96.34 418.33 -95.68 418.66 -95 419 C-89.74107758 419.4124645 -85.40252777 418.97869439 -81 416 C-78.27166285 413.44834733 -75.68672967 410.81167541 -73.13671875 408.08203125 C-71 406 -71 406 -69 406 C-68.7525 405.38125 -68.505 404.7625 -68.25 404.125 C-66.79371361 401.64931313 -65.62187494 401.04874998 -63 400 C-63 399.34 -63 398.68 -63 398 C-60.646679 395.44496577 -58.24619234 393.19079907 -55.5 391.0625 C-53.46123896 389.38052214 -52.0140789 387.90176523 -50.375 385.875 C-48 383 -48 383 -45 381 C-44.690625 380.34 -44.38125 379.68 -44.0625 379 C-42.72593825 376.48411905 -41.50898232 376.25449116 -39 375 C-37.66104368 373.33784732 -36.32869858 371.67036393 -35 370 C-33.2352095 368.4216031 -31.42754692 366.91745057 -29.5859375 365.4296875 C-27.75106596 363.89374096 -27.75106596 363.89374096 -26 361 C-25.00762957 360.09284697 -23.98303671 359.22032756 -22.9375 358.375 C-18.99163062 355.09230194 -15.46767313 351.46025803 -11.91796875 347.7578125 C-10 346 -10 346 -8 346 C-7.71125 345.4225 -7.4225 344.845 -7.125 344.25 C-6.75375 343.5075 -6.3825 342.765 -6 342 C-5.731875 341.29875 -5.46375 340.5975 -5.1875 339.875 C-3.57419501 337.32767633 -1.81228942 336.8880914 1 336 C0.34 334.68 -0.32 333.36 -1 332 C1.31 331.67 3.62 331.34 6 331 C6.33 329.35 6.66 327.7 7 326 C8.051875 325.9690625 8.051875 325.9690625 9.125 325.9375 C13.41202189 324.53955808 15.28077952 321.45285181 18 318 C19.66057166 316.33942834 21.33460122 314.85867322 23.1328125 313.35546875 C27.23268566 309.85601766 31.06305607 306.12067719 34.875 302.3125 C35.55046875 301.64927734 36.2259375 300.98605469 36.921875 300.30273438 C37.56382812 299.66271484 38.20578125 299.02269531 38.8671875 298.36328125 C39.73512939 297.50150269 39.73512939 297.50150269 40.62060547 296.62231445 C42.22916926 294.93517334 42.22916926 294.93517334 43 292 C44.33092664 291.32854151 45.66483014 290.6629809 47 290 C48.79900236 288.3863494 50.5461479 286.71381615 52.25 285 C53.14203125 284.113125 54.0340625 283.22625 54.953125 282.3125 C57.22093073 280.26510897 57.22093073 280.26510897 57 278 C57.66 277.62875 58.32 277.2575 59 276.875 C62.65457081 274.59089324 65.28675097 271.76836178 68.23046875 268.64453125 C70 267 70 267 72 267 C72.33 266.01 72.66 265.02 73 264 C84.7704248 255.46789636 97.5066894 251.96711801 111.875 253.625 C125.58108924 255.88212412 137.77970577 262.49910935 147 273 C147.54011719 273.60972656 148.08023438 274.21945312 148.63671875 274.84765625 C156.87234956 284.69111086 160.79427763 295.29833847 162 308 C162.66 308 163.32 308 164 308 C163.5462707 310.26864648 163.09151087 312.5370378 162.6328125 314.8046875 C162.1744089 317.11934271 161.73400179 319.43758582 161.3046875 321.7578125 C161.05976562 323.05460937 160.81484375 324.35140625 160.5625 325.6875 C160.33691406 326.90824219 160.11132812 328.12898438 159.87890625 329.38671875 C158.95805302 333.17244869 157.62714514 336.46545594 156 340 C155.50886719 341.11761719 155.50886719 341.11761719 155.0078125 342.2578125 C152.92261309 346.66810151 150.66850388 349.68939894 147 353 C144.1934112 355.73462499 141.52979656 358.51082861 139 361.5 C136.45626285 364.49610277 133.89934702 367.34226524 131 370 C130.34 370 129.68 370 129 370 C128.67 370.99 128.34 371.98 128 373 C126.0625 375.1875 126.0625 375.1875 124 377 C123.34 377 122.68 377 122 377 C121.731875 377.639375 121.46375 378.27875 121.1875 378.9375 C120 381 120 381 117 382 C116.32643391 383.32986125 115.66127254 384.66398321 115 386 C113.44018764 387.7232263 111.8213368 389.39366767 110.16796875 391.02734375 C109.69434402 391.49813858 109.2207193 391.96893341 108.73274231 392.45399475 C107.22231245 393.9532789 105.70508851 395.4454658 104.1875 396.9375 C103.17857482 397.9363829 102.17010655 398.93572751 101.16210938 399.93554688 C99.29601596 401.78537161 97.42685112 403.63187321 95.55541992 405.47631836 C90.79941147 410.17325725 86.09352164 414.91950665 81.38618469 419.66511536 C77.80862564 423.26930483 74.22589234 426.86833117 70.64282227 430.46704102 C68.74822177 432.37064977 66.85614984 434.27672285 64.96606445 436.18481445 C62.23853284 438.93646887 59.50471349 441.68173427 56.76953125 444.42578125 C55.49611626 445.7146801 55.49611626 445.7146801 54.19697571 447.02961731 C53.41243515 447.81430893 52.62789459 448.59900055 51.81958008 449.4074707 C51.12850662 450.10298538 50.43743317 450.79850006 49.72541809 451.51509094 C48 453 48 453 46 453 C45.77957031 453.54785156 45.55914062 454.09570312 45.33203125 454.66015625 C43.58129871 457.73548994 41.21052934 460.00158721 38.6875 462.4375 C38.21376953 462.90220703 37.74003906 463.36691406 37.25195312 463.84570312 C35.83733614 465.23322758 34.41868488 466.61663507 33 468 C32.11957031 468.91910156 31.23914063 469.83820313 30.33203125 470.78515625 C28 473 28 473 25 474 C24.67 474.99 24.34 475.98 24 477 C22.50390625 478.47265625 22.50390625 478.47265625 20.5625 480.0625 C13.0610288 486.43269008 6.30939286 493.4595061 0 501 C-1.53515625 502.69140625 -1.53515625 502.69140625 -3 504 C-3.66 504 -4.32 504 -5 504 C-5 504.66 -5 505.32 -5 506 C-6.46875 507.41015625 -6.46875 507.41015625 -8.5 509.0625 C-12.54845547 512.47703362 -15.93847871 516.22340388 -19.3359375 520.27734375 C-20.15964844 521.13005859 -20.15964844 521.13005859 -21 522 C-21.66 522 -22.32 522 -23 522 C-23.38865234 522.84884766 -23.38865234 522.84884766 -23.78515625 523.71484375 C-25.11757129 526.221155 -26.7120395 528.31012468 -28.4375 530.5625 C-32.77559785 536.71191219 -35.49241815 543.41463053 -35 551.0625 C-33.36085663 559.57209536 -28.61079572 566.55483577 -22 572 C-21.34 572.33 -20.68 572.66 -20 573 C-20 573.66 -20 574.32 -20 575 C-19.34 575.33 -18.68 575.66 -18 576 C-16.63235966 577.60697739 -15.26661896 579.21560762 -13.91015625 580.83203125 C-9.32709526 586.03366489 -4.27019399 590.83637273 0.74609375 595.6171875 C3 598 3 598 4 601 C4.66 601 5.32 601 6 601 C7.33105469 602.34570312 7.33105469 602.34570312 8.921875 604.28125 C13.29958503 609.42562635 17.99923824 614.22053243 22.76269531 619.00292969 C24.26830012 620.51842028 25.76292347 622.04425966 27.2578125 623.5703125 C28.21809434 624.53711001 29.17900837 625.50328011 30.140625 626.46875 C31.00204102 627.33951172 31.86345703 628.21027344 32.75097656 629.10742188 C34.89267081 631.32193485 34.89267081 631.32193485 38 631 C37.67 632.32 37.34 633.64 37 635 C37.66 635 38.32 635 39 635 C39 635.66 39 636.32 39 637 C39.99 637.33 40.98 637.66 42 638 C40.90272572 641.29182285 40.21676631 641.88038362 37.61328125 644 C34.15806914 646.92973674 30.9553966 650.0058901 27.79296875 653.25 C26.87580078 654.1884375 25.95863281 655.126875 25.01367188 656.09375 C23.60075324 657.54354862 22.19122377 658.99611817 20.78979492 660.45703125 C9.33774139 672.36861173 -2.37782202 680.881612 -19.26831055 681.29174805 C-30.92937071 681.39722747 -40.36995028 678.72446654 -51 674 C-51.66 674 -52.32 674 -53 674 C-53 674.66 -53 675.32 -53 676 C-53.66 675.67 -54.32 675.34 -55 675 C-55.625 672.9375 -55.625 672.9375 -56 671 C-55.34 671 -54.68 671 -54 671 C-55.0828125 670.4121875 -55.0828125 670.4121875 -56.1875 669.8125 C-59.25583641 667.83512765 -61.48552044 665.64020354 -64 663 C-64.825 662.175 -65.65 661.35 -66.5 660.5 C-68.17711568 658.82288432 -69.84371567 657.13519144 -71.5 655.4375 C-73.9426108 652.96013407 -73.9426108 652.96013407 -76.6875 650.9375 C-79.01936988 648.98377118 -79.67796969 647.64406062 -81 645 C-82.86747263 643.60761953 -82.86747263 643.60761953 -85 643 C-85.99 643.33 -86.98 643.66 -88 644 C-87.896875 643.2575 -87.79375 642.515 -87.6875 641.75 C-87.72146777 638.77779982 -87.72146777 638.77779982 -90.375 636.8125 C-91.674375 635.9153125 -91.674375 635.9153125 -93 635 C-94.67662354 633.32337646 -96.17031211 631.62896879 -97.6875 629.8125 C-101.71791084 625.0905971 -105.81663044 620.45557971 -111 617 C-111.86379987 615.98345503 -112.69714128 614.94033176 -113.5 613.875 C-114.325 612.92625 -115.15 611.9775 -116 611 C-116.99 611 -117.98 611 -119 611 C-119 610.01 -119 609.02 -119 608 C-119.99 607.34 -120.98 606.68 -122 606 C-123.1875 603.875 -123.1875 603.875 -124 602 C-125.32 602.66 -126.64 603.32 -128 604 C-128 601.69 -128 599.38 -128 597 C-128.53625 596.773125 -129.0725 596.54625 -129.625 596.3125 C-133.25673618 594.3054879 -137.11417648 591.77164705 -139 588 C-139.66 587.67 -140.32 587.34 -141 587 C-141.94492706 585.9412263 -142.85764719 584.85344703 -143.75 583.75 C-145.74999755 581.36165341 -147.58066825 579.51610979 -150 577.5 C-152.85223151 575.12314041 -155.07984693 572.70766638 -157.41015625 569.84375 C-159.48733096 567.43483977 -161.73774378 565.23575834 -164 563 C-164.92039063 562.06800781 -165.84078125 561.13601563 -166.7890625 560.17578125 C-167.73436241 559.2213417 -168.67967498 558.26691468 -169.625 557.3125 C-170.10195312 556.82716797 -170.57890625 556.34183594 -171.0703125 555.84179688 C-173.29253046 553.60414685 -175.36369136 551.7575391 -178 550 C-178.33 549.34 -178.66 548.68 -179 548 C-181.02463255 547.34786708 -181.02463255 547.34786708 -183 547 C-183 546.01 -183 545.02 -183 544 C-184.79713739 541.78495995 -184.79713739 541.78495995 -187.19921875 539.5078125 C-188.51889648 538.20263672 -188.51889648 538.20263672 -189.86523438 536.87109375 C-190.79658203 535.96488281 -191.72792969 535.05867187 -192.6875 534.125 C-193.59951172 533.22652344 -194.51152344 532.32804688 -195.45117188 531.40234375 C-197.16288115 529.71677694 -198.87765154 528.0343091 -200.59643555 526.35595703 C-204.02220414 522.99804267 -207.41319083 519.61716137 -210.71875 516.140625 C-211.64578202 515.17703397 -212.57286564 514.21349257 -213.5 513.25 C-213.96019531 512.75628906 -214.42039063 512.26257813 -214.89453125 511.75390625 C-217.78794606 508.7789868 -219.82333237 507.33292278 -224 507 C-224.10828125 506.41089844 -224.2165625 505.82179688 -224.328125 505.21484375 C-225.08175479 502.73049439 -226.02687026 501.48547726 -227.75 499.5625 C-228.23984375 499.00691406 -228.7296875 498.45132812 -229.234375 497.87890625 C-231.43862346 495.53323477 -233.72094719 493.27312842 -236 491 C-243.66666667 483.33333333 -251.33333333 475.66666667 -259 468 C-260.31653564 466.684552 -260.31653564 466.684552 -261.65966797 465.3425293 C-263.37489765 463.62568924 -265.0838085 461.90253005 -266.7890625 460.17578125 C-267.73436241 459.2213417 -268.67967498 458.26691468 -269.625 457.3125 C-270.10195313 456.82716797 -270.57890625 456.34183594 -271.0703125 455.84179688 C-273.29253046 453.60414685 -275.36369136 451.7575391 -278 450 C-278.33 449.34 -278.66 448.68 -279 448 C-281.01669827 446.86649466 -281.01669827 446.86649466 -283 446 C-283 445.34 -283 444.68 -283 444 C-284.62015407 442.28808402 -286.29681248 440.62932742 -288 439 C-289.7699565 437.21917256 -291.53946563 435.43790039 -293.30859375 433.65625 C-294.83009223 432.12737526 -296.3520726 430.59898206 -297.87426758 429.07080078 C-298.91553205 428.02449505 -299.95589895 426.97729528 -300.99536133 425.92919922 C-302.51402899 424.39829777 -304.03599674 422.87074229 -305.55859375 421.34375 C-306.45892334 420.43818359 -307.35925293 419.53261719 -308.28686523 418.59960938 C-310.2482498 416.7202948 -312.16520912 415.03873137 -314.27758789 413.35351562 C-317 411 -317 411 -318 408 C-318.66 408 -319.32 408 -320 408 C-320 407.34 -320 406.68 -320 406 C-320.99 405.67 -321.98 405.34 -323 405 C-323 404.34 -323 403.68 -323 403 C-323.66 403 -324.32 403 -325 403 C-326.71535924 401.38349197 -328.37387879 399.70624892 -330 398 C-331.70580311 396.24753359 -333.414117 394.49750741 -335.125 392.75 C-335.97320312 391.87859375 -336.82140625 391.0071875 -337.6953125 390.109375 C-339.8947977 387.80882371 -339.8947977 387.80882371 -343 387 C-343.70288076 385.68539707 -344.36649777 384.34940622 -345 383 C-346.37349199 381.41706095 -346.37349199 381.41706095 -347.9765625 379.96875 C-348.56139404 379.41147217 -349.14622559 378.85419434 -349.7487793 378.2800293 C-350.67750854 377.39891479 -350.67750854 377.39891479 -351.625 376.5 C-362.62795059 365.75872295 -370.18027708 355.35213717 -370.375 339.5625 C-370.21052221 323.38768391 -363.2161965 312.65426526 -351.94140625 301.58984375 C-350.83615959 300.5180001 -349.73068816 299.4463882 -348.625 298.375 C-347.4951604 297.26527239 -346.36624679 296.15460117 -345.23828125 295.04296875 C-342.50272532 292.35099794 -339.75501243 289.67204935 -337 287 C-337.33 286.34 -337.66 285.68 -338 285 C-337.34 285 -336.68 285 -336 285 C-335.67 284.34 -335.34 283.68 -335 283 C-334.34 283 -333.68 283 -333 283 C-331.27175494 281.37379155 -329.63908217 279.71335147 -328 278 C-326.70844964 276.7030144 -325.41395571 275.40895613 -324.1171875 274.1171875 C-323.42496094 273.42496094 -322.73273438 272.73273438 -322.01953125 272.01953125 C-312 262 -312 262 -310.33642578 260.39892578 C-308.8867686 259.01893259 -308.8867686 259.01893259 -308 257 C-307.01 257 -306.02 257 -305 257 C-304.76925781 256.44183594 -304.53851563 255.88367188 -304.30078125 255.30859375 C-302.65466491 252.38710799 -300.58926868 250.39945334 -298.1875 248.0625 C-297.33542969 247.22847656 -296.48335938 246.39445313 -295.60546875 245.53515625 C-294.31576172 244.28025391 -294.31576172 244.28025391 -293 243 C-291.84093138 241.84223039 -290.68207504 240.68424721 -289.52448463 239.52499962 C-286.29314605 236.29256946 -283.05181949 233.07013545 -279.81323242 229.8449707 C-271.57907482 221.6434599 -263.34994468 213.43691995 -255.12377453 205.22739887 C-250.14746719 200.26143598 -245.16927481 195.29738944 -240.18676758 190.33764648 C-235.36545293 185.53834755 -230.54933445 180.73388512 -225.73641396 175.92616844 C-223.89884977 174.09231014 -222.05952133 172.26021795 -220.21843529 170.4298954 C-217.65425972 167.88013406 -215.09630605 165.32428836 -212.53979492 162.7668457 C-211.77153885 162.00578018 -211.00328278 161.24471466 -210.21174622 160.46058655 C-209.52059723 159.76668823 -208.82944824 159.07278992 -208.11735535 158.35786438 C-207.5117789 157.75413152 -206.90620245 157.15039865 -206.2822752 156.52837086 C-204.78575513 155.07714213 -204.78575513 155.07714213 -205 153 C-204.29262695 152.57662354 -203.58525391 152.15324707 -202.85644531 151.71704102 C-199.53940261 149.72312979 -196.992792 147.26231416 -194.296875 144.52734375 C-193.77361633 144.00362686 -193.25035767 143.47990997 -192.71124268 142.94032288 C-191.61305694 141.83913074 -190.5172877 140.73552392 -189.42382812 139.62963867 C-187.74664365 137.93410693 -186.06150312 136.24680487 -184.375 134.56054688 C-183.30681704 133.48745141 -182.23909233 132.41389956 -181.171875 131.33984375 C-180.66775085 130.83460678 -180.16362671 130.32936981 -179.64422607 129.80882263 C-176.99279589 127.15137382 -176.99279589 127.15137382 -175 124 C-174.34 124 -173.68 124 -173 124 C-173 123.34 -173 122.68 -173 122 C-171.390625 120.4140625 -171.390625 120.4140625 -169.25 118.625 C-166.3756268 116.18382134 -163.61456008 113.72350008 -161 111 C-161.33 110.34 -161.66 109.68 -162 109 C-161.31292969 108.80277344 -160.62585938 108.60554688 -159.91796875 108.40234375 C-155.93652044 106.4889034 -153.35507493 103.71533812 -150.3125 100.5625 C-149.44141602 99.68368164 -149.44141602 99.68368164 -148.55273438 98.78710938 C-146.07391647 96.26244051 -143.97353578 93.96030367 -142 91 C-141.34 91 -140.68 91 -140 91 C-140 90.34 -140 89.68 -140 89 C-139.34 88.67 -138.68 88.34 -138 88 C-138 86.68 -138 85.36 -138 84 C-137.236875 83.938125 -136.47375 83.87625 -135.6875 83.8125 C-132.79339181 83.24174683 -132.79339181 83.24174683 -131.3125 80.5625 C-130.879375 79.716875 -130.44625 78.87125 -130 78 C-129.34 77.34 -128.68 76.68 -128 76 C-127.21625 75.195625 -126.4325 74.39125 -125.625 73.5625 C-123 71 -123 71 -120.875 69.5 C-118.81573873 68.03622903 -118.81573873 68.03622903 -117.5 65.4375 C-115.28464092 61.83754149 -112.89752083 61.29917361 -109 60 C-108.28293018 58.01751285 -107.61709587 56.01584651 -107 54 C-106.34 53.34 -105.68 52.68 -105 52 C-104.67 52.66 -104.34 53.32 -104 54 C-103.67 53.34 -103.34 52.68 -103 52 C-102.34 52 -101.68 52 -101 52 C-100.67 50.35 -100.34 48.7 -100 47 C-99.01 47 -98.02 47 -97 47 C-93.13458095 43.53103419 -89.13218818 39.64177242 -87.0625 34.8125 C-85.57001774 32.26650085 -83.70257809 32.01346678 -81 31 C-80.34 30.01 -79.68 29.02 -79 28 C-78.34 28 -77.68 28 -77 28 C-76.67 27.01 -76.34 26.02 -76 25 C-74.328125 23.38671875 -74.328125 23.38671875 -72.25 21.6875 C-69.70833396 19.53789947 -67.64526441 17.57431729 -65.5 15 C-62.33496361 11.20195633 -58.79207018 8.15434409 -55 5 C-54.29746094 4.38640625 -53.59492188 3.7728125 -52.87109375 3.140625 C-37.14838821 -10.02257033 -17.07380877 -10.78505714 0 0 Z M58 183 C59 185 59 185 59 185 Z M-11.41870117 195.37475586 C-13.38991291 197.40074884 -15.40812976 199.37573116 -17.42578125 201.35546875 C-19.05480558 202.96602641 -20.68370884 204.57670653 -22.3125 206.1875 C-23.14845703 207.00669922 -23.98441406 207.82589844 -24.84570312 208.66992188 C-25.63525391 209.45302734 -26.42480469 210.23613281 -27.23828125 211.04296875 C-27.96055908 211.75477295 -28.68283691 212.46657715 -29.42700195 213.19995117 C-31.21934001 214.85258318 -31.21934001 214.85258318 -31 217 C-31.59941406 217.26167969 -32.19882812 217.52335937 -32.81640625 217.79296875 C-35.13061764 219.07220188 -36.29659445 220.26250442 -37.9375 222.3125 C-41.28850205 226.36897617 -44.76448991 230.00622014 -48.875 233.3125 C-52.07652021 235.9147613 -54.61472658 238.95941545 -57.28125 242.09375 C-59.61799033 244.68540746 -62.32155791 246.76796492 -65 249 C-66.73766749 250.90175716 -68.40297989 252.85612829 -70.07421875 254.81640625 C-73.52570883 258.72996194 -77.28054822 262.34347127 -81 266 C-81.95952012 266.95714507 -82.91810885 267.91522665 -83.875 268.875 C-85.16683467 270.16683467 -86.47538086 271.44259598 -87.8125 272.6875 C-89.22363777 273.95218271 -89.22363777 273.95218271 -89 276 C-89.66 276 -90.32 276 -91 276 C-91 276.66 -91 277.32 -91 278 C-91.5775 278.2475 -92.155 278.495 -92.75 278.75 C-95.32939979 280.18299988 -97.06121592 281.78424676 -99 284 C-99 284.66 -99 285.32 -99 286 C-99.60328125 286.26425781 -100.2065625 286.52851563 -100.828125 286.80078125 C-103.1042287 288.05755074 -104.16818433 289.15440162 -105.75 291.1875 C-107.93445126 293.84826019 -110.17552821 296.10016979 -112.8125 298.3125 C-116.86040451 301.74358096 -120.26093596 305.5894392 -123.7578125 309.5703125 C-126.41042846 312.44475001 -129.25066984 314.95425226 -132.2734375 317.4296875 C-134.15811767 319.14380838 -135.59745956 320.87467798 -137 323 C-137 323.66 -137 324.32 -137 325 C-137.86818359 325.37705078 -137.86818359 325.37705078 -138.75390625 325.76171875 C-141.28283677 327.15592914 -142.9343046 328.73790358 -144.9375 330.8125 C-145.63617188 331.52921875 -146.33484375 332.2459375 -147.0546875 332.984375 C-148.01761719 333.98210937 -148.01761719 333.98210937 -149 335 C-154 340 -154 340 -155.61328125 341.5078125 C-169.59007389 354.83380105 -180.21046022 375.88206795 -181.10864258 395.35546875 C-181.70698921 422.14563906 -175.29748709 445.60399597 -156.78759766 465.76538086 C-140.38342199 482.90791964 -118.96024841 491.5499933 -95.55859375 493.25 C-71.14877844 493.73880732 -48.87543592 487.13210096 -31 470 C-29.30286709 468.35788636 -27.6459661 466.69437687 -26 465 C-25.401875 464.443125 -24.80375 463.88625 -24.1875 463.3125 C-22.77636223 462.04781729 -22.77636223 462.04781729 -23 460 C-22.41734375 459.7421875 -21.8346875 459.484375 -21.234375 459.21875 C-18.8197097 457.90165983 -17.18259823 456.44911616 -15.25 454.5 C-14.63640625 453.8915625 -14.0228125 453.283125 -13.390625 452.65625 C-11.78565912 451.10515723 -11.78565912 451.10515723 -12 449 C-11.0409375 448.5978125 -11.0409375 448.5978125 -10.0625 448.1875 C-7.66868314 447.11332248 -7.66868314 447.11332248 -7 444 C-6.401875 443.71125 -5.80375 443.4225 -5.1875 443.125 C-2.30847178 441.64435692 -0.96683709 439.53785431 1 437 C1.99 436.34 2.98 435.68 4 435 C4 434.34 4 433.68 4 433 C4.9590625 432.5978125 4.9590625 432.5978125 5.9375 432.1875 C8.33131686 431.11332248 8.33131686 431.11332248 9 428 C9.598125 427.71125 10.19625 427.4225 10.8125 427.125 C13.15909592 426.10660129 13.15909592 426.10660129 14.75 423.8125 C17.32481542 420.59398072 20.21767922 418.16209246 23.390625 415.55078125 C23.92171875 415.03902344 24.4528125 414.52726563 25 414 C25 413.34 25 412.68 25 412 C25.54140625 411.7834375 26.0828125 411.566875 26.640625 411.34375 C29.81645344 409.53500003 32.20728081 407.08276201 34.75 404.5 C35.25660156 404.00113281 35.76320313 403.50226563 36.28515625 402.98828125 C39.12805599 400.46938363 39.12805599 400.46938363 40 397 C40.53109375 396.79246094 41.0621875 396.58492187 41.609375 396.37109375 C44.99721276 394.42806915 47.50917986 391.8197126 50.25 389.0625 C50.80429687 388.52431641 51.35859375 387.98613281 51.9296875 387.43164062 C53.34883239 386.01424346 54.68141504 384.51139692 56 383 C56 382.01 56 381.02 56 380 C56.5775 379.9175 57.155 379.835 57.75 379.75 C60.67794601 378.774018 62.05244537 377.36488777 64 375 C64 374.01 64 373.02 64 372 C64.99 372 65.98 372 67 372 C67 371.34 67 370.68 67 370 C67.556875 369.773125 68.11375 369.54625 68.6875 369.3125 C71.65855185 367.62622733 73.64522125 365.469646 76 363 C76.928125 362.113125 77.85625 361.22625 78.8125 360.3125 C81.22906662 358.28837851 81.22906662 358.28837851 81 356 C81.5775 355.773125 82.155 355.54625 82.75 355.3125 C85.56913681 353.66800353 87.01254869 351.5644533 89 349 C90.485 348.01 90.485 348.01 92 347 C92 346.34 92 345.68 92 345 C92.58910156 344.74992188 93.17820312 344.49984375 93.78515625 344.2421875 C96.29309705 342.83561753 97.62424578 341.34445666 99.4375 339.125 C102.0762797 335.99567792 104.77362574 333.52877983 108 331 C109.37073786 329.36395804 110.70055256 327.69321939 112 326 C113.56556337 324.1735094 115.14550504 322.36044868 116.73046875 320.55078125 C118.89093324 317.91169078 119.1162502 316.20751236 119.0625 312.875 C119.0315625 310.956875 119.0315625 310.956875 119 309 C118.34 308.67 117.68 308.34 117 308 C117.33 307.34 117.66 306.68 118 306 C117.01 305.01 116.02 304.02 115 303 C113.515 303.495 113.515 303.495 112 304 C112 302.68 112 301.36 112 300 C106.62374766 299.15111805 102.34629602 298.9975695 97 300 C96.67 300.99 96.34 301.98 96 303 C94.68596724 303.70394612 93.3479743 304.36345658 92 305 C89.26780807 306.91859167 89.26780807 306.91859167 87 309 C87 309.66 87 310.32 87 311 C86.34 311 85.68 311 85 311 C82.60179695 313.63684747 82.60179695 313.63684747 82 317 C81.46463623 317.21011719 80.92927246 317.42023438 80.37768555 317.63671875 C77.08025327 319.52735042 74.60605079 322.12855054 71.95703125 324.8125 C71.38796555 325.38202393 70.81889984 325.95154785 70.23258972 326.53833008 C69.03427502 327.7396588 67.83838461 328.94340998 66.64477539 330.14941406 C64.81384169 331.9986449 62.9749911 333.83970762 61.13476562 335.6796875 C59.9708804 336.84848675 58.80745293 338.01774205 57.64453125 339.1875 C56.81801811 340.01568237 56.81801811 340.01568237 55.97480774 340.8605957 C53.1397621 343.66851934 53.1397621 343.66851934 51 347 C49.94390806 347.96808428 48.85570611 348.90149431 47.75 349.8125 C44.66232426 352.41633377 41.7310671 355.02065407 39 358 C39 358.66 39 359.32 39 360 C38.4225 360.2475 37.845 360.495 37.25 360.75 C34.67060021 362.18299988 32.93878408 363.78424676 31 366 C31 366.66 31 367.32 31 368 C30.01 368.33 29.02 368.66 28 369 C25.38051134 371.41798953 23.08630254 373.89085267 20.875 376.6875 C19 379 19 379 16 381 C16 381.66 16 382.32 16 383 C15.01 383.33 14.02 383.66 13 384 C10.59004634 386.63541018 10.59004634 386.63541018 10 390 C9.40832031 390.27585937 8.81664062 390.55171875 8.20703125 390.8359375 C0.94295981 394.66725305 -4.76658093 401.58857649 -9.5546875 408.12109375 C-11.40401244 410.52521618 -13.6177909 412.12826428 -16 414 C-18.4385868 416.37762213 -20.81350121 418.80817268 -23.1875 421.25 C-26.66397175 424.64921682 -30.31806604 427.8237216 -33.98828125 431.01171875 C-34.65214844 431.66785156 -35.31601562 432.32398438 -36 433 C-36 433.66 -36 434.32 -36 435 C-36.66 435 -37.32 435 -38 435 C-39.30477219 436.59393864 -39.30477219 436.59393864 -40.625 438.625 C-43.87935615 443.08699674 -47.4300694 445.95865971 -52 449 C-53.25490234 449.86625 -53.25490234 449.86625 -54.53515625 450.75 C-66.95641642 459.04275499 -82.5906783 465.95427331 -97.875 463.32421875 C-101.61464125 462.53941653 -105.28007728 461.54453074 -108.953125 460.49609375 C-111.09275423 459.97751949 -113.1616769 459.72665034 -115.3515625 459.515625 C-119.86043967 458.87839611 -121.02294466 457.30783926 -124 454 C-126.17346568 453.13880866 -126.17346568 453.13880866 -128 453 C-128 452.34 -128 451.68 -128 451 C-129.83284443 449.87483915 -129.83284443 449.87483915 -132 449 C-132.99 449.33 -133.98 449.66 -135 450 C-134.896875 449.29875 -134.79375 448.5975 -134.6875 447.875 C-135.13346971 443.77207863 -137.25878083 441.9962163 -140 439 C-142.53020228 435.89414323 -144.29252355 432.65224762 -146.0625 429.0625 C-146.56910156 428.04285156 -147.07570312 427.02320313 -147.59765625 425.97265625 C-148.06042969 424.99167969 -148.52320313 424.01070312 -149 423 C-149.57621094 421.8553125 -149.57621094 421.8553125 -150.1640625 420.6875 C-154.45460231 406.89361499 -150.26375282 390.46614282 -143.95727539 378.07128906 C-140.770864 372.20393629 -136.71370584 367.67124002 -132 363 C-130.90285587 361.89140624 -129.8065522 360.7819803 -128.7109375 359.671875 C-125.98196187 356.91792282 -123.23447422 354.18366941 -120.4753418 351.45996094 C-119.07258117 350.07182449 -117.67861752 348.67481498 -116.28515625 347.27734375 C-114.61531974 345.61321609 -112.91094242 343.98354626 -111.1875 342.375 C-108.66126212 340.17037709 -108.66126212 340.17037709 -109 337 C-108.43015381 336.91911133 -107.86030762 336.83822266 -107.27319336 336.75488281 C-104.27042237 335.75772162 -102.83836531 334.17803807 -100.62890625 331.921875 C-99.39624023 330.67470703 -99.39624023 330.67470703 -98.13867188 329.40234375 C-97.28853516 328.52707031 -96.43839844 327.65179688 -95.5625 326.75 C-94.71623047 325.89019531 -93.86996094 325.03039062 -92.99804688 324.14453125 C-91.36504457 322.48467456 -89.73488379 320.82201636 -88.10791016 319.15625 C-85.75731838 316.75175306 -83.38389577 314.37145806 -81 312 C-80.1028125 311.1028125 -79.205625 310.205625 -78.28125 309.28125 C-75.52083333 306.52083333 -72.76041667 303.76041667 -70 301 C-69.11957031 300.10539062 -68.23914063 299.21078125 -67.33203125 298.2890625 C-65 296 -65 296 -62.1875 293.875 C-61.465625 293.25625 -60.74375 292.6375 -60 292 C-60 291.01 -60 290.02 -60 289 C-59.16275391 288.65388672 -59.16275391 288.65388672 -58.30859375 288.30078125 C-55.38710799 286.65466491 -53.39945334 284.58926868 -51.0625 282.1875 C-50.22847656 281.33542969 -49.39445313 280.48335938 -48.53515625 279.60546875 C-47.69855469 278.74566406 -46.86195313 277.88585937 -46 277 C-44.67742187 275.69095703 -44.67742187 275.69095703 -43.328125 274.35546875 C-40.91367618 271.9927505 -40.91367618 271.9927505 -38.6875 269.125 C-36.131288 265.9936403 -33.18620705 263.47672752 -30.1171875 260.859375 C-26.57254294 257.74636612 -23.3019073 254.36623017 -20 251 C-17.14583333 248.14583333 -14.29166667 245.29166667 -11.4375 242.4375 C-10.84710938 241.84453125 -10.25671875 241.2515625 -9.6484375 240.640625 C-8.30523174 239.30378515 -6.93731448 237.99181118 -5.5625 236.6875 C-3.77353066 235.13871247 -3.77353066 235.13871247 -4 233 C-2.02 232.01 -2.02 232.01 0 231 C-0.33 230.01 -0.66 229.02 -1 228 C-0.278125 227.95875 0.44375 227.9175 1.1875 227.875 C4.47993388 226.85068724 5.69187885 225.31478856 7.7421875 222.61328125 C9 221 9 221 11.625 218.4375 C14.76033667 215.21965447 16.88279823 212.75802651 17.1875 208.1875 C17.125625 207.465625 17.06375 206.74375 17 206 C17.33 206 17.66 206 18 206 C17.66290194 199.48277089 16.55774263 196.67460782 12 192 C11.01 192.33 10.02 192.66 9 193 C8.01 191.02 8.01 191.02 7 189 C-0.60594992 188.59968685 -5.91985987 189.69742791 -11.41870117 195.37475586 Z M-135 253 C-134 255 -134 255 -134 255 Z M-133 254 C-133.33 254.66 -133.66 255.32 -134 256 C-133.01 255.67 -132.02 255.34 -131 255 C-131.66 254.67 -132.32 254.34 -133 254 Z M195 302 C195 302.66 195 303.32 195 304 C194.01 304.495 194.01 304.495 193 305 C193.99 305 194.98 305 196 305 C195.67 304.01 195.34 303.02 195 302 Z \" fill=\"#FDFDFD\" transform=\"translate(372,10)\"\\/>\\r\\n<path d=\"M0 0 C0.66 0 1.32 0 2 0 C2 0.66 2 1.32 2 2 C3.65 1.67 5.3 1.34 7 1 C7 1.66 7 2.32 7 3 C8.134375 3.0825 9.26875 3.165 10.4375 3.25 C24.13006697 5.0276315 36.23562157 14.92865286 45 25 C47.89707818 28.85665893 50.35918205 32.87856858 52.75 37.0625 C53.1625 37.701875 53.575 38.34125 54 39 C54.66 39 55.32 39 56 39 C55.96519531 40.73056641 55.96519531 40.73056641 55.9296875 42.49609375 C55.92811697 46.06984242 56.27780802 49.45862839 56.8137207 52.98632812 C58.61312827 64.98802377 57.81459554 76.7025938 53 88 C52.68546875 88.76183594 52.3709375 89.52367187 52.046875 90.30859375 C46.78805558 101.88169987 38.1230192 111.33397805 29 120 C26.36900683 122.6096377 23.7620209 125.24068616 21.17578125 127.89453125 C20.2213791 128.86721196 19.26695188 129.83986808 18.3125 130.8125 C17.82716797 131.31458984 17.34183594 131.81667969 16.84179688 132.33398438 C15.59875394 133.59417273 14.30300108 134.80191044 13 136 C12.34 136 11.68 136 11 136 C10.61714844 136.87289673 10.61714844 136.87289673 10.2265625 137.76342773 C8.87583737 140.22640403 7.38452615 141.82791981 5.375 143.78515625 C4.66859375 144.48060547 3.9621875 145.17605469 3.234375 145.89257812 C2.49703125 146.60865234 1.7596875 147.32472656 1 148.0625 C-0.46056988 149.48859839 -1.91899767 150.91689484 -3.375 152.34765625 C-4.34566406 153.29137085 -4.34566406 153.29137085 -5.3359375 154.25415039 C-7.1916303 156.10051934 -7.1916303 156.10051934 -9 159 C-10.07494116 159.99100369 -11.18216595 160.94767495 -12.3125 161.875 C-16.06462795 165.02647545 -19.69995713 168.17993999 -22.5625 172.1875 C-24 174 -24 174 -26.0625 175 C-29.36923285 176.70670082 -29.87059771 179.61179314 -31 183 C-31.59941406 183.13921875 -32.19882812 183.2784375 -32.81640625 183.421875 C-35.86166985 184.22813442 -36.9357857 185.85587042 -38.9375 188.25 C-41.84728568 191.65736985 -44.78792397 194.87969757 -48 198 C-48.556875 198.598125 -49.11375 199.19625 -49.6875 199.8125 C-51 201 -51 201 -53 201 C-53.2475 201.61875 -53.495 202.2375 -53.75 202.875 C-55.22770762 205.38710296 -56.43955177 205.76107344 -59 207 C-59.33 207.99 -59.66 208.98 -60 210 C-61.7421875 211.68359375 -61.7421875 211.68359375 -63.875 213.4375 C-67.30237294 216.26413414 -69.99870094 218.99740187 -72 223 C-72.66 222.67 -73.32 222.34 -74 222 C-74 222.66 -74 223.32 -74 224 C-74.66 224 -75.32 224 -76 224 C-76 224.66 -76 225.32 -76 226 C-77.390625 227.33203125 -77.390625 227.33203125 -79.25 228.8125 C-82.26731409 231.30875181 -84.60605539 233.88787201 -87 237 C-91.50549451 241.83516484 -91.50549451 241.83516484 -95 243 C-95 243.99 -95 244.98 -95 246 C-95.61875 246.0825 -96.2375 246.165 -96.875 246.25 C-99.18437567 246.81258459 -99.18437567 246.81258459 -100.25 249.0625 C-100.62125 250.0215625 -100.62125 250.0215625 -101 251 C-101.66 251 -102.32 251 -103 251 C-102.67 252.32 -102.34 253.64 -102 255 C-104.475 255.99 -104.475 255.99 -107 257 C-107 257.66 -107 258.32 -107 259 C-107.66 259.33 -108.32 259.66 -109 260 C-109.38160272 264.77003402 -109.4609004 268.09465992 -107.25 272.4375 C-105.16147336 274.81609978 -103.91806388 275.93004324 -101 277 C-100.34 277.33 -99.68 277.66 -99 278 C-93.74107758 278.4124645 -89.40252777 277.97869439 -85 275 C-82.27166285 272.44834733 -79.68672967 269.81167541 -77.13671875 267.08203125 C-75 265 -75 265 -73 265 C-72.7525 264.38125 -72.505 263.7625 -72.25 263.125 C-70.79371361 260.64931313 -69.62187494 260.04874998 -67 259 C-67 258.34 -67 257.68 -67 257 C-64.646679 254.44496577 -62.24619234 252.19079907 -59.5 250.0625 C-57.46123896 248.38052214 -56.0140789 246.90176523 -54.375 244.875 C-52 242 -52 242 -49 240 C-48.690625 239.34 -48.38125 238.68 -48.0625 238 C-46.72593825 235.48411905 -45.50898232 235.25449116 -43 234 C-41.66104368 232.33784732 -40.32869858 230.67036393 -39 229 C-37.2352095 227.4216031 -35.42754692 225.91745057 -33.5859375 224.4296875 C-31.75106596 222.89374096 -31.75106596 222.89374096 -30 220 C-29.00762957 219.09284697 -27.98303671 218.22032756 -26.9375 217.375 C-22.99163062 214.09230194 -19.46767313 210.46025803 -15.91796875 206.7578125 C-14 205 -14 205 -12 205 C-11.566875 204.13375 -11.566875 204.13375 -11.125 203.25 C-10.75375 202.5075 -10.3825 201.765 -10 201 C-9.731875 200.29875 -9.46375 199.5975 -9.1875 198.875 C-7.57419501 196.32767633 -5.81228942 195.8880914 -3 195 C-3.66 193.68 -4.32 192.36 -5 191 C-2.69 190.67 -0.38 190.34 2 190 C2.33 188.35 2.66 186.7 3 185 C4.051875 184.9690625 4.051875 184.9690625 5.125 184.9375 C9.41202189 183.53955808 11.28077952 180.45285181 14 177 C15.66057166 175.33942834 17.33460122 173.85867322 19.1328125 172.35546875 C23.23268566 168.85601766 27.06305607 165.12067719 30.875 161.3125 C31.55046875 160.64927734 32.2259375 159.98605469 32.921875 159.30273438 C33.56382812 158.66271484 34.20578125 158.02269531 34.8671875 157.36328125 C35.73512939 156.50150269 35.73512939 156.50150269 36.62060547 155.62231445 C38.22916926 153.93517334 38.22916926 153.93517334 39 151 C40.33092664 150.32854151 41.66483014 149.6629809 43 149 C44.79900236 147.3863494 46.5461479 145.71381615 48.25 144 C49.14203125 143.113125 50.0340625 142.22625 50.953125 141.3125 C53.22093073 139.26510897 53.22093073 139.26510897 53 137 C53.66 136.62875 54.32 136.2575 55 135.875 C58.65457081 133.59089324 61.28675097 130.76836178 64.23046875 127.64453125 C66 126 66 126 68 126 C68.33 125.01 68.66 124.02 69 123 C80.7704248 114.46789636 93.5066894 110.96711801 107.875 112.625 C121.58108924 114.88212412 133.77970577 121.49910935 143 132 C143.54011719 132.60972656 144.08023437 133.21945312 144.63671875 133.84765625 C152.87234956 143.69111086 156.79427763 154.29833847 158 167 C158.66 167 159.32 167 160 167 C159.5462707 169.26864648 159.09151087 171.5370378 158.6328125 173.8046875 C158.1744089 176.11934271 157.73400179 178.43758582 157.3046875 180.7578125 C157.05976562 182.05460938 156.81484375 183.35140625 156.5625 184.6875 C156.33691406 185.90824219 156.11132812 187.12898437 155.87890625 188.38671875 C154.95805302 192.17244869 153.62714514 195.46545594 152 199 C151.67257812 199.74507812 151.34515625 200.49015625 151.0078125 201.2578125 C148.92261309 205.66810151 146.66850388 208.68939894 143 212 C140.1934112 214.73462499 137.52979656 217.51082861 135 220.5 C132.45626285 223.49610277 129.89934702 226.34226524 127 229 C126.34 229 125.68 229 125 229 C124.67 229.99 124.34 230.98 124 232 C122.0625 234.1875 122.0625 234.1875 120 236 C119.34 236 118.68 236 118 236 C117.731875 236.639375 117.46375 237.27875 117.1875 237.9375 C116 240 116 240 113 241 C112.32643391 242.32986125 111.66127254 243.66398321 111 245 C109.44018764 246.7232263 107.8213368 248.39366767 106.16796875 250.02734375 C105.69434402 250.49813858 105.2207193 250.96893341 104.73274231 251.45399475 C103.22231245 252.9532789 101.70508851 254.4454658 100.1875 255.9375 C99.17857482 256.9363829 98.17010655 257.93572751 97.16210938 258.93554688 C95.29601596 260.78537161 93.42685112 262.63187321 91.55541992 264.47631836 C86.79941147 269.17325725 82.09352164 273.91950665 77.38618469 278.66511536 C73.80862564 282.26930483 70.22589234 285.86833117 66.64282227 289.46704102 C64.74822177 291.37064977 62.85614984 293.27672285 60.96606445 295.18481445 C58.23853284 297.93646887 55.50471349 300.68173427 52.76953125 303.42578125 C51.49611626 304.7146801 51.49611626 304.7146801 50.19697571 306.02961731 C49.41243515 306.81430893 48.62789459 307.59900055 47.81958008 308.4074707 C47.12850662 309.10298538 46.43743317 309.79850006 45.72541809 310.51509094 C44 312 44 312 42 312 C41.77957031 312.54785156 41.55914062 313.09570312 41.33203125 313.66015625 C39.58129871 316.73548994 37.21052934 319.00158721 34.6875 321.4375 C34.21376953 321.90220703 33.74003906 322.36691406 33.25195312 322.84570312 C31.83733614 324.23322758 30.41868488 325.61663507 29 327 C28.11957031 327.91910156 27.23914063 328.83820313 26.33203125 329.78515625 C24 332 24 332 21 333 C20.67 333.99 20.34 334.98 20 336 C18.50390625 337.47265625 18.50390625 337.47265625 16.5625 339.0625 C9.0610288 345.43269008 2.30939286 352.4595061 -4 360 C-5.53515625 361.69140625 -5.53515625 361.69140625 -7 363 C-7.66 363 -8.32 363 -9 363 C-9 363.66 -9 364.32 -9 365 C-10.46875 366.41015625 -10.46875 366.41015625 -12.5 368.0625 C-16.54845547 371.47703362 -19.93847871 375.22340388 -23.3359375 379.27734375 C-24.15964844 380.13005859 -24.15964844 380.13005859 -25 381 C-25.66 381 -26.32 381 -27 381 C-27.25910156 381.56589844 -27.51820313 382.13179687 -27.78515625 382.71484375 C-29.11757129 385.221155 -30.7120395 387.31012468 -32.4375 389.5625 C-36.77559785 395.71191219 -39.49241815 402.41463053 -39 410.0625 C-37.36085663 418.57209536 -32.61079572 425.55483577 -26 431 C-25.34 431.33 -24.68 431.66 -24 432 C-24 432.66 -24 433.32 -24 434 C-23.34 434.33 -22.68 434.66 -22 435 C-20.63235966 436.60697739 -19.26661896 438.21560762 -17.91015625 439.83203125 C-13.32709526 445.03366489 -8.27019399 449.83637273 -3.25390625 454.6171875 C-1 457 -1 457 0 460 C0.66 460 1.32 460 2 460 C3.33105469 461.34570312 3.33105469 461.34570312 4.921875 463.28125 C9.29958503 468.42562635 13.99923824 473.22053243 18.76269531 478.00292969 C20.26830012 479.51842028 21.76292347 481.04425966 23.2578125 482.5703125 C24.21809434 483.53711001 25.17900837 484.50328011 26.140625 485.46875 C27.00204102 486.33951172 27.86345703 487.21027344 28.75097656 488.10742188 C30.89267081 490.32193485 30.89267081 490.32193485 34 490 C33.67 491.32 33.34 492.64 33 494 C33.66 494 34.32 494 35 494 C34.67 494.99 34.34 495.98 34 497 C27.20755954 490.23082042 20.41789106 483.45887583 13.63165951 476.68347168 C10.4798142 473.53682529 7.32705383 470.3911077 4.17211914 467.24755859 C1.12244614 464.20882145 -1.92471437 461.16758496 -4.97021294 458.12466431 C-6.12742031 456.96929202 -7.28550138 455.81479407 -8.44450569 454.66122437 C-14.02551589 449.10532429 -19.57055634 443.56289042 -24.66195679 437.54573059 C-26.48778965 435.43649699 -28.51002732 433.57365813 -30.5625 431.6875 C-37.42025583 424.93524811 -41.91253984 416.78871967 -42.5 407.125 C-42.19452537 386.26941407 -18.22823582 369.07806646 -4.76171875 355.62890625 C-2.90836762 353.7748802 -1.05516484 351.92070584 0.79789734 350.06639099 C4.6597789 346.20270326 8.5237347 342.3410994 12.38891602 338.48071289 C16.84377367 334.03131809 21.29498659 329.5783014 25.7443698 325.1234327 C30.05256022 320.81014603 34.36357026 316.49968904 38.67577171 312.19041252 C40.49972047 310.36712919 42.32293127 308.54310731 44.14538002 306.71832466 C46.68866233 304.17249777 49.2351366 301.62990662 51.7824707 299.08813477 C52.52907959 298.33950165 53.27568848 297.59086853 54.04492188 296.81954956 C57.88602677 292.9939369 61.78790968 289.41203721 66 286 C69.12304452 283.04576869 71.96840395 279.90512685 74.80810547 276.68359375 C80.26798744 270.60990483 86.04112434 264.87521564 91.84936905 259.13659668 C93.80434038 257.20400474 95.75501887 255.26717113 97.70455933 253.32910156 C103.24060051 247.82632563 108.78091915 242.32791261 114.33154297 236.83984375 C117.74604554 233.46322226 121.15299368 230.07912988 124.55538559 226.69030762 C125.84184696 225.4118317 127.13106496 224.13612277 128.42322159 222.86340332 C143.89760993 207.61794355 153.9374291 192.63809519 154.4375 170.3125 C154.44574703 157.09251245 150.31692742 146.35578584 142 136 C141.401875 135.113125 140.80375 134.22625 140.1875 133.3125 C129.75908657 122.28817723 114.79749878 116.31558776 99.875 115.6875 C80.08730528 115.95856431 67.4769196 128.94298145 54.55078125 142.09375 C53.08447048 143.57008572 51.61718239 145.04545134 50.14897156 146.51989746 C46.30796189 150.38171277 42.47869702 154.25495559 38.65234375 158.13128662 C32.52248246 164.33677981 26.37367086 170.52351125 20.22688866 176.7122345 C18.09455121 178.86211984 15.96658151 181.01624776 13.83943176 183.17126465 C12.52102306 184.50290522 11.2025597 185.83449169 9.8840332 187.16601562 C9.30357742 187.75635086 8.72312164 188.3466861 8.12507629 188.95491028 C4.48346035 192.62523679 0.70328885 196.07545791 -3.218503 199.44503021 C-5.69481424 201.60646476 -8.00509589 203.91029941 -10.3125 206.25 C-10.77052002 206.71180664 -11.22854004 207.17361328 -11.70043945 207.64941406 C-13.13616175 209.09712722 -14.56852432 210.54808857 -16 212 C-17.8927387 213.91975944 -19.78906758 215.83587254 -21.6875 217.75 C-22.51636719 218.59046875 -23.34523438 219.4309375 -24.19921875 220.296875 C-26.30521199 222.32943751 -28.42014934 224.23652997 -30.64013672 226.13574219 C-35.51424214 230.3653319 -40.02587106 234.94365113 -44.55185318 239.53781891 C-46.10514659 241.11346027 -47.66265021 242.68482816 -49.22140503 244.25506592 C-53.64694999 248.71391535 -58.06805265 253.17710059 -62.47900391 257.65039062 C-65.19201845 260.40114519 -67.91237543 263.14445446 -70.63750839 265.8832016 C-71.66807931 266.92179008 -72.69587414 267.96314131 -73.72073746 269.00736237 C-75.15344413 270.46668747 -76.59533018 271.9163389 -78.03955078 273.36425781 C-78.85481232 274.18919739 -79.67007385 275.01413696 -80.51004028 275.86407471 C-85.99943374 280.57295985 -91.85167379 282.36403513 -99 282 C-105.43980808 280.1364254 -108.97987779 276.46306665 -112.3125 270.75 C-113.58376734 265.66493063 -113.1372502 260.96969657 -110.50679016 256.41378784 C-107.32272207 251.76331898 -103.20271089 247.94964599 -99.21166992 244.00048828 C-98.32500137 243.11513397 -97.43833282 242.22977966 -96.52479553 241.31759644 C-94.60308082 239.40013703 -92.67966388 237.48459486 -90.7530117 235.57211685 C-87.70021364 232.5417017 -84.65462608 229.50410737 -81.60993958 226.46554565 C-76.78792211 221.65489034 -71.96125558 216.84893108 -67.13251811 212.04502189 C-58.49855377 203.45538803 -49.87009752 194.8602306 -41.24697 186.25971782 C-38.2258608 183.24696248 -35.20196706 180.23703944 -32.17572248 177.22944283 C-30.74265076 175.80450353 -29.31074452 174.37840482 -27.87931824 172.95181274 C-26.14315706 171.22162072 -24.40518535 169.49324251 -22.66494751 167.76715088 C-18.45345502 163.56386356 -14.42438744 159.27708884 -10.54358006 154.76704788 C-8.47469812 152.39864889 -6.27701275 150.18651404 -4.03369141 147.98364258 C-2.66659531 146.63602592 -2.66659531 146.63602592 -1.2718811 145.26118469 C-0.79631397 144.7946026 -0.32074684 144.32802052 0.16923141 143.84729958 C1.68814694 142.35553153 3.20222416 140.85900408 4.71499634 139.36100769 C9.01104731 135.10718973 13.30969461 130.85612116 17.625 126.62182617 C20.28100247 124.0149944 22.92657847 121.39794352 25.56612015 118.7744503 C26.55973773 117.79057284 27.55695543 116.81031443 28.55817795 115.83417702 C43.84445848 100.92244973 53.97378657 84.47555139 54.375 62.6875 C54.3457865 47.03421971 47.70621587 33.46104506 37.6875 21.6484375 C30.67510889 14.73797068 21.66583684 9.15223405 12 7 C10.89011719 6.73123047 10.89011719 6.73123047 9.7578125 6.45703125 C-6.40101856 3.77915132 -20.67361365 7.50178967 -34 17 C-36.61657931 19.35871352 -39.05790806 21.79292216 -41.453125 24.375 C-43.44407151 26.42701848 -45.41761358 28.24848113 -47.58528137 30.09725952 C-52.32264301 34.22205754 -56.75203088 38.61894475 -61.18237305 43.06884766 C-62.50344055 44.38969612 -62.50344055 44.38969612 -63.85119629 45.73722839 C-66.24329557 48.12990099 -68.63316754 50.52475663 -71.02204108 52.92064714 C-73.53361679 55.43852454 -76.04807306 57.95352213 -78.56221008 60.46884155 C-83.31790569 65.22763407 -88.07104999 69.98896628 -92.82325917 74.75124013 C-98.21733275 80.15649165 -103.61424378 85.55890624 -109.01140153 90.96107793 C-118.24040074 100.19874598 -127.46728985 109.43851619 -136.69178772 118.68067932 C-137.83328781 119.82434715 -137.83328781 119.82434715 -138.99784851 120.99111938 C-139.69623526 121.69106647 -140.394622 122.39101357 -141.11417198 123.11217117 C-142.72286044 124.7225664 -144.33497868 126.32941849 -145.94807434 127.93539429 C-147.73209655 129.73044102 -149.38468315 131.55427743 -151 133.5 C-155.19264326 138.43752912 -159.76558218 142.72999189 -164.7421875 146.86328125 C-166.56962925 148.59271142 -168.11159867 150.28674105 -169.72509766 152.20263672 C-175.70880784 159.07187348 -182.23344942 165.44014361 -188.65625 171.89453125 C-189.70918999 172.95358453 -189.70918999 172.95358453 -190.78340149 174.03403282 C-194.49083512 177.76220873 -198.20145133 181.48718418 -201.91455078 185.2097168 C-205.73937792 189.04565758 -209.55237312 192.8931438 -213.36292267 196.74326038 C-216.30742847 199.71391385 -219.26078845 202.67564409 -222.21659851 205.63504601 C-223.62652198 207.04983045 -225.03307451 208.46798287 -226.43611145 209.88959694 C-228.39795273 211.87581651 -230.3720806 213.8489956 -232.34960938 215.81958008 C-232.92124313 216.4040239 -233.49287689 216.98846771 -234.08183289 217.59062195 C-239.45964264 222.90009218 -244.70616811 225.4242954 -252.4375 225.5 C-258.53564556 225.34579402 -262.51938091 224.17161088 -267 220 C-271.03680982 215.44565046 -272.26375374 210.98518094 -272 205 C-269.88724033 195.33672219 -262.56831547 189.26753767 -255.45117188 182.95727539 C-250.07931612 178.12951494 -244.97828668 173.07300955 -239.90625 167.93359375 C-238.51118364 166.52912101 -237.11611162 165.12465383 -235.7206955 163.7205286 C-232.32449556 160.30155802 -228.9340701 156.87687597 -225.54589844 153.44995117 C-223.62521491 151.50772508 -221.7019257 149.56814903 -219.77575684 147.63136292 C-217.97079815 145.81603794 -216.16996976 143.99659523 -214.37365723 142.17271423 C-213.56521362 141.36089188 -212.75677002 140.54906952 -211.92382812 139.71264648 C-211.21230591 138.99366684 -210.50078369 138.27468719 -209.7677002 137.53392029 C-208 136 -208 136 -206 136 C-205.67 135.01 -205.34 134.02 -205 133 C-202.9375 131.8125 -202.9375 131.8125 -201 131 C-202.28519565 133.86697492 -203.57129254 135.97607712 -206 138 C-206.66 138 -207.32 138 -208 138 C-208.33 138.99 -208.66 139.98 -209 141 C-209.66 141 -210.32 141 -211 141 C-211 141.66 -211 142.32 -211 143 C-212.62626404 144.38232443 -214.2925002 145.71937515 -216 147 C-215.67 147.66 -215.34 148.32 -215 149 C-215.59554687 149.09152344 -216.19109375 149.18304688 -216.8046875 149.27734375 C-219.52562732 150.17302679 -220.39124634 151.31588204 -222.125 153.5625 C-223.6328125 155.50390625 -223.6328125 155.50390625 -225 157 C-225.66 157 -226.32 157 -227 157 C-227 157.66 -227 158.32 -227 159 C-228.46875 160.4453125 -228.46875 160.4453125 -230.5 162.125 C-234.9046751 165.86702486 -238.95242409 169.87971314 -243 174 C-245.53967281 176.54793191 -248.08768713 179.08652314 -250.6484375 181.61328125 C-262.92551286 192.59889619 -262.92551286 192.59889619 -268.5 207.3125 C-268.37499013 211.98474386 -266.82804429 214.86572053 -263.83984375 218.40234375 C-259.84331795 221.8727876 -255.45417968 221.87463968 -250.375 222.3125 C-244.31062737 221.75098402 -240.22524675 218.63410015 -235.8125 214.625 C-234.97332031 213.87476563 -234.13414062 213.12453125 -233.26953125 212.3515625 C-231.03399558 210.03522434 -229.58941377 207.78147409 -228 205 C-224.5862069 202 -224.5862069 202 -222 202 C-221.67 201.01 -221.34 200.02 -221 199 C-219.328125 197.3515625 -219.328125 197.3515625 -217.25 195.625 C-212.31461193 191.42992014 -208.0165607 187.08764355 -204 182 C-202.375 180.1875 -202.375 180.1875 -201 179 C-200.34 179 -199.68 179 -199 179 C-199 178.34 -199 177.68 -199 177 C-198.34 177 -197.68 177 -197 177 C-196.74476563 176.42894531 -196.48953125 175.85789062 -196.2265625 175.26953125 C-194.86118469 172.74314747 -193.28568001 170.83035427 -191.375 168.6875 C-190.74335938 167.96949219 -190.11171875 167.25148438 -189.4609375 166.51171875 C-187.4843775 164.49437259 -185.50122842 162.67521818 -183.36328125 160.83984375 C-178.26324098 156.43369862 -173.55294867 151.6614038 -168.8125 146.875 C-167.49862305 145.55435547 -167.49862305 145.55435547 -166.15820312 144.20703125 C-163.77032349 141.80647902 -161.38493774 139.40347423 -159 137 C-156.38518537 134.37404269 -153.75928697 131.76215533 -151.10546875 129.17578125 C-150.13278804 128.2213791 -149.16013192 127.26695188 -148.1875 126.3125 C-147.68541016 125.82716797 -147.18332031 125.34183594 -146.66601562 124.84179688 C-145.40582727 123.59875394 -144.19808956 122.30300108 -143 121 C-143 120.34 -143 119.68 -143 119 C-142.01 118.34 -141.02 117.68 -140 117 C-139.7497843 113.91634129 -139.7497843 113.91634129 -140 111 C-137.03 111.495 -137.03 111.495 -134 112 C-133.01 110.515 -133.01 110.515 -132 109 C-131.34 109 -130.68 109 -130 109 C-130 108.34 -130 107.68 -130 107 C-127.3448818 104.10350742 -124.51524651 101.57630508 -121.5 99.0625 C-118.22681225 96.29941943 -115.69117688 93.32856088 -113 90 C-111.3540349 88.31288577 -109.68762851 86.6454378 -108 85 C-106.88625 83.8553125 -106.88625 83.8553125 -105.75 82.6875 C-103.43385795 80.42399754 -101.06906759 78.30845357 -98.625 76.1875 C-95.06447522 73.04931094 -91.94732158 69.77701068 -88.90234375 66.14453125 C-85.82897469 62.67989138 -82.42022598 59.55607233 -79.0390625 56.39453125 C-76.85484866 53.82954449 -76.3174074 52.30926607 -76 49 C-75.071875 48.731875 -74.14375 48.46375 -73.1875 48.1875 C-70.1688359 47.06289965 -69.0844857 46.29293427 -67 44 C-66.34 44 -65.68 44 -65 44 C-64.731875 43.401875 -64.46375 42.80375 -64.1875 42.1875 C-63.00082594 40.00152146 -61.90400887 38.58667406 -60 37 C-59.34 37 -58.68 37 -58 37 C-57.67 36.01 -57.34 35.02 -57 34 C-55.5625 32.3125 -55.5625 32.3125 -54 31 C-53.34 31 -52.68 31 -52 31 C-51.76667969 30.43023437 -51.53335938 29.86046875 -51.29296875 29.2734375 C-49.14569391 25.49786663 -45.80722144 23.05516205 -42.55859375 20.23046875 C-41.12205942 18.97816173 -39.70161533 17.70443693 -38.34765625 16.36328125 C-31.74531779 9.9710968 -19.47296937 3.09276219 -10.3125 2.9375 C-9.219375 2.958125 -8.12625 2.97875 -7 3 C-6.67 2.34 -6.34 1.68 -6 1 C-4.02 1 -2.04 1 0 1 C0 0.67 0 0.34 0 0 Z M54 42 C55 44 55 44 55 44 Z M-139 112 C-138 114 -138 114 -138 114 Z M-137 113 C-137.33 113.66 -137.66 114.32 -138 115 C-137.01 114.67 -136.02 114.34 -135 114 C-135.66 113.67 -136.32 113.34 -137 113 Z \" fill=\"#4D4E4E\" transform=\"translate(376,151)\"\\/>\\r\\n<path d=\"M0 0 C4.47702821 2.83983054 8.72855772 6.24817315 10.4375 11.375 C11.15747752 18.31764037 11.14483882 23.83103867 6.9296875 29.5703125 C6.43726563 30.16585937 5.94484375 30.76140625 5.4375 31.375 C4.94507813 31.99117187 4.45265625 32.60734375 3.9453125 33.2421875 C0.97348694 36.82993546 -2.2650691 40.08508687 -5.5625 43.375 C-7.3658759 45.18226119 -9.16892718 46.98984633 -10.97172546 48.79768372 C-12.05513405 49.88402406 -13.13854909 50.97035796 -14.2219696 52.0566864 C-14.79495474 52.63122244 -15.36793987 53.20575848 -15.95828819 53.7977047 C-29.14921072 67.02399594 -42.3458579 80.24456296 -55.54576397 93.46188831 C-63.17522949 101.1016931 -70.80279082 108.74338165 -78.42602539 116.3894043 C-85.08378403 123.06705447 -91.74501358 129.74121893 -98.41048938 136.41116637 C-101.93757126 139.94086064 -105.46285728 143.47230826 -108.98398399 147.00794411 C-112.28995459 150.32743067 -115.60052365 153.64225851 -118.91476822 156.95348358 C-120.13317108 158.17243909 -121.34984616 159.39312429 -122.56470299 160.61561394 C-124.21666099 162.27744573 -125.87458426 163.93308114 -127.53422546 165.5872345 C-128.46242946 166.51728208 -129.39063345 167.44732965 -130.34696484 168.40556049 C-132.5625 170.375 -132.5625 170.375 -134.5625 170.375 C-134.789375 170.931875 -135.01625 171.48875 -135.25 172.0625 C-136.93617031 175.03337149 -139.11637116 176.98322958 -141.5625 179.375 C-149.29239885 186.95731129 -153.69623924 196.36044164 -157.5625 206.375 C-157.8925 206.375 -158.2225 206.375 -158.5625 206.375 C-159.15742066 196.41324336 -153.89553384 187.61807618 -147.4375 180.3125 C-145.83570242 178.64407653 -144.20772805 177.00061281 -142.5625 175.375 C-140.80571301 173.63463638 -139.0495803 171.89363639 -137.29541016 170.15063477 C-136.11314063 168.98138725 -134.9241424 167.81889833 -133.72802734 166.66381836 C-132.30287553 165.27073777 -130.92778469 163.82680196 -129.5625 162.375 C-129.5625 161.715 -129.5625 161.055 -129.5625 160.375 C-127.89583333 159.375 -126.22916667 158.375 -124.5625 157.375 C-120.23949573 153.62995093 -120.23949573 153.62995093 -118.5625 148.375 C-117.71099365 148.25910522 -117.71099365 148.25910522 -116.84228516 148.14086914 C-113.78017937 147.11218785 -112.32256561 145.44116402 -110.0859375 143.12109375 C-109.250625 142.26708984 -108.4153125 141.41308594 -107.5546875 140.53320312 C-106.69101562 139.63537109 -105.82734375 138.73753906 -104.9375 137.8125 C-103.22066698 136.03598417 -101.49953624 134.26360817 -99.7734375 132.49609375 C-99.01337402 131.7064624 -98.25331055 130.91683105 -97.47021484 130.10327148 C-95.5625 128.375 -95.5625 128.375 -93.5625 128.375 C-93.35625 127.84390625 -93.15 127.3128125 -92.9375 126.765625 C-90.98288808 123.36726564 -88.34126283 120.86444072 -85.5625 118.125 C-85.0159375 117.57070313 -84.469375 117.01640625 -83.90625 116.4453125 C-79.8158867 112.375 -79.8158867 112.375 -77.5625 112.375 C-77.19125 111.50875 -77.19125 111.50875 -76.8125 110.625 C-75.37950012 108.04560021 -73.77825324 106.31378408 -71.5625 104.375 C-70.9025 104.375 -70.2425 104.375 -69.5625 104.375 C-69.5625 103.385 -69.5625 102.395 -69.5625 101.375 C-68.0234375 99.76171875 -68.0234375 99.76171875 -65.9375 98.0625 C-63.21137646 95.79073038 -60.64163424 93.50097686 -58.1875 90.9375 C-55.5625 88.375 -55.5625 88.375 -53.5625 88.375 C-53.2221875 87.5396875 -53.2221875 87.5396875 -52.875 86.6875 C-51.20353234 83.74253316 -49.00973648 81.69343456 -46.5625 79.375 C-46.8925 78.715 -47.2225 78.055 -47.5625 77.375 C-46.86511719 77.16746094 -46.16773438 76.95992188 -45.44921875 76.74609375 C-41.66076439 74.94670609 -39.25704742 72.43354683 -36.375 69.4375 C-35.57545898 68.63022461 -35.57545898 68.63022461 -34.75976562 67.80664062 C-32.4293353 65.42930856 -30.41379867 63.151948 -28.5625 60.375 C-27.44622472 59.34210914 -26.29766583 58.34339501 -25.125 57.375 C-21.75401249 54.57919178 -19.00596087 52.04019131 -16.5625 48.375 C-15.54595503 47.51120013 -14.50283176 46.67785872 -13.4375 45.875 C-12.48875 45.05 -11.54 44.225 -10.5625 43.375 C-10.5625 42.385 -10.5625 41.395 -10.5625 40.375 C-9.82 40.1275 -9.0775 39.88 -8.3125 39.625 C-5.36125938 38.28352699 -3.71435026 36.76594474 -1.5625 34.375 C-1.8925 33.715 -2.2225 33.055 -2.5625 32.375 C-1.985 32.1275 -1.4075 31.88 -0.8125 31.625 C1.7377997 30.20816683 3.45535701 28.49872463 5.4375 26.375 C5.1075 25.715 4.7775 25.055 4.4375 24.375 C5.0975 23.715 5.7575 23.055 6.4375 22.375 C6.48004356 20.37545254 6.47830783 18.37458364 6.4375 16.375 C6.7675 15.385 7.0975 14.395 7.4375 13.375 C6.6914302 11.4947899 6.6914302 11.4947899 5.5 9.6875 C4.819375 8.594375 4.13875 7.50125 3.4375 6.375 C2.1175 6.375 0.7975 6.375 -0.5625 6.375 C-2.5625 3.375 -2.5625 3.375 -2.5625 1.375 C-4.48174787 1.60434409 -6.3979406 1.85934343 -8.3125 2.125 C-9.37984375 2.26421875 -10.4471875 2.4034375 -11.546875 2.546875 C-15.06415953 3.51276142 -16.17669184 4.67884281 -18.5625 7.375 C-19.67625 8.24318359 -19.67625 8.24318359 -20.8125 9.12890625 C-24.65692229 12.26888184 -28.07614243 15.78433186 -31.5625 19.3125 C-32.61050781 20.36727539 -32.61050781 20.36727539 -33.6796875 21.44335938 C-35.03483666 22.80745764 -36.38880656 24.17272868 -37.74145508 25.53930664 C-39.28285082 27.09310133 -40.83375055 28.63745906 -42.38671875 30.1796875 C-47.32246459 34.64771367 -47.32246459 34.64771367 -49.5625 40.375 C-51.90631722 41.93754482 -54.23856264 43.23102784 -56.8125 44.375 C-58.91387474 45.31779946 -58.91387474 45.31779946 -59.5625 48.375 C-60.2225 48.375 -60.8825 48.375 -61.5625 48.375 C-61.830625 49.014375 -62.09875 49.65375 -62.375 50.3125 C-63.5625 52.375 -63.5625 52.375 -66.5625 53.375 C-67.24736725 54.69907669 -67.91120203 56.03409241 -68.5625 57.375 C-70.5625 59.625 -70.5625 59.625 -72.5625 61.375 C-73.2225 61.375 -73.8825 61.375 -74.5625 61.375 C-74.963479 62.26711182 -74.963479 62.26711182 -75.37255859 63.17724609 C-76.57886465 65.40522457 -77.7798254 66.79645968 -79.6015625 68.5390625 C-80.18164062 69.10367188 -80.76171875 69.66828125 -81.359375 70.25 C-81.96265625 70.8275 -82.5659375 71.405 -83.1875 72 C-84.39251989 73.15417517 -85.59328487 74.31281463 -86.7890625 75.4765625 C-87.32096191 75.98525879 -87.85286133 76.49395508 -88.40087891 77.01806641 C-89.77927283 78.33051487 -89.77927283 78.33051487 -89.5625 80.375 C-90.67625 81.0246875 -90.67625 81.0246875 -91.8125 81.6875 C-94.83312968 83.54106821 -96.39622426 85.61113095 -98.5625 88.375 C-99.2225 88.375 -99.8825 88.375 -100.5625 88.375 C-100.5625 89.035 -100.5625 89.695 -100.5625 90.375 C-104.86482558 95.14244186 -104.86482558 95.14244186 -108.5625 96.375 C-108.5625 97.035 -108.5625 97.695 -108.5625 98.375 C-112.86482558 103.14244186 -112.86482558 103.14244186 -116.5625 104.375 C-117.77132096 106.37516466 -117.77132096 106.37516466 -118.5625 108.375 C-119.2225 108.375 -119.8825 108.375 -120.5625 108.375 C-120.789375 108.931875 -121.01625 109.48875 -121.25 110.0625 C-122.94822802 113.05461603 -125.07014196 114.99100535 -127.5625 117.375 C-128.56990234 118.41333984 -128.56990234 118.41333984 -129.59765625 119.47265625 C-130.30792969 120.20355469 -131.01820313 120.93445313 -131.75 121.6875 C-132.42417969 122.38488281 -133.09835938 123.08226562 -133.79296875 123.80078125 C-135.5625 125.375 -135.5625 125.375 -137.5625 125.375 C-137.789375 125.931875 -138.01625 126.48875 -138.25 127.0625 C-139.93627267 130.03355185 -142.092854 132.02022125 -144.5625 134.375 C-145.305 135.1175 -146.0475 135.86 -146.8125 136.625 C-147.72 137.5325 -148.6275 138.44 -149.5625 139.375 C-150.30371094 140.13941406 -151.04492188 140.90382813 -151.80859375 141.69140625 C-152.61425781 142.51511719 -153.41992188 143.33882812 -154.25 144.1875 C-155.01699219 144.97769531 -155.78398437 145.76789063 -156.57421875 146.58203125 C-158.5625 148.375 -158.5625 148.375 -160.5625 148.375 C-160.82675781 148.97054687 -161.09101563 149.56609375 -161.36328125 150.1796875 C-162.60751209 152.45739998 -163.84166908 153.76197779 -165.75 155.5 C-179.75953296 169.24902512 -189.29236694 190.77129596 -189.73046875 210.38671875 C-189.90748654 224.50684412 -189.90748654 224.50684412 -187.5625 238.375 C-187.32144531 239.38433594 -187.08039063 240.39367187 -186.83203125 241.43359375 C-185.84005131 245.44828492 -185.84005131 245.44828492 -184.5625 249.375 C-183.9025 249.705 -183.2425 250.035 -182.5625 250.375 C-181.87427519 252.36768438 -181.21131559 254.3691379 -180.5625 256.375 C-176.40611239 264.80291061 -171.12358184 271.69675598 -164.5625 278.375 C-163.81383667 279.18698853 -163.81383667 279.18698853 -163.05004883 280.01538086 C-158.59817096 284.71727011 -153.8120824 288.03508714 -148.25 291.3125 C-147.43982422 291.80556641 -146.62964844 292.29863281 -145.79492188 292.80664062 C-141.93337652 295.40773354 -141.93337652 295.40773354 -137.5625 296.375 C-137.5625 297.035 -137.5625 297.695 -137.5625 298.375 C-136.82386719 298.51035156 -136.08523437 298.64570313 -135.32421875 298.78515625 C-132.89597168 299.30377762 -130.71130415 299.99117632 -128.375 300.8125 C-123.46026975 302.31791287 -118.59076163 302.99709271 -113.5 303.5625 C-112.75661377 303.6462085 -112.01322754 303.72991699 -111.24731445 303.81616211 C-103.20954018 304.63735339 -95.33488038 304.56080259 -87.3125 303.625 C-86.22594116 303.49955811 -86.22594116 303.49955811 -85.11743164 303.37158203 C-78.31554659 302.4975342 -72.02356817 300.6897479 -65.5625 298.375 C-65.5625 297.715 -65.5625 297.055 -65.5625 296.375 C-64.386875 296.313125 -64.386875 296.313125 -63.1875 296.25 C-54.62575321 294.18337146 -47.84809733 288.30944664 -41.5625 282.375 C-41.8925 281.715 -42.2225 281.055 -42.5625 280.375 C-41.94375 280.2925 -41.325 280.21 -40.6875 280.125 C-38.37812433 279.56241541 -38.37812433 279.56241541 -37.3125 277.3125 C-37.065 276.673125 -36.8175 276.03375 -36.5625 275.375 C-35.9025 275.375 -35.2425 275.375 -34.5625 275.375 C-32.83552549 273.74670975 -31.20211285 272.08777143 -29.5625 270.375 C-28.39690534 269.22807619 -27.23018817 268.08229233 -26.0625 266.9375 C-20.6782888 261.63660625 -20.6782888 261.63660625 -16.5625 255.375 C-15.22916667 254.70833333 -13.89583333 254.04166667 -12.5625 253.375 C-10.85328411 251.8337688 -10.85328411 251.8337688 -9.5625 250.375 C-10.2225 249.715 -10.8825 249.055 -11.5625 248.375 C-10.840625 248.313125 -10.11875 248.25125 -9.375 248.1875 C-5.65583083 247.11307335 -4.01472505 245.31767006 -1.5625 242.375 C-1.5625 241.385 -1.5625 240.395 -1.5625 239.375 C-0.964375 239.313125 -0.36625 239.25125 0.25 239.1875 C3.30113184 238.05422246 3.8254001 236.12900399 5.4375 233.375 C6.7528341 232.67348848 8.08867592 232.00974075 9.4375 231.375 C12.20872275 229.02073501 12.20872275 229.02073501 14.4375 226.375 C14.4375 225.385 14.4375 224.395 14.4375 223.375 C14.98535156 223.31828125 15.53320312 223.2615625 16.09765625 223.203125 C19.45580544 222.01459807 21.47680552 219.65184591 23.875 217.125 C24.33970703 216.64675781 24.80441406 216.16851562 25.28320312 215.67578125 C26.6721079 214.24619725 28.05483414 212.81061902 29.4375 211.375 C32.03620515 208.75589685 34.65565508 206.16220939 37.296875 203.5859375 C38.26044136 202.64065017 39.2239829 201.69533754 40.1875 200.75 C40.92806641 200.03457031 40.92806641 200.03457031 41.68359375 199.3046875 C44.02137083 196.99893476 45.3828094 195.53907181 46.4375 192.375 C47.22125 191.92125 48.005 191.4675 48.8125 191 C51.80895503 189.14505165 52.66926667 187.34884696 54.4375 184.375 C55.4275 184.375 56.4175 184.375 57.4375 184.375 C57.4375 183.715 57.4375 183.055 57.4375 182.375 C59.81063144 179.7984573 62.23817829 177.53056817 65 175.375 C67.50175457 173.46755627 67.50175457 173.46755627 69.3125 171 C71.63459533 168.1315293 74.17051667 165.99724093 77.046875 163.70703125 C77.50578125 163.26746094 77.9646875 162.82789063 78.4375 162.375 C78.4375 161.715 78.4375 161.055 78.4375 160.375 C79.4275 160.045 80.4175 159.715 81.4375 159.375 C83.04994386 157.78433714 83.04994386 157.78433714 84.625 155.8125 C87.24249093 152.73277131 89.91993032 149.76167108 92.75 146.875 C93.73419922 145.86953125 93.73419922 145.86953125 94.73828125 144.84375 C96.4375 143.375 96.4375 143.375 98.4375 143.375 C98.7675 142.385 99.0975 141.395 99.4375 140.375 C100.0975 140.375 100.7575 140.375 101.4375 140.375 C101.52 139.59125 101.6025 138.8075 101.6875 138 C101.935 137.13375 102.1825 136.2675 102.4375 135.375 C104.375 134.3125 104.375 134.3125 106.4375 133.375 C108.97750454 129.94599387 108.73854004 126.51430053 108.4375 122.375 C107.7775 121.385 107.1175 120.395 106.4375 119.375 C106.4375 118.385 106.4375 117.395 106.4375 116.375 C105.1175 116.375 103.7975 116.375 102.4375 116.375 C102.4375 115.055 102.4375 113.735 102.4375 112.375 C94.39354551 111.44565764 94.39354551 111.44565764 86.93359375 113.86328125 C84.87324927 115.69921137 84.87324927 115.69921137 83.12109375 117.6484375 C81.34820493 119.46657407 79.7524407 120.37202788 77.4375 121.375 C77.4375 122.035 77.4375 122.695 77.4375 123.375 C76.7775 123.375 76.1175 123.375 75.4375 123.375 C75.0971875 124.2103125 75.0971875 124.2103125 74.75 125.0625 C73.06467489 128.03188233 70.88329947 129.98788259 68.4375 132.375 C67.48794151 133.31264056 66.53906528 134.25097249 65.59082031 135.18994141 C65.09390686 135.68039948 64.59699341 136.17085754 64.08502197 136.67617798 C61.86436373 138.86993407 59.64914806 141.06915391 57.43408203 143.26855469 C56.26429047 144.42820827 55.09272216 145.58607217 53.91943359 146.7421875 C52.21762253 148.4198022 50.52229905 150.10374017 48.828125 151.7890625 C48.30212708 152.30473785 47.77612915 152.82041321 47.23419189 153.35171509 C44.89758529 155.68759287 43.49828554 157.19264338 42.4375 160.375 C41.11631359 161.06542645 39.78077311 161.72859487 38.4375 162.375 C37.07995622 163.59759907 35.76902047 164.87324711 34.5 166.1875 C33.80519531 166.90164063 33.11039063 167.61578125 32.39453125 168.3515625 C31.74871094 169.01929688 31.10289062 169.68703125 30.4375 170.375 C29.53 171.261875 28.6225 172.14875 27.6875 173.0625 C25.36385107 175.37391255 25.36385107 175.37391255 23.25 178.125 C21.4375 180.375 21.4375 180.375 19.4375 181.375 C19.7675 182.035 20.0975 182.695 20.4375 183.375 C19.73625 183.560625 19.035 183.74625 18.3125 183.9375 C14.88350281 185.6519986 13.28309412 187.69842782 10.9140625 190.64453125 C9.4375 192.375 9.4375 192.375 6.8125 194.4375 C4.282115 196.29811095 4.282115 196.29811095 2.625 199.1875 C-0.68107783 204.0049277 -4.93640822 208.49963607 -10.5625 210.375 C-11.25482913 211.69519036 -11.91829208 213.03067177 -12.5625 214.375 C-13.70695734 215.60403617 -14.89719619 216.79172066 -16.125 217.9375 C-18.55876295 220.2093494 -19.48509794 221.14279382 -20.5625 224.375 C-22.85141028 225.74834617 -25.02002447 226.52750816 -27.5625 227.375 C-28.26401152 228.6903341 -28.92775925 230.02617592 -29.5625 231.375 C-31.0625 233.125 -31.0625 233.125 -32.5625 234.375 C-33.2225 234.375 -33.8825 234.375 -34.5625 234.375 C-34.80871094 234.96152344 -35.05492187 235.54804688 -35.30859375 236.15234375 C-36.75603365 238.71805497 -38.34471101 240.08761038 -40.625 241.9375 C-43.89834139 244.55782506 -43.89834139 244.55782506 -45.5625 248.375 C-46.2225 248.045 -46.8825 247.715 -47.5625 247.375 C-47.81 247.931875 -48.0575 248.48875 -48.3125 249.0625 C-51.54845508 255.0490169 -56.07258631 258.58280752 -61.5625 262.375 C-62.40167969 262.95636719 -63.24085938 263.53773438 -64.10546875 264.13671875 C-76.54235496 272.41002978 -92.14723993 279.33029515 -107.4375 276.69921875 C-111.17711956 275.91442108 -114.84248804 274.91936057 -118.515625 273.87133789 C-120.65496477 273.35257862 -122.72455292 273.09944951 -124.9140625 272.88671875 C-129.43426046 272.25272953 -130.61352034 270.73356016 -133.5625 267.375 C-135.72870544 266.07980005 -135.72870544 266.07980005 -137.5625 265.375 C-137.5625 264.715 -137.5625 264.055 -137.5625 263.375 C-139.8725 263.045 -142.1825 262.715 -144.5625 262.375 C-144.81 261.4675 -145.0575 260.56 -145.3125 259.625 C-146.61868237 256.22892584 -147.95332822 254.81583812 -150.5625 252.375 C-150.8925 251.385 -151.2225 250.395 -151.5625 249.375 C-152.5525 248.385 -152.5525 248.385 -153.5625 247.375 C-154.80205903 244.93023461 -155.98188164 242.48893399 -157.125 240 C-157.44146484 239.32710937 -157.75792969 238.65421875 -158.08398438 237.9609375 C-161.00657028 231.65659084 -161.69024708 227.33141929 -161.1875 220.4375 C-161.14367187 219.73431641 -161.09984375 219.03113281 -161.0546875 218.30664062 C-160.80390564 214.59019276 -160.40091469 211.00576194 -159.5625 207.375 C-159.2325 207.375 -158.9025 207.375 -158.5625 207.375 C-158.53671875 208.59574219 -158.5109375 209.81648437 -158.484375 211.07421875 C-157.90860271 230.03799409 -153.45958856 245.75486647 -139.23046875 259.1875 C-130.30093871 266.50893019 -118.18519664 271.89653564 -106.5625 272.375 C-105.51191406 272.4265625 -104.46132813 272.478125 -103.37890625 272.53125 C-83.63918389 273.05014741 -69.50646096 265.43759228 -55.48226547 252.21144485 C-48.34103589 245.38015504 -41.39312067 238.34755852 -34.41015625 231.35546875 C-32.57855044 229.52453788 -30.74679631 227.69375536 -28.91490173 225.8631134 C-25.09846208 222.04813954 -21.28376725 218.23143366 -17.47045898 214.41333008 C-13.07559584 210.01300383 -8.67711056 205.61632282 -4.27677351 201.22147101 C-0.01581235 196.96560638 4.24231823 192.70692238 8.49926949 188.44704628 C10.30022416 186.64542625 12.10191721 184.84454401 13.90437126 183.04442406 C16.41906538 180.53227481 18.93052301 178.01693339 21.44116211 175.50073242 C22.55008568 174.3948452 22.55008568 174.3948452 23.68141174 173.26661682 C27.48571092 169.44672328 31.03453183 165.55517244 34.4375 161.375 C36.2109375 159.7578125 36.2109375 159.7578125 37.8125 158.5 C40.35159861 156.405742 42.5175145 154.22525066 44.64233398 151.71411133 C48.51327696 147.23474304 52.61222946 143.02135621 56.78515625 138.82421875 C57.56007919 138.04359573 58.33500214 137.26297272 59.13340759 136.45869446 C60.75983242 134.82288852 62.38766481 133.18848097 64.0168457 131.55541992 C66.50349368 129.05899258 68.97927166 126.55209558 71.45507812 124.04492188 C73.04361152 122.44986395 74.63278233 120.85544052 76.22265625 119.26171875 C76.95718521 118.51484299 77.69171417 117.76796722 78.44850159 116.99845886 C83.1745402 112.29274891 87.75508242 107.95061788 94.8125 107.9375 C101.02689382 108.16805087 105.62029835 110.46460852 109.875 114.9375 C112.57396754 119.14788937 112.76055314 122.44843954 112.4375 127.375 C110.46040759 134.39565342 107.22112027 138.28605406 102.04785156 143.31640625 C100.92289276 144.44005081 100.92289276 144.44005081 99.77520752 145.58639526 C97.3043746 148.04867957 94.81642828 150.4928829 92.328125 152.9375 C90.59923812 154.65450836 88.87153339 156.37270781 87.1449585 158.09204102 C82.60132249 162.61095984 78.04332651 167.1151067 73.48168945 171.61584473 C67.0663786 177.95071896 60.67063608 184.30535729 54.27288818 190.65795898 C50.86904593 194.03770554 47.45977891 197.4118271 44.04595947 200.78149414 C42.4788563 202.3321682 40.9117774 203.8828668 39.34472656 205.43359375 C38.64524902 206.12162079 37.94577148 206.80964783 37.22509766 207.51852417 C33.29795488 211.41093516 29.61082631 215.43102681 26.00044441 219.61779976 C24.09412602 221.76105137 22.04628681 223.64128057 19.86645508 225.50366211 C13.7951442 230.86218956 8.15422571 236.60716483 2.48059654 242.37899971 C-0.14928369 245.05168462 -2.78914312 247.71442593 -5.42830944 250.37793636 C-10.31683575 255.31180072 -15.20131318 260.24951403 -20.0690918 265.20385742 C-23.48011342 268.67476248 -26.90364689 272.13290144 -30.33537865 275.58332634 C-31.62714859 276.88671478 -32.91441167 278.19458829 -34.19671059 279.50729561 C-45.88512731 291.46593687 -57.29569765 299.61439497 -73.5625 304.375 C-74.84930664 304.76558594 -74.84930664 304.76558594 -76.16210938 305.1640625 C-84.16010489 307.40967401 -91.65876111 307.82876179 -99.9375 307.75 C-101.14921875 307.76160156 -102.3609375 307.77320313 -103.609375 307.78515625 C-127.97563131 307.70722579 -149.53966887 298.05422654 -166.8203125 281.171875 C-179.29583933 268.44754849 -187.76914937 253.83279597 -191.5625 236.375 C-191.78550781 235.39402344 -192.00851563 234.41304687 -192.23828125 233.40234375 C-197.03113725 209.17722806 -190.70526615 186.14773942 -178.39453125 165.265625 C-171.07716983 154.53398567 -160.75507232 145.43540031 -151.57569122 136.31302643 C-149.46169997 134.21203149 -147.35105285 132.10772462 -145.2411499 130.00262451 C-140.76777662 125.5405583 -136.29044013 121.08248248 -131.8125 116.625 C-126.60251296 111.43873341 -121.39422862 106.25077935 -116.1901474 101.05858612 C-114.12339647 98.99825583 -112.05363019 96.94098917 -109.98370361 94.8838501 C-104.55544901 89.47656749 -99.18217202 84.09967506 -94.21893311 78.25628662 C-90.59021314 74.13498387 -86.61810193 70.33143482 -82.71875 66.46875 C-81.3005835 65.05637068 -79.88241993 63.64398839 -78.46442413 62.23143768 C-75.50183555 59.28187976 -72.53465979 56.33693688 -69.56829834 53.39117432 C-67.11668969 50.95622894 -64.66612669 48.52025184 -62.21813965 46.08166504 C-60.39181571 44.26279387 -58.56324639 42.44617348 -56.73205566 40.63220215 C-52.30116817 36.2187851 -48.027395 31.75158586 -43.99182129 26.9720459 C-42.06814756 24.82263746 -39.81235484 23.17488387 -37.5625 21.375 C-36.4805672 20.18403522 -35.42033532 18.97321289 -34.375 17.75 C-13.66450526 -6.23293222 -13.66450526 -6.23293222 0 0 Z \" fill=\"#4E4F4E\" transform=\"translate(381.5625,197.625)\"\\/>\\r\\n<path d=\"M0 0 C3.42749062 2.56220547 6.72499842 5.24718238 10 8 C10.82886719 8.63292969 11.65773438 9.26585937 12.51171875 9.91796875 C28.63219672 23.40653195 40.44529289 46.16317012 43 67 C43.15606322 69.85577759 43.18993638 72.70279959 43.1875 75.5625 C43.18814453 76.34737793 43.18878906 77.13225586 43.18945312 77.94091797 C43.12825917 84.77377975 42.32786256 91.28955172 41 98 C41.72960937 97.96519531 42.45921875 97.93039063 43.2109375 97.89453125 C58.74902464 97.49169195 72.95532939 100.39900481 87 107 C88.09828125 107.51433594 89.1965625 108.02867187 90.328125 108.55859375 C99.08786362 112.97020124 106.56565176 118.67140136 114 125 C114.67675781 125.57234375 115.35351562 126.1446875 116.05078125 126.734375 C131.99420027 141.49820932 142.89642228 163.70607705 144.203125 185.3671875 C144.57342801 213.07819589 134.63930454 237.71305786 115.390625 257.7109375 C112.95350702 260.16968671 110.48462222 262.58942282 108 265 C103.97046752 269.01969293 99.95379311 273.05227416 95.93408203 277.08178711 C88.88795461 284.14427631 81.83926215 291.20419987 74.78912544 298.26268673 C70.5298006 302.52723536 66.27141769 306.79271596 62.01513672 311.06030273 C57.88781328 315.19851564 53.75802984 319.33425895 49.62655258 323.46832466 C48.0572762 325.03944212 46.48887707 326.61143634 44.92139053 328.18433952 C42.72483739 330.38818531 40.52514013 332.58884743 38.32470703 334.78881836 C37.68447601 335.43264465 37.044245 336.07647095 36.38461304 336.73980713 C33.50780557 339.61011255 30.61237399 342.36059786 27.47970581 344.95069885 C24.21992991 347.69080973 21.51589635 350.74092448 18.75770378 353.97688293 C15.91652249 357.24708262 12.85021292 360.28085327 9.77954102 363.33398438 C9.09576889 364.01790253 8.41199677 364.70182068 7.70750427 365.40646362 C5.47533697 367.63794131 3.23966242 369.86586859 1.00390625 372.09375 C-0.55572544 373.65151412 -2.11513464 375.20950102 -3.67433167 376.7677002 C-7.75733812 380.84690815 -11.8433399 384.92310269 -15.92999268 388.99865723 C-20.1081518 393.16654461 -24.28344362 397.33730224 -28.45898438 401.5078125 C-36.63653396 409.67467186 -44.81725377 417.83834763 -53 426 C-51.12899575 430.03172986 -48.46393214 432.98111278 -45.4375 436.1875 C-44.9017334 436.76193848 -44.3659668 437.33637695 -43.81396484 437.92822266 C-39.94953724 442.05066272 -35.97713547 446.05279132 -31.94921875 450.015625 C-30.17516968 451.82167094 -28.54782924 453.67360907 -26.9375 455.625 C-24.84092961 458.14319473 -22.62587956 460.25775051 -20.125 462.375 C-16.36940738 465.56330425 -13.16062017 469.05266615 -9.95703125 472.7890625 C-7.73481414 475.29959121 -5.37776927 477.63646887 -3 480 C-2.0790962 480.97379522 -1.16119021 481.95043298 -0.24609375 482.9296875 C0.69004068 483.91151887 1.62623894 484.89328938 2.5625 485.875 C3.03107422 486.38546875 3.49964844 486.8959375 3.98242188 487.421875 C5.510437 489.06080168 5.510437 489.06080168 8 491 C11.9051454 490.77798957 13.81655228 488.53607445 16.46142578 485.84741211 C17.33558136 484.96657455 18.20973694 484.085737 19.11038208 483.1782074 C20.05536943 482.21126315 21.00034598 481.24430835 21.9453125 480.27734375 C22.920492 479.29148699 23.89648669 478.30643598 24.8732605 477.32215881 C27.44012852 474.73252172 29.99872246 472.13488145 32.55480957 469.53460693 C36.65177923 465.36740623 40.75628932 461.20775265 44.8699913 457.05706978 C46.30697926 455.6033324 47.73740879 454.14335354 49.16751099 452.68284607 C50.03536224 451.80516068 50.9032135 450.92747528 51.79736328 450.02319336 C52.56251251 449.24455429 53.32766174 448.46591522 54.11599731 447.66368103 C56 446 56 446 58 446 C58 446.66 58 447.32 58 448 C56.50390625 449.4375 56.50390625 449.4375 54.5625 451 C51.84811762 453.14525044 51.84811762 453.14525044 50 456 C49.34 456 48.68 456 48 456 C47.67 456.99 47.34 457.98 47 459 C45.43359375 460.54296875 45.43359375 460.54296875 43.4375 462.1875 C38.17275157 466.65542164 32.84718417 471.22922374 29 477 C27.00334402 478.67067133 25.00348966 480.33752986 23 482 C22.67 482.66 22.34 483.32 22 484 C21.34 484 20.68 484 20 484 C20 484.66 20 485.32 20 486 C19.34 486 18.68 486 18 486 C18.33 486.99 18.66 487.98 19 489 C17.02 489.66 15.04 490.32 13 491 C13 492.32 13 493.64 13 495 C12.01 495 11.02 495 10 495 C9.34 495.66 8.68 496.32 8 497 C8 496.34 8 495.68 8 495 C6.68 495 5.36 495 4 495 C4 493.68 4 492.36 4 491 C2.27062171 488.68721883 2.27062171 488.68721883 0 487 C-0.99 487 -1.98 487 -3 487 C-3 486.34 -3 485.68 -3 485 C-4.32 484.67 -5.64 484.34 -7 484 C-6.01 484 -5.02 484 -4 484 C-8.46681491 478.12779369 -8.46681491 478.12779369 -15 475 C-15 473.68 -15 472.36 -15 471 C-15.66 471 -16.32 471 -17 471 C-17.99 469.515 -17.99 469.515 -19 468 C-19.99 467.34 -20.98 466.68 -22 466 C-23.19050011 464.59019724 -24.38119197 463.1796442 -25.5234375 461.73046875 C-27.55428953 459.35039614 -29.77185683 457.19658307 -32 455 C-34.25242531 452.77327167 -36.5015621 450.54325356 -38.75 448.3125 C-39.33910156 447.73177734 -39.92820312 447.15105469 -40.53515625 446.55273438 C-44.88709821 442.22580357 -44.88709821 442.22580357 -46 440 C-46.99 439.34 -47.98 438.68 -49 438 C-50.05382648 436.86304725 -51.07355437 435.69381672 -52.0625 434.5 C-53.66107015 432.58008878 -55.23130724 430.76869276 -57 429 C-56.84783044 424.18642097 -54.47070776 421.97966629 -51.16015625 418.69921875 C-50.43692421 417.97736137 -50.43692421 417.97736137 -49.69908142 417.24092102 C-48.68244474 416.23030596 -47.66097175 415.22453549 -46.63500977 414.22338867 C-45.06068591 412.68572815 -43.5031095 411.13250648 -41.94726562 409.57617188 C-34.29519213 402 -34.29519213 402 -32 402 C-31.62875 401.13375 -31.62875 401.13375 -31.25 400.25 C-29.81700012 397.67060021 -28.21575324 395.93878408 -26 394 C-25.34 394 -24.68 394 -24 394 C-23.67 392.68 -23.34 391.36 -23 390 C-22.360625 389.896875 -21.72125 389.79375 -21.0625 389.6875 C-20.0415625 389.3471875 -20.0415625 389.3471875 -19 389 C-18.67 388.01 -18.34 387.02 -18 386 C-15.68108896 383.48784637 -13.34357316 381.26220057 -10.625 379.1875 C-7.57665779 376.64721483 -5.11737212 373.82085859 -2.55078125 370.8046875 C-1 369 -1 369 1 367 C1 365.68 1 364.36 1 363 C1.78375 362.9175 2.5675 362.835 3.375 362.75 C6.14749104 362.27193661 6.14749104 362.27193661 7.3125 359.9375 C7.539375 359.298125 7.76625 358.65875 8 358 C8.66 358 9.32 358 10 358 C9.67 357.01 9.34 356.02 9 355 C10.10988281 354.87238281 10.10988281 354.87238281 11.2421875 354.7421875 C14.55770348 353.84990983 15.79997129 352.61414838 18.125 350.125 C18.78757812 349.42632812 19.45015625 348.72765625 20.1328125 348.0078125 C20.74898437 347.34523438 21.36515625 346.68265625 22 346 C22.57492187 345.50242187 23.14984375 345.00484375 23.7421875 344.4921875 C25.42967033 342.8155324 25.42967033 342.8155324 25 339 C26.0209375 338.9690625 26.0209375 338.9690625 27.0625 338.9375 C30.93702916 337.70094814 32.75721296 335.46267219 35.44921875 332.49609375 C37 331 37 331 39 331 C39 330.34 39 329.68 39 329 C39.66 329 40.32 329 41 329 C41.20625 328.46890625 41.4125 327.9378125 41.625 327.390625 C43.57961192 323.99226564 46.22123717 321.48944072 49 318.75 C49.5465625 318.19570313 50.093125 317.64140625 50.65625 317.0703125 C54.7466133 313 54.7466133 313 57 313 C57.37125 312.13375 57.37125 312.13375 57.75 311.25 C59.18299988 308.67060021 60.78424676 306.93878408 63 305 C63.66 305 64.32 305 65 305 C65.268125 304.401875 65.53625 303.80375 65.8125 303.1875 C66.99917406 301.00152146 68.09599113 299.58667406 70 298 C70.66 298 71.32 298 72 298 C72 297.34 72 296.68 72 296 C73.875 293.875 73.875 293.875 76 292 C76.66 292 77.32 292 78 292 C78.33 291.01 78.66 290.02 79 289 C80.7421875 287.28125 80.7421875 287.28125 82.875 285.5 C86.42310419 282.51487913 89.41648785 279.87526823 92 276 C93.01477027 275.11404772 94.05792973 274.25971115 95.125 273.4375 C96.07375 272.633125 97.0225 271.82875 98 271 C98 270.34 98 269.68 98 269 C98.969375 268.360625 99.93875 267.72125 100.9375 267.0625 C104.24255225 265.28938993 104.24255225 265.28938993 105 262 C106.6015625 260.7109375 106.6015625 260.7109375 108.625 259.375 C113.3111305 255.999971 116.98975571 251.93868204 120 247 C120 246.01 120 245.02 120 244 C120.60070312 243.75894531 121.20140625 243.51789063 121.8203125 243.26953125 C129.00103771 239.08720922 133.12935403 226.4072078 136 219 C136.633544 216.23807942 136.8885998 213.840705 137 211 C137.66 211 138.32 211 139 211 C139 209.68 139 208.36 139 207 C138.34 206.67 137.68 206.34 137 206 C137 205.01 137 204.02 137 203 C137.99 202.67 138.98 202.34 140 202 C140.020625 200.741875 140.04125 199.48375 140.0625 198.1875 C140.07990234 197.12595703 140.07990234 197.12595703 140.09765625 196.04296875 C140.08263217 193.79694539 140.08263217 193.79694539 139 191 C138.34 190.67 137.68 190.34 137 190 C138 187 138 187 139 186 C138.34 186 137.68 186 137 186 C137.33 184.02 137.66 182.04 138 180 C138.66 180 139.32 180 140 180 C139.43338559 177.26638688 138.84754751 174.53936791 138.25 171.8125 C138.09273437 171.04357422 137.93546875 170.27464844 137.7734375 169.48242188 C136.69877567 164.66711023 135.36180203 161.74758259 132 158 C131.25 155.1875 131.25 155.1875 131 153 C131 153.66 131 154.32 131 155 C130.34 155 129.68 155 129 155 C128.9175 153.80375 128.835 152.6075 128.75 151.375 C128.21733698 147.09847689 126.82507007 144.32361185 124 141 C123.01 141 122.02 141 121 141 C121 139.35 121 137.7 121 136 C120.38125 135.9175 119.7625 135.835 119.125 135.75 C117 135 117 135 115.75 132.9375 C115.5025 132.298125 115.255 131.65875 115 131 C114.34 131 113.68 131 113 131 C112.38125 129.88625 112.38125 129.88625 111.75 128.75 C109.6354611 125.42715316 107.31350146 124.07093842 104 122 C103.46375 121.443125 102.9275 120.88625 102.375 120.3125 C100.67845363 118.69306938 99.28050956 118.3931913 97 118 C97 117.34 97 116.68 97 116 C92.7362719 113.64089647 92.7362719 113.64089647 88 113 C88.33 112.34 88.66 111.68 89 111 C88.236875 110.855625 87.47375 110.71125 86.6875 110.5625 C84 110 84 110 81 109 C81 108.34 81 107.68 81 107 C80.21625 106.896875 79.4325 106.79375 78.625 106.6875 C74.75663885 105.9538453 71.18204442 104.80361087 67.46484375 103.5234375 C64.97509534 102.82275319 64.97509534 102.82275319 62.37890625 103.5390625 C60 104 60 104 57 102 C54.24582682 101.69933846 51.57354853 101.49074701 48.8125 101.375 C48.06291016 101.33632812 47.31332031 101.29765625 46.54101562 101.2578125 C44.69440801 101.16371784 42.8472381 101.08077681 41 101 C40.67 102.32 40.34 103.64 40 105 C39.34 103.68 38.68 102.36 38 101 C37.67 101.66 37.34 102.32 37 103 C36.67 102.34 36.34 101.68 36 101 C35.01 100.34 34.02 99.68 33 99 C33.99 98.67 34.98 98.34 36 98 C36.33 97.01 36.66 96.02 37 95 C36.34 94.67 35.68 94.34 35 94 C35.99 93.67 36.98 93.34 38 93 C38.76636091 89.53910321 39.17149371 86.23922512 39.31640625 82.69921875 C39.37924805 81.23452148 39.37924805 81.23452148 39.44335938 79.74023438 C39.48267578 78.73283203 39.52199219 77.72542969 39.5625 76.6875 C39.62727539 75.14739258 39.62727539 75.14739258 39.69335938 73.57617188 C39.79906825 71.05090431 39.90116468 68.52554438 40 66 C39.34 65.67 38.68 65.34 38 65 C38 63.35 38 61.7 38 60 C37.34 59.67 36.68 59.34 36 59 C35.38933346 56.08237098 35.02068901 53.17354431 34.66796875 50.21484375 C31.42374716 34.60084157 18.42157013 17.93455984 5.46875 9.19140625 C4.9840625 8.79824219 4.499375 8.40507812 4 8 C4 7.34 4 6.68 4 6 C3.319375 5.773125 2.63875 5.54625 1.9375 5.3125 C-1.17771875 3.92059375 -3.57516624 2.20593297 -6.25390625 0.12109375 C-8.16180328 -1.10388712 -9.81616476 -1.45962359 -12 -2 C-12.99 -2.99 -12.99 -2.99 -14 -4 C-16.20250992 -4.46006346 -16.20250992 -4.46006346 -18.625 -4.625 C-19.44226563 -4.69976562 -20.25953125 -4.77453125 -21.1015625 -4.8515625 C-21.72804688 -4.90054688 -22.35453125 -4.94953125 -23 -5 C-22.67 -5.99 -22.34 -6.98 -22 -8 C-24.97 -8.33 -27.94 -8.66 -31 -9 C-31 -9.66 -31 -10.32 -31 -11 C-49.37947658 -13.15874759 -66.64446243 -13.26288115 -83.84375 -5.8671875 C-86 -5 -86 -5 -88.21875 -4.5078125 C-88.8065625 -4.34023437 -89.394375 -4.17265625 -90 -4 C-90.33 -3.34 -90.66 -2.68 -91 -2 C-92.73659206 -0.78295036 -94.51436512 0.375868 -96.3125 1.5 C-97.27800781 2.1084375 -98.24351562 2.716875 -99.23828125 3.34375 C-101.45980722 4.67603715 -103.66257047 5.88958217 -106 7 C-106 7.66 -106 8.32 -106 9 C-107.49609375 10.21875 -107.49609375 10.21875 -109.4375 11.5 C-112.22531847 13.2865363 -112.22531847 13.2865363 -114 16 C-114.66 16 -115.32 16 -116 16 C-116 16.66 -116 17.32 -116 18 C-117.75 19.7265625 -117.75 19.7265625 -120 21.625 C-120.7425 22.25664062 -121.485 22.88828125 -122.25 23.5390625 C-122.8275 24.02117187 -123.405 24.50328125 -124 25 C-124.66 24.67 -125.32 24.34 -126 24 C-121.33333333 19.33333333 -116.66666667 14.66666667 -112 10 C-111.56171875 9.50371094 -111.1234375 9.00742188 -110.671875 8.49609375 C-81.97403325 -22.73817341 -33.5672977 -22.71149078 0 0 Z M140 181 C140 181.66 140 182.32 140 183 C139.01 183.495 139.01 183.495 138 184 C138.99 184 139.98 184 141 184 C140.67 183.01 140.34 182.02 140 181 Z \" fill=\"#333333\" transform=\"translate(427,131)\"\\/>\\r\\n<path d=\"M0 0 C0.66 0 1.32 0 2 0 C2 0.66 2 1.32 2 2 C3.65 1.67 5.3 1.34 7 1 C7 1.66 7 2.32 7 3 C8.134375 3.0825 9.26875 3.165 10.4375 3.25 C24.13006697 5.0276315 36.23562157 14.92865286 45 25 C47.89707818 28.85665893 50.35918205 32.87856858 52.75 37.0625 C53.1625 37.701875 53.575 38.34125 54 39 C54.66 39 55.32 39 56 39 C55.96519531 40.73056641 55.96519531 40.73056641 55.9296875 42.49609375 C55.92811697 46.06984242 56.27780802 49.45862839 56.8137207 52.98632812 C58.61312827 64.98802377 57.81459554 76.7025938 53 88 C52.68546875 88.76183594 52.3709375 89.52367187 52.046875 90.30859375 C46.78805558 101.88169987 38.1230192 111.33397805 29 120 C26.36900683 122.6096377 23.7620209 125.24068616 21.17578125 127.89453125 C20.2213791 128.86721196 19.26695188 129.83986808 18.3125 130.8125 C17.82716797 131.31458984 17.34183594 131.81667969 16.84179688 132.33398438 C15.59875394 133.59417273 14.30300108 134.80191044 13 136 C12.34 136 11.68 136 11 136 C10.61714844 136.87289673 10.61714844 136.87289673 10.2265625 137.76342773 C8.87583737 140.22640403 7.38452615 141.82791981 5.375 143.78515625 C4.66859375 144.48060547 3.9621875 145.17605469 3.234375 145.89257812 C2.49703125 146.60865234 1.7596875 147.32472656 1 148.0625 C-0.46056988 149.48859839 -1.91899767 150.91689484 -3.375 152.34765625 C-4.34566406 153.29137085 -4.34566406 153.29137085 -5.3359375 154.25415039 C-7.1916303 156.10051934 -7.1916303 156.10051934 -9 159 C-10.07494116 159.99100369 -11.18216595 160.94767495 -12.3125 161.875 C-16.06462795 165.02647545 -19.69995713 168.17993999 -22.5625 172.1875 C-24 174 -24 174 -26.0625 175 C-29.36923285 176.70670082 -29.87059771 179.61179314 -31 183 C-31.66 182.67 -32.32 182.34 -33 182 C-32.48539161 177.98216255 -31.56620273 176.08230989 -28.6484375 173.29296875 C-27.96136719 172.62330078 -27.27429688 171.95363281 -26.56640625 171.26367188 C-25.84324219 170.57853516 -25.12007812 169.89339844 -24.375 169.1875 C-22.96363944 167.82942285 -21.55477085 166.46875108 -20.1484375 165.10546875 C-19.52114746 164.50887451 -18.89385742 163.91228027 -18.24755859 163.29760742 C-16.37566937 161.3840348 -14.64493493 159.43790905 -12.90625 157.40625 C-8.77718809 152.65173799 -4.32391326 148.25555383 0.16923141 143.84729958 C1.68814694 142.35553153 3.20222416 140.85900408 4.71499634 139.36100769 C9.01104731 135.10718973 13.30969461 130.85612116 17.625 126.62182617 C20.28100247 124.0149944 22.92657847 121.39794352 25.56612015 118.7744503 C26.55973773 117.79057284 27.55695543 116.81031443 28.55817795 115.83417702 C43.84445848 100.92244973 53.97378657 84.47555139 54.375 62.6875 C54.3457865 47.03421971 47.70621587 33.46104506 37.6875 21.6484375 C30.67510889 14.73797068 21.66583684 9.15223405 12 7 C10.89011719 6.73123047 10.89011719 6.73123047 9.7578125 6.45703125 C-6.40101856 3.77915132 -20.67361365 7.50178967 -34 17 C-36.61657931 19.35871352 -39.05790806 21.79292216 -41.453125 24.375 C-43.44407151 26.42701848 -45.41761358 28.24848113 -47.58528137 30.09725952 C-52.32264301 34.22205754 -56.75203088 38.61894475 -61.18237305 43.06884766 C-62.50344055 44.38969612 -62.50344055 44.38969612 -63.85119629 45.73722839 C-66.24329557 48.12990099 -68.63316754 50.52475663 -71.02204108 52.92064714 C-73.53361679 55.43852454 -76.04807306 57.95352213 -78.56221008 60.46884155 C-83.31790569 65.22763407 -88.07104999 69.98896628 -92.82325917 74.75124013 C-98.21733275 80.15649165 -103.61424378 85.55890624 -109.01140153 90.96107793 C-118.24040074 100.19874598 -127.46728985 109.43851619 -136.69178772 118.68067932 C-137.83328781 119.82434715 -137.83328781 119.82434715 -138.99784851 120.99111938 C-139.69623526 121.69106647 -140.394622 122.39101357 -141.11417198 123.11217117 C-142.72286044 124.7225664 -144.33497868 126.32941849 -145.94807434 127.93539429 C-147.73209655 129.73044102 -149.38468315 131.55427743 -151 133.5 C-155.19264326 138.43752912 -159.76558218 142.72999189 -164.7421875 146.86328125 C-166.56962925 148.59271142 -168.11159867 150.28674105 -169.72509766 152.20263672 C-175.70880784 159.07187348 -182.23344942 165.44014361 -188.65625 171.89453125 C-189.70918999 172.95358453 -189.70918999 172.95358453 -190.78340149 174.03403282 C-194.49083512 177.76220873 -198.20145133 181.48718418 -201.91455078 185.2097168 C-205.73937792 189.04565758 -209.55237312 192.8931438 -213.36292267 196.74326038 C-216.30742847 199.71391385 -219.26078845 202.67564409 -222.21659851 205.63504601 C-223.62652198 207.04983045 -225.03307451 208.46798287 -226.43611145 209.88959694 C-228.39795273 211.87581651 -230.3720806 213.8489956 -232.34960938 215.81958008 C-232.92124313 216.4040239 -233.49287689 216.98846771 -234.08183289 217.59062195 C-239.45964264 222.90009218 -244.70616811 225.4242954 -252.4375 225.5 C-258.53564556 225.34579402 -262.51938091 224.17161088 -267 220 C-271.03680982 215.44565046 -272.26375374 210.98518094 -272 205 C-269.88724033 195.33672219 -262.56831547 189.26753767 -255.45117188 182.95727539 C-250.07931612 178.12951494 -244.97828668 173.07300955 -239.90625 167.93359375 C-238.51118364 166.52912101 -237.11611162 165.12465383 -235.7206955 163.7205286 C-232.32449556 160.30155802 -228.9340701 156.87687597 -225.54589844 153.44995117 C-223.62521491 151.50772508 -221.7019257 149.56814903 -219.77575684 147.63136292 C-217.97079815 145.81603794 -216.16996976 143.99659523 -214.37365723 142.17271423 C-213.56521362 141.36089188 -212.75677002 140.54906952 -211.92382812 139.71264648 C-211.21230591 138.99366684 -210.50078369 138.27468719 -209.7677002 137.53392029 C-208 136 -208 136 -206 136 C-205.67 135.01 -205.34 134.02 -205 133 C-202.9375 131.8125 -202.9375 131.8125 -201 131 C-202.28519565 133.86697492 -203.57129254 135.97607712 -206 138 C-206.66 138 -207.32 138 -208 138 C-208.33 138.99 -208.66 139.98 -209 141 C-209.66 141 -210.32 141 -211 141 C-211 141.66 -211 142.32 -211 143 C-212.62626404 144.38232443 -214.2925002 145.71937515 -216 147 C-215.67 147.66 -215.34 148.32 -215 149 C-215.59554687 149.09152344 -216.19109375 149.18304688 -216.8046875 149.27734375 C-219.52562732 150.17302679 -220.39124634 151.31588204 -222.125 153.5625 C-223.6328125 155.50390625 -223.6328125 155.50390625 -225 157 C-225.66 157 -226.32 157 -227 157 C-227 157.66 -227 158.32 -227 159 C-228.46875 160.4453125 -228.46875 160.4453125 -230.5 162.125 C-234.9046751 165.86702486 -238.95242409 169.87971314 -243 174 C-245.53967281 176.54793191 -248.08768713 179.08652314 -250.6484375 181.61328125 C-262.92551286 192.59889619 -262.92551286 192.59889619 -268.5 207.3125 C-268.37499013 211.98474386 -266.82804429 214.86572053 -263.83984375 218.40234375 C-259.84331795 221.8727876 -255.45417968 221.87463968 -250.375 222.3125 C-244.31062737 221.75098402 -240.22524675 218.63410015 -235.8125 214.625 C-234.97332031 213.87476563 -234.13414062 213.12453125 -233.26953125 212.3515625 C-231.03399558 210.03522434 -229.58941377 207.78147409 -228 205 C-224.5862069 202 -224.5862069 202 -222 202 C-221.67 201.01 -221.34 200.02 -221 199 C-219.328125 197.3515625 -219.328125 197.3515625 -217.25 195.625 C-212.31461193 191.42992014 -208.0165607 187.08764355 -204 182 C-202.375 180.1875 -202.375 180.1875 -201 179 C-200.34 179 -199.68 179 -199 179 C-199 178.34 -199 177.68 -199 177 C-198.34 177 -197.68 177 -197 177 C-196.74476563 176.42894531 -196.48953125 175.85789062 -196.2265625 175.26953125 C-194.86118469 172.74314747 -193.28568001 170.83035427 -191.375 168.6875 C-190.74335938 167.96949219 -190.11171875 167.25148438 -189.4609375 166.51171875 C-187.4843775 164.49437259 -185.50122842 162.67521818 -183.36328125 160.83984375 C-178.26324098 156.43369862 -173.55294867 151.6614038 -168.8125 146.875 C-167.49862305 145.55435547 -167.49862305 145.55435547 -166.15820312 144.20703125 C-163.77032349 141.80647902 -161.38493774 139.40347423 -159 137 C-156.38518537 134.37404269 -153.75928697 131.76215533 -151.10546875 129.17578125 C-150.13278804 128.2213791 -149.16013192 127.26695188 -148.1875 126.3125 C-147.68541016 125.82716797 -147.18332031 125.34183594 -146.66601562 124.84179688 C-145.40582727 123.59875394 -144.19808956 122.30300108 -143 121 C-143 120.34 -143 119.68 -143 119 C-142.01 118.34 -141.02 117.68 -140 117 C-139.7497843 113.91634129 -139.7497843 113.91634129 -140 111 C-137.03 111.495 -137.03 111.495 -134 112 C-133.01 110.515 -133.01 110.515 -132 109 C-131.34 109 -130.68 109 -130 109 C-130 108.34 -130 107.68 -130 107 C-127.3448818 104.10350742 -124.51524651 101.57630508 -121.5 99.0625 C-118.22681225 96.29941943 -115.69117688 93.32856088 -113 90 C-111.3540349 88.31288577 -109.68762851 86.6454378 -108 85 C-106.88625 83.8553125 -106.88625 83.8553125 -105.75 82.6875 C-103.43385795 80.42399754 -101.06906759 78.30845357 -98.625 76.1875 C-95.06447522 73.04931094 -91.94732158 69.77701068 -88.90234375 66.14453125 C-85.82897469 62.67989138 -82.42022598 59.55607233 -79.0390625 56.39453125 C-76.85484866 53.82954449 -76.3174074 52.30926607 -76 49 C-75.071875 48.731875 -74.14375 48.46375 -73.1875 48.1875 C-70.1688359 47.06289965 -69.0844857 46.29293427 -67 44 C-66.34 44 -65.68 44 -65 44 C-64.731875 43.401875 -64.46375 42.80375 -64.1875 42.1875 C-63.00082594 40.00152146 -61.90400887 38.58667406 -60 37 C-59.34 37 -58.68 37 -58 37 C-57.67 36.01 -57.34 35.02 -57 34 C-55.5625 32.3125 -55.5625 32.3125 -54 31 C-53.34 31 -52.68 31 -52 31 C-51.76667969 30.43023437 -51.53335938 29.86046875 -51.29296875 29.2734375 C-49.14569391 25.49786663 -45.80722144 23.05516205 -42.55859375 20.23046875 C-41.12205942 18.97816173 -39.70161533 17.70443693 -38.34765625 16.36328125 C-31.74531779 9.9710968 -19.47296937 3.09276219 -10.3125 2.9375 C-9.219375 2.958125 -8.12625 2.97875 -7 3 C-6.67 2.34 -6.34 1.68 -6 1 C-4.02 1 -2.04 1 0 1 C0 0.67 0 0.34 0 0 Z M54 42 C55 44 55 44 55 44 Z M-139 112 C-138 114 -138 114 -138 114 Z M-137 113 C-137.33 113.66 -137.66 114.32 -138 115 C-137.01 114.67 -136.02 114.34 -135 114 C-135.66 113.67 -136.32 113.34 -137 113 Z \" fill=\"#525253\" transform=\"translate(376,151)\"\\/>\\r\\n<path d=\"M0 0 C2 3 2 3 3.19921875 5.79296875 C9.19823293 19.47575963 19.73655409 29.78838587 31.0703125 39.32421875 C33.50276463 41.43661139 35.72784602 43.71502125 38 46 C39.07469036 47.07537464 40.14974532 48.15038498 41.22509766 49.22509766 C82.1500651 90.1500651 123.07503255 131.07503255 164 172 C164.88460403 172.88427673 165.76920807 173.76855347 166.68061829 174.67962646 C168.98406803 176.98406122 171.27994211 179.29581052 173.57421875 181.609375 C175.27858229 183.32297987 176.9830111 185.03651982 178.6875 186.75 C179.55439453 187.62527344 180.42128906 188.50054688 181.31445312 189.40234375 C182.14267578 190.23378906 182.97089844 191.06523438 183.82421875 191.921875 C184.57791748 192.68081055 185.33161621 193.43974609 186.1081543 194.22167969 C187.88449005 196.06172252 187.88449005 196.06172252 190 197 C190 197.66 190 198.32 190 199 C190.66 199 191.32 199 192 199 C192.53625 199.680625 193.0725 200.36125 193.625 201.0625 C196.19413667 204.24011641 199.00329506 206.70711889 202.09375 209.359375 C204.17573081 211.15124373 206.17355425 212.94524853 208 215 C208 215.66 208 216.32 208 217 C208.5775 217.2475 209.155 217.495 209.75 217.75 C212.32939979 219.18299988 214.06121592 220.78424676 216 223 C216 223.66 216 224.32 216 225 C216.66 225 217.32 225 218 225 C218 225.66 218 226.32 218 227 C218.58177946 227.2563236 219.16355892 227.51264719 219.76296806 227.77673817 C222.21542582 229.11779992 223.82673234 230.58877009 225.79251099 232.57218933 C226.53241776 233.31368225 227.27232452 234.05517517 228.03465271 234.81913757 C228.83677689 235.63316544 229.63890106 236.4471933 230.46533203 237.28588867 C231.31792099 238.14300446 232.17050995 239.00012024 233.04893494 239.88320923 C234.9014146 241.74665345 236.7519919 243.61178848 238.59970474 245.47994041 C241.52885629 248.44098995 244.46622696 251.39379342 247.40499878 254.34529114 C254.70768716 261.68202731 262.00115159 269.027915 269.28948975 276.37890625 C274.94655308 282.08458786 280.60687333 287.78694384 286.27786338 293.4787882 C289.19183901 296.40420424 292.09876191 299.33639037 295.00038457 302.27405679 C297.24690026 304.54451307 299.50341261 306.805002 301.75830078 309.06713867 C302.54827957 309.87104538 303.33825836 310.67495209 304.1521759 311.5032196 C316.07378375 323.40539449 329.22452005 330.76183746 346.25 331.375 C368.4457723 330.98605539 382.08084288 316.1095762 396.625 301.4375 C397.63908446 300.41838246 398.65340625 299.39950101 399.66796875 298.38085938 C402.11470835 295.92327588 404.55826544 293.46255754 407 291 C407 294.79993489 405.57485802 295.80574787 403.0131073 298.42938232 C402.14616997 299.2919162 402.14616997 299.2919162 401.26171875 300.171875 C400.6663179 300.7725177 400.07091705 301.3731604 399.45747375 301.99200439 C398.18922871 303.26668461 396.91706565 304.53747652 395.64135742 305.8046875 C393.72106292 307.71658386 391.81996532 309.64612932 389.91992188 311.578125 C376.22400065 325.35211789 363.8805098 333.23244539 344.04370117 333.32348633 C334.25538145 333.18372399 325.84147143 329.92954286 317 326 C316.34 326 315.68 326 315 326 C315 326.66 315 327.32 315 328 C314.34 327.67 313.68 327.34 313 327 C312.375 324.9375 312.375 324.9375 312 323 C312.66 323 313.32 323 314 323 C313.278125 322.608125 312.55625 322.21625 311.8125 321.8125 C308.74416359 319.83512765 306.51447956 317.64020354 304 315 C303.175 314.175 302.35 313.35 301.5 312.5 C299.82288432 310.82288432 298.15628433 309.13519144 296.5 307.4375 C294.0573892 304.96013407 294.0573892 304.96013407 291.3125 302.9375 C288.98063012 300.98377118 288.32203031 299.64406062 287 297 C285.13252737 295.60761953 285.13252737 295.60761953 283 295 C282.01 295.33 281.02 295.66 280 296 C280.103125 295.2575 280.20625 294.515 280.3125 293.75 C280.27853223 290.77779982 280.27853223 290.77779982 277.625 288.8125 C276.75875 288.214375 275.8925 287.61625 275 287 C273.32337646 285.32337646 271.82968789 283.62896879 270.3125 281.8125 C266.28208916 277.0905971 262.18336956 272.45557971 257 269 C256.13620013 267.98345503 255.30285872 266.94033176 254.5 265.875 C253.675 264.92625 252.85 263.9775 252 263 C251.01 263 250.02 263 249 263 C249 262.01 249 261.02 249 260 C248.01 259.34 247.02 258.68 246 258 C244.8125 255.875 244.8125 255.875 244 254 C242.02 254.99 242.02 254.99 240 256 C240 253.69 240 251.38 240 249 C239.195625 248.6596875 239.195625 248.6596875 238.375 248.3125 C234.74326382 246.3054879 230.88582352 243.77164705 229 240 C228.34 239.67 227.68 239.34 227 239 C226.05507294 237.9412263 225.14235281 236.85344703 224.25 235.75 C222.25000245 233.36165341 220.41933175 231.51610979 218 229.5 C215.14776849 227.12314041 212.92015307 224.70766638 210.58984375 221.84375 C208.51266904 219.43483977 206.26225622 217.23575834 204 215 C203.07960937 214.06800781 202.15921875 213.13601563 201.2109375 212.17578125 C200.26563759 211.2213417 199.32032502 210.26691468 198.375 209.3125 C197.89804688 208.82716797 197.42109375 208.34183594 196.9296875 207.84179688 C194.70746954 205.60414685 192.63630864 203.7575391 190 202 C189.67 201.34 189.34 200.68 189 200 C186.97536745 199.34786708 186.97536745 199.34786708 185 199 C185 198.01 185 197.02 185 196 C183.20286261 193.78495995 183.20286261 193.78495995 180.80078125 191.5078125 C179.48110352 190.20263672 179.48110352 190.20263672 178.13476562 188.87109375 C177.20341797 187.96488281 176.27207031 187.05867187 175.3125 186.125 C174.40048828 185.22652344 173.48847656 184.32804688 172.54882812 183.40234375 C170.83711885 181.71677694 169.12234846 180.0343091 167.40356445 178.35595703 C163.97779586 174.99804267 160.58680917 171.61716137 157.28125 168.140625 C156.35421798 167.17703397 155.42713436 166.21349257 154.5 165.25 C154.03980469 164.75628906 153.57960937 164.26257813 153.10546875 163.75390625 C150.21205394 160.7789868 148.17666763 159.33292278 144 159 C143.89171875 158.41089844 143.7834375 157.82179688 143.671875 157.21484375 C142.91824521 154.73049439 141.97312974 153.48547726 140.25 151.5625 C139.76015625 151.00691406 139.2703125 150.45132813 138.765625 149.87890625 C136.56137654 147.53323477 134.27905281 145.27312842 132 143 C124.33333333 135.33333333 116.66666667 127.66666667 109 120 C108.12230957 119.12303467 107.24461914 118.24606934 106.34033203 117.3425293 C104.62510235 115.62568924 102.9161915 113.90253005 101.2109375 112.17578125 C100.26563759 111.2213417 99.32032502 110.26691468 98.375 109.3125 C97.65957031 108.58450195 97.65957031 108.58450195 96.9296875 107.84179688 C94.70746954 105.60414685 92.63630864 103.7575391 90 102 C89.67 101.34 89.34 100.68 89 100 C86.98330173 98.86649466 86.98330173 98.86649466 85 98 C85 97.34 85 96.68 85 96 C83.37984593 94.28808402 81.70318752 92.62932742 80 91 C78.2300435 89.21917256 76.46053437 87.43790039 74.69140625 85.65625 C73.16990777 84.12737526 71.6479274 82.59898206 70.12573242 81.07080078 C69.08446795 80.02449505 68.04410105 78.97729528 67.00463867 77.92919922 C65.48597101 76.39829777 63.96400326 74.87074229 62.44140625 73.34375 C61.09091187 71.98540039 61.09091187 71.98540039 59.71313477 70.59960938 C57.7517502 68.7202948 55.83479088 67.03873137 53.72241211 65.35351562 C51 63 51 63 50 60 C49.34 60 48.68 60 48 60 C48 59.34 48 58.68 48 58 C47.01 57.67 46.02 57.34 45 57 C45 56.34 45 55.68 45 55 C44.34 55 43.68 55 43 55 C41.28464076 53.38349197 39.62612121 51.70624892 38 50 C36.29419689 48.24753359 34.585883 46.49750741 32.875 44.75 C32.02679688 43.87859375 31.17859375 43.0071875 30.3046875 42.109375 C28.1052023 39.80882371 28.1052023 39.80882371 25 39 C24.29711924 37.68539707 23.63350223 36.34940622 23 35 C21.62650801 33.41706095 21.62650801 33.41706095 20.0234375 31.96875 C19.43844482 31.41147217 18.85345215 30.85419434 18.25073242 30.2800293 C17.63174072 29.69261963 17.01274902 29.10520996 16.375 28.5 C1.18803601 13.64001409 1.18803601 13.64001409 0 3.75 C0 2.5125 0 1.275 0 0 Z \" fill=\"#797B7B\" transform=\"translate(4,358)\"\\/>\\r\\n<path d=\"M0 0 C0.82951172 0.39638672 0.82951172 0.39638672 1.67578125 0.80078125 C0.68344151 1.99469 -0.31870029 3.18045038 -1.32421875 4.36328125 C-1.88109375 5.02457031 -2.43796875 5.68585938 -3.01171875 6.3671875 C-4.92116158 8.37661804 -6.82909335 10.12459258 -8.93212891 11.91796875 C-13.46849067 15.86592878 -17.6922417 20.07627048 -21.91015625 24.359375 C-23.51549636 25.97734119 -25.12096883 27.59517605 -26.7265625 29.21289062 C-29.23024707 31.74154776 -31.73229103 34.27179028 -34.23193359 36.80444336 C-36.6620366 39.26456223 -39.09816872 41.71857858 -41.53515625 44.171875 C-42.2871933 44.93737167 -43.03923035 45.70286835 -43.8140564 46.49156189 C-44.85621811 47.53879173 -44.85621811 47.53879173 -45.91943359 48.60717773 C-46.53039886 49.22560043 -47.14136414 49.84402313 -47.77084351 50.48118591 C-49.32421875 51.80078125 -49.32421875 51.80078125 -51.32421875 51.80078125 C-51.65486328 52.62255859 -51.65486328 52.62255859 -51.9921875 53.4609375 C-53.74292004 56.53627119 -56.11368941 58.80236846 -58.63671875 61.23828125 C-59.11044922 61.70298828 -59.58417969 62.16769531 -60.07226562 62.64648438 C-61.48688261 64.03400883 -62.90553387 65.41741632 -64.32421875 66.80078125 C-65.20464844 67.71988281 -66.08507812 68.63898438 -66.9921875 69.5859375 C-69.32421875 71.80078125 -69.32421875 71.80078125 -72.32421875 72.80078125 C-72.81921875 74.28578125 -72.81921875 74.28578125 -73.32421875 75.80078125 C-74.8203125 77.2734375 -74.8203125 77.2734375 -76.76171875 78.86328125 C-84.26318995 85.23347133 -91.01482589 92.26028735 -97.32421875 99.80078125 C-98.859375 101.4921875 -98.859375 101.4921875 -100.32421875 102.80078125 C-100.98421875 102.80078125 -101.64421875 102.80078125 -102.32421875 102.80078125 C-102.32421875 103.46078125 -102.32421875 104.12078125 -102.32421875 104.80078125 C-103.79296875 106.2109375 -103.79296875 106.2109375 -105.82421875 107.86328125 C-109.87267422 111.27781487 -113.26269746 115.02418513 -116.66015625 119.078125 C-117.20929688 119.64660156 -117.7584375 120.21507812 -118.32421875 120.80078125 C-118.98421875 120.80078125 -119.64421875 120.80078125 -120.32421875 120.80078125 C-120.58332031 121.36667969 -120.84242188 121.93257812 -121.109375 122.515625 C-122.44179004 125.02193625 -124.03625825 127.11090593 -125.76171875 129.36328125 C-130.0998166 135.51269344 -132.8166369 142.21541178 -132.32421875 149.86328125 C-130.68507538 158.37287661 -125.93501447 165.35561702 -119.32421875 170.80078125 C-118.66421875 171.13078125 -118.00421875 171.46078125 -117.32421875 171.80078125 C-117.32421875 172.46078125 -117.32421875 173.12078125 -117.32421875 173.80078125 C-116.66421875 174.13078125 -116.00421875 174.46078125 -115.32421875 174.80078125 C-113.95657841 176.40775864 -112.59083771 178.01638887 -111.234375 179.6328125 C-106.65131401 184.83444614 -101.59441274 189.63715398 -96.578125 194.41796875 C-94.32421875 196.80078125 -94.32421875 196.80078125 -93.32421875 199.80078125 C-92.66421875 199.80078125 -92.00421875 199.80078125 -91.32421875 199.80078125 C-89.99316406 201.14648438 -89.99316406 201.14648438 -88.40234375 203.08203125 C-84.02463372 208.2264076 -79.32498051 213.02131368 -74.56152344 217.80371094 C-73.05591863 219.31920153 -71.56129528 220.84504091 -70.06640625 222.37109375 C-69.10612441 223.33789126 -68.14521038 224.30406136 -67.18359375 225.26953125 C-65.89146973 226.57567383 -65.89146973 226.57567383 -64.57324219 227.90820312 C-62.43154794 230.1227161 -62.43154794 230.1227161 -59.32421875 229.80078125 C-59.65421875 231.12078125 -59.98421875 232.44078125 -60.32421875 233.80078125 C-59.66421875 233.80078125 -59.00421875 233.80078125 -58.32421875 233.80078125 C-58.65421875 234.79078125 -58.98421875 235.78078125 -59.32421875 236.80078125 C-66.11665921 230.03160167 -72.90632769 223.25965708 -79.69255924 216.48425293 C-82.84440455 213.33760654 -85.99716492 210.19188895 -89.15209961 207.04833984 C-92.20177261 204.0096027 -95.24893312 200.96836621 -98.29443169 197.92544556 C-99.45163906 196.77007327 -100.60972013 195.61557532 -101.76872444 194.46200562 C-107.34973464 188.90610554 -112.89477509 183.36367167 -117.98617554 177.34651184 C-119.8120084 175.23727824 -121.83424607 173.37443938 -123.88671875 171.48828125 C-130.74447458 164.73602936 -135.23675859 156.58950092 -135.82421875 146.92578125 C-135.51874412 126.07019532 -111.55245457 108.87884771 -98.0859375 95.4296875 C-96.23258637 93.57566145 -94.37938359 91.72148709 -92.52632141 89.86717224 C-88.66443985 86.00348451 -84.80048405 82.14188065 -80.93530273 78.28149414 C-76.48044508 73.83209934 -72.02923216 69.37908265 -67.57984895 64.92421395 C-63.27165853 60.61092728 -58.96064849 56.30047029 -54.64844704 51.99119377 C-52.82449828 50.16791044 -51.00128748 48.34388856 -49.17883873 46.51910591 C-46.63555642 43.97327902 -44.08908215 41.43068787 -41.54174805 38.88891602 C-40.79513916 38.1402829 -40.04853027 37.39164978 -39.27929688 36.62033081 C-35.43819198 32.79471815 -31.53630907 29.21281846 -27.32421875 25.80078125 C-24.09685663 22.74787113 -21.14920586 19.49255184 -18.19921875 16.17578125 C-14.68571994 12.27385543 -11.14784608 8.40106677 -7.51171875 4.61328125 C-6.61839844 3.67097656 -5.72507812 2.72867187 -4.8046875 1.7578125 C-2.32421875 -0.19921875 -2.32421875 -0.19921875 0 0 Z \" fill=\"#3B3B3B\" transform=\"translate(469.32421875,411.19921875)\"\\/>\\r\\n<path d=\"M0 0 C2.0625 -0.4375 2.0625 -0.4375 5 0 C8.61606691 2.83195135 11.53586557 5.60759671 13 10 C13.71997752 16.94264037 13.70733882 22.45603867 9.4921875 28.1953125 C8.99976563 28.79085937 8.50734375 29.38640625 8 30 C7.50757813 30.61617187 7.01515625 31.23234375 6.5078125 31.8671875 C3.53598694 35.45493546 0.2974309 38.71008687 -3 42 C-4.8033759 43.80726119 -6.60642718 45.61484633 -8.40922546 47.42268372 C-9.49263405 48.50902406 -10.57604909 49.59535796 -11.6594696 50.6816864 C-12.23245474 51.25622244 -12.80543987 51.83075848 -13.39578819 52.4227047 C-26.58671072 65.64899594 -39.7833579 78.86956296 -52.98326397 92.08688831 C-60.61272949 99.7266931 -68.24029082 107.36838165 -75.86352539 115.0144043 C-82.52128403 121.69205447 -89.18251358 128.36621893 -95.84798938 135.03616637 C-99.37507126 138.56586064 -102.90035728 142.09730826 -106.42148399 145.63294411 C-109.72745459 148.95243067 -113.03802365 152.26725851 -116.35226822 155.57848358 C-117.57067108 156.79743909 -118.78734616 158.01812429 -120.00220299 159.24061394 C-121.65416099 160.90244573 -123.31208426 162.55808114 -124.97172546 164.2122345 C-126.36403145 165.60730587 -126.36403145 165.60730587 -127.78446484 167.03056049 C-130 169 -130 169 -132 169 C-132.226875 169.556875 -132.45375 170.11375 -132.6875 170.6875 C-134.37367031 173.65837149 -136.55387116 175.60822958 -139 178 C-146.72989885 185.58231129 -151.13373924 194.98544164 -155 205 C-155.33 205 -155.66 205 -156 205 C-156.59492066 195.03824336 -151.33303384 186.24307618 -144.875 178.9375 C-143.27320242 177.26907653 -141.64522805 175.62561281 -140 174 C-138.24321301 172.25963638 -136.4870803 170.51863639 -134.73291016 168.77563477 C-133.55064063 167.60638725 -132.3616424 166.44389833 -131.16552734 165.28881836 C-129.74037553 163.89573777 -128.36528469 162.45180196 -127 161 C-127 160.34 -127 159.68 -127 159 C-125.33333333 158 -123.66666667 157 -122 156 C-117.67699573 152.25495093 -117.67699573 152.25495093 -116 147 C-115.14849365 146.88410522 -115.14849365 146.88410522 -114.27978516 146.76586914 C-111.21767937 145.73718785 -109.76006561 144.06616402 -107.5234375 141.74609375 C-106.688125 140.89208984 -105.8528125 140.03808594 -104.9921875 139.15820312 C-104.12851562 138.26037109 -103.26484375 137.36253906 -102.375 136.4375 C-100.65816698 134.66098417 -98.93703624 132.88860817 -97.2109375 131.12109375 C-96.45087402 130.3314624 -95.69081055 129.54183105 -94.90771484 128.72827148 C-93 127 -93 127 -91 127 C-90.79375 126.46890625 -90.5875 125.9378125 -90.375 125.390625 C-88.42038808 121.99226564 -85.77876283 119.48944072 -83 116.75 C-82.4534375 116.19570313 -81.906875 115.64140625 -81.34375 115.0703125 C-77.2533867 111 -77.2533867 111 -75 111 C-74.62875 110.13375 -74.62875 110.13375 -74.25 109.25 C-72.81700012 106.67060021 -71.21575324 104.93878408 -69 103 C-68.34 103 -67.68 103 -67 103 C-67 102.01 -67 101.02 -67 100 C-65.4609375 98.38671875 -65.4609375 98.38671875 -63.375 96.6875 C-60.64887646 94.41573038 -58.07913424 92.12597686 -55.625 89.5625 C-53 87 -53 87 -51 87 C-50.773125 86.443125 -50.54625 85.88625 -50.3125 85.3125 C-48.64103234 82.36753316 -46.44723648 80.31843456 -44 78 C-44.33 77.34 -44.66 76.68 -45 76 C-44.30261719 75.79246094 -43.60523438 75.58492188 -42.88671875 75.37109375 C-39.09826439 73.57170609 -36.69454742 71.05854683 -33.8125 68.0625 C-33.01295898 67.25522461 -33.01295898 67.25522461 -32.19726562 66.43164062 C-29.8668353 64.05430856 -27.85129867 61.776948 -26 59 C-24.88372472 57.96710914 -23.73516583 56.96839501 -22.5625 56 C-19.19151249 53.20419178 -16.44346087 50.66519131 -14 47 C-12.98345503 46.13620013 -11.94033176 45.30285872 -10.875 44.5 C-9.92625 43.675 -8.9775 42.85 -8 42 C-8 41.01 -8 40.02 -8 39 C-7.2575 38.7525 -6.515 38.505 -5.75 38.25 C-2.79875938 36.90852699 -1.15185026 35.39094474 1 33 C0.67 32.34 0.34 31.68 0 31 C0.5775 30.7525 1.155 30.505 1.75 30.25 C4.3002997 28.83316683 6.01785701 27.12372463 8 25 C7.67 24.34 7.34 23.68 7 23 C7.66 22.34 8.32 21.68 9 21 C9.04254356 19.00045254 9.04080783 16.99958364 9 15 C9.33 14.01 9.66 13.02 10 12 C9.2539302 10.1197899 9.2539302 10.1197899 8.0625 8.3125 C7.381875 7.219375 6.70125 6.12625 6 5 C4.68 5 3.36 5 2 5 C0 2 0 2 0 0 Z \" fill=\"#565656\" transform=\"translate(379,199)\"\\/>\\r\\n<path d=\"M0 0 C0.99 1.485 0.99 1.485 2 3 C-7.55702093 12.7300857 -7.55702093 12.7300857 -11.6875 16.125 C-14.13445971 18.15324409 -16.19904089 20.29979782 -18.25575256 22.72131348 C-21.75349128 26.7630494 -25.4313701 30.56654016 -29.22045898 34.33398438 C-29.90423111 35.01790253 -30.58800323 35.70182068 -31.29249573 36.40646362 C-33.52466303 38.63794131 -35.76033758 40.86586859 -37.99609375 43.09375 C-39.55572544 44.65151412 -41.11513464 46.20950102 -42.67433167 47.7677002 C-46.75733812 51.84690815 -50.8433399 55.92310269 -54.92999268 59.99865723 C-59.1081518 64.16654461 -63.28344362 68.33730224 -67.45898438 72.5078125 C-75.63653396 80.67467186 -83.81725377 88.83834763 -92 97 C-90.12899575 101.03172986 -87.46393214 103.98111278 -84.4375 107.1875 C-83.9017334 107.76193848 -83.3659668 108.33637695 -82.81396484 108.92822266 C-78.94953724 113.05066272 -74.97713547 117.05279132 -70.94921875 121.015625 C-69.17516968 122.82167094 -67.54782924 124.67360907 -65.9375 126.625 C-63.84092961 129.14319473 -61.62587956 131.25775051 -59.125 133.375 C-55.36940738 136.56330425 -52.16062017 140.05266615 -48.95703125 143.7890625 C-46.73481414 146.29959121 -44.37776927 148.63646887 -42 151 C-41.0790962 151.97379522 -40.16119021 152.95043298 -39.24609375 153.9296875 C-38.30995932 154.91151887 -37.37376106 155.89328938 -36.4375 156.875 C-35.73463867 157.64070313 -35.73463867 157.64070313 -35.01757812 158.421875 C-33.489563 160.06080168 -33.489563 160.06080168 -31 162 C-27.0948546 161.77798957 -25.18344772 159.53607445 -22.53857422 156.84741211 C-21.66441864 155.96657455 -20.79026306 155.085737 -19.88961792 154.1782074 C-18.94463057 153.21126315 -17.99965402 152.24430835 -17.0546875 151.27734375 C-16.079508 150.29148699 -15.10351331 149.30643598 -14.1267395 148.32215881 C-11.55987148 145.73252172 -9.00127754 143.13488145 -6.44519043 140.53460693 C-2.34822077 136.36740623 1.75628932 132.20775265 5.8699913 128.05706978 C7.30697926 126.6033324 8.73740879 125.14335354 10.16751099 123.68284607 C11.03536224 122.80516068 11.9032135 121.92747528 12.79736328 121.02319336 C13.56251251 120.24455429 14.32766174 119.46591522 15.11599731 118.66368103 C17 117 17 117 19 117 C19 117.66 19 118.32 19 119 C17.50390625 120.4375 17.50390625 120.4375 15.5625 122 C12.84811762 124.14525044 12.84811762 124.14525044 11 127 C10.34 127 9.68 127 9 127 C8.67 127.99 8.34 128.98 8 130 C6.43359375 131.54296875 6.43359375 131.54296875 4.4375 133.1875 C-0.82724843 137.65542164 -6.15281583 142.22922374 -10 148 C-11.99665598 149.67067133 -13.99651034 151.33752986 -16 153 C-16.33 153.66 -16.66 154.32 -17 155 C-17.66 155 -18.32 155 -19 155 C-19 155.66 -19 156.32 -19 157 C-19.66 157 -20.32 157 -21 157 C-20.67 157.99 -20.34 158.98 -20 160 C-21.98 160.66 -23.96 161.32 -26 162 C-26 163.32 -26 164.64 -26 166 C-26.99 166 -27.98 166 -29 166 C-29.66 166.66 -30.32 167.32 -31 168 C-31 167.34 -31 166.68 -31 166 C-32.32 166 -33.64 166 -35 166 C-35 164.68 -35 163.36 -35 162 C-36.72937829 159.68721883 -36.72937829 159.68721883 -39 158 C-39.99 158 -40.98 158 -42 158 C-42 157.34 -42 156.68 -42 156 C-43.32 155.67 -44.64 155.34 -46 155 C-45.01 155 -44.02 155 -43 155 C-47.46681491 149.12779369 -47.46681491 149.12779369 -54 146 C-54 144.68 -54 143.36 -54 142 C-54.66 142 -55.32 142 -56 142 C-56.66 141.01 -57.32 140.02 -58 139 C-58.99 138.34 -59.98 137.68 -61 137 C-62.19050011 135.59019724 -63.38119197 134.1796442 -64.5234375 132.73046875 C-66.55428953 130.35039614 -68.77185683 128.19658307 -71 126 C-73.25242531 123.77327167 -75.5015621 121.54325356 -77.75 119.3125 C-78.63365234 118.44141602 -78.63365234 118.44141602 -79.53515625 117.55273438 C-83.88709821 113.22580357 -83.88709821 113.22580357 -85 111 C-85.99 110.34 -86.98 109.68 -88 109 C-89.05382648 107.86304725 -90.07355437 106.69381672 -91.0625 105.5 C-92.66107015 103.58008878 -94.23130724 101.76869276 -96 100 C-95.84783044 95.18642097 -93.47070776 92.97966629 -90.16015625 89.69921875 C-89.67800156 89.2179805 -89.19584686 88.73674225 -88.69908142 88.24092102 C-87.68244474 87.23030596 -86.66097175 86.22453549 -85.63500977 85.22338867 C-84.06068591 83.68572815 -82.5031095 82.13250648 -80.94726562 80.57617188 C-73.29519213 73 -73.29519213 73 -71 73 C-70.7525 72.4225 -70.505 71.845 -70.25 71.25 C-68.81700012 68.67060021 -67.21575324 66.93878408 -65 65 C-64.34 65 -63.68 65 -63 65 C-62.67 63.68 -62.34 62.36 -62 61 C-61.0409375 60.8453125 -61.0409375 60.8453125 -60.0625 60.6875 C-59.381875 60.460625 -58.70125 60.23375 -58 60 C-57.67 59.01 -57.34 58.02 -57 57 C-54.68108896 54.48784637 -52.34357316 52.26220057 -49.625 50.1875 C-46.57665779 47.64721483 -44.11737212 44.82085859 -41.55078125 41.8046875 C-40 40 -40 40 -38 38 C-38 36.68 -38 35.36 -38 34 C-37.21625 33.9175 -36.4325 33.835 -35.625 33.75 C-32.85250896 33.27193661 -32.85250896 33.27193661 -31.6875 30.9375 C-31.460625 30.298125 -31.23375 29.65875 -31 29 C-30.34 29 -29.68 29 -29 29 C-29.495 27.515 -29.495 27.515 -30 26 C-28.89011719 25.87238281 -28.89011719 25.87238281 -27.7578125 25.7421875 C-24.44229652 24.84990983 -23.20002871 23.61414838 -20.875 21.125 C-20.21242188 20.42632812 -19.54984375 19.72765625 -18.8671875 19.0078125 C-18.25101562 18.34523438 -17.63484375 17.68265625 -17 17 C-16.42507813 16.50242187 -15.85015625 16.00484375 -15.2578125 15.4921875 C-13.57032967 13.8155324 -13.57032967 13.8155324 -14 10 C-13.319375 9.979375 -12.63875 9.95875 -11.9375 9.9375 C-8.06297084 8.70094814 -6.24278704 6.46267219 -3.55078125 3.49609375 C-2 2 -2 2 0 2 C0 1.34 0 0.68 0 0 Z \" fill=\"#555555\" transform=\"translate(466,460)\"\\/>\\r\\n<path d=\"M0 0 C1.98 0.495 1.98 0.495 4 1 C0.25651042 4.74348958 -3.48697917 8.48697917 -7.23046875 12.23046875 C-7.87806152 12.87870605 -8.5256543 13.52694336 -9.19287109 14.19482422 C-10.72414456 15.72444271 -12.26177331 17.24769495 -13.80078125 18.76953125 C-15.63008746 20.62483115 -17.33736181 22.49727672 -19 24.5 C-23.19264326 29.43752912 -27.76558218 33.72999189 -32.7421875 37.86328125 C-34.56962925 39.59271142 -36.11159867 41.28674105 -37.72509766 43.20263672 C-43.70880784 50.07187348 -50.23344942 56.44014361 -56.65625 62.89453125 C-57.35820999 63.60056677 -58.06016998 64.30660229 -58.78340149 65.03403282 C-62.49083512 68.76220873 -66.20145133 72.48718418 -69.91455078 76.2097168 C-73.73937792 80.04565758 -77.55237312 83.8931438 -81.36292267 87.74326038 C-84.30742847 90.71391385 -87.26078845 93.67564409 -90.21659851 96.63504601 C-91.62652198 98.04983045 -93.03307451 99.46798287 -94.43611145 100.88959694 C-96.39795273 102.87581651 -98.3720806 104.8489956 -100.34960938 106.81958008 C-100.92124313 107.4040239 -101.49287689 107.98846771 -102.08183289 108.59062195 C-107.45964264 113.90009218 -112.70616811 116.4242954 -120.4375 116.5 C-126.53564556 116.34579402 -130.51938091 115.17161088 -135 111 C-139.03680982 106.44565046 -140.26375374 101.98518094 -140 96 C-137.88724033 86.33672219 -130.56831547 80.26753767 -123.45117188 73.95727539 C-118.07931612 69.12951494 -112.97828668 64.07300955 -107.90625 58.93359375 C-106.51118364 57.52912101 -105.11611162 56.12465383 -103.7206955 54.7205286 C-100.32449556 51.30155802 -96.9340701 47.87687597 -93.54589844 44.44995117 C-91.62521491 42.50772508 -89.7019257 40.56814903 -87.77575684 38.63136292 C-85.97079815 36.81603794 -84.16996976 34.99659523 -82.37365723 33.17271423 C-81.56521362 32.36089188 -80.75677002 31.54906952 -79.92382812 30.71264648 C-79.21230591 29.99366684 -78.50078369 29.27468719 -77.7677002 28.53392029 C-76 27 -76 27 -74 27 C-73.505 25.515 -73.505 25.515 -73 24 C-70.9375 22.8125 -70.9375 22.8125 -69 22 C-70.28519565 24.86697492 -71.57129254 26.97607712 -74 29 C-74.66 29 -75.32 29 -76 29 C-76.495 30.485 -76.495 30.485 -77 32 C-77.66 32 -78.32 32 -79 32 C-79 32.66 -79 33.32 -79 34 C-80.62626404 35.38232443 -82.2925002 36.71937515 -84 38 C-83.67 38.66 -83.34 39.32 -83 40 C-83.59554687 40.09152344 -84.19109375 40.18304688 -84.8046875 40.27734375 C-87.52562732 41.17302679 -88.39124634 42.31588204 -90.125 44.5625 C-91.6328125 46.50390625 -91.6328125 46.50390625 -93 48 C-93.66 48 -94.32 48 -95 48 C-95 48.66 -95 49.32 -95 50 C-96.46875 51.4453125 -96.46875 51.4453125 -98.5 53.125 C-102.9046751 56.86702486 -106.95242409 60.87971314 -111 65 C-113.53967281 67.54793191 -116.08768713 70.08652314 -118.6484375 72.61328125 C-130.92551286 83.59889619 -130.92551286 83.59889619 -136.5 98.3125 C-136.37499013 102.98474386 -134.82804429 105.86572053 -131.83984375 109.40234375 C-127.84331795 112.8727876 -123.45417968 112.87463968 -118.375 113.3125 C-112.31062737 112.75098402 -108.22524675 109.63410015 -103.8125 105.625 C-102.97332031 104.87476563 -102.13414062 104.12453125 -101.26953125 103.3515625 C-99.03399558 101.03522434 -97.58941377 98.78147409 -96 96 C-92.5862069 93 -92.5862069 93 -90 93 C-89.505 91.515 -89.505 91.515 -89 90 C-87.328125 88.3515625 -87.328125 88.3515625 -85.25 86.625 C-80.31461193 82.42992014 -76.0165607 78.08764355 -72 73 C-70.375 71.1875 -70.375 71.1875 -69 70 C-68.34 70 -67.68 70 -67 70 C-67 69.34 -67 68.68 -67 68 C-66.34 68 -65.68 68 -65 68 C-64.74476563 67.42894531 -64.48953125 66.85789062 -64.2265625 66.26953125 C-62.86118469 63.74314747 -61.28568001 61.83035427 -59.375 59.6875 C-58.74335938 58.96949219 -58.11171875 58.25148438 -57.4609375 57.51171875 C-55.4843775 55.49437259 -53.50122842 53.67521818 -51.36328125 51.83984375 C-46.26324098 47.43369862 -41.55294867 42.6614038 -36.8125 37.875 C-35.93658203 36.99457031 -35.06066406 36.11414063 -34.15820312 35.20703125 C-31.77032349 32.80647902 -29.38493774 30.40347423 -27 28 C-24.38518537 25.37404269 -21.75928697 22.76215533 -19.10546875 20.17578125 C-18.13278804 19.2213791 -17.16013192 18.26695188 -16.1875 17.3125 C-15.68541016 16.82716797 -15.18332031 16.34183594 -14.66601562 15.84179688 C-13.40582727 14.59875394 -12.19808956 13.30300108 -11 12 C-11 11.34 -11 10.68 -11 10 C-10.01 9.34 -9.02 8.68 -8 8 C-7.7497843 4.91634129 -7.7497843 4.91634129 -8 2 C-6.02 2.33 -4.04 2.66 -2 3 C-1.34 2.01 -0.68 1.02 0 0 Z M-7 3 C-6 5 -6 5 -6 5 Z M-5 4 C-5.33 4.66 -5.66 5.32 -6 6 C-5.01 5.67 -4.02 5.34 -3 5 C-3.66 4.67 -4.32 4.34 -5 4 Z \" fill=\"#505150\" transform=\"translate(244,260)\"\\/>\\r\\n<path d=\"M0 0 C4.70111226 3.32655474 9.17735389 6.73008967 12.98828125 11.0703125 C13.52839844 11.68003906 14.06851563 12.28976562 14.625 12.91796875 C22.86063081 22.76142336 26.78255888 33.36865097 27.98828125 46.0703125 C28.64828125 46.0703125 29.30828125 46.0703125 29.98828125 46.0703125 C29.53455195 48.33895898 29.07979212 50.6073503 28.62109375 52.875 C28.16269015 55.18965521 27.72228304 57.50789832 27.29296875 59.828125 C26.92558594 61.77332031 26.92558594 61.77332031 26.55078125 63.7578125 C26.32519531 64.97855469 26.09960938 66.19929688 25.8671875 67.45703125 C24.94633427 71.24276119 23.61542639 74.53576844 21.98828125 78.0703125 C21.66085937 78.81539063 21.3334375 79.56046875 20.99609375 80.328125 C18.91089434 84.73841401 16.65678513 87.75971144 12.98828125 91.0703125 C10.18169245 93.80493749 7.51807781 96.58114111 4.98828125 99.5703125 C2.4445441 102.56641527 -0.11237173 105.41257774 -3.01171875 108.0703125 C-3.67171875 108.0703125 -4.33171875 108.0703125 -5.01171875 108.0703125 C-5.50671875 109.5553125 -5.50671875 109.5553125 -6.01171875 111.0703125 C-7.94921875 113.2578125 -7.94921875 113.2578125 -10.01171875 115.0703125 C-10.67171875 115.0703125 -11.33171875 115.0703125 -12.01171875 115.0703125 C-12.27984375 115.7096875 -12.54796875 116.3490625 -12.82421875 117.0078125 C-14.01171875 119.0703125 -14.01171875 119.0703125 -17.01171875 120.0703125 C-17.71466743 121.38487911 -18.37687566 122.72153658 -19.01171875 124.0703125 C-21.31075996 126.82661151 -23.86045571 129.33501881 -26.38671875 131.8828125 C-27.05960937 132.58857422 -27.7325 133.29433594 -28.42578125 134.02148438 C-29.080625 134.68341797 -29.73546875 135.34535156 -30.41015625 136.02734375 C-31.00489746 136.63553955 -31.59963867 137.24373535 -32.21240234 137.87036133 C-32.80617676 138.26634521 -33.39995117 138.6623291 -34.01171875 139.0703125 C-36.12417603 138.64530945 -36.12417603 138.64530945 -38.01171875 138.0703125 C-37.42591537 137.49117096 -36.840112 136.91202942 -36.23655701 136.31533813 C-30.68308975 130.82229789 -25.13710455 125.32183211 -19.5991354 119.81316566 C-16.75261756 116.98221967 -13.90341413 114.15409727 -11.04760742 111.33251953 C-8.28519959 108.60301051 -5.53045731 105.86596762 -2.78059578 103.12382126 C-1.73681292 102.08552766 -0.69041934 101.04985095 0.35876656 100.01701736 C15.19478617 85.40283595 23.95342942 70.47089362 24.42578125 49.3828125 C24.43402828 36.16282495 20.30520867 25.42609834 11.98828125 15.0703125 C11.39015625 14.1834375 10.79203125 13.2965625 10.17578125 12.3828125 C0.16865471 1.80385016 -13.68036235 -3.74958548 -27.88671875 -5.0546875 C-28.76585937 -5.14105469 -29.645 -5.22742188 -30.55078125 -5.31640625 C-32.70382983 -5.52703057 -34.85770124 -5.72921458 -37.01171875 -5.9296875 C-37.01171875 -6.2596875 -37.01171875 -6.5896875 -37.01171875 -6.9296875 C-24.46254391 -11.18773018 -10.86450162 -6.96117224 0 0 Z \" fill=\"#444545\" transform=\"translate(506.01171875,271.9296875)\"\\/>\\r\\n<path d=\"M0 0 C0.66 0 1.32 0 2 0 C1.0712443 4.20563179 -0.83776718 7.76668407 -2.8125 11.5625 C-12.81416291 31.24340672 -16.76730532 53.23992164 -11 75 C-10.75894531 76.00933594 -10.51789063 77.01867187 -10.26953125 78.05859375 C-9.27755131 82.07328492 -9.27755131 82.07328492 -8 86 C-7.34 86.33 -6.68 86.66 -6 87 C-5.31177519 88.99268438 -4.64881559 90.9941379 -4 93 C0.15638761 101.42791061 5.43891816 108.32175598 12 115 C12.49910889 115.54132568 12.99821777 116.08265137 13.51245117 116.64038086 C17.96432904 121.34227011 22.7504176 124.66008714 28.3125 127.9375 C29.12267578 128.43056641 29.93285156 128.92363281 30.76757812 129.43164062 C34.62912348 132.03273354 34.62912348 132.03273354 39 133 C39 133.66 39 134.32 39 135 C40.08667969 135.20109375 40.08667969 135.20109375 41.1953125 135.40625 C43.82656728 135.96328444 46.31483517 136.68205596 48.875 137.5 C52.9334846 138.74549303 56.78428809 139.54177044 61 140 C61 140.66 61 141.32 61 142 C68.92 142.33 76.84 142.66 85 143 C85 143.33 85 143.66 85 144 C56.43146614 144.71993591 32.41014716 139.24227658 11.19335938 119.21459961 C-2.04947772 106.27698942 -11.06086576 91.12872278 -15 73 C-15.22300781 72.01902344 -15.44601563 71.03804688 -15.67578125 70.02734375 C-20.40702729 46.11363077 -14.49803255 22.66352484 -1.734375 2.28125 C-1.16203125 1.5284375 -0.5896875 0.775625 0 0 Z \" fill=\"#292A2A\" transform=\"translate(205,361)\"\\/>\\r\\n<path d=\"M0 0 C5.50078559 1.47970499 8.71156109 5.33264978 12.5690918 9.27612305 C13.31453751 10.02594955 14.05998322 10.77577606 14.82801819 11.54832458 C16.44478268 13.17649771 18.05807218 14.80812718 19.66827965 16.44278526 C22.2225194 19.03536919 24.78606035 21.61841935 27.35224915 24.19917297 C33.72786923 30.61488336 40.0872381 37.04662556 46.44696045 43.47808838 C51.81629619 48.90681178 57.19185623 54.32922651 62.57572365 59.74353981 C65.09106387 62.27821297 67.59712896 64.82181245 70.10295105 67.3658905 C71.66282772 68.93667693 73.223134 70.50703687 74.78393555 72.0769043 C75.46948517 72.77795288 76.15503479 73.47900146 76.86135864 74.20129395 C88.47590754 85.81954869 101.71060524 92.77934353 118.25 93.375 C140.4457723 92.98605539 154.08084288 78.1095762 168.625 63.4375 C169.63908446 62.41838246 170.65340625 61.39950101 171.66796875 60.38085938 C174.11470835 57.92327588 176.55826544 55.46255754 179 53 C179 56.79993489 177.57485802 57.80574787 175.0131073 60.42938232 C174.14616997 61.2919162 174.14616997 61.2919162 173.26171875 62.171875 C172.6663179 62.7725177 172.07091705 63.3731604 171.45747375 63.99200439 C170.18922871 65.26668461 168.91706565 66.53747652 167.64135742 67.8046875 C165.72106292 69.71658386 163.81996532 71.64612932 161.91992188 73.578125 C148.22400065 87.35211789 135.8805098 95.23244539 116.04370117 95.32348633 C106.25538145 95.18372399 97.84147143 91.92954286 89 88 C88.34 88 87.68 88 87 88 C87 88.66 87 89.32 87 90 C86.34 89.67 85.68 89.34 85 89 C84.375 86.9375 84.375 86.9375 84 85 C84.66 85 85.32 85 86 85 C84.9171875 84.4121875 84.9171875 84.4121875 83.8125 83.8125 C80.74416359 81.83512765 78.51447956 79.64020354 76 77 C75.175 76.175 74.35 75.35 73.5 74.5 C71.82288432 72.82288432 70.15628433 71.13519144 68.5 69.4375 C66.0573892 66.96013407 66.0573892 66.96013407 63.3125 64.9375 C60.98063012 62.98377118 60.32203031 61.64406062 59 59 C57.13252737 57.60761953 57.13252737 57.60761953 55 57 C54.01 57.33 53.02 57.66 52 58 C52.103125 57.2575 52.20625 56.515 52.3125 55.75 C52.27853223 52.77779982 52.27853223 52.77779982 49.625 50.8125 C48.75875 50.214375 47.8925 49.61625 47 49 C45.32337646 47.32337646 43.82968789 45.62896879 42.3125 43.8125 C38.28208916 39.0905971 34.18336956 34.45557971 29 31 C28.13620013 29.98345503 27.30285872 28.94033176 26.5 27.875 C25.675 26.92625 24.85 25.9775 24 25 C23.01 25 22.02 25 21 25 C21 24.01 21 23.02 21 22 C20.01 21.34 19.02 20.68 18 20 C16.8125 17.875 16.8125 17.875 16 16 C14.02 16.99 14.02 16.99 12 18 C12 15.69 12 13.38 12 11 C11.46375 10.773125 10.9275 10.54625 10.375 10.3125 C6.74326382 8.3054879 2.88582352 5.77164705 1 2 C0.34 1.67 -0.32 1.34 -1 1 C-0.67 0.67 -0.34 0.34 0 0 Z \" fill=\"#A0A0A0\" transform=\"translate(232,596)\"\\/>\\r\\n<path d=\"M0 0 C-4.00493027 3.43555464 -8.19245396 4.27844327 -13.22265625 5.546875 C-25.68693988 9.80545206 -34.48530359 19.97406009 -43.44921875 29.09375 C-44.91552952 30.57008572 -46.38281761 32.04545134 -47.85102844 33.51989746 C-51.69203811 37.38171277 -55.52130298 41.25495559 -59.34765625 45.13128662 C-65.47751754 51.33677981 -71.62632914 57.52351125 -77.77311134 63.7122345 C-79.90544879 65.86211984 -82.03341849 68.01624776 -84.16056824 70.17126465 C-85.47897694 71.50290522 -86.7974403 72.83449169 -88.1159668 74.16601562 C-88.98665047 75.05151848 -88.98665047 75.05151848 -89.87492371 75.95491028 C-93.51629347 79.62498867 -97.29645476 83.07154972 -101.22269917 86.43549347 C-104.54035951 89.35593393 -107.49343133 92.63641091 -110.5078125 95.86328125 C-113.25324857 98.21712691 -115.52835405 99.08932186 -119 100 C-118.07038578 98.84775972 -117.1309875 97.70340824 -116.1875 96.5625 C-115.66542969 95.92441406 -115.14335937 95.28632813 -114.60546875 94.62890625 C-113 93 -113 93 -110 92 C-108.83639602 90.01502851 -108.00861966 88.02254371 -107.1875 85.875 C-105.57419501 83.32767633 -103.81228942 82.8880914 -101 82 C-101.66 80.68 -102.32 79.36 -103 78 C-99.535 77.505 -99.535 77.505 -96 77 C-95.67 75.35 -95.34 73.7 -95 72 C-94.29875 71.979375 -93.5975 71.95875 -92.875 71.9375 C-88.58797811 70.53955808 -86.71922048 67.45285181 -84 64 C-82.33942834 62.33942834 -80.66539878 60.85867322 -78.8671875 59.35546875 C-74.76731434 55.85601766 -70.93694393 52.12067719 -67.125 48.3125 C-66.11179687 47.31766602 -66.11179687 47.31766602 -65.078125 46.30273438 C-64.43617188 45.66271484 -63.79421875 45.02269531 -63.1328125 44.36328125 C-62.55418457 43.78876221 -61.97555664 43.21424316 -61.37939453 42.62231445 C-59.77083074 40.93517334 -59.77083074 40.93517334 -59 38 C-57.66907336 37.32854151 -56.33516986 36.6629809 -55 36 C-53.20099764 34.3863494 -51.4538521 32.71381615 -49.75 31 C-48.41195312 29.6696875 -48.41195312 29.6696875 -47.046875 28.3125 C-44.77906927 26.26510897 -44.77906927 26.26510897 -45 24 C-44.34 23.62875 -43.68 23.2575 -43 22.875 C-39.34542919 20.59089324 -36.71324903 17.76836178 -33.76953125 14.64453125 C-32 13 -32 13 -30 13 C-29.67 12.01 -29.34 11.02 -29 10 C-20.35056111 3.73022552 -10.80010794 -0.70435487 0 0 Z \" fill=\"#424342\" transform=\"translate(474,264)\"\\/>\\r\\n<path d=\"M0 0 C1.98 0.495 1.98 0.495 4 1 C1.525 3.475 1.525 3.475 -1 6 C-0.67 6.66 -0.34 7.32 0 8 C-1.09601169 9.00893131 -2.20213918 10.00688225 -3.3125 11 C-3.92738281 11.556875 -4.54226562 12.11375 -5.17578125 12.6875 C-7 14 -7 14 -10 14 C-10.27242063 14.59734491 -10.54484126 15.19468981 -10.82551706 15.81013608 C-11.97300337 17.94966386 -13.08386472 19.33258383 -14.79172707 21.03782272 C-15.36350264 21.6135804 -15.93527822 22.18933807 -16.52438033 22.78254294 C-17.46697866 23.71640275 -17.46697866 23.71640275 -18.42861938 24.66912842 C-19.09594727 25.33816515 -19.76327515 26.00720189 -20.4508251 26.69651246 C-22.69246855 28.94145523 -24.94119504 31.17916606 -27.18994141 33.41699219 C-28.79655681 35.02304358 -30.4027322 36.62953524 -32.00849915 38.23643494 C-36.37360856 42.60211923 -40.74486621 46.96160057 -45.11722994 51.32001781 C-49.6838818 55.87418494 -54.24488756 60.43399936 -58.80648804 64.9932251 C-66.46510886 72.6463318 -74.12721173 80.29593396 -81.79199219 87.94287109 C-89.68658796 95.81910764 -97.57907953 103.69744291 -105.46875 111.57861328 C-105.95510483 112.06444267 -106.44145966 112.55027205 -106.94255252 113.05082354 C-109.38244926 115.48811019 -111.82230468 117.9254382 -114.26213956 120.36278677 C-134.50169129 140.58160652 -154.74855335 160.79309477 -175 181 C-175 178 -175 178 -172.76953125 175.4765625 C-171.79134265 174.51833693 -170.80529119 173.56808791 -169.8125 172.625 C-169.32974609 172.15578125 -168.84699219 171.6865625 -168.34960938 171.203125 C-167.42898449 170.30845062 -166.50528712 169.4169177 -165.57739258 168.52978516 C-163.88736638 166.89076579 -162.22452742 165.22581286 -160.56062794 163.5603447 C-157.31653365 160.31683919 -154.06376003 157.0820265 -150.81323242 153.8449707 C-142.57907482 145.6434599 -134.34994468 137.43691995 -126.12377453 129.22739887 C-121.14746719 124.26143598 -116.16927481 119.29738944 -111.18676758 114.33764648 C-106.36545293 109.53834755 -101.54933445 104.73388512 -96.73641396 99.92616844 C-94.89884977 98.09231014 -93.05952133 96.26021795 -91.21843529 94.4298954 C-88.65425972 91.88013406 -86.09630605 89.32428836 -83.53979492 86.7668457 C-82.77153885 86.00578018 -82.00328278 85.24471466 -81.21174622 84.46058655 C-80.52059723 83.76668823 -79.82944824 83.07278992 -79.11735535 82.35786438 C-78.20899067 81.45226509 -78.20899067 81.45226509 -77.2822752 80.52837086 C-75.78575513 79.07714213 -75.78575513 79.07714213 -76 77 C-75.29262695 76.57662354 -74.58525391 76.15324707 -73.85644531 75.71704102 C-70.53940261 73.72312979 -67.992792 71.26231416 -65.296875 68.52734375 C-64.77361633 68.00362686 -64.25035767 67.47990997 -63.71124268 66.94032288 C-62.61305694 65.83913074 -61.5172877 64.73552392 -60.42382812 63.62963867 C-58.74664365 61.93410693 -57.06150312 60.24680487 -55.375 58.56054688 C-54.30681704 57.48745141 -53.23909233 56.41389956 -52.171875 55.33984375 C-51.66775085 54.83460678 -51.16362671 54.32936981 -50.64422607 53.80882263 C-47.99279589 51.15137382 -47.99279589 51.15137382 -46 48 C-45.34 48 -44.68 48 -44 48 C-44 47.34 -44 46.68 -44 46 C-42.390625 44.4140625 -42.390625 44.4140625 -40.25 42.625 C-37.3756268 40.18382134 -34.61456008 37.72350008 -32 35 C-32.33 34.34 -32.66 33.68 -33 33 C-32.31292969 32.80277344 -31.62585938 32.60554688 -30.91796875 32.40234375 C-26.93652044 30.4889034 -24.35507493 27.71533812 -21.3125 24.5625 C-20.73177734 23.97662109 -20.15105469 23.39074219 -19.55273438 22.78710938 C-17.07391647 20.26244051 -14.97353578 17.96030367 -13 15 C-12.34 15 -11.68 15 -11 15 C-11 14.34 -11 13.68 -11 13 C-10.34 12.67 -9.68 12.34 -9 12 C-9 10.68 -9 9.36 -9 8 C-8.236875 7.938125 -7.47375 7.87625 -6.6875 7.8125 C-3.7941957 7.2353919 -3.7941957 7.2353919 -2.25 4.5625 C-1.8375 3.716875 -1.425 2.87125 -1 2 C-0.67 1.34 -0.34 0.68 0 0 Z \" fill=\"#979898\" transform=\"translate(243,86)\"\\/>\\r\\n<path d=\"M0 0 C-1.65729195 4.28454303 -4.87742984 7.15819806 -8.0703125 10.32910156 C-9.00227448 11.2663205 -9.00227448 11.2663205 -9.95306396 12.22247314 C-12.00537694 14.28357967 -14.0649084 16.3372954 -16.125 18.390625 C-17.55253916 19.81951115 -18.97978129 21.24869409 -20.40673828 22.67816162 C-23.39617111 25.67054221 -26.3891901 28.65927687 -29.38476562 31.64550781 C-33.23198948 35.48131679 -37.07013868 39.326061 -40.90567017 43.17355728 C-43.84962911 46.12472656 -46.79831431 49.07113626 -49.74847412 52.01610565 C-51.16618866 53.43248247 -52.58240924 54.85035623 -53.99713135 56.26972198 C-55.96986399 58.24750847 -57.94884983 60.21881229 -59.9296875 62.18847656 C-60.51780212 62.78063965 -61.10591675 63.37280273 -61.71185303 63.98291016 C-65.77146944 68 -65.77146944 68 -68 68 C-68.226875 68.556875 -68.45375 69.11375 -68.6875 69.6875 C-70.37367031 72.65837149 -72.55387116 74.60822958 -75 77 C-82.72989885 84.58231129 -87.13373924 93.98544164 -91 104 C-91.33 104 -91.66 104 -92 104 C-92.59492066 94.03824336 -87.33303384 85.24307618 -80.875 77.9375 C-79.27320242 76.26907653 -77.64522805 74.62561281 -76 73 C-74.24321301 71.25963638 -72.4870803 69.51863639 -70.73291016 67.77563477 C-69.55064063 66.60638725 -68.3616424 65.44389833 -67.16552734 64.28881836 C-65.74037553 62.89573777 -64.36528469 61.45180196 -63 60 C-63 59.34 -63 58.68 -63 58 C-61.33333333 57 -59.66666667 56 -58 55 C-53.67699573 51.25495093 -53.67699573 51.25495093 -52 46 C-51.4323291 45.92273682 -50.8646582 45.84547363 -50.27978516 45.76586914 C-47.21767937 44.73718785 -45.76006561 43.06616402 -43.5234375 40.74609375 C-42.688125 39.89208984 -41.8528125 39.03808594 -40.9921875 38.15820312 C-40.12851562 37.26037109 -39.26484375 36.36253906 -38.375 35.4375 C-36.65816698 33.66098417 -34.93703624 31.88860817 -33.2109375 30.12109375 C-32.45087402 29.3314624 -31.69081055 28.54183105 -30.90771484 27.72827148 C-29 26 -29 26 -27 26 C-26.79375 25.46890625 -26.5875 24.9378125 -26.375 24.390625 C-24.42038808 20.99226564 -21.77876283 18.48944072 -19 15.75 C-18.4534375 15.19570313 -17.906875 14.64140625 -17.34375 14.0703125 C-13.2533867 10 -13.2533867 10 -11 10 C-10.7421875 9.40703125 -10.484375 8.8140625 -10.21875 8.203125 C-8.90230105 5.82339035 -7.57419218 4.49021208 -5.5 2.75 C-4.8915625 2.22921875 -4.283125 1.7084375 -3.65625 1.171875 C-2 0 -2 0 0 0 Z \" fill=\"#525252\" transform=\"translate(315,300)\"\\/>\\r\\n<path d=\"M0 0 C0.80758697 2.31850408 1.14575112 3.5744175 0.33837891 5.93188477 C-0.21197021 6.9265979 -0.21197021 6.9265979 -0.7734375 7.94140625 C-1.18142578 8.68455078 -1.58941406 9.42769531 -2.00976562 10.19335938 C-2.46029297 10.97517578 -2.91082031 11.75699219 -3.375 12.5625 C-3.83326172 13.36880859 -4.29152344 14.17511719 -4.76367188 15.00585938 C-11.02874658 25.78178787 -19.07554806 34.34150854 -28 43 C-31.7223939 46.71190708 -35.42896883 50.43950422 -39.13549805 54.16723633 C-45.14178112 60.20608679 -51.15306583 66.2399323 -57.16726971 72.27089405 C-60.80141344 75.91552456 -64.43364352 79.56202274 -68.06176758 83.21264648 C-71.57744402 86.74997862 -75.09791778 90.28246889 -78.62183571 93.81159019 C-79.96446483 95.15792293 -81.30532852 96.50601856 -82.6444149 97.85587502 C-84.50925358 99.73513521 -86.38015892 101.60814099 -88.25268555 103.47973633 C-88.80803482 104.04227615 -89.36338409 104.60481598 -89.93556213 105.18440247 C-93.77189001 109 -93.77189001 109 -96 109 C-94.51601598 103.81581898 -91.25425041 100.83995403 -87.5 97.1875 C-86.90574219 96.59001953 -86.31148438 95.99253906 -85.69921875 95.37695312 C-81.26724107 91 -81.26724107 91 -79 91 C-78.7525 90.4225 -78.505 89.845 -78.25 89.25 C-76.81700012 86.67060021 -75.21575324 84.93878408 -73 83 C-72.34 83 -71.68 83 -71 83 C-70.731875 82.401875 -70.46375 81.80375 -70.1875 81.1875 C-69.00082594 79.00152146 -67.90400887 77.58667406 -66 76 C-65.34 76 -64.68 76 -64 76 C-64 75.34 -64 74.68 -64 74 C-62.125 71.875 -62.125 71.875 -60 70 C-59.34 70 -58.68 70 -58 70 C-57.505 68.515 -57.505 68.515 -57 67 C-55.2578125 65.28125 -55.2578125 65.28125 -53.125 63.5 C-49.57689581 60.51487913 -46.58351215 57.87526823 -44 54 C-42.98522973 53.11404772 -41.94207027 52.25971115 -40.875 51.4375 C-39.92625 50.633125 -38.9775 49.82875 -38 49 C-38 48.34 -38 47.68 -38 47 C-37.030625 46.360625 -36.06125 45.72125 -35.0625 45.0625 C-31.75744775 43.28938993 -31.75744775 43.28938993 -31 40 C-29.3984375 38.7109375 -29.3984375 38.7109375 -27.375 37.375 C-22.6888695 33.999971 -19.01024429 29.93868204 -16 25 C-16 24.01 -16 23.02 -16 22 C-15.40058594 21.76410156 -14.80117188 21.52820313 -14.18359375 21.28515625 C-11.47735994 19.69239968 -10.60027042 18.15948143 -9.0625 15.4375 C-8.30066406 14.1071875 -8.30066406 14.1071875 -7.5234375 12.75 C-6.76933594 11.38875 -6.76933594 11.38875 -6 10 C-5.51789063 9.13375 -5.03578125 8.2675 -4.5390625 7.375 C-3.67971393 5.82519218 -2.82617099 4.27214011 -1.98046875 2.71484375 C-1 1 -1 1 0 0 Z \" fill=\"#636565\" transform=\"translate(563,353)\"\\/>\\r\\n<path d=\"M0 0 C3.43655043 5.15482565 2.43336123 11.00586786 1.5703125 16.96875 C-0.63727512 27.3253339 -6.05502644 38.19791658 -14.4375 44.9375 C-16.56215042 46.70804201 -18.20439355 48.25714027 -19.9375 50.4375 C-21.81912441 52.77527578 -23.6625956 54.50213357 -25.9375 56.4375 C-28.411352 58.54688025 -30.40312369 60.48374843 -32.5 63 C-34.47146991 65.3657639 -36.21440278 67.11612984 -38.53515625 69.07421875 C-43.56638434 73.42576763 -48.24659422 78.0998603 -52.9375 82.8125 C-53.79923828 83.67037109 -54.66097656 84.52824219 -55.54882812 85.41210938 C-56.36673828 86.23130859 -57.18464844 87.05050781 -58.02734375 87.89453125 C-59.13710571 89.00598511 -59.13710571 89.00598511 -60.26928711 90.13989258 C-62.06448668 91.8940907 -62.06448668 91.8940907 -63 94 C-63.66 94 -64.32 94 -65 94 C-65 94.66 -65 95.32 -65 96 C-66.42700195 97.40576172 -66.42700195 97.40576172 -68.42578125 99.0546875 C-73.26651327 103.17160163 -77.72067949 107.609505 -82.1875 112.125 C-82.96802734 112.91003906 -83.74855469 113.69507813 -84.55273438 114.50390625 C-86.70358677 116.66752876 -88.85210408 118.83344319 -91 121 C-93.95855845 123.97679301 -96.94489658 126.92126288 -99.953125 129.84765625 C-101.38556744 131.25245044 -102.81785584 132.65740172 -104.25 134.0625 C-104.9821875 134.76955078 -105.714375 135.47660156 -106.46875 136.20507812 C-107.16484375 136.89150391 -107.8609375 137.57792969 -108.578125 138.28515625 C-109.21137695 138.90269775 -109.84462891 139.52023926 -110.49707031 140.15649414 C-112.12034484 142.14761597 -112.42628698 143.54465267 -113 146 C-114.65697379 146.69040574 -116.3255761 147.3530635 -118 148 C-121.052768 150.731424 -123.6572058 153.76812515 -126.3125 156.875 C-129.34631326 160.38470554 -132.61148792 163.39984147 -136.140625 166.40234375 C-139.55804865 169.33874348 -142.5005896 172.25088439 -145 176 C-145.66 176 -146.32 176 -147 176 C-145.40408815 172.04396451 -142.66136081 169.39819512 -139.67474365 166.46115112 C-138.85161112 165.63968871 -138.85161112 165.63968871 -138.01184964 164.80163109 C-136.17112061 162.96697591 -134.3233529 161.13957643 -132.47558594 159.31201172 C-131.15453612 157.99807443 -129.83395527 156.68366549 -128.5138092 155.36882019 C-125.66876241 152.53687983 -122.82073896 149.70797898 -119.97048187 146.88128281 C-115.45929567 142.40668761 -110.95681483 137.92340234 -106.45587158 133.43850708 C-93.6549419 120.68587124 -80.84241099 107.94492949 -68.02099609 95.21289062 C-60.94080228 88.18189829 -53.8678964 81.14365487 -46.80263925 74.09765255 C-42.33499733 69.64305597 -37.85851255 65.19760623 -33.37516832 60.75881648 C-30.57910832 57.98632334 -27.79155092 55.20540014 -25.0062542 52.42209816 C-23.7190318 51.13914801 -22.42839342 49.85961407 -21.13399696 48.58390236 C-6.09535615 33.75388138 -0.76563995 21.04189797 0 0 Z \" fill=\"#878888\" transform=\"translate(692,341)\"\\/>\\r\\n<path d=\"M0 0 C2.16015625 0.07421875 2.16015625 0.07421875 5 1 C7.03585104 3.24328856 8.72283853 5.34462729 10.4375 7.8125 C10.91977051 8.49320557 11.40204102 9.17391113 11.89892578 9.87524414 C25.3827282 29.28746592 30.80562061 51.49245079 26.6875 74.875 C25.59376838 80.77345683 24.1408781 86.39293831 22 92 C21.01 92 20.02 92 19 92 C19.99 86.06 19.99 86.06 21 80 C21.66 80 22.32 80 23 80 C23 78.68 23 77.36 23 76 C22.34 75.67 21.68 75.34 21 75 C21 74.01 21 73.02 21 72 C22.485 71.505 22.485 71.505 24 71 C24.020625 69.741875 24.04125 68.48375 24.0625 67.1875 C24.07410156 66.47980469 24.08570313 65.77210938 24.09765625 65.04296875 C24.08263217 62.79694539 24.08263217 62.79694539 23 60 C22.34 59.67 21.68 59.34 21 59 C22 56 22 56 23 55 C22.34 55 21.68 55 21 55 C21.33 53.02 21.66 51.04 22 49 C22.66 49 23.32 49 24 49 C23.43338559 46.26638688 22.84754751 43.53936791 22.25 40.8125 C22.09273437 40.04357422 21.93546875 39.27464844 21.7734375 38.48242188 C20.69877567 33.66711023 19.36180203 30.74758259 16 27 C15.25 24.1875 15.25 24.1875 15 22 C15 22.66 15 23.32 15 24 C14.34 24 13.68 24 13 24 C12.9175 22.80375 12.835 21.6075 12.75 20.375 C12.21733698 16.09847689 10.82507007 13.32361185 8 10 C7.01 10 6.02 10 5 10 C5 8.35 5 6.7 5 5 C3.68 4.67 2.36 4.34 1 4 C0.67 2.68 0.34 1.36 0 0 Z M24 50 C24 50.66 24 51.32 24 52 C23.01 52.495 23.01 52.495 22 53 C22.99 53 23.98 53 25 53 C24.67 52.01 24.34 51.02 24 50 Z \" fill=\"#343535\" transform=\"translate(543,262)\"\\/>\\r\\n<path d=\"M0 0 C0.51949219 0.60070312 1.03898437 1.20140625 1.57421875 1.8203125 C-4.42578125 -0.1796875 -4.42578125 -0.1796875 -6.37109375 -0.98046875 C-16.71891686 -5.00886483 -29.35939007 -4.24463752 -39.6875 -0.3203125 C-51.4054315 5.4860593 -60.59214448 16.90328089 -69.73828125 26.0078125 C-70.21413666 26.4808078 -70.68999207 26.9538031 -71.18026733 27.44113159 C-76.2912645 32.53054153 -81.27136958 37.66638515 -85.96655273 43.14282227 C-87.81317162 45.26564615 -89.78016481 47.23858907 -91.80078125 49.1953125 C-94.47788321 51.74211534 -94.47788321 51.74211534 -96.42578125 54.8203125 C-97.08578125 54.8203125 -97.74578125 54.8203125 -98.42578125 54.8203125 C-98.42578125 55.4803125 -98.42578125 56.1403125 -98.42578125 56.8203125 C-99.7890625 58.23046875 -99.7890625 58.23046875 -101.73828125 59.8828125 C-102.45757812 60.49640625 -103.176875 61.11 -103.91796875 61.7421875 C-107.64884583 64.83381773 -111.41803109 67.8773925 -115.203125 70.90234375 C-117.48911273 72.62614577 -117.48911273 72.62614577 -118.42578125 74.8203125 C-119.08578125 74.4903125 -119.74578125 74.1603125 -120.42578125 73.8203125 C-119.52859375 72.7375 -119.52859375 72.7375 -118.61328125 71.6328125 C-116.40027163 68.93394624 -116.40027163 68.93394624 -114.92578125 66.1328125 C-112.67690014 62.66578746 -110.24288694 62.09268106 -106.42578125 60.8203125 C-105.70871143 58.83782535 -105.04287712 56.83615901 -104.42578125 54.8203125 C-103.76578125 54.1603125 -103.10578125 53.5003125 -102.42578125 52.8203125 C-102.09578125 53.4803125 -101.76578125 54.1403125 -101.42578125 54.8203125 C-101.09578125 54.1603125 -100.76578125 53.5003125 -100.42578125 52.8203125 C-99.76578125 52.8203125 -99.10578125 52.8203125 -98.42578125 52.8203125 C-98.09578125 51.1703125 -97.76578125 49.5203125 -97.42578125 47.8203125 C-96.43578125 47.8203125 -95.44578125 47.8203125 -94.42578125 47.8203125 C-90.5603622 44.35134669 -86.55796943 40.46208492 -84.48828125 35.6328125 C-82.99579899 33.08681335 -81.12835934 32.83377928 -78.42578125 31.8203125 C-77.76578125 30.8303125 -77.10578125 29.8403125 -76.42578125 28.8203125 C-75.76578125 28.8203125 -75.10578125 28.8203125 -74.42578125 28.8203125 C-74.09578125 27.8303125 -73.76578125 26.8403125 -73.42578125 25.8203125 C-71.75390625 24.20703125 -71.75390625 24.20703125 -69.67578125 22.5078125 C-67.13411521 20.35821197 -65.07104566 18.39462979 -62.92578125 15.8203125 C-59.76074486 12.02226883 -56.21785143 8.97465659 -52.42578125 5.8203125 C-51.72324219 5.20671875 -51.02070313 4.593125 -50.296875 3.9609375 C-37.18565911 -7.01589441 -14.01342069 -12.59176931 0 0 Z \" fill=\"#9E9F9D\" transform=\"translate(369.42578125,9.1796875)\"\\/>\\r\\n<path d=\"M0 0 C-1.40523815 4.39627578 -3.50290852 6.82437999 -6.8125 10 C-7.66457031 10.825 -8.51664062 11.65 -9.39453125 12.5 C-10.25433594 13.325 -11.11414063 14.15 -12 15 C-14.63074547 17.60993261 -17.23786807 20.24075654 -19.82421875 22.89453125 C-20.7786209 23.86721196 -21.73304812 24.83986808 -22.6875 25.8125 C-23.17283203 26.31458984 -23.65816406 26.81667969 -24.15820312 27.33398438 C-25.40124606 28.59417273 -26.69699892 29.80191044 -28 31 C-28.66 31 -29.32 31 -30 31 C-30.38285156 31.87289673 -30.38285156 31.87289673 -30.7734375 32.76342773 C-32.12416263 35.22640403 -33.61547385 36.82791981 -35.625 38.78515625 C-36.68460937 39.82833008 -36.68460937 39.82833008 -37.765625 40.89257812 C-38.50296875 41.60865234 -39.2403125 42.32472656 -40 43.0625 C-41.46056988 44.48859839 -42.91899767 45.91689484 -44.375 47.34765625 C-45.02210938 47.97679932 -45.66921875 48.60594238 -46.3359375 49.25415039 C-48.1916303 51.10051934 -48.1916303 51.10051934 -50 54 C-51.07494116 54.99100369 -52.18216595 55.94767495 -53.3125 56.875 C-57.06462795 60.02647545 -60.69995713 63.17993999 -63.5625 67.1875 C-65 69 -65 69 -67.0625 70 C-70.36923285 71.70670082 -70.87059771 74.61179314 -72 78 C-72.66 77.67 -73.32 77.34 -74 77 C-73.48539161 72.98216255 -72.56620273 71.08230989 -69.6484375 68.29296875 C-68.96136719 67.62330078 -68.27429688 66.95363281 -67.56640625 66.26367188 C-66.48166016 65.2359668 -66.48166016 65.2359668 -65.375 64.1875 C-63.96363944 62.82942285 -62.55477085 61.46875108 -61.1484375 60.10546875 C-60.52114746 59.50887451 -59.89385742 58.91228027 -59.24755859 58.29760742 C-57.38785599 56.3964928 -55.66452842 54.46526383 -53.93530273 52.44848633 C-49.16997069 46.96181231 -44.02059779 41.85631162 -38.88671875 36.71875 C-37.82527149 35.65408315 -36.76389683 34.58934391 -35.70259094 33.52453613 C-33.49481351 31.31081479 -31.28502404 29.09912492 -29.07397461 26.88867188 C-26.23639318 24.05119298 -23.40580773 21.20684065 -20.57684612 18.36077118 C-18.39530511 16.16815029 -16.20927358 13.98005023 -14.02192116 11.79322815 C-12.97528326 10.74540849 -11.93027047 9.69596299 -10.88690758 8.6448822 C-9.43668572 7.18492138 -7.98033711 5.73136317 -6.5222168 4.27929688 C-5.69505661 3.45071167 -4.86789642 2.62212646 -4.01567078 1.76843262 C-2 0 -2 0 0 0 Z \" fill=\"#464646\" transform=\"translate(417,256)\"\\/>\\r\\n<path d=\"M0 0 C0 0.66 0 1.32 0 2 C-1.49609375 3.4375 -1.49609375 3.4375 -3.4375 5 C-6.15188238 7.14525044 -6.15188238 7.14525044 -8 10 C-8.66 10 -9.32 10 -10 10 C-10.33 10.99 -10.66 11.98 -11 13 C-12.56640625 14.54296875 -12.56640625 14.54296875 -14.5625 16.1875 C-19.82724843 20.65542164 -25.15281583 25.22922374 -29 31 C-30.99665598 32.67067133 -32.99651034 34.33752986 -35 36 C-35.495 36.99 -35.495 36.99 -36 38 C-36.66 38 -37.32 38 -38 38 C-38 38.66 -38 39.32 -38 40 C-38.66 40 -39.32 40 -40 40 C-39.67 40.99 -39.34 41.98 -39 43 C-40.98 43.66 -42.96 44.32 -45 45 C-45 46.32 -45 47.64 -45 49 C-45.99 49 -46.98 49 -48 49 C-48.66 49.66 -49.32 50.32 -50 51 C-50 50.34 -50 49.68 -50 49 C-51.32 49 -52.64 49 -54 49 C-54 47.68 -54 46.36 -54 45 C-55.72937829 42.68721883 -55.72937829 42.68721883 -58 41 C-58.99 41 -59.98 41 -61 41 C-61 40.34 -61 39.68 -61 39 C-62.32 38.67 -63.64 38.34 -65 38 C-64.01 38 -63.02 38 -62 38 C-66.46681491 32.12779369 -66.46681491 32.12779369 -73 29 C-73 27.68 -73 26.36 -73 25 C-73.66 25 -74.32 25 -75 25 C-75.66 24.01 -76.32 23.02 -77 22 C-77.99 21.34 -78.98 20.68 -80 20 C-81.2331919 18.53964117 -82.46390487 17.0767067 -83.66015625 15.5859375 C-85.16824056 13.74378934 -85.16824056 13.74378934 -87.8125 11.3125 C-90 9 -90 9 -90 6 C-89.34 6 -88.68 6 -88 6 C-86.7734375 7.28515625 -86.7734375 7.28515625 -85.375 9.0625 C-83.12892257 11.78287048 -80.8249676 14.10553905 -78.125 16.375 C-74.36940738 19.56330425 -71.16062017 23.05266615 -67.95703125 26.7890625 C-65.73481414 29.29959121 -63.37776927 31.63646887 -61 34 C-60.0790962 34.97379522 -59.16119021 35.95043298 -58.24609375 36.9296875 C-57.30995932 37.91151887 -56.37376106 38.89328938 -55.4375 39.875 C-54.73463867 40.64070312 -54.73463867 40.64070312 -54.01757812 41.421875 C-52.489563 43.06080168 -52.489563 43.06080168 -50 45 C-46.0948546 44.77798957 -44.18344772 42.53607445 -41.53857422 39.84741211 C-40.66441864 38.96657455 -39.79026306 38.085737 -38.88961792 37.1782074 C-37.94463057 36.21126315 -36.99965402 35.24430835 -36.0546875 34.27734375 C-35.079508 33.29148699 -34.10351331 32.30643598 -33.1267395 31.32215881 C-30.55987148 28.73252172 -28.00127754 26.13488145 -25.44519043 23.53460693 C-21.34822077 19.36740623 -17.24371068 15.20775265 -13.1300087 11.05706978 C-11.69302074 9.6033324 -10.26259121 8.14335354 -8.83248901 6.68284607 C-7.53071213 5.36631798 -7.53071213 5.36631798 -6.20263672 4.02319336 C-5.43748749 3.24455429 -4.67233826 2.46591522 -3.88400269 1.66368103 C-2 0 -2 0 0 0 Z \" fill=\"#636364\" transform=\"translate(485,577)\"\\/>\\r\\n<path d=\"M0 0 C3.78693475 2.09203011 6.65294343 4.41687759 9.6875 7.4921875 C10.98300781 8.79736328 10.98300781 8.79736328 12.3046875 10.12890625 C13.19414062 11.03511719 14.08359375 11.94132812 15 12.875 C15.88945312 13.77347656 16.77890625 14.67195313 17.6953125 15.59765625 C19.35778407 17.27749693 21.01818521 18.95939113 22.67578125 20.64404297 C25.10599167 23.10743904 27.55224797 25.5540306 30 28 C58.33333333 56.33333333 86.66666667 84.66666667 115 113 C115 113.66 115 114.32 115 115 C114.34 115 113.68 115 113 115 C111.51953125 113.49609375 111.51953125 113.49609375 109.8125 111.4375 C105.70998774 106.61854069 101.51467864 101.94887594 96.5 98.0625 C94.2160214 96.17821765 92.47619757 94.30701181 90.5625 92.0625 C88.45311975 89.588648 86.51625157 87.59687631 84 85.5 C80.88574907 82.90479089 78.4179764 80.12588851 75.79296875 77.0546875 C71.5700002 72.21529435 67.03760167 67.97705395 62 64 C59.52446315 61.64522105 57.26086492 59.341823 55.1875 56.625 C52.73023163 53.67627796 50.0263089 51.31243534 47.09765625 48.84375 C44.61873506 46.66488445 42.31955825 44.34763157 40 42 C38.68902344 40.70642578 38.68902344 40.70642578 37.3515625 39.38671875 C36.45179688 38.49597656 35.55203125 37.60523438 34.625 36.6875 C33.73039062 35.80449219 32.83578125 34.92148438 31.9140625 34.01171875 C29.76399133 31.83805284 27.75062575 29.58007908 25.7578125 27.26171875 C21.47930364 22.32511275 16.87814738 17.73168766 12.25 13.125 C11.40050781 12.27164063 10.55101562 11.41828125 9.67578125 10.5390625 C8.45181641 9.31703125 8.45181641 9.31703125 7.203125 8.0703125 C6.46739258 7.33570801 5.73166016 6.60110352 4.97363281 5.84423828 C2.93552057 3.83944386 2.93552057 3.83944386 0 2 C0 1.34 0 0.68 0 0 Z \" fill=\"#A1A2A1\" transform=\"translate(410,49)\"\\/>\\r\\n<path d=\"M0 0 C0.33 0 0.66 0 1 0 C1.02578125 1.22074219 1.0515625 2.44148438 1.078125 3.69921875 C1.65389729 22.66299409 6.10291144 38.37986647 20.33203125 51.8125 C29.48910909 59.3204994 41.20078783 64.10949342 53 65 C52 66.5625 52 66.5625 50 68 C44.46891993 67.71875864 39.33802448 66.42347319 34 65 C33.31550781 64.8659375 32.63101563 64.731875 31.92578125 64.59375 C28.8722661 63.65230111 27.19403042 61.25028761 25 59 C23.515 58.505 23.515 58.505 22 58 C22 57.34 22 56.68 22 56 C18.535 55.505 18.535 55.505 15 55 C14.7525 54.0925 14.505 53.185 14.25 52.25 C12.94381763 48.85392584 11.60917178 47.44083812 9 45 C8.505 43.515 8.505 43.515 8 42 C7.34 41.34 6.68 40.68 6 40 C4.76044097 37.55523461 3.58061836 35.11393399 2.4375 32.625 C2.12103516 31.95210938 1.80457031 31.27921875 1.47851562 30.5859375 C-1.44407028 24.28159084 -2.12774708 19.95641929 -1.625 13.0625 C-1.58117187 12.35931641 -1.53734375 11.65613281 -1.4921875 10.93164062 C-1.24140564 7.21519276 -0.83841469 3.63076194 0 0 Z \" fill=\"#3C3C3D\" transform=\"translate(222,405)\"\\/>\\r\\n<path d=\"M0 0 C4.39750672 0.50740462 6.86948922 3.08293314 10 6 C10 6.66 10 7.32 10 8 C10.66 8.33 11.32 8.66 12 9 C13.36764034 10.60697739 14.73338104 12.21560762 16.08984375 13.83203125 C20.67290474 19.03366489 25.72980601 23.83637273 30.74609375 28.6171875 C33 31 33 31 34 34 C34.66 34 35.32 34 36 34 C37.33105469 35.34570312 37.33105469 35.34570312 38.921875 37.28125 C43.29958503 42.42562635 47.99923824 47.22053243 52.76269531 52.00292969 C54.26830012 53.51842028 55.76292347 55.04425966 57.2578125 56.5703125 C58.21809434 57.53711001 59.17900837 58.50328011 60.140625 59.46875 C61.00204102 60.33951172 61.86345703 61.21027344 62.75097656 62.10742188 C64.89267081 64.32193485 64.89267081 64.32193485 68 64 C67.505 65.98 67.505 65.98 67 68 C67.66 68 68.32 68 69 68 C68.505 69.485 68.505 69.485 68 71 C61.20755954 64.23082042 54.41789106 57.45887583 47.63165951 50.68347168 C44.4798142 47.53682529 41.32705383 44.3911077 38.17211914 41.24755859 C35.12244614 38.20882145 32.07528563 35.16758496 29.02978706 32.12466431 C27.87257969 30.96929202 26.71449862 29.81479407 25.55549431 28.66122437 C19.97628136 23.10711345 14.43300972 17.56516911 9.33728027 11.55526733 C6.91323922 8.73608878 4.19296946 6.22556104 1.50390625 3.6640625 C0 2 0 2 0 0 Z \" fill=\"#5C5D5D\" transform=\"translate(342,577)\"\\/>\\r\\n<path d=\"M0 0 C4.44496055 2.49696987 7.0635749 5.44072469 8.6875 10.3125 C9.20443159 16.90337774 8.00788751 22.36592048 3.91162109 27.56762695 C1.75649463 29.91285254 -0.46938367 32.15182992 -2.75 34.375 C-3.51376953 35.15810547 -4.27753906 35.94121094 -5.06445312 36.74804688 C-5.80501953 37.48216797 -6.54558594 38.21628906 -7.30859375 38.97265625 C-8.31684204 39.97244507 -8.31684204 39.97244507 -9.34545898 40.99243164 C-11.3125 42.3125 -11.3125 42.3125 -13.56274414 42.02124023 C-14.14016357 41.78735596 -14.71758301 41.55347168 -15.3125 41.3125 C-14.02701591 39.97320495 -12.73391845 38.64121357 -11.4375 37.3125 C-10.71820313 36.57 -9.99890625 35.8275 -9.2578125 35.0625 C-7.3125 33.3125 -7.3125 33.3125 -5.3125 33.3125 C-4.9825 32.3225 -4.6525 31.3325 -4.3125 30.3125 C-3.6525 30.3125 -2.9925 30.3125 -2.3125 30.3125 C-2.23 29.52875 -2.1475 28.745 -2.0625 27.9375 C-1.815 27.07125 -1.5675 26.205 -1.3125 25.3125 C0.625 24.25 0.625 24.25 2.6875 23.3125 C5.22750454 19.88349387 4.98854004 16.45180053 4.6875 12.3125 C4.0275 11.3225 3.3675 10.3325 2.6875 9.3125 C2.6875 8.3225 2.6875 7.3325 2.6875 6.3125 C1.3675 6.3125 0.0475 6.3125 -1.3125 6.3125 C-1.3125 4.9925 -1.3125 3.6725 -1.3125 2.3125 C-9.4306571 1.39549604 -9.4306571 1.39549604 -16.95703125 3.87109375 C-18.88499065 5.59757271 -20.64369655 7.33615271 -22.3125 9.3125 C-22.9725 8.3225 -23.6325 7.3325 -24.3125 6.3125 C-23.04677767 5.16102339 -21.77472094 4.01650686 -20.5 2.875 C-19.79230469 2.23691406 -19.08460938 1.59882813 -18.35546875 0.94140625 C-13.13506379 -3.2209434 -5.81315854 -2.69974404 0 0 Z \" fill=\"#4B4B4B\" transform=\"translate(485.3125,307.6875)\"\\/>\\r\\n<path d=\"M0 0 C0 3.68829486 -1.179715 4.52812843 -3.68867493 7.05082703 C-4.23251328 7.5823085 -4.77635162 8.11378998 -5.33666992 8.66137695 C-6.18781372 9.51076843 -6.18781372 9.51076843 -7.05615234 10.37731934 C-8.94072805 12.25468643 -10.83559728 14.12131126 -12.73046875 15.98828125 C-14.04200963 17.2916858 -15.35281643 18.59582939 -16.66291809 19.90068054 C-20.12179837 23.34240817 -23.58913199 26.77548761 -27.05871582 30.2064209 C-32.59664082 35.68527978 -38.12214529 41.17665532 -43.64687538 46.66881371 C-45.57452319 48.58255888 -47.50597453 50.49239771 -49.43803406 52.40168762 C-50.63089613 53.58451654 -51.82367491 54.76742948 -53.01635742 55.95043945 C-53.55007462 56.47584824 -54.08379181 57.00125702 -54.63368225 57.54258728 C-57.98019903 60.86941748 -61.02748327 64.33416413 -64 68 C-64.8125 66.375 -64.8125 66.375 -65 64 C-61.94637134 59.56731323 -58.13791035 56.28512347 -54.06640625 52.80078125 C-52.00503376 51.0043867 -50.01979673 49.15906765 -48.0625 47.25 C-47.49660156 46.69828125 -46.93070312 46.1465625 -46.34765625 45.578125 C-44.7671139 43.92733264 -44.7671139 43.92733264 -44 41 C-43.21625 40.54625 -42.4325 40.0925 -41.625 39.625 C-38.62854497 37.77005165 -37.76823333 35.97384696 -36 33 C-35.01 33 -34.02 33 -33 33 C-33 32.34 -33 31.68 -33 31 C-30.62686856 28.4234573 -28.19932171 26.15556817 -25.4375 24 C-22.93574543 22.09255627 -22.93574543 22.09255627 -21.125 19.625 C-18.80290467 16.7565293 -16.26698333 14.62224093 -13.390625 12.33203125 C-12.93171875 11.89246094 -12.4728125 11.45289063 -12 11 C-12 10.34 -12 9.68 -12 9 C-11.01 8.67 -10.02 8.34 -9 8 C-7.44849374 6.39851831 -7.44849374 6.39851831 -6 4.5 C-3.91864868 1.85494936 -3.30078891 1.10026297 0 0 Z \" fill=\"#494A4A\" transform=\"translate(472,349)\"\\/>\\r\\n<path d=\"M0 0 C5.98647977 1.34353057 8.99359344 4.51435927 13.0625 8.8125 C13.66126953 9.42931641 14.26003906 10.04613281 14.87695312 10.68164062 C16.05824224 11.89915766 17.23579271 13.12031415 18.40942383 14.34521484 C20.57360009 16.5967554 22.78687165 18.79657835 25 21 C26.52519275 22.53600849 28.04987554 24.07252342 29.57421875 25.609375 C31.27858229 27.32297987 32.9830111 29.03651982 34.6875 30.75 C35.55439453 31.62527344 36.42128906 32.50054688 37.31445312 33.40234375 C38.55678711 34.64951172 38.55678711 34.64951172 39.82421875 35.921875 C40.95476685 37.06027832 40.95476685 37.06027832 42.1081543 38.22167969 C43.88449005 40.06172252 43.88449005 40.06172252 46 41 C46 41.66 46 42.32 46 43 C46.66 43 47.32 43 48 43 C48.53625 43.680625 49.0725 44.36125 49.625 45.0625 C52.19413667 48.24011641 55.00329506 50.70711889 58.09375 53.359375 C60.17573081 55.15124373 62.17355425 56.94524853 64 59 C64 59.66 64 60.32 64 61 C64.5775 61.2475 65.155 61.495 65.75 61.75 C68.32939979 63.18299988 70.06121592 64.78424676 72 67 C72 67.66 72 68.32 72 69 C72.66 69 73.32 69 74 69 C74 69.66 74 70.32 74 71 C74.56203125 71.23460937 75.1240625 71.46921875 75.703125 71.7109375 C78.54635891 73.30663 80.48098127 75.28924543 82.75 77.625 C83.54921875 78.44226563 84.3484375 79.25953125 85.171875 80.1015625 C85.77515625 80.72804688 86.3784375 81.35453125 87 82 C86.01 82.495 86.01 82.495 85 83 C84.49210937 82.55269531 83.98421875 82.10539063 83.4609375 81.64453125 C82.77257812 81.03996094 82.08421875 80.43539062 81.375 79.8125 C80.6428125 79.16925781 79.910625 78.52601563 79.15625 77.86328125 C77.42312906 76.3656387 75.66703779 74.92505133 73.875 73.5 C71.12655391 71.11004688 68.87993431 68.65823811 66.58984375 65.84375 C64.51266904 63.43483977 62.26225622 61.23575834 60 59 C59.07960937 58.06800781 58.15921875 57.13601563 57.2109375 56.17578125 C56.26563759 55.2213417 55.32032502 54.26691468 54.375 53.3125 C53.89804688 52.82716797 53.42109375 52.34183594 52.9296875 51.84179688 C50.70746954 49.60414685 48.63630864 47.7575391 46 46 C45.67 45.34 45.34 44.68 45 44 C42.97536745 43.34786708 42.97536745 43.34786708 41 43 C41 42.01 41 41.02 41 40 C39.20286261 37.78495995 39.20286261 37.78495995 36.80078125 35.5078125 C35.92099609 34.63769531 35.04121094 33.76757812 34.13476562 32.87109375 C33.20341797 31.96488281 32.27207031 31.05867187 31.3125 30.125 C30.40048828 29.22652344 29.48847656 28.32804688 28.54882812 27.40234375 C26.83711885 25.71677694 25.12234846 24.0343091 23.40356445 22.35595703 C19.97779586 18.99804267 16.58680917 15.61716137 13.28125 12.140625 C12.35421798 11.17703397 11.42713436 10.21349257 10.5 9.25 C10.03980469 8.75628906 9.57960937 8.26257813 9.10546875 7.75390625 C6.21205394 4.7789868 4.17666763 3.33292278 0 3 C0 2.01 0 1.02 0 0 Z \" fill=\"#949796\" transform=\"translate(148,514)\"\\/>\\r\\n<path d=\"M0 0 C0.66 0 1.32 0 2 0 C0.41297073 3.84613206 -2.03740276 6.29730432 -4.95288086 9.22753906 C-5.4555397 9.73530884 -5.95819855 10.24307861 -6.47608948 10.76623535 C-8.13387765 12.43788922 -9.79895665 14.10204469 -11.46484375 15.765625 C-12.62087225 16.92554068 -13.77667663 18.08567978 -14.93226624 19.24603271 C-17.35240678 21.67362792 -19.77637789 24.09731971 -22.20288086 26.51855469 C-25.31639186 29.62625709 -28.41835923 32.74520676 -31.51735592 35.86737442 C-33.89956942 38.26429218 -36.28864425 40.65427657 -38.67978096 43.04228973 C-39.82681922 44.18984238 -40.97148684 45.33976958 -42.11375237 46.49207306 C-43.70803003 48.09864025 -45.31149461 49.69543412 -46.91772461 51.29003906 C-47.82880478 52.20174866 -48.73988495 53.11345825 -49.67857361 54.05279541 C-52 56 -52 56 -55 56 C-55 54 -55 54 -52.9375 51.75 C-50.87000685 49.7527899 -48.70736451 47.90277545 -46.5 46.0625 C-43.22681225 43.29941943 -40.69117688 40.32856088 -38 37 C-36.3540349 35.31288577 -34.68762851 33.6454378 -33 32 C-32.2575 31.236875 -31.515 30.47375 -30.75 29.6875 C-28.43385795 27.42399754 -26.06906759 25.30845357 -23.625 23.1875 C-20.04544335 20.03323721 -16.91535118 16.72586832 -13.828125 13.09765625 C-11.70361096 10.65991257 -9.50175046 8.32075572 -7.25 6 C-6.14398438 4.8553125 -6.14398438 4.8553125 -5.015625 3.6875 C-3 2 -3 2 0 2 C0 1.34 0 0.68 0 0 Z \" fill=\"#3B3B3B\" transform=\"translate(301,204)\"\\/>\\r\\n<path d=\"M0 0 C0.82951172 0.39638672 0.82951172 0.39638672 1.67578125 0.80078125 C0.68344151 1.99469 -0.31870029 3.18045038 -1.32421875 4.36328125 C-1.88109375 5.02457031 -2.43796875 5.68585938 -3.01171875 6.3671875 C-4.92391581 8.3795165 -6.83647934 10.13391424 -8.94140625 11.93164062 C-13.40705324 15.81810249 -17.59194545 19.94113801 -21.76171875 24.140625 C-22.91003174 25.29106041 -22.91003174 25.29106041 -24.08154297 26.46473694 C-26.49815072 28.88689006 -28.91123601 31.31251737 -31.32421875 33.73828125 C-32.97372561 35.39281018 -34.62346304 37.04710927 -36.2734375 38.70117188 C-40.29303246 42.73172327 -44.30975044 46.76512397 -48.32421875 50.80078125 C-48.98421875 49.81078125 -49.64421875 48.82078125 -50.32421875 47.80078125 C-47.62011684 45.06739466 -44.9101876 42.33985601 -42.19921875 39.61328125 C-41.43867188 38.84435547 -40.678125 38.07542969 -39.89453125 37.28320312 C-35.85379153 33.22504642 -31.78367499 29.39256048 -27.32421875 25.80078125 C-24.09685663 22.74787113 -21.14920586 19.49255184 -18.19921875 16.17578125 C-14.68571994 12.27385543 -11.14784608 8.40106677 -7.51171875 4.61328125 C-6.61839844 3.67097656 -5.72507812 2.72867187 -4.8046875 1.7578125 C-2.32421875 -0.19921875 -2.32421875 -0.19921875 0 0 Z \" fill=\"#5B5C5C\" transform=\"translate(469.32421875,411.19921875)\"\\/>\\r\\n<path d=\"M0 0 C0.66 0 1.32 0 2 0 C1.0712443 4.20563179 -0.83776718 7.76668407 -2.8125 11.5625 C-10.41498969 26.52240135 -13.20735795 39.90351013 -13.625 56.6875 C-13.66367188 57.97333984 -13.70234375 59.25917969 -13.7421875 60.58398438 C-13.8355269 63.72252168 -13.92131076 66.86106706 -14 70 C-18.03199065 65.96800935 -17.18328438 58.99426317 -17.25 53.5625 C-17.21896144 34.56690136 -11.58652139 15.23992904 0 0 Z \" fill=\"#393939\" transform=\"translate(205,361)\"\\/>\\r\\n<path d=\"M0 0 C4.37952792 1.41563257 6.90451699 3.51581839 10.1574707 6.73754883 C10.89008369 7.4574575 10.89008369 7.4574575 11.63749695 8.19190979 C13.24145057 9.77256013 14.83405556 11.36407436 16.42578125 12.95703125 C17.53935487 14.06350149 18.65322552 15.16967288 19.76737976 16.27555847 C22.09663454 18.59138539 24.41988656 20.91304513 26.73950195 23.23852539 C29.71318607 26.21811715 32.70474574 29.17902111 35.70148945 32.135396 C38.00494617 34.41301644 40.29684728 36.7019955 42.58559227 38.99439049 C43.68407146 40.09117598 44.78654146 41.18397951 45.89303017 42.2726841 C47.43737689 43.79491221 48.96503579 45.33216495 50.48950195 46.87426758 C51.36266556 47.74537674 52.23582916 48.6164859 53.13545227 49.51399231 C55.23685736 52.31580271 55.44186227 53.58360942 55 57 C54.01 57.33 53.02 57.66 52 58 C52.103125 57.2575 52.20625 56.515 52.3125 55.75 C52.27853223 52.77779982 52.27853223 52.77779982 49.625 50.8125 C48.75875 50.214375 47.8925 49.61625 47 49 C45.32337646 47.32337646 43.82968789 45.62896879 42.3125 43.8125 C38.28208916 39.0905971 34.18336956 34.45557971 29 31 C28.13620013 29.98345503 27.30285872 28.94033176 26.5 27.875 C25.675 26.92625 24.85 25.9775 24 25 C23.01 25 22.02 25 21 25 C21 24.01 21 23.02 21 22 C20.01 21.34 19.02 20.68 18 20 C16.8125 17.875 16.8125 17.875 16 16 C14.02 16.99 14.02 16.99 12 18 C12 15.69 12 13.38 12 11 C11.46375 10.773125 10.9275 10.54625 10.375 10.3125 C6.74326382 8.3054879 2.88582352 5.77164705 1 2 C0.34 1.67 -0.32 1.34 -1 1 C-0.67 0.67 -0.34 0.34 0 0 Z \" fill=\"#A0A0A0\" transform=\"translate(232,596)\"\\/>\\r\\n<path d=\"M0 0 C4.84614764 0.48461476 8.0769199 2.86003469 11.875 5.6875 C12.49850342 6.14519775 13.12200684 6.60289551 13.7644043 7.07446289 C15.51855595 8.37152907 17.26110992 9.68257789 19 11 C19.71027344 11.53109375 20.42054688 12.0621875 21.15234375 12.609375 C32.38481237 21.59534989 43.08443079 36.48218467 48 50 C47.65625 52.3515625 47.65625 52.3515625 47 54 C44.44186187 51.44186187 43.3660163 48.77056063 41.8125 45.5 C35.82626568 33.24994072 27.89428305 21.90364106 16.46875 14.19140625 C15.74171875 13.60166016 15.74171875 13.60166016 15 13 C15 12.34 15 11.68 15 11 C14.28457031 10.75378906 13.56914062 10.50757813 12.83203125 10.25390625 C9.67005074 8.85391212 7.36274928 7.12129608 4.6875 4.9375 C3.80449219 4.22464844 2.92148437 3.51179687 2.01171875 2.77734375 C1.34785156 2.19082031 0.68398438 1.60429688 0 1 C0 0.67 0 0.34 0 0 Z \" fill=\"#3F3F40\" transform=\"translate(416,126)\"\\/>\\r\\n<path d=\"M0 0 C-1.51653105 3.56145023 -3.6030054 5.85630225 -6.32617188 8.58496094 C-7.22049927 9.48559265 -8.11482666 10.38622437 -9.03625488 11.31414795 C-10.0134985 12.28781273 -10.99100311 13.26121561 -11.96875 14.234375 C-12.97030424 15.23727681 -13.97156145 16.24047532 -14.97253418 17.24395752 C-17.06748299 19.34185055 -19.16599615 21.43609383 -21.26708984 23.52783203 C-23.96417928 26.21349788 -26.65215186 28.90808178 -29.3375473 31.60543442 C-31.40136783 33.67646736 -33.46991001 35.74273116 -35.53993225 37.80756378 C-36.53340111 38.79969595 -37.52537947 39.79332289 -38.51585388 40.78844452 C-39.89701561 42.1746643 -41.28524951 43.55382699 -42.67382812 44.93261719 C-43.46277466 45.71997253 -44.25172119 46.50732788 -45.0645752 47.31854248 C-47 49 -47 49 -49 49 C-47.51601598 43.81581898 -44.25425041 40.83995403 -40.5 37.1875 C-39.60861328 36.2912793 -39.60861328 36.2912793 -38.69921875 35.37695312 C-34.26724107 31 -34.26724107 31 -32 31 C-31.7525 30.4225 -31.505 29.845 -31.25 29.25 C-29.81700012 26.67060021 -28.21575324 24.93878408 -26 23 C-25.34 23 -24.68 23 -24 23 C-23.731875 22.401875 -23.46375 21.80375 -23.1875 21.1875 C-22.00082594 19.00152146 -20.90400887 17.58667406 -19 16 C-18.34 16 -17.68 16 -17 16 C-17 15.34 -17 14.68 -17 14 C-15.125 11.875 -15.125 11.875 -13 10 C-12.34 10 -11.68 10 -11 10 C-10.67 9.01 -10.34 8.02 -10 7 C-8.22265625 5.17578125 -8.22265625 5.17578125 -6.0625 3.3125 C-5.35222656 2.68988281 -4.64195312 2.06726563 -3.91015625 1.42578125 C-2 0 -2 0 0 0 Z \" fill=\"#4E4E4E\" transform=\"translate(516,413)\"\\/>\\r\\n<path d=\"M0 0 C-1.48343 3.44677 -3.43050188 5.67343301 -6.08251953 8.30957031 C-6.92324005 9.15013977 -7.76396057 9.99070923 -8.63015747 10.85675049 C-9.53853363 11.75480408 -10.44690979 12.65285767 -11.3828125 13.578125 C-12.31221649 14.5046991 -13.24162048 15.43127319 -14.19918823 16.38592529 C-16.6640385 18.84315789 -19.13483666 21.29432361 -21.60693359 23.7442627 C-24.13090765 26.24773809 -26.64919388 28.75692063 -29.16796875 31.265625 C-34.10643597 36.18267525 -39.051212 41.09333788 -44 46 C-44.66 45.67 -45.32 45.34 -46 45 C-42.97224514 40.09294902 -39.47192774 36.16705817 -35.375 32.125 C-34.49714844 31.23554688 -34.49714844 31.23554688 -33.6015625 30.328125 C-29.25349222 26 -29.25349222 26 -27 26 C-26.690625 25.20335937 -26.690625 25.20335937 -26.375 24.390625 C-24.42038808 20.99226564 -21.77876283 18.48944072 -19 15.75 C-18.4534375 15.19570313 -17.906875 14.64140625 -17.34375 14.0703125 C-13.2533867 10 -13.2533867 10 -11 10 C-10.7421875 9.40703125 -10.484375 8.8140625 -10.21875 8.203125 C-8.90230105 5.82339035 -7.57419218 4.49021208 -5.5 2.75 C-4.58734375 1.96882813 -4.58734375 1.96882813 -3.65625 1.171875 C-2 0 -2 0 0 0 Z \" fill=\"#4A4B4B\" transform=\"translate(315,300)\"\\/>\\r\\n<path d=\"M0 0 C2.0625 -0.4375 2.0625 -0.4375 5 0 C8.61606691 2.83195135 11.53586557 5.60759671 13 10 C13.71997752 16.94264037 13.70733882 22.45603867 9.4921875 28.1953125 C8.99976563 28.79085937 8.50734375 29.38640625 8 30 C7.50757813 30.61617187 7.01515625 31.23234375 6.5078125 31.8671875 C2.19216346 37.07727157 -2.46936987 42.07034175 -8 46 C-8.99 46 -9.98 46 -11 46 C-11 45.34 -11 44.68 -11 44 C-10 43 -9 42 -8 41 C-8 40.34 -8 39.68 -8 39 C-7.2575 38.7525 -6.515 38.505 -5.75 38.25 C-2.79875938 36.90852699 -1.15185026 35.39094474 1 33 C0.67 32.34 0.34 31.68 0 31 C0.5775 30.7525 1.155 30.505 1.75 30.25 C4.3002997 28.83316683 6.01785701 27.12372463 8 25 C7.67 24.34 7.34 23.68 7 23 C7.66 22.34 8.32 21.68 9 21 C9.04254356 19.00045254 9.04080783 16.99958364 9 15 C9.33 14.01 9.66 13.02 10 12 C9.2539302 10.1197899 9.2539302 10.1197899 8.0625 8.3125 C7.0415625 6.6728125 7.0415625 6.6728125 6 5 C4.68 5 3.36 5 2 5 C0 2 0 2 0 0 Z \" fill=\"#707071\" transform=\"translate(379,199)\"\\/>\\r\\n<path d=\"M0 0 C4.70479612 3.32916147 9.13966288 6.75519494 12.98828125 11.0703125 C13.73078125 11.8953125 14.47328125 12.7203125 15.23828125 13.5703125 C17.05652366 16.16780166 17.63172261 17.9504244 17.98828125 21.0703125 C15.36466518 18.52165689 13.02153968 16.11402358 10.80078125 13.1953125 C2.30394088 2.86634093 -12.26231899 -3.51334127 -25.29296875 -4.81640625 C-26.14890625 -4.89503906 -27.00484375 -4.97367187 -27.88671875 -5.0546875 C-28.76585937 -5.14105469 -29.645 -5.22742188 -30.55078125 -5.31640625 C-32.70382983 -5.52703057 -34.85770124 -5.72921458 -37.01171875 -5.9296875 C-37.01171875 -6.2596875 -37.01171875 -6.5896875 -37.01171875 -6.9296875 C-24.46254391 -11.18773018 -10.86450162 -6.96117224 0 0 Z \" fill=\"#3B3B3C\" transform=\"translate(506.01171875,271.9296875)\"\\/>\\r\\n<path d=\"M0 0 C0 0.99 0 1.98 0 3 C-10.63057146 13.05594598 -23.75681703 18.40170963 -38 21 C-38.75152344 21.16628906 -39.50304687 21.33257812 -40.27734375 21.50390625 C-45.76964737 22.53711188 -49.97982024 21.05687921 -55 19 C-55 18.67 -55 18.34 -55 18 C-53.76765625 17.96261719 -52.5353125 17.92523438 -51.265625 17.88671875 C-33.14703597 17.22442525 -13.58405446 0 0 0 Z \" fill=\"#3E3F3F\" transform=\"translate(325,453)\"\\/>\\r\\n<path d=\"M0 0 C0.33 0 0.66 0 1 0 C1.16435547 0.99966797 1.16435547 0.99966797 1.33203125 2.01953125 C3.06112275 12.16161736 3.06112275 12.16161736 6 22 C6.66 22.33 7.32 22.66 8 23 C8.68822481 24.99268438 9.35118441 26.9941379 10 29 C13.74648625 36.59675329 18.34049402 42.92275475 24.1796875 49.0390625 C26 51 26 51 27 53 C21.75169688 52.337245 20.06843447 50.38780609 16.82421875 46.42578125 C8.1518958 34.89363446 -2.28569607 18.87784825 -0.6875 3.8125 C-0.460625 2.554375 -0.23375 1.29625 0 0 Z \" fill=\"#464546\" transform=\"translate(191,425)\"\\/>\\r\\n<path d=\"M0 0 C0 3 0 3 -1.875 5.1875 C-4 7 -4 7 -6 7 C-6.33 7.99 -6.66 8.98 -7 10 C-7.66 10 -8.32 10 -9 10 C-9 10.66 -9 11.32 -9 12 C-10.62626404 13.38232443 -12.2925002 14.71937515 -14 16 C-13.505 16.99 -13.505 16.99 -13 18 C-13.59554687 18.09152344 -14.19109375 18.18304688 -14.8046875 18.27734375 C-17.52562732 19.17302679 -18.39124634 20.31588204 -20.125 22.5625 C-21.6328125 24.50390625 -21.6328125 24.50390625 -23 26 C-23.66 26 -24.32 26 -25 26 C-25 26.66 -25 27.32 -25 28 C-26.46875 29.4453125 -26.46875 29.4453125 -28.5 31.125 C-32.9046751 34.86702486 -36.95242409 38.87971314 -41 43 C-43.53967281 45.54793191 -46.08768713 48.08652314 -48.6484375 50.61328125 C-53.98559385 55.89691311 -59.16749874 61.24388076 -64 67 C-64.33 66.01 -64.66 65.02 -65 64 C-63.84032094 62.63984451 -62.6717523 61.28726851 -61.5 59.9375 C-60.8503125 59.18339844 -60.200625 58.42929687 -59.53125 57.65234375 C-57.56375464 55.59072438 -55.63636577 53.80033725 -53.47412109 51.96484375 C-48.36586806 47.52048429 -43.63796156 42.72619726 -38.8828125 37.91015625 C-37.93533882 36.95572108 -36.98748626 36.00166189 -36.03927612 35.04795837 C-32.0485082 31.03294835 -28.06373221 27.01202764 -24.08300781 22.98706055 C-21.63357292 20.51092088 -19.17934973 18.03961278 -16.7220726 15.57125664 C-15.33676614 14.17671953 -13.95705712 12.77662927 -12.5774231 11.3764801 C-11.74250336 10.53818161 -10.90758362 9.69988312 -10.04736328 8.83618164 C-9.31204376 8.09340469 -8.57672424 7.35062775 -7.81912231 6.58534241 C-6 5 -6 5 -4 5 C-3.67 4.01 -3.34 3.02 -3 2 C-2.01 1.34 -1.02 0.68 0 0 Z \" fill=\"#9B9B9A\" transform=\"translate(174,282)\"\\/>\\r\\n<path d=\"M0 0 C0.66 0.66 1.32 1.32 2 2 C1.66005991 5.15647291 0.56942085 6.80136141 -1.66015625 8.98828125 C-2.20244873 9.52606201 -2.74474121 10.06384277 -3.3034668 10.61791992 C-3.88394775 11.17713135 -4.46442871 11.73634277 -5.0625 12.3125 C-5.65522705 12.89427002 -6.2479541 13.47604004 -6.85864258 14.07543945 C-10.47387071 17.59992936 -14.17119795 20.99090758 -18.03515625 24.2421875 C-21.39292945 27.24615955 -24.43371809 30.57248839 -27.5078125 33.86328125 C-30.25324857 36.21712691 -32.52835405 37.08932186 -36 38 C-35.07038578 36.84775972 -34.1309875 35.70340824 -33.1875 34.5625 C-32.66542969 33.92441406 -32.14335937 33.28632813 -31.60546875 32.62890625 C-30 31 -30 31 -27 30 C-25.83639602 28.01502851 -25.00861966 26.02254371 -24.1875 23.875 C-22.57419501 21.32767633 -20.81228942 20.8880914 -18 20 C-18.66 18.68 -19.32 17.36 -20 16 C-16.535 15.505 -16.535 15.505 -13 15 C-12.67 13.35 -12.34 11.7 -12 10 C-11.29875 9.979375 -10.5975 9.95875 -9.875 9.9375 C-5.63242249 8.55405081 -3.57820427 5.53279256 -1 2 C-0.67 1.34 -0.34 0.68 0 0 Z \" fill=\"#676767\" transform=\"translate(391,326)\"\\/>\\r\\n<path d=\"M0 0 C0 3.74924411 -0.90218871 5.79806485 -3.42602539 8.5612793 C-3.97766357 9.06054932 -4.52930176 9.55981934 -5.09765625 10.07421875 C-5.72671875 10.65163818 -6.35578125 11.22905762 -7.00390625 11.82397461 C-7.68324219 12.43893799 -8.36257813 13.05390137 -9.0625 13.6875 C-17.9632299 21.8748988 -26.50150534 30.39829119 -35 39 C-35.99 38.67 -36.98 38.34 -38 38 C-38 38.66 -38 39.32 -38 40 C-38.66 39.67 -39.32 39.34 -40 39 C-39.67 37.35 -39.34 35.7 -39 34 C-38.071875 33.731875 -37.14375 33.46375 -36.1875 33.1875 C-33.1688359 32.06289965 -32.0844857 31.29293427 -30 29 C-29.34 29 -28.68 29 -28 29 C-27.731875 28.401875 -27.46375 27.80375 -27.1875 27.1875 C-26.00082594 25.00152146 -24.90400887 23.58667406 -23 22 C-22.34 22 -21.68 22 -21 22 C-20.67 21.01 -20.34 20.02 -20 19 C-18.5625 17.3125 -18.5625 17.3125 -17 16 C-16.34 16 -15.68 16 -15 16 C-14.77183594 15.43410156 -14.54367187 14.86820313 -14.30859375 14.28515625 C-12.64681917 11.38325139 -10.58443031 9.62613556 -8.0625 7.4375 C-3.92587532 3.83064366 -3.92587532 3.83064366 0 0 Z \" fill=\"#404041\" transform=\"translate(339,166)\"\\/>\\r\\n<path d=\"M0 0 C0.66 0.99 1.32 1.98 2 3 C-7.55702093 12.7300857 -7.55702093 12.7300857 -11.6875 16.125 C-14.14364862 18.16988652 -16.23308206 20.32240046 -18.3125 22.75 C-21.15913334 26.0721432 -24.09002669 29.28562401 -27.125 32.4375 C-28.33542969 33.70400391 -28.33542969 33.70400391 -29.5703125 34.99609375 C-32.15281342 37.12603422 -33.71062635 37.67808621 -37 38 C-37.33 36.68 -37.66 35.36 -38 34 C-37.21625 33.9175 -36.4325 33.835 -35.625 33.75 C-32.85250896 33.27193661 -32.85250896 33.27193661 -31.6875 30.9375 C-31.460625 30.298125 -31.23375 29.65875 -31 29 C-30.34 29 -29.68 29 -29 29 C-29.33 28.01 -29.66 27.02 -30 26 C-28.89011719 25.87238281 -28.89011719 25.87238281 -27.7578125 25.7421875 C-24.44229652 24.84990983 -23.20002871 23.61414838 -20.875 21.125 C-20.21242188 20.42632812 -19.54984375 19.72765625 -18.8671875 19.0078125 C-18.25101562 18.34523438 -17.63484375 17.68265625 -17 17 C-16.13761719 16.25363281 -16.13761719 16.25363281 -15.2578125 15.4921875 C-13.57032967 13.8155324 -13.57032967 13.8155324 -14 10 C-13.319375 9.979375 -12.63875 9.95875 -11.9375 9.9375 C-8.06297084 8.70094814 -6.24278704 6.46267219 -3.55078125 3.49609375 C-2 2 -2 2 0 2 C0 1.34 0 0.68 0 0 Z \" fill=\"#5E5D5D\" transform=\"translate(466,460)\"\\/>\\r\\n<path d=\"M0 0 C0.495 1.98 0.495 1.98 1 4 C0.289646 4.63526611 -0.42070801 5.27053223 -1.15258789 5.92504883 C-6.83276581 11.04612144 -12.34767053 16.28183708 -17.68359375 21.76171875 C-18.23850494 22.32923859 -18.79341614 22.89675842 -19.36514282 23.48147583 C-21.64221132 25.81240435 -23.91686464 28.14519285 -26.17358398 30.49584961 C-27.85312361 32.24172738 -29.54795158 33.97145607 -31.24609375 35.69921875 C-31.75136093 36.23342941 -32.25662811 36.76764008 -32.77720642 37.31803894 C-35.1397129 39.69823784 -36.46904281 40.93848639 -39.85961914 41.33129883 C-40.56594482 41.22197021 -41.27227051 41.1126416 -42 41 C-40.72530598 38.45061196 -39.50840774 38.25420387 -37 37 C-35.29078411 35.4587688 -35.29078411 35.4587688 -34 34 C-34.66 33.34 -35.32 32.68 -36 32 C-35.278125 31.938125 -34.55625 31.87625 -33.8125 31.8125 C-30.09333083 30.73807335 -28.45222505 28.94267006 -26 26 C-26 25.01 -26 24.02 -26 23 C-25.401875 22.938125 -24.80375 22.87625 -24.1875 22.8125 C-21.13636816 21.67922246 -20.6120999 19.75400399 -19 17 C-17.6846659 16.29848848 -16.34882408 15.63474075 -15 15 C-12.22877725 12.64573501 -12.22877725 12.64573501 -10 10 C-10 9.01 -10 8.02 -10 7 C-9.11054688 6.84724609 -9.11054688 6.84724609 -8.203125 6.69140625 C-5.63815889 5.88644348 -4.57256517 4.88433098 -2.75 2.9375 C-2.22921875 2.38964844 -1.7084375 1.84179688 -1.171875 1.27734375 C-0.78515625 0.85582031 -0.3984375 0.43429687 0 0 Z \" fill=\"#595A5A\" transform=\"translate(406,414)\"\\/>\\r\\n<path d=\"M0 0 C2 3 2 3 3.19921875 5.79296875 C9.19823293 19.47575963 19.73655409 29.78838587 31.0703125 39.32421875 C33.50419235 41.43785125 35.7344649 43.70578724 38 46 C39.32865757 47.33019616 40.65815543 48.65955327 41.98828125 49.98828125 C45.9921875 53.9921875 49.99609375 57.99609375 54 62 C53.505 62.99 53.505 62.99 53 64 C52.01 63.67 51.02 63.34 50 63 C50 62.01 50 61.02 50 60 C49.34 60 48.68 60 48 60 C48 59.34 48 58.68 48 58 C47.01 57.67 46.02 57.34 45 57 C45 56.34 45 55.68 45 55 C44.34 55 43.68 55 43 55 C41.28464076 53.38349197 39.62612121 51.70624892 38 50 C36.29419689 48.24753359 34.585883 46.49750741 32.875 44.75 C32.02679688 43.87859375 31.17859375 43.0071875 30.3046875 42.109375 C28.1052023 39.80882371 28.1052023 39.80882371 25 39 C24.29711924 37.68539707 23.63350223 36.34940622 23 35 C21.62650801 33.41706095 21.62650801 33.41706095 20.0234375 31.96875 C19.43844482 31.41147217 18.85345215 30.85419434 18.25073242 30.2800293 C17.63174072 29.69261963 17.01274902 29.10520996 16.375 28.5 C1.18803601 13.64001409 1.18803601 13.64001409 0 3.75 C0 2.5125 0 1.275 0 0 Z \" fill=\"#8E908F\" transform=\"translate(4,358)\"\\/>\\r\\n<path d=\"M0 0 C0.33 0 0.66 0 1 0 C5.01380167 14.85106619 1.26045181 29.20543839 -5.59375 42.55859375 C-7.74339878 46.29062288 -10.28689006 49.66222213 -13 53 C-13.99 52.34 -14.98 51.68 -16 51 C-15.34644531 50.26910156 -15.34644531 50.26910156 -14.6796875 49.5234375 C-2.29092194 34.77490708 -0.76021265 18.36513708 0 0 Z \" fill=\"#4F4F4F\" transform=\"translate(431,204)\"\\/>\\r\\n<path d=\"M0 0 C0 0.66 0 1.32 0 2 C-1.49609375 3.4375 -1.49609375 3.4375 -3.4375 5 C-6.15188238 7.14525044 -6.15188238 7.14525044 -8 10 C-8.66 10 -9.32 10 -10 10 C-10.33 10.99 -10.66 11.98 -11 13 C-12.56640625 14.54296875 -12.56640625 14.54296875 -14.5625 16.1875 C-19.82724843 20.65542164 -25.15281583 25.22922374 -29 31 C-30.99665598 32.67067133 -32.99651034 34.33752986 -35 36 C-35.33 36.66 -35.66 37.32 -36 38 C-36.66 38 -37.32 38 -38 38 C-38 38.66 -38 39.32 -38 40 C-38.66 40 -39.32 40 -40 40 C-39.67 40.99 -39.34 41.98 -39 43 C-40.98 43.66 -42.96 44.32 -45 45 C-45 46.32 -45 47.64 -45 49 C-45.99 49 -46.98 49 -48 49 C-48.66 49.66 -49.32 50.32 -50 51 C-50 50.34 -50 49.68 -50 49 C-51.32 49 -52.64 49 -54 49 C-54 48.34 -54 47.68 -54 47 C-51.69 47 -49.38 47 -47 47 C-46.75544067 46.4307782 -46.51088135 45.8615564 -46.25891113 45.27508545 C-44.77419803 42.59193404 -43.02414647 40.76993345 -40.85742188 38.59863281 C-40.00313599 37.7380426 -39.1488501 36.87745239 -38.26867676 35.99078369 C-37.34470093 35.07085632 -36.4207251 34.15092896 -35.46875 33.203125 C-34.51203629 32.24506363 -33.5556196 31.28670557 -32.5994873 30.32806396 C-30.59869437 28.32432736 -28.59434051 26.32424111 -26.58740234 24.32666016 C-24.01137893 21.7620617 -21.44447901 19.18854789 -18.88014984 16.61226273 C-16.9089754 14.63387554 -14.93308003 12.660259 -12.95570374 10.6880722 C-11.54487229 9.2792281 -10.13807611 7.86634682 -8.73132324 6.45343018 C-7.87703735 5.60544861 -7.02275146 4.75746704 -6.14257812 3.88378906 C-5.38916138 3.1319635 -4.63574463 2.38013794 -3.85949707 1.60552979 C-2 0 -2 0 0 0 Z \" fill=\"#AEAEAE\" transform=\"translate(485,577)\"\\/>\\r\\n<path d=\"M0 0 C1.0209375 0.7425 1.0209375 0.7425 2.0625 1.5 C-0.81384231 2.45878077 -2.24703619 2.52922013 -5.1875 2.375 C-9.87086575 2.32143209 -12.85475831 3.2034578 -16.9375 5.5 C-17.2675 6.49 -17.5975 7.48 -17.9375 8.5 C-19.5982662 9.50976899 -21.26604795 10.50801925 -22.9375 11.5 C-25.59290758 14.06258938 -28.10367889 16.73124475 -30.6328125 19.41796875 C-32.9375 21.5 -32.9375 21.5 -35.9375 21.5 C-31.75314435 12.32113154 -21.32696734 2.96770443 -12.1171875 -0.8671875 C-7.45482216 -2.22077744 -4.31960785 -2.2057572 0 0 Z \" fill=\"#525352\" transform=\"translate(380.9375,197.5)\"\\/>\\r\\n<path d=\"M0 0 C0.99 0.66 1.98 1.32 3 2 C2.51789063 2.47050781 2.03578125 2.94101562 1.5390625 3.42578125 C0.90742188 4.04839844 0.27578125 4.67101562 -0.375 5.3125 C-1.00148438 5.92738281 -1.62796875 6.54226563 -2.2734375 7.17578125 C-4.18086607 9.08812528 -4.18086607 9.08812528 -6 12 C-7.07494116 12.99100369 -8.18216595 13.94767495 -9.3125 14.875 C-13.06462795 18.02647545 -16.69995713 21.17993999 -19.5625 25.1875 C-21 27 -21 27 -23.0625 28 C-26.36923285 29.70670082 -26.87059771 32.61179314 -28 36 C-28.66 35.67 -29.32 35.34 -30 35 C-29.48539161 30.98216255 -28.56620273 29.08230989 -25.6484375 26.29296875 C-24.96136719 25.62330078 -24.27429688 24.95363281 -23.56640625 24.26367188 C-22.84324219 23.57853516 -22.12007813 22.89339844 -21.375 22.1875 C-16.55822331 17.55257215 -11.90644983 12.89867123 -7.57250977 7.80395508 C-5.18169463 5.06125471 -2.60357812 2.54007622 0 0 Z \" fill=\"#484848\" transform=\"translate(373,298)\"\\/>\\r\\n<path d=\"M0 0 C0.78890625 0.25652344 1.5778125 0.51304688 2.390625 0.77734375 C9.87306833 3.29255696 9.87306833 3.29255696 12.75 6.125 C13.245 7.61 13.245 7.61 13.75 9.125 C12.76 9.125 11.77 9.125 10.75 9.125 C10.09 8.465 9.43 7.805 8.75 7.125 C6.54749008 6.66493654 6.54749008 6.66493654 4.125 6.5 C2.89910156 6.38785156 2.89910156 6.38785156 1.6484375 6.2734375 C1.02195312 6.22445312 0.39546875 6.17546875 -0.25 6.125 C0.08 5.135 0.41 4.145 0.75 3.125 C-2.22 2.795 -5.19 2.465 -8.25 2.125 C-8.25 1.465 -8.25 0.805 -8.25 0.125 C-15.4534375 -0.68076469 -22.63391198 -1.14263594 -29.875 -1.4375 C-30.87917969 -1.48068359 -31.88335937 -1.52386719 -32.91796875 -1.56835938 C-35.36188383 -1.67309859 -37.80587617 -1.77527256 -40.25 -1.875 C-40.25 -2.205 -40.25 -2.535 -40.25 -2.875 C-36.5838606 -3.07391332 -32.91709047 -3.25704172 -29.25 -3.4375 C-28.22003906 -3.49357422 -27.19007813 -3.54964844 -26.12890625 -3.60742188 C-16.72000325 -4.05689176 -8.92364138 -3.04891081 0 0 Z \" fill=\"#7B7B7C\" transform=\"translate(404.25,119.875)\"\\/>\\r\\n<path d=\"M0 0 C0.66 0.33 1.32 0.66 2 1 C0.88200014 2.33920838 -0.24461897 3.67122556 -1.375 5 C-2.31472656 6.11375 -2.31472656 6.11375 -3.2734375 7.25 C-3.84320313 7.8275 -4.41296875 8.405 -5 9 C-5.66 9 -6.32 9 -7 9 C-7 9.66 -7 10.32 -7 11 C-8.36328125 12.41015625 -8.36328125 12.41015625 -10.3125 14.0625 C-11.03179687 14.67609375 -11.75109375 15.2896875 -12.4921875 15.921875 C-16.22306458 19.01350523 -19.99224984 22.05708 -23.77734375 25.08203125 C-26.06333148 26.80583327 -26.06333148 26.80583327 -27 29 C-27.66 28.67 -28.32 28.34 -29 28 C-28.401875 27.278125 -27.80375 26.55625 -27.1875 25.8125 C-24.97449038 23.11363374 -24.97449038 23.11363374 -23.5 20.3125 C-21.25111889 16.84547496 -18.81710569 16.27236856 -15 15 C-14.28293018 13.01751285 -13.61709587 11.01584651 -13 9 C-12.34 8.34 -11.68 7.68 -11 7 C-10.67 7.66 -10.34 8.32 -10 9 C-9.67 8.34 -9.34 7.68 -9 7 C-8.34 7 -7.68 7 -7 7 C-6.67 5.35 -6.34 3.7 -6 2 C-4.7934375 1.7834375 -4.7934375 1.7834375 -3.5625 1.5625 C-1.07896294 1.25864751 -1.07896294 1.25864751 0 0 Z \" fill=\"#DCDCDC\" transform=\"translate(278,55)\"\\/>\\r\\n<path d=\"M0 0 C0.66 0.99 1.32 1.98 2 3 C1.34 4.32 0.68 5.64 0 7 C2.3521504 9.522721 4.70709587 12.04281698 7.0625 14.5625 C7.71927734 15.26697266 8.37605469 15.97144531 9.05273438 16.69726562 C13.28383279 21.22016393 17.5896978 25.65160885 22 30 C21.67 30.66 21.34 31.32 21 32 C17.37190281 30.47238013 15.05653702 28.29392861 12.3125 25.5 C11.52488281 24.7059375 10.73726563 23.911875 9.92578125 23.09375 C8 21 8 21 7 19 C6.01 18.34 5.02 17.68 4 17 C2.94617352 15.86304725 1.92644563 14.69381672 0.9375 13.5 C-0.66107015 11.58008878 -2.23130724 9.76869276 -4 8 C-3.77256695 5.04337034 -3.38764062 3.44966312 -1.4375 1.1875 C-0.963125 0.795625 -0.48875 0.40375 0 0 Z \" fill=\"#4F5051\" transform=\"translate(374,552)\"\\/>\\r\\n<path d=\"M0 0 C-0.4867262 4.27729087 -1.57796349 6.02058516 -4.875 8.75 C-5.57367188 9.34296875 -6.27234375 9.9359375 -6.9921875 10.546875 C-9 12 -9 12 -12 13 C-12.69232913 14.32019036 -13.35579208 15.65567177 -14 17 C-15.14445734 18.22903617 -16.33469619 19.41672066 -17.5625 20.5625 C-19.99626295 22.8343494 -20.92259794 23.76779382 -22 27 C-24.5625 28.1875 -24.5625 28.1875 -27 29 C-27.33 28.01 -27.66 27.02 -28 26 C-24.34017795 22.2908542 -20.67392152 18.58823822 -17.00146484 14.89160156 C-15.75226298 13.63232287 -14.50485944 12.37125764 -13.25927734 11.10839844 C-11.47178925 9.29673588 -9.67799773 7.49153161 -7.8828125 5.6875 C-7.04521896 4.83442261 -7.04521896 4.83442261 -6.19070435 3.96411133 C-2.22774341 0 -2.22774341 0 0 0 Z \" fill=\"#535353\" transform=\"translate(383,395)\"\\/>\\r\\n<path d=\"M0 0 C1.1614856 -0.00833862 1.1614856 -0.00833862 2.34643555 -0.0168457 C6.28480191 0.03382942 9.01515074 0.40242894 12.4375 2.3125 C11.77218262 2.33231934 11.10686523 2.35213867 10.42138672 2.37255859 C7.38471732 2.46826418 4.34869322 2.57775808 1.3125 2.6875 C0.26578125 2.7184375 -0.7809375 2.749375 -1.859375 2.78125 C-7.13038397 2.9814149 -11.63196606 3.28393746 -16.5625 5.3125 C-19.10295301 6.19127305 -21.64450012 7.06619327 -24.1875 7.9375 C-24.84234375 8.16695313 -25.4971875 8.39640625 -26.171875 8.6328125 C-29.53269545 9.77576358 -31.96359805 10.3125 -35.5625 10.3125 C-35.5625 9.6525 -35.5625 8.9925 -35.5625 8.3125 C-23.74541102 3.41933549 -12.83251835 0.07850603 0 0 Z \" fill=\"#29292A\" transform=\"translate(374.5625,114.6875)\"\\/>\\r\\n<path d=\"M0 0 C2.77709825 1.54037855 3.48789239 2.17571938 5.0625 5.0625 C5.31 6.17625 5.31 6.17625 5.5625 7.3125 C4.5725 7.8075 4.5725 7.8075 3.5625 8.3125 C2.9025 7.6525 2.2425 6.9925 1.5625 6.3125 C0.5725 6.3125 -0.4175 6.3125 -1.4375 6.3125 C-1.4375 4.9925 -1.4375 3.6725 -1.4375 2.3125 C-9.5556571 1.39549604 -9.5556571 1.39549604 -17.08203125 3.87109375 C-19.00999065 5.59757271 -20.76869655 7.33615271 -22.4375 9.3125 C-23.0975 8.3225 -23.7575 7.3325 -24.4375 6.3125 C-23.17177767 5.16102339 -21.89972094 4.01650686 -20.625 2.875 C-19.91730469 2.23691406 -19.20960938 1.59882813 -18.48046875 0.94140625 C-13.21595572 -3.25611179 -5.871206 -2.65704213 0 0 Z \" fill=\"#5A5A59\" transform=\"translate(485.4375,307.6875)\"\\/>\\r\\n<path d=\"M0 0 C1.32 0.33 2.64 0.66 4 1 C2.35 2.65 0.7 4.3 -1 6 C-0.505 6.99 -0.505 6.99 0 8 C-1.09601169 9.00893131 -2.20213918 10.00688225 -3.3125 11 C-3.92738281 11.556875 -4.54226562 12.11375 -5.17578125 12.6875 C-7 14 -7 14 -10 14 C-10.22220215 14.54817383 -10.4444043 15.09634766 -10.67333984 15.66113281 C-12.40699979 18.71753 -14.73753725 20.98498952 -17.2265625 23.421875 C-17.73424164 23.92672424 -18.24192078 24.43157349 -18.76498413 24.95172119 C-20.38033842 26.55592096 -22.00252209 28.15300856 -23.625 29.75 C-24.72441698 30.83938107 -25.82338059 31.9292199 -26.921875 33.01953125 C-29.6093602 35.68501885 -32.30299021 38.34415143 -35 41 C-35.33 40.34 -35.66 39.68 -36 39 C-34.68 37.68 -33.36 36.36 -32 35 C-32.33 34.34 -32.66 33.68 -33 33 C-31.96939453 32.70416016 -31.96939453 32.70416016 -30.91796875 32.40234375 C-26.93652044 30.4889034 -24.35507493 27.71533812 -21.3125 24.5625 C-20.73177734 23.97662109 -20.15105469 23.39074219 -19.55273438 22.78710938 C-17.07391647 20.26244051 -14.97353578 17.96030367 -13 15 C-12.34 15 -11.68 15 -11 15 C-11 14.34 -11 13.68 -11 13 C-10.34 12.67 -9.68 12.34 -9 12 C-9 10.68 -9 9.36 -9 8 C-8.236875 7.938125 -7.47375 7.87625 -6.6875 7.8125 C-3.7941957 7.2353919 -3.7941957 7.2353919 -2.25 4.5625 C-1.63125 3.2940625 -1.63125 3.2940625 -1 2 C-0.67 1.34 -0.34 0.68 0 0 Z \" fill=\"#A3A4A3\" transform=\"translate(243,86)\"\\/>\\r\\n<path d=\"M0 0 C0.33 0.66 0.66 1.32 1 2 C-1.48035606 7.78749747 -6.71068144 12.31522708 -12.2421875 15.1484375 C-17.5174945 17.13808616 -21.52196798 17.29987201 -27 16 C-29.5 14.4375 -29.5 14.4375 -31 13 C-30.67 12.01 -30.34 11.02 -30 10 C-27 11.5 -27 11.5 -24 13 C-18.73546194 13.41290495 -14.41004231 12.97198504 -10 10 C-6.50288336 6.81567532 -3.22470085 3.45828079 0 0 Z \" fill=\"#3C3D3D\" transform=\"translate(301,416)\"\\/>\\r\\n<path d=\"M0 0 C3.26002052 1.15678148 6.149045 2.63858101 9.125 4.375 C16.68860331 8.6287403 24.33645381 11.34614746 33 12 C32 13.5625 32 13.5625 30 15 C24.46891993 14.71875864 19.33802448 13.42347319 14 12 C13.31550781 11.8659375 12.63101563 11.731875 11.92578125 11.59375 C8.8722661 10.65230111 7.19403042 8.25028761 5 6 C4.01 5.67 3.02 5.34 2 5 C2 4.34 2 3.68 2 3 C1.01 2.67 0.02 2.34 -1 2 C-0.67 1.34 -0.34 0.68 0 0 Z \" fill=\"#595A5A\" transform=\"translate(242,458)\"\\/>\\r\\n<path d=\"M0 0 C0 0.99 0 1.98 0 3 C-0.66 3 -1.32 3 -2 3 C-2.22042969 3.54785156 -2.44085938 4.09570312 -2.66796875 4.66015625 C-4.41870129 7.73548994 -6.78947066 10.00158721 -9.3125 12.4375 C-9.78623047 12.90220703 -10.25996094 13.36691406 -10.74804688 13.84570312 C-12.16266386 15.23322758 -13.58131512 16.61663507 -15 18 C-15.88042969 18.91910156 -16.76085937 19.83820313 -17.66796875 20.78515625 C-20 23 -20 23 -23 24 C-23.33 24.99 -23.66 25.98 -24 27 C-24.80395508 25.33886719 -24.80395508 25.33886719 -25 23 C-23.44262717 20.96785375 -21.96623559 19.33645491 -20.13671875 17.578125 C-19.3759478 16.82085114 -19.3759478 16.82085114 -18.59980774 16.04827881 C-17.52524881 14.98346469 -16.44467343 13.92469313 -15.35864258 12.87158203 C-13.69217769 11.25453897 -12.04514319 9.61956248 -10.40039062 7.98046875 C-9.35525422 6.94941726 -8.3090648 5.91943185 -7.26171875 4.890625 C-6.76580734 4.40007629 -6.26989594 3.90952759 -5.75895691 3.40411377 C-2.23324576 0 -2.23324576 0 0 0 Z \" fill=\"#474748\" transform=\"translate(420,460)\"\\/>\\r\\n<path d=\"M0 0 C0.66 0.33 1.32 0.66 2 1 C-1.92313604 4.9971718 -5.85593337 8.98448185 -9.7980957 12.96289062 C-11.13837914 14.31828088 -12.47596042 15.67634866 -13.81079102 17.03710938 C-15.7275275 18.99014499 -17.65370638 20.93341388 -19.58203125 22.875 C-20.4775042 23.79369873 -20.4775042 23.79369873 -21.3910675 24.73095703 C-22.8715147 26.21200289 -24.43027406 27.61393318 -26 29 C-26.99 29 -27.98 29 -29 29 C-27.87563746 25.62691239 -26.92657267 24.84876903 -24.25 22.625 C-19.31461193 18.42992014 -15.0165607 14.08764355 -11 9 C-9.375 7.1875 -9.375 7.1875 -8 6 C-7.34 6 -6.68 6 -6 6 C-6 5.34 -6 4.68 -6 4 C-5.34 4 -4.68 4 -4 4 C-4 3.34 -4 2.68 -4 2 C-2.125 0.9375 -2.125 0.9375 0 0 Z \" fill=\"#3A3A3A\" transform=\"translate(183,324)\"\\/>\\r\\n<path d=\"M0 0 C1.32 0.33 2.64 0.66 4 1 C-7.23046875 12.23046875 -7.23046875 12.23046875 -9.19213867 14.19018555 C-10.73696817 15.736684 -12.27539884 17.28956994 -13.8125 18.84375 C-16.08496898 21.08375514 -18.47497643 23.05212468 -21 25 C-21 22 -21 22 -18.8125 19.58984375 C-17.884375 18.71457031 -16.95625 17.83929688 -16 16.9375 C-14.29827009 15.32794713 -12.62262575 13.68926931 -11 12 C-11 11.34 -11 10.68 -11 10 C-10.01 9.34 -9.02 8.68 -8 8 C-7.7497843 4.91634129 -7.7497843 4.91634129 -8 2 C-5.03 2.495 -5.03 2.495 -2 3 C-1.34 2.01 -0.68 1.02 0 0 Z M-7 3 C-6 5 -6 5 -6 5 Z M-5 4 C-5.33 4.66 -5.66 5.32 -6 6 C-5.01 5.67 -4.02 5.34 -3 5 C-3.66 4.67 -4.32 4.34 -5 4 Z \" fill=\"#4E4E4E\" transform=\"translate(244,260)\"\\/>\\r\\n<path d=\"M0 0 C0.33 0.66 0.66 1.32 1 2 C-0.12029017 3.48273699 -1.24638618 4.96108886 -2.375 6.4375 C-3.31472656 7.67306641 -3.31472656 7.67306641 -4.2734375 8.93359375 C-6 11 -6 11 -8 12 C-7.67 12.66 -7.34 13.32 -7 14 C-7.70125 14.185625 -8.4025 14.37125 -9.125 14.5625 C-12.55015473 16.27507736 -14.14832855 18.31971558 -16.51953125 21.2578125 C-18.43715921 23.51444065 -20.64458774 25.21752586 -23 27 C-24.0173873 27.98230498 -25.02596117 28.97469597 -26 30 C-26.33 29.01 -26.66 28.02 -27 27 C-18.09 18.09 -9.18 9.18 0 0 Z \" fill=\"#313131\" transform=\"translate(409,367)\"\\/>\\r\\n<path d=\"M0 0 C3.72084472 3.41915461 5.75864056 6.51728112 8 11 C8.99 11.33 9.98 11.66 11 12 C10.979375 13.216875 10.95875 14.43375 10.9375 15.6875 C10.93179042 18.94196171 11.34572914 21.81042955 12 25 C12.03824623 27.33301986 12.04574284 29.66711508 12 32 C11.67 32 11.34 32 11 32 C10.87625 31.2575 10.7525 30.515 10.625 29.75 C10.13405926 27.08538083 10.13405926 27.08538083 9.078125 25.15625 C7.86994524 22.73989049 7.00755608 20.30284816 6.125 17.75 C4.86740743 14.20888407 3.50707908 10.88350407 1.75 7.5625 C0 4 0 4 0 0 Z M9 15 C10 17 10 17 10 17 Z \" fill=\"#525252\" transform=\"translate(421,178)\"\\/>\\r\\n<path d=\"M0 0 C2.0625 -0.4375 2.0625 -0.4375 5 0 C8.61606691 2.83195135 11.53586557 5.60759671 13 10 C13.14449151 11.97564353 13.22061999 13.95679761 13.25 15.9375 C13.28867187 17.49791016 13.28867187 17.49791016 13.328125 19.08984375 C12.96423357 22.31721419 12.16358594 23.63713641 10 26 C9.80467039 24.2300132 9.61901118 22.45895721 9.4375 20.6875 C9.33308594 19.70136719 9.22867187 18.71523437 9.12109375 17.69921875 C9 15 9 15 10 12 C9.2539302 10.1197899 9.2539302 10.1197899 8.0625 8.3125 C7.0415625 6.6728125 7.0415625 6.6728125 6 5 C4.68 5 3.36 5 2 5 C0 2 0 2 0 0 Z \" fill=\"#6D6D6E\" transform=\"translate(379,199)\"\\/>\\r\\n<path d=\"M0 0 C0.61746094 0.18820312 1.23492187 0.37640625 1.87109375 0.5703125 C-1.1790006 3.70762909 -4.24600302 6.82787902 -7.31640625 9.9453125 C-8.18072266 10.83476562 -9.04503906 11.72421875 -9.93554688 12.640625 C-10.77666016 13.49140625 -11.61777344 14.3421875 -12.484375 15.21875 C-13.63909302 16.39703369 -13.63909302 16.39703369 -14.81713867 17.59912109 C-17.23403574 19.65995401 -19.04937603 20.79564709 -22.12890625 21.5703125 C-23.11890625 20.9103125 -24.10890625 20.2503125 -25.12890625 19.5703125 C-24.24589844 19.16554688 -23.36289063 18.76078125 -22.453125 18.34375 C-19.1482662 16.58064084 -16.70592709 14.70695469 -13.94140625 12.1953125 C-13.10222656 11.44507813 -12.26304687 10.69484375 -11.3984375 9.921875 C-9.16215103 7.6047589 -7.71007547 5.3584097 -6.12890625 2.5703125 C-2.87359248 -0.57999114 -2.87359248 -0.57999114 0 0 Z \" fill=\"#484948\" transform=\"translate(154.12890625,353.4296875)\"\\/>\\r\\n<path d=\"M0 0 C-2.41369963 5.63758093 -7.16189335 9.49012406 -11.4375 13.75 C-12.30955078 14.63816406 -13.18160156 15.52632813 -14.08007812 16.44140625 C-14.91861328 17.28058594 -15.75714844 18.11976563 -16.62109375 18.984375 C-17.3886499 19.75491211 -18.15620605 20.52544922 -18.94702148 21.31933594 C-21 23 -21 23 -24 23 C-22.71480435 20.13302508 -21.42870746 18.02392288 -19 16 C-18.34 16 -17.68 16 -17 16 C-17 15.34 -17 14.68 -17 14 C-15.125 11.875 -15.125 11.875 -13 10 C-12.34 10 -11.68 10 -11 10 C-10.67 9.01 -10.34 8.02 -10 7 C-8.22265625 5.17578125 -8.22265625 5.17578125 -6.0625 3.3125 C-5.35222656 2.68988281 -4.64195312 2.06726563 -3.91015625 1.42578125 C-2 0 -2 0 0 0 Z \" fill=\"#515152\" transform=\"translate(516,413)\"\\/>\\r\\n<path d=\"M0 0 C0.66 0.33 1.32 0.66 2 1 C1.36497559 1.61931396 0.72995117 2.23862793 0.07568359 2.87670898 C-2.31244927 5.21322891 -4.69330405 7.55672043 -7.06982422 9.9050293 C-8.09310606 10.91337155 -9.11908197 11.91898834 -10.14794922 12.92163086 C-18.17050115 20.74498603 -24.94132837 28.40235742 -29 39 C-29.33 39 -29.66 39 -30 39 C-29.48435334 26.88230343 -19.26058501 18.87517222 -11.125 10.9375 C-10.04357003 9.87115296 -8.96283537 8.80410029 -7.8828125 7.73632812 C-5.26316393 5.14937836 -2.63427181 2.57206752 0 0 Z \" fill=\"#929392\" transform=\"translate(35,297)\"\\/>\\r\\n<path d=\"M0 0 C0.70672852 0.07726318 1.41345703 0.15452637 2.14160156 0.23413086 C10.07841024 1.01010833 17.79263618 0.95406711 25.75 0.5625 C27.52890625 0.48418945 27.52890625 0.48418945 29.34375 0.40429688 C32.22954543 0.27629788 35.11483734 0.14143583 38 0 C38 0.66 38 1.32 38 2 C30.72340363 3.98452628 24.31483637 4.11898873 16.8125 3.6875 C15.75869141 3.63916016 14.70488281 3.59082031 13.61914062 3.54101562 C8.68080914 3.29518816 3.85806671 2.98168187 -1 2 C-0.67 1.34 -0.34 0.68 0 0 Z \" fill=\"#686868\" transform=\"translate(267,501)\"\\/>\\r\\n<path d=\"M0 0 C0 0.99 0 1.98 0 3 C-19.00455581 6.9977221 -19.00455581 6.9977221 -27 3 C-27 2.67 -27 2.34 -27 2 C-25.02966797 1.90912109 -25.02966797 1.90912109 -23.01953125 1.81640625 C-21.28384459 1.73196744 -19.54816802 1.64732112 -17.8125 1.5625 C-16.94818359 1.52318359 -16.08386719 1.48386719 -15.19335938 1.44335938 C-10.09460748 1.18939855 -5.05398329 0 0 0 Z \" fill=\"#404040\" transform=\"translate(297,469)\"\\/>\\r\\n<path d=\"M0 0 C0.66 0.33 1.32 0.66 2 1 C-5.26 8.26 -12.52 15.52 -20 23 C-20.33 22.34 -20.66 21.68 -21 21 C-17 14.42857143 -17 14.42857143 -13 13 C-13 12.34 -13 11.68 -13 11 C-9.07895569 6.74286618 -4.80786644 3.2052443 0 0 Z \" fill=\"#303131\" transform=\"translate(322,397)\"\\/>\\r\\n<path d=\"M0 0 C5.38200262 1.48376012 8.48713678 5.10438145 12.26953125 8.9765625 C12.95053391 9.66181 13.63153656 10.3470575 14.33317566 11.05307007 C16.50011039 13.23675644 18.65636299 15.43065661 20.8125 17.625 C22.28251006 19.11006136 23.7532056 20.59444452 25.22460938 22.078125 C28.82439875 25.71093712 32.41464525 29.35294335 36 33 C35.505 33.99 35.505 33.99 35 35 C23.33333333 23.33333333 11.66666667 11.66666667 0 0 Z \" fill=\"#9B9C9B\" transform=\"translate(372,12)\"\\/>\\r\\n<path d=\"M0 0 C8.11354186 3.70152331 14.32128626 11.18441285 20.5 17.4375 C21.22703125 18.16904297 21.9540625 18.90058594 22.703125 19.65429688 C24.47109499 21.43389824 26.23666378 23.21580918 28 25 C27.67 25.66 27.34 26.32 27 27 C26.01 26.67 25.02 26.34 24 26 C24 25.01 24 24.02 24 23 C23.34 23 22.68 23 22 23 C22 22.34 22 21.68 22 21 C21.01 20.67 20.02 20.34 19 20 C19 19.34 19 18.68 19 18 C18.34 18 17.68 18 17 18 C15.28464076 16.38349197 13.62612121 14.70624892 12 13 C10.29419689 11.24753359 8.585883 9.49750741 6.875 7.75 C6.02679688 6.87859375 5.17859375 6.0071875 4.3046875 5.109375 C2.1052023 2.80882371 2.1052023 2.80882371 -1 2 C-0.67 1.34 -0.34 0.68 0 0 Z \" fill=\"#A1A2A2\" transform=\"translate(30,395)\"\\/>\\r\\n<path d=\"M0 0 C0.93423645 3.01031744 1.04449911 3.86650268 0 7 C-1.62102968 8.71108689 -3.29503463 10.37253306 -5 12 C-5.825 12.825 -6.65 13.65 -7.5 14.5 C-8.325 15.325 -9.15 16.15 -10 17 C-10.845625 17.9075 -11.69125 18.815 -12.5625 19.75 C-14.98553865 21.98665106 -15.91281075 22.3995319 -19 23 C-15.52995858 18.90713063 -11.9980494 14.89590603 -8.375 10.9375 C-5.21336993 7.44531164 -2.43713969 4.02657861 0 0 Z \" fill=\"#424343\" transform=\"translate(524,351)\"\\/>\\r\\n<path d=\"M0 0 C-1.33999498 3.006818 -2.79845291 4.99762609 -5.1875 7.25 C-8.45898634 10.41903896 -11.46094198 13.7440911 -14.421875 17.203125 C-15.88881269 18.87340058 -17.40956293 20.44788672 -19 22 C-19.99 21.67 -20.98 21.34 -22 21 C-17.77883845 15.96956668 -13.39019121 11.20760667 -8.75 6.5625 C-8.12609375 5.92634766 -7.5021875 5.29019531 -6.859375 4.63476562 C-6.26125 4.03470703 -5.663125 3.43464844 -5.046875 2.81640625 C-4.24008301 2.00345093 -4.24008301 2.00345093 -3.41699219 1.17407227 C-2 0 -2 0 0 0 Z \" fill=\"#3E3E3E\" transform=\"translate(344,330)\"\\/>\\r\\n<path d=\"M0 0 C0 0.99 0 1.98 0 3 C-0.75023437 3.27972656 -1.50046875 3.55945313 -2.2734375 3.84765625 C-9.61416851 6.72292999 -15.75064956 10.2023792 -22 15 C-22.66 14.67 -23.32 14.34 -24 14 C-22.52663172 9.52978059 -19.0961405 7.98366144 -15.1875 5.875 C-14.26227539 5.35486328 -14.26227539 5.35486328 -13.31835938 4.82421875 C-4.62182711 0 -4.62182711 0 0 0 Z \" fill=\"#3D3D3D\" transform=\"translate(362,155)\"\\/>\\r\\n<path d=\"M0 0 C5.43363875 -0.45676823 7.60139199 1.58173262 11.640625 4.9296875 C21.91753998 13.94751024 21.91753998 13.94751024 22.21484375 17.7421875 C22.14394531 18.48726562 22.07304687 19.23234375 22 20 C19.39457132 17.46901214 17.09175808 15.12512466 14.9375 12.1875 C11.59227013 8.01682379 6.91474229 5.4647041 2.44921875 2.63671875 C1.64097656 2.09660156 0.83273437 1.55648437 0 1 C0 0.67 0 0.34 0 0 Z \" fill=\"#323233\" transform=\"translate(399,161)\"\\/>\\r\\n<path d=\"M0 0 C0.33 0 0.66 0 1 0 C1.08636719 0.89460937 1.17273438 1.78921875 1.26171875 2.7109375 C2.1995663 10.78158891 3.85776174 17.01448321 8 24 C8.33 24.66 8.66 25.32 9 26 C8.01 26.33 7.02 26.66 6 27 C5.01515892 25.25318707 4.03733813 23.5024149 3.0625 21.75 C2.51722656 20.77546875 1.97195313 19.8009375 1.41015625 18.796875 C-0.76866398 14.47544761 -1.13788411 11.13759952 -1.125 6.3125 C-1.12757813 5.33925781 -1.13015625 4.36601563 -1.1328125 3.36328125 C-1 1 -1 1 0 0 Z \" fill=\"#3A3A3A\" transform=\"translate(335,551)\"\\/>\\r\\n<path d=\"M0 0 C0 3 0 3 -2.375 5.6875 C-5 8 -5 8 -7 8 C-7 8.66 -7 9.32 -7 10 C-7.66 10 -8.32 10 -9 10 C-9 10.66 -9 11.32 -9 12 C-9.680625 12.53625 -10.36125 13.0725 -11.0625 13.625 C-14.24011641 16.19413667 -16.70711889 19.00329506 -19.359375 22.09375 C-21.15124373 24.17573081 -22.94524853 26.17355425 -25 28 C-25.66 28 -26.32 28 -27 28 C-27 27.34 -27 26.68 -27 26 C-26.34 26 -25.68 26 -25 26 C-24.7620874 25.43684082 -24.5241748 24.87368164 -24.27905273 24.29345703 C-22.71481513 21.48863778 -20.81208292 19.57004004 -18.53515625 17.3046875 C-17.65279297 16.42425781 -16.77042969 15.54382813 -15.86132812 14.63671875 C-14.93771484 13.72535156 -14.01410156 12.81398438 -13.0625 11.875 C-12.14275391 10.95589844 -11.22300781 10.03679688 -10.27539062 9.08984375 C-3.42166574 2.28111049 -3.42166574 2.28111049 0 0 Z \" fill=\"#919291\" transform=\"translate(514,547)\"\\/>\\r\\n<path d=\"M0 0 C8.51190702 2.89898283 15.70071782 9.87337913 21 17 C20.34 17.33 19.68 17.66 19 18 C19 17.34 19 16.68 19 16 C18.236875 16.103125 17.47375 16.20625 16.6875 16.3125 C15.800625 16.209375 14.91375 16.10625 14 16 C12.95355934 14.36209288 11.9601817 12.68991979 11 11 C9.02678947 9.6273318 7.02456848 8.29572383 5 7 C2.125 4.375 2.125 4.375 0 2 C0 1.34 0 0.68 0 0 Z \" fill=\"#4C4D4C\" transform=\"translate(526,246)\"\\/>\\r\\n<path d=\"M0 0 C5.62303757 4.67466337 10.79741554 9.67765667 15.9375 14.875 C16.71673828 15.65875 17.49597656 16.4425 18.29882812 17.25 C20.20154085 19.16438581 22.10186171 21.08108034 24 23 C23.01 23.33 22.02 23.66 21 24 C18.48917747 21.48917747 15.97967393 18.97916578 13.5 16.4375 C11.0573892 13.96013407 11.0573892 13.96013407 8.3125 11.9375 C5.96462862 9.97036452 5.2680122 8.7050927 4 6 C3.29875 5.29875 2.5975 4.5975 1.875 3.875 C1.25625 3.25625 0.6375 2.6375 0 2 C0 1.34 0 0.68 0 0 Z \" fill=\"#A6A8A8\" transform=\"translate(287,649)\"\\/>\\r\\n<path d=\"M0 0 C0.66 0.33 1.32 0.66 2 1 C1.2575 1.721875 0.515 2.44375 -0.25 3.1875 C-2.95038658 5.83486547 -2.95038658 5.83486547 -4.8125 8.375 C-7.30569577 11.36683493 -10.08927108 13.71493462 -13.046875 16.234375 C-14.78196815 17.80289921 -16.23231455 19.36391317 -17.6875 21.1875 C-19.9221913 23.90536779 -22.23562818 25.84993303 -25 28 C-25.33 28.66 -25.66 29.32 -26 30 C-26.66 30 -27.32 30 -28 30 C-26.36221955 25.80374091 -23.26676818 23.01323215 -20.1171875 19.921875 C-19.54292023 19.35043762 -18.96865295 18.77900024 -18.37698364 18.19024658 C-16.5476419 16.37207055 -14.71145807 14.56098508 -12.875 12.75 C-11.63105226 11.51608671 -10.3875573 10.28171678 -9.14453125 9.046875 C-6.10157633 6.02593257 -3.05246746 3.01132908 0 0 Z \" fill=\"#777978\" transform=\"translate(573,487)\"\\/>\\r\\n<path d=\"M0 0 C0.66 0.33 1.32 0.66 2 1 C-0.64265981 4.38590789 -3.28779143 7.3425232 -6.5625 10.125 C-10.32444598 13.3464365 -13.90350943 16.72020832 -17.4375 20.1875 C-17.96996338 20.69877441 -18.50242676 21.21004883 -19.05102539 21.73681641 C-22.65262282 25.27912368 -22.65262282 25.27912368 -24 30 C-25.32 30.33 -26.64 30.66 -28 31 C-28 28 -28 28 -25.4296875 25.08911133 C-24.25246159 23.91236127 -23.06695862 22.74385576 -21.875 21.58203125 C-21.25351074 20.96478683 -20.63202148 20.34754242 -19.99169922 19.71159363 C-18.00138167 17.73809421 -16.00089605 15.77526775 -14 13.8125 C-12.65035991 12.47790263 -11.30139264 11.14262449 -9.953125 9.80664062 C-6.64317773 6.52980425 -3.32407262 3.26250403 0 0 Z \" fill=\"#858686\" transform=\"translate(603,457)\"\\/>\\r\\n<path d=\"M0 0 C-1.3584202 3.04332765 -2.88463024 5.12309151 -5.2578125 7.453125 C-5.88300781 8.071875 -6.50820313 8.690625 -7.15234375 9.328125 C-7.80332031 9.96234375 -8.45429688 10.5965625 -9.125 11.25 C-9.78371094 11.8996875 -10.44242187 12.549375 -11.12109375 13.21875 C-12.74296643 14.81711727 -14.3693281 16.41061897 -16 18 C-16.61254883 16.14086914 -16.61254883 16.14086914 -17 14 C-15.19921875 11.74609375 -15.19921875 11.74609375 -12.6875 9.4375 C-10.06657653 6.99761363 -7.99385547 4.99078321 -6 2 C-3.83252916 0.71306419 -2.53199972 0 0 0 Z \" fill=\"#555555\" transform=\"translate(371,244)\"\\/>\\r\\n<path d=\"M0 0 C0.88219596 2.43953838 1.14055379 3.61972761 0.22729492 6.09057617 C-0.18415771 6.81736572 -0.59561035 7.54415527 -1.01953125 8.29296875 C-1.46490234 9.08767578 -1.91027344 9.88238281 -2.36914062 10.70117188 C-2.84544922 11.52166016 -3.32175781 12.34214844 -3.8125 13.1875 C-4.27720703 14.01958984 -4.74191406 14.85167969 -5.22070312 15.70898438 C-8.71273833 21.85636917 -8.71273833 21.85636917 -11 23 C-11.66 22.34 -12.32 21.68 -13 21 C-12.41476562 20.32324219 -11.82953125 19.64648438 -11.2265625 18.94921875 C-8.80995034 15.74826756 -7.07863952 12.41954208 -5.375 8.8125 C-2.25366928 2.25366928 -2.25366928 2.25366928 0 0 Z \" fill=\"#4A4A4A\" transform=\"translate(563,353)\"\\/>\\r\\n<path d=\"M0 0 C0.33 0 0.66 0 1 0 C1.16435547 0.99966797 1.16435547 0.99966797 1.33203125 2.01953125 C3.06112275 12.16161736 3.06112275 12.16161736 6 22 C6.66 22.33 7.32 22.66 8 23 C7.67 23.66 7.34 24.32 7 25 C6.01 25 5.02 25 4 25 C0.63846231 16.4945279 -2.0719119 9.20849731 0 0 Z \" fill=\"#515252\" transform=\"translate(191,425)\"\\/>\\r\\n<path d=\"M0 0 C0.66 0.99 1.32 1.98 2 3 C-3.35618138 8.55016783 -8.52398436 13.77651154 -15 18 C-14.67 15.36 -14.34 12.72 -14 10 C-13.319375 9.979375 -12.63875 9.95875 -11.9375 9.9375 C-8.06297084 8.70094814 -6.24278704 6.46267219 -3.55078125 3.49609375 C-2 2 -2 2 0 2 C0 1.34 0 0.68 0 0 Z \" fill=\"#6B6B6B\" transform=\"translate(466,460)\"\\/>\\r\\n<path d=\"M0 0 C-1.3140375 3.88146462 -2.84763705 6.18819881 -5.8125 9 C-6.52019531 9.680625 -7.22789062 10.36125 -7.95703125 11.0625 C-8.96830078 12.0215625 -8.96830078 12.0215625 -10 13 C-11.00358634 13.99640075 -12.00428872 14.9957296 -13 16 C-13.66 16.66 -14.32 17.32 -15 18 C-15 13.10957289 -14.01700637 12.45670351 -10.75 9 C-9.96109375 8.154375 -9.1721875 7.30875 -8.359375 6.4375 C-7.19148437 5.2309375 -7.19148437 5.2309375 -6 4 C-5.28328125 3.236875 -4.5665625 2.47375 -3.828125 1.6875 C-2 0 -2 0 0 0 Z \" fill=\"#434343\" transform=\"translate(222,344)\"\\/>\\r\\n<path d=\"M0 0 C0 3 0 3 -1.37695312 4.7175293 C-2.00537109 5.33023682 -2.63378906 5.94294434 -3.28125 6.57421875 C-3.95800781 7.24130859 -4.63476562 7.90839844 -5.33203125 8.59570312 C-6.04746094 9.28599609 -6.76289063 9.97628906 -7.5 10.6875 C-8.57314453 11.7403418 -8.57314453 11.7403418 -9.66796875 12.81445312 C-11.43879577 14.54986361 -13.21623456 16.2779073 -15 18 C-15.66 17.34 -16.32 16.68 -17 16 C-4.88636364 1.87937063 -4.88636364 1.87937063 0 0 Z \" fill=\"#404140\" transform=\"translate(409,312)\"\\/>\\r\\n<path d=\"M0 0 C0.66 0.33 1.32 0.66 2 1 C-3.61 6.61 -9.22 12.22 -15 18 C-15.66 17.67 -16.32 17.34 -17 17 C-13.16845198 10.50302726 -7.285893 2.65502881 0 0 Z \" fill=\"#515252\" transform=\"translate(286,328)\"\\/>\\r\\n<path d=\"M0 0 C0.66 0.33 1.32 0.66 2 1 C-0.75863213 3.84543756 -3.53381999 6.67414757 -6.3125 9.5 C-7.49102539 10.71623047 -7.49102539 10.71623047 -8.69335938 11.95703125 C-9.45068359 12.72402344 -10.20800781 13.49101562 -10.98828125 14.28125 C-11.68477783 14.99345703 -12.38127441 15.70566406 -13.09887695 16.43945312 C-15 18 -15 18 -18 18 C-18 16 -18 16 -15.9375 13.75 C-13.26214628 11.16637269 -10.42517509 8.78783766 -7.55078125 6.4296875 C-5.75318225 4.88518193 -5.75318225 4.88518193 -4 2 C-2 0.75 -2 0.75 0 0 Z \" fill=\"#474646\" transform=\"translate(264,242)\"\\/>\\r\\n<path d=\"M0 0 C0 0.66 0 1.32 0 2 C-1.49609375 3.4375 -1.49609375 3.4375 -3.4375 5 C-6.15188238 7.14525044 -6.15188238 7.14525044 -8 10 C-8.66 10 -9.32 10 -10 10 C-10.33 10.99 -10.66 11.98 -11 13 C-12.56640625 14.54296875 -12.56640625 14.54296875 -14.5625 16.1875 C-18.94958964 19.90026302 -22.9864508 23.89038181 -27 28 C-27 24.28672358 -25.75783556 23.39839337 -23.23965454 20.84846497 C-22.69908417 20.31710434 -22.15851379 19.78574371 -21.6015625 19.23828125 C-21.05140472 18.68762497 -20.50124695 18.13696869 -19.93441772 17.56962585 C-18.76943733 16.40698677 -17.60076046 15.24804168 -16.42871094 14.0925293 C-14.63037332 12.31780277 -12.84573977 10.53011701 -11.0625 8.74023438 C-9.93047803 7.61378833 -8.79769094 6.48811057 -7.6640625 5.36328125 C-7.12754059 4.82584793 -6.59101868 4.28841461 -6.03823853 3.73469543 C-2.23101543 0 -2.23101543 0 0 0 Z \" fill=\"#767776\" transform=\"translate(485,577)\"\\/>\\r\\n<path d=\"M0 0 C0.66 0.33 1.32 0.66 2 1 C-9.33712984 12.70615034 -9.33712984 12.70615034 -16 17 C-14.28793229 9.49803059 -8.28808459 5.26512494 -2.1875 1.0625 C-1.1046875 0.5365625 -1.1046875 0.5365625 0 0 Z \" fill=\"#464746\" transform=\"translate(358,362)\"\\/>\\r\\n<path d=\"M0 0 C0.66 0 1.32 0 2 0 C3.19921875 1.22265625 3.19921875 1.22265625 4.6875 3.0625 C10.22153466 9.59737071 16.42321752 15.50661864 22.50708008 21.52294922 C23.67493521 22.67839052 24.83833521 23.83833521 26 25 C26 25.66 26 26.32 26 27 C25.34 27 24.68 27 24 27 C22.51953125 25.49609375 22.51953125 25.49609375 20.8125 23.4375 C16.66560621 18.56640854 12.41551591 13.89790536 7.375 9.9375 C4.42934978 7.53446956 2.30337064 5.02728713 0 2 C0 1.34 0 0.68 0 0 Z \" fill=\"#A4A5A4\" transform=\"translate(499,137)\"\\/>\\r\\n<path d=\"M0 0 C0.66 0 1.32 0 2 0 C1.95359375 0.7734375 1.9071875 1.546875 1.859375 2.34375 C1.61168095 9.49149267 2.24206917 13.89336241 6 20 C5.01 20 4.02 20 3 20 C-0.98361224 15.43056244 -2.14440329 11.04272212 -2 5 C-1.0625 1.9375 -1.0625 1.9375 0 0 Z \" fill=\"#4E4E4E\" transform=\"translate(265,408)\"\\/>\\r\\n<path d=\"M0 0 C1.8046875 0.203125 1.8046875 0.203125 4 1 C5.6328125 3.109375 5.6328125 3.109375 7.125 5.75 C7.62257813 6.61109375 8.12015625 7.4721875 8.6328125 8.359375 C12.14042103 15.13407033 12.14042103 15.13407033 11.625 18.3125 C11.315625 19.1478125 11.315625 19.1478125 11 20 C8.4064286 17.4064286 7.08571945 14.38269142 5.5 11.125 C5.19191406 10.49980469 4.88382812 9.87460938 4.56640625 9.23046875 C3.70822053 7.48831491 2.85398213 5.74421823 2 4 C1.33503891 2.66581524 0.66934269 1.33199196 0 0 Z \" fill=\"#393A39\" transform=\"translate(452,160)\"\\/>\\r\\n<path d=\"M0 0 C0.66 0 1.32 0 2 0 C0.58989008 3.19288543 -1.09683949 5.35372436 -3.5546875 7.8203125 C-4.25207031 8.52027344 -4.94945312 9.22023438 -5.66796875 9.94140625 C-6.39628906 10.66199219 -7.12460937 11.38257813 -7.875 12.125 C-8.59558594 12.85332031 -9.31617188 13.58164062 -10.05859375 14.33203125 C-10.75855469 15.02941406 -11.45851563 15.72679687 -12.1796875 16.4453125 C-13.13464111 17.39688232 -13.13464111 17.39688232 -14.10888672 18.36767578 C-15.98723818 19.98898457 -17.73891701 21.00141248 -20 22 C-18.90016539 19.20042098 -17.98733445 17.99025727 -15.5625 16.125 C-12.79538214 14.13140706 -12.79538214 14.13140706 -11.5 10.875 C-9.69895812 7.42300307 -8.57354442 7.19118147 -5 6 C-4.34 5.01 -3.68 4.02 -3 3 C-2.34 3 -1.68 3 -1 3 C-0.67 2.01 -0.34 1.02 0 0 Z \" fill=\"#AFB0AF\" transform=\"translate(296,35)\"\\/>\\r\\n<path d=\"M0 0 C0 3 0 3 -1.875 5.1875 C-4 7 -4 7 -6 7 C-6.33 7.99 -6.66 8.98 -7 10 C-7.66 10 -8.32 10 -9 10 C-9 10.66 -9 11.32 -9 12 C-10.62626404 13.38232443 -12.2925002 14.71937515 -14 16 C-13.67 16.66 -13.34 17.32 -13 18 C-13.598125 18.103125 -14.19625 18.20625 -14.8125 18.3125 C-17.28243264 19.08876455 -18.32251235 20.07088921 -20 22 C-20 19 -20 19 -18.74658203 17.37426758 C-18.17278809 16.80345459 -17.59899414 16.2326416 -17.0078125 15.64453125 C-16.38519531 15.02255859 -15.76257813 14.40058594 -15.12109375 13.75976562 C-14.13302734 12.79586914 -14.13302734 12.79586914 -13.125 11.8125 C-12.14853516 10.83120117 -12.14853516 10.83120117 -11.15234375 9.83007812 C-6.26686327 5 -6.26686327 5 -4 5 C-3.67 4.01 -3.34 3.02 -3 2 C-2.01 1.34 -1.02 0.68 0 0 Z \" fill=\"#A4A4A0\" transform=\"translate(174,282)\"\\/>\\r\\n<path d=\"M0 0 C3.07259503 0.31424267 4.02728951 1.02820236 6.21875 3.29296875 C6.9715625 4.24816406 7.724375 5.20335937 8.5 6.1875 C9.67369141 7.6725 9.67369141 7.6725 10.87109375 9.1875 C13.04785313 12.06321882 15.09684626 14.93840485 17 18 C13.90464807 17.69046481 12.9721103 16.97073546 10.78125 14.671875 C10.0284375 13.70765625 9.275625 12.7434375 8.5 11.75 C7.7471875 10.79609375 6.994375 9.8421875 6.21875 8.859375 C5.4865625 7.91578125 4.754375 6.9721875 4 6 C3.2471875 5.07703125 2.494375 4.1540625 1.71875 3.203125 C0 1 0 1 0 0 Z \" fill=\"#323233\" transform=\"translate(438,142)\"\\/>\\r\\n<path d=\"M0 0 C4.66765155 1.93510839 7.48666598 5.47478285 10.87890625 9.1015625 C12.8981343 11.33345759 12.8981343 11.33345759 16 11 C15.67 12.32 15.34 13.64 15 15 C15.66 15 16.32 15 17 15 C16.67 15.99 16.34 16.98 16 18 C13.32529045 15.38308836 10.66165519 12.75518292 8 10.125 C7.236875 9.37863281 6.47375 8.63226562 5.6875 7.86328125 C4.965625 7.14785156 4.24375 6.43242188 3.5 5.6953125 C2.8296875 5.03547363 2.159375 4.37563477 1.46875 3.69580078 C0 2 0 2 0 0 Z \" fill=\"#7F7F80\" transform=\"translate(394,630)\"\\/>\\r\\n<path d=\"M0 0 C0.33 0 0.66 0 1 0 C1.69037426 9.02417777 2.15178302 17.94361322 2 27 C-1.83696634 23.16303366 -1.12702418 16.98636528 -1.13671875 11.79492188 C-1.13285156 11.09947266 -1.12898437 10.40402344 -1.125 9.6875 C-1.12886719 8.97271484 -1.13273438 8.25792969 -1.13671875 7.52148438 C-1.12678867 2.25357734 -1.12678867 2.25357734 0 0 Z \" fill=\"#151615\" transform=\"translate(189,404)\"\\/>\\r\\n<path d=\"M0 0 C0 4.1925528 -1.13063904 6.09539468 -4.0234375 9.10546875 C-4.79945313 9.79253906 -5.57546875 10.47960937 -6.375 11.1875 C-7.14585937 11.88230469 -7.91671875 12.57710937 -8.7109375 13.29296875 C-10.91278842 14.93496338 -12.31982886 15.59001948 -15 16 C-13.46518706 12.19331705 -11.13477919 10.1037511 -8.0625 7.4375 C-3.92587532 3.83064366 -3.92587532 3.83064366 0 0 Z \" fill=\"#605F5F\" transform=\"translate(339,166)\"\\/>\\r\\n<path d=\"M0 0 C-1.65863505 4.32504836 -4.871041 7.09418825 -8.125 10.25 C-8.68832031 10.80429687 -9.25164062 11.35859375 -9.83203125 11.9296875 C-11.21686028 13.29104485 -12.60783204 14.64614859 -14 16 C-14.33 15.34 -14.66 14.68 -15 14 C-12.18953055 9.11222704 -6.06530589 0 0 0 Z \" fill=\"#3C3D3D\" transform=\"translate(433,496)\"\\/>\\r\\n<path d=\"M0 0 C0.33 0.66 0.66 1.32 1 2 C-0.03423573 4.33814325 -1.11739281 6.55867116 -2.3125 8.8125 C-4.39740053 12.81099661 -6.41310553 16.77096651 -8 21 C-8.33 21 -8.66 21 -9 21 C-9.98498325 13.77678952 -6.76918038 8.04352766 -3 2 C-2.01 1.34 -1.02 0.68 0 0 Z \" fill=\"#2D2E2E\" transform=\"translate(232,383)\"\\/>\\r\\n<path d=\"M0 0 C2.48028682 7.44086046 0.72993669 13.98016279 -2 21 C-2.99 21 -3.98 21 -5 21 C-4.34 17.04 -3.68 13.08 -3 9 C-2.34 9 -1.68 9 -1 9 C-1 7.68 -1 6.36 -1 5 C-1.66 4.67 -2.32 4.34 -3 4 C-3 3.01 -3 2.02 -3 1 C-2.01 0.67 -1.02 0.34 0 0 Z \" fill=\"#7B7D7D\" transform=\"translate(567,333)\"\\/>\\r\\n<path d=\"M0 0 C0.59329102 0.22163818 1.18658203 0.44327637 1.79785156 0.67163086 C0.17445351 2.38047091 -1.49533897 4.04609803 -3.20214844 5.67163086 C-3.86214844 5.67163086 -4.52214844 5.67163086 -5.20214844 5.67163086 C-5.53214844 6.66163086 -5.86214844 7.65163086 -6.20214844 8.67163086 C-8.13964844 10.85913086 -8.13964844 10.85913086 -10.20214844 12.67163086 C-10.86214844 12.67163086 -11.52214844 12.67163086 -12.20214844 12.67163086 C-12.53214844 13.66163086 -12.86214844 14.65163086 -13.20214844 15.67163086 C-13.86214844 14.68163086 -14.52214844 13.69163086 -15.20214844 12.67163086 C-13.13347281 10.46843153 -11.0493305 8.28490111 -8.95214844 6.10913086 C-8.07236328 5.16650391 -8.07236328 5.16650391 -7.17480469 4.20483398 C-6.60117187 3.61508789 -6.02753906 3.0253418 -5.43652344 2.41772461 C-4.9128418 1.86785889 -4.38916016 1.31799316 -3.84960938 0.75146484 C-2.20214844 -0.32836914 -2.20214844 -0.32836914 0 0 Z \" fill=\"#3B3C3C\" transform=\"translate(506.2021484375,374.328369140625)\"\\/>\\r\\n<path d=\"M0 0 C-0.1875 2.3125 -0.1875 2.3125 -1 5 C-2.63064764 6.05771739 -4.30280873 7.05273046 -6 8 C-7.34736973 9.65533995 -8.68334336 11.32012773 -10 13 C-10.66 13 -11.32 13 -12 13 C-12 13.66 -12 14.32 -12 15 C-12.66 14.67 -13.32 14.34 -14 14 C-6.85714286 0 -6.85714286 0 0 0 Z \" fill=\"#5C5C5B\" transform=\"translate(293,273)\"\\/>\\r\\n<path d=\"M0 0 C3.1474731 2.64652393 4.49972268 5.79939195 6.1875 9.5 C6.71730469 10.6446875 7.24710938 11.789375 7.79296875 12.96875 C9 16 9 16 9 19 C8.01 19 7.02 19 6 19 C0.44419134 6.51480638 0.44419134 6.51480638 0 0 Z \" fill=\"#444445\" transform=\"translate(523,289)\"\\/>\\r\\n<path d=\"M0 0 C4.75 1.875 4.75 1.875 7 3 C8.70702735 3.06996014 10.41668003 3.08440154 12.125 3.0625 C13.03507812 3.05347656 13.94515625 3.04445313 14.8828125 3.03515625 C15.93082031 3.01775391 15.93082031 3.01775391 17 3 C17 3.99 17 4.98 17 6 C10.32477353 7.11477625 6.00914805 7.26584133 0 4 C0 2.68 0 1.36 0 0 Z \" fill=\"#525253\" transform=\"translate(270,426)\"\\/>\\r\\n<path d=\"M0 0 C1.98 0 3.96 0 6 0 C6 0.99 6 1.98 6 3 C3.77585391 3.86979461 1.54727408 4.72083184 -0.6875 5.5625 C-1.31333984 5.80935547 -1.93917969 6.05621094 -2.58398438 6.31054688 C-6.4520557 7.74841632 -9.03600233 8.26575069 -13 7 C-10.14589666 5.49439503 -7.31875358 4.36783204 -4.25 3.375 C-3.45078125 3.11460937 -2.6515625 2.85421875 -1.828125 2.5859375 C-1.22484375 2.39257812 -0.6215625 2.19921875 0 2 C0 1.34 0 0.68 0 0 Z \" fill=\"#3F3F3E\" transform=\"translate(316,494)\"\\/>\\r\\n<path d=\"M0 0 C0.99 0.33 1.98 0.66 3 1 C2.67 1.99 2.34 2.98 2 4 C1.34 3.67 0.68 3.34 0 3 C-0.2475 3.556875 -0.495 4.11375 -0.75 4.6875 C-2.87913948 8.62640804 -4.67082087 11.55694029 -9 13 C-9.33 12.01 -9.66 11.02 -10 10 C-6.7 6.7 -3.4 3.4 0 0 Z \" fill=\"#565857\" transform=\"translate(334,442)\"\\/>\\r\\n<path d=\"M0 0 C0.33 1.32 0.66 2.64 1 4 C1.58491211 3.99476318 2.16982422 3.98952637 2.77246094 3.98413086 C5.43162963 3.96329842 8.09078111 3.95031993 10.75 3.9375 C12.13058594 3.92493164 12.13058594 3.92493164 13.5390625 3.91210938 C14.87324219 3.90727539 14.87324219 3.90727539 16.234375 3.90234375 C17.05131836 3.89710693 17.86826172 3.89187012 18.70996094 3.88647461 C20.93968135 3.99700979 22.86133755 4.37944433 25 5 C24.67 5.99 24.34 6.98 24 8 C23.51015625 7.68289062 23.0203125 7.36578125 22.515625 7.0390625 C18.998323 5.58626385 15.50334607 5.53415248 11.75 5.375 C11.00492187 5.33632812 10.25984375 5.29765625 9.4921875 5.2578125 C7.6618476 5.16394892 5.83095857 5.08090282 4 5 C3.67 6.32 3.34 7.64 3 9 C2.34 7.68 1.68 6.36 1 5 C0.67 5.66 0.34 6.32 0 7 C-0.33 6.34 -0.66 5.68 -1 5 C-1.99 4.34 -2.98 3.68 -4 3 C-3.01 2.67 -2.02 2.34 -1 2 C-0.67 1.34 -0.34 0.68 0 0 Z \" fill=\"#D6D6D6\" transform=\"translate(464,227)\"\\/>\\r\\n<path d=\"M0 0 C0.33 0 0.66 0 1 0 C1.33 3.96 1.66 7.92 2 12 C2.33 12 2.66 12 3 12 C2.6083965 17.95507399 1.62875405 22.62819824 -1 28 C-2.32 27.67 -3.64 27.34 -5 27 C-4.01 26.67 -3.02 26.34 -2 26 C-1.25484101 22.61363691 -0.83229437 19.38056897 -0.68359375 15.91796875 C-0.64169922 14.98662109 -0.59980469 14.05527344 -0.55664062 13.09570312 C-0.51732422 12.13599609 -0.47800781 11.17628906 -0.4375 10.1875 C-0.39431641 9.20845703 -0.35113281 8.22941406 -0.30664062 7.22070312 C-0.2009774 4.81392973 -0.09887673 2.40706017 0 0 Z \" fill=\"#868686\" transform=\"translate(467,198)\"\\/>\\r\\n<path d=\"M0 0 C-1.38914475 4.29718953 -3.38031985 6.70687757 -6.625 9.8125 C-7.44226563 10.60269531 -8.25953125 11.39289063 -9.1015625 12.20703125 C-9.72804688 12.79871094 -10.35453125 13.39039063 -11 14 C-11.66 13.01 -12.32 12.02 -13 11 C-11.21427748 9.16052663 -9.42197551 7.32842259 -7.625 5.5 C-7.11710937 4.97535156 -6.60921875 4.45070313 -6.0859375 3.91015625 C-2.2265625 0 -2.2265625 0 0 0 Z \" fill=\"#525252\" transform=\"translate(417,256)\"\\/>\\r\\n<path d=\"M0 0 C0.56074219 0.25136719 1.12148438 0.50273437 1.69921875 0.76171875 C1.03921875 0.76171875 0.37921875 0.76171875 -0.30078125 0.76171875 C-0.96078125 2.08171875 -1.62078125 3.40171875 -2.30078125 4.76171875 C-2.96078125 4.76171875 -3.62078125 4.76171875 -4.30078125 4.76171875 C-3.97078125 6.08171875 -3.64078125 7.40171875 -3.30078125 8.76171875 C-4.95078125 9.42171875 -6.60078125 10.08171875 -8.30078125 10.76171875 C-8.30078125 11.42171875 -8.30078125 12.08171875 -8.30078125 12.76171875 C-8.96078125 12.76171875 -9.62078125 12.76171875 -10.30078125 12.76171875 C-11.0625 11.0625 -11.0625 11.0625 -11.30078125 8.76171875 C-9.5703125 6.3671875 -9.5703125 6.3671875 -7.11328125 3.94921875 C-6.31535156 3.13839844 -5.51742188 2.32757813 -4.6953125 1.4921875 C-2.30078125 -0.23828125 -2.30078125 -0.23828125 0 0 Z \" fill=\"#595859\" transform=\"translate(277.30078125,397.23828125)\"\\/>\\r\\n<path d=\"M0 0 C0.33 0 0.66 0 1 0 C2.60254206 6.96642249 3.95618442 13.96298759 2 21 C1.01 21.99 0.02 22.98 -1 24 C-0.67 16.08 -0.34 8.16 0 0 Z \" fill=\"#232323\" transform=\"translate(431,204)\"\\/>\\r\\n<path d=\"M0 0 C0.57363281 0.24105469 1.14726562 0.48210938 1.73828125 0.73046875 C-0.04744127 2.56994212 -1.83974324 4.40204616 -3.63671875 6.23046875 C-4.14460938 6.75511719 -4.6525 7.27976562 -5.17578125 7.8203125 C-6.50004479 9.16200056 -7.8777774 10.4504269 -9.26171875 11.73046875 C-9.92171875 11.73046875 -10.58171875 11.73046875 -11.26171875 11.73046875 C-10.6911821 7.95811446 -9.09528454 6.10330824 -6.44921875 3.41796875 C-5.41861328 2.34095703 -5.41861328 2.34095703 -4.3671875 1.2421875 C-2.26171875 -0.26953125 -2.26171875 -0.26953125 0 0 Z \" fill=\"#3E3F3F\" transform=\"translate(386.26171875,542.26953125)\"\\/>\\r\\n<path d=\"M0 0 C0.33 1.32 0.66 2.64 1 4 C-1.08984375 6.578125 -1.08984375 6.578125 -3.9375 9.25 C-4.87464844 10.14203125 -5.81179688 11.0340625 -6.77734375 11.953125 C-7.51082031 12.62859375 -8.24429687 13.3040625 -9 14 C-9.66 13.01 -10.32 12.02 -11 11 C-7.37 7.37 -3.74 3.74 0 0 Z \" fill=\"#555555\" transform=\"translate(430,448)\"\\/>\\r\\n<path d=\"M0 0 C0 3.19598122 -0.3723873 4.32532435 -2 7 C-3.7265625 8.703125 -3.7265625 8.703125 -5.625 10.25 C-6.25664062 10.77078125 -6.88828125 11.2915625 -7.5390625 11.828125 C-8.02117187 12.21484375 -8.50328125 12.6015625 -9 13 C-9.66 12.34 -10.32 11.68 -11 11 C-10.2884375 10.38125 -10.2884375 10.38125 -9.5625 9.75 C-7.83733482 7.817815 -7.43415125 6.51807725 -7 4 C-6.401875 3.896875 -5.80375 3.79375 -5.1875 3.6875 C-2.71756736 2.91123545 -1.67748765 1.92911079 0 0 Z \" fill=\"#6A6A6A\" transform=\"translate(270,342)\"\\/>\\r\\n<path d=\"M0 0 C0.33 0 0.66 0 1 0 C0.67 2.31 0.34 4.62 0 7 C0.66 7.33 1.32 7.66 2 8 C2 11.96 2 15.92 2 20 C1.01 19.34 0.02 18.68 -1 18 C-1 17.01 -1 16.02 -1 15 C-1.66 14.67 -2.32 14.34 -3 14 C-2 11 -2 11 -1 10 C-1.66 10 -2.32 10 -3 10 C-2.67 8.02 -2.34 6.04 -2 4 C-1.34 4 -0.68 4 0 4 C0 2.68 0 1.36 0 0 Z \" fill=\"#E6E6EC\" transform=\"translate(567,307)\"\\/>\\r\\n<path d=\"M0 0 C0.99 0.33 1.98 0.66 3 1 C-4.33002833 9.69830028 -4.33002833 9.69830028 -7 12 C-7.99 12 -8.98 12 -10 12 C-8.52278578 8.54798361 -6.56205999 6.35038064 -3.875 3.75 C-3.15054687 3.04359375 -2.42609375 2.3371875 -1.6796875 1.609375 C-1.12539063 1.07828125 -0.57109375 0.5471875 0 0 Z \" fill=\"#4B4C4C\" transform=\"translate(384,287)\"\\/>\\r\\n<path d=\"M0 0 C0.66 0 1.32 0 2 0 C0.41332422 3.90285767 -2.13350481 6.33520982 -5.125 9.25 C-6.03507812 10.14203125 -6.94515625 11.0340625 -7.8828125 11.953125 C-8.58148438 12.62859375 -9.28015625 13.3040625 -10 14 C-10.66 13.67 -11.32 13.34 -12 13 C-9.37631768 8.82154297 -6.75654261 5.27493458 -3 2 C-2.01 2 -1.02 2 0 2 C0 1.34 0 0.68 0 0 Z \" fill=\"#383838\" transform=\"translate(301,204)\"\\/>\\r\\n<path d=\"M0 0 C1.32 0.33 2.64 0.66 4 1 C2.35 2.65 0.7 4.3 -1 6 C-0.67 6.66 -0.34 7.32 0 8 C-1.1196986 9.00593243 -2.2459412 10.0045849 -3.375 11 C-4.00148437 11.556875 -4.62796875 12.11375 -5.2734375 12.6875 C-7 14 -7 14 -9 14 C-9 12.02 -9 10.04 -9 8 C-7.8553125 7.9071875 -7.8553125 7.9071875 -6.6875 7.8125 C-3.7941957 7.2353919 -3.7941957 7.2353919 -2.25 4.5625 C-1.8375 3.716875 -1.425 2.87125 -1 2 C-0.67 1.34 -0.34 0.68 0 0 Z \" fill=\"#D2D2D2\" transform=\"translate(243,86)\"\\/>\\r\\n<path d=\"M0 0 C1.32 0.33 2.64 0.66 4 1 C2.76600937 2.36877116 1.51219377 3.71969166 0.25 5.0625 C-0.79414063 6.19365234 -0.79414063 6.19365234 -1.859375 7.34765625 C-4 9 -4 9 -6.265625 8.74609375 C-6.83796875 8.49988281 -7.4103125 8.25367188 -8 8 C-8 6.02 -8 4.04 -8 2 C-5.03 2.495 -5.03 2.495 -2 3 C-1.34 2.01 -0.68 1.02 0 0 Z M-7 3 C-6 5 -6 5 -6 5 Z M-5 4 C-5.33 4.66 -5.66 5.32 -6 6 C-5.01 5.67 -4.02 5.34 -3 5 C-3.66 4.67 -4.32 4.34 -5 4 Z \" fill=\"#7C7C7D\" transform=\"translate(244,260)\"\\/>\\r\\n<path d=\"M0 0 C0.99 0.66 1.98 1.32 3 2 C2.49339844 2.8353125 2.49339844 2.8353125 1.9765625 3.6875 C-0.99258273 8.76765599 -2.84597168 13.22985841 -4 19 C-4.33 19 -4.66 19 -5 19 C-6.54219802 13.16167891 -6.00781673 10.33191998 -3.0625 5 C-2.0613067 3.32146181 -1.04674339 1.65051711 0 0 Z \" fill=\"#575757\" transform=\"translate(341,538)\"\\/>\\r\\n<path d=\"M0 0 C0.66 0.33 1.32 0.66 2 1 C1.34 9.25 0.68 17.5 0 26 C-0.33 26 -0.66 26 -1 26 C-1.2276125 22.79273298 -1.42860225 19.5843177 -1.625 16.375 C-1.68945312 15.47136719 -1.75390625 14.56773437 -1.8203125 13.63671875 C-2.11417457 8.60433074 -2.05774314 4.72809683 0 0 Z \" fill=\"#616161\" transform=\"translate(191,393)\"\\/>\\r\\n<path d=\"M0 0 C0.33 0.66 0.66 1.32 1 2 C-0.12029017 3.48273699 -1.24638618 4.96108886 -2.375 6.4375 C-3.31472656 7.67306641 -3.31472656 7.67306641 -4.2734375 8.93359375 C-6 11 -6 11 -8 12 C-7.67 12.66 -7.34 13.32 -7 14 C-8.65 14.33 -10.3 14.66 -12 15 C-12 12 -12 12 -9.375 9.08203125 C-8.25750594 7.98449244 -7.13214357 6.89492105 -6 5.8125 C-5.42765625 5.25369141 -4.8553125 4.69488281 -4.265625 4.11914062 C-2.85037212 2.73926907 -1.42602845 1.36873266 0 0 Z \" fill=\"#494A4A\" transform=\"translate(409,367)\"\\/>\\r\\n<path d=\"M0 0 C0 3 0 3 -1.50390625 4.76171875 C-2.18324219 5.39722656 -2.86257812 6.03273438 -3.5625 6.6875 C-7.62912906 10.59465341 -11.34678937 14.70747751 -15 19 C-15.33 18.01 -15.66 17.02 -16 16 C-11.03093773 10.1719243 -5.90436923 4.8836671 0 0 Z \" fill=\"#8E8E8E\" transform=\"translate(125,330)\"\\/>\\r\\n<path d=\"M0 0 C0.66 0.33 1.32 0.66 2 1 C-1.27094033 6.45156722 -5.41853326 10.61869443 -10 15 C-10.66 14.34 -11.32 13.68 -12 13 C-9.81057672 10.05269943 -7.61193589 7.59119777 -4.75 5.3125 C-3.8425 4.549375 -2.935 3.78625 -2 3 C-2 2.34 -2 1.68 -2 1 C-1.34 0.67 -0.68 0.34 0 0 Z \" fill=\"#626262\" transform=\"translate(527,399)\"\\/>\\r\\n<path d=\"M0 0 C0.99 0 1.98 0 3 0 C1.59155282 3.21524305 -0.10344786 5.32183868 -2.625 7.75 C-3.57246094 8.67039062 -3.57246094 8.67039062 -4.5390625 9.609375 C-5.02117187 10.06828125 -5.50328125 10.5271875 -6 11 C-6.99 10.34 -7.98 9.68 -9 9 C-6.7439821 5.67534204 -4.18502216 3.43067481 -1 1 C-0.67 0.67 -0.34 0.34 0 0 Z \" fill=\"#606061\" transform=\"translate(258,354)\"\\/>\\r\\n<path d=\"M0 0 C0.33 0.66 0.66 1.32 1 2 C-2.625 7.875 -2.625 7.875 -6 9 C-6 9.66 -6 10.32 -6 11 C-7.96147874 12.38938077 -9.96166576 13.7260411 -12 15 C-12 12 -12 12 -9.375 9.08203125 C-8.25750594 7.98449244 -7.13214357 6.89492105 -6 5.8125 C-5.42765625 5.25369141 -4.8553125 4.69488281 -4.265625 4.11914062 C-2.85037212 2.73926907 -1.42602845 1.36873266 0 0 Z \" fill=\"#434444\" transform=\"translate(279,285)\"\\/>\\r\\n<path d=\"M0 0 C0.66 0.99 1.32 1.98 2 3 C0.63823831 4.47070263 -0.74007683 5.92608698 -2.125 7.375 C-2.89070313 8.18710938 -3.65640625 8.99921875 -4.4453125 9.8359375 C-7.22448161 12.19015721 -9.50506564 13.07814775 -13 14 C-9.60009686 9.84066833 -6.25765774 6.31151158 -2 3 C-1.34 2.01 -0.68 1.02 0 0 Z \" fill=\"#505050\" transform=\"translate(274,230)\"\\/>\\r\\n<path d=\"M0 0 C3.67229009 3.37453684 6.08948843 6.37455093 8 11 C8 11.99 8 12.98 8 14 C7.01 14 6.02 14 5 14 C4.15675328 12.421924 3.32576082 10.8372958 2.5 9.25 C2.0359375 8.36828125 1.571875 7.4865625 1.09375 6.578125 C0 4 0 4 0 0 Z \" fill=\"#5C5D5C\" transform=\"translate(421,178)\"\\/>\\r\\n<path d=\"M0 0 C4.54074179 1.42358391 7.03973147 3.72132073 10.3125 7.125 C11.19550781 8.03507813 12.07851562 8.94515625 12.98828125 9.8828125 C13.65214844 10.58148437 14.31601563 11.28015625 15 12 C14.34 12.66 13.68 13.32 13 14 C12.67 13.01 12.34 12.02 12 11 C10.67661368 10.31379969 9.34050052 9.65213539 8 9 C2.42231076 4.84462151 2.42231076 4.84462151 1 2 C0.34 1.67 -0.32 1.34 -1 1 C-0.67 0.67 -0.34 0.34 0 0 Z \" fill=\"#ADAEAE\" transform=\"translate(232,596)\"\\/>\\r\\n<path d=\"M0 0 C0.66 0 1.32 0 2 0 C2 0.99 2 1.98 2 3 C-0.30078125 5.04296875 -0.30078125 5.04296875 -3.3125 7.1875 C-4.29863281 7.90292969 -5.28476562 8.61835938 -6.30078125 9.35546875 C-9 11 -9 11 -12 11 C-12 10.34 -12 9.68 -12 9 C-10.23810568 7.58061562 -8.41435143 6.23733457 -6.5625 4.9375 C-3.13481849 2.64887381 -3.13481849 2.64887381 0 0 Z \" fill=\"#303132\" transform=\"translate(323,453)\"\\/>\\r\\n<path d=\"M0 0 C0 3 0 3 -2.3125 5.625 C-5 8 -5 8 -8 9 C-8 9.99 -8 10.98 -8 12 C-9.65 12 -11.3 12 -13 12 C-2.93659942 0 -2.93659942 0 0 0 Z \" fill=\"#3F3F3F\" transform=\"translate(289,385)\"\\/>\\r\\n<path d=\"M0 0 C0.66 0.99 1.32 1.98 2 3 C0.59921602 4.53547475 -0.82120903 6.05305148 -2.25 7.5625 C-3.43335938 8.83287109 -3.43335938 8.83287109 -4.640625 10.12890625 C-7 12 -7 12 -9.296875 11.77734375 C-10.13992188 11.39255859 -10.13992188 11.39255859 -11 11 C-9.71451591 9.66070495 -8.42141845 8.32871357 -7.125 7 C-6.04605469 5.88625 -6.04605469 5.88625 -4.9453125 4.75 C-3 3 -3 3 -1 3 C-0.67 2.01 -0.34 1.02 0 0 Z \" fill=\"#525353\" transform=\"translate(481,338)\"\\/>\\r\\n<path d=\"M0 0 C0.85851562 0.36931641 0.85851562 0.36931641 1.734375 0.74609375 C0.65929871 2.04464096 -0.42606236 3.33467736 -1.515625 4.62109375 C-2.11890625 5.34039062 -2.7221875 6.0596875 -3.34375 6.80078125 C-5.23650134 8.71661493 -6.80220227 9.7105842 -9.265625 10.74609375 C-9.595625 9.75609375 -9.925625 8.76609375 -10.265625 7.74609375 C-9.03163437 6.37732259 -7.77781877 5.02640209 -6.515625 3.68359375 C-5.81953125 2.92949219 -5.1234375 2.17539062 -4.40625 1.3984375 C-2.265625 -0.25390625 -2.265625 -0.25390625 0 0 Z \" fill=\"#666767\" transform=\"translate(469.265625,411.25390625)\"\\/>\\r\\n<path d=\"M0 0 C0.89332031 0.47566406 1.78664063 0.95132813 2.70703125 1.44140625 C3.60808594 1.91449219 4.50914062 2.38757813 5.4375 2.875 C6.12457031 3.24753906 6.81164062 3.62007812 7.51953125 4.00390625 C7.51953125 5.65390625 7.51953125 7.30390625 7.51953125 9.00390625 C6.52953125 8.67390625 5.53953125 8.34390625 4.51953125 8.00390625 C4.51953125 7.34390625 4.51953125 6.68390625 4.51953125 6.00390625 C0.25580315 3.64480272 0.25580315 3.64480272 -4.48046875 3.00390625 C-4.15046875 2.34390625 -3.82046875 1.68390625 -3.48046875 1.00390625 C-4.14046875 0.67390625 -4.80046875 0.34390625 -5.48046875 0.00390625 C-2.48046875 -0.99609375 -2.48046875 -0.99609375 0 0 Z \" fill=\"#797A7A\" transform=\"translate(519.48046875,240.99609375)\"\\/>\\r\\n<path d=\"M0 0 C3.08693704 1.35852131 5.08641734 2.84510953 7.3125 5.375 C7.84488281 5.96023438 8.37726563 6.54546875 8.92578125 7.1484375 C10 9 10 9 9.66796875 11.2265625 C9.44753906 11.81179688 9.22710937 12.39703125 9 13 C8.34 12.67 7.68 12.34 7 12 C7 11.01 7 10.02 7 9 C6.01 8.34 5.02 7.68 4 7 C2.8125 4.875 2.8125 4.875 2 3 C0.02 3.99 0.02 3.99 -2 5 C-1.125 1.125 -1.125 1.125 0 0 Z \" fill=\"#B9BAB9\" transform=\"translate(246,609)\"\\/>\\r\\n<path d=\"M0 0 C-3.96 3.96 -7.92 7.92 -12 12 C-12.33 11.01 -12.66 10.02 -13 9 C-12.57847656 8.60167969 -12.15695312 8.20335937 -11.72265625 7.79296875 C-11.17480469 7.26316406 -10.62695312 6.73335938 -10.0625 6.1875 C-9.51722656 5.66542969 -8.97195313 5.14335937 -8.41015625 4.60546875 C-6.76480908 2.94187802 -6.76480908 2.94187802 -6 0 C-3 -1 -3 -1 0 0 Z \" fill=\"#3D3D3D\" transform=\"translate(434,390)\"\\/>\\r\\n<path d=\"M0 0 C-0.33 1.32 -0.66 2.64 -1 4 C-1.66 4 -2.32 4 -3 4 C-3.226875 4.5775 -3.45375 5.155 -3.6875 5.75 C-5.33038023 8.5663661 -7.39533227 10.08077114 -10 12 C-10.33 11.01 -10.66 10.02 -11 9 C-9.54782324 7.49403892 -8.08807139 5.99537896 -6.625 4.5 C-5.40683594 3.24703125 -5.40683594 3.24703125 -4.1640625 1.96875 C-2 0 -2 0 0 0 Z \" fill=\"#4D4D4E\" transform=\"translate(492,388)\"\\/>\\r\\n<path d=\"M0 0 C0.33 0.99 0.66 1.98 1 3 C0.01 3 -0.98 3 -2 3 C-2.66 4.32 -3.32 5.64 -4 7 C-4.66 7 -5.32 7 -6 7 C-6.28875 7.639375 -6.5775 8.27875 -6.875 8.9375 C-8 11 -8 11 -10 12 C-10.33 11.01 -10.66 10.02 -11 9 C-9.54782324 7.49403892 -8.08807139 5.99537896 -6.625 4.5 C-5.40683594 3.24703125 -5.40683594 3.24703125 -4.1640625 1.96875 C-2 0 -2 0 0 0 Z \" fill=\"#575757\" transform=\"translate(267,299)\"\\/>\\r\\n<path d=\"M0 0 C0.66 0 1.32 0 2 0 C2 0.66 2 1.32 2 2 C2.56203125 2.23460937 3.1240625 2.46921875 3.703125 2.7109375 C6.54635891 4.30663 8.48098127 6.28924543 10.75 8.625 C11.54921875 9.44226563 12.3484375 10.25953125 13.171875 11.1015625 C14.07679688 12.04128906 14.07679688 12.04128906 15 13 C14.01 13.495 14.01 13.495 13 14 C8.19691714 9.97160792 3.80666092 5.99624245 0 1 C0 0.67 0 0.34 0 0 Z \" fill=\"#8A8C8B\" transform=\"translate(220,583)\"\\/>\\r\\n<path d=\"M0 0 C0.66 0.33 1.32 0.66 2 1 C0.23807715 2.84269011 -1.53351806 4.67390757 -3.3125 6.5 C-4.06176758 7.28697266 -4.06176758 7.28697266 -4.82617188 8.08984375 C-6.16089504 9.4510846 -7.5769384 10.73139516 -9 12 C-9.99 12 -10.98 12 -12 12 C-10.86728288 8.60184863 -9.8090686 7.71355084 -7.125 5.4375 C-6.07699219 4.53837891 -6.07699219 4.53837891 -5.0078125 3.62109375 C-3 2 -3 2 0 0 Z \" fill=\"#303131\" transform=\"translate(166,341)\"\\/>\\r\\n<path d=\"M0 0 C0.66 0.66 1.32 1.32 2 2 C1.70831244 5.61991736 0.00384429 7.32363813 -2.5625 9.75 C-3.52349609 10.67039062 -3.52349609 10.67039062 -4.50390625 11.609375 C-4.99761719 12.06828125 -5.49132812 12.5271875 -6 13 C-6.6796875 11.2265625 -6.6796875 11.2265625 -7 9 C-5.8203125 7.1484375 -5.8203125 7.1484375 -4.125 5.375 C-1.77069571 2.89368731 -1.77069571 2.89368731 0 0 Z \" fill=\"#555655\" transform=\"translate(391,326)\"\\/>\\r\\n<path d=\"M0 0 C0.66 0.99 1.32 1.98 2 3 C-1.96570677 7.38808974 -5.01191871 10.68554313 -11 12 C-9.625 10 -9.625 10 -8 8 C-7.34 8 -6.68 8 -6 8 C-5.7525 7.4225 -5.505 6.845 -5.25 6.25 C-3.83316683 3.6997003 -2.12372463 1.98214299 0 0 Z \" fill=\"#5C5C5C\" transform=\"translate(294,318)\"\\/>\\r\\n<path d=\"M0 0 C0.4375 2.5625 0.4375 2.5625 0 6 C-2.08682726 8.6203019 -4.46686248 10.8158151 -7 13 C-7.33 12.01 -7.66 11.02 -8 10 C-8.66 9.67 -9.32 9.34 -10 9 C-9.4225 8.7525 -8.845 8.505 -8.25 8.25 C-5.6997003 6.83316683 -3.98214299 5.12372463 -2 3 C-2.33 2.34 -2.66 1.68 -3 1 C-1 0 -1 0 0 0 Z \" fill=\"#6A6B6A\" transform=\"translate(389,221)\"\\/>\\r\\n<path d=\"M0 0 C0.33 0.99 0.66 1.98 1 3 C-2.33333333 6.33333333 -5.66666667 9.66666667 -9 13 C-9.99 12.67 -10.98 12.34 -12 12 C-8.04 8.04 -4.08 4.08 0 0 Z \" fill=\"#3A3B3A\" transform=\"translate(394,484)\"\\/>\\r\\n<path d=\"M0 0 C0.33 1.32 0.66 2.64 1 4 C-3.455 7.96 -3.455 7.96 -8 12 C-8.33 11.01 -8.66 10.02 -9 9 C-9.66 8.67 -10.32 8.34 -11 8 C-9.948125 7.690625 -9.948125 7.690625 -8.875 7.375 C-5.04274884 5.54218423 -2.89547493 3.09748481 0 0 Z \" fill=\"#626263\" transform=\"translate(406,414)\"\\/>\\r\\n<path d=\"M0 0 C0.99 0 1.98 0 3 0 C2.33300065 4.40219569 0.91896516 8.00855246 -1 12 C-1.99 12.495 -1.99 12.495 -3 13 C-4.23593891 9.29218328 -3.5678132 8.32489747 -2.0625 4.8125 C-1.68222656 3.91144531 -1.30195312 3.01039063 -0.91015625 2.08203125 C-0.60980469 1.39496094 -0.30945313 0.70789063 0 0 Z \" fill=\"#515150\" transform=\"translate(528,340)\"\\/>\\r\\n<path d=\"M0 0 C0.99 0.66 1.98 1.32 3 2 C1.90344712 3.31886772 0.79746577 4.62990057 -0.3125 5.9375 C-0.92738281 6.66839844 -1.54226563 7.39929688 -2.17578125 8.15234375 C-4 10 -4 10 -7 11 C-6.25 7.625 -6.25 7.625 -5 4 C-2.9375 2.6875 -2.9375 2.6875 -1 2 C-0.67 1.34 -0.34 0.68 0 0 Z \" fill=\"#454546\" transform=\"translate(489,329)\"\\/>\\r\\n<path d=\"M0 0 C3.68069887 1.53643852 5.98775204 3.78150945 8.75 6.625 C9.54921875 7.44226563 10.3484375 8.25953125 11.171875 9.1015625 C12.07679688 10.04128906 12.07679688 10.04128906 13 11 C12.01 11.33 11.02 11.66 10 12 C6.87314581 10.14112212 4.87853367 7.78829609 2.75 4.875 C1.96882813 3.81925781 1.96882813 3.81925781 1.171875 2.7421875 C0 1 0 1 0 0 Z \" fill=\"#959896\" transform=\"translate(255,618)\"\\/>\\r\\n<path d=\"M0 0 C7.48291572 6.15034169 7.48291572 6.15034169 10 10 C6 10 6 10 4.296875 8.828125 C3.53117187 8.04695312 3.53117187 8.04695312 2.75 7.25 C1.96882813 6.48429688 1.96882813 6.48429688 1.171875 5.703125 C0 4 0 4 0 0 Z \" fill=\"#474748\" transform=\"translate(386,573)\"\\/>\\r\\n<path d=\"M0 0 C-0.33 1.32 -0.66 2.64 -1 4 C-1.66 4 -2.32 4 -3 4 C-3 4.66 -3 5.32 -3 6 C-3.66 6 -4.32 6 -5 6 C-5.268125 6.639375 -5.53625 7.27875 -5.8125 7.9375 C-7 10 -7 10 -10 11 C-10 8 -10 8 -8.3203125 5.95703125 C-7.23363281 4.89548828 -7.23363281 4.89548828 -6.125 3.8125 C-5.40570313 3.09707031 -4.68640625 2.38164062 -3.9453125 1.64453125 C-2 0 -2 0 0 0 Z \" fill=\"#3B3C3C\" transform=\"translate(462,315)\"\\/>\\r\\n<path d=\"M0 0 C0.66 0.33 1.32 0.66 2 1 C-0.31 3.64 -2.62 6.28 -5 9 C-5.66 8.67 -6.32 8.34 -7 8 C-7 6.35 -7 4.7 -7 3 C-4.69631264 1.93347808 -2.35981813 0.93578995 0 0 Z \" fill=\"#E2E3E3\" transform=\"translate(278,55)\"\\/>\\r\\n<path d=\"M0 0 C4.71354196 1.57118065 7.29212409 4.93818614 10 9 C9.67 9.99 9.34 10.98 9 12 C7.67522041 10.95285076 6.36556254 9.88655331 5.0625 8.8125 C4.33160156 8.22082031 3.60070312 7.62914062 2.84765625 7.01953125 C0.70261197 4.67494797 0.33905588 3.11608502 0 0 Z \" fill=\"#4E4E4F\" transform=\"translate(413,601)\"\\/>\\r\\n<path d=\"M0 0 C-0.62935259 2.93697877 -1.32501756 5.48752634 -3 8 C-5.625 9.25 -5.625 9.25 -8 10 C-8.33 9.01 -8.66 8.02 -9 7 C-7.88121617 5.82737096 -6.75476949 4.66204862 -5.625 3.5 C-4.68527344 2.52546875 -4.68527344 2.52546875 -3.7265625 1.53125 C-2 0 -2 0 0 0 Z \" fill=\"#5C5B5B\" transform=\"translate(364,414)\"\\/>\\r\\n<path d=\"M0 0 C0 2 0 2 -1.6796875 3.69140625 C-2.40414063 4.30886719 -3.12859375 4.92632812 -3.875 5.5625 C-4.59429687 6.18253906 -5.31359375 6.80257813 -6.0546875 7.44140625 C-8 9 -8 9 -10 10 C-10.33 9.01 -10.66 8.02 -11 7 C-9.9296491 5.82141137 -8.84316035 4.6574639 -7.75 3.5 C-7.14671875 2.8503125 -6.5434375 2.200625 -5.921875 1.53125 C-4 0 -4 0 0 0 Z \" fill=\"#676768\" transform=\"translate(454,325)\"\\/>\\r\\n<path d=\"M0 0 C0.99 0.66 1.98 1.32 3 2 C2.51789063 2.47050781 2.03578125 2.94101562 1.5390625 3.42578125 C0.90742188 4.04839844 0.27578125 4.67101562 -0.375 5.3125 C-1.00148438 5.92738281 -1.62796875 6.54226563 -2.2734375 7.17578125 C-4.18086607 9.08812528 -4.18086607 9.08812528 -6 12 C-6.9375 9.9375 -6.9375 9.9375 -7 7 C-4.92608855 4.37232162 -2.52709628 2.18678905 0 0 Z \" fill=\"#706F70\" transform=\"translate(373,298)\"\\/>\\r\\n<path d=\"M0 0 C0 3 0 3 -1.75 4.82421875 C-2.4925 5.43910156 -3.235 6.05398438 -4 6.6875 C-4.7425 7.31011719 -5.485 7.93273437 -6.25 8.57421875 C-6.8275 9.04472656 -7.405 9.51523437 -8 10 C-8.66 9.01 -9.32 8.02 -10 7 C-8.71372289 5.82739389 -7.42080217 4.6620717 -6.125 3.5 C-5.04605469 2.52546875 -5.04605469 2.52546875 -3.9453125 1.53125 C-2 0 -2 0 0 0 Z \" fill=\"#545455\" transform=\"translate(471,307)\"\\/>\\r\\n<path d=\"M0 0 C0.66 0.33 1.32 0.66 2 1 C-0.64 3.64 -3.28 6.28 -6 9 C-8.475 8.01 -8.475 8.01 -11 7 C-10.4225 6.7525 -9.845 6.505 -9.25 6.25 C-6.87837867 5.06724944 -6.87837867 5.06724944 -4.9375 2.9375 C-3 1 -3 1 0 0 Z \" fill=\"#5D5D5D\" transform=\"translate(345,269)\"\\/>\\r\\n<path d=\"M0 0 C0.99 0 1.98 0 3 0 C2.52590352 4.31730413 -0.03396703 6.33647461 -3.0625 9.25 C-3.98160156 10.14203125 -4.90070312 11.0340625 -5.84765625 11.953125 C-6.55792969 12.62859375 -7.26820312 13.3040625 -8 14 C-8.66 13.67 -9.32 13.34 -10 13 C-9.52949219 12.56429688 -9.05898438 12.12859375 -8.57421875 11.6796875 C-4.7848786 8.05510127 -2.04329447 4.92794549 0 0 Z \" fill=\"#D9DADA\" transform=\"translate(64,267)\"\\/>\\r\\n<path d=\"M0 0 C0.66 0.33 1.32 0.66 2 1 C-1.39728461 5.15612825 -4.72999141 8.70599337 -9 12 C-9.33 12.66 -9.66 13.32 -10 14 C-10.66 13.67 -11.32 13.34 -12 13 C-11.401875 12.278125 -10.80375 11.55625 -10.1875 10.8125 C-7.97449038 8.11363374 -7.97449038 8.11363374 -6.5 5.3125 C-4.85966326 2.78364752 -3.747169 2.0988676 -1 1 C-0.67 0.67 -0.34 0.34 0 0 Z \" fill=\"#B2B3B2\" transform=\"translate(261,70)\"\\/>\\r\\n<path d=\"M0 0 C-3.52608499 3.23224457 -7.34806425 4.35517722 -12 5 C-15 4.625 -15 4.625 -17 4 C-11.6013038 0.4008692 -6.3999927 -0.26122419 0 0 Z \" fill=\"#5E5D5E\" transform=\"translate(474,264)\"\\/>\\r\\n<path d=\"M0 0 C0.99 0.33 1.98 0.66 3 1 C1.71034824 2.37562854 0.37310707 3.70766393 -1 5 C-1.66 5 -2.32 5 -3 5 C-3 5.66 -3 6.32 -3 7 C-4.75 8.7265625 -4.75 8.7265625 -7 10.625 C-7.7425 11.25664062 -8.485 11.88828125 -9.25 12.5390625 C-9.8275 13.02117187 -10.405 13.50328125 -11 14 C-11.66 13.67 -12.32 13.34 -13 13 C-8.66666667 8.66666667 -4.33333333 4.33333333 0 0 Z \" fill=\"#868786\" transform=\"translate(314,142)\"\\/>\\r\\n<path d=\"M0 0 C2.1875 -0.3125 2.1875 -0.3125 5 0 C7.8125 2.1875 7.8125 2.1875 10 5 C10.3125 7.8125 10.3125 7.8125 10 10 C9.01 10.33 8.02 10.66 7 11 C7.103125 10.2575 7.20625 9.515 7.3125 8.75 C7.27853223 5.77779982 7.27853223 5.77779982 4.625 3.8125 C3.75875 3.214375 2.8925 2.61625 2 2 C1.34 1.34 0.68 0.68 0 0 Z \" fill=\"#C8C9C8\" transform=\"translate(277,643)\"\\/>\\r\\n<path d=\"M0 0 C0 0.99 0 1.98 0 3 C-0.66 3 -1.32 3 -2 3 C-2.433125 3.928125 -2.433125 3.928125 -2.875 4.875 C-4 7 -4 7 -6 9 C-8.125 8.625 -8.125 8.625 -10 8 C-8.71451591 6.66070495 -7.42141845 5.32871357 -6.125 4 C-5.04605469 2.88625 -5.04605469 2.88625 -3.9453125 1.75 C-2 0 -2 0 0 0 Z \" fill=\"#3F403F\" transform=\"translate(420,460)\"\\/>\\r\\n<path d=\"M0 0 C0.99 0.33 1.98 0.66 3 1 C-0.3 4.3 -3.6 7.6 -7 11 C-7.66 10.34 -8.32 9.68 -9 9 C-6.33224795 5.44299727 -3.7174905 2.478327 0 0 Z \" fill=\"#343434\" transform=\"translate(365,455)\"\\/>\\r\\n<path d=\"M0 0 C3.36720387 1.39332574 4.9859524 2.9789286 7 6 C4 8 4 8 1 8 C0.40267181 5.23735711 0 2.83967231 0 0 Z \" fill=\"#717070\" transform=\"translate(236,452)\"\\/>\\r\\n<path d=\"M0 0 C4.56030824 3.80475422 8.85089392 7.74969621 13 12 C12.67 12.66 12.34 13.32 12 14 C11.01 13.67 10.02 13.34 9 13 C9 12.01 9 11.02 9 10 C8.34 10 7.68 10 7 10 C7 9.34 7 8.68 7 8 C6.01 7.67 5.02 7.34 4 7 C4 6.34 4 5.68 4 5 C3.34 5 2.68 5 2 5 C1.34 3.35 0.68 1.7 0 0 Z \" fill=\"#868888\" transform=\"translate(45,408)\"\\/>\\r\\n<path d=\"M0 0 C0 3 0 3 -2.25 5.5625 C-4.51797524 7.57275078 -6.23189141 8.87225206 -9 10 C-9 7 -9 7 -7.5390625 5.17578125 C-6.90742188 4.56089844 -6.27578125 3.94601562 -5.625 3.3125 C-4.68527344 2.37857422 -4.68527344 2.37857422 -3.7265625 1.42578125 C-2 0 -2 0 0 0 Z \" fill=\"#343434\" transform=\"translate(405,268)\"\\/>\\r\\n<path d=\"M0 0 C0 0.99 0 1.98 0 3 C-0.66 3 -1.32 3 -2 3 C-2.268125 3.639375 -2.53625 4.27875 -2.8125 4.9375 C-4 7 -4 7 -7 8 C-7.33 8.99 -7.66 9.98 -8 11 C-8.66 10.01 -9.32 9.02 -10 8 C-3.71428571 1.42857143 -3.71428571 1.42857143 0 0 Z \" fill=\"#606061\" transform=\"translate(322,243)\"\\/>\\r\\n<path d=\"M0 0 C1 4 1 4 -0.21484375 6.140625 C-0.78332031 6.83671875 -1.35179687 7.5328125 -1.9375 8.25 C-2.50339844 8.95640625 -3.06929688 9.6628125 -3.65234375 10.390625 C-4.31943359 11.18726563 -4.31943359 11.18726563 -5 12 C-5.99 11.34 -6.98 10.68 -8 10 C-5.36 6.7 -2.72 3.4 0 0 Z \" fill=\"#434244\" transform=\"translate(423,245)\"\\/>\\r\\n<path d=\"M0 0 C2.97769846 0.1384976 5.21826492 0.31118434 7.51171875 2.33203125 C11 6.44000716 11 6.44000716 11 9 C9 9 9 9 7 7.0625 C6.34 6.381875 5.68 5.70125 5 5 C4.34 4.67 3.68 4.34 3 4 C3 3.34 3 2.68 3 2 C2.01 1.67 1.02 1.34 0 1 C0 0.67 0 0.34 0 0 Z \" fill=\"#545455\" transform=\"translate(428,135)\"\\/>\\r\\n<path d=\"M0 0 C0.625 1.75 0.625 1.75 1 4 C0.33333333 5.33333333 -0.33333333 6.66666667 -1 8 C-1.47125235 10.66360025 -1.73049325 13.30493254 -2 16 C-4 14 -4 14 -4.08203125 12.01171875 C-3.53768717 7.31773719 -2.89310547 3.89940303 0 0 Z \" fill=\"#242424\" transform=\"translate(108,347)\"\\/>\\r\\n<path d=\"M0 0 C-0.5590888 3.24271506 -1.4132178 4.93057424 -4 7 C-4.66 7 -5.32 7 -6 7 C-6.33 7.99 -6.66 8.98 -7 10 C-7.66 9.01 -8.32 8.02 -9 7 C-7.88121617 5.82737096 -6.75476949 4.66204862 -5.625 3.5 C-4.68527344 2.52546875 -4.68527344 2.52546875 -3.7265625 1.53125 C-2 0 -2 0 0 0 Z \" fill=\"#525352\" transform=\"translate(323,351)\"\\/>\\r\\n<path d=\"M0 0 C0.33 0.99 0.66 1.98 1 3 C0.38125 3.0825 -0.2375 3.165 -0.875 3.25 C-3.14785979 3.80581505 -3.14785979 3.80581505 -4.1875 5.875 C-4.83464059 7.56752155 -5.42698864 9.28096593 -6 11 C-6.66 10.67 -7.32 10.34 -8 10 C-7.61508669 5.50934475 -5.14531178 0 0 0 Z \" fill=\"#6A6B6A\" transform=\"translate(351,323)\"\\/>\\r\\n<path d=\"M0 0 C4.52615993 3.67832017 8.39424999 7.41086363 12 12 C8.15825448 11.45117921 6.57441077 9.81576178 4 7 C3.2575 6.319375 2.515 5.63875 1.75 4.9375 C0 3 0 3 0 0 Z \" fill=\"#909292\" transform=\"translate(299,661)\"\\/>\\r\\n<path d=\"M0 0 C-1.29598789 2.89104992 -2.49296136 5.03018393 -5 7 C-8.1875 8.1875 -8.1875 8.1875 -11 9 C-10.06725891 7.87105124 -9.12859878 6.74699124 -8.1875 5.625 C-7.66542969 4.99851562 -7.14335937 4.37203125 -6.60546875 3.7265625 C-4.60437547 1.57453518 -3.0502442 0 0 0 Z \" fill=\"#505151\" transform=\"translate(191,317)\"\\/>\\r\\n<path d=\"M0 0 C0.66 0 1.32 0 2 0 C2.99 3.96 3.98 7.92 5 12 C3.68 11.34 2.36 10.68 1 10 C0.390625 7.6171875 0.390625 7.6171875 0.25 4.875 C0.19328125 3.96492188 0.1365625 3.05484375 0.078125 2.1171875 C0.05234375 1.41851562 0.0265625 0.71984375 0 0 Z \" fill=\"#393A39\" transform=\"translate(565,296)\"\\/>\\r\\n<path d=\"M0 0 C0.66 0.66 1.32 1.32 2 2 C0.27192682 2.33895656 -1.45751974 2.67091525 -3.1875 3 C-4.63189453 3.2784375 -4.63189453 3.2784375 -6.10546875 3.5625 C-8.7934206 3.96877612 -11.28771019 4.07933572 -14 4 C-14.33 3.34 -14.66 2.68 -15 2 C-12.5431099 1.61144074 -10.08558167 1.23869912 -7.625 0.875 C-6.57699219 0.70677734 -6.57699219 0.70677734 -5.5078125 0.53515625 C-3.68212086 0.27183534 -1.8401238 0.1281884 0 0 Z \" fill=\"#B8B7B6\" transform=\"translate(352,2)\"\\/>\\r\\n<path d=\"M0 0 C0 0.66 0 1.32 0 2 C-1.49609375 3.4375 -1.49609375 3.4375 -3.4375 5 C-6.15188238 7.14525044 -6.15188238 7.14525044 -8 10 C-8.66 10 -9.32 10 -10 10 C-10.33 10.99 -10.66 11.98 -11 13 C-11.66 12.34 -12.32 11.68 -13 11 C-11.21427748 9.16052663 -9.42197551 7.32842259 -7.625 5.5 C-7.11710937 4.97535156 -6.60921875 4.45070313 -6.0859375 3.91015625 C-2.2265625 0 -2.2265625 0 0 0 Z \" fill=\"#848584\" transform=\"translate(485,577)\"\\/>\\r\\n<path d=\"M0 0 C-0.53895377 3.7726764 -1.99535358 5.68212991 -5 8 C-7.13671875 7.60546875 -7.13671875 7.60546875 -9 7 C-7.88121617 5.82737096 -6.75476949 4.66204862 -5.625 3.5 C-4.68527344 2.52546875 -4.68527344 2.52546875 -3.7265625 1.53125 C-2 0 -2 0 0 0 Z \" fill=\"#4D4E4D\" transform=\"translate(460,420)\"\\/>\\r\\n<path d=\"M0 0 C0.66 0.33 1.32 0.66 2 1 C-1.61251516 5.56048012 -4.98797445 9.01665146 -10 12 C-8.62968895 6.34746692 -4.32310587 3.4886459 0 0 Z \" fill=\"#2B2B2B\" transform=\"translate(537,391)\"\\/>\\r\\n<path d=\"M0 0 C-1.5294997 3.44137432 -3.45369552 6.2222133 -6 9 C-6.99 9 -7.98 9 -9 9 C-7.45665977 5.21180126 -4.44676575 0 0 0 Z \" fill=\"#3B3B3B\" transform=\"translate(257,309)\"\\/>\\r\\n<path d=\"M0 0 C-1.38188453 3.21043882 -2.92421903 5.04936365 -5.625 7.25 C-6.57246094 8.03117187 -6.57246094 8.03117187 -7.5390625 8.828125 C-8.02117187 9.21484375 -8.50328125 9.6015625 -9 10 C-7.81442213 5.25768853 -5.66615657 0 0 0 Z \" fill=\"#343333\" transform=\"translate(315,300)\"\\/>\\r\\n<path d=\"M0 0 C1.875 1.625 1.875 1.625 3 3 C0.08517222 3.80967438 -1.46113217 4.21845993 -4.3125 3.0625 C-4.869375 2.711875 -5.42625 2.36125 -6 2 C-6 1.34 -6 0.68 -6 0 C-6.99 -0.33 -7.98 -0.66 -9 -1 C-5.17456525 -2.27514492 -3.66576992 -1.52740413 0 0 Z \" fill=\"#5C5C5D\" transform=\"translate(514,238)\"\\/>\\r\\n<path d=\"M0 0 C0.99 0.33 1.98 0.66 3 1 C2.07347299 2.17539996 1.13336613 3.34010577 0.1875 4.5 C-0.33457031 5.1496875 -0.85664063 5.799375 -1.39453125 6.46875 C-3 8 -3 8 -6 8 C-4.55746343 4.63408134 -2.66735273 2.48952921 0 0 Z \" fill=\"#494949\" transform=\"translate(351,211)\"\\/>\\r\\n<path d=\"M0 0 C0.66 0.33 1.32 0.66 2 1 C-4.07439825 7.70459519 -4.07439825 7.70459519 -7.9375 8.9375 C-8.9584375 8.9684375 -8.9584375 8.9684375 -10 9 C-9.67 8.34 -9.34 7.68 -9 7 C-8.34 7 -7.68 7 -7 7 C-6.67 6.01 -6.34 5.02 -6 4 C-3.99878825 1.63493157 -3.03200339 1.0106678 0 0 Z \" fill=\"#3F3F3E\" transform=\"translate(325,181)\"\\/>\\r\\n<path d=\"M0 0 C0.33 0.66 0.66 1.32 1 2 C-0.43257963 4.72872311 -1.81722366 6.81722366 -4 9 C-5.32 8.67 -6.64 8.34 -8 8 C-5.36 5.36 -2.72 2.72 0 0 Z \" fill=\"#5D5D5D\" transform=\"translate(393,533)\"\\/>\\r\\n<path d=\"M0 0 C0 3 0 3 -1.53125 4.82421875 C-2.1809375 5.43910156 -2.830625 6.05398438 -3.5 6.6875 C-4.1496875 7.31011719 -4.799375 7.93273437 -5.46875 8.57421875 C-5.9740625 9.04472656 -6.479375 9.51523437 -7 10 C-7.33 9.34 -7.66 8.68 -8 8 C-4 1.42857143 -4 1.42857143 0 0 Z \" fill=\"#323332\" transform=\"translate(401,527)\"\\/>\\r\\n<path d=\"M0 0 C3.99500618 1.3697164 6.80009492 3.25722422 10 6 C7.39417629 6.93065133 6.35801776 7.14917407 3.75 6.0625 C2.88375 5.5365625 2.88375 5.5365625 2 5 C2 4.34 2 3.68 2 3 C1.01 2.67 0.02 2.34 -1 2 C-0.67 1.34 -0.34 0.68 0 0 Z \" fill=\"#4E4F4F\" transform=\"translate(242,458)\"\\/>\\r\\n<path d=\"M0 0 C2.25 0.125 2.25 0.125 5 1 C7.3125 4.0625 7.3125 4.0625 9 7 C8.34 7.66 7.68 8.32 7 9 C4.47411298 6.63707344 3.11179163 5.33537489 2 2 C1.34 1.34 0.68 0.68 0 0 Z \" fill=\"#545555\" transform=\"translate(228,445)\"\\/>\\r\\n<path d=\"M0 0 C-1.55500981 3.81684226 -4.03595495 6.19195732 -7 9 C-7.99 8.67 -8.98 8.34 -10 8 C-8.71451591 6.66070495 -7.42141845 5.32871357 -6.125 4 C-5.04605469 2.88625 -5.04605469 2.88625 -3.9453125 1.75 C-2 0 -2 0 0 0 Z \" fill=\"#2F2F2F\" transform=\"translate(515,365)\"\\/>\\r\\n<path d=\"M0 0 C0 3 0 3 -1.53125 4.82421875 C-2.1809375 5.43910156 -2.830625 6.05398438 -3.5 6.6875 C-4.1496875 7.31011719 -4.799375 7.93273437 -5.46875 8.57421875 C-5.9740625 9.04472656 -6.479375 9.51523437 -7 10 C-7.66 9.67 -8.32 9.34 -9 9 C-6.46636932 4.77728219 -4.43379675 2.21689838 0 0 Z \" fill=\"#2E2E2E\" transform=\"translate(278,336)\"\\/>\\r\\n<path d=\"M0 0 C0.66 0 1.32 0 2 0 C2.18451025 9.41002278 2.18451025 9.41002278 1 14 C0.34 14 -0.32 14 -1 14 C-1.027193 12.41676312 -1.04648306 10.83338938 -1.0625 9.25 C-1.07410156 8.36828125 -1.08570313 7.4865625 -1.09765625 6.578125 C-1.00826198 4.2181162 -0.66912821 2.25501476 0 0 Z \" fill=\"#1C1C1C\" transform=\"translate(568,327)\"\\/>\\r\\n<path d=\"M0 0 C0.66 0.33 1.32 0.66 2 1 C1.67 3.97 1.34 6.94 1 10 C0.01 10.33 -0.98 10.66 -2 11 C-1.85957123 9.35369672 -1.71250671 7.70795821 -1.5625 6.0625 C-1.48128906 5.14597656 -1.40007813 4.22945313 -1.31640625 3.28515625 C-1 1 -1 1 0 0 Z \" fill=\"#3A3B3C\" transform=\"translate(531,329)\"\\/>\\r\\n<path d=\"M0 0 C0.99 0 1.98 0 3 0 C1.60440273 3.3726934 0.1078412 5.08045102 -3 7 C-4.32588499 7.36182576 -5.65882296 7.69977836 -7 8 C-6.02133662 6.85373678 -5.04205413 5.70800212 -4.0625 4.5625 C-3.51722656 3.92441406 -2.97195313 3.28632813 -2.41015625 2.62890625 C-1.63204305 1.73008851 -0.84063472 0.84063472 0 0 Z \" fill=\"#4F4E4F\" transform=\"translate(413,306)\"\\/>\\r\\n<path d=\"M0 0 C0.66 0.33 1.32 0.66 2 1 C-1.3 4.3 -4.6 7.6 -8 11 C-8.33 10.34 -8.66 9.68 -9 9 C-7.09301117 4.86819087 -4.98123405 3.09538634 -1 1 C-0.67 0.67 -0.34 0.34 0 0 Z \" fill=\"#2A2B2B\" transform=\"translate(443,278)\"\\/>\\r\\n<path d=\"M0 0 C2.71198863 0.67799716 4.51840541 1.37931132 6.2578125 3.62109375 C7.375 5.5 7.375 5.5 9 9 C8.67 9.66 8.34 10.32 8 11 C6.66375099 9.35653302 5.33107149 7.71016314 4 6.0625 C3.2575 5.14597656 2.515 4.22945313 1.75 3.28515625 C0 1 0 1 0 0 Z \" fill=\"#2F2E2D\" transform=\"translate(515,282)\"\\/>\\r\\n<path d=\"M0 0 C2.3125 0.0625 2.3125 0.0625 5 1 C6.875 4.4375 6.875 4.4375 8 8 C7.67 8.66 7.34 9.32 7 10 C6.34 10 5.68 10 5 10 C5 8.35 5 6.7 5 5 C3.68 4.67 2.36 4.34 1 4 C0.67 2.68 0.34 1.36 0 0 Z \" fill=\"#939494\" transform=\"translate(543,262)\"\\/>\\r\\n<path d=\"M0 0 C0.66 0.99 1.32 1.98 2 3 C1 5 0 7 -1 9 C-1.99 8.67 -2.98 8.34 -4 8 C-3.50168276 4.31245243 -2.89932357 2.39509338 0 0 Z \" fill=\"#646464\" transform=\"translate(374,552)\"\\/>\\r\\n<path d=\"M0 0 C0.66 0 1.32 0 2 0 C2 0.66 2 1.32 2 2 C1.34 2 0.68 2 0 2 C0 2.66 0 3.32 0 4 C-2.77972485 7.01136859 -5.64911741 9.64197151 -9 12 C-9.66 11.67 -10.32 11.34 -11 11 C-9.71451591 9.66070495 -8.42141845 8.32871357 -7.125 7 C-6.04605469 5.88625 -6.04605469 5.88625 -4.9453125 4.75 C-3 3 -3 3 -1 3 C-0.67 2.01 -0.34 1.02 0 0 Z \" fill=\"#808282\" transform=\"translate(531,529)\"\\/>\\r\\n<path d=\"M0 0 C-1.44077046 3.36179774 -3.24750021 5.59156268 -6 8 C-6.66 8 -7.32 8 -8 8 C-5.18918919 0 -5.18918919 0 0 0 Z \" fill=\"#323333\" transform=\"translate(475,454)\"\\/>\\r\\n<path d=\"M0 0 C1.32 0.33 2.64 0.66 4 1 C1.36 3.64 -1.28 6.28 -4 9 C-4.33 7.68 -4.66 6.36 -5 5 C-2.8125 2.1875 -2.8125 2.1875 0 0 Z \" fill=\"#5D5E5E\" transform=\"translate(450,428)\"\\/>\\r\\n<path d=\"M0 0 C-1.40844718 3.21524305 -3.10344786 5.32183868 -5.625 7.75 C-6.57246094 8.67039062 -6.57246094 8.67039062 -7.5390625 9.609375 C-8.02117187 10.06828125 -8.50328125 10.5271875 -9 11 C-9 7.25983417 -8.0658409 6.54723807 -5.625 3.8125 C-4.99851562 3.09707031 -4.37203125 2.38164062 -3.7265625 1.64453125 C-2 0 -2 0 0 0 Z \" fill=\"#2A2B2A\" transform=\"translate(516,413)\"\\/>\\r\\n<path d=\"M0 0 C1.875 0.1875 1.875 0.1875 4 1 C5.25 3.5625 5.25 3.5625 6 6 C5.01 6.495 5.01 6.495 4 7 C3.34 6.34 2.68 5.68 2 5 C1.01 5 0.02 5 -1 5 C-0.67 3.35 -0.34 1.7 0 0 Z \" fill=\"#727272\" transform=\"translate(485,309)\"\\/>\\r\\n<path d=\"M0 0 C0.66 0.99 1.32 1.98 2 3 C-3.625 8 -3.625 8 -7 8 C-5.61918777 3.8575633 -3.40174442 2.67796901 0 0 Z \" fill=\"#6B6D6C\" transform=\"translate(195,310)\"\\/>\\r\\n<path d=\"M0 0 C-1.39332574 3.36720387 -2.9789286 4.9859524 -6 7 C-6.66 6.34 -7.32 5.68 -8 5 C-7 2 -7 2 -5.125 0.8125 C-3 0 -3 0 0 0 Z \" fill=\"#5C5D5D\" transform=\"translate(422,300)\"\\/>\\r\\n<path d=\"M0 0 C0.33 0.66 0.66 1.32 1 2 C-0.68474722 5.36949443 -1.8191658 6.87944386 -5 9 C-5.66 8.34 -6.32 7.68 -7 7 C-5.54744301 3.17053157 -3.57104439 1.87949705 0 0 Z \" fill=\"#646565\" transform=\"translate(434,285)\"\\/>\\r\\n<path d=\"M0 0 C0 3.19633438 -0.33810135 4.34096216 -2 7 C-4.125 8.75 -4.125 8.75 -6 10 C-6 6 -6 6 -4.6875 4.296875 C-4.130625 3.78640625 -3.57375 3.2759375 -3 2.75 C-2.1646875 1.96882812 -2.1646875 1.96882812 -1.3125 1.171875 C-0.879375 0.78515625 -0.44625 0.3984375 0 0 Z \" fill=\"#5A5A5A\" transform=\"translate(290,214)\"\\/>\\r\\n<path d=\"M0 0 C2.1875 -0.3125 2.1875 -0.3125 5 0 C7.8125 2.5 7.8125 2.5 10 5 C9.67 5.66 9.34 6.32 9 7 C8.4225 6.484375 7.845 5.96875 7.25 5.4375 C5.12172477 3.73494807 5.12172477 3.73494807 2.75 4.3125 C2.1725 4.539375 1.595 4.76625 1 5 C0.67 3.35 0.34 1.7 0 0 Z \" fill=\"#737372\" transform=\"translate(379,199)\"\\/>\\r\\n<path d=\"M0 0 C1.32 0.33 2.64 0.66 4 1 C1.69 3.31 -0.62 5.62 -3 8 C-3.33 6.68 -3.66 5.36 -4 4 C-2.3125 1.6875 -2.3125 1.6875 0 0 Z \" fill=\"#616362\" transform=\"translate(409,469)\"\\/>\\r\\n<path d=\"M0 0 C1.65 0 3.3 0 5 0 C3.8141763 3.37503669 2.72426311 5.64722731 0 8 C-0.66 7.34 -1.32 6.68 -2 6 C-1.67 5.38125 -1.34 4.7625 -1 4.125 C0.14193235 2.08981656 0.14193235 2.08981656 0 0 Z \" fill=\"#595A5A\" transform=\"translate(547,375)\"\\/>\\r\\n<path d=\"M0 0 C0.33 0.66 0.66 1.32 1 2 C0.00390625 3.9453125 0.00390625 3.9453125 -1.4375 6.125 C-1.91058594 6.84945313 -2.38367188 7.57390625 -2.87109375 8.3203125 C-3.24363281 8.87460937 -3.61617187 9.42890625 -4 10 C-4.99 9.34 -5.98 8.68 -7 8 C-4.69 5.36 -2.38 2.72 0 0 Z \" fill=\"#373837\" transform=\"translate(557,366)\"\\/>\\r\\n<path d=\"M0 0 C-0.375 2.4375 -0.375 2.4375 -1 5 C-1.99 5.495 -1.99 5.495 -3 6 C-3.66 5.67 -4.32 5.34 -5 5 C-5 5.66 -5 6.32 -5 7 C-5.66 6.67 -6.32 6.34 -7 6 C-6.67 4.35 -6.34 2.7 -6 1 C-3 0 -3 0 0 0 Z \" fill=\"#8F8F8F\" transform=\"translate(306,199)\"\\/>\\r\\n<path d=\"M0 0 C1.8125 0.125 1.8125 0.125 4 1 C5.75 4.0625 5.75 4.0625 7 7 C6.34 7.66 5.68 8.32 5 9 C4.16094435 7.87926138 3.32892169 6.75325453 2.5 5.625 C2.0359375 4.99851563 1.571875 4.37203125 1.09375 3.7265625 C0 2 0 2 0 0 Z \" fill=\"#575757\" transform=\"translate(452,160)\"\\/>\\r\\n<path d=\"M0 0 C0.66 0.66 1.32 1.32 2 2 C1.8125 4 1.8125 4 1 6 C0.01 6.66 -0.98 7.32 -2 8 C-2.125 5.125 -2.125 5.125 -2 2 C-1.34 1.34 -0.68 0.68 0 0 Z M-4 8 C-3.34 8.33 -2.68 8.66 -2 9 C-2.99 9.99 -3.98 10.98 -5 12 C-5.66 11.67 -6.32 11.34 -7 11 C-6.01 10.01 -5.02 9.02 -4 8 Z \" fill=\"#E8E9E8\" transform=\"translate(248,81)\"\\/>\\r\\n<path d=\"M0 0 C4.29 0.66 8.58 1.32 13 2 C13 2.33 13 2.66 13 3 C11.39679026 3.19551338 9.79237014 3.38111983 8.1875 3.5625 C7.29417969 3.66691406 6.40085937 3.77132813 5.48046875 3.87890625 C3 4 3 4 0 3 C0 2.01 0 1.02 0 0 Z \" fill=\"#636564\" transform=\"translate(253,499)\"\\/>\\r\\n<path d=\"M0 0 C-1.26239712 0.86658615 -2.53527501 1.71792059 -3.8125 2.5625 C-4.87404297 3.27599609 -4.87404297 3.27599609 -5.95703125 4.00390625 C-8 5 -8 5 -11 4 C-7.51147246 0.16261971 -5.09041622 -1.48780432 0 0 Z \" fill=\"#323332\" transform=\"translate(332,491)\"\\/>\\r\\n<path d=\"M0 0 C0.66 0.99 1.32 1.98 2 3 C-0.31 4.98 -2.62 6.96 -5 9 C-5.33 8.01 -5.66 7.02 -6 6 C-4.71034824 4.62437146 -3.37310707 3.29233607 -2 2 C-1.34 2 -0.68 2 0 2 C0 1.34 0 0.68 0 0 Z \" fill=\"#535354\" transform=\"translate(466,460)\"\\/>\\r\\n<path d=\"M0 0 C3.39417765 3.12621626 5.6062718 5.56541027 7 10 C6.34 10 5.68 10 5 10 C4.67 10.66 4.34 11.32 4 12 C3.54625 10.9275 3.0925 9.855 2.625 8.75 C1.49911463 6.11937683 0.32079794 3.53999604 -1 1 C-0.67 0.67 -0.34 0.34 0 0 Z \" fill=\"#8E8F8F\" transform=\"translate(560,286)\"\\/>\\r\\n<path d=\"M0 0 C1.65 0 3.3 0 5 0 C2.24865461 2.95514876 -0.39733775 5.1524809 -4 7 C-4.99 7 -5.98 7 -7 7 C-5.71034824 5.62437146 -4.37310707 4.29233607 -3 3 C-2.34 3 -1.68 3 -1 3 C-0.67 2.01 -0.34 1.02 0 0 Z \" fill=\"#585959\" transform=\"translate(445,274)\"\\/>\\r\\n<path d=\"M0 0 C4.2742558 1.5830577 6.26531794 4.50568404 9 8 C6 8 6 8 4.39453125 6.7578125 C3.87246094 6.21898437 3.35039062 5.68015625 2.8125 5.125 C2.28269531 4.59132813 1.75289063 4.05765625 1.20703125 3.5078125 C0 2 0 2 0 0 Z \" fill=\"#5B5C5C\" transform=\"translate(386,622)\"\\/>\\r\\n<path d=\"M0 0 C2.46800047 1.15173355 4.04783565 2.04783565 6 4 C5.67 5.32 5.34 6.64 5 8 C3.02 5.69 1.04 3.38 -1 1 C-0.67 0.67 -0.34 0.34 0 0 Z \" fill=\"#575858\" transform=\"translate(373,560)\"\\/>\\r\\n<path d=\"M0 0 C0.66 0 1.32 0 2 0 C1.34 4.29 0.68 8.58 0 13 C-2 11 -2 11 -2.01171875 8.90625 C-1.90472656 8.1121875 -1.79773438 7.318125 -1.6875 6.5 C-1.58824219 5.7059375 -1.48898437 4.911875 -1.38671875 4.09375 C-1 2 -1 2 0 0 Z \" fill=\"#0C0D0D\" transform=\"translate(265,408)\"\\/>\\r\\n<path d=\"M0 0 C0.33 1.32 0.66 2.64 1 4 C-1.97 6.475 -1.97 6.475 -5 9 C-5 5 -5 5 -2.5 2.25 C-1.675 1.5075 -0.85 0.765 0 0 Z \" fill=\"#505050\" transform=\"translate(430,345)\"\\/>\\r\\n<path d=\"M0 0 C0.99 0 1.98 0 3 0 C1.55746343 3.36591866 -0.33264727 5.51047079 -3 8 C-3.66 7.67 -4.32 7.34 -5 7 C-1.125 1.125 -1.125 1.125 0 0 Z \" fill=\"#403F40\" transform=\"translate(335,277)\"\\/>\\r\\n<path d=\"M0 0 C1.9375 0.3125 1.9375 0.3125 4 1 C5.28317892 4.84953676 5.06643637 7.94738135 5 12 C4.67 12 4.34 12 4 12 C2.66666667 8 1.33333333 4 0 0 Z \" fill=\"#333435\" transform=\"translate(387,205)\"\\/>\\r\\n<path d=\"M0 0 C0.99 0.33 1.98 0.66 3 1 C0.69 3.64 -1.62 6.28 -4 9 C-4.66 8.67 -5.32 8.34 -6 8 C-4.26440562 4.942048 -2.61527381 2.36620011 0 0 Z \" fill=\"#4C4C4C\" transform=\"translate(381,497)\"\\/>\\r\\n<path d=\"M0 0 C0.33 0 0.66 0 1 0 C1.33 4.29 1.66 8.58 2 13 C1.01 13.495 1.01 13.495 0 14 C-0.77916092 8.97874074 -1.13016601 5.02296004 0 0 Z \" fill=\"#454646\" transform=\"translate(191,425)\"\\/>\\r\\n<path d=\"M0 0 C0 3 0 3 -1.8125 5.125 C-4 7 -4 7 -7 8 C-5.98823563 4.59679258 -5.35156418 3.24274669 -2.375 1.1875 C-1.59125 0.795625 -0.8075 0.40375 0 0 Z \" fill=\"#444546\" transform=\"translate(237,377)\"\\/>\\r\\n<path d=\"M0 0 C3.28788824 3.11016455 5.83735988 6.01618925 8 10 C4.72847271 9.02738378 3.25454871 8.34232413 1.1875 5.5625 C0 3 0 3 0 0 Z \" fill=\"#262626\" transform=\"translate(550,267)\"\\/>\\r\\n<path d=\"M0 0 C-1.26941497 3.91402949 -2.51167694 5.79072873 -6 8 C-6.33 7.01 -6.66 6.02 -7 5 C-2.25 0 -2.25 0 0 0 Z \" fill=\"#5A5A5B\" transform=\"translate(417,256)\"\\/>\\r\\n<path d=\"M0 0 C2.08326131 -0.02709444 4.16662441 -0.04643873 6.25 -0.0625 C7.41015625 -0.07410156 8.5703125 -0.08570313 9.765625 -0.09765625 C12.40977128 -0.01782092 14.49826091 0.21356222 17 1 C16.67 1.99 16.34 2.98 16 4 C15.46890625 3.68289062 14.9378125 3.36578125 14.390625 3.0390625 C11.45464152 1.7629651 8.93825671 1.58292979 5.75 1.375 C4.67234375 1.30023438 3.5946875 1.22546875 2.484375 1.1484375 C1.25460937 1.07496094 1.25460937 1.07496094 0 1 C0 0.67 0 0.34 0 0 Z \" fill=\"#CACAC9\" transform=\"translate(472,231)\"\\/>\\r\\n<path d=\"M0 0 C5.02254631 -0.2954439 7.89542386 0.01485372 12 3 C8.52128379 4.15957207 7.65780355 3.77456651 4.3125 2.5625 C3.50425781 2.27503906 2.69601562 1.98757812 1.86328125 1.69140625 C1.24839844 1.46324219 0.63351562 1.23507813 0 1 C0 0.67 0 0.34 0 0 Z \" fill=\"#1D1E1F\" transform=\"translate(371,196)\"\\/>\\r\\n<path d=\"M0 0 C2.125 0.9375 2.125 0.9375 4 2 C3.360625 2.12375 2.72125 2.2475 2.0625 2.375 C1.381875 2.58125 0.70125 2.7875 0 3 C-0.33 3.66 -0.66 4.32 -1 5 C-3.0625 5.625 -3.0625 5.625 -5 6 C-2.25 1.125 -2.25 1.125 0 0 Z \" fill=\"#636363\" transform=\"translate(337,124)\"\\/>\\r\\n<path d=\"M0 0 C1.98 0 3.96 0 6 0 C6 0.99 6 1.98 6 3 C3.1875 4.125 3.1875 4.125 0 5 C-0.99 4.34 -1.98 3.68 -3 3 C-2.01 2.34 -1.02 1.68 0 1 C0 0.67 0 0.34 0 0 Z \" fill=\"#676868\" transform=\"translate(316,494)\"\\/>\\r\\n<path d=\"M0 0 C3.25543229 0.34879632 4.01873107 1.02133261 6.25 3.5625 C6.8275 4.366875 7.405 5.17125 8 6 C5.21788056 5.62403791 3.4120716 5.32681541 1.1875 3.5625 C0 2 0 2 0 0 Z \" fill=\"#494948\" transform=\"translate(210,472)\"\\/>\\r\\n<path d=\"M0 0 C0.598125 0.226875 1.19625 0.45375 1.8125 0.6875 C0.18910195 2.39634005 -1.48069053 4.06196717 -3.1875 5.6875 C-3.8475 5.6875 -4.5075 5.6875 -5.1875 5.6875 C-5.5175 6.3475 -5.8475 7.0075 -6.1875 7.6875 C-5.82037028 4.97074005 -5.46005401 3.07686287 -3.875 0.8125 C-2.1875 -0.3125 -2.1875 -0.3125 0 0 Z \" fill=\"#4B4C4C\" transform=\"translate(506.1875,374.3125)\"\\/>\\r\\n<path d=\"M0 0 C0 3 0 3 -2.5 5.6875 C-3.325 6.450625 -4.15 7.21375 -5 8 C-5.66 7.67 -6.32 7.34 -7 7 C-3.375 1.125 -3.375 1.125 0 0 Z \" fill=\"#2A2A2A\" transform=\"translate(472,349)\"\\/>\\r\\n<path d=\"M0 0 C1.98 0.495 1.98 0.495 4 1 C4 3.64 4 6.28 4 9 C3.01 8.34 2.02 7.68 1 7 C1 6.01 1 5.02 1 4 C0.34 3.67 -0.32 3.34 -1 3 C-0.67 2.01 -0.34 1.02 0 0 Z \" fill=\"#F4F5F4\" transform=\"translate(565,318)\"\\/>\\r\\n<path d=\"M0 0 C0.66 0.99 1.32 1.98 2 3 C-2.625 7 -2.625 7 -6 7 C-6 6.34 -6 5.68 -6 5 C-4.04072937 3.2856382 -2.04119788 1.61594832 0 0 Z \" fill=\"#666565\" transform=\"translate(318,294)\"\\/>\\r\\n<path d=\"M0 0 C0.66 0 1.32 0 2 0 C2.26218749 3.14624993 2.24754367 4.61837017 0.5 7.3125 C-0.2425 8.1478125 -0.2425 8.1478125 -1 9 C-1.66 6.69 -2.32 4.38 -3 2 C-2.01 2 -1.02 2 0 2 C0 1.34 0 0.68 0 0 Z \" fill=\"#686868\" transform=\"translate(430,190)\"\\/>\\r\\n<path d=\"M0 0 C3.7952131 1.49097658 5.61042731 3.75700849 8 7 C5 7 5 7 2.3125 4.625 C0 2 0 2 0 0 Z \" fill=\"#717374\" transform=\"translate(394,630)\"\\/>\\r\\n<path d=\"M0 0 C2.0625 1.6875 2.0625 1.6875 4 4 C3.75 6.75 3.75 6.75 3 9 C2.67 7.68 2.34 6.36 2 5 C1.34 5 0.68 5 0 5 C-0.66 3.68 -1.32 2.36 -2 1 C-1.34 0.67 -0.68 0.34 0 0 Z \" fill=\"#848585\" transform=\"translate(410,597)\"\\/>\\r\\n<path d=\"M0 0 C1.875 0.25 1.875 0.25 4 1 C5.25 3.0625 5.25 3.0625 6 5 C4.35 5 2.7 5 1 5 C0.67 3.35 0.34 1.7 0 0 Z \" fill=\"#606161\" transform=\"translate(404,593)\"\\/>\\r\\n<path d=\"M0 0 C2.64 0.33 5.28 0.66 8 1 C8.33 1.99 8.66 2.98 9 4 C3.46153846 3.38461538 3.46153846 3.38461538 1.125 1.4375 C0.75375 0.963125 0.3825 0.48875 0 0 Z \" fill=\"#2D2E2D\" transform=\"translate(244,497)\"\\/>\\r\\n<path d=\"M0 0 C3.68754757 0.49831724 5.60490662 1.10067643 8 4 C7.34 4.66 6.68 5.32 6 6 C3.97945196 4.35830472 1.97956942 2.69088222 0 1 C0 0.67 0 0.34 0 0 Z \" fill=\"#3F4040\" transform=\"translate(222,484)\"\\/>\\r\\n<path d=\"M0 0 C0.33 1.32 0.66 2.64 1 4 C-1.97 6.475 -1.97 6.475 -5 9 C-5 4.61031544 -2.87194899 3.23094261 0 0 Z \" fill=\"#50504F\" transform=\"translate(444,434)\"\\/>\\r\\n<path d=\"M0 0 C0.33 0.66 0.66 1.32 1 2 C-0.98 4.31 -2.96 6.62 -5 9 C-5.66 8.34 -6.32 7.68 -7 7 C-4.69 4.69 -2.38 2.38 0 0 Z \" fill=\"#232424\" transform=\"translate(409,367)\"\\/>\\r\\n<path d=\"M0 0 C-0.57344937 2.86724686 -0.8614515 3.8614515 -3 6 C-5.125 5.625 -5.125 5.625 -7 5 C-2.25 0 -2.25 0 0 0 Z \" fill=\"#4B4A4A\" transform=\"translate(444,333)\"\\/>\\r\\n<path d=\"M0 0 C0.99 0 1.98 0 3 0 C2.67 1.65 2.34 3.3 2 5 C0.02 5 -1.96 5 -4 5 C-2.1875 2.5 -2.1875 2.5 0 0 Z \" fill=\"#545556\" transform=\"translate(290,273)\"\\/>\\r\\n<path d=\"M0 0 C0.66 0.33 1.32 0.66 2 1 C0.02 2.98 -1.96 4.96 -4 7 C-4.99 6.67 -5.98 6.34 -7 6 C-5.01180815 3.01771223 -3.42353587 1.21480305 0 0 Z \" fill=\"#292A2A\" transform=\"translate(264,242)\"\\/>\\r\\n<path d=\"M0 0 C-0.1875 1.8125 -0.1875 1.8125 -1 4 C-3.4375 5.8125 -3.4375 5.8125 -6 7 C-6.66 6.67 -7.32 6.34 -8 6 C-7.0479279 4.99403703 -6.08812654 3.99538437 -5.125 3 C-4.59132813 2.443125 -4.05765625 1.88625 -3.5078125 1.3125 C-2 0 -2 0 0 0 Z \" fill=\"#393A3A\" transform=\"translate(327,238)\"\\/>\\r\\n<path d=\"M0 0 C0.66 0.33 1.32 0.66 2 1 C-0.75 5.875 -0.75 5.875 -3 7 C-3.66 6.34 -4.32 5.68 -5 5 C-3.35 3.35 -1.7 1.7 0 0 Z \" fill=\"#5D5C5C\" transform=\"translate(417,509)\"\\/>\\r\\n<path d=\"M0 0 C-1.01454452 2.5363613 -1.6853556 3.79351461 -4 5.3125 C-4.66 5.539375 -5.32 5.76625 -6 6 C-6.66 5.67 -7.32 5.34 -8 5 C-2.25 0 -2.25 0 0 0 Z \" fill=\"#494948\" transform=\"translate(433,496)\"\\/>\\r\\n<path d=\"M0 0 C3.82946843 1.45255699 5.12050295 3.42895561 7 7 C6.01 7.33 5.02 7.66 4 8 C0 2.25 0 2.25 0 0 Z \" fill=\"#303030\" transform=\"translate(205,465)\"\\/>\\r\\n<path d=\"M0 0 C0.86625 0.556875 0.86625 0.556875 1.75 1.125 C-4 4.125 -4 4.125 -6.25 4.125 C-6.25 3.135 -6.25 2.145 -6.25 1.125 C-2.80384615 -1.09038462 -2.80384615 -1.09038462 0 0 Z \" fill=\"#515252\" transform=\"translate(311.25,463.875)\"\\/>\\r\\n<path d=\"M0 0 C0 0.66 0 1.32 0 2 C-2.90548882 4.04169485 -4.40142046 5 -8 5 C-8 4.34 -8 3.68 -8 3 C-5.09451118 0.95830515 -3.59857954 0 0 0 Z \" fill=\"#363837\" transform=\"translate(319,459)\"\\/>\\r\\n<path d=\"M0 0 C0 0.99 0 1.98 0 3 C-0.66 3 -1.32 3 -2 3 C-2.33 3.99 -2.66 4.98 -3 6 C-4.32 5.67 -5.64 5.34 -7 5 C-2.25 0 -2.25 0 0 0 Z \" fill=\"#363636\" transform=\"translate(356,422)\"\\/>\\r\\n<path d=\"M0 0 C0.66 0.33 1.32 0.66 2 1 C1 4 1 4 -1.375 5.3125 C-2.24125 5.539375 -3.1075 5.76625 -4 6 C-4.99 5.34 -5.98 4.68 -7 4 C-6.030625 3.525625 -5.06125 3.05125 -4.0625 2.5625 C-1.19522563 1.29806053 -1.19522563 1.29806053 0 0 Z \" fill=\"#585959\" transform=\"translate(136,369)\"\\/>\\r\\n<path d=\"M0 0 C2.78211944 0.37596209 4.5879284 0.67318459 6.8125 2.4375 C8 4 8 4 8 6 C4.08597051 4.73058503 2.20927127 3.48832306 0 0 Z \" fill=\"#383839\" transform=\"translate(416,126)\"\\/>\\r\\n<path d=\"M0 0 C0.33 1.32 0.66 2.64 1 4 C-0.98 4.66 -2.96 5.32 -5 6 C-5.33 4.68 -5.66 3.36 -6 2 C-4.7934375 1.7834375 -4.7934375 1.7834375 -3.5625 1.5625 C-1.07896294 1.25864751 -1.07896294 1.25864751 0 0 Z \" fill=\"#AAAAA7\" transform=\"translate(434,492)\"\\/>\\r\\n<path d=\"M0 0 C3.35595828 0.59927826 5.37801226 1.84622436 8 4 C6.25 4.6875 6.25 4.6875 4 5 C1.75 3.6875 1.75 3.6875 0 2 C0 1.34 0 0.68 0 0 Z \" fill=\"#5D5E5D\" transform=\"translate(229,488)\"\\/>\\r\\n<path d=\"M0 0 C1.32 0.33 2.64 0.66 4 1 C0.535 3.97 0.535 3.97 -3 7 C-1.125 1.125 -1.125 1.125 0 0 Z \" fill=\"#2D2E2E\" transform=\"translate(490,436)\"\\/>\\r\\n<path d=\"M0 0 C-0.625 1.875 -0.625 1.875 -2 4 C-5.125 5.25 -5.125 5.25 -8 6 C-3.375 0 -3.375 0 0 0 Z \" fill=\"#5B5B5B\" transform=\"translate(363,358)\"\\/>\\r\\n<path d=\"M0 0 C0 3.12900213 -0.42451317 4.37418862 -2 7 C-2.99 7.495 -2.99 7.495 -4 8 C-4.66 7.34 -5.32 6.68 -6 6 C-5.01 5.67 -4.02 5.34 -3 5 C-1.8499169 3.03327085 -1.8499169 3.03327085 -1 1 C-0.67 0.67 -0.34 0.34 0 0 Z \" fill=\"#676868\" transform=\"translate(331,281)\"\\/>\\r\\n<path d=\"M0 0 C2.31 1.65 4.62 3.3 7 5 C6.67 5.66 6.34 6.32 6 7 C4.02 6.01 2.04 5.02 0 4 C0 2.68 0 1.36 0 0 Z \" fill=\"#666767\" transform=\"translate(511,276)\"\\/>\\r\\n<path d=\"M0 0 C0.66 0 1.32 0 2 0 C1.60196439 2.88575819 1.20990931 3.82189513 -1.0625 5.75 C-1.701875 6.1625 -2.34125 6.575 -3 7 C-2.25 2.25 -2.25 2.25 0 0 Z \" fill=\"#515251\" transform=\"translate(311,252)\"\\/>\\r\\n<path d=\"M0 0 C0.66 0.99 1.32 1.98 2 3 C1.01 4.485 1.01 4.485 0 6 C-2.625 6.1875 -2.625 6.1875 -5 6 C-3.35 4.02 -1.7 2.04 0 0 Z \" fill=\"#777879\" transform=\"translate(380,232)\"\\/>\\r\\n<path d=\"M0 0 C3.87132028 0.57352893 6.08172796 2.48704352 9 5 C8.01 5.33 7.02 5.66 6 6 C2.8125 3.625 2.8125 3.625 0 1 C0 0.67 0 0.34 0 0 Z \" fill=\"#474849\" transform=\"translate(429,619)\"\\/>\\r\\n<path d=\"M0 0 C-0.3125 1.875 -0.3125 1.875 -1 4 C-1.99 4.66 -2.98 5.32 -4 6 C-4.66 5.34 -5.32 4.68 -6 4 C-2.25 0 -2.25 0 0 0 Z \" fill=\"#606060\" transform=\"translate(461,467)\"\\/>\\r\\n<path d=\"M0 0 C0.66 0.99 1.32 1.98 2 3 C0.6875 4.5 0.6875 4.5 -1 6 C-1.99 6 -2.98 6 -4 6 C-2.84826645 3.53199953 -1.95216435 1.95216435 0 0 Z \" fill=\"#605F60\" transform=\"translate(496,430)\"\\/>\\r\\n<path d=\"M0 0 C1 2 1 2 0.375 4.0625 C-1 6 -1 6 -3.625 6.75 C-4.800625 6.87375 -4.800625 6.87375 -6 7 C-4.02 4.69 -2.04 2.38 0 0 Z \" fill=\"#646565\" transform=\"translate(301,416)\"\\/>\\r\\n<path d=\"M0 0 C-1.39332574 3.36720387 -2.9789286 4.9859524 -6 7 C-6 4 -6 4 -4.125 1.8125 C-2 0 -2 0 0 0 Z \" fill=\"#1F2020\" transform=\"translate(315,359)\"\\/>\\r\\n<path d=\"M0 0 C0.99 0 1.98 0 3 0 C2.25 1.9375 2.25 1.9375 1 4 C-1.125 4.75 -1.125 4.75 -3 5 C-1.125 1.125 -1.125 1.125 0 0 Z \" fill=\"#484948\" transform=\"translate(258,354)\"\\/>\\r\\n<path d=\"M0 0 C0.99 0.33 1.98 0.66 3 1 C0.16569547 4.2542015 -1.68607774 5.5206753 -6 6 C-4 4 -2 2 0 0 Z \" fill=\"#454544\" transform=\"translate(170,336)\"\\/>\\r\\n<path d=\"M0 0 C0.99 0 1.98 0 3 0 C1.63016497 3.16115776 1.0109362 3.9927092 -2 6 C-2.33 5.34 -2.66 4.68 -3 4 C-1.6875 2 -1.6875 2 0 0 Z \" fill=\"#303130\" transform=\"translate(395,324)\"\\/>\\r\\n<path d=\"M0 0 C0 3 0 3 -1.375 4.6875 C-3 6 -3 6 -5 6 C-4.75 4.125 -4.75 4.125 -4 2 C-1.9375 0.75 -1.9375 0.75 0 0 Z \" fill=\"#3B3C3C\" transform=\"translate(201,306)\"\\/>\\r\\n<path d=\"M0 0 C2.52259061 1.97420135 2.9929808 2.96745642 3.6875 6.1875 C3.790625 7.115625 3.89375 8.04375 4 9 C0.06153846 5.67692308 0.06153846 5.67692308 -0.25 2.25 C-0.1675 1.5075 -0.085 0.765 0 0 Z \" fill=\"#5B5C5C\" transform=\"translate(523,289)\"\\/>\\r\\n<path d=\"M0 0 C0.33 0.99 0.66 1.98 1 3 C-0.32 4.32 -1.64 5.64 -3 7 C-3.66 6.34 -4.32 5.68 -5 5 C-3.35 3.35 -1.7 1.7 0 0 Z \" fill=\"#353435\" transform=\"translate(307,256)\"\\/>\\r\\n<path d=\"M0 0 C1.9375 0.75 1.9375 0.75 4 2 C4.75 4.125 4.75 4.125 5 6 C4.01 6 3.02 6 2 6 C1.34 4.02 0.68 2.04 0 0 Z \" fill=\"#2F2F2F\" transform=\"translate(424,186)\"\\/>\\r\\n<path d=\"M0 0 C1.875 1.25 1.875 1.25 2.875 4.25 C1.885 4.25 0.895 4.25 -0.125 4.25 C-0.785 3.59 -1.445 2.93 -2.125 2.25 C-3.115 1.59 -4.105 0.93 -5.125 0.25 C-2.125 -0.75 -2.125 -0.75 0 0 Z \" fill=\"#8F8F8F\" transform=\"translate(415.125,124.75)\"\\/>\\r\\n<path d=\"M0 0 C0 0.66 0 1.32 0 2 C-2.97 2 -5.94 2 -9 2 C-5.96271914 -1.03728086 -4.06215635 -1.35405212 0 0 Z \" fill=\"#343434\" transform=\"translate(363,117)\"\\/>\\r\\n<path d=\"M0 0 C0.66 0.66 1.32 1.32 2 2 C-0.54702616 3.27351308 -1.4282945 2.80191925 -4.125 2.0625 C-4.84945313 1.86785156 -5.57390625 1.67320313 -6.3203125 1.47265625 C-6.87460937 1.31667969 -7.42890625 1.16070312 -8 1 C-4.9553071 -0.84856355 -3.35670253 -1.34268101 0 0 Z \" fill=\"#636364\" transform=\"translate(391,117)\"\\/>\\r\\n<path d=\"M0 0 C0.66 0.33 1.32 0.66 2 1 C-0.31 3.64 -2.62 6.28 -5 9 C-5 5.47967572 -4.29648649 4.5614657 -2 2 C-1.34 2 -0.68 2 0 2 C0 1.34 0 0.68 0 0 Z \" fill=\"#A0A1A1\" transform=\"translate(232,99)\"\\/>\\r\\n<path d=\"M0 0 C2.475 0.495 2.475 0.495 5 1 C5.33 2.65 5.66 4.3 6 6 C3.97945196 4.35830472 1.97956942 2.69088222 0 1 C0 0.67 0 0.34 0 0 Z \" fill=\"#616262\" transform=\"translate(417,607)\"\\/>\\r\\n<path d=\"M0 0 C3.36720387 1.39332574 4.9859524 2.9789286 7 6 C6.01 6 5.02 6 4 6 C4 5.34 4 4.68 4 4 C2.68 3.34 1.36 2.68 0 2 C0 1.34 0 0.68 0 0 Z \" fill=\"#959695\" transform=\"translate(240,603)\"\\/>\\r\\n<path d=\"M0 0 C2.1875 0.3125 2.1875 0.3125 4 1 C2.35 2.32 0.7 3.64 -1 5 C-1.66 4.34 -2.32 3.68 -3 3 C-1.75 1.4375 -1.75 1.4375 0 0 Z \" fill=\"#474946\" transform=\"translate(384,542)\"\\/>\\r\\n<path d=\"M0 0 C-1.36983503 3.16115776 -1.9890638 3.9927092 -5 6 C-5 4.68 -5 3.36 -5 2 C-2 0 -2 0 0 0 Z \" fill=\"#313132\" transform=\"translate(414,515)\"\\/>\\r\\n<path d=\"M0 0 C-1.15173355 2.46800047 -2.04783565 4.04783565 -4 6 C-4.99 5.67 -5.98 5.34 -7 5 C-2.25 0 -2.25 0 0 0 Z \" fill=\"#2F3030\" transform=\"translate(389,491)\"\\/>\\r\\n<path d=\"M0 0 C0 0.99 0 1.98 0 3 C-2.31 3.33 -4.62 3.66 -7 4 C-3.375 0 -3.375 0 0 0 Z \" fill=\"#515352\" transform=\"translate(297,469)\"\\/>\\r\\n<path d=\"M0 0 C-1 1.5625 -1 1.5625 -3 3 C-5.76614782 2.96726452 -8.26030547 2.49404328 -11 2 C-7.36576791 -0.32590854 -4.22911669 -0.16265833 0 0 Z \" fill=\"#808181\" transform=\"translate(275,470)\"\\/>\\r\\n<path d=\"M0 0 C0.66 0.99 1.32 1.98 2 3 C0.35 4.32 -1.3 5.64 -3 7 C-2.25 2.25 -2.25 2.25 0 0 Z \" fill=\"#515252\" transform=\"translate(410,410)\"\\/>\\r\\n<path d=\"M0 0 C-1.15173355 2.46800047 -2.04783565 4.04783565 -4 6 C-4.99 5.67 -5.98 5.34 -7 5 C-2.25 0 -2.25 0 0 0 Z \" fill=\"#3A3A39\" transform=\"translate(309,365)\"\\/>\\r\\n<path d=\"M0 0 C0.33 0.66 0.66 1.32 1 2 C1.66 2.33 2.32 2.66 3 3 C2.1028125 3.1546875 2.1028125 3.1546875 1.1875 3.3125 C-1.28243264 4.08876455 -2.32251235 5.07088921 -4 7 C-4 4 -4 4 -2 1.8125 C-1.34 1.214375 -0.68 0.61625 0 0 Z \" fill=\"#B5B4B4\" transform=\"translate(158,297)\"\\/>\\r\\n<path d=\"M0 0 C-1.36983503 3.16115776 -1.9890638 3.9927092 -5 6 C-5.33 5.34 -5.66 4.68 -6 4 C-2.25 0 -2.25 0 0 0 Z \" fill=\"#343535\" transform=\"translate(371,244)\"\\/>\\r\\n<path d=\"M0 0 C0.66 0.33 1.32 0.66 2 1 C1 4 1 4 -2 6 C-2.99 5.67 -3.98 5.34 -5 5 C-3.35 3.35 -1.7 1.7 0 0 Z \" fill=\"#454545\" transform=\"translate(320,136)\"\\/>\\r\\n<path d=\"M0 0 C2.0625 0.4375 2.0625 0.4375 4 1 C-0.75 5.875 -0.75 5.875 -3 7 C-1.125 1.125 -1.125 1.125 0 0 Z \" fill=\"#AEB0AF\" transform=\"translate(243,86)\"\\/>\\r\\n<path d=\"M0 0 C1.65 0 3.3 0 5 0 C4.34 1.32 3.68 2.64 3 4 C2.01 4 1.02 4 0 4 C0.33 3.34 0.66 2.68 1 2 C0.67 1.67 0.34 1.34 0 1 C0 0.67 0 0.34 0 0 Z \" fill=\"#FFFFFF\" transform=\"translate(220,278)\"\\/>\\r\\n<path d=\"M0 0 C0.66 0.33 1.32 0.66 2 1 C2.625 3.0625 2.625 3.0625 3 5 C1.68 4.34 0.36 3.68 -1 3 C-0.67 2.01 -0.34 1.02 0 0 Z \" fill=\"#F7F7F7\" transform=\"translate(557,351)\"\\/>\\r\\n<path d=\"M0 0 C0.99 0.33 1.98 0.66 3 1 C2.01 2.485 2.01 2.485 1 4 C0.34 4 -0.32 4 -1 4 C-0.67 2.68 -0.34 1.36 0 0 Z \" fill=\"#FAFAFA\" transform=\"translate(293,206)\"\\/>\\r\\n<path d=\"M0 0 C2 3 2 3 2 7 C1.34 6.67 0.68 6.34 0 6 C0 4.02 0 2.04 0 0 Z \" fill=\"#EBEBEB\" transform=\"translate(564,303)\"\\/>\\r\\n<path d=\"M0 0 C0.99 0.33 1.98 0.66 3 1 C2.67 1.66 2.34 2.32 2 3 C1.34 2.67 0.68 2.34 0 2 C-0.33 2.66 -0.66 3.32 -1 4 C-0.67 2.68 -0.34 1.36 0 0 Z \" fill=\"#FAFAFA\" transform=\"translate(197,302)\"\\/>\\r\\n<path d=\"M0 0 C0.99 0.33 1.98 0.66 3 1 C3 1.99 3 2.98 3 4 C2.01 4.33 1.02 4.66 0 5 C0 3.35 0 1.7 0 0 Z \" fill=\"#F9F9F9\" transform=\"translate(228,270)\"\\/>\\r\\n<path d=\"M0 0 C2.475 0.495 2.475 0.495 5 1 C4.34 1.66 3.68 2.32 3 3 C2.01 2.67 1.02 2.34 0 2 C0 1.34 0 0.68 0 0 Z \" fill=\"#E6EDE6\" transform=\"translate(492,235)\"\\/>\\r\\n<path d=\"M0 0 C0.99 0.33 1.98 0.66 3 1 C2.01 2.32 1.02 3.64 0 5 C0 3.35 0 1.7 0 0 Z \" fill=\"#F2F2F2\" transform=\"translate(460,222)\"\\/>\\r\\n<path d=\"M0 0 C1.5625 1.8125 1.5625 1.8125 3 4 C2.67 4.99 2.34 5.98 2 7 C0 4 0 4 0 0 Z \" fill=\"#F9F9F9\" transform=\"translate(444,151)\"\\/>\\r\\n<path d=\"M0 0 C1.98 0.495 1.98 0.495 4 1 C2.02 1.99 2.02 1.99 0 3 C0 2.01 0 1.02 0 0 Z \" fill=\"#FFFFF7\" transform=\"translate(443,478)\"\\/>\\r\\n<path d=\"M0 0 C1.32 0 2.64 0 4 0 C4 0.66 4 1.32 4 2 C2.68 2 1.36 2 0 2 C0 1.34 0 0.68 0 0 Z \" fill=\"#F8F8F8\" transform=\"translate(284,426)\"\\/>\\r\\n<path d=\"M0 0 C0.66 0.66 1.32 1.32 2 2 C0.02 2.99 0.02 2.99 -2 4 C-2.33 3.34 -2.66 2.68 -3 2 C-2.01 2 -1.02 2 0 2 C0 1.34 0 0.68 0 0 Z \" fill=\"#F8FFFF\" transform=\"translate(487,327)\"\\/>\\r\\n<path d=\"M0 0 C1.485 0.99 1.485 0.99 3 2 C2.67 2.66 2.34 3.32 2 4 C1.01 3.67 0.02 3.34 -1 3 C-0.67 2.01 -0.34 1.02 0 0 Z \" fill=\"#F7F7EF\" transform=\"translate(341,262)\"\\/>\\r\\n<path d=\"M0 0 C0.66 0.33 1.32 0.66 2 1 C1.34 2.32 0.68 3.64 0 5 C-0.33 4.34 -0.66 3.68 -1 3 C-0.67 2.01 -0.34 1.02 0 0 Z \" fill=\"#FAFAFA\" transform=\"translate(325,174)\"\\/>\\r\\n<path d=\"M0 0 C1.65 0 3.3 0 5 0 C4.34 0.66 3.68 1.32 3 2 C2.01 1.67 1.02 1.34 0 1 C0 0.67 0 0.34 0 0 Z \" fill=\"#EEEEEE\" transform=\"translate(378,542)\"\\/>\\r\\n<path d=\"M0 0 C1.65 0 3.3 0 5 0 C4.67 0.66 4.34 1.32 4 2 C2.68 1.34 1.36 0.68 0 0 Z \" fill=\"#E9E9E9\" transform=\"translate(322,390)\"\\/>\\r\\n<path d=\"M0 0 C0.99 0.33 1.98 0.66 3 1 C2.01 1.66 1.02 2.32 0 3 C0 2.01 0 1.02 0 0 Z \" fill=\"#F6F6EE\" transform=\"translate(372,550)\"\\/>\\r\\n<path d=\"M0 0 C0.99 0.33 1.98 0.66 3 1 C2.01 1.66 1.02 2.32 0 3 C0 2.01 0 1.02 0 0 Z \" fill=\"#ECECEC\" transform=\"translate(492,430)\"\\/>\\r\\n<path d=\"M0 0 C0.99 0.33 1.98 0.66 3 1 C2.01 1.66 1.02 2.32 0 3 C0 2.01 0 1.02 0 0 Z \" fill=\"#F1F1F1\" transform=\"translate(315,398)\"\\/>\\r\\n<path d=\"M0 0 C0.66 0 1.32 0 2 0 C2 0.99 2 1.98 2 3 C1.34 3 0.68 3 0 3 C0 2.01 0 1.02 0 0 Z \" fill=\"#F9F9F9\" transform=\"translate(340,373)\"\\/>\\r\\n<path d=\"M0 0 C0.66 0.33 1.32 0.66 2 1 C0.02 1.99 0.02 1.99 -2 3 C-1.34 2.01 -0.68 1.02 0 0 Z \" fill=\"#EAEAEA\" transform=\"translate(150,352)\"\\/>\\r\\n<path d=\"M0 0 C0.33 0 0.66 0 1 0 C1 1.98 1 3.96 1 6 C0.67 6 0.34 6 0 6 C0 4.02 0 2.04 0 0 Z \" fill=\"#F8F8F8\" transform=\"translate(0,349)\"\\/>\\r\\n<path d=\"M0 0 C0.66 0 1.32 0 2 0 C2 0.66 2 1.32 2 2 C1.01 2.33 0.02 2.66 -1 3 C-0.67 2.01 -0.34 1.02 0 0 Z \" fill=\"#F8F8F8\" transform=\"translate(286,318)\"\\/>\\r\\n<path d=\"M0 0 C0.99 0.33 1.98 0.66 3 1 C3 1.66 3 2.32 3 3 C2.34 3 1.68 3 1 3 C0.67 2.01 0.34 1.02 0 0 Z \" fill=\"#FFFFFF\" transform=\"translate(292,314)\"\\/>\\r\\n<path d=\"M0 0 C0.66 0.33 1.32 0.66 2 1 C2 1.66 2 2.32 2 3 C1.01 2.67 0.02 2.34 -1 2 C-0.67 1.34 -0.34 0.68 0 0 Z \" fill=\"#FFFFF4\" transform=\"translate(319,288)\"\\/>\\r\\n<path d=\"M0 0 C1.32 0.33 2.64 0.66 4 1 C3.01 1.33 2.02 1.66 1 2 C0.67 1.34 0.34 0.68 0 0 Z \" fill=\"#ECF7EC\" transform=\"translate(444,270)\"\\/>\\r\\n<path d=\"M0 0 C0.99 0.99 1.98 1.98 3 3 C2.01 2.67 1.02 2.34 0 2 C0 1.34 0 0.68 0 0 Z \" fill=\"#F2F2F2\" transform=\"translate(268,634)\"\\/>\\r\\n<path d=\"M0 0 C0.66 0.99 1.32 1.98 2 3 C1.01 2.67 0.02 2.34 -1 2 C-0.67 1.34 -0.34 0.68 0 0 Z \" fill=\"#ECECEC\" transform=\"translate(388,533)\"\\/>\\r\\n<path d=\"M0 0 C0.99 0.33 1.98 0.66 3 1 C2.34 1.66 1.68 2.32 1 3 C0.67 2.01 0.34 1.02 0 0 Z \" fill=\"#FFFFFF\" transform=\"translate(332,478)\"\\/>\\r\\n<path d=\"M0 0 C0.99 0.495 0.99 0.495 2 1 C1.01 2.485 1.01 2.485 0 4 C0 2.68 0 1.36 0 0 Z \" fill=\"#F6F6F6\" transform=\"translate(368,447)\"\\/>\\r\\n<path d=\"M0 0 C0.66 0 1.32 0 2 0 C1.67 0.99 1.34 1.98 1 3 C0.67 2.01 0.34 1.02 0 0 Z \" fill=\"#EBEBEB\" transform=\"translate(540,382)\"\\/>\\r\\n<path d=\"M0 0 C0.99 0.33 1.98 0.66 3 1 C2.34 1 1.68 1 1 1 C0.67 1.66 0.34 2.32 0 3 C0 2.01 0 1.02 0 0 Z \" fill=\"#E1EEE1\" transform=\"translate(234,374)\"\\/>\\r\\n<path d=\"M0 0 C0.66 0.66 1.32 1.32 2 2 C1.01 2 0.02 2 -1 2 C-0.67 1.34 -0.34 0.68 0 0 Z \" fill=\"#F4F4F4\" transform=\"translate(165,336)\"\\/>\\r\\n<path d=\"M0 0 C1.65 0 3.3 0 5 0 C5 0.33 5 0.66 5 1 C3.35 1 1.7 1 0 1 C0 0.67 0 0.34 0 0 Z \" fill=\"#F4F4F4\" transform=\"translate(395,318)\"\\/>\\r\\n<path d=\"M0 0 C0.99 0.33 1.98 0.66 3 1 C2.34 1.66 1.68 2.32 1 3 C0.67 2.01 0.34 1.02 0 0 Z \" fill=\"#DBFFE8\" transform=\"translate(404,310)\"\\/>\\r\\n<path d=\"M0 0 C0.99 0 1.98 0 3 0 C3 0.66 3 1.32 3 2 C2.01 1.67 1.02 1.34 0 1 C0 0.67 0 0.34 0 0 Z \" fill=\"#F8F8F8\" transform=\"translate(205,294)\"\\/>\\r\\n<path d=\"M0 0 C0.66 0.33 1.32 0.66 2 1 C1.67 1.66 1.34 2.32 1 3 C0.34 2.67 -0.32 2.34 -1 2 C-0.67 1.34 -0.34 0.68 0 0 Z \" fill=\"#EBEBEB\" transform=\"translate(316,292)\"\\/>\\r\\n<path d=\"M0 0 C0 0.99 0 1.98 0 3 C-0.66 2.67 -1.32 2.34 -2 2 C-1.34 1.34 -0.68 0.68 0 0 Z \" fill=\"#FFFFFF\" transform=\"translate(38,289)\"\\/>\\r\\n<path d=\"M0 0 C0.66 0.66 1.32 1.32 2 2 C1.01 2.33 0.02 2.66 -1 3 C-0.67 2.01 -0.34 1.02 0 0 Z \" fill=\"#F2F2F2\" transform=\"translate(325,282)\"\\/>\\r\\n<path d=\"M0 0 C1.32 0.33 2.64 0.66 4 1 C3.01 1.495 3.01 1.495 2 2 C1.34 1.34 0.68 0.68 0 0 Z \" fill=\"#EBEBEB\" transform=\"translate(504,270)\"\\/>\\r\\n<path d=\"M0 0 C0.99 0.33 1.98 0.66 3 1 C1.68 1.33 0.36 1.66 -1 2 C-0.67 1.34 -0.34 0.68 0 0 Z \" fill=\"#F4F4F4\" transform=\"translate(341,267)\"\\/>\\r\\n<path d=\"M0 0 C1.98 0.99 1.98 0.99 4 2 C2.68 1.67 1.36 1.34 0 1 C0 0.67 0 0.34 0 0 Z \" fill=\"#F2F2F2\" transform=\"translate(489,262)\"\\/>\\r\\n<path d=\"M0 0 C0.99 0.33 1.98 0.66 3 1 C2.34 1 1.68 1 1 1 C0.67 1.66 0.34 2.32 0 3 C0 2.01 0 1.02 0 0 Z \" fill=\"#FFFFFF\" transform=\"translate(349,255)\"\\/>\\r\\n<path d=\"M0 0 C0.99 0.495 0.99 0.495 2 1 C2 1.66 2 2.32 2 3 C1.34 3 0.68 3 0 3 C0 2.01 0 1.02 0 0 Z \" fill=\"#FFFFFF\" transform=\"translate(365,241)\"\\/>\\r\\n<path d=\"M0 0 C0.99 0.495 0.99 0.495 2 1 C2 1.66 2 2.32 2 3 C1.34 3 0.68 3 0 3 C0 2.01 0 1.02 0 0 Z \" fill=\"#FFFFFF\" transform=\"translate(200,127)\"\\/>\\r\\n<path d=\"M0 0 C0.66 0.33 1.32 0.66 2 1 C1.01 1.66 0.02 2.32 -1 3 C-0.67 2.01 -0.34 1.02 0 0 Z \" fill=\"#FFFFFF\" transform=\"translate(219,110)\"\\/>\\r\\n<path d=\"M0 0 C4 1 4 1 4 1 Z \" fill=\"#E9E9E9\" transform=\"translate(103,690)\"\\/>\\r\\n<path d=\"M0 0 C0.99 0.33 1.98 0.66 3 1 C2.01 1 1.02 1 0 1 C0 0.67 0 0.34 0 0 Z \" fill=\"#EDEDED\" transform=\"translate(396,526)\"\\/>\\r\\n<path d=\"M0 0 C0.99 0.33 1.98 0.66 3 1 C2.01 1 1.02 1 0 1 C0 0.67 0 0.34 0 0 Z \" fill=\"#FFFFEF\" transform=\"translate(412,510)\"\\/>\\r\\n<path d=\"M0 0 C0.99 0.33 1.98 0.66 3 1 C2.01 1 1.02 1 0 1 C0 0.67 0 0.34 0 0 Z \" fill=\"#FFFFFF\" transform=\"translate(251,496)\"\\/>\\r\\n<path d=\"M0 0 C0.99 1.485 0.99 1.485 2 3 C1.34 3 0.68 3 0 3 C0 2.01 0 1.02 0 0 Z \" fill=\"#FFFFFF\" transform=\"translate(326,487)\"\\/>\\r\\n<path d=\"M0 0 C0.99 0.33 1.98 0.66 3 1 C2.01 1 1.02 1 0 1 C0 0.67 0 0.34 0 0 Z \" fill=\"#FFFFFF\" transform=\"translate(408,476)\"\\/>\\r\\n<path d=\"M0 0 C0.99 0.33 1.98 0.66 3 1 C2.01 1 1.02 1 0 1 C0 0.67 0 0.34 0 0 Z \" fill=\"#E9E9E9\" transform=\"translate(460,462)\"\\/>\\r\\n<path d=\"M0 0 C0.99 0.33 1.98 0.66 3 1 C2.01 1 1.02 1 0 1 C0 0.67 0 0.34 0 0 Z \" fill=\"#F7F7F7\" transform=\"translate(476,446)\"\\/>\\r\\n<path d=\"M0 0 C0.33 0.66 0.66 1.32 1 2 C0.01 1.67 -0.98 1.34 -2 1 C-1.34 0.67 -0.68 0.34 0 0 Z \" fill=\"#F2F2F2\" transform=\"translate(441,444)\"\\/>\\r\\n<path d=\"M0 0 C0.99 0.33 1.98 0.66 3 1 C2.01 1 1.02 1 0 1 C0 0.67 0 0.34 0 0 Z \" fill=\"#FFFFFF\" transform=\"translate(484,438)\"\\/>\\r\\n<path d=\"M0 0 C0.99 0.33 1.98 0.66 3 1 C2.01 1 1.02 1 0 1 C0 0.67 0 0.34 0 0 Z \" fill=\"#FFFFFF\" transform=\"translate(388,427)\"\\/>\\r\\n<path d=\"M0 0 C0.99 0.33 1.98 0.66 3 1 C2.01 1.33 1.02 1.66 0 2 C0 1.34 0 0.68 0 0 Z \" fill=\"#FFFFFF\" transform=\"translate(524,398)\"\\/>\\r\\n<path d=\"M0 0 C0.99 0.33 1.98 0.66 3 1 C2.01 1 1.02 1 0 1 C0 0.67 0 0.34 0 0 Z \" fill=\"#FFFFFF\" transform=\"translate(497,388)\"\\/>\\r\\n<path d=\"M0 0 C0.66 0.33 1.32 0.66 2 1 C1.01 1 0.02 1 -1 1 C-0.67 0.67 -0.34 0.34 0 0 Z \" fill=\"#F4F4F4\" transform=\"translate(394,387)\"\\/>\\r\\n<path d=\"M0 0 C1 4 1 4 1 4 Z \" fill=\"#FFFFFF\" transform=\"translate(230,377)\"\\/>\\r\\n<path d=\"M0 0 C0.99 0.33 1.98 0.66 3 1 C2.01 1 1.02 1 0 1 C0 0.67 0 0.34 0 0 Z \" fill=\"#EBEBEB\" transform=\"translate(348,366)\"\\/>\\r\\n<path d=\"M0 0 C1 4 1 4 1 4 Z \" fill=\"#FFFFFF\" transform=\"translate(452,362)\"\\/>\\r\\n<path d=\"M0 0 C0.33 0.99 0.66 1.98 1 3 C0.34 2.67 -0.32 2.34 -1 2 C-0.67 1.34 -0.34 0.68 0 0 Z \" fill=\"#EFDFFF\" transform=\"translate(557,356)\"\\/>\\r\\n<path d=\"M0 0 C4 1 4 1 4 1 Z \" fill=\"#FFFFFF\" transform=\"translate(213,356)\"\\/>\\r\\n<path d=\"M0 0 C0.66 0.66 1.32 1.32 2 2 C1.01 2.495 1.01 2.495 0 3 C0 2.01 0 1.02 0 0 Z \" fill=\"#FFFFFF\" transform=\"translate(256,352)\"\\/>\\r\\n<path d=\"M0 0 C0.66 0.33 1.32 0.66 2 1 C1.01 1 0.02 1 -1 1 C-0.67 0.67 -0.34 0.34 0 0 Z \" fill=\"#F4F4F4\" transform=\"translate(259,350)\"\\/>\\r\\n<path d=\"M0 0 C0.66 0.33 1.32 0.66 2 1 C1.01 1 0.02 1 -1 1 C-0.67 0.67 -0.34 0.34 0 0 Z \" fill=\"#FFFFFF\" transform=\"translate(442,338)\"\\/>\\r\\n<path d=\"M0 0 C0 3 0 3 0 3 Z \" fill=\"#E4E4E4\" transform=\"translate(347,331)\"\\/>\\r\\n<path d=\"M0 0 C1 4 1 4 1 4 Z \" fill=\"#F4F4F4\" transform=\"translate(190,310)\"\\/>\\r\\n<path d=\"M0 0 C0.99 0.495 0.99 0.495 2 1 C1.34 1.66 0.68 2.32 0 3 C0 2.01 0 1.02 0 0 Z \" fill=\"#FFFFFF\" transform=\"translate(26,302)\"\\/>\\r\\n<path d=\"M0 0 C0.66 0 1.32 0 2 0 C2 0.66 2 1.32 2 2 C1.34 2 0.68 2 0 2 C0 1.34 0 0.68 0 0 Z \" fill=\"#FFFFFF\" transform=\"translate(204,296)\"\\/>\\r\\n<path d=\"M0 0 C0.33 0.66 0.66 1.32 1 2 C0.01 1.67 -0.98 1.34 -2 1 C-1.34 0.67 -0.68 0.34 0 0 Z \" fill=\"#FFFFFF\" transform=\"translate(214,288)\"\\/>\\r\\n<path d=\"M0 0 C0.66 0 1.32 0 2 0 C2 0.66 2 1.32 2 2 C1.34 2 0.68 2 0 2 C0 1.34 0 0.68 0 0 Z \" fill=\"#FFFFFF\" transform=\"translate(453,264)\"\\/>\\r\\n<path d=\"M0 0 C0.99 0.495 0.99 0.495 2 1 C1.34 1.66 0.68 2.32 0 3 C0 2.01 0 1.02 0 0 Z \" fill=\"#FFFFFF\" transform=\"translate(356,247)\"\\/>\\r\\n<path d=\"M0 0 C0.66 0.66 1.32 1.32 2 2 C1.01 1.67 0.02 1.34 -1 1 C-0.67 0.67 -0.34 0.34 0 0 Z \" fill=\"#FFFFFF\" transform=\"translate(509,240)\"\\/>\\r\\n<path d=\"M0 0 C0.66 0.33 1.32 0.66 2 1 C1.01 1 0.02 1 -1 1 C-0.67 0.67 -0.34 0.34 0 0 Z \" fill=\"#FFFFFF\" transform=\"translate(264,238)\"\\/>\\r\\n<path d=\"M0 0 C0.66 0.66 1.32 1.32 2 2 C1.01 2.495 1.01 2.495 0 3 C0 2.01 0 1.02 0 0 Z \" fill=\"#E7F2E7\" transform=\"translate(285,215)\"\\/>\\r\\n<path d=\"M0 0 C0.66 0 1.32 0 2 0 C1.67 0.99 1.34 1.98 1 3 C0.67 2.01 0.34 1.02 0 0 Z \" fill=\"#EFEFEF\" transform=\"translate(426,182)\"\\/>\\r\\n<path d=\"M0 0 C0.99 1.485 0.99 1.485 2 3 C1.34 3 0.68 3 0 3 C0 2.01 0 1.02 0 0 Z \" fill=\"#DBDBDB\" transform=\"translate(460,179)\"\\/>\\r\\n<path d=\"M0 0 C0.66 0.66 1.32 1.32 2 2 C1.01 2.495 1.01 2.495 0 3 C0 2.01 0 1.02 0 0 Z \" fill=\"#FFFFFF\" transform=\"translate(356,153)\"\\/>\\r\\n<path d=\"M0 0 C0.99 0.33 1.98 0.66 3 1 C2.01 1 1.02 1 0 1 C0 0.67 0 0.34 0 0 Z \" fill=\"#F6F6E6\" transform=\"translate(397,122)\"\\/>\\r\\n<path d=\"M0 0 C0.99 0.495 0.99 0.495 2 1 C1.34 1.66 0.68 2.32 0 3 C0 2.01 0 1.02 0 0 Z \" fill=\"#FFFFFF\" transform=\"translate(204,121)\"\\/>\\r\\n<path d=\"M0 0 C0.66 0.66 1.32 1.32 2 2 C1.01 2.495 1.01 2.495 0 3 C0 2.01 0 1.02 0 0 Z \" fill=\"#FFFFFF\" transform=\"translate(268,55)\"\\/>\\r\\n<path d=\"M0 0 C3 1 3 1 3 1 Z \" fill=\"#C6C6C6\" transform=\"translate(506,690)\"\\/>\\r\\n<path d=\"M0 0 C3 1 3 1 3 1 Z \" fill=\"#FFFFFF\" transform=\"translate(333,690)\"\\/>\\r\\n<path d=\"M0 0 C0.66 0.66 1.32 1.32 2 2 C1.34 2 0.68 2 0 2 C0 1.34 0 0.68 0 0 Z \" fill=\"#BCC8C8\" transform=\"translate(98,689)\"\\/>\\r\\n<path d=\"\" fill=\"#F1FFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"M0 0 C0.66 0.66 1.32 1.32 2 2 C1.34 2 0.68 2 0 2 C0 1.34 0 0.68 0 0 Z \" fill=\"#FFFFFF\" transform=\"translate(400,592)\"\\/>\\r\\n<path d=\"M0 0 C0.66 0.66 1.32 1.32 2 2 C1.34 2 0.68 2 0 2 C0 1.34 0 0.68 0 0 Z \" fill=\"#E5E5E5\" transform=\"translate(204,570)\"\\/>\\r\\n<path d=\"\" fill=\"#EBEBEB\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"M0 0 C0.66 0 1.32 0 2 0 C1.67 0.66 1.34 1.32 1 2 C0.67 1.34 0.34 0.68 0 0 Z \" fill=\"#FFFFFF\" transform=\"translate(180,548)\"\\/>\\r\\n<path d=\"M0 0 C3 1 3 1 3 1 Z \" fill=\"#FFFFFF\" transform=\"translate(255,498)\"\\/>\\r\\n<path d=\"M0 0 C0.33 0.66 0.66 1.32 1 2 C0.34 1.67 -0.32 1.34 -1 1 C-0.67 0.67 -0.34 0.34 0 0 Z \" fill=\"#FFFFFF\" transform=\"translate(574,490)\"\\/>\\r\\n<path d=\"M0 0 C3 1 3 1 3 1 Z \" fill=\"#EEEEEE\" transform=\"translate(400,485)\"\\/>\\r\\n<path d=\"M0 0 C3 1 3 1 3 1 Z \" fill=\"#FFFFE9\" transform=\"translate(305,469)\"\\/>\\r\\n<path d=\"M0 0 C0.66 0 1.32 0 2 0 C1.67 0.66 1.34 1.32 1 2 C0.67 1.34 0.34 0.68 0 0 Z \" fill=\"#FFFFFF\" transform=\"translate(468,454)\"\\/>\\r\\n<path d=\"M0 0 C0.33 0.66 0.66 1.32 1 2 C0.34 1.67 -0.32 1.34 -1 1 C-0.67 0.67 -0.34 0.34 0 0 Z \" fill=\"#F3F3F3\" transform=\"translate(432,451)\"\\/>\\r\\n<path d=\"M0 0 C0.99 0.495 0.99 0.495 2 1 C1.01 1.495 1.01 1.495 0 2 C0 1.34 0 0.68 0 0 Z \" fill=\"#FFFFFF\" transform=\"translate(434,451)\"\\/>\\r\\n<path d=\"M0 0 C0.66 0 1.32 0 2 0 C1.67 0.66 1.34 1.32 1 2 C0.67 1.34 0.34 0.68 0 0 Z \" fill=\"#EEEEEE\" transform=\"translate(221,435)\"\\/>\\r\\n<path d=\"M0 0 C0.33 0.66 0.66 1.32 1 2 C0.34 1.67 -0.32 1.34 -1 1 C-0.67 0.67 -0.34 0.34 0 0 Z \" fill=\"#FFFFFF\" transform=\"translate(382,432)\"\\/>\\r\\n<path d=\"M0 0 C0.99 0.495 0.99 0.495 2 1 C1.01 1.495 1.01 1.495 0 2 C0 1.34 0 0.68 0 0 Z \" fill=\"#FFFFFF\" transform=\"translate(381,430)\"\\/>\\r\\n<path d=\"M0 0 C0.33 0.66 0.66 1.32 1 2 C0.34 1.67 -0.32 1.34 -1 1 C-0.67 0.67 -0.34 0.34 0 0 Z \" fill=\"#FFFFFF\" transform=\"translate(62,428)\"\\/>\\r\\n<path d=\"M0 0 C3 1 3 1 3 1 Z \" fill=\"#F4F4F4\" transform=\"translate(500,422)\"\\/>\\r\\n<path d=\"M0 0 C3 1 3 1 3 1 Z \" fill=\"#EEEEEE\" transform=\"translate(290,422)\"\\/>\\r\\n<path d=\"M0 0 C3 1 3 1 3 1 Z \" fill=\"#F3F3F3\" transform=\"translate(508,414)\"\\/>\\r\\n<path d=\"M0 0 C0.99 0.495 0.99 0.495 2 1 C1.01 1.495 1.01 1.495 0 2 C0 1.34 0 0.68 0 0 Z \" fill=\"#FFFFFF\" transform=\"translate(653,410)\"\\/>\\r\\n<path d=\"M0 0 C0.66 0.66 1.32 1.32 2 2 C1.34 2 0.68 2 0 2 C0 1.34 0 0.68 0 0 Z \" fill=\"#FFFFFF\" transform=\"translate(405,408)\"\\/>\\r\\n<path d=\"M0 0 C3 1 3 1 3 1 Z \" fill=\"#FFFFFF\" transform=\"translate(659,405)\"\\/>\\r\\n<path d=\"M0 0 C0.33 0.66 0.66 1.32 1 2 C0.34 1.67 -0.32 1.34 -1 1 C-0.67 0.67 -0.34 0.34 0 0 Z \" fill=\"#FFFFFF\" transform=\"translate(420,397)\"\\/>\\r\\n<path d=\"M0 0 C0.33 0.66 0.66 1.32 1 2 C0.34 1.67 -0.32 1.34 -1 1 C-0.67 0.67 -0.34 0.34 0 0 Z \" fill=\"#FFFFFF\" transform=\"translate(223,392)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"M0 0 C3 1 3 1 3 1 Z \" fill=\"#FFFFFF\" transform=\"translate(532,390)\"\\/>\\r\\n<path d=\"\" fill=\"#F3F3F3\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"M0 0 C0.99 0.495 0.99 0.495 2 1 C1.01 1.495 1.01 1.495 0 2 C0 1.34 0 0.68 0 0 Z \" fill=\"#FFFFFF\" transform=\"translate(441,374)\"\\/>\\r\\n<path d=\"M0 0 C3 1 3 1 3 1 Z \" fill=\"#FFFFFF\" transform=\"translate(126,371)\"\\/>\\r\\n<path d=\"M0 0 C0.99 0.495 0.99 0.495 2 1 C1.01 1.495 1.01 1.495 0 2 C0 1.34 0 0.68 0 0 Z \" fill=\"#FFFFFF\" transform=\"translate(549,370)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"M0 0 C0.33 0.66 0.66 1.32 1 2 C0.34 1.67 -0.32 1.34 -1 1 C-0.67 0.67 -0.34 0.34 0 0 Z \" fill=\"#FFFFFF\" transform=\"translate(5,368)\"\\/>\\r\\n<path d=\"M0 0 C0.33 0.66 0.66 1.32 1 2 C0.34 1.67 -0.32 1.34 -1 1 C-0.67 0.67 -0.34 0.34 0 0 Z \" fill=\"#FFFFFF\" transform=\"translate(450,367)\"\\/>\\r\\n<path d=\"M0 0 C0.66 0 1.32 0 2 0 C1.67 0.66 1.34 1.32 1 2 C0.67 1.34 0.34 0.68 0 0 Z \" fill=\"#FFFFFF\" transform=\"translate(133,366)\"\\/>\\r\\n<path d=\"M0 0 C0.66 0 1.32 0 2 0 C1.67 0.66 1.34 1.32 1 2 C0.67 1.34 0.34 0.68 0 0 Z \" fill=\"#FFFFFF\" transform=\"translate(245,359)\"\\/>\\r\\n<path d=\"M0 0 C0.66 0 1.32 0 2 0 C1.67 0.66 1.34 1.32 1 2 C0.67 1.34 0.34 0.68 0 0 Z \" fill=\"#E6E6E6\" transform=\"translate(356,358)\"\\/>\\r\\n<path d=\"M0 0 C0.66 0 1.32 0 2 0 C1.67 0.66 1.34 1.32 1 2 C0.67 1.34 0.34 0.68 0 0 Z \" fill=\"#FFFFFF\" transform=\"translate(528,349)\"\\/>\\r\\n<path d=\"M0 0 C0.66 0 1.32 0 2 0 C1.67 0.66 1.34 1.32 1 2 C0.67 1.34 0.34 0.68 0 0 Z \" fill=\"#FFFFFF\" transform=\"translate(157,342)\"\\/>\\r\\n<path d=\"M0 0 C3 1 3 1 3 1 Z \" fill=\"#FFFFFF\" transform=\"translate(336,340)\"\\/>\\r\\n<path d=\"M0 0 C0.99 0.495 0.99 0.495 2 1 C1.01 1.495 1.01 1.495 0 2 C0 1.34 0 0.68 0 0 Z \" fill=\"#FFFFEE\" transform=\"translate(272,337)\"\\/>\\r\\n<path d=\"M0 0 C3 1 3 1 3 1 Z \" fill=\"#EEEEEE\" transform=\"translate(273,334)\"\\/>\\r\\n<path d=\"\" fill=\"#D4D4E9\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"M0 0 C0.33 0.66 0.66 1.32 1 2 C0.34 1.67 -0.32 1.34 -1 1 C-0.67 0.67 -0.34 0.34 0 0 Z \" fill=\"#F4F4F4\" transform=\"translate(451,329)\"\\/>\\r\\n<path d=\"M0 0 C0.99 0.495 0.99 0.495 2 1 C1.01 1.495 1.01 1.495 0 2 C0 1.34 0 0.68 0 0 Z \" fill=\"#FFFFFF\" transform=\"translate(488,324)\"\\/>\\r\\n<path d=\"M0 0 C0.33 0.66 0.66 1.32 1 2 C0.34 1.67 -0.32 1.34 -1 1 C-0.67 0.67 -0.34 0.34 0 0 Z \" fill=\"#FFFFFF\" transform=\"translate(683,316)\"\\/>\\r\\n<path d=\"M0 0 C3 1 3 1 3 1 Z \" fill=\"#FFFFFF\" transform=\"translate(304,304)\"\\/>\\r\\n<path d=\"M0 0 C0.66 0.66 1.32 1.32 2 2 C1.34 2 0.68 2 0 2 C0 1.34 0 0.68 0 0 Z \" fill=\"#FFFFFF\" transform=\"translate(556,288)\"\\/>\\r\\n<path d=\"M0 0 C3 1 3 1 3 1 Z \" fill=\"#FFFFFF\" transform=\"translate(316,286)\"\\/>\\r\\n<path d=\"M0 0 C0.33 0.66 0.66 1.32 1 2 C0.34 1.67 -0.32 1.34 -1 1 C-0.67 0.67 -0.34 0.34 0 0 Z \" fill=\"#FFFFFF\" transform=\"translate(462,263)\"\\/>\\r\\n<path d=\"M0 0 C3 1 3 1 3 1 Z \" fill=\"#E9E9E9\" transform=\"translate(485,262)\"\\/>\\r\\n<path d=\"M0 0 C3 1 3 1 3 1 Z \" fill=\"#E2FFE2\" transform=\"translate(480,262)\"\\/>\\r\\n<path d=\"M0 0 C0.33 0.66 0.66 1.32 1 2 C0.34 1.67 -0.32 1.34 -1 1 C-0.67 0.67 -0.34 0.34 0 0 Z \" fill=\"#FFFFFF\" transform=\"translate(68,261)\"\\/>\\r\\n<path d=\"M0 0 C0.99 0.495 0.99 0.495 2 1 C1.01 1.495 1.01 1.495 0 2 C0 1.34 0 0.68 0 0 Z \" fill=\"#FFFFFF\" transform=\"translate(528,252)\"\\/>\\r\\n<path d=\"M0 0 C0.66 0.66 1.32 1.32 2 2 C1.34 2 0.68 2 0 2 C0 1.34 0 0.68 0 0 Z \" fill=\"#FFFFFF\" transform=\"translate(423,251)\"\\/>\\r\\n<path d=\"M0 0 C0.99 0.495 0.99 0.495 2 1 C1.01 1.495 1.01 1.495 0 2 C0 1.34 0 0.68 0 0 Z \" fill=\"#FFFFFF\" transform=\"translate(252,247)\"\\/>\\r\\n<path d=\"M0 0 C3 1 3 1 3 1 Z \" fill=\"#FFFFFF\" transform=\"translate(499,237)\"\\/>\\r\\n<path d=\"M0 0 C3 1 3 1 3 1 Z \" fill=\"#F1F1F1\" transform=\"translate(477,233)\"\\/>\\r\\n<path d=\"M0 0 C0.66 0 1.32 0 2 0 C1.67 0.66 1.34 1.32 1 2 C0.67 1.34 0.34 0.68 0 0 Z \" fill=\"#FFFFFF\" transform=\"translate(372,232)\"\\/>\\r\\n<path d=\"M0 0 C0.66 0 1.32 0 2 0 C1.67 0.66 1.34 1.32 1 2 C0.67 1.34 0.34 0.68 0 0 Z \" fill=\"#FFFFFF\" transform=\"translate(345,225)\"\\/>\\r\\n<path d=\"M0 0 C0.66 0 1.32 0 2 0 C1.67 0.66 1.34 1.32 1 2 C0.67 1.34 0.34 0.68 0 0 Z \" fill=\"#FFFFFF\" transform=\"translate(383,222)\"\\/>\\r\\n<path d=\"M0 0 C0.66 0.66 1.32 1.32 2 2 C1.34 2 0.68 2 0 2 C0 1.34 0 0.68 0 0 Z \" fill=\"#E5E5E5\" transform=\"translate(355,212)\"\\/>\\r\\n<path d=\"M0 0 C0.66 0.66 1.32 1.32 2 2 C1.34 2 0.68 2 0 2 C0 1.34 0 0.68 0 0 Z \" fill=\"#F4F4F4\" transform=\"translate(384,204)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"M0 0 C3 1 3 1 3 1 Z \" fill=\"#FFFFFF\" transform=\"translate(146,182)\"\\/>\\r\\n<path d=\"M0 0 C0.66 0.66 1.32 1.32 2 2 C1.34 2 0.68 2 0 2 C0 1.34 0 0.68 0 0 Z \" fill=\"#FFFFFF\" transform=\"translate(455,168)\"\\/>\\r\\n<path d=\"M0 0 C0.66 0.66 1.32 1.32 2 2 C1.34 2 0.68 2 0 2 C0 1.34 0 0.68 0 0 Z \" fill=\"#E3E3E3\" transform=\"translate(402,158)\"\\/>\\r\\n<path d=\"M0 0 C0.99 0.495 0.99 0.495 2 1 C1.01 1.495 1.01 1.495 0 2 C0 1.34 0 0.68 0 0 Z \" fill=\"#FFFFFF\" transform=\"translate(365,151)\"\\/>\\r\\n<path d=\"M0 0 C3 1 3 1 3 1 Z \" fill=\"#F4F4F4\" transform=\"translate(436,145)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"M0 0 C0.66 0.66 1.32 1.32 2 2 C1.34 2 0.68 2 0 2 C0 1.34 0 0.68 0 0 Z \" fill=\"#EEEEEE\" transform=\"translate(390,120)\"\\/>\\r\\n<path d=\"M0 0 C0.99 0.495 0.99 0.495 2 1 C1.01 1.495 1.01 1.495 0 2 C0 1.34 0 0.68 0 0 Z \" fill=\"#FFFFFF\" transform=\"translate(236,88)\"\\/>\\r\\n<path d=\"M0 0 C0.66 0 1.32 0 2 0 C1.67 0.66 1.34 1.32 1 2 C0.67 1.34 0.34 0.68 0 0 Z \" fill=\"#FFFFFF\" transform=\"translate(367,6)\"\\/>\\r\\n<path d=\"M0 0 C3 1 3 1 3 1 Z \" fill=\"#FFFFFF\" transform=\"translate(347,1)\"\\/>\\r\\n<path d=\"\" fill=\"#D4D4D4\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"M0 0 C2 1 2 1 2 1 Z \" fill=\"#FFFFFF\" transform=\"translate(330,689)\"\\/>\\r\\n<path d=\"M0 0 C2 1 2 1 2 1 Z \" fill=\"#FFFFFF\" transform=\"translate(95,689)\"\\/>\\r\\n<path d=\"M0 0 C2 1 2 1 2 1 Z \" fill=\"#FFFFFF\" transform=\"translate(377,684)\"\\/>\\r\\n<path d=\"M0 0 C2 1 2 1 2 1 Z \" fill=\"#FFFFFF\" transform=\"translate(385,678)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"M0 0 C2 1 2 1 2 1 Z \" fill=\"#FFFFFF\" transform=\"translate(393,672)\"\\/>\\r\\n<path d=\"M0 0 C2 1 2 1 2 1 Z \" fill=\"#FFFFFF\" transform=\"translate(396,667)\"\\/>\\r\\n<path d=\"\" fill=\"#E5E5E5\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"M0 0 C2 1 2 1 2 1 Z \" fill=\"#FFFFFF\" transform=\"translate(276,645)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"M0 0 C2 1 2 1 2 1 Z \" fill=\"#FFFFFF\" transform=\"translate(220,589)\"\\/>\\r\\n<path d=\"M0 0 C2 1 2 1 2 1 Z \" fill=\"#FFFFFF\" transform=\"translate(393,588)\"\\/>\\r\\n<path d=\"\" fill=\"#DFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"M0 0 C2 1 2 1 2 1 Z \" fill=\"#FFFFFF\" transform=\"translate(213,581)\"\\/>\\r\\n<path d=\"M0 0 C2 1 2 1 2 1 Z \" fill=\"#FFFFFF\" transform=\"translate(338,560)\"\\/>\\r\\n<path d=\"M0 0 C2 1 2 1 2 1 Z \" fill=\"#FFFFFF\" transform=\"translate(507,557)\"\\/>\\r\\n<path d=\"M0 0 C2 1 2 1 2 1 Z \" fill=\"#FFFFFF\" transform=\"translate(510,556)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"M0 0 C2 1 2 1 2 1 Z \" fill=\"#DFFFFF\" transform=\"translate(420,502)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"M0 0 C2 1 2 1 2 1 Z \" fill=\"#FFFFFF\" transform=\"translate(132,501)\"\\/>\\r\\n<path d=\"M0 0 C2 1 2 1 2 1 Z \" fill=\"#FFFFFF\" transform=\"translate(302,498)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"M0 0 C2 1 2 1 2 1 Z \" fill=\"#FFFFFF\" transform=\"translate(569,496)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"M0 0 C2 1 2 1 2 1 Z \" fill=\"#FFFFFF\" transform=\"translate(313,495)\"\\/>\\r\\n<path d=\"M0 0 C2 1 2 1 2 1 Z \" fill=\"#FFFFFF\" transform=\"translate(571,493)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"M0 0 C2 1 2 1 2 1 Z \" fill=\"#FFFFFF\" transform=\"translate(232,487)\"\\/>\\r\\n<path d=\"M0 0 C2 1 2 1 2 1 Z \" fill=\"#FFFFFF\" transform=\"translate(584,482)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"M0 0 C2 1 2 1 2 1 Z \" fill=\"#FFFFFF\" transform=\"translate(215,473)\"\\/>\\r\\n<path d=\"M0 0 C2 1 2 1 2 1 Z \" fill=\"#FFFFFF\" transform=\"translate(345,472)\"\\/>\\r\\n<path d=\"M0 0 C2 1 2 1 2 1 Z \" fill=\"#FFFFFF\" transform=\"translate(457,466)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"M0 0 C2 1 2 1 2 1 Z \" fill=\"#FFFFFF\" transform=\"translate(348,465)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"M0 0 C2 1 2 1 2 1 Z \" fill=\"#FFFFFF\" transform=\"translate(611,453)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"M0 0 C2 1 2 1 2 1 Z \" fill=\"#FFFFFF\" transform=\"translate(364,449)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"M0 0 C2 1 2 1 2 1 Z \" fill=\"#FFFFFF\" transform=\"translate(382,435)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFDF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"M0 0 C2 1 2 1 2 1 Z \" fill=\"#FFFFFF\" transform=\"translate(272,426)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"M0 0 C2 1 2 1 2 1 Z \" fill=\"#FFFFFF\" transform=\"translate(288,425)\"\\/>\\r\\n<path d=\"M0 0 C2 1 2 1 2 1 Z \" fill=\"#E5E5E5\" transform=\"translate(271,424)\"\\/>\\r\\n<path d=\"M0 0 C2 1 2 1 2 1 Z \" fill=\"#FFFFFF\" transform=\"translate(52,421)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"M0 0 C2 1 2 1 2 1 Z \" fill=\"#FFFFFF\" transform=\"translate(398,414)\"\\/>\\r\\n<path d=\"M0 0 C2 1 2 1 2 1 Z \" fill=\"#FFFFFF\" transform=\"translate(512,412)\"\\/>\\r\\n<path d=\"\" fill=\"#E5E5E5\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"M0 0 C2 1 2 1 2 1 Z \" fill=\"#FFFFFF\" transform=\"translate(410,406)\"\\/>\\r\\n<path d=\"M0 0 C2 1 2 1 2 1 Z \" fill=\"#D5D5D5\" transform=\"translate(308,406)\"\\/>\\r\\n<path d=\"\" fill=\"#DFDFDF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"M0 0 C2 1 2 1 2 1 Z \" fill=\"#E5E5E5\" transform=\"translate(482,401)\"\\/>\\r\\n<path d=\"M0 0 C2 1 2 1 2 1 Z \" fill=\"#FFFFFF\" transform=\"translate(31,399)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"M0 0 C2 1 2 1 2 1 Z \" fill=\"#FFFFFF\" transform=\"translate(24,396)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"M0 0 C2 1 2 1 2 1 Z \" fill=\"#EDEDED\" transform=\"translate(228,382)\"\\/>\\r\\n<path d=\"M0 0 C2 1 2 1 2 1 Z \" fill=\"#CCCCCC\" transform=\"translate(298,380)\"\\/>\\r\\n<path d=\"M0 0 C2 1 2 1 2 1 Z \" fill=\"#FFFFFF\" transform=\"translate(201,380)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#E5E5E5\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#EFEFEF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"M0 0 C2 1 2 1 2 1 Z \" fill=\"#FFFFFF\" transform=\"translate(445,372)\"\\/>\\r\\n<path d=\"\" fill=\"#EDEDED\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#E5E5E5\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"M0 0 C2 1 2 1 2 1 Z \" fill=\"#F1F1F1\" transform=\"translate(243,366)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"M0 0 C2 1 2 1 2 1 Z \" fill=\"#DFDFDF\" transform=\"translate(322,355)\"\\/>\\r\\n<path d=\"M0 0 C2 1 2 1 2 1 Z \" fill=\"#FFFFFF\" transform=\"translate(252,355)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"M0 0 C2 1 2 1 2 1 Z \" fill=\"#FFFFFF\" transform=\"translate(470,346)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"M0 0 C2 1 2 1 2 1 Z \" fill=\"#FFFFFF\" transform=\"translate(267,342)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"M0 0 C2 1 2 1 2 1 Z \" fill=\"#FFFFFF\" transform=\"translate(121,341)\"\\/>\\r\\n<path d=\"M0 0 C2 1 2 1 2 1 Z \" fill=\"#FFFFFF\" transform=\"translate(269,340)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFDF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#EDEDED\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#CCCCCC\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"M0 0 C2 1 2 1 2 1 Z \" fill=\"#FFFFFF\" transform=\"translate(283,326)\"\\/>\\r\\n<path d=\"M0 0 C2 1 2 1 2 1 Z \" fill=\"#FFFFFF\" transform=\"translate(173,326)\"\\/>\\r\\n<path d=\"\" fill=\"#EDEDED\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"M0 0 C2 1 2 1 2 1 Z \" fill=\"#FFFFFF\" transform=\"translate(392,324)\"\\/>\\r\\n<path d=\"M0 0 C2 1 2 1 2 1 Z \" fill=\"#FFFFFF\" transform=\"translate(284,323)\"\\/>\\r\\n<path d=\"M0 0 C2 1 2 1 2 1 Z \" fill=\"#FFFFFF\" transform=\"translate(488,322)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"M0 0 C2 1 2 1 2 1 Z \" fill=\"#FFFFFF\" transform=\"translate(253,316)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#DFDFDF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"M0 0 C2 1 2 1 2 1 Z \" fill=\"#EAEAEA\" transform=\"translate(299,310)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"M0 0 C2 1 2 1 2 1 Z \" fill=\"#FFFFFF\" transform=\"translate(668,304)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"M0 0 C2 1 2 1 2 1 Z \" fill=\"#FFFFFF\" transform=\"translate(666,301)\"\\/>\\r\\n<path d=\"M0 0 C2 1 2 1 2 1 Z \" fill=\"#E5E5E5\" transform=\"translate(313,296)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"M0 0 C2 1 2 1 2 1 Z \" fill=\"#FFFFFF\" transform=\"translate(212,287)\"\\/>\\r\\n<path d=\"M0 0 C2 1 2 1 2 1 Z \" fill=\"#D8D8D8\" transform=\"translate(430,286)\"\\/>\\r\\n<path d=\"M0 0 C2 1 2 1 2 1 Z \" fill=\"#E5E5C5\" transform=\"translate(323,286)\"\\/>\\r\\n<path d=\"M0 0 C2 1 2 1 2 1 Z \" fill=\"#DFDFDF\" transform=\"translate(391,285)\"\\/>\\r\\n<path d=\"M0 0 C2 1 2 1 2 1 Z \" fill=\"#FFFFFF\" transform=\"translate(177,284)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"M0 0 C2 1 2 1 2 1 Z \" fill=\"#FFFFFF\" transform=\"translate(44,281)\"\\/>\\r\\n<path d=\"M0 0 C2 1 2 1 2 1 Z \" fill=\"#FFFFFF\" transform=\"translate(45,278)\"\\/>\\r\\n<path d=\"M0 0 C2 1 2 1 2 1 Z \" fill=\"#FFFFFF\" transform=\"translate(293,276)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"M0 0 C2 1 2 1 2 1 Z \" fill=\"#FFFFFF\" transform=\"translate(513,274)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"M0 0 C2 1 2 1 2 1 Z \" fill=\"#FFFFFF\" transform=\"translate(333,272)\"\\/>\\r\\n<path d=\"M0 0 C2 1 2 1 2 1 Z \" fill=\"#EDEDED\" transform=\"translate(452,267)\"\\/>\\r\\n<path d=\"M0 0 C2 1 2 1 2 1 Z \" fill=\"#FFFFFF\" transform=\"translate(301,267)\"\\/>\\r\\n<path d=\"M0 0 C2 1 2 1 2 1 Z \" fill=\"#FFFFFF\" transform=\"translate(192,267)\"\\/>\\r\\n<path d=\"\" fill=\"#D0D0D0\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"M0 0 C2 1 2 1 2 1 Z \" fill=\"#EAEAEA\" transform=\"translate(477,262)\"\\/>\\r\\n<path d=\"M0 0 C2 1 2 1 2 1 Z \" fill=\"#C5C5C5\" transform=\"translate(471,262)\"\\/>\\r\\n<path d=\"M0 0 C2 1 2 1 2 1 Z \" fill=\"#FFFFFF\" transform=\"translate(346,262)\"\\/>\\r\\n<path d=\"\" fill=\"#F1F1F1\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"M0 0 C2 1 2 1 2 1 Z \" fill=\"#FFFFFF\" transform=\"translate(416,260)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"M0 0 C2 1 2 1 2 1 Z \" fill=\"#FFFFFF\" transform=\"translate(534,256)\"\\/>\\r\\n<path d=\"M0 0 C2 1 2 1 2 1 Z \" fill=\"#FFFFFF\" transform=\"translate(244,256)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"M0 0 C2 1 2 1 2 1 Z \" fill=\"#FFFFFF\" transform=\"translate(361,246)\"\\/>\\r\\n<path d=\"M0 0 C2 1 2 1 2 1 Z \" fill=\"#FFFFFF\" transform=\"translate(260,239)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#E5E5E5\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#E5E5E5\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"M0 0 C2 1 2 1 2 1 Z \" fill=\"#FFFFFF\" transform=\"translate(383,225)\"\\/>\\r\\n<path d=\"M0 0 C2 1 2 1 2 1 Z \" fill=\"#FFFFFF\" transform=\"translate(381,224)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"M0 0 C2 1 2 1 2 1 Z \" fill=\"#FFFFFF\" transform=\"translate(586,221)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"M0 0 C2 1 2 1 2 1 Z \" fill=\"#FFFFFF\" transform=\"translate(300,198)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"M0 0 C2 1 2 1 2 1 Z \" fill=\"#FFFFFF\" transform=\"translate(318,182)\"\\/>\\r\\n<path d=\"M0 0 C2 1 2 1 2 1 Z \" fill=\"#FFFFFF\" transform=\"translate(456,172)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"M0 0 C2 1 2 1 2 1 Z \" fill=\"#FFFFFF\" transform=\"translate(334,168)\"\\/>\\r\\n<path d=\"\" fill=\"#E5E5E5\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#EFEFEF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"M0 0 C2 1 2 1 2 1 Z \" fill=\"#FFFFFF\" transform=\"translate(528,162)\"\\/>\\r\\n<path d=\"M0 0 C2 1 2 1 2 1 Z \" fill=\"#FFFFFF\" transform=\"translate(341,161)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"M0 0 C2 1 2 1 2 1 Z \" fill=\"#FFFFFF\" transform=\"translate(305,157)\"\\/>\\r\\n<path d=\"M0 0 C2 1 2 1 2 1 Z \" fill=\"#E5E5E5\" transform=\"translate(392,154)\"\\/>\\r\\n<path d=\"M0 0 C2 1 2 1 2 1 Z \" fill=\"#FFFFFF\" transform=\"translate(384,152)\"\\/>\\r\\n<path d=\"M0 0 C2 1 2 1 2 1 Z \" fill=\"#FFFFFF\" transform=\"translate(178,150)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"M0 0 C2 1 2 1 2 1 Z \" fill=\"#CDCDCD\" transform=\"translate(344,125)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"M0 0 C2 1 2 1 2 1 Z \" fill=\"#FFFFFF\" transform=\"translate(395,123)\"\\/>\\r\\n<path d=\"M0 0 C2 1 2 1 2 1 Z \" fill=\"#FFFFFF\" transform=\"translate(237,90)\"\\/>\\r\\n<path d=\"\" fill=\"#EFEFEF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#D5D5D5\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#E3E3E3\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#DBDBDB\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#CCFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#DBDBDB\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#CCFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#DBDBDB\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFCC\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#DBDBDB\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#CCCCCC\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#D5D5D5\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#D5D5D5\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#CCCCCC\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#CCCCCC\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#D5D5D5\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#AAFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#D5D5D5\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#BFBFBF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#CCCCCC\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#CCCCCC\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#CCCCCC\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#BFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#BFBFBF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#D5D5D5\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#D5D5D5\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#DBDBDB\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#DBDBDB\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFBFBF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#D5D5D5\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#CCCCCC\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#DFDFDF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#DFDFDF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#CCCCCC\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFBFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#E3E3E3\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#BFBFBF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#DFDFDF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#CCCCCC\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#DBDBDB\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#E3E3E3\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#CCCCCC\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#CCCCCC\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#BFBFBF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFBFBF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#BFBFBF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#D5D5D5\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#D5D5D5\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#CCCCCC\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFBF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFBF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#D5D5D5\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#E6E6E6\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#D5D5D5\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#CCCCCC\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFBF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#DBDBDB\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFBFBF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFBFBF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#D5D5D5\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#D5D5D5\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#D5D5D5\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#CCCCCC\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#DFDFDF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#CCCCCC\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#D5D5D5\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#BFBFBF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#D5D5D5\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#CCCCCC\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#CCCCCC\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#000000\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFBF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<path d=\"\" fill=\"#FFFFFF\" transform=\"translate(0,0)\"\\/>\\r\\n<\\/svg>\\r\\n';\n}\n\n/**\n * Generates a shields.io-compatible JSON response for a badge\n * @param count The view count to display\n * @param color The badge color (defaults to \"aquamarine\")\n * @param owner The repository owner\n * @param repo The repository name\n * @returns JSON response for shields.io endpoint\n */\nexport function generateBadgeResponse(\n  count: number,\n  color: string = \"aquamarine\",\n): Response {\n  const badgeData = {\n    schemaVersion: 1,\n    label: \"GitMCP\",\n    message: count.toString(),\n    color,\n    cacheSeconds: 300, // Cache for 5 minutes\n    logoSvg: getEscapedLogo(),\n  };\n\n  return new Response(JSON.stringify(badgeData), {\n    headers: {\n      \"Content-Type\": \"application/json\",\n      \"Cache-Control\": \"max-age=300, s-maxage=300\", // Cache for 5 minutes\n      \"Access-Control-Allow-Origin\": \"*\",\n    },\n  });\n}\n"
  },
  {
    "path": "src/api/utils/cache.ts",
    "content": "import type { RobotsRule } from \"./robotsTxt.js\";\nimport type { FetchDocumentationResult } from \"../tools/commonTools.js\";\n\n// Define the format options and their corresponding return types\nexport type FormatOptions = {\n  text: string;\n  json: Record<string, unknown>;\n};\n\n// 12 hour TTL in seconds with jitter (base time ±20%)\nconst BASE_TTL = 60 * 60 * 12; // 12 hours in seconds\nconst JITTER_FACTOR = 0.2; // 20% jitter\n\n// Cache TTL in seconds (12 hours with jitter)\nfunction getCacheTTL(): number {\n  const jitterAmount = BASE_TTL * JITTER_FACTOR;\n  const jitter = Math.random() * (jitterAmount * 2) - jitterAmount; // Random value between -jitterAmount and +jitterAmount\n  return Math.floor(BASE_TTL + jitter);\n}\n\n/**\n * Cache key structure for repository file paths\n * @param owner - Repository owner\n * @param repo - Repository name\n * @returns Cache key\n */\nexport function getRepoFilePathCacheKey(owner: string, repo: string): string {\n  return `repo:${owner}:${repo}`;\n}\n\n/**\n * Cache key structure for vector existence\n * @param owner - Repository owner\n * @param repo - Repository name\n * @returns Cache key\n */\nexport function getIsIndexedCacheKey(owner: string, repo: string): string {\n  return `vector_exists:${owner}:${repo}`;\n}\n\n/**\n * Cache key structure for fetchDocumentation results\n * @param owner - Repository owner\n * @param repo - Repository name\n * @returns Cache key\n */\nexport function getFetchDocCacheKey(owner: string, repo: string): string {\n  return `fetch_doc:${owner}:${repo}`;\n}\n\n/**\n * Cache key structure for URL content\n * @param url - The URL being cached\n * @param format - The format of the content (json, text)\n * @returns Cache key\n */\nexport function getUrlContentCacheKey(url: string, format: string): string {\n  return `url_content:${format}:${url}`;\n}\n\n/**\n * Get a value from KV cache\n * @param key - The cache key\n * @param env - Environment with Cloudflare bindings\n * @returns The cached value or null if not found\n */\nasync function getFromCache(key: string, env: Env): Promise<any> {\n  // Check KV store for cached value\n  if (env?.CACHE_KV) {\n    try {\n      const result = await env.CACHE_KV.get(key, { type: \"json\" });\n      console.log(`Cache retrieval for key ${key}:`, result);\n      return result;\n    } catch (error) {\n      console.warn(\"Failed to retrieve from Cloudflare KV:\", error);\n    }\n  }\n\n  return null;\n}\n\n/**\n * Store a value in KV cache\n * @param key - The cache key\n * @param value - The value to cache\n * @param ttl - Time to live in seconds (optional, defaults to 12 hours with jitter)\n * @param env - Environment with Cloudflare bindings\n */\nasync function setInCache(\n  key: string,\n  value: any,\n  env: Env,\n  ttl?: number,\n): Promise<void> {\n  // Use provided TTL or generate one with jitter\n  const cacheTTL = ttl || getCacheTTL();\n\n  // Store in KV cache\n  if (env?.CACHE_KV) {\n    try {\n      await env.CACHE_KV.put(key, JSON.stringify(value), {\n        expirationTtl: cacheTTL,\n      });\n    } catch (error) {\n      console.warn(\"Failed to save to Cloudflare KV:\", error);\n    }\n  }\n}\n\n/**\n * Get cached file path for a repository file\n * @param owner - Repository owner\n * @param repo - Repository name\n * @param filename - File name\n * @param env - Environment with Cloudflare bindings\n * @returns Object with path and branch if found in cache, null otherwise\n */\nexport async function getCachedFilePath(\n  owner: string,\n  repo: string,\n  env: Env,\n): Promise<{ path: string; branch: string } | null> {\n  try {\n    const key = getRepoFilePathCacheKey(owner, repo);\n    const result = await getFromCache(key, env);\n    return result as { path: string; branch: string } | null;\n  } catch (error) {\n    console.warn(\"Failed to retrieve from cache:\", error);\n    return null;\n  }\n}\n\n/**\n * Cache a file path for a repository file\n * @param owner - Repository owner\n * @param repo - Repository name\n * @param filename - File name\n * @param path - File path within the repository\n * @param branch - Branch name (main, master, etc.)\n * @param env - Environment with Cloudflare bindings\n */\nexport async function cacheFilePath(\n  owner: string,\n  repo: string,\n  filename: string,\n  path: string,\n  branch: string,\n  env: Env,\n): Promise<void> {\n  try {\n    const key = getRepoFilePathCacheKey(owner, repo);\n    await setInCache(key, { path, branch }, env, getCacheTTL());\n    console.log(\n      `Cached file path for ${filename} in ${owner}/${repo}: ${path}`,\n    );\n  } catch (error) {\n    console.warn(\"Failed to save to cache:\", error);\n  }\n}\n\n/**\n * Cache key structure for robots.txt content\n * @param domain - Website domain\n * @returns Cache key\n */\nexport function getRobotsTxtCacheKey(domain: string): string {\n  return `robotstxt:${domain}`;\n}\n\n/**\n * Get cached robots.txt rules for a domain\n * @param domain - Website domain\n * @param env - Environment with Cloudflare bindings\n * @returns Array of robot rules if found in cache, null otherwise\n */\nexport async function getCachedRobotsTxt(\n  domain: string,\n  env: Env,\n): Promise<RobotsRule[] | null> {\n  try {\n    const key = getRobotsTxtCacheKey(domain);\n    const result = await getFromCache(key, env);\n    return result as RobotsRule[] | null;\n  } catch (error) {\n    console.warn(\"Failed to retrieve robots.txt from cache:\", error);\n    return null;\n  }\n}\n\n/**\n * Cache robots.txt rules for a domain\n * @param domain - Website domain\n * @param rules - Array of robot rules to cache\n * @param env - Environment with Cloudflare bindings\n */\nexport async function cacheRobotsTxt(\n  domain: string,\n  rules: RobotsRule[],\n  env: Env,\n): Promise<void> {\n  try {\n    const key = getRobotsTxtCacheKey(domain);\n    await setInCache(key, rules, env, getCacheTTL());\n  } catch (error) {\n    console.warn(\"Failed to save robots.txt to cache:\", error);\n  }\n}\n\n/**\n * Check if vectors exist in cache for a repository\n * @param owner - Repository owner\n * @param repo - Repository name\n * @param env - Environment with Cloudflare bindings\n * @returns Boolean indicating if vectors exist, or null if not in cache\n */\nexport async function getIsIndexedFromCache(\n  owner: string,\n  repo: string,\n  env: Env,\n): Promise<boolean | null> {\n  try {\n    const key = getIsIndexedCacheKey(owner, repo);\n    const result = await getFromCache(key, env);\n    return result as boolean | null;\n  } catch (error) {\n    console.warn(\"Failed to retrieve vector existence from cache:\", error);\n    return null;\n  }\n}\n\n/**\n * Cache whether vectors exist for a repository\n * @param owner - Repository owner\n * @param repo - Repository name\n * @param exists - Boolean indicating if vectors exist\n * @param env - Environment with Cloudflare bindings\n */\nexport async function cacheIsIndexed(\n  owner: string,\n  repo: string,\n  exists: boolean,\n  env: Env,\n): Promise<void> {\n  try {\n    const key = getIsIndexedCacheKey(owner, repo);\n    await setInCache(key, exists, env, getCacheTTL());\n    console.log(`Cached vector existence for ${owner}/${repo}: ${exists}`);\n  } catch (error) {\n    console.warn(\"Failed to save vector existence to cache:\", error);\n  }\n}\n\n/**\n * Fetch URL content with Cloudflare's tiered cache\n * @param url - URL to fetch\n * @param format - Format of the content (json, text)\n * @returns Content from the URL or null on error\n */\nexport async function fetchUrlContent<T extends keyof FormatOptions>({\n  url,\n  format,\n}: {\n  url: string;\n  format: T;\n}): Promise<FormatOptions[T] | null> {\n  try {\n    console.log(`Fetching ${url} with Cloudflare tiered cache`);\n\n    const cfCacheOptions = {\n      cacheEverything: true,\n      cacheTtlByStatus: {\n        \"200-299\": 3600, // Cache successful responses for 1 hour\n        \"404\": 60, // Cache \"Not Found\" responses for 60 seconds\n        \"500-599\": 0, // Do not cache server error responses\n      },\n    };\n\n    // Use Cloudflare's tiered cache for content requests\n    const response = await fetch(url, {\n      cf: cfCacheOptions,\n    });\n\n    // Don't proceed with unsuccessful responses\n    if (!response.ok) {\n      console.log(\n        `Error fetching ${url}: ${response.status} ${response.statusText}`,\n      );\n      return null;\n    }\n\n    // Process the response based on requested format\n    const result =\n      format === \"json\" ? await response.json() : await response.text();\n    return result as FormatOptions[T];\n  } catch (error) {\n    console.warn(`Failed to fetch URL content (${url}):`, error);\n    return null;\n  }\n}\n\n/**\n * Get cached fetchDocumentation result\n * @param owner - Repository owner\n * @param repo - Repository name\n * @param env - Environment with Cloudflare bindings\n * @returns The cached FetchDocumentationResult or null if not found\n */\nexport async function getCachedFetchDocResult(\n  owner: string,\n  repo: string,\n  env: Env,\n): Promise<FetchDocumentationResult | null> {\n  try {\n    const key = getFetchDocCacheKey(owner, repo);\n    const result = await getFromCache(key, env);\n    return result as FetchDocumentationResult | null;\n  } catch (error) {\n    console.warn(\"Failed to retrieve fetchDoc result from cache:\", error);\n    return null;\n  }\n}\n\n/**\n * Cache fetchDocumentation result\n * @param owner - Repository owner\n * @param repo - Repository name\n * @param result - The FetchDocumentationResult to cache\n * @param ttl - Time to live in seconds\n * @param env - Environment with Cloudflare bindings\n */\nexport async function cacheFetchDocResult(\n  owner: string,\n  repo: string,\n  result: FetchDocumentationResult,\n  ttl: number,\n  env: Env,\n): Promise<void> {\n  try {\n    const key = getFetchDocCacheKey(owner, repo);\n    await setInCache(key, result, env, ttl);\n    console.log(\n      `Cached fetchDocumentation result for ${owner}/${repo} with TTL ${ttl}s`,\n    );\n  } catch (error) {\n    console.warn(\"Failed to save fetchDoc result to cache:\", error);\n  }\n}\n"
  },
  {
    "path": "src/api/utils/github.ts",
    "content": "import { cacheFilePath, getCachedFilePath } from \"./cache.js\";\nimport {\n  searchFileByName,\n  githubApiRequest,\n  fetchRawFile,\n} from \"./githubClient.js\";\n\n/**\n * Fetch file content from a specific path in a GitHub repository\n * @param owner - Repository owner\n * @param repo - Repository name\n * @param branch - Branch name (main, master)\n * @param path - File path within the repository\n * @param env - Environment for GitHub token\n * @param useAuth - Whether to use authentication\n * @returns File content or null if not found\n */\nexport async function fetchFileFromGitHub(\n  owner: string,\n  repo: string,\n  branch: string,\n  path: string,\n  env: Env,\n  useAuth = false,\n): Promise<string | null> {\n  return await fetchRawFile(owner, repo, branch, path, env, useAuth);\n}\n\nexport interface GitHubFile {\n  path: string;\n  content: string;\n}\n\n// Helper: search for a file in a GitHub repository using the GitHub Search API\nexport async function searchGitHubRepo(\n  owner: string,\n  repo: string,\n  filename: string,\n  branch: string,\n  env: Env,\n  ctx: ExecutionContext,\n): Promise<GitHubFile | null> {\n  try {\n    const cachedFile = await getCachedFilePath(owner, repo, env);\n    let filePath = cachedFile?.path || \"\";\n\n    if (!filePath) {\n      // Use the centralized GitHub client to search for the file\n      const data = await searchFileByName(filename, owner, repo, env);\n\n      // Handle search failure\n      if (!data) {\n        return null;\n      }\n\n      // Check if we found any matches\n      if (data.total_count === 0 || !data.items || data.items.length === 0) {\n        return null;\n      }\n\n      // Get the first matching file's path\n      filePath = data.items[0]?.path;\n    }\n\n    const content = await fetchFileFromGitHub(\n      owner,\n      repo,\n      branch,\n      filePath,\n      env,\n    );\n\n    if (content) {\n      ctx.waitUntil(\n        cacheFilePath(owner, repo, filename, filePath, branch, env),\n      );\n      return { content, path: filePath };\n    }\n\n    return null;\n  } catch (error) {\n    console.error(\n      `Error searching GitHub repo ${owner}/${repo} for ${filename}:`,\n      error,\n    );\n    return null;\n  }\n}\n\nexport function constructGithubUrl(\n  owner: string,\n  repo: string,\n  branch: string,\n  path: string,\n) {\n  return `https://raw.githubusercontent.com/${owner}/${repo}/${branch}/${path}`;\n}\n\n/**\n * Determines the default branch of a GitHub repository.\n * First tries to get the actual default branch using GitHub API,\n * then falls back to checking if 'main' or 'master' branches exist.\n *\n * @param owner - Repository owner or organization\n * @param repo - Repository name\n * @param env - Environment with API tokens and cache configuration\n * @returns The default branch name\n * @throws Error if the default branch cannot be determined\n */\nexport async function getRepoBranch(\n  owner: string,\n  repo: string,\n  env: CloudflareEnvironment,\n): Promise<string> {\n  try {\n    // First try to get the actual default branch using GitHub API\n    const apiUrl = `https://api.github.com/repos/${owner}/${repo}`;\n    const response = await githubApiRequest(apiUrl, {}, env);\n\n    if (response && response.ok) {\n      const data = (await response.json()) as { default_branch?: string };\n      if (data && data.default_branch) {\n        console.log(\"Default branch found\", data.default_branch);\n        return data.default_branch;\n      }\n    }\n\n    console.error(\n      \"No default branch found, falling back to main/master check\",\n      response,\n    );\n\n    // Fall back to the main/master check if API request fails\n    // Try 'main' branch\n    const mainUrl = constructGithubUrl(owner, repo, \"main\", \"README.md\");\n    const mainResponse = await githubApiRequest(\n      mainUrl,\n      { method: \"HEAD\" },\n      env,\n    );\n\n    if (mainResponse && mainResponse.ok) {\n      return \"main\";\n    }\n\n    // If 'main' branch doesn't exist, try 'master'\n    const masterUrl = constructGithubUrl(owner, repo, \"master\", \"README.md\");\n    const masterResponse = await githubApiRequest(\n      masterUrl,\n      { method: \"HEAD\" },\n      env,\n    );\n\n    if (masterResponse && masterResponse.ok) {\n      return \"master\";\n    }\n\n    // If neither branch exists, throw an error\n    throw new Error(\n      `Could not determine default branch for ${owner}/${repo}. Neither 'main' nor 'master' branches found.`,\n    );\n  } catch (error) {\n    console.error(\n      `Error determining default branch for ${owner}/${repo}:`,\n      error,\n    );\n    // Default to 'main' in case of network errors or other issues\n    // This is a fallback to maintain compatibility with existing code\n    return \"main\";\n  }\n}\n"
  },
  {
    "path": "src/api/utils/githubClient.ts",
    "content": "/**\n * GitHub API client with rate limiting support\n * This file contains utilities for making GitHub API requests with proper rate limiting handling\n */\n\nimport { constructGithubUrl } from \"./github\";\n\n// Default time between API requests in ms (to avoid hitting rate limits)\nconst DEFAULT_DELAY = 1000;\n// Default number of retries for rate-limited requests\nconst MAX_RETRIES = 3;\n\n/**\n * Extract repository context from a GitHub URL\n * This helps provide context for analytics metrics\n */\nfunction extractRepoContextFromUrl(url: string): string {\n  try {\n    // Handle raw.githubusercontent.com URLs\n    if (url.includes(\"raw.githubusercontent.com\")) {\n      const match = url.match(\n        /raw\\.githubusercontent\\.com\\/([^\\/]+)\\/([^\\/]+)/,\n      );\n      if (match) {\n        return `${match[1]}/${match[2]}`;\n      }\n    }\n\n    // Handle api.github.com/repos URLs\n    if (url.includes(\"api.github.com/repos\")) {\n      const match = url.match(/api\\.github\\.com\\/repos\\/([^\\/]+)\\/([^\\/]+)/);\n      if (match) {\n        return `${match[1]}/${match[2]}`;\n      }\n    }\n\n    // Handle api.github.com/search URLs with repo: parameter\n    if (url.includes(\"api.github.com/search\")) {\n      const repoMatch = url.match(/repo:([^\\/+\\s]+)\\/([^\\/+\\s]+)/);\n      if (repoMatch) {\n        return `${repoMatch[1]}/${repoMatch[2]}`;\n      }\n    }\n\n    return \"unknown/unknown\";\n  } catch (error) {\n    console.error(`Error extracting repo context from URL: ${error}`);\n    return \"error/extracting\";\n  }\n}\n\n/**\n * Rate limiting state tracking\n */\ninterface RateLimitInfo {\n  remaining: number;\n  resetTime: Date | null;\n  limit: number;\n}\n\n// Store rate limit information\nlet apiRateLimit: RateLimitInfo = {\n  remaining: 5000, // GitHub API default for unauthenticated requests\n  resetTime: null,\n  limit: 5000,\n};\n\n/**\n * Update rate limit information from GitHub API response headers\n */\nfunction updateRateLimitFromHeaders(headers: Headers): void {\n  const remaining = headers.get(\"x-ratelimit-remaining\");\n  const resetTime = headers.get(\"x-ratelimit-reset\");\n  const limit = headers.get(\"x-ratelimit-limit\");\n\n  if (remaining) {\n    apiRateLimit.remaining = parseInt(remaining, 10);\n  }\n\n  if (resetTime) {\n    apiRateLimit.resetTime = new Date(parseInt(resetTime, 10) * 1000);\n  }\n\n  if (limit) {\n    apiRateLimit.limit = parseInt(limit, 10);\n  }\n\n  console.log(\n    `GitHub API rate limit: ${apiRateLimit.remaining}/${apiRateLimit.limit} remaining, resets at ${apiRateLimit.resetTime}`,\n  );\n}\n\n/**\n * Delay execution to respect rate limits\n */\nasync function respectRateLimits(): Promise<void> {\n  // If we have very few requests remaining, add delay\n  if (apiRateLimit.remaining < 5 && apiRateLimit.resetTime) {\n    const timeUntilReset = apiRateLimit.resetTime.getTime() - Date.now();\n\n    // If reset time is in the future, delay until reset\n    if (timeUntilReset > 0) {\n      console.log(\n        `Rate limit low (${apiRateLimit.remaining} remaining). Waiting ${timeUntilReset}ms until reset`,\n      );\n      await new Promise((resolve) =>\n        setTimeout(resolve, Math.min(timeUntilReset + 1000, 60000)),\n      ); // Max 1 minute wait\n    }\n  } else {\n    // Add a small delay between requests to avoid hitting rate limits\n    await new Promise((resolve) => setTimeout(resolve, DEFAULT_DELAY));\n  }\n}\n\n/**\n * Make a GitHub API request with rate limit handling\n * @param url - API URL to fetch\n * @param options - Fetch options\n * @param env - Environment containing GitHub token if available\n * @param retryCount - Current retry attempt (used internally)\n * @param useAuth - Whether to include authorization header if token is available (default: true)\n * @returns The API response or null if failed\n */\nexport async function githubApiRequest(\n  url: string,\n  options: RequestInit = {},\n  env: CloudflareEnvironment,\n  retryCount = 1,\n  useAuth = true,\n): Promise<Response | null> {\n  try {\n    // Extract repository context for metrics\n    const repoContext = extractRepoContextFromUrl(url);\n\n    // Track GitHub query count using Cloudflare analytics\n    if (env?.CLOUDFLARE_ANALYTICS && retryCount === 0) {\n      env.CLOUDFLARE_ANALYTICS.writeDataPoint({\n        blobs: [url, repoContext],\n        doubles: [1],\n        indexes: [\"github_api_request\"],\n      });\n    }\n\n    // Wait for rate limit if necessary\n    await respectRateLimits();\n\n    // Add GitHub authentication if token is available and useAuth is true\n    const headers = new Headers(options.headers || {});\n    headers.set(\"Accept\", \"application/vnd.github.v3+json\");\n    headers.set(\n      \"User-Agent\",\n      \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/135.0.0.0 Safari/537.36\",\n    );\n\n    if (useAuth && env.GITHUB_TOKEN) {\n      headers.set(\"Authorization\", `token ${env.GITHUB_TOKEN}`);\n    }\n\n    // Configure Cloudflare's tiered cache\n    const cfCacheOptions = {\n      cacheEverything: true,\n      cacheTtlByStatus: {\n        \"200-299\": 3600, // Cache successful responses for 1 hour\n        \"404\": 60, // Cache \"Not Found\" responses for 60 seconds\n        \"500-599\": 0, // Do not cache server error responses\n      },\n    };\n\n    // Make the request with tiered cache\n    const response = await fetch(url, {\n      ...options,\n      headers,\n      credentials: \"omit\", // Avoid CORS issues\n      cf: cfCacheOptions, // Use Cloudflare's tiered cache\n    });\n\n    // Update rate limit info from response headers\n    updateRateLimitFromHeaders(response.headers);\n\n    // Handle rate limiting (status 403 with specific message)\n    if (response.status === 403) {\n      const responseBody = await response.text();\n\n      if (responseBody.includes(\"API rate limit exceeded\")) {\n        console.warn(`GitHub API rate limit exceeded`);\n\n        // Track rate-limited requests with repository context using Cloudflare analytics\n        if (env?.CLOUDFLARE_ANALYTICS) {\n          const repoContext = extractRepoContextFromUrl(url);\n          env.CLOUDFLARE_ANALYTICS.writeDataPoint({\n            blobs: [url, repoContext, responseBody.substring(0, 100)], // First 100 chars of error message\n            doubles: [1, retryCount],\n            indexes: [\"github_rate_limited_request\"],\n          });\n        }\n\n        // If we haven't retried too many times, wait and retry\n        if (retryCount < MAX_RETRIES) {\n          // Calculate wait time (default: wait 60 seconds for rate limits to refresh)\n          const waitTime = apiRateLimit.resetTime\n            ? Math.max(\n                1000,\n                apiRateLimit.resetTime.getTime() - Date.now() + 1000,\n              )\n            : 60000;\n\n          console.log(\n            `Rate limited. Waiting ${waitTime}ms before retry ${retryCount + 1}/${MAX_RETRIES}`,\n          );\n          await new Promise((resolve) => setTimeout(resolve, waitTime));\n\n          // Retry the request\n          return githubApiRequest(url, options, env, retryCount + 1);\n        }\n      }\n    }\n\n    return response;\n  } catch (error) {\n    console.error(`GitHub API request to ${url} failed: ${error}`);\n\n    // Retry on network errors\n    if (retryCount < MAX_RETRIES) {\n      console.log(\n        `Network error. Retrying ${retryCount + 1}/${MAX_RETRIES}...`,\n      );\n      await new Promise((resolve) => setTimeout(resolve, 2000)); // Wait 2 seconds\n      return githubApiRequest(url, options, env, retryCount + 1);\n    }\n\n    return null;\n  }\n}\n\n/**\n * Search for code in a GitHub repository\n * @param query - Search query\n * @param owner - Repository owner\n * @param repo - Repository name\n * @param env - Environment for GitHub token\n * @param page - Page number (1-indexed)\n * @param perPage - Results per page (max 100)\n */\nexport async function searchCode(\n  query: string,\n  owner: string,\n  repo: string,\n  env: Env,\n  page: number = 1,\n  perPage: number = 20,\n): Promise<any> {\n  // GitHub API has a max per_page of 100\n  const validPerPage = Math.min(Math.max(1, perPage), 100);\n\n  const searchUrl = `https://api.github.com/search/code?q=${encodeURIComponent(query)}+repo:${owner}/${repo}&page=${page}&per_page=${validPerPage}`;\n\n  const response = await githubApiRequest(searchUrl, {}, env);\n\n  if (!response || !response.ok) {\n    console.warn(\n      `GitHub API code search failed: ${response?.status} ${response?.statusText}`,\n    );\n    return null;\n  }\n\n  return response.json();\n}\n\n/**\n * Search for a specific filename in a GitHub repository\n * @param filename - Filename to search for\n * @param owner - Repository owner\n * @param repo - Repository name\n * @param env - Environment for GitHub token\n */\nexport async function searchFileByName(\n  filename: string,\n  owner: string,\n  repo: string,\n  env: Env,\n): Promise<any> {\n  const searchUrl = `https://api.github.com/search/code?q=filename:${filename}+repo:${owner}/${repo}`;\n  const response = await githubApiRequest(searchUrl, {}, env);\n\n  if (!response || !response.ok) {\n    console.warn(\n      `GitHub API filename search failed: ${response?.status} ${response?.statusText}`,\n    );\n    return null;\n  }\n\n  return response.json();\n}\n\n/**\n * Fetch raw file content from GitHub\n * @param owner - Repository owner\n * @param repo - Repository name\n * @param branch - Branch name\n * @param path - File path\n * @param env - Environment for GitHub token\n * @param useAuth - Whether to use authentication\n */\nexport async function fetchRawFile(\n  owner: string,\n  repo: string,\n  branch: string,\n  path: string,\n  env: Env,\n  useAuth = false,\n): Promise<string | null> {\n  const url = constructGithubUrl(owner, repo, branch, path);\n\n  // Raw GitHub content doesn't need the GitHub API token\n  // But we still use the client for rate limiting\n  const response = await githubApiRequest(url, {}, env, 0, useAuth);\n\n  if (!response || !response.ok) {\n    return null;\n  }\n\n  return response.text();\n}\n"
  },
  {
    "path": "src/api/utils/helpers.ts",
    "content": "/**\n * Format search results into a readable text format\n * Ensures each documentation entry is properly separated\n * @param results - Array of search results\n * @param query - The original search query\n * @returns Formatted text with search results\n */\nexport function formatSearchResults(\n  results: Array<{ chunk: string; score: number }>,\n  query: string,\n): string {\n  let output = `### Search Results for: \"${query}\"\\n\\n`;\n\n  if (results.length === 0) {\n    return output + \"No results found.\";\n  }\n\n  // Array to keep track of already displayed entries to avoid duplicates\n  const displayedEntries = new Set<string>();\n  let resultCount = 0;\n\n  results.forEach((result, index) => {\n    // Check if this chunk contains multiple documentation entries\n    // Documentation entries typically follow the pattern [Title](URL): Description\n    const entryPattern = /\\[.*?\\]\\(.*?\\):\\s*.*?(?=\\n\\n\\[|$)/gs;\n    const entries = result.chunk.match(entryPattern);\n\n    if (entries && entries.length > 1) {\n      // This chunk contains multiple entries, display each one separately\n      entries.forEach((entry, entryIndex) => {\n        // Skip duplicate entries\n        const normalizedEntry = entry.trim();\n        if (displayedEntries.has(normalizedEntry)) {\n          return;\n        }\n\n        resultCount++;\n        displayedEntries.add(normalizedEntry);\n\n        // Add header context if available\n        let headerContext = \"\";\n        const headerMatch = result.chunk.match(/^(#+\\s+.*?)(?=\\n\\n)/);\n        if (headerMatch) {\n          headerContext = headerMatch[1] + \"\\n\\n\";\n        }\n\n        output += `#### Result ${resultCount} (Score: ${result.score.toFixed(\n          2,\n        )})\\n\\n${headerContext}${normalizedEntry}\\n\\n`;\n\n        // Add separator if not the last entry\n        if (index < results.length - 1 || entryIndex < entries.length - 1) {\n          output += \"---\\n\\n\";\n        }\n      });\n    } else {\n      // Single entry or non-standard format, display the whole chunk\n      resultCount++;\n\n      // Normalize the chunk to avoid duplicates\n      const normalizedChunk = result.chunk.trim();\n      if (displayedEntries.has(normalizedChunk)) {\n        return;\n      }\n\n      displayedEntries.add(normalizedChunk);\n\n      output += `#### Result ${resultCount} (Score: ${result.score.toFixed(\n        2,\n      )})\\n\\n${normalizedChunk}\\n\\n`;\n\n      // Add separator if not the last result\n      if (index < results.length - 1) {\n        output += \"---\\n\\n\";\n      }\n    }\n  });\n\n  return output;\n}\n\n// Helper: fetch a file from a URL.\nexport async function fetchFile(url: string): Promise<string | null> {\n  try {\n    const response = await fetch(url);\n    return response.ok ? await response.text() : null;\n  } catch {\n    return null;\n  }\n}\n"
  },
  {
    "path": "src/api/utils/r2.ts",
    "content": "export async function fetchFileFromR2(\n  owner: string,\n  repo: string,\n  filename: string,\n  env: CloudflareEnvironment,\n): Promise<string | null> {\n  if (owner && repo && env.DOCS_BUCKET) {\n    try {\n      const obj = await env.DOCS_BUCKET.get(\n        owner + \"/\" + repo + \"/\" + filename,\n      );\n      if (obj) {\n        return await new Response(obj.body).text();\n      } else {\n        console.log(\"Didn't find docs file in r2\");\n      }\n    } catch (error) {\n      console.error(\"Failed to fetch docs file from r2\", error);\n    }\n  }\n\n  return null;\n}\n"
  },
  {
    "path": "src/api/utils/robotsTxt.ts",
    "content": "import {\n  cacheRobotsTxt,\n  fetchUrlContent,\n  getCachedRobotsTxt,\n} from \"./cache.js\";\n/**\n * Interface for robots.txt rule\n */\nexport interface RobotsRule {\n  userAgent: string;\n  disallow: string[];\n  allow: string[];\n}\n\n/**\n * Parse robots.txt content into structured rules\n * @param content - The content of robots.txt\n * @returns Array of parsed rules\n */\nfunction parseRobotsTxt(content: string): RobotsRule[] {\n  const lines = content.split(\"\\n\");\n  const rules: RobotsRule[] = [];\n\n  let currentRule: RobotsRule | null = null;\n\n  for (const line of lines) {\n    const trimmedLine = line.trim();\n\n    // Skip comments and empty lines\n    if (!trimmedLine || trimmedLine.startsWith(\"#\")) {\n      continue;\n    }\n\n    // Split into directive and value\n    const [directive, ...valueParts] = trimmedLine.split(\":\");\n    const value = valueParts.join(\":\").trim();\n\n    if (!directive || !value) {\n      continue;\n    }\n\n    const directiveLower = directive.trim().toLowerCase();\n\n    // Start a new rule when encountering a User-agent directive\n    if (directiveLower === \"user-agent\") {\n      if (currentRule && currentRule.userAgent) {\n        rules.push(currentRule);\n      }\n      currentRule = { userAgent: value, disallow: [], allow: [] };\n    }\n    // Add disallow paths\n    else if (directiveLower === \"disallow\" && currentRule) {\n      currentRule.disallow.push(value);\n    }\n    // Add allow paths\n    else if (directiveLower === \"allow\" && currentRule) {\n      currentRule.allow.push(value);\n    }\n  }\n\n  // Add the last rule if exists\n  if (currentRule && currentRule.userAgent) {\n    rules.push(currentRule);\n  }\n\n  return rules;\n}\n\n/**\n * Check if a path is allowed according to robots.txt rules\n * @param rules - The parsed robots.txt rules\n * @param path - The path to check\n * @returns boolean indicating if access is allowed\n */\nfunction isPathAllowed(rules: RobotsRule[], path: string): boolean {\n  // Path should start with a slash\n  if (!path.startsWith(\"/\")) {\n    path = \"/\" + path;\n  }\n\n  // First find the applicable rule set (for * or for our user agent)\n  // We'll use * since we don't specify a specific user agent\n  let applicableRules = rules.find((rule) => rule.userAgent === \"*\");\n\n  // If no wildcard rules, check if any rules apply at all\n  if (!applicableRules && rules.length > 0) {\n    applicableRules = rules[0]; // Use the first rule as default\n  }\n\n  // If no applicable rules or empty rules, allow access\n  if (\n    !applicableRules ||\n    (applicableRules.disallow.length === 0 &&\n      applicableRules.allow.length === 0)\n  ) {\n    return true;\n  }\n\n  // Check specific allow rules (these take precedence over disallow)\n  for (const allowPath of applicableRules.allow) {\n    if (path.startsWith(allowPath)) {\n      return true;\n    }\n  }\n\n  // Check disallow rules\n  for (const disallowPath of applicableRules.disallow) {\n    if (disallowPath === \"/\" || path.startsWith(disallowPath)) {\n      return false;\n    }\n  }\n\n  // Default to allow if no disallow rules match\n  return true;\n}\n\n/**\n * Check if a specific URL is allowed according to robots.txt rules\n * @param domain - The domain to check\n * @param path - The complete path to check including the file (should start with /)\n * @param env - Environment with Cloudflare bindings\n * @returns boolean indicating if access is allowed\n */\nexport async function checkRobotsTxt(\n  domain: string,\n  path: string,\n  env: Env,\n): Promise<boolean> {\n  try {\n    const cachedRules = await getCachedRobotsTxt(domain, env);\n\n    if (cachedRules) {\n      console.log(\n        `Using cached robots.txt rules for ${domain} to check ${path}`,\n      );\n      return isPathAllowed(cachedRules, path);\n    }\n\n    // Fetch robots.txt if not in cache\n    const robotsTxtUrl = `https://${domain}/robots.txt`;\n    console.log(`Fetching robots.txt from ${robotsTxtUrl}`);\n    const response = await fetch(robotsTxtUrl);\n\n    // If robots.txt doesn't exist or can't be accessed, allow access by default\n    if (!response.ok) {\n      console.log(`No robots.txt found for ${domain} or couldn't be accessed`);\n      // Cache empty rules for domains without robots.txt\n      await cacheRobotsTxt(domain, [], env);\n      return true;\n    }\n\n    const content = await response.text();\n    const rules = parseRobotsTxt(content);\n\n    // Cache the parsed rules in Upstash\n    await cacheRobotsTxt(domain, rules, env);\n    console.log(`Cached robots.txt rules for ${domain}`);\n\n    return isPathAllowed(rules, path);\n  } catch (error) {\n    console.warn(`Error checking robots.txt for ${domain}:`, error);\n    // In case of errors, allow access by default\n    return true;\n  }\n}\n\n/**\n * Safely fetch a file after checking robots.txt permissions\n * @param url - Complete URL to fetch\n * @param env - Environment with Cloudflare bindings\n * @returns File content or null if not allowed or not found\n */\nexport async function fetchFileWithRobotsTxtCheck(\n  url: string,\n  env: Env,\n): Promise<{ content: string | null; blockedByRobots: boolean }> {\n  try {\n    const urlObj = new URL(url);\n    // Create path from URL path + filename\n    const path = urlObj.pathname;\n\n    // Check robots.txt before attempting to fetch\n    const isAllowed = await checkRobotsTxt(urlObj.hostname, path, env);\n\n    if (!isAllowed) {\n      console.log(`Access to ${url} disallowed by robots.txt`);\n      return { content: null, blockedByRobots: true };\n    }\n\n    // If allowed, use cached content or fetch\n    const content = await fetchUrlContent({\n      url,\n      format: \"text\",\n    });\n\n    return {\n      content: content,\n      blockedByRobots: false,\n    };\n  } catch (error) {\n    console.warn(`Error fetching ${url}: ${error}`);\n    return { content: null, blockedByRobots: false };\n  }\n}\n"
  },
  {
    "path": "src/api/utils/vectorStore.ts",
    "content": "// Define a generic Dict type since we can't import it directly\ntype Dict = { [key: string]: any };\n\n// TTL for vector entries in milliseconds (1 day)\nconst VECTOR_TTL = 60 * 60 * 24 * 1 * 1000;\n\n// Vectorize interface to match the Cloudflare API\ninterface VectorizeVector {\n  id: string;\n  values: number[];\n  metadata?: Record<string, any>;\n}\n\ninterface VectorizeMatch {\n  id: string;\n  score: number;\n  metadata?: Record<string, any>;\n}\n\ninterface VectorizeMatches {\n  matches: VectorizeMatch[];\n  count: number;\n}\n\ninterface Vectorize {\n  query(\n    vector: number[],\n    options?: {\n      topK?: number;\n      filter?: Record<string, any>;\n      returnValues?: boolean;\n      returnMetadata?: boolean | string;\n      namespace?: string;\n    },\n  ): Promise<VectorizeMatches>;\n\n  upsert(vectors: VectorizeVector[]): Promise<any>;\n\n  deleteByIds(ids: string[]): Promise<any>;\n}\n\n/**\n * Generate a namespace for a repository\n * Each repository gets its own namespace to improve query performance\n * @param owner - Repository owner\n * @param repo - Repository name\n * @returns Namespace string\n */\nexport function getRepoNamespace(owner: string, repo: string): string {\n  // Format: owner:repo\n  // This creates a unique namespace per repository\n  return `${owner}:${repo}`;\n}\n\n/**\n * Generate a vector ID for a specific document chunk\n * @param owner - Repository owner\n * @param repo - Repository name\n * @param chunkIndex - Index of the chunk\n * @returns Unique ID for the vector\n */\nexport function getVectorId(\n  owner: string,\n  repo: string,\n  chunkIndex: number,\n): string {\n  // With namespaces, vector IDs only need to be unique within the namespace\n  // So we can use simpler IDs\n  return `chunk:${chunkIndex}`;\n}\n\n/**\n * Get simple embeddings for text with improved topical differentiation\n * In a production environment, you would use a proper embedding service like OpenAI\n * @param text - Text to generate embeddings for\n * @returns Vector embedding (simplified)\n */\nexport async function getEmbeddings(text: string): Promise<number[]> {\n  // This is an improved embedding function that creates a better vector representation\n  // Still simple but designed to create more topical differentiation\n\n  const view = new Float32Array(1024);\n\n  // Extract key terms and topics from the text\n  const keywordExtraction = extractKeywords(text);\n\n  // Use a more sophisticated hash function that weights important terms\n  const termWeights = keywordExtraction.reduce(\n    (acc, item) => {\n      acc[item.term] = item.score;\n      return acc;\n    },\n    {} as { [key: string]: number },\n  );\n\n  // Fill the vector with values based on term importance and positions\n  const terms = Object.keys(termWeights);\n\n  // Fill base vector with simple hash\n  for (let i = 0; i < view.length; i++) {\n    // Simple hash function for demo purposes\n    let hash = 0;\n    for (let j = 0; j < text.length; j += 10) {\n      // Sample text at intervals\n      hash = (hash << 5) - hash + text.charCodeAt(j) + i;\n      hash = hash & hash; // Convert to 32bit integer\n    }\n    // Normalize between -0.5 and 0.5 (base values)\n    view[i] = (hash % 100) / 200;\n  }\n\n  // Enhance with keyword features\n  for (const term of terms) {\n    // Use term to seed a portion of the vector\n    const weight = termWeights[term];\n    const termHash = simpleHash(term);\n    const startPos = termHash % 900; // Avoid last section\n\n    // Enhance specific positions based on term\n    for (let i = 0; i < Math.min(term.length * 4, 50); i++) {\n      const pos = (startPos + i * 3) % 900;\n      // Add weighted value based on term importance\n      view[pos] += weight * 0.5 * (Math.sin(termHash + i) * 0.5 + 0.5);\n    }\n  }\n\n  // Normalize vector to unit length (important for cosine similarity)\n  normalizeVector(view);\n\n  return Array.from(view);\n}\n\n/**\n * Extract keywords and their importance from text\n */\nfunction extractKeywords(text: string): Array<{ term: string; score: number }> {\n  const results: Array<{ term: string; score: number }> = [];\n  const words = text\n    .toLowerCase()\n    .split(/\\W+/)\n    .filter((w) => w.length > 3);\n\n  // Count word frequencies\n  const wordCounts: { [key: string]: number } = {};\n  for (const word of words) {\n    wordCounts[word] = (wordCounts[word] || 0) + 1;\n  }\n\n  // Find interesting terms (high frequency or within heading patterns)\n  const headings = text.match(/#{1,6}\\s+([^\\n]+)/g) || [];\n  const headingTerms = new Set<string>();\n\n  // Extract terms from headings with higher weight\n  for (const heading of headings) {\n    const cleanHeading = heading.replace(/^#+\\s+/, \"\").toLowerCase();\n    const terms = cleanHeading.split(/\\W+/).filter((w) => w.length > 3);\n    terms.forEach((t) => headingTerms.add(t));\n  }\n\n  // Calculate term scores based on frequency and position\n  const totalWords = words.length;\n\n  for (const word in wordCounts) {\n    // Skip common words or very rare words\n    if (commonWords.has(word) || wordCounts[word] < 2) continue;\n\n    // Calculate score based on frequency\n    let score = wordCounts[word] / totalWords;\n\n    // Boost score for terms in headings\n    if (headingTerms.has(word)) {\n      score *= 3;\n    }\n\n    // Boost for terms in the first paragraph (likely important)\n    const firstPara = text.split(\"\\n\\n\")[0].toLowerCase();\n    if (firstPara.includes(word)) {\n      score *= 1.5;\n    }\n\n    results.push({ term: word, score });\n  }\n\n  // Sort by score and take top 20\n  results.sort((a, b) => b.score - a.score);\n  return results.slice(0, 20);\n}\n\n/**\n * Normalize a vector to unit length\n */\nfunction normalizeVector(vector: Float32Array): void {\n  // Calculate magnitude\n  let magnitude = 0;\n  for (let i = 0; i < vector.length; i++) {\n    magnitude += vector[i] * vector[i];\n  }\n  magnitude = Math.sqrt(magnitude);\n\n  // Normalize if magnitude isn't zero\n  if (magnitude > 0) {\n    for (let i = 0; i < vector.length; i++) {\n      vector[i] = vector[i] / magnitude;\n    }\n  }\n}\n\n/**\n * Simple string hash function\n */\nfunction simpleHash(str: string): number {\n  let hash = 0;\n  for (let i = 0; i < str.length; i++) {\n    hash = (hash << 5) - hash + str.charCodeAt(i);\n    hash = hash & hash; // Convert to 32bit integer\n  }\n  return Math.abs(hash);\n}\n\n/**\n * Common English words to filter out\n */\nconst commonWords = new Set([\n  \"the\",\n  \"and\",\n  \"that\",\n  \"have\",\n  \"for\",\n  \"not\",\n  \"with\",\n  \"you\",\n  \"this\",\n  \"but\",\n  \"from\",\n  \"they\",\n  \"would\",\n  \"there\",\n  \"their\",\n  \"what\",\n  \"about\",\n  \"which\",\n  \"when\",\n  \"will\",\n  \"there\",\n  \"their\",\n  \"your\",\n  \"some\",\n  \"them\",\n  \"other\",\n  \"than\",\n  \"then\",\n  \"into\",\n  \"could\",\n  \"because\",\n  \"been\",\n  \"more\",\n  \"these\",\n  \"those\",\n  \"only\",\n]);\n\n/**\n * Specialized chunker for README files that preserves heading context with content\n * Ensures logical paragraph groups and sections remain coherent\n * @param text - README text in markdown format\n * @param fileName - Optional file name to determine special chunking behavior\n * @returns Array of text chunks with preserved structure\n */\nexport function chunkReadme(text: string, fileName?: string): string[] {\n  // Check if this appears to be a README format\n  const hasMultipleHeadings = (text.match(/^#+\\s+.+/gm) || []).length > 1;\n  const hasCodeBlocks = text.includes(\"```\");\n  const isReadmeLike =\n    hasMultipleHeadings &&\n    (hasCodeBlocks || text.includes(\"* \") || text.includes(\"- \"));\n\n  // If not README-like, use the regular chunking\n  if (!isReadmeLike) {\n    return chunkText(text);\n  }\n\n  // Check if this is a special case file (like llms.txt) that needs list-item level chunking\n  const isSpecialListFile = fileName?.toLowerCase().includes(\"llms.txt\");\n\n  // Track headers and their content\n  interface HeaderSection {\n    level: number;\n    title: string;\n    content: string;\n    lineIndex: number;\n  }\n\n  const sections: HeaderSection[] = [];\n  let currentSection: HeaderSection | null = null;\n  let mainHeaderContent = \"\";\n  let mainTitle = \"\";\n\n  // Helper function to detect badge lines (markdown image links with badge URLs)\n  function isBadgeLine(line: string): boolean {\n    // Detect badge-specific patterns (shield.io, badge URLs, image links in a row)\n    return (\n      /!\\[.*\\]\\(.*badge.*\\)/.test(line) ||\n      /!\\[.*\\]\\(.*shield\\.io.*\\)/.test(line) ||\n      (/\\[!\\[.*\\]\\(.*\\)\\]\\(.*\\)/.test(line) &&\n        (line.includes(\"badge\") || line.includes(\"shield\"))) ||\n      /img\\.shields\\.io/.test(line) ||\n      (line.includes(\"<img\") &&\n        (line.includes(\"badge\") || line.includes(\"shield\")))\n    );\n  }\n\n  // First pass: Extract headers and their content\n  const lines = text.split(\"\\n\");\n  let inBadgeSection = false;\n  let badgeSectionEndLine = 0;\n  let skipToLine = -1;\n\n  // Detect the initial badge/logo section which often appears at the start of READMEs\n  for (let i = 0; i < Math.min(20, lines.length); i++) {\n    if (\n      (lines[i].includes('<p align=\"center\">') ||\n        lines[i].includes('align=\"center\"') ||\n        lines[i].includes('<div align=\"center\">')) &&\n      i + 5 < lines.length\n    ) {\n      // Check if next few lines contain images, badges, or links\n      let hasImageOrBadge = false;\n      for (let j = i; j < Math.min(i + 15, lines.length); j++) {\n        if (\n          lines[j].includes(\"<img\") ||\n          lines[j].includes(\"![\") ||\n          isBadgeLine(lines[j]) ||\n          (lines[j].includes(\"<a href=\") && lines[j].includes(\"</a>\"))\n        ) {\n          hasImageOrBadge = true;\n          badgeSectionEndLine = Math.max(badgeSectionEndLine, j + 1);\n        }\n      }\n\n      if (hasImageOrBadge) {\n        inBadgeSection = true;\n      }\n    }\n  }\n\n  // Process each line\n  for (let i = 0; i < lines.length; i++) {\n    // Skip if we're still processing a multi-line element\n    if (i < skipToLine) {\n      continue;\n    }\n\n    const line = lines[i];\n\n    // Skip initial badge/logo section\n    if (i <= badgeSectionEndLine && inBadgeSection) {\n      continue;\n    }\n\n    // Check if this is a heading line\n    const headerMatch = line.match(/^(#{1,6})\\s+(.+)/);\n\n    if (headerMatch) {\n      // This is a heading - create a new section\n      const level = headerMatch[1].length;\n      const title = headerMatch[2].trim();\n\n      // If we had a previous section, finalize it\n      if (currentSection) {\n        sections.push(currentSection);\n      } else if (mainHeaderContent && !currentSection) {\n        // Save content that appeared before any headers as the main description\n        mainTitle = title;\n        mainHeaderContent = mainHeaderContent.trim();\n      }\n\n      // Start a new section\n      currentSection = {\n        level,\n        title,\n        content: `${\"#\".repeat(level)} ${title}`,\n        lineIndex: i,\n      };\n    } else if (currentSection) {\n      // We're in a section, add content\n\n      // Skip badge lines\n      if (isBadgeLine(line)) {\n        continue;\n      }\n\n      // Process code blocks as a unit\n      if (line.trim().startsWith(\"```\")) {\n        let codeBlock = line + \"\\n\";\n        let j = i + 1;\n\n        // Collect the entire code block\n        while (j < lines.length && !lines[j].trim().startsWith(\"```\")) {\n          codeBlock += lines[j] + \"\\n\";\n          j++;\n        }\n\n        if (j < lines.length) {\n          // Add closing delimiter\n          codeBlock += lines[j] + \"\\n\";\n        }\n\n        currentSection.content += \"\\n\\n\" + codeBlock;\n        skipToLine = j + 1;\n        continue;\n      }\n\n      // Add the line to current section with proper spacing\n      if (line.trim() !== \"\") {\n        if (\n          currentSection.content ===\n          `${\"#\".repeat(currentSection.level)} ${currentSection.title}`\n        ) {\n          currentSection.content += \"\\n\\n\" + line;\n        } else {\n          currentSection.content += \"\\n\" + line;\n        }\n      } else if (\n        currentSection.content !==\n        `${\"#\".repeat(currentSection.level)} ${currentSection.title}`\n      ) {\n        // Add empty line if not right after the header\n        currentSection.content += \"\\n\";\n      }\n    } else {\n      // Content before first header - collect as main description\n      if (line.trim() !== \"\" && !isBadgeLine(line)) {\n        if (mainHeaderContent) {\n          mainHeaderContent += \"\\n\" + line;\n        } else {\n          mainHeaderContent += line;\n        }\n      }\n    }\n  }\n\n  // Add the last section if there is one\n  if (currentSection) {\n    sections.push(currentSection);\n  }\n\n  // Group sections by their hierarchy\n  const chunks: string[] = [];\n\n  // Add the main content as first chunk if it exists\n  if (mainHeaderContent) {\n    if (mainTitle) {\n      chunks.push(`# ${mainTitle}\\n\\n${mainHeaderContent}`);\n    } else {\n      chunks.push(mainHeaderContent);\n    }\n  }\n\n  // Process sections into chunks\n  let currentChunk = \"\";\n  let currentLevel = 0;\n  let currentTitle = \"\";\n\n  for (const section of sections) {\n    // New top-level section always starts a new chunk\n    if (section.level === 1 || section.level === 2) {\n      if (currentChunk) {\n        chunks.push(currentChunk.trim());\n      }\n      currentChunk = section.content;\n      currentLevel = section.level;\n      currentTitle = section.title;\n      continue;\n    }\n\n    // If this is a subsection of the current section, add it to the current chunk\n    if (section.level > currentLevel) {\n      currentChunk += \"\\n\\n\" + section.content;\n    } else {\n      // Same level section or higher than current section (but not level 1-2)\n      // Check if current chunk is getting too large\n      if (currentChunk.length > 2000) {\n        chunks.push(currentChunk.trim());\n        currentChunk = section.content;\n        currentLevel = section.level;\n        currentTitle = section.title;\n      } else {\n        // Add to current chunk with proper separation\n        currentChunk += \"\\n\\n\" + section.content;\n      }\n    }\n  }\n\n  // Add the final chunk\n  if (currentChunk) {\n    chunks.push(currentChunk.trim());\n  }\n\n  // Filter out chunks that are too small or empty\n  return chunks.filter((chunk) => chunk.trim().length > 50);\n}\n\n/**\n * Process documentation text into chunks for vector storage\n * Uses specialized chunking based on content type\n * @param text - Documentation text\n * @param fileName - Optional file name to determine special chunking behavior\n * @returns Array of text chunks\n */\nexport function chunkDocumentation(text: string, fileName?: string): string[] {\n  // First check if this is a structured document with list items (like llms.txt)\n  if (fileName?.toLowerCase().includes(\"llms.txt\")) {\n    try {\n      // For llms.txt files, each list item should be treated as its own chunk\n      // with section header context\n      const structuredChunks = chunkStructuredDocs(text);\n      if (structuredChunks.length > 0) {\n        return structuredChunks;\n      }\n    } catch (error) {\n      console.warn(\n        \"Structured documentation chunking failed for llms.txt, trying README chunker\",\n      );\n    }\n  }\n\n  // Then try README-specific chunking\n  try {\n    const readmeChunks = chunkReadme(text, fileName);\n    if (readmeChunks.length > 0) {\n      return readmeChunks;\n    }\n  } catch (error) {\n    console.warn(\"README chunking failed, trying next chunker\");\n  }\n\n  // Then try structured documentation chunking as fallback\n  try {\n    const structuredChunks = chunkStructuredDocs(text);\n    if (structuredChunks.length > 0) {\n      return structuredChunks;\n    }\n  } catch (error) {\n    console.warn(\n      \"Structured documentation chunking failed, falling back to default chunker\",\n    );\n  }\n\n  // Fall back to the regular chunking algorithm\n  return chunkText(text);\n}\n\n/**\n * Process documentation text into chunks for vector storage with improved boundaries\n * Ensures chunks respect document structure like paragraphs and headings\n * @param text - Documentation text\n * @param maxChunkSize - Maximum size of each chunk (in characters)\n * @param minChunkSize - Minimum size to consider a chunk complete (in characters)\n * @returns Array of text chunks\n */\nexport function chunkText(\n  text: string,\n  maxChunkSize: number = 1500,\n  minChunkSize: number = 500,\n): string[] {\n  const chunks: string[] = [];\n\n  // Split by markdown headings (## Heading)\n  const headingPattern = /\\n(#{1,6}\\s+[^\\n]+)\\n/g;\n  const sections = text.split(headingPattern);\n\n  let currentChunk = \"\";\n  let headingText = \"\";\n\n  // Process each section\n  for (let i = 0; i < sections.length; i++) {\n    const section = sections[i];\n\n    // Check if this is a heading\n    if (i > 0 && i % 2 === 1) {\n      headingText = section.trim();\n      continue;\n    }\n\n    // This is content - process it with the preceding heading\n    const contentWithHeading = headingText\n      ? `${headingText}\\n\\n${section}`\n      : section;\n\n    // If content is short enough, add as single chunk\n    if (contentWithHeading.length <= maxChunkSize) {\n      if (contentWithHeading.trim().length > 0) {\n        chunks.push(contentWithHeading.trim());\n      }\n      headingText = \"\";\n      continue;\n    }\n\n    // If content is long, split by paragraphs\n    const paragraphs = contentWithHeading.split(/\\n\\n+/);\n\n    currentChunk = \"\";\n\n    for (const paragraph of paragraphs) {\n      const trimmedParagraph = paragraph.trim();\n\n      // Skip empty paragraphs\n      if (!trimmedParagraph) continue;\n\n      // If adding this paragraph would exceed max size and we already have content\n      if (\n        currentChunk &&\n        currentChunk.length + trimmedParagraph.length + 2 > maxChunkSize\n      ) {\n        // Only add the chunk if it meets minimum size\n        if (currentChunk.length >= minChunkSize) {\n          chunks.push(currentChunk.trim());\n          currentChunk = trimmedParagraph;\n        } else {\n          // If current chunk is too small, continue adding content\n          currentChunk += `\\n\\n${trimmedParagraph}`;\n        }\n      } else {\n        // Add paragraph with double newline if not the first paragraph\n        if (currentChunk) {\n          currentChunk += `\\n\\n${trimmedParagraph}`;\n        } else {\n          currentChunk = trimmedParagraph;\n        }\n      }\n    }\n\n    // Add final chunk from section if it has content\n    if (currentChunk.trim().length >= minChunkSize) {\n      chunks.push(currentChunk.trim());\n    }\n\n    headingText = \"\";\n  }\n\n  return chunks;\n}\n\n// Define our metadata structure as a record with string keys and any values\ninterface VectorMetadata {\n  chunk: string;\n  owner: string;\n  repo: string;\n  chunkIndex: number;\n  [key: string]: any; // Add index signature to make it compatible with Dict\n}\n\n/**\n * Store documentation content in vector store\n * Using repository-specific namespaces and distinguishing documents via metadata and IDs\n * @param owner - Repository owner\n * @param repo - Repository name\n * @param content - Documentation content\n * @param fileName - documentation file name\n * @param vectorize - Cloudflare Vectorize client (optional)\n * @returns Number of vectors stored\n */\nexport async function storeDocumentationVectors(\n  owner: string,\n  repo: string,\n  content: string,\n  fileName: string,\n  vectorize?: Vectorize,\n): Promise<number> {\n  try {\n    console.log(`Storing vectors for ${owner}/${repo}`);\n\n    // Check if Vectorize is available\n    if (!vectorize) {\n      console.warn(\"Vectorize binding not available. Skipping vector storage.\");\n      return 0;\n    }\n\n    // Generate namespace for this repository\n    const namespace = getRepoNamespace(owner, repo);\n    console.log(`Using namespace: ${namespace}`);\n\n    // First delete any existing vectors for this repo's namespace\n    try {\n      // Query existing vectors in this namespace\n      const existingVectors = await vectorize.query(\n        await getEmbeddings(\"\"), // Empty query will match based on namespace\n        {\n          namespace: namespace,\n          returnValues: false,\n          topK: 100, // Respecting Vectorize's limit of 100 max results\n        },\n      );\n\n      if (existingVectors?.matches?.length > 0) {\n        // Extract IDs of vectors to delete\n        const idsToDelete = existingVectors.matches.map((match) => match.id);\n\n        // Delete the vectors by IDs\n        await vectorize.deleteByIds(idsToDelete);\n        console.log(\n          `Deleted ${idsToDelete.length} existing vectors for ${namespace}`,\n        );\n      } else {\n        console.log(`No existing vectors found for ${namespace}`);\n      }\n    } catch (error) {\n      console.log(`Error managing existing vectors: ${error}`);\n    }\n\n    // Use specialized documentation chunking for better results\n    const chunks = chunkDocumentation(content, fileName);\n    console.log(`Created ${chunks.length} chunks for ${owner}/${repo}`);\n\n    // Generate embeddings and upsert vectors\n    const vectors = [];\n\n    for (let i = 0; i < chunks.length; i++) {\n      const chunk = chunks[i];\n      const embedding = await getEmbeddings(chunk);\n      const id = getVectorId(owner, repo, i);\n\n      vectors.push({\n        id,\n        values: embedding,\n        namespace: namespace, // Add namespace to each vector\n        metadata: {\n          chunk,\n          owner,\n          repo,\n          chunkIndex: i,\n          timestamp: Date.now(), // e.g., \"2025-04-06T20:52:37.123Z\"\n        },\n      });\n    }\n\n    // Upsert vectors in batch (Cloudflare Vectorize supports batch operations)\n    await vectorize.upsert(vectors);\n    console.log(`Stored ${vectors.length} vectors in namespace ${namespace}`);\n\n    return vectors.length;\n  } catch (error) {\n    console.error(`Error storing vectors for ${owner}/${repo}:`, error);\n    throw error;\n  }\n}\n\n/**\n * Generate combined keyword&pattern score for text matching a specific query intent\n * Used in post-processing to re-rank results beyond vector similarity\n */\nfunction calculateKeywordMatchScore(text: string, query: string): number {\n  // Lower-case for case-insensitive matching\n  const lowerText = text.toLowerCase();\n  const lowerQuery = query.toLowerCase();\n\n  let score = 0;\n\n  // Penalize license sections, which are rarely relevant\n  if (\n    /^#+\\s+license\\b/im.test(text) ||\n    text.toLowerCase().includes(\"mit license\")\n  ) {\n    score -= 0.3;\n  }\n\n  // Penalize badge sections which are usually not informative for queries\n  if (\n    /\\]\\(https?:\\/\\/[^)]*badge[^)]*\\)/i.test(text) &&\n    text.split(\"\\n\").length < 8\n  ) {\n    score -= 0.2;\n  }\n\n  // Boost sections that likely contain actual information\n  if (\n    /^#+\\s+(what is|getting started|introduction|usage|examples|installation)/im.test(\n      text,\n    )\n  ) {\n    score += 0.3;\n  }\n\n  // Extract terms from query (removing stop words)\n  const queryTerms = lowerQuery\n    .split(/\\W+/)\n    .filter((term) => term.length > 2 && !commonWords.has(term));\n\n  // Count term occurrences in text\n  for (const term of queryTerms) {\n    // Use regex to find whole word matches\n    const regex = new RegExp(`\\\\b${term}\\\\b`, \"gi\");\n    const matches = lowerText.match(regex) || [];\n\n    // Add score based on frequency\n    score += matches.length * 0.05;\n  }\n\n  // Boost for heading matches (much higher boost than before)\n  const headings = text.match(/#{1,6}\\s+([^\\n]+)/g) || [];\n  for (const heading of headings) {\n    const lowerHeading = heading.toLowerCase();\n    for (const term of queryTerms) {\n      if (lowerHeading.includes(term)) {\n        score += 0.25; // Higher boost for term in heading\n      }\n    }\n  }\n\n  // Check for query term proximity (terms appearing close together)\n  if (queryTerms.length > 1) {\n    // Find all occurrences of first query term\n    for (let i = 0; i < lowerText.length; i++) {\n      const termIndex = lowerText.indexOf(queryTerms[0], i);\n      if (termIndex === -1) break;\n\n      // Look for other query terms within 50 chars\n      const proximityWindow = lowerText.substring(termIndex, termIndex + 100);\n      let proximityMatches = 0;\n\n      for (let j = 1; j < queryTerms.length; j++) {\n        if (proximityWindow.includes(queryTerms[j])) {\n          proximityMatches++;\n        }\n      }\n\n      // Add score based on proximity matches\n      score += (proximityMatches / (queryTerms.length - 1)) * 0.15;\n\n      // Move past this occurrence\n      i = termIndex;\n    }\n  }\n\n  return score;\n}\n\n/**\n * Search for relevant documentation\n * With improved post-processing for better relevance ranking\n * Uses namespace-based querying for better performance\n * @param owner - Repository owner\n * @param repo - Repository name\n * @param query - Search query\n * @param limit - Maximum number of results to return\n * @param vectorize - Cloudflare Vectorize client (optional)\n * @returns Array of relevant document chunks with scores\n */\nexport async function searchDocumentation(\n  owner: string,\n  repo: string,\n  query: string,\n  limit: number = 5,\n  vectorize: Vectorize,\n): Promise<Array<{ chunk: string; score: number }>> {\n  try {\n    // Check if Vectorize is available\n    if (!vectorize) {\n      console.warn(\"Vectorize binding not available. Returning empty results.\");\n      return [];\n    }\n\n    // Generate namespace for this repository\n    const namespace = getRepoNamespace(owner, repo);\n    console.log(`Searching in namespace: ${namespace}`);\n\n    const queryEmbedding = await getEmbeddings(query);\n\n    // Query vectors using Cloudflare Vectorize with namespace\n    const results = await vectorize.query(queryEmbedding, {\n      topK: limit,\n      namespace: namespace, // Use namespace instead of filter\n      returnValues: false, // We don't need the vector values back\n      filter: {\n        timestamp: { $gt: Date.now() - VECTOR_TTL }, // Only keep recent vectors\n      },\n      returnMetadata: true, // We need the metadata for chunks\n    });\n\n    console.log(\n      `Found ${results?.matches?.length || 0} results in namespace ${namespace}`,\n    );\n\n    if (!results || !results.matches || results.matches.length === 0) {\n      console.warn(`No results found in namespace ${namespace}`);\n      return [];\n    }\n\n    // Enhanced ranking: combine vector similarity with keyword matching\n    const enhancedResults = results.matches.map((match) => {\n      const metadata = match.metadata as Record<string, any>;\n      const chunk = metadata?.chunk || \"\";\n\n      // Calculate keyword match score\n      const keywordScore = calculateKeywordMatchScore(chunk, query);\n\n      // Combine scores (vector similarity + keyword matching)\n      // Normalize vector similarity from [-1,1] to [0,1] range if using cosine similarity\n      const normalizedVectorScore = (match.score + 1) / 2;\n\n      // Combined score gives weight to both vector similarity and keyword matches\n      const combinedScore = normalizedVectorScore * 0.6 + keywordScore * 0.4;\n\n      return {\n        chunk,\n        vectorScore: match.score,\n        keywordScore,\n        combinedScore,\n      };\n    });\n\n    // Sort by combined score\n    enhancedResults.sort((a, b) => b.combinedScore - a.combinedScore);\n\n    // Return with the combined score for better differentiation\n    return enhancedResults.slice(0, limit).map((result) => ({\n      chunk: result.chunk,\n      score: result.combinedScore,\n    }));\n  } catch (error) {\n    console.error(`Error searching documentation for ${owner}/${repo}:`, error);\n    return [];\n  }\n}\n\n/**\n * Specialized chunker for documentation that maintains document structure\n * Each chunk contains one documentation entry along with its section context\n * @param text - Documentation text in markdown format\n * @returns Array of text chunks with preserved structure\n */\nexport function chunkStructuredDocs(text: string): string[] {\n  const chunks: string[] = [];\n  const lines = text.split(\"\\n\");\n\n  // Step 1: Extract all headers and build a header hierarchy\n  interface HeaderInfo {\n    level: number;\n    title: string;\n    lineIndex: number;\n  }\n\n  const headers: HeaderInfo[] = [];\n\n  lines.forEach((line, index) => {\n    const headerMatch = line.match(/^(#{1,6})\\s+(.*)/);\n    if (headerMatch) {\n      headers.push({\n        level: headerMatch[1].length,\n        title: headerMatch[2].trim(),\n        lineIndex: index,\n      });\n    }\n  });\n\n  // If there's at least one header, create a chunk with the document title and description\n  if (headers.length > 0) {\n    const mainHeader = headers[0];\n    let mainDescription = \"\";\n\n    // Collect the main description until we hit another header or a blank line followed by a list item\n    for (let i = mainHeader.lineIndex + 1; i < lines.length; i++) {\n      const line = lines[i].trim();\n\n      // Stop if we hit another header\n      if (line.match(/^#{1,6}\\s+/)) break;\n\n      // Stop if we hit a blank line followed by a list item\n      if (\n        line === \"\" &&\n        i + 1 < lines.length &&\n        (lines[i + 1].trim().startsWith(\"- \") ||\n          lines[i + 1].trim().startsWith(\"* \"))\n      )\n        break;\n\n      if (line !== \"\") {\n        mainDescription += mainDescription ? \"\\n\" + line : line;\n      }\n    }\n\n    // Create a chunk with main title and description\n    if (mainDescription) {\n      chunks.push(`# ${mainHeader.title}\\n\\n${mainDescription}`);\n    }\n  }\n\n  // Find the current section header for context\n  const getCurrentHeader = (lineIndex: number): string => {\n    let headerContext = \"\";\n    let currentHeaderLevel = Number.MAX_SAFE_INTEGER;\n\n    for (const header of headers) {\n      if (header.lineIndex < lineIndex && header.level <= currentHeaderLevel) {\n        headerContext = `${\"#\".repeat(header.level)} ${header.title}`;\n        currentHeaderLevel = header.level;\n\n        // If it's the main h1 header, we don't need to go further\n        // This ensures we get the nearest section header, not the document title\n        if (\n          header.level === 1 &&\n          headers.some((h) => h.level === 2 && h.lineIndex < lineIndex)\n        ) {\n          continue;\n        }\n\n        // We found a direct section header (h2 or h3)\n        if (header.level === 2 || header.level === 3) {\n          break;\n        }\n      }\n    }\n\n    return headerContext;\n  };\n\n  // Step 2: Process content based on document type\n  // For llms.txt files, we need to handle both bullet point lists and non-bullet point format\n\n  // First, try to find non-bullet point entries like:\n  // [Title](URL): Description\n  let i = 0;\n  while (i < lines.length) {\n    const line = lines[i].trim();\n\n    // Check for section headers\n    const headerMatch = line.match(/^#{1,6}\\s+/);\n    if (headerMatch) {\n      // Skip headers for now - we'll handle them separately\n      i++;\n      continue;\n    }\n\n    // Match link pattern at the start of a line with a description\n    // Matches [Title](URL): Description pattern\n    const linkDescMatch = line.match(/^\\[([^\\]]+)\\]\\(([^)]+)\\)(\\s*:\\s*.*)?/);\n    if (linkDescMatch) {\n      // Found a link with description pattern\n      let entryContent = line;\n      let j = i + 1;\n\n      // Look for continuation of this entry\n      while (j < lines.length) {\n        const nextLine = lines[j].trim();\n\n        // Stop if we hit a header, a new link pattern, or a list item\n        if (\n          nextLine.match(/^#{1,6}\\s+/) ||\n          nextLine.match(/^\\[([^\\]]+)\\]\\(([^)]+)\\)/) ||\n          nextLine.startsWith(\"- \") ||\n          nextLine.startsWith(\"* \")\n        ) {\n          break;\n        }\n\n        // Add non-empty lines to the entry\n        if (nextLine !== \"\") {\n          entryContent += \"\\n\" + nextLine;\n          j++;\n        } else {\n          // Empty line\n          j++;\n\n          // Check if the next line starts a new entry\n          if (j < lines.length) {\n            const lineAfterBlank = lines[j].trim();\n            if (\n              lineAfterBlank.match(/^#{1,6}\\s+/) ||\n              lineAfterBlank.match(/^\\[([^\\]]+)\\]\\(([^)]+)\\)/) ||\n              lineAfterBlank.startsWith(\"- \") ||\n              lineAfterBlank.startsWith(\"* \")\n            ) {\n              break;\n            }\n          }\n        }\n      }\n\n      // Get the current header context\n      const headerContext = getCurrentHeader(i);\n\n      // Create a chunk with header context + entry\n      if (headerContext) {\n        chunks.push(`${headerContext}\\n\\n${entryContent}`);\n      } else {\n        chunks.push(entryContent);\n      }\n\n      i = j;\n      continue;\n    }\n\n    // Look for list items (bullet points)\n    if (line.startsWith(\"- \") || line.startsWith(\"* \")) {\n      // Process list items as individual chunks\n\n      // Start with the current line as the item content\n      let itemContent = line;\n      let j = i + 1;\n\n      // Look for continuation of the description on subsequent lines\n      while (j < lines.length) {\n        const nextLine = lines[j].trim();\n\n        // Stop if we hit another list item or header\n        if (\n          nextLine.startsWith(\"- \") ||\n          nextLine.startsWith(\"* \") ||\n          nextLine.match(/^#{1,6}\\s+/) ||\n          nextLine.match(/^\\[([^\\]]+)\\]\\(([^)]+)\\)/)\n        ) {\n          break;\n        }\n\n        // Add non-empty lines to description\n        if (nextLine !== \"\") {\n          itemContent += \"\\n\" + nextLine;\n          j++;\n        } else {\n          // Skip empty line\n          j++;\n\n          // But check if next line is a new item or different content\n          if (j < lines.length) {\n            const lineAfterBlank = lines[j].trim();\n            if (\n              lineAfterBlank.startsWith(\"- \") ||\n              lineAfterBlank.startsWith(\"* \") ||\n              lineAfterBlank.match(/^#{1,6}\\s+/) ||\n              lineAfterBlank.match(/^\\[([^\\]]+)\\]\\(([^)]+)\\)/)\n            ) {\n              break;\n            }\n          }\n        }\n      }\n\n      // Get header context for this item\n      const headerContext = getCurrentHeader(i);\n\n      // Create a separate chunk for this list item with its section context\n      if (headerContext) {\n        chunks.push(`${headerContext}\\n\\n${itemContent}`);\n      } else {\n        chunks.push(itemContent);\n      }\n\n      i = j;\n      continue;\n    }\n\n    // Regular content - move to next line\n    i++;\n  }\n\n  // Filter out duplicate chunks and very short chunks\n  const uniqueChunks = Array.from(new Set(chunks))\n    .filter((chunk) => chunk.length > 10)\n    .map((chunk) => chunk.trim());\n\n  // If we didn't find any chunks with our approach, fall back to standard chunking\n  if (uniqueChunks.length === 0) {\n    return chunkText(text);\n  }\n\n  return uniqueChunks;\n}\n"
  },
  {
    "path": "src/index.ts",
    "content": "import { McpAgent } from \"agents/mcp\";\nimport { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport { getMcpTools } from \"./api/tools\";\nimport { createRequestHandler } from \"react-router\";\nimport {\n  generateBadgeResponse,\n  getRepoViewCount,\n  withViewTracking,\n} from \"./api/utils/badge\";\nimport { getRepoData } from \"./shared/repoData\";\nimport { handleR2TestSetup } from \"./api/test-setup\";\n\nexport { ViewCounterDO } from \"./api/utils/ViewCounterDO\";\n\ndeclare global {\n  interface CloudflareEnvironment extends Env {\n    CLOUDFLARE_ANALYTICS?: any;\n    OPENAI_API_KEY?: string;\n    ANTHROPIC_API_KEY?: string;\n    XAI_API_KEY?: string;\n  }\n}\n\ndeclare module \"react-router\" {\n  export interface AppLoadContext {\n    cloudflare: {\n      env: CloudflareEnvironment;\n      ctx: ExecutionContext;\n    };\n  }\n}\n\nconst requestHandler = createRequestHandler(\n  () => import(\"virtual:react-router/server-build\"),\n  import.meta.env.MODE,\n);\n\n// Create CORS preflight response\nconst handleCorsPreflightRequest = (): Response => {\n  return new Response(null, {\n    status: 204, // No content\n    headers: {\n      \"Access-Control-Allow-Origin\": \"*\",\n      \"Access-Control-Allow-Methods\": \"GET, POST, OPTIONS\",\n      \"Access-Control-Allow-Headers\": \"*\",\n      \"Access-Control-Allow-Credentials\": \"true\",\n      \"Access-Control-Max-Age\": \"86400\", // 24 hours\n    },\n  });\n};\n\n// Handle badge request for repository\nasync function handleBadgeRequest(\n  request: Request,\n  env: CloudflareEnvironment,\n  owner: string,\n  repo: string,\n): Promise<Response> {\n  const url = new URL(request.url);\n  const color = url.searchParams.get(\"color\") || \"aquamarine\";\n\n  const count = await getRepoViewCount(env, owner, repo);\n  return generateBadgeResponse(count, color);\n}\nexport class MyMCP extends McpAgent {\n  server = new McpServer({\n    name: \"GitMCP\",\n    version: \"1.1.0\",\n  });\n\n  async init() {\n    const requestUrl = this.props.requestUrl as string;\n    const url = new URL(requestUrl);\n    const host = url.host;\n\n    if (!url || !host) {\n      throw new Error(\"Invalid request: Missing host or URL\");\n    }\n\n    // clean search params\n    url.searchParams.forEach((_, key) => {\n      if (key !== \"sessionId\") {\n        url.searchParams.delete(key);\n      }\n    });\n    // clean hash\n    url.hash = \"\";\n    const canonicalUrl = url.toString();\n\n    const env = this.env as CloudflareEnvironment;\n    const ctx = this.ctx;\n\n    const repoData = getRepoData({\n      requestHost: host,\n      requestUrl: canonicalUrl,\n    });\n\n    getMcpTools(env, host, canonicalUrl, ctx).forEach((tool) => {\n      this.server.tool(\n        tool.name,\n        tool.description,\n        tool.paramsSchema,\n        withViewTracking(env, ctx, repoData, async (args: any) => {\n          return tool.cb(args);\n        }),\n        tool.annotations ? { annotations: tool.annotations } : undefined,\n      );\n    });\n  }\n}\n\n// Export a request handler that checks the transport header\nexport default {\n  async fetch(request: Request, env: any, ctx: any) {\n    const url = new URL(request.url);\n    const pathname = url.pathname;\n\n    if (\n      env.ENVIRONMENT === \"test\" &&\n      request.method === \"POST\" &&\n      pathname === \"/api/setup-r2-for-tests\"\n    ) {\n      return await handleR2TestSetup(env as CloudflareEnvironment);\n    }\n\n    // Handle CORS preflight requests\n    if (request.method === \"OPTIONS\") {\n      return handleCorsPreflightRequest();\n    }\n\n    // Handle badge requests\n    if (pathname.startsWith(\"/badge/\")) {\n      const parts = pathname.split(\"/\").filter(Boolean);\n      if (parts.length >= 3 && parts[0] === \"badge\") {\n        const owner = parts[1];\n        const repo = parts[2];\n        return handleBadgeRequest(request, env, owner, repo);\n      }\n    }\n\n    const isStreamMethod =\n      request.headers.get(\"accept\")?.includes(\"text/event-stream\") &&\n      !!url.pathname &&\n      url.pathname !== \"/\";\n    const isMessage =\n      request.method === \"POST\" &&\n      url.pathname.includes(\"/message\") &&\n      url.pathname !== \"/message\";\n\n    ctx.props.requestUrl = request.url;\n\n    if (isMessage) {\n      return await MyMCP.serveSSE(\"/*\").fetch(request, env, ctx);\n    }\n\n    if (isStreamMethod) {\n      const isSse = request.method === \"GET\";\n      if (isSse) {\n        return await MyMCP.serveSSE(\"/*\").fetch(request, env, ctx);\n      } else {\n        return await MyMCP.serve(\"/*\").fetch(request, env, ctx);\n      }\n    } else {\n      // Default to serving the regular page\n      return requestHandler(request, {\n        cloudflare: { env, ctx },\n      });\n    }\n  },\n};\n"
  },
  {
    "path": "src/shared/nameUtils.ts",
    "content": "/**\n * Generates a consistent server name based on repository name\n * @param repo - The repository name\n * @returns A server name for use in MCP clients\n */\nexport function generateServerName(repo: string | null | undefined): string {\n  return repo ? `${repo} Docs` : \"MCP Docs\";\n}\n"
  },
  {
    "path": "src/shared/repoData.test.ts",
    "content": "import { getRepoData, getRepoDataFromUrl, HOST_TEMP_URL } from \"./repoData\";\nimport type { RepoData } from \"./repoData\";\nimport { describe, it, expect, vi, beforeEach, afterEach } from \"vitest\";\n\nconst testCases: {\n  title: string;\n  input: { requestHost: string; requestUrls: string[] };\n  expected: RepoData;\n}[] = [\n  {\n    title: \"git-mcp.idosalomon.workers.dev\",\n    input: {\n      requestHost: \"git-mcp.idosalomon.workers.dev\",\n      requestUrls: [\n        \"https://git-mcp.idosalomon.workers.dev/mrdoob/three.js\",\n        \"/mrdoob/three.js\",\n      ],\n    },\n    expected: {\n      owner: \"mrdoob\",\n      repo: \"three.js\",\n      urlType: \"github\",\n      host: \"git-mcp.idosalomon.workers.dev\",\n    },\n  },\n  {\n    title: \"gitmcp.io\",\n    input: {\n      requestHost: \"gitmcp.io\",\n      requestUrls: [\"https://gitmcp.io/mrdoob/three.js\", \"/mrdoob/three.js\"],\n    },\n    expected: {\n      owner: \"mrdoob\",\n      repo: \"three.js\",\n      urlType: \"github\",\n      host: \"gitmcp.io\",\n    },\n  },\n  {\n    title: \"myOwner.gitmcp.io\",\n    input: {\n      requestHost: \"ownerName.gitmcp.io\",\n      requestUrls: [\"https://ownerName.gitmcp.io/repoName\", \"/repoName\"],\n    },\n    expected: {\n      owner: \"ownerName\",\n      repo: \"repoName\",\n      urlType: \"subdomain\",\n      host: \"ownerName.gitmcp.io\",\n    },\n  },\n  {\n    title: \"generic (docs)\",\n    input: {\n      requestHost: \"gitmcp.io\",\n      requestUrls: [\"https://gitmcp.io/docs\", \"/docs\"],\n    },\n    expected: {\n      owner: \"docs\",\n      repo: null,\n      urlType: \"github\",\n      host: \"gitmcp.io\",\n    },\n  },\n  {\n    title: \"generic (docs) subdomain\",\n    input: {\n      requestHost: \"docs.gitmcp.io\",\n      requestUrls: [\"https://docs.gitmcp.io/\"],\n    },\n    expected: {\n      owner: \"docs\",\n      repo: null,\n      urlType: \"subdomain\",\n      host: \"docs.gitmcp.io\",\n    },\n  },\n  {\n    title: HOST_TEMP_URL,\n    input: {\n      requestHost: HOST_TEMP_URL,\n      requestUrls: [\n        `https://${HOST_TEMP_URL}/myOwner/myRepo`,\n        `/myOwner/myRepo`,\n      ],\n    },\n    expected: {\n      owner: \"myOwner\",\n      repo: \"myRepo\",\n      urlType: \"github\",\n      host: HOST_TEMP_URL,\n    },\n  },\n  {\n    title: \"unknown\",\n    input: {\n      requestHost: \"test.com\",\n      requestUrls: [\"https://test.com/myOwner/myRepo\", \"/myOwner/myRepo\"],\n    },\n    expected: {\n      owner: null,\n      repo: null,\n      urlType: \"unknown\",\n      host: \"test.com\",\n    },\n  },\n  {\n    title: \"localhost\",\n    input: {\n      requestHost: \"localhost\",\n      requestUrls: [\n        \"http://localhost:3000/mrdoob/three.js\",\n        \"/mrdoob/three.js\",\n      ],\n    },\n    expected: {\n      owner: \"mrdoob\",\n      repo: \"three.js\",\n      urlType: \"github\",\n      host: \"localhost\",\n    },\n  },\n];\n\ndescribe(\"RepoData\", () => {\n  testCases.forEach((testCase) => {\n    describe(`should return the correct repo data for ${testCase.title}`, () => {\n      testCase.input.requestUrls.forEach((requestUrl) => {\n        it(`should return the correct repo data for ${testCase.input.requestHost} + ${requestUrl}`, () => {\n          const result = getRepoData({\n            requestHost: testCase.input.requestHost,\n            requestUrl,\n          });\n          expect(result).toEqual(testCase.expected);\n        });\n      });\n    });\n  });\n});\n\nconst flatTestCases = {\n  \"microsoft/playwright-mcp\": [\n    \"https://github.com/microsoft/playwright-mcp\",\n    \"https://github.com/microsoft/playwright-mcp/blob/main/src/mcp-server.ts\",\n    \"https://microsoft.github.io/playwright-mcp\",\n    \"https://microsoft.github.io/playwright-mcp/blob/main/src/mcp-server.ts\",\n    \"https://gitmcp.io/microsoft/playwright-mcp\",\n    \"https://gitmcp.io/microsoft/playwright-mcp/blob/main/src/mcp-server.ts\",\n    \"https://microsoft.gitmcp.io/playwright-mcp\",\n    \"https://microsoft.gitmcp.io/playwright-mcp/blob/main/src/mcp-server.ts\",\n    \"github.com/microsoft/playwright-mcp\",\n    \"github.com/microsoft/playwright-mcp/blob/main/src/mcp-server.ts\",\n    \"microsoft.github.io/playwright-mcp\",\n    \"microsoft.github.io/playwright-mcp/blob/main/src/mcp-server.ts\",\n    \"gitmcp.io/microsoft/playwright-mcp\",\n    \"gitmcp.io/microsoft/playwright-mcp/blob/main/src/mcp-server.ts\",\n    \"microsoft.gitmcp.io/playwright-mcp\",\n    \"microsoft.gitmcp.io/playwright-mcp/blob/main/src/mcp-server.ts\",\n    \"microsoft/playwright-mcp\",\n    \"http://localhost:3000/microsoft/playwright-mcp\",\n    \"localhost:3000/microsoft/playwright-mcp/blob/main/src/mcp-server.ts\",\n    `${HOST_TEMP_URL}/microsoft/playwright-mcp`,\n  ],\n  \"null/null\": [\n    \"microsoft.gitrmcp.io/playwright-mcp/blob/main/src/mcp-server.ts\",\n    \"localhost:a/microsoft/playwright-mcp/blob/main/src/mcp-server.ts\",\n  ],\n  \"docs/null\": [\n    \"docs.gitmcp.io\",\n    \"docs.github.io\",\n    \"gitmcp.io/docs\",\n    \"localhost:3000/docs\",\n  ],\n};\ndescribe(\"getRepoDataFromUrl\", () => {\n  Object.entries(flatTestCases).forEach(([testCase, urls]) => {\n    it(`should return the correct repo data for ${testCase}`, () => {\n      urls.forEach((url) => {\n        const result = getRepoDataFromUrl(url);\n        expect(`${result.owner}/${result.repo ?? null}`).toEqual(testCase);\n      });\n    });\n  });\n});\n"
  },
  {
    "path": "src/shared/repoData.ts",
    "content": "export type UrlType = \"subdomain\" | \"github\" | \"unknown\";\nexport type MinimalRepoData = {\n  owner: string | null;\n  repo: string | null;\n};\n\nexport type RepoData = MinimalRepoData & {\n  host: string;\n  urlType: UrlType;\n};\nexport type RequestData = {\n  requestHost: string;\n  requestUrl?: string;\n};\nexport type LogData = RepoData & RequestData;\n\nexport function getRepoData(requestData: RequestData): RepoData {\n  const { requestHost, requestUrl } = requestData;\n\n  // Parse the URL if provided\n  const logData: LogData = {\n    owner: null,\n    repo: null,\n    host: requestHost,\n    urlType: \"unknown\",\n    requestUrl,\n    requestHost,\n  };\n  const protocol = requestHost.includes(\"localhost\") ? \"http\" : \"https\";\n  let fullUrl = new URL(`${protocol}://${requestHost}`);\n  if (requestUrl) {\n    if (requestUrl.startsWith(\"/\")) {\n      fullUrl = new URL(`${protocol}://${requestHost}${requestUrl}`);\n    } else if (requestUrl.startsWith(\"http\")) {\n      fullUrl = new URL(requestUrl);\n    } else {\n      fullUrl = new URL(`${protocol}://${requestUrl}`);\n    }\n  }\n  const path = fullUrl.pathname.split(\"/\").filter(Boolean).join(\"/\");\n\n  // Check for subdomain pattern: {subdomain}.gitmcp.io/{path}\n  if (requestHost.includes(\".gitmcp.io\")) {\n    const subdomain = requestHost.split(\".\")[0];\n    logData.owner = subdomain;\n    logData.repo = path;\n    logData.urlType = \"subdomain\";\n    log(\"getRepoDataLog\", JSON.stringify(logData, null, 2));\n\n    if (!subdomain && !path) {\n      console.error(\"Invalid repository data:\", logData);\n      throw new Error(\n        `Invalid repository data: ${JSON.stringify(logData, null, 2)}`,\n      );\n    }\n\n    return {\n      owner: subdomain,\n      repo: path || null,\n      host: requestHost,\n      urlType: \"subdomain\",\n    };\n  }\n  // Check for github repo pattern: gitmcp.io/{owner}/{repo}, HOST_TEMP_URL/{owner}/{repo},\n  // or git-mcp-git-{preview}-git-mcp.vercel.app/{owner}/{repo}\n  else if (\n    requestHost === \"gitmcp.io\" ||\n    requestHost === HOST_TEMP_URL ||\n    requestHost === \"git-mcp.idosalomon.workers.dev\" ||\n    requestHost.includes(\"localhost\")\n  ) {\n    // Extract owner/repo from path\n    const splitPath = path.split(\"/\");\n    const owner = splitPath.at(0) ?? null;\n    let repo = splitPath.at(1) ?? null;\n    // FIXME: this is a hack to support the chat page\n    if (owner == \"docs\" && repo == \"chat\") {\n      repo = null;\n    }\n    logData.owner = owner;\n    logData.repo = repo;\n    logData.urlType = \"github\";\n    log(\"getRepoDataLog\", JSON.stringify(logData, null, 2));\n\n    if (!owner && !repo) {\n      console.error(\"Invalid repository data:\", logData);\n      throw new Error(\n        `Invalid repository data: ${JSON.stringify(logData, null, 2)}`,\n      );\n    }\n\n    return {\n      owner,\n      repo,\n      host: requestHost,\n      urlType: \"github\",\n    };\n  }\n\n  logData.urlType = \"unknown\";\n  log(\"getRepoDataLog\", JSON.stringify(logData, null, 2));\n\n  return {\n    owner: null,\n    repo: null,\n    host: requestHost,\n    urlType: \"unknown\",\n  };\n}\n\nfunction log(...args: any[]) {\n  console.log(...args);\n}\n\nexport const HOST_TEMP_URL = \"remote-mcp-server-cf.idosalomon.workers.dev\";\n\nexport function getRepoDataFromUrl(url: string): MinimalRepoData {\n  // Handle simple owner/repo format\n  if (!url.includes(\"/\") && !url.includes(\".\")) {\n    return { owner: null, repo: null };\n  }\n\n  // Remove protocol if present\n  const urlWithoutProtocol = url.replace(/^https?:\\/\\//, \"\");\n\n  const urlReference = urlWithoutProtocol\n    .replace(\".github.io\", \".gitmcp.io\")\n    .replace(/^github\\.com/, \"gitmcp.io\")\n    .replace(HOST_TEMP_URL, \"gitmcp.io\")\n    .replace(\"git-mcp.idosalomon.workers.dev\", \"gitmcp.io\")\n    .replace(/^localhost:?[0-9]+/, \"gitmcp.io\");\n\n  // Different URL patterns\n  const patterns = [\n    // gitmcp.io/owner/repo\n    /^(?:www\\.)?gitmcp\\.io\\/([^\\/]+)\\/([^\\/]+)/,\n    // owner.gitmcp.io/repo\n    /^(?:www\\.)?([^\\/]+)\\.gitmcp\\.io\\/([^\\/]+)/,\n    // owner.gitmcp.io\n    /^(?:www\\.)?([^\\/]+)\\.gitmcp\\.io/,\n    // gitmcp.io/docs\n    /^(?:www\\.)?gitmcp\\.io\\/(docs)/,\n    // Simple owner/repo format\n    /^([a-zA-Z0-9_-]+)\\/([a-zA-Z0-9_-]+)/,\n  ];\n\n  for (const pattern of patterns) {\n    const match = urlReference.match(pattern);\n    if (match) {\n      return { owner: match[1], repo: match[2] };\n    }\n  }\n\n  // Default fallback\n  return { owner: null, repo: null };\n}\n"
  },
  {
    "path": "src/shared/urlUtils.ts",
    "content": "export function removeLeadingUnderscore(url: string) {\n  const urlObj = new URL(url);\n  let pathname = urlObj.pathname;\n  // remove leading /_/\n  pathname = pathname.slice(2);\n  const urlObjWithoutLeadingUnderscore = new URL(pathname, urlObj.origin);\n  return urlObjWithoutLeadingUnderscore.toString();\n}\n"
  },
  {
    "path": "src/test/ViewCounterDO.test.ts",
    "content": "import { describe, it, expect, vi, beforeEach } from \"vitest\";\nimport { ViewCounterDO } from \"../api/utils/ViewCounterDO\";\n\ndescribe(\"ViewCounterDO\", () => {\n  // Mock for DurableObjectState\n  const mockStorage = {\n    get: vi.fn(),\n    put: vi.fn(),\n  };\n\n  const mockState = {\n    storage: mockStorage,\n  };\n\n  let viewCounter: ViewCounterDO;\n\n  beforeEach(() => {\n    vi.resetAllMocks();\n    viewCounter = new ViewCounterDO(mockState as unknown as DurableObjectState);\n  });\n\n  describe(\"fetch\", () => {\n    it(\"should increment counter on POST request\", async () => {\n      // Setup mocks\n      mockStorage.get.mockResolvedValue(new Map([[\"test-repo\", 5]]));\n\n      // Create a test request\n      const request = new Request(\"https://counter/test-repo\", {\n        method: \"POST\",\n      });\n\n      // Call the fetch method\n      const response = await viewCounter.fetch(request);\n      const data = await response.json();\n\n      // Verify results\n      expect(mockStorage.get).toHaveBeenCalledWith(\"counts\");\n      expect(mockStorage.put).toHaveBeenCalledWith(\"counts\", expect.any(Map));\n      expect(response.status).toBe(200);\n      expect(data).toEqual({ count: 6 });\n\n      // Verify the value was updated in the map\n      const updatedMap = mockStorage.put.mock.calls[0][1];\n      expect(updatedMap.get(\"test-repo\")).toBe(6);\n    });\n\n    it(\"should initialize counter to 1 on first POST request\", async () => {\n      // Setup mocks\n      mockStorage.get.mockResolvedValue(null); // No existing counts\n\n      // Create a test request\n      const request = new Request(\"https://counter/new-repo\", {\n        method: \"POST\",\n      });\n\n      // Call the fetch method\n      const response = await viewCounter.fetch(request);\n      const data = await response.json();\n\n      // Verify results\n      expect(response.status).toBe(200);\n      expect(data).toEqual({ count: 1 });\n\n      // Verify a new map was created with the correct value\n      const newMap = mockStorage.put.mock.calls[0][1];\n      expect(newMap.get(\"new-repo\")).toBe(1);\n    });\n\n    it(\"should get counter value on GET request\", async () => {\n      // Setup mocks\n      mockStorage.get.mockResolvedValue(new Map([[\"test-repo\", 42]]));\n\n      // Create a test request\n      const request = new Request(\"https://counter/test-repo\", {\n        method: \"GET\",\n      });\n\n      // Call the fetch method\n      const response = await viewCounter.fetch(request);\n      const data = await response.json();\n\n      // Verify results\n      expect(mockStorage.get).toHaveBeenCalledWith(\"counts\");\n      expect(response.status).toBe(200);\n      expect(data).toEqual({ count: 42 });\n    });\n\n    it(\"should return 0 for non-existent repo on GET request\", async () => {\n      // Setup mocks\n      mockStorage.get.mockResolvedValue(new Map()); // Empty map\n\n      // Create a test request\n      const request = new Request(\"https://counter/non-existent-repo\", {\n        method: \"GET\",\n      });\n\n      // Call the fetch method\n      const response = await viewCounter.fetch(request);\n      const data = await response.json();\n\n      // Verify results\n      expect(response.status).toBe(200);\n      expect(data).toEqual({ count: 0 });\n    });\n\n    it(\"should return 400 for missing repo key\", async () => {\n      // Create a test request with no path\n      const request = new Request(\"https://counter/\", {\n        method: \"GET\",\n      });\n\n      // Call the fetch method\n      const response = await viewCounter.fetch(request);\n\n      // Verify results\n      expect(response.status).toBe(400);\n    });\n\n    it(\"should return 405 for unsupported methods\", async () => {\n      // Create a test request with DELETE method\n      const request = new Request(\"https://counter/test-repo\", {\n        method: \"DELETE\",\n      });\n\n      // Call the fetch method\n      const response = await viewCounter.fetch(request);\n\n      // Verify results\n      expect(response.status).toBe(405);\n    });\n  });\n});\n"
  },
  {
    "path": "src/test/badge.test.ts",
    "content": "import { describe, it, expect, vi, beforeEach } from \"vitest\";\nimport {\n  generateBadgeResponse,\n  getRepoViewCount,\n  incrementRepoViewCount,\n  withViewTracking,\n} from \"../api/utils/badge\";\n\ndescribe(\"Badge utilities\", () => {\n  const mockStub = {\n    fetch: vi.fn(),\n  };\n\n  const mockId = { name: \"test-id\" };\n\n  const mockNamespace = {\n    idFromName: vi.fn().mockReturnValue(mockId),\n    get: vi.fn().mockReturnValue(mockStub),\n  };\n\n  const mockEnv = {\n    VIEW_COUNTER: mockNamespace,\n  } as unknown as CloudflareEnvironment;\n\n  const mockCtx = {\n    waitUntil: vi.fn(),\n  };\n\n  beforeEach(() => {\n    vi.resetAllMocks();\n    // Ensure mockNamespace.idFromName returns mockId\n    mockNamespace.idFromName.mockReturnValue(mockId);\n    // Ensure mockNamespace.get returns mockStub\n    mockNamespace.get.mockReturnValue(mockStub);\n  });\n\n  describe(\"incrementRepoViewCount\", () => {\n    it(\"should increment count via Durable Object\", async () => {\n      const mockResponse = new Response(JSON.stringify({ count: 42 }));\n      mockStub.fetch.mockResolvedValue(mockResponse);\n\n      const result = await incrementRepoViewCount(mockEnv, \"owner\", \"repo\");\n\n      expect(mockNamespace.idFromName).toHaveBeenCalledWith(\"owner/repo\");\n      expect(mockNamespace.get).toHaveBeenCalledWith(mockId);\n      expect(mockStub.fetch).toHaveBeenCalledWith(\n        \"https://counter/owner/repo\",\n        {\n          method: \"POST\",\n          signal: expect.any(AbortSignal),\n        },\n      );\n      expect(result).toBe(42);\n    });\n\n    it(\"should handle errors gracefully\", async () => {\n      mockStub.fetch.mockRejectedValue(new Error(\"Fetch error\"));\n\n      const result = await incrementRepoViewCount(mockEnv, \"owner\", \"repo\");\n\n      expect(result).toBe(0);\n    });\n\n    it(\"should handle non-ok responses\", async () => {\n      const mockResponse = new Response(\"Error\", { status: 500 });\n      mockStub.fetch.mockResolvedValue(mockResponse);\n\n      const result = await incrementRepoViewCount(mockEnv, \"owner\", \"repo\");\n\n      expect(result).toBe(0);\n    });\n  });\n\n  describe(\"getRepoViewCount\", () => {\n    it(\"should get count via Durable Object\", async () => {\n      const mockResponse = new Response(JSON.stringify({ count: 42 }));\n      mockStub.fetch.mockResolvedValue(mockResponse);\n\n      const result = await getRepoViewCount(mockEnv, \"owner\", \"repo\");\n\n      expect(mockNamespace.idFromName).toHaveBeenCalledWith(\"owner/repo\");\n      expect(mockNamespace.get).toHaveBeenCalledWith(mockId);\n      expect(mockStub.fetch).toHaveBeenCalledWith(\n        \"https://counter/owner/repo\",\n        {\n          method: \"GET\",\n          signal: expect.any(AbortSignal),\n        },\n      );\n      expect(result).toBe(42);\n    });\n\n    it(\"should handle errors gracefully\", async () => {\n      mockStub.fetch.mockRejectedValue(new Error(\"Fetch error\"));\n\n      const result = await getRepoViewCount(mockEnv, \"owner\", \"repo\");\n\n      expect(result).toBe(0);\n    });\n\n    it(\"should handle non-ok responses\", async () => {\n      const mockResponse = new Response(\"Error\", { status: 500 });\n      mockStub.fetch.mockResolvedValue(mockResponse);\n\n      const result = await getRepoViewCount(mockEnv, \"owner\", \"repo\");\n\n      expect(result).toBe(0);\n    });\n  });\n\n  describe(\"withViewTracking\", () => {\n    it(\"should track views when owner and repo are provided\", async () => {\n      // Mock the increment function\n      const incrementSpy = vi\n        .spyOn(await import(\"../api/utils/badge\"), \"incrementRepoViewCount\")\n        .mockResolvedValue(1);\n\n      // Create a mock original callback\n      const originalCallback = vi.fn().mockResolvedValue(\"result\");\n\n      // Create the wrapped callback\n      const repoData = { owner: \"idosal\", repo: \"git-mcp\" };\n      const wrappedCallback = withViewTracking(\n        mockEnv,\n        mockCtx,\n        repoData,\n        originalCallback,\n      );\n\n      // Call the wrapped callback\n      const result = await wrappedCallback({ test: \"args\" });\n\n      // Check that waitUntil was called\n      expect(mockCtx.waitUntil).toHaveBeenCalled();\n\n      // Check that the original callback was called with the correct args\n      expect(originalCallback).toHaveBeenCalledWith({ test: \"args\" });\n\n      // Check that the result was passed through\n      expect(result).toBe(\"result\");\n\n      // Restore the original implementation\n      incrementSpy.mockRestore();\n    });\n\n    it(\"should not track views when owner or repo is missing\", async () => {\n      // Create a mock original callback\n      const originalCallback = vi.fn().mockResolvedValue(\"result\");\n\n      // Create the wrapped callback with missing repo\n      const repoData = { owner: \"owner\", repo: null };\n      const wrappedCallback = withViewTracking(\n        mockEnv,\n        mockCtx,\n        repoData,\n        originalCallback,\n      );\n\n      // Call the wrapped callback\n      await wrappedCallback({ test: \"args\" });\n\n      // Check that waitUntil was not called\n      expect(mockCtx.waitUntil).not.toHaveBeenCalled();\n\n      // Check that the original callback was still called\n      expect(originalCallback).toHaveBeenCalledWith({ test: \"args\" });\n    });\n\n    it(\"should handle context without waitUntil\", async () => {\n      // Create a mock original callback\n      const originalCallback = vi.fn().mockResolvedValue(\"result\");\n\n      // Create the wrapped callback\n      const repoData = { owner: \"idosal\", repo: \"git-mcp\" };\n      const wrappedCallback = withViewTracking(\n        mockEnv,\n        {},\n        repoData,\n        originalCallback,\n      );\n\n      // Call the wrapped callback\n      await wrappedCallback({ test: \"args\" });\n\n      // Original callback should still be called\n      expect(originalCallback).toHaveBeenCalledWith({ test: \"args\" });\n    });\n  });\n\n  describe(\"generateBadgeResponse\", () => {\n    it(\"should generate a badge response with custom values\", async () => {\n      const response = generateBadgeResponse(100, \"green\");\n\n      // Mock the text() method to handle the ReadableStream\n      const mockText = vi.fn().mockResolvedValue(\n        JSON.stringify({\n          schemaVersion: 1,\n          label: \"Custom Label\",\n          message: \"100\",\n          color: \"green\",\n          cacheSeconds: 300,\n        }),\n      );\n\n      vi.spyOn(response, \"text\").mockImplementation(mockText);\n\n      const body = JSON.parse(await response.text());\n      expect(body).toEqual({\n        schemaVersion: 1,\n        label: \"Custom Label\",\n        message: \"100\",\n        color: \"green\",\n        cacheSeconds: 300,\n      });\n    });\n  });\n});\n"
  },
  {
    "path": "src/utils.ts",
    "content": "// Helper to generate the layout\nimport { html, raw } from \"hono/html\";\nimport type { HtmlEscapedString } from \"hono/utils/html\";\nimport { marked } from \"marked\";\nimport type { AuthRequest } from \"@cloudflare/workers-oauth-provider\";\nimport { env } from \"cloudflare:workers\";\n\n// This file mainly exists as a dumping ground for uninteresting html and CSS\n// to remove clutter and noise from the auth logic. You likely do not need\n// anything from this file.\n\nexport const layout = (\n  content: HtmlEscapedString | string,\n  title: string,\n) => html`\n  <!DOCTYPE html>\n  <html lang=\"en\">\n    <head>\n      <meta charset=\"UTF-8\" />\n      <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n      <title>${title}</title>\n      <script src=\"https://cdn.tailwindcss.com\"></script>\n      <script>\n        tailwind.config = {\n          theme: {\n            extend: {\n              colors: {\n                primary: \"#3498db\",\n                secondary: \"#2ecc71\",\n                accent: \"#f39c12\",\n              },\n              fontFamily: {\n                sans: [\"Inter\", \"system-ui\", \"sans-serif\"],\n                heading: [\"Roboto\", \"system-ui\", \"sans-serif\"],\n              },\n            },\n          },\n        };\n      </script>\n      <style>\n        @import url(\"https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=Roboto:wght@400;500;700&display=swap\");\n\n        /* Custom styling for markdown content */\n        .markdown h1 {\n          font-size: 2.25rem;\n          font-weight: 700;\n          font-family: \"Roboto\", system-ui, sans-serif;\n          color: #1a202c;\n          margin-bottom: 1rem;\n          line-height: 1.2;\n        }\n\n        .markdown h2 {\n          font-size: 1.5rem;\n          font-weight: 600;\n          font-family: \"Roboto\", system-ui, sans-serif;\n          color: #2d3748;\n          margin-top: 1.5rem;\n          margin-bottom: 0.75rem;\n          line-height: 1.3;\n        }\n\n        .markdown h3 {\n          font-size: 1.25rem;\n          font-weight: 600;\n          font-family: \"Roboto\", system-ui, sans-serif;\n          color: #2d3748;\n          margin-top: 1.25rem;\n          margin-bottom: 0.5rem;\n        }\n\n        .markdown p {\n          font-size: 1.125rem;\n          color: #4a5568;\n          margin-bottom: 1rem;\n          line-height: 1.6;\n        }\n\n        .markdown a {\n          color: #3498db;\n          font-weight: 500;\n          text-decoration: none;\n        }\n\n        .markdown a:hover {\n          text-decoration: underline;\n        }\n\n        .markdown blockquote {\n          border-left: 4px solid #f39c12;\n          padding-left: 1rem;\n          padding-top: 0.75rem;\n          padding-bottom: 0.75rem;\n          margin-top: 1.5rem;\n          margin-bottom: 1.5rem;\n          background-color: #fffbeb;\n          font-style: italic;\n        }\n\n        .markdown blockquote p {\n          margin-bottom: 0.25rem;\n        }\n\n        .markdown ul,\n        .markdown ol {\n          margin-top: 1rem;\n          margin-bottom: 1rem;\n          margin-left: 1.5rem;\n          font-size: 1.125rem;\n          color: #4a5568;\n        }\n\n        .markdown li {\n          margin-bottom: 0.5rem;\n        }\n\n        .markdown ul li {\n          list-style-type: disc;\n        }\n\n        .markdown ol li {\n          list-style-type: decimal;\n        }\n\n        .markdown pre {\n          background-color: #f7fafc;\n          padding: 1rem;\n          border-radius: 0.375rem;\n          margin-top: 1rem;\n          margin-bottom: 1rem;\n          overflow-x: auto;\n        }\n\n        .markdown code {\n          font-family: monospace;\n          font-size: 0.875rem;\n          background-color: #f7fafc;\n          padding: 0.125rem 0.25rem;\n          border-radius: 0.25rem;\n        }\n\n        .markdown pre code {\n          background-color: transparent;\n          padding: 0;\n        }\n      </style>\n    </head>\n    <body\n      class=\"bg-gray-50 text-gray-800 font-sans leading-relaxed flex flex-col min-h-screen\"\n    >\n      <header class=\"bg-white shadow-sm mb-8\">\n        <div\n          class=\"container mx-auto px-4 py-4 flex justify-between items-center\"\n        >\n          <a\n            href=\"/\"\n            class=\"text-xl font-heading font-bold text-primary hover:text-primary/80 transition-colors\"\n            >MCP Remote Auth Demo</a\n          >\n        </div>\n      </header>\n      <main class=\"container mx-auto px-4 pb-12 flex-grow\">${content}</main>\n      <footer class=\"bg-gray-100 py-6 mt-12\">\n        <div class=\"container mx-auto px-4 text-center text-gray-600\">\n          <p>\n            &copy; ${new Date().getFullYear()} MCP Remote Auth Demo. All rights\n            reserved.\n          </p>\n        </div>\n      </footer>\n    </body>\n  </html>\n`;\n\nexport const homeContent = async (req: Request): Promise<HtmlEscapedString> => {\n  // We have the README symlinked into the static directory, so we can fetch it\n  // and render it into HTML\n  const origin = new URL(req.url).origin;\n  const res = await env.ASSETS.fetch(`${origin}/README.md`);\n  const markdown = await res.text();\n  const content = await marked(markdown);\n  return html` <div class=\"max-w-4xl mx-auto markdown\">${raw(content)}</div> `;\n};\n\nexport const renderLoggedInAuthorizeScreen = async (\n  oauthScopes: { name: string; description: string }[],\n  oauthReqInfo: AuthRequest,\n) => {\n  return html`\n    <div class=\"max-w-md mx-auto bg-white p-8 rounded-lg shadow-md\">\n      <h1 class=\"text-2xl font-heading font-bold mb-6 text-gray-900\">\n        Authorization Request\n      </h1>\n\n      <div class=\"mb-8\">\n        <h2 class=\"text-lg font-semibold mb-3 text-gray-800\">\n          MCP Remote Auth Demo would like permission to:\n        </h2>\n        <ul class=\"space-y-2\">\n          ${oauthScopes.map(\n            (scope) => html`\n              <li class=\"flex items-start\">\n                <span class=\"inline-block mr-2 mt-1 text-secondary\">✓</span>\n                <div>\n                  <p class=\"font-medium\">${scope.name}</p>\n                  <p class=\"text-gray-600 text-sm\">${scope.description}</p>\n                </div>\n              </li>\n            `,\n          )}\n        </ul>\n      </div>\n      <form action=\"/approve\" method=\"POST\" class=\"space-y-4\">\n        <input\n          type=\"hidden\"\n          name=\"oauthReqInfo\"\n          value=\"${JSON.stringify(oauthReqInfo)}\"\n        />\n        <input type=\"hidden\" name=\"email\" value=\"user@example.com\" />\n        <button\n          type=\"submit\"\n          name=\"action\"\n          value=\"approve\"\n          class=\"w-full py-3 px-4 bg-secondary text-white rounded-md font-medium hover:bg-secondary/90 transition-colors\"\n        >\n          Approve\n        </button>\n        <button\n          type=\"submit\"\n          name=\"action\"\n          value=\"reject\"\n          class=\"w-full py-3 px-4 border border-gray-300 text-gray-700 rounded-md font-medium hover:bg-gray-50 transition-colors\"\n        >\n          Reject\n        </button>\n      </form>\n    </div>\n  `;\n};\n\nexport const renderLoggedOutAuthorizeScreen = async (\n  oauthScopes: { name: string; description: string }[],\n  oauthReqInfo: AuthRequest,\n) => {\n  return html`\n    <div class=\"max-w-md mx-auto bg-white p-8 rounded-lg shadow-md\">\n      <h1 class=\"text-2xl font-heading font-bold mb-6 text-gray-900\">\n        Authorization Request\n      </h1>\n\n      <div class=\"mb-8\">\n        <h2 class=\"text-lg font-semibold mb-3 text-gray-800\">\n          MCP Remote Auth Demo would like permission to:\n        </h2>\n        <ul class=\"space-y-2\">\n          ${oauthScopes.map(\n            (scope) => html`\n              <li class=\"flex items-start\">\n                <span class=\"inline-block mr-2 mt-1 text-secondary\">✓</span>\n                <div>\n                  <p class=\"font-medium\">${scope.name}</p>\n                  <p class=\"text-gray-600 text-sm\">${scope.description}</p>\n                </div>\n              </li>\n            `,\n          )}\n        </ul>\n      </div>\n      <form action=\"/approve\" method=\"POST\" class=\"space-y-4\">\n        <input\n          type=\"hidden\"\n          name=\"oauthReqInfo\"\n          value=\"${JSON.stringify(oauthReqInfo)}\"\n        />\n        <div class=\"space-y-4\">\n          <div>\n            <label\n              for=\"email\"\n              class=\"block text-sm font-medium text-gray-700 mb-1\"\n              >Email</label\n            >\n            <input\n              type=\"email\"\n              id=\"email\"\n              name=\"email\"\n              required\n              class=\"w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-primary/50 focus:border-primary\"\n            />\n          </div>\n          <div>\n            <label\n              for=\"password\"\n              class=\"block text-sm font-medium text-gray-700 mb-1\"\n              >Password</label\n            >\n            <input\n              type=\"password\"\n              id=\"password\"\n              name=\"password\"\n              required\n              class=\"w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-primary/50 focus:border-primary\"\n            />\n          </div>\n        </div>\n        <button\n          type=\"submit\"\n          name=\"action\"\n          value=\"login_approve\"\n          class=\"w-full py-3 px-4 bg-primary text-white rounded-md font-medium hover:bg-primary/90 transition-colors\"\n        >\n          Log in and Approve\n        </button>\n        <button\n          type=\"submit\"\n          name=\"action\"\n          value=\"reject\"\n          class=\"w-full py-3 px-4 border border-gray-300 text-gray-700 rounded-md font-medium hover:bg-gray-50 transition-colors\"\n        >\n          Reject\n        </button>\n      </form>\n    </div>\n  `;\n};\n\nexport const renderApproveContent = async (\n  message: string,\n  status: string,\n  redirectUrl: string,\n) => {\n  return html`\n    <div class=\"max-w-md mx-auto bg-white p-8 rounded-lg shadow-md text-center\">\n      <div class=\"mb-4\">\n        <span\n          class=\"inline-block p-3 ${status === \"success\"\n            ? \"bg-green-100 text-green-800\"\n            : \"bg-red-100 text-red-800\"} rounded-full\"\n        >\n          ${status === \"success\" ? \"✓\" : \"✗\"}\n        </span>\n      </div>\n      <h1 class=\"text-2xl font-heading font-bold mb-4 text-gray-900\">\n        ${message}\n      </h1>\n      <p class=\"mb-8 text-gray-600\">\n        You will be redirected back to the application shortly.\n      </p>\n      <a\n        href=\"/\"\n        class=\"inline-block py-2 px-4 bg-primary text-white rounded-md font-medium hover:bg-primary/90 transition-colors\"\n      >\n        Return to Home\n      </a>\n      ${raw(`\n\t\t\t\t<script>\n\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\twindow.location.href = \"${redirectUrl}\";\n\t\t\t\t\t}, 2000);\n\t\t\t\t</script>\n\t\t\t`)}\n    </div>\n  `;\n};\n\nexport const renderAuthorizationApprovedContent = async (\n  redirectUrl: string,\n) => {\n  return renderApproveContent(\n    \"Authorization approved!\",\n    \"success\",\n    redirectUrl,\n  );\n};\n\nexport const renderAuthorizationRejectedContent = async (\n  redirectUrl: string,\n) => {\n  return renderApproveContent(\"Authorization rejected.\", \"error\", redirectUrl);\n};\n\nexport const parseApproveFormBody = async (body: {\n  [x: string]: string | File;\n}) => {\n  const action = body.action as string;\n  const email = body.email as string;\n  const password = body.password as string;\n  let oauthReqInfo: AuthRequest | null = null;\n  try {\n    oauthReqInfo = JSON.parse(body.oauthReqInfo as string) as AuthRequest;\n  } catch (e) {\n    oauthReqInfo = null;\n  }\n\n  return { action, oauthReqInfo, email, password };\n};\n"
  },
  {
    "path": "static/README.md",
    "content": "# Remote MCP Server on Cloudflare\n\nLet's get a remote MCP server up-and-running on Cloudflare Workers complete with OAuth login!\n\n## Develop locally\n\n```bash\n# clone the repository\ngit clone git@github.com:cloudflare/ai.git\n\n# install dependencies\ncd ai\nnpm install\n\n# run locally\nnpx nx dev remote-mcp-server\n```\n\nYou should be able to open [`http://localhost:8787/`](http://localhost:8787/) in your browser\n\n## Connect the MCP inspector to your server\n\nTo explore your new MCP api, you can use the [MCP Inspector](https://modelcontextprotocol.io/docs/tools/inspector).\n\n- Start it with `npx @modelcontextprotocol/inspector`\n- [Within the inspector](http://localhost:5173), switch the Transport Type to `SSE` and enter `http://localhost:8787/sse` as the URL of the MCP server to connect to, and click \"Connect\"\n- You will navigate to a (mock) user/password login screen. Input any email and pass to login.\n- You should be redirected back to the MCP Inspector and you can now list and call any defined tools!\n\n<div align=\"center\">\n  <img src=\"img/mcp-inspector-sse-config.png\" alt=\"MCP Inspector with the above config\" width=\"600\"/>\n</div>\n\n<div align=\"center\">\n  <img src=\"img/mcp-inspector-successful-tool-call.png\" alt=\"MCP Inspector with after a tool call\" width=\"600\"/>\n</div>\n\n## Connect Claude Desktop to your local MCP server\n\nThe MCP inspector is great, but we really want to connect this to Claude! Follow [Anthropic's Quickstart](https://modelcontextprotocol.io/quickstart/user) and within Claude Desktop go to Settings > Developer > Edit Config to find your configuration file.\n\nOpen the file in your text editor and replace it with this configuration:\n\n```json\n{\n  \"mcpServers\": {\n    \"math\": {\n      \"command\": \"npx\",\n      \"args\": [\"mcp-remote\", \"http://localhost:8787/sse\"]\n    }\n  }\n}\n```\n\nThis will run a local proxy and let Claude talk to your MCP server over HTTP\n\nWhen you open Claude a browser window should open and allow you to login. You should see the tools available in the bottom right. Given the right prompt Claude should ask to call the tool.\n\n<div align=\"center\">\n  <img src=\"img/available-tools.png\" alt=\"Clicking on the hammer icon shows a list of available tools\" width=\"600\"/>\n</div>\n\n<div align=\"center\">\n  <img src=\"img/claude-does-math-the-fancy-way.png\" alt=\"Claude answers the prompt 'I seem to have lost my calculator and have run out of fingers. Could you use the math tool to add 23 and 19?' by invoking the MCP add tool\" width=\"600\"/>\n</div>\n\n## Deploy to Cloudflare\n\n1. `npx wrangler@latest kv namespace create remote-mcp-server-oauth-kv`\n2. Follow the guidance to add the kv namespace ID to `wrangler.jsonc`\n3. `npm run deploy`\n\n## Call your newly deployed remote MCP server from a remote MCP client\n\nJust like you did above in \"Develop locally\", run the MCP inspector:\n\n`npx @modelcontextprotocol/inspector@latest`\n\nThen enter the `workers.dev` URL (ex: `worker-name.account-name.workers.dev/sse`) of your Worker in the inspector as the URL of the MCP server to connect to, and click \"Connect\".\n\nYou've now connected to your MCP server from a remote MCP client.\n\n## Connect Claude Desktop to your remote MCP server\n\nUpdate the Claude configuration file to point to your `workers.dev` URL (ex: `worker-name.account-name.workers.dev/sse`) and restart Claude\n\n```json\n{\n  \"mcpServers\": {\n    \"math\": {\n      \"command\": \"npx\",\n      \"args\": [\"mcp-remote\", \"https://worker-name.account-name.workers.dev/sse\"]\n    }\n  }\n}\n```\n\n## Debugging\n\nShould anything go wrong it can be helpful to restart Claude, or to try connecting directly to your\nMCP server on the command line with the following command.\n\n```bash\nnpx mcp-remote http://localhost:8787/sse\n```\n\nIn some rare cases it may help to clear the files added to `~/.mcp-auth`\n\n```bash\nrm -rf ~/.mcp-auth\n```\n"
  },
  {
    "path": "tailwind.config.js",
    "content": "/** @type {import('tailwindcss').Config} */\nmodule.exports = {\n  content: [\"./app/**/*.{js,ts,jsx,tsx}\"],\n  theme: {\n    extend: {\n      fontFamily: {\n        sans: [\"var(--font-inter)\", \"Inter\", \"system-ui\", \"sans-serif\"],\n      },\n      colors: {\n        emerald: {\n          400: \"#34d399\",\n          500: \"#10b981\",\n        },\n        blue: {\n          400: \"#60a5fa\",\n          500: \"#3b82f6\",\n        },\n        purple: {\n          400: \"#a78bfa\",\n          500: \"#8b5cf6\",\n        },\n      },\n      boxShadow: {\n        glow: \"0 0 20px rgba(52, 211, 153, 0.5)\",\n      },\n      typography: {\n        DEFAULT: {\n          css: {\n            maxWidth: \"65ch\",\n            color: \"inherit\",\n            a: {\n              color: \"inherit\",\n              textDecoration: \"underline\",\n              fontWeight: \"500\",\n            },\n            strong: {\n              fontWeight: \"600\",\n            },\n            code: {\n              fontWeight: \"400\",\n            },\n          },\n        },\n      },\n    },\n  },\n  plugins: [],\n};\n"
  },
  {
    "path": "tests/e2e/inspection.spec.ts",
    "content": "import { test, expect } from \"@playwright/test\";\n\n// Define the base target dev server URL (the one the Inspector connects to)\nconst targetServerBaseUrl = \"http://localhost:5173\"; // Base URL without path or /sse\n\n// Define test cases with specific paths and expectations\nconst testCases = [\n  {\n    path: \"mrdoob/three.js\",\n    // Expectations removed as the specific fetch test will be skipped for this path\n  },\n  {\n    path: \"remix-run/react-router\",\n    expectedContentSnippet: \"# React Router\"\n  },\n  {\n    path: \"answerdotai/fasthtml\",\n    expectedContentSnippet: \"# FastHTML\"\n  }\n];\n\ntest.describe(\"Dedicated repo servers\", () => {\n  test.describe(\"SSE\", () => {\n    // Loop through the defined test cases\n    for (const testCase of testCases) {\n      const { path, expectedContentSnippet } = testCase;\n      const targetServerUrl = `${targetServerBaseUrl}/${path}`; // Construct full URL for connection\n\n      // Test to verify listing tools (this should still run for all)\n      test(`should list tools for ${path}`, async ({ page }) => {\n        await page.goto(\"/\");\n        await page.getByRole(\"combobox\", { name: \"Transport Type\" }).click();\n        await page.getByRole(\"option\", { name: \"SSE\" }).click();\n        await page.getByRole(\"textbox\", { name: \"URL\" }).fill(targetServerUrl);\n        await page.getByRole(\"button\", { name: \"Connect\" }).click();\n\n        await expect(page.getByRole(\"button\", { name: \"List Tools\" })).toBeVisible({ timeout: 5000 });\n        await page.getByRole(\"button\", { name: \"List Tools\" }).click();\n\n        await expect(page.getByText(\"fetch_generic_url_content\")).toBeVisible({\n          timeout: 10000,\n        });\n        if (path === 'mrdoob/three.js') {\n          //  await expect(page.getByText('fetch_threejs_documentation')).toBeVisible({ timeout: 5000 });\n           // Check for the specific search tool for three.js\n           await expect(page.getByText('search_threejs_documentation')).toBeVisible({ timeout: 5000 });\n        } else {\n           // Check for generic fetch and search tools\n           await expect(page.getByText(/^fetch_.*_documentation$/)).toBeVisible({ timeout: 5000 });\n           await expect(page.getByText(/^search_.*_documentation$/)).toBeVisible({ timeout: 5000 });\n        }\n      });\n\n      // Test to verify running the generic fetch tool (this should still run for all)\n      test(`should fetch documentation using generic tool for ${path}`, async ({ page }) => {\n        await page.goto(\"/\");\n        await page.getByRole(\"combobox\", { name: \"Transport Type\" }).click();\n        await page.getByRole(\"option\", { name: \"SSE\" }).click();\n        await page.getByRole(\"textbox\", { name: \"URL\" }).fill(targetServerUrl);\n        await page.getByRole(\"button\", { name: \"Connect\" }).click();\n\n        await expect(page.getByRole(\"button\", { name: \"List Tools\" })).toBeVisible({ timeout: 5000 });\n        await page.getByRole(\"button\", { name: \"List Tools\" }).click();\n\n        await expect(page.getByText(\"fetch_generic_url_content\")).toBeVisible({ timeout: 5000 });\n        await page.getByText('fetch_generic_url_content').click();\n        await page.getByRole('textbox', { name: 'url', exact: true  }).fill('https://www.makeareadme.com/');\n        await page.getByRole('button', { name: 'Run Tool' }).click();\n\n        await expect(page.getByText('Success')).toBeVisible({ timeout: 10000 });\n        await expect(page.getByText('# Make a README')).toBeVisible();\n      });\n\n      // Test to verify running the specific fetch_X_documentation tool\n      // Conditionally skip this test for mrdoob/three.js\n      const shouldSkipFetchTest = path === 'mrdoob/three.js';\n      test(`should run fetch_X_documentation for ${path}`, async ({ page }) => {\n         test.skip(shouldSkipFetchTest, 'Skipping fetch_X_documentation test for mrdoob/three.js as it uses a different tool name.');\n\n         await page.goto(\"/\");\n         await page.getByRole(\"combobox\", { name: \"Transport Type\" }).click();\n         await page.getByRole(\"option\", { name: \"SSE\" }).click();\n         await page.getByRole(\"textbox\", { name: \"URL\" }).fill(targetServerUrl);\n         await page.getByRole(\"button\", { name: \"Connect\" }).click();\n\n         await expect(page.getByRole(\"button\", { name: \"List Tools\" })).toBeVisible({ timeout: 5000 });\n         await page.getByRole(\"button\", { name: \"List Tools\" }).click();\n\n         const fetchToolButton = page.getByText(/^fetch_.*_documentation$/);\n         await expect(fetchToolButton).toBeVisible({ timeout: 5000 });\n         await fetchToolButton.click();\n\n         await page.getByRole('button', { name: 'Run Tool' }).click();\n\n         await expect(page.getByText('Success')).toBeVisible({ timeout: 15000 });\n\n         // Use the expectedContentSnippet from the test case\n         // Ensure expectedContentSnippet is defined before using it\n         if (expectedContentSnippet) {\n             await expect(page.getByText(expectedContentSnippet)).toBeVisible();\n         } else {\n             console.warn(`No expectedContentSnippet defined for path: ${path}`);\n         }\n      });\n    }\n  });\n});\n"
  },
  {
    "path": "tests/global-setup.ts",
    "content": "import { FullConfig } from '@playwright/test';\nimport fetch from 'node-fetch';\n\n// URL of your running worker during tests\nconst workerUrl = 'http://localhost:5173'; \nconst setupEndpoint = `${workerUrl}/api/setup-r2-for-tests`;\n\nasync function globalSetup(config: FullConfig) {\n  console.log('--- Starting Global Setup: Populating R2 via Endpoint ---');\n\n  // Add a delay to allow the web server to fully start\n  // Playwright's webServer.url check confirms availability, but sometimes \n  // internal initialization might still be happening.\n  console.log('Waiting 3 seconds for server to stabilize...');\n  await new Promise(resolve => setTimeout(resolve, 3000)); \n\n  try {\n    console.log(`Sending POST request to ${setupEndpoint}...`);\n    const response = await fetch(setupEndpoint, {\n      method: 'POST',\n      headers: {\n        'Content-Type': 'application/json',\n        // Add any other headers required by your endpoint if necessary\n      },\n      // No body needed as the endpoint knows what to do\n    });\n\n    const responseBodyText = await response.text(); // Read body once\n    console.log(`Global Setup: Received response status ${response.status}`);\n    console.log(`Global Setup: Received response body: ${responseBodyText}`);\n\n\n    if (!response.ok) {\n      throw new Error(`Failed to setup R2 via endpoint: ${response.status} ${response.statusText} - Body: ${responseBodyText}`);\n    }\n\n    // Try parsing JSON only if response is ok\n    try {\n        const result = JSON.parse(responseBodyText); \n        console.log('Global Setup: R2 Population Result:', result.message);\n    } catch (parseError) {\n        console.error(\"Global Setup: Failed to parse JSON response from setup endpoint.\");\n        throw new Error(`Failed to parse JSON response: ${parseError} - Original Body: ${responseBodyText}`);\n    }\n    \n    console.log('--- Global Setup Finished Successfully ---');\n\n  } catch (error) {\n    console.error('Error during global setup (calling R2 population endpoint):', error);\n    // Throw error to stop test execution if setup fails critically\n    throw new Error(`Global setup failed: ${error}`);\n  }\n}\n\nexport default globalSetup; "
  },
  {
    "path": "tsconfig.cloudflare.json",
    "content": "{\n  \"extends\": \"./tsconfig.json\",\n  \"include\": [\n    \".react-router/types/**/*\",\n    \"app/**/*\",\n    \"app/**/.server/**/*\",\n    \"app/**/.client/**/*\",\n    \"src/**/*\",\n    \"worker-configuration.d.ts\"\n  ],\n  \"compilerOptions\": {\n    \"composite\": true,\n    \"strict\": true,\n    \"lib\": [\"DOM\", \"DOM.Iterable\", \"ES2022\"],\n    \"types\": [\"@cloudflare/workers-types\", \"vite/client\"],\n    \"target\": \"ES2022\",\n    \"module\": \"ES2022\",\n    \"moduleResolution\": \"bundler\",\n    \"jsx\": \"react-jsx\",\n    \"baseUrl\": \".\",\n    \"rootDirs\": [\".\", \"./.react-router/types\"],\n    \"paths\": {\n      \"~/*\": [\"./app/*\"]\n    },\n    \"esModuleInterop\": true,\n    \"resolveJsonModule\": true\n  }\n}\n"
  },
  {
    "path": "tsconfig.json",
    "content": "{\n  \"files\": [],\n  \"references\": [\n    { \"path\": \"./tsconfig.node.json\" },\n    { \"path\": \"./tsconfig.cloudflare.json\" }\n  ],\n  \"compilerOptions\": {\n    \"checkJs\": true,\n    \"verbatimModuleSyntax\": true,\n    \"skipLibCheck\": true,\n    \"forceConsistentCasingInFileNames\": true,\n    \"strict\": true,\n    \"noEmit\": true\n  }\n}\n"
  },
  {
    "path": "tsconfig.node.json",
    "content": "{\n  \"extends\": \"./tsconfig.json\",\n  \"include\": [\"tailwind.config.ts\", \"vite.config.ts\"],\n  \"compilerOptions\": {\n    \"composite\": true,\n    \"strict\": true,\n    \"types\": [\"node\"],\n    \"lib\": [\"ES2022\"],\n    \"target\": \"ES2022\",\n    \"module\": \"ES2022\",\n    \"moduleResolution\": \"bundler\"\n  }\n}\n"
  },
  {
    "path": "vite.config.ts",
    "content": "import { reactRouter } from \"@react-router/dev/vite\";\nimport { cloudflare } from \"@cloudflare/vite-plugin\";\nimport tailwindcss from \"@tailwindcss/vite\";\nimport { defineConfig } from \"vite\";\nimport tsconfigPaths from \"vite-tsconfig-paths\";\n\nexport default defineConfig({\n  plugins: [\n    cloudflare({ viteEnvironment: { name: \"ssr\" } }),\n    tailwindcss(),\n    reactRouter(),\n    tsconfigPaths(),\n  ],\n});\n"
  },
  {
    "path": "vitest.config.ts",
    "content": "import { configDefaults, defineConfig } from \"vitest/config\";\n\nexport default defineConfig({\n  test: {\n    exclude: [...configDefaults.exclude, \"build/**/*\", \"dist/**/*\", \"tests/e2e/**/*\"],\n  },\n});\n"
  },
  {
    "path": "worker-configuration.d.ts",
    "content": "/* eslint-disable */\n// Generated by Wrangler by running `wrangler types` (hash: b15bdb1393c2ff62c93af283c69f3ddc)\n// Runtime types generated with workerd@1.20250507.0 2025-04-26 nodejs_compat\ndeclare namespace Cloudflare {\n\tinterface Env {\n\t\tCACHE_KV: KVNamespace;\n\t\tGITHUB_TOKEN: string;\n\t\tGROQ_API_KEY: string;\n\t\tMCP_OBJECT: DurableObjectNamespace<import(\"./src/index\").MyMCP>;\n\t\tVIEW_COUNTER: DurableObjectNamespace<import(\"./src/index\").ViewCounterDO>;\n\t\tDOCS_BUCKET: R2Bucket;\n\t\tMY_METRICS: AnalyticsEngineDataset;\n\t\tMY_QUEUE: Queue;\n\t\tVECTORIZE: VectorizeIndex;\n\t\tAI: Ai;\n\t\tASSETS: Fetcher;\n\t}\n}\ninterface Env extends Cloudflare.Env {}\ntype StringifyValues<EnvType extends Record<string, unknown>> = {\n\t[Binding in keyof EnvType]: EnvType[Binding] extends string ? EnvType[Binding] : string;\n};\ndeclare namespace NodeJS {\n\tinterface ProcessEnv extends StringifyValues<Pick<Cloudflare.Env, \"GITHUB_TOKEN\" | \"GROQ_API_KEY\">> {}\n}\n\n// Begin runtime types\n/*! *****************************************************************************\nCopyright (c) Cloudflare. All rights reserved.\nCopyright (c) Microsoft Corporation. All rights reserved.\n\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\nthis file except in compliance with the License. You may obtain a copy of the\nLicense at http://www.apache.org/licenses/LICENSE-2.0\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\nMERCHANTABLITY OR NON-INFRINGEMENT.\nSee the Apache Version 2.0 License for specific language governing permissions\nand limitations under the License.\n***************************************************************************** */\n/* eslint-disable */\n// noinspection JSUnusedGlobalSymbols\ndeclare var onmessage: never;\n/**\n * An abnormal event (called an exception) which occurs as a result of calling a method or accessing a property of a web API.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMException)\n */\ndeclare class DOMException extends Error {\n    constructor(message?: string, name?: string);\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMException/message) */\n    readonly message: string;\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMException/name) */\n    readonly name: string;\n    /**\n     * @deprecated\n     *\n     * [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMException/code)\n     */\n    readonly code: number;\n    static readonly INDEX_SIZE_ERR: number;\n    static readonly DOMSTRING_SIZE_ERR: number;\n    static readonly HIERARCHY_REQUEST_ERR: number;\n    static readonly WRONG_DOCUMENT_ERR: number;\n    static readonly INVALID_CHARACTER_ERR: number;\n    static readonly NO_DATA_ALLOWED_ERR: number;\n    static readonly NO_MODIFICATION_ALLOWED_ERR: number;\n    static readonly NOT_FOUND_ERR: number;\n    static readonly NOT_SUPPORTED_ERR: number;\n    static readonly INUSE_ATTRIBUTE_ERR: number;\n    static readonly INVALID_STATE_ERR: number;\n    static readonly SYNTAX_ERR: number;\n    static readonly INVALID_MODIFICATION_ERR: number;\n    static readonly NAMESPACE_ERR: number;\n    static readonly INVALID_ACCESS_ERR: number;\n    static readonly VALIDATION_ERR: number;\n    static readonly TYPE_MISMATCH_ERR: number;\n    static readonly SECURITY_ERR: number;\n    static readonly NETWORK_ERR: number;\n    static readonly ABORT_ERR: number;\n    static readonly URL_MISMATCH_ERR: number;\n    static readonly QUOTA_EXCEEDED_ERR: number;\n    static readonly TIMEOUT_ERR: number;\n    static readonly INVALID_NODE_TYPE_ERR: number;\n    static readonly DATA_CLONE_ERR: number;\n    get stack(): any;\n    set stack(value: any);\n}\ntype WorkerGlobalScopeEventMap = {\n    fetch: FetchEvent;\n    scheduled: ScheduledEvent;\n    queue: QueueEvent;\n    unhandledrejection: PromiseRejectionEvent;\n    rejectionhandled: PromiseRejectionEvent;\n};\ndeclare abstract class WorkerGlobalScope extends EventTarget<WorkerGlobalScopeEventMap> {\n    EventTarget: typeof EventTarget;\n}\n/* [MDN Reference](https://developer.mozilla.org/docs/Web/API/console) */\ninterface Console {\n    \"assert\"(condition?: boolean, ...data: any[]): void;\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/console/clear_static) */\n    clear(): void;\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/console/count_static) */\n    count(label?: string): void;\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/console/countReset_static) */\n    countReset(label?: string): void;\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/console/debug_static) */\n    debug(...data: any[]): void;\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/console/dir_static) */\n    dir(item?: any, options?: any): void;\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/console/dirxml_static) */\n    dirxml(...data: any[]): void;\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/console/error_static) */\n    error(...data: any[]): void;\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/console/group_static) */\n    group(...data: any[]): void;\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/console/groupCollapsed_static) */\n    groupCollapsed(...data: any[]): void;\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/console/groupEnd_static) */\n    groupEnd(): void;\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/console/info_static) */\n    info(...data: any[]): void;\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/console/log_static) */\n    log(...data: any[]): void;\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/console/table_static) */\n    table(tabularData?: any, properties?: string[]): void;\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/console/time_static) */\n    time(label?: string): void;\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/console/timeEnd_static) */\n    timeEnd(label?: string): void;\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/console/timeLog_static) */\n    timeLog(label?: string, ...data: any[]): void;\n    timeStamp(label?: string): void;\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/console/trace_static) */\n    trace(...data: any[]): void;\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/console/warn_static) */\n    warn(...data: any[]): void;\n}\ndeclare const console: Console;\ntype BufferSource = ArrayBufferView | ArrayBuffer;\ntype TypedArray = Int8Array | Uint8Array | Uint8ClampedArray | Int16Array | Uint16Array | Int32Array | Uint32Array | Float32Array | Float64Array | BigInt64Array | BigUint64Array;\ndeclare namespace WebAssembly {\n    class CompileError extends Error {\n        constructor(message?: string);\n    }\n    class RuntimeError extends Error {\n        constructor(message?: string);\n    }\n    type ValueType = \"anyfunc\" | \"externref\" | \"f32\" | \"f64\" | \"i32\" | \"i64\" | \"v128\";\n    interface GlobalDescriptor {\n        value: ValueType;\n        mutable?: boolean;\n    }\n    class Global {\n        constructor(descriptor: GlobalDescriptor, value?: any);\n        value: any;\n        valueOf(): any;\n    }\n    type ImportValue = ExportValue | number;\n    type ModuleImports = Record<string, ImportValue>;\n    type Imports = Record<string, ModuleImports>;\n    type ExportValue = Function | Global | Memory | Table;\n    type Exports = Record<string, ExportValue>;\n    class Instance {\n        constructor(module: Module, imports?: Imports);\n        readonly exports: Exports;\n    }\n    interface MemoryDescriptor {\n        initial: number;\n        maximum?: number;\n        shared?: boolean;\n    }\n    class Memory {\n        constructor(descriptor: MemoryDescriptor);\n        readonly buffer: ArrayBuffer;\n        grow(delta: number): number;\n    }\n    type ImportExportKind = \"function\" | \"global\" | \"memory\" | \"table\";\n    interface ModuleExportDescriptor {\n        kind: ImportExportKind;\n        name: string;\n    }\n    interface ModuleImportDescriptor {\n        kind: ImportExportKind;\n        module: string;\n        name: string;\n    }\n    abstract class Module {\n        static customSections(module: Module, sectionName: string): ArrayBuffer[];\n        static exports(module: Module): ModuleExportDescriptor[];\n        static imports(module: Module): ModuleImportDescriptor[];\n    }\n    type TableKind = \"anyfunc\" | \"externref\";\n    interface TableDescriptor {\n        element: TableKind;\n        initial: number;\n        maximum?: number;\n    }\n    class Table {\n        constructor(descriptor: TableDescriptor, value?: any);\n        readonly length: number;\n        get(index: number): any;\n        grow(delta: number, value?: any): number;\n        set(index: number, value?: any): void;\n    }\n    function instantiate(module: Module, imports?: Imports): Promise<Instance>;\n    function validate(bytes: BufferSource): boolean;\n}\n/**\n * This ServiceWorker API interface represents the global execution context of a service worker.\n * Available only in secure contexts.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/ServiceWorkerGlobalScope)\n */\ninterface ServiceWorkerGlobalScope extends WorkerGlobalScope {\n    DOMException: typeof DOMException;\n    WorkerGlobalScope: typeof WorkerGlobalScope;\n    btoa(data: string): string;\n    atob(data: string): string;\n    setTimeout(callback: (...args: any[]) => void, msDelay?: number): number;\n    setTimeout<Args extends any[]>(callback: (...args: Args) => void, msDelay?: number, ...args: Args): number;\n    clearTimeout(timeoutId: number | null): void;\n    setInterval(callback: (...args: any[]) => void, msDelay?: number): number;\n    setInterval<Args extends any[]>(callback: (...args: Args) => void, msDelay?: number, ...args: Args): number;\n    clearInterval(timeoutId: number | null): void;\n    queueMicrotask(task: Function): void;\n    structuredClone<T>(value: T, options?: StructuredSerializeOptions): T;\n    reportError(error: any): void;\n    fetch(input: RequestInfo | URL, init?: RequestInit<RequestInitCfProperties>): Promise<Response>;\n    self: ServiceWorkerGlobalScope;\n    crypto: Crypto;\n    caches: CacheStorage;\n    scheduler: Scheduler;\n    performance: Performance;\n    Cloudflare: Cloudflare;\n    readonly origin: string;\n    Event: typeof Event;\n    ExtendableEvent: typeof ExtendableEvent;\n    CustomEvent: typeof CustomEvent;\n    PromiseRejectionEvent: typeof PromiseRejectionEvent;\n    FetchEvent: typeof FetchEvent;\n    TailEvent: typeof TailEvent;\n    TraceEvent: typeof TailEvent;\n    ScheduledEvent: typeof ScheduledEvent;\n    MessageEvent: typeof MessageEvent;\n    CloseEvent: typeof CloseEvent;\n    ReadableStreamDefaultReader: typeof ReadableStreamDefaultReader;\n    ReadableStreamBYOBReader: typeof ReadableStreamBYOBReader;\n    ReadableStream: typeof ReadableStream;\n    WritableStream: typeof WritableStream;\n    WritableStreamDefaultWriter: typeof WritableStreamDefaultWriter;\n    TransformStream: typeof TransformStream;\n    ByteLengthQueuingStrategy: typeof ByteLengthQueuingStrategy;\n    CountQueuingStrategy: typeof CountQueuingStrategy;\n    ErrorEvent: typeof ErrorEvent;\n    EventSource: typeof EventSource;\n    ReadableStreamBYOBRequest: typeof ReadableStreamBYOBRequest;\n    ReadableStreamDefaultController: typeof ReadableStreamDefaultController;\n    ReadableByteStreamController: typeof ReadableByteStreamController;\n    WritableStreamDefaultController: typeof WritableStreamDefaultController;\n    TransformStreamDefaultController: typeof TransformStreamDefaultController;\n    CompressionStream: typeof CompressionStream;\n    DecompressionStream: typeof DecompressionStream;\n    TextEncoderStream: typeof TextEncoderStream;\n    TextDecoderStream: typeof TextDecoderStream;\n    Headers: typeof Headers;\n    Body: typeof Body;\n    Request: typeof Request;\n    Response: typeof Response;\n    WebSocket: typeof WebSocket;\n    WebSocketPair: typeof WebSocketPair;\n    WebSocketRequestResponsePair: typeof WebSocketRequestResponsePair;\n    AbortController: typeof AbortController;\n    AbortSignal: typeof AbortSignal;\n    TextDecoder: typeof TextDecoder;\n    TextEncoder: typeof TextEncoder;\n    navigator: Navigator;\n    Navigator: typeof Navigator;\n    URL: typeof URL;\n    URLSearchParams: typeof URLSearchParams;\n    URLPattern: typeof URLPattern;\n    Blob: typeof Blob;\n    File: typeof File;\n    FormData: typeof FormData;\n    Crypto: typeof Crypto;\n    SubtleCrypto: typeof SubtleCrypto;\n    CryptoKey: typeof CryptoKey;\n    CacheStorage: typeof CacheStorage;\n    Cache: typeof Cache;\n    FixedLengthStream: typeof FixedLengthStream;\n    IdentityTransformStream: typeof IdentityTransformStream;\n    HTMLRewriter: typeof HTMLRewriter;\n}\ndeclare function addEventListener<Type extends keyof WorkerGlobalScopeEventMap>(type: Type, handler: EventListenerOrEventListenerObject<WorkerGlobalScopeEventMap[Type]>, options?: EventTargetAddEventListenerOptions | boolean): void;\ndeclare function removeEventListener<Type extends keyof WorkerGlobalScopeEventMap>(type: Type, handler: EventListenerOrEventListenerObject<WorkerGlobalScopeEventMap[Type]>, options?: EventTargetEventListenerOptions | boolean): void;\n/**\n * Dispatches a synthetic event event to target and returns true if either event's cancelable attribute value is false or its preventDefault() method was not invoked, and false otherwise.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/EventTarget/dispatchEvent)\n */\ndeclare function dispatchEvent(event: WorkerGlobalScopeEventMap[keyof WorkerGlobalScopeEventMap]): boolean;\n/* [MDN Reference](https://developer.mozilla.org/docs/Web/API/Window/btoa) */\ndeclare function btoa(data: string): string;\n/* [MDN Reference](https://developer.mozilla.org/docs/Web/API/Window/atob) */\ndeclare function atob(data: string): string;\n/* [MDN Reference](https://developer.mozilla.org/docs/Web/API/Window/setTimeout) */\ndeclare function setTimeout(callback: (...args: any[]) => void, msDelay?: number): number;\n/* [MDN Reference](https://developer.mozilla.org/docs/Web/API/Window/setTimeout) */\ndeclare function setTimeout<Args extends any[]>(callback: (...args: Args) => void, msDelay?: number, ...args: Args): number;\n/* [MDN Reference](https://developer.mozilla.org/docs/Web/API/Window/clearTimeout) */\ndeclare function clearTimeout(timeoutId: number | null): void;\n/* [MDN Reference](https://developer.mozilla.org/docs/Web/API/Window/setInterval) */\ndeclare function setInterval(callback: (...args: any[]) => void, msDelay?: number): number;\n/* [MDN Reference](https://developer.mozilla.org/docs/Web/API/Window/setInterval) */\ndeclare function setInterval<Args extends any[]>(callback: (...args: Args) => void, msDelay?: number, ...args: Args): number;\n/* [MDN Reference](https://developer.mozilla.org/docs/Web/API/Window/clearInterval) */\ndeclare function clearInterval(timeoutId: number | null): void;\n/* [MDN Reference](https://developer.mozilla.org/docs/Web/API/Window/queueMicrotask) */\ndeclare function queueMicrotask(task: Function): void;\n/* [MDN Reference](https://developer.mozilla.org/docs/Web/API/Window/structuredClone) */\ndeclare function structuredClone<T>(value: T, options?: StructuredSerializeOptions): T;\n/* [MDN Reference](https://developer.mozilla.org/docs/Web/API/Window/reportError) */\ndeclare function reportError(error: any): void;\n/* [MDN Reference](https://developer.mozilla.org/docs/Web/API/Window/fetch) */\ndeclare function fetch(input: RequestInfo | URL, init?: RequestInit<RequestInitCfProperties>): Promise<Response>;\ndeclare const self: ServiceWorkerGlobalScope;\n/**\n* The Web Crypto API provides a set of low-level functions for common cryptographic tasks.\n* The Workers runtime implements the full surface of this API, but with some differences in\n* the [supported algorithms](https://developers.cloudflare.com/workers/runtime-apis/web-crypto/#supported-algorithms)\n* compared to those implemented in most browsers.\n*\n* [Cloudflare Docs Reference](https://developers.cloudflare.com/workers/runtime-apis/web-crypto/)\n*/\ndeclare const crypto: Crypto;\n/**\n* The Cache API allows fine grained control of reading and writing from the Cloudflare global network cache.\n*\n* [Cloudflare Docs Reference](https://developers.cloudflare.com/workers/runtime-apis/cache/)\n*/\ndeclare const caches: CacheStorage;\ndeclare const scheduler: Scheduler;\n/**\n* The Workers runtime supports a subset of the Performance API, used to measure timing and performance,\n* as well as timing of subrequests and other operations.\n*\n* [Cloudflare Docs Reference](https://developers.cloudflare.com/workers/runtime-apis/performance/)\n*/\ndeclare const performance: Performance;\ndeclare const Cloudflare: Cloudflare;\ndeclare const origin: string;\ndeclare const navigator: Navigator;\ninterface TestController {\n}\ninterface ExecutionContext {\n    waitUntil(promise: Promise<any>): void;\n    passThroughOnException(): void;\n    props: any;\n}\ntype ExportedHandlerFetchHandler<Env = unknown, CfHostMetadata = unknown> = (request: Request<CfHostMetadata, IncomingRequestCfProperties<CfHostMetadata>>, env: Env, ctx: ExecutionContext) => Response | Promise<Response>;\ntype ExportedHandlerTailHandler<Env = unknown> = (events: TraceItem[], env: Env, ctx: ExecutionContext) => void | Promise<void>;\ntype ExportedHandlerTraceHandler<Env = unknown> = (traces: TraceItem[], env: Env, ctx: ExecutionContext) => void | Promise<void>;\ntype ExportedHandlerTailStreamHandler<Env = unknown> = (event: TailStream.TailEvent, env: Env, ctx: ExecutionContext) => TailStream.TailEventHandlerType | Promise<TailStream.TailEventHandlerType>;\ntype ExportedHandlerScheduledHandler<Env = unknown> = (controller: ScheduledController, env: Env, ctx: ExecutionContext) => void | Promise<void>;\ntype ExportedHandlerQueueHandler<Env = unknown, Message = unknown> = (batch: MessageBatch<Message>, env: Env, ctx: ExecutionContext) => void | Promise<void>;\ntype ExportedHandlerTestHandler<Env = unknown> = (controller: TestController, env: Env, ctx: ExecutionContext) => void | Promise<void>;\ninterface ExportedHandler<Env = unknown, QueueHandlerMessage = unknown, CfHostMetadata = unknown> {\n    fetch?: ExportedHandlerFetchHandler<Env, CfHostMetadata>;\n    tail?: ExportedHandlerTailHandler<Env>;\n    trace?: ExportedHandlerTraceHandler<Env>;\n    tailStream?: ExportedHandlerTailStreamHandler<Env>;\n    scheduled?: ExportedHandlerScheduledHandler<Env>;\n    test?: ExportedHandlerTestHandler<Env>;\n    email?: EmailExportedHandler<Env>;\n    queue?: ExportedHandlerQueueHandler<Env, QueueHandlerMessage>;\n}\ninterface StructuredSerializeOptions {\n    transfer?: any[];\n}\n/* [MDN Reference](https://developer.mozilla.org/docs/Web/API/PromiseRejectionEvent) */\ndeclare abstract class PromiseRejectionEvent extends Event {\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/PromiseRejectionEvent/promise) */\n    readonly promise: Promise<any>;\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/PromiseRejectionEvent/reason) */\n    readonly reason: any;\n}\ndeclare abstract class Navigator {\n    sendBeacon(url: string, body?: (ReadableStream | string | (ArrayBuffer | ArrayBufferView) | Blob | FormData | URLSearchParams | URLSearchParams)): boolean;\n    readonly userAgent: string;\n    readonly hardwareConcurrency: number;\n}\n/**\n* The Workers runtime supports a subset of the Performance API, used to measure timing and performance,\n* as well as timing of subrequests and other operations.\n*\n* [Cloudflare Docs Reference](https://developers.cloudflare.com/workers/runtime-apis/performance/)\n*/\ninterface Performance {\n    /* [Cloudflare Docs Reference](https://developers.cloudflare.com/workers/runtime-apis/performance/#performancetimeorigin) */\n    readonly timeOrigin: number;\n    /* [Cloudflare Docs Reference](https://developers.cloudflare.com/workers/runtime-apis/performance/#performancenow) */\n    now(): number;\n}\ninterface AlarmInvocationInfo {\n    readonly isRetry: boolean;\n    readonly retryCount: number;\n}\ninterface Cloudflare {\n    readonly compatibilityFlags: Record<string, boolean>;\n}\ninterface DurableObject {\n    fetch(request: Request): Response | Promise<Response>;\n    alarm?(alarmInfo?: AlarmInvocationInfo): void | Promise<void>;\n    webSocketMessage?(ws: WebSocket, message: string | ArrayBuffer): void | Promise<void>;\n    webSocketClose?(ws: WebSocket, code: number, reason: string, wasClean: boolean): void | Promise<void>;\n    webSocketError?(ws: WebSocket, error: unknown): void | Promise<void>;\n}\ntype DurableObjectStub<T extends Rpc.DurableObjectBranded | undefined = undefined> = Fetcher<T, \"alarm\" | \"webSocketMessage\" | \"webSocketClose\" | \"webSocketError\"> & {\n    readonly id: DurableObjectId;\n    readonly name?: string;\n};\ninterface DurableObjectId {\n    toString(): string;\n    equals(other: DurableObjectId): boolean;\n    readonly name?: string;\n}\ninterface DurableObjectNamespace<T extends Rpc.DurableObjectBranded | undefined = undefined> {\n    newUniqueId(options?: DurableObjectNamespaceNewUniqueIdOptions): DurableObjectId;\n    idFromName(name: string): DurableObjectId;\n    idFromString(id: string): DurableObjectId;\n    get(id: DurableObjectId, options?: DurableObjectNamespaceGetDurableObjectOptions): DurableObjectStub<T>;\n    jurisdiction(jurisdiction: DurableObjectJurisdiction): DurableObjectNamespace<T>;\n}\ntype DurableObjectJurisdiction = \"eu\" | \"fedramp\";\ninterface DurableObjectNamespaceNewUniqueIdOptions {\n    jurisdiction?: DurableObjectJurisdiction;\n}\ntype DurableObjectLocationHint = \"wnam\" | \"enam\" | \"sam\" | \"weur\" | \"eeur\" | \"apac\" | \"oc\" | \"afr\" | \"me\";\ninterface DurableObjectNamespaceGetDurableObjectOptions {\n    locationHint?: DurableObjectLocationHint;\n}\ninterface DurableObjectState {\n    waitUntil(promise: Promise<any>): void;\n    readonly id: DurableObjectId;\n    readonly storage: DurableObjectStorage;\n    container?: Container;\n    blockConcurrencyWhile<T>(callback: () => Promise<T>): Promise<T>;\n    acceptWebSocket(ws: WebSocket, tags?: string[]): void;\n    getWebSockets(tag?: string): WebSocket[];\n    setWebSocketAutoResponse(maybeReqResp?: WebSocketRequestResponsePair): void;\n    getWebSocketAutoResponse(): WebSocketRequestResponsePair | null;\n    getWebSocketAutoResponseTimestamp(ws: WebSocket): Date | null;\n    setHibernatableWebSocketEventTimeout(timeoutMs?: number): void;\n    getHibernatableWebSocketEventTimeout(): number | null;\n    getTags(ws: WebSocket): string[];\n    abort(reason?: string): void;\n}\ninterface DurableObjectTransaction {\n    get<T = unknown>(key: string, options?: DurableObjectGetOptions): Promise<T | undefined>;\n    get<T = unknown>(keys: string[], options?: DurableObjectGetOptions): Promise<Map<string, T>>;\n    list<T = unknown>(options?: DurableObjectListOptions): Promise<Map<string, T>>;\n    put<T>(key: string, value: T, options?: DurableObjectPutOptions): Promise<void>;\n    put<T>(entries: Record<string, T>, options?: DurableObjectPutOptions): Promise<void>;\n    delete(key: string, options?: DurableObjectPutOptions): Promise<boolean>;\n    delete(keys: string[], options?: DurableObjectPutOptions): Promise<number>;\n    rollback(): void;\n    getAlarm(options?: DurableObjectGetAlarmOptions): Promise<number | null>;\n    setAlarm(scheduledTime: number | Date, options?: DurableObjectSetAlarmOptions): Promise<void>;\n    deleteAlarm(options?: DurableObjectSetAlarmOptions): Promise<void>;\n}\ninterface DurableObjectStorage {\n    get<T = unknown>(key: string, options?: DurableObjectGetOptions): Promise<T | undefined>;\n    get<T = unknown>(keys: string[], options?: DurableObjectGetOptions): Promise<Map<string, T>>;\n    list<T = unknown>(options?: DurableObjectListOptions): Promise<Map<string, T>>;\n    put<T>(key: string, value: T, options?: DurableObjectPutOptions): Promise<void>;\n    put<T>(entries: Record<string, T>, options?: DurableObjectPutOptions): Promise<void>;\n    delete(key: string, options?: DurableObjectPutOptions): Promise<boolean>;\n    delete(keys: string[], options?: DurableObjectPutOptions): Promise<number>;\n    deleteAll(options?: DurableObjectPutOptions): Promise<void>;\n    transaction<T>(closure: (txn: DurableObjectTransaction) => Promise<T>): Promise<T>;\n    getAlarm(options?: DurableObjectGetAlarmOptions): Promise<number | null>;\n    setAlarm(scheduledTime: number | Date, options?: DurableObjectSetAlarmOptions): Promise<void>;\n    deleteAlarm(options?: DurableObjectSetAlarmOptions): Promise<void>;\n    sync(): Promise<void>;\n    sql: SqlStorage;\n    transactionSync<T>(closure: () => T): T;\n    getCurrentBookmark(): Promise<string>;\n    getBookmarkForTime(timestamp: number | Date): Promise<string>;\n    onNextSessionRestoreBookmark(bookmark: string): Promise<string>;\n}\ninterface DurableObjectListOptions {\n    start?: string;\n    startAfter?: string;\n    end?: string;\n    prefix?: string;\n    reverse?: boolean;\n    limit?: number;\n    allowConcurrency?: boolean;\n    noCache?: boolean;\n}\ninterface DurableObjectGetOptions {\n    allowConcurrency?: boolean;\n    noCache?: boolean;\n}\ninterface DurableObjectGetAlarmOptions {\n    allowConcurrency?: boolean;\n}\ninterface DurableObjectPutOptions {\n    allowConcurrency?: boolean;\n    allowUnconfirmed?: boolean;\n    noCache?: boolean;\n}\ninterface DurableObjectSetAlarmOptions {\n    allowConcurrency?: boolean;\n    allowUnconfirmed?: boolean;\n}\ndeclare class WebSocketRequestResponsePair {\n    constructor(request: string, response: string);\n    get request(): string;\n    get response(): string;\n}\ninterface AnalyticsEngineDataset {\n    writeDataPoint(event?: AnalyticsEngineDataPoint): void;\n}\ninterface AnalyticsEngineDataPoint {\n    indexes?: ((ArrayBuffer | string) | null)[];\n    doubles?: number[];\n    blobs?: ((ArrayBuffer | string) | null)[];\n}\n/**\n * An event which takes place in the DOM.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Event)\n */\ndeclare class Event {\n    constructor(type: string, init?: EventInit);\n    /**\n     * Returns the type of event, e.g. \"click\", \"hashchange\", or \"submit\".\n     *\n     * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Event/type)\n     */\n    get type(): string;\n    /**\n     * Returns the event's phase, which is one of NONE, CAPTURING_PHASE, AT_TARGET, and BUBBLING_PHASE.\n     *\n     * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Event/eventPhase)\n     */\n    get eventPhase(): number;\n    /**\n     * Returns true or false depending on how event was initialized. True if event invokes listeners past a ShadowRoot node that is the root of its target, and false otherwise.\n     *\n     * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Event/composed)\n     */\n    get composed(): boolean;\n    /**\n     * Returns true or false depending on how event was initialized. True if event goes through its target's ancestors in reverse tree order, and false otherwise.\n     *\n     * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Event/bubbles)\n     */\n    get bubbles(): boolean;\n    /**\n     * Returns true or false depending on how event was initialized. Its return value does not always carry meaning, but true can indicate that part of the operation during which event was dispatched, can be canceled by invoking the preventDefault() method.\n     *\n     * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Event/cancelable)\n     */\n    get cancelable(): boolean;\n    /**\n     * Returns true if preventDefault() was invoked successfully to indicate cancelation, and false otherwise.\n     *\n     * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Event/defaultPrevented)\n     */\n    get defaultPrevented(): boolean;\n    /**\n     * @deprecated\n     *\n     * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Event/returnValue)\n     */\n    get returnValue(): boolean;\n    /**\n     * Returns the object whose event listener's callback is currently being invoked.\n     *\n     * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Event/currentTarget)\n     */\n    get currentTarget(): EventTarget | undefined;\n    /**\n     * Returns the object to which event is dispatched (its target).\n     *\n     * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Event/target)\n     */\n    get target(): EventTarget | undefined;\n    /**\n     * @deprecated\n     *\n     * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Event/srcElement)\n     */\n    get srcElement(): EventTarget | undefined;\n    /**\n     * Returns the event's timestamp as the number of milliseconds measured relative to the time origin.\n     *\n     * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Event/timeStamp)\n     */\n    get timeStamp(): number;\n    /**\n     * Returns true if event was dispatched by the user agent, and false otherwise.\n     *\n     * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Event/isTrusted)\n     */\n    get isTrusted(): boolean;\n    /**\n     * @deprecated\n     *\n     * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Event/cancelBubble)\n     */\n    get cancelBubble(): boolean;\n    /**\n     * @deprecated\n     *\n     * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Event/cancelBubble)\n     */\n    set cancelBubble(value: boolean);\n    /**\n     * Invoking this method prevents event from reaching any registered event listeners after the current one finishes running and, when dispatched in a tree, also prevents event from reaching any other objects.\n     *\n     * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Event/stopImmediatePropagation)\n     */\n    stopImmediatePropagation(): void;\n    /**\n     * If invoked when the cancelable attribute value is true, and while executing a listener for the event with passive set to false, signals to the operation that caused event to be dispatched that it needs to be canceled.\n     *\n     * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Event/preventDefault)\n     */\n    preventDefault(): void;\n    /**\n     * When dispatched in a tree, invoking this method prevents event from reaching any objects other than the current object.\n     *\n     * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Event/stopPropagation)\n     */\n    stopPropagation(): void;\n    /**\n     * Returns the invocation target objects of event's path (objects on which listeners will be invoked), except for any nodes in shadow trees of which the shadow root's mode is \"closed\" that are not reachable from event's currentTarget.\n     *\n     * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Event/composedPath)\n     */\n    composedPath(): EventTarget[];\n    static readonly NONE: number;\n    static readonly CAPTURING_PHASE: number;\n    static readonly AT_TARGET: number;\n    static readonly BUBBLING_PHASE: number;\n}\ninterface EventInit {\n    bubbles?: boolean;\n    cancelable?: boolean;\n    composed?: boolean;\n}\ntype EventListener<EventType extends Event = Event> = (event: EventType) => void;\ninterface EventListenerObject<EventType extends Event = Event> {\n    handleEvent(event: EventType): void;\n}\ntype EventListenerOrEventListenerObject<EventType extends Event = Event> = EventListener<EventType> | EventListenerObject<EventType>;\n/**\n * EventTarget is a DOM interface implemented by objects that can receive events and may have listeners for them.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/EventTarget)\n */\ndeclare class EventTarget<EventMap extends Record<string, Event> = Record<string, Event>> {\n    constructor();\n    /**\n     * Appends an event listener for events whose type attribute value is type. The callback argument sets the callback that will be invoked when the event is dispatched.\n     *\n     * The options argument sets listener-specific options. For compatibility this can be a boolean, in which case the method behaves exactly as if the value was specified as options's capture.\n     *\n     * When set to true, options's capture prevents callback from being invoked when the event's eventPhase attribute value is BUBBLING_PHASE. When false (or not present), callback will not be invoked when event's eventPhase attribute value is CAPTURING_PHASE. Either way, callback will be invoked if event's eventPhase attribute value is AT_TARGET.\n     *\n     * When set to true, options's passive indicates that the callback will not cancel the event by invoking preventDefault(). This is used to enable performance optimizations described in § 2.8 Observing event listeners.\n     *\n     * When set to true, options's once indicates that the callback will only be invoked once after which the event listener will be removed.\n     *\n     * If an AbortSignal is passed for options's signal, then the event listener will be removed when signal is aborted.\n     *\n     * The event listener is appended to target's event listener list and is not appended if it has the same type, callback, and capture.\n     *\n     * [MDN Reference](https://developer.mozilla.org/docs/Web/API/EventTarget/addEventListener)\n     */\n    addEventListener<Type extends keyof EventMap>(type: Type, handler: EventListenerOrEventListenerObject<EventMap[Type]>, options?: EventTargetAddEventListenerOptions | boolean): void;\n    /**\n     * Removes the event listener in target's event listener list with the same type, callback, and options.\n     *\n     * [MDN Reference](https://developer.mozilla.org/docs/Web/API/EventTarget/removeEventListener)\n     */\n    removeEventListener<Type extends keyof EventMap>(type: Type, handler: EventListenerOrEventListenerObject<EventMap[Type]>, options?: EventTargetEventListenerOptions | boolean): void;\n    /**\n     * Dispatches a synthetic event event to target and returns true if either event's cancelable attribute value is false or its preventDefault() method was not invoked, and false otherwise.\n     *\n     * [MDN Reference](https://developer.mozilla.org/docs/Web/API/EventTarget/dispatchEvent)\n     */\n    dispatchEvent(event: EventMap[keyof EventMap]): boolean;\n}\ninterface EventTargetEventListenerOptions {\n    capture?: boolean;\n}\ninterface EventTargetAddEventListenerOptions {\n    capture?: boolean;\n    passive?: boolean;\n    once?: boolean;\n    signal?: AbortSignal;\n}\ninterface EventTargetHandlerObject {\n    handleEvent: (event: Event) => any | undefined;\n}\n/**\n * A controller object that allows you to abort one or more DOM requests as and when desired.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/AbortController)\n */\ndeclare class AbortController {\n    constructor();\n    /**\n     * Returns the AbortSignal object associated with this object.\n     *\n     * [MDN Reference](https://developer.mozilla.org/docs/Web/API/AbortController/signal)\n     */\n    get signal(): AbortSignal;\n    /**\n     * Invoking this method will set this object's AbortSignal's aborted flag and signal to any observers that the associated activity is to be aborted.\n     *\n     * [MDN Reference](https://developer.mozilla.org/docs/Web/API/AbortController/abort)\n     */\n    abort(reason?: any): void;\n}\n/**\n * A signal object that allows you to communicate with a DOM request (such as a Fetch) and abort it if required via an AbortController object.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/AbortSignal)\n */\ndeclare abstract class AbortSignal extends EventTarget {\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/AbortSignal/abort_static) */\n    static abort(reason?: any): AbortSignal;\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/AbortSignal/timeout_static) */\n    static timeout(delay: number): AbortSignal;\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/AbortSignal/any_static) */\n    static any(signals: AbortSignal[]): AbortSignal;\n    /**\n     * Returns true if this AbortSignal's AbortController has signaled to abort, and false otherwise.\n     *\n     * [MDN Reference](https://developer.mozilla.org/docs/Web/API/AbortSignal/aborted)\n     */\n    get aborted(): boolean;\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/AbortSignal/reason) */\n    get reason(): any;\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/AbortSignal/abort_event) */\n    get onabort(): any | null;\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/AbortSignal/abort_event) */\n    set onabort(value: any | null);\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/AbortSignal/throwIfAborted) */\n    throwIfAborted(): void;\n}\ninterface Scheduler {\n    wait(delay: number, maybeOptions?: SchedulerWaitOptions): Promise<void>;\n}\ninterface SchedulerWaitOptions {\n    signal?: AbortSignal;\n}\n/**\n * Extends the lifetime of the install and activate events dispatched on the global scope as part of the service worker lifecycle. This ensures that any functional events (like FetchEvent) are not dispatched until it upgrades database schemas and deletes the outdated cache entries.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/ExtendableEvent)\n */\ndeclare abstract class ExtendableEvent extends Event {\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/ExtendableEvent/waitUntil) */\n    waitUntil(promise: Promise<any>): void;\n}\n/* [MDN Reference](https://developer.mozilla.org/docs/Web/API/CustomEvent) */\ndeclare class CustomEvent<T = any> extends Event {\n    constructor(type: string, init?: CustomEventCustomEventInit);\n    /**\n     * Returns any custom data event was created with. Typically used for synthetic events.\n     *\n     * [MDN Reference](https://developer.mozilla.org/docs/Web/API/CustomEvent/detail)\n     */\n    get detail(): T;\n}\ninterface CustomEventCustomEventInit {\n    bubbles?: boolean;\n    cancelable?: boolean;\n    composed?: boolean;\n    detail?: any;\n}\n/**\n * A file-like object of immutable, raw data. Blobs represent data that isn't necessarily in a JavaScript-native format. The File interface is based on Blob, inheriting blob functionality and expanding it to support files on the user's system.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Blob)\n */\ndeclare class Blob {\n    constructor(type?: ((ArrayBuffer | ArrayBufferView) | string | Blob)[], options?: BlobOptions);\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/Blob/size) */\n    get size(): number;\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/Blob/type) */\n    get type(): string;\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/Blob/slice) */\n    slice(start?: number, end?: number, type?: string): Blob;\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/Blob/arrayBuffer) */\n    arrayBuffer(): Promise<ArrayBuffer>;\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/Blob/bytes) */\n    bytes(): Promise<Uint8Array>;\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/Blob/text) */\n    text(): Promise<string>;\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/Blob/stream) */\n    stream(): ReadableStream;\n}\ninterface BlobOptions {\n    type?: string;\n}\n/**\n * Provides information about files and allows JavaScript in a web page to access their content.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/File)\n */\ndeclare class File extends Blob {\n    constructor(bits: ((ArrayBuffer | ArrayBufferView) | string | Blob)[] | undefined, name: string, options?: FileOptions);\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/File/name) */\n    get name(): string;\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/File/lastModified) */\n    get lastModified(): number;\n}\ninterface FileOptions {\n    type?: string;\n    lastModified?: number;\n}\n/**\n* The Cache API allows fine grained control of reading and writing from the Cloudflare global network cache.\n*\n* [Cloudflare Docs Reference](https://developers.cloudflare.com/workers/runtime-apis/cache/)\n*/\ndeclare abstract class CacheStorage {\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/CacheStorage/open) */\n    open(cacheName: string): Promise<Cache>;\n    readonly default: Cache;\n}\n/**\n* The Cache API allows fine grained control of reading and writing from the Cloudflare global network cache.\n*\n* [Cloudflare Docs Reference](https://developers.cloudflare.com/workers/runtime-apis/cache/)\n*/\ndeclare abstract class Cache {\n    /* [Cloudflare Docs Reference](https://developers.cloudflare.com/workers/runtime-apis/cache/#delete) */\n    delete(request: RequestInfo | URL, options?: CacheQueryOptions): Promise<boolean>;\n    /* [Cloudflare Docs Reference](https://developers.cloudflare.com/workers/runtime-apis/cache/#match) */\n    match(request: RequestInfo | URL, options?: CacheQueryOptions): Promise<Response | undefined>;\n    /* [Cloudflare Docs Reference](https://developers.cloudflare.com/workers/runtime-apis/cache/#put) */\n    put(request: RequestInfo | URL, response: Response): Promise<void>;\n}\ninterface CacheQueryOptions {\n    ignoreMethod?: boolean;\n}\n/**\n* The Web Crypto API provides a set of low-level functions for common cryptographic tasks.\n* The Workers runtime implements the full surface of this API, but with some differences in\n* the [supported algorithms](https://developers.cloudflare.com/workers/runtime-apis/web-crypto/#supported-algorithms)\n* compared to those implemented in most browsers.\n*\n* [Cloudflare Docs Reference](https://developers.cloudflare.com/workers/runtime-apis/web-crypto/)\n*/\ndeclare abstract class Crypto {\n    /**\n     * Available only in secure contexts.\n     *\n     * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Crypto/subtle)\n     */\n    get subtle(): SubtleCrypto;\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/Crypto/getRandomValues) */\n    getRandomValues<T extends Int8Array | Uint8Array | Int16Array | Uint16Array | Int32Array | Uint32Array | BigInt64Array | BigUint64Array>(buffer: T): T;\n    /**\n     * Available only in secure contexts.\n     *\n     * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Crypto/randomUUID)\n     */\n    randomUUID(): string;\n    DigestStream: typeof DigestStream;\n}\n/**\n * This Web Crypto API interface provides a number of low-level cryptographic functions. It is accessed via the Crypto.subtle properties available in a window context (via Window.crypto).\n * Available only in secure contexts.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/SubtleCrypto)\n */\ndeclare abstract class SubtleCrypto {\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/SubtleCrypto/encrypt) */\n    encrypt(algorithm: string | SubtleCryptoEncryptAlgorithm, key: CryptoKey, plainText: ArrayBuffer | ArrayBufferView): Promise<ArrayBuffer>;\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/SubtleCrypto/decrypt) */\n    decrypt(algorithm: string | SubtleCryptoEncryptAlgorithm, key: CryptoKey, cipherText: ArrayBuffer | ArrayBufferView): Promise<ArrayBuffer>;\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/SubtleCrypto/sign) */\n    sign(algorithm: string | SubtleCryptoSignAlgorithm, key: CryptoKey, data: ArrayBuffer | ArrayBufferView): Promise<ArrayBuffer>;\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/SubtleCrypto/verify) */\n    verify(algorithm: string | SubtleCryptoSignAlgorithm, key: CryptoKey, signature: ArrayBuffer | ArrayBufferView, data: ArrayBuffer | ArrayBufferView): Promise<boolean>;\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/SubtleCrypto/digest) */\n    digest(algorithm: string | SubtleCryptoHashAlgorithm, data: ArrayBuffer | ArrayBufferView): Promise<ArrayBuffer>;\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/SubtleCrypto/generateKey) */\n    generateKey(algorithm: string | SubtleCryptoGenerateKeyAlgorithm, extractable: boolean, keyUsages: string[]): Promise<CryptoKey | CryptoKeyPair>;\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/SubtleCrypto/deriveKey) */\n    deriveKey(algorithm: string | SubtleCryptoDeriveKeyAlgorithm, baseKey: CryptoKey, derivedKeyAlgorithm: string | SubtleCryptoImportKeyAlgorithm, extractable: boolean, keyUsages: string[]): Promise<CryptoKey>;\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/SubtleCrypto/deriveBits) */\n    deriveBits(algorithm: string | SubtleCryptoDeriveKeyAlgorithm, baseKey: CryptoKey, length?: number | null): Promise<ArrayBuffer>;\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/SubtleCrypto/importKey) */\n    importKey(format: string, keyData: (ArrayBuffer | ArrayBufferView) | JsonWebKey, algorithm: string | SubtleCryptoImportKeyAlgorithm, extractable: boolean, keyUsages: string[]): Promise<CryptoKey>;\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/SubtleCrypto/exportKey) */\n    exportKey(format: string, key: CryptoKey): Promise<ArrayBuffer | JsonWebKey>;\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/SubtleCrypto/wrapKey) */\n    wrapKey(format: string, key: CryptoKey, wrappingKey: CryptoKey, wrapAlgorithm: string | SubtleCryptoEncryptAlgorithm): Promise<ArrayBuffer>;\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/SubtleCrypto/unwrapKey) */\n    unwrapKey(format: string, wrappedKey: ArrayBuffer | ArrayBufferView, unwrappingKey: CryptoKey, unwrapAlgorithm: string | SubtleCryptoEncryptAlgorithm, unwrappedKeyAlgorithm: string | SubtleCryptoImportKeyAlgorithm, extractable: boolean, keyUsages: string[]): Promise<CryptoKey>;\n    timingSafeEqual(a: ArrayBuffer | ArrayBufferView, b: ArrayBuffer | ArrayBufferView): boolean;\n}\n/**\n * The CryptoKey dictionary of the Web Crypto API represents a cryptographic key.\n * Available only in secure contexts.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/CryptoKey)\n */\ndeclare abstract class CryptoKey {\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/CryptoKey/type) */\n    readonly type: string;\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/CryptoKey/extractable) */\n    readonly extractable: boolean;\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/CryptoKey/algorithm) */\n    readonly algorithm: CryptoKeyKeyAlgorithm | CryptoKeyAesKeyAlgorithm | CryptoKeyHmacKeyAlgorithm | CryptoKeyRsaKeyAlgorithm | CryptoKeyEllipticKeyAlgorithm | CryptoKeyArbitraryKeyAlgorithm;\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/CryptoKey/usages) */\n    readonly usages: string[];\n}\ninterface CryptoKeyPair {\n    publicKey: CryptoKey;\n    privateKey: CryptoKey;\n}\ninterface JsonWebKey {\n    kty: string;\n    use?: string;\n    key_ops?: string[];\n    alg?: string;\n    ext?: boolean;\n    crv?: string;\n    x?: string;\n    y?: string;\n    d?: string;\n    n?: string;\n    e?: string;\n    p?: string;\n    q?: string;\n    dp?: string;\n    dq?: string;\n    qi?: string;\n    oth?: RsaOtherPrimesInfo[];\n    k?: string;\n}\ninterface RsaOtherPrimesInfo {\n    r?: string;\n    d?: string;\n    t?: string;\n}\ninterface SubtleCryptoDeriveKeyAlgorithm {\n    name: string;\n    salt?: (ArrayBuffer | ArrayBufferView);\n    iterations?: number;\n    hash?: (string | SubtleCryptoHashAlgorithm);\n    $public?: CryptoKey;\n    info?: (ArrayBuffer | ArrayBufferView);\n}\ninterface SubtleCryptoEncryptAlgorithm {\n    name: string;\n    iv?: (ArrayBuffer | ArrayBufferView);\n    additionalData?: (ArrayBuffer | ArrayBufferView);\n    tagLength?: number;\n    counter?: (ArrayBuffer | ArrayBufferView);\n    length?: number;\n    label?: (ArrayBuffer | ArrayBufferView);\n}\ninterface SubtleCryptoGenerateKeyAlgorithm {\n    name: string;\n    hash?: (string | SubtleCryptoHashAlgorithm);\n    modulusLength?: number;\n    publicExponent?: (ArrayBuffer | ArrayBufferView);\n    length?: number;\n    namedCurve?: string;\n}\ninterface SubtleCryptoHashAlgorithm {\n    name: string;\n}\ninterface SubtleCryptoImportKeyAlgorithm {\n    name: string;\n    hash?: (string | SubtleCryptoHashAlgorithm);\n    length?: number;\n    namedCurve?: string;\n    compressed?: boolean;\n}\ninterface SubtleCryptoSignAlgorithm {\n    name: string;\n    hash?: (string | SubtleCryptoHashAlgorithm);\n    dataLength?: number;\n    saltLength?: number;\n}\ninterface CryptoKeyKeyAlgorithm {\n    name: string;\n}\ninterface CryptoKeyAesKeyAlgorithm {\n    name: string;\n    length: number;\n}\ninterface CryptoKeyHmacKeyAlgorithm {\n    name: string;\n    hash: CryptoKeyKeyAlgorithm;\n    length: number;\n}\ninterface CryptoKeyRsaKeyAlgorithm {\n    name: string;\n    modulusLength: number;\n    publicExponent: ArrayBuffer | ArrayBufferView;\n    hash?: CryptoKeyKeyAlgorithm;\n}\ninterface CryptoKeyEllipticKeyAlgorithm {\n    name: string;\n    namedCurve: string;\n}\ninterface CryptoKeyArbitraryKeyAlgorithm {\n    name: string;\n    hash?: CryptoKeyKeyAlgorithm;\n    namedCurve?: string;\n    length?: number;\n}\ndeclare class DigestStream extends WritableStream<ArrayBuffer | ArrayBufferView> {\n    constructor(algorithm: string | SubtleCryptoHashAlgorithm);\n    readonly digest: Promise<ArrayBuffer>;\n    get bytesWritten(): number | bigint;\n}\n/**\n * A decoder for a specific method, that is a specific character encoding, like utf-8, iso-8859-2, koi8, cp1261, gbk, etc. A decoder takes a stream of bytes as input and emits a stream of code points. For a more scalable, non-native library, see StringView – a C-like representation of strings based on typed arrays.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/TextDecoder)\n */\ndeclare class TextDecoder {\n    constructor(label?: string, options?: TextDecoderConstructorOptions);\n    /**\n     * Returns the result of running encoding's decoder. The method can be invoked zero or more times with options's stream set to true, and then once without options's stream (or set to false), to process a fragmented input. If the invocation without options's stream (or set to false) has no input, it's clearest to omit both arguments.\n     *\n     * ```\n     * var string = \"\", decoder = new TextDecoder(encoding), buffer;\n     * while(buffer = next_chunk()) {\n     *   string += decoder.decode(buffer, {stream:true});\n     * }\n     * string += decoder.decode(); // end-of-queue\n     * ```\n     *\n     * If the error mode is \"fatal\" and encoding's decoder returns error, throws a TypeError.\n     *\n     * [MDN Reference](https://developer.mozilla.org/docs/Web/API/TextDecoder/decode)\n     */\n    decode(input?: (ArrayBuffer | ArrayBufferView), options?: TextDecoderDecodeOptions): string;\n    get encoding(): string;\n    get fatal(): boolean;\n    get ignoreBOM(): boolean;\n}\n/**\n * TextEncoder takes a stream of code points as input and emits a stream of bytes. For a more scalable, non-native library, see StringView – a C-like representation of strings based on typed arrays.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/TextEncoder)\n */\ndeclare class TextEncoder {\n    constructor();\n    /**\n     * Returns the result of running UTF-8's encoder.\n     *\n     * [MDN Reference](https://developer.mozilla.org/docs/Web/API/TextEncoder/encode)\n     */\n    encode(input?: string): Uint8Array;\n    /**\n     * Runs the UTF-8 encoder on source, stores the result of that operation into destination, and returns the progress made as an object wherein read is the number of converted code units of source and written is the number of bytes modified in destination.\n     *\n     * [MDN Reference](https://developer.mozilla.org/docs/Web/API/TextEncoder/encodeInto)\n     */\n    encodeInto(input: string, buffer: ArrayBuffer | ArrayBufferView): TextEncoderEncodeIntoResult;\n    get encoding(): string;\n}\ninterface TextDecoderConstructorOptions {\n    fatal: boolean;\n    ignoreBOM: boolean;\n}\ninterface TextDecoderDecodeOptions {\n    stream: boolean;\n}\ninterface TextEncoderEncodeIntoResult {\n    read: number;\n    written: number;\n}\n/**\n * Events providing information related to errors in scripts or in files.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/ErrorEvent)\n */\ndeclare class ErrorEvent extends Event {\n    constructor(type: string, init?: ErrorEventErrorEventInit);\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/ErrorEvent/filename) */\n    get filename(): string;\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/ErrorEvent/message) */\n    get message(): string;\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/ErrorEvent/lineno) */\n    get lineno(): number;\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/ErrorEvent/colno) */\n    get colno(): number;\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/ErrorEvent/error) */\n    get error(): any;\n}\ninterface ErrorEventErrorEventInit {\n    message?: string;\n    filename?: string;\n    lineno?: number;\n    colno?: number;\n    error?: any;\n}\n/**\n * Provides a way to easily construct a set of key/value pairs representing form fields and their values, which can then be easily sent using the XMLHttpRequest.send() method. It uses the same format a form would use if the encoding type were set to \"multipart/form-data\".\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/FormData)\n */\ndeclare class FormData {\n    constructor();\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/FormData/append) */\n    append(name: string, value: string): void;\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/FormData/append) */\n    append(name: string, value: Blob, filename?: string): void;\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/FormData/delete) */\n    delete(name: string): void;\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/FormData/get) */\n    get(name: string): (File | string) | null;\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/FormData/getAll) */\n    getAll(name: string): (File | string)[];\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/FormData/has) */\n    has(name: string): boolean;\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/FormData/set) */\n    set(name: string, value: string): void;\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/FormData/set) */\n    set(name: string, value: Blob, filename?: string): void;\n    /* Returns an array of key, value pairs for every entry in the list. */\n    entries(): IterableIterator<[\n        key: string,\n        value: File | string\n    ]>;\n    /* Returns a list of keys in the list. */\n    keys(): IterableIterator<string>;\n    /* Returns a list of values in the list. */\n    values(): IterableIterator<(File | string)>;\n    forEach<This = unknown>(callback: (this: This, value: File | string, key: string, parent: FormData) => void, thisArg?: This): void;\n    [Symbol.iterator](): IterableIterator<[\n        key: string,\n        value: File | string\n    ]>;\n}\ninterface ContentOptions {\n    html?: boolean;\n}\ndeclare class HTMLRewriter {\n    constructor();\n    on(selector: string, handlers: HTMLRewriterElementContentHandlers): HTMLRewriter;\n    onDocument(handlers: HTMLRewriterDocumentContentHandlers): HTMLRewriter;\n    transform(response: Response): Response;\n}\ninterface HTMLRewriterElementContentHandlers {\n    element?(element: Element): void | Promise<void>;\n    comments?(comment: Comment): void | Promise<void>;\n    text?(element: Text): void | Promise<void>;\n}\ninterface HTMLRewriterDocumentContentHandlers {\n    doctype?(doctype: Doctype): void | Promise<void>;\n    comments?(comment: Comment): void | Promise<void>;\n    text?(text: Text): void | Promise<void>;\n    end?(end: DocumentEnd): void | Promise<void>;\n}\ninterface Doctype {\n    readonly name: string | null;\n    readonly publicId: string | null;\n    readonly systemId: string | null;\n}\ninterface Element {\n    tagName: string;\n    readonly attributes: IterableIterator<string[]>;\n    readonly removed: boolean;\n    readonly namespaceURI: string;\n    getAttribute(name: string): string | null;\n    hasAttribute(name: string): boolean;\n    setAttribute(name: string, value: string): Element;\n    removeAttribute(name: string): Element;\n    before(content: string | ReadableStream | Response, options?: ContentOptions): Element;\n    after(content: string | ReadableStream | Response, options?: ContentOptions): Element;\n    prepend(content: string | ReadableStream | Response, options?: ContentOptions): Element;\n    append(content: string | ReadableStream | Response, options?: ContentOptions): Element;\n    replace(content: string | ReadableStream | Response, options?: ContentOptions): Element;\n    remove(): Element;\n    removeAndKeepContent(): Element;\n    setInnerContent(content: string | ReadableStream | Response, options?: ContentOptions): Element;\n    onEndTag(handler: (tag: EndTag) => void | Promise<void>): void;\n}\ninterface EndTag {\n    name: string;\n    before(content: string | ReadableStream | Response, options?: ContentOptions): EndTag;\n    after(content: string | ReadableStream | Response, options?: ContentOptions): EndTag;\n    remove(): EndTag;\n}\ninterface Comment {\n    text: string;\n    readonly removed: boolean;\n    before(content: string, options?: ContentOptions): Comment;\n    after(content: string, options?: ContentOptions): Comment;\n    replace(content: string, options?: ContentOptions): Comment;\n    remove(): Comment;\n}\ninterface Text {\n    readonly text: string;\n    readonly lastInTextNode: boolean;\n    readonly removed: boolean;\n    before(content: string | ReadableStream | Response, options?: ContentOptions): Text;\n    after(content: string | ReadableStream | Response, options?: ContentOptions): Text;\n    replace(content: string | ReadableStream | Response, options?: ContentOptions): Text;\n    remove(): Text;\n}\ninterface DocumentEnd {\n    append(content: string, options?: ContentOptions): DocumentEnd;\n}\n/**\n * This is the event type for fetch events dispatched on the service worker global scope. It contains information about the fetch, including the request and how the receiver will treat the response. It provides the event.respondWith() method, which allows us to provide a response to this fetch.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/FetchEvent)\n */\ndeclare abstract class FetchEvent extends ExtendableEvent {\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/FetchEvent/request) */\n    readonly request: Request;\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/FetchEvent/respondWith) */\n    respondWith(promise: Response | Promise<Response>): void;\n    passThroughOnException(): void;\n}\ntype HeadersInit = Headers | Iterable<Iterable<string>> | Record<string, string>;\n/**\n * This Fetch API interface allows you to perform various actions on HTTP request and response headers. These actions include retrieving, setting, adding to, and removing. A Headers object has an associated header list, which is initially empty and consists of zero or more name and value pairs.  You can add to this using methods like append() (see Examples.) In all methods of this interface, header names are matched by case-insensitive byte sequence.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Headers)\n */\ndeclare class Headers {\n    constructor(init?: HeadersInit);\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/Headers/get) */\n    get(name: string): string | null;\n    getAll(name: string): string[];\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/Headers/getSetCookie) */\n    getSetCookie(): string[];\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/Headers/has) */\n    has(name: string): boolean;\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/Headers/set) */\n    set(name: string, value: string): void;\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/Headers/append) */\n    append(name: string, value: string): void;\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/Headers/delete) */\n    delete(name: string): void;\n    forEach<This = unknown>(callback: (this: This, value: string, key: string, parent: Headers) => void, thisArg?: This): void;\n    /* Returns an iterator allowing to go through all key/value pairs contained in this object. */\n    entries(): IterableIterator<[\n        key: string,\n        value: string\n    ]>;\n    /* Returns an iterator allowing to go through all keys of the key/value pairs contained in this object. */\n    keys(): IterableIterator<string>;\n    /* Returns an iterator allowing to go through all values of the key/value pairs contained in this object. */\n    values(): IterableIterator<string>;\n    [Symbol.iterator](): IterableIterator<[\n        key: string,\n        value: string\n    ]>;\n}\ntype BodyInit = ReadableStream<Uint8Array> | string | ArrayBuffer | ArrayBufferView | Blob | URLSearchParams | FormData;\ndeclare abstract class Body {\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/Request/body) */\n    get body(): ReadableStream | null;\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/Request/bodyUsed) */\n    get bodyUsed(): boolean;\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/Request/arrayBuffer) */\n    arrayBuffer(): Promise<ArrayBuffer>;\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/Request/bytes) */\n    bytes(): Promise<Uint8Array>;\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/Request/text) */\n    text(): Promise<string>;\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/Request/json) */\n    json<T>(): Promise<T>;\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/Request/formData) */\n    formData(): Promise<FormData>;\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/Request/blob) */\n    blob(): Promise<Blob>;\n}\n/**\n * This Fetch API interface represents the response to a request.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Response)\n */\ndeclare var Response: {\n    prototype: Response;\n    new (body?: BodyInit | null, init?: ResponseInit): Response;\n    error(): Response;\n    redirect(url: string, status?: number): Response;\n    json(any: any, maybeInit?: (ResponseInit | Response)): Response;\n};\n/**\n * This Fetch API interface represents the response to a request.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Response)\n */\ninterface Response extends Body {\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/Response/clone) */\n    clone(): Response;\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/Response/status) */\n    status: number;\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/Response/statusText) */\n    statusText: string;\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/Response/headers) */\n    headers: Headers;\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/Response/ok) */\n    ok: boolean;\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/Response/redirected) */\n    redirected: boolean;\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/Response/url) */\n    url: string;\n    webSocket: WebSocket | null;\n    cf: any | undefined;\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/Response/type) */\n    type: \"default\" | \"error\";\n}\ninterface ResponseInit {\n    status?: number;\n    statusText?: string;\n    headers?: HeadersInit;\n    cf?: any;\n    webSocket?: (WebSocket | null);\n    encodeBody?: \"automatic\" | \"manual\";\n}\ntype RequestInfo<CfHostMetadata = unknown, Cf = CfProperties<CfHostMetadata>> = Request<CfHostMetadata, Cf> | string;\n/**\n * This Fetch API interface represents a resource request.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Request)\n */\ndeclare var Request: {\n    prototype: Request;\n    new <CfHostMetadata = unknown, Cf = CfProperties<CfHostMetadata>>(input: RequestInfo<CfProperties> | URL, init?: RequestInit<Cf>): Request<CfHostMetadata, Cf>;\n};\n/**\n * This Fetch API interface represents a resource request.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Request)\n */\ninterface Request<CfHostMetadata = unknown, Cf = CfProperties<CfHostMetadata>> extends Body {\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/Request/clone) */\n    clone(): Request<CfHostMetadata, Cf>;\n    /**\n     * Returns request's HTTP method, which is \"GET\" by default.\n     *\n     * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Request/method)\n     */\n    method: string;\n    /**\n     * Returns the URL of request as a string.\n     *\n     * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Request/url)\n     */\n    url: string;\n    /**\n     * Returns a Headers object consisting of the headers associated with request. Note that headers added in the network layer by the user agent will not be accounted for in this object, e.g., the \"Host\" header.\n     *\n     * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Request/headers)\n     */\n    headers: Headers;\n    /**\n     * Returns the redirect mode associated with request, which is a string indicating how redirects for the request will be handled during fetching. A request will follow redirects by default.\n     *\n     * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Request/redirect)\n     */\n    redirect: string;\n    fetcher: Fetcher | null;\n    /**\n     * Returns the signal associated with request, which is an AbortSignal object indicating whether or not request has been aborted, and its abort event handler.\n     *\n     * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Request/signal)\n     */\n    signal: AbortSignal;\n    cf: Cf | undefined;\n    /**\n     * Returns request's subresource integrity metadata, which is a cryptographic hash of the resource being fetched. Its value consists of multiple hashes separated by whitespace. [SRI]\n     *\n     * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Request/integrity)\n     */\n    integrity: string;\n    /**\n     * Returns a boolean indicating whether or not request can outlive the global in which it was created.\n     *\n     * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Request/keepalive)\n     */\n    keepalive: boolean;\n    /**\n     * Returns the cache mode associated with request, which is a string indicating how the request will interact with the browser's cache when fetching.\n     *\n     * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Request/cache)\n     */\n    cache?: \"no-store\";\n}\ninterface RequestInit<Cf = CfProperties> {\n    /* A string to set request's method. */\n    method?: string;\n    /* A Headers object, an object literal, or an array of two-item arrays to set request's headers. */\n    headers?: HeadersInit;\n    /* A BodyInit object or null to set request's body. */\n    body?: BodyInit | null;\n    /* A string indicating whether request follows redirects, results in an error upon encountering a redirect, or returns the redirect (in an opaque fashion). Sets request's redirect. */\n    redirect?: string;\n    fetcher?: (Fetcher | null);\n    cf?: Cf;\n    /* A string indicating how the request will interact with the browser's cache to set request's cache. */\n    cache?: \"no-store\";\n    /* A cryptographic hash of the resource to be fetched by request. Sets request's integrity. */\n    integrity?: string;\n    /* An AbortSignal to set request's signal. */\n    signal?: (AbortSignal | null);\n    encodeResponseBody?: \"automatic\" | \"manual\";\n}\ntype Service<T extends Rpc.WorkerEntrypointBranded | undefined = undefined> = Fetcher<T>;\ntype Fetcher<T extends Rpc.EntrypointBranded | undefined = undefined, Reserved extends string = never> = (T extends Rpc.EntrypointBranded ? Rpc.Provider<T, Reserved | \"fetch\" | \"connect\"> : unknown) & {\n    fetch(input: RequestInfo | URL, init?: RequestInit): Promise<Response>;\n    connect(address: SocketAddress | string, options?: SocketOptions): Socket;\n};\ninterface KVNamespaceListKey<Metadata, Key extends string = string> {\n    name: Key;\n    expiration?: number;\n    metadata?: Metadata;\n}\ntype KVNamespaceListResult<Metadata, Key extends string = string> = {\n    list_complete: false;\n    keys: KVNamespaceListKey<Metadata, Key>[];\n    cursor: string;\n    cacheStatus: string | null;\n} | {\n    list_complete: true;\n    keys: KVNamespaceListKey<Metadata, Key>[];\n    cacheStatus: string | null;\n};\ninterface KVNamespace<Key extends string = string> {\n    get(key: Key, options?: Partial<KVNamespaceGetOptions<undefined>>): Promise<string | null>;\n    get(key: Key, type: \"text\"): Promise<string | null>;\n    get<ExpectedValue = unknown>(key: Key, type: \"json\"): Promise<ExpectedValue | null>;\n    get(key: Key, type: \"arrayBuffer\"): Promise<ArrayBuffer | null>;\n    get(key: Key, type: \"stream\"): Promise<ReadableStream | null>;\n    get(key: Key, options?: KVNamespaceGetOptions<\"text\">): Promise<string | null>;\n    get<ExpectedValue = unknown>(key: Key, options?: KVNamespaceGetOptions<\"json\">): Promise<ExpectedValue | null>;\n    get(key: Key, options?: KVNamespaceGetOptions<\"arrayBuffer\">): Promise<ArrayBuffer | null>;\n    get(key: Key, options?: KVNamespaceGetOptions<\"stream\">): Promise<ReadableStream | null>;\n    get(key: Array<Key>, type: \"text\"): Promise<Map<string, string | null>>;\n    get<ExpectedValue = unknown>(key: Array<Key>, type: \"json\"): Promise<Map<string, ExpectedValue | null>>;\n    get(key: Array<Key>, options?: Partial<KVNamespaceGetOptions<undefined>>): Promise<Map<string, string | null>>;\n    get(key: Array<Key>, options?: KVNamespaceGetOptions<\"text\">): Promise<Map<string, string | null>>;\n    get<ExpectedValue = unknown>(key: Array<Key>, options?: KVNamespaceGetOptions<\"json\">): Promise<Map<string, ExpectedValue | null>>;\n    list<Metadata = unknown>(options?: KVNamespaceListOptions): Promise<KVNamespaceListResult<Metadata, Key>>;\n    put(key: Key, value: string | ArrayBuffer | ArrayBufferView | ReadableStream, options?: KVNamespacePutOptions): Promise<void>;\n    getWithMetadata<Metadata = unknown>(key: Key, options?: Partial<KVNamespaceGetOptions<undefined>>): Promise<KVNamespaceGetWithMetadataResult<string, Metadata>>;\n    getWithMetadata<Metadata = unknown>(key: Key, type: \"text\"): Promise<KVNamespaceGetWithMetadataResult<string, Metadata>>;\n    getWithMetadata<ExpectedValue = unknown, Metadata = unknown>(key: Key, type: \"json\"): Promise<KVNamespaceGetWithMetadataResult<ExpectedValue, Metadata>>;\n    getWithMetadata<Metadata = unknown>(key: Key, type: \"arrayBuffer\"): Promise<KVNamespaceGetWithMetadataResult<ArrayBuffer, Metadata>>;\n    getWithMetadata<Metadata = unknown>(key: Key, type: \"stream\"): Promise<KVNamespaceGetWithMetadataResult<ReadableStream, Metadata>>;\n    getWithMetadata<Metadata = unknown>(key: Key, options: KVNamespaceGetOptions<\"text\">): Promise<KVNamespaceGetWithMetadataResult<string, Metadata>>;\n    getWithMetadata<ExpectedValue = unknown, Metadata = unknown>(key: Key, options: KVNamespaceGetOptions<\"json\">): Promise<KVNamespaceGetWithMetadataResult<ExpectedValue, Metadata>>;\n    getWithMetadata<Metadata = unknown>(key: Key, options: KVNamespaceGetOptions<\"arrayBuffer\">): Promise<KVNamespaceGetWithMetadataResult<ArrayBuffer, Metadata>>;\n    getWithMetadata<Metadata = unknown>(key: Key, options: KVNamespaceGetOptions<\"stream\">): Promise<KVNamespaceGetWithMetadataResult<ReadableStream, Metadata>>;\n    getWithMetadata<Metadata = unknown>(key: Array<Key>, type: \"text\"): Promise<Map<string, KVNamespaceGetWithMetadataResult<string, Metadata>>>;\n    getWithMetadata<ExpectedValue = unknown, Metadata = unknown>(key: Array<Key>, type: \"json\"): Promise<Map<string, KVNamespaceGetWithMetadataResult<ExpectedValue, Metadata>>>;\n    getWithMetadata<Metadata = unknown>(key: Array<Key>, options?: Partial<KVNamespaceGetOptions<undefined>>): Promise<Map<string, KVNamespaceGetWithMetadataResult<string, Metadata>>>;\n    getWithMetadata<Metadata = unknown>(key: Array<Key>, options?: KVNamespaceGetOptions<\"text\">): Promise<Map<string, KVNamespaceGetWithMetadataResult<string, Metadata>>>;\n    getWithMetadata<ExpectedValue = unknown, Metadata = unknown>(key: Array<Key>, options?: KVNamespaceGetOptions<\"json\">): Promise<Map<string, KVNamespaceGetWithMetadataResult<ExpectedValue, Metadata>>>;\n    delete(key: Key): Promise<void>;\n}\ninterface KVNamespaceListOptions {\n    limit?: number;\n    prefix?: (string | null);\n    cursor?: (string | null);\n}\ninterface KVNamespaceGetOptions<Type> {\n    type: Type;\n    cacheTtl?: number;\n}\ninterface KVNamespacePutOptions {\n    expiration?: number;\n    expirationTtl?: number;\n    metadata?: (any | null);\n}\ninterface KVNamespaceGetWithMetadataResult<Value, Metadata> {\n    value: Value | null;\n    metadata: Metadata | null;\n    cacheStatus: string | null;\n}\ntype QueueContentType = \"text\" | \"bytes\" | \"json\" | \"v8\";\ninterface Queue<Body = unknown> {\n    send(message: Body, options?: QueueSendOptions): Promise<void>;\n    sendBatch(messages: Iterable<MessageSendRequest<Body>>, options?: QueueSendBatchOptions): Promise<void>;\n}\ninterface QueueSendOptions {\n    contentType?: QueueContentType;\n    delaySeconds?: number;\n}\ninterface QueueSendBatchOptions {\n    delaySeconds?: number;\n}\ninterface MessageSendRequest<Body = unknown> {\n    body: Body;\n    contentType?: QueueContentType;\n    delaySeconds?: number;\n}\ninterface QueueRetryOptions {\n    delaySeconds?: number;\n}\ninterface Message<Body = unknown> {\n    readonly id: string;\n    readonly timestamp: Date;\n    readonly body: Body;\n    readonly attempts: number;\n    retry(options?: QueueRetryOptions): void;\n    ack(): void;\n}\ninterface QueueEvent<Body = unknown> extends ExtendableEvent {\n    readonly messages: readonly Message<Body>[];\n    readonly queue: string;\n    retryAll(options?: QueueRetryOptions): void;\n    ackAll(): void;\n}\ninterface MessageBatch<Body = unknown> {\n    readonly messages: readonly Message<Body>[];\n    readonly queue: string;\n    retryAll(options?: QueueRetryOptions): void;\n    ackAll(): void;\n}\ninterface R2Error extends Error {\n    readonly name: string;\n    readonly code: number;\n    readonly message: string;\n    readonly action: string;\n    readonly stack: any;\n}\ninterface R2ListOptions {\n    limit?: number;\n    prefix?: string;\n    cursor?: string;\n    delimiter?: string;\n    startAfter?: string;\n    include?: (\"httpMetadata\" | \"customMetadata\")[];\n}\ndeclare abstract class R2Bucket {\n    head(key: string): Promise<R2Object | null>;\n    get(key: string, options: R2GetOptions & {\n        onlyIf: R2Conditional | Headers;\n    }): Promise<R2ObjectBody | R2Object | null>;\n    get(key: string, options?: R2GetOptions): Promise<R2ObjectBody | null>;\n    put(key: string, value: ReadableStream | ArrayBuffer | ArrayBufferView | string | null | Blob, options?: R2PutOptions & {\n        onlyIf: R2Conditional | Headers;\n    }): Promise<R2Object | null>;\n    put(key: string, value: ReadableStream | ArrayBuffer | ArrayBufferView | string | null | Blob, options?: R2PutOptions): Promise<R2Object>;\n    createMultipartUpload(key: string, options?: R2MultipartOptions): Promise<R2MultipartUpload>;\n    resumeMultipartUpload(key: string, uploadId: string): R2MultipartUpload;\n    delete(keys: string | string[]): Promise<void>;\n    list(options?: R2ListOptions): Promise<R2Objects>;\n}\ninterface R2MultipartUpload {\n    readonly key: string;\n    readonly uploadId: string;\n    uploadPart(partNumber: number, value: ReadableStream | (ArrayBuffer | ArrayBufferView) | string | Blob, options?: R2UploadPartOptions): Promise<R2UploadedPart>;\n    abort(): Promise<void>;\n    complete(uploadedParts: R2UploadedPart[]): Promise<R2Object>;\n}\ninterface R2UploadedPart {\n    partNumber: number;\n    etag: string;\n}\ndeclare abstract class R2Object {\n    readonly key: string;\n    readonly version: string;\n    readonly size: number;\n    readonly etag: string;\n    readonly httpEtag: string;\n    readonly checksums: R2Checksums;\n    readonly uploaded: Date;\n    readonly httpMetadata?: R2HTTPMetadata;\n    readonly customMetadata?: Record<string, string>;\n    readonly range?: R2Range;\n    readonly storageClass: string;\n    readonly ssecKeyMd5?: string;\n    writeHttpMetadata(headers: Headers): void;\n}\ninterface R2ObjectBody extends R2Object {\n    get body(): ReadableStream;\n    get bodyUsed(): boolean;\n    arrayBuffer(): Promise<ArrayBuffer>;\n    text(): Promise<string>;\n    json<T>(): Promise<T>;\n    blob(): Promise<Blob>;\n}\ntype R2Range = {\n    offset: number;\n    length?: number;\n} | {\n    offset?: number;\n    length: number;\n} | {\n    suffix: number;\n};\ninterface R2Conditional {\n    etagMatches?: string;\n    etagDoesNotMatch?: string;\n    uploadedBefore?: Date;\n    uploadedAfter?: Date;\n    secondsGranularity?: boolean;\n}\ninterface R2GetOptions {\n    onlyIf?: (R2Conditional | Headers);\n    range?: (R2Range | Headers);\n    ssecKey?: (ArrayBuffer | string);\n}\ninterface R2PutOptions {\n    onlyIf?: (R2Conditional | Headers);\n    httpMetadata?: (R2HTTPMetadata | Headers);\n    customMetadata?: Record<string, string>;\n    md5?: ((ArrayBuffer | ArrayBufferView) | string);\n    sha1?: ((ArrayBuffer | ArrayBufferView) | string);\n    sha256?: ((ArrayBuffer | ArrayBufferView) | string);\n    sha384?: ((ArrayBuffer | ArrayBufferView) | string);\n    sha512?: ((ArrayBuffer | ArrayBufferView) | string);\n    storageClass?: string;\n    ssecKey?: (ArrayBuffer | string);\n}\ninterface R2MultipartOptions {\n    httpMetadata?: (R2HTTPMetadata | Headers);\n    customMetadata?: Record<string, string>;\n    storageClass?: string;\n    ssecKey?: (ArrayBuffer | string);\n}\ninterface R2Checksums {\n    readonly md5?: ArrayBuffer;\n    readonly sha1?: ArrayBuffer;\n    readonly sha256?: ArrayBuffer;\n    readonly sha384?: ArrayBuffer;\n    readonly sha512?: ArrayBuffer;\n    toJSON(): R2StringChecksums;\n}\ninterface R2StringChecksums {\n    md5?: string;\n    sha1?: string;\n    sha256?: string;\n    sha384?: string;\n    sha512?: string;\n}\ninterface R2HTTPMetadata {\n    contentType?: string;\n    contentLanguage?: string;\n    contentDisposition?: string;\n    contentEncoding?: string;\n    cacheControl?: string;\n    cacheExpiry?: Date;\n}\ntype R2Objects = {\n    objects: R2Object[];\n    delimitedPrefixes: string[];\n} & ({\n    truncated: true;\n    cursor: string;\n} | {\n    truncated: false;\n});\ninterface R2UploadPartOptions {\n    ssecKey?: (ArrayBuffer | string);\n}\ndeclare abstract class ScheduledEvent extends ExtendableEvent {\n    readonly scheduledTime: number;\n    readonly cron: string;\n    noRetry(): void;\n}\ninterface ScheduledController {\n    readonly scheduledTime: number;\n    readonly cron: string;\n    noRetry(): void;\n}\ninterface QueuingStrategy<T = any> {\n    highWaterMark?: (number | bigint);\n    size?: (chunk: T) => number | bigint;\n}\ninterface UnderlyingSink<W = any> {\n    type?: string;\n    start?: (controller: WritableStreamDefaultController) => void | Promise<void>;\n    write?: (chunk: W, controller: WritableStreamDefaultController) => void | Promise<void>;\n    abort?: (reason: any) => void | Promise<void>;\n    close?: () => void | Promise<void>;\n}\ninterface UnderlyingByteSource {\n    type: \"bytes\";\n    autoAllocateChunkSize?: number;\n    start?: (controller: ReadableByteStreamController) => void | Promise<void>;\n    pull?: (controller: ReadableByteStreamController) => void | Promise<void>;\n    cancel?: (reason: any) => void | Promise<void>;\n}\ninterface UnderlyingSource<R = any> {\n    type?: \"\" | undefined;\n    start?: (controller: ReadableStreamDefaultController<R>) => void | Promise<void>;\n    pull?: (controller: ReadableStreamDefaultController<R>) => void | Promise<void>;\n    cancel?: (reason: any) => void | Promise<void>;\n    expectedLength?: (number | bigint);\n}\ninterface Transformer<I = any, O = any> {\n    readableType?: string;\n    writableType?: string;\n    start?: (controller: TransformStreamDefaultController<O>) => void | Promise<void>;\n    transform?: (chunk: I, controller: TransformStreamDefaultController<O>) => void | Promise<void>;\n    flush?: (controller: TransformStreamDefaultController<O>) => void | Promise<void>;\n    cancel?: (reason: any) => void | Promise<void>;\n    expectedLength?: number;\n}\ninterface StreamPipeOptions {\n    /**\n     * Pipes this readable stream to a given writable stream destination. The way in which the piping process behaves under various error conditions can be customized with a number of passed options. It returns a promise that fulfills when the piping process completes successfully, or rejects if any errors were encountered.\n     *\n     * Piping a stream will lock it for the duration of the pipe, preventing any other consumer from acquiring a reader.\n     *\n     * Errors and closures of the source and destination streams propagate as follows:\n     *\n     * An error in this source readable stream will abort destination, unless preventAbort is truthy. The returned promise will be rejected with the source's error, or with any error that occurs during aborting the destination.\n     *\n     * An error in destination will cancel this source readable stream, unless preventCancel is truthy. The returned promise will be rejected with the destination's error, or with any error that occurs during canceling the source.\n     *\n     * When this source readable stream closes, destination will be closed, unless preventClose is truthy. The returned promise will be fulfilled once this process completes, unless an error is encountered while closing the destination, in which case it will be rejected with that error.\n     *\n     * If destination starts out closed or closing, this source readable stream will be canceled, unless preventCancel is true. The returned promise will be rejected with an error indicating piping to a closed stream failed, or with any error that occurs during canceling the source.\n     *\n     * The signal option can be set to an AbortSignal to allow aborting an ongoing pipe operation via the corresponding AbortController. In this case, this source readable stream will be canceled, and destination aborted, unless the respective options preventCancel or preventAbort are set.\n     */\n    preventClose?: boolean;\n    preventAbort?: boolean;\n    preventCancel?: boolean;\n    signal?: AbortSignal;\n}\ntype ReadableStreamReadResult<R = any> = {\n    done: false;\n    value: R;\n} | {\n    done: true;\n    value?: undefined;\n};\n/**\n * This Streams API interface represents a readable stream of byte data. The Fetch API offers a concrete instance of a ReadableStream through the body property of a Response object.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/ReadableStream)\n */\ninterface ReadableStream<R = any> {\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/ReadableStream/locked) */\n    get locked(): boolean;\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/ReadableStream/cancel) */\n    cancel(reason?: any): Promise<void>;\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/ReadableStream/getReader) */\n    getReader(): ReadableStreamDefaultReader<R>;\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/ReadableStream/getReader) */\n    getReader(options: ReadableStreamGetReaderOptions): ReadableStreamBYOBReader;\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/ReadableStream/pipeThrough) */\n    pipeThrough<T>(transform: ReadableWritablePair<T, R>, options?: StreamPipeOptions): ReadableStream<T>;\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/ReadableStream/pipeTo) */\n    pipeTo(destination: WritableStream<R>, options?: StreamPipeOptions): Promise<void>;\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/ReadableStream/tee) */\n    tee(): [\n        ReadableStream<R>,\n        ReadableStream<R>\n    ];\n    values(options?: ReadableStreamValuesOptions): AsyncIterableIterator<R>;\n    [Symbol.asyncIterator](options?: ReadableStreamValuesOptions): AsyncIterableIterator<R>;\n}\n/**\n * This Streams API interface represents a readable stream of byte data. The Fetch API offers a concrete instance of a ReadableStream through the body property of a Response object.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/ReadableStream)\n */\ndeclare const ReadableStream: {\n    prototype: ReadableStream;\n    new (underlyingSource: UnderlyingByteSource, strategy?: QueuingStrategy<Uint8Array>): ReadableStream<Uint8Array>;\n    new <R = any>(underlyingSource?: UnderlyingSource<R>, strategy?: QueuingStrategy<R>): ReadableStream<R>;\n};\n/* [MDN Reference](https://developer.mozilla.org/docs/Web/API/ReadableStreamDefaultReader) */\ndeclare class ReadableStreamDefaultReader<R = any> {\n    constructor(stream: ReadableStream);\n    get closed(): Promise<void>;\n    cancel(reason?: any): Promise<void>;\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/ReadableStreamDefaultReader/read) */\n    read(): Promise<ReadableStreamReadResult<R>>;\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/ReadableStreamDefaultReader/releaseLock) */\n    releaseLock(): void;\n}\n/* [MDN Reference](https://developer.mozilla.org/docs/Web/API/ReadableStreamBYOBReader) */\ndeclare class ReadableStreamBYOBReader {\n    constructor(stream: ReadableStream);\n    get closed(): Promise<void>;\n    cancel(reason?: any): Promise<void>;\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/ReadableStreamBYOBReader/read) */\n    read<T extends ArrayBufferView>(view: T): Promise<ReadableStreamReadResult<T>>;\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/ReadableStreamBYOBReader/releaseLock) */\n    releaseLock(): void;\n    readAtLeast<T extends ArrayBufferView>(minElements: number, view: T): Promise<ReadableStreamReadResult<T>>;\n}\ninterface ReadableStreamBYOBReaderReadableStreamBYOBReaderReadOptions {\n    min?: number;\n}\ninterface ReadableStreamGetReaderOptions {\n    /**\n     * Creates a ReadableStreamBYOBReader and locks the stream to the new reader.\n     *\n     * This call behaves the same way as the no-argument variant, except that it only works on readable byte streams, i.e. streams which were constructed specifically with the ability to handle \"bring your own buffer\" reading. The returned BYOB reader provides the ability to directly read individual chunks from the stream via its read() method, into developer-supplied buffers, allowing more precise control over allocation.\n     */\n    mode: \"byob\";\n}\n/* [MDN Reference](https://developer.mozilla.org/docs/Web/API/ReadableStreamBYOBRequest) */\ndeclare abstract class ReadableStreamBYOBRequest {\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/ReadableStreamBYOBRequest/view) */\n    get view(): Uint8Array | null;\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/ReadableStreamBYOBRequest/respond) */\n    respond(bytesWritten: number): void;\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/ReadableStreamBYOBRequest/respondWithNewView) */\n    respondWithNewView(view: ArrayBuffer | ArrayBufferView): void;\n    get atLeast(): number | null;\n}\n/* [MDN Reference](https://developer.mozilla.org/docs/Web/API/ReadableStreamDefaultController) */\ndeclare abstract class ReadableStreamDefaultController<R = any> {\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/ReadableStreamDefaultController/desiredSize) */\n    get desiredSize(): number | null;\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/ReadableStreamDefaultController/close) */\n    close(): void;\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/ReadableStreamDefaultController/enqueue) */\n    enqueue(chunk?: R): void;\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/ReadableStreamDefaultController/error) */\n    error(reason: any): void;\n}\n/* [MDN Reference](https://developer.mozilla.org/docs/Web/API/ReadableByteStreamController) */\ndeclare abstract class ReadableByteStreamController {\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/ReadableByteStreamController/byobRequest) */\n    get byobRequest(): ReadableStreamBYOBRequest | null;\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/ReadableByteStreamController/desiredSize) */\n    get desiredSize(): number | null;\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/ReadableByteStreamController/close) */\n    close(): void;\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/ReadableByteStreamController/enqueue) */\n    enqueue(chunk: ArrayBuffer | ArrayBufferView): void;\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/ReadableByteStreamController/error) */\n    error(reason: any): void;\n}\n/**\n * This Streams API interface represents a controller allowing control of a WritableStream's state. When constructing a WritableStream, the underlying sink is given a corresponding WritableStreamDefaultController instance to manipulate.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/WritableStreamDefaultController)\n */\ndeclare abstract class WritableStreamDefaultController {\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/WritableStreamDefaultController/signal) */\n    get signal(): AbortSignal;\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/WritableStreamDefaultController/error) */\n    error(reason?: any): void;\n}\n/* [MDN Reference](https://developer.mozilla.org/docs/Web/API/TransformStreamDefaultController) */\ndeclare abstract class TransformStreamDefaultController<O = any> {\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/TransformStreamDefaultController/desiredSize) */\n    get desiredSize(): number | null;\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/TransformStreamDefaultController/enqueue) */\n    enqueue(chunk?: O): void;\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/TransformStreamDefaultController/error) */\n    error(reason: any): void;\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/TransformStreamDefaultController/terminate) */\n    terminate(): void;\n}\ninterface ReadableWritablePair<R = any, W = any> {\n    /**\n     * Provides a convenient, chainable way of piping this readable stream through a transform stream (or any other { writable, readable } pair). It simply pipes the stream into the writable side of the supplied pair, and returns the readable side for further use.\n     *\n     * Piping a stream will lock it for the duration of the pipe, preventing any other consumer from acquiring a reader.\n     */\n    writable: WritableStream<W>;\n    readable: ReadableStream<R>;\n}\n/**\n * This Streams API interface provides a standard abstraction for writing streaming data to a destination, known as a sink. This object comes with built-in backpressure and queuing.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/WritableStream)\n */\ndeclare class WritableStream<W = any> {\n    constructor(underlyingSink?: UnderlyingSink, queuingStrategy?: QueuingStrategy);\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/WritableStream/locked) */\n    get locked(): boolean;\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/WritableStream/abort) */\n    abort(reason?: any): Promise<void>;\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/WritableStream/close) */\n    close(): Promise<void>;\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/WritableStream/getWriter) */\n    getWriter(): WritableStreamDefaultWriter<W>;\n}\n/**\n * This Streams API interface is the object returned by WritableStream.getWriter() and once created locks the < writer to the WritableStream ensuring that no other streams can write to the underlying sink.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/WritableStreamDefaultWriter)\n */\ndeclare class WritableStreamDefaultWriter<W = any> {\n    constructor(stream: WritableStream);\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/WritableStreamDefaultWriter/closed) */\n    get closed(): Promise<void>;\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/WritableStreamDefaultWriter/ready) */\n    get ready(): Promise<void>;\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/WritableStreamDefaultWriter/desiredSize) */\n    get desiredSize(): number | null;\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/WritableStreamDefaultWriter/abort) */\n    abort(reason?: any): Promise<void>;\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/WritableStreamDefaultWriter/close) */\n    close(): Promise<void>;\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/WritableStreamDefaultWriter/write) */\n    write(chunk?: W): Promise<void>;\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/WritableStreamDefaultWriter/releaseLock) */\n    releaseLock(): void;\n}\n/* [MDN Reference](https://developer.mozilla.org/docs/Web/API/TransformStream) */\ndeclare class TransformStream<I = any, O = any> {\n    constructor(transformer?: Transformer<I, O>, writableStrategy?: QueuingStrategy<I>, readableStrategy?: QueuingStrategy<O>);\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/TransformStream/readable) */\n    get readable(): ReadableStream<O>;\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/TransformStream/writable) */\n    get writable(): WritableStream<I>;\n}\ndeclare class FixedLengthStream extends IdentityTransformStream {\n    constructor(expectedLength: number | bigint, queuingStrategy?: IdentityTransformStreamQueuingStrategy);\n}\ndeclare class IdentityTransformStream extends TransformStream<ArrayBuffer | ArrayBufferView, Uint8Array> {\n    constructor(queuingStrategy?: IdentityTransformStreamQueuingStrategy);\n}\ninterface IdentityTransformStreamQueuingStrategy {\n    highWaterMark?: (number | bigint);\n}\ninterface ReadableStreamValuesOptions {\n    preventCancel?: boolean;\n}\n/* [MDN Reference](https://developer.mozilla.org/docs/Web/API/CompressionStream) */\ndeclare class CompressionStream extends TransformStream<ArrayBuffer | ArrayBufferView, Uint8Array> {\n    constructor(format: \"gzip\" | \"deflate\" | \"deflate-raw\");\n}\n/* [MDN Reference](https://developer.mozilla.org/docs/Web/API/DecompressionStream) */\ndeclare class DecompressionStream extends TransformStream<ArrayBuffer | ArrayBufferView, Uint8Array> {\n    constructor(format: \"gzip\" | \"deflate\" | \"deflate-raw\");\n}\n/* [MDN Reference](https://developer.mozilla.org/docs/Web/API/TextEncoderStream) */\ndeclare class TextEncoderStream extends TransformStream<string, Uint8Array> {\n    constructor();\n    get encoding(): string;\n}\n/* [MDN Reference](https://developer.mozilla.org/docs/Web/API/TextDecoderStream) */\ndeclare class TextDecoderStream extends TransformStream<ArrayBuffer | ArrayBufferView, string> {\n    constructor(label?: string, options?: TextDecoderStreamTextDecoderStreamInit);\n    get encoding(): string;\n    get fatal(): boolean;\n    get ignoreBOM(): boolean;\n}\ninterface TextDecoderStreamTextDecoderStreamInit {\n    fatal?: boolean;\n    ignoreBOM?: boolean;\n}\n/**\n * This Streams API interface provides a built-in byte length queuing strategy that can be used when constructing streams.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/ByteLengthQueuingStrategy)\n */\ndeclare class ByteLengthQueuingStrategy implements QueuingStrategy<ArrayBufferView> {\n    constructor(init: QueuingStrategyInit);\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/ByteLengthQueuingStrategy/highWaterMark) */\n    get highWaterMark(): number;\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/ByteLengthQueuingStrategy/size) */\n    get size(): (chunk?: any) => number;\n}\n/**\n * This Streams API interface provides a built-in byte length queuing strategy that can be used when constructing streams.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/CountQueuingStrategy)\n */\ndeclare class CountQueuingStrategy implements QueuingStrategy {\n    constructor(init: QueuingStrategyInit);\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/CountQueuingStrategy/highWaterMark) */\n    get highWaterMark(): number;\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/CountQueuingStrategy/size) */\n    get size(): (chunk?: any) => number;\n}\ninterface QueuingStrategyInit {\n    /**\n     * Creates a new ByteLengthQueuingStrategy with the provided high water mark.\n     *\n     * Note that the provided high water mark will not be validated ahead of time. Instead, if it is negative, NaN, or not a number, the resulting ByteLengthQueuingStrategy will cause the corresponding stream constructor to throw.\n     */\n    highWaterMark: number;\n}\ninterface ScriptVersion {\n    id?: string;\n    tag?: string;\n    message?: string;\n}\ndeclare abstract class TailEvent extends ExtendableEvent {\n    readonly events: TraceItem[];\n    readonly traces: TraceItem[];\n}\ninterface TraceItem {\n    readonly event: (TraceItemFetchEventInfo | TraceItemJsRpcEventInfo | TraceItemScheduledEventInfo | TraceItemAlarmEventInfo | TraceItemQueueEventInfo | TraceItemEmailEventInfo | TraceItemTailEventInfo | TraceItemCustomEventInfo | TraceItemHibernatableWebSocketEventInfo) | null;\n    readonly eventTimestamp: number | null;\n    readonly logs: TraceLog[];\n    readonly exceptions: TraceException[];\n    readonly diagnosticsChannelEvents: TraceDiagnosticChannelEvent[];\n    readonly scriptName: string | null;\n    readonly entrypoint?: string;\n    readonly scriptVersion?: ScriptVersion;\n    readonly dispatchNamespace?: string;\n    readonly scriptTags?: string[];\n    readonly outcome: string;\n    readonly executionModel: string;\n    readonly truncated: boolean;\n    readonly cpuTime: number;\n    readonly wallTime: number;\n}\ninterface TraceItemAlarmEventInfo {\n    readonly scheduledTime: Date;\n}\ninterface TraceItemCustomEventInfo {\n}\ninterface TraceItemScheduledEventInfo {\n    readonly scheduledTime: number;\n    readonly cron: string;\n}\ninterface TraceItemQueueEventInfo {\n    readonly queue: string;\n    readonly batchSize: number;\n}\ninterface TraceItemEmailEventInfo {\n    readonly mailFrom: string;\n    readonly rcptTo: string;\n    readonly rawSize: number;\n}\ninterface TraceItemTailEventInfo {\n    readonly consumedEvents: TraceItemTailEventInfoTailItem[];\n}\ninterface TraceItemTailEventInfoTailItem {\n    readonly scriptName: string | null;\n}\ninterface TraceItemFetchEventInfo {\n    readonly response?: TraceItemFetchEventInfoResponse;\n    readonly request: TraceItemFetchEventInfoRequest;\n}\ninterface TraceItemFetchEventInfoRequest {\n    readonly cf?: any;\n    readonly headers: Record<string, string>;\n    readonly method: string;\n    readonly url: string;\n    getUnredacted(): TraceItemFetchEventInfoRequest;\n}\ninterface TraceItemFetchEventInfoResponse {\n    readonly status: number;\n}\ninterface TraceItemJsRpcEventInfo {\n    readonly rpcMethod: string;\n}\ninterface TraceItemHibernatableWebSocketEventInfo {\n    readonly getWebSocketEvent: TraceItemHibernatableWebSocketEventInfoMessage | TraceItemHibernatableWebSocketEventInfoClose | TraceItemHibernatableWebSocketEventInfoError;\n}\ninterface TraceItemHibernatableWebSocketEventInfoMessage {\n    readonly webSocketEventType: string;\n}\ninterface TraceItemHibernatableWebSocketEventInfoClose {\n    readonly webSocketEventType: string;\n    readonly code: number;\n    readonly wasClean: boolean;\n}\ninterface TraceItemHibernatableWebSocketEventInfoError {\n    readonly webSocketEventType: string;\n}\ninterface TraceLog {\n    readonly timestamp: number;\n    readonly level: string;\n    readonly message: any;\n}\ninterface TraceException {\n    readonly timestamp: number;\n    readonly message: string;\n    readonly name: string;\n    readonly stack?: string;\n}\ninterface TraceDiagnosticChannelEvent {\n    readonly timestamp: number;\n    readonly channel: string;\n    readonly message: any;\n}\ninterface TraceMetrics {\n    readonly cpuTime: number;\n    readonly wallTime: number;\n}\ninterface UnsafeTraceMetrics {\n    fromTrace(item: TraceItem): TraceMetrics;\n}\n/**\n * The URL interface represents an object providing static methods used for creating object URLs.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/URL)\n */\ndeclare class URL {\n    constructor(url: string | URL, base?: string | URL);\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/URL/origin) */\n    get origin(): string;\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/URL/href) */\n    get href(): string;\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/URL/href) */\n    set href(value: string);\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/URL/protocol) */\n    get protocol(): string;\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/URL/protocol) */\n    set protocol(value: string);\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/URL/username) */\n    get username(): string;\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/URL/username) */\n    set username(value: string);\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/URL/password) */\n    get password(): string;\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/URL/password) */\n    set password(value: string);\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/URL/host) */\n    get host(): string;\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/URL/host) */\n    set host(value: string);\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/URL/hostname) */\n    get hostname(): string;\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/URL/hostname) */\n    set hostname(value: string);\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/URL/port) */\n    get port(): string;\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/URL/port) */\n    set port(value: string);\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/URL/pathname) */\n    get pathname(): string;\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/URL/pathname) */\n    set pathname(value: string);\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/URL/search) */\n    get search(): string;\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/URL/search) */\n    set search(value: string);\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/URL/hash) */\n    get hash(): string;\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/URL/hash) */\n    set hash(value: string);\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/URL/searchParams) */\n    get searchParams(): URLSearchParams;\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/URL/toJSON) */\n    toJSON(): string;\n    /*function toString() { [native code] }*/\n    toString(): string;\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/URL/canParse_static) */\n    static canParse(url: string, base?: string): boolean;\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/URL/parse_static) */\n    static parse(url: string, base?: string): URL | null;\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/URL/createObjectURL_static) */\n    static createObjectURL(object: File | Blob): string;\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/URL/revokeObjectURL_static) */\n    static revokeObjectURL(object_url: string): void;\n}\n/* [MDN Reference](https://developer.mozilla.org/docs/Web/API/URLSearchParams) */\ndeclare class URLSearchParams {\n    constructor(init?: (Iterable<Iterable<string>> | Record<string, string> | string));\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/URLSearchParams/size) */\n    get size(): number;\n    /**\n     * Appends a specified key/value pair as a new search parameter.\n     *\n     * [MDN Reference](https://developer.mozilla.org/docs/Web/API/URLSearchParams/append)\n     */\n    append(name: string, value: string): void;\n    /**\n     * Deletes the given search parameter, and its associated value, from the list of all search parameters.\n     *\n     * [MDN Reference](https://developer.mozilla.org/docs/Web/API/URLSearchParams/delete)\n     */\n    delete(name: string, value?: string): void;\n    /**\n     * Returns the first value associated to the given search parameter.\n     *\n     * [MDN Reference](https://developer.mozilla.org/docs/Web/API/URLSearchParams/get)\n     */\n    get(name: string): string | null;\n    /**\n     * Returns all the values association with a given search parameter.\n     *\n     * [MDN Reference](https://developer.mozilla.org/docs/Web/API/URLSearchParams/getAll)\n     */\n    getAll(name: string): string[];\n    /**\n     * Returns a Boolean indicating if such a search parameter exists.\n     *\n     * [MDN Reference](https://developer.mozilla.org/docs/Web/API/URLSearchParams/has)\n     */\n    has(name: string, value?: string): boolean;\n    /**\n     * Sets the value associated to a given search parameter to the given value. If there were several values, delete the others.\n     *\n     * [MDN Reference](https://developer.mozilla.org/docs/Web/API/URLSearchParams/set)\n     */\n    set(name: string, value: string): void;\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/URLSearchParams/sort) */\n    sort(): void;\n    /* Returns an array of key, value pairs for every entry in the search params. */\n    entries(): IterableIterator<[\n        key: string,\n        value: string\n    ]>;\n    /* Returns a list of keys in the search params. */\n    keys(): IterableIterator<string>;\n    /* Returns a list of values in the search params. */\n    values(): IterableIterator<string>;\n    forEach<This = unknown>(callback: (this: This, value: string, key: string, parent: URLSearchParams) => void, thisArg?: This): void;\n    /*function toString() { [native code] } Returns a string containing a query string suitable for use in a URL. Does not include the question mark. */\n    toString(): string;\n    [Symbol.iterator](): IterableIterator<[\n        key: string,\n        value: string\n    ]>;\n}\ndeclare class URLPattern {\n    constructor(input?: (string | URLPatternInit), baseURL?: (string | URLPatternOptions), patternOptions?: URLPatternOptions);\n    get protocol(): string;\n    get username(): string;\n    get password(): string;\n    get hostname(): string;\n    get port(): string;\n    get pathname(): string;\n    get search(): string;\n    get hash(): string;\n    test(input?: (string | URLPatternInit), baseURL?: string): boolean;\n    exec(input?: (string | URLPatternInit), baseURL?: string): URLPatternResult | null;\n}\ninterface URLPatternInit {\n    protocol?: string;\n    username?: string;\n    password?: string;\n    hostname?: string;\n    port?: string;\n    pathname?: string;\n    search?: string;\n    hash?: string;\n    baseURL?: string;\n}\ninterface URLPatternComponentResult {\n    input: string;\n    groups: Record<string, string>;\n}\ninterface URLPatternResult {\n    inputs: (string | URLPatternInit)[];\n    protocol: URLPatternComponentResult;\n    username: URLPatternComponentResult;\n    password: URLPatternComponentResult;\n    hostname: URLPatternComponentResult;\n    port: URLPatternComponentResult;\n    pathname: URLPatternComponentResult;\n    search: URLPatternComponentResult;\n    hash: URLPatternComponentResult;\n}\ninterface URLPatternOptions {\n    ignoreCase?: boolean;\n}\n/**\n * A CloseEvent is sent to clients using WebSockets when the connection is closed. This is delivered to the listener indicated by the WebSocket object's onclose attribute.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/CloseEvent)\n */\ndeclare class CloseEvent extends Event {\n    constructor(type: string, initializer?: CloseEventInit);\n    /**\n     * Returns the WebSocket connection close code provided by the server.\n     *\n     * [MDN Reference](https://developer.mozilla.org/docs/Web/API/CloseEvent/code)\n     */\n    readonly code: number;\n    /**\n     * Returns the WebSocket connection close reason provided by the server.\n     *\n     * [MDN Reference](https://developer.mozilla.org/docs/Web/API/CloseEvent/reason)\n     */\n    readonly reason: string;\n    /**\n     * Returns true if the connection closed cleanly; false otherwise.\n     *\n     * [MDN Reference](https://developer.mozilla.org/docs/Web/API/CloseEvent/wasClean)\n     */\n    readonly wasClean: boolean;\n}\ninterface CloseEventInit {\n    code?: number;\n    reason?: string;\n    wasClean?: boolean;\n}\n/**\n * A message received by a target object.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/MessageEvent)\n */\ndeclare class MessageEvent extends Event {\n    constructor(type: string, initializer: MessageEventInit);\n    /**\n     * Returns the data of the message.\n     *\n     * [MDN Reference](https://developer.mozilla.org/docs/Web/API/MessageEvent/data)\n     */\n    readonly data: ArrayBuffer | string;\n}\ninterface MessageEventInit {\n    data: ArrayBuffer | string;\n}\ntype WebSocketEventMap = {\n    close: CloseEvent;\n    message: MessageEvent;\n    open: Event;\n    error: ErrorEvent;\n};\n/**\n * Provides the API for creating and managing a WebSocket connection to a server, as well as for sending and receiving data on the connection.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebSocket)\n */\ndeclare var WebSocket: {\n    prototype: WebSocket;\n    new (url: string, protocols?: (string[] | string)): WebSocket;\n    readonly READY_STATE_CONNECTING: number;\n    readonly CONNECTING: number;\n    readonly READY_STATE_OPEN: number;\n    readonly OPEN: number;\n    readonly READY_STATE_CLOSING: number;\n    readonly CLOSING: number;\n    readonly READY_STATE_CLOSED: number;\n    readonly CLOSED: number;\n};\n/**\n * Provides the API for creating and managing a WebSocket connection to a server, as well as for sending and receiving data on the connection.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebSocket)\n */\ninterface WebSocket extends EventTarget<WebSocketEventMap> {\n    accept(): void;\n    /**\n     * Transmits data using the WebSocket connection. data can be a string, a Blob, an ArrayBuffer, or an ArrayBufferView.\n     *\n     * [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebSocket/send)\n     */\n    send(message: (ArrayBuffer | ArrayBufferView) | string): void;\n    /**\n     * Closes the WebSocket connection, optionally using code as the the WebSocket connection close code and reason as the the WebSocket connection close reason.\n     *\n     * [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebSocket/close)\n     */\n    close(code?: number, reason?: string): void;\n    serializeAttachment(attachment: any): void;\n    deserializeAttachment(): any | null;\n    /**\n     * Returns the state of the WebSocket object's connection. It can have the values described below.\n     *\n     * [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebSocket/readyState)\n     */\n    readyState: number;\n    /**\n     * Returns the URL that was used to establish the WebSocket connection.\n     *\n     * [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebSocket/url)\n     */\n    url: string | null;\n    /**\n     * Returns the subprotocol selected by the server, if any. It can be used in conjunction with the array form of the constructor's second argument to perform subprotocol negotiation.\n     *\n     * [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebSocket/protocol)\n     */\n    protocol: string | null;\n    /**\n     * Returns the extensions selected by the server, if any.\n     *\n     * [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebSocket/extensions)\n     */\n    extensions: string | null;\n}\ndeclare const WebSocketPair: {\n    new (): {\n        0: WebSocket;\n        1: WebSocket;\n    };\n};\ninterface SqlStorage {\n    exec<T extends Record<string, SqlStorageValue>>(query: string, ...bindings: any[]): SqlStorageCursor<T>;\n    get databaseSize(): number;\n    Cursor: typeof SqlStorageCursor;\n    Statement: typeof SqlStorageStatement;\n}\ndeclare abstract class SqlStorageStatement {\n}\ntype SqlStorageValue = ArrayBuffer | string | number | null;\ndeclare abstract class SqlStorageCursor<T extends Record<string, SqlStorageValue>> {\n    next(): {\n        done?: false;\n        value: T;\n    } | {\n        done: true;\n        value?: never;\n    };\n    toArray(): T[];\n    one(): T;\n    raw<U extends SqlStorageValue[]>(): IterableIterator<U>;\n    columnNames: string[];\n    get rowsRead(): number;\n    get rowsWritten(): number;\n    [Symbol.iterator](): IterableIterator<T>;\n}\ninterface Socket {\n    get readable(): ReadableStream;\n    get writable(): WritableStream;\n    get closed(): Promise<void>;\n    get opened(): Promise<SocketInfo>;\n    get upgraded(): boolean;\n    get secureTransport(): \"on\" | \"off\" | \"starttls\";\n    close(): Promise<void>;\n    startTls(options?: TlsOptions): Socket;\n}\ninterface SocketOptions {\n    secureTransport?: string;\n    allowHalfOpen: boolean;\n    highWaterMark?: (number | bigint);\n}\ninterface SocketAddress {\n    hostname: string;\n    port: number;\n}\ninterface TlsOptions {\n    expectedServerHostname?: string;\n}\ninterface SocketInfo {\n    remoteAddress?: string;\n    localAddress?: string;\n}\n/* [MDN Reference](https://developer.mozilla.org/docs/Web/API/EventSource) */\ndeclare class EventSource extends EventTarget {\n    constructor(url: string, init?: EventSourceEventSourceInit);\n    /**\n     * Aborts any instances of the fetch algorithm started for this EventSource object, and sets the readyState attribute to CLOSED.\n     *\n     * [MDN Reference](https://developer.mozilla.org/docs/Web/API/EventSource/close)\n     */\n    close(): void;\n    /**\n     * Returns the URL providing the event stream.\n     *\n     * [MDN Reference](https://developer.mozilla.org/docs/Web/API/EventSource/url)\n     */\n    get url(): string;\n    /**\n     * Returns true if the credentials mode for connection requests to the URL providing the event stream is set to \"include\", and false otherwise.\n     *\n     * [MDN Reference](https://developer.mozilla.org/docs/Web/API/EventSource/withCredentials)\n     */\n    get withCredentials(): boolean;\n    /**\n     * Returns the state of this EventSource object's connection. It can have the values described below.\n     *\n     * [MDN Reference](https://developer.mozilla.org/docs/Web/API/EventSource/readyState)\n     */\n    get readyState(): number;\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/EventSource/open_event) */\n    get onopen(): any | null;\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/EventSource/open_event) */\n    set onopen(value: any | null);\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/EventSource/message_event) */\n    get onmessage(): any | null;\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/EventSource/message_event) */\n    set onmessage(value: any | null);\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/EventSource/error_event) */\n    get onerror(): any | null;\n    /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/EventSource/error_event) */\n    set onerror(value: any | null);\n    static readonly CONNECTING: number;\n    static readonly OPEN: number;\n    static readonly CLOSED: number;\n    static from(stream: ReadableStream): EventSource;\n}\ninterface EventSourceEventSourceInit {\n    withCredentials?: boolean;\n    fetcher?: Fetcher;\n}\ninterface Container {\n    get running(): boolean;\n    start(options?: ContainerStartupOptions): void;\n    monitor(): Promise<void>;\n    destroy(error?: any): Promise<void>;\n    signal(signo: number): void;\n    getTcpPort(port: number): Fetcher;\n}\ninterface ContainerStartupOptions {\n    entrypoint?: string[];\n    enableInternet: boolean;\n    env?: Record<string, string>;\n}\ntype AiImageClassificationInput = {\n    image: number[];\n};\ntype AiImageClassificationOutput = {\n    score?: number;\n    label?: string;\n}[];\ndeclare abstract class BaseAiImageClassification {\n    inputs: AiImageClassificationInput;\n    postProcessedOutputs: AiImageClassificationOutput;\n}\ntype AiImageToTextInput = {\n    image: number[];\n    prompt?: string;\n    max_tokens?: number;\n    temperature?: number;\n    top_p?: number;\n    top_k?: number;\n    seed?: number;\n    repetition_penalty?: number;\n    frequency_penalty?: number;\n    presence_penalty?: number;\n    raw?: boolean;\n    messages?: RoleScopedChatInput[];\n};\ntype AiImageToTextOutput = {\n    description: string;\n};\ndeclare abstract class BaseAiImageToText {\n    inputs: AiImageToTextInput;\n    postProcessedOutputs: AiImageToTextOutput;\n}\ntype AiImageTextToTextInput = {\n    image: string;\n    prompt?: string;\n    max_tokens?: number;\n    temperature?: number;\n    ignore_eos?: boolean;\n    top_p?: number;\n    top_k?: number;\n    seed?: number;\n    repetition_penalty?: number;\n    frequency_penalty?: number;\n    presence_penalty?: number;\n    raw?: boolean;\n    messages?: RoleScopedChatInput[];\n};\ntype AiImageTextToTextOutput = {\n    description: string;\n};\ndeclare abstract class BaseAiImageTextToText {\n    inputs: AiImageTextToTextInput;\n    postProcessedOutputs: AiImageTextToTextOutput;\n}\ntype AiObjectDetectionInput = {\n    image: number[];\n};\ntype AiObjectDetectionOutput = {\n    score?: number;\n    label?: string;\n}[];\ndeclare abstract class BaseAiObjectDetection {\n    inputs: AiObjectDetectionInput;\n    postProcessedOutputs: AiObjectDetectionOutput;\n}\ntype AiSentenceSimilarityInput = {\n    source: string;\n    sentences: string[];\n};\ntype AiSentenceSimilarityOutput = number[];\ndeclare abstract class BaseAiSentenceSimilarity {\n    inputs: AiSentenceSimilarityInput;\n    postProcessedOutputs: AiSentenceSimilarityOutput;\n}\ntype AiAutomaticSpeechRecognitionInput = {\n    audio: number[];\n};\ntype AiAutomaticSpeechRecognitionOutput = {\n    text?: string;\n    words?: {\n        word: string;\n        start: number;\n        end: number;\n    }[];\n    vtt?: string;\n};\ndeclare abstract class BaseAiAutomaticSpeechRecognition {\n    inputs: AiAutomaticSpeechRecognitionInput;\n    postProcessedOutputs: AiAutomaticSpeechRecognitionOutput;\n}\ntype AiSummarizationInput = {\n    input_text: string;\n    max_length?: number;\n};\ntype AiSummarizationOutput = {\n    summary: string;\n};\ndeclare abstract class BaseAiSummarization {\n    inputs: AiSummarizationInput;\n    postProcessedOutputs: AiSummarizationOutput;\n}\ntype AiTextClassificationInput = {\n    text: string;\n};\ntype AiTextClassificationOutput = {\n    score?: number;\n    label?: string;\n}[];\ndeclare abstract class BaseAiTextClassification {\n    inputs: AiTextClassificationInput;\n    postProcessedOutputs: AiTextClassificationOutput;\n}\ntype AiTextEmbeddingsInput = {\n    text: string | string[];\n};\ntype AiTextEmbeddingsOutput = {\n    shape: number[];\n    data: number[][];\n};\ndeclare abstract class BaseAiTextEmbeddings {\n    inputs: AiTextEmbeddingsInput;\n    postProcessedOutputs: AiTextEmbeddingsOutput;\n}\ntype RoleScopedChatInput = {\n    role: \"user\" | \"assistant\" | \"system\" | \"tool\" | (string & NonNullable<unknown>);\n    content: string;\n    name?: string;\n};\ntype AiTextGenerationToolLegacyInput = {\n    name: string;\n    description: string;\n    parameters?: {\n        type: \"object\" | (string & NonNullable<unknown>);\n        properties: {\n            [key: string]: {\n                type: string;\n                description?: string;\n            };\n        };\n        required: string[];\n    };\n};\ntype AiTextGenerationToolInput = {\n    type: \"function\" | (string & NonNullable<unknown>);\n    function: {\n        name: string;\n        description: string;\n        parameters?: {\n            type: \"object\" | (string & NonNullable<unknown>);\n            properties: {\n                [key: string]: {\n                    type: string;\n                    description?: string;\n                };\n            };\n            required: string[];\n        };\n    };\n};\ntype AiTextGenerationFunctionsInput = {\n    name: string;\n    code: string;\n};\ntype AiTextGenerationResponseFormat = {\n    type: string;\n    json_schema?: any;\n};\ntype AiTextGenerationInput = {\n    prompt?: string;\n    raw?: boolean;\n    stream?: boolean;\n    max_tokens?: number;\n    temperature?: number;\n    top_p?: number;\n    top_k?: number;\n    seed?: number;\n    repetition_penalty?: number;\n    frequency_penalty?: number;\n    presence_penalty?: number;\n    messages?: RoleScopedChatInput[];\n    response_format?: AiTextGenerationResponseFormat;\n    tools?: AiTextGenerationToolInput[] | AiTextGenerationToolLegacyInput[] | (object & NonNullable<unknown>);\n    functions?: AiTextGenerationFunctionsInput[];\n};\ntype AiTextGenerationOutput = {\n    response?: string;\n    tool_calls?: {\n        name: string;\n        arguments: unknown;\n    }[];\n} | ReadableStream;\ndeclare abstract class BaseAiTextGeneration {\n    inputs: AiTextGenerationInput;\n    postProcessedOutputs: AiTextGenerationOutput;\n}\ntype AiTextToSpeechInput = {\n    prompt: string;\n    lang?: string;\n};\ntype AiTextToSpeechOutput = Uint8Array | {\n    audio: string;\n};\ndeclare abstract class BaseAiTextToSpeech {\n    inputs: AiTextToSpeechInput;\n    postProcessedOutputs: AiTextToSpeechOutput;\n}\ntype AiTextToImageInput = {\n    prompt: string;\n    negative_prompt?: string;\n    height?: number;\n    width?: number;\n    image?: number[];\n    image_b64?: string;\n    mask?: number[];\n    num_steps?: number;\n    strength?: number;\n    guidance?: number;\n    seed?: number;\n};\ntype AiTextToImageOutput = ReadableStream<Uint8Array>;\ndeclare abstract class BaseAiTextToImage {\n    inputs: AiTextToImageInput;\n    postProcessedOutputs: AiTextToImageOutput;\n}\ntype AiTranslationInput = {\n    text: string;\n    target_lang: string;\n    source_lang?: string;\n};\ntype AiTranslationOutput = {\n    translated_text?: string;\n};\ndeclare abstract class BaseAiTranslation {\n    inputs: AiTranslationInput;\n    postProcessedOutputs: AiTranslationOutput;\n}\ntype Ai_Cf_Openai_Whisper_Input = string | {\n    /**\n     * An array of integers that represent the audio data constrained to 8-bit unsigned integer values\n     */\n    audio: number[];\n};\ninterface Ai_Cf_Openai_Whisper_Output {\n    /**\n     * The transcription\n     */\n    text: string;\n    word_count?: number;\n    words?: {\n        word?: string;\n        /**\n         * The second this word begins in the recording\n         */\n        start?: number;\n        /**\n         * The ending second when the word completes\n         */\n        end?: number;\n    }[];\n    vtt?: string;\n}\ndeclare abstract class Base_Ai_Cf_Openai_Whisper {\n    inputs: Ai_Cf_Openai_Whisper_Input;\n    postProcessedOutputs: Ai_Cf_Openai_Whisper_Output;\n}\ntype Ai_Cf_Unum_Uform_Gen2_Qwen_500M_Input = string | {\n    /**\n     * The input text prompt for the model to generate a response.\n     */\n    prompt?: string;\n    /**\n     * If true, a chat template is not applied and you must adhere to the specific model's expected formatting.\n     */\n    raw?: boolean;\n    /**\n     * Controls the creativity of the AI's responses by adjusting how many possible words it considers. Lower values make outputs more predictable; higher values allow for more varied and creative responses.\n     */\n    top_p?: number;\n    /**\n     * Limits the AI to choose from the top 'k' most probable words. Lower values make responses more focused; higher values introduce more variety and potential surprises.\n     */\n    top_k?: number;\n    /**\n     * Random seed for reproducibility of the generation.\n     */\n    seed?: number;\n    /**\n     * Penalty for repeated tokens; higher values discourage repetition.\n     */\n    repetition_penalty?: number;\n    /**\n     * Decreases the likelihood of the model repeating the same lines verbatim.\n     */\n    frequency_penalty?: number;\n    /**\n     * Increases the likelihood of the model introducing new topics.\n     */\n    presence_penalty?: number;\n    image: number[] | (string & NonNullable<unknown>);\n    /**\n     * The maximum number of tokens to generate in the response.\n     */\n    max_tokens?: number;\n};\ninterface Ai_Cf_Unum_Uform_Gen2_Qwen_500M_Output {\n    description?: string;\n}\ndeclare abstract class Base_Ai_Cf_Unum_Uform_Gen2_Qwen_500M {\n    inputs: Ai_Cf_Unum_Uform_Gen2_Qwen_500M_Input;\n    postProcessedOutputs: Ai_Cf_Unum_Uform_Gen2_Qwen_500M_Output;\n}\ntype Ai_Cf_Openai_Whisper_Tiny_En_Input = string | {\n    /**\n     * An array of integers that represent the audio data constrained to 8-bit unsigned integer values\n     */\n    audio: number[];\n};\ninterface Ai_Cf_Openai_Whisper_Tiny_En_Output {\n    /**\n     * The transcription\n     */\n    text: string;\n    word_count?: number;\n    words?: {\n        word?: string;\n        /**\n         * The second this word begins in the recording\n         */\n        start?: number;\n        /**\n         * The ending second when the word completes\n         */\n        end?: number;\n    }[];\n    vtt?: string;\n}\ndeclare abstract class Base_Ai_Cf_Openai_Whisper_Tiny_En {\n    inputs: Ai_Cf_Openai_Whisper_Tiny_En_Input;\n    postProcessedOutputs: Ai_Cf_Openai_Whisper_Tiny_En_Output;\n}\ninterface Ai_Cf_Openai_Whisper_Large_V3_Turbo_Input {\n    /**\n     * Base64 encoded value of the audio data.\n     */\n    audio: string;\n    /**\n     * Supported tasks are 'translate' or 'transcribe'.\n     */\n    task?: string;\n    /**\n     * The language of the audio being transcribed or translated.\n     */\n    language?: string;\n    /**\n     * Preprocess the audio with a voice activity detection model.\n     */\n    vad_filter?: string;\n    /**\n     * A text prompt to help provide context to the model on the contents of the audio.\n     */\n    initial_prompt?: string;\n    /**\n     * The prefix it appended the the beginning of the output of the transcription and can guide the transcription result.\n     */\n    prefix?: string;\n}\ninterface Ai_Cf_Openai_Whisper_Large_V3_Turbo_Output {\n    transcription_info?: {\n        /**\n         * The language of the audio being transcribed or translated.\n         */\n        language?: string;\n        /**\n         * The confidence level or probability of the detected language being accurate, represented as a decimal between 0 and 1.\n         */\n        language_probability?: number;\n        /**\n         * The total duration of the original audio file, in seconds.\n         */\n        duration?: number;\n        /**\n         * The duration of the audio after applying Voice Activity Detection (VAD) to remove silent or irrelevant sections, in seconds.\n         */\n        duration_after_vad?: number;\n    };\n    /**\n     * The complete transcription of the audio.\n     */\n    text: string;\n    /**\n     * The total number of words in the transcription.\n     */\n    word_count?: number;\n    segments?: {\n        /**\n         * The starting time of the segment within the audio, in seconds.\n         */\n        start?: number;\n        /**\n         * The ending time of the segment within the audio, in seconds.\n         */\n        end?: number;\n        /**\n         * The transcription of the segment.\n         */\n        text?: string;\n        /**\n         * The temperature used in the decoding process, controlling randomness in predictions. Lower values result in more deterministic outputs.\n         */\n        temperature?: number;\n        /**\n         * The average log probability of the predictions for the words in this segment, indicating overall confidence.\n         */\n        avg_logprob?: number;\n        /**\n         * The compression ratio of the input to the output, measuring how much the text was compressed during the transcription process.\n         */\n        compression_ratio?: number;\n        /**\n         * The probability that the segment contains no speech, represented as a decimal between 0 and 1.\n         */\n        no_speech_prob?: number;\n        words?: {\n            /**\n             * The individual word transcribed from the audio.\n             */\n            word?: string;\n            /**\n             * The starting time of the word within the audio, in seconds.\n             */\n            start?: number;\n            /**\n             * The ending time of the word within the audio, in seconds.\n             */\n            end?: number;\n        }[];\n    }[];\n    /**\n     * The transcription in WebVTT format, which includes timing and text information for use in subtitles.\n     */\n    vtt?: string;\n}\ndeclare abstract class Base_Ai_Cf_Openai_Whisper_Large_V3_Turbo {\n    inputs: Ai_Cf_Openai_Whisper_Large_V3_Turbo_Input;\n    postProcessedOutputs: Ai_Cf_Openai_Whisper_Large_V3_Turbo_Output;\n}\ntype Ai_Cf_Baai_Bge_M3_Input = BGEM3InputQueryAndContexts | BGEM3InputEmbedding;\ninterface BGEM3InputQueryAndContexts {\n    /**\n     * A query you wish to perform against the provided contexts. If no query is provided the model with respond with embeddings for contexts\n     */\n    query?: string;\n    /**\n     * List of provided contexts. Note that the index in this array is important, as the response will refer to it.\n     */\n    contexts: {\n        /**\n         * One of the provided context content\n         */\n        text?: string;\n    }[];\n    /**\n     * When provided with too long context should the model error out or truncate the context to fit?\n     */\n    truncate_inputs?: boolean;\n}\ninterface BGEM3InputEmbedding {\n    text: string | string[];\n    /**\n     * When provided with too long context should the model error out or truncate the context to fit?\n     */\n    truncate_inputs?: boolean;\n}\ntype Ai_Cf_Baai_Bge_M3_Output = BGEM3OuputQuery | BGEM3OutputEmbeddingForContexts | BGEM3OuputEmbedding;\ninterface BGEM3OuputQuery {\n    response?: {\n        /**\n         * Index of the context in the request\n         */\n        id?: number;\n        /**\n         * Score of the context under the index.\n         */\n        score?: number;\n    }[];\n}\ninterface BGEM3OutputEmbeddingForContexts {\n    response?: number[][];\n    shape?: number[];\n    /**\n     * The pooling method used in the embedding process.\n     */\n    pooling?: \"mean\" | \"cls\";\n}\ninterface BGEM3OuputEmbedding {\n    shape?: number[];\n    /**\n     * Embeddings of the requested text values\n     */\n    data?: number[][];\n    /**\n     * The pooling method used in the embedding process.\n     */\n    pooling?: \"mean\" | \"cls\";\n}\ndeclare abstract class Base_Ai_Cf_Baai_Bge_M3 {\n    inputs: Ai_Cf_Baai_Bge_M3_Input;\n    postProcessedOutputs: Ai_Cf_Baai_Bge_M3_Output;\n}\ninterface Ai_Cf_Black_Forest_Labs_Flux_1_Schnell_Input {\n    /**\n     * A text description of the image you want to generate.\n     */\n    prompt: string;\n    /**\n     * The number of diffusion steps; higher values can improve quality but take longer.\n     */\n    steps?: number;\n}\ninterface Ai_Cf_Black_Forest_Labs_Flux_1_Schnell_Output {\n    /**\n     * The generated image in Base64 format.\n     */\n    image?: string;\n}\ndeclare abstract class Base_Ai_Cf_Black_Forest_Labs_Flux_1_Schnell {\n    inputs: Ai_Cf_Black_Forest_Labs_Flux_1_Schnell_Input;\n    postProcessedOutputs: Ai_Cf_Black_Forest_Labs_Flux_1_Schnell_Output;\n}\ntype Ai_Cf_Meta_Llama_3_2_11B_Vision_Instruct_Input = Prompt | Messages;\ninterface Prompt {\n    /**\n     * The input text prompt for the model to generate a response.\n     */\n    prompt: string;\n    image?: number[] | (string & NonNullable<unknown>);\n    /**\n     * If true, a chat template is not applied and you must adhere to the specific model's expected formatting.\n     */\n    raw?: boolean;\n    /**\n     * If true, the response will be streamed back incrementally using SSE, Server Sent Events.\n     */\n    stream?: boolean;\n    /**\n     * The maximum number of tokens to generate in the response.\n     */\n    max_tokens?: number;\n    /**\n     * Controls the randomness of the output; higher values produce more random results.\n     */\n    temperature?: number;\n    /**\n     * Adjusts the creativity of the AI's responses by controlling how many possible words it considers. Lower values make outputs more predictable; higher values allow for more varied and creative responses.\n     */\n    top_p?: number;\n    /**\n     * Limits the AI to choose from the top 'k' most probable words. Lower values make responses more focused; higher values introduce more variety and potential surprises.\n     */\n    top_k?: number;\n    /**\n     * Random seed for reproducibility of the generation.\n     */\n    seed?: number;\n    /**\n     * Penalty for repeated tokens; higher values discourage repetition.\n     */\n    repetition_penalty?: number;\n    /**\n     * Decreases the likelihood of the model repeating the same lines verbatim.\n     */\n    frequency_penalty?: number;\n    /**\n     * Increases the likelihood of the model introducing new topics.\n     */\n    presence_penalty?: number;\n    /**\n     * Name of the LoRA (Low-Rank Adaptation) model to fine-tune the base model.\n     */\n    lora?: string;\n}\ninterface Messages {\n    /**\n     * An array of message objects representing the conversation history.\n     */\n    messages: {\n        /**\n         * The role of the message sender (e.g., 'user', 'assistant', 'system', 'tool').\n         */\n        role: string;\n        /**\n         * The content of the message as a string.\n         */\n        content: string;\n    }[];\n    image?: number[] | string;\n    functions?: {\n        name: string;\n        code: string;\n    }[];\n    /**\n     * A list of tools available for the assistant to use.\n     */\n    tools?: ({\n        /**\n         * The name of the tool. More descriptive the better.\n         */\n        name: string;\n        /**\n         * A brief description of what the tool does.\n         */\n        description: string;\n        /**\n         * Schema defining the parameters accepted by the tool.\n         */\n        parameters: {\n            /**\n             * The type of the parameters object (usually 'object').\n             */\n            type: string;\n            /**\n             * List of required parameter names.\n             */\n            required?: string[];\n            /**\n             * Definitions of each parameter.\n             */\n            properties: {\n                [k: string]: {\n                    /**\n                     * The data type of the parameter.\n                     */\n                    type: string;\n                    /**\n                     * A description of the expected parameter.\n                     */\n                    description: string;\n                };\n            };\n        };\n    } | {\n        /**\n         * Specifies the type of tool (e.g., 'function').\n         */\n        type: string;\n        /**\n         * Details of the function tool.\n         */\n        function: {\n            /**\n             * The name of the function.\n             */\n            name: string;\n            /**\n             * A brief description of what the function does.\n             */\n            description: string;\n            /**\n             * Schema defining the parameters accepted by the function.\n             */\n            parameters: {\n                /**\n                 * The type of the parameters object (usually 'object').\n                 */\n                type: string;\n                /**\n                 * List of required parameter names.\n                 */\n                required?: string[];\n                /**\n                 * Definitions of each parameter.\n                 */\n                properties: {\n                    [k: string]: {\n                        /**\n                         * The data type of the parameter.\n                         */\n                        type: string;\n                        /**\n                         * A description of the expected parameter.\n                         */\n                        description: string;\n                    };\n                };\n            };\n        };\n    })[];\n    /**\n     * If true, the response will be streamed back incrementally.\n     */\n    stream?: boolean;\n    /**\n     * The maximum number of tokens to generate in the response.\n     */\n    max_tokens?: number;\n    /**\n     * Controls the randomness of the output; higher values produce more random results.\n     */\n    temperature?: number;\n    /**\n     * Controls the creativity of the AI's responses by adjusting how many possible words it considers. Lower values make outputs more predictable; higher values allow for more varied and creative responses.\n     */\n    top_p?: number;\n    /**\n     * Limits the AI to choose from the top 'k' most probable words. Lower values make responses more focused; higher values introduce more variety and potential surprises.\n     */\n    top_k?: number;\n    /**\n     * Random seed for reproducibility of the generation.\n     */\n    seed?: number;\n    /**\n     * Penalty for repeated tokens; higher values discourage repetition.\n     */\n    repetition_penalty?: number;\n    /**\n     * Decreases the likelihood of the model repeating the same lines verbatim.\n     */\n    frequency_penalty?: number;\n    /**\n     * Increases the likelihood of the model introducing new topics.\n     */\n    presence_penalty?: number;\n}\ntype Ai_Cf_Meta_Llama_3_2_11B_Vision_Instruct_Output = {\n    /**\n     * The generated text response from the model\n     */\n    response?: string;\n    /**\n     * An array of tool calls requests made during the response generation\n     */\n    tool_calls?: {\n        /**\n         * The arguments passed to be passed to the tool call request\n         */\n        arguments?: object;\n        /**\n         * The name of the tool to be called\n         */\n        name?: string;\n    }[];\n} | ReadableStream;\ndeclare abstract class Base_Ai_Cf_Meta_Llama_3_2_11B_Vision_Instruct {\n    inputs: Ai_Cf_Meta_Llama_3_2_11B_Vision_Instruct_Input;\n    postProcessedOutputs: Ai_Cf_Meta_Llama_3_2_11B_Vision_Instruct_Output;\n}\ninterface Ai_Cf_Meta_Llama_Guard_3_8B_Input {\n    /**\n     * An array of message objects representing the conversation history.\n     */\n    messages: {\n        /**\n         * The role of the message sender must alternate between 'user' and 'assistant'.\n         */\n        role: \"user\" | \"assistant\";\n        /**\n         * The content of the message as a string.\n         */\n        content: string;\n    }[];\n    /**\n     * The maximum number of tokens to generate in the response.\n     */\n    max_tokens?: number;\n    /**\n     * Controls the randomness of the output; higher values produce more random results.\n     */\n    temperature?: number;\n    /**\n     * Dictate the output format of the generated response.\n     */\n    response_format?: {\n        /**\n         * Set to json_object to process and output generated text as JSON.\n         */\n        type?: string;\n    };\n}\ninterface Ai_Cf_Meta_Llama_Guard_3_8B_Output {\n    response?: string | {\n        /**\n         * Whether the conversation is safe or not.\n         */\n        safe?: boolean;\n        /**\n         * A list of what hazard categories predicted for the conversation, if the conversation is deemed unsafe.\n         */\n        categories?: string[];\n    };\n    /**\n     * Usage statistics for the inference request\n     */\n    usage?: {\n        /**\n         * Total number of tokens in input\n         */\n        prompt_tokens?: number;\n        /**\n         * Total number of tokens in output\n         */\n        completion_tokens?: number;\n        /**\n         * Total number of input and output tokens\n         */\n        total_tokens?: number;\n    };\n}\ndeclare abstract class Base_Ai_Cf_Meta_Llama_Guard_3_8B {\n    inputs: Ai_Cf_Meta_Llama_Guard_3_8B_Input;\n    postProcessedOutputs: Ai_Cf_Meta_Llama_Guard_3_8B_Output;\n}\ninterface Ai_Cf_Baai_Bge_Reranker_Base_Input {\n    /**\n     * A query you wish to perform against the provided contexts.\n     */\n    /**\n     * Number of returned results starting with the best score.\n     */\n    top_k?: number;\n    /**\n     * List of provided contexts. Note that the index in this array is important, as the response will refer to it.\n     */\n    contexts: {\n        /**\n         * One of the provided context content\n         */\n        text?: string;\n    }[];\n}\ninterface Ai_Cf_Baai_Bge_Reranker_Base_Output {\n    response?: {\n        /**\n         * Index of the context in the request\n         */\n        id?: number;\n        /**\n         * Score of the context under the index.\n         */\n        score?: number;\n    }[];\n}\ndeclare abstract class Base_Ai_Cf_Baai_Bge_Reranker_Base {\n    inputs: Ai_Cf_Baai_Bge_Reranker_Base_Input;\n    postProcessedOutputs: Ai_Cf_Baai_Bge_Reranker_Base_Output;\n}\ntype Ai_Cf_Meta_Llama_4_Scout_17B_16E_Instruct_Input = Ai_Cf_Meta_Llama_4_Prompt | Ai_Cf_Meta_Llama_4_Messages;\ninterface Ai_Cf_Meta_Llama_4_Prompt {\n    /**\n     * The input text prompt for the model to generate a response.\n     */\n    prompt: string;\n    /**\n     * JSON schema that should be fulfilled for the response.\n     */\n    guided_json?: object;\n    /**\n     * If true, a chat template is not applied and you must adhere to the specific model's expected formatting.\n     */\n    raw?: boolean;\n    /**\n     * If true, the response will be streamed back incrementally using SSE, Server Sent Events.\n     */\n    stream?: boolean;\n    /**\n     * The maximum number of tokens to generate in the response.\n     */\n    max_tokens?: number;\n    /**\n     * Controls the randomness of the output; higher values produce more random results.\n     */\n    temperature?: number;\n    /**\n     * Adjusts the creativity of the AI's responses by controlling how many possible words it considers. Lower values make outputs more predictable; higher values allow for more varied and creative responses.\n     */\n    top_p?: number;\n    /**\n     * Limits the AI to choose from the top 'k' most probable words. Lower values make responses more focused; higher values introduce more variety and potential surprises.\n     */\n    top_k?: number;\n    /**\n     * Random seed for reproducibility of the generation.\n     */\n    seed?: number;\n    /**\n     * Penalty for repeated tokens; higher values discourage repetition.\n     */\n    repetition_penalty?: number;\n    /**\n     * Decreases the likelihood of the model repeating the same lines verbatim.\n     */\n    frequency_penalty?: number;\n    /**\n     * Increases the likelihood of the model introducing new topics.\n     */\n    presence_penalty?: number;\n}\ninterface Ai_Cf_Meta_Llama_4_Messages {\n    /**\n     * An array of message objects representing the conversation history.\n     */\n    messages: {\n        /**\n         * The role of the message sender (e.g., 'user', 'assistant', 'system', 'tool').\n         */\n        role?: string;\n        /**\n         * The tool call id. Must be supplied for tool calls for Mistral-3. If you don't know what to put here you can fall back to 000000001\n         */\n        tool_call_id?: string;\n        content?: string | {\n            /**\n             * Type of the content provided\n             */\n            type?: string;\n            text?: string;\n            image_url?: {\n                /**\n                 * image uri with data (e.g. data:image/jpeg;base64,/9j/...). HTTP URL will not be accepted\n                 */\n                url?: string;\n            };\n        }[] | {\n            /**\n             * Type of the content provided\n             */\n            type?: string;\n            text?: string;\n            image_url?: {\n                /**\n                 * image uri with data (e.g. data:image/jpeg;base64,/9j/...). HTTP URL will not be accepted\n                 */\n                url?: string;\n            };\n        };\n    }[];\n    functions?: {\n        name: string;\n        code: string;\n    }[];\n    /**\n     * A list of tools available for the assistant to use.\n     */\n    tools?: ({\n        /**\n         * The name of the tool. More descriptive the better.\n         */\n        name: string;\n        /**\n         * A brief description of what the tool does.\n         */\n        description: string;\n        /**\n         * Schema defining the parameters accepted by the tool.\n         */\n        parameters: {\n            /**\n             * The type of the parameters object (usually 'object').\n             */\n            type: string;\n            /**\n             * List of required parameter names.\n             */\n            required?: string[];\n            /**\n             * Definitions of each parameter.\n             */\n            properties: {\n                [k: string]: {\n                    /**\n                     * The data type of the parameter.\n                     */\n                    type: string;\n                    /**\n                     * A description of the expected parameter.\n                     */\n                    description: string;\n                };\n            };\n        };\n    } | {\n        /**\n         * Specifies the type of tool (e.g., 'function').\n         */\n        type: string;\n        /**\n         * Details of the function tool.\n         */\n        function: {\n            /**\n             * The name of the function.\n             */\n            name: string;\n            /**\n             * A brief description of what the function does.\n             */\n            description: string;\n            /**\n             * Schema defining the parameters accepted by the function.\n             */\n            parameters: {\n                /**\n                 * The type of the parameters object (usually 'object').\n                 */\n                type: string;\n                /**\n                 * List of required parameter names.\n                 */\n                required?: string[];\n                /**\n                 * Definitions of each parameter.\n                 */\n                properties: {\n                    [k: string]: {\n                        /**\n                         * The data type of the parameter.\n                         */\n                        type: string;\n                        /**\n                         * A description of the expected parameter.\n                         */\n                        description: string;\n                    };\n                };\n            };\n        };\n    })[];\n    /**\n     * JSON schema that should be fufilled for the response.\n     */\n    guided_json?: object;\n    /**\n     * If true, a chat template is not applied and you must adhere to the specific model's expected formatting.\n     */\n    raw?: boolean;\n    /**\n     * If true, the response will be streamed back incrementally using SSE, Server Sent Events.\n     */\n    stream?: boolean;\n    /**\n     * The maximum number of tokens to generate in the response.\n     */\n    max_tokens?: number;\n    /**\n     * Controls the randomness of the output; higher values produce more random results.\n     */\n    temperature?: number;\n    /**\n     * Adjusts the creativity of the AI's responses by controlling how many possible words it considers. Lower values make outputs more predictable; higher values allow for more varied and creative responses.\n     */\n    top_p?: number;\n    /**\n     * Limits the AI to choose from the top 'k' most probable words. Lower values make responses more focused; higher values introduce more variety and potential surprises.\n     */\n    top_k?: number;\n    /**\n     * Random seed for reproducibility of the generation.\n     */\n    seed?: number;\n    /**\n     * Penalty for repeated tokens; higher values discourage repetition.\n     */\n    repetition_penalty?: number;\n    /**\n     * Decreases the likelihood of the model repeating the same lines verbatim.\n     */\n    frequency_penalty?: number;\n    /**\n     * Increases the likelihood of the model introducing new topics.\n     */\n    presence_penalty?: number;\n}\ntype Ai_Cf_Meta_Llama_4_Scout_17B_16E_Instruct_Output = {\n    /**\n     * The generated text response from the model\n     */\n    response: string;\n    /**\n     * Usage statistics for the inference request\n     */\n    usage?: {\n        /**\n         * Total number of tokens in input\n         */\n        prompt_tokens?: number;\n        /**\n         * Total number of tokens in output\n         */\n        completion_tokens?: number;\n        /**\n         * Total number of input and output tokens\n         */\n        total_tokens?: number;\n    };\n    /**\n     * An array of tool calls requests made during the response generation\n     */\n    tool_calls?: {\n        /**\n         * The arguments passed to be passed to the tool call request\n         */\n        arguments?: object;\n        /**\n         * The name of the tool to be called\n         */\n        name?: string;\n    }[];\n} | string;\ndeclare abstract class Base_Ai_Cf_Meta_Llama_4_Scout_17B_16E_Instruct {\n    inputs: Ai_Cf_Meta_Llama_4_Scout_17B_16E_Instruct_Input;\n    postProcessedOutputs: Ai_Cf_Meta_Llama_4_Scout_17B_16E_Instruct_Output;\n}\ninterface AiModels {\n    \"@cf/huggingface/distilbert-sst-2-int8\": BaseAiTextClassification;\n    \"@cf/stabilityai/stable-diffusion-xl-base-1.0\": BaseAiTextToImage;\n    \"@cf/runwayml/stable-diffusion-v1-5-inpainting\": BaseAiTextToImage;\n    \"@cf/runwayml/stable-diffusion-v1-5-img2img\": BaseAiTextToImage;\n    \"@cf/lykon/dreamshaper-8-lcm\": BaseAiTextToImage;\n    \"@cf/bytedance/stable-diffusion-xl-lightning\": BaseAiTextToImage;\n    \"@cf/myshell-ai/melotts\": BaseAiTextToSpeech;\n    \"@cf/baai/bge-base-en-v1.5\": BaseAiTextEmbeddings;\n    \"@cf/baai/bge-small-en-v1.5\": BaseAiTextEmbeddings;\n    \"@cf/baai/bge-large-en-v1.5\": BaseAiTextEmbeddings;\n    \"@cf/microsoft/resnet-50\": BaseAiImageClassification;\n    \"@cf/facebook/detr-resnet-50\": BaseAiObjectDetection;\n    \"@cf/meta/llama-2-7b-chat-int8\": BaseAiTextGeneration;\n    \"@cf/mistral/mistral-7b-instruct-v0.1\": BaseAiTextGeneration;\n    \"@cf/meta/llama-2-7b-chat-fp16\": BaseAiTextGeneration;\n    \"@hf/thebloke/llama-2-13b-chat-awq\": BaseAiTextGeneration;\n    \"@hf/thebloke/mistral-7b-instruct-v0.1-awq\": BaseAiTextGeneration;\n    \"@hf/thebloke/zephyr-7b-beta-awq\": BaseAiTextGeneration;\n    \"@hf/thebloke/openhermes-2.5-mistral-7b-awq\": BaseAiTextGeneration;\n    \"@hf/thebloke/neural-chat-7b-v3-1-awq\": BaseAiTextGeneration;\n    \"@hf/thebloke/llamaguard-7b-awq\": BaseAiTextGeneration;\n    \"@hf/thebloke/deepseek-coder-6.7b-base-awq\": BaseAiTextGeneration;\n    \"@hf/thebloke/deepseek-coder-6.7b-instruct-awq\": BaseAiTextGeneration;\n    \"@cf/deepseek-ai/deepseek-math-7b-instruct\": BaseAiTextGeneration;\n    \"@cf/defog/sqlcoder-7b-2\": BaseAiTextGeneration;\n    \"@cf/openchat/openchat-3.5-0106\": BaseAiTextGeneration;\n    \"@cf/tiiuae/falcon-7b-instruct\": BaseAiTextGeneration;\n    \"@cf/thebloke/discolm-german-7b-v1-awq\": BaseAiTextGeneration;\n    \"@cf/qwen/qwen1.5-0.5b-chat\": BaseAiTextGeneration;\n    \"@cf/qwen/qwen1.5-7b-chat-awq\": BaseAiTextGeneration;\n    \"@cf/qwen/qwen1.5-14b-chat-awq\": BaseAiTextGeneration;\n    \"@cf/tinyllama/tinyllama-1.1b-chat-v1.0\": BaseAiTextGeneration;\n    \"@cf/microsoft/phi-2\": BaseAiTextGeneration;\n    \"@cf/qwen/qwen1.5-1.8b-chat\": BaseAiTextGeneration;\n    \"@cf/mistral/mistral-7b-instruct-v0.2-lora\": BaseAiTextGeneration;\n    \"@hf/nousresearch/hermes-2-pro-mistral-7b\": BaseAiTextGeneration;\n    \"@hf/nexusflow/starling-lm-7b-beta\": BaseAiTextGeneration;\n    \"@hf/google/gemma-7b-it\": BaseAiTextGeneration;\n    \"@cf/meta-llama/llama-2-7b-chat-hf-lora\": BaseAiTextGeneration;\n    \"@cf/google/gemma-2b-it-lora\": BaseAiTextGeneration;\n    \"@cf/google/gemma-7b-it-lora\": BaseAiTextGeneration;\n    \"@hf/mistral/mistral-7b-instruct-v0.2\": BaseAiTextGeneration;\n    \"@cf/meta/llama-3-8b-instruct\": BaseAiTextGeneration;\n    \"@cf/fblgit/una-cybertron-7b-v2-bf16\": BaseAiTextGeneration;\n    \"@cf/meta/llama-3-8b-instruct-awq\": BaseAiTextGeneration;\n    \"@hf/meta-llama/meta-llama-3-8b-instruct\": BaseAiTextGeneration;\n    \"@cf/meta/llama-3.1-8b-instruct\": BaseAiTextGeneration;\n    \"@cf/meta/llama-3.1-8b-instruct-fp8\": BaseAiTextGeneration;\n    \"@cf/meta/llama-3.1-8b-instruct-awq\": BaseAiTextGeneration;\n    \"@cf/meta/llama-3.2-3b-instruct\": BaseAiTextGeneration;\n    \"@cf/meta/llama-3.2-1b-instruct\": BaseAiTextGeneration;\n    \"@cf/meta/llama-3.3-70b-instruct-fp8-fast\": BaseAiTextGeneration;\n    \"@cf/deepseek-ai/deepseek-r1-distill-qwen-32b\": BaseAiTextGeneration;\n    \"@cf/meta/m2m100-1.2b\": BaseAiTranslation;\n    \"@cf/facebook/bart-large-cnn\": BaseAiSummarization;\n    \"@cf/llava-hf/llava-1.5-7b-hf\": BaseAiImageToText;\n    \"@cf/openai/whisper\": Base_Ai_Cf_Openai_Whisper;\n    \"@cf/unum/uform-gen2-qwen-500m\": Base_Ai_Cf_Unum_Uform_Gen2_Qwen_500M;\n    \"@cf/openai/whisper-tiny-en\": Base_Ai_Cf_Openai_Whisper_Tiny_En;\n    \"@cf/openai/whisper-large-v3-turbo\": Base_Ai_Cf_Openai_Whisper_Large_V3_Turbo;\n    \"@cf/baai/bge-m3\": Base_Ai_Cf_Baai_Bge_M3;\n    \"@cf/black-forest-labs/flux-1-schnell\": Base_Ai_Cf_Black_Forest_Labs_Flux_1_Schnell;\n    \"@cf/meta/llama-3.2-11b-vision-instruct\": Base_Ai_Cf_Meta_Llama_3_2_11B_Vision_Instruct;\n    \"@cf/meta/llama-guard-3-8b\": Base_Ai_Cf_Meta_Llama_Guard_3_8B;\n    \"@cf/baai/bge-reranker-base\": Base_Ai_Cf_Baai_Bge_Reranker_Base;\n    \"@cf/meta/llama-4-scout-17b-16e-instruct\": Base_Ai_Cf_Meta_Llama_4_Scout_17B_16E_Instruct;\n}\ntype AiOptions = {\n    gateway?: GatewayOptions;\n    returnRawResponse?: boolean;\n    prefix?: string;\n    extraHeaders?: object;\n};\ntype ConversionResponse = {\n    name: string;\n    mimeType: string;\n    format: \"markdown\";\n    tokens: number;\n    data: string;\n};\ntype AiModelsSearchParams = {\n    author?: string;\n    hide_experimental?: boolean;\n    page?: number;\n    per_page?: number;\n    search?: string;\n    source?: number;\n    task?: string;\n};\ntype AiModelsSearchObject = {\n    id: string;\n    source: number;\n    name: string;\n    description: string;\n    task: {\n        id: string;\n        name: string;\n        description: string;\n    };\n    tags: string[];\n    properties: {\n        property_id: string;\n        value: string;\n    }[];\n};\ninterface InferenceUpstreamError extends Error {\n}\ninterface AiInternalError extends Error {\n}\ntype AiModelListType = Record<string, any>;\ndeclare abstract class Ai<AiModelList extends AiModelListType = AiModels> {\n    aiGatewayLogId: string | null;\n    gateway(gatewayId: string): AiGateway;\n    autorag(autoragId: string): AutoRAG;\n    run<Name extends keyof AiModelList, Options extends AiOptions>(model: Name, inputs: AiModelList[Name][\"inputs\"], options?: Options): Promise<Options extends {\n        returnRawResponse: true;\n    } ? Response : AiModelList[Name][\"postProcessedOutputs\"]>;\n    models(params?: AiModelsSearchParams): Promise<AiModelsSearchObject[]>;\n    toMarkdown(files: {\n        name: string;\n        blob: Blob;\n    }[], options?: {\n        gateway?: GatewayOptions;\n        extraHeaders?: object;\n    }): Promise<ConversionResponse[]>;\n    toMarkdown(files: {\n        name: string;\n        blob: Blob;\n    }, options?: {\n        gateway?: GatewayOptions;\n        extraHeaders?: object;\n    }): Promise<ConversionResponse>;\n}\ntype GatewayRetries = {\n    maxAttempts?: 1 | 2 | 3 | 4 | 5;\n    retryDelayMs?: number;\n    backoff?: 'constant' | 'linear' | 'exponential';\n};\ntype GatewayOptions = {\n    id: string;\n    cacheKey?: string;\n    cacheTtl?: number;\n    skipCache?: boolean;\n    metadata?: Record<string, number | string | boolean | null | bigint>;\n    collectLog?: boolean;\n    eventId?: string;\n    requestTimeoutMs?: number;\n    retries?: GatewayRetries;\n};\ntype AiGatewayPatchLog = {\n    score?: number | null;\n    feedback?: -1 | 1 | null;\n    metadata?: Record<string, number | string | boolean | null | bigint> | null;\n};\ntype AiGatewayLog = {\n    id: string;\n    provider: string;\n    model: string;\n    model_type?: string;\n    path: string;\n    duration: number;\n    request_type?: string;\n    request_content_type?: string;\n    status_code: number;\n    response_content_type?: string;\n    success: boolean;\n    cached: boolean;\n    tokens_in?: number;\n    tokens_out?: number;\n    metadata?: Record<string, number | string | boolean | null | bigint>;\n    step?: number;\n    cost?: number;\n    custom_cost?: boolean;\n    request_size: number;\n    request_head?: string;\n    request_head_complete: boolean;\n    response_size: number;\n    response_head?: string;\n    response_head_complete: boolean;\n    created_at: Date;\n};\ntype AIGatewayProviders = 'workers-ai' | 'anthropic' | 'aws-bedrock' | 'azure-openai' | 'google-vertex-ai' | 'huggingface' | 'openai' | 'perplexity-ai' | 'replicate' | 'groq' | 'cohere' | 'google-ai-studio' | 'mistral' | 'grok' | 'openrouter' | 'deepseek' | 'cerebras' | 'cartesia' | 'elevenlabs' | 'adobe-firefly';\ntype AIGatewayHeaders = {\n    'cf-aig-metadata': Record<string, number | string | boolean | null | bigint> | string;\n    'cf-aig-custom-cost': {\n        per_token_in?: number;\n        per_token_out?: number;\n    } | {\n        total_cost?: number;\n    } | string;\n    'cf-aig-cache-ttl': number | string;\n    'cf-aig-skip-cache': boolean | string;\n    'cf-aig-cache-key': string;\n    'cf-aig-event-id': string;\n    'cf-aig-request-timeout': number | string;\n    'cf-aig-max-attempts': number | string;\n    'cf-aig-retry-delay': number | string;\n    'cf-aig-backoff': string;\n    'cf-aig-collect-log': boolean | string;\n    Authorization: string;\n    'Content-Type': string;\n    [key: string]: string | number | boolean | object;\n};\ntype AIGatewayUniversalRequest = {\n    provider: AIGatewayProviders | string; // eslint-disable-line\n    endpoint: string;\n    headers: Partial<AIGatewayHeaders>;\n    query: unknown;\n};\ninterface AiGatewayInternalError extends Error {\n}\ninterface AiGatewayLogNotFound extends Error {\n}\ndeclare abstract class AiGateway {\n    patchLog(logId: string, data: AiGatewayPatchLog): Promise<void>;\n    getLog(logId: string): Promise<AiGatewayLog>;\n    run(data: AIGatewayUniversalRequest | AIGatewayUniversalRequest[], options?: {\n        gateway?: GatewayOptions;\n        extraHeaders?: object;\n    }): Promise<Response>;\n    getUrl(provider?: AIGatewayProviders | string): Promise<string>; // eslint-disable-line\n}\ninterface AutoRAGInternalError extends Error {\n}\ninterface AutoRAGNotFoundError extends Error {\n}\ninterface AutoRAGUnauthorizedError extends Error {\n}\ntype ComparisonFilter = {\n    key: string;\n    type: 'eq' | 'ne' | 'gt' | 'gte' | 'lt' | 'lte';\n    value: string | number | boolean;\n};\ntype CompoundFilter = {\n    type: 'and' | 'or';\n    filters: ComparisonFilter[];\n};\ntype AutoRagSearchRequest = {\n    query: string;\n    filters?: CompoundFilter | ComparisonFilter;\n    max_num_results?: number;\n    ranking_options?: {\n        ranker?: string;\n        score_threshold?: number;\n    };\n    rewrite_query?: boolean;\n};\ntype AutoRagAiSearchRequest = AutoRagSearchRequest & {\n    stream?: boolean;\n};\ntype AutoRagAiSearchRequestStreaming = Omit<AutoRagAiSearchRequest, 'stream'> & {\n    stream: true;\n};\ntype AutoRagSearchResponse = {\n    object: 'vector_store.search_results.page';\n    search_query: string;\n    data: {\n        file_id: string;\n        filename: string;\n        score: number;\n        attributes: Record<string, string | number | boolean | null>;\n        content: {\n            type: 'text';\n            text: string;\n        }[];\n    }[];\n    has_more: boolean;\n    next_page: string | null;\n};\ntype AutoRagAiSearchResponse = AutoRagSearchResponse & {\n    response: string;\n};\ndeclare abstract class AutoRAG {\n    search(params: AutoRagSearchRequest): Promise<AutoRagSearchResponse>;\n    aiSearch(params: AutoRagAiSearchRequestStreaming): Promise<Response>;\n    aiSearch(params: AutoRagAiSearchRequest): Promise<AutoRagAiSearchResponse>;\n    aiSearch(params: AutoRagAiSearchRequest): Promise<AutoRagAiSearchResponse | Response>;\n}\ninterface BasicImageTransformations {\n    /**\n     * Maximum width in image pixels. The value must be an integer.\n     */\n    width?: number;\n    /**\n     * Maximum height in image pixels. The value must be an integer.\n     */\n    height?: number;\n    /**\n     * Resizing mode as a string. It affects interpretation of width and height\n     * options:\n     *  - scale-down: Similar to contain, but the image is never enlarged. If\n     *    the image is larger than given width or height, it will be resized.\n     *    Otherwise its original size will be kept.\n     *  - contain: Resizes to maximum size that fits within the given width and\n     *    height. If only a single dimension is given (e.g. only width), the\n     *    image will be shrunk or enlarged to exactly match that dimension.\n     *    Aspect ratio is always preserved.\n     *  - cover: Resizes (shrinks or enlarges) to fill the entire area of width\n     *    and height. If the image has an aspect ratio different from the ratio\n     *    of width and height, it will be cropped to fit.\n     *  - crop: The image will be shrunk and cropped to fit within the area\n     *    specified by width and height. The image will not be enlarged. For images\n     *    smaller than the given dimensions it's the same as scale-down. For\n     *    images larger than the given dimensions, it's the same as cover.\n     *    See also trim.\n     *  - pad: Resizes to the maximum size that fits within the given width and\n     *    height, and then fills the remaining area with a background color\n     *    (white by default). Use of this mode is not recommended, as the same\n     *    effect can be more efficiently achieved with the contain mode and the\n     *    CSS object-fit: contain property.\n     *  - squeeze: Stretches and deforms to the width and height given, even if it\n     *    breaks aspect ratio\n     */\n    fit?: \"scale-down\" | \"contain\" | \"cover\" | \"crop\" | \"pad\" | \"squeeze\";\n    /**\n     * When cropping with fit: \"cover\", this defines the side or point that should\n     * be left uncropped. The value is either a string\n     * \"left\", \"right\", \"top\", \"bottom\", \"auto\", or \"center\" (the default),\n     * or an object {x, y} containing focal point coordinates in the original\n     * image expressed as fractions ranging from 0.0 (top or left) to 1.0\n     * (bottom or right), 0.5 being the center. {fit: \"cover\", gravity: \"top\"} will\n     * crop bottom or left and right sides as necessary, but won’t crop anything\n     * from the top. {fit: \"cover\", gravity: {x:0.5, y:0.2}} will crop each side to\n     * preserve as much as possible around a point at 20% of the height of the\n     * source image.\n     */\n    gravity?: 'left' | 'right' | 'top' | 'bottom' | 'center' | 'auto' | 'entropy' | BasicImageTransformationsGravityCoordinates;\n    /**\n     * Background color to add underneath the image. Applies only to images with\n     * transparency (such as PNG). Accepts any CSS color (#RRGGBB, rgba(…),\n     * hsl(…), etc.)\n     */\n    background?: string;\n    /**\n     * Number of degrees (90, 180, 270) to rotate the image by. width and height\n     * options refer to axes after rotation.\n     */\n    rotate?: 0 | 90 | 180 | 270 | 360;\n}\ninterface BasicImageTransformationsGravityCoordinates {\n    x?: number;\n    y?: number;\n    mode?: 'remainder' | 'box-center';\n}\n/**\n * In addition to the properties you can set in the RequestInit dict\n * that you pass as an argument to the Request constructor, you can\n * set certain properties of a `cf` object to control how Cloudflare\n * features are applied to that new Request.\n *\n * Note: Currently, these properties cannot be tested in the\n * playground.\n */\ninterface RequestInitCfProperties extends Record<string, unknown> {\n    cacheEverything?: boolean;\n    /**\n     * A request's cache key is what determines if two requests are\n     * \"the same\" for caching purposes. If a request has the same cache key\n     * as some previous request, then we can serve the same cached response for\n     * both. (e.g. 'some-key')\n     *\n     * Only available for Enterprise customers.\n     */\n    cacheKey?: string;\n    /**\n     * This allows you to append additional Cache-Tag response headers\n     * to the origin response without modifications to the origin server.\n     * This will allow for greater control over the Purge by Cache Tag feature\n     * utilizing changes only in the Workers process.\n     *\n     * Only available for Enterprise customers.\n     */\n    cacheTags?: string[];\n    /**\n     * Force response to be cached for a given number of seconds. (e.g. 300)\n     */\n    cacheTtl?: number;\n    /**\n     * Force response to be cached for a given number of seconds based on the Origin status code.\n     * (e.g. { '200-299': 86400, '404': 1, '500-599': 0 })\n     */\n    cacheTtlByStatus?: Record<string, number>;\n    scrapeShield?: boolean;\n    apps?: boolean;\n    image?: RequestInitCfPropertiesImage;\n    minify?: RequestInitCfPropertiesImageMinify;\n    mirage?: boolean;\n    polish?: \"lossy\" | \"lossless\" | \"off\";\n    r2?: RequestInitCfPropertiesR2;\n    /**\n     * Redirects the request to an alternate origin server. You can use this,\n     * for example, to implement load balancing across several origins.\n     * (e.g.us-east.example.com)\n     *\n     * Note - For security reasons, the hostname set in resolveOverride must\n     * be proxied on the same Cloudflare zone of the incoming request.\n     * Otherwise, the setting is ignored. CNAME hosts are allowed, so to\n     * resolve to a host under a different domain or a DNS only domain first\n     * declare a CNAME record within your own zone’s DNS mapping to the\n     * external hostname, set proxy on Cloudflare, then set resolveOverride\n     * to point to that CNAME record.\n     */\n    resolveOverride?: string;\n}\ninterface RequestInitCfPropertiesImageDraw extends BasicImageTransformations {\n    /**\n     * Absolute URL of the image file to use for the drawing. It can be any of\n     * the supported file formats. For drawing of watermarks or non-rectangular\n     * overlays we recommend using PNG or WebP images.\n     */\n    url: string;\n    /**\n     * Floating-point number between 0 (transparent) and 1 (opaque).\n     * For example, opacity: 0.5 makes overlay semitransparent.\n     */\n    opacity?: number;\n    /**\n     * - If set to true, the overlay image will be tiled to cover the entire\n     *   area. This is useful for stock-photo-like watermarks.\n     * - If set to \"x\", the overlay image will be tiled horizontally only\n     *   (form a line).\n     * - If set to \"y\", the overlay image will be tiled vertically only\n     *   (form a line).\n     */\n    repeat?: true | \"x\" | \"y\";\n    /**\n     * Position of the overlay image relative to a given edge. Each property is\n     * an offset in pixels. 0 aligns exactly to the edge. For example, left: 10\n     * positions left side of the overlay 10 pixels from the left edge of the\n     * image it's drawn over. bottom: 0 aligns bottom of the overlay with bottom\n     * of the background image.\n     *\n     * Setting both left & right, or both top & bottom is an error.\n     *\n     * If no position is specified, the image will be centered.\n     */\n    top?: number;\n    left?: number;\n    bottom?: number;\n    right?: number;\n}\ninterface RequestInitCfPropertiesImage extends BasicImageTransformations {\n    /**\n     * Device Pixel Ratio. Default 1. Multiplier for width/height that makes it\n     * easier to specify higher-DPI sizes in <img srcset>.\n     */\n    dpr?: number;\n    /**\n     * Allows you to trim your image. Takes dpr into account and is performed before\n     * resizing or rotation.\n     *\n     * It can be used as:\n     * - left, top, right, bottom - it will specify the number of pixels to cut\n     *   off each side\n     * - width, height - the width/height you'd like to end up with - can be used\n     *   in combination with the properties above\n     * - border - this will automatically trim the surroundings of an image based on\n     *   it's color. It consists of three properties:\n     *    - color: rgb or hex representation of the color you wish to trim (todo: verify the rgba bit)\n     *    - tolerance: difference from color to treat as color\n     *    - keep: the number of pixels of border to keep\n     */\n    trim?: \"border\" | {\n        top?: number;\n        bottom?: number;\n        left?: number;\n        right?: number;\n        width?: number;\n        height?: number;\n        border?: boolean | {\n            color?: string;\n            tolerance?: number;\n            keep?: number;\n        };\n    };\n    /**\n     * Quality setting from 1-100 (useful values are in 60-90 range). Lower values\n     * make images look worse, but load faster. The default is 85. It applies only\n     * to JPEG and WebP images. It doesn’t have any effect on PNG.\n     */\n    quality?: number | \"low\" | \"medium-low\" | \"medium-high\" | \"high\";\n    /**\n     * Output format to generate. It can be:\n     *  - avif: generate images in AVIF format.\n     *  - webp: generate images in Google WebP format. Set quality to 100 to get\n     *    the WebP-lossless format.\n     *  - json: instead of generating an image, outputs information about the\n     *    image, in JSON format. The JSON object will contain image size\n     *    (before and after resizing), source image’s MIME type, file size, etc.\n     * - jpeg: generate images in JPEG format.\n     * - png: generate images in PNG format.\n     */\n    format?: \"avif\" | \"webp\" | \"json\" | \"jpeg\" | \"png\" | \"baseline-jpeg\" | \"png-force\" | \"svg\";\n    /**\n     * Whether to preserve animation frames from input files. Default is true.\n     * Setting it to false reduces animations to still images. This setting is\n     * recommended when enlarging images or processing arbitrary user content,\n     * because large GIF animations can weigh tens or even hundreds of megabytes.\n     * It is also useful to set anim:false when using format:\"json\" to get the\n     * response quicker without the number of frames.\n     */\n    anim?: boolean;\n    /**\n     * What EXIF data should be preserved in the output image. Note that EXIF\n     * rotation and embedded color profiles are always applied (\"baked in\" into\n     * the image), and aren't affected by this option. Note that if the Polish\n     * feature is enabled, all metadata may have been removed already and this\n     * option may have no effect.\n     *  - keep: Preserve most of EXIF metadata, including GPS location if there's\n     *    any.\n     *  - copyright: Only keep the copyright tag, and discard everything else.\n     *    This is the default behavior for JPEG files.\n     *  - none: Discard all invisible EXIF metadata. Currently WebP and PNG\n     *    output formats always discard metadata.\n     */\n    metadata?: \"keep\" | \"copyright\" | \"none\";\n    /**\n     * Strength of sharpening filter to apply to the image. Floating-point\n     * number between 0 (no sharpening, default) and 10 (maximum). 1.0 is a\n     * recommended value for downscaled images.\n     */\n    sharpen?: number;\n    /**\n     * Radius of a blur filter (approximate gaussian). Maximum supported radius\n     * is 250.\n     */\n    blur?: number;\n    /**\n     * Overlays are drawn in the order they appear in the array (last array\n     * entry is the topmost layer).\n     */\n    draw?: RequestInitCfPropertiesImageDraw[];\n    /**\n     * Fetching image from authenticated origin. Setting this property will\n     * pass authentication headers (Authorization, Cookie, etc.) through to\n     * the origin.\n     */\n    \"origin-auth\"?: \"share-publicly\";\n    /**\n     * Adds a border around the image. The border is added after resizing. Border\n     * width takes dpr into account, and can be specified either using a single\n     * width property, or individually for each side.\n     */\n    border?: {\n        color: string;\n        width: number;\n    } | {\n        color: string;\n        top: number;\n        right: number;\n        bottom: number;\n        left: number;\n    };\n    /**\n     * Increase brightness by a factor. A value of 1.0 equals no change, a value\n     * of 0.5 equals half brightness, and a value of 2.0 equals twice as bright.\n     * 0 is ignored.\n     */\n    brightness?: number;\n    /**\n     * Increase contrast by a factor. A value of 1.0 equals no change, a value of\n     * 0.5 equals low contrast, and a value of 2.0 equals high contrast. 0 is\n     * ignored.\n     */\n    contrast?: number;\n    /**\n     * Increase exposure by a factor. A value of 1.0 equals no change, a value of\n     * 0.5 darkens the image, and a value of 2.0 lightens the image. 0 is ignored.\n     */\n    gamma?: number;\n    /**\n     * Increase contrast by a factor. A value of 1.0 equals no change, a value of\n     * 0.5 equals low contrast, and a value of 2.0 equals high contrast. 0 is\n     * ignored.\n     */\n    saturation?: number;\n    /**\n     * Flips the images horizontally, vertically, or both. Flipping is applied before\n     * rotation, so if you apply flip=h,rotate=90 then the image will be flipped\n     * horizontally, then rotated by 90 degrees.\n     */\n    flip?: 'h' | 'v' | 'hv';\n    /**\n     * Slightly reduces latency on a cache miss by selecting a\n     * quickest-to-compress file format, at a cost of increased file size and\n     * lower image quality. It will usually override the format option and choose\n     * JPEG over WebP or AVIF. We do not recommend using this option, except in\n     * unusual circumstances like resizing uncacheable dynamically-generated\n     * images.\n     */\n    compression?: \"fast\";\n}\ninterface RequestInitCfPropertiesImageMinify {\n    javascript?: boolean;\n    css?: boolean;\n    html?: boolean;\n}\ninterface RequestInitCfPropertiesR2 {\n    /**\n     * Colo id of bucket that an object is stored in\n     */\n    bucketColoId?: number;\n}\n/**\n * Request metadata provided by Cloudflare's edge.\n */\ntype IncomingRequestCfProperties<HostMetadata = unknown> = IncomingRequestCfPropertiesBase & IncomingRequestCfPropertiesBotManagementEnterprise & IncomingRequestCfPropertiesCloudflareForSaaSEnterprise<HostMetadata> & IncomingRequestCfPropertiesGeographicInformation & IncomingRequestCfPropertiesCloudflareAccessOrApiShield;\ninterface IncomingRequestCfPropertiesBase extends Record<string, unknown> {\n    /**\n     * [ASN](https://www.iana.org/assignments/as-numbers/as-numbers.xhtml) of the incoming request.\n     *\n     * @example 395747\n     */\n    asn: number;\n    /**\n     * The organization which owns the ASN of the incoming request.\n     *\n     * @example \"Google Cloud\"\n     */\n    asOrganization: string;\n    /**\n     * The original value of the `Accept-Encoding` header if Cloudflare modified it.\n     *\n     * @example \"gzip, deflate, br\"\n     */\n    clientAcceptEncoding?: string;\n    /**\n     * The number of milliseconds it took for the request to reach your worker.\n     *\n     * @example 22\n     */\n    clientTcpRtt?: number;\n    /**\n     * The three-letter [IATA](https://en.wikipedia.org/wiki/IATA_airport_code)\n     * airport code of the data center that the request hit.\n     *\n     * @example \"DFW\"\n     */\n    colo: string;\n    /**\n     * Represents the upstream's response to a\n     * [TCP `keepalive` message](https://tldp.org/HOWTO/TCP-Keepalive-HOWTO/overview.html)\n     * from cloudflare.\n     *\n     * For workers with no upstream, this will always be `1`.\n     *\n     * @example 3\n     */\n    edgeRequestKeepAliveStatus: IncomingRequestCfPropertiesEdgeRequestKeepAliveStatus;\n    /**\n     * The HTTP Protocol the request used.\n     *\n     * @example \"HTTP/2\"\n     */\n    httpProtocol: string;\n    /**\n     * The browser-requested prioritization information in the request object.\n     *\n     * If no information was set, defaults to the empty string `\"\"`\n     *\n     * @example \"weight=192;exclusive=0;group=3;group-weight=127\"\n     * @default \"\"\n     */\n    requestPriority: string;\n    /**\n     * The TLS version of the connection to Cloudflare.\n     * In requests served over plaintext (without TLS), this property is the empty string `\"\"`.\n     *\n     * @example \"TLSv1.3\"\n     */\n    tlsVersion: string;\n    /**\n     * The cipher for the connection to Cloudflare.\n     * In requests served over plaintext (without TLS), this property is the empty string `\"\"`.\n     *\n     * @example \"AEAD-AES128-GCM-SHA256\"\n     */\n    tlsCipher: string;\n    /**\n     * Metadata containing the [`HELLO`](https://www.rfc-editor.org/rfc/rfc5246#section-7.4.1.2) and [`FINISHED`](https://www.rfc-editor.org/rfc/rfc5246#section-7.4.9) messages from this request's TLS handshake.\n     *\n     * If the incoming request was served over plaintext (without TLS) this field is undefined.\n     */\n    tlsExportedAuthenticator?: IncomingRequestCfPropertiesExportedAuthenticatorMetadata;\n}\ninterface IncomingRequestCfPropertiesBotManagementBase {\n    /**\n     * Cloudflare’s [level of certainty](https://developers.cloudflare.com/bots/concepts/bot-score/) that a request comes from a bot,\n     * represented as an integer percentage between `1` (almost certainly a bot) and `99` (almost certainly human).\n     *\n     * @example 54\n     */\n    score: number;\n    /**\n     * A boolean value that is true if the request comes from a good bot, like Google or Bing.\n     * Most customers choose to allow this traffic. For more details, see [Traffic from known bots](https://developers.cloudflare.com/firewall/known-issues-and-faq/#how-does-firewall-rules-handle-traffic-from-known-bots).\n     */\n    verifiedBot: boolean;\n    /**\n     * A boolean value that is true if the request originates from a\n     * Cloudflare-verified proxy service.\n     */\n    corporateProxy: boolean;\n    /**\n     * A boolean value that's true if the request matches [file extensions](https://developers.cloudflare.com/bots/reference/static-resources/) for many types of static resources.\n     */\n    staticResource: boolean;\n    /**\n     * List of IDs that correlate to the Bot Management heuristic detections made on a request (you can have multiple heuristic detections on the same request).\n     */\n    detectionIds: number[];\n}\ninterface IncomingRequestCfPropertiesBotManagement {\n    /**\n     * Results of Cloudflare's Bot Management analysis\n     */\n    botManagement: IncomingRequestCfPropertiesBotManagementBase;\n    /**\n     * Duplicate of `botManagement.score`.\n     *\n     * @deprecated\n     */\n    clientTrustScore: number;\n}\ninterface IncomingRequestCfPropertiesBotManagementEnterprise extends IncomingRequestCfPropertiesBotManagement {\n    /**\n     * Results of Cloudflare's Bot Management analysis\n     */\n    botManagement: IncomingRequestCfPropertiesBotManagementBase & {\n        /**\n         * A [JA3 Fingerprint](https://developers.cloudflare.com/bots/concepts/ja3-fingerprint/) to help profile specific SSL/TLS clients\n         * across different destination IPs, Ports, and X509 certificates.\n         */\n        ja3Hash: string;\n    };\n}\ninterface IncomingRequestCfPropertiesCloudflareForSaaSEnterprise<HostMetadata> {\n    /**\n     * Custom metadata set per-host in [Cloudflare for SaaS](https://developers.cloudflare.com/cloudflare-for-platforms/cloudflare-for-saas/).\n     *\n     * This field is only present if you have Cloudflare for SaaS enabled on your account\n     * and you have followed the [required steps to enable it]((https://developers.cloudflare.com/cloudflare-for-platforms/cloudflare-for-saas/domain-support/custom-metadata/)).\n     */\n    hostMetadata: HostMetadata;\n}\ninterface IncomingRequestCfPropertiesCloudflareAccessOrApiShield {\n    /**\n     * Information about the client certificate presented to Cloudflare.\n     *\n     * This is populated when the incoming request is served over TLS using\n     * either Cloudflare Access or API Shield (mTLS)\n     * and the presented SSL certificate has a valid\n     * [Certificate Serial Number](https://ldapwiki.com/wiki/Certificate%20Serial%20Number)\n     * (i.e., not `null` or `\"\"`).\n     *\n     * Otherwise, a set of placeholder values are used.\n     *\n     * The property `certPresented` will be set to `\"1\"` when\n     * the object is populated (i.e. the above conditions were met).\n     */\n    tlsClientAuth: IncomingRequestCfPropertiesTLSClientAuth | IncomingRequestCfPropertiesTLSClientAuthPlaceholder;\n}\n/**\n * Metadata about the request's TLS handshake\n */\ninterface IncomingRequestCfPropertiesExportedAuthenticatorMetadata {\n    /**\n     * The client's [`HELLO` message](https://www.rfc-editor.org/rfc/rfc5246#section-7.4.1.2), encoded in hexadecimal\n     *\n     * @example \"44372ba35fa1270921d318f34c12f155dc87b682cf36a790cfaa3ba8737a1b5d\"\n     */\n    clientHandshake: string;\n    /**\n     * The server's [`HELLO` message](https://www.rfc-editor.org/rfc/rfc5246#section-7.4.1.2), encoded in hexadecimal\n     *\n     * @example \"44372ba35fa1270921d318f34c12f155dc87b682cf36a790cfaa3ba8737a1b5d\"\n     */\n    serverHandshake: string;\n    /**\n     * The client's [`FINISHED` message](https://www.rfc-editor.org/rfc/rfc5246#section-7.4.9), encoded in hexadecimal\n     *\n     * @example \"084ee802fe1348f688220e2a6040a05b2199a761f33cf753abb1b006792d3f8b\"\n     */\n    clientFinished: string;\n    /**\n     * The server's [`FINISHED` message](https://www.rfc-editor.org/rfc/rfc5246#section-7.4.9), encoded in hexadecimal\n     *\n     * @example \"084ee802fe1348f688220e2a6040a05b2199a761f33cf753abb1b006792d3f8b\"\n     */\n    serverFinished: string;\n}\n/**\n * Geographic data about the request's origin.\n */\ninterface IncomingRequestCfPropertiesGeographicInformation {\n    /**\n     * The [ISO 3166-1 Alpha 2](https://www.iso.org/iso-3166-country-codes.html) country code the request originated from.\n     *\n     * If your worker is [configured to accept TOR connections](https://support.cloudflare.com/hc/en-us/articles/203306930-Understanding-Cloudflare-Tor-support-and-Onion-Routing), this may also be `\"T1\"`, indicating a request that originated over TOR.\n     *\n     * If Cloudflare is unable to determine where the request originated this property is omitted.\n     *\n     * The country code `\"T1\"` is used for requests originating on TOR.\n     *\n     * @example \"GB\"\n     */\n    country?: Iso3166Alpha2Code | \"T1\";\n    /**\n     * If present, this property indicates that the request originated in the EU\n     *\n     * @example \"1\"\n     */\n    isEUCountry?: \"1\";\n    /**\n     * A two-letter code indicating the continent the request originated from.\n     *\n     * @example \"AN\"\n     */\n    continent?: ContinentCode;\n    /**\n     * The city the request originated from\n     *\n     * @example \"Austin\"\n     */\n    city?: string;\n    /**\n     * Postal code of the incoming request\n     *\n     * @example \"78701\"\n     */\n    postalCode?: string;\n    /**\n     * Latitude of the incoming request\n     *\n     * @example \"30.27130\"\n     */\n    latitude?: string;\n    /**\n     * Longitude of the incoming request\n     *\n     * @example \"-97.74260\"\n     */\n    longitude?: string;\n    /**\n     * Timezone of the incoming request\n     *\n     * @example \"America/Chicago\"\n     */\n    timezone?: string;\n    /**\n     * If known, the ISO 3166-2 name for the first level region associated with\n     * the IP address of the incoming request\n     *\n     * @example \"Texas\"\n     */\n    region?: string;\n    /**\n     * If known, the ISO 3166-2 code for the first-level region associated with\n     * the IP address of the incoming request\n     *\n     * @example \"TX\"\n     */\n    regionCode?: string;\n    /**\n     * Metro code (DMA) of the incoming request\n     *\n     * @example \"635\"\n     */\n    metroCode?: string;\n}\n/** Data about the incoming request's TLS certificate */\ninterface IncomingRequestCfPropertiesTLSClientAuth {\n    /** Always `\"1\"`, indicating that the certificate was presented */\n    certPresented: \"1\";\n    /**\n     * Result of certificate verification.\n     *\n     * @example \"FAILED:self signed certificate\"\n     */\n    certVerified: Exclude<CertVerificationStatus, \"NONE\">;\n    /** The presented certificate's revokation status.\n     *\n     * - A value of `\"1\"` indicates the certificate has been revoked\n     * - A value of `\"0\"` indicates the certificate has not been revoked\n     */\n    certRevoked: \"1\" | \"0\";\n    /**\n     * The certificate issuer's [distinguished name](https://knowledge.digicert.com/generalinformation/INFO1745.html)\n     *\n     * @example \"CN=cloudflareaccess.com, C=US, ST=Texas, L=Austin, O=Cloudflare\"\n     */\n    certIssuerDN: string;\n    /**\n     * The certificate subject's [distinguished name](https://knowledge.digicert.com/generalinformation/INFO1745.html)\n     *\n     * @example \"CN=*.cloudflareaccess.com, C=US, ST=Texas, L=Austin, O=Cloudflare\"\n     */\n    certSubjectDN: string;\n    /**\n     * The certificate issuer's [distinguished name](https://knowledge.digicert.com/generalinformation/INFO1745.html) ([RFC 2253](https://www.rfc-editor.org/rfc/rfc2253.html) formatted)\n     *\n     * @example \"CN=cloudflareaccess.com, C=US, ST=Texas, L=Austin, O=Cloudflare\"\n     */\n    certIssuerDNRFC2253: string;\n    /**\n     * The certificate subject's [distinguished name](https://knowledge.digicert.com/generalinformation/INFO1745.html) ([RFC 2253](https://www.rfc-editor.org/rfc/rfc2253.html) formatted)\n     *\n     * @example \"CN=*.cloudflareaccess.com, C=US, ST=Texas, L=Austin, O=Cloudflare\"\n     */\n    certSubjectDNRFC2253: string;\n    /** The certificate issuer's distinguished name (legacy policies) */\n    certIssuerDNLegacy: string;\n    /** The certificate subject's distinguished name (legacy policies) */\n    certSubjectDNLegacy: string;\n    /**\n     * The certificate's serial number\n     *\n     * @example \"00936EACBE07F201DF\"\n     */\n    certSerial: string;\n    /**\n     * The certificate issuer's serial number\n     *\n     * @example \"2489002934BDFEA34\"\n     */\n    certIssuerSerial: string;\n    /**\n     * The certificate's Subject Key Identifier\n     *\n     * @example \"BB:AF:7E:02:3D:FA:A6:F1:3C:84:8E:AD:EE:38:98:EC:D9:32:32:D4\"\n     */\n    certSKI: string;\n    /**\n     * The certificate issuer's Subject Key Identifier\n     *\n     * @example \"BB:AF:7E:02:3D:FA:A6:F1:3C:84:8E:AD:EE:38:98:EC:D9:32:32:D4\"\n     */\n    certIssuerSKI: string;\n    /**\n     * The certificate's SHA-1 fingerprint\n     *\n     * @example \"6b9109f323999e52259cda7373ff0b4d26bd232e\"\n     */\n    certFingerprintSHA1: string;\n    /**\n     * The certificate's SHA-256 fingerprint\n     *\n     * @example \"acf77cf37b4156a2708e34c4eb755f9b5dbbe5ebb55adfec8f11493438d19e6ad3f157f81fa3b98278453d5652b0c1fd1d71e5695ae4d709803a4d3f39de9dea\"\n     */\n    certFingerprintSHA256: string;\n    /**\n     * The effective starting date of the certificate\n     *\n     * @example \"Dec 22 19:39:00 2018 GMT\"\n     */\n    certNotBefore: string;\n    /**\n     * The effective expiration date of the certificate\n     *\n     * @example \"Dec 22 19:39:00 2018 GMT\"\n     */\n    certNotAfter: string;\n}\n/** Placeholder values for TLS Client Authorization */\ninterface IncomingRequestCfPropertiesTLSClientAuthPlaceholder {\n    certPresented: \"0\";\n    certVerified: \"NONE\";\n    certRevoked: \"0\";\n    certIssuerDN: \"\";\n    certSubjectDN: \"\";\n    certIssuerDNRFC2253: \"\";\n    certSubjectDNRFC2253: \"\";\n    certIssuerDNLegacy: \"\";\n    certSubjectDNLegacy: \"\";\n    certSerial: \"\";\n    certIssuerSerial: \"\";\n    certSKI: \"\";\n    certIssuerSKI: \"\";\n    certFingerprintSHA1: \"\";\n    certFingerprintSHA256: \"\";\n    certNotBefore: \"\";\n    certNotAfter: \"\";\n}\n/** Possible outcomes of TLS verification */\ndeclare type CertVerificationStatus = \n/** Authentication succeeded */\n\"SUCCESS\"\n/** No certificate was presented */\n | \"NONE\"\n/** Failed because the certificate was self-signed */\n | \"FAILED:self signed certificate\"\n/** Failed because the certificate failed a trust chain check */\n | \"FAILED:unable to verify the first certificate\"\n/** Failed because the certificate not yet valid */\n | \"FAILED:certificate is not yet valid\"\n/** Failed because the certificate is expired */\n | \"FAILED:certificate has expired\"\n/** Failed for another unspecified reason */\n | \"FAILED\";\n/**\n * An upstream endpoint's response to a TCP `keepalive` message from Cloudflare.\n */\ndeclare type IncomingRequestCfPropertiesEdgeRequestKeepAliveStatus = 0 /** Unknown */ | 1 /** no keepalives (not found) */ | 2 /** no connection re-use, opening keepalive connection failed */ | 3 /** no connection re-use, keepalive accepted and saved */ | 4 /** connection re-use, refused by the origin server (`TCP FIN`) */ | 5; /** connection re-use, accepted by the origin server */\n/** ISO 3166-1 Alpha-2 codes */\ndeclare type Iso3166Alpha2Code = \"AD\" | \"AE\" | \"AF\" | \"AG\" | \"AI\" | \"AL\" | \"AM\" | \"AO\" | \"AQ\" | \"AR\" | \"AS\" | \"AT\" | \"AU\" | \"AW\" | \"AX\" | \"AZ\" | \"BA\" | \"BB\" | \"BD\" | \"BE\" | \"BF\" | \"BG\" | \"BH\" | \"BI\" | \"BJ\" | \"BL\" | \"BM\" | \"BN\" | \"BO\" | \"BQ\" | \"BR\" | \"BS\" | \"BT\" | \"BV\" | \"BW\" | \"BY\" | \"BZ\" | \"CA\" | \"CC\" | \"CD\" | \"CF\" | \"CG\" | \"CH\" | \"CI\" | \"CK\" | \"CL\" | \"CM\" | \"CN\" | \"CO\" | \"CR\" | \"CU\" | \"CV\" | \"CW\" | \"CX\" | \"CY\" | \"CZ\" | \"DE\" | \"DJ\" | \"DK\" | \"DM\" | \"DO\" | \"DZ\" | \"EC\" | \"EE\" | \"EG\" | \"EH\" | \"ER\" | \"ES\" | \"ET\" | \"FI\" | \"FJ\" | \"FK\" | \"FM\" | \"FO\" | \"FR\" | \"GA\" | \"GB\" | \"GD\" | \"GE\" | \"GF\" | \"GG\" | \"GH\" | \"GI\" | \"GL\" | \"GM\" | \"GN\" | \"GP\" | \"GQ\" | \"GR\" | \"GS\" | \"GT\" | \"GU\" | \"GW\" | \"GY\" | \"HK\" | \"HM\" | \"HN\" | \"HR\" | \"HT\" | \"HU\" | \"ID\" | \"IE\" | \"IL\" | \"IM\" | \"IN\" | \"IO\" | \"IQ\" | \"IR\" | \"IS\" | \"IT\" | \"JE\" | \"JM\" | \"JO\" | \"JP\" | \"KE\" | \"KG\" | \"KH\" | \"KI\" | \"KM\" | \"KN\" | \"KP\" | \"KR\" | \"KW\" | \"KY\" | \"KZ\" | \"LA\" | \"LB\" | \"LC\" | \"LI\" | \"LK\" | \"LR\" | \"LS\" | \"LT\" | \"LU\" | \"LV\" | \"LY\" | \"MA\" | \"MC\" | \"MD\" | \"ME\" | \"MF\" | \"MG\" | \"MH\" | \"MK\" | \"ML\" | \"MM\" | \"MN\" | \"MO\" | \"MP\" | \"MQ\" | \"MR\" | \"MS\" | \"MT\" | \"MU\" | \"MV\" | \"MW\" | \"MX\" | \"MY\" | \"MZ\" | \"NA\" | \"NC\" | \"NE\" | \"NF\" | \"NG\" | \"NI\" | \"NL\" | \"NO\" | \"NP\" | \"NR\" | \"NU\" | \"NZ\" | \"OM\" | \"PA\" | \"PE\" | \"PF\" | \"PG\" | \"PH\" | \"PK\" | \"PL\" | \"PM\" | \"PN\" | \"PR\" | \"PS\" | \"PT\" | \"PW\" | \"PY\" | \"QA\" | \"RE\" | \"RO\" | \"RS\" | \"RU\" | \"RW\" | \"SA\" | \"SB\" | \"SC\" | \"SD\" | \"SE\" | \"SG\" | \"SH\" | \"SI\" | \"SJ\" | \"SK\" | \"SL\" | \"SM\" | \"SN\" | \"SO\" | \"SR\" | \"SS\" | \"ST\" | \"SV\" | \"SX\" | \"SY\" | \"SZ\" | \"TC\" | \"TD\" | \"TF\" | \"TG\" | \"TH\" | \"TJ\" | \"TK\" | \"TL\" | \"TM\" | \"TN\" | \"TO\" | \"TR\" | \"TT\" | \"TV\" | \"TW\" | \"TZ\" | \"UA\" | \"UG\" | \"UM\" | \"US\" | \"UY\" | \"UZ\" | \"VA\" | \"VC\" | \"VE\" | \"VG\" | \"VI\" | \"VN\" | \"VU\" | \"WF\" | \"WS\" | \"YE\" | \"YT\" | \"ZA\" | \"ZM\" | \"ZW\";\n/** The 2-letter continent codes Cloudflare uses */\ndeclare type ContinentCode = \"AF\" | \"AN\" | \"AS\" | \"EU\" | \"NA\" | \"OC\" | \"SA\";\ntype CfProperties<HostMetadata = unknown> = IncomingRequestCfProperties<HostMetadata> | RequestInitCfProperties;\ninterface D1Meta {\n    duration: number;\n    size_after: number;\n    rows_read: number;\n    rows_written: number;\n    last_row_id: number;\n    changed_db: boolean;\n    changes: number;\n    /**\n     * The region of the database instance that executed the query.\n     */\n    served_by_region?: string;\n    /**\n     * True if-and-only-if the database instance that executed the query was the primary.\n     */\n    served_by_primary?: boolean;\n    timings?: {\n        /**\n         * The duration of the SQL query execution by the database instance. It doesn't include any network time.\n         */\n        sql_duration_ms: number;\n    };\n}\ninterface D1Response {\n    success: true;\n    meta: D1Meta & Record<string, unknown>;\n    error?: never;\n}\ntype D1Result<T = unknown> = D1Response & {\n    results: T[];\n};\ninterface D1ExecResult {\n    count: number;\n    duration: number;\n}\ntype D1SessionConstraint = \n// Indicates that the first query should go to the primary, and the rest queries\n// using the same D1DatabaseSession will go to any replica that is consistent with\n// the bookmark maintained by the session (returned by the first query).\n\"first-primary\"\n// Indicates that the first query can go anywhere (primary or replica), and the rest queries\n// using the same D1DatabaseSession will go to any replica that is consistent with\n// the bookmark maintained by the session (returned by the first query).\n | \"first-unconstrained\";\ntype D1SessionBookmark = string;\ndeclare abstract class D1Database {\n    prepare(query: string): D1PreparedStatement;\n    batch<T = unknown>(statements: D1PreparedStatement[]): Promise<D1Result<T>[]>;\n    exec(query: string): Promise<D1ExecResult>;\n    /**\n     * Creates a new D1 Session anchored at the given constraint or the bookmark.\n     * All queries executed using the created session will have sequential consistency,\n     * meaning that all writes done through the session will be visible in subsequent reads.\n     *\n     * @param constraintOrBookmark Either the session constraint or the explicit bookmark to anchor the created session.\n     */\n    withSession(constraintOrBookmark?: D1SessionBookmark | D1SessionConstraint): D1DatabaseSession;\n    /**\n     * @deprecated dump() will be removed soon, only applies to deprecated alpha v1 databases.\n     */\n    dump(): Promise<ArrayBuffer>;\n}\ndeclare abstract class D1DatabaseSession {\n    prepare(query: string): D1PreparedStatement;\n    batch<T = unknown>(statements: D1PreparedStatement[]): Promise<D1Result<T>[]>;\n    /**\n     * @returns The latest session bookmark across all executed queries on the session.\n     *          If no query has been executed yet, `null` is returned.\n     */\n    getBookmark(): D1SessionBookmark | null;\n}\ndeclare abstract class D1PreparedStatement {\n    bind(...values: unknown[]): D1PreparedStatement;\n    first<T = unknown>(colName: string): Promise<T | null>;\n    first<T = Record<string, unknown>>(): Promise<T | null>;\n    run<T = Record<string, unknown>>(): Promise<D1Result<T>>;\n    all<T = Record<string, unknown>>(): Promise<D1Result<T>>;\n    raw<T = unknown[]>(options: {\n        columnNames: true;\n    }): Promise<[\n        string[],\n        ...T[]\n    ]>;\n    raw<T = unknown[]>(options?: {\n        columnNames?: false;\n    }): Promise<T[]>;\n}\n// `Disposable` was added to TypeScript's standard lib types in version 5.2.\n// To support older TypeScript versions, define an empty `Disposable` interface.\n// Users won't be able to use `using`/`Symbol.dispose` without upgrading to 5.2,\n// but this will ensure type checking on older versions still passes.\n// TypeScript's interface merging will ensure our empty interface is effectively\n// ignored when `Disposable` is included in the standard lib.\ninterface Disposable {\n}\n/**\n * An email message that can be sent from a Worker.\n */\ninterface EmailMessage {\n    /**\n     * Envelope From attribute of the email message.\n     */\n    readonly from: string;\n    /**\n     * Envelope To attribute of the email message.\n     */\n    readonly to: string;\n}\n/**\n * An email message that is sent to a consumer Worker and can be rejected/forwarded.\n */\ninterface ForwardableEmailMessage extends EmailMessage {\n    /**\n     * Stream of the email message content.\n     */\n    readonly raw: ReadableStream<Uint8Array>;\n    /**\n     * An [Headers object](https://developer.mozilla.org/en-US/docs/Web/API/Headers).\n     */\n    readonly headers: Headers;\n    /**\n     * Size of the email message content.\n     */\n    readonly rawSize: number;\n    /**\n     * Reject this email message by returning a permanent SMTP error back to the connecting client including the given reason.\n     * @param reason The reject reason.\n     * @returns void\n     */\n    setReject(reason: string): void;\n    /**\n     * Forward this email message to a verified destination address of the account.\n     * @param rcptTo Verified destination address.\n     * @param headers A [Headers object](https://developer.mozilla.org/en-US/docs/Web/API/Headers).\n     * @returns A promise that resolves when the email message is forwarded.\n     */\n    forward(rcptTo: string, headers?: Headers): Promise<void>;\n    /**\n     * Reply to the sender of this email message with a new EmailMessage object.\n     * @param message The reply message.\n     * @returns A promise that resolves when the email message is replied.\n     */\n    reply(message: EmailMessage): Promise<void>;\n}\n/**\n * A binding that allows a Worker to send email messages.\n */\ninterface SendEmail {\n    send(message: EmailMessage): Promise<void>;\n}\ndeclare abstract class EmailEvent extends ExtendableEvent {\n    readonly message: ForwardableEmailMessage;\n}\ndeclare type EmailExportedHandler<Env = unknown> = (message: ForwardableEmailMessage, env: Env, ctx: ExecutionContext) => void | Promise<void>;\ndeclare module \"cloudflare:email\" {\n    let _EmailMessage: {\n        prototype: EmailMessage;\n        new (from: string, to: string, raw: ReadableStream | string): EmailMessage;\n    };\n    export { _EmailMessage as EmailMessage };\n}\ninterface Hyperdrive {\n    /**\n     * Connect directly to Hyperdrive as if it's your database, returning a TCP socket.\n     *\n     * Calling this method returns an idential socket to if you call\n     * `connect(\"host:port\")` using the `host` and `port` fields from this object.\n     * Pick whichever approach works better with your preferred DB client library.\n     *\n     * Note that this socket is not yet authenticated -- it's expected that your\n     * code (or preferably, the client library of your choice) will authenticate\n     * using the information in this class's readonly fields.\n     */\n    connect(): Socket;\n    /**\n     * A valid DB connection string that can be passed straight into the typical\n     * client library/driver/ORM. This will typically be the easiest way to use\n     * Hyperdrive.\n     */\n    readonly connectionString: string;\n    /*\n     * A randomly generated hostname that is only valid within the context of the\n     * currently running Worker which, when passed into `connect()` function from\n     * the \"cloudflare:sockets\" module, will connect to the Hyperdrive instance\n     * for your database.\n     */\n    readonly host: string;\n    /*\n     * The port that must be paired the the host field when connecting.\n     */\n    readonly port: number;\n    /*\n     * The username to use when authenticating to your database via Hyperdrive.\n     * Unlike the host and password, this will be the same every time\n     */\n    readonly user: string;\n    /*\n     * The randomly generated password to use when authenticating to your\n     * database via Hyperdrive. Like the host field, this password is only valid\n     * within the context of the currently running Worker instance from which\n     * it's read.\n     */\n    readonly password: string;\n    /*\n     * The name of the database to connect to.\n     */\n    readonly database: string;\n}\n// Copyright (c) 2024 Cloudflare, Inc.\n// Licensed under the Apache 2.0 license found in the LICENSE file or at:\n//     https://opensource.org/licenses/Apache-2.0\ntype ImageInfoResponse = {\n    format: 'image/svg+xml';\n} | {\n    format: string;\n    fileSize: number;\n    width: number;\n    height: number;\n};\ntype ImageTransform = {\n    width?: number;\n    height?: number;\n    background?: string;\n    blur?: number;\n    border?: {\n        color?: string;\n        width?: number;\n    } | {\n        top?: number;\n        bottom?: number;\n        left?: number;\n        right?: number;\n    };\n    brightness?: number;\n    contrast?: number;\n    fit?: 'scale-down' | 'contain' | 'pad' | 'squeeze' | 'cover' | 'crop';\n    flip?: 'h' | 'v' | 'hv';\n    gamma?: number;\n    gravity?: 'left' | 'right' | 'top' | 'bottom' | 'center' | 'auto' | 'entropy' | {\n        x?: number;\n        y?: number;\n        mode: 'remainder' | 'box-center';\n    };\n    rotate?: 0 | 90 | 180 | 270;\n    saturation?: number;\n    sharpen?: number;\n    trim?: \"border\" | {\n        top?: number;\n        bottom?: number;\n        left?: number;\n        right?: number;\n        width?: number;\n        height?: number;\n        border?: boolean | {\n            color?: string;\n            tolerance?: number;\n            keep?: number;\n        };\n    };\n};\ntype ImageDrawOptions = {\n    opacity?: number;\n    repeat?: boolean | string;\n    top?: number;\n    left?: number;\n    bottom?: number;\n    right?: number;\n};\ntype ImageOutputOptions = {\n    format: 'image/jpeg' | 'image/png' | 'image/gif' | 'image/webp' | 'image/avif' | 'rgb' | 'rgba';\n    quality?: number;\n    background?: string;\n};\ninterface ImagesBinding {\n    /**\n     * Get image metadata (type, width and height)\n     * @throws {@link ImagesError} with code 9412 if input is not an image\n     * @param stream The image bytes\n     */\n    info(stream: ReadableStream<Uint8Array>): Promise<ImageInfoResponse>;\n    /**\n     * Begin applying a series of transformations to an image\n     * @param stream The image bytes\n     * @returns A transform handle\n     */\n    input(stream: ReadableStream<Uint8Array>): ImageTransformer;\n}\ninterface ImageTransformer {\n    /**\n     * Apply transform next, returning a transform handle.\n     * You can then apply more transformations, draw, or retrieve the output.\n     * @param transform\n     */\n    transform(transform: ImageTransform): ImageTransformer;\n    /**\n     * Draw an image on this transformer, returning a transform handle.\n     * You can then apply more transformations, draw, or retrieve the output.\n     * @param image The image (or transformer that will give the image) to draw\n     * @param options The options configuring how to draw the image\n     */\n    draw(image: ReadableStream<Uint8Array> | ImageTransformer, options?: ImageDrawOptions): ImageTransformer;\n    /**\n     * Retrieve the image that results from applying the transforms to the\n     * provided input\n     * @param options Options that apply to the output e.g. output format\n     */\n    output(options: ImageOutputOptions): Promise<ImageTransformationResult>;\n}\ninterface ImageTransformationResult {\n    /**\n     * The image as a response, ready to store in cache or return to users\n     */\n    response(): Response;\n    /**\n     * The content type of the returned image\n     */\n    contentType(): string;\n    /**\n     * The bytes of the response\n     */\n    image(): ReadableStream<Uint8Array>;\n}\ninterface ImagesError extends Error {\n    readonly code: number;\n    readonly message: string;\n    readonly stack?: string;\n}\ntype Params<P extends string = any> = Record<P, string | string[]>;\ntype EventContext<Env, P extends string, Data> = {\n    request: Request<unknown, IncomingRequestCfProperties<unknown>>;\n    functionPath: string;\n    waitUntil: (promise: Promise<any>) => void;\n    passThroughOnException: () => void;\n    next: (input?: Request | string, init?: RequestInit) => Promise<Response>;\n    env: Env & {\n        ASSETS: {\n            fetch: typeof fetch;\n        };\n    };\n    params: Params<P>;\n    data: Data;\n};\ntype PagesFunction<Env = unknown, Params extends string = any, Data extends Record<string, unknown> = Record<string, unknown>> = (context: EventContext<Env, Params, Data>) => Response | Promise<Response>;\ntype EventPluginContext<Env, P extends string, Data, PluginArgs> = {\n    request: Request<unknown, IncomingRequestCfProperties<unknown>>;\n    functionPath: string;\n    waitUntil: (promise: Promise<any>) => void;\n    passThroughOnException: () => void;\n    next: (input?: Request | string, init?: RequestInit) => Promise<Response>;\n    env: Env & {\n        ASSETS: {\n            fetch: typeof fetch;\n        };\n    };\n    params: Params<P>;\n    data: Data;\n    pluginArgs: PluginArgs;\n};\ntype PagesPluginFunction<Env = unknown, Params extends string = any, Data extends Record<string, unknown> = Record<string, unknown>, PluginArgs = unknown> = (context: EventPluginContext<Env, Params, Data, PluginArgs>) => Response | Promise<Response>;\ndeclare module \"assets:*\" {\n    export const onRequest: PagesFunction;\n}\n// Copyright (c) 2022-2023 Cloudflare, Inc.\n// Licensed under the Apache 2.0 license found in the LICENSE file or at:\n//     https://opensource.org/licenses/Apache-2.0\ndeclare module \"cloudflare:pipelines\" {\n    export abstract class PipelineTransformationEntrypoint<Env = unknown, I extends PipelineRecord = PipelineRecord, O extends PipelineRecord = PipelineRecord> {\n        protected env: Env;\n        protected ctx: ExecutionContext;\n        constructor(ctx: ExecutionContext, env: Env);\n        /**\n         * run recieves an array of PipelineRecord which can be\n         * transformed and returned to the pipeline\n         * @param records Incoming records from the pipeline to be transformed\n         * @param metadata Information about the specific pipeline calling the transformation entrypoint\n         * @returns A promise containing the transformed PipelineRecord array\n         */\n        public run(records: I[], metadata: PipelineBatchMetadata): Promise<O[]>;\n    }\n    export type PipelineRecord = Record<string, unknown>;\n    export type PipelineBatchMetadata = {\n        pipelineId: string;\n        pipelineName: string;\n    };\n    export interface Pipeline<T extends PipelineRecord = PipelineRecord> {\n        /**\n         * The Pipeline interface represents the type of a binding to a Pipeline\n         *\n         * @param records The records to send to the pipeline\n         */\n        send(records: T[]): Promise<void>;\n    }\n}\n// PubSubMessage represents an incoming PubSub message.\n// The message includes metadata about the broker, the client, and the payload\n// itself.\n// https://developers.cloudflare.com/pub-sub/\ninterface PubSubMessage {\n    // Message ID\n    readonly mid: number;\n    // MQTT broker FQDN in the form mqtts://BROKER.NAMESPACE.cloudflarepubsub.com:PORT\n    readonly broker: string;\n    // The MQTT topic the message was sent on.\n    readonly topic: string;\n    // The client ID of the client that published this message.\n    readonly clientId: string;\n    // The unique identifier (JWT ID) used by the client to authenticate, if token\n    // auth was used.\n    readonly jti?: string;\n    // A Unix timestamp (seconds from Jan 1, 1970), set when the Pub/Sub Broker\n    // received the message from the client.\n    readonly receivedAt: number;\n    // An (optional) string with the MIME type of the payload, if set by the\n    // client.\n    readonly contentType: string;\n    // Set to 1 when the payload is a UTF-8 string\n    // https://docs.oasis-open.org/mqtt/mqtt/v5.0/os/mqtt-v5.0-os.html#_Toc3901063\n    readonly payloadFormatIndicator: number;\n    // Pub/Sub (MQTT) payloads can be UTF-8 strings, or byte arrays.\n    // You can use payloadFormatIndicator to inspect this before decoding.\n    payload: string | Uint8Array;\n}\n// JsonWebKey extended by kid parameter\ninterface JsonWebKeyWithKid extends JsonWebKey {\n    // Key Identifier of the JWK\n    readonly kid: string;\n}\ninterface RateLimitOptions {\n    key: string;\n}\ninterface RateLimitOutcome {\n    success: boolean;\n}\ninterface RateLimit {\n    /**\n     * Rate limit a request based on the provided options.\n     * @see https://developers.cloudflare.com/workers/runtime-apis/bindings/rate-limit/\n     * @returns A promise that resolves with the outcome of the rate limit.\n     */\n    limit(options: RateLimitOptions): Promise<RateLimitOutcome>;\n}\n// Namespace for RPC utility types. Unfortunately, we can't use a `module` here as these types need\n// to referenced by `Fetcher`. This is included in the \"importable\" version of the types which\n// strips all `module` blocks.\ndeclare namespace Rpc {\n    // Branded types for identifying `WorkerEntrypoint`/`DurableObject`/`Target`s.\n    // TypeScript uses *structural* typing meaning anything with the same shape as type `T` is a `T`.\n    // For the classes exported by `cloudflare:workers` we want *nominal* typing (i.e. we only want to\n    // accept `WorkerEntrypoint` from `cloudflare:workers`, not any other class with the same shape)\n    export const __RPC_STUB_BRAND: '__RPC_STUB_BRAND';\n    export const __RPC_TARGET_BRAND: '__RPC_TARGET_BRAND';\n    export const __WORKER_ENTRYPOINT_BRAND: '__WORKER_ENTRYPOINT_BRAND';\n    export const __DURABLE_OBJECT_BRAND: '__DURABLE_OBJECT_BRAND';\n    export const __WORKFLOW_ENTRYPOINT_BRAND: '__WORKFLOW_ENTRYPOINT_BRAND';\n    export interface RpcTargetBranded {\n        [__RPC_TARGET_BRAND]: never;\n    }\n    export interface WorkerEntrypointBranded {\n        [__WORKER_ENTRYPOINT_BRAND]: never;\n    }\n    export interface DurableObjectBranded {\n        [__DURABLE_OBJECT_BRAND]: never;\n    }\n    export interface WorkflowEntrypointBranded {\n        [__WORKFLOW_ENTRYPOINT_BRAND]: never;\n    }\n    export type EntrypointBranded = WorkerEntrypointBranded | DurableObjectBranded | WorkflowEntrypointBranded;\n    // Types that can be used through `Stub`s\n    export type Stubable = RpcTargetBranded | ((...args: any[]) => any);\n    // Types that can be passed over RPC\n    // The reason for using a generic type here is to build a serializable subset of structured\n    //   cloneable composite types. This allows types defined with the \"interface\" keyword to pass the\n    //   serializable check as well. Otherwise, only types defined with the \"type\" keyword would pass.\n    type Serializable<T> = \n    // Structured cloneables\n    BaseType\n    // Structured cloneable composites\n     | Map<T extends Map<infer U, unknown> ? Serializable<U> : never, T extends Map<unknown, infer U> ? Serializable<U> : never> | Set<T extends Set<infer U> ? Serializable<U> : never> | ReadonlyArray<T extends ReadonlyArray<infer U> ? Serializable<U> : never> | {\n        [K in keyof T]: K extends number | string ? Serializable<T[K]> : never;\n    }\n    // Special types\n     | Stub<Stubable>\n    // Serialized as stubs, see `Stubify`\n     | Stubable;\n    // Base type for all RPC stubs, including common memory management methods.\n    // `T` is used as a marker type for unwrapping `Stub`s later.\n    interface StubBase<T extends Stubable> extends Disposable {\n        [__RPC_STUB_BRAND]: T;\n        dup(): this;\n    }\n    export type Stub<T extends Stubable> = Provider<T> & StubBase<T>;\n    // This represents all the types that can be sent as-is over an RPC boundary\n    type BaseType = void | undefined | null | boolean | number | bigint | string | TypedArray | ArrayBuffer | DataView | Date | Error | RegExp | ReadableStream<Uint8Array> | WritableStream<Uint8Array> | Request | Response | Headers;\n    // Recursively rewrite all `Stubable` types with `Stub`s\n    // prettier-ignore\n    type Stubify<T> = T extends Stubable ? Stub<T> : T extends Map<infer K, infer V> ? Map<Stubify<K>, Stubify<V>> : T extends Set<infer V> ? Set<Stubify<V>> : T extends Array<infer V> ? Array<Stubify<V>> : T extends ReadonlyArray<infer V> ? ReadonlyArray<Stubify<V>> : T extends BaseType ? T : T extends {\n        [key: string | number]: any;\n    } ? {\n        [K in keyof T]: Stubify<T[K]>;\n    } : T;\n    // Recursively rewrite all `Stub<T>`s with the corresponding `T`s.\n    // Note we use `StubBase` instead of `Stub` here to avoid circular dependencies:\n    // `Stub` depends on `Provider`, which depends on `Unstubify`, which would depend on `Stub`.\n    // prettier-ignore\n    type Unstubify<T> = T extends StubBase<infer V> ? V : T extends Map<infer K, infer V> ? Map<Unstubify<K>, Unstubify<V>> : T extends Set<infer V> ? Set<Unstubify<V>> : T extends Array<infer V> ? Array<Unstubify<V>> : T extends ReadonlyArray<infer V> ? ReadonlyArray<Unstubify<V>> : T extends BaseType ? T : T extends {\n        [key: string | number]: unknown;\n    } ? {\n        [K in keyof T]: Unstubify<T[K]>;\n    } : T;\n    type UnstubifyAll<A extends any[]> = {\n        [I in keyof A]: Unstubify<A[I]>;\n    };\n    // Utility type for adding `Provider`/`Disposable`s to `object` types only.\n    // Note `unknown & T` is equivalent to `T`.\n    type MaybeProvider<T> = T extends object ? Provider<T> : unknown;\n    type MaybeDisposable<T> = T extends object ? Disposable : unknown;\n    // Type for method return or property on an RPC interface.\n    // - Stubable types are replaced by stubs.\n    // - Serializable types are passed by value, with stubable types replaced by stubs\n    //   and a top-level `Disposer`.\n    // Everything else can't be passed over PRC.\n    // Technically, we use custom thenables here, but they quack like `Promise`s.\n    // Intersecting with `(Maybe)Provider` allows pipelining.\n    // prettier-ignore\n    type Result<R> = R extends Stubable ? Promise<Stub<R>> & Provider<R> : R extends Serializable<R> ? Promise<Stubify<R> & MaybeDisposable<R>> & MaybeProvider<R> : never;\n    // Type for method or property on an RPC interface.\n    // For methods, unwrap `Stub`s in parameters, and rewrite returns to be `Result`s.\n    // Unwrapping `Stub`s allows calling with `Stubable` arguments.\n    // For properties, rewrite types to be `Result`s.\n    // In each case, unwrap `Promise`s.\n    type MethodOrProperty<V> = V extends (...args: infer P) => infer R ? (...args: UnstubifyAll<P>) => Result<Awaited<R>> : Result<Awaited<V>>;\n    // Type for the callable part of an `Provider` if `T` is callable.\n    // This is intersected with methods/properties.\n    type MaybeCallableProvider<T> = T extends (...args: any[]) => any ? MethodOrProperty<T> : unknown;\n    // Base type for all other types providing RPC-like interfaces.\n    // Rewrites all methods/properties to be `MethodOrProperty`s, while preserving callable types.\n    // `Reserved` names (e.g. stub method names like `dup()`) and symbols can't be accessed over RPC.\n    export type Provider<T extends object, Reserved extends string = never> = MaybeCallableProvider<T> & {\n        [K in Exclude<keyof T, Reserved | symbol | keyof StubBase<never>>]: MethodOrProperty<T[K]>;\n    };\n}\ndeclare namespace Cloudflare {\n    interface Env {\n    }\n}\ndeclare module 'cloudflare:workers' {\n    export type RpcStub<T extends Rpc.Stubable> = Rpc.Stub<T>;\n    export const RpcStub: {\n        new <T extends Rpc.Stubable>(value: T): Rpc.Stub<T>;\n    };\n    export abstract class RpcTarget implements Rpc.RpcTargetBranded {\n        [Rpc.__RPC_TARGET_BRAND]: never;\n    }\n    // `protected` fields don't appear in `keyof`s, so can't be accessed over RPC\n    export abstract class WorkerEntrypoint<Env = unknown> implements Rpc.WorkerEntrypointBranded {\n        [Rpc.__WORKER_ENTRYPOINT_BRAND]: never;\n        protected ctx: ExecutionContext;\n        protected env: Env;\n        constructor(ctx: ExecutionContext, env: Env);\n        fetch?(request: Request): Response | Promise<Response>;\n        tail?(events: TraceItem[]): void | Promise<void>;\n        trace?(traces: TraceItem[]): void | Promise<void>;\n        scheduled?(controller: ScheduledController): void | Promise<void>;\n        queue?(batch: MessageBatch<unknown>): void | Promise<void>;\n        test?(controller: TestController): void | Promise<void>;\n    }\n    export abstract class DurableObject<Env = unknown> implements Rpc.DurableObjectBranded {\n        [Rpc.__DURABLE_OBJECT_BRAND]: never;\n        protected ctx: DurableObjectState;\n        protected env: Env;\n        constructor(ctx: DurableObjectState, env: Env);\n        fetch?(request: Request): Response | Promise<Response>;\n        alarm?(alarmInfo?: AlarmInvocationInfo): void | Promise<void>;\n        webSocketMessage?(ws: WebSocket, message: string | ArrayBuffer): void | Promise<void>;\n        webSocketClose?(ws: WebSocket, code: number, reason: string, wasClean: boolean): void | Promise<void>;\n        webSocketError?(ws: WebSocket, error: unknown): void | Promise<void>;\n    }\n    export type WorkflowDurationLabel = 'second' | 'minute' | 'hour' | 'day' | 'week' | 'month' | 'year';\n    export type WorkflowSleepDuration = `${number} ${WorkflowDurationLabel}${'s' | ''}` | number;\n    export type WorkflowDelayDuration = WorkflowSleepDuration;\n    export type WorkflowTimeoutDuration = WorkflowSleepDuration;\n    export type WorkflowBackoff = 'constant' | 'linear' | 'exponential';\n    export type WorkflowStepConfig = {\n        retries?: {\n            limit: number;\n            delay: WorkflowDelayDuration | number;\n            backoff?: WorkflowBackoff;\n        };\n        timeout?: WorkflowTimeoutDuration | number;\n    };\n    export type WorkflowEvent<T> = {\n        payload: Readonly<T>;\n        timestamp: Date;\n        instanceId: string;\n    };\n    export type WorkflowStepEvent<T> = {\n        payload: Readonly<T>;\n        timestamp: Date;\n        type: string;\n    };\n    export abstract class WorkflowStep {\n        do<T extends Rpc.Serializable<T>>(name: string, callback: () => Promise<T>): Promise<T>;\n        do<T extends Rpc.Serializable<T>>(name: string, config: WorkflowStepConfig, callback: () => Promise<T>): Promise<T>;\n        sleep: (name: string, duration: WorkflowSleepDuration) => Promise<void>;\n        sleepUntil: (name: string, timestamp: Date | number) => Promise<void>;\n        waitForEvent<T extends Rpc.Serializable<T>>(name: string, options: {\n            type: string;\n            timeout?: WorkflowTimeoutDuration | number;\n        }): Promise<WorkflowStepEvent<T>>;\n    }\n    export abstract class WorkflowEntrypoint<Env = unknown, T extends Rpc.Serializable<T> | unknown = unknown> implements Rpc.WorkflowEntrypointBranded {\n        [Rpc.__WORKFLOW_ENTRYPOINT_BRAND]: never;\n        protected ctx: ExecutionContext;\n        protected env: Env;\n        constructor(ctx: ExecutionContext, env: Env);\n        run(event: Readonly<WorkflowEvent<T>>, step: WorkflowStep): Promise<unknown>;\n    }\n    export const env: Cloudflare.Env;\n}\ninterface SecretsStoreSecret {\n    /**\n     * Get a secret from the Secrets Store, returning a string of the secret value\n     * if it exists, or throws an error if it does not exist\n     */\n    get(): Promise<string>;\n}\ndeclare module \"cloudflare:sockets\" {\n    function _connect(address: string | SocketAddress, options?: SocketOptions): Socket;\n    export { _connect as connect };\n}\ndeclare namespace TailStream {\n    interface Header {\n        readonly name: string;\n        readonly value: string;\n    }\n    interface FetchEventInfo {\n        readonly type: \"fetch\";\n        readonly method: string;\n        readonly url: string;\n        readonly cfJson: string;\n        readonly headers: Header[];\n    }\n    interface JsRpcEventInfo {\n        readonly type: \"jsrpc\";\n        readonly methodName: string;\n    }\n    interface ScheduledEventInfo {\n        readonly type: \"scheduled\";\n        readonly scheduledTime: Date;\n        readonly cron: string;\n    }\n    interface AlarmEventInfo {\n        readonly type: \"alarm\";\n        readonly scheduledTime: Date;\n    }\n    interface QueueEventInfo {\n        readonly type: \"queue\";\n        readonly queueName: string;\n        readonly batchSize: number;\n    }\n    interface EmailEventInfo {\n        readonly type: \"email\";\n        readonly mailFrom: string;\n        readonly rcptTo: string;\n        readonly rawSize: number;\n    }\n    interface TraceEventInfo {\n        readonly type: \"trace\";\n        readonly traces: (string | null)[];\n    }\n    interface HibernatableWebSocketEventInfoMessage {\n        readonly type: \"message\";\n    }\n    interface HibernatableWebSocketEventInfoError {\n        readonly type: \"error\";\n    }\n    interface HibernatableWebSocketEventInfoClose {\n        readonly type: \"close\";\n        readonly code: number;\n        readonly wasClean: boolean;\n    }\n    interface HibernatableWebSocketEventInfo {\n        readonly type: \"hibernatableWebSocket\";\n        readonly info: HibernatableWebSocketEventInfoClose | HibernatableWebSocketEventInfoError | HibernatableWebSocketEventInfoMessage;\n    }\n    interface Resume {\n        readonly type: \"resume\";\n        readonly attachment?: any;\n    }\n    interface CustomEventInfo {\n        readonly type: \"custom\";\n    }\n    interface FetchResponseInfo {\n        readonly type: \"fetch\";\n        readonly statusCode: number;\n    }\n    type EventOutcome = \"ok\" | \"canceled\" | \"exception\" | \"unknown\" | \"killSwitch\" | \"daemonDown\" | \"exceededCpu\" | \"exceededMemory\" | \"loadShed\" | \"responseStreamDisconnected\" | \"scriptNotFound\";\n    interface ScriptVersion {\n        readonly id: string;\n        readonly tag?: string;\n        readonly message?: string;\n    }\n    interface Trigger {\n        readonly traceId: string;\n        readonly invocationId: string;\n        readonly spanId: string;\n    }\n    interface Onset {\n        readonly type: \"onset\";\n        readonly dispatchNamespace?: string;\n        readonly entrypoint?: string;\n        readonly scriptName?: string;\n        readonly scriptTags?: string[];\n        readonly scriptVersion?: ScriptVersion;\n        readonly trigger?: Trigger;\n        readonly info: FetchEventInfo | JsRpcEventInfo | ScheduledEventInfo | AlarmEventInfo | QueueEventInfo | EmailEventInfo | TraceEventInfo | HibernatableWebSocketEventInfo | Resume | CustomEventInfo;\n    }\n    interface Outcome {\n        readonly type: \"outcome\";\n        readonly outcome: EventOutcome;\n        readonly cpuTime: number;\n        readonly wallTime: number;\n    }\n    interface Hibernate {\n        readonly type: \"hibernate\";\n    }\n    interface SpanOpen {\n        readonly type: \"spanOpen\";\n        readonly op?: string;\n        readonly info?: FetchEventInfo | JsRpcEventInfo | Attribute[];\n    }\n    interface SpanClose {\n        readonly type: \"spanClose\";\n        readonly outcome: EventOutcome;\n    }\n    interface DiagnosticChannelEvent {\n        readonly type: \"diagnosticChannel\";\n        readonly channel: string;\n        readonly message: any;\n    }\n    interface Exception {\n        readonly type: \"exception\";\n        readonly name: string;\n        readonly message: string;\n        readonly stack?: string;\n    }\n    interface Log {\n        readonly type: \"log\";\n        readonly level: \"debug\" | \"error\" | \"info\" | \"log\" | \"warn\";\n        readonly message: string;\n    }\n    interface Return {\n        readonly type: \"return\";\n        readonly info?: FetchResponseInfo | Attribute[];\n    }\n    interface Link {\n        readonly type: \"link\";\n        readonly label?: string;\n        readonly traceId: string;\n        readonly invocationId: string;\n        readonly spanId: string;\n    }\n    interface Attribute {\n        readonly type: \"attribute\";\n        readonly name: string;\n        readonly value: string | string[] | boolean | boolean[] | number | number[];\n    }\n    type Mark = DiagnosticChannelEvent | Exception | Log | Return | Link | Attribute[];\n    interface TailEvent {\n        readonly traceId: string;\n        readonly invocationId: string;\n        readonly spanId: string;\n        readonly timestamp: Date;\n        readonly sequence: number;\n        readonly event: Onset | Outcome | Hibernate | SpanOpen | SpanClose | Mark;\n    }\n    type TailEventHandler = (event: TailEvent) => void | Promise<void>;\n    type TailEventHandlerName = \"onset\" | \"outcome\" | \"hibernate\" | \"spanOpen\" | \"spanClose\" | \"diagnosticChannel\" | \"exception\" | \"log\" | \"return\" | \"link\" | \"attribute\";\n    type TailEventHandlerObject = Record<TailEventHandlerName, TailEventHandler>;\n    type TailEventHandlerType = TailEventHandler | TailEventHandlerObject;\n}\n// Copyright (c) 2022-2023 Cloudflare, Inc.\n// Licensed under the Apache 2.0 license found in the LICENSE file or at:\n//     https://opensource.org/licenses/Apache-2.0\n/**\n * Data types supported for holding vector metadata.\n */\ntype VectorizeVectorMetadataValue = string | number | boolean | string[];\n/**\n * Additional information to associate with a vector.\n */\ntype VectorizeVectorMetadata = VectorizeVectorMetadataValue | Record<string, VectorizeVectorMetadataValue>;\ntype VectorFloatArray = Float32Array | Float64Array;\ninterface VectorizeError {\n    code?: number;\n    error: string;\n}\n/**\n * Comparison logic/operation to use for metadata filtering.\n *\n * This list is expected to grow as support for more operations are released.\n */\ntype VectorizeVectorMetadataFilterOp = \"$eq\" | \"$ne\";\n/**\n * Filter criteria for vector metadata used to limit the retrieved query result set.\n */\ntype VectorizeVectorMetadataFilter = {\n    [field: string]: Exclude<VectorizeVectorMetadataValue, string[]> | null | {\n        [Op in VectorizeVectorMetadataFilterOp]?: Exclude<VectorizeVectorMetadataValue, string[]> | null;\n    };\n};\n/**\n * Supported distance metrics for an index.\n * Distance metrics determine how other \"similar\" vectors are determined.\n */\ntype VectorizeDistanceMetric = \"euclidean\" | \"cosine\" | \"dot-product\";\n/**\n * Metadata return levels for a Vectorize query.\n *\n * Default to \"none\".\n *\n * @property all      Full metadata for the vector return set, including all fields (including those un-indexed) without truncation. This is a more expensive retrieval, as it requires additional fetching & reading of un-indexed data.\n * @property indexed  Return all metadata fields configured for indexing in the vector return set. This level of retrieval is \"free\" in that no additional overhead is incurred returning this data. However, note that indexed metadata is subject to truncation (especially for larger strings).\n * @property none     No indexed metadata will be returned.\n */\ntype VectorizeMetadataRetrievalLevel = \"all\" | \"indexed\" | \"none\";\ninterface VectorizeQueryOptions {\n    topK?: number;\n    namespace?: string;\n    returnValues?: boolean;\n    returnMetadata?: boolean | VectorizeMetadataRetrievalLevel;\n    filter?: VectorizeVectorMetadataFilter;\n}\n/**\n * Information about the configuration of an index.\n */\ntype VectorizeIndexConfig = {\n    dimensions: number;\n    metric: VectorizeDistanceMetric;\n} | {\n    preset: string; // keep this generic, as we'll be adding more presets in the future and this is only in a read capacity\n};\n/**\n * Metadata about an existing index.\n *\n * This type is exclusively for the Vectorize **beta** and will be deprecated once Vectorize RC is released.\n * See {@link VectorizeIndexInfo} for its post-beta equivalent.\n */\ninterface VectorizeIndexDetails {\n    /** The unique ID of the index */\n    readonly id: string;\n    /** The name of the index. */\n    name: string;\n    /** (optional) A human readable description for the index. */\n    description?: string;\n    /** The index configuration, including the dimension size and distance metric. */\n    config: VectorizeIndexConfig;\n    /** The number of records containing vectors within the index. */\n    vectorsCount: number;\n}\n/**\n * Metadata about an existing index.\n */\ninterface VectorizeIndexInfo {\n    /** The number of records containing vectors within the index. */\n    vectorCount: number;\n    /** Number of dimensions the index has been configured for. */\n    dimensions: number;\n    /** ISO 8601 datetime of the last processed mutation on in the index. All changes before this mutation will be reflected in the index state. */\n    processedUpToDatetime: number;\n    /** UUIDv4 of the last mutation processed by the index. All changes before this mutation will be reflected in the index state. */\n    processedUpToMutation: number;\n}\n/**\n * Represents a single vector value set along with its associated metadata.\n */\ninterface VectorizeVector {\n    /** The ID for the vector. This can be user-defined, and must be unique. It should uniquely identify the object, and is best set based on the ID of what the vector represents. */\n    id: string;\n    /** The vector values */\n    values: VectorFloatArray | number[];\n    /** The namespace this vector belongs to. */\n    namespace?: string;\n    /** Metadata associated with the vector. Includes the values of other fields and potentially additional details. */\n    metadata?: Record<string, VectorizeVectorMetadata>;\n}\n/**\n * Represents a matched vector for a query along with its score and (if specified) the matching vector information.\n */\ntype VectorizeMatch = Pick<Partial<VectorizeVector>, \"values\"> & Omit<VectorizeVector, \"values\"> & {\n    /** The score or rank for similarity, when returned as a result */\n    score: number;\n};\n/**\n * A set of matching {@link VectorizeMatch} for a particular query.\n */\ninterface VectorizeMatches {\n    matches: VectorizeMatch[];\n    count: number;\n}\n/**\n * Results of an operation that performed a mutation on a set of vectors.\n * Here, `ids` is a list of vectors that were successfully processed.\n *\n * This type is exclusively for the Vectorize **beta** and will be deprecated once Vectorize RC is released.\n * See {@link VectorizeAsyncMutation} for its post-beta equivalent.\n */\ninterface VectorizeVectorMutation {\n    /* List of ids of vectors that were successfully processed. */\n    ids: string[];\n    /* Total count of the number of processed vectors. */\n    count: number;\n}\n/**\n * Result type indicating a mutation on the Vectorize Index.\n * Actual mutations are processed async where the `mutationId` is the unique identifier for the operation.\n */\ninterface VectorizeAsyncMutation {\n    /** The unique identifier for the async mutation operation containing the changeset. */\n    mutationId: string;\n}\n/**\n * A Vectorize Vector Search Index for querying vectors/embeddings.\n *\n * This type is exclusively for the Vectorize **beta** and will be deprecated once Vectorize RC is released.\n * See {@link Vectorize} for its new implementation.\n */\ndeclare abstract class VectorizeIndex {\n    /**\n     * Get information about the currently bound index.\n     * @returns A promise that resolves with information about the current index.\n     */\n    public describe(): Promise<VectorizeIndexDetails>;\n    /**\n     * Use the provided vector to perform a similarity search across the index.\n     * @param vector Input vector that will be used to drive the similarity search.\n     * @param options Configuration options to massage the returned data.\n     * @returns A promise that resolves with matched and scored vectors.\n     */\n    public query(vector: VectorFloatArray | number[], options?: VectorizeQueryOptions): Promise<VectorizeMatches>;\n    /**\n     * Insert a list of vectors into the index dataset. If a provided id exists, an error will be thrown.\n     * @param vectors List of vectors that will be inserted.\n     * @returns A promise that resolves with the ids & count of records that were successfully processed.\n     */\n    public insert(vectors: VectorizeVector[]): Promise<VectorizeVectorMutation>;\n    /**\n     * Upsert a list of vectors into the index dataset. If a provided id exists, it will be replaced with the new values.\n     * @param vectors List of vectors that will be upserted.\n     * @returns A promise that resolves with the ids & count of records that were successfully processed.\n     */\n    public upsert(vectors: VectorizeVector[]): Promise<VectorizeVectorMutation>;\n    /**\n     * Delete a list of vectors with a matching id.\n     * @param ids List of vector ids that should be deleted.\n     * @returns A promise that resolves with the ids & count of records that were successfully processed (and thus deleted).\n     */\n    public deleteByIds(ids: string[]): Promise<VectorizeVectorMutation>;\n    /**\n     * Get a list of vectors with a matching id.\n     * @param ids List of vector ids that should be returned.\n     * @returns A promise that resolves with the raw unscored vectors matching the id set.\n     */\n    public getByIds(ids: string[]): Promise<VectorizeVector[]>;\n}\n/**\n * A Vectorize Vector Search Index for querying vectors/embeddings.\n *\n * Mutations in this version are async, returning a mutation id.\n */\ndeclare abstract class Vectorize {\n    /**\n     * Get information about the currently bound index.\n     * @returns A promise that resolves with information about the current index.\n     */\n    public describe(): Promise<VectorizeIndexInfo>;\n    /**\n     * Use the provided vector to perform a similarity search across the index.\n     * @param vector Input vector that will be used to drive the similarity search.\n     * @param options Configuration options to massage the returned data.\n     * @returns A promise that resolves with matched and scored vectors.\n     */\n    public query(vector: VectorFloatArray | number[], options?: VectorizeQueryOptions): Promise<VectorizeMatches>;\n    /**\n     * Use the provided vector-id to perform a similarity search across the index.\n     * @param vectorId Id for a vector in the index against which the index should be queried.\n     * @param options Configuration options to massage the returned data.\n     * @returns A promise that resolves with matched and scored vectors.\n     */\n    public queryById(vectorId: string, options?: VectorizeQueryOptions): Promise<VectorizeMatches>;\n    /**\n     * Insert a list of vectors into the index dataset. If a provided id exists, an error will be thrown.\n     * @param vectors List of vectors that will be inserted.\n     * @returns A promise that resolves with a unique identifier of a mutation containing the insert changeset.\n     */\n    public insert(vectors: VectorizeVector[]): Promise<VectorizeAsyncMutation>;\n    /**\n     * Upsert a list of vectors into the index dataset. If a provided id exists, it will be replaced with the new values.\n     * @param vectors List of vectors that will be upserted.\n     * @returns A promise that resolves with a unique identifier of a mutation containing the upsert changeset.\n     */\n    public upsert(vectors: VectorizeVector[]): Promise<VectorizeAsyncMutation>;\n    /**\n     * Delete a list of vectors with a matching id.\n     * @param ids List of vector ids that should be deleted.\n     * @returns A promise that resolves with a unique identifier of a mutation containing the delete changeset.\n     */\n    public deleteByIds(ids: string[]): Promise<VectorizeAsyncMutation>;\n    /**\n     * Get a list of vectors with a matching id.\n     * @param ids List of vector ids that should be returned.\n     * @returns A promise that resolves with the raw unscored vectors matching the id set.\n     */\n    public getByIds(ids: string[]): Promise<VectorizeVector[]>;\n}\n/**\n * The interface for \"version_metadata\" binding\n * providing metadata about the Worker Version using this binding.\n */\ntype WorkerVersionMetadata = {\n    /** The ID of the Worker Version using this binding */\n    id: string;\n    /** The tag of the Worker Version using this binding */\n    tag: string;\n    /** The timestamp of when the Worker Version was uploaded */\n    timestamp: string;\n};\ninterface DynamicDispatchLimits {\n    /**\n     * Limit CPU time in milliseconds.\n     */\n    cpuMs?: number;\n    /**\n     * Limit number of subrequests.\n     */\n    subRequests?: number;\n}\ninterface DynamicDispatchOptions {\n    /**\n     * Limit resources of invoked Worker script.\n     */\n    limits?: DynamicDispatchLimits;\n    /**\n     * Arguments for outbound Worker script, if configured.\n     */\n    outbound?: {\n        [key: string]: any;\n    };\n}\ninterface DispatchNamespace {\n    /**\n    * @param name Name of the Worker script.\n    * @param args Arguments to Worker script.\n    * @param options Options for Dynamic Dispatch invocation.\n    * @returns A Fetcher object that allows you to send requests to the Worker script.\n    * @throws If the Worker script does not exist in this dispatch namespace, an error will be thrown.\n    */\n    get(name: string, args?: {\n        [key: string]: any;\n    }, options?: DynamicDispatchOptions): Fetcher;\n}\ndeclare module 'cloudflare:workflows' {\n    /**\n     * NonRetryableError allows for a user to throw a fatal error\n     * that makes a Workflow instance fail immediately without triggering a retry\n     */\n    export class NonRetryableError extends Error {\n        public constructor(message: string, name?: string);\n    }\n}\ndeclare abstract class Workflow<PARAMS = unknown> {\n    /**\n     * Get a handle to an existing instance of the Workflow.\n     * @param id Id for the instance of this Workflow\n     * @returns A promise that resolves with a handle for the Instance\n     */\n    public get(id: string): Promise<WorkflowInstance>;\n    /**\n     * Create a new instance and return a handle to it. If a provided id exists, an error will be thrown.\n     * @param options Options when creating an instance including id and params\n     * @returns A promise that resolves with a handle for the Instance\n     */\n    public create(options?: WorkflowInstanceCreateOptions<PARAMS>): Promise<WorkflowInstance>;\n    /**\n     * Create a batch of instances and return handle for all of them. If a provided id exists, an error will be thrown.\n     * `createBatch` is limited at 100 instances at a time or when the RPC limit for the batch (1MiB) is reached.\n     * @param batch List of Options when creating an instance including name and params\n     * @returns A promise that resolves with a list of handles for the created instances.\n     */\n    public createBatch(batch: WorkflowInstanceCreateOptions<PARAMS>[]): Promise<WorkflowInstance[]>;\n}\ninterface WorkflowInstanceCreateOptions<PARAMS = unknown> {\n    /**\n     * An id for your Workflow instance. Must be unique within the Workflow.\n     */\n    id?: string;\n    /**\n     * The event payload the Workflow instance is triggered with\n     */\n    params?: PARAMS;\n}\ntype InstanceStatus = {\n    status: 'queued' // means that instance is waiting to be started (see concurrency limits)\n     | 'running' | 'paused' | 'errored' | 'terminated' // user terminated the instance while it was running\n     | 'complete' | 'waiting' // instance is hibernating and waiting for sleep or event to finish\n     | 'waitingForPause' // instance is finishing the current work to pause\n     | 'unknown';\n    error?: string;\n    output?: object;\n};\ninterface WorkflowError {\n    code?: number;\n    message: string;\n}\ndeclare abstract class WorkflowInstance {\n    public id: string;\n    /**\n     * Pause the instance.\n     */\n    public pause(): Promise<void>;\n    /**\n     * Resume the instance. If it is already running, an error will be thrown.\n     */\n    public resume(): Promise<void>;\n    /**\n     * Terminate the instance. If it is errored, terminated or complete, an error will be thrown.\n     */\n    public terminate(): Promise<void>;\n    /**\n     * Restart the instance.\n     */\n    public restart(): Promise<void>;\n    /**\n     * Returns the current status of the instance.\n     */\n    public status(): Promise<InstanceStatus>;\n    /**\n     * Send an event to this instance.\n     */\n    public sendEvent({ type, payload, }: {\n        type: string;\n        payload: unknown;\n    }): Promise<void>;\n}\n"
  },
  {
    "path": "wrangler.jsonc",
    "content": "/**\n * For more details on how to configure Wrangler, refer to:\n * https://developers.cloudflare.com/workers/wrangler/configuration/\n */\n{\n  \"$schema\": \"node_modules/wrangler/config-schema.json\",\n  \"name\": \"git-mcp\",\n  \"main\": \"src/index.ts\",\n  \"compatibility_flags\": [\"nodejs_compat\"],\n  \"compatibility_date\": \"2025-04-26\",\n  \"routes\": [\n    {\n      \"pattern\": \"gitmcp.io\",\n      \"custom_domain\": true,\n    },\n  ],\n  \"analytics_engine_datasets\": [\n    {\n      \"binding\": \"MY_METRICS\",\n      \"dataset\": \"my_metrics_dataset\",\n    },\n  ],\n  \"migrations\": [\n    {\n      \"new_sqlite_classes\": [\"MyMCP\"],\n      \"tag\": \"v1\",\n    },\n    {\n      \"new_classes\": [\"ViewCounterDO\"],\n      \"tag\": \"v2\",\n    },\n  ],\n  \"durable_objects\": {\n    \"bindings\": [\n      {\n        \"class_name\": \"MyMCP\",\n        \"name\": \"MCP_OBJECT\",\n      },\n      {\n        \"class_name\": \"ViewCounterDO\",\n        \"name\": \"VIEW_COUNTER\",\n      },\n    ],\n  },\n  \"vectorize\": [\n    {\n      \"binding\": \"VECTORIZE\",\n      \"index_name\": \"gitmcp-github-docs-idx\",\n    },\n  ],\n  \"kv_namespaces\": [\n    {\n      \"binding\": \"CACHE_KV\",\n      \"id\": \"c5dd8e05242a471b9d7bf12f0ddcee3a\",\n      \"preview_id\": \"bfc078682a3a4e33a8b6dfcca09af94f\",\n    },\n  ],\n  \"ai\": {\n    \"binding\": \"AI\",\n  },\n  \"r2_buckets\": [\n    {\n      \"binding\": \"DOCS_BUCKET\",\n      \"bucket_name\": \"docs-storage\",\n      \"preview_bucket_name\": \"llms-store-preview\",\n    },\n  ],\n  \"queues\": {\n    \"producers\": [\n      {\n        \"binding\": \"MY_QUEUE\",\n        \"queue\": \"my-queue\",\n      },\n    ],\n  },\n  \"observability\": {\n    \"enabled\": true,\n  },\n  \"assets\": { \"directory\": \"./static/\", \"binding\": \"ASSETS\" },\n}\n"
  }
]