Coverage for fastapi/applications.py: 100%
170 statements
« prev ^ index » next coverage.py v7.6.1, created at 2025-12-04 08:29 +0000
« prev ^ index » next coverage.py v7.6.1, created at 2025-12-04 08:29 +0000
1from enum import Enum 1abcdefg
2from typing import ( 1abcdefg
3 Any,
4 Awaitable,
5 Callable,
6 Coroutine,
7 Dict,
8 List,
9 Optional,
10 Sequence,
11 Type,
12 TypeVar,
13 Union,
14)
16from annotated_doc import Doc 1abcdefg
17from fastapi import routing 1abcdefg
18from fastapi.datastructures import Default, DefaultPlaceholder 1abcdefg
19from fastapi.exception_handlers import ( 1abcdefg
20 http_exception_handler,
21 request_validation_exception_handler,
22 websocket_request_validation_exception_handler,
23)
24from fastapi.exceptions import RequestValidationError, WebSocketRequestValidationError 1abcdefg
25from fastapi.logger import logger 1abcdefg
26from fastapi.middleware.asyncexitstack import AsyncExitStackMiddleware 1abcdefg
27from fastapi.openapi.docs import ( 1abcdefg
28 get_redoc_html,
29 get_swagger_ui_html,
30 get_swagger_ui_oauth2_redirect_html,
31)
32from fastapi.openapi.utils import get_openapi 1abcdefg
33from fastapi.params import Depends 1abcdefg
34from fastapi.types import DecoratedCallable, IncEx 1abcdefg
35from fastapi.utils import generate_unique_id 1abcdefg
36from starlette.applications import Starlette 1abcdefg
37from starlette.datastructures import State 1abcdefg
38from starlette.exceptions import HTTPException 1abcdefg
39from starlette.middleware import Middleware 1abcdefg
40from starlette.middleware.base import BaseHTTPMiddleware 1abcdefg
41from starlette.middleware.errors import ServerErrorMiddleware 1abcdefg
42from starlette.middleware.exceptions import ExceptionMiddleware 1abcdefg
43from starlette.requests import Request 1abcdefg
44from starlette.responses import HTMLResponse, JSONResponse, Response 1abcdefg
45from starlette.routing import BaseRoute 1abcdefg
46from starlette.types import ASGIApp, ExceptionHandler, Lifespan, Receive, Scope, Send 1abcdefg
47from typing_extensions import Annotated, deprecated 1abcdefg
49AppType = TypeVar("AppType", bound="FastAPI") 1abcdefg
52class FastAPI(Starlette): 1abcdefg
53 """
54 `FastAPI` app class, the main entrypoint to use FastAPI.
56 Read more in the
57 [FastAPI docs for First Steps](https://fastapi.tiangolo.com/tutorial/first-steps/).
59 ## Example
61 ```python
62 from fastapi import FastAPI
64 app = FastAPI()
65 ```
66 """
68 def __init__( 1abcdefg
69 self: AppType,
70 *,
71 debug: Annotated[
72 bool,
73 Doc(
74 """
75 Boolean indicating if debug tracebacks should be returned on server
76 errors.
78 Read more in the
79 [Starlette docs for Applications](https://www.starlette.dev/applications/#instantiating-the-application).
80 """
81 ),
82 ] = False,
83 routes: Annotated[
84 Optional[List[BaseRoute]],
85 Doc(
86 """
87 **Note**: you probably shouldn't use this parameter, it is inherited
88 from Starlette and supported for compatibility.
90 ---
92 A list of routes to serve incoming HTTP and WebSocket requests.
93 """
94 ),
95 deprecated(
96 """
97 You normally wouldn't use this parameter with FastAPI, it is inherited
98 from Starlette and supported for compatibility.
100 In FastAPI, you normally would use the *path operation methods*,
101 like `app.get()`, `app.post()`, etc.
102 """
103 ),
104 ] = None,
105 title: Annotated[
106 str,
107 Doc(
108 """
109 The title of the API.
111 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
113 Read more in the
114 [FastAPI docs for Metadata and Docs URLs](https://fastapi.tiangolo.com/tutorial/metadata/#metadata-for-api).
116 **Example**
118 ```python
119 from fastapi import FastAPI
121 app = FastAPI(title="ChimichangApp")
122 ```
123 """
124 ),
125 ] = "FastAPI",
126 summary: Annotated[
127 Optional[str],
128 Doc(
129 """
130 A short summary of the API.
132 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
134 Read more in the
135 [FastAPI docs for Metadata and Docs URLs](https://fastapi.tiangolo.com/tutorial/metadata/#metadata-for-api).
137 **Example**
139 ```python
140 from fastapi import FastAPI
142 app = FastAPI(summary="Deadpond's favorite app. Nuff said.")
143 ```
144 """
145 ),
146 ] = None,
147 description: Annotated[
148 str,
149 Doc(
150 '''
151 A description of the API. Supports Markdown (using
152 [CommonMark syntax](https://commonmark.org/)).
154 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
156 Read more in the
157 [FastAPI docs for Metadata and Docs URLs](https://fastapi.tiangolo.com/tutorial/metadata/#metadata-for-api).
159 **Example**
161 ```python
162 from fastapi import FastAPI
164 app = FastAPI(
165 description="""
166 ChimichangApp API helps you do awesome stuff. 🚀
168 ## Items
170 You can **read items**.
172 ## Users
174 You will be able to:
176 * **Create users** (_not implemented_).
177 * **Read users** (_not implemented_).
179 """
180 )
181 ```
182 '''
183 ),
184 ] = "",
185 version: Annotated[
186 str,
187 Doc(
188 """
189 The version of the API.
191 **Note** This is the version of your application, not the version of
192 the OpenAPI specification nor the version of FastAPI being used.
194 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
196 Read more in the
197 [FastAPI docs for Metadata and Docs URLs](https://fastapi.tiangolo.com/tutorial/metadata/#metadata-for-api).
199 **Example**
201 ```python
202 from fastapi import FastAPI
204 app = FastAPI(version="0.0.1")
205 ```
206 """
207 ),
208 ] = "0.1.0",
209 openapi_url: Annotated[
210 Optional[str],
211 Doc(
212 """
213 The URL where the OpenAPI schema will be served from.
215 If you set it to `None`, no OpenAPI schema will be served publicly, and
216 the default automatic endpoints `/docs` and `/redoc` will also be
217 disabled.
219 Read more in the
220 [FastAPI docs for Metadata and Docs URLs](https://fastapi.tiangolo.com/tutorial/metadata/#openapi-url).
222 **Example**
224 ```python
225 from fastapi import FastAPI
227 app = FastAPI(openapi_url="/api/v1/openapi.json")
228 ```
229 """
230 ),
231 ] = "/openapi.json",
232 openapi_tags: Annotated[
233 Optional[List[Dict[str, Any]]],
234 Doc(
235 """
236 A list of tags used by OpenAPI, these are the same `tags` you can set
237 in the *path operations*, like:
239 * `@app.get("/users/", tags=["users"])`
240 * `@app.get("/items/", tags=["items"])`
242 The order of the tags can be used to specify the order shown in
243 tools like Swagger UI, used in the automatic path `/docs`.
245 It's not required to specify all the tags used.
247 The tags that are not declared MAY be organized randomly or based
248 on the tools' logic. Each tag name in the list MUST be unique.
250 The value of each item is a `dict` containing:
252 * `name`: The name of the tag.
253 * `description`: A short description of the tag.
254 [CommonMark syntax](https://commonmark.org/) MAY be used for rich
255 text representation.
256 * `externalDocs`: Additional external documentation for this tag. If
257 provided, it would contain a `dict` with:
258 * `description`: A short description of the target documentation.
259 [CommonMark syntax](https://commonmark.org/) MAY be used for
260 rich text representation.
261 * `url`: The URL for the target documentation. Value MUST be in
262 the form of a URL.
264 Read more in the
265 [FastAPI docs for Metadata and Docs URLs](https://fastapi.tiangolo.com/tutorial/metadata/#metadata-for-tags).
267 **Example**
269 ```python
270 from fastapi import FastAPI
272 tags_metadata = [
273 {
274 "name": "users",
275 "description": "Operations with users. The **login** logic is also here.",
276 },
277 {
278 "name": "items",
279 "description": "Manage items. So _fancy_ they have their own docs.",
280 "externalDocs": {
281 "description": "Items external docs",
282 "url": "https://fastapi.tiangolo.com/",
283 },
284 },
285 ]
287 app = FastAPI(openapi_tags=tags_metadata)
288 ```
289 """
290 ),
291 ] = None,
292 servers: Annotated[
293 Optional[List[Dict[str, Union[str, Any]]]],
294 Doc(
295 """
296 A `list` of `dict`s with connectivity information to a target server.
298 You would use it, for example, if your application is served from
299 different domains and you want to use the same Swagger UI in the
300 browser to interact with each of them (instead of having multiple
301 browser tabs open). Or if you want to leave fixed the possible URLs.
303 If the servers `list` is not provided, or is an empty `list`, the
304 `servers` property in the generated OpenAPI will be:
306 * a `dict` with a `url` value of the application's mounting point
307 (`root_path`) if it's different from `/`.
308 * otherwise, the `servers` property will be omitted from the OpenAPI
309 schema.
311 Each item in the `list` is a `dict` containing:
313 * `url`: A URL to the target host. This URL supports Server Variables
314 and MAY be relative, to indicate that the host location is relative
315 to the location where the OpenAPI document is being served. Variable
316 substitutions will be made when a variable is named in `{`brackets`}`.
317 * `description`: An optional string describing the host designated by
318 the URL. [CommonMark syntax](https://commonmark.org/) MAY be used for
319 rich text representation.
320 * `variables`: A `dict` between a variable name and its value. The value
321 is used for substitution in the server's URL template.
323 Read more in the
324 [FastAPI docs for Behind a Proxy](https://fastapi.tiangolo.com/advanced/behind-a-proxy/#additional-servers).
326 **Example**
328 ```python
329 from fastapi import FastAPI
331 app = FastAPI(
332 servers=[
333 {"url": "https://stag.example.com", "description": "Staging environment"},
334 {"url": "https://prod.example.com", "description": "Production environment"},
335 ]
336 )
337 ```
338 """
339 ),
340 ] = None,
341 dependencies: Annotated[
342 Optional[Sequence[Depends]],
343 Doc(
344 """
345 A list of global dependencies, they will be applied to each
346 *path operation*, including in sub-routers.
348 Read more about it in the
349 [FastAPI docs for Global Dependencies](https://fastapi.tiangolo.com/tutorial/dependencies/global-dependencies/).
351 **Example**
353 ```python
354 from fastapi import Depends, FastAPI
356 from .dependencies import func_dep_1, func_dep_2
358 app = FastAPI(dependencies=[Depends(func_dep_1), Depends(func_dep_2)])
359 ```
360 """
361 ),
362 ] = None,
363 default_response_class: Annotated[
364 Type[Response],
365 Doc(
366 """
367 The default response class to be used.
369 Read more in the
370 [FastAPI docs for Custom Response - HTML, Stream, File, others](https://fastapi.tiangolo.com/advanced/custom-response/#default-response-class).
372 **Example**
374 ```python
375 from fastapi import FastAPI
376 from fastapi.responses import ORJSONResponse
378 app = FastAPI(default_response_class=ORJSONResponse)
379 ```
380 """
381 ),
382 ] = Default(JSONResponse),
383 redirect_slashes: Annotated[
384 bool,
385 Doc(
386 """
387 Whether to detect and redirect slashes in URLs when the client doesn't
388 use the same format.
390 **Example**
392 ```python
393 from fastapi import FastAPI
395 app = FastAPI(redirect_slashes=True) # the default
397 @app.get("/items/")
398 async def read_items():
399 return [{"item_id": "Foo"}]
400 ```
402 With this app, if a client goes to `/items` (without a trailing slash),
403 they will be automatically redirected with an HTTP status code of 307
404 to `/items/`.
405 """
406 ),
407 ] = True,
408 docs_url: Annotated[
409 Optional[str],
410 Doc(
411 """
412 The path to the automatic interactive API documentation.
413 It is handled in the browser by Swagger UI.
415 The default URL is `/docs`. You can disable it by setting it to `None`.
417 If `openapi_url` is set to `None`, this will be automatically disabled.
419 Read more in the
420 [FastAPI docs for Metadata and Docs URLs](https://fastapi.tiangolo.com/tutorial/metadata/#docs-urls).
422 **Example**
424 ```python
425 from fastapi import FastAPI
427 app = FastAPI(docs_url="/documentation", redoc_url=None)
428 ```
429 """
430 ),
431 ] = "/docs",
432 redoc_url: Annotated[
433 Optional[str],
434 Doc(
435 """
436 The path to the alternative automatic interactive API documentation
437 provided by ReDoc.
439 The default URL is `/redoc`. You can disable it by setting it to `None`.
441 If `openapi_url` is set to `None`, this will be automatically disabled.
443 Read more in the
444 [FastAPI docs for Metadata and Docs URLs](https://fastapi.tiangolo.com/tutorial/metadata/#docs-urls).
446 **Example**
448 ```python
449 from fastapi import FastAPI
451 app = FastAPI(docs_url="/documentation", redoc_url="redocumentation")
452 ```
453 """
454 ),
455 ] = "/redoc",
456 swagger_ui_oauth2_redirect_url: Annotated[
457 Optional[str],
458 Doc(
459 """
460 The OAuth2 redirect endpoint for the Swagger UI.
462 By default it is `/docs/oauth2-redirect`.
464 This is only used if you use OAuth2 (with the "Authorize" button)
465 with Swagger UI.
466 """
467 ),
468 ] = "/docs/oauth2-redirect",
469 swagger_ui_init_oauth: Annotated[
470 Optional[Dict[str, Any]],
471 Doc(
472 """
473 OAuth2 configuration for the Swagger UI, by default shown at `/docs`.
475 Read more about the available configuration options in the
476 [Swagger UI docs](https://swagger.io/docs/open-source-tools/swagger-ui/usage/oauth2/).
477 """
478 ),
479 ] = None,
480 middleware: Annotated[
481 Optional[Sequence[Middleware]],
482 Doc(
483 """
484 List of middleware to be added when creating the application.
486 In FastAPI you would normally do this with `app.add_middleware()`
487 instead.
489 Read more in the
490 [FastAPI docs for Middleware](https://fastapi.tiangolo.com/tutorial/middleware/).
491 """
492 ),
493 ] = None,
494 exception_handlers: Annotated[
495 Optional[
496 Dict[
497 Union[int, Type[Exception]],
498 Callable[[Request, Any], Coroutine[Any, Any, Response]],
499 ]
500 ],
501 Doc(
502 """
503 A dictionary with handlers for exceptions.
505 In FastAPI, you would normally use the decorator
506 `@app.exception_handler()`.
508 Read more in the
509 [FastAPI docs for Handling Errors](https://fastapi.tiangolo.com/tutorial/handling-errors/).
510 """
511 ),
512 ] = None,
513 on_startup: Annotated[
514 Optional[Sequence[Callable[[], Any]]],
515 Doc(
516 """
517 A list of startup event handler functions.
519 You should instead use the `lifespan` handlers.
521 Read more in the [FastAPI docs for `lifespan`](https://fastapi.tiangolo.com/advanced/events/).
522 """
523 ),
524 ] = None,
525 on_shutdown: Annotated[
526 Optional[Sequence[Callable[[], Any]]],
527 Doc(
528 """
529 A list of shutdown event handler functions.
531 You should instead use the `lifespan` handlers.
533 Read more in the
534 [FastAPI docs for `lifespan`](https://fastapi.tiangolo.com/advanced/events/).
535 """
536 ),
537 ] = None,
538 lifespan: Annotated[
539 Optional[Lifespan[AppType]],
540 Doc(
541 """
542 A `Lifespan` context manager handler. This replaces `startup` and
543 `shutdown` functions with a single context manager.
545 Read more in the
546 [FastAPI docs for `lifespan`](https://fastapi.tiangolo.com/advanced/events/).
547 """
548 ),
549 ] = None,
550 terms_of_service: Annotated[
551 Optional[str],
552 Doc(
553 """
554 A URL to the Terms of Service for your API.
556 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
558 Read more at the
559 [FastAPI docs for Metadata and Docs URLs](https://fastapi.tiangolo.com/tutorial/metadata/#metadata-for-api).
561 **Example**
563 ```python
564 app = FastAPI(terms_of_service="http://example.com/terms/")
565 ```
566 """
567 ),
568 ] = None,
569 contact: Annotated[
570 Optional[Dict[str, Union[str, Any]]],
571 Doc(
572 """
573 A dictionary with the contact information for the exposed API.
575 It can contain several fields.
577 * `name`: (`str`) The name of the contact person/organization.
578 * `url`: (`str`) A URL pointing to the contact information. MUST be in
579 the format of a URL.
580 * `email`: (`str`) The email address of the contact person/organization.
581 MUST be in the format of an email address.
583 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
585 Read more at the
586 [FastAPI docs for Metadata and Docs URLs](https://fastapi.tiangolo.com/tutorial/metadata/#metadata-for-api).
588 **Example**
590 ```python
591 app = FastAPI(
592 contact={
593 "name": "Deadpoolio the Amazing",
594 "url": "http://x-force.example.com/contact/",
595 "email": "dp@x-force.example.com",
596 }
597 )
598 ```
599 """
600 ),
601 ] = None,
602 license_info: Annotated[
603 Optional[Dict[str, Union[str, Any]]],
604 Doc(
605 """
606 A dictionary with the license information for the exposed API.
608 It can contain several fields.
610 * `name`: (`str`) **REQUIRED** (if a `license_info` is set). The
611 license name used for the API.
612 * `identifier`: (`str`) An [SPDX](https://spdx.dev/) license expression
613 for the API. The `identifier` field is mutually exclusive of the `url`
614 field. Available since OpenAPI 3.1.0, FastAPI 0.99.0.
615 * `url`: (`str`) A URL to the license used for the API. This MUST be
616 the format of a URL.
618 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
620 Read more at the
621 [FastAPI docs for Metadata and Docs URLs](https://fastapi.tiangolo.com/tutorial/metadata/#metadata-for-api).
623 **Example**
625 ```python
626 app = FastAPI(
627 license_info={
628 "name": "Apache 2.0",
629 "url": "https://www.apache.org/licenses/LICENSE-2.0.html",
630 }
631 )
632 ```
633 """
634 ),
635 ] = None,
636 openapi_prefix: Annotated[
637 str,
638 Doc(
639 """
640 A URL prefix for the OpenAPI URL.
641 """
642 ),
643 deprecated(
644 """
645 "openapi_prefix" has been deprecated in favor of "root_path", which
646 follows more closely the ASGI standard, is simpler, and more
647 automatic.
648 """
649 ),
650 ] = "",
651 root_path: Annotated[
652 str,
653 Doc(
654 """
655 A path prefix handled by a proxy that is not seen by the application
656 but is seen by external clients, which affects things like Swagger UI.
658 Read more about it at the
659 [FastAPI docs for Behind a Proxy](https://fastapi.tiangolo.com/advanced/behind-a-proxy/).
661 **Example**
663 ```python
664 from fastapi import FastAPI
666 app = FastAPI(root_path="/api/v1")
667 ```
668 """
669 ),
670 ] = "",
671 root_path_in_servers: Annotated[
672 bool,
673 Doc(
674 """
675 To disable automatically generating the URLs in the `servers` field
676 in the autogenerated OpenAPI using the `root_path`.
678 Read more about it in the
679 [FastAPI docs for Behind a Proxy](https://fastapi.tiangolo.com/advanced/behind-a-proxy/#disable-automatic-server-from-root_path).
681 **Example**
683 ```python
684 from fastapi import FastAPI
686 app = FastAPI(root_path_in_servers=False)
687 ```
688 """
689 ),
690 ] = True,
691 responses: Annotated[
692 Optional[Dict[Union[int, str], Dict[str, Any]]],
693 Doc(
694 """
695 Additional responses to be shown in OpenAPI.
697 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
699 Read more about it in the
700 [FastAPI docs for Additional Responses in OpenAPI](https://fastapi.tiangolo.com/advanced/additional-responses/).
702 And in the
703 [FastAPI docs for Bigger Applications](https://fastapi.tiangolo.com/tutorial/bigger-applications/#include-an-apirouter-with-a-custom-prefix-tags-responses-and-dependencies).
704 """
705 ),
706 ] = None,
707 callbacks: Annotated[
708 Optional[List[BaseRoute]],
709 Doc(
710 """
711 OpenAPI callbacks that should apply to all *path operations*.
713 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
715 Read more about it in the
716 [FastAPI docs for OpenAPI Callbacks](https://fastapi.tiangolo.com/advanced/openapi-callbacks/).
717 """
718 ),
719 ] = None,
720 webhooks: Annotated[
721 Optional[routing.APIRouter],
722 Doc(
723 """
724 Add OpenAPI webhooks. This is similar to `callbacks` but it doesn't
725 depend on specific *path operations*.
727 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
729 **Note**: This is available since OpenAPI 3.1.0, FastAPI 0.99.0.
731 Read more about it in the
732 [FastAPI docs for OpenAPI Webhooks](https://fastapi.tiangolo.com/advanced/openapi-webhooks/).
733 """
734 ),
735 ] = None,
736 deprecated: Annotated[
737 Optional[bool],
738 Doc(
739 """
740 Mark all *path operations* as deprecated. You probably don't need it,
741 but it's available.
743 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
745 Read more about it in the
746 [FastAPI docs for Path Operation Configuration](https://fastapi.tiangolo.com/tutorial/path-operation-configuration/).
747 """
748 ),
749 ] = None,
750 include_in_schema: Annotated[
751 bool,
752 Doc(
753 """
754 To include (or not) all the *path operations* in the generated OpenAPI.
755 You probably don't need it, but it's available.
757 This affects the generated OpenAPI (e.g. visible at `/docs`).
759 Read more about it in the
760 [FastAPI docs for Query Parameters and String Validations](https://fastapi.tiangolo.com/tutorial/query-params-str-validations/#exclude-parameters-from-openapi).
761 """
762 ),
763 ] = True,
764 swagger_ui_parameters: Annotated[
765 Optional[Dict[str, Any]],
766 Doc(
767 """
768 Parameters to configure Swagger UI, the autogenerated interactive API
769 documentation (by default at `/docs`).
771 Read more about it in the
772 [FastAPI docs about how to Configure Swagger UI](https://fastapi.tiangolo.com/how-to/configure-swagger-ui/).
773 """
774 ),
775 ] = None,
776 generate_unique_id_function: Annotated[
777 Callable[[routing.APIRoute], str],
778 Doc(
779 """
780 Customize the function used to generate unique IDs for the *path
781 operations* shown in the generated OpenAPI.
783 This is particularly useful when automatically generating clients or
784 SDKs for your API.
786 Read more about it in the
787 [FastAPI docs about how to Generate Clients](https://fastapi.tiangolo.com/advanced/generate-clients/#custom-generate-unique-id-function).
788 """
789 ),
790 ] = Default(generate_unique_id),
791 separate_input_output_schemas: Annotated[
792 bool,
793 Doc(
794 """
795 Whether to generate separate OpenAPI schemas for request body and
796 response body when the results would be more precise.
798 This is particularly useful when automatically generating clients.
800 For example, if you have a model like:
802 ```python
803 from pydantic import BaseModel
805 class Item(BaseModel):
806 name: str
807 tags: list[str] = []
808 ```
810 When `Item` is used for input, a request body, `tags` is not required,
811 the client doesn't have to provide it.
813 But when using `Item` for output, for a response body, `tags` is always
814 available because it has a default value, even if it's just an empty
815 list. So, the client should be able to always expect it.
817 In this case, there would be two different schemas, one for input and
818 another one for output.
819 """
820 ),
821 ] = True,
822 openapi_external_docs: Annotated[
823 Optional[Dict[str, Any]],
824 Doc(
825 """
826 This field allows you to provide additional external documentation links.
827 If provided, it must be a dictionary containing:
829 * `description`: A brief description of the external documentation.
830 * `url`: The URL pointing to the external documentation. The value **MUST**
831 be a valid URL format.
833 **Example**:
835 ```python
836 from fastapi import FastAPI
838 external_docs = {
839 "description": "Detailed API Reference",
840 "url": "https://example.com/api-docs",
841 }
843 app = FastAPI(openapi_external_docs=external_docs)
844 ```
845 """
846 ),
847 ] = None,
848 **extra: Annotated[
849 Any,
850 Doc(
851 """
852 Extra keyword arguments to be stored in the app, not used by FastAPI
853 anywhere.
854 """
855 ),
856 ],
857 ) -> None:
858 self.debug = debug 2a :b;b=b?b@b[b]b^b_bo = p q r s t ? `b{bBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeAbBbCbu v Db|b}bXeYeZe0e1e2e~bacbccctbEbdcecfcFbw h 3egc4e5ehcGb@ icjckclcb mcncocpcqcrcsctcucx [ y z A B C ] vcwc6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@eHbIbJbD E Kbxcyc[e]e^e_e`e{ezcAcBcCcubLbDcEcFcMbF i |eGc}e~eHcNb^ IcJcKcLcc McNcOcPcQcRcScTcUcG _ H I J K L ` VcWcafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfObPbQbM N RbXcYcZc{ 0c1c| 2c3c4cwfxfyfzfAfBf5c6c7c8cvbSb9c!c#cTbO $cj Cf%cDfEf'cUb(c} )c*c+c,cd -c.c/c:c;c=c?c@c[cP ~ Q R S T U ab]c^cFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fVbWbXbV W Yb_c`c{cbb|c}ccb~cadbd1f2f3f4f5f6fcdddedfdwbZbgdhdid0bX jdk 7fkd8f9fld1bmddbndodpdqde rdsdtdudvdwdxdydzdY ebZ 0 1 2 3 fbAdBd!f#f$f%f'f(f)f*f+f,f-f.f/f:f;f=f?f@f[f]f^f_f2b3b4b4 5 5bCdDdEdgbFdGdhbHdIdJd`f{f|f}f~fagKdLdMdNdxb6bOdPdQd7b6 Rdl bgSdcgdgTd8bUdibVdWdXdYdf Zd0d1d2d3d4d5d6d7d7 jb8 9 ! # $ kb8d9degfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgygzg9b!b#b% ' $b!d#d$dlb%d'dmb(d)d*dAgBgCgDgEgFg+d,d-d.dyb%b/d:d;d'b( =dm Gg?dHgIg@d(b[dnb]d^d_d`dg {d|d}d~daebecede) ob* + , - . pbeeJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g)b*b+b/ : ,bfegeqbheierbjekele5g6g7g8g9gmeneoepezb-bqerese.b; ten !gue#g$gve/bwesbxeyezeAe
859 self.title = title 2a :b;b=b?b@b[b]b^b_bo = p q r s t ? `b{bBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeAbBbCbu v Db|b}bXeYeZe0e1e2e~bacbccctbEbdcecfcFbw h 3egc4e5ehcGb@ icjckclcb mcncocpcqcrcsctcucx [ y z A B C ] vcwc6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@eHbIbJbD E Kbxcyc[e]e^e_e`e{ezcAcBcCcubLbDcEcFcMbF i |eGc}e~eHcNb^ IcJcKcLcc McNcOcPcQcRcScTcUcG _ H I J K L ` VcWcafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfObPbQbM N RbXcYcZc{ 0c1c| 2c3c4cwfxfyfzfAfBf5c6c7c8cvbSb9c!c#cTbO $cj Cf%cDfEf'cUb(c} )c*c+c,cd -c.c/c:c;c=c?c@c[cP ~ Q R S T U ab]c^cFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fVbWbXbV W Yb_c`c{cbb|c}ccb~cadbd1f2f3f4f5f6fcdddedfdwbZbgdhdid0bX jdk 7fkd8f9fld1bmddbndodpdqde rdsdtdudvdwdxdydzdY ebZ 0 1 2 3 fbAdBd!f#f$f%f'f(f)f*f+f,f-f.f/f:f;f=f?f@f[f]f^f_f2b3b4b4 5 5bCdDdEdgbFdGdhbHdIdJd`f{f|f}f~fagKdLdMdNdxb6bOdPdQd7b6 Rdl bgSdcgdgTd8bUdibVdWdXdYdf Zd0d1d2d3d4d5d6d7d7 jb8 9 ! # $ kb8d9degfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgygzg9b!b#b% ' $b!d#d$dlb%d'dmb(d)d*dAgBgCgDgEgFg+d,d-d.dyb%b/d:d;d'b( =dm Gg?dHgIg@d(b[dnb]d^d_d`dg {d|d}d~daebecede) ob* + , - . pbeeJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g)b*b+b/ : ,bfegeqbheierbjekele5g6g7g8g9gmeneoepezb-bqerese.b; ten !gue#g$gve/bwesbxeyezeAe
860 self.summary = summary 2a :b;b=b?b@b[b]b^b_bo = p q r s t ? `b{bBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeAbBbCbu v Db|b}bXeYeZe0e1e2e~bacbccctbEbdcecfcFbw h 3egc4e5ehcGb@ icjckclcb mcncocpcqcrcsctcucx [ y z A B C ] vcwc6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@eHbIbJbD E Kbxcyc[e]e^e_e`e{ezcAcBcCcubLbDcEcFcMbF i |eGc}e~eHcNb^ IcJcKcLcc McNcOcPcQcRcScTcUcG _ H I J K L ` VcWcafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfObPbQbM N RbXcYcZc{ 0c1c| 2c3c4cwfxfyfzfAfBf5c6c7c8cvbSb9c!c#cTbO $cj Cf%cDfEf'cUb(c} )c*c+c,cd -c.c/c:c;c=c?c@c[cP ~ Q R S T U ab]c^cFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fVbWbXbV W Yb_c`c{cbb|c}ccb~cadbd1f2f3f4f5f6fcdddedfdwbZbgdhdid0bX jdk 7fkd8f9fld1bmddbndodpdqde rdsdtdudvdwdxdydzdY ebZ 0 1 2 3 fbAdBd!f#f$f%f'f(f)f*f+f,f-f.f/f:f;f=f?f@f[f]f^f_f2b3b4b4 5 5bCdDdEdgbFdGdhbHdIdJd`f{f|f}f~fagKdLdMdNdxb6bOdPdQd7b6 Rdl bgSdcgdgTd8bUdibVdWdXdYdf Zd0d1d2d3d4d5d6d7d7 jb8 9 ! # $ kb8d9degfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgygzg9b!b#b% ' $b!d#d$dlb%d'dmb(d)d*dAgBgCgDgEgFg+d,d-d.dyb%b/d:d;d'b( =dm Gg?dHgIg@d(b[dnb]d^d_d`dg {d|d}d~daebecede) ob* + , - . pbeeJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g)b*b+b/ : ,bfegeqbheierbjekele5g6g7g8g9gmeneoepezb-bqerese.b; ten !gue#g$gve/bwesbxeyezeAe
861 self.description = description 2a :b;b=b?b@b[b]b^b_bo = p q r s t ? `b{bBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeAbBbCbu v Db|b}bXeYeZe0e1e2e~bacbccctbEbdcecfcFbw h 3egc4e5ehcGb@ icjckclcb mcncocpcqcrcsctcucx [ y z A B C ] vcwc6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@eHbIbJbD E Kbxcyc[e]e^e_e`e{ezcAcBcCcubLbDcEcFcMbF i |eGc}e~eHcNb^ IcJcKcLcc McNcOcPcQcRcScTcUcG _ H I J K L ` VcWcafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfObPbQbM N RbXcYcZc{ 0c1c| 2c3c4cwfxfyfzfAfBf5c6c7c8cvbSb9c!c#cTbO $cj Cf%cDfEf'cUb(c} )c*c+c,cd -c.c/c:c;c=c?c@c[cP ~ Q R S T U ab]c^cFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fVbWbXbV W Yb_c`c{cbb|c}ccb~cadbd1f2f3f4f5f6fcdddedfdwbZbgdhdid0bX jdk 7fkd8f9fld1bmddbndodpdqde rdsdtdudvdwdxdydzdY ebZ 0 1 2 3 fbAdBd!f#f$f%f'f(f)f*f+f,f-f.f/f:f;f=f?f@f[f]f^f_f2b3b4b4 5 5bCdDdEdgbFdGdhbHdIdJd`f{f|f}f~fagKdLdMdNdxb6bOdPdQd7b6 Rdl bgSdcgdgTd8bUdibVdWdXdYdf Zd0d1d2d3d4d5d6d7d7 jb8 9 ! # $ kb8d9degfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgygzg9b!b#b% ' $b!d#d$dlb%d'dmb(d)d*dAgBgCgDgEgFg+d,d-d.dyb%b/d:d;d'b( =dm Gg?dHgIg@d(b[dnb]d^d_d`dg {d|d}d~daebecede) ob* + , - . pbeeJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g)b*b+b/ : ,bfegeqbheierbjekele5g6g7g8g9gmeneoepezb-bqerese.b; ten !gue#g$gve/bwesbxeyezeAe
862 self.version = version 2a :b;b=b?b@b[b]b^b_bo = p q r s t ? `b{bBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeAbBbCbu v Db|b}bXeYeZe0e1e2e~bacbccctbEbdcecfcFbw h 3egc4e5ehcGb@ icjckclcb mcncocpcqcrcsctcucx [ y z A B C ] vcwc6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@eHbIbJbD E Kbxcyc[e]e^e_e`e{ezcAcBcCcubLbDcEcFcMbF i |eGc}e~eHcNb^ IcJcKcLcc McNcOcPcQcRcScTcUcG _ H I J K L ` VcWcafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfObPbQbM N RbXcYcZc{ 0c1c| 2c3c4cwfxfyfzfAfBf5c6c7c8cvbSb9c!c#cTbO $cj Cf%cDfEf'cUb(c} )c*c+c,cd -c.c/c:c;c=c?c@c[cP ~ Q R S T U ab]c^cFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fVbWbXbV W Yb_c`c{cbb|c}ccb~cadbd1f2f3f4f5f6fcdddedfdwbZbgdhdid0bX jdk 7fkd8f9fld1bmddbndodpdqde rdsdtdudvdwdxdydzdY ebZ 0 1 2 3 fbAdBd!f#f$f%f'f(f)f*f+f,f-f.f/f:f;f=f?f@f[f]f^f_f2b3b4b4 5 5bCdDdEdgbFdGdhbHdIdJd`f{f|f}f~fagKdLdMdNdxb6bOdPdQd7b6 Rdl bgSdcgdgTd8bUdibVdWdXdYdf Zd0d1d2d3d4d5d6d7d7 jb8 9 ! # $ kb8d9degfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgygzg9b!b#b% ' $b!d#d$dlb%d'dmb(d)d*dAgBgCgDgEgFg+d,d-d.dyb%b/d:d;d'b( =dm Gg?dHgIg@d(b[dnb]d^d_d`dg {d|d}d~daebecede) ob* + , - . pbeeJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g)b*b+b/ : ,bfegeqbheierbjekele5g6g7g8g9gmeneoepezb-bqerese.b; ten !gue#g$gve/bwesbxeyezeAe
863 self.terms_of_service = terms_of_service 2a :b;b=b?b@b[b]b^b_bo = p q r s t ? `b{bBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeAbBbCbu v Db|b}bXeYeZe0e1e2e~bacbccctbEbdcecfcFbw h 3egc4e5ehcGb@ icjckclcb mcncocpcqcrcsctcucx [ y z A B C ] vcwc6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@eHbIbJbD E Kbxcyc[e]e^e_e`e{ezcAcBcCcubLbDcEcFcMbF i |eGc}e~eHcNb^ IcJcKcLcc McNcOcPcQcRcScTcUcG _ H I J K L ` VcWcafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfObPbQbM N RbXcYcZc{ 0c1c| 2c3c4cwfxfyfzfAfBf5c6c7c8cvbSb9c!c#cTbO $cj Cf%cDfEf'cUb(c} )c*c+c,cd -c.c/c:c;c=c?c@c[cP ~ Q R S T U ab]c^cFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fVbWbXbV W Yb_c`c{cbb|c}ccb~cadbd1f2f3f4f5f6fcdddedfdwbZbgdhdid0bX jdk 7fkd8f9fld1bmddbndodpdqde rdsdtdudvdwdxdydzdY ebZ 0 1 2 3 fbAdBd!f#f$f%f'f(f)f*f+f,f-f.f/f:f;f=f?f@f[f]f^f_f2b3b4b4 5 5bCdDdEdgbFdGdhbHdIdJd`f{f|f}f~fagKdLdMdNdxb6bOdPdQd7b6 Rdl bgSdcgdgTd8bUdibVdWdXdYdf Zd0d1d2d3d4d5d6d7d7 jb8 9 ! # $ kb8d9degfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgygzg9b!b#b% ' $b!d#d$dlb%d'dmb(d)d*dAgBgCgDgEgFg+d,d-d.dyb%b/d:d;d'b( =dm Gg?dHgIg@d(b[dnb]d^d_d`dg {d|d}d~daebecede) ob* + , - . pbeeJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g)b*b+b/ : ,bfegeqbheierbjekele5g6g7g8g9gmeneoepezb-bqerese.b; ten !gue#g$gve/bwesbxeyezeAe
864 self.contact = contact 2a :b;b=b?b@b[b]b^b_bo = p q r s t ? `b{bBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeAbBbCbu v Db|b}bXeYeZe0e1e2e~bacbccctbEbdcecfcFbw h 3egc4e5ehcGb@ icjckclcb mcncocpcqcrcsctcucx [ y z A B C ] vcwc6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@eHbIbJbD E Kbxcyc[e]e^e_e`e{ezcAcBcCcubLbDcEcFcMbF i |eGc}e~eHcNb^ IcJcKcLcc McNcOcPcQcRcScTcUcG _ H I J K L ` VcWcafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfObPbQbM N RbXcYcZc{ 0c1c| 2c3c4cwfxfyfzfAfBf5c6c7c8cvbSb9c!c#cTbO $cj Cf%cDfEf'cUb(c} )c*c+c,cd -c.c/c:c;c=c?c@c[cP ~ Q R S T U ab]c^cFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fVbWbXbV W Yb_c`c{cbb|c}ccb~cadbd1f2f3f4f5f6fcdddedfdwbZbgdhdid0bX jdk 7fkd8f9fld1bmddbndodpdqde rdsdtdudvdwdxdydzdY ebZ 0 1 2 3 fbAdBd!f#f$f%f'f(f)f*f+f,f-f.f/f:f;f=f?f@f[f]f^f_f2b3b4b4 5 5bCdDdEdgbFdGdhbHdIdJd`f{f|f}f~fagKdLdMdNdxb6bOdPdQd7b6 Rdl bgSdcgdgTd8bUdibVdWdXdYdf Zd0d1d2d3d4d5d6d7d7 jb8 9 ! # $ kb8d9degfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgygzg9b!b#b% ' $b!d#d$dlb%d'dmb(d)d*dAgBgCgDgEgFg+d,d-d.dyb%b/d:d;d'b( =dm Gg?dHgIg@d(b[dnb]d^d_d`dg {d|d}d~daebecede) ob* + , - . pbeeJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g)b*b+b/ : ,bfegeqbheierbjekele5g6g7g8g9gmeneoepezb-bqerese.b; ten !gue#g$gve/bwesbxeyezeAe
865 self.license_info = license_info 2a :b;b=b?b@b[b]b^b_bo = p q r s t ? `b{bBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeAbBbCbu v Db|b}bXeYeZe0e1e2e~bacbccctbEbdcecfcFbw h 3egc4e5ehcGb@ icjckclcb mcncocpcqcrcsctcucx [ y z A B C ] vcwc6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@eHbIbJbD E Kbxcyc[e]e^e_e`e{ezcAcBcCcubLbDcEcFcMbF i |eGc}e~eHcNb^ IcJcKcLcc McNcOcPcQcRcScTcUcG _ H I J K L ` VcWcafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfObPbQbM N RbXcYcZc{ 0c1c| 2c3c4cwfxfyfzfAfBf5c6c7c8cvbSb9c!c#cTbO $cj Cf%cDfEf'cUb(c} )c*c+c,cd -c.c/c:c;c=c?c@c[cP ~ Q R S T U ab]c^cFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fVbWbXbV W Yb_c`c{cbb|c}ccb~cadbd1f2f3f4f5f6fcdddedfdwbZbgdhdid0bX jdk 7fkd8f9fld1bmddbndodpdqde rdsdtdudvdwdxdydzdY ebZ 0 1 2 3 fbAdBd!f#f$f%f'f(f)f*f+f,f-f.f/f:f;f=f?f@f[f]f^f_f2b3b4b4 5 5bCdDdEdgbFdGdhbHdIdJd`f{f|f}f~fagKdLdMdNdxb6bOdPdQd7b6 Rdl bgSdcgdgTd8bUdibVdWdXdYdf Zd0d1d2d3d4d5d6d7d7 jb8 9 ! # $ kb8d9degfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgygzg9b!b#b% ' $b!d#d$dlb%d'dmb(d)d*dAgBgCgDgEgFg+d,d-d.dyb%b/d:d;d'b( =dm Gg?dHgIg@d(b[dnb]d^d_d`dg {d|d}d~daebecede) ob* + , - . pbeeJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g)b*b+b/ : ,bfegeqbheierbjekele5g6g7g8g9gmeneoepezb-bqerese.b; ten !gue#g$gve/bwesbxeyezeAe
866 self.openapi_url = openapi_url 2a :b;b=b?b@b[b]b^b_bo = p q r s t ? `b{bBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeAbBbCbu v Db|b}bXeYeZe0e1e2e~bacbccctbEbdcecfcFbw h 3egc4e5ehcGb@ icjckclcb mcncocpcqcrcsctcucx [ y z A B C ] vcwc6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@eHbIbJbD E Kbxcyc[e]e^e_e`e{ezcAcBcCcubLbDcEcFcMbF i |eGc}e~eHcNb^ IcJcKcLcc McNcOcPcQcRcScTcUcG _ H I J K L ` VcWcafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfObPbQbM N RbXcYcZc{ 0c1c| 2c3c4cwfxfyfzfAfBf5c6c7c8cvbSb9c!c#cTbO $cj Cf%cDfEf'cUb(c} )c*c+c,cd -c.c/c:c;c=c?c@c[cP ~ Q R S T U ab]c^cFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fVbWbXbV W Yb_c`c{cbb|c}ccb~cadbd1f2f3f4f5f6fcdddedfdwbZbgdhdid0bX jdk 7fkd8f9fld1bmddbndodpdqde rdsdtdudvdwdxdydzdY ebZ 0 1 2 3 fbAdBd!f#f$f%f'f(f)f*f+f,f-f.f/f:f;f=f?f@f[f]f^f_f2b3b4b4 5 5bCdDdEdgbFdGdhbHdIdJd`f{f|f}f~fagKdLdMdNdxb6bOdPdQd7b6 Rdl bgSdcgdgTd8bUdibVdWdXdYdf Zd0d1d2d3d4d5d6d7d7 jb8 9 ! # $ kb8d9degfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgygzg9b!b#b% ' $b!d#d$dlb%d'dmb(d)d*dAgBgCgDgEgFg+d,d-d.dyb%b/d:d;d'b( =dm Gg?dHgIg@d(b[dnb]d^d_d`dg {d|d}d~daebecede) ob* + , - . pbeeJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g)b*b+b/ : ,bfegeqbheierbjekele5g6g7g8g9gmeneoepezb-bqerese.b; ten !gue#g$gve/bwesbxeyezeAe
867 self.openapi_tags = openapi_tags 2a :b;b=b?b@b[b]b^b_bo = p q r s t ? `b{bBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeAbBbCbu v Db|b}bXeYeZe0e1e2e~bacbccctbEbdcecfcFbw h 3egc4e5ehcGb@ icjckclcb mcncocpcqcrcsctcucx [ y z A B C ] vcwc6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@eHbIbJbD E Kbxcyc[e]e^e_e`e{ezcAcBcCcubLbDcEcFcMbF i |eGc}e~eHcNb^ IcJcKcLcc McNcOcPcQcRcScTcUcG _ H I J K L ` VcWcafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfObPbQbM N RbXcYcZc{ 0c1c| 2c3c4cwfxfyfzfAfBf5c6c7c8cvbSb9c!c#cTbO $cj Cf%cDfEf'cUb(c} )c*c+c,cd -c.c/c:c;c=c?c@c[cP ~ Q R S T U ab]c^cFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fVbWbXbV W Yb_c`c{cbb|c}ccb~cadbd1f2f3f4f5f6fcdddedfdwbZbgdhdid0bX jdk 7fkd8f9fld1bmddbndodpdqde rdsdtdudvdwdxdydzdY ebZ 0 1 2 3 fbAdBd!f#f$f%f'f(f)f*f+f,f-f.f/f:f;f=f?f@f[f]f^f_f2b3b4b4 5 5bCdDdEdgbFdGdhbHdIdJd`f{f|f}f~fagKdLdMdNdxb6bOdPdQd7b6 Rdl bgSdcgdgTd8bUdibVdWdXdYdf Zd0d1d2d3d4d5d6d7d7 jb8 9 ! # $ kb8d9degfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgygzg9b!b#b% ' $b!d#d$dlb%d'dmb(d)d*dAgBgCgDgEgFg+d,d-d.dyb%b/d:d;d'b( =dm Gg?dHgIg@d(b[dnb]d^d_d`dg {d|d}d~daebecede) ob* + , - . pbeeJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g)b*b+b/ : ,bfegeqbheierbjekele5g6g7g8g9gmeneoepezb-bqerese.b; ten !gue#g$gve/bwesbxeyezeAe
868 self.root_path_in_servers = root_path_in_servers 2a :b;b=b?b@b[b]b^b_bo = p q r s t ? `b{bBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeAbBbCbu v Db|b}bXeYeZe0e1e2e~bacbccctbEbdcecfcFbw h 3egc4e5ehcGb@ icjckclcb mcncocpcqcrcsctcucx [ y z A B C ] vcwc6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@eHbIbJbD E Kbxcyc[e]e^e_e`e{ezcAcBcCcubLbDcEcFcMbF i |eGc}e~eHcNb^ IcJcKcLcc McNcOcPcQcRcScTcUcG _ H I J K L ` VcWcafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfObPbQbM N RbXcYcZc{ 0c1c| 2c3c4cwfxfyfzfAfBf5c6c7c8cvbSb9c!c#cTbO $cj Cf%cDfEf'cUb(c} )c*c+c,cd -c.c/c:c;c=c?c@c[cP ~ Q R S T U ab]c^cFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fVbWbXbV W Yb_c`c{cbb|c}ccb~cadbd1f2f3f4f5f6fcdddedfdwbZbgdhdid0bX jdk 7fkd8f9fld1bmddbndodpdqde rdsdtdudvdwdxdydzdY ebZ 0 1 2 3 fbAdBd!f#f$f%f'f(f)f*f+f,f-f.f/f:f;f=f?f@f[f]f^f_f2b3b4b4 5 5bCdDdEdgbFdGdhbHdIdJd`f{f|f}f~fagKdLdMdNdxb6bOdPdQd7b6 Rdl bgSdcgdgTd8bUdibVdWdXdYdf Zd0d1d2d3d4d5d6d7d7 jb8 9 ! # $ kb8d9degfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgygzg9b!b#b% ' $b!d#d$dlb%d'dmb(d)d*dAgBgCgDgEgFg+d,d-d.dyb%b/d:d;d'b( =dm Gg?dHgIg@d(b[dnb]d^d_d`dg {d|d}d~daebecede) ob* + , - . pbeeJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g)b*b+b/ : ,bfegeqbheierbjekele5g6g7g8g9gmeneoepezb-bqerese.b; ten !gue#g$gve/bwesbxeyezeAe
869 self.docs_url = docs_url 2a :b;b=b?b@b[b]b^b_bo = p q r s t ? `b{bBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeAbBbCbu v Db|b}bXeYeZe0e1e2e~bacbccctbEbdcecfcFbw h 3egc4e5ehcGb@ icjckclcb mcncocpcqcrcsctcucx [ y z A B C ] vcwc6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@eHbIbJbD E Kbxcyc[e]e^e_e`e{ezcAcBcCcubLbDcEcFcMbF i |eGc}e~eHcNb^ IcJcKcLcc McNcOcPcQcRcScTcUcG _ H I J K L ` VcWcafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfObPbQbM N RbXcYcZc{ 0c1c| 2c3c4cwfxfyfzfAfBf5c6c7c8cvbSb9c!c#cTbO $cj Cf%cDfEf'cUb(c} )c*c+c,cd -c.c/c:c;c=c?c@c[cP ~ Q R S T U ab]c^cFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fVbWbXbV W Yb_c`c{cbb|c}ccb~cadbd1f2f3f4f5f6fcdddedfdwbZbgdhdid0bX jdk 7fkd8f9fld1bmddbndodpdqde rdsdtdudvdwdxdydzdY ebZ 0 1 2 3 fbAdBd!f#f$f%f'f(f)f*f+f,f-f.f/f:f;f=f?f@f[f]f^f_f2b3b4b4 5 5bCdDdEdgbFdGdhbHdIdJd`f{f|f}f~fagKdLdMdNdxb6bOdPdQd7b6 Rdl bgSdcgdgTd8bUdibVdWdXdYdf Zd0d1d2d3d4d5d6d7d7 jb8 9 ! # $ kb8d9degfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgygzg9b!b#b% ' $b!d#d$dlb%d'dmb(d)d*dAgBgCgDgEgFg+d,d-d.dyb%b/d:d;d'b( =dm Gg?dHgIg@d(b[dnb]d^d_d`dg {d|d}d~daebecede) ob* + , - . pbeeJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g)b*b+b/ : ,bfegeqbheierbjekele5g6g7g8g9gmeneoepezb-bqerese.b; ten !gue#g$gve/bwesbxeyezeAe
870 self.redoc_url = redoc_url 2a :b;b=b?b@b[b]b^b_bo = p q r s t ? `b{bBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeAbBbCbu v Db|b}bXeYeZe0e1e2e~bacbccctbEbdcecfcFbw h 3egc4e5ehcGb@ icjckclcb mcncocpcqcrcsctcucx [ y z A B C ] vcwc6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@eHbIbJbD E Kbxcyc[e]e^e_e`e{ezcAcBcCcubLbDcEcFcMbF i |eGc}e~eHcNb^ IcJcKcLcc McNcOcPcQcRcScTcUcG _ H I J K L ` VcWcafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfObPbQbM N RbXcYcZc{ 0c1c| 2c3c4cwfxfyfzfAfBf5c6c7c8cvbSb9c!c#cTbO $cj Cf%cDfEf'cUb(c} )c*c+c,cd -c.c/c:c;c=c?c@c[cP ~ Q R S T U ab]c^cFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fVbWbXbV W Yb_c`c{cbb|c}ccb~cadbd1f2f3f4f5f6fcdddedfdwbZbgdhdid0bX jdk 7fkd8f9fld1bmddbndodpdqde rdsdtdudvdwdxdydzdY ebZ 0 1 2 3 fbAdBd!f#f$f%f'f(f)f*f+f,f-f.f/f:f;f=f?f@f[f]f^f_f2b3b4b4 5 5bCdDdEdgbFdGdhbHdIdJd`f{f|f}f~fagKdLdMdNdxb6bOdPdQd7b6 Rdl bgSdcgdgTd8bUdibVdWdXdYdf Zd0d1d2d3d4d5d6d7d7 jb8 9 ! # $ kb8d9degfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgygzg9b!b#b% ' $b!d#d$dlb%d'dmb(d)d*dAgBgCgDgEgFg+d,d-d.dyb%b/d:d;d'b( =dm Gg?dHgIg@d(b[dnb]d^d_d`dg {d|d}d~daebecede) ob* + , - . pbeeJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g)b*b+b/ : ,bfegeqbheierbjekele5g6g7g8g9gmeneoepezb-bqerese.b; ten !gue#g$gve/bwesbxeyezeAe
871 self.swagger_ui_oauth2_redirect_url = swagger_ui_oauth2_redirect_url 2a :b;b=b?b@b[b]b^b_bo = p q r s t ? `b{bBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeAbBbCbu v Db|b}bXeYeZe0e1e2e~bacbccctbEbdcecfcFbw h 3egc4e5ehcGb@ icjckclcb mcncocpcqcrcsctcucx [ y z A B C ] vcwc6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@eHbIbJbD E Kbxcyc[e]e^e_e`e{ezcAcBcCcubLbDcEcFcMbF i |eGc}e~eHcNb^ IcJcKcLcc McNcOcPcQcRcScTcUcG _ H I J K L ` VcWcafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfObPbQbM N RbXcYcZc{ 0c1c| 2c3c4cwfxfyfzfAfBf5c6c7c8cvbSb9c!c#cTbO $cj Cf%cDfEf'cUb(c} )c*c+c,cd -c.c/c:c;c=c?c@c[cP ~ Q R S T U ab]c^cFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fVbWbXbV W Yb_c`c{cbb|c}ccb~cadbd1f2f3f4f5f6fcdddedfdwbZbgdhdid0bX jdk 7fkd8f9fld1bmddbndodpdqde rdsdtdudvdwdxdydzdY ebZ 0 1 2 3 fbAdBd!f#f$f%f'f(f)f*f+f,f-f.f/f:f;f=f?f@f[f]f^f_f2b3b4b4 5 5bCdDdEdgbFdGdhbHdIdJd`f{f|f}f~fagKdLdMdNdxb6bOdPdQd7b6 Rdl bgSdcgdgTd8bUdibVdWdXdYdf Zd0d1d2d3d4d5d6d7d7 jb8 9 ! # $ kb8d9degfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgygzg9b!b#b% ' $b!d#d$dlb%d'dmb(d)d*dAgBgCgDgEgFg+d,d-d.dyb%b/d:d;d'b( =dm Gg?dHgIg@d(b[dnb]d^d_d`dg {d|d}d~daebecede) ob* + , - . pbeeJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g)b*b+b/ : ,bfegeqbheierbjekele5g6g7g8g9gmeneoepezb-bqerese.b; ten !gue#g$gve/bwesbxeyezeAe
872 self.swagger_ui_init_oauth = swagger_ui_init_oauth 2a :b;b=b?b@b[b]b^b_bo = p q r s t ? `b{bBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeAbBbCbu v Db|b}bXeYeZe0e1e2e~bacbccctbEbdcecfcFbw h 3egc4e5ehcGb@ icjckclcb mcncocpcqcrcsctcucx [ y z A B C ] vcwc6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@eHbIbJbD E Kbxcyc[e]e^e_e`e{ezcAcBcCcubLbDcEcFcMbF i |eGc}e~eHcNb^ IcJcKcLcc McNcOcPcQcRcScTcUcG _ H I J K L ` VcWcafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfObPbQbM N RbXcYcZc{ 0c1c| 2c3c4cwfxfyfzfAfBf5c6c7c8cvbSb9c!c#cTbO $cj Cf%cDfEf'cUb(c} )c*c+c,cd -c.c/c:c;c=c?c@c[cP ~ Q R S T U ab]c^cFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fVbWbXbV W Yb_c`c{cbb|c}ccb~cadbd1f2f3f4f5f6fcdddedfdwbZbgdhdid0bX jdk 7fkd8f9fld1bmddbndodpdqde rdsdtdudvdwdxdydzdY ebZ 0 1 2 3 fbAdBd!f#f$f%f'f(f)f*f+f,f-f.f/f:f;f=f?f@f[f]f^f_f2b3b4b4 5 5bCdDdEdgbFdGdhbHdIdJd`f{f|f}f~fagKdLdMdNdxb6bOdPdQd7b6 Rdl bgSdcgdgTd8bUdibVdWdXdYdf Zd0d1d2d3d4d5d6d7d7 jb8 9 ! # $ kb8d9degfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgygzg9b!b#b% ' $b!d#d$dlb%d'dmb(d)d*dAgBgCgDgEgFg+d,d-d.dyb%b/d:d;d'b( =dm Gg?dHgIg@d(b[dnb]d^d_d`dg {d|d}d~daebecede) ob* + , - . pbeeJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g)b*b+b/ : ,bfegeqbheierbjekele5g6g7g8g9gmeneoepezb-bqerese.b; ten !gue#g$gve/bwesbxeyezeAe
873 self.swagger_ui_parameters = swagger_ui_parameters 2a :b;b=b?b@b[b]b^b_bo = p q r s t ? `b{bBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeAbBbCbu v Db|b}bXeYeZe0e1e2e~bacbccctbEbdcecfcFbw h 3egc4e5ehcGb@ icjckclcb mcncocpcqcrcsctcucx [ y z A B C ] vcwc6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@eHbIbJbD E Kbxcyc[e]e^e_e`e{ezcAcBcCcubLbDcEcFcMbF i |eGc}e~eHcNb^ IcJcKcLcc McNcOcPcQcRcScTcUcG _ H I J K L ` VcWcafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfObPbQbM N RbXcYcZc{ 0c1c| 2c3c4cwfxfyfzfAfBf5c6c7c8cvbSb9c!c#cTbO $cj Cf%cDfEf'cUb(c} )c*c+c,cd -c.c/c:c;c=c?c@c[cP ~ Q R S T U ab]c^cFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fVbWbXbV W Yb_c`c{cbb|c}ccb~cadbd1f2f3f4f5f6fcdddedfdwbZbgdhdid0bX jdk 7fkd8f9fld1bmddbndodpdqde rdsdtdudvdwdxdydzdY ebZ 0 1 2 3 fbAdBd!f#f$f%f'f(f)f*f+f,f-f.f/f:f;f=f?f@f[f]f^f_f2b3b4b4 5 5bCdDdEdgbFdGdhbHdIdJd`f{f|f}f~fagKdLdMdNdxb6bOdPdQd7b6 Rdl bgSdcgdgTd8bUdibVdWdXdYdf Zd0d1d2d3d4d5d6d7d7 jb8 9 ! # $ kb8d9degfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgygzg9b!b#b% ' $b!d#d$dlb%d'dmb(d)d*dAgBgCgDgEgFg+d,d-d.dyb%b/d:d;d'b( =dm Gg?dHgIg@d(b[dnb]d^d_d`dg {d|d}d~daebecede) ob* + , - . pbeeJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g)b*b+b/ : ,bfegeqbheierbjekele5g6g7g8g9gmeneoepezb-bqerese.b; ten !gue#g$gve/bwesbxeyezeAe
874 self.servers = servers or [] 2a :b;b=b?b@b[b]b^b_bo = p q r s t ? `b{bBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeAbBbCbu v Db|b}bXeYeZe0e1e2e~bacbccctbEbdcecfcFbw h 3egc4e5ehcGb@ icjckclcb mcncocpcqcrcsctcucx [ y z A B C ] vcwc6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@eHbIbJbD E Kbxcyc[e]e^e_e`e{ezcAcBcCcubLbDcEcFcMbF i |eGc}e~eHcNb^ IcJcKcLcc McNcOcPcQcRcScTcUcG _ H I J K L ` VcWcafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfObPbQbM N RbXcYcZc{ 0c1c| 2c3c4cwfxfyfzfAfBf5c6c7c8cvbSb9c!c#cTbO $cj Cf%cDfEf'cUb(c} )c*c+c,cd -c.c/c:c;c=c?c@c[cP ~ Q R S T U ab]c^cFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fVbWbXbV W Yb_c`c{cbb|c}ccb~cadbd1f2f3f4f5f6fcdddedfdwbZbgdhdid0bX jdk 7fkd8f9fld1bmddbndodpdqde rdsdtdudvdwdxdydzdY ebZ 0 1 2 3 fbAdBd!f#f$f%f'f(f)f*f+f,f-f.f/f:f;f=f?f@f[f]f^f_f2b3b4b4 5 5bCdDdEdgbFdGdhbHdIdJd`f{f|f}f~fagKdLdMdNdxb6bOdPdQd7b6 Rdl bgSdcgdgTd8bUdibVdWdXdYdf Zd0d1d2d3d4d5d6d7d7 jb8 9 ! # $ kb8d9degfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgygzg9b!b#b% ' $b!d#d$dlb%d'dmb(d)d*dAgBgCgDgEgFg+d,d-d.dyb%b/d:d;d'b( =dm Gg?dHgIg@d(b[dnb]d^d_d`dg {d|d}d~daebecede) ob* + , - . pbeeJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g)b*b+b/ : ,bfegeqbheierbjekele5g6g7g8g9gmeneoepezb-bqerese.b; ten !gue#g$gve/bwesbxeyezeAe
875 self.separate_input_output_schemas = separate_input_output_schemas 2a :b;b=b?b@b[b]b^b_bo = p q r s t ? `b{bBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeAbBbCbu v Db|b}bXeYeZe0e1e2e~bacbccctbEbdcecfcFbw h 3egc4e5ehcGb@ icjckclcb mcncocpcqcrcsctcucx [ y z A B C ] vcwc6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@eHbIbJbD E Kbxcyc[e]e^e_e`e{ezcAcBcCcubLbDcEcFcMbF i |eGc}e~eHcNb^ IcJcKcLcc McNcOcPcQcRcScTcUcG _ H I J K L ` VcWcafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfObPbQbM N RbXcYcZc{ 0c1c| 2c3c4cwfxfyfzfAfBf5c6c7c8cvbSb9c!c#cTbO $cj Cf%cDfEf'cUb(c} )c*c+c,cd -c.c/c:c;c=c?c@c[cP ~ Q R S T U ab]c^cFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fVbWbXbV W Yb_c`c{cbb|c}ccb~cadbd1f2f3f4f5f6fcdddedfdwbZbgdhdid0bX jdk 7fkd8f9fld1bmddbndodpdqde rdsdtdudvdwdxdydzdY ebZ 0 1 2 3 fbAdBd!f#f$f%f'f(f)f*f+f,f-f.f/f:f;f=f?f@f[f]f^f_f2b3b4b4 5 5bCdDdEdgbFdGdhbHdIdJd`f{f|f}f~fagKdLdMdNdxb6bOdPdQd7b6 Rdl bgSdcgdgTd8bUdibVdWdXdYdf Zd0d1d2d3d4d5d6d7d7 jb8 9 ! # $ kb8d9degfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgygzg9b!b#b% ' $b!d#d$dlb%d'dmb(d)d*dAgBgCgDgEgFg+d,d-d.dyb%b/d:d;d'b( =dm Gg?dHgIg@d(b[dnb]d^d_d`dg {d|d}d~daebecede) ob* + , - . pbeeJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g)b*b+b/ : ,bfegeqbheierbjekele5g6g7g8g9gmeneoepezb-bqerese.b; ten !gue#g$gve/bwesbxeyezeAe
876 self.openapi_external_docs = openapi_external_docs 2a :b;b=b?b@b[b]b^b_bo = p q r s t ? `b{bBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeAbBbCbu v Db|b}bXeYeZe0e1e2e~bacbccctbEbdcecfcFbw h 3egc4e5ehcGb@ icjckclcb mcncocpcqcrcsctcucx [ y z A B C ] vcwc6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@eHbIbJbD E Kbxcyc[e]e^e_e`e{ezcAcBcCcubLbDcEcFcMbF i |eGc}e~eHcNb^ IcJcKcLcc McNcOcPcQcRcScTcUcG _ H I J K L ` VcWcafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfObPbQbM N RbXcYcZc{ 0c1c| 2c3c4cwfxfyfzfAfBf5c6c7c8cvbSb9c!c#cTbO $cj Cf%cDfEf'cUb(c} )c*c+c,cd -c.c/c:c;c=c?c@c[cP ~ Q R S T U ab]c^cFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fVbWbXbV W Yb_c`c{cbb|c}ccb~cadbd1f2f3f4f5f6fcdddedfdwbZbgdhdid0bX jdk 7fkd8f9fld1bmddbndodpdqde rdsdtdudvdwdxdydzdY ebZ 0 1 2 3 fbAdBd!f#f$f%f'f(f)f*f+f,f-f.f/f:f;f=f?f@f[f]f^f_f2b3b4b4 5 5bCdDdEdgbFdGdhbHdIdJd`f{f|f}f~fagKdLdMdNdxb6bOdPdQd7b6 Rdl bgSdcgdgTd8bUdibVdWdXdYdf Zd0d1d2d3d4d5d6d7d7 jb8 9 ! # $ kb8d9degfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgygzg9b!b#b% ' $b!d#d$dlb%d'dmb(d)d*dAgBgCgDgEgFg+d,d-d.dyb%b/d:d;d'b( =dm Gg?dHgIg@d(b[dnb]d^d_d`dg {d|d}d~daebecede) ob* + , - . pbeeJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g)b*b+b/ : ,bfegeqbheierbjekele5g6g7g8g9gmeneoepezb-bqerese.b; ten !gue#g$gve/bwesbxeyezeAe
877 self.extra = extra 2a :b;b=b?b@b[b]b^b_bo = p q r s t ? `b{bBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeAbBbCbu v Db|b}bXeYeZe0e1e2e~bacbccctbEbdcecfcFbw h 3egc4e5ehcGb@ icjckclcb mcncocpcqcrcsctcucx [ y z A B C ] vcwc6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@eHbIbJbD E Kbxcyc[e]e^e_e`e{ezcAcBcCcubLbDcEcFcMbF i |eGc}e~eHcNb^ IcJcKcLcc McNcOcPcQcRcScTcUcG _ H I J K L ` VcWcafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfObPbQbM N RbXcYcZc{ 0c1c| 2c3c4cwfxfyfzfAfBf5c6c7c8cvbSb9c!c#cTbO $cj Cf%cDfEf'cUb(c} )c*c+c,cd -c.c/c:c;c=c?c@c[cP ~ Q R S T U ab]c^cFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fVbWbXbV W Yb_c`c{cbb|c}ccb~cadbd1f2f3f4f5f6fcdddedfdwbZbgdhdid0bX jdk 7fkd8f9fld1bmddbndodpdqde rdsdtdudvdwdxdydzdY ebZ 0 1 2 3 fbAdBd!f#f$f%f'f(f)f*f+f,f-f.f/f:f;f=f?f@f[f]f^f_f2b3b4b4 5 5bCdDdEdgbFdGdhbHdIdJd`f{f|f}f~fagKdLdMdNdxb6bOdPdQd7b6 Rdl bgSdcgdgTd8bUdibVdWdXdYdf Zd0d1d2d3d4d5d6d7d7 jb8 9 ! # $ kb8d9degfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgygzg9b!b#b% ' $b!d#d$dlb%d'dmb(d)d*dAgBgCgDgEgFg+d,d-d.dyb%b/d:d;d'b( =dm Gg?dHgIg@d(b[dnb]d^d_d`dg {d|d}d~daebecede) ob* + , - . pbeeJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g)b*b+b/ : ,bfegeqbheierbjekele5g6g7g8g9gmeneoepezb-bqerese.b; ten !gue#g$gve/bwesbxeyezeAe
878 self.openapi_version: Annotated[ 2a :b;b=b?b@b[b]b^b_bo = p q r s t ? `b{bBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeAbBbCbu v Db|b}bXeYeZe0e1e2e~bacbccctbEbdcecfcFbw h 3egc4e5ehcGb@ icjckclcb mcncocpcqcrcsctcucx [ y z A B C ] vcwc6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@eHbIbJbD E Kbxcyc[e]e^e_e`e{ezcAcBcCcubLbDcEcFcMbF i |eGc}e~eHcNb^ IcJcKcLcc McNcOcPcQcRcScTcUcG _ H I J K L ` VcWcafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfObPbQbM N RbXcYcZc{ 0c1c| 2c3c4cwfxfyfzfAfBf5c6c7c8cvbSb9c!c#cTbO $cj Cf%cDfEf'cUb(c} )c*c+c,cd -c.c/c:c;c=c?c@c[cP ~ Q R S T U ab]c^cFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fVbWbXbV W Yb_c`c{cbb|c}ccb~cadbd1f2f3f4f5f6fcdddedfdwbZbgdhdid0bX jdk 7fkd8f9fld1bmddbndodpdqde rdsdtdudvdwdxdydzdY ebZ 0 1 2 3 fbAdBd!f#f$f%f'f(f)f*f+f,f-f.f/f:f;f=f?f@f[f]f^f_f2b3b4b4 5 5bCdDdEdgbFdGdhbHdIdJd`f{f|f}f~fagKdLdMdNdxb6bOdPdQd7b6 Rdl bgSdcgdgTd8bUdibVdWdXdYdf Zd0d1d2d3d4d5d6d7d7 jb8 9 ! # $ kb8d9degfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgygzg9b!b#b% ' $b!d#d$dlb%d'dmb(d)d*dAgBgCgDgEgFg+d,d-d.dyb%b/d:d;d'b( =dm Gg?dHgIg@d(b[dnb]d^d_d`dg {d|d}d~daebecede) ob* + , - . pbeeJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g)b*b+b/ : ,bfegeqbheierbjekele5g6g7g8g9gmeneoepezb-bqerese.b; ten !gue#g$gve/bwesbxeyezeAe
879 str,
880 Doc(
881 """
882 The version string of OpenAPI.
884 FastAPI will generate OpenAPI version 3.1.0, and will output that as
885 the OpenAPI version. But some tools, even though they might be
886 compatible with OpenAPI 3.1.0, might not recognize it as a valid.
888 So you could override this value to trick those tools into using
889 the generated OpenAPI. Have in mind that this is a hack. But if you
890 avoid using features added in OpenAPI 3.1.0, it might work for your
891 use case.
893 This is not passed as a parameter to the `FastAPI` class to avoid
894 giving the false idea that FastAPI would generate a different OpenAPI
895 schema. It is only available as an attribute.
897 **Example**
899 ```python
900 from fastapi import FastAPI
902 app = FastAPI()
904 app.openapi_version = "3.0.2"
905 ```
906 """
907 ),
908 ] = "3.1.0"
909 self.openapi_schema: Optional[Dict[str, Any]] = None 2a :b;b=b?b@b[b]b^b_bo = p q r s t ? `b{bBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeAbBbCbu v Db|b}bXeYeZe0e1e2e~bacbccctbEbdcecfcFbw h 3egc4e5ehcGb@ icjckclcb mcncocpcqcrcsctcucx [ y z A B C ] vcwc6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@eHbIbJbD E Kbxcyc[e]e^e_e`e{ezcAcBcCcubLbDcEcFcMbF i |eGc}e~eHcNb^ IcJcKcLcc McNcOcPcQcRcScTcUcG _ H I J K L ` VcWcafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfObPbQbM N RbXcYcZc{ 0c1c| 2c3c4cwfxfyfzfAfBf5c6c7c8cvbSb9c!c#cTbO $cj Cf%cDfEf'cUb(c} )c*c+c,cd -c.c/c:c;c=c?c@c[cP ~ Q R S T U ab]c^cFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fVbWbXbV W Yb_c`c{cbb|c}ccb~cadbd1f2f3f4f5f6fcdddedfdwbZbgdhdid0bX jdk 7fkd8f9fld1bmddbndodpdqde rdsdtdudvdwdxdydzdY ebZ 0 1 2 3 fbAdBd!f#f$f%f'f(f)f*f+f,f-f.f/f:f;f=f?f@f[f]f^f_f2b3b4b4 5 5bCdDdEdgbFdGdhbHdIdJd`f{f|f}f~fagKdLdMdNdxb6bOdPdQd7b6 Rdl bgSdcgdgTd8bUdibVdWdXdYdf Zd0d1d2d3d4d5d6d7d7 jb8 9 ! # $ kb8d9degfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgygzg9b!b#b% ' $b!d#d$dlb%d'dmb(d)d*dAgBgCgDgEgFg+d,d-d.dyb%b/d:d;d'b( =dm Gg?dHgIg@d(b[dnb]d^d_d`dg {d|d}d~daebecede) ob* + , - . pbeeJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g)b*b+b/ : ,bfegeqbheierbjekele5g6g7g8g9gmeneoepezb-bqerese.b; ten !gue#g$gve/bwesbxeyezeAe
910 if self.openapi_url: 2a :b;b=b?b@b[b]b^b_bo = p q r s t ? `b{bBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeAbBbCbu v Db|b}bXeYeZe0e1e2e~bacbccctbEbdcecfcFbw h 3egc4e5ehcGb@ icjckclcb mcncocpcqcrcsctcucx [ y z A B C ] vcwc6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@eHbIbJbD E Kbxcyc[e]e^e_e`e{ezcAcBcCcubLbDcEcFcMbF i |eGc}e~eHcNb^ IcJcKcLcc McNcOcPcQcRcScTcUcG _ H I J K L ` VcWcafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfObPbQbM N RbXcYcZc{ 0c1c| 2c3c4cwfxfyfzfAfBf5c6c7c8cvbSb9c!c#cTbO $cj Cf%cDfEf'cUb(c} )c*c+c,cd -c.c/c:c;c=c?c@c[cP ~ Q R S T U ab]c^cFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fVbWbXbV W Yb_c`c{cbb|c}ccb~cadbd1f2f3f4f5f6fcdddedfdwbZbgdhdid0bX jdk 7fkd8f9fld1bmddbndodpdqde rdsdtdudvdwdxdydzdY ebZ 0 1 2 3 fbAdBd!f#f$f%f'f(f)f*f+f,f-f.f/f:f;f=f?f@f[f]f^f_f2b3b4b4 5 5bCdDdEdgbFdGdhbHdIdJd`f{f|f}f~fagKdLdMdNdxb6bOdPdQd7b6 Rdl bgSdcgdgTd8bUdibVdWdXdYdf Zd0d1d2d3d4d5d6d7d7 jb8 9 ! # $ kb8d9degfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgygzg9b!b#b% ' $b!d#d$dlb%d'dmb(d)d*dAgBgCgDgEgFg+d,d-d.dyb%b/d:d;d'b( =dm Gg?dHgIg@d(b[dnb]d^d_d`dg {d|d}d~daebecede) ob* + , - . pbeeJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g)b*b+b/ : ,bfegeqbheierbjekele5g6g7g8g9gmeneoepezb-bqerese.b; ten !gue#g$gve/bwesbxeyezeAe
911 assert self.title, "A title must be provided for OpenAPI, e.g.: 'My API'" 2a :b;b=b?b@b[b]b^b_bo = p q r s t ? `b{bBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeAbBbCbu v Db|b}bXeYeZe0e1e2e~bacbccctbEbdcecfcFbw h gc4e5ehcGb@ icjckclcb mcncocpcqcrcsctcucx [ y z A B C ] vcwc6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@eHbIbJbD E Kbxcyc[e]e^e_e`e{ezcAcBcCcubLbDcEcFcMbF i Gc}e~eHcNb^ IcJcKcLcc McNcOcPcQcRcScTcUcG _ H I J K L ` VcWcafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfObPbQbM N RbXcYcZc{ 0c1c| 2c3c4cwfxfyfzfAfBf5c6c7c8cvbSb9c!c#cTbO $cj %cDfEf'cUb(c} )c*c+c,cd -c.c/c:c;c=c?c@c[cP ~ Q R S T U ab]c^cFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fVbWbXbV W Yb_c`c{cbb|c}ccb~cadbd1f2f3f4f5f6fcdddedfdwbZbgdhdid0bX jdk kd8f9fld1bmddbndodpdqde rdsdtdudvdwdxdydzdY ebZ 0 1 2 3 fbAdBd!f#f$f%f'f(f)f*f+f,f-f.f/f:f;f=f?f@f[f]f^f_f2b3b4b4 5 5bCdDdEdgbFdGdhbHdIdJd`f{f|f}f~fagKdLdMdNdxb6bOdPdQd7b6 Rdl SdcgdgTd8bUdibVdWdXdYdf Zd0d1d2d3d4d5d6d7d7 jb8 9 ! # $ kb8d9degfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgygzg9b!b#b% ' $b!d#d$dlb%d'dmb(d)d*dAgBgCgDgEgFg+d,d-d.dyb%b/d:d;d'b( =dm ?dHgIg@d(b[dnb]d^d_d`dg {d|d}d~daebecede) ob* + , - . pbeeJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g)b*b+b/ : ,bfegeqbheierbjekele5g6g7g8g9gmeneoepezb-bqerese.b; ten ue#g$gve/bwesbxeyezeAe
912 assert self.version, "A version must be provided for OpenAPI, e.g.: '2.1.0'" 2a :b;b=b?b@b[b]b^b_bo = p q r s t ? `b{bBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeAbBbCbu v Db|b}bXeYeZe0e1e2e~bacbccctbEbdcecfcFbw h gc4e5ehcGb@ icjckclcb mcncocpcqcrcsctcucx [ y z A B C ] vcwc6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@eHbIbJbD E Kbxcyc[e]e^e_e`e{ezcAcBcCcubLbDcEcFcMbF i Gc}e~eHcNb^ IcJcKcLcc McNcOcPcQcRcScTcUcG _ H I J K L ` VcWcafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfObPbQbM N RbXcYcZc{ 0c1c| 2c3c4cwfxfyfzfAfBf5c6c7c8cvbSb9c!c#cTbO $cj %cDfEf'cUb(c} )c*c+c,cd -c.c/c:c;c=c?c@c[cP ~ Q R S T U ab]c^cFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fVbWbXbV W Yb_c`c{cbb|c}ccb~cadbd1f2f3f4f5f6fcdddedfdwbZbgdhdid0bX jdk kd8f9fld1bmddbndodpdqde rdsdtdudvdwdxdydzdY ebZ 0 1 2 3 fbAdBd!f#f$f%f'f(f)f*f+f,f-f.f/f:f;f=f?f@f[f]f^f_f2b3b4b4 5 5bCdDdEdgbFdGdhbHdIdJd`f{f|f}f~fagKdLdMdNdxb6bOdPdQd7b6 Rdl SdcgdgTd8bUdibVdWdXdYdf Zd0d1d2d3d4d5d6d7d7 jb8 9 ! # $ kb8d9degfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgygzg9b!b#b% ' $b!d#d$dlb%d'dmb(d)d*dAgBgCgDgEgFg+d,d-d.dyb%b/d:d;d'b( =dm ?dHgIg@d(b[dnb]d^d_d`dg {d|d}d~daebecede) ob* + , - . pbeeJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g)b*b+b/ : ,bfegeqbheierbjekele5g6g7g8g9gmeneoepezb-bqerese.b; ten ue#g$gve/bwesbxeyezeAe
913 # TODO: remove when discarding the openapi_prefix parameter
914 if openapi_prefix: 2a :b;b=b?b@b[b]b^b_bo = p q r s t ? `b{bBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeAbBbCbu v Db|b}bXeYeZe0e1e2e~bacbccctbEbdcecfcFbw h 3egc4e5ehcGb@ icjckclcb mcncocpcqcrcsctcucx [ y z A B C ] vcwc6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@eHbIbJbD E Kbxcyc[e]e^e_e`e{ezcAcBcCcubLbDcEcFcMbF i |eGc}e~eHcNb^ IcJcKcLcc McNcOcPcQcRcScTcUcG _ H I J K L ` VcWcafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfObPbQbM N RbXcYcZc{ 0c1c| 2c3c4cwfxfyfzfAfBf5c6c7c8cvbSb9c!c#cTbO $cj Cf%cDfEf'cUb(c} )c*c+c,cd -c.c/c:c;c=c?c@c[cP ~ Q R S T U ab]c^cFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fVbWbXbV W Yb_c`c{cbb|c}ccb~cadbd1f2f3f4f5f6fcdddedfdwbZbgdhdid0bX jdk 7fkd8f9fld1bmddbndodpdqde rdsdtdudvdwdxdydzdY ebZ 0 1 2 3 fbAdBd!f#f$f%f'f(f)f*f+f,f-f.f/f:f;f=f?f@f[f]f^f_f2b3b4b4 5 5bCdDdEdgbFdGdhbHdIdJd`f{f|f}f~fagKdLdMdNdxb6bOdPdQd7b6 Rdl bgSdcgdgTd8bUdibVdWdXdYdf Zd0d1d2d3d4d5d6d7d7 jb8 9 ! # $ kb8d9degfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgygzg9b!b#b% ' $b!d#d$dlb%d'dmb(d)d*dAgBgCgDgEgFg+d,d-d.dyb%b/d:d;d'b( =dm Gg?dHgIg@d(b[dnb]d^d_d`dg {d|d}d~daebecede) ob* + , - . pbeeJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g)b*b+b/ : ,bfegeqbheierbjekele5g6g7g8g9gmeneoepezb-bqerese.b; ten !gue#g$gve/bwesbxeyezeAe
915 logger.warning( 1abcdefg
916 '"openapi_prefix" has been deprecated in favor of "root_path", which '
917 "follows more closely the ASGI standard, is simpler, and more "
918 "automatic. Check the docs at "
919 "https://fastapi.tiangolo.com/advanced/sub-applications/"
920 )
921 self.webhooks: Annotated[ 2a :b;b=b?b@b[b]b^b_bo = p q r s t ? `b{bBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeAbBbCbu v Db|b}bXeYeZe0e1e2e~bacbccctbEbdcecfcFbw h 3egc4e5ehcGb@ icjckclcb mcncocpcqcrcsctcucx [ y z A B C ] vcwc6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@eHbIbJbD E Kbxcyc[e]e^e_e`e{ezcAcBcCcubLbDcEcFcMbF i |eGc}e~eHcNb^ IcJcKcLcc McNcOcPcQcRcScTcUcG _ H I J K L ` VcWcafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfObPbQbM N RbXcYcZc{ 0c1c| 2c3c4cwfxfyfzfAfBf5c6c7c8cvbSb9c!c#cTbO $cj Cf%cDfEf'cUb(c} )c*c+c,cd -c.c/c:c;c=c?c@c[cP ~ Q R S T U ab]c^cFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fVbWbXbV W Yb_c`c{cbb|c}ccb~cadbd1f2f3f4f5f6fcdddedfdwbZbgdhdid0bX jdk 7fkd8f9fld1bmddbndodpdqde rdsdtdudvdwdxdydzdY ebZ 0 1 2 3 fbAdBd!f#f$f%f'f(f)f*f+f,f-f.f/f:f;f=f?f@f[f]f^f_f2b3b4b4 5 5bCdDdEdgbFdGdhbHdIdJd`f{f|f}f~fagKdLdMdNdxb6bOdPdQd7b6 Rdl bgSdcgdgTd8bUdibVdWdXdYdf Zd0d1d2d3d4d5d6d7d7 jb8 9 ! # $ kb8d9degfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgygzg9b!b#b% ' $b!d#d$dlb%d'dmb(d)d*dAgBgCgDgEgFg+d,d-d.dyb%b/d:d;d'b( =dm Gg?dHgIg@d(b[dnb]d^d_d`dg {d|d}d~daebecede) ob* + , - . pbeeJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g)b*b+b/ : ,bfegeqbheierbjekele5g6g7g8g9gmeneoepezb-bqerese.b; ten !gue#g$gve/bwesbxeyezeAe
922 routing.APIRouter,
923 Doc(
924 """
925 The `app.webhooks` attribute is an `APIRouter` with the *path
926 operations* that will be used just for documentation of webhooks.
928 Read more about it in the
929 [FastAPI docs for OpenAPI Webhooks](https://fastapi.tiangolo.com/advanced/openapi-webhooks/).
930 """
931 ),
932 ] = webhooks or routing.APIRouter()
933 self.root_path = root_path or openapi_prefix 2a :b;b=b?b@b[b]b^b_bo = p q r s t ? `b{bBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeAbBbCbu v Db|b}bXeYeZe0e1e2e~bacbccctbEbdcecfcFbw h 3egc4e5ehcGb@ icjckclcb mcncocpcqcrcsctcucx [ y z A B C ] vcwc6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@eHbIbJbD E Kbxcyc[e]e^e_e`e{ezcAcBcCcubLbDcEcFcMbF i |eGc}e~eHcNb^ IcJcKcLcc McNcOcPcQcRcScTcUcG _ H I J K L ` VcWcafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfObPbQbM N RbXcYcZc{ 0c1c| 2c3c4cwfxfyfzfAfBf5c6c7c8cvbSb9c!c#cTbO $cj Cf%cDfEf'cUb(c} )c*c+c,cd -c.c/c:c;c=c?c@c[cP ~ Q R S T U ab]c^cFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fVbWbXbV W Yb_c`c{cbb|c}ccb~cadbd1f2f3f4f5f6fcdddedfdwbZbgdhdid0bX jdk 7fkd8f9fld1bmddbndodpdqde rdsdtdudvdwdxdydzdY ebZ 0 1 2 3 fbAdBd!f#f$f%f'f(f)f*f+f,f-f.f/f:f;f=f?f@f[f]f^f_f2b3b4b4 5 5bCdDdEdgbFdGdhbHdIdJd`f{f|f}f~fagKdLdMdNdxb6bOdPdQd7b6 Rdl bgSdcgdgTd8bUdibVdWdXdYdf Zd0d1d2d3d4d5d6d7d7 jb8 9 ! # $ kb8d9degfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgygzg9b!b#b% ' $b!d#d$dlb%d'dmb(d)d*dAgBgCgDgEgFg+d,d-d.dyb%b/d:d;d'b( =dm Gg?dHgIg@d(b[dnb]d^d_d`dg {d|d}d~daebecede) ob* + , - . pbeeJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g)b*b+b/ : ,bfegeqbheierbjekele5g6g7g8g9gmeneoepezb-bqerese.b; ten !gue#g$gve/bwesbxeyezeAe
934 self.state: Annotated[ 2a :b;b=b?b@b[b]b^b_bo = p q r s t ? `b{bBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeAbBbCbu v Db|b}bXeYeZe0e1e2e~bacbccctbEbdcecfcFbw h 3egc4e5ehcGb@ icjckclcb mcncocpcqcrcsctcucx [ y z A B C ] vcwc6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@eHbIbJbD E Kbxcyc[e]e^e_e`e{ezcAcBcCcubLbDcEcFcMbF i |eGc}e~eHcNb^ IcJcKcLcc McNcOcPcQcRcScTcUcG _ H I J K L ` VcWcafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfObPbQbM N RbXcYcZc{ 0c1c| 2c3c4cwfxfyfzfAfBf5c6c7c8cvbSb9c!c#cTbO $cj Cf%cDfEf'cUb(c} )c*c+c,cd -c.c/c:c;c=c?c@c[cP ~ Q R S T U ab]c^cFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fVbWbXbV W Yb_c`c{cbb|c}ccb~cadbd1f2f3f4f5f6fcdddedfdwbZbgdhdid0bX jdk 7fkd8f9fld1bmddbndodpdqde rdsdtdudvdwdxdydzdY ebZ 0 1 2 3 fbAdBd!f#f$f%f'f(f)f*f+f,f-f.f/f:f;f=f?f@f[f]f^f_f2b3b4b4 5 5bCdDdEdgbFdGdhbHdIdJd`f{f|f}f~fagKdLdMdNdxb6bOdPdQd7b6 Rdl bgSdcgdgTd8bUdibVdWdXdYdf Zd0d1d2d3d4d5d6d7d7 jb8 9 ! # $ kb8d9degfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgygzg9b!b#b% ' $b!d#d$dlb%d'dmb(d)d*dAgBgCgDgEgFg+d,d-d.dyb%b/d:d;d'b( =dm Gg?dHgIg@d(b[dnb]d^d_d`dg {d|d}d~daebecede) ob* + , - . pbeeJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g)b*b+b/ : ,bfegeqbheierbjekele5g6g7g8g9gmeneoepezb-bqerese.b; ten !gue#g$gve/bwesbxeyezeAe
935 State,
936 Doc(
937 """
938 A state object for the application. This is the same object for the
939 entire application, it doesn't change from request to request.
941 You normally wouldn't use this in FastAPI, for most of the cases you
942 would instead use FastAPI dependencies.
944 This is simply inherited from Starlette.
946 Read more about it in the
947 [Starlette docs for Applications](https://www.starlette.dev/applications/#storing-state-on-the-app-instance).
948 """
949 ),
950 ] = State()
951 self.dependency_overrides: Annotated[ 2a :b;b=b?b@b[b]b^b_bo = p q r s t ? `b{bBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeAbBbCbu v Db|b}bXeYeZe0e1e2e~bacbccctbEbdcecfcFbw h 3egc4e5ehcGb@ icjckclcb mcncocpcqcrcsctcucx [ y z A B C ] vcwc6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@eHbIbJbD E Kbxcyc[e]e^e_e`e{ezcAcBcCcubLbDcEcFcMbF i |eGc}e~eHcNb^ IcJcKcLcc McNcOcPcQcRcScTcUcG _ H I J K L ` VcWcafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfObPbQbM N RbXcYcZc{ 0c1c| 2c3c4cwfxfyfzfAfBf5c6c7c8cvbSb9c!c#cTbO $cj Cf%cDfEf'cUb(c} )c*c+c,cd -c.c/c:c;c=c?c@c[cP ~ Q R S T U ab]c^cFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fVbWbXbV W Yb_c`c{cbb|c}ccb~cadbd1f2f3f4f5f6fcdddedfdwbZbgdhdid0bX jdk 7fkd8f9fld1bmddbndodpdqde rdsdtdudvdwdxdydzdY ebZ 0 1 2 3 fbAdBd!f#f$f%f'f(f)f*f+f,f-f.f/f:f;f=f?f@f[f]f^f_f2b3b4b4 5 5bCdDdEdgbFdGdhbHdIdJd`f{f|f}f~fagKdLdMdNdxb6bOdPdQd7b6 Rdl bgSdcgdgTd8bUdibVdWdXdYdf Zd0d1d2d3d4d5d6d7d7 jb8 9 ! # $ kb8d9degfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgygzg9b!b#b% ' $b!d#d$dlb%d'dmb(d)d*dAgBgCgDgEgFg+d,d-d.dyb%b/d:d;d'b( =dm Gg?dHgIg@d(b[dnb]d^d_d`dg {d|d}d~daebecede) ob* + , - . pbeeJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g)b*b+b/ : ,bfegeqbheierbjekele5g6g7g8g9gmeneoepezb-bqerese.b; ten !gue#g$gve/bwesbxeyezeAe
952 Dict[Callable[..., Any], Callable[..., Any]],
953 Doc(
954 """
955 A dictionary with overrides for the dependencies.
957 Each key is the original dependency callable, and the value is the
958 actual dependency that should be called.
960 This is for testing, to replace expensive dependencies with testing
961 versions.
963 Read more about it in the
964 [FastAPI docs for Testing Dependencies with Overrides](https://fastapi.tiangolo.com/advanced/testing-dependencies/).
965 """
966 ),
967 ] = {}
968 self.router: routing.APIRouter = routing.APIRouter( 2a :b;b=b?b@b[b]b^b_bo = p q r s t ? `b{bBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeAbBbCbu v Db|b}bXeYeZe0e1e2e~bacbccctbEbdcecfcFbw h 3egc4e5ehcGb@ icjckclcb mcncocpcqcrcsctcucx [ y z A B C ] vcwc6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@eHbIbJbD E Kbxcyc[e]e^e_e`e{ezcAcBcCcubLbDcEcFcMbF i |eGc}e~eHcNb^ IcJcKcLcc McNcOcPcQcRcScTcUcG _ H I J K L ` VcWcafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfObPbQbM N RbXcYcZc{ 0c1c| 2c3c4cwfxfyfzfAfBf5c6c7c8cvbSb9c!c#cTbO $cj Cf%cDfEf'cUb(c} )c*c+c,cd -c.c/c:c;c=c?c@c[cP ~ Q R S T U ab]c^cFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fVbWbXbV W Yb_c`c{cbb|c}ccb~cadbd1f2f3f4f5f6fcdddedfdwbZbgdhdid0bX jdk 7fkd8f9fld1bmddbndodpdqde rdsdtdudvdwdxdydzdY ebZ 0 1 2 3 fbAdBd!f#f$f%f'f(f)f*f+f,f-f.f/f:f;f=f?f@f[f]f^f_f2b3b4b4 5 5bCdDdEdgbFdGdhbHdIdJd`f{f|f}f~fagKdLdMdNdxb6bOdPdQd7b6 Rdl bgSdcgdgTd8bUdibVdWdXdYdf Zd0d1d2d3d4d5d6d7d7 jb8 9 ! # $ kb8d9degfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgygzg9b!b#b% ' $b!d#d$dlb%d'dmb(d)d*dAgBgCgDgEgFg+d,d-d.dyb%b/d:d;d'b( =dm Gg?dHgIg@d(b[dnb]d^d_d`dg {d|d}d~daebecede) ob* + , - . pbeeJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g)b*b+b/ : ,bfegeqbheierbjekele5g6g7g8g9gmeneoepezb-bqerese.b; ten !gue#g$gve/bwesbxeyezeAe
969 routes=routes,
970 redirect_slashes=redirect_slashes,
971 dependency_overrides_provider=self,
972 on_startup=on_startup,
973 on_shutdown=on_shutdown,
974 lifespan=lifespan,
975 default_response_class=default_response_class,
976 dependencies=dependencies,
977 callbacks=callbacks,
978 deprecated=deprecated,
979 include_in_schema=include_in_schema,
980 responses=responses,
981 generate_unique_id_function=generate_unique_id_function,
982 )
983 self.exception_handlers: Dict[ 2a :b;b=b?b@b[b]b^b_bo = p q r s t ? `b{bBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeAbBbCbu v Db|b}bXeYeZe0e1e2e~bacbccctbEbdcecfcFbw h 3egc4e5ehcGb@ icjckclcb mcncocpcqcrcsctcucx [ y z A B C ] vcwc6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@eHbIbJbD E Kbxcyc[e]e^e_e`e{ezcAcBcCcubLbDcEcFcMbF i |eGc}e~eHcNb^ IcJcKcLcc McNcOcPcQcRcScTcUcG _ H I J K L ` VcWcafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfObPbQbM N RbXcYcZc{ 0c1c| 2c3c4cwfxfyfzfAfBf5c6c7c8cvbSb9c!c#cTbO $cj Cf%cDfEf'cUb(c} )c*c+c,cd -c.c/c:c;c=c?c@c[cP ~ Q R S T U ab]c^cFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fVbWbXbV W Yb_c`c{cbb|c}ccb~cadbd1f2f3f4f5f6fcdddedfdwbZbgdhdid0bX jdk 7fkd8f9fld1bmddbndodpdqde rdsdtdudvdwdxdydzdY ebZ 0 1 2 3 fbAdBd!f#f$f%f'f(f)f*f+f,f-f.f/f:f;f=f?f@f[f]f^f_f2b3b4b4 5 5bCdDdEdgbFdGdhbHdIdJd`f{f|f}f~fagKdLdMdNdxb6bOdPdQd7b6 Rdl bgSdcgdgTd8bUdibVdWdXdYdf Zd0d1d2d3d4d5d6d7d7 jb8 9 ! # $ kb8d9degfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgygzg9b!b#b% ' $b!d#d$dlb%d'dmb(d)d*dAgBgCgDgEgFg+d,d-d.dyb%b/d:d;d'b( =dm Gg?dHgIg@d(b[dnb]d^d_d`dg {d|d}d~daebecede) ob* + , - . pbeeJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g)b*b+b/ : ,bfegeqbheierbjekele5g6g7g8g9gmeneoepezb-bqerese.b; ten !gue#g$gve/bwesbxeyezeAe
984 Any, Callable[[Request, Any], Union[Response, Awaitable[Response]]]
985 ] = {} if exception_handlers is None else dict(exception_handlers)
986 self.exception_handlers.setdefault(HTTPException, http_exception_handler) 2a :b;b=b?b@b[b]b^b_bo = p q r s t ? `b{bBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeAbBbCbu v Db|b}bXeYeZe0e1e2e~bacbccctbEbdcecfcFbw h 3egc4e5ehcGb@ icjckclcb mcncocpcqcrcsctcucx [ y z A B C ] vcwc6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@eHbIbJbD E Kbxcyc[e]e^e_e`e{ezcAcBcCcubLbDcEcFcMbF i |eGc}e~eHcNb^ IcJcKcLcc McNcOcPcQcRcScTcUcG _ H I J K L ` VcWcafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfObPbQbM N RbXcYcZc{ 0c1c| 2c3c4cwfxfyfzfAfBf5c6c7c8cvbSb9c!c#cTbO $cj Cf%cDfEf'cUb(c} )c*c+c,cd -c.c/c:c;c=c?c@c[cP ~ Q R S T U ab]c^cFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fVbWbXbV W Yb_c`c{cbb|c}ccb~cadbd1f2f3f4f5f6fcdddedfdwbZbgdhdid0bX jdk 7fkd8f9fld1bmddbndodpdqde rdsdtdudvdwdxdydzdY ebZ 0 1 2 3 fbAdBd!f#f$f%f'f(f)f*f+f,f-f.f/f:f;f=f?f@f[f]f^f_f2b3b4b4 5 5bCdDdEdgbFdGdhbHdIdJd`f{f|f}f~fagKdLdMdNdxb6bOdPdQd7b6 Rdl bgSdcgdgTd8bUdibVdWdXdYdf Zd0d1d2d3d4d5d6d7d7 jb8 9 ! # $ kb8d9degfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgygzg9b!b#b% ' $b!d#d$dlb%d'dmb(d)d*dAgBgCgDgEgFg+d,d-d.dyb%b/d:d;d'b( =dm Gg?dHgIg@d(b[dnb]d^d_d`dg {d|d}d~daebecede) ob* + , - . pbeeJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g)b*b+b/ : ,bfegeqbheierbjekele5g6g7g8g9gmeneoepezb-bqerese.b; ten !gue#g$gve/bwesbxeyezeAe
987 self.exception_handlers.setdefault( 2a :b;b=b?b@b[b]b^b_bo = p q r s t ? `b{bBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeAbBbCbu v Db|b}bXeYeZe0e1e2e~bacbccctbEbdcecfcFbw h 3egc4e5ehcGb@ icjckclcb mcncocpcqcrcsctcucx [ y z A B C ] vcwc6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@eHbIbJbD E Kbxcyc[e]e^e_e`e{ezcAcBcCcubLbDcEcFcMbF i |eGc}e~eHcNb^ IcJcKcLcc McNcOcPcQcRcScTcUcG _ H I J K L ` VcWcafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfObPbQbM N RbXcYcZc{ 0c1c| 2c3c4cwfxfyfzfAfBf5c6c7c8cvbSb9c!c#cTbO $cj Cf%cDfEf'cUb(c} )c*c+c,cd -c.c/c:c;c=c?c@c[cP ~ Q R S T U ab]c^cFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fVbWbXbV W Yb_c`c{cbb|c}ccb~cadbd1f2f3f4f5f6fcdddedfdwbZbgdhdid0bX jdk 7fkd8f9fld1bmddbndodpdqde rdsdtdudvdwdxdydzdY ebZ 0 1 2 3 fbAdBd!f#f$f%f'f(f)f*f+f,f-f.f/f:f;f=f?f@f[f]f^f_f2b3b4b4 5 5bCdDdEdgbFdGdhbHdIdJd`f{f|f}f~fagKdLdMdNdxb6bOdPdQd7b6 Rdl bgSdcgdgTd8bUdibVdWdXdYdf Zd0d1d2d3d4d5d6d7d7 jb8 9 ! # $ kb8d9degfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgygzg9b!b#b% ' $b!d#d$dlb%d'dmb(d)d*dAgBgCgDgEgFg+d,d-d.dyb%b/d:d;d'b( =dm Gg?dHgIg@d(b[dnb]d^d_d`dg {d|d}d~daebecede) ob* + , - . pbeeJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g)b*b+b/ : ,bfegeqbheierbjekele5g6g7g8g9gmeneoepezb-bqerese.b; ten !gue#g$gve/bwesbxeyezeAe
988 RequestValidationError, request_validation_exception_handler
989 )
990 self.exception_handlers.setdefault( 2a :b;b=b?b@b[b]b^b_bo = p q r s t ? `b{bBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeAbBbCbu v Db|b}bXeYeZe0e1e2e~bacbccctbEbdcecfcFbw h 3egc4e5ehcGb@ icjckclcb mcncocpcqcrcsctcucx [ y z A B C ] vcwc6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@eHbIbJbD E Kbxcyc[e]e^e_e`e{ezcAcBcCcubLbDcEcFcMbF i |eGc}e~eHcNb^ IcJcKcLcc McNcOcPcQcRcScTcUcG _ H I J K L ` VcWcafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfObPbQbM N RbXcYcZc{ 0c1c| 2c3c4cwfxfyfzfAfBf5c6c7c8cvbSb9c!c#cTbO $cj Cf%cDfEf'cUb(c} )c*c+c,cd -c.c/c:c;c=c?c@c[cP ~ Q R S T U ab]c^cFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fVbWbXbV W Yb_c`c{cbb|c}ccb~cadbd1f2f3f4f5f6fcdddedfdwbZbgdhdid0bX jdk 7fkd8f9fld1bmddbndodpdqde rdsdtdudvdwdxdydzdY ebZ 0 1 2 3 fbAdBd!f#f$f%f'f(f)f*f+f,f-f.f/f:f;f=f?f@f[f]f^f_f2b3b4b4 5 5bCdDdEdgbFdGdhbHdIdJd`f{f|f}f~fagKdLdMdNdxb6bOdPdQd7b6 Rdl bgSdcgdgTd8bUdibVdWdXdYdf Zd0d1d2d3d4d5d6d7d7 jb8 9 ! # $ kb8d9degfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgygzg9b!b#b% ' $b!d#d$dlb%d'dmb(d)d*dAgBgCgDgEgFg+d,d-d.dyb%b/d:d;d'b( =dm Gg?dHgIg@d(b[dnb]d^d_d`dg {d|d}d~daebecede) ob* + , - . pbeeJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g)b*b+b/ : ,bfegeqbheierbjekele5g6g7g8g9gmeneoepezb-bqerese.b; ten !gue#g$gve/bwesbxeyezeAe
991 WebSocketRequestValidationError,
992 # Starlette still has incorrect type specification for the handlers
993 websocket_request_validation_exception_handler, # type: ignore
994 )
996 self.user_middleware: List[Middleware] = ( 2a :b;b=b?b@b[b]b^b_bo = p q r s t ? `b{bBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeAbBbCbu v Db|b}bXeYeZe0e1e2e~bacbccctbEbdcecfcFbw h 3egc4e5ehcGb@ icjckclcb mcncocpcqcrcsctcucx [ y z A B C ] vcwc6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@eHbIbJbD E Kbxcyc[e]e^e_e`e{ezcAcBcCcubLbDcEcFcMbF i |eGc}e~eHcNb^ IcJcKcLcc McNcOcPcQcRcScTcUcG _ H I J K L ` VcWcafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfObPbQbM N RbXcYcZc{ 0c1c| 2c3c4cwfxfyfzfAfBf5c6c7c8cvbSb9c!c#cTbO $cj Cf%cDfEf'cUb(c} )c*c+c,cd -c.c/c:c;c=c?c@c[cP ~ Q R S T U ab]c^cFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fVbWbXbV W Yb_c`c{cbb|c}ccb~cadbd1f2f3f4f5f6fcdddedfdwbZbgdhdid0bX jdk 7fkd8f9fld1bmddbndodpdqde rdsdtdudvdwdxdydzdY ebZ 0 1 2 3 fbAdBd!f#f$f%f'f(f)f*f+f,f-f.f/f:f;f=f?f@f[f]f^f_f2b3b4b4 5 5bCdDdEdgbFdGdhbHdIdJd`f{f|f}f~fagKdLdMdNdxb6bOdPdQd7b6 Rdl bgSdcgdgTd8bUdibVdWdXdYdf Zd0d1d2d3d4d5d6d7d7 jb8 9 ! # $ kb8d9degfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgygzg9b!b#b% ' $b!d#d$dlb%d'dmb(d)d*dAgBgCgDgEgFg+d,d-d.dyb%b/d:d;d'b( =dm Gg?dHgIg@d(b[dnb]d^d_d`dg {d|d}d~daebecede) ob* + , - . pbeeJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g)b*b+b/ : ,bfegeqbheierbjekele5g6g7g8g9gmeneoepezb-bqerese.b; ten !gue#g$gve/bwesbxeyezeAe
997 [] if middleware is None else list(middleware)
998 )
999 self.middleware_stack: Union[ASGIApp, None] = None 2a :b;b=b?b@b[b]b^b_bo = p q r s t ? `b{bBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeAbBbCbu v Db|b}bXeYeZe0e1e2e~bacbccctbEbdcecfcFbw h 3egc4e5ehcGb@ icjckclcb mcncocpcqcrcsctcucx [ y z A B C ] vcwc6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@eHbIbJbD E Kbxcyc[e]e^e_e`e{ezcAcBcCcubLbDcEcFcMbF i |eGc}e~eHcNb^ IcJcKcLcc McNcOcPcQcRcScTcUcG _ H I J K L ` VcWcafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfObPbQbM N RbXcYcZc{ 0c1c| 2c3c4cwfxfyfzfAfBf5c6c7c8cvbSb9c!c#cTbO $cj Cf%cDfEf'cUb(c} )c*c+c,cd -c.c/c:c;c=c?c@c[cP ~ Q R S T U ab]c^cFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fVbWbXbV W Yb_c`c{cbb|c}ccb~cadbd1f2f3f4f5f6fcdddedfdwbZbgdhdid0bX jdk 7fkd8f9fld1bmddbndodpdqde rdsdtdudvdwdxdydzdY ebZ 0 1 2 3 fbAdBd!f#f$f%f'f(f)f*f+f,f-f.f/f:f;f=f?f@f[f]f^f_f2b3b4b4 5 5bCdDdEdgbFdGdhbHdIdJd`f{f|f}f~fagKdLdMdNdxb6bOdPdQd7b6 Rdl bgSdcgdgTd8bUdibVdWdXdYdf Zd0d1d2d3d4d5d6d7d7 jb8 9 ! # $ kb8d9degfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgygzg9b!b#b% ' $b!d#d$dlb%d'dmb(d)d*dAgBgCgDgEgFg+d,d-d.dyb%b/d:d;d'b( =dm Gg?dHgIg@d(b[dnb]d^d_d`dg {d|d}d~daebecede) ob* + , - . pbeeJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g)b*b+b/ : ,bfegeqbheierbjekele5g6g7g8g9gmeneoepezb-bqerese.b; ten !gue#g$gve/bwesbxeyezeAe
1000 self.setup() 2a :b;b=b?b@b[b]b^b_bo = p q r s t ? `b{bBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeAbBbCbu v Db|b}bXeYeZe0e1e2e~bacbccctbEbdcecfcFbw h 3egc4e5ehcGb@ icjckclcb mcncocpcqcrcsctcucx [ y z A B C ] vcwc6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@eHbIbJbD E Kbxcyc[e]e^e_e`e{ezcAcBcCcubLbDcEcFcMbF i |eGc}e~eHcNb^ IcJcKcLcc McNcOcPcQcRcScTcUcG _ H I J K L ` VcWcafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfObPbQbM N RbXcYcZc{ 0c1c| 2c3c4cwfxfyfzfAfBf5c6c7c8cvbSb9c!c#cTbO $cj Cf%cDfEf'cUb(c} )c*c+c,cd -c.c/c:c;c=c?c@c[cP ~ Q R S T U ab]c^cFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fVbWbXbV W Yb_c`c{cbb|c}ccb~cadbd1f2f3f4f5f6fcdddedfdwbZbgdhdid0bX jdk 7fkd8f9fld1bmddbndodpdqde rdsdtdudvdwdxdydzdY ebZ 0 1 2 3 fbAdBd!f#f$f%f'f(f)f*f+f,f-f.f/f:f;f=f?f@f[f]f^f_f2b3b4b4 5 5bCdDdEdgbFdGdhbHdIdJd`f{f|f}f~fagKdLdMdNdxb6bOdPdQd7b6 Rdl bgSdcgdgTd8bUdibVdWdXdYdf Zd0d1d2d3d4d5d6d7d7 jb8 9 ! # $ kb8d9degfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgygzg9b!b#b% ' $b!d#d$dlb%d'dmb(d)d*dAgBgCgDgEgFg+d,d-d.dyb%b/d:d;d'b( =dm Gg?dHgIg@d(b[dnb]d^d_d`dg {d|d}d~daebecede) ob* + , - . pbeeJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g)b*b+b/ : ,bfegeqbheierbjekele5g6g7g8g9gmeneoepezb-bqerese.b; ten !gue#g$gve/bwesbxeyezeAe
1002 def build_middleware_stack(self) -> ASGIApp: 1abcdefg
1003 # Duplicate/override from Starlette to add AsyncExitStackMiddleware
1004 # inside of ExceptionMiddleware, inside of custom user middlewares
1005 debug = self.debug 2a ujvjwjxjyjzjAjBjsi-g.g/g:gCjDj(iEj:b;bFjGj=b?bHjIj;gJjKj=gti@b[b]bLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j^b_b1j2j)i3j4j?g*i5j6j7j8j@g9j!j#j$j%jo = p q r s t ? 'j[g(j)j*j+j,j`b{b-j.j/j:j8i;j]g=j?jAbBbCbu v Db@j[j]j^j_j^g`j{j|j}j~jakbk|b}bck_gdkek`gfkgkhkik{gjkkklkmknkokpk~bqkacbccctbEbdcrkecfcFbw sk|gtkukvkwkxkykzkAkBkCkDkEkFkGkHkIkJkKkLkMkNkOkPkQkRkSkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7kui8k9k!k#k$k%k'k(k)k*k+k,k-k.k/k+i,i-i:k;k=k?k@k[k]kh 3egcviwixi^k_k`k{k|k}k~kalblcldlelflglhliljlklllmlnlolplqlrlsltlulvlwlxlylzlAlBlClDlElFlGlHlIlJlKlLlMlNlOlPlQlRlSlTlUlVlWlXlYlZl0l1l2l3l4l5l6l7l8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l{l|l}l~lambmcmdmemfmgmhmimjmkmlmmmnmompmqmrmsmtmumvm}g%ghcwmGbxmymzmAmBmCm@ DmEmFmGmHm~gicImJmjckclcb KmLmMmNmOmPmQmRmyiahbhchdhSmTm.iUmmcncVmWmocpcXmYmehZm0mfhziqcrcsc1m2m3m4m5m6m7m8m9m!m#m$m%m'm(m)mtcuc*m+m/i,m-mgh:i.m/m:m;mhh=m?m@m[m]mx [ y z A B C ] ^mih_m`m{m|m}mvcwc~manbncn9idnjhenfnHbIbJbD E KbgnhninjnknkhlnmnnnonpnqnrnxcycsnlhtnunmhvnwnxnynnhznAnBnCnDnEnFnzcGnAcBcCcubLbDcHnEcFcMbF InohJnKnLnMnNnOnPnQnRnSnTnUnVnWnXnYnZn0n1n2n3n4n5n6n7n8n9n!n#n$n%n'n(n)n*n+n,n-n.n/n:nAi;n=n?n@n[n]n^n_n`n{n|n}n~naobo;i=i?icodoeofogohoioi |eGcBiCiDijokolomonooopoqorosotouovowoxoyozoAoBoCoDoEoFoGoHoIoJoKoLoMoNoOoPoQoRoSoToUoVoWoXoYoZo0o1o2o3o4o5o6o7o8o9o!o#o$o%o'o(o)o*o+o,o-o.o/o:o;o=o?o@o[o]o^o_o`o{o|o}o~oapbpcpdpepfpgphpipjpkplpmpnpopppqprpsptpupvpwpxpypzpApBpCpDpEpFpGpHpIpJpKpLpph'gHcMpNbNpOpPpQpRpSpTp^ UpVpWpXpYpqhIcZp0pJcKcLcc 1p2p3p4p5p6p7p8pEirhshthuh9p!p@i#pMcNc$p%pOcPc'p(pvh)p*pwhFiQcRcSc+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{pTcUc|p}p[i~paqxh]ibqcqdqeqyhfqgqhqiqjqG _ H I J K L ` kqzhlqmqnqoqpqVcWcqqrqsqtq!iuqAhvqwqObPbQbM N RbxqyqzqAqBqBhCqDqEqFqGqHqIqXcYcZc{ 0c1c| 2c3c4cJqChKqLqDhMqNqOqPqEhQqRqSqTqUqVqWq5cXq6c7c8cvbSb9cYq!c#cZqFhTbO 0qGh1q2q3q4q5q6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdr$cerGifrgrhrirjrkrlrmrnrorprqrrrsrtr^i_i`iurvrwrxryrzrArj Cf%cHiIiJiBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r^r_r`r{r|r}r~rasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3sHh(g'c4sUb5s6s7s8s9s!s(c#s} $s%s's(s)sIh)c*s+s*c+c,cd ,s-s.s/s:s;s=s?sKiJhKhLhMh@s[s{i]s-c.c^s_s/c:c`s{sNh|s}sOhLi;c=c?c~satbtctdtetftgthtitjtktltmtntot@c[cptqt|irtstPh}ittutvtwtQhxtytztAtBtP ~ Q R S T U abCtRhDtEtFtGtHt]c^cItJtKtLt#iMtShNtOtVbWbXbV W YbPtQtRtStTtThUtVtWtXtYtZt0t_c`c{cbb|c}ccb~cadbd1tUh2t3tVh4t5t6t7tWh8t9t!t#t$t%t'tcd(tddedfdwbZbgd)thdid*tXh0bX +tYh,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulumunuoupuqurusutuuuvujdwuMixuyuzuAuBuCuDuEuFuGuHuIuJuKuLu~iajbjMuNuOuPuQuRuSuk 7fkdNiOiPiTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[u]u^u_u`u{u|u}u~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.vZh)gld/v1b:v;v=v?v@v[vmd]vdb^v_v`v{v|v0hnd}v~vodpdqde awbwcwdwewfwgwhwQi1h2h3h4hiwjwcjkwrdsdlwmwtdudnwow5hpwqw6hRivdwdxdrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwydzdHwIwdjJwKw7hejLwMwNwOw8hPwQwRwSwTwY ebZ 0 1 2 3 fbUw9hVwWwXwYwZwAdBd0w1w2w3w$i4w!h5w6w2b3b4b4 5 5b7w8w9w!w#w#h$w%w'w(w)w*w+wCdDdEdgbFdGdhbHdIdJd,w$h-w.w%h/w:w;w=w'h?w@w[w]w^w_w`wKd{wLdMdNdxb6bOd|wPdQd}w(h7b6 ~w)haxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxRdOxSiPxQxRxSxTxUxVxWxXxYxZx0x1x2x3xfjgjhj4x5x6x7x8x9x!xl bgSdTiUiVi#x$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@x[x]x^x_x`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,y-y.y/y:y;y=y?y@y[y]y^y_y`y{y|y}y~yazbzcz*h*gTddz8bezfzgzhzizjzUdkziblzmznzozpz+hVdqzrzWdXdYdf sztzuzvzwzxzyzzzWi,h-h.h/hAzBzijCzZd0dDzEz1d2dFzGz:hHzIz;hXi3d4d5dJzKzLzMzNzOzPzQzRzSzTzUzVzWzXzYz6d7dZz0zjj1z2z=hkj3z4z5z6z?h7z8z9z!z#z7 jb8 9 ! # $ kb$z@h%z'z(z)z*z8d9d+z,z-z.z%i/z[h:z;z9b!b#b% ' $b=z?z@z[z]z]h^z_z`z{z|z}z~z!d#d$dlb%d'dmb(d)d*daA^hbAcA_hdAeAfAgA`hhAiAjAkAlAmAnA+doA,d-d.dyb%b/dpA:d;dqA{h'b( rA|hsAtAuAvAwAxAyAzAAABACADAEAFAGAHAIAJAKALAMANAOAPAQARASATAUAVAWAXAYAZA0A1A2A3A4A5A=d6AYi7A8A9A!A#A$A%A'A(A)A*A+A,A-A.Aljmjnj/A:A;A=A?A@A[Am Gg?dZi0i1i]A^A_A`A{A|A}A~AaBbBcBdBeBfBgBhBiBjBkBlBmBnBoBpBqBrBsBtBuBvBwBxByBzBABBBCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBRBSBTBUBVBWBXBYBZB0B1B2B3B4B5B6B7B8B9B!B#B$B%B'B(B)B*B+B,B-B.B/B:B;B=B?B@B[B]B^B_B`B{B|B}B~BaCbCcCdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuC}h+g@dvC(bwCxCyCzCACBC[dCCnbDCECFCGCHC~h]dICJC^d_d`dg KCLCMCNCOCPCQCRC2iaibicidiSCTCojUC{d|dVCWC}d~dXCeiYCZCfi3iaebe0C1C2C3C4C5C6C7C8C9C!C#C$C%C'C(Ccede)C*Cpj+C,Cgiqj-C.C/Chi:C;C=C?C@C) ob* + , - . pb[Cii]C^C_C`C{Cee|C}C~CaD'ibDjicDdD)b*b+b/ : ,beDfDgDhDiDkijDkDfegeqbheierbjekelelDlimDnDmioDpDqDrDnisDtDuDvDwDxDyDmezDneoepezb-bqeADreseBDoi.b; CDpiDDEDFDGDHDIDJDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD0D1D2D3D4D5D6D7D8D9D!D#D$D%D'D(D)Dte*D4i+D,D-D.D/D:D;D=D?D@D[D]D^D_D`Drjsjtj{D|D}D~DaEbEcEn !gue5i6i7idEeEfEgEhEiEjEkElEmEnEoEpEqErEsEtEuEvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZE0E1E2E3E4E5E6E7E8E9E!E#E$E%E'E(E)E*E+E,E-E.E/E:E;E=E?E@E[E]E^E_E`E{E|E}E~EaFbFcFdFeFfFgFhFiFjFkFlFmFnFoFpFqFrFsFtFuFvFwFxFyFzFqi,gveAF/bBFCFDFEFFFGFweHFsbIFJFKFLFMFrixeNFOFyezeAe
1006 error_handler = None 2a ujvjwjxjyjzjAjBjsi-g.g/g:gCjDj(iEj:b;bFjGj=b?bHjIj;gJjKj=gti@b[b]bLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j^b_b1j2j)i3j4j?g*i5j6j7j8j@g9j!j#j$j%jo = p q r s t ? 'j[g(j)j*j+j,j`b{b-j.j/j:j8i;j]g=j?jAbBbCbu v Db@j[j]j^j_j^g`j{j|j}j~jakbk|b}bck_gdkek`gfkgkhkik{gjkkklkmknkokpk~bqkacbccctbEbdcrkecfcFbw sk|gtkukvkwkxkykzkAkBkCkDkEkFkGkHkIkJkKkLkMkNkOkPkQkRkSkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7kui8k9k!k#k$k%k'k(k)k*k+k,k-k.k/k+i,i-i:k;k=k?k@k[k]kh 3egcviwixi^k_k`k{k|k}k~kalblcldlelflglhliljlklllmlnlolplqlrlsltlulvlwlxlylzlAlBlClDlElFlGlHlIlJlKlLlMlNlOlPlQlRlSlTlUlVlWlXlYlZl0l1l2l3l4l5l6l7l8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l{l|l}l~lambmcmdmemfmgmhmimjmkmlmmmnmompmqmrmsmtmumvm}g%ghcwmGbxmymzmAmBmCm@ DmEmFmGmHm~gicImJmjckclcb KmLmMmNmOmPmQmRmyiahbhchdhSmTm.iUmmcncVmWmocpcXmYmehZm0mfhziqcrcsc1m2m3m4m5m6m7m8m9m!m#m$m%m'm(m)mtcuc*m+m/i,m-mgh:i.m/m:m;mhh=m?m@m[m]mx [ y z A B C ] ^mih_m`m{m|m}mvcwc~manbncn9idnjhenfnHbIbJbD E KbgnhninjnknkhlnmnnnonpnqnrnxcycsnlhtnunmhvnwnxnynnhznAnBnCnDnEnFnzcGnAcBcCcubLbDcHnEcFcMbF InohJnKnLnMnNnOnPnQnRnSnTnUnVnWnXnYnZn0n1n2n3n4n5n6n7n8n9n!n#n$n%n'n(n)n*n+n,n-n.n/n:nAi;n=n?n@n[n]n^n_n`n{n|n}n~naobo;i=i?icodoeofogohoioi |eGcBiCiDijokolomonooopoqorosotouovowoxoyozoAoBoCoDoEoFoGoHoIoJoKoLoMoNoOoPoQoRoSoToUoVoWoXoYoZo0o1o2o3o4o5o6o7o8o9o!o#o$o%o'o(o)o*o+o,o-o.o/o:o;o=o?o@o[o]o^o_o`o{o|o}o~oapbpcpdpepfpgphpipjpkplpmpnpopppqprpsptpupvpwpxpypzpApBpCpDpEpFpGpHpIpJpKpLpph'gHcMpNbNpOpPpQpRpSpTp^ UpVpWpXpYpqhIcZp0pJcKcLcc 1p2p3p4p5p6p7p8pEirhshthuh9p!p@i#pMcNc$p%pOcPc'p(pvh)p*pwhFiQcRcSc+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{pTcUc|p}p[i~paqxh]ibqcqdqeqyhfqgqhqiqjqG _ H I J K L ` kqzhlqmqnqoqpqVcWcqqrqsqtq!iuqAhvqwqObPbQbM N RbxqyqzqAqBqBhCqDqEqFqGqHqIqXcYcZc{ 0c1c| 2c3c4cJqChKqLqDhMqNqOqPqEhQqRqSqTqUqVqWq5cXq6c7c8cvbSb9cYq!c#cZqFhTbO 0qGh1q2q3q4q5q6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdr$cerGifrgrhrirjrkrlrmrnrorprqrrrsrtr^i_i`iurvrwrxryrzrArj Cf%cHiIiJiBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r^r_r`r{r|r}r~rasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3sHh(g'c4sUb5s6s7s8s9s!s(c#s} $s%s's(s)sIh)c*s+s*c+c,cd ,s-s.s/s:s;s=s?sKiJhKhLhMh@s[s{i]s-c.c^s_s/c:c`s{sNh|s}sOhLi;c=c?c~satbtctdtetftgthtitjtktltmtntot@c[cptqt|irtstPh}ittutvtwtQhxtytztAtBtP ~ Q R S T U abCtRhDtEtFtGtHt]c^cItJtKtLt#iMtShNtOtVbWbXbV W YbPtQtRtStTtThUtVtWtXtYtZt0t_c`c{cbb|c}ccb~cadbd1tUh2t3tVh4t5t6t7tWh8t9t!t#t$t%t'tcd(tddedfdwbZbgd)thdid*tXh0bX +tYh,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulumunuoupuqurusutuuuvujdwuMixuyuzuAuBuCuDuEuFuGuHuIuJuKuLu~iajbjMuNuOuPuQuRuSuk 7fkdNiOiPiTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[u]u^u_u`u{u|u}u~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.vZh)gld/v1b:v;v=v?v@v[vmd]vdb^v_v`v{v|v0hnd}v~vodpdqde awbwcwdwewfwgwhwQi1h2h3h4hiwjwcjkwrdsdlwmwtdudnwow5hpwqw6hRivdwdxdrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwydzdHwIwdjJwKw7hejLwMwNwOw8hPwQwRwSwTwY ebZ 0 1 2 3 fbUw9hVwWwXwYwZwAdBd0w1w2w3w$i4w!h5w6w2b3b4b4 5 5b7w8w9w!w#w#h$w%w'w(w)w*w+wCdDdEdgbFdGdhbHdIdJd,w$h-w.w%h/w:w;w=w'h?w@w[w]w^w_w`wKd{wLdMdNdxb6bOd|wPdQd}w(h7b6 ~w)haxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxRdOxSiPxQxRxSxTxUxVxWxXxYxZx0x1x2x3xfjgjhj4x5x6x7x8x9x!xl bgSdTiUiVi#x$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@x[x]x^x_x`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,y-y.y/y:y;y=y?y@y[y]y^y_y`y{y|y}y~yazbzcz*h*gTddz8bezfzgzhzizjzUdkziblzmznzozpz+hVdqzrzWdXdYdf sztzuzvzwzxzyzzzWi,h-h.h/hAzBzijCzZd0dDzEz1d2dFzGz:hHzIz;hXi3d4d5dJzKzLzMzNzOzPzQzRzSzTzUzVzWzXzYz6d7dZz0zjj1z2z=hkj3z4z5z6z?h7z8z9z!z#z7 jb8 9 ! # $ kb$z@h%z'z(z)z*z8d9d+z,z-z.z%i/z[h:z;z9b!b#b% ' $b=z?z@z[z]z]h^z_z`z{z|z}z~z!d#d$dlb%d'dmb(d)d*daA^hbAcA_hdAeAfAgA`hhAiAjAkAlAmAnA+doA,d-d.dyb%b/dpA:d;dqA{h'b( rA|hsAtAuAvAwAxAyAzAAABACADAEAFAGAHAIAJAKALAMANAOAPAQARASATAUAVAWAXAYAZA0A1A2A3A4A5A=d6AYi7A8A9A!A#A$A%A'A(A)A*A+A,A-A.Aljmjnj/A:A;A=A?A@A[Am Gg?dZi0i1i]A^A_A`A{A|A}A~AaBbBcBdBeBfBgBhBiBjBkBlBmBnBoBpBqBrBsBtBuBvBwBxByBzBABBBCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBRBSBTBUBVBWBXBYBZB0B1B2B3B4B5B6B7B8B9B!B#B$B%B'B(B)B*B+B,B-B.B/B:B;B=B?B@B[B]B^B_B`B{B|B}B~BaCbCcCdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuC}h+g@dvC(bwCxCyCzCACBC[dCCnbDCECFCGCHC~h]dICJC^d_d`dg KCLCMCNCOCPCQCRC2iaibicidiSCTCojUC{d|dVCWC}d~dXCeiYCZCfi3iaebe0C1C2C3C4C5C6C7C8C9C!C#C$C%C'C(Ccede)C*Cpj+C,Cgiqj-C.C/Chi:C;C=C?C@C) ob* + , - . pb[Cii]C^C_C`C{Cee|C}C~CaD'ibDjicDdD)b*b+b/ : ,beDfDgDhDiDkijDkDfegeqbheierbjekelelDlimDnDmioDpDqDrDnisDtDuDvDwDxDyDmezDneoepezb-bqeADreseBDoi.b; CDpiDDEDFDGDHDIDJDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD0D1D2D3D4D5D6D7D8D9D!D#D$D%D'D(D)Dte*D4i+D,D-D.D/D:D;D=D?D@D[D]D^D_D`Drjsjtj{D|D}D~DaEbEcEn !gue5i6i7idEeEfEgEhEiEjEkElEmEnEoEpEqErEsEtEuEvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZE0E1E2E3E4E5E6E7E8E9E!E#E$E%E'E(E)E*E+E,E-E.E/E:E;E=E?E@E[E]E^E_E`E{E|E}E~EaFbFcFdFeFfFgFhFiFjFkFlFmFnFoFpFqFrFsFtFuFvFwFxFyFzFqi,gveAF/bBFCFDFEFFFGFweHFsbIFJFKFLFMFrixeNFOFyezeAe
1007 exception_handlers: dict[Any, ExceptionHandler] = {} 2a ujvjwjxjyjzjAjBjsi-g.g/g:gCjDj(iEj:b;bFjGj=b?bHjIj;gJjKj=gti@b[b]bLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j^b_b1j2j)i3j4j?g*i5j6j7j8j@g9j!j#j$j%jo = p q r s t ? 'j[g(j)j*j+j,j`b{b-j.j/j:j8i;j]g=j?jAbBbCbu v Db@j[j]j^j_j^g`j{j|j}j~jakbk|b}bck_gdkek`gfkgkhkik{gjkkklkmknkokpk~bqkacbccctbEbdcrkecfcFbw sk|gtkukvkwkxkykzkAkBkCkDkEkFkGkHkIkJkKkLkMkNkOkPkQkRkSkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7kui8k9k!k#k$k%k'k(k)k*k+k,k-k.k/k+i,i-i:k;k=k?k@k[k]kh 3egcviwixi^k_k`k{k|k}k~kalblcldlelflglhliljlklllmlnlolplqlrlsltlulvlwlxlylzlAlBlClDlElFlGlHlIlJlKlLlMlNlOlPlQlRlSlTlUlVlWlXlYlZl0l1l2l3l4l5l6l7l8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l{l|l}l~lambmcmdmemfmgmhmimjmkmlmmmnmompmqmrmsmtmumvm}g%ghcwmGbxmymzmAmBmCm@ DmEmFmGmHm~gicImJmjckclcb KmLmMmNmOmPmQmRmyiahbhchdhSmTm.iUmmcncVmWmocpcXmYmehZm0mfhziqcrcsc1m2m3m4m5m6m7m8m9m!m#m$m%m'm(m)mtcuc*m+m/i,m-mgh:i.m/m:m;mhh=m?m@m[m]mx [ y z A B C ] ^mih_m`m{m|m}mvcwc~manbncn9idnjhenfnHbIbJbD E KbgnhninjnknkhlnmnnnonpnqnrnxcycsnlhtnunmhvnwnxnynnhznAnBnCnDnEnFnzcGnAcBcCcubLbDcHnEcFcMbF InohJnKnLnMnNnOnPnQnRnSnTnUnVnWnXnYnZn0n1n2n3n4n5n6n7n8n9n!n#n$n%n'n(n)n*n+n,n-n.n/n:nAi;n=n?n@n[n]n^n_n`n{n|n}n~naobo;i=i?icodoeofogohoioi |eGcBiCiDijokolomonooopoqorosotouovowoxoyozoAoBoCoDoEoFoGoHoIoJoKoLoMoNoOoPoQoRoSoToUoVoWoXoYoZo0o1o2o3o4o5o6o7o8o9o!o#o$o%o'o(o)o*o+o,o-o.o/o:o;o=o?o@o[o]o^o_o`o{o|o}o~oapbpcpdpepfpgphpipjpkplpmpnpopppqprpsptpupvpwpxpypzpApBpCpDpEpFpGpHpIpJpKpLpph'gHcMpNbNpOpPpQpRpSpTp^ UpVpWpXpYpqhIcZp0pJcKcLcc 1p2p3p4p5p6p7p8pEirhshthuh9p!p@i#pMcNc$p%pOcPc'p(pvh)p*pwhFiQcRcSc+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{pTcUc|p}p[i~paqxh]ibqcqdqeqyhfqgqhqiqjqG _ H I J K L ` kqzhlqmqnqoqpqVcWcqqrqsqtq!iuqAhvqwqObPbQbM N RbxqyqzqAqBqBhCqDqEqFqGqHqIqXcYcZc{ 0c1c| 2c3c4cJqChKqLqDhMqNqOqPqEhQqRqSqTqUqVqWq5cXq6c7c8cvbSb9cYq!c#cZqFhTbO 0qGh1q2q3q4q5q6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdr$cerGifrgrhrirjrkrlrmrnrorprqrrrsrtr^i_i`iurvrwrxryrzrArj Cf%cHiIiJiBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r^r_r`r{r|r}r~rasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3sHh(g'c4sUb5s6s7s8s9s!s(c#s} $s%s's(s)sIh)c*s+s*c+c,cd ,s-s.s/s:s;s=s?sKiJhKhLhMh@s[s{i]s-c.c^s_s/c:c`s{sNh|s}sOhLi;c=c?c~satbtctdtetftgthtitjtktltmtntot@c[cptqt|irtstPh}ittutvtwtQhxtytztAtBtP ~ Q R S T U abCtRhDtEtFtGtHt]c^cItJtKtLt#iMtShNtOtVbWbXbV W YbPtQtRtStTtThUtVtWtXtYtZt0t_c`c{cbb|c}ccb~cadbd1tUh2t3tVh4t5t6t7tWh8t9t!t#t$t%t'tcd(tddedfdwbZbgd)thdid*tXh0bX +tYh,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulumunuoupuqurusutuuuvujdwuMixuyuzuAuBuCuDuEuFuGuHuIuJuKuLu~iajbjMuNuOuPuQuRuSuk 7fkdNiOiPiTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[u]u^u_u`u{u|u}u~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.vZh)gld/v1b:v;v=v?v@v[vmd]vdb^v_v`v{v|v0hnd}v~vodpdqde awbwcwdwewfwgwhwQi1h2h3h4hiwjwcjkwrdsdlwmwtdudnwow5hpwqw6hRivdwdxdrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwydzdHwIwdjJwKw7hejLwMwNwOw8hPwQwRwSwTwY ebZ 0 1 2 3 fbUw9hVwWwXwYwZwAdBd0w1w2w3w$i4w!h5w6w2b3b4b4 5 5b7w8w9w!w#w#h$w%w'w(w)w*w+wCdDdEdgbFdGdhbHdIdJd,w$h-w.w%h/w:w;w=w'h?w@w[w]w^w_w`wKd{wLdMdNdxb6bOd|wPdQd}w(h7b6 ~w)haxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxRdOxSiPxQxRxSxTxUxVxWxXxYxZx0x1x2x3xfjgjhj4x5x6x7x8x9x!xl bgSdTiUiVi#x$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@x[x]x^x_x`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,y-y.y/y:y;y=y?y@y[y]y^y_y`y{y|y}y~yazbzcz*h*gTddz8bezfzgzhzizjzUdkziblzmznzozpz+hVdqzrzWdXdYdf sztzuzvzwzxzyzzzWi,h-h.h/hAzBzijCzZd0dDzEz1d2dFzGz:hHzIz;hXi3d4d5dJzKzLzMzNzOzPzQzRzSzTzUzVzWzXzYz6d7dZz0zjj1z2z=hkj3z4z5z6z?h7z8z9z!z#z7 jb8 9 ! # $ kb$z@h%z'z(z)z*z8d9d+z,z-z.z%i/z[h:z;z9b!b#b% ' $b=z?z@z[z]z]h^z_z`z{z|z}z~z!d#d$dlb%d'dmb(d)d*daA^hbAcA_hdAeAfAgA`hhAiAjAkAlAmAnA+doA,d-d.dyb%b/dpA:d;dqA{h'b( rA|hsAtAuAvAwAxAyAzAAABACADAEAFAGAHAIAJAKALAMANAOAPAQARASATAUAVAWAXAYAZA0A1A2A3A4A5A=d6AYi7A8A9A!A#A$A%A'A(A)A*A+A,A-A.Aljmjnj/A:A;A=A?A@A[Am Gg?dZi0i1i]A^A_A`A{A|A}A~AaBbBcBdBeBfBgBhBiBjBkBlBmBnBoBpBqBrBsBtBuBvBwBxByBzBABBBCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBRBSBTBUBVBWBXBYBZB0B1B2B3B4B5B6B7B8B9B!B#B$B%B'B(B)B*B+B,B-B.B/B:B;B=B?B@B[B]B^B_B`B{B|B}B~BaCbCcCdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuC}h+g@dvC(bwCxCyCzCACBC[dCCnbDCECFCGCHC~h]dICJC^d_d`dg KCLCMCNCOCPCQCRC2iaibicidiSCTCojUC{d|dVCWC}d~dXCeiYCZCfi3iaebe0C1C2C3C4C5C6C7C8C9C!C#C$C%C'C(Ccede)C*Cpj+C,Cgiqj-C.C/Chi:C;C=C?C@C) ob* + , - . pb[Cii]C^C_C`C{Cee|C}C~CaD'ibDjicDdD)b*b+b/ : ,beDfDgDhDiDkijDkDfegeqbheierbjekelelDlimDnDmioDpDqDrDnisDtDuDvDwDxDyDmezDneoepezb-bqeADreseBDoi.b; CDpiDDEDFDGDHDIDJDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD0D1D2D3D4D5D6D7D8D9D!D#D$D%D'D(D)Dte*D4i+D,D-D.D/D:D;D=D?D@D[D]D^D_D`Drjsjtj{D|D}D~DaEbEcEn !gue5i6i7idEeEfEgEhEiEjEkElEmEnEoEpEqErEsEtEuEvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZE0E1E2E3E4E5E6E7E8E9E!E#E$E%E'E(E)E*E+E,E-E.E/E:E;E=E?E@E[E]E^E_E`E{E|E}E~EaFbFcFdFeFfFgFhFiFjFkFlFmFnFoFpFqFrFsFtFuFvFwFxFyFzFqi,gveAF/bBFCFDFEFFFGFweHFsbIFJFKFLFMFrixeNFOFyezeAe
1009 for key, value in self.exception_handlers.items(): 2a ujvjwjxjyjzjAjBjsi-g.g/g:gCjDj(iEj:b;bFjGj=b?bHjIj;gJjKj=gti@b[b]bLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j^b_b1j2j)i3j4j?g*i5j6j7j8j@g9j!j#j$j%jo = p q r s t ? 'j[g(j)j*j+j,j`b{b-j.j/j:j8i;j]g=j?jAbBbCbu v Db@j[j]j^j_j^g`j{j|j}j~jakbk|b}bck_gdkek`gfkgkhkik{gjkkklkmknkokpk~bqkacbccctbEbdcrkecfcFbw sk|gtkukvkwkxkykzkAkBkCkDkEkFkGkHkIkJkKkLkMkNkOkPkQkRkSkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7kui8k9k!k#k$k%k'k(k)k*k+k,k-k.k/k+i,i-i:k;k=k?k@k[k]kh 3egcviwixi^k_k`k{k|k}k~kalblcldlelflglhliljlklllmlnlolplqlrlsltlulvlwlxlylzlAlBlClDlElFlGlHlIlJlKlLlMlNlOlPlQlRlSlTlUlVlWlXlYlZl0l1l2l3l4l5l6l7l8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l{l|l}l~lambmcmdmemfmgmhmimjmkmlmmmnmompmqmrmsmtmumvm}g%ghcwmGbxmymzmAmBmCm@ DmEmFmGmHm~gicImJmjckclcb KmLmMmNmOmPmQmRmyiahbhchdhSmTm.iUmmcncVmWmocpcXmYmehZm0mfhziqcrcsc1m2m3m4m5m6m7m8m9m!m#m$m%m'm(m)mtcuc*m+m/i,m-mgh:i.m/m:m;mhh=m?m@m[m]mx [ y z A B C ] ^mih_m`m{m|m}mvcwc~manbncn9idnjhenfnHbIbJbD E KbgnhninjnknkhlnmnnnonpnqnrnxcycsnlhtnunmhvnwnxnynnhznAnBnCnDnEnFnzcGnAcBcCcubLbDcHnEcFcMbF InohJnKnLnMnNnOnPnQnRnSnTnUnVnWnXnYnZn0n1n2n3n4n5n6n7n8n9n!n#n$n%n'n(n)n*n+n,n-n.n/n:nAi;n=n?n@n[n]n^n_n`n{n|n}n~naobo;i=i?icodoeofogohoioi |eGcBiCiDijokolomonooopoqorosotouovowoxoyozoAoBoCoDoEoFoGoHoIoJoKoLoMoNoOoPoQoRoSoToUoVoWoXoYoZo0o1o2o3o4o5o6o7o8o9o!o#o$o%o'o(o)o*o+o,o-o.o/o:o;o=o?o@o[o]o^o_o`o{o|o}o~oapbpcpdpepfpgphpipjpkplpmpnpopppqprpsptpupvpwpxpypzpApBpCpDpEpFpGpHpIpJpKpLpph'gHcMpNbNpOpPpQpRpSpTp^ UpVpWpXpYpqhIcZp0pJcKcLcc 1p2p3p4p5p6p7p8pEirhshthuh9p!p@i#pMcNc$p%pOcPc'p(pvh)p*pwhFiQcRcSc+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{pTcUc|p}p[i~paqxh]ibqcqdqeqyhfqgqhqiqjqG _ H I J K L ` kqzhlqmqnqoqpqVcWcqqrqsqtq!iuqAhvqwqObPbQbM N RbxqyqzqAqBqBhCqDqEqFqGqHqIqXcYcZc{ 0c1c| 2c3c4cJqChKqLqDhMqNqOqPqEhQqRqSqTqUqVqWq5cXq6c7c8cvbSb9cYq!c#cZqFhTbO 0qGh1q2q3q4q5q6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdr$cerGifrgrhrirjrkrlrmrnrorprqrrrsrtr^i_i`iurvrwrxryrzrArj Cf%cHiIiJiBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r^r_r`r{r|r}r~rasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3sHh(g'c4sUb5s6s7s8s9s!s(c#s} $s%s's(s)sIh)c*s+s*c+c,cd ,s-s.s/s:s;s=s?sKiJhKhLhMh@s[s{i]s-c.c^s_s/c:c`s{sNh|s}sOhLi;c=c?c~satbtctdtetftgthtitjtktltmtntot@c[cptqt|irtstPh}ittutvtwtQhxtytztAtBtP ~ Q R S T U abCtRhDtEtFtGtHt]c^cItJtKtLt#iMtShNtOtVbWbXbV W YbPtQtRtStTtThUtVtWtXtYtZt0t_c`c{cbb|c}ccb~cadbd1tUh2t3tVh4t5t6t7tWh8t9t!t#t$t%t'tcd(tddedfdwbZbgd)thdid*tXh0bX +tYh,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulumunuoupuqurusutuuuvujdwuMixuyuzuAuBuCuDuEuFuGuHuIuJuKuLu~iajbjMuNuOuPuQuRuSuk 7fkdNiOiPiTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[u]u^u_u`u{u|u}u~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.vZh)gld/v1b:v;v=v?v@v[vmd]vdb^v_v`v{v|v0hnd}v~vodpdqde awbwcwdwewfwgwhwQi1h2h3h4hiwjwcjkwrdsdlwmwtdudnwow5hpwqw6hRivdwdxdrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwydzdHwIwdjJwKw7hejLwMwNwOw8hPwQwRwSwTwY ebZ 0 1 2 3 fbUw9hVwWwXwYwZwAdBd0w1w2w3w$i4w!h5w6w2b3b4b4 5 5b7w8w9w!w#w#h$w%w'w(w)w*w+wCdDdEdgbFdGdhbHdIdJd,w$h-w.w%h/w:w;w=w'h?w@w[w]w^w_w`wKd{wLdMdNdxb6bOd|wPdQd}w(h7b6 ~w)haxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxRdOxSiPxQxRxSxTxUxVxWxXxYxZx0x1x2x3xfjgjhj4x5x6x7x8x9x!xl bgSdTiUiVi#x$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@x[x]x^x_x`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,y-y.y/y:y;y=y?y@y[y]y^y_y`y{y|y}y~yazbzcz*h*gTddz8bezfzgzhzizjzUdkziblzmznzozpz+hVdqzrzWdXdYdf sztzuzvzwzxzyzzzWi,h-h.h/hAzBzijCzZd0dDzEz1d2dFzGz:hHzIz;hXi3d4d5dJzKzLzMzNzOzPzQzRzSzTzUzVzWzXzYz6d7dZz0zjj1z2z=hkj3z4z5z6z?h7z8z9z!z#z7 jb8 9 ! # $ kb$z@h%z'z(z)z*z8d9d+z,z-z.z%i/z[h:z;z9b!b#b% ' $b=z?z@z[z]z]h^z_z`z{z|z}z~z!d#d$dlb%d'dmb(d)d*daA^hbAcA_hdAeAfAgA`hhAiAjAkAlAmAnA+doA,d-d.dyb%b/dpA:d;dqA{h'b( rA|hsAtAuAvAwAxAyAzAAABACADAEAFAGAHAIAJAKALAMANAOAPAQARASATAUAVAWAXAYAZA0A1A2A3A4A5A=d6AYi7A8A9A!A#A$A%A'A(A)A*A+A,A-A.Aljmjnj/A:A;A=A?A@A[Am Gg?dZi0i1i]A^A_A`A{A|A}A~AaBbBcBdBeBfBgBhBiBjBkBlBmBnBoBpBqBrBsBtBuBvBwBxByBzBABBBCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBRBSBTBUBVBWBXBYBZB0B1B2B3B4B5B6B7B8B9B!B#B$B%B'B(B)B*B+B,B-B.B/B:B;B=B?B@B[B]B^B_B`B{B|B}B~BaCbCcCdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuC}h+g@dvC(bwCxCyCzCACBC[dCCnbDCECFCGCHC~h]dICJC^d_d`dg KCLCMCNCOCPCQCRC2iaibicidiSCTCojUC{d|dVCWC}d~dXCeiYCZCfi3iaebe0C1C2C3C4C5C6C7C8C9C!C#C$C%C'C(Ccede)C*Cpj+C,Cgiqj-C.C/Chi:C;C=C?C@C) ob* + , - . pb[Cii]C^C_C`C{Cee|C}C~CaD'ibDjicDdD)b*b+b/ : ,beDfDgDhDiDkijDkDfegeqbheierbjekelelDlimDnDmioDpDqDrDnisDtDuDvDwDxDyDmezDneoepezb-bqeADreseBDoi.b; CDpiDDEDFDGDHDIDJDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD0D1D2D3D4D5D6D7D8D9D!D#D$D%D'D(D)Dte*D4i+D,D-D.D/D:D;D=D?D@D[D]D^D_D`Drjsjtj{D|D}D~DaEbEcEn !gue5i6i7idEeEfEgEhEiEjEkElEmEnEoEpEqErEsEtEuEvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZE0E1E2E3E4E5E6E7E8E9E!E#E$E%E'E(E)E*E+E,E-E.E/E:E;E=E?E@E[E]E^E_E`E{E|E}E~EaFbFcFdFeFfFgFhFiFjFkFlFmFnFoFpFqFrFsFtFuFvFwFxFyFzFqi,gveAF/bBFCFDFEFFFGFweHFsbIFJFKFLFMFrixeNFOFyezeAe
1010 if key in (500, Exception): 2a ujvjwjxjyjzjAjBjsi-g.g/g:gCjDj(iEj:b;bFjGj=b?bHjIj;gJjKj=gti@b[b]bLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j^b_b1j2j)i3j4j?g*i5j6j7j8j@g9j!j#j$j%jo = p q r s t ? 'j[g(j)j*j+j,j`b{b-j.j/j:j8i;j]g=j?jAbBbCbu v Db@j[j]j^j_j^g`j{j|j}j~jakbk|b}bck_gdkek`gfkgkhkik{gjkkklkmknkokpk~bqkacbccctbEbdcrkecfcFbw sk|gtkukvkwkxkykzkAkBkCkDkEkFkGkHkIkJkKkLkMkNkOkPkQkRkSkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7kui8k9k!k#k$k%k'k(k)k*k+k,k-k.k/k+i,i-i:k;k=k?k@k[k]kh 3egcviwixi^k_k`k{k|k}k~kalblcldlelflglhliljlklllmlnlolplqlrlsltlulvlwlxlylzlAlBlClDlElFlGlHlIlJlKlLlMlNlOlPlQlRlSlTlUlVlWlXlYlZl0l1l2l3l4l5l6l7l8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l{l|l}l~lambmcmdmemfmgmhmimjmkmlmmmnmompmqmrmsmtmumvm}g%ghcwmGbxmymzmAmBmCm@ DmEmFmGmHm~gicImJmjckclcb KmLmMmNmOmPmQmRmyiahbhchdhSmTm.iUmmcncVmWmocpcXmYmehZm0mfhziqcrcsc1m2m3m4m5m6m7m8m9m!m#m$m%m'm(m)mtcuc*m+m/i,m-mgh:i.m/m:m;mhh=m?m@m[m]mx [ y z A B C ] ^mih_m`m{m|m}mvcwc~manbncn9idnjhenfnHbIbJbD E KbgnhninjnknkhlnmnnnonpnqnrnxcycsnlhtnunmhvnwnxnynnhznAnBnCnDnEnFnzcGnAcBcCcubLbDcHnEcFcMbF InohJnKnLnMnNnOnPnQnRnSnTnUnVnWnXnYnZn0n1n2n3n4n5n6n7n8n9n!n#n$n%n'n(n)n*n+n,n-n.n/n:nAi;n=n?n@n[n]n^n_n`n{n|n}n~naobo;i=i?icodoeofogohoioi |eGcBiCiDijokolomonooopoqorosotouovowoxoyozoAoBoCoDoEoFoGoHoIoJoKoLoMoNoOoPoQoRoSoToUoVoWoXoYoZo0o1o2o3o4o5o6o7o8o9o!o#o$o%o'o(o)o*o+o,o-o.o/o:o;o=o?o@o[o]o^o_o`o{o|o}o~oapbpcpdpepfpgphpipjpkplpmpnpopppqprpsptpupvpwpxpypzpApBpCpDpEpFpGpHpIpJpKpLpph'gHcMpNbNpOpPpQpRpSpTp^ UpVpWpXpYpqhIcZp0pJcKcLcc 1p2p3p4p5p6p7p8pEirhshthuh9p!p@i#pMcNc$p%pOcPc'p(pvh)p*pwhFiQcRcSc+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{pTcUc|p}p[i~paqxh]ibqcqdqeqyhfqgqhqiqjqG _ H I J K L ` kqzhlqmqnqoqpqVcWcqqrqsqtq!iuqAhvqwqObPbQbM N RbxqyqzqAqBqBhCqDqEqFqGqHqIqXcYcZc{ 0c1c| 2c3c4cJqChKqLqDhMqNqOqPqEhQqRqSqTqUqVqWq5cXq6c7c8cvbSb9cYq!c#cZqFhTbO 0qGh1q2q3q4q5q6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdr$cerGifrgrhrirjrkrlrmrnrorprqrrrsrtr^i_i`iurvrwrxryrzrArj Cf%cHiIiJiBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r^r_r`r{r|r}r~rasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3sHh(g'c4sUb5s6s7s8s9s!s(c#s} $s%s's(s)sIh)c*s+s*c+c,cd ,s-s.s/s:s;s=s?sKiJhKhLhMh@s[s{i]s-c.c^s_s/c:c`s{sNh|s}sOhLi;c=c?c~satbtctdtetftgthtitjtktltmtntot@c[cptqt|irtstPh}ittutvtwtQhxtytztAtBtP ~ Q R S T U abCtRhDtEtFtGtHt]c^cItJtKtLt#iMtShNtOtVbWbXbV W YbPtQtRtStTtThUtVtWtXtYtZt0t_c`c{cbb|c}ccb~cadbd1tUh2t3tVh4t5t6t7tWh8t9t!t#t$t%t'tcd(tddedfdwbZbgd)thdid*tXh0bX +tYh,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulumunuoupuqurusutuuuvujdwuMixuyuzuAuBuCuDuEuFuGuHuIuJuKuLu~iajbjMuNuOuPuQuRuSuk 7fkdNiOiPiTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[u]u^u_u`u{u|u}u~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.vZh)gld/v1b:v;v=v?v@v[vmd]vdb^v_v`v{v|v0hnd}v~vodpdqde awbwcwdwewfwgwhwQi1h2h3h4hiwjwcjkwrdsdlwmwtdudnwow5hpwqw6hRivdwdxdrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwydzdHwIwdjJwKw7hejLwMwNwOw8hPwQwRwSwTwY ebZ 0 1 2 3 fbUw9hVwWwXwYwZwAdBd0w1w2w3w$i4w!h5w6w2b3b4b4 5 5b7w8w9w!w#w#h$w%w'w(w)w*w+wCdDdEdgbFdGdhbHdIdJd,w$h-w.w%h/w:w;w=w'h?w@w[w]w^w_w`wKd{wLdMdNdxb6bOd|wPdQd}w(h7b6 ~w)haxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxRdOxSiPxQxRxSxTxUxVxWxXxYxZx0x1x2x3xfjgjhj4x5x6x7x8x9x!xl bgSdTiUiVi#x$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@x[x]x^x_x`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,y-y.y/y:y;y=y?y@y[y]y^y_y`y{y|y}y~yazbzcz*h*gTddz8bezfzgzhzizjzUdkziblzmznzozpz+hVdqzrzWdXdYdf sztzuzvzwzxzyzzzWi,h-h.h/hAzBzijCzZd0dDzEz1d2dFzGz:hHzIz;hXi3d4d5dJzKzLzMzNzOzPzQzRzSzTzUzVzWzXzYz6d7dZz0zjj1z2z=hkj3z4z5z6z?h7z8z9z!z#z7 jb8 9 ! # $ kb$z@h%z'z(z)z*z8d9d+z,z-z.z%i/z[h:z;z9b!b#b% ' $b=z?z@z[z]z]h^z_z`z{z|z}z~z!d#d$dlb%d'dmb(d)d*daA^hbAcA_hdAeAfAgA`hhAiAjAkAlAmAnA+doA,d-d.dyb%b/dpA:d;dqA{h'b( rA|hsAtAuAvAwAxAyAzAAABACADAEAFAGAHAIAJAKALAMANAOAPAQARASATAUAVAWAXAYAZA0A1A2A3A4A5A=d6AYi7A8A9A!A#A$A%A'A(A)A*A+A,A-A.Aljmjnj/A:A;A=A?A@A[Am Gg?dZi0i1i]A^A_A`A{A|A}A~AaBbBcBdBeBfBgBhBiBjBkBlBmBnBoBpBqBrBsBtBuBvBwBxByBzBABBBCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBRBSBTBUBVBWBXBYBZB0B1B2B3B4B5B6B7B8B9B!B#B$B%B'B(B)B*B+B,B-B.B/B:B;B=B?B@B[B]B^B_B`B{B|B}B~BaCbCcCdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuC}h+g@dvC(bwCxCyCzCACBC[dCCnbDCECFCGCHC~h]dICJC^d_d`dg KCLCMCNCOCPCQCRC2iaibicidiSCTCojUC{d|dVCWC}d~dXCeiYCZCfi3iaebe0C1C2C3C4C5C6C7C8C9C!C#C$C%C'C(Ccede)C*Cpj+C,Cgiqj-C.C/Chi:C;C=C?C@C) ob* + , - . pb[Cii]C^C_C`C{Cee|C}C~CaD'ibDjicDdD)b*b+b/ : ,beDfDgDhDiDkijDkDfegeqbheierbjekelelDlimDnDmioDpDqDrDnisDtDuDvDwDxDyDmezDneoepezb-bqeADreseBDoi.b; CDpiDDEDFDGDHDIDJDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD0D1D2D3D4D5D6D7D8D9D!D#D$D%D'D(D)Dte*D4i+D,D-D.D/D:D;D=D?D@D[D]D^D_D`Drjsjtj{D|D}D~DaEbEcEn !gue5i6i7idEeEfEgEhEiEjEkElEmEnEoEpEqErEsEtEuEvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZE0E1E2E3E4E5E6E7E8E9E!E#E$E%E'E(E)E*E+E,E-E.E/E:E;E=E?E@E[E]E^E_E`E{E|E}E~EaFbFcFdFeFfFgFhFiFjFkFlFmFnFoFpFqFrFsFtFuFvFwFxFyFzFqi,gveAF/bBFCFDFEFFFGFweHFsbIFJFKFLFMFrixeNFOFyezeAe
1011 error_handler = value 2*i:i]i}iejkjqj
1012 else:
1013 exception_handlers[key] = value 2a ujvjwjxjyjzjAjBjsi-g.g/g:gCjDj(iEj:b;bFjGj=b?bHjIj;gJjKj=gti@b[b]bLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j^b_b1j2j)i3j4j?g*i5j6j7j8j@g9j!j#j$j%jo = p q r s t ? 'j[g(j)j*j+j,j`b{b-j.j/j:j8i;j]g=j?jAbBbCbu v Db@j[j]j^j_j^g`j{j|j}j~jakbk|b}bck_gdkek`gfkgkhkik{gjkkklkmknkokpk~bqkacbccctbEbdcrkecfcFbw sk|gtkukvkwkxkykzkAkBkCkDkEkFkGkHkIkJkKkLkMkNkOkPkQkRkSkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7kui8k9k!k#k$k%k'k(k)k*k+k,k-k.k/k+i,i-i:k;k=k?k@k[k]kh 3egcviwixi^k_k`k{k|k}k~kalblcldlelflglhliljlklllmlnlolplqlrlsltlulvlwlxlylzlAlBlClDlElFlGlHlIlJlKlLlMlNlOlPlQlRlSlTlUlVlWlXlYlZl0l1l2l3l4l5l6l7l8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l{l|l}l~lambmcmdmemfmgmhmimjmkmlmmmnmompmqmrmsmtmumvm}g%ghcwmGbxmymzmAmBmCm@ DmEmFmGmHm~gicImJmjckclcb KmLmMmNmOmPmQmRmyiahbhchdhSmTm.iUmmcncVmWmocpcXmYmehZm0mfhziqcrcsc1m2m3m4m5m6m7m8m9m!m#m$m%m'm(m)mtcuc*m+m/i,m-mgh:i.m/m:m;mhh=m?m@m[m]mx [ y z A B C ] ^mih_m`m{m|m}mvcwc~manbncn9idnjhenfnHbIbJbD E KbgnhninjnknkhlnmnnnonpnqnrnxcycsnlhtnunmhvnwnxnynnhznAnBnCnDnEnFnzcGnAcBcCcubLbDcHnEcFcMbF InohJnKnLnMnNnOnPnQnRnSnTnUnVnWnXnYnZn0n1n2n3n4n5n6n7n8n9n!n#n$n%n'n(n)n*n+n,n-n.n/n:nAi;n=n?n@n[n]n^n_n`n{n|n}n~naobo;i=i?icodoeofogohoioi |eGcBiCiDijokolomonooopoqorosotouovowoxoyozoAoBoCoDoEoFoGoHoIoJoKoLoMoNoOoPoQoRoSoToUoVoWoXoYoZo0o1o2o3o4o5o6o7o8o9o!o#o$o%o'o(o)o*o+o,o-o.o/o:o;o=o?o@o[o]o^o_o`o{o|o}o~oapbpcpdpepfpgphpipjpkplpmpnpopppqprpsptpupvpwpxpypzpApBpCpDpEpFpGpHpIpJpKpLpph'gHcMpNbNpOpPpQpRpSpTp^ UpVpWpXpYpqhIcZp0pJcKcLcc 1p2p3p4p5p6p7p8pEirhshthuh9p!p@i#pMcNc$p%pOcPc'p(pvh)p*pwhFiQcRcSc+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{pTcUc|p}p[i~paqxh]ibqcqdqeqyhfqgqhqiqjqG _ H I J K L ` kqzhlqmqnqoqpqVcWcqqrqsqtq!iuqAhvqwqObPbQbM N RbxqyqzqAqBqBhCqDqEqFqGqHqIqXcYcZc{ 0c1c| 2c3c4cJqChKqLqDhMqNqOqPqEhQqRqSqTqUqVqWq5cXq6c7c8cvbSb9cYq!c#cZqFhTbO 0qGh1q2q3q4q5q6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdr$cerGifrgrhrirjrkrlrmrnrorprqrrrsrtr^i_i`iurvrwrxryrzrArj Cf%cHiIiJiBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r^r_r`r{r|r}r~rasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3sHh(g'c4sUb5s6s7s8s9s!s(c#s} $s%s's(s)sIh)c*s+s*c+c,cd ,s-s.s/s:s;s=s?sKiJhKhLhMh@s[s{i]s-c.c^s_s/c:c`s{sNh|s}sOhLi;c=c?c~satbtctdtetftgthtitjtktltmtntot@c[cptqt|irtstPh}ittutvtwtQhxtytztAtBtP ~ Q R S T U abCtRhDtEtFtGtHt]c^cItJtKtLt#iMtShNtOtVbWbXbV W YbPtQtRtStTtThUtVtWtXtYtZt0t_c`c{cbb|c}ccb~cadbd1tUh2t3tVh4t5t6t7tWh8t9t!t#t$t%t'tcd(tddedfdwbZbgd)thdid*tXh0bX +tYh,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulumunuoupuqurusutuuuvujdwuMixuyuzuAuBuCuDuEuFuGuHuIuJuKuLu~iajbjMuNuOuPuQuRuSuk 7fkdNiOiPiTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[u]u^u_u`u{u|u}u~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.vZh)gld/v1b:v;v=v?v@v[vmd]vdb^v_v`v{v|v0hnd}v~vodpdqde awbwcwdwewfwgwhwQi1h2h3h4hiwjwcjkwrdsdlwmwtdudnwow5hpwqw6hRivdwdxdrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwydzdHwIwdjJwKw7hejLwMwNwOw8hPwQwRwSwTwY ebZ 0 1 2 3 fbUw9hVwWwXwYwZwAdBd0w1w2w3w$i4w!h5w6w2b3b4b4 5 5b7w8w9w!w#w#h$w%w'w(w)w*w+wCdDdEdgbFdGdhbHdIdJd,w$h-w.w%h/w:w;w=w'h?w@w[w]w^w_w`wKd{wLdMdNdxb6bOd|wPdQd}w(h7b6 ~w)haxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxRdOxSiPxQxRxSxTxUxVxWxXxYxZx0x1x2x3xfjgjhj4x5x6x7x8x9x!xl bgSdTiUiVi#x$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@x[x]x^x_x`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,y-y.y/y:y;y=y?y@y[y]y^y_y`y{y|y}y~yazbzcz*h*gTddz8bezfzgzhzizjzUdkziblzmznzozpz+hVdqzrzWdXdYdf sztzuzvzwzxzyzzzWi,h-h.h/hAzBzijCzZd0dDzEz1d2dFzGz:hHzIz;hXi3d4d5dJzKzLzMzNzOzPzQzRzSzTzUzVzWzXzYz6d7dZz0zjj1z2z=hkj3z4z5z6z?h7z8z9z!z#z7 jb8 9 ! # $ kb$z@h%z'z(z)z*z8d9d+z,z-z.z%i/z[h:z;z9b!b#b% ' $b=z?z@z[z]z]h^z_z`z{z|z}z~z!d#d$dlb%d'dmb(d)d*daA^hbAcA_hdAeAfAgA`hhAiAjAkAlAmAnA+doA,d-d.dyb%b/dpA:d;dqA{h'b( rA|hsAtAuAvAwAxAyAzAAABACADAEAFAGAHAIAJAKALAMANAOAPAQARASATAUAVAWAXAYAZA0A1A2A3A4A5A=d6AYi7A8A9A!A#A$A%A'A(A)A*A+A,A-A.Aljmjnj/A:A;A=A?A@A[Am Gg?dZi0i1i]A^A_A`A{A|A}A~AaBbBcBdBeBfBgBhBiBjBkBlBmBnBoBpBqBrBsBtBuBvBwBxByBzBABBBCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBRBSBTBUBVBWBXBYBZB0B1B2B3B4B5B6B7B8B9B!B#B$B%B'B(B)B*B+B,B-B.B/B:B;B=B?B@B[B]B^B_B`B{B|B}B~BaCbCcCdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuC}h+g@dvC(bwCxCyCzCACBC[dCCnbDCECFCGCHC~h]dICJC^d_d`dg KCLCMCNCOCPCQCRC2iaibicidiSCTCojUC{d|dVCWC}d~dXCeiYCZCfi3iaebe0C1C2C3C4C5C6C7C8C9C!C#C$C%C'C(Ccede)C*Cpj+C,Cgiqj-C.C/Chi:C;C=C?C@C) ob* + , - . pb[Cii]C^C_C`C{Cee|C}C~CaD'ibDjicDdD)b*b+b/ : ,beDfDgDhDiDkijDkDfegeqbheierbjekelelDlimDnDmioDpDqDrDnisDtDuDvDwDxDyDmezDneoepezb-bqeADreseBDoi.b; CDpiDDEDFDGDHDIDJDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD0D1D2D3D4D5D6D7D8D9D!D#D$D%D'D(D)Dte*D4i+D,D-D.D/D:D;D=D?D@D[D]D^D_D`Drjsjtj{D|D}D~DaEbEcEn !gue5i6i7idEeEfEgEhEiEjEkElEmEnEoEpEqErEsEtEuEvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZE0E1E2E3E4E5E6E7E8E9E!E#E$E%E'E(E)E*E+E,E-E.E/E:E;E=E?E@E[E]E^E_E`E{E|E}E~EaFbFcFdFeFfFgFhFiFjFkFlFmFnFoFpFqFrFsFtFuFvFwFxFyFzFqi,gveAF/bBFCFDFEFFFGFweHFsbIFJFKFLFMFrixeNFOFyezeAe
1015 middleware = ( 2a ujvjwjxjyjzjAjBjsi-g.g/g:gCjDj(iEj:b;bFjGj=b?bHjIj;gJjKj=gti@b[b]bLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j^b_b1j2j)i3j4j?g*i5j6j7j8j@g9j!j#j$j%jo = p q r s t ? 'j[g(j)j*j+j,j`b{b-j.j/j:j8i;j]g=j?jAbBbCbu v Db@j[j]j^j_j^g`j{j|j}j~jakbk|b}bck_gdkek`gfkgkhkik{gjkkklkmknkokpk~bqkacbccctbEbdcrkecfcFbw sk|gtkukvkwkxkykzkAkBkCkDkEkFkGkHkIkJkKkLkMkNkOkPkQkRkSkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7kui8k9k!k#k$k%k'k(k)k*k+k,k-k.k/k+i,i-i:k;k=k?k@k[k]kh 3egcviwixi^k_k`k{k|k}k~kalblcldlelflglhliljlklllmlnlolplqlrlsltlulvlwlxlylzlAlBlClDlElFlGlHlIlJlKlLlMlNlOlPlQlRlSlTlUlVlWlXlYlZl0l1l2l3l4l5l6l7l8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l{l|l}l~lambmcmdmemfmgmhmimjmkmlmmmnmompmqmrmsmtmumvm}g%ghcwmGbxmymzmAmBmCm@ DmEmFmGmHm~gicImJmjckclcb KmLmMmNmOmPmQmRmyiahbhchdhSmTm.iUmmcncVmWmocpcXmYmehZm0mfhziqcrcsc1m2m3m4m5m6m7m8m9m!m#m$m%m'm(m)mtcuc*m+m/i,m-mgh:i.m/m:m;mhh=m?m@m[m]mx [ y z A B C ] ^mih_m`m{m|m}mvcwc~manbncn9idnjhenfnHbIbJbD E KbgnhninjnknkhlnmnnnonpnqnrnxcycsnlhtnunmhvnwnxnynnhznAnBnCnDnEnFnzcGnAcBcCcubLbDcHnEcFcMbF InohJnKnLnMnNnOnPnQnRnSnTnUnVnWnXnYnZn0n1n2n3n4n5n6n7n8n9n!n#n$n%n'n(n)n*n+n,n-n.n/n:nAi;n=n?n@n[n]n^n_n`n{n|n}n~naobo;i=i?icodoeofogohoioi |eGcBiCiDijokolomonooopoqorosotouovowoxoyozoAoBoCoDoEoFoGoHoIoJoKoLoMoNoOoPoQoRoSoToUoVoWoXoYoZo0o1o2o3o4o5o6o7o8o9o!o#o$o%o'o(o)o*o+o,o-o.o/o:o;o=o?o@o[o]o^o_o`o{o|o}o~oapbpcpdpepfpgphpipjpkplpmpnpopppqprpsptpupvpwpxpypzpApBpCpDpEpFpGpHpIpJpKpLpph'gHcMpNbNpOpPpQpRpSpTp^ UpVpWpXpYpqhIcZp0pJcKcLcc 1p2p3p4p5p6p7p8pEirhshthuh9p!p@i#pMcNc$p%pOcPc'p(pvh)p*pwhFiQcRcSc+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{pTcUc|p}p[i~paqxh]ibqcqdqeqyhfqgqhqiqjqG _ H I J K L ` kqzhlqmqnqoqpqVcWcqqrqsqtq!iuqAhvqwqObPbQbM N RbxqyqzqAqBqBhCqDqEqFqGqHqIqXcYcZc{ 0c1c| 2c3c4cJqChKqLqDhMqNqOqPqEhQqRqSqTqUqVqWq5cXq6c7c8cvbSb9cYq!c#cZqFhTbO 0qGh1q2q3q4q5q6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdr$cerGifrgrhrirjrkrlrmrnrorprqrrrsrtr^i_i`iurvrwrxryrzrArj Cf%cHiIiJiBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r^r_r`r{r|r}r~rasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3sHh(g'c4sUb5s6s7s8s9s!s(c#s} $s%s's(s)sIh)c*s+s*c+c,cd ,s-s.s/s:s;s=s?sKiJhKhLhMh@s[s{i]s-c.c^s_s/c:c`s{sNh|s}sOhLi;c=c?c~satbtctdtetftgthtitjtktltmtntot@c[cptqt|irtstPh}ittutvtwtQhxtytztAtBtP ~ Q R S T U abCtRhDtEtFtGtHt]c^cItJtKtLt#iMtShNtOtVbWbXbV W YbPtQtRtStTtThUtVtWtXtYtZt0t_c`c{cbb|c}ccb~cadbd1tUh2t3tVh4t5t6t7tWh8t9t!t#t$t%t'tcd(tddedfdwbZbgd)thdid*tXh0bX +tYh,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulumunuoupuqurusutuuuvujdwuMixuyuzuAuBuCuDuEuFuGuHuIuJuKuLu~iajbjMuNuOuPuQuRuSuk 7fkdNiOiPiTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[u]u^u_u`u{u|u}u~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.vZh)gld/v1b:v;v=v?v@v[vmd]vdb^v_v`v{v|v0hnd}v~vodpdqde awbwcwdwewfwgwhwQi1h2h3h4hiwjwcjkwrdsdlwmwtdudnwow5hpwqw6hRivdwdxdrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwydzdHwIwdjJwKw7hejLwMwNwOw8hPwQwRwSwTwY ebZ 0 1 2 3 fbUw9hVwWwXwYwZwAdBd0w1w2w3w$i4w!h5w6w2b3b4b4 5 5b7w8w9w!w#w#h$w%w'w(w)w*w+wCdDdEdgbFdGdhbHdIdJd,w$h-w.w%h/w:w;w=w'h?w@w[w]w^w_w`wKd{wLdMdNdxb6bOd|wPdQd}w(h7b6 ~w)haxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxRdOxSiPxQxRxSxTxUxVxWxXxYxZx0x1x2x3xfjgjhj4x5x6x7x8x9x!xl bgSdTiUiVi#x$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@x[x]x^x_x`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,y-y.y/y:y;y=y?y@y[y]y^y_y`y{y|y}y~yazbzcz*h*gTddz8bezfzgzhzizjzUdkziblzmznzozpz+hVdqzrzWdXdYdf sztzuzvzwzxzyzzzWi,h-h.h/hAzBzijCzZd0dDzEz1d2dFzGz:hHzIz;hXi3d4d5dJzKzLzMzNzOzPzQzRzSzTzUzVzWzXzYz6d7dZz0zjj1z2z=hkj3z4z5z6z?h7z8z9z!z#z7 jb8 9 ! # $ kb$z@h%z'z(z)z*z8d9d+z,z-z.z%i/z[h:z;z9b!b#b% ' $b=z?z@z[z]z]h^z_z`z{z|z}z~z!d#d$dlb%d'dmb(d)d*daA^hbAcA_hdAeAfAgA`hhAiAjAkAlAmAnA+doA,d-d.dyb%b/dpA:d;dqA{h'b( rA|hsAtAuAvAwAxAyAzAAABACADAEAFAGAHAIAJAKALAMANAOAPAQARASATAUAVAWAXAYAZA0A1A2A3A4A5A=d6AYi7A8A9A!A#A$A%A'A(A)A*A+A,A-A.Aljmjnj/A:A;A=A?A@A[Am Gg?dZi0i1i]A^A_A`A{A|A}A~AaBbBcBdBeBfBgBhBiBjBkBlBmBnBoBpBqBrBsBtBuBvBwBxByBzBABBBCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBRBSBTBUBVBWBXBYBZB0B1B2B3B4B5B6B7B8B9B!B#B$B%B'B(B)B*B+B,B-B.B/B:B;B=B?B@B[B]B^B_B`B{B|B}B~BaCbCcCdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuC}h+g@dvC(bwCxCyCzCACBC[dCCnbDCECFCGCHC~h]dICJC^d_d`dg KCLCMCNCOCPCQCRC2iaibicidiSCTCojUC{d|dVCWC}d~dXCeiYCZCfi3iaebe0C1C2C3C4C5C6C7C8C9C!C#C$C%C'C(Ccede)C*Cpj+C,Cgiqj-C.C/Chi:C;C=C?C@C) ob* + , - . pb[Cii]C^C_C`C{Cee|C}C~CaD'ibDjicDdD)b*b+b/ : ,beDfDgDhDiDkijDkDfegeqbheierbjekelelDlimDnDmioDpDqDrDnisDtDuDvDwDxDyDmezDneoepezb-bqeADreseBDoi.b; CDpiDDEDFDGDHDIDJDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD0D1D2D3D4D5D6D7D8D9D!D#D$D%D'D(D)Dte*D4i+D,D-D.D/D:D;D=D?D@D[D]D^D_D`Drjsjtj{D|D}D~DaEbEcEn !gue5i6i7idEeEfEgEhEiEjEkElEmEnEoEpEqErEsEtEuEvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZE0E1E2E3E4E5E6E7E8E9E!E#E$E%E'E(E)E*E+E,E-E.E/E:E;E=E?E@E[E]E^E_E`E{E|E}E~EaFbFcFdFeFfFgFhFiFjFkFlFmFnFoFpFqFrFsFtFuFvFwFxFyFzFqi,gveAF/bBFCFDFEFFFGFweHFsbIFJFKFLFMFrixeNFOFyezeAe
1016 [Middleware(ServerErrorMiddleware, handler=error_handler, debug=debug)]
1017 + self.user_middleware
1018 + [
1019 Middleware(
1020 ExceptionMiddleware, handlers=exception_handlers, debug=debug
1021 ),
1022 # Add FastAPI-specific AsyncExitStackMiddleware for closing files.
1023 # Before this was also used for closing dependencies with yield but
1024 # those now have their own AsyncExitStack, to properly support
1025 # streaming responses while keeping compatibility with the previous
1026 # versions (as of writing 0.117.1) that allowed doing
1027 # except HTTPException inside a dependency with yield.
1028 # This needs to happen after user middlewares because those create a
1029 # new contextvars context copy by using a new AnyIO task group.
1030 # This AsyncExitStack preserves the context for contextvars, not
1031 # strictly necessary for closing files but it was one of the original
1032 # intentions.
1033 # If the AsyncExitStack lived outside of the custom middlewares and
1034 # contextvars were set, for example in a dependency with 'yield'
1035 # in that internal contextvars context, the values would not be
1036 # available in the outer context of the AsyncExitStack.
1037 # By placing the middleware and the AsyncExitStack here, inside all
1038 # user middlewares, the same context is used.
1039 # This is currently not needed, only for closing files, but used to be
1040 # important when dependencies with yield were closed here.
1041 Middleware(AsyncExitStackMiddleware),
1042 ]
1043 )
1045 app = self.router 2a ujvjwjxjyjzjAjBjsi-g.g/g:gCjDj(iEj:b;bFjGj=b?bHjIj;gJjKj=gti@b[b]bLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j^b_b1j2j)i3j4j?g*i5j6j7j8j@g9j!j#j$j%jo = p q r s t ? 'j[g(j)j*j+j,j`b{b-j.j/j:j8i;j]g=j?jAbBbCbu v Db@j[j]j^j_j^g`j{j|j}j~jakbk|b}bck_gdkek`gfkgkhkik{gjkkklkmknkokpk~bqkacbccctbEbdcrkecfcFbw sk|gtkukvkwkxkykzkAkBkCkDkEkFkGkHkIkJkKkLkMkNkOkPkQkRkSkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7kui8k9k!k#k$k%k'k(k)k*k+k,k-k.k/k+i,i-i:k;k=k?k@k[k]kh 3egcviwixi^k_k`k{k|k}k~kalblcldlelflglhliljlklllmlnlolplqlrlsltlulvlwlxlylzlAlBlClDlElFlGlHlIlJlKlLlMlNlOlPlQlRlSlTlUlVlWlXlYlZl0l1l2l3l4l5l6l7l8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l{l|l}l~lambmcmdmemfmgmhmimjmkmlmmmnmompmqmrmsmtmumvm}g%ghcwmGbxmymzmAmBmCm@ DmEmFmGmHm~gicImJmjckclcb KmLmMmNmOmPmQmRmyiahbhchdhSmTm.iUmmcncVmWmocpcXmYmehZm0mfhziqcrcsc1m2m3m4m5m6m7m8m9m!m#m$m%m'm(m)mtcuc*m+m/i,m-mgh:i.m/m:m;mhh=m?m@m[m]mx [ y z A B C ] ^mih_m`m{m|m}mvcwc~manbncn9idnjhenfnHbIbJbD E KbgnhninjnknkhlnmnnnonpnqnrnxcycsnlhtnunmhvnwnxnynnhznAnBnCnDnEnFnzcGnAcBcCcubLbDcHnEcFcMbF InohJnKnLnMnNnOnPnQnRnSnTnUnVnWnXnYnZn0n1n2n3n4n5n6n7n8n9n!n#n$n%n'n(n)n*n+n,n-n.n/n:nAi;n=n?n@n[n]n^n_n`n{n|n}n~naobo;i=i?icodoeofogohoioi |eGcBiCiDijokolomonooopoqorosotouovowoxoyozoAoBoCoDoEoFoGoHoIoJoKoLoMoNoOoPoQoRoSoToUoVoWoXoYoZo0o1o2o3o4o5o6o7o8o9o!o#o$o%o'o(o)o*o+o,o-o.o/o:o;o=o?o@o[o]o^o_o`o{o|o}o~oapbpcpdpepfpgphpipjpkplpmpnpopppqprpsptpupvpwpxpypzpApBpCpDpEpFpGpHpIpJpKpLpph'gHcMpNbNpOpPpQpRpSpTp^ UpVpWpXpYpqhIcZp0pJcKcLcc 1p2p3p4p5p6p7p8pEirhshthuh9p!p@i#pMcNc$p%pOcPc'p(pvh)p*pwhFiQcRcSc+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{pTcUc|p}p[i~paqxh]ibqcqdqeqyhfqgqhqiqjqG _ H I J K L ` kqzhlqmqnqoqpqVcWcqqrqsqtq!iuqAhvqwqObPbQbM N RbxqyqzqAqBqBhCqDqEqFqGqHqIqXcYcZc{ 0c1c| 2c3c4cJqChKqLqDhMqNqOqPqEhQqRqSqTqUqVqWq5cXq6c7c8cvbSb9cYq!c#cZqFhTbO 0qGh1q2q3q4q5q6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdr$cerGifrgrhrirjrkrlrmrnrorprqrrrsrtr^i_i`iurvrwrxryrzrArj Cf%cHiIiJiBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r^r_r`r{r|r}r~rasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3sHh(g'c4sUb5s6s7s8s9s!s(c#s} $s%s's(s)sIh)c*s+s*c+c,cd ,s-s.s/s:s;s=s?sKiJhKhLhMh@s[s{i]s-c.c^s_s/c:c`s{sNh|s}sOhLi;c=c?c~satbtctdtetftgthtitjtktltmtntot@c[cptqt|irtstPh}ittutvtwtQhxtytztAtBtP ~ Q R S T U abCtRhDtEtFtGtHt]c^cItJtKtLt#iMtShNtOtVbWbXbV W YbPtQtRtStTtThUtVtWtXtYtZt0t_c`c{cbb|c}ccb~cadbd1tUh2t3tVh4t5t6t7tWh8t9t!t#t$t%t'tcd(tddedfdwbZbgd)thdid*tXh0bX +tYh,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulumunuoupuqurusutuuuvujdwuMixuyuzuAuBuCuDuEuFuGuHuIuJuKuLu~iajbjMuNuOuPuQuRuSuk 7fkdNiOiPiTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[u]u^u_u`u{u|u}u~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.vZh)gld/v1b:v;v=v?v@v[vmd]vdb^v_v`v{v|v0hnd}v~vodpdqde awbwcwdwewfwgwhwQi1h2h3h4hiwjwcjkwrdsdlwmwtdudnwow5hpwqw6hRivdwdxdrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwydzdHwIwdjJwKw7hejLwMwNwOw8hPwQwRwSwTwY ebZ 0 1 2 3 fbUw9hVwWwXwYwZwAdBd0w1w2w3w$i4w!h5w6w2b3b4b4 5 5b7w8w9w!w#w#h$w%w'w(w)w*w+wCdDdEdgbFdGdhbHdIdJd,w$h-w.w%h/w:w;w=w'h?w@w[w]w^w_w`wKd{wLdMdNdxb6bOd|wPdQd}w(h7b6 ~w)haxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxRdOxSiPxQxRxSxTxUxVxWxXxYxZx0x1x2x3xfjgjhj4x5x6x7x8x9x!xl bgSdTiUiVi#x$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@x[x]x^x_x`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,y-y.y/y:y;y=y?y@y[y]y^y_y`y{y|y}y~yazbzcz*h*gTddz8bezfzgzhzizjzUdkziblzmznzozpz+hVdqzrzWdXdYdf sztzuzvzwzxzyzzzWi,h-h.h/hAzBzijCzZd0dDzEz1d2dFzGz:hHzIz;hXi3d4d5dJzKzLzMzNzOzPzQzRzSzTzUzVzWzXzYz6d7dZz0zjj1z2z=hkj3z4z5z6z?h7z8z9z!z#z7 jb8 9 ! # $ kb$z@h%z'z(z)z*z8d9d+z,z-z.z%i/z[h:z;z9b!b#b% ' $b=z?z@z[z]z]h^z_z`z{z|z}z~z!d#d$dlb%d'dmb(d)d*daA^hbAcA_hdAeAfAgA`hhAiAjAkAlAmAnA+doA,d-d.dyb%b/dpA:d;dqA{h'b( rA|hsAtAuAvAwAxAyAzAAABACADAEAFAGAHAIAJAKALAMANAOAPAQARASATAUAVAWAXAYAZA0A1A2A3A4A5A=d6AYi7A8A9A!A#A$A%A'A(A)A*A+A,A-A.Aljmjnj/A:A;A=A?A@A[Am Gg?dZi0i1i]A^A_A`A{A|A}A~AaBbBcBdBeBfBgBhBiBjBkBlBmBnBoBpBqBrBsBtBuBvBwBxByBzBABBBCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBRBSBTBUBVBWBXBYBZB0B1B2B3B4B5B6B7B8B9B!B#B$B%B'B(B)B*B+B,B-B.B/B:B;B=B?B@B[B]B^B_B`B{B|B}B~BaCbCcCdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuC}h+g@dvC(bwCxCyCzCACBC[dCCnbDCECFCGCHC~h]dICJC^d_d`dg KCLCMCNCOCPCQCRC2iaibicidiSCTCojUC{d|dVCWC}d~dXCeiYCZCfi3iaebe0C1C2C3C4C5C6C7C8C9C!C#C$C%C'C(Ccede)C*Cpj+C,Cgiqj-C.C/Chi:C;C=C?C@C) ob* + , - . pb[Cii]C^C_C`C{Cee|C}C~CaD'ibDjicDdD)b*b+b/ : ,beDfDgDhDiDkijDkDfegeqbheierbjekelelDlimDnDmioDpDqDrDnisDtDuDvDwDxDyDmezDneoepezb-bqeADreseBDoi.b; CDpiDDEDFDGDHDIDJDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD0D1D2D3D4D5D6D7D8D9D!D#D$D%D'D(D)Dte*D4i+D,D-D.D/D:D;D=D?D@D[D]D^D_D`Drjsjtj{D|D}D~DaEbEcEn !gue5i6i7idEeEfEgEhEiEjEkElEmEnEoEpEqErEsEtEuEvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZE0E1E2E3E4E5E6E7E8E9E!E#E$E%E'E(E)E*E+E,E-E.E/E:E;E=E?E@E[E]E^E_E`E{E|E}E~EaFbFcFdFeFfFgFhFiFjFkFlFmFnFoFpFqFrFsFtFuFvFwFxFyFzFqi,gveAF/bBFCFDFEFFFGFweHFsbIFJFKFLFMFrixeNFOFyezeAe
1046 for cls, args, kwargs in reversed(middleware): 2a ujvjwjxjyjzjAjBjsi-g.g/g:gCjDj(iEj:b;bFjGj=b?bHjIj;gJjKj=gti@b[b]bLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j^b_b1j2j)i3j4j?g*i5j6j7j8j@g9j!j#j$j%jo = p q r s t ? 'j[g(j)j*j+j,j`b{b-j.j/j:j8i;j]g=j?jAbBbCbu v Db@j[j]j^j_j^g`j{j|j}j~jakbk|b}bck_gdkek`gfkgkhkik{gjkkklkmknkokpk~bqkacbccctbEbdcrkecfcFbw sk|gtkukvkwkxkykzkAkBkCkDkEkFkGkHkIkJkKkLkMkNkOkPkQkRkSkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7kui8k9k!k#k$k%k'k(k)k*k+k,k-k.k/k+i,i-i:k;k=k?k@k[k]kh 3egcviwixi^k_k`k{k|k}k~kalblcldlelflglhliljlklllmlnlolplqlrlsltlulvlwlxlylzlAlBlClDlElFlGlHlIlJlKlLlMlNlOlPlQlRlSlTlUlVlWlXlYlZl0l1l2l3l4l5l6l7l8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l{l|l}l~lambmcmdmemfmgmhmimjmkmlmmmnmompmqmrmsmtmumvm}g%ghcwmGbxmymzmAmBmCm@ DmEmFmGmHm~gicImJmjckclcb KmLmMmNmOmPmQmRmyiahbhchdhSmTm.iUmmcncVmWmocpcXmYmehZm0mfhziqcrcsc1m2m3m4m5m6m7m8m9m!m#m$m%m'm(m)mtcuc*m+m/i,m-mgh:i.m/m:m;mhh=m?m@m[m]mx [ y z A B C ] ^mih_m`m{m|m}mvcwc~manbncn9idnjhenfnHbIbJbD E KbgnhninjnknkhlnmnnnonpnqnrnxcycsnlhtnunmhvnwnxnynnhznAnBnCnDnEnFnzcGnAcBcCcubLbDcHnEcFcMbF InohJnKnLnMnNnOnPnQnRnSnTnUnVnWnXnYnZn0n1n2n3n4n5n6n7n8n9n!n#n$n%n'n(n)n*n+n,n-n.n/n:nAi;n=n?n@n[n]n^n_n`n{n|n}n~naobo;i=i?icodoeofogohoioi |eGcBiCiDijokolomonooopoqorosotouovowoxoyozoAoBoCoDoEoFoGoHoIoJoKoLoMoNoOoPoQoRoSoToUoVoWoXoYoZo0o1o2o3o4o5o6o7o8o9o!o#o$o%o'o(o)o*o+o,o-o.o/o:o;o=o?o@o[o]o^o_o`o{o|o}o~oapbpcpdpepfpgphpipjpkplpmpnpopppqprpsptpupvpwpxpypzpApBpCpDpEpFpGpHpIpJpKpLpph'gHcMpNbNpOpPpQpRpSpTp^ UpVpWpXpYpqhIcZp0pJcKcLcc 1p2p3p4p5p6p7p8pEirhshthuh9p!p@i#pMcNc$p%pOcPc'p(pvh)p*pwhFiQcRcSc+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{pTcUc|p}p[i~paqxh]ibqcqdqeqyhfqgqhqiqjqG _ H I J K L ` kqzhlqmqnqoqpqVcWcqqrqsqtq!iuqAhvqwqObPbQbM N RbxqyqzqAqBqBhCqDqEqFqGqHqIqXcYcZc{ 0c1c| 2c3c4cJqChKqLqDhMqNqOqPqEhQqRqSqTqUqVqWq5cXq6c7c8cvbSb9cYq!c#cZqFhTbO 0qGh1q2q3q4q5q6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdr$cerGifrgrhrirjrkrlrmrnrorprqrrrsrtr^i_i`iurvrwrxryrzrArj Cf%cHiIiJiBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r^r_r`r{r|r}r~rasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3sHh(g'c4sUb5s6s7s8s9s!s(c#s} $s%s's(s)sIh)c*s+s*c+c,cd ,s-s.s/s:s;s=s?sKiJhKhLhMh@s[s{i]s-c.c^s_s/c:c`s{sNh|s}sOhLi;c=c?c~satbtctdtetftgthtitjtktltmtntot@c[cptqt|irtstPh}ittutvtwtQhxtytztAtBtP ~ Q R S T U abCtRhDtEtFtGtHt]c^cItJtKtLt#iMtShNtOtVbWbXbV W YbPtQtRtStTtThUtVtWtXtYtZt0t_c`c{cbb|c}ccb~cadbd1tUh2t3tVh4t5t6t7tWh8t9t!t#t$t%t'tcd(tddedfdwbZbgd)thdid*tXh0bX +tYh,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulumunuoupuqurusutuuuvujdwuMixuyuzuAuBuCuDuEuFuGuHuIuJuKuLu~iajbjMuNuOuPuQuRuSuk 7fkdNiOiPiTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[u]u^u_u`u{u|u}u~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.vZh)gld/v1b:v;v=v?v@v[vmd]vdb^v_v`v{v|v0hnd}v~vodpdqde awbwcwdwewfwgwhwQi1h2h3h4hiwjwcjkwrdsdlwmwtdudnwow5hpwqw6hRivdwdxdrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwydzdHwIwdjJwKw7hejLwMwNwOw8hPwQwRwSwTwY ebZ 0 1 2 3 fbUw9hVwWwXwYwZwAdBd0w1w2w3w$i4w!h5w6w2b3b4b4 5 5b7w8w9w!w#w#h$w%w'w(w)w*w+wCdDdEdgbFdGdhbHdIdJd,w$h-w.w%h/w:w;w=w'h?w@w[w]w^w_w`wKd{wLdMdNdxb6bOd|wPdQd}w(h7b6 ~w)haxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxRdOxSiPxQxRxSxTxUxVxWxXxYxZx0x1x2x3xfjgjhj4x5x6x7x8x9x!xl bgSdTiUiVi#x$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@x[x]x^x_x`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,y-y.y/y:y;y=y?y@y[y]y^y_y`y{y|y}y~yazbzcz*h*gTddz8bezfzgzhzizjzUdkziblzmznzozpz+hVdqzrzWdXdYdf sztzuzvzwzxzyzzzWi,h-h.h/hAzBzijCzZd0dDzEz1d2dFzGz:hHzIz;hXi3d4d5dJzKzLzMzNzOzPzQzRzSzTzUzVzWzXzYz6d7dZz0zjj1z2z=hkj3z4z5z6z?h7z8z9z!z#z7 jb8 9 ! # $ kb$z@h%z'z(z)z*z8d9d+z,z-z.z%i/z[h:z;z9b!b#b% ' $b=z?z@z[z]z]h^z_z`z{z|z}z~z!d#d$dlb%d'dmb(d)d*daA^hbAcA_hdAeAfAgA`hhAiAjAkAlAmAnA+doA,d-d.dyb%b/dpA:d;dqA{h'b( rA|hsAtAuAvAwAxAyAzAAABACADAEAFAGAHAIAJAKALAMANAOAPAQARASATAUAVAWAXAYAZA0A1A2A3A4A5A=d6AYi7A8A9A!A#A$A%A'A(A)A*A+A,A-A.Aljmjnj/A:A;A=A?A@A[Am Gg?dZi0i1i]A^A_A`A{A|A}A~AaBbBcBdBeBfBgBhBiBjBkBlBmBnBoBpBqBrBsBtBuBvBwBxByBzBABBBCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBRBSBTBUBVBWBXBYBZB0B1B2B3B4B5B6B7B8B9B!B#B$B%B'B(B)B*B+B,B-B.B/B:B;B=B?B@B[B]B^B_B`B{B|B}B~BaCbCcCdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuC}h+g@dvC(bwCxCyCzCACBC[dCCnbDCECFCGCHC~h]dICJC^d_d`dg KCLCMCNCOCPCQCRC2iaibicidiSCTCojUC{d|dVCWC}d~dXCeiYCZCfi3iaebe0C1C2C3C4C5C6C7C8C9C!C#C$C%C'C(Ccede)C*Cpj+C,Cgiqj-C.C/Chi:C;C=C?C@C) ob* + , - . pb[Cii]C^C_C`C{Cee|C}C~CaD'ibDjicDdD)b*b+b/ : ,beDfDgDhDiDkijDkDfegeqbheierbjekelelDlimDnDmioDpDqDrDnisDtDuDvDwDxDyDmezDneoepezb-bqeADreseBDoi.b; CDpiDDEDFDGDHDIDJDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD0D1D2D3D4D5D6D7D8D9D!D#D$D%D'D(D)Dte*D4i+D,D-D.D/D:D;D=D?D@D[D]D^D_D`Drjsjtj{D|D}D~DaEbEcEn !gue5i6i7idEeEfEgEhEiEjEkElEmEnEoEpEqErEsEtEuEvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZE0E1E2E3E4E5E6E7E8E9E!E#E$E%E'E(E)E*E+E,E-E.E/E:E;E=E?E@E[E]E^E_E`E{E|E}E~EaFbFcFdFeFfFgFhFiFjFkFlFmFnFoFpFqFrFsFtFuFvFwFxFyFzFqi,gveAF/bBFCFDFEFFFGFweHFsbIFJFKFLFMFrixeNFOFyezeAe
1047 app = cls(app, *args, **kwargs) 2a ujvjwjxjyjzjAjBjsi-g.g/g:gCjDj(iEj:b;bFjGj=b?bHjIj;gJjKj=gti@b[b]bLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j^b_b1j2j)i3j4j?g*i5j6j7j8j@g9j!j#j$j%jo = p q r s t ? 'j[g(j)j*j+j,j`b{b-j.j/j:j8i;j]g=j?jAbBbCbu v Db@j[j]j^j_j^g`j{j|j}j~jakbk|b}bck_gdkek`gfkgkhkik{gjkkklkmknkokpk~bqkacbccctbEbdcrkecfcFbw sk|gtkukvkwkxkykzkAkBkCkDkEkFkGkHkIkJkKkLkMkNkOkPkQkRkSkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7kui8k9k!k#k$k%k'k(k)k*k+k,k-k.k/k+i,i-i:k;k=k?k@k[k]kh 3egcviwixi^k_k`k{k|k}k~kalblcldlelflglhliljlklllmlnlolplqlrlsltlulvlwlxlylzlAlBlClDlElFlGlHlIlJlKlLlMlNlOlPlQlRlSlTlUlVlWlXlYlZl0l1l2l3l4l5l6l7l8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l{l|l}l~lambmcmdmemfmgmhmimjmkmlmmmnmompmqmrmsmtmumvm}g%ghcwmGbxmymzmAmBmCm@ DmEmFmGmHm~gicImJmjckclcb KmLmMmNmOmPmQmRmyiahbhchdhSmTm.iUmmcncVmWmocpcXmYmehZm0mfhziqcrcsc1m2m3m4m5m6m7m8m9m!m#m$m%m'm(m)mtcuc*m+m/i,m-mgh:i.m/m:m;mhh=m?m@m[m]mx [ y z A B C ] ^mih_m`m{m|m}mvcwc~manbncn9idnjhenfnHbIbJbD E KbgnhninjnknkhlnmnnnonpnqnrnxcycsnlhtnunmhvnwnxnynnhznAnBnCnDnEnFnzcGnAcBcCcubLbDcHnEcFcMbF InohJnKnLnMnNnOnPnQnRnSnTnUnVnWnXnYnZn0n1n2n3n4n5n6n7n8n9n!n#n$n%n'n(n)n*n+n,n-n.n/n:nAi;n=n?n@n[n]n^n_n`n{n|n}n~naobo;i=i?icodoeofogohoioi |eGcBiCiDijokolomonooopoqorosotouovowoxoyozoAoBoCoDoEoFoGoHoIoJoKoLoMoNoOoPoQoRoSoToUoVoWoXoYoZo0o1o2o3o4o5o6o7o8o9o!o#o$o%o'o(o)o*o+o,o-o.o/o:o;o=o?o@o[o]o^o_o`o{o|o}o~oapbpcpdpepfpgphpipjpkplpmpnpopppqprpsptpupvpwpxpypzpApBpCpDpEpFpGpHpIpJpKpLpph'gHcMpNbNpOpPpQpRpSpTp^ UpVpWpXpYpqhIcZp0pJcKcLcc 1p2p3p4p5p6p7p8pEirhshthuh9p!p@i#pMcNc$p%pOcPc'p(pvh)p*pwhFiQcRcSc+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{pTcUc|p}p[i~paqxh]ibqcqdqeqyhfqgqhqiqjqG _ H I J K L ` kqzhlqmqnqoqpqVcWcqqrqsqtq!iuqAhvqwqObPbQbM N RbxqyqzqAqBqBhCqDqEqFqGqHqIqXcYcZc{ 0c1c| 2c3c4cJqChKqLqDhMqNqOqPqEhQqRqSqTqUqVqWq5cXq6c7c8cvbSb9cYq!c#cZqFhTbO 0qGh1q2q3q4q5q6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdr$cerGifrgrhrirjrkrlrmrnrorprqrrrsrtr^i_i`iurvrwrxryrzrArj Cf%cHiIiJiBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r^r_r`r{r|r}r~rasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3sHh(g'c4sUb5s6s7s8s9s!s(c#s} $s%s's(s)sIh)c*s+s*c+c,cd ,s-s.s/s:s;s=s?sKiJhKhLhMh@s[s{i]s-c.c^s_s/c:c`s{sNh|s}sOhLi;c=c?c~satbtctdtetftgthtitjtktltmtntot@c[cptqt|irtstPh}ittutvtwtQhxtytztAtBtP ~ Q R S T U abCtRhDtEtFtGtHt]c^cItJtKtLt#iMtShNtOtVbWbXbV W YbPtQtRtStTtThUtVtWtXtYtZt0t_c`c{cbb|c}ccb~cadbd1tUh2t3tVh4t5t6t7tWh8t9t!t#t$t%t'tcd(tddedfdwbZbgd)thdid*tXh0bX +tYh,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulumunuoupuqurusutuuuvujdwuMixuyuzuAuBuCuDuEuFuGuHuIuJuKuLu~iajbjMuNuOuPuQuRuSuk 7fkdNiOiPiTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[u]u^u_u`u{u|u}u~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.vZh)gld/v1b:v;v=v?v@v[vmd]vdb^v_v`v{v|v0hnd}v~vodpdqde awbwcwdwewfwgwhwQi1h2h3h4hiwjwcjkwrdsdlwmwtdudnwow5hpwqw6hRivdwdxdrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwydzdHwIwdjJwKw7hejLwMwNwOw8hPwQwRwSwTwY ebZ 0 1 2 3 fbUw9hVwWwXwYwZwAdBd0w1w2w3w$i4w!h5w6w2b3b4b4 5 5b7w8w9w!w#w#h$w%w'w(w)w*w+wCdDdEdgbFdGdhbHdIdJd,w$h-w.w%h/w:w;w=w'h?w@w[w]w^w_w`wKd{wLdMdNdxb6bOd|wPdQd}w(h7b6 ~w)haxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxRdOxSiPxQxRxSxTxUxVxWxXxYxZx0x1x2x3xfjgjhj4x5x6x7x8x9x!xl bgSdTiUiVi#x$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@x[x]x^x_x`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,y-y.y/y:y;y=y?y@y[y]y^y_y`y{y|y}y~yazbzcz*h*gTddz8bezfzgzhzizjzUdkziblzmznzozpz+hVdqzrzWdXdYdf sztzuzvzwzxzyzzzWi,h-h.h/hAzBzijCzZd0dDzEz1d2dFzGz:hHzIz;hXi3d4d5dJzKzLzMzNzOzPzQzRzSzTzUzVzWzXzYz6d7dZz0zjj1z2z=hkj3z4z5z6z?h7z8z9z!z#z7 jb8 9 ! # $ kb$z@h%z'z(z)z*z8d9d+z,z-z.z%i/z[h:z;z9b!b#b% ' $b=z?z@z[z]z]h^z_z`z{z|z}z~z!d#d$dlb%d'dmb(d)d*daA^hbAcA_hdAeAfAgA`hhAiAjAkAlAmAnA+doA,d-d.dyb%b/dpA:d;dqA{h'b( rA|hsAtAuAvAwAxAyAzAAABACADAEAFAGAHAIAJAKALAMANAOAPAQARASATAUAVAWAXAYAZA0A1A2A3A4A5A=d6AYi7A8A9A!A#A$A%A'A(A)A*A+A,A-A.Aljmjnj/A:A;A=A?A@A[Am Gg?dZi0i1i]A^A_A`A{A|A}A~AaBbBcBdBeBfBgBhBiBjBkBlBmBnBoBpBqBrBsBtBuBvBwBxByBzBABBBCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBRBSBTBUBVBWBXBYBZB0B1B2B3B4B5B6B7B8B9B!B#B$B%B'B(B)B*B+B,B-B.B/B:B;B=B?B@B[B]B^B_B`B{B|B}B~BaCbCcCdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuC}h+g@dvC(bwCxCyCzCACBC[dCCnbDCECFCGCHC~h]dICJC^d_d`dg KCLCMCNCOCPCQCRC2iaibicidiSCTCojUC{d|dVCWC}d~dXCeiYCZCfi3iaebe0C1C2C3C4C5C6C7C8C9C!C#C$C%C'C(Ccede)C*Cpj+C,Cgiqj-C.C/Chi:C;C=C?C@C) ob* + , - . pb[Cii]C^C_C`C{Cee|C}C~CaD'ibDjicDdD)b*b+b/ : ,beDfDgDhDiDkijDkDfegeqbheierbjekelelDlimDnDmioDpDqDrDnisDtDuDvDwDxDyDmezDneoepezb-bqeADreseBDoi.b; CDpiDDEDFDGDHDIDJDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD0D1D2D3D4D5D6D7D8D9D!D#D$D%D'D(D)Dte*D4i+D,D-D.D/D:D;D=D?D@D[D]D^D_D`Drjsjtj{D|D}D~DaEbEcEn !gue5i6i7idEeEfEgEhEiEjEkElEmEnEoEpEqErEsEtEuEvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZE0E1E2E3E4E5E6E7E8E9E!E#E$E%E'E(E)E*E+E,E-E.E/E:E;E=E?E@E[E]E^E_E`E{E|E}E~EaFbFcFdFeFfFgFhFiFjFkFlFmFnFoFpFqFrFsFtFuFvFwFxFyFzFqi,gveAF/bBFCFDFEFFFGFweHFsbIFJFKFLFMFrixeNFOFyezeAe
1048 return app 2a ujvjwjxjyjzjAjBjsi-g.g/g:gCjDj(iEj:b;bFjGj=b?bHjIj;gJjKj=gti@b[b]bLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j^b_b1j2j)i3j4j?g*i5j6j7j8j@g9j!j#j$j%jo = p q r s t ? 'j[g(j)j*j+j,j`b{b-j.j/j:j8i;j]g=j?jAbBbCbu v Db@j[j]j^j_j^g`j{j|j}j~jakbk|b}bck_gdkek`gfkgkhkik{gjkkklkmknkokpk~bqkacbccctbEbdcrkecfcFbw sk|gtkukvkwkxkykzkAkBkCkDkEkFkGkHkIkJkKkLkMkNkOkPkQkRkSkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7kui8k9k!k#k$k%k'k(k)k*k+k,k-k.k/k+i,i-i:k;k=k?k@k[k]kh 3egcviwixi^k_k`k{k|k}k~kalblcldlelflglhliljlklllmlnlolplqlrlsltlulvlwlxlylzlAlBlClDlElFlGlHlIlJlKlLlMlNlOlPlQlRlSlTlUlVlWlXlYlZl0l1l2l3l4l5l6l7l8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l{l|l}l~lambmcmdmemfmgmhmimjmkmlmmmnmompmqmrmsmtmumvm}g%ghcwmGbxmymzmAmBmCm@ DmEmFmGmHm~gicImJmjckclcb KmLmMmNmOmPmQmRmyiahbhchdhSmTm.iUmmcncVmWmocpcXmYmehZm0mfhziqcrcsc1m2m3m4m5m6m7m8m9m!m#m$m%m'm(m)mtcuc*m+m/i,m-mgh:i.m/m:m;mhh=m?m@m[m]mx [ y z A B C ] ^mih_m`m{m|m}mvcwc~manbncn9idnjhenfnHbIbJbD E KbgnhninjnknkhlnmnnnonpnqnrnxcycsnlhtnunmhvnwnxnynnhznAnBnCnDnEnFnzcGnAcBcCcubLbDcHnEcFcMbF InohJnKnLnMnNnOnPnQnRnSnTnUnVnWnXnYnZn0n1n2n3n4n5n6n7n8n9n!n#n$n%n'n(n)n*n+n,n-n.n/n:nAi;n=n?n@n[n]n^n_n`n{n|n}n~naobo;i=i?icodoeofogohoioi |eGcBiCiDijokolomonooopoqorosotouovowoxoyozoAoBoCoDoEoFoGoHoIoJoKoLoMoNoOoPoQoRoSoToUoVoWoXoYoZo0o1o2o3o4o5o6o7o8o9o!o#o$o%o'o(o)o*o+o,o-o.o/o:o;o=o?o@o[o]o^o_o`o{o|o}o~oapbpcpdpepfpgphpipjpkplpmpnpopppqprpsptpupvpwpxpypzpApBpCpDpEpFpGpHpIpJpKpLpph'gHcMpNbNpOpPpQpRpSpTp^ UpVpWpXpYpqhIcZp0pJcKcLcc 1p2p3p4p5p6p7p8pEirhshthuh9p!p@i#pMcNc$p%pOcPc'p(pvh)p*pwhFiQcRcSc+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{pTcUc|p}p[i~paqxh]ibqcqdqeqyhfqgqhqiqjqG _ H I J K L ` kqzhlqmqnqoqpqVcWcqqrqsqtq!iuqAhvqwqObPbQbM N RbxqyqzqAqBqBhCqDqEqFqGqHqIqXcYcZc{ 0c1c| 2c3c4cJqChKqLqDhMqNqOqPqEhQqRqSqTqUqVqWq5cXq6c7c8cvbSb9cYq!c#cZqFhTbO 0qGh1q2q3q4q5q6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdr$cerGifrgrhrirjrkrlrmrnrorprqrrrsrtr^i_i`iurvrwrxryrzrArj Cf%cHiIiJiBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r^r_r`r{r|r}r~rasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3sHh(g'c4sUb5s6s7s8s9s!s(c#s} $s%s's(s)sIh)c*s+s*c+c,cd ,s-s.s/s:s;s=s?sKiJhKhLhMh@s[s{i]s-c.c^s_s/c:c`s{sNh|s}sOhLi;c=c?c~satbtctdtetftgthtitjtktltmtntot@c[cptqt|irtstPh}ittutvtwtQhxtytztAtBtP ~ Q R S T U abCtRhDtEtFtGtHt]c^cItJtKtLt#iMtShNtOtVbWbXbV W YbPtQtRtStTtThUtVtWtXtYtZt0t_c`c{cbb|c}ccb~cadbd1tUh2t3tVh4t5t6t7tWh8t9t!t#t$t%t'tcd(tddedfdwbZbgd)thdid*tXh0bX +tYh,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulumunuoupuqurusutuuuvujdwuMixuyuzuAuBuCuDuEuFuGuHuIuJuKuLu~iajbjMuNuOuPuQuRuSuk 7fkdNiOiPiTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[u]u^u_u`u{u|u}u~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.vZh)gld/v1b:v;v=v?v@v[vmd]vdb^v_v`v{v|v0hnd}v~vodpdqde awbwcwdwewfwgwhwQi1h2h3h4hiwjwcjkwrdsdlwmwtdudnwow5hpwqw6hRivdwdxdrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwydzdHwIwdjJwKw7hejLwMwNwOw8hPwQwRwSwTwY ebZ 0 1 2 3 fbUw9hVwWwXwYwZwAdBd0w1w2w3w$i4w!h5w6w2b3b4b4 5 5b7w8w9w!w#w#h$w%w'w(w)w*w+wCdDdEdgbFdGdhbHdIdJd,w$h-w.w%h/w:w;w=w'h?w@w[w]w^w_w`wKd{wLdMdNdxb6bOd|wPdQd}w(h7b6 ~w)haxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxRdOxSiPxQxRxSxTxUxVxWxXxYxZx0x1x2x3xfjgjhj4x5x6x7x8x9x!xl bgSdTiUiVi#x$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@x[x]x^x_x`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,y-y.y/y:y;y=y?y@y[y]y^y_y`y{y|y}y~yazbzcz*h*gTddz8bezfzgzhzizjzUdkziblzmznzozpz+hVdqzrzWdXdYdf sztzuzvzwzxzyzzzWi,h-h.h/hAzBzijCzZd0dDzEz1d2dFzGz:hHzIz;hXi3d4d5dJzKzLzMzNzOzPzQzRzSzTzUzVzWzXzYz6d7dZz0zjj1z2z=hkj3z4z5z6z?h7z8z9z!z#z7 jb8 9 ! # $ kb$z@h%z'z(z)z*z8d9d+z,z-z.z%i/z[h:z;z9b!b#b% ' $b=z?z@z[z]z]h^z_z`z{z|z}z~z!d#d$dlb%d'dmb(d)d*daA^hbAcA_hdAeAfAgA`hhAiAjAkAlAmAnA+doA,d-d.dyb%b/dpA:d;dqA{h'b( rA|hsAtAuAvAwAxAyAzAAABACADAEAFAGAHAIAJAKALAMANAOAPAQARASATAUAVAWAXAYAZA0A1A2A3A4A5A=d6AYi7A8A9A!A#A$A%A'A(A)A*A+A,A-A.Aljmjnj/A:A;A=A?A@A[Am Gg?dZi0i1i]A^A_A`A{A|A}A~AaBbBcBdBeBfBgBhBiBjBkBlBmBnBoBpBqBrBsBtBuBvBwBxByBzBABBBCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBRBSBTBUBVBWBXBYBZB0B1B2B3B4B5B6B7B8B9B!B#B$B%B'B(B)B*B+B,B-B.B/B:B;B=B?B@B[B]B^B_B`B{B|B}B~BaCbCcCdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuC}h+g@dvC(bwCxCyCzCACBC[dCCnbDCECFCGCHC~h]dICJC^d_d`dg KCLCMCNCOCPCQCRC2iaibicidiSCTCojUC{d|dVCWC}d~dXCeiYCZCfi3iaebe0C1C2C3C4C5C6C7C8C9C!C#C$C%C'C(Ccede)C*Cpj+C,Cgiqj-C.C/Chi:C;C=C?C@C) ob* + , - . pb[Cii]C^C_C`C{Cee|C}C~CaD'ibDjicDdD)b*b+b/ : ,beDfDgDhDiDkijDkDfegeqbheierbjekelelDlimDnDmioDpDqDrDnisDtDuDvDwDxDyDmezDneoepezb-bqeADreseBDoi.b; CDpiDDEDFDGDHDIDJDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD0D1D2D3D4D5D6D7D8D9D!D#D$D%D'D(D)Dte*D4i+D,D-D.D/D:D;D=D?D@D[D]D^D_D`Drjsjtj{D|D}D~DaEbEcEn !gue5i6i7idEeEfEgEhEiEjEkElEmEnEoEpEqErEsEtEuEvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZE0E1E2E3E4E5E6E7E8E9E!E#E$E%E'E(E)E*E+E,E-E.E/E:E;E=E?E@E[E]E^E_E`E{E|E}E~EaFbFcFdFeFfFgFhFiFjFkFlFmFnFoFpFqFrFsFtFuFvFwFxFyFzFqi,gveAF/bBFCFDFEFFFGFweHFsbIFJFKFLFMFrixeNFOFyezeAe
1050 def openapi(self) -> Dict[str, Any]: 1abcdefg
1051 """
1052 Generate the OpenAPI schema of the application. This is called by FastAPI
1053 internally.
1055 The first time it is called it stores the result in the attribute
1056 `app.openapi_schema`, and next times it is called, it just returns that same
1057 result. To avoid the cost of generating the schema every time.
1059 If you need to modify the generated OpenAPI schema, you could modify it.
1061 Read more in the
1062 [FastAPI docs for OpenAPI](https://fastapi.tiangolo.com/how-to/extending-openapi/).
1063 """
1064 if not self.openapi_schema: 2;F=F?Fsi-g.g/g:g@F[F]F^F;g_F=g`FPF{F?g|F}F@g~Fo = p q r s t ? aG[gbGcGdGeGfGgGhGiG]gjGkGu v lGmG^gnGoGpGqGrGsG_gtGuG`gvG{gwGxGyGw |gzGAGBGCGDGEGFGGGHGIGJGKGLGMGNGOGPGQGRGSGTGUGVGWGXGYGZG0G1G2G3G4G5G6G7G8G9G!G#G$G!FQFRF*F%G'G(G)G*G+G,G-Gh .G/G:G;G=G?G@G[G]G^G_G`G{G|G}G~GaHbHcHdHeHfHgHhHiHjHkHlHmHnHoHpHqHrHsHtHuHvHwHxHyHzHAHBHCHDHEHFHGHHHIHJHKHLHMHNHOHPHQHRHSHTHUHVHWHXHYHZH0H1H2H3H4H5H6H7H8H9H!H#H$H%H'H(H)H*H+H,H-H.H/H:H;H=H?H@H[H]H^H_H`H{H}g%g|H}H~H@ aIbI~gcIdIeIyiahbhchdhfIgIhIiIehjIfhkISFlIghmInIhhoIx [ y z A B C ] pIihqIrIsItIuIvIwIxIjhyIzID E AIBIkhCIDIEIFIGIHIlhIIJImhKInhLIMINIF ohOIPIQIRISITIUIVIWIXIYIZI0I1I2I3I4I5I6I7I8I9I!I#I$I%I'I(I)I*I+I,I-I.I/I:I;I=I?I@I#FTFUF+F[I]I^I_I`I{I|I}Ii ~IaJbJcJdJeJfJgJhJiJjJkJlJmJnJoJpJqJrJsJtJuJvJwJxJyJzJAJBJCJDJEJFJGJHJIJJJKJLJMJNJOJPJQJRJSJTJUJVJWJXJYJZJ0J1J2J3J4J5J6J7J8J9J!J#J$J%J'J(J)J*J+J,J-J.J/J:J;J=J?J@J[J]J^J_J`J{J|J}J~JaKbKcKdKeKfKgKhKiKjKkKlKph'gmKnKoK^ pKqKqhrKsKtKEirhshthuhuKvKwKxKvhyKwhzKVFAKxhBKCKyhDKG _ H I J K L ` EKzhFKGKHKIKJKKKLKMKAhNKOKM N PKQKBhRKSKTKUKVKWK{ | ChXKYKDhZKEh0K1K2KFhO Gh3K4K5K6K7K8K9K!K#K$K%K'K(K)K*K+K,K-K.K/K:K;K=K?K@K[K]K^K_K`K{K|K}K~KaLbLcLdLeLfL$FWFXF,FgLhLiLjLkLlLmLnLj oLpLqLrLsLtLuLvLwLxLyLzLALBLCLDLELFLGLHLILJLKLLLMLNLOLPLQLRLSLTLULVLWLXLYLZL0L1L2L3L4L5L6L7L8L9L!L#L$L%L'L(L)L*L+L,L-L.L/L:L;L=L?L@L[L]L^L_L`L{L|L}L~LaMbMcMdMeMfMgMhMiMjMkMlMmMnMoMpMqMrMsMtMuMvMwMxMyMzMAMHh(gBMCMDM} EMFMIhGMHMIMKiJhKhLhMhJMKMLMMMNhNMOhOMYFPMPhQMRMQhSMP ~ Q R S T U abTMRhUMVMWMXMYMZM0M1MSh2M3MV W 4M5MTh6M7M8M9M!M#MbbcbUh$M%MVh'MWh(M)M*MXhX Yh+M,M-M.M/M:M;M=M?M@M[M]M^M_M`M{M|M}M~MaNbNcNdNeNfNgNhNiNjNkNlNmNnNoNpNqNrNsNtNuN%FZF0F-FvNwNxNyNzNANBNCNk DNENFNGNHNINJNKNLNMNNNONPNQNRNSNTNUNVNWNXNYNZN0N1N2N3N4N5N6N7N8N9N!N#N$N%N'N(N)N*N+N,N-N.N/N:N;N=N?N@N[N]N^N_N`N{N|N}N~NaObOcOdOeOfOgOhOiOjOkOlOmOnOoOpOqOrOsOtOuOvOwOxOyOzOAOBOCODOEOFOGOHOIOJOKOLOMONOOOPOZh)gQOROSOdbTOUO0hVOWOXOQi1h2h3h4hYOZO0O1O5h2O6h3O1F4O7h5O6O8h7OY ebZ 0 1 2 3 fb8O9h9O!O#O$O%O'O(O)O!h*O+O4 5 ,O-O#h.O/O:O;O=O?Ogbhb$h@O[O%h]O'h^O_O`O(h6 )h{O|O}O~OaPbPcPdPePfPgPhPiPjPkPlPmPnPoPpPqPrPsPtPuPvPwPxPyPzPAPBPCPDPEPFPGPHPIPJP'F2F3F.FKPLPMPNPOPPPQPRPl SPTPUPVPWPXPYPZP0P1P2P3P4P5P6P7P8P9P!P#P$P%P'P(P)P*P+P,P-P.P/P:P;P=P?P@P[P]P^P_P`P{P|P}P~PaQbQcQdQeQfQgQhQiQjQkQlQmQnQoQpQqQrQsQtQuQvQwQxQyQzQAQBQCQDQEQFQGQHQIQJQKQLQMQNQOQPQQQRQSQTQUQVQWQXQYQZQ0Q1Q2Q3Q4Q*h*g5Q6Q7Qib8Q9Q+h!Q#Q$QWi,h-h.h/h%Q'Q(Q)Q:h*Q;h+Q4F,Q=h-Q.Q?h/Q7 jb8 9 ! # $ kb:Q@h;Q=Q?Q@Q[Q]Q^Q_Q[h`Q{Q% ' |Q}Q]h~QaRbRcRdReRlbmb^hfRgR_hhR`hiRjRkR{h( |hlRmRnRoRpRqRrRsRtRuRvRwRxRyRzRARBRCRDRERFRGRHRIRJRKRLRMRNRORPRQRRRSRTRURVRWRXRYR(F5F6F/FZR0R1R2R3R4R5R6Rm 7R8R9R!R#R$R%R'R(R)R*R+R,R-R.R/R:R;R=R?R@R[R]R^R_R`R{R|R}R~RaSbScSdSeSfSgShSiSjSkSlSmSnSoSpSqSrSsStSuSvSwSxSySzSASBSCSDSESFSGSHSISJSKSLSMSNSOSPSQSRSSSTSUSVSWSXSYSZS0S1S2S3S4S5S6S7S8S9S!S#S$S%S'S(S)S*S+S,S}h+g-S.S/Snb:S;S~h=S?S@S2iaibicidi[S]S^Sei_Sfi`S7F{Sgi|Shi}S) ob* + , - . pb~SiiaTbTcTdTeTfTgThTjiiTjT/ : kTlTkimTqbrblinToTmipTniqTrTsToi; pitTuTvTwTxTyTzTATBTCTDTETFTGTHTITJTKTLTMTNTOTPTQTRTSTTTUTVTWTXTYTZT0T1T2T3T4T5T6T)F8F9F:F7T8T9T!T#T$T%Tn 'T(T)T*T+T,T-T.T/T:T;T=T?T@T[T]T^T_T`T{T|T}T~TaUbUcUdUeUfUgUhUiUjUkUlUmUnUoUpUqUrUsUtUuUvUwUxUyUzUAUBUCUDUEUFUGUHUIUJUKULUMUNUOUPUQURUSUTUUUVUWUXUYUZU0U1U2U3U4U5U6U7U8U9U!U#U$U%U'U(U)U*Uqi,g+U,U-Usb.U/Uri
1065 self.openapi_schema = get_openapi( 2;F=F?Fsi-g.g/g:g@F[F]F^F;g_F=g`FPF{F?g|F}F@g~Fo = p q r s t ? aG[gbGcGdGeGfGgGhGiG]gjGkGu v lGmG^gnGoGpGqGrGsG_gtGuG`gvG{gwGxGyGw |gzGAGBGCGDGEGFGGGHGIGJGKGLGMGNGOGPGQGRGSGTGUGVGWGXGYGZG0G1G2G3G4G5G6G7G8G9G!G#G$G!FQFRF*F%G'G(G)G*G+G,G-Gh .G/G:G;G=G?G@G[G]G^G_G`G{G|G}G~GaHbHcHdHeHfHgHhHiHjHkHlHmHnHoHpHqHrHsHtHuHvHwHxHyHzHAHBHCHDHEHFHGHHHIHJHKHLHMHNHOHPHQHRHSHTHUHVHWHXHYHZH0H1H2H3H4H5H6H7H8H9H!H#H$H%H'H(H)H*H+H,H-H.H/H:H;H=H?H@H[H]H^H_H`H{H}g%g|H}H~H@ aIbI~gcIdIeIyiahbhchdhfIgIhIiIehjIfhkISFlIghmInIhhoIx [ y z A B C ] pIihqIrIsItIuIvIwIxIjhyIzID E AIBIkhCIDIEIFIGIHIlhIIJImhKInhLIMINIF ohOIPIQIRISITIUIVIWIXIYIZI0I1I2I3I4I5I6I7I8I9I!I#I$I%I'I(I)I*I+I,I-I.I/I:I;I=I?I@I#FTFUF+F[I]I^I_I`I{I|I}Ii ~IaJbJcJdJeJfJgJhJiJjJkJlJmJnJoJpJqJrJsJtJuJvJwJxJyJzJAJBJCJDJEJFJGJHJIJJJKJLJMJNJOJPJQJRJSJTJUJVJWJXJYJZJ0J1J2J3J4J5J6J7J8J9J!J#J$J%J'J(J)J*J+J,J-J.J/J:J;J=J?J@J[J]J^J_J`J{J|J}J~JaKbKcKdKeKfKgKhKiKjKkKlKph'gmKnKoK^ pKqKqhrKsKtKEirhshthuhuKvKwKxKvhyKwhzKVFAKxhBKCKyhDKG _ H I J K L ` EKzhFKGKHKIKJKKKLKMKAhNKOKM N PKQKBhRKSKTKUKVKWK{ | ChXKYKDhZKEh0K1K2KFhO Gh3K4K5K6K7K8K9K!K#K$K%K'K(K)K*K+K,K-K.K/K:K;K=K?K@K[K]K^K_K`K{K|K}K~KaLbLcLdLeLfL$FWFXF,FgLhLiLjLkLlLmLnLj oLpLqLrLsLtLuLvLwLxLyLzLALBLCLDLELFLGLHLILJLKLLLMLNLOLPLQLRLSLTLULVLWLXLYLZL0L1L2L3L4L5L6L7L8L9L!L#L$L%L'L(L)L*L+L,L-L.L/L:L;L=L?L@L[L]L^L_L`L{L|L}L~LaMbMcMdMeMfMgMhMiMjMkMlMmMnMoMpMqMrMsMtMuMvMwMxMyMzMAMHh(gBMCMDM} EMFMIhGMHMIMKiJhKhLhMhJMKMLMMMNhNMOhOMYFPMPhQMRMQhSMP ~ Q R S T U abTMRhUMVMWMXMYMZM0M1MSh2M3MV W 4M5MTh6M7M8M9M!M#MbbcbUh$M%MVh'MWh(M)M*MXhX Yh+M,M-M.M/M:M;M=M?M@M[M]M^M_M`M{M|M}M~MaNbNcNdNeNfNgNhNiNjNkNlNmNnNoNpNqNrNsNtNuN%FZF0F-FvNwNxNyNzNANBNCNk DNENFNGNHNINJNKNLNMNNNONPNQNRNSNTNUNVNWNXNYNZN0N1N2N3N4N5N6N7N8N9N!N#N$N%N'N(N)N*N+N,N-N.N/N:N;N=N?N@N[N]N^N_N`N{N|N}N~NaObOcOdOeOfOgOhOiOjOkOlOmOnOoOpOqOrOsOtOuOvOwOxOyOzOAOBOCODOEOFOGOHOIOJOKOLOMONOOOPOZh)gQOROSOdbTOUO0hVOWOXOQi1h2h3h4hYOZO0O1O5h2O6h3O1F4O7h5O6O8h7OY ebZ 0 1 2 3 fb8O9h9O!O#O$O%O'O(O)O!h*O+O4 5 ,O-O#h.O/O:O;O=O?Ogbhb$h@O[O%h]O'h^O_O`O(h6 )h{O|O}O~OaPbPcPdPePfPgPhPiPjPkPlPmPnPoPpPqPrPsPtPuPvPwPxPyPzPAPBPCPDPEPFPGPHPIPJP'F2F3F.FKPLPMPNPOPPPQPRPl SPTPUPVPWPXPYPZP0P1P2P3P4P5P6P7P8P9P!P#P$P%P'P(P)P*P+P,P-P.P/P:P;P=P?P@P[P]P^P_P`P{P|P}P~PaQbQcQdQeQfQgQhQiQjQkQlQmQnQoQpQqQrQsQtQuQvQwQxQyQzQAQBQCQDQEQFQGQHQIQJQKQLQMQNQOQPQQQRQSQTQUQVQWQXQYQZQ0Q1Q2Q3Q4Q*h*g5Q6Q7Qib8Q9Q+h!Q#Q$QWi,h-h.h/h%Q'Q(Q)Q:h*Q;h+Q4F,Q=h-Q.Q?h/Q7 jb8 9 ! # $ kb:Q@h;Q=Q?Q@Q[Q]Q^Q_Q[h`Q{Q% ' |Q}Q]h~QaRbRcRdReRlbmb^hfRgR_hhR`hiRjRkR{h( |hlRmRnRoRpRqRrRsRtRuRvRwRxRyRzRARBRCRDRERFRGRHRIRJRKRLRMRNRORPRQRRRSRTRURVRWRXRYR(F5F6F/FZR0R1R2R3R4R5R6Rm 7R8R9R!R#R$R%R'R(R)R*R+R,R-R.R/R:R;R=R?R@R[R]R^R_R`R{R|R}R~RaSbScSdSeSfSgShSiSjSkSlSmSnSoSpSqSrSsStSuSvSwSxSySzSASBSCSDSESFSGSHSISJSKSLSMSNSOSPSQSRSSSTSUSVSWSXSYSZS0S1S2S3S4S5S6S7S8S9S!S#S$S%S'S(S)S*S+S,S}h+g-S.S/Snb:S;S~h=S?S@S2iaibicidi[S]S^Sei_Sfi`S7F{Sgi|Shi}S) ob* + , - . pb~SiiaTbTcTdTeTfTgThTjiiTjT/ : kTlTkimTqbrblinToTmipTniqTrTsToi; pitTuTvTwTxTyTzTATBTCTDTETFTGTHTITJTKTLTMTNTOTPTQTRTSTTTUTVTWTXTYTZT0T1T2T3T4T5T6T)F8F9F:F7T8T9T!T#T$T%Tn 'T(T)T*T+T,T-T.T/T:T;T=T?T@T[T]T^T_T`T{T|T}T~TaUbUcUdUeUfUgUhUiUjUkUlUmUnUoUpUqUrUsUtUuUvUwUxUyUzUAUBUCUDUEUFUGUHUIUJUKULUMUNUOUPUQURUSUTUUUVUWUXUYUZU0U1U2U3U4U5U6U7U8U9U!U#U$U%U'U(U)U*Uqi,g+U,U-Usb.U/Uri
1066 title=self.title,
1067 version=self.version,
1068 openapi_version=self.openapi_version,
1069 summary=self.summary,
1070 description=self.description,
1071 terms_of_service=self.terms_of_service,
1072 contact=self.contact,
1073 license_info=self.license_info,
1074 routes=self.routes,
1075 webhooks=self.webhooks.routes,
1076 tags=self.openapi_tags,
1077 servers=self.servers,
1078 separate_input_output_schemas=self.separate_input_output_schemas,
1079 external_docs=self.openapi_external_docs,
1080 )
1081 return self.openapi_schema 2;F=F?F-g.g/g:g@F[F]F^F;g_F=g`FPF{F?g|F}F@g~Fo = p q r s t ? aG[gbGcGdGeGfGgGhGiG]gjGkGu v lGmG^gnGoGpGqGrGsG_gtGuG`gvG{gwGxGyGw |gzGAGBGCGDGEGFGGGHGIGJGKGLGMGNGOGPGQGRGSGTGUGVGWGXGYGZG0G1G2G3G4G5G6G7G8G9G!G#G$G!FQFRF*F%G'G(G)G*G+G,G-Gh .G/G:G;G=G?G@G[G]G^G_G`G{G|G}G~GaHbHcHdHeHfHgHhHiHjHkHlHmHnHoHpHqHrHsHtHuHvHwHxHyHzHAHBHCHDHEHFHGHHHIHJHKHLHMHNHOHPHQHRHSHTHUHVHWHXHYHZH0H1H2H3H4H5H6H7H8H9H!H#H$H%H'H(H)H*H+H,H-H.H/H:H;H=H?H@H[H]H^H_H`H{H}g%g|H}H~H@ aIbI~gcIdIeIahbhchdhfIgIhIiIehjIfhkISFlIghmInIhhoIx [ y z A B C ] pIihqIrIsItIuIvIwIxIjhyIzID E AIBIkhCIDIEIFIGIHIlhIIJImhKInhLIMINIF ohOIPIQIRISITIUIVIWIXIYIZI0I1I2I3I4I5I6I7I8I9I!I#I$I%I'I(I)I*I+I,I-I.I/I:I;I=I?I@I#FTFUF+F[I]I^I_I`I{I|I}Ii ~IaJbJcJdJeJfJgJhJiJjJkJlJmJnJoJpJqJrJsJtJuJvJwJxJyJzJAJBJCJDJEJFJGJHJIJJJKJLJMJNJOJPJQJRJSJTJUJVJWJXJYJZJ0J1J2J3J4J5J6J7J8J9J!J#J$J%J'J(J)J*J+J,J-J.J/J:J;J=J?J@J[J]J^J_J`J{J|J}J~JaKbKcKdKeKfKgKhKiKjKkKlKph'gmKnKoK^ pKqKqhrKsKtKrhshthuhuKvKwKxKvhyKwhzKVFAKxhBKCKyhDKG _ H I J K L ` EKzhFKGKHKIKJKKKLKMKAhNKOKM N PKQKBhRKSKTKUKVKWK{ | ChXKYKDhZKEh0K1K2KFhO Gh3K4K5K6K7K8K9K!K#K$K%K'K(K)K*K+K,K-K.K/K:K;K=K?K@K[K]K^K_K`K{K|K}K~KaLbLcLdLeLfL$FWFXF,FgLhLiLjLkLlLmLnLj oLpLqLrLsLtLuLvLwLxLyLzLALBLCLDLELFLGLHLILJLKLLLMLNLOLPLQLRLSLTLULVLWLXLYLZL0L1L2L3L4L5L6L7L8L9L!L#L$L%L'L(L)L*L+L,L-L.L/L:L;L=L?L@L[L]L^L_L`L{L|L}L~LaMbMcMdMeMfMgMhMiMjMkMlMmMnMoMpMqMrMsMtMuMvMwMxMyMzMAMHh(gBMCMDM} EMFMIhGMHMIMJhKhLhMhJMKMLMMMNhNMOhOMYFPMPhQMRMQhSMP ~ Q R S T U abTMRhUMVMWMXMYMZM0M1MSh2M3MV W 4M5MTh6M7M8M9M!M#MbbcbUh$M%MVh'MWh(M)M*MXhX Yh+M,M-M.M/M:M;M=M?M@M[M]M^M_M`M{M|M}M~MaNbNcNdNeNfNgNhNiNjNkNlNmNnNoNpNqNrNsNtNuN%FZF0F-FvNwNxNyNzNANBNCNk DNENFNGNHNINJNKNLNMNNNONPNQNRNSNTNUNVNWNXNYNZN0N1N2N3N4N5N6N7N8N9N!N#N$N%N'N(N)N*N+N,N-N.N/N:N;N=N?N@N[N]N^N_N`N{N|N}N~NaObOcOdOeOfOgOhOiOjOkOlOmOnOoOpOqOrOsOtOuOvOwOxOyOzOAOBOCODOEOFOGOHOIOJOKOLOMONOOOPOZh)gQOROSOdbTOUO0hVOWOXO1h2h3h4hYOZO0O1O5h2O6h3O1F4O7h5O6O8h7OY ebZ 0 1 2 3 fb8O9h9O!O#O$O%O'O(O)O!h*O+O4 5 ,O-O#h.O/O:O;O=O?Ogbhb$h@O[O%h]O'h^O_O`O(h6 )h{O|O}O~OaPbPcPdPePfPgPhPiPjPkPlPmPnPoPpPqPrPsPtPuPvPwPxPyPzPAPBPCPDPEPFPGPHPIPJP'F2F3F.FKPLPMPNPOPPPQPRPl SPTPUPVPWPXPYPZP0P1P2P3P4P5P6P7P8P9P!P#P$P%P'P(P)P*P+P,P-P.P/P:P;P=P?P@P[P]P^P_P`P{P|P}P~PaQbQcQdQeQfQgQhQiQjQkQlQmQnQoQpQqQrQsQtQuQvQwQxQyQzQAQBQCQDQEQFQGQHQIQJQKQLQMQNQOQPQQQRQSQTQUQVQWQXQYQZQ0Q1Q2Q3Q4Q*h*g5Q6Q7Qib8Q9Q+h!Q#Q$Q,h-h.h/h%Q'Q(Q)Q:h*Q;h+Q4F,Q=h-Q.Q?h/Q7 jb8 9 ! # $ kb:Q@h;Q=Q?Q@Q[Q]Q^Q_Q[h`Q{Q% ' |Q}Q]h~QaRbRcRdReRlbmb^hfRgR_hhR`hiRjRkR{h( |hlRmRnRoRpRqRrRsRtRuRvRwRxRyRzRARBRCRDRERFRGRHRIRJRKRLRMRNRORPRQRRRSRTRURVRWRXRYR(F5F6F/FZR0R1R2R3R4R5R6Rm 7R8R9R!R#R$R%R'R(R)R*R+R,R-R.R/R:R;R=R?R@R[R]R^R_R`R{R|R}R~RaSbScSdSeSfSgShSiSjSkSlSmSnSoSpSqSrSsStSuSvSwSxSySzSASBSCSDSESFSGSHSISJSKSLSMSNSOSPSQSRSSSTSUSVSWSXSYSZS0S1S2S3S4S5S6S7S8S9S!S#S$S%S'S(S)S*S+S,S}h+g-S.S/Snb:S;S~h=S?S@Saibicidi[S]S^Sei_Sfi`S7F{Sgi|Shi}S) ob* + , - . pb~SiiaTbTcTdTeTfTgThTjiiTjT/ : kTlTkimTqbrblinToTmipTniqTrTsToi; pitTuTvTwTxTyTzTATBTCTDTETFTGTHTITJTKTLTMTNTOTPTQTRTSTTTUTVTWTXTYTZT0T1T2T3T4T5T6T)F8F9F:F7T8T9T!T#T$T%Tn 'T(T)T*T+T,T-T.T/T:T;T=T?T@T[T]T^T_T`T{T|T}T~TaUbUcUdUeUfUgUhUiUjUkUlUmUnUoUpUqUrUsUtUuUvUwUxUyUzUAUBUCUDUEUFUGUHUIUJUKULUMUNUOUPUQURUSUTUUUVUWUXUYUZU0U1U2U3U4U5U6U7U8U9U!U#U$U%U'U(U)U*Uqi,g+U,U-Usb.U/Uri
1083 def setup(self) -> None: 1abcdefg
1084 if self.openapi_url: 2a :b;b=b?b@b[b]b^b_bo = p q r s t ? `b{bBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeAbBbCbu v Db|b}bXeYeZe0e1e2e~bacbccctbEbdcecfcFbw h 3egc4e5ehcGb@ icjckclcb mcncocpcqcrcsctcucx [ y z A B C ] vcwc6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@eHbIbJbD E Kbxcyc[e]e^e_e`e{ezcAcBcCcubLbDcEcFcMbF i |eGc}e~eHcNb^ IcJcKcLcc McNcOcPcQcRcScTcUcG _ H I J K L ` VcWcafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfObPbQbM N RbXcYcZc{ 0c1c| 2c3c4cwfxfyfzfAfBf5c6c7c8cvbSb9c!c#cTbO $cj Cf%cDfEf'cUb(c} )c*c+c,cd -c.c/c:c;c=c?c@c[cP ~ Q R S T U ab]c^cFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fVbWbXbV W Yb_c`c{cbb|c}ccb~cadbd1f2f3f4f5f6fcdddedfdwbZbgdhdid0bX jdk 7fkd8f9fld1bmddbndodpdqde rdsdtdudvdwdxdydzdY ebZ 0 1 2 3 fbAdBd!f#f$f%f'f(f)f*f+f,f-f.f/f:f;f=f?f@f[f]f^f_f2b3b4b4 5 5bCdDdEdgbFdGdhbHdIdJd`f{f|f}f~fagKdLdMdNdxb6bOdPdQd7b6 Rdl bgSdcgdgTd8bUdibVdWdXdYdf Zd0d1d2d3d4d5d6d7d7 jb8 9 ! # $ kb8d9degfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgygzg9b!b#b% ' $b!d#d$dlb%d'dmb(d)d*dAgBgCgDgEgFg+d,d-d.dyb%b/d:d;d'b( =dm Gg?dHgIg@d(b[dnb]d^d_d`dg {d|d}d~daebecede) ob* + , - . pbeeJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g)b*b+b/ : ,bfegeqbheierbjekele5g6g7g8g9gmeneoepezb-bqerese.b; ten !gue#g$gve/bwesbxeyezeAe
1085 urls = (server_data.get("url") for server_data in self.servers) 2a :b;b=b?b@b[b]b^b_bo = p q r s t ? `b{bBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeAbBbCbu v Db|b}bXeYeZe0e1e2e~bacbccctbEbdcecfcFbw h gc4e5ehcGb@ icjckclcb mcncocpcqcrcsctcucx [ y z A B C ] vcwc6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@eHbIbJbD E Kbxcyc[e]e^e_e`e{ezcAcBcCcubLbDcEcFcMbF i Gc}e~eHcNb^ IcJcKcLcc McNcOcPcQcRcScTcUcG _ H I J K L ` VcWcafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfObPbQbM N RbXcYcZc{ 0c1c| 2c3c4cwfxfyfzfAfBf5c6c7c8cvbSb9c!c#cTbO $cj %cDfEf'cUb(c} )c*c+c,cd -c.c/c:c;c=c?c@c[cP ~ Q R S T U ab]c^cFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fVbWbXbV W Yb_c`c{cbb|c}ccb~cadbd1f2f3f4f5f6fcdddedfdwbZbgdhdid0bX jdk kd8f9fld1bmddbndodpdqde rdsdtdudvdwdxdydzdY ebZ 0 1 2 3 fbAdBd!f#f$f%f'f(f)f*f+f,f-f.f/f:f;f=f?f@f[f]f^f_f2b3b4b4 5 5bCdDdEdgbFdGdhbHdIdJd`f{f|f}f~fagKdLdMdNdxb6bOdPdQd7b6 Rdl SdcgdgTd8bUdibVdWdXdYdf Zd0d1d2d3d4d5d6d7d7 jb8 9 ! # $ kb8d9degfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgygzg9b!b#b% ' $b!d#d$dlb%d'dmb(d)d*dAgBgCgDgEgFg+d,d-d.dyb%b/d:d;d'b( =dm ?dHgIg@d(b[dnb]d^d_d`dg {d|d}d~daebecede) ob* + , - . pbeeJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g)b*b+b/ : ,bfegeqbheierbjekele5g6g7g8g9gmeneoepezb-bqerese.b; ten ue#g$gve/bwesbxeyezeAe
1086 server_urls = {url for url in urls if url} 2a :b;b=b?b@b[b]b^b_bo = p q r s t ? `b{bBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeAbBbCbu v Db|b}bXeYeZe0e1e2e~bacbccctbEbdcecfcFbw h gc4e5ehcGb@ icjckclcb mcncocpcqcrcsctcucx [ y z A B C ] vcwc6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@eHbIbJbD E Kbxcyc[e]e^e_e`e{ezcAcBcCcubLbDcEcFcMbF i Gc}e~eHcNb^ IcJcKcLcc McNcOcPcQcRcScTcUcG _ H I J K L ` VcWcafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfObPbQbM N RbXcYcZc{ 0c1c| 2c3c4cwfxfyfzfAfBf5c6c7c8cvbSb9c!c#cTbO $cj %cDfEf'cUb(c} )c*c+c,cd -c.c/c:c;c=c?c@c[cP ~ Q R S T U ab]c^cFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fVbWbXbV W Yb_c`c{cbb|c}ccb~cadbd1f2f3f4f5f6fcdddedfdwbZbgdhdid0bX jdk kd8f9fld1bmddbndodpdqde rdsdtdudvdwdxdydzdY ebZ 0 1 2 3 fbAdBd!f#f$f%f'f(f)f*f+f,f-f.f/f:f;f=f?f@f[f]f^f_f2b3b4b4 5 5bCdDdEdgbFdGdhbHdIdJd`f{f|f}f~fagKdLdMdNdxb6bOdPdQd7b6 Rdl SdcgdgTd8bUdibVdWdXdYdf Zd0d1d2d3d4d5d6d7d7 jb8 9 ! # $ kb8d9degfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgygzg9b!b#b% ' $b!d#d$dlb%d'dmb(d)d*dAgBgCgDgEgFg+d,d-d.dyb%b/d:d;d'b( =dm ?dHgIg@d(b[dnb]d^d_d`dg {d|d}d~daebecede) ob* + , - . pbeeJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g)b*b+b/ : ,bfegeqbheierbjekele5g6g7g8g9gmeneoepezb-bqerese.b; ten ue#g$gve/bwesbxeyezeAe
1088 async def openapi(req: Request) -> JSONResponse: 2a :b;b=b?b@b[b]b^b_bo = p q r s t ? `b{bBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeAbBbCbu v Db|b}bXeYeZe0e1e2e~bacbccctbEbdcecfcFbw h gc4e5ehcGb@ icjckclcb mcncocpcqcrcsctcucx [ y z A B C ] vcwc6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@eHbIbJbD E Kbxcyc[e]e^e_e`e{ezcAcBcCcubLbDcEcFcMbF i Gc}e~eHcNb^ IcJcKcLcc McNcOcPcQcRcScTcUcG _ H I J K L ` VcWcafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfObPbQbM N RbXcYcZc{ 0c1c| 2c3c4cwfxfyfzfAfBf5c6c7c8cvbSb9c!c#cTbO $cj %cDfEf'cUb(c} )c*c+c,cd -c.c/c:c;c=c?c@c[cP ~ Q R S T U ab]c^cFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fVbWbXbV W Yb_c`c{cbb|c}ccb~cadbd1f2f3f4f5f6fcdddedfdwbZbgdhdid0bX jdk kd8f9fld1bmddbndodpdqde rdsdtdudvdwdxdydzdY ebZ 0 1 2 3 fbAdBd!f#f$f%f'f(f)f*f+f,f-f.f/f:f;f=f?f@f[f]f^f_f2b3b4b4 5 5bCdDdEdgbFdGdhbHdIdJd`f{f|f}f~fagKdLdMdNdxb6bOdPdQd7b6 Rdl SdcgdgTd8bUdibVdWdXdYdf Zd0d1d2d3d4d5d6d7d7 jb8 9 ! # $ kb8d9degfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgygzg9b!b#b% ' $b!d#d$dlb%d'dmb(d)d*dAgBgCgDgEgFg+d,d-d.dyb%b/d:d;d'b( =dm ?dHgIg@d(b[dnb]d^d_d`dg {d|d}d~daebecede) ob* + , - . pbeeJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g)b*b+b/ : ,bfegeqbheierbjekele5g6g7g8g9gmeneoepezb-bqerese.b; ten ue#g$gve/bwesbxeyezeAe
1089 root_path = req.scope.get("root_path", "").rstrip("/") 2;F=F?Fsi-g.g/g:g@F[F]F^F;g_F=g`FPF{F?g|F}F@g~Fo = p q r s t ? aG[gbGcGdGeGfGgGhGiG]gjGkGu v lGmG^gnGoGpGqGrGsG_gtGuG`gvG{gwGxGyGw |gzGAGBGCGDGEGFGGGHGIGJGKGLGMGNGOGPGQGRGSGTGUGVGWGXGYGZG0G1G2G3G4G5G6G7G8G9G!G#G$G!FQFRF*F%G'G(G)G*G+G,G-Gh .G/G:G;G=G?G@G[G]G^G_G`G{G|G}G~GaHbHcHdHeH_UfHgHhHiHjHkHlHmHnHoHpHqHrHsHtHuHvHwHxHyHzHAHBHCHDHEHFHGHHHIHJHKHLHMHNHOHPHQHRHSHTHUHVHWHXHYHZH0H1H2H3H4H5H6H7H8H9H!H#H$H%H'H(H)H*H+H,H-H.H/H:H;H=H?H@H[H]H^H_H`H{H}g%g|H}H~H@ aIbI~gcIdIeIyiahbhchdhfIgIhIiIehjIfhkISFlIghmInIhhoIx [ y z A B C ] pIihqIrIsItIuIvIwIxIjhyIzID E AIBIkhCIDIEIFIGIHIlhIIJImhKInhLIMINIF ohOIPIQIRISITIUIVIWIXIYIZI0I1I2I3I4I5I6I7I8I9I!I#I$I%I'I(I)I*I+I,I-I.I/I:I;I=I?I@I#FTFUF+F[I]I^I_I`I{I|I}Ii ~IaJbJcJdJeJfJgJhJiJjJkJlJmJnJoJpJqJrJsJtJ`UuJvJwJxJyJzJAJBJCJDJEJFJGJHJIJJJKJLJMJNJOJPJQJRJSJTJUJVJWJXJYJZJ0J1J2J3J4J5J6J7J8J9J!J#J$J%J'J(J)J*J+J,J-J.J/J:J;J=J?J@J[J]J^J_J`J{J|J}J~JaKbKcKdKeKfKgKhKiKjKkKlKph'gmKnKoK^ pKqKqhrKsKtKEirhshthuhuKvKwKxKvhyKwhzKVFAKxhBKCKyhDKG _ H I J K L ` EKzhFKGKHKIKJKKKLKMKAhNKOKM N PKQKBhRKSKTKUKVKWK{ | ChXKYKDhZKEh0K1K2KFhO Gh3K4K5K6K7K8K9K!K#K$K%K'K(K)K*K+K,K-K.K/K:K;K=K?K@K[K]K^K_K`K{K|K}K~KaLbLcLdLeLfL$FWFXF,FgLhLiLjLkLlLmLnLj oLpLqLrLsLtLuLvLwLxLyLzLALBLCLDLELFLGLHLIL{UJLKLLLMLNLOLPLQLRLSLTLULVLWLXLYLZL0L1L2L3L4L5L6L7L8L9L!L#L$L%L'L(L)L*L+L,L-L.L/L:L;L=L?L@L[L]L^L_L`L{L|L}L~LaMbMcMdMeMfMgMhMiMjMkMlMmMnMoMpMqMrMsMtMuMvMwMxMyMzMAMHh(gBMCMDM} EMFMIhGMHMIMKiJhKhLhMhJMKMLMMMNhNMOhOMYFPMPhQMRMQhSMP ~ Q R S T U abTMRhUMVMWMXMYMZM0M1MSh2M3MV W 4M5MTh6M7M8M9M!M#MbbcbUh$M%MVh'MWh(M)M*MXhX Yh+M,M-M.M/M:M;M=M?M@M[M]M^M_M`M{M|M}M~MaNbNcNdNeNfNgNhNiNjNkNlNmNnNoNpNqNrNsNtNuN%FZF0F-FvNwNxNyNzNANBNCNk DNENFNGNHNINJNKNLNMNNNONPNQNRNSNTNUNVNWNXN|UYNZN0N1N2N3N4N5N6N7N8N9N!N#N$N%N'N(N)N*N+N,N-N.N/N:N;N=N?N@N[N]N^N_N`N{N|N}N~NaObOcOdOeOfOgOhOiOjOkOlOmOnOoOpOqOrOsOtOuOvOwOxOyOzOAOBOCODOEOFOGOHOIOJOKOLOMONOOOPOZh)gQOROSOdbTOUO0hVOWOXOQi1h2h3h4hYOZO0O1O5h2O6h3O1F4O7h5O6O8h7OY ebZ 0 1 2 3 fb8O9h9O!O#O$O%O'O(O)O!h*O+O4 5 ,O-O#h.O/O:O;O=O?Ogbhb$h@O[O%h]O'h^O_O`O(h6 )h{O|O}O~OaPbPcPdPePfPgPhPiPjPkPlPmPnPoPpPqPrPsPtPuPvPwPxPyPzPAPBPCPDPEPFPGPHPIPJP'F2F3F.FKPLPMPNPOPPPQPRPl SPTPUPVPWPXPYPZP0P1P2P3P4P5P6P7P8P9P!P#P$P}U%P'P(P)P*P+P,P-P.P/P:P;P=P?P@P[P]P^P_P`P{P|P}P~PaQbQcQdQeQfQgQhQiQjQkQlQmQnQoQpQqQrQsQtQuQvQwQxQyQzQAQBQCQDQEQFQGQHQIQJQKQLQMQNQOQPQQQRQSQTQUQVQWQXQYQZQ0Q1Q2Q3Q4Q*h*g5Q6Q7Qib8Q9Q+h!Q#Q$QWi,h-h.h/h%Q'Q(Q)Q:h*Q;h+Q4F,Q=h-Q.Q?h/Q7 jb8 9 ! # $ kb:Q@h;Q=Q?Q@Q[Q]Q^Q_Q[h`Q{Q% ' |Q}Q]h~QaRbRcRdReRlbmb^hfRgR_hhR`hiRjRkR{h( |hlRmRnRoRpRqRrRsRtRuRvRwRxRyRzRARBRCRDRERFRGRHRIRJRKRLRMRNRORPRQRRRSRTRURVRWRXRYR(F5F6F/FZR0R1R2R3R4R5R6Rm 7R8R9R!R#R$R%R'R(R)R*R+R,R-R.R/R:R;R=R?R@R~U[R]R^R_R`R{R|R}R~RaSbScSdSeSfSgShSiSjSkSlSmSnSoSpSqSrSsStSuSvSwSxSySzSASBSCSDSESFSGSHSISJSKSLSMSNSOSPSQSRSSSTSUSVSWSXSYSZS0S1S2S3S4S5S6S7S8S9S!S#S$S%S'S(S)S*S+S,S}h+g-S.S/Snb:S;S~h=S?S@S2iaibicidi[S]S^Sei_Sfi`S7F{Sgi|Shi}S) ob* + , - . pb~SiiaTbTcTdTeTfTgThTjiiTjT/ : kTlTkimTqbrblinToTmipTniqTrTsToi; pitTuTvTwTxTyTzTATBTCTDTETFTGTHTITJTKTLTMTNTOTPTQTRTSTTTUTVTWTXTYTZT0T1T2T3T4T5T6T)F8F9F:F7T8T9T!T#T$T%Tn 'T(T)T*T+T,T-T.T/T:T;T=T?T@T[T]T^T_T`T{TaV|T}T~TaUbUcUdUeUfUgUhUiUjUkUlUmUnUoUpUqUrUsUtUuUvUwUxUyUzUAUBUCUDUEUFUGUHUIUJUKULUMUNUOUPUQURUSUTUUUVUWUXUYUZU0U1U2U3U4U5U6U7U8U9U!U#U$U%U'U(U)U*Uqi,g+U,U-Usb.U/Uri
1090 if root_path not in server_urls: 2;F=F?Fsi-g.g/g:g@F[F]F^F;g_F=g`FPF{F?g|F}F@g~Fo = p q r s t ? aG[gbGcGdGeGfGgGhGiG]gjGkGu v lGmG^gnGoGpGqGrGsG_gtGuG`gvG{gwGxGyGw |gzGAGBGCGDGEGFGGGHGIGJGKGLGMGNGOGPGQGRGSGTGUGVGWGXGYGZG0G1G2G3G4G5G6G7G8G9G!G#G$G!FQFRF*F%G'G(G)G*G+G,G-Gh .G/G:G;G=G?G@G[G]G^G_G`G{G|G}G~GaHbHcHdHeH_UfHgHhHiHjHkHlHmHnHoHpHqHrHsHtHuHvHwHxHyHzHAHBHCHDHEHFHGHHHIHJHKHLHMHNHOHPHQHRHSHTHUHVHWHXHYHZH0H1H2H3H4H5H6H7H8H9H!H#H$H%H'H(H)H*H+H,H-H.H/H:H;H=H?H@H[H]H^H_H`H{H}g%g|H}H~H@ aIbI~gcIdIeIyiahbhchdhfIgIhIiIehjIfhkISFlIghmInIhhoIx [ y z A B C ] pIihqIrIsItIuIvIwIxIjhyIzID E AIBIkhCIDIEIFIGIHIlhIIJImhKInhLIMINIF ohOIPIQIRISITIUIVIWIXIYIZI0I1I2I3I4I5I6I7I8I9I!I#I$I%I'I(I)I*I+I,I-I.I/I:I;I=I?I@I#FTFUF+F[I]I^I_I`I{I|I}Ii ~IaJbJcJdJeJfJgJhJiJjJkJlJmJnJoJpJqJrJsJtJ`UuJvJwJxJyJzJAJBJCJDJEJFJGJHJIJJJKJLJMJNJOJPJQJRJSJTJUJVJWJXJYJZJ0J1J2J3J4J5J6J7J8J9J!J#J$J%J'J(J)J*J+J,J-J.J/J:J;J=J?J@J[J]J^J_J`J{J|J}J~JaKbKcKdKeKfKgKhKiKjKkKlKph'gmKnKoK^ pKqKqhrKsKtKEirhshthuhuKvKwKxKvhyKwhzKVFAKxhBKCKyhDKG _ H I J K L ` EKzhFKGKHKIKJKKKLKMKAhNKOKM N PKQKBhRKSKTKUKVKWK{ | ChXKYKDhZKEh0K1K2KFhO Gh3K4K5K6K7K8K9K!K#K$K%K'K(K)K*K+K,K-K.K/K:K;K=K?K@K[K]K^K_K`K{K|K}K~KaLbLcLdLeLfL$FWFXF,FgLhLiLjLkLlLmLnLj oLpLqLrLsLtLuLvLwLxLyLzLALBLCLDLELFLGLHLIL{UJLKLLLMLNLOLPLQLRLSLTLULVLWLXLYLZL0L1L2L3L4L5L6L7L8L9L!L#L$L%L'L(L)L*L+L,L-L.L/L:L;L=L?L@L[L]L^L_L`L{L|L}L~LaMbMcMdMeMfMgMhMiMjMkMlMmMnMoMpMqMrMsMtMuMvMwMxMyMzMAMHh(gBMCMDM} EMFMIhGMHMIMKiJhKhLhMhJMKMLMMMNhNMOhOMYFPMPhQMRMQhSMP ~ Q R S T U abTMRhUMVMWMXMYMZM0M1MSh2M3MV W 4M5MTh6M7M8M9M!M#MbbcbUh$M%MVh'MWh(M)M*MXhX Yh+M,M-M.M/M:M;M=M?M@M[M]M^M_M`M{M|M}M~MaNbNcNdNeNfNgNhNiNjNkNlNmNnNoNpNqNrNsNtNuN%FZF0F-FvNwNxNyNzNANBNCNk DNENFNGNHNINJNKNLNMNNNONPNQNRNSNTNUNVNWNXN|UYNZN0N1N2N3N4N5N6N7N8N9N!N#N$N%N'N(N)N*N+N,N-N.N/N:N;N=N?N@N[N]N^N_N`N{N|N}N~NaObOcOdOeOfOgOhOiOjOkOlOmOnOoOpOqOrOsOtOuOvOwOxOyOzOAOBOCODOEOFOGOHOIOJOKOLOMONOOOPOZh)gQOROSOdbTOUO0hVOWOXOQi1h2h3h4hYOZO0O1O5h2O6h3O1F4O7h5O6O8h7OY ebZ 0 1 2 3 fb8O9h9O!O#O$O%O'O(O)O!h*O+O4 5 ,O-O#h.O/O:O;O=O?Ogbhb$h@O[O%h]O'h^O_O`O(h6 )h{O|O}O~OaPbPcPdPePfPgPhPiPjPkPlPmPnPoPpPqPrPsPtPuPvPwPxPyPzPAPBPCPDPEPFPGPHPIPJP'F2F3F.FKPLPMPNPOPPPQPRPl SPTPUPVPWPXPYPZP0P1P2P3P4P5P6P7P8P9P!P#P$P}U%P'P(P)P*P+P,P-P.P/P:P;P=P?P@P[P]P^P_P`P{P|P}P~PaQbQcQdQeQfQgQhQiQjQkQlQmQnQoQpQqQrQsQtQuQvQwQxQyQzQAQBQCQDQEQFQGQHQIQJQKQLQMQNQOQPQQQRQSQTQUQVQWQXQYQZQ0Q1Q2Q3Q4Q*h*g5Q6Q7Qib8Q9Q+h!Q#Q$QWi,h-h.h/h%Q'Q(Q)Q:h*Q;h+Q4F,Q=h-Q.Q?h/Q7 jb8 9 ! # $ kb:Q@h;Q=Q?Q@Q[Q]Q^Q_Q[h`Q{Q% ' |Q}Q]h~QaRbRcRdReRlbmb^hfRgR_hhR`hiRjRkR{h( |hlRmRnRoRpRqRrRsRtRuRvRwRxRyRzRARBRCRDRERFRGRHRIRJRKRLRMRNRORPRQRRRSRTRURVRWRXRYR(F5F6F/FZR0R1R2R3R4R5R6Rm 7R8R9R!R#R$R%R'R(R)R*R+R,R-R.R/R:R;R=R?R@R~U[R]R^R_R`R{R|R}R~RaSbScSdSeSfSgShSiSjSkSlSmSnSoSpSqSrSsStSuSvSwSxSySzSASBSCSDSESFSGSHSISJSKSLSMSNSOSPSQSRSSSTSUSVSWSXSYSZS0S1S2S3S4S5S6S7S8S9S!S#S$S%S'S(S)S*S+S,S}h+g-S.S/Snb:S;S~h=S?S@S2iaibicidi[S]S^Sei_Sfi`S7F{Sgi|Shi}S) ob* + , - . pb~SiiaTbTcTdTeTfTgThTjiiTjT/ : kTlTkimTqbrblinToTmipTniqTrTsToi; pitTuTvTwTxTyTzTATBTCTDTETFTGTHTITJTKTLTMTNTOTPTQTRTSTTTUTVTWTXTYTZT0T1T2T3T4T5T6T)F8F9F:F7T8T9T!T#T$T%Tn 'T(T)T*T+T,T-T.T/T:T;T=T?T@T[T]T^T_T`T{TaV|T}T~TaUbUcUdUeUfUgUhUiUjUkUlUmUnUoUpUqUrUsUtUuUvUwUxUyUzUAUBUCUDUEUFUGUHUIUJUKULUMUNUOUPUQURUSUTUUUVUWUXUYUZU0U1U2U3U4U5U6U7U8U9U!U#U$U%U'U(U)U*Uqi,g+U,U-Usb.U/Uri
1091 if root_path and self.root_path_in_servers: 2;F=F?Fsi-g.g/g:g@F[F]F^F;g_F=g`FPF{F?g|F}F@g~Fo = p q r s t ? aG[gbGcGdGeGfGgGhGiG]gjGkGu v lGmG^gnGoGpGqGrGsG_gtGuG`gvG{gwGxGyGw |gzGAGBGCGDGEGFGGGHGIGJGKGLGMGNGOGPGQGRGSGTGUGVGWGXGYGZG0G1G2G3G4G5G6G7G8G9G!G#G$G!FQFRF*F%G'G(G)G*G+G,G-Gh .G/G:G;G=G?G@G[G]G^G_G`G{G|G}G~GaHbHcHdHeH_UfHgHhHiHjHkHlHmHnHoHpHqHrHsHtHuHvHwHxHyHzHAHBHCHDHEHFHGHHHIHJHKHLHMHNHOHPHQHRHSHTHUHVHWHXHYHZH0H1H2H3H4H5H6H7H8H9H!H#H$H%H'H(H)H*H+H,H-H.H/H:H;H=H?H@H[H]H^H_H`H{H}g%g|H}H~H@ aIbI~gcIdIeIyiahbhchdhfIgIhIiIehjIfhkISFlIghmInIhhoIx [ y z A B C ] pIihqIrIsItIuIvIwIxIjhyIzID E AIBIkhCIDIEIFIGIHIlhIIJImhKInhLIMINIF ohOIPIQIRISITIUIVIWIXIYIZI0I1I2I3I4I5I6I7I8I9I!I#I$I%I'I(I)I*I+I,I-I.I/I:I;I=I?I@I#FTFUF+F[I]I^I_I`I{I|I}Ii ~IaJbJcJdJeJfJgJhJiJjJkJlJmJnJoJpJqJrJsJtJ`UuJvJwJxJyJzJAJBJCJDJEJFJGJHJIJJJKJLJMJNJOJPJQJRJSJTJUJVJWJXJYJZJ0J1J2J3J4J5J6J7J8J9J!J#J$J%J'J(J)J*J+J,J-J.J/J:J;J=J?J@J[J]J^J_J`J{J|J}J~JaKbKcKdKeKfKgKhKiKjKkKlKph'gmKnKoK^ pKqKqhrKsKtKEirhshthuhuKvKwKxKvhyKwhzKVFAKxhBKCKyhDKG _ H I J K L ` EKzhFKGKHKIKJKKKLKMKAhNKOKM N PKQKBhRKSKTKUKVKWK{ | ChXKYKDhZKEh0K1K2KFhO Gh3K4K5K6K7K8K9K!K#K$K%K'K(K)K*K+K,K-K.K/K:K;K=K?K@K[K]K^K_K`K{K|K}K~KaLbLcLdLeLfL$FWFXF,FgLhLiLjLkLlLmLnLj oLpLqLrLsLtLuLvLwLxLyLzLALBLCLDLELFLGLHLIL{UJLKLLLMLNLOLPLQLRLSLTLULVLWLXLYLZL0L1L2L3L4L5L6L7L8L9L!L#L$L%L'L(L)L*L+L,L-L.L/L:L;L=L?L@L[L]L^L_L`L{L|L}L~LaMbMcMdMeMfMgMhMiMjMkMlMmMnMoMpMqMrMsMtMuMvMwMxMyMzMAMHh(gBMCMDM} EMFMIhGMHMIMKiJhKhLhMhJMKMLMMMNhNMOhOMYFPMPhQMRMQhSMP ~ Q R S T U abTMRhUMVMWMXMYMZM0M1MSh2M3MV W 4M5MTh6M7M8M9M!M#MbbcbUh$M%MVh'MWh(M)M*MXhX Yh+M,M-M.M/M:M;M=M?M@M[M]M^M_M`M{M|M}M~MaNbNcNdNeNfNgNhNiNjNkNlNmNnNoNpNqNrNsNtNuN%FZF0F-FvNwNxNyNzNANBNCNk DNENFNGNHNINJNKNLNMNNNONPNQNRNSNTNUNVNWNXN|UYNZN0N1N2N3N4N5N6N7N8N9N!N#N$N%N'N(N)N*N+N,N-N.N/N:N;N=N?N@N[N]N^N_N`N{N|N}N~NaObOcOdOeOfOgOhOiOjOkOlOmOnOoOpOqOrOsOtOuOvOwOxOyOzOAOBOCODOEOFOGOHOIOJOKOLOMONOOOPOZh)gQOROSOdbTOUO0hVOWOXOQi1h2h3h4hYOZO0O1O5h2O6h3O1F4O7h5O6O8h7OY ebZ 0 1 2 3 fb8O9h9O!O#O$O%O'O(O)O!h*O+O4 5 ,O-O#h.O/O:O;O=O?Ogbhb$h@O[O%h]O'h^O_O`O(h6 )h{O|O}O~OaPbPcPdPePfPgPhPiPjPkPlPmPnPoPpPqPrPsPtPuPvPwPxPyPzPAPBPCPDPEPFPGPHPIPJP'F2F3F.FKPLPMPNPOPPPQPRPl SPTPUPVPWPXPYPZP0P1P2P3P4P5P6P7P8P9P!P#P$P}U%P'P(P)P*P+P,P-P.P/P:P;P=P?P@P[P]P^P_P`P{P|P}P~PaQbQcQdQeQfQgQhQiQjQkQlQmQnQoQpQqQrQsQtQuQvQwQxQyQzQAQBQCQDQEQFQGQHQIQJQKQLQMQNQOQPQQQRQSQTQUQVQWQXQYQZQ0Q1Q2Q3Q4Q*h*g5Q6Q7Qib8Q9Q+h!Q#Q$QWi,h-h.h/h%Q'Q(Q)Q:h*Q;h+Q4F,Q=h-Q.Q?h/Q7 jb8 9 ! # $ kb:Q@h;Q=Q?Q@Q[Q]Q^Q_Q[h`Q{Q% ' |Q}Q]h~QaRbRcRdReRlbmb^hfRgR_hhR`hiRjRkR{h( |hlRmRnRoRpRqRrRsRtRuRvRwRxRyRzRARBRCRDRERFRGRHRIRJRKRLRMRNRORPRQRRRSRTRURVRWRXRYR(F5F6F/FZR0R1R2R3R4R5R6Rm 7R8R9R!R#R$R%R'R(R)R*R+R,R-R.R/R:R;R=R?R@R~U[R]R^R_R`R{R|R}R~RaSbScSdSeSfSgShSiSjSkSlSmSnSoSpSqSrSsStSuSvSwSxSySzSASBSCSDSESFSGSHSISJSKSLSMSNSOSPSQSRSSSTSUSVSWSXSYSZS0S1S2S3S4S5S6S7S8S9S!S#S$S%S'S(S)S*S+S,S}h+g-S.S/Snb:S;S~h=S?S@S2iaibicidi[S]S^Sei_Sfi`S7F{Sgi|Shi}S) ob* + , - . pb~SiiaTbTcTdTeTfTgThTjiiTjT/ : kTlTkimTqbrblinToTmipTniqTrTsToi; pitTuTvTwTxTyTzTATBTCTDTETFTGTHTITJTKTLTMTNTOTPTQTRTSTTTUTVTWTXTYTZT0T1T2T3T4T5T6T)F8F9F:F7T8T9T!T#T$T%Tn 'T(T)T*T+T,T-T.T/T:T;T=T?T@T[T]T^T_T`T{TaV|T}T~TaUbUcUdUeUfUgUhUiUjUkUlUmUnUoUpUqUrUsUtUuUvUwUxUyUzUAUBUCUDUEUFUGUHUIUJUKULUMUNUOUPUQURUSUTUUUVUWUXUYUZU0U1U2U3U4U5U6U7U8U9U!U#U$U%U'U(U)U*Uqi,g+U,U-Usb.U/Uri
1092 self.servers.insert(0, {"url": root_path}) 2PF!FQFRF%gSF#FTFUF'gVF$FWFXF(gYF%FZF0F)g1F'F2F3F*g4F(F5F6F+g7F)F8F9F,g
1093 server_urls.add(root_path) 2PF!FQFRF%gSF#FTFUF'gVF$FWFXF(gYF%FZF0F)g1F'F2F3F*g4F(F5F6F+g7F)F8F9F,g
1094 return JSONResponse(self.openapi()) 2;F=F?Fsi-g.g/g:g@F[F]F^F;g_F=g`FPF{F?g|F}F@g~Fo = p q r s t ? aG[gbGcGdGeGfGgGhGiG]gjGkGu v lGmG^gnGoGpGqGrGsG_gtGuG`gvG{gwGxGyGw |gzGAGBGCGDGEGFGGGHGIGJGKGLGMGNGOGPGQGRGSGTGUGVGWGXGYGZG0G1G2G3G4G5G6G7G8G9G!G#G$G!FQFRF*F%G'G(G)G*G+G,G-Gh .G/G:G;G=G?G@G[G]G^G_G`G{G|G}G~GaHbHcHdHeH_UfHgHhHiHjHkHlHmHnHoHpHqHrHsHtHuHvHwHxHyHzHAHBHCHDHEHFHGHHHIHJHKHLHMHNHOHPHQHRHSHTHUHVHWHXHYHZH0H1H2H3H4H5H6H7H8H9H!H#H$H%H'H(H)H*H+H,H-H.H/H:H;H=H?H@H[H]H^H_H`H{H}g%g|H}H~H@ aIbI~gcIdIeIyiahbhchdhfIgIhIiIehjIfhkISFlIghmInIhhoIx [ y z A B C ] pIihqIrIsItIuIvIwIxIjhyIzID E AIBIkhCIDIEIFIGIHIlhIIJImhKInhLIMINIF ohOIPIQIRISITIUIVIWIXIYIZI0I1I2I3I4I5I6I7I8I9I!I#I$I%I'I(I)I*I+I,I-I.I/I:I;I=I?I@I#FTFUF+F[I]I^I_I`I{I|I}Ii ~IaJbJcJdJeJfJgJhJiJjJkJlJmJnJoJpJqJrJsJtJ`UuJvJwJxJyJzJAJBJCJDJEJFJGJHJIJJJKJLJMJNJOJPJQJRJSJTJUJVJWJXJYJZJ0J1J2J3J4J5J6J7J8J9J!J#J$J%J'J(J)J*J+J,J-J.J/J:J;J=J?J@J[J]J^J_J`J{J|J}J~JaKbKcKdKeKfKgKhKiKjKkKlKph'gmKnKoK^ pKqKqhrKsKtKEirhshthuhuKvKwKxKvhyKwhzKVFAKxhBKCKyhDKG _ H I J K L ` EKzhFKGKHKIKJKKKLKMKAhNKOKM N PKQKBhRKSKTKUKVKWK{ | ChXKYKDhZKEh0K1K2KFhO Gh3K4K5K6K7K8K9K!K#K$K%K'K(K)K*K+K,K-K.K/K:K;K=K?K@K[K]K^K_K`K{K|K}K~KaLbLcLdLeLfL$FWFXF,FgLhLiLjLkLlLmLnLj oLpLqLrLsLtLuLvLwLxLyLzLALBLCLDLELFLGLHLIL{UJLKLLLMLNLOLPLQLRLSLTLULVLWLXLYLZL0L1L2L3L4L5L6L7L8L9L!L#L$L%L'L(L)L*L+L,L-L.L/L:L;L=L?L@L[L]L^L_L`L{L|L}L~LaMbMcMdMeMfMgMhMiMjMkMlMmMnMoMpMqMrMsMtMuMvMwMxMyMzMAMHh(gBMCMDM} EMFMIhGMHMIMKiJhKhLhMhJMKMLMMMNhNMOhOMYFPMPhQMRMQhSMP ~ Q R S T U abTMRhUMVMWMXMYMZM0M1MSh2M3MV W 4M5MTh6M7M8M9M!M#MbbcbUh$M%MVh'MWh(M)M*MXhX Yh+M,M-M.M/M:M;M=M?M@M[M]M^M_M`M{M|M}M~MaNbNcNdNeNfNgNhNiNjNkNlNmNnNoNpNqNrNsNtNuN%FZF0F-FvNwNxNyNzNANBNCNk DNENFNGNHNINJNKNLNMNNNONPNQNRNSNTNUNVNWNXN|UYNZN0N1N2N3N4N5N6N7N8N9N!N#N$N%N'N(N)N*N+N,N-N.N/N:N;N=N?N@N[N]N^N_N`N{N|N}N~NaObOcOdOeOfOgOhOiOjOkOlOmOnOoOpOqOrOsOtOuOvOwOxOyOzOAOBOCODOEOFOGOHOIOJOKOLOMONOOOPOZh)gQOROSOdbTOUO0hVOWOXOQi1h2h3h4hYOZO0O1O5h2O6h3O1F4O7h5O6O8h7OY ebZ 0 1 2 3 fb8O9h9O!O#O$O%O'O(O)O!h*O+O4 5 ,O-O#h.O/O:O;O=O?Ogbhb$h@O[O%h]O'h^O_O`O(h6 )h{O|O}O~OaPbPcPdPePfPgPhPiPjPkPlPmPnPoPpPqPrPsPtPuPvPwPxPyPzPAPBPCPDPEPFPGPHPIPJP'F2F3F.FKPLPMPNPOPPPQPRPl SPTPUPVPWPXPYPZP0P1P2P3P4P5P6P7P8P9P!P#P$P}U%P'P(P)P*P+P,P-P.P/P:P;P=P?P@P[P]P^P_P`P{P|P}P~PaQbQcQdQeQfQgQhQiQjQkQlQmQnQoQpQqQrQsQtQuQvQwQxQyQzQAQBQCQDQEQFQGQHQIQJQKQLQMQNQOQPQQQRQSQTQUQVQWQXQYQZQ0Q1Q2Q3Q4Q*h*g5Q6Q7Qib8Q9Q+h!Q#Q$QWi,h-h.h/h%Q'Q(Q)Q:h*Q;h+Q4F,Q=h-Q.Q?h/Q7 jb8 9 ! # $ kb:Q@h;Q=Q?Q@Q[Q]Q^Q_Q[h`Q{Q% ' |Q}Q]h~QaRbRcRdReRlbmb^hfRgR_hhR`hiRjRkR{h( |hlRmRnRoRpRqRrRsRtRuRvRwRxRyRzRARBRCRDRERFRGRHRIRJRKRLRMRNRORPRQRRRSRTRURVRWRXRYR(F5F6F/FZR0R1R2R3R4R5R6Rm 7R8R9R!R#R$R%R'R(R)R*R+R,R-R.R/R:R;R=R?R@R~U[R]R^R_R`R{R|R}R~RaSbScSdSeSfSgShSiSjSkSlSmSnSoSpSqSrSsStSuSvSwSxSySzSASBSCSDSESFSGSHSISJSKSLSMSNSOSPSQSRSSSTSUSVSWSXSYSZS0S1S2S3S4S5S6S7S8S9S!S#S$S%S'S(S)S*S+S,S}h+g-S.S/Snb:S;S~h=S?S@S2iaibicidi[S]S^Sei_Sfi`S7F{Sgi|Shi}S) ob* + , - . pb~SiiaTbTcTdTeTfTgThTjiiTjT/ : kTlTkimTqbrblinToTmipTniqTrTsToi; pitTuTvTwTxTyTzTATBTCTDTETFTGTHTITJTKTLTMTNTOTPTQTRTSTTTUTVTWTXTYTZT0T1T2T3T4T5T6T)F8F9F:F7T8T9T!T#T$T%Tn 'T(T)T*T+T,T-T.T/T:T;T=T?T@T[T]T^T_T`T{TaV|T}T~TaUbUcUdUeUfUgUhUiUjUkUlUmUnUoUpUqUrUsUtUuUvUwUxUyUzUAUBUCUDUEUFUGUHUIUJUKULUMUNUOUPUQURUSUTUUUVUWUXUYUZU0U1U2U3U4U5U6U7U8U9U!U#U$U%U'U(U)U*Uqi,g+U,U-Usb.U/Uri
1096 self.add_route(self.openapi_url, openapi, include_in_schema=False) 2a :b;b=b?b@b[b]b^b_bo = p q r s t ? `b{bBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeAbBbCbu v Db|b}bXeYeZe0e1e2e~bacbccctbEbdcecfcFbw h gc4e5ehcGb@ icjckclcb mcncocpcqcrcsctcucx [ y z A B C ] vcwc6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@eHbIbJbD E Kbxcyc[e]e^e_e`e{ezcAcBcCcubLbDcEcFcMbF i Gc}e~eHcNb^ IcJcKcLcc McNcOcPcQcRcScTcUcG _ H I J K L ` VcWcafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfObPbQbM N RbXcYcZc{ 0c1c| 2c3c4cwfxfyfzfAfBf5c6c7c8cvbSb9c!c#cTbO $cj %cDfEf'cUb(c} )c*c+c,cd -c.c/c:c;c=c?c@c[cP ~ Q R S T U ab]c^cFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fVbWbXbV W Yb_c`c{cbb|c}ccb~cadbd1f2f3f4f5f6fcdddedfdwbZbgdhdid0bX jdk kd8f9fld1bmddbndodpdqde rdsdtdudvdwdxdydzdY ebZ 0 1 2 3 fbAdBd!f#f$f%f'f(f)f*f+f,f-f.f/f:f;f=f?f@f[f]f^f_f2b3b4b4 5 5bCdDdEdgbFdGdhbHdIdJd`f{f|f}f~fagKdLdMdNdxb6bOdPdQd7b6 Rdl SdcgdgTd8bUdibVdWdXdYdf Zd0d1d2d3d4d5d6d7d7 jb8 9 ! # $ kb8d9degfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgygzg9b!b#b% ' $b!d#d$dlb%d'dmb(d)d*dAgBgCgDgEgFg+d,d-d.dyb%b/d:d;d'b( =dm ?dHgIg@d(b[dnb]d^d_d`dg {d|d}d~daebecede) ob* + , - . pbeeJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g)b*b+b/ : ,bfegeqbheierbjekele5g6g7g8g9gmeneoepezb-bqerese.b; ten ue#g$gve/bwesbxeyezeAe
1097 if self.openapi_url and self.docs_url: 2a :b;b=b?b@b[b]b^b_bo = p q r s t ? `b{bBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeAbBbCbu v Db|b}bXeYeZe0e1e2e~bacbccctbEbdcecfcFbw h 3egc4e5ehcGb@ icjckclcb mcncocpcqcrcsctcucx [ y z A B C ] vcwc6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@eHbIbJbD E Kbxcyc[e]e^e_e`e{ezcAcBcCcubLbDcEcFcMbF i |eGc}e~eHcNb^ IcJcKcLcc McNcOcPcQcRcScTcUcG _ H I J K L ` VcWcafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfObPbQbM N RbXcYcZc{ 0c1c| 2c3c4cwfxfyfzfAfBf5c6c7c8cvbSb9c!c#cTbO $cj Cf%cDfEf'cUb(c} )c*c+c,cd -c.c/c:c;c=c?c@c[cP ~ Q R S T U ab]c^cFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fVbWbXbV W Yb_c`c{cbb|c}ccb~cadbd1f2f3f4f5f6fcdddedfdwbZbgdhdid0bX jdk 7fkd8f9fld1bmddbndodpdqde rdsdtdudvdwdxdydzdY ebZ 0 1 2 3 fbAdBd!f#f$f%f'f(f)f*f+f,f-f.f/f:f;f=f?f@f[f]f^f_f2b3b4b4 5 5bCdDdEdgbFdGdhbHdIdJd`f{f|f}f~fagKdLdMdNdxb6bOdPdQd7b6 Rdl bgSdcgdgTd8bUdibVdWdXdYdf Zd0d1d2d3d4d5d6d7d7 jb8 9 ! # $ kb8d9degfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgygzg9b!b#b% ' $b!d#d$dlb%d'dmb(d)d*dAgBgCgDgEgFg+d,d-d.dyb%b/d:d;d'b( =dm Gg?dHgIg@d(b[dnb]d^d_d`dg {d|d}d~daebecede) ob* + , - . pbeeJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g)b*b+b/ : ,bfegeqbheierbjekele5g6g7g8g9gmeneoepezb-bqerese.b; ten !gue#g$gve/bwesbxeyezeAe
1099 async def swagger_ui_html(req: Request) -> HTMLResponse: 2a :b;b=b?b@b[b]b^b_bo = p q r s t ? `b{bBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeAbBbCbu v Db|b}bXeYeZe0e1e2e~bacbccctbEbdcecfcFbw h gc4e5ehcGb@ icjckclcb mcncocpcqcrcsctcucx [ y z A B C ] vcwc6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@eHbIbJbD E Kbxcyc[e]e^e_e`e{ezcAcBcCcubLbDcEcFcMbF i Gc}e~eHcNb^ IcJcKcLcc McNcOcPcQcRcScTcUcG _ H I J K L ` VcWcafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfObPbQbM N RbXcYcZc{ 0c1c| 2c3c4cwfxfyfzfAfBf5c6c7c8cvbSb9c!c#cTbO $cj %cDfEf'cUb(c} )c*c+c,cd -c.c/c:c;c=c?c@c[cP ~ Q R S T U ab]c^cFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fVbWbXbV W Yb_c`c{cbb|c}ccb~cadbd1f2f3f4f5f6fcdddedfdwbZbgdhdid0bX jdk kd8f9fld1bmddbndodpdqde rdsdtdudvdwdxdydzdY ebZ 0 1 2 3 fbAdBd!f#f$f%f'f(f)f*f+f,f-f.f/f:f;f=f?f@f[f]f^f_f2b3b4b4 5 5bCdDdEdgbFdGdhbHdIdJd`f{f|f}f~fagKdLdMdNdxb6bOdPdQd7b6 Rdl SdcgdgTd8bUdibVdWdXdYdf Zd0d1d2d3d4d5d6d7d7 jb8 9 ! # $ kb8d9degfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgygzg9b!b#b% ' $b!d#d$dlb%d'dmb(d)d*dAgBgCgDgEgFg+d,d-d.dyb%b/d:d;d'b( =dm ?dHgIg@d(b[dnb]d^d_d`dg {d|d}d~daebecede) ob* + , - . pbeeJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g)b*b+b/ : ,bfegeqbheierbjekele5g6g7g8g9gmeneoepezb-bqerese.b; ten ue#g$gve/bwesbxeyezeAe
1100 root_path = req.scope.get("root_path", "").rstrip("/") 2:Uti8iuih viwixi;Uzi9iAii BiCiDi=UFi!iGij HiIiJi?ULi#iMik NiOiPi@URi$iSil TiUiVi[UXi%iYim Zi0i1i]U3i'i4in 5i6i7i
1101 openapi_url = root_path + self.openapi_url 2:Uti8iuih viwixi;Uzi9iAii BiCiDi=UFi!iGij HiIiJi?ULi#iMik NiOiPi@URi$iSil TiUiVi[UXi%iYim Zi0i1i]U3i'i4in 5i6i7i
1102 oauth2_redirect_url = self.swagger_ui_oauth2_redirect_url 2:Uti8iuih viwixi;Uzi9iAii BiCiDi=UFi!iGij HiIiJi?ULi#iMik NiOiPi@URi$iSil TiUiVi[UXi%iYim Zi0i1i]U3i'i4in 5i6i7i
1103 if oauth2_redirect_url: 2:Uti8iuih viwixi;Uzi9iAii BiCiDi=UFi!iGij HiIiJi?ULi#iMik NiOiPi@URi$iSil TiUiVi[UXi%iYim Zi0i1i]U3i'i4in 5i6i7i
1104 oauth2_redirect_url = root_path + oauth2_redirect_url 2:Utiuih viwixi;UziAii BiCiDi=UFiGij HiIiJi?ULiMik NiOiPi@URiSil TiUiVi[UXiYim Zi0i1i]U3i4in 5i6i7i
1105 return get_swagger_ui_html( 2:Uti8iuih viwixi;Uzi9iAii BiCiDi=UFi!iGij HiIiJi?ULi#iMik NiOiPi@URi$iSil TiUiVi[UXi%iYim Zi0i1i]U3i'i4in 5i6i7i
1106 openapi_url=openapi_url,
1107 title=f"{self.title} - Swagger UI",
1108 oauth2_redirect_url=oauth2_redirect_url,
1109 init_oauth=self.swagger_ui_init_oauth,
1110 swagger_ui_parameters=self.swagger_ui_parameters,
1111 )
1113 self.add_route(self.docs_url, swagger_ui_html, include_in_schema=False) 2a :b;b=b?b@b[b]b^b_bo = p q r s t ? `b{bBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeAbBbCbu v Db|b}bXeYeZe0e1e2e~bacbccctbEbdcecfcFbw h gc4e5ehcGb@ icjckclcb mcncocpcqcrcsctcucx [ y z A B C ] vcwc6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@eHbIbJbD E Kbxcyc[e]e^e_e`e{ezcAcBcCcubLbDcEcFcMbF i Gc}e~eHcNb^ IcJcKcLcc McNcOcPcQcRcScTcUcG _ H I J K L ` VcWcafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfObPbQbM N RbXcYcZc{ 0c1c| 2c3c4cwfxfyfzfAfBf5c6c7c8cvbSb9c!c#cTbO $cj %cDfEf'cUb(c} )c*c+c,cd -c.c/c:c;c=c?c@c[cP ~ Q R S T U ab]c^cFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fVbWbXbV W Yb_c`c{cbb|c}ccb~cadbd1f2f3f4f5f6fcdddedfdwbZbgdhdid0bX jdk kd8f9fld1bmddbndodpdqde rdsdtdudvdwdxdydzdY ebZ 0 1 2 3 fbAdBd!f#f$f%f'f(f)f*f+f,f-f.f/f:f;f=f?f@f[f]f^f_f2b3b4b4 5 5bCdDdEdgbFdGdhbHdIdJd`f{f|f}f~fagKdLdMdNdxb6bOdPdQd7b6 Rdl SdcgdgTd8bUdibVdWdXdYdf Zd0d1d2d3d4d5d6d7d7 jb8 9 ! # $ kb8d9degfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgygzg9b!b#b% ' $b!d#d$dlb%d'dmb(d)d*dAgBgCgDgEgFg+d,d-d.dyb%b/d:d;d'b( =dm ?dHgIg@d(b[dnb]d^d_d`dg {d|d}d~daebecede) ob* + , - . pbeeJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g)b*b+b/ : ,bfegeqbheierbjekele5g6g7g8g9gmeneoepezb-bqerese.b; ten ue#g$gve/bwesbxeyezeAe
1115 if self.swagger_ui_oauth2_redirect_url: 2a :b;b=b?b@b[b]b^b_bo = p q r s t ? `b{bBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeAbBbCbu v Db|b}bXeYeZe0e1e2e~bacbccctbEbdcecfcFbw h gc4e5ehcGb@ icjckclcb mcncocpcqcrcsctcucx [ y z A B C ] vcwc6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@eHbIbJbD E Kbxcyc[e]e^e_e`e{ezcAcBcCcubLbDcEcFcMbF i Gc}e~eHcNb^ IcJcKcLcc McNcOcPcQcRcScTcUcG _ H I J K L ` VcWcafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfObPbQbM N RbXcYcZc{ 0c1c| 2c3c4cwfxfyfzfAfBf5c6c7c8cvbSb9c!c#cTbO $cj %cDfEf'cUb(c} )c*c+c,cd -c.c/c:c;c=c?c@c[cP ~ Q R S T U ab]c^cFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fVbWbXbV W Yb_c`c{cbb|c}ccb~cadbd1f2f3f4f5f6fcdddedfdwbZbgdhdid0bX jdk kd8f9fld1bmddbndodpdqde rdsdtdudvdwdxdydzdY ebZ 0 1 2 3 fbAdBd!f#f$f%f'f(f)f*f+f,f-f.f/f:f;f=f?f@f[f]f^f_f2b3b4b4 5 5bCdDdEdgbFdGdhbHdIdJd`f{f|f}f~fagKdLdMdNdxb6bOdPdQd7b6 Rdl SdcgdgTd8bUdibVdWdXdYdf Zd0d1d2d3d4d5d6d7d7 jb8 9 ! # $ kb8d9degfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgygzg9b!b#b% ' $b!d#d$dlb%d'dmb(d)d*dAgBgCgDgEgFg+d,d-d.dyb%b/d:d;d'b( =dm ?dHgIg@d(b[dnb]d^d_d`dg {d|d}d~daebecede) ob* + , - . pbeeJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g)b*b+b/ : ,bfegeqbheierbjekele5g6g7g8g9gmeneoepezb-bqerese.b; ten ue#g$gve/bwesbxeyezeAe
1117 async def swagger_ui_redirect(req: Request) -> HTMLResponse: 2a :b;b=b?b@b[b]b^b_bo = p q r s t ? `b{bBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeAbBbCbu v Db|b}bXeYeZe0e1e2e~bacbccctbEbdcecfcFbw h gc4e5ehcGb@ icjckclcb mcncocpcqcrcsctcucx [ y z A B C ] vcwc6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@eHbIbJbD E Kbxcyc[e]e^e_e`e{ezcAcBcCcubLbDcEcFcMbF i Gc}e~eHcNb^ IcJcKcLcc McNcOcPcQcRcScTcUcG _ H I J K L ` VcWcafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfObPbQbM N RbXcYcZc{ 0c1c| 2c3c4cwfxfyfzfAfBf5c6c7c8cvbSb9c!c#cTbO $cj %cDfEf'cUb(c} )c*c+c,cd -c.c/c:c;c=c?c@c[cP ~ Q R S T U ab]c^cFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fVbWbXbV W Yb_c`c{cbb|c}ccb~cadbd1f2f3f4f5f6fcdddedfdwbZbgdhdid0bX jdk kd8f9fld1bmddbndodpdqde rdsdtdudvdwdxdydzdY ebZ 0 1 2 3 fbAdBd!f#f$f%f'f(f)f*f+f,f-f.f/f:f;f=f?f@f[f]f^f_f2b3b4b4 5 5bCdDdEdgbFdGdhbHdIdJd`f{f|f}f~fagKdLdMdNdxb6bOdPdQd7b6 Rdl SdcgdgTd8bUdibVdWdXdYdf Zd0d1d2d3d4d5d6d7d7 jb8 9 ! # $ kb8d9degfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgygzg9b!b#b% ' $b!d#d$dlb%d'dmb(d)d*dAgBgCgDgEgFg+d,d-d.dyb%b/d:d;d'b( =dm ?dHgIg@d(b[dnb]d^d_d`dg {d|d}d~daebecede) ob* + , - . pbeeJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g)b*b+b/ : ,bfegeqbheierbjekele5g6g7g8g9gmeneoepezb-bqerese.b; ten ue#g$gve/bwesbxeyezeAe
1118 return get_swagger_ui_oauth2_redirect_html() 2pVqVrVsVtVuVvVwVxVyVzVAVBVCV
1120 self.add_route( 2a :b;b=b?b@b[b]b^b_bo = p q r s t ? `b{bBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeAbBbCbu v Db|b}bXeYeZe0e1e2e~bacbccctbEbdcecfcFbw h gc4e5ehcGb@ icjckclcb mcncocpcqcrcsctcucx [ y z A B C ] vcwc6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@eHbIbJbD E Kbxcyc[e]e^e_e`e{ezcAcBcCcubLbDcEcFcMbF i Gc}e~eHcNb^ IcJcKcLcc McNcOcPcQcRcScTcUcG _ H I J K L ` VcWcafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfObPbQbM N RbXcYcZc{ 0c1c| 2c3c4cwfxfyfzfAfBf5c6c7c8cvbSb9c!c#cTbO $cj %cDfEf'cUb(c} )c*c+c,cd -c.c/c:c;c=c?c@c[cP ~ Q R S T U ab]c^cFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fVbWbXbV W Yb_c`c{cbb|c}ccb~cadbd1f2f3f4f5f6fcdddedfdwbZbgdhdid0bX jdk kd8f9fld1bmddbndodpdqde rdsdtdudvdwdxdydzdY ebZ 0 1 2 3 fbAdBd!f#f$f%f'f(f)f*f+f,f-f.f/f:f;f=f?f@f[f]f^f_f2b3b4b4 5 5bCdDdEdgbFdGdhbHdIdJd`f{f|f}f~fagKdLdMdNdxb6bOdPdQd7b6 Rdl SdcgdgTd8bUdibVdWdXdYdf Zd0d1d2d3d4d5d6d7d7 jb8 9 ! # $ kb8d9degfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgygzg9b!b#b% ' $b!d#d$dlb%d'dmb(d)d*dAgBgCgDgEgFg+d,d-d.dyb%b/d:d;d'b( =dm ?dHgIg@d(b[dnb]d^d_d`dg {d|d}d~daebecede) ob* + , - . pbeeJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g)b*b+b/ : ,bfegeqbheierbjekele5g6g7g8g9gmeneoepezb-bqerese.b; ten ue#g$gve/bwesbxeyezeAe
1121 self.swagger_ui_oauth2_redirect_url,
1122 swagger_ui_redirect,
1123 include_in_schema=False,
1124 )
1125 if self.openapi_url and self.redoc_url: 2a :b;b=b?b@b[b]b^b_bo = p q r s t ? `b{bBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeAbBbCbu v Db|b}bXeYeZe0e1e2e~bacbccctbEbdcecfcFbw h 3egc4e5ehcGb@ icjckclcb mcncocpcqcrcsctcucx [ y z A B C ] vcwc6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@eHbIbJbD E Kbxcyc[e]e^e_e`e{ezcAcBcCcubLbDcEcFcMbF i |eGc}e~eHcNb^ IcJcKcLcc McNcOcPcQcRcScTcUcG _ H I J K L ` VcWcafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfObPbQbM N RbXcYcZc{ 0c1c| 2c3c4cwfxfyfzfAfBf5c6c7c8cvbSb9c!c#cTbO $cj Cf%cDfEf'cUb(c} )c*c+c,cd -c.c/c:c;c=c?c@c[cP ~ Q R S T U ab]c^cFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fVbWbXbV W Yb_c`c{cbb|c}ccb~cadbd1f2f3f4f5f6fcdddedfdwbZbgdhdid0bX jdk 7fkd8f9fld1bmddbndodpdqde rdsdtdudvdwdxdydzdY ebZ 0 1 2 3 fbAdBd!f#f$f%f'f(f)f*f+f,f-f.f/f:f;f=f?f@f[f]f^f_f2b3b4b4 5 5bCdDdEdgbFdGdhbHdIdJd`f{f|f}f~fagKdLdMdNdxb6bOdPdQd7b6 Rdl bgSdcgdgTd8bUdibVdWdXdYdf Zd0d1d2d3d4d5d6d7d7 jb8 9 ! # $ kb8d9degfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgygzg9b!b#b% ' $b!d#d$dlb%d'dmb(d)d*dAgBgCgDgEgFg+d,d-d.dyb%b/d:d;d'b( =dm Gg?dHgIg@d(b[dnb]d^d_d`dg {d|d}d~daebecede) ob* + , - . pbeeJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g)b*b+b/ : ,bfegeqbheierbjekele5g6g7g8g9gmeneoepezb-bqerese.b; ten !gue#g$gve/bwesbxeyezeAe
1127 async def redoc_html(req: Request) -> HTMLResponse: 2a :b;b=b?b@b[b]b^b_bo = p q r s t ? `b{bBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeAbBbCbu v Db|b}bXeYeZe0e1e2e~bacbccctbEbdcecfcFbw h gc4e5ehcGb@ icjckclcb mcncocpcqcrcsctcucx [ y z A B C ] vcwc6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@eHbIbJbD E Kbxcyc[e]e^e_e`e{ezcAcBcCcubLbDcEcFcMbF i Gc}e~eHcNb^ IcJcKcLcc McNcOcPcQcRcScTcUcG _ H I J K L ` VcWcafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfObPbQbM N RbXcYcZc{ 0c1c| 2c3c4cwfxfyfzfAfBf5c6c7c8cvbSb9c!c#cTbO $cj %cDfEf'cUb(c} )c*c+c,cd -c.c/c:c;c=c?c@c[cP ~ Q R S T U ab]c^cFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fVbWbXbV W Yb_c`c{cbb|c}ccb~cadbd1f2f3f4f5f6fcdddedfdwbZbgdhdid0bX jdk kd8f9fld1bmddbndodpdqde rdsdtdudvdwdxdydzdY ebZ 0 1 2 3 fbAdBd!f#f$f%f'f(f)f*f+f,f-f.f/f:f;f=f?f@f[f]f^f_f2b3b4b4 5 5bCdDdEdgbFdGdhbHdIdJd`f{f|f}f~fagKdLdMdNdxb6bOdPdQd7b6 Rdl SdcgdgTd8bUdibVdWdXdYdf Zd0d1d2d3d4d5d6d7d7 jb8 9 ! # $ kb8d9degfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgygzg9b!b#b% ' $b!d#d$dlb%d'dmb(d)d*dAgBgCgDgEgFg+d,d-d.dyb%b/d:d;d'b( =dm ?dHgIg@d(b[dnb]d^d_d`dg {d|d}d~daebecede) ob* + , - . pbeeJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g)b*b+b/ : ,bfegeqbheierbjekele5g6g7g8g9gmeneoepezb-bqerese.b; ten ue#g$gve/bwesbxeyezeAe
1128 root_path = req.scope.get("root_path", "").rstrip("/") 2bVh cVi dVj eVk fVl gVm hVn
1129 openapi_url = root_path + self.openapi_url 2bVh cVi dVj eVk fVl gVm hVn
1130 return get_redoc_html( 2bVh cVi dVj eVk fVl gVm hVn
1131 openapi_url=openapi_url, title=f"{self.title} - ReDoc"
1132 )
1134 self.add_route(self.redoc_url, redoc_html, include_in_schema=False) 2a :b;b=b?b@b[b]b^b_bo = p q r s t ? `b{bBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeAbBbCbu v Db|b}bXeYeZe0e1e2e~bacbccctbEbdcecfcFbw h gc4e5ehcGb@ icjckclcb mcncocpcqcrcsctcucx [ y z A B C ] vcwc6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@eHbIbJbD E Kbxcyc[e]e^e_e`e{ezcAcBcCcubLbDcEcFcMbF i Gc}e~eHcNb^ IcJcKcLcc McNcOcPcQcRcScTcUcG _ H I J K L ` VcWcafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfObPbQbM N RbXcYcZc{ 0c1c| 2c3c4cwfxfyfzfAfBf5c6c7c8cvbSb9c!c#cTbO $cj %cDfEf'cUb(c} )c*c+c,cd -c.c/c:c;c=c?c@c[cP ~ Q R S T U ab]c^cFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fVbWbXbV W Yb_c`c{cbb|c}ccb~cadbd1f2f3f4f5f6fcdddedfdwbZbgdhdid0bX jdk kd8f9fld1bmddbndodpdqde rdsdtdudvdwdxdydzdY ebZ 0 1 2 3 fbAdBd!f#f$f%f'f(f)f*f+f,f-f.f/f:f;f=f?f@f[f]f^f_f2b3b4b4 5 5bCdDdEdgbFdGdhbHdIdJd`f{f|f}f~fagKdLdMdNdxb6bOdPdQd7b6 Rdl SdcgdgTd8bUdibVdWdXdYdf Zd0d1d2d3d4d5d6d7d7 jb8 9 ! # $ kb8d9degfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgygzg9b!b#b% ' $b!d#d$dlb%d'dmb(d)d*dAgBgCgDgEgFg+d,d-d.dyb%b/d:d;d'b( =dm ?dHgIg@d(b[dnb]d^d_d`dg {d|d}d~daebecede) ob* + , - . pbeeJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g)b*b+b/ : ,bfegeqbheierbjekele5g6g7g8g9gmeneoepezb-bqerese.b; ten ue#g$gve/bwesbxeyezeAe
1136 async def __call__(self, scope: Scope, receive: Receive, send: Send) -> None: 1abcdefg
1137 if self.root_path: 3a uj vj wj DV xj yj zj ;F Aj EV =F ?F Bj si -g .g /g :g Cj FV GV HV @F IV JV KV Dj (i Ej :b ;b [F LV Fj ]F bV :U pV Gj =b ?b MV NV OV PV QV RV SV TV UV VV WV XV YV ZV 0V 1V 2V 3V ^F 4V 5V Hj 6V 7V 8V 9V !V #V $V %V 'V Ij ;g Jj (V Kj _F =g )V *V ti qV @b [b ]b Lj +V ,V -V .V /V :V ;V =V ?V @V [V ]V ^V Mj _V `V {V |V }V ~V aW bW cW dW eW fW gW hW iW jW Nj kW lW mW nW Oj oW pW Pj qW Qj rW sW tW Rj uW vW wW Sj xW yW zW AW BW CW DW EW FW GW HW IW JW KW LW MW NW OW Tj PW QW Uj `F RW SW TW UW Vj VW WW XW YW ZW 0W 1W 2W 3W 4W 5W 6W 7W 8W 9W !W #W $W %W 'W (W Wj )W *W Xj Yj +W ,W Zj 0j -W ^b _b 1j .W /W :W ;W =W ?W @W 2j [W ]W ^W _W `W )i PF 3j {F 4j {W |W ?g *i }W ~W aX bX cX 5j dX eX |F fX gX hX 6j iX 7j }F jX 8j @g 9j kX !j #j lX mX nX oX pX qX rX $j ~F %j o = p q r s t ? 'j aG [g (j bG )j sX *j tX +j cG uX vX wX xX yX zX AX ,j BX CX dG `b {b eG -j DX EX fG .j FX /j GX gG :j hG HX 8i IX ;j iG ]g =j jG ?j kG Ab Bb Cb u v Db @j lG [j JX ]j KX ^j mG _j LX MX NX OX ^g PX QX RX SX TX UX VX WX XX YX ZX 0X 1X 2X 3X 4X 5X 6X 7X 8X 9X !X #X $X %X 'X (X )X *X +X ,X -X .X /X :X ;X =X ?X @X [X ]X ^X _X `X {X |X }X ~X aY bY cY dY eY fY gY hY iY jY kY lY mY nY oY pY qY rY sY tY uY vY wY xY yY zY AY nG `j BY CY DY EY FY GY HY {j IY JY oG KY |j LY MY NY OY PY QY RY SY TY UY VY pG WY XY qG YY ZY 0Y 1Y 2Y 3Y }j 4Y 5Y 6Y 7Y 8Y 9Y !Y #Y $Y %Y 'Y (Y )Y *Y +Y ,Y rG ~j -Y .Y /Y :Y ;Y =Y ?Y @Y [Y ]Y ^Y sG _Y `Y {Y |Y ak }Y ~Y aZ bZ cZ dZ eZ fZ gZ hZ iZ jZ kZ lZ mZ nZ oZ pZ qZ rZ sZ tZ uZ vZ wZ xZ yZ zZ AZ BZ CZ DZ EZ FZ GZ HZ IZ JZ KZ LZ MZ NZ OZ PZ QZ bk RZ |b }b ck SZ _g dk tG ek uG `g TZ UZ VZ WZ fk XZ YZ ZZ 0Z 1Z gk 2Z 3Z vG hk 4Z 5Z 6Z 7Z 8Z 9Z !Z #Z ik {g jk wG $Z %Z 'Z (Z )Z *Z +Z ,Z -Z .Z /Z :Z ;Z kk xG =Z ?Z @Z [Z ]Z ^Z _Z `Z {Z |Z }Z ~Z a0 b0 c0 d0 e0 f0 g0 h0 i0 j0 k0 lk l0 m0 mk n0 nk o0 p0 q0 r0 s0 ok t0 yG pk ~b qk u0 v0 w0 x0 ac bc cc tb Eb dc rk ec fc Fb w sk |g zG tk y0 AG uk z0 BG vk A0 CG wk B0 DG xk C0 EG yk D0 FG zk E0 GG Ak F0 HG Bk G0 IG Ck H0 JG Dk I0 KG Ek J0 LG Fk K0 L0 M0 MG Gk N0 O0 P0 NG Hk Q0 R0 S0 OG Ik T0 U0 PG Jk V0 W0 QG Kk X0 Y0 RG Lk Z0 00 SG Mk 10 20 TG Nk 30 40 UG Ok 50 60 70 80 90 !0 #0 Pk VG $0 %0 Qk WG '0 XG Rk (0 )0 *0 +0 ,0 -0 YG Sk .0 /0 :0 ;0 =0 ?0 @0 Tk ZG [0 ]0 Uk 0G ^0 1G Vk _0 `0 2G Wk {0 |0 3G Xk }0 ~0 Yk Zk 0k a1 1k b1 c1 d1 e1 f1 g1 2k h1 i1 j1 3k k1 l1 m1 n1 o1 4k p1 q1 r1 s1 5k t1 u1 v1 w1 x1 4G y1 6k z1 A1 7k 5G B1 ui 8k C1 6G D1 9k 7G E1 F1 G1 H1 8G !k I1 9G #k J1 !G $k K1 #G %k L1 M1 'k (k )k *k N1 +k O1 $G ,k -k .k !F P1 /k +i QF ,i RF -i *F Q1 R1 S1 T1 U1 V1 W1 X1 Y1 Z1 01 %G 11 21 31 41 51 61 71 81 91 !1 :k #1 $1 ;k %1 '1 (1 'G )1 *1 +1 ,1 -1 .1 /1 :1 ;1 =1 ?1 @1 =k [1 (G )G ?k ]1 ^1 _1 *G `1 {1 @k +G [k |1 ]k ,G -G }1 h 3e gc ~1 vi a2 wi b2 xi ^k c2 d2 e2 .G _k f2 g2 h2 /G `k :G {k i2 j2 k2 l2 m2 n2 o2 p2 |k q2 }k r2 ~k s2 al ;G bl =G cl ?G dl @G el [G ]G fl ^G gl hl il jl kl ll _G t2 ml nl `G u2 {G |G ol pl }G ql ~G v2 w2 rl x2 aH y2 sl z2 A2 B2 tl C2 D2 ul E2 F2 vl G2 H2 I2 J2 wl K2 L2 M2 bH xl cH yl dH zl eH Al _U Bl fH Cl N2 gH Dl hH El iH Fl jH O2 kH Gl P2 Hl Q2 lH Il R2 mH Jl S2 nH T2 U2 Kl oH pH V2 Ll W2 X2 Ml qH Nl Y2 Z2 02 rH Ol 12 22 32 sH Pl 42 52 62 72 tH Ql uH Rl vH Sl wH Tl xH Ul yH zH Vl Wl AH Xl BH Yl CH Zl DH 0l EH FH GH 1l 2l HH IH 3l JH 4l 82 92 KH 5l !2 #2 6l $2 LH MH NH 7l OH 8l 9l PH %2 !l '2 (2 )2 QH #l RH $l SH %l TH UH 'l *2 +2 ,2 VH (l -2 .2 /2 )l :2 WH *l ;2 XH YH =2 ?2 +l @2 ,l ZH [2 -l ]2 0H .l 1H ^2 /l _2 2H `2 {2 |2 :l 3H 4H }2 ~2 ;l a3 b3 5H c3 =l d3 e3 6H ?l f3 g3 7H h3 i3 @l j3 k3 8H [l l3 9H ]l m3 n3 o3 p3 !H q3 ^l r3 s3 t3 u3 #H v3 _l w3 x3 y3 z3 $H `l A3 B3 C3 D3 %H E3 F3 G3 {l H3 |l }l ~l am bm 'H cm (H dm em I3 )H fm *H gm J3 +H hm ,H -H im K3 .H jm L3 /H km :H lm ;H mm =H nm M3 om ?H N3 O3 P3 Q3 pm R3 S3 T3 @H U3 V3 W3 qm X3 Y3 Z3 [H 03 13 23 33 43 53 63 73 83 ]H rm 93 !3 #3 sm ^H $3 tm _H %3 um vm '3 `H (3 {H )3 }g %g *3 hc +3 |H wm ,3 }H -3 .3 Gb /3 :3 xm ;3 =3 ?3 @3 [3 ym ]3 zm ^3 _3 `3 {3 |3 Am }3 ~3 Bm ~H a4 Cm @ b4 c4 aI d4 Dm bI Em e4 f4 Fm g4 h4 i4 j4 k4 Gm l4 Hm ~g ic Im m4 n4 Jm jc kc lc o4 p4 q4 r4 s4 t4 u4 v4 b Km Lm Mm w4 Nm Om Pm cI Qm x4 dI eI Rm yi ah bh ch dh Sm y4 z4 A4 fI B4 C4 D4 Tm .i Um mc nc gI E4 Vm hI cV ;U rV Wm oc pc F4 G4 H4 I4 J4 K4 L4 M4 N4 O4 P4 Q4 R4 S4 T4 U4 V4 W4 iI X4 Y4 Xm Z4 04 14 24 34 44 54 64 74 Ym eh Zm 84 0m jI fh 94 !4 zi sV qc rc sc 1m #4 $4 %4 '4 (4 )4 *4 +4 ,4 -4 .4 /4 :4 2m ;4 =4 ?4 @4 [4 ]4 ^4 _4 `4 {4 |4 }4 ~4 a5 b5 c5 3m d5 e5 f5 g5 4m h5 i5 5m j5 6m k5 l5 m5 7m n5 o5 p5 8m q5 r5 s5 t5 u5 v5 w5 x5 y5 z5 A5 B5 C5 D5 E5 F5 G5 H5 9m I5 J5 !m kI K5 L5 M5 N5 #m O5 P5 Q5 R5 S5 T5 U5 V5 W5 X5 Y5 Z5 05 15 25 35 45 55 65 75 85 $m 95 !5 %m 'm #5 $5 (m )m %5 tc uc *m '5 (5 )5 *5 +5 ,5 -5 +m .5 /5 :5 ;5 =5 /i SF ,m lI -m ?5 @5 gh :i [5 ]5 ^5 _5 `5 .m {5 |5 mI }5 ~5 a6 /m b6 :m nI c6 ;m hh =m d6 ?m @m e6 f6 g6 h6 i6 j6 k6 [m oI ]m x [ y z A B C ] ^m pI ih _m qI `m l6 {m m6 |m rI n6 o6 p6 q6 r6 s6 t6 }m u6 v6 sI vc wc tI ~m w6 x6 uI an y6 bn z6 vI cn wI A6 9i B6 dn xI jh en yI fn zI Hb Ib Jb D E Kb gn AI hn C6 in D6 jn BI kn E6 F6 G6 H6 kh I6 J6 K6 L6 M6 N6 O6 P6 Q6 R6 S6 T6 U6 V6 W6 X6 Y6 Z6 06 16 26 36 46 56 66 76 86 96 !6 #6 $6 %6 '6 (6 )6 *6 +6 ,6 -6 .6 /6 :6 ;6 =6 ?6 @6 [6 ]6 ^6 _6 `6 {6 |6 }6 ~6 a7 b7 c7 d7 e7 f7 g7 h7 i7 j7 k7 l7 m7 n7 o7 p7 q7 r7 s7 t7 CI ln u7 v7 w7 x7 y7 z7 A7 mn B7 C7 DI D7 nn E7 F7 G7 H7 I7 J7 K7 L7 M7 N7 O7 EI P7 Q7 FI R7 S7 T7 U7 V7 W7 on X7 Y7 Z7 07 17 27 37 47 57 67 77 87 97 !7 #7 $7 GI pn %7 '7 (7 )7 *7 +7 ,7 -7 .7 /7 :7 HI ;7 =7 ?7 @7 qn [7 ]7 ^7 _7 `7 {7 |7 }7 ~7 a8 b8 c8 d8 e8 f8 g8 h8 i8 j8 k8 l8 m8 n8 o8 p8 q8 r8 s8 t8 u8 v8 w8 x8 y8 z8 A8 B8 C8 D8 E8 F8 G8 H8 I8 J8 rn K8 xc yc sn L8 lh tn II un JI mh M8 N8 O8 P8 vn Q8 R8 S8 T8 U8 wn V8 W8 KI xn X8 Y8 Z8 08 18 28 38 48 yn nh zn LI 58 68 78 88 98 !8 #8 $8 %8 '8 (8 )8 *8 An MI +8 ,8 -8 .8 /8 :8 ;8 =8 ?8 @8 [8 ]8 ^8 _8 `8 {8 |8 }8 ~8 a9 b9 c9 d9 Bn e9 f9 Cn g9 Dn h9 i9 j9 k9 l9 En m9 NI Fn zc Gn n9 o9 p9 q9 Ac Bc Cc ub Lb Dc Hn Ec Fc Mb F In oh OI Jn r9 PI Kn s9 QI Ln t9 RI Mn u9 SI Nn v9 TI On w9 UI Pn x9 VI Qn y9 WI Rn z9 XI Sn A9 YI Tn B9 ZI Un C9 0I Vn D9 E9 F9 1I Wn G9 H9 I9 2I Xn J9 K9 L9 3I Yn M9 N9 4I Zn O9 P9 5I 0n Q9 R9 6I 1n S9 T9 7I 2n U9 V9 8I 3n W9 X9 9I 4n Y9 Z9 09 19 29 39 49 5n !I 59 69 6n #I 79 $I 7n 89 99 !9 #9 $9 %9 %I 8n '9 (9 )9 *9 +9 ,9 -9 9n 'I .9 /9 !n (I :9 )I #n ;9 =9 *I $n ?9 @9 +I %n [9 ]9 'n (n )n ^9 *n _9 `9 {9 |9 }9 ~9 +n a! b! c! ,n d! e! f! g! h! -n i! j! k! l! .n m! n! o! p! q! ,I r! /n s! t! :n -I u! Ai ;n v! .I w! =n /I x! y! z! A! :I ?n B! ;I @n C! =I [n D! ?I ]n E! F! ^n _n `n {n G! |n H! @I }n ~n ao #F I! bo ;i TF =i UF ?i +F J! K! L! M! N! O! P! Q! R! S! T! [I U! V! W! X! Y! Z! 0! 1! 2! 3! co 4! 5! do 6! 7! 8! ]I 9! !! #! $! %! '! (! )! *! +! ,! -! eo .! ^I _I fo /! :! ;! `I =! ?! go {I ho @! io |I }I [! i |e Gc ]! Bi ^! Ci _! Di jo `! {! |! ~I ko }! ~! a# aJ lo bJ mo b# c# d# e# f# g# h# i# no j# oo k# po l# qo cJ ro dJ so eJ to fJ uo gJ hJ vo iJ wo xo yo zo Ao Bo jJ m# Co Do kJ n# lJ mJ Eo Fo nJ Go oJ o# p# Ho q# pJ r# Io s# t# u# Jo v# w# Ko x# y# Lo z# A# B# C# Mo D# E# F# qJ No rJ Oo sJ Po tJ Qo `U Ro uJ So G# vJ To wJ Uo xJ Vo yJ H# zJ Wo I# Xo J# AJ Yo K# BJ Zo L# CJ M# N# 0o DJ EJ O# 1o P# Q# 2o FJ 3o R# S# T# GJ 4o U# V# W# HJ 5o X# Y# Z# 0# IJ 6o JJ 7o KJ 8o LJ 9o MJ !o NJ OJ #o $o PJ %o QJ 'o RJ (o SJ )o TJ UJ VJ *o +o WJ XJ ,o YJ -o 1# 2# ZJ .o 3# 4# /o 5# 0J 1J 2J :o 3J ;o =o 4J 6# ?o 7# 8# 9# 5J @o 6J [o 7J ]o 8J 9J ^o !# ## $# !J _o %# '# (# `o )# #J {o *# $J %J +# ,# |o -# }o 'J .# ~o /# (J ap )J :# bp ;# *J =# ?# @# cp +J ,J [# ]# dp ^# _# -J `# ep {# |# .J fp }# ~# /J a$ b$ gp c$ d$ :J hp e$ ;J ip f$ g$ h$ i$ =J j$ jp k$ l$ m$ n$ ?J o$ kp p$ q$ r$ s$ @J lp t$ u$ v$ w$ [J x$ y$ z$ mp A$ np op pp qp rp ]J sp ^J tp up B$ _J vp `J wp C$ {J xp |J }J yp D$ ~J zp E$ aK Ap bK Bp cK Cp dK Dp F$ Ep eK G$ H$ I$ J$ Fp K$ L$ M$ fK N$ O$ P$ Gp Q$ R$ S$ gK T$ U$ V$ W$ X$ Y$ Z$ 0$ 1$ hK Hp 2$ 3$ 4$ Ip iK 5$ Jp jK 6$ Kp Lp 7$ kK 8$ lK 9$ ph 'g !$ Hc #$ mK Mp $$ nK %$ '$ Nb ($ )$ Np *$ +$ ,$ -$ .$ Op /$ Pp :$ ;$ =$ ?$ @$ Qp [$ Rp ]$ ^$ Sp oK _$ Tp ^ `$ {$ pK |$ Up qK Vp }$ ~$ Wp a% b% c% d% e% Xp f% Yp qh Ic Zp g% h% 0p Jc Kc Lc i% j% k% l% m% n% o% p% c 1p 2p 3p q% 4p 5p 6p rK 7p r% sK tK 8p Ei rh sh th uh 9p s% t% u% uK v% w% x% !p @i #p Mc Nc vK y% $p wK dV =U tV %p Oc Pc z% A% B% C% D% E% F% G% H% I% J% K% L% M% N% O% P% Q% xK R% S% 'p T% U% V% W% X% Y% Z% 0% 1% (p vh )p 2% *p yK wh 3% 4% Fi uV Qc Rc Sc +p 5% 6% 7% 8% 9% !% #% $% %% '% (% )% *% ,p +% ,% -% .% /% :% ;% =% ?% @% [% ]% ^% _% `% {% -p |% }% ~% a' .p b' c' /p d' :p e' f' g' ;p h' i' j' =p k' l' m' n' o' p' q' r' s' t' u' v' w' x' y' z' A' B' ?p C' D' @p zK E' F' G' H' [p I' J' K' L' M' N' O' P' Q' R' S' T' U' V' W' X' Y' Z' 0' 1' 2' ]p 3' 4' ^p _p 5' 6' `p {p 7' Tc Uc |p 8' 9' !' #' $' %' '' }p (' )' *' +' ,' [i VF ~p AK aq -' .' xh ]i /' :' ;' =' ?' bq @' [' BK ]' ^' _' cq `' dq CK {' eq yh fq |' gq hq }' ~' a( b( c( d( e( iq DK jq G _ H I J K L ` kq EK zh lq FK mq f( nq g( oq GK h( i( j( k( l( m( n( pq o( p( HK Vc Wc IK qq q( r( JK rq s( sq t( KK tq LK u( !i v( uq MK Ah vq NK wq OK Ob Pb Qb M N Rb xq PK yq w( zq x( Aq QK Bq y( z( A( B( Bh C( D( E( F( G( H( I( J( K( L( M( N( O( P( Q( R( S( T( U( V( W( X( Y( Z( 0( 1( 2( 3( 4( 5( 6( 7( 8( 9( !( #( $( %( '( (( )( *( +( ,( -( .( /( :( ;( =( ?( @( [( ]( ^( _( `( {( |( }( ~( a) b) c) d) e) f) g) h) i) j) k) l) m) n) RK Cq o) p) q) r) s) t) u) Dq v) w) SK x) Eq y) z) A) B) C) D) E) F) G) H) I) TK J) K) UK L) M) N) O) P) Q) Fq R) S) T) U) V) W) X) Y) Z) 0) 1) 2) 3) 4) 5) 6) VK Gq 7) 8) 9) !) #) $) %) ') () )) *) WK +) ,) -) .) Hq /) :) ;) =) ?) @) [) ]) ^) _) `) {) |) }) ~) a* b* c* d* e* f* g* h* i* j* k* l* m* n* o* p* q* r* s* t* u* v* w* x* y* z* A* B* C* D* Iq E* Xc Yc Zc { 0c 1c | 2c 3c 4c Jq F* Ch Kq XK Lq YK Dh G* H* I* J* Mq K* L* M* N* O* Nq P* Q* ZK Oq R* S* T* U* V* W* X* Y* Pq Eh Qq 0K Z* 0* 1* 2* 3* 4* 5* 6* 7* 8* 9* !* #* Rq 1K $* %* '* (* )* ** +* ,* -* .* /* :* ;* =* ?* @* [* ]* ^* _* `* {* |* Sq }* ~* Tq a+ Uq b+ c+ d+ e+ f+ Vq g+ 2K Wq 5c Xq h+ i+ j+ k+ 6c 7c 8c vb Sb 9c Yq !c #c Zq Fh Tb O 0q Gh 3K 1q l+ 4K 2q m+ 5K 3q n+ 6K 4q o+ 7K 5q p+ 8K 6q q+ 9K 7q r+ !K 8q s+ #K 9q t+ $K !q u+ %K #q v+ 'K $q w+ (K %q x+ y+ z+ )K 'q A+ B+ C+ *K (q D+ E+ F+ +K )q G+ H+ ,K *q I+ J+ -K +q K+ L+ .K ,q M+ N+ /K -q O+ P+ :K .q Q+ R+ ;K /q S+ T+ U+ V+ W+ X+ Y+ :q =K Z+ 0+ ;q ?K 1+ @K =q 2+ 3+ 4+ 5+ 6+ 7+ [K ?q 8+ 9+ !+ #+ $+ %+ '+ @q ]K (+ )+ [q ^K *+ _K ]q ++ ,+ `K ^q -+ .+ {K _q /+ :+ `q {q |q ;+ }q =+ ?+ @+ [+ ]+ ^+ ~q _+ `+ {+ ar |+ }+ ~+ a, b, br c, d, e, f, cr g, h, i, j, k, |K l, dr m, n, $c er }K o, Gi fr p, ~K q, gr aL r, s, t, u, bL hr v, cL ir w, dL jr x, eL kr y, z, lr mr nr or A, pr B, fL qr rr sr $F C, tr ^i WF _i XF `i ,F D, E, F, G, H, I, J, K, L, M, N, gL O, P, Q, R, S, T, U, V, W, X, ur Y, Z, vr 0, 1, 2, hL 3, 4, 5, 6, 7, 8, 9, !, #, $, %, ', wr (, iL jL xr ), *, +, kL ,, -, yr lL zr ., Ar mL nL /, j Cf %c :, Hi ;, Ii =, Ji Br ?, @, [, oL Cr ], ^, _, pL Dr qL Er `, {, |, }, ~, a- b- c- Fr d- Gr e- Hr f- Ir rL Jr sL Kr tL Lr uL Mr vL wL Nr xL Or Pr Qr Rr Sr Tr yL g- Ur Vr zL h- AL BL Wr Xr CL Yr DL i- j- Zr k- EL l- 0r m- n- o- 1r p- q- 2r r- s- 3r t- u- v- w- 4r x- y- z- FL 5r GL 6r HL 7r IL 8r {U 9r JL !r A- KL #r LL $r ML %r NL B- OL 'r C- (r D- PL )r E- QL *r F- RL G- H- +r SL TL I- ,r J- K- -r UL .r L- M- N- VL /r O- P- Q- WL :r R- S- T- U- XL ;r YL =r ZL ?r 0L @r 1L [r 2L 3L ]r ^r 4L _r 5L `r 6L {r 7L |r 8L 9L !L }r ~r #L $L as %L bs V- W- 'L cs X- Y- ds Z- (L )L *L es +L fs gs ,L 0- hs 1- 2- 3- -L is .L js /L ks :L ;L ls 4- 5- 6- =L ms 7- 8- 9- ns !- ?L os #- @L [L $- %- ps '- qs ]L (- rs )- ^L ss _L *- ts +- `L ,- -- .- us {L |L /- :- vs ;- =- }L ?- ws @- [- ~L xs ]- ^- aM _- `- ys {- |- bM zs }- cM As ~- a. b. c. dM d. Bs e. f. g. h. eM i. Cs j. k. l. m. fM Ds n. o. p. q. gM r. s. t. Es u. Fs Gs Hs Is Js hM Ks iM Ls Ms v. jM Ns kM Os w. lM Ps mM nM Qs x. oM Rs y. pM Ss qM Ts rM Us sM Vs z. Ws tM A. B. C. D. Xs E. F. G. uM H. I. J. Ys K. L. M. vM N. O. P. Q. R. S. T. U. V. wM Zs W. X. Y. 0s xM Z. 1s yM 0. 2s 3s 1. zM 2. AM 3. Hh (g 4. 'c 5. BM 4s 6. CM 7. 8. Ub 9. !. 5s #. $. %. '. (. 6s ). 7s *. +. ,. -. .. 8s /. 9s :. ;. !s (c DM =. #s } ?. @. EM [. $s FM %s ]. ^. 's _. `. {. |. }. (s ~. )s Ih )c *s a/ b/ +s *c +c ,c c/ d/ e/ f/ g/ h/ i/ j/ d ,s -s .s k/ /s :s ;s GM =s l/ HM IM ?s Ki Jh Kh Lh Mh @s m/ n/ o/ JM p/ q/ r/ [s {i ]s -c .c KM s/ ^s LM eV ?U vV _s /c :c t/ u/ v/ w/ x/ y/ z/ A/ B/ C/ D/ E/ F/ G/ H/ I/ J/ K/ MM L/ M/ `s N/ O/ P/ Q/ R/ S/ T/ U/ V/ {s Nh |s W/ }s NM Oh X/ Y/ Li wV ;c =c ?c ~s Z/ 0/ 1/ 2/ 3/ 4/ 5/ 6/ 7/ 8/ 9/ !/ #/ at $/ %/ '/ (/ )/ */ +/ ,/ -/ ./ // :/ ;/ =/ ?/ @/ bt [/ ]/ ^/ _/ ct `/ {/ dt |/ et }/ ~/ a: ft b: c: d: gt e: f: g: h: i: j: k: l: m: n: o: p: q: r: s: t: u: v: ht w: x: it OM y: z: A: B: jt C: D: E: F: G: H: I: J: K: L: M: N: O: P: Q: R: S: T: U: V: W: kt X: Y: lt mt Z: 0: nt ot 1: @c [c pt 2: 3: 4: 5: 6: 7: 8: qt 9: !: #: $: %: |i YF rt PM st ': (: Ph }i ): *: +: ,: -: tt .: /: QM :: ;: =: ut ?: vt RM @: wt Qh xt [: yt zt ]: ^: _: `: {: |: }: At SM Bt P ~ Q R S T U ab Ct TM Rh Dt UM Et ~: Ft a; Gt VM b; c; d; e; f; g; h; Ht i; j; WM ]c ^c XM It k; l; YM Jt m; Kt n; ZM Lt 0M o; #i p; Mt 1M Sh Nt 2M Ot 3M Vb Wb Xb V W Yb Pt 4M Qt q; Rt r; St 5M Tt s; t; u; v; Th w; x; y; z; A; B; C; D; E; F; G; H; I; J; K; L; M; N; O; P; Q; R; S; T; U; V; W; X; Y; Z; 0; 1; 2; 3; 4; 5; 6; 7; 8; 9; !; #; $; %; '; (; ); *; +; ,; -; .; /; :; ;; =; ?; @; [; ]; ^; _; `; {; |; }; ~; a= b= c= d= e= f= g= h= 6M Ut i= j= k= l= m= n= o= Vt p= q= 7M r= Wt s= t= u= v= w= x= y= z= A= B= C= 8M D= E= 9M F= G= H= I= J= K= Xt L= M= N= O= P= Q= R= S= T= U= V= W= X= Y= Z= 0= !M Yt 1= 2= 3= 4= 5= 6= 7= 8= 9= != #= #M $= %= '= (= Zt )= *= += ,= -= .= /= := ;= == ?= @= [= ]= ^= _= `= {= |= }= ~= a? b? c? d? e? f? g? h? i? j? k? l? m? n? o? p? q? r? s? t? u? v? w? x? 0t y? _c `c {c bb |c }c cb ~c ad bd 1t z? Uh 2t $M 3t %M Vh A? B? C? D? 4t E? F? G? H? I? 5t J? K? 'M 6t L? M? N? O? P? Q? R? S? 7t Wh 8t (M T? U? V? W? X? Y? Z? 0? 1? 2? 3? 4? 5? 9t )M 6? 7? 8? 9? !? #? $? %? '? (? )? *? +? ,? -? .? /? :? ;? =? ?? @? [? !t ]? ^? #t _? $t `? {? |? }? ~? %t a@ *M 't cd (t b@ c@ d@ e@ dd ed fd wb Zb gd )t hd id *t Xh 0b X +t Yh +M ,t f@ ,M -t g@ -M .t h@ .M /t i@ /M :t j@ :M ;t k@ ;M =t l@ =M ?t m@ ?M @t n@ @M [t o@ [M ]t p@ ]M ^t q@ ^M _t r@ s@ t@ _M `t u@ v@ w@ `M {t x@ y@ z@ {M |t A@ B@ |M }t C@ D@ }M ~t E@ F@ ~M au G@ H@ aN bu I@ J@ bN cu K@ L@ cN du M@ N@ O@ P@ Q@ R@ S@ eu dN T@ U@ fu eN V@ fN gu W@ X@ Y@ Z@ 0@ 1@ gN hu 2@ 3@ 4@ 5@ 6@ 7@ 8@ iu hN 9@ !@ ju iN #@ jN ku $@ %@ kN lu '@ (@ lN mu )@ *@ nu ou pu +@ qu ,@ -@ .@ /@ :@ ;@ ru =@ ?@ @@ su [@ ]@ ^@ _@ `@ tu {@ |@ }@ ~@ uu a[ b[ c[ d[ e[ mN f[ vu g[ h[ jd wu nN i[ Mi xu j[ oN k[ yu pN l[ m[ n[ o[ qN zu p[ rN Au q[ sN Bu r[ tN Cu s[ t[ Du Eu Fu Gu u[ Hu v[ uN Iu Ju Ku %F w[ Lu ~i ZF aj 0F bj -F x[ y[ z[ A[ B[ C[ D[ E[ F[ G[ H[ vN I[ J[ K[ L[ M[ N[ O[ P[ Q[ R[ Mu S[ T[ Nu U[ V[ W[ wN X[ Y[ Z[ 0[ 1[ 2[ 3[ 4[ 5[ 6[ 7[ 8[ Ou 9[ xN yN Pu ![ #[ $[ zN %[ '[ Qu AN Ru ([ Su BN CN )[ k 7f kd *[ Ni +[ Oi ,[ Pi Tu -[ .[ /[ DN Uu :[ ;[ =[ EN Vu FN Wu ?[ @[ [[ ][ ^[ _[ `[ {[ Xu |[ Yu }[ Zu ~[ 0u GN 1u HN 2u IN 3u JN 4u KN LN 5u MN 6u 7u 8u 9u !u #u NN a] $u %u ON b] PN QN 'u (u RN )u SN c] d] *u e] TN f] +u g] h] i] ,u j] k] -u l] m] .u n] o] p] q] /u r] s] t] UN :u VN ;u WN =u XN ?u |U @u YN [u u] ZN ]u 0N ^u 1N _u 2N v] 3N `u w] {u x] 4N |u y] 5N }u z] 6N A] B] ~u 7N 8N C] av D] E] bv 9N cv F] G] H] !N dv I] J] K] #N ev L] M] N] O] $N fv %N gv 'N hv (N iv )N jv *N +N kv lv ,N mv -N nv .N ov /N pv :N ;N =N qv rv ?N @N sv [N tv P] Q] ]N uv R] S] vv T] ^N _N `N wv {N xv yv |N U] zv V] W] X] }N Av ~N Bv aO Cv bO cO Dv Y] Z] 0] dO Ev 1] 2] 3] Fv 4] eO Gv 5] fO gO 6] 7] Hv 8] Iv hO 9] Jv !] iO Kv jO #] Lv $] kO %] '] (] Mv lO mO )] *] Nv +] ,] nO -] Ov .] /] oO Pv :] ;] pO =] ?] Qv @] [] qO Rv ]] rO Sv ^] _] `] {] sO |] Tv }] ~] a^ b^ tO c^ Uv d^ e^ f^ g^ uO Vv h^ i^ j^ k^ vO l^ m^ n^ Wv o^ Xv Yv Zv 0v 1v wO 2v xO 3v 4v p^ yO 5v zO 6v q^ AO 7v BO CO 8v r^ DO 9v s^ EO !v FO #v GO $v HO %v t^ 'v IO u^ v^ w^ x^ (v y^ z^ A^ JO B^ C^ D^ )v E^ F^ G^ KO H^ I^ J^ K^ L^ M^ N^ O^ P^ LO *v Q^ R^ S^ +v MO T^ ,v NO U^ -v .v V^ OO W^ PO X^ Zh )g Y^ ld Z^ QO /v 0^ RO 1^ 2^ 1b 3^ 4^ :v 5^ 6^ 7^ 8^ 9^ ;v !^ =v #^ $^ %^ '^ (^ ?v )^ @v *^ +^ [v md SO ,^ ]v db -^ .^ TO /^ ^v UO _v :^ ;^ `v =^ ?^ @^ [^ ]^ {v ^^ |v 0h nd }v _^ `^ ~v od pd qd {^ |^ }^ ~^ a_ b_ c_ d_ e aw bw cw e_ dw ew fw VO gw f_ WO XO hw Qi 1h 2h 3h 4h iw g_ h_ i_ YO j_ k_ l_ jw cj kw rd sd ZO m_ lw 0O fV @U xV mw td ud n_ o_ p_ q_ r_ s_ t_ u_ v_ w_ x_ y_ z_ A_ B_ C_ D_ E_ 1O F_ G_ nw H_ I_ J_ K_ L_ M_ N_ O_ P_ ow 5h pw Q_ qw 2O 6h R_ S_ Ri yV vd wd xd rw T_ U_ V_ W_ X_ Y_ Z_ 0_ 1_ 2_ 3_ 4_ 5_ sw 6_ 7_ 8_ 9_ !_ #_ $_ %_ '_ (_ )_ *_ +_ ,_ -_ ._ tw /_ :_ ;_ =_ uw ?_ @_ vw [_ ww ]_ ^_ __ xw `_ {_ |_ yw }_ ~_ a` b` c` d` e` f` g` h` i` j` k` l` m` n` o` p` zw q` r` Aw 3O s` t` u` v` Bw w` x` y` z` A` B` C` D` E` F` G` H` I` J` K` L` M` N` O` P` Q` Cw R` S` Dw Ew T` U` Fw Gw V` yd zd Hw W` X` Y` Z` 0` 1` 2` Iw 3` 4` 5` 6` 7` dj 1F Jw 4O Kw 8` 9` 7h ej !` #` $` %` '` Lw (` )` 5O *` +` ,` Mw -` Nw 6O .` Ow 8h Pw /` Qw Rw :` ;` =` ?` @` [` ]` Sw 7O Tw Y eb Z 0 1 2 3 fb Uw 8O 9h Vw 9O Ww ^` Xw _` Yw !O `` {` |` }` ~` a{ b{ Zw c{ d{ #O Ad Bd $O 0w e{ f{ %O 1w g{ 2w h{ 'O 3w (O i{ $i j{ 4w )O !h 5w *O 6w +O 2b 3b 4b 4 5 5b 7w ,O 8w k{ 9w l{ !w -O #w m{ n{ o{ p{ #h q{ r{ s{ t{ u{ v{ w{ x{ y{ z{ A{ B{ C{ D{ E{ F{ G{ H{ I{ J{ K{ L{ M{ N{ O{ P{ Q{ R{ S{ T{ U{ V{ W{ X{ Y{ Z{ 0{ 1{ 2{ 3{ 4{ 5{ 6{ 7{ 8{ 9{ !{ #{ ${ %{ '{ ({ ){ *{ +{ ,{ -{ .{ /{ :{ ;{ ={ ?{ @{ [{ ]{ ^{ _{ `{ {{ |{ }{ ~{ a| b| .O $w c| d| e| f| g| h| i| %w j| k| /O l| 'w m| n| o| p| q| r| s| t| u| v| w| :O x| y| ;O z| A| B| C| D| E| (w F| G| H| I| J| K| L| M| N| O| P| Q| R| S| T| U| =O )w V| W| X| Y| Z| 0| 1| 2| 3| 4| 5| ?O 6| 7| 8| 9| *w !| #| $| %| '| (| )| *| +| ,| -| .| /| :| ;| =| ?| @| [| ]| ^| _| `| {| || }| ~| a} b} c} d} e} f} g} h} i} j} k} l} m} n} o} p} q} r} +w s} Cd Dd Ed gb Fd Gd hb Hd Id Jd ,w t} $h -w @O .w [O %h u} v} w} x} /w y} z} A} B} C} :w D} E} ]O ;w F} G} H} I} J} K} L} M} =w 'h ?w ^O N} O} P} Q} R} S} T} U} V} W} X} Y} Z} @w _O 0} 1} 2} 3} 4} 5} 6} 7} 8} 9} !} #} $} %} '} (} )} *} +} ,} -} .} /} [w :} ;} ]w =} ^w ?} @} [} ]} ^} _w _} `O `w Kd {w `} {} |} }} Ld Md Nd xb 6b Od |w Pd Qd }w (h 7b 6 ~w )h {O ax ~} |O bx a~ }O cx b~ ~O dx c~ aP ex d~ bP fx e~ cP gx f~ dP hx g~ eP ix h~ fP jx i~ gP kx j~ hP lx k~ iP mx l~ m~ n~ jP nx o~ p~ q~ kP ox r~ s~ t~ lP px u~ v~ mP qx w~ x~ nP rx y~ z~ oP sx A~ B~ pP tx C~ D~ qP ux E~ F~ rP vx G~ H~ I~ J~ K~ L~ M~ wx sP N~ O~ xx tP P~ uP yx Q~ R~ S~ T~ U~ V~ vP zx W~ X~ Y~ Z~ 0~ 1~ 2~ Ax wP 3~ 4~ Bx xP 5~ yP Cx 6~ 7~ zP Dx 8~ 9~ AP Ex !~ #~ Fx Gx Hx $~ Ix %~ '~ (~ )~ *~ +~ Jx ,~ -~ .~ Kx /~ :~ ;~ =~ ?~ Lx @~ [~ ]~ ^~ Mx _~ `~ {~ |~ }~ BP ~~ Nx aabbabRd Ox CP cabSi Px dabDP eabQx EP fabgabhabiabFP Rx jabGP Sx kabHP Tx labIP Ux mabnabVx Wx Xx Yx oabZx pabJP 0x 1x 2x 'F qab3x fj 2F gj 3F hj .F rabsabtabuabvabwabxabyabzabAabBabKP CabDabEabFabGabHabIabJabKabLab4x MabNab5x OabPabQabLP RabSabTabUabVabWabXabYabZab0ab1ab2ab6x 3abMP NP 7x 4ab5ab6abOP 7ab8ab8x PP 9x 9ab!x QP RP !abl bg Sd #abTi $abUi %abVi #x 'ab(ab)abSP $x *ab+ab,abTP %x UP 'x -ab.ab/ab:ab;ab=ab?ab@ab(x [ab)x ]ab*x ^ab+x VP ,x WP -x XP .x YP /x ZP 0P :x 1P ;x =x ?x @x [x ]x 2P _ab^x _x 3P `ab4P 5P `x {x 6P |x 7P {ab|ab}x }ab8P ~ab~x abbbbbcbbay dbbebbby fbbgbbcy hbbibbjbbkbbdy lbbmbbnbb9P ey !P fy #P gy $P hy }U iy %P jy obb'P ky (P ly )P my *P pbb+P ny qbboy rbb,P py sbb-P qy tbb.P ubbvbbry /P :P wbbsy xbbybbty ;P uy zbbAbbBbb=P vy CbbDbbEbb?P wy FbbGbbHbbIbb@P xy [P yy ]P zy ^P Ay _P By `P {P Cy Dy |P Ey }P Fy ~P Gy aQ Hy bQ cQ dQ Iy Jy eQ fQ Ky gQ Ly JbbKbbhQ My LbbMbbNy NbbiQ jQ kQ Oy lQ Py Qy mQ ObbRy PbbQbbRbbnQ Sy oQ Ty pQ Uy qQ rQ Vy SbbTbbUbbsQ Wy VbbWbbXbbXy YbbtQ Yy ZbbuQ vQ 0bb1bbZy 2bb0y wQ 3bb1y 4bbxQ 2y yQ 5bb3y 6bbzQ 7bb8bb9bb4y AQ BQ !bb#bb5y $bb%bbCQ 'bb6y (bb)bbDQ 7y *bb+bbEQ ,bb-bb8y .bb/bbFQ 9y :bbGQ !y ;bb=bb?bb@bbHQ [bb#y ]bb^bb_bb`bbIQ {bb$y |bb}bb~bbacbJQ %y bcbccbdcbecbKQ fcbgcbhcb'y icb(y )y *y +y ,y LQ -y MQ .y /y jcbNQ :y OQ ;y kcbPQ =y QQ RQ ?y lcbSQ @y mcbTQ [y UQ ]y VQ ^y WQ _y ncb`y XQ ocbpcbqcbrcb{y scbtcbucbYQ vcbwcbxcb|y ycbzcbAcbZQ BcbCcbDcbEcbFcbGcbHcbIcbJcb0Q }y KcbLcbMcb~y 1Q Ncbaz 2Q Ocbbz cz Pcb3Q Qcb4Q Rcb*h *g ScbTd Tcb5Q dz Ucb6Q VcbWcb8b XcbYcbez Zcb0cb1cb2cb3cbfz 4cbgz 5cb6cb7cb8cb9cbhz !cbiz #cb$cbjz Ud 7Q %cbkz ib 'cb(cb8Q )cblz 9Q mz *cb+cbnz ,cb-cb.cb/cb:cboz ;cbpz +h Vd qz =cb?cbrz Wd Xd Yd @cb[cb]cb^cb_cb`cb{cb|cbf sz tz uz }cbvz wz xz !Q yz ~cb#Q $Q zz Wi ,h -h .h /h Az adbbdbcdb%Q ddbedbfdbBz ij Cz Zd 0d 'Q gdbDz (Q gV [U zV Ez 1d 2d hdbidbjdbkdbldbmdbndbodbpdbqdbrdbsdbtdbudbvdbwdbxdbydb)Q zdbAdbFz BdbCdbDdbEdbFdbGdbHdbIdbJdbGz :h Hz KdbIz *Q ;h LdbMdbXi AV 3d 4d 5d Jz NdbOdbPdbQdbRdbSdbTdbUdbVdbWdbXdbYdbZdbKz 0db1db2db3db4db5db6db7db8db9db!db#db$db%db'db(dbLz )db*db+db,dbMz -db.dbNz /dbOz :db;db=dbPz ?db@db[dbQz ]db^db_db`db{db|db}db~dbaebbebcebdebeebfebgebhebiebjebRz keblebSz +Q mebneboebpebTz qebrebsebtebuebvebwebxebyebzebAebBebCebDebEebFebGebHebIebJebKebUz LebMebVz Wz NebOebXz Yz Peb6d 7d Zz QebRebSebTebUebVebWeb0z XebYebZeb0eb1ebjj 4F 1z ,Q 2z 2eb3eb=h kj 4eb5eb6eb7eb8eb3z 9eb!eb-Q #eb$eb%eb4z 'eb5z .Q (eb6z ?h 7z )eb8z 9z *eb+eb,eb-eb.eb/eb:eb!z /Q #z 7 jb 8 9 ! # $ kb $z :Q @h %z ;Q 'z ;eb(z =eb)z =Q ?eb@eb[eb]eb^eb_eb`eb*z {eb|eb?Q 8d 9d @Q +z }eb~eb[Q ,z afb-z bfb]Q .z ^Q cfb%i dfb/z _Q [h :z `Q ;z {Q 9b !b #b % ' $b =z |Q ?z efb@z ffb[z }Q ]z gfbhfbifbjfb]h kfblfbmfbnfbofbpfbqfbrfbsfbtfbufbvfbwfbxfbyfbzfbAfbBfbCfbDfbEfbFfbGfbHfbIfbJfbKfbLfbMfbNfbOfbPfbQfbRfbSfbTfbUfbVfbWfbXfbYfbZfb0fb1fb2fb3fb4fb5fb6fb7fb8fb9fb!fb#fb$fb%fb'fb(fb)fb*fb+fb,fb-fb.fb/fb:fb;fb=fb?fb@fb[fb]fb^fb_fb`fb~Q ^z {fb|fb}fb~fbagbbgbcgb_z dgbegbaR fgb`z ggbhgbigbjgbkgblgbmgbngbogbpgbqgbbR rgbsgbcR tgbugbvgbwgbxgbygb{z zgbAgbBgbCgbDgbEgbFgbGgbHgbIgbJgbKgbLgbMgbNgbOgbdR |z PgbQgbRgbSgbTgbUgbVgbWgbXgbYgbZgbeR 0gb1gb2gb3gb}z 4gb5gb6gb7gb8gb9gb!gb#gb$gb%gb'gb(gb)gb*gb+gb,gb-gb.gb/gb:gb;gb=gb?gb@gb[gb]gb^gb_gb`gb{gb|gb}gb~gbahbbhbchbdhbehbfhbghbhhbihbjhbkhblhb~z mhb!d #d $d lb %d 'd mb (d )d *d aA nhb^h bA fR cA gR _h ohbphbqhbrhbdA shbthbuhbvhbwhbeA xhbyhbhR fA zhbAhbBhbChbDhbEhbFhbGhbgA `h hA iR HhbIhbJhbKhbLhbMhbNhbOhbPhbQhbRhbShbThbiA jR UhbVhbWhbXhbYhbZhb0hb1hb2hb3hb4hb5hb6hb7hb8hb9hb!hb#hb$hb%hb'hb(hb)hbjA *hb+hbkA ,hblA -hb.hb/hb:hb;hbmA =hbkR nA +d oA ?hb@hb[hb]hb,d -d .d yb %b /d pA :d ;d qA {h 'b ( rA |h lR sA ^hbmR tA _hbnR uA `hboR vA {hbpR wA |hbqR xA }hbrR yA ~hbsR zA aibtR AA bibuR BA cibvR CA dibwR DA eibxR EA fibgibhibyR FA iibjibkibzR GA libmibnibAR HA oibpibBR IA qibribCR JA sibtibDR KA uibvibER LA wibxibFR MA yibzibGR NA AibBibCibDibEibFibGibOA HR HibIibPA IR JibJR QA KibLibMibNibOibPibKR RA QibRibSibTibUibVibWibSA LR XibYibTA MR ZibNR UA 0ib1ibOR VA 2ib3ibPR WA 4ib5ibXA YA ZA 6ib0A 7ib8ib9ib!ib#ib$ib1A %ib'ib(ib2A )ib*ib+ib,ib-ib3A .ib/ib:ib;ib4A =ib?ib@ib[ib]ibQR ^ib5A _ib`ib=d 6A RR {ibYi 7A |ibSR }ib8A TR ~ibajbbjbcjbUR 9A djbVR !A ejbWR #A fjbXR $A gjbhjb%A 'A (A )A ijb*A jjbYR +A ,A -A (F kjb.A lj 5F mj 6F nj /F ljbmjbnjbojbpjbqjbrjbsjbtjbujbvjbZR wjbxjbyjbzjbAjbBjbCjbDjbEjbFjb/A GjbHjb:A IjbJjbKjb0R LjbMjbNjbOjbPjbQjbRjbSjbTjbUjbVjbWjb;A Xjb1R 2R =A YjbZjb0jb3R 1jb2jb?A 4R @A 3jb[A 5R 6R 4jbm Gg ?d 5jbZi 6jb0i 7jb1i ]A 8jb9jb!jb7R ^A #jb$jb%jb8R _A 9R `A 'jb(jb)jb*jb+jb,jb-jb.jb{A /jb|A :jb}A ;jb~A !R aB #R bB $R cB %R dB 'R (R eB )R fB gB hB iB jB kB *R =jblB mB +R ?jb,R -R nB oB .R pB /R @jb[jbqB ]jb:R ^jbrB _jb`jb{jbsB |jb}jbtB ~jbakbuB bkbckbdkbekbvB fkbgkbhkb;R wB =R xB ?R yB @R zB ~U AB [R BB ikb]R CB ^R DB _R EB `R jkb{R FB kkbGB lkb|R HB mkb}R IB nkb~R okbpkbJB aS bS qkbKB rkbskbLB cS MB tkbukbvkbdS NB wkbxkbykbeS OB zkbAkbBkbCkbfS PB gS QB hS RB iS SB jS TB kS lS UB VB mS WB nS XB oS YB pS ZB qS rS sS 0B 1B tS uS 2B vS 3B DkbEkbwS 4B FkbGkb5B HkbxS yS zS 6B AS 7B 8B BS Ikb9B JkbKkbLkbCS !B DS #B ES $B FS GS %B MkbNkbOkbHS 'B PkbQkbRkb(B SkbIS )B TkbJS KS UkbVkb*B Wkb+B LS Xkb,B YkbMS -B NS Zkb.B 0kbOS 1kb2kb3kb/B PS QS 4kb5kb:B 6kb7kbRS 8kb;B 9kb!kbSS =B #kb$kbTS %kb'kb?B (kb)kbUS @B *kbVS [B +kb,kb-kb.kbWS /kb]B :kb;kb=kb?kbXS @kb^B [kb]kb^kb_kbYS _B `kb{kb|kb}kbZS ~kbalbblb`B clb{B |B }B ~B aC 0S bC 1S cC dC dlb2S eC 3S fC elb4S gC 5S 6S hC flb7S iC glb8S jC 9S kC !S lC #S mC hlbnC $S ilbjlbklbllboC mlbnlbolb%S plbqlbrlbpC slbtlbulb'S vlbwlbxlbylbzlbAlbBlbClbDlb(S qC ElbFlbGlbrC )S HlbsC *S IlbtC uC Jlb+S Klb,S Llb}h +g Mlb@d Nlb-S vC Olb.S PlbQlb(b RlbSlbwC TlbUlbVlbWlbXlbxC YlbyC Zlb0lb1lb2lb3lbzC 4lbAC 5lb6lbBC [d /S 7lbCC nb 8lb9lb:S !lbDC ;S EC #lb$lbFC %lb'lb(lb)lb*lbGC +lbHC ~h ]d IC ,lb-lbJC ^d _d `d .lb/lb:lb;lb=lb?lb@lb[lbg KC LC MC ]lbNC OC PC =S QC ^lb?S @S RC 2i ai bi ci di SC _lb`lb{lb[S |lb}lb~lbTC oj UC {d |d ]S ambVC ^S hV ]U BV WC }d ~d XC ei YC bmbZC _S fi cmbdmb3i CV ae be 0C embfmbgmbhmbimbjmbkmblmbmmbnmbombpmbqmb1C rmbsmbtmbumbvmbwmbxmbymbzmbAmbBmbCmbDmbEmbFmbGmb2C HmbImbJmbKmb3C LmbMmb4C Nmb5C OmbPmbQmb6C RmbSmbTmb7C UmbVmbWmbXmbYmbZmb0mb1mb2mb3mb4mb5mb6mb7mb8mb9mb!mb#mb8C $mb%mb9C `S 'mb(mb)mb*mb!C +mb,mb-mb.mb/mb:mb;mb=mb?mb@mb[mb]mb^mb_mb`mb{mb|mb}mb~mbanbbnb#C cnbdnb$C %C enbfnb'C (C gnbce de )C hnbinbjnbknblnbmnbnnb*C onbpnbqnbrnbsnbpj 7F +C {S ,C tnbunbgi qj vnbwnbxnbynbznb-C AnbBnb|S CnbDnbEnb.C Fnb/C hi :C Gnb;C =C HnbInbJnbKnbLnbMnbNnb?C }S @C ) ob * + , - . pb [C ~S ii ]C aT ^C Onb_C Pnb`C bT QnbRnbSnbTnbUnbVnbWnb{C XnbYnbcT ee dT |C Znb0nbeT }C 1nb~C 2nbfT aD gT 3nb'i 4nbbD hT ji cD iT dD jT )b *b +b / : ,b eD kT fD 5nbgD 6nbhD lT iD 7nb8nb9nb!nbki #nb$nb%nb'nb(nb)nb*nb+nb,nb-nb.nb/nb:nb;nb=nb?nb@nb[nb]nb^nb_nb`nb{nb|nb}nb~nbaobbobcobdobeobfobgobhobiobjobkoblobmobnoboobpobqobrobsobtobuobvobwobxobyobzobAobBobCobDobEobFobGobHobIobJobKobLobMobNobOobPobQobRobSobTobUobVobWobmT jD XobYobZob0ob1ob2ob3ob4ob5ob6ob7ob8ob9ob!ob#ob$ob%ob'ob(ob)ob*ob+ob,ob-ob.ob/ob:ob;ob=ob?ob@ob[ob]obkD ^obfe ge qb he ie rb je ke le lD _obli mD nT nD oT mi `ob{ob|ob}oboD ~obapbbpbcpbdpbpD epbfpbpT qD gpbhpbipbjpbkpblpbmpbnpbrD ni sD qT opbppbqpbrpbspbtpbupbvpbwpbxpbypbzpbApbtD rT BpbCpbDpbEpbFpbGpbHpbIpbJpbKpbLpbMpbNpbOpbPpbQpbRpbSpbTpbUpbVpbWpbXpbuD YpbZpbvD 0pbwD 1pb2pb3pb4pb5pbxD 6pbsT yD me zD 7pb8pb9pb!pbne oe pe zb -b qe AD re se BD oi .b ; CD pi tT DD #pbuT ED $pbvT FD %pbwT GD 'pbxT HD (pbyT ID )pbzT JD *pbAT KD +pbBT LD ,pbCT MD -pbDT ND .pbET OD /pbFT PD :pb;pb=pbGT QD ?pb@pb[pbHT RD ]pb^pb_pbIT SD `pb{pbJT TD |pb}pbKT UD ~pbaqbLT VD bqbcqbMT WD dqbeqbNT XD fqbgqbOT YD hqbiqbjqbkqblqbmqbnqbZD PT oqbpqb0D QT qqbRT 1D rqbsqbtqbuqbvqbwqbST 2D xqbyqbzqbAqbBqbCqbDqb3D TT EqbFqb4D UT GqbVT 5D HqbIqbWT 6D JqbKqbXT 7D LqbMqb8D 9D !D Nqb#D OqbPqbQqbRqbSqbTqb$D UqbVqbWqb%D XqbYqbZqb0qb1qb'D 2qb3qb4qb5qb(D 6qb7qb8qb9qb!qbYT #qb)D $qb%qbte *D ZT 'qb4i +D (qb0T )qb,D 1T *qb+qb,qb-qb2T -D .qb3T .D /qb4T /D :qb5T :D ;qb=qb;D =D ?D @D ?qb[D @qb6T ]D ^D _D )F [qb`D rj 8F sj 9F tj :F ]qb^qb_qb`qb{qb|qb}qb~qbarbbrbcrb7T drberbfrbgrbhrbirbjrbkrblrbmrb{D nrborb|D prbqrbrrb8T srbtrburbvrbwrbxrbyrbzrbArbBrbCrbDrb}D Erb9T !T ~D FrbGrbHrb#T IrbJrbaE $T bE KrbcE %T Lrbn !g ue Mrb5i Nrb6i Orb7i dE PrbQrbRrb'T eE SrbTrbUrb(T fE )T gE VrbWrbXrbYrbZrb0rb1rb2rbhE 3rbiE 4rbjE 5rbkE *T lE +T mE ,T nE -T oE .T /T pE :T qE rE sE tE uE vE ;T 6rbwE xE =T 7rb?T yE zE @T AE [T 8rb9rbBE !rb]T #rbCE $rb%rb'rbDE (rb)rbEE *rb+rbFE ,rb-rb.rb/rbGE :rb;rb=rb^T HE _T IE `T JE {T KE aV LE |T ME ?rb}T NE ~T OE aU PE bU @rbcU QE [rbRE ]rbdU SE ^rbeU TE _rbfU `rb{rbUE gU hU |rbVE }rb~rbWE iU XE asbbsbcsbjU YE dsbesbfsbkU ZE gsbhsbisbjsblU 0E mU 1E nU 2E oU 3E pU 4E qU rU 5E 6E sU 7E tU 8E uU 9E vU !E wU xU #E $E yU zU %E AU 'E ksblsb(E msbBU CU )E DU *E +E EU nsb,E osbpsbqsbFU GU -E rsbssbtsbHU .E usbvsbwsb/E xsbIU :E ysbJU KU zsbAsb;E Bsb=E LU Csb?E DsbMU @E NU Esb[E FsbOU GsbHsbIsb]E PU QU JsbKsb^E LsbMsbRU Nsb_E OsbPsbSU `E QsbRsbTU SsbTsb{E UsbVsbUU |E WsbVU }E XsbYsbZsb0sbWU 1sb~E 2sb3sb4sb5sbXU aF 6sb7sb8sb9sbYU !sb#sb$sbbF %sbcF dF eF fF gF ZU hF 0U iF jF 'sb1U kF 2U lF (sb3U mF 4U 5U nF )sb6U oF *sb7U pF 8U qF 9U rF +sbsF !U ,sb-sb.sb/sbtF :sb;sb=sb#U ?sb@sb[sbuF ]sb^sb_sb$U `sb{sb|sb}sb~sbatbbtbctbdtb%U vF etbftbgtbwF 'U htbxF (U itbyF zF jtb)U ktb*U ltbqi ,g mtbve ntb+U AF otb,U ptbqtb/b rtbstbBF ttbutbvtbwtbxtbCF ytbDF ztbAtbBtbCtbDtbEF EtbFF FtbGtbGF we -U HtbHF sb ItbJtb.U KtbIF /U JF LtbMtbKF NtbOtbPtbQtbRtbLF StbMF ri xe NF TtbUtbOF ye ze Ae VtbWtbXtbYtbZtb0tb1tb2tb
1138 scope["root_path"] = self.root_path 2)iPF+iQF,iRF-i*F/iSF;iTF=iUF?i+F[iVF^iWF_iXF`i,F|iYF~iZFaj0Fbj-Fdj1Ffj2Fgj3Fhj.Fjj4Flj5Fmj6Fnj/Fpj7Frj8Fsj9Ftj:F
1139 await super().__call__(scope, receive, send) 3a uj vj wj DV xj yj zj ;F Aj EV =F ?F Bj si -g .g /g :g Cj FV GV HV @F IV JV KV Dj (i Ej :b ;b [F LV Fj ]F bV :U pV Gj =b ?b MV NV OV PV QV RV SV TV UV VV WV XV YV ZV 0V 1V 2V 3V ^F 4V 5V Hj 6V 7V 8V 9V !V #V $V %V 'V Ij ;g Jj (V Kj _F =g )V *V ti qV @b [b ]b Lj +V ,V -V .V /V :V ;V =V ?V @V [V ]V ^V Mj _V `V {V |V }V ~V aW bW cW dW eW fW gW hW iW jW Nj kW lW mW nW Oj oW pW Pj qW Qj rW sW tW Rj uW vW wW Sj xW yW zW AW BW CW DW EW FW GW HW IW JW KW LW MW NW OW Tj PW QW Uj `F RW SW TW UW Vj VW WW XW YW ZW 0W 1W 2W 3W 4W 5W 6W 7W 8W 9W !W #W $W %W 'W (W Wj )W *W Xj Yj +W ,W Zj 0j -W ^b _b 1j .W /W :W ;W =W ?W @W 2j [W ]W ^W _W `W )i PF 3j {F 4j {W |W ?g *i }W ~W aX bX cX 5j dX eX |F fX gX hX 6j iX 7j }F jX 8j @g 9j kX !j #j lX mX nX oX pX qX rX $j ~F %j o = p q r s t ? 'j aG [g (j bG )j sX *j tX +j cG uX vX wX xX yX zX AX ,j BX CX dG `b {b eG -j DX EX fG .j FX /j GX gG :j hG HX 8i IX ;j iG ]g =j jG ?j kG Ab Bb Cb u v Db @j lG [j JX ]j KX ^j mG _j LX MX NX OX ^g PX QX RX SX TX UX VX WX XX YX ZX 0X 1X 2X 3X 4X 5X 6X 7X 8X 9X !X #X $X %X 'X (X )X *X +X ,X -X .X /X :X ;X =X ?X @X [X ]X ^X _X `X {X |X }X ~X aY bY cY dY eY fY gY hY iY jY kY lY mY nY oY pY qY rY sY tY uY vY wY xY yY zY AY nG `j BY CY DY EY FY GY HY {j IY JY oG KY |j LY MY NY OY PY QY RY SY TY UY VY pG WY XY qG YY ZY 0Y 1Y 2Y 3Y }j 4Y 5Y 6Y 7Y 8Y 9Y !Y #Y $Y %Y 'Y (Y )Y *Y +Y ,Y rG ~j -Y .Y /Y :Y ;Y =Y ?Y @Y [Y ]Y ^Y sG _Y `Y {Y |Y ak }Y ~Y aZ bZ cZ dZ eZ fZ gZ hZ iZ jZ kZ lZ mZ nZ oZ pZ qZ rZ sZ tZ uZ vZ wZ xZ yZ zZ AZ BZ CZ DZ EZ FZ GZ HZ IZ JZ KZ LZ MZ NZ OZ PZ QZ bk RZ |b }b ck SZ _g dk tG ek uG `g TZ UZ VZ WZ fk XZ YZ ZZ 0Z 1Z gk 2Z 3Z vG hk 4Z 5Z 6Z 7Z 8Z 9Z !Z #Z ik {g jk wG $Z %Z 'Z (Z )Z *Z +Z ,Z -Z .Z /Z :Z ;Z kk xG =Z ?Z @Z [Z ]Z ^Z _Z `Z {Z |Z }Z ~Z a0 b0 c0 d0 e0 f0 g0 h0 i0 j0 k0 lk l0 m0 mk n0 nk o0 p0 q0 r0 s0 ok t0 yG pk ~b qk u0 v0 w0 x0 ac bc cc tb Eb dc rk ec fc Fb w sk |g zG tk y0 AG uk z0 BG vk A0 CG wk B0 DG xk C0 EG yk D0 FG zk E0 GG Ak F0 HG Bk G0 IG Ck H0 JG Dk I0 KG Ek J0 LG Fk K0 L0 M0 MG Gk N0 O0 P0 NG Hk Q0 R0 S0 OG Ik T0 U0 PG Jk V0 W0 QG Kk X0 Y0 RG Lk Z0 00 SG Mk 10 20 TG Nk 30 40 UG Ok 50 60 70 80 90 !0 #0 Pk VG $0 %0 Qk WG '0 XG Rk (0 )0 *0 +0 ,0 -0 YG Sk .0 /0 :0 ;0 =0 ?0 @0 Tk ZG [0 ]0 Uk 0G ^0 1G Vk _0 `0 2G Wk {0 |0 3G Xk }0 ~0 Yk Zk 0k a1 1k b1 c1 d1 e1 f1 g1 2k h1 i1 j1 3k k1 l1 m1 n1 o1 4k p1 q1 r1 s1 5k t1 u1 v1 w1 x1 4G y1 6k z1 A1 7k 5G B1 ui 8k C1 6G D1 9k 7G E1 F1 G1 H1 8G !k I1 9G #k J1 !G $k K1 #G %k L1 M1 'k (k )k *k N1 +k O1 $G ,k -k .k !F P1 /k +i QF ,i RF -i *F Q1 R1 S1 T1 U1 V1 W1 X1 Y1 Z1 01 %G 11 21 31 41 51 61 71 81 91 !1 :k #1 $1 ;k %1 '1 (1 'G )1 *1 +1 ,1 -1 .1 /1 :1 ;1 =1 ?1 @1 =k [1 (G )G ?k ]1 ^1 _1 *G `1 {1 @k +G [k |1 ]k ,G -G }1 h 3e gc ~1 vi a2 wi b2 xi ^k c2 d2 e2 .G _k f2 g2 h2 /G `k :G {k i2 j2 k2 l2 m2 n2 o2 p2 |k q2 }k r2 ~k s2 al ;G bl =G cl ?G dl @G el [G ]G fl ^G gl hl il jl kl ll _G t2 ml nl `G u2 {G |G ol pl }G ql ~G v2 w2 rl x2 aH y2 sl z2 A2 B2 tl C2 D2 ul E2 F2 vl G2 H2 I2 J2 wl K2 L2 M2 bH xl cH yl dH zl eH Al _U Bl fH Cl N2 gH Dl hH El iH Fl jH O2 kH Gl P2 Hl Q2 lH Il R2 mH Jl S2 nH T2 U2 Kl oH pH V2 Ll W2 X2 Ml qH Nl Y2 Z2 02 rH Ol 12 22 32 sH Pl 42 52 62 72 tH Ql uH Rl vH Sl wH Tl xH Ul yH zH Vl Wl AH Xl BH Yl CH Zl DH 0l EH FH GH 1l 2l HH IH 3l JH 4l 82 92 KH 5l !2 #2 6l $2 LH MH NH 7l OH 8l 9l PH %2 !l '2 (2 )2 QH #l RH $l SH %l TH UH 'l *2 +2 ,2 VH (l -2 .2 /2 )l :2 WH *l ;2 XH YH =2 ?2 +l @2 ,l ZH [2 -l ]2 0H .l 1H ^2 /l _2 2H `2 {2 |2 :l 3H 4H }2 ~2 ;l a3 b3 5H c3 =l d3 e3 6H ?l f3 g3 7H h3 i3 @l j3 k3 8H [l l3 9H ]l m3 n3 o3 p3 !H q3 ^l r3 s3 t3 u3 #H v3 _l w3 x3 y3 z3 $H `l A3 B3 C3 D3 %H E3 F3 G3 {l H3 |l }l ~l am bm 'H cm (H dm em I3 )H fm *H gm J3 +H hm ,H -H im K3 .H jm L3 /H km :H lm ;H mm =H nm M3 om ?H N3 O3 P3 Q3 pm R3 S3 T3 @H U3 V3 W3 qm X3 Y3 Z3 [H 03 13 23 33 43 53 63 73 83 ]H rm 93 !3 #3 sm ^H $3 tm _H %3 um vm '3 `H (3 {H )3 }g %g *3 hc +3 |H wm ,3 }H -3 .3 Gb /3 :3 xm ;3 =3 ?3 @3 [3 ym ]3 zm ^3 _3 `3 {3 |3 Am }3 ~3 Bm ~H a4 Cm @ b4 c4 aI d4 Dm bI Em e4 f4 Fm g4 h4 i4 j4 k4 Gm l4 Hm ~g ic Im m4 n4 Jm jc kc lc o4 p4 q4 r4 s4 t4 u4 v4 b Km Lm Mm w4 Nm Om Pm cI Qm x4 dI eI Rm yi ah bh ch dh Sm y4 z4 A4 fI B4 C4 D4 Tm .i Um mc nc gI E4 Vm hI cV ;U rV Wm oc pc F4 G4 H4 I4 J4 K4 L4 M4 N4 O4 P4 Q4 R4 S4 T4 U4 V4 W4 iI X4 Y4 Xm Z4 04 14 24 34 44 54 64 74 Ym eh Zm 84 0m jI fh 94 !4 zi sV qc rc sc 1m #4 $4 %4 '4 (4 )4 *4 +4 ,4 -4 .4 /4 :4 2m ;4 =4 ?4 @4 [4 ]4 ^4 _4 `4 {4 |4 }4 ~4 a5 b5 c5 3m d5 e5 f5 g5 4m h5 i5 5m j5 6m k5 l5 m5 7m n5 o5 p5 8m q5 r5 s5 t5 u5 v5 w5 x5 y5 z5 A5 B5 C5 D5 E5 F5 G5 H5 9m I5 J5 !m kI K5 L5 M5 N5 #m O5 P5 Q5 R5 S5 T5 U5 V5 W5 X5 Y5 Z5 05 15 25 35 45 55 65 75 85 $m 95 !5 %m 'm #5 $5 (m )m %5 tc uc *m '5 (5 )5 *5 +5 ,5 -5 +m .5 /5 :5 ;5 =5 /i SF ,m lI -m ?5 @5 gh :i [5 ]5 ^5 _5 `5 .m {5 |5 mI }5 ~5 a6 /m b6 :m nI c6 ;m hh =m d6 ?m @m e6 f6 g6 h6 i6 j6 k6 [m oI ]m x [ y z A B C ] ^m pI ih _m qI `m l6 {m m6 |m rI n6 o6 p6 q6 r6 s6 t6 }m u6 v6 sI vc wc tI ~m w6 x6 uI an y6 bn z6 vI cn wI A6 9i B6 dn xI jh en yI fn zI Hb Ib Jb D E Kb gn AI hn C6 in D6 jn BI kn E6 F6 G6 H6 kh I6 J6 K6 L6 M6 N6 O6 P6 Q6 R6 S6 T6 U6 V6 W6 X6 Y6 Z6 06 16 26 36 46 56 66 76 86 96 !6 #6 $6 %6 '6 (6 )6 *6 +6 ,6 -6 .6 /6 :6 ;6 =6 ?6 @6 [6 ]6 ^6 _6 `6 {6 |6 }6 ~6 a7 b7 c7 d7 e7 f7 g7 h7 i7 j7 k7 l7 m7 n7 o7 p7 q7 r7 s7 t7 CI ln u7 v7 w7 x7 y7 z7 A7 mn B7 C7 DI D7 nn E7 F7 G7 H7 I7 J7 K7 L7 M7 N7 O7 EI P7 Q7 FI R7 S7 T7 U7 V7 W7 on X7 Y7 Z7 07 17 27 37 47 57 67 77 87 97 !7 #7 $7 GI pn %7 '7 (7 )7 *7 +7 ,7 -7 .7 /7 :7 HI ;7 =7 ?7 @7 qn [7 ]7 ^7 _7 `7 {7 |7 }7 ~7 a8 b8 c8 d8 e8 f8 g8 h8 i8 j8 k8 l8 m8 n8 o8 p8 q8 r8 s8 t8 u8 v8 w8 x8 y8 z8 A8 B8 C8 D8 E8 F8 G8 H8 I8 J8 rn K8 xc yc sn L8 lh tn II un JI mh M8 N8 O8 P8 vn Q8 R8 S8 T8 U8 wn V8 W8 KI xn X8 Y8 Z8 08 18 28 38 48 yn nh zn LI 58 68 78 88 98 !8 #8 $8 %8 '8 (8 )8 *8 An MI +8 ,8 -8 .8 /8 :8 ;8 =8 ?8 @8 [8 ]8 ^8 _8 `8 {8 |8 }8 ~8 a9 b9 c9 d9 Bn e9 f9 Cn g9 Dn h9 i9 j9 k9 l9 En m9 NI Fn zc Gn n9 o9 p9 q9 Ac Bc Cc ub Lb Dc Hn Ec Fc Mb F In oh OI Jn r9 PI Kn s9 QI Ln t9 RI Mn u9 SI Nn v9 TI On w9 UI Pn x9 VI Qn y9 WI Rn z9 XI Sn A9 YI Tn B9 ZI Un C9 0I Vn D9 E9 F9 1I Wn G9 H9 I9 2I Xn J9 K9 L9 3I Yn M9 N9 4I Zn O9 P9 5I 0n Q9 R9 6I 1n S9 T9 7I 2n U9 V9 8I 3n W9 X9 9I 4n Y9 Z9 09 19 29 39 49 5n !I 59 69 6n #I 79 $I 7n 89 99 !9 #9 $9 %9 %I 8n '9 (9 )9 *9 +9 ,9 -9 9n 'I .9 /9 !n (I :9 )I #n ;9 =9 *I $n ?9 @9 +I %n [9 ]9 'n (n )n ^9 *n _9 `9 {9 |9 }9 ~9 +n a! b! c! ,n d! e! f! g! h! -n i! j! k! l! .n m! n! o! p! q! ,I r! /n s! t! :n -I u! Ai ;n v! .I w! =n /I x! y! z! A! :I ?n B! ;I @n C! =I [n D! ?I ]n E! F! ^n _n `n {n G! |n H! @I }n ~n ao #F I! bo ;i TF =i UF ?i +F J! K! L! M! N! O! P! Q! R! S! T! [I U! V! W! X! Y! Z! 0! 1! 2! 3! co 4! 5! do 6! 7! 8! ]I 9! !! #! $! %! '! (! )! *! +! ,! -! eo .! ^I _I fo /! :! ;! `I =! ?! go {I ho @! io |I }I [! i |e Gc ]! Bi ^! Ci _! Di jo `! {! |! ~I ko }! ~! a# aJ lo bJ mo b# c# d# e# f# g# h# i# no j# oo k# po l# qo cJ ro dJ so eJ to fJ uo gJ hJ vo iJ wo xo yo zo Ao Bo jJ m# Co Do kJ n# lJ mJ Eo Fo nJ Go oJ o# p# Ho q# pJ r# Io s# t# u# Jo v# w# Ko x# y# Lo z# A# B# C# Mo D# E# F# qJ No rJ Oo sJ Po tJ Qo `U Ro uJ So G# vJ To wJ Uo xJ Vo yJ H# zJ Wo I# Xo J# AJ Yo K# BJ Zo L# CJ M# N# 0o DJ EJ O# 1o P# Q# 2o FJ 3o R# S# T# GJ 4o U# V# W# HJ 5o X# Y# Z# 0# IJ 6o JJ 7o KJ 8o LJ 9o MJ !o NJ OJ #o $o PJ %o QJ 'o RJ (o SJ )o TJ UJ VJ *o +o WJ XJ ,o YJ -o 1# 2# ZJ .o 3# 4# /o 5# 0J 1J 2J :o 3J ;o =o 4J 6# ?o 7# 8# 9# 5J @o 6J [o 7J ]o 8J 9J ^o !# ## $# !J _o %# '# (# `o )# #J {o *# $J %J +# ,# |o -# }o 'J .# ~o /# (J ap )J :# bp ;# *J =# ?# @# cp +J ,J [# ]# dp ^# _# -J `# ep {# |# .J fp }# ~# /J a$ b$ gp c$ d$ :J hp e$ ;J ip f$ g$ h$ i$ =J j$ jp k$ l$ m$ n$ ?J o$ kp p$ q$ r$ s$ @J lp t$ u$ v$ w$ [J x$ y$ z$ mp A$ np op pp qp rp ]J sp ^J tp up B$ _J vp `J wp C$ {J xp |J }J yp D$ ~J zp E$ aK Ap bK Bp cK Cp dK Dp F$ Ep eK G$ H$ I$ J$ Fp K$ L$ M$ fK N$ O$ P$ Gp Q$ R$ S$ gK T$ U$ V$ W$ X$ Y$ Z$ 0$ 1$ hK Hp 2$ 3$ 4$ Ip iK 5$ Jp jK 6$ Kp Lp 7$ kK 8$ lK 9$ ph 'g !$ Hc #$ mK Mp $$ nK %$ '$ Nb ($ )$ Np *$ +$ ,$ -$ .$ Op /$ Pp :$ ;$ =$ ?$ @$ Qp [$ Rp ]$ ^$ Sp oK _$ Tp ^ `$ {$ pK |$ Up qK Vp }$ ~$ Wp a% b% c% d% e% Xp f% Yp qh Ic Zp g% h% 0p Jc Kc Lc i% j% k% l% m% n% o% p% c 1p 2p 3p q% 4p 5p 6p rK 7p r% sK tK 8p Ei rh sh th uh 9p s% t% u% uK v% w% x% !p @i #p Mc Nc vK y% $p wK dV =U tV %p Oc Pc z% A% B% C% D% E% F% G% H% I% J% K% L% M% N% O% P% Q% xK R% S% 'p T% U% V% W% X% Y% Z% 0% 1% (p vh )p 2% *p yK wh 3% 4% Fi uV Qc Rc Sc +p 5% 6% 7% 8% 9% !% #% $% %% '% (% )% *% ,p +% ,% -% .% /% :% ;% =% ?% @% [% ]% ^% _% `% {% -p |% }% ~% a' .p b' c' /p d' :p e' f' g' ;p h' i' j' =p k' l' m' n' o' p' q' r' s' t' u' v' w' x' y' z' A' B' ?p C' D' @p zK E' F' G' H' [p I' J' K' L' M' N' O' P' Q' R' S' T' U' V' W' X' Y' Z' 0' 1' 2' ]p 3' 4' ^p _p 5' 6' `p {p 7' Tc Uc |p 8' 9' !' #' $' %' '' }p (' )' *' +' ,' [i VF ~p AK aq -' .' xh ]i /' :' ;' =' ?' bq @' [' BK ]' ^' _' cq `' dq CK {' eq yh fq |' gq hq }' ~' a( b( c( d( e( iq DK jq G _ H I J K L ` kq EK zh lq FK mq f( nq g( oq GK h( i( j( k( l( m( n( pq o( p( HK Vc Wc IK qq q( r( JK rq s( sq t( KK tq LK u( !i v( uq MK Ah vq NK wq OK Ob Pb Qb M N Rb xq PK yq w( zq x( Aq QK Bq y( z( A( B( Bh C( D( E( F( G( H( I( J( K( L( M( N( O( P( Q( R( S( T( U( V( W( X( Y( Z( 0( 1( 2( 3( 4( 5( 6( 7( 8( 9( !( #( $( %( '( (( )( *( +( ,( -( .( /( :( ;( =( ?( @( [( ]( ^( _( `( {( |( }( ~( a) b) c) d) e) f) g) h) i) j) k) l) m) n) RK Cq o) p) q) r) s) t) u) Dq v) w) SK x) Eq y) z) A) B) C) D) E) F) G) H) I) TK J) K) UK L) M) N) O) P) Q) Fq R) S) T) U) V) W) X) Y) Z) 0) 1) 2) 3) 4) 5) 6) VK Gq 7) 8) 9) !) #) $) %) ') () )) *) WK +) ,) -) .) Hq /) :) ;) =) ?) @) [) ]) ^) _) `) {) |) }) ~) a* b* c* d* e* f* g* h* i* j* k* l* m* n* o* p* q* r* s* t* u* v* w* x* y* z* A* B* C* D* Iq E* Xc Yc Zc { 0c 1c | 2c 3c 4c Jq F* Ch Kq XK Lq YK Dh G* H* I* J* Mq K* L* M* N* O* Nq P* Q* ZK Oq R* S* T* U* V* W* X* Y* Pq Eh Qq 0K Z* 0* 1* 2* 3* 4* 5* 6* 7* 8* 9* !* #* Rq 1K $* %* '* (* )* ** +* ,* -* .* /* :* ;* =* ?* @* [* ]* ^* _* `* {* |* Sq }* ~* Tq a+ Uq b+ c+ d+ e+ f+ Vq g+ 2K Wq 5c Xq h+ i+ j+ k+ 6c 7c 8c vb Sb 9c Yq !c #c Zq Fh Tb O 0q Gh 3K 1q l+ 4K 2q m+ 5K 3q n+ 6K 4q o+ 7K 5q p+ 8K 6q q+ 9K 7q r+ !K 8q s+ #K 9q t+ $K !q u+ %K #q v+ 'K $q w+ (K %q x+ y+ z+ )K 'q A+ B+ C+ *K (q D+ E+ F+ +K )q G+ H+ ,K *q I+ J+ -K +q K+ L+ .K ,q M+ N+ /K -q O+ P+ :K .q Q+ R+ ;K /q S+ T+ U+ V+ W+ X+ Y+ :q =K Z+ 0+ ;q ?K 1+ @K =q 2+ 3+ 4+ 5+ 6+ 7+ [K ?q 8+ 9+ !+ #+ $+ %+ '+ @q ]K (+ )+ [q ^K *+ _K ]q ++ ,+ `K ^q -+ .+ {K _q /+ :+ `q {q |q ;+ }q =+ ?+ @+ [+ ]+ ^+ ~q _+ `+ {+ ar |+ }+ ~+ a, b, br c, d, e, f, cr g, h, i, j, k, |K l, dr m, n, $c er }K o, Gi fr p, ~K q, gr aL r, s, t, u, bL hr v, cL ir w, dL jr x, eL kr y, z, lr mr nr or A, pr B, fL qr rr sr $F C, tr ^i WF _i XF `i ,F D, E, F, G, H, I, J, K, L, M, N, gL O, P, Q, R, S, T, U, V, W, X, ur Y, Z, vr 0, 1, 2, hL 3, 4, 5, 6, 7, 8, 9, !, #, $, %, ', wr (, iL jL xr ), *, +, kL ,, -, yr lL zr ., Ar mL nL /, j Cf %c :, Hi ;, Ii =, Ji Br ?, @, [, oL Cr ], ^, _, pL Dr qL Er `, {, |, }, ~, a- b- c- Fr d- Gr e- Hr f- Ir rL Jr sL Kr tL Lr uL Mr vL wL Nr xL Or Pr Qr Rr Sr Tr yL g- Ur Vr zL h- AL BL Wr Xr CL Yr DL i- j- Zr k- EL l- 0r m- n- o- 1r p- q- 2r r- s- 3r t- u- v- w- 4r x- y- z- FL 5r GL 6r HL 7r IL 8r {U 9r JL !r A- KL #r LL $r ML %r NL B- OL 'r C- (r D- PL )r E- QL *r F- RL G- H- +r SL TL I- ,r J- K- -r UL .r L- M- N- VL /r O- P- Q- WL :r R- S- T- U- XL ;r YL =r ZL ?r 0L @r 1L [r 2L 3L ]r ^r 4L _r 5L `r 6L {r 7L |r 8L 9L !L }r ~r #L $L as %L bs V- W- 'L cs X- Y- ds Z- (L )L *L es +L fs gs ,L 0- hs 1- 2- 3- -L is .L js /L ks :L ;L ls 4- 5- 6- =L ms 7- 8- 9- ns !- ?L os #- @L [L $- %- ps '- qs ]L (- rs )- ^L ss _L *- ts +- `L ,- -- .- us {L |L /- :- vs ;- =- }L ?- ws @- [- ~L xs ]- ^- aM _- `- ys {- |- bM zs }- cM As ~- a. b. c. dM d. Bs e. f. g. h. eM i. Cs j. k. l. m. fM Ds n. o. p. q. gM r. s. t. Es u. Fs Gs Hs Is Js hM Ks iM Ls Ms v. jM Ns kM Os w. lM Ps mM nM Qs x. oM Rs y. pM Ss qM Ts rM Us sM Vs z. Ws tM A. B. C. D. Xs E. F. G. uM H. I. J. Ys K. L. M. vM N. O. P. Q. R. S. T. U. V. wM Zs W. X. Y. 0s xM Z. 1s yM 0. 2s 3s 1. zM 2. AM 3. Hh (g 4. 'c 5. BM 4s 6. CM 7. 8. Ub 9. !. 5s #. $. %. '. (. 6s ). 7s *. +. ,. -. .. 8s /. 9s :. ;. !s (c DM =. #s } ?. @. EM [. $s FM %s ]. ^. 's _. `. {. |. }. (s ~. )s Ih )c *s a/ b/ +s *c +c ,c c/ d/ e/ f/ g/ h/ i/ j/ d ,s -s .s k/ /s :s ;s GM =s l/ HM IM ?s Ki Jh Kh Lh Mh @s m/ n/ o/ JM p/ q/ r/ [s {i ]s -c .c KM s/ ^s LM eV ?U vV _s /c :c t/ u/ v/ w/ x/ y/ z/ A/ B/ C/ D/ E/ F/ G/ H/ I/ J/ K/ MM L/ M/ `s N/ O/ P/ Q/ R/ S/ T/ U/ V/ {s Nh |s W/ }s NM Oh X/ Y/ Li wV ;c =c ?c ~s Z/ 0/ 1/ 2/ 3/ 4/ 5/ 6/ 7/ 8/ 9/ !/ #/ at $/ %/ '/ (/ )/ */ +/ ,/ -/ ./ // :/ ;/ =/ ?/ @/ bt [/ ]/ ^/ _/ ct `/ {/ dt |/ et }/ ~/ a: ft b: c: d: gt e: f: g: h: i: j: k: l: m: n: o: p: q: r: s: t: u: v: ht w: x: it OM y: z: A: B: jt C: D: E: F: G: H: I: J: K: L: M: N: O: P: Q: R: S: T: U: V: W: kt X: Y: lt mt Z: 0: nt ot 1: @c [c pt 2: 3: 4: 5: 6: 7: 8: qt 9: !: #: $: %: |i YF rt PM st ': (: Ph }i ): *: +: ,: -: tt .: /: QM :: ;: =: ut ?: vt RM @: wt Qh xt [: yt zt ]: ^: _: `: {: |: }: At SM Bt P ~ Q R S T U ab Ct TM Rh Dt UM Et ~: Ft a; Gt VM b; c; d; e; f; g; h; Ht i; j; WM ]c ^c XM It k; l; YM Jt m; Kt n; ZM Lt 0M o; #i p; Mt 1M Sh Nt 2M Ot 3M Vb Wb Xb V W Yb Pt 4M Qt q; Rt r; St 5M Tt s; t; u; v; Th w; x; y; z; A; B; C; D; E; F; G; H; I; J; K; L; M; N; O; P; Q; R; S; T; U; V; W; X; Y; Z; 0; 1; 2; 3; 4; 5; 6; 7; 8; 9; !; #; $; %; '; (; ); *; +; ,; -; .; /; :; ;; =; ?; @; [; ]; ^; _; `; {; |; }; ~; a= b= c= d= e= f= g= h= 6M Ut i= j= k= l= m= n= o= Vt p= q= 7M r= Wt s= t= u= v= w= x= y= z= A= B= C= 8M D= E= 9M F= G= H= I= J= K= Xt L= M= N= O= P= Q= R= S= T= U= V= W= X= Y= Z= 0= !M Yt 1= 2= 3= 4= 5= 6= 7= 8= 9= != #= #M $= %= '= (= Zt )= *= += ,= -= .= /= := ;= == ?= @= [= ]= ^= _= `= {= |= }= ~= a? b? c? d? e? f? g? h? i? j? k? l? m? n? o? p? q? r? s? t? u? v? w? x? 0t y? _c `c {c bb |c }c cb ~c ad bd 1t z? Uh 2t $M 3t %M Vh A? B? C? D? 4t E? F? G? H? I? 5t J? K? 'M 6t L? M? N? O? P? Q? R? S? 7t Wh 8t (M T? U? V? W? X? Y? Z? 0? 1? 2? 3? 4? 5? 9t )M 6? 7? 8? 9? !? #? $? %? '? (? )? *? +? ,? -? .? /? :? ;? =? ?? @? [? !t ]? ^? #t _? $t `? {? |? }? ~? %t a@ *M 't cd (t b@ c@ d@ e@ dd ed fd wb Zb gd )t hd id *t Xh 0b X +t Yh +M ,t f@ ,M -t g@ -M .t h@ .M /t i@ /M :t j@ :M ;t k@ ;M =t l@ =M ?t m@ ?M @t n@ @M [t o@ [M ]t p@ ]M ^t q@ ^M _t r@ s@ t@ _M `t u@ v@ w@ `M {t x@ y@ z@ {M |t A@ B@ |M }t C@ D@ }M ~t E@ F@ ~M au G@ H@ aN bu I@ J@ bN cu K@ L@ cN du M@ N@ O@ P@ Q@ R@ S@ eu dN T@ U@ fu eN V@ fN gu W@ X@ Y@ Z@ 0@ 1@ gN hu 2@ 3@ 4@ 5@ 6@ 7@ 8@ iu hN 9@ !@ ju iN #@ jN ku $@ %@ kN lu '@ (@ lN mu )@ *@ nu ou pu +@ qu ,@ -@ .@ /@ :@ ;@ ru =@ ?@ @@ su [@ ]@ ^@ _@ `@ tu {@ |@ }@ ~@ uu a[ b[ c[ d[ e[ mN f[ vu g[ h[ jd wu nN i[ Mi xu j[ oN k[ yu pN l[ m[ n[ o[ qN zu p[ rN Au q[ sN Bu r[ tN Cu s[ t[ Du Eu Fu Gu u[ Hu v[ uN Iu Ju Ku %F w[ Lu ~i ZF aj 0F bj -F x[ y[ z[ A[ B[ C[ D[ E[ F[ G[ H[ vN I[ J[ K[ L[ M[ N[ O[ P[ Q[ R[ Mu S[ T[ Nu U[ V[ W[ wN X[ Y[ Z[ 0[ 1[ 2[ 3[ 4[ 5[ 6[ 7[ 8[ Ou 9[ xN yN Pu ![ #[ $[ zN %[ '[ Qu AN Ru ([ Su BN CN )[ k 7f kd *[ Ni +[ Oi ,[ Pi Tu -[ .[ /[ DN Uu :[ ;[ =[ EN Vu FN Wu ?[ @[ [[ ][ ^[ _[ `[ {[ Xu |[ Yu }[ Zu ~[ 0u GN 1u HN 2u IN 3u JN 4u KN LN 5u MN 6u 7u 8u 9u !u #u NN a] $u %u ON b] PN QN 'u (u RN )u SN c] d] *u e] TN f] +u g] h] i] ,u j] k] -u l] m] .u n] o] p] q] /u r] s] t] UN :u VN ;u WN =u XN ?u |U @u YN [u u] ZN ]u 0N ^u 1N _u 2N v] 3N `u w] {u x] 4N |u y] 5N }u z] 6N A] B] ~u 7N 8N C] av D] E] bv 9N cv F] G] H] !N dv I] J] K] #N ev L] M] N] O] $N fv %N gv 'N hv (N iv )N jv *N +N kv lv ,N mv -N nv .N ov /N pv :N ;N =N qv rv ?N @N sv [N tv P] Q] ]N uv R] S] vv T] ^N _N `N wv {N xv yv |N U] zv V] W] X] }N Av ~N Bv aO Cv bO cO Dv Y] Z] 0] dO Ev 1] 2] 3] Fv 4] eO Gv 5] fO gO 6] 7] Hv 8] Iv hO 9] Jv !] iO Kv jO #] Lv $] kO %] '] (] Mv lO mO )] *] Nv +] ,] nO -] Ov .] /] oO Pv :] ;] pO =] ?] Qv @] [] qO Rv ]] rO Sv ^] _] `] {] sO |] Tv }] ~] a^ b^ tO c^ Uv d^ e^ f^ g^ uO Vv h^ i^ j^ k^ vO l^ m^ n^ Wv o^ Xv Yv Zv 0v 1v wO 2v xO 3v 4v p^ yO 5v zO 6v q^ AO 7v BO CO 8v r^ DO 9v s^ EO !v FO #v GO $v HO %v t^ 'v IO u^ v^ w^ x^ (v y^ z^ A^ JO B^ C^ D^ )v E^ F^ G^ KO H^ I^ J^ K^ L^ M^ N^ O^ P^ LO *v Q^ R^ S^ +v MO T^ ,v NO U^ -v .v V^ OO W^ PO X^ Zh )g Y^ ld Z^ QO /v 0^ RO 1^ 2^ 1b 3^ 4^ :v 5^ 6^ 7^ 8^ 9^ ;v !^ =v #^ $^ %^ '^ (^ ?v )^ @v *^ +^ [v md SO ,^ ]v db -^ .^ TO /^ ^v UO _v :^ ;^ `v =^ ?^ @^ [^ ]^ {v ^^ |v 0h nd }v _^ `^ ~v od pd qd {^ |^ }^ ~^ a_ b_ c_ d_ e aw bw cw e_ dw ew fw VO gw f_ WO XO hw Qi 1h 2h 3h 4h iw g_ h_ i_ YO j_ k_ l_ jw cj kw rd sd ZO m_ lw 0O fV @U xV mw td ud n_ o_ p_ q_ r_ s_ t_ u_ v_ w_ x_ y_ z_ A_ B_ C_ D_ E_ 1O F_ G_ nw H_ I_ J_ K_ L_ M_ N_ O_ P_ ow 5h pw Q_ qw 2O 6h R_ S_ Ri yV vd wd xd rw T_ U_ V_ W_ X_ Y_ Z_ 0_ 1_ 2_ 3_ 4_ 5_ sw 6_ 7_ 8_ 9_ !_ #_ $_ %_ '_ (_ )_ *_ +_ ,_ -_ ._ tw /_ :_ ;_ =_ uw ?_ @_ vw [_ ww ]_ ^_ __ xw `_ {_ |_ yw }_ ~_ a` b` c` d` e` f` g` h` i` j` k` l` m` n` o` p` zw q` r` Aw 3O s` t` u` v` Bw w` x` y` z` A` B` C` D` E` F` G` H` I` J` K` L` M` N` O` P` Q` Cw R` S` Dw Ew T` U` Fw Gw V` yd zd Hw W` X` Y` Z` 0` 1` 2` Iw 3` 4` 5` 6` 7` dj 1F Jw 4O Kw 8` 9` 7h ej !` #` $` %` '` Lw (` )` 5O *` +` ,` Mw -` Nw 6O .` Ow 8h Pw /` Qw Rw :` ;` =` ?` @` [` ]` Sw 7O Tw Y eb Z 0 1 2 3 fb Uw 8O 9h Vw 9O Ww ^` Xw _` Yw !O `` {` |` }` ~` a{ b{ Zw c{ d{ #O Ad Bd $O 0w e{ f{ %O 1w g{ 2w h{ 'O 3w (O i{ $i j{ 4w )O !h 5w *O 6w +O 2b 3b 4b 4 5 5b 7w ,O 8w k{ 9w l{ !w -O #w m{ n{ o{ p{ #h q{ r{ s{ t{ u{ v{ w{ x{ y{ z{ A{ B{ C{ D{ E{ F{ G{ H{ I{ J{ K{ L{ M{ N{ O{ P{ Q{ R{ S{ T{ U{ V{ W{ X{ Y{ Z{ 0{ 1{ 2{ 3{ 4{ 5{ 6{ 7{ 8{ 9{ !{ #{ ${ %{ '{ ({ ){ *{ +{ ,{ -{ .{ /{ :{ ;{ ={ ?{ @{ [{ ]{ ^{ _{ `{ {{ |{ }{ ~{ a| b| .O $w c| d| e| f| g| h| i| %w j| k| /O l| 'w m| n| o| p| q| r| s| t| u| v| w| :O x| y| ;O z| A| B| C| D| E| (w F| G| H| I| J| K| L| M| N| O| P| Q| R| S| T| U| =O )w V| W| X| Y| Z| 0| 1| 2| 3| 4| 5| ?O 6| 7| 8| 9| *w !| #| $| %| '| (| )| *| +| ,| -| .| /| :| ;| =| ?| @| [| ]| ^| _| `| {| || }| ~| a} b} c} d} e} f} g} h} i} j} k} l} m} n} o} p} q} r} +w s} Cd Dd Ed gb Fd Gd hb Hd Id Jd ,w t} $h -w @O .w [O %h u} v} w} x} /w y} z} A} B} C} :w D} E} ]O ;w F} G} H} I} J} K} L} M} =w 'h ?w ^O N} O} P} Q} R} S} T} U} V} W} X} Y} Z} @w _O 0} 1} 2} 3} 4} 5} 6} 7} 8} 9} !} #} $} %} '} (} )} *} +} ,} -} .} /} [w :} ;} ]w =} ^w ?} @} [} ]} ^} _w _} `O `w Kd {w `} {} |} }} Ld Md Nd xb 6b Od |w Pd Qd }w (h 7b 6 ~w )h {O ax ~} |O bx a~ }O cx b~ ~O dx c~ aP ex d~ bP fx e~ cP gx f~ dP hx g~ eP ix h~ fP jx i~ gP kx j~ hP lx k~ iP mx l~ m~ n~ jP nx o~ p~ q~ kP ox r~ s~ t~ lP px u~ v~ mP qx w~ x~ nP rx y~ z~ oP sx A~ B~ pP tx C~ D~ qP ux E~ F~ rP vx G~ H~ I~ J~ K~ L~ M~ wx sP N~ O~ xx tP P~ uP yx Q~ R~ S~ T~ U~ V~ vP zx W~ X~ Y~ Z~ 0~ 1~ 2~ Ax wP 3~ 4~ Bx xP 5~ yP Cx 6~ 7~ zP Dx 8~ 9~ AP Ex !~ #~ Fx Gx Hx $~ Ix %~ '~ (~ )~ *~ +~ Jx ,~ -~ .~ Kx /~ :~ ;~ =~ ?~ Lx @~ [~ ]~ ^~ Mx _~ `~ {~ |~ }~ BP ~~ Nx aabbabRd Ox CP cabSi Px dabDP eabQx EP fabgabhabiabFP Rx jabGP Sx kabHP Tx labIP Ux mabnabVx Wx Xx Yx oabZx pabJP 0x 1x 2x 'F qab3x fj 2F gj 3F hj .F rabsabtabuabvabwabxabyabzabAabBabKP CabDabEabFabGabHabIabJabKabLab4x MabNab5x OabPabQabLP RabSabTabUabVabWabXabYabZab0ab1ab2ab6x 3abMP NP 7x 4ab5ab6abOP 7ab8ab8x PP 9x 9ab!x QP RP !abl bg Sd #abTi $abUi %abVi #x 'ab(ab)abSP $x *ab+ab,abTP %x UP 'x -ab.ab/ab:ab;ab=ab?ab@ab(x [ab)x ]ab*x ^ab+x VP ,x WP -x XP .x YP /x ZP 0P :x 1P ;x =x ?x @x [x ]x 2P _ab^x _x 3P `ab4P 5P `x {x 6P |x 7P {ab|ab}x }ab8P ~ab~x abbbbbcbbay dbbebbby fbbgbbcy hbbibbjbbkbbdy lbbmbbnbb9P ey !P fy #P gy $P hy }U iy %P jy obb'P ky (P ly )P my *P pbb+P ny qbboy rbb,P py sbb-P qy tbb.P ubbvbbry /P :P wbbsy xbbybbty ;P uy zbbAbbBbb=P vy CbbDbbEbb?P wy FbbGbbHbbIbb@P xy [P yy ]P zy ^P Ay _P By `P {P Cy Dy |P Ey }P Fy ~P Gy aQ Hy bQ cQ dQ Iy Jy eQ fQ Ky gQ Ly JbbKbbhQ My LbbMbbNy NbbiQ jQ kQ Oy lQ Py Qy mQ ObbRy PbbQbbRbbnQ Sy oQ Ty pQ Uy qQ rQ Vy SbbTbbUbbsQ Wy VbbWbbXbbXy YbbtQ Yy ZbbuQ vQ 0bb1bbZy 2bb0y wQ 3bb1y 4bbxQ 2y yQ 5bb3y 6bbzQ 7bb8bb9bb4y AQ BQ !bb#bb5y $bb%bbCQ 'bb6y (bb)bbDQ 7y *bb+bbEQ ,bb-bb8y .bb/bbFQ 9y :bbGQ !y ;bb=bb?bb@bbHQ [bb#y ]bb^bb_bb`bbIQ {bb$y |bb}bb~bbacbJQ %y bcbccbdcbecbKQ fcbgcbhcb'y icb(y )y *y +y ,y LQ -y MQ .y /y jcbNQ :y OQ ;y kcbPQ =y QQ RQ ?y lcbSQ @y mcbTQ [y UQ ]y VQ ^y WQ _y ncb`y XQ ocbpcbqcbrcb{y scbtcbucbYQ vcbwcbxcb|y ycbzcbAcbZQ BcbCcbDcbEcbFcbGcbHcbIcbJcb0Q }y KcbLcbMcb~y 1Q Ncbaz 2Q Ocbbz cz Pcb3Q Qcb4Q Rcb*h *g ScbTd Tcb5Q dz Ucb6Q VcbWcb8b XcbYcbez Zcb0cb1cb2cb3cbfz 4cbgz 5cb6cb7cb8cb9cbhz !cbiz #cb$cbjz Ud 7Q %cbkz ib 'cb(cb8Q )cblz 9Q mz *cb+cbnz ,cb-cb.cb/cb:cboz ;cbpz +h Vd qz =cb?cbrz Wd Xd Yd @cb[cb]cb^cb_cb`cb{cb|cbf sz tz uz }cbvz wz xz !Q yz ~cb#Q $Q zz Wi ,h -h .h /h Az adbbdbcdb%Q ddbedbfdbBz ij Cz Zd 0d 'Q gdbDz (Q gV [U zV Ez 1d 2d hdbidbjdbkdbldbmdbndbodbpdbqdbrdbsdbtdbudbvdbwdbxdbydb)Q zdbAdbFz BdbCdbDdbEdbFdbGdbHdbIdbJdbGz :h Hz KdbIz *Q ;h LdbMdbXi AV 3d 4d 5d Jz NdbOdbPdbQdbRdbSdbTdbUdbVdbWdbXdbYdbZdbKz 0db1db2db3db4db5db6db7db8db9db!db#db$db%db'db(dbLz )db*db+db,dbMz -db.dbNz /dbOz :db;db=dbPz ?db@db[dbQz ]db^db_db`db{db|db}db~dbaebbebcebdebeebfebgebhebiebjebRz keblebSz +Q mebneboebpebTz qebrebsebtebuebvebwebxebyebzebAebBebCebDebEebFebGebHebIebJebKebUz LebMebVz Wz NebOebXz Yz Peb6d 7d Zz QebRebSebTebUebVebWeb0z XebYebZeb0eb1ebjj 4F 1z ,Q 2z 2eb3eb=h kj 4eb5eb6eb7eb8eb3z 9eb!eb-Q #eb$eb%eb4z 'eb5z .Q (eb6z ?h 7z )eb8z 9z *eb+eb,eb-eb.eb/eb:eb!z /Q #z 7 jb 8 9 ! # $ kb $z :Q @h %z ;Q 'z ;eb(z =eb)z =Q ?eb@eb[eb]eb^eb_eb`eb*z {eb|eb?Q 8d 9d @Q +z }eb~eb[Q ,z afb-z bfb]Q .z ^Q cfb%i dfb/z _Q [h :z `Q ;z {Q 9b !b #b % ' $b =z |Q ?z efb@z ffb[z }Q ]z gfbhfbifbjfb]h kfblfbmfbnfbofbpfbqfbrfbsfbtfbufbvfbwfbxfbyfbzfbAfbBfbCfbDfbEfbFfbGfbHfbIfbJfbKfbLfbMfbNfbOfbPfbQfbRfbSfbTfbUfbVfbWfbXfbYfbZfb0fb1fb2fb3fb4fb5fb6fb7fb8fb9fb!fb#fb$fb%fb'fb(fb)fb*fb+fb,fb-fb.fb/fb:fb;fb=fb?fb@fb[fb]fb^fb_fb`fb~Q ^z {fb|fb}fb~fbagbbgbcgb_z dgbegbaR fgb`z ggbhgbigbjgbkgblgbmgbngbogbpgbqgbbR rgbsgbcR tgbugbvgbwgbxgbygb{z zgbAgbBgbCgbDgbEgbFgbGgbHgbIgbJgbKgbLgbMgbNgbOgbdR |z PgbQgbRgbSgbTgbUgbVgbWgbXgbYgbZgbeR 0gb1gb2gb3gb}z 4gb5gb6gb7gb8gb9gb!gb#gb$gb%gb'gb(gb)gb*gb+gb,gb-gb.gb/gb:gb;gb=gb?gb@gb[gb]gb^gb_gb`gb{gb|gb}gb~gbahbbhbchbdhbehbfhbghbhhbihbjhbkhblhb~z mhb!d #d $d lb %d 'd mb (d )d *d aA nhb^h bA fR cA gR _h ohbphbqhbrhbdA shbthbuhbvhbwhbeA xhbyhbhR fA zhbAhbBhbChbDhbEhbFhbGhbgA `h hA iR HhbIhbJhbKhbLhbMhbNhbOhbPhbQhbRhbShbThbiA jR UhbVhbWhbXhbYhbZhb0hb1hb2hb3hb4hb5hb6hb7hb8hb9hb!hb#hb$hb%hb'hb(hb)hbjA *hb+hbkA ,hblA -hb.hb/hb:hb;hbmA =hbkR nA +d oA ?hb@hb[hb]hb,d -d .d yb %b /d pA :d ;d qA {h 'b ( rA |h lR sA ^hbmR tA _hbnR uA `hboR vA {hbpR wA |hbqR xA }hbrR yA ~hbsR zA aibtR AA bibuR BA cibvR CA dibwR DA eibxR EA fibgibhibyR FA iibjibkibzR GA libmibnibAR HA oibpibBR IA qibribCR JA sibtibDR KA uibvibER LA wibxibFR MA yibzibGR NA AibBibCibDibEibFibGibOA HR HibIibPA IR JibJR QA KibLibMibNibOibPibKR RA QibRibSibTibUibVibWibSA LR XibYibTA MR ZibNR UA 0ib1ibOR VA 2ib3ibPR WA 4ib5ibXA YA ZA 6ib0A 7ib8ib9ib!ib#ib$ib1A %ib'ib(ib2A )ib*ib+ib,ib-ib3A .ib/ib:ib;ib4A =ib?ib@ib[ib]ibQR ^ib5A _ib`ib=d 6A RR {ibYi 7A |ibSR }ib8A TR ~ibajbbjbcjbUR 9A djbVR !A ejbWR #A fjbXR $A gjbhjb%A 'A (A )A ijb*A jjbYR +A ,A -A (F kjb.A lj 5F mj 6F nj /F ljbmjbnjbojbpjbqjbrjbsjbtjbujbvjbZR wjbxjbyjbzjbAjbBjbCjbDjbEjbFjb/A GjbHjb:A IjbJjbKjb0R LjbMjbNjbOjbPjbQjbRjbSjbTjbUjbVjbWjb;A Xjb1R 2R =A YjbZjb0jb3R 1jb2jb?A 4R @A 3jb[A 5R 6R 4jbm Gg ?d 5jbZi 6jb0i 7jb1i ]A 8jb9jb!jb7R ^A #jb$jb%jb8R _A 9R `A 'jb(jb)jb*jb+jb,jb-jb.jb{A /jb|A :jb}A ;jb~A !R aB #R bB $R cB %R dB 'R (R eB )R fB gB hB iB jB kB *R =jblB mB +R ?jb,R -R nB oB .R pB /R @jb[jbqB ]jb:R ^jbrB _jb`jb{jbsB |jb}jbtB ~jbakbuB bkbckbdkbekbvB fkbgkbhkb;R wB =R xB ?R yB @R zB ~U AB [R BB ikb]R CB ^R DB _R EB `R jkb{R FB kkbGB lkb|R HB mkb}R IB nkb~R okbpkbJB aS bS qkbKB rkbskbLB cS MB tkbukbvkbdS NB wkbxkbykbeS OB zkbAkbBkbCkbfS PB gS QB hS RB iS SB jS TB kS lS UB VB mS WB nS XB oS YB pS ZB qS rS sS 0B 1B tS uS 2B vS 3B DkbEkbwS 4B FkbGkb5B HkbxS yS zS 6B AS 7B 8B BS Ikb9B JkbKkbLkbCS !B DS #B ES $B FS GS %B MkbNkbOkbHS 'B PkbQkbRkb(B SkbIS )B TkbJS KS UkbVkb*B Wkb+B LS Xkb,B YkbMS -B NS Zkb.B 0kbOS 1kb2kb3kb/B PS QS 4kb5kb:B 6kb7kbRS 8kb;B 9kb!kbSS =B #kb$kbTS %kb'kb?B (kb)kbUS @B *kbVS [B +kb,kb-kb.kbWS /kb]B :kb;kb=kb?kbXS @kb^B [kb]kb^kb_kbYS _B `kb{kb|kb}kbZS ~kbalbblb`B clb{B |B }B ~B aC 0S bC 1S cC dC dlb2S eC 3S fC elb4S gC 5S 6S hC flb7S iC glb8S jC 9S kC !S lC #S mC hlbnC $S ilbjlbklbllboC mlbnlbolb%S plbqlbrlbpC slbtlbulb'S vlbwlbxlbylbzlbAlbBlbClbDlb(S qC ElbFlbGlbrC )S HlbsC *S IlbtC uC Jlb+S Klb,S Llb}h +g Mlb@d Nlb-S vC Olb.S PlbQlb(b RlbSlbwC TlbUlbVlbWlbXlbxC YlbyC Zlb0lb1lb2lb3lbzC 4lbAC 5lb6lbBC [d /S 7lbCC nb 8lb9lb:S !lbDC ;S EC #lb$lbFC %lb'lb(lb)lb*lbGC +lbHC ~h ]d IC ,lb-lbJC ^d _d `d .lb/lb:lb;lb=lb?lb@lb[lbg KC LC MC ]lbNC OC PC =S QC ^lb?S @S RC 2i ai bi ci di SC _lb`lb{lb[S |lb}lb~lbTC oj UC {d |d ]S ambVC ^S hV ]U BV WC }d ~d XC ei YC bmbZC _S fi cmbdmb3i CV ae be 0C embfmbgmbhmbimbjmbkmblmbmmbnmbombpmbqmb1C rmbsmbtmbumbvmbwmbxmbymbzmbAmbBmbCmbDmbEmbFmbGmb2C HmbImbJmbKmb3C LmbMmb4C Nmb5C OmbPmbQmb6C RmbSmbTmb7C UmbVmbWmbXmbYmbZmb0mb1mb2mb3mb4mb5mb6mb7mb8mb9mb!mb#mb8C $mb%mb9C `S 'mb(mb)mb*mb!C +mb,mb-mb.mb/mb:mb;mb=mb?mb@mb[mb]mb^mb_mb`mb{mb|mb}mb~mbanbbnb#C cnbdnb$C %C enbfnb'C (C gnbce de )C hnbinbjnbknblnbmnbnnb*C onbpnbqnbrnbsnbpj 7F +C {S ,C tnbunbgi qj vnbwnbxnbynbznb-C AnbBnb|S CnbDnbEnb.C Fnb/C hi :C Gnb;C =C HnbInbJnbKnbLnbMnbNnb?C }S @C ) ob * + , - . pb [C ~S ii ]C aT ^C Onb_C Pnb`C bT QnbRnbSnbTnbUnbVnbWnb{C XnbYnbcT ee dT |C Znb0nbeT }C 1nb~C 2nbfT aD gT 3nb'i 4nbbD hT ji cD iT dD jT )b *b +b / : ,b eD kT fD 5nbgD 6nbhD lT iD 7nb8nb9nb!nbki #nb$nb%nb'nb(nb)nb*nb+nb,nb-nb.nb/nb:nb;nb=nb?nb@nb[nb]nb^nb_nb`nb{nb|nb}nb~nbaobbobcobdobeobfobgobhobiobjobkoblobmobnoboobpobqobrobsobtobuobvobwobxobyobzobAobBobCobDobEobFobGobHobIobJobKobLobMobNobOobPobQobRobSobTobUobVobWobmT jD XobYobZob0ob1ob2ob3ob4ob5ob6ob7ob8ob9ob!ob#ob$ob%ob'ob(ob)ob*ob+ob,ob-ob.ob/ob:ob;ob=ob?ob@ob[ob]obkD ^obfe ge qb he ie rb je ke le lD _obli mD nT nD oT mi `ob{ob|ob}oboD ~obapbbpbcpbdpbpD epbfpbpT qD gpbhpbipbjpbkpblpbmpbnpbrD ni sD qT opbppbqpbrpbspbtpbupbvpbwpbxpbypbzpbApbtD rT BpbCpbDpbEpbFpbGpbHpbIpbJpbKpbLpbMpbNpbOpbPpbQpbRpbSpbTpbUpbVpbWpbXpbuD YpbZpbvD 0pbwD 1pb2pb3pb4pb5pbxD 6pbsT yD me zD 7pb8pb9pb!pbne oe pe zb -b qe AD re se BD oi .b ; CD pi tT DD #pbuT ED $pbvT FD %pbwT GD 'pbxT HD (pbyT ID )pbzT JD *pbAT KD +pbBT LD ,pbCT MD -pbDT ND .pbET OD /pbFT PD :pb;pb=pbGT QD ?pb@pb[pbHT RD ]pb^pb_pbIT SD `pb{pbJT TD |pb}pbKT UD ~pbaqbLT VD bqbcqbMT WD dqbeqbNT XD fqbgqbOT YD hqbiqbjqbkqblqbmqbnqbZD PT oqbpqb0D QT qqbRT 1D rqbsqbtqbuqbvqbwqbST 2D xqbyqbzqbAqbBqbCqbDqb3D TT EqbFqb4D UT GqbVT 5D HqbIqbWT 6D JqbKqbXT 7D LqbMqb8D 9D !D Nqb#D OqbPqbQqbRqbSqbTqb$D UqbVqbWqb%D XqbYqbZqb0qb1qb'D 2qb3qb4qb5qb(D 6qb7qb8qb9qb!qbYT #qb)D $qb%qbte *D ZT 'qb4i +D (qb0T )qb,D 1T *qb+qb,qb-qb2T -D .qb3T .D /qb4T /D :qb5T :D ;qb=qb;D =D ?D @D ?qb[D @qb6T ]D ^D _D )F [qb`D rj 8F sj 9F tj :F ]qb^qb_qb`qb{qb|qb}qb~qbarbbrbcrb7T drberbfrbgrbhrbirbjrbkrblrbmrb{D nrborb|D prbqrbrrb8T srbtrburbvrbwrbxrbyrbzrbArbBrbCrbDrb}D Erb9T !T ~D FrbGrbHrb#T IrbJrbaE $T bE KrbcE %T Lrbn !g ue Mrb5i Nrb6i Orb7i dE PrbQrbRrb'T eE SrbTrbUrb(T fE )T gE VrbWrbXrbYrbZrb0rb1rb2rbhE 3rbiE 4rbjE 5rbkE *T lE +T mE ,T nE -T oE .T /T pE :T qE rE sE tE uE vE ;T 6rbwE xE =T 7rb?T yE zE @T AE [T 8rb9rbBE !rb]T #rbCE $rb%rb'rbDE (rb)rbEE *rb+rbFE ,rb-rb.rb/rbGE :rb;rb=rb^T HE _T IE `T JE {T KE aV LE |T ME ?rb}T NE ~T OE aU PE bU @rbcU QE [rbRE ]rbdU SE ^rbeU TE _rbfU `rb{rbUE gU hU |rbVE }rb~rbWE iU XE asbbsbcsbjU YE dsbesbfsbkU ZE gsbhsbisbjsblU 0E mU 1E nU 2E oU 3E pU 4E qU rU 5E 6E sU 7E tU 8E uU 9E vU !E wU xU #E $E yU zU %E AU 'E ksblsb(E msbBU CU )E DU *E +E EU nsb,E osbpsbqsbFU GU -E rsbssbtsbHU .E usbvsbwsb/E xsbIU :E ysbJU KU zsbAsb;E Bsb=E LU Csb?E DsbMU @E NU Esb[E FsbOU GsbHsbIsb]E PU QU JsbKsb^E LsbMsbRU Nsb_E OsbPsbSU `E QsbRsbTU SsbTsb{E UsbVsbUU |E WsbVU }E XsbYsbZsb0sbWU 1sb~E 2sb3sb4sb5sbXU aF 6sb7sb8sb9sbYU !sb#sb$sbbF %sbcF dF eF fF gF ZU hF 0U iF jF 'sb1U kF 2U lF (sb3U mF 4U 5U nF )sb6U oF *sb7U pF 8U qF 9U rF +sbsF !U ,sb-sb.sb/sbtF :sb;sb=sb#U ?sb@sb[sbuF ]sb^sb_sb$U `sb{sb|sb}sb~sbatbbtbctbdtb%U vF etbftbgtbwF 'U htbxF (U itbyF zF jtb)U ktb*U ltbqi ,g mtbve ntb+U AF otb,U ptbqtb/b rtbstbBF ttbutbvtbwtbxtbCF ytbDF ztbAtbBtbCtbDtbEF EtbFF FtbGtbGF we -U HtbHF sb ItbJtb.U KtbIF /U JF LtbMtbKF NtbOtbPtbQtbRtbLF StbMF ri xe NF TtbUtbOF ye ze Ae VtbWtbXtbYtbZtb0tb1tb2tb
1141 def add_api_route( 1abcdefg
1142 self,
1143 path: str,
1144 endpoint: Callable[..., Any],
1145 *,
1146 response_model: Any = Default(None),
1147 status_code: Optional[int] = None,
1148 tags: Optional[List[Union[str, Enum]]] = None,
1149 dependencies: Optional[Sequence[Depends]] = None,
1150 summary: Optional[str] = None,
1151 description: Optional[str] = None,
1152 response_description: str = "Successful Response",
1153 responses: Optional[Dict[Union[int, str], Dict[str, Any]]] = None,
1154 deprecated: Optional[bool] = None,
1155 methods: Optional[List[str]] = None,
1156 operation_id: Optional[str] = None,
1157 response_model_include: Optional[IncEx] = None,
1158 response_model_exclude: Optional[IncEx] = None,
1159 response_model_by_alias: bool = True,
1160 response_model_exclude_unset: bool = False,
1161 response_model_exclude_defaults: bool = False,
1162 response_model_exclude_none: bool = False,
1163 include_in_schema: bool = True,
1164 response_class: Union[Type[Response], DefaultPlaceholder] = Default(
1165 JSONResponse
1166 ),
1167 name: Optional[str] = None,
1168 openapi_extra: Optional[Dict[str, Any]] = None,
1169 generate_unique_id_function: Callable[[routing.APIRoute], str] = Default(
1170 generate_unique_id
1171 ),
1172 ) -> None:
1173 self.router.add_api_route( 1abcdefg
1174 path,
1175 endpoint=endpoint,
1176 response_model=response_model,
1177 status_code=status_code,
1178 tags=tags,
1179 dependencies=dependencies,
1180 summary=summary,
1181 description=description,
1182 response_description=response_description,
1183 responses=responses,
1184 deprecated=deprecated,
1185 methods=methods,
1186 operation_id=operation_id,
1187 response_model_include=response_model_include,
1188 response_model_exclude=response_model_exclude,
1189 response_model_by_alias=response_model_by_alias,
1190 response_model_exclude_unset=response_model_exclude_unset,
1191 response_model_exclude_defaults=response_model_exclude_defaults,
1192 response_model_exclude_none=response_model_exclude_none,
1193 include_in_schema=include_in_schema,
1194 response_class=response_class,
1195 name=name,
1196 openapi_extra=openapi_extra,
1197 generate_unique_id_function=generate_unique_id_function,
1198 )
1200 def api_route( 1abcdefg
1201 self,
1202 path: str,
1203 *,
1204 response_model: Any = Default(None),
1205 status_code: Optional[int] = None,
1206 tags: Optional[List[Union[str, Enum]]] = None,
1207 dependencies: Optional[Sequence[Depends]] = None,
1208 summary: Optional[str] = None,
1209 description: Optional[str] = None,
1210 response_description: str = "Successful Response",
1211 responses: Optional[Dict[Union[int, str], Dict[str, Any]]] = None,
1212 deprecated: Optional[bool] = None,
1213 methods: Optional[List[str]] = None,
1214 operation_id: Optional[str] = None,
1215 response_model_include: Optional[IncEx] = None,
1216 response_model_exclude: Optional[IncEx] = None,
1217 response_model_by_alias: bool = True,
1218 response_model_exclude_unset: bool = False,
1219 response_model_exclude_defaults: bool = False,
1220 response_model_exclude_none: bool = False,
1221 include_in_schema: bool = True,
1222 response_class: Type[Response] = Default(JSONResponse),
1223 name: Optional[str] = None,
1224 openapi_extra: Optional[Dict[str, Any]] = None,
1225 generate_unique_id_function: Callable[[routing.APIRoute], str] = Default(
1226 generate_unique_id
1227 ),
1228 ) -> Callable[[DecoratedCallable], DecoratedCallable]:
1229 def decorator(func: DecoratedCallable) -> DecoratedCallable: 1abcdefg
1230 self.router.add_api_route( 1abcdefg
1231 path,
1232 func,
1233 response_model=response_model,
1234 status_code=status_code,
1235 tags=tags,
1236 dependencies=dependencies,
1237 summary=summary,
1238 description=description,
1239 response_description=response_description,
1240 responses=responses,
1241 deprecated=deprecated,
1242 methods=methods,
1243 operation_id=operation_id,
1244 response_model_include=response_model_include,
1245 response_model_exclude=response_model_exclude,
1246 response_model_by_alias=response_model_by_alias,
1247 response_model_exclude_unset=response_model_exclude_unset,
1248 response_model_exclude_defaults=response_model_exclude_defaults,
1249 response_model_exclude_none=response_model_exclude_none,
1250 include_in_schema=include_in_schema,
1251 response_class=response_class,
1252 name=name,
1253 openapi_extra=openapi_extra,
1254 generate_unique_id_function=generate_unique_id_function,
1255 )
1256 return func 1abcdefg
1258 return decorator 1abcdefg
1260 def add_api_websocket_route( 1abcdefg
1261 self,
1262 path: str,
1263 endpoint: Callable[..., Any],
1264 name: Optional[str] = None,
1265 *,
1266 dependencies: Optional[Sequence[Depends]] = None,
1267 ) -> None:
1268 self.router.add_api_websocket_route( 2a iVb jVc kVd lVe mVf nVg oV
1269 path,
1270 endpoint,
1271 name=name,
1272 dependencies=dependencies,
1273 )
1275 def websocket( 1abcdefg
1276 self,
1277 path: Annotated[
1278 str,
1279 Doc(
1280 """
1281 WebSocket path.
1282 """
1283 ),
1284 ],
1285 name: Annotated[
1286 Optional[str],
1287 Doc(
1288 """
1289 A name for the WebSocket. Only used internally.
1290 """
1291 ),
1292 ] = None,
1293 *,
1294 dependencies: Annotated[
1295 Optional[Sequence[Depends]],
1296 Doc(
1297 """
1298 A list of dependencies (using `Depends()`) to be used for this
1299 WebSocket.
1301 Read more about it in the
1302 [FastAPI docs for WebSockets](https://fastapi.tiangolo.com/advanced/websockets/).
1303 """
1304 ),
1305 ] = None,
1306 ) -> Callable[[DecoratedCallable], DecoratedCallable]:
1307 """
1308 Decorate a WebSocket function.
1310 Read more about it in the
1311 [FastAPI docs for WebSockets](https://fastapi.tiangolo.com/advanced/websockets/).
1313 **Example**
1315 ```python
1316 from fastapi import FastAPI, WebSocket
1318 app = FastAPI()
1320 @app.websocket("/ws")
1321 async def websocket_endpoint(websocket: WebSocket):
1322 await websocket.accept()
1323 while True:
1324 data = await websocket.receive_text()
1325 await websocket.send_text(f"Message text was: {data}")
1326 ```
1327 """
1329 def decorator(func: DecoratedCallable) -> DecoratedCallable: 2a iVb jVc kVd lVe mVf nVg oV
1330 self.add_api_websocket_route( 2a iVb jVc kVd lVe mVf nVg oV
1331 path,
1332 func,
1333 name=name,
1334 dependencies=dependencies,
1335 )
1336 return func 1abcdefg
1338 return decorator 2a iVb jVc kVd lVe mVf nVg oV
1340 def include_router( 1abcdefg
1341 self,
1342 router: Annotated[routing.APIRouter, Doc("The `APIRouter` to include.")],
1343 *,
1344 prefix: Annotated[str, Doc("An optional path prefix for the router.")] = "",
1345 tags: Annotated[
1346 Optional[List[Union[str, Enum]]],
1347 Doc(
1348 """
1349 A list of tags to be applied to all the *path operations* in this
1350 router.
1352 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
1354 Read more about it in the
1355 [FastAPI docs for Path Operation Configuration](https://fastapi.tiangolo.com/tutorial/path-operation-configuration/).
1356 """
1357 ),
1358 ] = None,
1359 dependencies: Annotated[
1360 Optional[Sequence[Depends]],
1361 Doc(
1362 """
1363 A list of dependencies (using `Depends()`) to be applied to all the
1364 *path operations* in this router.
1366 Read more about it in the
1367 [FastAPI docs for Bigger Applications - Multiple Files](https://fastapi.tiangolo.com/tutorial/bigger-applications/#include-an-apirouter-with-a-custom-prefix-tags-responses-and-dependencies).
1369 **Example**
1371 ```python
1372 from fastapi import Depends, FastAPI
1374 from .dependencies import get_token_header
1375 from .internal import admin
1377 app = FastAPI()
1379 app.include_router(
1380 admin.router,
1381 dependencies=[Depends(get_token_header)],
1382 )
1383 ```
1384 """
1385 ),
1386 ] = None,
1387 responses: Annotated[
1388 Optional[Dict[Union[int, str], Dict[str, Any]]],
1389 Doc(
1390 """
1391 Additional responses to be shown in OpenAPI.
1393 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
1395 Read more about it in the
1396 [FastAPI docs for Additional Responses in OpenAPI](https://fastapi.tiangolo.com/advanced/additional-responses/).
1398 And in the
1399 [FastAPI docs for Bigger Applications](https://fastapi.tiangolo.com/tutorial/bigger-applications/#include-an-apirouter-with-a-custom-prefix-tags-responses-and-dependencies).
1400 """
1401 ),
1402 ] = None,
1403 deprecated: Annotated[
1404 Optional[bool],
1405 Doc(
1406 """
1407 Mark all the *path operations* in this router as deprecated.
1409 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
1411 **Example**
1413 ```python
1414 from fastapi import FastAPI
1416 from .internal import old_api
1418 app = FastAPI()
1420 app.include_router(
1421 old_api.router,
1422 deprecated=True,
1423 )
1424 ```
1425 """
1426 ),
1427 ] = None,
1428 include_in_schema: Annotated[
1429 bool,
1430 Doc(
1431 """
1432 Include (or not) all the *path operations* in this router in the
1433 generated OpenAPI schema.
1435 This affects the generated OpenAPI (e.g. visible at `/docs`).
1437 **Example**
1439 ```python
1440 from fastapi import FastAPI
1442 from .internal import old_api
1444 app = FastAPI()
1446 app.include_router(
1447 old_api.router,
1448 include_in_schema=False,
1449 )
1450 ```
1451 """
1452 ),
1453 ] = True,
1454 default_response_class: Annotated[
1455 Type[Response],
1456 Doc(
1457 """
1458 Default response class to be used for the *path operations* in this
1459 router.
1461 Read more in the
1462 [FastAPI docs for Custom Response - HTML, Stream, File, others](https://fastapi.tiangolo.com/advanced/custom-response/#default-response-class).
1464 **Example**
1466 ```python
1467 from fastapi import FastAPI
1468 from fastapi.responses import ORJSONResponse
1470 from .internal import old_api
1472 app = FastAPI()
1474 app.include_router(
1475 old_api.router,
1476 default_response_class=ORJSONResponse,
1477 )
1478 ```
1479 """
1480 ),
1481 ] = Default(JSONResponse),
1482 callbacks: Annotated[
1483 Optional[List[BaseRoute]],
1484 Doc(
1485 """
1486 List of *path operations* that will be used as OpenAPI callbacks.
1488 This is only for OpenAPI documentation, the callbacks won't be used
1489 directly.
1491 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
1493 Read more about it in the
1494 [FastAPI docs for OpenAPI Callbacks](https://fastapi.tiangolo.com/advanced/openapi-callbacks/).
1495 """
1496 ),
1497 ] = None,
1498 generate_unique_id_function: Annotated[
1499 Callable[[routing.APIRoute], str],
1500 Doc(
1501 """
1502 Customize the function used to generate unique IDs for the *path
1503 operations* shown in the generated OpenAPI.
1505 This is particularly useful when automatically generating clients or
1506 SDKs for your API.
1508 Read more about it in the
1509 [FastAPI docs about how to Generate Clients](https://fastapi.tiangolo.com/advanced/generate-clients/#custom-generate-unique-id-function).
1510 """
1511 ),
1512 ] = Default(generate_unique_id),
1513 ) -> None:
1514 """
1515 Include an `APIRouter` in the same app.
1517 Read more about it in the
1518 [FastAPI docs for Bigger Applications](https://fastapi.tiangolo.com/tutorial/bigger-applications/).
1520 ## Example
1522 ```python
1523 from fastapi import FastAPI
1525 from .users import users_router
1527 app = FastAPI()
1529 app.include_router(users_router)
1530 ```
1531 """
1532 self.router.include_router( 3a ;b 3tbo p q r s t bc cc tb Eb dc ec fc jc kc lc b nc 4tbx y z A B C Bc Cc ub Lb Dc Ec Fc Jc Kc Lc c Nc 5tbG H I J K L 7c 8c vb Sb 9c !c #c *c +c ,c d .c 6tbP Q R S T U ed fd wb Zb gd hd id od pd qd e sd 7tbY Z 0 1 2 3 Md Nd xb 6b Od Pd Qd Wd Xd Yd f 0d 8tb7 8 9 ! # $ -d .d yb %b /d :d ;d ^d _d `d g |d 9tb) * + , - . oe pe zb -b qe re se ye ze Ae
1533 router,
1534 prefix=prefix,
1535 tags=tags,
1536 dependencies=dependencies,
1537 responses=responses,
1538 deprecated=deprecated,
1539 include_in_schema=include_in_schema,
1540 default_response_class=default_response_class,
1541 callbacks=callbacks,
1542 generate_unique_id_function=generate_unique_id_function,
1543 )
1545 def get( 2a b c d e f g ^U
1546 self,
1547 path: Annotated[
1548 str,
1549 Doc(
1550 """
1551 The URL path to be used for this *path operation*.
1553 For example, in `http://example.com/items`, the path is `/items`.
1554 """
1555 ),
1556 ],
1557 *,
1558 response_model: Annotated[
1559 Any,
1560 Doc(
1561 """
1562 The type to use for the response.
1564 It could be any valid Pydantic *field* type. So, it doesn't have to
1565 be a Pydantic model, it could be other things, like a `list`, `dict`,
1566 etc.
1568 It will be used for:
1570 * Documentation: the generated OpenAPI (and the UI at `/docs`) will
1571 show it as the response (JSON Schema).
1572 * Serialization: you could return an arbitrary object and the
1573 `response_model` would be used to serialize that object into the
1574 corresponding JSON.
1575 * Filtering: the JSON sent to the client will only contain the data
1576 (fields) defined in the `response_model`. If you returned an object
1577 that contains an attribute `password` but the `response_model` does
1578 not include that field, the JSON sent to the client would not have
1579 that `password`.
1580 * Validation: whatever you return will be serialized with the
1581 `response_model`, converting any data as necessary to generate the
1582 corresponding JSON. But if the data in the object returned is not
1583 valid, that would mean a violation of the contract with the client,
1584 so it's an error from the API developer. So, FastAPI will raise an
1585 error and return a 500 error code (Internal Server Error).
1587 Read more about it in the
1588 [FastAPI docs for Response Model](https://fastapi.tiangolo.com/tutorial/response-model/).
1589 """
1590 ),
1591 ] = Default(None),
1592 status_code: Annotated[
1593 Optional[int],
1594 Doc(
1595 """
1596 The default status code to be used for the response.
1598 You could override the status code by returning a response directly.
1600 Read more about it in the
1601 [FastAPI docs for Response Status Code](https://fastapi.tiangolo.com/tutorial/response-status-code/).
1602 """
1603 ),
1604 ] = None,
1605 tags: Annotated[
1606 Optional[List[Union[str, Enum]]],
1607 Doc(
1608 """
1609 A list of tags to be applied to the *path operation*.
1611 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
1613 Read more about it in the
1614 [FastAPI docs for Path Operation Configuration](https://fastapi.tiangolo.com/tutorial/path-operation-configuration/#tags).
1615 """
1616 ),
1617 ] = None,
1618 dependencies: Annotated[
1619 Optional[Sequence[Depends]],
1620 Doc(
1621 """
1622 A list of dependencies (using `Depends()`) to be applied to the
1623 *path operation*.
1625 Read more about it in the
1626 [FastAPI docs for Dependencies in path operation decorators](https://fastapi.tiangolo.com/tutorial/dependencies/dependencies-in-path-operation-decorators/).
1627 """
1628 ),
1629 ] = None,
1630 summary: Annotated[
1631 Optional[str],
1632 Doc(
1633 """
1634 A summary for the *path operation*.
1636 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
1638 Read more about it in the
1639 [FastAPI docs for Path Operation Configuration](https://fastapi.tiangolo.com/tutorial/path-operation-configuration/).
1640 """
1641 ),
1642 ] = None,
1643 description: Annotated[
1644 Optional[str],
1645 Doc(
1646 """
1647 A description for the *path operation*.
1649 If not provided, it will be extracted automatically from the docstring
1650 of the *path operation function*.
1652 It can contain Markdown.
1654 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
1656 Read more about it in the
1657 [FastAPI docs for Path Operation Configuration](https://fastapi.tiangolo.com/tutorial/path-operation-configuration/).
1658 """
1659 ),
1660 ] = None,
1661 response_description: Annotated[
1662 str,
1663 Doc(
1664 """
1665 The description for the default response.
1667 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
1668 """
1669 ),
1670 ] = "Successful Response",
1671 responses: Annotated[
1672 Optional[Dict[Union[int, str], Dict[str, Any]]],
1673 Doc(
1674 """
1675 Additional responses that could be returned by this *path operation*.
1677 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
1678 """
1679 ),
1680 ] = None,
1681 deprecated: Annotated[
1682 Optional[bool],
1683 Doc(
1684 """
1685 Mark this *path operation* as deprecated.
1687 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
1688 """
1689 ),
1690 ] = None,
1691 operation_id: Annotated[
1692 Optional[str],
1693 Doc(
1694 """
1695 Custom operation ID to be used by this *path operation*.
1697 By default, it is generated automatically.
1699 If you provide a custom operation ID, you need to make sure it is
1700 unique for the whole API.
1702 You can customize the
1703 operation ID generation with the parameter
1704 `generate_unique_id_function` in the `FastAPI` class.
1706 Read more about it in the
1707 [FastAPI docs about how to Generate Clients](https://fastapi.tiangolo.com/advanced/generate-clients/#custom-generate-unique-id-function).
1708 """
1709 ),
1710 ] = None,
1711 response_model_include: Annotated[
1712 Optional[IncEx],
1713 Doc(
1714 """
1715 Configuration passed to Pydantic to include only certain fields in the
1716 response data.
1718 Read more about it in the
1719 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_include-and-response_model_exclude).
1720 """
1721 ),
1722 ] = None,
1723 response_model_exclude: Annotated[
1724 Optional[IncEx],
1725 Doc(
1726 """
1727 Configuration passed to Pydantic to exclude certain fields in the
1728 response data.
1730 Read more about it in the
1731 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_include-and-response_model_exclude).
1732 """
1733 ),
1734 ] = None,
1735 response_model_by_alias: Annotated[
1736 bool,
1737 Doc(
1738 """
1739 Configuration passed to Pydantic to define if the response model
1740 should be serialized by alias when an alias is used.
1742 Read more about it in the
1743 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_include-and-response_model_exclude).
1744 """
1745 ),
1746 ] = True,
1747 response_model_exclude_unset: Annotated[
1748 bool,
1749 Doc(
1750 """
1751 Configuration passed to Pydantic to define if the response data
1752 should have all the fields, including the ones that were not set and
1753 have their default values. This is different from
1754 `response_model_exclude_defaults` in that if the fields are set,
1755 they will be included in the response, even if the value is the same
1756 as the default.
1758 When `True`, default values are omitted from the response.
1760 Read more about it in the
1761 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#use-the-response_model_exclude_unset-parameter).
1762 """
1763 ),
1764 ] = False,
1765 response_model_exclude_defaults: Annotated[
1766 bool,
1767 Doc(
1768 """
1769 Configuration passed to Pydantic to define if the response data
1770 should have all the fields, including the ones that have the same value
1771 as the default. This is different from `response_model_exclude_unset`
1772 in that if the fields are set but contain the same default values,
1773 they will be excluded from the response.
1775 When `True`, default values are omitted from the response.
1777 Read more about it in the
1778 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#use-the-response_model_exclude_unset-parameter).
1779 """
1780 ),
1781 ] = False,
1782 response_model_exclude_none: Annotated[
1783 bool,
1784 Doc(
1785 """
1786 Configuration passed to Pydantic to define if the response data should
1787 exclude fields set to `None`.
1789 This is much simpler (less smart) than `response_model_exclude_unset`
1790 and `response_model_exclude_defaults`. You probably want to use one of
1791 those two instead of this one, as those allow returning `None` values
1792 when it makes sense.
1794 Read more about it in the
1795 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_exclude_none).
1796 """
1797 ),
1798 ] = False,
1799 include_in_schema: Annotated[
1800 bool,
1801 Doc(
1802 """
1803 Include this *path operation* in the generated OpenAPI schema.
1805 This affects the generated OpenAPI (e.g. visible at `/docs`).
1807 Read more about it in the
1808 [FastAPI docs for Query Parameters and String Validations](https://fastapi.tiangolo.com/tutorial/query-params-str-validations/#exclude-parameters-from-openapi).
1809 """
1810 ),
1811 ] = True,
1812 response_class: Annotated[
1813 Type[Response],
1814 Doc(
1815 """
1816 Response class to be used for this *path operation*.
1818 This will not be used if you return a response directly.
1820 Read more about it in the
1821 [FastAPI docs for Custom Response - HTML, Stream, File, others](https://fastapi.tiangolo.com/advanced/custom-response/#redirectresponse).
1822 """
1823 ),
1824 ] = Default(JSONResponse),
1825 name: Annotated[
1826 Optional[str],
1827 Doc(
1828 """
1829 Name for this *path operation*. Only used internally.
1830 """
1831 ),
1832 ] = None,
1833 callbacks: Annotated[
1834 Optional[List[BaseRoute]],
1835 Doc(
1836 """
1837 List of *path operations* that will be used as OpenAPI callbacks.
1839 This is only for OpenAPI documentation, the callbacks won't be used
1840 directly.
1842 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
1844 Read more about it in the
1845 [FastAPI docs for OpenAPI Callbacks](https://fastapi.tiangolo.com/advanced/openapi-callbacks/).
1846 """
1847 ),
1848 ] = None,
1849 openapi_extra: Annotated[
1850 Optional[Dict[str, Any]],
1851 Doc(
1852 """
1853 Extra metadata to be included in the OpenAPI schema for this *path
1854 operation*.
1856 Read more about it in the
1857 [FastAPI docs for Path Operation Advanced Configuration](https://fastapi.tiangolo.com/advanced/path-operation-advanced-configuration/#custom-openapi-path-operation-schema).
1858 """
1859 ),
1860 ] = None,
1861 generate_unique_id_function: Annotated[
1862 Callable[[routing.APIRoute], str],
1863 Doc(
1864 """
1865 Customize the function used to generate unique IDs for the *path
1866 operations* shown in the generated OpenAPI.
1868 This is particularly useful when automatically generating clients or
1869 SDKs for your API.
1871 Read more about it in the
1872 [FastAPI docs about how to Generate Clients](https://fastapi.tiangolo.com/advanced/generate-clients/#custom-generate-unique-id-function).
1873 """
1874 ),
1875 ] = Default(generate_unique_id),
1876 ) -> Callable[[DecoratedCallable], DecoratedCallable]:
1877 """
1878 Add a *path operation* using an HTTP GET operation.
1880 ## Example
1882 ```python
1883 from fastapi import FastAPI
1885 app = FastAPI()
1887 @app.get("/items/")
1888 def read_items():
1889 return [{"name": "Empanada"}, {"name": "Arepa"}]
1890 ```
1891 """
1892 return self.router.get( 3a (i !tb:b [b ]b ^b _b #tb`b {b Be Ce De Ee Fe Ge He Ie Je Ke Le Ab Bb Cb u v Db Xe Ye Ze 0e 1e 2e ~b ac tb Eb Fb w h 3e gc 4e 5e hc Gb b .i $tbmc rc sc tc uc %tbvc wc 6e 7e 8e 9e !e #e $e %e 'e (e )e Hb Ib Jb D E Kb [e ]e ^e _e `e {e zc Ac ub Lb Mb F i |e Gc }e ~e Hc Nb c @i 'tbMc Rc Sc Tc Uc (tbVc Wc af bf cf df ef ff gf hf if jf kf Ob Pb Qb M N Rb | 2c 3c 4c wf xf yf zf Af Bf 5c 6c vb Sb Tb O $c j Cf %c Df Ef 'c Ub d {i )tb-c =c ?c @c [c *tb]c ^c Ff Gf Hf If Jf Kf Lf Mf Nf Of Pf Vb Wb Xb V W Yb cb ~c ad bd 1f 2f 3f 4f 5f 6f cd dd wb Zb 0b X jd k 7f kd 8f 9f ld 1b e cj +tbrd wd xd yd zd ,tbAd Bd !f #f $f %f 'f (f )f *f +f ,f -f 2b 3b 4b 4 5 5b hb Hd Id Jd `f {f |f }f ~f ag Kd Ld xb 6b 7b 6 Rd l bg Sd cg dg Td 8b f ij -tbZd 4d 5d 6d 7d .tb8d 9d eg fg gg hg ig jg kg lg mg ng og 9b !b #b % ' $b mb (d )d *d Ag Bg Cg Dg Eg Fg +d ,d yb %b 'b ( =d m Gg ?d Hg Ig @d (b g oj /tb{d be ce de :tbee Jg Kg Lg Mg Ng Og Pg Qg Rg Sg Tg )b *b +b / : ,b rb je ke le 5g 6g 7g 8g 9g me ne zb -b .b ; te n !g ue #g $g ve /b
1893 path,
1894 response_model=response_model,
1895 status_code=status_code,
1896 tags=tags,
1897 dependencies=dependencies,
1898 summary=summary,
1899 description=description,
1900 response_description=response_description,
1901 responses=responses,
1902 deprecated=deprecated,
1903 operation_id=operation_id,
1904 response_model_include=response_model_include,
1905 response_model_exclude=response_model_exclude,
1906 response_model_by_alias=response_model_by_alias,
1907 response_model_exclude_unset=response_model_exclude_unset,
1908 response_model_exclude_defaults=response_model_exclude_defaults,
1909 response_model_exclude_none=response_model_exclude_none,
1910 include_in_schema=include_in_schema,
1911 response_class=response_class,
1912 name=name,
1913 callbacks=callbacks,
1914 openapi_extra=openapi_extra,
1915 generate_unique_id_function=generate_unique_id_function,
1916 )
1918 def put( 2a b c d e f g ^U
1919 self,
1920 path: Annotated[
1921 str,
1922 Doc(
1923 """
1924 The URL path to be used for this *path operation*.
1926 For example, in `http://example.com/items`, the path is `/items`.
1927 """
1928 ),
1929 ],
1930 *,
1931 response_model: Annotated[
1932 Any,
1933 Doc(
1934 """
1935 The type to use for the response.
1937 It could be any valid Pydantic *field* type. So, it doesn't have to
1938 be a Pydantic model, it could be other things, like a `list`, `dict`,
1939 etc.
1941 It will be used for:
1943 * Documentation: the generated OpenAPI (and the UI at `/docs`) will
1944 show it as the response (JSON Schema).
1945 * Serialization: you could return an arbitrary object and the
1946 `response_model` would be used to serialize that object into the
1947 corresponding JSON.
1948 * Filtering: the JSON sent to the client will only contain the data
1949 (fields) defined in the `response_model`. If you returned an object
1950 that contains an attribute `password` but the `response_model` does
1951 not include that field, the JSON sent to the client would not have
1952 that `password`.
1953 * Validation: whatever you return will be serialized with the
1954 `response_model`, converting any data as necessary to generate the
1955 corresponding JSON. But if the data in the object returned is not
1956 valid, that would mean a violation of the contract with the client,
1957 so it's an error from the API developer. So, FastAPI will raise an
1958 error and return a 500 error code (Internal Server Error).
1960 Read more about it in the
1961 [FastAPI docs for Response Model](https://fastapi.tiangolo.com/tutorial/response-model/).
1962 """
1963 ),
1964 ] = Default(None),
1965 status_code: Annotated[
1966 Optional[int],
1967 Doc(
1968 """
1969 The default status code to be used for the response.
1971 You could override the status code by returning a response directly.
1973 Read more about it in the
1974 [FastAPI docs for Response Status Code](https://fastapi.tiangolo.com/tutorial/response-status-code/).
1975 """
1976 ),
1977 ] = None,
1978 tags: Annotated[
1979 Optional[List[Union[str, Enum]]],
1980 Doc(
1981 """
1982 A list of tags to be applied to the *path operation*.
1984 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
1986 Read more about it in the
1987 [FastAPI docs for Path Operation Configuration](https://fastapi.tiangolo.com/tutorial/path-operation-configuration/#tags).
1988 """
1989 ),
1990 ] = None,
1991 dependencies: Annotated[
1992 Optional[Sequence[Depends]],
1993 Doc(
1994 """
1995 A list of dependencies (using `Depends()`) to be applied to the
1996 *path operation*.
1998 Read more about it in the
1999 [FastAPI docs for Dependencies in path operation decorators](https://fastapi.tiangolo.com/tutorial/dependencies/dependencies-in-path-operation-decorators/).
2000 """
2001 ),
2002 ] = None,
2003 summary: Annotated[
2004 Optional[str],
2005 Doc(
2006 """
2007 A summary for the *path operation*.
2009 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
2011 Read more about it in the
2012 [FastAPI docs for Path Operation Configuration](https://fastapi.tiangolo.com/tutorial/path-operation-configuration/).
2013 """
2014 ),
2015 ] = None,
2016 description: Annotated[
2017 Optional[str],
2018 Doc(
2019 """
2020 A description for the *path operation*.
2022 If not provided, it will be extracted automatically from the docstring
2023 of the *path operation function*.
2025 It can contain Markdown.
2027 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
2029 Read more about it in the
2030 [FastAPI docs for Path Operation Configuration](https://fastapi.tiangolo.com/tutorial/path-operation-configuration/).
2031 """
2032 ),
2033 ] = None,
2034 response_description: Annotated[
2035 str,
2036 Doc(
2037 """
2038 The description for the default response.
2040 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
2041 """
2042 ),
2043 ] = "Successful Response",
2044 responses: Annotated[
2045 Optional[Dict[Union[int, str], Dict[str, Any]]],
2046 Doc(
2047 """
2048 Additional responses that could be returned by this *path operation*.
2050 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
2051 """
2052 ),
2053 ] = None,
2054 deprecated: Annotated[
2055 Optional[bool],
2056 Doc(
2057 """
2058 Mark this *path operation* as deprecated.
2060 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
2061 """
2062 ),
2063 ] = None,
2064 operation_id: Annotated[
2065 Optional[str],
2066 Doc(
2067 """
2068 Custom operation ID to be used by this *path operation*.
2070 By default, it is generated automatically.
2072 If you provide a custom operation ID, you need to make sure it is
2073 unique for the whole API.
2075 You can customize the
2076 operation ID generation with the parameter
2077 `generate_unique_id_function` in the `FastAPI` class.
2079 Read more about it in the
2080 [FastAPI docs about how to Generate Clients](https://fastapi.tiangolo.com/advanced/generate-clients/#custom-generate-unique-id-function).
2081 """
2082 ),
2083 ] = None,
2084 response_model_include: Annotated[
2085 Optional[IncEx],
2086 Doc(
2087 """
2088 Configuration passed to Pydantic to include only certain fields in the
2089 response data.
2091 Read more about it in the
2092 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_include-and-response_model_exclude).
2093 """
2094 ),
2095 ] = None,
2096 response_model_exclude: Annotated[
2097 Optional[IncEx],
2098 Doc(
2099 """
2100 Configuration passed to Pydantic to exclude certain fields in the
2101 response data.
2103 Read more about it in the
2104 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_include-and-response_model_exclude).
2105 """
2106 ),
2107 ] = None,
2108 response_model_by_alias: Annotated[
2109 bool,
2110 Doc(
2111 """
2112 Configuration passed to Pydantic to define if the response model
2113 should be serialized by alias when an alias is used.
2115 Read more about it in the
2116 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_include-and-response_model_exclude).
2117 """
2118 ),
2119 ] = True,
2120 response_model_exclude_unset: Annotated[
2121 bool,
2122 Doc(
2123 """
2124 Configuration passed to Pydantic to define if the response data
2125 should have all the fields, including the ones that were not set and
2126 have their default values. This is different from
2127 `response_model_exclude_defaults` in that if the fields are set,
2128 they will be included in the response, even if the value is the same
2129 as the default.
2131 When `True`, default values are omitted from the response.
2133 Read more about it in the
2134 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#use-the-response_model_exclude_unset-parameter).
2135 """
2136 ),
2137 ] = False,
2138 response_model_exclude_defaults: Annotated[
2139 bool,
2140 Doc(
2141 """
2142 Configuration passed to Pydantic to define if the response data
2143 should have all the fields, including the ones that have the same value
2144 as the default. This is different from `response_model_exclude_unset`
2145 in that if the fields are set but contain the same default values,
2146 they will be excluded from the response.
2148 When `True`, default values are omitted from the response.
2150 Read more about it in the
2151 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#use-the-response_model_exclude_unset-parameter).
2152 """
2153 ),
2154 ] = False,
2155 response_model_exclude_none: Annotated[
2156 bool,
2157 Doc(
2158 """
2159 Configuration passed to Pydantic to define if the response data should
2160 exclude fields set to `None`.
2162 This is much simpler (less smart) than `response_model_exclude_unset`
2163 and `response_model_exclude_defaults`. You probably want to use one of
2164 those two instead of this one, as those allow returning `None` values
2165 when it makes sense.
2167 Read more about it in the
2168 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_exclude_none).
2169 """
2170 ),
2171 ] = False,
2172 include_in_schema: Annotated[
2173 bool,
2174 Doc(
2175 """
2176 Include this *path operation* in the generated OpenAPI schema.
2178 This affects the generated OpenAPI (e.g. visible at `/docs`).
2180 Read more about it in the
2181 [FastAPI docs for Query Parameters and String Validations](https://fastapi.tiangolo.com/tutorial/query-params-str-validations/#exclude-parameters-from-openapi).
2182 """
2183 ),
2184 ] = True,
2185 response_class: Annotated[
2186 Type[Response],
2187 Doc(
2188 """
2189 Response class to be used for this *path operation*.
2191 This will not be used if you return a response directly.
2193 Read more about it in the
2194 [FastAPI docs for Custom Response - HTML, Stream, File, others](https://fastapi.tiangolo.com/advanced/custom-response/#redirectresponse).
2195 """
2196 ),
2197 ] = Default(JSONResponse),
2198 name: Annotated[
2199 Optional[str],
2200 Doc(
2201 """
2202 Name for this *path operation*. Only used internally.
2203 """
2204 ),
2205 ] = None,
2206 callbacks: Annotated[
2207 Optional[List[BaseRoute]],
2208 Doc(
2209 """
2210 List of *path operations* that will be used as OpenAPI callbacks.
2212 This is only for OpenAPI documentation, the callbacks won't be used
2213 directly.
2215 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
2217 Read more about it in the
2218 [FastAPI docs for OpenAPI Callbacks](https://fastapi.tiangolo.com/advanced/openapi-callbacks/).
2219 """
2220 ),
2221 ] = None,
2222 openapi_extra: Annotated[
2223 Optional[Dict[str, Any]],
2224 Doc(
2225 """
2226 Extra metadata to be included in the OpenAPI schema for this *path
2227 operation*.
2229 Read more about it in the
2230 [FastAPI docs for Path Operation Advanced Configuration](https://fastapi.tiangolo.com/advanced/path-operation-advanced-configuration/#custom-openapi-path-operation-schema).
2231 """
2232 ),
2233 ] = None,
2234 generate_unique_id_function: Annotated[
2235 Callable[[routing.APIRoute], str],
2236 Doc(
2237 """
2238 Customize the function used to generate unique IDs for the *path
2239 operations* shown in the generated OpenAPI.
2241 This is particularly useful when automatically generating clients or
2242 SDKs for your API.
2244 Read more about it in the
2245 [FastAPI docs about how to Generate Clients](https://fastapi.tiangolo.com/advanced/generate-clients/#custom-generate-unique-id-function).
2246 """
2247 ),
2248 ] = Default(generate_unique_id),
2249 ) -> Callable[[DecoratedCallable], DecoratedCallable]:
2250 """
2251 Add a *path operation* using an HTTP PUT operation.
2253 ## Example
2255 ```python
2256 from fastapi import FastAPI
2257 from pydantic import BaseModel
2259 class Item(BaseModel):
2260 name: str
2261 description: str | None = None
2263 app = FastAPI()
2265 @app.put("/items/{item_id}")
2266 def replace_item(item_id: str, item: Item):
2267 return {"message": "Item replaced", "id": item_id}
2268 ```
2269 """
2270 return self.router.put( 1abcdefg
2271 path,
2272 response_model=response_model,
2273 status_code=status_code,
2274 tags=tags,
2275 dependencies=dependencies,
2276 summary=summary,
2277 description=description,
2278 response_description=response_description,
2279 responses=responses,
2280 deprecated=deprecated,
2281 operation_id=operation_id,
2282 response_model_include=response_model_include,
2283 response_model_exclude=response_model_exclude,
2284 response_model_by_alias=response_model_by_alias,
2285 response_model_exclude_unset=response_model_exclude_unset,
2286 response_model_exclude_defaults=response_model_exclude_defaults,
2287 response_model_exclude_none=response_model_exclude_none,
2288 include_in_schema=include_in_schema,
2289 response_class=response_class,
2290 name=name,
2291 callbacks=callbacks,
2292 openapi_extra=openapi_extra,
2293 generate_unique_id_function=generate_unique_id_function,
2294 )
2296 def post( 2a b c d e f g ^U
2297 self,
2298 path: Annotated[
2299 str,
2300 Doc(
2301 """
2302 The URL path to be used for this *path operation*.
2304 For example, in `http://example.com/items`, the path is `/items`.
2305 """
2306 ),
2307 ],
2308 *,
2309 response_model: Annotated[
2310 Any,
2311 Doc(
2312 """
2313 The type to use for the response.
2315 It could be any valid Pydantic *field* type. So, it doesn't have to
2316 be a Pydantic model, it could be other things, like a `list`, `dict`,
2317 etc.
2319 It will be used for:
2321 * Documentation: the generated OpenAPI (and the UI at `/docs`) will
2322 show it as the response (JSON Schema).
2323 * Serialization: you could return an arbitrary object and the
2324 `response_model` would be used to serialize that object into the
2325 corresponding JSON.
2326 * Filtering: the JSON sent to the client will only contain the data
2327 (fields) defined in the `response_model`. If you returned an object
2328 that contains an attribute `password` but the `response_model` does
2329 not include that field, the JSON sent to the client would not have
2330 that `password`.
2331 * Validation: whatever you return will be serialized with the
2332 `response_model`, converting any data as necessary to generate the
2333 corresponding JSON. But if the data in the object returned is not
2334 valid, that would mean a violation of the contract with the client,
2335 so it's an error from the API developer. So, FastAPI will raise an
2336 error and return a 500 error code (Internal Server Error).
2338 Read more about it in the
2339 [FastAPI docs for Response Model](https://fastapi.tiangolo.com/tutorial/response-model/).
2340 """
2341 ),
2342 ] = Default(None),
2343 status_code: Annotated[
2344 Optional[int],
2345 Doc(
2346 """
2347 The default status code to be used for the response.
2349 You could override the status code by returning a response directly.
2351 Read more about it in the
2352 [FastAPI docs for Response Status Code](https://fastapi.tiangolo.com/tutorial/response-status-code/).
2353 """
2354 ),
2355 ] = None,
2356 tags: Annotated[
2357 Optional[List[Union[str, Enum]]],
2358 Doc(
2359 """
2360 A list of tags to be applied to the *path operation*.
2362 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
2364 Read more about it in the
2365 [FastAPI docs for Path Operation Configuration](https://fastapi.tiangolo.com/tutorial/path-operation-configuration/#tags).
2366 """
2367 ),
2368 ] = None,
2369 dependencies: Annotated[
2370 Optional[Sequence[Depends]],
2371 Doc(
2372 """
2373 A list of dependencies (using `Depends()`) to be applied to the
2374 *path operation*.
2376 Read more about it in the
2377 [FastAPI docs for Dependencies in path operation decorators](https://fastapi.tiangolo.com/tutorial/dependencies/dependencies-in-path-operation-decorators/).
2378 """
2379 ),
2380 ] = None,
2381 summary: Annotated[
2382 Optional[str],
2383 Doc(
2384 """
2385 A summary for the *path operation*.
2387 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
2389 Read more about it in the
2390 [FastAPI docs for Path Operation Configuration](https://fastapi.tiangolo.com/tutorial/path-operation-configuration/).
2391 """
2392 ),
2393 ] = None,
2394 description: Annotated[
2395 Optional[str],
2396 Doc(
2397 """
2398 A description for the *path operation*.
2400 If not provided, it will be extracted automatically from the docstring
2401 of the *path operation function*.
2403 It can contain Markdown.
2405 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
2407 Read more about it in the
2408 [FastAPI docs for Path Operation Configuration](https://fastapi.tiangolo.com/tutorial/path-operation-configuration/).
2409 """
2410 ),
2411 ] = None,
2412 response_description: Annotated[
2413 str,
2414 Doc(
2415 """
2416 The description for the default response.
2418 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
2419 """
2420 ),
2421 ] = "Successful Response",
2422 responses: Annotated[
2423 Optional[Dict[Union[int, str], Dict[str, Any]]],
2424 Doc(
2425 """
2426 Additional responses that could be returned by this *path operation*.
2428 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
2429 """
2430 ),
2431 ] = None,
2432 deprecated: Annotated[
2433 Optional[bool],
2434 Doc(
2435 """
2436 Mark this *path operation* as deprecated.
2438 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
2439 """
2440 ),
2441 ] = None,
2442 operation_id: Annotated[
2443 Optional[str],
2444 Doc(
2445 """
2446 Custom operation ID to be used by this *path operation*.
2448 By default, it is generated automatically.
2450 If you provide a custom operation ID, you need to make sure it is
2451 unique for the whole API.
2453 You can customize the
2454 operation ID generation with the parameter
2455 `generate_unique_id_function` in the `FastAPI` class.
2457 Read more about it in the
2458 [FastAPI docs about how to Generate Clients](https://fastapi.tiangolo.com/advanced/generate-clients/#custom-generate-unique-id-function).
2459 """
2460 ),
2461 ] = None,
2462 response_model_include: Annotated[
2463 Optional[IncEx],
2464 Doc(
2465 """
2466 Configuration passed to Pydantic to include only certain fields in the
2467 response data.
2469 Read more about it in the
2470 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_include-and-response_model_exclude).
2471 """
2472 ),
2473 ] = None,
2474 response_model_exclude: Annotated[
2475 Optional[IncEx],
2476 Doc(
2477 """
2478 Configuration passed to Pydantic to exclude certain fields in the
2479 response data.
2481 Read more about it in the
2482 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_include-and-response_model_exclude).
2483 """
2484 ),
2485 ] = None,
2486 response_model_by_alias: Annotated[
2487 bool,
2488 Doc(
2489 """
2490 Configuration passed to Pydantic to define if the response model
2491 should be serialized by alias when an alias is used.
2493 Read more about it in the
2494 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_include-and-response_model_exclude).
2495 """
2496 ),
2497 ] = True,
2498 response_model_exclude_unset: Annotated[
2499 bool,
2500 Doc(
2501 """
2502 Configuration passed to Pydantic to define if the response data
2503 should have all the fields, including the ones that were not set and
2504 have their default values. This is different from
2505 `response_model_exclude_defaults` in that if the fields are set,
2506 they will be included in the response, even if the value is the same
2507 as the default.
2509 When `True`, default values are omitted from the response.
2511 Read more about it in the
2512 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#use-the-response_model_exclude_unset-parameter).
2513 """
2514 ),
2515 ] = False,
2516 response_model_exclude_defaults: Annotated[
2517 bool,
2518 Doc(
2519 """
2520 Configuration passed to Pydantic to define if the response data
2521 should have all the fields, including the ones that have the same value
2522 as the default. This is different from `response_model_exclude_unset`
2523 in that if the fields are set but contain the same default values,
2524 they will be excluded from the response.
2526 When `True`, default values are omitted from the response.
2528 Read more about it in the
2529 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#use-the-response_model_exclude_unset-parameter).
2530 """
2531 ),
2532 ] = False,
2533 response_model_exclude_none: Annotated[
2534 bool,
2535 Doc(
2536 """
2537 Configuration passed to Pydantic to define if the response data should
2538 exclude fields set to `None`.
2540 This is much simpler (less smart) than `response_model_exclude_unset`
2541 and `response_model_exclude_defaults`. You probably want to use one of
2542 those two instead of this one, as those allow returning `None` values
2543 when it makes sense.
2545 Read more about it in the
2546 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_exclude_none).
2547 """
2548 ),
2549 ] = False,
2550 include_in_schema: Annotated[
2551 bool,
2552 Doc(
2553 """
2554 Include this *path operation* in the generated OpenAPI schema.
2556 This affects the generated OpenAPI (e.g. visible at `/docs`).
2558 Read more about it in the
2559 [FastAPI docs for Query Parameters and String Validations](https://fastapi.tiangolo.com/tutorial/query-params-str-validations/#exclude-parameters-from-openapi).
2560 """
2561 ),
2562 ] = True,
2563 response_class: Annotated[
2564 Type[Response],
2565 Doc(
2566 """
2567 Response class to be used for this *path operation*.
2569 This will not be used if you return a response directly.
2571 Read more about it in the
2572 [FastAPI docs for Custom Response - HTML, Stream, File, others](https://fastapi.tiangolo.com/advanced/custom-response/#redirectresponse).
2573 """
2574 ),
2575 ] = Default(JSONResponse),
2576 name: Annotated[
2577 Optional[str],
2578 Doc(
2579 """
2580 Name for this *path operation*. Only used internally.
2581 """
2582 ),
2583 ] = None,
2584 callbacks: Annotated[
2585 Optional[List[BaseRoute]],
2586 Doc(
2587 """
2588 List of *path operations* that will be used as OpenAPI callbacks.
2590 This is only for OpenAPI documentation, the callbacks won't be used
2591 directly.
2593 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
2595 Read more about it in the
2596 [FastAPI docs for OpenAPI Callbacks](https://fastapi.tiangolo.com/advanced/openapi-callbacks/).
2597 """
2598 ),
2599 ] = None,
2600 openapi_extra: Annotated[
2601 Optional[Dict[str, Any]],
2602 Doc(
2603 """
2604 Extra metadata to be included in the OpenAPI schema for this *path
2605 operation*.
2607 Read more about it in the
2608 [FastAPI docs for Path Operation Advanced Configuration](https://fastapi.tiangolo.com/advanced/path-operation-advanced-configuration/#custom-openapi-path-operation-schema).
2609 """
2610 ),
2611 ] = None,
2612 generate_unique_id_function: Annotated[
2613 Callable[[routing.APIRoute], str],
2614 Doc(
2615 """
2616 Customize the function used to generate unique IDs for the *path
2617 operations* shown in the generated OpenAPI.
2619 This is particularly useful when automatically generating clients or
2620 SDKs for your API.
2622 Read more about it in the
2623 [FastAPI docs about how to Generate Clients](https://fastapi.tiangolo.com/advanced/generate-clients/#custom-generate-unique-id-function).
2624 """
2625 ),
2626 ] = Default(generate_unique_id),
2627 ) -> Callable[[DecoratedCallable], DecoratedCallable]:
2628 """
2629 Add a *path operation* using an HTTP POST operation.
2631 ## Example
2633 ```python
2634 from fastapi import FastAPI
2635 from pydantic import BaseModel
2637 class Item(BaseModel):
2638 name: str
2639 description: str | None = None
2641 app = FastAPI()
2643 @app.post("/items/")
2644 def create_item(item: Item):
2645 return {"message": "Item created"}
2646 ```
2647 """
2648 return self.router.post( 2a =b?b@bo = p q r s t ? MeNeOePeQeReSeTeUeVeWeAbBbCbu v Db|b}bFbw @ icb ocpcqcx [ y z A B C ] *e+e,e-e.e/e:e;e=e?e@eHbIbJbD E KbxcycMbF ^ Icc OcPcQcG _ H I J K L ` lfmfnfofpfqfrfsftfufvfObPbQbM N RbXcYcZc{ 0c1cTbO (c} )cd /c:c;cP ~ Q R S T U abQfRfSfTfUfVfWfXfYfZf0fVbWbXbV W Yb_c`c{cbb|c}c0bX mddbnde tdudvdY ebZ 0 1 2 3 fb.f/f:f;f=f?f@f[f]f^f_f2b3b4b4 5 5bCdDdEdgbFdGd7b6 UdibVdf 1d2d3d7 jb8 9 ! # $ kbpgqgrgsgtgugvgwgxgygzg9b!b#b% ' $b!d#d$dlb%d'd'b( [dnb]dg }d~dae) ob* + , - . pbUgVgWgXgYgZg0g1g2g3g4g)b*b+b/ : ,bfegeqbheie.b; wesbxe
2649 path,
2650 response_model=response_model,
2651 status_code=status_code,
2652 tags=tags,
2653 dependencies=dependencies,
2654 summary=summary,
2655 description=description,
2656 response_description=response_description,
2657 responses=responses,
2658 deprecated=deprecated,
2659 operation_id=operation_id,
2660 response_model_include=response_model_include,
2661 response_model_exclude=response_model_exclude,
2662 response_model_by_alias=response_model_by_alias,
2663 response_model_exclude_unset=response_model_exclude_unset,
2664 response_model_exclude_defaults=response_model_exclude_defaults,
2665 response_model_exclude_none=response_model_exclude_none,
2666 include_in_schema=include_in_schema,
2667 response_class=response_class,
2668 name=name,
2669 callbacks=callbacks,
2670 openapi_extra=openapi_extra,
2671 generate_unique_id_function=generate_unique_id_function,
2672 )
2674 def delete( 2a b c d e f g ^U
2675 self,
2676 path: Annotated[
2677 str,
2678 Doc(
2679 """
2680 The URL path to be used for this *path operation*.
2682 For example, in `http://example.com/items`, the path is `/items`.
2683 """
2684 ),
2685 ],
2686 *,
2687 response_model: Annotated[
2688 Any,
2689 Doc(
2690 """
2691 The type to use for the response.
2693 It could be any valid Pydantic *field* type. So, it doesn't have to
2694 be a Pydantic model, it could be other things, like a `list`, `dict`,
2695 etc.
2697 It will be used for:
2699 * Documentation: the generated OpenAPI (and the UI at `/docs`) will
2700 show it as the response (JSON Schema).
2701 * Serialization: you could return an arbitrary object and the
2702 `response_model` would be used to serialize that object into the
2703 corresponding JSON.
2704 * Filtering: the JSON sent to the client will only contain the data
2705 (fields) defined in the `response_model`. If you returned an object
2706 that contains an attribute `password` but the `response_model` does
2707 not include that field, the JSON sent to the client would not have
2708 that `password`.
2709 * Validation: whatever you return will be serialized with the
2710 `response_model`, converting any data as necessary to generate the
2711 corresponding JSON. But if the data in the object returned is not
2712 valid, that would mean a violation of the contract with the client,
2713 so it's an error from the API developer. So, FastAPI will raise an
2714 error and return a 500 error code (Internal Server Error).
2716 Read more about it in the
2717 [FastAPI docs for Response Model](https://fastapi.tiangolo.com/tutorial/response-model/).
2718 """
2719 ),
2720 ] = Default(None),
2721 status_code: Annotated[
2722 Optional[int],
2723 Doc(
2724 """
2725 The default status code to be used for the response.
2727 You could override the status code by returning a response directly.
2729 Read more about it in the
2730 [FastAPI docs for Response Status Code](https://fastapi.tiangolo.com/tutorial/response-status-code/).
2731 """
2732 ),
2733 ] = None,
2734 tags: Annotated[
2735 Optional[List[Union[str, Enum]]],
2736 Doc(
2737 """
2738 A list of tags to be applied to the *path operation*.
2740 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
2742 Read more about it in the
2743 [FastAPI docs for Path Operation Configuration](https://fastapi.tiangolo.com/tutorial/path-operation-configuration/#tags).
2744 """
2745 ),
2746 ] = None,
2747 dependencies: Annotated[
2748 Optional[Sequence[Depends]],
2749 Doc(
2750 """
2751 A list of dependencies (using `Depends()`) to be applied to the
2752 *path operation*.
2754 Read more about it in the
2755 [FastAPI docs for Dependencies in path operation decorators](https://fastapi.tiangolo.com/tutorial/dependencies/dependencies-in-path-operation-decorators/).
2756 """
2757 ),
2758 ] = None,
2759 summary: Annotated[
2760 Optional[str],
2761 Doc(
2762 """
2763 A summary for the *path operation*.
2765 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
2767 Read more about it in the
2768 [FastAPI docs for Path Operation Configuration](https://fastapi.tiangolo.com/tutorial/path-operation-configuration/).
2769 """
2770 ),
2771 ] = None,
2772 description: Annotated[
2773 Optional[str],
2774 Doc(
2775 """
2776 A description for the *path operation*.
2778 If not provided, it will be extracted automatically from the docstring
2779 of the *path operation function*.
2781 It can contain Markdown.
2783 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
2785 Read more about it in the
2786 [FastAPI docs for Path Operation Configuration](https://fastapi.tiangolo.com/tutorial/path-operation-configuration/).
2787 """
2788 ),
2789 ] = None,
2790 response_description: Annotated[
2791 str,
2792 Doc(
2793 """
2794 The description for the default response.
2796 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
2797 """
2798 ),
2799 ] = "Successful Response",
2800 responses: Annotated[
2801 Optional[Dict[Union[int, str], Dict[str, Any]]],
2802 Doc(
2803 """
2804 Additional responses that could be returned by this *path operation*.
2806 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
2807 """
2808 ),
2809 ] = None,
2810 deprecated: Annotated[
2811 Optional[bool],
2812 Doc(
2813 """
2814 Mark this *path operation* as deprecated.
2816 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
2817 """
2818 ),
2819 ] = None,
2820 operation_id: Annotated[
2821 Optional[str],
2822 Doc(
2823 """
2824 Custom operation ID to be used by this *path operation*.
2826 By default, it is generated automatically.
2828 If you provide a custom operation ID, you need to make sure it is
2829 unique for the whole API.
2831 You can customize the
2832 operation ID generation with the parameter
2833 `generate_unique_id_function` in the `FastAPI` class.
2835 Read more about it in the
2836 [FastAPI docs about how to Generate Clients](https://fastapi.tiangolo.com/advanced/generate-clients/#custom-generate-unique-id-function).
2837 """
2838 ),
2839 ] = None,
2840 response_model_include: Annotated[
2841 Optional[IncEx],
2842 Doc(
2843 """
2844 Configuration passed to Pydantic to include only certain fields in the
2845 response data.
2847 Read more about it in the
2848 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_include-and-response_model_exclude).
2849 """
2850 ),
2851 ] = None,
2852 response_model_exclude: Annotated[
2853 Optional[IncEx],
2854 Doc(
2855 """
2856 Configuration passed to Pydantic to exclude certain fields in the
2857 response data.
2859 Read more about it in the
2860 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_include-and-response_model_exclude).
2861 """
2862 ),
2863 ] = None,
2864 response_model_by_alias: Annotated[
2865 bool,
2866 Doc(
2867 """
2868 Configuration passed to Pydantic to define if the response model
2869 should be serialized by alias when an alias is used.
2871 Read more about it in the
2872 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_include-and-response_model_exclude).
2873 """
2874 ),
2875 ] = True,
2876 response_model_exclude_unset: Annotated[
2877 bool,
2878 Doc(
2879 """
2880 Configuration passed to Pydantic to define if the response data
2881 should have all the fields, including the ones that were not set and
2882 have their default values. This is different from
2883 `response_model_exclude_defaults` in that if the fields are set,
2884 they will be included in the response, even if the value is the same
2885 as the default.
2887 When `True`, default values are omitted from the response.
2889 Read more about it in the
2890 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#use-the-response_model_exclude_unset-parameter).
2891 """
2892 ),
2893 ] = False,
2894 response_model_exclude_defaults: Annotated[
2895 bool,
2896 Doc(
2897 """
2898 Configuration passed to Pydantic to define if the response data
2899 should have all the fields, including the ones that have the same value
2900 as the default. This is different from `response_model_exclude_unset`
2901 in that if the fields are set but contain the same default values,
2902 they will be excluded from the response.
2904 When `True`, default values are omitted from the response.
2906 Read more about it in the
2907 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#use-the-response_model_exclude_unset-parameter).
2908 """
2909 ),
2910 ] = False,
2911 response_model_exclude_none: Annotated[
2912 bool,
2913 Doc(
2914 """
2915 Configuration passed to Pydantic to define if the response data should
2916 exclude fields set to `None`.
2918 This is much simpler (less smart) than `response_model_exclude_unset`
2919 and `response_model_exclude_defaults`. You probably want to use one of
2920 those two instead of this one, as those allow returning `None` values
2921 when it makes sense.
2923 Read more about it in the
2924 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_exclude_none).
2925 """
2926 ),
2927 ] = False,
2928 include_in_schema: Annotated[
2929 bool,
2930 Doc(
2931 """
2932 Include this *path operation* in the generated OpenAPI schema.
2934 This affects the generated OpenAPI (e.g. visible at `/docs`).
2936 Read more about it in the
2937 [FastAPI docs for Query Parameters and String Validations](https://fastapi.tiangolo.com/tutorial/query-params-str-validations/#exclude-parameters-from-openapi).
2938 """
2939 ),
2940 ] = True,
2941 response_class: Annotated[
2942 Type[Response],
2943 Doc(
2944 """
2945 Response class to be used for this *path operation*.
2947 This will not be used if you return a response directly.
2949 Read more about it in the
2950 [FastAPI docs for Custom Response - HTML, Stream, File, others](https://fastapi.tiangolo.com/advanced/custom-response/#redirectresponse).
2951 """
2952 ),
2953 ] = Default(JSONResponse),
2954 name: Annotated[
2955 Optional[str],
2956 Doc(
2957 """
2958 Name for this *path operation*. Only used internally.
2959 """
2960 ),
2961 ] = None,
2962 callbacks: Annotated[
2963 Optional[List[BaseRoute]],
2964 Doc(
2965 """
2966 List of *path operations* that will be used as OpenAPI callbacks.
2968 This is only for OpenAPI documentation, the callbacks won't be used
2969 directly.
2971 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
2973 Read more about it in the
2974 [FastAPI docs for OpenAPI Callbacks](https://fastapi.tiangolo.com/advanced/openapi-callbacks/).
2975 """
2976 ),
2977 ] = None,
2978 openapi_extra: Annotated[
2979 Optional[Dict[str, Any]],
2980 Doc(
2981 """
2982 Extra metadata to be included in the OpenAPI schema for this *path
2983 operation*.
2985 Read more about it in the
2986 [FastAPI docs for Path Operation Advanced Configuration](https://fastapi.tiangolo.com/advanced/path-operation-advanced-configuration/#custom-openapi-path-operation-schema).
2987 """
2988 ),
2989 ] = None,
2990 generate_unique_id_function: Annotated[
2991 Callable[[routing.APIRoute], str],
2992 Doc(
2993 """
2994 Customize the function used to generate unique IDs for the *path
2995 operations* shown in the generated OpenAPI.
2997 This is particularly useful when automatically generating clients or
2998 SDKs for your API.
3000 Read more about it in the
3001 [FastAPI docs about how to Generate Clients](https://fastapi.tiangolo.com/advanced/generate-clients/#custom-generate-unique-id-function).
3002 """
3003 ),
3004 ] = Default(generate_unique_id),
3005 ) -> Callable[[DecoratedCallable], DecoratedCallable]:
3006 """
3007 Add a *path operation* using an HTTP DELETE operation.
3009 ## Example
3011 ```python
3012 from fastapi import FastAPI
3014 app = FastAPI()
3016 @app.delete("/items/{item_id}")
3017 def delete_item(item_id: str):
3018 return {"message": "Item deleted"}
3019 ```
3020 """
3021 return self.router.delete( 1abcdefg
3022 path,
3023 response_model=response_model,
3024 status_code=status_code,
3025 tags=tags,
3026 dependencies=dependencies,
3027 summary=summary,
3028 description=description,
3029 response_description=response_description,
3030 responses=responses,
3031 deprecated=deprecated,
3032 operation_id=operation_id,
3033 response_model_include=response_model_include,
3034 response_model_exclude=response_model_exclude,
3035 response_model_by_alias=response_model_by_alias,
3036 response_model_exclude_unset=response_model_exclude_unset,
3037 response_model_exclude_defaults=response_model_exclude_defaults,
3038 response_model_exclude_none=response_model_exclude_none,
3039 include_in_schema=include_in_schema,
3040 response_class=response_class,
3041 name=name,
3042 callbacks=callbacks,
3043 openapi_extra=openapi_extra,
3044 generate_unique_id_function=generate_unique_id_function,
3045 )
3047 def options( 2a b c d e f g ^U
3048 self,
3049 path: Annotated[
3050 str,
3051 Doc(
3052 """
3053 The URL path to be used for this *path operation*.
3055 For example, in `http://example.com/items`, the path is `/items`.
3056 """
3057 ),
3058 ],
3059 *,
3060 response_model: Annotated[
3061 Any,
3062 Doc(
3063 """
3064 The type to use for the response.
3066 It could be any valid Pydantic *field* type. So, it doesn't have to
3067 be a Pydantic model, it could be other things, like a `list`, `dict`,
3068 etc.
3070 It will be used for:
3072 * Documentation: the generated OpenAPI (and the UI at `/docs`) will
3073 show it as the response (JSON Schema).
3074 * Serialization: you could return an arbitrary object and the
3075 `response_model` would be used to serialize that object into the
3076 corresponding JSON.
3077 * Filtering: the JSON sent to the client will only contain the data
3078 (fields) defined in the `response_model`. If you returned an object
3079 that contains an attribute `password` but the `response_model` does
3080 not include that field, the JSON sent to the client would not have
3081 that `password`.
3082 * Validation: whatever you return will be serialized with the
3083 `response_model`, converting any data as necessary to generate the
3084 corresponding JSON. But if the data in the object returned is not
3085 valid, that would mean a violation of the contract with the client,
3086 so it's an error from the API developer. So, FastAPI will raise an
3087 error and return a 500 error code (Internal Server Error).
3089 Read more about it in the
3090 [FastAPI docs for Response Model](https://fastapi.tiangolo.com/tutorial/response-model/).
3091 """
3092 ),
3093 ] = Default(None),
3094 status_code: Annotated[
3095 Optional[int],
3096 Doc(
3097 """
3098 The default status code to be used for the response.
3100 You could override the status code by returning a response directly.
3102 Read more about it in the
3103 [FastAPI docs for Response Status Code](https://fastapi.tiangolo.com/tutorial/response-status-code/).
3104 """
3105 ),
3106 ] = None,
3107 tags: Annotated[
3108 Optional[List[Union[str, Enum]]],
3109 Doc(
3110 """
3111 A list of tags to be applied to the *path operation*.
3113 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
3115 Read more about it in the
3116 [FastAPI docs for Path Operation Configuration](https://fastapi.tiangolo.com/tutorial/path-operation-configuration/#tags).
3117 """
3118 ),
3119 ] = None,
3120 dependencies: Annotated[
3121 Optional[Sequence[Depends]],
3122 Doc(
3123 """
3124 A list of dependencies (using `Depends()`) to be applied to the
3125 *path operation*.
3127 Read more about it in the
3128 [FastAPI docs for Dependencies in path operation decorators](https://fastapi.tiangolo.com/tutorial/dependencies/dependencies-in-path-operation-decorators/).
3129 """
3130 ),
3131 ] = None,
3132 summary: Annotated[
3133 Optional[str],
3134 Doc(
3135 """
3136 A summary for the *path operation*.
3138 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
3140 Read more about it in the
3141 [FastAPI docs for Path Operation Configuration](https://fastapi.tiangolo.com/tutorial/path-operation-configuration/).
3142 """
3143 ),
3144 ] = None,
3145 description: Annotated[
3146 Optional[str],
3147 Doc(
3148 """
3149 A description for the *path operation*.
3151 If not provided, it will be extracted automatically from the docstring
3152 of the *path operation function*.
3154 It can contain Markdown.
3156 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
3158 Read more about it in the
3159 [FastAPI docs for Path Operation Configuration](https://fastapi.tiangolo.com/tutorial/path-operation-configuration/).
3160 """
3161 ),
3162 ] = None,
3163 response_description: Annotated[
3164 str,
3165 Doc(
3166 """
3167 The description for the default response.
3169 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
3170 """
3171 ),
3172 ] = "Successful Response",
3173 responses: Annotated[
3174 Optional[Dict[Union[int, str], Dict[str, Any]]],
3175 Doc(
3176 """
3177 Additional responses that could be returned by this *path operation*.
3179 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
3180 """
3181 ),
3182 ] = None,
3183 deprecated: Annotated[
3184 Optional[bool],
3185 Doc(
3186 """
3187 Mark this *path operation* as deprecated.
3189 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
3190 """
3191 ),
3192 ] = None,
3193 operation_id: Annotated[
3194 Optional[str],
3195 Doc(
3196 """
3197 Custom operation ID to be used by this *path operation*.
3199 By default, it is generated automatically.
3201 If you provide a custom operation ID, you need to make sure it is
3202 unique for the whole API.
3204 You can customize the
3205 operation ID generation with the parameter
3206 `generate_unique_id_function` in the `FastAPI` class.
3208 Read more about it in the
3209 [FastAPI docs about how to Generate Clients](https://fastapi.tiangolo.com/advanced/generate-clients/#custom-generate-unique-id-function).
3210 """
3211 ),
3212 ] = None,
3213 response_model_include: Annotated[
3214 Optional[IncEx],
3215 Doc(
3216 """
3217 Configuration passed to Pydantic to include only certain fields in the
3218 response data.
3220 Read more about it in the
3221 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_include-and-response_model_exclude).
3222 """
3223 ),
3224 ] = None,
3225 response_model_exclude: Annotated[
3226 Optional[IncEx],
3227 Doc(
3228 """
3229 Configuration passed to Pydantic to exclude certain fields in the
3230 response data.
3232 Read more about it in the
3233 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_include-and-response_model_exclude).
3234 """
3235 ),
3236 ] = None,
3237 response_model_by_alias: Annotated[
3238 bool,
3239 Doc(
3240 """
3241 Configuration passed to Pydantic to define if the response model
3242 should be serialized by alias when an alias is used.
3244 Read more about it in the
3245 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_include-and-response_model_exclude).
3246 """
3247 ),
3248 ] = True,
3249 response_model_exclude_unset: Annotated[
3250 bool,
3251 Doc(
3252 """
3253 Configuration passed to Pydantic to define if the response data
3254 should have all the fields, including the ones that were not set and
3255 have their default values. This is different from
3256 `response_model_exclude_defaults` in that if the fields are set,
3257 they will be included in the response, even if the value is the same
3258 as the default.
3260 When `True`, default values are omitted from the response.
3262 Read more about it in the
3263 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#use-the-response_model_exclude_unset-parameter).
3264 """
3265 ),
3266 ] = False,
3267 response_model_exclude_defaults: Annotated[
3268 bool,
3269 Doc(
3270 """
3271 Configuration passed to Pydantic to define if the response data
3272 should have all the fields, including the ones that have the same value
3273 as the default. This is different from `response_model_exclude_unset`
3274 in that if the fields are set but contain the same default values,
3275 they will be excluded from the response.
3277 When `True`, default values are omitted from the response.
3279 Read more about it in the
3280 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#use-the-response_model_exclude_unset-parameter).
3281 """
3282 ),
3283 ] = False,
3284 response_model_exclude_none: Annotated[
3285 bool,
3286 Doc(
3287 """
3288 Configuration passed to Pydantic to define if the response data should
3289 exclude fields set to `None`.
3291 This is much simpler (less smart) than `response_model_exclude_unset`
3292 and `response_model_exclude_defaults`. You probably want to use one of
3293 those two instead of this one, as those allow returning `None` values
3294 when it makes sense.
3296 Read more about it in the
3297 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_exclude_none).
3298 """
3299 ),
3300 ] = False,
3301 include_in_schema: Annotated[
3302 bool,
3303 Doc(
3304 """
3305 Include this *path operation* in the generated OpenAPI schema.
3307 This affects the generated OpenAPI (e.g. visible at `/docs`).
3309 Read more about it in the
3310 [FastAPI docs for Query Parameters and String Validations](https://fastapi.tiangolo.com/tutorial/query-params-str-validations/#exclude-parameters-from-openapi).
3311 """
3312 ),
3313 ] = True,
3314 response_class: Annotated[
3315 Type[Response],
3316 Doc(
3317 """
3318 Response class to be used for this *path operation*.
3320 This will not be used if you return a response directly.
3322 Read more about it in the
3323 [FastAPI docs for Custom Response - HTML, Stream, File, others](https://fastapi.tiangolo.com/advanced/custom-response/#redirectresponse).
3324 """
3325 ),
3326 ] = Default(JSONResponse),
3327 name: Annotated[
3328 Optional[str],
3329 Doc(
3330 """
3331 Name for this *path operation*. Only used internally.
3332 """
3333 ),
3334 ] = None,
3335 callbacks: Annotated[
3336 Optional[List[BaseRoute]],
3337 Doc(
3338 """
3339 List of *path operations* that will be used as OpenAPI callbacks.
3341 This is only for OpenAPI documentation, the callbacks won't be used
3342 directly.
3344 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
3346 Read more about it in the
3347 [FastAPI docs for OpenAPI Callbacks](https://fastapi.tiangolo.com/advanced/openapi-callbacks/).
3348 """
3349 ),
3350 ] = None,
3351 openapi_extra: Annotated[
3352 Optional[Dict[str, Any]],
3353 Doc(
3354 """
3355 Extra metadata to be included in the OpenAPI schema for this *path
3356 operation*.
3358 Read more about it in the
3359 [FastAPI docs for Path Operation Advanced Configuration](https://fastapi.tiangolo.com/advanced/path-operation-advanced-configuration/#custom-openapi-path-operation-schema).
3360 """
3361 ),
3362 ] = None,
3363 generate_unique_id_function: Annotated[
3364 Callable[[routing.APIRoute], str],
3365 Doc(
3366 """
3367 Customize the function used to generate unique IDs for the *path
3368 operations* shown in the generated OpenAPI.
3370 This is particularly useful when automatically generating clients or
3371 SDKs for your API.
3373 Read more about it in the
3374 [FastAPI docs about how to Generate Clients](https://fastapi.tiangolo.com/advanced/generate-clients/#custom-generate-unique-id-function).
3375 """
3376 ),
3377 ] = Default(generate_unique_id),
3378 ) -> Callable[[DecoratedCallable], DecoratedCallable]:
3379 """
3380 Add a *path operation* using an HTTP OPTIONS operation.
3382 ## Example
3384 ```python
3385 from fastapi import FastAPI
3387 app = FastAPI()
3389 @app.options("/items/")
3390 def get_item_options():
3391 return {"additions": ["Aji", "Guacamole"]}
3392 ```
3393 """
3394 return self.router.options( 1abcdefg
3395 path,
3396 response_model=response_model,
3397 status_code=status_code,
3398 tags=tags,
3399 dependencies=dependencies,
3400 summary=summary,
3401 description=description,
3402 response_description=response_description,
3403 responses=responses,
3404 deprecated=deprecated,
3405 operation_id=operation_id,
3406 response_model_include=response_model_include,
3407 response_model_exclude=response_model_exclude,
3408 response_model_by_alias=response_model_by_alias,
3409 response_model_exclude_unset=response_model_exclude_unset,
3410 response_model_exclude_defaults=response_model_exclude_defaults,
3411 response_model_exclude_none=response_model_exclude_none,
3412 include_in_schema=include_in_schema,
3413 response_class=response_class,
3414 name=name,
3415 callbacks=callbacks,
3416 openapi_extra=openapi_extra,
3417 generate_unique_id_function=generate_unique_id_function,
3418 )
3420 def head( 2a b c d e f g ^U
3421 self,
3422 path: Annotated[
3423 str,
3424 Doc(
3425 """
3426 The URL path to be used for this *path operation*.
3428 For example, in `http://example.com/items`, the path is `/items`.
3429 """
3430 ),
3431 ],
3432 *,
3433 response_model: Annotated[
3434 Any,
3435 Doc(
3436 """
3437 The type to use for the response.
3439 It could be any valid Pydantic *field* type. So, it doesn't have to
3440 be a Pydantic model, it could be other things, like a `list`, `dict`,
3441 etc.
3443 It will be used for:
3445 * Documentation: the generated OpenAPI (and the UI at `/docs`) will
3446 show it as the response (JSON Schema).
3447 * Serialization: you could return an arbitrary object and the
3448 `response_model` would be used to serialize that object into the
3449 corresponding JSON.
3450 * Filtering: the JSON sent to the client will only contain the data
3451 (fields) defined in the `response_model`. If you returned an object
3452 that contains an attribute `password` but the `response_model` does
3453 not include that field, the JSON sent to the client would not have
3454 that `password`.
3455 * Validation: whatever you return will be serialized with the
3456 `response_model`, converting any data as necessary to generate the
3457 corresponding JSON. But if the data in the object returned is not
3458 valid, that would mean a violation of the contract with the client,
3459 so it's an error from the API developer. So, FastAPI will raise an
3460 error and return a 500 error code (Internal Server Error).
3462 Read more about it in the
3463 [FastAPI docs for Response Model](https://fastapi.tiangolo.com/tutorial/response-model/).
3464 """
3465 ),
3466 ] = Default(None),
3467 status_code: Annotated[
3468 Optional[int],
3469 Doc(
3470 """
3471 The default status code to be used for the response.
3473 You could override the status code by returning a response directly.
3475 Read more about it in the
3476 [FastAPI docs for Response Status Code](https://fastapi.tiangolo.com/tutorial/response-status-code/).
3477 """
3478 ),
3479 ] = None,
3480 tags: Annotated[
3481 Optional[List[Union[str, Enum]]],
3482 Doc(
3483 """
3484 A list of tags to be applied to the *path operation*.
3486 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
3488 Read more about it in the
3489 [FastAPI docs for Path Operation Configuration](https://fastapi.tiangolo.com/tutorial/path-operation-configuration/#tags).
3490 """
3491 ),
3492 ] = None,
3493 dependencies: Annotated[
3494 Optional[Sequence[Depends]],
3495 Doc(
3496 """
3497 A list of dependencies (using `Depends()`) to be applied to the
3498 *path operation*.
3500 Read more about it in the
3501 [FastAPI docs for Dependencies in path operation decorators](https://fastapi.tiangolo.com/tutorial/dependencies/dependencies-in-path-operation-decorators/).
3502 """
3503 ),
3504 ] = None,
3505 summary: Annotated[
3506 Optional[str],
3507 Doc(
3508 """
3509 A summary for the *path operation*.
3511 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
3513 Read more about it in the
3514 [FastAPI docs for Path Operation Configuration](https://fastapi.tiangolo.com/tutorial/path-operation-configuration/).
3515 """
3516 ),
3517 ] = None,
3518 description: Annotated[
3519 Optional[str],
3520 Doc(
3521 """
3522 A description for the *path operation*.
3524 If not provided, it will be extracted automatically from the docstring
3525 of the *path operation function*.
3527 It can contain Markdown.
3529 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
3531 Read more about it in the
3532 [FastAPI docs for Path Operation Configuration](https://fastapi.tiangolo.com/tutorial/path-operation-configuration/).
3533 """
3534 ),
3535 ] = None,
3536 response_description: Annotated[
3537 str,
3538 Doc(
3539 """
3540 The description for the default response.
3542 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
3543 """
3544 ),
3545 ] = "Successful Response",
3546 responses: Annotated[
3547 Optional[Dict[Union[int, str], Dict[str, Any]]],
3548 Doc(
3549 """
3550 Additional responses that could be returned by this *path operation*.
3552 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
3553 """
3554 ),
3555 ] = None,
3556 deprecated: Annotated[
3557 Optional[bool],
3558 Doc(
3559 """
3560 Mark this *path operation* as deprecated.
3562 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
3563 """
3564 ),
3565 ] = None,
3566 operation_id: Annotated[
3567 Optional[str],
3568 Doc(
3569 """
3570 Custom operation ID to be used by this *path operation*.
3572 By default, it is generated automatically.
3574 If you provide a custom operation ID, you need to make sure it is
3575 unique for the whole API.
3577 You can customize the
3578 operation ID generation with the parameter
3579 `generate_unique_id_function` in the `FastAPI` class.
3581 Read more about it in the
3582 [FastAPI docs about how to Generate Clients](https://fastapi.tiangolo.com/advanced/generate-clients/#custom-generate-unique-id-function).
3583 """
3584 ),
3585 ] = None,
3586 response_model_include: Annotated[
3587 Optional[IncEx],
3588 Doc(
3589 """
3590 Configuration passed to Pydantic to include only certain fields in the
3591 response data.
3593 Read more about it in the
3594 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_include-and-response_model_exclude).
3595 """
3596 ),
3597 ] = None,
3598 response_model_exclude: Annotated[
3599 Optional[IncEx],
3600 Doc(
3601 """
3602 Configuration passed to Pydantic to exclude certain fields in the
3603 response data.
3605 Read more about it in the
3606 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_include-and-response_model_exclude).
3607 """
3608 ),
3609 ] = None,
3610 response_model_by_alias: Annotated[
3611 bool,
3612 Doc(
3613 """
3614 Configuration passed to Pydantic to define if the response model
3615 should be serialized by alias when an alias is used.
3617 Read more about it in the
3618 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_include-and-response_model_exclude).
3619 """
3620 ),
3621 ] = True,
3622 response_model_exclude_unset: Annotated[
3623 bool,
3624 Doc(
3625 """
3626 Configuration passed to Pydantic to define if the response data
3627 should have all the fields, including the ones that were not set and
3628 have their default values. This is different from
3629 `response_model_exclude_defaults` in that if the fields are set,
3630 they will be included in the response, even if the value is the same
3631 as the default.
3633 When `True`, default values are omitted from the response.
3635 Read more about it in the
3636 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#use-the-response_model_exclude_unset-parameter).
3637 """
3638 ),
3639 ] = False,
3640 response_model_exclude_defaults: Annotated[
3641 bool,
3642 Doc(
3643 """
3644 Configuration passed to Pydantic to define if the response data
3645 should have all the fields, including the ones that have the same value
3646 as the default. This is different from `response_model_exclude_unset`
3647 in that if the fields are set but contain the same default values,
3648 they will be excluded from the response.
3650 When `True`, default values are omitted from the response.
3652 Read more about it in the
3653 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#use-the-response_model_exclude_unset-parameter).
3654 """
3655 ),
3656 ] = False,
3657 response_model_exclude_none: Annotated[
3658 bool,
3659 Doc(
3660 """
3661 Configuration passed to Pydantic to define if the response data should
3662 exclude fields set to `None`.
3664 This is much simpler (less smart) than `response_model_exclude_unset`
3665 and `response_model_exclude_defaults`. You probably want to use one of
3666 those two instead of this one, as those allow returning `None` values
3667 when it makes sense.
3669 Read more about it in the
3670 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_exclude_none).
3671 """
3672 ),
3673 ] = False,
3674 include_in_schema: Annotated[
3675 bool,
3676 Doc(
3677 """
3678 Include this *path operation* in the generated OpenAPI schema.
3680 This affects the generated OpenAPI (e.g. visible at `/docs`).
3682 Read more about it in the
3683 [FastAPI docs for Query Parameters and String Validations](https://fastapi.tiangolo.com/tutorial/query-params-str-validations/#exclude-parameters-from-openapi).
3684 """
3685 ),
3686 ] = True,
3687 response_class: Annotated[
3688 Type[Response],
3689 Doc(
3690 """
3691 Response class to be used for this *path operation*.
3693 This will not be used if you return a response directly.
3695 Read more about it in the
3696 [FastAPI docs for Custom Response - HTML, Stream, File, others](https://fastapi.tiangolo.com/advanced/custom-response/#redirectresponse).
3697 """
3698 ),
3699 ] = Default(JSONResponse),
3700 name: Annotated[
3701 Optional[str],
3702 Doc(
3703 """
3704 Name for this *path operation*. Only used internally.
3705 """
3706 ),
3707 ] = None,
3708 callbacks: Annotated[
3709 Optional[List[BaseRoute]],
3710 Doc(
3711 """
3712 List of *path operations* that will be used as OpenAPI callbacks.
3714 This is only for OpenAPI documentation, the callbacks won't be used
3715 directly.
3717 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
3719 Read more about it in the
3720 [FastAPI docs for OpenAPI Callbacks](https://fastapi.tiangolo.com/advanced/openapi-callbacks/).
3721 """
3722 ),
3723 ] = None,
3724 openapi_extra: Annotated[
3725 Optional[Dict[str, Any]],
3726 Doc(
3727 """
3728 Extra metadata to be included in the OpenAPI schema for this *path
3729 operation*.
3731 Read more about it in the
3732 [FastAPI docs for Path Operation Advanced Configuration](https://fastapi.tiangolo.com/advanced/path-operation-advanced-configuration/#custom-openapi-path-operation-schema).
3733 """
3734 ),
3735 ] = None,
3736 generate_unique_id_function: Annotated[
3737 Callable[[routing.APIRoute], str],
3738 Doc(
3739 """
3740 Customize the function used to generate unique IDs for the *path
3741 operations* shown in the generated OpenAPI.
3743 This is particularly useful when automatically generating clients or
3744 SDKs for your API.
3746 Read more about it in the
3747 [FastAPI docs about how to Generate Clients](https://fastapi.tiangolo.com/advanced/generate-clients/#custom-generate-unique-id-function).
3748 """
3749 ),
3750 ] = Default(generate_unique_id),
3751 ) -> Callable[[DecoratedCallable], DecoratedCallable]:
3752 """
3753 Add a *path operation* using an HTTP HEAD operation.
3755 ## Example
3757 ```python
3758 from fastapi import FastAPI, Response
3760 app = FastAPI()
3762 @app.head("/items/", status_code=204)
3763 def get_items_headers(response: Response):
3764 response.headers["X-Cat-Dog"] = "Alone in the world"
3765 ```
3766 """
3767 return self.router.head( 1abcdefg
3768 path,
3769 response_model=response_model,
3770 status_code=status_code,
3771 tags=tags,
3772 dependencies=dependencies,
3773 summary=summary,
3774 description=description,
3775 response_description=response_description,
3776 responses=responses,
3777 deprecated=deprecated,
3778 operation_id=operation_id,
3779 response_model_include=response_model_include,
3780 response_model_exclude=response_model_exclude,
3781 response_model_by_alias=response_model_by_alias,
3782 response_model_exclude_unset=response_model_exclude_unset,
3783 response_model_exclude_defaults=response_model_exclude_defaults,
3784 response_model_exclude_none=response_model_exclude_none,
3785 include_in_schema=include_in_schema,
3786 response_class=response_class,
3787 name=name,
3788 callbacks=callbacks,
3789 openapi_extra=openapi_extra,
3790 generate_unique_id_function=generate_unique_id_function,
3791 )
3793 def patch( 2a b c d e f g ^U
3794 self,
3795 path: Annotated[
3796 str,
3797 Doc(
3798 """
3799 The URL path to be used for this *path operation*.
3801 For example, in `http://example.com/items`, the path is `/items`.
3802 """
3803 ),
3804 ],
3805 *,
3806 response_model: Annotated[
3807 Any,
3808 Doc(
3809 """
3810 The type to use for the response.
3812 It could be any valid Pydantic *field* type. So, it doesn't have to
3813 be a Pydantic model, it could be other things, like a `list`, `dict`,
3814 etc.
3816 It will be used for:
3818 * Documentation: the generated OpenAPI (and the UI at `/docs`) will
3819 show it as the response (JSON Schema).
3820 * Serialization: you could return an arbitrary object and the
3821 `response_model` would be used to serialize that object into the
3822 corresponding JSON.
3823 * Filtering: the JSON sent to the client will only contain the data
3824 (fields) defined in the `response_model`. If you returned an object
3825 that contains an attribute `password` but the `response_model` does
3826 not include that field, the JSON sent to the client would not have
3827 that `password`.
3828 * Validation: whatever you return will be serialized with the
3829 `response_model`, converting any data as necessary to generate the
3830 corresponding JSON. But if the data in the object returned is not
3831 valid, that would mean a violation of the contract with the client,
3832 so it's an error from the API developer. So, FastAPI will raise an
3833 error and return a 500 error code (Internal Server Error).
3835 Read more about it in the
3836 [FastAPI docs for Response Model](https://fastapi.tiangolo.com/tutorial/response-model/).
3837 """
3838 ),
3839 ] = Default(None),
3840 status_code: Annotated[
3841 Optional[int],
3842 Doc(
3843 """
3844 The default status code to be used for the response.
3846 You could override the status code by returning a response directly.
3848 Read more about it in the
3849 [FastAPI docs for Response Status Code](https://fastapi.tiangolo.com/tutorial/response-status-code/).
3850 """
3851 ),
3852 ] = None,
3853 tags: Annotated[
3854 Optional[List[Union[str, Enum]]],
3855 Doc(
3856 """
3857 A list of tags to be applied to the *path operation*.
3859 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
3861 Read more about it in the
3862 [FastAPI docs for Path Operation Configuration](https://fastapi.tiangolo.com/tutorial/path-operation-configuration/#tags).
3863 """
3864 ),
3865 ] = None,
3866 dependencies: Annotated[
3867 Optional[Sequence[Depends]],
3868 Doc(
3869 """
3870 A list of dependencies (using `Depends()`) to be applied to the
3871 *path operation*.
3873 Read more about it in the
3874 [FastAPI docs for Dependencies in path operation decorators](https://fastapi.tiangolo.com/tutorial/dependencies/dependencies-in-path-operation-decorators/).
3875 """
3876 ),
3877 ] = None,
3878 summary: Annotated[
3879 Optional[str],
3880 Doc(
3881 """
3882 A summary for the *path operation*.
3884 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
3886 Read more about it in the
3887 [FastAPI docs for Path Operation Configuration](https://fastapi.tiangolo.com/tutorial/path-operation-configuration/).
3888 """
3889 ),
3890 ] = None,
3891 description: Annotated[
3892 Optional[str],
3893 Doc(
3894 """
3895 A description for the *path operation*.
3897 If not provided, it will be extracted automatically from the docstring
3898 of the *path operation function*.
3900 It can contain Markdown.
3902 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
3904 Read more about it in the
3905 [FastAPI docs for Path Operation Configuration](https://fastapi.tiangolo.com/tutorial/path-operation-configuration/).
3906 """
3907 ),
3908 ] = None,
3909 response_description: Annotated[
3910 str,
3911 Doc(
3912 """
3913 The description for the default response.
3915 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
3916 """
3917 ),
3918 ] = "Successful Response",
3919 responses: Annotated[
3920 Optional[Dict[Union[int, str], Dict[str, Any]]],
3921 Doc(
3922 """
3923 Additional responses that could be returned by this *path operation*.
3925 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
3926 """
3927 ),
3928 ] = None,
3929 deprecated: Annotated[
3930 Optional[bool],
3931 Doc(
3932 """
3933 Mark this *path operation* as deprecated.
3935 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
3936 """
3937 ),
3938 ] = None,
3939 operation_id: Annotated[
3940 Optional[str],
3941 Doc(
3942 """
3943 Custom operation ID to be used by this *path operation*.
3945 By default, it is generated automatically.
3947 If you provide a custom operation ID, you need to make sure it is
3948 unique for the whole API.
3950 You can customize the
3951 operation ID generation with the parameter
3952 `generate_unique_id_function` in the `FastAPI` class.
3954 Read more about it in the
3955 [FastAPI docs about how to Generate Clients](https://fastapi.tiangolo.com/advanced/generate-clients/#custom-generate-unique-id-function).
3956 """
3957 ),
3958 ] = None,
3959 response_model_include: Annotated[
3960 Optional[IncEx],
3961 Doc(
3962 """
3963 Configuration passed to Pydantic to include only certain fields in the
3964 response data.
3966 Read more about it in the
3967 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_include-and-response_model_exclude).
3968 """
3969 ),
3970 ] = None,
3971 response_model_exclude: Annotated[
3972 Optional[IncEx],
3973 Doc(
3974 """
3975 Configuration passed to Pydantic to exclude certain fields in the
3976 response data.
3978 Read more about it in the
3979 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_include-and-response_model_exclude).
3980 """
3981 ),
3982 ] = None,
3983 response_model_by_alias: Annotated[
3984 bool,
3985 Doc(
3986 """
3987 Configuration passed to Pydantic to define if the response model
3988 should be serialized by alias when an alias is used.
3990 Read more about it in the
3991 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_include-and-response_model_exclude).
3992 """
3993 ),
3994 ] = True,
3995 response_model_exclude_unset: Annotated[
3996 bool,
3997 Doc(
3998 """
3999 Configuration passed to Pydantic to define if the response data
4000 should have all the fields, including the ones that were not set and
4001 have their default values. This is different from
4002 `response_model_exclude_defaults` in that if the fields are set,
4003 they will be included in the response, even if the value is the same
4004 as the default.
4006 When `True`, default values are omitted from the response.
4008 Read more about it in the
4009 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#use-the-response_model_exclude_unset-parameter).
4010 """
4011 ),
4012 ] = False,
4013 response_model_exclude_defaults: Annotated[
4014 bool,
4015 Doc(
4016 """
4017 Configuration passed to Pydantic to define if the response data
4018 should have all the fields, including the ones that have the same value
4019 as the default. This is different from `response_model_exclude_unset`
4020 in that if the fields are set but contain the same default values,
4021 they will be excluded from the response.
4023 When `True`, default values are omitted from the response.
4025 Read more about it in the
4026 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#use-the-response_model_exclude_unset-parameter).
4027 """
4028 ),
4029 ] = False,
4030 response_model_exclude_none: Annotated[
4031 bool,
4032 Doc(
4033 """
4034 Configuration passed to Pydantic to define if the response data should
4035 exclude fields set to `None`.
4037 This is much simpler (less smart) than `response_model_exclude_unset`
4038 and `response_model_exclude_defaults`. You probably want to use one of
4039 those two instead of this one, as those allow returning `None` values
4040 when it makes sense.
4042 Read more about it in the
4043 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_exclude_none).
4044 """
4045 ),
4046 ] = False,
4047 include_in_schema: Annotated[
4048 bool,
4049 Doc(
4050 """
4051 Include this *path operation* in the generated OpenAPI schema.
4053 This affects the generated OpenAPI (e.g. visible at `/docs`).
4055 Read more about it in the
4056 [FastAPI docs for Query Parameters and String Validations](https://fastapi.tiangolo.com/tutorial/query-params-str-validations/#exclude-parameters-from-openapi).
4057 """
4058 ),
4059 ] = True,
4060 response_class: Annotated[
4061 Type[Response],
4062 Doc(
4063 """
4064 Response class to be used for this *path operation*.
4066 This will not be used if you return a response directly.
4068 Read more about it in the
4069 [FastAPI docs for Custom Response - HTML, Stream, File, others](https://fastapi.tiangolo.com/advanced/custom-response/#redirectresponse).
4070 """
4071 ),
4072 ] = Default(JSONResponse),
4073 name: Annotated[
4074 Optional[str],
4075 Doc(
4076 """
4077 Name for this *path operation*. Only used internally.
4078 """
4079 ),
4080 ] = None,
4081 callbacks: Annotated[
4082 Optional[List[BaseRoute]],
4083 Doc(
4084 """
4085 List of *path operations* that will be used as OpenAPI callbacks.
4087 This is only for OpenAPI documentation, the callbacks won't be used
4088 directly.
4090 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
4092 Read more about it in the
4093 [FastAPI docs for OpenAPI Callbacks](https://fastapi.tiangolo.com/advanced/openapi-callbacks/).
4094 """
4095 ),
4096 ] = None,
4097 openapi_extra: Annotated[
4098 Optional[Dict[str, Any]],
4099 Doc(
4100 """
4101 Extra metadata to be included in the OpenAPI schema for this *path
4102 operation*.
4104 Read more about it in the
4105 [FastAPI docs for Path Operation Advanced Configuration](https://fastapi.tiangolo.com/advanced/path-operation-advanced-configuration/#custom-openapi-path-operation-schema).
4106 """
4107 ),
4108 ] = None,
4109 generate_unique_id_function: Annotated[
4110 Callable[[routing.APIRoute], str],
4111 Doc(
4112 """
4113 Customize the function used to generate unique IDs for the *path
4114 operations* shown in the generated OpenAPI.
4116 This is particularly useful when automatically generating clients or
4117 SDKs for your API.
4119 Read more about it in the
4120 [FastAPI docs about how to Generate Clients](https://fastapi.tiangolo.com/advanced/generate-clients/#custom-generate-unique-id-function).
4121 """
4122 ),
4123 ] = Default(generate_unique_id),
4124 ) -> Callable[[DecoratedCallable], DecoratedCallable]:
4125 """
4126 Add a *path operation* using an HTTP PATCH operation.
4128 ## Example
4130 ```python
4131 from fastapi import FastAPI
4132 from pydantic import BaseModel
4134 class Item(BaseModel):
4135 name: str
4136 description: str | None = None
4138 app = FastAPI()
4140 @app.patch("/items/")
4141 def update_item(item: Item):
4142 return {"message": "Item updated in place"}
4143 ```
4144 """
4145 return self.router.patch( 1abcdefg
4146 path,
4147 response_model=response_model,
4148 status_code=status_code,
4149 tags=tags,
4150 dependencies=dependencies,
4151 summary=summary,
4152 description=description,
4153 response_description=response_description,
4154 responses=responses,
4155 deprecated=deprecated,
4156 operation_id=operation_id,
4157 response_model_include=response_model_include,
4158 response_model_exclude=response_model_exclude,
4159 response_model_by_alias=response_model_by_alias,
4160 response_model_exclude_unset=response_model_exclude_unset,
4161 response_model_exclude_defaults=response_model_exclude_defaults,
4162 response_model_exclude_none=response_model_exclude_none,
4163 include_in_schema=include_in_schema,
4164 response_class=response_class,
4165 name=name,
4166 callbacks=callbacks,
4167 openapi_extra=openapi_extra,
4168 generate_unique_id_function=generate_unique_id_function,
4169 )
4171 def trace( 2a b c d e f g ^U
4172 self,
4173 path: Annotated[
4174 str,
4175 Doc(
4176 """
4177 The URL path to be used for this *path operation*.
4179 For example, in `http://example.com/items`, the path is `/items`.
4180 """
4181 ),
4182 ],
4183 *,
4184 response_model: Annotated[
4185 Any,
4186 Doc(
4187 """
4188 The type to use for the response.
4190 It could be any valid Pydantic *field* type. So, it doesn't have to
4191 be a Pydantic model, it could be other things, like a `list`, `dict`,
4192 etc.
4194 It will be used for:
4196 * Documentation: the generated OpenAPI (and the UI at `/docs`) will
4197 show it as the response (JSON Schema).
4198 * Serialization: you could return an arbitrary object and the
4199 `response_model` would be used to serialize that object into the
4200 corresponding JSON.
4201 * Filtering: the JSON sent to the client will only contain the data
4202 (fields) defined in the `response_model`. If you returned an object
4203 that contains an attribute `password` but the `response_model` does
4204 not include that field, the JSON sent to the client would not have
4205 that `password`.
4206 * Validation: whatever you return will be serialized with the
4207 `response_model`, converting any data as necessary to generate the
4208 corresponding JSON. But if the data in the object returned is not
4209 valid, that would mean a violation of the contract with the client,
4210 so it's an error from the API developer. So, FastAPI will raise an
4211 error and return a 500 error code (Internal Server Error).
4213 Read more about it in the
4214 [FastAPI docs for Response Model](https://fastapi.tiangolo.com/tutorial/response-model/).
4215 """
4216 ),
4217 ] = Default(None),
4218 status_code: Annotated[
4219 Optional[int],
4220 Doc(
4221 """
4222 The default status code to be used for the response.
4224 You could override the status code by returning a response directly.
4226 Read more about it in the
4227 [FastAPI docs for Response Status Code](https://fastapi.tiangolo.com/tutorial/response-status-code/).
4228 """
4229 ),
4230 ] = None,
4231 tags: Annotated[
4232 Optional[List[Union[str, Enum]]],
4233 Doc(
4234 """
4235 A list of tags to be applied to the *path operation*.
4237 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
4239 Read more about it in the
4240 [FastAPI docs for Path Operation Configuration](https://fastapi.tiangolo.com/tutorial/path-operation-configuration/#tags).
4241 """
4242 ),
4243 ] = None,
4244 dependencies: Annotated[
4245 Optional[Sequence[Depends]],
4246 Doc(
4247 """
4248 A list of dependencies (using `Depends()`) to be applied to the
4249 *path operation*.
4251 Read more about it in the
4252 [FastAPI docs for Dependencies in path operation decorators](https://fastapi.tiangolo.com/tutorial/dependencies/dependencies-in-path-operation-decorators/).
4253 """
4254 ),
4255 ] = None,
4256 summary: Annotated[
4257 Optional[str],
4258 Doc(
4259 """
4260 A summary for the *path operation*.
4262 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
4264 Read more about it in the
4265 [FastAPI docs for Path Operation Configuration](https://fastapi.tiangolo.com/tutorial/path-operation-configuration/).
4266 """
4267 ),
4268 ] = None,
4269 description: Annotated[
4270 Optional[str],
4271 Doc(
4272 """
4273 A description for the *path operation*.
4275 If not provided, it will be extracted automatically from the docstring
4276 of the *path operation function*.
4278 It can contain Markdown.
4280 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
4282 Read more about it in the
4283 [FastAPI docs for Path Operation Configuration](https://fastapi.tiangolo.com/tutorial/path-operation-configuration/).
4284 """
4285 ),
4286 ] = None,
4287 response_description: Annotated[
4288 str,
4289 Doc(
4290 """
4291 The description for the default response.
4293 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
4294 """
4295 ),
4296 ] = "Successful Response",
4297 responses: Annotated[
4298 Optional[Dict[Union[int, str], Dict[str, Any]]],
4299 Doc(
4300 """
4301 Additional responses that could be returned by this *path operation*.
4303 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
4304 """
4305 ),
4306 ] = None,
4307 deprecated: Annotated[
4308 Optional[bool],
4309 Doc(
4310 """
4311 Mark this *path operation* as deprecated.
4313 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
4314 """
4315 ),
4316 ] = None,
4317 operation_id: Annotated[
4318 Optional[str],
4319 Doc(
4320 """
4321 Custom operation ID to be used by this *path operation*.
4323 By default, it is generated automatically.
4325 If you provide a custom operation ID, you need to make sure it is
4326 unique for the whole API.
4328 You can customize the
4329 operation ID generation with the parameter
4330 `generate_unique_id_function` in the `FastAPI` class.
4332 Read more about it in the
4333 [FastAPI docs about how to Generate Clients](https://fastapi.tiangolo.com/advanced/generate-clients/#custom-generate-unique-id-function).
4334 """
4335 ),
4336 ] = None,
4337 response_model_include: Annotated[
4338 Optional[IncEx],
4339 Doc(
4340 """
4341 Configuration passed to Pydantic to include only certain fields in the
4342 response data.
4344 Read more about it in the
4345 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_include-and-response_model_exclude).
4346 """
4347 ),
4348 ] = None,
4349 response_model_exclude: Annotated[
4350 Optional[IncEx],
4351 Doc(
4352 """
4353 Configuration passed to Pydantic to exclude certain fields in the
4354 response data.
4356 Read more about it in the
4357 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_include-and-response_model_exclude).
4358 """
4359 ),
4360 ] = None,
4361 response_model_by_alias: Annotated[
4362 bool,
4363 Doc(
4364 """
4365 Configuration passed to Pydantic to define if the response model
4366 should be serialized by alias when an alias is used.
4368 Read more about it in the
4369 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_include-and-response_model_exclude).
4370 """
4371 ),
4372 ] = True,
4373 response_model_exclude_unset: Annotated[
4374 bool,
4375 Doc(
4376 """
4377 Configuration passed to Pydantic to define if the response data
4378 should have all the fields, including the ones that were not set and
4379 have their default values. This is different from
4380 `response_model_exclude_defaults` in that if the fields are set,
4381 they will be included in the response, even if the value is the same
4382 as the default.
4384 When `True`, default values are omitted from the response.
4386 Read more about it in the
4387 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#use-the-response_model_exclude_unset-parameter).
4388 """
4389 ),
4390 ] = False,
4391 response_model_exclude_defaults: Annotated[
4392 bool,
4393 Doc(
4394 """
4395 Configuration passed to Pydantic to define if the response data
4396 should have all the fields, including the ones that have the same value
4397 as the default. This is different from `response_model_exclude_unset`
4398 in that if the fields are set but contain the same default values,
4399 they will be excluded from the response.
4401 When `True`, default values are omitted from the response.
4403 Read more about it in the
4404 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#use-the-response_model_exclude_unset-parameter).
4405 """
4406 ),
4407 ] = False,
4408 response_model_exclude_none: Annotated[
4409 bool,
4410 Doc(
4411 """
4412 Configuration passed to Pydantic to define if the response data should
4413 exclude fields set to `None`.
4415 This is much simpler (less smart) than `response_model_exclude_unset`
4416 and `response_model_exclude_defaults`. You probably want to use one of
4417 those two instead of this one, as those allow returning `None` values
4418 when it makes sense.
4420 Read more about it in the
4421 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_exclude_none).
4422 """
4423 ),
4424 ] = False,
4425 include_in_schema: Annotated[
4426 bool,
4427 Doc(
4428 """
4429 Include this *path operation* in the generated OpenAPI schema.
4431 This affects the generated OpenAPI (e.g. visible at `/docs`).
4433 Read more about it in the
4434 [FastAPI docs for Query Parameters and String Validations](https://fastapi.tiangolo.com/tutorial/query-params-str-validations/#exclude-parameters-from-openapi).
4435 """
4436 ),
4437 ] = True,
4438 response_class: Annotated[
4439 Type[Response],
4440 Doc(
4441 """
4442 Response class to be used for this *path operation*.
4444 This will not be used if you return a response directly.
4446 Read more about it in the
4447 [FastAPI docs for Custom Response - HTML, Stream, File, others](https://fastapi.tiangolo.com/advanced/custom-response/#redirectresponse).
4448 """
4449 ),
4450 ] = Default(JSONResponse),
4451 name: Annotated[
4452 Optional[str],
4453 Doc(
4454 """
4455 Name for this *path operation*. Only used internally.
4456 """
4457 ),
4458 ] = None,
4459 callbacks: Annotated[
4460 Optional[List[BaseRoute]],
4461 Doc(
4462 """
4463 List of *path operations* that will be used as OpenAPI callbacks.
4465 This is only for OpenAPI documentation, the callbacks won't be used
4466 directly.
4468 It will be added to the generated OpenAPI (e.g. visible at `/docs`).
4470 Read more about it in the
4471 [FastAPI docs for OpenAPI Callbacks](https://fastapi.tiangolo.com/advanced/openapi-callbacks/).
4472 """
4473 ),
4474 ] = None,
4475 openapi_extra: Annotated[
4476 Optional[Dict[str, Any]],
4477 Doc(
4478 """
4479 Extra metadata to be included in the OpenAPI schema for this *path
4480 operation*.
4482 Read more about it in the
4483 [FastAPI docs for Path Operation Advanced Configuration](https://fastapi.tiangolo.com/advanced/path-operation-advanced-configuration/#custom-openapi-path-operation-schema).
4484 """
4485 ),
4486 ] = None,
4487 generate_unique_id_function: Annotated[
4488 Callable[[routing.APIRoute], str],
4489 Doc(
4490 """
4491 Customize the function used to generate unique IDs for the *path
4492 operations* shown in the generated OpenAPI.
4494 This is particularly useful when automatically generating clients or
4495 SDKs for your API.
4497 Read more about it in the
4498 [FastAPI docs about how to Generate Clients](https://fastapi.tiangolo.com/advanced/generate-clients/#custom-generate-unique-id-function).
4499 """
4500 ),
4501 ] = Default(generate_unique_id),
4502 ) -> Callable[[DecoratedCallable], DecoratedCallable]:
4503 """
4504 Add a *path operation* using an HTTP TRACE operation.
4506 ## Example
4508 ```python
4509 from fastapi import FastAPI
4511 app = FastAPI()
4513 @app.trace("/items/{item_id}")
4514 def trace_item(item_id: str):
4515 return None
4516 ```
4517 """
4518 return self.router.trace( 1abcdefg
4519 path,
4520 response_model=response_model,
4521 status_code=status_code,
4522 tags=tags,
4523 dependencies=dependencies,
4524 summary=summary,
4525 description=description,
4526 response_description=response_description,
4527 responses=responses,
4528 deprecated=deprecated,
4529 operation_id=operation_id,
4530 response_model_include=response_model_include,
4531 response_model_exclude=response_model_exclude,
4532 response_model_by_alias=response_model_by_alias,
4533 response_model_exclude_unset=response_model_exclude_unset,
4534 response_model_exclude_defaults=response_model_exclude_defaults,
4535 response_model_exclude_none=response_model_exclude_none,
4536 include_in_schema=include_in_schema,
4537 response_class=response_class,
4538 name=name,
4539 callbacks=callbacks,
4540 openapi_extra=openapi_extra,
4541 generate_unique_id_function=generate_unique_id_function,
4542 )
4544 def websocket_route( 1abcdefg
4545 self, path: str, name: Union[str, None] = None
4546 ) -> Callable[[DecoratedCallable], DecoratedCallable]:
4547 def decorator(func: DecoratedCallable) -> DecoratedCallable: 1abcdefg
4548 self.router.add_websocket_route(path, func, name=name) 1abcdefg
4549 return func 1abcdefg
4551 return decorator 1abcdefg
4553 @deprecated( 1abcdefg
4554 """
4555 on_event is deprecated, use lifespan event handlers instead.
4557 Read more about it in the
4558 [FastAPI docs for Lifespan Events](https://fastapi.tiangolo.com/advanced/events/).
4559 """
4560 )
4561 def on_event( 1abcdefg
4562 self,
4563 event_type: Annotated[
4564 str,
4565 Doc(
4566 """
4567 The type of event. `startup` or `shutdown`.
4568 """
4569 ),
4570 ],
4571 ) -> Callable[[DecoratedCallable], DecoratedCallable]:
4572 """
4573 Add an event handler for the application.
4575 `on_event` is deprecated, use `lifespan` event handlers instead.
4577 Read more about it in the
4578 [FastAPI docs for Lifespan Events](https://fastapi.tiangolo.com/advanced/events/#alternative-events-deprecated).
4579 """
4580 return self.router.on_event(event_type) 2a tbGbb ubNbc vbUbd wb1be xb8bf yb(bg zb/b
4582 def middleware( 1abcdefg
4583 self,
4584 middleware_type: Annotated[
4585 str,
4586 Doc(
4587 """
4588 The type of middleware. Currently only supports `http`.
4589 """
4590 ),
4591 ],
4592 ) -> Callable[[DecoratedCallable], DecoratedCallable]:
4593 """
4594 Add a middleware to the application.
4596 Read more about it in the
4597 [FastAPI docs for Middleware](https://fastapi.tiangolo.com/tutorial/middleware/).
4599 ## Example
4601 ```python
4602 import time
4603 from typing import Awaitable, Callable
4605 from fastapi import FastAPI, Request, Response
4607 app = FastAPI()
4610 @app.middleware("http")
4611 async def add_process_time_header(
4612 request: Request, call_next: Callable[[Request], Awaitable[Response]]
4613 ) -> Response:
4614 start_time = time.time()
4615 response = await call_next(request)
4616 process_time = time.time() - start_time
4617 response.headers["X-Process-Time"] = str(process_time)
4618 return response
4619 ```
4620 """
4622 def decorator(func: DecoratedCallable) -> DecoratedCallable: 1abcdefg
4623 self.add_middleware(BaseHTTPMiddleware, dispatch=func) 1abcdefg
4624 return func 1abcdefg
4626 return decorator 1abcdefg
4628 def exception_handler( 1abcdefg
4629 self,
4630 exc_class_or_status_code: Annotated[
4631 Union[int, Type[Exception]],
4632 Doc(
4633 """
4634 The Exception class this would handle, or a status code.
4635 """
4636 ),
4637 ],
4638 ) -> Callable[[DecoratedCallable], DecoratedCallable]:
4639 """
4640 Add an exception handler to the app.
4642 Read more about it in the
4643 [FastAPI docs for Handling Errors](https://fastapi.tiangolo.com/tutorial/handling-errors/).
4645 ## Example
4647 ```python
4648 from fastapi import FastAPI, Request
4649 from fastapi.responses import JSONResponse
4652 class UnicornException(Exception):
4653 def __init__(self, name: str):
4654 self.name = name
4657 app = FastAPI()
4660 @app.exception_handler(UnicornException)
4661 async def unicorn_exception_handler(request: Request, exc: UnicornException):
4662 return JSONResponse(
4663 status_code=418,
4664 content={"message": f"Oops! {exc.name} did something. There goes a rainbow..."},
4665 )
4666 ```
4667 """
4669 def decorator(func: DecoratedCallable) -> DecoratedCallable: 1abcdefg
4670 self.add_exception_handler(exc_class_or_status_code, func) 1abcdefg
4671 return func 1abcdefg
4673 return decorator 1abcdefg