{"id":15472445,"url":"https://github.com/jacobcoffee/litestar-fullstack-railway","last_synced_at":"2025-10-11T22:31:33.005Z","repository":{"id":211191601,"uuid":"714535199","full_name":"JacobCoffee/litestar-fullstack-railway","owner":"JacobCoffee","description":null,"archived":true,"fork":false,"pushed_at":"2023-12-13T19:46:41.000Z","size":170,"stargazers_count":0,"open_issues_count":1,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-01-22T20:50:50.682Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/JacobCoffee.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":null,"support":null,"governance":null}},"created_at":"2023-11-05T06:10:28.000Z","updated_at":"2023-12-13T23:38:44.000Z","dependencies_parsed_at":"2023-12-07T02:50:45.091Z","dependency_job_id":"432dd832-f064-4b61-b0a4-09f9fcf304e4","html_url":"https://github.com/JacobCoffee/litestar-fullstack-railway","commit_stats":null,"previous_names":["jacobcoffee/litestar-fullstack-railway"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JacobCoffee%2Flitestar-fullstack-railway","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JacobCoffee%2Flitestar-fullstack-railway/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JacobCoffee%2Flitestar-fullstack-railway/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JacobCoffee%2Flitestar-fullstack-railway/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/JacobCoffee","download_url":"https://codeload.github.com/JacobCoffee/litestar-fullstack-railway/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":236136587,"owners_count":19100627,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-10-02T02:37:56.783Z","updated_at":"2025-10-11T22:31:27.595Z","avatar_url":"https://github.com/JacobCoffee.png","language":"Python","funding_links":["https://github.com/sponsors/litestar-org"],"categories":[],"sub_categories":[],"readme":"\u003c!-- markdownlint-disable --\u003e\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://raw.githubusercontent.com/litestar-org/branding/1dc4635b192d29d864fcee6f3f73ea0ff6fecf10/assets/Branding%20-%20SVG%20-%20Transparent/Fullstack%20-%20Banner%20-%20Inline%20-%20Light.svg#gh-light-mode-only\" alt=\"Litestar Logo - Light\" width=\"100%\" height=\"auto\" /\u003e\n  \u003cimg src=\"https://raw.githubusercontent.com/litestar-org/branding/1dc4635b192d29d864fcee6f3f73ea0ff6fecf10/assets/Branding%20-%20SVG%20-%20Transparent/Fullstack%20-%20Banner%20-%20Inline%20-%20Dark.svg#gh-dark-mode-only\" alt=\"Litestar Logo - Dark\" width=\"100%\" height=\"auto\" /\u003e\n\u003c/p\u003e\n\u003c!-- markdownlint-restore --\u003e\n\n\u003cdiv align=\"center\"\u003e\n\u003c!-- prettier-ignore-start --\u003e\n\n| Project   |     | Status                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |\n| --------- | :-- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| CI/CD     |     | [![Tests and Linting](https://github.com/litestar-org/litestar-fullstack/actions/workflows/ci.yaml/badge.svg)](https://github.com/litestar-org/litestar-fullstack/actions/workflows/ci.yaml) [![Documentation Building](https://github.com/litestar-org/litestar-fullstack/actions/workflows/docs.yaml/badge.svg)](https://github.com/litestar-org/litestar-fullstack/actions/workflows/docs.yaml)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |\n| Quality   |     | [![Coverage](https://sonarcloud.io/api/project_badges/measure?project=litestar-org_litestar-fullstack\u0026metric=coverage)](https://sonarcloud.io/summary/new_code?id=litestar-org_litestar) [![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=litestar-org_litestar-fullstack\u0026metric=alert_status)](https://sonarcloud.io/summary/new_code?id=litestar-org_litestar) [![Maintainability Rating](https://sonarcloud.io/api/project_badges/measure?project=litestar-org_litestar-fullstack\u0026metric=sqale_rating)](https://sonarcloud.io/summary/new_code?id=litestar-org_litestar) [![Reliability Rating](https://sonarcloud.io/api/project_badges/measure?project=litestar-org_litestar-fullstack\u0026metric=reliability_rating)](https://sonarcloud.io/summary/new_code?id=litestar-org_litestar) [![Security Rating](https://sonarcloud.io/api/project_badges/measure?project=litestar-org_litestar-fullstack\u0026metric=security_rating)](https://sonarcloud.io/summary/new_code?id=litestar-org_litestar)                                                                                                                                                                                                                     |\n| Community |     | [![Reddit](https://img.shields.io/reddit/subreddit-subscribers/litestarapi?label=r%2FLitestar\u0026logo=reddit\u0026labelColor=202235\u0026color=edb641\u0026logoColor=edb641)](https://reddit.com/r/litestarapi) [![Discord](https://img.shields.io/discord/919193495116337154?labelColor=202235\u0026color=edb641\u0026label=chat%20on%20discord\u0026logo=discord\u0026logoColor=edb641)](https://discord.gg/X3FJqy8d2j) [![Matrix](https://img.shields.io/badge/chat%20on%20Matrix-bridged-202235?labelColor=202235\u0026color=edb641\u0026logo=matrix\u0026logoColor=edb641)](https://matrix.to/#/#litestar:matrix.org) [![Medium](https://img.shields.io/badge/Medium-202235?labelColor=202235\u0026color=edb641\u0026logo=medium\u0026logoColor=edb641)](https://blog.litestar.dev) [![Twitter](https://img.shields.io/twitter/follow/LitestarAPI?labelColor=202235\u0026color=edb641\u0026logo=twitter\u0026logoColor=edb641\u0026style=flat)](https://twitter.com/LitestarAPI) [![Blog](https://img.shields.io/badge/Blog-litestar.dev-202235?logo=blogger\u0026labelColor=202235\u0026color=edb641\u0026logoColor=edb641)](https://blog.litestar.dev)                                                                                                                                                                                              |\n| Meta      |     | [![Litestar Project](https://img.shields.io/badge/Litestar%20Org-%E2%AD%90%20Litestar-202235.svg?logo=python\u0026labelColor=202235\u0026color=edb641\u0026logoColor=edb641)](https://github.com/litestar-org/litestar) [![types - Mypy](https://img.shields.io/badge/types-Mypy-202235.svg?logo=python\u0026labelColor=202235\u0026color=edb641\u0026logoColor=edb641)](https://github.com/python/mypy) [![License - MIT](https://img.shields.io/badge/license-MIT-202235.svg?logo=python\u0026labelColor=202235\u0026color=edb641\u0026logoColor=edb641)](https://spdx.org/licenses/) [![Litestar Sponsors](https://img.shields.io/badge/Sponsor-%E2%9D%A4-%23edb641.svg?\u0026logo=github\u0026logoColor=edb641\u0026labelColor=202235)](https://github.com/sponsors/litestar-org) [![linting - Ruff](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/charliermarsh/ruff/main/assets/badge/v2.json\u0026labelColor=202235)](https://github.com/astral-sh/ruff) [![code style - Black](https://img.shields.io/badge/code%20style-black-000000.svg?logo=python\u0026labelColor=202235\u0026logoColor=edb641)](https://github.com/psf/black) [![All Contributors](https://img.shields.io/github/all-contributors/litestar-org/litestar?labelColor=202235\u0026color=edb641\u0026logoColor=edb641)](#contributors-) |\n\n\u003c!-- prettier-ignore-end --\u003e\n\u003c/div\u003e\n\n# Litestar Fullstack Reference Application\n\nThis is a reference application that you can use to get your next Litestar application running quickly.\n\nIt contains most of the boilerplate required for a production web API with features like:\n\n- Latest Litestar configured with best practices\n- Integration with [SQLAlchemy 2.0](https://www.sqlalchemy.org/), [SAQ (Simple Asynchronous Queue)](https://saq-py.readthedocs.io/en/latest/), and [Structlog](https://www.structlog.org/en/stable/)\n- Extends built-in Litestar click CLI\n- Frontend integrated with ViteJS and includes Jinja2 templates that integrate with Vite websocket/HMR support\n- Multi-stage Docker build using using a minimal Python 3.11 runtime image.\n- Pre-configured user model that includes teams and associated team roles\n- Examples of using guards for superuser and team-based auth.\n- Examples using raw SQL for more complex queries\n\nTake what you need and adapt it to your own projects\n\n## Quick Start\n\nTo quickly get a development environment running, run the following:\n\n```shell\nmake install\n. .venv/bin/activate\n```\n\n## App Commands\n\n```bash\n❯ app\n\n Usage: app [OPTIONS] COMMAND [ARGS]...\n\n Litestar CLI.\n\n╭─ Options ────────────────────────────────────────────────────────────────────╮\n│ --app          TEXT       Module path to a Litestar application (TEXT)       │\n│ --app-dir      DIRECTORY  Look for APP in the specified directory, by adding │\n│                           this to the PYTHONPATH. Defaults to the current    │\n│                           working directory.                                 │\n│                           (DIRECTORY)                                        │\n│ --help     -h             Show this message and exit.                        │\n╰──────────────────────────────────────────────────────────────────────────────╯\nUsing Litestar app from env: 'app.asgi:create_app'\n╭─ Commands ───────────────────────────────────────────────────────────────────╮\n│ database   Manage SQLAlchemy database components.                            │\n│ info       Show information about the detected Litestar app.                 │\n│ routes     Display information about the application's routes.               │\n│ run        Run a Litestar app.                                               │\n│ run-all    Starts the application server \u0026 worker in a single command.       │\n│ schema     Manage server-side OpenAPI schemas.                               │\n│ sessions   Manage server-side sessions.                                      │\n│ users      Manage application users.                                         │\n│ version    Show the currently installed Litestar version.                    │\n│ worker     Manage application background workers.                            │\n╰──────────────────────────────────────────────────────────────────────────────╯\n\n```\n\n## Database Commands\n\n```bash\n❯ app database\nUsing Litestar app from env: 'app.asgi:create_app'\n\n Usage: app database [OPTIONS] COMMAND [ARGS]...\n\n Manage SQLAlchemy database components.\n\n╭─ Options ────────────────────────────────────────────────────────────────────╮\n│ --help  -h    Show this message and exit.                                    │\n╰──────────────────────────────────────────────────────────────────────────────╯\n╭─ Commands ───────────────────────────────────────────────────────────────────╮\n│ downgrade              Downgrade database to a specific revision.            │\n│ init                   Initialize migrations for the project.                │\n│ make-migrations        Create a new migration revision.                      │\n│ merge-migrations       Merge multiple revisions into a single new revision.  │\n│ show-current-revision  Shows the current revision for the database.          │\n│ stamp-migration        Mark (Stamp) a specific revision as current without   │\n│                        applying the migrations.                              │\n│ upgrade                Upgrade database to a specific revision.              │\n╰──────────────────────────────────────────────────────────────────────────────╯\n\n```\n\n### Upgrading the Database\n\n```bash\n❯ app database upgrade\nUsing Litestar app from env: 'app.asgi:create_app'\nStarting database upgrade process ───────────────────────────────────────────────\nAre you sure you you want migrate the database to the \"head\" revision? [y/n]: y\n2023-10-01T19:44:13.536101Z [debug    ] Using selector: EpollSelector\n2023-10-01T19:44:13.623437Z [info     ] Context impl PostgresqlImpl.\n2023-10-01T19:44:13.623617Z [info     ] Will assume transactional DDL.\n2023-10-01T19:44:13.667920Z [info     ] Running upgrade  -\u003e c3a9a11cc35d, init\n2023-10-01T19:44:13.774932Z [debug    ] new branch insert c3a9a11cc35d\n2023-10-01T19:44:13.783804Z [info     ] Pool disposed. Pool size: 5  Connections\n in pool: 0 Current Overflow: -5 Current Checked out connections: 0\n2023-10-01T19:44:13.784013Z [info     ] Pool recreating\n```\n\n## Worker Commands\n\n```bash\n❯ app worker\nUsing Litestar app from env: 'app.asgi:create_app'\n\n Usage: app worker [OPTIONS] COMMAND [ARGS]...\n\n Manage application background workers.\n\n╭─ Options ────────────────────────────────────────────────────────────────────╮\n│ --help  -h    Show this message and exit.                                    │\n╰──────────────────────────────────────────────────────────────────────────────╯\n╭─ Commands ───────────────────────────────────────────────────────────────────╮\n│ run       Starts the background workers.                                     │\n╰──────────────────────────────────────────────────────────────────────────────╯\n\n```\n\n## Run Commands\n\nTo run the application through Uvicorn using the standard Litestar CLI, you can use the following:\n\n```bash\n❯ app run --help\nUsing Litestar app from env: 'app.asgi:create_app'\n\n Usage: app run [OPTIONS]\n\n Run a Litestar app.\n The app can be either passed as a module path in the form of \u003cmodule\n name\u003e.\u003csubmodule\u003e:\u003capp instance or factory\u003e, set as an environment variable\n LITESTAR_APP with the same format or automatically discovered from one of\n these canonical paths: app.py, asgi.py, application.py or app/__init__.py.\n When auto-discovering application factories, functions with the name\n ``create_app`` are considered, or functions that are annotated as returning a\n ``Litestar`` instance.\n\n╭─ Options ────────────────────────────────────────────────────────────────────╮\n│ --reload                 -r                          Reload server on        │\n│                                                      changes                 │\n│ --reload-dir             -R  TEXT                    Directories to watch    │\n│                                                      for file changes        │\n│                                                      (TEXT)                  │\n│ --port                   -p  INTEGER                 Serve under this port   │\n│                                                      (INTEGER)               │\n│                                                      [default: 8000]         │\n│ --wc,--web-concurrency   -W  INTEGER RANGE           The number of HTTP      │\n│                              [1\u003c=x\u003c=7]               workers to launch       │\n│                                                      (INTEGER RANGE)         │\n│                                                      [default: 1; 1\u003c=x\u003c=7]   │\n│ --host                   -H  TEXT                    Server under this host  │\n│                                                      (TEXT)                  │\n│                                                      [default: 127.0.0.1]    │\n│ --fd,--file-descriptor   -F  INTEGER                 Bind to a socket from   │\n│                                                      this file descriptor.   │\n│                                                      (INTEGER)               │\n│ --uds,--unix-domain-so…  -U  TEXT                    Bind to a UNIX domain   │\n│                                                      socket.                 │\n│                                                      (TEXT)                  │\n│ --debug                  -d                          Run app in debug mode   │\n│ --pdb,--use-pdb          -P                          Drop into PDB on an     │\n│                                                      exception               │\n│ --help                   -h                          Show this message and   │\n│                                                      exit.                   │\n╰──────────────────────────────────────────────────────────────────────────────╯\n\n\n```\n\nThe above command will not start the background workers. Those can be launched separately in another terminal.\n\nAlternately, the `run-all` command will automatically start the background workers in separate processes.\n\n```bash\n❯ app run-all --help\nUsing Litestar app from env: 'app.asgi:create_app'\n\n Usage: app run-all [OPTIONS] COMMAND [ARGS]...\n\n Starts the application server \u0026 worker in a single command.\n\n╭─ Options ────────────────────────────────────────────────────────────────────╮\n│ --host                    TEXT                     Host interface to listen  │\n│                                                    on.  Use 0.0.0.0 for all  │\n│                                                    available interfaces.     │\n│                                                    (TEXT)                    │\n│                                                    [default: 0.0.0.0]        │\n│ --port                -p  INTEGER                  Port to bind.   (INTEGER) │\n│                                                    [default: 8000]           │\n│ --http-workers            INTEGER RANGE [1\u003c=x\u003c=7]  The number of HTTP worker │\n│                                                    processes for handling    │\n│                                                    requests.                 │\n│                                                    (INTEGER RANGE)           │\n│                                                    [default: 7; 1\u003c=x\u003c=7]     │\n│ --worker-concurrency      INTEGER RANGE [x\u003e=1]     The number of             │\n│                                                    simultaneous jobs a       │\n│                                                    worker process can        │\n│                                                    execute.                  │\n│                                                    (INTEGER RANGE)           │\n│                                                    [default: 1; x\u003e=1]        │\n│ --reload              -r                           Enable reload             │\n│ --verbose             -v                           Enable verbose logging.   │\n│ --debug               -d                           Enable debugging.         │\n│ --help                -h                           Show this message and     │\n│                                                    exit.                     │\n╰──────────────────────────────────────────────────────────────────────────────╯\n\n```\n\n## Installation and Configuration\n\nCommands to help you get this repository running.\n\n### Install virtual environment and node packages\n\nMost of the development related tasks are included in the `Makefile`. To install an environment with all development packages run:\n\n```bash\nmake install\n```\n\nThis command does the following:\n\n- install `pdm` if it is not available in the path.\n- create a virtual environment with all dependencies configured\n- build assets to be hosted by production asset server\n\n### Edit .env configuration\n\nThere is a sample `.env` file located in the root of the repository.\n\n```bash\ncp .env.example .env\n```\n\n**Note** `SECRET_KEY`, `DATABASE_URI`, and `REDIS_URL` are the most important config settings. Be sure to set this properly.\n\nYou can generate a `SECRET_KEY` by running:\n\n```bash\n❯ openssl rand -base64 32\n\n+U9UcN0meCsxkShMINkqZ7pcwpEpOC9AwOArZI6mYDU=\n```\n\n### Deploy Database Migrations\n\nYou can run most of the database commands with the integrated CLI tool.\n\nTo deploy migration to the database, execute:\n\n```bash\n❯ app database upgrade\n2023-06-16T16:55:17.048183Z [info     ] Context impl PostgresqlImpl.\n2023-06-16T16:55:17.048251Z [info     ] Will assume transactional DDL.\n```\n\n### Starting the server\n\n#### Starting the server in development mode\n\nif `DEV_MODE` is set to true, the base template expects that Vite will be running. When you start the application, it will try to start the vite service with the HMR websocket connection enabled.\n\n```bash\n❯ app run-all -p 8080\nUsing Litestar app from env: 'app.asgi:create_app'\n2023-10-01T20:19:06.493377Z [info     ] starting all application services.\n2023-10-01T20:19:06.493500Z [info     ] starting Background worker processes.\n2023-06-16T16:58:38.055247Z [info     ] starting Vite\n2023-06-16T16:58:38.056850Z [info     ] Starting HTTP Server.\n2023-06-16T16:58:38.791943Z [info     ] Started server process [29108]\n2023-06-16T16:58:38.792012Z [info     ] Waiting for application startup.\n2023-06-16T16:58:38.794260Z [info     ] Application startup complete.\n2023-06-16T16:58:38.794876Z [info     ] Uvicorn running on http://0.0.0.0:8080 (Press CTRL+C to quit)\n2023-06-16T16:58:38.803751Z [info     ] Starting working pool\n2023-06-16T16:58:38.804423Z [info     ] Worker is starting up.\n2023-06-16T16:58:38.804519Z [info     ] Worker is starting up.\n2023-06-16T16:58:38.816324Z [info     ] Performing background worker task.\n2023-06-16T16:58:39.188218Z [info     ] Vite                           message=\u003e litestar-fullstack@0.0.0 dev\u003e vite\n2023-06-16T16:58:39.894411Z [info     ] Vite                           message=Forced re-optimization of dependencies\n2023-06-16T16:58:39.923813Z [info     ] Vite                           message=  VITE v4.3.9  ready in 676 ms\n2023-06-16T16:58:39.924023Z [info     ] Vite                           message=  ➜  Local:   http://localhost:3000/static/  ➜  Network: use --host to expose\n```\n\n#### start the server in production mode\n\nif `DEV_MODE` is false, the server will look for the static assets that are produced from the `npm run build` command. This command is automatically executed and the assets are bundled when running `pdm build`.\n\nTo manually rebuild assets, use the following:\n\n```bash\nnpm run build # generates static assets from vite and\n# files from the above command can be found in `src/app/domain/web/public`.\napp run-all\n```\n\nSample output:\n\n```bash\n❯ npm run build\n\n\u003e litestar-fullstack@0.0.0 build\n\u003e vue-tsc \u0026\u0026 vite build\n\nvite v4.1.2 building for production...\n✓ 15 modules transformed.\nGenerated an empty chunk: \"vue\".\n../public/assets/vue-5532db34.svg    0.50 kB\n../public/manifest.json              0.57 kB\n../public/assets/main-b75adab1.css   1.30 kB │ gzip:  0.67 kB\n../public/assets/vue-4ed993c7.js     0.00 kB │ gzip:  0.02 kB\n../public/assets/main-17f9b70b.js    1.50 kB │ gzip:  0.80 kB\n../public/assets/@vue-5be96905.js   52.40 kB │ gzip: 21.07 kB\n❯ app run-all\n2023-02-19 22:53:08 [info     ] starting application.\n2023-02-19 22:53:08 [info     ] starting Background worker processes.\n2023-02-19 22:53:08 [info     ] Starting HTTP Server.\n```\n\n## Make Commands\n\n### Install Development Environment\n\nThis command will remove any existing environment and install a new environment with the latest dependencies.\n\n```shell\nmake install\n```\n\n### Upgrade Project Dependencies\n\nThis command will upgrade all components of the application at the same time. It automatically executes:\n\n- `pdm upgrade`\n- `npm update`\n- `pre-commit autoupdate`\n\n```shell\nmake upgrade\n```\n\n### Execute Pre-commit\n\nThis command will automatically execute the pre-commit process for the project.\n\n```shell\nmake lint\n```\n\n### Generate New Migrations\n\nThis command is a shorthand for executing `app database make-migrations`.\n\n```shell\nmake migrations\n```\n\n### Upgrade a Database to the Latest Revision\n\nThis command is a shorthand for executing `app database upgrade`.\n\n```shell\nmake migrate\n```\n\n### Execute Full Test Suite\n\nThis command executes all tests for the project.\n\n```shell\nmake test\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjacobcoffee%2Flitestar-fullstack-railway","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjacobcoffee%2Flitestar-fullstack-railway","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjacobcoffee%2Flitestar-fullstack-railway/lists"}