pax_global_header00006660000000000000000000000064152627467470014536gustar00rootroot0000000000000052 comment=b2212c787fb5c73386dc770681ec49cd09da8e73 pydantic-pydantic-e28e879/000077500000000000000000000000001526274674700155375ustar00rootroot00000000000000pydantic-pydantic-e28e879/.agents/000077500000000000000000000000001526274674700170765ustar00rootroot00000000000000pydantic-pydantic-e28e879/.agents/skills/000077500000000000000000000000001526274674700203775ustar00rootroot00000000000000pydantic-pydantic-e28e879/.agents/skills/pydantic/000077500000000000000000000000001526274674700222125ustar00rootroot00000000000000pydantic-pydantic-e28e879/.agents/skills/pydantic/SKILL.md000066400000000000000000000236261526274674700234230ustar00rootroot00000000000000--- name: pydantic description: Pydantic is a Python data validation and serialization library, based on type hints. Use this skill whenever you need to do relatively complex data modeling using Pydantic, e.g. when adding constraints, defining a model hierarchy with subclasses, etc. --- # Pydantic Validation In a nutshell, Pydantic is dataclasses with runtime validation. It leverages type hints to understand how validation (and serialization) should be performed. It is mostly useful when dealing with external untrusted data, for example when defining an HTTP API. It is generally *not* recommended to use Pydantic to define classes that are instantiated within the user code. By doing so, you will lose flexibility (e.g. you cannot use types not supported by Pydantic, and it is harder to perform post-init changes). It is usually better to use vanilla classes (or standard library dataclasses) in this case, as a static type checker will already catch type mismatches. ## Basic usage Here is a simple example of using a Pydantic model: ```python from datetime import date from pydantic import BaseModel, Field class Person(BaseModel): name: str age: int = Field(description='The age of the person') birthdate: date | None = None p = Person(name='John', age=20, birthdate='1970-01-01') ``` Pydantic coerces compatible input: the ISO date string `'1970-01-01'` is parsed into a `date`. ## Constraints and field metadata The `Field()` function is used to provide metadata and constraints. You need to distinguish two types of metadata: * *field specific* metadata: metadata such as `deprecated` and `alias`, that only have meaning when attached to a field. * *type specific* metadata: this includes constraints such as `gt`, `max_length`, and also metadata that affects the JSON Schema (e.g. `description`, `title`). Model fields are declared with `Field()` using the assignment form: ```python from pydantic import BaseModel, Field class User(BaseModel): first_name: str = Field(alias='name') ``` or using the annotated pattern: ```python from typing import Annotated from pydantic import BaseModel, Field class Model(BaseModel): value: Annotated[int, Field(deprecated=True)] = 1 ``` The annotated pattern has some advantages: * Using the `f: = Field()` form (no default) can be confusing and might trick users into thinking `f` has a default value, while in reality the field is still required. * You can provide an arbitrary amount of metadata elements for a field. As shown in the example above, the `Field()` function only supports a limited set of constraints/metadata, and you may have to use different Pydantic utilities such as `WithJsonSchema` in some cases. But note that: * You should use the assignment form for metadata that has a meaning for static type checkers. This includes: `alias`, `default` and `default_factory`. * *field specific* metadata can only be used on the "top-level" type. A common pitfall is to do the following: ```python from typing import Annotated from pydantic import BaseModel, Field class Model(BaseModel): field_bad: Annotated[int, Field(deprecated=True)] | None = None field_ok: Annotated[int | None, Field(deprecated=True)] = None ``` *field specific* metadata should apply to the whole union in this example. ### Constraints As much as possible, use the "built-in" validation constraints, instead of defining custom validators: ```python from typing import Annotated from annotated_types import Gt # annotated_types is an alternative to the `Field()` function. from pydantic import BaseModel, field_validator class Model(BaseModel): constrained_int_ok: Annotated[int, Gt(1)] # This is good constrained_int_bad: int @field_validator('constrained_int_bad') # This is bad @classmethod def validate(cls, v: int) -> int: if not v > 1: raise ValueError('Value is not greater than 1') return v ``` Sometimes, constraints can't be expressed using the `Field()` function. For example, string constraints such as `strip_whitespace`, `to_upper`, `to_lower` and `ascii_only` can only be specified using `pydantic.StringConstraints`: ```python from typing import Annotated from pydantic import BaseModel, StringConstraints class Model(BaseModel): # Do this instead of a validator calling s.strip(): a: Annotated[str, StringConstraints(strip_whitespace=True)] ``` is the canonical documentation for all supported standard library types and their constraints. ### Validators In some cases, you may have to use custom validators. As much as possible, use *after* validators. Because they run after Pydantic validation, the value is already the field's type. If you use *before* validators, the input data can literally be anything, so it is more error-prone (especially for model validators, the input isn't necessarily a dict, it can also be an arbitrary object). If possible, prefer using the annotated pattern for validators: ```python from typing import Annotated from pydantic import AfterValidator, BaseModel, field_validator def is_even(value: int) -> int: if value % 2 == 1: raise ValueError(f'{value} is not an even number') return value class Model(BaseModel): # Prefer this form: the validator is right next to the field, making it easy to understand even: Annotated[int, AfterValidator(is_even)] odd: int # If you define a validator as decorator, make sure to define it as classmethod. @field_validator('odd', mode='after') @classmethod def is_odd(cls, value: int) -> int: if value % 2 == 0: raise ValueError(f'{value} is not an odd number') return value ``` Using the decorator pattern can lead to unclear behavior, especially regarding the order in which validators run (in particular on subclasses). ### Type coercion, collections and unions Unless you are using [strict mode](https://pydantic.dev/docs/validation/latest/concepts/strict_mode/), Pydantic applies type coercion in most cases. For instance, for a field typed as `int`, strings like `'123'` will be accepted. This also applies to collection types: `list[str]` also accepts tuples, sets etc. This is why you should avoid: * using unions such as `int | str`, if your goal is to coerce the `str` to an `int` via a validator. * using abstract collections such as `collections.abc.Sequence`, if your goal is to accept both lists and tuples. Using these abstract collections is inefficient. In the general case, unions are best avoided because every use of the field will need to check for each type before doing anything with it. ### Forward annotations Python has the ability to write annotations as forward references, by using strings. This can cause challenges for Pydantic to evaluate them, so they are best avoided if possible. If you are defining Pydantic models in a module, avoid using `from __future__ import annotations` if possible (which stringifies all annotations by default). Only add explicit quotes to annotations that aren't defined yet, e.g.: ```python from pydantic import BaseModel class Model(BaseModel): self_ref: 'Model' ``` Also note that in Python >= 3.14, annotation evaluation is deferred, so you should not use string annotations at all. #### Recursive type aliases You might be tempted to define aliases like this: ```python from typing import TypeAlias JsonValue: TypeAlias = 'list[JsonValue] | dict[str, JsonValue] | str | bool | int | float | None' ``` The alias needs to be quoted because it is recursive. Pydantic will generally *not* be able to evaluate a quoted `TypeAlias`. Instead, use an explicit type alias (`type` on Python 3.12+, or `TypeAliasType`), which Pydantic can resolve: ```python type JsonValue = list[JsonValue] | dict[str, JsonValue] | str | bool | int | float | None # Or, if not on Python >= 3.12: from typing_extensions import TypeAliasType JsonValue = TypeAliasType('JsonValue', 'list[JsonValue] | dict[str, JsonValue] | str | bool | int | float | None') ``` ### Model subclasses, discriminated unions Subclassing is a really common Python pattern, but can be a footgun in Pydantic. You might be tempted to do: ```python from pydantic import BaseModel class Base(BaseModel): base_field: int def common_method(self) -> None: ... class Sub1(Base): sub1_field: str class Sub2(Base): sub2_field: bool class Main(BaseModel): model: Base m: Main = Main(model=Sub1(base_field=1, sub1_field='test')) ``` This example works, but will not behave as expected when serializing `m`: ```python m.model_dump() #> {'model': {'base_field': 1}} -> sub1_field missing ``` This is because Pydantic serializes according to the declared type (`Base`), not the runtime subclass. Validation follows the same rule: `Main(model={'base_field': 1, 'sub1_field': 'test'})` validates against `Base`, so `sub1_field` is ignored rather than producing a `Sub1` instance. Instead, try to use discriminated unions (provided that you can set a `type` field to distinguish models): ```python from typing import Annotated, Literal, TypeAlias from pydantic import BaseModel, Field class Sub1(Base): type: Literal['sub1'] sub1_field: str class Sub2(Base): type: Literal['sub2'] sub2_field: bool Subs: TypeAlias = Annotated[Sub1 | Sub2, Field(discriminator='type')] class Main(BaseModel): model: Subs ``` or generics: ```python from pydantic import BaseModel class Main[BaseT: Base](BaseModel): model: BaseT m: Main[Sub1] = Main[Sub1](model={'base_field': 1, 'sub1_field': 'test'}) # Will work ``` If neither discriminated unions nor generics fit, [polymorphic serialization](https://pydantic.dev/docs/validation/latest/concepts/serialization/#polymorphic-serialization) (in Pydantic >=2.13) or [*serialize as any*](https://pydantic.dev/docs/validation/latest/concepts/serialization/#serializing-as-any) (in Pydantic <2.13) can be used as a last resort. pydantic-pydantic-e28e879/.git-blame-ignore-revs000066400000000000000000000007121526274674700216370ustar00rootroot00000000000000# Linting/formatting: # isort/pyupgrade -> Ruff: 4f3e794a69e84e4294c605c669e4d1876a18dd50 # Black -> Ruff format: 419398d1dd9f3c0babdcfde1d52c249266f59ef0 # Ruff 0.2.1: 918402f01d82694214ff93cd77ff62d5d5beb1ab # Ruff 0.4.8: 332e77ba3b658c2a57fc72f832587b72311d87c7 # Replace `py` -> `python` in code blocks: 33c4812cb3b7160d663620f84dd17eeda1480539 # Markdownlint: c4f0262bd64734751a68846a10edd6cdc6acc6f6 # yamlfmt: 19223b9ce61537995cbc4c46141148ac619a60af pydantic-pydantic-e28e879/.github/000077500000000000000000000000001526274674700170775ustar00rootroot00000000000000pydantic-pydantic-e28e879/.github/FUNDING.yml000066400000000000000000000000251526274674700207110ustar00rootroot00000000000000github: samuelcolvin pydantic-pydantic-e28e879/.github/ISSUE_TEMPLATE/000077500000000000000000000000001526274674700212625ustar00rootroot00000000000000pydantic-pydantic-e28e879/.github/ISSUE_TEMPLATE/bug-v1.yml000066400000000000000000000077761526274674700231270ustar00rootroot00000000000000name: � Pydantic V1.X Bug description: Report a bug or unexpected behavior in Pydantic V1.X, e.g. all releases prior to V2 labels: [bug V1, pending] body: - type: markdown attributes: value: Thank you for contributing to pydantic! ✊ - type: checkboxes id: checks attributes: label: Initial Checks description: | Just a few checks to make sure you need to create a bug report. _Sorry to sound so draconian 👿; but every second spent replying to issues is time not spent improving pydantic 🙇._ options: - label: I have searched GitHub for a duplicate issue and I'm sure this is something new required: true - label: I have searched Google & StackOverflow for a solution and couldn't find anything required: true - label: I have read and followed [the docs](https://pydantic.dev/docs/validation/latest/get-started/) and still think this is a bug required: true - label: > I am confident that the issue is with pydantic (not my code, or another library in the ecosystem like [FastAPI](https://fastapi.tiangolo.com) or [mypy](https://mypy.readthedocs.io/en/stable)) required: true - type: textarea id: description attributes: label: Description description: | Please explain what you're seeing and what you would expect to see. Please provide as much detail as possible to make understanding and solving your problem as quick as possible. � validations: required: true - type: textarea id: example attributes: label: Example Code description: > If applicable, please add a self-contained, [minimal, reproducible, example](https://stackoverflow.com/help/minimal-reproducible-example) demonstrating the bug. placeholder: | import pydantic ... render: Python - type: textarea id: version attributes: label: Python, Pydantic & OS Version description: | Which version of Python & Pydantic are you using, and which Operating System? Please run the following command and copy the output below: ```bash python -c "import pydantic.utils; print(pydantic.utils.version_info())" ``` render: Text validations: required: true - type: checkboxes id: affected-components attributes: label: Affected Components description: Which of the following parts of pydantic does this bug affect? # keep this lis in sync with feature_request.yml options: - label: '[Compatibility between releases](https://pydantic.dev/docs/validation/latest/get-started/changelog/)' - label: '[Data validation/parsing](https://pydantic.dev/docs/validation/latest/concepts/models/#basic-model-usage)' - label: '[Data serialization](https://pydantic.dev/docs/validation/latest/concepts/serialization/) - `.model_dump()` and `.model_dump_json()`' - label: '[JSON Schema](https://pydantic.dev/docs/validation/latest/concepts/json_schema/)' - label: '[Dataclasses](https://pydantic.dev/docs/validation/latest/concepts/dataclasses/)' - label: '[Model Config](https://pydantic.dev/docs/validation/latest/concepts/config/)' - label: '[Field Types](https://pydantic.dev/docs/validation/latest/api/pydantic/types/) - adding or changing a particular data type' - label: '[Function validation decorator](https://pydantic.dev/docs/validation/latest/concepts/validation_decorator/)' - label: '[Generic Models](https://pydantic.dev/docs/validation/latest/concepts/models/#generic-models)' - label: '[Other Model behaviour](https://pydantic.dev/docs/validation/latest/concepts/models/) - `model_construct()`, pickling, private attributes, ORM mode' - label: '[Plugins](https://pydantic.dev/docs/validation/latest/integrations/dev-tools/mypy/) and integration with other tools - mypy, FastAPI, python-devtools, Hypothesis, VS Code, PyCharm, etc.' pydantic-pydantic-e28e879/.github/ISSUE_TEMPLATE/bug-v2.yml000066400000000000000000000031061526274674700231070ustar00rootroot00000000000000name: � Pydantic V2 Bug description: Report a bug or unexpected behavior in Pydantic V2 labels: [bug V2, pending] body: - type: markdown attributes: value: Thank you for contributing to pydantic! ✊ - type: checkboxes id: checks attributes: label: Initial Checks description: Just making sure you're really using Pydantic V2 options: - label: I confirm that I'm using Pydantic V2 required: true - type: textarea id: description attributes: label: Description description: | Please explain what you're seeing and what you would expect to see. Please provide as much detail as possible to make understanding and solving your problem as quick as possible. � validations: required: true - type: textarea id: example attributes: label: Example Code description: > If applicable, please add a self-contained, [minimal, reproducible, example](https://stackoverflow.com/help/minimal-reproducible-example) demonstrating the bug. placeholder: | import pydantic ... render: Python - type: textarea id: version attributes: label: Python, Pydantic & OS Version description: | Which version of Python & Pydantic are you using, and which Operating System? Please run the following command and copy the output below: ```bash python -c "import pydantic.version; print(pydantic.version.version_info())" ``` render: Text validations: required: true pydantic-pydantic-e28e879/.github/ISSUE_TEMPLATE/config.yml000066400000000000000000000003471526274674700232560ustar00rootroot00000000000000blank_issues_enabled: true contact_links: - name: 🤔 Ask a Question url: 'https://github.com/pydantic/pydantic/discussions/new?category=question' about: Ask a question about how to use pydantic using github discussions pydantic-pydantic-e28e879/.github/ISSUE_TEMPLATE/feature_request.yml000066400000000000000000000060161526274674700252130ustar00rootroot00000000000000name: 🚀 Pydantic V2 Feature request description: 'Suggest a new feature for Pydantic V2 (NOTE: and we only making critical bug fixes to Pydantic V1)' labels: [feature request] body: - type: markdown attributes: value: Thank you for contributing to pydantic! ✊ - type: checkboxes id: searched attributes: label: Initial Checks description: | Just a few checks to make sure you need to create a feature request. _Sorry to sound so draconian 👿; but every second spent replying to issues is time not spent improving pydantic 🙇._ options: - label: I have searched Google & GitHub for similar requests and couldn't find anything required: true - label: I have read and followed [the docs](https://pydantic.dev/docs/validation/latest/get-started/) and still think this feature is missing required: true - type: textarea id: description attributes: label: Description description: | Please give as much detail as possible about the feature you would like to suggest. � You might like to add: * A demo of how code might look when using the feature * Your use case(s) for the feature * Why the feature should be added to pydantic (as opposed to another library or just implemented in your code) validations: required: true - type: checkboxes id: affected-components attributes: label: Affected Components description: Which of the following parts of pydantic does this feature affect? # keep this lis in sync with bug.yml options: - label: '[Compatibility between releases](https://pydantic.dev/docs/validation/latest/get-started/changelog/)' - label: '[Data validation/parsing](https://pydantic.dev/docs/validation/latest/concepts/models/#basic-model-usage)' - label: '[Data serialization](https://pydantic.dev/docs/validation/latest/concepts/serialization/) - `.model_dump()` and `.model_dump_json()`' - label: '[JSON Schema](https://pydantic.dev/docs/validation/latest/concepts/json_schema/)' - label: '[Dataclasses](https://pydantic.dev/docs/validation/latest/concepts/dataclasses/)' - label: '[Model Config](https://pydantic.dev/docs/validation/latest/concepts/config/)' - label: '[Field Types](https://pydantic.dev/docs/validation/latest/api/pydantic/types/) - adding or changing a particular data type' - label: '[Function validation decorator](https://pydantic.dev/docs/validation/latest/concepts/validation_decorator/)' - label: '[Generic Models](https://pydantic.dev/docs/validation/latest/concepts/models/#generic-models)' - label: '[Other Model behaviour](https://pydantic.dev/docs/validation/latest/concepts/models/) - `model_construct()`, pickling, private attributes, ORM mode' - label: '[Plugins](https://pydantic.dev/docs/validation/latest/integrations/dev-tools/mypy/) and integration with other tools - mypy, FastAPI, python-devtools, Hypothesis, VS Code, PyCharm, etc.' pydantic-pydantic-e28e879/.github/PULL_REQUEST_TEMPLATE.md000066400000000000000000000012711526274674700227010ustar00rootroot00000000000000 ## Change Summary ## Related issue number ## Checklist * [ ] The pull request title is a good summary of the changes - it will be used in the changelog * [ ] Unit tests for the changes exist * [ ] Tests pass on CI * [ ] Documentation reflects the changes where applicable * [ ] My PR is ready to review, **please add a comment including the phrase "please review" to assign reviewers** pydantic-pydantic-e28e879/.github/actions/000077500000000000000000000000001526274674700205375ustar00rootroot00000000000000pydantic-pydantic-e28e879/.github/actions/core-build-pgo-wheel/000077500000000000000000000000001526274674700244515ustar00rootroot00000000000000pydantic-pydantic-e28e879/.github/actions/core-build-pgo-wheel/action.yml000066400000000000000000000035261526274674700264570ustar00rootroot00000000000000name: Build PGO wheel description: Builds a PGO-optimized wheel inputs: interpreter: description: 'Interpreter to build the wheel for' required: true rust-toolchain: description: 'Rust toolchain to use' required: true working-directory: description: 'Working directory to run the action in' required: false default: ${{ github.workspace }} outputs: wheel: description: 'Path to the built wheel' value: ${{ steps.find_wheel.outputs.path }} runs: using: composite steps: # The working directory is mounted in the maturin container, so the installer can be verified on the host: - name: Get uv installer if: runner.os == 'Linux' working-directory: ${{ inputs.working-directory }} run: | curl -LsSf https://astral.sh/uv/install.sh -o uv-installer.sh gh attestation verify uv-installer.sh \ --repo astral-sh/uv \ --signer-workflow astral-sh/uv/.github/workflows/release.yml \ --deny-self-hosted-runners shell: bash env: GH_TOKEN: ${{ github.token }} - name: Build PGO-optimized wheel uses: PyO3/maturin-action@04ac600d27cdf7a9a280dadf7147097c42b757ad # v1.50.1 with: working-directory: ${{ inputs.working-directory }} manylinux: auto # `uv` is needed for the maturin `pgo-command` to use it before-script-linux: | env UV_UNMANAGED_INSTALL=/usr/local/bin sh uv-installer.sh args: > --release --pgo --out dist --interpreter ${{ inputs.interpreter }} rust-toolchain: ${{ inputs.rust-toolchain }} docker-options: -e CI -e UV_PYTHON - name: Find built wheel id: find_wheel working-directory: ${{ inputs.working-directory }} run: echo "path=$(ls dist/*.whl)" | tee -a "$GITHUB_OUTPUT" shell: bash pydantic-pydantic-e28e879/.github/actions/people/000077500000000000000000000000001526274674700220235ustar00rootroot00000000000000pydantic-pydantic-e28e879/.github/actions/people/action.yml000066400000000000000000000015211526274674700240220ustar00rootroot00000000000000name: Update Pydantic people description: Update Pydantic contributors in documentation inputs: token: description: 'User token for accessing the GitHub API. Can be passed in using {{ secrets.GITHUB_TOKEN }}' required: true runs: using: composite steps: - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 with: persist-credentials: true - uses: astral-sh/setup-uv@cec208311dfd045dd5311c1add060b2062131d57 # v8.0.0 with: python-version: '3.14' activate-environment: true - name: Install dependencies run: uv pip install --requirements .github/actions/people/pylock.toml shell: bash - name: Update pydantic people run: uv run --no-sync .github/actions/people/people.py shell: bash env: INPUT_TOKEN: ${{ inputs.token }} pydantic-pydantic-e28e879/.github/actions/people/people.py000066400000000000000000000530071526274674700236660ustar00rootroot00000000000000"""Use the github API to get lists of people who have contributed in various ways to Pydantic. This logic is inspired by that of @tiangolo's [FastAPI people script](https://github.com/tiangolo/fastapi/blob/master/.github/actions/people/app/main.py). """ # ruff: noqa: D101 # ruff: noqa: D103 import logging import subprocess import sys from collections import Counter from collections.abc import Container from datetime import datetime, timedelta, timezone from pathlib import Path from typing import Any import requests import yaml from github import Github from pydantic_settings import BaseSettings from pydantic import BaseModel, SecretStr github_graphql_url = 'https://api.github.com/graphql' discussions_query = """ query Q($after: String) { repository(name: "pydantic", owner: "pydantic") { discussions(first: 100, after: $after) { edges { cursor node { number author { login avatarUrl url } title createdAt comments(first: 100) { nodes { createdAt author { login avatarUrl url } isAnswer replies(first: 10) { nodes { createdAt author { login avatarUrl url } } } } } } } } } } """ issues_query = """ query Q($after: String) { repository(name: "pydantic", owner: "pydantic") { issues(first: 100, after: $after) { edges { cursor node { number author { login avatarUrl url } title createdAt state comments(first: 100) { nodes { createdAt author { login avatarUrl url } } } } } } } } """ prs_query = """ query Q($after: String) { repository(name: "pydantic", owner: "pydantic") { pullRequests(first: 100, after: $after) { edges { cursor node { number labels(first: 100) { nodes { name } } author { login avatarUrl url } title createdAt state comments(first: 100) { nodes { createdAt author { login avatarUrl url } } } reviews(first:100) { nodes { author { login avatarUrl url } state } } } } } } } """ class Author(BaseModel): """Represents a GitHub user with their basic information.""" login: str avatarUrl: str url: str # Issues and Discussions class CommentsNode(BaseModel): """Represents a comment node with creation time and author information.""" createdAt: datetime author: Author | None = None class Replies(BaseModel): """Container for reply nodes in a discussion.""" nodes: list[CommentsNode] class DiscussionsCommentsNode(CommentsNode): """Extends CommentsNode to include replies in discussions.""" replies: Replies class Comments(BaseModel): """Container for comment nodes.""" nodes: list[CommentsNode] class DiscussionsComments(BaseModel): """Container for discussion comment nodes.""" nodes: list[DiscussionsCommentsNode] class IssuesNode(BaseModel): """Represents a GitHub issue with its metadata and comments.""" number: int author: Author | None = None title: str createdAt: datetime state: str comments: Comments class DiscussionsNode(BaseModel): """Represents a GitHub discussion with its metadata and comments.""" number: int author: Author | None = None title: str createdAt: datetime comments: DiscussionsComments class IssuesEdge(BaseModel): """Represents an edge in the GitHub GraphQL issues query.""" cursor: str node: IssuesNode class DiscussionsEdge(BaseModel): """Represents an edge in the GitHub GraphQL discussions query.""" cursor: str node: DiscussionsNode class Issues(BaseModel): """Container for issue edges.""" edges: list[IssuesEdge] class Discussions(BaseModel): """Container for discussion edges.""" edges: list[DiscussionsEdge] class IssuesRepository(BaseModel): """Represents a repository's issues in the GitHub GraphQL response.""" issues: Issues class DiscussionsRepository(BaseModel): """Represents a repository's discussions in the GitHub GraphQL response.""" discussions: Discussions class IssuesResponseData(BaseModel): """Top-level container for issues response data.""" repository: IssuesRepository class DiscussionsResponseData(BaseModel): """Top-level container for discussions response data.""" repository: DiscussionsRepository class IssuesResponse(BaseModel): """Complete response structure for issues query.""" data: IssuesResponseData class DiscussionsResponse(BaseModel): """Complete response structure for discussions query.""" data: DiscussionsResponseData # PRs class LabelNode(BaseModel): """Represents a GitHub label.""" name: str class Labels(BaseModel): """Container for label nodes.""" nodes: list[LabelNode] class ReviewNode(BaseModel): """Represents a pull request review with author and state.""" author: Author | None = None state: str class Reviews(BaseModel): """Container for review nodes.""" nodes: list[ReviewNode] class PullRequestNode(BaseModel): """Represents a GitHub pull request with its metadata and interactions.""" number: int labels: Labels author: Author | None = None title: str createdAt: datetime state: str comments: Comments reviews: Reviews class PullRequestEdge(BaseModel): """Represents an edge in the GitHub GraphQL pull requests query.""" cursor: str node: PullRequestNode class PullRequests(BaseModel): """Container for pull request edges.""" edges: list[PullRequestEdge] class PRsRepository(BaseModel): """Represents a repository's pull requests in the GitHub GraphQL response.""" pullRequests: PullRequests class PRsResponseData(BaseModel): """Top-level container for pull requests response data.""" repository: PRsRepository class PRsResponse(BaseModel): """Complete response structure for pull requests query.""" data: PRsResponseData class Settings(BaseSettings): """Configuration settings for the GitHub API interaction.""" input_token: SecretStr github_repository: str = 'pydantic/pydantic' request_timeout: int = 30 def get_graphql_response( *, settings: Settings, query: str, after: str | None = None, ) -> dict[str, Any]: """Make a GraphQL request to GitHub API. Args: settings: Configuration settings including API token query: GraphQL query string after: Cursor for pagination, if any Returns: Response data from GitHub API in JSON format Raises: RuntimeError: If the API request fails or returns errors """ headers = {'Authorization': f'token {settings.input_token.get_secret_value()}'} variables = {'after': after} response = requests.post( github_graphql_url, headers=headers, timeout=settings.request_timeout, json={'query': query, 'variables': variables, 'operationName': 'Q'}, ) if response.status_code != 200: logging.error(f'Response was not 200, after: {after}') logging.error(response.text) raise RuntimeError(response.text) data = response.json() if 'errors' in data: logging.error(f'Errors in response, after: {after}') logging.error(data['errors']) logging.error(response.text) raise RuntimeError(response.text) return data def get_graphql_issue_edges(*, settings: Settings, after: str | None = None) -> list[IssuesEdge]: """Fetch issue edges from GitHub GraphQL API. Args: settings: Configuration settings after: Cursor for pagination, if any Returns: List of issue edges from the GraphQL response """ data = get_graphql_response(settings=settings, query=issues_query, after=after) graphql_response = IssuesResponse.model_validate(data) return graphql_response.data.repository.issues.edges def get_graphql_question_discussion_edges( *, settings: Settings, after: str | None = None, ) -> list[DiscussionsEdge]: """Fetch discussion edges from GitHub GraphQL API. Args: settings: Configuration settings after: Cursor for pagination, if any Returns: List of discussion edges from the GraphQL response """ data = get_graphql_response( settings=settings, query=discussions_query, after=after, ) graphql_response = DiscussionsResponse.model_validate(data) return graphql_response.data.repository.discussions.edges def get_graphql_pr_edges(*, settings: Settings, after: str | None = None) -> list[PullRequestEdge]: """Fetch pull request edges from GitHub GraphQL API. Args: settings: Configuration settings after: Cursor for pagination, if any Returns: List of pull request edges from the GraphQL response """ data = get_graphql_response(settings=settings, query=prs_query, after=after) graphql_response = PRsResponse.model_validate(data) return graphql_response.data.repository.pullRequests.edges def get_issues_experts(settings: Settings) -> tuple[Counter, Counter, dict[str, Author]]: """Analyze issues to identify expert contributors. Args: settings: Configuration settings Returns: A tuple containing: - Counter of all commentors - Counter of commentors from the last month - Dictionary mapping usernames to Author objects """ issue_nodes: list[IssuesNode] = [] issue_edges = get_graphql_issue_edges(settings=settings) while issue_edges: issue_nodes.extend(edge.node for edge in issue_edges) last_edge = issue_edges[-1] issue_edges = get_graphql_issue_edges(settings=settings, after=last_edge.cursor) commentors = Counter() last_month_commentors = Counter() authors: dict[str, Author] = {} now = datetime.now(tz=timezone.utc) one_month_ago = now - timedelta(days=30) for issue in issue_nodes: issue_author_name = None if issue.author: authors[issue.author.login] = issue.author issue_author_name = issue.author.login issue_commentors = set() for comment in issue.comments.nodes: if comment.author: authors[comment.author.login] = comment.author if comment.author.login != issue_author_name: issue_commentors.add(comment.author.login) for author_name in issue_commentors: commentors[author_name] += 1 if issue.createdAt > one_month_ago: last_month_commentors[author_name] += 1 return commentors, last_month_commentors, authors def get_discussions_experts(settings: Settings) -> tuple[Counter, Counter, dict[str, Author]]: """Analyze discussions to identify expert contributors. Args: settings: Configuration settings Returns: A tuple containing: - Counter of all commentors - Counter of commentors from the last month - Dictionary mapping usernames to Author objects """ discussion_nodes: list[DiscussionsNode] = [] discussion_edges = get_graphql_question_discussion_edges(settings=settings) while discussion_edges: discussion_nodes.extend(discussion_edge.node for discussion_edge in discussion_edges) last_edge = discussion_edges[-1] discussion_edges = get_graphql_question_discussion_edges(settings=settings, after=last_edge.cursor) commentors = Counter() last_month_commentors = Counter() authors: dict[str, Author] = {} now = datetime.now(tz=timezone.utc) one_month_ago = now - timedelta(days=30) for discussion in discussion_nodes: discussion_author_name = None if discussion.author: authors[discussion.author.login] = discussion.author discussion_author_name = discussion.author.login discussion_commentors = set() for comment in discussion.comments.nodes: if comment.author: authors[comment.author.login] = comment.author if comment.author.login != discussion_author_name: discussion_commentors.add(comment.author.login) for reply in comment.replies.nodes: if reply.author: authors[reply.author.login] = reply.author if reply.author.login != discussion_author_name: discussion_commentors.add(reply.author.login) for author_name in discussion_commentors: commentors[author_name] += 1 if discussion.createdAt > one_month_ago: last_month_commentors[author_name] += 1 return commentors, last_month_commentors, authors def get_experts(settings: Settings) -> tuple[Counter, Counter, dict[str, Author]]: """Get combined expert contributors from discussions. Args: settings: Configuration settings Returns: A tuple containing: - Counter of all commentors - Counter of commentors from the last month - Dictionary mapping usernames to Author objects """ # Migrated to only use GitHub Discussions # ( # issues_commentors, # issues_last_month_commentors, # issues_authors, # ) = get_issues_experts(settings=settings) ( discussions_commentors, discussions_last_month_commentors, discussions_authors, ) = get_discussions_experts(settings=settings) # commentors = issues_commentors + discussions_commentors commentors = discussions_commentors # last_month_commentors = ( # issues_last_month_commentors + discussions_last_month_commentors # ) last_month_commentors = discussions_last_month_commentors # authors = {**issues_authors, **discussions_authors} authors = {**discussions_authors} return commentors, last_month_commentors, authors def get_contributors(settings: Settings) -> tuple[Counter, Counter, Counter, dict[str, Author]]: """Analyze pull requests to identify contributors, commentors, and reviewers. Args: settings: Configuration settings Returns: A tuple containing: - Counter of contributors (merged PRs) - Counter of commentors - Counter of reviewers - Dictionary mapping usernames to Author objects """ pr_nodes: list[PullRequestNode] = [] pr_edges = get_graphql_pr_edges(settings=settings) while pr_edges: pr_nodes.extend(edge.node for edge in pr_edges) last_edge = pr_edges[-1] pr_edges = get_graphql_pr_edges(settings=settings, after=last_edge.cursor) contributors = Counter() commentors = Counter() reviewers = Counter() authors: dict[str, Author] = {} for pr in pr_nodes: author_name = None if pr.author: authors[pr.author.login] = pr.author author_name = pr.author.login pr_commentors: set[str] = set() pr_reviewers: set[str] = set() for comment in pr.comments.nodes: if comment.author: authors[comment.author.login] = comment.author if comment.author.login == author_name: continue pr_commentors.add(comment.author.login) for author_name in pr_commentors: commentors[author_name] += 1 for review in pr.reviews.nodes: if review.author: authors[review.author.login] = review.author pr_reviewers.add(review.author.login) for reviewer in pr_reviewers: reviewers[reviewer] += 1 if pr.state == 'MERGED' and pr.author: contributors[pr.author.login] += 1 return contributors, commentors, reviewers, authors def get_top_users( *, counter: Counter, min_count: int, authors: dict[str, Author], skip_users: Container[str], ) -> list[dict[str, Any]]: """Get top users based on their contribution counts. Args: counter: Counter with user contribution counts min_count: Minimum count to be included in results authors: Dictionary mapping usernames to Author objects skip_users: Container of usernames to exclude from results Returns: List of dictionaries containing: - login: Username - count: Number of contributions - avatarUrl: URL to user's avatar - url: URL to user's GitHub profile """ users: list[dict[str, Any]] = [] for commentor, count in counter.most_common(50): if commentor in skip_users: continue if count >= min_count: author = authors[commentor] users.append( { 'login': commentor, 'count': count, 'avatarUrl': author.avatarUrl, 'url': author.url, } ) return users if __name__ == '__main__': logging.basicConfig(level=logging.INFO) settings = Settings() logging.info(f'Using config: {settings.model_dump_json()}') g = Github(settings.input_token.get_secret_value()) repo = g.get_repo(settings.github_repository) question_commentors, question_last_month_commentors, question_authors = get_experts(settings=settings) contributors, pr_commentors, reviewers, pr_authors = get_contributors(settings=settings) authors = {**question_authors, **pr_authors} maintainers_logins = { 'samuelcolvin', 'adriangb', 'dmontagu', 'hramezani', 'Kludex', 'davidhewitt', 'alexmojaki', 'Viicos', } bot_names = {'codecov', 'github-actions', 'pre-commit-ci', 'dependabot', 'dependabot-preview'} maintainers = [] for login in maintainers_logins: user = authors[login] maintainers.append( { 'login': login, 'answers': question_commentors[login], 'prs': contributors[login], 'avatarUrl': user.avatarUrl, 'url': user.url, } ) min_count_expert = 10 min_count_last_month = 3 min_count_contributor = 4 min_count_reviewer = 4 experts = get_top_users( counter=question_commentors, min_count=min_count_expert, authors=authors, skip_users=bot_names, ) last_month_active = get_top_users( counter=question_last_month_commentors, min_count=min_count_last_month, authors=authors, skip_users=bot_names, ) top_contributors = get_top_users( counter=contributors, min_count=min_count_contributor, authors=authors, skip_users=bot_names, ) top_reviewers = get_top_users( counter=reviewers, min_count=min_count_reviewer, authors=authors, skip_users=bot_names, ) extra_experts = [ { 'login': 'ybressler', 'count': 3, 'avatarUrl': 'https://avatars.githubusercontent.com/u/40807730?v=4', 'url': 'https://github.com/ybressler', }, ] expert_logins = {e['login'] for e in experts} experts.extend([expert for expert in extra_experts if expert['login'] not in expert_logins]) people = { 'maintainers': maintainers, 'experts': experts, 'last_month_active': last_month_active, 'top_contributors': top_contributors, 'top_reviewers': top_reviewers, } people_path = Path('./docs/plugins/people.yml') people_old_content = people_path.read_text(encoding='utf-8') new_people_content = yaml.dump(people, sort_keys=False, width=200, allow_unicode=True) if people_old_content == new_people_content: logging.info("The Pydantic People data hasn't changed, finishing.") sys.exit(0) people_path.write_text(new_people_content, encoding='utf-8') logging.info('Setting up GitHub Actions git user') subprocess.run(['git', 'config', 'user.name', 'github-actions'], check=True) subprocess.run(['git', 'config', 'user.email', 'github-actions@github.com'], check=True) branch_name = 'pydantic-people-update' logging.info(f'Creating a new branch {branch_name}') subprocess.run(['git', 'checkout', '-b', branch_name], check=True) logging.info('Adding updated file') subprocess.run(['git', 'add', str(people_path)], check=True) logging.info('Committing updated file') message = '👥 Update Pydantic People' result = subprocess.run(['git', 'commit', '-m', message], check=True) logging.info('Pushing branch') subprocess.run(['git', 'push', 'origin', branch_name], check=True) logging.info('Creating PR') pr = repo.create_pull(title=message, body=message, base='main', head=branch_name) logging.info(f'Created PR: {pr.number}') logging.info('Finished') pydantic-pydantic-e28e879/.github/actions/people/pylock.toml000066400000000000000000002415141526274674700242300ustar00rootroot00000000000000# This file was autogenerated by uv via the following command: # uv pip compile --universal --format pylock.toml requirements.in --output-file pylock.toml lock-version = "1.0" created-by = "uv" requires-python = ">=3.13" [[packages]] name = "annotated-types" version = "0.7.0" sdist = { url = "https://files.pythonhosted.org/packages/ee/67/531ea369ba64dcff5ec9c3402f9f51bf748cec26dde048a2f973a4eea7f5/annotated_types-0.7.0.tar.gz", upload-time = 2024-05-20T21:33:25Z, size = 16081, hashes = { sha256 = "aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89" } } wheels = [{ url = "https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl", upload-time = 2024-05-20T21:33:24Z, size = 13643, hashes = { sha256 = "1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53" } }] [[packages]] name = "certifi" version = "2026.2.25" sdist = { url = "https://files.pythonhosted.org/packages/af/2d/7bf41579a8986e348fa033a31cdd0e4121114f6bce2457e8876010b092dd/certifi-2026.2.25.tar.gz", upload-time = 2026-02-25T02:54:17Z, size = 155029, hashes = { sha256 = "e887ab5cee78ea814d3472169153c2d12cd43b14bd03329a39a9c6e2e80bfba7" } } wheels = [{ url = "https://files.pythonhosted.org/packages/9a/3c/c17fb3ca2d9c3acff52e30b309f538586f9f5b9c9cf454f3845fc9af4881/certifi-2026.2.25-py3-none-any.whl", upload-time = 2026-02-25T02:54:15Z, size = 153684, hashes = { sha256 = "027692e4402ad994f1c42e52a4997a9763c646b73e4096e4d5d6db8af1d6f0fa" } }] [[packages]] name = "cffi" version = "2.0.0" marker = "python_full_version >= '3.9' and platform_python_implementation != 'PyPy'" sdist = { url = "https://files.pythonhosted.org/packages/eb/56/b1ba7935a17738ae8453301356628e8147c79dbb825bcbc73dc7401f9846/cffi-2.0.0.tar.gz", upload-time = 2025-09-08T23:24:04Z, size = 523588, hashes = { sha256 = "44d1b5909021139fe36001ae048dbdde8214afa20200eda0f64c068cac5d5529" } } wheels = [ { url = "https://files.pythonhosted.org/packages/4b/8d/a0a47a0c9e413a658623d014e91e74a50cdd2c423f7ccfd44086ef767f90/cffi-2.0.0-cp313-cp313-macosx_10_13_x86_64.whl", upload-time = 2025-09-08T23:23:00Z, size = 185230, hashes = { sha256 = "00bdf7acc5f795150faa6957054fbbca2439db2f775ce831222b66f192f03beb" } }, { url = "https://files.pythonhosted.org/packages/4a/d2/a6c0296814556c68ee32009d9c2ad4f85f2707cdecfd7727951ec228005d/cffi-2.0.0-cp313-cp313-macosx_11_0_arm64.whl", upload-time = 2025-09-08T23:23:02Z, size = 181043, hashes = { sha256 = "45d5e886156860dc35862657e1494b9bae8dfa63bf56796f2fb56e1679fc0bca" } }, { url = "https://files.pythonhosted.org/packages/b0/1e/d22cc63332bd59b06481ceaac49d6c507598642e2230f201649058a7e704/cffi-2.0.0-cp313-cp313-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", upload-time = 2025-09-08T23:23:03Z, size = 212446, hashes = { sha256 = "07b271772c100085dd28b74fa0cd81c8fb1a3ba18b21e03d7c27f3436a10606b" } }, { url = "https://files.pythonhosted.org/packages/a9/f5/a2c23eb03b61a0b8747f211eb716446c826ad66818ddc7810cc2cc19b3f2/cffi-2.0.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", upload-time = 2025-09-08T23:23:04Z, size = 220101, hashes = { sha256 = "d48a880098c96020b02d5a1f7d9251308510ce8858940e6fa99ece33f610838b" } }, { url = "https://files.pythonhosted.org/packages/f2/7f/e6647792fc5850d634695bc0e6ab4111ae88e89981d35ac269956605feba/cffi-2.0.0-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", upload-time = 2025-09-08T23:23:06Z, size = 207948, hashes = { sha256 = "f93fd8e5c8c0a4aa1f424d6173f14a892044054871c771f8566e4008eaa359d2" } }, { url = "https://files.pythonhosted.org/packages/cb/1e/a5a1bd6f1fb30f22573f76533de12a00bf274abcdc55c8edab639078abb6/cffi-2.0.0-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.whl", upload-time = 2025-09-08T23:23:07Z, size = 206422, hashes = { sha256 = "dd4f05f54a52fb558f1ba9f528228066954fee3ebe629fc1660d874d040ae5a3" } }, { url = "https://files.pythonhosted.org/packages/98/df/0a1755e750013a2081e863e7cd37e0cdd02664372c754e5560099eb7aa44/cffi-2.0.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", upload-time = 2025-09-08T23:23:09Z, size = 219499, hashes = { sha256 = "c8d3b5532fc71b7a77c09192b4a5a200ea992702734a2e9279a37f2478236f26" } }, { url = "https://files.pythonhosted.org/packages/50/e1/a969e687fcf9ea58e6e2a928ad5e2dd88cc12f6f0ab477e9971f2309b57c/cffi-2.0.0-cp313-cp313-musllinux_1_2_aarch64.whl", upload-time = 2025-09-08T23:23:10Z, size = 222928, hashes = { sha256 = "d9b29c1f0ae438d5ee9acb31cadee00a58c46cc9c0b2f9038c6b0b3470877a8c" } }, { url = "https://files.pythonhosted.org/packages/36/54/0362578dd2c9e557a28ac77698ed67323ed5b9775ca9d3fe73fe191bb5d8/cffi-2.0.0-cp313-cp313-musllinux_1_2_x86_64.whl", upload-time = 2025-09-08T23:23:12Z, size = 221302, hashes = { sha256 = "6d50360be4546678fc1b79ffe7a66265e28667840010348dd69a314145807a1b" } }, { url = "https://files.pythonhosted.org/packages/eb/6d/bf9bda840d5f1dfdbf0feca87fbdb64a918a69bca42cfa0ba7b137c48cb8/cffi-2.0.0-cp313-cp313-win32.whl", upload-time = 2025-09-08T23:23:14Z, size = 172909, hashes = { sha256 = "74a03b9698e198d47562765773b4a8309919089150a0bb17d829ad7b44b60d27" } }, { url = "https://files.pythonhosted.org/packages/37/18/6519e1ee6f5a1e579e04b9ddb6f1676c17368a7aba48299c3759bbc3c8b3/cffi-2.0.0-cp313-cp313-win_amd64.whl", upload-time = 2025-09-08T23:23:15Z, size = 183402, hashes = { sha256 = "19f705ada2530c1167abacb171925dd886168931e0a7b78f5bffcae5c6b5be75" } }, { url = "https://files.pythonhosted.org/packages/cb/0e/02ceeec9a7d6ee63bb596121c2c8e9b3a9e150936f4fbef6ca1943e6137c/cffi-2.0.0-cp313-cp313-win_arm64.whl", upload-time = 2025-09-08T23:23:16Z, size = 177780, hashes = { sha256 = "256f80b80ca3853f90c21b23ee78cd008713787b1b1e93eae9f3d6a7134abd91" } }, { url = "https://files.pythonhosted.org/packages/92/c4/3ce07396253a83250ee98564f8d7e9789fab8e58858f35d07a9a2c78de9f/cffi-2.0.0-cp314-cp314-macosx_10_13_x86_64.whl", upload-time = 2025-09-08T23:23:18Z, size = 185320, hashes = { sha256 = "fc33c5141b55ed366cfaad382df24fe7dcbc686de5be719b207bb248e3053dc5" } }, { url = "https://files.pythonhosted.org/packages/59/dd/27e9fa567a23931c838c6b02d0764611c62290062a6d4e8ff7863daf9730/cffi-2.0.0-cp314-cp314-macosx_11_0_arm64.whl", upload-time = 2025-09-08T23:23:19Z, size = 181487, hashes = { sha256 = "c654de545946e0db659b3400168c9ad31b5d29593291482c43e3564effbcee13" } }, { url = "https://files.pythonhosted.org/packages/d6/43/0e822876f87ea8a4ef95442c3d766a06a51fc5298823f884ef87aaad168c/cffi-2.0.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", upload-time = 2025-09-08T23:23:20Z, size = 220049, hashes = { sha256 = "24b6f81f1983e6df8db3adc38562c83f7d4a0c36162885ec7f7b77c7dcbec97b" } }, { url = "https://files.pythonhosted.org/packages/b4/89/76799151d9c2d2d1ead63c2429da9ea9d7aac304603de0c6e8764e6e8e70/cffi-2.0.0-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", upload-time = 2025-09-08T23:23:22Z, size = 207793, hashes = { sha256 = "12873ca6cb9b0f0d3a0da705d6086fe911591737a59f28b7936bdfed27c0d47c" } }, { url = "https://files.pythonhosted.org/packages/bb/dd/3465b14bb9e24ee24cb88c9e3730f6de63111fffe513492bf8c808a3547e/cffi-2.0.0-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.whl", upload-time = 2025-09-08T23:23:23Z, size = 206300, hashes = { sha256 = "d9b97165e8aed9272a6bb17c01e3cc5871a594a446ebedc996e2397a1c1ea8ef" } }, { url = "https://files.pythonhosted.org/packages/47/d9/d83e293854571c877a92da46fdec39158f8d7e68da75bf73581225d28e90/cffi-2.0.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", upload-time = 2025-09-08T23:23:24Z, size = 219244, hashes = { sha256 = "afb8db5439b81cf9c9d0c80404b60c3cc9c3add93e114dcae767f1477cb53775" } }, { url = "https://files.pythonhosted.org/packages/2b/0f/1f177e3683aead2bb00f7679a16451d302c436b5cbf2505f0ea8146ef59e/cffi-2.0.0-cp314-cp314-musllinux_1_2_aarch64.whl", upload-time = 2025-09-08T23:23:26Z, size = 222828, hashes = { sha256 = "737fe7d37e1a1bffe70bd5754ea763a62a066dc5913ca57e957824b72a85e205" } }, { url = "https://files.pythonhosted.org/packages/c6/0f/cafacebd4b040e3119dcb32fed8bdef8dfe94da653155f9d0b9dc660166e/cffi-2.0.0-cp314-cp314-musllinux_1_2_x86_64.whl", upload-time = 2025-09-08T23:23:27Z, size = 220926, hashes = { sha256 = "38100abb9d1b1435bc4cc340bb4489635dc2f0da7456590877030c9b3d40b0c1" } }, { url = "https://files.pythonhosted.org/packages/3e/aa/df335faa45b395396fcbc03de2dfcab242cd61a9900e914fe682a59170b1/cffi-2.0.0-cp314-cp314-win32.whl", upload-time = 2025-09-08T23:23:44Z, size = 175328, hashes = { sha256 = "087067fa8953339c723661eda6b54bc98c5625757ea62e95eb4898ad5e776e9f" } }, { url = "https://files.pythonhosted.org/packages/bb/92/882c2d30831744296ce713f0feb4c1cd30f346ef747b530b5318715cc367/cffi-2.0.0-cp314-cp314-win_amd64.whl", upload-time = 2025-09-08T23:23:45Z, size = 185650, hashes = { sha256 = "203a48d1fb583fc7d78a4c6655692963b860a417c0528492a6bc21f1aaefab25" } }, { url = "https://files.pythonhosted.org/packages/9f/2c/98ece204b9d35a7366b5b2c6539c350313ca13932143e79dc133ba757104/cffi-2.0.0-cp314-cp314-win_arm64.whl", upload-time = 2025-09-08T23:23:47Z, size = 180687, hashes = { sha256 = "dbd5c7a25a7cb98f5ca55d258b103a2054f859a46ae11aaf23134f9cc0d356ad" } }, { url = "https://files.pythonhosted.org/packages/3e/61/c768e4d548bfa607abcda77423448df8c471f25dbe64fb2ef6d555eae006/cffi-2.0.0-cp314-cp314t-macosx_10_13_x86_64.whl", upload-time = 2025-09-08T23:23:29Z, size = 188773, hashes = { sha256 = "9a67fc9e8eb39039280526379fb3a70023d77caec1852002b4da7e8b270c4dd9" } }, { url = "https://files.pythonhosted.org/packages/2c/ea/5f76bce7cf6fcd0ab1a1058b5af899bfbef198bea4d5686da88471ea0336/cffi-2.0.0-cp314-cp314t-macosx_11_0_arm64.whl", upload-time = 2025-09-08T23:23:30Z, size = 185013, hashes = { sha256 = "7a66c7204d8869299919db4d5069a82f1561581af12b11b3c9f48c584eb8743d" } }, { url = "https://files.pythonhosted.org/packages/be/b4/c56878d0d1755cf9caa54ba71e5d049479c52f9e4afc230f06822162ab2f/cffi-2.0.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", upload-time = 2025-09-08T23:23:31Z, size = 221593, hashes = { sha256 = "7cc09976e8b56f8cebd752f7113ad07752461f48a58cbba644139015ac24954c" } }, { url = "https://files.pythonhosted.org/packages/e0/0d/eb704606dfe8033e7128df5e90fee946bbcb64a04fcdaa97321309004000/cffi-2.0.0-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", upload-time = 2025-09-08T23:23:33Z, size = 209354, hashes = { sha256 = "92b68146a71df78564e4ef48af17551a5ddd142e5190cdf2c5624d0c3ff5b2e8" } }, { url = "https://files.pythonhosted.org/packages/d8/19/3c435d727b368ca475fb8742ab97c9cb13a0de600ce86f62eab7fa3eea60/cffi-2.0.0-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.whl", upload-time = 2025-09-08T23:23:34Z, size = 208480, hashes = { sha256 = "b1e74d11748e7e98e2f426ab176d4ed720a64412b6a15054378afdb71e0f37dc" } }, { url = "https://files.pythonhosted.org/packages/d0/44/681604464ed9541673e486521497406fadcc15b5217c3e326b061696899a/cffi-2.0.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", upload-time = 2025-09-08T23:23:36Z, size = 221584, hashes = { sha256 = "28a3a209b96630bca57cce802da70c266eb08c6e97e5afd61a75611ee6c64592" } }, { url = "https://files.pythonhosted.org/packages/25/8e/342a504ff018a2825d395d44d63a767dd8ebc927ebda557fecdaca3ac33a/cffi-2.0.0-cp314-cp314t-musllinux_1_2_aarch64.whl", upload-time = 2025-09-08T23:23:37Z, size = 224443, hashes = { sha256 = "7553fb2090d71822f02c629afe6042c299edf91ba1bf94951165613553984512" } }, { url = "https://files.pythonhosted.org/packages/e1/5e/b666bacbbc60fbf415ba9988324a132c9a7a0448a9a8f125074671c0f2c3/cffi-2.0.0-cp314-cp314t-musllinux_1_2_x86_64.whl", upload-time = 2025-09-08T23:23:38Z, size = 223437, hashes = { sha256 = "6c6c373cfc5c83a975506110d17457138c8c63016b563cc9ed6e056a82f13ce4" } }, { url = "https://files.pythonhosted.org/packages/a0/1d/ec1a60bd1a10daa292d3cd6bb0b359a81607154fb8165f3ec95fe003b85c/cffi-2.0.0-cp314-cp314t-win32.whl", upload-time = 2025-09-08T23:23:40Z, size = 180487, hashes = { sha256 = "1fc9ea04857caf665289b7a75923f2c6ed559b8298a1b8c49e59f7dd95c8481e" } }, { url = "https://files.pythonhosted.org/packages/bf/41/4c1168c74fac325c0c8156f04b6749c8b6a8f405bbf91413ba088359f60d/cffi-2.0.0-cp314-cp314t-win_amd64.whl", upload-time = 2025-09-08T23:23:41Z, size = 191726, hashes = { sha256 = "d68b6cef7827e8641e8ef16f4494edda8b36104d79773a334beaa1e3521430f6" } }, { url = "https://files.pythonhosted.org/packages/ae/3a/dbeec9d1ee0844c679f6bb5d6ad4e9f198b1224f4e7a32825f47f6192b0c/cffi-2.0.0-cp314-cp314t-win_arm64.whl", upload-time = 2025-09-08T23:23:43Z, size = 184195, hashes = { sha256 = "0a1527a803f0a659de1af2e1fd700213caba79377e27e4693648c2923da066f9" } }, ] [[packages]] name = "charset-normalizer" version = "3.4.7" sdist = { url = "https://files.pythonhosted.org/packages/e7/a1/67fe25fac3c7642725500a3f6cfe5821ad557c3abb11c9d20d12c7008d3e/charset_normalizer-3.4.7.tar.gz", upload-time = 2026-04-02T09:28:39Z, size = 144271, hashes = { sha256 = "ae89db9e5f98a11a4bf50407d4363e7b09b31e55bc117b4f7d80aab97ba009e5" } } wheels = [ { url = "https://files.pythonhosted.org/packages/c1/3b/66777e39d3ae1ddc77ee606be4ec6d8cbd4c801f65e5a1b6f2b11b8346dd/charset_normalizer-3.4.7-cp313-cp313-macosx_10_13_universal2.whl", upload-time = 2026-04-02T09:26:45Z, size = 309627, hashes = { sha256 = "f496c9c3cc02230093d8330875c4c3cdfc3b73612a5fd921c65d39cbcef08063" } }, { url = "https://files.pythonhosted.org/packages/2e/4e/b7f84e617b4854ade48a1b7915c8ccfadeba444d2a18c291f696e37f0d3b/charset_normalizer-3.4.7-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", upload-time = 2026-04-02T09:26:46Z, size = 207008, hashes = { sha256 = "0ea948db76d31190bf08bd371623927ee1339d5f2a0b4b1b4a4439a65298703c" } }, { url = "https://files.pythonhosted.org/packages/c4/bb/ec73c0257c9e11b268f018f068f5d00aa0ef8c8b09f7753ebd5f2880e248/charset_normalizer-3.4.7-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", upload-time = 2026-04-02T09:26:48Z, size = 228303, hashes = { sha256 = "a277ab8928b9f299723bc1a2dabb1265911b1a76341f90a510368ca44ad9ab66" } }, { url = "https://files.pythonhosted.org/packages/85/fb/32d1f5033484494619f701e719429c69b766bfc4dbc61aa9e9c8c166528b/charset_normalizer-3.4.7-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", upload-time = 2026-04-02T09:26:49Z, size = 224282, hashes = { sha256 = "3bec022aec2c514d9cf199522a802bd007cd588ab17ab2525f20f9c34d067c18" } }, { url = "https://files.pythonhosted.org/packages/fa/07/330e3a0dda4c404d6da83b327270906e9654a24f6c546dc886a0eb0ffb23/charset_normalizer-3.4.7-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", upload-time = 2026-04-02T09:26:50Z, size = 215595, hashes = { sha256 = "e044c39e41b92c845bc815e5ae4230804e8e7bc29e399b0437d64222d92809dd" } }, { url = "https://files.pythonhosted.org/packages/e3/7c/fc890655786e423f02556e0216d4b8c6bcb6bdfa890160dc66bf52dee468/charset_normalizer-3.4.7-cp313-cp313-manylinux_2_31_armv7l.whl", upload-time = 2026-04-02T09:26:52Z, size = 201986, hashes = { sha256 = "f495a1652cf3fbab2eb0639776dad966c2fb874d79d87ca07f9d5f059b8bd215" } }, { url = "https://files.pythonhosted.org/packages/d8/97/bfb18b3db2aed3b90cf54dc292ad79fdd5ad65c4eae454099475cbeadd0d/charset_normalizer-3.4.7-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", upload-time = 2026-04-02T09:26:53Z, size = 211711, hashes = { sha256 = "e712b419df8ba5e42b226c510472b37bd57b38e897d3eca5e8cfd410a29fa859" } }, { url = "https://files.pythonhosted.org/packages/6f/a5/a581c13798546a7fd557c82614a5c65a13df2157e9ad6373166d2a3e645d/charset_normalizer-3.4.7-cp313-cp313-musllinux_1_2_aarch64.whl", upload-time = 2026-04-02T09:26:54Z, size = 210036, hashes = { sha256 = "7804338df6fcc08105c7745f1502ba68d900f45fd770d5bdd5288ddccb8a42d8" } }, { url = "https://files.pythonhosted.org/packages/8c/bf/b3ab5bcb478e4193d517644b0fb2bf5497fbceeaa7a1bc0f4d5b50953861/charset_normalizer-3.4.7-cp313-cp313-musllinux_1_2_armv7l.whl", upload-time = 2026-04-02T09:26:56Z, size = 202998, hashes = { sha256 = "481551899c856c704d58119b5025793fa6730adda3571971af568f66d2424bb5" } }, { url = "https://files.pythonhosted.org/packages/e7/4e/23efd79b65d314fa320ec6017b4b5834d5c12a58ba4610aa353af2e2f577/charset_normalizer-3.4.7-cp313-cp313-musllinux_1_2_ppc64le.whl", upload-time = 2026-04-02T09:26:57Z, size = 230056, hashes = { sha256 = "f59099f9b66f0d7145115e6f80dd8b1d847176df89b234a5a6b3f00437aa0832" } }, { url = "https://files.pythonhosted.org/packages/b9/9f/1e1941bc3f0e01df116e68dc37a55c4d249df5e6fa77f008841aef68264f/charset_normalizer-3.4.7-cp313-cp313-musllinux_1_2_riscv64.whl", upload-time = 2026-04-02T09:26:58Z, size = 211537, hashes = { sha256 = "f59ad4c0e8f6bba240a9bb85504faa1ab438237199d4cce5f622761507b8f6a6" } }, { url = "https://files.pythonhosted.org/packages/80/0f/088cbb3020d44428964a6c97fe1edfb1b9550396bf6d278330281e8b709c/charset_normalizer-3.4.7-cp313-cp313-musllinux_1_2_s390x.whl", upload-time = 2026-04-02T09:27:00Z, size = 226176, hashes = { sha256 = "3dedcc22d73ec993f42055eff4fcfed9318d1eeb9a6606c55892a26964964e48" } }, { url = "https://files.pythonhosted.org/packages/6a/9f/130394f9bbe06f4f63e22641d32fc9b202b7e251c9aef4db044324dac493/charset_normalizer-3.4.7-cp313-cp313-musllinux_1_2_x86_64.whl", upload-time = 2026-04-02T09:27:02Z, size = 217723, hashes = { sha256 = "64f02c6841d7d83f832cd97ccf8eb8a906d06eb95d5276069175c696b024b60a" } }, { url = "https://files.pythonhosted.org/packages/73/55/c469897448a06e49f8fa03f6caae97074fde823f432a98f979cc42b90e69/charset_normalizer-3.4.7-cp313-cp313-win32.whl", upload-time = 2026-04-02T09:27:03Z, size = 148085, hashes = { sha256 = "4042d5c8f957e15221d423ba781e85d553722fc4113f523f2feb7b188cc34c5e" } }, { url = "https://files.pythonhosted.org/packages/5d/78/1b74c5bbb3f99b77a1715c91b3e0b5bdb6fe302d95ace4f5b1bec37b0167/charset_normalizer-3.4.7-cp313-cp313-win_amd64.whl", upload-time = 2026-04-02T09:27:04Z, size = 158819, hashes = { sha256 = "3946fa46a0cf3e4c8cb1cc52f56bb536310d34f25f01ca9b6c16afa767dab110" } }, { url = "https://files.pythonhosted.org/packages/68/86/46bd42279d323deb8687c4a5a811fd548cb7d1de10cf6535d099877a9a9f/charset_normalizer-3.4.7-cp313-cp313-win_arm64.whl", upload-time = 2026-04-02T09:27:05Z, size = 147915, hashes = { sha256 = "80d04837f55fc81da168b98de4f4b797ef007fc8a79ab71c6ec9bc4dd662b15b" } }, { url = "https://files.pythonhosted.org/packages/97/c8/c67cb8c70e19ef1960b97b22ed2a1567711de46c4ddf19799923adc836c2/charset_normalizer-3.4.7-cp314-cp314-macosx_10_15_universal2.whl", upload-time = 2026-04-02T09:27:07Z, size = 309234, hashes = { sha256 = "c36c333c39be2dbca264d7803333c896ab8fa7d4d6f0ab7edb7dfd7aea6e98c0" } }, { url = "https://files.pythonhosted.org/packages/99/85/c091fdee33f20de70d6c8b522743b6f831a2f1cd3ff86de4c6a827c48a76/charset_normalizer-3.4.7-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", upload-time = 2026-04-02T09:27:08Z, size = 208042, hashes = { sha256 = "1c2aed2e5e41f24ea8ef1590b8e848a79b56f3a5564a65ceec43c9d692dc7d8a" } }, { url = "https://files.pythonhosted.org/packages/87/1c/ab2ce611b984d2fd5d86a5a8a19c1ae26acac6bad967da4967562c75114d/charset_normalizer-3.4.7-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", upload-time = 2026-04-02T09:27:09Z, size = 228706, hashes = { sha256 = "54523e136b8948060c0fa0bc7b1b50c32c186f2fceee897a495406bb6e311d2b" } }, { url = "https://files.pythonhosted.org/packages/a8/29/2b1d2cb00bf085f59d29eb773ce58ec2d325430f8c216804a0a5cd83cbca/charset_normalizer-3.4.7-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", upload-time = 2026-04-02T09:27:11Z, size = 224727, hashes = { sha256 = "715479b9a2802ecac752a3b0efa2b0b60285cf962ee38414211abdfccc233b41" } }, { url = "https://files.pythonhosted.org/packages/47/5c/032c2d5a07fe4d4855fea851209cca2b6f03ebeb6d4e3afdb3358386a684/charset_normalizer-3.4.7-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", upload-time = 2026-04-02T09:27:12Z, size = 215882, hashes = { sha256 = "bd6c2a1c7573c64738d716488d2cdd3c00e340e4835707d8fdb8dc1a66ef164e" } }, { url = "https://files.pythonhosted.org/packages/2c/c2/356065d5a8b78ed04499cae5f339f091946a6a74f91e03476c33f0ab7100/charset_normalizer-3.4.7-cp314-cp314-manylinux_2_31_armv7l.whl", upload-time = 2026-04-02T09:27:13Z, size = 200860, hashes = { sha256 = "c45e9440fb78f8ddabcf714b68f936737a121355bf59f3907f4e17721b9d1aae" } }, { url = "https://files.pythonhosted.org/packages/0c/cd/a32a84217ced5039f53b29f460962abb2d4420def55afabe45b1c3c7483d/charset_normalizer-3.4.7-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", upload-time = 2026-04-02T09:27:15Z, size = 211564, hashes = { sha256 = "3534e7dcbdcf757da6b85a0bbf5b6868786d5982dd959b065e65481644817a18" } }, { url = "https://files.pythonhosted.org/packages/44/86/58e6f13ce26cc3b8f4a36b94a0f22ae2f00a72534520f4ae6857c4b81f89/charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_aarch64.whl", upload-time = 2026-04-02T09:27:16Z, size = 211276, hashes = { sha256 = "e8ac484bf18ce6975760921bb6148041faa8fef0547200386ea0b52b5d27bf7b" } }, { url = "https://files.pythonhosted.org/packages/8f/fe/d17c32dc72e17e155e06883efa84514ca375f8a528ba2546bee73fc4df81/charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_armv7l.whl", upload-time = 2026-04-02T09:27:18Z, size = 201238, hashes = { sha256 = "a5fe03b42827c13cdccd08e6c0247b6a6d4b5e3cdc53fd1749f5896adcdc2356" } }, { url = "https://files.pythonhosted.org/packages/6a/29/f33daa50b06525a237451cdb6c69da366c381a3dadcd833fa5676bc468b3/charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_ppc64le.whl", upload-time = 2026-04-02T09:27:19Z, size = 230189, hashes = { sha256 = "2d6eb928e13016cea4f1f21d1e10c1cebd5a421bc57ddf5b1142ae3f86824fab" } }, { url = "https://files.pythonhosted.org/packages/b6/6e/52c84015394a6a0bdcd435210a7e944c5f94ea1055f5cc5d56c5fe368e7b/charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_riscv64.whl", upload-time = 2026-04-02T09:27:20Z, size = 211352, hashes = { sha256 = "e74327fb75de8986940def6e8dee4f127cc9752bee7355bb323cc5b2659b6d46" } }, { url = "https://files.pythonhosted.org/packages/8c/d7/4353be581b373033fb9198bf1da3cf8f09c1082561e8e922aa7b39bf9fe8/charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_s390x.whl", upload-time = 2026-04-02T09:27:22Z, size = 227024, hashes = { sha256 = "d6038d37043bced98a66e68d3aa2b6a35505dc01328cd65217cefe82f25def44" } }, { url = "https://files.pythonhosted.org/packages/30/45/99d18aa925bd1740098ccd3060e238e21115fffbfdcb8f3ece837d0ace6c/charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_x86_64.whl", upload-time = 2026-04-02T09:27:23Z, size = 217869, hashes = { sha256 = "7579e913a5339fb8fa133f6bbcfd8e6749696206cf05acdbdca71a1b436d8e72" } }, { url = "https://files.pythonhosted.org/packages/5c/05/5ee478aa53f4bb7996482153d4bfe1b89e0f087f0ab6b294fcf92d595873/charset_normalizer-3.4.7-cp314-cp314-win32.whl", upload-time = 2026-04-02T09:27:25Z, size = 148541, hashes = { sha256 = "5b77459df20e08151cd6f8b9ef8ef1f961ef73d85c21a555c7eed5b79410ec10" } }, { url = "https://files.pythonhosted.org/packages/48/77/72dcb0921b2ce86420b2d79d454c7022bf5be40202a2a07906b9f2a35c97/charset_normalizer-3.4.7-cp314-cp314-win_amd64.whl", upload-time = 2026-04-02T09:27:26Z, size = 159634, hashes = { sha256 = "92a0a01ead5e668468e952e4238cccd7c537364eb7d851ab144ab6627dbbe12f" } }, { url = "https://files.pythonhosted.org/packages/c6/a3/c2369911cd72f02386e4e340770f6e158c7980267da16af8f668217abaa0/charset_normalizer-3.4.7-cp314-cp314-win_arm64.whl", upload-time = 2026-04-02T09:27:28Z, size = 148384, hashes = { sha256 = "67f6279d125ca0046a7fd386d01b311c6363844deac3e5b069b514ba3e63c246" } }, { url = "https://files.pythonhosted.org/packages/94/09/7e8a7f73d24dba1f0035fbbf014d2c36828fc1bf9c88f84093e57d315935/charset_normalizer-3.4.7-cp314-cp314t-macosx_10_15_universal2.whl", upload-time = 2026-04-02T09:27:29Z, size = 330133, hashes = { sha256 = "effc3f449787117233702311a1b7d8f59cba9ced946ba727bdc329ec69028e24" } }, { url = "https://files.pythonhosted.org/packages/8d/da/96975ddb11f8e977f706f45cddd8540fd8242f71ecdb5d18a80723dcf62c/charset_normalizer-3.4.7-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", upload-time = 2026-04-02T09:27:30Z, size = 216257, hashes = { sha256 = "fbccdc05410c9ee21bbf16a35f4c1d16123dcdeb8a1d38f33654fa21d0234f79" } }, { url = "https://files.pythonhosted.org/packages/e5/e8/1d63bf8ef2d388e95c64b2098f45f84758f6d102a087552da1485912637b/charset_normalizer-3.4.7-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", upload-time = 2026-04-02T09:27:32Z, size = 234851, hashes = { sha256 = "733784b6d6def852c814bce5f318d25da2ee65dd4839a0718641c696e09a2960" } }, { url = "https://files.pythonhosted.org/packages/9b/40/e5ff04233e70da2681fa43969ad6f66ca5611d7e669be0246c4c7aaf6dc8/charset_normalizer-3.4.7-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", upload-time = 2026-04-02T09:27:34Z, size = 233393, hashes = { sha256 = "a89c23ef8d2c6b27fd200a42aa4ac72786e7c60d40efdc76e6011260b6e949c4" } }, { url = "https://files.pythonhosted.org/packages/be/c1/06c6c49d5a5450f76899992f1ee40b41d076aee9279b49cf9974d2f313d5/charset_normalizer-3.4.7-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", upload-time = 2026-04-02T09:27:35Z, size = 223251, hashes = { sha256 = "6c114670c45346afedc0d947faf3c7f701051d2518b943679c8ff88befe14f8e" } }, { url = "https://files.pythonhosted.org/packages/2b/9f/f2ff16fb050946169e3e1f82134d107e5d4ae72647ec8a1b1446c148480f/charset_normalizer-3.4.7-cp314-cp314t-manylinux_2_31_armv7l.whl", upload-time = 2026-04-02T09:27:36Z, size = 206609, hashes = { sha256 = "a180c5e59792af262bf263b21a3c49353f25945d8d9f70628e73de370d55e1e1" } }, { url = "https://files.pythonhosted.org/packages/69/d5/a527c0cd8d64d2eab7459784fb4169a0ac76e5a6fc5237337982fd61347e/charset_normalizer-3.4.7-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", upload-time = 2026-04-02T09:27:38Z, size = 220014, hashes = { sha256 = "3c9a494bc5ec77d43cea229c4f6db1e4d8fe7e1bbffa8b6f0f0032430ff8ab44" } }, { url = "https://files.pythonhosted.org/packages/7e/80/8a7b8104a3e203074dc9aa2c613d4b726c0e136bad1cc734594b02867972/charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_aarch64.whl", upload-time = 2026-04-02T09:27:39Z, size = 218979, hashes = { sha256 = "8d828b6667a32a728a1ad1d93957cdf37489c57b97ae6c4de2860fa749b8fc1e" } }, { url = "https://files.pythonhosted.org/packages/02/9a/b759b503d507f375b2b5c153e4d2ee0a75aa215b7f2489cf314f4541f2c0/charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_armv7l.whl", upload-time = 2026-04-02T09:27:40Z, size = 209238, hashes = { sha256 = "cf1493cd8607bec4d8a7b9b004e699fcf8f9103a9284cc94962cb73d20f9d4a3" } }, { url = "https://files.pythonhosted.org/packages/c2/4e/0f3f5d47b86bdb79256e7290b26ac847a2832d9a4033f7eb2cd4bcf4bb5b/charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_ppc64le.whl", upload-time = 2026-04-02T09:27:42Z, size = 236110, hashes = { sha256 = "0c96c3b819b5c3e9e165495db84d41914d6894d55181d2d108cc1a69bfc9cce0" } }, { url = "https://files.pythonhosted.org/packages/96/23/bce28734eb3ed2c91dcf93abeb8a5cf393a7b2749725030bb630e554fdd8/charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_riscv64.whl", upload-time = 2026-04-02T09:27:43Z, size = 219824, hashes = { sha256 = "752a45dc4a6934060b3b0dab47e04edc3326575f82be64bc4fc293914566503e" } }, { url = "https://files.pythonhosted.org/packages/2c/6f/6e897c6984cc4d41af319b077f2f600fc8214eb2fe2d6bcb79141b882400/charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_s390x.whl", upload-time = 2026-04-02T09:27:45Z, size = 233103, hashes = { sha256 = "8778f0c7a52e56f75d12dae53ae320fae900a8b9b4164b981b9c5ce059cd1fcb" } }, { url = "https://files.pythonhosted.org/packages/76/22/ef7bd0fe480a0ae9b656189ec00744b60933f68b4f42a7bb06589f6f576a/charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_x86_64.whl", upload-time = 2026-04-02T09:27:46Z, size = 225194, hashes = { sha256 = "ce3412fbe1e31eb81ea42f4169ed94861c56e643189e1e75f0041f3fe7020abe" } }, { url = "https://files.pythonhosted.org/packages/c5/a7/0e0ab3e0b5bc1219bd80a6a0d4d72ca74d9250cb2382b7c699c147e06017/charset_normalizer-3.4.7-cp314-cp314t-win32.whl", upload-time = 2026-04-02T09:27:48Z, size = 159827, hashes = { sha256 = "c03a41a8784091e67a39648f70c5f97b5b6a37f216896d44d2cdcb82615339a0" } }, { url = "https://files.pythonhosted.org/packages/7a/1d/29d32e0fb40864b1f878c7f5a0b343ae676c6e2b271a2d55cc3a152391da/charset_normalizer-3.4.7-cp314-cp314t-win_amd64.whl", upload-time = 2026-04-02T09:27:49Z, size = 174168, hashes = { sha256 = "03853ed82eeebbce3c2abfdbc98c96dc205f32a79627688ac9a27370ea61a49c" } }, { url = "https://files.pythonhosted.org/packages/de/32/d92444ad05c7a6e41fb2036749777c163baf7a0301a040cb672d6b2b1ae9/charset_normalizer-3.4.7-cp314-cp314t-win_arm64.whl", upload-time = 2026-04-02T09:27:51Z, size = 153018, hashes = { sha256 = "c35abb8bfff0185efac5878da64c45dafd2b37fb0383add1be155a763c1f083d" } }, { url = "https://files.pythonhosted.org/packages/db/8f/61959034484a4a7c527811f4721e75d02d653a35afb0b6054474d8185d4c/charset_normalizer-3.4.7-py3-none-any.whl", upload-time = 2026-04-02T09:28:37Z, size = 61958, hashes = { sha256 = "3dce51d0f5e7951f8bb4900c257dad282f49190fdbebecd4ba99bcc41fef404d" } }, ] [[packages]] name = "cryptography" version = "46.0.6" sdist = { url = "https://files.pythonhosted.org/packages/a4/ba/04b1bd4218cbc58dc90ce967106d51582371b898690f3ae0402876cc4f34/cryptography-46.0.6.tar.gz", upload-time = 2026-03-25T23:34:53Z, size = 750542, hashes = { sha256 = "27550628a518c5c6c903d84f637fbecf287f6cb9ced3804838a1295dc1fd0759" } } wheels = [ { url = "https://files.pythonhosted.org/packages/47/23/9285e15e3bc57325b0a72e592921983a701efc1ee8f91c06c5f0235d86d9/cryptography-46.0.6-cp311-abi3-macosx_10_9_universal2.whl", upload-time = 2026-03-25T23:33:22Z, size = 7176401, hashes = { sha256 = "64235194bad039a10bb6d2d930ab3323baaec67e2ce36215fd0952fad0930ca8" } }, { url = "https://files.pythonhosted.org/packages/60/f8/e61f8f13950ab6195b31913b42d39f0f9afc7d93f76710f299b5ec286ae6/cryptography-46.0.6-cp311-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", upload-time = 2026-03-25T23:33:23Z, size = 4275275, hashes = { sha256 = "26031f1e5ca62fcb9d1fcb34b2b60b390d1aacaa15dc8b895a9ed00968b97b30" } }, { url = "https://files.pythonhosted.org/packages/19/69/732a736d12c2631e140be2348b4ad3d226302df63ef64d30dfdb8db7ad1c/cryptography-46.0.6-cp311-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", upload-time = 2026-03-25T23:33:25Z, size = 4425320, hashes = { sha256 = "9a693028b9cbe51b5a1136232ee8f2bc242e4e19d456ded3fa7c86e43c713b4a" } }, { url = "https://files.pythonhosted.org/packages/d4/12/123be7292674abf76b21ac1fc0e1af50661f0e5b8f0ec8285faac18eb99e/cryptography-46.0.6-cp311-abi3-manylinux_2_28_aarch64.whl", upload-time = 2026-03-25T23:33:27Z, size = 4278082, hashes = { sha256 = "67177e8a9f421aa2d3a170c3e56eca4e0128883cf52a071a7cbf53297f18b175" } }, { url = "https://files.pythonhosted.org/packages/5b/ba/d5e27f8d68c24951b0a484924a84c7cdaed7502bac9f18601cd357f8b1d2/cryptography-46.0.6-cp311-abi3-manylinux_2_28_ppc64le.whl", upload-time = 2026-03-25T23:33:29Z, size = 4926514, hashes = { sha256 = "d9528b535a6c4f8ff37847144b8986a9a143585f0540fbcb1a98115b543aa463" } }, { url = "https://files.pythonhosted.org/packages/34/71/1ea5a7352ae516d5512d17babe7e1b87d9db5150b21f794b1377eac1edc0/cryptography-46.0.6-cp311-abi3-manylinux_2_28_x86_64.whl", upload-time = 2026-03-25T23:33:30Z, size = 4457766, hashes = { sha256 = "22259338084d6ae497a19bae5d4c66b7ca1387d3264d1c2c0e72d9e9b6a77b97" } }, { url = "https://files.pythonhosted.org/packages/01/59/562be1e653accee4fdad92c7a2e88fced26b3fdfce144047519bbebc299e/cryptography-46.0.6-cp311-abi3-manylinux_2_31_armv7l.whl", upload-time = 2026-03-25T23:33:33Z, size = 3986535, hashes = { sha256 = "760997a4b950ff00d418398ad73fbc91aa2894b5c1db7ccb45b4f68b42a63b3c" } }, { url = "https://files.pythonhosted.org/packages/d6/8b/b1ebfeb788bf4624d36e45ed2662b8bd43a05ff62157093c1539c1288a18/cryptography-46.0.6-cp311-abi3-manylinux_2_34_aarch64.whl", upload-time = 2026-03-25T23:33:34Z, size = 4277618, hashes = { sha256 = "3dfa6567f2e9e4c5dceb8ccb5a708158a2a871052fa75c8b78cb0977063f1507" } }, { url = "https://files.pythonhosted.org/packages/dd/52/a005f8eabdb28df57c20f84c44d397a755782d6ff6d455f05baa2785bd91/cryptography-46.0.6-cp311-abi3-manylinux_2_34_ppc64le.whl", upload-time = 2026-03-25T23:33:37Z, size = 4890802, hashes = { sha256 = "cdcd3edcbc5d55757e5f5f3d330dd00007ae463a7e7aa5bf132d1f22a4b62b19" } }, { url = "https://files.pythonhosted.org/packages/ec/4d/8e7d7245c79c617d08724e2efa397737715ca0ec830ecb3c91e547302555/cryptography-46.0.6-cp311-abi3-manylinux_2_34_x86_64.whl", upload-time = 2026-03-25T23:33:38Z, size = 4457425, hashes = { sha256 = "d4e4aadb7fc1f88687f47ca20bb7227981b03afaae69287029da08096853b738" } }, { url = "https://files.pythonhosted.org/packages/1d/5c/f6c3596a1430cec6f949085f0e1a970638d76f81c3ea56d93d564d04c340/cryptography-46.0.6-cp311-abi3-musllinux_1_2_aarch64.whl", upload-time = 2026-03-25T23:33:40Z, size = 4405530, hashes = { sha256 = "2b417edbe8877cda9022dde3a008e2deb50be9c407eef034aeeb3a8b11d9db3c" } }, { url = "https://files.pythonhosted.org/packages/7e/c9/9f9cea13ee2dbde070424e0c4f621c091a91ffcc504ffea5e74f0e1daeff/cryptography-46.0.6-cp311-abi3-musllinux_1_2_x86_64.whl", upload-time = 2026-03-25T23:33:42Z, size = 4667896, hashes = { sha256 = "380343e0653b1c9d7e1f55b52aaa2dbb2fdf2730088d48c43ca1c7c0abb7cc2f" } }, { url = "https://files.pythonhosted.org/packages/ad/b5/1895bc0821226f129bc74d00eccfc6a5969e2028f8617c09790bf89c185e/cryptography-46.0.6-cp311-abi3-win32.whl", upload-time = 2026-03-25T23:33:45Z, size = 3026348, hashes = { sha256 = "bcb87663e1f7b075e48c3be3ecb5f0b46c8fc50b50a97cf264e7f60242dca3f2" } }, { url = "https://files.pythonhosted.org/packages/c3/f8/c9bcbf0d3e6ad288b9d9aa0b1dee04b063d19e8c4f871855a03ab3a297ab/cryptography-46.0.6-cp311-abi3-win_amd64.whl", upload-time = 2026-03-25T23:33:46Z, size = 3483896, hashes = { sha256 = "6739d56300662c468fddb0e5e291f9b4d084bead381667b9e654c7dd81705124" } }, { url = "https://files.pythonhosted.org/packages/01/41/3a578f7fd5c70611c0aacba52cd13cb364a5dee895a5c1d467208a9380b0/cryptography-46.0.6-cp314-cp314t-macosx_10_9_universal2.whl", upload-time = 2026-03-25T23:33:48Z, size = 7117147, hashes = { sha256 = "2ef9e69886cbb137c2aef9772c2e7138dc581fad4fcbcf13cc181eb5a3ab6275" } }, { url = "https://files.pythonhosted.org/packages/fa/87/887f35a6fca9dde90cad08e0de0c89263a8e59b2d2ff904fd9fcd8025b6f/cryptography-46.0.6-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", upload-time = 2026-03-25T23:33:49Z, size = 4266221, hashes = { sha256 = "7f417f034f91dcec1cb6c5c35b07cdbb2ef262557f701b4ecd803ee8cefed4f4" } }, { url = "https://files.pythonhosted.org/packages/aa/a8/0a90c4f0b0871e0e3d1ed126aed101328a8a57fd9fd17f00fb67e82a51ca/cryptography-46.0.6-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", upload-time = 2026-03-25T23:33:52Z, size = 4408952, hashes = { sha256 = "d24c13369e856b94892a89ddf70b332e0b70ad4a5c43cf3e9cb71d6d7ffa1f7b" } }, { url = "https://files.pythonhosted.org/packages/16/0b/b239701eb946523e4e9f329336e4ff32b1247e109cbab32d1a7b61da8ed7/cryptography-46.0.6-cp314-cp314t-manylinux_2_28_aarch64.whl", upload-time = 2026-03-25T23:33:54Z, size = 4270141, hashes = { sha256 = "aad75154a7ac9039936d50cf431719a2f8d4ed3d3c277ac03f3339ded1a5e707" } }, { url = "https://files.pythonhosted.org/packages/0f/a8/976acdd4f0f30df7b25605f4b9d3d89295351665c2091d18224f7ad5cdbf/cryptography-46.0.6-cp314-cp314t-manylinux_2_28_ppc64le.whl", upload-time = 2026-03-25T23:33:55Z, size = 4904178, hashes = { sha256 = "3c21d92ed15e9cfc6eb64c1f5a0326db22ca9c2566ca46d845119b45b4400361" } }, { url = "https://files.pythonhosted.org/packages/b1/1b/bf0e01a88efd0e59679b69f42d4afd5bced8700bb5e80617b2d63a3741af/cryptography-46.0.6-cp314-cp314t-manylinux_2_28_x86_64.whl", upload-time = 2026-03-25T23:33:57Z, size = 4441812, hashes = { sha256 = "4668298aef7cddeaf5c6ecc244c2302a2b8e40f384255505c22875eebb47888b" } }, { url = "https://files.pythonhosted.org/packages/bb/8b/11df86de2ea389c65aa1806f331cae145f2ed18011f30234cc10ca253de8/cryptography-46.0.6-cp314-cp314t-manylinux_2_31_armv7l.whl", upload-time = 2026-03-25T23:33:59Z, size = 3963923, hashes = { sha256 = "8ce35b77aaf02f3b59c90b2c8a05c73bac12cea5b4e8f3fbece1f5fddea5f0ca" } }, { url = "https://files.pythonhosted.org/packages/91/e0/207fb177c3a9ef6a8108f234208c3e9e76a6aa8cf20d51932916bd43bda0/cryptography-46.0.6-cp314-cp314t-manylinux_2_34_aarch64.whl", upload-time = 2026-03-25T23:34:00Z, size = 4269695, hashes = { sha256 = "c89eb37fae9216985d8734c1afd172ba4927f5a05cfd9bf0e4863c6d5465b013" } }, { url = "https://files.pythonhosted.org/packages/21/5e/19f3260ed1e95bced52ace7501fabcd266df67077eeb382b79c81729d2d3/cryptography-46.0.6-cp314-cp314t-manylinux_2_34_ppc64le.whl", upload-time = 2026-03-25T23:34:02Z, size = 4869785, hashes = { sha256 = "ed418c37d095aeddf5336898a132fba01091f0ac5844e3e8018506f014b6d2c4" } }, { url = "https://files.pythonhosted.org/packages/10/38/cd7864d79aa1d92ef6f1a584281433419b955ad5a5ba8d1eb6c872165bcb/cryptography-46.0.6-cp314-cp314t-manylinux_2_34_x86_64.whl", upload-time = 2026-03-25T23:34:04Z, size = 4441404, hashes = { sha256 = "69cf0056d6947edc6e6760e5f17afe4bea06b56a9ac8a06de9d2bd6b532d4f3a" } }, { url = "https://files.pythonhosted.org/packages/09/0a/4fe7a8d25fed74419f91835cf5829ade6408fd1963c9eae9c4bce390ecbb/cryptography-46.0.6-cp314-cp314t-musllinux_1_2_aarch64.whl", upload-time = 2026-03-25T23:34:06Z, size = 4397549, hashes = { sha256 = "8e7304c4f4e9490e11efe56af6713983460ee0780f16c63f219984dab3af9d2d" } }, { url = "https://files.pythonhosted.org/packages/5f/a0/7d738944eac6513cd60a8da98b65951f4a3b279b93479a7e8926d9cd730b/cryptography-46.0.6-cp314-cp314t-musllinux_1_2_x86_64.whl", upload-time = 2026-03-25T23:34:07Z, size = 4651874, hashes = { sha256 = "b928a3ca837c77a10e81a814a693f2295200adb3352395fad024559b7be7a736" } }, { url = "https://files.pythonhosted.org/packages/cb/f1/c2326781ca05208845efca38bf714f76939ae446cd492d7613808badedf1/cryptography-46.0.6-cp314-cp314t-win32.whl", upload-time = 2026-03-25T23:34:09Z, size = 3001511, hashes = { sha256 = "97c8115b27e19e592a05c45d0dd89c57f81f841cc9880e353e0d3bf25b2139ed" } }, { url = "https://files.pythonhosted.org/packages/c9/57/fe4a23eb549ac9d903bd4698ffda13383808ef0876cc912bcb2838799ece/cryptography-46.0.6-cp314-cp314t-win_amd64.whl", upload-time = 2026-03-25T23:34:11Z, size = 3471692, hashes = { sha256 = "c797e2517cb7880f8297e2c0f43bb910e91381339336f75d2c1c2cbf811b70b4" } }, { url = "https://files.pythonhosted.org/packages/c4/cc/f330e982852403da79008552de9906804568ae9230da8432f7496ce02b71/cryptography-46.0.6-cp38-abi3-macosx_10_9_universal2.whl", upload-time = 2026-03-25T23:34:13Z, size = 7162776, hashes = { sha256 = "12cae594e9473bca1a7aceb90536060643128bb274fcea0fc459ab90f7d1ae7a" } }, { url = "https://files.pythonhosted.org/packages/49/b3/dc27efd8dcc4bff583b3f01d4a3943cd8b5821777a58b3a6a5f054d61b79/cryptography-46.0.6-cp38-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", upload-time = 2026-03-25T23:34:15Z, size = 4270529, hashes = { sha256 = "639301950939d844a9e1c4464d7e07f902fe9a7f6b215bb0d4f28584729935d8" } }, { url = "https://files.pythonhosted.org/packages/e6/05/e8d0e6eb4f0d83365b3cb0e00eb3c484f7348db0266652ccd84632a3d58d/cryptography-46.0.6-cp38-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", upload-time = 2026-03-25T23:34:16Z, size = 4414827, hashes = { sha256 = "ed3775295fb91f70b4027aeba878d79b3e55c0b3e97eaa4de71f8f23a9f2eb77" } }, { url = "https://files.pythonhosted.org/packages/2f/97/daba0f5d2dc6d855e2dcb70733c812558a7977a55dd4a6722756628c44d1/cryptography-46.0.6-cp38-abi3-manylinux_2_28_aarch64.whl", upload-time = 2026-03-25T23:34:18Z, size = 4271265, hashes = { sha256 = "8927ccfbe967c7df312ade694f987e7e9e22b2425976ddbf28271d7e58845290" } }, { url = "https://files.pythonhosted.org/packages/89/06/fe1fce39a37ac452e58d04b43b0855261dac320a2ebf8f5260dd55b201a9/cryptography-46.0.6-cp38-abi3-manylinux_2_28_ppc64le.whl", upload-time = 2026-03-25T23:34:20Z, size = 4916800, hashes = { sha256 = "b12c6b1e1651e42ab5de8b1e00dc3b6354fdfd778e7fa60541ddacc27cd21410" } }, { url = "https://files.pythonhosted.org/packages/ff/8a/b14f3101fe9c3592603339eb5d94046c3ce5f7fc76d6512a2d40efd9724e/cryptography-46.0.6-cp38-abi3-manylinux_2_28_x86_64.whl", upload-time = 2026-03-25T23:34:22Z, size = 4448771, hashes = { sha256 = "063b67749f338ca9c5a0b7fe438a52c25f9526b851e24e6c9310e7195aad3b4d" } }, { url = "https://files.pythonhosted.org/packages/01/b3/0796998056a66d1973fd52ee89dc1bb3b6581960a91ad4ac705f182d398f/cryptography-46.0.6-cp38-abi3-manylinux_2_31_armv7l.whl", upload-time = 2026-03-25T23:34:24Z, size = 3978333, hashes = { sha256 = "02fad249cb0e090b574e30b276a3da6a149e04ee2f049725b1f69e7b8351ec70" } }, { url = "https://files.pythonhosted.org/packages/c5/3d/db200af5a4ffd08918cd55c08399dc6c9c50b0bc72c00a3246e099d3a849/cryptography-46.0.6-cp38-abi3-manylinux_2_34_aarch64.whl", upload-time = 2026-03-25T23:34:25Z, size = 4271069, hashes = { sha256 = "7e6142674f2a9291463e5e150090b95a8519b2fb6e6aaec8917dd8d094ce750d" } }, { url = "https://files.pythonhosted.org/packages/d7/18/61acfd5b414309d74ee838be321c636fe71815436f53c9f0334bf19064fa/cryptography-46.0.6-cp38-abi3-manylinux_2_34_ppc64le.whl", upload-time = 2026-03-25T23:34:27Z, size = 4878358, hashes = { sha256 = "456b3215172aeefb9284550b162801d62f5f264a081049a3e94307fe20792cfa" } }, { url = "https://files.pythonhosted.org/packages/8b/65/5bf43286d566f8171917cae23ac6add941654ccf085d739195a4eacf1674/cryptography-46.0.6-cp38-abi3-manylinux_2_34_x86_64.whl", upload-time = 2026-03-25T23:34:29Z, size = 4448061, hashes = { sha256 = "341359d6c9e68834e204ceaf25936dffeafea3829ab80e9503860dcc4f4dac58" } }, { url = "https://files.pythonhosted.org/packages/e0/25/7e49c0fa7205cf3597e525d156a6bce5b5c9de1fd7e8cb01120e459f205a/cryptography-46.0.6-cp38-abi3-musllinux_1_2_aarch64.whl", upload-time = 2026-03-25T23:34:32Z, size = 4399103, hashes = { sha256 = "9a9c42a2723999a710445bc0d974e345c32adfd8d2fac6d8a251fa829ad31cfb" } }, { url = "https://files.pythonhosted.org/packages/44/46/466269e833f1c4718d6cd496ffe20c56c9c8d013486ff66b4f69c302a68d/cryptography-46.0.6-cp38-abi3-musllinux_1_2_x86_64.whl", upload-time = 2026-03-25T23:34:33Z, size = 4659255, hashes = { sha256 = "6617f67b1606dfd9fe4dbfa354a9508d4a6d37afe30306fe6c101b7ce3274b72" } }, { url = "https://files.pythonhosted.org/packages/0a/09/ddc5f630cc32287d2c953fc5d32705e63ec73e37308e5120955316f53827/cryptography-46.0.6-cp38-abi3-win32.whl", upload-time = 2026-03-25T23:34:35Z, size = 3010660, hashes = { sha256 = "7f6690b6c55e9c5332c0b59b9c8a3fb232ebf059094c17f9019a51e9827df91c" } }, { url = "https://files.pythonhosted.org/packages/1b/82/ca4893968aeb2709aacfb57a30dec6fa2ab25b10fa9f064b8882ce33f599/cryptography-46.0.6-cp38-abi3-win_amd64.whl", upload-time = 2026-03-25T23:34:37Z, size = 3471160, hashes = { sha256 = "79e865c642cfc5c0b3eb12af83c35c5aeff4fa5c672dc28c43721c2c9fdd2f0f" } }, ] [[packages]] name = "idna" version = "3.11" sdist = { url = "https://files.pythonhosted.org/packages/6f/6d/0703ccc57f3a7233505399edb88de3cbd678da106337b9fcde432b65ed60/idna-3.11.tar.gz", upload-time = 2025-10-12T14:55:20Z, size = 194582, hashes = { sha256 = "795dafcc9c04ed0c1fb032c2aa73654d8e8c5023a7df64a53f39190ada629902" } } wheels = [{ url = "https://files.pythonhosted.org/packages/0e/61/66938bbb5fc52dbdf84594873d5b51fb1f7c7794e9c0f5bd885f30bc507b/idna-3.11-py3-none-any.whl", upload-time = 2025-10-12T14:55:18Z, size = 71008, hashes = { sha256 = "771a87f49d9defaf64091e6e6fe9c18d4833f140bd19464795bc32d966ca37ea" } }] [[packages]] name = "pycparser" version = "3.0" marker = "python_full_version >= '3.9' and implementation_name != 'PyPy' and platform_python_implementation != 'PyPy'" sdist = { url = "https://files.pythonhosted.org/packages/1b/7d/92392ff7815c21062bea51aa7b87d45576f649f16458d78b7cf94b9ab2e6/pycparser-3.0.tar.gz", upload-time = 2026-01-21T14:26:51Z, size = 103492, hashes = { sha256 = "600f49d217304a5902ac3c37e1281c9fe94e4d0489de643a9504c5cdfdfc6b29" } } wheels = [{ url = "https://files.pythonhosted.org/packages/0c/c3/44f3fbbfa403ea2a7c779186dc20772604442dde72947e7d01069cbe98e3/pycparser-3.0-py3-none-any.whl", upload-time = 2026-01-21T14:26:50Z, size = 48172, hashes = { sha256 = "b727414169a36b7d524c1c3e31839a521725078d7b2ff038656844266160a992" } }] [[packages]] name = "pydantic" version = "2.12.5" sdist = { url = "https://files.pythonhosted.org/packages/69/44/36f1a6e523abc58ae5f928898e4aca2e0ea509b5aa6f6f392a5d882be928/pydantic-2.12.5.tar.gz", upload-time = 2025-11-26T15:11:46Z, size = 821591, hashes = { sha256 = "4d351024c75c0f085a9febbb665ce8c0c6ec5d30e903bdb6394b7ede26aebb49" } } wheels = [{ url = "https://files.pythonhosted.org/packages/5a/87/b70ad306ebb6f9b585f114d0ac2137d792b48be34d732d60e597c2f8465a/pydantic-2.12.5-py3-none-any.whl", upload-time = 2025-11-26T15:11:44Z, size = 463580, hashes = { sha256 = "e561593fccf61e8a20fc46dfc2dfe075b8be7d0188df33f221ad1f0139180f9d" } }] [[packages]] name = "pydantic-core" version = "2.41.5" sdist = { url = "https://files.pythonhosted.org/packages/71/70/23b021c950c2addd24ec408e9ab05d59b035b39d97cdc1130e1bce647bb6/pydantic_core-2.41.5.tar.gz", upload-time = 2025-11-04T13:43:49Z, size = 460952, hashes = { sha256 = "08daa51ea16ad373ffd5e7606252cc32f07bc72b28284b6bc9c6df804816476e" } } wheels = [ { url = "https://files.pythonhosted.org/packages/87/06/8806241ff1f70d9939f9af039c6c35f2360cf16e93c2ca76f184e76b1564/pydantic_core-2.41.5-cp313-cp313-macosx_10_12_x86_64.whl", upload-time = 2025-11-04T13:40:25Z, size = 2120403, hashes = { sha256 = "941103c9be18ac8daf7b7adca8228f8ed6bb7a1849020f643b3a14d15b1924d9" } }, { url = "https://files.pythonhosted.org/packages/94/02/abfa0e0bda67faa65fef1c84971c7e45928e108fe24333c81f3bfe35d5f5/pydantic_core-2.41.5-cp313-cp313-macosx_11_0_arm64.whl", upload-time = 2025-11-04T13:40:27Z, size = 1896206, hashes = { sha256 = "112e305c3314f40c93998e567879e887a3160bb8689ef3d2c04b6cc62c33ac34" } }, { url = "https://files.pythonhosted.org/packages/15/df/a4c740c0943e93e6500f9eb23f4ca7ec9bf71b19e608ae5b579678c8d02f/pydantic_core-2.41.5-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", upload-time = 2025-11-04T13:40:29Z, size = 1919307, hashes = { sha256 = "0cbaad15cb0c90aa221d43c00e77bb33c93e8d36e0bf74760cd00e732d10a6a0" } }, { url = "https://files.pythonhosted.org/packages/9a/e3/6324802931ae1d123528988e0e86587c2072ac2e5394b4bc2bc34b61ff6e/pydantic_core-2.41.5-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", upload-time = 2025-11-04T13:40:33Z, size = 2063258, hashes = { sha256 = "03ca43e12fab6023fc79d28ca6b39b05f794ad08ec2feccc59a339b02f2b3d33" } }, { url = "https://files.pythonhosted.org/packages/c9/d4/2230d7151d4957dd79c3044ea26346c148c98fbf0ee6ebd41056f2d62ab5/pydantic_core-2.41.5-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", upload-time = 2025-11-04T13:40:35Z, size = 2214917, hashes = { sha256 = "dc799088c08fa04e43144b164feb0c13f9a0bc40503f8df3e9fde58a3c0c101e" } }, { url = "https://files.pythonhosted.org/packages/e6/9f/eaac5df17a3672fef0081b6c1bb0b82b33ee89aa5cec0d7b05f52fd4a1fa/pydantic_core-2.41.5-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", upload-time = 2025-11-04T13:40:37Z, size = 2332186, hashes = { sha256 = "97aeba56665b4c3235a0e52b2c2f5ae9cd071b8a8310ad27bddb3f7fb30e9aa2" } }, { url = "https://files.pythonhosted.org/packages/cf/4e/35a80cae583a37cf15604b44240e45c05e04e86f9cfd766623149297e971/pydantic_core-2.41.5-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", upload-time = 2025-11-04T13:40:40Z, size = 2073164, hashes = { sha256 = "406bf18d345822d6c21366031003612b9c77b3e29ffdb0f612367352aab7d586" } }, { url = "https://files.pythonhosted.org/packages/bf/e3/f6e262673c6140dd3305d144d032f7bd5f7497d3871c1428521f19f9efa2/pydantic_core-2.41.5-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", upload-time = 2025-11-04T13:40:42Z, size = 2179146, hashes = { sha256 = "b93590ae81f7010dbe380cdeab6f515902ebcbefe0b9327cc4804d74e93ae69d" } }, { url = "https://files.pythonhosted.org/packages/75/c7/20bd7fc05f0c6ea2056a4565c6f36f8968c0924f19b7d97bbfea55780e73/pydantic_core-2.41.5-cp313-cp313-musllinux_1_1_aarch64.whl", upload-time = 2025-11-04T13:40:44Z, size = 2137788, hashes = { sha256 = "01a3d0ab748ee531f4ea6c3e48ad9dac84ddba4b0d82291f87248f2f9de8d740" } }, { url = "https://files.pythonhosted.org/packages/3a/8d/34318ef985c45196e004bc46c6eab2eda437e744c124ef0dbe1ff2c9d06b/pydantic_core-2.41.5-cp313-cp313-musllinux_1_1_armv7l.whl", upload-time = 2025-11-04T13:40:46Z, size = 2340133, hashes = { sha256 = "6561e94ba9dacc9c61bce40e2d6bdc3bfaa0259d3ff36ace3b1e6901936d2e3e" } }, { url = "https://files.pythonhosted.org/packages/9c/59/013626bf8c78a5a5d9350d12e7697d3d4de951a75565496abd40ccd46bee/pydantic_core-2.41.5-cp313-cp313-musllinux_1_1_x86_64.whl", upload-time = 2025-11-04T13:40:48Z, size = 2324852, hashes = { sha256 = "915c3d10f81bec3a74fbd4faebe8391013ba61e5a1a8d48c4455b923bdda7858" } }, { url = "https://files.pythonhosted.org/packages/1a/d9/c248c103856f807ef70c18a4f986693a46a8ffe1602e5d361485da502d20/pydantic_core-2.41.5-cp313-cp313-win32.whl", upload-time = 2025-11-04T13:40:50Z, size = 1994679, hashes = { sha256 = "650ae77860b45cfa6e2cdafc42618ceafab3a2d9a3811fcfbd3bbf8ac3c40d36" } }, { url = "https://files.pythonhosted.org/packages/9e/8b/341991b158ddab181cff136acd2552c9f35bd30380422a639c0671e99a91/pydantic_core-2.41.5-cp313-cp313-win_amd64.whl", upload-time = 2025-11-04T13:40:52Z, size = 2019766, hashes = { sha256 = "79ec52ec461e99e13791ec6508c722742ad745571f234ea6255bed38c6480f11" } }, { url = "https://files.pythonhosted.org/packages/73/7d/f2f9db34af103bea3e09735bb40b021788a5e834c81eedb541991badf8f5/pydantic_core-2.41.5-cp313-cp313-win_arm64.whl", upload-time = 2025-11-04T13:40:54Z, size = 1981005, hashes = { sha256 = "3f84d5c1b4ab906093bdc1ff10484838aca54ef08de4afa9de0f5f14d69639cd" } }, { url = "https://files.pythonhosted.org/packages/ea/28/46b7c5c9635ae96ea0fbb779e271a38129df2550f763937659ee6c5dbc65/pydantic_core-2.41.5-cp314-cp314-macosx_10_12_x86_64.whl", upload-time = 2025-11-04T13:40:56Z, size = 2119622, hashes = { sha256 = "3f37a19d7ebcdd20b96485056ba9e8b304e27d9904d233d7b1015db320e51f0a" } }, { url = "https://files.pythonhosted.org/packages/74/1a/145646e5687e8d9a1e8d09acb278c8535ebe9e972e1f162ed338a622f193/pydantic_core-2.41.5-cp314-cp314-macosx_11_0_arm64.whl", upload-time = 2025-11-04T13:40:58Z, size = 1891725, hashes = { sha256 = "1d1d9764366c73f996edd17abb6d9d7649a7eb690006ab6adbda117717099b14" } }, { url = "https://files.pythonhosted.org/packages/23/04/e89c29e267b8060b40dca97bfc64a19b2a3cf99018167ea1677d96368273/pydantic_core-2.41.5-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", upload-time = 2025-11-04T13:41:00Z, size = 1915040, hashes = { sha256 = "25e1c2af0fce638d5f1988b686f3b3ea8cd7de5f244ca147c777769e798a9cd1" } }, { url = "https://files.pythonhosted.org/packages/84/a3/15a82ac7bd97992a82257f777b3583d3e84bdb06ba6858f745daa2ec8a85/pydantic_core-2.41.5-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", upload-time = 2025-11-04T13:41:03Z, size = 2063691, hashes = { sha256 = "506d766a8727beef16b7adaeb8ee6217c64fc813646b424d0804d67c16eddb66" } }, { url = "https://files.pythonhosted.org/packages/74/9b/0046701313c6ef08c0c1cf0e028c67c770a4e1275ca73131563c5f2a310a/pydantic_core-2.41.5-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", upload-time = 2025-11-04T13:41:05Z, size = 2213897, hashes = { sha256 = "4819fa52133c9aa3c387b3328f25c1facc356491e6135b459f1de698ff64d869" } }, { url = "https://files.pythonhosted.org/packages/8a/cd/6bac76ecd1b27e75a95ca3a9a559c643b3afcd2dd62086d4b7a32a18b169/pydantic_core-2.41.5-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", upload-time = 2025-11-04T13:41:07Z, size = 2333302, hashes = { sha256 = "2b761d210c9ea91feda40d25b4efe82a1707da2ef62901466a42492c028553a2" } }, { url = "https://files.pythonhosted.org/packages/4c/d2/ef2074dc020dd6e109611a8be4449b98cd25e1b9b8a303c2f0fca2f2bcf7/pydantic_core-2.41.5-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", upload-time = 2025-11-04T13:41:09Z, size = 2064877, hashes = { sha256 = "22f0fb8c1c583a3b6f24df2470833b40207e907b90c928cc8d3594b76f874375" } }, { url = "https://files.pythonhosted.org/packages/18/66/e9db17a9a763d72f03de903883c057b2592c09509ccfe468187f2a2eef29/pydantic_core-2.41.5-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", upload-time = 2025-11-04T13:41:12Z, size = 2180680, hashes = { sha256 = "2782c870e99878c634505236d81e5443092fba820f0373997ff75f90f68cd553" } }, { url = "https://files.pythonhosted.org/packages/d3/9e/3ce66cebb929f3ced22be85d4c2399b8e85b622db77dad36b73c5387f8f8/pydantic_core-2.41.5-cp314-cp314-musllinux_1_1_aarch64.whl", upload-time = 2025-11-04T13:41:14Z, size = 2138960, hashes = { sha256 = "0177272f88ab8312479336e1d777f6b124537d47f2123f89cb37e0accea97f90" } }, { url = "https://files.pythonhosted.org/packages/a6/62/205a998f4327d2079326b01abee48e502ea739d174f0a89295c481a2272e/pydantic_core-2.41.5-cp314-cp314-musllinux_1_1_armv7l.whl", upload-time = 2025-11-04T13:41:16Z, size = 2339102, hashes = { sha256 = "63510af5e38f8955b8ee5687740d6ebf7c2a0886d15a6d65c32814613681bc07" } }, { url = "https://files.pythonhosted.org/packages/3c/0d/f05e79471e889d74d3d88f5bd20d0ed189ad94c2423d81ff8d0000aab4ff/pydantic_core-2.41.5-cp314-cp314-musllinux_1_1_x86_64.whl", upload-time = 2025-11-04T13:41:18Z, size = 2326039, hashes = { sha256 = "e56ba91f47764cc14f1daacd723e3e82d1a89d783f0f5afe9c364b8bb491ccdb" } }, { url = "https://files.pythonhosted.org/packages/ec/e1/e08a6208bb100da7e0c4b288eed624a703f4d129bde2da475721a80cab32/pydantic_core-2.41.5-cp314-cp314-win32.whl", upload-time = 2025-11-04T13:41:21Z, size = 1995126, hashes = { sha256 = "aec5cf2fd867b4ff45b9959f8b20ea3993fc93e63c7363fe6851424c8a7e7c23" } }, { url = "https://files.pythonhosted.org/packages/48/5d/56ba7b24e9557f99c9237e29f5c09913c81eeb2f3217e40e922353668092/pydantic_core-2.41.5-cp314-cp314-win_amd64.whl", upload-time = 2025-11-04T13:41:24Z, size = 2015489, hashes = { sha256 = "8e7c86f27c585ef37c35e56a96363ab8de4e549a95512445b85c96d3e2f7c1bf" } }, { url = "https://files.pythonhosted.org/packages/4e/bb/f7a190991ec9e3e0ba22e4993d8755bbc4a32925c0b5b42775c03e8148f9/pydantic_core-2.41.5-cp314-cp314-win_arm64.whl", upload-time = 2025-11-04T13:41:26Z, size = 1977288, hashes = { sha256 = "e672ba74fbc2dc8eea59fb6d4aed6845e6905fc2a8afe93175d94a83ba2a01a0" } }, { url = "https://files.pythonhosted.org/packages/92/ed/77542d0c51538e32e15afe7899d79efce4b81eee631d99850edc2f5e9349/pydantic_core-2.41.5-cp314-cp314t-macosx_10_12_x86_64.whl", upload-time = 2025-11-04T13:41:28Z, size = 2120255, hashes = { sha256 = "8566def80554c3faa0e65ac30ab0932b9e3a5cd7f8323764303d468e5c37595a" } }, { url = "https://files.pythonhosted.org/packages/bb/3d/6913dde84d5be21e284439676168b28d8bbba5600d838b9dca99de0fad71/pydantic_core-2.41.5-cp314-cp314t-macosx_11_0_arm64.whl", upload-time = 2025-11-04T13:41:31Z, size = 1863760, hashes = { sha256 = "b80aa5095cd3109962a298ce14110ae16b8c1aece8b72f9dafe81cf597ad80b3" } }, { url = "https://files.pythonhosted.org/packages/5a/f0/e5e6b99d4191da102f2b0eb9687aaa7f5bea5d9964071a84effc3e40f997/pydantic_core-2.41.5-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", upload-time = 2025-11-04T13:41:33Z, size = 1878092, hashes = { sha256 = "3006c3dd9ba34b0c094c544c6006cc79e87d8612999f1a5d43b769b89181f23c" } }, { url = "https://files.pythonhosted.org/packages/71/48/36fb760642d568925953bcc8116455513d6e34c4beaa37544118c36aba6d/pydantic_core-2.41.5-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", upload-time = 2025-11-04T13:41:35Z, size = 2053385, hashes = { sha256 = "72f6c8b11857a856bcfa48c86f5368439f74453563f951e473514579d44aa612" } }, { url = "https://files.pythonhosted.org/packages/20/25/92dc684dd8eb75a234bc1c764b4210cf2646479d54b47bf46061657292a8/pydantic_core-2.41.5-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", upload-time = 2025-11-04T13:41:37Z, size = 2218832, hashes = { sha256 = "5cb1b2f9742240e4bb26b652a5aeb840aa4b417c7748b6f8387927bc6e45e40d" } }, { url = "https://files.pythonhosted.org/packages/e2/09/f53e0b05023d3e30357d82eb35835d0f6340ca344720a4599cd663dca599/pydantic_core-2.41.5-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", upload-time = 2025-11-04T13:41:40Z, size = 2327585, hashes = { sha256 = "bd3d54f38609ff308209bd43acea66061494157703364ae40c951f83ba99a1a9" } }, { url = "https://files.pythonhosted.org/packages/aa/4e/2ae1aa85d6af35a39b236b1b1641de73f5a6ac4d5a7509f77b814885760c/pydantic_core-2.41.5-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", upload-time = 2025-11-04T13:41:42Z, size = 2041078, hashes = { sha256 = "2ff4321e56e879ee8d2a879501c8e469414d948f4aba74a2d4593184eb326660" } }, { url = "https://files.pythonhosted.org/packages/cd/13/2e215f17f0ef326fc72afe94776edb77525142c693767fc347ed6288728d/pydantic_core-2.41.5-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", upload-time = 2025-11-04T13:41:45Z, size = 2173914, hashes = { sha256 = "d0d2568a8c11bf8225044aa94409e21da0cb09dcdafe9ecd10250b2baad531a9" } }, { url = "https://files.pythonhosted.org/packages/02/7a/f999a6dcbcd0e5660bc348a3991c8915ce6599f4f2c6ac22f01d7a10816c/pydantic_core-2.41.5-cp314-cp314t-musllinux_1_1_aarch64.whl", upload-time = 2025-11-04T13:41:47Z, size = 2129560, hashes = { sha256 = "a39455728aabd58ceabb03c90e12f71fd30fa69615760a075b9fec596456ccc3" } }, { url = "https://files.pythonhosted.org/packages/3a/b1/6c990ac65e3b4c079a4fb9f5b05f5b013afa0f4ed6780a3dd236d2cbdc64/pydantic_core-2.41.5-cp314-cp314t-musllinux_1_1_armv7l.whl", upload-time = 2025-11-04T13:41:49Z, size = 2329244, hashes = { sha256 = "239edca560d05757817c13dc17c50766136d21f7cd0fac50295499ae24f90fdf" } }, { url = "https://files.pythonhosted.org/packages/d9/02/3c562f3a51afd4d88fff8dffb1771b30cfdfd79befd9883ee094f5b6c0d8/pydantic_core-2.41.5-cp314-cp314t-musllinux_1_1_x86_64.whl", upload-time = 2025-11-04T13:41:54Z, size = 2331955, hashes = { sha256 = "2a5e06546e19f24c6a96a129142a75cee553cc018ffee48a460059b1185f4470" } }, { url = "https://files.pythonhosted.org/packages/5c/96/5fb7d8c3c17bc8c62fdb031c47d77a1af698f1d7a406b0f79aaa1338f9ad/pydantic_core-2.41.5-cp314-cp314t-win32.whl", upload-time = 2025-11-04T13:41:56Z, size = 1988906, hashes = { sha256 = "b4ececa40ac28afa90871c2cc2b9ffd2ff0bf749380fbdf57d165fd23da353aa" } }, { url = "https://files.pythonhosted.org/packages/22/ed/182129d83032702912c2e2d8bbe33c036f342cc735737064668585dac28f/pydantic_core-2.41.5-cp314-cp314t-win_amd64.whl", upload-time = 2025-11-04T13:41:58Z, size = 1981607, hashes = { sha256 = "80aa89cad80b32a912a65332f64a4450ed00966111b6615ca6816153d3585a8c" } }, { url = "https://files.pythonhosted.org/packages/9f/ed/068e41660b832bb0b1aa5b58011dea2a3fe0ba7861ff38c4d4904c1c1a99/pydantic_core-2.41.5-cp314-cp314t-win_arm64.whl", upload-time = 2025-11-04T13:42:01Z, size = 1974769, hashes = { sha256 = "35b44f37a3199f771c3eaa53051bc8a70cd7b54f333531c59e29fd4db5d15008" } }, ] [[packages]] name = "pydantic-settings" version = "2.13.1" sdist = { url = "https://files.pythonhosted.org/packages/52/6d/fffca34caecc4a3f97bda81b2098da5e8ab7efc9a66e819074a11955d87e/pydantic_settings-2.13.1.tar.gz", upload-time = 2026-02-19T13:45:08Z, size = 223826, hashes = { sha256 = "b4c11847b15237fb0171e1462bf540e294affb9b86db4d9aa5c01730bdbe4025" } } wheels = [{ url = "https://files.pythonhosted.org/packages/00/4b/ccc026168948fec4f7555b9164c724cf4125eac006e176541483d2c959be/pydantic_settings-2.13.1-py3-none-any.whl", upload-time = 2026-02-19T13:45:06Z, size = 58929, hashes = { sha256 = "d56fd801823dbeae7f0975e1f8c8e25c258eb75d278ea7abb5d9cebb01b56237" } }] [[packages]] name = "pygithub" version = "2.9.0" sdist = { url = "https://files.pythonhosted.org/packages/a6/9a/44f918e9be12e49cb8b053f09d5d0733b74df52bf4dabc570da1c3ecd9f6/pygithub-2.9.0.tar.gz", upload-time = 2026-03-22T21:14:39Z, size = 2592289, hashes = { sha256 = "a26abda1222febba31238682634cad11d8b966137ed6cc3c5e445b29a11cb0a4" } } wheels = [{ url = "https://files.pythonhosted.org/packages/2f/de/72e02bc7674e161b155a4b5a03b2347129d0626115bc97ba5bad5070cac9/pygithub-2.9.0-py3-none-any.whl", upload-time = 2026-03-22T21:14:37Z, size = 449653, hashes = { sha256 = "5e2b260ce327bffce9b00f447b65953ef7078ffe93e5a5425624a3075483927c" } }] [[packages]] name = "pyjwt" version = "2.12.1" sdist = { url = "https://files.pythonhosted.org/packages/c2/27/a3b6e5bf6ff856d2509292e95c8f57f0df7017cf5394921fc4e4ef40308a/pyjwt-2.12.1.tar.gz", upload-time = 2026-03-13T19:27:37Z, size = 102564, hashes = { sha256 = "c74a7a2adf861c04d002db713dd85f84beb242228e671280bf709d765b03672b" } } wheels = [{ url = "https://files.pythonhosted.org/packages/e5/7a/8dd906bd22e79e47397a61742927f6747fe93242ef86645ee9092e610244/pyjwt-2.12.1-py3-none-any.whl", upload-time = 2026-03-13T19:27:35Z, size = 29726, hashes = { sha256 = "28ca37c070cad8ba8cd9790cd940535d40274d22f80ab87f3ac6a713e6e8454c" } }] [[packages]] name = "pynacl" version = "1.6.2" sdist = { url = "https://files.pythonhosted.org/packages/d9/9a/4019b524b03a13438637b11538c82781a5eda427394380381af8f04f467a/pynacl-1.6.2.tar.gz", upload-time = 2026-01-01T17:48:10Z, size = 3511692, hashes = { sha256 = "018494d6d696ae03c7e656e5e74cdfd8ea1326962cc401bcf018f1ed8436811c" } } wheels = [ { url = "https://files.pythonhosted.org/packages/4b/79/0e3c34dc3c4671f67d251c07aa8eb100916f250ee470df230b0ab89551b4/pynacl-1.6.2-cp314-cp314t-macosx_10_10_universal2.whl", upload-time = 2026-01-01T17:31:57Z, size = 390064, hashes = { sha256 = "622d7b07cc5c02c666795792931b50c91f3ce3c2649762efb1ef0d5684c81594" } }, { url = "https://files.pythonhosted.org/packages/eb/1c/23a26e931736e13b16483795c8a6b2f641bf6a3d5238c22b070a5112722c/pynacl-1.6.2-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", upload-time = 2026-01-01T17:31:59Z, size = 809370, hashes = { sha256 = "d071c6a9a4c94d79eb665db4ce5cedc537faf74f2355e4d502591d850d3913c0" } }, { url = "https://files.pythonhosted.org/packages/87/74/8d4b718f8a22aea9e8dcc8b95deb76d4aae380e2f5b570cc70b5fd0a852d/pynacl-1.6.2-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", upload-time = 2026-01-01T17:32:01Z, size = 1408304, hashes = { sha256 = "fe9847ca47d287af41e82be1dd5e23023d3c31a951da134121ab02e42ac218c9" } }, { url = "https://files.pythonhosted.org/packages/fd/73/be4fdd3a6a87fe8a4553380c2b47fbd1f7f58292eb820902f5c8ac7de7b0/pynacl-1.6.2-cp314-cp314t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", upload-time = 2026-01-01T17:32:02Z, size = 844871, hashes = { sha256 = "04316d1fc625d860b6c162fff704eb8426b1a8bcd3abacea11142cbd99a6b574" } }, { url = "https://files.pythonhosted.org/packages/55/ad/6efc57ab75ee4422e96b5f2697d51bbcf6cdcc091e66310df91fbdc144a8/pynacl-1.6.2-cp314-cp314t-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", upload-time = 2026-01-01T17:32:04Z, size = 1446356, hashes = { sha256 = "44081faff368d6c5553ccf55322ef2819abb40e25afaec7e740f159f74813634" } }, { url = "https://files.pythonhosted.org/packages/78/b7/928ee9c4779caa0a915844311ab9fb5f99585621c5d6e4574538a17dca07/pynacl-1.6.2-cp314-cp314t-manylinux_2_34_aarch64.whl", upload-time = 2026-01-01T17:32:06Z, size = 826814, hashes = { sha256 = "a9f9932d8d2811ce1a8ffa79dcbdf3970e7355b5c8eb0c1a881a57e7f7d96e88" } }, { url = "https://files.pythonhosted.org/packages/f7/a9/1bdba746a2be20f8809fee75c10e3159d75864ef69c6b0dd168fc60e485d/pynacl-1.6.2-cp314-cp314t-manylinux_2_34_x86_64.whl", upload-time = 2026-01-01T17:32:07Z, size = 1411742, hashes = { sha256 = "bc4a36b28dd72fb4845e5d8f9760610588a96d5a51f01d84d8c6ff9849968c14" } }, { url = "https://files.pythonhosted.org/packages/f3/2f/5e7ea8d85f9f3ea5b6b87db1d8388daa3587eed181bdeb0306816fdbbe79/pynacl-1.6.2-cp314-cp314t-musllinux_1_2_aarch64.whl", upload-time = 2026-01-01T17:32:09Z, size = 801714, hashes = { sha256 = "3bffb6d0f6becacb6526f8f42adfb5efb26337056ee0831fb9a7044d1a964444" } }, { url = "https://files.pythonhosted.org/packages/06/ea/43fe2f7eab5f200e40fb10d305bf6f87ea31b3bbc83443eac37cd34a9e1e/pynacl-1.6.2-cp314-cp314t-musllinux_1_2_x86_64.whl", upload-time = 2026-01-01T17:32:11Z, size = 1372257, hashes = { sha256 = "2fef529ef3ee487ad8113d287a593fa26f48ee3620d92ecc6f1d09ea38e0709b" } }, { url = "https://files.pythonhosted.org/packages/4d/54/c9ea116412788629b1347e415f72195c25eb2f3809b2d3e7b25f5c79f13a/pynacl-1.6.2-cp314-cp314t-win32.whl", upload-time = 2026-01-01T17:32:12Z, size = 231319, hashes = { sha256 = "a84bf1c20339d06dc0c85d9aea9637a24f718f375d861b2668b2f9f96fa51145" } }, { url = "https://files.pythonhosted.org/packages/ce/04/64e9d76646abac2dccf904fccba352a86e7d172647557f35b9fe2a5ee4a1/pynacl-1.6.2-cp314-cp314t-win_amd64.whl", upload-time = 2026-01-01T17:32:13Z, size = 244044, hashes = { sha256 = "320ef68a41c87547c91a8b58903c9caa641ab01e8512ce291085b5fe2fcb7590" } }, { url = "https://files.pythonhosted.org/packages/33/33/7873dc161c6a06f43cda13dec67b6fe152cb2f982581151956fa5e5cdb47/pynacl-1.6.2-cp314-cp314t-win_arm64.whl", upload-time = 2026-01-01T17:32:15Z, size = 188740, hashes = { sha256 = "d29bfe37e20e015a7d8b23cfc8bd6aa7909c92a1b8f41ee416bbb3e79ef182b2" } }, { url = "https://files.pythonhosted.org/packages/be/7b/4845bbf88e94586ec47a432da4e9107e3fc3ce37eb412b1398630a37f7dd/pynacl-1.6.2-cp38-abi3-macosx_10_10_universal2.whl", upload-time = 2026-01-01T17:32:16Z, size = 388458, hashes = { sha256 = "c949ea47e4206af7c8f604b8278093b674f7c79ed0d4719cc836902bf4517465" } }, { url = "https://files.pythonhosted.org/packages/1e/b4/e927e0653ba63b02a4ca5b4d852a8d1d678afbf69b3dbf9c4d0785ac905c/pynacl-1.6.2-cp38-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", upload-time = 2026-01-01T17:32:18Z, size = 800020, hashes = { sha256 = "8845c0631c0be43abdd865511c41eab235e0be69c81dc66a50911594198679b0" } }, { url = "https://files.pythonhosted.org/packages/7f/81/d60984052df5c97b1d24365bc1e30024379b42c4edcd79d2436b1b9806f2/pynacl-1.6.2-cp38-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", upload-time = 2026-01-01T17:32:20Z, size = 1399174, hashes = { sha256 = "22de65bb9010a725b0dac248f353bb072969c94fa8d6b1f34b87d7953cf7bbe4" } }, { url = "https://files.pythonhosted.org/packages/68/f7/322f2f9915c4ef27d140101dd0ed26b479f7e6f5f183590fd32dfc48c4d3/pynacl-1.6.2-cp38-abi3-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", upload-time = 2026-01-01T17:32:22Z, size = 835085, hashes = { sha256 = "46065496ab748469cdd999246d17e301b2c24ae2fdf739132e580a0e94c94a87" } }, { url = "https://files.pythonhosted.org/packages/3e/d0/f301f83ac8dbe53442c5a43f6a39016f94f754d7a9815a875b65e218a307/pynacl-1.6.2-cp38-abi3-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", upload-time = 2026-01-01T17:32:23Z, size = 1437614, hashes = { sha256 = "8a66d6fb6ae7661c58995f9c6435bda2b1e68b54b598a6a10247bfcdadac996c" } }, { url = "https://files.pythonhosted.org/packages/c4/58/fc6e649762b029315325ace1a8c6be66125e42f67416d3dbd47b69563d61/pynacl-1.6.2-cp38-abi3-manylinux_2_34_aarch64.whl", upload-time = 2026-01-01T17:32:25Z, size = 818251, hashes = { sha256 = "26bfcd00dcf2cf160f122186af731ae30ab120c18e8375684ec2670dccd28130" } }, { url = "https://files.pythonhosted.org/packages/c9/a8/b917096b1accc9acd878819a49d3d84875731a41eb665f6ebc826b1af99e/pynacl-1.6.2-cp38-abi3-manylinux_2_34_x86_64.whl", upload-time = 2026-01-01T17:32:27Z, size = 1402859, hashes = { sha256 = "c8a231e36ec2cab018c4ad4358c386e36eede0319a0c41fed24f840b1dac59f6" } }, { url = "https://files.pythonhosted.org/packages/85/42/fe60b5f4473e12c72f977548e4028156f4d340b884c635ec6b063fe7e9a5/pynacl-1.6.2-cp38-abi3-musllinux_1_2_aarch64.whl", upload-time = 2026-01-01T17:32:29Z, size = 791926, hashes = { sha256 = "68be3a09455743ff9505491220b64440ced8973fe930f270c8e07ccfa25b1f9e" } }, { url = "https://files.pythonhosted.org/packages/fa/f9/e40e318c604259301cc091a2a63f237d9e7b424c4851cafaea4ea7c4834e/pynacl-1.6.2-cp38-abi3-musllinux_1_2_x86_64.whl", upload-time = 2026-01-01T17:32:31Z, size = 1363101, hashes = { sha256 = "8b097553b380236d51ed11356c953bf8ce36a29a3e596e934ecabe76c985a577" } }, { url = "https://files.pythonhosted.org/packages/48/47/e761c254f410c023a469284a9bc210933e18588ca87706ae93002c05114c/pynacl-1.6.2-cp38-abi3-win32.whl", upload-time = 2026-01-01T17:32:33Z, size = 227421, hashes = { sha256 = "5811c72b473b2f38f7e2a3dc4f8642e3a3e9b5e7317266e4ced1fba85cae41aa" } }, { url = "https://files.pythonhosted.org/packages/41/ad/334600e8cacc7d86587fe5f565480fde569dfb487389c8e1be56ac21d8ac/pynacl-1.6.2-cp38-abi3-win_amd64.whl", upload-time = 2026-01-01T17:32:34Z, size = 239754, hashes = { sha256 = "62985f233210dee6548c223301b6c25440852e13d59a8b81490203c3227c5ba0" } }, { url = "https://files.pythonhosted.org/packages/29/7d/5945b5af29534641820d3bd7b00962abbbdfee84ec7e19f0d5b3175f9a31/pynacl-1.6.2-cp38-abi3-win_arm64.whl", upload-time = 2026-01-01T17:32:36Z, size = 184801, hashes = { sha256 = "834a43af110f743a754448463e8fd61259cd4ab5bbedcf70f9dabad1d28a394c" } }, ] [[packages]] name = "python-dotenv" version = "1.2.2" sdist = { url = "https://files.pythonhosted.org/packages/82/ed/0301aeeac3e5353ef3d94b6ec08bbcabd04a72018415dcb29e588514bba8/python_dotenv-1.2.2.tar.gz", upload-time = 2026-03-01T16:00:26Z, size = 50135, hashes = { sha256 = "2c371a91fbd7ba082c2c1dc1f8bf89ca22564a087c2c287cd9b662adde799cf3" } } wheels = [{ url = "https://files.pythonhosted.org/packages/0b/d7/1959b9648791274998a9c3526f6d0ec8fd2233e4d4acce81bbae76b44b2a/python_dotenv-1.2.2-py3-none-any.whl", upload-time = 2026-03-01T16:00:25Z, size = 22101, hashes = { sha256 = "1d8214789a24de455a8b8bd8ae6fe3c6b69a5e3d64aa8a8e5d68e694bbcb285a" } }] [[packages]] name = "pyyaml" version = "6.0.3" sdist = { url = "https://files.pythonhosted.org/packages/05/8e/961c0007c59b8dd7729d542c61a4d537767a59645b82a0b521206e1e25c2/pyyaml-6.0.3.tar.gz", upload-time = 2025-09-25T21:33:16Z, size = 130960, hashes = { sha256 = "d76623373421df22fb4cf8817020cbb7ef15c725b9d5e45f17e189bfc384190f" } } wheels = [ { url = "https://files.pythonhosted.org/packages/d1/11/0fd08f8192109f7169db964b5707a2f1e8b745d4e239b784a5a1dd80d1db/pyyaml-6.0.3-cp313-cp313-macosx_10_13_x86_64.whl", upload-time = 2025-09-25T21:32:23Z, size = 181669, hashes = { sha256 = "8da9669d359f02c0b91ccc01cac4a67f16afec0dac22c2ad09f46bee0697eba8" } }, { url = "https://files.pythonhosted.org/packages/b1/16/95309993f1d3748cd644e02e38b75d50cbc0d9561d21f390a76242ce073f/pyyaml-6.0.3-cp313-cp313-macosx_11_0_arm64.whl", upload-time = 2025-09-25T21:32:25Z, size = 173252, hashes = { sha256 = "2283a07e2c21a2aa78d9c4442724ec1eb15f5e42a723b99cb3d822d48f5f7ad1" } }, { url = "https://files.pythonhosted.org/packages/50/31/b20f376d3f810b9b2371e72ef5adb33879b25edb7a6d072cb7ca0c486398/pyyaml-6.0.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", upload-time = 2025-09-25T21:32:26Z, size = 767081, hashes = { sha256 = "ee2922902c45ae8ccada2c5b501ab86c36525b883eff4255313a253a3160861c" } }, { url = "https://files.pythonhosted.org/packages/49/1e/a55ca81e949270d5d4432fbbd19dfea5321eda7c41a849d443dc92fd1ff7/pyyaml-6.0.3-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", upload-time = 2025-09-25T21:32:27Z, size = 841159, hashes = { sha256 = "a33284e20b78bd4a18c8c2282d549d10bc8408a2a7ff57653c0cf0b9be0afce5" } }, { url = "https://files.pythonhosted.org/packages/74/27/e5b8f34d02d9995b80abcef563ea1f8b56d20134d8f4e5e81733b1feceb2/pyyaml-6.0.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", upload-time = 2025-09-25T21:32:28Z, size = 801626, hashes = { sha256 = "0f29edc409a6392443abf94b9cf89ce99889a1dd5376d94316ae5145dfedd5d6" } }, { url = "https://files.pythonhosted.org/packages/f9/11/ba845c23988798f40e52ba45f34849aa8a1f2d4af4b798588010792ebad6/pyyaml-6.0.3-cp313-cp313-musllinux_1_2_aarch64.whl", upload-time = 2025-09-25T21:32:30Z, size = 753613, hashes = { sha256 = "f7057c9a337546edc7973c0d3ba84ddcdf0daa14533c2065749c9075001090e6" } }, { url = "https://files.pythonhosted.org/packages/3d/e0/7966e1a7bfc0a45bf0a7fb6b98ea03fc9b8d84fa7f2229e9659680b69ee3/pyyaml-6.0.3-cp313-cp313-musllinux_1_2_x86_64.whl", upload-time = 2025-09-25T21:32:31Z, size = 794115, hashes = { sha256 = "eda16858a3cab07b80edaf74336ece1f986ba330fdb8ee0d6c0d68fe82bc96be" } }, { url = "https://files.pythonhosted.org/packages/de/94/980b50a6531b3019e45ddeada0626d45fa85cbe22300844a7983285bed3b/pyyaml-6.0.3-cp313-cp313-win32.whl", upload-time = 2025-09-25T21:32:32Z, size = 137427, hashes = { sha256 = "d0eae10f8159e8fdad514efdc92d74fd8d682c933a6dd088030f3834bc8e6b26" } }, { url = "https://files.pythonhosted.org/packages/97/c9/39d5b874e8b28845e4ec2202b5da735d0199dbe5b8fb85f91398814a9a46/pyyaml-6.0.3-cp313-cp313-win_amd64.whl", upload-time = 2025-09-25T21:32:33Z, size = 154090, hashes = { sha256 = "79005a0d97d5ddabfeeea4cf676af11e647e41d81c9a7722a193022accdb6b7c" } }, { url = "https://files.pythonhosted.org/packages/73/e8/2bdf3ca2090f68bb3d75b44da7bbc71843b19c9f2b9cb9b0f4ab7a5a4329/pyyaml-6.0.3-cp313-cp313-win_arm64.whl", upload-time = 2025-09-25T21:32:34Z, size = 140246, hashes = { sha256 = "5498cd1645aa724a7c71c8f378eb29ebe23da2fc0d7a08071d89469bf1d2defb" } }, { url = "https://files.pythonhosted.org/packages/9d/8c/f4bd7f6465179953d3ac9bc44ac1a8a3e6122cf8ada906b4f96c60172d43/pyyaml-6.0.3-cp314-cp314-macosx_10_13_x86_64.whl", upload-time = 2025-09-25T21:32:35Z, size = 181814, hashes = { sha256 = "8d1fab6bb153a416f9aeb4b8763bc0f22a5586065f86f7664fc23339fc1c1fac" } }, { url = "https://files.pythonhosted.org/packages/bd/9c/4d95bb87eb2063d20db7b60faa3840c1b18025517ae857371c4dd55a6b3a/pyyaml-6.0.3-cp314-cp314-macosx_11_0_arm64.whl", upload-time = 2025-09-25T21:32:36Z, size = 173809, hashes = { sha256 = "34d5fcd24b8445fadc33f9cf348c1047101756fd760b4dacb5c3e99755703310" } }, { url = "https://files.pythonhosted.org/packages/92/b5/47e807c2623074914e29dabd16cbbdd4bf5e9b2db9f8090fa64411fc5382/pyyaml-6.0.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", upload-time = 2025-09-25T21:32:37Z, size = 766454, hashes = { sha256 = "501a031947e3a9025ed4405a168e6ef5ae3126c59f90ce0cd6f2bfc477be31b7" } }, { url = "https://files.pythonhosted.org/packages/02/9e/e5e9b168be58564121efb3de6859c452fccde0ab093d8438905899a3a483/pyyaml-6.0.3-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", upload-time = 2025-09-25T21:32:39Z, size = 836355, hashes = { sha256 = "b3bc83488de33889877a0f2543ade9f70c67d66d9ebb4ac959502e12de895788" } }, { url = "https://files.pythonhosted.org/packages/88/f9/16491d7ed2a919954993e48aa941b200f38040928474c9e85ea9e64222c3/pyyaml-6.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", upload-time = 2025-09-25T21:32:40Z, size = 794175, hashes = { sha256 = "c458b6d084f9b935061bc36216e8a69a7e293a2f1e68bf956dcd9e6cbcd143f5" } }, { url = "https://files.pythonhosted.org/packages/dd/3f/5989debef34dc6397317802b527dbbafb2b4760878a53d4166579111411e/pyyaml-6.0.3-cp314-cp314-musllinux_1_2_aarch64.whl", upload-time = 2025-09-25T21:32:42Z, size = 755228, hashes = { sha256 = "7c6610def4f163542a622a73fb39f534f8c101d690126992300bf3207eab9764" } }, { url = "https://files.pythonhosted.org/packages/d7/ce/af88a49043cd2e265be63d083fc75b27b6ed062f5f9fd6cdc223ad62f03e/pyyaml-6.0.3-cp314-cp314-musllinux_1_2_x86_64.whl", upload-time = 2025-09-25T21:32:43Z, size = 789194, hashes = { sha256 = "5190d403f121660ce8d1d2c1bb2ef1bd05b5f68533fc5c2ea899bd15f4399b35" } }, { url = "https://files.pythonhosted.org/packages/23/20/bb6982b26a40bb43951265ba29d4c246ef0ff59c9fdcdf0ed04e0687de4d/pyyaml-6.0.3-cp314-cp314-win_amd64.whl", upload-time = 2025-09-25T21:32:57Z, size = 156429, hashes = { sha256 = "4a2e8cebe2ff6ab7d1050ecd59c25d4c8bd7e6f400f5f82b96557ac0abafd0ac" } }, { url = "https://files.pythonhosted.org/packages/f4/f4/a4541072bb9422c8a883ab55255f918fa378ecf083f5b85e87fc2b4eda1b/pyyaml-6.0.3-cp314-cp314-win_arm64.whl", upload-time = 2025-09-25T21:32:59Z, size = 143912, hashes = { sha256 = "93dda82c9c22deb0a405ea4dc5f2d0cda384168e466364dec6255b293923b2f3" } }, { url = "https://files.pythonhosted.org/packages/7c/f9/07dd09ae774e4616edf6cda684ee78f97777bdd15847253637a6f052a62f/pyyaml-6.0.3-cp314-cp314t-macosx_10_13_x86_64.whl", upload-time = 2025-09-25T21:32:44Z, size = 189108, hashes = { sha256 = "02893d100e99e03eda1c8fd5c441d8c60103fd175728e23e431db1b589cf5ab3" } }, { url = "https://files.pythonhosted.org/packages/4e/78/8d08c9fb7ce09ad8c38ad533c1191cf27f7ae1effe5bb9400a46d9437fcf/pyyaml-6.0.3-cp314-cp314t-macosx_11_0_arm64.whl", upload-time = 2025-09-25T21:32:45Z, size = 183641, hashes = { sha256 = "c1ff362665ae507275af2853520967820d9124984e0f7466736aea23d8611fba" } }, { url = "https://files.pythonhosted.org/packages/7b/5b/3babb19104a46945cf816d047db2788bcaf8c94527a805610b0289a01c6b/pyyaml-6.0.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", upload-time = 2025-09-25T21:32:48Z, size = 831901, hashes = { sha256 = "6adc77889b628398debc7b65c073bcb99c4a0237b248cacaf3fe8a557563ef6c" } }, { url = "https://files.pythonhosted.org/packages/8b/cc/dff0684d8dc44da4d22a13f35f073d558c268780ce3c6ba1b87055bb0b87/pyyaml-6.0.3-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", upload-time = 2025-09-25T21:32:50Z, size = 861132, hashes = { sha256 = "a80cb027f6b349846a3bf6d73b5e95e782175e52f22108cfa17876aaeff93702" } }, { url = "https://files.pythonhosted.org/packages/b1/5e/f77dc6b9036943e285ba76b49e118d9ea929885becb0a29ba8a7c75e29fe/pyyaml-6.0.3-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", upload-time = 2025-09-25T21:32:51Z, size = 839261, hashes = { sha256 = "00c4bdeba853cc34e7dd471f16b4114f4162dc03e6b7afcc2128711f0eca823c" } }, { url = "https://files.pythonhosted.org/packages/ce/88/a9db1376aa2a228197c58b37302f284b5617f56a5d959fd1763fb1675ce6/pyyaml-6.0.3-cp314-cp314t-musllinux_1_2_aarch64.whl", upload-time = 2025-09-25T21:32:52Z, size = 805272, hashes = { sha256 = "66e1674c3ef6f541c35191caae2d429b967b99e02040f5ba928632d9a7f0f065" } }, { url = "https://files.pythonhosted.org/packages/da/92/1446574745d74df0c92e6aa4a7b0b3130706a4142b2d1a5869f2eaa423c6/pyyaml-6.0.3-cp314-cp314t-musllinux_1_2_x86_64.whl", upload-time = 2025-09-25T21:32:54Z, size = 829923, hashes = { sha256 = "16249ee61e95f858e83976573de0f5b2893b3677ba71c9dd36b9cf8be9ac6d65" } }, { url = "https://files.pythonhosted.org/packages/f0/7a/1c7270340330e575b92f397352af856a8c06f230aa3e76f86b39d01b416a/pyyaml-6.0.3-cp314-cp314t-win_amd64.whl", upload-time = 2025-09-25T21:32:55Z, size = 174062, hashes = { sha256 = "4ad1906908f2f5ae4e5a8ddfce73c320c2a1429ec52eafd27138b7f1cbe341c9" } }, { url = "https://files.pythonhosted.org/packages/f1/12/de94a39c2ef588c7e6455cfbe7343d3b2dc9d6b6b2f40c4c6565744c873d/pyyaml-6.0.3-cp314-cp314t-win_arm64.whl", upload-time = 2025-09-25T21:32:56Z, size = 149341, hashes = { sha256 = "ebc55a14a21cb14062aa4162f906cd962b28e2e9ea38f9b4391244cd8de4ae0b" } }, ] [[packages]] name = "requests" version = "2.33.1" sdist = { url = "https://files.pythonhosted.org/packages/5f/a4/98b9c7c6428a668bf7e42ebb7c79d576a1c3c1e3ae2d47e674b468388871/requests-2.33.1.tar.gz", upload-time = 2026-03-30T16:09:15Z, size = 134120, hashes = { sha256 = "18817f8c57c6263968bc123d237e3b8b08ac046f5456bd1e307ee8f4250d3517" } } wheels = [{ url = "https://files.pythonhosted.org/packages/d7/8e/7540e8a2036f79a125c1d2ebadf69ed7901608859186c856fa0388ef4197/requests-2.33.1-py3-none-any.whl", upload-time = 2026-03-30T16:09:13Z, size = 64947, hashes = { sha256 = "4e6d1ef462f3626a1f0a0a9c42dd93c63bad33f9f1c1937509b8c5c8718ab56a" } }] [[packages]] name = "typing-extensions" version = "4.15.0" sdist = { url = "https://files.pythonhosted.org/packages/72/94/1a15dd82efb362ac84269196e94cf00f187f7ed21c242792a923cdb1c61f/typing_extensions-4.15.0.tar.gz", upload-time = 2025-08-25T13:49:26Z, size = 109391, hashes = { sha256 = "0cea48d173cc12fa28ecabc3b837ea3cf6f38c6d1136f85cbaaf598984861466" } } wheels = [{ url = "https://files.pythonhosted.org/packages/18/67/36e9267722cc04a6b9f15c7f3441c2363321a3ea07da7ae0c0707beb2a9c/typing_extensions-4.15.0-py3-none-any.whl", upload-time = 2025-08-25T13:49:24Z, size = 44614, hashes = { sha256 = "f0fa19c6845758ab08074a0cfa8b7aecb71c999ca73d62883bc25cc018c4e548" } }] [[packages]] name = "typing-inspection" version = "0.4.2" sdist = { url = "https://files.pythonhosted.org/packages/55/e3/70399cb7dd41c10ac53367ae42139cf4b1ca5f36bb3dc6c9d33acdb43655/typing_inspection-0.4.2.tar.gz", upload-time = 2025-10-01T02:14:41Z, size = 75949, hashes = { sha256 = "ba561c48a67c5958007083d386c3295464928b01faa735ab8547c5692e87f464" } } wheels = [{ url = "https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl", upload-time = 2025-10-01T02:14:40Z, size = 14611, hashes = { sha256 = "4ed1cacbdc298c220f1bd249ed5287caa16f34d44ef4e9c3d0cbad5b521545e7" } }] [[packages]] name = "urllib3" version = "2.6.3" sdist = { url = "https://files.pythonhosted.org/packages/c7/24/5f1b3bdffd70275f6661c76461e25f024d5a38a46f04aaca912426a2b1d3/urllib3-2.6.3.tar.gz", upload-time = 2026-01-07T16:24:43Z, size = 435556, hashes = { sha256 = "1b62b6884944a57dbe321509ab94fd4d3b307075e0c2eae991ac71ee15ad38ed" } } wheels = [{ url = "https://files.pythonhosted.org/packages/39/08/aaaad47bc4e9dc8c725e68f9d04865dbcb2052843ff09c97b08904852d84/urllib3-2.6.3-py3-none-any.whl", upload-time = 2026-01-07T16:24:42Z, size = 131584, hashes = { sha256 = "bf272323e553dfb2e87d9bfd225ca7b0f467b919d7bbd355436d3fd37cb0acd4" } }] pydantic-pydantic-e28e879/.github/actions/people/requirements.in000066400000000000000000000000531526274674700250740ustar00rootroot00000000000000pydantic pydantic-settings PyGithub pyyaml pydantic-pydantic-e28e879/.github/dependabot.yml000066400000000000000000000011101526274674700217200ustar00rootroot00000000000000version: 2 updates: - package-ecosystem: github-actions directory: / schedule: interval: monthly cooldown: default-days: 7 - package-ecosystem: cargo directory: /pydantic-core/ schedule: interval: monthly groups: rust-deps: patterns: - '*' exclude-patterns: # pyo3 updates will require jiter updates, we'll handle them manually anyway - 'pyo3*' # strum updates will require speedate updates - 'strum' - 'strum_macros' cooldown: default-days: 7 pydantic-pydantic-e28e879/.github/pyodide/000077500000000000000000000000001526274674700205345ustar00rootroot00000000000000pydantic-pydantic-e28e879/.github/pyodide/pylock.314.toml000066400000000000000000000301611526274674700232410ustar00rootroot00000000000000lock-version = "1.0" created-by = "pip" [[packages]] name = "annotated-types" version = "0.8.0" [[packages.wheels]] name = "annotated_types-0.8.0-py3-none-any.whl" url = "https://files.pythonhosted.org/packages/99/91/8acff4f5e50511b911bbccb72b8628a49c68ce14148cd9f6431094859a90/annotated_types-0.8.0-py3-none-any.whl" [packages.wheels.hashes] sha256 = "f072f4d804ea359e4eaf198b1af7a8b0943881a87f31bb764f8bf219bb9419e0" [[packages]] name = "asttokens" version = "3.0.2" [[packages.wheels]] name = "asttokens-3.0.2-py3-none-any.whl" url = "https://files.pythonhosted.org/packages/d4/2b/04b8a15f3a1c77bc79ddf5c73875327f34b4fa75982df2b76e45e402d364/asttokens-3.0.2-py3-none-any.whl" [packages.wheels.hashes] sha256 = "9da13157f5b28becde0bd374fc677dcd3c290614264eff096f167c469cd9f933" [[packages]] name = "attrs" version = "26.1.0" [[packages.wheels]] name = "attrs-26.1.0-py3-none-any.whl" url = "https://cdn.jsdelivr.net/pyodide/v314.0.4/full/attrs-26.1.0-py3-none-any.whl" [packages.wheels.hashes] sha256 = "b5f2e20d25fbeb55950af8cda6b5ef71d47e60872587d11ab6b6425b0d7c2c92" [[packages]] name = "dirty-equals" version = "0.11" [[packages.wheels]] name = "dirty_equals-0.11-py3-none-any.whl" url = "https://files.pythonhosted.org/packages/bb/8d/dbff05239043271dbeace563a7686212a3dd517864a35623fe4d4a64ca19/dirty_equals-0.11-py3-none-any.whl" [packages.wheels.hashes] sha256 = "b1d7093273fc2f9be12f443a8ead954ef6daaf6746fd42ef3a5616433ee85286" [[packages]] name = "dnspython" version = "2.8.0" [[packages.wheels]] name = "dnspython-2.8.0-py3-none-any.whl" url = "https://cdn.jsdelivr.net/pyodide/v314.0.4/full/dnspython-2.8.0-py3-none-any.whl" [packages.wheels.hashes] sha256 = "087740d3b2bb9ac3ca01df6e09c03251e117600b32fda95e202dcd865859c213" [[packages]] name = "email-validator" version = "2.3.0" [[packages.wheels]] name = "email_validator-2.3.0-py3-none-any.whl" url = "https://files.pythonhosted.org/packages/de/15/545e2b6cf2e3be84bc1ed85613edd75b8aea69807a71c26f4ca6a9258e82/email_validator-2.3.0-py3-none-any.whl" [packages.wheels.hashes] sha256 = "80f13f623413e6b197ae73bb10bf4eb0908faf509ad8362c5edeb0be7fd450b4" [[packages]] name = "executing" version = "2.2.1" [[packages.wheels]] name = "executing-2.2.1-py2.py3-none-any.whl" url = "https://cdn.jsdelivr.net/pyodide/v314.0.4/full/executing-2.2.1-py2.py3-none-any.whl" [packages.wheels.hashes] sha256 = "cc2c5f9bbd2cfc976c2827c3435c4d0ea013c7c6ed4bbbb33dfcc21ae376fd94" [[packages]] name = "faker" version = "40.36.0" [[packages.wheels]] name = "faker-40.36.0-py3-none-any.whl" url = "https://files.pythonhosted.org/packages/50/9a/b947ed175ce9a0dcb070ccf3607f0ce8720cfb5ed1a36166a150b2acd5af/faker-40.36.0-py3-none-any.whl" [packages.wheels.hashes] sha256 = "82b9497d9cfe017048075bcf969298a74b1b6e39f5e4dad1211085d1133f7b62" [[packages]] name = "hypothesis" version = "6.165.3" [[packages.wheels]] name = "hypothesis-6.165.3-cp314-cp314-pyemscripten_2026_0_wasm32.whl" url = "https://files.pythonhosted.org/packages/dc/56/8356dadf45e5c635b46aa2b57fa74f3210250a8e38b860b6b75f50ed0b42/hypothesis-6.165.3-cp314-cp314-pyemscripten_2026_0_wasm32.whl" [packages.wheels.hashes] sha256 = "53c56155f2cfbb45ec97fef9ea3b8453b4a34c48c3c5cacee16f97dd2a037994" [[packages]] name = "idna" version = "3.18" [[packages.wheels]] name = "idna-3.18-py3-none-any.whl" url = "https://files.pythonhosted.org/packages/1e/5e/d4e9f1a599fb8e573b7b87160658329fbf28d19eac2718f51fc3def3aa5a/idna-3.18-py3-none-any.whl" [packages.wheels.hashes] sha256 = "7f952cbe720b688055e3f87de14f5c3e5fdaa8bc3928985c4077ca689de849a2" [[packages]] name = "iniconfig" version = "2.3.0" [[packages.wheels]] name = "iniconfig-2.3.0-py3-none-any.whl" url = "https://cdn.jsdelivr.net/pyodide/v314.0.4/full/iniconfig-2.3.0-py3-none-any.whl" [packages.wheels.hashes] sha256 = "1cd8448eea1c863c970703ed01fa1baf655043150cee772772253e3461b701ed" [[packages]] name = "inline-snapshot" version = "0.35.4" [[packages.wheels]] name = "inline_snapshot-0.35.4-py3-none-any.whl" url = "https://files.pythonhosted.org/packages/97/b3/dc18eb603de18daf5cacc27bb4c5e80c5403d9ca3eade7342fe4228652bf/inline_snapshot-0.35.4-py3-none-any.whl" [packages.wheels.hashes] sha256 = "0ad221c1bc6fe4ce249f7c1c4131284099ecac1a5c1023aa7b1a95921c07265d" [[packages]] name = "jsonschema" version = "4.26.0" [[packages.wheels]] name = "jsonschema-4.26.0-py3-none-any.whl" url = "https://cdn.jsdelivr.net/pyodide/v314.0.4/full/jsonschema-4.26.0-py3-none-any.whl" [packages.wheels.hashes] sha256 = "d2d29b9c8db3520b39feac084c913bbe79372f088ffb49fb59f44a1a7b57724a" [[packages]] name = "jsonschema-specifications" version = "2025.9.1" [[packages.wheels]] name = "jsonschema_specifications-2025.9.1-py3-none-any.whl" url = "https://cdn.jsdelivr.net/pyodide/v314.0.4/full/jsonschema_specifications-2025.9.1-py3-none-any.whl" [packages.wheels.hashes] sha256 = "ad8df6243b990e76af93135ab36903225cdc03e1730fc433f93ac3934a50d05b" [[packages]] name = "markdown-it-py" version = "4.2.0" [[packages.wheels]] name = "markdown_it_py-4.2.0-py3-none-any.whl" url = "https://files.pythonhosted.org/packages/b3/81/4da04ced5a082363ecfa159c010d200ecbd959ae410c10c0264a38cac0f5/markdown_it_py-4.2.0-py3-none-any.whl" [packages.wheels.hashes] sha256 = "9f7ebbcd14fe59494226453aed97c1070d83f8d24b6fc3a3bcf9a38092641c4a" [[packages]] name = "mdurl" version = "0.1.2" [[packages.wheels]] name = "mdurl-0.1.2-py3-none-any.whl" url = "https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl" [packages.wheels.hashes] sha256 = "84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8" [[packages]] name = "packaging" version = "26.3" [[packages.wheels]] name = "packaging-26.3-py3-none-any.whl" url = "https://files.pythonhosted.org/packages/63/34/ba1c580383c9eada3711951fef0795c80b829a078d72188184bcab9dd527/packaging-26.3-py3-none-any.whl" [packages.wheels.hashes] sha256 = "d7193f7c8e4e93f444fde0262bf90af30e16fa0ad0ad44cb553c87339b23cd1c" [[packages]] name = "pluggy" version = "1.6.0" [[packages.wheels]] name = "pluggy-1.6.0-py3-none-any.whl" url = "https://cdn.jsdelivr.net/pyodide/v314.0.4/full/pluggy-1.6.0-py3-none-any.whl" [packages.wheels.hashes] sha256 = "8358dcb4259589a6dbb54b42d0c437801bac4c69e843e617e3b529e9b7926fda" [[packages]] name = "py-cpuinfo" version = "9.0.0" [[packages.wheels]] name = "py_cpuinfo-9.0.0-py3-none-any.whl" url = "https://files.pythonhosted.org/packages/e0/a9/023730ba63db1e494a271cb018dcd361bd2c917ba7004c3e49d5daf795a2/py_cpuinfo-9.0.0-py3-none-any.whl" [packages.wheels.hashes] sha256 = "859625bc251f64e21f077d099d4162689c762b5d6a4c3c97553d56241c9674d5" [[packages]] name = "pygments" version = "2.20.0" [[packages.wheels]] name = "pygments-2.20.0-py3-none-any.whl" url = "https://cdn.jsdelivr.net/pyodide/v314.0.4/full/pygments-2.20.0-py3-none-any.whl" [packages.wheels.hashes] sha256 = "72b3a2c9c1f6eae60e2023e19d2d706cc0a6e0b2c40cc7fd94b9264a380e7569" [[packages]] name = "pytest" version = "9.1.1" [[packages.wheels]] name = "pytest-9.1.1-py3-none-any.whl" url = "https://files.pythonhosted.org/packages/24/25/1de2678b631f5a49215c6c96fff41ba892b0a34df68d6d80292b1b48aa7f/pytest-9.1.1-py3-none-any.whl" [packages.wheels.hashes] sha256 = "37a86b45efb9a47a61a36449063e8e18d0cab3161329fc099eb21783169c4f0c" [[packages]] name = "pytest-benchmark" version = "5.2.3" [[packages.wheels]] name = "pytest_benchmark-5.2.3-py3-none-any.whl" url = "https://files.pythonhosted.org/packages/33/29/e756e715a48959f1c0045342088d7ca9762a2f509b945f362a316e9412b7/pytest_benchmark-5.2.3-py3-none-any.whl" [packages.wheels.hashes] sha256 = "bc839726ad20e99aaa0d11a127445457b4219bdb9e80a1afc4b51da7f96b0803" [[packages]] name = "pytest-mock" version = "3.15.1" [[packages.wheels]] name = "pytest_mock-3.15.1-py3-none-any.whl" url = "https://files.pythonhosted.org/packages/5a/cc/06253936f4a7fa2e0f48dfe6d851d9c56df896a9ab09ac019d70b760619c/pytest_mock-3.15.1-py3-none-any.whl" [packages.wheels.hashes] sha256 = "0a25e2eb88fe5168d535041d09a4529a188176ae608a6d249ee65abc0949630d" [[packages]] name = "pytest-pretty" version = "1.3.0" [[packages.wheels]] name = "pytest_pretty-1.3.0-py3-none-any.whl" url = "https://files.pythonhosted.org/packages/ab/85/2f97a1b65178b0f11c9c77c35417a4cc5b99a80db90dad4734a129844ea5/pytest_pretty-1.3.0-py3-none-any.whl" [packages.wheels.hashes] sha256 = "074b9d5783cef9571494543de07e768a4dda92a3e85118d6c7458c67297159b7" [[packages]] name = "pytest-run-parallel" version = "0.10.0" [[packages.wheels]] name = "pytest_run_parallel-0.10.0-py3-none-any.whl" url = "https://files.pythonhosted.org/packages/a1/46/b22fd3dd6ea72efe88766ce734ba81536f56198de979f75cb0a5b463c2c5/pytest_run_parallel-0.10.0-py3-none-any.whl" [packages.wheels.hashes] sha256 = "712e96f4dac3e7dc14eff747ffba4180030db11ff22fd62513d9cf81289a1681" [[packages]] name = "python-dateutil" version = "2.9.0.post0" [[packages.wheels]] name = "python_dateutil-2.9.0.post0-py2.py3-none-any.whl" url = "https://cdn.jsdelivr.net/pyodide/v314.0.4/full/python_dateutil-2.9.0.post0-py2.py3-none-any.whl" [packages.wheels.hashes] sha256 = "e0dad39eec43965d30ef0dbe870617bd5a7ca795c65fda722a7ab2bbd2b747e3" [[packages]] name = "pytz" version = "2026.3.post1" [[packages.wheels]] name = "pytz-2026.3.post1-py2.py3-none-any.whl" url = "https://files.pythonhosted.org/packages/0f/7b/39c34ca613b0b198cb866466651b26b045e2009864c5183c979a3b83f383/pytz-2026.3.post1-py2.py3-none-any.whl" [packages.wheels.hashes] sha256 = "dd95840dd199baea12d9cc096a1d452caa6596a1c1e4b5f3dbd1541855d5e815" [[packages]] name = "referencing" version = "0.37.0" [[packages.wheels]] name = "referencing-0.37.0-py3-none-any.whl" url = "https://cdn.jsdelivr.net/pyodide/v314.0.4/full/referencing-0.37.0-py3-none-any.whl" [packages.wheels.hashes] sha256 = "ae7bf99d7fc3f1f3a44a208aa00ad39f1e89037b67a2f699a11887e432e84b0f" [[packages]] name = "rich" version = "15.0.0" [[packages.wheels]] name = "rich-15.0.0-py3-none-any.whl" url = "https://files.pythonhosted.org/packages/82/3b/64d4899d73f91ba49a8c18a8ff3f0ea8f1c1d75481760df8c68ef5235bf5/rich-15.0.0-py3-none-any.whl" [packages.wheels.hashes] sha256 = "33bd4ef74232fb73fe9279a257718407f169c09b78a87ad3d296f548e27de0bb" [[packages]] name = "rpds-py" version = "0.30.0" [[packages.wheels]] name = "rpds_py-0.30.0-cp314-cp314-pyemscripten_2026_0_wasm32.whl" url = "https://cdn.jsdelivr.net/pyodide/v314.0.4/full/rpds_py-0.30.0-cp314-cp314-pyemscripten_2026_0_wasm32.whl" [packages.wheels.hashes] sha256 = "3b419aa82348a3b54e2e0c47d734bb91753175c7f75ec8e0315300728e761ceb" [[packages]] name = "six" version = "1.17.0" [[packages.wheels]] name = "six-1.17.0-py2.py3-none-any.whl" url = "https://cdn.jsdelivr.net/pyodide/v314.0.4/full/six-1.17.0-py2.py3-none-any.whl" [packages.wheels.hashes] sha256 = "c6681057bd87fdec57e811b8e4007bad38deea284052817fa400d542c6423e2d" [[packages]] name = "sortedcontainers" version = "2.4.0" [[packages.wheels]] name = "sortedcontainers-2.4.0-py2.py3-none-any.whl" url = "https://cdn.jsdelivr.net/pyodide/v314.0.4/full/sortedcontainers-2.4.0-py2.py3-none-any.whl" [packages.wheels.hashes] sha256 = "f9fc70329a6a64a0cca46260abb486035cee345ea9e6f63263529bb05ff3c0d7" [[packages]] name = "typing-extensions" version = "4.16.0" [[packages.wheels]] name = "typing_extensions-4.16.0-py3-none-any.whl" url = "https://files.pythonhosted.org/packages/49/d3/b8441a820a491ddfc024b0b0cf0393375b75ea13866d9c66727e54c2fc80/typing_extensions-4.16.0-py3-none-any.whl" [packages.wheels.hashes] sha256 = "481caa481374e813c1b176ada14e97f1f67a4539ce9cfeb3f350d78d6370c2e8" [[packages]] name = "typing-inspection" version = "0.4.4" [[packages.wheels]] name = "typing_inspection-0.4.4-py3-none-any.whl" url = "https://files.pythonhosted.org/packages/67/81/4add07e5172b7ac40d8ed5ff580409a7801a4fe26d529bdd915401dabfbe/typing_inspection-0.4.4-py3-none-any.whl" [packages.wheels.hashes] sha256 = "65b8397ba37ccbce054456aaccddfc91e6e3083c92824df348d96ca832f3f147" [[packages]] name = "tzdata" version = "2026.3" [[packages.wheels]] name = "tzdata-2026.3-py2.py3-none-any.whl" url = "https://files.pythonhosted.org/packages/e5/6d/b53b99a9f2766d095985947a5782f1702cabb129a34f7a802d7197af832f/tzdata-2026.3-py2.py3-none-any.whl" [packages.wheels.hashes] sha256 = "dc096730c87af6cab1b171c9d532be840741ff5d459015e7f6947bd7d7e54931" pydantic-pydantic-e28e879/.github/pyodide/requirements.in000066400000000000000000000013141526274674700236060ustar00rootroot00000000000000# Selected dependencies (including dev ones) to run the test suite with Pyodide. # Dependencies should be installed from the derived `pylock.toml` file. # To generate the lockfile, run `python -m pip lock -r requirements.in -o pylock.31x.toml`, # in a Pyodide venv matching the target Python version. Such a venv can be created using # `pyodide venv .venv-pyodide` (and this must be done from a Python venv matching the target # Python version). annotated-types>=0.6.0 dirty-equals email-validator>=2.0.0 faker hypothesis inline-snapshot jsonschema packaging pytest pytest-benchmark pytest-mock pytest-pretty pytest-run-parallel>=0.3.1 python-dateutil pytz typing-extensions>=4.15.0 typing-inspection>=0.4.4 tzdata pydantic-pydantic-e28e879/.github/release.yml000066400000000000000000000006361526274674700212470ustar00rootroot00000000000000changelog: exclude: labels: - relnotes-ignore - documentation categories: - title: Packaging labels: - relnotes-packaging - title: New Features labels: - relnotes-feature - title: Changes labels: - relnotes-change - title: Performance labels: - relnotes-performance - title: Fixes labels: - relnotes-fix pydantic-pydantic-e28e879/.github/workflows/000077500000000000000000000000001526274674700211345ustar00rootroot00000000000000pydantic-pydantic-e28e879/.github/workflows/ci.yml000066400000000000000000001325121526274674700222560ustar00rootroot00000000000000name: CI on: push: branches: - main tags: - '**' pull_request: {} env: COLUMNS: 150 UV_FROZEN: true FORCE_COLOR: 1 permissions: contents: read jobs: lint: runs-on: ubuntu-latest name: Lint ${{ matrix.python-version }} strategy: fail-fast: false matrix: python-version: ['3.10', '3.11', '3.12', '3.13', '3.14', '3.15'] steps: - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false - uses: astral-sh/setup-uv@c18668ad3cf93ea998bef934396af7bb5c839dc7 # v10.2.0 with: python-version: ${{ matrix.python-version }} enable-cache: true # zizmor: ignore[cache-poisoning] -- Job does not produce release artifacts and does not have sensitive permissions - name: Install dependencies # Installing pip is required for the pre-commit action: run: | uv sync --all-packages --group linting --all-extras uv pip install pip - uses: pre-commit/action@2c7b3805fd2a0fd8c1884dcaebf91fc102a13ecd # v3.0.1 with: extra_args: --all-files --verbose env: SKIP: no-commit-to-branch UV_NO_PROGRESS: '1' core-build-sdist: runs-on: ubuntu-latest name: core / Build sdist permissions: contents: read # Required to attest build provenance, verified by the release job: id-token: write attestations: write steps: - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false - uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0 with: python-version: '3.13' - uses: PyO3/maturin-action@e83996d129638aa358a18fbd1dfb82f0b0fb5d3b # v1.51.0 with: working-directory: pydantic-core command: sdist args: --out dist rust-toolchain: stable - uses: actions/attest@1e69f48acb82d1966a394da916b4c1698aa569d6 # v4.2.2 if: startsWith(github.ref, 'refs/tags/') with: subject-path: pydantic-core/dist/* - uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 with: name: pydantic_core_pypi_files_sdist path: pydantic-core/dist core-build: name: core / Build on ${{ matrix.os }} (${{ matrix.target }} - ${{ matrix.interpreter || 'all' }}${{ matrix.os == 'linux' && format(' - {0}', matrix.manylinux == 'auto' && 'manylinux' || matrix.manylinux) || '' }}) # only run on push to main, if a full build was requested or on release: if: startsWith(github.ref, 'refs/tags/') || github.ref == 'refs/heads/main' || contains(github.event.pull_request.labels.*.name, 'full build') permissions: contents: read # Required to attest build provenance, verified by the release job: id-token: write attestations: write strategy: fail-fast: false matrix: os: [linux, macos, windows] target: [undefined] manylinux: [auto] include: # manylinux for various platforms # x86_64 and aarch64 are PGO optimized below - os: linux manylinux: auto target: i686 - os: linux manylinux: auto target: armv7 interpreter: 3.10 3.11 3.12 3.13 3.14 3.14t 3.15 3.15t - os: linux manylinux: auto target: ppc64le interpreter: 3.10 3.11 3.12 3.13 3.14 3.14t 3.15 3.15t - os: linux manylinux: auto target: riscv64gc-unknown-linux-gnu interpreter: 3.10 3.11 3.12 3.13 3.14 3.14t 3.15 3.15t - os: linux manylinux: auto target: s390x interpreter: 3.10 3.11 3.12 3.13 3.14 3.14t 3.15 3.15t # manylinux pypy and graalpy on major architectures: - os: linux manylinux: auto target: x86_64 interpreter: pypy3.11 graalpy3.11 graalpy3.12 - os: linux manylinux: auto target: aarch64 interpreter: graalpy3.11 graalpy3.12 # musllinux - os: linux manylinux: musllinux_1_1 target: x86_64 - os: linux manylinux: musllinux_1_1 target: aarch64 - os: linux manylinux: musllinux_1_1 target: armv7 # macos; # all versions x86_64 # arm pypy and older pythons which can't be run on the arm hardware for PGO - os: macos target: x86_64 interpreter: 3.10 3.11 3.12 3.13 3.14 3.14t 3.15 3.15t pypy3.11 graalpy3.11 graalpy3.12 - os: macos target: aarch64 interpreter: pypy3.11 graalpy3.11 graalpy3.12 # windows; # x86_64 pypy builds are not PGO optimized # i686 not supported by pypy # windows 11 arm supports 3.11 and up, not PGO optimized for now - os: windows target: x86_64 interpreter: pypy3.11 - os: windows target: i686 python-architecture: x86 interpreter: 3.10 3.11 3.12 3.13 3.14 3.14t 3.15 3.15t - os: windows target: aarch64 runs-on: windows-11-arm interpreter: 3.11 3.12 3.13 3.14 3.14t 3.15 3.15t exclude: # was just a dummy variable to set a default value for target - target: undefined runs-on: ${{ matrix.runs-on || format('{0}-latest', (matrix.os == 'linux' && 'ubuntu') || matrix.os) }} steps: - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false - uses: astral-sh/setup-uv@c18668ad3cf93ea998bef934396af7bb5c839dc7 # v10.2.0 with: python-version: '3.14' enable-cache: false - run: uv sync --only-group build - name: Build wheels uses: PyO3/maturin-action@e83996d129638aa358a18fbd1dfb82f0b0fb5d3b # v1.51.0 with: working-directory: pydantic-core target: ${{ matrix.target }} manylinux: ${{ matrix.manylinux }} args: --release --out dist --interpreter ${{ matrix.interpreter || '3.10 3.11 3.12 3.13 3.14 3.14t 3.15 3.15t pypy3.11' }} rust-toolchain: stable docker-options: -e CI - run: ${{ (matrix.os == 'windows' && 'dir') || 'ls -lh' }} dist/ working-directory: pydantic-core - run: uv run --no-sync twine check --strict pydantic-core/dist/* - uses: actions/attest@1e69f48acb82d1966a394da916b4c1698aa569d6 # v4.2.2 if: startsWith(github.ref, 'refs/tags/') with: subject-path: pydantic-core/dist/* - uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 with: name: pydantic_core_pypi_files_${{ matrix.os }}_${{ matrix.target }}_${{ matrix.interpreter || 'all' }}_${{ matrix.manylinux }} path: pydantic-core/dist core-build-pgo: name: core / Build PGO-optimized on ${{ matrix.platform.os }} / ${{ matrix.interpreter }} # only run on push to main, if a full build was requested or on release: if: startsWith(github.ref, 'refs/tags/') || github.ref == 'refs/heads/main' || contains(github.event.pull_request.labels.*.name, 'full build') permissions: contents: read # Required to attest build provenance, verified by the release job: id-token: write attestations: write strategy: fail-fast: false matrix: platform: - os: linux runs-on: ubuntu-latest - os: linux_aarch64 runs-on: ubuntu-24.04-arm - os: windows runs-on: windows-latest - os: macos runs-on: macos-latest interpreter: ['3.10', '3.11', '3.12', '3.13', '3.14', '3.14t', '3.15', '3.15t'] runs-on: ${{ matrix.platform.runs-on }} steps: - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false - uses: astral-sh/setup-uv@c18668ad3cf93ea998bef934396af7bb5c839dc7 # v10.2.0 with: python-version: ${{ matrix.interpreter }} enable-cache: false # make sure UV has the desired interpreter installed so PGO can use it - run: uv python install - name: Install rust stable id: rust-toolchain # no release versioning, see https://github.com/dtolnay/rust-toolchain/issues/180 uses: dtolnay/rust-toolchain@fa04a1451ff1842e2626ccb99004d0195b455a88 with: components: llvm-tools toolchain: stable - name: Build PGO wheel id: pgo-wheel uses: ./.github/actions/core-build-pgo-wheel with: working-directory: pydantic-core interpreter: ${{ matrix.interpreter }} rust-toolchain: ${{ steps.rust-toolchain.outputs.name }} - run: ${{ (startsWith(matrix.platform.os, 'windows') && 'dir') || 'ls -lh' }} dist/ working-directory: pydantic-core - uses: actions/attest@1e69f48acb82d1966a394da916b4c1698aa569d6 # v4.2.2 if: startsWith(github.ref, 'refs/tags/') with: subject-path: pydantic-core/dist/* - uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 with: name: pydantic_core_pypi_files_${{ matrix.platform.os }}_${{ matrix.interpreter }} path: pydantic-core/dist core-build-pyemscripten: name: core / Build PyEmscripten (${{ matrix.python-version }}) runs-on: ubuntu-latest permissions: contents: read # Required to attest build provenance, verified by the release job: id-token: write attestations: write strategy: fail-fast: false matrix: include: # Our MSRV is currently 1.88. # We can't build for 3.12 as Rust 1.88 is incompatible with the emsdk version (https://github.com/PyO3/maturin/issues/2549). # For 3.13, pyodide recommends nightly-2025-02-01 (1.86.0), which is below our MSRV — trying to use newer nightly releases # fails when building. - python-version: '3.14' pyodide-version: '314.0.7' steps: - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false - uses: astral-sh/setup-uv@c18668ad3cf93ea998bef934396af7bb5c839dc7 # v10.2.0 with: python-version: ${{ matrix.python-version }} enable-cache: ${{ !startsWith(github.ref, 'refs/tags/') }} # zizmor: ignore[cache-poisoning] - run: uv sync --only-group pyodide-build - run: uv run pyodide xbuildenv install ${{ matrix.pyodide-version }} env: UV_NO_SYNC: '1' - name: Get pyodide config id: pyodide-config run: | echo "rust-toolchain=$(uv run pyodide config get rust_toolchain)" >> "$GITHUB_OUTPUT" echo "emscripten-version=$(uv run pyodide config get emscripten_version)" >> "$GITHUB_OUTPUT" echo "pyodide-abi-version=$(uv run pyodide config get pyodide_abi_version)" >> "$GITHUB_OUTPUT" echo "rustflags=$(uv run pyodide config get rustflags)" >> "$GITHUB_OUTPUT" env: UV_NO_SYNC: '1' - uses: emscripten-core/setup-emsdk@4528d102f7230f0e7b276855c01ea1159be0e984 # v16 with: version: ${{ steps.pyodide-config.outputs.emscripten-version }} no-cache: ${{ startsWith(github.ref, 'refs/tags/') }} - name: Build wheels uses: PyO3/maturin-action@e83996d129638aa358a18fbd1dfb82f0b0fb5d3b # v1.51.0 # Unclear how to avoid manually specifying this yet (https://github.com/PyO3/maturin/issues/3189): env: CARGO_TARGET_WASM32_UNKNOWN_EMSCRIPTEN_RUSTFLAGS: ${{ steps.pyodide-config.outputs.rustflags }} MATURIN_PYEMSCRIPTEN_PLATFORM_VERSION: ${{ steps.pyodide-config.outputs.pyodide-abi-version }} with: working-directory: pydantic-core target: wasm32-unknown-emscripten args: --release --out dist --interpreter ${{ matrix.python-version }} sccache: ${{ !startsWith(github.ref, 'refs/tags/') }} # zizmor: ignore[cache-poisoning] rust-toolchain: ${{ steps.pyodide-config.outputs.rust-toolchain }} - run: ls -lh dist/ working-directory: pydantic-core - uses: actions/attest@1e69f48acb82d1966a394da916b4c1698aa569d6 # v4.2.2 if: startsWith(github.ref, 'refs/tags/') with: subject-path: pydantic-core/dist/* - uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 with: name: pydantic_core_pypi_files_pyemscripten_${{ matrix.python-version }} path: pydantic-core/dist core-bench: name: core / Run Rust benchmarks runs-on: ubuntu-latest steps: - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false - name: Install rust nightly # no release versioning, see https://github.com/dtolnay/rust-toolchain/issues/180 uses: dtolnay/rust-toolchain@fa04a1451ff1842e2626ccb99004d0195b455a88 with: toolchain: nightly - name: Cache rust uses: Swatinem/rust-cache@6323deb102c322ba6fcbdcafc7e3dddab59af2b6 # v2.9.2 with: lookup-only: false # zizmor: ignore[cache-poisoning] -- Job does not produce release artifacts and does not have sensitive permissions - run: cargo bench working-directory: pydantic-core core-test-builds-arch: name: core / Test build on ${{ matrix.target }}-${{ matrix.distro }} needs: [core-build] runs-on: ubuntu-latest strategy: fail-fast: false matrix: target: [armv7, s390x, ppc64le] distro: ['ubuntu22.04'] include: - target: aarch64 distro: alpine_latest steps: - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false - name: Get dist artifacts uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 with: pattern: pydantic_core_pypi_files_linux_* merge-multiple: true path: dist # The workspace is mounted in the container, so the installer can be verified on the host: - name: Get uv installer run: | curl -LsSf https://astral.sh/uv/install.sh -o uv-installer.sh gh attestation verify uv-installer.sh \ --repo astral-sh/uv \ --signer-workflow astral-sh/uv/.github/workflows/release.yml \ --deny-self-hosted-runners env: GH_TOKEN: ${{ github.token }} - uses: uraimo/run-on-arch-action@460cb8e6d9f726a588fc9b5e681c8a6cab09ae41 # v3.2.0 name: Install and test with: arch: ${{ matrix.target }} distro: ${{ matrix.distro }} githubToken: ${{ github.token }} install: | set -x if command -v apt-get &> /dev/null; then echo "installing python & pip with apt-get..." apt-get update apt-get install -y --no-install-recommends python3 python3-pip python3-venv git curl else echo "installing python & pip with apk..." apk update apk add python3 py3-pip git curl fi env: | UV_NO_PROGRESS: '1' # Until we move all dev dependencies to the main `pydantic` package, use this workaround: # Sync the pydantic-core workspace to get the dev dependencies (without the actual `pydantic-core` package), # and then sync the parent workspace: run: | set -x sh uv-installer.sh source $HOME/.local/bin/env uv sync --directory pydantic-core --group testing-extra --no-install-package pydantic-core uv sync --group testing-extra --no-install-package pydantic-core --no-install-package pytest-memray --no-install-package memray --no-install-package pytest-codspeed --no-install-package cffi --no-install-package time-machine --inexact uv pip install pydantic-core --no-index --no-deps --find-links dist --force-reinstall uv run --no-sync pytest tests/pydantic_core --ignore=tests/pydantic_core/test_docstrings.py uv run --no-sync python -c 'import pydantic_core._pydantic_core; print(pydantic_core._pydantic_core.__version__)' uv run --no-sync python -c 'from pydantic_core._pydantic_core import build_info; print(f"{build_info=}")' core-test-builds-os: name: core / Test build on ${{ matrix.platform.os }} needs: [core-build, core-build-pgo] strategy: fail-fast: false matrix: platform: - runs-on: ubuntu-latest os: linux - runs-on: ubuntu-24.04-arm os: linuw_aarch64 - runs-on: windows-latest os: windows - runs-on: windows-11-arm os: windows_aarch64 - runs-on: macos-latest os: macos runs-on: ${{ matrix.platform.runs-on }} steps: - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false - name: install uv uses: astral-sh/setup-uv@c18668ad3cf93ea998bef934396af7bb5c839dc7 # v10.2.0 with: enable-cache: true # zizmor: ignore[cache-poisoning] -- Job does not produce release artifacts and does not have sensitive permissions - name: get dist artifacts uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 with: pattern: pydantic_core_pypi_files_* merge-multiple: true path: dist # Until we move all dev dependencies to the main `pydantic` package, use this workaround: # Sync the pydantic-core workspace to get the dev dependencies (without the actual `pydantic-core` package), # and then sync the parent workspace: - run: | uv sync --directory pydantic-core --group testing-extra --no-install-package pydantic-core uv sync --group testing-extra --no-install-package pydantic-core --inexact uv pip install pydantic-core --no-index --no-deps --find-links dist --force-reinstall uv run --no-sync pytest tests/pydantic_core --ignore=tests/pydantic_core/test_docstrings.py uv run --no-sync python -c 'import pydantic_core._pydantic_core; print(pydantic_core._pydantic_core.__version__)' uv run --no-sync python -c 'from pydantic_core._pydantic_core import build_info; print(f"{build_info=}")' core-test-os: name: core / Test on ${{ matrix.os }} strategy: fail-fast: false matrix: os: [ubuntu, macos, windows] runs-on: ${{ matrix.os }}-latest steps: - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false - name: Install rust stable # no release versioning, see https://github.com/dtolnay/rust-toolchain/issues/180 uses: dtolnay/rust-toolchain@fa04a1451ff1842e2626ccb99004d0195b455a88 with: toolchain: stable - name: Cache rust uses: Swatinem/rust-cache@6323deb102c322ba6fcbdcafc7e3dddab59af2b6 # v2.9.2 with: lookup-only: false # zizmor: ignore[cache-poisoning] -- Job does not produce release artifacts and does not have sensitive permissions - uses: astral-sh/setup-uv@c18668ad3cf93ea998bef934396af7bb5c839dc7 # v10.2.0 with: enable-cache: true # zizmor: ignore[cache-poisoning] -- Job does not produce release artifacts and does not have sensitive permissions - name: Install dependencies run: uv sync --all-packages --group testing-extra env: RUST_BACKTRACE: 1 - run: uv pip freeze - run: uv run pytest tests/pydantic_core - run: cargo test working-directory: pydantic-core core-test-msrv: name: core / Test MSRV runs-on: ubuntu-latest steps: - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false - uses: astral-sh/setup-uv@c18668ad3cf93ea998bef934396af7bb5c839dc7 # v10.2.0 with: enable-cache: true # zizmor: ignore[cache-poisoning] -- Job does not produce release artifacts and does not have sensitive permissions - name: Resolve MSRV id: resolve-msrv run: echo MSRV=`cargo metadata --format-version 1 --no-deps --frozen --quiet --offline --manifest-path pydantic-core/Cargo.toml | jq -r '.packages[0].rust_version'` >> $GITHUB_OUTPUT - name: Install rust MSRV # no release versioning, see https://github.com/dtolnay/rust-toolchain/issues/180 uses: dtolnay/rust-toolchain@fa04a1451ff1842e2626ccb99004d0195b455a88 with: toolchain: ${{ steps.resolve-msrv.outputs.MSRV }} - name: Cache rust uses: Swatinem/rust-cache@6323deb102c322ba6fcbdcafc7e3dddab59af2b6 # v2.9.2 with: lookup-only: false # zizmor: ignore[cache-poisoning] -- Job does not produce release artifacts and does not have sensitive permissions - name: Install dependencies run: uv sync --all-packages --all-extras --group testing-extra env: RUST_BACKTRACE: 1 - run: uv pip freeze - run: uv run pytest tests/pydantic_core - run: cargo test working-directory: pydantic-core # test with a debug build as it picks up errors which optimised release builds do not core-test-debug: name: core / Test with debug build (${{ matrix.python-version }}) runs-on: ubuntu-latest strategy: fail-fast: false matrix: python-version: - '3.14' - 'pypy3.11' steps: - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false - uses: astral-sh/setup-uv@c18668ad3cf93ea998bef934396af7bb5c839dc7 # v10.2.0 with: python-version: ${{ matrix.python-version }} enable-cache: true # zizmor: ignore[cache-poisoning] -- Job does not produce release artifacts and does not have sensitive permissions - name: Install rust stable # no release versioning, see https://github.com/dtolnay/rust-toolchain/issues/180 uses: dtolnay/rust-toolchain@fa04a1451ff1842e2626ccb99004d0195b455a88 with: toolchain: stable - name: Cache rust uses: Swatinem/rust-cache@6323deb102c322ba6fcbdcafc7e3dddab59af2b6 # v2.9.2 with: lookup-only: false # zizmor: ignore[cache-poisoning] -- Job does not produce release artifacts and does not have sensitive permissions - name: Install dependencies run: uv sync --all-packages --all-extras --group testing-extra - run: uv run --no-sync maturin develop --uv working-directory: pydantic-core - run: uv pip freeze - run: uv run pytest core-test-python-debug: name: core / Test with debug Python (${{ matrix.python-version }}) if: startsWith(github.ref, 'refs/tags/') || contains(github.event.pull_request.labels.*.name, 'full build') runs-on: ubuntu-latest strategy: fail-fast: false matrix: python-version: - '3.14+debug' steps: - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false - uses: astral-sh/setup-uv@c18668ad3cf93ea998bef934396af7bb5c839dc7 # v10.2.0 with: python-version: ${{ matrix.python-version }} enable-cache: true # zizmor: ignore[cache-poisoning] -- Job does not produce release artifacts and does not have sensitive permissions - name: Install rust stable # no release versioning, see https://github.com/dtolnay/rust-toolchain/issues/180 uses: dtolnay/rust-toolchain@fa04a1451ff1842e2626ccb99004d0195b455a88 with: toolchain: stable - name: Cache rust uses: Swatinem/rust-cache@6323deb102c322ba6fcbdcafc7e3dddab59af2b6 # v2.9.2 with: lookup-only: false # zizmor: ignore[cache-poisoning] -- Job does not produce release artifacts and does not have sensitive permissions - name: Install dependencies run: uv sync --all-packages --all-extras --group testing-extra - run: uv run --no-sync maturin develop --uv working-directory: pydantic-core - run: uv pip freeze - run: uv run pytest test-pyemscripten: name: Test build on PyEmscripten (Pyodide) (${{ matrix.python-version }}) needs: [core-build-pyemscripten] runs-on: ubuntu-latest strategy: fail-fast: false matrix: include: - python-version: '3.14' pylock-suffix: '314' steps: - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false - name: install uv uses: astral-sh/setup-uv@c18668ad3cf93ea998bef934396af7bb5c839dc7 # v10.2.0 with: python-version: ${{ matrix.python-version }} enable-cache: true # zizmor: ignore[cache-poisoning] -- Job does not produce release artifacts and does not have sensitive permissions - name: get dist artifacts uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 with: name: pydantic_core_pypi_files_pyemscripten_${{ matrix.python-version }} path: dist - run: | uv sync --only-group pyodide-build uv run pyodide venv .venv-pyodide source .venv-pyodide/bin/activate python -m pip install --upgrade pip>=26.1.1 python -m pip install -r .github/pyodide/pylock.${{ matrix.pylock-suffix }}.toml python -m pip install pydantic-core --no-index --no-deps --find-links dist python -m pytest python -c 'import pydantic_core._pydantic_core; print(pydantic_core._pydantic_core.__version__)' python -c 'from pydantic_core._pydantic_core import build_info; print(f"{build_info=}")' build-pydantic: runs-on: ubuntu-latest if: startsWith(github.ref, 'refs/tags/') permissions: contents: read # Required to attest build provenance, verified by the release job: id-token: write attestations: write outputs: pydantic-version: ${{ steps.check-tag.outputs.VERSION }} steps: - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false - uses: astral-sh/setup-uv@c18668ad3cf93ea998bef934396af7bb5c839dc7 # v10.2.0 with: enable-cache: false - run: uv sync --only-group build - name: Check pydantic version id: check-tag uses: samuelcolvin/check-python-version@17d859ba0a6af9ffcaac5c70608fed36ed33e32a # v5.1 with: version_file_path: pydantic/version.py - name: Build pydantic library run: uv run --no-sync python -m build --installer uv - run: ls -lh dist/ - uses: actions/attest@1e69f48acb82d1966a394da916b4c1698aa569d6 # v4.2.2 with: subject-path: dist/* - uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 with: name: pydantic_pypi_files path: dist docs-build: runs-on: ubuntu-latest steps: - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false - uses: astral-sh/setup-uv@c18668ad3cf93ea998bef934396af7bb5c839dc7 # v10.2.0 with: python-version: '3.12' enable-cache: true # zizmor: ignore[cache-poisoning] -- Job does not produce release artifacts and does not have sensitive permissions - name: Install dependencies # Unlike the docs build, we don't use mkdocs_material-insiders # Because the secret for accessing the library is not accessible from forks, but we still want to run # this job on public CI runs. run: uv sync --all-packages --group docs - run: uv run python -c 'import docs.plugins.main' # Taken from docs-build.sh - name: prepare shortcuts for extra modules run: | ln -s pydantic-core/python/pydantic_core pydantic_core ln -s .venv/lib/python*/site-packages/pydantic_settings pydantic_settings ln -s .venv/lib/python*/site-packages/pydantic_extra_types pydantic_extra_types - run: PYTHONPATH="$PWD${PYTHONPATH:+:${PYTHONPATH}}" uv run mkdocs build test-memray: name: Test memray runs-on: ubuntu-latest steps: - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false - uses: astral-sh/setup-uv@c18668ad3cf93ea998bef934396af7bb5c839dc7 # v10.2.0 with: python-version: '3.12' enable-cache: true # zizmor: ignore[cache-poisoning] -- Job does not produce release artifacts and does not have sensitive permissions - name: install deps run: uv sync --all-packages --group testing-extra - name: Run tests run: uv run pytest --ignore=tests/mypy/ --ignore=tests/test_docs.py --memray test: name: Test ${{ matrix.os }} / ${{ matrix.python-version }} strategy: fail-fast: false matrix: os: [ubuntu-latest, macos-latest, windows-latest] python-version: ['3.10', '3.11', '3.12', '3.13', '3.14', '3.15', '3.15t', 'pypy3.11'] include: # test macos intel just with latest python version - os: macos-15-intel python-version: '3.15' - os: macos-15-intel python-version: '3.15t' env: OS: ${{ matrix.os }} DEPS: yes UV_PYTHON_PREFERENCE: only-managed runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false - uses: astral-sh/setup-uv@c18668ad3cf93ea998bef934396af7bb5c839dc7 # v10.2.0 with: python-version: ${{ matrix.python-version }} enable-cache: true # zizmor: ignore[cache-poisoning] -- Job does not produce release artifacts and does not have sensitive permissions - name: Install dependencies run: uv sync --all-packages --group testing-extra --all-extras - run: 'uv run python -c "import pydantic.version; print(pydantic.version.version_info())"' - run: mkdir coverage - name: Run pytest if: '!startsWith(matrix.python-version, ''pypy'')' run: make test NUM_THREADS=${{ endsWith(matrix.python-version, 't') && '4' || '1' }} env: COVERAGE_FILE: coverage/.coverage.${{ runner.os }}-py${{ matrix.python-version }} CONTEXT: ${{ runner.os }}-py${{ matrix.python-version }}-without-deps # Coverage is very slow on PyPy and it covers roughly the same lines as CPython tests: - name: Run pytest (no coverage) if: startsWith(matrix.python-version, 'pypy') run: uv run pytest --durations=10 - name: Store coverage files if: '!startsWith(matrix.python-version, ''pypy'')' uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 with: name: coverage-${{ matrix.os }}-${{ matrix.python-version }} path: coverage include-hidden-files: true test-plugin: name: Test Pydantic plugin runs-on: ubuntu-latest steps: - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false - uses: astral-sh/setup-uv@c18668ad3cf93ea998bef934396af7bb5c839dc7 # v10.2.0 with: python-version: '3.12' enable-cache: true # zizmor: ignore[cache-poisoning] -- Job does not produce release artifacts and does not have sensitive permissions - name: Install dependencies run: uv sync - name: Install example plugin run: uv pip install ./tests/plugin - run: uv run pytest tests/plugin env: TEST_PLUGIN: 1 test-mypy: name: Mypy typechecking tests runs-on: ubuntu-latest steps: - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false - uses: astral-sh/setup-uv@c18668ad3cf93ea998bef934396af7bb5c839dc7 # v10.2.0 with: python-version: '3.13' enable-cache: true # zizmor: ignore[cache-poisoning] -- Job does not produce release artifacts and does not have sensitive permissions - name: Install dependencies run: uv sync --group typechecking --all-extras - run: mkdir coverage - name: Run mypy tests run: uv run coverage run -m pytest tests/mypy --test-mypy env: COVERAGE_FILE: coverage/.coverage.linux-mypy CONTEXT: linux-mypy - name: Store coverage files uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 with: name: coverage-mypy path: coverage include-hidden-files: true test-typechecking-integration: name: Typechecking integration tests runs-on: ubuntu-latest steps: - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false - uses: astral-sh/setup-uv@c18668ad3cf93ea998bef934396af7bb5c839dc7 # v10.2.0 with: python-version: '3.12' enable-cache: true # zizmor: ignore[cache-poisoning] -- Job does not produce release artifacts and does not have sensitive permissions - name: Install dependencies run: uv sync --group typechecking - name: Run typechecking integration tests (Pyright) run: make test-typechecking-pyright env: # Until we get https://github.com/RobertCraigie/pyright-python/pull/365: PYRIGHT_PYTHON_FORCE_VERSION: '1.1.413' - name: Run typechecking integration tests (Mypy) run: make test-typechecking-mypy - name: Run typechecking integration tests (Pyrefly) run: make test-typechecking-pyrefly coverage-combine: needs: [test, test-mypy] runs-on: ubuntu-latest env: UV_NO_SYNC: '1' steps: - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false - uses: astral-sh/setup-uv@c18668ad3cf93ea998bef934396af7bb5c839dc7 # v10.2.0 with: python-version: '3.14' enable-cache: false - name: Get coverage files uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 with: merge-multiple: true pattern: coverage-* path: coverage - run: uv sync --only-group coverage - run: ls -la coverage - run: uv run coverage combine coverage - run: uv run coverage report - run: uv run coverage html --show-contexts --title "pydantic coverage for ${{ github.sha }}" - name: Store coverage data uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 with: name: coverage-data path: .coverage include-hidden-files: true - name: Store coverage HTML uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 with: name: coverage-html path: htmlcov coverage-pr-comment: needs: coverage-combine runs-on: ubuntu-latest if: github.event_name == 'pull_request' permissions: pull-requests: write contents: write steps: - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false - name: Download coverage data uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 with: name: coverage-data - name: Generate coverage comment id: coverage-comment uses: py-cov-action/python-coverage-comment-action@54b4ecbc0fcf4c22e54be4dd59d4c08db9953ce9 # v4.4 with: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - name: Store coverage comment uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 if: steps.coverage-comment.outputs.COMMENT_FILE_WRITTEN == 'true' with: name: python-coverage-comment-action path: python-coverage-comment-action.txt test-typing-extensions: name: Test typing-extensions (`main` branch) on Python ${{ matrix.python-version }} runs-on: ubuntu-latest strategy: fail-fast: false matrix: python-version: ['3.10', '3.11', '3.12', '3.13', '3.14', '3.15'] steps: - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false - uses: astral-sh/setup-uv@c18668ad3cf93ea998bef934396af7bb5c839dc7 # v10.2.0 with: python-version: ${{ matrix.python-version }} # Installs `typing-extensions` from its `main` branch, so don't write to (nor read from) the shared cache: enable-cache: false - name: Install dependencies run: uv sync --all-packages --group testing-extra --all-extras - name: Install typing-extensions run: uv pip install 'typing-extensions @ git+https://github.com/python/typing_extensions.git' - name: Run tests run: make test # https://github.com/marketplace/actions/alls-green check: # This job does nothing and is only used for the branch protection if: always() outputs: result: ${{ steps.all-green.outputs.result }} needs: [lint, docs-build, test, test-memray, test-mypy, test-plugin, core-test-os, core-test-debug, core-build-pyemscripten] runs-on: ubuntu-latest steps: - name: Decide whether the needed jobs succeeded or failed uses: re-actors/alls-green@b5b5b37504aa4183270bd3d855c52a67f212be35 # v1.3.0 id: all-green with: jobs: ${{ toJSON(needs) }} deploy-docs: needs: [check] if: needs.check.outputs.result == 'success' && (github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/tags/')) runs-on: ubuntu-latest steps: - name: Generate app token uses: actions/create-github-app-token@bcd2ba49218906704ab6c1aa796996da409d3eb1 # v3.2.0 id: app-token with: client-id: ${{ vars.DOCS_APP_CLIENT_ID }} private-key: ${{ secrets.DOCS_APP_PRIVATE_KEY }} owner: ${{ github.repository_owner }} repositories: unified-docs - name: Trigger unified-docs deployment env: GH_TOKEN: ${{ steps.app-token.outputs.token }} run: | gh api repos/pydantic/unified-docs/dispatches \ --method POST \ -f event_type=docs-update release-pydantic-core: needs: [core-test-builds-arch, core-test-builds-os, core-build-sdist, core-test-python-debug, check] if: needs.check.outputs.result == 'success' && startsWith(github.ref, 'refs/tags/') runs-on: ubuntu-latest environment: release permissions: id-token: write attestations: read steps: - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false - uses: astral-sh/setup-uv@c18668ad3cf93ea998bef934396af7bb5c839dc7 # v10.2.0 with: enable-cache: false - run: uv sync --only-group build - name: Extract pydantic-core version id: core-version run: | VERSION=$(cargo metadata --format-version 1 --no-deps --frozen --quiet --offline --manifest-path pydantic-core/Cargo.toml | jq -r '.packages[0].version') echo "VERSION=$VERSION" >> "$GITHUB_OUTPUT" echo "pydantic-core version: $VERSION" - name: Check if pydantic-core version is already on PyPI id: check-pypi run: | STATUS=$(curl -s -o /dev/null -I -w "%{http_code}" https://pypi.org/pypi/pydantic-core/${STEPS_CORE_VERSION_OUTPUTS_VERSION}/json) if [ "$STATUS" = "200" ]; then echo "already_published=true" >> "$GITHUB_OUTPUT" echo "pydantic-core ${STEPS_CORE_VERSION_OUTPUTS_VERSION} is already on PyPI, skipping publish" else echo "already_published=false" >> "$GITHUB_OUTPUT" echo "pydantic-core ${STEPS_CORE_VERSION_OUTPUTS_VERSION} not found on PyPI, will publish" fi env: STEPS_CORE_VERSION_OUTPUTS_VERSION: ${{ steps.core-version.outputs.VERSION }} - name: Get pydantic-core dist artifacts if: steps.check-pypi.outputs.already_published != 'true' uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 with: pattern: pydantic_core_pypi_files_* merge-multiple: true path: pydantic-core-dist - name: Verify pydantic-core dist artifacts provenance if: steps.check-pypi.outputs.already_published != 'true' run: | for f in pydantic-core-dist/*; do gh attestation verify "$f" \ --repo "$GITHUB_REPOSITORY" \ --signer-workflow "$GITHUB_REPOSITORY/.github/workflows/ci.yml" \ --source-ref "$GITHUB_REF" \ --source-digest "$GITHUB_SHA" \ --deny-self-hosted-runners done env: GH_TOKEN: ${{ github.token }} - name: Test pydantic-core wheels integrity if: steps.check-pypi.outputs.already_published != 'true' run: | for whl in pydantic-core-dist/*.whl; do unzip -qt "$whl"; done uv run --no-sync twine check --strict pydantic-core-dist/* - name: Publish pydantic-core to PyPI if: steps.check-pypi.outputs.already_published != 'true' run: uv publish --trusted-publishing always pydantic-core-dist/* release-pydantic: needs: [build-pydantic, release-pydantic-core] if: startsWith(github.ref, 'refs/tags/') runs-on: ubuntu-latest environment: release permissions: id-token: write contents: write attestations: read steps: - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false - uses: astral-sh/setup-uv@c18668ad3cf93ea998bef934396af7bb5c839dc7 # v10.2.0 with: enable-cache: false - run: uv sync --only-group build - name: Get pydantic dist artifacts uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 with: name: pydantic_pypi_files path: pydantic-dist - name: Verify pydantic dist artifacts provenance run: | for f in pydantic-dist/*; do gh attestation verify "$f" \ --repo "$GITHUB_REPOSITORY" \ --signer-workflow "$GITHUB_REPOSITORY/.github/workflows/ci.yml" \ --source-ref "$GITHUB_REF" \ --source-digest "$GITHUB_SHA" \ --deny-self-hosted-runners done env: GH_TOKEN: ${{ github.token }} - name: Test pydantic artifacts integrity run: | for whl in pydantic-dist/*.whl; do unzip -qt "$whl"; done uv run --no-sync twine check --strict pydantic-dist/* - name: Upload package to PyPI uses: pypa/gh-action-pypi-publish@dc37677b2e1c63e2034f94d8a5b11f265b73ba33 # v1.14.2 with: packages-dir: pydantic-dist/ send-tweet: name: Send tweet needs: [build-pydantic, release-pydantic] if: needs.release-pydantic.result == 'success' runs-on: ubuntu-latest steps: - uses: astral-sh/setup-uv@c18668ad3cf93ea998bef934396af7bb5c839dc7 # v10.2.0 with: python-version: '3.14' enable-cache: false - run: uv sync --only-group tweet - name: Send tweet shell: python run: | import os import tweepy client = tweepy.Client( access_token=os.getenv("TWITTER_ACCESS_TOKEN"), access_token_secret=os.getenv("TWITTER_ACCESS_TOKEN_SECRET"), consumer_key=os.getenv("TWITTER_CONSUMER_KEY"), consumer_secret=os.getenv("TWITTER_CONSUMER_SECRET"), ) version = os.getenv("VERSION").strip('"') if "b" in version: official_version = version[:version.index("b")] tweet = os.getenv("BETA_TWEET").format(version=version, official_version=official_version) else: tweet = os.getenv("TWEET").format(version=version) client.create_tweet(text=tweet) env: VERSION: ${{ needs.build-pydantic.outputs.pydantic-version }} TWEET: | Pydantic version {version} is out! 🎉 https://github.com/pydantic/pydantic/releases/tag/v{version} BETA_TWEET: | Pydantic beta version {version} is out! 🚀 Please try v{version} in the next week before we release v{official_version}, and let us know if you encounter any issues! https://github.com/pydantic/pydantic/releases/tag/v{version} TWITTER_CONSUMER_KEY: ${{ secrets.TWITTER_CONSUMER_KEY }} TWITTER_CONSUMER_SECRET: ${{ secrets.TWITTER_CONSUMER_SECRET }} TWITTER_ACCESS_TOKEN: ${{ secrets.TWITTER_ACCESS_TOKEN }} TWITTER_ACCESS_TOKEN_SECRET: ${{ secrets.TWITTER_ACCESS_TOKEN_SECRET }} pydantic-pydantic-e28e879/.github/workflows/codspeed.yml000066400000000000000000000035641526274674700234550ustar00rootroot00000000000000name: codspeed on: push: branches: - main pull_request: # `workflow_dispatch` allows CodSpeed to trigger backtest # performance analysis in order to generate initial data. workflow_dispatch: env: UV_FROZEN: true UV_PYTHON: 3.14 permissions: contents: read jobs: codspeed-profiling: name: CodSpeed profiling runs-on: ubuntu-24.04 steps: - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false - uses: astral-sh/setup-uv@c18668ad3cf93ea998bef934396af7bb5c839dc7 # v10.2.0 # Using this action is still necessary for CodSpeed to work: - uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0 with: python-version: ${{ env.UV_PYTHON }} - name: install deps run: uv sync --all-packages --group testing-extra --extra email --frozen - name: install rust stable # no release versioning, see https://github.com/dtolnay/rust-toolchain/issues/180 uses: dtolnay/rust-toolchain@fa04a1451ff1842e2626ccb99004d0195b455a88 with: components: llvm-tools toolchain: stable - name: cache rust uses: Swatinem/rust-cache@6323deb102c322ba6fcbdcafc7e3dddab59af2b6 # v2.9.2 with: workspaces: pydantic-core - name: install pydantic-core with profiling symbols run: | cd pydantic-core uv pip uninstall pytest-speed make build-pgo env: CARGO_PROFILE_RELEASE_DEBUG: 'line-tables-only' CARGO_PROFILE_RELEASE_STRIP: 'false' - name: Run CodSpeed benchmarks uses: CodSpeedHQ/action@f99becdce5e5d51fd556489ebef684f4ecfd6286 # v4.18.5 with: mode: simulation run: uv run --no-sync pytest ./tests/benchmarks ./tests/pydantic_core/benchmarks --codspeed pydantic-pydantic-e28e879/.github/workflows/coverage.yml000066400000000000000000000016461526274674700234610ustar00rootroot00000000000000name: Post coverage comment on: # zizmor: ignore[dangerous-triggers] -- workflow_run is used safely here; no code checkout occurs workflow_run: workflows: ['CI'] types: - completed jobs: post-coverage-comment: name: Push coverage comment runs-on: ubuntu-latest if: github.event.workflow_run.event == 'pull_request' && github.event.workflow_run.conclusion == 'success' permissions: pull-requests: write contents: write actions: read steps: # DO NOT run actions/checkout here, for security reasons # For details, refer to https://securitylab.github.com/research/github-actions-preventing-pwn-requests/ - name: Post comment uses: py-cov-action/python-coverage-comment-action@54b4ecbc0fcf4c22e54be4dd59d4c08db9953ce9 # v4.4 with: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} GITHUB_PR_RUN_ID: ${{ github.event.workflow_run.id }} pydantic-pydantic-e28e879/.github/workflows/docs-navigation.yml000066400000000000000000000147401526274674700247520ustar00rootroot00000000000000name: Docs Navigation Check # Label-triggered navigation validation. Adding `trigger:docs` to a PR asks # pydantic/unified-docs to validate this PR's MkDocs navigation and referenced # Markdown files without executing pull-request content. # # This workflow is purely a dispatcher. The data-only validation and final # comment happen in unified-docs. After a successful dispatch, the label stays # present until unified-docs reaches a terminal result so a pushed commit can # supersede an in-flight exact-SHA run. on: # zizmor: ignore[dangerous-triggers] -- pull_request_target is required so fork PRs can # access the DOCS_APP credentials. Every run verifies that the actor who most # recently applied the label has write access. While that trusted label remains # present, synchronize events supersede an in-flight dispatch so the receiver # never gets stranded on a stale SHA. This workflow never checks out or executes # PR code. pull_request_target: types: [labeled, synchronize] permissions: {} concurrency: group: docs-navigation-${{ github.event.pull_request.number }} cancel-in-progress: true jobs: dispatch: name: Dispatch Docs Navigation Check if: >- (github.event.action == 'labeled' && github.event.label.name == 'trigger:docs') || (github.event.action == 'synchronize' && contains(github.event.pull_request.labels.*.name, 'trigger:docs')) runs-on: ubuntu-latest timeout-minutes: 5 permissions: # Needed to post the queued comment and clean up a failed dispatch. pull-requests: write steps: - name: Verify a maintainer owns the trigger label id: verify env: GH_TOKEN: ${{ github.token }} PR_NUMBER: ${{ github.event.pull_request.number }} REPO: ${{ github.repository }} run: | label_actor=$(gh api --paginate --slurp \ "repos/${REPO}/issues/${PR_NUMBER}/timeline?per_page=100" \ --jq '([.[][] | select(.event == "labeled" and .label.name == "trigger:docs")] | last | .actor.login) // empty') if [ -z "$label_actor" ]; then echo "Could not identify who applied trigger:docs" >&2 exit 1 fi permission=$(gh api "repos/${REPO}/collaborators/${label_actor}/permission" --jq .permission) case "$permission" in admin|maintain|write) ;; *) echo "${label_actor} does not have permission to dispatch a docs navigation check" >&2 exit 1 ;; esac - name: Generate app token for unified-docs id: app-token uses: actions/create-github-app-token@bcd2ba49218906704ab6c1aa796996da409d3eb1 # v3.2.0 with: client-id: ${{ vars.DOCS_APP_CLIENT_ID }} private-key: ${{ secrets.DOCS_APP_PRIVATE_KEY }} owner: ${{ github.repository_owner }} repositories: unified-docs permission-contents: write - name: Dispatch navigation check id: dispatch env: GH_TOKEN: ${{ steps.app-token.outputs.token }} HEAD_SHA: ${{ github.event.pull_request.head.sha }} PR_NUMBER: ${{ github.event.pull_request.number }} REPO: ${{ github.repository }} run: | gh api repos/pydantic/unified-docs/dispatches \ --method POST \ -f event_type=docs-preview \ -f "client_payload[library]=validation" \ -f "client_payload[source_repo]=${REPO}" \ -f "client_payload[source_pr]=${PR_NUMBER}" \ -f "client_payload[source_sha]=${HEAD_SHA}" - name: Acknowledge on PR id: acknowledge env: GH_TOKEN: ${{ github.token }} HEAD_SHA: ${{ github.event.pull_request.head.sha }} PR_NUMBER: ${{ github.event.pull_request.number }} REPO: ${{ github.repository }} run: | sha7=${HEAD_SHA:0:7} body=$(cat <Re-add the \`trigger:docs\` label to retry. EOF ) gh api "repos/${REPO}/issues/${PR_NUMBER}/comments" -f body="$body" - name: Report acknowledgement failure on PR if: failure() && steps.dispatch.outcome == 'success' && steps.acknowledge.outcome == 'failure' env: GH_TOKEN: ${{ github.token }} PR_NUMBER: ${{ github.event.pull_request.number }} REPO: ${{ github.repository }} RUN_URL: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }} run: | body=$(cat < github.event.pull_request.author_association != 'MEMBER' && github.event.pull_request.author_association != 'OWNER' && github.event.pull_request.author_association != 'COLLABORATOR' && !contains(github.event.pull_request.labels.*.name, 'skip-assignment-check') runs-on: ubuntu-latest steps: - name: Check referenced issues and close if unauthorized uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 with: script: | const pr = context.payload.pull_request; const author = pr.user.login; const query = ` query($owner: String!, $repo: String!, $number: Int!) { repository(owner: $owner, name: $repo) { pullRequest(number: $number) { closingIssuesReferences(first: 20) { nodes { number assignees(first: 20) { nodes { login } } } } } } } `; const result = await github.graphql(query, { owner: context.repo.owner, repo: context.repo.repo, number: pr.number, }); const refs = result.repository.pullRequest.closingIssuesReferences.nodes; if (refs.length === 0) { core.info('No closing issue references; nothing to enforce.'); return; } const unauthorized = refs.filter( issue => !issue.assignees.nodes.some(a => a.login === author) ); if (unauthorized.length === 0) { core.info(`Author ${author} is assigned to all referenced issues.`); return; } const issueList = unauthorized.map(i => `#${i.number}`).join(', '); const body = `@${author} You do not have permission to open a PR without ` + `being assigned to the referenced issue (${issueList}).`; await github.rest.issues.createComment({ owner: context.repo.owner, repo: context.repo.repo, issue_number: pr.number, body, }); await github.rest.pulls.update({ owner: context.repo.owner, repo: context.repo.repo, pull_number: pr.number, state: 'closed', }); pydantic-pydantic-e28e879/.github/workflows/integration.yml000066400000000000000000000023561526274674700242100ustar00rootroot00000000000000name: Pydantic Family Integration Tests on: schedule: - cron: '21 3 * * 1,2,3,4,5' workflow_dispatch: {} permissions: contents: read jobs: test-pydantic-settings: name: Test pydantic settings runs-on: ubuntu-latest strategy: matrix: python-version: ['3.10', '3.11', '3.12', '3.13', '3.14', '3.15'] steps: - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false - uses: astral-sh/setup-uv@c18668ad3cf93ea998bef934396af7bb5c839dc7 # v10.2.0 with: python-version: ${{ matrix.python-version }} - name: Run tests run: make test-pydantic-settings test-pydantic-extra-types: name: Test pydantic extra types runs-on: ubuntu-latest strategy: matrix: python-version: ['3.10', '3.11', '3.12', '3.13', '3.14', '3.15'] steps: - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false - uses: astral-sh/setup-uv@c18668ad3cf93ea998bef934396af7bb5c839dc7 # v10.2.0 with: python-version: ${{ matrix.python-version }} - name: Run tests run: make test-pydantic-extra-types pydantic-pydantic-e28e879/.github/workflows/third-party.yml000066400000000000000000001000601526274674700241230ustar00rootroot00000000000000# This workflow runs on pull requests labeled with `third-party-tests`, inspired by: # https://github.com/python/typing_extensions/blob/main/.github/workflows/third_party.yml. # Running the tests of various third-party libraries that use Pydantic. This helps us spot regressions early, and helps # flag when third-party libraries are making incorrect assumptions that might cause them to break when we cut a new release. # Instructions: # - The CI should be as close as possible to the original project's workflows. # - Use the checkout action to clone Pydantic with a custom path (e.g. `path: pydantic-latest`). # - Make sure Pydantic is installed in editable mode (e.g. `uv pip install --no-config -e ./pydantic-latest`) # so that the path appears in the `pip list` output (and so we can be assured Pydantic was properly # installed from the provided path). # - If using `uv run`, make use to use the `--no-sync`, because uv has the nasty habit of syncing the venv # on each `uv run` invocation, which will reinstall the locked `pydantic`/`pydantic-core` version. name: Third party tests on: pull_request: branches: [main] permissions: contents: read env: # https://github.com/pytest-dev/pytest/issues/7443#issuecomment-656642591: FORCE_COLOR: 1 # https://pip.pypa.io/en/stable/cli/pip_install/#cmdoption-progress-bar PIP_PROGRESS_BAR: off concurrency: group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} cancel-in-progress: true jobs: test-fastapi: name: Test FastAPI (main branch) on Python ${{ matrix.python-version }} if: contains(github.event.pull_request.labels.*.name, 'third-party-tests') runs-on: ubuntu-latest strategy: fail-fast: false matrix: python-version: ['3.10', '3.11', '3.12', '3.13', '3.14'] steps: - name: Checkout FastAPI uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: repository: fastapi/fastapi persist-credentials: false - name: Checkout Pydantic uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: path: pydantic-latest persist-credentials: false - uses: astral-sh/setup-uv@c18668ad3cf93ea998bef934396af7bb5c839dc7 # v10.2.0 with: python-version: ${{ matrix.python-version }} - name: Install FastAPI dependencies run: | uv sync --locked --no-dev --group tests --extra all uv pip uninstall pydantic pydantic-core uv pip install --no-config -e ./pydantic-latest -e ./pydantic-latest/pydantic-core - name: List installed dependencies run: uv pip list - name: Run FastAPI tests run: PYTHONPATH=./docs_src uv run --no-project --no-sync pytest tests test-sqlmodel: name: Test SQLModel (main branch) on Python ${{ matrix.python-version }} if: contains(github.event.pull_request.labels.*.name, 'third-party-tests') runs-on: ubuntu-latest strategy: fail-fast: false matrix: python-version: ['3.10', '3.11', '3.12', '3.13', '3.14'] steps: - name: Checkout SQLModel uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: repository: fastapi/sqlmodel persist-credentials: false - name: Checkout Pydantic uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: path: pydantic-latest persist-credentials: false - uses: astral-sh/setup-uv@c18668ad3cf93ea998bef934396af7bb5c839dc7 # v10.2.0 with: python-version: ${{ matrix.python-version }} - name: Install SQLModel dependencies run: | uv sync --locked --no-dev --group tests uv pip uninstall pydantic pydantic-core uv pip install --no-config -e ./pydantic-latest -e ./pydantic-latest/pydantic-core - name: List installed dependencies run: uv pip list - run: mkdir coverage - name: Run SQLModel tests run: uv run --no-sync pytest tests test-beanie: name: Test Beanie (main branch) on Python ${{ matrix.python-version }} if: contains(github.event.pull_request.labels.*.name, 'third-party-tests') runs-on: ubuntu-latest strategy: fail-fast: false matrix: # Testing on a single version to avoid reaching Docker API limits: python-version: ['3.13'] steps: - name: Checkout Beanie uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: repository: BeanieODM/beanie persist-credentials: false - name: Checkout Pydantic uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: path: pydantic-latest persist-credentials: false - uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0 with: python-version: ${{ matrix.python-version }} - name: Start MongoDB uses: supercharge/mongodb-github-action@315db7fe45ac2880b7758f1933e6e5d59afd5e94 # 1.12.1 with: mongodb-version: '8.0' mongodb-replica-set: test-rs - name: Install Beanie dependencies run: | pip install .[test,ci] pip uninstall --yes pydantic pydantic-core pip install -e ./pydantic-latest -e ./pydantic-latest/pydantic-core - name: List installed dependencies run: pip list - name: Run Beanie tests run: pytest -v tests/ test-openapi-python-client: name: Test openapi-python-client (main branch) on Python ${{ matrix.python-version }} if: contains(github.event.pull_request.labels.*.name, 'third-party-tests') runs-on: ubuntu-latest strategy: fail-fast: false matrix: python-version: ['3.10', '3.11', '3.12', '3.13'] steps: - name: Checkout openapi-python-client uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: repository: openapi-generators/openapi-python-client persist-credentials: false - name: Checkout Pydantic uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: path: pydantic-latest persist-credentials: false - name: Set up PDM uses: pdm-project/setup-pdm@544d7237314ee09c256785bd360f6b30add38b37 # v4.6 with: python-version: ${{ matrix.python-version }} - name: Install openapi-python-client dependencies run: | pdm install --quiet pdm run python -m ensurepip pdm run python -m pip uninstall --yes pydantic pydantic-core pdm run python -m pip install -e ./pydantic-latest -e ./pydantic-latest/pydantic-core - name: List installed dependencies run: pdm list - name: Run openapi-python-client tests run: pdm test env: TASKIPY: true test-pandera: name: Test Pandera (main branch) on Python ${{ matrix.python-version }} if: contains(github.event.pull_request.labels.*.name, 'third-party-tests') runs-on: ubuntu-latest strategy: fail-fast: false matrix: python-version: ['3.10', '3.11', '3.12'] steps: - name: Checkout Pandera uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: repository: unionai-oss/pandera persist-credentials: false - name: Checkout Pydantic uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: path: pydantic-latest persist-credentials: false - name: Set up Python ${{ matrix.python-version }} uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0 with: python-version: ${{ matrix.python-version }} - name: Install Pandera dependencies run: | pip install uv uv sync --no-progress --extra pandas --extra fastapi --group dev --group testing --group docs uv pip uninstall --system pydantic pydantic-core uv pip install --no-config --system -e ./pydantic-latest - name: List installed dependencies run: uv pip list - name: Run Pandera tests # Pandera's CI uses nox sessions which encapsulate the logic to install a specific Pydantic version. # Instead, manually run pytest (we run core, pandas and FastAPI tests). Each test directory is run # in a separate process, as is done upstream (some tests depend on the pandas backends *not* being # registered, which happens when collecting the pandas tests): run: | uv run --no-sync pytest tests/base uv run --no-sync pytest tests/pandas uv run --no-sync pytest tests/fastapi test-odmantic: name: Test ODMantic (main branch) on Python ${{ matrix.python-version }} if: contains(github.event.pull_request.labels.*.name, 'third-party-tests') runs-on: ubuntu-latest strategy: fail-fast: false matrix: python-version: ['3.10', '3.11'] steps: - name: Checkout ODMantic # Not using actions/checkout, as the ODMantic repository has a stale gitlink entry # ('.mongodb-cluster-action', with no matching '.gitmodules' entry) that makes the # action's 'git submodule foreach' auth cleanup fail with exit code 128. run: git clone --depth=1 https://github.com/art049/odmantic.git . - name: Checkout Pydantic uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: path: pydantic-latest persist-credentials: false - name: Set up Python ${{ matrix.python-version }} uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0 with: python-version: ${{ matrix.python-version }} - name: Set up uv uses: astral-sh/setup-uv@c18668ad3cf93ea998bef934396af7bb5c839dc7 # v10.2.0 - name: Mongo service run: bash mongodb-cluster/run.sh env: MODE: standalone VERSION: '6' - name: Install ODMantic dependencies run: | uv sync --locked --no-dev --extra test uv pip uninstall pydantic pydantic-core uv pip install --no-config -e ./pydantic-latest -e ./pydantic-latest/pydantic-core - name: List installed dependencies run: uv pip list - name: Run ODMantic tests # Disabled tests, as per https://github.com/art049/odmantic/issues/512: run: uv run --no-sync pytest tests -k 'not test_custom_bson_serializable and not test_sync_custom_bson_serializable and not test_with_bson_serializer_override_builtin_bson' tests/ env: TEST_MONGO_URI: mongodb://localhost:27017/ TEST_MONGO_MODE: standalone test-polar: name: Test Polar (main branch) on Python ${{ matrix.python-version }} if: contains(github.event.pull_request.labels.*.name, 'third-party-tests') env: POLAR_ENV: testing POLAR_EMAIL_RENDERER_BINARY_PATH: ${{ github.workspace }}/server/emails/bin/react-email-pkg runs-on: ubuntu-latest strategy: fail-fast: false matrix: python-version: ['3.14'] services: postgres: image: postgres:15.1-bullseye env: POSTGRES_USER: polar POSTGRES_PASSWORD: polar POSTGRES_DB: polar_test POSTGRES_PORT: 5432 options: >- --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5 ports: - 5432:5432 redis: image: redis:7.4-alpine options: >- --health-cmd "redis-cli ping" --health-interval 10s --health-timeout 5s --health-retries 5 ports: - 6379:6379 minio: image: bitnamilegacy/minio:2024.5.28 ports: - 9000:9000 - 9001:9001 env: MINIO_ROOT_USER: polar MINIO_ROOT_PASSWORD: polarpolar options: >- --health-cmd "curl -I http://127.0.0.1:9000/minio/health/live" --health-interval 10s --health-timeout 5s --health-retries 5 steps: - name: Checkout polar uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: repository: polarsource/polar persist-credentials: false - name: 💿 MinIO Setup working-directory: ./server/.minio env: MINIO_HOST: 127.0.0.1 MINIO_ROOT_USER: polar MINIO_ROOT_PASSWORD: polarpolar ACCESS_KEY: polar-development SECRET_ACCESS_KEY: polar123456789 BUCKET_NAME: polar-s3 BUCKET_TESTING_NAME: testing-polar-s3 POLICY_FILE: policy.json run: bash github.sh - uses: pnpm/action-setup@ea17c68df8912ef543352723c149a84f56e3d413 # v6.1.0 with: package_json_file: server/emails/package.json - name: 📬 Setup Node.js environment for server/emails uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0 with: node-version-file: .nvmrc cache: 'pnpm' cache-dependency-path: 'server/emails/pnpm-lock.yaml' - name: 📬 Build server/emails working-directory: server/emails run: pnpm install --frozen-lockfile && pnpm build - name: Checkout Pydantic uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: path: pydantic-latest persist-credentials: false - name: Install uv uses: astral-sh/setup-uv@c18668ad3cf93ea998bef934396af7bb5c839dc7 # v10.2.0 - name: Set up Python ${{ matrix.python-version }} uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0 with: python-version: ${{ matrix.python-version }} - name: 🔧 uv install working-directory: ./server run: | uv sync --no-progress --dev uv pip uninstall pydantic uv pip install --no-config -e ./../pydantic-latest - name: List installed dependencies working-directory: ./server run: uv pip list - name: ⚗� alembic migrate working-directory: ./server run: uv run --no-sync task db_migrate - name: ⚗� alembic check working-directory: ./server run: uv run --no-sync alembic check - name: � Run polar tests (pytest) working-directory: ./server run: uv run --no-sync pytest -n auto --no-cov tests/ test-bentoml: name: Test BentoML (main branch) on Python ${{ matrix.python-version }} if: contains(github.event.pull_request.labels.*.name, 'third-party-tests') runs-on: ubuntu-latest strategy: fail-fast: false matrix: python-version: ['3.11', '3.12'] steps: - name: Checkout BentoML uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: repository: bentoml/BentoML persist-credentials: false - name: Checkout Pydantic uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: path: pydantic-latest persist-credentials: false # Note: BentoML workflow uses nox sessions which don't allow installing # the custom Pydantic version. Instead, we manually set up the env. - name: Set up PDM uses: pdm-project/setup-pdm@544d7237314ee09c256785bd360f6b30add38b37 # v4.6 with: python-version: ${{ matrix.python-version }} - name: Install BentoML dependencies run: | pdm sync -G grpc,io,testing --quiet pdm run python -m ensurepip pdm run python -m pip uninstall --yes pydantic pydantic-core pdm run python -m pip install -e ./pydantic-latest -e ./pydantic-latest/pydantic-core - name: List installed dependencies run: pdm list - name: Run BentoML tests run: pdm run pytest -n auto tests/unit env: BENTOML_DO_NOT_TRACK: True PYTEST_PLUGINS: bentoml.testing.pytest.plugin test-semantic-kernel: name: Test Semantic Kernel (main branch) on Python ${{ matrix.python-version }} if: contains(github.event.pull_request.labels.*.name, 'third-party-tests') runs-on: ubuntu-latest strategy: fail-fast: false matrix: python-version: ['3.10', '3.11', '3.12'] steps: - name: Checkout Semantic Kernel uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: repository: microsoft/semantic-kernel persist-credentials: false - name: Checkout Pydantic uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: path: pydantic-latest persist-credentials: false - name: Install uv uses: astral-sh/setup-uv@c18668ad3cf93ea998bef934396af7bb5c839dc7 # v10.2.0 with: python-version: ${{ matrix.python-version }} working-directory: python - name: Install Semantic Kernel dependencies working-directory: ./python run: | uv sync --no-progress --all-extras --dev --prerelease=if-necessary-or-explicit uv pip uninstall pydantic uv pip install --no-config -e ../pydantic-latest - name: List installed dependencies working-directory: ./python run: uv pip list - name: Run Semantic Kernel tests working-directory: ./python run: uv run --frozen --no-sync pytest ./tests/unit --ignore=tests/unit/processes/dapr_runtime test-langchain: name: Test LangChain (main branch) on Python ${{ matrix.python-version }} if: contains(github.event.pull_request.labels.*.name, 'third-party-tests') runs-on: ubuntu-latest strategy: fail-fast: false matrix: python-version: ['3.10', '3.11', '3.12', '3.13'] steps: - name: Checkout Langchain uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: repository: langchain-ai/langchain persist-credentials: false - name: Checkout Pydantic uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: path: pydantic-latest persist-credentials: false - name: Install uv uses: astral-sh/setup-uv@c18668ad3cf93ea998bef934396af7bb5c839dc7 # v10.2.0 with: python-version: ${{ matrix.python-version }} - name: Install LangChain dependencies run: | uv sync --no-progress --directory ./libs/core --group test uv pip uninstall --directory ./libs/core pydantic uv pip install --directory ./libs/core -e ../../pydantic-latest uv sync --no-progress --directory ./libs/langchain --group test uv pip uninstall --directory ./libs/langchain pydantic uv pip install --directory ./libs/langchain -e ../../pydantic-latest uv sync --no-progress --directory ./libs/langchain_v1 --group test uv pip uninstall --directory ./libs/langchain_v1 pydantic uv pip install --directory ./libs/langchain_v1 -e ../../pydantic-latest - name: List installed core dependencies run: uv pip list --directory ./libs/core - name: List installed LangChain v0.x dependencies run: uv pip list --directory ./libs/langchain - name: List installed LangChain v1.x dependencies run: uv pip list --directory ./libs/langchain_v1 - name: Run LangChain core tests working-directory: ./libs/core run: UV_NO_SYNC=1 make test - name: Run LangChain v0.x main tests working-directory: ./libs/langchain run: UV_NO_SYNC=1 make test - name: Run LangChain v1.x main tests working-directory: ./libs/langchain_v1 run: UV_NO_SYNC=1 make test test-dify: name: Test Dify (main branch) on Python ${{ matrix.python-version }} if: contains(github.event.pull_request.labels.*.name, 'third-party-tests') runs-on: ubuntu-latest strategy: matrix: python-version: ['3.12'] steps: - name: Checkout Dify uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: repository: langgenius/dify persist-credentials: false - name: Checkout Pydantic uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: path: pydantic-latest persist-credentials: false - name: Set up Python ${{ matrix.python-version }} uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0 with: python-version: ${{ matrix.python-version }} - name: Set up uv uses: astral-sh/setup-uv@c18668ad3cf93ea998bef934396af7bb5c839dc7 # v10.2.0 - name: Install Dify dependencies run: | uv sync --no-progress --directory api --dev uv pip --directory api uninstall pydantic pydantic-core uv pip --directory api install -e ../pydantic-latest -e ../pydantic-latest/pydantic-core - name: List installed dependencies run: uv pip --directory api list - name: Run Dify unit tests run: uv run --no-sync --directory api pytest tests/unit_tests/ test-cadwyn: name: Test Cadwyn (main branch) on Python ${{ matrix.python-version }} if: contains(github.event.pull_request.labels.*.name, 'third-party-tests') runs-on: ubuntu-latest strategy: fail-fast: false matrix: python-version: ['3.10', '3.11', '3.12', '3.13', '3.14'] steps: - name: Checkout Cadwyn uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: repository: zmievsa/cadwyn persist-credentials: false - name: Checkout Pydantic uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: path: pydantic-latest persist-credentials: false - uses: astral-sh/setup-uv@c18668ad3cf93ea998bef934396af7bb5c839dc7 # v10.2.0 with: python-version: ${{ matrix.python-version }} activate-environment: true - name: Install Cadwyn dependencies run: | uv sync --no-progress --dev --all-extras uv pip install --no-config -e ./pydantic-latest - name: List installed dependencies run: uv pip list - name: Run Cadwyn tests run: uv run --no-sync pytest tests docs_src test-pydantic-xml: name: Test pydantic-xml (main branch) on Python ${{ matrix.python-version }} if: contains(github.event.pull_request.labels.*.name, 'third-party-tests') runs-on: ubuntu-latest strategy: fail-fast: false matrix: python-version: ['3.10', '3.11', '3.12', '3.13'] steps: - name: Checkout pydantic-xml uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: repository: dapper91/pydantic-xml persist-credentials: false - name: Checkout Pydantic uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: path: pydantic-latest persist-credentials: false - uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0 with: python-version: ${{ matrix.python-version }} - name: Install pydantic-xml dependencies run: | python -m pip install --upgrade pip pip install poetry poetry install --no-root -E lxml pip uninstall pydantic pip install -e ./pydantic-latest/pydantic-core -e ./pydantic-latest - name: List installed dependencies run: pip list - name: Run pydantic-xml tests run: PYTHONPATH="$(pwd):$PYTHONPATH" poetry run pytest tests test-redis-om: name: Test Redis OM Python (main branch) on Python ${{ matrix.python-version }} if: contains(github.event.pull_request.labels.*.name, 'third-party-tests') runs-on: ubuntu-latest strategy: fail-fast: false matrix: python-version: ['3.10', '3.11', '3.12', '3.13'] services: redis: image: redis/redis-stack:latest # zizmor: ignore[unpinned-images] -- intentionally using latest for third-party compatibility testing ports: # Maps port 6379 on service container to the host - 6379:6379 # Set health checks to wait until redis has started options: >- --health-cmd "redis-cli ping" --health-interval 10s --health-timeout 5s --health-retries 5 env: INSTALL_DIR: ${{ github.workspace }}/redis steps: - name: Checkout Redis OM Python uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: repository: redis/redis-om-python persist-credentials: false - name: Checkout Pydantic uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: path: pydantic-latest persist-credentials: false - name: Install uv uses: astral-sh/setup-uv@c18668ad3cf93ea998bef934396af7bb5c839dc7 # v10.2.0 - name: Setup Python ${{ matrix.python-version }} uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0 with: python-version: ${{ matrix.python-version }} - name: Install dependencies run: | uv sync uv pip uninstall pydantic pydantic-core uv pip install --no-config -e ./pydantic-latest -e ./pydantic-latest/pydantic-core - name: Make sync version of library (redis_om) run: make sync - name: List installed dependencies run: uv pip list - name: Run Redis OM Python tests env: REDIS_OM_URL: 'redis://localhost:6379?decode_responses=True' run: | make test test-django-ninja: name: Test Django Ninja (main branch) on Python ${{ matrix.python-version }} if: contains(github.event.pull_request.labels.*.name, 'third-party-tests') runs-on: ubuntu-latest strategy: fail-fast: false matrix: python-version: ['3.10', '3.11', '3.12', '3.13'] steps: - name: Checkout Django Ninja uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: repository: vitalik/django-ninja persist-credentials: false - name: Checkout Pydantic uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: path: pydantic-latest persist-credentials: false - name: Set up Python uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0 with: python-version: ${{ matrix.python-version }} - name: Install Django Ninja dependencies run: pip install pytest pytest-asyncio pytest-django psycopg2-binary 'django~=5.2.7' ./pydantic-latest ./pydantic-latest/pydantic-core # For some reason, tests can't run properly if the pydantic sources are around: - run: rm -rd ./pydantic-latest - name: List installed dependencies run: pip list - name: Run Django Ninja tests # `test_all_fields` expects the `Decimal` JSON Schema `pattern`, which is no longer emitted by default since 2.14: run: pytest tests/ -k 'not test_all_fields' test-fastdepends: name: Test FastDepends (main branch) on Python ${{ matrix.python-version }} if: contains(github.event.pull_request.labels.*.name, 'third-party-tests') runs-on: ubuntu-latest strategy: fail-fast: false matrix: python-version: ['3.10', '3.11', '3.12', '3.13'] steps: - name: Checkout FastDepends uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: repository: Lancetnik/FastDepends persist-credentials: false - name: Checkout Pydantic uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: path: pydantic-latest persist-credentials: false - uses: astral-sh/setup-uv@c18668ad3cf93ea998bef934396af7bb5c839dc7 # v10.2.0 with: python-version: ${{ matrix.python-version }} - name: Install FastDepends dependencies run: | uv venv --python ${{ matrix.python-version }} uv sync --group test uv pip uninstall pydantic uv pip install --no-config -e ./pydantic-latest - name: List installed dependencies run: uv pip list - name: Run FastDepends tests run: uv run --no-sync pytest tests/ test-mcp-python-sdk: name: Test MCP Python SDK (main branch) on Python ${{ matrix.python-version }} if: contains(github.event.pull_request.labels.*.name, 'third-party-tests') runs-on: ubuntu-latest strategy: fail-fast: false matrix: python-version: ['3.10', '3.11', '3.12', '3.13', '3.14'] steps: - name: Checkout MCP Python SDK uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: repository: modelcontextprotocol/python-sdk persist-credentials: false - name: Checkout Pydantic uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: path: pydantic-latest persist-credentials: false - uses: astral-sh/setup-uv@c18668ad3cf93ea998bef934396af7bb5c839dc7 # v10.2.0 with: enable-cache: true python-version: ${{ matrix.python-version }} - name: Install MCP Python SDK dependencies run: | uv venv --python ${{ matrix.python-version }} uv sync --all-extras --python ${{ matrix.python-version }} uv pip uninstall pydantic uv pip install --no-config -e ./pydantic-latest - name: List installed dependencies run: uv pip list - name: Run MCP Python SDK tests shell: bash env: # tests/examples/test_stories_smoke.py is gated on this var; it spawns real # stdio + uvicorn subprocesses, so we don't run it for third-party tests. # test_modern_post_with_deeply_nested_body_is_parse_error_not_a_crash is somehow failing in third party tests: MCP_EXAMPLES_SMOKE: '0' run: uv run --frozen --no-sync pytest -n auto tests/ -k 'not test_modern_post_with_deeply_nested_body_is_parse_error_not_a_crash' test-fastmcp: name: Test FastMCP (main branch) on Python ${{ matrix.python-version }} if: contains(github.event.pull_request.labels.*.name, 'third-party-tests') runs-on: ubuntu-latest strategy: fail-fast: false matrix: python-version: ['3.10', '3.13'] steps: - name: Checkout FastMCP uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: repository: PrefectHQ/fastmcp persist-credentials: false - name: Checkout Pydantic uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: path: pydantic-latest persist-credentials: false - uses: astral-sh/setup-uv@c18668ad3cf93ea998bef934396af7bb5c839dc7 # v10.2.0 with: enable-cache: true python-version: ${{ matrix.python-version }} - name: Install FastMCP dependencies run: | uv sync --no-progress uv pip uninstall pydantic uv pip install --no-config -e ./pydantic-latest - name: List installed dependencies run: uv pip list # unit tests only (see https://github.com/PrefectHQ/fastmcp/blob/main/.github/actions/run-pytest/action.yml): - name: Run FastMCP tests # The workflow-level FORCE_COLOR makes Rich emit ANSI codes in captured output, # breaking FastMCP's CLI tests (which assert on plain text/JSON output): run: | unset FORCE_COLOR uv run --frozen --no-sync pytest \ --inline-snapshot=disable \ --timeout=5 \ --durations=50 \ -m "not integration and not client_process and not subprocess_heavy and not conformance" \ tests/ pydantic-pydantic-e28e879/.github/workflows/update-pydantic-people.yml000066400000000000000000000006751526274674700262440ustar00rootroot00000000000000name: Pydantic people update on: schedule: - cron: '0 12 1 * *' workflow_dispatch: {} permissions: contents: write pull-requests: write jobs: pydantic-people: runs-on: ubuntu-latest steps: - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false - uses: ./.github/actions/people with: token: ${{ secrets.GITHUB_TOKEN }} pydantic-pydantic-e28e879/.github/workflows/upload-previews.yml000066400000000000000000000026011526274674700250040ustar00rootroot00000000000000name: Upload previews on: # zizmor: ignore[dangerous-triggers] -- workflow_run is used safely here; no code checkout occurs workflow_run: workflows: [CI] types: [completed] permissions: statuses: write jobs: upload-previews: if: ${{ github.event.workflow_run.conclusion == 'success' }} runs-on: ubuntu-latest steps: # DO NOT run actions/checkout here, for security reasons # For details, refer to https://securitylab.github.com/research/github-actions-preventing-pwn-requests/ - uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0 with: python-version: '3.10' - run: pip install smokeshow - uses: dawidd6/action-download-artifact@d63b86af1b34672e53c440b1b83979861906bad7 # v24 with: workflow: ci.yml commit: ${{ github.event.workflow_run.head_sha }} - run: smokeshow upload coverage-html env: SMOKESHOW_GITHUB_STATUS_DESCRIPTION: Coverage {coverage-percentage} # 5 is set here while V2 is in development and coverage is far from complete SMOKESHOW_GITHUB_COVERAGE_THRESHOLD: 91 SMOKESHOW_GITHUB_CONTEXT: coverage SMOKESHOW_GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} SMOKESHOW_GITHUB_PR_HEAD_SHA: ${{ github.event.workflow_run.head_sha }} SMOKESHOW_AUTH_KEY: ${{ secrets.SMOKESHOW_AUTH_KEY }} pydantic-pydantic-e28e879/.github/zizmor.yml000066400000000000000000000001311526274674700211470ustar00rootroot00000000000000rules: secrets-outside-env: disable: true superfluous-actions: disable: true pydantic-pydantic-e28e879/.gitignore000066400000000000000000000013531526274674700175310ustar00rootroot00000000000000# Virtual environments env/ env3*/ venv/ .venv/ __pypackages__/ # IDEs and editors .idea/ .vscode/ # Package distribution and build files *.egg-info/ dist/ /build/ _build/ # Python bytecode and cache files *.py[cod] .cache/ /.ghtopdep_cache/ .hypothesis .mypy_cache/ .pytest_cache/ /.ruff_cache/ # Benchmark and test files /benchmarks/*.json /tests/benchmarks/*.json /htmlcov/ /codecov.sh /coverage.lcov .coverage /test*.py run_mypy_on_file.py # Documentation files /docs/changelog.md /docs/*.whl /docs/theme/mkdocs_run_deps.html /site/ /site.zip # Project-specific files pydantic/*.c pydantic/*.so /fastapi/ .mypy-configs/ # Other files and folders .python-version .DS_Store .auto-format /sandbox/ /worktrees/ # Rust build files /target/ pydantic-pydantic-e28e879/.hyperlint/000077500000000000000000000000001526274674700176335ustar00rootroot00000000000000pydantic-pydantic-e28e879/.hyperlint/.vale.ini000066400000000000000000000002431526274674700213400ustar00rootroot00000000000000StylesPath = styles MinAlertLevel = suggestion Vocab = hyperlint SkippedScopes = script, style, pre, figure, code, code-block [*] BasedOnStyles = Vale, hyperlint pydantic-pydantic-e28e879/.hyperlint/style_guide_test.md000066400000000000000000000002541526274674700235320ustar00rootroot00000000000000 # This ia a test file it will flag errors like on pydantic. It won't flag on validators. but it won't flag errors on SDK or SDKs or APIs anymore. This is is an issue. pydantic-pydantic-e28e879/.hyperlint/styles/000077500000000000000000000000001526274674700211565ustar00rootroot00000000000000pydantic-pydantic-e28e879/.hyperlint/styles/config/000077500000000000000000000000001526274674700224235ustar00rootroot00000000000000pydantic-pydantic-e28e879/.hyperlint/styles/config/vocabularies/000077500000000000000000000000001526274674700251025ustar00rootroot00000000000000pydantic-pydantic-e28e879/.hyperlint/styles/config/vocabularies/hyperlint/000077500000000000000000000000001526274674700271205ustar00rootroot00000000000000pydantic-pydantic-e28e879/.hyperlint/styles/config/vocabularies/hyperlint/accept.txt000066400000000000000000000001551526274674700311210ustar00rootroot00000000000000validator Pydantic validators namespace Hyperlint preprocess tokenization tokenizer tzdata API APIs SDKs SDK pydantic-pydantic-e28e879/.hyperlint/styles/hyperlint/000077500000000000000000000000001526274674700231745ustar00rootroot00000000000000pydantic-pydantic-e28e879/.hyperlint/styles/hyperlint/repeatedWords.yml000066400000000000000000000002031526274674700265220ustar00rootroot00000000000000extends: repetition message: '''%s'' is repeated, did you mean to repeat this word?' level: error alpha: true tokens: - '[^\s]+' pydantic-pydantic-e28e879/.markdownlint.yaml000066400000000000000000000016271526274674700212200ustar00rootroot00000000000000# See rule aliases: https://github.com/DavidAnson/markdownlint#rules--aliases line-length: false ul-style: style: asterisk emphasis-style: style: asterisk # need to indent with 4 spaces to render properly ul-indent: indent: 4 # H1 headings are automatically inserted by mkdocs first-line-h1: false # Allow same heading name if the parent is different no-duplicate-heading: siblings_only: true # Allow inline HTML to support line breaks etc. no-inline-html: false # Need to disable in order to support PyMdown Tabbed extension and admonitions # See: https://facelessuser.github.io/pymdown-extensions/extensions/tabbed/ # See: https://squidfunk.github.io/mkdocs-material/reference/admonitions/ code-block-style: false # Disabled in order to support references to API reference-links-images: false # Anchors via attribute lists are not detected, let mkdocs handle anchor validation link-fragments: false pydantic-pydantic-e28e879/.pre-commit-config.yaml000066400000000000000000000024161526274674700220230ustar00rootroot00000000000000repos: - repo: https://github.com/pre-commit/pre-commit-hooks rev: v6.0.0 hooks: - id: no-commit-to-branch # prevent direct commits to main branch - id: check-yaml args: ['--unsafe'] - id: check-toml - id: end-of-file-fixer - id: trailing-whitespace - repo: https://github.com/codespell-project/codespell rev: v2.4.1 hooks: - id: codespell additional_dependencies: - tomli exclude: '^uv\.lock$' - repo: https://github.com/DavidAnson/markdownlint-cli2 rev: v0.18.1 hooks: - id: markdownlint-cli2 - repo: https://github.com/google/yamlfmt rev: v0.21.0 hooks: - id: yamlfmt - repo: https://github.com/zizmorcore/zizmor-pre-commit rev: v1.23.1 hooks: - id: zizmor - repo: local hooks: - id: lint name: Lint entry: make lint-python types: [python] language: system pass_filenames: false - id: lint rust name: Lint Rust entry: make lint-rust types: [rust] language: system pass_filenames: false - id: typecheck name: Typecheck entry: uv run pyright pydantic types: [python] language: system pass_filenames: false pydantic-pydantic-e28e879/.yamlfmt.yaml000066400000000000000000000002341526274674700201510ustar00rootroot00000000000000exclude: - docs/plugins/people.yml formatter: type: basic retain_line_breaks_single: true scan_folded_as_literal: true force_quote_style: single pydantic-pydantic-e28e879/CITATION.cff000066400000000000000000000024031526274674700174300ustar00rootroot00000000000000cff-version: 1.2.0 title: Pydantic Validation message: 'If you use this software, please cite it as below.' type: software authors: - family-names: Colvin given-names: Samuel - family-names: Jolibois given-names: Eric - family-names: Ramezani given-names: Hasan - family-names: Garcia Badaracco given-names: Adrian - family-names: Dorsey given-names: Terrence - family-names: Montague given-names: David - family-names: Matveenko given-names: Serge - family-names: Trylesinski given-names: Marcelo - family-names: Runkle given-names: Sydney - family-names: Hewitt given-names: David - family-names: Hall given-names: Alex - family-names: Plot given-names: Victorien repository-code: 'https://github.com/pydantic/pydantic' url: 'https://pydantic.dev/docs/validation/latest/get-started/' abstract: >- Pydantic Validation is the most widely used data validation library for Python. Fast and extensible, Pydantic Validation plays nicely with your linters/IDE/brain. Define how data should be in pure, canonical Python 3.10+; validate it with Pydantic Validation. keywords: - python - validation - parsing - json-schema - hints - typing license: MIT version: v2.14.1 date-released: 2026-10-11 pydantic-pydantic-e28e879/CONTRIBUTING.md000077700000000000000000000000001526274674700237442docs/contributing.mdustar00rootroot00000000000000pydantic-pydantic-e28e879/HISTORY.md000066400000000000000000012337601526274674700172360ustar00rootroot00000000000000 ## v2.14.1 (2026-10-11) [GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.14.1) ### What's Changed #### Performance * Avoid Python tuple allocation during model fields validation by @Viicos in [#13955](https://github.com/pydantic/pydantic/pull/13955) * Avoid unnecessary extra dict allocation in model validation by @Viicos in [#13956](https://github.com/pydantic/pydantic/pull/13956) #### Fixes * Fix `arguments-v3` schema with variadic keywords by @Viicos in [#13954](https://github.com/pydantic/pydantic/pull/13954) * Fix `TypeError` on `ForwardRef` on Python 3.10.0 by @Viicos in [#13964](https://github.com/pydantic/pydantic/pull/13964) * Support `closed` and `extra_items` via inheritance in `TypedDict` by @Viicos in [#13967](https://github.com/pydantic/pydantic/pull/13967) * Enforce the `max_digits` whole-digits limit in the Python `Decimal` validator by @Viicos in [#13972](https://github.com/pydantic/pydantic/pull/13972) * Reject out-of-range int inputs for `timedelta` by @Viicos in [#13973](https://github.com/pydantic/pydantic/pull/13973) * Support named tuples in `Sequence` validation by @Viicos in [#13978](https://github.com/pydantic/pydantic/pull/13978) ## v2.14.0 (2026-10-08) [GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.14.0) ### What's Changed The highlights of the v2.14 release are available in the [blog post](https://pydantic.dev/articles/pydantic-v2-14-release). Several minor changes (considered non-breaking changes according to our [versioning policy](https://pydantic.dev/docs/validation/2.14/get-started/version-policy/#pydantic-v2)) are also included in this release. Make sure to look into them before upgrading. This release drops support for Python 3.9 and adds support for Python 3.15. #### New Features * Add support for `multiple_of` constraint in `fraction` and `timedelta` core schemas by @Viicos in [#13873](https://github.com/pydantic/pydantic/pull/13873) * Add `__namespace__` parameter to `create_model()` by @Viicos in [#13895](https://github.com/pydantic/pydantic/pull/13895) #### Changes * Add an `ordered-dict` core schema by @Viicos in [#13796](https://github.com/pydantic/pydantic/pull/13796) * Add a `counter` core schema by @Viicos in [#13824](https://github.com/pydantic/pydantic/pull/13824) * Do not mutate `model_config` attribute by @Viicos in [#13825](https://github.com/pydantic/pydantic/pull/13825) * Reject newlines in `NameEmail` validation by @Viicos in [#13897](https://github.com/pydantic/pydantic/pull/13897) #### Fixes * Call enum constructors in both validation modes by @Viicos in [#13792](https://github.com/pydantic/pydantic/pull/13792) * Fix documentation examples not raising and remove unused `string_sub_type` unused error code by @Viicos in [#13821](https://github.com/pydantic/pydantic/pull/13821) * Catch `OverflowError` during `ByteSize` validation by @Viicos in [#13850](https://github.com/pydantic/pydantic/pull/13850) * Require `multiple_of` constraints to be positive by @Viicos in [#13862](https://github.com/pydantic/pydantic/pull/13862) * Always pop field name and model type stacks during schema generation by @saquibjawedbit in [#13859](https://github.com/pydantic/pydantic/pull/13859) * Handle `TypeError` gracefully during docstring extraction by @Viicos in [#13874](https://github.com/pydantic/pydantic/pull/13874) * Fix config propagation of stdlib dataclasses and `TypedDict`s in JSON Schema by @Viicos in [#13891](https://github.com/pydantic/pydantic/pull/13891) * Don't apply `ser_json_timedelta` to all datetime types in serialization inference by @Viicos in [#13892](https://github.com/pydantic/pydantic/pull/13892) * Encode JSON Schema defaults with a consistent configuration by @Viicos in [#13893](https://github.com/pydantic/pydantic/pull/13893) * Propagate `init` and `kw_only=False` from `Field()` to stdlib dataclass fields by @Viicos in [#13898](https://github.com/pydantic/pydantic/pull/13898) * Respect propagated extra config in the JSON Schema of stdlib dataclasses by @Viicos in [#13899](https://github.com/pydantic/pydantic/pull/13899) * Handle OS errors during `ZoneInfo` validation by @Viicos in [#13912](https://github.com/pydantic/pydantic/pull/13912) * Handle exceptions during `Decimal` validation by @Viicos in [#13940](https://github.com/pydantic/pydantic/pull/13940) * Rebuild incomplete types during serialization inference by @Viicos in [#13922](https://github.com/pydantic/pydantic/pull/13922) * Reject large exponents in `Fraction` validation by @Viicos in [#13944](https://github.com/pydantic/pydantic/pull/13944) * Avoid validating URL prefix multiple times in multi host URLs by @Viicos in [#13945](https://github.com/pydantic/pydantic/pull/13945) ### New Contributors * @saquibjawedbit made their first contribution in [#13859](https://github.com/pydantic/pydantic/pull/13859) ## v2.14.0b2 (2026-09-09) [GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.14.0b2) ### What's Changed This pre-release adds full support for Python 3.15 specific features, such as support for [`frozendict`](https://docs.python.org/3.15/library/stdtypes.html#frozendict), making use of [`TypeForm`](https://docs.python.org/3.15/library/typing.html#typing.TypeForm) and stabilizing the [`MISSING` sentinel](https://pydantic.dev/docs/validation/latest/concepts/types/#missing-sentinel) type. #### New Features * Allow any `CoreSchema` to be used as serialization by @Viicos in [#13680](https://github.com/pydantic/pydantic/pull/13680) * Add support for [`frozendict`](https://docs.python.org/3.15/library/stdtypes.html#frozendict) type by @Viicos in [#13634](https://github.com/pydantic/pydantic/pull/13634) * Allow `dict`, `frozendict` and `frozenset` as `defaultdict` default factories by @Viicos in [#13623](https://github.com/pydantic/pydantic/pull/13623) * Add support for [`TypeForm`](https://docs.python.org/3.15/library/typing.html#typing.TypeForm) by @Viicos in [#13459](https://github.com/pydantic/pydantic/pull/13459). This adds support for static type checking where a type form is expected. For instance, type adapters: ```python from pydantic import TypeAdapter ta = TypeAdapter(int | str) assert_type(ta.validate_python(1), int | str) ``` * Add support for lazy imports by @Viicos in [#13776](https://github.com/pydantic/pydantic/pull/13776) * Stabilize `MISSING` sentinel by @Viicos in [#13782](https://github.com/pydantic/pydantic/pull/13782). The [`MISSING` sentinel](https://pydantic.dev/docs/validation/dev/concepts/types/#missing-sentinel) is no longer experimental, and can be imported as `from pydantic import MISSING`. #### Changes * Take `ser_json_temporal` into account when generating JSON Schema by @shashiKundur1 in [#13665](https://github.com/pydantic/pydantic/pull/13665) * Use the field name in `__signature__` when `validate_by_alias` is`False` by @jaideeppyne in [#13730](https://github.com/pydantic/pydantic/pull/13730) * Add a `deque` core schema by @Viicos in [#13757](https://github.com/pydantic/pydantic/pull/13757) * Do not mention `MISSING` as a valid value in validation errors by @Viicos in [#13779](https://github.com/pydantic/pydantic/pull/13779) * Refactor `Decimal` JSON Schema `pattern` constraint by @Viicos in [#13672](https://github.com/pydantic/pydantic/pull/13672) #### Performance * Refactor type references logic by @Viicos in [#13643](https://github.com/pydantic/pydantic/pull/13643) * Improve performance of `GenerateSchema.generate_schema()` dispatching by @Viicos in [#13614](https://github.com/pydantic/pydantic/pull/13614) * Move schema gathering logic to `pydantic-core` by @Viicos in [#13725](https://github.com/pydantic/pydantic/pull/13725) * Improve performance of `FieldInfo` construction by @Viicos in [#13726](https://github.com/pydantic/pydantic/pull/13726) #### Fixes * Fix support for callable discriminators with PEP 695 type aliases by @Viicos in [#13604](https://github.com/pydantic/pydantic/pull/13604) * Preserve `re.Pattern` instance for compiled patterns in the experimental pipeline by @soma0212 in [#13611](https://github.com/pydantic/pydantic/pull/13611) * Fix missing GC traversal on some `pydantic-core` struct fields by @Viicos in [#13624](https://github.com/pydantic/pydantic/pull/13624) * Fix missing GC traversal in `pydantic-core` for `GeneralFieldsSerializer` by @Viicos in [#13629](https://github.com/pydantic/pydantic/pull/13629) * Fix JSON schema discriminator mapping keys for `bool` discriminators by @remi-fongaufier in [#13632](https://github.com/pydantic/pydantic/pull/13632) * Fix application of other constraints in the pipeline API by @Viicos in [#13659](https://github.com/pydantic/pydantic/pull/13659) * Support bare `None` annotation for discriminated unions by @Viicos in [#13667](https://github.com/pydantic/pydantic/pull/13667) * Respect runtime alias validation configuration when wrap validators are present by @Viicos in [#13668](https://github.com/pydantic/pydantic/pull/13668) * Exclude computed fields with `exclude_if` from JSON Schema required fields by @Bishwas-py in [#13563](https://github.com/pydantic/pydantic/pull/13563) * Use config of `TypeAdapter` in JSON Schema generation by @Viicos in [#13676](https://github.com/pydantic/pydantic/pull/13676) * Support `populate_by_name` in `@validate_call` by @Viicos in [#13691](https://github.com/pydantic/pydantic/pull/13691) * Allow `None` to serialize against secret fields by @Viicos in [#13699](https://github.com/pydantic/pydantic/pull/13699) * Do not drop include/exclude if serializer wasn't called by @Viicos in [#13702](https://github.com/pydantic/pydantic/pull/13702) * Don't apply serialization temporal formats to validation JSON schemas by @MLuc24 in [#13711](https://github.com/pydantic/pydantic/pull/13711) * Reflect `str_min_length` and `str_max_length` config in the JSON schema by @MLuc24 in [#13714](https://github.com/pydantic/pydantic/pull/13714) * Treat a class attribute set to `None` as existing when assigning with `extra='allow'` by @Kropiunig in [#13718](https://github.com/pydantic/pydantic/pull/13718) * Use the field name in validation JSON schemas when `validate_by_alias` is `False` by @MLuc24 in [#13717](https://github.com/pydantic/pydantic/pull/13717) * Do not rely on normalization to validate decimals by @Viicos in [#13742](https://github.com/pydantic/pydantic/pull/13742) * Handle any exception when trying to compute JSON Schema default by @Viicos in [#13741](https://github.com/pydantic/pydantic/pull/13741) * Fix Mypy plugin crash with import cycle by @Viicos in [#13767](https://github.com/pydantic/pydantic/pull/13767) * Fix supported constraints for types of `datetime` module by @Viicos in [#13768](https://github.com/pydantic/pydantic/pull/13768) * Fix inconsistencies between constraints and core schemas allowed values by @Viicos in [#13772](https://github.com/pydantic/pydantic/pull/13772) * Allow `self` to be used as a parameter with `@validate_call` by @Viicos in [#13773](https://github.com/pydantic/pydantic/pull/13773) * Fix race conditions in freethreaded build by @Viicos in [#13785](https://github.com/pydantic/pydantic/pull/13785) ### New Contributors * @soma0212 made their first contribution in [#13611](https://github.com/pydantic/pydantic/pull/13611) * @remi-fongaufier made their first contribution in [#13632](https://github.com/pydantic/pydantic/pull/13632) * @shashiKundur1 made their first contribution in [#13665](https://github.com/pydantic/pydantic/pull/13665) * @MLuc24 made their first contribution in [#13711](https://github.com/pydantic/pydantic/pull/13711) * @jaideeppyne made their first contribution in [#13730](https://github.com/pydantic/pydantic/pull/13730) ## v2.14.0b1 (2026-08-06) [GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.14.0b1) ### What's Changed This is the first beta release of the 2.14 version, providing some new features and performance improvements for model builds. This release is the first to provide initial support for Python 3.15, although not all 3.15 specific features are supported yet. #### Packaging * Add agent skills by @Viicos in [#13193](https://github.com/pydantic/pydantic/pull/13193) #### New Features * Add support for `EllipsisType` by @Viicos in [#13484](https://github.com/pydantic/pydantic/pull/13484) * Add initial support for Python 3.15 by @Viicos in [#13587](https://github.com/pydantic/pydantic/pull/13587) #### Changes * Populate `__slots__` from generic class during parameterization by @Viicos in [#13243](https://github.com/pydantic/pydantic/pull/13243) * Avoid using explicit `Any` in the Mypy plugin by @Viicos in [#13196](https://github.com/pydantic/pydantic/pull/13196) * Support `Fraction` type in `pydantic-core` by @Viicos in [#13339](https://github.com/pydantic/pydantic/pull/13339) * Use constant-time comparison for `SecretStr` and `SecretBytes` types by @Viicos in [#13518](https://github.com/pydantic/pydantic/pull/13518) * Fix application of constraints in pipeline API by @Viicos in [#13516](https://github.com/pydantic/pydantic/pull/13516) * Optimize type lookup logic in core schema generation by @Viicos in [#13573](https://github.com/pydantic/pydantic/pull/13573) * Add a `named-tuple` core schema by @Viicos in [#13505](https://github.com/pydantic/pydantic/pull/13505) * Raise explicit `TypeError` on invalid `index_key` serialization wrap handler by @Viicos in [#13506](https://github.com/pydantic/pydantic/pull/13506) #### Performance * Cache `ModelPrivateAttr.default_factory_takes_validated_data` property by @Viicos in [#13390](https://github.com/pydantic/pydantic/pull/13390) * Introduce micro-optimizations for model class building by @dmontagu in [#13540](https://github.com/pydantic/pydantic/pull/13540) * Try `Format.VALUE` before `FORWARDREF` when evaluating annotations in `ModelMetaclass` by @Viicos in [#13584](https://github.com/pydantic/pydantic/pull/13584) * Optimize type lookup logic in core schema generation by @Viicos in [#13573](https://github.com/pydantic/pydantic/pull/13573) * Avoid exponential core schema traversal in `gather_schemas_for_cleaning()` by @dmontagu in [#13523](https://github.com/pydantic/pydantic/pull/13523) #### Fixes * Validate falsy `AliasGenerator` outputs by @jiyujie2006 in [#13248](https://github.com/pydantic/pydantic/pull/13248) * Do not resolve recursive `'definitions-ref'` schemas in schema cleaning by @Viicos in [#13276](https://github.com/pydantic/pydantic/pull/13276) * Fix missing `max_length` check on lazy iteration validation by @davidhewitt in [#13278](https://github.com/pydantic/pydantic/pull/13278) * Handle missing errors with default factories taking validated data by @Viicos in [#13291](https://github.com/pydantic/pydantic/pull/13291) * Recognise `WindowsPath` as a schema type by @davidhewitt in [#13326](https://github.com/pydantic/pydantic/pull/13326) * Fix application of nested operators in pipeline API by @Viicos in [#13363](https://github.com/pydantic/pydantic/pull/13363) * Fix type variable substitution in `__pydantic_extra__` by @Viicos in [#13391](https://github.com/pydantic/pydantic/pull/13391) * Fix `json_schema_extra` dict being dropped when a callable follows it in `Annotated` by @Srivatsa03 in [#13374](https://github.com/pydantic/pydantic/pull/13374) * Skip `RootModel.__init__()` in Mypy plugin by @Viicos in [#13441](https://github.com/pydantic/pydantic/pull/13441) * Defer placeholders in Mypy plugin by @Viicos in [#13442](https://github.com/pydantic/pydantic/pull/13442) * Do not ignore timezone offset when using `'seconds'/'milliseconds'` `temporal_mode` by @Viicos in [#13436](https://github.com/pydantic/pydantic/pull/13436) * Make model rebuilding logic thread safe by @Viicos in [#13438](https://github.com/pydantic/pydantic/pull/13438) * Fix `Interval` zero bounds silently dropped in pipeline API by @pctablet505 in [#13452](https://github.com/pydantic/pydantic/pull/13452) * Sync `RootModel.model_dump()` signature with its parent by @Viicos in [#13456](https://github.com/pydantic/pydantic/pull/13456) * Return `NotImplemented` from URL ordering comparisons with foreign types by @chinesepowered in [#13495](https://github.com/pydantic/pydantic/pull/13495) * Don't error on unhashable generic arguments on generic Pydantic models by @Viicos in [#13515](https://github.com/pydantic/pydantic/pull/13515) * Fix population of `SerializationInfo.exclude_computed_fields` by @Viicos in [#13560](https://github.com/pydantic/pydantic/pull/13560) * Fix serialization of `ValidateAs` by @Viicos in [#13487](https://github.com/pydantic/pydantic/pull/13487) * Allow reuse of validators when plugins are set by @Viicos in [#13535](https://github.com/pydantic/pydantic/pull/13535) * Avoid double-wrapping polymorphism trampoline for model serializers by @davidhewitt in [#13552](https://github.com/pydantic/pydantic/pull/13552) * Add `AllowInfNan` type to the field metadata gathering by @mberdyshev in [#13586](https://github.com/pydantic/pydantic/pull/13586) ### New Contributors * @jiyujie2006 made their first contribution in [#13248](https://github.com/pydantic/pydantic/pull/13248) * @pctablet505 made their first contribution in [#13452](https://github.com/pydantic/pydantic/pull/13452) * @LuShadowX made their first contribution in [#13503](https://github.com/pydantic/pydantic/pull/13503) * @mberdyshev made their first contribution in [#13586](https://github.com/pydantic/pydantic/pull/13586) ## v2.14.0a1 (2026-05-22) [GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.14.0a1) ### What's Changed #### Packaging * Add PyEmscripten platform tag support by @Viicos, @greateggsgreg and @sinaatalay in [#13199](https://github.com/pydantic/pydantic/pull/13199): `pydantic-core` now has a 3.14 wheel published with the [`pyemscripten_2026_0` platform tag](https://pyodide.org/en/latest/development/abi/314.html). Note that this wheel can only be used with [Pyodide 314.0](https://github.com/pyodide/pyodide/issues/6233) and greater, still in development. It is recommended to wait for the final 314.0 release (and for Pydantic to publish a new wheel in a future 2.14 release). #### Changes * Accept `None` in `MultiHostUrl.build()`'s `hosts` parameter by @Viicos in [#13068](https://github.com/pydantic/pydantic/pull/13068) * Drop support for Python 3.9 by @Viicos in [#13070](https://github.com/pydantic/pydantic/pull/13070) * Remove support for `eval_type_backport()` by @Viicos in [#13133](https://github.com/pydantic/pydantic/pull/13133) * Only deepcopy non-updated fields in `model_copy()` by @connorcarpenter15 in [#13087](https://github.com/pydantic/pydantic/pull/13087) #### Fixes * Add Mypy plugin workaround for dynamic models defined in functions by @ilevkivskyi in [#13177](https://github.com/pydantic/pydantic/pull/13177) * Fallback to `create_model()` overload definition when `__base__` is set to a type variable in the Mypy plugin by @cyphercodes in [#13146](https://github.com/pydantic/pydantic/pull/13146) ### New Contributors * @ilevkivskyi made their first contribution in [#13177](https://github.com/pydantic/pydantic/pull/13177) * @cyphercodes made their first contribution in [#13146](https://github.com/pydantic/pydantic/pull/13146) * @connorcarpenter15 made their first contribution in [#13087](https://github.com/pydantic/pydantic/pull/13087) ## v2.13.4 (2026-05-06) [GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.13.4) ### What's Changed #### Packaging * Bump libc from 0.2.155 to 0.2.185 by @Viicos in [#13109](https://github.com/pydantic/pydantic/pull/13109) * Adapt `pydantic-core` linker flags on macOS by @washingtoneg and @Viicos in [#13147](https://github.com/pydantic/pydantic/pull/13147) #### Fixes * Preserve `RootModel` core metadata by @Viicos in [#13129](https://github.com/pydantic/pydantic/pull/13129) ## v2.13.3 (2026-04-20) [GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.13.3) ### What's Changed #### Fixes * Handle `AttributeError` subclasses with `from_attributes` by @Viicos in [#13096](https://github.com/pydantic/pydantic/pull/13096) ## v2.13.2 (2026-04-17) [GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.13.2) ### What's Changed #### Fixes * Fix `ValidationInfo.field_name` missing with `model_validate_json()` by @Viicos in [#13084](https://github.com/pydantic/pydantic/pull/13084) ## v2.13.1 (2026-04-15) [GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.13.1) ### What's Changed #### Fixes * Fix `ValidationInfo.data` missing with `model_validate_json()` by @davidhewitt in [#13079](https://github.com/pydantic/pydantic/pull/13079) ## v2.13.0 (2026-04-13) [GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.13.0) The highlights of the v2.13 release are available in the [blog post](https://pydantic.dev/articles/pydantic-v2-13-release). Several minor changes (considered non-breaking changes according to our [versioning policy](https://pydantic.dev/docs/validation/2.13/get-started/version-policy/#pydantic-v2)) are also included in this release. Make sure to look into them before upgrading. This release contains the updated `pydantic.v1` namespace, matching version 1.10.26 which includes support for Python 3.14. ### What's Changed See the beta releases for all changes sinces 2.12. #### New Features * Allow default factories of private attributes to take validated model data by @Viicos in [#13013](https://github.com/pydantic/pydantic/pull/13013) #### Changes * Warn when serializing fixed length tuples with too few items by @arvindsaripalli in [#13016](https://github.com/pydantic/pydantic/pull/13016) #### Fixes * Change type of `Any` when synthesizing `_build_sources` for `BaseSettings.__init__()` signature in the mypy plugin by @Viicos in [#13049](https://github.com/pydantic/pydantic/pull/13049) * Fix model equality when using runtime `extra` configuration by @Viicos in [#13062](https://github.com/pydantic/pydantic/pull/13062) #### Packaging * Add zizmor for GitHub Actions workflow linting by @Viicos in [#13039](https://github.com/pydantic/pydantic/pull/13039) * Update jiter to v0.14.0 to fix a segmentation fault on musl Linux by @Viicos in [#13064](https://github.com/pydantic/pydantic/pull/13064) ### New Contributors * @arvindsaripalli made their first contribution in [#13016](https://github.com/pydantic/pydantic/pull/13016) ## v2.13.0b3 (2026-03-31) [GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.13.0b3) ### What's Changed #### New Features * Add `ascii_only` option to `StringConstraints` by @ai-man-codes in [#12907](https://github.com/pydantic/pydantic/pull/12907) * Support `exclude_if` in computed fields by @andresliszt in [#12748](https://github.com/pydantic/pydantic/pull/12748) * Push down constraints in unions involving `MISSING` sentinel by @Viicos in [#12908](https://github.com/pydantic/pydantic/pull/12908) #### Changes * Track extra fields set after init in `model_fields_set` by @navalprakhar in [#12817](https://github.com/pydantic/pydantic/pull/12817) * Do not include annotations that are not part of named tuple fields by @galuszkak in [#12951](https://github.com/pydantic/pydantic/pull/12951) * No longer fall back to trying all union members when the variant selected by discriminator fails to serialize by @navalprakhar in [#12825](https://github.com/pydantic/pydantic/pull/12825) #### Fixes * Support discriminator metadata outside union type alias by @Viicos in [#12785](https://github.com/pydantic/pydantic/pull/12785) * Respect `extras_schema` when only `extra_fields_behavior` is set on the config in JSON Schema generation for typed dictionaries by @Viicos in [#12810](https://github.com/pydantic/pydantic/pull/12810) * Ensure `__pydantic_private__` is set in `model_construct()` with user-defined `model_post_init()` by @nightcityblade in [#12816](https://github.com/pydantic/pydantic/pull/12816) * Handle all schema generation errors in `InstanceOf` by @Viicos in [#12705](https://github.com/pydantic/pydantic/pull/12705) * Allow dynamic models created with `create_model()` to be used as annotations in the Mypy plugin by @Br1an67 in [#12879](https://github.com/pydantic/pydantic/pull/12879) * Check for `PlaceholderNode` in Mypy plugin by @Viicos in [#12929](https://github.com/pydantic/pydantic/pull/12929) * Try other branches in smart union in case of omit errors by @mikeedjones in [#12758](https://github.com/pydantic/pydantic/pull/12758) * Patch unset attributes with `MISSING` during model serialization with `exclude_unset` by @davidhewitt in [#12905](https://github.com/pydantic/pydantic/pull/12905) * Ensure custom `__init__()` is called when using `model_validate_strings()` by @siewcapital in [#12897](https://github.com/pydantic/pydantic/pull/12897) #### Packaging * Add riscv64 build target for manylinux by @boosterl in [#12723](https://github.com/pydantic/pydantic/pull/12723) ### New Contributors * @kelsonbrito50 made their first contribution in [#12860](https://github.com/pydantic/pydantic/pull/12860) * @boosterl made their first contribution in [#12723](https://github.com/pydantic/pydantic/pull/12723) * @adityagiri3600 made their first contribution in [#12868](https://github.com/pydantic/pydantic/pull/12868) * @navalprakhar made their first contribution in [#12817](https://github.com/pydantic/pydantic/pull/12817) * @Br1an67 made their first contribution in [#12879](https://github.com/pydantic/pydantic/pull/12879) * @rmorshea made their first contribution in [#12910](https://github.com/pydantic/pydantic/pull/12910) * @N3XT3R1337 made their first contribution in [#12922](https://github.com/pydantic/pydantic/pull/12922) * @ai-man-codes made their first contribution in [#12907](https://github.com/pydantic/pydantic/pull/12907) * @Yume05-dev made their first contribution in [#12953](https://github.com/pydantic/pydantic/pull/12953) * @galuszkak made their first contribution in [#12951](https://github.com/pydantic/pydantic/pull/12951) * @siewcapital made their first contribution in [#12897](https://github.com/pydantic/pydantic/pull/12897) ## v2.13.0b2 (2026-02-24) [GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.13.0b2) ### What's Changed #### Fixes * Fix backported V1 namespace by @Viicos in [#12855](https://github.com/pydantic/pydantic/pull/12855) * Allow any type form to be used in `validate_as()` by @bledden in [#12846](https://github.com/pydantic/pydantic/pull/12846) * Fix walrus operator precedence in `UrlConstraints.__get_pydantic_core_schema__()` by @bysiber in [#12826](https://github.com/pydantic/pydantic/pull/12826) ### New Contributors * @bledden made their first contribution in [#12846](https://github.com/pydantic/pydantic/pull/12846) * @bysiber made their first contribution in [#12827](https://github.com/pydantic/pydantic/pull/12827) ## v2.13.0b1 (2026-02-23) [GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.13.0b1) This is the first beta release of the 2.13 version, mainly providing bug fixes and performance improvements for validation and serialization. Notable changes include: * Add a new `polymorphic_serialization` option, solving issues with `serialize_as_any` introduced in 2.12. * Latest V1.10.26 release under the `pydantic.v1` namespace. This version includes support for Python 3.14. * The [`pydantic-core`](https://github.com/pydantic/pydantic-core/) repository was merged inside the main `pydantic` one. ### What's Changed #### New Features * Add `polymorphic_serialization` option by @davidhewitt in [#12518](https://github.com/pydantic/pydantic/pull/12518) * Support Root models with `Literal` root types as discriminator field types by @YassinNouh21 in [#12680](https://github.com/pydantic/pydantic/pull/12680) #### Changes * Migrate `pydantic-core` CI by @Viicos in [#12752](https://github.com/pydantic/pydantic/pull/12752) * Import `pydantic-core` into pydantic by @davidhewitt in [#12481](https://github.com/pydantic/pydantic/pull/12481) * Backport V1 changes up to v1.10.26 by @Viicos in [#12663](https://github.com/pydantic/pydantic/pull/12663) * Use the `complex()` constructor unconditionally when validating `complex` Python data by @tanmaymunjal in [#12498](https://github.com/pydantic/pydantic/pull/12498) * Add support for three-tuple input for `Decimal` by @tanmaymunjal in [#12500](https://github.com/pydantic/pydantic/pull/12500) * Align `@field_serializer` logic with `@field_validator` by @Viicos in [#12577](https://github.com/pydantic/pydantic/pull/12577) * Make `PydanticUserError` a `RuntimeError` instead of a `TypeError` by @poliakovva in [#12579](https://github.com/pydantic/pydantic/pull/12579) * Remove redundant serialization attempts in nested unions by @davidhewitt in [#12604](https://github.com/pydantic/pydantic/pull/12604) * Copy `root` value when making root model shallow copies by @YassinNouh21 in [#12679](https://github.com/pydantic/pydantic/pull/12679) * Ensure deterministic JSON schema defaults by sorting sets by @drshvik in [#12760](https://github.com/pydantic/pydantic/pull/12760) #### Performance * Refactor `DecoratorInfos.build()` implementation by @Viicos in [#12536](https://github.com/pydantic/pydantic/pull/12536) * Cache compiled regex in `pydantic-core` by @Viicos in [#12549](https://github.com/pydantic/pydantic/pull/12549) * Optimize creation of `Literal` validators by @davidhewitt in [#12569](https://github.com/pydantic/pydantic/pull/12569) * Optimize implementation of `LookupKey` by @davidhewitt in [#12571](https://github.com/pydantic/pydantic/pull/12571) * Use python strings for field names by @davidhewitt in [#12631](https://github.com/pydantic/pydantic/pull/12631) * Optimize datetime formatting code by @davidhewitt in [#12626](https://github.com/pydantic/pydantic/pull/12626) * Validate JSON model data by iteration by @davidhewitt in [#12550](https://github.com/pydantic/pydantic/pull/12550) * Optimize annotations evaluation of Pydantic models by @Viicos in [#12681](https://github.com/pydantic/pydantic/pull/12681) * Optimize `FieldInfo._copy()` by @Viicos in [#12727](https://github.com/pydantic/pydantic/pull/12727) #### Fixes * Fix `FieldInfo` rebuilding when parameterizing generic models with an `Annotated` type by @Viicos in [#12463](https://github.com/pydantic/pydantic/pull/12463) * Fix nested model schema deduplication in JSON schema generation by @marwan-alloreview in [#12494](https://github.com/pydantic/pydantic/pull/12494) * Fix `InitVar` being ignored when using with the `pydantic.Field()` function by @Viicos in [#12495](https://github.com/pydantic/pydantic/pull/12495) * Fix support for enums with `NamedTuple` as values by @Viicos in [#12506](https://github.com/pydantic/pydantic/pull/12506) * Do not delete mock validator/serializer in `rebuild_dataclass()` by @Viicos in [#12513](https://github.com/pydantic/pydantic/pull/12513) * Require test suite to pass with free threading, switch back to global generic types cache by @davidhewitt in [#12537](https://github.com/pydantic/pydantic/pull/12537) * Refactor `__pydantic_extra__` annotation handling by @Viicos in [#12563](https://github.com/pydantic/pydantic/pull/12563) * Do not add claim of UUID "safety" provision by @davidhewitt in [#12567](https://github.com/pydantic/pydantic/pull/12567) * Use Python hash to perform lookup in tagged union serializer by @davidhewitt in [#12594](https://github.com/pydantic/pydantic/pull/12594) * Do not emit serialization warning `MISSING` sentinel is present in a nested model by @Viicos in [#12635](https://github.com/pydantic/pydantic/pull/12635) * Do not eagerly evaluate annotations in signature logic by @Viicos in [#12660](https://github.com/pydantic/pydantic/pull/12660) * Fix serialization of typed dict unions when `exclude_none` is set by @davidhewitt in [#12677](https://github.com/pydantic/pydantic/pull/12677) * Do not reuse prebuilt serializers/validators on rebuilds by @lmmx in [#12689](https://github.com/pydantic/pydantic/pull/12689) * Fix type annotation of `field_definitions` in `create_model()` by @lehmann-hqs in [#12734](https://github.com/pydantic/pydantic/pull/12734) * Fix incorrect dataclass constructor signature when overriding class `kw_only` with `Field()` by @jfadia in [#12741](https://github.com/pydantic/pydantic/pull/12741) * Use `typing.Union` when replacing types under Python 3.14 by @Viicos in [#12733](https://github.com/pydantic/pydantic/pull/12733) * Improve ImportString error when internal imports fail by @tsembp in [#12740](https://github.com/pydantic/pydantic/pull/12740) * Fix serializing complex numbers with negative zero imaginary part by @lhnwrk in [#12770](https://github.com/pydantic/pydantic/pull/12770) * Preserve custom docstrings on stdlib dataclasses in JSON schema by @nightcityblade in [#12815](https://github.com/pydantic/pydantic/pull/12815) #### Packaging * Bump Rust url dependency from 2.5.4 to 2.5.7 in `pydantic-core` by @dependabot[bot] in [#12508](https://github.com/pydantic/pydantic/pull/12508) * Bump Rust minimum version to 1.88, use edition 2024 by @davidhewitt and @Viicos in [#12551](https://github.com/pydantic/pydantic/pull/12551) and [#12752](https://github.com/pydantic/pydantic/pull/12752) * Bump PyO3 to 0.28, jiter to 0.13 by @davidhewitt in [#12767](https://github.com/pydantic/pydantic/pull/12767) ### New Contributors * @marwan-alloreview made their first contribution in [#12494](https://github.com/pydantic/pydantic/pull/12494) * @tanmaymunjal made their first contribution in [#12498](https://github.com/pydantic/pydantic/pull/12498) * @poliakovva made their first contribution in [#12579](https://github.com/pydantic/pydantic/pull/12579) * @lehmann-hqs made their first contribution in [#12734](https://github.com/pydantic/pydantic/pull/12734) * @jfadia made their first contribution in [#12741](https://github.com/pydantic/pydantic/pull/12741) * @tsembp made their first contribution in [#12740](https://github.com/pydantic/pydantic/pull/12740) * @drshvik made their first contribution in [#12760](https://github.com/pydantic/pydantic/pull/12760) * @lhnwrk made their first contribution in [#12770](https://github.com/pydantic/pydantic/pull/12770) * @nightcityblade made their first contribution in [#12815](https://github.com/pydantic/pydantic/pull/12811) ## v2.12.5 (2025-11-26) [GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.12.5) This is the fifth 2.12 patch release, addressing an issue with the `MISSING` sentinel and providing several documentation improvements. The next 2.13 minor release will be published in a couple weeks, and will include a new *polymorphic serialization* feature addressing the remaining unexpected changes to the *serialize as any* behavior. * Fix pickle error when using `model_construct()` on a model with `MISSING` as a default value by @ornariece in [#12522](https://github.com/pydantic/pydantic/pull/12522). * Several updates to the documentation by @Viicos. ## v2.12.4 (2025-11-05) [GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.12.4) This is the fourth 2.12 patch release, fixing more regressions, and reverting a change in the `build()` method of the [`AnyUrl` and Dsn types](https://pydantic.dev/docs/validation/latest/api/pydantic/networks/). This patch release also fixes an issue with the serialization of IP address types, when `serialize_as_any` is used. The next patch release will try to address the remaining issues with *serialize as any* behavior by introducing a new *polymorphic serialization* feature, that should be used in most cases in place of *serialize as any*. * Fix issue with forward references in parent `TypedDict` classes by @Viicos in [#12427](https://github.com/pydantic/pydantic/pull/12427). This issue is only relevant on Python 3.14 and greater. * Exclude fields with `exclude_if` from JSON Schema required fields by @Viicos in [#12430](https://github.com/pydantic/pydantic/pull/12430) * Revert URL percent-encoding of credentials in the `build()` method of the [`AnyUrl` and Dsn types](https://pydantic.dev/docs/validation/latest/api/pydantic/networks/) by @davidhewitt in [pydantic-core#1833](https://github.com/pydantic/pydantic-core/pull/1833). This was initially considered as a bugfix, but caused regressions and as such was fully reverted. The next release will include an opt-in option to percent-encode components of the URL. * Add type inference for IP address types by @davidhewitt in [pydantic-core#1868](https://github.com/pydantic/pydantic-core/pull/1868). The 2.12 changes to the `serialize_as_any` behavior made it so that IP address types could not properly serialize to JSON. * Avoid getting default values from defaultdict by @davidhewitt in [pydantic-core#1853](https://github.com/pydantic/pydantic-core/pull/1853). This fixes a subtle regression in the validation behavior of the [`collections.defaultdict`](https://docs.python.org/3/library/collections.html#collections.defaultdict) type. * Fix issue with field serializers on nested typed dictionaries by @davidhewitt in [pydantic-core#1879](https://github.com/pydantic/pydantic-core/pull/1879). * Add more `pydantic-core` builds for the three-threaded version of Python 3.14 by @davidhewitt in [pydantic-core#1864](https://github.com/pydantic/pydantic-core/pull/1864). ## v2.12.3 (2025-10-17) [GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.12.3) ### What's Changed This is the third 2.12 patch release, fixing issues related to the `FieldInfo` class, and reverting a change to the supported [*after* model validator](https://pydantic.dev/docs/validation/latest/concepts/validators/#model-validators) function signatures. * Raise a warning when an invalid after model validator function signature is raised by @Viicos in [#12414](https://github.com/pydantic/pydantic/pull/12414). Starting in 2.12.0, using class methods for *after* model validators raised an error, but the error wasn't raised concistently. We decided to emit a deprecation warning instead. * Add [`FieldInfo.asdict()`](https://pydantic.dev/docs/validation/latest/api/pydantic/fields/#pydantic.fields.FieldInfo.asdict) method, improve documentation around `FieldInfo` by @Viicos in [#12411](https://github.com/pydantic/pydantic/pull/12411). This also add back support for mutations on `FieldInfo` classes, that are reused as `Annotated` metadata. **However**, note that this is still *not* a supported pattern. Instead, please refer to the [added example](https://pydantic.dev/docs/validation/latest/examples/dynamic_models/) in the documentation. The [blog post](https://pydantic.dev/articles/pydantic-v2-12-release#changes) section on changes was also updated to document the changes related to `serialize_as_any`. ## v2.12.2 (2025-10-14) [GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.12.2) ### What's Changed #### Fixes * Release a new `pydantic-core` version, as a corrupted CPython 3.10 `manylinux2014_aarch64` wheel got uploaded ([pydantic-core#1843](https://github.com/pydantic/pydantic-core/pull/1843)). * Fix issue with recursive generic models with a parent model class by @Viicos in [#12398](https://github.com/pydantic/pydantic/pull/12398) ## v2.12.1 (2025-10-13) [GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.12.1) ### What's Changed This is the first 2.12 patch release, addressing most (but not all yet) regressions from the initial 2.12.0 release. #### Fixes * Do not evaluate annotations when inspecting validators and serializers by @Viicos in [#12355](https://github.com/pydantic/pydantic/pull/12355) * Make sure `None` is converted as `NoneType` in Python 3.14 by @Viicos in [#12370](https://github.com/pydantic/pydantic/pull/12370) * Backport V1 runtime warning when using Python 3.14 by @Viicos in [#12367](https://github.com/pydantic/pydantic/pull/12367) * Fix error message for invalid validator signatures by @Viicos in [#12366](https://github.com/pydantic/pydantic/pull/12366) * Populate field name in `ValidationInfo` for validation of default value by @Viicos in [pydantic-core#1826](https://github.com/pydantic/pydantic-core/pull/1826) * Encode credentials in `MultiHostUrl` builder by @willswire in [pydantic-core#1829](https://github.com/pydantic/pydantic-core/pull/1829) * Respect field serializers when using `serialize_as_any` serialization flag by @davidhewitt in [pydantic-core#1829](https://github.com/pydantic/pydantic-core/pull/1829) * Fix various `RootModel` serialization issues by @davidhewitt in [pydantic-core#1836](https://github.com/pydantic/pydantic-core/pull/1836) ### New Contributors * @willswire made their first contribution in [pydantic-core#1829](https://github.com/pydantic/pydantic-core/pull/1829) ## v2.12.0 (2025-10-07) [GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.12.0) This is the final 2.12 release. It features the work of 20 external contributors and provides useful new features, along with initial Python 3.14 support. Several minor changes (considered non-breaking changes according to our [versioning policy](https://pydantic.dev/docs/validation/2.12/get-started/version-policy/#pydantic-v2)) are also included in this release. Make sure to look into them before upgrading. **Note that Pydantic V1 is not compatible with Python 3.14 and greater**. ### What's Changed See the beta releases for all changes sinces 2.11. #### New Features * Add `extra` parameter to the validate functions by @anvilpete in [#12233](https://github.com/pydantic/pydantic/pull/12233) * Add `exclude_computed_fields` serialization option by @Viicos in [#12334](https://github.com/pydantic/pydantic/pull/12334) * Add `preverse_empty_path` URL options by @Viicos in [#12336](https://github.com/pydantic/pydantic/pull/12336) * Add `union_format` parameter to JSON Schema generation by @Viicos in [#12147](https://github.com/pydantic/pydantic/pull/12147) * Add `__qualname__` parameter for `create_model` by @Atry in [#12001](https://github.com/pydantic/pydantic/pull/12001) #### Fixes * Do not try to infer name from lambda definitions in pipelines API by @Viicos in [#12289](https://github.com/pydantic/pydantic/pull/12289) * Use proper namespace for functions in `TypeAdapter` by @Viicos in [#12324](https://github.com/pydantic/pydantic/pull/12324) * Use `Any` for context type annotation in `TypeAdapter` by @inducer in [#12279](https://github.com/pydantic/pydantic/pull/12279) * Expose `FieldInfo` in `pydantic.fields.__all__` by @Viicos in [#12339](https://github.com/pydantic/pydantic/pull/12339) * Respect `validation_alias` in `@validate_call` by @Viicos in [#12340](https://github.com/pydantic/pydantic/pull/12340) * Use `Any` as context annotation in plugin API by @Viicos in [#12341](https://github.com/pydantic/pydantic/pull/12341) * Use proper `stacklevel` in warnings when possible by @Viicos in [#12342](https://github.com/pydantic/pydantic/pull/12342) #### Packaging * Update V1 copy to v1.10.24 by @Viicos in [#12338](https://github.com/pydantic/pydantic/pull/12338) ### New Contributors * @anvilpete made their first contribution in [#12233](https://github.com/pydantic/pydantic/pull/12233) * @JonathanWindell made their first contribution in [#12327](https://github.com/pydantic/pydantic/pull/12327) * @inducer made their first contribution in [#12279](https://github.com/pydantic/pydantic/pull/12279) * @Atry made their first contribution in [#12001](https://github.com/pydantic/pydantic/pull/12001) ## v2.12.0b1 (2025-10-03) [GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.12.0b1) This is the first beta release of the upcoming 2.12 release. ### What's Changed #### New Features * Add support for `exclude_if` at the field level by @andresliszt in [#12141](https://github.com/pydantic/pydantic/pull/12141) * Add `ValidateAs` annotation helper by @Viicos in [#11942](https://github.com/pydantic/pydantic/pull/11942) * Add configuration options for validation and JSON serialization of temporal types by @ollz272 in [#12068](https://github.com/pydantic/pydantic/pull/12068) * Add support for PEP 728 by @Viicos in [#12179](https://github.com/pydantic/pydantic/pull/12179) * Add field name in serialization error by @NicolasPllr1 in [pydantic-core#1799](https://github.com/pydantic/pydantic-core/pull/1799) * Add option to preserve empty URL paths by @davidhewitt in [pydantic-core#1789](https://github.com/pydantic/pydantic-core/pull/1789) #### Changes * Raise error if an incompatible `pydantic-core` version is installed by @Viicos in [#12196](https://github.com/pydantic/pydantic/pull/12196) * Remove runtime warning for experimental features by @Viicos in [#12265](https://github.com/pydantic/pydantic/pull/12265) * Warn if registering virtual subclasses on Pydantic models by @Viicos in [#11669](https://github.com/pydantic/pydantic/pull/11669) #### Fixes * Fix `__getattr__()` behavior on Pydantic models when a property raised an `AttributeError` and extra values are present by @raspuchin in [#12106](https://github.com/pydantic/pydantic/pull/12106) * Add test to prevent regression with Pydantic models used as annotated metadata by @Viicos in [#12133](https://github.com/pydantic/pydantic/pull/12133) * Allow to use property setters on Pydantic dataclasses with `validate_assignment` set by @Viicos in [#12173](https://github.com/pydantic/pydantic/pull/12173) * Fix mypy v2 plugin for upcoming mypy release by @cdce8p in [#12209](https://github.com/pydantic/pydantic/pull/12209) * Respect custom title in functions JSON Schema by @Viicos in [#11892](https://github.com/pydantic/pydantic/pull/11892) * Fix `ImportString` JSON serialization for objects with a `name` attribute by @chr1sj0nes in [#12219](https://github.com/pydantic/pydantic/pull/12219) * Do not error on fields overridden by methods in the mypy plugin by @Viicos in [#12290](https://github.com/pydantic/pydantic/pull/12290) #### Packaging * Bump `pydantic-core` to v2.40.1 by @Viicos in [#12314](https://github.com/pydantic/pydantic/pull/12314) ### New Contributors * @raspuchin made their first contribution in [#12106](https://github.com/pydantic/pydantic/pull/12106) * @chr1sj0nes made their first contribution in [#12219](https://github.com/pydantic/pydantic/pull/12219) ## v2.12.0a1 (2025-07-26) [GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.12.0a1) This is the first alpha release of the upcoming 2.12 release, which adds initial support for Python 3.14. ### What's Changed #### New Features * Add `__pydantic_on_complete__()` hook that is called once model is fully ready to be used by @DouweM in [#11762](https://github.com/pydantic/pydantic/pull/11762) * Add initial support for Python 3.14 by @Viicos in [#11991](https://github.com/pydantic/pydantic/pull/11991) * Add regex patterns to JSON schema for `Decimal` type by @Dima-Bulavenko in [#11987](https://github.com/pydantic/pydantic/pull/11987) * Add support for `doc` attribute on dataclass fields by @Viicos in [#12077](https://github.com/pydantic/pydantic/pull/12077) * Add experimental `MISSING` sentinel by @Viicos in [#11883](https://github.com/pydantic/pydantic/pull/11883) #### Changes * Allow config and bases to be specified together in `create_model()` by @Viicos in [#11714](https://github.com/pydantic/pydantic/pull/11714) * Move some field logic out of the `GenerateSchema` class by @Viicos in [#11733](https://github.com/pydantic/pydantic/pull/11733) * Always make use of `inspect.getsourcelines()` for docstring extraction on Python 3.13 and greater by @Viicos in [#11829](https://github.com/pydantic/pydantic/pull/11829) * Only support the latest Mypy version by @Viicos in [#11832](https://github.com/pydantic/pydantic/pull/11832) * Do not implicitly convert after model validators to class methods by @Viicos in [#11957](https://github.com/pydantic/pydantic/pull/11957) * Refactor `FieldInfo` creation implementation by @Viicos in [#11898](https://github.com/pydantic/pydantic/pull/11898) * Make `Secret` covariant by @bluenote10 in [#12008](https://github.com/pydantic/pydantic/pull/12008) * Emit warning when field-specific metadata is used in invalid contexts by @Viicos in [#12028](https://github.com/pydantic/pydantic/pull/12028) #### Fixes * Properly fetch plain serializer function when serializing default value in JSON Schema by @Viicos in [#11721](https://github.com/pydantic/pydantic/pull/11721) * Remove generics cache workaround by @Viicos in [#11755](https://github.com/pydantic/pydantic/pull/11755) * Remove coercion of decimal constraints by @Viicos in [#11772](https://github.com/pydantic/pydantic/pull/11772) * Fix crash when expanding root type in the mypy plugin by @Viicos in [#11735](https://github.com/pydantic/pydantic/pull/11735) * Only mark model as complete once all fields are complete by @DouweM in [#11759](https://github.com/pydantic/pydantic/pull/11759) * Do not provide `field_name` in validator core schemas by @DouweM in [#11761](https://github.com/pydantic/pydantic/pull/11761) * Fix issue with recursive generic models by @Viicos in [#11775](https://github.com/pydantic/pydantic/pull/11775) * Fix qualified name comparison of private attributes during namespace inspection by @karta9821 in [#11803](https://github.com/pydantic/pydantic/pull/11803) * Make sure Pydantic dataclasses with slots and `validate_assignment` can be unpickled by @Viicos in [#11769](https://github.com/pydantic/pydantic/pull/11769) * Traverse `function-before` schemas during schema gathering by @Viicos in [#11801](https://github.com/pydantic/pydantic/pull/11801) * Fix check for stdlib dataclasses by @Viicos in [#11822](https://github.com/pydantic/pydantic/pull/11822) * Check if `FieldInfo` is complete after applying type variable map by @Viicos in [#11855](https://github.com/pydantic/pydantic/pull/11855) * Do not delete mock validator/serializer in `model_rebuild()` by @Viicos in [#11890](https://github.com/pydantic/pydantic/pull/11890) * Rebuild dataclass fields before schema generation by @Viicos in [#11949](https://github.com/pydantic/pydantic/pull/11949) * Always store the original field assignment on `FieldInfo` by @Viicos in [#11946](https://github.com/pydantic/pydantic/pull/11946) * Do not use deprecated methods as default field values by @Viicos in [#11914](https://github.com/pydantic/pydantic/pull/11914) * Allow callable discriminator to be applied on PEP 695 type aliases by @Viicos in [#11941](https://github.com/pydantic/pydantic/pull/11941) * Suppress core schema generation warning when using `SkipValidation` by @ygsh0816 in [#12002](https://github.com/pydantic/pydantic/pull/12002) * Do not emit typechecking error for invalid `Field()` default with `validate_default` set to `True` by @Viicos in [#11988](https://github.com/pydantic/pydantic/pull/11988) * Refactor logic to support Pydantic's `Field()` function in dataclasses by @Viicos in [#12051](https://github.com/pydantic/pydantic/pull/12051) #### Packaging * Update project metadata to use PEP 639 by @Viicos in [#11694](https://github.com/pydantic/pydantic/pull/11694) * Bump `mkdocs-llmstxt` to v0.2.0 by @Viicos in [#11725](https://github.com/pydantic/pydantic/pull/11725) * Bump `pydantic-core` to v2.35.1 by @Viicos in [#11963](https://github.com/pydantic/pydantic/pull/11963) * Bump dawidd6/action-download-artifact from 10 to 11 by @dependabot[bot] in [#12033](https://github.com/pydantic/pydantic/pull/12033) * Bump astral-sh/setup-uv from 5 to 6 by @dependabot[bot] in [#11826](https://github.com/pydantic/pydantic/pull/11826) * Update mypy to 1.17.0 by @Viicos in [#12076](https://github.com/pydantic/pydantic/pull/12076) ### New Contributors * @parth-paradkar made their first contribution in [#11695](https://github.com/pydantic/pydantic/pull/11695) * @dqkqd made their first contribution in [#11739](https://github.com/pydantic/pydantic/pull/11739) * @fhightower made their first contribution in [#11722](https://github.com/pydantic/pydantic/pull/11722) * @gbaian10 made their first contribution in [#11766](https://github.com/pydantic/pydantic/pull/11766) * @DouweM made their first contribution in [#11759](https://github.com/pydantic/pydantic/pull/11759) * @bowenliang123 made their first contribution in [#11719](https://github.com/pydantic/pydantic/pull/11719) * @rawwar made their first contribution in [#11799](https://github.com/pydantic/pydantic/pull/11799) * @karta9821 made their first contribution in [#11803](https://github.com/pydantic/pydantic/pull/11803) * @jinnovation made their first contribution in [#11834](https://github.com/pydantic/pydantic/pull/11834) * @zmievsa made their first contribution in [#11861](https://github.com/pydantic/pydantic/pull/11861) * @Otto-AA made their first contribution in [#11860](https://github.com/pydantic/pydantic/pull/11860) * @ygsh0816 made their first contribution in [#12002](https://github.com/pydantic/pydantic/pull/12002) * @lukland made their first contribution in [#12015](https://github.com/pydantic/pydantic/pull/12015) * @Dima-Bulavenko made their first contribution in [#11987](https://github.com/pydantic/pydantic/pull/11987) * @GSemikozov made their first contribution in [#12050](https://github.com/pydantic/pydantic/pull/12050) * @hannah-heywa made their first contribution in [#12082](https://github.com/pydantic/pydantic/pull/12082) ## v2.11.10 (2025-10-04) [GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.11.10) ### What's Changed #### Fixes * Backport v1.10.24 changes by @Viicos ## v2.11.9 (2025-09-13) [GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.11.9) ### What's Changed #### Fixes * Backport v1.10.23 changes by @Viicos ## v2.11.8 (2025-09-13) [GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.11.8) ### What's Changed #### Fixes * Fix mypy plugin for mypy 1.18 by @cdce8p in [#12209](https://github.com/pydantic/pydantic/pull/12209) ## v2.11.7 (2025-06-14) [GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.11.7) ### What's Changed #### Fixes * Copy `FieldInfo` instance if necessary during `FieldInfo` build by @Viicos in [#11898](https://github.com/pydantic/pydantic/pull/11898) ## v2.11.6 (2025-06-13) [GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.11.6) ### What's Changed #### Fixes * Rebuild dataclass fields before schema generation by @Viicos in [#11949](https://github.com/pydantic/pydantic/pull/11949) * Always store the original field assignment on `FieldInfo` by @Viicos in [#11946](https://github.com/pydantic/pydantic/pull/11946) ## v2.11.5 (2025-05-22) [GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.11.5) ### What's Changed #### Fixes * Check if `FieldInfo` is complete after applying type variable map by @Viicos in [#11855](https://github.com/pydantic/pydantic/pull/11855) * Do not delete mock validator/serializer in `model_rebuild()` by @Viicos in [#11890](https://github.com/pydantic/pydantic/pull/11890) * Do not duplicate metadata on model rebuild by @Viicos in [#11902](https://github.com/pydantic/pydantic/pull/11902) ## v2.11.4 (2025-04-29) [GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.11.4) ### What's Changed #### Changes * Allow config and bases to be specified together in `create_model()` by @Viicos in [#11714](https://github.com/pydantic/pydantic/pull/11714). This change was backported as it was previously possible (although not meant to be supported) to provide `model_config` as a field, which would make it possible to provide both configuration and bases. #### Fixes * Remove generics cache workaround by @Viicos in [#11755](https://github.com/pydantic/pydantic/pull/11755) * Remove coercion of decimal constraints by @Viicos in [#11772](https://github.com/pydantic/pydantic/pull/11772) * Fix crash when expanding root type in the mypy plugin by @Viicos in [#11735](https://github.com/pydantic/pydantic/pull/11735) * Fix issue with recursive generic models by @Viicos in [#11775](https://github.com/pydantic/pydantic/pull/11775) * Traverse `function-before` schemas during schema gathering by @Viicos in [#11801](https://github.com/pydantic/pydantic/pull/11801) #### Packaging * Bump `mkdocs-llmstxt` to v0.2.0 by @Viicos in [#11725](https://github.com/pydantic/pydantic/pull/11725) ## v2.11.3 (2025-04-08) [GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.11.3) ### What's Changed #### Fixes * Preserve field description when rebuilding model fields by @Viicos in [#11698](https://github.com/pydantic/pydantic/pull/11698) #### Packaging * Update V1 copy to v1.10.21 by @Viicos in [#11706](https://github.com/pydantic/pydantic/pull/11706) ## v2.11.2 (2025-04-03) [GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.11.2) ### What's Changed #### Fixes * Bump `pydantic-core` to v2.33.1 by @Viicos in [#11678](https://github.com/pydantic/pydantic/pull/11678) * Make sure `__pydantic_private__` exists before setting private attributes by @Viicos in [#11666](https://github.com/pydantic/pydantic/pull/11666) * Do not override `FieldInfo._complete` when using field from parent class by @Viicos in [#11668](https://github.com/pydantic/pydantic/pull/11668) * Provide the available definitions when applying discriminated unions by @Viicos in [#11670](https://github.com/pydantic/pydantic/pull/11670) * Do not expand root type in the mypy plugin for variables by @Viicos in [#11676](https://github.com/pydantic/pydantic/pull/11676) * Mention the attribute name in model fields deprecation message by @Viicos in [#11674](https://github.com/pydantic/pydantic/pull/11674) * Properly validate parameterized mappings by @Viicos in [#11658](https://github.com/pydantic/pydantic/pull/11658) ## v2.11.1 (2025-03-28) [GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.11.1) ### What's Changed #### Fixes * Do not override `'definitions-ref'` schemas containing serialization schemas or metadata by @Viicos in [#11644](https://github.com/pydantic/pydantic/pull/11644) ## v2.11.0 (2025-03-27) [GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.11.0) ### What's Changed Pydantic v2.11 is a version strongly focused on build time performance of Pydantic models (and core schema generation in general). See the [blog post](https://pydantic.dev/articles/pydantic-v2-11-release) for more details. #### New Features * Add `encoded_string()` method to the URL types by @YassinNouh21 in [#11580](https://github.com/pydantic/pydantic/pull/11580) * Add support for `defer_build` with `@validate_call` decorator by @Viicos in [#11584](https://github.com/pydantic/pydantic/pull/11584) * Allow `@with_config` decorator to be used with keyword arguments by @Viicos in [#11608](https://github.com/pydantic/pydantic/pull/11608) * Simplify customization of default value inclusion in JSON Schema generation by @Viicos in [#11634](https://github.com/pydantic/pydantic/pull/11634) * Add `generate_arguments_schema()` function by @Viicos in [#11572](https://github.com/pydantic/pydantic/pull/11572) #### Fixes * Allow generic typed dictionaries to be used for unpacked variadic keyword parameters by @Viicos in [#11571](https://github.com/pydantic/pydantic/pull/11571) * Fix runtime error when computing model string representation involving cached properties and self-referenced models by @Viicos in [#11579](https://github.com/pydantic/pydantic/pull/11579) * Preserve other steps when using the ellipsis in the pipeline API by @Viicos in [#11626](https://github.com/pydantic/pydantic/pull/11626) * Fix deferred discriminator application logic by @Viicos in [#11591](https://github.com/pydantic/pydantic/pull/11591) #### Packaging * Bump `pydantic-core` to v2.33.0 by @Viicos in [#11631](https://github.com/pydantic/pydantic/pull/11631) ### New Contributors * @cmenon12 made their first contribution in [#11562](https://github.com/pydantic/pydantic/pull/11562) * @Jeukoh made their first contribution in [#11611](https://github.com/pydantic/pydantic/pull/11611) ## v2.11.0b2 (2025-03-17) [GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.11.0b2) ### What's Changed #### New Features * Add experimental support for free threading by @Viicos in [#11516](https://github.com/pydantic/pydantic/pull/11516) #### Fixes * Fix `NotRequired` qualifier not taken into account in stringified annotation by @Viicos in [#11559](https://github.com/pydantic/pydantic/pull/11559) #### Packaging * Bump `pydantic-core` to v2.32.0 by @Viicos in [#11567](https://github.com/pydantic/pydantic/pull/11567) ### New Contributors * @joren485 made their first contribution in [#11547](https://github.com/pydantic/pydantic/pull/11547) ## v2.11.0b1 (2025-03-06) [GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.11.0b1) ### What's Changed #### New Features * Support unsubstituted type variables with both a default and a bound or constraints by @FyZzyss in https://github.com/pydantic/pydantic/pull/10789 * Add a `default_factory_takes_validated_data` property to `FieldInfo` by @Viicos in https://github.com/pydantic/pydantic/pull/11034 * Raise a better error when a generic alias is used inside `type[]` by @Viicos in https://github.com/pydantic/pydantic/pull/11088 * Properly support PEP 695 generics syntax by @Viicos in https://github.com/pydantic/pydantic/pull/11189 * Properly support type variable defaults by @Viicos in https://github.com/pydantic/pydantic/pull/11332 * Add support for validating v6, v7, v8 UUIDs by @astei in https://github.com/pydantic/pydantic/pull/11436 * Improve alias configuration APIs by @sydney-runkle in https://github.com/pydantic/pydantic/pull/11468 #### Changes * Rework `create_model` field definitions format by @Viicos in https://github.com/pydantic/pydantic/pull/11032 * Raise a deprecation warning when a field is annotated as final with a default value by @Viicos in https://github.com/pydantic/pydantic/pull/11168 * Deprecate accessing `model_fields` and `model_computed_fields` on instances by @Viicos in https://github.com/pydantic/pydantic/pull/11169 * **Breaking Change:** Move core schema generation logic for path types inside the `GenerateSchema` class by @sydney-runkle in https://github.com/pydantic/pydantic/pull/10846 * Remove Python 3.8 Support by @sydney-runkle in https://github.com/pydantic/pydantic/pull/11258 * Optimize calls to `get_type_ref` by @Viicos in https://github.com/pydantic/pydantic/pull/10863 * Disable `pydantic-core` core schema validation by @sydney-runkle in https://github.com/pydantic/pydantic/pull/11271 #### Performance * Only evaluate `FieldInfo` annotations if required during schema building by @Viicos in https://github.com/pydantic/pydantic/pull/10769 * Improve `__setattr__` performance of Pydantic models by caching setter functions by @MarkusSintonen in https://github.com/pydantic/pydantic/pull/10868 * Improve annotation application performance by @Viicos in https://github.com/pydantic/pydantic/pull/11186 * Improve performance of `_typing_extra` module by @Viicos in https://github.com/pydantic/pydantic/pull/11255 * Refactor and optimize schema cleaning logic by @Viicos in https://github.com/pydantic/pydantic/pull/11244 * Create a single dictionary when creating a `CoreConfig` instance by @sydney-runkle in https://github.com/pydantic/pydantic/pull/11384 * Bump `pydantic-core` and thus use `SchemaValidator` and `SchemaSerializer` caching by @sydney-runkle in https://github.com/pydantic/pydantic/pull/11402 * Reuse cached core schemas for parametrized generic Pydantic models by @MarkusSintonen in https://github.com/pydantic/pydantic/pull/11434 #### Fixes * Improve `TypeAdapter` instance repr by @sydney-runkle in https://github.com/pydantic/pydantic/pull/10872 * Use the correct frame when instantiating a parametrized `TypeAdapter` by @Viicos in https://github.com/pydantic/pydantic/pull/10893 * Infer final fields with a default value as class variables in the mypy plugin by @Viicos in https://github.com/pydantic/pydantic/pull/11121 * Recursively unpack `Literal` values if using PEP 695 type aliases by @Viicos in https://github.com/pydantic/pydantic/pull/11114 * Override `__subclasscheck__` on `ModelMetaclass` to avoid memory leak and performance issues by @Viicos in https://github.com/pydantic/pydantic/pull/11116 * Remove unused `_extract_get_pydantic_json_schema()` parameter by @Viicos in https://github.com/pydantic/pydantic/pull/11155 * Improve discriminated union error message for invalid union variants by @Viicos in https://github.com/pydantic/pydantic/pull/11161 * Unpack PEP 695 type aliases if using the `Annotated` form by @Viicos in https://github.com/pydantic/pydantic/pull/11109 * Add missing stacklevel in `deprecated_instance_property` warning by @Viicos in https://github.com/pydantic/pydantic/pull/11200 * Copy `WithJsonSchema` schema to avoid sharing mutated data by @thejcannon in https://github.com/pydantic/pydantic/pull/11014 * Do not cache parametrized models when in the process of parametrizing another model by @Viicos in https://github.com/pydantic/pydantic/pull/10704 * Add discriminated union related metadata entries to the `CoreMetadata` definition by @Viicos in https://github.com/pydantic/pydantic/pull/11216 * Consolidate schema definitions logic in the `_Definitions` class by @Viicos in https://github.com/pydantic/pydantic/pull/11208 * Support initializing root model fields with values of the `root` type in the mypy plugin by @Viicos in https://github.com/pydantic/pydantic/pull/11212 * Fix various issues with dataclasses and `use_attribute_docstrings` by @Viicos in https://github.com/pydantic/pydantic/pull/11246 * Only compute normalized decimal places if necessary in `decimal_places_validator` by @misrasaurabh1 in https://github.com/pydantic/pydantic/pull/11281 * Add support for `validation_alias` in the mypy plugin by @Viicos in https://github.com/pydantic/pydantic/pull/11295 * Fix JSON Schema reference collection with `"examples"` keys by @Viicos in https://github.com/pydantic/pydantic/pull/11305 * Do not transform model serializer functions as class methods in the mypy plugin by @Viicos in https://github.com/pydantic/pydantic/pull/11298 * Simplify `GenerateJsonSchema.literal_schema()` implementation by @misrasaurabh1 in https://github.com/pydantic/pydantic/pull/11321 * Add additional allowed schemes for `ClickHouseDsn` by @Maze21127 in https://github.com/pydantic/pydantic/pull/11319 * Coerce decimal constraints to `Decimal` instances by @Viicos in https://github.com/pydantic/pydantic/pull/11350 * Use the correct JSON Schema mode when handling function schemas by @Viicos in https://github.com/pydantic/pydantic/pull/11367 * Improve exception message when encountering recursion errors during type evaluation by @Viicos in https://github.com/pydantic/pydantic/pull/11356 * Always include `additionalProperties: True` for arbitrary dictionary schemas by @austinyu in https://github.com/pydantic/pydantic/pull/11392 * Expose `fallback` parameter in serialization methods by @Viicos in https://github.com/pydantic/pydantic/pull/11398 * Fix path serialization behavior by @sydney-runkle in https://github.com/pydantic/pydantic/pull/11416 * Do not reuse validators and serializers during model rebuild by @Viicos in https://github.com/pydantic/pydantic/pull/11429 * Collect model fields when rebuilding a model by @Viicos in https://github.com/pydantic/pydantic/pull/11388 * Allow cached properties to be altered on frozen models by @Viicos in https://github.com/pydantic/pydantic/pull/11432 * Fix tuple serialization for `Sequence` types by @sydney-runkle in https://github.com/pydantic/pydantic/pull/11435 * Fix: do not check for `__get_validators__` on classes where `__get_pydantic_core_schema__` is also defined by @tlambert03 in https://github.com/pydantic/pydantic/pull/11444 * Allow callable instances to be used as serializers by @Viicos in https://github.com/pydantic/pydantic/pull/11451 * Improve error thrown when overriding field with a property by @sydney-runkle in https://github.com/pydantic/pydantic/pull/11459 * Fix JSON Schema generation with referenceable core schemas holding JSON metadata by @Viicos in https://github.com/pydantic/pydantic/pull/11475 * Support strict specification on union member types by @sydney-runkle in https://github.com/pydantic/pydantic/pull/11481 * Implicitly set `validate_by_name` to `True` when `validate_by_alias` is `False` by @sydney-runkle in https://github.com/pydantic/pydantic/pull/11503 * Change type of `Any` when synthesizing `BaseSettings.__init__` signature in the mypy plugin by @Viicos in https://github.com/pydantic/pydantic/pull/11497 * Support type variable defaults referencing other type variables by @Viicos in https://github.com/pydantic/pydantic/pull/11520 * Fix `ValueError` on year zero by @davidhewitt in https://github.com/pydantic/pydantic-core/pull/1583 * `dataclass` `InitVar` shouldn't be required on serialization by @sydney-runkle in https://github.com/pydantic/pydantic-core/pull/1602 #### Packaging * Add a `check_pydantic_core_version()` function by @Viicos in https://github.com/pydantic/pydantic/pull/11324 * Remove `greenlet` development dependency by @Viicos in https://github.com/pydantic/pydantic/pull/11351 * Use the `typing-inspection` library by @Viicos in https://github.com/pydantic/pydantic/pull/11479 * Bump `pydantic-core` to `v2.31.1` by @sydney-runkle in https://github.com/pydantic/pydantic/pull/11526 ## New Contributors * @FyZzyss made their first contribution in https://github.com/pydantic/pydantic/pull/10789 * @tamird made their first contribution in https://github.com/pydantic/pydantic/pull/10948 * @felixxm made their first contribution in https://github.com/pydantic/pydantic/pull/11077 * @alexprabhat99 made their first contribution in https://github.com/pydantic/pydantic/pull/11082 * @Kharianne made their first contribution in https://github.com/pydantic/pydantic/pull/11111 * @mdaffad made their first contribution in https://github.com/pydantic/pydantic/pull/11177 * @thejcannon made their first contribution in https://github.com/pydantic/pydantic/pull/11014 * @thomasfrimannkoren made their first contribution in https://github.com/pydantic/pydantic/pull/11251 * @usernameMAI made their first contribution in https://github.com/pydantic/pydantic/pull/11275 * @ananiavito made their first contribution in https://github.com/pydantic/pydantic/pull/11302 * @pawamoy made their first contribution in https://github.com/pydantic/pydantic/pull/11311 * @Maze21127 made their first contribution in https://github.com/pydantic/pydantic/pull/11319 * @kauabh made their first contribution in https://github.com/pydantic/pydantic/pull/11369 * @jaceklaskowski made their first contribution in https://github.com/pydantic/pydantic/pull/11353 * @tmpbeing made their first contribution in https://github.com/pydantic/pydantic/pull/11375 * @petyosi made their first contribution in https://github.com/pydantic/pydantic/pull/11405 * @austinyu made their first contribution in https://github.com/pydantic/pydantic/pull/11392 * @mikeedjones made their first contribution in https://github.com/pydantic/pydantic/pull/11402 * @astei made their first contribution in https://github.com/pydantic/pydantic/pull/11436 * @dsayling made their first contribution in https://github.com/pydantic/pydantic/pull/11522 * @sobolevn made their first contribution in https://github.com/pydantic/pydantic-core/pull/1645 ## v2.11.0a2 (2025-02-10) [GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.11.0a2) ### What's Changed Pydantic v2.11 is a version strongly focused on build time performance of Pydantic models (and core schema generation in general). This is another early alpha release, meant to collect early feedback from users having issues with core schema builds. #### Performance * Create a single dictionary when creating a `CoreConfig` instance by @sydney-runkle in [#11384](https://github.com/pydantic/pydantic/pull/11384) #### Fixes * Use the correct JSON Schema mode when handling function schemas by @Viicos in [#11367](https://github.com/pydantic/pydantic/pull/11367) * Fix JSON Schema reference logic with `examples` keys by @Viicos in [#11366](https://github.com/pydantic/pydantic/pull/11366) * Improve exception message when encountering recursion errors during type evaluation by @Viicos in [#11356](https://github.com/pydantic/pydantic/pull/11356) * Always include `additionalProperties: True` for arbitrary dictionary schemas by @austinyu in [#11392](https://github.com/pydantic/pydantic/pull/11392) * Expose `fallback` parameter in serialization methods by @Viicos in [#11398](https://github.com/pydantic/pydantic/pull/11398) * Fix path serialization behavior by @sydney-runkle in [#11416](https://github.com/pydantic/pydantic/pull/11416) #### Packaging * Bump `ruff` from 0.9.2 to 0.9.5 by @Viicos in [#11407](https://github.com/pydantic/pydantic/pull/11407) * Bump `pydantic-core` to v2.29.0 by @mikeedjones in [#11402](https://github.com/pydantic/pydantic/pull/11402) * Use locally-built rust with symbols & pgo by @davidhewitt in [#11403](https://github.com/pydantic/pydantic/pull/11403) ### New Contributors * @kauabh made their first contribution in [#11369](https://github.com/pydantic/pydantic/pull/11369) * @jaceklaskowski made their first contribution in [#11353](https://github.com/pydantic/pydantic/pull/11353) * @tmpbeing made their first contribution in [#11375](https://github.com/pydantic/pydantic/pull/11375) * @petyosi made their first contribution in [#11405](https://github.com/pydantic/pydantic/pull/11405) * @austinyu made their first contribution in [#11392](https://github.com/pydantic/pydantic/pull/11392) * @mikeedjones made their first contribution in [#11402](https://github.com/pydantic/pydantic/pull/11402) ## v2.11.0a1 (2025-01-30) [GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.11.0a1) ### What's Changed Pydantic v2.11 is a version strongly focused on build time performance of Pydantic models (and core schema generation in general). This is an early alpha release, meant to collect early feedback from users having issues with core schema builds. #### New Features * Support unsubstituted type variables with both a default and a bound or constraints by @FyZzyss in [#10789](https://github.com/pydantic/pydantic/pull/10789) * Add a `default_factory_takes_validated_data` property to `FieldInfo` by @Viicos in [#11034](https://github.com/pydantic/pydantic/pull/11034) * Raise a better error when a generic alias is used inside `type[]` by @Viicos in [#11088](https://github.com/pydantic/pydantic/pull/11088) * Properly support PEP 695 generics syntax by @Viicos in [#11189](https://github.com/pydantic/pydantic/pull/11189) * Properly support type variable defaults by @Viicos in [#11332](https://github.com/pydantic/pydantic/pull/11332) #### Changes * Rework `create_model` field definitions format by @Viicos in [#11032](https://github.com/pydantic/pydantic/pull/11032) * Raise a deprecation warning when a field is annotated as final with a default value by @Viicos in [#11168](https://github.com/pydantic/pydantic/pull/11168) * Deprecate accessing `model_fields` and `model_computed_fields` on instances by @Viicos in [#11169](https://github.com/pydantic/pydantic/pull/11169) * Move core schema generation logic for path types inside the `GenerateSchema` class by @sydney-runkle in [#10846](https://github.com/pydantic/pydantic/pull/10846) * Move `deque` schema gen to `GenerateSchema` class by @sydney-runkle in [#11239](https://github.com/pydantic/pydantic/pull/11239) * Move `Mapping` schema gen to `GenerateSchema` to complete removal of `prepare_annotations_for_known_type` workaround by @sydney-runkle in [#11247](https://github.com/pydantic/pydantic/pull/11247) * Remove Python 3.8 Support by @sydney-runkle in [#11258](https://github.com/pydantic/pydantic/pull/11258) * Disable `pydantic-core` core schema validation by @sydney-runkle in [#11271](https://github.com/pydantic/pydantic/pull/11271) #### Performance * Only evaluate `FieldInfo` annotations if required during schema building by @Viicos in [#10769](https://github.com/pydantic/pydantic/pull/10769) * Optimize calls to `get_type_ref` by @Viicos in [#10863](https://github.com/pydantic/pydantic/pull/10863) * Improve `__setattr__` performance of Pydantic models by caching setter functions by @MarkusSintonen in [#10868](https://github.com/pydantic/pydantic/pull/10868) * Improve annotation application performance by @Viicos in [#11186](https://github.com/pydantic/pydantic/pull/11186) * Improve performance of `_typing_extra` module by @Viicos in [#11255](https://github.com/pydantic/pydantic/pull/11255) * Refactor and optimize schema cleaning logic by @Viicos and @MarkusSintonen in [#11244](https://github.com/pydantic/pydantic/pull/11244) #### Fixes * Add validation tests for `_internal/_validators.py` by @tkasuz in [#10763](https://github.com/pydantic/pydantic/pull/10763) * Improve `TypeAdapter` instance repr by @sydney-runkle in [#10872](https://github.com/pydantic/pydantic/pull/10872) * Revert "ci: use locally built pydantic-core with debug symbols by @sydney-runkle in [#10942](https://github.com/pydantic/pydantic/pull/10942) * Re-enable all FastAPI tests by @tamird in [#10948](https://github.com/pydantic/pydantic/pull/10948) * Fix typo in HISTORY.md. by @felixxm in [#11077](https://github.com/pydantic/pydantic/pull/11077) * Infer final fields with a default value as class variables in the mypy plugin by @Viicos in [#11121](https://github.com/pydantic/pydantic/pull/11121) * Recursively unpack `Literal` values if using PEP 695 type aliases by @Viicos in [#11114](https://github.com/pydantic/pydantic/pull/11114) * Override `__subclasscheck__` on `ModelMetaclass` to avoid memory leak and performance issues by @Viicos in [#11116](https://github.com/pydantic/pydantic/pull/11116) * Remove unused `_extract_get_pydantic_json_schema()` parameter by @Viicos in [#11155](https://github.com/pydantic/pydantic/pull/11155) * Add FastAPI and SQLModel to third-party tests by @sydney-runkle in [#11044](https://github.com/pydantic/pydantic/pull/11044) * Fix conditional expressions syntax for third-party tests by @Viicos in [#11162](https://github.com/pydantic/pydantic/pull/11162) * Move FastAPI tests to third-party workflow by @Viicos in [#11164](https://github.com/pydantic/pydantic/pull/11164) * Improve discriminated union error message for invalid union variants by @Viicos in [#11161](https://github.com/pydantic/pydantic/pull/11161) * Unpack PEP 695 type aliases if using the `Annotated` form by @Viicos in [#11109](https://github.com/pydantic/pydantic/pull/11109) * Include `openapi-python-client` check in issue creation for third-party failures, use `main` branch by @sydney-runkle in [#11182](https://github.com/pydantic/pydantic/pull/11182) * Add pandera third-party tests by @Viicos in [#11193](https://github.com/pydantic/pydantic/pull/11193) * Add ODMantic third-party tests by @sydney-runkle in [#11197](https://github.com/pydantic/pydantic/pull/11197) * Add missing stacklevel in `deprecated_instance_property` warning by @Viicos in [#11200](https://github.com/pydantic/pydantic/pull/11200) * Copy `WithJsonSchema` schema to avoid sharing mutated data by @thejcannon in [#11014](https://github.com/pydantic/pydantic/pull/11014) * Do not cache parametrized models when in the process of parametrizing another model by @Viicos in [#10704](https://github.com/pydantic/pydantic/pull/10704) * Re-enable Beanie third-party tests by @Viicos in [#11214](https://github.com/pydantic/pydantic/pull/11214) * Add discriminated union related metadata entries to the `CoreMetadata` definition by @Viicos in [#11216](https://github.com/pydantic/pydantic/pull/11216) * Consolidate schema definitions logic in the `_Definitions` class by @Viicos in [#11208](https://github.com/pydantic/pydantic/pull/11208) * Support initializing root model fields with values of the `root` type in the mypy plugin by @Viicos in [#11212](https://github.com/pydantic/pydantic/pull/11212) * Fix various issues with dataclasses and `use_attribute_docstrings` by @Viicos in [#11246](https://github.com/pydantic/pydantic/pull/11246) * Only compute normalized decimal places if necessary in `decimal_places_validator` by @misrasaurabh1 in [#11281](https://github.com/pydantic/pydantic/pull/11281) * Fix two misplaced sentences in validation errors documentation by @ananiavito in [#11302](https://github.com/pydantic/pydantic/pull/11302) * Fix mkdocstrings inventory example in documentation by @pawamoy in [#11311](https://github.com/pydantic/pydantic/pull/11311) * Add support for `validation_alias` in the mypy plugin by @Viicos in [#11295](https://github.com/pydantic/pydantic/pull/11295) * Do not transform model serializer functions as class methods in the mypy plugin by @Viicos in [#11298](https://github.com/pydantic/pydantic/pull/11298) * Simplify `GenerateJsonSchema.literal_schema()` implementation by @misrasaurabh1 in [#11321](https://github.com/pydantic/pydantic/pull/11321) * Add additional allowed schemes for `ClickHouseDsn` by @Maze21127 in [#11319](https://github.com/pydantic/pydantic/pull/11319) * Coerce decimal constraints to `Decimal` instances by @Viicos in [#11350](https://github.com/pydantic/pydantic/pull/11350) * Fix `ValueError` on year zero by @davidhewitt in [pydantic-core#1583](https://github.com/pydantic/pydantic-core/pull/1583) #### Packaging * Bump dawidd6/action-download-artifact from 6 to 7 by @dependabot in [#11018](https://github.com/pydantic/pydantic/pull/11018) * Re-enable memray related tests on Python 3.12+ by @Viicos in [#11191](https://github.com/pydantic/pydantic/pull/11191) * Bump astral-sh/setup-uv to 5 by @dependabot in [#11205](https://github.com/pydantic/pydantic/pull/11205) * Bump `ruff` to v0.9.0 by @sydney-runkle in [#11254](https://github.com/pydantic/pydantic/pull/11254) * Regular `uv.lock` deps update by @sydney-runkle in [#11333](https://github.com/pydantic/pydantic/pull/11333) * Add a `check_pydantic_core_version()` function by @Viicos in [#11324](https://github.com/pydantic/pydantic/pull/11324) * Remove `greenlet` development dependency by @Viicos in [#11351](https://github.com/pydantic/pydantic/pull/11351) * Bump `pydantic-core` to v2.28.0 by @Viicos in [#11364](https://github.com/pydantic/pydantic/pull/11364) ### New Contributors * @FyZzyss made their first contribution in [#10789](https://github.com/pydantic/pydantic/pull/10789) * @tamird made their first contribution in [#10948](https://github.com/pydantic/pydantic/pull/10948) * @felixxm made their first contribution in [#11077](https://github.com/pydantic/pydantic/pull/11077) * @alexprabhat99 made their first contribution in [#11082](https://github.com/pydantic/pydantic/pull/11082) * @Kharianne made their first contribution in [#11111](https://github.com/pydantic/pydantic/pull/11111) * @mdaffad made their first contribution in [#11177](https://github.com/pydantic/pydantic/pull/11177) * @thejcannon made their first contribution in [#11014](https://github.com/pydantic/pydantic/pull/11014) * @thomasfrimannkoren made their first contribution in [#11251](https://github.com/pydantic/pydantic/pull/11251) * @usernameMAI made their first contribution in [#11275](https://github.com/pydantic/pydantic/pull/11275) * @ananiavito made their first contribution in [#11302](https://github.com/pydantic/pydantic/pull/11302) * @pawamoy made their first contribution in [#11311](https://github.com/pydantic/pydantic/pull/11311) * @Maze21127 made their first contribution in [#11319](https://github.com/pydantic/pydantic/pull/11319) ## v2.10.6 (2025-01-23) [GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.10.6) ### What's Changed #### Fixes * Fix JSON Schema reference collection with `'examples'` keys by @Viicos in [#11325](https://github.com/pydantic/pydantic/pull/11325) * Fix url python serialization by @sydney-runkle in [#11331](https://github.com/pydantic/pydantic/pull/11331) ## v2.10.5 (2025-01-08) [GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.10.5) ### What's Changed #### Fixes * Remove custom MRO implementation of Pydantic models by @Viicos in [#11184](https://github.com/pydantic/pydantic/pull/11184) * Fix URL serialization for unions by @sydney-runkle in [#11233](https://github.com/pydantic/pydantic/pull/11233) ## v2.10.4 (2024-12-18) [GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.10.4) ### What's Changed #### Fixes * Fix for comparison of `AnyUrl` objects by @alexprabhat99 in [#11082](https://github.com/pydantic/pydantic/pull/11082) * Properly fetch PEP 695 type params for functions, do not fetch annotations from signature by @Viicos in [#11093](https://github.com/pydantic/pydantic/pull/11093) * Include JSON Schema input core schema in function schemas by @Viicos in [#11085](https://github.com/pydantic/pydantic/pull/11085) * Add `len` to `_BaseUrl` to avoid TypeError by @Kharianne in [#11111](https://github.com/pydantic/pydantic/pull/11111) * Make sure the type reference is removed from the seen references by @Viicos in [#11143](https://github.com/pydantic/pydantic/pull/11143) ### New Contributors * @FyZzyss made their first contribution in [#10789](https://github.com/pydantic/pydantic/pull/10789) * @tamird made their first contribution in [#10948](https://github.com/pydantic/pydantic/pull/10948) * @felixxm made their first contribution in [#11077](https://github.com/pydantic/pydantic/pull/11077) * @alexprabhat99 made their first contribution in [#11082](https://github.com/pydantic/pydantic/pull/11082) * @Kharianne made their first contribution in [#11111](https://github.com/pydantic/pydantic/pull/11111) #### Packaging * Bump `pydantic-core` to v2.27.2 by @davidhewitt in [#11138](https://github.com/pydantic/pydantic/pull/11138) ## v2.10.3 (2024-12-03) [GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.10.3) ### What's Changed #### Fixes * Set fields when `defer_build` is set on Pydantic dataclasses by @Viicos in [#10984](https://github.com/pydantic/pydantic/pull/10984) * Do not resolve the JSON Schema reference for `dict` core schema keys by @Viicos in [#10989](https://github.com/pydantic/pydantic/pull/10989) * Use the globals of the function when evaluating the return type for `PlainSerializer` and `WrapSerializer` functions by @Viicos in [#11008](https://github.com/pydantic/pydantic/pull/11008) * Fix host required enforcement for urls to be compatible with v2.9 behavior by @sydney-runkle in [#11027](https://github.com/pydantic/pydantic/pull/11027) * Add a `default_factory_takes_validated_data` property to `FieldInfo` by @Viicos in [#11034](https://github.com/pydantic/pydantic/pull/11034) * Fix url json schema in `serialization` mode by @sydney-runkle in [#11035](https://github.com/pydantic/pydantic/pull/11035) ## v2.10.2 (2024-11-25) [GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.10.2) ### What's Changed #### Fixes * Only evaluate FieldInfo annotations if required during schema building by @Viicos in [#10769](https://github.com/pydantic/pydantic/pull/10769) * Do not evaluate annotations for private fields by @Viicos in [#10962](https://github.com/pydantic/pydantic/pull/10962) * Support serialization as any for `Secret` types and `Url` types by @sydney-runkle in [#10947](https://github.com/pydantic/pydantic/pull/10947) * Fix type hint of `Field.default` to be compatible with Python 3.8 and 3.9 by @Viicos in [#10972](https://github.com/pydantic/pydantic/pull/10972) * Add hashing support for URL types by @sydney-runkle in [#10975](https://github.com/pydantic/pydantic/pull/10975) * Hide `BaseModel.__replace__` definition from type checkers by @Viicos in [#10979](https://github.com/pydantic/pydantic/pull/10979) ## v2.10.1 (2024-11-21) [GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.10.1) ### What's Changed #### Fixes * Use the correct frame when instantiating a parametrized `TypeAdapter` by @Viicos in [#10893](https://github.com/pydantic/pydantic/pull/10893) * Relax check for validated data in `default_factory` utils by @sydney-runkle in [#10909](https://github.com/pydantic/pydantic/pull/10909) * Fix type checking issue with `model_fields` and `model_computed_fields` by @sydney-runkle in [#10911](https://github.com/pydantic/pydantic/pull/10911) * Use the parent configuration during schema generation for stdlib `dataclass`es by @sydney-runkle in [#10928](https://github.com/pydantic/pydantic/pull/10928) * Use the `globals` of the function when evaluating the return type of serializers and `computed_field`s by @Viicos in [#10929](https://github.com/pydantic/pydantic/pull/10929) * Fix URL constraint application by @sydney-runkle in [#10922](https://github.com/pydantic/pydantic/pull/10922) * Fix URL equality with different validation methods by @sydney-runkle in [#10934](https://github.com/pydantic/pydantic/pull/10934) * Fix JSON schema title when specified as `''` by @sydney-runkle in [#10936](https://github.com/pydantic/pydantic/pull/10936) * Fix `python` mode serialization for `complex` inference by @sydney-runkle in [pydantic-core#1549](https://github.com/pydantic/pydantic-core/pull/1549) #### Packaging * Bump `pydantic-core` version to `v2.27.1` by @sydney-runkle in [#10938](https://github.com/pydantic/pydantic/pull/10938) ### New Contributors ## v2.10.0 (2024-11-20) The code released in v2.10.0 is practically identical to that of v2.10.0b2. [GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.10.0) See the [v2.10 release blog post](https://pydantic.dev/articles/pydantic-v2-10-release) for the highlights! ### What's Changed #### New Features * Support `fractions.Fraction` by @sydney-runkle in [#10318](https://github.com/pydantic/pydantic/pull/10318) * Support `Hashable` for json validation by @sydney-runkle in [#10324](https://github.com/pydantic/pydantic/pull/10324) * Add a `SocketPath` type for `linux` systems by @theunkn0wn1 in [#10378](https://github.com/pydantic/pydantic/pull/10378) * Allow arbitrary refs in JSON schema `examples` by @sydney-runkle in [#10417](https://github.com/pydantic/pydantic/pull/10417) * Support `defer_build` for Pydantic dataclasses by @Viicos in [#10313](https://github.com/pydantic/pydantic/pull/10313) * Adding v1 / v2 incompatibility warning for nested v1 model by @sydney-runkle in [#10431](https://github.com/pydantic/pydantic/pull/10431) * Add support for unpacked `TypedDict` to type hint variadic keyword arguments with `@validate_call` by @Viicos in [#10416](https://github.com/pydantic/pydantic/pull/10416) * Support compiled patterns in `protected_namespaces` by @sydney-runkle in [#10522](https://github.com/pydantic/pydantic/pull/10522) * Add support for `propertyNames` in JSON schema by @FlorianSW in [#10478](https://github.com/pydantic/pydantic/pull/10478) * Adding `__replace__` protocol for Python 3.13+ support by @sydney-runkle in [#10596](https://github.com/pydantic/pydantic/pull/10596) * Expose public `sort` method for JSON schema generation by @sydney-runkle in [#10595](https://github.com/pydantic/pydantic/pull/10595) * Add runtime validation of `@validate_call` callable argument by @kc0506 in [#10627](https://github.com/pydantic/pydantic/pull/10627) * Add `experimental_allow_partial` support by @samuelcolvin in [#10748](https://github.com/pydantic/pydantic/pull/10748) * Support default factories taking validated data as an argument by @Viicos in [#10678](https://github.com/pydantic/pydantic/pull/10678) * Allow subclassing `ValidationError` and `PydanticCustomError` by @Youssefares in [pydantic/pydantic-core#1413](https://github.com/pydantic/pydantic-core/pull/1413) * Add `trailing-strings` support to `experimental_allow_partial` by @sydney-runkle in [#10825](https://github.com/pydantic/pydantic/pull/10825) * Add `rebuild()` method for `TypeAdapter` and simplify `defer_build` patterns by @sydney-runkle in [#10537](https://github.com/pydantic/pydantic/pull/10537) * Improve `TypeAdapter` instance repr by @sydney-runkle in [#10872](https://github.com/pydantic/pydantic/pull/10872) #### Changes * Don't allow customization of `SchemaGenerator` until interface is more stable by @sydney-runkle in [#10303](https://github.com/pydantic/pydantic/pull/10303) * Cleanly `defer_build` on `TypeAdapters`, removing experimental flag by @sydney-runkle in [#10329](https://github.com/pydantic/pydantic/pull/10329) * Fix `mro` of generic subclass by @kc0506 in [#10100](https://github.com/pydantic/pydantic/pull/10100) * Strip whitespaces on JSON Schema title generation by @sydney-runkle in [#10404](https://github.com/pydantic/pydantic/pull/10404) * Use `b64decode` and `b64encode` for `Base64Bytes` type by @sydney-runkle in [#10486](https://github.com/pydantic/pydantic/pull/10486) * Relax protected namespace config default by @sydney-runkle in [#10441](https://github.com/pydantic/pydantic/pull/10441) * Revalidate parametrized generics if instance's origin is subclass of OG class by @sydney-runkle in [#10666](https://github.com/pydantic/pydantic/pull/10666) * Warn if configuration is specified on the `@dataclass` decorator and with the `__pydantic_config__` attribute by @sydney-runkle in [#10406](https://github.com/pydantic/pydantic/pull/10406) * Recommend against using `Ellipsis` (...) with `Field` by @Viicos in [#10661](https://github.com/pydantic/pydantic/pull/10661) * Migrate to subclassing instead of annotated approach for pydantic url types by @sydney-runkle in [#10662](https://github.com/pydantic/pydantic/pull/10662) * Change JSON schema generation of `Literal`s and `Enums` by @Viicos in [#10692](https://github.com/pydantic/pydantic/pull/10692) * Simplify unions involving `Any` or `Never` when replacing type variables by @Viicos in [#10338](https://github.com/pydantic/pydantic/pull/10338) * Do not require padding when decoding `base64` bytes by @bschoenmaeckers in [pydantic/pydantic-core#1448](https://github.com/pydantic/pydantic-core/pull/1448) * Support dates all the way to 1BC by @changhc in [pydantic/speedate#77](https://github.com/pydantic/speedate/pull/77) #### Performance * Schema cleaning: skip unnecessary copies during schema walking by @Viicos in [#10286](https://github.com/pydantic/pydantic/pull/10286) * Refactor namespace logic for annotations evaluation by @Viicos in [#10530](https://github.com/pydantic/pydantic/pull/10530) * Improve email regexp on edge cases by @AlekseyLobanov in [#10601](https://github.com/pydantic/pydantic/pull/10601) * `CoreMetadata` refactor with an emphasis on documentation, schema build time performance, and reducing complexity by @sydney-runkle in [#10675](https://github.com/pydantic/pydantic/pull/10675) #### Packaging * Bump `pydantic-core` to `v2.27.0` by @sydney-runkle in [#10825](https://github.com/pydantic/pydantic/pull/10825) * Replaced pdm with uv by @frfahim in [#10727](https://github.com/pydantic/pydantic/pull/10727) #### Fixes * Remove guarding check on `computed_field` with `field_serializer` by @nix010 in [#10390](https://github.com/pydantic/pydantic/pull/10390) * Fix `Predicate` issue in `v2.9.0` by @sydney-runkle in [#10321](https://github.com/pydantic/pydantic/pull/10321) * Fixing `annotated-types` bound by @sydney-runkle in [#10327](https://github.com/pydantic/pydantic/pull/10327) * Turn `tzdata` install requirement into optional `timezone` dependency by @jakob-keller in [#10331](https://github.com/pydantic/pydantic/pull/10331) * Use correct types namespace when building `namedtuple` core schemas by @Viicos in [#10337](https://github.com/pydantic/pydantic/pull/10337) * Fix evaluation of stringified annotations during namespace inspection by @Viicos in [#10347](https://github.com/pydantic/pydantic/pull/10347) * Fix `IncEx` type alias definition by @Viicos in [#10339](https://github.com/pydantic/pydantic/pull/10339) * Do not error when trying to evaluate annotations of private attributes by @Viicos in [#10358](https://github.com/pydantic/pydantic/pull/10358) * Fix nested type statement by @kc0506 in [#10369](https://github.com/pydantic/pydantic/pull/10369) * Improve typing of `ModelMetaclass.mro` by @Viicos in [#10372](https://github.com/pydantic/pydantic/pull/10372) * Fix class access of deprecated `computed_field`s by @Viicos in [#10391](https://github.com/pydantic/pydantic/pull/10391) * Make sure `inspect.iscoroutinefunction` works on coroutines decorated with `@validate_call` by @MovisLi in [#10374](https://github.com/pydantic/pydantic/pull/10374) * Fix `NameError` when using `validate_call` with PEP 695 on a class by @kc0506 in [#10380](https://github.com/pydantic/pydantic/pull/10380) * Fix `ZoneInfo` with various invalid types by @sydney-runkle in [#10408](https://github.com/pydantic/pydantic/pull/10408) * Fix `PydanticUserError` on empty `model_config` with annotations by @cdwilson in [#10412](https://github.com/pydantic/pydantic/pull/10412) * Fix variance issue in `_IncEx` type alias, only allow `True` by @Viicos in [#10414](https://github.com/pydantic/pydantic/pull/10414) * Fix serialization schema generation when using `PlainValidator` by @Viicos in [#10427](https://github.com/pydantic/pydantic/pull/10427) * Fix schema generation error when serialization schema holds references by @Viicos in [#10444](https://github.com/pydantic/pydantic/pull/10444) * Inline references if possible when generating schema for `json_schema_input_type` by @Viicos in [#10439](https://github.com/pydantic/pydantic/pull/10439) * Fix recursive arguments in `Representation` by @Viicos in [#10480](https://github.com/pydantic/pydantic/pull/10480) * Fix representation for builtin function types by @kschwab in [#10479](https://github.com/pydantic/pydantic/pull/10479) * Add python validators for decimal constraints (`max_digits` and `decimal_places`) by @sydney-runkle in [#10506](https://github.com/pydantic/pydantic/pull/10506) * Only fetch `__pydantic_core_schema__` from the current class during schema generation by @Viicos in [#10518](https://github.com/pydantic/pydantic/pull/10518) * Fix `stacklevel` on deprecation warnings for `BaseModel` by @sydney-runkle in [#10520](https://github.com/pydantic/pydantic/pull/10520) * Fix warning `stacklevel` in `BaseModel.__init__` by @Viicos in [#10526](https://github.com/pydantic/pydantic/pull/10526) * Improve error handling for in-evaluable refs for discriminator application by @sydney-runkle in [#10440](https://github.com/pydantic/pydantic/pull/10440) * Change the signature of `ConfigWrapper.core_config` to take the title directly by @Viicos in [#10562](https://github.com/pydantic/pydantic/pull/10562) * Do not use the previous config from the stack for dataclasses without config by @Viicos in [#10576](https://github.com/pydantic/pydantic/pull/10576) * Fix serialization for IP types with `mode='python'` by @sydney-runkle in [#10594](https://github.com/pydantic/pydantic/pull/10594) * Support constraint application for `Base64Etc` types by @sydney-runkle in [#10584](https://github.com/pydantic/pydantic/pull/10584) * Fix `validate_call` ignoring `Field` in `Annotated` by @kc0506 in [#10610](https://github.com/pydantic/pydantic/pull/10610) * Raise an error when `Self` is invalid by @kc0506 in [#10609](https://github.com/pydantic/pydantic/pull/10609) * Using `core_schema.InvalidSchema` instead of metadata injection + checks by @sydney-runkle in [#10523](https://github.com/pydantic/pydantic/pull/10523) * Tweak type alias logic by @kc0506 in [#10643](https://github.com/pydantic/pydantic/pull/10643) * Support usage of `type` with `typing.Self` and type aliases by @kc0506 in [#10621](https://github.com/pydantic/pydantic/pull/10621) * Use overloads for `Field` and `PrivateAttr` functions by @Viicos in [#10651](https://github.com/pydantic/pydantic/pull/10651) * Clean up the `mypy` plugin implementation by @Viicos in [#10669](https://github.com/pydantic/pydantic/pull/10669) * Properly check for `typing_extensions` variant of `TypeAliasType` by @Daraan in [#10713](https://github.com/pydantic/pydantic/pull/10713) * Allow any mapping in `BaseModel.model_copy()` by @Viicos in [#10751](https://github.com/pydantic/pydantic/pull/10751) * Fix `isinstance` behavior for urls by @sydney-runkle in [#10766](https://github.com/pydantic/pydantic/pull/10766) * Ensure `cached_property` can be set on Pydantic models by @Viicos in [#10774](https://github.com/pydantic/pydantic/pull/10774) * Fix equality checks for primitives in literals by @sydney-runkle in [pydantic/pydantic-core#1459](https://github.com/pydantic/pydantic-core/pull/1459) * Properly enforce `host_required` for URLs by @Viicos in [pydantic/pydantic-core#1488](https://github.com/pydantic/pydantic-core/pull/1488) * Fix when `coerce_numbers_to_str` enabled and string has invalid Unicode character by @andrey-berenda in [pydantic/pydantic-core#1515](https://github.com/pydantic/pydantic-core/pull/1515) * Fix serializing `complex` values in `Enum`s by @changhc in [pydantic/pydantic-core#1524](https://github.com/pydantic/pydantic-core/pull/1524) * Refactor `_typing_extra` module by @Viicos in [#10725](https://github.com/pydantic/pydantic/pull/10725) * Support intuitive equality for urls by @sydney-runkle in [#10798](https://github.com/pydantic/pydantic/pull/10798) * Add `bytearray` to `TypeAdapter.validate_json` signature by @samuelcolvin in [#10802](https://github.com/pydantic/pydantic/pull/10802) * Ensure class access of method descriptors is performed when used as a default with `Field` by @Viicos in [#10816](https://github.com/pydantic/pydantic/pull/10816) * Fix circular import with `validate_call` by @sydney-runkle in [#10807](https://github.com/pydantic/pydantic/pull/10807) * Fix error when using type aliases referencing other type aliases by @Viicos in [#10809](https://github.com/pydantic/pydantic/pull/10809) * Fix `IncEx` type alias to be compatible with mypy by @Viicos in [#10813](https://github.com/pydantic/pydantic/pull/10813) * Make `__signature__` a lazy property, do not deepcopy defaults by @Viicos in [#10818](https://github.com/pydantic/pydantic/pull/10818) * Make `__signature__` lazy for dataclasses, too by @sydney-runkle in [#10832](https://github.com/pydantic/pydantic/pull/10832) * Subclass all single host url classes from `AnyUrl` to preserve behavior from v2.9 by @sydney-runkle in [#10856](https://github.com/pydantic/pydantic/pull/10856) ### New Contributors * @jakob-keller made their first contribution in [#10331](https://github.com/pydantic/pydantic/pull/10331) * @MovisLi made their first contribution in [#10374](https://github.com/pydantic/pydantic/pull/10374) * @joaopalmeiro made their first contribution in [#10405](https://github.com/pydantic/pydantic/pull/10405) * @theunkn0wn1 made their first contribution in [#10378](https://github.com/pydantic/pydantic/pull/10378) * @cdwilson made their first contribution in [#10412](https://github.com/pydantic/pydantic/pull/10412) * @dlax made their first contribution in [#10421](https://github.com/pydantic/pydantic/pull/10421) * @kschwab made their first contribution in [#10479](https://github.com/pydantic/pydantic/pull/10479) * @santibreo made their first contribution in [#10453](https://github.com/pydantic/pydantic/pull/10453) * @FlorianSW made their first contribution in [#10478](https://github.com/pydantic/pydantic/pull/10478) * @tkasuz made their first contribution in [#10555](https://github.com/pydantic/pydantic/pull/10555) * @AlekseyLobanov made their first contribution in [#10601](https://github.com/pydantic/pydantic/pull/10601) * @NiclasvanEyk made their first contribution in [#10667](https://github.com/pydantic/pydantic/pull/10667) * @mschoettle made their first contribution in [#10677](https://github.com/pydantic/pydantic/pull/10677) * @Daraan made their first contribution in [#10713](https://github.com/pydantic/pydantic/pull/10713) * @k4nar made their first contribution in [#10736](https://github.com/pydantic/pydantic/pull/10736) * @UriyaHarpeness made their first contribution in [#10740](https://github.com/pydantic/pydantic/pull/10740) * @frfahim made their first contribution in [#10727](https://github.com/pydantic/pydantic/pull/10727) ## v2.10.0b2 (2024-11-13) Pre-release, see [the GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.10.0b2) for details. ## v2.10.0b1 (2024-11-06) Pre-release, see [the GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.10.0b1) for details. ## v2.9.2 (2024-09-17) [GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.9.2) ### What's Changed #### Fixes * Do not error when trying to evaluate annotations of private attributes by @Viicos in [#10358](https://github.com/pydantic/pydantic/pull/10358) * Adding notes on designing sound `Callable` discriminators by @sydney-runkle in [#10400](https://github.com/pydantic/pydantic/pull/10400) * Fix serialization schema generation when using `PlainValidator` by @Viicos in [#10427](https://github.com/pydantic/pydantic/pull/10427) * Fix `Union` serialization warnings by @sydney-runkle in [pydantic/pydantic-core#1449](https://github.com/pydantic/pydantic-core/pull/1449) * Fix variance issue in `_IncEx` type alias, only allow `True` by @Viicos in [#10414](https://github.com/pydantic/pydantic/pull/10414) * Fix `ZoneInfo` validation with various invalid types by @sydney-runkle in [#10408](https://github.com/pydantic/pydantic/pull/10408) ## v2.9.1 (2024-09-09) [GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.9.1) ### What's Changed #### Fixes * Fix Predicate issue in v2.9.0 by @sydney-runkle in [#10321](https://github.com/pydantic/pydantic/pull/10321) * Fixing `annotated-types` bound to `>=0.6.0` by @sydney-runkle in [#10327](https://github.com/pydantic/pydantic/pull/10327) * Turn `tzdata` install requirement into optional `timezone` dependency by @jakob-keller in [#10331](https://github.com/pydantic/pydantic/pull/10331) * Fix `IncExc` type alias definition by @Viicos in [#10339](https://github.com/pydantic/pydantic/pull/10339) * Use correct types namespace when building namedtuple core schemas by @Viicos in [#10337](https://github.com/pydantic/pydantic/pull/10337) * Fix evaluation of stringified annotations during namespace inspection by @Viicos in [#10347](https://github.com/pydantic/pydantic/pull/10347) * Fix tagged union serialization with alias generators by @sydney-runkle in [pydantic/pydantic-core#1442](https://github.com/pydantic/pydantic-core/pull/1442) ## v2.9.0 (2024-09-05) [GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.9.0) The code released in v2.9.0 is practically identical to that of v2.9.0b2. ### What's Changed #### New Features * Add support for `ZoneInfo` by @Youssefares in [#9896](https://github.com/pydantic/pydantic/pull/9896) * Add `Config.val_json_bytes` by @josh-newman in [#9770](https://github.com/pydantic/pydantic/pull/9770) * Add DSN for Snowflake by @aditkumar72 in [#10128](https://github.com/pydantic/pydantic/pull/10128) * Support `complex` number by @changhc in [#9654](https://github.com/pydantic/pydantic/pull/9654) * Add support for `annotated_types.Not` by @aditkumar72 in [#10210](https://github.com/pydantic/pydantic/pull/10210) * Allow `WithJsonSchema` to inject `$ref`s w/ `http` or `https` links by @dAIsySHEng1 in [#9863](https://github.com/pydantic/pydantic/pull/9863) * Allow validators to customize validation JSON schema by @Viicos in [#10094](https://github.com/pydantic/pydantic/pull/10094) * Support parametrized `PathLike` types by @nix010 in [#9764](https://github.com/pydantic/pydantic/pull/9764) * Add tagged union serializer that attempts to use `str` or `callable` discriminators to select the correct serializer by @sydney-runkle in [pydantic/pydantic-core#1397](https://github.com/pydantic/pydantic-core/pull/1397) #### Changes * Breaking Change: Merge `dict` type `json_schema_extra` by @sydney-runkle in [#9792](https://github.com/pydantic/pydantic/pull/9792) * For more info (how to replicate old behavior) on this change, see [here](https://pydantic.dev/docs/validation/dev/concepts/json_schema/#merging-json_schema_extra) * Refactor annotation injection for known (often generic) types by @sydney-runkle in [#9979](https://github.com/pydantic/pydantic/pull/9979) * Move annotation compatibility errors to validation phase by @sydney-runkle in [#9999](https://github.com/pydantic/pydantic/pull/9999) * Improve runtime errors for string constraints like `pattern` for incompatible types by @sydney-runkle in [#10158](https://github.com/pydantic/pydantic/pull/10158) * Remove `'allOf'` JSON schema workarounds by @dpeachey in [#10029](https://github.com/pydantic/pydantic/pull/10029) * Remove `typed_dict_cls` data from `CoreMetadata` by @sydney-runkle in [#10180](https://github.com/pydantic/pydantic/pull/10180) * Deprecate passing a dict to the `Examples` class by @Viicos in [#10181](https://github.com/pydantic/pydantic/pull/10181) * Remove `initial_metadata` from internal metadata construct by @sydney-runkle in [#10194](https://github.com/pydantic/pydantic/pull/10194) * Use `re.Pattern.search` instead of `re.Pattern.match` for consistency with `rust` behavior by @tinez in [pydantic/pydantic-core#1368](https://github.com/pydantic/pydantic-core/pull/1368) * Show value of wrongly typed data in `pydantic-core` serialization warning by @BoxyUwU in [pydantic/pydantic-core#1377](https://github.com/pydantic/pydantic-core/pull/1377) * Breaking Change: in `pydantic-core`, change `metadata` type hint in core schemas from `Any` -> `Dict[str, Any] | None` by @sydney-runkle in [pydantic/pydantic-core#1411](https://github.com/pydantic/pydantic-core/pull/1411) * Raise helpful warning when `self` isn't returned from model validator by @sydney-runkle in [#10255](https://github.com/pydantic/pydantic/pull/10255) #### Performance * Initial start at improving import times for modules, using caching primarily by @sydney-runkle in [#10009](https://github.com/pydantic/pydantic/pull/10009) * Using cached internal import for `BaseModel` by @sydney-runkle in [#10013](https://github.com/pydantic/pydantic/pull/10013) * Simplify internal generics logic - remove generator overhead by @sydney-runkle in [#10059](https://github.com/pydantic/pydantic/pull/10059) * Remove default module globals from types namespace by @sydney-runkle in [#10123](https://github.com/pydantic/pydantic/pull/10123) * Performance boost: skip caching parent namespaces in most cases by @sydney-runkle in [#10113](https://github.com/pydantic/pydantic/pull/10113) * Update ns stack with already copied ns by @sydney-runkle in [#10267](https://github.com/pydantic/pydantic/pull/10267) ##### Minor Internal Improvements * ⚡� Speed up `multiple_of_validator()` by 31% in `pydantic/_internal/_validators.py` by @misrasaurabh1 in [#9839](https://github.com/pydantic/pydantic/pull/9839) * ⚡� Speed up `ModelPrivateAttr.__set_name__()` by 18% in `pydantic/fields.py` by @misrasaurabh1 in [#9841](https://github.com/pydantic/pydantic/pull/9841) * ⚡� Speed up `dataclass()` by 7% in `pydantic/dataclasses.py` by @misrasaurabh1 in [#9843](https://github.com/pydantic/pydantic/pull/9843) * ⚡� Speed up function `_field_name_for_signature` by 37% in `pydantic/_internal/_signature.py` by @misrasaurabh1 in [#9951](https://github.com/pydantic/pydantic/pull/9951) * ⚡� Speed up method `GenerateSchema._unpack_refs_defs` by 26% in `pydantic/_internal/_generate_schema.py` by @misrasaurabh1 in [#9949](https://github.com/pydantic/pydantic/pull/9949) * ⚡� Speed up function `apply_each_item_validators` by 100% in `pydantic/_internal/_generate_schema.py` by @misrasaurabh1 in [#9950](https://github.com/pydantic/pydantic/pull/9950) * ⚡� Speed up method `ConfigWrapper.core_config` by 28% in `pydantic/_internal/_config.py` by @misrasaurabh1 in [#9953](https://github.com/pydantic/pydantic/pull/9953) #### Fixes * Respect `use_enum_values` on `Literal` types by @kwint in [#9787](https://github.com/pydantic/pydantic/pull/9787) * Prevent type error for exotic `BaseModel/RootModel` inheritance by @dmontagu in [#9913](https://github.com/pydantic/pydantic/pull/9913) * Fix typing issue with field_validator-decorated methods by @dmontagu in [#9914](https://github.com/pydantic/pydantic/pull/9914) * Replace `str` type annotation with `Any` in validator factories in documentation on validators by @maximilianfellhuber in [#9885](https://github.com/pydantic/pydantic/pull/9885) * Fix `ComputedFieldInfo.wrapped_property` pointer when a property setter is assigned by @tlambert03 in [#9892](https://github.com/pydantic/pydantic/pull/9892) * Fix recursive typing of `main.IncEnx` by @tlambert03 in [#9924](https://github.com/pydantic/pydantic/pull/9924) * Allow usage of `type[Annotated[...]]` by @Viicos in [#9932](https://github.com/pydantic/pydantic/pull/9932) * `mypy` plugin: handle frozen fields on a per-field basis by @dmontagu in [#9935](https://github.com/pydantic/pydantic/pull/9935) * Fix typo in `invalid-annotated-type` error code by @sydney-runkle in [#9948](https://github.com/pydantic/pydantic/pull/9948) * Simplify schema generation for `uuid`, `url`, and `ip` types by @sydney-runkle in [#9975](https://github.com/pydantic/pydantic/pull/9975) * Move `date` schemas to `_generate_schema.py` by @sydney-runkle in [#9976](https://github.com/pydantic/pydantic/pull/9976) * Move `decimal.Decimal` validation to `_generate_schema.py` by @sydney-runkle in [#9977](https://github.com/pydantic/pydantic/pull/9977) * Simplify IP address schema in `_std_types_schema.py` by @sydney-runkle in [#9959](https://github.com/pydantic/pydantic/pull/9959) * Fix type annotations for some potentially generic `GenerateSchema.match_type` options by @sydney-runkle in [#9961](https://github.com/pydantic/pydantic/pull/9961) * Add class name to "has conflict" warnings by @msabramo in [#9964](https://github.com/pydantic/pydantic/pull/9964) * Fix `dataclass` ignoring `default_factory` passed in Annotated by @kc0506 in [#9971](https://github.com/pydantic/pydantic/pull/9971) * Fix `Sequence` ignoring `discriminator` by @kc0506 in [#9980](https://github.com/pydantic/pydantic/pull/9980) * Fix typing for `IPvAnyAddress` and `IPvAnyInterface` by @haoyun in [#9990](https://github.com/pydantic/pydantic/pull/9990) * Fix false positives on v1 models in `mypy` plugin for `from_orm` check requiring from_attributes=True config by @radekwlsk in [#9938](https://github.com/pydantic/pydantic/pull/9938) * Apply `strict=True` to `__init__` in `mypy` plugin by @kc0506 in [#9998](https://github.com/pydantic/pydantic/pull/9998) * Refactor application of `deque` annotations by @sydney-runkle in [#10018](https://github.com/pydantic/pydantic/pull/10018) * Raise a better user error when failing to evaluate a forward reference by @Viicos in [#10030](https://github.com/pydantic/pydantic/pull/10030) * Fix evaluation of `__pydantic_extra__` annotation in specific circumstances by @Viicos in [#10070](https://github.com/pydantic/pydantic/pull/10070) * Fix `frozen` enforcement for `dataclasses` by @sydney-runkle in [#10066](https://github.com/pydantic/pydantic/pull/10066) * Remove logic to handle unused `__get_pydantic_core_schema__` signature by @Viicos in [#10075](https://github.com/pydantic/pydantic/pull/10075) * Use `is_annotated` consistently by @Viicos in [#10095](https://github.com/pydantic/pydantic/pull/10095) * Fix `PydanticDeprecatedSince26` typo by @kc0506 in [#10101](https://github.com/pydantic/pydantic/pull/10101) * Improve `pyright` tests, refactor model decorators signatures by @Viicos in [#10092](https://github.com/pydantic/pydantic/pull/10092) * Fix `ip` serialization logic by @sydney-runkle in [#10112](https://github.com/pydantic/pydantic/pull/10112) * Warn when frozen defined twice for `dataclasses` by @mochi22 in [#10082](https://github.com/pydantic/pydantic/pull/10082) * Do not compute JSON Schema default when plain serializers are used with `when_used` set to `'json-unless-none'` and the default value is `None` by @Viicos in [#10121](https://github.com/pydantic/pydantic/pull/10121) * Fix `ImportString` special cases by @sydney-runkle in [#10137](https://github.com/pydantic/pydantic/pull/10137) * Blacklist default globals to support exotic user code with `__` prefixed annotations by @sydney-runkle in [#10136](https://github.com/pydantic/pydantic/pull/10136) * Handle `nullable` schemas with `serialization` schema available during JSON Schema generation by @Viicos in [#10132](https://github.com/pydantic/pydantic/pull/10132) * Reorganize `BaseModel` annotations by @kc0506 in [#10110](https://github.com/pydantic/pydantic/pull/10110) * Fix core schema simplification when serialization schemas are involved in specific scenarios by @Viicos in [#10155](https://github.com/pydantic/pydantic/pull/10155) * Add support for stringified annotations when using `PrivateAttr` with `Annotated` by @Viicos in [#10157](https://github.com/pydantic/pydantic/pull/10157) * Fix JSON Schema `number` type for literal and enum schemas by @Viicos in [#10172](https://github.com/pydantic/pydantic/pull/10172) * Fix JSON Schema generation of fields with plain validators in serialization mode by @Viicos in [#10167](https://github.com/pydantic/pydantic/pull/10167) * Fix invalid JSON Schemas being generated for functions in certain scenarios by @Viicos in [#10188](https://github.com/pydantic/pydantic/pull/10188) * Make sure generated JSON Schemas are valid in tests by @Viicos in [#10182](https://github.com/pydantic/pydantic/pull/10182) * Fix key error with custom serializer by @sydney-runkle in [#10200](https://github.com/pydantic/pydantic/pull/10200) * Add 'wss' for allowed schemes in NatsDsn by @swelborn in [#10224](https://github.com/pydantic/pydantic/pull/10224) * Fix `Mapping` and `MutableMapping` annotations to use mapping schema instead of dict schema by @sydney-runkle in [#10020](https://github.com/pydantic/pydantic/pull/10020) * Fix JSON Schema generation for constrained dates by @Viicos in [#10185](https://github.com/pydantic/pydantic/pull/10185) * Fix discriminated union bug regression when using enums by @kfreezen in [pydantic/pydantic-core#1286](https://github.com/pydantic/pydantic-core/pull/1286) * Fix `field_serializer` with computed field when using `*` by @nix010 in [pydantic/pydantic-core#1349](https://github.com/pydantic/pydantic-core/pull/1349) * Try each option in `Union` serializer before inference by @sydney-runkle in [pydantic/pydantic-core#1398](https://github.com/pydantic/pydantic-core/pull/1398) * Fix `float` serialization behavior in `strict` mode by @sydney-runkle in [pydantic/pydantic-core#1400](https://github.com/pydantic/pydantic-core/pull/1400) * Introduce `exactness` into Decimal validation logic to improve union validation behavior by @sydney-runkle in [pydantic/pydantic-core#1405](https://github.com/pydantic/pydantic-core/pull/1405) * Fix new warnings assertions to use `pytest.warns()` by @mgorny in [#10241](https://github.com/pydantic/pydantic/pull/10241) * Fix a crash when cleaning the namespace in `ModelMetaclass` by @Viicos in [#10242](https://github.com/pydantic/pydantic/pull/10242) * Fix parent namespace issue with model rebuilds by @sydney-runkle in [#10257](https://github.com/pydantic/pydantic/pull/10257) * Remove defaults filter for namespace by @sydney-runkle in [#10261](https://github.com/pydantic/pydantic/pull/10261) * Use identity instead of equality after validating model in `__init__` by @Viicos in [#10264](https://github.com/pydantic/pydantic/pull/10264) * Support `BigInt` serialization for `int` subclasses by @kxx317 in [pydantic/pydantic-core#1417](https://github.com/pydantic/pydantic-core/pull/1417) * Support signature for wrap validators without `info` by @sydney-runkle in [#10277](https://github.com/pydantic/pydantic/pull/10277) * Ensure `__pydantic_complete__` is set when rebuilding `dataclasses` by @Viicos in [#10291](https://github.com/pydantic/pydantic/pull/10291) * Respect `schema_generator` config value in `TypeAdapter` by @sydney-runkle in [#10300](https://github.com/pydantic/pydantic/pull/10300) #### Packaging * Bump `ruff` to `v0.5.0` and `pyright` to `v1.1.369` by @sydney-runkle in [#9801](https://github.com/pydantic/pydantic/pull/9801) * Bump `pydantic-extra-types` to `v2.9.0` by @sydney-runkle in [#9832](https://github.com/pydantic/pydantic/pull/9832) * Support compatibility with `pdm v2.18.1` by @Viicos in [#10138](https://github.com/pydantic/pydantic/pull/10138) * Bump `v1` version stub to `v1.10.18` by @sydney-runkle in [#10214](https://github.com/pydantic/pydantic/pull/10214) * Bump `pydantic-core` to `v2.23.2` by @sydney-runkle in [#10311](https://github.com/pydantic/pydantic/pull/10311) ### New Contributors #### `pydantic` * @kwint made their first contribution in [#9787](https://github.com/pydantic/pydantic/pull/9787) * @seekinginfiniteloop made their first contribution in [#9822](https://github.com/pydantic/pydantic/pull/9822) * @a-alexander made their first contribution in [#9848](https://github.com/pydantic/pydantic/pull/9848) * @maximilianfellhuber made their first contribution in [#9885](https://github.com/pydantic/pydantic/pull/9885) * @karmaBonfire made their first contribution in [#9945](https://github.com/pydantic/pydantic/pull/9945) * @s-rigaud made their first contribution in [#9958](https://github.com/pydantic/pydantic/pull/9958) * @msabramo made their first contribution in [#9964](https://github.com/pydantic/pydantic/pull/9964) * @DimaCybr made their first contribution in [#9972](https://github.com/pydantic/pydantic/pull/9972) * @kc0506 made their first contribution in [#9971](https://github.com/pydantic/pydantic/pull/9971) * @haoyun made their first contribution in [#9990](https://github.com/pydantic/pydantic/pull/9990) * @radekwlsk made their first contribution in [#9938](https://github.com/pydantic/pydantic/pull/9938) * @dpeachey made their first contribution in [#10029](https://github.com/pydantic/pydantic/pull/10029) * @BoxyUwU made their first contribution in [#10085](https://github.com/pydantic/pydantic/pull/10085) * @mochi22 made their first contribution in [#10082](https://github.com/pydantic/pydantic/pull/10082) * @aditkumar72 made their first contribution in [#10128](https://github.com/pydantic/pydantic/pull/10128) * @changhc made their first contribution in [#9654](https://github.com/pydantic/pydantic/pull/9654) * @insumanth made their first contribution in [#10229](https://github.com/pydantic/pydantic/pull/10229) * @AdolfoVillalobos made their first contribution in [#10240](https://github.com/pydantic/pydantic/pull/10240) * @bllchmbrs made their first contribution in [#10270](https://github.com/pydantic/pydantic/pull/10270) #### `pydantic-core` * @kfreezen made their first contribution in [pydantic/pydantic-core#1286](https://github.com/pydantic/pydantic-core/pull/1286) * @tinez made their first contribution in [pydantic/pydantic-core#1368](https://github.com/pydantic/pydantic-core/pull/1368) * @fft001 made their first contribution in [pydantic/pydantic-core#1362](https://github.com/pydantic/pydantic-core/pull/1362) * @nix010 made their first contribution in [pydantic/pydantic-core#1349](https://github.com/pydantic/pydantic-core/pull/1349) * @BoxyUwU made their first contribution in [pydantic/pydantic-core#1379](https://github.com/pydantic/pydantic-core/pull/1379) * @candleindark made their first contribution in [pydantic/pydantic-core#1404](https://github.com/pydantic/pydantic-core/pull/1404) * @changhc made their first contribution in [pydantic/pydantic-core#1331](https://github.com/pydantic/pydantic-core/pull/1331) ## v2.9.0b2 (2024-08-30) Pre-release, see [the GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.9.0b2) for details. ## v2.9.0b1 (2024-08-26) Pre-release, see [the GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.9.0b1) for details. ## v2.8.2 (2024-07-03) [GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.8.2) ### What's Changed #### Fixes * Fix issue with assertion caused by pluggable schema validator by @dmontagu in [#9838](https://github.com/pydantic/pydantic/pull/9838) ## v2.8.1 (2024-07-03) [GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.8.1) ### What's Changed #### Packaging * Bump `ruff` to `v0.5.0` and `pyright` to `v1.1.369` by @sydney-runkle in [#9801](https://github.com/pydantic/pydantic/pull/9801) * Bump `pydantic-core` to `v2.20.1`, `pydantic-extra-types` to `v2.9.0` by @sydney-runkle in [#9832](https://github.com/pydantic/pydantic/pull/9832) #### Fixes * Fix breaking change in `to_snake` from v2.7 -> v2.8 by @sydney-runkle in [#9812](https://github.com/pydantic/pydantic/pull/9812) * Fix list constraint json schema application by @sydney-runkle in [#9818](https://github.com/pydantic/pydantic/pull/9818) * Support time duration more than 23 by @nix010 in [pydantic/speedate#64](https://github.com/pydantic/speedate/pull/64) * Fix millisecond fraction being handled with the wrong scale by @davidhewitt in [pydantic/speedate#65](https://github.com/pydantic/speedate/pull/65) * Handle negative fractional durations correctly by @sydney-runkle in [pydantic/speedate#71](https://github.com/pydantic/speedate/pull/71) ## v2.8.0 (2024-07-01) [GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.8.0) The code released in v2.8.0 is functionally identical to that of v2.8.0b1. ### What's Changed #### Packaging * Update citation version automatically with new releases by @sydney-runkle in [#9673](https://github.com/pydantic/pydantic/pull/9673) * Bump pyright to `v1.1.367` and add type checking tests for pipeline API by @adriangb in [#9674](https://github.com/pydantic/pydantic/pull/9674) * Update `pydantic.v1` stub to `v1.10.17` by @sydney-runkle in [#9707](https://github.com/pydantic/pydantic/pull/9707) * General package updates to prep for `v2.8.0b1` by @sydney-runkle in [#9741](https://github.com/pydantic/pydantic/pull/9741) * Bump `pydantic-core` to `v2.20.0` by @sydney-runkle in [#9745](https://github.com/pydantic/pydantic/pull/9745) * Add support for Python 3.13 by @sydney-runkle in [#9743](https://github.com/pydantic/pydantic/pull/9743) * Update `pdm` version used for `pdm.lock` to v2.16.1 by @sydney-runkle in [#9761](https://github.com/pydantic/pydantic/pull/9761) * Update to `ruff` `v0.4.8` by @Viicos in [#9585](https://github.com/pydantic/pydantic/pull/9585) #### New Features * Experimental: support `defer_build` for `TypeAdapter` by @MarkusSintonen in [#8939](https://github.com/pydantic/pydantic/pull/8939) * Implement `deprecated` field in json schema by @NeevCohen in [#9298](https://github.com/pydantic/pydantic/pull/9298) * Experimental: Add pipeline API by @adriangb in [#9459](https://github.com/pydantic/pydantic/pull/9459) * Add support for programmatic title generation by @NeevCohen in [#9183](https://github.com/pydantic/pydantic/pull/9183) * Implement `fail_fast` feature by @uriyyo in [#9708](https://github.com/pydantic/pydantic/pull/9708) * Add `ser_json_inf_nan='strings'` mode to produce valid JSON by @josh-newman in [pydantic/pydantic-core#1307](https://github.com/pydantic/pydantic-core/pull/1307) #### Changes * Add warning when "alias" is set in ignored `Annotated` field by @nix010 in [#9170](https://github.com/pydantic/pydantic/pull/9170) * Support serialization of some serializable defaults in JSON schema by @sydney-runkle in [#9624](https://github.com/pydantic/pydantic/pull/9624) * Relax type specification for `__validators__` values in `create_model` by @sydney-runkle in [#9697](https://github.com/pydantic/pydantic/pull/9697) * **Breaking Change:** Improve `smart` union matching logic by @sydney-runkle in [pydantic/pydantic-core#1322](https://github.com/pydantic/pydantic-core/pull/1322) You can read more about our `smart` union matching logic [here](https://pydantic.dev/docs/validation/dev/concepts/unions/#smart-mode). In some cases, if the old behavior is desired, you can switch to `left-to-right` mode and change the order of your `Union` members. #### Performance ##### Internal Improvements * ⚡� Speed up `_display_error_loc()` by 25% in `pydantic/v1/error_wrappers.py` by @misrasaurabh1 in [#9653](https://github.com/pydantic/pydantic/pull/9653) * ⚡� Speed up `_get_all_json_refs()` by 34% in `pydantic/json_schema.py` by @misrasaurabh1 in [#9650](https://github.com/pydantic/pydantic/pull/9650) * ⚡� Speed up `is_pydantic_dataclass()` by 41% in `pydantic/dataclasses.py` by @misrasaurabh1 in [#9652](https://github.com/pydantic/pydantic/pull/9652) * ⚡� Speed up `to_snake()` by 27% in `pydantic/alias_generators.py` by @misrasaurabh1 in [#9747](https://github.com/pydantic/pydantic/pull/9747) * ⚡� Speed up `unwrap_wrapped_function()` by 93% in `pydantic/_internal/_decorators.py` by @misrasaurabh1 in [#9727](https://github.com/pydantic/pydantic/pull/9727) #### Fixes * Replace `__spec__.parent` with `__package__` by @hramezani in [#9331](https://github.com/pydantic/pydantic/pull/9331) * Fix Outputted Model JSON Schema for `Sequence` type by @anesmemisevic in [#9303](https://github.com/pydantic/pydantic/pull/9303) * Fix typing of `_frame_depth` by @Viicos in [#9353](https://github.com/pydantic/pydantic/pull/9353) * Make `ImportString` json schema compatible by @amitschang in [#9344](https://github.com/pydantic/pydantic/pull/9344) * Hide private attributes (`PrivateAttr`) from `__init__` signature in type checkers by @idan22moral in [#9293](https://github.com/pydantic/pydantic/pull/9293) * Make detection of `TypeVar` defaults robust to the CPython `PEP-696` implementation by @AlexWaygood in [#9426](https://github.com/pydantic/pydantic/pull/9426) * Fix usage of `PlainSerializer` with builtin types by @Viicos in [#9450](https://github.com/pydantic/pydantic/pull/9450) * Add more robust custom validation examples by @ChrisPappalardo in [#9468](https://github.com/pydantic/pydantic/pull/9468) * Fix ignored `strict` specification for `StringConstraint(strict=False)` by @vbmendes in [#9476](https://github.com/pydantic/pydantic/pull/9476) * **Breaking Change:** Use PEP 570 syntax by @Viicos in [#9479](https://github.com/pydantic/pydantic/pull/9479) * Use `Self` where possible by @Viicos in [#9479](https://github.com/pydantic/pydantic/pull/9479) * Do not alter `RootModel.model_construct` signature in the `mypy` plugin by @Viicos in [#9480](https://github.com/pydantic/pydantic/pull/9480) * Fixed type hint of `validation_context` by @OhioDschungel6 in [#9508](https://github.com/pydantic/pydantic/pull/9508) * Support context being passed to TypeAdapter's `dump_json`/`dump_python` by @alexcouper in [#9495](https://github.com/pydantic/pydantic/pull/9495) * Updates type signature for `Field()` constructor by @bjmc in [#9484](https://github.com/pydantic/pydantic/pull/9484) * Improve builtin alias generators by @sydney-runkle in [#9561](https://github.com/pydantic/pydantic/pull/9561) * Fix typing of `TypeAdapter` by @Viicos in [#9570](https://github.com/pydantic/pydantic/pull/9570) * Add fallback default value for private fields in `__setstate__` of BaseModel by @anhpham1509 in [#9584](https://github.com/pydantic/pydantic/pull/9584) * Support `PEP 746` by @adriangb in [#9587](https://github.com/pydantic/pydantic/pull/9587) * Allow validator and serializer functions to have default values by @Viicos in [#9478](https://github.com/pydantic/pydantic/pull/9478) * Fix bug with mypy plugin's handling of covariant `TypeVar` fields by @dmontagu in [#9606](https://github.com/pydantic/pydantic/pull/9606) * Fix multiple annotation / constraint application logic by @sydney-runkle in [#9623](https://github.com/pydantic/pydantic/pull/9623) * Respect `regex` flags in validation and json schema by @sydney-runkle in [#9591](https://github.com/pydantic/pydantic/pull/9591) * Fix type hint on `IpvAnyAddress` by @sydney-runkle in [#9640](https://github.com/pydantic/pydantic/pull/9640) * Allow a field specifier on `__pydantic_extra__` by @dmontagu in [#9659](https://github.com/pydantic/pydantic/pull/9659) * Use normalized case for file path comparison by @sydney-runkle in [#9737](https://github.com/pydantic/pydantic/pull/9737) * Modify constraint application logic to allow field constraints on `Optional[Decimal]` by @lazyhope in [#9754](https://github.com/pydantic/pydantic/pull/9754) * `validate_call` type params fix by @sydney-runkle in [#9760](https://github.com/pydantic/pydantic/pull/9760) * Check all warnings returned by pytest.warns() by @s-t-e-v-e-n-k in [#9702](https://github.com/pydantic/pydantic/pull/9702) * Reuse `re.Pattern` object in regex patterns to allow for regex flags by @sydney-runkle in [pydantic/pydantic-core#1318](https://github.com/pydantic/pydantic-core/pull/1318) ### New Contributors * @idan22moral made their first contribution in [#9294](https://github.com/pydantic/pydantic/pull/9294) * @anesmemisevic made their first contribution in [#9303](https://github.com/pydantic/pydantic/pull/9303) * @max-muoto made their first contribution in [#9338](https://github.com/pydantic/pydantic/pull/9338) * @amitschang made their first contribution in [#9344](https://github.com/pydantic/pydantic/pull/9344) * @paulmartin91 made their first contribution in [#9410](https://github.com/pydantic/pydantic/pull/9410) * @OhioDschungel6 made their first contribution in [#9405](https://github.com/pydantic/pydantic/pull/9405) * @AlexWaygood made their first contribution in [#9426](https://github.com/pydantic/pydantic/pull/9426) * @kinuax made their first contribution in [#9433](https://github.com/pydantic/pydantic/pull/9433) * @antoni-jamiolkowski made their first contribution in [#9431](https://github.com/pydantic/pydantic/pull/9431) * @candleindark made their first contribution in [#9448](https://github.com/pydantic/pydantic/pull/9448) * @nix010 made their first contribution in [#9170](https://github.com/pydantic/pydantic/pull/9170) * @tomy0000000 made their first contribution in [#9457](https://github.com/pydantic/pydantic/pull/9457) * @vbmendes made their first contribution in [#9470](https://github.com/pydantic/pydantic/pull/9470) * @micheleAlberto made their first contribution in [#9471](https://github.com/pydantic/pydantic/pull/9471) * @ChrisPappalardo made their first contribution in [#9468](https://github.com/pydantic/pydantic/pull/9468) * @blueTurtz made their first contribution in [#9475](https://github.com/pydantic/pydantic/pull/9475) * @WinterBlue16 made their first contribution in [#9477](https://github.com/pydantic/pydantic/pull/9477) * @bittner made their first contribution in [#9500](https://github.com/pydantic/pydantic/pull/9500) * @alexcouper made their first contribution in [#9495](https://github.com/pydantic/pydantic/pull/9495) * @bjmc made their first contribution in [#9484](https://github.com/pydantic/pydantic/pull/9484) * @pjvv made their first contribution in [#9529](https://github.com/pydantic/pydantic/pull/9529) * @nedbat made their first contribution in [#9530](https://github.com/pydantic/pydantic/pull/9530) * @gunnellEvan made their first contribution in [#9469](https://github.com/pydantic/pydantic/pull/9469) * @jaymbans made their first contribution in [#9531](https://github.com/pydantic/pydantic/pull/9531) * @MarcBresson made their first contribution in [#9534](https://github.com/pydantic/pydantic/pull/9534) * @anhpham1509 made their first contribution in [#9584](https://github.com/pydantic/pydantic/pull/9584) * @K-dash made their first contribution in [#9595](https://github.com/pydantic/pydantic/pull/9595) * @s-t-e-v-e-n-k made their first contribution in [#9527](https://github.com/pydantic/pydantic/pull/9527) * @airwoodix made their first contribution in [#9506](https://github.com/pydantic/pydantic/pull/9506) * @misrasaurabh1 made their first contribution in [#9653](https://github.com/pydantic/pydantic/pull/9653) * @AlessandroMiola made their first contribution in [#9740](https://github.com/pydantic/pydantic/pull/9740) * @mylapallilavanyaa made their first contribution in [#9746](https://github.com/pydantic/pydantic/pull/9746) * @lazyhope made their first contribution in [#9754](https://github.com/pydantic/pydantic/pull/9754) * @YassinNouh21 made their first contribution in [#9759](https://github.com/pydantic/pydantic/pull/9759) ## v2.8.0b1 (2024-06-27) Pre-release, see [the GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.8.0b1) for details. ## v2.7.4 (2024-06-12) [Github release](https://github.com/pydantic/pydantic/releases/tag/v2.7.4) ### What's Changed #### Packaging * Bump `pydantic.v1` to `v1.10.16` reference by @sydney-runkle in [#9639](https://github.com/pydantic/pydantic/pull/9639) #### Fixes * Specify `recursive_guard` as kwarg in `FutureRef._evaluate` by @vfazio in [#9612](https://github.com/pydantic/pydantic/pull/9612) ## v2.7.3 (2024-06-03) [GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.7.3) ### What's Changed #### Packaging * Bump `pydantic-core` to `v2.18.4` by @sydney-runkle in [#9550](https://github.com/pydantic/pydantic/pull/9550) #### Fixes * Fix u style unicode strings in python @samuelcolvin in [pydantic/jiter#110](https://github.com/pydantic/jiter/pull/110) ## v2.7.2 (2024-05-28) [GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.7.2) ### What's Changed #### Packaging * Bump `pydantic-core` to `v2.18.3` by @sydney-runkle in [#9515](https://github.com/pydantic/pydantic/pull/9515) #### Fixes * Replace `__spec__.parent` with `__package__` by @hramezani in [#9331](https://github.com/pydantic/pydantic/pull/9331) * Fix validation of `int`s with leading unary minus by @RajatRajdeep in [pydantic/pydantic-core#1291](https://github.com/pydantic/pydantic-core/pull/1291) * Fix `str` subclass validation for enums by @sydney-runkle in [pydantic/pydantic-core#1273](https://github.com/pydantic/pydantic-core/pull/1273) * Support `BigInt`s in `Literal`s and `Enum`s by @samuelcolvin in [pydantic/pydantic-core#1297](https://github.com/pydantic/pydantic-core/pull/1297) * Fix: uuid - allow `str` subclass as input by @davidhewitt in [pydantic/pydantic-core#1296](https://github.com/pydantic/pydantic-core/pull/1296) ## v2.7.1 (2024-04-23) [GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.7.1) ### What's Changed #### Packaging * Bump `pydantic-core` to `v2.18.2` by @sydney-runkle in [#9307](https://github.com/pydantic/pydantic/pull/9307) #### New Features * Ftp and Websocket connection strings support by @CherrySuryp in [#9205](https://github.com/pydantic/pydantic/pull/9205) #### Changes * Use field description for RootModel schema description when there is `…` by @LouisGobert in [#9214](https://github.com/pydantic/pydantic/pull/9214) #### Fixes * Fix `validation_alias` behavior with `model_construct` for `AliasChoices` and `AliasPath` by @sydney-runkle in [#9223](https://github.com/pydantic/pydantic/pull/9223) * Revert `typing.Literal` and import it outside the TYPE_CHECKING block by @frost-nzcr4 in [#9232](https://github.com/pydantic/pydantic/pull/9232) * Fix `Secret` serialization schema, applicable for unions by @sydney-runkle in [#9240](https://github.com/pydantic/pydantic/pull/9240) * Fix `strict` application to `function-after` with `use_enum_values` by @sydney-runkle in [#9279](https://github.com/pydantic/pydantic/pull/9279) * Address case where `model_construct` on a class which defines `model_post_init` fails with `AttributeError` by @babygrimes in [#9168](https://github.com/pydantic/pydantic/pull/9168) * Fix `model_json_schema` with config types by @NeevCohen in [#9287](https://github.com/pydantic/pydantic/pull/9287) * Support multiple zeros as an `int` by @samuelcolvin in [pydantic/pydantic-core#1269](https://github.com/pydantic/pydantic-core/pull/1269) * Fix validation of `int`s with leading unary plus by @cknv in [pydantic/pydantic-core#1272](https://github.com/pydantic/pydantic-core/pull/1272) * Fix interaction between `extra != 'ignore'` and `from_attributes=True` by @davidhewitt in [pydantic/pydantic-core#1276](https://github.com/pydantic/pydantic-core/pull/1276) * Handle error from `Enum`'s `missing` function as `ValidationError` by @sydney-runkle in [pydantic/pydantic-core#1274](https://github.com/pydantic/pydantic-core/pull/1754) * Fix memory leak with `Iterable` validation by @davidhewitt in [pydantic/pydantic-core#1271](https://github.com/pydantic/pydantic-core/pull/1751) ### New Contributors * @zzstoatzz made their first contribution in [#9219](https://github.com/pydantic/pydantic/pull/9219) * @frost-nzcr4 made their first contribution in [#9232](https://github.com/pydantic/pydantic/pull/9232) * @CherrySuryp made their first contribution in [#9205](https://github.com/pydantic/pydantic/pull/9205) * @vagenas made their first contribution in [#9268](https://github.com/pydantic/pydantic/pull/9268) * @ollz272 made their first contribution in [#9262](https://github.com/pydantic/pydantic/pull/9262) * @babygrimes made their first contribution in [#9168](https://github.com/pydantic/pydantic/pull/9168) * @swelborn made their first contribution in [#9296](https://github.com/pydantic/pydantic/pull/9296) * @kf-novi made their first contribution in [#9236](https://github.com/pydantic/pydantic/pull/9236) * @lgeiger made their first contribution in [#9288](https://github.com/pydantic/pydantic/pull/9288) ## v2.7.0 (2024-04-11) [GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.7.0) The code released in v2.7.0 is practically identical to that of v2.7.0b1. ### What's Changed #### Packaging * Reorganize `pyproject.toml` sections by @Viicos in [#8899](https://github.com/pydantic/pydantic/pull/8899) * Bump `pydantic-core` to `v2.18.1` by @sydney-runkle in [#9211](https://github.com/pydantic/pydantic/pull/9211) * Adopt `jiter` `v0.2.0` by @samuelcolvin in [pydantic/pydantic-core#1250](https://github.com/pydantic/pydantic-core/pull/1250) #### New Features * Extract attribute docstrings from `FieldInfo.description` by @Viicos in [#6563](https://github.com/pydantic/pydantic/pull/6563) * Add a `with_config` decorator to comply with typing spec by @Viicos in [#8611](https://github.com/pydantic/pydantic/pull/8611) * Allow an optional separator splitting the value and unit of the result of `ByteSize.human_readable` by @jks15satoshi in [#8706](https://github.com/pydantic/pydantic/pull/8706) * Add generic `Secret` base type by @conradogarciaberrotaran in [#8519](https://github.com/pydantic/pydantic/pull/8519) * Make use of `Sphinx` inventories for cross references in docs by @Viicos in [#8682](https://github.com/pydantic/pydantic/pull/8682) * Add environment variable to disable plugins by @geospackle in [#8767](https://github.com/pydantic/pydantic/pull/8767) * Add support for `deprecated` fields by @Viicos in [#8237](https://github.com/pydantic/pydantic/pull/8237) * Allow `field_serializer('*')` by @ornariece in [#9001](https://github.com/pydantic/pydantic/pull/9001) * Handle a case when `model_config` is defined as a model property by @alexeyt101 in [#9004](https://github.com/pydantic/pydantic/pull/9004) * Update `create_model()` to support `typing.Annotated` as input by @wannieman98 in [#8947](https://github.com/pydantic/pydantic/pull/8947) * Add `ClickhouseDsn` support by @solidguy7 in [#9062](https://github.com/pydantic/pydantic/pull/9062) * Add support for `re.Pattern[str]` to `pattern` field by @jag-k in [#9053](https://github.com/pydantic/pydantic/pull/9053) * Support for `serialize_as_any` runtime setting by @sydney-runkle in [#8830](https://github.com/pydantic/pydantic/pull/8830) * Add support for `typing.Self` by @Youssefares in [#9023](https://github.com/pydantic/pydantic/pull/9023) * Ability to pass `context` to serialization by @ornariece in [#8965](https://github.com/pydantic/pydantic/pull/8965) * Add feedback widget to docs with flarelytics integration by @sydney-runkle in [#9129](https://github.com/pydantic/pydantic/pull/9129) * Support for parsing partial JSON strings in Python by @samuelcolvin in [pydantic/jiter#66](https://github.com/pydantic/jiter/pull/66) **Finalized in v2.7.0, rather than v2.7.0b1:** * Add support for field level number to str coercion option by @NeevCohen in [#9137](https://github.com/pydantic/pydantic/pull/9137) * Update `warnings` parameter for serialization utilities to allow raising a warning by @Lance-Drane in [#9166](https://github.com/pydantic/pydantic/pull/9166) #### Changes * Correct docs, logic for `model_construct` behavior with `extra` by @sydney-runkle in [#8807](https://github.com/pydantic/pydantic/pull/8807) * Improve error message for improper `RootModel` subclasses by @sydney-runkle in [#8857](https://github.com/pydantic/pydantic/pull/8857) * **Breaking Change:** Use `PEP570` syntax by @Viicos in [#8940](https://github.com/pydantic/pydantic/pull/8940) * Add `enum` and `type` to the JSON schema for single item literals by @dmontagu in [#8944](https://github.com/pydantic/pydantic/pull/8944) * Deprecate `update_json_schema` internal function by @sydney-runkle in [#9125](https://github.com/pydantic/pydantic/pull/9125) * Serialize duration to hour minute second, instead of just seconds by @kakilangit in [pydantic/speedate#50](https://github.com/pydantic/speedate/pull/50) * Trimming str before parsing to int and float by @hungtsetse in [pydantic/pydantic-core#1203](https://github.com/pydantic/pydantic-core/pull/1203) #### Performance * `enum` validator improvements by @samuelcolvin in [#9045](https://github.com/pydantic/pydantic/pull/9045) * Move `enum` validation and serialization to Rust by @samuelcolvin in [#9064](https://github.com/pydantic/pydantic/pull/9064) * Improve schema generation for nested dataclasses by @sydney-runkle in [#9114](https://github.com/pydantic/pydantic/pull/9114) * Fast path for ASCII python string creation in JSON by @samuelcolvin in [pydantic/jiter#72](https://github.com/pydantic/jiter/pull/72) * SIMD integer and string JSON parsing on `aarch64`(**Note:** SIMD on x86 will be implemented in a future release) by @samuelcolvin in [pydantic/jiter#65](https://github.com/pydantic/jiter/pull/65) * Support JSON `Cow` from `jiter` by @davidhewitt in [pydantic/pydantic-core#1231](https://github.com/pydantic/pydantic-core/pull/1231) * MAJOR performance improvement: update to PyO3 0.21 final by @davidhewitt in [pydantic/pydantic-core#1248](https://github.com/pydantic/pydantic-core/pull/1248) * cache Python strings by @samuelcolvin in [pydantic/pydantic-core#1240](https://github.com/pydantic/pydantic-core/pull/1240) #### Fixes * Fix strict parsing for some `Sequence`s by @sydney-runkle in [#8614](https://github.com/pydantic/pydantic/pull/8614) * Add a check on the existence of `__qualname__` by @anci3ntr0ck in [#8642](https://github.com/pydantic/pydantic/pull/8642) * Handle `__pydantic_extra__` annotation being a string or inherited by @alexmojaki in [#8659](https://github.com/pydantic/pydantic/pull/8659) * Fix json validation for `NameEmail` by @Holi0317 in [#8650](https://github.com/pydantic/pydantic/pull/8650) * Fix type-safety of attribute access in `BaseModel` by @bluenote10 in [#8651](https://github.com/pydantic/pydantic/pull/8651) * Fix bug with `mypy` plugin and `no_strict_optional = True` by @dmontagu in [#8666](https://github.com/pydantic/pydantic/pull/8666) * Fix `ByteSize` error `type` change by @sydney-runkle in [#8681](https://github.com/pydantic/pydantic/pull/8681) * Fix inheriting annotations in dataclasses by @sydney-runkle in [#8679](https://github.com/pydantic/pydantic/pull/8679) * Fix regression in core schema generation for indirect definition references by @dmontagu in [#8702](https://github.com/pydantic/pydantic/pull/8702) * Fix unsupported types bug with plain validator by @sydney-runkle in [#8710](https://github.com/pydantic/pydantic/pull/8710) * Reverting problematic fix from 2.6 release, fixing schema building bug by @sydney-runkle in [#8718](https://github.com/pydantic/pydantic/pull/8718) * fixes `__pydantic_config__` ignored for TypeDict by @13sin in [#8734](https://github.com/pydantic/pydantic/pull/8734) * Fix test failures with `pytest v8.0.0` due to `pytest.warns()` starting to work inside `pytest.raises()` by @mgorny in [#8678](https://github.com/pydantic/pydantic/pull/8678) * Use `is_valid_field` from 1.x for `mypy` plugin by @DanielNoord in [#8738](https://github.com/pydantic/pydantic/pull/8738) * Better-support `mypy` strict equality flag by @dmontagu in [#8799](https://github.com/pydantic/pydantic/pull/8799) * model_json_schema export with Annotated types misses 'required' parameters by @LouisGobert in [#8793](https://github.com/pydantic/pydantic/pull/8793) * Fix default inclusion in `FieldInfo.__repr_args__` by @sydney-runkle in [#8801](https://github.com/pydantic/pydantic/pull/8801) * Fix resolution of forward refs in dataclass base classes that are not present in the subclass module namespace by @matsjoyce-refeyn in [#8751](https://github.com/pydantic/pydantic/pull/8751) * Fix `BaseModel` type annotations to be resolvable by `typing.get_type_hints` by @devmonkey22 in [#7680](https://github.com/pydantic/pydantic/pull/7680) * Fix: allow empty string aliases with `AliasGenerator` by @sydney-runkle in [#8810](https://github.com/pydantic/pydantic/pull/8810) * Fix test along with `date` -> `datetime` timezone assumption fix by @sydney-runkle in [#8823](https://github.com/pydantic/pydantic/pull/8823) * Fix deprecation warning with usage of `ast.Str` by @Viicos in [#8837](https://github.com/pydantic/pydantic/pull/8837) * Add missing `deprecated` decorators by @Viicos in [#8877](https://github.com/pydantic/pydantic/pull/8877) * Fix serialization of `NameEmail` if name includes an email address by @NeevCohen in [#8860](https://github.com/pydantic/pydantic/pull/8860) * Add information about class in error message of schema generation by @Czaki in [#8917](https://github.com/pydantic/pydantic/pull/8917) * Make `TypeAdapter`'s typing compatible with special forms by @adriangb in [#8923](https://github.com/pydantic/pydantic/pull/8923) * Fix issue with config behavior being baked into the ref schema for `enum`s by @dmontagu in [#8920](https://github.com/pydantic/pydantic/pull/8920) * More helpful error re wrong `model_json_schema` usage by @sydney-runkle in [#8928](https://github.com/pydantic/pydantic/pull/8928) * Fix nested discriminated union schema gen, pt 2 by @sydney-runkle in [#8932](https://github.com/pydantic/pydantic/pull/8932) * Fix schema build for nested dataclasses / TypedDicts with discriminators by @sydney-runkle in [#8950](https://github.com/pydantic/pydantic/pull/8950) * Remove unnecessary logic for definitions schema gen with discriminated unions by @sydney-runkle in [#8951](https://github.com/pydantic/pydantic/pull/8951) * Fix handling of optionals in `mypy` plugin by @dmontagu in [#9008](https://github.com/pydantic/pydantic/pull/9008) * Fix `PlainSerializer` usage with std type constructor by @sydney-runkle in [#9031](https://github.com/pydantic/pydantic/pull/9031) * Remove unnecessary warning for config in plugin by @dmontagu in [#9039](https://github.com/pydantic/pydantic/pull/9039) * Fix default value serializing by @NeevCohen in [#9066](https://github.com/pydantic/pydantic/pull/9066) * Fix extra fields check in `Model.__getattr__()` by @NeevCohen in [#9082](https://github.com/pydantic/pydantic/pull/9082) * Fix `ClassVar` forward ref inherited from parent class by @alexmojaki in [#9097](https://github.com/pydantic/pydantic/pull/9097) * fix sequence like validator with strict `True` by @andresliszt in [#8977](https://github.com/pydantic/pydantic/pull/8977) * Improve warning message when a field name shadows a field in a parent model by @chan-vince in [#9105](https://github.com/pydantic/pydantic/pull/9105) * Do not warn about shadowed fields if they are not redefined in a child class by @chan-vince in [#9111](https://github.com/pydantic/pydantic/pull/9111) * Fix discriminated union bug with unsubstituted type var by @sydney-runkle in [#9124](https://github.com/pydantic/pydantic/pull/9124) * Support serialization of `deque` when passed to `Sequence[blah blah blah]` by @sydney-runkle in [#9128](https://github.com/pydantic/pydantic/pull/9128) * Init private attributes from super-types in `model_post_init` by @Viicos in [#9134](https://github.com/pydantic/pydantic/pull/9134) * fix `model_construct` with `validation_alias` by @ornariece in [#9144](https://github.com/pydantic/pydantic/pull/9144) * Ensure json-schema generator handles `Literal` `null` types by @bruno-f-cruz in [#9135](https://github.com/pydantic/pydantic/pull/9135) * **Fixed in v2.7.0**: Fix allow extra generic by @dmontagu in [#9193](https://github.com/pydantic/pydantic/pull/9193) ### New Contributors * @hungtsetse made their first contribution in [#8546](https://github.com/pydantic/pydantic/pull/8546) * @StrawHatDrag0n made their first contribution in [#8583](https://github.com/pydantic/pydantic/pull/8583) * @anci3ntr0ck made their first contribution in [#8642](https://github.com/pydantic/pydantic/pull/8642) * @Holi0317 made their first contribution in [#8650](https://github.com/pydantic/pydantic/pull/8650) * @bluenote10 made their first contribution in [#8651](https://github.com/pydantic/pydantic/pull/8651) * @ADSteele916 made their first contribution in [#8703](https://github.com/pydantic/pydantic/pull/8703) * @musicinmybrain made their first contribution in [#8731](https://github.com/pydantic/pydantic/pull/8731) * @jks15satoshi made their first contribution in [#8706](https://github.com/pydantic/pydantic/pull/8706) * @13sin made their first contribution in [#8734](https://github.com/pydantic/pydantic/pull/8734) * @DanielNoord made their first contribution in [#8738](https://github.com/pydantic/pydantic/pull/8738) * @conradogarciaberrotaran made their first contribution in [#8519](https://github.com/pydantic/pydantic/pull/8519) * @chris-griffin made their first contribution in [#8775](https://github.com/pydantic/pydantic/pull/8775) * @LouisGobert made their first contribution in [#8793](https://github.com/pydantic/pydantic/pull/8793) * @matsjoyce-refeyn made their first contribution in [#8751](https://github.com/pydantic/pydantic/pull/8751) * @devmonkey22 made their first contribution in [#7680](https://github.com/pydantic/pydantic/pull/7680) * @adamency made their first contribution in [#8847](https://github.com/pydantic/pydantic/pull/8847) * @MamfTheKramf made their first contribution in [#8851](https://github.com/pydantic/pydantic/pull/8851) * @ornariece made their first contribution in [#9001](https://github.com/pydantic/pydantic/pull/9001) * @alexeyt101 made their first contribution in [#9004](https://github.com/pydantic/pydantic/pull/9004) * @wannieman98 made their first contribution in [#8947](https://github.com/pydantic/pydantic/pull/8947) * @solidguy7 made their first contribution in [#9062](https://github.com/pydantic/pydantic/pull/9062) * @kloczek made their first contribution in [#9047](https://github.com/pydantic/pydantic/pull/9047) * @jag-k made their first contribution in [#9053](https://github.com/pydantic/pydantic/pull/9053) * @priya-gitTest made their first contribution in [#9088](https://github.com/pydantic/pydantic/pull/9088) * @Youssefares made their first contribution in [#9023](https://github.com/pydantic/pydantic/pull/9023) * @chan-vince made their first contribution in [#9105](https://github.com/pydantic/pydantic/pull/9105) * @bruno-f-cruz made their first contribution in [#9135](https://github.com/pydantic/pydantic/pull/9135) * @Lance-Drane made their first contribution in [#9166](https://github.com/pydantic/pydantic/pull/9166) ## v2.7.0b1 (2024-04-03) Pre-release, see [the GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.7.0b1) for details. ## v2.6.4 (2024-03-12) [GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.6.4) ### What's Changed #### Fixes * Fix usage of `AliasGenerator` with `computed_field` decorator by @sydney-runkle in [#8806](https://github.com/pydantic/pydantic/pull/8806) * Fix nested discriminated union schema gen, pt 2 by @sydney-runkle in [#8932](https://github.com/pydantic/pydantic/pull/8932) * Fix bug with no_strict_optional=True caused by API deferral by @dmontagu in [#8826](https://github.com/pydantic/pydantic/pull/8826) ## v2.6.3 (2024-02-27) [GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.6.3) ### What's Changed #### Packaging * Update `pydantic-settings` version in the docs by @hramezani in [#8906](https://github.com/pydantic/pydantic/pull/8906) #### Fixes * Fix discriminated union schema gen bug by @sydney-runkle in [#8904](https://github.com/pydantic/pydantic/pull/8904) ## v2.6.2 (2024-02-23) [GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.6.2) ### What's Changed #### Packaging * Upgrade to `pydantic-core` 2.16.3 by @sydney-runkle in [#8879](https://github.com/pydantic/pydantic/pull/8879) #### Fixes * 'YYYY-MM-DD' date string coerced to datetime shouldn't infer timezone by @sydney-runkle in [pydantic/pydantic-core#1193](https://github.com/pydantic/pydantic-core/pull/1193) ## v2.6.1 (2024-02-05) [GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.6.1) ### What's Changed #### Packaging * Upgrade to `pydantic-core` 2.16.2 by @sydney-runkle in [#8717](https://github.com/pydantic/pydantic/pull/8717) #### Fixes * Fix bug with `mypy` plugin and `no_strict_optional = True` by @dmontagu in [#8666](https://github.com/pydantic/pydantic/pull/8666) * Fix `ByteSize` error `type` change by @sydney-runkle in [#8681](https://github.com/pydantic/pydantic/pull/8681) * Fix inheriting `Field` annotations in dataclasses by @sydney-runkle in [#8679](https://github.com/pydantic/pydantic/pull/8679) * Fix regression in core schema generation for indirect definition references by @dmontagu in [#8702](https://github.com/pydantic/pydantic/pull/8702) * Fix unsupported types bug with `PlainValidator` by @sydney-runkle in [#8710](https://github.com/pydantic/pydantic/pull/8710) * Reverting problematic fix from 2.6 release, fixing schema building bug by @sydney-runkle in [#8718](https://github.com/pydantic/pydantic/pull/8718) * Fix warning for tuple of wrong size in `Union` by @davidhewitt in [pydantic/pydantic-core#1174](https://github.com/pydantic/pydantic-core/pull/1174) * Fix `computed_field` JSON serializer `exclude_none` behavior by @sydney-runkle in [pydantic/pydantic-core#1187](https://github.com/pydantic/pydantic-core/pull/1187) ## v2.6.0 (2024-01-23) [GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.6.0) The code released in v2.6.0 is practically identical to that of v2.6.0b1. ### What's Changed #### Packaging * Check for `email-validator` version >= 2.0 by @commonism in [#6033](https://github.com/pydantic/pydantic/pull/6033) * Upgrade `ruff`` target version to Python 3.8 by @Elkiwa in [#8341](https://github.com/pydantic/pydantic/pull/8341) * Update to `pydantic-extra-types==2.4.1` by @yezz123 in [#8478](https://github.com/pydantic/pydantic/pull/8478) * Update to `pyright==1.1.345` by @Viicos in [#8453](https://github.com/pydantic/pydantic/pull/8453) * Update pydantic-core from 2.14.6 to 2.16.1, significant changes from these updates are described below, full changelog [here](https://github.com/pydantic/pydantic-core/compare/v2.14.6...v2.16.1) #### New Features * Add `NatsDsn` by @ekeew in [#6874](https://github.com/pydantic/pydantic/pull/6874) * Add `ConfigDict.ser_json_inf_nan` by @davidhewitt in [#8159](https://github.com/pydantic/pydantic/pull/8159) * Add `types.OnErrorOmit` by @adriangb in [#8222](https://github.com/pydantic/pydantic/pull/8222) * Support `AliasGenerator` usage by @sydney-runkle in [#8282](https://github.com/pydantic/pydantic/pull/8282) * Add Pydantic People Page to docs by @sydney-runkle in [#8345](https://github.com/pydantic/pydantic/pull/8345) * Support `yyyy-MM-DD` datetime parsing by @sydney-runkle in [#8404](https://github.com/pydantic/pydantic/pull/8404) * Added bits conversions to the `ByteSize` class #8415 by @luca-matei in [#8507](https://github.com/pydantic/pydantic/pull/8507) * Enable json schema creation with type `ByteSize` by @geospackle in [#8537](https://github.com/pydantic/pydantic/pull/8537) * Add `eval_type_backport` to handle union operator and builtin generic subscripting in older Pythons by @alexmojaki in [#8209](https://github.com/pydantic/pydantic/pull/8209) * Add support for `dataclass` fields `init` by @dmontagu in [#8552](https://github.com/pydantic/pydantic/pull/8552) * Implement pickling for `ValidationError` by @davidhewitt in [pydantic/pydantic-core#1119](https://github.com/pydantic/pydantic-core/pull/1119) * Add unified tuple validator that can handle "variadic" tuples via PEP-646 by @dmontagu in [pydantic/pydantic-core#865](https://github.com/pydantic/pydantic-core/pull/865) #### Changes * Drop Python3.7 support by @hramezani in [#7188](https://github.com/pydantic/pydantic/pull/7188) * Drop Python 3.7, and PyPy 3.7 and 3.8 by @davidhewitt in [pydantic/pydantic-core#1129](https://github.com/pydantic/pydantic-core/pull/1129) * Use positional-only `self` in `BaseModel` constructor, so no field name can ever conflict with it by @ariebovenberg in [#8072](https://github.com/pydantic/pydantic/pull/8072) * Make `@validate_call` return a function instead of a custom descriptor - fixes binding issue with inheritance and adds `self/cls` argument to validation errors by @alexmojaki in [#8268](https://github.com/pydantic/pydantic/pull/8268) * Exclude `BaseModel` docstring from JSON schema description by @sydney-runkle in [#8352](https://github.com/pydantic/pydantic/pull/8352) * Introducing `classproperty` decorator for `model_computed_fields` by @Jocelyn-Gas in [#8437](https://github.com/pydantic/pydantic/pull/8437) * Explicitly raise an error if field names clashes with types by @Viicos in [#8243](https://github.com/pydantic/pydantic/pull/8243) * Use stricter serializer for unions of simple types by @alexdrydew [pydantic/pydantic-core#1132](https://github.com/pydantic/pydantic-core/pull/1132) #### Performance * Add Codspeed profiling Actions workflow by @lambertsbennett in [#8054](https://github.com/pydantic/pydantic/pull/8054) * Improve `int` extraction by @samuelcolvin in [pydantic/pydantic-core#1155](https://github.com/pydantic/pydantic-core/pull/1155) * Improve performance of recursion guard by @samuelcolvin in [pydantic/pydantic-core#1156](https://github.com/pydantic/pydantic-core/pull/1156) * `dataclass` serialization speedups by @samuelcolvin in [pydantic/pydantic-core#1162](https://github.com/pydantic/pydantic-core/pull/1162) * Avoid `HashMap` creation when looking up small JSON objects in `LazyIndexMaps` by @samuelcolvin in [pydantic/jiter#55](https://github.com/pydantic/jiter/pull/55) * use hashbrown to speedup python string caching by @davidhewitt in [pydantic/jiter#51](https://github.com/pydantic/jiter/pull/51) * Replace `Peak` with more efficient `Peek` by @davidhewitt in [pydantic/jiter#48](https://github.com/pydantic/jiter/pull/48) #### Fixes * Move `getattr` warning in deprecated `BaseConfig` by @tlambert03 in [#7183](https://github.com/pydantic/pydantic/pull/7183) * Only hash `model_fields`, not whole `__dict__` by @alexmojaki in [#7786](https://github.com/pydantic/pydantic/pull/7786) * Fix mishandling of unions while freezing types in the `mypy` plugin by @dmontagu in [#7411](https://github.com/pydantic/pydantic/pull/7411) * Fix `mypy` error on untyped `ClassVar` by @vincent-hachin-wmx in [#8138](https://github.com/pydantic/pydantic/pull/8138) * Only compare pydantic fields in `BaseModel.__eq__` instead of whole `__dict__` by @QuentinSoubeyranAqemia in [#7825](https://github.com/pydantic/pydantic/pull/7825) * Update `strict` docstring in `model_validate` method. by @LukeTonin in [#8223](https://github.com/pydantic/pydantic/pull/8223) * Fix overload position of `computed_field` by @Viicos in [#8227](https://github.com/pydantic/pydantic/pull/8227) * Fix custom type type casting used in multiple attributes by @ianhfc in [#8066](https://github.com/pydantic/pydantic/pull/8066) * Fix issue not allowing `validate_call` decorator to be dynamically assigned to a class method by @jusexton in [#8249](https://github.com/pydantic/pydantic/pull/8249) * Fix issue `unittest.mock` deprecation warnings by @ibleedicare in [#8262](https://github.com/pydantic/pydantic/pull/8262) * Added tests for the case `JsonValue` contains subclassed primitive values by @jusexton in [#8286](https://github.com/pydantic/pydantic/pull/8286) * Fix `mypy` error on free before validator (classmethod) by @sydney-runkle in [#8285](https://github.com/pydantic/pydantic/pull/8285) * Fix `to_snake` conversion by @jevins09 in [#8316](https://github.com/pydantic/pydantic/pull/8316) * Fix type annotation of `ModelMetaclass.__prepare__` by @slanzmich in [#8305](https://github.com/pydantic/pydantic/pull/8305) * Disallow `config` specification when initializing a `TypeAdapter` when the annotated type has config already by @sydney-runkle in [#8365](https://github.com/pydantic/pydantic/pull/8365) * Fix a naming issue with JSON schema for generics parametrized by recursive type aliases by @dmontagu in [#8389](https://github.com/pydantic/pydantic/pull/8389) * Fix type annotation in pydantic people script by @shenxiangzhuang in [#8402](https://github.com/pydantic/pydantic/pull/8402) * Add support for field `alias` in `dataclass` signature by @NeevCohen in [#8387](https://github.com/pydantic/pydantic/pull/8387) * Fix bug with schema generation with `Field(...)` in a forward ref by @dmontagu in [#8494](https://github.com/pydantic/pydantic/pull/8494) * Fix ordering of keys in `__dict__` with `model_construct` call by @sydney-runkle in [#8500](https://github.com/pydantic/pydantic/pull/8500) * Fix module `path_type` creation when globals does not contain `__name__` by @hramezani in [#8470](https://github.com/pydantic/pydantic/pull/8470) * Fix for namespace issue with dataclasses with `from __future__ import annotations` by @sydney-runkle in [#8513](https://github.com/pydantic/pydantic/pull/8513) * Fix: make function validator types positional-only by @pmmmwh in [#8479](https://github.com/pydantic/pydantic/pull/8479) * Fix usage of `@deprecated` by @Viicos in [#8294](https://github.com/pydantic/pydantic/pull/8294) * Add more support for private attributes in `model_construct` call by @sydney-runkle in [#8525](https://github.com/pydantic/pydantic/pull/8525) * Use a stack for the types namespace by @dmontagu in [#8378](https://github.com/pydantic/pydantic/pull/8378) * Fix schema-building bug with `TypeAliasType` for types with refs by @dmontagu in [#8526](https://github.com/pydantic/pydantic/pull/8526) * Support `pydantic.Field(repr=False)` in dataclasses by @tigeryy2 in [#8511](https://github.com/pydantic/pydantic/pull/8511) * Override `dataclass_transform` behavior for `RootModel` by @Viicos in [#8163](https://github.com/pydantic/pydantic/pull/8163) * Refactor signature generation for simplicity by @sydney-runkle in [#8572](https://github.com/pydantic/pydantic/pull/8572) * Fix ordering bug of PlainValidator annotation by @Anvil in [#8567](https://github.com/pydantic/pydantic/pull/8567) * Fix `exclude_none` for json serialization of `computed_field`s by @sydney-runkle in [pydantic/pydantic-core#1098](https://github.com/pydantic/pydantic-core/pull/1098) * Support yyyy-MM-DD string for datetimes by @sydney-runkle in [pydantic/pydantic-core#1124](https://github.com/pydantic/pydantic-core/pull/1124) * Tweak ordering of definitions in generated schemas by @StrawHatDrag0n in [#8583](https://github.com/pydantic/pydantic/pull/8583) ### New Contributors #### `pydantic` * @ekeew made their first contribution in [#6874](https://github.com/pydantic/pydantic/pull/6874) * @lambertsbennett made their first contribution in [#8054](https://github.com/pydantic/pydantic/pull/8054) * @vincent-hachin-wmx made their first contribution in [#8138](https://github.com/pydantic/pydantic/pull/8138) * @QuentinSoubeyranAqemia made their first contribution in [#7825](https://github.com/pydantic/pydantic/pull/7825) * @ariebovenberg made their first contribution in [#8072](https://github.com/pydantic/pydantic/pull/8072) * @LukeTonin made their first contribution in [#8223](https://github.com/pydantic/pydantic/pull/8223) * @denisart made their first contribution in [#8231](https://github.com/pydantic/pydantic/pull/8231) * @ianhfc made their first contribution in [#8066](https://github.com/pydantic/pydantic/pull/8066) * @eonu made their first contribution in [#8255](https://github.com/pydantic/pydantic/pull/8255) * @amandahla made their first contribution in [#8263](https://github.com/pydantic/pydantic/pull/8263) * @ibleedicare made their first contribution in [#8262](https://github.com/pydantic/pydantic/pull/8262) * @jevins09 made their first contribution in [#8316](https://github.com/pydantic/pydantic/pull/8316) * @cuu508 made their first contribution in [#8322](https://github.com/pydantic/pydantic/pull/8322) * @slanzmich made their first contribution in [#8305](https://github.com/pydantic/pydantic/pull/8305) * @jensenbox made their first contribution in [#8331](https://github.com/pydantic/pydantic/pull/8331) * @szepeviktor made their first contribution in [#8356](https://github.com/pydantic/pydantic/pull/8356) * @Elkiwa made their first contribution in [#8341](https://github.com/pydantic/pydantic/pull/8341) * @parhamfh made their first contribution in [#8395](https://github.com/pydantic/pydantic/pull/8395) * @shenxiangzhuang made their first contribution in [#8402](https://github.com/pydantic/pydantic/pull/8402) * @NeevCohen made their first contribution in [#8387](https://github.com/pydantic/pydantic/pull/8387) * @zby made their first contribution in [#8497](https://github.com/pydantic/pydantic/pull/8497) * @patelnets made their first contribution in [#8491](https://github.com/pydantic/pydantic/pull/8491) * @edwardwli made their first contribution in [#8503](https://github.com/pydantic/pydantic/pull/8503) * @luca-matei made their first contribution in [#8507](https://github.com/pydantic/pydantic/pull/8507) * @Jocelyn-Gas made their first contribution in [#8437](https://github.com/pydantic/pydantic/pull/8437) * @bL34cHig0 made their first contribution in [#8501](https://github.com/pydantic/pydantic/pull/8501) * @tigeryy2 made their first contribution in [#8511](https://github.com/pydantic/pydantic/pull/8511) * @geospackle made their first contribution in [#8537](https://github.com/pydantic/pydantic/pull/8537) * @Anvil made their first contribution in [#8567](https://github.com/pydantic/pydantic/pull/8567) * @hungtsetse made their first contribution in [#8546](https://github.com/pydantic/pydantic/pull/8546) * @StrawHatDrag0n made their first contribution in [#8583](https://github.com/pydantic/pydantic/pull/8583) #### `pydantic-core` * @mariuswinger made their first contribution in [pydantic/pydantic-core#1087](https://github.com/pydantic/pydantic-core/pull/1087) * @adamchainz made their first contribution in [pydantic/pydantic-core#1090](https://github.com/pydantic/pydantic-core/pull/1090) * @akx made their first contribution in [pydantic/pydantic-core#1123](https://github.com/pydantic/pydantic-core/pull/1123) ## v2.6.0b1 (2024-01-19) Pre-release, see [the GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.6.0b1) for details. ## v2.5.3 (2023-12-22) [GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.5.3) ### What's Changed #### Packaging * uprev `pydantic-core` to 2.14.6 #### Fixes * Fix memory leak with recursive definitions creating reference cycles by @davidhewitt in [pydantic/pydantic-core#1125](https://github.com/pydantic/pydantic-core/pull/1125) ## v2.5.2 (2023-11-22) [GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.5.2) ### What's Changed #### Packaging * uprev `pydantic-core` to 2.14.5 #### New Features * Add `ConfigDict.ser_json_inf_nan` by @davidhewitt in [#8159](https://github.com/pydantic/pydantic/pull/8159) #### Fixes * Fix validation of `Literal` from JSON keys when used as `dict` key by @sydney-runkle in [pydantic/pydantic-core#1075](https://github.com/pydantic/pydantic-core/pull/1075) * Fix bug re `custom_init` on members of `Union` by @sydney-runkle in [pydantic/pydantic-core#1076](https://github.com/pydantic/pydantic-core/pull/1076) * Fix `JsonValue` `bool` serialization by @sydney-runkle in [#8190](https://github.com/pydantic/pydantic/pull/8159) * Fix handling of unhashable inputs with `Literal` in `Union`s by @sydney-runkle in [pydantic/pydantic-core#1089](https://github.com/pydantic/pydantic-core/pull/1089) ## v2.5.1 (2023-11-15) [GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.5.1) ### What's Changed #### Packaging * uprev pydantic-core to 2.14.3 by @samuelcolvin in [#8120](https://github.com/pydantic/pydantic/pull/8120) #### Fixes * Fix package description limit by @dmontagu in [#8097](https://github.com/pydantic/pydantic/pull/8097) * Fix `ValidateCallWrapper` error when creating a model which has a @validate_call wrapped field annotation by @sydney-runkle in [#8110](https://github.com/pydantic/pydantic/pull/8110) ## v2.5.0 (2023-11-13) [GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.5.0) The code released in v2.5.0 is functionally identical to that of v2.5.0b1. ### What's Changed #### Packaging * Update pydantic-core from 2.10.1 to 2.14.1, significant changes from these updates are described below, full changelog [here](https://github.com/pydantic/pydantic-core/compare/v2.10.1...v2.14.1) * Update to `pyright==1.1.335` by @Viicos in [#8075](https://github.com/pydantic/pydantic/pull/8075) #### New Features * Allow plugins to catch non `ValidationError` errors by @adriangb in [#7806](https://github.com/pydantic/pydantic/pull/7806) * Support `__doc__` argument in `create_model()` by @chris-spann in [#7863](https://github.com/pydantic/pydantic/pull/7863) * Expose `regex_engine` flag - meaning you can use with the Rust or Python regex libraries in constraints by @utkini in [#7768](https://github.com/pydantic/pydantic/pull/7768) * Save return type generated from type annotation in `ComputedFieldInfo` by @alexmojaki in [#7889](https://github.com/pydantic/pydantic/pull/7889) * Adopting `ruff` formatter by @Luca-Blight in [#7930](https://github.com/pydantic/pydantic/pull/7930) * Added `validation_error_cause` to config by @zakstucke in [#7626](https://github.com/pydantic/pydantic/pull/7626) * Make path of the item to validate available in plugin by @hramezani in [#7861](https://github.com/pydantic/pydantic/pull/7861) * Add `CallableDiscriminator` and `Tag` by @dmontagu in [#7983](https://github.com/pydantic/pydantic/pull/7983) * `CallableDiscriminator` renamed to `Discriminator` by @dmontagu in [#8047](https://github.com/pydantic/pydantic/pull/8047) * Make union case tags affect union error messages by @dmontagu in [#8001](https://github.com/pydantic/pydantic/pull/8001) * Add `examples` and `json_schema_extra` to `@computed_field` by @alexmojaki in [#8013](https://github.com/pydantic/pydantic/pull/8013) * Add `JsonValue` type by @dmontagu in [#7998](https://github.com/pydantic/pydantic/pull/7998) * Allow `str` as argument to `Discriminator` by @dmontagu in [#8047](https://github.com/pydantic/pydantic/pull/8047) * Add `SchemaSerializer.__reduce__` method to enable pickle serialization by @edoakes in [pydantic/pydantic-core#1006](https://github.com/pydantic/pydantic-core/pull/1006) #### Changes * **Significant Change:** replace `ultra_strict` with new smart union implementation, the way unions are validated has changed significantly to improve performance and correctness, we have worked hard to absolutely minimise the number of cases where behaviour has changed, see the PR for details - by @davidhewitt in [pydantic/pydantic-core#867](https://github.com/pydantic/pydantic-core/pull/867) * Add support for instance method reassignment when `extra='allow'` by @sydney-runkle in [#7683](https://github.com/pydantic/pydantic/pull/7683) * Support JSON schema generation for `Enum` types with no cases by @sydney-runkle in [#7927](https://github.com/pydantic/pydantic/pull/7927) * Warn if a class inherits from `Generic` before `BaseModel` by @alexmojaki in [#7891](https://github.com/pydantic/pydantic/pull/7891) #### Performance * New custom JSON parser, `jiter` by @samuelcolvin in [pydantic/pydantic-core#974](https://github.com/pydantic/pydantic-core/pull/974) * PGO build for MacOS M1 by @samuelcolvin in [pydantic/pydantic-core#1063](https://github.com/pydantic/pydantic-core/pull/1063) * Use `__getattr__` for all package imports, improve import time by @samuelcolvin in [#7947](https://github.com/pydantic/pydantic/pull/7947) #### Fixes * Fix `mypy` issue with subclasses of `RootModel` by @sydney-runkle in [#7677](https://github.com/pydantic/pydantic/pull/7677) * Properly rebuild the `FieldInfo` when a forward ref gets evaluated by @dmontagu in [#7698](https://github.com/pydantic/pydantic/pull/7698) * Fix failure to load `SecretStr` from JSON (regression in v2.4) by @sydney-runkle in [#7729](https://github.com/pydantic/pydantic/pull/7729) * Fix `defer_build` behavior with `TypeAdapter` by @sydney-runkle in [#7736](https://github.com/pydantic/pydantic/pull/7736) * Improve compatibility with legacy `mypy` versions by @dmontagu in [#7742](https://github.com/pydantic/pydantic/pull/7742) * Fix: update `TypeVar` handling when default is not set by @pmmmwh in [#7719](https://github.com/pydantic/pydantic/pull/7719) * Support specification of `strict` on `Enum` type fields by @sydney-runkle in [#7761](https://github.com/pydantic/pydantic/pull/7761) * Wrap `weakref.ref` instead of subclassing to fix `cloudpickle` serialization by @edoakes in [#7780](https://github.com/pydantic/pydantic/pull/7780) * Keep values of private attributes set within `model_post_init` in subclasses by @alexmojaki in [#7775](https://github.com/pydantic/pydantic/pull/7775) * Add more specific type for non-callable `json_schema_extra` by @alexmojaki in [#7803](https://github.com/pydantic/pydantic/pull/7803) * Raise an error when deleting frozen (model) fields by @alexmojaki in [#7800](https://github.com/pydantic/pydantic/pull/7800) * Fix schema sorting bug with default values by @sydney-runkle in [#7817](https://github.com/pydantic/pydantic/pull/7817) * Use generated alias for aliases that are not specified otherwise by @alexmojaki in [#7802](https://github.com/pydantic/pydantic/pull/7802) * Support `strict` specification for `UUID` types by @sydney-runkle in [#7865](https://github.com/pydantic/pydantic/pull/7865) * JSON schema: fix extra parameter handling by @me-and in [#7810](https://github.com/pydantic/pydantic/pull/7810) * Fix: support `pydantic.Field(kw_only=True)` with inherited dataclasses by @PrettyWood in [#7827](https://github.com/pydantic/pydantic/pull/7827) * Support `validate_call` decorator for methods in classes with `__slots__` by @sydney-runkle in [#7883](https://github.com/pydantic/pydantic/pull/7883) * Fix pydantic dataclass problem with `dataclasses.field` default by @hramezani in [#7898](https://github.com/pydantic/pydantic/pull/7898) * Fix schema generation for generics with union type bounds by @sydney-runkle in [#7899](https://github.com/pydantic/pydantic/pull/7899) * Fix version for `importlib_metadata` on python 3.7 by @sydney-runkle in [#7904](https://github.com/pydantic/pydantic/pull/7904) * Support `|` operator (Union) in PydanticRecursiveRef by @alexmojaki in [#7892](https://github.com/pydantic/pydantic/pull/7892) * Fix `display_as_type` for `TypeAliasType` in python 3.12 by @dmontagu in [#7929](https://github.com/pydantic/pydantic/pull/7929) * Add support for `NotRequired` generics in `TypedDict` by @sydney-runkle in [#7932](https://github.com/pydantic/pydantic/pull/7932) * Make generic `TypeAliasType` specifications produce different schema definitions by @alexdrydew in [#7893](https://github.com/pydantic/pydantic/pull/7893) * Added fix for signature of inherited dataclass by @howsunjow in [#7925](https://github.com/pydantic/pydantic/pull/7925) * Make the model name generation more robust in JSON schema by @joakimnordling in [#7881](https://github.com/pydantic/pydantic/pull/7881) * Fix plurals in validation error messages (in tests) by @Iipin in [#7972](https://github.com/pydantic/pydantic/pull/7972) * `PrivateAttr` is passed from `Annotated` default position by @tabassco in [#8004](https://github.com/pydantic/pydantic/pull/8004) * Don't decode bytes (which may not be UTF8) when displaying SecretBytes by @alexmojaki in [#8012](https://github.com/pydantic/pydantic/pull/8012) * Use `classmethod` instead of `classmethod[Any, Any, Any]` by @Mr-Pepe in [#7979](https://github.com/pydantic/pydantic/pull/7979) * Clearer error on invalid Plugin by @samuelcolvin in [#8023](https://github.com/pydantic/pydantic/pull/8023) * Correct pydantic dataclasses import by @samuelcolvin in [#8027](https://github.com/pydantic/pydantic/pull/8027) * Fix misbehavior for models referencing redefined type aliases by @dmontagu in [#8050](https://github.com/pydantic/pydantic/pull/8050) * Fix `Optional` field with `validate_default` only performing one field validation by @sydney-runkle in [pydantic/pydantic-core#1002](https://github.com/pydantic/pydantic-core/pull/1002) * Fix `definition-ref` bug with `Dict` keys by @sydney-runkle in [pydantic/pydantic-core#1014](https://github.com/pydantic/pydantic-core/pull/1014) * Fix bug allowing validation of `bool` types with `coerce_numbers_to_str=True` by @sydney-runkle in [pydantic/pydantic-core#1017](https://github.com/pydantic/pydantic-core/pull/1017) * Don't accept `NaN` in float and decimal constraints by @davidhewitt in [pydantic/pydantic-core#1037](https://github.com/pydantic/pydantic-core/pull/1037) * Add `lax_str` and `lax_int` support for enum values not inherited from str/int by @michaelhly in [pydantic/pydantic-core#1015](https://github.com/pydantic/pydantic-core/pull/1015) * Support subclasses in lists in `Union` of `List` types by @sydney-runkle in [pydantic/pydantic-core#1039](https://github.com/pydantic/pydantic-core/pull/1039) * Allow validation against `max_digits` and `decimals` to pass if normalized or non-normalized input is valid by @sydney-runkle in [pydantic/pydantic-core#1049](https://github.com/pydantic/pydantic-core/pull/1049) * Fix: proper pluralization in `ValidationError` messages by @Iipin in [pydantic/pydantic-core#1050](https://github.com/pydantic/pydantic-core/pull/1050) * Disallow the string `'-'` as `datetime` input by @davidhewitt in [pydantic/speedate#52](https://github.com/pydantic/speedate/pull/52) & [pydantic/pydantic-core#1060](https://github.com/pydantic/pydantic-core/pull/1060) * Fix: NaN and Inf float serialization by @davidhewitt in [pydantic/pydantic-core#1062](https://github.com/pydantic/pydantic-core/pull/1062) * Restore manylinux-compatible PGO builds by @davidhewitt in [pydantic/pydantic-core#1068](https://github.com/pydantic/pydantic-core/pull/1068) ### New Contributors #### `pydantic` * @schneebuzz made their first contribution in [#7699](https://github.com/pydantic/pydantic/pull/7699) * @edoakes made their first contribution in [#7780](https://github.com/pydantic/pydantic/pull/7780) * @alexmojaki made their first contribution in [#7775](https://github.com/pydantic/pydantic/pull/7775) * @NickG123 made their first contribution in [#7751](https://github.com/pydantic/pydantic/pull/7751) * @gowthamgts made their first contribution in [#7830](https://github.com/pydantic/pydantic/pull/7830) * @jamesbraza made their first contribution in [#7848](https://github.com/pydantic/pydantic/pull/7848) * @laundmo made their first contribution in [#7850](https://github.com/pydantic/pydantic/pull/7850) * @rahmatnazali made their first contribution in [#7870](https://github.com/pydantic/pydantic/pull/7870) * @waterfountain1996 made their first contribution in [#7878](https://github.com/pydantic/pydantic/pull/7878) * @chris-spann made their first contribution in [#7863](https://github.com/pydantic/pydantic/pull/7863) * @me-and made their first contribution in [#7810](https://github.com/pydantic/pydantic/pull/7810) * @utkini made their first contribution in [#7768](https://github.com/pydantic/pydantic/pull/7768) * @bn-l made their first contribution in [#7744](https://github.com/pydantic/pydantic/pull/7744) * @alexdrydew made their first contribution in [#7893](https://github.com/pydantic/pydantic/pull/7893) * @Luca-Blight made their first contribution in [#7930](https://github.com/pydantic/pydantic/pull/7930) * @howsunjow made their first contribution in [#7925](https://github.com/pydantic/pydantic/pull/7925) * @joakimnordling made their first contribution in [#7881](https://github.com/pydantic/pydantic/pull/7881) * @icfly2 made their first contribution in [#7976](https://github.com/pydantic/pydantic/pull/7976) * @Yummy-Yums made their first contribution in [#8003](https://github.com/pydantic/pydantic/pull/8003) * @Iipin made their first contribution in [#7972](https://github.com/pydantic/pydantic/pull/7972) * @tabassco made their first contribution in [#8004](https://github.com/pydantic/pydantic/pull/8004) * @Mr-Pepe made their first contribution in [#7979](https://github.com/pydantic/pydantic/pull/7979) * @0x00cl made their first contribution in [#8010](https://github.com/pydantic/pydantic/pull/8010) * @barraponto made their first contribution in [#8032](https://github.com/pydantic/pydantic/pull/8032) #### `pydantic-core` * @sisp made their first contribution in [pydantic/pydantic-core#995](https://github.com/pydantic/pydantic-core/pull/995) * @michaelhly made their first contribution in [pydantic/pydantic-core#1015](https://github.com/pydantic/pydantic-core/pull/1015) ## v2.5.0b1 (2023-11-09) Pre-release, see [the GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.5.0b1) for details. ## v2.4.2 (2023-09-27) [GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.4.2) ### What's Changed #### Fixes * Fix bug with JSON schema for sequence of discriminated union by @dmontagu in [#7647](https://github.com/pydantic/pydantic/pull/7647) * Fix schema references in discriminated unions by @adriangb in [#7646](https://github.com/pydantic/pydantic/pull/7646) * Fix json schema generation for recursive models by @adriangb in [#7653](https://github.com/pydantic/pydantic/pull/7653) * Fix `models_json_schema` for generic models by @adriangb in [#7654](https://github.com/pydantic/pydantic/pull/7654) * Fix xfailed test for generic model signatures by @adriangb in [#7658](https://github.com/pydantic/pydantic/pull/7658) ### New Contributors * @austinorr made their first contribution in [#7657](https://github.com/pydantic/pydantic/pull/7657) * @peterHoburg made their first contribution in [#7670](https://github.com/pydantic/pydantic/pull/7670) ## v2.4.1 (2023-09-26) [GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.4.1) ### What's Changed #### Packaging * Update pydantic-core to 2.10.1 by @davidhewitt in [#7633](https://github.com/pydantic/pydantic/pull/7633) #### Fixes * Serialize unsubstituted type vars as `Any` by @adriangb in [#7606](https://github.com/pydantic/pydantic/pull/7606) * Remove schema building caches by @adriangb in [#7624](https://github.com/pydantic/pydantic/pull/7624) * Fix an issue where JSON schema extras weren't JSON encoded by @dmontagu in [#7625](https://github.com/pydantic/pydantic/pull/7625) ## v2.4.0 (2023-09-22) [GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.4.0) ### What's Changed #### Packaging * Update pydantic-core to 2.10.0 by @samuelcolvin in [#7542](https://github.com/pydantic/pydantic/pull/7542) #### New Features * Add `Base64Url` types by @dmontagu in [#7286](https://github.com/pydantic/pydantic/pull/7286) * Implement optional `number` to `str` coercion by @lig in [#7508](https://github.com/pydantic/pydantic/pull/7508) * Allow access to `field_name` and `data` in all validators if there is data and a field name by @samuelcolvin in [#7542](https://github.com/pydantic/pydantic/pull/7542) * Add `BaseModel.model_validate_strings` and `TypeAdapter.validate_strings` by @hramezani in [#7552](https://github.com/pydantic/pydantic/pull/7552) * Add Pydantic `plugins` experimental implementation by @lig @samuelcolvin and @Kludex in [#6820](https://github.com/pydantic/pydantic/pull/6820) #### Changes * Do not override `model_post_init` in subclass with private attrs by @Viicos in [#7302](https://github.com/pydantic/pydantic/pull/7302) * Make fields with defaults not required in the serialization schema by default by @dmontagu in [#7275](https://github.com/pydantic/pydantic/pull/7275) * Mark `Extra` as deprecated by @disrupted in [#7299](https://github.com/pydantic/pydantic/pull/7299) * Make `EncodedStr` a dataclass by @Kludex in [#7396](https://github.com/pydantic/pydantic/pull/7396) * Move `annotated_handlers` to be public by @samuelcolvin in [#7569](https://github.com/pydantic/pydantic/pull/7569) #### Performance * Simplify flattening and inlining of `CoreSchema` by @adriangb in [#7523](https://github.com/pydantic/pydantic/pull/7523) * Remove unused copies in `CoreSchema` walking by @adriangb in [#7528](https://github.com/pydantic/pydantic/pull/7528) * Add caches for collecting definitions and invalid schemas from a CoreSchema by @adriangb in [#7527](https://github.com/pydantic/pydantic/pull/7527) * Eagerly resolve discriminated unions and cache cases where we can't by @adriangb in [#7529](https://github.com/pydantic/pydantic/pull/7529) * Replace `dict.get` and `dict.setdefault` with more verbose versions in `CoreSchema` building hot paths by @adriangb in [#7536](https://github.com/pydantic/pydantic/pull/7536) * Cache invalid `CoreSchema` discovery by @adriangb in [#7535](https://github.com/pydantic/pydantic/pull/7535) * Allow disabling `CoreSchema` validation for faster startup times by @adriangb in [#7565](https://github.com/pydantic/pydantic/pull/7565) #### Fixes * Fix config detection for `TypedDict` from grandparent classes by @dmontagu in [#7272](https://github.com/pydantic/pydantic/pull/7272) * Fix hash function generation for frozen models with unusual MRO by @dmontagu in [#7274](https://github.com/pydantic/pydantic/pull/7274) * Make `strict` config overridable in field for Path by @hramezani in [#7281](https://github.com/pydantic/pydantic/pull/7281) * Use `ser_json_` on default in `GenerateJsonSchema` by @Kludex in [#7269](https://github.com/pydantic/pydantic/pull/7269) * Adding a check that alias is validated as an identifier for Python by @andree0 in [#7319](https://github.com/pydantic/pydantic/pull/7319) * Raise an error when computed field overrides field by @sydney-runkle in [#7346](https://github.com/pydantic/pydantic/pull/7346) * Fix applying `SkipValidation` to referenced schemas by @adriangb in [#7381](https://github.com/pydantic/pydantic/pull/7381) * Enforce behavior of private attributes having double leading underscore by @lig in [#7265](https://github.com/pydantic/pydantic/pull/7265) * Standardize `__get_pydantic_core_schema__` signature by @hramezani in [#7415](https://github.com/pydantic/pydantic/pull/7415) * Fix generic dataclass fields mutation bug (when using `TypeAdapter`) by @sydney-runkle in [#7435](https://github.com/pydantic/pydantic/pull/7435) * Fix `TypeError` on `model_validator` in `wrap` mode by @pmmmwh in [#7496](https://github.com/pydantic/pydantic/pull/7496) * Improve enum error message by @hramezani in [#7506](https://github.com/pydantic/pydantic/pull/7506) * Make `repr` work for instances that failed initialization when handling `ValidationError`s by @dmontagu in [#7439](https://github.com/pydantic/pydantic/pull/7439) * Fixed a regular expression denial of service issue by limiting whitespaces by @prodigysml in [#7360](https://github.com/pydantic/pydantic/pull/7360) * Fix handling of `UUID` values having `UUID.version=None` by @lig in [#7566](https://github.com/pydantic/pydantic/pull/7566) * Fix `__iter__` returning private `cached_property` info by @sydney-runkle in [#7570](https://github.com/pydantic/pydantic/pull/7570) * Improvements to version info message by @samuelcolvin in [#7594](https://github.com/pydantic/pydantic/pull/7594) ### New Contributors * @15498th made their first contribution in [#7238](https://github.com/pydantic/pydantic/pull/7238) * @GabrielCappelli made their first contribution in [#7213](https://github.com/pydantic/pydantic/pull/7213) * @tobni made their first contribution in [#7184](https://github.com/pydantic/pydantic/pull/7184) * @redruin1 made their first contribution in [#7282](https://github.com/pydantic/pydantic/pull/7282) * @FacerAin made their first contribution in [#7288](https://github.com/pydantic/pydantic/pull/7288) * @acdha made their first contribution in [#7297](https://github.com/pydantic/pydantic/pull/7297) * @andree0 made their first contribution in [#7319](https://github.com/pydantic/pydantic/pull/7319) * @gordonhart made their first contribution in [#7375](https://github.com/pydantic/pydantic/pull/7375) * @pmmmwh made their first contribution in [#7496](https://github.com/pydantic/pydantic/pull/7496) * @disrupted made their first contribution in [#7299](https://github.com/pydantic/pydantic/pull/7299) * @prodigysml made their first contribution in [#7360](https://github.com/pydantic/pydantic/pull/7360) ## v2.3.0 (2023-08-23) [GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.3.0) * 🔥 Remove orphaned changes file from repo by @lig in [#7168](https://github.com/pydantic/pydantic/pull/7168) * Add copy button on documentation by @Kludex in [#7190](https://github.com/pydantic/pydantic/pull/7190) * Fix docs on JSON type by @Kludex in [#7189](https://github.com/pydantic/pydantic/pull/7189) * Update mypy 1.5.0 to 1.5.1 in CI by @hramezani in [#7191](https://github.com/pydantic/pydantic/pull/7191) * fix download links badge by @samuelcolvin in [#7200](https://github.com/pydantic/pydantic/pull/7200) * add 2.2.1 to changelog by @samuelcolvin in [#7212](https://github.com/pydantic/pydantic/pull/7212) * Make ModelWrapValidator protocols generic by @dmontagu in [#7154](https://github.com/pydantic/pydantic/pull/7154) * Correct `Field(..., exclude: bool)` docs by @samuelcolvin in [#7214](https://github.com/pydantic/pydantic/pull/7214) * Make shadowing attributes a warning instead of an error by @adriangb in [#7193](https://github.com/pydantic/pydantic/pull/7193) * Document `Base64Str` and `Base64Bytes` by @Kludex in [#7192](https://github.com/pydantic/pydantic/pull/7192) * Fix `config.defer_build` for serialization first cases by @samuelcolvin in [#7024](https://github.com/pydantic/pydantic/pull/7024) * clean Model docstrings in JSON Schema by @samuelcolvin in [#7210](https://github.com/pydantic/pydantic/pull/7210) * fix [#7228](https://github.com/pydantic/pydantic/pull/7228) (typo): docs in `validators.md` to correct `validate_default` kwarg by @lmmx in [#7229](https://github.com/pydantic/pydantic/pull/7229) * ✅ Implement `tzinfo.fromutc` method for `TzInfo` in `pydantic-core` by @lig in [#7019](https://github.com/pydantic/pydantic/pull/7019) * Support `__get_validators__` by @hramezani in [#7197](https://github.com/pydantic/pydantic/pull/7197) ## v2.2.1 (2023-08-18) [GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.2.1) * Make `xfail`ing test for root model extra stop `xfail`ing by @dmontagu in [#6937](https://github.com/pydantic/pydantic/pull/6937) * Optimize recursion detection by stopping on the second visit for the same object by @mciucu in [#7160](https://github.com/pydantic/pydantic/pull/7160) * fix link in docs by @tlambert03 in [#7166](https://github.com/pydantic/pydantic/pull/7166) * Replace MiMalloc w/ default allocator by @adriangb in [pydantic/pydantic-core#900](https://github.com/pydantic/pydantic-core/pull/900) * Bump pydantic-core to 2.6.1 and prepare 2.2.1 release by @adriangb in [#7176](https://github.com/pydantic/pydantic/pull/7176) ## v2.2.0 (2023-08-17) [GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.2.0) * Split "pipx install" setup command into two commands on the documentation site by @nomadmtb in [#6869](https://github.com/pydantic/pydantic/pull/6869) * Deprecate `Field.include` by @hramezani in [#6852](https://github.com/pydantic/pydantic/pull/6852) * Fix typo in default factory error msg by @hramezani in [#6880](https://github.com/pydantic/pydantic/pull/6880) * Simplify handling of typing.Annotated in GenerateSchema by @dmontagu in [#6887](https://github.com/pydantic/pydantic/pull/6887) * Re-enable fastapi tests in CI by @dmontagu in [#6883](https://github.com/pydantic/pydantic/pull/6883) * Make it harder to hit collisions with json schema defrefs by @dmontagu in [#6566](https://github.com/pydantic/pydantic/pull/6566) * Cleaner error for invalid input to `Path` fields by @samuelcolvin in [#6903](https://github.com/pydantic/pydantic/pull/6903) * :memo: support Coordinate Type by @yezz123 in [#6906](https://github.com/pydantic/pydantic/pull/6906) * Fix `ForwardRef` wrapper for py 3.10.0 (shim until bpo-45166) by @randomir in [#6919](https://github.com/pydantic/pydantic/pull/6919) * Fix misbehavior related to copying of RootModel by @dmontagu in [#6918](https://github.com/pydantic/pydantic/pull/6918) * Fix issue with recursion error caused by ParamSpec by @dmontagu in [#6923](https://github.com/pydantic/pydantic/pull/6923) * Add section about Constrained classes to the Migration Guide by @Kludex in [#6924](https://github.com/pydantic/pydantic/pull/6924) * Use `main` branch for badge links by @Viicos in [#6925](https://github.com/pydantic/pydantic/pull/6925) * Add test for v1/v2 Annotated discrepancy by @carlbordum in [#6926](https://github.com/pydantic/pydantic/pull/6926) * Make the v1 mypy plugin work with both v1 and v2 by @dmontagu in [#6921](https://github.com/pydantic/pydantic/pull/6921) * Fix issue where generic models couldn't be parametrized with BaseModel by @dmontagu in [#6933](https://github.com/pydantic/pydantic/pull/6933) * Remove xfail for discriminated union with alias by @dmontagu in [#6938](https://github.com/pydantic/pydantic/pull/6938) * add field_serializer to computed_field by @andresliszt in [#6965](https://github.com/pydantic/pydantic/pull/6965) * Use union_schema with Type[Union[...]] by @JeanArhancet in [#6952](https://github.com/pydantic/pydantic/pull/6952) * Fix inherited typeddict attributes / config by @adriangb in [#6981](https://github.com/pydantic/pydantic/pull/6981) * fix dataclass annotated before validator called twice by @davidhewitt in [#6998](https://github.com/pydantic/pydantic/pull/6998) * Update test-fastapi deselected tests by @hramezani in [#7014](https://github.com/pydantic/pydantic/pull/7014) * Fix validator doc format by @hramezani in [#7015](https://github.com/pydantic/pydantic/pull/7015) * Fix typo in docstring of model_json_schema by @AdamVinch-Federated in [#7032](https://github.com/pydantic/pydantic/pull/7032) * remove unused "type ignores" with pyright by @samuelcolvin in [#7026](https://github.com/pydantic/pydantic/pull/7026) * Add benchmark representing FastAPI startup time by @adriangb in [#7030](https://github.com/pydantic/pydantic/pull/7030) * Fix json_encoders for Enum subclasses by @adriangb in [#7029](https://github.com/pydantic/pydantic/pull/7029) * Update docstring of `ser_json_bytes` regarding base64 encoding by @Viicos in [#7052](https://github.com/pydantic/pydantic/pull/7052) * Allow `@validate_call` to work on async methods by @adriangb in [#7046](https://github.com/pydantic/pydantic/pull/7046) * Fix: mypy error with `Settings` and `SettingsConfigDict` by @JeanArhancet in [#7002](https://github.com/pydantic/pydantic/pull/7002) * Fix some typos (repeated words and it's/its) by @eumiro in [#7063](https://github.com/pydantic/pydantic/pull/7063) * Fix the typo in docstring by @harunyasar in [#7062](https://github.com/pydantic/pydantic/pull/7062) * Docs: Fix broken URL in the pydantic-settings package recommendation by @swetjen in [#6995](https://github.com/pydantic/pydantic/pull/6995) * Handle constraints being applied to schemas that don't accept it by @adriangb in [#6951](https://github.com/pydantic/pydantic/pull/6951) * Replace almost_equal_floats with math.isclose by @eumiro in [#7082](https://github.com/pydantic/pydantic/pull/7082) * bump pydantic-core to 2.5.0 by @davidhewitt in [#7077](https://github.com/pydantic/pydantic/pull/7077) * Add `short_version` and use it in links by @hramezani in [#7115](https://github.com/pydantic/pydantic/pull/7115) * � Add usage link to `RootModel` by @Kludex in [#7113](https://github.com/pydantic/pydantic/pull/7113) * Revert "Fix default port for mongosrv DSNs (#6827)" by @Kludex in [#7116](https://github.com/pydantic/pydantic/pull/7116) * Clarify validate_default and _Unset handling in usage docs and migration guide by @benbenbang in [#6950](https://github.com/pydantic/pydantic/pull/6950) * Tweak documentation of `Field.exclude` by @Viicos in [#7086](https://github.com/pydantic/pydantic/pull/7086) * Do not require `validate_assignment` to use `Field.frozen` by @Viicos in [#7103](https://github.com/pydantic/pydantic/pull/7103) * tweaks to `_core_utils` by @samuelcolvin in [#7040](https://github.com/pydantic/pydantic/pull/7040) * Make DefaultDict working with set by @hramezani in [#7126](https://github.com/pydantic/pydantic/pull/7126) * Don't always require typing.Generic as a base for partially parametrized models by @dmontagu in [#7119](https://github.com/pydantic/pydantic/pull/7119) * Fix issue with JSON schema incorrectly using parent class core schema by @dmontagu in [#7020](https://github.com/pydantic/pydantic/pull/7020) * Fix xfailed test related to TypedDict and alias_generator by @dmontagu in [#6940](https://github.com/pydantic/pydantic/pull/6940) * Improve error message for NameEmail by @dmontagu in [#6939](https://github.com/pydantic/pydantic/pull/6939) * Fix generic computed fields by @dmontagu in [#6988](https://github.com/pydantic/pydantic/pull/6988) * Reflect namedtuple default values during validation by @dmontagu in [#7144](https://github.com/pydantic/pydantic/pull/7144) * Update dependencies, fix pydantic-core usage, fix CI issues by @dmontagu in [#7150](https://github.com/pydantic/pydantic/pull/7150) * Add mypy 1.5.0 by @hramezani in [#7118](https://github.com/pydantic/pydantic/pull/7118) * Handle non-json native enum values by @adriangb in [#7056](https://github.com/pydantic/pydantic/pull/7056) * document `round_trip` in Json type documentation by @jc-louis in [#7137](https://github.com/pydantic/pydantic/pull/7137) * Relax signature checks to better support builtins and C extension functions as validators by @adriangb in [#7101](https://github.com/pydantic/pydantic/pull/7101) * add union_mode='left_to_right' by @davidhewitt in [#7151](https://github.com/pydantic/pydantic/pull/7151) * Include an error message hint for inherited ordering by @yvalencia91 in [#7124](https://github.com/pydantic/pydantic/pull/7124) * Fix one docs link and resolve some warnings for two others by @dmontagu in [#7153](https://github.com/pydantic/pydantic/pull/7153) * Include Field extra keys name in warning by @hramezani in [#7136](https://github.com/pydantic/pydantic/pull/7136) ## v2.1.1 (2023-07-25) [GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.1.1) * Skip FieldInfo merging when unnecessary by @dmontagu in [#6862](https://github.com/pydantic/pydantic/pull/6862) ## v2.1.0 (2023-07-25) [GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.1.0) * Add `StringConstraints` for use as Annotated metadata by @adriangb in [#6605](https://github.com/pydantic/pydantic/pull/6605) * Try to fix intermittently failing CI by @adriangb in [#6683](https://github.com/pydantic/pydantic/pull/6683) * Remove redundant example of optional vs default. by @ehiggs-deliverect in [#6676](https://github.com/pydantic/pydantic/pull/6676) * Docs update by @samuelcolvin in [#6692](https://github.com/pydantic/pydantic/pull/6692) * Remove the Validate always section in validator docs by @adriangb in [#6679](https://github.com/pydantic/pydantic/pull/6679) * Fix recursion error in json schema generation by @adriangb in [#6720](https://github.com/pydantic/pydantic/pull/6720) * Fix incorrect subclass check for secretstr by @AlexVndnblcke in [#6730](https://github.com/pydantic/pydantic/pull/6730) * update pdm / pdm lockfile to 2.8.0 by @davidhewitt in [#6714](https://github.com/pydantic/pydantic/pull/6714) * unpin pdm on more CI jobs by @davidhewitt in [#6755](https://github.com/pydantic/pydantic/pull/6755) * improve source locations for auxiliary packages in docs by @davidhewitt in [#6749](https://github.com/pydantic/pydantic/pull/6749) * Assume builtins don't accept an info argument by @adriangb in [#6754](https://github.com/pydantic/pydantic/pull/6754) * Fix bug where calling `help(BaseModelSubclass)` raises errors by @hramezani in [#6758](https://github.com/pydantic/pydantic/pull/6758) * Fix mypy plugin handling of `@model_validator(mode="after")` by @ljodal in [#6753](https://github.com/pydantic/pydantic/pull/6753) * update pydantic-core to 2.3.1 by @davidhewitt in [#6756](https://github.com/pydantic/pydantic/pull/6756) * Mypy plugin for settings by @hramezani in [#6760](https://github.com/pydantic/pydantic/pull/6760) * Use `contentSchema` keyword for JSON schema by @dmontagu in [#6715](https://github.com/pydantic/pydantic/pull/6715) * fast-path checking finite decimals by @davidhewitt in [#6769](https://github.com/pydantic/pydantic/pull/6769) * Docs update by @samuelcolvin in [#6771](https://github.com/pydantic/pydantic/pull/6771) * Improve json schema doc by @hramezani in [#6772](https://github.com/pydantic/pydantic/pull/6772) * Update validator docs by @adriangb in [#6695](https://github.com/pydantic/pydantic/pull/6695) * Fix typehint for wrap validator by @dmontagu in [#6788](https://github.com/pydantic/pydantic/pull/6788) * � Fix validation warning for unions of Literal and other type by @lig in [#6628](https://github.com/pydantic/pydantic/pull/6628) * Update documentation for generics support in V2 by @tpdorsey in [#6685](https://github.com/pydantic/pydantic/pull/6685) * add pydantic-core build info to `version_info()` by @samuelcolvin in [#6785](https://github.com/pydantic/pydantic/pull/6785) * Fix pydantic dataclasses that use slots with default values by @dmontagu in [#6796](https://github.com/pydantic/pydantic/pull/6796) * Fix inheritance of hash function for frozen models by @dmontagu in [#6789](https://github.com/pydantic/pydantic/pull/6789) * ✨ Add `SkipJsonSchema` annotation by @Kludex in [#6653](https://github.com/pydantic/pydantic/pull/6653) * Error if an invalid field name is used with Field by @dmontagu in [#6797](https://github.com/pydantic/pydantic/pull/6797) * Add `GenericModel` to `MOVED_IN_V2` by @adriangb in [#6776](https://github.com/pydantic/pydantic/pull/6776) * Remove unused code from `docs/usage/types/custom.md` by @hramezani in [#6803](https://github.com/pydantic/pydantic/pull/6803) * Fix `float` -> `Decimal` coercion precision loss by @adriangb in [#6810](https://github.com/pydantic/pydantic/pull/6810) * remove email validation from the north star benchmark by @davidhewitt in [#6816](https://github.com/pydantic/pydantic/pull/6816) * Fix link to mypy by @progsmile in [#6824](https://github.com/pydantic/pydantic/pull/6824) * Improve initialization hooks example by @hramezani in [#6822](https://github.com/pydantic/pydantic/pull/6822) * Fix default port for mongosrv DSNs by @dmontagu in [#6827](https://github.com/pydantic/pydantic/pull/6827) * Improve API documentation, in particular more links between usage and API docs by @samuelcolvin in [#6780](https://github.com/pydantic/pydantic/pull/6780) * update pydantic-core to 2.4.0 by @davidhewitt in [#6831](https://github.com/pydantic/pydantic/pull/6831) * Fix `annotated_types.MaxLen` validator for custom sequence types by @ImogenBits in [#6809](https://github.com/pydantic/pydantic/pull/6809) * Update V1 by @hramezani in [#6833](https://github.com/pydantic/pydantic/pull/6833) * Make it so callable JSON schema extra works by @dmontagu in [#6798](https://github.com/pydantic/pydantic/pull/6798) * Fix serialization issue with `InstanceOf` by @dmontagu in [#6829](https://github.com/pydantic/pydantic/pull/6829) * Add back support for `json_encoders` by @adriangb in [#6811](https://github.com/pydantic/pydantic/pull/6811) * Update field annotations when building the schema by @dmontagu in [#6838](https://github.com/pydantic/pydantic/pull/6838) * Use `WeakValueDictionary` to fix generic memory leak by @dmontagu in [#6681](https://github.com/pydantic/pydantic/pull/6681) * Add `config.defer_build` to optionally make model building lazy by @samuelcolvin in [#6823](https://github.com/pydantic/pydantic/pull/6823) * delegate `UUID` serialization to pydantic-core by @davidhewitt in [#6850](https://github.com/pydantic/pydantic/pull/6850) * Update `json_encoders` docs by @adriangb in [#6848](https://github.com/pydantic/pydantic/pull/6848) * Fix error message for `staticmethod`/`classmethod` order with validate_call by @dmontagu in [#6686](https://github.com/pydantic/pydantic/pull/6686) * Improve documentation for `Config` by @samuelcolvin in [#6847](https://github.com/pydantic/pydantic/pull/6847) * Update serialization doc to mention `Field.exclude` takes priority over call-time `include/exclude` by @hramezani in [#6851](https://github.com/pydantic/pydantic/pull/6851) * Allow customizing core schema generation by making `GenerateSchema` public by @adriangb in [#6737](https://github.com/pydantic/pydantic/pull/6737) ## v2.0.3 (2023-07-05) [GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.0.3) * Mention PyObject (v1) moving to ImportString (v2) in migration doc by @slafs in [#6456](https://github.com/pydantic/pydantic/pull/6456) * Fix release-tweet CI by @Kludex in [#6461](https://github.com/pydantic/pydantic/pull/6461) * Revise the section on required / optional / nullable fields. by @ybressler in [#6468](https://github.com/pydantic/pydantic/pull/6468) * Warn if a type hint is not in fact a type by @adriangb in [#6479](https://github.com/pydantic/pydantic/pull/6479) * Replace TransformSchema with GetPydanticSchema by @dmontagu in [#6484](https://github.com/pydantic/pydantic/pull/6484) * Fix the un-hashability of various annotation types, for use in caching generic containers by @dmontagu in [#6480](https://github.com/pydantic/pydantic/pull/6480) * PYD-164: Rework custom types docs by @adriangb in [#6490](https://github.com/pydantic/pydantic/pull/6490) * Fix ci by @adriangb in [#6507](https://github.com/pydantic/pydantic/pull/6507) * Fix forward ref in generic by @adriangb in [#6511](https://github.com/pydantic/pydantic/pull/6511) * Fix generation of serialization JSON schemas for core_schema.ChainSchema by @dmontagu in [#6515](https://github.com/pydantic/pydantic/pull/6515) * Document the change in `Field.alias` behavior in Pydantic V2 by @hramezani in [#6508](https://github.com/pydantic/pydantic/pull/6508) * Give better error message attempting to compute the json schema of a model with undefined fields by @dmontagu in [#6519](https://github.com/pydantic/pydantic/pull/6519) * Document `alias_priority` by @tpdorsey in [#6520](https://github.com/pydantic/pydantic/pull/6520) * Add redirect for types documentation by @tpdorsey in [#6513](https://github.com/pydantic/pydantic/pull/6513) * Allow updating docs without release by @samuelcolvin in [#6551](https://github.com/pydantic/pydantic/pull/6551) * Ensure docs tests always run in the right folder by @dmontagu in [#6487](https://github.com/pydantic/pydantic/pull/6487) * Defer evaluation of return type hints for serializer functions by @dmontagu in [#6516](https://github.com/pydantic/pydantic/pull/6516) * Disable E501 from Ruff and rely on just Black by @adriangb in [#6552](https://github.com/pydantic/pydantic/pull/6552) * Update JSON Schema documentation for V2 by @tpdorsey in [#6492](https://github.com/pydantic/pydantic/pull/6492) * Add documentation of cyclic reference handling by @dmontagu in [#6493](https://github.com/pydantic/pydantic/pull/6493) * Remove the need for change files by @samuelcolvin in [#6556](https://github.com/pydantic/pydantic/pull/6556) * add "north star" benchmark by @davidhewitt in [#6547](https://github.com/pydantic/pydantic/pull/6547) * Update Dataclasses docs by @tpdorsey in [#6470](https://github.com/pydantic/pydantic/pull/6470) * ♻� Use different error message on v1 redirects by @Kludex in [#6595](https://github.com/pydantic/pydantic/pull/6595) * ⬆ Upgrade `pydantic-core` to v2.2.0 by @lig in [#6589](https://github.com/pydantic/pydantic/pull/6589) * Fix serialization for IPvAny by @dmontagu in [#6572](https://github.com/pydantic/pydantic/pull/6572) * Improve CI by using PDM instead of pip to install typing-extensions by @adriangb in [#6602](https://github.com/pydantic/pydantic/pull/6602) * Add `enum` error type docs by @lig in [#6603](https://github.com/pydantic/pydantic/pull/6603) * � Fix `max_length` for unicode strings by @lig in [#6559](https://github.com/pydantic/pydantic/pull/6559) * Add documentation for accessing features via `pydantic.v1` by @tpdorsey in [#6604](https://github.com/pydantic/pydantic/pull/6604) * Include extra when iterating over a model by @adriangb in [#6562](https://github.com/pydantic/pydantic/pull/6562) * Fix typing of model_validator by @adriangb in [#6514](https://github.com/pydantic/pydantic/pull/6514) * Touch up Decimal validator by @adriangb in [#6327](https://github.com/pydantic/pydantic/pull/6327) * Fix various docstrings using fixed pytest-examples by @dmontagu in [#6607](https://github.com/pydantic/pydantic/pull/6607) * Handle function validators in a discriminated union by @dmontagu in [#6570](https://github.com/pydantic/pydantic/pull/6570) * Review json_schema.md by @tpdorsey in [#6608](https://github.com/pydantic/pydantic/pull/6608) * Make validate_call work on basemodel methods by @dmontagu in [#6569](https://github.com/pydantic/pydantic/pull/6569) * add test for big int json serde by @davidhewitt in [#6614](https://github.com/pydantic/pydantic/pull/6614) * Fix pydantic dataclass problem with dataclasses.field default_factory by @hramezani in [#6616](https://github.com/pydantic/pydantic/pull/6616) * Fixed mypy type inference for TypeAdapter by @zakstucke in [#6617](https://github.com/pydantic/pydantic/pull/6617) * Make it work to use None as a generic parameter by @dmontagu in [#6609](https://github.com/pydantic/pydantic/pull/6609) * Make it work to use `$ref` as an alias by @dmontagu in [#6568](https://github.com/pydantic/pydantic/pull/6568) * add note to migration guide about changes to `AnyUrl` etc by @davidhewitt in [#6618](https://github.com/pydantic/pydantic/pull/6618) * � Support defining `json_schema_extra` on `RootModel` using `Field` by @lig in [#6622](https://github.com/pydantic/pydantic/pull/6622) * Update pre-commit to prevent commits to main branch on accident by @dmontagu in [#6636](https://github.com/pydantic/pydantic/pull/6636) * Fix PDM CI for python 3.7 on MacOS/windows by @dmontagu in [#6627](https://github.com/pydantic/pydantic/pull/6627) * Produce more accurate signatures for pydantic dataclasses by @dmontagu in [#6633](https://github.com/pydantic/pydantic/pull/6633) * Updates to Url types for Pydantic V2 by @tpdorsey in [#6638](https://github.com/pydantic/pydantic/pull/6638) * Fix list markdown in `transform` docstring by @StefanBRas in [#6649](https://github.com/pydantic/pydantic/pull/6649) * simplify slots_dataclass construction to appease mypy by @davidhewitt in [#6639](https://github.com/pydantic/pydantic/pull/6639) * Update TypedDict schema generation docstring by @adriangb in [#6651](https://github.com/pydantic/pydantic/pull/6651) * Detect and lint-error for prints by @dmontagu in [#6655](https://github.com/pydantic/pydantic/pull/6655) * Add xfailing test for pydantic-core PR 766 by @dmontagu in [#6641](https://github.com/pydantic/pydantic/pull/6641) * Ignore unrecognized fields from dataclasses metadata by @dmontagu in [#6634](https://github.com/pydantic/pydantic/pull/6634) * Make non-existent class getattr a mypy error by @dmontagu in [#6658](https://github.com/pydantic/pydantic/pull/6658) * Update pydantic-core to 2.3.0 by @hramezani in [#6648](https://github.com/pydantic/pydantic/pull/6648) * Use OrderedDict from typing_extensions by @dmontagu in [#6664](https://github.com/pydantic/pydantic/pull/6664) * Fix typehint for JSON schema extra callable by @dmontagu in [#6659](https://github.com/pydantic/pydantic/pull/6659) ## v2.0.2 (2023-07-05) [GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.0.2) * Fix bug where round-trip pickling/unpickling a `RootModel` would change the value of `__dict__`, [#6457](https://github.com/pydantic/pydantic/pull/6457) by @dmontagu * Allow single-item discriminated unions, [#6405](https://github.com/pydantic/pydantic/pull/6405) by @dmontagu * Fix issue with union parsing of enums, [#6440](https://github.com/pydantic/pydantic/pull/6440) by @dmontagu * Docs: Fixed `constr` documentation, renamed old `regex` to new `pattern`, [#6452](https://github.com/pydantic/pydantic/pull/6452) by @miili * Change `GenerateJsonSchema.generate_definitions` signature, [#6436](https://github.com/pydantic/pydantic/pull/6436) by @dmontagu See the full changelog [here](https://github.com/pydantic/pydantic/releases/tag/v2.0.2) ## v2.0.1 (2023-07-04) [GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.0.1) First patch release of Pydantic V2 * Extra fields added via `setattr` (i.e. `m.some_extra_field = 'extra_value'`) are added to `.model_extra` if `model_config` `extra='allowed'`. Fixed [#6333](https://github.com/pydantic/pydantic/pull/6333), [#6365](https://github.com/pydantic/pydantic/pull/6365) by @aaraney * Automatically unpack JSON schema '$ref' for custom types, [#6343](https://github.com/pydantic/pydantic/pull/6343) by @adriangb * Fix tagged unions multiple processing in submodels, [#6340](https://github.com/pydantic/pydantic/pull/6340) by @suharnikov See the full changelog [here](https://github.com/pydantic/pydantic/releases/tag/v2.0.1) ## v2.0 (2023-06-30) [GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.0) Pydantic V2 is here! :tada: See [this post](https://pydantic.dev/articles/pydantic-v2-final) for more details. ## v2.0b3 (2023-06-16) Third beta pre-release of Pydantic V2 See the full changelog [here](https://github.com/pydantic/pydantic/releases/tag/v2.0b3) ## v2.0b2 (2023-06-03) Add `from_attributes` runtime flag to `TypeAdapter.validate_python` and `BaseModel.model_validate`. See the full changelog [here](https://github.com/pydantic/pydantic/releases/tag/v2.0b2) ## v2.0b1 (2023-06-01) First beta pre-release of Pydantic V2 See the full changelog [here](https://github.com/pydantic/pydantic/releases/tag/v2.0b1) ## v2.0a4 (2023-05-05) Fourth pre-release of Pydantic V2 See the full changelog [here](https://github.com/pydantic/pydantic/releases/tag/v2.0a4) ## v2.0a3 (2023-04-20) Third pre-release of Pydantic V2 See the full changelog [here](https://github.com/pydantic/pydantic/releases/tag/v2.0a3) ## v2.0a2 (2023-04-12) Second pre-release of Pydantic V2 See the full changelog [here](https://github.com/pydantic/pydantic/releases/tag/v2.0a2) ## v2.0a1 (2023-04-03) First pre-release of Pydantic V2! See [this post](https://pydantic.dev/articles/pydantic-v2-alpha) for more details. ## v1.10.24 (2025-09-25) * Add user warning when using Python 3.14 by @Viicos in https://github.com/pydantic/pydantic/pull/12263 Pydantic V1 will *not* work with Python 3.14 and greater. A warning is now raised as no actual error show up when using it, but the core behavior will silently get broken at runtime. * Fix mypy plugin issue for mypy v1.18 by @cdce8p in https://github.com/pydantic/pydantic/pull/12254 This fixes another mypy issue that was discovered after the previous v1.10.23 release. ## v1.10.23 (2025-09-13) * Fix mypy plugin for mypy 1.18 by @cdce8p in https://github.com/pydantic/pydantic/pull/12207 ## v1.10.22 (2025-04-17) * Fix compatibility with `typing-extensions` by @Viicos in https://github.com/pydantic/pydantic/pull/11764 ## v1.10.21 (2025-01-10) * Fix compatibility with ForwardRef._evaluate and Python < 3.12.4 by @griels in https://github.com/pydantic/pydantic/pull/11232 ## v1.10.20 (2025-01-07) This release provides proper support for Python 3.13, with (Cythonized) wheels published for this version. As a consequence, Cython was updated from `0.29.x` to `3.0.x`. * General maintenance of CI and build ecosystem by @Viicos in https://github.com/pydantic/pydantic/pull/10847 * Update Cython to `3.0.x`. * Properly address Python 3.13 deprecation warnings. * Migrate packaging to `pyproject.toml`, make use of PEP 517 build options. * Use [`build`](https://pypi.org/project/build/) instead of direct `setup.py` invocations. * Update various Github Actions versions. * Replace outdated stpmex link in documentation by @jaredenorris in https://github.com/pydantic/pydantic/pull/10997 ## v1.10.19 (2024-11-06) * Add warning when v2 model is nested in v1 model by @sydney-runkle in https://github.com/pydantic/pydantic/pull/10432 * Fix deprecation warning in V1 `isinstance` check by @alicederyn in https://github.com/pydantic/pydantic/pull/10645 ## v1.10.18 (2024-08-22) * Eval type fix in V1 by @sydney-runkle in https://github.com/pydantic/pydantic/pull/9751 * Add `to_lower_camel` to `__all__` in `utils.py` by @sydney-runkle (direct commit) * Fix `mypy` v1 plugin for mypy 1.11 release by @flaeppe in https://github.com/pydantic/pydantic/pull/10139 * Fix discriminator key used when discriminator has alias and `.schema(by_alias=False)` by @exs-dwoodward in https://github.com/pydantic/pydantic/pull/10146 ## v1.10.17 (2024-06-20) * Advertise Python 3.12 for 1.10.x! Part Deux by @vfazio in https://github.com/pydantic/pydantic/pull/9644 * Mirrored modules in `v1` namespace to fix typing and object resolution in python>3.11 by @exs-dwoodward in https://github.com/pydantic/pydantic/pull/9660 * setup: remove upper bound from python_requires by @vfazio in https://github.com/pydantic/pydantic/pull/9685 ## v1.10.16 (2024-06-11) * Specify recursive_guard as kwarg in FutureRef._evaluate by @vfazio in https://github.com/pydantic/pydantic/pull/9612 * Fix mypy v1 plugin for upcoming mypy release by @ cdce8p in https://github.com/pydantic/pydantic/pull/9586 * Import modules/objects directly from v1 namespace by @exs-dwoodward in https://github.com/pydantic/pydantic/pull/9162 ## v1.10.15 (2024-04-03) * Add pydantic.v1 namespace to Pydantic v1 by @exs-dmiketa in https://github.com/pydantic/pydantic/pull/9042 * Relax version of typing-extensions for V1 by @SonOfLilit in https://github.com/pydantic/pydantic/pull/8819 * patch fix for mypy by @sydney-runkle in https://github.com/pydantic/pydantic/pull/8765 ## v1.10.14 (2024-01-19) * Update install.md by @dmontagu in #7690 * Fix ci to only deploy docs on release by @sydney-runkle in #7740 * Ubuntu fixes for V1 by @sydney-runkle in #8540 and #8587 * Fix cached_property handling in dataclasses when copied by @rdbisme in #8407 ## v1.10.13 (2023-09-27) * Fix: Add max length check to `pydantic.validate_email`, #7673 by @hramezani * Docs: Fix pip commands to install v1, #6930 by @chbndrhnns ## v1.10.12 (2023-07-24) * Fixes the `maxlen` property being dropped on `deque` validation. Happened only if the deque item has been typed. Changes the `_validate_sequence_like` func, [#6581](https://github.com/pydantic/pydantic/pull/6581) by @maciekglowka ## v1.10.11 (2023-07-04) * Importing create_model in tools.py through relative path instead of absolute path - so that it doesn't import V2 code when copied over to V2 branch, [#6361](https://github.com/pydantic/pydantic/pull/6361) by @SharathHuddar ## v1.10.10 (2023-06-30) * Add Pydantic `Json` field support to settings management, [#6250](https://github.com/pydantic/pydantic/pull/6250) by @hramezani * Fixed literal validator errors for unhashable values, [#6188](https://github.com/pydantic/pydantic/pull/6188) by @markus1978 * Fixed bug with generics receiving forward refs, [#6130](https://github.com/pydantic/pydantic/pull/6130) by @mark-todd * Update install method of FastAPI for internal tests in CI, [#6117](https://github.com/pydantic/pydantic/pull/6117) by @Kludex ## v1.10.9 (2023-06-07) * Fix trailing zeros not ignored in Decimal validation, [#5968](https://github.com/pydantic/pydantic/pull/5968) by @hramezani * Fix mypy plugin for v1.4.0, [#5928](https://github.com/pydantic/pydantic/pull/5928) by @cdce8p * Add future and past date hypothesis strategies, [#5850](https://github.com/pydantic/pydantic/pull/5850) by @bschoenmaeckers * Discourage usage of Cython 3 with Pydantic 1.x, [#5845](https://github.com/pydantic/pydantic/pull/5845) by @lig ## v1.10.8 (2023-05-23) * Fix a bug in `Literal` usage with `typing-extension==4.6.0`, [#5826](https://github.com/pydantic/pydantic/pull/5826) by @hramezani * This solves the (closed) issue [#3849](https://github.com/pydantic/pydantic/pull/3849) where aliased fields that use discriminated union fail to validate when the data contains the non-aliased field name, [#5736](https://github.com/pydantic/pydantic/pull/5736) by @benwah * Update email-validator dependency to >=2.0.0post2, [#5627](https://github.com/pydantic/pydantic/pull/5627) by @adriangb * update `AnyClassMethod` for changes in [python/typeshed#9771](https://github.com/python/typeshed/issues/9771), [#5505](https://github.com/pydantic/pydantic/pull/5505) by @ITProKyle ## v1.10.7 (2023-03-22) * Fix creating schema from model using `ConstrainedStr` with `regex` as dict key, [#5223](https://github.com/pydantic/pydantic/pull/5223) by @matejetz * Address bug in mypy plugin caused by explicit_package_bases=True, [#5191](https://github.com/pydantic/pydantic/pull/5191) by @dmontagu * Add implicit defaults in the mypy plugin for Field with no default argument, [#5190](https://github.com/pydantic/pydantic/pull/5190) by @dmontagu * Fix schema generated for Enum values used as Literals in discriminated unions, [#5188](https://github.com/pydantic/pydantic/pull/5188) by @javibookline * Fix mypy failures caused by the pydantic mypy plugin when users define `from_orm` in their own classes, [#5187](https://github.com/pydantic/pydantic/pull/5187) by @dmontagu * Fix `InitVar` usage with pydantic dataclasses, mypy version `1.1.1` and the custom mypy plugin, [#5162](https://github.com/pydantic/pydantic/pull/5162) by @cdce8p ## v1.10.6 (2023-03-08) * Implement logic to support creating validators from non standard callables by using defaults to identify them and unwrapping `functools.partial` and `functools.partialmethod` when checking the signature, [#5126](https://github.com/pydantic/pydantic/pull/5126) by @JensHeinrich * Fix mypy plugin for v1.1.1, and fix `dataclass_transform` decorator for pydantic dataclasses, [#5111](https://github.com/pydantic/pydantic/pull/5111) by @cdce8p * Raise `ValidationError`, not `ConfigError`, when a discriminator value is unhashable, [#4773](https://github.com/pydantic/pydantic/pull/4773) by @kurtmckee ## v1.10.5 (2023-02-15) * Fix broken parametrized bases handling with `GenericModel`s with complex sets of models, [#5052](https://github.com/pydantic/pydantic/pull/5052) by @MarkusSintonen * Invalidate mypy cache if plugin config changes, [#5007](https://github.com/pydantic/pydantic/pull/5007) by @cdce8p * Fix `RecursionError` when deep-copying dataclass types wrapped by pydantic, [#4949](https://github.com/pydantic/pydantic/pull/4949) by @mbillingr * Fix `X | Y` union syntax breaking `GenericModel`, [#4146](https://github.com/pydantic/pydantic/pull/4146) by @thenx * Switch coverage badge to show coverage for this branch/release, [#5060](https://github.com/pydantic/pydantic/pull/5060) by @samuelcolvin ## v1.10.4 (2022-12-30) * Change dependency to `typing-extensions>=4.2.0`, [#4885](https://github.com/pydantic/pydantic/pull/4885) by @samuelcolvin ## v1.10.3 (2022-12-29) **NOTE: v1.10.3 was ["yanked"](https://pypi.org/help/#yanked) from PyPI due to [#4885](https://github.com/pydantic/pydantic/pull/4885) which is fixed in v1.10.4** * fix parsing of custom root models, [#4883](https://github.com/pydantic/pydantic/pull/4883) by @gou177 * fix: use dataclass proxy for frozen or empty dataclasses, [#4878](https://github.com/pydantic/pydantic/pull/4878) by @PrettyWood * Fix `schema` and `schema_json` on models where a model instance is a one of default values, [#4781](https://github.com/pydantic/pydantic/pull/4781) by @Bobronium * Add Jina AI to sponsors on docs index page, [#4767](https://github.com/pydantic/pydantic/pull/4767) by @samuelcolvin * fix: support assignment on `DataclassProxy`, [#4695](https://github.com/pydantic/pydantic/pull/4695) by @PrettyWood * Add `postgresql+psycopg` as allowed scheme for `PostgreDsn` to make it usable with SQLAlchemy 2, [#4689](https://github.com/pydantic/pydantic/pull/4689) by @morian * Allow dict schemas to have both `patternProperties` and `additionalProperties`, [#4641](https://github.com/pydantic/pydantic/pull/4641) by @jparise * Fixes error passing None for optional lists with `unique_items`, [#4568](https://github.com/pydantic/pydantic/pull/4568) by @mfulgo * Fix `GenericModel` with `Callable` param raising a `TypeError`, [#4551](https://github.com/pydantic/pydantic/pull/4551) by @mfulgo * Fix field regex with `StrictStr` type annotation, [#4538](https://github.com/pydantic/pydantic/pull/4538) by @sisp * Correct `dataclass_transform` keyword argument name from `field_descriptors` to `field_specifiers`, [#4500](https://github.com/pydantic/pydantic/pull/4500) by @samuelcolvin * fix: avoid multiple calls of `__post_init__` when dataclasses are inherited, [#4487](https://github.com/pydantic/pydantic/pull/4487) by @PrettyWood * Reduce the size of binary wheels, [#2276](https://github.com/pydantic/pydantic/pull/2276) by @samuelcolvin ## v1.10.2 (2022-09-05) * **Revert Change:** Revert percent encoding of URL parts which was originally added in [#4224](https://github.com/pydantic/pydantic/pull/4224), [#4470](https://github.com/pydantic/pydantic/pull/4470) by @samuelcolvin * Prevent long (length > `4_300`) strings/bytes as input to int fields, see [python/cpython#95778](https://github.com/python/cpython/issues/95778) and [CVE-2020-10735](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-10735), [#1477](https://github.com/pydantic/pydantic/pull/1477) by @samuelcolvin * fix: dataclass wrapper was not always called, [#4477](https://github.com/pydantic/pydantic/pull/4477) by @PrettyWood * Use `tomllib` on Python 3.11 when parsing `mypy` configuration, [#4476](https://github.com/pydantic/pydantic/pull/4476) by @hauntsaninja * Basic fix of `GenericModel` cache to detect order of arguments in `Union` models, [#4474](https://github.com/pydantic/pydantic/pull/4474) by @sveinugu * Fix mypy plugin when using bare types like `list` and `dict` as `default_factory`, [#4457](https://github.com/pydantic/pydantic/pull/4457) by @samuelcolvin ## v1.10.1 (2022-08-31) * Add `__hash__` method to `pydantic.color.Color` class, [#4454](https://github.com/pydantic/pydantic/pull/4454) by @czaki ## v1.10.0 (2022-08-30) * Refactor the whole *pydantic* `dataclass` decorator to really act like its standard lib equivalent. It hence keeps `__eq__`, `__hash__`, ... and makes comparison with its non-validated version possible. It also fixes usage of `frozen` dataclasses in fields and usage of `default_factory` in nested dataclasses. The support of `Config.extra` has been added. Finally, config customization directly via a `dict` is now possible, [#2557](https://github.com/pydantic/pydantic/pull/2557) by @PrettyWood

**BREAKING CHANGES:** * The `compiled` boolean (whether *pydantic* is compiled with cython) has been moved from `main.py` to `version.py` * Now that `Config.extra` is supported, `dataclass` ignores by default extra arguments (like `BaseModel`) * Fix PEP487 `__set_name__` protocol in `BaseModel` for PrivateAttrs, [#4407](https://github.com/pydantic/pydantic/pull/4407) by @tlambert03 * Allow for custom parsing of environment variables via `parse_env_var` in `Config`, [#4406](https://github.com/pydantic/pydantic/pull/4406) by @acmiyaguchi * Rename `master` to `main`, [#4405](https://github.com/pydantic/pydantic/pull/4405) by @hramezani * Fix `StrictStr` does not raise `ValidationError` when `max_length` is present in `Field`, [#4388](https://github.com/pydantic/pydantic/pull/4388) by @hramezani * Make `SecretStr` and `SecretBytes` hashable, [#4387](https://github.com/pydantic/pydantic/pull/4387) by @chbndrhnns * Fix `StrictBytes` does not raise `ValidationError` when `max_length` is present in `Field`, [#4380](https://github.com/pydantic/pydantic/pull/4380) by @JeanArhancet * Add support for bare `type`, [#4375](https://github.com/pydantic/pydantic/pull/4375) by @hramezani * Support Python 3.11, including binaries for 3.11 in PyPI, [#4374](https://github.com/pydantic/pydantic/pull/4374) by @samuelcolvin * Add support for `re.Pattern`, [#4366](https://github.com/pydantic/pydantic/pull/4366) by @hramezani * Fix `__post_init_post_parse__` is incorrectly passed keyword arguments when no `__post_init__` is defined, [#4361](https://github.com/pydantic/pydantic/pull/4361) by @hramezani * Fix implicitly importing `ForwardRef` and `Callable` from `pydantic.typing` instead of `typing` and also expose `MappingIntStrAny`, [#4358](https://github.com/pydantic/pydantic/pull/4358) by @aminalaee * remove `Any` types from the `dataclass` decorator so it can be used with the `disallow_any_expr` mypy option, [#4356](https://github.com/pydantic/pydantic/pull/4356) by @DetachHead * moved repo to `pydantic/pydantic`, [#4348](https://github.com/pydantic/pydantic/pull/4348) by @yezz123 * fix "extra fields not permitted" error when dataclass with `Extra.forbid` is validated multiple times, [#4343](https://github.com/pydantic/pydantic/pull/4343) by @detachhead * Add Python 3.9 and 3.10 examples to docs, [#4339](https://github.com/pydantic/pydantic/pull/4339) by @Bobronium * Discriminated union models now use `oneOf` instead of `anyOf` when generating OpenAPI schema definitions, [#4335](https://github.com/pydantic/pydantic/pull/4335) by @MaxwellPayne * Allow type checkers to infer inner type of `Json` type. `Json[list[str]]` will be now inferred as `list[str]`, `Json[Any]` should be used instead of plain `Json`. Runtime behaviour is not changed, [#4332](https://github.com/pydantic/pydantic/pull/4332) by @Bobronium * Allow empty string aliases by using a `alias is not None` check, rather than `bool(alias)`, [#4253](https://github.com/pydantic/pydantic/pull/4253) by @sergeytsaplin * Update `ForwardRef`s in `Field.outer_type_`, [#4249](https://github.com/pydantic/pydantic/pull/4249) by @JacobHayes * The use of `__dataclass_transform__` has been replaced by `typing_extensions.dataclass_transform`, which is the preferred way to mark pydantic models as a dataclass under [PEP 681](https://peps.python.org/pep-0681/), [#4241](https://github.com/pydantic/pydantic/pull/4241) by @multimeric * Use parent model's `Config` when validating nested `NamedTuple` fields, [#4219](https://github.com/pydantic/pydantic/pull/4219) by @synek * Update `BaseModel.construct` to work with aliased Fields, [#4192](https://github.com/pydantic/pydantic/pull/4192) by @kylebamos * Catch certain raised errors in `smart_deepcopy` and revert to `deepcopy` if so, [#4184](https://github.com/pydantic/pydantic/pull/4184) by @coneybeare * Add `Config.anystr_upper` and `to_upper` kwarg to constr and conbytes, [#4165](https://github.com/pydantic/pydantic/pull/4165) by @satheler * Fix JSON schema for `set` and `frozenset` when they include default values, [#4155](https://github.com/pydantic/pydantic/pull/4155) by @aminalaee * Teach the mypy plugin that methods decorated by `@validator` are classmethods, [#4102](https://github.com/pydantic/pydantic/pull/4102) by @DMRobertson * Improve mypy plugin's ability to detect required fields, [#4086](https://github.com/pydantic/pydantic/pull/4086) by @richardxia * Support fields of type `Type[]` in schema, [#4051](https://github.com/pydantic/pydantic/pull/4051) by @aminalaee * Add `default` value in JSON Schema when `const=True`, [#4031](https://github.com/pydantic/pydantic/pull/4031) by @aminalaee * Adds reserved word check to signature generation logic, [#4011](https://github.com/pydantic/pydantic/pull/4011) by @strue36 * Fix Json strategy failure for the complex nested field, [#4005](https://github.com/pydantic/pydantic/pull/4005) by @sergiosim * Add JSON-compatible float constraint `allow_inf_nan`, [#3994](https://github.com/pydantic/pydantic/pull/3994) by @tiangolo * Remove undefined behaviour when `env_prefix` had characters in common with `env_nested_delimiter`, [#3975](https://github.com/pydantic/pydantic/pull/3975) by @arsenron * Support generics model with `create_model`, [#3945](https://github.com/pydantic/pydantic/pull/3945) by @hot123s * allow submodels to overwrite extra field info, [#3934](https://github.com/pydantic/pydantic/pull/3934) by @PrettyWood * Document and test structural pattern matching ([PEP 636](https://peps.python.org/pep-0636/)) on `BaseModel`, [#3920](https://github.com/pydantic/pydantic/pull/3920) by @irgolic * Fix incorrect deserialization of python timedelta object to ISO 8601 for negative time deltas. Minus was serialized in incorrect place ("P-1DT23H59M59.888735S" instead of correct "-P1DT23H59M59.888735S"), [#3899](https://github.com/pydantic/pydantic/pull/3899) by @07pepa * Fix validation of discriminated union fields with an alias when passing a model instance, [#3846](https://github.com/pydantic/pydantic/pull/3846) by @chornsby * Add a CockroachDsn type to validate CockroachDB connection strings. The type supports the following schemes: `cockroachdb`, `cockroachdb+psycopg2` and `cockroachdb+asyncpg`, [#3839](https://github.com/pydantic/pydantic/pull/3839) by @blubber * Fix MyPy plugin to not override pre-existing `__init__` method in models, [#3824](https://github.com/pydantic/pydantic/pull/3824) by @patrick91 * Fix mypy version checking, [#3783](https://github.com/pydantic/pydantic/pull/3783) by @KotlinIsland * support overwriting dunder attributes of `BaseModel` instances, [#3777](https://github.com/pydantic/pydantic/pull/3777) by @PrettyWood * Added `ConstrainedDate` and `condate`, [#3740](https://github.com/pydantic/pydantic/pull/3740) by @hottwaj * Support `kw_only` in dataclasses, [#3670](https://github.com/pydantic/pydantic/pull/3670) by @detachhead * Add comparison method for `Color` class, [#3646](https://github.com/pydantic/pydantic/pull/3646) by @aminalaee * Drop support for python3.6, associated cleanup, [#3605](https://github.com/pydantic/pydantic/pull/3605) by @samuelcolvin * created new function `to_lower_camel()` for "non pascal case" camel case, [#3463](https://github.com/pydantic/pydantic/pull/3463) by @schlerp * Add checks to `default` and `default_factory` arguments in Mypy plugin, [#3430](https://github.com/pydantic/pydantic/pull/3430) by @klaa97 * fix mangling of `inspect.signature` for `BaseModel`, [#3413](https://github.com/pydantic/pydantic/pull/3413) by @fix-inspect-signature * Adds the `SecretField` abstract class so that all the current and future secret fields like `SecretStr` and `SecretBytes` will derive from it, [#3409](https://github.com/pydantic/pydantic/pull/3409) by @expobrain * Support multi hosts validation in `PostgresDsn`, [#3337](https://github.com/pydantic/pydantic/pull/3337) by @rglsk * Fix parsing of very small numeric timedelta values, [#3315](https://github.com/pydantic/pydantic/pull/3315) by @samuelcolvin * Update `SecretsSettingsSource` to respect `config.case_sensitive`, [#3273](https://github.com/pydantic/pydantic/pull/3273) by @JeanArhancet * Add MongoDB network data source name (DSN) schema, [#3229](https://github.com/pydantic/pydantic/pull/3229) by @snosratiershad * Add support for multiple dotenv files, [#3222](https://github.com/pydantic/pydantic/pull/3222) by @rekyungmin * Raise an explicit `ConfigError` when multiple fields are incorrectly set for a single validator, [#3215](https://github.com/pydantic/pydantic/pull/3215) by @SunsetOrange * Allow ellipsis on `Field`s inside `Annotated` for `TypedDicts` required, [#3133](https://github.com/pydantic/pydantic/pull/3133) by @ezegomez * Catch overflow errors in `int_validator`, [#3112](https://github.com/pydantic/pydantic/pull/3112) by @ojii * Adds a `__rich_repr__` method to `Representation` class which enables pretty printing with [Rich](https://github.com/willmcgugan/rich), [#3099](https://github.com/pydantic/pydantic/pull/3099) by @willmcgugan * Add percent encoding in `AnyUrl` and descendent types, [#3061](https://github.com/pydantic/pydantic/pull/3061) by @FaresAhmedb * `validate_arguments` decorator now supports `alias`, [#3019](https://github.com/pydantic/pydantic/pull/3019) by @MAD-py * Avoid `__dict__` and `__weakref__` attributes in `AnyUrl` and IP address fields, [#2890](https://github.com/pydantic/pydantic/pull/2890) by @nuno-andre * Add ability to use `Final` in a field type annotation, [#2766](https://github.com/pydantic/pydantic/pull/2766) by @uriyyo * Update requirement to `typing_extensions>=4.1.0` to guarantee `dataclass_transform` is available, [#4424](https://github.com/pydantic/pydantic/pull/4424) by @commonism * Add Explosion and AWS to main sponsors, [#4413](https://github.com/pydantic/pydantic/pull/4413) by @samuelcolvin * Update documentation for `copy_on_model_validation` to reflect recent changes, [#4369](https://github.com/pydantic/pydantic/pull/4369) by @samuelcolvin * Runtime warning if `__slots__` is passed to `create_model`, `__slots__` is then ignored, [#4432](https://github.com/pydantic/pydantic/pull/4432) by @samuelcolvin * Add type hints to `BaseSettings.Config` to avoid mypy errors, also correct mypy version compatibility notice in docs, [#4450](https://github.com/pydantic/pydantic/pull/4450) by @samuelcolvin ## v1.10.0b1 (2022-08-24) Pre-release, see [the GitHub release](https://github.com/pydantic/pydantic/releases/tag/v1.10.0b1) for details. ## v1.10.0a2 (2022-08-24) Pre-release, see [the GitHub release](https://github.com/pydantic/pydantic/releases/tag/v1.10.0a2) for details. ## v1.10.0a1 (2022-08-22) Pre-release, see [the GitHub release](https://github.com/pydantic/pydantic/releases/tag/v1.10.0a1) for details. ## v1.9.2 (2022-08-11) **Revert Breaking Change**: *v1.9.1* introduced a breaking change where model fields were deep copied by default, this release reverts the default behaviour to match *v1.9.0* and before, while also allow deep-copy behaviour via `copy_on_model_validation = 'deep'`. See [#4092](https://github.com/pydantic/pydantic/pull/4092) for more information. * Allow for shallow copies of model fields, `Config.copy_on_model_validation` is now a str which must be `'none'`, `'deep'`, or `'shallow'` corresponding to not copying, deep copy & shallow copy; default `'shallow'`, [#4093](https://github.com/pydantic/pydantic/pull/4093) by @timkpaine ## v1.9.1 (2022-05-19) Thank you to pydantic's sponsors: @tiangolo, @stellargraph, @JonasKs, @grillazz, @Mazyod, @kevinalh, @chdsbd, @povilasb, @povilasb, @jina-ai, @mainframeindustries, @robusta-dev, @SendCloud, @rszamszur, @jodal, @hardbyte, @corleyma, @daddycocoaman, @Rehket, @jokull, @reillysiemens, @westonsteimel, @primer-io, @koxudaxi, @browniebroke, @stradivari96, @adriangb, @kamalgill, @jqueguiner, @dev-zero, @datarootsio, @RedCarpetUp for their kind support. * Limit the size of `generics._generic_types_cache` and `generics._assigned_parameters` to avoid unlimited increase in memory usage, [#4083](https://github.com/pydantic/pydantic/pull/4083) by @samuelcolvin * Add Jupyverse and FPS as Jupyter projects using pydantic, [#4082](https://github.com/pydantic/pydantic/pull/4082) by @davidbrochart * Speedup `__isinstancecheck__` on pydantic models when the type is not a model, may also avoid memory "leaks", [#4081](https://github.com/pydantic/pydantic/pull/4081) by @samuelcolvin * Fix in-place modification of `FieldInfo` that caused problems with PEP 593 type aliases, [#4067](https://github.com/pydantic/pydantic/pull/4067) by @adriangb * Add support for autocomplete in VS Code via `__dataclass_transform__` when using `pydantic.dataclasses.dataclass`, [#4006](https://github.com/pydantic/pydantic/pull/4006) by @giuliano-oliveira * Remove benchmarks from codebase and docs, [#3973](https://github.com/pydantic/pydantic/pull/3973) by @samuelcolvin * Typing checking with pyright in CI, improve docs on vscode/pylance/pyright, [#3972](https://github.com/pydantic/pydantic/pull/3972) by @samuelcolvin * Fix nested Python dataclass schema regression, [#3819](https://github.com/pydantic/pydantic/pull/3819) by @himbeles * Update documentation about lazy evaluation of sources for Settings, [#3806](https://github.com/pydantic/pydantic/pull/3806) by @garyd203 * Prevent subclasses of bytes being converted to bytes, [#3706](https://github.com/pydantic/pydantic/pull/3706) by @samuelcolvin * Fixed "error checking inheritance of" when using PEP585 and PEP604 type hints, [#3681](https://github.com/pydantic/pydantic/pull/3681) by @aleksul * Allow self referencing `ClassVar`s in models, [#3679](https://github.com/pydantic/pydantic/pull/3679) by @samuelcolvin * **Breaking Change, see [#4106](https://github.com/pydantic/pydantic/pull/4106)**: Fix issue with self-referencing dataclass, [#3675](https://github.com/pydantic/pydantic/pull/3675) by @uriyyo * Include non-standard port numbers in rendered URLs, [#3652](https://github.com/pydantic/pydantic/pull/3652) by @dolfinus * `Config.copy_on_model_validation` does a deep copy and not a shallow one, [#3641](https://github.com/pydantic/pydantic/pull/3641) by @PrettyWood * fix: clarify that discriminated unions do not support singletons, [#3636](https://github.com/pydantic/pydantic/pull/3636) by @tommilligan * Add `read_text(encoding='utf-8')` for `setup.py`, [#3625](https://github.com/pydantic/pydantic/pull/3625) by @hswong3i * Fix JSON Schema generation for Discriminated Unions within lists, [#3608](https://github.com/pydantic/pydantic/pull/3608) by @samuelcolvin ## v1.9.0 (2021-12-31) Thank you to pydantic's sponsors: @sthagen, @timdrijvers, @toinbis, @koxudaxi, @ginomempin, @primer-io, @and-semakin, @westonsteimel, @reillysiemens, @es3n1n, @jokull, @JonasKs, @Rehket, @corleyma, @daddycocoaman, @hardbyte, @datarootsio, @jodal, @aminalaee, @rafsaf, @jqueguiner, @chdsbd, @kevinalh, @Mazyod, @grillazz, @JonasKs, @simw, @leynier, @xfenix for their kind support. ### Highlights * add Python 3.10 support, [#2885](https://github.com/pydantic/pydantic/pull/2885) by @PrettyWood * [Discriminated unions](https://pydantic.dev/docs/validation/1.10/usage/types/#discriminated-unions-aka-tagged-unions), [#619](https://github.com/pydantic/pydantic/pull/619) by @PrettyWood * [`Config.smart_union` for better union logic](https://pydantic.dev/docs/validation/1.10/usage/model_config/#smart-union), [#2092](https://github.com/pydantic/pydantic/pull/2092) by @PrettyWood * Binaries for Macos M1 CPUs, [#3498](https://github.com/pydantic/pydantic/pull/3498) by @samuelcolvin * Complex types can be set via [nested environment variables](https://pydantic.dev/docs/validation/1.10/usage/settings/#parsing-environment-variable-values), e.g. `foo___bar`, [#3159](https://github.com/pydantic/pydantic/pull/3159) by @Air-Mark * add a dark mode to *pydantic* documentation, [#2913](https://github.com/pydantic/pydantic/pull/2913) by @gbdlin * Add support for autocomplete in VS Code via `__dataclass_transform__`, [#2721](https://github.com/pydantic/pydantic/pull/2721) by @tiangolo * Add "exclude" as a field parameter so that it can be configured using model config, [#660](https://github.com/pydantic/pydantic/pull/660) by @daviskirk ### v1.9.0 (2021-12-31) Changes * Apply `update_forward_refs` to `Config.json_encodes` prevent name clashes in types defined via strings, [#3583](https://github.com/pydantic/pydantic/pull/3583) by @samuelcolvin * Extend pydantic's mypy plugin to support mypy versions `0.910`, `0.920`, `0.921` & `0.930`, [#3573](https://github.com/pydantic/pydantic/pull/3573) & [#3594](https://github.com/pydantic/pydantic/pull/3594) by @PrettyWood, @christianbundy, @samuelcolvin ### v1.9.0a2 (2021-12-24) Changes * support generic models with discriminated union, [#3551](https://github.com/pydantic/pydantic/pull/3551) by @PrettyWood * keep old behaviour of `json()` by default, [#3542](https://github.com/pydantic/pydantic/pull/3542) by @PrettyWood * Removed typing-only `__root__` attribute from `BaseModel`, [#3540](https://github.com/pydantic/pydantic/pull/3540) by @layday * Build Python 3.10 wheels, [#3539](https://github.com/pydantic/pydantic/pull/3539) by @mbachry * Fix display of `extra` fields with model `__repr__`, [#3234](https://github.com/pydantic/pydantic/pull/3234) by @cocolman * models copied via `Config.copy_on_model_validation` always have all fields, [#3201](https://github.com/pydantic/pydantic/pull/3201) by @PrettyWood * nested ORM from nested dictionaries, [#3182](https://github.com/pydantic/pydantic/pull/3182) by @PrettyWood * fix link to discriminated union section by @PrettyWood ### v1.9.0a1 (2021-12-18) Changes * Add support for `Decimal`-specific validation configurations in `Field()`, additionally to using `condecimal()`, to allow better support from editors and tooling, [#3507](https://github.com/pydantic/pydantic/pull/3507) by @tiangolo * Add `arm64` binaries suitable for MacOS with an M1 CPU to PyPI, [#3498](https://github.com/pydantic/pydantic/pull/3498) by @samuelcolvin * Fix issue where `None` was considered invalid when using a `Union` type containing `Any` or `object`, [#3444](https://github.com/pydantic/pydantic/pull/3444) by @tharradine * When generating field schema, pass optional `field` argument (of type `pydantic.fields.ModelField`) to `__modify_schema__()` if present, [#3434](https://github.com/pydantic/pydantic/pull/3434) by @jasujm * Fix issue when pydantic fail to parse `typing.ClassVar` string type annotation, [#3401](https://github.com/pydantic/pydantic/pull/3401) by @uriyyo * Mention Python >= 3.9.2 as an alternative to `typing_extensions.TypedDict`, [#3374](https://github.com/pydantic/pydantic/pull/3374) by @BvB93 * Changed the validator method name in the [Custom Errors example](https://pydantic.dev/docs/validation/1.10/usage/models/#custom-errors) to more accurately describe what the validator is doing; changed from `name_must_contain_space` to `value_must_equal_bar`, [#3327](https://github.com/pydantic/pydantic/pull/3327) by @michaelrios28 * Add `AmqpDsn` class, [#3254](https://github.com/pydantic/pydantic/pull/3254) by @kludex * Always use `Enum` value as default in generated JSON schema, [#3190](https://github.com/pydantic/pydantic/pull/3190) by @joaommartins * Add support for Mypy 0.920, [#3175](https://github.com/pydantic/pydantic/pull/3175) by @christianbundy * `validate_arguments` now supports `extra` customization (used to always be `Extra.forbid`), [#3161](https://github.com/pydantic/pydantic/pull/3161) by @PrettyWood * Complex types can be set by nested environment variables, [#3159](https://github.com/pydantic/pydantic/pull/3159) by @Air-Mark * Fix mypy plugin to collect fields based on `pydantic.utils.is_valid_field` so that it ignores untyped private variables, [#3146](https://github.com/pydantic/pydantic/pull/3146) by @hi-ogawa * fix `validate_arguments` issue with `Config.validate_all`, [#3135](https://github.com/pydantic/pydantic/pull/3135) by @PrettyWood * avoid dict coercion when using dict subclasses as field type, [#3122](https://github.com/pydantic/pydantic/pull/3122) by @PrettyWood * add support for `object` type, [#3062](https://github.com/pydantic/pydantic/pull/3062) by @PrettyWood * Updates pydantic dataclasses to keep `_special` properties on parent classes, [#3043](https://github.com/pydantic/pydantic/pull/3043) by @zulrang * Add a `TypedDict` class for error objects, [#3038](https://github.com/pydantic/pydantic/pull/3038) by @matthewhughes934 * Fix support for using a subclass of an annotation as a default, [#3018](https://github.com/pydantic/pydantic/pull/3018) by @JacobHayes * make `create_model_from_typeddict` mypy compliant, [#3008](https://github.com/pydantic/pydantic/pull/3008) by @PrettyWood * Make multiple inheritance work when using `PrivateAttr`, [#2989](https://github.com/pydantic/pydantic/pull/2989) by @hmvp * Parse environment variables as JSON, if they have a `Union` type with a complex subfield, [#2936](https://github.com/pydantic/pydantic/pull/2936) by @cbartz * Prevent `StrictStr` permitting `Enum` values where the enum inherits from `str`, [#2929](https://github.com/pydantic/pydantic/pull/2929) by @samuelcolvin * Make `SecretsSettingsSource` parse values being assigned to fields of complex types when sourced from a secrets file, just as when sourced from environment variables, [#2917](https://github.com/pydantic/pydantic/pull/2917) by @davidmreed * add a dark mode to *pydantic* documentation, [#2913](https://github.com/pydantic/pydantic/pull/2913) by @gbdlin * Make `pydantic-mypy` plugin compatible with `pyproject.toml` configuration, consistent with `mypy` changes. See the [doc](https://pydantic.dev/docs/validation/1.10/extras/mypy_plugin/) for more information, [#2908](https://github.com/pydantic/pydantic/pull/2908) by @jrwalk * add Python 3.10 support, [#2885](https://github.com/pydantic/pydantic/pull/2885) by @PrettyWood * Correctly parse generic models with `Json[T]`, [#2860](https://github.com/pydantic/pydantic/pull/2860) by @geekingfrog * Update contrib docs re: Python version to use for building docs, [#2856](https://github.com/pydantic/pydantic/pull/2856) by @paxcodes * Clarify documentation about *pydantic*'s support for custom validation and strict type checking, despite *pydantic* being primarily a parsing library, [#2855](https://github.com/pydantic/pydantic/pull/2855) by @paxcodes * Fix schema generation for `Deque` fields, [#2810](https://github.com/pydantic/pydantic/pull/2810) by @sergejkozin * fix an edge case when mixing constraints and `Literal`, [#2794](https://github.com/pydantic/pydantic/pull/2794) by @PrettyWood * Fix postponed annotation resolution for `NamedTuple` and `TypedDict` when they're used directly as the type of fields within Pydantic models, [#2760](https://github.com/pydantic/pydantic/pull/2760) by @jameysharp * Fix bug when `mypy` plugin fails on `construct` method call for `BaseSettings` derived classes, [#2753](https://github.com/pydantic/pydantic/pull/2753) by @uriyyo * Add function overloading for a `pydantic.create_model` function, [#2748](https://github.com/pydantic/pydantic/pull/2748) by @uriyyo * Fix mypy plugin issue with self field declaration, [#2743](https://github.com/pydantic/pydantic/pull/2743) by @uriyyo * The colon at the end of the line "The fields which were supplied when user was initialised:" suggests that the code following it is related. Changed it to a period, [#2733](https://github.com/pydantic/pydantic/pull/2733) by @krisaoe * Renamed variable `schema` to `schema_` to avoid shadowing of global variable name, [#2724](https://github.com/pydantic/pydantic/pull/2724) by @shahriyarr * Add support for autocomplete in VS Code via `__dataclass_transform__`, [#2721](https://github.com/pydantic/pydantic/pull/2721) by @tiangolo * add missing type annotations in `BaseConfig` and handle `max_length = 0`, [#2719](https://github.com/pydantic/pydantic/pull/2719) by @PrettyWood * Change `orm_mode` checking to allow recursive ORM mode parsing with dicts, [#2718](https://github.com/pydantic/pydantic/pull/2718) by @nuno-andre * Add episode 313 of the *Talk Python To Me* podcast, where Michael Kennedy and Samuel Colvin discuss Pydantic, to the docs, [#2712](https://github.com/pydantic/pydantic/pull/2712) by @RatulMaharaj * fix JSON schema generation when a field is of type `NamedTuple` and has a default value, [#2707](https://github.com/pydantic/pydantic/pull/2707) by @PrettyWood * `Enum` fields now properly support extra kwargs in schema generation, [#2697](https://github.com/pydantic/pydantic/pull/2697) by @sammchardy * **Breaking Change, see [#3780](https://github.com/pydantic/pydantic/pull/3780)**: Make serialization of referenced pydantic models possible, [#2650](https://github.com/pydantic/pydantic/pull/2650) by @PrettyWood * Add `uniqueItems` option to `ConstrainedList`, [#2618](https://github.com/pydantic/pydantic/pull/2618) by @nuno-andre * Try to evaluate forward refs automatically at model creation, [#2588](https://github.com/pydantic/pydantic/pull/2588) by @uriyyo * Switch docs preview and coverage display to use [smokeshow](https://smokeshow.helpmanual.io/), [#2580](https://github.com/pydantic/pydantic/pull/2580) by @samuelcolvin * Add `__version__` attribute to pydantic module, [#2572](https://github.com/pydantic/pydantic/pull/2572) by @paxcodes * Add `postgresql+asyncpg`, `postgresql+pg8000`, `postgresql+psycopg2`, `postgresql+psycopg2cffi`, `postgresql+py-postgresql` and `postgresql+pygresql` schemes for `PostgresDsn`, [#2567](https://github.com/pydantic/pydantic/pull/2567) by @postgres-asyncpg * Enable the Hypothesis plugin to generate a constrained decimal when the `decimal_places` argument is specified, [#2524](https://github.com/pydantic/pydantic/pull/2524) by @cwe5590 * Allow `collections.abc.Callable` to be used as type in Python 3.9, [#2519](https://github.com/pydantic/pydantic/pull/2519) by @daviskirk * Documentation update how to custom compile pydantic when using pip install, small change in `setup.py` to allow for custom CFLAGS when compiling, [#2517](https://github.com/pydantic/pydantic/pull/2517) by @peterroelants * remove side effect of `default_factory` to run it only once even if `Config.validate_all` is set, [#2515](https://github.com/pydantic/pydantic/pull/2515) by @PrettyWood * Add lookahead to ip regexes for `AnyUrl` hosts. This allows urls with DNS labels looking like IPs to validate as they are perfectly valid host names, [#2512](https://github.com/pydantic/pydantic/pull/2512) by @sbv-csis * Set `minItems` and `maxItems` in generated JSON schema for fixed-length tuples, [#2497](https://github.com/pydantic/pydantic/pull/2497) by @PrettyWood * Add `strict` argument to `conbytes`, [#2489](https://github.com/pydantic/pydantic/pull/2489) by @koxudaxi * Support user defined generic field types in generic models, [#2465](https://github.com/pydantic/pydantic/pull/2465) by @daviskirk * Add an example and a short explanation of subclassing `GetterDict` to docs, [#2463](https://github.com/pydantic/pydantic/pull/2463) by @nuno-andre * add `KafkaDsn` type, `HttpUrl` now has default port 80 for http and 443 for https, [#2447](https://github.com/pydantic/pydantic/pull/2447) by @MihanixA * Add `PastDate` and `FutureDate` types, [#2425](https://github.com/pydantic/pydantic/pull/2425) by @Kludex * Support generating schema for `Generic` fields with subtypes, [#2375](https://github.com/pydantic/pydantic/pull/2375) by @maximberg * fix(encoder): serialize `NameEmail` to str, [#2341](https://github.com/pydantic/pydantic/pull/2341) by @alecgerona * add `Config.smart_union` to prevent coercion in `Union` if possible, see [the doc](https://pydantic.dev/docs/validation/1.10/usage/model_config/#smart-union) for more information, [#2092](https://github.com/pydantic/pydantic/pull/2092) by @PrettyWood * Add ability to use `typing.Counter` as a model field type, [#2060](https://github.com/pydantic/pydantic/pull/2060) by @uriyyo * Add parameterised subclasses to `__bases__` when constructing new parameterised classes, so that `A <: B => A[int] <: B[int]`, [#2007](https://github.com/pydantic/pydantic/pull/2007) by @diabolo-dan * Create `FileUrl` type that allows URLs that conform to [RFC 8089](https://tools.ietf.org/html/rfc8089#section-2). Add `host_required` parameter, which is `True` by default (`AnyUrl` and subclasses), `False` in `RedisDsn`, `FileUrl`, [#1983](https://github.com/pydantic/pydantic/pull/1983) by @vgerak * add `confrozenset()`, analogous to `conset()` and `conlist()`, [#1897](https://github.com/pydantic/pydantic/pull/1897) by @PrettyWood * stop calling parent class `root_validator` if overridden, [#1895](https://github.com/pydantic/pydantic/pull/1895) by @PrettyWood * Add `repr` (defaults to `True`) parameter to `Field`, to hide it from the default representation of the `BaseModel`, [#1831](https://github.com/pydantic/pydantic/pull/1831) by @fnep * Accept empty query/fragment URL parts, [#1807](https://github.com/pydantic/pydantic/pull/1807) by @xavier ## v1.8.2 (2021-05-11) !!! warning A security vulnerability, level "moderate" is fixed in v1.8.2. Please upgrade **ASAP**. See security advisory [CVE-2021-29510](https://github.com/pydantic/pydantic/security/advisories/GHSA-5jqp-qgf6-3pvh) * **Security fix:** Fix `date` and `datetime` parsing so passing either `'infinity'` or `float('inf')` (or their negative values) does not cause an infinite loop, see security advisory [CVE-2021-29510](https://github.com/pydantic/pydantic/security/advisories/GHSA-5jqp-qgf6-3pvh) * fix schema generation with Enum by generating a valid name, [#2575](https://github.com/pydantic/pydantic/pull/2575) by @PrettyWood * fix JSON schema generation with a `Literal` of an enum member, [#2536](https://github.com/pydantic/pydantic/pull/2536) by @PrettyWood * Fix bug with configurations declarations that are passed as keyword arguments during class creation, [#2532](https://github.com/pydantic/pydantic/pull/2532) by @uriyyo * Allow passing `json_encoders` in class kwargs, [#2521](https://github.com/pydantic/pydantic/pull/2521) by @layday * support arbitrary types with custom `__eq__`, [#2483](https://github.com/pydantic/pydantic/pull/2483) by @PrettyWood * support `Annotated` in `validate_arguments` and in generic models with Python 3.9, [#2483](https://github.com/pydantic/pydantic/pull/2483) by @PrettyWood ## v1.8.1 (2021-03-03) Bug fixes for regressions and new features from `v1.8` * allow elements of `Config.field` to update elements of a `Field`, [#2461](https://github.com/pydantic/pydantic/pull/2461) by @samuelcolvin * fix validation with a `BaseModel` field and a custom root type, [#2449](https://github.com/pydantic/pydantic/pull/2449) by @PrettyWood * expose `Pattern` encoder to `fastapi`, [#2444](https://github.com/pydantic/pydantic/pull/2444) by @PrettyWood * enable the Hypothesis plugin to generate a constrained float when the `multiple_of` argument is specified, [#2442](https://github.com/pydantic/pydantic/pull/2442) by @tobi-lipede-oodle * Avoid `RecursionError` when using some types like `Enum` or `Literal` with generic models, [#2436](https://github.com/pydantic/pydantic/pull/2436) by @PrettyWood * do not overwrite declared `__hash__` in subclasses of a model, [#2422](https://github.com/pydantic/pydantic/pull/2422) by @PrettyWood * fix `mypy` complaints on `Path` and `UUID` related custom types, [#2418](https://github.com/pydantic/pydantic/pull/2418) by @PrettyWood * Support properly variable length tuples of compound types, [#2416](https://github.com/pydantic/pydantic/pull/2416) by @PrettyWood ## v1.8 (2021-02-26) Thank you to pydantic's sponsors: @jorgecarleitao, @BCarley, @chdsbd, @tiangolo, @matin, @linusg, @kevinalh, @koxudaxi, @timdrijvers, @mkeen, @meadsteve, @ginomempin, @primer-io, @and-semakin, @tomthorogood, @AjitZK, @westonsteimel, @Mazyod, @christippett, @CarlosDomingues, @Kludex, @r-m-n for their kind support. ### Highlights * [Hypothesis plugin](https://pydantic.dev/docs/validation/1.10/extras/hypothesis_plugin/) for testing, [#2097](https://github.com/pydantic/pydantic/pull/2097) by @Zac-HD * support for [`NamedTuple` and `TypedDict`](https://pydantic.dev/docs/validation/1.10/usage/types/#annotated-types), [#2216](https://github.com/pydantic/pydantic/pull/2216) by @PrettyWood * Support [`Annotated` hints on model fields](https://pydantic.dev/docs/validation/1.10/usage/schema/#typingannotated-fields), [#2147](https://github.com/pydantic/pydantic/pull/2147) by @JacobHayes * [`frozen` parameter on `Config`](https://pydantic.dev/docs/validation/1.10/usage/model_config/) to allow models to be hashed, [#1880](https://github.com/pydantic/pydantic/pull/1880) by @rhuille ### Changes * **Breaking Change**, remove old deprecation aliases from v1, [#2415](https://github.com/pydantic/pydantic/pull/2415) by @samuelcolvin: * remove notes on migrating to v1 in docs * remove `Schema` which was replaced by `Field` * remove `Config.case_insensitive` which was replaced by `Config.case_sensitive` (default `False`) * remove `Config.allow_population_by_alias` which was replaced by `Config.allow_population_by_field_name` * remove `model.fields` which was replaced by `model.__fields__` * remove `model.to_string()` which was replaced by `str(model)` * remove `model.__values__` which was replaced by `model.__dict__` * **Breaking Change:** always validate only first sublevel items with `each_item`. There were indeed some edge cases with some compound types where the validated items were the last sublevel ones, [#1933](https://github.com/pydantic/pydantic/pull/1933) by @PrettyWood * Update docs extensions to fix local syntax highlighting, [#2400](https://github.com/pydantic/pydantic/pull/2400) by @daviskirk * fix: allow `utils.lenient_issubclass` to handle `typing.GenericAlias` objects like `list[str]` in Python >= 3.9, [#2399](https://github.com/pydantic/pydantic/pull/2399) by @daviskirk * Improve field declaration for *pydantic* `dataclass` by allowing the usage of *pydantic* `Field` or `'metadata'` kwarg of `dataclasses.field`, [#2384](https://github.com/pydantic/pydantic/pull/2384) by @PrettyWood * Making `typing-extensions` a required dependency, [#2368](https://github.com/pydantic/pydantic/pull/2368) by @samuelcolvin * Make `resolve_annotations` more lenient, allowing for missing modules, [#2363](https://github.com/pydantic/pydantic/pull/2363) by @samuelcolvin * Allow configuring models through class kwargs, [#2356](https://github.com/pydantic/pydantic/pull/2356) by @Bobronium * Prevent `Mapping` subclasses from always being coerced to `dict`, [#2325](https://github.com/pydantic/pydantic/pull/2325) by @ofek * fix: allow `None` for type `Optional[conset / conlist]`, [#2320](https://github.com/pydantic/pydantic/pull/2320) by @PrettyWood * Support empty tuple type, [#2318](https://github.com/pydantic/pydantic/pull/2318) by @PrettyWood * fix: `python_requires` metadata to require >=3.6.1, [#2306](https://github.com/pydantic/pydantic/pull/2306) by @hukkinj1 * Properly encode `Decimal` with, or without any decimal places, [#2293](https://github.com/pydantic/pydantic/pull/2293) by @hultner * fix: update `__fields_set__` in `BaseModel.copy(update=…)`, [#2290](https://github.com/pydantic/pydantic/pull/2290) by @PrettyWood * fix: keep order of fields with `BaseModel.construct()`, [#2281](https://github.com/pydantic/pydantic/pull/2281) by @PrettyWood * Support generating schema for Generic fields, [#2262](https://github.com/pydantic/pydantic/pull/2262) by @maximberg * Fix `validate_decorator` so `**kwargs` doesn't exclude values when the keyword has the same name as the `*args` or `**kwargs` names, [#2251](https://github.com/pydantic/pydantic/pull/2251) by @cybojenix * Prevent overriding positional arguments with keyword arguments in `validate_arguments`, as per behaviour with native functions, [#2249](https://github.com/pydantic/pydantic/pull/2249) by @cybojenix * add documentation for `con*` type functions, [#2242](https://github.com/pydantic/pydantic/pull/2242) by @tayoogunbiyi * Support custom root type (aka `__root__`) when using `parse_obj()` with nested models, [#2238](https://github.com/pydantic/pydantic/pull/2238) by @PrettyWood * Support custom root type (aka `__root__`) with `from_orm()`, [#2237](https://github.com/pydantic/pydantic/pull/2237) by @PrettyWood * ensure cythonized functions are left untouched when creating models, based on [#1944](https://github.com/pydantic/pydantic/pull/1944) by @kollmats, [#2228](https://github.com/pydantic/pydantic/pull/2228) by @samuelcolvin * Resolve forward refs for stdlib dataclasses converted into *pydantic* ones, [#2220](https://github.com/pydantic/pydantic/pull/2220) by @PrettyWood * Add support for `NamedTuple` and `TypedDict` types. Those two types are now handled and validated when used inside `BaseModel` or *pydantic* `dataclass`. Two utils are also added `create_model_from_namedtuple` and `create_model_from_typeddict`, [#2216](https://github.com/pydantic/pydantic/pull/2216) by @PrettyWood * Do not ignore annotated fields when type is `Union[Type[...], ...]`, [#2213](https://github.com/pydantic/pydantic/pull/2213) by @PrettyWood * Raise a user-friendly `TypeError` when a `root_validator` does not return a `dict` (e.g. `None`), [#2209](https://github.com/pydantic/pydantic/pull/2209) by @masalim2 * Add a `FrozenSet[str]` type annotation to the `allowed_schemes` argument on the `strict_url` field type, [#2198](https://github.com/pydantic/pydantic/pull/2198) by @Midnighter * add `allow_mutation` constraint to `Field`, [#2195](https://github.com/pydantic/pydantic/pull/2195) by @sblack-usu * Allow `Field` with a `default_factory` to be used as an argument to a function decorated with `validate_arguments`, [#2176](https://github.com/pydantic/pydantic/pull/2176) by @thomascobb * Allow non-existent secrets directory by only issuing a warning, [#2175](https://github.com/pydantic/pydantic/pull/2175) by @davidolrik * fix URL regex to parse fragment without query string, [#2168](https://github.com/pydantic/pydantic/pull/2168) by @andrewmwhite * fix: ensure to always return one of the values in `Literal` field type, [#2166](https://github.com/pydantic/pydantic/pull/2166) by @PrettyWood * Support `typing.Annotated` hints on model fields. A `Field` may now be set in the type hint with `Annotated[..., Field(...)`; all other annotations are ignored but still visible with `get_type_hints(..., include_extras=True)`, [#2147](https://github.com/pydantic/pydantic/pull/2147) by @JacobHayes * Added `StrictBytes` type as well as `strict=False` option to `ConstrainedBytes`, [#2136](https://github.com/pydantic/pydantic/pull/2136) by @rlizzo * added `Config.anystr_lower` and `to_lower` kwarg to `constr` and `conbytes`, [#2134](https://github.com/pydantic/pydantic/pull/2134) by @tayoogunbiyi * Support plain `typing.Tuple` type, [#2132](https://github.com/pydantic/pydantic/pull/2132) by @PrettyWood * Add a bound method `validate` to functions decorated with `validate_arguments` to validate parameters without actually calling the function, [#2127](https://github.com/pydantic/pydantic/pull/2127) by @PrettyWood * Add the ability to customize settings sources (add / disable / change priority order), [#2107](https://github.com/pydantic/pydantic/pull/2107) by @kozlek * Fix mypy complaints about most custom *pydantic* types, [#2098](https://github.com/pydantic/pydantic/pull/2098) by @PrettyWood * Add a [Hypothesis](https://hypothesis.readthedocs.io/) plugin for easier [property-based testing](https://increment.com/testing/in-praise-of-property-based-testing/) with Pydantic's custom types - [usage details here](https://pydantic.dev/docs/validation/1.10/extras/hypothesis_plugin/), [#2097](https://github.com/pydantic/pydantic/pull/2097) by @Zac-HD * add validator for `None`, `NoneType` or `Literal[None]`, [#2095](https://github.com/pydantic/pydantic/pull/2095) by @PrettyWood * Handle properly fields of type `Callable` with a default value, [#2094](https://github.com/pydantic/pydantic/pull/2094) by @PrettyWood * Updated `create_model` return type annotation to return type which inherits from `__base__` argument, [#2071](https://github.com/pydantic/pydantic/pull/2071) by @uriyyo * Add merged `json_encoders` inheritance, [#2064](https://github.com/pydantic/pydantic/pull/2064) by @art049 * allow overwriting `ClassVar`s in sub-models without having to re-annotate them, [#2061](https://github.com/pydantic/pydantic/pull/2061) by @layday * add default encoder for `Pattern` type, [#2045](https://github.com/pydantic/pydantic/pull/2045) by @PrettyWood * Add `NonNegativeInt`, `NonPositiveInt`, `NonNegativeFloat`, `NonPositiveFloat`, [#1975](https://github.com/pydantic/pydantic/pull/1975) by @mdavis-xyz * Use % for percentage in string format of colors, [#1960](https://github.com/pydantic/pydantic/pull/1960) by @EdwardBetts * Fixed issue causing `KeyError` to be raised when building schema from multiple `BaseModel` with the same names declared in separate classes, [#1912](https://github.com/pydantic/pydantic/pull/1912) by @JSextonn * Add `rediss` (Redis over SSL) protocol to `RedisDsn` Allow URLs without `user` part (e.g., `rediss://:pass@localhost`), [#1911](https://github.com/pydantic/pydantic/pull/1911) by @TrDex * Add a new `frozen` boolean parameter to `Config` (default: `False`). Setting `frozen=True` does everything that `allow_mutation=False` does, and also generates a `__hash__()` method for the model. This makes instances of the model potentially hashable if all the attributes are hashable, [#1880](https://github.com/pydantic/pydantic/pull/1880) by @rhuille * fix schema generation with multiple Enums having the same name, [#1857](https://github.com/pydantic/pydantic/pull/1857) by @PrettyWood * Added support for 13/19 digits VISA credit cards in `PaymentCardNumber` type, [#1416](https://github.com/pydantic/pydantic/pull/1416) by @AlexanderSov * fix: prevent `RecursionError` while using recursive `GenericModel`s, [#1370](https://github.com/pydantic/pydantic/pull/1370) by @xppt * use `enum` for `typing.Literal` in JSON schema, [#1350](https://github.com/pydantic/pydantic/pull/1350) by @PrettyWood * Fix: some recursive models did not require `update_forward_refs` and silently behaved incorrectly, [#1201](https://github.com/pydantic/pydantic/pull/1201) by @PrettyWood * Fix bug where generic models with fields where the typevar is nested in another type `a: List[T]` are considered to be concrete. This allows these models to be subclassed and composed as expected, [#947](https://github.com/pydantic/pydantic/pull/947) by @daviskirk * Add `Config.copy_on_model_validation` flag. When set to `False`, *pydantic* will keep models used as fields untouched on validation instead of reconstructing (copying) them, [#265](https://github.com/pydantic/pydantic/pull/265) by @PrettyWood ## v1.7.4 (2021-05-11) * **Security fix:** Fix `date` and `datetime` parsing so passing either `'infinity'` or `float('inf')` (or their negative values) does not cause an infinite loop, See security advisory [CVE-2021-29510](https://github.com/pydantic/pydantic/security/advisories/GHSA-5jqp-qgf6-3pvh) ## v1.7.3 (2020-11-30) Thank you to pydantic's sponsors: @timdrijvers, @BCarley, @chdsbd, @tiangolo, @matin, @linusg, @kevinalh, @jorgecarleitao, @koxudaxi, @primer-api, @mkeen, @meadsteve for their kind support. * fix: set right default value for required (optional) fields, [#2142](https://github.com/pydantic/pydantic/pull/2142) by @PrettyWood * fix: support `underscore_attrs_are_private` with generic models, [#2138](https://github.com/pydantic/pydantic/pull/2138) by @PrettyWood * fix: update all modified field values in `root_validator` when `validate_assignment` is on, [#2116](https://github.com/pydantic/pydantic/pull/2116) by @PrettyWood * Allow pickling of `pydantic.dataclasses.dataclass` dynamically created from a built-in `dataclasses.dataclass`, [#2111](https://github.com/pydantic/pydantic/pull/2111) by @aimestereo * Fix a regression where Enum fields would not propagate keyword arguments to the schema, [#2109](https://github.com/pydantic/pydantic/pull/2109) by @bm424 * Ignore `__doc__` as private attribute when `Config.underscore_attrs_are_private` is set, [#2090](https://github.com/pydantic/pydantic/pull/2090) by @PrettyWood ## v1.7.2 (2020-11-01) * fix slow `GenericModel` concrete model creation, allow `GenericModel` concrete name reusing in module, [#2078](https://github.com/pydantic/pydantic/pull/2078) by @Bobronium * keep the order of the fields when `validate_assignment` is set, [#2073](https://github.com/pydantic/pydantic/pull/2073) by @PrettyWood * forward all the params of the stdlib `dataclass` when converted into *pydantic* `dataclass`, [#2065](https://github.com/pydantic/pydantic/pull/2065) by @PrettyWood ## v1.7.1 (2020-10-28) Thank you to pydantic's sponsors: @timdrijvers, @BCarley, @chdsbd, @tiangolo, @matin, @linusg, @kevinalh, @jorgecarleitao, @koxudaxi, @primer-api, @mkeen for their kind support. * fix annotation of `validate_arguments` when passing configuration as argument, [#2055](https://github.com/pydantic/pydantic/pull/2055) by @layday * Fix mypy assignment error when using `PrivateAttr`, [#2048](https://github.com/pydantic/pydantic/pull/2048) by @aphedges * fix `underscore_attrs_are_private` causing `TypeError` when overriding `__init__`, [#2047](https://github.com/pydantic/pydantic/pull/2047) by @samuelcolvin * Fixed regression introduced in v1.7 involving exception handling in field validators when `validate_assignment=True`, [#2044](https://github.com/pydantic/pydantic/pull/2044) by @johnsabath * fix: *pydantic* `dataclass` can inherit from stdlib `dataclass` and `Config.arbitrary_types_allowed` is supported, [#2042](https://github.com/pydantic/pydantic/pull/2042) by @PrettyWood ## v1.7 (2020-10-26) Thank you to pydantic's sponsors: @timdrijvers, @BCarley, @chdsbd, @tiangolo, @matin, @linusg, @kevinalh, @jorgecarleitao, @koxudaxi, @primer-api for their kind support. ### Highlights * Python 3.9 support, thanks @PrettyWood * [Private model attributes](https://pydantic.dev/docs/validation/1.10/usage/models/#private-model-attributes), thanks @Bobronium * ["secrets files" support in `BaseSettings`](https://pydantic.dev/docs/validation/1.10/usage/settings/#secret-support), thanks @mdgilene * [convert stdlib dataclasses to pydantic dataclasses and use stdlib dataclasses in models](https://pydantic.dev/docs/validation/1.10/usage/dataclasses/#stdlib-dataclasses-and-pydantic-dataclasses), thanks @PrettyWood ### Changes * **Breaking Change:** remove `__field_defaults__`, add `default_factory` support with `BaseModel.construct`. Use `.get_default()` method on fields in `__fields__` attribute instead, [#1732](https://github.com/pydantic/pydantic/pull/1732) by @PrettyWood * Rearrange CI to run linting as a separate job, split install recipes for different tasks, [#2020](https://github.com/pydantic/pydantic/pull/2020) by @samuelcolvin * Allows subclasses of generic models to make some, or all, of the superclass's type parameters concrete, while also defining new type parameters in the subclass, [#2005](https://github.com/pydantic/pydantic/pull/2005) by @choogeboom * Call validator with the correct `values` parameter type in `BaseModel.__setattr__`, when `validate_assignment = True` in model config, [#1999](https://github.com/pydantic/pydantic/pull/1999) by @me-ransh * Force `fields.Undefined` to be a singleton object, fixing inherited generic model schemas, [#1981](https://github.com/pydantic/pydantic/pull/1981) by @daviskirk * Include tests in source distributions, [#1976](https://github.com/pydantic/pydantic/pull/1976) by @sbraz * Add ability to use `min_length/max_length` constraints with secret types, [#1974](https://github.com/pydantic/pydantic/pull/1974) by @uriyyo * Also check `root_validators` when `validate_assignment` is on, [#1971](https://github.com/pydantic/pydantic/pull/1971) by @PrettyWood * Fix const validators not running when custom validators are present, [#1957](https://github.com/pydantic/pydantic/pull/1957) by @hmvp * add `deque` to field types, [#1935](https://github.com/pydantic/pydantic/pull/1935) by @wozniakty * add basic support for Python 3.9, [#1832](https://github.com/pydantic/pydantic/pull/1832) by @PrettyWood * Fix typo in the anchor of exporting_models.md#modelcopy and incorrect description, [#1821](https://github.com/pydantic/pydantic/pull/1821) by @KimMachineGun * Added ability for `BaseSettings` to read "secret files", [#1820](https://github.com/pydantic/pydantic/pull/1820) by @mdgilene * add `parse_raw_as` utility function, [#1812](https://github.com/pydantic/pydantic/pull/1812) by @PrettyWood * Support home directory relative paths for `dotenv` files (e.g. `~/.env`), [#1803](https://github.com/pydantic/pydantic/pull/1803) by @PrettyWood * Clarify documentation for `parse_file` to show that the argument should be a file *path* not a file-like object, [#1794](https://github.com/pydantic/pydantic/pull/1794) by @mdavis-xyz * Fix false positive from mypy plugin when a class nested within a `BaseModel` is named `Model`, [#1770](https://github.com/pydantic/pydantic/pull/1770) by @selimb * add basic support of Pattern type in schema generation, [#1767](https://github.com/pydantic/pydantic/pull/1767) by @PrettyWood * Support custom title, description and default in schema of enums, [#1748](https://github.com/pydantic/pydantic/pull/1748) by @PrettyWood * Properly represent `Literal` Enums when `use_enum_values` is True, [#1747](https://github.com/pydantic/pydantic/pull/1747) by @noelevans * Allows timezone information to be added to strings to be formatted as time objects. Permitted formats are `Z` for UTC or an offset for absolute positive or negative time shifts. Or the timezone data can be omitted, [#1744](https://github.com/pydantic/pydantic/pull/1744) by @noelevans * Add stub `__init__` with Python 3.6 signature for `ForwardRef`, [#1738](https://github.com/pydantic/pydantic/pull/1738) by @sirtelemak * Fix behaviour with forward refs and optional fields in nested models, [#1736](https://github.com/pydantic/pydantic/pull/1736) by @PrettyWood * add `Enum` and `IntEnum` as valid types for fields, [#1735](https://github.com/pydantic/pydantic/pull/1735) by @PrettyWood * Change default value of `__module__` argument of `create_model` from `None` to `'pydantic.main'`. Set reference of created concrete model to it's module to allow pickling (not applied to models created in functions), [#1686](https://github.com/pydantic/pydantic/pull/1686) by @Bobronium * Add private attributes support, [#1679](https://github.com/pydantic/pydantic/pull/1679) by @Bobronium * add `config` to `@validate_arguments`, [#1663](https://github.com/pydantic/pydantic/pull/1663) by @samuelcolvin * Allow descendant Settings models to override env variable names for the fields defined in parent Settings models with `env` in their `Config`. Previously only `env_prefix` configuration option was applicable, [#1561](https://github.com/pydantic/pydantic/pull/1561) by @ojomio * Support `ref_template` when creating schema `$ref`s, [#1479](https://github.com/pydantic/pydantic/pull/1479) by @kilo59 * Add a `__call__` stub to `PyObject` so that mypy will know that it is callable, [#1352](https://github.com/pydantic/pydantic/pull/1352) by @brianmaissy * `pydantic.dataclasses.dataclass` decorator now supports built-in `dataclasses.dataclass`. It is hence possible to convert an existing `dataclass` easily to add Pydantic validation. Moreover nested dataclasses are also supported, [#744](https://github.com/pydantic/pydantic/pull/744) by @PrettyWood ## v1.6.2 (2021-05-11) * **Security fix:** Fix `date` and `datetime` parsing so passing either `'infinity'` or `float('inf')` (or their negative values) does not cause an infinite loop, See security advisory [CVE-2021-29510](https://github.com/pydantic/pydantic/security/advisories/GHSA-5jqp-qgf6-3pvh) ## v1.6.1 (2020-07-15) * fix validation and parsing of nested models with `default_factory`, [#1710](https://github.com/pydantic/pydantic/pull/1710) by @PrettyWood ## v1.6 (2020-07-11) Thank you to pydantic's sponsors: @matin, @tiangolo, @chdsbd, @jorgecarleitao, and 1 anonymous sponsor for their kind support. * Modify validators for `conlist` and `conset` to not have `always=True`, [#1682](https://github.com/pydantic/pydantic/pull/1682) by @samuelcolvin * add port check to `AnyUrl` (can't exceed 65536) ports are 16 unsigned bits: `0 <= port <= 2**16-1` src: [rfc793 header format](https://tools.ietf.org/html/rfc793#section-3.1), [#1654](https://github.com/pydantic/pydantic/pull/1654) by @flapili * Document default `regex` anchoring semantics, [#1648](https://github.com/pydantic/pydantic/pull/1648) by @yurikhan * Use `chain.from_iterable` in class_validators.py. This is a faster and more idiomatic way of using `itertools.chain`. Instead of computing all the items in the iterable and storing them in memory, they are computed one-by-one and never stored as a huge list. This can save on both runtime and memory space, [#1642](https://github.com/pydantic/pydantic/pull/1642) by @cool-RR * Add `conset()`, analogous to `conlist()`, [#1623](https://github.com/pydantic/pydantic/pull/1623) by @patrickkwang * make Pydantic errors (un)pickable, [#1616](https://github.com/pydantic/pydantic/pull/1616) by @PrettyWood * Allow custom encoding for `dotenv` files, [#1615](https://github.com/pydantic/pydantic/pull/1615) by @PrettyWood * Ensure `SchemaExtraCallable` is always defined to get type hints on BaseConfig, [#1614](https://github.com/pydantic/pydantic/pull/1614) by @PrettyWood * Update datetime parser to support negative timestamps, [#1600](https://github.com/pydantic/pydantic/pull/1600) by @mlbiche * Update mypy, remove `AnyType` alias for `Type[Any]`, [#1598](https://github.com/pydantic/pydantic/pull/1598) by @samuelcolvin * Adjust handling of root validators so that errors are aggregated from *all* failing root validators, instead of reporting on only the first root validator to fail, [#1586](https://github.com/pydantic/pydantic/pull/1586) by @beezee * Make `__modify_schema__` on Enums apply to the enum schema rather than fields that use the enum, [#1581](https://github.com/pydantic/pydantic/pull/1581) by @therefromhere * Fix behavior of `__all__` key when used in conjunction with index keys in advanced include/exclude of fields that are sequences, [#1579](https://github.com/pydantic/pydantic/pull/1579) by @xspirus * Subclass validators do not run when referencing a `List` field defined in a parent class when `each_item=True`. Added an example to the docs illustrating this, [#1566](https://github.com/pydantic/pydantic/pull/1566) by @samueldeklund * change `schema.field_class_to_schema` to support `frozenset` in schema, [#1557](https://github.com/pydantic/pydantic/pull/1557) by @wangpeibao * Call `__modify_schema__` only for the field schema, [#1552](https://github.com/pydantic/pydantic/pull/1552) by @PrettyWood * Move the assignment of `field.validate_always` in `fields.py` so the `always` parameter of validators work on inheritance, [#1545](https://github.com/pydantic/pydantic/pull/1545) by @dcHHH * Added support for UUID instantiation through 16 byte strings such as `b'\x12\x34\x56\x78' * 4`. This was done to support `BINARY(16)` columns in sqlalchemy, [#1541](https://github.com/pydantic/pydantic/pull/1541) by @shawnwall * Add a test assertion that `default_factory` can return a singleton, [#1523](https://github.com/pydantic/pydantic/pull/1523) by @therefromhere * Add `NameEmail.__eq__` so duplicate `NameEmail` instances are evaluated as equal, [#1514](https://github.com/pydantic/pydantic/pull/1514) by @stephen-bunn * Add datamodel-code-generator link in pydantic document site, [#1500](https://github.com/pydantic/pydantic/pull/1500) by @koxudaxi * Added a "Discussion of Pydantic" section to the documentation, with a link to "Pydantic Introduction" video by Alexander Hultnér, [#1499](https://github.com/pydantic/pydantic/pull/1499) by @hultner * Avoid some side effects of `default_factory` by calling it only once if possible and by not setting a default value in the schema, [#1491](https://github.com/pydantic/pydantic/pull/1491) by @PrettyWood * Added docs about dumping dataclasses to JSON, [#1487](https://github.com/pydantic/pydantic/pull/1487) by @mikegrima * Make `BaseModel.__signature__` class-only, so getting `__signature__` from model instance will raise `AttributeError`, [#1466](https://github.com/pydantic/pydantic/pull/1466) by @Bobronium * include `'format': 'password'` in the schema for secret types, [#1424](https://github.com/pydantic/pydantic/pull/1424) by @atheuz * Modify schema constraints on `ConstrainedFloat` so that `exclusiveMinimum` and minimum are not included in the schema if they are equal to `-math.inf` and `exclusiveMaximum` and `maximum` are not included if they are equal to `math.inf`, [#1417](https://github.com/pydantic/pydantic/pull/1417) by @vdwees * Squash internal `__root__` dicts in `.dict()` (and, by extension, in `.json()`), [#1414](https://github.com/pydantic/pydantic/pull/1414) by @patrickkwang * Move `const` validator to post-validators so it validates the parsed value, [#1410](https://github.com/pydantic/pydantic/pull/1410) by @selimb * Fix model validation to handle nested literals, e.g. `Literal['foo', Literal['bar']]`, [#1364](https://github.com/pydantic/pydantic/pull/1364) by @DBCerigo * Remove `user_required = True` from `RedisDsn`, neither user nor password are required, [#1275](https://github.com/pydantic/pydantic/pull/1275) by @samuelcolvin * Remove extra `allOf` from schema for fields with `Union` and custom `Field`, [#1209](https://github.com/pydantic/pydantic/pull/1209) by @mostaphaRoudsari * Updates OpenAPI schema generation to output all enums as separate models. Instead of inlining the enum values in the model schema, models now use a `$ref` property to point to the enum definition, [#1173](https://github.com/pydantic/pydantic/pull/1173) by @calvinwyoung ## v1.5.1 (2020-04-23) * Signature generation with `extra: allow` never uses a field name, [#1418](https://github.com/pydantic/pydantic/pull/1418) by @prettywood * Avoid mutating `Field` default value, [#1412](https://github.com/pydantic/pydantic/pull/1412) by @prettywood ## v1.5 (2020-04-18) * Make includes/excludes arguments for `.dict()`, `._iter()`, ..., immutable, [#1404](https://github.com/pydantic/pydantic/pull/1404) by @AlexECX * Always use a field's real name with includes/excludes in `model._iter()`, regardless of `by_alias`, [#1397](https://github.com/pydantic/pydantic/pull/1397) by @AlexECX * Update constr regex example to include start and end lines, [#1396](https://github.com/pydantic/pydantic/pull/1396) by @lmcnearney * Confirm that shallow `model.copy()` does make a shallow copy of attributes, [#1383](https://github.com/pydantic/pydantic/pull/1383) by @samuelcolvin * Renaming `model_name` argument of `main.create_model()` to `__model_name` to allow using `model_name` as a field name, [#1367](https://github.com/pydantic/pydantic/pull/1367) by @kittipatv * Replace raising of exception to silent passing for non-Var attributes in mypy plugin, [#1345](https://github.com/pydantic/pydantic/pull/1345) by @b0g3r * Remove `typing_extensions` dependency for Python 3.8, [#1342](https://github.com/pydantic/pydantic/pull/1342) by @prettywood * Make `SecretStr` and `SecretBytes` initialization idempotent, [#1330](https://github.com/pydantic/pydantic/pull/1330) by @atheuz * document making secret types dumpable using the json method, [#1328](https://github.com/pydantic/pydantic/pull/1328) by @atheuz * Move all testing and build to github actions, add windows and macos binaries, thank you @StephenBrown2 for much help, [#1326](https://github.com/pydantic/pydantic/pull/1326) by @samuelcolvin * fix card number length check in `PaymentCardNumber`, `PaymentCardBrand` now inherits from `str`, [#1317](https://github.com/pydantic/pydantic/pull/1317) by @samuelcolvin * Have `BaseModel` inherit from `Representation` to make mypy happy when overriding `__str__`, [#1310](https://github.com/pydantic/pydantic/pull/1310) by @FuegoFro * Allow `None` as input to all optional list fields, [#1307](https://github.com/pydantic/pydantic/pull/1307) by @prettywood * Add `datetime` field to `default_factory` example, [#1301](https://github.com/pydantic/pydantic/pull/1301) by @StephenBrown2 * Allow subclasses of known types to be encoded with superclass encoder, [#1291](https://github.com/pydantic/pydantic/pull/1291) by @StephenBrown2 * Exclude exported fields from all elements of a list/tuple of submodels/dicts with `'__all__'`, [#1286](https://github.com/pydantic/pydantic/pull/1286) by @masalim2 * Add pydantic.color.Color objects as available input for Color fields, [#1258](https://github.com/pydantic/pydantic/pull/1258) by @leosussan * In examples, type nullable fields as `Optional`, so that these are valid mypy annotations, [#1248](https://github.com/pydantic/pydantic/pull/1248) by @kokes * Make `pattern_validator()` accept pre-compiled `Pattern` objects. Fix `str_validator()` return type to `str`, [#1237](https://github.com/pydantic/pydantic/pull/1237) by @adamgreg * Document how to manage Generics and inheritance, [#1229](https://github.com/pydantic/pydantic/pull/1229) by @esadruhn * `update_forward_refs()` method of BaseModel now copies `__dict__` of class module instead of modifying it, [#1228](https://github.com/pydantic/pydantic/pull/1228) by @paul-ilyin * Support instance methods and class methods with `@validate_arguments`, [#1222](https://github.com/pydantic/pydantic/pull/1222) by @samuelcolvin * Add `default_factory` argument to `Field` to create a dynamic default value by passing a zero-argument callable, [#1210](https://github.com/pydantic/pydantic/pull/1210) by @prettywood * add support for `NewType` of `List`, `Optional`, etc, [#1207](https://github.com/pydantic/pydantic/pull/1207) by @Kazy * fix mypy signature for `root_validator`, [#1192](https://github.com/pydantic/pydantic/pull/1192) by @samuelcolvin * Fixed parsing of nested 'custom root type' models, [#1190](https://github.com/pydantic/pydantic/pull/1190) by @Shados * Add `validate_arguments` function decorator which checks the arguments to a function matches type annotations, [#1179](https://github.com/pydantic/pydantic/pull/1179) by @samuelcolvin * Add `__signature__` to models, [#1034](https://github.com/pydantic/pydantic/pull/1034) by @Bobronium * Refactor `._iter()` method, 10x speed boost for `dict(model)`, [#1017](https://github.com/pydantic/pydantic/pull/1017) by @Bobronium ## v1.4 (2020-01-24) * **Breaking Change:** alias precedence logic changed so aliases on a field always take priority over an alias from `alias_generator` to avoid buggy/unexpected behaviour, see [here](https://pydantic.dev/docs/validation/1.10/usage/model_config/#alias-precedence) for details, [#1178](https://github.com/pydantic/pydantic/pull/1178) by @samuelcolvin * Add support for unicode and punycode in TLDs, [#1182](https://github.com/pydantic/pydantic/pull/1182) by @jamescurtin * Fix `cls` argument in validators during assignment, [#1172](https://github.com/pydantic/pydantic/pull/1172) by @samuelcolvin * completing Luhn algorithm for `PaymentCardNumber`, [#1166](https://github.com/pydantic/pydantic/pull/1166) by @cuencandres * add support for generics that implement `__get_validators__` like a custom data type, [#1159](https://github.com/pydantic/pydantic/pull/1159) by @tiangolo * add support for infinite generators with `Iterable`, [#1152](https://github.com/pydantic/pydantic/pull/1152) by @tiangolo * fix `url_regex` to accept schemas with `+`, `-` and `.` after the first character, [#1142](https://github.com/pydantic/pydantic/pull/1142) by @samuelcolvin * move `version_info()` to `version.py`, suggest its use in issues, [#1138](https://github.com/pydantic/pydantic/pull/1138) by @samuelcolvin * Improve pydantic import time by roughly 50% by deferring some module loading and regex compilation, [#1127](https://github.com/pydantic/pydantic/pull/1127) by @samuelcolvin * Fix `EmailStr` and `NameEmail` to accept instances of themselves in cython, [#1126](https://github.com/pydantic/pydantic/pull/1126) by @koxudaxi * Pass model class to the `Config.schema_extra` callable, [#1125](https://github.com/pydantic/pydantic/pull/1125) by @therefromhere * Fix regex for username and password in URLs, [#1115](https://github.com/pydantic/pydantic/pull/1115) by @samuelcolvin * Add support for nested generic models, [#1104](https://github.com/pydantic/pydantic/pull/1104) by @dmontagu * add `__all__` to `__init__.py` to prevent "implicit reexport" errors from mypy, [#1072](https://github.com/pydantic/pydantic/pull/1072) by @samuelcolvin * Add support for using "dotenv" files with `BaseSettings`, [#1011](https://github.com/pydantic/pydantic/pull/1011) by @acnebs ## v1.3 (2019-12-21) * Change `schema` and `schema_model` to handle dataclasses by using their `__pydantic_model__` feature, [#792](https://github.com/pydantic/pydantic/pull/792) by @aviramha * Added option for `root_validator` to be skipped if values validation fails using keyword `skip_on_failure=True`, [#1049](https://github.com/pydantic/pydantic/pull/1049) by @aviramha * Allow `Config.schema_extra` to be a callable so that the generated schema can be post-processed, [#1054](https://github.com/pydantic/pydantic/pull/1054) by @selimb * Update mypy to version 0.750, [#1057](https://github.com/pydantic/pydantic/pull/1057) by @dmontagu * Trick Cython into allowing str subclassing, [#1061](https://github.com/pydantic/pydantic/pull/1061) by @skewty * Prevent type attributes being added to schema unless the attribute `__schema_attributes__` is `True`, [#1064](https://github.com/pydantic/pydantic/pull/1064) by @samuelcolvin * Change `BaseModel.parse_file` to use `Config.json_loads`, [#1067](https://github.com/pydantic/pydantic/pull/1067) by @kierandarcy * Fix for optional `Json` fields, [#1073](https://github.com/pydantic/pydantic/pull/1073) by @volker48 * Change the default number of threads used when compiling with cython to one, allow override via the `CYTHON_NTHREADS` environment variable, [#1074](https://github.com/pydantic/pydantic/pull/1074) by @samuelcolvin * Run FastAPI tests during Pydantic's CI tests, [#1075](https://github.com/pydantic/pydantic/pull/1075) by @tiangolo * My mypy strictness constraints, and associated tweaks to type annotations, [#1077](https://github.com/pydantic/pydantic/pull/1077) by @samuelcolvin * Add `__eq__` to SecretStr and SecretBytes to allow "value equals", [#1079](https://github.com/pydantic/pydantic/pull/1079) by @sbv-trueenergy * Fix schema generation for nested None case, [#1088](https://github.com/pydantic/pydantic/pull/1088) by @lutostag * Consistent checks for sequence like objects, [#1090](https://github.com/pydantic/pydantic/pull/1090) by @samuelcolvin * Fix `Config` inheritance on `BaseSettings` when used with `env_prefix`, [#1091](https://github.com/pydantic/pydantic/pull/1091) by @samuelcolvin * Fix for `__modify_schema__` when it conflicted with `field_class_to_schema*`, [#1102](https://github.com/pydantic/pydantic/pull/1102) by @samuelcolvin * docs: Fix explanation of case sensitive environment variable names when populating `BaseSettings` subclass attributes, [#1105](https://github.com/pydantic/pydantic/pull/1105) by @tribals * Rename django-rest-framework benchmark in documentation, [#1119](https://github.com/pydantic/pydantic/pull/1119) by @frankie567 ## v1.2 (2019-11-28) * **Possible Breaking Change:** Add support for required `Optional` with `name: Optional[AnyType] = Field(...)` and refactor `ModelField` creation to preserve `required` parameter value, [#1031](https://github.com/pydantic/pydantic/pull/1031) by @tiangolo; see [here](https://pydantic.dev/docs/validation/1.10/usage/models/#required-optional-fields) for details * Add benchmarks for `cattrs`, [#513](https://github.com/pydantic/pydantic/pull/513) by @sebastianmika * Add `exclude_none` option to `dict()` and friends, [#587](https://github.com/pydantic/pydantic/pull/587) by @niknetniko * Add benchmarks for `valideer`, [#670](https://github.com/pydantic/pydantic/pull/670) by @gsakkis * Add `parse_obj_as` and `parse_file_as` functions for ad-hoc parsing of data into arbitrary pydantic-compatible types, [#934](https://github.com/pydantic/pydantic/pull/934) by @dmontagu * Add `allow_reuse` argument to validators, thus allowing validator reuse, [#940](https://github.com/pydantic/pydantic/pull/940) by @dmontagu * Add support for mapping types for custom root models, [#958](https://github.com/pydantic/pydantic/pull/958) by @dmontagu * Mypy plugin support for dataclasses, [#966](https://github.com/pydantic/pydantic/pull/966) by @koxudaxi * Add support for dataclasses default factory, [#968](https://github.com/pydantic/pydantic/pull/968) by @ahirner * Add a `ByteSize` type for converting byte string (`1GB`) to plain bytes, [#977](https://github.com/pydantic/pydantic/pull/977) by @dgasmith * Fix mypy complaint about `@root_validator(pre=True)`, [#984](https://github.com/pydantic/pydantic/pull/984) by @samuelcolvin * Add manylinux binaries for Python 3.8 to pypi, also support manylinux2010, [#994](https://github.com/pydantic/pydantic/pull/994) by @samuelcolvin * Adds ByteSize conversion to another unit, [#995](https://github.com/pydantic/pydantic/pull/995) by @dgasmith * Fix `__str__` and `__repr__` inheritance for models, [#1022](https://github.com/pydantic/pydantic/pull/1022) by @samuelcolvin * add testimonials section to docs, [#1025](https://github.com/pydantic/pydantic/pull/1025) by @sullivancolin * Add support for `typing.Literal` for Python 3.8, [#1026](https://github.com/pydantic/pydantic/pull/1026) by @dmontagu ## v1.1.1 (2019-11-20) * Fix bug where use of complex fields on sub-models could cause fields to be incorrectly configured, [#1015](https://github.com/pydantic/pydantic/pull/1015) by @samuelcolvin ## v1.1 (2019-11-07) * Add a mypy plugin for type checking `BaseModel.__init__` and more, [#722](https://github.com/pydantic/pydantic/pull/722) by @dmontagu * Change return type typehint for `GenericModel.__class_getitem__` to prevent PyCharm warnings, [#936](https://github.com/pydantic/pydantic/pull/936) by @dmontagu * Fix usage of `Any` to allow `None`, also support `TypeVar` thus allowing use of un-parameterised collection types e.g. `Dict` and `List`, [#962](https://github.com/pydantic/pydantic/pull/962) by @samuelcolvin * Set `FieldInfo` on subfields to fix schema generation for complex nested types, [#965](https://github.com/pydantic/pydantic/pull/965) by @samuelcolvin ## v1.0 (2019-10-23) * **Breaking Change:** deprecate the `Model.fields` property, use `Model.__fields__` instead, [#883](https://github.com/pydantic/pydantic/pull/883) by @samuelcolvin * **Breaking Change:** Change the precedence of aliases so child model aliases override parent aliases, including using `alias_generator`, [#904](https://github.com/pydantic/pydantic/pull/904) by @samuelcolvin * **Breaking change:** Rename `skip_defaults` to `exclude_unset`, and add ability to exclude actual defaults, [#915](https://github.com/pydantic/pydantic/pull/915) by @dmontagu * Add `**kwargs` to `pydantic.main.ModelMetaclass.__new__` so `__init_subclass__` can take custom parameters on extended `BaseModel` classes, [#867](https://github.com/pydantic/pydantic/pull/867) by @retnikt * Fix field of a type that has a default value, [#880](https://github.com/pydantic/pydantic/pull/880) by @koxudaxi * Use `FutureWarning` instead of `DeprecationWarning` when `alias` instead of `env` is used for settings models, [#881](https://github.com/pydantic/pydantic/pull/881) by @samuelcolvin * Fix issue with `BaseSettings` inheritance and `alias` getting set to `None`, [#882](https://github.com/pydantic/pydantic/pull/882) by @samuelcolvin * Modify `__repr__` and `__str__` methods to be consistent across all public classes, add `__pretty__` to support python-devtools, [#884](https://github.com/pydantic/pydantic/pull/884) by @samuelcolvin * deprecation warning for `case_insensitive` on `BaseSettings` config, [#885](https://github.com/pydantic/pydantic/pull/885) by @samuelcolvin * For `BaseSettings` merge environment variables and in-code values recursively, as long as they create a valid object when merged together, to allow splitting init arguments, [#888](https://github.com/pydantic/pydantic/pull/888) by @idmitrievsky * change secret types example, [#890](https://github.com/pydantic/pydantic/pull/890) by @ashears * Change the signature of `Model.construct()` to be more user-friendly, document `construct()` usage, [#898](https://github.com/pydantic/pydantic/pull/898) by @samuelcolvin * Add example for the `construct()` method, [#907](https://github.com/pydantic/pydantic/pull/907) by @ashears * Improve use of `Field` constraints on complex types, raise an error if constraints are not enforceable, also support tuples with an ellipsis `Tuple[X, ...]`, `Sequence` and `FrozenSet` in schema, [#909](https://github.com/pydantic/pydantic/pull/909) by @samuelcolvin * update docs for bool missing valid value, [#911](https://github.com/pydantic/pydantic/pull/911) by @trim21 * Better `str`/`repr` logic for `ModelField`, [#912](https://github.com/pydantic/pydantic/pull/912) by @samuelcolvin * Fix `ConstrainedList`, update schema generation to reflect `min_items` and `max_items` `Field()` arguments, [#917](https://github.com/pydantic/pydantic/pull/917) by @samuelcolvin * Allow abstracts sets (eg. dict keys) in the `include` and `exclude` arguments of `dict()`, [#921](https://github.com/pydantic/pydantic/pull/921) by @samuelcolvin * Fix JSON serialization errors on `ValidationError.json()` by using `pydantic_encoder`, [#922](https://github.com/pydantic/pydantic/pull/922) by @samuelcolvin * Clarify usage of `remove_untouched`, improve error message for types with no validators, [#926](https://github.com/pydantic/pydantic/pull/926) by @retnikt ## v1.0b2 (2019-10-07) * Mark `StrictBool` typecheck as `bool` to allow for default values without mypy errors, [#690](https://github.com/pydantic/pydantic/pull/690) by @dmontagu * Transfer the documentation build from sphinx to mkdocs, re-write much of the documentation, [#856](https://github.com/pydantic/pydantic/pull/856) by @samuelcolvin * Add support for custom naming schemes for `GenericModel` subclasses, [#859](https://github.com/pydantic/pydantic/pull/859) by @dmontagu * Add `if TYPE_CHECKING:` to the excluded lines for test coverage, [#874](https://github.com/pydantic/pydantic/pull/874) by @dmontagu * Rename `allow_population_by_alias` to `allow_population_by_field_name`, remove unnecessary warning about it, [#875](https://github.com/pydantic/pydantic/pull/875) by @samuelcolvin ## v1.0b1 (2019-10-01) * **Breaking Change:** rename `Schema` to `Field`, make it a function to placate mypy, [#577](https://github.com/pydantic/pydantic/pull/577) by @samuelcolvin * **Breaking Change:** modify parsing behavior for `bool`, [#617](https://github.com/pydantic/pydantic/pull/617) by @dmontagu * **Breaking Change:** `get_validators` is no longer recognised, use `__get_validators__`. `Config.ignore_extra` and `Config.allow_extra` are no longer recognised, use `Config.extra`, [#720](https://github.com/pydantic/pydantic/pull/720) by @samuelcolvin * **Breaking Change:** modify default config settings for `BaseSettings`; `case_insensitive` renamed to `case_sensitive`, default changed to `case_sensitive = False`, `env_prefix` default changed to `''` - e.g. no prefix, [#721](https://github.com/pydantic/pydantic/pull/721) by @dmontagu * **Breaking change:** Implement `root_validator` and rename root errors from `__obj__` to `__root__`, [#729](https://github.com/pydantic/pydantic/pull/729) by @samuelcolvin * **Breaking Change:** alter the behaviour of `dict(model)` so that sub-models are no longer converted to dictionaries, [#733](https://github.com/pydantic/pydantic/pull/733) by @samuelcolvin * **Breaking change:** Added `initvars` support to `post_init_post_parse`, [#748](https://github.com/pydantic/pydantic/pull/748) by @Raphael-C-Almeida * **Breaking Change:** Make `BaseModel.json()` only serialize the `__root__` key for models with custom root, [#752](https://github.com/pydantic/pydantic/pull/752) by @dmontagu * **Breaking Change:** complete rewrite of `URL` parsing logic, [#755](https://github.com/pydantic/pydantic/pull/755) by @samuelcolvin * **Breaking Change:** preserve superclass annotations for field-determination when not provided in subclass, [#757](https://github.com/pydantic/pydantic/pull/757) by @dmontagu * **Breaking Change:** `BaseSettings` now uses the special `env` settings to define which environment variables to read, not aliases, [#847](https://github.com/pydantic/pydantic/pull/847) by @samuelcolvin * add support for `assert` statements inside validators, [#653](https://github.com/pydantic/pydantic/pull/653) by @abdusco * Update documentation to specify the use of `pydantic.dataclasses.dataclass` and subclassing `pydantic.BaseModel`, [#710](https://github.com/pydantic/pydantic/pull/710) by @maddosaurus * Allow custom JSON decoding and encoding via `json_loads` and `json_dumps` `Config` properties, [#714](https://github.com/pydantic/pydantic/pull/714) by @samuelcolvin * make all annotated fields occur in the order declared, [#715](https://github.com/pydantic/pydantic/pull/715) by @dmontagu * use pytest to test `mypy` integration, [#735](https://github.com/pydantic/pydantic/pull/735) by @dmontagu * add `__repr__` method to `ErrorWrapper`, [#738](https://github.com/pydantic/pydantic/pull/738) by @samuelcolvin * Added support for `FrozenSet` members in dataclasses, and a better error when attempting to use types from the `typing` module that are not supported by Pydantic, [#745](https://github.com/pydantic/pydantic/pull/745) by @djpetti * add documentation for Pycharm Plugin, [#750](https://github.com/pydantic/pydantic/pull/750) by @koxudaxi * fix broken examples in the docs, [#753](https://github.com/pydantic/pydantic/pull/753) by @dmontagu * moving typing related objects into `pydantic.typing`, [#761](https://github.com/pydantic/pydantic/pull/761) by @samuelcolvin * Minor performance improvements to `ErrorWrapper`, `ValidationError` and datetime parsing, [#763](https://github.com/pydantic/pydantic/pull/763) by @samuelcolvin * Improvements to `datetime`/`date`/`time`/`timedelta` types: more descriptive errors, change errors to `value_error` not `type_error`, support bytes, [#766](https://github.com/pydantic/pydantic/pull/766) by @samuelcolvin * fix error messages for `Literal` types with multiple allowed values, [#770](https://github.com/pydantic/pydantic/pull/770) by @dmontagu * Improved auto-generated `title` field in JSON schema by converting underscore to space, [#772](https://github.com/pydantic/pydantic/pull/772) by @skewty * support `mypy --no-implicit-reexport` for dataclasses, also respect `--no-implicit-reexport` in pydantic itself, [#783](https://github.com/pydantic/pydantic/pull/783) by @samuelcolvin * add the `PaymentCardNumber` type, [#790](https://github.com/pydantic/pydantic/pull/790) by @matin * Fix const validations for lists, [#794](https://github.com/pydantic/pydantic/pull/794) by @hmvp * Set `additionalProperties` to false in schema for models with extra fields disallowed, [#796](https://github.com/pydantic/pydantic/pull/796) by @Code0x58 * `EmailStr` validation method now returns local part case-sensitive per RFC 5321, [#798](https://github.com/pydantic/pydantic/pull/798) by @henriklindgren * Added ability to validate strictness to `ConstrainedFloat`, `ConstrainedInt` and `ConstrainedStr` and added `StrictFloat` and `StrictInt` classes, [#799](https://github.com/pydantic/pydantic/pull/799) by @DerRidda * Improve handling of `None` and `Optional`, replace `whole` with `each_item` (inverse meaning, default `False`) on validators, [#803](https://github.com/pydantic/pydantic/pull/803) by @samuelcolvin * add support for `Type[T]` type hints, [#807](https://github.com/pydantic/pydantic/pull/807) by @timonbimon * Performance improvements from removing `change_exceptions`, change how pydantic error are constructed, [#819](https://github.com/pydantic/pydantic/pull/819) by @samuelcolvin * Fix the error message arising when a `BaseModel`-type model field causes a `ValidationError` during parsing, [#820](https://github.com/pydantic/pydantic/pull/820) by @dmontagu * allow `getter_dict` on `Config`, modify `GetterDict` to be more like a `Mapping` object and thus easier to work with, [#821](https://github.com/pydantic/pydantic/pull/821) by @samuelcolvin * Only check `TypeVar` param on base `GenericModel` class, [#842](https://github.com/pydantic/pydantic/pull/842) by @zpencerq * rename `Model._schema_cache` -> `Model.__schema_cache__`, `Model._json_encoder` -> `Model.__json_encoder__`, `Model._custom_root_type` -> `Model.__custom_root_type__`, [#851](https://github.com/pydantic/pydantic/pull/851) by @samuelcolvin ## v0.32.2 (2019-08-17) (Docs are available [here](https://5d584fcca7c9b70007d1c997--pydantic-docs.netlify.com)) * fix `__post_init__` usage with dataclass inheritance, fix [#739](https://github.com/pydantic/pydantic/pull/739) by @samuelcolvin * fix required fields validation on GenericModels classes, [#742](https://github.com/pydantic/pydantic/pull/742) by @amitbl * fix defining custom `Schema` on `GenericModel` fields, [#754](https://github.com/pydantic/pydantic/pull/754) by @amitbl ## v0.32.1 (2019-08-08) * do not validate extra fields when `validate_assignment` is on, [#724](https://github.com/pydantic/pydantic/pull/724) by @YaraslauZhylko ## v0.32 (2019-08-06) * add model name to `ValidationError` error message, [#676](https://github.com/pydantic/pydantic/pull/676) by @dmontagu * **breaking change**: remove `__getattr__` and rename `__values__` to `__dict__` on `BaseModel`, deprecation warning on use `__values__` attr, attributes access speed increased up to 14 times, [#712](https://github.com/pydantic/pydantic/pull/712) by @Bobronium * support `ForwardRef` (without self-referencing annotations) in Python 3.6, [#706](https://github.com/pydantic/pydantic/pull/706) by @koxudaxi * implement `schema_extra` in `Config` sub-class, [#663](https://github.com/pydantic/pydantic/pull/663) by @tiangolo ## v0.31.1 (2019-07-31) * fix json generation for `EnumError`, [#697](https://github.com/pydantic/pydantic/pull/697) by @dmontagu * update numerous dependencies ## v0.31 (2019-07-24) * better support for floating point `multiple_of` values, [#652](https://github.com/pydantic/pydantic/pull/652) by @justindujardin * fix schema generation for `NewType` and `Literal`, [#649](https://github.com/pydantic/pydantic/pull/649) by @dmontagu * fix `alias_generator` and field config conflict, [#645](https://github.com/pydantic/pydantic/pull/645) by @gmetzker and [#658](https://github.com/pydantic/pydantic/pull/658) by @Bobronium * more detailed message for `EnumError`, [#673](https://github.com/pydantic/pydantic/pull/673) by @dmontagu * add advanced exclude support for `dict`, `json` and `copy`, [#648](https://github.com/pydantic/pydantic/pull/648) by @Bobronium * fix bug in `GenericModel` for models with concrete parameterized fields, [#672](https://github.com/pydantic/pydantic/pull/672) by @dmontagu * add documentation for `Literal` type, [#651](https://github.com/pydantic/pydantic/pull/651) by @dmontagu * add `Config.keep_untouched` for custom descriptors support, [#679](https://github.com/pydantic/pydantic/pull/679) by @Bobronium * use `inspect.cleandoc` internally to get model description, [#657](https://github.com/pydantic/pydantic/pull/657) by @tiangolo * add `Color` to schema generation, by @euri10 * add documentation for Literal type, [#651](https://github.com/pydantic/pydantic/pull/651) by @dmontagu ## v0.30.1 (2019-07-15) * fix so nested classes which inherit and change `__init__` are correctly processed while still allowing `self` as a parameter, [#644](https://github.com/pydantic/pydantic/pull/644) by @lnaden and @dgasmith ## v0.30 (2019-07-07) * enforce single quotes in code, [#612](https://github.com/pydantic/pydantic/pull/612) by @samuelcolvin * fix infinite recursion with dataclass inheritance and `__post_init__`, [#606](https://github.com/pydantic/pydantic/pull/606) by @Hanaasagi * fix default values for `GenericModel`, [#610](https://github.com/pydantic/pydantic/pull/610) by @dmontagu * clarify that self-referencing models require Python 3.7+, [#616](https://github.com/pydantic/pydantic/pull/616) by @vlcinsky * fix truncate for types, [#611](https://github.com/pydantic/pydantic/pull/611) by @dmontagu * add `alias_generator` support, [#622](https://github.com/pydantic/pydantic/pull/622) by @Bobronium * fix unparameterized generic type schema generation, [#625](https://github.com/pydantic/pydantic/pull/625) by @dmontagu * fix schema generation with multiple/circular references to the same model, [#621](https://github.com/pydantic/pydantic/pull/621) by @tiangolo and @wongpat * support custom root types, [#628](https://github.com/pydantic/pydantic/pull/628) by @koxudaxi * support `self` as a field name in `parse_obj`, [#632](https://github.com/pydantic/pydantic/pull/632) by @samuelcolvin ## v0.29 (2019-06-19) * support dataclasses.InitVar, [#592](https://github.com/pydantic/pydantic/pull/592) by @pfrederiks * Updated documentation to elucidate the usage of `Union` when defining multiple types under an attribute's annotation and showcase how the type-order can affect marshalling of provided values, [#594](https://github.com/pydantic/pydantic/pull/594) by @somada141 * add `conlist` type, [#583](https://github.com/pydantic/pydantic/pull/583) by @hmvp * add support for generics, [#595](https://github.com/pydantic/pydantic/pull/595) by @dmontagu ## v0.28 (2019-06-06) * fix support for JSON Schema generation when using models with circular references in Python 3.7, [#572](https://github.com/pydantic/pydantic/pull/572) by @tiangolo * support `__post_init_post_parse__` on dataclasses, [#567](https://github.com/pydantic/pydantic/pull/567) by @sevaho * allow dumping dataclasses to JSON, [#575](https://github.com/pydantic/pydantic/pull/575) by @samuelcolvin and @DanielOberg * ORM mode, [#562](https://github.com/pydantic/pydantic/pull/562) by @samuelcolvin * fix `pydantic.compiled` on ipython, [#573](https://github.com/pydantic/pydantic/pull/573) by @dmontagu and @samuelcolvin * add `StrictBool` type, [#579](https://github.com/pydantic/pydantic/pull/579) by @cazgp ## v0.27 (2019-05-30) * **breaking change** `_pydantic_post_init` to execute dataclass' original `__post_init__` before validation, [#560](https://github.com/pydantic/pydantic/pull/560) by @HeavenVolkoff * fix handling of generic types without specified parameters, [#550](https://github.com/pydantic/pydantic/pull/550) by @dmontagu * **breaking change** (maybe): this is the first release compiled with **cython**, see the docs and please submit an issue if you run into problems ## v0.27.0a1 (2019-05-26) * fix JSON Schema for `list`, `tuple`, and `set`, [#540](https://github.com/pydantic/pydantic/pull/540) by @tiangolo * compiling with cython, `manylinux` binaries, some other performance improvements, [#548](https://github.com/pydantic/pydantic/pull/548) by @samuelcolvin ## v0.26 (2019-05-22) * fix to schema generation for `IPvAnyAddress`, `IPvAnyInterface`, `IPvAnyNetwork` [#498](https://github.com/pydantic/pydantic/pull/498) by @pilosus * fix variable length tuples support, [#495](https://github.com/pydantic/pydantic/pull/495) by @pilosus * fix return type hint for `create_model`, [#526](https://github.com/pydantic/pydantic/pull/526) by @dmontagu * **Breaking Change:** fix `.dict(skip_keys=True)` skipping values set via alias (this involves changing `validate_model()` to always returns `Tuple[Dict[str, Any], Set[str], Optional[ValidationError]]`), [#517](https://github.com/pydantic/pydantic/pull/517) by @sommd * fix to schema generation for `IPv4Address`, `IPv6Address`, `IPv4Interface`, `IPv6Interface`, `IPv4Network`, `IPv6Network` [#532](https://github.com/pydantic/pydantic/pull/532) by @euri10 * add `Color` type, [#504](https://github.com/pydantic/pydantic/pull/504) by @pilosus and @samuelcolvin ## v0.25 (2019-05-05) * Improve documentation on self-referencing models and annotations, [#487](https://github.com/pydantic/pydantic/pull/487) by @theenglishway * fix `.dict()` with extra keys, [#490](https://github.com/pydantic/pydantic/pull/490) by @JaewonKim * support `const` keyword in `Schema`, [#434](https://github.com/pydantic/pydantic/pull/434) by @Sean1708 ## v0.24 (2019-04-23) * fix handling `ForwardRef` in sub-types, like `Union`, [#464](https://github.com/pydantic/pydantic/pull/464) by @tiangolo * fix secret serialization, [#465](https://github.com/pydantic/pydantic/pull/465) by @atheuz * Support custom validators for dataclasses, [#454](https://github.com/pydantic/pydantic/pull/454) by @primal100 * fix `parse_obj` to cope with dict-like objects, [#472](https://github.com/pydantic/pydantic/pull/472) by @samuelcolvin * fix to schema generation in nested dataclass-based models, [#474](https://github.com/pydantic/pydantic/pull/474) by @NoAnyLove * fix `json` for `Path`, `FilePath`, and `DirectoryPath` objects, [#473](https://github.com/pydantic/pydantic/pull/473) by @mikegoodspeed ## v0.23 (2019-04-04) * improve documentation for contributing section, [#441](https://github.com/pydantic/pydantic/pull/441) by @pilosus * improve README.rst to include essential information about the package, [#446](https://github.com/pydantic/pydantic/pull/446) by @pilosus * `IntEnum` support, [#444](https://github.com/pydantic/pydantic/pull/444) by @potykion * fix PyObject callable value, [#409](https://github.com/pydantic/pydantic/pull/409) by @pilosus * fix `black` deprecation warnings after update, [#451](https://github.com/pydantic/pydantic/pull/451) by @pilosus * fix `ForwardRef` collection bug, [#450](https://github.com/pydantic/pydantic/pull/450) by @tigerwings * Support specialized `ClassVars`, [#455](https://github.com/pydantic/pydantic/pull/455) by @tyrylu * fix JSON serialization for `ipaddress` types, [#333](https://github.com/pydantic/pydantic/pull/333) by @pilosus * add `SecretStr` and `SecretBytes` types, [#452](https://github.com/pydantic/pydantic/pull/452) by @atheuz ## v0.22 (2019-03-29) * add `IPv{4,6,Any}Network` and `IPv{4,6,Any}Interface` types from `ipaddress` stdlib, [#333](https://github.com/pydantic/pydantic/pull/333) by @pilosus * add docs for `datetime` types, [#386](https://github.com/pydantic/pydantic/pull/386) by @pilosus * fix to schema generation in dataclass-based models, [#408](https://github.com/pydantic/pydantic/pull/408) by @pilosus * fix path in nested models, [#437](https://github.com/pydantic/pydantic/pull/437) by @kataev * add `Sequence` support, [#304](https://github.com/pydantic/pydantic/pull/304) by @pilosus ## v0.21.0 (2019-03-15) * fix typo in `NoneIsNotAllowedError` message, [#414](https://github.com/pydantic/pydantic/pull/414) by @YaraslauZhylko * add `IPvAnyAddress`, `IPv4Address` and `IPv6Address` types, [#333](https://github.com/pydantic/pydantic/pull/333) by @pilosus ## v0.20.1 (2019-02-26) * fix type hints of `parse_obj` and similar methods, [#405](https://github.com/pydantic/pydantic/pull/405) by @erosennin * fix submodel validation, [#403](https://github.com/pydantic/pydantic/pull/403) by @samuelcolvin * correct type hints for `ValidationError.json`, [#406](https://github.com/pydantic/pydantic/pull/406) by @layday ## v0.20.0 (2019-02-18) * fix tests for Python 3.8, [#396](https://github.com/pydantic/pydantic/pull/396) by @samuelcolvin * Adds fields to the `dir` method for autocompletion in interactive sessions, [#398](https://github.com/pydantic/pydantic/pull/398) by @dgasmith * support `ForwardRef` (and therefore `from __future__ import annotations`) with dataclasses, [#397](https://github.com/pydantic/pydantic/pull/397) by @samuelcolvin ## v0.20.0a1 (2019-02-13) * **breaking change** (maybe): more sophisticated argument parsing for validators, any subset of `values`, `config` and `field` is now permitted, eg. `(cls, value, field)`, however the variadic key word argument ("`**kwargs`") **must** be called `kwargs`, [#388](https://github.com/pydantic/pydantic/pull/388) by @samuelcolvin * **breaking change**: Adds `skip_defaults` argument to `BaseModel.dict()` to allow skipping of fields that were not explicitly set, signature of `Model.construct()` changed, [#389](https://github.com/pydantic/pydantic/pull/389) by @dgasmith * add `py.typed` marker file for PEP-561 support, [#391](https://github.com/pydantic/pydantic/pull/391) by @je-l * Fix `extra` behaviour for multiple inheritance/mix-ins, [#394](https://github.com/pydantic/pydantic/pull/394) by @YaraslauZhylko ## v0.19.0 (2019-02-04) * Support `Callable` type hint, fix [#279](https://github.com/pydantic/pydantic/pull/279) by @proofit404 * Fix schema for fields with `validator` decorator, fix [#375](https://github.com/pydantic/pydantic/pull/375) by @tiangolo * Add `multiple_of` constraint to `ConstrainedDecimal`, `ConstrainedFloat`, `ConstrainedInt` and their related types `condecimal`, `confloat`, and `conint` [#371](https://github.com/pydantic/pydantic/pull/371), thanks @StephenBrown2 * Deprecated `ignore_extra` and `allow_extra` Config fields in favor of `extra`, [#352](https://github.com/pydantic/pydantic/pull/352) by @liiight * Add type annotations to all functions, test fully with mypy, [#373](https://github.com/pydantic/pydantic/pull/373) by @samuelcolvin * fix for 'missing' error with `validate_all` or `validate_always`, [#381](https://github.com/pydantic/pydantic/pull/381) by @samuelcolvin * Change the second/millisecond watershed for date/datetime parsing to `2e10`, [#385](https://github.com/pydantic/pydantic/pull/385) by @samuelcolvin ## v0.18.2 (2019-01-22) * Fix to schema generation with `Optional` fields, fix [#361](https://github.com/pydantic/pydantic/pull/361) by @samuelcolvin ## v0.18.1 (2019-01-17) * add `ConstrainedBytes` and `conbytes` types, [#315](https://github.com/pydantic/pydantic/pull/315) @Gr1N * adding `MANIFEST.in` to include license in package `.tar.gz`, [#358](https://github.com/pydantic/pydantic/pull/358) by @samuelcolvin ## v0.18.0 (2019-01-13) * **breaking change**: don't call validators on keys of dictionaries, [#254](https://github.com/pydantic/pydantic/pull/254) by @samuelcolvin * Fix validators with `always=True` when the default is `None` or the type is optional, also prevent `whole` validators being called for sub-fields, fix [#132](https://github.com/pydantic/pydantic/pull/132) by @samuelcolvin * improve documentation for settings priority and allow it to be easily changed, [#343](https://github.com/pydantic/pydantic/pull/343) by @samuelcolvin * fix `ignore_extra=False` and `allow_population_by_alias=True`, fix [#257](https://github.com/pydantic/pydantic/pull/257) by @samuelcolvin * **breaking change**: Set `BaseConfig` attributes `min_anystr_length` and `max_anystr_length` to `None` by default, fix [#349](https://github.com/pydantic/pydantic/pull/349) in [#350](https://github.com/pydantic/pydantic/pull/350) by @tiangolo * add support for postponed annotations, [#348](https://github.com/pydantic/pydantic/pull/348) by @samuelcolvin ## v0.17.0 (2018-12-27) * fix schema for `timedelta` as number, [#325](https://github.com/pydantic/pydantic/pull/325) by @tiangolo * prevent validators being called repeatedly after inheritance, [#327](https://github.com/pydantic/pydantic/pull/327) by @samuelcolvin * prevent duplicate validator check in ipython, fix [#312](https://github.com/pydantic/pydantic/pull/312) by @samuelcolvin * add "Using Pydantic" section to docs, [#323](https://github.com/pydantic/pydantic/pull/323) by @tiangolo & [#326](https://github.com/pydantic/pydantic/pull/326) by @samuelcolvin * fix schema generation for fields annotated as `: dict`, `: list`, `: tuple` and `: set`, [#330](https://github.com/pydantic/pydantic/pull/330) & [#335](https://github.com/pydantic/pydantic/pull/335) by @nkonin * add support for constrained strings as dict keys in schema, [#332](https://github.com/pydantic/pydantic/pull/332) by @tiangolo * support for passing Config class in dataclasses decorator, [#276](https://github.com/pydantic/pydantic/pull/276) by @jarekkar (**breaking change**: this supersedes the `validate_assignment` argument with `config`) * support for nested dataclasses, [#334](https://github.com/pydantic/pydantic/pull/334) by @samuelcolvin * better errors when getting an `ImportError` with `PyObject`, [#309](https://github.com/pydantic/pydantic/pull/309) by @samuelcolvin * rename `get_validators` to `__get_validators__`, deprecation warning on use of old name, [#338](https://github.com/pydantic/pydantic/pull/338) by @samuelcolvin * support `ClassVar` by excluding such attributes from fields, [#184](https://github.com/pydantic/pydantic/pull/184) by @samuelcolvin ## v0.16.1 (2018-12-10) * fix `create_model` to correctly use the passed `__config__`, [#320](https://github.com/pydantic/pydantic/pull/320) by @hugoduncan ## v0.16.0 (2018-12-03) * **breaking change**: refactor schema generation to be compatible with JSON Schema and OpenAPI specs, [#308](https://github.com/pydantic/pydantic/pull/308) by @tiangolo * add `schema` to `schema` module to generate top-level schemas from base models, [#308](https://github.com/pydantic/pydantic/pull/308) by @tiangolo * add additional fields to `Schema` class to declare validation for `str` and numeric values, [#311](https://github.com/pydantic/pydantic/pull/311) by @tiangolo * rename `_schema` to `schema` on fields, [#318](https://github.com/pydantic/pydantic/pull/318) by @samuelcolvin * add `case_insensitive` option to `BaseSettings` `Config`, [#277](https://github.com/pydantic/pydantic/pull/277) by @jasonkuhrt ## v0.15.0 (2018-11-18) * move codebase to use black, [#287](https://github.com/pydantic/pydantic/pull/287) by @samuelcolvin * fix alias use in settings, [#286](https://github.com/pydantic/pydantic/pull/286) by @jasonkuhrt and @samuelcolvin * fix datetime parsing in `parse_date`, [#298](https://github.com/pydantic/pydantic/pull/298) by @samuelcolvin * allow dataclass inheritance, fix [#293](https://github.com/pydantic/pydantic/pull/293) by @samuelcolvin * fix `PyObject = None`, fix [#305](https://github.com/pydantic/pydantic/pull/305) by @samuelcolvin * allow `Pattern` type, fix [#303](https://github.com/pydantic/pydantic/pull/303) by @samuelcolvin ## v0.14.0 (2018-10-02) * dataclasses decorator, [#269](https://github.com/pydantic/pydantic/pull/269) by @Gaunt and @samuelcolvin ## v0.13.1 (2018-09-21) * fix issue where int_validator doesn't cast a `bool` to an `int` [#264](https://github.com/pydantic/pydantic/pull/264) by @nphyatt * add deep copy support for `BaseModel.copy()` [#249](https://github.com/pydantic/pydantic/pull/249), @gangefors ## v0.13.0 (2018-08-25) * raise an exception if a field's name shadows an existing `BaseModel` attribute [#242](https://github.com/pydantic/pydantic/pull/242) * add `UrlStr` and `urlstr` types [#236](https://github.com/pydantic/pydantic/pull/236) * timedelta json encoding ISO8601 and total seconds, custom json encoders [#247](https://github.com/pydantic/pydantic/pull/247), by @cfkanesan and @samuelcolvin * allow `timedelta` objects as values for properties of type `timedelta` (matches `datetime` etc. behavior) [#247](https://github.com/pydantic/pydantic/pull/247) ## v0.12.1 (2018-07-31) * fix schema generation for fields defined using `typing.Any` [#237](https://github.com/pydantic/pydantic/pull/237) ## v0.12.0 (2018-07-31) * add `by_alias` argument in `.dict()` and `.json()` model methods [#205](https://github.com/pydantic/pydantic/pull/205) * add Json type support [#214](https://github.com/pydantic/pydantic/pull/214) * support tuples [#227](https://github.com/pydantic/pydantic/pull/227) * major improvements and changes to schema [#213](https://github.com/pydantic/pydantic/pull/213) ## v0.11.2 (2018-07-05) * add `NewType` support [#115](https://github.com/pydantic/pydantic/pull/115) * fix `list`, `set` & `tuple` validation [#225](https://github.com/pydantic/pydantic/pull/225) * separate out `validate_model` method, allow errors to be returned along with valid values [#221](https://github.com/pydantic/pydantic/pull/221) ## v0.11.1 (2018-07-02) * support Python 3.7 [#216](https://github.com/pydantic/pydantic/pull/216), thanks @layday * Allow arbitrary types in model [#209](https://github.com/pydantic/pydantic/pull/209), thanks @oldPadavan ## v0.11.0 (2018-06-28) * make `list`, `tuple` and `set` types stricter [#86](https://github.com/pydantic/pydantic/pull/86) * **breaking change**: remove msgpack parsing [#201](https://github.com/pydantic/pydantic/pull/201) * add `FilePath` and `DirectoryPath` types [#10](https://github.com/pydantic/pydantic/pull/10) * model schema generation [#190](https://github.com/pydantic/pydantic/pull/190) * JSON serialization of models and schemas [#133](https://github.com/pydantic/pydantic/pull/133) ## v0.10.0 (2018-06-11) * add `Config.allow_population_by_alias` [#160](https://github.com/pydantic/pydantic/pull/160), thanks @bendemaree * **breaking change**: new errors format [#179](https://github.com/pydantic/pydantic/pull/179), thanks @Gr1N * **breaking change**: removed `Config.min_number_size` and `Config.max_number_size` [#183](https://github.com/pydantic/pydantic/pull/183), thanks @Gr1N * **breaking change**: correct behaviour of `lt` and `gt` arguments to `conint` etc. [#188](https://github.com/pydantic/pydantic/pull/188) for the old behaviour use `le` and `ge` [#194](https://github.com/pydantic/pydantic/pull/194), thanks @jaheba * added error context and ability to redefine error message templates using `Config.error_msg_templates` [#183](https://github.com/pydantic/pydantic/pull/183), thanks @Gr1N * fix typo in validator exception [#150](https://github.com/pydantic/pydantic/pull/150) * copy defaults to model values, so different models don't share objects [#154](https://github.com/pydantic/pydantic/pull/154) ## v0.9.1 (2018-05-10) * allow custom `get_field_config` on config classes [#159](https://github.com/pydantic/pydantic/pull/159) * add `UUID1`, `UUID3`, `UUID4` and `UUID5` types [#167](https://github.com/pydantic/pydantic/pull/167), thanks @Gr1N * modify some inconsistent docstrings and annotations [#173](https://github.com/pydantic/pydantic/pull/173), thanks @YannLuo * fix type annotations for exotic types [#171](https://github.com/pydantic/pydantic/pull/171), thanks @Gr1N * Reuse type validators in exotic types [#171](https://github.com/pydantic/pydantic/pull/171) * scheduled monthly requirements updates [#168](https://github.com/pydantic/pydantic/pull/168) * add `Decimal`, `ConstrainedDecimal` and `condecimal` types [#170](https://github.com/pydantic/pydantic/pull/170), thanks @Gr1N ## v0.9.0 (2018-04-28) * tweak email-validator import error message [#145](https://github.com/pydantic/pydantic/pull/145) * fix parse error of `parse_date()` and `parse_datetime()` when input is 0 [#144](https://github.com/pydantic/pydantic/pull/144), thanks @YannLuo * add `Config.anystr_strip_whitespace` and `strip_whitespace` kwarg to `constr`, by default values is `False` [#163](https://github.com/pydantic/pydantic/pull/163), thanks @Gr1N * add `ConstrainedFloat`, `confloat`, `PositiveFloat` and `NegativeFloat` types [#166](https://github.com/pydantic/pydantic/pull/166), thanks @Gr1N ## v0.8.0 (2018-03-25) * fix type annotation for `inherit_config` [#139](https://github.com/pydantic/pydantic/pull/139) * **breaking change**: check for invalid field names in validators [#140](https://github.com/pydantic/pydantic/pull/140) * validate attributes of parent models [#141](https://github.com/pydantic/pydantic/pull/141) * **breaking change**: email validation now uses [email-validator](https://github.com/JoshData/python-email-validator) [#142](https://github.com/pydantic/pydantic/pull/142) ## v0.7.1 (2018-02-07) * fix bug with `create_model` modifying the base class ## v0.7.0 (2018-02-06) * added compatibility with abstract base classes (ABCs) [#123](https://github.com/pydantic/pydantic/pull/123) * add `create_model` method [#113](https://github.com/pydantic/pydantic/pull/113) [#125](https://github.com/pydantic/pydantic/pull/125) * **breaking change**: rename `.config` to `.__config__` on a model * **breaking change**: remove deprecated `.values()` on a model, use `.dict()` instead * remove use of `OrderedDict` and use simple dict [#126](https://github.com/pydantic/pydantic/pull/126) * add `Config.use_enum_values` [#127](https://github.com/pydantic/pydantic/pull/127) * add wildcard validators of the form `@validate('*')` [#128](https://github.com/pydantic/pydantic/pull/128) ## v0.6.4 (2018-02-01) * allow Python date and times objects [#122](https://github.com/pydantic/pydantic/pull/122) ## v0.6.3 (2017-11-26) * fix direct install without `README.rst` present ## v0.6.2 (2017-11-13) * errors for invalid validator use * safer check for complex models in `Settings` ## v0.6.1 (2017-11-08) * prevent duplicate validators, [#101](https://github.com/pydantic/pydantic/pull/101) * add `always` kwarg to validators, [#102](https://github.com/pydantic/pydantic/pull/102) ## v0.6.0 (2017-11-07) * assignment validation [#94](https://github.com/pydantic/pydantic/pull/94), thanks petroswork! * JSON in environment variables for complex types, [#96](https://github.com/pydantic/pydantic/pull/96) * add `validator` decorators for complex validation, [#97](https://github.com/pydantic/pydantic/pull/97) * depreciate `values(...)` and replace with `.dict(...)`, [#99](https://github.com/pydantic/pydantic/pull/99) ## v0.5.0 (2017-10-23) * add `UUID` validation [#89](https://github.com/pydantic/pydantic/pull/89) * remove `index` and `track` from error object (json) if they're null [#90](https://github.com/pydantic/pydantic/pull/90) * improve the error text when a list is provided rather than a dict [#90](https://github.com/pydantic/pydantic/pull/90) * add benchmarks table to docs [#91](https://github.com/pydantic/pydantic/pull/91) ## v0.4.0 (2017-07-08) * show length in string validation error * fix aliases in config during inheritance [#55](https://github.com/pydantic/pydantic/pull/55) * simplify error display * use unicode ellipsis in `truncate` * add `parse_obj`, `parse_raw` and `parse_file` helper functions [#58](https://github.com/pydantic/pydantic/pull/58) * switch annotation only fields to come first in fields list not last ## v0.3.0 (2017-06-21) * immutable models via `config.allow_mutation = False`, associated cleanup and performance improvement [#44](https://github.com/pydantic/pydantic/pull/44) * immutable helper methods `construct()` and `copy()` [#53](https://github.com/pydantic/pydantic/pull/53) * allow pickling of models [#53](https://github.com/pydantic/pydantic/pull/53) * `setattr` is removed as `__setattr__` is now intelligent [#44](https://github.com/pydantic/pydantic/pull/44) * `raise_exception` removed, Models now always raise exceptions [#44](https://github.com/pydantic/pydantic/pull/44) * instance method validators removed * django-restful-framework benchmarks added [#47](https://github.com/pydantic/pydantic/pull/47) * fix inheritance bug [#49](https://github.com/pydantic/pydantic/pull/49) * make str type stricter so list, dict etc are not coerced to strings. [#52](https://github.com/pydantic/pydantic/pull/52) * add `StrictStr` which only always strings as input [#52](https://github.com/pydantic/pydantic/pull/52) ## v0.2.1 (2017-06-07) * pypi and travis together messed up the deploy of `v0.2` this should fix it ## v0.2.0 (2017-06-07) * **breaking change**: `values()` on a model is now a method not a property, takes `include` and `exclude` arguments * allow annotation only fields to support mypy * add pretty `to_string(pretty=True)` method for models ## v0.1.0 (2017-06-03) * add docs * add history pydantic-pydantic-e28e879/LICENSE000066400000000000000000000021511526274674700165430ustar00rootroot00000000000000The MIT License (MIT) Copyright (c) 2017 to present Pydantic Services Inc. and individual contributors. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. pydantic-pydantic-e28e879/Makefile000066400000000000000000000120141526274674700171750ustar00rootroot00000000000000.DEFAULT_GOAL := all sources = pydantic tests docs/plugins release pydantic-core/python pydantic-core/tests pydantic-core/wasm-preview/run_tests.py NUM_THREADS?=1 .PHONY: .uv ## Check that uv is installed .uv: @uv -V || echo 'Please install uv: https://docs.astral.sh/uv/getting-started/installation/' .PHONY: .pre-commit ## Check that pre-commit is installed .pre-commit: .uv @uv run pre-commit -V || uv pip install pre-commit .PHONY: install ## Install the package, dependencies, and pre-commit for local development install: .uv uv sync --frozen --all-groups --all-packages --all-extras uv pip install pre-commit uv run pre-commit install --install-hooks .PHONY: rebuild-lockfiles ## Rebuild lockfiles from scratch, updating all dependencies rebuild-lockfiles: .uv uv lock --upgrade .PHONY: .rust # Check that Rust is installed .rust: @rustup --version || echo 'Please install Rust: https://rust-lang.org/tools/install/' .PHONY: format ## Auto-format python source files format: .uv .rust uv run ruff check --fix $(sources) uv run ruff format $(sources) cargo fmt --manifest-path pydantic-core/Cargo.toml .PHONY: lint-python ## Lint python source files lint-python: .uv uv run ruff check $(sources) uv run ruff format --check $(sources) .PHONY: lint-rust ## Lint Rust source files lint-rust: $(MAKE) -C pydantic-core lint-rust .PHONY: lint ## Lint all source files lint: lint-python lint-rust .PHONY: codespell ## Use Codespell to do spellchecking codespell: .pre-commit uv run pre-commit run codespell --all-files .PHONY: typecheck ## Perform type-checking typecheck: .pre-commit uv run pre-commit run typecheck --all-files .PHONY: test-mypy ## Run the mypy integration tests test-mypy: .uv uv run coverage run -m pytest tests/mypy --test-mypy .PHONY: test-mypy-update ## Update the mypy integration tests for the current mypy version test-mypy-update: .uv uv run coverage run -m pytest tests/mypy --test-mypy --update-mypy .PHONY: test-typechecking-pyright ## Typechecking integration tests (Pyright) test-typechecking-pyright: .uv uv run bash -c 'cd tests/typechecking && pyright --version && pyright -p pyproject.toml' .PHONY: test-typechecking-mypy ## Typechecking integration tests (Mypy). Not to be confused with `test-mypy`. test-typechecking-mypy: .uv uv run bash -c 'cd tests/typechecking && mypy --version && mypy --cache-dir=/dev/null --config-file pyproject.toml .' .PHONY: test-typechecking-pyrefly ## Typechecking integration tests (Pyrefly). test-typechecking-pyrefly: .uv uv run bash -c 'cd tests/typechecking && pyrefly --version && pyrefly check --config pyproject.toml' .PHONY: test ## Run all tests, skipping the type-checker integration tests test: .uv uv run coverage run -m pytest --durations=10 --parallel-threads $(NUM_THREADS) .PHONY: benchmark ## Run all benchmarks benchmark: .uv uv run coverage run -m pytest --durations=10 --benchmark-enable tests/benchmarks .PHONY: testcov ## Run tests and generate a coverage report, skipping the type-checker integration tests testcov: test @echo "building coverage html" @uv run coverage html @echo "building coverage lcov" @uv run coverage lcov .PHONY: test-examples ## Run only the tests from the documentation test-examples: .uv @echo "running examples" @find docs/examples -type f -name '*.py' | xargs -I'{}' sh -c 'uv run python {} >/dev/null 2>&1 || (echo "{} failed")' .PHONY: test-pydantic-settings ## Run the pydantic-settings tests with this version of pydantic test-pydantic-settings: .uv git clone https://github.com/pydantic/pydantic-settings.git --single-branch bash ./tests/test_pydantic_settings.sh .PHONY: test-pydantic-extra-types ## Run the pydantic-extra-types tests with this version of pydantic test-pydantic-extra-types: .uv git clone https://github.com/pydantic/pydantic-extra-types.git --single-branch bash ./tests/test_pydantic_extra_types.sh .PHONY: test-no-docs # Run all tests except the docs tests test-no-docs: .uv uv run pytest tests --ignore=tests/test_docs.py .PHONY: all ## Run the standard set of checks performed in CI all: lint typecheck codespell testcov .PHONY: clean ## Clear local caches and build artifacts clean: rm -rf `find . -name __pycache__` rm -f `find . -type f -name '*.py[co]'` rm -f `find . -type f -name '*~'` rm -f `find . -type f -name '.*~'` rm -rf .cache rm -rf .pytest_cache rm -rf .ruff_cache rm -rf htmlcov rm -rf *.egg-info rm -f .coverage rm -f .coverage.* rm -rf build rm -rf dist rm -rf site rm -rf docs/_build rm -rf docs/.changelog.md docs/.version.md docs/.tmp_schema_mappings.html rm -rf fastapi/test.db rm -rf coverage.xml .PHONY: docs ## Generate the docs docs: uv run mkdocs build --strict .PHONY: docs-serve docs-serve: ## Build and serve the documentation, for local preview uv run mkdocs serve --strict .PHONY: help ## Display this message help: @grep -E \ '^.PHONY: .*?## .*$$' $(MAKEFILE_LIST) | \ sort | \ awk 'BEGIN {FS = ".PHONY: |## "}; {printf "\033[36m%-19s\033[0m %s\n", $$2, $$3}' .PHONY: update-v1 ## Update V1 namespace update-v1: uv run ./update_v1.sh pydantic-pydantic-e28e879/README.md000066400000000000000000000065661526274674700170330ustar00rootroot00000000000000# Pydantic Validation [![CI](https://img.shields.io/github/actions/workflow/status/pydantic/pydantic/ci.yml?branch=main&logo=github&label=CI)](https://github.com/pydantic/pydantic/actions?query=event%3Apush+branch%3Amain+workflow%3ACI) [![Coverage](https://coverage-badge.samuelcolvin.workers.dev/pydantic/pydantic.svg)](https://coverage-badge.samuelcolvin.workers.dev/redirect/pydantic/pydantic) [![pypi](https://img.shields.io/pypi/v/pydantic.svg)](https://pypi.python.org/pypi/pydantic) [![CondaForge](https://img.shields.io/conda/v/conda-forge/pydantic.svg)](https://anaconda.org/conda-forge/pydantic) [![downloads](https://static.pepy.tech/badge/pydantic/month)](https://pepy.tech/project/pydantic) [![versions](https://img.shields.io/pypi/pyversions/pydantic.svg)](https://github.com/pydantic/pydantic) [![license](https://img.shields.io/github/license/pydantic/pydantic.svg)](https://github.com/pydantic/pydantic/blob/main/LICENSE) [![Pydantic v2](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/pydantic/pydantic/main/docs/badge/v2.json)](https://pydantic.dev/docs/validation/latest/get-started/contributing/#badges) [![llms.txt](https://img.shields.io/badge/llms.txt-green)](https://pydantic.dev/docs/validation/latest/llms.txt) Data validation using Python type hints. Fast and extensible, Pydantic plays nicely with your linters/IDE/brain. Define how data should be in pure, canonical Python 3.10+; validate it with Pydantic. ## Pydantic Logfire :fire: We've launched Pydantic Logfire to help you monitor your applications. [Learn more](https://pydantic.dev/logfire/?utm_source=pydantic_validation) ## Pydantic V1.10 vs. V2 Pydantic V2 is a ground-up rewrite that offers many new features, performance improvements, and some breaking changes compared to Pydantic V1. If you're using Pydantic V1 you may want to look at the [pydantic V1.10 Documentation](https://pydantic.dev/docs/validation/1.10/overview/) or, [`1.10.X-fixes` git branch](https://github.com/pydantic/pydantic/tree/1.10.X-fixes). Pydantic V2 also ships with the latest version of Pydantic V1 built in so that you can incrementally upgrade your code base and projects: `from pydantic import v1 as pydantic_v1`. ## Help See [documentation](https://pydantic.dev/docs/validation/latest/get-started/) for more details. ## Installation Install using `pip install -U pydantic` or `conda install pydantic -c conda-forge`. For more installation options to make Pydantic even faster, see the [Install](https://pydantic.dev/docs/validation/latest/get-started/install/) section in the documentation. ## A Simple Example ```python from datetime import datetime from typing import Optional from pydantic import BaseModel class User(BaseModel): id: int name: str = 'John Doe' signup_ts: Optional[datetime] = None friends: list[int] = [] external_data = {'id': '123', 'signup_ts': '2017-06-01 12:22', 'friends': [1, '2', b'3']} user = User(**external_data) print(user) #> User id=123 name='John Doe' signup_ts=datetime.datetime(2017, 6, 1, 12, 22) friends=[1, 2, 3] print(user.id) #> 123 ``` ## Contributing For guidance on setting up a development environment and how to make a contribution to Pydantic, see [Contributing to Pydantic](https://pydantic.dev/docs/validation/latest/get-started/contributing/). ## Reporting a Security Vulnerability See our [security policy](https://github.com/pydantic/pydantic/security/policy). pydantic-pydantic-e28e879/build-docs.sh000077500000000000000000000021761526274674700201310ustar00rootroot00000000000000#!/usr/bin/env bash # This script is used to build the documentation on CloudFlare Pages, this is just used for build previews # A different script with the same name exists on the `docs-site` branch (where pre-built docs live). set -e set -x # Install Rust curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y source $HOME/.cargo/env # Install uv curl -LsSf https://astral.sh/uv/install.sh | sh uv sync --python 3.12 --group docs --frozen uv run --no-sync python -c 'import docs.plugins.main' # Adding local symlinks gets nice source locations like # pydantic_core/core_schema.py # instead of # pydantic-core/python/pydantic_core/core_schema.py # See also: mkdocs.yml:mkdocstrings:handlers:python:paths: [.]: ln -s pydantic-core/python/pydantic_core pydantic_core ln -s .venv/lib/python*/site-packages/pydantic_settings pydantic_settings ln -s .venv/lib/python*/site-packages/pydantic_extra_types pydantic_extra_types # Put these at the front of PYTHONPATH (otherwise, symlinked # entries will still have "Source code in .venv/lib/.../*.py ": PYTHONPATH="$PWD${PYTHONPATH:+:${PYTHONPATH}}" uv run --no-sync mkdocs build pydantic-pydantic-e28e879/docs/000077500000000000000000000000001526274674700164675ustar00rootroot00000000000000pydantic-pydantic-e28e879/docs/api/000077500000000000000000000000001526274674700172405ustar00rootroot00000000000000pydantic-pydantic-e28e879/docs/api/aliases.md000066400000000000000000000000251526274674700212000ustar00rootroot00000000000000::: pydantic.aliases pydantic-pydantic-e28e879/docs/api/annotated_handlers.md000066400000000000000000000000401526274674700234110ustar00rootroot00000000000000::: pydantic.annotated_handlers pydantic-pydantic-e28e879/docs/api/base_model.md000066400000000000000000000016421526274674700216570ustar00rootroot00000000000000Pydantic models are simply classes which inherit from `BaseModel` and define fields as annotated attributes. ::: pydantic.BaseModel options: show_root_heading: true merge_init_into_class: false group_by_category: false # explicit members list so we can set order and include `__init__` easily members: - __init__ - model_config - model_fields - model_computed_fields - __pydantic_core_schema__ - model_extra - model_fields_set - model_construct - model_copy - model_dump - model_dump_json - model_json_schema - model_parametrized_name - model_post_init - model_rebuild - model_validate - model_validate_json - model_validate_strings ::: pydantic.create_model options: show_root_heading: true pydantic-pydantic-e28e879/docs/api/config.md000066400000000000000000000003571526274674700210340ustar00rootroot00000000000000::: pydantic.config options: group_by_category: false members: - ConfigDict - with_config - ExtraValues - BaseConfig ::: pydantic.alias_generators options: show_root_heading: true pydantic-pydantic-e28e879/docs/api/dataclasses.md000066400000000000000000000000311526274674700220430ustar00rootroot00000000000000::: pydantic.dataclasses pydantic-pydantic-e28e879/docs/api/errors.md000066400000000000000000000000241526274674700210720ustar00rootroot00000000000000::: pydantic.errors pydantic-pydantic-e28e879/docs/api/experimental.md000066400000000000000000000004111526274674700222530ustar00rootroot00000000000000# Experimental API ## Pipeline API ::: pydantic.experimental.pipeline options: members: - _Pipeline ## Arguments schema API ::: pydantic.experimental.arguments_schema options: members: - generate_arguments_schema pydantic-pydantic-e28e879/docs/api/fields.md000066400000000000000000000006561526274674700210370ustar00rootroot00000000000000::: pydantic.fields options: group_by_category: false members: - Field - FieldInfo - PrivateAttr - ModelPrivateAttr - computed_field - ComputedFieldInfo filters: - "!^from_field$" - "!^from_annotation$" - "!^from_annotated_attribute$" - "!^merge_field_infos$" - "!^rebuild_annotation$" - "!^apply_typevars_map$" pydantic-pydantic-e28e879/docs/api/functional_serializers.md000066400000000000000000000000441526274674700243360ustar00rootroot00000000000000::: pydantic.functional_serializers pydantic-pydantic-e28e879/docs/api/functional_validators.md000066400000000000000000000000431526274674700241510ustar00rootroot00000000000000::: pydantic.functional_validators pydantic-pydantic-e28e879/docs/api/json_schema.md000066400000000000000000000000311526274674700220450ustar00rootroot00000000000000::: pydantic.json_schema pydantic-pydantic-e28e879/docs/api/networks.md000066400000000000000000000000261526274674700214340ustar00rootroot00000000000000::: pydantic.networks pydantic-pydantic-e28e879/docs/api/pydantic_core.md000066400000000000000000000013021526274674700224010ustar00rootroot00000000000000::: pydantic_core options: allow_inspection: false show_source: false members: - SchemaValidator - SchemaSerializer - ValidationError - ErrorDetails - InitErrorDetails - SchemaError - PydanticCustomError - PydanticKnownError - PydanticOmit - PydanticUseDefault - PydanticSerializationError - PydanticSerializationUnexpectedValue - Url - MultiHostUrl - MultiHostHost - ArgsKwargs - Some - TzInfo - to_json - from_json - to_jsonable_python - list_all_errors - ErrorTypeInfo - __version__ pydantic-pydantic-e28e879/docs/api/pydantic_core_schema.md000066400000000000000000000000361526274674700237240ustar00rootroot00000000000000::: pydantic_core.core_schema pydantic-pydantic-e28e879/docs/api/pydantic_extra_types_color.md000066400000000000000000000000371526274674700252220ustar00rootroot00000000000000::: pydantic_extra_types.color pydantic-pydantic-e28e879/docs/api/pydantic_extra_types_coordinate.md000066400000000000000000000000441526274674700262310ustar00rootroot00000000000000::: pydantic_extra_types.coordinate pydantic-pydantic-e28e879/docs/api/pydantic_extra_types_country.md000066400000000000000000000000411526274674700256020ustar00rootroot00000000000000::: pydantic_extra_types.country pydantic-pydantic-e28e879/docs/api/pydantic_extra_types_currency_code.md000066400000000000000000000000471526274674700267310ustar00rootroot00000000000000::: pydantic_extra_types.currency_code pydantic-pydantic-e28e879/docs/api/pydantic_extra_types_isbn.md000066400000000000000000000000361526274674700250360ustar00rootroot00000000000000::: pydantic_extra_types.isbn pydantic-pydantic-e28e879/docs/api/pydantic_extra_types_language_code.md000066400000000000000000000000471526274674700266620ustar00rootroot00000000000000::: pydantic_extra_types.language_code pydantic-pydantic-e28e879/docs/api/pydantic_extra_types_mac_address.md000066400000000000000000000000451526274674700263500ustar00rootroot00000000000000::: pydantic_extra_types.mac_address pydantic-pydantic-e28e879/docs/api/pydantic_extra_types_payment.md000066400000000000000000000000411526274674700255540ustar00rootroot00000000000000::: pydantic_extra_types.payment pydantic-pydantic-e28e879/docs/api/pydantic_extra_types_pendulum_dt.md000066400000000000000000000000451526274674700264230ustar00rootroot00000000000000::: pydantic_extra_types.pendulum_dt pydantic-pydantic-e28e879/docs/api/pydantic_extra_types_phone_numbers.md000066400000000000000000000000471526274674700267510ustar00rootroot00000000000000::: pydantic_extra_types.phone_numbers pydantic-pydantic-e28e879/docs/api/pydantic_extra_types_routing_numbers.md000066400000000000000000000000501526274674700273210ustar00rootroot00000000000000::: pydantic_extra_types.routing_number pydantic-pydantic-e28e879/docs/api/pydantic_extra_types_script_code.md000066400000000000000000000000451526274674700264010ustar00rootroot00000000000000::: pydantic_extra_types.script_code pydantic-pydantic-e28e879/docs/api/pydantic_extra_types_semantic_version.md000066400000000000000000000000521526274674700274510ustar00rootroot00000000000000::: pydantic_extra_types.semantic_version pydantic-pydantic-e28e879/docs/api/pydantic_extra_types_timezone_name.md000066400000000000000000000000471526274674700267370ustar00rootroot00000000000000::: pydantic_extra_types.timezone_name pydantic-pydantic-e28e879/docs/api/pydantic_extra_types_ulid.md000066400000000000000000000000361526274674700250400ustar00rootroot00000000000000::: pydantic_extra_types.ulid pydantic-pydantic-e28e879/docs/api/pydantic_settings.md000066400000000000000000000000261526274674700233130ustar00rootroot00000000000000::: pydantic_settings pydantic-pydantic-e28e879/docs/api/root_model.md000066400000000000000000000000301526274674700217160ustar00rootroot00000000000000::: pydantic.root_model pydantic-pydantic-e28e879/docs/api/standard_library_types.md000066400000000000000000002105331526274674700243360ustar00rootroot00000000000000--- description: Support for common types from the Python standard library. --- This section enumerates the supported built-in and standard library types: the allowed values, the possible constraints, and whether strictness can be configured. See also the [conversion table](../concepts/conversion_table.md) for a summary of the allowed values for each type. !!! note Unless specified otherwise, values are serialized as-is, in both Python and JSON modes. ## Booleans Built-in type: [`bool`][]

Validation

* A valid [`bool`][] instance, i.e. `True` or `False`. * The integers `0` or `1`. * A string, which when converted to lowercase is one of `'0'`, `'off'`, `'f'`, `'false'`, `'n'`, `'no'`, `'1'`, `'on'` `'t'`, `'true'`, `'y'`, `'yes'`. * [`bytes`][] objects that are valid per the previous rule when decoded to a string.

Strictness

In [strict mode](../concepts/strict_mode.md), only boolean values are valid. Pydantic provides the [`StrictBool`][pydantic.types.StrictBool] type as a convenience to [using the `Strict()` metadata class](../concepts/strict_mode.md#using-the-strict-metadata-class).

Example

```python from pydantic import BaseModel, ValidationError class BooleanModel(BaseModel): bool_value: bool print(BooleanModel(bool_value=False)) #> bool_value=False print(BooleanModel(bool_value='False')) #> bool_value=False print(BooleanModel(bool_value=1)) #> bool_value=True try: BooleanModel(bool_value=[]) except ValidationError as e: print(str(e)) """ 1 validation error for BooleanModel bool_value Input should be a valid boolean [type=bool_type, input_value=[], input_type=list] """ ``` ## Strings Built-in type: [`str`][]

Validation

* Strings are accepted as-is. * [`bytes`][] and [`bytearray`][] are decoded to UTF-8 strings. * [Enums][enum] are converted using the [`value`][enum.Enum.value] attribute, by calling [`str()`][str] on it. * If [`coerce_numbers_to_str`][pydantic.ConfigDict.coerce_numbers_to_str] is set, any number type ([`int`][], [`float`][] and [`Decimal`][decimal.Decimal]) will be coerced to a string and accepted as-is.

Constraints

Strings support the following constraints: | Constraint | Description | JSON Schema | | ------------------ | ------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------- | | `pattern` | A regex pattern that the string must match | [`pattern`](https://json-schema.org/understanding-json-schema/reference/string#regexp) keyword (see [note](#pattern-constraint-note) below). | | `min_length` | The minimum length of the string | [`minLength`](https://json-schema.org/understanding-json-schema/reference/string#length) keyword | | `max_length` | The maximum length of the string | [`maxLength`](https://json-schema.org/understanding-json-schema/reference/string#length) keyword | | `strip_whitespace` | Whether to remove leading and trailing whitespace | N/A | | `to_upper` | Whether to convert the string to uppercase | N/A | | `to_lower` | Whether to convert the string to lowercase | N/A | | `ascii_only` | Whether to allow only ASCII characters | N/A | These constraints can be provided using the [`StringConstraints`][pydantic.types.StringConstraints] metadata type, or using the [`Field()`][pydantic.Field] function (except for `strip_whitespace`, `to_upper`, `to_lower` and `ascii_only`). The [`annotated-types`](https://github.com/annotated-types/annotated-types) library also provides the `MinLen`, `MaxLen` and `Len` metadata types, as well as the `LowerCase`, `UpperCase`, `IsDigit` and `IsAscii` predicates (must be parameterized with `str`, e.g. `LowerCase[str]`). [](){#pattern-constraint-note} !!! note "`pattern` constraint" By default, Pydantic will use the [`regex`](https://docs.rs/regex) Rust crate to enforce the `pattern` constraint. The regex engine can be controlled using the [`regex_engine`][pydantic.ConfigDict.regex_engine] configuration value. If a compiled [regular expression object][re.Pattern] is used for `pattern`, the Python engine will automatically be used. While the JSON Schema specification [recommends](https://json-schema.org/draft/2020-12/json-schema-core#name-regular-expressions) using patterns valid according to dialect described in [ECMA-262](https://262.ecma-international.org/11.0/index.html#sec-patterns), Pydantic will *not* enforce it.

Strictness

In [strict mode](../concepts/strict_mode.md), only string values are valid. Pydantic provides the [`StrictStr`][pydantic.types.StrictStr] type as a convenience to [using the `Strict()` metadata class](../concepts/strict_mode.md#using-the-strict-metadata-class).

Example

```python from typing import Annotated from pydantic import BaseModel, StringConstraints class StringModel(BaseModel): str_value: str = "" constrained_str_value: Annotated[str, StringConstraints(to_lower=True)] = "" print(StringModel(str_value="test").str_value) #> test print(StringModel(constrained_str_value='TEST').constrained_str_value) #> test ``` ## Bytes Built-in type: [`bytes`][]. See also: [`ByteSize`][pydantic.types.ByteSize].

Validation

* [`bytes`][] instances are validated as is. * Strings and [`bytearray`][] instances are converted as bytes, following the [`val_json_bytes`][pydantic.ConfigDict.val_json_bytes] configuration value (despite its name, it applies to both Python and JSON modes).

Constraints

Strings support the following constraints: | Constraint | Description | JSON Schema | | ------------------ | --------------------------------| -------------------------------------------------------------------------------------------------| | `min_length` | The minimum length of the bytes | [`minLength`](https://json-schema.org/understanding-json-schema/reference/string#length) keyword | | `max_length` | The maximum length of the bytes | [`maxLength`](https://json-schema.org/understanding-json-schema/reference/string#length) keyword | The `MinLen` and `MaxLen` metadata types from the [`annotated-types`](https://github.com/annotated-types/annotated-types) library can also be used.

Strictness

In [strict mode](../concepts/strict_mode.md), only [`bytes`][] instances are valid. Pydantic provides the [`StrictBytes`][pydantic.types.StrictBytes] type as a convenience to [using the `Strict()` metadata class](../concepts/strict_mode.md#using-the-strict-metadata-class). In JSON mode, strict mode has no effect. [](){#number-types} ## Numbers Pydantic supports the following numeric types from the Python standard library: [](){#int} ### Integers Built-in type: [`int`][].

Validation

* Integers are validated as-is. * Strings and bytes are attempted to be converted to integers and validated as-is (see the [jiter implementation](https://docs.rs/jiter/latest/jiter/enum.NumberInt.html#impl-TryFrom%3C%26%5Bu8%5D%3E-for-NumberInt) for details). * Floats are validated as integers, provided the float input is not infinite or a NaN (not-a-number) and the fractional part is 0. * [`Decimal`][decimal.Decimal] instances, provided they are [finite][decimal.Decimal.is_finite] and the denominator is 1. * [`Fraction`][fractions.Fraction] instances, provided they are [integers][fractions.Fraction.is_integer]. * [Enums][enum] are converted using the [`value`][enum.Enum.value] attribute.

Constraints

Integers support the following constraints (numbers must be coercible to integers): | Constraint | Description | JSON Schema | | ------------- | ------------------------------------------------------ | ------------------------------------------------------------------------------------------------------- | | `le` | The value must be less than or equal to this number | [`maximum`](https://json-schema.org/understanding-json-schema/reference/numeric#range) keyword | | `ge` | The value must be greater than or equal to this number | [`minimum`](https://json-schema.org/understanding-json-schema/reference/numeric#range) keyword | | `lt` | The value must be strictly less than this number | [`exclusiveMaximum`](https://json-schema.org/understanding-json-schema/reference/numeric#range) keyword | | `gt` | The value must be strictly greater than this number | [`exclusiveMinimum`](https://json-schema.org/understanding-json-schema/reference/numeric#range) keyword | | `multiple_of` | The value must be a multiple of this number | [`multipleOf`](https://json-schema.org/understanding-json-schema/reference/numeric#multiples) keyword | These constraints can be provided using the [`Field()`][pydantic.Field] function. The `Le`, `Ge`, `Lt`, `Gt` and `MultipleOf` metadata types from the [`annotated-types`](https://github.com/annotated-types/annotated-types) library can also be used. Pydantic also provides the following types to further constrain the allowed integer values: * [`PositiveInt`][pydantic.types.PositiveInt]: Requires the input to be greater than zero. * [`NegativeInt`][pydantic.types.NegativeInt]: Requires the input to be less than zero. * [`NonPositiveInt`][pydantic.types.NonPositiveInt]: Requires the input to be less than or equal to zero. * [`NonNegativeInt`][pydantic.types.NonNegativeInt]: Requires the input to be greater than or equal to zero.

Strictness

In [strict mode](../concepts/strict_mode.md), only integer values are valid. Pydantic provides the [`StrictInt`][pydantic.types.StrictInt] type as a convenience to [using the `Strict()` metadata class](../concepts/strict_mode.md#using-the-strict-metadata-class). [](){#float} ### Floats Built-in type: [`float`][].

Validation

* Floats are validated as-is. * String and bytes are attempted to be converted to floats and validated as-is. (see the [Rust implementation](https://doc.rust-lang.org/src/core/num/float_parse.rs.html) for details). * If the input has a [`__float__()`][object.__float__] method, it will be called to convert the input into a float. If `__float__()` is not defined, it falls back to [`__index__()`][object.__index__]. This includes (but not limited to) the [`Decimal`][decimal.Decimal] and [`Fraction`][fractions.Fraction] types.

Constraints

Floats support the following constraints: | Constraint | Description | JSON Schema | | --------------- | ------------------------------------------------------- | ------------------------------------------------------------------------------------------------------- | | `le` | The value must be less than or equal to this number | [`maximum`](https://json-schema.org/understanding-json-schema/reference/numeric#range) keyword | | `ge` | The value must be greater than or equal to this number | [`minimum`](https://json-schema.org/understanding-json-schema/reference/numeric#range) keyword | | `lt` | The value must be strictly less than this number | [`exclusiveMaximum`](https://json-schema.org/understanding-json-schema/reference/numeric#range) keyword | | `gt` | The value must be strictly greater than this number | [`exclusiveMinimum`](https://json-schema.org/understanding-json-schema/reference/numeric#range) keyword | | `multiple_of` | The value must be a multiple of this number | [`multipleOf`](https://json-schema.org/understanding-json-schema/reference/numeric#multiples) keyword | | `allow_inf_nan` | Whether to allow NaN (not-a-number) and infinite values | N/A | These constraints can be provided using the [`Field()`][pydantic.Field] function. The [`annotated-types`](https://github.com/annotated-types/annotated-types) library also provides the `Le`, `Ge`, `Lt`, `Gt` and `MultipleOf` metadata types, as well as the `IsFinite`, `IsNotFinite`, `IsNan`, `IsNotNan`, `IsAscii`, `IsInfinite` and `IsNotInfinite` predicates (must be parameterized with `float`, e.g. `IsFinite[float]`). The [`AllowInfNan`][pydantic.types.AllowInfNan] type can also be used. Pydantic also provides the following types as convenience aliases: * [`PositiveFloat`][pydantic.types.PositiveFloat]: Requires the input to be greater than zero. * [`NegativeFloat`][pydantic.types.NegativeFloat]: Requires the input to be less than zero. * [`NonPositiveFloat`][pydantic.types.NonPositiveFloat]: Requires the input to be less than or equal to zero. * [`NonNegativeFloat`][pydantic.types.NonNegativeFloat]: Requires the input to be greater than or equal to zero. * [`FiniteFloat`][pydantic.types.FiniteFloat]: Prevents NaN (not-a-number) and infinite values.

Strictness

In [strict mode](../concepts/strict_mode.md), only float values and inputs having a [`__float__()`][object.__float__] or [`__index__()`][object.__index__] method are valid. Pydantic provides the [`StrictFloat`][pydantic.types.StrictFloat] type as a convenience to [using the `Strict()` metadata class](../concepts/strict_mode.md#using-the-strict-metadata-class). [](){#enumintenum} ### Integer enums Standard library type: [`enum.IntEnum`][].

Validation

* If the [`enum.IntEnum`][] type is used directly, any [`enum.IntEnum`][] instance is validated as-is * If an [`enum.IntEnum`][] subclass is used as a type, any enum member or value that correspond to the enum members values is validated as-is. See [Enums](#enums) for more details. [](){#decimaldecimal} ### Decimals Standard library type: [`decimal.Decimal`][].

Validation

* [`Decimal`][decimal.Decimal] instances are validated as is. * Any value accepted by the [`Decimal`][decimal.Decimal] constructor.

Constraints

Decimals support the following constraints (numbers must be coercible to decimals): | Constraint | Description | JSON Schema | | ---------------- | ------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------ | | `le` | The value must be less than or equal to this number | [`maximum`](https://json-schema.org/understanding-json-schema/reference/numeric#range) keyword | | `ge` | The value must be greater than or equal to this number | [`minimum`](https://json-schema.org/understanding-json-schema/reference/numeric#range) keyword | | `lt` | The value must be strictly less than this number | [`exclusiveMaximum`](https://json-schema.org/understanding-json-schema/reference/numeric#range) keyword | | `gt` | The value must be strictly greater than this number | [`exclusiveMinimum`](https://json-schema.org/understanding-json-schema/reference/numeric#range) keyword | | `multiple_of` | The value must be a multiple of this number | [`multipleOf`](https://json-schema.org/understanding-json-schema/reference/numeric#multiples) keyword | | `allow_inf_nan` | Whether to allow NaN (not-a-number) and infinite values | N/A | | `max_digits` | The maximum number of decimal digits allowed. The zero before the decimal point and trailing zeros are not counted. | N/A (see below) | | `decimal_places` | The maximum number of decimal places allowed. Trailing zeros are not counted. | N/A (see below) | /// version-changed | v2.12 The JSON Schema includes a [`pattern`](https://json-schema.org/understanding-json-schema/reference/string#regexp) matching the `max_digits` and `decimal_places` constraints. /// /// version-changed | v2.14 The JSON Schema no longer includes a [`pattern`](https://json-schema.org/understanding-json-schema/reference/string#regexp) by default, as the generated pattern can cause issues for downstream consumers due to its complexity. The pattern can be included by subclassing [`GenerateJsonSchema`][pydantic.json_schema.GenerateJsonSchema] and overriding the [`get_decimal_pattern()`][pydantic.json_schema.GenerateJsonSchema.get_decimal_pattern] method: ```python from decimal import Decimal from typing import Annotated from pydantic import Field, TypeAdapter from pydantic.json_schema import GenerateJsonSchema class MyGenerateJsonSchema(GenerateJsonSchema): def get_decimal_pattern(self, schema): return self.build_decimal_pattern(schema) ta = TypeAdapter(Annotated[Decimal, Field(max_digits=5, decimal_places=2)]) print( ta.json_schema(schema_generator=MyGenerateJsonSchema, mode='serialization') ) """ { 'pattern': '^-?(?:(?:0|[1-9][0-9]{0,2})(?:\\.[0-9]{1,2}0*)?|0E[+-][1-9][0-9]*|[1-9](?:\\.[0-9]+)?E\\+[1-2])$', 'type': 'string', } """ ``` The generated pattern also no longer uses lookahead assertions, and takes exponents and `allow_inf_nan` into account. /// These constraints can be provided using the [`Field()`][pydantic.Field] function. The `Le`, `Ge`, `Lt`, `Gt` and `MultipleOf` metadata types from the [`annotated-types`](https://github.com/annotated-types/annotated-types) library and the [`AllowInfNan`][pydantic.types.AllowInfNan] type can also be used.

Strictness

In [strict mode](../concepts/strict_mode.md), only [`decimal.Decimal`][] instances are accepted. In JSON mode, strict mode has no effect.

Serialization

In [Python mode](../concepts/serialization.md#python-mode), [`Decimal`][decimal.Decimal] instances are serialized as is. In [JSON mode](../concepts/serialization.md#json-mode), they are serialized as strings. A [serializer](../concepts/serialization.md#field-plain-serializer) can be used to override this behavior: ```python from decimal import Decimal from typing import Annotated from pydantic import BaseModel, PlainSerializer class Model(BaseModel): f: Annotated[Decimal, PlainSerializer(float, when_used='json')] my_model = Model(f=Decimal('2.1')) print(my_model.model_dump()) # (1)! #> {'f': Decimal('2.1')} print(my_model.model_dump_json()) # (2)! #> {"f":2.1} ``` 1. In Python mode, `f`remains a [`Decimal`][decimal.Decimal] instance. 2. In JSON mode, `f` is serialized as a float. [](){#complex} ### Complex numbers /// version-added | v2.9 /// Built-in type: [`complex`][].

Validation

* [`complex`][] instances are validated as-is. * In Python mode, data is validated using the [`complex()`][complex] constructor. * In JSON mode, string are validated using the [`complex()`][complex] constructor, numbers (integers and floats) are used as the real part.

Strictness

In [strict mode](../concepts/strict_mode.md), only [`complex`][] instances are accepted. In JSON mode, only strings that are accepted by the [`complex()`][complex] constructor are allowed.

Serialization

In [Python mode](../concepts/serialization.md#python-mode), [`complex`][] instances are serialized as is. In [JSON mode](../concepts/serialization.md#json-mode), they are serialized as strings. [](){#fractionsfraction} ### Fractions /// version-added | v2.10 /// Standard library type: [`fractions.Fraction`][].

Validation

* [`Fraction`][fractions.Fraction] instances are validated as is. * Floats, strings and [`decimal.Decimal`][] instances are validated using the [`Fraction()`][fractions.Fraction] constructor.

Strictness

In [strict mode](../concepts/strict_mode.md), only [`Fraction`][fractions.Fraction] instances are accepted. In JSON mode, strict mode has no effect.

Serialization

Fractions are serialized as strings, both in [Python](../concepts/serialization.md#python-mode) and [JSON](../concepts/serialization.md#json-mode) modes. [](){#datetime-types} ## Date and time types Pydantic supports the following [date and time](https://docs.python.org/library/datetime.html#available-types) types from the [`datetime`][] standard library: [](){#datetimedatetime} ### Datetimes Standard library type: [`datetime.datetime`][].

Validation

* [`datetime`][datetime.datetime] instances are validated as is. * Strings and bytes are validated in two ways: * Strings complying to the [RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339) format (both datetime and date). See the [speedate](https://docs.rs/speedate/) documentation for more details. * Unix timestamps, both as seconds or milliseconds since the [epoch](https://en.wikipedia.org/wiki/Unix_time). See the [`val_temporal_unit`][pydantic.ConfigDict.val_temporal_unit] configuration value for more details. * Integers and floats (or types that can be coerced as integers or floats) are validated as unix timestamps, following the same semantics as strings. * [`datetime.date`][] instances are accepted, and converted to a [`datetime`][datetime.datetime] instance by setting the [`hour`][datetime.datetime.hour], [`minute`][datetime.datetime.minute], [`second`][datetime.datetime.second] and [`microsecond`][datetime.datetime.microsecond] attributes to `0`, and the [`tzinfo`][datetime.datetime.tzinfo] attribute to `None`. !!! note Named timezone support (as specified in [RFC 9557](https://datatracker.ietf.org/doc/html/rfc9557.html)) can be tracked in [this issue](https://github.com/pydantic/pydantic/issues/12252).

Serialization

In [Python mode](../concepts/serialization.md#python-mode), [`datetime`][datetime.datetime] instances are serialized as is. In [JSON mode](../concepts/serialization.md#json-mode), they are serialized as strings.

Constraints

Datetimes support the following constraints (constraint values must be coercible to a [`datetime`][datetime.datetime] instance): | Constraint | Description | JSON Schema | | ---------- | -------------------------------------------------------- | ----------- | | `le` | The value must be less than or equal to this datetime | N/A | | `ge` | The value must be greater than or equal to this datetime | N/A | | `lt` | The value must be strictly less than this datetime | N/A | | `gt` | The value must be strictly greater than this datetime | N/A | These constraints can be provided using the [`Field()`][pydantic.Field] function. The `Le`, `Ge`, `Lt` and `Gt` metadata types from the [`annotated-types`](https://github.com/annotated-types/annotated-types) library can also be used. Pydantic also provides the following types to further constrain the allowed datetime values: * [`AwareDatetime`][pydantic.types.AwareDatetime]: Requires the input to have a timezone. * [`NaiveDatetime`][pydantic.types.NaiveDatetime]: Requires the input to *not* have a timezone. * [`PastDatetime`][pydantic.types.PastDatetime]: Requires the input to be in the past when validated. * [`FutureDatetime`][pydantic.types.FutureDatetime]: Requires the input to be in the future when validated.

Strictness

In [strict mode](../concepts/strict_mode.md), only [`datetime`][datetime.datetime] instances are accepted. In JSON mode, only strings complying to the [RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339) format (*only* datetime) or as unix timestamps are accepted.

Example

```python from datetime import datetime from typing import Annotated from pydantic import AwareDatetime, BaseModel, Field class Event(BaseModel): dt: Annotated[AwareDatetime, Field(gt=datetime(2000, 1, 1))] event = Event(dt='2032-04-23T10:20:30.400+02:30') print(event.model_dump()) """ {'dt': datetime.datetime(2032, 4, 23, 10, 20, 30, 400000, tzinfo=TzInfo(9000))} """ print(event.model_dump_json()) #> {"dt":"2032-04-23T10:20:30.400000+02:30"} ``` [](){#datetimedate} ### Dates Standard library type: [`datetime.date`][].

Validation

* [`date`][datetime.date] instances are validated as is. * Strings and bytes are validated in two ways: * Strings complying to the [RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339) date format. See the [speedate](https://docs.rs/speedate/) documentation for more details. * Unix timestamps, both as seconds or milliseconds since the [epoch](https://en.wikipedia.org/wiki/Unix_time). See the [`val_temporal_unit`][pydantic.ConfigDict.val_temporal_unit] configuration value for more details. * If the validation fails, the input can be [validated as a datetime](#datetimes) (including as numbers), provided that the time component is 0 and that it is naive.

Serialization

In [Python mode](../concepts/serialization.md#python-mode), [`date`][datetime.date] instances are serialized as is. In [JSON mode](../concepts/serialization.md#json-mode), they are serialized as strings.

Constraints

Dates support the following constraints (constraint values must be coercible to a [`date`][datetime.date] instance): | Constraint | Description | JSON Schema | | ---------- | ---------------------------------------------------- | ----------- | | `le` | The value must be less than or equal to this date | N/A | | `ge` | The value must be greater than or equal to this date | N/A | | `lt` | The value must be strictly less than this date | N/A | | `gt` | The value must be strictly greater than this date | N/A | These constraints can be provided using the [`Field()`][pydantic.Field] function. The `Le`, `Ge`, `Lt` and `Gt` metadata types from the [`annotated-types`](https://github.com/annotated-types/annotated-types) library can also be used. Pydantic also provides the following types to further constrain the allowed date values: * [`PastDate`][pydantic.types.PastDate]: Requires the input to be in the past when validated. * [`FutureDate`][pydantic.types.FutureDate]: Requires the input to be in the future when validated.

Strictness

In [strict mode](../concepts/strict_mode.md), only [`date`][datetime.date] instances are accepted. In JSON mode, only strings complying to the [RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339) format (*only* date) or as unix timestamps are accepted.

Example

```python from datetime import date from pydantic import BaseModel class Birthday(BaseModel): d: date my_birthday = Birthday(d=1679616000.0) print(my_birthday.model_dump()) #> {'d': datetime.date(2023, 3, 24)} print(my_birthday.model_dump_json()) #> {"d":"2023-03-24"} ``` [](){#datetimetime} ### Time Standard library type: [`datetime.time`][].

Validation

* [`time`][datetime.time] instances are validated as is. * Strings and bytes are validated according to the [RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339) time format. * Integers and floats (or values that can be coerced to such numbers) are validated as seconds. The value should not exceed 86 399.

Serialization

In [Python mode](../concepts/serialization.md#python-mode), [`time`][datetime.time] instances are serialized as is. In [JSON mode](../concepts/serialization.md#json-mode), they are serialized as strings. !!! note Named timezones from the [IANA time zone database](https://www.iana.org/time-zones) (see the [`zoneinfo`][] module) are *not* serialized with time objects. This is consistent with the [`time.isoformat()`][datetime.time.isoformat] method.

Constraints

Time support the following constraints (constraint values must be coercible to a [`time`][datetime.time] instance): | Constraint | Description | JSON Schema | | ---------- | ---------------------------------------------------- | ----------- | | `le` | The value must be less than or equal to this time | N/A | | `ge` | The value must be greater than or equal to this time | N/A | | `lt` | The value must be strictly less than this time | N/A | | `gt` | The value must be strictly greater than this time | N/A | These constraints can be provided using the [`Field()`][pydantic.Field] function. The `Le`, `Ge`, `Lt` and `Gt` metadata types from the [`annotated-types`](https://github.com/annotated-types/annotated-types) library can also be used.

Strictness

In [strict mode](../concepts/strict_mode.md), only [`time`][datetime.time] instances are accepted. In JSON mode, only strings complying to the [RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339) format are accepted.

Example

```python from datetime import time from pydantic import BaseModel class Meeting(BaseModel): t: time m = Meeting(t=time(4, 8, 16)) print(m.model_dump()) #> {'t': datetime.time(4, 8, 16)} print(m.model_dump_json()) #> {"t":"04:08:16"} ``` [](){#datetimetimedelta} ### Timedeltas Standard library type: [`datetime.timedelta`][].

Validation

* [`timedelta`][datetime.timedelta] instances are validated as is. * Strings and bytes are validated according to the [RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339) time format. * Integers and floats (or values that can be coerced to such numbers) are validated as seconds.

Constraints

Timedeltas support the following constraints (constraint values must be coercible to a [`timedata`][datetime.timedelta] instance): | Constraint | Description | JSON Schema | | ---------- | ---------------------------------------------------- -----| ----------- | | `le` | The value must be less than or equal to this timedelta | N/A | | `ge` | The value must be greater than or equal to this timedelta | N/A | | `lt` | The value must be strictly less than this timedelta | N/A | | `gt` | The value must be strictly greater than this timedelta | N/A | These constraints can be provided using the [`Field()`][pydantic.Field] function. The `Le`, `Ge`, `Lt` and `Gt` metadata types from the [`annotated-types`](https://github.com/annotated-types/annotated-types) library can also be used.

Serialization

In [Python mode](../concepts/serialization.md#python-mode), [`timedelta`][datetime.timedelta] instances are serialized as is. In [JSON mode](../concepts/serialization.md#json-mode), they are serialized as strings.

Strictness

In [strict mode](../concepts/strict_mode.md), only [`timedelta`][datetime.timedelta] instances are accepted. In JSON mode, only strings complying to the [RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339) format are accepted.

Example

```python from datetime import timedelta from pydantic import BaseModel class Model(BaseModel): td: timedelta m = Model(td='P3DT12H30M5S') print(m.model_dump()) #> {'td': datetime.timedelta(days=3, seconds=45005)} print(m.model_dump_json()) #> {"td":"P3DT12H30M5S"} ``` [](){#enum} ## Enums Standard library type: [`enum.Enum`][].

Validation

* If the [`enum.Enum`][] type is used directly, any [`enum.Enum`][] instance is validated as-is. * If an [`enum.Enum`][] subclass is used as a type, any enum member or value that correspond to the enum members [values][enum.Enum.value] is validated as-is.

Serialization

In [Python mode](../concepts/serialization.md#python-mode), enum instances are serialized as is. The [`use_enum_values`][pydantic.ConfigDict.use_enum_values] configuration value can be set to use the enum [value][enum.Enum.value] during validation (so that it is also used during serialization). In [JSON mode](../concepts/serialization.md#json-mode), enum instances are serialized using their [value][enum.Enum.value].

Example

```python from enum import Enum, IntEnum from pydantic import BaseModel, ValidationError class FruitEnum(str, Enum): PEAR = 'pear' BANANA = 'banana' class ToolEnum(IntEnum): SPANNER = 1 WRENCH = 2 class CookingModel(BaseModel): fruit: FruitEnum = FruitEnum.PEAR tool: ToolEnum = ToolEnum.SPANNER print(CookingModel()) #> fruit= tool= print(CookingModel(tool=2, fruit='banana')) #> fruit= tool= try: CookingModel(fruit='other') except ValidationError as e: print(e) """ 1 validation error for CookingModel fruit Input should be 'pear' or 'banana' [type=enum, input_value='other', input_type=str] """ ``` ## None types Supported types: [`None`][], [`NoneType`][types.NoneType] or `Literal[None]` (they are [equivalent](https://typing.readthedocs.io/en/latest/spec/special-types.html#none)). Allows only `None` as a value. ## Generic collection types Pydantic supports a wide variety of generic collection types, both built-ins (such as [`list`][]) and abstract base classes from the [`collections.abc`][] module (such as [`Sequence`][collections.abc.Sequence]). In most cases, it is recommended to make use of the built-in types over the abstract ones. Due to [data coercion](../concepts/models.md#data-conversion), using [`list`][] or [`tuple`][] will allow most other iterables as input, with better performance. !!! note "Strictness on collection types" When applying [strict mode](../concepts/strict_mode.md) on collection types, strictness will *not* apply to the inner types. This may change in the future, see [this issue](https://github.com/pydantic/pydantic/issues/12319). ### Lists Built-in type: [`list`][] (deprecated alias: [`typing.List`][]).

Validation

* Allows [`list`][], [`tuple`][], [`set`][] and [`frozenset`][] instances, or any iterable that is *not* a [string][str], [bytes][], [bytearray][], [dict][] or [mapping][]. Produces a [`list`][] instance. * If a generic parameter is provided, the appropriate validation is applied to all items of the list.

Constraints

Lists support the following constraints: | Constraint | Description | JSON Schema | |--------------|---------------------------------------------|------------------------------------------------------------------------------------------------| | `min_length` | The list must have at least this many items | [`minItems`](https://json-schema.org/understanding-json-schema/reference/array#length) keyword | | `max_length` | The list must have at most this many items | [`maxItems`](https://json-schema.org/understanding-json-schema/reference/array#length) keyword | These constraints can be provided using the [`Field()`][pydantic.Field] function. The `MinLen` and `MaxLen` metadata types from the [`annotated-types`](https://github.com/annotated-types/annotated-types) library can also be used.

Strictness

In [strict mode](../concepts/strict_mode.md), only [`list`][] instances are valid. Strict mode does *not* apply to the items of the list. The strict constraint must be applied to the parameter type for this to work.

Example

```python from pydantic import BaseModel, Field class Model(BaseModel): simple_list: list[object] | None = None list_of_ints: list[int] | None = Field(default=None, strict=True) print(Model(simple_list=('1', '2', '3')).simple_list) #> ['1', '2', '3'] print(Model(list_of_ints=['1', 2, 3]).list_of_ints) #> [1, 2, 3] ``` ### Tuples Built-in type: [`tuple`][] (deprecated alias: [`typing.Tuple`][]). !!! note [Unpacked tuple types](https://typing.python.org/en/latest/spec/generics.html#unpacking-tuple-types) (as specified by [PEP 646](https://peps.python.org/pep-0646/)) are *not* yet supported, and can be tracked in [this issue](https://github.com/pydantic/pydantic/issues/5952).

Validation

* Allows [`tuple`][], [`list`][], [`set`][] and [`frozenset`][] instances, or any iterable that is *not* a [string][str], [bytes][], [bytearray][], [dict][] or [mapping][]. Produces a [`tuple`][] instance. * Appropriate validation is applied to items of the tuple, if [element types](https://typing.python.org/en/latest/spec/tuples.html#tuple-type-form) are specified.

Constraints

Lists support the following constraints: | Constraint | Description | JSON Schema | |--------------|----------------------------------------------|------------------------------------------------------------------------------------------------| | `min_length` | The tuple must have at least this many items | [`minItems`](https://json-schema.org/understanding-json-schema/reference/array#length) keyword | | `max_length` | The tuple must have at most this many items | [`maxItems`](https://json-schema.org/understanding-json-schema/reference/array#length) keyword | These constraints can be provided using the [`Field()`][pydantic.Field] function. The `MinLen` and `MaxLen` metadata types from the [`annotated-types`](https://github.com/annotated-types/annotated-types) library can also be used. Additionally, the [`prefixItems`](https://json-schema.org/understanding-json-schema/reference/array#tupleValidation) JSON Schema keyword may be used depending on the tuple shape.

Strictness

In [strict mode](../concepts/strict_mode.md), only [`tuple`][] instances are valid. Strict mode does *not* apply to the items of the tuple. The strict constraint must be applied to the parameter types for this to work.

Example

```python from pydantic import BaseModel class Model(BaseModel): simple_tuple: tuple | None = None tuple_of_different_types: tuple[int, float, bool] | None = None print(Model(simple_tuple=[1, 2, 3, 4]).simple_tuple) #> (1, 2, 3, 4) print(Model(tuple_of_different_types=[3, 2, 1]).tuple_of_different_types) #> (3, 2.0, True) ``` [](){#typingnamedtuple} ### Named tuples Standard library type: [`typing.NamedTuple`][] (and types created by the [`collections.namedtuple()`][collections.namedtuple] factory function – each field will implicitly have the type [`Any`][typing.Any]).

Validation

* Allows [`tuple`][] and [`list`][] instances. Validate each item according to the field definition. * Allows [`dict`][] instances. Keys must match the named tuple field names, and values are validated according to the field definition. * Allows instances of the named tuple class (fields are revalidated).

Serialization

In [Python mode](../concepts/serialization.md#python-mode), named tuples are serialized as tuples. In [JSON mode](../concepts/serialization.md#json-mode), they are serialized as arrays.

Example

```python from typing import NamedTuple from pydantic import BaseModel class Point(NamedTuple): x: int y: int class Model(BaseModel): p: Point model = Model(p=('1', 2)) print(model.model_dump()) #> {'p': (1, 2)} ``` ### Sets Types: [`set`][] (or [`collections.abc.MutableSet`][]) and [`frozenset`][] (or [`collections.abc.Set`][]) (deprecated aliases: [`typing.Set`][] and [`typing.FrozenSet`][]).

Validation

* Allows [`set`][], [`frozenset`][], [`tuple`][] and [`list`][] instances, or any iterable that is *not* a [string][str], [bytes][], [bytearray][], [dict][] or [mapping][]. Produces a [`set`][] or [`frozenset`][] instance. * If a generic parameter is provided, the appropriate validation is applied to all items of the set/frozenset.

Constraints

Sets support the following constraints: | Constraint | Description | JSON Schema | |--------------|--------------------------------------------|------------------------------------------------------------------------------------------------| | `min_length` | The set must have at least this many items | [`minItems`](https://json-schema.org/understanding-json-schema/reference/array#length) keyword | | `max_length` | The set must have at most this many items | [`maxItems`](https://json-schema.org/understanding-json-schema/reference/array#length) keyword | These constraints can be provided using the [`Field()`][pydantic.Field] function. The `MinLen` and `MaxLen` metadata types from the [`annotated-types`](https://github.com/annotated-types/annotated-types) library can also be used.

Strictness

In [strict mode](../concepts/strict_mode.md), only [`set`][]/[`frozenset`][] instances are valid. Strict mode does *not* apply to the items of the set. The strict constraint must be applied to the parameter type for this to work.

Serialization

In [Python mode](../concepts/serialization.md#python-mode), sets are serialized as is. In [JSON mode](../concepts/serialization.md#json-mode), they are serialized as arrays.

Example

```python from pydantic import BaseModel class Model(BaseModel): simple_set: set | None = None set_of_ints: frozenset[int] | None = None print(Model(simple_set=['1', '2', '3']).simple_set) #> {'1', '2', '3'} print(Model(set_of_ints=['1', '2', '3']).set_of_ints) #> frozenset({1, 2, 3}) ```

JSON Schema

Pydantic does best effort to sort default values that are [`collections.abc.Set`][] instances. ### Deque Standard library type: [`collections.deque`][] (deprecated alias: [`typing.Deque`][]).

Validation

Any iterable (except strings, bytes and mappings) is accepted and converted to a [`deque`][collections.deque], with each item validated against the parameter type. If the input is already a `deque` instance, its [`maxlen`][collections.deque.maxlen] attribute is preserved.

Constraints

Deques support the following constraints: | Constraint | Description | JSON Schema | |--------------|----------------------------------------------|------------------------------------------------------------------------------------------------| | `min_length` | The deque must have at least this many items | [`minItems`](https://json-schema.org/understanding-json-schema/reference/array#length) keyword | | `max_length` | The deque must have at most this many items | [`maxItems`](https://json-schema.org/understanding-json-schema/reference/array#length) keyword | These constraints can be provided using the [`Field()`][pydantic.Field] function. The `MinLen` and `MaxLen` metadata types from the [`annotated-types`](https://github.com/annotated-types/annotated-types) library can also be used.

Strictness

In [strict mode](../concepts/strict_mode.md), only [`deque`][collections.deque] instances are valid. Strict mode does *not* apply to the items of the deque. The strict constraint must be applied to the parameter type for this to work.

Serialization

In [Python mode](../concepts/serialization.md#python-mode), deques are serialized as is. In [JSON mode](../concepts/serialization.md#json-mode), they are serialized as arrays.

Example

```python from collections import deque from pydantic import BaseModel class Model(BaseModel): deque: deque[int] print(Model(deque=[1, 2, 3]).deque) #> deque([1, 2, 3]) ``` [](){#typingsequence} ### Sequences Standard library type: [`collections.abc.Sequence`][] (deprecated alias: [`typing.Sequence`][]). In most cases, you will want to use the built-in types (such as [list](#lists) or [tuple](#tuples)) as [type coercion](../concepts/models.md#data-conversion) will apply. The [`Sequence`][collections.abc.Sequence] type can be used when you want to preserve the input type during serialization.

Validation

Any [`collections.abc.Sequence`][] instance (expect strings and bytes) is accepted. It is converted to a list using the [`list()`][list] constructor, and then converted back to the original input type. !!! warning "Strings aren't treated as sequences" While strings are technically valid sequence instances, this is frequently not intended, and is a common source of bugs. As a result, Pydantic will *not* accept strings and bytes for the [`Sequence`][collections.abc.Sequence] type (see example below).

Constraints

Sequences support the following constraints: | Constraint | Description | JSON Schema | |--------------|-------------------------------------------------|------------------------------------------------------------------------------------------------| | `min_length` | The sequence must have at least this many items | [`minItems`](https://json-schema.org/understanding-json-schema/reference/array#length) keyword | | `max_length` | The sequence must have at most this many items | [`maxItems`](https://json-schema.org/understanding-json-schema/reference/array#length) keyword | These constraints can be provided using the [`Field()`][pydantic.Field] function. The `MinLen` and `MaxLen` metadata types from the [`annotated-types`](https://github.com/annotated-types/annotated-types) library can also be used.

Serialization

In [Python mode](../concepts/serialization.md#python-mode), sequences are serialized as is. In [JSON mode](../concepts/serialization.md#json-mode), they are serialized as arrays.

Example

```python from collections.abc import Sequence from pydantic import BaseModel, ValidationError class Model(BaseModel): sequence_of_strs: Sequence[str] print(Model(sequence_of_strs=['a', 'bc']).sequence_of_strs) #> ['a', 'bc'] print(Model(sequence_of_strs=('a', 'bc')).sequence_of_strs) #> ('a', 'bc') try: Model(sequence_of_strs='abc') except ValidationError as e: print(e) """ 1 validation error for Model sequence_of_strs 'str' instances are not allowed as a Sequence value [type=sequence_str, input_value='abc', input_type=str] """ ``` ### Dictionaries Built-in type: [`dict`][].

Validation

* [`dict`][] instances are accepted as is. * [mappings][mapping] instances are accepted and coerced to a [`dict`][]. * If generic parameters for keys and values are provided, the appropriate validation is applied.

Constraints

Dictionaries support the following constraints: | Constraint | Description | JSON Schema | |--------------|---------------------------------------------------|----------------------------------------------------------------------------------------------------| | `min_length` | The dictionary must have at least this many items | [`minProperties`](https://json-schema.org/understanding-json-schema/reference/object#size) keyword | | `max_length` | The dictionary must have at most this many items | [`maxProperties`](https://json-schema.org/understanding-json-schema/reference/object#size) keyword | These constraints can be provided using the [`Field()`][pydantic.Field] function. The `MinLen` and `MaxLen` metadata types from the [`annotated-types`](https://github.com/annotated-types/annotated-types) library can also be used.

Strictness

In [strict mode](../concepts/strict_mode.md), only [`dict`][] instances are valid. Strict mode does *not* apply to the keys and values of the dictionaries. The strict constraint must be applied to the parameter types for this to work.

Example

```python from pydantic import BaseModel, ValidationError class Model(BaseModel): x: dict[str, int] m = Model(x={'foo': 1}) print(m.model_dump()) #> {'x': {'foo': 1}} try: Model(x='test') except ValidationError as e: print(e) """ 1 validation error for Model x Input should be a valid dictionary [type=dict_type, input_value='test', input_type=str] """ ``` ### Frozen dictionaries Built-in type: `frozendict`. /// version-added | v2.14 The `frozendict` type, new in Python 3.15, is supported by Pydantic. ///

Validation

* `frozendict` instances are accepted as is. * [`dict`][] and [mappings][mapping] instances are accepted and coerced to a `frozendict`. * If generic parameters for keys and values are provided, the appropriate validation is applied.

Constraints

As with [dictionaries](#dictionaries), frozen dictionaries support the following constraints: | Constraint | Description | JSON Schema | |--------------|---------------------------------------------------|----------------------------------------------------------------------------------------------------| | `min_length` | The dictionary must have at least this many items | [`minProperties`](https://json-schema.org/understanding-json-schema/reference/object#size) keyword | | `max_length` | The dictionary must have at most this many items | [`maxProperties`](https://json-schema.org/understanding-json-schema/reference/object#size) keyword | These constraints can be provided using the [`Field()`][pydantic.Field] function. The `MinLen` and `MaxLen` metadata types from the [`annotated-types`](https://github.com/annotated-types/annotated-types) library can also be used.

Strictness

In [strict mode](../concepts/strict_mode.md), only `frozendict` instances are valid. Strict mode does *not* apply to the keys and values of the frozen dictionaries. The strict constraint must be applied to the parameter types for this to work.

Example

```python {requires="3.15" lint="skip"} from pydantic import BaseModel, ValidationError class Model(BaseModel): x: frozendict[str, int] m = Model(x={'foo': 1}) print(m.model_dump()) #> {'x': frozendict({'foo': 1})} try: Model(x='test') except ValidationError as e: print(e) """ 1 validation error for Model x Input should be a valid frozendict [type=frozen_dict_type, input_value='test', input_type=str] """ ``` ### Ordered dictionaries Standard library type: [`collections.OrderedDict`][] (deprecated alias: [`typing.OrderedDict`][]).

Validation

* [`OrderedDict`][collections.OrderedDict] instances are accepted as is. * [`dict`][] and [mappings][mapping] instances are accepted and coerced to an [`OrderedDict`][collections.OrderedDict]. * If generic parameters for keys and values are provided, the appropriate validation is applied.

Constraints

As with [dictionaries](#dictionaries), ordered dictionaries support the following constraints: | Constraint | Description | JSON Schema | |--------------|---------------------------------------------------|----------------------------------------------------------------------------------------------------| | `min_length` | The dictionary must have at least this many items | [`minProperties`](https://json-schema.org/understanding-json-schema/reference/object#size) keyword | | `max_length` | The dictionary must have at most this many items | [`maxProperties`](https://json-schema.org/understanding-json-schema/reference/object#size) keyword | These constraints can be provided using the [`Field()`][pydantic.Field] function. The `MinLen` and `MaxLen` metadata types from the [`annotated-types`](https://github.com/annotated-types/annotated-types) library can also be used.

Strictness

In [strict mode](../concepts/strict_mode.md), only [`OrderedDict`][collections.OrderedDict] instances are valid. Strict mode does *not* apply to the keys and values of the ordered dictionaries. The strict constraint must be applied to the parameter types for this to work.

Example

```python {requires="3.12"} from collections import OrderedDict from pydantic import BaseModel, ValidationError class Model(BaseModel): x: OrderedDict[str, int] m = Model(x={'foo': 1}) print(m.model_dump()) #> {'x': OrderedDict({'foo': 1})} try: Model(x='test') except ValidationError as e: print(e) """ 1 validation error for Model x Input should be a valid OrderedDict [type=ordered_dict_type, input_value='test', input_type=str] """ ``` ### Counters Standard library type: [`collections.Counter`][] (deprecated alias: [`typing.Counter`][]).

Validation

* [`Counter`][collections.Counter] instances are accepted as is. * [`dict`][] and [mappings][mapping] instances are accepted and coerced to a [`Counter`][collections.Counter]. * If a generic parameter for keys is provided, the appropriate validation is applied. Values are always validated as [integers](#integers).

Constraints

As with [dictionaries](#dictionaries), counters support the following constraints: | Constraint | Description | JSON Schema | |--------------|------------------------------------------------|----------------------------------------------------------------------------------------------------| | `min_length` | The counter must have at least this many items | [`minProperties`](https://json-schema.org/understanding-json-schema/reference/object#size) keyword | | `max_length` | The counter must have at most this many items | [`maxProperties`](https://json-schema.org/understanding-json-schema/reference/object#size) keyword | These constraints can be provided using the [`Field()`][pydantic.Field] function. The `MinLen` and `MaxLen` metadata types from the [`annotated-types`](https://github.com/annotated-types/annotated-types) library can also be used.

Strictness

In [strict mode](../concepts/strict_mode.md), only [`Counter`][collections.Counter] instances are valid. Strict mode does *not* apply to the keys and values of the counters. The strict constraint must be applied to the parameter types for this to work.

Example

```python from collections import Counter from pydantic import BaseModel, ValidationError class Model(BaseModel): x: Counter[str] m = Model(x={'foo': '1'}) print(m.model_dump()) #> {'x': Counter({'foo': 1})} try: Model(x='test') except ValidationError as e: print(e) """ 1 validation error for Model x Input should be a valid Counter [type=counter_type, input_value='test', input_type=str] """ ``` [](){#typeddict} ### Typed dictionaries Standard library type: [`typing.TypedDict`][] (see also: the [typing specification](https://typing.python.org/en/latest/spec/typeddict.html)). !!! note Because of runtime limitations, Pydantic will require using the [`TypedDict`][typing_extensions.TypedDict] type from [`typing_extensions`][] when using Python 3.12 and lower. [`TypedDict`][typing.TypedDict] declares a dictionary type that expects all of its instances to have a certain set of keys where each key is associated with a value of a consistent type. This type [supports configuration](../concepts/config.md#configuration-on-other-supported-types).

Strictness

In [strict mode](../concepts/strict_mode.md), only [`dict`][] instances are valid (unlike mappings in lax mode). Strict mode does *not* apply to the values of the typed dictionary. The strict constraint must be applied to the value types for this to work.

Example

```python from typing_extensions import TypedDict from pydantic import TypeAdapter, ValidationError class User(TypedDict): name: str id: int ta = TypeAdapter(User) print(ta.validate_python({'name': 'foo', 'id': 1})) #> {'name': 'foo', 'id': 1} try: ta.validate_python({'name': 'foo'}) except ValidationError as e: print(e) """ 1 validation error for User id Field required [type=missing, input_value={'name': 'foo'}, input_type=dict] """ ``` [](){#typingiterable} ### Iterables Standard library type: [`collections.abc.Iterable`][] (deprecated alias: [`typing.Iterable`][]).

Validation

Iterables are lazily validated, and wrapped in an internal datastructure that can be iterated over (and will validate the items type while doing so). This means that even if you provide a concrete container such as a list, the validated type will *not* be of type [`list`][]. However, Pydantic will ensure that the input value is iterable by getting an [iterator][] from it (by calling [`iter()`][iter] on the value). It is recommended to use concrete collection types (such as [lists](#lists)) instead, unless you are using an infinite iterator (in which case eagerly validating the input would result in an infinite loop).

Example

```python from collections.abc import Iterable from pydantic import BaseModel, ValidationError class Model(BaseModel): f: Iterable[str] m = Model(f=[1, 2]) # Validates fine try: next(m.f) except ValidationError as e: print(e) """ 1 validation error for ValidatorIterator 0 Input should be a valid string [type=string_type, input_value=1, input_type=int] """ ``` ## Callable Standard library type: [`collections.abc.Callable`][] (deprecated alias: [`typing.Callable`][]).

Validation

Pydantic only validates that the input is a [callable][] (using the [`callable()`](https://docs.python.org/3/library/functions.html#callable) function). It does *not* validate the number of parameters or their type, nor the type of the return value. ```python from collections.abc import Callable from pydantic import BaseModel class Foo(BaseModel): callback: Callable[[int], int] m = Foo(callback=lambda x: x) print(m) #> callback= at 0x0123456789ab> ```

Serialization

Callables are serialized as is. Callables can't be serialized in [JSON mode](../concepts/serialization.md#json-mode) (a [`PydanticSerializationError`][pydantic_core.PydanticSerializationError] is raised). [](){#ip-address-types} ## IP Addresses Standard library types: * [`ipaddress.IPv4Address`][] * [`ipaddress.IPv4Interface`][] * [`ipaddress.IPv4Network`][] * [`ipaddress.IPv6Address`][] * [`ipaddress.IPv6Interface`][] * [`ipaddress.IPv6Network`][] See also: the [`IPvAnyAddress`][pydantic.networks.IPvAnyAddress], [`IPvAnyInterface`][pydantic.networks.IPvAnyInterface] and [`IPvAnyNetwork`][pydantic.networks.IPvAnyNetwork] Pydantic types.

Validation

* Instances are validated as is. * Other input values are passed to the constructor of the relevant address type.

Strictness

In [strict mode](../concepts/strict_mode.md), only the address types are accepted. In JSON mode, only strings are accepted in strict mode, while integers are also accepted in lax mode (e.g. `3232235521` is validated as `IPv4Address('192.168.0.1')`).

Serialization

In [Python mode](../concepts/serialization.md#python-mode), IP addresses are serialized as is. In [JSON mode](../concepts/serialization.md#json-mode), they are serialized as strings. ## UUID Standard library type: [`uuid.UUID`][].

Validation

* [`UUID`][uuid.UUID] instances are validated as is. * Strings and bytes are validated as UUIDs, and casted to a [`UUID`][uuid.UUID] instance.

Constraints

The [`UUID`][uuid.UUID] type supports a `version` constraint. The [`UuidVersion`][pydantic.types.UuidVersion] metadata type can be used. Pydantic also provides the following types as convenience aliases: [`UUID1`][pydantic.types.UUID1], [`UUID3`][pydantic.types.UUID3], [`UUID4`][pydantic.types.UUID4], [`UUID5`][pydantic.types.UUID5], [`UUID6`][pydantic.types.UUID6], [`UUID7`][pydantic.types.UUID7], [`UUID8`][pydantic.types.UUID8].

Strictness

In [strict mode](../concepts/strict_mode.md), only [`UUID`][uuid.UUID] instances are accepted. In JSON mode, strict mode has no effect.

Serialization

In [Python mode](../concepts/serialization.md#python-mode), UUIDs are serialized as is. In [JSON mode](../concepts/serialization.md#json-mode), they are serialized as strings.

Example

```python from typing import Annotated from uuid import UUID from pydantic import BaseModel from pydantic.types import UUID7, UuidVersion class Model(BaseModel): u1: UUID7 u2: Annotated[UUID, UuidVersion(4)] print( Model( u1='01999b2c-8353-749b-8dac-859307fae22b', u2=UUID('125725f3-e1b4-44e3-90c3-1a20eab12da5'), ) ) """ u1=UUID('01999b2c-8353-749b-8dac-859307fae22b') u2=UUID('125725f3-e1b4-44e3-90c3-1a20eab12da5') """ ``` ## Type Built-in type: [`type`][] (deprecated alias: [`typing.Type`][]).

Validation

Allows any type that is a subclass of the type argument. For instance, with `type[str]`, allows the [`str`][] class or any [`str`][] subclass as an input. If no type argument is provided (i.e. `type` is used as an annotation), allow any class.

Serialization

Types are serialized as is. Types can't be serialized in [JSON mode](../concepts/serialization.md#json-mode) (a [`PydanticSerializationError`][pydantic_core.PydanticSerializationError] is raised). ```python from pydantic import BaseModel, ValidationError class Foo: pass class Bar(Foo): pass class Other: pass class SimpleModel(BaseModel): just_subclasses: type[Foo] SimpleModel(just_subclasses=Foo) SimpleModel(just_subclasses=Bar) try: SimpleModel(just_subclasses=Other) except ValidationError as e: print(e) """ 1 validation error for SimpleModel just_subclasses Input should be a subclass of Foo [type=is_subclass_of, input_value=, input_type=type] """ ``` [](){#typingliteral} ## Literals Typing construct: [`typing.Literal`][] (see also: the [typing specification](https://typing.python.org/en/latest/spec/literal.html#literal)). Literals can be used to only allow specific literal values. Note that Pydantic applies [strict mode](../concepts/strict_mode.md) behavior when validating literal values (see [this issue](https://github.com/pydantic/pydantic/issues/9991)).

Example

```python from typing import Literal from pydantic import BaseModel, ValidationError class Pie(BaseModel): flavor: Literal['apple', 'pumpkin'] quantity: Literal[1, 2] = 1 Pie(flavor='apple') Pie(flavor='pumpkin') try: Pie(flavor='cherry') except ValidationError as e: print(str(e)) """ 1 validation error for Pie flavor Input should be 'apple' or 'pumpkin' [type=literal_error, input_value='cherry', input_type=str] """ try: Pie(flavor='apple', quantity='1') except ValidationError as e: print(str(e)) """ 1 validation error for Pie quantity Input should be 1 or 2 [type=literal_error, input_value='1', input_type=str] """ ``` [](){#typingany} ## Any Types: [`typing.Any`][] or [`object`][]. Allows any value, including `None`. [](){#typinghashable} ## Hashables Standard library type: [`collections.abc.Hashable`][] (deprecated alias: [`typing.Hashable`][]).

Validation

Any value that is hashable (using `isinstance(value, Hashable)`). [](){#typingpattern} ## Regex patterns Standard library type: [`re.Pattern`][] (deprecated alias: [`typing.Pattern`][]).

Validation

* For [`Pattern`][re.Pattern] instances, check that the [`pattern`][re.Pattern.pattern] attribute is of the right type ([`str`][] or [`bytes`][] depending on the [`Pattern`][re.Pattern] type parameter). * If the type parameter is [`str`][] or [`bytes`][], input values of type [`str`][] (or [`bytes`][] respectively) are attempted to be compiled using [`re.compile()`][re.compile].

Serialization

In [Python mode](../concepts/serialization.md#python-mode), [`Pattern`][re.Pattern] instances are serialized as is. In [JSON mode](../concepts/serialization.md#json-mode), they are serialized as strings (note that flags are currently *not* preserved). [](){#pathlibpath} ## Paths Standard library types: * [`pathlib.Path`][]. * [`pathlib.PurePath`][]. * [`pathlib.PosixPath`][]. * [`pathlib.WindowsPath`][]. * [`pathlib.PurePosixPath`][]. * [`pathlib.PureWindowsPath`][]. * [`os.PathLike`][] (must be parameterized with [`str`][], [`bytes`][] or [`Any`][typing.Any]).

Validation

* Path instances are validated as is. * Strings are accepted and passed to the type constructor. If [`os.PathLike`][] was used, bytes are accepted if it was parameterized with the [`bytes`][] type.

Strictness

In [strict mode](../concepts/strict_mode.md), only Path instances are accepted. In JSON mode, strict mode has no effect.

Serialization

In [Python mode](../concepts/serialization.md#python-mode), Path instances are serialized as is. In [JSON mode](../concepts/serialization.md#json-mode), they are serialized as strings. pydantic-pydantic-e28e879/docs/api/type_adapter.md000066400000000000000000000000461526274674700222430ustar00rootroot00000000000000::: pydantic.type_adapter.TypeAdapter pydantic-pydantic-e28e879/docs/api/types.md000066400000000000000000000001451526274674700207260ustar00rootroot00000000000000::: pydantic.types options: show_root_heading: true merge_init_into_class: false pydantic-pydantic-e28e879/docs/api/validate_call.md000066400000000000000000000000451526274674700223450ustar00rootroot00000000000000::: pydantic.validate_call_decorator pydantic-pydantic-e28e879/docs/api/version.md000066400000000000000000000002261526274674700212470ustar00rootroot00000000000000::: pydantic.__version__ options: show_root_heading: true ::: pydantic.version.version_info options: show_root_heading: true pydantic-pydantic-e28e879/docs/badge/000077500000000000000000000000001526274674700175315ustar00rootroot00000000000000pydantic-pydantic-e28e879/docs/badge/v1.json000066400000000000000000000017531526274674700207600ustar00rootroot00000000000000{ "label": "Pydantic", "message": "v1", "logoSvg": "", "logoWidth": 10, "labelColor": "#1e293b", "color": "#4CC61F" } pydantic-pydantic-e28e879/docs/badge/v2.json000066400000000000000000000017531526274674700207610ustar00rootroot00000000000000{ "label": "Pydantic", "message": "v2", "logoSvg": "", "logoWidth": 10, "labelColor": "#1e293b", "color": "#4CC61F" } pydantic-pydantic-e28e879/docs/concepts/000077500000000000000000000000001526274674700203055ustar00rootroot00000000000000pydantic-pydantic-e28e879/docs/concepts/alias.md000066400000000000000000000331161526274674700217240ustar00rootroot00000000000000An alias is an alternative name for a field, used when serializing and deserializing data. You can specify an alias in the following ways: * `alias` on the [`Field`][pydantic.fields.Field] * must be a `str` * `validation_alias` on the [`Field`][pydantic.fields.Field] * can be an instance of `str`, [`AliasPath`][pydantic.aliases.AliasPath], or [`AliasChoices`][pydantic.aliases.AliasChoices] * `serialization_alias` on the [`Field`][pydantic.fields.Field] * must be a `str` * `alias_generator` on the [`Config`][pydantic.config.ConfigDict.alias_generator] * can be a callable or an instance of [`AliasGenerator`][pydantic.aliases.AliasGenerator] For examples of how to use `alias`, `validation_alias`, and `serialization_alias`, see [Field aliases](../concepts/fields.md#field-aliases). ## `AliasPath` and `AliasChoices` ??? api "API Documentation" [`pydantic.aliases.AliasPath`][pydantic.aliases.AliasPath]
[`pydantic.aliases.AliasChoices`][pydantic.aliases.AliasChoices]
Pydantic provides two special types for convenience when using `validation_alias`: `AliasPath` and `AliasChoices`. The `AliasPath` is used to specify a path to a field using aliases. For example: ```python {lint="skip"} from pydantic import BaseModel, Field, AliasPath class User(BaseModel): first_name: str = Field(validation_alias=AliasPath('names', 0)) last_name: str = Field(validation_alias=AliasPath('names', 1)) address: str = Field(validation_alias=AliasPath('contact', 'address')) user = User.model_validate({ # (1)! 'names': ['John', 'Doe'], 'contact': {'address': '221B Baker Street'} }) print(user) #> first_name='John' last_name='Doe' address='221B Baker Street' ``` 1. We are using [`model_validate()`][pydantic.BaseModel.model_validate] to validate a dictionary using the field aliases. Refer to documentation about [validating data](./models.md#validating-data) for more details. In the `'first_name'` field, we are using the alias `'names'` and the index `0` to specify the path to the first name. In the `'last_name'` field, we are using the alias `'names'` and the index `1` to specify the path to the last name. `AliasChoices` is used to specify a list of choices of aliases. Choices that appear first in the list will have higher priority during validation. For example: ```python {lint="skip"} from pydantic import BaseModel, Field, AliasChoices class User(BaseModel): first_name: str = Field(validation_alias=AliasChoices('first_name', 'fname')) last_name: str = Field(validation_alias=AliasChoices('last_name', 'lname')) user = User.model_validate({'fname': 'John', 'lname': 'Doe'}) # (1)! print(user) #> first_name='John' last_name='Doe' user = User.model_validate({'first_name': 'John', 'lname': 'Doe'}) # (2)! print(user) #> first_name='John' last_name='Doe' user = User.model_validate({'first_name': 'John', 'fname': 'J', 'lname': 'Doe'}) # (3)! print(user) #> first_name='John' last_name='Doe' ``` 1. We are using the second alias choice for both fields. 2. We are using the first alias choice for the field `'first_name'` and the second alias choice for the field `'last_name'`. 3. Both `'first_name'` and `'fname'` are provided, `'first_name'` is used because it has higher priority. You can also use `AliasChoices` with `AliasPath`: ```python {lint="skip"} from pydantic import BaseModel, Field, AliasPath, AliasChoices class User(BaseModel): first_name: str = Field(validation_alias=AliasChoices('first_name', AliasPath('names', 0))) last_name: str = Field(validation_alias=AliasChoices('last_name', AliasPath('names', 1))) user = User.model_validate({'first_name': 'John', 'last_name': 'Doe'}) print(user) #> first_name='John' last_name='Doe' user = User.model_validate({'names': ['John', 'Doe']}) print(user) #> first_name='John' last_name='Doe' user = User.model_validate({'names': ['John'], 'last_name': 'Doe'}) print(user) #> first_name='John' last_name='Doe' ``` ## Using alias generators You can use the `alias_generator` parameter of [`Config`][pydantic.config.ConfigDict.alias_generator] to specify a callable (or group of callables, via `AliasGenerator`) that will generate aliases for all fields in a model. This is useful if you want to use a consistent naming convention for all fields in a model, but do not want to specify the alias for each field individually. !!! note Pydantic offers three built-in alias generators that you can use out of the box: [`to_pascal`][pydantic.alias_generators.to_pascal]
[`to_camel`][pydantic.alias_generators.to_camel]
[`to_snake`][pydantic.alias_generators.to_snake]
### Using a callable Here's a basic example using a callable: ```python from pydantic import BaseModel, ConfigDict class Tree(BaseModel): model_config = ConfigDict( alias_generator=lambda field_name: field_name.upper() ) age: int height: float kind: str t = Tree.model_validate({'AGE': 12, 'HEIGHT': 1.2, 'KIND': 'oak'}) print(t.model_dump(by_alias=True)) #> {'AGE': 12, 'HEIGHT': 1.2, 'KIND': 'oak'} ``` ### Using an `AliasGenerator` ??? api "API Documentation" [`pydantic.aliases.AliasGenerator`][pydantic.aliases.AliasGenerator]
`AliasGenerator` is a class that allows you to specify multiple alias generators for a model. You can use an `AliasGenerator` to specify different alias generators for validation and serialization. This is particularly useful if you need to use different naming conventions for loading and saving data, but you don't want to specify the validation and serialization aliases for each field individually. For example: ```python from pydantic import AliasGenerator, BaseModel, ConfigDict class Tree(BaseModel): model_config = ConfigDict( alias_generator=AliasGenerator( validation_alias=lambda field_name: field_name.upper(), serialization_alias=lambda field_name: field_name.title(), ) ) age: int height: float kind: str t = Tree.model_validate({'AGE': 12, 'HEIGHT': 1.2, 'KIND': 'oak'}) print(t.model_dump(by_alias=True)) #> {'Age': 12, 'Height': 1.2, 'Kind': 'oak'} ``` ## Alias Precedence If you specify an `alias` on the [`Field`][pydantic.fields.Field], it will take precedence over the generated alias by default: ```python from pydantic import BaseModel, ConfigDict, Field def to_camel(string: str) -> str: return ''.join(word.capitalize() for word in string.split('_')) class Voice(BaseModel): model_config = ConfigDict(alias_generator=to_camel) name: str language_code: str = Field(alias='lang') voice = Voice(Name='Filiz', lang='tr-TR') print(voice.language_code) #> tr-TR print(voice.model_dump(by_alias=True)) #> {'Name': 'Filiz', 'lang': 'tr-TR'} ``` ### Alias Priority You may set `alias_priority` on a field to change this behavior: * `alias_priority=2` the alias will *not* be overridden by the alias generator. * `alias_priority=1` the alias *will* be overridden by the alias generator. * `alias_priority` not set: * alias is set: the alias will *not* be overridden by the alias generator. * alias is not set: the alias *will* be overridden by the alias generator. The same precedence applies to `validation_alias` and `serialization_alias`. See more about the different field aliases under [field aliases](../concepts/fields.md#field-aliases). ## Alias Configuration You can use [`ConfigDict`](./config.md) settings or runtime validation/serialization settings to control whether or not aliases are used. ### `ConfigDict` Settings You can use [configuration settings](./config.md) to control, at the model level, whether or not aliases are used for validation and serialization. If you would like to control this behavior for nested models/surpassing the config-model boundary, use [runtime settings](#runtime-settings). #### Validation When validating data, you can enable population of attributes by attribute name, alias, or both. **By default**, Pydantic uses aliases for validation. Further configuration is available via: * [`ConfigDict.validate_by_alias`][pydantic.config.ConfigDict.validate_by_alias]: `True` by default * [`ConfigDict.validate_by_name`][pydantic.config.ConfigDict.validate_by_name]: `False` by default === "`validate_by_alias`" ```python from pydantic import BaseModel, ConfigDict, Field class Model(BaseModel): my_field: str = Field(validation_alias='my_alias') model_config = ConfigDict(validate_by_alias=True, validate_by_name=False) print(repr(Model(my_alias='foo'))) # (1)! #> Model(my_field='foo') ``` 1. The alias `my_alias` is used for validation. === "`validate_by_name`" ```python from pydantic import BaseModel, ConfigDict, Field class Model(BaseModel): my_field: str = Field(validation_alias='my_alias') model_config = ConfigDict(validate_by_alias=False, validate_by_name=True) print(repr(Model(my_field='foo'))) # (1)! #> Model(my_field='foo') ``` 1. the attribute identifier `my_field` is used for validation. === "`validate_by_alias` and `validate_by_name`" ```python from pydantic import BaseModel, ConfigDict, Field class Model(BaseModel): my_field: str = Field(validation_alias='my_alias') model_config = ConfigDict(validate_by_alias=True, validate_by_name=True) print(repr(Model(my_alias='foo'))) # (1)! #> Model(my_field='foo') print(repr(Model(my_field='foo'))) # (2)! #> Model(my_field='foo') ``` 1. The alias `my_alias` is used for validation. 2. the attribute identifier `my_field` is used for validation. !!! warning You cannot set both `validate_by_alias` and `validate_by_name` to `False`. A [user error](../errors/usage_errors.md#validate-by-alias-and-name-false) is raised in this case. #### Serialization When serializing data, you can enable serialization by alias, which is disabled by default. See the [`ConfigDict.serialize_by_alias`][pydantic.config.ConfigDict.serialize_by_alias] API documentation for more details. ```python from pydantic import BaseModel, ConfigDict, Field class Model(BaseModel): my_field: str = Field(serialization_alias='my_alias') model_config = ConfigDict(serialize_by_alias=True) m = Model(my_field='foo') print(m.model_dump()) # (1)! #> {'my_alias': 'foo'} ``` 1. The alias `my_alias` is used for serialization. !!! note The fact that serialization by alias is disabled by default is notably inconsistent with the default for validation (where aliases are used by default). We anticipate changing this default in V3. ### Runtime Settings You can use runtime alias flags to control alias use for validation and serialization on a per-call basis. If you would like to control this behavior on a model level, use [`ConfigDict` settings](#configdict-settings). #### Validation When validating data, you can enable population of attributes by attribute name, alias, or both. The `by_alias` and `by_name` flags are available on the [`model_validate()`][pydantic.main.BaseModel.model_validate], [`model_validate_json()`][pydantic.main.BaseModel.model_validate_json], and [`model_validate_strings()`][pydantic.main.BaseModel.model_validate_strings] methods, as well as the [`TypeAdapter`][pydantic.type_adapter.TypeAdapter] validation methods. By default: * `by_alias` is `True` * `by_name` is `False` === "`by_alias`" ```python from pydantic import BaseModel, Field class Model(BaseModel): my_field: str = Field(validation_alias='my_alias') m = Model.model_validate( {'my_alias': 'foo'}, # (1)! by_alias=True, by_name=False, ) print(repr(m)) #> Model(my_field='foo') ``` 1. The alias `my_alias` is used for validation. === "`by_name`" ```python from pydantic import BaseModel, Field class Model(BaseModel): my_field: str = Field(validation_alias='my_alias') m = Model.model_validate( {'my_field': 'foo'}, by_alias=False, by_name=True # (1)! ) print(repr(m)) #> Model(my_field='foo') ``` 1. The attribute name `my_field` is used for validation. === "`validate_by_alias` and `validate_by_name`" ```python from pydantic import BaseModel, Field class Model(BaseModel): my_field: str = Field(validation_alias='my_alias') m = Model.model_validate( {'my_alias': 'foo'}, by_alias=True, by_name=True # (1)! ) print(repr(m)) #> Model(my_field='foo') m = Model.model_validate( {'my_field': 'foo'}, by_alias=True, by_name=True # (2)! ) print(repr(m)) #> Model(my_field='foo') ``` 1. The alias `my_alias` is used for validation. 2. The attribute name `my_field` is used for validation. !!! warning You cannot set both `by_alias` and `by_name` to `False`. A [user error](../errors/usage_errors.md#validate-by-alias-and-name-false) is raised in this case. #### Serialization When serializing data, you can enable serialization by alias via the `by_alias` flag which is available on the [`model_dump()`][pydantic.main.BaseModel.model_dump] and [`model_dump_json()`][pydantic.main.BaseModel.model_dump_json] methods, as well as the [`TypeAdapter`][pydantic.type_adapter.TypeAdapter] ones. By default, `by_alias` is `False`. ```py from pydantic import BaseModel, Field class Model(BaseModel): my_field: str = Field(serialization_alias='my_alias') m = Model(my_field='foo') print(m.model_dump(by_alias=True)) # (1)! #> {'my_alias': 'foo'} ``` 1. The alias `my_alias` is used for serialization. !!! note The fact that serialization by alias is disabled by default is notably inconsistent with the default for validation (where aliases are used by default). We anticipate changing this default in V3. pydantic-pydantic-e28e879/docs/concepts/config.md000066400000000000000000000155331526274674700221030ustar00rootroot00000000000000The behaviour of Pydantic can be controlled via a variety of configuration values, documented on the [`ConfigDict`][pydantic.ConfigDict] class. This page describes how configuration can be specified for Pydantic's supported types. ## Configuration on Pydantic models On Pydantic models, configuration can be specified in two ways: * Using the [`model_config`][pydantic.BaseModel.model_config] class attribute: ```python from pydantic import BaseModel, ConfigDict, ValidationError class Model(BaseModel): model_config = ConfigDict(str_max_length=5) # (1)! v: str try: m = Model(v='abcdef') except ValidationError as e: print(e) """ 1 validation error for Model v String should have at most 5 characters [type=string_too_long, input_value='abcdef', input_type=str] """ ``` 1. A plain dictionary (i.e. `{'str_max_length': 5}`) can also be used. !!! note In Pydantic V1, the `Config` class was used. This is still supported, but **deprecated**. * Using class arguments: ```python from pydantic import BaseModel class Model(BaseModel, frozen=True): a: str ``` Unlike the [`model_config`][pydantic.BaseModel.model_config] class attribute, static type checkers will recognize class arguments. For `frozen`, any instance mutation will be flagged as a type checking error. ## Configuration on Pydantic dataclasses [Pydantic dataclasses](./dataclasses.md) also support configuration (read more in the [dedicated section](./dataclasses.md#dataclass-config)). ```python from pydantic import ConfigDict, ValidationError from pydantic.dataclasses import dataclass @dataclass(config=ConfigDict(str_max_length=10, validate_assignment=True)) class User: name: str user = User(name='John Doe') try: user.name = 'x' * 20 except ValidationError as e: print(e) """ 1 validation error for User name String should have at most 10 characters [type=string_too_long, input_value='xxxxxxxxxxxxxxxxxxxx', input_type=str] """ ``` ## Configuration on `TypeAdapter` [Type adapters](./type_adapter.md) (using the [`TypeAdapter`][pydantic.TypeAdapter] class) support configuration, by providing the `config` argument. ```python from pydantic import ConfigDict, TypeAdapter ta = TypeAdapter(list[str], config=ConfigDict(coerce_numbers_to_str=True)) print(ta.validate_python([1, 2])) #> ['1', '2'] ``` Configuration can't be provided if the type adapter directly wraps a type that support it, and a [usage error](../errors/usage_errors.md) is raised in this case. The [configuration propagation](#configuration-propagation) rules also apply. ## Configuration on other supported types If you are using [standard library dataclasses][dataclasses] or [`TypedDict`][typing.TypedDict] classes, the configuration can be set in two ways: * Using the `__pydantic_config__` class attribute: ```python from dataclasses import dataclass from pydantic import ConfigDict @dataclass class User: __pydantic_config__ = ConfigDict(strict=True) id: int name: str = 'John Doe' ``` * Using the [`@with_config`][pydantic.config.with_config] decorator (this avoids static type checking errors with [`TypedDict`][typing.TypedDict]): ```python from typing_extensions import TypedDict from pydantic import ConfigDict, with_config @with_config(ConfigDict(str_to_lower=True)) class Model(TypedDict): x: str ``` ## Configuration on the `@validate_call` decorator The [`@validate_call`](./validation_decorator.md) also supports setting custom configuration. See the [dedicated section](./validation_decorator.md#custom-configuration) for more details. ## Change behaviour globally If you wish to change the behaviour of Pydantic globally, you can create your own custom parent class with a custom configuration, as the configuration is inherited: ```python from pydantic import BaseModel, ConfigDict class Parent(BaseModel): model_config = ConfigDict(extra='allow') class Model(Parent): x: str m = Model(x='foo', y='bar') print(m.model_dump()) #> {'x': 'foo', 'y': 'bar'} ``` If you provide configuration to the subclasses, it will be *merged* with the parent configuration: ```python from pydantic import BaseModel, ConfigDict class Parent(BaseModel): model_config = ConfigDict(extra='allow', str_to_lower=False) class Model(Parent): model_config = ConfigDict(str_to_lower=True) x: str m = Model(x='FOO', y='bar') print(m.model_dump()) #> {'x': 'foo', 'y': 'bar'} print(Model.model_config) #> {'extra': 'allow', 'str_to_lower': True} ``` !!! warning If your model inherits from multiple bases, Pydantic currently *doesn't* follow the [MRO]. For more details, see [this issue](https://github.com/pydantic/pydantic/issues/9992). [MRO]: https://docs.python.org/3/glossary.html#term-method-resolution-order ## Plugin settings The [`plugin_settings`][pydantic.ConfigDict.plugin_settings] configuration value passes options to Pydantic plugins (code that hooks into validation, usually for tooling that observes it rather than for changing validation behaviour). Its value is a dictionary keyed by plugin name, so a given plugin reads only its own entry. The main plugin in use today is [Logfire](../integrations/logfire.md)'s, which records validations for observability. You can tune what it records per model, for instance recording only failures for one particular model: ```python from pydantic import BaseModel class User(BaseModel, plugin_settings={'logfire': {'record': 'failure'}}): name: str email: str ``` ## Configuration propagation When using types that support configuration as field annotations, configuration may not be propagated: * For Pydantic models and dataclasses, configuration will *not* be propagated, each model has its own "configuration boundary": ```python from pydantic import BaseModel, ConfigDict class User(BaseModel): name: str class Parent(BaseModel): user: User model_config = ConfigDict(str_to_lower=True) print(Parent(user={'name': 'JOHN'})) #> user=User(name='JOHN') ``` * For stdlib types (dataclasses and typed dictionaries), configuration will be propagated, unless the type has its own configuration set: ```python from dataclasses import dataclass from pydantic import BaseModel, ConfigDict, with_config @dataclass class UserWithoutConfig: name: str @dataclass @with_config(str_to_lower=False) class UserWithConfig: name: str class Parent(BaseModel): user_1: UserWithoutConfig user_2: UserWithConfig model_config = ConfigDict(str_to_lower=True) print(Parent(user_1={'name': 'JOHN'}, user_2={'name': 'JOHN'})) #> user_1=UserWithoutConfig(name='john') user_2=UserWithConfig(name='JOHN') ``` pydantic-pydantic-e28e879/docs/concepts/conversion_table.md000066400000000000000000000007421526274674700241660ustar00rootroot00000000000000The following table provides details on how Pydantic converts data during validation in both strict and lax modes. The "Strict" column contains checkmarks for type conversions that are allowed when validating in [Strict Mode](strict_mode.md). === "All" {{ conversion_table_all }} === "JSON" {{ conversion_table_json }} === "JSON - Strict" {{ conversion_table_json_strict }} === "Python" {{ conversion_table_python }} === "Python - Strict" {{ conversion_table_python_strict }} pydantic-pydantic-e28e879/docs/concepts/dataclasses.md000066400000000000000000000313541526274674700231240ustar00rootroot00000000000000??? api "API Documentation" [`@pydantic.dataclasses.dataclass`][pydantic.dataclasses.dataclass]
If you don't want to use Pydantic's [`BaseModel`][pydantic.BaseModel] you can instead get the same data validation on standard [dataclasses][dataclasses]. ```python from datetime import datetime from pydantic.dataclasses import dataclass @dataclass class User: id: int name: str = 'John Doe' signup_ts: datetime | None = None user = User(id='42', signup_ts='2032-06-21T12:00') print(user) """ User(id=42, name='John Doe', signup_ts=datetime.datetime(2032, 6, 21, 12, 0)) """ ``` !!! note Keep in mind that Pydantic dataclasses are **not** a replacement for [Pydantic models](../concepts/models.md). They provide a similar functionality to stdlib dataclasses with the addition of Pydantic validation. There are cases where using Pydantic models is the better choice. For more information and discussion see [pydantic/pydantic#710](https://github.com/pydantic/pydantic/issues/710). Similarities between Pydantic dataclasses and models include support for: * [Configuration](#dataclass-config) support (note that dataclasses doesn't support the `model_config` attribute as with Pydantic models) * [Nested](./models.md#nested-models) classes * Arguments used to instantiate the dataclass are also [copied](./models.md#attribute-copies). Some differences between Pydantic dataclasses and models include: * The [various methods](./models.md#model-methods-and-properties) to validate, dump and generate a JSON Schema aren't available. Instead, you can wrap the dataclass with a [`TypeAdapter`][pydantic.type_adapter.TypeAdapter] and make use of its methods: ```python from pydantic import TypeAdapter from pydantic.dataclasses import dataclass @dataclass class Foo: f: int foo = Foo(f=1) TypeAdapter(Foo).dump_python(foo) #> {'f': 1} TypeAdapter(Foo).validate_python({'f': 1}) #> Foo(f=1) ``` * Validators (see the [dedicated section](#validators-and-initialization-hooks)). * The [`extra`][pydantic.ConfigDict.extra] configuration behavior: * Extra data is not included in [serialization](./serialization.md#serializing-data). * There is no way to customize validation of extra values [using the `__pydantic_extra__` attribute](./models.md#extra-data). * Generic dataclasses are supported, but as with other standard library generic types, using a parameterized dataclass won't work as expected: === "Python 3.10 and above" ```python {upgrade="skip"} from typing import Generic, TypeVar from pydantic.dataclasses import dataclass T = TypeVar('T') @dataclass class Foo(Generic[T]): f: T Foo[int](f='not_an_int') # (1)! #> Foo(f='not_an_int') ``` 1. Unlike [generic Pydantic models](./models.md#generic-models), `Foo[int]` is a [generic alias][types-genericalias] and not a proper type object. As such, Pydantic currently treats `Foo[int]` the same as `Foo[Any]`, without performing validation for `f`. === "Python 3.12 and above (new syntax)" ```python {requires="3.12" upgrade="skip" lint="skip"} from pydantic.dataclasses import dataclass @dataclass class Foo[T]: f: T Foo[int](f='not_an_int') # (1)! #> Foo(f='not_an_int') ``` 1. Unlike [generic Pydantic models](./models.md#generic-models), `Foo[int]` is a [generic alias][types-genericalias] and not a proper type object. As such, Pydantic currently performs no validation. Instead, you can wrap the `Foo[int]` parameterized class with a [`TypeAdapter`][pydantic.type_adapter.TypeAdapter]. You can use both the Pydantic's [`Field()`][pydantic.Field] and the stdlib's [`field()`][dataclasses.field] functions: ```python import dataclasses from pydantic import Field from pydantic.dataclasses import dataclass @dataclass class User: id: int name: str = 'John Doe' friends: list[int] = dataclasses.field(default_factory=lambda: [0]) age: int | None = dataclasses.field( default=None, metadata={'title': 'The age of the user', 'description': 'do not lie!'}, ) height: int | None = Field( default=None, title='The height in cm', ge=50, le=300 ) user = User(id='42', height='250') print(user) #> User(id=42, name='John Doe', friends=[0], age=None, height=250) ``` The Pydantic [`@dataclass`][pydantic.dataclasses.dataclass] decorator accepts the same arguments as the standard decorator, with the addition of a `config` parameter. ## Dataclass config If you want to modify the configuration like you would with a [`BaseModel`][pydantic.BaseModel], you have two options: * Use the `config` parameter of the decorator. * Define the configuration with the `__pydantic_config__` attribute. ```python from pydantic import ConfigDict from pydantic.dataclasses import dataclass # Option 1 -- using the decorator argument: @dataclass(config=ConfigDict(validate_assignment=True)) # (1)! class MyDataclass1: a: int # Option 2 -- using an attribute: @dataclass class MyDataclass2: a: int __pydantic_config__ = ConfigDict(validate_assignment=True) ``` 1. You can read more about `validate_assignment` in the [API reference][pydantic.config.ConfigDict.validate_assignment]. ## Rebuilding dataclass schema The [`rebuild_dataclass()`][pydantic.dataclasses.rebuild_dataclass] function can be used to rebuild the core schema of the dataclass. See the [rebuilding model schema](./models.md#rebuilding-model-schema) section for more details. ## Stdlib dataclasses and Pydantic dataclasses ### Inherit from stdlib dataclasses Stdlib dataclasses (nested or not) can also be inherited and Pydantic will automatically validate all the inherited fields. ```python import dataclasses import pydantic @dataclasses.dataclass class Z: z: int @dataclasses.dataclass class Y(Z): y: int = 0 @pydantic.dataclasses.dataclass class X(Y): x: int = 0 foo = X(x=b'1', y='2', z='3') print(foo) #> X(z=3, y=2, x=1) try: X(z='pika') except pydantic.ValidationError as e: print(e) """ 1 validation error for X z Input should be a valid integer, unable to parse string as an integer [type=int_parsing, input_value='pika', input_type=str] """ ``` Because a Pydantic dataclass validates its inputs just like a model, the same observability applies: if you use [Logfire](../integrations/logfire.md), validations of Pydantic dataclasses are [recorded alongside model validations](../errors/troubleshooting.md), with rejected values in their structured errors. The decorator can also be applied directly on a stdlib dataclass, in which case a new subclass will be created: ```python import dataclasses import pydantic @dataclasses.dataclass class A: a: int PydanticA = pydantic.dataclasses.dataclass(A) print(PydanticA(a='1')) #> A(a=1) ``` ### Usage of stdlib dataclasses with `BaseModel` When a standard library dataclass is used within a Pydantic model, a Pydantic dataclass or a [`TypeAdapter`][pydantic.TypeAdapter], validation will be applied (and the [configuration](#dataclass-config) stays the same). This means that using a stdlib or a Pydantic dataclass as a field annotation is functionally equivalent. ```python import dataclasses from pydantic import BaseModel, ConfigDict, ValidationError @dataclasses.dataclass(frozen=True) class User: name: str class Foo(BaseModel): # Required so that pydantic revalidates the model attributes: model_config = ConfigDict(revalidate_instances='always') user: User | None = None # nothing is validated as expected: user = User(name=['not', 'a', 'string']) print(user) #> User(name=['not', 'a', 'string']) try: Foo(user=user) except ValidationError as e: print(e) """ 1 validation error for Foo user.name Input should be a valid string [type=string_type, input_value=['not', 'a', 'string'], input_type=list] """ foo = Foo(user=User(name='pika')) try: foo.user.name = 'bulbi' except dataclasses.FrozenInstanceError as e: print(e) #> cannot assign to field 'name' ``` ### Using custom types As said above, validation is applied on standard library dataclasses. If you make use of custom types, you will get an error when trying to refer to the dataclass. To circumvent the issue, you can set the [`arbitrary_types_allowed`][pydantic.ConfigDict.arbitrary_types_allowed] configuration value on the dataclass: ```python import dataclasses from pydantic import BaseModel, ConfigDict from pydantic.errors import PydanticSchemaGenerationError class ArbitraryType: def __init__(self, value): self.value = value def __repr__(self): return f'ArbitraryType(value={self.value!r})' @dataclasses.dataclass class DC: a: ArbitraryType b: str # valid as it is a stdlib dataclass without validation: my_dc = DC(a=ArbitraryType(value=3), b='qwe') try: class Model(BaseModel): dc: DC other: str # invalid as dc is now validated with pydantic, and ArbitraryType is not a known type Model(dc=my_dc, other='other') except PydanticSchemaGenerationError as e: print(e.message) """ Unable to generate pydantic-core schema for . Set `arbitrary_types_allowed=True` in the model_config to ignore this error or implement `__get_pydantic_core_schema__` on your type to fully support it. If you got this error by calling handler() within `__get_pydantic_core_schema__` then you likely need to call `handler.generate_schema()` since we do not call `__get_pydantic_core_schema__` on `` otherwise to avoid infinite recursion. """ # valid as we set arbitrary_types_allowed=True, and that config pushes down to the nested vanilla dataclass class Model(BaseModel): model_config = ConfigDict(arbitrary_types_allowed=True) dc: DC other: str m = Model(dc=my_dc, other='other') print(repr(m)) #> Model(dc=DC(a=ArbitraryType(value=3), b='qwe'), other='other') ``` ### Checking if a dataclass is a Pydantic dataclass Pydantic dataclasses are still considered dataclasses, so using [`dataclasses.is_dataclass()`][dataclasses.is_dataclass] will return `True`. To check if a type is specifically a Pydantic dataclass you can use the [`is_pydantic_dataclass()`][pydantic.dataclasses.is_pydantic_dataclass] function. ```python import dataclasses import pydantic @dataclasses.dataclass class StdLibDataclass: id: int PydanticDataclass = pydantic.dataclasses.dataclass(StdLibDataclass) print(dataclasses.is_dataclass(StdLibDataclass)) #> True print(pydantic.dataclasses.is_pydantic_dataclass(StdLibDataclass)) #> False print(dataclasses.is_dataclass(PydanticDataclass)) #> True print(pydantic.dataclasses.is_pydantic_dataclass(PydanticDataclass)) #> True ``` ## Validators and initialization hooks Validators also work with Pydantic dataclasses: ```python from pydantic import field_validator from pydantic.dataclasses import dataclass @dataclass class DemoDataclass: product_id: str # should be a five-digit string, may have leading zeros @field_validator('product_id', mode='before') @classmethod def convert_int_serial(cls, v): if isinstance(v, int): v = str(v).zfill(5) return v print(DemoDataclass(product_id='01234')) #> DemoDataclass(product_id='01234') print(DemoDataclass(product_id=2468)) #> DemoDataclass(product_id='02468') ``` The dataclass [`__post_init__()`][dataclasses.__post_init__] method is also supported, and will be called between the calls to *before* and *after* model validators. ??? example ```python from pydantic_core import ArgsKwargs from typing_extensions import Self from pydantic import model_validator from pydantic.dataclasses import dataclass @dataclass class Birth: year: int month: int day: int @dataclass class User: birth: Birth @model_validator(mode='before') @classmethod def before(cls, values: ArgsKwargs) -> ArgsKwargs: print(f'First: {values}') # (1)! """ First: ArgsKwargs((), {'birth': {'year': 1995, 'month': 3, 'day': 2}}) """ return values @model_validator(mode='after') def after(self) -> Self: print(f'Third: {self}') #> Third: User(birth=Birth(year=1995, month=3, day=2)) return self def __post_init__(self): print(f'Second: {self.birth}') #> Second: Birth(year=1995, month=3, day=2) user = User(**{'birth': {'year': 1995, 'month': 3, 'day': 2}}) ``` 1. Unlike Pydantic models, the `values` parameter is of type [`ArgsKwargs`][pydantic_core.ArgsKwargs] pydantic-pydantic-e28e879/docs/concepts/experimental.md000066400000000000000000000453271526274674700233370ustar00rootroot00000000000000# Experimental Features In this section you will find documentation for new, experimental features in Pydantic. These features are subject to change or removal, and we are looking for feedback and suggestions before making them a permanent part of Pydantic. See our [Version Policy](../version-policy.md#experimental-features) for more information on experimental features. ## Feedback We welcome feedback on experimental features! Please open an issue on the [Pydantic GitHub repository](https://github.com/pydantic/pydantic/issues/new/choose) to share your thoughts, requests, or suggestions. We also encourage you to read through existing feedback and add your thoughts to existing issues. ## Pipeline API Pydantic v2.8.0 introduced an experimental "pipeline" API that allows composing of parsing (validation), constraints and transformations in a more type-safe manner than existing APIs. This API is subject to change or removal, we are looking for feedback and suggestions before making it a permanent part of Pydantic. ??? api "API Documentation" [`pydantic.experimental.pipeline`][pydantic.experimental.pipeline]
Generally, the pipeline API is used to define a sequence of steps to apply to incoming data during validation. The pipeline API is designed to be more type-safe and composable than the existing Pydantic API. Each step in the pipeline can be: * A validation step that runs pydantic validation on the provided type * A transformation step that modifies the data * A constraint step that checks the data against a condition * A predicate step that checks the data against a condition and raises an error if it returns `False` Note that the following example attempts to be exhaustive at the cost of complexity: if you find yourself writing this many transformations in type annotations you may want to consider having a `UserIn` and `UserOut` model (example below) or similar where you make the transformations via idiomatic plain Python code. These APIs are meant for situations where the code savings are significant and the added complexity is relatively small. ```python from __future__ import annotations from datetime import datetime from typing import Annotated from pydantic import BaseModel from pydantic.experimental.pipeline import validate_as class User(BaseModel): name: Annotated[str, validate_as(str).str_lower()] # (1)! age: Annotated[int, validate_as(int).gt(0)] # (2)! username: Annotated[str, validate_as(str).str_pattern(r'[a-z]+')] # (3)! password: Annotated[ str, validate_as(str) .transform(str.lower) .predicate(lambda x: x != 'password'), # (4)! ] favorite_number: Annotated[ # (5)! int, (validate_as(int) | validate_as(str).str_strip().validate_as(int)).gt( 0 ), ] friends: Annotated[list[User], validate_as(...).len(0, 100)] # (6)! bio: Annotated[ datetime, validate_as(int) .transform(lambda x: x / 1_000_000) .validate_as(...), # (7)! ] ``` 1. Lowercase a string. 2. Constrain an integer to be greater than zero. 3. Constrain a string to match a regex pattern. 4. You can also use the lower level transform, constrain and predicate methods. 5. Use the `|` or `&` operators to combine steps (like a logical OR or AND). 6. Calling `validate_as(...)` with `Ellipsis`, `...` as the first positional argument implies `validate_as()`. Use `validate_as(Any)` to accept any type. 7. You can call `validate_as()` before or after other steps to do pre or post processing. ### Mapping from `BeforeValidator`, `AfterValidator` and `WrapValidator` The `validate_as` method is a more type-safe way to define `BeforeValidator`, `AfterValidator` and `WrapValidator`: ```python from typing import Annotated from pydantic.experimental.pipeline import transform, validate_as # BeforeValidator Annotated[int, validate_as(str).str_strip().validate_as(...)] # (1)! # AfterValidator Annotated[int, transform(lambda x: x * 2)] # (2)! # WrapValidator Annotated[ int, validate_as(str) .str_strip() .validate_as(...) .transform(lambda x: x * 2), # (3)! ] ``` 1. Strip whitespace from a string before parsing it as an integer. 2. Multiply an integer by 2 after parsing it. 3. Strip whitespace from a string, validate it as an integer, then multiply it by 2. ### Alternative patterns There are many alternative patterns to use depending on the scenario. Just as an example, consider the `UserIn` and `UserOut` pattern mentioned above: ```python from __future__ import annotations from pydantic import BaseModel class UserIn(BaseModel): favorite_number: int | str class UserOut(BaseModel): favorite_number: int def my_api(user: UserIn) -> UserOut: favorite_number = user.favorite_number if isinstance(favorite_number, str): favorite_number = int(user.favorite_number.strip()) return UserOut(favorite_number=favorite_number) assert my_api(UserIn(favorite_number=' 1 ')).favorite_number == 1 ``` This example uses plain idiomatic Python code that may be easier to understand, type-check, etc. than the examples above. The approach you choose should really depend on your use case. You will have to compare verbosity, performance, ease of returning meaningful errors to your users, etc. to choose the right pattern. Just be mindful of abusing advanced patterns like the pipeline API just because you can. ## Partial Validation /// version-added | v2.10 /// Partial validation allows you to validate an incomplete JSON string, or a Python object representing incomplete input data. Partial validation is particularly helpful when processing the output of an LLM, where the model streams structured responses, and you may wish to begin validating the stream while you're still receiving data (e.g. to show partial data to users). Streaming pipelines like this can be fiddly to debug after the fact. If you run one in production, [Logfire](../integrations/logfire.md) can record each validation in the context of the surrounding request, which makes it easier to reconstruct how a given stream was handled. !!! warning Partial validation is an experimental feature and may change in future versions of Pydantic. The current implementation should be considered a proof of concept at this time and has a number of [limitations](#limitations-of-partial-validation). Partial validation can be enabled when using the three validation methods on `TypeAdapter`: [`TypeAdapter.validate_json()`][pydantic.TypeAdapter.validate_json], [`TypeAdapter.validate_python()`][pydantic.TypeAdapter.validate_python], and [`TypeAdapter.validate_strings()`][pydantic.TypeAdapter.validate_strings]. This allows you to parse and validation incomplete JSON, but also to validate Python objects created by parsing incomplete data of any format. The `experimental_allow_partial` flag can be passed to these methods to enable partial validation. It can take the following values (and is `False`, by default): * `False` or `'off'` - disable partial validation * `True` or `'on'` - enable partial validation, but don't support trailing strings * `'trailing-strings'` - enable partial validation and support trailing strings !!! info "`'trailing-strings'` mode" `'trailing-strings'` mode allows for trailing incomplete strings at the end of partial JSON to be included in the output. For example, if you're validating against the following model: ```python from typing import TypedDict class Model(TypedDict): a: str b: str ``` Then the following JSON input would be considered valid, despite the incomplete string at the end: ```json '{"a": "hello", "b": "wor' ``` And would be validated as: ```python {test="skip" lint="skip"} {'a': 'hello', 'b': 'wor'} ``` `experiment_allow_partial` in action: ```python from typing import Annotated from annotated_types import MinLen from typing_extensions import NotRequired, TypedDict from pydantic import TypeAdapter class Foobar(TypedDict): # (1)! a: int b: NotRequired[float] c: NotRequired[Annotated[str, MinLen(5)]] ta = TypeAdapter(list[Foobar]) v = ta.validate_json('[{"a": 1, "b"', experimental_allow_partial=True) # (2)! print(v) #> [{'a': 1}] v = ta.validate_json( '[{"a": 1, "b": 1.0, "c": "abcd', experimental_allow_partial=True # (3)! ) print(v) #> [{'a': 1, 'b': 1.0}] v = ta.validate_json( '[{"b": 1.0, "c": "abcde"', experimental_allow_partial=True # (4)! ) print(v) #> [] v = ta.validate_json( '[{"a": 1, "b": 1.0, "c": "abcde"},{"a": ', experimental_allow_partial=True ) print(v) #> [{'a': 1, 'b': 1.0, 'c': 'abcde'}] v = ta.validate_python([{'a': 1}], experimental_allow_partial=True) # (5)! print(v) #> [{'a': 1}] v = ta.validate_python( [{'a': 1, 'b': 1.0, 'c': 'abcd'}], experimental_allow_partial=True # (6)! ) print(v) #> [{'a': 1, 'b': 1.0}] v = ta.validate_json( '[{"a": 1, "b": 1.0, "c": "abcdefg', experimental_allow_partial='trailing-strings', # (7)! ) print(v) #> [{'a': 1, 'b': 1.0, 'c': 'abcdefg'}] ``` 1. The TypedDict `Foobar` has three field, but only `a` is required, that means that a valid instance of `Foobar` can be created even if the `b` and `c` fields are missing. 2. Parsing JSON, the input is valid JSON up to the point where the string is truncated. 3. In this case truncation of the input means the value of `c` (`abcd`) is invalid as input to `c` field, hence it's omitted. 4. The `a` field is required, so validation on the only item in the list fails and is dropped. 5. Partial validation also works with Python objects, it should have the same semantics as with JSON except of course you can't have a genuinely "incomplete" Python object. 6. The same as above but with a Python object, `c` is dropped as it's not required and failed validation. 7. The `trailing-strings` mode allows for incomplete strings at the end of partial JSON to be included in the output, in this case the input is valid JSON up to the point where the string is truncated, so the last string is included. ### How Partial Validation Works Partial validation follows the zen of Pydantic — it makes no guarantees about what the input data might have been, but it does guarantee to return a valid instance of the type you required, or raise a validation error. To do this, the `experimental_allow_partial` flag enables two pieces of behavior: #### 1. Partial JSON parsing The [jiter](https://github.com/pydantic/jiter) JSON parser used by Pydantic already supports parsing partial JSON, `experimental_allow_partial` is simply passed to jiter via the `allow_partial` argument. !!! note If you just want pure JSON parsing with support for partial JSON, you can use the [`jiter`](https://pypi.org/project/jiter/) Python library directly, or pass the `allow_partial` argument when calling [`pydantic_core.from_json`][pydantic_core.from_json]. #### 2. Ignore errors in the last element of the input {#2-ignore-errors-in-last} Only having access to part of the input data means errors can commonly occur in the last element of the input data. For example: * if a string has a constraint `MinLen(5)`, when you only see part of the input, validation might fail because part of the string is missing (e.g. `{"name": "Sam` instead of `{"name": "Samuel"}`) * if an `int` field has a constraint `Ge(10)`, when you only see part of the input, validation might fail because the number is too small (e.g. `1` instead of `10`) * if a `TypedDict` field has 3 required fields, but the partial input only has two of the fields, validation would fail because some field are missing * etc. etc. — there are lost more cases like this The point is that if you only see part of some valid input data, validation errors can often occur in the last element of a sequence or last value of mapping. To avoid these errors breaking partial validation, Pydantic will ignore ALL errors in the last element of the input data. ```python {title="Errors in last element ignored"} from typing import Annotated from annotated_types import MinLen from pydantic import BaseModel, TypeAdapter class MyModel(BaseModel): a: int b: Annotated[str, MinLen(5)] ta = TypeAdapter(list[MyModel]) v = ta.validate_json( '[{"a": 1, "b": "12345"}, {"a": 1,', experimental_allow_partial=True, ) print(v) #> [MyModel(a=1, b='12345')] ``` ### Limitations of Partial Validation #### TypeAdapter only You can only pass `experiment_allow_partial` to [`TypeAdapter`][pydantic.TypeAdapter] methods, it's not yet supported via other Pydantic entry points like [`BaseModel`][pydantic.BaseModel]. #### Types supported Right now only a subset of collection validators know how to handle partial validation: * `list` * `set` * `frozenset` * `dict` (as in `dict[X, Y]`) * `TypedDict` — only non-required fields may be missing, e.g. via [`NotRequired`][typing.NotRequired] or [`total=False`][typing.TypedDict.__total__]) While you can use `experimental_allow_partial` while validating against types that include other collection validators, those types will be validated "all or nothing", and partial validation will not work on more nested types. E.g. in the [above](#2-ignore-errors-in-last) example partial validation works although the second item in the list is dropped completely since `BaseModel` doesn't (yet) support partial validation. But partial validation won't work at all in the follow example because `BaseModel` doesn't support partial validation so it doesn't forward the `allow_partial` instruction down to the list validator in `b`: ```python from typing import Annotated from annotated_types import MinLen from pydantic import BaseModel, TypeAdapter, ValidationError class MyModel(BaseModel): a: int = 1 b: list[Annotated[str, MinLen(5)]] = [] # (1)! ta = TypeAdapter(MyModel) try: v = ta.validate_json( '{"a": 1, "b": ["12345", "12"', experimental_allow_partial=True ) except ValidationError as e: print(e) """ 1 validation error for MyModel b.1 String should have at least 5 characters [type=string_too_short, input_value='12', input_type=str] """ ``` 1. The list validator for `b` doesn't get the `allow_partial` instruction passed down to it by the model validator so it doesn't know to ignore errors in the last element of the input. #### Some invalid but complete JSON will be accepted The way [jiter](https://github.com/pydantic/jiter) (the JSON parser used by Pydantic) works means it's currently not possible to differentiate between complete JSON like `{"a": 1, "b": "12"}` and incomplete JSON like `{"a": 1, "b": "12`. This means that some invalid JSON will be accepted by Pydantic when using `experimental_allow_partial`, e.g.: ```python from typing import Annotated from annotated_types import MinLen from typing_extensions import TypedDict from pydantic import TypeAdapter class Foobar(TypedDict, total=False): a: int b: Annotated[str, MinLen(5)] ta = TypeAdapter(Foobar) v = ta.validate_json( '{"a": 1, "b": "12', experimental_allow_partial=True # (1)! ) print(v) #> {'a': 1} v = ta.validate_json( '{"a": 1, "b": "12"}', experimental_allow_partial=True # (2)! ) print(v) #> {'a': 1} ``` 1. This will pass validation as expected although the last field will be omitted as it failed validation. 2. This will also pass validation since the binary representation of the JSON data passed to pydantic-core is indistinguishable from the previous case. #### Any error in the last field of the input will be ignored As described [above](#2-ignore-errors-in-last), many errors can result from truncating the input. Rather than trying to specifically ignore errors that could result from truncation, Pydantic ignores all errors in the last element of the input in partial validation mode. This means clearly invalid data will pass validation if the error is in the last field of the input: ```python from typing import Annotated from annotated_types import Ge from pydantic import TypeAdapter ta = TypeAdapter(list[Annotated[int, Ge(10)]]) v = ta.validate_python([20, 30, 4], experimental_allow_partial=True) # (1)! print(v) #> [20, 30] ta = TypeAdapter(list[int]) v = ta.validate_python([1, 2, 'wrong'], experimental_allow_partial=True) # (2)! print(v) #> [1, 2] ``` 1. As you would expect, this will pass validation since Pydantic correctly ignores the error in the (truncated) last item. 2. This will also pass validation since the error in the last item is ignored. ## Validation of a callable's arguments Pydantic provides the [`@validate_call`][pydantic.validate_call] decorator to perform validation on the provided arguments (and additionally return type) of a callable. However, it only allows arguments to be provided by actually calling the decorated callable. In some situations, you may want to just *validate* the arguments, such as when loading from other data sources such as JSON data. For this reason, the experimental [`generate_arguments_schema()`][pydantic.experimental.arguments_schema.generate_arguments_schema] function can be used to construct a core schema, which can later be used with a [`SchemaValidator`][pydantic_core.SchemaValidator]. ```python from pydantic_core import SchemaValidator from pydantic.experimental.arguments_schema import generate_arguments_schema def func(p: bool, *args: str, **kwargs: int) -> None: ... arguments_schema = generate_arguments_schema(func=func) val = SchemaValidator(arguments_schema, config={'coerce_numbers_to_str': True}) args, kwargs = val.validate_json( '{"p": true, "args": ["arg1", 1], "kwargs": {"extra": 1}}' ) print(args, kwargs) # (1)! #> (True, 'arg1', '1') {'extra': 1} ``` 1. If you want the validated arguments as a dictionary, you can use the [`Signature.bind()`][inspect.Signature.bind] method: ```python {test="skip" lint="skip"} from inspect import signature signature(func).bind(*args, **kwargs).arguments #> {'p': True, 'args': ('arg1', '1'), 'kwargs': {'extra': 1}} ``` !!! note Unlike [`@validate_call`][pydantic.validate_call], this core schema will only validate the provided arguments; the underlying callable will *not* be called. Additionally, you can ignore specific parameters by providing a callback, which is called for every parameter: ```python from typing import Any from pydantic_core import SchemaValidator from pydantic.experimental.arguments_schema import generate_arguments_schema def func(p: bool, *args: str, **kwargs: int) -> None: ... def skip_first_parameter(index: int, name: str, annotation: Any) -> Any: if index == 0: return 'skip' arguments_schema = generate_arguments_schema( func=func, parameters_callback=skip_first_parameter, ) val = SchemaValidator(arguments_schema) args, kwargs = val.validate_json('{"args": ["arg1"], "kwargs": {"extra": 1}}') print(args, kwargs) #> ('arg1',) {'extra': 1} ``` pydantic-pydantic-e28e879/docs/concepts/fields.md000066400000000000000000000665201526274674700221060ustar00rootroot00000000000000??? api "API Documentation" [`pydantic.fields.Field`][pydantic.fields.Field]
In this section, we will go through the available mechanisms to customize Pydantic model fields: [default values](#default-values), [JSON Schema metadata](#customizing-json-schema), [constraints](#field-constraints), etc. To do so, the [`Field()`][pydantic.fields.Field] function is used a lot, and behaves the same way as the standard library [`field()`][dataclasses.field] function for dataclasses – by assigning to the annotated attribute: ```python from pydantic import BaseModel, Field class Model(BaseModel): name: str = Field(frozen=True) ``` !!! note Even though `name` is assigned a value, it is still required and has no default value. If you want to emphasize on the fact that a value must be provided, you can use the [ellipsis][Ellipsis]: ```python {lint="skip" test="skip"} class Model(BaseModel): name: str = Field(..., frozen=True) ``` However, its usage is discouraged as it doesn't play well with static type checkers. ## The annotated pattern To apply constraints or attach [`Field()`][pydantic.fields.Field] functions to a model field, Pydantic also supports the [`Annotated`][typing.Annotated] typing construct to attach metadata to an annotation: ```python from typing import Annotated from pydantic import BaseModel, Field, WithJsonSchema class Model(BaseModel): name: Annotated[str, Field(strict=True), WithJsonSchema({'extra': 'data'})] ``` As far as static type checkers are concerned, `name` is still typed as `str`, but Pydantic leverages the available metadata to add validation logic, type constraints, etc. Using this pattern has some advantages: * Using the `f: = Field(...)` form can be confusing and might trick users into thinking `f` has a default value, while in reality it is still required. * You can provide an arbitrary amount of metadata elements for a field. As shown in the example above, the [`Field()`][pydantic.fields.Field] function only supports a limited set of constraints/metadata, and you may have to use different Pydantic utilities such as [`WithJsonSchema`][pydantic.WithJsonSchema] in some cases. * Types can be made reusable (see the documentation on [custom types](./types.md#using-the-annotated-pattern) using this pattern). However, note that certain arguments to the [`Field()`][pydantic.fields.Field] function (namely, `default`, `default_factory`, and `alias`) are taken into account by static type checkers to synthesize a correct `__init__()` method. The annotated pattern is *not* understood by them, so you should use the normal assignment form instead. !!! tip The annotated pattern can also be used to add metadata to specific parts of the type. For instance, [validation constraints](#field-constraints) can be added this way: ```python from typing import Annotated from pydantic import BaseModel, Field class Model(BaseModel): int_list: list[Annotated[int, Field(gt=0)]] # Valid: [1, 3] # Invalid: [-1, 2] ``` Be careful not mixing *field* and *type* metadata: ```python {test="skip" lint="skip"} class Model(BaseModel): field_bad: Annotated[int, Field(deprecated=True)] | None = None # (1)! field_ok: Annotated[int | None, Field(deprecated=True)] = None # (2)! ``` 1. The [`Field()`][pydantic.fields.Field] function is applied to `int` type, hence the `deprecated` flag won't have any effect. While this may be confusing given that the name of the [`Field()`][pydantic.fields.Field] function would imply it should apply to the field, the API was designed when this function was the only way to provide metadata. You can alternatively make use of the [`annotated_types`](https://github.com/annotated-types/annotated-types) library which is now supported by Pydantic. 2. The [`Field()`][pydantic.fields.Field] function is applied to the "top-level" union type, hence the `deprecated` flag will be applied to the field. ## Inspecting model fields The fields of a model can be inspected using the [`model_fields`][pydantic.main.BaseModel.model_fields] class attribute (or the `__pydantic_fields__` attribute for [Pydantic dataclasses](./dataclasses.md)). It is a mapping of field names to their definition (represented as [`FieldInfo`][pydantic.fields.FieldInfo] instances). ```python from typing import Annotated from pydantic import BaseModel, Field, WithJsonSchema class Model(BaseModel): a: Annotated[ int, Field(gt=1), WithJsonSchema({'extra': 'data'}), Field(alias='b') ] = 1 field_info = Model.model_fields['a'] print(field_info.annotation) #> print(field_info.alias) #> b print(field_info.metadata) #> [Gt(gt=1), WithJsonSchema(json_schema={'extra': 'data'}, mode=None)] ``` /// deprecated-removed | v2.11 v3 [`model_fields`][pydantic.main.BaseModel.model_fields] can only be accessed from the class object, not the instance. /// ## Default values Default values for fields can be provided using the normal assignment syntax or by providing a value to the `default` argument: ```python from pydantic import BaseModel, Field class User(BaseModel): # Both fields aren't required: name: str = 'John Doe' age: int = Field(default=20) ``` /// version-changed | v2 [In Pydantic V1](../migration.md#required-optional-and-nullable-fields), a type annotated as [`Any`][typing.Any] or wrapped by [`Optional`][typing.Optional] would be given an implicit default of `None` even if no default was explicitly specified. This is no longer the case in Pydantic V2. /// You can also pass a callable to the `default_factory` argument that will be called to generate a default value: ```python from uuid import uuid4 from pydantic import BaseModel, Field class User(BaseModel): id: str = Field(default_factory=lambda: uuid4().hex) ``` [](){#default-factory-validated-data} The default factory can also take a single required argument, in which case the already validated data will be passed as a dictionary. ```python from pydantic import BaseModel, EmailStr, Field class User(BaseModel): email: EmailStr username: str = Field(default_factory=lambda data: data['email']) user = User(email='user@example.com') print(user.username) #> user@example.com ``` The `data` argument will *only* contain the already validated data, based on the [order of model fields](./models.md#field-ordering) (the above example would fail if `username` were to be defined before `email`). /// version-added | v2.10 Default factories can take already validated data as an argument. /// /// version-added | v2.13 Default factories for [private attributes](./models.md#private-model-attributes) can take the validated data as an argument. /// ## Validate default values By default, Pydantic will *not* validate default values. The `validate_default` field parameter (or the [`validate_default`][pydantic.ConfigDict.validate_default] configuration value) can be used to enable this behavior: ```python from pydantic import BaseModel, Field, ValidationError class User(BaseModel): age: int = Field(default='twelve', validate_default=True) try: user = User() except ValidationError as e: print(e) """ 1 validation error for User age Input should be a valid integer, unable to parse string as an integer [type=int_parsing, input_value='twelve', input_type=str] """ ``` ### Mutable default values A common source of bugs in Python is to use a mutable object as a default value for a function or method argument, as the same instance ends up being reused in each call. The [`dataclasses`][dataclasses] module actually raises an error in this case, indicating that you should use a [default factory](https://docs.python.org/3/library/dataclasses.html#default-factory-functions) instead. While the same thing can be done in Pydantic, it is not required. In the event that the default value is not hashable, Pydantic will create a deep copy of the default value when creating each instance of the model: ```python from pydantic import BaseModel class Model(BaseModel): item_counts: list[dict[str, int]] = [{}] m1 = Model() m1.item_counts[0]['a'] = 1 print(m1.item_counts) #> [{'a': 1}] m2 = Model() print(m2.item_counts) #> [{}] ``` ## Field aliases !!! tip Read more about aliases in the [dedicated section](./alias.md). For validation and serialization, you can define an alias for a field. There are three ways to define an alias: * `Field(alias='foo')` * `Field(validation_alias='foo')` * `Field(serialization_alias='foo')` The `alias` parameter is used for both validation *and* serialization. If you want to use *different* aliases for validation and serialization respectively, you can use the `validation_alias` and `serialization_alias` parameters, which will apply only in their respective use cases. Here is an example of using the `alias` parameter: ```python from pydantic import BaseModel, Field class User(BaseModel): name: str = Field(alias='username') user = User(username='johndoe') # (1)! print(user) #> name='johndoe' print(user.model_dump(by_alias=True)) # (2)! #> {'username': 'johndoe'} ``` 1. The alias `'username'` is used for instance creation and validation. 2. We are using [`model_dump()`][pydantic.main.BaseModel.model_dump] to convert the model into a serializable format. Note that the `by_alias` keyword argument defaults to `False`, and must be specified explicitly to dump models using the field (serialization) aliases. You can also use [`ConfigDict.serialize_by_alias`][pydantic.config.ConfigDict.serialize_by_alias] to configure this behavior at the model level. When `by_alias=True`, the alias `'username'` used during serialization. If you want to use an alias *only* for validation, you can use the `validation_alias` parameter: ```python from pydantic import BaseModel, Field class User(BaseModel): name: str = Field(validation_alias='username') user = User(username='johndoe') # (1)! print(user) #> name='johndoe' print(user.model_dump(by_alias=True)) # (2)! #> {'name': 'johndoe'} ``` 1. The validation alias `'username'` is used during validation. 2. The field name `'name'` is used during serialization. If you only want to define an alias for *serialization*, you can use the `serialization_alias` parameter: ```python from pydantic import BaseModel, Field class User(BaseModel): name: str = Field(serialization_alias='username') user = User(name='johndoe') # (1)! print(user) #> name='johndoe' print(user.model_dump(by_alias=True)) # (2)! #> {'username': 'johndoe'} ``` 1. The field name `'name'` is used for validation. 2. The serialization alias `'username'` is used for serialization. !!! note "Alias precedence and priority" In case you use `alias` together with `validation_alias` or `serialization_alias` at the same time, the `validation_alias` will have priority over `alias` for validation, and `serialization_alias` will have priority over `alias` for serialization. If you provide a value for the [`alias_generator`][pydantic.config.ConfigDict.alias_generator] model setting, you can control the order of precedence for field alias and generated aliases via the `alias_priority` field parameter. You can read more about alias precedence [here](../concepts/alias.md#alias-precedence). ??? tip "Static type checking/IDE support" If you provide a value for the `alias` field parameter, static type checkers will use this alias instead of the actual field name to synthesize the `__init__` method: ```python from pydantic import BaseModel, Field class User(BaseModel): name: str = Field(alias='username') user = User(username='johndoe') # (1)! ``` 1. Accepted by type checkers. This means that when using the [`validate_by_name`][pydantic.config.ConfigDict.validate_by_name] model setting (which allows both the field name and alias to be used during model validation), type checkers will error when the actual field name is used: ```python from pydantic import BaseModel, ConfigDict, Field class User(BaseModel): model_config = ConfigDict(validate_by_name=True) name: str = Field(alias='username') user = User(name='johndoe') # (1)! ``` 1. *Not* accepted by type checkers. If you still want type checkers to use the field name and not the alias, the [annotated pattern](#the-annotated-pattern) can be used (which is only understood by Pydantic): ```python from typing import Annotated from pydantic import BaseModel, ConfigDict, Field class User(BaseModel): model_config = ConfigDict(validate_by_name=True, validate_by_alias=True) name: Annotated[str, Field(alias='username')] user = User(name='johndoe') # (1)! user = User(username='johndoe') # (2)! ``` 1. Accepted by type checkers. 2. *Not* accepted by type checkers.

Validation Alias

Even though Pydantic treats `alias` and `validation_alias` the same when creating model instances, type checkers only understand the `alias` field parameter. As a workaround, you can instead specify both an `alias` and `serialization_alias` (identical to the field name), as the `serialization_alias` will override the `alias` during serialization: ```python from pydantic import BaseModel, Field class MyModel(BaseModel): my_field: int = Field(validation_alias='myValidationAlias') ``` with: ```python from pydantic import BaseModel, Field class MyModel(BaseModel): my_field: int = Field( alias='myValidationAlias', serialization_alias='my_field', ) m = MyModel(myValidationAlias=1) print(m.model_dump(by_alias=True)) #> {'my_field': 1} ``` [](){#numeric-constraints} [](){#string-constraints} [](){#decimal-constraints} ## Field constraints The [`Field()`][pydantic.Field] function can also be used to add constraints to specific types: ```python from decimal import Decimal from pydantic import BaseModel, Field class Model(BaseModel): positive: int = Field(gt=0) short_str: str = Field(max_length=3) precise_decimal: Decimal = Field(max_digits=5, decimal_places=2) ``` The available constraints for each type (and the way they affect the JSON Schema) are described in the [standard library types](../api/standard_library_types.md) documentation. !!! note When adding constraints to a union type, if a member of the union is `None` or the [`MISSING` sentinel](./types.md#missing-sentinel), the constraints will be automatically applied to the remaining type(s) of the union: ```python from typing import Annotated from pydantic import BaseModel, Field class Model(BaseModel): positive: int | None = Field(gt=0) # Also works with the annotated pattern: negative: Annotated[int | None, Field(lt=0)] ``` [](){#strict-mode} ## Strict fields The `strict` parameter of the [`Field()`][pydantic.Field] function specifies whether the field should be validated in [strict mode](./strict_mode.md). ```python from pydantic import BaseModel, Field class User(BaseModel): name: str = Field(strict=True) age: int = Field(strict=False) # (1)! user = User(name='John', age='42') # (2)! print(user) #> name='John' age=42 ``` 1. This is the default value. 2. The `age` field is validated in lax mode. Therefore, it can be assigned a string. The [standard library types](../api/standard_library_types.md) documentation describes the strict behavior for each type. [](){#dataclass-constraints} ## Dataclass fields Some parameters of the [`Field()`][pydantic.Field] function can be used on [dataclasses](./dataclasses.md): * `init`: Whether the field should be included in the synthesized `__init__()` method of the dataclass. * `init_var`: Whether the field should be [init-only][dataclasses-init-only-variables] in the dataclass. * `kw_only`: Whether the field should be a keyword-only argument in the constructor of the dataclass. Here is an example: ```python from pydantic import BaseModel, Field from pydantic.dataclasses import dataclass @dataclass class Foo: bar: str baz: str = Field(init_var=True) qux: str = Field(kw_only=True) class Model(BaseModel): foo: Foo model = Model(foo=Foo('bar', baz='baz', qux='qux')) print(model.model_dump()) # (1)! #> {'foo': {'bar': 'bar', 'qux': 'qux'}} ``` 1. The `baz` field is not included in the serialized output, since it is an init-only field. ## Field Representation The parameter `repr` can be used to control whether the field should be included in the string representation of the model. ```python from pydantic import BaseModel, Field class User(BaseModel): name: str = Field(repr=True) # (1)! age: int = Field(repr=False) user = User(name='John', age=42) print(user) #> name='John' ``` 1. This is the default value. ## Discriminator The parameter `discriminator` can be used to control the field that will be used to discriminate between different models in a union. It takes either the name of a field or a `Discriminator` instance. The `Discriminator` approach can be useful when the discriminator fields aren't the same for all the models in the union. The following example shows how to use `discriminator` with a field name: ```python from typing import Literal from pydantic import BaseModel, Field class Cat(BaseModel): pet_type: Literal['cat'] age: int class Dog(BaseModel): pet_type: Literal['dog'] age: int class Model(BaseModel): pet: Cat | Dog = Field(discriminator='pet_type') print(Model.model_validate({'pet': {'pet_type': 'cat', 'age': 12}})) # (1)! #> pet=Cat(pet_type='cat', age=12) ``` 1. See more about `model_validate()` in the [Validating data](./models.md#validating-data) documentation. The following example shows how to use the `discriminator` keyword argument with a `Discriminator` instance: ```python from typing import Annotated, Literal from pydantic import BaseModel, Discriminator, Field, Tag class Cat(BaseModel): pet_type: Literal['cat'] age: int class Dog(BaseModel): pet_kind: Literal['dog'] age: int def pet_discriminator(v): if isinstance(v, dict): return v.get('pet_type', v.get('pet_kind')) return getattr(v, 'pet_type', getattr(v, 'pet_kind', None)) class Model(BaseModel): pet: Annotated[Cat, Tag('cat')] | Annotated[Dog, Tag('dog')] = Field( discriminator=Discriminator(pet_discriminator) ) print(repr(Model.model_validate({'pet': {'pet_type': 'cat', 'age': 12}}))) #> Model(pet=Cat(pet_type='cat', age=12)) print(repr(Model.model_validate({'pet': {'pet_kind': 'dog', 'age': 12}}))) #> Model(pet=Dog(pet_kind='dog', age=12)) ``` You can also take advantage of `Annotated` to define your discriminated unions. See the [Discriminated Unions](./unions.md#discriminated-unions) documentation for more details. ## Immutability The parameter `frozen` is used to emulate the frozen dataclass behaviour. It is used to prevent the field from being assigned a new value after the model is created (immutability). See the [frozen dataclass documentation] for more details. ```python from pydantic import BaseModel, Field, ValidationError class User(BaseModel): name: str = Field(frozen=True) age: int user = User(name='John', age=42) try: user.name = 'Jane' # (1)! except ValidationError as e: print(e) """ 1 validation error for User name Field is frozen [type=frozen_field, input_value='Jane', input_type=str] """ ``` 1. Since `name` field is frozen, the assignment is not allowed. [](){#exclude} ## Excluding fields The `exclude` and `exclude_if` parameters can be used to control which fields should be excluded from the model when exporting the model. See the following example: ```python from pydantic import BaseModel, Field class User(BaseModel): name: str age: int = Field(exclude=True) user = User(name='John', age=42) print(user.model_dump()) # (1)! #> {'name': 'John'} ``` 1. The `age` field is not included in the [`model_dump()`][pydantic.BaseModel.model_dump] output, since it is excluded. See the dedicated [serialization section](./serialization.md#field-inclusion-and-exclusion) for more details. /// version-added | v2.12 The `exclude_if` parameter. /// ## Deprecated fields /// version-added | v2.7.0 /// The `deprecated` parameter can be used to mark a field as being deprecated. Doing so will result in: * a runtime deprecation warning emitted when accessing the field. * The [deprecated](https://json-schema.org/draft/2020-12/json-schema-validation#section-9.3) keyword being set in the generated JSON schema. This parameter accepts different types, described below. ### `deprecated` as a string The value will be used as the deprecation message. ```python from typing import Annotated from pydantic import BaseModel, Field class Model(BaseModel): deprecated_field: Annotated[int, Field(deprecated='This is deprecated')] print(Model.model_json_schema()['properties']['deprecated_field']) #> {'deprecated': True, 'title': 'Deprecated Field', 'type': 'integer'} ``` ### `deprecated` via the `@warnings.deprecated` decorator The [`@warnings.deprecated`][warnings.deprecated] decorator (or the [`typing_extensions` backport][typing_extensions.deprecated] on Python 3.12 and lower) can be used as an instance. === "Python 3.10 and above" ```python from typing import Annotated from typing_extensions import deprecated from pydantic import BaseModel, Field class Model(BaseModel): deprecated_field: Annotated[int, deprecated('This is deprecated')] # Or explicitly using `Field`: alt_form: Annotated[int, Field(deprecated=deprecated('This is deprecated'))] ``` === "Python 3.13 and above" ```python {requires="3.13"} from typing import Annotated from warnings import deprecated from pydantic import BaseModel, Field class Model(BaseModel): deprecated_field: Annotated[int, deprecated('This is deprecated')] # Or explicitly using `Field`: alt_form: Annotated[int, Field(deprecated=deprecated('This is deprecated'))] ``` !!! note "Support for `category` and `stacklevel`" The current implementation of this feature does not take into account the `category` and `stacklevel` arguments to the `deprecated` decorator. This might land in a future version of Pydantic. ### `deprecated` as a boolean ```python from typing import Annotated from pydantic import BaseModel, Field class Model(BaseModel): deprecated_field: Annotated[int, Field(deprecated=True)] print(Model.model_json_schema()['properties']['deprecated_field']) #> {'deprecated': True, 'title': 'Deprecated Field', 'type': 'integer'} ``` !!! warning "Accessing a deprecated field in validators" When accessing a deprecated field inside a validator, the deprecation warning will be emitted. You can use [`catch_warnings`][warnings.catch_warnings] to explicitly ignore it: ```python import warnings from typing_extensions import Self from pydantic import BaseModel, Field, model_validator class Model(BaseModel): deprecated_field: int = Field(deprecated='This is deprecated') @model_validator(mode='after') def validate_model(self) -> Self: with warnings.catch_warnings(): warnings.simplefilter('ignore', DeprecationWarning) self.deprecated_field = self.deprecated_field * 2 ``` ## Customizing JSON Schema Some field parameters are used exclusively to customize the generated JSON schema. The parameters in question are: * `title` * `description` * `examples` * `json_schema_extra` Read more about JSON schema customization / modification with fields in the [Customizing JSON Schema] section of the JSON schema docs. ## The `computed_field` decorator ??? api "API Documentation" [`@computed_field`][pydantic.fields.computed_field]
/// version-added | v2.13 Computed fields can be conditionally excluded from the serialization output by using the `exclude_if` parameter of the decorator. /// The [`@computed_field`][pydantic.fields.computed_field] decorator can be used to include [properties][property] (or [cached properties][functools.cached_property]) when serializing a model or dataclass. The property will also be included in the JSON Schema (in serialization mode). !!! note Properties can be useful for fields that are computed from other fields, or for fields that are expensive to be computed (and thus, are cached if using [`@cached_property`][functools.cached_property]). However, note that Pydantic will *not* perform any additional logic on the wrapped property (validation, cache invalidation, etc.). Here's an example of the JSON schema (in serialization mode) generated for a model with a computed field: ```python from pydantic import BaseModel, computed_field class Box(BaseModel): width: float height: float depth: float @computed_field @property # (1)! def volume(self) -> float: return self.width * self.height * self.depth print(Box.model_json_schema(mode='serialization')) """ { 'properties': { 'width': {'title': 'Width', 'type': 'number'}, 'height': {'title': 'Height', 'type': 'number'}, 'depth': {'title': 'Depth', 'type': 'number'}, 'volume': {'readOnly': True, 'title': 'Volume', 'type': 'number'}, }, 'required': ['width', 'height', 'depth', 'volume'], 'title': 'Box', 'type': 'object', } """ ``` 1. If not specified, [`@computed_field`][pydantic.fields.computed_field] will implicitly convert the method to a [`@property`][property]. However, it is preferable to explicitly use the [`@property`][property] decorator for type checking purposes. Here's an example using the [`model_dump()`][pydantic.BaseModel.model_dump] method with a computed field: ```python from pydantic import BaseModel, computed_field class Box(BaseModel): width: float height: float depth: float @computed_field @property def volume(self) -> float: return self.width * self.height * self.depth b = Box(width=1, height=2, depth=3) print(b.model_dump()) #> {'width': 1.0, 'height': 2.0, 'depth': 3.0, 'volume': 6.0} ``` As with regular fields, computed fields can be marked as being deprecated: ```python from typing_extensions import deprecated from pydantic import BaseModel, computed_field class Box(BaseModel): width: float height: float depth: float @computed_field @property @deprecated("'volume' is deprecated") def volume(self) -> float: return self.width * self.height * self.depth ``` [frozen dataclass documentation]: https://docs.python.org/3/library/dataclasses.html#frozen-instances [Customizing JSON Schema]: json_schema.md#field-level-customization pydantic-pydantic-e28e879/docs/concepts/forward_annotations.md000066400000000000000000000104251526274674700247120ustar00rootroot00000000000000## Python 3.14 and greater Since Python 3.14, Python does not *eagerly* evaluate annotations anymore, meaning you can reference objects that are not yet defined when the annotation is specified: ```python {requires="3.14" lint="skip"} from typing import Any from pydantic import BaseModel def outer(): def inner(): class Model(BaseModel): ann: List[Dict[Any, int]] Dict = dict return Model List = list Model = inner() return Model Model = outer() Model(ann=[{'key': '1'}]) #> Model(ann=[{'key': 1}]) ``` ## Python 3.13 and lower For Python versions prior to 3.14, References to objects that are not yet defined need to be defined as forward annotations (wrapped in quotes), or by using the `from __future__ import annotations` [future statement] (as introduced in [PEP563](https://www.python.org/dev/peps/pep-0563/)): ```python from __future__ import annotations from pydantic import BaseModel class Model(BaseModel): a: MyInt # Without the future import, equivalent to: # a: 'MyInt' MyInt = int print(Model(a='1')) #> a=1 ``` The internal logic to resolve forward annotations is described in detail in [this section](../internals/resolving_annotations.md). ## Self-referencing (or "Recursive") Models Models with self-referencing fields are also supported. These annotations will be resolved during model creation. === "Python 3.10 and above" ```python from pydantic import BaseModel class Foo(BaseModel): a: int = 123 sibling: 'Foo | None' = None # (1)! print(Foo()) #> a=123 sibling=None print(Foo(sibling={'a': '321'})) #> a=123 sibling=Foo(a=321, sibling=None) ``` 1. Python processes annotations when the `Foo` model is being defined (so it isn't actually fully defined yet). As such, the `Foo` annotation cannot be resolved, and need to be defined as a forward annotation. === "Python 3.14 and above" ```python {requires="3.14" lint="skip"} from pydantic import BaseModel class Foo(BaseModel): a: int = 123 sibling: Foo | None = None print(Foo()) #> a=123 sibling=None print(Foo(sibling={'a': '321'})) #> a=123 sibling=Foo(a=321, sibling=None) ``` ## Cyclic imports When models referencing each other are defined in separate modules, importing one model from the other module results in a cyclic import: each module needs the other one to be fully imported first. === "Python 3.15 and above" Python 3.15 introduced [lazy imports](https://docs.python.org/3.15/reference/simple_stmts.html#lazy) where the `lazy` keyword defers the actual import until the imported name is first accessed. Lazy imports are supported in Pydantic, and can be used to break the cycle: ```python {title="a.py" requires="3.15" test="skip" lint="skip"} lazy from .b import B from pydantic import BaseModel class A(BaseModel): b: B | None = None ``` ```python {title="b.py" requires="3.15" test="skip" lint="skip"} lazy from .a import A from pydantic import BaseModel class B(BaseModel): a: A | None = None ``` === "Python 3.14 and lower" For earlier versions, the recommended approach is to only import one of the models in an [`if TYPE_CHECKING:`][typing.TYPE_CHECKING] block, and use a forward annotation to reference it: ```python {title="a.py" test="skip"} from typing import TYPE_CHECKING from pydantic import BaseModel if TYPE_CHECKING: from .b import B class A(BaseModel): b: 'B | None' = None ``` ```python {title="b.py" test="skip"} from pydantic import BaseModel from .a import A class B(BaseModel): a: A | None = None ``` Because `B` isn't available at runtime in `a.py`, the `A` model is left incomplete. In a parent module (for instance the package's `__init__.py`), import both models and call [`model_rebuild()`][pydantic.BaseModel.model_rebuild] on the incomplete one. As `B` is in scope of the calling module, the forward annotation can be resolved: ```python {title="__init__.py" test="skip"} from .a import A from .b import B __all__ = ('A', 'B') A.model_rebuild() ``` [future statement]: https://docs.python.org/3/reference/simple_stmts.html#future pydantic-pydantic-e28e879/docs/concepts/json.md000066400000000000000000000213241526274674700216020ustar00rootroot00000000000000# JSON ## Json Parsing ??? api "API Documentation" [`pydantic.main.BaseModel.model_validate_json`][pydantic.main.BaseModel.model_validate_json] [`pydantic.type_adapter.TypeAdapter.validate_json`][pydantic.type_adapter.TypeAdapter.validate_json] [`pydantic_core.from_json`][pydantic_core.from_json] Pydantic provides builtin JSON parsing, which helps achieve: * Significant performance improvements without the cost of using a 3rd party library * Support for custom errors * Support for `strict` specifications Here's an example of Pydantic's builtin JSON parsing via the [`model_validate_json`][pydantic.main.BaseModel.model_validate_json] method, showcasing the support for `strict` specifications while parsing JSON data that doesn't match the model's type annotations: ```python from datetime import date from pydantic import BaseModel, ConfigDict, ValidationError class Event(BaseModel): model_config = ConfigDict(strict=True) when: date where: tuple[int, int] json_data = '{"when": "1987-01-28", "where": [51, -1]}' print(Event.model_validate_json(json_data)) # (1)! #> when=datetime.date(1987, 1, 28) where=(51, -1) try: Event.model_validate({'when': '1987-01-28', 'where': [51, -1]}) # (2)! except ValidationError as e: print(e) """ 2 validation errors for Event when Input should be a valid date [type=date_type, input_value='1987-01-28', input_type=str] where Input should be a valid tuple [type=tuple_type, input_value=[51, -1], input_type=list] """ ``` 1. JSON has no `date` or tuple types, but Pydantic knows that so allows strings and arrays as inputs respectively when parsing JSON directly. 2. If you pass the same values to the [`model_validate`][pydantic.main.BaseModel.model_validate] method, Pydantic will raise a validation error because the `strict` configuration is enabled. In v2.5.0 and above, Pydantic uses [`jiter`](https://docs.rs/jiter/latest/jiter/), a fast and iterable JSON parser, to parse JSON data. Using `jiter` compared to `serde` results in modest performance improvements that will get even better in the future. The `jiter` JSON parser is almost entirely compatible with the `serde` JSON parser, with one noticeable enhancement being that `jiter` supports deserialization of `inf` and `NaN` values. In the future, `jiter` is intended to enable support validation errors to include the location in the original JSON input which contained the invalid value. ### Partial JSON Parsing /// version-added | v2.7 /// Pydantic's [JSON parser](https://docs.rs/jiter/latest/jiter/) offers support for partial JSON parsing, which is exposed via [`pydantic_core.from_json()`][pydantic_core.from_json]. Here's an example of this feature in action: ```python from pydantic_core import from_json partial_json_data = '["aa", "bb", "c' # (1)! try: result = from_json(partial_json_data, allow_partial=False) except ValueError as e: print(e) # (2)! #> EOF while parsing a string at line 1 column 15 result = from_json(partial_json_data, allow_partial=True) print(result) # (3)! #> ['aa', 'bb'] ``` 1. The JSON list is incomplete - it's missing a closing `"]` 2. When `allow_partial` is set to `False` (the default), a parsing error occurs. 3. When `allow_partial` is set to `True`, part of the input is deserialized successfully. This also works for deserializing partial dictionaries. For example: ```python from pydantic_core import from_json partial_dog_json = '{"breed": "lab", "name": "fluffy", "friends": ["buddy", "spot", "rufus"], "age' dog_dict = from_json(partial_dog_json, allow_partial=True) print(dog_dict) #> {'breed': 'lab', 'name': 'fluffy', 'friends': ['buddy', 'spot', 'rufus']} ``` !!! tip "Validating LLM Output" This feature is particularly beneficial for validating LLM outputs. However, even carefully prompted models produce output that fails validation some fraction of the time. If you're validating LLM output in production, [Logfire](../integrations/logfire.md) can record just the failures, so you can see which generations didn't match your schema, and why. In future versions of Pydantic, we expect to expand support for this feature through either Pydantic's other JSON validation functions ([`pydantic.main.BaseModel.model_validate_json`][pydantic.main.BaseModel.model_validate_json] and [`pydantic.type_adapter.TypeAdapter.validate_json`][pydantic.type_adapter.TypeAdapter.validate_json]) or model configuration. Stay tuned 🚀! For now, you can use [`pydantic_core.from_json`][pydantic_core.from_json] in combination with [`pydantic.main.BaseModel.model_validate`][pydantic.main.BaseModel.model_validate] to achieve the same result. Here's an example: ```python from pydantic_core import from_json from pydantic import BaseModel class Dog(BaseModel): breed: str name: str friends: list partial_dog_json = '{"breed": "lab", "name": "fluffy", "friends": ["buddy", "spot", "rufus"], "age' dog = Dog.model_validate(from_json(partial_dog_json, allow_partial=True)) print(repr(dog)) #> Dog(breed='lab', name='fluffy', friends=['buddy', 'spot', 'rufus']) ``` !!! tip For partial JSON parsing to work reliably, all fields on the model should have default values. Check out the following example for a more in-depth look at how to use default values with partial JSON parsing: !!! example "Using default values with partial JSON parsing" ```python from typing import Annotated, Any import pydantic_core from pydantic import BaseModel, ValidationError, WrapValidator def default_on_error(v, handler) -> Any: """ Raise a PydanticUseDefault exception if the value is missing. This is useful for avoiding errors from partial JSON preventing successful validation. """ try: return handler(v) except ValidationError as exc: # there might be other types of errors resulting from partial JSON parsing # that you allow here, feel free to customize as needed if all(e['type'] == 'missing' for e in exc.errors()): raise pydantic_core.PydanticUseDefault() else: raise class NestedModel(BaseModel): x: int y: str class MyModel(BaseModel): foo: str | None = None bar: Annotated[tuple[str, int] | None, WrapValidator(default_on_error)] = ( None ) nested: Annotated[NestedModel | None, WrapValidator(default_on_error)] = ( None ) m = MyModel.model_validate( pydantic_core.from_json('{"foo": "x", "bar": ["world",', allow_partial=True) ) print(repr(m)) #> MyModel(foo='x', bar=None, nested=None) m = MyModel.model_validate( pydantic_core.from_json( '{"foo": "x", "bar": ["world", 1], "nested": {"x":', allow_partial=True ) ) print(repr(m)) #> MyModel(foo='x', bar=('world', 1), nested=None) ``` ### Caching Strings **Starting in v2.7.0**, Pydantic's [JSON parser](https://docs.rs/jiter/latest/jiter/) offers support for configuring how Python strings are cached during JSON parsing and validation (when Python strings are constructed from Rust strings during Python validation, e.g. after `strip_whitespace=True`). The `cache_strings` setting is exposed via both [model config][pydantic.config.ConfigDict] and [`pydantic_core.from_json`][pydantic_core.from_json]. The `cache_strings` setting can take any of the following values: * `True` or `'all'` (the default): cache all strings * `'keys'`: cache only dictionary keys, this **only** applies when used with [`pydantic_core.from_json`][pydantic_core.from_json] or when parsing JSON using [`Json`][pydantic.types.Json] * `False` or `'none'`: no caching Using the string caching feature results in performance improvements, but increases memory usage slightly. !!! note "String Caching Details" 1. Strings are cached using a fully associative cache with a size of [16,384](https://github.com/pydantic/jiter/blob/5bbdcfd22882b7b286416b22f74abd549c7b2fd7/src/py_string_cache.rs#L113). 2. Only strings where `len(string) < 64` are cached. 3. There is some overhead to looking up the cache, which is normally worth it to avoid constructing strings. However, if you know there will be very few repeated strings in your data, you might get a performance boost by disabling this setting with `cache_strings=False`. ## JSON Serialization ??? api "API Documentation" [`pydantic.main.BaseModel.model_dump_json`][pydantic.main.BaseModel.model_dump_json]
[`pydantic.type_adapter.TypeAdapter.dump_json`][pydantic.type_adapter.TypeAdapter.dump_json]
[`pydantic_core.to_json`][pydantic_core.to_json]
For more information on JSON serialization, see the [serialization concepts](./serialization.md) page. pydantic-pydantic-e28e879/docs/concepts/json_schema.md000066400000000000000000001063241526274674700231260ustar00rootroot00000000000000??? api "API Documentation" [`pydantic.json_schema`][pydantic.json_schema]
Pydantic allows automatic creation and customization of JSON schemas from models. The generated JSON schemas are compliant with the following specifications: * [JSON Schema Draft 2020-12](https://json-schema.org/draft/2020-12/release-notes.html) * [OpenAPI Specification v3.1.0](https://github.com/OAI/OpenAPI-Specification). ## Generating JSON Schema Use the following functions to generate JSON schema: * [`BaseModel.model_json_schema`][pydantic.main.BaseModel.model_json_schema] returns a jsonable dict of a model's schema. * [`TypeAdapter.json_schema`][pydantic.type_adapter.TypeAdapter.json_schema] returns a jsonable dict of an adapted type's schema. !!! note These methods are not to be confused with [`BaseModel.model_dump_json`][pydantic.main.BaseModel.model_dump_json] and [`TypeAdapter.dump_json`][pydantic.type_adapter.TypeAdapter.dump_json], which serialize instances of the model or adapted type, respectively. These methods return JSON strings. In comparison, [`BaseModel.model_json_schema`][pydantic.main.BaseModel.model_json_schema] and [`TypeAdapter.json_schema`][pydantic.type_adapter.TypeAdapter.json_schema] return a jsonable dict representing the JSON schema of the model or adapted type, respectively. !!! note "on the "jsonable" nature of JSON schema" Regarding the "jsonable" nature of the [`model_json_schema`][pydantic.main.BaseModel.model_json_schema] results, calling `json.dumps(m.model_json_schema())`on some `BaseModel` `m` returns a valid JSON string. Similarly, for [`TypeAdapter.json_schema`][pydantic.type_adapter.TypeAdapter.json_schema], calling `json.dumps(TypeAdapter().json_schema())` returns a valid JSON string. !!! tip Pydantic offers support for both of: 1. [Customizing JSON Schema](#customizing-json-schema) 2. [Customizing the JSON Schema Generation Process](#customizing-the-json-schema-generation-process) The first approach generally has a more narrow scope, allowing for customization of the JSON schema for more specific cases and types. The second approach generally has a more broad scope, allowing for customization of the JSON schema generation process overall. The same effects can be achieved with either approach, but depending on your use case, one approach might offer a more simple solution than the other. Here's an example of generating JSON schema from a `BaseModel`: ```python {output="json"} import json from enum import Enum from typing import Annotated from pydantic import BaseModel, Field from pydantic.config import ConfigDict class FooBar(BaseModel): count: int size: float | None = None class Gender(str, Enum): male = 'male' female = 'female' other = 'other' not_given = 'not_given' class MainModel(BaseModel): """ This is the description of the main model """ model_config = ConfigDict(title='Main') foo_bar: FooBar gender: Annotated[Gender | None, Field(alias='Gender')] = None snap: int = Field( default=42, title='The Snap', description='this is the value of snap', gt=30, lt=50, ) main_model_schema = MainModel.model_json_schema() # (1)! print(json.dumps(main_model_schema, indent=2)) # (2)! """ { "$defs": { "FooBar": { "properties": { "count": { "title": "Count", "type": "integer" }, "size": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "default": null, "title": "Size" } }, "required": [ "count" ], "title": "FooBar", "type": "object" }, "Gender": { "enum": [ "male", "female", "other", "not_given" ], "title": "Gender", "type": "string" } }, "description": "This is the description of the main model", "properties": { "foo_bar": { "$ref": "#/$defs/FooBar" }, "Gender": { "anyOf": [ { "$ref": "#/$defs/Gender" }, { "type": "null" } ], "default": null }, "snap": { "default": 42, "description": "this is the value of snap", "exclusiveMaximum": 50, "exclusiveMinimum": 30, "title": "The Snap", "type": "integer" } }, "required": [ "foo_bar" ], "title": "Main", "type": "object" } """ ``` 1. This produces a "jsonable" dict of `MainModel`'s schema. 2. Calling `json.dumps` on the schema dict produces a JSON string. The [`TypeAdapter`][pydantic.type_adapter.TypeAdapter] class lets you create an object with methods for validating, serializing, and producing JSON schemas for arbitrary types. This serves as a complete replacement for `schema_of` in Pydantic V1 (which is now deprecated). Here's an example of generating JSON schema from a [`TypeAdapter`][pydantic.type_adapter.TypeAdapter]: ```python from pydantic import TypeAdapter adapter = TypeAdapter(list[int]) print(adapter.json_schema()) #> {'items': {'type': 'integer'}, 'type': 'array'} ``` You can also generate JSON schemas for combinations of [`BaseModel`s][pydantic.main.BaseModel] and [`TypeAdapter`s][pydantic.type_adapter.TypeAdapter], as shown in this example: ```python {output="json"} import json from pydantic import BaseModel, TypeAdapter class Cat(BaseModel): name: str color: str class Dog(BaseModel): name: str breed: str ta = TypeAdapter(Cat | Dog) ta_schema = ta.json_schema() print(json.dumps(ta_schema, indent=2)) """ { "$defs": { "Cat": { "properties": { "name": { "title": "Name", "type": "string" }, "color": { "title": "Color", "type": "string" } }, "required": [ "name", "color" ], "title": "Cat", "type": "object" }, "Dog": { "properties": { "name": { "title": "Name", "type": "string" }, "breed": { "title": "Breed", "type": "string" } }, "required": [ "name", "breed" ], "title": "Dog", "type": "object" } }, "anyOf": [ { "$ref": "#/$defs/Cat" }, { "$ref": "#/$defs/Dog" } ] } """ ``` ### Configuring the `JsonSchemaMode` Specify the mode of JSON schema generation via the `mode` parameter in the [`model_json_schema`][pydantic.main.BaseModel.model_json_schema] and [`TypeAdapter.json_schema`][pydantic.type_adapter.TypeAdapter.json_schema] methods. By default, the mode is set to `'validation'`, which produces a JSON schema corresponding to the model's validation schema. The [`JsonSchemaMode`][pydantic.json_schema.JsonSchemaMode] is a type alias that represents the available options for the `mode` parameter: * `'validation'` * `'serialization'` Here's an example of how to specify the `mode` parameter, and how it affects the generated JSON schema: ```python from decimal import Decimal from pydantic import BaseModel class Model(BaseModel): a: Decimal = Decimal('12.34') print(Model.model_json_schema(mode='validation')) """ { 'properties': { 'a': { 'anyOf': [{'type': 'number'}, {'type': 'string'}], 'default': '12.34', 'title': 'A', } }, 'title': 'Model', 'type': 'object', } """ print(Model.model_json_schema(mode='serialization')) """ { 'properties': {'a': {'default': '12.34', 'title': 'A', 'type': 'string'}}, 'title': 'Model', 'type': 'object', } """ ``` ## Customizing JSON Schema The generated JSON schema can be customized at both the [field level](#field-level-customization) and [model level](#model-level-customization). At both the field and model levels, you can use the [`json_schema_extra` option](#using-json_schema_extra) to add extra information to the JSON schema. For custom types, Pydantic offers other tools for customizing JSON schema generation: 1. [`WithJsonSchema` annotation](#withjsonschema-annotation) 2. [`SkipJsonSchema` annotation](#skipjsonschema-annotation) 3. [Implementing `__get_pydantic_core_schema__`](#implementing_get_pydantic_core_schema) 4. [Implementing `__get_pydantic_json_schema__`](#implementing_get_pydantic_json_schema) ### Field-Level Customization [Fields](./fields.md) can have their JSON Schema customized. This is usually done using the [`Field()`][pydantic.fields.Field] function. Some field parameters are used exclusively to customize the generated JSON Schema: * `title`: The title of the field. * `description`: The description of the field. * `examples`: The examples of the field. * `json_schema_extra`: Extra JSON Schema properties to be added to the field (see the [dedicated documentation](#using-json_schema_extra)). * `field_title_generator`: A function that programmatically sets the field's title, based on its name and info. Here's an example: ```python {output="json"} import json from typing import Annotated from pydantic import BaseModel, EmailStr, Field, SecretStr class User(BaseModel): age: int = Field(description='Age of the user') email: Annotated[EmailStr, Field(examples=['marcelo@mail.com'])] # (1)! name: str = Field(title='Username') password: SecretStr = Field( json_schema_extra={ 'title': 'Password', 'description': 'Password of the user', 'examples': ['123456'], } ) print(json.dumps(User.model_json_schema(), indent=2)) """ { "properties": { "age": { "description": "Age of the user", "title": "Age", "type": "integer" }, "email": { "examples": [ "marcelo@mail.com" ], "format": "email", "title": "Email", "type": "string" }, "name": { "title": "Username", "type": "string" }, "password": { "description": "Password of the user", "examples": [ "123456" ], "format": "password", "title": "Password", "type": "string", "writeOnly": true } }, "required": [ "age", "email", "name", "password" ], "title": "User", "type": "object" } """ ``` 1. The [annotated pattern](./fields.md#the-annotated-pattern) can also be used. ### Programmatic field title generation The `field_title_generator` parameter can be used to programmatically generate the title for a field based on its name and info. See the following example: ```python import json from pydantic import BaseModel, Field from pydantic.fields import FieldInfo def make_title(field_name: str, field_info: FieldInfo) -> str: return field_name.upper() class Person(BaseModel): name: str = Field(field_title_generator=make_title) age: int = Field(field_title_generator=make_title) print(json.dumps(Person.model_json_schema(), indent=2)) """ { "properties": { "name": { "title": "NAME", "type": "string" }, "age": { "title": "AGE", "type": "integer" } }, "required": [ "name", "age" ], "title": "Person", "type": "object" } """ ``` ### Model-Level Customization You can also use [model config][pydantic.config.ConfigDict] to customize JSON schema generation on a model. Specifically, the following config options are relevant: * [`title`][pydantic.config.ConfigDict.title] * [`json_schema_extra`][pydantic.config.ConfigDict.json_schema_extra] * [`json_schema_mode_override`][pydantic.config.ConfigDict.json_schema_mode_override] * [`field_title_generator`][pydantic.config.ConfigDict.field_title_generator] * [`model_title_generator`][pydantic.config.ConfigDict.model_title_generator] ### Using `json_schema_extra` The `json_schema_extra` option can be used to add extra information to the JSON schema, either at the [Field level](#field-level-customization) or at the [Model level](#model-level-customization). You can pass a `dict` or a `Callable` to `json_schema_extra`. #### Using `json_schema_extra` with a `dict` You can pass a `dict` to `json_schema_extra` to add extra information to the JSON schema: ```python {output="json"} import json from pydantic import BaseModel, ConfigDict class Model(BaseModel): a: str model_config = ConfigDict(json_schema_extra={'examples': [{'a': 'Foo'}]}) print(json.dumps(Model.model_json_schema(), indent=2)) """ { "examples": [ { "a": "Foo" } ], "properties": { "a": { "title": "A", "type": "string" } }, "required": [ "a" ], "title": "Model", "type": "object" } """ ``` #### Using `json_schema_extra` with a `Callable` You can pass a `Callable` to `json_schema_extra` to modify the JSON schema with a function: ```python {output="json"} import json from pydantic import BaseModel, Field def pop_default(s): s.pop('default') class Model(BaseModel): a: int = Field(default=1, json_schema_extra=pop_default) print(json.dumps(Model.model_json_schema(), indent=2)) """ { "properties": { "a": { "title": "A", "type": "integer" } }, "title": "Model", "type": "object" } """ ``` #### Merging `json_schema_extra` Starting in v2.9, Pydantic merges `json_schema_extra` dictionaries from annotated types. This pattern offers a more additive approach to merging rather than the previous override behavior. This can be quite helpful for cases of reusing json schema extra information across multiple types. We viewed this change largely as a bug fix, as it resolves unintentional differences in the `json_schema_extra` merging behavior between `BaseModel` and `TypeAdapter` instances - see [this issue](https://github.com/pydantic/pydantic/issues/9210) for more details. ```python import json from typing import Annotated, TypeAlias from pydantic import Field, TypeAdapter ExternalType: TypeAlias = Annotated[ int, Field(json_schema_extra={'key1': 'value1'}) ] ta = TypeAdapter( Annotated[ExternalType, Field(json_schema_extra={'key2': 'value2'})] ) print(json.dumps(ta.json_schema(), indent=2)) """ { "key1": "value1", "key2": "value2", "type": "integer" } """ ``` !!! note We no longer (and never fully did) support composing a mix of `dict` and `callable` type `json_schema_extra` specifications. If this is a requirement for your use case, please [open a pydantic issue](https://github.com/pydantic/pydantic/issues/new/choose) and explain your situation - we'd be happy to reconsider this decision when presented with a compelling case. ### `WithJsonSchema` annotation !!! tip Using [`WithJsonSchema`][pydantic.json_schema.WithJsonSchema] is preferred over [implementing `__get_pydantic_json_schema__()`](#implementing_get_pydantic_json_schema) for custom types, as it's more simple and less error-prone. An annotation used to override the JSON Schema for a type. This is useful when you want to set a JSON Schema for a type that don't produce any JSON Schemas by default (e.g. [`Callable`][collections.abc.Callable]). Note that this overrides the whole generated JSON Schema for the type (in the following example, the `'type'` also needs to be provided). ```python {output="json"} import json from typing import Annotated from pydantic import BaseModel, WithJsonSchema MyInt = Annotated[ int, WithJsonSchema({'type': 'integer', 'examples': [1, 0, -1]}), ] class Model(BaseModel): a: MyInt print(json.dumps(Model.model_json_schema(), indent=2)) """ { "properties": { "a": { "examples": [ 1, 0, -1 ], "title": "A", "type": "integer" } }, "required": [ "a" ], "title": "Model", "type": "object" } """ ``` See the [API documentation][pydantic.json_schema.WithJsonSchema] for more details. !!! note You might be tempted to use the [`WithJsonSchema`][pydantic.json_schema.WithJsonSchema] annotation to fine-tune the JSON Schema of fields having [validators](./validators.md) attached. Instead, it is recommended to use [the `json_schema_input_type` argument](./validators.md#json-schema-and-field-validators). ### `SkipJsonSchema` annotation ??? api "API Documentation" [`pydantic.json_schema.SkipJsonSchema`][pydantic.json_schema.SkipJsonSchema]
The [`SkipJsonSchema`][pydantic.json_schema.SkipJsonSchema] annotation can be used to skip an included field (or part of a field's specifications) from the generated JSON schema. See the API docs for more details. ### Implementing `__get_pydantic_core_schema__` Custom types (used as `field_name: TheType` or `field_name: Annotated[TheType, ...]`) as well as `Annotated` metadata (used as `field_name: Annotated[int, SomeMetadata]`) can modify or override the generated schema by implementing `__get_pydantic_core_schema__`. This method receives two positional arguments: 1. The type annotation that corresponds to this type (so in the case of `TheType[T][int]` it would be `TheType[int]`). 2. A handler/callback to call the next implementer of `__get_pydantic_core_schema__`. The handler system works just like [*wrap* field validators](validators.md#field-wrap-validator). In this case the input is the type and the output is a `core_schema`. Here is an example of a custom type that *overrides* the generated `core_schema`: ```python from dataclasses import dataclass from typing import Any from pydantic_core import core_schema from pydantic import BaseModel, GetCoreSchemaHandler @dataclass class CompressedString: dictionary: dict[int, str] text: list[int] def build(self) -> str: return ' '.join([self.dictionary[key] for key in self.text]) @classmethod def __get_pydantic_core_schema__( cls, source: type[Any], handler: GetCoreSchemaHandler ) -> core_schema.CoreSchema: assert source is CompressedString return core_schema.no_info_after_validator_function( cls._validate, core_schema.str_schema(), serialization=core_schema.plain_serializer_function_ser_schema( cls._serialize, info_arg=False, return_schema=core_schema.str_schema(), ), ) @staticmethod def _validate(value: str) -> 'CompressedString': inverse_dictionary: dict[str, int] = {} text: list[int] = [] for word in value.split(' '): if word not in inverse_dictionary: inverse_dictionary[word] = len(inverse_dictionary) text.append(inverse_dictionary[word]) return CompressedString( {v: k for k, v in inverse_dictionary.items()}, text ) @staticmethod def _serialize(value: 'CompressedString') -> str: return value.build() class MyModel(BaseModel): value: CompressedString print(MyModel.model_json_schema()) """ { 'properties': {'value': {'title': 'Value', 'type': 'string'}}, 'required': ['value'], 'title': 'MyModel', 'type': 'object', } """ print(MyModel(value='fox fox fox dog fox')) """ value = CompressedString(dictionary={0: 'fox', 1: 'dog'}, text=[0, 0, 0, 1, 0]) """ print(MyModel(value='fox fox fox dog fox').model_dump(mode='json')) #> {'value': 'fox fox fox dog fox'} ``` Since Pydantic would not know how to generate a schema for `CompressedString`, if you call `handler(source)` in its `__get_pydantic_core_schema__` method you would get a `pydantic.errors.PydanticSchemaGenerationError` error. This will be the case for most custom types, so you almost never want to call into `handler` for custom types. The process for `Annotated` metadata is much the same except that you can generally call into `handler` to have Pydantic handle generating the schema. ```python from collections.abc import Sequence from dataclasses import dataclass from typing import Annotated, Any from pydantic_core import core_schema from pydantic import BaseModel, GetCoreSchemaHandler, ValidationError @dataclass class RestrictCharacters: alphabet: Sequence[str] def __get_pydantic_core_schema__( self, source: type[Any], handler: GetCoreSchemaHandler ) -> core_schema.CoreSchema: if not self.alphabet: raise ValueError('Alphabet may not be empty') schema = handler( source ) # get the CoreSchema from the type / inner constraints if schema['type'] != 'str': raise TypeError('RestrictCharacters can only be applied to strings') return core_schema.no_info_after_validator_function( self.validate, schema, ) def validate(self, value: str) -> str: if any(c not in self.alphabet for c in value): raise ValueError( f'{value!r} is not restricted to {self.alphabet!r}' ) return value class MyModel(BaseModel): value: Annotated[str, RestrictCharacters('ABC')] print(MyModel.model_json_schema()) """ { 'properties': {'value': {'title': 'Value', 'type': 'string'}}, 'required': ['value'], 'title': 'MyModel', 'type': 'object', } """ print(MyModel(value='CBA')) #> value='CBA' try: MyModel(value='XYZ') except ValidationError as e: print(e) """ 1 validation error for MyModel value Value error, 'XYZ' is not restricted to 'ABC' [type=value_error, input_value='XYZ', input_type=str] """ ``` So far we have been wrapping the schema, but if you just want to *modify* it or *ignore* it you can as well. To modify the schema, first call the handler, then mutate the result: ```python from typing import Annotated, Any from pydantic_core import ValidationError, core_schema from pydantic import BaseModel, GetCoreSchemaHandler class SmallString: def __get_pydantic_core_schema__( self, source: type[Any], handler: GetCoreSchemaHandler, ) -> core_schema.CoreSchema: schema = handler(source) assert schema['type'] == 'str' schema['max_length'] = 10 # modify in place return schema class MyModel(BaseModel): value: Annotated[str, SmallString()] try: MyModel(value='too long!!!!!') except ValidationError as e: print(e) """ 1 validation error for MyModel value String should have at most 10 characters [type=string_too_long, input_value='too long!!!!!', input_type=str] """ ``` !!! tip Note that you *must* return a schema, even if you are just mutating it in place. To override the schema completely, do not call the handler and return your own `CoreSchema`: ```python from typing import Annotated, Any from pydantic_core import ValidationError, core_schema from pydantic import BaseModel, GetCoreSchemaHandler class AllowAnySubclass: def __get_pydantic_core_schema__( self, source: type[Any], handler: GetCoreSchemaHandler ) -> core_schema.CoreSchema: # we can't call handler since it will fail for arbitrary types def validate(value: Any) -> Any: if not isinstance(value, source): raise ValueError( f'Expected an instance of {source}, got an instance of {type(value)}' ) return value return core_schema.no_info_plain_validator_function(validate) class Foo: pass class Model(BaseModel): f: Annotated[Foo, AllowAnySubclass()] print(Model(f=Foo())) #> f=<__main__.Foo object at 0x0123456789ab> class NotFoo: pass try: Model(f=NotFoo()) except ValidationError as e: print(e) """ 1 validation error for Model f Value error, Expected an instance of , got an instance of [type=value_error, input_value=<__main__.NotFoo object at 0x0123456789ab>, input_type=NotFoo] """ ``` ### Implementing `__get_pydantic_json_schema__` You can also implement `__get_pydantic_json_schema__` to modify or override the generated json schema. Modifying this method only affects the JSON schema - it doesn't affect the core schema, which is used for validation and serialization. Here's an example of modifying the generated JSON schema: ```python {output="json"} import json from typing import Any from pydantic_core import core_schema as cs from pydantic import GetCoreSchemaHandler, GetJsonSchemaHandler, TypeAdapter from pydantic.json_schema import JsonSchemaValue class Person: name: str age: int def __init__(self, name: str, age: int): self.name = name self.age = age @classmethod def __get_pydantic_core_schema__( cls, source_type: Any, handler: GetCoreSchemaHandler ) -> cs.CoreSchema: return cs.typed_dict_schema( { 'name': cs.typed_dict_field(cs.str_schema()), 'age': cs.typed_dict_field(cs.int_schema()), }, ) @classmethod def __get_pydantic_json_schema__( cls, core_schema: cs.CoreSchema, handler: GetJsonSchemaHandler ) -> JsonSchemaValue: json_schema = handler(core_schema) json_schema = handler.resolve_ref_schema(json_schema) json_schema['examples'] = [ { 'name': 'John Doe', 'age': 25, } ] json_schema['title'] = 'Person' return json_schema print(json.dumps(TypeAdapter(Person).json_schema(), indent=2)) """ { "examples": [ { "age": 25, "name": "John Doe" } ], "properties": { "name": { "title": "Name", "type": "string" }, "age": { "title": "Age", "type": "integer" } }, "required": [ "name", "age" ], "title": "Person", "type": "object" } """ ``` ### Using `field_title_generator` The `field_title_generator` parameter can be used to programmatically generate the title for a field based on its name and info. This is similar to the field level `field_title_generator`, but the `ConfigDict` option will be applied to all fields of the class. See the following example: ```python import json from pydantic import BaseModel, ConfigDict class Person(BaseModel): model_config = ConfigDict( field_title_generator=lambda field_name, field_info: field_name.upper() ) name: str age: int print(json.dumps(Person.model_json_schema(), indent=2)) """ { "properties": { "name": { "title": "NAME", "type": "string" }, "age": { "title": "AGE", "type": "integer" } }, "required": [ "name", "age" ], "title": "Person", "type": "object" } """ ``` ### Using `model_title_generator` The `model_title_generator` config option is similar to the `field_title_generator` option, but it applies to the title of the model itself, and accepts the model class as input. See the following example: ```python import json from pydantic import BaseModel, ConfigDict def make_title(model: type) -> str: return f'Title-{model.__name__}' class Person(BaseModel): model_config = ConfigDict(model_title_generator=make_title) name: str age: int print(json.dumps(Person.model_json_schema(), indent=2)) """ { "properties": { "name": { "title": "Name", "type": "string" }, "age": { "title": "Age", "type": "integer" } }, "required": [ "name", "age" ], "title": "Title-Person", "type": "object" } """ ``` ## JSON schema types Types, custom field types, and constraints (like `max_length`) are mapped to the corresponding spec formats in the following priority order (when there is an equivalent available): 1. [JSON Schema Core](https://json-schema.org/draft/2020-12/json-schema-core) 2. [JSON Schema Validation](https://json-schema.org/draft/2020-12/json-schema-validation) 3. [OpenAPI Data Types](https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.2.md#data-types) 4. The standard `format` JSON field is used to define Pydantic extensions for more complex `string` sub-types. The field schema mapping from Python or Pydantic to JSON schema is done as follows: {{ schema_mappings_table }} ## Top-level schema generation You can also generate a top-level JSON schema that only includes a list of models and related sub-models in its `$defs`: ```python {output="json"} import json from pydantic import BaseModel from pydantic.json_schema import models_json_schema class Foo(BaseModel): a: str = None class Model(BaseModel): b: Foo class Bar(BaseModel): c: int _, top_level_schema = models_json_schema( [(Model, 'validation'), (Bar, 'validation')], title='My Schema' ) print(json.dumps(top_level_schema, indent=2)) """ { "$defs": { "Bar": { "properties": { "c": { "title": "C", "type": "integer" } }, "required": [ "c" ], "title": "Bar", "type": "object" }, "Foo": { "properties": { "a": { "default": null, "title": "A", "type": "string" } }, "title": "Foo", "type": "object" }, "Model": { "properties": { "b": { "$ref": "#/$defs/Foo" } }, "required": [ "b" ], "title": "Model", "type": "object" } }, "title": "My Schema" } """ ``` ## Customizing the JSON Schema Generation Process ??? api "API Documentation" [`pydantic.json_schema`][pydantic.json_schema.GenerateJsonSchema]
If you need custom schema generation, you can use a `schema_generator`, modifying the [`GenerateJsonSchema`][pydantic.json_schema.GenerateJsonSchema] class as necessary for your application. The various methods that can be used to produce JSON schema accept a keyword argument `schema_generator: type[GenerateJsonSchema] = GenerateJsonSchema`, and you can pass your custom subclass to these methods in order to use your own approach to generating JSON schema. `GenerateJsonSchema` implements the translation of a type's `pydantic-core` schema into a JSON schema. By design, this class breaks the JSON schema generation process into smaller methods that can be easily overridden in subclasses to modify the "global" approach to generating JSON schema. ```python from pydantic import BaseModel from pydantic.json_schema import GenerateJsonSchema class MyGenerateJsonSchema(GenerateJsonSchema): def generate(self, schema, mode='validation'): json_schema = super().generate(schema, mode=mode) json_schema['title'] = 'Customize title' json_schema['$schema'] = self.schema_dialect return json_schema class MyModel(BaseModel): x: int print(MyModel.model_json_schema(schema_generator=MyGenerateJsonSchema)) """ { 'properties': {'x': {'title': 'X', 'type': 'integer'}}, 'required': ['x'], 'title': 'Customize title', 'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', } """ ``` Below is an approach you can use to exclude any fields from the schema that don't have valid json schemas: ```python from collections.abc import Callable from pydantic_core import PydanticOmit, core_schema from pydantic import BaseModel from pydantic.json_schema import GenerateJsonSchema, JsonSchemaValue class MyGenerateJsonSchema(GenerateJsonSchema): def handle_invalid_for_json_schema( self, schema: core_schema.CoreSchema, error_info: str ) -> JsonSchemaValue: raise PydanticOmit def example_callable(): return 1 class Example(BaseModel): name: str = 'example' function: Callable = example_callable instance_example = Example() validation_schema = instance_example.model_json_schema( schema_generator=MyGenerateJsonSchema, mode='validation' ) print(validation_schema) """ { 'properties': { 'name': {'default': 'example', 'title': 'Name', 'type': 'string'} }, 'title': 'Example', 'type': 'object', } """ ``` ### JSON schema sorting By default, Pydantic recursively sorts JSON schemas by alphabetically sorting keys. Notably, Pydantic skips sorting the values of the `properties` key, to preserve the order of the fields as they were defined in the model. If you would like to customize this behavior, you can override the `sort` method in your custom `GenerateJsonSchema` subclass. The below example uses a no-op `sort` method to disable sorting entirely, which is reflected in the preserved order of the model fields and `json_schema_extra` keys: ```python import json from pydantic import BaseModel, Field from pydantic.json_schema import GenerateJsonSchema, JsonSchemaValue class MyGenerateJsonSchema(GenerateJsonSchema): def sort( self, value: JsonSchemaValue, parent_key: str | None = None ) -> JsonSchemaValue: """No-op, we don't want to sort schema values at all.""" return value class Bar(BaseModel): c: str b: str a: str = Field(json_schema_extra={'c': 'hi', 'b': 'hello', 'a': 'world'}) json_schema = Bar.model_json_schema(schema_generator=MyGenerateJsonSchema) print(json.dumps(json_schema, indent=2)) """ { "type": "object", "properties": { "c": { "type": "string", "title": "C" }, "b": { "type": "string", "title": "B" }, "a": { "type": "string", "c": "hi", "b": "hello", "a": "world", "title": "A" } }, "required": [ "c", "b", "a" ], "title": "Bar" } """ ``` ## Customizing the `$ref`s in JSON Schema The format of `$ref`s can be altered by calling [`model_json_schema()`][pydantic.main.BaseModel.model_json_schema] or [`model_dump_json()`][pydantic.main.BaseModel.model_dump_json] with the `ref_template` keyword argument. The definitions are always stored under the key `$defs`, but a specified prefix can be used for the references. This is useful if you need to extend or modify the JSON schema default definitions location. For example, with OpenAPI: ```python {output="json"} import json from pydantic import BaseModel from pydantic.type_adapter import TypeAdapter class Foo(BaseModel): a: int class Model(BaseModel): a: Foo adapter = TypeAdapter(Model) print( json.dumps( adapter.json_schema(ref_template='#/components/schemas/{model}'), indent=2, ) ) """ { "$defs": { "Foo": { "properties": { "a": { "title": "A", "type": "integer" } }, "required": [ "a" ], "title": "Foo", "type": "object" } }, "properties": { "a": { "$ref": "#/components/schemas/Foo" } }, "required": [ "a" ], "title": "Model", "type": "object" } """ ``` ## Miscellaneous Notes on JSON Schema Generation * The JSON schema for `Optional` fields indicates that the value `null` is allowed. * The `Decimal` type is exposed in JSON schema (and serialized) as a string. * Since the `namedtuple` type doesn't exist in JSON, a model's JSON schema does not preserve `namedtuple`s as `namedtuple`s. * Sub-models used are added to the `$defs` JSON attribute and referenced, as per the spec. * Sub-models with modifications (via the `Field` class) like a custom title, description, or default value, are recursively included instead of referenced. * The `description` for models is taken from either the docstring of the class or the argument `description` to the `Field` class. * The schema is generated by default using aliases as keys, but it can be generated using model property names instead by calling [`model_json_schema()`][pydantic.main.BaseModel.model_json_schema] or [`model_dump_json()`][pydantic.main.BaseModel.model_dump_json] with the `by_alias=False` keyword argument. pydantic-pydantic-e28e879/docs/concepts/models.md000066400000000000000000001705361526274674700221260ustar00rootroot00000000000000??? api "API Documentation" [`pydantic.main.BaseModel`][pydantic.main.BaseModel]
One of the primary ways of defining schema in Pydantic is via models. Models are simply classes which inherit from [`BaseModel`][pydantic.main.BaseModel] and define fields as annotated attributes. You can think of models as similar to structs in languages like C, or as the requirements of a single endpoint in an API. Models share many similarities with Python's [dataclasses][dataclasses], but have been designed with some subtle-yet-important differences that streamline certain workflows related to validation, serialization, and JSON schema generation. You can find more discussion of this in the [Dataclasses](dataclasses.md) section of the docs. Untrusted data can be passed to a model and, after parsing and validation, Pydantic guarantees that the fields of the resultant model instance will conform to the field types defined on the model. !!! note "Validation — a *deliberate* misnomer"

TL;DR

We use the term "validation" to refer to the process of instantiating a model (or other type) that adheres to specified types and constraints. This task, which Pydantic is well known for, is most widely recognized as "validation" in colloquial terms, even though in other contexts the term "validation" may be more restrictive. ---

The long version

The potential confusion around the term "validation" arises from the fact that, strictly speaking, Pydantic's primary focus doesn't align precisely with the dictionary definition of "validation": >

validation

> _noun_ > the action of checking or proving the validity or accuracy of something. In Pydantic, the term "validation" refers to the process of instantiating a model (or other type) that adheres to specified types and constraints. Pydantic guarantees the types and constraints of the output, not the input data. This distinction becomes apparent when considering that Pydantic's `ValidationError` is raised when data cannot be successfully parsed into a model instance. While this distinction may initially seem subtle, it holds practical significance. In some cases, "validation" goes beyond just model creation, and can include the copying and coercion of data. This can involve copying arguments passed to the constructor in order to perform coercion to a new type without mutating the original input data. For a more in-depth understanding of the implications for your usage, refer to the [Data Conversion](#data-conversion) and [Attribute Copies](#attribute-copies) sections below. In essence, Pydantic's primary goal is to assure that the resulting structure post-processing (termed "validation") precisely conforms to the applied type hints. Given the widespread adoption of "validation" as the colloquial term for this process, we will consistently use it in our documentation. While the terms "parse" and "validation" were previously used interchangeably, moving forward, we aim to exclusively employ "validate", with "parse" reserved specifically for discussions related to [JSON parsing](../concepts/json.md). ## Basic model usage !!! note Pydantic relies heavily on the existing Python typing constructs to define models. If you are not familiar with those, the following resources can be useful: * The [Type System Guides](https://typing.readthedocs.io/en/latest/guides/index.html) * The [mypy documentation](https://mypy.readthedocs.io/en/latest/) ```python {group="basic-model"} from pydantic import BaseModel, ConfigDict class User(BaseModel): id: int name: str = 'Jane Doe' model_config = ConfigDict(str_max_length=10) # (1)! ``` 1. Pydantic models support a variety of [configuration values](./config.md) (see [here][pydantic.ConfigDict] for the available configuration values). In this example, `User` is a model with two fields: * `id`, which is an integer (defined using the [`int`][] type) and is required * `name`, which is a string (defined using the [`str`][] type) and is not required (it has a default value). The documentation on [types](./types.md) expands on the supported types. Fields can be customized in a number of ways using the [`Field()`][pydantic.Field] function. See the [documentation on fields](./fields.md) for more information. The model can then be instantiated: ```python {group="basic-model"} user = User(id='123') ``` `user` is an instance of `User`. Initialization of the object will perform all parsing and validation. If no [`ValidationError`][pydantic_core.ValidationError] exception is raised, you know the resulting model instance is valid. Fields of a model can be accessed as normal attributes of the `user` object: ```python {group="basic-model"} assert user.name == 'Jane Doe' # (1)! assert user.id == 123 # (2)! assert isinstance(user.id, int) ``` 1. `name` wasn't set when `user` was initialized, so the default value was used. The [`model_fields_set`][pydantic.BaseModel.model_fields_set] attribute can be inspected to check the field names explicitly set during instantiation. 2. Note that the string `'123'` was coerced to an integer and its value is `123`. More details on Pydantic's coercion logic can be found in the [data conversion](#data-conversion) section. The model instance can be serialized using the [`model_dump()`][pydantic.BaseModel.model_dump] method: ```python {group="basic-model"} assert user.model_dump() == {'id': 123, 'name': 'Jane Doe'} ``` Calling [dict][] on the instance will also provide a dictionary, but nested fields will not be recursively converted into dictionaries. [`model_dump()`][pydantic.BaseModel.model_dump] also provides numerous arguments to customize the serialization result. By default, models are mutable and field values can be changed through attribute assignment: ```python {group="basic-model"} user.id = 321 assert user.id == 321 ``` !!! warning When defining your models, watch out for naming collisions between your field name and its type annotation. For example, the following will not behave as expected and would yield a validation error: ```python {test="skip"} from pydantic import BaseModel class Boo(BaseModel): int: int | None = None m = Boo(int=123) # Will fail to validate. ``` Because of how Python evaluates [annotated assignment statements][annassign], the statement is equivalent to `int: None = None`, thus leading to a validation error. ### Model methods and properties The example above only shows the tip of the iceberg of what models can do. Model classes possess the following methods and attributes: * [`model_validate()`][pydantic.main.BaseModel.model_validate]: Validates the given object against the Pydantic model. See [Validating data](#validating-data). * [`model_validate_json()`][pydantic.main.BaseModel.model_validate_json]: Validates the given JSON data against the Pydantic model. See [Validating data](#validating-data). * [`model_construct()`][pydantic.main.BaseModel.model_construct]: Creates models without running validation. See [Creating models without validation](#creating-models-without-validation). * [`model_dump()`][pydantic.main.BaseModel.model_dump]: Returns a dictionary of the model's fields and values. See [Serialization](serialization.md#python-mode). * [`model_dump_json()`][pydantic.main.BaseModel.model_dump_json]: Returns a JSON string representation of [`model_dump()`][pydantic.main.BaseModel.model_dump]. See [Serialization](serialization.md#json-mode). * [`model_copy()`][pydantic.main.BaseModel.model_copy]: Returns a copy (by default, shallow copy) of the model. See [Model copy](#model-copy). * [`model_json_schema()`][pydantic.main.BaseModel.model_json_schema]: Returns a jsonable dictionary representing the model's JSON Schema. See [JSON Schema](json_schema.md). * [`model_fields`][pydantic.main.BaseModel.model_fields]: A mapping between field names and their definitions ([`FieldInfo`][pydantic.fields.FieldInfo] instances). * [`model_computed_fields`][pydantic.main.BaseModel.model_computed_fields]: A mapping between computed field names and their definitions ([`ComputedFieldInfo`][pydantic.fields.ComputedFieldInfo] instances). * [`model_parametrized_name()`][pydantic.main.BaseModel.model_parametrized_name]: Computes the class name for parametrizations of generic classes. * [`model_post_init()`][pydantic.main.BaseModel.model_post_init]: Performs additional actions after the model is instantiated and all field validators are applied. * [`model_rebuild()`][pydantic.main.BaseModel.model_rebuild]: Rebuilds the model schema, which also supports building recursive generic models. See [Rebuilding model schema](#rebuilding-model-schema). Model instances possess the following attributes: * [`model_extra`][pydantic.main.BaseModel.model_extra]: The extra fields set during validation. * [`model_fields_set`][pydantic.main.BaseModel.model_fields_set]: The set of fields which were explicitly provided when the model was initialized. !!! note See the API documentation of [`BaseModel`][pydantic.main.BaseModel] for the class definition including a full list of methods and attributes. !!! tip See [Changes to `pydantic.BaseModel`](../migration.md#changes-to-pydanticbasemodel) in the [Migration Guide](../migration.md) for details on changes from Pydantic V1. ## Data conversion Pydantic may cast input data to force it to conform to model field types, and in some cases this may result in a loss of information. For example: ```python from pydantic import BaseModel class Model(BaseModel): a: int b: float c: str print(Model(a=3.000, b='2.72', c=b'binary data').model_dump()) #> {'a': 3, 'b': 2.72, 'c': 'binary data'} ``` This is a deliberate decision of Pydantic, and is frequently the most useful approach. See [this issue](https://github.com/pydantic/pydantic/issues/578) for a longer discussion on the subject. Nevertheless, Pydantic provides a [strict mode](strict_mode.md), where no data conversion is performed. Values must be of the same type as the declared field type. This is also the case for collections. In most cases, you shouldn't make use of abstract container classes and just use a concrete type, such as [`list`][]: ```python from pydantic import BaseModel class Model(BaseModel): items: list[int] # (1)! print(Model(items=(1, 2, 3))) #> items=[1, 2, 3] ``` 1. In this case, you might be tempted to use the abstract [`Sequence`][collections.abc.Sequence] type to allow both lists and tuples. But Pydantic takes care of converting the tuple input to a list, so in most cases this isn't necessary. Besides, using these abstract types can also lead to [poor validation performance](./performance.md#sequence-vs-list-or-tuple-with-mapping-vs-dict), and in general using concrete container types will avoid unnecessary checks. [](){#extra-fields} ## Extra data By default, Pydantic models **won't error when you provide extra data**, and these values will simply be ignored: ```python from pydantic import BaseModel class Model(BaseModel): x: int m = Model(x=1, y='a') assert m.model_dump() == {'x': 1} ``` The [`extra`][pydantic.ConfigDict.extra] configuration value can be used to control this behavior: ```python from pydantic import BaseModel, ConfigDict class Model(BaseModel): x: int model_config = ConfigDict(extra='allow') m = Model(x=1, y='a') # (1)! assert m.model_dump() == {'x': 1, 'y': 'a'} assert m.__pydantic_extra__ == {'y': 'a'} ``` 1. If [`extra`][pydantic.ConfigDict.extra] was set to `'forbid'`, this would fail. The configuration can take three values: * `'ignore'`: Providing extra data is ignored (the default). * `'forbid'`: Providing extra data is not permitted. * `'allow'`: Providing extra data is allowed and stored in the `__pydantic_extra__` dictionary attribute. The `__pydantic_extra__` can explicitly be annotated to provide validation for extra fields. The validation methods (e.g. [`model_validate()`][pydantic.main.BaseModel.model_validate]) have an optional `extra` argument that will override the `extra` configuration value of the model for that validation call. For more details, refer to the [`extra`][pydantic.ConfigDict.extra] API documentation. Pydantic dataclasses also support extra data (see the [dataclass configuration](./dataclasses.md#dataclass-config) section). ## Nested models More complex hierarchical data structures can be defined using models themselves as types in annotations. ```python from pydantic import BaseModel class Foo(BaseModel): count: int size: float | None = None class Bar(BaseModel): apple: str = 'x' banana: str = 'y' class Spam(BaseModel): foo: Foo bars: list[Bar] m = Spam(foo={'count': 4}, bars=[{'apple': 'x1'}, {'apple': 'x2'}]) print(m) """ foo=Foo(count=4, size=None) bars=[Bar(apple='x1', banana='y'), Bar(apple='x2', banana='y')] """ print(m.model_dump()) """ { 'foo': {'count': 4, 'size': None}, 'bars': [{'apple': 'x1', 'banana': 'y'}, {'apple': 'x2', 'banana': 'y'}], } """ ``` ### Cyclic references When working with self-referencing recursive models, it is possible that you might encounter cyclic references in validation inputs. For example, this can happen when validating ORM instances with back-references from attributes. Rather than raising a [`RecursionError`][] while attempting to validate data with cyclic references, Pydantic is able to detect the cyclic reference and raise an appropriate [`ValidationError`][pydantic_core.ValidationError]: === "Python 3.10 and above" ```python from pydantic import BaseModel, ValidationError class ModelA(BaseModel): b: 'ModelB | None' = None # (1)! class ModelB(BaseModel): a: ModelA | None = None cyclic_data = {} cyclic_data['a'] = {'b': cyclic_data} print(cyclic_data) #> {'a': {'b': {...}}} try: ModelB.model_validate(cyclic_data) except ValidationError as exc: print(exc) """ 1 validation error for ModelB a.b Recursion error - cyclic reference detected [type=recursion_loop, input_value={'a': {'b': {...}}}, input_type=dict] """ ``` 1. As `ModelB` is not yet defined, a [forward annotation](forward_annotations.md) needs to be used. === "Python 3.14 and above" ```python {requires="3.14" lint="skip"} from pydantic import BaseModel, ValidationError class ModelA(BaseModel): b: ModelB | None = None class ModelB(BaseModel): a: ModelA | None = None cyclic_data = {} cyclic_data['a'] = {'b': cyclic_data} print(cyclic_data) #> {'a': {'b': {...}}} try: ModelB.model_validate(cyclic_data) except ValidationError as exc: print(exc) """ 1 validation error for ModelB a.b Recursion error - cyclic reference detected [type=recursion_loop, input_value={'a': {'b': {...}}}, input_type=dict] """ ``` See also: the [cyclic references example](../examples/cyclic_references.md), showing how to handle such cyclic references during validation and serialization, and the [cyclic imports](forward_annotations.md#cyclic-imports) section, for models referencing each other from separate modules. ## Rebuilding model schema When you define a model class in your code, Pydantic will analyze the body of the class to collect a variety of information required to perform validation and serialization, gathered in a core schema. Notably, the model's type annotations are evaluated to understand the valid types for each field (more information can be found in the [Architecture](../internals/architecture.md) documentation). However, it might be the case that annotations refer to symbols not defined when the model class is being created. To circumvent this issue, the [`model_rebuild()`][pydantic.main.BaseModel.model_rebuild] method can be used: ```python from pydantic import BaseModel, PydanticUserError class Foo(BaseModel): x: 'Bar' # (1)! try: Foo.model_json_schema() except PydanticUserError as e: print(e) """ `Foo` is not fully defined; you should define `Bar`, then call `Foo.model_rebuild()`. For further information visit https://errors.pydantic.dev/2/u/class-not-fully-defined """ class Bar(BaseModel): pass Foo.model_rebuild() print(Foo.model_json_schema()) """ { '$defs': {'Bar': {'properties': {}, 'title': 'Bar', 'type': 'object'}}, 'properties': {'x': {'$ref': '#/$defs/Bar'}}, 'required': ['x'], 'title': 'Foo', 'type': 'object', } """ ``` 1. `Bar` is not yet defined when the `Foo` class is being created. For this reason, a [forward annotation](forward_annotations.md) is being used. Pydantic tries to determine when this is necessary automatically and error if it wasn't done, but you may want to call [`model_rebuild()`][pydantic.main.BaseModel.model_rebuild] proactively when dealing with recursive models or generics. In V2, [`model_rebuild()`][pydantic.main.BaseModel.model_rebuild] replaced `update_forward_refs()` from V1. There are some slight differences with the new behavior. The biggest change is that when calling [`model_rebuild()`][pydantic.main.BaseModel.model_rebuild] on the outermost model, it builds a core schema used for validation of the whole model (nested models and all), so all types at all levels need to be ready before [`model_rebuild()`][pydantic.main.BaseModel.model_rebuild] is called. ## Validating data Pydantic can validate data in three different modes: *Python*, *JSON* and *strings*. The *Python* mode gets used when using: * The `__init__()` model constructor. Field values must be provided using keyword arguments. * [`model_validate()`][pydantic.main.BaseModel.model_validate]: data can be provided either as a dictionary, or as a model instance (by default, instances are assumed to be valid; see the [`revalidate_instances`][pydantic.ConfigDict.revalidate_instances] setting). [Arbitrary objects](#arbitrary-class-instances) can also be provided if explicitly enabled. The *JSON* and *strings* modes can be used with dedicated methods: * [`model_validate_json()`][pydantic.main.BaseModel.model_validate_json]: data is validated as a JSON string or `bytes` object. If your incoming data is a JSON payload, this is generally considered faster (instead of manually parsing the data as a dictionary). Learn more about JSON parsing in the [JSON](../concepts/json.md) documentation. * [`model_validate_strings()`][pydantic.main.BaseModel.model_validate_strings]: data is validated as a dictionary (can be nested) with string keys and values and validates the data in JSON mode so that said strings can be coerced into the correct types. Compared to using the model constructor, it is possible to control several validation parameters when using the `model_validate_*()` methods ([strictness](./strict_mode.md), [extra data](#extra-data), [validation context](./validators.md#validation-context), etc.). !!! note Depending on the types and model configuration involved, the *Python* and *JSON* modes may have different validation behavior (e.g. with [strictness](./strict_mode.md)). If you have data coming from a non-JSON source, but want the same validation behavior and errors you'd get from the *JSON* mode, our recommendation for now is to either dump your data to JSON (e.g. using [`json.dumps()`][json.dumps]), or use [`model_validate_strings()`][pydantic.main.BaseModel.model_validate_strings] if the data takes the form of a (potentially nested) dictionary with string keys and values. Progress for this feature can be tracked in [this issue](https://github.com/pydantic/pydantic/issues/11154). ```python from datetime import datetime from pydantic import BaseModel, ValidationError class User(BaseModel): id: int name: str = 'John Doe' signup_ts: datetime | None = None m = User.model_validate({'id': 123, 'name': 'James'}) print(m) #> id=123 name='James' signup_ts=None try: m = User.model_validate_json('{"id": 123, "name": 123}') except ValidationError as e: print(e) """ 1 validation error for User name Input should be a valid string [type=string_type, input_value=123, input_type=int] """ m = User.model_validate_strings({'id': '123', 'name': 'James'}) print(m) #> id=123 name='James' signup_ts=None m = User.model_validate_strings( {'id': '123', 'name': 'James', 'signup_ts': '2024-04-01T12:00:00'} ) print(m) #> id=123 name='James' signup_ts=datetime.datetime(2024, 4, 1, 12, 0) try: m = User.model_validate_strings( {'id': '123', 'name': 'James', 'signup_ts': '2024-04-01'}, strict=True ) except ValidationError as e: print(e) """ 1 validation error for User signup_ts Input should be a valid datetime, invalid datetime separator, expected `T`, `t`, `_` or space [type=datetime_parsing, input_value='2024-04-01', input_type=str] """ ``` ### Creating models without validation Pydantic also provides the [`model_construct()`][pydantic.main.BaseModel.model_construct] method, which allows models to be created **without validation**. This can be useful in at least a few cases: * when working with complex data that is already known to be valid (for performance reasons) * when one or more of the validator functions are non-idempotent * when one or more of the validator functions have side effects that you don't want to be triggered. !!! warning [`model_construct()`][pydantic.main.BaseModel.model_construct] does not do any validation, meaning it can create models which are invalid. **You should only ever use the [`model_construct()`][pydantic.main.BaseModel.model_construct] method with data which has already been validated, or that you definitely trust.** !!! note In Pydantic V2, the performance gap between validation (either with direct instantiation or the `model_validate*` methods) and [`model_construct()`][pydantic.main.BaseModel.model_construct] has been narrowed considerably. For simple models, going with validation may even be faster. If you are using [`model_construct()`][pydantic.main.BaseModel.model_construct] for performance reasons, you may want to profile your use case before assuming it is actually faster. Note that for [root models](#rootmodel-and-custom-root-types), the root value can be passed to [`model_construct()`][pydantic.main.BaseModel.model_construct] positionally, instead of using a keyword argument. Here are some additional notes on the behavior of [`model_construct()`][pydantic.main.BaseModel.model_construct]: * When we say "no validation is performed" — this includes converting dictionaries to model instances. So if you have a field referring to a model type, you will need to convert the inner dictionary to a model yourself. * If you do not pass keyword arguments for fields with defaults, the default values will still be used. * For models with private attributes, the `__pydantic_private__` dictionary will be populated the same as it would be when creating the model with validation. * No `__init__` method from the model or any of its parent classes will be called, even when a custom `__init__` method is defined. !!! note "On [extra data](#extra-data) behavior with [`model_construct()`][pydantic.main.BaseModel.model_construct]" * For models with [`extra`][pydantic.ConfigDict.extra] set to `'allow'`, data not corresponding to fields will be correctly stored in the `__pydantic_extra__` dictionary and saved to the model's `__dict__` attribute. * For models with [`extra`][pydantic.ConfigDict.extra] set to `'ignore'`, data not corresponding to fields will be ignored — that is, not stored in `__pydantic_extra__` or `__dict__` on the instance. * Unlike when instantiating the model with validation, a call to [`model_construct()`][pydantic.main.BaseModel.model_construct] with [`extra`][pydantic.ConfigDict.extra] set to `'forbid'` doesn't raise an error in the presence of data not corresponding to fields. Rather, said input data is simply ignored. ### Defining a custom `__init__()` Pydantic provides a default `__init__()` implementation for Pydantic models, that is called *only* when using the model constructor (and not with the `model_validate_*()` methods). This implementation delegates validation to `pydantic-core`. However, it is possible to define a custom `__init__()` on your models. In this case, it will be called unconditionally from all the [validation methods](#validating-data), without performing validation (and so you should call `super().__init__(**kwargs)` in your implementation). Defining a custom `__init__()` is not recommended, as all the validation parameters ([strictness](./strict_mode.md), [extra data behavior](#extra-data), [validation context](./validators.md#validation-context)) will be lost. If you need to perform actions after the model was initialized, you can make use of *after* [field](./validators.md#field-after-validator) or [model](./validators.md#model-after-validator) validators, or define a [`model_post_init()`][pydantic.main.BaseModel.model_post_init] implementation: ```python import logging from typing import Any from pydantic import BaseModel class MyModel(BaseModel): id: int def model_post_init(self, context: Any) -> None: logging.info("Model initialized with id %d", self.id) ``` ## Error handling Pydantic will raise a [`ValidationError`][pydantic_core.ValidationError] exception whenever it finds an error in the data it's validating. A single exception will be raised regardless of the number of errors found, and that validation error will contain information about all of the errors and how they happened. See [Error Handling](../errors/errors.md) for details on standard and custom errors. As a demonstration: ```python from pydantic import BaseModel, ValidationError class Model(BaseModel): list_of_ints: list[int] a_float: float data = { 'list_of_ints': ['1', 2, 'bad'], 'a_float': 'not a float', } try: Model(**data) except ValidationError as e: print(e) """ 2 validation errors for Model list_of_ints.2 Input should be a valid integer, unable to parse string as an integer [type=int_parsing, input_value='bad', input_type=str] a_float Input should be a valid number, unable to parse string as a number [type=float_parsing, input_value='not a float', input_type=str] """ ``` In an example like this one, the offending `data` is right there in the code. A [`ValidationError`][pydantic_core.ValidationError] includes the value rejected at each failing location, but in a running application you may also need those details in their request or job context. [Logfire records failed validations](../errors/troubleshooting.md) with both. ## Arbitrary class instances (Formerly known as "ORM Mode"/`from_orm()`). When using the [`model_validate()`][pydantic.main.BaseModel.model_validate] method, Pydantic can also validate arbitrary objects, by getting attributes on the object corresponding the field names. One common application of this functionality is integration with object-relational mappings (ORMs). This feature need to be manually enabled, either by setting the [`from_attributes`][pydantic.config.ConfigDict.from_attributes] configuration value, or by using the `from_attributes` parameter on [`model_validate()`][pydantic.main.BaseModel.model_validate]. The example here uses [SQLAlchemy](https://www.sqlalchemy.org/), but the same approach should work for any ORM. ```python from typing import Annotated from sqlalchemy import ARRAY, String from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column from pydantic import BaseModel, ConfigDict, StringConstraints class Base(DeclarativeBase): pass class CompanyOrm(Base): __tablename__ = 'companies' id: Mapped[int] = mapped_column(primary_key=True, nullable=False) public_key: Mapped[str] = mapped_column( String(20), index=True, nullable=False, unique=True ) domains: Mapped[list[str]] = mapped_column(ARRAY(String(255))) class CompanyModel(BaseModel): model_config = ConfigDict(from_attributes=True) id: int public_key: Annotated[str, StringConstraints(max_length=20)] domains: list[Annotated[str, StringConstraints(max_length=255)]] co_orm = CompanyOrm( id=123, public_key='foobar', domains=['example.com', 'foobar.com'], ) print(co_orm) #> <__main__.CompanyOrm object at 0x0123456789ab> co_model = CompanyModel.model_validate(co_orm) print(co_model) #> id=123 public_key='foobar' domains=['example.com', 'foobar.com'] ``` ### Nested attributes When using attributes to validate models, model instances will be created from both top-level attributes and deeper-nested attributes as appropriate. Here is an example demonstrating the principle: ```python from pydantic import BaseModel, ConfigDict class PetCls: def __init__(self, *, name: str) -> None: self.name = name class PersonCls: def __init__(self, *, name: str, pets: list[PetCls]) -> None: self.name = name self.pets = pets class Pet(BaseModel): model_config = ConfigDict(from_attributes=True) name: str class Person(BaseModel): model_config = ConfigDict(from_attributes=True) name: str pets: list[Pet] bones = PetCls(name='Bones') orion = PetCls(name='Orion') anna = PersonCls(name='Anna', pets=[bones, orion]) anna_model = Person.model_validate(anna) print(anna_model) #> name='Anna' pets=[Pet(name='Bones'), Pet(name='Orion')] ``` ## Model copy ??? api "API Documentation" [`pydantic.main.BaseModel.model_copy`][pydantic.main.BaseModel.model_copy]
The [`model_copy()`][pydantic.BaseModel.model_copy] method allows models to be duplicated (with optional updates that *aren't* validated), which is particularly useful when working with frozen models. ```python from pydantic import BaseModel class BarModel(BaseModel): whatever: int class FooBarModel(BaseModel): banana: float foo: str bar: BarModel m = FooBarModel(banana=3.14, foo='hello', bar={'whatever': 123}) print(m.model_copy(update={'banana': 0})) #> banana=0 foo='hello' bar=BarModel(whatever=123) # normal copy gives the same object reference for bar: print(id(m.bar) == id(m.model_copy().bar)) #> True # deep copy gives a new object reference for `bar`: print(id(m.bar) == id(m.model_copy(deep=True).bar)) #> False ``` ## Generic models Pydantic supports the creation of generic models to make it easier to reuse a common model structure. Both the new [type parameter syntax][type-params] (introduced by [PEP 695](https://peps.python.org/pep-0695/) in Python 3.12) and the old syntax are supported (refer to [the Python documentation](https://docs.python.org/3/library/typing.html#building-generic-types-and-type-aliases) for more details). Here is an example using a generic Pydantic model to create an easily-reused HTTP response payload wrapper: === "Python 3.10 and above" ```python {upgrade="skip"} from typing import Generic, TypeVar from pydantic import BaseModel, ValidationError DataT = TypeVar('DataT') # (1)! class DataModel(BaseModel): number: int class Response(BaseModel, Generic[DataT]): # (2)! data: DataT # (3)! print(Response[int](data=1)) #> data=1 print(Response[str](data='value')) #> data='value' print(Response[str](data='value').model_dump()) #> {'data': 'value'} data = DataModel(number=1) print(Response[DataModel](data=data).model_dump()) #> {'data': {'number': 1}} try: Response[int](data='value') except ValidationError as e: print(e) """ 1 validation error for Response[int] data Input should be a valid integer, unable to parse string as an integer [type=int_parsing, input_value='value', input_type=str] """ ``` 1. Declare one or more [type variables][typing.TypeVar] to use to parameterize your model. 2. Declare a Pydantic model that inherits from [`BaseModel`][pydantic.BaseModel] and [`typing.Generic`][] (in this specific order), and add the list of type variables you declared previously as parameters to the [`Generic`][typing.Generic] parent. 3. Use the type variables as annotations where you will want to replace them with other types. === "Python 3.12 and above (new syntax)" ```python {requires="3.12" upgrade="skip" lint="skip"} from pydantic import BaseModel, ValidationError class DataModel(BaseModel): number: int class Response[DataT](BaseModel): # (1)! data: DataT # (2)! print(Response[int](data=1)) #> data=1 print(Response[str](data='value')) #> data='value' print(Response[str](data='value').model_dump()) #> {'data': 'value'} data = DataModel(number=1) print(Response[DataModel](data=data).model_dump()) #> {'data': {'number': 1}} try: Response[int](data='value') except ValidationError as e: print(e) """ 1 validation error for Response[int] data Input should be a valid integer, unable to parse string as an integer [type=int_parsing, input_value='value', input_type=str] """ ``` 1. Declare a Pydantic model and add the list of type variables as type parameters. 2. Use the type variables as annotations where you will want to replace them with other types. /// version-added | v2.11 Full support for the [type parameter syntax][type-params] and [type variable defaults](https://typing.python.org/en/latest/spec/generics.html#type-parameter-defaults). /// !!! warning When parametrizing a model with a concrete type, Pydantic **does not** validate that the provided type is [assignable to the type variable][spec-typevars-bound] if it has an upper bound. [spec-typevars-bound]: https://typing.readthedocs.io/en/latest/spec/generics.html#type-variables-with-an-upper-bound Any [configuration](./config.md), [validation](./validators.md) or [serialization](./serialization.md) logic set on the generic model will also be applied to the parametrized classes, in the same way as when inheriting from a model class. Any custom methods or attributes will also be inherited. Generic models also integrate properly with type checkers, so you get all the type checking you would expect if you were to declare a distinct type for each parametrization. !!! note Internally, Pydantic creates subclasses of the generic model at runtime when the generic model class is parametrized. These classes are cached, so there should be minimal overhead introduced by the use of generics models. To inherit from a generic model and preserve the fact that it is generic, the subclass must also inherit from [`Generic`][typing.Generic]: ```python from typing import Generic, TypeVar from pydantic import BaseModel TypeX = TypeVar('TypeX') class BaseClass(BaseModel, Generic[TypeX]): X: TypeX class ChildClass(BaseClass[TypeX], Generic[TypeX]): pass # Parametrize `TypeX` with `int`: print(ChildClass[int](X=1)) #> X=1 ``` You can also create a generic subclass of a model that partially or fully replaces the type variables in the superclass: ```python from typing import Generic, TypeVar from pydantic import BaseModel TypeX = TypeVar('TypeX') TypeY = TypeVar('TypeY') TypeZ = TypeVar('TypeZ') class BaseClass(BaseModel, Generic[TypeX, TypeY]): x: TypeX y: TypeY class ChildClass(BaseClass[int, TypeY], Generic[TypeY, TypeZ]): z: TypeZ # Parametrize `TypeY` with `str`: print(ChildClass[str, int](x='1', y='y', z='3')) #> x=1 y='y' z=3 ``` If the name of the concrete subclasses is important, you can also override the default name generation by overriding the [`model_parametrized_name()`][pydantic.main.BaseModel.model_parametrized_name] method: ```python from typing import Any, Generic, TypeVar from pydantic import BaseModel DataT = TypeVar('DataT') class Response(BaseModel, Generic[DataT]): data: DataT @classmethod def model_parametrized_name(cls, params: tuple[type[Any], ...]) -> str: return f'{params[0].__name__.title()}Response' print(repr(Response[int](data=1))) #> IntResponse(data=1) print(repr(Response[str](data='a'))) #> StrResponse(data='a') ``` You can use parametrized generic models as types in other models: ```python from typing import Generic, TypeVar from pydantic import BaseModel T = TypeVar('T') class ResponseModel(BaseModel, Generic[T]): content: T class Product(BaseModel): name: str price: float class Order(BaseModel): id: int product: ResponseModel[Product] product = Product(name='Apple', price=0.5) response = ResponseModel[Product](content=product) order = Order(id=1, product=response) print(repr(order)) """ Order(id=1, product=ResponseModel[Product](content=Product(name='Apple', price=0.5))) """ ``` Using the same type variable in nested models allows you to enforce typing relationships at different points in your model: ```python from typing import Generic, TypeVar from pydantic import BaseModel, ValidationError T = TypeVar('T') class InnerT(BaseModel, Generic[T]): inner: T class OuterT(BaseModel, Generic[T]): outer: T nested: InnerT[T] nested = InnerT[int](inner=1) print(OuterT[int](outer=1, nested=nested)) #> outer=1 nested=InnerT[int](inner=1) try: print(OuterT[int](outer='a', nested=InnerT(inner='a'))) # (1)! except ValidationError as e: print(e) """ 2 validation errors for OuterT[int] outer Input should be a valid integer, unable to parse string as an integer [type=int_parsing, input_value='a', input_type=str] nested.inner Input should be a valid integer, unable to parse string as an integer [type=int_parsing, input_value='a', input_type=str] """ ``` 1. The `OuterT` model is parametrized with `int`, but the data associated with the `T` annotations during validation is of type `str`, leading to validation errors. !!! warning While it may not raise an error, we strongly advise against using parametrized generics in [`isinstance()`](https://docs.python.org/3/library/functions.html#isinstance) checks. For example, you should not do `isinstance(my_model, MyGenericModel[int])`. However, it is fine to do `isinstance(my_model, MyGenericModel)` (note that, for standard generics, it would raise an error to do a subclass check with a parameterized generic class). If you need to perform [`isinstance()`](https://docs.python.org/3/library/functions.html#isinstance) checks against parametrized generics, you can do this by subclassing the parametrized generic class: ```python {test="skip" lint="skip"} class MyIntModel(MyGenericModel[int]): ... isinstance(my_model, MyIntModel) ``` ??? note "Implementation Details" When using nested generic models, Pydantic sometimes performs revalidation in an attempt to produce the most intuitive validation result. Specifically, if you have a field of type `GenericModel[SomeType]` and you validate data like `GenericModel[SomeCompatibleType]` against this field, we will inspect the data, recognize that the input data is sort of a "loose" subclass of `GenericModel`, and revalidate the contained `SomeCompatibleType` data. This adds some validation overhead, but makes things more intuitive for cases like that shown below. ```python from typing import Any, Generic, TypeVar from pydantic import BaseModel T = TypeVar('T') class GenericModel(BaseModel, Generic[T]): a: T class Model(BaseModel): inner: GenericModel[Any] print(repr(Model.model_validate(Model(inner=GenericModel[int](a=1))))) #> Model(inner=GenericModel[Any](a=1)) ``` Note, validation will still fail if you, for example are validating against `GenericModel[int]` and pass in an instance `GenericModel[str](a='not an int')`. It's also worth noting that this pattern will re-trigger any custom validation as well, like additional model validators and the like. Validators will be called once on the first pass, validating directly against `GenericModel[Any]`. That validation fails, as `GenericModel[int]` is not a subclass of `GenericModel[Any]`. This relates to the warning above about the complications of using parametrized generics in `isinstance()` and `issubclass()` checks. Then, the validators will be called again on the second pass, during more lax force-revalidation phase, which succeeds. To better understand this consequence, see below: ```python {test="skip"} from typing import Any, Generic, Self, TypeVar from pydantic import BaseModel, model_validator T = TypeVar('T') class GenericModel(BaseModel, Generic[T]): a: T @model_validator(mode='after') def validate_after(self: Self) -> Self: print('after validator running custom validation...') return self class Model(BaseModel): inner: GenericModel[Any] m = Model.model_validate(Model(inner=GenericModel[int](a=1))) #> after validator running custom validation... #> after validator running custom validation... print(repr(m)) #> Model(inner=GenericModel[Any](a=1)) ``` ### Validation of unparametrized type variables When leaving type variables unparametrized, Pydantic treats generic models similarly to how it treats built-in generic types like [`list`][] and [`dict`][]: * If the type variable is [bound](https://typing.readthedocs.io/en/latest/reference/generics.html#type-variables-with-upper-bounds) or [constrained](https://typing.readthedocs.io/en/latest/reference/generics.html#type-variables-with-constraints) to a specific type, it will be used. * If the type variable has a default type (as specified by [PEP 696](https://peps.python.org/pep-0696/)), it will be used. * For unbound or unconstrained type variables, Pydantic will fallback to [`Any`][typing.Any]. ```python from typing import Generic from typing_extensions import TypeVar from pydantic import BaseModel, ValidationError T = TypeVar('T') U = TypeVar('U', bound=int) V = TypeVar('V', default=str) class Model(BaseModel, Generic[T, U, V]): t: T u: U v: V print(Model(t='t', u=1, v='v')) #> t='t' u=1 v='v' try: Model(t='t', u='u', v=1) except ValidationError as exc: print(exc) """ 2 validation errors for Model u Input should be a valid integer, unable to parse string as an integer [type=int_parsing, input_value='u', input_type=str] v Input should be a valid string [type=string_type, input_value=1, input_type=int] """ ``` !!! warning In some cases, validation against an unparametrized generic model can lead to data loss. Specifically, if a subtype of the type variable upper bound, constraints, or default is being used and the model isn't explicitly parametrized, the resulting type **will not be** the one being provided: ```python from typing import Generic, TypeVar from pydantic import BaseModel ItemT = TypeVar('ItemT', bound='ItemBase') class ItemBase(BaseModel): ... class IntItem(ItemBase): value: int class ItemHolder(BaseModel, Generic[ItemT]): item: ItemT loaded_data = {'item': {'value': 1}} print(ItemHolder(**loaded_data)) # (1)! #> item=ItemBase() print(ItemHolder[IntItem](**loaded_data)) # (2)! #> item=IntItem(value=1) ``` 1. When the generic isn't parametrized, the input data is validated against the `ItemT` upper bound. Given that `ItemBase` has no fields, the `item` field information is lost. 2. In this case, the type variable is explicitly parametrized, so the input data is validated against the `IntItem` class. ### Serialization of unparametrized type variables The behavior of serialization differs when using type variables with [upper bounds](https://typing.readthedocs.io/en/latest/reference/generics.html#type-variables-with-upper-bounds), [constraints](https://typing.readthedocs.io/en/latest/reference/generics.html#type-variables-with-constraints), or a default value: If a Pydantic model is used in a type variable upper bound and the type variable is never parametrized, then Pydantic will use the upper bound for validation but treat the value as [`Any`][typing.Any] in terms of serialization: ```python from typing import Generic, TypeVar from pydantic import BaseModel class ErrorDetails(BaseModel): foo: str ErrorDataT = TypeVar('ErrorDataT', bound=ErrorDetails) class Error(BaseModel, Generic[ErrorDataT]): message: str details: ErrorDataT class MyErrorDetails(ErrorDetails): bar: str # serialized as Any error = Error( message='We just had an error', details=MyErrorDetails(foo='var', bar='var2'), ) assert error.model_dump() == { 'message': 'We just had an error', 'details': { 'foo': 'var', 'bar': 'var2', }, } # serialized using the concrete parametrization # note that `'bar': 'var2'` is missing error = Error[ErrorDetails]( message='We just had an error', details=ErrorDetails(foo='var'), ) assert error.model_dump() == { 'message': 'We just had an error', 'details': { 'foo': 'var', }, } ``` Here's another example of the above behavior, enumerating all permutations regarding bound specification and generic type parametrization: ```python from typing import Generic, TypeVar from pydantic import BaseModel TBound = TypeVar('TBound', bound=BaseModel) TNoBound = TypeVar('TNoBound') class IntValue(BaseModel): value: int class ItemBound(BaseModel, Generic[TBound]): item: TBound class ItemNoBound(BaseModel, Generic[TNoBound]): item: TNoBound item_bound_inferred = ItemBound(item=IntValue(value=3)) item_bound_explicit = ItemBound[IntValue](item=IntValue(value=3)) item_no_bound_inferred = ItemNoBound(item=IntValue(value=3)) item_no_bound_explicit = ItemNoBound[IntValue](item=IntValue(value=3)) # calling `print(x.model_dump())` on any of the above instances results in the following: #> {'item': {'value': 3}} ``` However, if [constraints](https://typing.readthedocs.io/en/latest/reference/generics.html#type-variables-with-constraints) or a default value (as per [PEP 696](https://peps.python.org/pep-0696/)) is being used, then the default type or constraints will be used for both validation and serialization if the type variable is not parametrized. You can override this behavior using [`SerializeAsAny`](./serialization.md#serializeasany-annotation): ```python from typing import Generic from typing_extensions import TypeVar from pydantic import BaseModel, SerializeAsAny class ErrorDetails(BaseModel): foo: str ErrorDataT = TypeVar('ErrorDataT', default=ErrorDetails) class Error(BaseModel, Generic[ErrorDataT]): message: str details: ErrorDataT class MyErrorDetails(ErrorDetails): bar: str # serialized using the default's serializer error = Error( message='We just had an error', details=MyErrorDetails(foo='var', bar='var2'), ) assert error.model_dump() == { 'message': 'We just had an error', 'details': { 'foo': 'var', }, } # If `ErrorDataT` was using an upper bound, `bar` would be present in `details`. class SerializeAsAnyError(BaseModel, Generic[ErrorDataT]): message: str details: SerializeAsAny[ErrorDataT] # serialized as Any error = SerializeAsAnyError( message='We just had an error', details=MyErrorDetails(foo='var', bar='baz'), ) assert error.model_dump() == { 'message': 'We just had an error', 'details': { 'foo': 'var', 'bar': 'baz', }, } ``` ## Dynamic model creation ??? api "API Documentation" [`pydantic.main.create_model`][pydantic.main.create_model]
There are some occasions where it is desirable to create a model using runtime information to specify the fields. Pydantic provides the [`create_model()`][pydantic.create_model] function to allow models to be created dynamically: ```python from pydantic import BaseModel, create_model DynamicFoobarModel = create_model('DynamicFoobarModel', foo=str, bar=(int, 123)) # Equivalent to: class StaticFoobarModel(BaseModel): foo: str bar: int = 123 ``` Field definitions are specified as keyword arguments, and should either be: * A single element, representing the type annotation of the field. * A two-tuple, the first element being the type and the second element the assigned value (either a default or the [`Field()`][pydantic.Field] function). /// version-changed | v2.11 When providing a single element for field definitions, any type can be used (previously, only an [`Annotated`][typing.Annotated] form could be provided). /// Here is a more advanced example: ```python from typing import Annotated from pydantic import BaseModel, Field, PrivateAttr, create_model DynamicModel = create_model( 'DynamicModel', foo=(str, Field(alias='FOO')), bar=Annotated[str, Field(description='Bar field')], _private=(int, PrivateAttr(default=1)), ) class StaticModel(BaseModel): foo: str = Field(alias='FOO') bar: Annotated[str, Field(description='Bar field')] _private: int = PrivateAttr(default=1) ``` The special keyword arguments `__config__` and `__base__` can be used to customize the new model. This includes extending a base model with extra fields. ```python from pydantic import BaseModel, create_model class FooModel(BaseModel): foo: str bar: int = 123 BarModel = create_model( 'BarModel', apple=(str, 'russet'), banana=(str, 'yellow'), __base__=FooModel, ) print(BarModel) #> print(BarModel.model_fields.keys()) #> dict_keys(['foo', 'bar', 'apple', 'banana']) ``` Attributes such as [validators](./validators.md), methods or [computed fields](./fields.md#the-computed_field-decorator) can be added to the class namespace using the `__namespace__` argument: ```python {rewrite_assert="false"} from pydantic import ( ValidationError, computed_field, create_model, field_validator, ) def alphanum(cls, v: str) -> str: assert v.isalnum(), 'must be alphanumeric' return v def full_name(self) -> str: return f'{self.first_name} {self.last_name}' UserModel = create_model( 'UserModel', first_name=str, last_name=str, __namespace__={ # (1)! 'check_alphanum': field_validator('first_name', 'last_name')(alphanum), 'full_name': computed_field(property(full_name)), }, ) user = UserModel(first_name='John', last_name='Doe') print(user.model_dump()) #> {'first_name': 'John', 'last_name': 'Doe', 'full_name': 'John Doe'} try: UserModel(first_name='J%hn', last_name='Doe') except ValidationError as e: print(e) """ 1 validation error for UserModel first_name Assertion failed, must be alphanumeric [type=assertion_error, input_value='J%hn', input_type=str] """ ``` 1. The keys of the namespace must not clash with any of the field names as internally, Pydantic gathers all members into a namespace and mimics the normal creation of a class using the [`types` module utilities](https://docs.python.org/3/library/types.html#dynamic-type-creation). /// version-added | v2.14 The `__namespace__` argument. Unlike `__validators__`, it isn't restricted to validators and can be used to provide any attribute to the class namespace (such as computed fields, properties or methods). It is now recommended to use `__namespace__` instead of `__validators__`, which will be deprecated in v3. /// !!! note To pickle a dynamically created model: * the model must be defined globally * the `__module__` argument must be provided !!! warning This function may execute arbitrary code contained in field annotations, if string references need to be evaluated. See [Security implications of introspecting annotations](https://docs.python.org/3/library/annotationlib.html#annotationlib-security) for more information. See also: the [dynamic model example](../examples/dynamic_models.md), providing guidelines to derive an optional model from another one. ## `RootModel` and custom root types ??? api "API Documentation" [`pydantic.root_model.RootModel`][pydantic.root_model.RootModel]
Pydantic models can be defined with a "custom root type" by subclassing [`pydantic.RootModel`][pydantic.RootModel]. The root type can be any type supported by Pydantic, and is specified by the generic parameter to `RootModel`. The root value can be passed to the model `__init__` or [`model_validate`][pydantic.main.BaseModel.model_validate] via the first and only argument. Here's an example of how this works: ```python from pydantic import RootModel Pets = RootModel[list[str]] PetsByName = RootModel[dict[str, str]] print(Pets(['dog', 'cat'])) #> root=['dog', 'cat'] print(Pets(['dog', 'cat']).model_dump_json()) #> ["dog","cat"] print(Pets.model_validate(['dog', 'cat'])) #> root=['dog', 'cat'] print(Pets.model_json_schema()) """ {'items': {'type': 'string'}, 'title': 'RootModel[list[str]]', 'type': 'array'} """ print(PetsByName({'Otis': 'dog', 'Milo': 'cat'})) #> root={'Otis': 'dog', 'Milo': 'cat'} print(PetsByName({'Otis': 'dog', 'Milo': 'cat'}).model_dump_json()) #> {"Otis":"dog","Milo":"cat"} print(PetsByName.model_validate({'Otis': 'dog', 'Milo': 'cat'})) #> root={'Otis': 'dog', 'Milo': 'cat'} ``` You can also create subclasses of the parametrized root model directly: ```python from pydantic import RootModel class Pets(RootModel[list[str]]): def describe(self) -> str: return f'Pets: {", ".join(self.root)}' my_pets = Pets.model_validate(['dog', 'cat']) print(my_pets.describe()) #> Pets: dog, cat ``` ## Faux immutability Models can be configured to be immutable via `model_config['frozen'] = True`. When this is set, attempting to change the values of instance attributes will raise errors. See the [API reference][pydantic.config.ConfigDict.frozen] for more details. !!! note This behavior was achieved in Pydantic V1 via the config setting `allow_mutation = False`. This config flag is deprecated in Pydantic V2, and has been replaced with `frozen`. !!! warning In Python, immutability is not enforced. Developers have the ability to modify objects that are conventionally considered "immutable" if they choose to do so. ```python from pydantic import BaseModel, ConfigDict, ValidationError class FooBarModel(BaseModel): model_config = ConfigDict(frozen=True) a: str b: dict foobar = FooBarModel(a='hello', b={'apple': 'pear'}) try: foobar.a = 'different' except ValidationError as e: print(e) """ 1 validation error for FooBarModel a Instance is frozen [type=frozen_instance, input_value='different', input_type=str] """ print(foobar.a) #> hello print(foobar.b) #> {'apple': 'pear'} foobar.b['apple'] = 'grape' print(foobar.b) #> {'apple': 'grape'} ``` Trying to change `a` caused an error, and `a` remains unchanged. However, the dict `b` is mutable, and the immutability of `foobar` doesn't stop `b` from being changed. ## Abstract base classes Pydantic models can be used alongside Python's [Abstract Base Classes](https://docs.python.org/3/library/abc.html) (ABCs). ```python import abc from pydantic import BaseModel class FooBarModel(BaseModel, abc.ABC): a: str b: int @abc.abstractmethod def my_abstract_method(self): pass ``` ## Field ordering Field order affects models in the following ways: * field order is preserved in the model [JSON Schema](json_schema.md) * field order is preserved in [validation errors](#error-handling) * field order is preserved when [serializing data](serialization.md#serializing-data) ```python from pydantic import BaseModel, ValidationError class Model(BaseModel): a: int b: int = 2 c: int = 1 d: int = 0 e: float print(Model.model_fields.keys()) #> dict_keys(['a', 'b', 'c', 'd', 'e']) m = Model(e=2, a=1) print(m.model_dump()) #> {'a': 1, 'b': 2, 'c': 1, 'd': 0, 'e': 2.0} try: Model(a='x', b='x', c='x', d='x', e='x') except ValidationError as err: error_locations = [e['loc'] for e in err.errors()] print(error_locations) #> [('a',), ('b',), ('c',), ('d',), ('e',)] ``` ## Automatically excluded attributes ### Class variables Attributes annotated with [`ClassVar`][typing.ClassVar] are properly treated by Pydantic as class variables, and will not become fields on model instances: ```python from typing import ClassVar from pydantic import BaseModel class Model(BaseModel): x: ClassVar[int] = 1 y: int = 2 m = Model() print(m) #> y=2 print(Model.x) #> 1 ``` ### Private model attributes ??? api "API Documentation" [`pydantic.fields.PrivateAttr`][pydantic.fields.PrivateAttr]
Attributes whose name has a leading underscore are not treated as fields by Pydantic, and are not included in the model schema. Instead, these are converted into a "private attribute" which is not validated or even set during calls to `__init__`, `model_validate`, etc. Here is an example of usage: ```python from datetime import datetime from random import randint from typing import Any from pydantic import BaseModel, PrivateAttr class TimeAwareModel(BaseModel): _processed_at: datetime = PrivateAttr(default_factory=datetime.now) _secret_value: str def model_post_init(self, context: Any) -> None: # this could also be done with `default_factory`: self._secret_value = randint(1, 5) m = TimeAwareModel() print(m._processed_at) #> 2032-01-02 03:04:05.000006 print(m._secret_value) #> 3 ``` Private attribute names must start with underscore to prevent conflicts with model fields. However, dunder names (such as `__attr__`) are not supported, and will be completely ignored from the model definition. /// version-added | v2.13 Default factories can take the validated model data as an argument. /// ## Model signature All Pydantic models will have their signature generated based on their fields: ```python import inspect from pydantic import BaseModel, Field class FooModel(BaseModel): id: int name: str = None description: str = 'Foo' apple: int = Field(alias='pear') print(inspect.signature(FooModel)) #> (*, id: int, name: str = None, description: str = 'Foo', pear: int) -> None ``` An accurate signature is useful for introspection purposes and libraries like `FastAPI` or `hypothesis`. The generated signature will also respect custom `__init__` functions: ```python import inspect from pydantic import BaseModel class MyModel(BaseModel): id: int info: str = 'Foo' def __init__(self, id: int = 1, *, bar: str, **data) -> None: """My custom init!""" super().__init__(id=id, bar=bar, **data) print(inspect.signature(MyModel)) #> (id: int = 1, *, bar: str, info: str = 'Foo') -> None ``` To be included in the signature, a field's alias or name must be a valid Python identifier. Pydantic will prioritize a field's alias over its name when generating the signature, but may use the field name if the alias is not a valid Python identifier. If a field's alias and name are *both* not valid identifiers (which may be possible through exotic use of `create_model`), a `**data` argument will be added. In addition, the `**data` argument will always be present in the signature if `model_config['extra'] == 'allow'`. ## Structural pattern matching Pydantic supports structural pattern matching for models, as introduced by [PEP 636](https://peps.python.org/pep-0636/) in Python 3.10. ```python {lint="skip"} from pydantic import BaseModel class Pet(BaseModel): name: str species: str a = Pet(name='Bones', species='dog') match a: # match `species` to 'dog', declare and initialize `dog_name` case Pet(species='dog', name=dog_name): print(f'{dog_name} is a dog') #> Bones is a dog # default case case _: print('No dog matched') ``` !!! note A match-case statement may seem as if it creates a new model, but don't be fooled; it is just syntactic sugar for getting an attribute and either comparing it or declaring and initializing it. ## Attribute copies In many cases, arguments passed to the constructor will be copied in order to perform validation and, where necessary, coercion. In this example, note that the ID of the list changes after the class is constructed because it has been copied during validation: ```python from pydantic import BaseModel class C1: arr = [] def __init__(self, in_arr): self.arr = in_arr class C2(BaseModel): arr: list[int] arr_orig = [1, 9, 10, 3] c1 = C1(arr_orig) c2 = C2(arr=arr_orig) print(f'{id(c1.arr) == id(c2.arr)=}') #> id(c1.arr) == id(c2.arr)=False ``` !!! note There are some situations where Pydantic does not copy attributes, such as when passing models — we use the model as is. You can override this behaviour by setting [`model_config['revalidate_instances'] = 'always'`](../api/config.md#pydantic.config.ConfigDict.revalidate_instances). pydantic-pydantic-e28e879/docs/concepts/performance.md000066400000000000000000000142041526274674700231310ustar00rootroot00000000000000# Performance tips In most cases Pydantic won't be your bottleneck, only follow this if you're sure it's necessary. To find where validation time actually goes in a running application, [Logfire](../integrations/logfire.md) records the duration of each Pydantic validation as a span. ## In general, use `model_validate_json()` not `model_validate(json.loads(...))` On `model_validate(json.loads(...))`, the JSON is parsed in Python, then converted to a dict, then it's validated internally. On the other hand, `model_validate_json()` already performs the validation internally. There are a few cases where `model_validate(json.loads(...))` may be faster. Specifically, when using a `'before'` or `'wrap'` validator on a model, validation may be faster with the two step method. You can read more about these special cases in [this discussion](https://github.com/pydantic/pydantic/discussions/6388#discussioncomment-8193105). Many performance improvements are currently in the works for `pydantic-core`, see [this discussion](https://github.com/pydantic/pydantic/discussions/6388#discussioncomment-8194048). Once these changes are merged, we should be at the point where `model_validate_json()` is always faster than `model_validate(json.loads(...))`. ## `TypeAdapter` instantiated once The idea here is to avoid constructing validators and serializers more than necessary. Each time a `TypeAdapter` is instantiated, it will construct a new validator and serializer. If you're using a `TypeAdapter` in a function, it will be instantiated each time the function is called. Instead, instantiate it once, and reuse it. === ":x: Bad" ```python {lint="skip"} from pydantic import TypeAdapter def my_func(): adapter = TypeAdapter(list[int]) # do something with adapter ``` === ":white_check_mark: Good" ```python {lint="skip"} from pydantic import TypeAdapter adapter = TypeAdapter(list[int]) def my_func(): ... # do something with adapter ``` ## `Sequence` vs `list` or `tuple` with `Mapping` vs `dict` When using `Sequence`, Pydantic calls `isinstance(value, Sequence)` to check if the value is a sequence. Also, Pydantic will try to validate against different types of sequences, like `list` and `tuple`. If you know the value is a `list` or `tuple`, use `list` or `tuple` instead of `Sequence`. The same applies to `Mapping` and `dict`. If you know the value is a `dict`, use `dict` instead of `Mapping`. ## Don't do validation when you don't have to, use `Any` to keep the value unchanged If you don't need to validate a value, use `Any` to keep the value unchanged. ```python from typing import Any from pydantic import BaseModel class Model(BaseModel): a: Any model = Model(a=1) ``` ## Avoid extra information via subclasses of primitives === "Don't do this" ```python class CompletedStr(str): def __init__(self, s: str): self.s = s self.done = False ``` === "Do this" ```python from pydantic import BaseModel class CompletedModel(BaseModel): s: str done: bool = False ``` ## Use tagged union, not union Tagged union (or discriminated union) is a union with a field that indicates which type it is. ```python {test="skip"} from typing import Any, Literal from pydantic import BaseModel, Field class DivModel(BaseModel): el_type: Literal['div'] = 'div' class_name: str | None = None children: list[Any] | None = None class SpanModel(BaseModel): el_type: Literal['span'] = 'span' class_name: str | None = None contents: str | None = None class ButtonModel(BaseModel): el_type: Literal['button'] = 'button' class_name: str | None = None contents: str | None = None class InputModel(BaseModel): el_type: Literal['input'] = 'input' class_name: str | None = None value: str | None = None class Html(BaseModel): contents: DivModel | SpanModel | ButtonModel | InputModel = Field( discriminator='el_type' ) ``` See [Discriminated Unions] for more details. ## Use `TypedDict` over nested models Instead of using nested models, use `TypedDict` to define the structure of the data. ??? info "Performance comparison" With a simple benchmark, `TypedDict` is about ~2.5x faster than nested models: ```python {test="skip"} from timeit import timeit from typing_extensions import TypedDict from pydantic import BaseModel, TypeAdapter class A(TypedDict): a: str b: int class TypedModel(TypedDict): a: A class B(BaseModel): a: str b: int class Model(BaseModel): b: B ta = TypeAdapter(TypedModel) result1 = timeit( lambda: ta.validate_python({'a': {'a': 'a', 'b': 2}}), number=10000 ) result2 = timeit( lambda: Model.model_validate({'b': {'a': 'a', 'b': 2}}), number=10000 ) print(result2 / result1) ``` ## Avoid wrap validators if you really care about performance Wrap validators are generally slower than other validators. This is because they require that data is materialized in Python during validation. Wrap validators can be incredibly useful for complex validation logic, but if you're looking for the best performance, you should avoid them. ## Failing early with `FailFast` Starting in v2.8+, you can apply the `FailFast` annotation to sequence types to fail early if any item in the sequence fails validation. If you use this annotation, you won't get validation errors for the rest of the items in the sequence if one fails, so you're effectively trading off visibility for performance. ```python from typing import Annotated from pydantic import FailFast, TypeAdapter, ValidationError ta = TypeAdapter(Annotated[list[bool], FailFast()]) try: ta.validate_python([True, 'invalid', False, 'also invalid']) except ValidationError as exc: print(exc) """ 1 validation error for list[bool] 1 Input should be a valid boolean, unable to interpret input [type=bool_parsing, input_value='invalid', input_type=str] """ ``` Read more about `FailFast` [here][pydantic.types.FailFast]. [Discriminated Unions]: ../concepts/unions.md#discriminated-unions pydantic-pydantic-e28e879/docs/concepts/pydantic_settings.md000066400000000000000000000012541526274674700243640ustar00rootroot00000000000000--- description: Support for loading a settings or config class from environment variables or secrets files. --- # Settings Management [Pydantic Settings](https://github.com/pydantic/pydantic-settings) provides optional Pydantic features for loading a settings or config class from environment variables or secrets files. Settings are validated from environment variables and secrets files, so a [`ValidationError`][pydantic_core.ValidationError] here points at an environment value that didn't match its field. [Logfire](../errors/troubleshooting.md) can record failed validations and their structured errors, so you can see which setting failed and why. {{ pydantic_settings }} pydantic-pydantic-e28e879/docs/concepts/serialization.md000066400000000000000000001006261526274674700235110ustar00rootroot00000000000000Beyond accessing model attributes directly via their field names (e.g. `model.foobar`), models can be converted, dumped, serialized, and exported in a number of ways. Serialization can be customized for the whole model, or on a per-field or per-type basis. ??? abstract "Serialize versus dump" Pydantic uses the terms "serialize" and "dump" interchangeably. Both refer to the process of converting a model to a dictionary or JSON-encoded string. Outside of Pydantic, the word "serialize" usually refers to converting in-memory data into a string or bytes. However, in the context of Pydantic, there is a very close relationship between converting an object from a more structured form — such as a Pydantic model, a dataclass, etc. — into a less structured form comprised of Python built-ins such as dict. While we could (and on occasion, do) distinguish between these scenarios by using the word "dump" when converting to primitives and "serialize" when converting to string, for practical purposes, we frequently use the word "serialize" to refer to both of these situations, even though it does not always imply conversion to a string or bytes. !!! tip Want to quickly jump to the relevant serializer section?
* Field serializer --- * [field *plain* serializer](#field-plain-serializer) * [field *wrap* serializer](#field-wrap-serializer) * Model serializer --- * [model *plain* serializer](#model-plain-serializer) * [model *wrap* serializer](#model-wrap-serializer)
## Serializing data Pydantic allows models (and any other type using [type adapters](./type_adapter.md)) to be serialized in *two* modes: [Python](#python-mode) and [JSON](#json-mode). The Python output may contain non-JSON serializable data (although this can be emulated). [](){#modelmodel_dump} ### Python mode When using the Python mode, Pydantic models (and model-like types such as [dataclasses][]) (1) will be (recursively) converted to dictionaries. This is achievable by using the [`model_dump()`][pydantic.BaseModel.model_dump] method: { .annotate } 1. With the exception of [root models](./models.md#rootmodel-and-custom-root-types), where the root value is dumped directly. ```python {group="python-dump"} from pydantic import BaseModel, Field class BarModel(BaseModel): whatever: tuple[int, ...] class FooBarModel(BaseModel): banana: float | None = 1.1 foo: str = Field(serialization_alias='foo_alias') bar: BarModel m = FooBarModel(banana=3.14, foo='hello', bar={'whatever': (1, 2)}) # returns a dictionary: print(m.model_dump()) #> {'banana': 3.14, 'foo': 'hello', 'bar': {'whatever': (1, 2)}} print(m.model_dump(by_alias=True)) #> {'banana': 3.14, 'foo_alias': 'hello', 'bar': {'whatever': (1, 2)}} ``` Notice that the value of `whatever` was dumped as tuple, which isn't a known JSON type. The `mode` argument can be set to `'json'` to ensure JSON-compatible types are used: ```python {group="python-dump"} print(m.model_dump(mode='json')) #> {'banana': 3.14, 'foo': 'hello', 'bar': {'whatever': [1, 2]}} ``` !!! info "See also" The [`TypeAdapter.dump_python()`][pydantic.TypeAdapter.dump_python] method, useful when *not* dealing with Pydantic models. [](){#modelmodel_dump_json} ### JSON mode Pydantic allows data to be serialized directly to a JSON-encoded string, by trying its best to convert Python values to valid JSON data. This is achievable by using the [`model_dump_json()`][pydantic.BaseModel.model_dump_json] method: ```python from datetime import datetime from pydantic import BaseModel class BarModel(BaseModel): whatever: tuple[int, ...] class FooBarModel(BaseModel): foo: datetime bar: BarModel m = FooBarModel(foo=datetime(2032, 6, 1, 12, 13, 14), bar={'whatever': (1, 2)}) print(m.model_dump_json(indent=2)) """ { "foo": "2032-06-01T12:13:14", "bar": { "whatever": [ 1, 2 ] } } """ ``` In addition to the [supported types][json.JSONEncoder] by the standard library [`json`][] module, Pydantic supports a wide variety of types ([date and time types][datetime], [`UUID`][uuid.UUID] objects, [sets][set], etc). If an unsupported type is used and can't be serialized to JSON, a [`PydanticSerializationError`][pydantic_core.PydanticSerializationError] exception is raised. A serialization error like this often only shows up when a particular object reaches the point of being serialized (commonly when building a response), so it can be easy to miss until it happens in production. Like any exception, it's captured by [Logfire](../integrations/logfire.md) if you've instrumented your application, in the context of the request that triggered it, and grouped with other occurrences so you can tell a one-off from a recurring problem. !!! info "See also" The [`TypeAdapter.dump_json()`][pydantic.TypeAdapter.dump_json] method, useful when *not* dealing with Pydantic models. [](){#dictmodel-and-iteration} ## Iterating over models Pydantic models can also be iterated over, yielding `(field_name, field_value)` pairs. Note that field values are left as is, so sub-models will *not* be converted to dictionaries: ```python {group="iterating-model"} from pydantic import BaseModel class BarModel(BaseModel): whatever: int class FooBarModel(BaseModel): banana: float foo: str bar: BarModel m = FooBarModel(banana=3.14, foo='hello', bar={'whatever': 123}) for name, value in m: print(f'{name}: {value}') #> banana: 3.14 #> foo: hello #> bar: whatever=123 ``` This means that calling [`dict()`][dict] on a model can be used to construct a dictionary of the model: ```python {group="iterating-model"} print(dict(m)) #> {'banana': 3.14, 'foo': 'hello', 'bar': BarModel(whatever=123)} ``` !!! note [Root models](models.md#rootmodel-and-custom-root-types) *does* get converted to a dictionary with the key `'root'`. [](){#pickledumpsmodel} ## Pickling support Pydantic models support efficient pickling and unpickling. ```python {test="skip"} import pickle from pydantic import BaseModel class FooBarModel(BaseModel): a: str b: int m = FooBarModel(a='hello', b=123) print(m) #> a='hello' b=123 data = pickle.dumps(m) print(data[:20]) #> b'\x80\x04\x95\x95\x00\x00\x00\x00\x00\x00\x00\x8c\x08__main_' m2 = pickle.loads(data) print(m2) #> a='hello' b=123 ``` [](){#custom-serializers} ## Serializers Similar to [custom validators](./validators.md), you can leverage custom serializers at the field and model levels to further control the serialization behavior. !!! warning Only *one* serializer can be defined per field/model. It is not possible to combine multiple serializers together (including *plain* and *wrap* serializers). ### Field serializers ??? api "API Documentation" [`pydantic.functional_serializers.PlainSerializer`][pydantic.functional_serializers.PlainSerializer]
[`pydantic.functional_serializers.WrapSerializer`][pydantic.functional_serializers.WrapSerializer]
[`pydantic.functional_serializers.field_serializer`][pydantic.functional_serializers.field_serializer]
In its simplest form, a field serializer is a callable taking the value to be serialized as an argument and **returning the serialized value**. If the `return_type` argument is provided to the serializer (or if a return type annotation is available on the serializer function), it will be used to build an extra serializer, to ensure that the serialized field value complies with this return type. **Two** different types of serializers can be used. They can all be defined using the [annotated pattern](./fields.md#the-annotated-pattern) or using the [`@field_serializer`][pydantic.field_serializer] decorator, applied on instance or [static methods][staticmethod]. * ***Plain* serializers**: are called unconditionally to serialize a field. The serialization logic for types supported by Pydantic will *not* be called. Using such serializers is also useful to specify the logic for arbitrary types. {#field-plain-serializer} === "Annotated pattern" ```python from typing import Annotated, Any from pydantic import BaseModel, PlainSerializer def ser_number(value: Any) -> Any: if isinstance(value, int): return value * 2 else: return value class Model(BaseModel): number: Annotated[int, PlainSerializer(ser_number)] print(Model(number=4).model_dump()) #> {'number': 8} m = Model(number=1) m.number = 'invalid' print(m.model_dump()) # (1)! #> {'number': 'invalid'} ``` 1. Pydantic will *not* validate that the serialized value complies with the `int` type. === "Decorator" ```python from typing import Any from pydantic import BaseModel, field_serializer class Model(BaseModel): number: int @field_serializer('number', mode='plain') # (1)! def ser_number(self, value: Any) -> Any: if isinstance(value, int): return value * 2 else: return value print(Model(number=4).model_dump()) #> {'number': 8} m = Model(number=1) m.number = 'invalid' print(m.model_dump()) # (2)! #> {'number': 'invalid'} ``` 1. `'plain'` is the default mode for the decorator, and can be omitted. 2. Pydantic will *not* validate that the serialized value complies with the `int` type. * ***Wrap* serializers**: give more flexibility to customize the serialization behavior. You can run code before or after the Pydantic serialization logic. {#field-wrap-serializer} Such serializers must be defined with a **mandatory** extra *handler* parameter: a callable taking the value to be serialized as an argument. Internally, this handler will delegate serialization of the value to Pydantic. You are free to *not* call the handler at all. === "Annotated pattern" ```python from typing import Annotated, Any from pydantic import BaseModel, SerializerFunctionWrapHandler, WrapSerializer def ser_number(value: Any, handler: SerializerFunctionWrapHandler) -> int: return handler(value) + 1 class Model(BaseModel): number: Annotated[int, WrapSerializer(ser_number)] print(Model(number=4).model_dump()) #> {'number': 5} ``` === "Decorator" ```python from typing import Any from pydantic import BaseModel, SerializerFunctionWrapHandler, field_serializer class Model(BaseModel): number: int @field_serializer('number', mode='wrap') def ser_number( self, value: Any, handler: SerializerFunctionWrapHandler ) -> int: return handler(value) + 1 print(Model(number=4).model_dump()) #> {'number': 5} ``` #### Which serializer pattern to use While both approaches can achieve the same thing, each pattern provides different benefits. ##### Using the annotated pattern One of the key benefits of using the [annotated pattern](./fields.md#the-annotated-pattern) is to make serializers reusable: ```python from typing import Annotated from pydantic import BaseModel, Field, PlainSerializer DoubleNumber = Annotated[int, PlainSerializer(lambda v: v * 2)] class Model1(BaseModel): my_number: DoubleNumber class Model2(BaseModel): other_number: Annotated[DoubleNumber, Field(description='My other number')] class Model3(BaseModel): list_of_even_numbers: list[DoubleNumber] # (1)! ``` 1. As mentioned in the [annotated pattern](./fields.md#the-annotated-pattern) documentation, we can also make use of serializers for specific parts of the annotation (in this case, serialization is applied for list items, but not the whole list). It is also easier to understand which serializers are applied to a type, by just looking at the field annotation. ##### Using the decorator pattern One of the key benefits of using the [`@field_serializer`][pydantic.field_serializer] decorator is to apply the function to multiple fields: ```python from pydantic import BaseModel, field_serializer class Model(BaseModel): f1: str f2: str @field_serializer('f1', 'f2', mode='plain') def capitalize(self, value: str) -> str: return value.capitalize() ``` Here are a couple additional notes about the decorator usage: * If you want the serializer to apply to all fields (including the ones defined in subclasses), you can pass `'*'` as the field name argument. * By default, the decorator will ensure the provided field name(s) are defined on the model. If you want to disable this check during class creation, you can do so by passing `False` to the `check_fields` argument. This is useful when the field serializer is defined on a base class, and the field is expected to exist on subclasses. ### Model serializers ??? api "API Documentation" [`pydantic.functional_serializers.model_serializer`][pydantic.functional_serializers.model_serializer]
Serialization can also be customized on the entire model using the [`@model_serializer`][pydantic.model_serializer] decorator. If the `return_type` argument is provided to the [`@model_serializer`][pydantic.model_serializer] decorator (or if a return type annotation is available on the serializer function), it will be used to build an extra serializer, to ensure that the serialized model value complies with this return type. As with [field serializers](#field-serializers), **two** different types of model serializers can be used: * ***Plain* serializers**: are called unconditionally to serialize the model. {#model-plain-serializer} ```python from pydantic import BaseModel, model_serializer class UserModel(BaseModel): username: str password: str @model_serializer(mode='plain') # (1)! def serialize_model(self) -> str: # (2)! return f'{self.username} - {self.password}' print(UserModel(username='foo', password='bar').model_dump()) #> foo - bar ``` 1. `'plain'` is the default mode for the decorator, and can be omitted. 2. You are free to return a value that *isn't* a dictionary. However, note that this may cause type checking issues (as the return type of [`model_dump()`][pydantic.main.BaseModel.model_dump] is `dict[str, Any]`). * ***Wrap* serializers**: give more flexibility to customize the serialization behavior. You can run code before or after the Pydantic serialization logic. {#model-wrap-serializer} Such serializers must be defined with a **mandatory** extra *handler* parameter: a callable taking the instance of the model as an argument. Internally, this handler will delegate serialization of the model to Pydantic. You are free to *not* call the handler at all. ```python from pydantic import BaseModel, SerializerFunctionWrapHandler, model_serializer class UserModel(BaseModel): username: str password: str @model_serializer(mode='wrap') def serialize_model( self, handler: SerializerFunctionWrapHandler ) -> dict[str, object]: serialized = handler(self) serialized['fields'] = list(serialized) return serialized print(UserModel(username='foo', password='bar').model_dump()) #> {'username': 'foo', 'password': 'bar', 'fields': ['username', 'password']} ``` ## Serialization info Both the field and model serializers callables (in all modes) can optionally take an extra `info` argument, providing useful extra information, such as: * [user defined context](#serialization-context) * the current serialization mode: either `'python'` or `'json'` (see the [`mode`][pydantic.SerializationInfo.mode] property) * the various parameters set during serialization using the [serialization methods](#serializing-data) (e.g. [`exclude_unset`][pydantic.SerializationInfo.exclude_unset], [`serialize_as_any`][pydantic.SerializationInfo.serialize_as_any]) * the current field name, if using a [field serializer](#field-serializers) (see the [`field_name`][pydantic.FieldSerializationInfo.field_name] property). ### Serialization context You can pass a context object to the [serialization methods](#serializing-data), which can be accessed inside the serializer functions using the [`context`][pydantic.SerializationInfo.context] property: ```python from pydantic import BaseModel, FieldSerializationInfo, field_serializer class Model(BaseModel): text: str @field_serializer('text', mode='plain') @classmethod def remove_stopwords(cls, v: str, info: FieldSerializationInfo) -> str: if isinstance(info.context, dict): stopwords = info.context.get('stopwords', set()) v = ' '.join(w for w in v.split() if w.lower() not in stopwords) return v model = Model(text='This is an example document') print(model.model_dump()) # no context #> {'text': 'This is an example document'} print(model.model_dump(context={'stopwords': ['this', 'is', 'an']})) #> {'text': 'example document'} ``` Similarly, you can [use a context for validation](../concepts/validators.md#validation-context). ## Serializing subclasses [](){#subclasses-of-standard-types} ### Subclasses of supported types Subclasses of supported types are serialized according to their super class: ```python from datetime import date from pydantic import BaseModel class MyDate(date): @property def my_date_format(self) -> str: return self.strftime('%d/%m/%Y') class FooModel(BaseModel): date: date m = FooModel(date=MyDate(2023, 1, 1)) print(m.model_dump_json()) #> {"date":"2023-01-01"} ``` [](){#subclass-instances-for-fields-of-basemodel-dataclasses-typeddict} ### Subclasses of model-like types When using model-like classes (Pydantic models, [dataclasses](./dataclasses.md), etc.) as field annotations, the default behavior is to serialize the field value as though it was an instance of the class used as the annotation, even if it is a subclass. More specifically, only the fields declared on the type annotation will be included in the serialization result: ```python from pydantic import BaseModel class User(BaseModel): name: str class UserLogin(User): password: str class OuterModel(BaseModel): user: User user = UserLogin(name='pydantic', password='hunter2') m = OuterModel(user=user) print(m) #> user=UserLogin(name='pydantic', password='hunter2') print(m.model_dump()) # (1)! #> {'user': {'name': 'pydantic'}} ``` 1. Note: the password field is not included !!! warning "Migration Warning" This behavior is different from how things worked in Pydantic V1, where we would always include all (subclass) fields when recursively serializing models to dictionaries. The motivation behind this change in behavior is that it helps ensure that you know precisely which fields could be included when serializing, even if subclasses get passed when instantiating the object. In particular, this can help prevent surprises when adding sensitive information like secrets as fields of subclasses. To enable the old V1 behavior, refer to the next section. [](){#serializing-with-duck-typing} ### Polymorphic serialization /// version-added | v2.13 Polymorphic serialization was added as a better alternative to the [serialize as any](#serializing-as-any) behavior, and only applies to Pydantic models and Pydantic dataclasses. /// Polymorphic serialization is the behavior of serializing a model (or [Pydantic dataclass](./dataclasses.md)) instance according to the serialization schema of such instance, rather that the schema of the class used as the type. This will expose all the data defined on the subclass in the serialized payload. This behavior can be configured in the following ways: * Configuration level: use the [`polymorphic_serialization`][pydantic.config.ConfigDict.polymorphic_serialization] setting in the model/dataclass [configuration](./config.md). The configuration should be set on the class that should be polymorphic, not on the class that references polymorphic classes. * Runtime level: use the `polymorphic_serialization` argument when calling the [serialization methods](#serializing-data). This will apply to all (nested) types, overriding any configuration. !!! note "Duck-typed serialization" This behavior (and the ["any" serialization](#serializing-as-any) discussed below) was previously referred to as duck-typed serialization. This was a misnomer; it did not function like [duck typing](https://en.wikipedia.org/wiki/Duck_typing) in the conventional programming language sense. !!! warning Polymorphic serialization of standard library dataclasses Polymorphic serialization is only supported for Pydantic models and [Pydantic dataclasses](./dataclasses.md). When using [standard library dataclasses][dataclasses], polymorphic serialization is *not* supported, even if the dataclass is a subclass of a Pydantic dataclass. This may be fixed in a future Pydantic release. The example below defines a type `User` and a subclass of it, `UserLogin`. A second pair of types, `PolymorphicUser` and `PolymorphicUserLogin` are defined as equivalents with `polymorphic_serialization` enabled. We can then see the effect of serializing each of these types, and the interaction of this config with the runtime `polymorphic_serialization` setting: ```python from pydantic import BaseModel class User(BaseModel): # (1)! name: str class UserLogin(User): password: str class OuterModel(BaseModel): user: User outer_model = OuterModel( user=UserLogin(name='pydantic', password='password'), ) print(outer_model.model_dump()) # (2)! #> {'user': {'name': 'pydantic'}} print(outer_model.model_dump(polymorphic_serialization=True)) # (3)! #> {'user': {'name': 'pydantic', 'password': 'password'}} ``` 1. The `polymorphic_serialization` configuration would be set on this model to get the same behavior as the runtime setting below. 2. With polymorphic serialization disabled, `user` serializes as the base type. 3. With polymorphic serialization enabled, `user` serializes as the actual runtime subclass. As seen in the example, by having polymorphic serialization enabled, the `User.model_dump()` method will by respect the value of the `UserLogin` subclass when it is provided instead of a `User` value, and serialize the full `UserLogin` type. This behavior can be globally overridden with the `polymorphic_serialization` runtime setting; in this case setting it to `False` causes the `UserLogin` value to serialize just as a `User` value, ignoring the subclass' `password` field. ## Serializing "as Any" A more extreme form of [polymorphic serialization](#polymorphic-serialization) is "any" serialization. In this mode, Pydantic does *not* make use of any type annotation (more precisely, the serialization schema derived from the type) to infer how the value should be serialized, but instead inspects the actual type of the value at runtime to do so (and this applies to *all* types, not only Pydantic models and dataclasses). This means that every value will be serialized exactly based on its runtime type and any knowledge Pydantic has of how to serialize the type. Pydantic can infer how to serialize the following types: * Many Python standard library types (exact set may be expanded depending on Pydantic version). * Types with a `__pydantic_serializer__` attribute. * Any type serializable with the `fallback` function passed as an argument to [serialization methods](#serializing-data). In most cases, you will want to use the [polymorphic serialization](#polymorphic-serialization) behavior instead. This behavior can be configured at the field level and at runtime, for a specific serialization call: * Field level: use the [`SerializeAsAny`][pydantic.functional_serializers.SerializeAsAny] annotation. * Runtime level: use the `serialize_as_any` argument when calling the [serialization methods](#serializing-data). These options are discussed below in more detail. ### `SerializeAsAny` annotation If you want duck typing serialization behavior, this can be done using the [`SerializeAsAny`][pydantic.functional_serializers.SerializeAsAny] annotation on a type: ```python from pydantic import BaseModel, SerializeAsAny class User(BaseModel): name: str class UserLogin(User): password: str class OuterModel(BaseModel): as_any: SerializeAsAny[User] as_user: User user = UserLogin(name='pydantic', password='password') print(OuterModel(as_any=user, as_user=user).model_dump()) """ { 'as_any': {'name': 'pydantic', 'password': 'password'}, 'as_user': {'name': 'pydantic'}, } """ ``` When a type is annotated as `SerializeAsAny[]`, the validation behavior will be the same as if it was annotated as ``, and static type checkers will treat the annotation as if it was simply ``. When serializing, the field will be serialized as though the type hint for the field was [`Any`][typing.Any], which is where the name comes from. ### `serialize_as_any` runtime setting The `serialize_as_any` runtime setting can be used to serialize model data with or without duck typed serialization behavior. `serialize_as_any` can be passed as a keyword argument to the various [serialization methods](#serializing-data) (such as [`model_dump()`][pydantic.BaseModel.model_dump] and [`model_dump_json()`][pydantic.BaseModel.model_dump_json] on Pydantic models). ```python from pydantic import BaseModel class User(BaseModel): name: str class UserLogin(User): password: str class OuterModel(BaseModel): user1: User user2: User user = UserLogin(name='pydantic', password='password') outer_model = OuterModel(user1=user, user2=user) print(outer_model.model_dump(serialize_as_any=True)) # (1)! """ { 'user1': {'name': 'pydantic', 'password': 'password'}, 'user2': {'name': 'pydantic', 'password': 'password'}, } """ print(outer_model.model_dump(serialize_as_any=False)) # (2)! #> {'user1': {'name': 'pydantic'}, 'user2': {'name': 'pydantic'}} ``` 1. With `serialize_as_any` set to `True`, the result matches that of V1. 2. With `serialize_as_any` set to `False` (the V2 default), fields present on the subclass, but not the base class, are not included in serialization. However, do note that the *serialize as any* behavior will apply to *all* values, not only the values where duck typing is relevant. You may want to prefer using the `SerializeAsAny` annotation when required instead. [](){#advanced-include-and-exclude} [](){#model-and-field-level-include-and-exclude} ## Field inclusion and exclusion For serialization, field inclusion and exclusion can be configured in two ways: * at the field level, using the `exclude` and `exclude_if` parameters on [the `Field()` function](fields.md). * using the various serialization parameters on the [serialization methods](#serializing-data). ### At the field level At the field level, the `exclude` and `exclude_if` parameters can be used: ```python from pydantic import BaseModel, Field class Transaction(BaseModel): id: int private_id: int = Field(exclude=True) value: int = Field(ge=0, exclude_if=lambda v: v == 0) print(Transaction(id=1, private_id=2, value=0).model_dump()) #> {'id': 1} ``` Exclusion at the field level takes priority over the `include` serialization parameter described below. ### As parameters to the serialization methods When using the [serialization methods](#serializing-data) (such as [`model_dump()`][pydantic.BaseModel.model_dump]), several parameters can be used to exclude or include fields. #### Excluding and including specific fields Consider the following models: ```python {group="simple-exclude-include"} from pydantic import BaseModel, Field, SecretStr class User(BaseModel): id: int username: str password: SecretStr class Transaction(BaseModel): id: str private_id: str = Field(exclude=True) user: User value: int t = Transaction( id='1234567890', private_id='123', user=User(id=42, username='JohnDoe', password='hashedpassword'), value=9876543210, ) ``` The `exclude` parameter can be used to specify which fields should be excluded (including the others), and vice-versa using the `include` parameter. ```python {group="simple-exclude-include"} # using a set: print(t.model_dump(exclude={'user', 'value'})) #> {'id': '1234567890'} # using a dictionary: print(t.model_dump(exclude={'user': {'username', 'password'}, 'value': True})) #> {'id': '1234567890', 'user': {'id': 42}} # same configuration using `include`: print(t.model_dump(include={'id': True, 'user': {'id'}})) #> {'id': '1234567890', 'user': {'id': 42}} ``` Note that using `False` to *include* a field in `exclude` (or to *exclude* a field in `include`) is not supported. It is also possible to exclude or include specific items from sequence and dictionaries: ```python {group="advanced-include-exclude"} from pydantic import BaseModel class Hobby(BaseModel): name: str info: str class User(BaseModel): hobbies: list[Hobby] user = User( hobbies=[ Hobby(name='Programming', info='Writing code and stuff'), Hobby(name='Gaming', info='Hell Yeah!!!'), ], ) print(user.model_dump(exclude={'hobbies': {-1: {'info'}}})) # (1)! """ { 'hobbies': [ {'name': 'Programming', 'info': 'Writing code and stuff'}, {'name': 'Gaming'}, ] } """ ``` 1. The equivalent call with `include` would be: ```python {lint="skip" group="advanced-include-exclude"} user.model_dump( include={'hobbies': {0: True, -1: {'name'}}} ) ``` The special key `'__all__'` can be used to apply an exclusion/inclusion pattern to all members: ```python {group="advanced-include-exclude"} print(user.model_dump(exclude={'hobbies': {'__all__': {'info'}}})) #> {'hobbies': [{'name': 'Programming'}, {'name': 'Gaming'}]} ``` #### Excluding and including fields based on their value When using the [serialization methods](#serializing-data), it is possible to exclude fields based on their value, using the following parameters: * `exclude_defaults`: Exclude all fields whose value compares equal to the default value (using the equality (`==`) comparison operator). * `exclude_none`: Exclude all fields whose value is `None`. * `exclude_unset`: Pydantic keeps track of fields that were *explicitly* set during instantiation (using the [`model_fields_set`][pydantic.BaseModel.model_fields_set] property). Using `exclude_unset`, any field that was not explicitly provided will be excluded: ```python {group="exclude-unset"} from pydantic import BaseModel class UserModel(BaseModel): name: str age: int = 18 user = UserModel(name='John') print(user.model_fields_set) #> {'name'} print(user.model_dump(exclude_unset=True)) #> {'name': 'John'} ``` Note that altering a field *after* the instance has been created will remove it from the unset fields: ```python {group="exclude-unset"} user.age = 21 print(user.model_dump(exclude_unset=True)) #> {'name': 'John', 'age': 21} ``` !!! tip The [`MISSING` sentinel](./types.md#missing-sentinel) can be used as an alternative to `exclude_unset`. Any field with `MISSING` as a value is automatically excluded from the serialization output. pydantic-pydantic-e28e879/docs/concepts/strict_mode.md000066400000000000000000000142451526274674700231510ustar00rootroot00000000000000??? api "API Documentation" [`pydantic.types.Strict`][pydantic.types.Strict]
By default, Pydantic will attempt to coerce values to the desired type when possible. For example, you can pass the string `'123'` as the input for the [`int` number type](../api/standard_library_types.md#integers), and it will be converted to the value `123`. This coercion behavior is useful in many scenarios — think: UUIDs, URL parameters, HTTP headers, environment variables, dates, etc. However, there are also situations where this is not desirable, and you want Pydantic to error instead of coercing data. To better support this use case, Pydantic provides a "strict mode". When strict mode is enabled, Pydantic will be much less lenient when coercing data, and will instead error if the data is not of the correct type. Most of the time, strict mode will only allow instances of the type to be provided, although looser rules may apply to JSON input (for instance, the [date and time types](../api/standard_library_types.md#date-and-time-types) allow strings even in strict mode). The strict behavior for each type can be found in the [standard library types](../api/standard_library_types.md) documentation, and is summarized in the [conversion table](./conversion_table.md). Here is a brief example showing the validation behavior difference in strict and the default lax mode: ```python from pydantic import BaseModel, ValidationError class MyModel(BaseModel): x: int print(MyModel.model_validate({'x': '123'})) # lax mode #> x=123 try: MyModel.model_validate({'x': '123'}, strict=True) # strict mode except ValidationError as exc: print(exc) """ 1 validation error for MyModel x Input should be a valid integer [type=int_type, input_value='123', input_type=str] """ ``` One caveat when enabling strict mode on models an existing application relies on: inputs that were being quietly coerced will start failing. If you can't audit every caller, it helps to watch validation failures while you roll the change out. [Logfire](../integrations/logfire.md) counts successful and failed validations as metrics, and can record the rejected values included in structured errors. Strict mode can be enabled in various ways: * [As a validation parameter](#as-a-validation-parameter), such as when using [`model_validate()`][pydantic.BaseModel.model_validate], on Pydantic models. * [At the field level](#at-the-field-level). * [At the configuration level](#as-a-configuration-value) (with the possibility to override at the field level). [](){#strict-mode-in-method-calls} ## As a validation parameter Strict mode can be enabled on a per-validation-call basis, when using the [validation methods](./models.md#validating-data) on [Pydantic models](./models.md) and [type adapters](./type_adapter.md). ```python from datetime import date from pydantic import TypeAdapter, ValidationError print(TypeAdapter(date).validate_python('2000-01-01')) # OK: lax #> 2000-01-01 try: # Not OK: strict: TypeAdapter(date).validate_python('2000-01-01', strict=True) except ValidationError as exc: print(exc) """ 1 validation error for date Input should be a valid date [type=date_type, input_value='2000-01-01', input_type=str] """ TypeAdapter(date).validate_json('"2000-01-01"', strict=True) # (1)! #> 2000-01-01 ``` 1. As mentioned, strict mode is looser when validating from JSON. [](){#strict-mode-with-field} ## At the field level Strict mode can be enabled on specific fields, by setting the `strict` parameter of the [`Field()`][pydantic.Field] function to `True`. Strict mode will be applied for such fields, even when the [validation methods](./models.md#validating-data) are called in lax mode. ```python from pydantic import BaseModel, Field, ValidationError class User(BaseModel): name: str age: int = Field(strict=True) # (1)! user = User(name='John', age=42) print(user) #> name='John' age=42 try: another_user = User(name='John', age='42') except ValidationError as e: print(e) """ 1 validation error for User age Input should be a valid integer [type=int_type, input_value='42', input_type=str] """ ``` 1. The strict constraint can also be applied using the [annotated pattern](./fields.md#the-annotated-pattern): `Annotated[int, Field(strict=True)]` [](){#strict-mode-with-annotated-strict} ### Using the `Strict()` metadata class ??? api "API Documentation" [`pydantic.types.Strict`][pydantic.types.Strict]
As an alternative to the [`Field()`][pydantic.Field] function, Pydantic provides the [`Strict`][pydantic.types.Strict] metadata class, meant to be used with the [annotated pattern](./fields.md#the-annotated-pattern). It also provides convenience aliases for the most common types (namely [`StrictBool`][pydantic.types.StrictBool], [`StrictInt`][pydantic.types.StrictInt], [`StrictFloat`][pydantic.types.StrictFloat], [`StrictStr`][pydantic.types.StrictStr] and [`StrictBytes`][pydantic.types.StrictBytes]). ```python from typing import Annotated from uuid import UUID from pydantic import BaseModel, Strict, StrictInt class User(BaseModel): id: Annotated[UUID, Strict()] age: StrictInt # (1)! ``` 1. Equivalent to `Annotated[int, Strict()]`. [](){#strict-mode-with-configdict} ## As a configuration value Strict mode behavior can be controlled at the [configuration](./config.md) level. When used on a Pydantic model (or model like class such as [dataclasses](./dataclasses.md)), strictness can still be overridden at the [field level](#at-the-field-level): ```python from pydantic import BaseModel, ConfigDict, Field class User(BaseModel): model_config = ConfigDict(strict=True) name: str age: int = Field(strict=False) print(User(name='John', age='18')) #> name='John' age=18 ``` pydantic-pydantic-e28e879/docs/concepts/type_adapter.md000066400000000000000000000125421526274674700233140ustar00rootroot00000000000000You may have types that are not `BaseModel`s that you want to validate data against. Or you may want to validate a `list[SomeModel]`, or dump it to JSON. ??? api "API Documentation" [`pydantic.type_adapter.TypeAdapter`][pydantic.type_adapter.TypeAdapter]
For use cases like this, Pydantic provides [`TypeAdapter`][pydantic.type_adapter.TypeAdapter], which can be used for type validation, serialization, and JSON schema generation without needing to create a [`BaseModel`][pydantic.main.BaseModel]. A [`TypeAdapter`][pydantic.type_adapter.TypeAdapter] instance exposes some of the functionality from [`BaseModel`][pydantic.main.BaseModel] instance methods for types that do not have such methods (such as dataclasses, primitive types, and more): ```python from typing_extensions import TypedDict from pydantic import TypeAdapter, ValidationError class User(TypedDict): name: str id: int user_list_adapter = TypeAdapter(list[User]) user_list = user_list_adapter.validate_python([{'name': 'Fred', 'id': '3'}]) print(repr(user_list)) #> [{'name': 'Fred', 'id': 3}] try: user_list_adapter.validate_python( [{'name': 'Fred', 'id': 'wrong', 'other': 'no'}] ) except ValidationError as e: print(e) """ 1 validation error for list[User] 0.id Input should be a valid integer, unable to parse string as an integer [type=int_parsing, input_value='wrong', input_type=str] """ print(repr(user_list_adapter.dump_json(user_list))) #> b'[{"name":"Fred","id":3}]' ``` !!! info "`dump_json` returns `bytes`" `TypeAdapter`'s `dump_json` methods returns a `bytes` object, unlike the corresponding method for `BaseModel`, `model_dump_json`, which returns a `str`. The reason for this discrepancy is that in V1, model dumping returned a str type, so this behavior is retained in V2 for backwards compatibility. For the `BaseModel` case, `bytes` are coerced to `str` types, but `bytes` are often the desired end type. Hence, for the new `TypeAdapter` class in V2, the return type is simply `bytes`, which can easily be coerced to a `str` type if desired. !!! note Despite some overlap in use cases with [`RootModel`][pydantic.root_model.RootModel], [`TypeAdapter`][pydantic.type_adapter.TypeAdapter] should not be used as a type annotation for specifying fields of a `BaseModel`, etc. ## Parsing data into a specified type [`TypeAdapter`][pydantic.type_adapter.TypeAdapter] can be used to apply the parsing logic to populate Pydantic models in a more ad-hoc way. This function behaves similarly to [`BaseModel.model_validate`][pydantic.main.BaseModel.model_validate], but works with arbitrary Pydantic-compatible types. This is especially useful when you want to parse results into a type that is not a direct subclass of [`BaseModel`][pydantic.main.BaseModel]. For example: ```python from pydantic import BaseModel, TypeAdapter class Item(BaseModel): id: int name: str # `item_data` could come from an API call, eg., via something like: # item_data = requests.get('https://my-api.com/items').json() item_data = [{'id': 1, 'name': 'My Item'}] items = TypeAdapter(list[Item]).validate_python(item_data) print(items) #> [Item(id=1, name='My Item')] ``` [`TypeAdapter`][pydantic.type_adapter.TypeAdapter] is capable of parsing data into any of the types Pydantic can handle as fields of a [`BaseModel`][pydantic.main.BaseModel]. Data parsed this way often comes from a source you don't control, like the API call in the example above, so validation can fail long after the code has shipped. A `TypeAdapter` raises the same structured errors as a model, so tooling that records validation failures in production, such as [Logfire](../integrations/logfire.md), captures these too. !!! info "Performance considerations" When creating an instance of [`TypeAdapter`][pydantic.type_adapter.TypeAdapter], the provided type must be analyzed and converted into a pydantic-core schema. This comes with some non-trivial overhead, so it is recommended to create a `TypeAdapter` for a given type just once and reuse it in loops or other performance-critical code. ## Rebuilding a `TypeAdapter`'s schema /// version-added | v2.10 /// [`TypeAdapter`][pydantic.type_adapter.TypeAdapter]'s support deferred schema building and manual rebuilds. This is helpful for the case of: * Types with forward references * Types for which core schema builds are expensive When you initialize a [`TypeAdapter`][pydantic.type_adapter.TypeAdapter] with a type, Pydantic analyzes the type and creates a core schema for it. This core schema contains the information needed to validate and serialize data for that type. See the [architecture documentation](../internals/architecture.md) for more information on core schemas. If you set [`defer_build`][pydantic.config.ConfigDict.defer_build] to `True` when initializing a `TypeAdapter`, Pydantic will defer building the core schema until the first time it is needed (for validation or serialization). In order to manually trigger the building of the core schema, you can call the [`rebuild`][pydantic.type_adapter.TypeAdapter.rebuild] method on the [`TypeAdapter`][pydantic.type_adapter.TypeAdapter] instance: ```python from pydantic import ConfigDict, TypeAdapter ta = TypeAdapter('MyInt', config=ConfigDict(defer_build=True)) # some time later, the forward reference is defined MyInt = int ta.rebuild() assert ta.validate_python(1) == 1 ``` pydantic-pydantic-e28e879/docs/concepts/types.md000066400000000000000000000774001526274674700220030ustar00rootroot00000000000000Pydantic uses types to define how validation and serialization should be performed. [Built-in and standard library types](../api/standard_library_types.md) (such as [`int`][], [`str`][], [`date`][datetime.date]) can be used as is. [Strictness](./strict_mode.md) can be controlled and constraints can be applied on them. On top of these, Pydantic provides extra types, either [directly in the library](../api/types.md) (e.g. [`SecretStr`][pydantic.types.SecretStr]) or in the [`pydantic-extra-types`](https://github.com/pydantic/pydantic-extra-types) external library. These are implemented using the patterns described in the [custom types](#custom-types) section. Strictness and constraints *can't* be applied on them. The [built-in and standard library types](../api/standard_library_types.md) documentation goes over the supported types: the allowed values, the possible validation constraints, and whether [strictness](./strict_mode.md) can be configured. See also the [conversion table](../concepts/conversion_table.md) for a summary of the allowed values for each type. ## Utility types Pydantic provides a number of utility types/annotations, useful to customize the validation/serialization behavior. ### `OnErrorOmit` /// version-added | v2.6 /// By default, when an item of a collection (such as a list, a dictionary or a [`TypedDict`][typing.TypedDict]) fails validation, a [`ValidationError`][pydantic_core.ValidationError] is raised and the whole collection is discarded. The [`OnErrorOmit`][pydantic.types.OnErrorOmit] annotation changes this behavior: any item failing validation is silently omitted from the result, and the valid ones are kept. ```python from pydantic import OnErrorOmit, TypeAdapter ta = TypeAdapter(list[OnErrorOmit[int]]) print(ta.validate_python([1, 2, 'a', 3])) #> [1, 2, 3] ``` See the [API documentation][pydantic.types.OnErrorOmit] for more details on where it can be applied. ### `FailFast` /// version-added | v2.8 /// By default, when validating a collection, Pydantic validates every item and reports all the errors at once. The [`FailFast`][pydantic.types.FailFast] annotation can be applied to a collection type (such as a [`list`][], a [`tuple`][], a [`set`][] or a [`dict`][]) to stop as soon as an item fails validation. This makes validation faster, with the caveat that you get less information about the errors. ```python from typing import Annotated from pydantic import FailFast, TypeAdapter, ValidationError ta = TypeAdapter(Annotated[list[int], FailFast()]) try: ta.validate_python([1, 'a', 2, 'b']) except ValidationError as exc: print(exc) """ 1 validation error for list[int] 1 Input should be a valid integer, unable to parse string as an integer [type=int_parsing, input_value='a', input_type=str] """ ``` ### `MISSING` sentinel ::: pydantic_core.MISSING options: show_root_heading: false ## Custom Types There are several ways to define your custom types. ### Using the annotated pattern The [annotated pattern](./fields.md#the-annotated-pattern) can be used to make types reusable across your code base. For example, to create a type representing a positive integer: ```python from typing import Annotated from pydantic import Field, TypeAdapter, ValidationError PositiveInt = Annotated[int, Field(gt=0)] # (1)! ta = TypeAdapter(PositiveInt) print(ta.validate_python(1)) #> 1 try: ta.validate_python(-1) except ValidationError as exc: print(exc) """ 1 validation error for constrained-int Input should be greater than 0 [type=greater_than, input_value=-1, input_type=int] """ ``` 1. Note that you can also use constraints from the [annotated-types](https://github.com/annotated-types/annotated-types) library to make this Pydantic-agnostic: ```python {test="skip" lint="skip"} from annotated_types import Gt PositiveInt = Annotated[int, Gt(0)] ``` #### Adding validation and serialization You can add or override validation, serialization, and JSON schemas to an arbitrary type using the markers that Pydantic exports: ```python from typing import Annotated from pydantic import ( AfterValidator, PlainSerializer, TypeAdapter, WithJsonSchema, ) TruncatedFloat = Annotated[ float, AfterValidator(lambda x: round(x, 1)), PlainSerializer(lambda x: f'{x:.1e}', return_type=str), WithJsonSchema({'type': 'string'}, mode='serialization'), ] ta = TypeAdapter(TruncatedFloat) input = 1.02345 assert input != 1.0 assert ta.validate_python(input) == 1.0 assert ta.dump_json(input) == b'"1.0e+00"' assert ta.json_schema(mode='validation') == {'type': 'number'} assert ta.json_schema(mode='serialization') == {'type': 'string'} ``` #### Generics [Type variables][typing.TypeVar] can be used within the [`Annotated`][typing.Annotated] type: ```python from typing import Annotated, TypeVar from annotated_types import Gt, Len from pydantic import TypeAdapter, ValidationError T = TypeVar('T') ShortList = Annotated[list[T], Len(max_length=4)] ta = TypeAdapter(ShortList[int]) v = ta.validate_python([1, 2, 3, 4]) assert v == [1, 2, 3, 4] try: ta.validate_python([1, 2, 3, 4, 5]) except ValidationError as exc: print(exc) """ 1 validation error for list[int] List should have at most 4 items after validation, not 5 [type=too_long, input_value=[1, 2, 3, 4, 5], input_type=list] """ PositiveList = list[Annotated[T, Gt(0)]] ta = TypeAdapter(PositiveList[float]) v = ta.validate_python([1.0]) assert type(v[0]) is float try: ta.validate_python([-1.0]) except ValidationError as exc: print(exc) """ 1 validation error for list[constrained-float] 0 Input should be greater than 0 [type=greater_than, input_value=-1.0, input_type=float] """ ``` ### Named type aliases /// version-added | v2.11 Named type aliases are now fully supported. /// The above examples make use of *implicit* type aliases, assigned to a variable. At runtime, Pydantic has no way of knowing the name of the variable it was assigned to, and this can be problematic for two reasons: * The [JSON Schema](./json_schema.md) of the alias won't be converted into a [definition](https://json-schema.org/understanding-json-schema/structuring#defs). This is mostly useful when you are using the alias more than once in a model definition. * In most cases, [recursive type aliases](#named-recursive-types) won't work. By leveraging the new [`type` statement](https://typing.readthedocs.io/en/latest/spec/aliases.html#type-statement) (introduced in [PEP 695](https://peps.python.org/pep-0695/)), you can define aliases as follows: === "Python 3.10 and above" ```python from typing import Annotated from annotated_types import Gt from typing_extensions import TypeAliasType from pydantic import BaseModel PositiveIntList = TypeAliasType('PositiveIntList', list[Annotated[int, Gt(0)]]) class Model(BaseModel): x: PositiveIntList y: PositiveIntList print(Model.model_json_schema()) # (1)! """ { '$defs': { 'PositiveIntList': { 'items': {'exclusiveMinimum': 0, 'type': 'integer'}, 'type': 'array', } }, 'properties': { 'x': {'$ref': '#/$defs/PositiveIntList'}, 'y': {'$ref': '#/$defs/PositiveIntList'}, }, 'required': ['x', 'y'], 'title': 'Model', 'type': 'object', } """ ``` 1. If `PositiveIntList` were to be defined as an implicit type alias, its definition would have been duplicated in both `'x'` and `'y'`. === "Python 3.12 and above (new syntax)" ```python {requires="3.12" upgrade="skip" lint="skip"} from typing import Annotated from annotated_types import Gt from pydantic import BaseModel type PositiveIntList = list[Annotated[int, Gt(0)]] class Model(BaseModel): x: PositiveIntList y: PositiveIntList print(Model.model_json_schema()) # (1)! """ { '$defs': { 'PositiveIntList': { 'items': {'exclusiveMinimum': 0, 'type': 'integer'}, 'type': 'array', } }, 'properties': { 'x': {'$ref': '#/$defs/PositiveIntList'}, 'y': {'$ref': '#/$defs/PositiveIntList'}, }, 'required': ['x', 'y'], 'title': 'Model', 'type': 'object', } """ ``` 1. If `PositiveIntList` were to be defined as an implicit type alias, its definition would have been duplicated in both `'x'` and `'y'`. [](){#metadata-type-alias-warning} !!! warning "When to use named type aliases" While (named) PEP 695 and implicit type aliases are meant to be equivalent for static type checkers, Pydantic will *not* understand field-specific metadata inside named aliases. That is, metadata such as `alias`, `default`, `deprecated`, *cannot* be used: === "Python 3.10 and above" ```python {test="skip"} from typing import Annotated from typing_extensions import TypeAliasType from pydantic import BaseModel, Field MyAlias = TypeAliasType('MyAlias', Annotated[int, Field(default=1)]) class Model(BaseModel): x: MyAlias # This is not allowed ``` === "Python 3.12 and above (new syntax)" ```python {requires="3.12" upgrade="skip" lint="skip" test="skip"} from typing import Annotated from pydantic import BaseModel, Field type MyAlias = Annotated[int, Field(default=1)] class Model(BaseModel): x: MyAlias # This is not allowed ``` Only metadata that can be applied to the annotated type itself is allowed (e.g. [validation constraints](./fields.md#field-constraints) and JSON metadata). Trying to support field-specific metadata would require eagerly inspecting the type alias's [`__value__`][typing.TypeAliasType.__value__], and as such Pydantic wouldn't be able to have the alias stored as a JSON Schema definition. !!! note As with implicit type aliases, [type variables][typing.TypeVar] can also be used inside the generic alias: === "Python 3.10 and above" ```python from typing import Annotated, TypeVar from annotated_types import Len from typing_extensions import TypeAliasType T = TypeVar('T') ShortList = TypeAliasType( 'ShortList', Annotated[list[T], Len(max_length=4)], type_params=(T,) ) ``` === "Python 3.12 and above (new syntax)" ```python {requires="3.12" upgrade="skip" lint="skip"} from typing import Annotated, TypeVar from annotated_types import Len type ShortList[T] = Annotated[list[T], Len(max_length=4)] ``` #### Named recursive types Named type aliases should be used whenever you need to define recursive type aliases (1). { .annotate } 1. For several reasons, Pydantic isn't able to support implicit recursive aliases. For instance, it won't be able to resolve [forward annotations](./forward_annotations.md) across modules. For instance, here is an example definition of a JSON type: === "Python 3.10 and above" ```python from typing_extensions import TypeAliasType from pydantic import TypeAdapter Json = TypeAliasType( 'Json', 'dict[str, Json] | list[Json] | str | int | float | bool | None', # (1)! ) ta = TypeAdapter(Json) print(ta.json_schema()) """ { '$defs': { 'Json': { 'anyOf': [ { 'additionalProperties': {'$ref': '#/$defs/Json'}, 'type': 'object', }, {'items': {'$ref': '#/$defs/Json'}, 'type': 'array'}, {'type': 'string'}, {'type': 'integer'}, {'type': 'number'}, {'type': 'boolean'}, {'type': 'null'}, ] } }, '$ref': '#/$defs/Json', } """ ``` 1. Wrapping the annotation in quotes is necessary as it is eagerly evaluated (and `Json` has yet to be defined). === "Python 3.12 and above (new syntax)" ```python {requires="3.12" upgrade="skip" lint="skip"} from pydantic import TypeAdapter type Json = dict[str, Json] | list[Json] | str | int | float | bool | None # (1)! ta = TypeAdapter(Json) print(ta.json_schema()) """ { '$defs': { 'Json': { 'anyOf': [ { 'additionalProperties': {'$ref': '#/$defs/Json'}, 'type': 'object', }, {'items': {'$ref': '#/$defs/Json'}, 'type': 'array'}, {'type': 'string'}, {'type': 'integer'}, {'type': 'number'}, {'type': 'boolean'}, {'type': 'null'}, ] } }, '$ref': '#/$defs/Json', } """ ``` 1. The value of a named type alias is lazily evaluated, so there's no need to use forward annotations. !!! tip Pydantic defines a [`JsonValue`][pydantic.types.JsonValue] type as a convenience. ### Customizing validation with `__get_pydantic_core_schema__` To do more extensive customization of how Pydantic handles custom classes, and in particular when you have access to the class or can subclass it, you can implement a special `__get_pydantic_core_schema__` to tell Pydantic how to generate the `pydantic-core` schema. While `pydantic` uses `pydantic-core` internally to handle validation and serialization, it is a new API for Pydantic V2, thus it is one of the areas most likely to be tweaked in the future and you should try to stick to the built-in constructs like those provided by `annotated-types`, `pydantic.Field`, or `BeforeValidator` and so on. You can implement `__get_pydantic_core_schema__` both on a custom type and on metadata intended to be put in `Annotated`. In both cases the API is middleware-like and similar to that of "wrap" validators: you get a `source_type` (which isn't necessarily the same as the class, in particular for generics) and a `handler` that you can call with a type to either call the next metadata in `Annotated` or call into Pydantic's internal schema generation. The simplest no-op implementation calls the handler with the type you are given, then returns that as the result. You can also choose to modify the type before calling the handler, modify the core schema returned by the handler, or not call the handler at all. #### As a method on a custom type The following is an example of a type that uses `__get_pydantic_core_schema__` to customize how it gets validated. This is equivalent to implementing `__get_validators__` in Pydantic V1. ```python from typing import Any from pydantic_core import CoreSchema, core_schema from pydantic import GetCoreSchemaHandler, TypeAdapter class Username(str): @classmethod def __get_pydantic_core_schema__( cls, source_type: Any, handler: GetCoreSchemaHandler ) -> CoreSchema: return core_schema.no_info_after_validator_function(cls, handler(str)) ta = TypeAdapter(Username) res = ta.validate_python('abc') assert isinstance(res, Username) assert res == 'abc' ``` See [JSON Schema](../concepts/json_schema.md) for more details on how to customize JSON schemas for custom types. #### As an annotation Often you'll want to parametrize your custom type by more than just generic type parameters (which you can do via the type system and will be discussed later). Or you may not actually care (or want to) make an instance of your subclass; you actually want the original type, just with some extra validation done. For example, if you were to implement `pydantic.AfterValidator` (see [Adding validation and serialization](#adding-validation-and-serialization)) yourself, you'd do something similar to the following: ```python from collections.abc import Callable from dataclasses import dataclass from typing import Annotated, Any from pydantic_core import CoreSchema, core_schema from pydantic import BaseModel, GetCoreSchemaHandler @dataclass(frozen=True) # (1)! class MyAfterValidator: func: Callable[[Any], Any] def __get_pydantic_core_schema__( self, source_type: Any, handler: GetCoreSchemaHandler ) -> CoreSchema: return core_schema.no_info_after_validator_function( self.func, handler(source_type) ) Username = Annotated[str, MyAfterValidator(str.lower)] class Model(BaseModel): name: Username assert Model(name='ABC').name == 'abc' # (2)! ``` 1. The `frozen=True` specification makes `MyAfterValidator` hashable. Without this, a union such as `Username | None` will raise an error. 2. Notice that type checkers will not complain about assigning `'ABC'` to `Username` like they did in the previous example because they do not consider `Username` to be a distinct type from `str`. #### Handling third-party types Another use case for the pattern in the previous section is to handle third party types. ```python from typing import Annotated, Any from pydantic_core import core_schema from pydantic import ( BaseModel, GetCoreSchemaHandler, GetJsonSchemaHandler, ValidationError, ) from pydantic.json_schema import JsonSchemaValue class ThirdPartyType: """ This is meant to represent a type from a third-party library that wasn't designed with Pydantic integration in mind, and so doesn't have a `pydantic_core.CoreSchema` or anything. """ x: int def __init__(self): self.x = 0 class _ThirdPartyTypePydanticAnnotation: @classmethod def __get_pydantic_core_schema__( cls, _source_type: Any, _handler: GetCoreSchemaHandler, ) -> core_schema.CoreSchema: """ We return a pydantic_core.CoreSchema that behaves in the following ways: * ints will be parsed as `ThirdPartyType` instances with the int as the x attribute * `ThirdPartyType` instances will be parsed as `ThirdPartyType` instances without any changes * Nothing else will pass validation * Serialization will always return just an int """ def validate_from_int(value: int) -> ThirdPartyType: result = ThirdPartyType() result.x = value return result from_int_schema = core_schema.chain_schema( [ core_schema.int_schema(), core_schema.no_info_plain_validator_function(validate_from_int), ] ) return core_schema.json_or_python_schema( json_schema=from_int_schema, python_schema=core_schema.union_schema( [ # check if it's an instance first before doing any further work core_schema.is_instance_schema(ThirdPartyType), from_int_schema, ] ), serialization=core_schema.plain_serializer_function_ser_schema( lambda instance: instance.x ), ) @classmethod def __get_pydantic_json_schema__( cls, _core_schema: core_schema.CoreSchema, handler: GetJsonSchemaHandler ) -> JsonSchemaValue: # Use the same schema that would be used for `int` return handler(core_schema.int_schema()) # We now create an `Annotated` wrapper that we'll use as the annotation for fields on `BaseModel`s, etc. PydanticThirdPartyType = Annotated[ ThirdPartyType, _ThirdPartyTypePydanticAnnotation ] # Create a model class that uses this annotation as a field class Model(BaseModel): third_party_type: PydanticThirdPartyType # Demonstrate that this field is handled correctly, that ints are parsed into `ThirdPartyType`, and that # these instances are also "dumped" directly into ints as expected. m_int = Model(third_party_type=1) assert isinstance(m_int.third_party_type, ThirdPartyType) assert m_int.third_party_type.x == 1 assert m_int.model_dump() == {'third_party_type': 1} # Do the same thing where an instance of ThirdPartyType is passed in instance = ThirdPartyType() assert instance.x == 0 instance.x = 10 m_instance = Model(third_party_type=instance) assert isinstance(m_instance.third_party_type, ThirdPartyType) assert m_instance.third_party_type.x == 10 assert m_instance.model_dump() == {'third_party_type': 10} # Demonstrate that validation errors are raised as expected for invalid inputs try: Model(third_party_type='a') except ValidationError as e: print(e) """ 2 validation errors for Model third_party_type.is-instance[ThirdPartyType] Input should be an instance of ThirdPartyType [type=is_instance_of, input_value='a', input_type=str] third_party_type.chain[int,function-plain[validate_from_int()]] Input should be a valid integer, unable to parse string as an integer [type=int_parsing, input_value='a', input_type=str] """ assert Model.model_json_schema() == { 'properties': { 'third_party_type': {'title': 'Third Party Type', 'type': 'integer'} }, 'required': ['third_party_type'], 'title': 'Model', 'type': 'object', } ``` You can use this approach to e.g. define behavior for Pandas or Numpy types. #### Using `GetPydanticSchema` to reduce boilerplate ??? api "API Documentation" [`pydantic.types.GetPydanticSchema`][pydantic.types.GetPydanticSchema]
You may notice that the above examples where we create a marker class require a good amount of boilerplate. For many simple cases you can greatly minimize this by using `pydantic.GetPydanticSchema`: ```python from typing import Annotated from pydantic_core import core_schema from pydantic import BaseModel, GetPydanticSchema class Model(BaseModel): y: Annotated[ str, GetPydanticSchema( lambda tp, handler: core_schema.no_info_after_validator_function( lambda x: x * 2, handler(tp) ) ), ] assert Model(y='ab').y == 'abab' ``` #### Summary Let's recap: 1. Pydantic provides high level hooks to customize types via `Annotated` like `AfterValidator` and `Field`. Use these when possible. 2. Under the hood these use `pydantic-core` to customize validation, and you can hook into that directly using `GetPydanticSchema` or a marker class with `__get_pydantic_core_schema__`. 3. If you really want a custom type you can implement `__get_pydantic_core_schema__` on the type itself. ### Handling custom generic classes !!! warning This is an advanced technique that you might not need in the beginning. In most of the cases you will probably be fine with standard Pydantic models. You can use [Generic Classes](https://docs.python.org/3/library/typing.html#typing.Generic) as field types and perform custom validation based on the "type parameters" (or sub-types) with `__get_pydantic_core_schema__`. If the Generic class that you are using as a sub-type has a classmethod `__get_pydantic_core_schema__`, you don't need to use [`arbitrary_types_allowed`][pydantic.config.ConfigDict.arbitrary_types_allowed] for it to work. Because the `source_type` parameter is not the same as the `cls` parameter, you can use `typing.get_args` (or `typing_extensions.get_args`) to extract the generic parameters. Then you can use the `handler` to generate a schema for them by calling `handler.generate_schema`. Note that we do not do something like `handler(get_args(source_type)[0])` because we want to generate an unrelated schema for that generic parameter, not one that is influenced by the current context of `Annotated` metadata and such. This is less important for custom types, but crucial for annotated metadata that modifies schema building. ```python from dataclasses import dataclass from typing import Any, Generic, TypeVar, get_args, get_origin from pydantic_core import CoreSchema, core_schema from pydantic import ( BaseModel, GetCoreSchemaHandler, ValidationError, ValidatorFunctionWrapHandler, ) ItemType = TypeVar('ItemType') # This is not a pydantic model, it's an arbitrary generic class @dataclass class Owner(Generic[ItemType]): name: str item: ItemType @classmethod def __get_pydantic_core_schema__( cls, source_type: Any, handler: GetCoreSchemaHandler ) -> CoreSchema: origin = get_origin(source_type) if origin is None: # used as `x: Owner` without params origin = source_type item_tp = Any else: item_tp = get_args(source_type)[0] # both calling handler(...) and handler.generate_schema(...) # would work, but prefer the latter for conceptual and consistency reasons item_schema = handler.generate_schema(item_tp) def val_item( v: Owner[Any], handler: ValidatorFunctionWrapHandler ) -> Owner[Any]: v.item = handler(v.item) return v python_schema = core_schema.chain_schema( # `chain_schema` means do the following steps in order: [ # Ensure the value is an instance of Owner core_schema.is_instance_schema(cls), # Use the item_schema to validate `items` core_schema.no_info_wrap_validator_function( val_item, item_schema ), ] ) return core_schema.json_or_python_schema( # for JSON accept an object with name and item keys json_schema=core_schema.chain_schema( [ core_schema.typed_dict_schema( { 'name': core_schema.typed_dict_field( core_schema.str_schema() ), 'item': core_schema.typed_dict_field(item_schema), } ), # after validating the json data convert it to python core_schema.no_info_before_validator_function( lambda data: Owner( name=data['name'], item=data['item'] ), # note that we reuse the same schema here as below python_schema, ), ] ), python_schema=python_schema, ) class Car(BaseModel): color: str class House(BaseModel): rooms: int class Model(BaseModel): car_owner: Owner[Car] home_owner: Owner[House] model = Model( car_owner=Owner(name='John', item=Car(color='black')), home_owner=Owner(name='James', item=House(rooms=3)), ) print(model) """ car_owner=Owner(name='John', item=Car(color='black')) home_owner=Owner(name='James', item=House(rooms=3)) """ try: # If the values of the sub-types are invalid, we get an error Model( car_owner=Owner(name='John', item=House(rooms=3)), home_owner=Owner(name='James', item=Car(color='black')), ) except ValidationError as e: print(e) """ 2 validation errors for Model wine Input should be a valid number, unable to parse string as a number [type=float_parsing, input_value='Kinda good', input_type=str] cheese Input should be a valid boolean, unable to interpret input [type=bool_parsing, input_value='yeah', input_type=str] """ # Similarly with JSON model = Model.model_validate_json( '{"car_owner":{"name":"John","item":{"color":"black"}},"home_owner":{"name":"James","item":{"rooms":3}}}' ) print(model) """ car_owner=Owner(name='John', item=Car(color='black')) home_owner=Owner(name='James', item=House(rooms=3)) """ try: Model.model_validate_json( '{"car_owner":{"name":"John","item":{"rooms":3}},"home_owner":{"name":"James","item":{"color":"black"}}}' ) except ValidationError as e: print(e) """ 2 validation errors for Model car_owner.item.color Field required [type=missing, input_value={'rooms': 3}, input_type=dict] home_owner.item.rooms Field required [type=missing, input_value={'color': 'black'}, input_type=dict] """ ``` #### Generic containers The same idea can be applied to create generic container types, like a custom `Sequence` type: ```python from collections.abc import Sequence from typing import Any, TypeVar, get_args from pydantic_core import ValidationError, core_schema from pydantic import BaseModel, GetCoreSchemaHandler T = TypeVar('T') class MySequence(Sequence[T]): def __init__(self, v: Sequence[T]): self.v = v def __getitem__(self, i): return self.v[i] def __len__(self): return len(self.v) @classmethod def __get_pydantic_core_schema__( cls, source: Any, handler: GetCoreSchemaHandler ) -> core_schema.CoreSchema: instance_schema = core_schema.is_instance_schema(cls) args = get_args(source) if args: # replace the type and rely on Pydantic to generate the right schema # for `Sequence` sequence_t_schema = handler.generate_schema(Sequence[args[0]]) else: sequence_t_schema = handler.generate_schema(Sequence) non_instance_schema = core_schema.no_info_after_validator_function( MySequence, sequence_t_schema ) return core_schema.union_schema([instance_schema, non_instance_schema]) class M(BaseModel): model_config = dict(validate_default=True) s1: MySequence = [3] m = M() print(m) #> s1=<__main__.MySequence object at 0x0123456789ab> print(m.s1.v) #> [3] class M(BaseModel): s1: MySequence[int] M(s1=[1]) try: M(s1=['a']) except ValidationError as exc: print(exc) """ 2 validation errors for M s1.is-instance[MySequence] Input should be an instance of MySequence [type=is_instance_of, input_value=['a'], input_type=list] s1.function-after[MySequence(), json-or-python[json=list[int],python=chain[is-instance[Sequence],function-wrap[sequence_validator()]]]].0 Input should be a valid integer, unable to parse string as an integer [type=int_parsing, input_value='a', input_type=str] """ ``` ### Access to field name !!!note This was not possible with Pydantic V2 to V2.3, it was [re-added](https://github.com/pydantic/pydantic/pull/7542) in Pydantic V2.4. As of Pydantic V2.4, you can access the field name via the `handler.field_name` within `__get_pydantic_core_schema__` and thereby set the field name which will be available from `info.field_name`. ```python from typing import Any from pydantic_core import core_schema from pydantic import BaseModel, GetCoreSchemaHandler, ValidationInfo class CustomType: """Custom type that stores the field it was used in.""" def __init__(self, value: int, field_name: str): self.value = value self.field_name = field_name def __repr__(self): return f'CustomType<{self.value} {self.field_name!r}>' @classmethod def validate(cls, value: int, info: ValidationInfo): return cls(value, info.field_name) @classmethod def __get_pydantic_core_schema__( cls, source_type: Any, handler: GetCoreSchemaHandler ) -> core_schema.CoreSchema: return core_schema.with_info_after_validator_function( cls.validate, handler(int) ) class MyModel(BaseModel): my_field: CustomType m = MyModel(my_field=1) print(m.my_field) #> CustomType<1 'my_field'> ``` You can also access `field_name` from the markers used with `Annotated`, like [`AfterValidator`][pydantic.functional_validators.AfterValidator]. ```python from typing import Annotated from pydantic import AfterValidator, BaseModel, ValidationInfo def my_validators(value: int, info: ValidationInfo): return f'<{value} {info.field_name!r}>' class MyModel(BaseModel): my_field: Annotated[int, AfterValidator(my_validators)] m = MyModel(my_field=1) print(m.my_field) #> <1 'my_field'> ``` pydantic-pydantic-e28e879/docs/concepts/unions.md000066400000000000000000000540461526274674700221530ustar00rootroot00000000000000Unions are fundamentally different to all other types Pydantic validates - instead of requiring all fields/items/values to be valid, unions require only one member to be valid. This leads to some nuance around how to validate unions: * which member(s) of the union should you validate data against, and in which order? * which errors to raise when validation fails? Validating unions feels like adding another orthogonal dimension to the validation process. To solve these problems, Pydantic supports three fundamental approaches to validating unions: 1. [left to right mode](#left-to-right-mode) - the simplest approach, each member of the union is tried in order and the first match is returned 2. [smart mode](#smart-mode) - similar to "left to right mode" members are tried in order; however, validation will proceed past the first match to attempt to find a better match, this is the default mode for most union validation 3. [discriminated unions](#discriminated-unions) - only one member of the union is tried, based on a discriminator !!! tip In general, we recommend using [discriminated unions](#discriminated-unions). They are both more performant and more predictable than untagged unions, as they allow you to control which member of the union to validate against. For complex cases, if you're using untagged unions, it's recommended to use `union_mode='left_to_right'` if you need guarantees about the order of validation attempts against the union members. If you're looking for incredibly specialized behavior, you can use a [custom validator](../concepts/validators.md#field-validators). ## Union Modes ### Left to Right Mode !!! note Because this mode often leads to unexpected validation results, it is not the default in Pydantic >=2, instead `union_mode='smart'` is the default. With this approach, validation is attempted against each member of the union in their order they're defined, and the first successful validation is accepted as input. If validation fails on all members, the validation error includes the errors from all members of the union. `union_mode='left_to_right'` must be set as a [`Field`](../concepts/fields.md) parameter on union fields where you want to use it. ```python {title="Union with left to right mode"} from pydantic import BaseModel, Field, ValidationError class User(BaseModel): id: str | int = Field(union_mode='left_to_right') print(User(id=123)) #> id=123 print(User(id='hello')) #> id='hello' try: User(id=[]) except ValidationError as e: print(e) """ 2 validation errors for User id.str Input should be a valid string [type=string_type, input_value=[], input_type=list] id.int Input should be a valid integer [type=int_type, input_value=[], input_type=list] """ ``` The order of members is very important in this case, as demonstrated by tweak the above example: ```python {title="Union with left to right - unexpected results"} from pydantic import BaseModel, Field class User(BaseModel): id: int | str = Field(union_mode='left_to_right') print(User(id=123)) # (1) #> id=123 print(User(id='456')) # (2) #> id=456 ``` 1. As expected the input is validated against the `int` member and the result is as expected. 2. We're in lax mode and the numeric string `'123'` is valid as input to the first member of the union, `int`. Since that is tried first, we get the surprising result of `id` being an `int` instead of a `str`. ### Smart Mode Because of the potentially surprising results of `union_mode='left_to_right'`, in Pydantic >=2 the default mode for union validation is `union_mode='smart'`. In this mode, pydantic attempts to select the best match for the input from the union members. The exact algorithm may change between Pydantic minor releases to allow for improvements in both performance and accuracy. !!! note We reserve the right to tweak the internal `smart` matching algorithm in future versions of Pydantic. If you rely on very specific matching behavior, it's recommended to use `union_mode='left_to_right'` or [discriminated unions](#discriminated-unions). ??? info "Smart Mode Algorithm" The smart mode algorithm uses two metrics to determine the best match for the input: 1. The number of valid fields set (relevant for models, dataclasses, and typed dicts) 2. The exactness of the match (relevant for all types) #### Number of valid fields set !!! note This metric was introduced in Pydantic v2.8.0. Prior to this version, only exactness was used to determine the best match. This metric is currently only relevant for models, dataclasses, and typed dicts. The greater the number of valid fields set, the better the match. The number of fields set on nested models is also taken into account. These counts bubble up to the top-level union, where the union member with the highest count is considered the best match. For data types where this metric is relevant, we prioritize this count over exactness. For all other types, we use solely exactness. #### Exactness For `exactness`, Pydantic scores a match of a union member into one of the following three groups (from highest score to lowest score): * An exact type match, for example an `int` input to a `float | int` union validation is an exact type match for the `int` member * Validation would have succeeded in [`strict` mode](../concepts/strict_mode.md) * Validation would have succeeded in lax mode The union match which produced the highest exactness score will be considered the best match. In smart mode, the following steps are taken to try to select the best match for the input: === "`BaseModel`, `dataclass`, and `TypedDict`" 1. Union members are attempted left to right, with any successful matches scored into one of the three exactness categories described above, with the valid fields set count also tallied. 2. After all members have been evaluated, the member with the highest "valid fields set" count is returned. 3. If there's a tie for the highest "valid fields set" count, the exactness score is used as a tiebreaker, and the member with the highest exactness score is returned. 4. If validation failed on all the members, return all the errors. === "All other data types" 1. Union members are attempted left to right, with any successful matches scored into one of the three exactness categories described above. * If validation succeeds with an exact type match, that member is returned immediately and following members will not be attempted. 2. If validation succeeded on at least one member as a "strict" match, the leftmost of those "strict" matches is returned. 3. If validation succeeded on at least one member in "lax" mode, the leftmost match is returned. 4. Validation failed on all the members, return all the errors. ```python from uuid import UUID from pydantic import BaseModel class User(BaseModel): id: int | str | UUID name: str user_01 = User(id=123, name='John Doe') print(user_01) #> id=123 name='John Doe' print(user_01.id) #> 123 user_02 = User(id='1234', name='John Doe') print(user_02) #> id='1234' name='John Doe' print(user_02.id) #> 1234 user_03_uuid = UUID('cf57432e-809e-4353-adbd-9d5c0d733868') user_03 = User(id=user_03_uuid, name='John Doe') print(user_03) #> id=UUID('cf57432e-809e-4353-adbd-9d5c0d733868') name='John Doe' print(user_03.id) #> cf57432e-809e-4353-adbd-9d5c0d733868 print(user_03_uuid.int) #> 275603287559914445491632874575877060712 ``` ## Discriminated unions **Discriminated unions are sometimes referred to as "Tagged unions".** Unions can be validated more efficiently using a discriminator, by specifically choosing which member of the union to validate against. This makes validation more efficient and also avoids a proliferation of errors when validation fails. Adding discriminator to unions also means the generated JSON schema implements the `discriminator` attribute from the [OpenAPI specification](https://swagger.io/specification/#discriminator-object). [](){#discriminated-unions-with-str-discriminators} ### Discriminated unions with string discriminators Frequently, in the case of a union with multiple models, there is a common field to all members of the union that can be used to distinguish which union case the data should be validated against. To validate models based on that information, you can set a common field on each model of the union (`pet_type` in the example below), typed as accepting one or multiple literal values. When defining the discriminated union type, the `discriminator` parameter of [the `Field()` function](./fields.md) must be specified (the [`Discriminator`][pydantic.Discriminator] type can also be used). ```python from typing import Literal from pydantic import BaseModel, Field, ValidationError class Cat(BaseModel): pet_type: Literal['cat'] meows: int class Dog(BaseModel): pet_type: Literal['dog'] barks: float class Lizard(BaseModel): pet_type: Literal['reptile', 'lizard'] scales: bool class Model(BaseModel): pet: Cat | Dog | Lizard = Field(discriminator='pet_type') n: int print(Model(pet={'pet_type': 'dog', 'barks': 3.14}, n=1)) #> pet=Dog(pet_type='dog', barks=3.14) n=1 try: Model(pet={'pet_type': 'dog'}, n=1) except ValidationError as e: print(e) """ 1 validation error for Model pet.dog.barks Field required [type=missing, input_value={'pet_type': 'dog'}, input_type=dict] """ ``` /// version-added | v2.13 [Root models](./models.md#rootmodel-and-custom-root-types) with a [`Literal`][typing.Literal] root type can be used in place of [`Literal`][typing.Literal] types. /// ### Discriminated Unions with callable `Discriminator` ??? api "API Documentation" [`pydantic.types.Discriminator`][pydantic.types.Discriminator]
In the case of a union with multiple models, sometimes there isn't a single uniform field across all models that you can use as a discriminator. This is the perfect use case for a callable `Discriminator`. !!! tip When you're designing callable discriminators, remember that you might have to account for both `dict` and model type inputs. This pattern is similar to that of `mode='before'` validators, where you have to anticipate various forms of input. But wait! You ask, I only anticipate passing in `dict` types, why do I need to account for models? Pydantic uses callable discriminators for serialization as well, at which point the input to your callable is very likely to be a model instance. In the following examples, you'll see that the callable discriminators are designed to handle both `dict` and model inputs. If you don't follow this practice, it's likely that you'll, in the best case, get warnings during serialization, and in the worst case, get runtime errors during validation. ```python {lint="skip"} from typing import Annotated, Any, Literal from pydantic import BaseModel, Discriminator, Tag class Pie(BaseModel): time_to_cook: int num_ingredients: int class ApplePie(Pie): fruit: Literal['apple'] = 'apple' class PumpkinPie(Pie): filling: Literal['pumpkin'] = 'pumpkin' def get_discriminator_value(v: Any) -> str | None: if isinstance(v, dict): return v.get('fruit', v.get('filling')) return getattr(v, 'fruit', getattr(v, 'filling', None)) class ThanksgivingDinner(BaseModel): dessert: Annotated[ Annotated[ApplePie, Tag('apple')] | Annotated[PumpkinPie, Tag('pumpkin')], Discriminator(get_discriminator_value), ] apple_variation = ThanksgivingDinner.model_validate( {'dessert': {'fruit': 'apple', 'time_to_cook': 60, 'num_ingredients': 8}} ) print(repr(apple_variation)) """ ThanksgivingDinner(dessert=ApplePie(time_to_cook=60, num_ingredients=8, fruit='apple')) """ pumpkin_variation = ThanksgivingDinner.model_validate( { 'dessert': { 'filling': 'pumpkin', 'time_to_cook': 40, 'num_ingredients': 6, } } ) print(repr(pumpkin_variation)) """ ThanksgivingDinner(dessert=PumpkinPie(time_to_cook=40, num_ingredients=6, filling='pumpkin')) """ ``` `Discriminator`s can also be used to validate union types with combinations of models and primitive types. For example: ```python {lint="skip"} from typing import Annotated, Any from pydantic import BaseModel, Discriminator, Tag, ValidationError def model_x_discriminator(v: Any) -> str | None: if isinstance(v, int): return 'int' if isinstance(v, (dict, BaseModel)): return 'model' else: # return None if the discriminator value isn't found return None class SpecialValue(BaseModel): value: int class DiscriminatedModel(BaseModel): value: Annotated[ Annotated[int, Tag('int')] | Annotated['SpecialValue', Tag('model')], Discriminator(model_x_discriminator), ] model_data = {'value': {'value': 1}} m = DiscriminatedModel.model_validate(model_data) print(m) #> value=SpecialValue(value=1) int_data = {'value': 123} m = DiscriminatedModel.model_validate(int_data) print(m) #> value=123 try: DiscriminatedModel.model_validate({'value': 'not an int or a model'}) except ValidationError as e: print(e) # (1)! """ 1 validation error for DiscriminatedModel value Unable to extract tag using discriminator model_x_discriminator() [type=union_tag_not_found, input_value='not an int or a model', input_type=str] """ ``` 1. Notice the callable discriminator function returns `None` if a discriminator value is not found. When `None` is returned, this `union_tag_not_found` error is raised. !!! note Using the [annotated pattern](./fields.md#the-annotated-pattern) can be handy to regroup the union and `discriminator` information. See the next example for more details. There are a few ways to set a discriminator for a field, all varying slightly in syntax. For `str` discriminators: ```python {lint="skip" test="skip"} some_field: ... | ... = Field(discriminator='my_discriminator') some_field: Annotated[... | ..., Field(discriminator='my_discriminator')] ``` For callable `Discriminator`s: ```python {lint="skip" test="skip"} some_field: ... | ... = Field(discriminator=Discriminator(...)) some_field: Annotated[... | ..., Discriminator(...)] some_field: Annotated[... | ..., Field(discriminator=Discriminator(...))] ``` ### Nested Discriminated Unions Only one discriminator can be set for a field but sometimes you want to combine multiple discriminators. You can do it by creating nested `Annotated` types, e.g.: ```python from typing import Annotated, Literal from pydantic import BaseModel, Field, ValidationError class BlackCat(BaseModel): pet_type: Literal['cat'] color: Literal['black'] black_name: str class WhiteCat(BaseModel): pet_type: Literal['cat'] color: Literal['white'] white_name: str Cat = Annotated[BlackCat | WhiteCat, Field(discriminator='color')] class Dog(BaseModel): pet_type: Literal['dog'] name: str Pet = Annotated[Cat | Dog, Field(discriminator='pet_type')] class Model(BaseModel): pet: Pet n: int m = Model(pet={'pet_type': 'cat', 'color': 'black', 'black_name': 'felix'}, n=1) print(m) #> pet=BlackCat(pet_type='cat', color='black', black_name='felix') n=1 try: Model(pet={'pet_type': 'cat', 'color': 'red'}, n='1') except ValidationError as e: print(e) """ 1 validation error for Model pet.cat Input tag 'red' found using 'color' does not match any of the expected tags: 'black', 'white' [type=union_tag_invalid, input_value={'pet_type': 'cat', 'color': 'red'}, input_type=dict] """ try: Model(pet={'pet_type': 'cat', 'color': 'black'}, n='1') except ValidationError as e: print(e) """ 1 validation error for Model pet.cat.black.black_name Field required [type=missing, input_value={'pet_type': 'cat', 'color': 'black'}, input_type=dict] """ ``` !!! tip If you want to validate data against a union, and solely a union, you can use pydantic's [`TypeAdapter`](../concepts/type_adapter.md) construct instead of inheriting from the standard `BaseModel`. In the context of the previous example, we have the following: ```python {lint="skip" test="skip"} type_adapter = TypeAdapter(Pet) pet = type_adapter.validate_python( {'pet_type': 'cat', 'color': 'black', 'black_name': 'felix'} ) print(repr(pet)) #> BlackCat(pet_type='cat', color='black', black_name='felix') ``` ## Union Validation Errors When union validation fails, error messages can be quite verbose, as they will produce validation errors for each case in the union. This is especially noticeable when dealing with recursive models, where reasons may be generated at each level of recursion. Discriminated unions help to simplify error messages in this case, as validation errors are only produced for the case with a matching discriminator value. Making sense of a union failure means working out which member *should* have matched. A [`ValidationError`][pydantic_core.ValidationError] includes each member's errors and rejected values; when the failure happens in a deployed service, [Logfire retains those details with the surrounding trace](../errors/troubleshooting.md), so you can make that comparison after the fact. You can also customize the error type, message, and context for a `Discriminator` by passing these specifications as parameters to the `Discriminator` constructor, as seen in the example below. ```python {lint="skip"} from typing import Annotated from pydantic import BaseModel, Discriminator, Tag, ValidationError # Errors are quite verbose with a normal union: class Model(BaseModel): x: 'str | Model' try: Model.model_validate({'x': {'x': {'x': 1}}}) except ValidationError as e: print(e) """ 4 validation errors for Model x.str Input should be a valid string [type=string_type, input_value={'x': {'x': 1}}, input_type=dict] x.Model.x.str Input should be a valid string [type=string_type, input_value={'x': 1}, input_type=dict] x.Model.x.Model.x.str Input should be a valid string [type=string_type, input_value=1, input_type=int] x.Model.x.Model.x.Model Input should be a valid dictionary or instance of Model [type=model_type, input_value=1, input_type=int] """ try: Model.model_validate({'x': {'x': {'x': {}}}}) except ValidationError as e: print(e) """ 4 validation errors for Model x.str Input should be a valid string [type=string_type, input_value={'x': {'x': {}}}, input_type=dict] x.Model.x.str Input should be a valid string [type=string_type, input_value={'x': {}}, input_type=dict] x.Model.x.Model.x.str Input should be a valid string [type=string_type, input_value={}, input_type=dict] x.Model.x.Model.x.Model.x Field required [type=missing, input_value={}, input_type=dict] """ # Errors are much simpler with a discriminated union: def model_x_discriminator(v): if isinstance(v, str): return 'str' if isinstance(v, (dict, BaseModel)): return 'model' class DiscriminatedModel(BaseModel): x: Annotated[ Annotated[str, Tag('str')] | Annotated['DiscriminatedModel', Tag('model')], Discriminator( model_x_discriminator, custom_error_type='invalid_union_member', # (1)! custom_error_message='Invalid union member', # (2)! custom_error_context={'discriminator': 'str_or_model'}, # (3)! ), ] try: DiscriminatedModel.model_validate({'x': {'x': {'x': 1}}}) except ValidationError as e: print(e) """ 1 validation error for DiscriminatedModel x.model.x.model.x Invalid union member [type=invalid_union_member, input_value=1, input_type=int] """ try: DiscriminatedModel.model_validate({'x': {'x': {'x': {}}}}) except ValidationError as e: print(e) """ 1 validation error for DiscriminatedModel x.model.x.model.x.model.x Field required [type=missing, input_value={}, input_type=dict] """ # The data is still handled properly when valid: data = {'x': {'x': {'x': 'a'}}} m = DiscriminatedModel.model_validate(data) print(m.model_dump()) #> {'x': {'x': {'x': 'a'}}} ``` 1. `custom_error_type` is the `type` attribute of the `ValidationError` raised when validation fails. 2. `custom_error_message` is the `msg` attribute of the `ValidationError` raised when validation fails. 3. `custom_error_context` is the `ctx` attribute of the `ValidationError` raised when validation fails. You can also simplify error messages by labeling each case with a [`Tag`][pydantic.types.Tag]. This is especially useful when you have complex types like those in this example: ```python {lint="skip"} from typing import Annotated from pydantic import AfterValidator, Tag, TypeAdapter, ValidationError DoubledList = Annotated[list[int], AfterValidator(lambda x: x * 2)] StringsMap = dict[str, str] # Not using any `Tag`s for each union case, the errors are not so nice to look at adapter = TypeAdapter(DoubledList | StringsMap) try: adapter.validate_python(['a']) except ValidationError as exc_info: print(exc_info) """ 2 validation errors for union[function-after[(), list[int]],dict[str,str]] function-after[(), list[int]].0 Input should be a valid integer, unable to parse string as an integer [type=int_parsing, input_value='a', input_type=str] dict[str,str] Input should be a valid dictionary [type=dict_type, input_value=['a'], input_type=list] """ tag_adapter = TypeAdapter( Annotated[DoubledList, Tag('DoubledList')] | Annotated[StringsMap, Tag('StringsMap')] ) try: tag_adapter.validate_python(['a']) except ValidationError as exc_info: print(exc_info) """ 2 validation errors for union[DoubledList,StringsMap] DoubledList.0 Input should be a valid integer, unable to parse string as an integer [type=int_parsing, input_value='a', input_type=str] StringsMap Input should be a valid dictionary [type=dict_type, input_value=['a'], input_type=list] """ ``` pydantic-pydantic-e28e879/docs/concepts/validation_decorator.md000066400000000000000000000264201526274674700250270ustar00rootroot00000000000000??? api "API Documentation" [`pydantic.validate_call_decorator.validate_call`][pydantic.validate_call_decorator.validate_call]
The [`validate_call()`][pydantic.validate_call] decorator allows the arguments passed to a function to be parsed and validated using the function's annotations before the function is called. While under the hood this uses the same approach of model creation and initialisation (see [Validators](validators.md) for more details), it provides an extremely easy way to apply validation to your code with minimal boilerplate. Example of usage: ```python from pydantic import ValidationError, validate_call @validate_call def repeat(s: str, count: int, *, separator: bytes = b'') -> bytes: b = s.encode() return separator.join(b for _ in range(count)) a = repeat('hello', 3) print(a) #> b'hellohellohello' b = repeat('x', '4', separator=b' ') print(b) #> b'x x x x' try: c = repeat('hello', 'wrong') except ValidationError as exc: print(exc) """ 1 validation error for repeat 1 Input should be a valid integer, unable to parse string as an integer [type=int_parsing, input_value='wrong', input_type=str] """ ``` ## Parameter types Parameter types are inferred from type annotations on the function, or as [`Any`][typing.Any] if not annotated. All types listed in [types](types.md) can be validated, including Pydantic models and [custom types](types.md#custom-types). As with the rest of Pydantic, types are by default coerced by the decorator before they're passed to the actual function: ```python from datetime import date from pydantic import validate_call @validate_call def greater_than(d1: date, d2: date, *, include_equal=False) -> date: # (1)! if include_equal: return d1 >= d2 else: return d1 > d2 d1 = '2000-01-01' # (2)! d2 = date(2001, 1, 1) greater_than(d1, d2, include_equal=True) ``` 1. Because `include_equal` has no type annotation, it will be inferred as [`Any`][typing.Any]. 2. Although `d1` is a string, it will be converted to a [`date`][datetime.date] object. Type coercion like this can be extremely helpful, but also confusing or not desired (see [model data conversion](models.md#data-conversion)). [Strict mode](strict_mode.md) can be enabled by using a [custom configuration](#custom-configuration). !!! note "Validating the return value" By default, the return value of the function is **not** validated. To do so, the `validate_return` argument of the decorator can be set to `True`. ## Function signatures The [`validate_call()`][pydantic.validate_call] decorator is designed to work with functions using all possible [parameter configurations][parameter] and all possible combinations of these: * Positional or keyword parameters with or without defaults. * Keyword-only parameters: parameters after `*,`. * Positional-only parameters: parameters before `, /`. * Variable positional parameters defined via `*` (often `*args`). * Variable keyword parameters defined via `**` (often `**kwargs`). ??? example ```python from pydantic import validate_call @validate_call def pos_or_kw(a: int, b: int = 2) -> str: return f'a={a} b={b}' print(pos_or_kw(1, b=3)) #> a=1 b=3 @validate_call def kw_only(*, a: int, b: int = 2) -> str: return f'a={a} b={b}' print(kw_only(a=1)) #> a=1 b=2 print(kw_only(a=1, b=3)) #> a=1 b=3 @validate_call def pos_only(a: int, b: int = 2, /) -> str: return f'a={a} b={b}' print(pos_only(1)) #> a=1 b=2 @validate_call def var_args(*args: int) -> str: return str(args) print(var_args(1)) #> (1,) print(var_args(1, 2, 3)) #> (1, 2, 3) @validate_call def var_kwargs(**kwargs: int) -> str: return str(kwargs) print(var_kwargs(a=1)) #> {'a': 1} print(var_kwargs(a=1, b=2)) #> {'a': 1, 'b': 2} @validate_call def armageddon( a: int, /, b: int, *c: int, d: int, e: int = None, **f: int, ) -> str: return f'a={a} b={b} c={c} d={d} e={e} f={f}' print(armageddon(1, 2, d=3)) #> a=1 b=2 c=() d=3 e=None f={} print(armageddon(1, 2, 3, 4, 5, 6, d=8, e=9, f=10, spam=11)) #> a=1 b=2 c=(3, 4, 5, 6) d=8 e=9 f={'f': 10, 'spam': 11} ``` !!! note "[`Unpack`][typing.Unpack] for keyword parameters" [`Unpack`][typing.Unpack] and typed dictionaries can be used to annotate the variable keyword parameters of a function: ```python from typing_extensions import TypedDict, Unpack from pydantic import validate_call class Point(TypedDict): x: int y: int @validate_call def add_coords(**kwargs: Unpack[Point]) -> int: return kwargs['x'] + kwargs['y'] add_coords(x=1, y=2) ``` For reference, see the [related specification section] and [PEP 692]. /// version-added | v2.10 /// [related specification section]: https://typing.readthedocs.io/en/latest/spec/callables.html#unpack-for-keyword-arguments [PEP 692]: https://peps.python.org/pep-0692/ ## Using the [`Field()`][pydantic.Field] function to describe function parameters The [`Field()` function](fields.md) can also be used with the decorator to provide extra information about the field and validations. If you don't make use of the `default` or `default_factory` parameter, it is recommended to use the [annotated pattern](./fields.md#the-annotated-pattern) (so that type checkers infer the parameter as being required). Otherwise, the [`Field()`][pydantic.Field] function can be used as a default value (again, to trick type checkers into thinking a default value is provided for the parameter). ```python from typing import Annotated from pydantic import Field, ValidationError, validate_call @validate_call def how_many(num: Annotated[int, Field(gt=10)]): return num try: how_many(1) except ValidationError as e: print(e) """ 1 validation error for how_many 0 Input should be greater than 10 [type=greater_than, input_value=1, input_type=int] """ @validate_call def return_value(value: str = Field(default='default value')): return value print(return_value()) #> default value ``` [Aliases](fields.md#field-aliases) can be used with the decorator as normal: ```python from typing import Annotated from pydantic import Field, validate_call @validate_call def how_many(num: Annotated[int, Field(gt=10, alias='number')]): return num how_many(number=42) ``` ## Accessing the original function The original function which was decorated can still be accessed by using the `raw_function` attribute. This is useful if in some scenarios you trust your input arguments and want to call the function in the most efficient way (see [notes on performance](#performance) below): ```python from pydantic import validate_call @validate_call def repeat(s: str, count: int, *, separator: bytes = b'') -> bytes: b = s.encode() return separator.join(b for _ in range(count)) a = repeat('hello', 3) print(a) #> b'hellohellohello' b = repeat.raw_function('good bye', 2, separator=b', ') print(b) #> b'good bye, good bye' ``` ## Async functions [`validate_call()`][pydantic.validate_call] can also be used on async functions: ```python class Connection: async def execute(self, sql, *args): return 'testing@example.com' conn = Connection() # ignore-above import asyncio from pydantic import PositiveInt, ValidationError, validate_call @validate_call async def get_user_email(user_id: PositiveInt): # `conn` is some fictional connection to a database email = await conn.execute('select email from users where id=$1', user_id) if email is None: raise RuntimeError('user not found') else: return email async def main(): email = await get_user_email(123) print(email) #> testing@example.com try: await get_user_email(-4) except ValidationError as exc: print(exc.errors()) """ [ { 'type': 'greater_than', 'loc': (0,), 'msg': 'Input should be greater than 0', 'input': -4, 'ctx': {'gt': 0}, 'url': 'https://errors.pydantic.dev/2/v/greater_than', } ] """ asyncio.run(main()) # requires: `conn.execute()` that will return `'testing@example.com'` ``` ## Compatibility with type checkers As the [`validate_call()`][pydantic.validate_call] decorator preserves the decorated function's signature, it should be compatible with type checkers (such as mypy and pyright). However, due to current limitations in the Python type system, the [`raw_function`](#accessing-the-original-function) or other attributes won't be recognized and you will need to suppress the error using (usually with a `# type: ignore` comment). ## Custom configuration Similarly to Pydantic models, the `config` parameter of the decorator can be used to specify a custom configuration: ```python from pydantic import ConfigDict, ValidationError, validate_call class Foobar: def __init__(self, v: str): self.v = v def __add__(self, other: 'Foobar') -> str: return f'{self} + {other}' def __str__(self) -> str: return f'Foobar({self.v})' @validate_call(config=ConfigDict(arbitrary_types_allowed=True)) def add_foobars(a: Foobar, b: Foobar): return a + b c = add_foobars(Foobar('a'), Foobar('b')) print(c) #> Foobar(a) + Foobar(b) try: add_foobars(1, 2) except ValidationError as e: print(e) """ 2 validation errors for add_foobars 0 Input should be an instance of Foobar [type=is_instance_of, input_value=1, input_type=int] 1 Input should be an instance of Foobar [type=is_instance_of, input_value=2, input_type=int] """ ``` ## Extension — validating arguments before calling a function In some cases, it may be helpful to separate validation of a function's arguments from the function call itself. This might be useful when a particular function is costly/time consuming. Here's an example of a workaround you can use for that pattern: ```python from pydantic import validate_call @validate_call def validate_foo(a: int, b: int): def foo(): return a + b return foo foo = validate_foo(a=1, b=2) print(foo()) #> 3 ``` ## Limitations ### Validation exception Currently upon validation failure, a standard Pydantic [`ValidationError`][pydantic_core.ValidationError] is raised (see [model error handling](models.md#error-handling) for details). This is also true for missing required arguments, where Python normally raises a [`TypeError`][]. The error identifies the argument and value that were rejected. If you also need those details in the surrounding trace context, [Logfire](../errors/troubleshooting.md) can record them when a decorated call fails. ### Performance We've made a big effort to make Pydantic as performant as possible. While the inspection of the decorated function is only performed once, there will still be a performance impact when making calls to the function compared to using the original function. In many situations, this will have little or no noticeable effect. However, be aware that [`validate_call()`][pydantic.validate_call] is not an equivalent or alternative to function definitions in strongly typed languages, and it never will be. pydantic-pydantic-e28e879/docs/concepts/validators.md000066400000000000000000000732621526274674700230110ustar00rootroot00000000000000In addition to Pydantic's [built-in validation capabilities](./fields.md#field-constraints), you can leverage custom validators at the field and model levels to enforce more complex constraints and ensure the integrity of your data. !!! tip Want to quickly jump to the relevant validator section?
* Field validators --- * [field *after* validators](#field-after-validator) * [field *before* validators](#field-before-validator) * [field *plain* validators](#field-plain-validator) * [field *wrap* validators](#field-wrap-validator) * Model validators --- * [model *before* validators](#model-before-validator) * [model *after* validators](#model-after-validator) * [model *wrap* validators](#model-wrap-validator)
## Field validators ??? api "API Documentation" [`pydantic.functional_validators.WrapValidator`][pydantic.functional_validators.WrapValidator]
[`pydantic.functional_validators.PlainValidator`][pydantic.functional_validators.PlainValidator]
[`pydantic.functional_validators.BeforeValidator`][pydantic.functional_validators.BeforeValidator]
[`pydantic.functional_validators.AfterValidator`][pydantic.functional_validators.AfterValidator]
[`pydantic.functional_validators.field_validator`][pydantic.functional_validators.field_validator]
In its simplest form, a field validator is a callable taking the value to be validated as an argument and **returning the validated value**. The callable can perform checks for specific conditions (see [raising validation errors](#raising-validation-errors)) and make changes to the validated value (coercion or mutation). **Four** different types of validators can be used. They can all be defined using the [annotated pattern](./fields.md#the-annotated-pattern) or using the [`@field_validator`][pydantic.field_validator] decorator, applied on a [class method][classmethod]: * ***After* validators**: run after Pydantic's internal validation. They are generally more type safe and thus easier to implement. {#field-after-validator} === "Annotated pattern" Here is an example of a validator performing a validation check, and returning the value unchanged. ```python from typing import Annotated from pydantic import AfterValidator, BaseModel, ValidationError def is_even(value: int) -> int: if value % 2 == 1: raise ValueError(f'{value} is not an even number') return value # (1)! class Model(BaseModel): number: Annotated[int, AfterValidator(is_even)] try: Model(number=1) except ValidationError as err: print(err) """ 1 validation error for Model number Value error, 1 is not an even number [type=value_error, input_value=1, input_type=int] """ ``` 1. Note that it is important to return the validated value. === "Decorator" Here is an example of a validator performing a validation check, and returning the value unchanged, this time using the [`field_validator()`][pydantic.field_validator] decorator. ```python from pydantic import BaseModel, ValidationError, field_validator class Model(BaseModel): number: int @field_validator('number', mode='after') # (1)! @classmethod def is_even(cls, value: int) -> int: if value % 2 == 1: raise ValueError(f'{value} is not an even number') return value # (2)! try: Model(number=1) except ValidationError as err: print(err) """ 1 validation error for Model number Value error, 1 is not an even number [type=value_error, input_value=1, input_type=int] """ ``` 1. `'after'` is the default mode for the decorator, and can be omitted. 2. Note that it is important to return the validated value. ??? example "Example mutating the value" Here is an example of a validator making changes to the validated value (no exception is raised). === "Annotated pattern" ```python from typing import Annotated from pydantic import AfterValidator, BaseModel def double_number(value: int) -> int: return value * 2 class Model(BaseModel): number: Annotated[int, AfterValidator(double_number)] print(Model(number=2)) #> number=4 ``` === "Decorator" ```python from pydantic import BaseModel, field_validator class Model(BaseModel): number: int @field_validator('number', mode='after') # (1)! @classmethod def double_number(cls, value: int) -> int: return value * 2 print(Model(number=2)) #> number=4 ``` 1. `'after'` is the default mode for the decorator, and can be omitted. * ***Before* validators**: run before Pydantic's internal parsing and validation (e.g. coercion of a `str` to an `int`). These are more flexible than [*after* validators](#field-after-validator), but they also have to deal with the raw input, which in theory could be any arbitrary object. You should also avoid mutating the value directly if you are raising a [validation error](#raising-validation-errors) later in your validator function, as the mutated value may be passed to other validators if using [unions](./unions.md). {#field-before-validator} The value returned from this callable is then validated against the provided type annotation by Pydantic. === "Annotated pattern" ```python from typing import Annotated, Any from pydantic import BaseModel, BeforeValidator, ValidationError def ensure_list(value: Any) -> Any: # (1)! if not isinstance(value, list): # (2)! return [value] else: return value class Model(BaseModel): numbers: Annotated[list[int], BeforeValidator(ensure_list)] print(Model(numbers=2)) #> numbers=[2] try: Model(numbers='str') except ValidationError as err: print(err) # (3)! """ 1 validation error for Model numbers.0 Input should be a valid integer, unable to parse string as an integer [type=int_parsing, input_value='str', input_type=str] """ ``` 1. Notice the use of [`Any`][typing.Any] as a type hint for `value`. *Before* validators take the raw input, which can be anything. 2. Note that you might want to check for other sequence types (such as tuples) that would normally successfully validate against the `list` type. *Before* validators give you more flexibility, but you have to account for every possible case. 3. Pydantic still performs validation against the `int` type, no matter if our `ensure_list` validator did operations on the original input type. === "Decorator" ```python from typing import Any from pydantic import BaseModel, ValidationError, field_validator class Model(BaseModel): numbers: list[int] @field_validator('numbers', mode='before') @classmethod def ensure_list(cls, value: Any) -> Any: # (1)! if not isinstance(value, list): # (2)! return [value] else: return value print(Model(numbers=2)) #> numbers=[2] try: Model(numbers='str') except ValidationError as err: print(err) # (3)! """ 1 validation error for Model numbers.0 Input should be a valid integer, unable to parse string as an integer [type=int_parsing, input_value='str', input_type=str] """ ``` 1. Notice the use of [`Any`][typing.Any] as a type hint for `value`. *Before* validators take the raw input, which can be anything. 2. Note that you might want to check for other sequence types (such as tuples) that would normally successfully validate against the `list` type. *Before* validators give you more flexibility, but you have to account for every possible case. 3. Pydantic still performs validation against the `int` type, no matter if our `ensure_list` validator did operations on the original input type. * ***Plain* validators**: act similarly to *before* validators but they **terminate validation immediately** after returning, so no further validators are called and Pydantic does not do any of its internal validation against the field type. {#field-plain-validator} === "Annotated pattern" ```python from typing import Annotated, Any from pydantic import BaseModel, PlainValidator def val_number(value: Any) -> Any: if isinstance(value, int): return value * 2 else: return value class Model(BaseModel): number: Annotated[int, PlainValidator(val_number)] print(Model(number=4)) #> number=8 print(Model(number='invalid')) # (1)! #> number='invalid' ``` 1. Although `'invalid'` shouldn't validate against the `int` type, Pydantic accepts the input. === "Decorator" ```python from typing import Any from pydantic import BaseModel, field_validator class Model(BaseModel): number: int @field_validator('number', mode='plain') @classmethod def val_number(cls, value: Any) -> Any: if isinstance(value, int): return value * 2 else: return value print(Model(number=4)) #> number=8 print(Model(number='invalid')) # (1)! #> number='invalid' ``` 1. Although `'invalid'` shouldn't validate against the `int` type, Pydantic accepts the input. * ***Wrap* validators**: are the most flexible of all. You can run code before or after Pydantic and other validators process the input, or you can terminate validation immediately, either by returning the value early or by raising an error. {#field-wrap-validator} Such validators must be defined with a **mandatory** extra *handler* parameter: a callable taking the value to be validated as an argument. Internally, this handler will delegate validation of the value to Pydantic. You are free to wrap the call to the handler in a [`try..except`][handling exceptions] block, or not call it at all. [handling exceptions]: https://docs.python.org/3/tutorial/errors.html#handling-exceptions === "Annotated pattern" ```python {lint="skip"} from typing import Any from typing import Annotated from pydantic import BaseModel, Field, ValidationError, ValidatorFunctionWrapHandler, WrapValidator def truncate(value: Any, handler: ValidatorFunctionWrapHandler) -> str: try: return handler(value) except ValidationError as err: if err.errors()[0]['type'] == 'string_too_long': return handler(value[:5]) else: raise class Model(BaseModel): my_string: Annotated[str, Field(max_length=5), WrapValidator(truncate)] print(Model(my_string='abcde')) #> my_string='abcde' print(Model(my_string='abcdef')) #> my_string='abcde' ``` === "Decorator" ```python {lint="skip"} from typing import Any from typing import Annotated from pydantic import BaseModel, Field, ValidationError, ValidatorFunctionWrapHandler, field_validator class Model(BaseModel): my_string: Annotated[str, Field(max_length=5)] @field_validator('my_string', mode='wrap') @classmethod def truncate(cls, value: Any, handler: ValidatorFunctionWrapHandler) -> str: try: return handler(value) except ValidationError as err: if err.errors()[0]['type'] == 'string_too_long': return handler(value[:5]) else: raise print(Model(my_string='abcde')) #> my_string='abcde' print(Model(my_string='abcdef')) #> my_string='abcde' ``` !!! note "Validation of default values" As mentioned in the [fields documentation](./fields.md#validate-default-values), default values of fields are *not* validated unless configured to do so, and thus custom validators will not be applied as well. ### Which validator pattern to use While both approaches can achieve the same thing, each pattern provides different benefits. #### Using the annotated pattern One of the key benefits of using the [annotated pattern](./fields.md#the-annotated-pattern) is to make validators reusable: ```python from typing import Annotated from pydantic import AfterValidator, BaseModel def is_even(value: int) -> int: if value % 2 == 1: raise ValueError(f'{value} is not an even number') return value EvenNumber = Annotated[int, AfterValidator(is_even)] class Model1(BaseModel): my_number: EvenNumber class Model2(BaseModel): other_number: Annotated[EvenNumber, AfterValidator(lambda v: v + 2)] class Model3(BaseModel): list_of_even_numbers: list[EvenNumber] # (1)! ``` 1. As mentioned in the [annotated pattern](./fields.md#the-annotated-pattern) documentation, we can also make use of validators for specific parts of the annotation (in this case, validation is applied for list items, but not the whole list). It is also easier to understand which validators are applied to a type, by just looking at the field annotation. #### Using the decorator pattern One of the key benefits of using the [`field_validator()`][pydantic.field_validator] decorator is to apply the function to multiple fields: ```python from pydantic import BaseModel, field_validator class Model(BaseModel): f1: str f2: str @field_validator('f1', 'f2', mode='before') @classmethod def capitalize(cls, value: str) -> str: return value.capitalize() ``` Here are a couple additional notes about the decorator usage: * If you want the validator to apply to all fields (including the ones defined in subclasses), you can pass `'*'` as the field name argument. * By default, the decorator will ensure the provided field name(s) are defined on the model. If you want to disable this check during class creation, you can do so by passing `False` to the `check_fields` argument. This is useful when the field validator is defined on a base class, and the field is expected to exist on subclasses. ## Model validators ??? api "API Documentation" [`pydantic.functional_validators.model_validator`][pydantic.functional_validators.model_validator]
Validation can also be performed on the entire model's data using the [`model_validator()`][pydantic.model_validator] decorator. **Three** different types of model validators can be used: * ***After* validators**: run after the whole model has been validated. As such, they are defined as *instance* methods and can be seen as post-initialization hooks. Important note: the validated instance should be returned. {#model-after-validator} ```python from typing_extensions import Self from pydantic import BaseModel, model_validator class UserModel(BaseModel): username: str password: str password_repeat: str @model_validator(mode='after') def check_passwords_match(self) -> Self: if self.password != self.password_repeat: raise ValueError('Passwords do not match') return self ``` * ***Before* validators**: are run before the model is instantiated. These are more flexible than *after* validators, but they also have to deal with the raw input, which in theory could be any arbitrary object. You should also avoid mutating the value directly if you are raising a [validation error](#raising-validation-errors) later in your validator function, as the mutated value may be passed to other validators if using [unions](./unions.md). {#model-before-validator} ```python from typing import Any from pydantic import BaseModel, model_validator class UserModel(BaseModel): username: str @model_validator(mode='before') @classmethod def check_card_number_not_present(cls, data: Any) -> Any: # (1)! if isinstance(data, dict): # (2)! if 'card_number' in data: raise ValueError("'card_number' should not be included") return data ``` 1. Notice the use of [`Any`][typing.Any] as a type hint for `data`. *Before* validators take the raw input, which can be anything. 2. Most of the time, the input data will be a dictionary (e.g. when calling `UserModel(username='...')`). However, this is not always the case. For instance, if the [`from_attributes`][pydantic.ConfigDict.from_attributes] configuration value is set, you might receive an arbitrary class instance for the `data` argument. * ***Wrap* validators**: are the most flexible of all. You can run code before or after Pydantic and other validators process the input data, or you can terminate validation immediately, either by returning the data early or by raising an error. {#model-wrap-validator} ```python {lint="skip"} import logging from typing import Any from typing_extensions import Self from pydantic import BaseModel, ModelWrapValidatorHandler, ValidationError, model_validator class UserModel(BaseModel): username: str @model_validator(mode='wrap') @classmethod def log_failed_validation(cls, data: Any, handler: ModelWrapValidatorHandler[Self]) -> Self: try: return handler(data) except ValidationError: logging.error('Model %s failed to validate with data %s', cls, data) raise ``` !!! note "On inheritance" A model validator defined in a base class will be called during the validation of a subclass instance. Overriding a model validator in a subclass will override the base class' validator, and thus only the subclass' version of said validator will be called. ## Raising validation errors To raise a validation error, three types of exceptions can be used: * [`ValueError`][]: this is the most common exception raised inside validators. * [`AssertionError`][]: using the [assert][] statement also works, but be aware that these statements are skipped when Python is run with the [-O][] optimization flag. * [`PydanticCustomError`][pydantic_core.PydanticCustomError]: a bit more verbose, but provides extra flexibility: ```python from pydantic_core import PydanticCustomError from pydantic import BaseModel, ValidationError, field_validator class Model(BaseModel): x: int @field_validator('x', mode='after') @classmethod def validate_x(cls, v: int) -> int: if v % 42 == 0: raise PydanticCustomError( 'the_answer_error', '{number} is the answer!', {'number': v}, ) return v try: Model(x=42 * 2) except ValidationError as e: print(e) """ 1 validation error for Model x 84 is the answer! [type=the_answer_error, input_value=84, input_type=int] """ ``` When a validator rejects data in production, [Logfire](../errors/troubleshooting.md) can record the rejected value in its structured errors, so you can see what broke the rule. ## Validation info Both the field and model validators callables (in all modes) can optionally take an extra [`ValidationInfo`][pydantic.ValidationInfo] argument, providing useful extra information, such as: * [already validated data](#validation-data) * [user defined context](#validation-context) * the current [validation mode](./models.md#validating-data): either `'python'`, `'json'` or `'strings'` (see the [`mode`][pydantic.ValidationInfo.mode] property) * the current field name, if using a [field validator](#field-validators) (see the [`field_name`][pydantic.ValidationInfo.field_name] property). ### Validation data For field validators, the already validated data can be accessed using the [`data`][pydantic.ValidationInfo.data] property. Here is an example that can be used as an alternative to the [*after* model validator](#model-after-validator) example: ```python from pydantic import BaseModel, ValidationInfo, field_validator class UserModel(BaseModel): password: str password_repeat: str username: str @field_validator('password_repeat', mode='after') @classmethod def check_passwords_match(cls, value: str, info: ValidationInfo) -> str: if value != info.data['password']: raise ValueError('Passwords do not match') return value ``` !!! warning As validation is performed in the [order fields are defined](./models.md#field-ordering), you have to make sure you are not accessing a field that hasn't been validated yet. In the code above, for example, the `username` validated value is not available yet, as it is defined *after* `password_repeat`. The [`data`][pydantic.ValidationInfo.data] property is `None` for [model validators](#model-validators). ### Validation context You can pass a context object to the [validation methods](./models.md#validating-data), which can be accessed inside the validator functions using the [`context`][pydantic.ValidationInfo.context] property: ```python from pydantic import BaseModel, ValidationInfo, field_validator class Model(BaseModel): text: str @field_validator('text', mode='after') @classmethod def remove_stopwords(cls, v: str, info: ValidationInfo) -> str: if isinstance(info.context, dict): stopwords = info.context.get('stopwords', set()) v = ' '.join(w for w in v.split() if w.lower() not in stopwords) return v data = {'text': 'This is an example document'} print(Model.model_validate(data)) # no context #> text='This is an example document' print(Model.model_validate(data, context={'stopwords': ['this', 'is', 'an']})) #> text='example document' ``` Similarly, you can [use a context for serialization](../concepts/serialization.md#serialization-context). ??? note "Providing context when directly instantiating a model" It is currently not possible to provide a context when directly instantiating a model (i.e. when calling `Model(...)`). You can work around this through the use of a [`ContextVar`][contextvars.ContextVar] and a custom `__init__` method: ```python from __future__ import annotations from collections.abc import Generator from contextlib import contextmanager from contextvars import ContextVar from typing import Any from pydantic import BaseModel, ValidationInfo, field_validator _init_context_var = ContextVar('_init_context_var', default=None) @contextmanager def init_context(value: dict[str, Any]) -> Generator[None]: token = _init_context_var.set(value) try: yield finally: _init_context_var.reset(token) class Model(BaseModel): my_number: int def __init__(self, /, **data: Any) -> None: self.__pydantic_validator__.validate_python( data, self_instance=self, context=_init_context_var.get(), ) @field_validator('my_number') @classmethod def multiply_with_context(cls, value: int, info: ValidationInfo) -> int: if isinstance(info.context, dict): multiplier = info.context.get('multiplier', 1) value = value * multiplier return value print(Model(my_number=2)) #> my_number=2 with init_context({'multiplier': 3}): print(Model(my_number=2)) #> my_number=6 print(Model(my_number=2)) #> my_number=2 ``` ## Ordering of validators When using the [annotated pattern](#using-the-annotated-pattern), the order in which validators are applied is defined as follows: [*before*](#field-before-validator) and [*wrap*](#field-wrap-validator) validators are run from right to left, and [*after*](#field-after-validator) validators are then run from left to right: ```python {lint="skip" test="skip"} from pydantic import AfterValidator, BaseModel, BeforeValidator, WrapValidator class Model(BaseModel): name: Annotated[ str, AfterValidator(runs_3rd), AfterValidator(runs_4th), BeforeValidator(runs_2nd), WrapValidator(runs_1st), ] ``` Internally, validators defined using [the decorator](#using-the-decorator-pattern) are converted to their annotated form counterpart and added last after the existing metadata for the field. This means that the same ordering logic applies. ## Special types Pydantic provides a few special utilities that can be used to customize validation. * [`InstanceOf`][pydantic.functional_validators.InstanceOf] can be used to validate that a value is an instance of a given class. ```python from pydantic import BaseModel, InstanceOf, ValidationError class Fruit: def __repr__(self): return self.__class__.__name__ class Banana(Fruit): ... class Apple(Fruit): ... class Basket(BaseModel): fruits: list[InstanceOf[Fruit]] print(Basket(fruits=[Banana(), Apple()])) #> fruits=[Banana, Apple] try: Basket(fruits=[Banana(), 'Apple']) except ValidationError as e: print(e) """ 1 validation error for Basket fruits.1 Input should be an instance of Fruit [type=is_instance_of, input_value='Apple', input_type=str] """ ``` * [`SkipValidation`][pydantic.functional_validators.SkipValidation] can be used to skip validation on a field. ```python from pydantic import BaseModel, SkipValidation class Model(BaseModel): names: list[SkipValidation[str]] m = Model(names=['foo', 'bar']) print(m) #> names=['foo', 'bar'] m = Model(names=['foo', 123]) # (1)! print(m) #> names=['foo', 123] ``` 1. Note that the validation of the second item is skipped. If it has the wrong type it will emit a warning during serialization. * [`ValidateAs`][pydantic.functional_validators.ValidateAs] can be used to validate a custom type from a type natively supported by Pydantic. This is particularly useful when using custom types with multiple fields. ```python {lint="skip"} from typing import Annotated from pydantic import BaseModel, TypeAdapter, ValidateAs class MyCls: def __init__(self, a: int) -> None: self.a = a def __repr__(self) -> str: return f"MyCls(a={self.a})" class ValModel(BaseModel): a: int ta = TypeAdapter( Annotated[MyCls, ValidateAs(ValModel, lambda v: MyCls(a=v.a))] ) print(ta.validate_python({'a': 1})) #> MyCls(a=1) ``` * [`PydanticUseDefault`][pydantic_core.PydanticUseDefault] can be used to notify Pydantic that the default value should be used. ```python from typing import Annotated, Any from pydantic_core import PydanticUseDefault from pydantic import BaseModel, BeforeValidator def default_if_none(value: Any) -> Any: if value is None: raise PydanticUseDefault() return value class Model(BaseModel): name: Annotated[str, BeforeValidator(default_if_none)] = 'default_name' print(Model(name=None)) #> name='default_name' ``` ## JSON Schema and field validators When using [*before*](#field-before-validator), [*plain*](#field-plain-validator) or [*wrap*](#field-wrap-validator) field validators, the accepted input type may be different from the field annotation. Consider the following example: ```python from typing import Any from pydantic import BaseModel, field_validator class Model(BaseModel): value: str @field_validator('value', mode='before') @classmethod def cast_ints(cls, value: Any) -> Any: if isinstance(value, int): return str(value) else: return value print(Model(value='a')) #> value='a' print(Model(value=1)) #> value='1' ``` While the type hint for `value` is `str`, the `cast_ints` validator also allows integers. To specify the correct input type, the `json_schema_input_type` argument can be provided: ```python from typing import Any from pydantic import BaseModel, field_validator class Model(BaseModel): value: str @field_validator('value', mode='before', json_schema_input_type=int | str) @classmethod def cast_ints(cls, value: Any) -> Any: if isinstance(value, int): return str(value) else: return value print(Model.model_json_schema()['properties']['value']) #> {'anyOf': [{'type': 'integer'}, {'type': 'string'}], 'title': 'Value'} ``` As a convenience, Pydantic will use the field type if the argument is not provided (unless you are using a [*plain*](#field-plain-validator) validator, in which case `json_schema_input_type` defaults to [`Any`][typing.Any] as the field type is completely discarded). pydantic-pydantic-e28e879/docs/contributing.md000066400000000000000000000307551526274674700215320ustar00rootroot00000000000000We'd love you to contribute to Pydantic! ## Issues Questions, feature requests and bug reports are all welcome as [discussions or issues](https://github.com/pydantic/pydantic/issues/new/choose). **However, to report a security vulnerability, please see our [security policy](https://github.com/pydantic/pydantic/security/policy).** To make it as simple as possible for us to help you, please include the output of the following call in your issue: ```bash python -c "import pydantic.version; print(pydantic.version.version_info())" ``` If you're using Pydantic prior to **v2.0** please use: ```bash python -c "import pydantic.utils; print(pydantic.utils.version_info())" ``` Please try to always include the above unless you're unable to install Pydantic or **know** it's not relevant to your question or feature request. ## Pull Requests It should be extremely simple to get started and create a Pull Request. Unless your change is trivial (typo, docs tweak etc.), please create an issue to discuss the change before creating a pull request. Any pull request fixing an existing issue without being assigned first will be automatically closed. !!! note "Pydantic V1 is in maintenance mode" Pydantic v1 is in maintenance mode, meaning that only bug fixes and security fixes will be accepted. New features should be targeted at Pydantic v2. To submit a fix to Pydantic v1, use the [`1.10.X-fixes`](https://github.com/pydantic/pydantic/tree/1.10.X-fixes) as a target branch. To make contributing as easy and fast as possible, you'll want to run tests and linting locally. Luckily, Pydantic has few dependencies, doesn't require compiling and tests don't need access to databases, etc. Because of this, setting up and running the tests should be very simple. !!! tip **tl;dr**: use `make format` to fix formatting, `make` to run tests and linting and `make docs` to build the docs. ## AI policy We welcome the use of AI when contributing to Pydantic. However, users should certify that they fully understand the code being submitted. We reserve the right to close any pull request at our discretion, without further justification. This includes, but is not limited to, cases where: * the contribution does not meet our quality standards, * the author appears to be mass-submitting pull requests across multiple repositories (spam), * the pull request description is AI generated *and* incoherent or nonsensical. Such behavior can also result in a permanent ban from the organization. ### Prerequisites You'll need the following prerequisites: * Any Python version between **Python 3.10 and 3.14** * [**uv**](https://docs.astral.sh/uv/getting-started/installation/) * [**git**](https://git-scm.com/) - For version control * [**make**](https://www.gnu.org/software/make/) - For running development commands (or use `nmake` on Windows) * [**Rust**](https://rustup.rs/) - Rust stable (or nightly for coverage) ### Installation and setup Fork the repository on GitHub and clone your fork locally. ```bash # Clone your fork and cd into the repo directory git clone git@github.com:/pydantic.git cd pydantic # Install UV and pre-commit # We use uv here, for other options see: # https://docs.astral.sh/uv/getting-started/installation/ # https://pre-commit.com/#install curl -LsSf https://astral.sh/uv/install.sh | sh uv tool install pre-commit # Install pydantic, dependencies, test dependencies and doc dependencies make install ``` ### Check out a new branch and make your changes Create a new branch for your changes. ```bash # Checkout a new branch and make your changes git switch -c my-new-feature-branch # Make your changes... ``` ### Run tests and linting Run tests and linting locally to make sure everything is working as expected. ```bash # Run automated code formatting and linting make format # Pydantic uses ruff, an awesome Python linter written in Rust # https://github.com/astral-sh/ruff # Run tests and linting make # There are a few sub-commands in Makefile like `test`, `testcov` and `lint` # which you might want to use, but generally just `make` should be all you need. # You can run `make help` to see more options. ``` The `pydantic-core` test suite is located in `tests/pydantic-core`, as a symlink. For it to work, you may need to enable the [`core.symlinks`](https://git-scm.com/docs/git-config#Documentation/git-config.txt-coresymlinks) Git option. ### Build documentation If you've made any changes to the documentation (including changes to function signatures, class definitions, or docstrings that will appear in the API documentation), make sure it builds successfully. We use `mkdocs-material[imaging]` to support social previews (see the [plugin documentation](https://squidfunk.github.io/mkdocs-material/plugins/requirements/image-processing/)). ```bash # Build documentation make docs # If you have changed the documentation, make sure it builds successfully. # You can also use `uv run mkdocs serve` to serve the documentation at localhost:8000 ``` If this isn't working due to issues with the imaging plugin, try commenting out the `social` plugin line in `mkdocs.yml` and running `make docs` again. #### Updating the documentation We push a new version of the documentation with each minor release, and we push to a `dev` path with each commit to `main`. If you're updating the documentation out of cycle with a minor release and want your changes to be reflected on `latest`, do the following: 1. Open a PR against `main` with your docs changes 2. Once the PR is merged, checkout the `docs-update` branch. This branch should be up to date with the latest patch release. For example, if the latest release is `v2.9.2`, you should make sure `docs-update` is up to date with the `v2.9.2` tag. 3. Checkout a new branch from `docs-update` and cherry-pick your changes onto this branch. 4. Push your changes and open a PR against `docs-update`. 5. Once the PR is merged, the new docs will be built and deployed. !!! note Maintainer shortcut - as a maintainer, you can skip the second PR and just cherry pick directly onto the `docs-update` branch. ### Commit and push your changes Commit your changes, push your branch to GitHub, and create a pull request. Please follow the pull request template and fill in as much information as possible. Link to any relevant issues and include a description of your changes. When your pull request is ready for review, add a comment with the message "please review" and we'll take a look as soon as we can. ## Documentation style Documentation is written in Markdown and built using [Material for MkDocs](https://squidfunk.github.io/mkdocs-material/). API documentation is built from docstrings using [mkdocstrings](https://mkdocstrings.github.io/). ### Code documentation When contributing to Pydantic, please make sure that all code is well documented. The following should be documented using properly formatted docstrings: * Modules * Class definitions * Function definitions * Module-level variables Pydantic uses [Google-style docstrings](https://google.github.io/styleguide/pyguide.html#38-comments-and-docstrings) formatted according to [PEP 257](https://www.python.org/dev/peps/pep-0257/) guidelines. (See [Example Google Style Python Docstrings](https://sphinxcontrib-napoleon.readthedocs.io/en/latest/example_google.html) for further examples.) Ruff lints docstrings automatically. You can run `make format` to auto-fix any docstring issues. Where there is a conflict between Google-style docstrings and Ruff linting, follow the Ruff linting hints. Class attributes and function arguments should be documented in the format "name: description." When applicable, a return type should be documented with just a description. Types are inferred from the signature. ```python class Foo: """A class docstring. Attributes: bar: A description of bar. Defaults to "bar". """ bar: str = 'bar' ``` ```python def bar(self, baz: int) -> str: """A function docstring. Args: baz: A description of `baz`. Returns: A description of the return value. """ return 'bar' ``` You may include example code in docstrings. This code should be complete, self-contained, and runnable. Docstring examples are tested, so make sure they are correct and complete. See [`AfterValidator`][pydantic.functional_validators.AfterValidator] for an example. !!! note "Class and instance attributes" Class attributes should be documented in the class docstring. Instance attributes should be documented as "Args" in the `__init__` docstring. ### Documentation Style In general, documentation should be written in a friendly, approachable style. It should be easy to read and understand, and should be as concise as possible while still being complete. Code examples are encouraged, but should be kept short and simple. However, every code example should be complete, self-contained, and runnable. (If you're not sure how to do this, ask for help!) We prefer print output to naked asserts, but if you're testing something that doesn't have a useful print output, asserts are fine. Pydantic's unit test will test all code examples in the documentation, so it's important that they are correct and complete. When adding a new code example, use the following to test examples and update their formatting and output: ```bash # Run tests and update code examples pytest tests/test_docs.py --update-examples ``` ## Debugging Python and Rust If you're working with `pydantic` and `pydantic-core`, you might find it helpful to debug Python and Rust code together. Here's a quick guide on how to do that. This tutorial is done in VSCode, but you can use similar steps in other IDEs.
## Badges [![Pydantic v1](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/pydantic/pydantic/main/docs/badge/v1.json)](https://pydantic.dev) [![Pydantic v2](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/pydantic/pydantic/main/docs/badge/v2.json)](https://pydantic.dev) Pydantic has a badge that you can use to show that your project uses Pydantic. You can use this badge in your `README.md`: ### With Markdown ```md [![Pydantic v1](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/pydantic/pydantic/main/docs/badge/v1.json)](https://pydantic.dev) [![Pydantic v2](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/pydantic/pydantic/main/docs/badge/v2.json)](https://pydantic.dev) ``` ### With reStructuredText ```rst .. image:: https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/pydantic/pydantic/main/docs/badge/v1.json :target: https://pydantic.dev :alt: Pydantic .. image:: https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/pydantic/pydantic/main/docs/badge/v2.json :target: https://pydantic.dev :alt: Pydantic ``` ### With HTML ```html Pydantic Version 1 Pydantic Version 2 ``` ## Adding your library as part of Pydantic's third party test suite To be able to identify regressions early during development, Pydantic runs tests on various third-party projects using Pydantic. We consider adding support for testing new open source projects (that rely heavily on Pydantic) if your said project matches some of the following criteria: * The project is actively maintained. * The project makes use of Pydantic internals (e.g. relying on the [`BaseModel`][pydantic.BaseModel] metaclass, typing utilities). * The project is popular enough (although small projects can still be included depending on how Pydantic is being used). * The project CI is simple enough to be ported into Pydantic's testing workflow. If your project meets some of these criteria, you can [open feature request][open feature request] to discuss the inclusion of your project. [open feature request]: https://github.com/pydantic/pydantic/issues/new?assignees=&labels=feature+request&projects=&template=feature_request.yml pydantic-pydantic-e28e879/docs/enterprise-support.md000066400000000000000000000072361526274674700227130ustar00rootroot00000000000000--- title: Enterprise support for Pydantic description: Get direct support from Pydantic engineers for production incidents, major upgrades, architecture reviews, performance, and security response. --- Pydantic often sits between untrusted data and the rest of a production system. When that boundary is critical, a public issue tracker is not the escalation path you want during an incident or a major upgrade. Enterprise plans include direct access to Pydantic engineers, 24/7 priority support, setup assistance, and an SLA matched to your operating model. Your agreement can also define how we coordinate when a vulnerability affects a covered release line. ## Where Pydantic engineers can help Use the public documentation, issue tracker, and community channels for ordinary questions. Enterprise support covers production incidents, major upgrades, architecture or performance reviews, and coordinated vulnerability response. ## How support works 1. **Agree the support boundary** Define the packages, release lines, environments, operational and security contacts, and initial response targets covered by your agreement. 2. **Prepare useful context** Map where Pydantic sits in critical paths and decide how to capture a reproducible example, relevant configuration, and recent changes. 3. **Escalate directly** Bring production-impacting issues or suspected vulnerabilities to Pydantic engineers through the agreed private channel. We work with your team to isolate the behavior and determine the next action. ## Open source remains the foundation Pydantic's license, documentation, releases, issue tracker, and community support remain open to everyone. Enterprise support adds a direct escalation path and contractual commitments for teams that depend on Pydantic in production. ## Questions teams ask No. This page describes support for the Pydantic validation library. Logfire is a separate product with its own commercial plans and support. We work with your engineers to reproduce the issue, isolate Pydantic behavior, explain the relevant implementation details, and determine the next action. Your team retains ownership of the surrounding application and infrastructure. Yes. Supported versions, severity levels, initial response targets, and other commitments are defined in your commercial agreement. [Contact us](https://pydantic.dev/contact) to discuss your requirements. Anyone can report a suspected vulnerability privately through Pydantic's [security reporting process](https://github.com/pydantic/pydantic/security/policy). For confirmed issues affecting covered release lines, enterprise support adds named security contacts and coordinated work on impact assessment, mitigations, patched releases, and disclosure. Advisories and CVEs are published where appropriate; notification and response commitments are defined in your agreement. ## Continue reading * Review the [Pydantic version policy](version-policy.md). * Plan an upgrade with the [migration guide](migration.md). * Use the [community help channels](help_with_pydantic.md) for questions that do not require a commercial support relationship. pydantic-pydantic-e28e879/docs/errors/000077500000000000000000000000001526274674700200035ustar00rootroot00000000000000pydantic-pydantic-e28e879/docs/errors/errors.md000066400000000000000000000242161526274674700216460ustar00rootroot00000000000000 Pydantic will raise a [`ValidationError`][pydantic_core.ValidationError] whenever it finds an error in the data it's validating. !!! note Validation code should not raise the [`ValidationError`][pydantic_core.ValidationError] itself, but rather raise a [`ValueError`][] or a [`AssertionError`][] (or subclass thereof) which will be caught and used to populate the final [`ValidationError`][pydantic_core.ValidationError]. For more details, refer to the [dedicated section](../concepts/validators.md#raising-validation-errors) of the validators documentation. That [`ValidationError`][pydantic_core.ValidationError] will contain information about all the errors and how they happened. You can access these errors in several ways: | Method | Description | |--------------------------------------------------------------|------------------------------------------------------------------------------------------------| | [`errors()`][pydantic_core.ValidationError.errors] | Returns a list of [`ErrorDetails`][pydantic_core.ErrorDetails] errors found in the input data. | | [`error_count()`][pydantic_core.ValidationError.error_count] | Returns the number of errors. | | [`json()`][pydantic_core.ValidationError.json] | Returns a JSON representation of the list of errors. | | `str(e)` | Returns a human-readable representation of the errors. | The [`ErrorDetails`][pydantic_core.ErrorDetails] object is a dictionary. It contains the following: | Property | Description | |---------------------------------------------|--------------------------------------------------------------------------------| | [`ctx`][pydantic_core.ErrorDetails.ctx] | An optional object which contains values required to render the error message. | | [`input`][pydantic_core.ErrorDetails.input] | The input provided for validation. | | [`loc`][pydantic_core.ErrorDetails.loc] | The error's location as a list. | | [`msg`][pydantic_core.ErrorDetails.msg] | A human-readable explanation of the error. | | [`type`][pydantic_core.ErrorDetails.type] | A computer-readable identifier of the error type. | | [`url`][pydantic_core.ErrorDetails.url] | The documentation URL giving information about the error. | The first item in the [`loc`][pydantic_core.ErrorDetails.loc] list will be the field where the error occurred, and if the field is a [sub-model](../concepts/models.md#nested-models), subsequent items will be present to indicate the nested location of the error. For validations spread across a running service, [Logfire](troubleshooting.md) records this same structured error list and surrounding trace context, without wrapping each call in `try`/`except`. As a demonstration: ```python from pydantic import BaseModel, Field, ValidationError, field_validator class Location(BaseModel): lat: float = 0.1 lng: float = 10.1 class Model(BaseModel): is_required: float gt_int: int = Field(gt=42) list_of_ints: list[int] a_float: float recursive_model: Location @field_validator('a_float', mode='after') @classmethod def validate_float(cls, value: float) -> float: if value > 2.0: raise ValueError('Invalid float value') return value data = { 'list_of_ints': ['1', 2, 'bad'], 'a_float': 3.0, 'recursive_model': {'lat': 4.2, 'lng': 'New York'}, 'gt_int': 21, } try: Model(**data) except ValidationError as e: print(e) """ 5 validation errors for Model is_required Field required [type=missing, input_value={'list_of_ints': ['1', 2,...ew York'}, 'gt_int': 21}, input_type=dict] gt_int Input should be greater than 42 [type=greater_than, input_value=21, input_type=int] list_of_ints.2 Input should be a valid integer, unable to parse string as an integer [type=int_parsing, input_value='bad', input_type=str] a_float Value error, Invalid float value [type=value_error, input_value=3.0, input_type=float] recursive_model.lng Input should be a valid number, unable to parse string as a number [type=float_parsing, input_value='New York', input_type=str] """ try: Model(**data) except ValidationError as e: print(e.errors()) """ [ { 'type': 'missing', 'loc': ('is_required',), 'msg': 'Field required', 'input': { 'list_of_ints': ['1', 2, 'bad'], 'a_float': 3.0, 'recursive_model': {'lat': 4.2, 'lng': 'New York'}, 'gt_int': 21, }, 'url': 'https://errors.pydantic.dev/2/v/missing', }, { 'type': 'greater_than', 'loc': ('gt_int',), 'msg': 'Input should be greater than 42', 'input': 21, 'ctx': {'gt': 42}, 'url': 'https://errors.pydantic.dev/2/v/greater_than', }, { 'type': 'int_parsing', 'loc': ('list_of_ints', 2), 'msg': 'Input should be a valid integer, unable to parse string as an integer', 'input': 'bad', 'url': 'https://errors.pydantic.dev/2/v/int_parsing', }, { 'type': 'value_error', 'loc': ('a_float',), 'msg': 'Value error, Invalid float value', 'input': 3.0, 'ctx': {'error': ValueError('Invalid float value')}, 'url': 'https://errors.pydantic.dev/2/v/value_error', }, { 'type': 'float_parsing', 'loc': ('recursive_model', 'lng'), 'msg': 'Input should be a valid number, unable to parse string as a number', 'input': 'New York', 'url': 'https://errors.pydantic.dev/2/v/float_parsing', }, ] """ ``` ## Error messages Pydantic attempts to provide useful default error messages for validation and usage errors, which can be found here: * [Validation Errors](validation_errors.md): Errors that happen during data validation. * [Usage Errors](usage_errors.md): Errors that happen when using Pydantic. ### Customize error messages You can customize error messages by creating a custom error handler. ```python from pydantic_core import ErrorDetails from pydantic import BaseModel, HttpUrl, ValidationError CUSTOM_MESSAGES = { 'int_parsing': 'This is not an integer! 🤦', 'url_scheme': 'Hey, use the right URL scheme! I wanted {expected_schemes}.', } def convert_errors( e: ValidationError, custom_messages: dict[str, str] ) -> list[ErrorDetails]: new_errors: list[ErrorDetails] = [] for error in e.errors(): custom_message = custom_messages.get(error['type']) if custom_message: ctx = error.get('ctx') error['msg'] = ( custom_message.format(**ctx) if ctx else custom_message ) new_errors.append(error) return new_errors class Model(BaseModel): a: int b: HttpUrl try: Model(a='wrong', b='ftp://example.com') except ValidationError as e: errors = convert_errors(e, CUSTOM_MESSAGES) print(errors) """ [ { 'type': 'int_parsing', 'loc': ('a',), 'msg': 'This is not an integer! 🤦', 'input': 'wrong', 'url': 'https://errors.pydantic.dev/2/v/int_parsing', }, { 'type': 'url_scheme', 'loc': ('b',), 'msg': "Hey, use the right URL scheme! I wanted 'http' or 'https'.", 'input': 'ftp://example.com', 'ctx': {'expected_schemes': "'http' or 'https'"}, 'url': 'https://errors.pydantic.dev/2/v/url_scheme', }, ] """ ``` A common use case would be to translate error messages. For example, in the above example, we could translate the error messages replacing the `CUSTOM_MESSAGES` dictionary with a dictionary of translations. Another example is customizing the way that the `'loc'` value of an error is represented. ```python from typing import Any from pydantic import BaseModel, ValidationError def loc_to_dot_sep(loc: tuple[str | int, ...]) -> str: path = '' for i, x in enumerate(loc): if isinstance(x, str): if i > 0: path += '.' path += x elif isinstance(x, int): path += f'[{x}]' else: raise TypeError('Unexpected type') return path def convert_errors(e: ValidationError) -> list[dict[str, Any]]: new_errors: list[dict[str, Any]] = e.errors() for error in new_errors: error['loc'] = loc_to_dot_sep(error['loc']) return new_errors class TestNestedModel(BaseModel): key: str value: str class TestModel(BaseModel): items: list[TestNestedModel] data = {'items': [{'key': 'foo', 'value': 'bar'}, {'key': 'baz'}]} try: TestModel.model_validate(data) except ValidationError as e: print(e.errors()) # (1)! """ [ { 'type': 'missing', 'loc': ('items', 1, 'value'), 'msg': 'Field required', 'input': {'key': 'baz'}, 'url': 'https://errors.pydantic.dev/2/v/missing', } ] """ pretty_errors = convert_errors(e) print(pretty_errors) # (2)! """ [ { 'type': 'missing', 'loc': 'items[1].value', 'msg': 'Field required', 'input': {'key': 'baz'}, 'url': 'https://errors.pydantic.dev/2/v/missing', } ] """ ``` 1. By default, `e.errors()` produces a list of errors with `loc` values that take the form of tuples. 2. With our custom `loc_to_dot_sep` function, we've modified the form of the `loc` representation. pydantic-pydantic-e28e879/docs/errors/troubleshooting.md000066400000000000000000000143051526274674700235570ustar00rootroot00000000000000# Troubleshooting Validation Errors with Logfire When a [`ValidationError`][pydantic_core.ValidationError] is raised, the message tells you *what* went wrong: which field, which rule, and the value that triggered it. In production, the hard part is usually everything the message *can't* show you: where that data came from, how often it happens, and what else your application was doing at the time. By the time you read the log, the payload that failed is often already gone. ## Record a production failure You need a [free Logfire account](https://logfire.pydantic.dev/login) and a project. From your project directory, install the SDK and sign in: ```bash pip install logfire logfire auth ``` Then instrument your application before defining or importing the models you want to monitor: ```python {test="skip"} from datetime import date import logfire from pydantic import BaseModel logfire.configure() logfire.instrument_pydantic(record='failure') # (1)! class User(BaseModel): name: str country_code: str dob: date User(name='Anne', country_code='USA', dob='not-a-date') # (2)! ``` 1. `record='failure'` creates an individual warning record only when validation fails, while still collecting metrics for every validation. 2. Run the example and choose or create a Logfire project when prompted. The invalid date produces a warning in Logfire's Live view. Once instrumented, each failed validation shows up in the Live view, recorded with: * **Its rejected values**: the values included in Pydantic's structured errors, so you can inspect what failed without parsing the rendered exception string. * **Its context**: a warning attached to the surrounding request, task, or trace, so you can follow bad data back to its source. * **A queryable history**: every failure is stored, so you can ask "which field fails most often?" or "did this error spike after the last deploy?" in SQL. * **No extra logging code**: one `logfire.instrument_pydantic()` call covers all your models; you don't wrap each validation attempt in a `try`/`except`. To see where a rejected value came from, instrument the part of the application that feeds the model as well. Logfire's [framework and library integrations](https://pydantic.dev/docs/logfire/integrations/) put the failed-validation record inside the active request, task, or job trace. You can then follow the same trace across the caller, model validation, database work, and response instead of reconstructing the path from separate logs. !!! warning "Review validation data before exporting it" Failed-validation records contain the rejected values from Pydantic's structured errors. The Logfire SDK [scrubs common sensitive values](https://pydantic.dev/docs/logfire/instrument/scrubbing/) before export, but Logfire stores every rejected value under the key `input` inside the serialized `errors` attribute, separately from its field path. If those values can contain secrets or personal data, pass `scrubbing=logfire.ScrubbingOptions(extra_patterns=[r'(?:^input$|"input"\s*:)'])` to `logfire.configure()`. The two alternatives tell the scrubber to inspect serialized validation errors and redact every value whose exact key is `input`; neither refers to your model's field names. Alternatively, use `record='metrics'` so individual failures are not exported. ![A failed Pydantic validation recorded in the Logfire live view](../img/logfire-validation-live-view.png) ## Read the structured error Beyond the plain-language explanation, each failed validation record shows the raw structured [`errors()`][pydantic_core.ValidationError.errors] list: the field path (`loc`), the machine-readable `type`, and the offending value included with that error. You can see which field failed and with what value without parsing the rendered message string by hand. ![A Pydantic validation failure in the Logfire live view, with the structured errors captured on the record](../img/logfire-validation-error-trace.png) ## See whether the failure is recurring A single record tells you about one failure. The metrics collected by `record='failure'` show whether validation failures are increasing without storing a successful input each time. Filter the Live view by `schema_name`, or query the structured `errors` field to find the models, fields, and error types that fail most often. Once you know which failures matter, you don't have to keep watching for them. Logfire [alerts](https://pydantic.dev/docs/logfire/observe/alerts/) run a SQL query on a schedule and notify you (for example, in Slack) when it matches. A rule like "validation failures for this model crossed a threshold" means the next occurrence finds you instead of a user reporting it. ## Have Logfire explain the error Logfire can explain a failed validation span in plain language, reading the structured errors and, for each field, telling you what was expected and what it received, including messages from your own [custom validators](../concepts/validators.md#raising-validation-errors). This early-access feature currently requires **Pydantic validation suggestions** to be enabled in Logfire and `record='all'`, so the failure is captured as a validation span rather than a warning record. You get to the fix without memorising every [error code](validation_errors.md).
![Logfire explaining a Pydantic validation error](../img/logfire-validation-error-explained.png){ width="500" }
If you debug with an AI coding agent, the [Logfire MCP server](https://pydantic.dev/docs/logfire/guides/mcp-server/) lets the agent query your telemetry directly, including the structured errors and surrounding trace, so it can investigate against your real data instead of guessing. ## Next steps * [Pydantic Logfire integration](../integrations/logfire.md): choose what to record and add the surrounding application trace. * [Scrubbing](https://pydantic.dev/docs/logfire/instrument/scrubbing/): review and redact sensitive validation data before export. * [Alerts](https://pydantic.dev/docs/logfire/observe/alerts/): get notified when failures cross a threshold. For a reference of the individual error types you may encounter, see [Validation Errors](validation_errors.md) and [Usage Errors](usage_errors.md). pydantic-pydantic-e28e879/docs/errors/usage_errors.md000066400000000000000000001066771526274674700230460ustar00rootroot00000000000000Pydantic attempts to provide useful errors. The following sections provide details on common errors developers may encounter when working with Pydantic, along with suggestions for addressing the error condition. ## Class not fully defined {#class-not-fully-defined} This error is raised when a type referenced in an annotation of a pydantic-validated type (such as a subclass of `BaseModel`, or a pydantic `dataclass`) is not defined: ```python from typing import ForwardRef from pydantic import BaseModel, PydanticUserError UndefinedType = ForwardRef('UndefinedType') class Foobar(BaseModel): a: UndefinedType try: Foobar(a=1) except PydanticUserError as exc_info: assert exc_info.code == 'class-not-fully-defined' ``` Or when the type has been defined after usage: ```python from typing import Optional from pydantic import BaseModel, PydanticUserError class Foo(BaseModel): a: Optional['Bar'] = None try: # this doesn't work, see raised error foo = Foo(a={'b': {'a': None}}) except PydanticUserError as exc_info: assert exc_info.code == 'class-not-fully-defined' class Bar(BaseModel): b: 'Foo' # this works, though foo = Foo(a={'b': {'a': None}}) ``` For BaseModel subclasses, it can be fixed by defining the type and then calling `.model_rebuild()`: ```python from typing import Optional from pydantic import BaseModel class Foo(BaseModel): a: Optional['Bar'] = None class Bar(BaseModel): b: 'Foo' Foo.model_rebuild() foo = Foo(a={'b': {'a': None}}) ``` In other cases, the error message should indicate how to rebuild the class with the appropriate type defined. ## Custom JSON Schema {#custom-json-schema} The `__modify_schema__` method is no longer supported in V2. You should use the `__get_pydantic_json_schema__` method instead. The `__modify_schema__` used to receive a single argument representing the JSON schema. See the example below: ```python {title="Old way"} from pydantic import BaseModel, PydanticUserError try: class Model(BaseModel): @classmethod def __modify_schema__(cls, field_schema): field_schema.update(examples=['example']) except PydanticUserError as exc_info: assert exc_info.code == 'custom-json-schema' ``` The new method `__get_pydantic_json_schema__` receives two arguments: the first is a dictionary denoted as `CoreSchema`, and the second a callable `handler` that receives a `CoreSchema` as parameter, and returns a JSON schema. See the example below: ```python {title="New way"} from typing import Any from pydantic_core import CoreSchema from pydantic import BaseModel, GetJsonSchemaHandler class Model(BaseModel): @classmethod def __get_pydantic_json_schema__( cls, core_schema: CoreSchema, handler: GetJsonSchemaHandler ) -> dict[str, Any]: json_schema = super().__get_pydantic_json_schema__(core_schema, handler) json_schema = handler.resolve_ref_schema(json_schema) json_schema.update(examples=['example']) return json_schema print(Model.model_json_schema()) """ {'examples': ['example'], 'properties': {}, 'title': 'Model', 'type': 'object'} """ ``` ## Invalid decorator fields {#decorator-invalid-fields} This error is raised when the field names provided to the [`@field_validator`][pydantic.field_validator] or [`@field_serializer`][pydantic.field_serializer] decorators are not strings. ```python from pydantic import BaseModel, PydanticUserError, field_validator try: class Model(BaseModel): a: str b: str @field_validator(['a', 'b']) @classmethod def check_fields(cls, v): return v except PydanticUserError as exc_info: assert exc_info.code == 'decorator-invalid-fields' ``` Fields should be provided as separate string arguments: ```python from pydantic import BaseModel, field_validator class Model(BaseModel): a: str b: str @field_validator('a', 'b') @classmethod def check_fields(cls, v): return v ``` ## Decorator with no fields {#decorator-missing-arguments} This error is raised when the [`@field_validator`][pydantic.field_validator] or [`@field_serializer`][pydantic.field_serializer] decorators are used bare, without any arguments. ```python from pydantic import BaseModel, PydanticUserError, field_validator try: class Model(BaseModel): a: str @field_validator @classmethod def checker(cls, v): return v except PydanticUserError as exc_info: assert exc_info.code == 'decorator-missing-arguments' ``` At least one field name (and optionally other field names and keyword arguments) should be provided. ```python from pydantic import BaseModel, field_validator class Model(BaseModel): a: str @field_validator('a') @classmethod def checker(cls, v): return v ``` ## Decorator on missing field {#decorator-missing-field} This error is raised when you define a decorator with a field that is not valid. ```python from typing import Any from pydantic import BaseModel, PydanticUserError, field_validator try: class Model(BaseModel): a: str @field_validator('b') def check_b(cls, v: Any): return v except PydanticUserError as exc_info: assert exc_info.code == 'decorator-missing-field' ``` You can use `check_fields=False` if you're inheriting from the model and intended this. ```python from typing import Any from pydantic import BaseModel, create_model, field_validator class Model(BaseModel): @field_validator('a', check_fields=False) def check_a(cls, v: Any): return v model = create_model('FooModel', a=(str, 'cake'), __base__=Model) ``` ## Discriminator no field {#discriminator-no-field} This error is raised when a model in discriminated unions doesn't define a discriminator field. ```python from typing import Literal from pydantic import BaseModel, Field, PydanticUserError class Cat(BaseModel): c: str class Dog(BaseModel): pet_type: Literal['dog'] d: str try: class Model(BaseModel): pet: Cat | Dog = Field(discriminator='pet_type') number: int except PydanticUserError as exc_info: assert exc_info.code == 'discriminator-no-field' ``` ## Discriminator alias type {#discriminator-alias-type} This error is raised when you define a non-string alias on a discriminator field. ```python from typing import Literal from pydantic import AliasChoices, BaseModel, Field, PydanticUserError class Cat(BaseModel): pet_type: Literal['cat'] = Field( validation_alias=AliasChoices('Pet', 'PET') ) c: str class Dog(BaseModel): pet_type: Literal['dog'] d: str try: class Model(BaseModel): pet: Cat | Dog = Field(discriminator='pet_type') number: int except PydanticUserError as exc_info: assert exc_info.code == 'discriminator-alias-type' ``` ## Discriminator needs literal {#discriminator-needs-literal} This error is raised when you define a non-`Literal` type on a discriminator field. ```python from typing import Literal from pydantic import BaseModel, Field, PydanticUserError class Cat(BaseModel): pet_type: int c: str class Dog(BaseModel): pet_type: Literal['dog'] d: str try: class Model(BaseModel): pet: Cat | Dog = Field(discriminator='pet_type') number: int except PydanticUserError as exc_info: assert exc_info.code == 'discriminator-needs-literal' ``` ## Discriminator alias {#discriminator-alias} This error is raised when you define different aliases on discriminator fields. ```python from typing import Literal from pydantic import BaseModel, Field, PydanticUserError class Cat(BaseModel): pet_type: Literal['cat'] = Field(validation_alias='PET') c: str class Dog(BaseModel): pet_type: Literal['dog'] = Field(validation_alias='Pet') d: str try: class Model(BaseModel): pet: Cat | Dog = Field(discriminator='pet_type') number: int except PydanticUserError as exc_info: assert exc_info.code == 'discriminator-alias' ``` ## Invalid discriminator validator {#discriminator-validator} This error is raised when you use a before, wrap, or plain validator on a discriminator field. This is disallowed because the discriminator field is used to determine the type of the model to use for validation, so you can't use a validator that might change its value. ```python from typing import Literal from pydantic import BaseModel, Field, PydanticUserError, field_validator class Cat(BaseModel): pet_type: Literal['cat'] @field_validator('pet_type', mode='before') @classmethod def validate_pet_type(cls, v): if v == 'kitten': return 'cat' return v class Dog(BaseModel): pet_type: Literal['dog'] try: class Model(BaseModel): pet: Cat | Dog = Field(discriminator='pet_type') number: int except PydanticUserError as exc_info: assert exc_info.code == 'discriminator-validator' ``` This can be worked around by using a standard union, dropping the discriminator: ```python from typing import Literal from pydantic import BaseModel, field_validator class Cat(BaseModel): pet_type: Literal['cat'] @field_validator('pet_type', mode='before') @classmethod def validate_pet_type(cls, v): if v == 'kitten': return 'cat' return v class Dog(BaseModel): pet_type: Literal['dog'] class Model(BaseModel): pet: Cat | Dog assert Model(pet={'pet_type': 'kitten'}).pet.pet_type == 'cat' ``` ## Callable discriminator case with no tag {#callable-discriminator-no-tag} This error is raised when a union that uses a callable `Discriminator` doesn't have `Tag` annotations for all cases. ```python from typing import Annotated from pydantic import BaseModel, Discriminator, PydanticUserError, Tag def model_x_discriminator(v): if isinstance(v, str): return 'str' if isinstance(v, (dict, BaseModel)): return 'model' # tag missing for both union choices try: class DiscriminatedModel(BaseModel): x: Annotated[ 'str | DiscriminatedModel', Discriminator(model_x_discriminator), ] except PydanticUserError as exc_info: assert exc_info.code == 'callable-discriminator-no-tag' # tag missing for `'DiscriminatedModel'` union choice try: class DiscriminatedModel(BaseModel): x: Annotated[ "Annotated[str, Tag('str')] | DiscriminatedModel", Discriminator(model_x_discriminator), ] except PydanticUserError as exc_info: assert exc_info.code == 'callable-discriminator-no-tag' # tag missing for `str` union choice try: class DiscriminatedModel(BaseModel): x: Annotated[ "str | Annotated[DiscriminatedModel, Tag('model')]", Discriminator(model_x_discriminator), ] except PydanticUserError as exc_info: assert exc_info.code == 'callable-discriminator-no-tag' ``` ## `TypedDict` version {#typed-dict-version} This error is raised when you use [typing.TypedDict][] instead of `typing_extensions.TypedDict` on Python < 3.12. ## Model parent field overridden {#model-field-overridden} This error is raised when a field defined on a base class was overridden by a non-annotated attribute. ```python from pydantic import BaseModel, PydanticUserError class Foo(BaseModel): a: float try: class Bar(Foo): x: float = 12.3 a = 123.0 except PydanticUserError as exc_info: assert exc_info.code == 'model-field-overridden' ``` ## Model field missing annotation {#model-field-missing-annotation} This error is raised when a field doesn't have an annotation. ```python from pydantic import BaseModel, Field, PydanticUserError try: class Model(BaseModel): a = Field('foobar') b = None except PydanticUserError as exc_info: assert exc_info.code == 'model-field-missing-annotation' ``` If the field is not meant to be a field, you may be able to resolve the error by annotating it as a `ClassVar`: ```python from typing import ClassVar from pydantic import BaseModel class Model(BaseModel): a: ClassVar[str] ``` Or updating `model_config['ignored_types']`: ```python from pydantic import BaseModel, ConfigDict class IgnoredType: pass class MyModel(BaseModel): model_config = ConfigDict(ignored_types=(IgnoredType,)) _a = IgnoredType() _b: int = IgnoredType() _c: IgnoredType _d: IgnoredType = IgnoredType() ``` ## `Config` and `model_config` both defined {#config-both} This error is raised when `class Config` and `model_config` are used together. ```python from pydantic import BaseModel, ConfigDict, PydanticUserError try: class Model(BaseModel): model_config = ConfigDict(from_attributes=True) a: str class Config: from_attributes = True except PydanticUserError as exc_info: assert exc_info.code == 'config-both' ``` ## Keyword arguments removed {#removed-kwargs} This error is raised when the keyword arguments are not available in Pydantic V2. For example, `regex` is removed from Pydantic V2: ```python from pydantic import BaseModel, Field, PydanticUserError try: class Model(BaseModel): x: str = Field(regex='test') except PydanticUserError as exc_info: assert exc_info.code == 'removed-kwargs' ``` ## Circular reference schema {#circular-reference-schema} This error is raised when a circular reference is found that would otherwise result in an infinite recursion. For example, this is a valid type alias: ```python {test="skip" lint="skip" upgrade="skip"} type A = list[A] | None ``` while these are not: ```python {test="skip" lint="skip" upgrade="skip"} type A = A type B = C type C = B ``` ## JSON schema invalid type {#invalid-for-json-schema} This error is raised when Pydantic fails to generate a JSON schema for some `CoreSchema`. ```python from collections.abc import Callable from pydantic import BaseModel, PydanticUserError class Model(BaseModel): a: Callable[..., object] try: Model.model_json_schema() except PydanticUserError as exc_info: assert exc_info.code == 'invalid-for-json-schema' ``` ## JSON schema already used {#json-schema-already-used} This error is raised when the JSON schema generator has already been used to generate a JSON schema. You must create a new instance to generate a new JSON schema. ## BaseModel instantiated {#base-model-instantiated} This error is raised when you instantiate `BaseModel` directly. Pydantic models should inherit from `BaseModel`. ```python from pydantic import BaseModel, PydanticUserError try: BaseModel() except PydanticUserError as exc_info: assert exc_info.code == 'base-model-instantiated' ``` ## Undefined annotation {#undefined-annotation} This error is raised when handling undefined annotations during `CoreSchema` generation. ```python from pydantic import BaseModel, PydanticUndefinedAnnotation class Model(BaseModel): a: 'B' # noqa F821 try: Model.model_rebuild() except PydanticUndefinedAnnotation as exc_info: assert exc_info.code == 'undefined-annotation' ``` ## Schema for unknown type {#schema-for-unknown-type} This error is raised when Pydantic fails to generate a `CoreSchema` for some type. ```python from pydantic import BaseModel, PydanticUserError try: class Model(BaseModel): x: 43 = 123 except PydanticUserError as exc_info: assert exc_info.code == 'schema-for-unknown-type' ``` ## Import error {#import-error} This error is raised when you try to import an object that was available in Pydantic V1, but has been removed in Pydantic V2. See the [Migration Guide](../migration.md) for more information. ## `create_model` field definitions {#create-model-field-definitions} This error is raised when you provide invalid field definitions in [`create_model()`][pydantic.create_model]. ```python from pydantic import PydanticUserError, create_model try: create_model('FooModel', foo=(str, 'default value', 'more')) except PydanticUserError as exc_info: assert exc_info.code == 'create-model-field-definitions' ``` The fields definition syntax can be found in the [dynamic model creation](../concepts/models.md#dynamic-model-creation) documentation. ## `create_model` namespace {#create-model-namespace} This error is raised when a key of the `__namespace__` argument of [`create_model()`][pydantic.create_model] clashes with a field name: ```python from pydantic import PydanticUserError, create_model try: create_model('FooModel', foo=int, __namespace__={'foo': 1}) except PydanticUserError as exc_info: assert exc_info.code == 'create-model-namespace' ``` It is also raised when a key of the `__namespace__` argument is an attribute that has a dedicated argument (`__annotations__`, `__module__`, `__qualname__`, `__doc__` and `model_config`): ```python from pydantic import ConfigDict, PydanticUserError, create_model try: create_model( 'FooModel', __namespace__={'model_config': ConfigDict(strict=True)} ) except PydanticUserError as exc_info: assert exc_info.code == 'create-model-namespace' ``` Use the `__config__` argument instead. ## Validator on instance method {#validator-instance-method} This error is raised when you apply a validator on an instance method. ```python from pydantic import BaseModel, PydanticUserError, field_validator try: class Model(BaseModel): a: int = 1 @field_validator('a') def check_a(self, value): return value except PydanticUserError as exc_info: assert exc_info.code == 'validator-instance-method' ``` ## `json_schema_input_type` used with the wrong mode {#validator-input-type} This error is raised when you explicitly specify a value for the `json_schema_input_type` argument and `mode` isn't set to either `'before'`, `'plain'` or `'wrap'`. ```python from pydantic import BaseModel, PydanticUserError, field_validator try: class Model(BaseModel): a: int = 1 @field_validator('a', mode='after', json_schema_input_type=int) @classmethod def check_a(self, value): return value except PydanticUserError as exc_info: assert exc_info.code == 'validator-input-type' ``` Documenting the JSON Schema input type is only possible for validators where the given value can be anything. That is why it isn't available for `after` validators, where the value is first validated against the type annotation. ## Root validator, `pre`, `skip_on_failure` {#root-validator-pre-skip} If you use `@root_validator` with `pre=False` (the default) you MUST specify `skip_on_failure=True`. The `skip_on_failure=False` option is no longer available. If you were not trying to set `skip_on_failure=False`, you can safely set `skip_on_failure=True`. If you do, this root validator will no longer be called if validation fails for any of the fields. Please see the [Migration Guide](../migration.md) for more details. ## `model_serializer` instance methods {#model-serializer-instance-method} `@model_serializer` must be applied to instance methods. This error is raised when you apply `model_serializer` on an instance method without `self`: ```python from pydantic import BaseModel, PydanticUserError, model_serializer try: class MyModel(BaseModel): a: int @model_serializer def _serialize(slf, x, y, z): return slf except PydanticUserError as exc_info: assert exc_info.code == 'model-serializer-instance-method' ``` Or on a class method: ```python from pydantic import BaseModel, PydanticUserError, model_serializer try: class MyModel(BaseModel): a: int @model_serializer @classmethod def _serialize(self, x, y, z): return self except PydanticUserError as exc_info: assert exc_info.code == 'model-serializer-instance-method' ``` ## `validator`, `field`, `config`, and `info` {#validator-field-config-info} The `field` and `config` parameters are not available in Pydantic V2. Please use the `info` parameter instead. You can access the configuration via `info.config`, but it is a dictionary instead of an object like it was in Pydantic V1. The `field` argument is no longer available. ## Pydantic V1 validator signature {#validator-v1-signature} This error is raised when you use an unsupported signature for Pydantic V1-style validator. ```python import warnings from pydantic import BaseModel, PydanticUserError, validator warnings.filterwarnings('ignore', category=DeprecationWarning) try: class Model(BaseModel): a: int @validator('a') def check_a(cls, value, foo): return value except PydanticUserError as exc_info: assert exc_info.code == 'validator-v1-signature' ``` ## Unrecognized `field_validator` signature {#validator-signature} This error is raised when a `field_validator` or `model_validator` function has the wrong signature. ```python from pydantic import BaseModel, PydanticUserError, field_validator try: class Model(BaseModel): a: str @field_validator('a') @classmethod def check_a(cls): return 'a' except PydanticUserError as exc_info: assert exc_info.code == 'validator-signature' ``` ## Unrecognized `field_serializer` signature {#field-serializer-signature} This error is raised when the `field_serializer` function has the wrong signature. ```python from pydantic import BaseModel, PydanticUserError, field_serializer try: class Model(BaseModel): x: int @field_serializer('x') def no_args(): return 'x' except PydanticUserError as exc_info: assert exc_info.code == 'field-serializer-signature' ``` Valid field serializer signatures are: ```python {test="skip" lint="skip" upgrade="skip"} from pydantic import FieldSerializationInfo, SerializerFunctionWrapHandler, field_serializer # an instance method with the default mode or `mode='plain'` @field_serializer('x') # or @field_serializer('x', mode='plain') def ser_x(self, value: Any, info: FieldSerializationInfo): ... # a static method or function with the default mode or `mode='plain'` @field_serializer('x') # or @field_serializer('x', mode='plain') @staticmethod def ser_x(value: Any, info: FieldSerializationInfo): ... # equivalent to def ser_x(value: Any, info: FieldSerializationInfo): ... serializer('x')(ser_x) # an instance method with `mode='wrap'` @field_serializer('x', mode='wrap') def ser_x(self, value: Any, nxt: SerializerFunctionWrapHandler, info: FieldSerializationInfo): ... # a static method or function with `mode='wrap'` @field_serializer('x', mode='wrap') @staticmethod def ser_x(value: Any, nxt: SerializerFunctionWrapHandler, info: FieldSerializationInfo): ... # equivalent to def ser_x(value: Any, nxt: SerializerFunctionWrapHandler, info: FieldSerializationInfo): ... serializer('x')(ser_x) # For all of these, you can also choose to omit the `info` argument, for example: @field_serializer('x') def ser_x(self, value: Any): ... @field_serializer('x', mode='wrap') def ser_x(self, value: Any, handler: SerializerFunctionWrapHandler): ... ``` ## Unrecognized `model_serializer` signature {#model-serializer-signature} This error is raised when the `model_serializer` function has the wrong signature. ```python from pydantic import BaseModel, PydanticUserError, model_serializer try: class MyModel(BaseModel): a: int @model_serializer def _serialize(self, x, y, z): return self except PydanticUserError as exc_info: assert exc_info.code == 'model-serializer-signature' ``` Valid model serializer signatures are: ```python {test="skip" lint="skip" upgrade="skip"} from pydantic import SerializerFunctionWrapHandler, SerializationInfo, model_serializer # an instance method with the default mode or `mode='plain'` @model_serializer # or model_serializer(mode='plain') def mod_ser(self, info: SerializationInfo): ... # an instance method with `mode='wrap'` @model_serializer(mode='wrap') def mod_ser(self, handler: SerializerFunctionWrapHandler, info: SerializationInfo): ... # For all of these, you can also choose to omit the `info` argument, for example: @model_serializer(mode='plain') def mod_ser(self): ... @model_serializer(mode='wrap') def mod_ser(self, handler: SerializerFunctionWrapHandler): ... ``` ## Multiple field serializers {#multiple-field-serializers} This error is raised when multiple `model_serializer` functions are defined for a field. ```python from pydantic import BaseModel, PydanticUserError, field_serializer try: class MyModel(BaseModel): x: int y: int @field_serializer('x', 'y') def serializer1(v): return f'{v:,}' @field_serializer('x') def serializer2(v): return v except PydanticUserError as exc_info: assert exc_info.code == 'multiple-field-serializers' ``` ## Invalid annotated type {#invalid-annotated-type} This error is raised when an annotation cannot annotate a type. ```python from typing import Annotated from pydantic import BaseModel, FutureDate, PydanticUserError try: class Model(BaseModel): foo: Annotated[str, FutureDate()] except PydanticUserError as exc_info: assert exc_info.code == 'invalid-annotated-type' ``` ## `config` is unused with `TypeAdapter` {#type-adapter-config-unused} You will get this error if you try to pass `config` to `TypeAdapter` when the type is a type that has its own config that cannot be overridden (currently this is only `BaseModel`, `TypedDict` and `dataclass`): ```python from typing_extensions import TypedDict from pydantic import ConfigDict, PydanticUserError, TypeAdapter class MyTypedDict(TypedDict): x: int try: TypeAdapter(MyTypedDict, config=ConfigDict(strict=True)) except PydanticUserError as exc_info: assert exc_info.code == 'type-adapter-config-unused' ``` Instead you'll need to subclass the type and override or set the config on it: ```python from typing_extensions import TypedDict from pydantic import ConfigDict, TypeAdapter class MyTypedDict(TypedDict): x: int # or `model_config = ...` for BaseModel __pydantic_config__ = ConfigDict(strict=True) TypeAdapter(MyTypedDict) # ok ``` ## Cannot specify `model_config['extra']` with `RootModel` {#root-model-extra} Because `RootModel` is not capable of storing or even accepting extra fields during initialization, we raise an error if you try to specify a value for the config setting `'extra'` when creating a subclass of `RootModel`: ```python from pydantic import PydanticUserError, RootModel try: class MyRootModel(RootModel): model_config = {'extra': 'allow'} root: int except PydanticUserError as exc_info: assert exc_info.code == 'root-model-extra' ``` ## Cannot evaluate type annotation {#unevaluable-type-annotation} Because type annotations are evaluated *after* assignments, you might get unexpected results when using a type annotation name that clashes with one of your fields. We raise an error in the following case: ```python {test="skip"} from datetime import date from pydantic import BaseModel, Field class Model(BaseModel): date: date = Field(description='A date') ``` As a workaround, you can either use an alias or change your import: ```python {lint="skip"} import datetime # Or `from datetime import date as _date` from pydantic import BaseModel, Field class Model(BaseModel): date: datetime.date = Field(description='A date') ``` ## Incompatible `dataclass` `init` and `extra` settings {#dataclass-init-false-extra-allow} Pydantic does not allow the specification of the `extra='allow'` setting on a dataclass while any of the fields have `init=False` set. Thus, you may not do something like the following: ```python {test="skip"} from pydantic import ConfigDict, Field from pydantic.dataclasses import dataclass @dataclass(config=ConfigDict(extra='allow')) class A: a: int = Field(init=False, default=1) ``` The above snippet results in the following error during schema building for the `A` dataclass: ```output pydantic.errors.PydanticUserError: Field a has `init=False` and dataclass has config setting `extra="allow"`. This combination is not allowed. ``` ## Incompatible `init` and `init_var` settings on `dataclass` field {#clashing-init-and-init-var} The `init=False` and `init_var=True` settings are mutually exclusive. Doing so results in the `PydanticUserError` shown in the example below. ```python {test="skip"} from pydantic import Field from pydantic.dataclasses import dataclass @dataclass class Foo: bar: str = Field(init=False, init_var=True) """ pydantic.errors.PydanticUserError: Dataclass field bar has init=False and init_var=True, but these are mutually exclusive. """ ``` ## `model_config` is used as a model field {#model-config-invalid-field-name} This error is raised when `model_config` is used as the name of a field. ```python from pydantic import BaseModel, PydanticUserError try: class Model(BaseModel): model_config: str except PydanticUserError as exc_info: assert exc_info.code == 'model-config-invalid-field-name' ``` ## [`with_config`][pydantic.config.with_config] is used on a `BaseModel` subclass {#with-config-on-model} This error is raised when the [`with_config`][pydantic.config.with_config] decorator is used on a class which is already a Pydantic model (use the `model_config` attribute instead). ```python from pydantic import BaseModel, PydanticUserError, with_config try: @with_config({'allow_inf_nan': True}) class Model(BaseModel): bar: str except PydanticUserError as exc_info: assert exc_info.code == 'with-config-on-model' ``` ## `dataclass` is used on a `BaseModel` subclass {#dataclass-on-model} This error is raised when the Pydantic `dataclass` decorator is used on a class which is already a Pydantic model. ```python from pydantic import BaseModel, PydanticUserError from pydantic.dataclasses import dataclass try: @dataclass class Model(BaseModel): bar: str except PydanticUserError as exc_info: assert exc_info.code == 'dataclass-on-model' ``` ## Unsupported type for `validate_call` {#validate-call-type} `validate_call` has some limitations on the callables it can validate. This error is raised when you try to use it with an unsupported callable. Currently the supported callables are functions (including lambdas, but not built-ins) and methods and instances of [`partial`][functools.partial]. In the case of [`partial`][functools.partial], the function being partially applied must be one of the supported callables. ### `@classmethod`, `@staticmethod`, and `@property` These decorators must be put before `validate_call`. ```python from pydantic import PydanticUserError, validate_call # error try: class A: @validate_call @classmethod def f1(cls): ... except PydanticUserError as exc_info: assert exc_info.code == 'validate-call-type' # correct @classmethod @validate_call def f2(cls): ... ``` ### Classes While classes are callables themselves, `validate_call` can't be applied on them, as it needs to know about which method to use (`__init__` or `__new__`) to fetch type annotations. If you want to validate the constructor of a class, you should put `validate_call` on top of the appropriate method instead. ```python from pydantic import PydanticUserError, validate_call # error try: @validate_call class A1: ... except PydanticUserError as exc_info: assert exc_info.code == 'validate-call-type' # correct class A2: @validate_call def __init__(self): ... @validate_call def __new__(cls): ... ``` ### Callable instances Although instances can be callable by implementing a `__call__` method, currently the instances of these types cannot be validated with `validate_call`. This may change in the future, but for now, you should use `validate_call` explicitly on `__call__` instead. ```python from pydantic import PydanticUserError, validate_call # error try: class A1: def __call__(self): ... validate_call(A1()) except PydanticUserError as exc_info: assert exc_info.code == 'validate-call-type' # correct class A2: @validate_call def __call__(self): ... ``` ### Invalid signature This is generally less common, but a possible reason is that you are trying to validate a method that doesn't have at least one argument (usually `self`). ```python from pydantic import PydanticUserError, validate_call try: class A: def f(): ... validate_call(A().f) except PydanticUserError as exc_info: assert exc_info.code == 'validate-call-type' ``` ## [`Unpack`][typing.Unpack] used without a [`TypedDict`][typing.TypedDict] {#unpack-typed-dict} This error is raised when [`Unpack`][typing.Unpack] is used with something other than a [`TypedDict`][typing.TypedDict] class object to type hint variadic keyword parameters. For reference, see the [related specification section] and [PEP 692]. ```python from typing_extensions import Unpack from pydantic import PydanticUserError, validate_call try: @validate_call def func(**kwargs: Unpack[int]): pass except PydanticUserError as exc_info: assert exc_info.code == 'unpack-typed-dict' ``` ## Overlapping unpacked [`TypedDict`][typing.TypedDict] fields and arguments {#overlapping-unpack-typed-dict} This error is raised when the typed dictionary used to type hint variadic keywords parameters has field names overlapping with other parameters (unless [positional only][positional-only_parameter]). For reference, see the [related specification section] and [PEP 692]. ```python from typing_extensions import TypedDict, Unpack from pydantic import PydanticUserError, validate_call class TD(TypedDict): a: int try: @validate_call def func(a: int, **kwargs: Unpack[TD]): pass except PydanticUserError as exc_info: assert exc_info.code == 'overlapping-unpack-typed-dict' ``` [related specification section]: https://typing.readthedocs.io/en/latest/spec/callables.html#unpack-for-keyword-arguments [PEP 692]: https://peps.python.org/pep-0692/ ## Invalid `Self` type {#invalid-self-type} Currently, [`Self`][typing.Self] can only be used to annotate a field of a class (specifically, subclasses of [`BaseModel`][pydantic.BaseModel], [`NamedTuple`][typing.NamedTuple], [`TypedDict`][typing.TypedDict], or dataclasses). Attempting to use [`Self`][typing.Self] in any other ways will raise this error. ```python from typing_extensions import Self from pydantic import PydanticUserError, validate_call try: @validate_call def func(self: Self): pass except PydanticUserError as exc_info: assert exc_info.code == 'invalid-self-type' ``` The following example of [`validate_call()`][pydantic.validate_call] will also raise this error, even though it is correct from a type-checking perspective. This may be supported in the future. ```python from typing_extensions import Self from pydantic import BaseModel, PydanticUserError, validate_call try: class A(BaseModel): @validate_call def func(self, arg: Self): pass except PydanticUserError as exc_info: assert exc_info.code == 'invalid-self-type' ``` ## `validate_by_alias` and `validate_by_name` both set to `False` {#validate-by-alias-and-name-false} This error is raised when you set `validate_by_alias` and `validate_by_name` to `False` in the configuration. This is not allowed because it would make it impossible to populate attributes. ```python from pydantic import BaseModel, ConfigDict, Field, PydanticUserError try: class Model(BaseModel): a: int = Field(alias='A') model_config = ConfigDict( validate_by_alias=False, validate_by_name=False ) except PydanticUserError as exc_info: assert exc_info.code == 'validate-by-alias-and-name-false' ``` pydantic-pydantic-e28e879/docs/errors/validation_errors.md000066400000000000000000001357111526274674700240630ustar00rootroot00000000000000Pydantic attempts to provide useful validation errors. Below are details on common validation errors users may encounter when working with pydantic, together with some suggestions on how to fix them. The entries below explain what each error type means. To see the rejected values and surrounding trace when one occurs in a live service, [Logfire](troubleshooting.md) can record failed validations with their structured errors. See [Troubleshooting Validation Errors](troubleshooting.md) for setup and sensitive-data considerations. ## `arguments_type` This error is raised when an object that would be passed as arguments to a function during validation is not a `tuple`, `list`, or `dict`: ```python from pydantic import TypeAdapter, ValidationError def func(x: int) -> None: ... ta = TypeAdapter(func) try: ta.validate_python('invalid') except ValidationError as exc: print(repr(exc.errors()[0]['type'])) #> 'arguments_type' ``` ## `assertion_error` This error is raised when a failing `assert` statement is encountered during validation: ```python from pydantic import BaseModel, ValidationError, field_validator class Model(BaseModel): x: int @field_validator('x') @classmethod def force_x_positive(cls, v): assert v > 0 return v try: Model(x=-1) except ValidationError as exc: print(repr(exc.errors()[0]['type'])) #> 'assertion_error' ``` ## `bool_parsing` This error is raised when the input value is a string that is not valid for coercion to a boolean: ```python from pydantic import BaseModel, ValidationError class Model(BaseModel): x: bool Model(x='true') # OK try: Model(x='test') except ValidationError as exc: print(repr(exc.errors()[0]['type'])) #> 'bool_parsing' ``` ## `bool_type` This error is raised when the input value's type is not valid for a `bool` field: ```python from pydantic import BaseModel, ValidationError class Model(BaseModel): x: bool try: Model(x=None) except ValidationError as exc: print(repr(exc.errors()[0]['type'])) #> 'bool_type' ``` This error is also raised for strict fields when the input value is not an instance of `bool`. ## `bytes_invalid_encoding` This error is raised when a `bytes` value is invalid under the configured encoding. In the following example, `'a'` is invalid hex (odd number of digits). ```python from pydantic import BaseModel, ValidationError class Model(BaseModel): x: bytes model_config = {'val_json_bytes': 'hex'} try: Model(x='a') except ValidationError as exc: print(repr(exc.errors()[0]['type'])) #> 'bytes_invalid_encoding' ``` ## `bytes_too_long` This error is raised when the length of a `bytes` value is greater than the field's `max_length` constraint: ```python from pydantic import BaseModel, Field, ValidationError class Model(BaseModel): x: bytes = Field(max_length=3) try: Model(x=b'test') except ValidationError as exc: print(repr(exc.errors()[0]['type'])) #> 'bytes_too_long' ``` ## `bytes_too_short` This error is raised when the length of a `bytes` value is less than the field's `min_length` constraint: ```python from pydantic import BaseModel, Field, ValidationError class Model(BaseModel): x: bytes = Field(min_length=3) try: Model(x=b't') except ValidationError as exc: print(repr(exc.errors()[0]['type'])) #> 'bytes_too_short' ``` ## `bytes_type` This error is raised when the input value's type is not valid for a `bytes` field: ```python from pydantic import BaseModel, ValidationError class Model(BaseModel): x: bytes try: Model(x=123) except ValidationError as exc: print(repr(exc.errors()[0]['type'])) #> 'bytes_type' ``` This error is also raised for strict fields when the input value is not an instance of `bytes`. ## `callable_type` This error is raised when the input value is not valid as a callable: ```python from collections.abc import Callable from typing import Any from pydantic import BaseModel, ImportString, ValidationError class Model(BaseModel): x: ImportString[Callable[[Any], Any]] Model(x='math:cos') # OK try: Model(x='os.path') except ValidationError as exc: print(repr(exc.errors()[0]['type'])) #> 'callable_type' ``` ## `complex_str_parsing` This error is raised when the input value is a string but cannot be parsed as a complex number because it does not follow the [rule](https://docs.python.org/3/library/functions.html#complex) in Python: ```python from pydantic import BaseModel, ValidationError class Model(BaseModel): num: complex try: # Complex numbers in json are expected to be valid complex strings. # This value `abc` is not a valid complex string. Model.model_validate_json('{"num": "abc"}') except ValidationError as exc: print(repr(exc.errors()[0]['type'])) #> 'complex_str_parsing' ``` ## `complex_type` This error is raised when the input value cannot be interpreted as a complex number: ```python from pydantic import BaseModel, ValidationError class Model(BaseModel): num: complex try: Model(num='not a complex number') except ValidationError as exc: print(repr(exc.errors()[0]['type'])) #> 'complex_type' ``` ## `counter_type` This error is raised when the input value's type is not valid for a [`Counter`][collections.Counter] field: ```python from collections import Counter from pydantic import BaseModel, ValidationError class Model(BaseModel): x: Counter[str] try: Model(x='test') except ValidationError as exc: print(repr(exc.errors()[0]['type'])) #> 'counter_type' ``` ## `dataclass_exact_type` This error is raised when validating a dataclass with `strict=True` and the input is not an instance of the dataclass: ```python import pydantic.dataclasses from pydantic import TypeAdapter, ValidationError @pydantic.dataclasses.dataclass class MyDataclass: x: str adapter = TypeAdapter(MyDataclass) print(adapter.validate_python(MyDataclass(x='test'), strict=True)) #> MyDataclass(x='test') print(adapter.validate_python({'x': 'test'})) #> MyDataclass(x='test') try: adapter.validate_python({'x': 'test'}, strict=True) except ValidationError as exc: print(repr(exc.errors()[0]['type'])) #> 'dataclass_exact_type' ``` ## `dataclass_type` This error is raised when the input value is not valid for a `dataclass` field: ```python from pydantic import ValidationError, dataclasses @dataclasses.dataclass class Inner: x: int @dataclasses.dataclass class Outer: y: Inner Outer(y=Inner(x=1)) # OK try: Outer(y=1) except ValidationError as exc: print(repr(exc.errors()[0]['type'])) #> 'dataclass_type' ``` ## `date_from_datetime_inexact` This error is raised when the input `datetime` value provided for a `date` field has a nonzero time component. For a timestamp to parse into a field of type `date`, the time components must all be zero: ```python from datetime import date, datetime from pydantic import BaseModel, ValidationError class Model(BaseModel): x: date Model(x='2023-01-01') # OK Model(x=datetime(2023, 1, 1)) # OK try: Model(x=datetime(2023, 1, 1, 12)) except ValidationError as exc: print(repr(exc.errors()[0]['type'])) #> 'date_from_datetime_inexact' ``` ## `date_from_datetime_parsing` This error is raised when the input value is a string that cannot be parsed for a `date` field: ```python from datetime import date from pydantic import BaseModel, ValidationError class Model(BaseModel): x: date try: Model(x='XX1494012000') except ValidationError as exc: print(repr(exc.errors()[0]['type'])) #> 'date_from_datetime_parsing' ``` ## `date_future` This error is raised when the input value provided for a `FutureDate` field is not in the future: ```python from datetime import date from pydantic import BaseModel, FutureDate, ValidationError class Model(BaseModel): x: FutureDate try: Model(x=date(2000, 1, 1)) except ValidationError as exc: print(repr(exc.errors()[0]['type'])) #> 'date_future' ``` ## `date_parsing` This error is raised when validating JSON where the input value is string that cannot be parsed for a `date` field: ```python import json from datetime import date from pydantic import BaseModel, Field, ValidationError class Model(BaseModel): x: date = Field(strict=True) try: Model.model_validate_json(json.dumps({'x': '1'})) except ValidationError as exc: print(repr(exc.errors()[0]['type'])) #> 'date_parsing' ``` ## `date_past` This error is raised when the value provided for a `PastDate` field is not in the past: ```python from datetime import date, timedelta from pydantic import BaseModel, PastDate, ValidationError class Model(BaseModel): x: PastDate try: Model(x=date.today() + timedelta(1)) except ValidationError as exc: print(repr(exc.errors()[0]['type'])) #> 'date_past' ``` ## `date_type` This error is raised when the input value's type is not valid for a `date` field: ```python from datetime import date from pydantic import BaseModel, ValidationError class Model(BaseModel): x: date try: Model(x=None) except ValidationError as exc: print(repr(exc.errors()[0]['type'])) #> 'date_type' ``` This error is also raised for strict fields when the input value is not an instance of `date`. ## `datetime_from_date_parsing` This error is raised when the input value is a string that cannot be parsed for a `datetime` field: ```python from datetime import datetime from pydantic import BaseModel, ValidationError class Model(BaseModel): x: datetime try: # there is no 13th month Model(x='2023-13-01') except ValidationError as exc: print(repr(exc.errors()[0]['type'])) #> 'datetime_from_date_parsing' ``` ## `datetime_future` This error is raised when the value provided for a `FutureDatetime` field is not in the future: ```python from datetime import datetime from pydantic import BaseModel, FutureDatetime, ValidationError class Model(BaseModel): x: FutureDatetime try: Model(x=datetime(2000, 1, 1)) except ValidationError as exc: print(repr(exc.errors()[0]['type'])) #> 'datetime_future' ``` ## `datetime_object_invalid` This error is raised when something about the `datetime` object is not valid: ```python from datetime import datetime, tzinfo from pydantic import AwareDatetime, BaseModel, ValidationError class CustomTz(tzinfo): # utcoffset is not implemented! def tzname(self, _dt): return 'CustomTZ' class Model(BaseModel): x: AwareDatetime try: Model(x=datetime(2023, 1, 1, tzinfo=CustomTz())) except ValidationError as exc: print(repr(exc.errors()[0]['type'])) #> 'datetime_object_invalid' ``` ## `datetime_parsing` This error is raised when the value is a string that cannot be parsed for a `datetime` field: ```python import json from datetime import datetime from pydantic import BaseModel, Field, ValidationError class Model(BaseModel): x: datetime = Field(strict=True) try: Model.model_validate_json(json.dumps({'x': 'not a datetime'})) except ValidationError as exc: print(repr(exc.errors()[0]['type'])) #> 'datetime_parsing' ``` ## `datetime_past` This error is raised when the value provided for a `PastDatetime` field is not in the past: ```python from datetime import datetime, timedelta from pydantic import BaseModel, PastDatetime, ValidationError class Model(BaseModel): x: PastDatetime try: Model(x=datetime.now() + timedelta(100)) except ValidationError as exc: print(repr(exc.errors()[0]['type'])) #> 'datetime_past' ``` ## `datetime_type` This error is raised when the input value's type is not valid for a `datetime` field: ```python from datetime import datetime from pydantic import BaseModel, ValidationError class Model(BaseModel): x: datetime try: Model(x=None) except ValidationError as exc: print(repr(exc.errors()[0]['type'])) #> 'datetime_type' ``` This error is also raised for strict fields when the input value is not an instance of `datetime`. ## `decimal_max_digits` This error is raised when the value provided for a `Decimal` has too many digits: ```python from decimal import Decimal from pydantic import BaseModel, Field, ValidationError class Model(BaseModel): x: Decimal = Field(max_digits=3) try: Model(x='42.1234') except ValidationError as exc: print(repr(exc.errors()[0]['type'])) #> 'decimal_max_digits' ``` ## `decimal_max_places` This error is raised when the value provided for a `Decimal` has too many digits after the decimal point: ```python from decimal import Decimal from pydantic import BaseModel, Field, ValidationError class Model(BaseModel): x: Decimal = Field(decimal_places=3) try: Model(x='42.1234') except ValidationError as exc: print(repr(exc.errors()[0]['type'])) #> 'decimal_max_places' ``` ## `decimal_parsing` This error is raised when the value provided for a `Decimal` could not be parsed as a decimal number: ```python from decimal import Decimal from pydantic import BaseModel, Field, ValidationError class Model(BaseModel): x: Decimal = Field(decimal_places=3) try: Model(x='test') except ValidationError as exc: print(repr(exc.errors()[0]['type'])) #> 'decimal_parsing' ``` ## `decimal_type` This error is raised when the value provided for a `Decimal` is of the wrong type: ```python from decimal import Decimal from pydantic import BaseModel, Field, ValidationError class Model(BaseModel): x: Decimal = Field(decimal_places=3) try: Model(x=[1, 2, 3]) except ValidationError as exc: print(repr(exc.errors()[0]['type'])) #> 'decimal_type' ``` This error is also raised for strict fields when the input value is not an instance of `Decimal`. ## `decimal_whole_digits` This error is raised when the value provided for a `Decimal` has more digits before the decimal point than `max_digits` - `decimal_places` (as long as both are specified): ```python from decimal import Decimal from pydantic import BaseModel, Field, ValidationError class Model(BaseModel): x: Decimal = Field(max_digits=6, decimal_places=3) try: Model(x='12345.6') except ValidationError as exc: print(repr(exc.errors()[0]['type'])) #> 'decimal_whole_digits' ``` ## `default_factory_not_called` This error is raised when a [default factory taking validated data](../concepts/fields.md#default-factory-validated-data) can't be called, because validation failed on previous fields: ```python from pydantic import BaseModel, Field, ValidationError class Model(BaseModel): a: int = Field(gt=10) b: int = Field(default_factory=lambda data: data['a']) try: Model(a=1) except ValidationError as exc: print(exc) """ 2 validation errors for Model a Input should be greater than 10 [type=greater_than, input_value=1, input_type=int] b The default factory uses validated data, but at least one validation error occurred [type=default_factory_not_called] """ print(repr(exc.errors()[1]['type'])) #> 'default_factory_not_called' ``` ## `deque_type` This error is raised when the input value's type is not valid for a [`deque`][collections.deque] field: ```python from collections import deque from pydantic import BaseModel, ValidationError class Model(BaseModel): x: deque[int] try: Model(x=1) except ValidationError as exc: print(repr(exc.errors()[0]['type'])) #> 'deque_type' ``` ## `dict_type` This error is raised when the input value's type is not `dict` for a `dict` field: ```python from pydantic import BaseModel, ValidationError class Model(BaseModel): x: dict try: Model(x=['1', '2']) except ValidationError as exc: print(repr(exc.errors()[0]['type'])) #> 'dict_type' ``` ## `ellipsis_error` This error is raised when the input isn't the [`Ellipsis`][] literal: ```python from types import EllipsisType from pydantic import BaseModel, ValidationError class Model(BaseModel): e: EllipsisType try: Model(e=1) except ValidationError as exc: print(repr(exc.errors()[0]['type'])) #> 'ellipsis_error' ``` ## `enum` This error is raised when the input value does not exist in an `enum` field members: ```python from enum import Enum from pydantic import BaseModel, ValidationError class MyEnum(str, Enum): option = 'option' class Model(BaseModel): x: MyEnum try: Model(x='other_option') except ValidationError as exc: print(repr(exc.errors()[0]['type'])) #> 'enum' ``` ## `extra_forbidden` This error is raised when the input value contains extra fields, but `model_config['extra'] == 'forbid'`: ```python from pydantic import BaseModel, ConfigDict, ValidationError class Model(BaseModel): x: str model_config = ConfigDict(extra='forbid') try: Model(x='test', y='test') except ValidationError as exc: print(repr(exc.errors()[0]['type'])) #> 'extra_forbidden' ``` You can read more about the `extra` configuration in the [Extra Attributes][pydantic.config.ConfigDict.extra] section. ## `finite_number` This error is raised when the value is infinite, or too large to be represented as a 64-bit floating point number during validation: ```python from pydantic import BaseModel, ValidationError class Model(BaseModel): x: int try: Model(x=2.2250738585072011e308) except ValidationError as exc: print(repr(exc.errors()[0]['type'])) #> 'finite_number' ``` ## `float_parsing` This error is raised when the value is a string that can't be parsed as a `float`: ```python from pydantic import BaseModel, ValidationError class Model(BaseModel): x: float try: Model(x='test') except ValidationError as exc: print(repr(exc.errors()[0]['type'])) #> 'float_parsing' ``` ## `float_type` This error is raised when the input value's type is not valid for a `float` field: ```python from pydantic import BaseModel, ValidationError class Model(BaseModel): x: float try: Model(x=None) except ValidationError as exc: print(repr(exc.errors()[0]['type'])) #> 'float_type' ``` ## `fraction_parsing` This error is raised when the value provided for an input that could not be parsed as a fraction: ```python from fractions import Fraction from pydantic import BaseModel, ValidationError class Model(BaseModel): x: Fraction try: Model(x='invalid') except ValidationError as exc: print(repr(exc.errors()[0]['type'])) #> 'fraction_parsing' ``` ## `fraction_type` This error is raised when the value provided for a [`Fraction`][fractions.Fraction] is of the wrong type: ```python from fractions import Fraction from pydantic import BaseModel, ValidationError class Model(BaseModel): x: Fraction try: Model.model_validate_json('{"x": [1, 2]}') except ValidationError as exc: print(repr(exc.errors()[0]['type'])) #> 'fraction_type' ``` ## `frozen_dict_type` This error is raised when the input value's type is not valid for a `frozendict` field: ```python {requires="3.15" lint="skip"} from pydantic import BaseModel, ValidationError class Model(BaseModel): x: frozendict try: model = Model(x='test') except ValidationError as exc: print(repr(exc.errors()[0]['type'])) #> 'frozen_dict_type' ``` ## `frozen_field` This error is raised when you attempt to assign a value to a field with `frozen=True`, or to delete such a field: ```python from pydantic import BaseModel, Field, ValidationError class Model(BaseModel): x: str = Field('test', frozen=True) model = Model() try: model.x = 'test1' except ValidationError as exc: print(repr(exc.errors()[0]['type'])) #> 'frozen_field' try: del model.x except ValidationError as exc: print(repr(exc.errors()[0]['type'])) #> 'frozen_field' ``` ## `frozen_instance` This error is raised when `frozen` is set in the [configuration](../concepts/config.md) and you attempt to delete or assign a new value to any of the fields: ```python from pydantic import BaseModel, ConfigDict, ValidationError class Model(BaseModel): x: int model_config = ConfigDict(frozen=True) m = Model(x=1) try: m.x = 2 except ValidationError as exc: print(repr(exc.errors()[0]['type'])) #> 'frozen_instance' try: del m.x except ValidationError as exc: print(repr(exc.errors()[0]['type'])) #> 'frozen_instance' ``` ## `frozen_set_type` This error is raised when the input value's type is not valid for a `frozenset` field: ```python from pydantic import BaseModel, ValidationError class Model(BaseModel): x: frozenset try: model = Model(x='test') except ValidationError as exc: print(repr(exc.errors()[0]['type'])) #> 'frozen_set_type' ``` ## `get_attribute_error` This error is raised when `model_config['from_attributes'] == True` and an error is raised while reading the attributes: ```python from pydantic import BaseModel, ConfigDict, ValidationError class Foobar: def __init__(self): self.x = 1 @property def y(self): raise RuntimeError('intentional error') class Model(BaseModel): x: int y: str model_config = ConfigDict(from_attributes=True) try: Model.model_validate(Foobar()) except ValidationError as exc: print(repr(exc.errors()[0]['type'])) #> 'get_attribute_error' ``` ## `greater_than` This error is raised when the value is not greater than the field's `gt` constraint: ```python from pydantic import BaseModel, Field, ValidationError class Model(BaseModel): x: int = Field(gt=10) try: Model(x=10) except ValidationError as exc: print(repr(exc.errors()[0]['type'])) #> 'greater_than' ``` ## `greater_than_equal` This error is raised when the value is not greater than or equal to the field's `ge` constraint: ```python from pydantic import BaseModel, Field, ValidationError class Model(BaseModel): x: int = Field(ge=10) try: Model(x=9) except ValidationError as exc: print(repr(exc.errors()[0]['type'])) #> 'greater_than_equal' ``` ## `int_from_float` This error is raised when you provide a `float` value for an `int` field: ```python from pydantic import BaseModel, ValidationError class Model(BaseModel): x: int try: Model(x=0.5) except ValidationError as exc: print(repr(exc.errors()[0]['type'])) #> 'int_from_float' ``` ## `int_parsing` This error is raised when the value can't be parsed as `int`: ```python from pydantic import BaseModel, ValidationError class Model(BaseModel): x: int try: Model(x='test') except ValidationError as exc: print(repr(exc.errors()[0]['type'])) #> 'int_parsing' ``` ## `int_parsing_size` This error is raised when attempting to parse a python or JSON value from a string outside the maximum range that Python `str` to `int` parsing permits: ```python import json from pydantic import BaseModel, ValidationError class Model(BaseModel): x: int # from Python assert Model(x='1' * 4_300).x == int('1' * 4_300) # OK too_long = '1' * 4_301 try: Model(x=too_long) except ValidationError as exc: print(repr(exc.errors()[0]['type'])) #> 'int_parsing_size' # from JSON try: Model.model_validate_json(json.dumps({'x': too_long})) except ValidationError as exc: print(repr(exc.errors()[0]['type'])) #> 'int_parsing_size' ``` ## `int_type` This error is raised when the input value's type is not valid for an `int` field: ```python from pydantic import BaseModel, ValidationError class Model(BaseModel): x: int try: Model(x=None) except ValidationError as exc: print(repr(exc.errors()[0]['type'])) #> 'int_type' ``` ## `invalid_key` This error is raised when attempting to validate a `dict` that has a key that is not an instance of `str`: ```python from pydantic import BaseModel, ConfigDict, ValidationError class Model(BaseModel): x: int model_config = ConfigDict(extra='allow') try: Model.model_validate({'x': 1, b'y': 2}) except ValidationError as exc: print(repr(exc.errors()[0]['type'])) #> 'invalid_key' ``` ## `is_instance_of` This error is raised when the input value is not an instance of the expected type: ```python from pydantic import BaseModel, ConfigDict, ValidationError class Nested: x: str class Model(BaseModel): y: Nested model_config = ConfigDict(arbitrary_types_allowed=True) try: Model(y='test') except ValidationError as exc: print(repr(exc.errors()[0]['type'])) #> 'is_instance_of' ``` ## `is_subclass_of` This error is raised when the input value is not a subclass of the expected type: ```python from pydantic import BaseModel, ValidationError class Nested: x: str class Model(BaseModel): y: type[Nested] try: Model(y='test') except ValidationError as exc: print(repr(exc.errors()[0]['type'])) #> 'is_subclass_of' ``` ## `iterable_type` This error is raised when the input value is not valid as an `Iterable`: ```python from collections.abc import Iterable from pydantic import BaseModel, ValidationError class Model(BaseModel): y: Iterable[str] try: Model(y=123) except ValidationError as exc: print(repr(exc.errors()[0]['type'])) #> 'iterable_type' ``` ## `iteration_error` This error is raised when an error occurs during iteration: ```python from pydantic import BaseModel, ValidationError def gen(): yield 1 raise RuntimeError('error') class Model(BaseModel): x: list[int] try: Model(x=gen()) except ValidationError as exc: print(repr(exc.errors()[0]['type'])) #> 'iteration_error' ``` ## `json_invalid` This error is raised when the input value is not a valid JSON string: ```python from pydantic import BaseModel, Json, ValidationError class Model(BaseModel): x: Json try: Model(x='test') except ValidationError as exc: print(repr(exc.errors()[0]['type'])) #> 'json_invalid' ``` ## `json_type` This error is raised when the input value is of a type that cannot be parsed as JSON: ```python from pydantic import BaseModel, Json, ValidationError class Model(BaseModel): x: Json try: Model(x=None) except ValidationError as exc: print(repr(exc.errors()[0]['type'])) #> 'json_type' ``` ## `less_than` This error is raised when the input value is not less than the field's `lt` constraint: ```python from pydantic import BaseModel, Field, ValidationError class Model(BaseModel): x: int = Field(lt=10) try: Model(x=10) except ValidationError as exc: print(repr(exc.errors()[0]['type'])) #> 'less_than' ``` ## `less_than_equal` This error is raised when the input value is not less than or equal to the field's `le` constraint: ```python from pydantic import BaseModel, Field, ValidationError class Model(BaseModel): x: int = Field(le=10) try: Model(x=11) except ValidationError as exc: print(repr(exc.errors()[0]['type'])) #> 'less_than_equal' ``` ## `list_type` This error is raised when the input value's type is not valid for a `list` field: ```python from pydantic import BaseModel, ValidationError class Model(BaseModel): x: list[int] try: Model(x=1) except ValidationError as exc: print(repr(exc.errors()[0]['type'])) #> 'list_type' ``` ## `literal_error` This error is raised when the input value is not one of the expected literal values: ```python from typing import Literal from pydantic import BaseModel, ValidationError class Model(BaseModel): x: Literal['a', 'b'] Model(x='a') # OK try: Model(x='c') except ValidationError as exc: print(repr(exc.errors()[0]['type'])) #> 'literal_error' ``` ## `mapping_type` This error is raised when a problem occurs during validation due to a failure in a call to the methods from the `Mapping` protocol, such as `.items()`: ```python from collections.abc import Mapping from pydantic import BaseModel, ValidationError class BadMapping(Mapping): def items(self): raise ValueError() def __iter__(self): raise ValueError() def __getitem__(self, key): raise ValueError() def __len__(self): return 1 class Model(BaseModel): x: dict[str, str] try: Model(x=BadMapping()) except ValidationError as exc: print(repr(exc.errors()[0]['type'])) #> 'mapping_type' ``` ## `missing` This error is raised when there are required fields missing from the input value: ```python from pydantic import BaseModel, ValidationError class Model(BaseModel): x: str try: Model() except ValidationError as exc: print(repr(exc.errors()[0]['type'])) #> 'missing' ``` ## `missing_argument` This error is raised when a required positional-or-keyword argument is not passed to a function decorated with `validate_call`: ```python from pydantic import ValidationError, validate_call @validate_call def foo(a: int): return a try: foo() except ValidationError as exc: print(repr(exc.errors()[0]['type'])) #> 'missing_argument' ``` ## `missing_keyword_only_argument` This error is raised when a required keyword-only argument is not passed to a function decorated with `validate_call`: ```python from pydantic import ValidationError, validate_call @validate_call def foo(*, a: int): return a try: foo() except ValidationError as exc: print(repr(exc.errors()[0]['type'])) #> 'missing_keyword_only_argument' ``` ## `missing_positional_only_argument` This error is raised when a required positional-only argument is not passed to a function decorated with `validate_call`: ```python from pydantic import ValidationError, validate_call @validate_call def foo(a: int, /): return a try: foo() except ValidationError as exc: print(repr(exc.errors()[0]['type'])) #> 'missing_positional_only_argument' ``` ## `missing_sentinel_error` This error is raised when the `MISSING` sentinel is the only value allowed, and wasn't provided during validation: ```python from pydantic import MISSING, BaseModel, ValidationError class Model(BaseModel): f: MISSING try: Model(f=1) except ValidationError as exc: print(repr(exc.errors()[0]['type'])) #> 'missing_sentinel_error' ``` ## `model_attributes_type` This error is raised when the input value is not a valid dictionary, model instance, or instance that fields can be extracted from: ```python from pydantic import BaseModel, ValidationError class Model(BaseModel): a: int b: int # simply validating a dict print(Model.model_validate({'a': 1, 'b': 2})) #> a=1 b=2 class CustomObj: def __init__(self, a, b): self.a = a self.b = b # using from attributes to extract fields from an objects print(Model.model_validate(CustomObj(3, 4), from_attributes=True)) #> a=3 b=4 try: Model.model_validate('not an object', from_attributes=True) except ValidationError as exc: print(repr(exc.errors()[0]['type'])) #> 'model_attributes_type' ``` ## `model_type` This error is raised when the input to a model is not an instance of the model or dict: ```python from pydantic import BaseModel, ValidationError class Model(BaseModel): a: int b: int # simply validating a dict m = Model.model_validate({'a': 1, 'b': 2}) print(m) #> a=1 b=2 # validating an existing model instance print(Model.model_validate(m)) #> a=1 b=2 try: Model.model_validate('not an object') except ValidationError as exc: print(repr(exc.errors()[0]['type'])) #> 'model_type' ``` ## `multiple_argument_values` This error is raised when you provide multiple values for a single argument while calling a function decorated with `validate_call`: ```python from pydantic import ValidationError, validate_call @validate_call def foo(a: int): return a try: foo(1, a=2) except ValidationError as exc: print(repr(exc.errors()[0]['type'])) #> 'multiple_argument_values' ``` ## `multiple_of` This error is raised when the input is not a multiple of a field's `multiple_of` constraint: ```python from pydantic import BaseModel, Field, ValidationError class Model(BaseModel): x: int = Field(multiple_of=5) try: Model(x=1) except ValidationError as exc: print(repr(exc.errors()[0]['type'])) #> 'multiple_of' ``` ## `named_tuple_type` This error is raised when the input value is not valid for a named tuple field: ```python from typing import NamedTuple from pydantic import BaseModel, ValidationError class Point(NamedTuple): x: int y: int class Model(BaseModel): p: Point try: Model(p='invalid') except ValidationError as exc: print(repr(exc.errors()[0]['type'])) #> 'named_tuple_type' ``` ## `needs_python_object` This type of error is raised when validation is attempted from a format that cannot be converted to a Python object. For example, we cannot check `isinstance` or `issubclass` from JSON: ```python import json from pydantic import BaseModel, ValidationError class Model(BaseModel): bm: type[BaseModel] try: Model.model_validate_json(json.dumps({'bm': 'not a basemodel class'})) except ValidationError as exc: print(repr(exc.errors()[0]['type'])) #> 'needs_python_object' ``` ## `no_such_attribute` This error is raised when `validate_assignment=True` in the config, and you attempt to assign a value to an attribute that is not an existing field: ```python from pydantic import ConfigDict, ValidationError, dataclasses @dataclasses.dataclass(config=ConfigDict(validate_assignment=True)) class MyDataclass: x: int m = MyDataclass(x=1) try: m.y = 10 except ValidationError as exc: print(repr(exc.errors()[0]['type'])) #> 'no_such_attribute' ``` ## `none_required` This error is raised when the input value is not `None` for a field that requires `None`: ```python from pydantic import BaseModel, ValidationError class Model(BaseModel): x: None try: Model(x=1) except ValidationError as exc: print(repr(exc.errors()[0]['type'])) #> 'none_required' ``` !!! note You may encounter this error when there is a naming collision in your model between a field name and its type. More specifically, this error is likely to be thrown when the default value of that field is `None`. For example, the following would yield the `none_required` validation error since the field `int` is set to a default value of `None` and has the exact same name as its type, which causes problems with validation. ```python {test="skip"} from pydantic import BaseModel class M1(BaseModel): int: int | None = None m = M1(int=123) # errors ``` ## `ordered_dict_type` This error is raised when the input value's type is not valid for an [`OrderedDict`][collections.OrderedDict] field: ```python from collections import OrderedDict from pydantic import BaseModel, ValidationError class Model(BaseModel): x: OrderedDict[str, int] try: Model(x='test') except ValidationError as exc: print(repr(exc.errors()[0]['type'])) #> 'ordered_dict_type' ``` ## `recursion_loop` This error is raised when a cyclic reference is detected: ```python from pydantic import BaseModel, ValidationError class Model(BaseModel): x: list['Model'] d = {'x': []} d['x'].append(d) try: Model(**d) except ValidationError as exc: print(repr(exc.errors()[0]['type'])) #> 'recursion_loop' ``` ## `set_item_not_hashable` This error is raised when an unhashable value is validated against a [`set`][] or a [`frozenset`][]: ```python from pydantic import BaseModel, ValidationError class Model(BaseModel): x: set[object] class Unhashable: __hash__ = None try: Model(x=[{'a': 'b'}, Unhashable()]) except ValidationError as exc: print(repr(exc.errors()[0]['type'])) #> 'set_item_not_hashable' print(repr(exc.errors()[1]['type'])) #> 'set_item_not_hashable' ``` ## `set_type` This error is raised when the value type is not valid for a `set` field: ```python from pydantic import BaseModel, ValidationError class Model(BaseModel): x: set[int] try: Model(x='test') except ValidationError as exc: print(repr(exc.errors()[0]['type'])) #> 'set_type' ``` ## `string_not_ascii` This error is raised when the input string contains non-ASCII characters: ```python from typing import Annotated from pydantic import BaseModel, StringConstraints, ValidationError class Model(BaseModel): v: Annotated[str, StringConstraints(ascii_only=True)] try: Model(v='caf\u00e9') except ValidationError as exc: print(repr(exc.errors()[0]['type'])) #> 'string_not_ascii' ``` ## `string_pattern_mismatch` This error is raised when the input value doesn't match the field's `pattern` constraint: ```python from pydantic import BaseModel, Field, ValidationError class Model(BaseModel): x: str = Field(pattern='test') try: Model(x='1') except ValidationError as exc: print(repr(exc.errors()[0]['type'])) #> 'string_pattern_mismatch' ``` ## `string_too_long` This error is raised when the input value is a string whose length is greater than the field's `max_length` constraint: ```python from pydantic import BaseModel, Field, ValidationError class Model(BaseModel): x: str = Field(max_length=3) try: Model(x='test') except ValidationError as exc: print(repr(exc.errors()[0]['type'])) #> 'string_too_long' ``` ## `string_too_short` This error is raised when the input value is a string whose length is less than the field's `min_length` constraint: ```python from pydantic import BaseModel, Field, ValidationError class Model(BaseModel): x: str = Field(min_length=3) try: Model(x='t') except ValidationError as exc: print(repr(exc.errors()[0]['type'])) #> 'string_too_short' ``` ## `string_type` This error is raised when the input value's type is not valid for a `str` field: ```python from pydantic import BaseModel, ValidationError class Model(BaseModel): x: str try: Model(x=1) except ValidationError as exc: print(repr(exc.errors()[0]['type'])) #> 'string_type' ``` This error is also raised for strict fields when the input value is not an instance of `str`. ## `string_unicode` This error is raised when the value cannot be parsed as a Unicode string: ```python from pydantic import BaseModel, ValidationError class Model(BaseModel): x: str try: Model(x=b'\x81') except ValidationError as exc: print(repr(exc.errors()[0]['type'])) #> 'string_unicode' ``` ## `time_delta_parsing` This error is raised when the input value is a string that cannot be parsed for a `timedelta` field: ```python from datetime import timedelta from pydantic import BaseModel, ValidationError class Model(BaseModel): x: timedelta try: Model(x='t') except ValidationError as exc: print(repr(exc.errors()[0]['type'])) #> 'time_delta_parsing' ``` ## `time_delta_type` This error is raised when the input value's type is not valid for a `timedelta` field: ```python from datetime import timedelta from pydantic import BaseModel, ValidationError class Model(BaseModel): x: timedelta try: Model(x=None) except ValidationError as exc: print(repr(exc.errors()[0]['type'])) #> 'time_delta_type' ``` This error is also raised for strict fields when the input value is not an instance of `timedelta`. ## `time_parsing` This error is raised when the input value is a string that cannot be parsed for a `time` field: ```python from datetime import time from pydantic import BaseModel, ValidationError class Model(BaseModel): x: time try: Model(x='25:20:30.400') except ValidationError as exc: print(repr(exc.errors()[0]['type'])) #> 'time_parsing' ``` ## `time_type` This error is raised when the value type is not valid for a `time` field: ```python from datetime import time from pydantic import BaseModel, ValidationError class Model(BaseModel): x: time try: Model(x=None) except ValidationError as exc: print(repr(exc.errors()[0]['type'])) #> 'time_type' ``` This error is also raised for strict fields when the input value is not an instance of `time`. ## `timezone_aware` This error is raised when the `datetime` value provided for a timezone-aware `datetime` field doesn't have timezone information: ```python from datetime import datetime from pydantic import AwareDatetime, BaseModel, ValidationError class Model(BaseModel): x: AwareDatetime try: Model(x=datetime.now()) except ValidationError as exc: print(repr(exc.errors()[0]['type'])) #> 'timezone_aware' ``` ## `timezone_naive` This error is raised when the `datetime` value provided for a timezone-naive `datetime` field has timezone info: ```python from datetime import datetime, timezone from pydantic import BaseModel, NaiveDatetime, ValidationError class Model(BaseModel): x: NaiveDatetime try: Model(x=datetime.now(tz=timezone.utc)) except ValidationError as exc: print(repr(exc.errors()[0]['type'])) #> 'timezone_naive' ``` ## `too_long` This error is raised when the input value's length is greater than the field's `max_length` constraint: ```python from pydantic import BaseModel, Field, ValidationError class Model(BaseModel): x: list[int] = Field(max_length=3) try: Model(x=[1, 2, 3, 4]) except ValidationError as exc: print(repr(exc.errors()[0]['type'])) #> 'too_long' ``` ## `too_short` This error is raised when the value length is less than the field's `min_length` constraint: ```python from pydantic import BaseModel, Field, ValidationError class Model(BaseModel): x: list[int] = Field(min_length=3) try: Model(x=[1, 2]) except ValidationError as exc: print(repr(exc.errors()[0]['type'])) #> 'too_short' ``` ## `tuple_type` This error is raised when the input value's type is not valid for a `tuple` field: ```python from pydantic import BaseModel, ValidationError class Model(BaseModel): x: tuple[int] try: Model(x=None) except ValidationError as exc: print(repr(exc.errors()[0]['type'])) #> 'tuple_type' ``` This error is also raised for strict fields when the input value is not an instance of `tuple`. ## `unexpected_keyword_argument` This error is raised when you provide a value by keyword for a positional-only argument while calling a function decorated with `validate_call`: ```python from pydantic import ValidationError, validate_call @validate_call def foo(a: int, /): return a try: foo(a=2) except ValidationError as exc: print(repr(exc.errors()[1]['type'])) #> 'unexpected_keyword_argument' ``` It is also raised when using pydantic.dataclasses and `extra=forbid`: ```python from pydantic import TypeAdapter, ValidationError from pydantic.dataclasses import dataclass @dataclass(config={'extra': 'forbid'}) class Foo: bar: int try: TypeAdapter(Foo).validate_python({'bar': 1, 'foobar': 2}) except ValidationError as exc: print(repr(exc.errors()[0]['type'])) #> 'unexpected_keyword_argument' ``` ## `unexpected_positional_argument` This error is raised when you provide a positional value for a keyword-only argument while calling a function decorated with `validate_call`: ```python from pydantic import ValidationError, validate_call @validate_call def foo(*, a: int): return a try: foo(2) except ValidationError as exc: print(repr(exc.errors()[1]['type'])) #> 'unexpected_positional_argument' ``` ## `union_tag_invalid` This error is raised when the input's discriminator is not one of the expected values: ```python from typing import Literal from pydantic import BaseModel, Field, ValidationError class BlackCat(BaseModel): pet_type: Literal['blackcat'] class WhiteCat(BaseModel): pet_type: Literal['whitecat'] class Model(BaseModel): cat: BlackCat | WhiteCat = Field(discriminator='pet_type') try: Model(cat={'pet_type': 'dog'}) except ValidationError as exc: print(repr(exc.errors()[0]['type'])) #> 'union_tag_invalid' ``` ## `union_tag_not_found` This error is raised when it is not possible to extract a discriminator value from the input: ```python from typing import Literal from pydantic import BaseModel, Field, ValidationError class BlackCat(BaseModel): pet_type: Literal['blackcat'] class WhiteCat(BaseModel): pet_type: Literal['whitecat'] class Model(BaseModel): cat: BlackCat | WhiteCat = Field(discriminator='pet_type') try: Model(cat={'name': 'blackcat'}) except ValidationError as exc: print(repr(exc.errors()[0]['type'])) #> 'union_tag_not_found' ``` ## `url_parsing` This error is raised when the input value cannot be parsed as a URL: ```python from pydantic import AnyUrl, BaseModel, ValidationError class Model(BaseModel): x: AnyUrl try: Model(x='test') except ValidationError as exc: print(repr(exc.errors()[0]['type'])) #> 'url_parsing' ``` ## `url_scheme` This error is raised when the URL scheme is not valid for the URL type of the field: ```python from pydantic import BaseModel, HttpUrl, ValidationError class Model(BaseModel): x: HttpUrl try: Model(x='ftp://example.com') except ValidationError as exc: print(repr(exc.errors()[0]['type'])) #> 'url_scheme' ``` ## `url_syntax_violation` This error is raised when the URL syntax is not valid: ```python from pydantic import BaseModel, Field, HttpUrl, ValidationError class Model(BaseModel): x: HttpUrl = Field(strict=True) try: Model(x='http:////example.com') except ValidationError as exc: print(repr(exc.errors()[0]['type'])) #> 'url_syntax_violation' ``` ## `url_too_long` This error is raised when the URL length is greater than 2083: ```python from pydantic import BaseModel, HttpUrl, ValidationError class Model(BaseModel): x: HttpUrl try: Model(x='x' * 2084) except ValidationError as exc: print(repr(exc.errors()[0]['type'])) #> 'url_too_long' ``` ## `url_type` This error is raised when the input value's type is not valid for a URL field: ```python from pydantic import BaseModel, HttpUrl, ValidationError class Model(BaseModel): x: HttpUrl try: Model(x=None) except ValidationError as exc: print(repr(exc.errors()[0]['type'])) #> 'url_type' ``` ## `uuid_parsing` This error is raised when the input value's type is not valid for a UUID field: ```python from uuid import UUID from pydantic import BaseModel, ValidationError class Model(BaseModel): u: UUID try: Model(u='12345678-124-1234-1234-567812345678') except ValidationError as exc: print(repr(exc.errors()[0]['type'])) #> 'uuid_parsing' ``` ## `uuid_type` This error is raised when the input value's type is not valid instance for a UUID field (str, bytes or UUID): ```python from uuid import UUID from pydantic import BaseModel, ValidationError class Model(BaseModel): u: UUID try: Model(u=1234567812412341234567812345678) except ValidationError as exc: print(repr(exc.errors()[0]['type'])) #> 'uuid_type' ``` ## `uuid_version` This error is raised when the input value's type is not match UUID version: ```python from pydantic import UUID5, BaseModel, ValidationError class Model(BaseModel): u: UUID5 try: Model(u='a6cc5730-2261-11ee-9c43-2eb5a363657c') except ValidationError as exc: print(repr(exc.errors()[0]['type'])) #> 'uuid_version' ``` ## `value_error` This error is raised when a `ValueError` is raised during validation: ```python from pydantic import BaseModel, ValidationError, field_validator class Model(BaseModel): x: str @field_validator('x') @classmethod def repeat_b(cls, v): raise ValueError() try: Model(x='test') except ValidationError as exc: print(repr(exc.errors()[0]['type'])) #> 'value_error' ``` pydantic-pydantic-e28e879/docs/examples/000077500000000000000000000000001526274674700203055ustar00rootroot00000000000000pydantic-pydantic-e28e879/docs/examples/custom_validators.md000066400000000000000000000246711526274674700244030ustar00rootroot00000000000000This page provides example snippets for creating more complex, custom validators in Pydantic. Many of these examples are adapted from Pydantic issues and discussions, and are intended to showcase the flexibility and power of Pydantic's validation system. ## Custom `datetime` Validator via [`Annotated`][typing.Annotated] Metadata In this example, we'll construct a custom validator, attached to an [`Annotated`][typing.Annotated] type, that ensures a [`datetime`][datetime.datetime] object adheres to a given timezone constraint. The custom validator supports string specification of the timezone, and will raise an error if the [`datetime`][datetime.datetime] object does not have the correct timezone. We use `__get_pydantic_core_schema__` in the validator to customize the schema of the annotated type (in this case, [`datetime`][datetime.datetime]), which allows us to add custom validation logic. Notably, we use a `wrap` validator function so that we can perform operations both before and after the default `pydantic` validation of a [`datetime`][datetime.datetime]. ```python import datetime as dt from dataclasses import dataclass from pprint import pprint from typing import Annotated, Any import pytz from pydantic_core import CoreSchema, core_schema from pydantic import ( GetCoreSchemaHandler, PydanticUserError, TypeAdapter, ValidationError, ValidatorFunctionWrapHandler, ) @dataclass(frozen=True) class MyDatetimeValidator: tz_constraint: str | None = None def tz_constraint_validator( self, value: Any, handler: ValidatorFunctionWrapHandler, # (1)! ): """Validate tz_constraint and tz_info.""" result = handler(value) # (2)! # handle naive datetimes if self.tz_constraint is None: assert ( result.tzinfo is None ), 'tz_constraint is None, but provided value is tz-aware.' return result # validate tz_constraint and tz-aware tzinfo if self.tz_constraint not in pytz.all_timezones: raise PydanticUserError( f'Invalid tz_constraint: {self.tz_constraint}', code='unevaluable-type-annotation', ) assert self.tz_constraint == str( result.tzinfo ), f'Invalid tzinfo: {str(result.tzinfo)}, expected: {self.tz_constraint}' return result def __get_pydantic_core_schema__( self, source_type: Any, handler: GetCoreSchemaHandler, ) -> CoreSchema: return core_schema.no_info_wrap_validator_function( self.tz_constraint_validator, handler(source_type), ) LA = 'America/Los_Angeles' ta = TypeAdapter(Annotated[dt.datetime, MyDatetimeValidator(LA)]) print( ta.validate_python(dt.datetime(2023, 1, 1, 0, 0, tzinfo=pytz.timezone(LA))) ) #> 2023-01-01 00:00:00-07:53 naive_ta = TypeAdapter(Annotated[dt.datetime, MyDatetimeValidator()]) print(naive_ta.validate_python('2023-01-01T00:00:00')) #> 2023-01-01 00:00:00 LONDON = 'Europe/London' try: ta.validate_python( dt.datetime(2023, 1, 1, 0, 0, tzinfo=pytz.timezone(LONDON)) ) except ValidationError as ve: pprint(ve.errors(), width=100) """ [{'ctx': {'error': AssertionError('Invalid tzinfo: Europe/London, expected: America/Los_Angeles')}, 'input': datetime.datetime(2023, 1, 1, 0, 0, tzinfo=), 'loc': (), 'msg': 'Assertion failed, Invalid tzinfo: Europe/London, expected: America/Los_Angeles', 'type': 'assertion_error', 'url': 'https://errors.pydantic.dev/2/v/assertion_error'}] """ ``` 1. The `handler` function is what we call to validate the input with standard `pydantic` validation 2. We call the `handler` function to validate the input with standard `pydantic` validation in this wrap validator We can also enforce UTC offset constraints in a similar way. Assuming we have a `lower_bound` and an `upper_bound`, we can create a custom validator to ensure our `datetime` has a UTC offset that is inclusive within the boundary we define: ```python import datetime as dt from dataclasses import dataclass from pprint import pprint from typing import Annotated, Any import pytz from pydantic_core import CoreSchema, core_schema from pydantic import ( GetCoreSchemaHandler, TypeAdapter, ValidationError, ValidatorFunctionWrapHandler, ) @dataclass(frozen=True) class MyDatetimeValidator: lower_bound: int upper_bound: int def validate_tz_bounds( self, value: Any, handler: ValidatorFunctionWrapHandler ): """Validate and test bounds""" assert self.lower_bound <= self.upper_bound, 'Invalid bounds' result = handler(value) assert result.utcoffset() is not None, 'UTC offset must exist' hours_offset = result.utcoffset().total_seconds() / 3600 assert ( self.lower_bound <= hours_offset <= self.upper_bound ), 'Value out of bounds' return result def __get_pydantic_core_schema__( self, source_type: Any, handler: GetCoreSchemaHandler, ) -> CoreSchema: return core_schema.no_info_wrap_validator_function( self.validate_tz_bounds, handler(source_type), ) LA = 'America/Los_Angeles' # UTC-7 or UTC-8 ta = TypeAdapter(Annotated[dt.datetime, MyDatetimeValidator(-10, -5)]) print( ta.validate_python(dt.datetime(2023, 1, 1, 0, 0, tzinfo=pytz.timezone(LA))) ) #> 2023-01-01 00:00:00-07:53 print(ta.validate_json('"2023-01-01T00:00:00-08:00"')) #> 2023-01-01 00:00:00-08:00 LONDON = 'Europe/London' try: print( ta.validate_python( dt.datetime(2023, 1, 1, 0, 0, tzinfo=pytz.timezone(LONDON)) ) ) except ValidationError as e: pprint(e.errors(), width=100) """ [{'ctx': {'error': AssertionError('Value out of bounds')}, 'input': datetime.datetime(2023, 1, 1, 0, 0, tzinfo=), 'loc': (), 'msg': 'Assertion failed, Value out of bounds', 'type': 'assertion_error', 'url': 'https://errors.pydantic.dev/2/v/assertion_error'}] """ ``` ## Validating Nested Model Fields Here, we demonstrate two ways to validate a field of a nested model, where the validator utilizes data from the parent model. In this example, we construct a validator that checks that each user's password is not in a list of forbidden passwords specified by the parent model. One way to do this is to place a custom validator on the outer model: ```python from typing_extensions import Self from pydantic import BaseModel, ValidationError, model_validator class User(BaseModel): username: str password: str class Organization(BaseModel): forbidden_passwords: list[str] users: list[User] @model_validator(mode='after') def validate_user_passwords(self) -> Self: """Check that user password is not in forbidden list. Raise a validation error if a forbidden password is encountered.""" for user in self.users: current_pw = user.password if current_pw in self.forbidden_passwords: raise ValueError( f'Password {current_pw} is forbidden. Please choose another password for user {user.username}.' ) return self data = { 'forbidden_passwords': ['123'], 'users': [ {'username': 'Spartacat', 'password': '123'}, {'username': 'Iceburgh', 'password': '87'}, ], } try: org = Organization(**data) except ValidationError as e: print(e) """ 1 validation error for Organization Value error, Password 123 is forbidden. Please choose another password for user Spartacat. [type=value_error, input_value={'forbidden_passwords': [...gh', 'password': '87'}]}, input_type=dict] """ ``` Alternatively, a custom validator can be used in the nested model class (`User`), with the forbidden passwords data from the parent model being passed in via [validation context](../concepts/validators.md#validation-context). !!! warning The ability to mutate the context within a validator adds a lot of power to nested validation, but can also lead to confusing or hard-to-debug code. Use this approach at your own risk! ```python from pydantic import BaseModel, ValidationError, ValidationInfo, field_validator class User(BaseModel): username: str password: str @field_validator('password', mode='after') @classmethod def validate_user_passwords( cls, password: str, info: ValidationInfo ) -> str: """Check that user password is not in forbidden list.""" forbidden_passwords = ( info.context.get('forbidden_passwords', []) if info.context else [] ) if password in forbidden_passwords: raise ValueError(f'Password {password} is forbidden.') return password class Organization(BaseModel): forbidden_passwords: list[str] users: list[User] @field_validator('forbidden_passwords', mode='after') @classmethod def add_context(cls, v: list[str], info: ValidationInfo) -> list[str]: if info.context is not None: info.context.update({'forbidden_passwords': v}) return v data = { 'forbidden_passwords': ['123'], 'users': [ {'username': 'Spartacat', 'password': '123'}, {'username': 'Iceburgh', 'password': '87'}, ], } try: org = Organization.model_validate(data, context={}) except ValidationError as e: print(e) """ 1 validation error for Organization users.0.password Value error, Password 123 is forbidden. [type=value_error, input_value='123', input_type=str] """ ``` Note that if the context property is not included in [`model_validate()`][pydantic.main.BaseModel.model_validate], then [`context`][pydantic.ValidationInfo.context] will be `None` and the forbidden passwords list will not get added to the context in the above implementation. As such, `validate_user_passwords()` would not carry out the desired password validation. More details about validation context can be found in the [validators documentation](../concepts/validators.md#validation-context). The messages you write in these `raise ValueError(...)` calls are worth crafting: they're what you'll read when the rule eventually rejects real data. They also carry through to tooling that consumes the structured errors: [Logfire's explanations of failed validations](../errors/troubleshooting.md), for example, include the messages from your custom validators. pydantic-pydantic-e28e879/docs/examples/cyclic_references.md000066400000000000000000000112231526274674700242750ustar00rootroot00000000000000As described in the [cyclic references](../concepts/models.md#cyclic-references) section, Pydantic detects cyclic references in validation inputs and raises a [`ValidationError`][pydantic_core.ValidationError] with the `recursion_loop` error type, rather than a [`RecursionError`][]. The same applies during serialization, where a [`ValueError`][] is raised. This example shows how these errors can be caught in validators and serializers to drop the cyclic references and still produce a result. Because this [`ValidationError`][pydantic_core.ValidationError] is raised without actually exceeding the maximum recursion depth, you can catch and handle it without needing to worry about the limited remaining recursion depth: ```python from __future__ import annotations from collections.abc import Generator from contextlib import contextmanager from dataclasses import field from pydantic import BaseModel, ValidationError, field_validator def is_recursion_validation_error(exc: ValidationError) -> bool: errors = exc.errors() return len(errors) == 1 and errors[0]['type'] == 'recursion_loop' @contextmanager def suppress_recursion_validation_error() -> Generator[None]: try: yield except ValidationError as exc: if not is_recursion_validation_error(exc): raise exc class Node(BaseModel): id: int children: list[Node] = field(default_factory=list) @field_validator('children', mode='wrap') @classmethod def drop_cyclic_references(cls, children, h): try: return h(children) except ValidationError as exc: if not ( is_recursion_validation_error(exc) and isinstance(children, list) ): raise exc value_without_cyclic_refs = [] for child in children: with suppress_recursion_validation_error(): value_without_cyclic_refs.extend(h([child])) return h(value_without_cyclic_refs) # Create data with cyclic references representing the graph 1 -> 2 -> 3 -> 1 node_data = {'id': 1, 'children': [{'id': 2, 'children': [{'id': 3}]}]} node_data['children'][0]['children'][0]['children'] = [node_data] print(Node.model_validate(node_data)) #> id=1 children=[Node(id=2, children=[Node(id=3, children=[])])] ``` Similarly, if Pydantic encounters a recursive reference during *serialization*, rather than waiting for the maximum recursion depth to be exceeded, a [`ValueError`][] is raised immediately: ```python from pydantic import TypeAdapter # Create data with cyclic references representing the graph 1 -> 2 -> 3 -> 1 node_data = {'id': 1, 'children': [{'id': 2, 'children': [{'id': 3}]}]} node_data['children'][0]['children'][0]['children'] = [node_data] try: # Try serializing the circular reference as JSON TypeAdapter(dict).dump_json(node_data) except ValueError as exc: print(exc) """ Error serializing to JSON: ValueError: Circular reference detected (id repeated) """ ``` This can also be handled if desired: ```python from dataclasses import field from typing import Any from pydantic import ( SerializerFunctionWrapHandler, TypeAdapter, field_serializer, ) from pydantic.dataclasses import dataclass @dataclass class NodeReference: id: int @dataclass class Node(NodeReference): children: list['Node'] = field(default_factory=list) @field_serializer('children', mode='wrap') def serialize( self, children: list['Node'], handler: SerializerFunctionWrapHandler ) -> Any: """ Serialize a list of nodes, handling circular references by excluding the children. """ try: return handler(children) except ValueError as exc: if not str(exc).startswith('Circular reference'): raise exc result = [] for node in children: try: serialized = handler([node]) except ValueError as exc: if not str(exc).startswith('Circular reference'): raise exc result.append({'id': node.id}) else: result.append(serialized) return result # Create a cyclic graph: nodes = [Node(id=1), Node(id=2), Node(id=3)] nodes[0].children.append(nodes[1]) nodes[1].children.append(nodes[2]) nodes[2].children.append(nodes[0]) print(nodes[0]) #> Node(id=1, children=[Node(id=2, children=[Node(id=3, children=[...])])]) # Serialize the cyclic graph: print(TypeAdapter(Node).dump_python(nodes[0])) """ { 'id': 1, 'children': [{'id': 2, 'children': [{'id': 3, 'children': [{'id': 1}]}]}], } """ ``` pydantic-pydantic-e28e879/docs/examples/dynamic_models.md000066400000000000000000000152741526274674700236270ustar00rootroot00000000000000Models can be [created dynamically](../concepts/models.md#dynamic-model-creation) using the [`create_model()`][pydantic.create_model] factory function. In this example, we will show how to dynamically derive a model from an existing one, making every field optional. To achieve this, we will make use of the [`model_fields`][pydantic.main.BaseModel.model_fields] model class attribute, and derive new annotations from the field definitions to be passed to the [`create_model()`][pydantic.create_model] factory. Of course, this example can apply to any use case where you need to derive a new model from another (remove default values, add aliases, etc). === "Python 3.10" ```python {lint="skip" linenums="1"} from typing import Annotated from pydantic import BaseModel, Field, create_model def make_fields_optional(model_cls: type[BaseModel]) -> type[BaseModel]: new_fields = {} for f_name, f_info in model_cls.model_fields.items(): f_dct = f_info.asdict() new_fields[f_name] = ( Annotated[(f_dct['annotation'] | None, *f_dct['metadata'], Field(**f_dct['attributes']))], None, ) return create_model( f'{model_cls.__name__}Optional', __base__=model_cls, # (1)! **new_fields, ) ``` 1. Using the original model as a base will inherit the [validators](../concepts/validators.md), [computed fields](../concepts/fields.md#the-computed_field-decorator), etc. The parent fields are overridden by the ones we define. === "Python 3.11 and above" ```python {lint="skip" requires="3.11" linenums="1"} from typing import Annotated from pydantic import BaseModel, Field, create_model def make_fields_optional(model_cls: type[BaseModel]) -> type[BaseModel]: new_fields = {} for f_name, f_info in model_cls.model_fields.items(): f_dct = f_info.asdict() new_fields[f_name] = ( Annotated[f_dct['annotation'] | None, *f_dct['metadata'], Field(**f_dct['attributes'])], None, ) return create_model( f'{model_cls.__name__}Optional', __base__=model_cls, # (1)! **new_fields, ) ``` 1. Using the original model as a base will inherit the [validators](../concepts/validators.md), [computed fields](../concepts/fields.md#the-computed_field-decorator), etc. The parent fields are overridden by the ones we define. For each field, we generate a dictionary representation of the [`FieldInfo`][pydantic.fields.FieldInfo] instance using the [`asdict()`][pydantic.fields.FieldInfo.asdict] method, containing the annotation, metadata and attributes. With the following model: ```python {lint="skip" test="skip"} class Model(BaseModel): f: Annotated[int, Field(gt=1), WithJsonSchema({'extra': 'data'}), Field(title='F')] = 1 ``` The [`FieldInfo`][pydantic.fields.FieldInfo] instance of `f` will have three items in its dictionary representation: * `annotation`: `int`. * `metadata`: A list containing the type-specific constraints and other metadata: `[Gt(1), WithJsonSchema({'extra': 'data'})]`. * `attributes`: The remaining field-specific attributes: `{'title': 'F'}`. With that in mind, we can recreate an annotation that "simulates" the one from the original model: === "Python 3.10 and above" ```python {lint="skip" test="skip"} new_annotation = Annotated[( f_dct['annotation'] | None, # (1)! *f_dct['metadata'], # (2)! Field(**f_dct['attributes']), # (3)! )] ``` 1. We create a new annotation from the existing one, but adding `None` as an allowed value (in our previous example, this is equivalent to `int | None`). 2. We unpack the metadata to be reused (in our previous example, this is equivalent to specifying `Field(gt=1)` and `WithJsonSchema({'extra': 'data'})` as [`Annotated`][typing.Annotated] metadata). 3. We specify the field-specific attributes by using the [`Field()`][pydantic.Field] function (in our previous example, this is equivalent to `Field(title='F')`). === "Python 3.11 and above" ```python {lint="skip" test="skip"} new_annotation = Annotated[ f_dct['annotation'] | None, # (1)! *f_dct['metadata'], # (2)! Field(**f_dct['attributes']), # (3)! ] ``` 1. We create a new annotation from the existing one, but adding `None` as an allowed value (in our previous example, this is equivalent to `int | None`). 2. We unpack the metadata to be reused (in our previous example, this is equivalent to specifying `Field(gt=1)` and `WithJsonSchema({'extra': 'data'})` as [`Annotated`][typing.Annotated] metadata). 3. We specify the field-specific attributes by using the [`Field()`][pydantic.Field] function (in our previous example, this is equivalent to `Field(title='F')`). and specify `None` as a default value (the second element of the tuple for the field definition accepted by [`create_model()`][pydantic.create_model]). Here is a demonstration of our factory function: ```python {lint="skip" test="skip"} from pydantic import BaseModel, Field class Model(BaseModel): a: Annotated[int, Field(gt=1)] ModelOptional = make_fields_optional(Model) m = ModelOptional() print(m.a) #> None ``` A couple notes on the implementation: * Our `make_fields_optional()` function is defined as returning an arbitrary Pydantic model class (`-> type[BaseModel]`). An alternative solution can be to use a type variable to preserve the input class: === "Python 3.10 and above" ```python {lint="skip" test="skip"} ModelTypeT = TypeVar('ModelTypeT', bound=type[BaseModel]) def make_fields_optional(model_cls: ModelTypeT) -> ModelTypeT: ... ``` === "Python 3.12 and above" ```python {lint="skip" test="skip"} def make_fields_optional[ModelTypeT: type[BaseModel]](model_cls: ModelTypeT) -> ModelTypeT: ... ``` However, note that static type checkers *won't* be able to understand that all fields are now optional. * The [`MISSING` sentinel](../concepts/types.md#missing-sentinel) can be used as an alternative to `None` for the default values. Simply replace `None` by `MISSING` in the new annotation and default value. * You might be tempted to make a copy of the original [`FieldInfo`][pydantic.fields.FieldInfo] instances, add a default and/or perform other mutations, to then reuse it as [`Annotated`][typing.Annotated] metadata. While this may work in some cases, it is **not** a supported pattern, and could break or be deprecated at any point. We strongly encourage using the pattern from this example instead. pydantic-pydantic-e28e879/docs/examples/files.md000066400000000000000000000204441526274674700217350ustar00rootroot00000000000000`pydantic` is a great tool for validating data coming from various sources. In this section, we will look at how to validate data from different types of files. !!! note If you're using any of the below file formats to parse configuration / settings, you might want to consider using the [`pydantic-settings`][pydantic_settings] library, which offers builtin support for parsing this type of data. ## JSON data `.json` files are a common way to store key / value data in a human-readable format. Here is an example of a `.json` file: ```json { "name": "John Doe", "age": 30, "email": "john@example.com" } ``` To validate this data, we can use a `pydantic` model: ```python {test="skip"} import pathlib from pydantic import BaseModel, EmailStr, PositiveInt class Person(BaseModel): name: str age: PositiveInt email: EmailStr json_string = pathlib.Path('person.json').read_text() person = Person.model_validate_json(json_string) print(person) #> name='John Doe' age=30 email='john@example.com' ``` If the data in the file is not valid, `pydantic` will raise a [`ValidationError`][pydantic_core.ValidationError]. Let's say we have the following `.json` file: ```json { "age": -30, "email": "not-an-email-address" } ``` This data is flawed for three reasons: 1. It's missing the `name` field. 2. The `age` field is negative. 3. The `email` field is not a valid email address. When we try to validate this data, `pydantic` raises a [`ValidationError`][pydantic_core.ValidationError] with all of the above issues: ```python {test="skip"} import pathlib from pydantic import BaseModel, EmailStr, PositiveInt, ValidationError class Person(BaseModel): name: str age: PositiveInt email: EmailStr json_string = pathlib.Path('person.json').read_text() try: person = Person.model_validate_json(json_string) except ValidationError as err: print(err) """ 3 validation errors for Person name Field required [type=missing, input_value={'age': -30, 'email': 'not-an-email-address'}, input_type=dict] For further information visit https://errors.pydantic.dev/2/v/missing age Input should be greater than 0 [type=greater_than, input_value=-30, input_type=int] For further information visit https://errors.pydantic.dev/2/v/greater_than email value is not a valid email address: An email address must have an @-sign. [type=value_error, input_value='not-an-email-address', input_type=str] """ ``` Often, it's the case that you have an abundance of a certain type of data within a `.json` file. For example, you might have a list of people: ```json [ { "name": "John Doe", "age": 30, "email": "john@example.com" }, { "name": "Jane Doe", "age": 25, "email": "jane@example.com" } ] ``` In this case, you can validate the data against a `list[Person]` model: ```python {test="skip"} import pathlib from pydantic import BaseModel, EmailStr, PositiveInt, TypeAdapter class Person(BaseModel): name: str age: PositiveInt email: EmailStr person_list_adapter = TypeAdapter(list[Person]) # (1)! json_string = pathlib.Path('people.json').read_text() people = person_list_adapter.validate_json(json_string) print(people) #> [Person(name='John Doe', age=30, email='john@example.com'), Person(name='Jane Doe', age=25, email='jane@example.com')] ``` 1. We use [`TypeAdapter`][pydantic.type_adapter.TypeAdapter] to validate a list of `Person` objects. [`TypeAdapter`][pydantic.type_adapter.TypeAdapter] is a Pydantic construct used to validate data against a single type. With two records, spotting a bad one is easy. In a pipeline processing files with thousands of records, the error's `loc` gives you the index of the failing one, and if the pipeline runs unattended, [Logfire](../errors/troubleshooting.md) records failed validations with their field locations and rejected values, so you can find the offending record after the run. ## JSON lines files Similar to validating a list of objects from a `.json` file, you can validate a list of objects from a `.jsonl` file. `.jsonl` files are a sequence of JSON objects separated by newlines. Consider the following `.jsonl` file: ```json {"name": "John Doe", "age": 30, "email": "john@example.com"} {"name": "Jane Doe", "age": 25, "email": "jane@example.com"} ``` We can validate this data with a similar approach to the one we used for `.json` files: ```python {test="skip"} import pathlib from pydantic import BaseModel, EmailStr, PositiveInt class Person(BaseModel): name: str age: PositiveInt email: EmailStr json_lines = pathlib.Path('people.jsonl').read_text().splitlines() people = [Person.model_validate_json(line) for line in json_lines] print(people) #> [Person(name='John Doe', age=30, email='john@example.com'), Person(name='Jane Doe', age=25, email='jane@example.com')] ``` ## CSV files CSV is one of the most common file formats for storing tabular data. To validate data from a CSV file, you can use the `csv` module from the Python standard library to load the data and validate it against a Pydantic model. Consider the following CSV file: ```csv name,age,email John Doe,30,john@example.com Jane Doe,25,jane@example.com ``` Here's how we validate that data: ```python {test="skip"} import csv from pydantic import BaseModel, EmailStr, PositiveInt class Person(BaseModel): name: str age: PositiveInt email: EmailStr with open('people.csv') as f: reader = csv.DictReader(f) people = [Person.model_validate(row) for row in reader] print(people) #> [Person(name='John Doe', age=30, email='john@example.com'), Person(name='Jane Doe', age=25, email='jane@example.com')] ``` ## TOML files TOML files are often used for configuration due to their simplicity and readability. Consider the following TOML file: ```toml name = "John Doe" age = 30 email = "john@example.com" ``` Here's how we validate that data: ```python {test="skip"} import tomllib from pydantic import BaseModel, EmailStr, PositiveInt class Person(BaseModel): name: str age: PositiveInt email: EmailStr with open('person.toml', 'rb') as f: data = tomllib.load(f) person = Person.model_validate(data) print(person) #> name='John Doe' age=30 email='john@example.com' ``` ## YAML files YAML (YAML Ain't Markup Language) is a human-readable data serialization format that is often used for configuration files. Consider the following YAML file: ```yaml name: John Doe age: 30 email: john@example.com ``` Here's how we validate that data using [PyYAML](https://pypi.org/project/PyYAML/): ```python {test="skip"} import yaml from pydantic import BaseModel, EmailStr, PositiveInt class Person(BaseModel): name: str age: PositiveInt email: EmailStr with open('person.yaml') as f: data = yaml.safe_load(f) person = Person.model_validate(data) print(person) #> name='John Doe' age=30 email='john@example.com' ``` ## XML files XML (eXtensible Markup Language) is a markup language that defines a set of rules for encoding documents in a format that is both human-readable and machine-readable. Consider the following XML file: ```xml John Doe 30 john@example.com ``` Here's how we validate that data: ```python {test="skip"} import xml.etree.ElementTree as ET from pydantic import BaseModel, EmailStr, PositiveInt class Person(BaseModel): name: str age: PositiveInt email: EmailStr tree = ET.parse('person.xml').getroot() data = {child.tag: child.text for child in tree} person = Person.model_validate(data) print(person) #> name='John Doe' age=30 email='john@example.com' ``` ## INI files INI files are a simple configuration file format that uses sections and key-value pairs. They are commonly used in Windows applications and older software. Consider the following INI file: ```ini [PERSON] name = John Doe age = 30 email = john@example.com ``` Here's how we validate that data: ```python {test="skip"} import configparser from pydantic import BaseModel, EmailStr, PositiveInt class Person(BaseModel): name: str age: PositiveInt email: EmailStr config = configparser.ConfigParser() config.read('person.ini') person = Person.model_validate(config['PERSON']) print(person) #> name='John Doe' age=30 email='john@example.com' ``` pydantic-pydantic-e28e879/docs/examples/orms.md000066400000000000000000000045061526274674700216140ustar00rootroot00000000000000Pydantic serves as a great tool for defining models for ORM (object relational mapping) libraries. ORMs are used to map objects to database tables, and vice versa. ## SQLAlchemy Pydantic can pair with SQLAlchemy, as it can be used to define the schema of the database models. !!! warning "Code Duplication" If you use Pydantic with SQLAlchemy, you might experience some frustration with code duplication. If you find yourself experiencing this difficulty, you might also consider [`SQLModel`](https://sqlmodel.tiangolo.com/) which integrates Pydantic with SQLAlchemy such that much of the code duplication is eliminated. If you'd prefer to use pure Pydantic with SQLAlchemy, we recommend using Pydantic models alongside of SQLAlchemy models as shown in the example below. In this case, we take advantage of Pydantic's aliases feature to name a `Column` after a reserved SQLAlchemy field, thus avoiding conflicts. ```python import sqlalchemy as sa from sqlalchemy.orm import declarative_base from pydantic import BaseModel, ConfigDict, Field class MyModel(BaseModel): model_config = ConfigDict(from_attributes=True) metadata: dict[str, str] = Field(alias='metadata_') Base = declarative_base() class MyTableModel(Base): __tablename__ = 'my_table' id = sa.Column('id', sa.Integer, primary_key=True) # 'metadata' is reserved by SQLAlchemy, hence the '_' metadata_ = sa.Column('metadata', sa.JSON) sql_model = MyTableModel(metadata_={'key': 'val'}, id=1) pydantic_model = MyModel.model_validate(sql_model) print(pydantic_model.model_dump()) #> {'metadata': {'key': 'val'}} print(pydantic_model.model_dump(by_alias=True)) #> {'metadata_': {'key': 'val'}} ``` !!! note The example above works because aliases have priority over field names for field population. Accessing `SQLModel`'s `metadata` attribute would lead to a `ValidationError`. Validating ORM objects can surface a less obvious class of failure: rows written before a constraint was added, or columns that allow `NULL` where your model doesn't. These only fail when the offending row is actually read, which may be long after a deploy, and [recording failed validations](../errors/troubleshooting.md) retains their structured errors and rejected values, which can help identify the offending data. pydantic-pydantic-e28e879/docs/examples/pydantic_ai.md000066400000000000000000000034161526274674700231170ustar00rootroot00000000000000[Pydantic AI](https://pydantic.dev/docs/ai/overview/) is a Python agent framework built by the Pydantic team that uses Pydantic validation for [structured output](https://pydantic.dev/docs/ai/core-concepts/output/#structured-output) schema generation and validation. By specifying an `output_type` on an Agent, you can constrain the LLM to return data that matches your Pydantic model schema. ## LLM Structured Output ```python {test="skip"} from pydantic_ai import Agent from pydantic import BaseModel, Field, ValidationInfo, field_validator class City(BaseModel): name: str country: str population: int = Field(description='Estimated population', gt=0) @field_validator('country') @classmethod def country_must_be_valid(cls, v: str, info: ValidationInfo) -> str: valid_countries: list[str] = info.context or [] if v not in valid_countries: raise ValueError(f'Unknown country: {v!r}') return v agent = Agent( 'openai:gpt-5-mini', output_type=list[City], # Pydantic validation context (not sent to the model) validation_context=['Japan', 'United States', 'Germany'], ) result = agent.run_sync('List the 3 largest cities in Japan') print(result.output) #> [City(name='Tokyo', country='Japan', population=13960000), ...] ``` When validation fails (say the model returns a country your validator rejects), Pydantic AI feeds the validation errors back to the model and asks it to retry. To see this happening in a real application, instrument it with [Logfire](../integrations/logfire.md), which records [Pydantic AI](https://pydantic.dev/docs/ai/integrations/logfire/) runs and the validations inside them: each agent run shows the output the model produced, the errors your validators raised, and the retry that followed. pydantic-pydantic-e28e879/docs/examples/queues.md000066400000000000000000000145361526274674700221470ustar00rootroot00000000000000Pydantic is quite helpful for validating data that goes into and comes out of queues. Below, we'll explore how to validate / serialize data with various queue systems. ## Redis queue Redis is a popular in-memory data structure store. In order to run this example locally, you'll first need to [install Redis](https://redis.io/docs/latest/operate/oss_and_stack/install/install-redis/) and start your server up locally. Here's a simple example of how you can use Pydantic to: 1. Serialize data to push to the queue 2. Deserialize and validate data when it's popped from the queue ```python {test="skip"} import redis from pydantic import BaseModel, EmailStr class User(BaseModel): id: int name: str email: EmailStr r = redis.Redis(host='localhost', port=6379, db=0) QUEUE_NAME = 'user_queue' def push_to_queue(user_data: User) -> None: serialized_data = user_data.model_dump_json() r.rpush(QUEUE_NAME, serialized_data) print(f'Added to queue: {serialized_data}') user1 = User(id=1, name='John Doe', email='john@example.com') user2 = User(id=2, name='Jane Doe', email='jane@example.com') push_to_queue(user1) #> Added to queue: {"id":1,"name":"John Doe","email":"john@example.com"} push_to_queue(user2) #> Added to queue: {"id":2,"name":"Jane Doe","email":"jane@example.com"} def pop_from_queue() -> None: data = r.lpop(QUEUE_NAME) if data: user = User.model_validate_json(data) print(f'Validated user: {repr(user)}') else: print('Queue is empty') pop_from_queue() #> Validated user: User(id=1, name='John Doe', email='john@example.com') pop_from_queue() #> Validated user: User(id=2, name='Jane Doe', email='jane@example.com') pop_from_queue() #> Queue is empty ``` ## RabbitMQ RabbitMQ is a popular message broker that implements the AMQP protocol. In order to run this example locally, you'll first need to [install RabbitMQ](https://www.rabbitmq.com/download.html) and start your server. Here's a simple example of how you can use Pydantic to: 1. Serialize data to push to the queue 2. Deserialize and validate data when it's popped from the queue First, let's create a sender script. ```python {test="skip"} import pika from pydantic import BaseModel, EmailStr class User(BaseModel): id: int name: str email: EmailStr connection = pika.BlockingConnection(pika.ConnectionParameters('localhost')) channel = connection.channel() QUEUE_NAME = 'user_queue' channel.queue_declare(queue=QUEUE_NAME) def push_to_queue(user_data: User) -> None: serialized_data = user_data.model_dump_json() channel.basic_publish( exchange='', routing_key=QUEUE_NAME, body=serialized_data, ) print(f'Added to queue: {serialized_data}') user1 = User(id=1, name='John Doe', email='john@example.com') user2 = User(id=2, name='Jane Doe', email='jane@example.com') push_to_queue(user1) #> Added to queue: {"id":1,"name":"John Doe","email":"john@example.com"} push_to_queue(user2) #> Added to queue: {"id":2,"name":"Jane Doe","email":"jane@example.com"} connection.close() ``` And here's the receiver script. ```python {test="skip"} import pika from pydantic import BaseModel, EmailStr class User(BaseModel): id: int name: str email: EmailStr def main(): connection = pika.BlockingConnection(pika.ConnectionParameters('localhost')) channel = connection.channel() QUEUE_NAME = 'user_queue' channel.queue_declare(queue=QUEUE_NAME) def process_message( ch: pika.channel.Channel, method: pika.spec.Basic.Deliver, properties: pika.spec.BasicProperties, body: bytes, ): user = User.model_validate_json(body) print(f'Validated user: {repr(user)}') ch.basic_ack(delivery_tag=method.delivery_tag) channel.basic_consume(queue=QUEUE_NAME, on_message_callback=process_message) channel.start_consuming() if __name__ == '__main__': try: main() except KeyboardInterrupt: pass ``` To test this example: 1. Run the receiver script in one terminal to start the consumer. 2. Run the sender script in another terminal to send messages. One thing to keep in mind with consumers like this: if `model_validate_json` raises a [`ValidationError`][pydantic_core.ValidationError], the message that caused it may no longer be on the queue by the time you investigate, making the failure hard to reproduce. It's worth recording failed validations as they happen, for example with [Logfire](../errors/troubleshooting.md), which captures their field locations and rejected values in structured errors: ```python {test="skip"} import logfire logfire.configure() logfire.instrument_pydantic(record='failure') ``` ## ARQ ARQ is a fast Redis-based job queue for Python. It's built on top of Redis and provides a simple way to handle background tasks. In order to run this example locally, you’ll need to [Install Redis](https://redis.io/docs/latest/operate/oss_and_stack/install/install-redis/) and start your server. Here's a simple example of how you can use Pydantic with ARQ to: 1. Define a model for your job data 2. Serialize data when enqueueing jobs 3. Validate and deserialize data when processing jobs ```python {test="skip"} import asyncio from typing import Any from arq import create_pool from arq.connections import RedisSettings from pydantic import BaseModel, EmailStr class User(BaseModel): id: int name: str email: EmailStr REDIS_SETTINGS = RedisSettings() async def process_user(ctx: dict[str, Any], user_data: dict[str, Any]) -> None: user = User.model_validate(user_data) print(f'Processing user: {repr(user)}') async def enqueue_jobs(redis): user1 = User(id=1, name='John Doe', email='john@example.com') user2 = User(id=2, name='Jane Doe', email='jane@example.com') await redis.enqueue_job('process_user', user1.model_dump()) print(f'Enqueued user: {repr(user1)}') await redis.enqueue_job('process_user', user2.model_dump()) print(f'Enqueued user: {repr(user2)}') class WorkerSettings: functions = [process_user] redis_settings = REDIS_SETTINGS async def main(): redis = await create_pool(REDIS_SETTINGS) await enqueue_jobs(redis) if __name__ == '__main__': asyncio.run(main()) ``` This script is complete. It should run "as is" both to enqueue jobs and to process them. pydantic-pydantic-e28e879/docs/examples/requests.md000066400000000000000000000044461526274674700225120ustar00rootroot00000000000000Pydantic models are a great way to validate and serialize data for requests and responses. Pydantic is instrumental in many web frameworks and libraries, such as FastAPI, Django, Flask, and HTTPX. ## `httpx` requests [`httpx`](https://www.python-httpx.org/) is an HTTP client for Python 3 with synchronous and asynchronous APIs. In the below example, we query the [JSONPlaceholder API](https://jsonplaceholder.typicode.com/) to get a user's data and validate it with a Pydantic model. ```python {test="skip"} import httpx from pydantic import BaseModel, EmailStr class User(BaseModel): id: int name: str email: EmailStr url = 'https://jsonplaceholder.typicode.com/users/1' response = httpx.get(url) response.raise_for_status() user = User.model_validate(response.json()) print(repr(user)) #> User(id=1, name='Leanne Graham', email='Sincere@april.biz') ``` The [`TypeAdapter`][pydantic.type_adapter.TypeAdapter] tool from Pydantic often comes in quite handy when working with HTTP requests. Consider a similar example where we are validating a list of users: ```python {test="skip"} from pprint import pprint import httpx from pydantic import BaseModel, EmailStr, TypeAdapter class User(BaseModel): id: int name: str email: EmailStr url = 'https://jsonplaceholder.typicode.com/users/' # (1)! response = httpx.get(url) response.raise_for_status() users_list_adapter = TypeAdapter(list[User]) users = users_list_adapter.validate_python(response.json()) pprint([u.name for u in users]) """ ['Leanne Graham', 'Ervin Howell', 'Clementine Bauch', 'Patricia Lebsack', 'Chelsey Dietrich', 'Mrs. Dennis Schulist', 'Kurtis Weissnat', 'Nicholas Runolfsdottir V', 'Glenna Reichert', 'Clementina DuBuque'] """ ``` 1. Note, we're querying the `/users/` endpoint here to get a list of users. When you validate responses like this, a [`ValidationError`][pydantic_core.ValidationError] is often the first sign that an API you depend on has changed its response format. The useful questions at that point are *what did the response actually contain*, and *when did this start*: [recording failed validations with Logfire](../errors/troubleshooting.md) answers both, since each failure is stored with its structured errors and rejected values. pydantic-pydantic-e28e879/docs/extra/000077500000000000000000000000001526274674700176125ustar00rootroot00000000000000pydantic-pydantic-e28e879/docs/extra/algolia.js000066400000000000000000000067021526274674700215650ustar00rootroot00000000000000const ALGOLIA_APP_ID = 'KPPUDTIAVX'; const ALGOLIA_API_KEY = '1fc841595212a2c3afe8c24dd4cb8790'; const ALGOLIA_INDEX_NAME = 'pydantic-docs'; const { liteClient: algoliasearch } = window['algoliasearch/lite']; const searchClient = algoliasearch(ALGOLIA_APP_ID, ALGOLIA_API_KEY); const search = instantsearch({ indexName: ALGOLIA_INDEX_NAME, searchClient, searchFunction(helper) { const query = helper.state.query if (query && query.length > 1) { document.querySelector('#hits').hidden = false document.querySelector('#type-to-start-searching').hidden = true helper.search(); } else { document.querySelector('#hits').hidden = true document.querySelector('#type-to-start-searching').hidden = false } }, }); // create custom widget, to integrate with MkDocs built-in markup const customSearchBox = instantsearch.connectors.connectSearchBox((renderOptions, isFirstRender) => { const { query, refine, clear } = renderOptions; if (isFirstRender) { document.querySelector('#searchbox').addEventListener('input', event => { refine(event.target.value); }); document.querySelector('#searchbox').addEventListener('focus', () => { document.querySelector('#__search').checked = true; }); document.querySelector('#searchbox-clear').addEventListener('click', () => { clear(); }); document.querySelector('#searchbox').addEventListener('keydown', (event) => { // on down arrow, find the first search result and focus it if (event.key === 'ArrowDown') { document.querySelector('.md-search-result__link').focus(); event.preventDefault(); } }); // for Hits, add keyboard navigation document.querySelector('#hits').addEventListener('keydown', (event) => { if (event.key === 'ArrowDown') { const next = event.target.parentElement.nextElementSibling; if (next) { next.querySelector('.md-search-result__link').focus(); event.preventDefault(); } } else if (event.key === 'ArrowUp') { const prev = event.target.parentElement.previousElementSibling; if (prev) { prev.querySelector('.md-search-result__link').focus(); } else { document.querySelector('#searchbox').focus(); } event.preventDefault(); } }) document.addEventListener('keydown', (event) => { // if forward slash is pressed, focus the search box if (event.key === '/' && event.target.tagName !== 'INPUT') { document.querySelector('#searchbox').focus(); event.preventDefault(); } }) } document.querySelector('#type-to-start-searching').hidden = query.length > 1; document.querySelector('#searchbox').value = query; }); search.addWidgets([ customSearchBox({}), instantsearch.widgets.hits({ container: '#hits', cssClasses: { 'list': 'md-search-result__list', 'item': 'md-search-result__item' }, templates: { item: (hit, { html, components }) => { return html`

${components.Highlight({ attribute: 'title', hit })}

${components.Snippet({ attribute: 'content', hit })}
` }, }, }) ]); search.start(); pydantic-pydantic-e28e879/docs/extra/feedback.js000066400000000000000000000007731526274674700217030ustar00rootroot00000000000000var feedback = document.forms.feedback feedback.hidden = false feedback.addEventListener("submit", function(ev) { ev.preventDefault() var data = ev.submitter.getAttribute("data-md-value") feedback.firstElementChild.disabled = true var note = feedback.querySelector( `.md-feedback__note [data-md-value='${data}']` ) if (note) note.hidden = false if (data == 1) { window.flarelytics_event('thumbsUp'); } else if (data == 0) { window.flarelytics_event('thumbsDown'); } }) pydantic-pydantic-e28e879/docs/extra/fluff.js000066400000000000000000000042651526274674700212610ustar00rootroot00000000000000// set the download count in the "why pydantic" page (async function() { const downloadCount = document.getElementById('download-count'); if (downloadCount) { const r = await fetch('https://errors.pydantic.dev/download-count.txt'); if (r.status === 200) { downloadCount.innerText = await r.text(); } } })(); // update the announcement banner to change the app type (function() { const el = document.getElementById('logfire-app-type'); const appTypes = [ ['/integrations/pydantic/', 'Pydantic validations.'], ['/integrations/fastapi/', 'FastAPI app.'], ['/integrations/openai/', 'OpenAI integration.'], ['/integrations/asyncpg/', 'Postgres queries.'], ['/integrations/redis/', 'task queue.'], ['/integrations/system-metrics/', 'system metrics.'], ['/integrations/httpx/', 'API calls.'], ['/integrations/logging/', 'std lib logging.'], ['/integrations/django/', 'Django app.'], ['/integrations/anthropic/', 'Anthropic API calls.'], ['/integrations/flask/', 'Flask app.'], ['/integrations/mysql/', 'MySQL queries.'], ['/integrations/sqlalchemy/', 'SQLAlchemy queries.'], ['/integrations/structlog/', 'Structlog logs.'], ['/integrations/stripe/', 'Stripe API calls.'], ]; const docsUrl = 'https://logfire.pydantic.dev/docs'; let counter = 0; const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms)); // avoid multiple replaceText running at the same time (e.g. when the user has left the page) let running = false; const replaceText = async () => { if (running) { return; } running = true; try { const text = el.textContent; for (let i = text.length; i >= 0; i--) { el.textContent = text.slice(0, i); await sleep(30); } await sleep(30); counter++; // change the link halfway through the animation const [link, newText] = appTypes[counter % appTypes.length]; el.href = docsUrl + link; await sleep(30); for (let i = 0; i <= newText.length; i++) { el.textContent = newText.slice(0, i); await sleep(30); } } finally { running = false; } }; setInterval(replaceText, 4000); })(); pydantic-pydantic-e28e879/docs/extra/mathjax.js000066400000000000000000000006001526274674700216000ustar00rootroot00000000000000window.MathJax = { tex: { inlineMath: [["\\(", "\\)"]], displayMath: [["\\[", "\\]"]], processEscapes: true, processEnvironments: true }, options: { ignoreHtmlClass: ".*|", processHtmlClass: "arithmatex" } }; document$.subscribe(() => { MathJax.startup.output.clearCache() MathJax.typesetClear() MathJax.texReset() MathJax.typesetPromise() }) pydantic-pydantic-e28e879/docs/extra/terminal.css000066400000000000000000000010231526274674700221330ustar00rootroot00000000000000.terminal { background: #300a24; border-radius: 4px; padding: 5px 10px; } pre.terminal-content { display: inline-block; line-height: 1.3 !important; white-space: pre-wrap; word-wrap: break-word; background: #300a24 !important; color: #d0d0d0 !important; } .ansi2 { font-weight: lighter; } .ansi3 { font-style: italic; } .ansi32 { color: #00aa00; } .ansi34 { color: #5656fe; } .ansi35 { color: #E850A8; } .ansi38-1 { color: #cf0000; } .ansi38-5 { color: #E850A8; } .ansi38-68 { color: #2a54a8; } pydantic-pydantic-e28e879/docs/extra/tweaks.css000066400000000000000000000120771526274674700216310ustar00rootroot00000000000000.sponsors { display: flex; justify-content: center; flex-wrap: wrap; align-items: center; margin: 1rem 0; } .sponsors > div { text-align: center; width: 33%; padding-bottom: 20px; } .sponsors span { display: block; } @media screen and (max-width: 599px) { .sponsors span { display: none; } } .sponsors img { width: 65%; border-radius: 5px; } /*blog post*/ aside.blog { display: flex; align-items: center; } aside.blog img { width: 50px; height: 50px; border-radius: 25px; margin-right: 20px; } /* Define the company grid layout */ #grid-container { width: 100%; text-align: center; } #company-grid { display: inline-block; margin: 0 auto; gap: 10px; align-content: center; justify-content: center; grid-auto-flow: column; } [data-md-color-scheme="slate"] #company-grid { background-color: #ffffff; border-radius: .5rem; color: black; } .tile { display: flex; text-align: center; width: 120px; height: 120px; display: inline-block; margin: 10px; padding: 5px; border-radius: .5rem; } .tile img { width: 100px; } .md-typeset__table > table { max-height: 60vh; } .md-typeset__table > table thead { position: sticky; top: 0; background-color: var(--md-default-bg-color); } .md-typeset__table > table th { border-bottom: .05rem solid var(--md-typeset-table-color); } .md-typeset__table > table tr:first-child td { border-top: none; } /* API documentation link admonition */ :root { --md-admonition-icon--api: url('data:image/svg+xml;charset=utf-8,') } .md-typeset .admonition.api, .md-typeset details.api { border-color: #448aff; } .md-typeset .api > .admonition-title, .md-typeset .api > summary { background-color: #448aff1a; } .md-typeset .api > .admonition-title::before, .md-typeset .api > summary::before { background-color: #448aff; -webkit-mask-image: var(--md-admonition-icon--api); mask-image: var(--md-admonition-icon--api); } /* Logfire link admonition */ :root { --md-admonition-icon--logfire: url('data:image/svg+xml;utf8,'); } .md-typeset .admonition.logfire, .md-typeset details.logfire { border-color: #e620e9; } .md-typeset .logfire > .admonition-title, .md-typeset .logfire > summary { background-color: #e620e91a; } .md-typeset .logfire > .admonition-title::before, .md-typeset .logfire > summary::before { background-color: #e620e9; -webkit-mask-image: var(--md-admonition-icon--logfire); mask-image: var(--md-admonition-icon--logfire); } /* Hide the run button in logfire admonitions */ .admonition.logfire .run-code-btn { display: none; } /* add border to screenshots in the logfire admonitions `img[src*="logfire"]` to differentiate from emojis */ .admonition.logfire img[src*="logfire"] { border: 1px solid #448aff; border-radius: 0.2rem; padding: 0.2rem; } /* banner slightly larger */ .md-banner__inner { font-size: 0.8rem; margin: 0.3rem auto; } /* Revert hue value to that of pre mkdocs-material v9.4.0 */ [data-md-color-scheme="slate"] { --md-hue: 230; --md-default-bg-color: hsla(230, 15%, 21%, 1); } /* Add customization for pydantic people page */ .user-list { display: flex; flex-wrap: wrap; margin-bottom: 2rem; } .user-list-center { justify-content: space-evenly; } .user { margin: 1em; min-width: 7em; } .user .avatar-wrapper { width: 80px; height: 80px; margin: 10px auto; overflow: hidden; border-radius: 50%; position: relative; } .user .avatar-wrapper img { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); } .user .title { text-align: center; } .user .count { font-size: 80%; text-align: center; } /** Algolia search module */ .md-search__input::-webkit-search-decoration, .md-search__input::-webkit-search-cancel-button, .md-search__input::-webkit-search-results-button, .md-search__input::-webkit-search-results-decoration { -webkit-appearance:none; } .md-search-result__article { padding-bottom: .55em; } .ais-SearchBox-form { display: flex; flex-direction: row; gap: 10px; } .md-search-result mark.ais-Highlight-highlighted, .md-search-result mark.ais-Snippet-highlighted { color: var(--md-primary-fg-color); } pydantic-pydantic-e28e879/docs/favicon.png000066400000000000000000000015541526274674700206270ustar00rootroot00000000000000‰PNG  IHDR szzô pHYs��R}2ãIDATX…íWKhQÿâ¢~PTlsßÄ hUD‘ºPW.Ôâ² ‹K)(¸RÔ•]èÆ•îE¥‹ºPD¤Dˆµ¶4Í}so:ô£hëwäNæ×dÒ&iš…xáÁdæÍ9çݹ÷¼ÃøU†Né ô�{åÚ¨g8†³H?ÒŠ¨è©Ü«›TÜá“"L>_rJÒN­x*¿r~�ŠÓžˆ)y¶ äC0´R¿s �§Gﲚ¬f­ø[ h3®Z0¨øNøÝ¹#î“ ¢Û B®!w ý‰+º˜¢ð�kÅmC0¾�_{‚f�öUEn§ìT4YM/}.4 "CúâÚsX�‚U±¾_’H ¨;üMÝ~‘Æ‹âû‘kÅgc€lI½|§ÅY&©õŸe¼_ “|@Ý »!2L:S97ñVšŒ¬´K«\«tCt^¡€âÎɵºb‚ö¥IÁž•Ü1œ¥Zñ« € €Ë0#›¦Þã²lßÒ=%hE×´ѥÙÄ–+ÀýÁ½ZbR®ýòŠêÅ\&R‰ù$¨ø™ofÙš1a81±V{ ǵÒ0`¥$FRv£²Ç‘ëWü0SÖ©¹Àª �@'#þðÄÝÐ4P{¤]î–T­ áˆøG»ÈÛˆ9X<À�KŽ­®•ÁLÁö/Þ™"mÈT¤cÜnZüÝ>'5R©yGÞu÷àébcsͪ-4ŽÄh _Ñ@‹¬Ôíz‰Š.0ð¦R2�™uê‘~/^eÄœ²&ωM—†¥¬½tƋូåÀ]r/hãóyP¶qÁ¬êèn5YÍnf}˜k'Œ’Š@ÙjúÁ ÅôÅ�~òI�z„½_”!×u!5þÅø Bð¹ÓèäÊIEND®B`‚pydantic-pydantic-e28e879/docs/help_with_pydantic.md000066400000000000000000000026261526274674700226750ustar00rootroot00000000000000# Getting help with Pydantic If you need help getting started with Pydantic or with advanced usage, the following sources may be useful. ## :simple-slack: Slack The [Pydantic Logfire Slack](https://pydantic.dev/docs/logfire/join-slack/) is a great place to ask questions, and get help and chat about Pydantic and the other Pydantic products ([Pydantic AI](https://pydantic.dev/pydantic-ai), [Logfire](https://pydantic.dev/logfire)). ## :material-help: Usage Documentation The [usage documentation](concepts/models.md) is the most complete guide on how to use Pydantic. ## :material-api: API Documentation The [API documentation](api/base_model.md) gives reference docs for all public Pydantic APIs. ## :simple-github: GitHub Discussions [GitHub discussions](https://github.com/pydantic/pydantic/discussions) are useful for asking questions, your question and the answer will help everyone. ## :simple-stackoverflow: Stack Overflow Use the [`pydantic`](https://stackoverflow.com/questions/tagged/pydantic) tag on Stack Overflow to ask questions; note that this is not always monitored by the core Pydantic team. ## :simple-youtube: YouTube Youtube has lots of useful [videos on Pydantic](https://www.youtube.com/results?search_query=pydantic). In particular Marcelo Trylesinski's video ["Pydantic V1 to V2 - The Migration"](https://youtu.be/sD_xpYl4fPU) has helped people a lot when migrating from Pydantic V1 to V2. pydantic-pydantic-e28e879/docs/img/000077500000000000000000000000001526274674700172435ustar00rootroot00000000000000pydantic-pydantic-e28e879/docs/img/basic_logfire.png000066400000000000000000002062211526274674700225440ustar00rootroot00000000000000‰PNG  IHDR Èd 9íPLTE""":::HHH***7BV3AU8ARÉÉÉÿÿÿ111Teãããsss6^w@AB‘‘‘qqqˆˆˆ===ÈÈÈ$$$ÆÆÇ&&&,+3czUUU???kkkœÜþΑxEEEv}…(((222444ÔÔÔIII888ÂÂÂddd-..RSSPPPLLL„„„///ggg»»»]]]´´´���‰‰‰XXXCCCuuu[[[†††ÀÀÁaaa___fff666iiiŽŽŽ™™™¤¤¤¼½¿¶¶¶ZZZ…�ýýýûûûÅÅŪÃì|||OOOZcq¦©®,,,8DW~~~¬¬¬WWW;FZÄÄĦ¦¦ccc¿¿¿ÞÞÞ½½½nu‚¸¸¸áááÚÚÚKKKooo>I\���¨¨¨mmmÎÎα±±zzz”””"(*“˜Ÿdu‹œœœISennnÑÑÑfmz®®®BBB‹‹‹KVfks~AAAìììæææ™�¤­¯³’’’{‚ŒNXhppp^guM\"AKðððwwwÖÖÖ‚‡‘"5;hp|GGGAL^žžžU_nNNNCN`¸º¼ry…R\k±³¶¢¢¢¢¥«øøøx~‰‘–žFQbªªª´µ¸Ž“›,18ôôô±²³ £ªª¬°ˆ�–öööééé–š¢4BV…‹”¶Ô‹�™t�òòò   ?NWpw‚ž¡¨———z{|ËËË›Ÿ¦‘ËêŒÃḃm›››¶·ºÁ‰qckx1+)¡¡¡‚´Ï06=«««˜˜˜šÙú•Òñ£££bKBÈŽt–––…cTZF>ŠeV7ATB72(+-;HPààà¨yeDU^K<6hŒ¥n’« sa±~i%@FvŸ¶`iwmRGˆ¼ÙuXK91-Xu„~®Ç]beW[^z¦¾M[i9CJ~^P39E4=A\zŠ‘iYTm{Pgse‡š`€‘Ht�˜n\>h‚S|–SA:‚ Ã7>MLal5?Fp™®4;@4Rd\ž£¼å‡¤ÇÀÚà5\sŽ«Ð8`yó<| LIDATxÚìÙ± Ã0 AC —šÓ3rµéÒÉiEàn‹Ç_€f„ ÐŽ�Ú2@;BhGÈí !´#d€v„ ÐŽ�Ú2@;¿�©OâYÿB&à0ù2wĬUÀjÕŒ¸ßB&cÔº²jDîC¦"Ê�SQÛ�ɘ~ pœ5#·!3Â�¾ìÙ1 À0ÁH#„�ÑDÒ�]ÿI3,V 0ÐÎ{ ™CèË:†L`¢�\BæHÈu„ PGÈu„ PGÈu„ Pçg×îUۆ ¸^RÈàOƒ"0¶c×é©”ÅNJþºhJÁ”�¡C(%Ý]L¡Ð¥K†ÜD¯ÀW�^A/ªÒ‘]ÛÄ&v�넾Ϣs·@Òö‚!`AjŸ>\ìÜ|õ�E@åÅ땾ó!³(hJßa·áJ&ö­ÿì‹o÷Çʰõƒe…Œtd'.É|òÞÑêÞÁuÝ•žri¿pÙì¸ýyoÈ]â8/³:Të£ôTUÕ‘Ì7µÎdH{`œÜy¯_¶vž¼É–?—2Ou`_&ð´!s1�f y±Ú{j�¸b…ªu¹‹êc™‘ÕT(=Å@Ÿ·%¦“ÂhÈ8úJŒQ³ñ²uR–”¼M·Ë ™Èës2-ÕÕGõúõQ ÝŠ$6ºzê9�f ï‹ ™œF2ª¼–—a>!L#—vÌú¶ +‰›%…LW2‘úbUOƒ–$¶õ4Ì"Nk ™ŽFr !Ì.ý¯ì³Œ0¿’³Ý{2Ûó…̆j®¿´¹RŒ´$V¬…©C&ÿ/B¦DÈãìf3ªõ%9­Ý‡�©›–„±¿é…’ªcâHW�Õ–ŒãmnzNcG5ש™wr›£ʰ+�ŠbUU+Ó„Ì3cÌ¥jÓ¤ZµáŸµ\ïØ$4ÜR2ÖÚ„�)'3ï»Fƪ�{ÕŠ±Ê"ÇWéøÍÞý´6 Çqÿ²õ¡‡~j¤…ÒÖ?ɺtθv¡[ëE*HþAÄ^D°„]êAdÁ‹OÀ=o>0ù­]R—hW­ZúyF›¦[¾Ç7¿ý"""¢UQûlä”m2Wÿ‡�±ñ¬èAñ>è‚@lUšc%n v$k¡œV§‡Åópq–� ‘P–ˆ¹ ­àJªž‰R€¶Ÿ25$m¤�Z�æÞ>€rNˆˆˆˆˆVÅuU,ÛrÚ‹hIæ¿™Â`{¸¶y¯©Wd”ÂÔŠŒ9Bÿb­¶¢mNVdYGóù²œfúU%a+މ6f]‘±§Wd^Âß(v×Ûðݳ¬Èd†Lµ¡8ñŠÌéQõŠÌ]À݇ŸÏç]!""""Z ㊤èª�ùò_„ J¢TCì¥ï‘Ù@[gI®/´|ÀÑ Ç• ‡@h¯Y2QÀvürw¾=2CøÇYÕCç,{dv±?Ë™ìQ]`3ß""""¢UrQõJOÒ¼2Œ÷ÿ"d¢+Š�Á¤hò©!SõÐm~2�#Ù6(ƒ½’)‘veìûó…Ì�EsƒàÜB&sTh[BDDDD´R*dª’æ@}rîŸ>óÒx�Œhø©!ß ¸ 4'!£_f«ÙùJ[O&C¦7OÈ$ß °¾€�ÉÕÖ…ˆˆˆˆhµ<Õ[ýÓ´TÈlÈÏØå¡ŒY÷�ªŒ Ëöï„Lß�0§B¦ˆ 5d61ªŒ¯ãû�É/˜µ‹[€]v;2�¹Bæ`Æ)²€�ÉÕêBDDDD´Zžë-2iª*dö%›{O�ðM´ûo ã�#Ú7uøžûGöÈÌ2»HØŒ÷ÈÈ Švô>ýŽŒµ±3WÈTâ«Û‚³€�Éո˟ˆˆˆˆVÍÕì»,« )K¶;FDŸa½1”7–(e#rçï…Ì]´['šg qPÐ?{2¢1WÈ”’!³· �™•!CDDDD«ë«a\–TMÕ#Éö).ÇМ¸o>ý½�ù€¶ÄÎ26úúçHŽYŠs…L Èɱ ™éQ2DDDD´ºÞÆCIÕˆ$³!Ó…gÊ1sÆ�)Z2ÖÁK9ÔOîfÎ2fpòÃ…LrT† ­²²ªŽ¢¤ñ ã¦,Á¿–IöøŒþë™BÆF!'Zn|¿²6:1󨓹BF:p&éÑ·þ\È´fŒš2Å�–$X•�’$ÝÞ´ùà""""Zj]Už¤9o÷älöï[fVÈ´¦Bf ACŸà£3SÈ´< ^WE¤~¯©�»–Hî¼ú$dÖâËÈ0J†ŒëÁŽÎ,ùX—?2¹ Ì53dºlIh(JBðøè""""Zj*GI [õH(ÿàö˱ݬ�±€CI胷l&"""¢%WÈX’¹lŸ]™Ó‚CFJm‘K¢]Êü»¦Dö~!5ǃlÕN.ñ zß+ÉB¦Ú )‹V+Ž*’®Ž2Äv¢f™š}¬öÌGd#mÔ beË…ðZ’Pòà»’`(ÑR» J¦!?º¦Ž¾“¿2ó³.•êæ™¾P/Ï™’ðú÷7Í›ÝbNf°èQk–L1ë2­Ú""""¢åÖQÉò°%Ó>ªƒdyBæh¦Ñ’ø¢¢åíö©õÃY­�‘6ZÃá0'DDDDD´ žÊ‹®LØ—�ÈùÛ«2·Y"""""úήý£4 Æa!KÞ®f«‹�€°qw "ÃYprè%2xoàEr‘®bÍP íœù|nñåyBøÉÞ>îÎÒêêºÊ£ª›UȤ“ç¶m ˆá6ïy=¯¶%3«�binòޝ÷”ºÿ’2Àt5ߟyëñåé"¥±dÊNÈS¶¸|8½oÒh,™ZÈ�teι2@$])d€hê¾w-fIÈá !„#d€p„ Ž�Â2@8GCfH“3 ™u±I“³)ÖCfi‘¦h(–C¦.V&øeïm$‚ Šî¨œ…YCÃ…ŽocìDL/[g¤÷²ø*PLç>S�!ÓIÛd€Ét'ý2£²·M˜ÊÝ{j<‡Ì8’³o« 0‰¾ûLŽñ2£0™ï!3ºö_&ñÛ«ÇcÈ,FÈË2Àr„ °!,GÈË2Àr„ °‡˜À”þsˆY˜L½‡Ì‘\Û`Û•o!SùÊ`2Û7õ2�è`:[Ò�!S¹>À;w�š0†ax ³ë&›J—âÒu/�“ônB_À.™ú&} žѶiEZ/1üËq÷=Á¸»ƒ2¡– ™óAÈÀ•ò�Y­œ‡L”é–ᵌiy¾neÑÿ…L뤸íOÈÀ©ò�y7EcÝHz¦ÐKtc¹ ™IXóy°'�2„ ê§ò�ÉÔÊ=ó‰—«•¹ ™h ¥!CÈ nª™P­Žù¦£Vè0dòƒ!CÈ n*þG¦[tLiÉt�…ÌDdáA°Y;þBdBÈ2¨™Š_-«jnJåv4v2©ˆ¿Y‘`ÿÜI B5SmÈÄjy»m»O­ØMÈS¬ûç™(¾¹4 FÈà�F…L¦ª‰)´UÛ¦�ØaÖ„�¹žEäñî-ÓÚš½…æ8„ ÎZ¥ÿÈôÔꙂZ_§ç2þH^fÓ‡¡<Çæw·¯Wæ8÷2Z.—#é›ã2ø`ïî}“8Žÿ¢ }ÌCB=O"’ðh‘7¥Ò–65…ØhZ£–¦wZ/ØDML*ƒ1�ŒƒƒºéPY\L41qtÔÑÿÀè䦉÷<§ô@�ÚxøŸÏÐr�ž¦Oîžç =AAø—ýÑw-‹±ÏÁ„]ÈÀmlÆþù�9@Èü€�mäþ t5L” ‡Ì" {îœ"un‹�AAþ62dø;“ùìCÆglúÿõ� VˆfÞ/‘½n�Tà�ç,y<’AAáïòGCæ0»Ôß6døåþ‡ÿõ�‰�»9˜â“w@¾¾¦P¿æÜ¸^>³›Ý]ßN–ëõ~B£·ô÷&0±zîš2“ÂÏôÙbèG!st’ À°e)¥$‹90cuIZªÎ¬À´²´mûbÂU®�RæÒ|Gò´•Ì!cS¼"#‚ ‚ üeþèçÈdŒ5² L|«ÇbkŒË¸™ù×Cæ™Ã7á•(0DFÁ¤ÉY )B.—H)Ã’‡{ @z@È$!·}0\#É%¾µ»¿Ä¾+‰„Œ|›°^Éš?¸œ…¡B *)RrƒÉv߃S¤æ*$q£O—Cm…Œ,�`=‰Öu4Þ�ïö&ôœ;‡vÑ\ë‘äÖ ]òBøS†7ÿ`ð„H0—ÀÏ�Ð+|(™%1oýV{h·ñs¢ë¢·õhI†à��-èÊ;°þ»–MÀ– F�ÜVO›­k÷ÿë!Ó /aÑ2y¢ì„Ë_šÌAŽž#�h4„4’ÊWÆÈr€‡Ìå+…àÅ!Bï�I®Â2)þ dÂd2È*9±Ùë;KÊÚt¸TÊÚ”Œõ¦#!#5J•º‘j¯ÔTL¼ª �w‘òê —UZ= ‹�fù#njôxäû½í¦¦8'ÌR.SH-Â*P¦T�I ›é*Õ·‚ �Шº$Îü=£d`Ø>CQG§fzCƒg=4ÏUÆ!8¯@÷€‹VÊXO¢®RZ ›]4ÃéAJ· 8Í~(âñ�ςʱ©5ç =!Ó¯žúÚmôœ­©´’3•zEµ¸ž7)Ì M´×Zòñ�y?Dßu†Ìø�Œòåû,R&e¿`!Ór™œî2M�aôyÖr�Ì-Ò'›™ÒÇC†„¸J$eþ\òû� õ‘yÒóŒ ¸L¦xÈ”ùÖRàÿ‘< Q�‡L¨t;föŒ»’iÝp&d2•ÃãgètQôíN&a¸PÑ•ŽÉXWݬе§ÏÕ¸åIýñ²2Ó ÿΛÚ.®ëÞB¦¨Jœ0[ÛË´â#l(-铆õ$ºXQóÒ´z†§}þweB�Üš`­OiÀüÍ®!³þàYMïbE!Ó Z•ÁôÓY¬'©G$_R u O�‡L®²Ø<Ñøï?¿ÙyöCqçΆgÁ˜šß.WesÎ!Ó+ƶJG÷î�² ™�œk}+¡iz@°/••Å“¦Ž¸©WŽ­ªiX…iœuÉwþƒÒè™7û£øÓ²–ÙÝ-dÉØ÷ûëÄ&:y_f!S£�k0øHÅ2ú£G�ž&—IUš{d�‡Ìc0)’$² î™™·<µ/ó›C!ÓÇ£4ùöÐÝ@Nõç*ýiVÕù~R¿®Ë”=¬›Ó`bj–‡Ì.- x«OÔ4—uoÜ�³1»ˆ.FÕ-|(wÂÞÜ=ÖŸ,׳l��Ÿ‡Ð#ý/°W«D€`åB÷�YðÖÍ3úTM„L/(Í‚¤I¬c€l©ôÃ֥ʪ�‡Ìü=»š!8É~(xÈlx¼:ÀGoð9O„L/ù©Œ¾ðkZˆ°üol”(€{E¿ìõðUõÙ„ÌÚ’ïÆ«#è;ëÅþo?±�±.]Z L¢±ÿx†‡KŒí‚Q\ì¿æ2ñw cÿz~Jn o‰DÁQæ×È€©Þ§ÚCÆ4¹(ÃŒ�^ßCÈ4™˜§d ð“íà.ò�)ÚÏ’…]Éð/p(d¼•B›ØíüPuuÀØÖƒÊ£¾òðºª=üS˜V`uÕ‹Wn9þè¾ mçS²<´hžGªQiÀÒ¼lÙO’82ýµXRæ"°Hk2yçQ±q%uÀæòÅ'�¹ÖÁœ ûL±©a1¡§vÒ80vgf•ýÆ%`àeu(ï…¡PkÔrÍ´Ýà�»§Œïî¼µCsÏj/ 8¯@oÞ‚!§>5_�®5ê£| rãJß5XÅÌY}SÈþh ÷cŠ…LˆÆ 8Êv( Im�­±ÊšV~l3 ¶ÄÁÂtµé‰â+ÿ>^EûÌ9O„Œ gC&ÝWek(_ÙàÅô'´M{Ø��Í8¾‚C&fÀx·¯²¯ù9e& \oÒ&¥¶%ßÊÇ!óæóëÚ‹¶£<±æê�l†Ìì0¶ FñöËk4rµ[ÈÀ]!„\¾)YB&L´Ûo ™0ÄÛC&5<<ü˜”àÂÕáÌ�‰ƒyD–Ø?—å!3AZÒ°+Þ1N… &ô¾ÓÎÍͺ€Ú`ùúéÙf¦™G0x’`Ò :¬=;ÑøÆ­$Ì�9¬Ãp�º:÷ƽ+fÇC&ÝÜ3 hý°ðÑ« ˜rÚ‹HF¦èÜX¤¨.À§;yÎjEéêLz'„ž©.M÷õ>àpp %ý ú*€•ʉáüñFÚfðF_e†Ç;;ÏzhŠWdz¢@¿°w/m�qÇ?d¹ð‘¯›‹BÈ5Ñü21ñWæ/"QD‡ÎrN‡]Ò JÃÖ±B/š\ŒÒ«²‹]Ø‹íjë…æ¦7… ^z»bŒý ;çIÒW§Éæ8/(µÕ(ß>}žwšsêR"ã31£cÔÅÀ£ú*ÚK,ÄUv-ã4]mM¨ÌÝx¦r6øA!“Z­n™aˆ½2öÕ¬³>{2Sl“’YÁ5† äôë2õØ€ 9u¯€bºç¿¢®À‹¦¢]2wf–ýÇ>4œÆÐ™ý ïmºÓîj¯r°\“=­ ›e´ ØÂyU  [úœ?¡lЧ¾¦apCª ]õÐ(÷¬{d:g¨Œ5 0ÿ°�wêh¡16�šh?<7%õ¯;.ã|xVÈtGš°µÌU=FÈ|D_óÍzänìâ`ß¶FÛ“Õ&„Ì ÅìÀY¯èt„8 @šOËÒ[†‡L=_Rän2ö ¹¢ÉjB&DÓüK�aéa¸Û³D¸‡‡ŒÙ.Ø\ˆP-�œ¬¦`…Œ™†LãeÐ=Çe64ÎV>§”ø€oÃre±§àrûÀVá½�Ž|¦!#qÚ¤)¯ŸµBÜÏó ÎGIèfÊéy‡f3~"%\�÷¸ K'Cfäþ0ê>Uïßñ¹bþˆ1«ÄÁ³ÌŽ„ *L .h§hp©ïcãäZ~Ø{O]‡¥c¢”�.ONÿóPêØX% Ìíh “á-V£Ît¡„æð¬§–u¹¬öÕC‡ÚÂà%ŒfȈ‹Tó®ùá}Õe²Ú„�A¿:å åj^X:@E±g|p²Úc¨–ö¥hë.(.Dµ|êNŽîyP7AËÓº+dLt0dž2ÝÁC‡J°2’CŸÓ$„�6S‰ÊÓf«M ÜSHÝsÂÒ â(œ{¤.ñ·–�lk‡ˆP u¢ÚÿZ=‹7çò‚¸E+dLt0d�,“2s\rC§º`ý T˜†å— D‡t‘Ý*¢ÐM �€xäk†Ìïô§øÔ²6F!d‚Û*)o=×r`¬8t'6@d;qBÝ ™ ƪ}ýýý/{Ù®¯Ê؆ýï܈•GÙ.trŒ=‚ k!Ó͉Éð��Ü ‘o¢mÞñÁ„ýù¬[/ºd}ç|¡ zíhÁze$·„†·uÿRWÙ#ÍA]<<ŸÔžõ/šÿ&ïE«-ò™­¶Vžá^X:EEÄŽYBHõ¶î‚âBT‡`Âòßà“/¹¡µ’RÖk×gpDx• ž–#î·šðøå¿?0‡=×t` ®; ŸyÑäýÌÑêJÈpf"cÿ„ÌJ–õ¼IÄŽØ™‚·Œ92«Y/mÜ K‹0ÇÿÞ·ügYûa¬�Ý( 9\DµîZúï±–Ø_ìÝ1JA‡ñG˜FI`SÄÀI• +* kÁbÓˆ�GÈ,Òì ô"^Ä»ˆ½…Ñc\Ë,ïM¾ßò‘âÏÎ2oþ�iRV&_:iˉ¸VÚI~ä� ™ìúŸ“E2däîåhåæêX>é2‹S©Ô?±ñÛâ)• Ã{�)FÚm�-$3‡dæ�Ì’™C2ÕÖCfû«eÒ¬a‘l)†"Þ’ :dªE4d~cÈ` É@2sHfÉÌ!™j*†ŒH^&ž2oÉÔ2#ÔHC$‹ÉÌ!™9$3‡dª)2"ãé ˜%ɬLÇ"â/†Œv �, $3‡dæ�Ì’©æ ïQÂ[2µ†LßuðŸ&eÈ€dQ ™9$3‡dæ�Lµ]Cæ]O²õ’©=dz.¨ƒ¿ƒ!’E�dæ�Ì’™C2Õ”Ék � ˆwý2 YHfÉÌ!™9$SMû�‘¼ÞѲðgË8YÆ�É"A2sHfÉÌ!™j^ö×6d<5†Œ¸`x Ã�ù`ïŽq‚0Œ®µÛ¥Ž\PÙEŽ�’ûä¡Aœ„CqŠH¤ˆåHq4c¿WRLó‰â—…A²•�,ÉÒ‘,ÉB óÖ²…‡Lßâ�Œ!ƒdk!Y:’¥#Y:’…¶•!S†¶ï^6d�l5$KG²t$KG²Ð63dnKÆŽ¹1døN2$KG²t$KG²Ðbÿ�Ì_™ç¡-`Øü«— $[ ÉÒ‘,ÉÒ‘,´ðo-{hÈLŸÉxs“qÈŸ&ÞJ9L>|/¥¼O>=”ò6=p,ÅÙ¥ÎJ–î¬déÎJ–î¬déÎJû솆Lé[ó;ÿ;C&üw3ýYÉÒ�•,ÝYÉÒ�•,ÝYÉbŸÝÒ�)¥7cî ™ðßÍôg%KwV²tg%KwV²tg%‹}v#ÿ#ó幆ö°aèý8濇 ̺^ÏçuþØà— €†ÌÉ�Bª§Ù!³«­„ÓênvÈŒu_ÂÙ×qvÈ\ªG2@<­ÖËì�éÆújÉÁ´×:vóC¦{©uoÊ�´}­/ÝÜ�ù4V€`ÆnnÈÜ\ÆÝ©ìÝ»‰Ã@…Q‰«hP hÜ€C¥*T£«ÙÄ,Æ�Ñxàœdjø¸?_b›ækÿ6d#d€æ 9BhŽ�š#d€æ 9BhŽƒ˜À¿Ñ%=ÀWènï€sOÈßã2§d:€?Ã’œú;ïBf\Vÿ:€ÛÖeÜ™9<.™wCf\pˆuÜ ™k¢c€'CrÝ ™’Lå§ø°Ÿ2%¥2s–àÉ’¹2%)À!JRª!3d€W†LÕ�“sp�s2ÖBfKðB¶jȬöàH%k-d"d€—’ZÈŒ™:€M… ðá�Y 2À±J!¿ìÜ1 À@ ÁÂHBñQvH8/­4ƒÂ[øX™3öÊ€_=s„ °2þl�æ2Àbȸ!€f„ d€! GÈBÈ2€�r„ d€! GÈBÈ2€�r„ d€! GÈBÈ2€�r„ d€! GÈBÈ2€�r„ |ìÜßKSaðñ¼Q±ÚÎ)ÈVzÔæ\ǶåÌŸLR Ä…ec”¸š^Š!Ø…Ðͺ/» Ê‹º« íÆ/¡Ëþ .ÛΙÎõîä72߈çuïÞß÷\œ‡ÉEQdN‡P_/Nž`Ê¿yPÚyüo¢Q·;ª‚Œ¢(Š¢(GrʃÌ-Ó4c8ÓF‡ìžÙ†}7ÌvÑkï*hÙœ�-0NŽ«Ë¼‚SC:(ÌQ”lo£â…‚eu`Wgd<î‚Eª¡UÙækm¯¡õ‰z…Å­‚Œ¢(Š¢(GrªƒLŽä}œiµŸ�×Ù‰}CÄуh¤]°Ý$·p\fqÒü³Hšdú9‹¯+¼i—K§/µ˜!smäZ•m:¿!j2ü¨ƒWìq« £(Š¢(ÊQ¨ sº5$ȬЃF2è‡Í$“8®.Nह˜†¤™AfˆKŽAf�s£~A7õ6@®¡UÙ¦3„£Îã�F£îÒodEQåè6½¨ö”cbË8àÅó~ý—Ë×Mwÿ{"¡áoò.H¬×me#¤‚̩ш sÍ›ECå¼û3íòŽ)Èu”üWAæ6ãNA&¬ó)l³ìƒ\C«²M×*Ä›…vÉÂ!ZëÉ1Þèþ¥[EQE9LúÕöD^m!(Ä&ªíˆ)pU\ÇOÄscb±|}ÒÆ_•\xžÒPËä'q÷‹†¿™=�X+®Û´>ÅAF[½:ÙÚƒŠk�«~@s¹\~ü‡dºù •šƒí2‡;9†cêá8,ÿS�‰òµS�¹Ê<ÊÎÏÍûåZ•mºv!PÂí8„ûÀÇ0Q!œ„þl« £(Š¢œU³âʺîÞív^v¢Úýëß!™ø“åX°w ý󜘇âîÔÔ”(zÜŠ"çê2w>ëg3È–",ò­µÁÖ9QjκúI $Ü‚ƒfÌ+{‰Ç´;híkFf{i¶àR6�ÙyäG‰Ç\Â�Ac>†=Óƒ¶±üüûB–ÍMx¶²z?ŠV¯¤É�þÊ‚…lÚX{ݳ·Úáw™t6ª&–[r_x®äÙ¾`ÝAÆyDyÙ?èÙßÛíÁ\f±e±ÁÝtj¥{ë�îåÈø„ûÞ§ ÒÐÎÖ÷õÀÐgi>¹-à2d�î¯ÉÈvÁÚ‚tÒq÷=ÓïŽä~„PtÕ\§Ïþ‰Is�ÖÒ´˜·PvÛ|Iïc~wà†<�|Pò %ëe»S�¹ÃµJ>ïÒäZ•mºv)°HwÞªT…Vßçq2¤‚Œ¢(Šr6§îz`ë:U‚Œc,¸îøÔï‘Úu™e#ÏÞ}Ÿz!{%B¨+È ‹ë'dä �D�ùpî×¥Cý:÷¡¾ 3’b™~Û^c‚–íѽ ³4ÍE a¦ööÃw( ¾czñë4“�(éŠ�ùâ϶õ¦އ|ŒD*{gǨÏêa„Q¢ëç3L$_¸ê¥÷}š|€¥%Bnd4ì˜åŸ 392„4qUK92—äü�òóñP2~H�qñÏeûõÄþÞ Ô'’¤i—¬àãÜDÞÇ1ùå[Ìä®K3e�.ièšv"°¼å2P`7äù¤v­�é†Ä¿KF&"Ô'H‡ ·®këÅþizãat \ˆ“F0ØÛ;ð§Ykb�[š4�tPò % qØ)È´0íG…\C«²õùG‚L•¨s� ‘ŒWåªOdEQ”³*"ní‘Ë 2n÷$˜t»=õËê+ñsÒ„41ÈÔ¿¡ã™s—êt®ž £=dQÂ`Ñô*€ë’>Ò(™ð4ÉÞ¿“~ ðŒ†V!ÏËA mœƒv�Ieîµà€qŽú.ޱ5îh(Ò§¿ŽÇ¬«V]¿:Ö¸iµÃ9–Þ¸H}Ä*(K¼v�Ù€4qUKîÌp«X]‰,1Ž¢uí� ãïjÕ¿–-pQ²²iœqXF˜—ŸÖ™ë ±û¤é¤ƒ’o¨îªâth{êd`p§R ­ÊÖç_ 2 q’ñª† 2Š¢(ÊYÕ/ÞÀ]Öò1¹r׳w6¯mQ¸¢¼1u‘£/° Ær#Yþ�eÉògü#c¹6«XI…›Ø‰s0-C0ä`û`BN&‡@�C}ké©—@r걇äÿ ½%-”jgGš]½]iUBÈü²fgófgf!ïÇìh“Q(3 �‘-Þ¸1ßeä6Ú´Ðñý@;dAMËÃS­_8ƒÖŸ×’ø/”‹àZdàÁ[�ïÒWOzu©iÕ4Ænj<ÇìzQúJäYVXÿf^k"3 Ù¡¦µ‘‘ÁâšæOAKÈ)2æÁpÛ¡æEæÝ—®yçBd†Ñ?‚pù8ÏìÒX¦-êéH¡™?"Ž×™x0œ‘Ôžýãô§ô�' Ôe .ƒNh ù”Åp7:‘’h(TD~Ê)Žˆùàå6¼oˆÃÜ# ›Kô\˜¡÷ýÆM'©»"S7¢¼lÎ0¦+}+ùľ�›PæúÕ~cÌÖ4^-VFî žŠõª- ¡ÇPb¾ÐU¾Ñ£ˆ-´=R&�í9ÂB·ØèS$“`'2Xôðr'jD&(n­¨_øË=l‡úý“Æ%†—Ö¤92Qä†z‚f6€ã(2¾,Ƽ™88�¡{>‘Éd¬E"2ÄdäWµGF¡P(Ÿ,¡Cv"žÊ~n¬«èú>f‹çŒ^âkK†È åØ"cWx"Çæ„ˆï_1N^°"è$r¹S¦¿¤àNdà”!”i9gzóÇy€(ãœ@ú!?zMÏ]ú*NvÈ¢Bdzç™Ed¬Áà†È1fÙæ!2ÖÁpìPÓ"C×cÜóyc‘™G4ÒÇ® "FMÂ1!20‡ø8TGdºp$¾jmzùgÐS+2[àÌøSFfÜ'ò8܃J�žlÞÆ”h8¾§_JÒŸN`2I6—蹑j¨DÌÕ™úåe‹ o¯®�€A,[˜àÕË"N¡Ö‚!zfÃÌ Hð‚ÑÞ‘M{¤LÛ(U3úå¹™;‘®Œø“‘)‚à †Aç‘¿jø {+£<7@š#En¨;fò D¢·‚ˆþ‘Ïv Ýó1ˆŒx¦7CöÈÔ5ñEýj™B¡P(>aN…2|Ë2RdJL‹CÏ-v7 Eæð¬ÐÑ�ɲ»3v"“�³íx ‹íóL¯�%iâ/¿º™1– ä�™Öïɬ±R¹O0ÖÏÜÉ-¦}ž^d%{‘ Ä·Ùq<Þmk°e–¯€X­©"#Ãe‡š™¿lЉŒË´ˆL±º¾D@ç "20ÚPGd1ÿ¬¬½‡*îLñì³µ"“ÁcŒ@Ì/Tg¯€ …m8U¹ ‚Sì±6l-Ñsûd¨yW"Ó ¢¸lÁöVú6Œ‚‰]¼Ã«;Ä5”‹ [ihg.¶[ƒ)›öHÙUà‹˜ �*2•ž%0U#2Ë5¯vñá.ñ¦5lqnŽL½¡(Î"ÉÝŸDÄ­ :†MðˆŒ—UÈÐ_-s6ñGýü²B¡P(>eúÙwPf€}U‘É?\Lè…‰>)2ì*O:n°-*2æ=2?°aàé'�Ä_~q/2ëÑIê¡ë’i�Ìø‹ï�>ü "ã¼GÆ,’ãÏÔyÎrk Ë`8v¨Y‘qµ óúíû÷o_»X’¡"ãCÄ¥€Ñc=Ùá„X¶q‘¡ÐÌv<ˆÙtG8ƒø|Z€ç›ýAbM¾á€_K,&ŠšÜ~ /Là&˜GœñkÃÖ=·M†t%2 "ŠËŒ`Fô­ÚƒùJ¾Þ“éKï¡™®šÚ¶’ÐÎD‚Y™Œ“öHÙUàqÓÑI°Ý#S ÌZEFޱ'–2éaÒœ¬Ó™(rC5'2‚@×Ncýt ›àþL¯—댗¾GÆÙdø‡z�ŒB¡P(>m®±>ø•Ý’"ú‰M�@ŠÌ(/fØq}‘I³"²ì°Hâ/þ4%2¡EÖpƒõ‹è»6›ýÏÙ¨{‘© –e³|³Ð:©á"c —j^dÞ‰yõ÷ׂ¿_™y×HdN1œî-]ò@§k‘�“½IÄàåqÃMLœØ‹L—\Éè4A = ø·õX`bM´[¶–è¹sØÑÜ{dF”—-£S‘ÙÌb™`©ŽÈ�ÐÎl"p÷‹Œ»À³¸ : Tdb�Eæô¹m²jãV�æÈD‘ª9‘‘xöp­›Œ¡kþ‘‘ïÁô–¿¹ò¹ÝjL½S¡P(Ÿ8#ì@àœÝ–"[,—<ºm™3à$X.TWd"¹ý@+ÒÄß…ÇP‘elBŒµëû¬®È@’ ë4ñwá1Tdîé{d>cUÍ"Óùí"ã4!2$Øþ™ºÏöC¤†‹Œ ‡}h‘yóÇׄ?Þ4%2¿e�Ì€çüO™øº³È<®\>ž‚d4©§ó;¸ {‘9Á#œ1gÆó8.Sö€#¼&úq ¢ak‰ž;Ž2ÅÊ ¦Í—¸ õ#ZEf·mE&ŒÏEê}ê,24t"l&!/µ�À‹S.DFvf¥2�¶“@¦Û¥È@v]_bÙ€ZB~ìqnŽL½¡¢a3f³Ñ0#µe’�D´EV§±�Ž¡{þk‘¡#FR"£P( …;–Ø0Ù²�ÐÔ‹kŒ¡GŠÌ99©/2C¬‰‡¿“% WCEf—ýal˜sixÁ$2iöÓÕtï7sMˆ ÷Ù, ±g@j ‘‘ƒaÛ¡-2ïÿ4Va^¾~S–š×/�Õ™?ß7#2pZ±•‹ADÿ À"ÆD®cUd|`ar ¦,"í8§çÎO‰LõH÷RÉ’ïàr¥&Œ à#¬ôä—–B@á [KôÜ–jJHÚæuWx[‚«8ö©ÈȽíT$¾Ç{¢?kÎ"CB;þürºâK|˜]ˆŒ ìLw̯ˆRžL™n—"³ƒ�JåYu©$Ú%Í‘‰"7”óÏ/Ï™\ô6Æ<Ü…úL÷Ý4C÷ü¯"CŸ&Ë�Q�–) …BáŠ6V>l•"SaáŒÍJ‘aãGvê‹Lèp?Ю£&³M‹LxŸ ÀÌgóBÌkl‡u‘yÀ¾Ïb]‘!Á`€¥à&{¤†‹Œe0h‡>´È¼äÚòê�i…æW›— E&Ý+@/"ú{=p’BäiÝLË$ŸûqÍî6…�u;Ɇ}žÙUö¨LᲞ~úE¢ñ:ˆ ŠáÁ§–Ì8ì�…+5¿éó•E‘×Íò矪™êàAÂÚ°µDÏ…us´lŸÖybæ]æ)€ú­"Ó‡OmEf�*œE††î1Ó‚PÉA`Ý?ÓHdH`{æð–ð˜àzˆL™n"2!?F¨ÈøpâÄv {17F<…aÒ™(rCmŽ˜ñ�dcÿÌ‹·Ñdðºü¡ ÛŒá–ë�6\·Š õ0¶ú{½~V9¤6û+ …Bá†üÙÏ�, &‘‰ö�Ù11‰Ì èˆ%=B݈V‘Iø×mE&ŠI.,—®¦œE†„v"ƒ»²°Šc�DÆ)phu5’|�ôŽ·ÞÄ{dÈtS‘�ì?ìÝÏOAÀñíá�‘¤Ðm7R*ÔBÑe¥(Km0”IS@ *œ4•¤’p†x"zЃÜä ^¼˜hbâ?àÿa$ÅÄØ®}ݶTª ïsbÂ2‹;=ðµÝYì¥!±pTk)Noà�â5r:²PäUÌúåóGÇ0cM¦Oá›äœìÃ¥‚×ÐÒ�l„¿È)l9¡uÇåü#yûeÆc¬,)±,Ω!ëO ²(š•�‰_€ÞþþžÂ!cˆ)7X†ÅY�°o4d¼¡è„ˆw@Öåx|Zî‹nå™GÖaé›VÈÀ„5rÝRC&(D�„Œ:YN·0åWêwdȨƒ8è�ù¶§Xòúæ[ù!¾Y”Â!°œI!¢æô]•!Ó” ™3 ÐWÑX¸´`͸f]x»ÒÐÖæ~M ¡Y7ôr;Á&dçñîÅè$Ž6B^ ¡–I:'Ñ8–Vöuw›è¹9-N.Í9 œ Ы#z,œC4Û ¼-w-A¿TÃ~ ¯® ­�¢‘(9£úkC › … ´£6¶R—Ò®¹ÙŸLmç#öÀ®.4K…ŒÝÄi4@™ÂðRrVè—,]n2Cˆ©Îúü�¹Šø(k>ÏêÜê(f"ätd¡È ª¨ZDc¾¶{DÃXBþÛbèßlŸéó`»»à5´Ü@”ðoB†>¿?ô뇵Hü@LÆc¬—…xèVC ñ|à}jY˜êÍþ1qÓ\¢ ‡ÌÅì,þ€ÜÑY¬üiÈ<ÝØØXBl„ÀR#Äisà¹õ*!3$ÄDæõzjà ™Ú~qvÄÿtö…2ÞEÑ'©† ™ ñr2ÊŨzÈ|Ù¶z…² gûKù!z�‰YþìpµN7\@Ĥµ`üàÎÛʶQ›�ììZv&3€è�µ�L¡fÍ^Û�q÷ˆ{Bn6�=Kõ µ®åkmZë—rYÕwÏ y'&#r,Œç¦¾Ûº³ýr­§3565Ìò\sŸ‘üÚµx¹`È@ï3DÌ¡HÈ�©mœ÷øÊ0…Í%BÆnâŒÂ.§Ñ“¹@�,wÁ�ñˆÃù!“Àq((‘¼�¨=»è%§# E^P%\IaN¸Î’{È´õÝ9›k˜ãÃ>(í_}´Œ>¿?$‡evŒü’C†1ÆØ±æ^«°'d }Qˆþ‰$¨!£GŸ ±›�q¿\â”ÜÑùyàOC&gý¦%ÒŒñ"›J�PBj³G½×O[!¯&„ˆo:Ô›ý¡íN\lª!C&Ë ‹09� åbT?d¾ªïÇÐ÷d¾’�)ªeºmw÷§D pË;ËQÞ¡âK©×Aáv¹@H[Êû¾®óPPS£Ë»w® ðººäÄdD޵øÕ¡„o¸§#xJÍHÕãK°èJ€2uЉ簇“ÖÉ"�å¶ç¥¿º~c§(wK£ƒœŽ.}A•æj¿Þ¬ƒ*1ÝÓ¥C1ÃØ å«þÍþ4d€(³cÔ‡ cŒ1–'М€|î®:‘�?Ò.žA¸û€ˆ4ê{þRòÒkr—œŒ~‡^Œê‡Ì–+ÖxKä"gg û–DD«7ƒ~DLÃ� !óßóਘÇ&¨¾q¬ƒ¬…<àjÀ¨XõC&$DöM¦‹R2AÆcìÀ$6D޵ Cæ»üø˜ôipð“üR~ìì{Å!±>ˆô1j U4;8dJx¬5ÀQqwª/`xZ óœ�C¨N;¥üÛ�qÂ.­¼ª ÊŽQJ†ß‘aŒ1ÆJ°Æ#&áx«,d>Êr‘¾ZïϨ]3ø¹Ò��ñ0JZ ìâ�)%:yTÞ’ñj¡ÚÆ£“òù0®<8„b¨.,3PÀ ²k™|’L9‚ùcÆcì L ñÚÇ[!#KEÝxyk{{K~ùÝ9PŸ³5ócTÇB_þ?>³ކ#A¨¶Mͼ GÇÚ üU'…x4Ó@Ì<â¤ísdès0ËÇOögŒ1ÆVÇ¥6޹ÊBæ‡üìµûɳ2d*ãxðøPþÇ9;*^`E˜Â† iBg(Úy&‡ cŒ1Æöï0„ ݲŒn\&C†1vøè¦MÇèÅŸ<#;†C†±ŸìÝÁ ƒ@†Ñƒw±€´avïa»X‚aÈ–˜ ˜‹ƒ¼w¶�üw¸Ü_!󬘎ú���¼†ÇïšíL!œ— d¶v"öRöñc$³ ¸“yšæš1B¸Üù�©ÇûÇVY–2¶âì¿�„ ð–3dâùe! #EÈ~-‹�ñk d€Ž!sûGÈûBèH2‡ç—#d<¿  #GÈÄAÌnÈÔƒ˜B2@•#dÖÉôC&&2«�„ ¼Ø»ƒ–(Â8Žã?LâG�X;; *,»‹©åª�¦¶m¦b-74ÁHÑK B¡‹—Øc'!zìÔ%(zõ>DéV‘³óŒ3ëNaÛ~¨žTþÿÍÛ—yrŨ��Ù5¥R2Açì*dDD!#"""F}„Œ{wì`/\.á®Ù;pož)dDD!#"""F�„ÌþTå3˜ýýÊç3Sû QȈˆˆˆ¯NB¦+Ÿš"} G~£;{Îg-zÄi$òíøélÛ¯ì¿_*¥Ò¨ÏÄ�oLáoIJÉÐI¤ž(dDDD¤†!³w`Þ¼¿Ê·©ðµ3üÆ-!B�iD‹q�´{ðZYÂzj=�+ual�£×à‹ßzi1·ÓŠ#WÆ'iϵ„2äQŽ–Ó–À/ä‹cˆ–X+Þ)/Ù^àŸDê‰BFDDDj2¦W¦>E=�1…óC&1³…h+3Þì+ÖbꟇŒ-�»×ôsNŽ7Oðè…§>°£Ô¼Në*Œ~Zs£ã³0®Ù\m~˜ã\#¢tm’6"µ¾#µÄNàè$RG2"""RÃ�1Åòe¯©ÂÞÓ7ÿ5d¹€hËlEY&…2f|´ ÆÊ/m› íóþ+Ä·#ò³öÊÚ8Ñ éðÊžÍÚ÷¤‹|ƒW9F;ºÛf­7&d°Ý7�à$R?2"""RË�1%sðy/”1Ÿ¼Ž©ÿ�j2k®ÛÜ4ßxNÀu—N\�ô¾¢+7™ôvttœƒë9Ûàj\g ŽKeÙÑ ÚQ;Kt––ü�yÀ'‘ú¡�‘Z…Œñí`ÊõýÓîÞaÄì~ú>å:øÖ¤�©ÒÉÇp ð2<Ž÷µ%æá)xŸâ<ý¼ã]{ Ï5Îá¸n.Ç2C�ÆQÈd¬‚“HýPȈˆˆH�CÆ\$ D\6C„ØÅõÜr6TÈ“‹…ÜÄÛÞT2í›/–4"BôˆÛ£ÛóãÙ+8ÔR,Ñ.‹ƒp]~ïäÖ/–›a¤XÌq¼X¼¤‹ý8´UŒ¥:õÍ Å�žìöÂíixÒkË ‹oï'P©kh{~µy0™`o0¾b¯ñ‘1¸FK�ð4ó*€ik>qeY/†žÕÒ:Íð<ñ¾êÆk_‹ã!Ó6 !ƒwöôÑIwˤŽ(dDDD¤†!c쟪ð}¿©ª%gÉÕ Î_ñ+¤Å¢µ½@Î¥ü�™±¬w är U"Gt=">8´Úä�Ãã8í^0·mÓîÐà8“\tœà’÷lcŒÉ®:䇸à 9îuÆ¥>rýð×›8º^’}ZçMÈ{Ãã+÷–%:r8fœƒZ8c‰ëå²a ž¸Ít¹l.Ã(q‘h#R8dx;t© ©AÈ|m:f÷ó�)ãÇçݦc¾¢Jz‘¯€'}k^…œéèÈ÷ÉMîĽ�i³{Óˆ·¿b3ݽv7jD?Çcî¤ ¶T^-ëe¡=Žéüä|,|÷+™‹Ë @ÌáÐjó9à’Ãþr ¬óBhãu„Är' dX+,Uí5ã#÷.ñ-*�ÌΧœg3Œ ™ÚÙßK^`3ã"_Ÿ>dzy=t© ©AÈœmа»ÿíÛþnS„³¨2θâ%«\!éÕ˜ã/d¬[pu9tC Šѵèdàja¶"d–ìEïWéD‡ÌD‡ž�ÏË•ä2¹ó3Æn °ÆB ®-‹¥ª½Þøª½æÏ~TÚa¯—BkðM2㎇¯È«À4­Œó¼xú�Ir't© ©Aȼhú#/p\šNe=å iã<#Þÿ)ð=<Ý,¹^ ©hd¡"d6y ž1Æ"CæÊúx®ø¬�b,À“d3ëŒÕX©j¯¹·�Pá—Ëå´ÁNøVÙ Üà(|×Ý�»ÄEø†¹yú�á\è$R72"""Rƒ�ÁÙ¦?pU.sÆx¹BмÃa·wµ ž¸½œ`DÀž¯™fàÙb>2dZü9OüV9<åEx¶ÊkÆKU{ÍøÈ½kìDذ5á}Å(óð½ã ÐÉøú¹4Ð�ïwN2�tB'‘º¡�‘Z„ ¾6�ØWT;Ï0²*§CÆ#æË!Ó £À‘“ŒpÅò+[ÙQV„Ì9ò¦ñ�ý‘!“ôC¦ÁßxÎ�úî¦AvÁ×Î1Ã,Uí5ã#÷ðBºgs­Á?À—ãp-”H;¼ôÐŽÃXáÆéC“¡“HÝø}ȈˆˆˆDúó�ÁÙÓ=�1FÙRù&0 l„ñš+•ï#ÓÌË'�ÔÀ<MöU†L+CÞœdÒÜ�Dê†BF~²w?¯MÃaÇ?”„@g“šÂHËÚÕÕ6¦u?lÕ9æA*Œn¸I((Û"LÁËŽ^FñäÉ‹ÿ€‡Ý¼ ‚˜mò­Ë0¡µÛ$ÑÏëô%Ï“ìöfkKDD”„�IÉ ø Ç«�éÀgg³¯%VáËÈÎï¿2âÛ¨G>ȹ�ÁºT§ ™Eù‚0{ú |ÇÒ٫ƇìmÉ”kûzgöýèÙÅÀª,ÿªŸ5?ýFw3'˜>d,ù8ÅC†ˆˆˆ’2Ø“»ðt¼*�¥—-xšòÃo‰ì¼úšéÈ5ƒr!#Òòž·~P˜ºÔ[hÖMø§ã*ÔŸƇŒáèÛðÒ7q&-ixrºôCöªñ!{oÈ)|›Ÿd ÒW•¢ïÙ^½éN C• yƒÕgð|“üBfEÞND±Á�!""¢D„Ì|öÑc ´­y‚º¸EÆKù\ó[¢é¤˜]Ù²'Ñ’�3Œ›Gê_¼6ä><Çrlbà®îx£Ö$mŒœ”Ë^;”Öå9nïxój®ÌÞª¢þpêÌ9†§%{ÞÝ-‹k{¿—n%"drÝ•è�éJ=p"Š † %"d° âÞ|ëÈKõ‘cèˆþ©›î‰“R-Qü([ÝÃ;Ò+M6bó»<ùºœÞ{šÊ>Uå¨i0¯ôšGÒ[RoÒgíöØ�AN÷zçô‰4ÕÕ²��weé¥GrjI?l¯~¯ZPP…#;#‡J9²ó¼Õ(Ë*~µÎÆr{Ù•3ð5äI£õú»ô2ÞMˆƒˆ�9”ztÈ|‘{�Ql0dˆˆˆ(!ƒ]WDöo`2È/d�­QKÌå;"òjiÒæª#¢– ‚Âî8"�1Pi '•Eø\]Þ�äÖeàÅCxf³M•E¤÷Ò°¤²W�Û;++:’3.<©2ÐËcd³ûHD²� FêŽ <È`è–¬E…̾¤"CÆ.oáìD """JHÈŹ Î)ÌelœSZÚü£÷,Aöèe£4WD€YÃD*ï,#æÙå¥{Q{ÕøÐ½–œ"R)×>±P«¶>Ô`Ÿ´s%ø¤�p¦î"ÒŠt'¢ø`ÈQbBæ?´“­àrJáÞÉ*"�f3�Q|0dˆˆˆˆ!_'z—c nÉmD)f�QŒ0dˆˆˆˆ!ck½ .ƒ­7á@¯D¯w6'¢aÈC&ÆŠ®†Ë�Úª"B7�(ÖÆnàD' """bÈQâ0dˆˆˆˆ!CD‰Ã�!"""† %C†ˆˆˆ2D”8 ¢¿¨²]E€µ�Â8Õv •i�ß“Û6.úXÓ«nWð›kíù+{nµ“ˆ2D”\ ¢)µóóPÞäo`"Em‹Ú<ư5­Š‹ZÐZgV31 õX½Á"~³¨ÍWõÜj'1dˆ(¹2DSªk³øæ´í« ,¶jÌ|ÞÄÔ¬… ¨ÁW2jͤ!SÊßÂPa· eúçfÈ�Ã�!¢C†hê�ÑêÆ•‡ŒbjÓvÆøÁ%d4mâ�I©i—‚!CtC†ˆþ ¢éCF[dÈ0dˆþ[ úÉÞÝû&ŽÄaÿ ¨"=ÅÈY2–��l™¹!A ¢‹DAA™ÔW¤¤NÁ}çñ˜˜µ�Ü^®`¥çÓì&7ž·“Vþj—]¢ßÆ�!z3,.ˆïBFo¦ëÝàIîÎdåõ{woüÁë:9Ä·� ¢ì8éhÉ]½}:]yRzõF¢½pð¦f�÷eâõɽ{±;X®®®Hg~<,ÄÐï¸{íÉ'Çë£õb~œ;RªN¬à¦¯ë,J¥ŽËA*wœñ*{ ¥�NÖëhX«á!Ýß%ËסHóþ�t¼Z�GÕ¨xò2œ<¯/zÝ|no }ïè�òÿ´ZF�Ԯ̼¢*#ÏLzƒÚ¹›×Ü¿{«IÇmž‚ˆ2Dô°2DÿÑ ›ü 2:€©Øûæ›—aå�ß�™ï]mÈô|ä·˜¶ã+)1FR¬‘{3µ0ÆÇ ˜¹cäLþŒ(8Åró‚ÈŒìÌþÆbU'VOPÀ)-ú F_>éà+¨®äbU,i�U{ÈÞ†Þ¶ /€‚êTB¦c’ÿ,‘>v‘¹À°¯ €£[»²Â½|þ L�LÑ­Ÿ»iÍXÁ\aÐ0$bÈÑcÈý÷�‘ óJÈptÜý₾ÜϘotxÅ9ý|ãÏ�8nÚU[DyM$ðB½É°,¦=gÎ~2âö€ž«EÄÃ*ÖOlóŠîg¡nñ¬ÞÝ`€|¨,á¹L±­‡Ì)Ùèàà 3ª+œ^RI3<‹É‡“ôJmäæÇ‘hGa$"é›êŽÜÎ]{¬ÚCž9äÇÞ[÷ßÛæ—3ôÞÎÕ-9H\W†ÌiëÑÛËu¯ãsýʬ±¹ö 0“¬ñÔpîúšá¯O:^âè6MAD "zX ¢„LïŒþ-dø=1?*-¥ Öö5{}{ãïãdB¥ D&3vR¼œ;fÚL‹eC¦ò“fAQ c3éÖ-Þ¼ò�9"®*F~L÷µ�ñƒbØ´ñ32ž ¯ ‘@]†Eš<ËÍs¼éÆlk ¦gÐ+�uÿ�ƒóHþ±@Òº+-¦½š>#S†Œé ­p(šqW»²‚c¦¼b‡Q>Üo:w}ͤ¸ �àµa "bÈÑãbÈý dÄÁÛ¾ ™+¢J{X+ûs—[ÈLÊ�>"3$”Ü/fÚ¾´‡Ì’{2�1¶1b *Ê¿ÔÄR¨…ÌAr ÌC&¶ëÅ"1–bœáJ)ÃUJZ½‰±CÇëî¡Êm Û÷ŸØËI¿ ™™ÝWß̆YíÊ ®šåS&,ò¶óšÎ][ÓU)k˜‚ˆ2Dô¸2D? ñ°.Cf�ŽbiU–À©yã¯Ì‰hཟ3SÉ O_„L¯Ÿ{´È¸XH’Øß¦Q»÷QcÈt%ç k ™@rK8"¶}ØH©¬>B['@ߘáÕëþ!sH«eÿ•˹|2;[„›¢€fµ+³ÖèISý¶y…Óxî_×ÜØµd�SÃDÄ�!¢ÇÅ�!úQȸ[tmÈœ0£‹±X)|),Ñ/ßøÏåÀ ¢|ÈÍéÛ�9á&m ™æƒž»º2ƒ/CÆý ™9nrÓŸð_ö"²ÀÍÜëþ!sH«mÿO·ËI~'djWfEpä™_´¬UÐxîû5m‚ôêSC†ˆC†èG!#¥ž8T߯_ð*V%…óÆ_x@”Alm¾ ™ƒØrÛBFt~ ™í—!S»²’‡Þͧõ# Ï]_Ó·ÿ'ÿ2ÿá"† =6† ÑCFRU„Lo‹«ˆ¸‰ùÊÚ(8"òô†Å-dz>®ÅxDfˆêä_®ðÑ2ò†�ÏLED{X¶„LˆKX |ú6dìÄõ�‘ ™6Ñâk±´oŽ —æ�Û}Þbg„å±î fksÓÖýÇ Žùá.dB ü*djWVêc†žˆL1;7Ÿ»¾f~^X︄MS\“Xˆˆ!CD‰!CôÓ�‘ŠtIÏ8ïÖ k-Ÿ`{x¦r *œç+Ljäý|HvA¦ÛCfÌÆåKÛ}KÈÈ—lê�0—ïC¦œ¸2nµ>Ì`zÁ@_Æ3$ö_‚Aâ­€©=Ví¡‘�·ü6’ uÿÒÍO>Ã$©†ŒÞ«E{ÈÔ®¬À^/0o9w}Í1�|¨NÓ= "bÈÑCbÈý8d$ÃAr¡·…:^]©rvg\²�TBFœ ¼`‚è6~WK{Èôæ$希{ퟑl5[È÷!s›¸2Ò›$€Z†R' ð'ZŒh­€Ä)�U(Ìøc-Íû7¢3ð‰� +\)LÚC¦ve7GL%wÆ_m箯Ù]+œæ�æ)–—w!"† =$† ÑÿjïJ]ªåW½_¾—ò·|b´ÿndmÁï'® ê³è4¸ûÊýú!7 ¾Û¿�×–ï™É_}M=’VZˆˆ!CD�‰!CDDD "úã0dˆˆˆˆ!CD† 1dˆè�Ã�!"""† ýq2DDô7ûu@ èÿëvúB`Gd‘vD`Gd‘vD`Gd‘vD`Gd‘vD`Gd‘�Ø·ƒ‡a €¢"C2 «Ž99 È%%¸(ÒŒZq*$¤‚…Í.ËžÖ6x#�ÿ+aÆ}&As q×!Œ�˜Ò�a¸:•[21?žŠÿô|äÈ2ðv¯‘�ðåĬ@Ëu[2qR¼ÃY*0EBÀ§Û]DÆ�.½7¥¿¤0ŠÈýæÔkMÈdU-§M)ªš,ƒqâe‹‘�à\ "]0Ö0?úЉ„èÔjEÈäV2ÆÞË»¨æùË`œØHQÍ„ /Ò¼i‡NÄ;•Z2YõÔŠ£9ªyö2'6£š `ÙkÌ·þ,28uZ2±¡Ž±øòV�s—Á8±ÕHÈû–DŒŸc^"ɨÒâ�™šù]™Í—wÑiî2'¶St"d€]D’ß…ÄM¨Õ_!ÓôAÆäË[5Î\ãÄoµžd A~7ã}â2@¥–†Lné còå]4Ï\ãĆŠfBìÝÏKÛ`ÇñaxÒ…¤!wpkÙܺ1çÁQìÜa‚°„*x…�‡HZì<WfQV©°vPG/óàEö—ì>Ø_°¿`Iód5&BmÝŒöû:¤>5é“"¾icÉèº="ï+³Œ ýï2Büè¼!óë*½ s=ÿòüêódÐá$ÿRà… !£+$Ü Ž�›Bè!ÄÎ2¿)d.[à÷ß“A!C.Oà7… !#ë‘0yíÿ_ÙIáI�>“:oÈ\©Kd®ç_Þ�Àß“A!C.O @!CÈÈÚ¥7–™Æ„̈́ߡ�¹r(dˆ/PÈ2ºî “Á³Äbáàà"›ÏNÃc§l2v'x)&…û7!~3tȵ¢xÅfý@üoX_ÖÚÌRG™$…ÌEH¤·s æ)UÑRŽñ*û?Üϳ­veèÇñVØcƒÚ+8ŽŽV¤�!„x ¡àYÆ¥HpP§%Iz¾kWLt~\zÏQ.¤‰à¥ÑU2„øÐp!“Ü/(ub¿ÊÀO± uYäòj^ ë˾0X¶‡™õ„²8~ÜÍóSV ¥Vf'qöáÔt€Îºº_æóÌ-S5µÌlã¡sÌôCµõr"•UÕeë+Õ¶Áû$o­ÈÕUµÎ¼üh(ñ�›÷@®Ú‡¹PoÈxÝÔ˜‹kмÊe™©¦ræä\Õ²SR7<žg5|÷žqðç+ÿ¡µùѽ36ãäV™—Ê¡ ¯íõª²1üÔíµ§@!C„ðE„LômÔ9–Æ_ÍÞç­‰Kãó3Ï%iÂ!¦_F„øÐP!³÷K­vVA«(öiOoˆ}H {EâÙ®MȤj‡Ã¼"S“M€lÒÄ¥¡˜íÒ†²¸(ȦÄgÆÀ¢uGàÜ)3×4ehŒKdX!S†¬Xz}Òp‹™r¿k…Mº`õd÷!ã„2Zû:Pf§7+60w¸R…¼ÅL•¦ôÃÇPÊÌÁkŠ6Ë13©öÐU®USuË}… Ÿq¨çkîSzó1–v\;íN¯=Ü%<>Ô§PªX „E}¿%w'ÛSl… !ä¾°¼ˆ�™pVɤô.dÞŒKëÖwïÝ5‡ï¥›>™à:½·Œÿ*dtèfÁülàP¼`Öø‹KH‹¸j!s×ÈäQ‡²�–ysŒmQLj �%Ãzò0è��uƒWɤ»÷Ôåã¶�)!Çü;E“KGoÇ3d ŠbøTM«©^WÌëÑPMPÈ2òž ¡2/¤7ÝÛX÷îð[iŒ£~™}¼?!þ3LÈe¹(šÒ²R/VUdÅ® æÄsÍ�©¡,¥ƒŽ±,V¿¤U螇Ó�,vÞhÌakƲÚ`\nq®h‡LsJ6°½‚[|ËÖó Ke¦ôB¦Žü22Ìí+ fÐÑ>µÙ6”4ŸwßX®b1ÉLl1'÷UÅK¨1/îUs :ÉZ_!Ãg.dr8f]%lÛ;ã´ }Õ3dʨóô\Lu÷¥ÌL+øÊztìÐ52„�ÐéõM<��íFì�‰Dãó3O‚–ðzôÕÓ]«|žðKõïÆŒbÓÒt,Ök¢øs«\Jqcù,ºk·Ë GÈ„ïÄægïx<úXŒÏlÌØ•Hl6ødvú¡1¾9¿7û!xRäÁÌỗ1{ÿ¼ŠG#‘Ø >|ù4Ý îÒE2Ø;Ÿ5’(Ž/Z }�i<ìfÙ˜ÝHö�ÜÙä +ÛMCZ2à!#ä$dЀMObÄõ¢â€£àˆ=Ìeð/™ûþ'[ýêµmM»»îæ2‡þ²hWWÕ{½Õ�ð>yõZ_¾ž¾dª#°úu$›£ŒÙ/ðsåÌ*;›Y=sÉǤû™Z p™Ñ1ËR-šW•<*ϺÝ85HcÈ™ âá®pJ¡?îNêÜVfÈeº=†Oõþ¸˜¢Iä[äÝË´ñ»œIÙÁ\¦l´¦æ´º6ú™ºÐ…ªåæã~j€!r¿rhB22,®gzRõÒ\Z†ä뱯˜¥¹¦ÅU]’p–ÞšvêéL†Ï3ú™43Ø—èÇÚÄñ߈wÍù*½È\G �ƒŒeį:9v¨Îµñe•ì¸î»†ÔnÔ·,gEàá¼¶Ñl 1° …(…B‰"á”ä€Lòžù}É™#XH®¬›ã‚L:†ó7¬îhjñ>“Bí:ÄîMˈל“LC†ß¡ÙÒÌôÒÒ6ѦPL‚3\é ölÎÔ-CëgŒã®\�)OÍn¼æ€ŒÞZŽ– Ý둳ߢË1ìÚ I´ãõ®VV&¥èbD5¢‰’ 2Fê†=|j¡Òææ¸\Úmžø†î(]¡îƒŒ/_¾.…Åý ,³ÿž=á ³ÿÁnÉ'œ4~‘±õ;Ç�·œä7v>uè-�‘_l6Oå÷ȼE{/¼Öäg|йü„�‡|þ’uýÈæåósYþyƒL>=ÆyçŸÈ¨Ýú°/É?vžŠ$~tñ�/_¾˜¾dT€?¢v PD’èCÜnê�(Ô°wÓ@ ·ö±a(É628-R¸ÒC0¨2€á–*X\ƒS”FàPœÙ­¡ÞS€i&úßy_AŽ þcü%ônìùØ �it îé’²ÏÑmBÅ@¸ÀCÄ�é®Xð7=PØ€‘—dÒS€XB¶Ê!4ÄXgÍ ,�¡J1õ˜�…‚yYD‹îßLï2yHè´C,3`$¨_â|˜ê»®» 6qv¯H·Pñ.§Jã•&¤dŠàŠ/^‹­Úd40$Iò±Úd*p·ÑÛ6¤ �1†Š*ñ˜ß]¤(æ ’XÄA´&ØP¹^ɬªÑ³ÑCpJ •Î`‹ Æìsƒ8f¬µnÆôlz‡Ò&ÈLpà0ÍŸ£ªf·È…àÑ}`:xéz‘’ÇŽàÝ•�¼x1¤)XÒd nV2RuhÞg˵ÆPõßZæË—¯oÅZÿ½`ðäIøð�|ÊAæñÓÃð>+ÜÿÄ7†ýzÞ;ù,?º2Çá·òÛp˜L¹:~#ÊûŸ†7[¿ ‡ßÑž`Ý2ÁÏ/.ž¼fÎ>^|{|ð˜xˆ\¼Ø?>x!ŸcmNð§½ðËwo8ÈœÈçþ†ܫö?üÆ—/_L_2×&$ãúº¹R”xVWoan·:uP² i0R$’;‰S´'^AW5êsP²¬1†Žª7*¸¦ë \ßB›[ºcŸEXæ¯óPjhÇnþL/’ %ZµÒ”´à�93U£f) ÈØcIž®Z¦ªÑžA´ÄøCºt`€^Ï>�VkFî !HT̼dTCX�QŠ(V>�k2'8+iÕ³i©SŠ.[k�iA¤5h¤:�±�™�©j–ú ƒ.¨9Àr•-é�#²Å-$ ·ãºã6¾%HEÈx—³âàJ®ºVއzx+WÈårLr¹æ’Yd†Ñô,¦tæuaã’2}h·:ÊóŒ:» 3c·‘b~¼I7ª¡ÎÁ^éDhpê´(éÒ2 Cô‡FÆì¼1�‘ yE9Ê+ –[\ à&?�„´ ÷_€^YKD–=ƒv_�U£Ä˜ºîŠZo-k*V)�3áJdzÍXª1XDÁÚâ±�Y;½º‚[×b\6Úsh6R¶£TÅÍ~nó:þë—}ùòeÿ¡Ëà¿ÃöÃ2¯yÌöùEþˆyšGrðXª‘ÅÏþ²>üíôÃçak‚{؃–ë�¡Úš¹—ýï¾w·‰}÷Ó±Í&çò>ûúÀ:ág2¯ƒÁ—ˆgç²øJÿo#_¾ž¾ªØ?«ÄfyÞЇ�²¿KcŸ†=~¾ÏOg Î>'xöŠÈ?]›9RTO^Ü,ï8‚ûcÊ-5Øg¥bØ¡x h/¯Ñ4TÙC‹;Áÿ kðŒÁŒ@¦6¢ðY욃¦ó³‹Â•!sEX`Ð�l*§�ñ–äÄ c}Üôc2ìá<Ó೨¾:i°/#ªÈ0' ^i;b#'pcûO� º ÈÌaÂL'/Õ›åyGÇuÇ,XÌÝO‡›­ ƒßpE…šP³�„7U 7à‚Lä¹Íމ²S¥±”\�Y¢£@\ÊܤݘcƒŸàæ§õ-O ÓJм ¡¿¤Jqyš£P(޳ÕY•ç#"º×E´˜2|p;àOQ1”E®ì©zeÖ ÌŽ8Ô2Y²gPÀ³!¼à¯Ç_Ïôrl kœí.=vDïLµ~¿iâÏÅ·J]ZƒL¢Y¾î&%cú34f]M6ï§ Ud|ùòE ã¯ÎRæã«þ¿“â�¿Ê»�Ì{ùãžsüF–åw?‰ ó¿ñ[°î™'4壖­z%¿Ç=hD*2/‘£¸qd|ùzàú*� \/¢J+ý[Nq~²ö¶³˜Î›=Ü›ÔVšv[7@ °«V/ô&Üa#×p,/gÊÀ¶tpU„‚h/ ƒáúTÑÿ¿ƒÌ”"ç"™š©´$”Ø5&âH+IÝn Xجd¬ËH4ñŸæc¯{˧»¼JšæGt<¸�•=ë–Îñ²r苃Ìt Ôší±N—=ÙdL¨:;ÄÚBG ú»¬;áfBºÀF$—Ñþ d*biùûŽÜ|€ 2i�4æ�¬K”®Ù™14Wvqˆ-d(sC1ÿæMRÛöÉîºr>.L«ƒ3óÌÍ”¶h©!0EfiC1È{]ÜôÙíÈk|;× =]ÒÕu;6õ Aæùfµ~¦NwÎã1­Ð›jÖöçp‰é±#xÇ Sºçº‘@ç’ 23g…TU§L@ä²,¼c!šß¨*ù?ˆéË—/ÚZ&*|ñåýï2æ7‚Œ)PÏìŒÆ/N ÌoòÉN ó2Äù¨½½ýÃSùñþ&ȼp-ˆÖ½52Tº.?þîeøþ¶ƒÃïÿÀBž/¹ìÉAJà ¾—ö·–ùòõÀõ ƒÒsWÏóˆW #dk½Á늘¨Ú£ Ë«Ä7Cç?!a¡2"¤!”10·-yô­¦zñÙ”�%]f§÷3×Dÿÿ2EfWM:q¯Ë£·Ð¶ÃÀ ÊÇÒUT—T4T`£lÕ $ Â>÷꺳㪀º…8ÖÈИFŸSÈ9 #§:À§õAÛdô1\:’Ñ®ö¬Š ­ÝÖ×®ºqJƒÔ–™ØZ&‚ÌvTÞwŠ@ê’ 2óÊÙš5çäaI›³D±ôèȤøªSÌO7‰T^�^Ââ^F†¢yý ¯Q¿�çGj©Ð…XV"ª¶,€’Ç…´2'|DoUÅ,PfH©ñUZ¥Žn¡è*‚Ì•žµœ¤GÜãQS`â~ÁV C´#z§V©žÁ8í½˜<&}8ÈPÎPPºTR­Þ ®»PBu»GPõAÆ—/_[ŠýY= Š@†:_Ù”ðQÞs d�ù z¶šý*û»ë[AuðήÞE|ħ? ʨ»&æÑ‚ÌÏ”QbæÞøÅþ¾|=p}%ÈP�}KYÖRm¬¨Rw֪ˠñw`™ˆ<–;» ŽÐ WšW½Ô’ÉݳãîP‘k{Î’‚lD–ÜÞó¿C±¿2L&�©Å®6ÄÖó ÂKâÒ¨R "’ÈxT@l’Å7p­UÜ=–4$#r¦¯A¦­Í�Yk�í2uˆ:;Ä.ùAmž®önë5Ü8_³Ñ´·‚Œ&‰«ghX«ÐjµŠ0jµXÐ—Ö Cr£vUéè.ȸ2-D’Ž%ònÌ�7ÉUv£FF¦ ¹— xõŒxæ|_`u¨ª$ºT!Î$iøÔ¦º·Û‡ ¯_¦ü½~™’�GH¸ŽÎ`­’ÇÎVïºïÅt¡ m€Lò’Wƒ³5ߨI%çvT#ú ãË—/ïë—OäàéÉá§ý � Â¥KžÉŸùq�aÙªdq¦=b�­oÒÞÉ« ¼AHŸå§?^ì¿9ŸdÞ:;Êåwþë—}ùzàú*�!Y �ë´ó$=xîìïbÉëkSióN—ÈÕÍÉý<©A§Ü×ÿÎ!hân´(hqµ4(@WÌÄðÍQÓ€èÿ?ƒLjÈ ŸèÊ´£b=Ò‘ZPÇyì†Ò�ñ¨nuˆ•ì0R&µù,ÒrÌÕ\ZƒÌ„2dÊ$u�éÁ?ÈPEÃpRþ3›…„¾Ûºßr@,¸&›ú–’#íï_¿\F¹R¥Z¬”­3ˆ/ê’«4&ÆÐÇ^ ¦ ¡LIJ@$3ãÀ>˜‹…!¥•�!¹J:ù™4ÄDNÓ©"ÉC¯Ž�±¡Ø#� ¹ô\L¢èÂÈb‘¥‡Ú«‰|툒Ú`£ä|�ñåË×–Ä|ÆsT:Äí^”.Á=_„5¬„þwúI˜—2{p8êâ§OtÄízAF´N瘎edP¯_!¯p½ $Ì©=? >! ÒŽ2Ç•ÿƒ˜¾|=pý�QoftT°º•ͲŒœ­�;Àø£ïþ‹™�fW¹› ÊYÎ̹³~kPÆÝQT=ÃØ# ú÷FÞKªüžm™¢TŠÐ)±ë–rzBIcº¤qcßñ‘Ô$ÈlSÞ´ÃÔ,ÜJŽ�iÃTšBÛê#5!û~s qg‡X‰ê_4�oïï¸îSˆy:Q‹ÂjÛrªÿƒ˜Mµl�Æ‚ï¬Êeƒ-‚+{QÚÖ�³CüuÕaKjQœ¯GïI6Tcwƒ¯i+2•D�ÑœKÎa &¶ãÏì£,È[Éë"gqÂGÁÒ lJm꼯(y† Óáí#ÈàÙ¹S(•òxð«'õÑÊcGôž²ΚF<“‚ åèYw¤[–NcéÌÇ %<µ¦äƒŒ/_¾lýðèbKÆä@&�9å°‚ qB•ö{Ÿå×ì•êÿH ƒ<áêÉ—cp,1ˇ㭠#ZG" ãLdÂT³6óT~„Äóý�ÊÏì‡,iƒ–?¾ÆÎ_qÐZ�~øÆ—/_LÿdÒI‡¸ß«=låë�@`å†É¬ã®iÓ”6ÕË£ úÝ~£^¬µ„–šk`âD}F`…�všû�R‰{= ú÷FÞ3 bµ­ 3a‡JHõ‚Ì”¦Uy츀BÄŽA'J¬™ô_ì�ÏkAÇE‰|ö\öP%Á¬¨ØxP$F==dYpƒB/<"9T!‹iN¡†˜¸!¤aM iéÅr ýK¼ûŸ8;ów£õÇAd¿—íÛ™yo:£e?̼™v[¤xpGÏéc»Þ¨È°²g¶Lî›@f f%°œq�"R£ÞtÞ)@Ƨì ŸZÑ dáètãÎÇÐELs‰ %d�ÅÔ$f±˜ àÍG4œˆ_0O2q”g SGÎæoù¤ ¨t³<û€¶Ó‘mø2‘T©â½|Þa“DDðš'„Áå^ǨIÍX9•Ðeõe6íÀtbŽŽ¡0PWBÐÑ´Å�ŽËf*1Æ"8¦ˆJU dô6mûð·ÝmåòÔˆ9ZþØw™—«äÓn4?rtFúD#P;ãQŒ#óù:+¥ãÞê®Å�² ®œ‰ßn¸�öøÙ>ªÈDŠéämBZ‘¹€Âã�Ñn&˜ùŠ¿}tY[Kð£�ï–¦Ýc�7ÛdÞk—“a"ŽH‰—¬eàw�òû�‘½3=æíSë2Èdµ;¢%{�Ö8%³âÖÎäcíÅ�µ‡q±"“ÈjÏ’ìqW{î\"úc)Ò?¨?ØZVF·M92‡ìñ™ÀÜÑ� mþ"5± ¥GçØž8š¹a€58ÈaÊ^–&Ø¥úáÕÀ( Î, è/ýåJ ÷jØßÆ'…÷÷ç†üónÈÄšÈU”¢‚Á“<“¾í nÕh°§÷�qr¼�3ÃU#xogЖAf€)Þ†@†±‹Ë–ì&<¾ñIÜy8ø9ÈP†‹ÈHâºÊ7†1_Ø9帷9 öãàóU“Ž 2D2¤ç2,f…5B‹QFòÛDa±ö86ð‰JÂ92‡p‡Ù¥q"‰’jD68(ÔMNMCƒ�û1à…šQ¼©Í¹I/ð6¼y—oÕrÑ ¢ù@] Ñ2ô¢Of‡– <8&Ü‘Ù#RSªÊ ƒî�Mí¾ø·Øf›v –­FÀôxÊL1Á.š6‹·‹™âGŽ^G‘ÇjdðZí i‹rdZ>FA\rèY´9VêzEÜΓ—ÏŸscÈDŠé$I梔#£=~ò,~ÿ2� ;@ùÎ:݌ϲ^%<‹k¸uW‹?xr][ s1ÎÌ7K?4íÕK¡G̼ôR{™½Ë²ò³Éêýš¦=|ò`ûî yEf›uoíºöâ7y³míÕýì«õ¬X:›ÝÖ´í›I-Îyê!ë{ó2%í,‹Rd"Eúõ Ó² OF£‰Ž‘Í̃2ŒÉ< =€–>¡[áÛb7,ZÂA·Ö¥ ùÛäj>}2ËÇÿŽ�M~Ù%£±9Gš7/ó²=�âk6R|õ˻䜗{æh%ÈØc¸ŽTÄIEGwÚ[.4ôÀÏ�"r1dd  »û#½N`í2«<ÑÑ µ¢ }gÚ™xÞXü~}g%ÈH.\yЮ¿a™r-í¦Q9å¸;ÍSЛÒN=Iͦ…eÒ?ÿ‘cŒ$wÁ?û7¿2^‹Ýý‰ÎÉE™–…L­9.bj¯®ªŽt0IeÊ�ÇP´ÚÁ�&ZËjpL æ ìMË€á6¨|lÝC;|¢Öd™‰‘îQí¹A5žisu¹Ã4ÀHŠÿý/ïN¥W¬™XËGY. ´3Ï Ø|s=à ed5ö }äP ‚ŬÞN¨•ИÈ0_å ÀW(3an¹·ÎÊ9Ã…k†*½Úru£Ž‘9帻¹Òó·ž’rôkrŒ)_O®a0&èmÆT�á_ÖE~ì›[ 2B;=@÷dmædÈ’šuÆt·Jï?Y&3{yºD¥ l:]d¸ >cÒ&sÄ0ç1c³ Àmo¢¦V•O-ë”uÀ¯ÒÛc�ó�§D´óÏ� ·!¬v9èÝh¨øQ£[&«9y­ö[™˜×�9Âúà@¦/fk�¥:tif2‘"E:Ñ›sg/„õèbB²S“!ë¬dœ WMPÑ ¥.­.W½SGT%Φ”³Ð¤]_ºI}äÜ›3‘"Eúçô‡§–Uª…RÈlUΟNΖýÕ8Ø*ý¼Åð§¾Õø±°ìz'ö‹¢vNì7åÔ[aË+�¶Ù–Òï óS•êöoŽ»ªØß—S¨þ`Vlogët~:^)ìôu¡´¢^ãX*Ùj;¡ÂÎtë¸.®ìx¶2GJUEŽ7”jz­Õ¿}¥n‡VlÅ�]˜ž£tf•J^GòZ_]5™H‘"-uûܕąÿEDN"»LÑQ”¸rîö™H_Ø»c…�(Ã’Çì[¶X¶[‹eVHeã¼�bgí,¼ƒXÙØäB9HN�(! G�LþïïUñf€è<2=b^épl;™üB¦ßãDì`È~dlS±ýþZÿNg—SšÜvs!DÉ7djB¦Ëâ³miBѺY!ƒ÷Ñš�†Ë‰d6»ëuNó¨À­LÄ�ÄÇ7d*B¦Ëjß¶1¡hÕ,ƒ�ÁûhEÈfEr›Šÿìoº›Ø.¹ˆˆ�oÈZ~ô‡IP©ÅƒË`œ¨Ô‚�†lžRÉÜ• Ÿú‘ò ׫#“ U÷à2'Ru„ ÎìݽmÃ0@aÁဴ,]´j2‚†Ráe¸ŠÐ žÀH„,’œ Åäé}#ðØ<œ~phƒ§§Ë~q:U2„Liii%Óû³êblj�l‘�Žm9ûùvÙ.gö1@½þ ™¦W2½?ªÉ: Ž…Z2„ Ъ7‘è|)sмTÌ2¥ÜPÉôî¨fó08Nìc»ˆ„ px)ˆÄàv+s Q$ð½2 ^¦�)emæé²Þ™U5Û‡Áqb³ËE$dtÝûMDæ0\�ÕÌå:„YDnü¨™-dJY[I™Þ•UUóÃà8±Ùã"2>�AÜ c fÆ�)¥Eñ Kb¨À’:BÀ·q sWâ&*¨ž9dJ)ߊÿô¸çÄ0ðr_‘�Oª%d€�v„ _ø`ïnO†¡0Œ–B|çðÜZÅh�L� ZJ ¡Q ­>¢sVxÿÜ'Ž1 d€é@ÈÓ2€�¦#d!LGÈB˜Ž�„ 0!ø æB| óe|M¹2!´ ™ýFpìÆyÇÊ)#d€F!“""oÿìÄ#9"Ryœ!œ¨›rYBh2©t)»‚{Èwço&cLX%¯\2Bh2)b»ç î#"ýg'j,\2Bh2{ùTvw±ßŒ3Rǘ°RĪïÉ EÈ‘·Wp'9Ž›qÆù_™ ŸšrMBh2¿ýæï î%bó�Œ =’ù“�(ª ™y+q÷’#]Çê�Œ kåUß’2@ƒ�9ÇVä î&Î×q†z cÂg¦\Òƒ�y(¨ ™‹�M\®ã™¹}N¹$!4™2£‰xû6Ö+2&|fÊ% @ȬHȼ !#d>Ø9Ÿ÷‰0ŽÃBÊ÷&â�ƒ ö ô$þ@©ÅàJ SYìAr ‹4bCKO¥”Ú”¶´`[lK/[a/e_€7ï|�<™ Ù&u׺º®Îç�É$3“™y<<§û“H$’çÂ[7nú¯àÞ¼u&‘<µÈtôNê€G\Z¹‡�&zß+íÍ|nÒ�Y®×è.‚µr_¡ò‡ôWÕ?zí¬¬ÃGVÙTŽc÷uûø"l½sŠÈèF/õs¸ùvtm½Ý�vMù³Ðq€>”IKy$Ìb½&EFŠŒD"‘ü¸IÿunÎ$’§kÖÐÝš©“øU›®yáhœ½1Ó×G³`Ý0A…n�¤L²;æ×´Öç×s,ᆲ ä–1–¡l÷—)€î�0ØPƒ7ÿmé• C¡ ;{‘�æ„4Õ¶†q®›âéåüû]Ï Df^±ù Bdj›�çŒì[‘±CoU§Z§1Rˆ*ÆáBÆŠƒtTo‡‹0öe*{0$2£ð¨¬èœókÛ)X½y¥iñàU¼±.^þZ½Zln+õ¥alëþ]Á1°wÿ…U]yWçmM™®H‘‘"#‘H$Ï�túëG™¯Óé3‰ä‰Dfí!n†Õ4Ô|obÖ÷p‚$zW^—`-^9GÖÐ-ý ÌN…TQñGÉà×”@C!–7nu¥Ô œD¿#2f©´Á¢T*ÍRÉw€.«Öì’úW–§è+ÄUn 6б¹L�ý¤ºŠF;^tNd€ /jV-Û¥.Ä_âg/'�‚ÖõE†?-+3–.Z×v�Èt�k»ß€Õ®*[71ÐTnSݘ]Ûe1Ýú“‰-B`MÑ|�ÈìC1œ¡GÎø¢1™lãÅ/–îÁKq6Ⱥ-«™C‰ŒsÚçNJ-«‹¾e­S¼l´Öí+ RGYg¡ît³³D®|\djjÎ÷Š1FA½‰yä­ƒmlCb�È$AÄJ IdBb"S°¦¥ŽïM¡(ñ%·ÚbcV§,?‰@t�zƒ™"EFŠÌÿš÷?|ïL"ùoòÞ‡ïŸýùàÃ×"µW?üòd‘yéq�"#y‘!Š mÊ¢æ ÛNf2kž7¯¬py±Ã¯µÔèNU~­!¿N †%‰ •KDXÒ#ÀP¢ôHl^,„ºQ¼€Ës†Vô']&`‰Ÿ÷øEø¿í÷Øø•N 2–Š¶È—)áô0RŸéð�»&{QEFßP^Ì7 D¦%þxC4ÛŒwZfÖ“&Ý©n Ý_Tt y=¶ˆ�%­û~‘鶸õÐ'g¬ú1Ù#?!ia<(e5C"ÙÊ„‡ŽÇô™Ký³šþ&í“#ƒ�5�ctTd¬ÎEn=\#Û 7ä>‘I"ÐûE¦=vúêå‡4û䫟ΎóÊ£íOò|>ÿê³æ¿Ã·¿Ui-'ñÎW?žÔï�7ø$²•ÿ~gïÜzÚ8¢8.mDtF MÀ+?’ý€e¶H°µIŠl”Ø2·r!¸„€Pi€à„P(‘p3.q 7!*Ó–‡"T©•*õ±Ï}LÔoÒÙ³³Ã–±kH“6­üWâõxvggÎÙ‡óÛ33äïu$c«ïÎM‚LRÿi½1È 6£nùÉ8´Ö“zZ ãO¿a)€)¦óàÇIOÝêÿ! Ä™£“ÎæäeØf sžOÏRâM#;) ÈÜâ2eJF¤<ˆ¥ßµl7.W® ÉVµvt>fãÈpy  A&¢-Ä`9˜ôª…qwMÛa¨; ²§§‹þºÖ>aLQpw d~ƒ¾©íO¼”ßš±XdÞdŠ‹ŠîñB^ª#Ý‘6&ÅUCQ6ï¨Ø•¦´¢ŒøóÁÿc’)$Ý #µ¦r ålrHo  ïˆôÖe$yúP¹©)ïÍÛyDz4½}Žã'véÊ!ì[VÓת£ ó™ÎìÇÞ_oŸëLÉíó·û#“â7~¿Ô=s +›¹$½©ŠÐF¢Zš.H¡ÎÁõ\ÍÊ5ëÞõš�iZŒ;Ö‡Sñr�¯¾²Š•,?˜9sûËã‘Òù¦¦éxijºÍ vdƒ®™Áîd:ÇžÅç”gc¦³&Sd’Òë=ºÂ¿}à|F´µA GüÊá¹ÿÖlÙV-ô)‹_j7YbÀ¯ËÈÕ˜Øâ�a^\#jÙQ�YžÂ7ûaú¯h›Šô™YhÕgd`™]¼ Q¥Éµ4ª‚Lõ.Àþ®¦nÁÞ0ŒÚWbä!�-zc€LÈ?éèC�eËе軫o²}Î÷©ávoŠ>#ÃVÃW`H„ªßŒåØNb�‚V¾)€ÌøDï…Qœ*æ†í^EeJ~†v 2ίbÀ:ßé-ÛO¼F¶5ˆm×±�¸�Ø8Û»]H§´y0Ù%$PÕª±‰;«_phB� õõù{= ~™{0W‚ˆ"ô(îYÀªý`Dƾ”ßúõldÞd²œg…V¸âtÚŸºœÎ¸±Ê§Ëi㥻é.§@Ŭ̳».þÇüŸIæ c!;ª”ü$�\7–@Wz' Ó9CHÉ{ 2yôÅd¾%n •MòËÕ²Ó4@Hý˜Î”ïÈ8ÈGxýöË`ÖÇõÈL~y*ÈC]ä­9}âH?í5r{Êñ@fÌ|û²—ÈŒ³z/D`Žâ&pãû{ä½ßÙL¿ÕS= j7N#§WÁ¯Ýh1ÈÌ‚óHú.Üpã l ‚A@Õ‚dÄ&¶@UXphB�AÍ×ÂÁaé…Ò"ŠØ£¸g Áa¾ ó;â¥ú[‡<å]I�yc�148ŸÚ8È\tÚÇh|p-=Ý'r=ýR2ßÚs�‰Yis¹lÅ1ÿk’y÷ c`Ö}w ó”4‘ï’ ó ÓA²ói¤]å&õ†CSþWAõÏ‚L1O76xg&I²ßE -ûàõ}=ù^)åú|’d(ñ⯤‘šûÊŽ7+ñ{€:ÒQr<�ɼI½IÎèû¾–«+ÙÉõw2s®¥ðì«WI�IJ¯÷ dN÷bj¥ ¶µL‹•¾ÙwC Ìß7F¼Ù‚2¶±Y»œ;’…Ùƒ�Qp îöËúßi;‡2V+ °¡ÑÅ2Û¬ µ Ãd¨j´ø“â—.´îC�A=oC™Uj­ýL“*¡"GAÆ 5»æÿ¤Ì@¦Kˆž@B2Ì+©…¹[аUj'´½ ÊS„A¨S°n¥d6Ý0ʾnÀð‘$ U+D°ÐÅÔ¦^uÐZ5mÊ7…H©Úåò½Èh×ü"”Ål�øKˆ91Aæ–ìžä0òRc›mf‹Æo¢A´¾é@Flâ9;+$841È ^âýƒ}˜¤sczÁ�¶‰=Š}V@·—YÌÁèo½«X3=ÑhudN2†TgªÁÄAÆ�cÃcš3ÎT�´tK‚ KÏ|ø¡2±* ®Å1ÿo’yç sYl¾+�) YÝ>Óû 2Uï1Ȭ“kX2|–¡7åû2οz|œÿÈœÿK���N>¯í{<žÁN® `…Í·®â§ä¬ü‘8•D3‘±ÔLÎK ”ÑM¦%ç±@¦t^üÈŒù®J:Õu¿�£û3g˜Ç’kd’ôž€Œo‹}ë…EvµwñeðD‰oÕÚ-< Ÿ¿¯çz ˆ=¼E°ÎLj‚ýñÿ ¦®XÝß¿C1úûýÈlÕ·cßmúV{`R2Ëp ¸<ìM?‚ W¯jƒ}ÝoQíeúöQ�™‚(²•[�_j¡�žÒ«å ¬J“À…ý hCm‡Uq´ƒˆ¤dºÀäÛ—µ&QÌ0Ç5MRç±,˜^ãèÅë'°8Á¼×C�±F£!·<dÚeë(=ð¡¡øßÊ@k¿‰×ÈMp M2ÁÞÞ ÆC{ظ<¯$Itj{û,¿BϨø-%æ`ô·n�ž'Aæd sÉÙ`�8Èpå8s´àçÒ‡�$®\çeéd íÍ’d ‹Ÿá±ò©3Á¼²ø$“çº‚Ç ×'ì‡/* Z ùn]ïOÛ©æ“\Š ¥Î,»Ë$ ‚«�¶µüQ>–Lxj©ƒMyûä\Á×Í�üÅëÓ‘û¿8ë—‚Ÿø8‹¦¯–:08�ßÖLEãÇE�ºòétCB�‰u›½±ÒÎÂÝ Un3ýDuøîòžºÆ:4: ZÃ%•W¿gÎt<5=¬¼'Y.WãJ †�%C©Ðz`¸ñýÕ²$föb©¹r¹Ä$˜àÄ�ú5çýÏò•® .)r©¾î2 ûR¥âÒ«?¡ëò¨9¬¤=šqÄ>ô̧Z¸êʉ9Òñqc*÷^®«²Ñ>ÆY¼¥ ä‚ƒn\'™BâÅ ¦<¹}xôöá c¸÷u‡=FÒU|¯}TÐÑ’§öÚå*©'n³ð£æ‘‚’ 1+ðÛ=f Wn~ã9‹”Õ8�—Ø>cÎûßç4�Ét4Þžn–PO]®–2í¢º³›·Qb²<ÌÄã4Ò‰‹TJ(7I¥f]÷ÙT+‘Aúy›¨íûíq¤E:&È|CÜ™’ 2\7—éJIþ[S¡öS¡éìes8Ș’ “Ô{2¡mMcaLmbì–ûø:™�U™�´YÃvÏÚЭõß´âõ³|ux¿fOsAP 1\P¾ƒˆ7­rµ[ÚòxyT]e³úÖÌ«‘°§Z2ÛЃÁ슊%V6/hAfüüÄ<›6¥¢È$ûúÛ”H¹v36G·_®–¯2{l?-+~²œ½ñl™ªeØ-S%ŒÝ¡¢$("e~Ÿî‰A&Ìÿ.ÿs¨Ef\fI”(úF.ߤn cBwŒŽVŸÝ £oÁ^¿‹3ò„â4Ìøà^1]è/·úyaÜíÌ>hÎà.ßéK4ˆ2B\‚CedV5æØE<ÜB‡M²lCMYYŸØ£Øg§0Ó‡›Ù…bFëvV³SeeÉŒÌI§–}Hÿ‹ “êÌÐÖú:�(ƒÃa@�áé=È\p:1+o8‹pL|’I%WÙœ��ñø“�úoýsö–ÛKf¼äÞÇIe¤=¦Ÿ×Ä8³æò ¡úÙ€oð¹òêéçC%²ªÄêX"ªª‹?ª¥gnBÖ1ÞÕæÞŸ—�û…‰ú#Ù² Õ �ƒÌ%B¼c AF¼IóñùÈ’ � Õmƒ›~Þd‘q-oè6¹^G¨²U¬H÷Ñ;fµz#-æÔÓ�fq\¢®®¢\>©•Š0|Ää,ªõä‡ÛJi½X4�¾�ÄúÅG¨(_ .$¹xì&…è¾é„jÆŽ3µeìsÆ›§½õ�…li„ÊÇ\'>!;ͬ¤tÇ{ÁA— K륱323$K‚)Of}DûÈä·Rì¶)žCC>3¸Î¤‘p©þ°ŽVo©!Fe9~cƒk!¥^/±VÐ�ú„öÉG§T2�ÉyŒ=´(…zÂÕ³�/ˆ0¦l§€Thg|­Ì.¼Ãj—rì&̨5‚ßó8¤ã‚Œ¡Ä ™/±š }odªÂfó° È2›£ÑS¦³á(=ReÑEÿѪ¼|Š6�¯¢æH¾) 2Iýû CCÙ‰Q¶FfKÙôÊjÚ¤ÇhÅÍÊ6ÔWû0®¬}YпóËû <ˆlÓ«”ªý/e˜ÓåŽ&_P~•T°¤ÓÂ2¦R†5�…B‚/ÁƒX1AJVJz�™7b {À"â!¨í¢µe íZö⹺Ãr;Û ­M ŸÝ0ŠpQlY�£™D¬® d 7H‹µøkÐ/«•Ú)ÝîVºU«J7ñµ¿_Äó)(K96ÈlÃ6ß¾l…çÃ0‰‚àu[¹)ê¢ÍmXžÞœ@oP²ˆà”Á Å!›,�NÀBìFðQØo£g–�±+– '­ w½Wó0»lì� 0ªø»– Mp M2ØÅVeY)‡fô«ù¡VìQü³~먊š+ʈWyŽ)Ö®hr�Ì›-öA†ÈÓC¤qfñß/;s%žžÑƒÌ%'kG¨,rZ¤ÂŒ±Ì#�Œ2´ø¸Ù&Yìë65îoºd(L_[S¢U[VVV)~œÝQZzW™ºïR-—H:-=¢§Þ&®ò;WKK/+±$©)ÎÌûbm ¯+|ìÉ(Lm".�väI¶F¶Äa�tä ÅäëDý‘šH}ÃÝÜsF2— ñæ&ñ&id½è‘áónÒŒ�deµ�Û-7KKlhßë@¦~¤Êr¯Ž|…²^1fK?C¾@�ñžëü†ìœël!7…q5*_UJmÑ9³c` Ód¿asì¨ýI'u7‹Ÿ]À% ‚ N¢R×`ºØâ«CzÓ»D™îi–Œ¯r õ¥‹ f)² öù‚|¦ZØw&VÅ;`·Ùëkˆ.R—f²4w“4Üø‚ø>»f¹bÌ&va\i�\#Wl�q“챘¦<™ôýí#“¦.Zò�tu¦ð~JšÒL×~šñæÐB5Z%)@ãeÒ²mi­ä”t ÈW1*?¤Ç’C�©Ï¨ªó> äZ¿›vÈùON}XùäÔŽïÜµÂæïH ®€¡�> %YT91ŸÙ'˜ªŽ”`&+‹¥•fsH«½Cè¥3Zì>qH ÅA&±�±á ¸ît¿ �ym¾Wõ:l¾AÓ1ápÆÝ׿Wô·ËæW¯_¿·+']޶_>{ö^ôõØ«h¸3 2Iýû ó<òêâ⪠‹”H†ao¦6zdØPøä@†ýÅëœÇ”M«z…îOÆhÛ./€gŸÊà>­Ó‘ydCà‹þñ+Ç®�<‡ïËÛ4�Yì‘WŸ¸ÁèׂéÕ¡m7¼r�AEöÊ6d$ÌÈ=Oj!ª‚LÛ>xZ·vem1Ç­m¥#ÒþØÌ‹•r·°kmra.PÞzž�LjŸPÃìâ�)÷yv5°Š·�Ö‚gn{ŒÃ1±àö¨zždV!Ì·+CfT“(Ì eð�ÒÖ•V°â^Ø2L½\\€žB LìU+Óau1`Ü…Öx�,€ßS³òÄn,†<¬ÛÔ…Èc[[ 0Árd¼öàØ £o‚Kph"�©žcÏÜ“}¨ig‰AF<‹×[»5H·)‹þ$Èüs sù^šÃu…‡§òsL<ÚNO“T�áé=Èd_Á¡Òä¼n¹ît:]—pŒ@2"ÈT’µ/ø–6ÃWoP+oKZìh,Š3ógÉ‚ë…É6¸iòÝûzÉû€Ý¤C=•&,ƒé&±ÌÃUD YW�,KJÔŸÒýH-ñئä¶=áÔ2á&†:u=ñE_7cÁ4’}ó™nã$‡dJ1¥ä]C—LW©¨‘� CƒçL²”)¼ÙGÇe ‡z(‰ºãµ)‘c™Tu\F]ë†3$G0ÁIôlgÀ„ywžàdfN©]oaÙ@J°�efûÓBOÕD�Úò¯(t»¾s�§Á¨"ó± ã!\��LÕcâûnä[‹`Ê“IßÑ>2ù‹ˆãˆ3…çÐÖØÉŸÔ9Ý2˜er]½‰ïšX‰8…ƒÓ :M~QŒ‘–Àï¿°Üa�ó»šÑÌÄ‹AÖãð,¶ó«@ ÈÒ3|&.HU7¯Ú¤4‰Š”Ž�“íŠÙ‹¥B²C#âÏä‹w 2ÒÚwú’Ñgøû ó,¢¬èïl>{ö‚ÍA´S›ZÖŽ .¤_sÍyøù: 2Iýû s:øÒ Tû¥ðz7g­ ÷̪¬Ò>à™íÇ©Fs`f‰�Ài®E �C€’§Z#ó§õJ9±üø&þ…›iˆ=Þ*,h1êh�r£EÄ2¨[pϲR¨Õ01¬íZö7_óhµÁÞ­žf‰DªIqײ0|ùVõ„¶kÙ0-[¸Ì?ñ( ÆŽ’ÇW¨Ûc b¸Æ‚L°ºøöeý‡ù°~æ…=6,Ôêp?QÍïïQ†ÿ2ˆóªÈLyéû#ÚGÆ[a8/83æsˆÑ¿À*�¼w´gêû„ Ó¬|\WN©HàwŠÜ_â¯z�ÛáœÀeë&ç”ã:¹ ¥SáVI²ÓŽez®Ì¦`•Kv”'œ\¤ 3ýŽA¦N+2÷Üøû Se¾{ó2§¬¼2þd�].‡q Mô 2I½ CÕÖî©ßà§!o–TÍ·!Ò¼¡RÞŠªÿ`ï|^Û¶â¯tõfG!;à bì'¶âÔqB~ÌA*Í`M–t ±“-uãÖ4îR²uàºÁ°B½ƒÍ.^KÖ c¬ƒÂ=ô¼c cÁîƒIOÒësÞsdÇiSˆ>‡¸Šdé½ï÷9ý~,=é;êûw¿»ý×÷¼�ÞÙzG“ ýÉ"x#²øÎÖ×ïÕì’ÚöËï¾äø›Ïð{ßö½DŽÇ}ïç¿~Àt‚�/2Gãão(ÿùŒÊá{Øh”¼’ ˆÕ|ðÉ��§ð“ë×Ék² ³„š‘VB0bD$ý¦X"s "ãvG¦o‰mˆå‚8€ˆÈàÓ3\‘aWÆÄ€Gûm»òJó÷ŒÈÜ?\dV ´ëô ¤šÅ,À U;òEfÎ(õ‡ ‘!%š Œ·û˜»;U«³˜d5¯IEc¸fí釶£ÜµŒ9ˆ¾šÅ„@4ŠPº¸›‡^JdVðëCòØBáŒ×[–‰ÈTU‘É'˜~Nû¡KïH´K%}Ž ^š‚f˜Ä:?%ì}ºÉù:"ó�JüE„ÐUî ¢¶šÂúG˜'jK¡@ß%̼_|‘Á½ÑÍÈ;L(›€nrײYH¢Z¸ãPðzסƒÇYÌ èoDdªÈŒCØ$>ºùÒw-óx½Ðˈ »Ÿn'E¤ ·mA AW¶2€œjö×Ô†½_œQ#2ª} Òå·’̽—,2É2¢¸ ±ÖEf¿Ûó¦~ÆÅÓ­\B†ÊÌõWUlY"cñzˆ õõ?¾™ÕñqÖ‚Å\dN„O•IR V -‘y5"C¸Å¹ýr&°†(‘Ù‰Fø"î\WçËhÿD&&sßl²4ÅžíˆVÊœFYç2™k0nˆLéäÀg”Ï+j5·Pã/p«ËT–z‘Y{6 «Q‘É@ɨæèàAf€°kêK5i"3²”•A�¦_‡³‹» E EF®™?ÀÁ„ †ñ9^Jš6>IÉ_￘¡–B†IíÁOª¢¦ˆ84ׯ6£U% arÊÆ¡ÛÃćˆÌÈ£ZØq¸cËKÀ™K@èiFd��[D‹Ì�]{‘áÆ¹h;øðÊ~A—õ aŽqu,ØÈ.\É29µ}‰"ÃÞqyüÇ(2>õ´ÌíÑ­oý\‘ÙzŽ™µDÆâ„Dæß:µòwø±"GĪ‚[áÜ¿TrN„_l×Ù_Z)q‡Ùj½}™™)¬:<‘aWvþ2‚�†5ÚcÌD ]ŽÍTz"¸R 8u¼�‹L€™$© ÕÚÊU#2)ë4´è„[´ƒtÙ¬=6s‘!H2]vÕdV�:ƒ<‘¹ —ëˆL¯,ÇÇáp‘™ƒý6^ÀæÞ+�Î#‘aRÒ8KDd˜”´$2¢Òh¯¼€8DkDæ®12&Ô™AJ˜~E7çQ-¸¤¦*j´.&”�C·‡‰%29T›Lf: ;#žà‰LØœ:ÁfDÆ$ïr�Èxs`K+£2ÉŠ o?‰¢ð%`F0ÌÂŒÃ$B.r.*„* ÿµ{Ú^²È”RˆbNZ™Á—–½¹|}llßû&Od‚[Ösd,NVdþá×ÊøïGƪ‚[áÜ?TrN„·É3M)¬)•§’c™e1Ìlh`ÚÅhÀ‰n‰ÚRTY  Z®§&&Ž ¾É�apÂ"%2ž”g¾g7™9¸ÊˆÌûÆ~ÔòG�óˆ¢Â�ìÑ&-˜µ'—™*ÜÔgt\b¥jIžÈa¢ŽÈ\„Ÿ´R‹™ƒýr/àä:GUÆ¡`"2$Íó>UÆK ÎëÔQE&Sª¼o†.¦–Æ�8n¾�/¦_Û9BdÀ8›Q/¢xW˜P6Ý&>Ddb°Á$³v %mˆÄx"㢮ÉkFdLòn‡>JdÒzöæX‘áíÇF�Ó‘¬´M.T]�Ìr—Ê7õçÎäð`̈ºïåŠÌ2Ô>³‚Z"*¿ne”0~} +2®îiuŽÌþKd,NHdî�{ú�ï¿þæ�#cUÁ-ðôÜ=:9¯üÎo­)•§’E¦Ï‡0ƒ¢é�"bÅ©wœWЈ¾tI¼äd¶=°ÒoÜÁÙ)úÑa&sŸ[5$µÒQ�Û(­Â¥çG3$˜ŠŒ¾wVò3"³Ûú=z±r`P{OŸVRkÍw·iu ÒÈIn“ö¤aSë%2nÄgC¯»0ÅdRzé劌»ÚÏrý‘[æˆ Ý/3†! mZ–ü&"C‡€Kßúúâ@ž­" qRÒCx]µy‘A3à\({¯\qkƨ¾Œ®[�\jÁ/ßAÚ¡æý¢‰ÈE7î)d%f›+sS–"L(�Ý6>Z|�ã`=ÎŒC?T4‰ã‰Œ�¯j�r�4'2t|ØÁ~Q×sBÔ%|)Fd¸qÞ£&Ý\-& ~É®�ÿr„ºÏr>ħ) ·²Ð]_÷4(2SëëþFE¦Kíáf1ԒȨsb|êµeAßìõnŸê,·÷÷÷Ÿs/-ËÜ~ð|Ùuõ�׋™·^Â< « nm^Å[tr^#ÎZ4ŸÊSIk"‰üø5L&³L5f@=Gæà¥eËaüìtÎÊ�v\‚¹ÄK:Ädîóë7XWÛ˜Ä"3ý¬ 5g —Fî\Ò×ÌEFrª»[…aĈŒ'Ÿ÷©+— €Û ¶ŒÚÞjBP{!-ô©+‡q¡”–·µÀHÏÌÚã-ËØNBDd"I)% ÛÐ!àò+�˜ƒ ~Ç](.¼B…Šgø"óÒZqȈ Ó¯úà¢ÛkœÎºa"2tXðf°�¸$%§æa6%iÀ� _d¼Ò!"sõ³ªÍ:úY iAÛÑjÚ¸6]é¼[u¤˜~Μvª`o÷@ÁÊ&âC·‡�O¤Ô•³yœw f 2\Q_‰È¬Q®"B?žf—}ôJs‘aãÓ[)N’|ä¦ñ‡‹ÌtbÅ(‘yLD†³¿ô„Lá‘óÁšRÏk!áãAvP}©J~l7òšúG)IF·P„¼»A‘±Ä™x1B-Eaýh"CØÿV}Òåóo»»·üxù�Bww�O°»»ûjŸui™ÅIˆ æwþ·þV|B<=÷{mr^ÎZ4�ÊÓIÓ"Ó644´#F‡¼]h‡zcëQ‘üg¼&ŠÎE¦W|‘Y´¯ŒÄœb”¼“g2÷È¡ô|%¤-¿IåóV PÈà ©,-9v RB­»âñx†•Ÿ›<‘éèÞÛ-@YmSŸ²ÑôÄpÁ–Ë37>J‚Mп!¶ïŽ¿_•»ðÒ#¨ÎŒoÚaQ]9�€ä¦¸½X•.™µ}RÿÞWI™6A<îT`áÚn§,EsäÏAj"m+–q‰w7·A.®`d¦ ¶ù"³¥xt¼s)$ ï1"C÷ëpÚ ‡”{�&"C‡€Ë"¿@\‚%©ßñ$ �›’H’_í]|˜ã‹ Jeã*An|RuËRo6&öRr¥�×¼´èHwBë|_óéx!¦_‡³"Cjþq”ðQ£2d'Û¡äcBÙD|èö°ñé€tb2*B?ª…‡3�[ ï%E{vx©dŠÉ¸ŠÚ1Á‰Ýñþ¼ªÎÌÊmåµ*ÊÏIFdØøL”É@u3½j„•ÃW‚óãí¡ä H-¸3®0Ï�sŠøGì)�6uGvHÞÝ|mÓ ( ÿv±(µã¥[eéáîRBñYx“”B²ê‹¾q§‰C‡²MŠ)…˜qV¯&ä…ŠÐ’È2Ë_à×ç×#ª±Œ*ÓexD–#Ö‹W-2æ§d¬*ø ß⿞§dÎZX'd^ŽÈDE´ZO‰ áAdkoŸjPdüQñ*_dP¤­]ÛÛ<ˆÀšÌ}ÄGØ“J¢1GfÅ–€òc¯^„lHR§O+ JÜ92‘9 �Eb#Úê¤P}$ �´z�ÜÏF!o€â¦[«ìV$(ì “ö(8ÊÙíornÄåNJ€ìeÄ;ˆ'^€¤ñ8JÒy˜=Ã$æŠ3®ayŽª_&\#ßÊOƒ1*\ìBup©1�=ˆ“’©lôÕ™ ×J àÆ'P>J$T€žÝ:e€b¿Þ€´1=¦_&íê¦I}¯+  Å}L(›‰Ý6>»”�W™2š‡î»2@~9{ ÿuž—AÁ§}Üòê8TCǬ¼ FdØøÜ*ÂÒqÇÕ�Þº~ײ±©pÁ½™/#Œ @!Ç�ó˜ô'BTËW j $&¤ãS;Z�*_!ƒ0HüÜ]‚>°ýaÄ¥ „„¹+Ó × ŠZ–­ æ3Ý^ÞZk²¿Å ‰ á·X¶ªà“á\í´Š{¯“Éœµh*•§u†Œ¹È˜ãöö¹ÅM²dŠ9d�×+ ÇdîÒ¤XoÍž}]³njí•ÞeÄÀŸìcêá ú…¿k�jðc#*&½Wúk�páBm\ˆ…lüÕ;ˆ05æCuq‡ëÅnj”M Ó¯cÃ<% b‡¾Óˤ„dÄ…ŽÆ$¿º$‘õÓcm€Jû™ ‡Û/s2½#7Áër1Ã¿Éø�ö0ñ!øbL®¹ãÐ@ t §„ãÈ{Æ_3œ§©æøÆ�dQ£2fuÝÉ~¿n«…9Í| ÃÜ]J–!3½N¼YqæW—‚gƒH\1Z¼Þ.JnGö]{;bg®W$uÏæ& ™Èÿ@h®T56¡o!"dP@ÈŒ•Ìøn™]pñnžæÐNiRæìGYåŽq6dÞCÈ|ÁÖþ¶8aÖ[’‚­xy¶ú7óOJi´>xc±}ø_òœŠ­õ}Ëß5{Ý–dÂnoO&kê¢å[J5  �ÉÔ†3(ƒa�áL‰aUïÇ2YNBqÁÂZ EÚj·ƒyÖñ2RJ£õÁ[�dAr Ö6ÄVr,v6“èå�ÀdÒÜ2jüï`ÔPXÈdjýû‡ü¦‡û~�áL…§QV9c™�5Ï;‚êY=¯ï6³¯ Ì´(‰†jêç—ª6øÉ�€—¨:£qš¿cbd@Èp!®™W5iäO.J�꼄 ‡2ࣹqB€ãpOÃÄšGl¸B€ã@Èp!�ì×±Š1†Ñ0åBŠe‘-ÖÆDQ,ìlíìæýßÅJ¹†á2xN•.$Å d€É2€�&çiÈ!à9!  Ÿ�‚„ �OÈABÈ'd€ !ä2@��ò  HÈù„ $d€|B2@>!  Ÿ�‚„ �OÈABÈ'd€ !ä2@��ò  HÈù„ $dàó|—¥Õïé0+/tÃ_Ú }iÑ�gsÜŽøî~°r d€‰2ÖÍw‹ëy7_•ñ­ë÷¬4ú©õ¿¼°¬çò¶}íÚ¾µîË�E­›qÞ}»2À$ ™ {wì›8ÅqüÉq…ô+FhdÉ !Ûa@F.@H8¸J‰‚‚’Ô.RPºNÁ}ÌÎcH‚.ºìÝû›Kîe†gi¥|µÇ-cßÖ^èl��~ž¿�èTèèaN¼�tî»ûù�Ñ×|5dª]ÇˈJïÍ!ÃØ‡ cì?„C†±GB3d~ÞýˆW¼þ|Èèkî‡ÌOíÊ!ÃX…C†1öŸÁ!ÃØC!órÈpÈ0öÿÆ!Ã{‡ cÿ¦6bKÒ2D¤¬îrl9tåè®×ýÅÒõ©�“¤ЉçŽIé»úSßíÑÉ`³]ôŠÓ‚ÓWÞgÏ>)zâ‰hçî»®l˜í¸[7$j¹ËEß#-8ÆËQ›.¤ë‘ãŽÈ?.ãW�*m÷Ï®ë!sZÄíPÁëÇÛ±%éÚºÿ²u{ÒˆaÕöTî2ym__cÌÈÃb¸˜_GEµ«ú§°xÕ«ñv6 òŽIrŒH«Cåà®ôñî‘”‰»6ön¼S®&ÉK¯uãÆ‡ cìâ�aì‘�qRô¯Cf L=º˜b0…úz‡Î#ŠK')l"’9tÐL ~«í éá^&ûƒƒ-4ÏœíC¹ßêãÖÑ¿µ²7`&©ä@‘�,ÈÕØ>¢ÒZ[‡ÌÀˆ» eèÐÅ`ц¡1êïY½Ò™¼\cÌÌ $í*d®wÝ"Яz%€^”AY‹¨ö ‡âÌ~ñ˜¤x“æÞ wÊzí�æ#c2Œ±_ˆC†±GB†VBø—�ñsìZr°PQ™b¿ñi½Á^}1zO¡c¥:ZFú‡ï0¥“-Õ#û¶gÏ…Xé8Éòíü-d¤3DÛqȘݧ.�æÇµdº°|ìWD~Šw#dDö´&xU Òc¬ç=×¹á áúrcA™aN.à1¬úžôŽ·¹ížáV×3}dï¶×é¦ÕKºìZ…Œè¾;öy·(R/¾þ vùDÏø¥ioóÎ ¶mg=ÏÑi:‚1Æ!Ãû�8d{(dèˆgY…Ì:‘Cì®C&Ö_L1Ð?�÷Hÿ [�0"uÄ B")ºDžÈ:éàYÿŠ•ñVŽò}#æl‹Ô)ØÐIOÿä=Á+�ø“ƒ2ÅKŒÙô™<,>ë__¨È•6•Øê¯MvÆ@ «¾§'Šo�„ðÊkê3k[Â|�Ì%dŠïH�J"j!«=†ÊP鈅P¡µÃ¼ioãÎ6º6é�B6Áã�aŒýF2Œ=2rˆq2ŽÈÞ;>Åœ”™ú(Åi/°Ô7L‰h8\©µ‚«aAZ‡¨ƒ)Ý™æÙ-:tèOûH$ifÈ„¤t5…̲¸O\Â'¥‡W*ØÛ¤1¬úžÕóˆ‚*dê3írfs7dìâuŽH°k�¡tDGÙNºº{ÖM{wѧò2ã~‹ cÿTÈØŒ1ö-2Œ)ÿ|ÈP$08‡Ì [ÒÖØ_‡ŒOÊO*ÐѦúOØdc"ßD»âÝ)iGVú}/wB¦yv‰�´0-þ°#� dSÈä¤ 4…̘ÏD8t •äÙ¨­ªÄˆaÕ÷Ü©s�knÌ<Ý ™Œ” vçt±k�¡´R©3Î|’bÚ¸·qg‹4=óÆ‡ cì+8dûýŠ�¡º^2=l¨�þ ™Ö%dæ¨Ìt1´é€ÍrI‰ðˆf¨Ì? sÖ òù&0C&»2¯—�‰PÙSÅÛI‡Œ�V}ÏÞ��¹9c}+dj�¡$ó)QS„>­0nÜÛ¸s�°ìš‘ycŒC†1ö2Œý~*d”32ú U,Èæ�iãmpÖÒ¥0¢YF*fd¾ÔC‹ÁÙúnȘ³fÈhá|“C´œ­èŠÓu�Wc †Ußó;#dê3côI›+dj�¡²€áƒ(M¨«qoãÎòY¨×kÁã�aŒ}‡ c¿_Ù-v†Ž]Ò,©9dÖHéZ÷™²™úÎc€©q©t7dÌY3dJž‹áã!C)ÖÔLö¯>êö4÷¨®©Ï0#mü½�Ñ�Á4G»‡Hÿ·a±��{wº˜W+Ô�àÿù2c2Œ±¯á�aì÷+C†Ú8‰T–`EÊ£!Cûógá ¤ú ÿ}]R‡”`àÜ ™³�!ãR_†üK!s„Û23ôHñ>•ÂÀ&%EPˆaÕ÷ ‘éÔ‘ñ0,¯©ÏøØë#�´2‡»!S{ •ãEªY;�›÷6îœ#!%|ƒW;‚ÿâÆ8dc_Ä!ÃØïW… ¹ç�yB7$¢rÿVÈô‘®U"dÐ#Laëͧ)1bÕïèÊ›!ó‚™9k†Ìe²�Ù—B¦‡®c†ÌJK}ËW“S5 k İŒ=gتñ–Õ5ÆL‚Ä!’ \B¦ØànÈÔCešæ#µ®˜â£yoãN;ÅQM±i:¢µt‰1Æ!Ãû‡ c¿ß%dœ´ÃM¢[!C.0t—À„Ø’.ÌŠ£†ÉfªŽ¸2s ;æ¬2AŽ©ûš ¾2-�<ê!C ÝĹî…ËÆûÙäEˆ¹1Ã2ö”Kˆdñ†}p¹¦>ã¥ñ"Ï>.!Síz;dê�¬2¬¢ö5ïmÞeÈ^�D61bŒqÈ0Æîã�aì÷»„ ­€ˆ”§D`?³èvÈP?À°M…í¹h2¼“f�‡€Xøt;dh²sÖ  ãÈkúRÈPg ´��¡öKtŸ$]8£= –+2bXæžž+Ê×Q^cÌD €Ä×KjÕ®wB¦þÈ*„¤“Ò[{›wún ±=:�G ²!¿S†1ÆØg8dûSÉðó‘È¡{¼HÒ'ç˳ᚾA:Ô(ò¨ÎŽŒ�;{Ê0¬]cÎx-çή�?2Óí;×·oãŒaŒC†1ö9ÆcŒý 8dcÃ!ÃcŒ±?‡Ì_ìÛÁk’qÆñXÏá!Ì|ñ � Ls9{sZNͽ“u²E-D(jÌ1˜AÁË.1<í´Ëþ�uÚ¥Cô‡õ¾oíÕ7›Úfñ|./ü|}ßçú=¼"â£�‘�BFD|2"""ò/PȈˆ�BFDDDþW2±Oo2:ˆÈN!#"""×®Í^ÈTL×ÁÛÃ9Lìb §`º¶sw3˜ÜŠéبZù:Ddz2"""2¡Ù ™i„BI£†?›¯0$~t–ÁeB¦D#™L>%ù1†‰åœ‰!Úö¢L‘KPȈˆˆÈ„f2dê@==ÿŠüŽažà— ™*lñ{Ycb9Öœ¥åÕ&“é?O‘ËPȈˆˆÈdf5dËä†L?d\Ñç0!7d\“ÙðSȈ\žBFDDD&3Ë!ƒšpEW«ÕVÏ9¾n}dòv`»¿µ~buc°e, ðB&Øúz²ÐMa¼~Èà5K°Õ׬×G+KzÖ®{`YqØv¬'8ç… ‹¼ßßÄðêñ³›·!"#)dDDDäÊM3d*älái�ïäéZ°ÿÔ==˜c8™pƒ›&¹Áxý�9b@ð™ûP£ D˜…í1Y†­Ê4ÎõC«üÿ˜þÄ”E÷´“‚ˆ\L!#"""Woš!ƒ ¶D‹Æ|$^Øàñ¼Jð4Ùö‡L�� &UbsÙÖɲ¹„¾5v€§”*ck!c%wã7¦ÆŒ‘­†Œo�2®�(ª2DDDrÈÓ®ÛØfkc׿îÒR§¶2Ö<Ú{©Œñ2;”QO�(¢2DDDrÈìÓž8¶—M†L¿2.¥¶2õz=ŸT®î°B¯•qDÅ�!""¢pCf¯öm·Ohl2d*ÊØƒÍ‡Ì LΑOJ¼ -dF•1 ¢ˆbÈQ¸!Ó©�ñ5óã1|çzŒ4pjõåûÓ½£µ Å‹)à‰’×Ò2”à�E¯d‘ �¾b}øK�c“àÄꕯw÷£)uk½zéæäAxzeÓ€yýúÔÂÙc§ &zzÊÚX1‡Æ½mý]åá©ùsÈ…jëGý�ø©ÑÎɇûДJ�TÖ÷Ÿi2Öª{1T°¼U,W*åíÉfÑ™C…Z­Ðí ©ïdaõÃ`×=øÜ ׿W;GK)xâʸä€(š2DDDnÈ\ÖZ¯9umì…瀬*XІüo#óô�—GPÓÆgK2ÌÁµ" “eòXz¡Åí{@î¶¶¦àq&W´ëñEXm±`⪶¦¥ˆÆuÓe™åwþz:íIi`¾`$bðô¿Vž³9Wטò¬îÿMÈô*q±Ê(ÀÕ#‹agJ5m„Lê½²ê�ØŠI*×Ín¸ædwÖ•õù>< n�EC†ˆˆˆB ™œ6^£GµÖ�Ô^È %´gf|C!sW{¾eÒ¯üù)¬�tÃLg d2·»R?‡L,©›Örûµ~u­ºl´øÍ2ŸP ‰ÀV™jZ¸×>d0-« ÐiÛ¤õ”_‡Ì²òLe`•Æï¿ ™‚òÌÅáúä^™(š2DDDjÈ”µq ÙY ˆ–�©¾ðC&¯Vêõ@ûÖ?ê†[ Th„Ì»iÝpìç�™òF[b0ªvß´x®Œ"\”ì€1è%Œ²¦3íC悬ŽÝJôA¤ÈÜÿë�Ù£V!r ´»2EÕð!øø›<ˆ¢‰!CDDD¡†Œ4Çì0¦�C��±V¿Ýƒm½Y¨¿µÃïCÆZËß¼¬=‹SÓ+Í›Ë v¬^òhÌ^ôˆ ÿÌêw;p¯\¾b;¥\.›–Ø/¡5SÛ‰ŽÑwÚ˜‡qU‹gh1­ŒX¶#>õäHú·‡õÊ”XÊ¢ïø%en2öø(�²ÃEˆÓ¶~€Ã•ʰŒåJ¥r߆Œ•/ëv8ï8c™Ä…®å9[R{Ý�±®,û¬¬û°ºí) Š&† …2ç´qÞ ó2Üh ™™å´™ kñ4c'f72û²f_][Ë‹Úû2�ÔšLeÎ%[7��™•úȺoÝñã·–o>éæÖ¬Q•Ii±M~&\ƒ5ÐüßÈCÿ޳ƒ2|…8•4&Û†L¿Çý‡UvBTlµùÖ2u]þ®A;¦Íx½ñ"úmS­7C¦"ã’ \£C‰!EC†ˆˆˆÂ ™¯þý]2¼u!3Ó+öFVI÷ÐàFBfÆvÈ™™h4Él °Aâ@d%jÖR~ÈLB±»J?†Ì]ÿZA#’UÐâŒ_"“5œf%Œ™á¨ OÑÔ.dvVe‘ÜiÆœL öBŸe|Ò&d&!2Ãþ�—þ{ùÍ2—õCæ„“—yVV‰íö4"† l“�ql�ÄÏÅ,Bæ1\%-ºáz»��Y„µ(s'DZ‹>àfðKæì.?dúa=�y÷�!×âå´8t!¿„Vq%zñ£!ÿ¾­ %Šéö!s£££#Þ=:ø¬Ë?_zeÈ£MÈ…õAæŠÿV‡ZÎðCæ$¬åà'z’²È�(’2ßÙ»›Ÿ&‚8ŒãO°‡¢‰H_Ú„PåE�" +˜’bjBÐXÔˆ_ÀƒÑ(‰’˜xPÆxäàö¦õâÅD�þQÎo¶Û.­­ë M7y>vfa‡†Û7»ËQCf¦R,{eXð„Ìg8nÈ$·Çy!“…õQÆ‹nÈœ²‹¥Zœ(…Ì›ˆçªµê�‘¾±ÓÔ¡A4rE‰<âó¯®íuC)e¥ö&º2^3Kî�“Û(õB¦ Ö!�»Ï¦e¼/ït¸!³ ÖSï.˜£ÜÛŸŒ!CDDDM ™3Ú¸×)l6<‰y÷‘qŒËdûÈԙ˺ÚxyGô×!3øV»6æ†Qׄ2À•É¿K«²(ŒîʉlþAã�90kR&'ÌÊ`ò7;û�—Bf~Ûg¹mϺ!Ó k�7dVe’Q 1dˆˆˆ¨y!ÓóVWY® ™¼LŠ(yño!SÔÕÖý… WtYîêéRÆ)”ŒœS^Qˆîת,|°QȜ鄧1¢‹ÎM“Uø ™ƒ•çÐÜ:Ò(dR2Q 1dˆˆˆ¨y!sBW[­ ™7B¬ð¿…Ì~9ªkŽWò娯�]…‡Ú•GÝJ„`Í+N½»µ>놌è›U®‘:!sñËúi”M)c“rxê7dlTEcpœ”Y¾QȤ�_BH """j^Èduµ­PMÈ k± «çɶ�¹ +¶à7dÎËq ^~CFtÞx·¢Å~Ô‘Q"ãyVký°÷eWf~<¥Ä«š�™F­Nçrˆû 7ª:½»Ò$„LD‰>C†ˆˆˆš2›Z\pìÖ"Q2(Êl¥â‹vC&á©�>í7dæäøùB¦ˆ*‘ÚÈƯõ(1Y‰šK°úªB¦áźbz]·O‰½³›ÑxCf¹AÈ,F=©Ó¯ÄPƒ�iW¢ D�Ä�!""¢¦…Ìmlõ $%ÓKµ!óM‹è`ñ¯º2÷µƒxí;dNÛ8釵¼n´Õ ™ãZ<€é02í9mÄat¿ÿvUÒN/ˆnUéŽ%7dºÆŒ$Ä@Xý¾Bæ†2º¥L¦¶…Ìlƒ�ÁW[R×d<i2q%B $† 5-dÒN¹¸:dºy¸&dú·´õð‡.ùÞÝ8 ô´ï�Áeì_„quA¢&V7d^jq&cT†7c0fìÇŒH“lšÑml·ªŒŽÊ™ði‰°2·dpÒ®4$Ãsð2½v7A*ÛÅœïŠÕ™£J¼ï×”³tƒ�“ñC†ˆˆˆš2Ém쩚OÕ„ ÖtÙݹrÈ|ÔÖVQ ¿!3‘³¥g?ßÕâê†ÌbN[Å›À-ö_NÌmʨPþÑ\/*ÜP¹+¥Ä—üôeEËqñjmp"NFÓþB/”ã\yeÈNÔ \SÖõkQ%. 4 {YDÁÄ�!""¢f…L^ I”…µq 6dðtA;6Úö–Cæà‚vM?ô2¸¥½R¨28¯ìGòÚ臱¢Åil3£Œ,¬ƒªì–2¸­¼²IŸ!ã®Õ×ó¨r­2½£Ê#:„F!Sp–' &† 5+d”6>¢â�-›ÞÚ�Ádá‰Ö¹Ýë!TBtI8â7dÄR%€rgb�B&S¬„LhTW\ŽW^êÙÀ66/’°FÂÊñ½½2=ïUŽ~ø YWx.˜j2¢÷¤*»Ô‡F!;çœ' &† 5)dÚrÚ˜FE\‹¥Ú�í÷{Ê7T °Ù~y3ƒï�}…·Zl^ì… Bãw‹9­oBKohñ0º�Õ¹bºkª¼SÆg_¤Í,µñþûåÁ¹¬£/F"ð2pú§�ÉÙU³ü¹®ú!ƒØr)eR{£aÈ Ëð5ˆŠ!CDDDM™¿—u_l±®�‡Cøc¡+ËSc�øi�Á50Ô1–AÅâÈž8ª%”ñ©r}üJ5BÝc§“ø#³JŒÔ¬Âoôö�nÃïìSƈŠ!CDDD­2…gÆ:¬û[Ú8†–‰Ê½—$þ³É¨2Ò!ì�XZÏAP """jµ�9¢ÅÞáBWwËðr­l\ üG±Ãñ«Jä±Sæ•ñDAÅ�!""¢V ™� m-<,gÐÒBYy‹?‚ÿgH•¤z°SäÕžt/ˆ‚Š!CDDD­2xYÔ› ´¸ e$v dFãØ)óÊhù¿,C†ˆˆˆ2h{µ Kr—âhysrw£ý¿‡Ì\vJOVöÍlíGöˆ2DDD*d€äÄÚí‹*{²#‰øÉÞ› Eý`'X9€…Ÿ°í YÁ%ììÄ1œÒtŸô ïÉ9[ÜênûɃkó‡óe]~§ë'2d&d€ˆ! d!ü! ! ! ! ! ! ! ! ! ! !„™åâö,Bh‡ÌýQë± ‰2}Ý]÷]2@=d†º*B˜‰2ïz(B˜‰2c=!ðaïŽQ"‚Šƒ'PÖ@Q*\7ÙÀ+h¸‘‚�71ò2ÞM�±'Ú°vx/é+ô§é* !d€e2@��ù2€�æê„LßǨ;�Éå�®€�fÊ„L·^÷Óùg›§G d€F™� ¦í˜ÍÇçû÷u U'dƆiÞcnsxÝ€�f …Ltë_}LV÷OùBhU ™öÌè"ó$„ Ð(2Ñõ1³Ë>„ Ш2bB؃�–EÈBæ-Í-„ 0S=dŽó1„ Ш2g9d"VW7 d€É„ €�ZBX!ààü°oÿªQDQ‡’J°°6(CØÍ-–…i0ñiÒYX»h­�àcä¶ ±TÐÚ€XZÄB‹à’ÒpsaeB$Ù%„Él¾¯¹Îy�_q… d€Ö2€�ZGÈBh! u„ d€Ö2€�ZGÈ „ÌòràlBX,B2@ë@È­#d!sŠÞR5Bh\“!ÓíqA�n7.Û»´@��×`Èì”å8.è[ù>f±TU�>U5oùôvÔ q×$dn¤4ÈU’Ò£˜ÏÛ´@��'dα½;P'd€Æ ™s¼LO8AÈ�»!Óíç÷×èKäùçÁÑïQ1½ûzxðoØŸœÜÿs4îž™¢ßïßœ5dî>~º¾Ñ›®W¾ªV#²Á³7k·n¯EöÜWø!ÌmñBæc¹—ßå(&F{å±ï‘�??vbzrø)/O…ÌvJic¶�)^§l3/W·ÒÄð^dwÒVïEš¨rS ÓJ' `n‹2Ù»×&Â0€ãÚAA —‚ú"ÑÇ�õ'шZEÑ¡(:¨8‰1êdPÄÀŹ«ø¤ ¡¡KSIf!K!C±ƒÄvL³{}9Ó¤¦5g¥×È÷3äx¹‡¿ä½»‘\®Ô+d¾Î˜VsñíREV}7…j±´`*Ž7²œo5~”+bUs 2q}ôäøñ±Ä9q�×ô¥ÝÏÂzÁ ™‰Ç÷®í›×Õ °!|Ä�‰F½ž8,Ýz…Ì´ÉÚh¶§ò…qÕLÃÉ7mIß!“ÐSÒ¾DL÷‹ë´^�ˆ �œh_â’Ž €ß2À·� ™]gÎDÛǾCÆZ2e{lšš7R— DÒéôýþBæ¶ž“_†RjOÉõB¦ãW�é¤X‡�¾ bÈØ‚ñ>ÿ2’5õæG«n*õU5SðFâGï�9¥ãïw;bÑäÜÜÜÔÔÔ#}eC¦ë?˜‡ú\t#d@à¶'dlÃØŽé'd¾Œ1Ù64*f&ëñFJÿ d†Òªš|×uMž÷x!óZqÞ…¼�+ÔŠÎùíâž¶ó*eBØ…�‰íuÈ„¹Óæ$gyãÜÕ¼ž½ ‚ó(dìtž³p< Ž%åìãëú8´¹ôæÞ�‡Z¹ÛhÌ´ôÅuÕu'Ë�9+”«SçjqÈ ïfý¢›Ê+]{Öê]U ÝÆT6!d@b{2v%é{<’”I+re§QÈ„ÑÑ7©g~úÔ>ÈkZþ‘<¹ñ\¤Šn5Ë2d*¥¸m.â�YíÒñ ˜/òf®Àïc€]�Ø^‡Ì[yyû¬Ÿš6Š?-“†6‘>ZFïƒ`ñ¨žeuôôÆ+mÐrg’ ®µ™ye÷eQ0%ÅçÒ£å@gþJÛ2 ±}™P‘cËÊKͯ:£Ñ±õ¢�9–Æv)uì»ê|Œåm¨�.Ü»¸`.ïúòf®‡LE‘F”.5WiÇ ®+Û2 ±ý™Ü/!ó=o–ëõò‹�I_m(uìZs òKCíTpÕT*UugËÅþ¿†Lá&dª®RX"d€�ØÁ„̱}ËHª¯‡Ì§hjå΋Ï´®æV;BæLn‰�‰HÈøAJÞ|=d®-ÔÊÎÅþ}WhGŠ®»5dj®(·CÈ€Ä%d²ÖSäÛzȤC«kåñË�µ®áºŠt]ckȤ*®¦ßˇá¥Ä�ØÁ„Ì[³sIÍ`=d4´ã#yGcíRrn°úĬ´%dâÒ)É»ÛÕ9³‰Ä�ØÁ„Œ:–û0üt6„Lzd¹Óᤄڥì Z(¸òÖ�I5\ñ]÷bZ)2Àv„ HìpBæ~ÇÌÂËó !£Ôeh^o¢]¦î�NÜtkÈ(Õ/:אָuG�Y]b„ HlŸCf-lš×ÛNÖ3úÓ³VI›|2û( „ Hî€Bærev.1Büu„Ìíô¬# „ øë™[Iw:×°@È€¿îûuHÀ0¨ëg˜º�ˆ P‰ p'2@%2À�È•Èw"T"܉ P‰ p'2@%2À�È•Èw"T"܉ P‰ p'2@%2À�È•Èw"T"܉ P‰ p'2@%2À�È•Èw"T"܉ P‰ p'2@%2À�È•ÈcïþV›†âŽÿÀ›Q~Š ¾€W>ƒ/3|™>BîÒA‘ +¶¬Å¶SÊ*í í°¶¡ÖksNšuÚê¦õû¹94ç$g·_YàÖ2ò"dÀ­#däEÈ€[GÈÈ‹�·Ž�ù5Ï“›ñ}OòJï@ÈBæÏ*ë'¹‰×ƈөŠu¸_œ¾ýøÅ—•/õ/?Ý€�ÿoÈÌF ±n;d>›·b5LÃÇcÕ:—ëÌkB d!“:Ó©XWÈÔMíâ sШÕÅ965s@È„ dþæ�©˜z:?ç½ùh.€�;2oö¦ÓqAœf{8l7Åòƒ–X“Àþþ”äëlˆÕ ‚ž oõ»)ÅÅù¼ ž»”^+Þt¯t·éüÛ:dZóóE)gÈØË5¹ªP«j5Ÿ�°k!ãŸGšˆ×eM”[®94«ªvêHgGš8“D_3…lÉÔ>¥o§öÄ*FQéæ{ÉýU�æ«�)�¸eó¼!shÌ@®¨› yoê„ @È€] ™‘†Ã = ¶]"]¶ÛK�Þl ™~y>©ND$�{º'¼Õ’óh9›wû"3í‰5Ô^޽¤ªÕqÐ�"2ÅPG{­Y¬ÉºW÷ÖJæî»w_¶„ŒW3 ORéä±›Æw dÀ¿2{º’h~sµ²”DO»[B&.%ÃR϶¼#SÕhaÇâú$¦ª{9öjkØt×\ÈtõHÜÅrA<^{&Wm 95¦Ò8x-)¯b20@È€Ý ™Ê¥X[v4Þ ™4.æºÜ2#É,Ý'z9ö:JûhâB¦EéŸÝ×@ŠOÖ^^2ò±f±:惈웎 dÀN…L¨É”T};úªÅÍ�™¦§$'[Cf&™@ûnú<Ï^'º�„Ù�ii4rÊiø¬]2R¨ÞϾ#sêææT2`—B¦©Ú”LKCqb�lyÙÿw!Ó–Kem‰ê·<{•5+´!³Ð¨¼’7dR�æƒ÷MÝó¼zò!v)d ª%ÉL4ÎââkÎ� äÒP»vY®½úÚ^‡ÌXûréÎóµ§²©aÞ®ÇLÇ}ÏÿÐd€�;2îü$ÓT-¬Æ»"% Ó9C¦Å~O¹öé\¾Ú�ùª±d®}Ùÿ­i¬NfNe­b:"Íþ{«bŽ!v)dzÚ•K¡îÙa¬aúŠom ™©žm ™ô‘³(.äÚë,û?e6düøJð�ÃT'â‚&|é—6Ie¿¶i-Æ‹–i¯–�é¾�_[Æ<‹Ü­jƹ1w„ @È€‹ yŠ´2XJåz¨•¡/+�OU�›»ö—¥�ÕÆŽ�‘R‹c·¼y¢Ž"�¸Ó4ÕJQÊ~ž»:¦Õó¤Òëš•Çg÷±Y[¾Ý›…ü1¯¶¨'B\@ȈøAp-kYÐÉäGóÉ=?–Õþñ[�ÀåÍïtçÐmïáãÁ“µÛêp+ˆU;Ô!."dþY3I|9u¾ª ¦@Èl» š‹cà /rRÞTGÔ!™-�ªÆ¾8ÃtÉ…ÌÌ–Ô!™-K›Ï2pÊ@È8;„ dœBÀûu@ èÿëvúB‘vD`Gd‘vD`Gd‘vD`Gd‘vD`Gd‘vDb¿Ži†�†Äëù3-�J]ëèn4cd€# ÇÈFÈ12€‘rŒ `d€# ÇÈFÈ12€‘rŒ `d€#Ü223¯íÃìžßÙ�ûv°šF…qü[øÝˆÝÜ�ö…ú]w“ècôÜEA†&ÌÅ‘1Ü™$R†Át‘H" Ŭ{¹Ê”9™ ÝÚï·PÆOÎþJ """úBfd¡¼š˜Ê{Q²šV5šÇt•FMïeYôÕ¤tMY]@é:ˆ“ºŽþÞI@D """ò2Bf#�Ë$á)A¹0õԤ驾Y@é8U‘”!CÄ�!"""…!s0dìd–¤³‰,Nà¥"UQí󢿗¦N\_M-zÊœˆí }peE2D """êÀ�92e^4‘Þ"¼Uâv}2Ž€ÞDj5µè©’E’t…Œ>híl9fÈ1dˆˆˆè­c™Áðéùµ ™y~w—Ï›�y}~ʇC¦±–5€Lìè;‘ ÀFªP²QS‹žÒè }«`È1dˆˆˆè­c™�¿Œ1ñó>d®FÆ]íCæwìŸÎüKÈÌTr  ŠÃJœŒ­X5)zê}ÐcÈ1dˆˆˆ¨Ë1‡Ì¹9¿^Çq™‹Øló|kâ‹2q|=¼÷_ðõCã;¥Û e,Iè›)°´n&ÓüG‰H¯=)zê}:dzÎÕ "† sÈäælàÆ˜Çð¶…÷Ó\‡�17æg&¾}j|Á»÷ldå_l¶’5�‰ôýËz ²lOŠžºCFlB†ˆ2DDDÔvÄ!sc^à=ìBæÒ\ÁšË]È<À{1[àôsãïYîÿï¤D*ÕîÇb…Xô“VŠö¤è©;dÚ2D ¢?ìÝÁŠÚ`†áoá-¡p¸ë\A¥WÑ[éÝÌ%¸‹B†Š#qP™¸¬âØq(Œ¸nú’pˆ£t¾ga 'œý ¿‘ˆˆÎªpÈ,å Ï-»©#Q¹qGË<$Þe‰«4Æé¡°XŸjí™—‡Ì£þT§f42íâȆÌ"È=2dˆ2DDDô� ‡LKšîê˸N(kà˜Þ5¥…kx±îàìt3Ð)à‰-T£~ 4TfT 3:2ùB-#bÈѪ2s™ä!³–N(à˜ÞMd|þ’ùŠr;�=8�éÀP7@MuÜ_¸ ©›Q‘å!c2dˆ2DDDt^uCf%/éa²-0iîZŽéA³Y]ócÿ¡Ž8yTm7²¸ Ô]î40#ÌΆLq!C†ˆ!CDDDçT9döò€ÄÄ… |ù�Ä/ñáBf’½àû·Ì'”Ù謃ÔBõ.{O2†:óNoW6#ÃŽÊCÆ,¼2¿Ã01dˆˆˆ¨b!³í…[ ¾<…Ì«tkÀ¨+ϧ�YÖ�mØ;à¢'mw�‰õ ÀÎ}bªýˆú™‘aFå!c^ 1dˆˆˆ¨b!ƒñ÷Ï]?t!3òeþú:—ÖÈ…LèwŸ÷¾<ࢎjÐvb$¢@Ç›Xƒpi �aF†½µÛ�ö“�æI»pš<¢š| 2D """*ªrÈxûžˆ¿n¹�ÁíJ«¸�i­}‘ÞÞ»*dR³S“Ìþ}�p2è«ö7€f4ÖÔ¹’…4—žœ“ˆˆ!CDDDU  Ñ< 7jÞ��;4ø/�i/Š<32̨œ]xYWäDÄ�!""úË~ÔÂ@›‘ À¿À�`GZå¿È|ltÏD™$«{ 2€È$9ó 2€ÈùD ŽÈ"Ä@d€8"ˆ Gd‘∠2ðدc‚(  ·Ð*D¡P‘—X@þV ÑþÆ(ƶƿr·:"ˆ PGd‘êˆ 2@‘D¨#2ÀÆ# 2€È@d‘êˆ 2@‘¶™Ëõ‘ª"³Ì'"TE&ë| 2@Udó €ÈU‘É{Π*2‡¹@d€ªÈ,s €ÈU‘ÙÍ 2@Sdr›WD¨ŠÌ:ûˆ üØ·c” ÃSI+öaRX(¢h´6^A,íÄÚÒÎ+ì!Ì¡r‡´ Š66þÃ>O9'øÞb(2—¹B(2�yB(2ϹB(2Ó< !T ™ƒÌY RÈÌó*z7«Õ"€Ñ2@ë!sž¯Ñ»Î|`ô„ ÐxÈlMŸfƒ�y`ô„ ÐxÈÜåKôö2ÓB„ ÐzÈÜÞ_Dï$ó-„ ÐvÈ̃™< !´2CG¹ !T ™Ýår'„ P)d„ d€¢„ d€r„ d€r„ ð÷ ±éÖ“ÞºÛ|žlàGBø_¢›|Ó àB>Ø»{”‚0ŽÃÓ +Ú¤‚¨Ó(øнGÐ2•Ö)d+/"ä « ð ¹CZ56†ŒKÖb6Åó{†ÿ�äÝ ‹ 1�+¦BÈ2@ÿ¾'Ä$®ú˜Ø@–�ú÷5!æ1k¾Æ†ž\!°ˆ)dà“}{·i ˆÂ0º–�¦‘  DHH„¤T@޶š©Ñ€zÙ6d„|ý{œ“Mÿ§«á(!¤û ™á²Ïþ�ýº2À‹Ìf(exk¼È<õÏ€�N¸¢Ïþë÷�þå¦2À1×2÷ýæõ¶2À‚æ 1–ÐxƆx¸ë„ °¬yBÔª62@¾¯ 1•ÐdC!äûžµª „„ �ožÛ²g»²!€��òýLˆº�2@LÈù~'ÄTDz3Öi%d€„ �ïÿ„ؽ„ pˆ�ò  ‘�ò  ‘�ò  ‘�ò  ‘�ò  ‘�ò  ‘�€Oöë�€aPÿÖÏp5- '2ÀId€žÈ'‘z"œDè‰ p '2ÀId€žÈ'‘z"œDè‰ p '2ÀId€žÈ'‘z"œDè‰ p '2ÀId€žÈ'‘z"œDè‰ p '2ÀId€žÈ'‘z"œDÆ~0 êßú®f ôD8‰ Ðà$2@Od€“È=‘N"ôD8‰ Ðà$2@Od€“È=‘N"ôD8‰ Ðà$2@Od€“È=‘N"ôD8‰ Ðà$2@Od€“È=‘N"ôD8‰ Ðà$2@Od`ì×ËkQ€ñƒvsÄn´ƒPŠÚWl›„BZRŸ-�D\ ¦­Ô¤…b6Pè¢î\w™Mº‹ wn .ÿ0ïd&&!æR33Úï·:w8—¹Û–=B€%BD��`‰�Ñ#dX"d@ô–=B€%BD��`‰�Ñ#dX"d@ô.MÈÜÙ-¯¿±CÈ€"dri㊄íL�#3 ¤= „ 9d’3¹½ƒBy«˜q¤w'jŒÈŸ 6¤¦Æ¹°5ÒfH¨ç®ˆB„2㥪6”ŸØ†L/k�ÊJF.躳„ ;„ 3d¦NµÙÆrßBÆ7úQºY¬K]ž«jaŠ�b‡�!†ÌdkhLÜêoÈh-%]|VcEºx´]šBˆB„2÷޵n¯´;TñÇRŸCF ÷-C¦!Ä! ™œzÖ3b8Ù¼ù±¿2ïÇIŒlNäýß 2Àÿ‡�¡…̰�Å·Z¯Ž 9·<¸¸½ðýð�#M2Ù‹óûm!3wcéÕì·�dç�ÙßdM=ï¥óµ«®»¦Æ�ëºÓ⻹š]Ù8tçœÆ“]c¿-dn§žæ>dŽ „ °ƒ�ù¢žai(ªQñ›!¹TQ_9d̨z gÉßBfúYÞ_­ÝBF†ë{eé|í§Š~Ƽlœ�wüg¥Õ˜i ÷ucm4#zFÈkq™S5‚ó˜zÞÖÇu ¬]“ºÔ‰žÛršBf³¬¾™ë2A:µ_ë2Ÿj-_:‡ÌW äç@¯~±wÿ®M„qÇ?T¿A�±Ð’¤kÅÖjkZMDɉCQ1j±©h£bI ¦Ppˆâ(:ti¶:¸¹8BGÿ(¿Ï].½&—3çÒ ŸšË}¹ó&¹ç¡Ðz dFÄÈa߇×* U¯G0Þ[ÒôÅj†ÌtA<"CA!³*Æ/¿±ö�¹)œè2ËbÛµÄ(,�ˆºÄ�!""¢Ðz dÆÅ‡�Œ‹/NTjbŒºÕnæ�(7d†ÖíSsÃwöìs·‚B%Qþc³ùü ¨R>Ÿ7wµh¿ÈÍ>wn¢Ô!dJ¢â›û$ê6ˆ¨[ """ íðCæž«h7,ƨd]T­ˆŠa�ë¿W÷CfFT55e‰H!2¢ÎøŽµ®Z¶*êOê’S-¾!3/js*^³,«"êC†ˆˆˆBë��9)j3Öiäj ÆlAÔcྒྷ0¢µfÈ ŠÊ–52?E•|ÇZC¦?©Žzžæñ ™´¨�£ ¢ÿÀ�!""¢Ð=dÞŠªÃÇ¢¨ïPnr�Û¢áuC¦O”•ð¬ç|=(dò¢"¾cAûÈ”D ø† "¢ÊS1Q8 """ ­B抨Â<ÚÄ,Q'à¨42£ì}fÊ ™1&×E•‚BfKTÙwÌ?d¢sg6¾I@ÈTÄV{rr6" �!CDDD¡õ@ÈœcmRÞȉúsŽ×~†k~¦.ª”…7d�xÝh’õÑ:…ÌvéQq Ž€±t¾T)ä¡ÎgªfðÍCŸ+O-ûåï\{™( † …Ö+!ܘ›Ì¿Ü›œŽá ãÃã³ðŠE§.�¡]ßÃË#C!`,1CCt:Cú�œ�ƒˆB`ÈÑ¡ë2ü AD¾2DÙ¯C†Aý[?ÃÕ ´€žÈ'‘z"œDè‰ p '2ÀId€žÈ'‘z"œDè‰ p '2ÀId€žÈ'‘z"œDè‰ p '2ÀId€žÈ'‘z"œDè‰ p '2ÀId€žÈ'‘z"œDè‰ Œ�û÷i" À8þžw A)Gr51¥,Z„V¡VÄB j0iÀ@š­QŒ’ ‰ƒ0�ÆÉ88à  èâbâàîeû^A¨©hkÒç3Þå~¼ïöͽïI•2"""R ©’BFDDDêO!#"URȈˆˆHý)dD¤J ©?…ŒˆTI!#"""õ§�‘*)dDDD¤þN2Á¶Žáa¤ÇlMöE"8‰ÞH¤ "òßSȈˆˆHmC¦=>:M2:Ñ‹ßå5üÚDþ?ð�< àœD‚ˆü÷2"""RÓ� ~aYôÙÉBæÈý¤ûç!309Ù\ã�9›_Â1„óùK…ŒˆˆˆÔ3dºÆÈѸ¿)sØ?aȼkÙ3 `c2ýd°Æ!óØ|Ã1ts"¢�‘z†Lž< kcŒNÛÉB&�Ã2"�C!#"""5 ™q2†²eW2 …ŒˆˆˆüÚ2#̤°g•Ý(ÙXšïî›™ £lc5Úýv2ü#dÎ%ç§ÇFÜ#C¦­P ™æ³3™ÄÔB'J: …K¸42–xÛ’‚'вMïLžCÑ`aŠ|](d½�é˜ÛÍL]ëÁ¿Ôçl™÷Žãô¢({òr{=×Ïp®ûùJ:Ù à²óјŽþÇÇÕôÊæzÒ^<ëDà‰;Žþ¸& C!#"""µ ™æ;lžÞP(€¢!zž†a¹>–dü{!ÓOÏÚQ!"›„Ló[Z³A[-d|�Ö—€K󴦯ÈÑ3î…Ì*K|CÞ}§vþE¼4ž`©cÎk«Éÿ–±„€˜ñ|=0‰Æ,挵ž²_vVàyjÖ!Ò(2"""R»�yE¶ ÒE‡£‹n$ͯ¶1ÚŒ.„îNö½‹z!ºÃ�ËËC«äбC¦}—‰É‹¡ÁYN5{!3Â�›ËýIŸ—Rícœ}˜msgèÚN ’î©Sa23‰Á¬hŒÎ†÷Nâï»èö™×uÛ�öŒÙþ4ä¶n™õRʅߘóWÃ϶Ìy Ë½a̪ëú…LÂøbÙÓÑ[& àž1=( l›ki ©]Èô“.*4%8Ó�¢“¥ÄxÇtЦiC&˜a¾EWèø�2tî¢ÈŸ`Ò ~BÉy³ô&Ý™s¶ Æø¢r�ÌtEÃw8ˆ¢yU¨~�̈¹ÝoG°mÃ䅹݉¢ñÍÍžÊ=2å�1 ;!9cbîo"n˜ÛÃi ©]Èœ%»Pa�ÝAX t€Ÿ‡uÙ ™¦S(E9{(d2ù²ñÊ�éHpÖ ¦½�™ ÃúÌXâHeÈœ�•ã.Š×]T¡ú� lšVXfÛvÍsìùEÈluzBãh5+å•e ˆ4 …ŒˆˆˆÔ.d^��¨ð˜£ð„È80D_V§23ûå‘còPÈì{X2=dÖ²= [÷ß!ƒbüR2`M0ŠêU2×�¹ +kÌ20gÌNøè�‰Âsżà7¦Ç[Y¶‘†¡�‘Ú…Ìuò.*ôñ<)[$1Σ,cOõ‘ùôPÈÌ/–�« ™Ëd2b�!ã6dZàé!‡Q2<>[Êñç� Ájá,ªW}ÈL3?j=6fH}4æM_äÒ!c{Îk 6M¾4r³Ý ‘†¡�ùÎÞý¼4Çq¡;¼ÞQ ùýnà‚1—?6m“åR×Ï…±¢`¨h6L¥³C3PÁÛô Ñ)<ìÐÉ›êÔE(ô‡µ}?_7[ rF{?.ÛÞßÏvÚ“±ÏW5/d"ä%Ô±ø¦Ö4�¯üW‰ãÎ@�e7ö™Q1ê„Ì=md¤2§ãìC¦CŽØ�Ù/HÙÂEßI!s ƪÈu˲ /Ï¡TëÐ�QJ)¥TóB&DŽ N’“0|^^.²WœãÎÀl·‘èîFc!ó‚LToꂵ‚Z$ýÀ˜—ñ«±±Á@êÌCæŠÈ¥˜q;0ŸÄÀëË"’ ž2W`$DÚDw$ßžLC©Ö¡!£”RJ©æ… ž3‡ªÞÍÍ �¯öÈ*ùˆqƆ#C'drÜ@Uƒ!3FúqD°VPfý»Ì™]ÆÏ � À!Ç��ø‡LÈâõº�ÉÛpÜá,¶xŽ\5dúš2ëfÇ´l♂̚�­™Žœ¼EÅ YG^6 T Ñ�QJ)¥TC&g²Æ29`ñðÇ’¶9ÞàéçTeÑ 2Cä·AŠ“ † ö9 CÅ¢9µŒË¨˜&¯¾~7d"4!ÓMŽ�2‹~œŠg"¦�,ÙíBŽ­­U Îï¨ð­É8€°È,ŒD»2ò1‘}Ó„»’Ø“U(ÕB4d”RJ)ÕÄ�Á#/ûG£@°·D–Ü`àä5dSn{$,¦>ø‚‘RÒœZ†Qòá*àOÑZl4dBÌO‡á¹™å{8!3a�v¡çq’y€‡Do{“&dºÈÒ�mׇŒÙ}§aR¤°´­Ë“Ø9„Ä `Cd$ „ó’vúfMv_xls*@Ì„Ìzº#€¾å=YÑ‘—Pª•hÈ(¥”Rª™!ƒÁ$Éù¸ErÜÇ’Y/™\�c“dr†V÷]2!9×OZh4dàŸ#­a’SQ27öÉÊõ\e ÛYòAœ¼ã>GYvï˜�9 ¯â4Ü*HYÈ<Ò_Òk"²Õ ô¶|µµp_î›}HY ELÈ\ He¾°£WD–¡T+Ñ�QJ)¥TSC]#3,óN�ÁewÆIZ©\�Ã$‹C8 ûÂI¯h0døl‘œ_ „̘g³Ÿä{w‘¶ƒ2Ùé; ™Ð»92qLÈtgã~œŠAïŽH�ó.›‘Ý‹TØOË—ïÁŽÝ´|+œï5!ó&ó꓈Xƒ8tYv¢Pª•hÈ(¥”Rªy!c„¯|8*´í÷ ÆîÛŽ¢n ÍÆòøf2€Ý£Ê^©[ÒÆq|8==áöÁÔduáˆ`Èv^l¸!Ø×~¹á¥Ä¡TKÑ�QJ)¥Ô_ ™ó;„2ÿ 'dê$D"Pê'ûulƒ ôÚoo,,ŒÈ–vÆ9ìd&` va(ZXà¸÷¶x¥ˆ 2©ìDæ?´o@-"ˆL*›È<çÖ¦w@-"ˆÌ¥ë>q÷¾ÄÚØ^¿[@1"ˆÌ¡�®ç€rD ‘DHGd‘Ò@d€tD ‘�…]ûw‰:Žã8þ&>ß!¨L¢: -�?®PO QPB2"L§‚ÜšŽû \n¬Å©Ñ¡ÿ,ôîì–J0ä>ôxü¯'¼2@v„ d€ì@ÈÙ2€�²#d!dGÈBÈŽ�„ �! ;B2@v„ d€ì@ÈÙ2€�²#d€«™RïZ\À›Ññ¸°Ò�…G‘·¾„ Щ{B¦ofq3¥4±ú÷ìXL³ñ{«ûÑá8¥›‘™‘±r5Zž|{×øÜ_5¿@Ⱥ%dJ'©eâýåBæm:ˆã) F^FWŠ¢?šf—‹3Gó ­KBæÁRJ‹3w®ÍLö§òÌ¿ ™¨MEVæ*Eq2ß‹¢²;52½S,+2À¹. ™ƒóXm)õ÷^6d2öôSÑX-·Bf­QTãTi§X @ÈM]2ÏSšŒ–�·Óá2�âu-Ú!s½8Ž3õâë@B8Ó%!SMÛkÑv˜ÊÍÍ^û°WÛÚŽ–ÚáDùËúð¯�¹»°·¹TücÈôÖ륈­ÅÃ[{Û‹ÓíèÚÚ®lìß�SõúH<>{u0-sÇ'/+ë×âj5~Ü‹¨/âÔ³Ñùhš,Vz~²sÇ®M„qÇj†çÄ‚ÚK�ÒšÆ&1�©iÓXk* %‘Æ «ÕA”*¨ ¸dq‡:覃ºt ŽþQ&ïÝ%±Uiâ)Ïg¸î}ùeý’»W2"""âðEÈÎs?Ú2ñx MÓt¬�´ÙR�x!sŒŽÆïB&Nö¨rꌳ¿²àÌ\§±4Œ¦Y§Q‚©ÑHDÑ2tk5…^˜¼�é¶d}„ˆ(dDDDÄå‹�yFöc«Tˆ§oO ­qÓtÍ@‘¹ñùröUÎ ™øy¾»?ýˆœÞIÈTK…�Ô²Œ¦à{Ë©øä+'dªç/¤ά¹‡œÍÌ5§¥ã�W̶¶£Ÿ\AϘG˺];wv "¢�—/BægG$÷Y £)i³ øŠ5“‹4!3\ç­ šŽ3ÙAÈp-O¹ˆ¦ Í£)RdÉ û šêÜhM«°>‚Ö”,_…\$ï¡gºC&šü°zöE"¢�‘„Ì!r[4˜†qƒ¡Q Bž�1æ„L?k h ÎñÐB&DKžœÂENÂ8Éš20Æ™sþ#ÊÃH¹‘•:@Ït‡Lë4æ³›C…Œˆˆˆtø!d“CØb…§;)R¦iÇ` 9!SåS8n²´ƒ�ù#B.ÉÖÕ¸oîÇÈŒS´”ÛÓ‚‹œB¯u‡ÌÊåo/-ëM"¢��/Bæ9�-²í~X ¯ã\…«nneÉ£rm'/ûØ!ÓÀYr6$ &dŽÁ˜&<êL[ç,zÍ ÏÈÆ9«QȈˆˆˆÃ!“$a ›·;MsØà¸69etØÁ]†Ì$»L:§–u‡ÌÓδý¬¢×¼�é·¬…Œˆˆˆ8|2ÃäqlQdŽpˆýÀA®Ã•ã”YPtä±Ë�¹FæÛ»¶‡ÌW®ÀõœWÑkÛCo­O…Œˆˆˆ8|2Xá*Úâ�F Xk÷È}ò0ÆÅ Œš(Yå#´í6d dmÛCfª= 5–Ðc^È“ɽpݱ…Œˆˆˆ8ü2WÈ#pWyÕ¤D6 ã$9ì!£0’ä”Y�ûó�¶yâw!S '` ˜Œê-/dpÙš…#öÚZƒˆ(dDDDÄðIÈÄr,Æá¸A¦,{�›õÕx@ ÁJ M™9'dÒä¥õònCï¸4ƒ–ôúzßö� ÔÜiá&FÍϘGïx!S²ÌÀø`Yý…Œˆˆˆ8ü2˜11™bñMr-ýdy ùŠ›y›³Ï±äf±îDÉ$yá>™¥½üCÈT£žÀ/CfxŽkG8YçSl¤Ïsv>Nßd(i¾ÛGÏx!3ðÚzp(Óü¼iY‡ƒ…Œˆˆˆ~ ¤Š$—r6É©0Œ£$ë!²xFƒdq‘öài7JŽ“¬%Hûº\eÇò/C‘igIV2? l2‘ yÉ^AÏx!ƒô>˲>h^² …Œˆˆˆ¸ü28¾È¦P¥Wð@ޤ=…ë@–äz^ÈûçZ;Ì‚]‡ ¢ïm’KWbøiÈ _ekÜ1#«ÅiôJ'd0ôùòYËzqýDD!#"""ÿ„ 0º|âH4ŒnÃO"tGžd°eA_*‰f𙉉®û1ü%£ùù0DD!#"""~ …Œˆˆˆì„BFDþ/ QȈÈ?G!#""ò�ý: ôÿu;}!"ìˆ 2ÀŽÈ"ìˆ 2ÀŽÈ"ìˆ 2ÀŽÈ"ìˆ 2ÀŽÈ"ìˆ 2ÀŽÈ"ìˆ 2ÀŽÈ"ìˆ 2ÀŽÈ"ìˆ 2ÀŽÈ"ìˆ 2ÀŽÈ"ìˆ Ä~�úÿº�¾‘vD`Gd‘vD`Gd‘vD`Gd‘vD`Gd‘vD`Gd‘vD`Gd‘vD`Gd‘vD`Gd‘vD`Gd‘�دAÿ_·#в#2€È;"ˆ °#2€È;"ˆ °#2€È;"ˆ °#2€È;"ˆ °#2€È;"ˆ °#2€È;"ˆ °#2€È;"ˆ °#2€È;"ˆ °#2€È;"ˆ °#2;÷óÒdpüƒ·�$XúäÁÄ\¨k3i­2T|¢Ø¤ J, ‘È_©À ÞÔƒ‡Ná¡Cìf‡ìÒ5:úGõý>{b²g°ï‚x¶ñ~Æç³=|y®oöl d´B2Z!-‡�„ €–CÈB@Ë!d@;‡LÇRi3/Ú! ™|¯vËæ¥TõhËL·Ç� Ð&�PȨáT2™®®ÜüÞ”üƒµ²fzc‡� M2 ¡�éu-™j§¥q=j�2@Û!d@R�–©[Éô4”«¼5òÙXŽoq7Tu{Ì-dbçh^„ H(d¤Û­d&´l­òÖu»_ˆoq^ö~0$n!;@ó"d@"!ã^2)�ô¸…L!´B$2î%3 Ý$d2 ù�q)™ð’É]ó²/¡ißÔ(ù¾?Yµ‰ÌùF¿Èƒ�O߉LÙõüod¼;Ùg¿N:¤¬ß7òÑ2b—+±­¾Õßë +3i9g4}r:þ³+3(Ü2 aÍ2%³h>ßõÞª1 Ö¤V,Vm"Ãvx(/Ô¸$²«F¦2éMµŠOÇÄڰˬ”•ì’®:ÑòfJѾÿ\"Ó+-;üþX8 d@Ú5dê–LF�/â«ñÚ9d²Z;d>5’r™N{f¤ÝéÖ¶V¤:€B4¬YC¦^Éj¬Ê¨-�3×�Y?¬2ãg•‹‡�C¦WÏˉá-«U8ÖÐ’pAÈ€†5kÈÔ)ûÍGqLä®×ÄxKv9‚`¢j³!)í­«xy­ ¡©Ú!;1§Öú˃½ðŽn‰ˆ^pqP®v«u ê"d@Ú8d¢’ÉK-sjÌ›á‰^Õýײ(d ïûÍìÅCfgTdhE­ÙÚ!S}b_xD`GoÁŽ÷ÌTžt;-À!üaçþ]›ÃŽ?” >bÁš„뢶j‹Šm-Q©?QQ(*F+¢E­ídQÁ ‚Cp’NÒÁ!fsÑÎÝÜý£|Þ»K¯žiî=ºœòý áòòdþr¹äVÜ�‰J¦"½üìþ›k@M§ê2õ!‰¤CfRœ`YMcÖ+dŽ©Y¨Š3æÖµ‘¦š½ BäVô�Q顺¢¦,fDÍ´_È|�Þ!S?)¡Uuf¼B橚%‰\��ÔÔ¬�>"r d@n™>ÉÌ„Y’œjú…ÌÆ6!3'‘ ¡¦–2I»Ô'#ê\®«SÿÐ\|%|2 ·Â†LŸŽ‘Ûj^–�0.Z�WÈÜØ&dJ쑚}^!óHÓ¦DäF]»FÎrcðDȀ܊2ý:æà7M¹·£�Ù�Øu5ï¼B¦£i¯Å,¶tSk\x!d@nÅ ™~#5íùŽBæ®ÄÞª™ò ™5»žD>»�3Qd]<ÕÖXû¦ÈFÈ€Ü 2};F®jZ»´“�Y‘ÈIuæã�Y–PÐè2÷ÕÔ¤—êèâË–:@&BäVÐ�éß1ckêÌEö¨s`34:b’É'dì*ôL�›"¶äͨ:ãé�—ÕlÈvÆÖÕŒ€L„ È­˜!Ó¿cdPMû Ä&7Ÿ×?¯Î1Éä2¿NŠ)·ºýòJ� q¾D!“ÞxSM爄î½6R2óÕä×ß €L„ È­�!“Ñ1r..—Ø�š5—"«êÜ“L!£ C‡©óTL;Ì�;"‡›ÿkcxzdVÌ|ÃEM Õpíq¾«¹+<2 ·â…LVÇj¨LÍ5»š­k¨³ ©)#dL]#_ËbÖ5Ôîhlü¯�ÓáÐ>wicY�Ó"ÒTçÜé‰ÁIu^„ È­h!“Õ1rCMã�lª¨9*æ¾Fæ$5õ™+GS/Q–c í:Û}kYzÿ’n56UG»¸!ø#d@n… ™¬Ž‘]jÖ%qBMã°]]è$¡á&Ï�ùtx�ÆÞI䇯*Õ$dRûo%µS¿ˆ3<§‰S%àƒ�¹.d*3PWsVÃêÜSšZîØ÷ b’)3ddv©­¦2“ÔÑŠš¯—IB&½´ùM�µ£ ¦Ö[êì95#¼2 ·â…Ì´V¦e'ª»ƒÔä¥<±º[¶ö?{¼”±¿ôø^m¢\•?\¸6¸Lø"d@nÅ  d@_„ €ÿ !ÿB2Àoöë€@Ðÿ×íô…ìˆ 2ÀŽÈ"ìˆ 2ÀŽÈ"ìˆ 2ÀŽÈ"ìˆ 2ÀŽÈ"ìˆ 2ÀŽÈ"ìˆ 2ÀŽÈ"ìˆ 2ÀŽÈ"ìˆ 2ÀŽÈ"ìˆ 2ÀŽÈ"ìˆ Ô®›ƒ,³ÿÆ)¬±•»-ž¢�9_„ „ 0ˆ�B‹�°–)BØEÈBç2v£€`Ö¸ûIEND®B`‚pydantic-pydantic-e28e879/docs/img/logfire-pydantic-integration.png000066400000000000000000002464301526274674700255430ustar00rootroot00000000000000‰PNG  IHDR ¤)m82ýPLTEùùùÿÿÿÚÜàççêâââÌÕážÁûïDDôõõï·zëëë§ÑÝçèè111+6ÖÖ×ËK>>>ø÷÷‡‡ˆ`chüüüöööX_eÙÙÚ®®¯ïïðÈÈÉŸŸ ÏÏÐààáÜÜÝÃÃÃÅÅÆ»»¼‘‘’&&&¶¶·óóôíî�$i| ¾¾¿¸¹¹€€€°±±ÒÒÓLMMJJJ¢¢£788vvvlllãä剉З——BBBœœ�ÌÍÎßßàYZ["""éêêoopƒƒ„GUiÔÕÕiii““”444©ªª§§¨WWXòòòQQQzzzŽŽ�ðññÀÀÁEEEdde««¬sss´´´¤¤¥:::GHH«µº2ubbbÏZ/ ¦°¶-***i�\\],,,{|~àâå™™›SSTææèêŹäæè”••ÄÌÎÊËËn”²²³}¥åé÷íë___õèåð×Ñ.//ÍOÒÚä}€†;<E‡r("8´øW�{4•&Ukªznþ¿(Ý2ýù>cAÒq~ þ/¤ @n‘‚¹E ä)�[¤ @n‘‚X§PïÖœ¼«uëɷǧùt´Xj½\Œ¦ó§Gù2RëÎDÎrƒ/Ï#ýÁèùE¾†À6×&�Úe%y§Êms%®%—*“¿z§Ñ¤,_@ `U7!HF”‰Áz/Feø¾¯w[Î+’)€UÔuna;­.GîZp²ðW´¯#±,ôW'‹‰¤E `•%˜dZ0g¿Oý7zÍßÐëcm:–tHA,¢Ô™Óĵ�3%'»êt®Ä ¯ñôÓÚßãUR!°ˆºpœÜ­CPŽs¡äT�b±#6˜û»ɳÕù\Ò °ˆª3ÜÒÎâΑ¢!˜ù1Ëõ>8ˆøÁ‡2œI ¤ öPªë”Ie§«”lûf)X• Ìü-ÁéZ�ÀJÕØoQNí»§`µÙ,•JÍFCN3ÛZ FšGø6ŒKÑ‚¤ öPÊq9Î÷NÁj³´qZ Îc£@óÜÐúF‡Æ: ær)€=HÁ S°U,¶¶n‰—•F)¦Y•£½îÚ ß îo‡·÷­ûA˜˜.ü!�‚؃Ì0‹Fk÷ŸÉ´²œ6¢¬J#z'Çû‘÷5°é=}>ö\¯WtÝ὆ý0i,Ÿ#°)˜i ­Ýó S°ß 7NÙO“#ÁÐô`8ô¼^ïÒsÍ1ÔýwáÚT>G ` E f¼ 6~íû¢%YˆJ°*Íèì“äL0\ žç¹®÷Ûí¹½U >è°gŽ÷<°"&°)˜a FÉ÷gÏç-ÉF²¥zôЏ²HŒ×úÁƒçõ\óè¹—æÕžá]ä­ù )À?öîçµi0 àxò0ÄZ^Kdm§N[5t¶v[£­Z­Xë�ufsS‹’`�âð U,x;lˆÂÀ!z/ž¼øx�^„ ‡G/¢ ø¦o»6±¶±]»vˇ±%%�Ž”æË“tkæ§‚îpèôéPØ «C�)áòÉ·Ÿ=¼4‚të×Y Öúéa‚,§Þ=ÈúdY› ÊjV•Ÿ¢ªïÝ,`ÓÁOP‰•‚‹Åb±´S)h©˜§†VÅé»Ö„px?ädb>ßD,“xl?,·a¡og‚™©Kwª -A%«(H´(Ìf/²±àâlðæF¨ÀJA‹Åb±XÚ…©©àŽê„vÀŠÇR°v™ >o" ÅRÐ]ë�‚%%HÇ}7Ögi ª ÅÓ TUû–Uµ±àlI ¾‡Š80ç÷°X,‹Å²œL¤ ;�ˆ6G÷!A8Ôí°!bzå_&®3| 4BýSÁ_º¡àõð< Am ¨ªô[–¡¶DÜ}8Ëä{ðTÄ™,Á[·–¡»%i T×%�Âß<ü(,©IÚ–Ixå{ ‹ÅÒêLLwi!è„E-wÁ WG ²lL ºÝnQAO¬-?臘4—.ÒôÎÏÏ'l‰„÷ Ö‚ižÆà½©Y] N½�J8³%¸-¸qT7†2üÅ…ˆö%ý÷Ð!ÄU0d_%F:¡hb,‹¥õUKA7"ŽêªHEÄ•>¬+3¼fÐÎqöA^“�¥D&(R0Xë‡FJC�Þz5«ÎÏÍ}þüõëçÏs_ç62ß›UŸÝ )¨‹ÁOP g²ëmÁ¦§ ØPí07¨­\u^"uˆÐ2¢JmÅuP¯NQ<Ëá¨è„ö¤‡ ìáร¡S`isU§‚;Òˆ0p ¦w@}z&'O@rRsŽOÞ†2†&_�I›&'77%µû#vȱGèÊ,7‰ú¡ XûõᇅÔ†}5=÷ýû“'Ó33O¾ÏÑ"´©Ù{³%ª_!æÌ•`Ý-ØüÜX f ¢h¥àjcHAØ“ÙM×ÊIö]À?†RB:¡^Ý„¸¡9*å‚‚ IBkè ‰&�ÃrÛ쑆Iä´Ø ¦Å €¥íUIÁâ(䃈…k“£ˆ!(•ä úÁœ>Dí¤Jð˜ãGÊÅ^È ð¼˜“<Œ¶!înF fxÊyö¥ Š˜ ²Ô"ü¿×†¡àMêá3Y%sZÎ<þ‚š¡Qø}^UÖÏêÐM_Cœ©¬»ž‚5c}n¥à*ÃRp™õ‘EãÇ„Õ�‚× ‹³)¸%ÞMÐGŠÆÚ#»S„‰d ¬ãáãÆ%!Ö_‚h{Õ¦‚vD›š`é4J°n™’°€or ÚŠCËcÅÔs!:–-cÚÕaX4HWcP7)±¸,)Aþß[­©B j-xC•ÕÈç…'4_ä<Ÿžž^˜çÕGºÔRð TÀ™)A“-(T\¡¸PW>¹2[™OA¡®þJA „ò;²>hÒšþ#9h 1¿ßŸ¼!„„N®‚/LOÏh)xÿþýÏgh ªÊ¥Y�j7 r&JÐL ndz˜xìfÇá`mñ[!$ O'u²`g(�Þ8+¼^⇜ý…w|a$¢`v|›!¹c)½º`ºoó(§ý›KRP’ÇÅwÉ­1-ì;p�—þŽ[°3îCßíÎB Ÿäcºß­q^&t]¸Ú/g£N`„‘”ŠÊ¹ðI°´C „ tj/ÆO".Ý¡n„¾Â�æ¤3BHrå§`Ç0¡6·d Ú¡ RðTŠôîfƒÓqÒËUOAËŠQm*¨¢ rQ÷YUªúT ¯¹)¸ qG+¤`‚ÏIå£ ,âèªO·M]%ȈA±¾„ºdSÁ©»²Br)øâþµû÷þ¤-8½0Ç+g�-ø *ગ ™ÜÜ�Œƒe¯™ÃùCœìC�¼iM5J.ñƒœ!D'ë*d®êRP8�LЕE2ê–’© „¸rPéFo~ß#˜“vÕÔ‚vsœù4>É~ì?"£f7Œ9} ÛŽt€¥ÅSQ/¦!gƒ‚½úC½ÄŒ2DÙþÏùº`HAŸ‚æòÆ] ²]5Ð.B¤H—!ËïXt)húÉ50…ò)Èýs;e+!`2„ A÷)(T{�XZTÅt/Uþ¬,ôˆƒ.THA÷íôÁø±�åÖ\Žs¾Ô>¡$‡&½wâ��Ã�z½cž ùm�±Ë¶øY¡$×EÇ“Bi žƒJ)èò�ìðÞë%)¸g|ܽa0“£í“‚¬‹ HÕY‚ðK—‚l,8õLV¿Òœ™¡-HÑ+ÄÏg¾Û”)}Ò¯_PWµMµ`?ʃöÍÇ'{´)�rȹ-éeUäBì—Ž�#ÚÎ)W¶÷½eSÐ�Ø{µ{0�¸½4“ˆ6GÏˉü=g}¡]goËxp]1»i‹^Qq(IÁ„<°o[˜GLB -¸Ó‹ñb¼LX Ÿd?f½©®Ì(¢<†§Gœ1Ì7i±ßÑs´qÀzWm5åSÐ�hgÍ‚xÜp¨—˜1@2¤p¾ÞtøB$ÚçæP8–JIžC‹ ²'|:rÁÓ¹˜‚Â6)y5²ò6ùÇI$zu0™+QrÂ?"€Æ)I‹Çó”�Çã=úÀP<> üv\ƒÛ”Ló§É]!*uo<>Ïïd¤ f‹÷Ûë[Z�¢‚ D?0mtã?bâzt£Â‹Þ«%'¡L´¯ª‚‹Ñq�ÄÌÛ¨ *Þøð—2Áª ¿�8@GÄ+ì]}ˆk|6+ü_&ˆ 1ADŒ4ÂáŸ÷õÍ¥EGOO+RÞÈåå§Ç•Jåü´’ŸýF²?wPA6Á[¹`?â¤bÿ£¹}Xæ�TnÀmnb!‰˜óË7Í#vÕQA7bR�áæ&t\GѺúáŸÐBâ­1€i‘¶ï{÷bÜ. GÈ-ÁHQÊíývSY)\]ÍÒîêꪠT0r´¹þ<´@ôJ�_,ETèóÜE1"¿�…é.¯tyÚ´7D ˆBý(‡€X0§�Œ1½Ê☠¹«?ÏármÉ‹8Ä£ª ž€DByeçJlŒ¿;ðâ­ωåzY;ó¸åÄ9£ R„Ù@ìæ38š5¨ ú6Bìøl&Ã&hhNṓ Âûƨ ‹à'ÿœÑÖéé…¤—?_œÑÛg§É•g›rˆÁKüë¶*8�8믧ڈ6EÇ6Af^‰›qûº¯ªà0b²*`+UœCŒš3Ñsjƒ!vë*èâéè`Ó`TÁH5nþÜZ=P¿èOÀ؃u*ù@KÅ/«w "¦Lµ^AôC›–âìCôq»ÒÔ Ç, œ³"$ÅB§šk;ëëÆA›ϿÅbdž—–γ Ò$Hôf€þP܉D¯ZŸŒMWÁnUôzNˆ¬P´Ì߈Q5Æ™&òC£áö%1<4#€Êª€ îS~®þZA]i¡„"Ÿ.*JV»Â$mô(K>?mZŽ×PÁONÖWA�ç0€(kKëj´6ª*È;•¿À$TYTî›Â{< ºÝEmYÜzFáTP‡‡ó"’fŒƒ ²*x‡þ[L³�‹Œæ�PA柋ʧ•ó‹Ó¢äƒÇ?œžË\^ž�W^Ê.¨óñTþº� r¯š�¯Wå_ð-…SûÔTpESÁÃ×UÁqDÜdóUôÖL°–ðm`|ˆq]á³òèˆè2ª öËß"z^‚Ø�ø˜,b°¶’œ6¢©`dœˆ)庘žwµmZŠkT°7‡ƒÊ·‘]¸ÒÔ Ç¬‚sæ)?/Ñ,òà­&òkâèf<±i'äš?e'‘˜ä7Ü«ŸUp b´áàX{–ȣݪip÷ôíX¹ìæòŽ–ôLÄͯÜ}ÒYåñŠèÍ‘‚úÎ|®ª >iA`ó)Æ*¸R•.ÈØ²ôšÁ€H2‘t€«§]6lÑØ�*è3~¼qŠðÐîLrWØl§·0ÂkL{x`»f‚G¯¢\ÅÄÃÚRLË<^ÑTpK³Nö¾NÏ·‰nìà¶)ƒ“Wfã²7©`ñÓÍ*x(ÕX&†8`PÁGÚà:ù¿xð\¤F(F"ÈD€¹ÃñK }~øÇósñ¢r)q|y~üCåRzäȧ_]žUŽ•¬]ï0AÌ.x«´ade²V»d^KÇÐ@YUAåôè8·õüHSA¾¼àYçõ b]_ÛañMÓÓæJ^§‚¦Z?„6-Å5*Ûx(•ì†+MÝpÌ*è ƒNQŠFT�è!Ñ«`0Š+�7Qàr@ý‘.UÓ¬‚>PÈRQ_cæÑoÕ$Xç” z"3ªà‡ÿ”X" **¸&lNå¬U°3C' šéˆUCUUp•ç…ù ѨZí&E�‰QšÂÃÇqRX�?Õ^î>ár æìXÞìÛóo*ƒý¾2« ÈÛŠèŒ#ú,TP’½7Ô{ÏTpJ[ª³Ó$„îš ðDp£ùÛdþ¹À2÷D¡{e]Yâ0®;–Q÷0\À ܤ‚·7ApV=´ƒ\ÉÛ¨ tÝA'(ˆ˜k϶´ש Ä0³ÜM¹©›‡Y@bŠ«õˆR}�W§ýÕùÝž±Á}":š¨¯‚`ÒJôI¤}ía·ßÃë!¿7Q£‚¢)ýé<žÚ[5�4é *#òWyVO›T9ktlå'4Œd?ävX"zÌÑ„1*(ßTš‰�d;}“(å×ð¼– öÈ=…™ªv…®½ô.Û{´ÂÍžsƒÆÎ h¼…»V…’úCÿr¨¶äGÎÄÏi*È_�%³ÂdO”Á>�¸ªN…ù8ƒXÖ"2xÆ&n[ªà‡XêPŠËËÏ *XšQQßl¼ No'TƒHŽŽ¦öÔAâh˜FDa†rTð# ª¼¼”¦ˆ+—ÒŽ‚Ò“ˆ¿8>®*­¼¨üó±)*x·ϱ Þl‚éO\êŠÐQœ9ÜîÖ*Gœ‰¹—»Ó¬][³i])™œ|°¦tÌAÕ¼lFt–q­Œ{–*x{dH M;Ÿ° š+i¡‚ݨ†ÊÛ‹°[�kUpqHI]»ÒÔ�Æ, ®ÄÅÚ’óq°£3t«*ˆSއ�íXr)†9ÙÛ<Ø;fñ`ÌÖ3PÆHu‹é„ÉAíøÔRŸ�âãÌä±ÜiPA|cÌ9“FŒ WÁ„œ®3FH§ß‚ÿH¤&AÄÃå;òëûl‚†Ýd^þöùÛgt!Y ä•s)x©~)ï>ý±™ßÁÜέc‚Äü�ЛfñÊ"¦Çmãi,Y«`â½Ð\¿{¶Ìe[1æö¯Û1çÓUPÈ ž ÒˆvË[~É1¿(õD/URXƲóÖ*¨§X]�¯„¸²Ú±¾�ÿãZ~ lp+´6Aî8h—þFæ¤Òó2*¤RÖ*(¨jÔÍe>A•�ñÁs�„Ìì¸Ö©™0«àsd {�¨àM;>†�ù‰3ˆÍ•´PA½ÖöhÓbü„:q“ >BMÝtéOm;ùT?§I° Æ 1'HØ¢”®¯‚´¤”ãDC¼p_1¼y‘äoñ"í 1­UÁ)¢°–5JžÚ[5žå;A%õb Fi—õ7‘IöšUÐù/ͨœµ Näi FùU£Ï@Â%R>¨·CŠ?tVˆÜº r;m a+fŠÐxüD‹÷„Q‚5¯�GÿdF9xÅÑVõÈJ‡�ˆ§ß™NЮÒæ …„æìCЦå¸Aƒ[,Uµ9#[A+Ò²ðÙŸ:딼¢TÈÎèÄ�;²íq6dבt,Ž'XÁEÄrÒº >ÜÂ’«ê~%ÁZa:Š™ycñ›òÙ¨ ­‚ û5*8d¿ƒ zdºÓs‡­B¬xà矽÷žd‚ß•JgÒv‚•Ó‹3 i³iy›Aûwï}þ‘Ñ?ùäo°Â·vÁ¿,…éIßÔ'II¥ò‡Â *Îø("ͬªe˜+–1÷ÊF„á˜|z¶Ð Ââ=”Ø]é¼ç5UÐ7°÷†l«kÀ*hª¤• jµÎ|Цո^;Kì,¦¦n8, SCCCî§)"Úõ©ƒoa5ØØß êãKÂ.;D�ú*˜¤ÅiÇ@‘(&€Ä:Qj kf)K.Žó„½¶‰¡èF­ : DáÙ»·Ðã8Žãû>- ý¦3Ìy“ã¦9Ìi„9æ"Ì¡�r(n]¨…Sr� Ì�ÜHŠBÜ(î(7SV«)wn\¸ñû>ßÙö` {<Ÿ—íoûo¶Ç¦þo¿ßžß³!=vˆ’ÅäœOÕmεræÙ#)(æ˜8ÛZÂ'g ö5 v#4àOoœ¼U¤¬×Dí œ¥ívJ$nŽ„¶â¡Íúû0`•Ú8rixÌ4¥–hG ò#&Ç„ÃG—ñ¸f÷ùÖ(uuL__z„yçíÿ뤩ÃQCS©”ݯæåLŽ] ë—š¦ -Ø®l³d·NÜ‘³I>©Rø”sÏi7*(å±ES½¥ƒýtß±f×b¡(9èѳuír(L ƒgSS‹ÛM”Ê#,p”‰,&³šŸ¦©_MAG :LïÇ"ô œ<›Ô­¤w_S�;0Ÿµ™\¿­R®TJ•bùq¹\4¿KcÐË3�)øŽZñQG>q ¶¦GÏ6\[ÑÔ‰¾3V;7(r´¯&áøöüT§Ï_¦¿%0*@²‘mÈýFû \LÞê?c¦ªÛ#¦‡ÈÕÄ|IÁðb¾’P&�4ý0GíT¶…Q²�W"u”Œð&¹¶i¢#Y ®lÉ)òóßñT]·µñ¨£yGIA6N1ÙIÁ™‚´Es[l\÷߉ýD´™“O¾¿‚ìv:ªÄ<¢†÷!WB†%Å$UûÝçØ3üÉabþ«J¤F›¡X´~©y ÒR~y7Îó�• ¡Óæêš�JmÇÒ½¨M ÊTÖÀéT3| =³Ñ üBI ¶ñ«)è,Áé™ÌtÕœA¿F<<‰FŒ�KÔ o«)xlG.ϲ̤`¿RѬ˜ ,–Íåm¦ÍM¹}õ<óœZñQg>}"è g€¤VÍš» ÞL«8ÏT—˜&½r!ÿ”ž5‚èÇ)Z·<ÅkÊHè«”±x>ÙüCx�¸ñá)Îd£“üÈ#ƒ²˜Œã©ºo¡Ú¤šý|d3IA6f™³5}›‚áåü!Êîn\ûŒ¤Ôb¾ý*‘vZÊÛ¿¡�ïÂi)þöA?}›‚zåiû}E†oî!ÅÖÌñ“�çÁ½Ô�¾$Æ.ÛÈ(—š§ XgòŒ­î�Ä_‹�¶ô Ö£‚bÄ^ŽÁ!cÒZ§Ç áÜ;‚zÁ€_8 ëŸMÁ¹Ž1ÁL¿~ª™þ rŠî•`m†ølÞ–ÍK î*d̼ðÇrùiÙL4„§$åw“<Ñf~˜°n@o‰�ŽR£ ÿ”nEGø¯¼`5ÕÍŽøèÇ¢òÈß<Õ¿ÝtøÜ·úßn\­�¢¡€¦ï � –oG§G|ô…G?£¾ÃßlËjŸãR[+êëT® èMíS�¢ÉþÉ(õ³K³¿·RЩŸAu‘ô«d^XÄ»Öá¯9÷}-ÁÚ qaàšRÅD`‘¿TJ3“å¦|~PŽcðŒñšZ@ ´OÁÿØæ… Çó/T ,$ØëÚŽ ŠÁÉݵ£f&S�E?oèÑ£±¿˜‚Ý2iRœ;�C°[†Û·Ï”`Îþ%c‚¶½S‰Rùýýk÷ß—K*S™Ì·˜ÛóFîì>^vf(µ€ðt H©�›gDv*…Cdº€¤`{#æ&7mJÎí�©áßåÂd]~ñyÇ‘—¦îr&¿¦ ×àäÊÀ kL òâÒkn,÷ã[Ì9Ï÷Ë Úq¹ÍN#HAO§ MÜ®Dj8A¯Ó’‚àŠì6ÿg™Î噤 Ÿ‹¥½Íq¹X)ÅSÅr–å™Üùæç¡Ô R µÅñÅô_ ,YÈ;Ì,EàHÁ?•‚²ÛHO{ý’+°z– bNÁJ±4P­)%*ž¨”‹Õä³Üùµ„€`ß¡n€QÁ?—‚²˜Lo{“oPMÁlv£LmÛ–˜I”ÌjÓiAs—¨5¤ €{ ›§àÿï®æãÆ“Ö+°¬ùe/,X)År¹”ev+ʨ E­!Ü£‚ÞNAÚSM<éÁj fK¼²´9UŠfP0“er¶‡Ú@ ¸RÐÓ)H/8ñ |6'›É¾½Efz��@œe2pÈ^P;HA·Ð¤uÄòFôü mE<’‚tÅäW^Á|•4Ö”í1Áê `¾!¯P[HA÷Ðúˆ…cÛËoñJ Ò�¯Ã‚Ùú°à¢RÑV.nã䳬1}‡ÚC ¸‡Ö1+Mà”¶bžIAºÀ˜ÏîÊ6 .JTŠFé@VäåëêRÀ=´ö[˜!þ†¶,¿wR�U?)È)È'Û„LF ìWAöˆ:�p­}}0,ø�´ÕÇ硤=ù·`è _‘fì¹a±‡:‚pm ®#¨[ǃ‚^JAz0̤ß.IÁ]æ¢}ª‘¢Î \Dk_-øM †=5(ȶæ%™d`M�C0w›:…pmZ0fYi�¥OS:mY1Ÿ·Yôg„ÙIÈçzæ_D©cHA71) [&ý^«Ÿïi¿ A+ôÜ  ‹Ž¼X›!–,”™â‡{?‚HAWáô,¿7K�Í?÷ÁNÁB}a™W�ÒÏA ¸ O›Œ‰X^93!èÁéáºÃS�u“wÎį?º Ÿ†pmø‚ÁàP0¯‚O{¹»)ø…=;8‚(ªÖ ¤¡ô_“﹄켷ìéÃÀnÚp w¶ñ!ø™€í4^Jð3)jÁ%¤ •õ?�°!)H]}B ´àc )He}B À)©¬OHAŽ €PR –� –ˆ%bIA€XR –ˆ%bIA€XR –ˆ%bIA€XR –ˆ%€‡Ý:äo=ÈE[*°¥‚[*°¥‚[*°¥‚[*°¥‚[*°¥‚[*°¥‚[*°¥‚[*°¥‚[*°¥‚[*°¥‚[*°¥‚[*°¥‚±cÇ&Ä@ÅØk ƒ2“sù»ƒÎZ®*Ц>K |Ößœu@;§æÛ¬ÐT½KÁ'Ùc šYc'Ï›¬!ÐÓ'uŸ‚3Q‚]­‘Ìë¬l%ÐÖÚ©ë<4–s�‚‰)ÐØJîSÐhM |–~ìÖÍJa‡ñ³h!"¶ñ@øQŽi~À[*™DàÂ…YXBdëí$Z¸hÑ•¸êJç›…ˆLÒÀ<¿Õùsnà$)�X¤ @b‘‚‰E $)�X¤ @b‘‚1ױߖ‹Km÷DHA€´>S�î)ø_r¥öÈa$Pï·s⩎\'ð§j�©ß¾Îãš‚–YËË–éH4ÅJÁ>~~/‰¯1¬Úß&TÙƒ1MÙÆ˜¢ìª®®Û`g�a‰g¦®i(áME¢(wS®—ñâþÕ;/bš‚§ºV• ¦Ú–HJõØE? ¯½]Hû¦z [äT²£\mÒ[Ɉ¯1Ñ«f�}«�NAKçAç,å4¼.ì®æ2®)X«¬}¥àPÕî”J…‰ö³âÈôu^±ò¦¥³ô^SðFkv—/†öˆüaï^v”Ã0Ž¿  !5&<ɤÐrl"´FÛ0Db�x 8 ]¹paÌ$fâB^‰+¯a.ÀKók)Ó"­Œ(Šãó[Ì ‡ÎðîþùúµCDDD¿S5(Á]‰ùšrgOSЗ؎RÐÆÃ¢NÞž�EqàDvPÙi °e S�ˆˆˆvçæúàapšØþgSÐùµ,UYh‡?ä§èK¨ ÷Â)Xþ)8f ѯ°ÓÎ÷Ô³ý!«æX ݇¥£‚NLÓìÚ°ÌP[jõR©>\>0‘â°bʺP�¤>¦y �úERðÐ4�€®¸* ÕFïáÑÕ¢¤Ë™Ê1:ñ!}3dd¤àL½V`j†ri£êf¨%rWý²'BDDD´jôLÓ^Èš®JÁ¯ÿB ÖñhØ�Òé‡ †¤ªZ=„¢Í�¾T}Yw0%ÉÁs‰LQ¹H N�ðHBnAR™k‡¸•2RPGR#mÔ1B…òs(#!"""ZÕQÍוu¯ƒeÁ"]ß1†‡>:… ãLÅ]Y<À¯èzå-¬ârU°?ïcb¹e]ÞÆ % ¥8ÇÞ qÁUA³¾\Kà ìÆ0W±`·7¯ ŽÏWÝÌœ™Ê»åª`5mT]½pJ˜Z®Û"""¢U5í±¤8 î(óO¤ QZ\Kß+Ø€Õeö§éÃoö2ÓÈÞUó²ä‰ln·Wðj”€Å9Žf¯`¥ {7ŒÚN­œ­ë«â{'i>kÚí}LAÏ^Ê-RðÍùò`j >™.«­»xž‚gï$[Ãâ_3ï÷Ñ”Ès”¶KÁ%Tð¼ÑR0sÔ6`å…ˆˆˆ(…«R°%iæê•Ѧ`¬í\F‘�š‚5Ld¡·Y(Èèu˃b…L’)8ß*gñƒ7¨ì 3GmüWuDDD”îupÑH*C¥ )?Òèi9NK"F¯±ÓÄ…¥ƒ•¬á,5O1/ôã<mÙ ¨WJ€=+™‚Ç[¥`8ˆcn)˜9j¸+DDDD§�Kª–JÁk’­Ü�𾄜šöÁ‘Ð}õôÍöŸÚ+¸9›H8�÷ ÊÔ*S�ˆˆˆ6�¦½’T‡ªèú— s8;�…âS°–—È1¾,Âï$¾2w«<ðP•ÆŽR09*S�ˆˆˆ6ˆÎçV%�¯^)^‚Äb¡½Ã7.”‚u¸e Í¢k‡-K oášlNÁäEÃqTöÎÿtþ÷¥àU¼Í5;kÝ~Kòã®!IåÓ:¯4!""ú/ÜUÝæKš[švSöñ²‘üRæÄ㕬âÌ,ŠkS_(ÇgxcÌDDŽéh\h¶DÊ�0Õ—)8ÌG2{y�LÁvõà�†�Šü¾,{o3FÍLÁ€º$˜†’0:-!""¢ÿ€ º+’¢¡Šn {x3™X3+ó�Î$”[Þ0úí¼4Ü'¢tÕ Sx“À©¤N ½ñàõÏÿ¬g /šx„XC2ÁžzèwÔ§è €kéí¨O˜Ê¢Ì'Já,A»•&ÊYü8ôÜ›„NÓF5¿ÒŽ?…RVóòS|ð4DDDÿ‰yƲàSM{YÞÇÿ6²1Ã:C *¡ªå°�òp6gœþ®Å+驸Áã¹!?‘‚­ã ”åÔ]€ß—t'H(‹â"Ö ªoeöˆþhŠ@#mÔ1b%Rž sUŒì‚$Ô=¸BDDDÿ…Oªå{¶z²)¸¥|Î89ø©ôZm´r„´ùSÔf²ÑîGÕó²â@/ÊŠÙHˆˆˆèÿ\þûÊ�¥xÃß•âåIÁß`…ˆˆˆè’¹¡²ïzW’lMq„)˜4ÀUe&DDDD—ÉgMy}"K�§ZàV™)˜d"0"""¢KåŽø<7ZR8ôoi‘[{xÙÈßT;r‡»èˆˆˆè²±µï\qn…-È$"""ºô¾±gÇ8 QEÇ¿J1JeäÆtHÈDGÃÜÓN“=²4,‚:¤I5™sVqõÞúuøãónLó¹¥ Àí[ŸÞg/ïsÚý¶ èÁÇýãóÃ:¦Ý¥�R C?-¸IA€ͯR WÇms �‚HA¤ R)€è›èÖU)8%š5]‘‚Å*д(Õ)˜c1 4kZ"W§à‘´ @£¦1V§à�£hA€6M©DêSp8E,b =SZ"NC} îrШl!–‚ÀynôùKS0›•…X wm„�|R¸£íÂÅ¡jÊ¢(›ê.ºV ¾ )Lkûp¶]%_VÛpÖ·ËJÁ:ž…¯ÕRP OëÂhÝ$?4ë0ê–”‚å�NJ)(€?ü Æ"¹QÄ0Ú,(‡ôŽA JAà)yÅdB £|1)X§énc<¦é1~ÛïÒ´–‚R�Ovîm'�( ðaâ iØ1Î$fPhǦ‚�"B‹FDÏÒքؤ±�mÒ/JÒ âƒxÕ'é£u6Š{˜Zb�õ]ÈlG'q±Öì?*0ÆcƒX–ÖÐ…vN-ÿ7Q0H´qóô¹l8kŽ‚cŒ16SwXj‹™h³t‡ùEÁ zT‚ÿ}\MNà÷qdŒ1ÆØ¤^3W˘®ÇÔ*îœ\ú(xИÁ¢�¶ú*­â÷qdŒ1ÆØŸæ×~µ–KïÙa�‚ßh÷`Œ�p í]‹ ¿ôäó{_[á(ÈcŒ±?-$ßY½¢ 6�eˆ£`Ë,Ñ,\²ÄCP×¾¿‚wÍQ�1Æcz²žîð$Å GÁ®q­F3ÿ, f³Óp™Îf cŒ16Ð뇭ÞQÐr–Ë#£éd®¶©¡%”HæVæØ¥:Q½´Š[§Á/%+ TÏ4ØKŸš+qHz)p}ÊÚ©æ2yH+%ÒY)Ôqm{qëmiã3®k“ Ûçð*d;²à´³äß 2Æcì÷íèºn@2cºKÌ„d8‡;#}j©ÛpĈÞ�}­À –nåhð^÷E_‘ãÔh’ôŽ·4Ó:5÷ž¤M8ö¨é%¹¯í[ éd £N4¾Gƒ¢Âß´gñPQðÅ#ô5[Ä�ÝHï²jnEKkWx ÝLE Œ_Ć›U¼³Ê#ÿNH-³íº»,ªå˜w­bŸÎSg˜ê7ïý©X�›Ï?j÷°þ^øqÇ ª‘Q½kOõ�Ý«…TeûWm ­Cwh�bz‡$MŽT|C�xÑ¿ùŠÖ䩱�©óÇ´cDc†�[ï߉qéPgl¤ ÆÑ‰Çûv¡D{>WlšSV��Ypø²â¨w•GÖMÀ¼*‹f’*‹j¹û¢ES-7ªd¿©Aôö›ûÈ]<Ûuf4É1ôö[çýiþX”_ÐV̤Ääº6 ÷°{ jpKˆjÀ;¨ªÃ¼{Âð�jÿ=U퉪…ºî©ª²Þú� éÌûT\—ž£à Qp1qGŒ.¬ÒG8ÌÄ›.ÿÏwòì€^ ¢½¹Ž(x ‡N­ø6Õ Ó¦ØÏ(ꉂêÚO轎 ÕÐ8.ÓèžÕÁCEÁD3f†ôrnkb m+[¡ü�€LÕ,†Å¼g:ÎÁl†­™ä Íðè ±¶SYßÉ‹H¢é°+?˜ÉãVÛ†SñGû͆”/›ÊmÃñ±zñâ(µØþñóå%ÿÚeRü‡â¨õéîUQíþ°«¥++L–»,ªåü»r±—Ü-7’Úý¦ÑÛoêHTª$/…­¾f¸MÓ�CÕo²±Ü÷§¨8‹˜õœÝ.ÜÖe¨°Y^þ{Øý5�Ò‡¹ŠgPU‡y÷„áÕþ{ªÚU uÝSUe½{j2wZ½Ú~*TéùăDA%@ã²:tl÷zi‡A”›ü5:É»£`ð:Ò}€´@AW CúJË=£`‚Ö!=§&€*% tË‚í‡‡Š‚AqÇRù¼GÛN‹<¯�¢˜p˜îìÚ`8 8–_›|„å7DSPImþf°“«2Í ")ý¼Õ¶[KÎ&‡uÿI›™m3²Xªßüøx*�BbHÖýå£ëOw­òhºí�¥Ü, •b@^„UYTËUšá ®©–Ií~Sƒèí7u$ *-'/„�Û3ÿþ]ñÿ>5†ªßdc¹ïOµmÈÙ<¿)ÜD«=ÓWûߠ–ø¢ÞAUæÙ†~TïÜSÕž¨ZÈ»§º+ë­R&¤V¯¶Ÿ Uz~ÙÈàQЊ…W¨`ℯÎ]£àØÛO»�®(펂&Q:†ô²# žCJÓNÏ(¸@™ é ‘ lM~ÉOõË‚* >H¼úÉÞÙõ¤‘Åaü¹0ñ„N 3‰��…6+.È›€¸`ÄQë»Ôbbl²¡¦4Ù4^h²ÆâU?C?€m™3à8 …%n·;ÃïÂŒÅòÌó?ÏÃ8@ &ž¶j~-¶JµmàKš§ß@ðs ò«@¸¬ØjÁÆ­aÛhSC—h»|ÞE‡ƒ°ÂB¦:±sÛè¦m•²Àwê¥6e/D4¯×!è>|Üž(ðÎׯ ëÇUv'=ౌ.•v”d!Ë)ç1G«° ˹’žßhe¿Ñ–(4£QÇËçþÁn84†ä7a,Ûú¤„þZ+KÇ3i`"2h˜Ê®EøCÉ.Ws» H²œÅjlåP]鳜[ÉJƒ(û�¶¹1ãïUP�%»ìÃg¯Y&¥¾*Xg{�ñ7YC»à"^¯ ŠK`#Ž/g®kXûˆ{MN)dúl[ã¦c·²ˆ˜/`õæyêï¶ Ÿ9úÜ—ˆæ&�Úæˆøyë˜2h ÊN}Â<~¤8�~_’Eª‚w¹8ð+×{–sì¥ècú�Qöm öcAM{ÜŠÑ�ý&­OÉb}-¤P<ÕËÚ¶+ְуšáf}¾àKò ’äLpú¨ŽÈT)ÉBr¦’²²~§Í ±_ë;DGFUUÛÍcªà ÉÎÎ ÜT£Ý^w$ªàç †v¢ˆ³‘þ–xº7­MP}Ö/�»f Ð}—YËRcåЂ0ɰ £‚׬‚ Ù]Ö÷õ|€më[Â%›ÖÏÊhÛuîPáA¼0‚bwZ8”' Û6ñ˜_€ƒÑÜæÖ•ÀoÐC¹Y+P SÙÅxù-š YÈrvÎ2/–s/Âo4ˆ²ßhKÐ8Ó(¨;{\|Úh ð›´>é}‰ ¥öìŠ5lô &yÖŠò ’äLpú¨ŽÈT)ÉBr¦ÊÊʪû¡˜ :tµC˜¾�Åô¾�¨º«ª`•‰o’×ì^491â?[íšaÃÇêqË',9A|ËÒoí™±†í¾ ¿1UŽkìˆß³€ø#ûˆ ˜  ân‚Ö*�Y`[õI<„Cùù‹ü ÆTFãI@ÏUÑaÑX†IÒ0÷ì•T»mãO-g_om�¥i 1ø§—‡¿SòSYª�Ên?Ñ`»Vp]”ã šÓI²Ô xã½±žå\Œð ¢ì7Ú‚n^Öëõ}þêíq/FÃî7ËX´>-<½R—˜³r<ì†5lœÓ÷‹BUTr˜” ŽÕ‘™J™H’3Õ®¬¬ŸV}©’j€IÿO^CR0%$^?ì‚*x?kñ¸b¬”ϲ-Qƒ×ì÷üÍ{G�±?ígagÙOùceLP·ß³ŸÎ[³Ù4kÐ}‹¿ßÜŸe¿E{8|û�ÞïUCÖ³Ý=–ø<€â¯À<ß@— Ód3â%ì‰vNRçÅݬð ÈMíRÍ=ÂÙ]@yÌ8Ïjd[å¦íðO8Ѽ—M8J¿<ü@S·g�ø±¬²C/¢òGîJ”Í- È‹$ YNËžJºlî3¢ÂrN}wŠñýFƒ(û�¶,ACGjüërw�‹1v¿YÆ¢õÉã ô^¹)„Ë\*.Œ„ְу¿ÜP5.äA%‡I™àøQ™©”‰d!9SíÊÊúÝ>hbû«½C1ItÌ«Ã^%\4÷Ì»¡ ö( 7ï›Ý«ˆ*ˆÈÁ5cïÃ0)<_³,ˆðëÀßa’*ˆ �1Ö®X· ûþ\ÿ�±“·30‰fc¿äŽñ½ª ò¶òëÅl €§Þ^ôÿa:Öã;L)(OW)~ÓÄŸxt±Ã°¾,Ù‡¥ÅÄi© ®+@øìÀ¼©iþâÙJáç¦)¨×o³ío˜·pðR*¢9ž¾JU¿ðLïáŸòÃÅÊ ¯ Ê.ÿ»ü†®le7E�Ûd!Ëù½ÊÍ‹Äöy:a³œ[~£A”ýF[BPA’Çé6N½vk¼*H~³ŒEëÓ‘ïvf~5›ê Wxx›*DK9W¬ac jÀØ­¦Zéª<¨ä0)?ª#3•2‘,$gª]YY¿„¯™ {«t(&ˆŽeÑH(¢ .ãGª‚»ƒªßîdUp8‘Šb“!R1‡m鋉ÑR È÷-ÿþø¶Àw«‚жÖ8o[’“ÈùøZvÛü•ºÁÏçlp ž”m«­ržÍÅ鉑  ~ÓäIÈ+8ùÍ̬h®)Åçû:zøï î[÷¸b cP•wæ†!*9LÊç�ê¨L¥L$ É™*+Û§š¿Í¹/$Љ¢#£v…ÑG8¤šè?NÔËî�CÆÄn–1Ý3 ×¢?)>ŠJ=ªèb«ÀÞúIñ* 3—zƒÁ»ö|ƒ`f^Áx]|áþ@càٞÔ¾Atë§âþk~+h°»û‰øtÇÌT9åL_ÙOþ×±`¢¬š$½¶ Jª]ô¦ zîØî<Ó*8v|}.û|nÊ”)S¦Lù&ŽÉÔDFìÚ¢háàžjñC½‚Ø£Ý i‚Ú´ þ—Up/ƒ)S¦L™2eÊÿ:S—Õ,ëVüQªà_ìÜ1ŠÃ@DQÅØ4`b.áP鯾ÿm–�emŒ]‘Ú”fþ?‹ µ˜ˆº´JYž«LÁoMAÝù<pÃÍ%à€SáæÒ×á.[yi»LÓß´™‚ïc 2p¸©€s 8ÜT=ÀÕ[yêÖößÿd >¦ sÀá¦Î%àpSõwZ—í^Ê}[ÖÓÔzlA¦àÑc :n*à\7UÇpµ´~Ò§à5R÷‰^¦à7p.‡›ªg¸ZZéSpŽÔ†ù‰)èp¸©€s 8ÜT]ÃÕü)؊ĸ3­7p.‡›ªo¸µ”5 ^#-îÃLAï€ÃMœKÀá¦nß)8GZ܇™‚Þ‡› 8—€ÃM5&Ü~Sðõ³ [LÁa7p.‡›jL¸�§àIñ§ SÐ<àpSçp¸©Æ„Û{ Αça¦ {Àá¦Î%àpûeçŽQÂŒN¦” 6),-s oà1l¼ÆMlñÞcv—Œ ‘5)2;ïÕ� æ#ÇÔ9¸ÙR0oA%øE VÃàÌmŒÁ-…Á™Û˜:7W æ-¨¿•˜‚iI·îiàNihÎO—§¡k¸¦¡�_~›4tÊ/¿‡pËo¾OCû0ºÖëÓZ7Ï7Ï×úñk­·üòU¾Öìæ�ý~Ô˵ŽªûÛ VOƒZêC]¯üPÓ}¹u½^îCµSíÔºwªœÿÛ_ŒHAŒÆ#íT;µ��*ºÍ¬!è• tÀ8`0RÐNµSËØ©Rð§uàC‰)Ì¡ê`ñ¤ @µ&¥ o ÖMHÁCìÅêãáílã.P¬]lßNÁ.z-P®>ÆîílÚ¸Õ‚…ê·±mÞOÁæã®÷í@qº~ã±™’‚M(TÛLKÁ¦k€âÚ®y™‚TJ TK TK TK TK TK TK TË_LüŸìÝ1Nó0ÇaóVBj•ÑcÆäÝ3pŒ,ßzAÒ ´ Ìߊ(¤ C×Ïsˆè§¿bû“Ëd#<<Іîá=)¦à¿ˆý�«wùðüW)8múî\¿™ÊS°‹~HTb裻š‚“„FôSa æ%P‘!"_IÁ.bw ¸s»qŽèÊR°‹} "ûè–S°‹Є1¢+JÁÙ(P—!æÅœ"žЈ爩$#œ¨JŽXLÁÞ&-£/KÁ@U–SpŠ9 ™c’‚ YNÁ�QÚ2ÆF 4d9ûpvš²‹^ 4äc ú®CÛ"¤ @C¤ š%)Ð,)HA€fIA@ 4K œ‚yeR¸M æ|8Ÿ¶«q:Ä €n“‚9Ÿ·+sÖ‚R¸E æü¶]�7-P’‚/Ç×Ç«^�/ ¨Na ®´ ¦àññ›Ž ¨Í¯¦`·í*ù_àû)xY‚ZîVa V1 š~�‚—%¨á~ýf æü´¢³Ãï�ž´ ÿÙ»Ÿ–¶á8ŽãßÃð÷]ÂP¡X�ÿ�¹ª]Ýju*Rµ`§sźÑ2a‡ACCÙaìižö {d¥Ð•R�k\ZÌÒÆ¤¦i;?¯C›”_“Òúæ÷ ªJÁß-¶à~A€&ãl zî7(RÀN šO Ëǘø î»)xnÈÀ¼’Ô(yCž4GSÐÛ¸)èE T“‚-z²’ÔQä=€¦‚¸Sn•‚%i d�‚M )p§Ü&åÒºp¦�…¥•b)à.I …$¤ RÀÕÌ'UùLKIF{ )`Od¼ŒY#øJ)ˆp/óÅå`ã’q)`ƒ'Åe¥,v™¤ Éaœ�±A±d%r:;|ä„�ޤ`]SP‮ %ª@], Ñ]÷ÌeO KÄGDÚ¾�¬ñ½‚ímÌmÓ} 1æ ×Ádþ…üÃÞ¹í´q„ø¿@úÿZÈò"!{90ƒmÆÆ€0$`¡˜ƒÉ‚ˆæ!Ånsañ•¸êTêô¢ÏR)U@Š—õ¼ ;f[ mCëï"ÙagfwþÙOsJ“&‰¹MÊ€`šòp?ª 6«½{½)Ó8í¬‚ 0éO";A§BÝð§Tp�öž\õ=VÛûYT‡V<4º=xËÔª`ûF ÷ÉYŒ?� šèAË8©`ëÐÐÐ\[!ˆû½*èPÍÓŽËõFrúqž‚vÜmªà¿¥‚:�ûU°™ ª&ˆÿþ¨à;¸£ƒµ‹ÏO�‰¼I¢Á¦ 6iò90K ¨Òöߤ‚¶³¹SS™?£‚œÞ •L°c­þó*èÜ Ç«àoÊô°4Ã_mSĿݧ‚_!âQ×IÛÎ!"f[ŸN@Ëb窠3Y4n;½¦ƒ þ½¨2ÖTÁÿ­ ‚ÃbÁ%î‚jâ_WÁ €Kqõéæ’mùàêê†Ëa-ñÍ͵œF¾ºþâæûwßß|ÔT�ßûâêJ.”¥/¿y÷Ó‡O�UÁ}À1+tŒL×�Ù­…`Dòù¡tá}ð¬?æg\KùŠ·>;à+x*gÓ>ôΔÃÞB?«+?FTÊçÛ Fà°”ýr× W×VxoÍÝTÁ&MØ¡p|T4ÀŸãöcŸïͶOòñ¦Ü€TA_!•*øD6)Vòº=w@㹜 ¹´´®\'p2SwÔ)PKŸVAH© ¡øÊ^îÅ[hÍåˆÎsI¨Ñ=ÛËM±ËÞœ,SȵJìÎ�ÓA.÷BSA÷ÔX5a b/ÍØÈ冔;BmÁphÐcUPºÞÏêüðÝ-$?ßš"ØéżkŒ‚œÌu™¦éù:Õ©ôÕX¤[4ÎÊÑ‘É*(Y¿ ‚°1ŽÑ¦ ~žügU0¸›ÔTPwAëòß_+øàêŽÜq®˜$~ œ›º1~/né*X»Ç®��õœJE�SÁÑ<Á}€Ly $;åm.¡o¶Jù÷­ &ÇŽÎäÏÏaèåür*×É_>Äp¹\޼-Ë~;�÷xçgZu”Ä0,n#çÞÒþŸ¢‚¢šÞò�øË~^éúØûÄì6k »½�7Þ£˜1Q®?ÆW¼^Új�*c¯Xc}¹ªgö8dIŽ«k"åùq˜¿Ôty —kÍëàÎýr%áÉ/i&g½RG׬§zΟ)w�d¸Ü óå*n•Ëíâé.romÐRã³{¥ýµ˜ vyN~È{ΆM¸ƒ{àõrjb—‡qÈê´Ér»uY©çõ€@‹´Þ½ÏÕx«Qzž*(O–ž hk]P^|;ˆ`ƒz’‹ë+€ëë vD ¼»¹¾¬%/…à½ûöçËo>4VÁk>xÕð¦–ïúšýù(Ü%:†;d„ë'/òâFÑÁŠt…7¸  ¼jÏMÀd�ÞÇ·«Té€^dãcD]Ðñj‡hâÛÞؤüil¦B©Uñ¼÷ëý alª`“&$¥t½§À­ã­PnÜíì¸UÁƒâDçj LÙ·�TÐ4ä7MÚ¨â‚/iES'ëò!*¸KdÀ¥úÍX’‚oÁ0‡ˆÜ¦ ÐK4ÓcFö鬱 ºL?%LsÕ¦‚f‚r'�1:ëè¢å!d3¶;\Õ`86èñ*¨oÖ7ߣ‚1¬‘!zÈ rsèHb�a£žc 9Y^¸7…žÈ=*Ø‚˽ 8Ãnè"¦öð( µ uñý™åÊÂ`ÐuˆË_½ßÈQoÑëõ¦2ø02Do¾„Þ6]%‡¸-‡Ê°4ÆpŸ¥‚¼þR= جtñ5ï±nü²/ŒËËiX³ö¾¬ã p´ÒJ ôã00âˆ8VÂT‹”œ¶qÄê™�N ê]Æ`­yì©¡3ÄD qo4ø+Í�c°Öþ=¸'Ûkf�B�÷–ÐãõÎó§¿MâÑÙ²È'ëõŒ!â ìŸ™@8œO…±Ú é=¬ž�#βǻqß<^Ñ£.+­=$8Z¤µ¶h}n‹·¥ç¨‚ST' í vpAù×gq˜ÌÅ;xwÅ'~Õµ‚W`pCüà#SAizß\4PAî”W"ÃÏþAx!\ãe• bKçR8ÜËÂÁ`Ë}*¸+Þí%ŽŸ¸`h4{䳩 ,á±TþŽ­[x< FÛ—Þ5žø!#Öø‚À‹2TZiµš ö…ƒþ9põåg…äã�0üá ûα1�ó>€–aÌ›�U07pAëhÙwq¶®L~ŒÚ&ˆ£[1 r„^ïæº ˜ f;Eÿ<~ gE=F£DûâÁ0NˆF¸ FdÊÏU°*ÏŒðÀ½F;@PìÝÞvݪ`‹¬öÙ§ÊGÆBS›4qÂC�ð†ÚÁRAW‘úA ¨ €_$œUp†æùüðA4u=LCDmQZ’bXm°mÉ÷LQÇü–C:åóÇÚ¦‚j0œôxü…/Tùõî|ñÏÖq2 ‘DÎ~Ò?¤|Ÿ°´Ûf¬9+ˆÙ>€P×ë9~\42³ˆä½�ˆ©{T°׸{íË;\ ÎpM¨è!r-hMT…c�-ÖUhß4RÁY 8uŸ vré '„,Ž¢×°©`Çëm|is ýÜ»pÉ|+Uì5´Òj ì*èö ¤ qÉé+•;dpvî¨à4º€ñ“ U0ìéÆ –Z„r¾Ä´MåÛÄE=ë8¶ ŒMò^†É "·Ð/Ÿjžmµj*¨E}ÇMyØc^‹´­-ZŸëñV£ôìTPž,-OTMÐÙ9KŸÍÓµý!~b}¤&ó‘-äð‹ 5ÙX/¸3^·¢’À‡Ç¨à0QÀ¾ów&Ñ:WÁ–ÊírœÆeyÖ£)Æ2Ṉ̃‚úâA¢yž‰h�wv70N›*ؤ‰”0ÂÂô¤×ÍÍîúîª`Ñ�¿p›!Gto²âTÐÕIˆÓUÐG4ɬlâc—(tG[þ®%¢¶¨ ‹(Î+› qžå5Ÿ¥ØÑî0T‚áР§RA}m Šƒ ºÎQ’=ï¿ý<õ Cn;™Læm}6ùLæØ3¹lÕp³;A ¿l¬‚�p8|«MN¦N2ÉðJ០r-°0…~ñ´.?³ T0f•oM.ܧ‚>ô²^ÀÔuɧª x)Ñ?[a7Ë?n×¼ð.ÓúdÇ¥¹�‚@+­¶À®‚;XÁ+Er¤7ª*h,ãœì—’§¡ Z­YcÞd=<ŠáØTpZƇ¿M‡3V¹Þ?)+*}j· ƒ…MmQç•ö‚à‡‚Ûi­-ZŸkñV¢ôìT�™ H¦hÊþ#g\ú|þ·ÎÅ€¯-TGÿ¾–3¾jRWÁß0í»‚üÒâê1*'š•>ëH™0½æ*èf‰žº ,dY-:!@i ‚Sd±ÉSfó0™&Mþ˜ÂP ìX¨‘gÀT·�€iÑQa–FV¨SW'.NUÁm¢€ Y,**8úžSÁE²¨€«RÜ€ÕbÅ¥Ýa*¨£qƒ> ×@ë׿Ny)5ˆYXL"â–ÌQàeƒˆãY'mÛF’=5#I G„ ©(óo½%üg¶Ý¤á#¡‚=R°Ú@§±à¸ƒXfÝ0nG½pÔ®‚~ñ^ÄsþÎo@ {¹ ä­ª¸ƒ‘(­‚@+­¶À®‚ÃÖZÃÕð]ÉIcNUÁnL�d[ªàPÝWp�êÄÔì´M-Á+a{ÌÞíKÏŠþ±vTûÕ×ñtÞ£‚zÔOx¥-Ò¶¶h}®Ç[�Ò3SA®}ÒÕ=Oä«?Z*(üŽc0¹»P“÷¨à%¼ûâ£×¢’O’ëǨ`š¨×ê*þë©MŠ:«`/Qa�±‰Ì±] Tp—È_ÏÄÍÓŒæâ&Mœ£˜§.UBýÑe¢}óV꿯sÎ*¸Có0´Y!NVÁ7|Mð2M�HÌ[œ¡Í³ãÁ¾ØÃTÐM4"‘[eNa‡’ Ýa*¨áAO:A¬« >A¬ctFÇÂȉ˯Óp˜$¶±']…ñ½ **¸Œ¼PA�¬SêŽô/{Ê¥b$Ѻ >×@´€Bƒ pá^ŒŠòÎ*˜Æ<Ó|))ã‚]Í` ¸„Dx¥ãõ¬ˆ­|aÜÊ ßknÉ h¥•h*XÆn�lÕ%'”~13MÜUÁ�Û· c¤‘ VAÒÆí¬OtÕ!¶ØTÐÒ²= ±z­¦,¢Wl±6Âlƒ…±€86Ýj ‚ZÔe¥-Ò¶¶h}®Ç[�ÒóRA}N8 MðYMºáó½r‹‡²Vð�P>9x·ÉËÆ*È5ð¾Vh<ÍÓYªô€ EG³½d}þçÔIyj,¬‚ÐáRTp‘Ôaˆ4«”1ÝTÁ&MyA®ƒÍVE%�"�*k瀱HApVÁP¥âzA?@ ÀƒU°·Â„äèeƒ#¦=çɦ‚iÞ±A ‚¤ (tÓkø’Ò Ýa*¨áAO½mDWA5ÜÇj Élp¥¾?8³bªx(‡[JgLÖX‹Ç:@’D©­Òë&V­ .TÐ\;ÂÙå?¥‚¢¼³ î`Ž“Âk» B’½¾á}â•*¤ïªà6÷˜(ž€D+­´@SÁš¶ó2‡Y¬Ä»*G…cÐP^ÉÅcT�B“XÖÏTU0Ží aPSA…�×aÄÒZZSA-ê²R‰i[[´>×âÍ¢ôÙœ+¸6Ú€5¢QG±idjjœê?zNÛF>Y3¿WÖñG‘|÷ÑJ3üö‚'ïÝAÌ'‡¯àæÎôòååõ£Tp˜(åª;9_pLb o�¨çTð+ª®ò¯P<îb+-â^¸–"šà^X”EFâ;«òi­¥¦ 6iâˆY<¥2(*8ÙéÆ9 (*(¬a�f«`•â HÒÈ e@'VÁ·%âÇÊÍÐ!0\#¯nUÐÒ�Dm,µi²Ôˆª‚Êê*x(O¶r�¤�‘(¶—´;LÕ`85èé“‘*è|˜ŒÎó˜�ø>%ë�èc‹IË—íKëQA­Ñ}Ìq�‡¿É\ ÜãXöÇ&M€ðŸQÁ5Œÿ± ˜€ô öZLj*؇?¤1*Än©×bõ® šÁ1¶8Î *jiµš ~…>�ä¹ä¤ß‡×">wÈ>AìÇÙ^‹ÖF*h F�¸`‚Õ…£Î*èÇyeÚ\WA•¹È‚ñ;Mµ¨�ª›�µHÛÚ¢õ¹o-JÿSt/SÐõü{Îgu˜Ìïì�ÝNG€Ïê™Z„<‘,³ø—líÈ©kRÛþÖF&NŒ `Bª’(AŠRóÃEä×@ÊUß Ћ>K¤D ´"ªzÙ�ݱ™xÖk’`šùnð¬wÏÙ>Îì™ù þ:b[†ð¼ß_æ×#fsž™{ÿË×›€?ß[O>sZW�kåÓ.ŠÏÀ÷Þ|Ç<ý|*+2] Ô¿MÈz† Y›¤;W y î*ÈNÝ \O�2˜_Éø$í»ÉïÒ:Á¥µj…ûÀ3AÈ][0—'=Ñ¢TP¡pg–óÓîmh凉‰ î¥}¼ä"Žð’DÃAD,Ç t.¤«i ×pÈNØ%�Sµ´àgÜn¨ßYTð*ÎwTÁ\ §bˆqh"© ]}NÍCAÛO¯H)8Á+ý°$<Ö(õF ©`’}O Ÿn ‹{\&?TÁŽ€ALÄ>,ö 3É{¨kî*Á p~IJ« rËc±Ë¡·9×^’£EÑŒÅHËc‘ï¹o1J—I#âáˆÝùF8—i‰é÷Öº‚¬ÀÃÞ-„²—¶ÂpõcÄÀxz䨂\+á%/J~ @Ÿ‚Ùë|Äîg{¬³ý@ |^Š� íX'„ß ! ³«;Žçì?ÖM†¬s Ñ ±~ÚÅ*Ä" TP¡pg‰ðe¡›^7MG’³ä±ld…Ôª:!WÁY'Ì«”5¾> ùù¼*¸Žˆl+Œ‚EaƒlL—�aA„le+‹³ 2`˜<Ÿ-¯çÅgç BÆ'Dä?BôêÈ:á+sŒË¥w˜ ŠÁpá3o<'« ûÆsÉÓà0"êü“�eš·+ˆ b€µÛ«`ìzÎM¹tDÁ륶À”ÁÆW´´à¹_œI£§š�´QÁxùú¨ñÄàñ3–)l¯‚¯ù+~U+‘xN„Þí «2o66ƒÓæo2Uîl±ÊàÌ(ÿ·ÆZF&ŒÜÊBvÀ“d×ÇGsÀØÙ4ûê‚X¡è5˜ ‰*Hoêìo¶ UÐ3¶NÈÆ!8ª /´íåëÓ,ÆÏ«‚ŒÅZù¾œÝYÃ<²Ò‚ ÂmÝ<–Œé– B`ËleD„ÝñEiã9þ³çÉÕ°yhÍ7Hï0‚ñ¥Uðw=Y›¦ø®� £I&LAÜBÄ•† ê CI´ Hö˜j“ýmU°°�Æ`' cr’ÿÆ£i¼chiA¾aîgŒ!î*è[Å@ã±³¬£ ú® >eŸP��ÅýlTVÁ0ÎD¹yŠ�J�¾|²Uéêx¬&¨‹Ô[�¤‚~ÔSö·¨[’C‹‰9`,¬Ù*iTÛf™2:“ísTÁ²=¿Ž).P¿LàPÓë’Ž*ỳЯ� &—ý�A°œú&¿0-cÉ!ê+˜¥¶ &Ò±–HKc‘î¹o!J®‚®e#² ‚ ®&(6º@MŽßÿs$¶›�cþŠ�±ö™9fgŸG9ÚîàÞÐ�8œ Ú3¢bKüÿµ°ž°xX+ì€B¡ø$â) ZñùýpAã]n’eø„§(´²3Z}¼%Bsd|…>�Þ‘ƒñeU�»Ÿ˜Â%%:ãÅúW7. š¬‚w—�Ä0(>7…Ÿ(¸®J-®,­TP© B¡P|eäsÄŒ·'ï^™øîä­Ý~ó]w¨à4zpY¹…Åù‹†  °š�@ãF]ÛX<œ.VÁãï»’c¥‚ …BqnäÓÁ"ò”1\q ./s½Ð�äÔäðÿ�ÿØ·cÜa £ž,…ÙCàÃ0p:Ž”ƒ0F�ÊBæ‰)‰Ô†X­Iß;„õé·]8§C•&)ð\ ®NïW!xб–þ:S3ª44I lIÁ9^Yï…×›âxeÀ®NÁ\å,8e)°-ÇxÇùôåï°+eS°mòåP�KnZ)°)�ñ!ÇìJ¹\gÁ®º]pꌂ�¥àí,xË(¯ p ¶M¢ÄÓж§`• ¼°’)¸¶`îúþ­}ße%ðL †Q Âë*™‚k 6yÑU /%ðT †ã8ÇoÍ£w‚°C…S0¤%«Ò&%ðóþ•Ò)Ò¢­FJJ@ ¿�‚«T™€J¤ #`ߤ ŸìÙA „0ÿ®gbŸ ­ @ dIA@ dIA@ dIA@ dIA@ dIA@ dIA@ dIA@ dIA@ dIA@ dIAà/˜#)�%ƒ J R K R K R K R K R K R K R K R K R K R K RàØ;£žFª(ŽŸš&RCìþƒ-”–Û’€°m± @*²VKHÔ'ãCí áÑ0}ÙL:_b‡ÄÔß–õÍ�‰ñE?‚ñì—°÷^.…™é–.»]¡ç÷À̽{î¹çξürï ,¬‚ ð 2 à ,¬‚ ð 2 à ,¬‚ ð 2 à ,¬‚ ð 2} PŠ_l¦JYêF|f˜®ËDc™ºQ*Ô…?X/ÈÇJñˆ®…ÎÐyN†ad†U�yNŠÖ®¾Ý¶öèJÄ`^l.£J]ât]L4¨¶¨+/~°.0F>Nàäè:è �çd˜kª ñàÑqˆé'Ç�Ä0A° 2ý¦'EŠ ê/\5'�dëgŶ+ôÜ¤Í D%îƒ Ši®ª‚ ¶z*)ó:¬3° 2/O�G!æUðˆe� ‚U�é75 –{Ù*¨ÙB¯¦ÖCâ>¨ ˜æª*8 “^¬‚ÌËSÁb�êøßÐ `èöðí7bö1ŒVA¦ÏÔœ° ² 2·‚ÞTP›àÍðÀÛ¥‚Â�Ù™@X™>Sì‹ÉK*h”ãŃL’4¾N­‚ÆÔ´¹±*¨šf)�'ÁN)’Œ7¤™/È(Õ�z)î��*-lÍMßÙoYå’YŸ�’ —)™ó#Ôf¢4©¢�ÙºYŸ M;±´¹áùÓêQ�Ã'ÅâQLeÔLì5ª›©€­‚ õõ�ŒÎ`¤ÌéùQPý:É^£±W¸¨e+¥X¥RZÜeÅ#+e(]ZO´²&�é£q’ä�ªë÷&stÎxIyùnI¦J•22ƒwÝþ9#S¥Æ½å­àÌÀГ j¼9¯ Ý2± 2A° 2}¦†Ñ ìñ *hÌ@2GO§VÁèÅ ¥‚c*ÄVi'-àΥͫ $¦7vsÓhÑÜÚƒ !ÄlßlÀZ s6±«¢àX$Í…ÄRÀVR稌Ô&WlNÖ Up’´Zx’,u¬ŸR.Z8ËTp’q'žN»rD*íÈ$ò‰¯Ú*c…α³º�>GVfð¬Û?ç¤ZG3˜‚zVAã&™à­SAá‚ü¾ ã…U�é#Z£U,µU0Z‡¹¼™u‘&…·S«à¬í‘|Ú¶• &ÐXÈ%ï)©Áª.G"—Ï1+«Àj%ç�]„5³bÄš¨9SããH¹Ù@b‹òqØQŸ ZfÙÏŠ0M;±k³žAMô']d ãËöEšÃú>å<ZÓ°&ò‘YÇ /Á<Ü*̹˜êXÿˆ�ú¨K¸V»¤±ÊÌJÅh« e/…i4Ý�ˆ±`É¥TL$RÆhíE.Ê'\š¢UÄŠÌàY·oΔ‹ù¤QÞÀz%(30ô¬‚�n’ Þ>:="†ñÀ*Èô­‚´j!}®‚‡°Vå1*ƒ$žN­‚¨ƒå˜#UeRy%°'ÓVÇ<¯´éwí|±‹hV”»l‹Î%dˆ*ŽŠœ‹G|*h˱uÄßLˆKÞŸœ5sf„#¤)ªª㣾9gÞq¥Ð¥¥M.ÃÚ­m˜ëOàŽXktAï jD²uÉ9¨+ë>� :ˆ*#œh?i¹ë·ƒ¡ª†cGeϺ}sšPÇÖ&æƒR0C¯*h„B7å=ÁÛ©‚ßò¶ ã‡U�é#ZinD«àvI²®ÅÆÛ©T°ýµH]ÞÄÏN”W`Ê´iê ‚¾ØEì©c^%l»¢9æb’>¬ËÖ,–UpAÕ)®9¸Jƒ.$«b‡Þ¥‚ ˜&‰%Z;8’�h,6Ö©~}.\x¦ ÖÔsPÏ%&› ¤H‰áf{%NM„™eÌ ;N¨ žu{笨u¨P fpèUܨMÁ[¨‚CÇü¶ ã…U�é+Z©„bôLg´6%�!‰§S«à¼˜,ªR±iÁ`ˆ´+�Tл¨&2€¨£Ei>ÎÁT!P³ú»å@ÌËë&D�HKš˜'MhÌ¥ÄLÞ¥‚»hª>ˆ'sÚ–ÈNõb˜ ê>Kd«�²rÈZKw�)™&�S:§ˆZE|ÌÝ�xBeð¬Û;ç(L’D`¤`‡n*x³Ï‡o£ ~Ã'ÄŒVA¦¯hܲ‘=SA mx‹$ñtj\Â6i9‘!ç$»¨ '6P£qTËæü*˜y¦ nµU0ÍÅÄt €µ!o€¼„s2zášÀú“°õ"{SÁ$αèœÝVåS¥%× äUϺ½sfP"m†«þÌàЫ ߨóáÛ¨‚߆މa.Ã*Èô­‚4 gEª`Ûg6õVš§S«à ŽH²�ª ™[P”+]TР‚²=7�bîùUð®žæR5©l° Þ5øº/"*-“¦Cýy8c$±{SÁ< ³”/‡=ª[c4…²á6(P½s.cFµÆá¾ÌÑ« †nC·�Pˆæ2¬‚LÑ*H;0³R˜%IUŸ�z:µ NÉpé„U’&MôĨ ¦ìâðùU0‚&u `âÄ §‘ðÕ¦ ®ßư¼æÑ› RòµÌ¨U'ZÅN ó�*è›3¢·chøS0«à�ƒU�ñÂ*Èô­‚† H·›Å©4²}W-z:µ ¦`�È�([ÊIæìv¬\`Ÿ<±Á*8+� „lwT‰ý*HÖY……}™‹¥Î¶2§½jpM•"¶0.†h ›§ÑNõo .[s´»©àÒÙRò )jSÂ$¦äw»ˆª N å3+ßó¤à?F2X\[ýê§P/XÿêCW!þîÉÐÿ�õ�Y™W« Óƒ RÒQ*8bc'Ú”JøÐzû�'É®œÆ¯æ÷ï=™ÎÙ‰pÓim!6œeäoo<ý¸©7û~i~rßT Íឆÿ�·‡¿—×?ìOîZ¿©“i§zŒOž´¾@ùÒýâ�‡º 'ÎS÷·@ÜXKËkv-Ñú¹¸–ý¦þáÛn^TÁØgkÛ—þI’ÚùôîÚ^Yܾµ6*.ñµEqI®½34´½¶4´óÎÛ¿O†˜]ÿø“wv·ŸÞ¿:»/s¶†î¾óEih]T%(Š©ï¬-«ß½{ÿ-=,vúþÛµ£$« ÓVA†ù��ûÙi"Šâ8¾8¹ù-Ó@ÒÅògLÌ ÒZQ«vQ‚&Z�mã¢iZ«c\¸h…)¯à¢˜š†¥v1!Ýà#ð} sÎt¦@mÐU7ç³°�¹s§,¿¹×¥Ô@R°á`ÛœqÚl Ørwxw¢ŽM[n."Þ0f †Í6˜Us»N¦Y¹³·¶qzˆeÃv±Ïgv!†ÜŽíóA°QÛw[± Ør…�<Œ{€7DtŸR`w»)~…=C4s¦ˆhoùT¯øã DÏ�ú–)Q�I Ÿeè† Æ¿NW�ÿ`ˆæñœXN„(†)>‚X”ü[ˆƒe®k ª¾4•RJ fƒ¸ì´º%˜G(kêI$:cÉŸ§{ ³�u¼‰ÜB™³n+ÇÍì¶»ª˜Aâ¸ÑÚ‡uj|9”M#YALðDs„`®Ñª9r°Ž@a¯ùÛBÔ9jÕ‡�¦´&ÖO¹4*ÿ�‚�ÌD)2 L¸)(%8I=C‘'JãÓ(~æîã¹×`AŠíŸ*ŸFJ#eܤ‹Æ¸E«cið:äÕ<&G##iLJ Âz~k!LŸ±$Ë„±H^ ^ƒõp!|'�9þ± æÆJIüZÕTýh *¥”ÐÄÀÙ96®]ìÊÉ% ¼6BFbÇ]%\‘\KJ&†dåî#*<ÐnòA¿�ïIþg˜ïpnVÝíäŠüHI÷±ÅW880¦‘†,2î!ð/)æ£EÌwR0’Á¢ž¡çØ\sÏn…$¢/HIÜmBêPŠ‘>`….´á<_Ã'â"´pERð>‰¨;=‰Û^ †�¹ÒqÂDÓH­ºEøTSPõ£)¨”Rj)(rA휛`N˰Ôd‡7kDQ DYâ“%ºwe+Wï>rRãðó £jL³È»ÉLj›®#IÁ2ä'#hXÇ<Ò6‚SôÒœ%ößÜŒd$ïz†¢˜"öÖ*]!z�g‘¨ä¤‰Sp‰Øg”風,QÇužÏR¸-)¸@âÞËþp`ÍKÁ/X&qu*B´‚±ÎŸ=­)¨úÑTJ)5�¹]Ng·*¢Ø6&Ç•&š(Ê–nÅ]<àï;ÆÃY»hߎyß©ÚIÄföð¨ºßÆ‘1§(ÆaÉ,´xUq¹*¸-/MÁIb#(H ~‹á± C÷<&‘ÆU¢!<# ®P¡¸J¸+)X �C}Î#=ë:±)à»ØÀNÁ<¹"6ï_Ã4y)øƒ¿{Ö€k2í –5U?š‚J)¥”‚â4ƒb“·n}ë†Ó±„Ó²ò²˜G“£­j|[ð­Ï ÐäË:é\ÝÚvàÊòœ¤aQHMʺa¾Üå)øà\ ˆ•ˆ�ºŠ%þ3º»4Š›ôSô#’‚©¾)Hc›œÙ—²úçû楠Ha‚(‰q?e÷Ùs¾²¦ êGSP)¥Ô RPäÀIöGõŽ&ïðÖŒà�œ©àˆ¿Ö±!·e|ëØõ¦µŒçAö±n–¸ìllì�Öá4ä´·ØÝZv�­w4þ;ß1ד‚Rxk$bœlkù=Ä�bˆ–íÇýSÐ3úpÑ‚=BôÖ ×­ñs)8‚÷F†üœÆ}ò…oÚ„¦ êGSP)¥ÔRð$jW‡ÞZŸ'�=ÓQA­n�7̹òü"=¼-äSë@“'Få?;¿ÈÜÎ,#kz�çÞ›ÿk .Òg‹Oõ mà3±U¼Óû áT€ˆÑ{Ö&]š‚22‡WD3H“ç\ ®ât Ÿü”;v¥1£¯˜V—ÑTJ)5ˆUÁ(ŽŒ¨Ynº‚ÿ,ˆ9�u&öÖC8ð¢MN,¶µ[ãž+ÖÌe�/éÝzQ´eâºa+Ø–÷žœ}Ф�œ¦;§žký%ç1Dìã_Spš¿Ú½)¸Ø™ö þ¸†g¯¾Ç^\–‚c/¹iTž `œØ££gRPn5•D¸›‚��åƒR!óˆÛÓýkÂ7Æ5U?š‚J)¥‘‚58¿eé.†Œ¡´Ø^5Þá]1žcÄ‘4¢ {å±- W–wB7£Ø5žî ߀ ×£¼ŸºQyþ†a»nü5a7ä’<ßîvý/)ø�"ú„~)HCÌô M8²±=›‚¥ØË¿,”_ò¹·@z6i!YÒTýh *¥”Ìc#µ8”+ #36¬¹;¼?�϶9d:£6œö�ÙM XÚoßbÝ%Eìñg½ 8•–�ïY 4UTŒØßœhΜA¾pÁú¦ E‚˜;?Ä^§Š°’ŸÈ5��ÄÞaöҤѤäÍ[{±é¯žÒÅœD¾t6)2çù ‰g©<˜,éÿT}i ª?ìÛ1jã@€áa�®R-Y2»lãr»iÐ {�ìT¤òYLH'’ä!wIP+6qf$Û<ñµ$Tþ3oÎuƒøéþáYß=nîô Ý'ï6� o|âi£C²¥þÿ]rÔוdª¯þÈ»ð#È—T×WÃÿæÚ>C ã]¬Ê|¦ËÕ…lJNA[ä„~ýÝöO& bD #­?Z³r€E©)Øê‹"'ôûÛ¶[9’F[ �‚À(—•÷þ¦Šõ"S«›·OT—°'5;mÕ9¡æç¶ GRiç€R¡ˆÞû¸­ÿLákRSpM žY«k �‚@¾å GÇàÒƤ¦`¡¦&Ä2;�*‹N|@ ÙJïÃb2ÁûÒ¶LAÛb™�–ù0v�‚@.l N²1(0%9 µÔ‚27›‚ØE ™Ê¾§Ù„5É)èÖ–ZPf¦SN b)äYö%8­ÈyA“ž‚} Z9/(³Ò´” ö!�,EB &µ ÓX’ž‚} jk£e>šªUJ{‘‚@–èÃâ‚�°#']Ñ)Ρc¥‰}HÁWöî¦'� Žã8™…�ôð7¦ú?`aј˜B¡Ol­Ð´†Z5 écšzh„LÃÑ@÷fŒ¼ L_};}/eh–Uˆ<ÙLù}îÎFEšofØY€qÜ‚fBì5 =•['-}Þ0ø¨µN‚p5¤ À8ŠÂ¦™°EÑ  o âÿ:À|C ¼x#Ĩ‰w´E×"žG ú@ RæQ¥oRpÛq)Е,n\wZ°âÐR�‚0‡–„ —£F37¤µ S�„Xòh)HA˜CoD–¼LvH™4³X!} )sè¹(Î.‹xäè)HA˜C¶°‡¥ ¹²y¶.SGl·¾¼oõRÐz·[Ïïåägm�“’ÚzH.6¶} )sÈå!)xÎJž”*KŽÙIÁð)KÍ0‘ÕàI9B.eaù4�¤ Ì!!hp VÙÙYñ ÞVí×àý”uç´“‚§¼�*gJÜlŸïr’:×LrÃßè[Lƒ6°Ëö HA€é¦`”9&�¹&‡Uç©Õßl'CWäÈvdý­òNç  )šÂƒç@+xöÞU�‚ÓMÁU~BÊC~çº[äƒ:é9â�öG‡Cj}x)º'OäMíwàUŠr*úÄ^HA€é¦à?$%ÁëDa®“’饠�)$’ÌÕöi„“jÞ0Š]�œ‚ªu Rf«RC ^)0ÝÛFÖy£DI>êÛL&µÓ`¥*r…Ø”³ˆ¸m45r ª €„Yk¡/C Lw3™ï‘Rà3¢8/“’S)˜ir}¯6ÏT Ò!‡è#¯a3ÐÔÈ)xkX "aÆT âý‚HA€én1½Æ»¤¼“+Å‹òªW)¸Ý�$ÌwRp…“tÑ´±Å4hkäl +A¤ Ì^-ÐòA¤ Àt<—c'*�v�ãíC“c$åU Ö;S€åf'£�“Kxðèk´T“‚¿!aö*˜ôB ŒnIˆ�)H¿øÌOT.ñ…¥ö›vÕÍ$*#rјü›ÌU’6¹Îaê'Ä’@£¦àÉÐIA¤ Ü€Þ-è�CEØSÐ_çÆr¾ÉN¨[{\_wxC¥ Ù¾|´éæ»)g>¥~¶¨øt1j ¶�‚ð¯±Bì�Ã!¦ e#‡Ì§¥)ÖV£=Šwï 6ë̼-uSÐnò9õX�Œš‚µ¡ëÃHA¸•@ÍnHA€q…MCdC®�?íù鯲Ã9ï¤`Ñ �QS00RnB à7¤ À8îAS�ä<õâŽ@HAÐRÐ)0[X4!ì¼É&õ±°© håOÁ•ô¹1‰Å¨{-ÄCî±Ïã)›‰ï£Ÿ•~!/ÒE×ÅLzÙðŠæŒë+šåa?E¦\4¼vÒfïe×}ã᯳˜û,lHC‘â÷Ä¢{K¤Œ»ôâ`)8R`,·„°i2)æF»<,°Ëèd¢<8vùÓÏãOòÐ8n{tßù:8ׂÁà�¡¨Ó'OŒË ‘öÇ—·åùfðžqIdaá©q…å…®†ûò*ü‘ÎõÂåñÝök¦{¹J?j_7<½Œõ`Aþ`JõiûKí{Â(xW‚Aw_ƃ<Ÿõþv0¸ðmÕué{g°›ÆÆñ¨#ô—zYYÔ• ƒÁ‹Š°±Á€[ÀÞ‚ì#ìÊ6ÄPå!0aY>ø`µNz©¢ôrh+U±ªÞšäÖ(R•KûQŸ /QæÛ˜€©Û8Mi~‡,ßš�Ù™\~ú¾™ÁS0 [éV ‰Ývça<³�aRN0+>nM ²Áæèz°àì�1µá½ Æd‘LÐ Ôç1~ Ë[M…O™àS–Ä_»73¬UpZ5š—ãÃ+» ïÆŒÄ?¼¦Ñ¼E\E41ÀúÑñ’üŽ¿°, =¾£‚Á"l‚A0*ƒc›1fܧ‚‹&pÊ. …ˆÍ™­F&Œ“b†íB¾š©œ�´ŸÂ‰4¬bÊ€%„îÒnöJÉ"…ÿV�ÎP/ž$`^g’n€‡q²�CX¢‹ˆÄï§�J‹�rÄs�:Ò$l�(àÜ�YˆM\¤‚“°î$KÀ¾­œ XñÝ4½(Ìôß‚гˆ˜`ì@º»ˆ¬VÚÀnWÎÖÓäÌÛîaÞèêñX´ j4/É'ä‚WG5AýC#š·Œ«ˆcøÖq%¾ÃƒÞ¿Ï�ÇdzGw#ª ²¡G±GPÄüó….˜Š´[Dtœ ®bÿb,Â¥D. Ìë”9$(Ž"1Á˜¿†©‹1î„[¨‹‡.é&ˆê®p?—I-{�£­‚q[ë&a.3ÁvðˆN6™Â>ÒÓü®/!p ›h£ÂC7êǽËZ© T°ŒÓÿRóö\ĸ?.˜Ø¾ £ÌÖñ1ŒHÂL{”6%ãïTPíÚr¹«× þ Z5š—…‘ ¾Rd×4š·Š+«à�ÎW"�G½!m‡_.RAEú†18t/]#w¹>F—О¾XÓ‘¿w‡®3äo¶¤ÌYR´‚Ÿq’¾.馕F('T0' N©«‚G8cD²äšµš®ªPÁ2ÂL¡*ææ'lR@Ê^F¸ÇåÄôzP`EÈdy>%L‹pr4d›ôHŸ;¸Ácâ¯cOŒ€Šê1Tݶû�D^«àß UP£¹J^Ð÷êLЧs‚š·�+«àç¨;ˆŸ¾yt~7ö'÷Âo¿«µïÊ5�ï­þ9uï±ÇooǧžüæPx <ë]ô“�÷Pï›ç2Aå~Q ;˜ „7®Û*Z�ú™ÀÕ´²GkyŸÆs{.F4La_Zdƒtd;fÈ1+2¹i‘µl­ÇwÃÙán$“¨0©‚q”EÙÓ +½á¤ ‚þÉb|}¾¯‚Ùd©”ÌÚáä‚Ì9.õ•n�I<€WuKÀ':JˆŽRñ§vKÓCéÌì–;–ðº#êU¨`ñ̾™¡Ùž˜üX&$s£!»O-ò9«¹œK�ìá��83…Xk¢ÅuƼ¹vr¹ VÁqhÔh®´^ð�åW•Ôë5o!WVÁ'hË:ï—§´dðY Ä={SH�‚í*yþ'œÜý$¿Âà—~§�JÅ¿Ž¨`P˜à(E ¨&›œ¤‚Qû³tÁ¶XßѺEpêT¨]FŒßb‚=ÄÝ®#À·1`Ÿ³ôA{™ÏÎà4ƒCÝŽ"†¿¯‚&üLýpŽ�*0À9*èŽðÈša ݺÔ-/¬¯‚“¸A#œáX¼òSñgb�ž£{­þ—+ˆ mlÒ½ ="nRAż+LáÞ Â6Zƒ·p‚Ȫ“=:�>åsÉ3Ø‘jüÕˆŒVÁqhÔh®À»Ë¯F©½wXóöqU¤•~„¸ûëó^Rp «çŽóv²ïY·?üS .yuL}î8_EZià¦øÅÄòÎé`õ¡¢ BøÜå>n!‰ª ºÊåò½?åòWÁ*f³>w�ã„Pë­‚RÈçÙG•§ªÖ°;½^�´'mIiƒo®uQ±¿zȈ2"ËGÌ�ûVç IOw®‚úP7‚6®3©‚k0eEÛ|Lz| ¥ªTÁj{Áç™D$HÍ7ÍÊ\+¸Ž„’Äóíb_fÍé� VȤ‘È]g„Û2øŠ»ïÍfÀ–[cõ–±¬ UqóÝÙ4ÌÆ¡-mÓ‰H¦÷i¦Y¢vX¶ærfSUÁ–e6` %ß¡³é˰³¿M¯êkÃíóuÔÉÈŽýÉŒ”Ýü÷x*†«ÃZ¾<¢>_W«à8´ j4WâƒVÏâVZË�—µÀÎrk¥×DKŸ,­y¹² :ñHÖyŸØ< jpš Ýã?q�nžâ+®�ßQPP—NÑ7Îa:$mº3¢‚¢j;@ØPd*ëÖ2/æ)³üºxŠ r™3n_ÒÑàtÙ•dŒpÇ@:T×§shbç FYÈ\Y&ªª´d0á§p“Òw‹ùÙo¾‰™¡n/NX_ç±ÓÏ¢-Qî.oË—PA!}Q8mÓ~Ê*øëhÖ"@˜Ù6šqë.êÀ²¶m#LÓƒÞ"¬x¸ßíöBCîö­ ÍowN ª`t0×ùÊÍ‚™ô_š‰6iÀš—k‡&{t ÌP�[Õš'û 0M,굂—¢UP£¹"Ÿuß¹2]ý»Ãš·“+ª ­ôuÞÓ*Sø…—�Óvt~ë¹ãXöw¿Q7¨ü-bCvI0Iq¼ —ŽÏx™wn¡‚ &>ìKÇ8Zž{I`ÜÞµZñ÷þ؆s…Ôéa=ª>U¥­Ê�Å\Œu?‚…I& ÁêF¤î*¸„Õ~Qö!c~X]Š2R½v-øI³"ûYë÷¬/u(˜G­«¨` ‰cÆ|^YM ­‚“"½»!7�4Ñ_´X'TŽyT¡BtÉýÂq‚YU½hf™Rømo­\ú€öc®M˜3R‡'{x jÍùó‚ì8‡-ù¿‰ VÁKÑ*¨Ñ\™÷>ûdÙ÷²è[þä³÷®i4o'WUÁ_Q�uÞÛòÞ³[ßÞûòA“§þJªô=�óÃ]‡äÀ“ˆ·Û†ŒàùèZÁñâ!ô#Ié«5ŠÂRÜ(Òn[cEq´UT¾çx�eÆâ┼4y¤ë í¥ÀvƉ;˽°·Ì &Hd΀øª‰Ü¦¨·¶ÝÞC 3Ü ™Í,¨`HJ{Ê­o^ªÑ¶TÁ¹‘#ÈUДãŠ,ÛŠ˜Ín{kv-v™JÌJV0žÎF]š¼‘u'�cFÅòï šËuà@T¸#>~±�+gçÃ&YW+Ûò:æ@�#Ö@ §³�òS$<£áD¼Ñ^¼/Upx²‡bQdn“6î÷³‚ÓZ/E« F£ÑhÞ� ÒJ?b _9ˆ ¨âÛ„ò#$·ÑçK‡äœüò'=N|NOŽª`‘ ¡¬"”ø2™]Ä2™ �É쩇ÉdqJ:²ÇG;E0I� Õ%k#ÿâZÁUº.&�@â S¤6=m Df´›9¤»Š .¢Îlv¸f uña2ë8P“1Ôwì¶%qª0©‚*-Ê(nËšË0]|c¯„7œï÷ãDˆ1Ÿ!‰G77 êa2ÄœI6¬’G|lH’+Upx²‡R1Abº‡ÝÁZA­‚—¡UP£Ñh4oLr]_A¤òÎëˆ}yëüù/(õ|T>–´ñä\ðXÜ¢Cd†2�«x_QAIqìa2êý î� ¦Ø ¾Bs‰ó)L¯w‘«ØaÈfÞÇ, M6••î—‡‰Cl2ÁšŸ–¹Û6Q »ƒ�"2£Ý”P¡¸�”×ýâbo¾(lUª`VÙMç gŠÈ§ä2GÆü&f©åS„½ÛL!Žy.Pë}ç¼ÎW5Þ”£]¤®ûEíY®mÒý6‘$ë •*¨c‰ ±¬�}À²TÁ¿™l'YrZÄls‰­‰N±£Ï¼­‚�F£yc*hàWQçm:ˆoD¥÷.]OqkhƒÈ0%Úmr §ƒ’³9ÐGEòÆ1­„¡�‰ãPè¥PÈC*¸Ãˆä[‚B™ ÈàžõHÙK’˜µá¡Ì”1Šè…šäO)Šn"3ÚMU w(Ñv¬<: C(§TÁ2#N1ÍUP ‡v«,m­Énë½G‡VNúg3Œè41ÁÓŠ“L¾s˜¿V…©jÑøÄëd¸9”õLàH¤å„ Nó´¡`~Kf 댄�ÙcùŽi%+¨Nöð@ØCÙ½Xáÿš. ?Æ®VÁKÑ*¨Ñh4š7¥‚´Ò�ó«Âi»áã:íýXö÷åw·øZÁ†XK¨l 6©„ü„?NüÔÄ“¿ÿá9!„Á1?<—(Ñ&Ya#a±ò®ÓæõÝ@Øff8|Ä­g—qºóó´mc� l� -0b n™–­hÛý›q§Ã8%lÒ¿þoÄ/G?KË'm-*8q¦pHjñ ŒÎH˜E¡+&.©¨ :ÙÃaÓ–5a+¢ÝV�›-•­´ ^ŠVA�F£Ñ¼!¤•~ĹüoŠ—wé˜ég¤xÖ-n‚8íã9Èò~œÈïY|ãñûöã�oݾã7à @"¨–‚‹B‡D�g�ËHB„a$ãˆÝo"2Ç.p4OÍÝ›ÓBúbûI'êöÙÈ÷�têþí2Û†Ñ|‰5»#;ÉhL”sgL©§Í�›—« ÉvÃ)à!E� ¾~ ¯TA/N×ãÀÓ©`< gª Ì2N&‚ôz¥òÄô·Ñ¼Ÿo˜Huè›h®VÚ&ªQVq= ëXìkŽ´ó'&Ú>ew`Å* æãÌÕ”›ö¶‘Ð,Øøù[P8I¶M4VØh(à¬Â§æ€ žìÑ�øk0oæKÀ¾œ+3ù°ˆHˆi¼­‚�F£y#*¨þ\œ‰ßd¢0œÞû SB�@½(*¿Ô"€ó[¥�Ût®Ìo°q~óä¹C…ýkòi×Úí«`Ô•ã-»)q´í\°’Œ¦DJ3Ìæ0ÌÒuNì¢Çê´=5îÜ`D àþDîR$– ÍC­ä"@µ<ØA\®‘œmYˆwÃ&ДI¹¹;&`•6ذ ­Š  íˆ7ØåUs~1‚}þÎ 9¾¥:€Óœ�¾¤“‡ �œº&`†»¶ ž¡�‹ZºÏNó4ßáZ1ÂC/STpx²‡ÒŠ¢Ç™f7jp†˜VÁËÑ*¨Ñh4š7 ‚ãyþ¢Î=SÃÇç?:þì•Ðò¬±ñL/v�ëø…í­Ë�£ŽúUwùˆ©_.öy|ìã›Û®(¡Gø‘dí…Æ:Ùé®–ÙX:�ò´OÌùÕЕUžíz®{˜ÂÊÜ¢u§³6ŒÚðÊøÐt».›ìá�øæÊkꛆ6f”Qk�VA�F£Ñü¯TðÂ4­‚—¡UP£Ñh4¯M¿püá�VAÍk ëøâšFA« F£Ñh^› þìøÂ1­‚š×@Ëñó5�‚VA�F£Ñ¼6üZ« æMó…ãëk­‚�F£ym*ø®ãï*ÄZ5ÿ=]‡ãÝk­‚�F£y-*xy…X« æ¿ç ]B« F£Ñüžã( CQmâ†.¥ëÔ.hYÑ4x‘è"Äv¼žÙËH)Bb<±AsÎ*®¾Þ§] “”‚ì®8 nIAÚ¤àjyÒ‚R�½•`)¸õV)À§y5×üIAöuž•à– i ®-æ‡5(ÙÑùkJðΛ¥àÀGy5W‡ ‹b'¸%hš‚«ÃRæMÍe‚÷¤ ˜‚Þá“‚ÐΔ¯±Æ5OT‘‚€„Nr¬—¨!)}Üb<¥ãø{ÇtŠñ6@)HAè"ÇKk¥‹» U¤ ¡‡)Æ4ÖK1Ú RA RzÈñ‡½{Ùi" 8¾ðS¾¸!MƒÉ̤�éåHbl;Õ‚±7L›R[#d*¥Õ„´Äš8iXHb0ì ÑW`#ÖÆé†wpïœÓÊ83ÔZZÏo#rÚñ\¢ýgÀ’ö]„4¿-È�ƒ§ Çq<9î*ì 1ßEˆ ûÀq�§ Çq<9î*BÒw’‚÷×ø[LO>ú¾ËÿÇ!ñw˜vÇS�ã&“ ø.†{ *½Ÿ·¸ ó³§À¥ã?xn:Ýþ_‰ÿÜ9§)OA.HïÆÑðatÑÙ…0ŒÇçgºpÆ£'‹pyû©-ǺûsIrþe¸ŽèŒ2ø¯S°w‹›H=¸l—‚ŸèšÝÞÍê÷gÞ½¡·þ>yÒ4�µRÎnR0~x(�)vh ƒ“d &�Õ`9[Ï�«Ð|SJÖ «¤;uÏîzc¼.zµ ”a6‹%ðVÅ ®žéÀY+ˆs0\6cx¾UUÀ©ôÄ áÙ•å[pyVŒ ìà3·u ߟb¦cq^'‚~¸ŽèŒ2hOÁZÄç)“}²$Û0�"Iëóùp´dµ ¥tÊÆ`˜4¬Oç¼J�9ñHAfçT½k}^Ï÷£ó ÑP¬—òP¶°¹˜R€‰èQ%µ¼vìC\×Wgñ­N‰PÓ©,œJv …ªè™‚l&�©­®-E×ìè”ù[U7—ÐãÀHÅ I1 A¹’Î:Öeñ¸N8±q0—s¦ Ëº¼÷§©ëÅ6.²iØ×å”Ô%è–× ûE½é¸MÁèúûDL¾àúÚjÍzBÕt%– ï·R2P9}Û<Å8ôm7ŽÃç%w Ëi¶#ö}vn„R+Ç1×ýž‚IÙg*uK’ tÝS0W:?ùÿžh?aÏ[ °R°Z«%Ì bv+q(��‚ì~Sï¦ ž‚Wì»Y68¤é=‚wü¶ ÝuOA%¬ÀÙL7Á®NN°Dâ0Ð!¢õ˜9½Nv0˜PIÄ Ï¸g 2'ç¤à,tðÀv󩱃†eó¥|~©…$Pe\ÜDÃL 8@«k©6X*m¤‚ç¤`5…nÙ¢†x7ê–‚R÷Àš0ËXeø–=ó!›Þ›5ÄǺ,®×É ¥­:Rо®!û3‹§ž€m]Nóø`ž-m‘îÀ†µM×1PfÓK›3¸�ÔŠöAõ6›�vO¡‚ï�Jc(q ©—!·óJ±g¶²ö}vnÔ>°Áõ¼cpx ƾ žĒP¿#|ùªvK{ôWÿ¶)ïÅŒ±/Â�ïòy)x‹›h0Žn NS°ý`¦…Ù�L@¼�3³šöX;?yÜoâ)xÕvo~:sHÓ|»ü»m®{ 2ƒTH9’TÀR!D…>™Ä Ô ø€IY$+ôHút¢³M+°b=4BTïdNVU gâÚÃÂz±.‹ëu¶0Sà ㎴­kÈþD�úñžjˆƒm]n)øúE%Xma™>3À,`×q�>ñ]Áþu"Ø.Ëb#ƒ‹à´Kjx/¢ˆu?Ö]Rð!>�‰�5Üt9¯ Þ¯†òÒ]L�}Ÿ[rK;.)áWøÈ±?CS0*ìë[BÊø�Ípýë·’ïð» 7›Í½-ú �{ûÇßÇ/‡±Î—ý$OÁ©c¤àÝ�ñ·R-<€×í€8çÇNÁ#ž‚×Ô›Á×M�¦;ßð¯ÛLX †ˆ(B²90•ó"ôH¤A U±yP9BJæ“£ª Lž¤��J Nb´K Jjr¤î,A»�Ì-âŽ� aV»¢•f6ÐÜ`šê÷Šý|©ÐÉܵšé1&Àf�‚l°’[Ø>'_c  Íæû‰²äLA&a¥ ¼ýÅÞÙô$’„ø@»oÝ!NhšÄ€ŠˆîJƒ_�ßÂdâ" Dcúœ€ƒ€ò§Ïäè!‡ªñn ¼ v‘æUÒ>n¼ÄÒ”«ž’|uýÌuÁ,ñ¨ÏCÚ¸Ìf*xv–QŽåg›¶Œƒ¦=Ži› >Ct´)Ç-G@9.8M|²|;„}» ¼–a�ý»…«àOS�¦ þ߬·ü¤¤§<´¥&·<2t=ž÷ôÛ`0*pøƒž·w$Lúpq°+#:Ûz’ü¦c'UA¥›ÐA§„“Š ‚Á6E›˜ ï‚2%I’LÈ”�…ÄQ«TAÈ“»Iÿ§œ]a®4LÊÍTÐOöNw©Öô’$&Ä%"6SÁ’Võ#¤Þæe­M ê4×.=|9Œ1’k¦‚ÆýÃ)ß.=!í‘GIõŒ=Ïx#Œ³*gi¤�ì È{ÒÉer­¬=$¯‚)U)Ž—K›]ï&[wû™ë‘´A]å2›¨ Ûñ÷Š8æl^G¥/¤WA6‹|}@�™“=SŸ,ßNÓ‚03#éWJº³h�‡ª`‹¦ þï´´hƒôÔ‡@i©É-�L}¡…AŒ¶(W8¢[t…uÈ@2¨�ô“Ü�>ª‚‘þQ� zô–“EëöàþôG…ý—L·bø×ۮƥvˆ³~¨-�‘�~‰]'im¦‚ãäæ^*ØA­gÜ�”ˆ¿™ ú^�¢Uƒ¯$L½zåGdGÐ/>äÚ¥‡/ŒF]$ÖL�û‡S¸ºvñkµ­Â‹µØ¥s*,òåh‹H�½Ùé392KäÆÓæãU°6�ðãõœLø‘¼ÛÏ\DHÌ�L’—ÙD;[ô5ðèß(¸Ù@ÏNö('¦ >Yä[«àt‘��™¡Œ©‚OSMƒ j Ž}‚ìv_[¨c@¤[A8FFØÉ]+8®­tׯ\ã\Ðh‚¸Æ" (µ‘>&!¢þO¹·Wš"”/RA̾‡  ³Ä5æŒU�1KºèÃM I“[|L¡a»x´rØ­Ü3ÑL�û‡WA®]*8K&Õ�Iönž&*X&7Z öºLž|†Òü&§‚l�&Â�×0©Ñ[×Ïõ]à!5ö¹þi¢‚!� žL9<¶F*x°ˆŒ™*ødù7T�éï�)óíUðjù¼…ãûõ±/ÝøzÀ«Oú¦#N]²êí°4‡Ýº¹ÎÎ'ûü–øû‚µz2=ÞÈàw«‚î¶u]Êð‹úþ Ø,÷ƒ/‚gÍß­«ÚTAc© jo8ƒ#â­4&ûHcM’½>_-ƒLóÚXç‚ÆÛF4Äð’SH³ Swþ”g$ê/—G¿XG"ŠCœô�1¢MU°‹–»BüØmdgLCÔ© ß.=|9B+ÙIO–Ë�ÍTиxäÚe¨‚ýªïÍÐox›ª` &c\&O`$ݽCv¦y„š òã5OÒcŒ¶ú~Öw–ZÐò¸þ¹ß±ß1§øàõÞñF€& &ˆÍ—ɵ|¿ìæéÇÉ®B¼û`ÙØCÙ,dÕž>náY�Ï+DzÕo1Âa �'�&«ÚM½Jújv3G[)Í‹˜´jŒ[x¶è­q–“‚.K\�R«™·XWÚØeg_r›–´Z1ÝC[­‰û¨`~WÁž;ûbe×kÛË€”Òm3E;¤õG–,ÏÀþ†^ÞF­ÖFò<–·Ž×Á3R¢ýÐVWµ©‚†Z÷›« 7¯tаânLXaþµ ÃUÕSA>ìͬÞ*y Ü|è5 ®ˆ:Vnzg@j««ÚTA™ Š‘ÁúÀŸ(ÖÌ%¢MóŽë·’ 5ÄÛË[ø ¾ÅÒ…¬B€¥éyCô@H9æc–/RÁ€EêVû0„éNˆÛ”; ÐgaêIeÍV�y59a1Â)A;>l6WÁ̯¡HI?R{²C7UÏI(:-Yà.¦`õ^*ø+Ĩ¾q4vÁw�k®‚3ÐKM. ‡˜ì†måÉÝxTýÝõÓV…¡Ã˜„Ù8¯‚mv˜I€‡+â.[hüÕyȯ߭ÚTA#— ‚ã>åCœ£;C�¶þ~w-Ôñ•ø8ß‹¸GÊNA#š¬ý0„Ø?BïñyÔ0à†E.4Œ ÿðÜ]²D"ÚÞ‰ž9­ä%:Æ®:¦ T°Ç@Ñ4zE¶“Ô@�³ßóâ“§:T¯œ½‡ N“—‡$ª�ïzñ}($©WA¾]zørDõ…‚b¶‰ 6é¤�)×.NÉ­3­)œ;K’(hô5VAì¼4½-2% 6QA1·3§zFið=�¢<µ³IŸ2NÜüx¥ÔM•D®Ÿõ]€…§è(F¥)7Ÿi¬‚®S �:Ïz24øìôTIyy´yß;޽éÏM¯™aÁGÌ�jØîN»st °= |[´ÃÏøy1 —-_A¿v 5ù3ÀY#ä¥OÄ@ݵ^ð)>½_¦‚)â§W–£ªÏ-ÒdÎq¢b.Eói·1öuõ+}MUpX„/Ž �QkCÕL„y­x壟Gp¤ž¼káØƒ³¦*˜�¸ÚA¦k ìÅh jkóLçÒÔ¤‘¹äÌs*¸†‰µ½™+BO·Úݾ"xêª6UЀï]ÇÞ¾}ÛÜx« ˜Æàb°¿+°•¼�õõkïÌ(—®þ K`´�”£:_ûÆ@ÿÈx‡«ìB]pz‚= [ÊÁ'4â'½ 6WA¹‰y5Üš–VÕÙ¿%’{?2k�$‰T#tN�nS¢´Ýô„LÑ£ Õ€Ø;‡fHØÛH!‘Ø%Dލ=6ER­½q"Ei‘´€’SŽoq-�rb%qåȺº4U3¶UòªorX"‡´S&··WÔúŸëÛÅÕÓGätyÈ”v*‹‚PVJ(Y9¾øv÷«2FïLsíâT0Ö]R2§ìÊÑzU_g{ÔÝö;ÛgÉÔ\½'rx–Hb¾"F^ùÕpàÔlk^’4 é. ·Ï†é ¹ñ�ÉLçPlj*Äõs]b�{Û³¯¨þX’î§‚1ø•�¥ ‹Ÿçg©¿ž_ 'žä¡ûää#Íë“¿Nm¨‚®}f§V”ïN&«â.?³û^L&kÃQQ\šWÁé]íÓ W„žA�3,²8\Wµ©‚�ùîUp#XƒÆGÄ@¿rÖ�àH›Àpváë§µ´ØìqêwoPIdD{”{“š8øÆú•R]XªQ\ðO¡© 2$ Q!¾mBˆäbk½¶JJ*>í{ýj‰SAÊX®î‡ç/¶ífŠî*�n¸VPaif^S$¿�(Ä6ë¶cÄqŠh`l ëI ã’’1õÚ§F²4rúvñpåøú!¯æ…¹}Ú°aRCàÛeÜ?ˆŒ™k¿VЙSÚ&EÆ&{Yt]9¼í ¦—”œ|2äqgeìµqH©p)H× "sœAçÆË¶MSVßÏú.`ÅÒÐËÎs�ÏäUЈàiFÝA2f3€SAs¹àáá¿äá*x!Ñ>-I—EP°~BQìäX�†tœaêZwÿ°Ò�üŽIœ*þÀyH€™ OönXÐ :�ÈÄ�R™ÁQ¬~c¡j^‰~ß%VÂ!ÚLj¶è-ˆ'¸¡¾X ^µÂ‚Å‚)¤,eýE¢QÉÛ“ÌU€2lA^c¢2†*¨±^ªR³PVÓ"À€Z2,R‡„nzç�Ń“N é\Ssê×2PþúDe‘”ËvÂÏ.x¬ñch3·QxñÄ¥WsMf=°bi ‚6›…© AHÌh'…ºªM4à{WAÑæuêÓ>Ÿ.1˜ñÒ¤¢óN*ªOŠ›`ÌO¼ “™’EÝóu èjqoÙ„¯DlÛÚšÂê E…¯"³q6kWsœ�H³;�ûçkÚ…ÛF|!¯ �|ï‰è9¿ l·�èpò�Ç�ŸÂ[ù.` tµ r™ŸSÁ·Žë…¶ÀÛ³÷W© "þaî#~tüý‡(ü—<\qÊ‘”¿ÀÑ‹‹ó ä©O8 u® ÔÈß”º?\}Hü¦Û~ 4HøE»² o8y® Ÿk®†K“Ä€N©ææ† §dŒÑĤÛÖ)¸©Ò{ÃÐê»ryTÁê>ôº×#óPTòÖd-*h\ó°¡íYQŽ0´L€´²¡¨fû“ ˆ§ÇØÄ%”£âÖ!úb$mB¦Qó£‹N›§¤xþJ›³g4¯WAqV5ÏVM¤"[èSR2ãìI@ žõÕ֨â„ÂúýTðuH>Ña’Þ\]]Úá€f�Ý««+:K{Ÿ.–óxÕH=ª¦ÙÁ¯¦'°]Œ5;Ó;gIò2äI�ǰä-íI,äê�ªÍµ‚F<:ü_Xûé f]ZI§ðùŽÛ…*¨7Š­ .u·2¬�dp¸§Ê‚jÝŠ­?™®XÜÒÄÊñÑÌ+Þ Ø5_º§ žÀžnmç•.†›W7•«Âø—6&çF*è›Q{Ö[ëÂE�Š{ 4Àœ¶°ÞD Š@Òµ0á>ôU›ï4ÄTÁoŠX*Id^xr|oíJ“SB½ v”J@Æ…§Î†£ßö-èwl&&à!*ˆ,ŸÊ £À%à…6o¼‡æ±üæxï¬DÝâ”Ô¬¿µQo&·[X/Âð‰_+h”ˆÃáLLÀÃTùT€ÒÝ‚ ×vªþ¬D�V@EÒ¦!Ñõtq©K°£*w3^àÍœ ÖŽøU„Èx’š]2i…ÕdrÐâ *Leè»ó2wE$©j]JyÛ€ý;kQÙ†Õ´Bz5’Qgæ@AŒR•Df ¢™L^Ó�!ýËd4Ö+Ìú¢½v€x¹š…Ev3ÓÉÚ®± ò»´‘c: ÇVP9V7•\©ÂXc¹± Vg¡²fAò· ýÚYnD—æ¹ó� �ʸNù"r b£aÂÙúµ‚XµùÃsƘ*hbò8ÙpDn‚fPÐäA¬-'lÚ÷?»ÙË�¯õTsp�v¸{«-ÒÇ0~Å´>H mÃsÅü¨0ð½Íõ‚•EúP'X�ðeMY²ƒvÝjrÊX½ÌBRºíÃd_©–h+–ØÔî¸}?MJ“Ê×Ô”<0Ì"a¨‚=“æ<µX¢î»ãh¥® [³Ó^å› cîó*x|k×{ÔÃÏ¡øGO�Ï^à æÑ�>�P¨éØ* c®�‚[í]k­½ÜŠNn­ _„HN¶ÆsVWµ©‚Ƙ*hbòhÙp<3&hò@ìÖv‡œ ›Š¼Àëvu ÚU.qò7¶¡D·kDBý¸†K¿+ÁõçxŽ aÀà‡çÒ ÒIÚNM¿úñÓò+Ç"„˜í…qBr×µI¨0« óÔ·ÛdÕ¯¦g1×4‰–C˯Ʃôav_hSxu U5è5«zO%ƶKKòƒïõåÙÄó�AEtY«l»ËF/‹^t¥•Â�#2‹\¡îoWY©½}óó*¸RëÓc¥Ÿ¡›yaBÝêsŒI»í|ùcÃ!BÂy+¦ eÔ‹Ö±yûè̈¯�Q„‰öäŠÐSP R´Bù¶jS?‡©‚&&�ÿÆ‘ã!m˜ëMȃTð È¿ãZÁpïéh–.Lákð _3�~øB Æñ‚š@Êh‡{èŒËG§ï7~Œ‹"YLéH0ì7¦¦:Âá-ê)Ý0‚âeõ*×Fe£Þ%nª`Ä7é�vXeQ»Ä "ax‰É-�¦ÕmÛj�*f£bG•+@+MØUÌÈX`€_õ¸YSê©`uë‡P±VöÃsNª†Jð–ç> UQ eÆYœ]ï…,Yõ¢! ™!÷\+h…e ¾K�|�‡q‹ðï²ú/Y8aáÚ"½ïWŸóC€Ûƒñ¡3ÐWU[„ ¶½·ÝÂ7ÞAÌÁÐâ¶nìfëZ­jS?‡©‚&&&&&ÿ� ^ì?;ªHûH÷_€ÕQ‘!ñ ÷„@ü +¥`”Šz!½GÒ›$Ƨò°Wæg'5ž?ÏBmûžr"h„y´%/K/äûR¤¨RT·bûàAl“ÀÚwSšQ'ˆ×³ ÏõIÔÔ˜ÛÄ;‡ÏhÑÆpeh[ËöU ôzhEB—±$ó9Íb…€Ùö>€÷Ì{FŠòJJ†< œ3rjE.�¨k“aH ÏZUã”`¦·³[›ò]ËA8{#Áî4¶E†îÕ^;1uü0ªôî(ØU /€œ:µ—Ø[}Îþ:Rß9Ž­XŽ A”bTðYýt?_-Aj]�TB‰åúî«‚ú"êé©÷}¡úªM4ÀTA“ÿ^‘7qPØ=¸@÷«´¼‹S¼Â¼Ë¸’sü8 y­NCNÿS%ÔA~ûÉõ'n¡Ú—@¯Ë–,ã³EkpMÅt ?ÇvûcðږƯXª­2ȃÛ,(¤¼FO‘63-ª©µy‰úIgUÎ<€<ôc6Õ[­PÚм§Ë_€CfEîC¨øµÄ‘C @Î�[XnfXÒ—–Š+QÖ¸„sm–/SÁK@äÂÁ›+¶yÄ!dÏ»áLåY\ðl@î^n8‹Pc/Lã£öŠ˜Ø‡Î{ª ¾ŽõN:öWµ©‚˜*hbbbbò¨ òñÝ%3¸38£i�Ï}Âó¯Åò-¨nêäDtÛ,ú”¨×ÿx‡SoY®¹M}¶{Ì­/Ö?ç½M97Ô— Ztøü>ݽ,Á¨øõßunÍù«·Éµï�ÌÞ›ŒUИ‹ó+}ò·ÚXžßªþ±-›¥9_W„34Þ¦�šÄŸå;SA“ÇÆW© O.[¾%ž{ªàSSï`ª ‰‰‰‰É¨‚?µüÑÒ�"|¬»òD=ä{e½å'Ý =å! -5ù‡};ÆmÃ0ìå_(ʈúg€Kp›^  {ÏVnBÖÊRÇÜ+R‡*ZÌÐlÞçÖ'E¯°óge)hIùo z±r¼þIx(ÓY­wñƒ‘ržàrR ‘‚€h)è&*ãëí(·2í�Õ²â~GÊ;/'Å)ˆ–‚…L^>’‚KêDŠáHùNp=)†HA Uûº¯ôqU_ï 5§/IÁ…Yñ7#å;�å~x„ÒTëójDNÁB‚™A .Ë‹·#å:�ç£à)$é¤Ú6»òq»¦U= n Ì RpQ^ÄÝ�”ç^x)8F )ªõДÏj|D„ ´àè))¸ ÎЏÀHùMÐYJ0„´WmÊç5ª¼Dì4NDì]h�‚KéÞ­ˆ¸‰‘ršàrRJ0ˆTk[Î¡å³ â§ )¼`M|±•‘<ïCHA A½6åí '‡ ç­` ¬wÅ6F²Þ‚a¤ � JwåvZ`ÆäwØ6RˆCµœ‡ª xý<¿l×÷ùÀ~Ø;»�6Ž(©T9«Eˆ%»Þñ/`"{Á°`óc§1%�%¶H‘-Y4M£VµT5)WJ_!REnr]5ב*õ5ú H½¨g< 6ãÅD�Ô…ý.<#f÷xÎŒ€O3³¶Ç PA®‰ßOà*è{Ãðád§T¸c{Œ413²ŸŽ¹=ʬ�—0>ŸˆÐÞ\�ð MGw�/!iwöb]¬‚¿ß¹íœ€‡§‚]¢‚YÃØNÊਠ²epd "šYŒ… -ëú¨­EœF%[+ÄúÝMÐýCdŠñz3Î$§ ÐÌ ât¦8Uçþ¬¡€ˆ4RÇÂæÑò!–àÓ1Xï@/>òºÔø O¥àJˆqTœ¿B k#u’ Àó’vç)®]› ¦TÉ•\°GêÉ|  þvÇ㸠,{*èááAérT"¤@4à$ ' "k„à /l-¶k›:´! {·HL(CIbNh&‰*n&èþ�ACN-rU,à=hfyòaø2žƒ О=T[Œå«Uø´lá!¯K�Ou¸*<Îõ¨ ‰´ÏkëSªàѰäÆ÷wýIéèèBôÖo¥ .T+ У¶—ñTÐÃã[TPI’Ýçg*h˜ ¸bͲgÛ9ZŒ’ˆhDW2oÌ Ô‰’Ñ8@`‚]L�q⢂ûT&#ÛXY¿N¼<Ã8�ONãKÅ]ÿܭ誂3¨Á…t� ªþ-5#Ùk¤‚Cw<(7û¼à&®­â&,àʺ·*èááÑ-*è3ˆá“ÎTð` \ñ‘$œ%A®„dHŒ•9²Eo´×|Pç‘YT.:5u⦂ìæ2WTArLc즩àö5©àöíTÁåª,mùƒ�Ï z‹‚·pYP²öeß’à1\Q¼ b�®QÁ IA“ 5h%�Z~äTIÎØ%²SY窨f%Þ!aV*3 ÝÙ~]x~þä„×8Wlç Á„Íô²‡,¾‹*Žê¬7^/(\Jì¬r0³øŒuªjÛ Ó¸oS°ÌjE8E.<Ý0.*È{òËdqi"ÐV 6¥Ÿ�‚ÍÓ ÛYþ“áôfRá�u4€Œaż8.qúï¥wVC¢ y]4>»¶=\Æ%»ÎDk^"²�„�¹x/ ÍŽ;+ãBª‚Ùñ•M8’6¾¸�Ƙm8�"4ÂîЂå&/쬼« yµUÁÌÚÆ »‹‘ZM/ô|þ�ÄÉçò1¿?×^Cù UP¹ÍÏ7óÜ`ê´Ð‘@+=å½!^5R©Í-¯_ãXÍì½ÑŒ§‚ŸX•ešUðÍ.´’$§˜'Ù–ƒƒ\b$Œ9�£�5ö01t®Èº˜ à‚¢ ¦q €;Üóð1-ôÖÙ᪣'�òRЉK¯±N"xµ®U¤”Á!ÆYÚ*ø-*QC³ˆâ×Ùv*XBÊ0L~#ì Á¤h±„ø-ëÞ6ë ×CÕļ8mãøv�b-V$äuÑøLã)#Ð’—ˆŽ_êÖWØLða"¸$Ä©« Éº·ÆoAÊà´6Šà£4k )+Š�—¨‚eÚ÷RÑéE»~ ¾¸ë?ŠÑÚwäWÿñÏ[¹üÑq½¬ó¾þÃÏþ$GAI&Çþ_W{.Z¼ãÑn0Û¨ÐBÁmhå©¥§v˜(c±·—í"gk˜xP²æï#¦=næV{Ÿ?ݵ*HiRAÅŒ�/£Ê 8„DNw}SÏ…%g10ãh_ÎYa$Eh`›~¥„#‘È .F(qÑÊ™ZT±¼–ɾ(¥ÜUjHj÷‚C³T µQÁh=jÚQAÉaåP­æ£ƒ;�;!x¾Áúý‘HUëÛ�ñwB^Mˆqfq*6Ö¿iaU°¢–¼:ŒO¶~ác\ ×Wá\^¢ öMr˜”Фwâ0^bNˆ£âÈã˜ÄFÕ*›™€¾‡ãp®Q€F¸�³´ÈDð ­ç¹YÁï…¼„¤c8b<òmUð€ÍZ³ýùèáÀu«`öî[-öʯի w–c?¿ÈK»s~211qôŠ^ôêèí÷ªôêx7øæø­ì©àíVÁÉ@ �˜„ò¥tˆ¤ƒ´^«¬çËÖóõ�ûÐWVçǼ/žó¸¹_cç}+ÝÿAã$6 !Z8ù¨>Æ«9¢ê´ÑkH^’ï@’<¿9áÊç#k¡X JRõ+Æ’‘G"±N‡¦N\T0´„5‰ aïU«Å™¥ýÀW ÓÌ@¾��† Î+´3Ç™ž�?+x¦S¨³¤¢¨`ÂÖ´�½n»œ|ç¨ ì7Þ9‰3´(ò•¿4ù€aí~?­y5!ÆÉl°ô¶q¼ÙŠÄ¼:Œå>êÀ8——¨‚%¹Ñƒ¯é�4Îâ¡GE+ßÈr¸Ñõ$Ëëk+$4^xV0¾¤6&qNqQA__)ÜÐÎ ¼oùPþxÝ*øâÝ÷µÍIòÝÍzMó§$¾Aü‚©àÝåúkÄ_­¿Fýž Þnì«@ȲBPy-h8\Aö+PÛ˜ °Sˆó¿ÊõlÿBa~úûóÿŽÏ<>ß}C—þ~ù°)ï†ùu:îÑí*8F4-^6ˆ)ƒ€J4#Ni¤€ÀÉûý»ES°üUÁQB$¨’*@‘ä!KH?„Èn]PÃR¥Rq6oÃø²¡UO�9I–_”†30ؼ¯ºƒwŸupWÁXâ²¢”,_'<À Z,6Di3Í‹jqÄ-Z y5#ÆáÄðËN*è>>‚µæ%ªà$0¾ÂÓŧ�þíTp€¿å"ÈøÀûM¡ñ2��Œa©£ &�h‡`iˆÏûõª`Ø@«Ëþ˜ô�ÿ “¾h« ¾§íÏŽè«|üÞSÁ[¯‚aÄ0Tú …YÜÓЧ1PÛ˜œبÀtïèØ´à¥ TÁãÒRõ“ T¦¼Kæ÷»Ÿ<ü¨à#=Ê< J&@@Ž2ƒð�–¡©S̘œ'NU0eï*P%A€ ’‡žB1!b@ ýsç<¿ *h%ȩ̂û�ñ³göÕ‹�óOÈŽÉòCÔùYA Üù*ÈïflUj=†ÊèCµ“ ÆË ÀW®¥\VYìåÍÈ­KÈËAŒÃñÉò>줂îã#(œ�W º£�Û8Êžæ¦k—�Òˆ"Æq¬:Š÷Ù�û§M �UPÉËrÉꨂÏpPe¤‘0Ýü8Oëþ­f¨¾=bŸ(˜kUÁa‰V�ßSŽ�<¼Ý*8•�$€Ä´ð ?h{N—û{'‡óWUA®ÿù™±Ï<>&0¥ºü”wÍüþá¹`÷« ƒÏ$qp#Ä=1®êÕ}DÀ4¡é¬ Až#L"ÐÁs;+è°‹‹*Nòe5¥Yuz–*RZTp³ƒ ²–™K¨`C}xJ¬“ Â"Fhç™Iãë\móqâðK'kHé ‚îã#ª �—‹ .6rÛÀ"ÿlWÔ™í0íDx,4^¬‚Á× ¤tVÁt 3žÄ½�£‚QGmIª={êפv*x4Á0<¼Ý*øÄâ��<�V�É^÷[T�´Ç¿Å¯¥«« ¯ Lð_öÎï'‘#à“Z2J Dj\„d‹hE@è) QDÑ¥âQ› 6D<5ãƒ&—«úÔ\®ÿB[“ƤéKÓ}hÒ´}êŸÐô/è_Ф�Ù�¥Ë�ëÂ�TŽîçf\nv¾3ù8¿ÖPÁB•ÊÜD—·OÿâŠë_}|háâUçP³¥ `(òAÕñ1ecÉ<nwÁK §‚½©² ìÈb�ê¤+heá*›}¿iŒ6¢‚f„ÌdvõJ XuU°Ÿ,ÿùT¾ìB§‚B¯JÙ¸Ô°å€èt‡Ïf‡ôTP»}XdâÒTÁ+Ù÷"œ‰ ]ùòRÉ nsÁKЀ &ÄÉ1eªô‚š/©N•!Ò´ ZÅ”x(¨­‚9içïzH ˜õUÌ¡‘1%»�úa9¤RA6®zØr¼(@õUGµÛ‡QA&.Fß—«‘—ndÝ@}\.Ÿ.S/»jN+È'µQ£‚aeŽßJ~ËÊèM@xt‡*¸óÑHÂâçž þ…ž+b}çSÑh±`½AÓ}>0_x~î4<§C§?xîm´=6¶­üŸæâ•¡õ‹bñ­€zÊ•)w8Øzó•Uðãv4T°å<5}Üx—·Sÿ>5V ¶¹ zxÉ…ÌBí\iûÕ’¯6ÔçvHGâó>@™Ž.¹€‚µX:€J_”|fmLx7‘Ê~ºTPË/�® NP• P…|oÆ$Õ’7IŠ*x¬©‚ �æHlc(®¥‚®YtºFä& É^9Û€ Σø ²*éÅi†mTT« —¶³ˆ’¤˜ÔkÂM1q1*ˆrϼ¢pæáÓ­ªCep*ˆ‡|Ì#VÍÍ©à8Z� U_Á#¹ÅÝ¢Í,ÍÏý —ïPGÎ9¬vþg÷I_ç Ÿàc¥{¸ë«‚–Äa×ó<\7Al þï1 !¸@3Q,ÐoÇ¡2Bâ¨ë¾²x3Ùü¶‘¶œ6T°å<6}Sëò×J3Äm§‚B(zÈ—Blæ~©?é/ò}f sÌó‚bŒY¾Ï�ì/ñ…š D³VPãˆç¯Å[Š†Ž Y¾ßd{¿¼$»ß c9é¶‚—Ââ÷¸ôâÒg0Öù¤^ûèÇÅnYv«JP¦á†uº]à%ÚÝAÐ(½v¿ÊaÓô9­RÁcî�Þóð£Ïßxi½_ÿŸ÷ÿýWg¯4TÐPAC |}Tð~øå4Ì´ :‘6Ž‹¨  º ¹ÃéᬠÒ}×=w~8oi+× ÚDÍ}njŽ{RAÏÈt‹]ð{5³Ÿ`Wg§ÃuWçoW‹q výªû #N½ª?öì߃ þ8þó­× l:U›ÀQ÷AÒVqñ+5fnRA/Š�NçšóXn!‘¶4†‡»÷¥‚¹'*>0ýá¦Vê‚?bÛ‘oÛ(‘:]³),É2�AWŽºê9š�ÞN0Y»ïAÏ+Ûè†Ð¶-Ðl"OÊ�„š»uZׇ6…:¹ÌÙ(y){0G*뻽꾉aœ�Ûo©úþ·‘aØ›bn£¯‚Ÿ<ÁÄÆÏ?4½ O gj€ÛÈPA ¼C6[�‚Ž£ÝâÊ£eF�l¶ �N‡ç¢–» ÊñÀÀàžTðËü—Ô—¦ßÇ{L­†U…ijR*‡eÎÔדPùq”dí“0•‹Û`j©KMÒÏ6>MÁÌ>›Ux¦.&V ”ÅÓÿ> \<ŠÁaY¨¼Û°º¾� Ϫþ…wqÑÛ¥ÍÀ";)5U«¤§KÅ¢òÓ É×±jâ[À�Ûªî]�Õø¬ Nú4«îËÁáȧ¸ �ÇÌmôT·\*1M�_Û~“Þüó«¦ú—¶‘¡‚z*xw8ÎÎVô‚Ž£Ýâ Öpálø,¯º˜<ëž�“ã<–WÇÃqN``p¯Äãð3Ó�jÌXŽª`ÖM‹>,�7æÕL»á8q¤UX‘>윒Ýkž`-r Ïf)EøÄ�ßú†aˆd7á:Ѽ]¥värç`J%ÓNwi‘…p�jÎ,ÞPõ}8Ù¥bV®@(Höqt䦺ŽÂ˜ÛÞ&ŒkV}N’: 6È3·ÑQÁß!ü/øîÙpS.¸ 65A}*؆ ¼~ðÜ3Ï«›à3cPÐàöÎç'�-Šã/™�ïîC4£à�NCÕB©}EËD£¥m¢ÖÌ[EHM㢠Awþ…·Ð&BXv’&†�ýüü'Þ̹÷Ò!yí{É3Mîg!çÎ 3‡¹,>=ç½o¬¨9þo´.!ÄV_s û5ÓÀ¦A3¶­�� à)3ÄŠy˽ÀÊqÈ�†œ]Œs#[1ÿz…óý…—ÖKK<¡ÃTÁÄ=âš³‰G}R÷ bWG[¬#aåüðʹzt¼³†³ÀRßÔM☦á>>É—¬‚M„YpT?JÝ@ËñôÞ#¥‚ÿŒRA…âW¤ív?ñþþ<ðwï·»ý›Bq¿*¸‡”ÏÏëG«Ru4G6Ús×yÂ-*†�våöüÒÑÃÕéF Ô ð¢Òv\ž'JM¾«U¹MÝPœ¬œÕÏ*�êE?ÔgòšPÁL¨Ÿ î“ f°+vû³ßUpŽ—}|”†œXÑË›¹1«Â† F¼¦òÛP‘×ðEãd—€…åaŠg‡s;ÏÇ4éµ m qî“Þ>©�a¹gkœŸ×À,WA9×ylçÙé±xGê³Ø-„äË VÁj·XFªn¾4*lН+%5k§�Ûšž�'r§I6�n•JÛÚ}B×ÊîDé¤.M¯ ß=ÚZ~®½[./™ ï>ÍLp·_‰m<}£TP© Bñ+2îþϨš âþU°��n²dî*L\õ2,ªÌú €©÷XR)à”yEÕm;<…EæŠWÎÁDß룂“š&TðVX¾¢xom[w°Ï«šyöI’>Qƒ–‚QyØËd“^ø'¸rØ÷ã³} Vn1/µÞÔ… æ�í“úC«ˆ—Ïó�ϱÃ#`‘7ˆå\_Š•„(�S7)â�òU¾Ì`ÜÀ·îtSÓ÷m6°A££­í@”iEXy㙋X]š^N¿{´Ž�×01&×aœ �À¾DkY¥‚JŠ_ÏxuÄý祈«u‚ŠûWÁsTyt‰óïœé‹Ö7£Ý©�-j+â覞Œ£äèÒ@qÏ”¾¬º þbóÚ|¹B+Šj§žL#Ìì#s¾×: ãVRB¨à*v¼k)nø±fgS‹a„–_Ñh»¢Slïäº0Å‚M¼–†½d]̽VxlŽæ�ðÙŸæõ«Ý�oòY»×}á]Ô±®õ šŸ®Œo%Ší÷[š�Ïx>{lè_²¬å[ä�b`îÎÔw…™¾Aú®ÔG ç´)ŸõÌ”|™Á*¨ãB„š«[$itDßpzuS³&4RsÔª@Çl·FÐnµLñ+¢F‡¦Ž.ê�(ÒÒôrúÝ£u8C³Þ4âúÜãìà }Ú)8gµüdãJ• * …â^TÐ…&�N©A„"N,©3,Ó«ÇY5èNG—«/]•¬]Q$®Yu0bWmSSÙÀ ÙÇ©ƒéäõ@œÂ±á'|Å2 ?0Ã|*4ÁʼnÕ…\yD-mYö2‡ ÞÆOø�/Ïìëù6ðE“× ¾�s•éŒ‘í«‚z(‡P0fí{ð—_O¤€OÏX_x’K^·>(çšEÂIÄïL})‡LPÇšG¾Ì`¬AïÆ9k¾[ð×iCÓña«ZmY¯a6ñ.ìÑVZLpc A¥_àZšÞA*ˆ1K¯ ¬±¾ÿ™ýMýŠRA¥‚ …B¡¸l¨>T ¿ŽopÑÆ°ÕEl‹ŠO5[Ø]qØcªA² ÈàÆÚd�#Ôý¸¨‚‡À®©yÞ\ä_œB‡¦AŒó®ª S€>üÚÀ ?�Þ!& {Gf‰9Øx&úÊPÏ£ �lœÅÅ ¶úiŽÈ}4»Õ›Ð'{ÔÍ8ø å§�Xc'/X{ç Çw¥®ÅÅ(«@¾OêÄÃ,¦äË VÁ3zÿ�S›AÇôzê;n\Ò—Ä Í ZLP!÷£‚bSšÞA*æ·p�¶Òð5Ž³ê±‘ß~S*¨P(ŠûRÁ+D{ž½A�‹Þo(v,!ˆ•‰(š¶\m®‘MDXpÍ‹L7�vù¨„Ù‡›v‘O RÁùàó¯0FíUÁà¡RFt,oÚÖøe� ½Ä²4´sè7˜jåwÚ4ö.Û¯B¯ÀåÑú¨` ó¢[½ßOs†‚é,WÉ÷ö¥}AÖO3(ŸgŸ€øW'¶ßu«‚r®âÃO"$§.ª�ÆðۥѧÀ¡t™Á*XB•ÂÝÚ(±Ù¤ïA™FD'yV>ªfÈý¯°5‘SH O,KÓ;@ù‡ÞÀ4I?¦_™õ)T*¨P(Š{RÁ2Ü<Ú£úÐ —º¬%¢ú‘€,€“¼¹àâ(Nâ²Ìð�«d ÷‰�*( ®¡L–‹Îã§.˜—�á�Ö%þ}ÁÝŒ4´ñHǨ¯„‡”ð=ߺN¯ÖO3XMÜ]IsìÌ"¨õá˜]5;Rï}3ØíŸzïZÁÈ©oA�fÝ#]f  ÞâD„{Ô+Á�.é{à»/Ò`褀¼A“*À-QF>‘¦÷GTp–© ‹„÷€±°¥TP© B¡P(îEÓ(³€×‡NmÕ@“3z”ÄÀ^�ÓÓ?lVtèV[pC(Ä%Ò–N‘ö^­SÂ‘í¹„2NPç‘#ã™ÕzBlXµœ0J õâÉPZHÐW¼‘‡]¦RxÂÃYà¸O={ CVÁ¦EË÷Ë@ôÏú¤>×mfOX%ÈÒ½üüG)uÛƒÃؼ#õán#x¯¤Ë RA{7BSGͶP4Êw×R%k7—Ø CùôX9Ô-#_HÓûS*Hx×tøG• *T( Å}¨ W<:ÇYo5Т„6)Àž£?�)„ŽK6Þ°Ž�¢ÁKP ²�—ÎËÁ*8ú`LHÐSª}aÝr§\Ùò ÙÕ&Raëå=/$f£“‡¯‹"vvŲÀWç�"5©õWÁ]ñ¾ûiÎÔƒC‘UX¤n²ÿ€/zÜ¡±ÀÇ,ö°*ç:Š€xÏþ©¯u�o3Òe©`^AïÐRQ&÷!ë{ÐAÆATPå‚H¯fˆ7ˆÚˆ2‰T]šÞŸUAbbÛJ• * …âT�º} .¨ÒsÝ­vKzn´iTKvœÖÙ¥ƒ¡eƒ%5­;:|½à¬s%ÒY¬‚‹¢Ø•&£y’Ÿ|y[4l™’ó8Ï�b“½„ò$Pú*kà:ŸICÁPÑfW˘íÖ3m褄v|€—¥£«zuxúi΢øGy*R7Yà×ó‘Å…BÌeW°Í^°$ç:dà K Sw¤>.ºÐÙ¶¤Ë RÁ6"]¸¢IN¡I ¨;è j"×uþ8± eizV'·|t_¡ç• *T( Åÿ¯‚M¸„ÛA§’O‘—Û´‘Y]©$uý5‡ JåÀzÄ:ð QÃ:ûYÁ¾±Ÿ™.Ò{Ïù/gƒUpÂ`J³ÂWÀ}^̲®gÐo+æË‡"Vò´ÔÏ íñÎLñV邹y5…yèû3öØ:ÿ¶}áà(üÏi±Zœ蔎iM‚ŸÏÇ\ÞöK â–­dçý8´¥~§e—ÙÌ>#Ö{ü¥’ãÁ|¿Ô7~a¾'‡?éfg¥Ô=`WóÄ•.3PGpDÓš<Îë4�´¥¡Ãe_òéÆ+ù¢C_ ÔDÙ$‚ÛŽ¹s¡º4½?«‚;ìæ¿ÆŽª *T(³w7­iaÀ Ãð?Š �1†=m*1h¥]Q¶[ˆ/©ÞD4VI C0Í-$_!‡öP"â-Õ[C äâW�~‚|‰º³©/_X’,=<¿Ûê°ûÀãáϬ3Cˆ�QP>‡ì7b77„‘ç|¸ÕÈ9Ôõ¢8ãß×éqw]ñYCÐ�®Í›"wŒhp�¬K8A|NdŸ"îm¸PØa#|”.bEÅL}5É�@H³Q~Á×{%hûòå6ðQL6¢¤›|â;„RÑ yŒ\ætSœ ]acžï „Bª¢"^žý:꣪ÏlDõT-¶å@Ò#bkz4vìÍ*Ý—D( #dÌ:M.½VBIËTdýÒcfFÁ,C}*P8£»ë(ŠßA-.´�Ðq\Ñ ‹äA!žç"§úiÓ|�Üù®"’hß�.®Ö¥¸W?»ÓÌ[6² &–Ù˜rF ªLx™C_r—�Ûo,M¸tÖFdªc@D¦Ý¯ €äOqßM $Ù�gKANLF³Àzà“£ °W„Ù¸7JÊÃ_ }Ž/³KwŠQš—БŠ¥{SÙ¨OzÌÌ(Ø…Éu~Ýã|Ø«zÛì•‚.7µCÀáYë~yy+A�7t¸áö\ê§.µ×ú½šnÖh1EAB!vFAënü¡fÃLUmWM>и峰i<µWKLRõ§½cƒÒþê„AïkÎÉ—Õ}6ÙÛå2›Ç÷oˆ×ÇfYZYð0™WÔ:´½³4¯tæ]H°{Ó t®úäÇL�‚²y½êõÆZÝyðmwv-¨z×h‹iŠ‚„Bþû(8�x�l #ÏFŽ‚öcVÐi#/( B±- ñ?ü‰‰×ÈP´Á>?’ZnŸGN( By®(xÅ�øSsã·€¢  ÊüJj¹}Y8¡(HùË®Û0A Ð$´è耘Zœ¯än®ËŽoƒ¹Û“þ«i’/p¥à2tÁûõQ)x�©õŸüQ)ø;8HA€+»tèv ^Cêç'/´ï>8HA€+÷sáí¼¦"1y¡}'ïä Àš‚]Z°Á*¤ž˜¼Î¾Á¥ )ð¥à¶ ´`ƒSH+3y™}Cü$æÜap(£L*à„1¥•š¼È¾cR‚¤ ðe×ÞM †¡ ŠFNTé&Û�b5ô\ Êc„?sN‚q§à ƒ­Iƒ›¤ÿ}?ûûß86ùöÝ®¥ kSpjµñ^Õ:yù'(Xœ‚Suù‡Aè5Ú#'ï5„ àt º×!›ˆ")K R –¤ @,)HA€XR�‚±¤ bIA@ Ä’‚€ü±[‚ü­¹(ØRA@¶TPA€-T`KØRA@¶TPA€-T`KØRA@¶TPA€-T`KØRA@¶TPA€-T`KØRA@¶TPA€-T`KØRA@¶TPA€-T`K‰Ý:äo=ÈE¨ À– *°¥‚€ l©  ‚[*¨ À– *°¥‚€ l©  ‚[*¨ À– *°¥‚€ l©  ‚[*;÷³ÒFGqü·1”¤0ŒÓ´ùÛ‰ŒÑ$ÎØ¢‰¶Á6!ÆJ•Ä ]I�"tÙE’ɪÏàøh½7.tš)dìÐîù,î\!gù]$!"¦ ‘±˜‚DÄ$"2Ö¿IAgû­«ÁðPˆè¿Â$"2ÊŸ§`¿«íŒ;uYX (¨‡Gâ)ugš—«®,]O‚�–S�ˆˆ’KÁÀó M—e^Áÿ,sª·§Ç�JÁPQŒc¼uðî6žØ¿™HDLA""%‘‚Euæ{Á>2-XBC"=2û¢TkìÅIÁ²:W^v|TZщˆ)HDd „RP«yþ•ÔlWñRPkw±ã0‰˜‚DD”x J°E³7úý÷-KÝ‚1ÒA°9{umÚrUQÜàèA ¾øún0̹±RP‰bõŽßnô‚å #Ú— %J=Èͧ Ô/ðCBc"'™‹)HDd”$SPÎï’«àAÓµ·Ži[hÍWêîÀ»OÁBû] ÙŽ•‚·Ð©—š@›Ý?!¥+³‚ QÊØ�HAé`OBc¢'‹)HDd”DS0ÀX�övÛÕÒµn1Ë¡á8®HÛÃYêx}Ó_Rpé;Î,ÉO1Œ“‚K>J³Oœ´Ü|¨‹\bSDŠ@F”>¢Rp^64&z"‘±˜‚DDFI4·p®Îr¢Ø\=ø"^qm$Ês\Xá,b Êò‡rvñ´žÂwÕ£¼öF”Sý‘5\ªëkl£-r¸ïg£Rð °9‘ÿ9Cæb %Ñ,"­3¯’më¿Éð‘§` é”,j¿£ 3ðŸÉ½†"UoG]›Í"Îô”@¢Rp °Ãc¢'™Š)HDô“�»iI% Ã8~/\ 2rƒAíU›RìEÓ =–�^Vœ^L¡•¤PiÙBú }Œ>àyž1¢±YèÁÝsýÞ­âZÉÇ(3MÁ3\‰ €m��cg¥“k§¿€ØØâzýMkÒüð».#ÑX*^°Ñðž ?É2¡î›È1Z�)¸ Xþ1Á‰LÅ$"2ÊLS°�‘;|*}í¬µ+hßRPê�€‡çÉR°“R"8O¸Ñ…æ¥`-‰c^JnHPLÁgdߘ€‰LA2S�ˆÈ(3MÁ&2"›è®Œ$�¾tVîuacð3;–‚Zøy«ÌMþ³‘Š }Ó6*s­•ÅU/sØ’FÏ‘$×ݦ¦àýc‚&2É`LA""£Ì2S@Nd vÐû›;8Õ'Ú HA%´Ô'NÁ�=Š»5 }¼ŒF:΋úcﬦàþ üc‚&2É`LA""£Ì0.®õ�àH´å•}õ¹�¶(—Àž¾UŒ§àrÕ­�ê¤)¨¯«ÿ]}ÑîÑÐç)ÄÕÍï”Q JAËF;ì0‘ˆÉdLA""£Ì*Ãï=œX¢”Ñ^Rgñ9urðŽä½Û·¿¥à*i’ˆ8“§`´‰]uRè†Õ9Æ(·QÁ“º¨ôœo)¸>_¾BvelLÀD¦ ™Œ)HDd”Y¤`¤X,Byü!žs û ¬Š²ÞïD΀Êùw·=ž‚i‘R¦”ÍÞMóŠé$p$’¨À}»vG)hy}: })誉5`ô ߘ ‰LA2S�ˆÈ(³HA­ÛiüudÄ)Ô€�–x_³8Tw{¸™Ðp<%Ñ�µæ¼L“‚r�õYs�f5þ‘~y\x^pãOA͵ïã Q|c‚&2É`LA""£L”‚Ó»ü™�OÑpT4+’`VÌ‘ÿŠY2=ÿÿD"£1‰ˆŒ2ž‚ü^'2S�ˆÈ(LA"b ‹)HDLA"úÇn˜ WoñFˆHý»)Ž,T KÈRA@²TPA€,T KÈRA@²TPA€,T ëkï¥.à• ph0™ ð£‚Øš Âî ó·¤�¢#À+HA¤ Ƥ ¶¤ ¶¤ ¶¤ ¶¤ ¶¤ ¶¤ ¶¤ ¶¤ ¶¤ ¶¤ ¶¤ ¶¤ ¶¤ ¶¤ ¶¤ ¶¤ ¶¤ ¶¤ ¶¤ ¶¤ ¶¤ »u®YEaxgçbÒhÒtÑ ÒNˆS ¢8!8€8à�ˆ/àó{®e ‰P¥\ ÷÷Åkå¿HK R -)HA€´¤ Ò’‚€HK R -)HA€´¤ Ò’‚€HK R -)HA€´¤ Ò’‚€HK R -)HA€´¤ Ò’‚€HK R -)HA€´¤àýê:=lÍǨzí})@ Ðu þ=9yZ»¹Žcn«”r7Û^¹z~>Xi�÷N‡8þ)­ýÙn½ÿÚ�‚tœ‚Í«�ø)þ—j:FpYÞy8[í.{‹õ¿ è6ÿ5O1f–î«ãÚï½RÊe|5«ÅÍÉOÆ Õò7¥`<–ª è4�š�­3×M5ÚÜ-Õì×S°5õÉxªTëß•‚Û¥º˜�‚t™‚·Í›�/ƒ­©^Ø»·•F’8Žã¿ á_I[�$jâ1‘˜Dãù&Žºê¨;ÎDÑa\XÂ\(Ì…ø ^ù óûhû¯ªNº'Ùž=d—åÿ¹ºÛ®ñêK*]}›ú )xzzÚŸ!k¼[)ˆ~bÿ£olŠ%)(„âßHÁ¨ª›ÀËŸLÁbŸðçS0š½ m®k)¸Cì BH !„èb ®(6óÀÿ,xy˜g5 :Q*Å m¿ ”&²)àMžmˆç5XCyõ� OT¶ryÌ™¸9‹õÀ“Š•ŸŸJ+Cp…ó, „ÞŸíWvF¡ý’Ïç{à�»Ãfws[gÃc½èh­ù¡‘Ptj§´¸~² O¨/?]ɽÔÒíS�-‘6'«�ÀpÏ}Ù¬¹y‹Of½tFË•¥òxžåù�R%·:‹º¬†–J;Ù\Qb·²B,$…Bt3o•RW¡Šb}p)v� Åîütx©´Û (¶Ôø4Ö…bÞÈùc¥­E�‘5eœÁ5øíAY Y7$#,O*ã> `Fy¾‚¥Ž®”ë~Vjlê´ˆ’‡«ÖO®ÂP}Ôç[r•R0LÚ<°ïÿxð i}GäÉ5R0µEÆù6\Ñç Ys3°ŠÄ¢ƒ2 oàŠ…’‚B!º–‚#ŠýŒ¼bÍ)XSn öTÝx Œ)×u*y©\‡0z”gÅñRð§5oÔëŒÏ)Ïôž·J]æÑì3±¬Ôù|�öî†<‘Ùö)ˆ*±oÀiaëvþï§à"¹îâ0²×ä™p|)8@®bÖ±2„�BѵÌ)CúX'XS žÞÖSðÂa•)x^TuåSÕs Êo½‘‚W÷ªá××)x¦Œ+eß�=›+q4Ù'v«L~™$XŽŒ¯dTjŸ‚wî··3Äò0LH®~??QC Ú5YõRð�žýÛ!öCIA!„ÝJAGWÛq/p Ø†—‚ÖåÂäfÜãý )«s ²«ß–n•+rvÿà-VÚóû7Íÿxµ)èÞù\´ÃDs¹s˜Ëåv€åc–½H¼\5òZihR%¶ #AÚÅüÐG»L[6Gi,Çn‰}lŸ‚æç;õË‹ÐâEbIœLO+LOOgÝd�‡‡§¤M†¤«¤Ý}ÞûÙ ËŒØ4s2ÞÀ˜1·8BRP!D—RpL±9Ê6§àÅì ¾ÒS€3,«iÀ©(ã@8¢Ø€” ¹˜ódúÐKÁ)é¥%ZŸ Îz;ÆLK‚�ï-)EßVͻĖߺ.pBì ÚT†�µMÁi1yboԇϵy‚˜t¡†r¤õX·½É*^ Np&HËÃØ$M^>'$…Bt-Ïê±%Ë8þ,Ù³ø±ÉÅAh«�R0aÆ)­í‹Òâõ¤³§u>„ê)8 4¦mMÁ˜7—gF±š¤Ý3Þm³´$±[=+±-xÚ¥`x�X& >Il¶±äü¹M žÙãH=!çˆÝ8Þòo1]OÁ s5ÔOlÇÿ«G!„¤ Bˆî¤`衱·ô£›`^ †aŒ)mV&@ F`¼UlZ²>á’beXsvb7gaL*¶×š‚›6Aß I­ôó¼ƒ&IÒ~A«mb™Æ¢ña_û¼O&“Ñ™�kÒ– •xJ,Ñ&¿Àx&¶ô�6ÚzG‘Ø<ŒEßN†Ø„�BÑ�WlÁÛ_°äKÁ·°bJ‹Ãz �‚÷0NÛ…¯§àœÒ.,¥åÝ<ô�š÷§ Wˆ|z±ZsÐÁi)xœ¾©Ýõ£’MAöHÆcixÄy�‚-¾& �Ûª‡äÚ¤`FŽX¹¾(Ü«jsÒMÁ ¾9±±(„¤ Bˆî¤`E±Ê¦öE±‡�_Ak]±k¸ÊA6“iŸ‚ÕjÝMA‚5÷ý¬]©ºbnme‰M¢.ñmëš\n ŽÜR]uåMçœ<�úÊ'Å8°KløÞ62à¦à”™Â�uï^u7“�±êOÁ5bóBRP!DWRð§+Õ"û:‡ý¡†Ã¿–‚Õê(X ¢v­<Ãhg†X®½IòË@é'Ïn§,DáúDlÆ])î ˜‚»M»Ãœ™Û;¥`?±=!)(„¢+)øEµzö§ ÿ¦0¬ÂwSð· )XUìüÐZ:d'ÁR��•þ¸Gü/™"£«²¸hSЪ}zKu{mR0RXsš×�˼%¢}LÁqb™�—ÂéN)xK, !$…Bt%ïU«Ëw¯RpDiY©«æŒÃ8š‚OнÀ/p ²ÍØâ¤Òªh#AZš³fB+Üô؈+1Uî'mîõÄŽ†&έaƒØ|Àt³4ê½á)"mBH !„èF ¦�•vkÙÆŠ½JA‡L’õB[Rõ +­ÚàCÐÌ)¶ø)˜A çPi½íÖ¼I›…ÖClÁ�V³)èç �–n»Å´Ÿ¹7±C,4Ó™W»ŽvHÁ0i›BRP!D7RpW±Ëü«¼7¯RgJ›«9Hæ”›‚,ãí 3¯‚¦à†É»eÙ#–蔂, s¼Ëì°^ïr_ù,�×ÄN¼Åâ‚—g&Çó, -mÛ+P ÎÛ{"¢›¦:¬vHA<›5W�{b‘P‡ì#-!$…Bt#ïÜöó—áqï«ì¹TÆÃµr-�=™Û?†_?œ‚ˆ(V�ƒ½×Ã(Õ67”VI‚m)¶–jl€sìÓ|B³5oè„·¯ß0ÕS°Bì)6J¬èJAž×µ æÍ9¼Ý>?�öܤ�È^ì�‚yb“BRP!D7R0¬´=Ôm»ç­)ˆyÕПk¤`YÇEŧà¨Ò.VûÝAmS0®¬ÌSZµœÍçLw–ì­î¬~KÞÆÐÎ#i…oŸ ddy6w4“])Úð –‚;de¶á:q/<®´KA瞌ƒû Ù;¥`™Ø„�BÑ�n-©‚b¯S•«˜Xi¤à&©ºýûÀ)ˆ²ò»pÚ§ ž”õÀ�ò+.{ÛNo IÌ4Œ]j¨Ød¿‘_50“dy–ôY¹v)ˆå·ä“E§¼#¶ !$…Bt#Ï;…gÕÛëD´tÅW&�ÞÁKAl\*ëa9ð¾‚Ì,'»*)tHÁeòR0¾¯<‘MïË�—i4ÙÎøÞ<÷B®J¸‘‚ï*ä9O ` ‌F3�S�-ßQÃB �R0T”W IA!„]KÁ„ÒvàI*mÝ :¿Þh lÀ÷~º™ˆí¹0‚§ ›å®ÔŽŸf�N)ˆøz?ñÙ´ì]цçÜpÆæ$O²‡[Äò°²7×|öø>äßLæäç*i‘›—§à0iÅ4<ËÓ…}kŸ‚½"£uSpÈÜ!$…Bt!ÿ$w)Ø5ûao¨?ìÝlöefÓAƒ½)Ô¥k»3ËðÄ?ì%¿ŸlÞø¾¡0^‰�äGÃø!»¤•Ð"•Dg˵ù±¤ƒ?pHlBH !„øO¥`i�Áˆ^*6Žÿ°D†ˆ2aüÍâUÒ†ðIÝÊÓBRP!~gïŽY›ŠÂ C!!”+�¥MÍmAokj© ‡¶. … -¢`WQAq­‹ƒ¿ÇIð_tpÁ¥øS¼iI •n8ϳÜ3}ãååÀÇ¡‚)x³Þ÷ ³GÏnõ�×ZQe×ÏzLQ+ËwNk³]ð-wŽ ¨V n>¬_8þpù­ô¥`D»¿Ùû´Ó³Q»´ÕŒYÙ/Ç¿ìHAª•‚±[«ÿåx%*n»Vº1ƒÜÚ‰Y)¯ƒ j)ùýãúЫµ¨¼þ"ðëlê)x²³rô¢œÿd)@ P¹ŒÈÖï½ùtrúü ‹9Ð;(5cjûoß^Ù�a©í”æ ²™R )ÿ¦ ÿ:¤M $E R YR�‚É’‚€H–¤ @²¤ ’%)�,)HA€dIA@ $K R YR�‚É’‚€HÖôSpóãÙ׿”HÊ´S°õ³ÛíþŠÿÑjpuR€Ê¤ày÷Ëùç÷1J»7�ÅHyÑ àê¤ •IÁoÝï1Æ£b`5Fº[¬ÅPou-€ IAª’‚?ºg1ÆjÑiö½‹‘òf;†:Å^’‚ÌA n�˜Ðz±Àd¤ s�‚íâNŒ³‘•ÿœ·‹¬ÔŽ ‡ ͽÍÁˆ¬‘-/Æaž/]Î\X^ÎÛHA~³sÇ,jƒqǃ]DB… "4&ðS‚�l.np»A|…õtîË(7w*ô5tíTztéõ¥4æL¯¹+…b-ù~@¢åËóäùÀ9¤àÍ£)Øó^�»Rª»1U%û`¨JéÈv/µ#UF°™ �‚€S§àõµj¯ÞêÞü6{­vC'ûdÒS›Ájy¬Úbµ*­*sIaäYïr“º'ié2Hœƒ»½æ½“xÄ»@HAÀ)SðÕóç×÷Ÿ�oÙíVí"×öác—ƒ¶Ãı£PÒÔ3©ï4ÔØ¥”¸/m½ uÀU­põåI J`§“¸˜9–&¾”Òô¸<¨$/Çñ>w!¤ à,RðSö]-æ3,{­�6†ªõ‹en:è-]I'[iæ‘¶Ž¤µ×’ʼ¾ã”q2)8“|—Ý~úü¬-Á ¯?^ÁEØze\^ )8—Ôç÷Yö]þS¤ tÊ_OAiôf!ÿ)R:åa ò¿t)�B   ³HA¤ t)€€Î"�‚ÐY¤ R:‹@ @g‘‚HAè,RøÁnÛ0QÝ^°%\ƒ.溵;0$þ{ñ0XA€XgWpß x+Å V –¬ @,+XA€XV°‚±¬ `bYAÀ IJ‚€ˆe+Ë V –¬ @¬[V°çõÏè®Çls«ÃÖ¢ÏϪKõêâËμ&Çqÿœ#Æ—¯ƒ¢þ¾ßç9¾A”‚˜‚DDôO§àû»wã*Qy‚¿æÃÝ—øY)¥Š°ª‰DbgS­*mß½Ù…_´§² ` Sðo¤`_Ù"¦HärÇ—SPe™‚4˜‚DDÿ¦à/¥àJnU÷àÊ:¦Ù¾”‚©½S�æS�ˆè¿Âü¥\PÝT¹+SÐb Ò` ýWþ| :ÍÁn뾉Œ›½èÂY &£½V‹N3Óµçî;‘n¦ƒd³¹ã^4ÓkL»³;N‘n/zÖ çèù‘³-ì´šñƽ.¬P;Þk$ƒ)hÏ:΃k¤ j?+½�K,MKÁTZÛ™¬¯V1Q­†S©ª>•^ÛHoªoÎÞK3i6¦ ÍG .TÄÈ?‚-ØW»“ŒŠV[„Ñ)‹æu”Ä‘¨'R6iXëô~tO¼CßL@kùr¾""£²^�‘#hI»$Ÿ–‚s±ë¤`hSm@[ZQÚ~qJ Ö•–…µ©Ò0Ò*œª«•TVi $Ô;XÏÔ3¦ ÍÄ$"¢9_|þü®Tâíq¦n›ÂÜ�Šégk£ÿDÓ0‰ˆèNÁïnäå>´PZÒ—±}Õ¶)(]q©%í¹©º’ìbQô`CÁxàK2˜‚öÀ}‘E 7` äÔä�ÂÀÔãPôÛ§òÚX¼‡¦`Ðå\UÇö&åWU›aXÛÓA¼£6ØÒ NÕ•ê§ ¥Î›±®>‚è LA""š‡|èË…•=qq.*eh�ÄЕ!Œ¤äÃ(Ið%ŒŽœâ\MÆSR0 ­|ñ"cÓ–³¯iBÑ•¸%úÁ‰ƒ€E×u�k¥`N½Ö—U Æ+U�‘‚ö@@U¦L ¦¿OÄÂŽÕ6ˆfc Ñ\¤ žÊðè „‰-i^LAׯ¢€]ñ\Ë—C”¤ xy -Ol-öNÜZ­ ­` æaT&…n”¶jµŠ©ÀˆéÁ¸ôÌ5ïë=y×ò¤‰k ¦à3ÕÒjyÅÚT³SpMíØÓÃÁ©ºŠ]ÜŸRËûë š…)HDDó’‚#)<�ÀJ+ðg2wl žˆ_þ¦ƒ’Œ')x([z"yo4ò¥LAïB Þ.‹F#OFç)˜1)x€¨ä϶ÿ–|­^EµœýæŠ\R±B1µ„ËS�oƒ‹êØÐ[ˆfb Ѽ¤àWöî^5‘( ãøS§/‡)¼„ÍlH¿…W`�"ÁJP¦2 a qƒ ›  )Âú�‚dÔ1)‚A¼š�3F Îa‡Å4&ϯ˜â0ï8åŸsD,ù<qwÉv s æeŽ¥µ¬‹S·”£Rp"WÇúá¬ë¥•�SðLå€#ÕÅŠ1Ws×úSa <,/Åv/êˆþ…)HDDÛ“‚Ú° 5ø®$ s ޤaNA=4‚VˆHÁC¹´‚ç†S°'ÎG¦`ÊSç@K%B)80§ nÄ�j«)c ¢¢J- CQ˜‚DD´])ˆ‘”áëÈÄ2§`_œ8Ì)X]$`O"R0)háÜq¥�¥Í¿ .© ˆy*ƒµ¬ëšS0e'Rž�VSæl©®_ƒ0*¸nD>¦ mK $¡•%_üR-½Z_OA”eƒoÿv=gú‚x5*�E†$œ‚èH1xï½Ñæ)˜¾;rúny L i[eŒ)ˆ± ΟY› § ^”g§aäˆ<‚Hc Ñ–¤àP óÚsQÜ´‡S)Þt®œY(÷/e’¯å«R^OÁ¶H1ûüZ(F¤ ÊâÌjÒ0¤àNQœyç¦qên˜‚ºžR‰&´Ø“JÜßåÆž‡7~$>�R•Jå§Jø×´£àïDBSál*5S�"0‰ˆhKRp·z*¾b ½ªø^û‚Ø»vqëè'6¢Rð !"n¶mHAIJnðÃ�¦ ²OÆ•4¬’§|Ý– ¹®­ÁŽàÒ ´ßžJÄBSáÔ7A3¾eDS�ˆˆ¶$�Ãiò;Vâíé>Œb½‡öžñí¤^�v<íY€™u8íï⣥¯3é�œjéd4ª‹”A´À$"¢mIAú÷ª³¼HDS�ˆˆ¾h –�wæød¬Ô�m§a6‘ˆÞ0‰ˆèk¦ ûÎ ŸÌ™Rêfß�ˆ˜‚DDô5Sðs+ rEb S�ˆ˜‚DDô—Ý:äo=ÈE‘ *€ *€ *€ *€ *€ *p¦‚€ l©  ‚[*¨ À– *°¥‚€ l©  ‚@ìÜÏk"gÇñ[KX–/Oç0‡zLè?°§Bî9ä.Þrpñ$8¸—Ææ1 ¢ ’Cê�TKˆù!²ÉÒ�Bšú×ô™gÆÕ8Sµ$ÙÖÎ÷upœ�>{Þ<ÌæYœ‚Œ1NAÆó,NAƧ cŒy§ cŒS�1Æ<‹S�1Æ)ÈcžÅ)ÈãdŒ1ϲûúʇ©/>¬èœ‚Œy§ cŒyŠõØ_™°Â)Ș7q 2Ƙ§¨ÇþÏS?s 2æIœ‚Œ1æ)æceÊÅÊ3¦ >;«a¤7óÒ,þž¦ëø7iºi¬NÏNcl¹œ6ÆIa)‡!4 Ïèé?¢år`“‡S�1Æöõ)Wúó¥à¯ß¿‚‘ò$ùÐHtÐÏG›m'áÃËØ¡œÜGøÛ÷?a\a!Ö0Ò†�6ÐsÐg³Ûâ&+…팬m5X"Áø�¡Áº¬nâœlœ‚Œ1æ)})¸ºZ™šª|»ú‚)øŠ’:LË´àc‚L…·.)¸NÒ,óÄtÅ ­)�iU꺆)Ý¿ôä4OÒVCå#å?•ˆ(‚st·ETX&¢ HïÕýH·Ôµ`¥àIë0MwHíLŒÐ™‚sjLc¤ Ê€É1E¿0• —Üí_Db”县h¥`<*Lçuç®ëĘ�büBýZ¹n^�†íÙÀ+õK¶¢•‚kêö9{éŠ�Ra<:Ä)8Ñ8cÌSúRðõëoe¾~]yöüñ�?~�’¦3X�u`ón¹Ú8«Q~Ú™‚ Ÿo§›‚gD­S_¾d…V¾pqߨ»U;o«U%ªÒ'ëLŸ/ݽÇR‚vîï7)ñN¥`)ß9k婿LAZßËSéâ�nÍÿP’2ÕÓJ’ö„ªÕmV%]¥àÝV š!j@z dà4�¤Žs„Òïü9~ žŸ¡ÄÅ®zqþÝ ‘�G£ug kkݽpS´³ÅTÓJÁöñvÑ(¶EYô`0Ûò3 )»YyÃfÄ%›©b¶-üa—bènëÁ`\\%kV0æß.n4åµ�Áq Ç!){~›8œ‚Œ1æ)ý³‚¯W­�gKA'{ÚìåuKÝ>܃eÓ}qš|Gêbûªù½w¾+Ø�ëôšŠµwÖ¼áD‹Ž,i¸6Ͻ¥i C;�î)¿à|W°4¯6×Vhžø$KÓ1B‹#G«[5§•E@D·ûðÈ™‚ý{qq @?¶.Ž@9ÁÁwµ+±f�ßvIÁ+@JlÛ³�öì ó]A{rð€v,äb"øø›dœ‚Œ1æ)*mkó’)ø •´h=ézh .QbRíQhè~x &èÒ)•T Zå¸E¯¡v TÌ!dh3$?Lwr¦àComÈ2eìaŒÐa1“É„0–cÕmYq›Ú;ž‚1•`ØeôÄE|0‹â¦H4ª9SpRP[)j¨¶áLÁXo‰Š!ü:¤mqùø›dœ‚Œ1æ)/»lÄ)C{ª³0ÍT:µBa‹Ö‡¦`ˆî`jÙ¡µÔzÈ IªMÁy¢iH³DsÀ;û¬4…)˜Ôjô”È(yª8SP}=£€}„éšÖFøÛjðHläwÛ©Ô�¸š‚ZT„!e»ËFö�.S©˜ØLAÙŠ)¥)êÎ4¬Žkö&"oDÑ™‚Öלˆªp<·�_=>Ä&§ cŒyJ_ VVÕç˦ �j@Ã.§j‰(w—¤ÎÐôQÁÞß´z‹òªí MÁ%¡”¨¡–� OÁe F'ðQbËæ’‚�^ fìT<¤ÚÀŸ""ü4¿ˆ@úÂ;މã¡)BS§[)Xô‹hùøØ/ŽSðHÞÍf8Sð3$]ˆ°5 usýc2öy}Ó†uá|ˆM2NAÆó—e#/š‚3‰Ä ®©é]‰,�HÁ=J÷½hX¥dU�‘‚Ÿ¨%A'ã§`•îÐ54kt¨Á×Fø$ç¢ø¥¼®ÄF€1"ÃBè½ #M±Ÿ°íLÁ]õOîü¢)'DRJåéñ‘)x “Á)øÂ)Ècžò(å´à·/›‚ªÔ´<½êÿƒÌ})pIÁmÁt­Îß¡ ˜¶F¤àÑ‚ŠO¢ÅñSð„’ã¥à:]ÛÇ×FøªïÚâÀ~éNSõÕ—‚m—DSD¬`+÷‚ Î<—CR0kÍ,úa Š”V‘)7öñNÁÿNAÆóDz‘ÕÊ˦`•2§”†©e%àt^m­”긤à¢%HiZ+OÈÚBKЬ[ Â~™°JyŒŸ‚Ó%j _‹®]Sð‚naº¥@ߟ²‚X Gýᦵp7k'`[míun)øeap¹·ÞX�É­’EX áÏý} ÆÕ=í¸Óüу^ÿâÜ5ëÂé®h�LÁ�R)6 8cÌS¾ö²L'›T�ÉGÉiÕÔ�e�¶Þ;S›êË=©Ðz €Å‚JA{zÐ5[”^fÒÔú)ˆCJ¿Qÿ|{�é·œ+Ñžqr¦o„ONA\Š qÙ}°®úïKF¢Âp¦ ür•"~{VЯ«"ì¦à†ØíÝûÈz«0ˆAòâ�³ªR]ßAØ"¢qKA¤Ô½?û…12kD°IÀ)ø{÷Ó¢DpüWáE"&å‰>ñý”\oe³«Ç;}Vx¢OSýbqÇ×{É”µQ®ÇôõHÁÕA €QþòÓZW©ŠŒí”RÕƒ=5ò.W«*Õ»Í\Cy[²ÿ¸1­­‚Þ¹³í¦`x{Ð<üðÜ=å²ÓëJEi•³2O J8ÓTÚþ{ݮ敺êKA¹nWpÂ{“§àÃW^ƒ%Þ[:ÈÊÉ£ e;)+æLºŠö�–nÄÃõ©“ôN«ñÄMAiô[î‡ç½”¥õãÓ^ùâ~BÎÑ×ç{õõW–Õð÷^²£OJeC¿OÁ�RÁ2 À(G)¸}â×Fæ:}pIfrávD\Wwo_”™DºÝˆÌ-tó {n–ã.\ùžp‘î<Ø‘™$ÜWè]ÃÝñ í4’ ñ‹YwôÝÜÿ¸«LÏtç�°üžÎáÂ5Á2 À(“³‚ç·íÅçžÄ °SÐã¾¼@Ï”Ú,RŒ2嵑•OÁJaÂHŒTŽMøp,Cã-ë®,Ò¦ª® –)F12›†b¤_R°s,ËÎoêS{K°HA0ŠöÓ�©Ò+›‚ð+öâ‰÷êq�©HA0Šös�©r¤ ` RŒ¢‡ýp`ª )ˆ£ØÃ~nú¤ )ˆ£8Ãþ‹€Ï‹S¤ `"RŒ2ösþ9AR0)F9öùtÀ“Î…O‘‚€™HA0ʯþ·G †"À(¤ RŒE  ÀX¤ RŒE  ÀX¤ RŒE  ÀX¤à‰\L|!À*!À(ÿ2×ÖÂòg…ç¾Ap-(3 }‹F£?X%¤ å¦àÅhô»©å¯Ë¢•Ôi™Ïçès™Ù÷èóïOo °JHA0Êÿ“‚÷Ôü)xãÑÖ|)èžµ�ÔüdçŽy“ÃŽ?‹ 1æ5÷œLº3tgbs1÷\X$·\šâb„˜3qˆq±IB+”ÁúQ|yÛ ¯VÎÄ»ÿoxáòðPºý-ÈR åpR°¾Š%«P™SÐný�üâ} gHA(”ÃIAƒþ9R å@Rpw7÷ý{2~ݘÈÚ±?‘'õ†_J^íäžÝœLÍû~K—¾QGÉoÔŸØ´ûýcg+5rS°btD ¢`HA(”IÁH�šX'Z_ªŠ1ÕvM�ÞÝÍHŒ÷Ú3çL¨Ê¶£ä “t­;g+5rSð‘}M·X�‚ÈR e?)Øï‹å÷äÆñbñN6Þ×jÑM ÎÛõaG5¶)ØÔ•?Œ´ç¤ ?Ž´54*²-Òh说iS°œ¾ŒýÓfsêl¥GÖùârç|xå= gHA(”½¤ ¯ÚOÝþ\ë&GöæÔ¦ .×Uèd+oû«¿ íÞ··)x¯$k§ºÚÚrFÖÎ)øÕ»: gHA(”½¤ mÀ͹K .Ũi+IÁi’o« )˜d¤Ä&Ó}9[©‘ë¸Óéøò çg_¼Åò†€BÙO Ú ´%¸S 6nzoªMI°“!{úRŒò&+/ÃQ¯éÌÙJ�2ZxW—ŸÊä )…²§_�¾ì–‚õt v%¹šeHÁ¶ú²Ø|ÐV æó®Î�­Ô(«ÊÛ…w)@Þ�‚P({JÁëO‡³§` kC�2¤àL/R)8Ó“g"2qRÐeóÜóž �3¤ ÊÞRPü¾üQ jEŒºŽÌ¹Ô×bÔ~—‚�ä¹Jöâ§Ú-Û-'�QFo¼Wä )…²‡tdLÁ‹dzjÎö”ÐŽ®¯]¡žˆqaSÐ×ÙæÌ·¶Ü‘ûÄ|Å4 †€BùR°W7õIòîÝ}‘;²×Qõ§¿•Ì+س)øLujŸOçÛ[×#R  ˆ#ka¶µcÎØIÁA5Â@—bT¬VÁÈŒ¬û�6;ËeI¶�h6¢`°NAéh°|ÝÒ‘Î�­ô({ ^z_ÈR å0R°¥?ÔœlÇ�ª†eYóÍýÁ;²Æ£nSµ*ÛÊ¡ªvã¶MÁ£‘š­F¬sgËeJÁ3ï›9C @¡F þŠMA‘ñä:öªñ¤"»¨NÆríÙŸ,g”Õ+ïê윯™F¾�‚P(ÿE ¬ó7o "gHA(”œ¤`'HYÉþT^< OHA(”¼¤à e)HA@Rðq+·!¹MA¿C HA¤ €@ ¾³[ÇD0 „ü»®‰.¹¨  ‚¨  ‚¨  ‚¨  ‚M‹‚¤ß¨…™•³³A`NïÅ Yq»~–‚Å é §`“¢8×§ cŒm”ÕMÁbê1”]!ý„ÒÏ+B?¢ÒƒtðHHO 8O…òÒ‰˜º£^{)²çÔö¯ò¥ç%ùûÀ1|,亜–‚ÙIr“‚¢—Š@½‘»Ô(£�§`�v’~‹¨†™ªž‚EŠLyu#ùüLH$lRJì$‹Ž\y€ìg)8¦ §`½L-p ®-NAÆÛ(+—‚¯~üøe«Óé<%yu ôr¹g³¬ ßUÄ×Î3± Àb×qŽEåžê¶âÙÞag÷jÒé¼;’ `ûÁñ^Ï9®T“¼ÛÝ{*^߉“$_>Ê|ÂAêÛ�_˧`71ϧrZˆy A¾ü¹ÄHÑF¤`Ÿú@!Š«ÔÀL™üó)hÓ>`Œ­�1Ul“­¥à¾ºg“—ý¹¼CKA}a@íA<ð ˜?Yl 3ˆk`ë…S�1Æ6ÊÊ¥àý»‚ÃY ¾Q³m\�óD~’^¨»pÄ#Ò–þ]Á+é½cqªòî¥!?=N„¼ý&íÈ’xM–‚Ë3÷© Kd H“h´ÄHÑF¤à€<àÈíz4˜ Ívþ| ¶(V—°Im(…ÁÀ"ˇ–‚¨·Ëæ„Âd¿ÛÕSP_P" 1U¤h¶¾8ûÍÞý»¦ÆqÿÌ¥”‡/78tèšÿ S¡{‡î…ƒn,™<ž©‚ˆpÚ`£pu� bj0Pü‘‰D:HÉ_Ó{î•Ûdåù£Âõ =OiWqœçÎ{mŒe Š�0¡¬Úš…–‚ ‹$ (-ÉÇÃ[ŽS�1ÆvÊ�‚9q‡EO�ïJB|ÒSðZ½p¾2¿þ¡´;² ŸK4QY” r£F!}y@\¦1µ„��}rbÐS0N�ÆØ²4ùá.-,Ó„âþíªª GФÁ¨ŠPÄBkV®Æ˜�‡·§ cŒí”ÿ ¿Š&–ŸÓâj9ßÍ~‹ðÍʼ„RR—­£eÞw›IT÷ÓÉŒ…ôQd Ö‰.€°½>ÒÄÅŠlIÛOÇþw)bɈhD]K¥àÜ)B ‡D<‡|<¼õ8cl§lv VÄí¯Sð\d^cÙ�øߥø†À¾¸F+S°Ï ‘~ºÖÄÃ�.ÔX×Þú5 é£èL�ÿßÉÄ쇄´T’Á¦îâ–aøÜpUJu½’ 6Å©«Ö&|Š'\()Û O©áï�:îÕjµs°MÇ)Èc;e³Sp*rÆ/SqóCîÀUž×™ð¤÷�øô ¾÷B\¸+SPÜBí<Â:)˜hPs6IhuÈŽ…ôQt ¡€¾ÿ‰CJZÐSð~tJf @ð@k@Iíe21“ê?¾Z™Œ¾ðÔ‚Ç6)>ÖüS=!Ä>ئãdŒ±�²Ù)x&Dæ`z Ïy.—«ˆïóx9_”ÄuîÄ›œˆJîä./®gø4#Ò…éô‘ŸŒ™éÉ�h®LÁ|úîCAÔzk¥`›d2P rÌl·Mú=Z¤�ŠÞ’ɤþ•¶IƒÔ€ÌVpªk&}Ž–‚Ö˜’©¾¤,<$'ýö¨CÒÖRY’£T’&VD j M9øØ�cŠDÉ™§à¶âdŒ±�²Ù)ˆ‹JF¨hSÙš.§ öÒjP9°ÿI(Ï1Ók–¼© ×MoPûp¶2ßyÃüÖLÁPJ¹CÔ)G�–h£*Í8дºDÔmÁcQ¨«¥ ,GRøRé~#ØfCOAdM"鸈HAmáH’G¦Üà»�›@óYˆÌS°MÇ)Èc;eÃSð¡b½‹³½°ÜÎ.Î~r§÷·=:?±·ÿšaÛÆZ£hVÑÂC¸Å!B »jÿôªaÑýÝ…n«Xx€œ_À6§ cŒí”ÿ$×¥R�ýe×¢ô lãq 2ÆØNáäüG q¶ù8ÙwvîØ`€`êLï$)î'8„7ÅW¤HA)xÈÿ�÷á~R E nsÞ�è‘‚€È’‚€È’‚€È’‚€È’‚€È’‚€È’‚€È’‚€È’‚€È’‚€\ìÜ?kqÆñ‡t“RžÁÁÁ ô t*¸gpwrëî5¸ôp¹Ãå7 å ü3HÇBAŒMëÐ×Òß�¹¦Íé%%ý£wÏg¸@îc¶/ ?EDrK)("JA‘ÜR ŠˆRPD$·”‚"¢É-¥ ˆ(EDrK)ø�”ßEˆ;¥ ˆH®œJ V*%ü¢TÂÿV¨ðhŸ^ˆ;¥ ˆH®œH V_¾ü†_8<‹{…§êÛ $<\wï~çá¯××ÿ?_E”‚""’­œÒÁSuù÷Sð"'@)("’+HÁgÛžª¹ ”‚"JA‘ÜÉ@ þ!JA¥ ˆHîœ` ¬Vóuœ‚ÕÀX"T²‚ãf›Å‘bÐ\Œ.ªX3Tç‹Fü*£Öpl•™F|åMëjSN_%S°dYVM)( É•ÓKÁšK£q›‚sÎî®rÐ"ùÆÅ€†Ý„ñŠÞÒ'éM²<†Öˆì^;³è–¤®’)X%ÙP J(EDråøRp8DÄàNýææ=v\ºkK{—‚�FëG ²3òè¸â*üimö&³q›£(ê|o;_x¼Œžl³?ZN:+Dæ�†wÜ›ýͦKûUê*r}óU)(™£É•£KA‹Þ}MÚÐ+è3q‚¸J¿ˆ�ì+€-û·ÏŸ‡QÇ�^“õèµ�ŒBòñ³7.¹EÚ*¦”ÌQ ŠˆäÊÑ¥`Ô€ñu�>?Âö¥à ‡·{¬¡Ls ­iEQwqwØÄ¢W<ða26g0fô‘²Jª÷z=K)( É•ãKÁ¨– Á(îKAhr\ò5Ú½ˆÇqu6B.­pì±7z±/kdF…¬¦­b:A,™£É•#LAX4†ØÏ¡…PûP ¶€KNÑ íÜŠRÐû)ê0ñI:ÍR"¶ñ\)%Ë”‚""¹rŒ)xø¿ÃÆŠ›G¥à„kÄQ‡òhë‘n"—ô±9=¸R J–)EDrå(SÖ‡ôvÑVà)8e;%�âÄæò~ VÉse²~x¥” S ŠˆäÊq¦`ŠN|0ø�,ø ÒRÐèò*ql¤Í Œ ½”•NK†)EDråäRðŒþP<”‚¸¢û<úö‡DÔ-§0ê&û)¸ [Ê.)+¥ d˜RPD$WN.Ñg»ÓrÛ~”‚µN§Ó§o®‹û)XpÙÞ^ /m?uc:ã­ÃÕ9Œ†Y;ì™kT=®‹½rÊJ)(¦É•ÓKÁb‡¤8Q ž1æÜOA”Z>�uòï{–ËP÷B]Æj=½ç8¼ÒGLK–)EDråôR8ŸMñ(Å7›Ù ìS æÁ¡wSžÍÊHY¥HMÁwŸ? ßÙ­c"abÁ€,×’�ÛûDEX� ¤ìXÁ-=÷ç°:HQA@²TPA€,T KÈRA@²TPA€,T KÈRA@²TPA€¬U+¨�ð—  ‚€  ‚€  ‚€  ‚€  ‚€  ‚€  ‚€ ”©  ‚Y*¨ @– *�µ}�9Ç/ç< ‚¼ìÙ±jSqÇñ3‹ÃåСƒ�ä3Ü'8îè ¤Öá¨2t QC1Õ¡ !Sñ�¼µAã Üÿç3ü8�ð…Ó§dŽâh´Xƒïzq±ÞÄÑm^ èk n®šÌa<×Ùù"A P@ ÷™Ûc Þ×yµX¯r.A ÐÿgÝnŽ)8Ï}·³l†R¤ ½OÁÍò:F¿Sð¼ÎÙÏ Ì¥)@ïS°ó'ǹ=ï¶ÙæT ‚ §)8Ûí†'Rp�·g‡z™‡xr·k�‚ô)�HÁeîg½ÈUR€¢Rð"÷1ÚNcœÍYR€’R°Íiì›ûÇ @ PT ®óa�m„1HAŠKÁA®V‡³ˆË|@ PT n2›qDÌó.)@Q)“ü�ÛÄ¿¾ÞÜÜ| @ ®·)Øæ¤»ÖYŸŸJÁªª^  ×§l'“If7ëˆrrq×äeHA�‚ô?çùK�á´É¬/ã”UõúER p}JÁ¿]Ïîã´7Uõ9)Pº>§àÿ}¯Þ½ @ ”®È|^Uï�‚Å+2?}|û,)P¼"S�‚HA@ M R~°[Ǩ QEg ŸZ�Và6� . Ò¸1†)Œj£B¸rR‚ÁÛŠ¬×i£NñÞ.¤%)�–¤ @ZR�‚iIA@ ¤%)�–¤ @ZR�‚iIA@ ¤%)�–¤ @ZR�‚iIA@ ¤%)�–¤ @ZR�‚iIA@ ¤%)�–¤ @Zÿ>Ÿj-ÒÔ¦R€5¥à&â¥ü¨›ý¥ß>ʰýt.±+€`�)¸�»q(‹×6f)R€)xë>OCÿݹ̮mì†iŒ£)ÀúSp{]î+n÷;.wˆîY ‚`õ)økŠqÞ¦�Äq’‚ ¿Ù·ƒ¥Â0ŽÃï:Z^\Ì¢K꼡•0rv‚‹@«…Ñ•X‰AŒÖB��Á•tGy”‰hìÎ÷<‹÷ ?8ç ”œäðt¹¹9Ýz“c)R€–¦àl¿ïÇßÞž“¯—ۈΡ»ÈC\ìöÓ¤ mJÁ­7õà4‹Ü7gõ)—HAŠHÁÎ1GÍŽò!n7ãdÝ @ PB Þåñ¦ÙiŽã¡¾oR0)@ )8Êa?«<örá1HA IÁE.o㬗Ëå¡1ÉcR€ö§à$»ë¸XgžŸ�|Ì]R€Ö§`¯îâÑ0ïšÙf/žú1ŸÏ  ×¢œÕ›Aü1=ÿ5¸Êî͵¬ªêUR p-JÁmn†ýˆèr8ÚÕ9 )R€RðQ?Núã:³;‰k¾TÕëHA€Âµ(Ÿx?»�ëÞTÕ÷¤ @éÚœ‚ÿ÷«úð2)Pº"SðyU}@ ¯Èüöõݳ¤ @ñŠLA@  )P4)HA€bIA@ K R XR�‚Å’‚€(–ä7»uP„0píP§ èA Å'‰”D@ûLnºU4¨ @,T – *KˆuÕ ]*€ *€ *€ *À-+øx èPA&«àoŒñ. C˜¬‚ËgSAhRA&«`ÕS¡GPA@PA@PA@PA@PA@PA@PA@’©  ‚±TPA€X*¨ @,T Ö=*ø_×oçT€�½;6m Â0:±c‡.ÀfsªHÑF.BÁEâÌ%Ö•âÈ`ÁIá²ì¼WÅÇ0ðOž‚™R‘‚HA@ 0e ~g^8&˜,÷uý—‚o™í=€cR€ÉRpk­­ñçâ(OHA&KÁ{K¶—ŽIAæNÁ}»ð€`îž�‚HA@  )€¤ 㤠0>)PФ @YR�‚eIA@ ”Õ/O_§�'Jé—‚Kf.ŒM ”Ò/?Ï×[�ƒÁIA€Rºþ î¹04)PJ×üÉ-€¡IA€R¤ Ê’‚€(«s ® M ”Ò5Ïy{ `dR~Ù»cÛ‚ €¢;&  €CS… rÄC„ä쀀�.á(Åv`$KvZFž÷ªøZÍÎ@)]Sð}ŠM2“‚¥ô=<·9MÇý¡iIA€Rú¦àü<†yAÈL ”Ò5gÇ8¾Î�—(¥k ®"^�™(¥k ¾Å©©IA€R·bzœ&Sƒ�Ž(åq)è d$Jéš‚‡ØKAÈM ”Ò5÷qiW§!)PJ¿ÜƈUû¶ˆØ HF ”Ò/÷Ûs»Úy„Œ¤ @)ýRp¹žÿ,ÃíS²‘‚¥tHÁß]Æ]Ò‘‚¥Ü!�D ”")P–¤ @YR�‚eIA@ ”%)P–¤ @YR�‚eIÁþ†µ;+ä%Jyd üÝbñüiÑþð4Ü\³å—Y»¯c¬dõÁÞýë¦ Eq?ŠÄ‚ªè :t�w¨Ô={&¶,ˆ`a b©¢F,‰„�P–(DVPJ¢ª\ÉR…c×l?J¯m|‚¡ÍR§þ}Ûqîq2~e0 rå¦`…Ù£§8Ò1­`²N£bÆéŠ6«³´n®ïÑ�Ù%€ÌB äÊkNÁátÚ½“‚;½îcR°À!ßM«Ájþb ²GOSÒ¹I™…ȕל‚RíN VEû‘)˜¶Î¾A©ô…ô̧vÜ);�]HA€\A Ø—Û²É~ee >'—=È.¤ @®d$ß4®¨tѺ¼ IÕ¦'uš»ªõ[»Ûñ;‰ö•ÉÕýüÐh|í†ô>%5yþú”(R[V¡”–‚£¦ã^a~¶^Ø[žjªT5¯L•B“"Z¡ ‘TôñÐdR W2’‚_Doû“�NÂºê ©]£�v "»$‹Ú|õýŠÄ�”¬DXŸ‚^²÷Y²÷SRÐaÉ›¯¶)b³·<åpÁbI§ïÌq;ì¨?�aHA€\ù‡)Xuœñ�ìõw[‡5yÉŽè'g�( ©%Ž.'“Z¯¶>·‡Ã]ÑJW³÷A)¸Å\•»€}«9vÙÑ–SpìyÎ<«>WãžõS¦صE=J÷EˆÃ Irsçݵ8Ú‘»^\TLKÁô÷ *JÁ}æ‘Üúþ(Ž9‹bzÚÄêÀc—–§fƒ¤·DcvæÉX¡�‰�’�lC äÊ‹¤`Cˆ¾Ú¯JÁ ÅÞ ñ�B3ÑP)(=%«Ýn·ñ‡Ô¢| ؤÐ7¶×§ /°åÐò”£¦©¤ó–ÜYì& Ã�‚¹²ùT oW¥`‡æ.D»9gQìu¦“âSRPYŸ‚eæÓ0í;Âþú,úü�hŸý"-O©{Š*yñˆÉ&dR W6Ÿ‚ªU ¦¦à!ÍíŠö§¹³è†ž¢}°µñ¬3ï…á§'Ö§ ™aîYaØ-O9<¦DT‹#ÖKIÚ�aHA€\Ù| ª\U‚*îbC1£W­°‡›NÁ&s1Œ8ƒ”•)¨>*ÚáÑÒTtZ±Ù €ŠY¬@†!rå…RP½:üçü,:t_ý\œ“ôKœ‘´{'ž+ÖÕƒ¾‹)XOMÁ’lÄ:ë%RS+RÐ`[»íÉs‰² )�+/–‚ÔèÓ_¥`q .HQ}8 i*~�ôQ­¾3J”Ú¢üø'ˆ«~yÛ´Èáo©)H[ñÍ>5•ž‚šÎÞíïK>× »�‚¹òB)¨ü9éRF­|%iX&©%~Æ·go‰Þ ÔêºJ|'�MÁò©ßà«êìŧ“˜3Ù-§¦à;�ˆ–¦T ªfôÙ „ÉdR W2˜‚ÅCѹ¹ìŸ·$u:Ç­V·—ÜNG nn:ç·«o„8ì$ )fÇ¿Nœ‚ìè·ßbøl–é¨`Û÷Ù·í0å<Ó4u¶å¶I!]N-M-¥à³_¤Äˆu�2 )�+LAÒZ!ͦ$w„tT£HCþ4˜ÞY­MgòÌüøì§üñðdßq=•jK¾ÛT'lŸ£Äs9/äé”)•‚ŠÃ&->F�YHA€\ÉH ÞSÚ»žl'Ç[�ë-�æv.&mX¹y:*>㔦óˆn�ðÕs�eHA€\Éf þ_¾Ýk¿@ß#€¬B ä Rpô²¡³G¯R W�‚0³‰O„×)�+HÁ 3\Ó@ Â+‚Ȥ r )¿Ù­c"Bþ]×D—܃ @²TPA€,T KÈRA@²TPA€¬Ï j#ìSA€T KÈRA@²TPA€,T K�Ý:&†Œ·Ž[&FvîšHèTÀ dYAÀ dYAÀ dYAÀ dYAÀ dYÁ·Ù³¸ä­°‚)¿¯àaÏZ¢Ž?<ʲ„G9ìÐo°'aï{ð^xÉ)Ð�S… BkÅ�� möâ!Ô¥TX’b¥T ¥x({õÓlfR‡ŽNÉ Âú~+¼¼—ÿèõé1ü/)žÀŠÛ Ò0–“: X½t$éGÃØ-Ë Ï‚B”¤Ý�ØrÙ÷ÕÁNvÓdÃÁN †°†±t†ƒ °ä Ü*9(·¤¶�T¥ !„l•ª¥à}ï Ö�ïNÁォ�NÁ¹�ÜrB s~«l$éFqq:îRtÅS}ä²�Ç®ñÔƒ&æ.¼åÙ˜K•oÒ„·Ì6æì!pM,%åVÉA¹E)Xu”‚„²Uª–‚cCí¸§ç}x§Cãô£S0ËÒkÛxÒ�C?ˆYÉH¡Ž¼%b¦OAk��Œ-qi@ˆ�!K–ˆ€z�KSþYWšö$aükÌá�™�íxÐÇ®lMÛצ`ŠýAö]žkÈ#,Š€ ІB±®;h®vq¯uEFè»Phg]] º¾ï‰ì‚øˆA¡;¨nm>¨nQ V¥ !„l•J¥àŽã4ŒNNâ)ÈÕ‰Vùj¾:$wèµÀRPs¯M"žSØ]Zòv+d£…oDö¢‚KZ©�ÌR �MØ{ùB~J³�Ÿ2bͤ aÆ^¹“)ˆ‚˜bÇësqJÁ·þÅÒ›¨ªßÄùm~m¤B«:6:Dݺ*�Žnİ‘6a“º"E6¤¾M)ðÔÜ«C3ìèy®JljLÁ€� ¢gçy‰ –‚|!?¥YÈO±fRÐ0 c¯Ä-Ç¢z‹<ìú(ÚP¬¼xŒ�¦8ÛŒ"Sð+|Gâ Ð;|B”-�_j,¥ ÇKëF éS°B#kû¬ß¼K§ _ÈŸt­¬¶Ûí1ŒX0)h†±Wâ–‚¯EþÕŸSðR¦ðÝ?{  §Ê/#®�à{€k}xÙŒNÁæ}àc^<ÃSÖA H U] ݈á#} ºä¹@H.€t—:ˆLA¾°Õ²6+©Ä&|…d'°ý0™„-ïUϪ;º5øê²–‚|!;¥_ÈOq*ÖÅ!ŒX0)h†±Wâ–‚8¢º^«Ð{W.—óbí¿>á)(³.”ɼ-ˆK…ÂÛLæ$/’Øø ÄÍÛµÌÁKYæËÍ›jT ¶ ÕL¹ Öø#‡ÈÎ*ª \›f¹Ù}݈ �Ùl—<ÿXøÊ Ùƒ�½)¹�¼Fi±Ü]˜£nqPY-JAgIÙÜÄ£ô)ˆy‹\–V€eƒI—~žjMj¡…ì”f!?eR0ÞL †aì•Ø¥àƒòM~û‡çNÅwS=5,¬Ÿð‹Ðwz€­ÄûëööÏ�ÉQõÕyT ¾¹”òu«ÜAê�ä?ûº­hËEHcH4l@Ð)–‚» [3�|v'NA8EÏ• KA¥dyźZ˜%iå‚a ù)íB~*¬'DáŒX0)h†±Wb—‚·öüðð™źwøõ^Q^\>A˜JAàãøþ‰Ssþ눳\×úÛ/£Þ¯Õæ¢ÕksÜʼVÇVÚm¹´ ù)ýBý—QâŒx0)hÆwvë˜@`gÂP9ˆ@錀‘`�¡%§âˆòß ~óV�QÜu_ cPA€(*Hs­Ga*Eéï:ÛT„ D‰­àÒ¶¨ @¶Ø *€ *Kˆ¥‚€ ÄRA@b©  ‚±TPA€X*¨ <ìÜ?‹Ú`Àñ-]n(¿¡ƒC‡Ž=|� Ý;Üž)Û-Å7Ð%Kƒ‹JÄ¥¨ˆÅEÍ Ý*¤wíÕ¥÷Rš'‰é%wCÌóýÀ%w—秸}1<¬E  ÀZ¤ R¬E  ÀZ¤ R¬E  ÀZ¤ R¬E Þ×Ňg”)V9¡|V©Hñ\üš�‚(R¬rB)è蕤:¾sïîoä!ÜU¯(R¬rš)x¥ŽÜÓ\›ò>T½ DHA°Êi¦ »�Ê==Þ†ó¥à�eB €UN3 £2©~ LHA°Êi¤à¥޼ݥà|I^êuí|é-äÝpøTbo–Þ°ö,YV{*óat5µr{ž“.;ŸFV²3wBg.ùS‡=©N(R¬r)èúªÚ¦)ØÒˆ#FCó{[µù<[¨Ý8Ý:êÞj¤!FåJ�tn©‘¦$ζj4Îr§»«~ THA°JñR°×“X­+©¥j¸pÚý4—ŽÓÊR°9ºU –-‰H¨ýÙb9ÖM%ŽºoMw¨N%âi{¶X¸]WŒwŽãe)x«uwáÖu+¹Sa'ÊÎ÷êWJ…«.kª½ìœhéLD^èþâFtåBõµ t-òÊ÷çÉúauý7ñi-‘®ºbœíí ¾ôÕL­Ô•;ÕÒLKv~ð(” )V)\ Æ ˜—êŸKd|("}­ÈB·"ëè` ´×ÜmºÙ$‹:c/= $Y1Ë�Z-2+Ù™T? P*¤ X¥x)W ùùó÷71ÂC)¸iû"Ss-ÐM`tµG�'‘¥v%âj=\œJÁmúNkmäM6©~ THA°JSPjéÉŽ£]1>JÁ›$W:ù¦íf*ÙòWÔ]ªê_=ÚOÁ@‡bÌt|l*à b”)V)b &w‡3m‰1<–‚H柨3VžéºÑ^ Žu&†§ãÜ)ÇË8²ó“m#(R¬RÈ”ZOþ˜¦Ñ¶>–‚cæ¤`äÝXÇ{)ØÐuznäMÞ6rÍÃdP6¤ X¥˜)øï˜ê¥DZÇRÐÓ ?e®ý½ü¬16êæN�ÜÌRv>ñˆi” )V9�”«xWï�KÁçíôßµÚ^Ô�^JÄÓÍ^ ž÷u߆®?Ï�:ìGõ½eB €UN!ç} ¼­ßLRÐi4M ¢ãô¿”‘¯A8Ûnt¶uõzÇó?iÅ7ÑpGûÑ1Œ÷‹hgÖQJîÔa×ÕŸ”Éovë7�0Ãð„übÅŠ  8g vµÖÌܯ±Û2×¹fí¥ HAHÁæuUïõ=Á±öò‚`�7{wŒ25Æqø­…”[x€Æ»x±¶]x+µl´ië2�"�2½q³ù¾dž§ù“ü˜! Ô�‚÷ñ›>ó¾M—9l3ç€àì)x(¹FÄšó„倠š_Ž—Ì�‚Ô‘‚]fwá˜Ó¿¤ u¤à’slJöÑ–r)¹ ¨"Ç,Ý6×Ì!¦ìý7R€jRð~\gC.s¾ @ PA v/÷Á%ÇRÚÄ ¨#»’SìJ–Û 8} ¶G nž¯Žt™ž)ÀùSð2ç‡1³{L‰‡_·ÛíwR€S¦àuÎå‡Kæú8'\Ÿ)Ø4͇¤ §LÁ1³ì¦Ø¬™ËT²´R¤ 5¤àÓ²—ÌœÛØ}kš�ï�‚œ2_»÷—8|jšŸHAjIÁÿýi¾¼@ Pa ¾iš¯HAjLÁß?_�‚Ô˜‚€@ R)HA¤ �‚€¨š¤à_öí˜a0Ãpfà!f��æê© V&Ž^—¶R�ÐŒ�ÿyT¼—Ü0,)HA€aIA@  K R`XR�‚Ã’‚€Ö¯¦ P%�‚€@ R)HAþ2¯Ó-€)@³¼Ìó%€ )@·Œ#ß”HAº¥à”»1ÔHAº¥`¬Î‚P#è—‚�\(�‚ôKÁØóÀ9)@Ã\r àœ a ®ù àœ a ù àœ a nv#P"�‚€ O zC� a š�@� a Îù ø²wǦ Q‡_í:…‹ `xËdŒ ‘Zó²… WÆB•³@ªÄåëÈ ƒ×*q– ·*q† _´IˆãBü²:Ÿ/Ë@£ò¬BAÔ¡Ãh�“D(–@ì±o~þt!Ä !¶�6pNºRŸ�ñ•NÖß43F4ùü¬¬Še°�Åriöÿ™Žÿ]òóÃsXêž- �SÆ óö(wz¸«CüV’ ±6(.Ú+13[š¨²Gmr.Ì`BV‘) ޲ߕ/Ž;ž-æE áËÙ ¡ª\a�üAÿa,XŸHÂIÖÉ'E Ç"©bÇÉ"Ib¼ŠÇõ¤qª±¸�4/fÈå…(y3ˆä…ñÃc àâTéã%Ò‚˜•ŸxU?,Få¾D., €5L9@ÜÑÛÔ ïT=Á€d ˆ€Ã3<"y°G¯ñ ü‘ÈGÆ öŠ@!ä?�b•œx„S]@æPŸR%<†8„ƒP*ãLÜ8à®pîgvƒ,wÈoeVX£´ÿÁWOhÈŽâDA)c(þ›Ñ#5ì4ÜFT”¹þ:?*_3FòÍé=?÷«ì a>Úû;€�ÅN`ç±V¬ °°cX3ÖŽQâ‘÷hpÅ Ï7èO.Ô½f¾¾ ¯ÂkñFü~¿�÷០4‚!ÁžàEà&²3 %„ ÂÂAÂiø.u^‰D&ÑšèßÅbqqq#q/ñ8±“ø�ØO"‘ôIö$R4‰O* •�Ö“v“Ž‘.“ºIoÉjd²39˜œJ–�‹Éä]ä£äËä'äMŠ%Å‹MRfSVP¶SZ()Ý”T-ª5Õ‡š@Í¡.¢VR¨§©w¨¯ÔÔÔÌÔ<ÕbÕÄj Õ*Õö©�S»¯öN][ÝN�«ž¦®P_®¾Sý¸ú-õW4ÍŠæOK¥ЖÓêh'i÷ho5Ž< ¡Æ�j�F�Ë/èº%�CŸJ/¢WÐÐ/Ò{5)šVš\M¾æ|ÍjÍCš74ûµZ´¢µòµ–iíÒ:¯õT›¤m¥¤-Ô^¢½Mû¤öCÆ0gpÆbÆvÆiF·QÇZ‡§“£S¦³G§C§OW[×U7Iw–nµîÝ.&Æ´bò˜yÌÌýÌëÌ÷cŒÆpƈÆ,Ó0æò˜7zcõüõDz¥z{õ®é½×gééçê¯ÒoÒ¿k€ØÄÌ4ØdpÚ w¬ÎXﱂ±¥c÷�ýÕ5´3Œ3œc¸Í°Ý°ßÈØ(ÄHj´Þè¤Q¯1ÓØß8Ç¸Üø¨q� ÃÄ×DlRnrÌäK—Åaå±*Y§X}¦†¦¡¦ Ó­¦¦̬ÍÍŠÍöšÝ5§š³Í3ÍËÍÛÌû,L,"-æZÔ[üjI±d[f[®³[}º|Y¾é¾[|»üLýø~5~üÍý…þ;üŸpl99œÝœN²€ƒo¸^ÜyÜã�X`H`i`G�vPbPUн`³à¬àúྷ�9!ÇC ¡á¡«BoðŒx^¯/Ì#l^Ø©põðøðªðv²ˆ–H42,rMä�(Ë(ITS4ˆæE¯‰¾c3#æp,16&¶:öqÜ„¸¹qgãñÓâwÅ¿NHX‘p;Ñ&Q‘Ø–DOJKªKz“˜¼:¹kÒøIó&]H1H§4§’R“Rw¤öOš¼vrwš[ZIÚõ)ÖSfM9?Õ`jÞÔ#ÓèÓøÓ¤Ò“Ów¥äGókøý¼Œ }®`�à¹Ð_X.ìùˆV‹ždúd®Î|šå“µ&«'Û/»"»WÌW‰_æ„ælÎy“�»3w /9oo>9?=ÿ�D[’+95Ýxú¬é�R{i‰´k†×Œµ3údá²rD>EÞ\ 7úí Å7Šû…¾…Õ…og&Í<0Kk–dVûl»ÙKg?) .úa>G0§m®éÜEsïÏãÌÛ:™Ÿ1¿m�ù‚% º†,¬]D]”»è—b§âÕÅ-N^ܲÄhÉÂ%¿ ù¦¾D£DVrã[ïo7‡'þ®c©ËÒõK?— K.s*«(û¸L°ìçï'|_ùýÀòÌå+ÜWlZI\)Yy}•ߪÚÕZ«‹V?\¹¦±œU^Zþ×ÚikÏW¸Vl^G]§X×UQÙ¼ÞbýÊõ«²«®UTïÝ`¸aé†7…/oòßÔ°ÙhsÙæ÷[Ä[nn ÙÚXcUS±�¸­pÛãíIÛÏþÀþ¡n‡Á޲ŸvJvvÕÆÕžªó¨«Ûe¸kE=Z¯¨ïÙ�¶ûÒžÀ=Í  [÷2÷–íûûžý˜þãõýáûÛ°4üdùÓ†ƒŒƒ¥�HãìÆ¾¦ì¦®æ”æÎCa‡ÚZ¼[v<¼³Õ´µúˆî‘G©G—8Vt¬ÿ¸ôxÛ¦µÝ>9éäÕS±§:N‡Ÿ>w&øÌɳœ³ÇÎùœk=ïuþÐÏ쟛.¸_hlwk?ø‹Û/;Ü;/z\l¾äy©¥sbçÑË~—O\ ¼ræ*ïê…kQ×:¯'^¿y#íF×Máͧ·òn½üµð×·Þ!Ü)½«y·âžá½šßlÛÛåÞuä~àýöñn?<|þHþèc÷’Ç´ÇOLžÔ=u~ÚÚÜséÙägÝÏ¥Ï?ô–ü®õû†6/~úÃÿ�ö¾I}Ý/e/þ\öJÿÕο\ÿjë�é¿÷:ÿõ‡7¥oõßÖ¾c¿;û>ùý“3?’>V~²ýÔò9üó��ü�)_ÆÜ `@y´ÉàÏ�ÐR`Às#u²ê|8XÕ™v�ÿ„UgÈÁw. pOÛ w77Ø·+¨OO †@‚'@]\FêðYnðÜ©,Dx6Ø2õSF~ø7Eu&ýÊïÑ-Pªº‚Ñí¿i¡ƒ@Œ%œcICP nãïNeXIfMM*>F(��%¯Ö)iDOTV(VVsœÓ1¯µ@IDATxì½gxUw–î¹”³‰,@‘Áä ÆÙe»œ+ÙU®Ø¹»ºçyîÜ™/óÜ÷™/3wú™[5·««º«o9”+;»‚Ád% ²�PÎÒ¼ï:l,É’�ŽŽ@áݶ8Ò9;ü÷oÿ÷>{½û]ëÕ†É4‰€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆÀ5QŒÔD@D@D@D@D@D@D@D@Ú�`Ôž†~0 Fê" " " " " " " " H0ê€Cˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€H0Rè@@‚QúCD@D@D@D@D@D@D@D@‚‘ú€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ@Œ:àÐ" " " " " " " " ŒÔD@D@D@D@D@D@D@D@:�`Ô‡þ�`¤> " " " " " " " "Ð�€£8ô‡ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€#õ�$uÀ¡?D@D@D@D@D@D@D@D@$©ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€t Á¨ý!" " " " " " " " ÁH}@D@D@D@D@D@D@D@D  Fpè Fê" " " " " " " " DT0jk3kk ý´¶´ÿ6¾ÇWM" " " " " " " " aˆŠÂ¢øáktL”EEãwþðýOŒZ[ÌšÛ¬¥Á¬©¡ÍZ›ÌZðž£5­ND@D@D@D@D@D@D`Ä 0±(Î,.!ÊbÌb㣠EE¿£ë®"C-M‹ ¹h„W H­piè?�h8Š(Å@4¢XÄט8¸�ð^$ÝFýŒ±ˆQc-Ä!F|Ï­Q±!…+’�í?V­AD@D@D@D@D@D@D@†&�@‡qƒNs; ‚Q|rH@Š”Ó?Áî!ºŠš‘‚ÖX‹48ЍhÅ@,Š�©]ANÝÐ<jµˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ ¬͚ѡì.h2�¨ÅÀuŸÙµ~ F­ÍŠêÑÐF4�dá%æÐ1—Ž©(X�¼ðÒ_‡J­�›DàÚÀbm°±kG³†4E#º�b�¢–”á&žþNa FlH˵T4*ZQÑp1—è*Ò$" " " " " " " "0pè6bÖE#šyXÛ(‚QlâµÔú!Ï„%9sÍhPCM(gŽÖ'¦¡Q8rWÑÀñКE@D@D@D@D@D@D@D`Äé3!Ѩ¥‚ ÿG*5-,ÁˆµŠ(Q½bÁkŠDñ)p¡È’&�›G õ¥kBå‚Xψ£§Å§„FP ·a F‹ê*‘/‡Fº�Î"¥¢…{´œˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€„O HMk¦±šMt¬YÒ¨(‹CjZ¸SX‚Qc]›Õ^ Xbn\\b¨nU,M" " " " " " " " 7�@0zZS½Y}#è3É™p¡|P¸Sx‚òâª.‡j¥Œ 5@£¡…{´œˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ôƒËᇟšr”‚N”6zMòMŒXèš‚§ÔŒþ5 8´¨ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆÀ5�0øT—…ô F ¨cî–ÃH‚Q¸¸µœˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€  FÃUk�!K@‚Ñ�=tj¸ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€  FÃUk�!K@‚Ñ�=tj¸ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€  FÃUk�!K@‚Ñ�=tj¸ˆ€Œ\mm¡á=G �¨¨ð‡0)Œ´Ÿ" " " " ‘% Á(²<µ6�èNêîýoþ–¯®;±¨»÷oyƒÕ�aA@‚Ѱ8ŒÚ ž( u' u÷þp#Ñ�0Ä÷»ûl¸1Ðþˆ€ˆ€ˆ€ˆ€Ü|Œn>smQD@D ±¨±±Éªkj¬ººÖªðS[WoM�ÍÖÒÚb¡Ä4ü;Ü2Ô< ‚8ÅDÇX\|¬%'%ZZj²¥ò'%Åâãã\0’hԋΤYD@D@D@D@úL@‚QŸ‘i��"ÐÞ5FeåW­èd‰�±ã…ÅVrö’•_­´ºú†�jÆ ZoRb‚��nS²ÆÛŒüËŸ>Õ¦çN±Œ1£¿$I<T‡N��!M@‚Ñ�>|j¼ˆ€ �XÔÒÒjÍÍÍî**+«°SgÎ[Áá";rì¤;~ÊÎ�™‚ÑäÉãmæŒl›=3×æÍ™nÙS'YFÆ(wÅÆÆZLL´w‰FÃçœÐžˆ€ˆ€ˆ€ˆÀ­$ ÁèVÒ×¶E@D@œ@ ñµ¡¡©g5vòÔYÛõùA;PPh…'NÛ…‹W�–Vcuu ÖØÔd–FÂD!(>.Î’’�Ž–b'dZ~Þ4[0/ß–-�o¹ÙYHUK±„„øë5�$�„ž¡}��% Áh`ùjí" " ½ ¤Ÿñ•)h'ŠKlßþ£öñÖÝvèð ;±ÔkõbUÃ~Ö0š4a¬Í�“gë×,±…·Í²¼œŽ)jŒ†}7Њ€ˆ€ˆ€ˆÀ€�`4àˆµ�£ÖÖVÔ+:mï¸Í¶ï<`‡�œ°sJ­õŠš›[n´šñyllŒ%¢®Ñä‰cmÎì<[µ|�Ýs×jÔ5šfÑÑÑ_ªk4" h'E@D@D@D@"N@‚QÄ‘j…" " }!ˆE¡T´jÛ gÑ˯½o;?/�³¨��ÓhùÒyöÄ£÷Ø"8�ÒRS¯§¦ÉeÔ<}$" " " "pCŒnˆH3ˆ€ˆ€ �@,â땲«^«hûgûí­w>¶CpÉYÔ=ùÀi4.£ï_o«VÜæµ�23¾=M¢Q÷üô‰ˆ€ˆ€ˆ€ˆ@Ï$uç ™­ ¡‚ªÑ °øÇt3£Þ‹@{±ˆ¿Ÿ>sÎ>Ù¶Ç>õŸ½vºäBXëi M›2ÑÖ®^„ŸÅ¶?Ó¦N¾ž–FÁH¢ÑHëÚ_ˆ  FÝpl©mµ¦+¡zq™1“®¸›Ùõ¶ˆ€ˆ@ ´ŒX»¨àp¡½ôê{ŒöÚ‰“%Vvµ²�k™³gŒN·¼Ü).=ùؽ6oN~‡ZFŒFf¿Ð^‹€ˆ€ˆ€ˆ@ H0ê†`ÃÅf«9Ð`­•­ Á(nBŒ%L޳ØôŽÂQ ,Ñ‘ÄÏ¢“¢,:~è:’š0Tu]]�1�KHH°8 åÌ`ƒï×ÔÔøûÉÉÉ= é¡¿Í °¹¹ÙZZZ|®766¶§ÅúõÛÞØØV{ûµa-<ì°ï64à:€~á?<'XX8œ)t~Õúpð\OðîúÂiCo–á9:w›<%Œ×€¤¤$?o#)>tŒví>hÿþ«—ìÓí{­üj•o»7íéó°ö˜Ñi¶vÕ"ûË“niË�5�Z᜹Úb5‡­òC8rêZ-iA‚%ÎŒ³„)pdÄXt"ÜF±Q�¶pã?]¸©®²óçÎÃ)Ó`©PÓRñÓE úE`Wi/^ÄÊÛl„ „Ò½p#A§}k¸Ý’’3¶cÇklj´ùóæÛäÉ“1|s’]¸pÁ¶ïØæN¡Å‹— FÆ4}è4êi¢Xtþü9»ˆ óÊ•+¾ æ/pѨ§åºûŒmd`Y__oÕÕÕ^ÍRÁ&11ÑY~NWÈéÓ§ÃjowÛÕû#“Å’‚‚ƒV‰~/¢Q¼%dC8š·QjßœFAuôØQ{óÍ7\d™9s¦Íš9ËfÍšmcÇŽíÐbvΫ蘇 ìý÷ßÃgmvÏÝ÷ÚܹóàŽñŽÙa�nþ¶»oß^{áŬ®¶ÖøÊƒ6oÞ<Ž‹OÛ›o¼!©Éî¾ën_FF†§©t³Jû2Üvìøq;…uŒƒ»è¡²3fô´X·Ÿ1¨dŠùÂÂã.ͺ–(�1 äçäN{»Ý°>‘ØÇÞþóÛèo!M±ù3lÁ žÂâQXXh~çm+½RŠš3y–ŸŸïçvffÇó:¬•Gp!º)ðîÛ·Ï6¾õ¦%&$ÚÓOÛÞ¶ÐÓÒ"‘BÇk'¾ò¼£ÿç'Ï…-eO�hëÖ.6Ž6~ü8Â’®Sáv‘j ‘èÜùËväX±�8Qb§NŸ·«Õ×ç ç—$¦„�I‡ó2ÝÆB°ª«k°Â¢3õ­"œÕ…½ £ÿõŸ¾w]0⃠-x {åZPD@D@D@DàKhb q£°¨÷Î{ÝhÁ™Bï!Mœ8ÑOÇýÿÂ… ­˽óÎ;¾¾ûï¿ß¦OÏÿҺÌ:…&¸†êO¢^Ä ê�ë¬é\è qüÔ8K»'ÙR%x-£¦ò«ü¸Öêö6XCQ“µa¶¸‰1Ÿ Áhvœ%Í€h4 N#¤§õeº.Üìßg/¼ðeŸ}¶Ã^{ý5ªþÌ·¿k+V¬ì³`D±eÛömöÓŸþw«†Bú­oÿ|\  ³ÉpS<õÔÓF—Q8Sà|( ùñ'»ÛaÃíwxàMÕ–#æá´7œ6i™áKà`ÁAûÃïggÏ�µœÜ\wÝ­X¾Ò]Fáì5EÓ-m±òòr›:uªegç¸pDqw0M<ÿùÅ·׃ßüö7. ÿøïl«pîS˜�”`\ïBΟf!�‚Ѷá9ŒfÏʱǾÖ.žcãÆeX jM•£p6¯ f_Ôò©¬ª±³g!f9Gå�­µ5äv ç8ÐÑ45k‚M›6Ér³'YEe�}òé;uææŽò¶ze -¾.ìQ( ~ÂÙ7-#" " " "ðenܨ¸jgáÈ?rô¨›#3×à>šS`ì Ó(pñ•ÂІÛ7x¼ý‡?üñ{¢ýõ_ýµ-]ºìËïH0êt‚b×u¨aÔp¼ÉšËC54â'ÇXêê$Kš !ů[ªZŒikµŒêá0jƒÉ(n cO9Œá4JÈB‘ìQ}s±9 ¢ŽC\ysã›v�¯¹¥Ùè¢yô‘Gm6\Fí'vʽûö@”ùÜvîú AÒxûþ÷¾oK—,óÀ®·)iÜfW‚ÑÊ•«<Å�Û¤[ˆAUff¦[æz“òiÁˆ'^NL¦õ¼ôÒŸ, á·¾ù-cš\jJªï3� TtÃio{¶ú]"-ÕÖÖ _^öT¥d¸_’Q‰õ¼n”Úy³�ÄÍŒZZ[Ü–ûÉÖ=öÏ?}>lÁhÖÌl{ä¡ÛmFL»|©Ì>ß{)±ePb,3c�,~ã‘^˜�/ösö»—ÞµŽÃ}ÔäÅÈÃaMW·=oNž-˜—Y…ýé•÷1êÛ‰pVö2ŒþÓ?~×Ö­ F1Ñ!‡‘£°‘jAè’À¤“Ñ�OsKºpZ¹’–§øï‡h°`\zôèÿ¡°ÄÔ3 F’Þy÷¸Ž&ØÿöŸÿw[»v�/7Øþ‘`Ôéˆ4ÀQD!ˆ®¡æ+(ÄZ‡áÏ0ÅÀ)�4³Äü¸PákÔΩ;Þhµ1×®úPJÅ"Eœ/ar¬Å�Eñ딾 FÜk mÛ¶ÍöÁiDgÎt¼o?ýwµO38yò¤;i@PtÑÝHP˜’Æ¢µµH-£›�Å{Y—ˆÂP,Ò’0ÒÙhÜM�ÈÂÎÌuv%­ZEÁh"Î»ã  ‚ÓâØÑ)1árY­¼¼ u;P(ÜŸæ \Ç£öK%Ò>Nà§ÈŽÃõ“59«ƒÃˆóržêªêPQ³‰mŒÁ(jlk7Ñ}Á‘Õ(])»b'ŠŠlUßÚ§C”=òð£È–z;G£Î 7`=tHtn/�\?ÛËT>žÀõõuå¾Á-<¹pƒ@ÞÛ‰Àu¬¸¿\/ÓÿXû¤é;ü‹íå²,bÌ¥ÈôFN ®‹‚ �ÛãÇ L¸>n›b/4Ü'Ž,Çù)šQ¹®¨¬ôZ)µ®µ 5S*«|›<>Ü~hÞºç ö‘έþð1iõ>Çöqû“q¬Yw«§‰ÊÐþÔx?¨Çqá{äæ<Û·�xÙ(0°`4EBn‹ý�LjŸ—_-÷åÇ¡h;¹ñ3re k.Ï…o¯¡>4Z\\¬‹7ii©ŠPw'±¶WÐ�¸=ö_îG ÖÏíÅ£¿²mäÛ¾ö�3ÓÑš N°Ýܼӊ‘v‡ógÂø ›=;Ç–,šã#Š].-·ÿxî\O PËŽR´�l˜b6z�_2ú!j!á\æõ§ý¥ÊkÕùïœ79)5Ý&ÚâE³],¢Ë©¬¼Ò6¾ý1®ßÇñ;ùÖy:/Ïá4¬“?))‰.jqä^_߈'M¸^ct8¦´±õu FÏxJZ,ú´£¾Ôü" " " "Ð3Þ?_…�áè‘#ž9PPpÐ. Î`¼þH;ƒãÖæ¼”vìØî1,㕜ìl¿§à4kölû/ÿDZ îèy÷èS F�À‚QcI³µ5ÀuÓrí¦ºQëM‰µQw&Ã=k-ÕŠ0 Ø6Œ’†y“ç!] bQ<…"Ô.ŠN@`FÑk6‰õCè2úlçg^›ˆAîðž"Æ /–þðáCî´áfuiΜ¹vï½÷y‡eÁi¦ÀìÞ½ÛNœ<áÂÚd¨S§L±Û,„%nº -AÐÚ9%mÅŠp-�³óp2½÷Þ»ÌSýd "Ž˜ÄvP˜âÈOTW) •–^ò`'3s,¶•ìi! J)n±hn�’Æ€¨´´Ô9l…¨qt¢ø„•a¿ü²�“&N²™3fÚ’¥K½ õuõÆÚN¬Õôùîϱ¾øsèÀš7wžå£]Ù8ɯ«öR„apNçÓž½{¼ Sôág[òò¦Ûô¼|gÃ:Mœ‚ZLç/œ‡Õˆ`ýí¯„hSr¶R«MD{Y—f>ÒíX™‚Eµž&Šx3X¤{ïÞ½¾O¥h;VnÊrrsmѢŞŠHá�ÂÛÀ}çÅ©£w1M‘µ¥Ž€#·¹vÍ:ß>×}óö4ëcQ�¢XÔMhûAD� à™… &q¬»ÕÓÄ &‹½±oB_>‡úªÁƒÇbÒ¤‰¨4ÓÝc¼Ørý·lÙ‚`½Îk åÃÒÉ¢Ñ è/—^¶¢¢Bï�oÆ –““kÑQѾþ>xß­Ÿ¬ADAê0.ò—pq'Ót°å¼ì׬ÛE§§î#«f{˜ª¶gúúïù‹ç­mç9Á¾Ï~ÉšGík��>sÚ>ýôçÍ/•©(Ÿ““ƒu5z­¯pûWo9Rèj/dRD;p`¿‹Òlû"ëeffxÛ(B¿µq£�F_PÁb ÏûˆF¬Ã9<Õ(+:mnÚi'O�s!(=-i±cmùÒ¹öø£wáüi²ç^|_Þ!œAì†�Ǿ1yâXÔkš ái æ&ñV çü…Ëvøh±c}çÏ—bÞ(\K' ÏL·uÒ~«Ì1£¬ç剓%è?…¶}çAŒØxÆ… T\éDš1}*Ž{–;ž(ÐÕ¢ðöù ¥vu�öì=â5–8B\_E£‚ú!�5©à§§sQŸ‰€ˆ€ˆ€ˆ€ܘ@à,¢ÄR¼‡¥³ˆ>‹P›ÈÍX cÆí..=r!þ`¼R|ê”]D|ÍϘÑ#Á¨î 5ÊýrH”IÍÀ“ùäГï‰ÈGÁhhm͡յ5at­JT>ÇÃÑ&k­mµX?ÑI¡öÐmT¼ÑCiw"5 µŠ85]ÁSç£ÈGƒ‘(yn‚Å£ÐuL FG‹ ÏYj�yàÆÔ•Ÿm·ßþî·~ÃO‡ÑJÔ&bJ;Ÿx3Èá…çÜ=qÛm ]\ Û†ŸST8‚N¹oÿ^H( pôNc „0ئȲdÉ;(¤tŒ–cd$ngŸ{Áuƒ=ùÄ×\Äáû\E‰Ã‡�`Ù­¨Nyð‡t�Q¨þž„v@ÕAí:q˜³IÁhÎì9îa?Ýú©‹cå-Xl›ûÅ �.�éoî€Úš !†#Á]Ä"Ä»!•”œq.±m„%ÖEš9k–åæäXqqq—í¥u'ã¶ã$?A�®n“Át4‘ ë@Qý¥s"ýcÇŽ¹“Š t ˜H¥™Ìs²süQ$ ÈAe¹»‰Á Ý_óÈ—ÅÁ]0 C íä(O¼àÌ™3Ç #çC|ˆB€Jqeß¾½öÑÇ¡ŸT» Ñé”×»î¸ËÝ=UÕUε§ùÈ•AïY5áò(ƒ³Œ¸ÿ|-++óãöÍo|�ôü.wŸ}�WŽ G—´á*Ü:\Gà0b�Š–¬ãEÁ¬¸ø¤½Žâ륇ؗæÎ� gF„Bß8tè~ \x¢ØöðÃ�¸�H–äõ˜gŒÌå{9ŠøËÑ8Á˜�bÓ_ÿ¥ju{$n•`Œ†ÖRP(üÔCøi:‡Ñzð^ܸK[“„ÂÕ±Þö:®ÚTçŸ%¢ ulæ5A(†âP”Åf ~Q6ÒÐÆD[‚˜ú51¤±k×NûÕ³ÿÁC%œC÷Ú²eËݵÀà™HüœÎ†¯~õãÐ×tØ0ðÞ´i“„\O žlSX�Âq ÄVv^ÝìàŽ(`t'1ÿÅ¿ýÜS½žúÖÓ.ŠŒ;ÎÅ—­˜éR`êEÉ ¨¹—P÷è(N æqqñP]¹`D'±ƒ(†ýþï¹S‡"Ë8¬“¢GAÛ!!A6O¾ùèa`Íl'ö›ç½}ý¸nCÁÙl-�)a\oWíå>“)Sø ᆠµwŽ‹DLi¢bL‘�bÐ=wßã)€L£»‚ÀyË–Íp“À­…ý¤ ¶`þm. ‘éœðtø0•Ž#IQ¼£“eÂø®GÓ"kþ‡PÂQ³XU>O—š6mš»bè\"7 }Îzð!ñãù>¼ûÞ;øüª»bèV¡HçØ¬™³qñIð}!«žæ£2Åý=vühØ< !â�BgõÿT¤‘Qh[²x©ßÕ‰@WÓ <ˆZ]o¸�sŠ@sô1¦JÒ1Ë)ºpfC`¤Êå6oÙ„>uG¶“ëÖOGr<¡0?Ú:§ÂÑÆexžüò—ÿæœùSŒbÊS±(ú %Ð]]؇3%gºŒè€:tâDªÃ‡û±œ±’ç%ÛNŽî?Š.�?þ„‹Z"9ê`ºª¸O‹xN°_‡Ó¿ÆŒÓ'Žs!PQ¦(Ä~ÄþÌ'#5h3Ï[ºäøÅÅcÃ~^ žtñÜ*‚ÑÃŒæÎ�îiem>@JÚŸ¦;)i3ó§y�êŒÌQxÿ¢½¾q‹:r}­ÙSÖ/š…QÖr!RfÁIØjGŽ#ݳÆÓÓ&ŒÏD¿™d¥—ËíÍ?âÎ!Š•SPðz¦¹s¦£ONÂõ E¯Q�iÿAŽyÞ…©””$”î¹c…¥¡Hö1¬·´ô*Ä¢6ÔSƒëÉ *ÐlŸí:ˆTÀB�ú:Êš£®®6zOD@D@D@"G ŒãÒ!Ä8ìþûî÷ûeÞGóÁlû©³`ĸƒËq¾‰0ð>›¢×3§—’Ö\‰'¹¨SÔt)‰Z‘f�U­Öx ΢:ÔÏAÝ¡„üXK_ƒúéŒSýé&«ÜZë‚Ræ§k†)k†AÐbÒb,vt4D$¼Â•ÄÚE±iLI£xþa§ À€ÿ×/>ï(: ¥‰iDL'áèh¿ÿãï]øxæ;ßu!‡ŸÑIÁQĘz•”˜äB Sd81hÝ�ç³Ï>C€8UÙÿƃHº:X¨ó(it1°ÿ—ýw=óíïøhIt*C-eñiŠ%QPÉ8òGR¢PRƒ¿ÜÒsHÝID;– 85F�`DgÃŽ�;<¥k Š3ÑÑ1Ø¿õöF» Á„�5‡\¾lj©¤ØéS§]Ñ}õµW\XùÚ“_‡�¶ÌÅ”T|Îå) uÕ^¦Î½þÆk.’0P›�eÍš5(³®O|¦¼±Ý\=(üp(îM›>°]»‘v‘Ç…Jt¤$'%{j•æ+e¥>…€;6Üi999μó?t4Q bÀþâo~ ×ÂO…š3kޝ“)$ Ø™¦µ.²ñp+}Ç7룓h×®]^Éb8ü(¨q:/ŠLT²É�µžº›�Ç…B ÷),HC¤ë*9%Ù¯ó¢ìcÑ/Æ�ïÀÎ {À�¢ ÝTLc|ýõל÷�pFÑ1”™9ÖÊ!б/r_™vÇT±G} izžb·Ž!yO†àóÀWt÷È{8nÜÏÅ‹ÃAr›ó A…Ç•£}ýüß~îý1œè|âñ¥ Œ‚ê1ìÿ‡8¾ü}ú!û" ©³fVW#ÖÔb*e1Ü^ܦt²�r{•H¿¤kŠû !ëëO~ _«=M�Ì‹¿yΪó^gŒíäv¸Ýpú©p8¦ÁaE¾ì<·Ùþ» ”Qh£vÎ/2£ëmH F׊^/^HÑ:‚j%®/½è5k±Ðu^îwö\-¯BQê"{Ógîìáõ–bÒCHi›�Wþ]‚‘Ô¶vÂxÄÜT8#sín>—Þ|û#Û‡bÙee•þÙ¢…3máü™î6*½rÕ^y}Do:·à\µ•Ž"n{Ųyþ÷n¤ž�?�z\piNÏ›b_¹o��Á¬#ônsÁ’ÛçOW {°ÿÜ:sö]~ÒPë1ðš7w>Rã½3ÅÄ(º¼sçNÌ~ôƒz ]WðÕW_õ o^^žó:‹'SøX�ùÃoØ÷Û FR×!ålx1…‘ǽ´ !ÀéVRrÆRgï† Hª+ÁˆB k„ÑåÇ~Ís“ý……†qîqÔÂgŸÖ�:÷ßûõ˜6IçQO‚Q_ûÅÁp8’7…BžtÒ�Çó+”¢íô)TR˜Ü¾ƒ)iYöÿc[ 1˜©u@ú;ñœ ~xî±ý­a4{fŽ=úð¤“ÍC›Ç‡D¸ŒªªkÑîX8Ê’ îÐ�Y‹kW±íÙ‡TÚà$C�|´gê}ÿ;£ex-¡ƒ‡�.ZxÚëÅcy F�áÒÌ" " " "ÐgŒ3úÿýÄø~÷»ß¿‡2öéj 2‡˜QÀ�sjÀïWñ ™õC%uEîÚ{7+%-¨YÄЮ¼PiõÇBµ!X£(f,RÉ&À!4)Ö’fÆ[ÚòDŒrÖu±â (v–o>ß §D£Òfw&q—âsâmÌc)–ŠuDB0bË41ߥc„V5¦�Ñá⤊±`2�=ßÄèhLÝâÄTÊ›£gQÄ`ºkqXú,Çaü˜¾õ£ü}•§Óp¸úÞFœŸ)6àNøÙÏþ‡§”1P§�Ž©>�BJ— ñ&¬çåM7 tà°nÛH›…#žDlw+‚ÇSp–0匩i¬-3þ|ûÊý¸Kƒ£±‘És¨©Äš#?úá_z Ët Zû(–‘M{‡Q¨½Îñ_þ3´·Â¾žÂ÷E{O¢FΦMzíšjt£<Œý¢¸BÁˆŽŸ2|ÿI8G˜âÉÂkÙP€aÛ½¸÷·žòýô:ýC±!pqüþ÷¿sÁèñÇwaŒLòaÊÓ˯¾Á(Ç÷)wÕà˜òý?¿ógÙþîoÿÞ Š#A Og ]CŒºš�Ía�ÎT­~ó€()†_kÇ£Óî~éO¦EÒáB§Ða0å±»ûÎ{ Xäú¼bXp™‚äÖ­[½úßýöéTœ˜F÷Êk/»;†Ç›©u ¸Ø.@?yì±'ü¸�/Èí#rg1nºà˜æÇ>ÌÉ�ûæMî”c�öÜœX�ûqéJ0 Š^³�ì¿tÓ1õ�Ûãq;1ìÕ×_õ¾x×w…\`óæA¨¼Ð£`Ô×þÅö‡Ã‘#ÖRb¿e�]¬ÝDáˆÓ•+¥.òò<£Ó�õ˜þáïþÁ¹Q0b_ëïˆE|�´`´#–�;×¼ˆ€Cõ‰ÐØv:�X�ˆ£¢“glçç‡p΢ð=ĺþ›¿øú[¦;|Ž+F?¼‚ëS�ï.ÓÍ6¬_êéiœö<‘ý°·þ¼|[ —ÑÒÅsqÝ*³gý:©c¾àhü°�FŽ˜"G‹ý4{ê$[³z!ñ1¸>Ãùt¨ÂõvŒòVÒ'ÌŒú„K3‹€ˆ€ˆ€ˆ@Ÿ 0Câÿþ _®?µ‡X~„£§qRJšcèúŸ›%5‹ª!•¿Šà®x`£DN™Ï¤»èÔß”4 4Óù³ -ÄýðG>B…€b¤¸ÐÍÁ”�{ï¹×.ç£w•œA� ¾>ì)SU••lk¯©™WÝÇQœ~ØN0bíÞF¬¥”’’ꎛCªƒvÖ6Zµj•§ùð3NtÞ°¨5£Sp€° #:Q(ñDÙËQ¦Š Ý-Â6rˆ{¾ÒºGˆŠ+·÷Àº`Ž`ÄåY[‡µ–XÛ¨ží…ÀÆT¡öÅ©Û t.Ä!eí›ßø–§>Q0bä*ˆ[Œ(�±n '¦þñâA‡mŠ“&O6)gÊQW÷� [¯¡ˆ3í‰�²Ìà2 1�f~+…BZéXb ƒkÖ_b kEýí_ÿ­óñå°,§@0bJZWóqR¨�oDÿ°xõ&Ô"Ú ‡ÅKªí,¬Lç 'Š/¬«CÕ�âûËß`?YÏŠý�¼(†íü|§�HVt¸-Çqf¤`G�pJÎLI£è[ßxÊ…Š>ª8•””¸“†éY�\ðCÿÀJºuÑÅÅšI{÷bt;Žð!‘Lqà¼ÝL§£;޵°Øn¦Á±Ý=9ŒúÚ¿8º[8“á&üãŸþè‚,‹ªÓ]F—�'ŠftùUA,b?â”–š �mœgu¸¦"Eõ�}ºmŸ§Mö$±°5Å!Ȧ‰)hÆe‚k²_ãÒñ:õ‘(8ž>ƒTM¬÷ÏïA0Bqí¾LŒúBK󊀈€ˆ€ˆ@ß DJ艔ðÔ÷=èÛ#&%-Œj‘ŠV½NÔ$bJk EcT³˜Q¨;„BÖq“‘’–gñxe-¢ ¥,HI«?ÓdE­é†UGý£VÔ>j)o½žÞ?+Þ2N±”Ù };ÝÌM‹C†:?¿ÿCP«è<©N²7ß|Ë"s¤¥  k1¢ðAç‹3_’Î Š�À‡Á8BÖ>¡`ôF h<÷M0JA�Ž�Ãu> �d5‚uIž’’â{Ä¢ÁÛ¶mCpµßG’¢Š‚QÞôé¾_L¹c0Oq¦¹%äÎà‚Üoº‹˜êA‘‰)D] FÄ~ô£;ŒÁˆ‚Î/~ñ¯^3‡©q« ±ÞNÐÞÐ`»;W(jdA0úœ=,ŽLÁˆ£bÕB `ôÐC_õA¶—#Åqxuò8xè »6Xë‰5§ºšÊàÊ¡HÆ}gê÷Õ#¸©Ù†d¸€àViÆ1cJ…_ŠÇÑŽ>ü#:eØ_S0ŸöS }A¥«ù®;o( �öméê÷ÀÉÅÔHº…ê½@vD=NÁ~Ó­ÃiæÌYp„=ìÂížtQ £hÄÑÝÚP�ŠbG¶£BŸ•5¿,Ñú6W;Ë ÆRàx¢`D!/++Ëkmq]9Œ“ÝÁEÔ!¸ÿxüØV¦VÒ1BÁ6Œî¾ónoSo£¾ö¯4g§#®¯é6üÃÿ€sð’»)±nE4Nl?Ï]öO Kä4T#¦våæLÁyRoG ‹Q›j—�(>ëûEц.ŸE·Í²o~í>Ù ‘÷8ÎÙ"O›:e¢ýÕG*i®].-Çu²";£�u˜Ç–×$¾_XtÚ‹esy^s;F—á0zá ‡Qrr¢�Ëí©g«V,€ 9Ábc®9q²3UŽî"^£™·{ÏaFÛ$ùQÓ?" " " "0xE¬™ÃR" ×RѼ&b¹îRÓ‚=àƒršè.zþùg}þüñ?!^XÌ2¨^GŒ`¤¤±¸uj5óE¯›¯Bð©B"ü•€;wD|‚â&ÇtYôº¡°ÙGJc*[|vœ· g³èuÜÔ B:[lzÿk|°§0°g§Ú…ÀÿÙg…ª-ížû¼½÷Þ»œ>ˆÑ³,3�„¢Ÿ†s„1ŽÆÄ´'ŠB99¹R¦x‡¤sƒ©/o£Áp#æt;íG�™ŸýìxêÛ“O°¸/ÜÖ9ʧb¸Š¶lÙìµhXë&''Ç#ŠJ¬Câº?âã°.ñ‘Üx’QäâItñÒxÉžbôÀW˜’6"Y»”4 F?ü wŒp›Ý¥¤­X¤Ð¡½(Þ͸'ŸxÒk7q�A{™Nö1†§+‹î®ip7=ŽÔ$¦;ER0¢;…é@tø¼òê+î~xâñ'}?)Røˆ@´?I`Âz5 ô)n°öOWBát#ÁˆâûEÅ�àjE÷ÿrß·n 9ÏŠáÒa ã†Û7x:£/um¿ˆsb¿fAo'ítX±¶‹6ÓµÃýɛ飑1åŒÅçÈ‘ûØ>%�B$�;SÒ²q¾ŒÂEžÅ‰g= ŠQ<—8×Û•`ÄÏ·Qˆíà45�(ܲØ;Göc-¬7 èÖCÜ[·5“P”} #¦Š…Ñ…¬ÿ!ˆ5•(T2å“â)¯œÊÚ9àX$ži¡ÃA0ŠÆ¨ŠL§›�QÔ¾ñ佸VM€ûòŠ_Ÿ€ð¸µ²2�’öuÇ�áí÷Øá£'P ®ÂÅ'ƒ82c3$¦©± õU¤��JO½.-[2}¨£`4qB&Dý6Î¥|Ô+jjl2Ö@¢8T�¢î}måòù¯3�6\�íž´w()%-À®WÁˆñ*g¬Î‰ö{*~4žË±íQþx‹»�îÂpðì÷ï¿ÿ>Ž}“�‚ÆzF•Œó·?¸Î™3f¡^ÏR÷;ÜQS‡þFÑŠ)ž¥p•Q,âq§Z�ó§+Á¨âG—cÚ"�J ,´õë×c¬ wõíÜù™½òÊË.8 dJ�Pápä±ßòÑfO¡¤«ŽÎ(žGìó¼Ž0EôÃ?€ ¸ÛÏ22‚уëàªÌaG_)±6ï£s^8>5ˆèâ¹mA¾Ýw7ëaÅÃewÐkíÝÌ…¢¯?q\W“q]*Cm£“¶uû~Þž)d¬A´tñl59‚Ù™3í,jqµüéSQi®Ýs×*8.kíÅß¾åëåm“'�³ ë–Ø¼9Ó=õŒÎ¢×ÞÜ ¶%°1Ç»�ô,:ž.\¼bû“`t£‹ˆ>�[@ ¨=ÄlÆ­4-ÐY´-= FÌpa�^Ʊ@þt·Q„*.>¦qèß3°l.ú_–ÕÂ�´ )pç.”bÞX/ÂMgÝKlëÞýG%…Õ´�ˆ€ˆ€ˆ€ ,�-[6Ûý?ÿ«ÇætщŸƒ 7Ò81 ™1|ŸqãKÞãrb첩hŸ#6fÌÏ9?�½Ieؽê~í#N0ªƒXTñA­Õh°æ H/e)«’,ya‚%MGúRÖjà<ª/Dqh¤¬µ\mqzÑI¡¢Ø ˜'my¢×)êkä?)»6L:ß�ootcþ¼yÞÁî¹›££åùFƒà‹Ž$Ö(â0ïtªpä1vf€<õƒ*�æ´sçNwsôG0¢äœ",&ýé§Ÿz¡\¦WQJFí!>ÁçÉÐØÄBÛHIC€ûÔSO{­"ЬcD§E¶ÏPW‰¾-:pXˇïqØo FÓ§ç»›äF+ÛÇ÷�. P òçB4¢ÀCa +Á¨¥¥ÕSà82—·Ä«×&Ô®BZJJ²;�è@¡°@"Ú›Z@IDAT1‹í‹¤Ã(–)ZyZ‚wŠ L™bí�à8²ÆEîÿêUk,%5Ťþ¦¤{ÌbèL Œ4�`ýݽR  ðǾCˆÅÙ™ÖH÷�9÷¿ó°Ö…:Áxìiû|ùå?Aì»d³Ð—æCdZŒÚW,zM¡�£àq¤1¦j=ùä×½&ÛÀÏ(Q`¤»(N­ËXxìÃìpì³<Þ¬6i•?�ïR0Bݶ#¤@XaÚ ‡ª�~Èó‹‚ûhŠ5«×ºsj #®³/çc~ö%ŽFÇk@„S¦ŒRb},îWê‰qT´±H�¤0Íbîš~ Áˆ©�ƒY0š=+ÇèÔY¶d®m™î**‡Ø[_ßèûÆ~ÕÜŒ´cÔ ª®®ñÂÕŸlÝçN¦˜Ñí“7ÐìÙ¹¶zÅm8÷ÆCôÃÃüÄ@pjôÚEµè§lËÇ»½(u jñs޾¶`Þt{ô«wÀá4¢R œ•!‡ÓÙs1Òb’¿¿aý2w*Õb9n“EµÙ.ÆæµˆbÒ!8›”’ÖÝÕCï‹€ˆ€ˆ€ˆÀ­#FG»QèaI”bĵAMÖ@JE IG�Eœø@ùõ×_óT´‰ˆUxß^`ºQ±ì[µÇ#[0ºÁ(½£`'Qù&«;„€b[�5ž F±c¢-aFœ%ÍK°” –09h7q¢xRZzÙûÍ›7y°8k2�§ýÓbª Å#ŠFrh™£hÃ…~Ù±xàA�“““=@æ0Ú~üÎ;ïö@ÝÓ€�zóêk¯x±V:]t²f×É Ÿ)gŸnýArh[\?ƒr� ÞéH bâ„Iv÷Ýw»#ƒÁ:Ÿ|ú±§´q=ÑXÓ�¸M ELc‹�‰u‡ÉJ¤†ÑQÂ)•Œ'^1ê ñé?] øó§ÏðE]µ—Ánccƒ/³í¥¸p" ],¶22Æ@!ÎEÀ8ÔbÔ8 �E§ëÒÐéź6“ $3EŒ5•8qÔ3î 90�ŒÃÝß Nt õ4ñ¸²¸vaÑq ˜nU. ÞÙ:Àx1á±æqcû™ïz Ëî=Ÿ;§‡F‘癳:l†l{3_H¸‰<��éárcZ#ź­X_‹b £{ŽL—““ãÝóÀ‘éxäÿg›f:æ²%Ëü˜³O°¿±�6‹•Ó9Ǿ|ÿý_A_È÷­‚·wï=÷z¿ç(u¥8öTý)̱XûôëU°“²ø3E€bZ49kåÀ�4i——¸½ÃØ×Íš@-Xû-û?/½ríHñ4ÍpøåbYnÿ=ÔJâ1ç¾q¿˜îEÑgÏžðûWo9òü�ô3ò!3¦ümÛ¶Õ‡Lý«Adãõ„}Šýƒiš™p¸=ñø.Èòœ¬£ì©‘º¸Øæ¢¸ôøñcÜQôE÷kçfìc=ø_Å1»€¢ÒgpM=éN$òà¾Ñ ”3mŠ€/°™ùÙ¨6 âw¢÷‡ 8Ž8ì=‹R¾ûpÈ]„åÐU\PÊÆrëÖ,‚˜™ƒkÀh8ËP<{7\�g}0Ö/Z·z!® Sq ’\ü¾zµÒ�NlW„¬–fŒ”vöœ¤¾þ/ÚãßV¯\hÿéŸÁ6–øõƒûÃ~üÜx šCD@D@D@D 'Ÿ~ú‰ýßÿíÿƒì‹vÿ}÷û=×dPš=k–Ç'ŒK_° ]Fœ|Tf8‹8±\Ìҥ˵³ÈŠFœ`Ô9%-ihië¾HIkÅñ¤`T³·ÁªÞGjÚ¸0Åaä³T¤®¥,N°DÂŽ=@ÅŠ|k_þ‡�ëUbt­K—/{�Ëô¨ ¤)¬´ŸØ1éz¨ÀÓu: ˜æÅ'åT.)ä „ð×âRáz\°£Shàö4r.jjkÜ�ÁbÄ€8?K"œ—Ë]¹Rê."ó|TδªDþ`„1Tl·Ïz)üŒu|¸…0º„(p}))t&%††�¾ðЭD†Ëqòý»ZU¬ª}91ÎaÙÓÒR]Ô¡›¤s{è2ŒâÔõö"Hnii¶ì'Ûš ÷�Å”¥—Û+ÇöêàhA‘ä`Ô2ŽàƉ?÷…?dEÁ€œ¨,÷4ǵûP1¡ŽŽÀÅ6ÒíÄÀž–F¶‡#…‘9ÑtíaíŽÆÏÚOdÛ›ù$�öméé÷/¸U¹Û‡Ç…5…8ñX3e�#�ñ‚ËþF��b(ƒj ‹Üï Oð3rqq"Å6~Æm)idû�¯}ÓæÎ›ç}”ûN÷]\,ÎoôžKG¸Y³=,�Þˆs/1ç?DLn“ýˆ|9Ú]Ù•2ïƒùx>¥§�òs†Âd ÄδtôI´ŸË²-|ÒÀs�‚cì³lGúWo9²í.¢¯óØó\¥xÅëû Å3žïìßìs4ßUÂeÄQ )Ìñ=ráO'n?øáyÀm÷7%-¾>=�b3ÒŒÑ|ºæ"lŨ-p‘Wmmƒ×¢D¡†÷‹Ç6n Eéi)è ‰è{!^t£U£&QE%Î×rœ«õ ¾ÄÁe¹}ÎærÜ>×{ér9–©Ã¸ ­àšúíK„› ÐEhût ®¯dÂBï,´Í‚Ú}™$õ…–æ�¾øüó]ö‹ûîóêí( Ãx�‚QQQ¡Ç¨ŒùÃ{jš3‚x2óqD4Ö䥰”…ÔŒó‚ÏûÞ’›³ÄˆŒ‚¢×�P¥éiѨK”‚t´økŽ¡–ZŒ vÈN¯ÖXcq(�ˆÏ‰·1�¥X*ÒÑj4´�8ä DŒ1 ‚!D‘øºj/·G±‚|n«7ÛØ~9ŠW½�¸oí§¾ì› T9±­›¾¬£ý¶ûû{Àa£_db¢¿pôwݽYþVóàþ3˜çDÑ­/ý «ý „3ŽšÇ”4þý½g¾ç©Uœx�æ6y¼¹­Þö×`[�àœg|¿/ý>XO¤_ûÊ1h?÷‡È#ø‰tÛ‚õìøÊöFB0 Ö©Wö»& ž“!N­~=íi˜Ý—á<¡ýì8w ÖKŠSÒÜZpÝŒÄ$Á(µèž…¡wÞyÇg¸ÿþûñ8ƒ¡ÄJ¢ðÁ6k ²^'ÞÄßœ(±Î3 ÜXpí}ÿpÿ3â#<äµ¶¦V£“¨¥�"RÐbFE[LbHØhCE¥*FW^¨´úc¡à5qf¼e>—£� -Ò}%Ê‚õÞ¬ �Ûë˶ØNcœÑÆÿàÚóa{9¯¼é.WßžCT4}`‘qst¹±.Þ¼Õ<Úï$úAO‚QàXã69õ¥¿¶G,¼†»žöëìïï}åÈùÛ·ŸÛèó Ø&_éÚcAþþ:ŒúË­óò��eÐæÎóuõ÷µË ¸~ùS®—ŽON­íØyξ½ÓA0‚ Õ^pèãÙ·–jnš˜QÒ^¢“ˆ™=5x?pñ•Nóóà÷QpÑ‘Ôþ}ÿpÿ3â£Þ ¾.{££�Ö Í(!?Î2žLµTÔ0Ò$"04еÂTNÖáyåÕ—=í‡5»X÷««TΡ±Wã•�ør]0±âèh?ý×ßø«;oP¤^Ó� ° 7KŒþñoŸöWÞœH0º1;Í!" " " "Ð= Fݰi®lõZFM(ŒÝŒµètÔµ¸Å®»ižÞè� ÕŠ×Y\›çæä >ÍØˆ¤¼õ¢ š¥í#Š{»öØ<û²m…ptµ¢ OiBÏnV¡·¯`=¤Ñ£Òl £}ÿ [¶xž?Í \z��R'" " " " ½! Á蔂šFœm(Õ.ºÁnéc1(L05Í‹±c¯“P¼:(Ø®4�[× x\8¹Ã5ŒXǨàp¡½ôê{öéö}¡î, �Wݺ¡-��†Ñù²líª…öäc÷Ú¼9ù^‹*¨GÅ]Q_BTM�AB@‚Ñ DPÓˆ³ ¥ÚE7Ø-},#Š@à4âNA´è[ß—Qp|N�>‹:F{lëö½HKÛ�áå/ÞúF�LÍš€4´ÛlͪE¶nõbËž–u½ˆ»ÜECઉ" " " "0H H0¤FÍ�áN ½`DѨôJ™/:m;vî··ßÝjG��´z Mߌ!ç5}™@llŒ%&ÄÛ¬™¹öÀ}klåòÛlÆôi663cPŒúøåë�¡D@‚ÑP:Zj«ˆ€ #�`ÄW FuuõVQYi{÷µ×ÞÜdŸï9l/]±êšºa´×‘Û•Ô”$›0>Ó–.žc�~õN[tÛ,•žnIIÍ3:úúÈrÓE޹Ö$" " " #‰€£‘t´µ¯" "0ˆtŒZ[1ÈŠ_ž8mïoÚa;?/€Ë¨Ø.@4j�Óèú‘£³(΢‰‹fÍ̱åKçÙ=w®´ü¼i׊]ÇH0ºNK¿ˆ€ˆ€ˆ€ˆ€„K@‚Q¸ä´œˆ€ˆ@¿´Œ—QKK3RÓÊ­èÄÛwà(FLÛï¢ÑÅËeV#§‘óN¡³h\†‹EkP»há‚Y6=o*RÑÆ vQì—Ä"9ŒúÕMµ°ˆ€ˆ€ˆ€ŒXŒFì¡×Ž‹€ˆÀ­'Ð^4bZj™šVQa'‹ÏÚ®=‡ìð‘v¿_ºTæéiõõ ù®ÙZ0ïH˜b�^k‰‰ Æ4´ñã3,/'ËæÌγe‹çZ.~5j”%_KES:ÚHèÚGxŒž±¶ " "Ð�΢QSS“»®ªª²+evúÌy;|ô„;~ éj%váB)jUû<=¬vØ|ÄÂÖ£ÒSmâıH;›b3gdÛœYy6mê$ËÌeiii^ü:..îKî¢aA;"" " " "pÓ H0ºéȵA�ÎÑ(pµ´´XðSV~ÕŠN–xšSÕÎA0ºZQeõõ��W3,ÿNLŒ·Ñ£Òl2#¦žùOîË3)h1×è,jï.–0´S" " " " 7�€£›†ZèŽ@ ¯í…£††«ª®±ªª«ÄSÖ›P »«kóUb µë¿ûCúŸ(Œpì@ YÇX||œ§œ¥§¥ÀQ„ŸÔ¾Np±¨³PÄšEª[ðÓ«ˆ€ˆ€ˆ€ˆ@¸$…KNˉ€ˆ€DŒ…"N�`¼†„£¯mÔÚÚæ¯üŒïóËù †É?�àˆ?�s($E¹“(:úË£¡µ_n˜ Ðnˆ€ˆ€ˆ€ˆ€Ü"ŒnxmVD@D # @œÚ¿~! ± vÛu‘(‹‚׎kbQç×èh:ˆ¢ÝEIÜc‰EÃã¸k/D@D@D@D`°�`4XŽ„Ú!" "p],"Š@ ^»zR�•6üè!- Ò� AíE#îhû¿¡(xø�Љ€ˆ€ˆ€ˆ€Ü ŒnumSD@Dà†¡ˆ¯Áü~ýõZ £à%˜oÈ¿^«aDÁˆS ¯Á{�pä3éˆ  F„©U‰€ˆ€D–@ uµÖ@4êê³áô^{‘¨ý~I,jOC¿‹€ˆ€ˆ€ˆ€Dš€£HÕúD@D@"J ;a¨»÷#ºñA°²ž£AÐ<5AD@D@D@D`˜�`4L¬vKD@†3�‘"ǰ;Ñ(ø\¯" " " " "iŒ"MTë�!N@‚Ñ?€j¾ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€Dš€£HÕúD@D@D@D@D@D@D@D`ˆ�`4Ä š/" " " " " " " ‘& Á(ÒDµ>â$ ñ¨æ‹€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ@¤ H0Š4Q­OD@D@D@D@D@D@D@†8 FCüªù" " " " " " " "iŒ"MTë�!N@‚Ñ?€j¾ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€Dš€£HÕúD@D@D@D@D@D@D@D`ˆ4‚Q[k›%�ж¸Ä!NTÍ�!N ©Þ¬®¢Õ¢¢£,m\”%¤D…½GQm˜úºtCM›U]n³–¦6‹OŒ²è¸¾®A󋀈€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€D’@k“Yc}›ÅÄI0Š$W­KD@D@D@D@D@D@D@†,�A#)%mÈö!5\D@D@D@D@D@D@D`˜4)iäššeñÉáçÄ ³c£Ý�[B`нæÞK0º%}@�$uÀ¡?D@D@D@D@D@D@D@D@$©ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€t Á¨ý!" " " " " " " " ÁH}@D@D@D@D@D@D@D@D  Fpè Fê" " " " " " " " H0ê€Cˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€H0Rè@@‚QúCD@D@D@D@D@D@D@D@‚‘ú€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ@Œ:àÐ" " " " " " " " ŒÔD@D@D@D@D@D@D@D@:�`Ô‡þ�`¤> " " " " " " " "Ð�€£8ô‡ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€#õ�$uÀ¡?D@D@D@D@D@D@D@D@$©ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€t Á¨ý!" " " " " " " " ÁH}@D@D@D@D@D@D@D@D  Fpè Fê" " " " " " " " H0ê€Cˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€H0Rè@@‚QúCD@D@D@D@D@D@D@D@‚‘ú€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ@Œ:àÐ" " " " " " " " ŒÔD@D@D@D@D@D@D@D@:�`ÔÇ�ÿhii±††knnö™cbb,!!Ábcco¼ðM˜£±±Ñjjj¬µµÕÛïm‹ŽŽ¾ [>› ?릦&«¯¯7òKII±¸¸¸á³“Øöcögö›Æ¦F‹ŽŠ¶¤¤$ï;ìÛê7ÃêpGlgØ_ª««­­­Í’““�×ö•¨¨¨ˆm£?+ây[WWk-8�ããâý¼å5Zý¹?T‡ï²¼Ö³OózÈk?¯}‰‰‰þÊ>Îk$¿W Ý;5%Õû;ûzÐß¹ û×ÑÐPïçEúÏ Þp}œz;ßð%=²öŒÇ»¹¥9Ô7ðýŠk$¯—}½�ÐõìÖôq¿5ܵՎø½¢¸®#ýuó H0ê#óÚÚZ+-- �¼m­þå?~Üxú¸ª™½¼¼ÜNœ<á7®ãÇ�³1cÆXjjšß¸È‡éJC7 uvõêU»xñ‚ßàåääÚèÑ£‡ÕóKèòåËv¥ìŠ•——a?ãmJÖËÌÌ–Ù°:x·hg@ó:STTQµÕ¦N�j~� ã[Ô´ë›­¬¬°3gÎXn´xÎŽJeiiº^¤_:¨««óëEPÞœS4Ÿ0a¢¿ó»àÊ•+vß«Pˆ,//Ï232;<ˆ¡ TYUieeevéÒEØ0zÔhœ™6vìX_7ØÛù:4N Y|ÃïØŠŠ ô¡Rÿ~Íž–m£F�êÓ>ézÖ'\›YÜ#†R+êÅuý€§E#F`ÄF¼¼pá¼UVV^ŠØžbÛµ?:?çSésæ´:|ÈŸ6¯]³Áñ´`–~½O xÌøšO¢lß,DðäìÂ… vìØ19—\7ؘÑcПg[VV–ßÔ²mšD =öÙââbÛòÑfr¾|Ù ËÉÉTã¹sçl×ç;ÝÅsvò¤É&@üQ¶rÅJËÎɶ¤Ä$¿^ÓARz¹ÔŽã¾àüùsVUUe ñ 6yòd¿ŽfA€g¿ëÍ|¼ÏίtÝðû�ßøNç.¿ÿ·ÖpÚÿÐÆËVrö¬�(*rápåÊ•èSú´›ºžõûï )Þž?Þªq.öeJHHÄ}O:î÷C(ë{¤/5o¤ Œ„¸.ÒÌ´¾�!0b#ŠFÂ;‘Y*¸°Ú»¸±¥z6¾ðxÓš���•á‘JE'LAÁA‚å–˜”hLAŒüè.âMÞÆ�=8ø›¿ù[[¾lyDØéÓ§íÓO?±Z¤BÌ™=Û¦B qá+)²ÂWw�ešÝ¾ýûlïÞ½”ö`¶6úç^()•±;z#÷ýà:³mû6ûÉOþ_««¯³g¾ó=[½jõ€·á’fßþõ¯Ÿ·Ë¥—mé’å¶ð¶…ÏçØ8¤éj�Îx­ßºíSw[2­Œi–_}èaçÙ. 1ðüä“O\Ðàƒ£™3gZzZº?4¢+i¾'^zùeÞ—.]ê}�©GtjŽ‡Ã—SoæãCƒá<ÎÚS§Šý»•áõëÖã%ç¦:locö%>¬äwìGoñÅþà‡¶xñ’>5A׳Þẑ`TçÑY¸½ø°—"%ÏaÞGÆÆ†jSvŒ(ë{äÆì!¸¼Gç}SqGÁ1™'&Ïó¡8q?¸oŒùð‰ñ] )^·ñ‹Út7Ú·pù÷[Ã=®»?}>8ŒÁ¨»”´3žÂµéjÜá1uÊT[gÎD¸>8uNI»ˆúƒQ0b[yq¡{êâ…‹.f¥¥§¹>%yøk¦+çÃMÚ9|‘Ó]Ä'¸Ë—¯°¬ÉYD±i £Øo~÷¢UB˜b2Î%)¬µr3&Þ°oٲşÀÑM5qâ8åֻÈ\)˜²ï߬¹›±ÏÚFÿ 70ŒúÏRk<ºŒ¦ÃqÉ ´ººÊk2%m츱–†º€,\ÌT¶"<¤qAà“�ó¾‘å$˜®Ìó™Sç”4Î/ÁèÆÇˆL0}¯›6}à" ï'ç!3cÒ¤IþðñÆk|sPX¬Ç §O#%yçNÏL¡û,ûÚÞ¤^>àíŸ‘× ¾#¯uE`ÄF]í<ß;z쨽ñæ° {°Î'‡nßàO¼ºZ†–õö‚¿l˜“Î'´œóæ2 6õDÔ~IÃÓ ß]¥OB¸ Ŭz<©oÂÅ)6YÖLâH,,ŒÈξԶ©© 1nÁºXä•7­ þyá£=ºáÚHÜ·–ÖÐÈ0uPÏ9šoظ=~y2Å+ 8/X×—�ÁhHø�²FÔ½aûÙöì7kÞ¤ íÜoþ°6'*ì¡ïjØÑ¯X4êõLDªçi?\¨èó'6.öz}(º*°Í›7»õŸ\yá^¼h‰å!ínžhÐÓ¡ƒµâÓ«ÔT Éþofx\Ä>‘~ùå—�k_e«V®r‹:£I¬µ‚'ÒäO¾ü²¢xEƼÙm£ÍûonÈ�…Í9o,ýìo,rÍ!:œø´-ŒYèzéÒeîÖÊÌ$ÇTïls-nj½ŸÖ„ú)û88Ń·ËýäkP‡‰Ç³óqä¾$$‚+¸Q ÂÎù±JKK½VŒ¸ëZIA{›š›Ð/S±�PÖy”²áÍ9Ÿ`³ìÇÜž;<®ìã<Î5xmÄqg{bÑ߯1d_â>ëíoå¹Ãuðx“7ûëCá´� ¡ÂÏ›r<ÏÛÅm.´ÿ�íå±à~ò<¬®Æ±@ßà6x͈ã>ãI÷™OÀ¸}NÁ toÛ´›Çœí¤Ý€´³Vøçy•Œ¾ÌëÒ�ûíg?ÿçÝ•Ã(8þ}½¾q~:1¸<÷…ÉÁÕx¯û݈÷(~ÓµÁk[OSðDþØ/]²Ôfäϰ pÍqÿp-kåñÇþðI!ëÔ¤à<åhjAÀJÞü ÷ü ®/äÇó—ý�×HNqxš�œ‚íÂõÉ~×~­îö©óqäßc˜fìýéª;Ù¸n²!;ög¶ƒOFkpýà¹Áäköqö»ŒÌ çÙþû…ëèËu-8_:|?à{€So¾_Ș}Úû X±ýt�‘Kû‰í ¹Sðýw)¿kèÜñ>‚þ£)X–çMЧ¹NïØÖUœS=0hï0š1cæµó¸ÚŸœ“7¯ÏÜoÖI)))±C^çŽ×Tžã<ð ÒZæá8¤c¾X?.^ìq>î÷™Ç‚}Ÿß'¡ï¥ÿÎFoôëÏ?>âyоßç[ð½I®=]oé¦g;ág.[ZzÙŠQÿlç®](ðö)ξ†-¦´ò¾ƒõcx>ׯîŽkp�hn ÝçDGG93ö%n‡çw<ŽQÎ~?ç�7§¾òŠÂè¡á|vŒ˜rø4RÛÙ¯xg{ùÝÀã\¿épç÷WûïóàzÖ�c2ØŸ¾^o;Oö3?×pŸÈým ÎôÏL8rØï¹ ·SYYåuÉ3ß?¼÷êü}~ý:Še(®ò{¨®®çî•ø½…õ%ûw5�ý(?îÜï�šèÿùÏæi¦÷Ý¿;Æór§û=TWÛ ¸‡û=¬Ó‹Ýãþ#t‡{œãdÃþÜ«ðû€çô@îОH¿%¶Ãyü»?üÖ¯y�=ò¸­‚ó877·[¾‘nG¤×ÇóŠ1Õ‘#G h7¼€ Uø2å 3ŧ¼¼éžFÁàˆ_(Á�ù�ºZ±;G6{€ÀâÅ999^ƒ‰E°÷íÛ‡�R|)Åã"±…â��&„ á¨Ñ£|_x3Ã4¶ö‚ާ0ayûæ—�'¼±àS…"´ŸûC¡‹…ÁY“`z^>nŠf¸í—mnL m;j@ñ†ðþû¿â|Úï×Sr¶ÄΜ>cÜ¿k×®õ‹âÇd»wï†ÈwÄ¿ð=8ÂçÀ‹µšÖ¯_ï�aoR©‚ÎSØÆa<9�cÁºB1ÃÆÃ]ÆãÇQæ.À­õÞûïùÍR{Áˆ7æ¼ùåˆtû÷ïG qǾÂÚZÛ|¦zÁS¦šMÇq¤D�â £~ðÁ(¤¸ËŽ#Í�� ŸÀŒCjGÞ™;wžÝ}÷Ý–‹>ù^@êØ�ûak/„¸Sâý‹7q ¹ a¦@L�3Ž}äFŽ Þ¬oÞ²ÙöìÝ�ãVä_2üÒ¡ÃZJ쳫W¯ñõ²† a³° ,çg­Ö?¢àÇBïLÙ˜‹TÖŒ^ÓßþÊ(ìcLGØòÑçHa“Çg?Ò¥Hð²�ëÖ®w~]íðžßÄ£¯ÐYÇ›X‹‹BùäŠÇ�AÆd\‡èˆ` ²æ�§ßðô¡ì‹ìÛt^²�E'Nø¨OMØ6Ï+ïÅ‹ûÈ�Ï?ÿ‹¶.SÒ‚ãß×ë[H�ÿÐE–|ômìÒOØ9ô»«¨ËÆóâ±G÷~°éê5¸Ñ§8»xáb¿ñúÊsœ–ù&ˆˆÜó%HÉÅ5‹Â+ƒ6N�@îùÇcÏãÃëÏ_žC.”bÝì»Ü.�¬y¹q ý•}¡§©óq¤ºtÉ2ïOûàÖ pÁ�ýwöÌÙ. ³®ÛÁbÍì/¼Ö3�f`Â~·Bu.¾(hß/}½®5w‚~¿�s úÏóB´‘lîØp‡å ]í'^78Š#÷ƒEh)–ßs÷=ÞßyNÝ(È –-B*9×AQ’ëä ^Nžó§Ä ž}$HIã÷0¯Ç�ÇuèC< ŠÂvïõv2ˆ8|øÐ5¡é´ sl$¦‚³nÅ T¼>…©®çc_g_àõ“Û÷ëÖÍú7¼^Q°åõ•íbmö~×ý&8ßz{½å÷Q8Û ÷8óXò»ãÈÑö}û;XpÀkøñû–÷¹9¹þ�Éï^_Œõ4× žS¼Ïá=ëJ’37¡P:ç3ã¼7àuƒßo¼_ãÔW^|¸Î÷`gÁ(ÅÐzðAy?vö\‰ ‚ÉøžâÃ"~ŸSŒã9Ëëï]Øÿo[p›× ëÍùÜSßèé³p£p¿GØôÝÅu¼þóÞp°œ_7â Ï‡6 Fa F-xˆÅ“::øÅÈ>MæE†O¬³²¦ ˜žëZ¼øÿÙ»?¹Š£_ø"KD‘ãJ"‰,09ƒIœÀ9û¹Ï½ïòÞ'9°1Ñ6Æ€ÉI“3 ’ˆ,²ÈéÖ·F-†õììîÌJHÐÇy…væœîêêª_ýªºŽÏa©ÿwGãX@(L9 ÁßäÈR¾+ ŠÑœóÜ`ø_yåÕ¬|<°¯DvGeÔì`80NY�à™(À(’!Ý(yo9qËÆŽ;î˜Í?=· Ю `?;5¾|_€t¨Üðo2öls€»ì²k£/’•Óо ý®»ïj\xÑ…™!ýÞ÷¾ŸÁZëB@©úÒä ÀL{ÌqI0]síÕ�;ïº3ƒpl:yr¸È¥¯ûî»_‚t0kwôhhýp< (×Ç 9‚„’á$od³ï¼óÎ 6j ŒvšºS®¡9ß�à¬Y³R¦óæ½”•,%kähÙn�ãÑ÷dØyôáÆe—]–A� ‰Ü›ƒ€USíC>4A„ʀǂ(ºíö[Sþ‚?bEeزˎʬžÞ*”†êÀôÞâøoÖÔ‘8rDrÉ nÁÈ—âˆâAð‚ ¼;ÖLàûRÌ‘ž¾MOC¸²·‚Á bÔwÍ(#†T„9~GÏ6Ýt“øÖ2 ªN²7òO�dõ–”�G^ˆàh,M `ÉY»ÈÛM.ÿþ÷ó“ÀtÏ-ƒø`SÆ�”¥»ª}T{øÒRsoÄ�€Ì™{{´}u?¶à®Ð×sÿ|NÄÝvÝ=k ¢-ƒûç¾ûìûd\ΧÝÿ+[#B@Ýwÿ½ ‚ÈN‡N‘7W0$0¢oÝb3†2òÚwï}ó;À‰}ax¦Àz™XpĹ[këë%££R¦µÂHuW/ö ¹ræYg¦}´~pk†,¢ÿ‚ËO81lã6íDµðßJ€%ˆˆ#‡è 9"NØ-ä }µçÜor‹šs7û€cc¼-ëî{îI9>dŽ—¼{�>ÚotiƒT˜2eJŒ£s @¦­ë¨2qÏi{f0‡PcÏ�*2UÀx²Zõ¬ÐD£ï¿÷¡OôÜ[Í[PÍf÷píš`Ï|±Ýø3Èvë~ý�×ç8¾zÂWs�óO|ŠËú Rg„NJ8 ³O=°v>3�oDXK‰�Ûn¿-÷C—>ˆ½ãùt€- |€ Dk£‡‘}é³üÎYgŸ™Ï:ù¤“Ó?#‹�Ð3ÂOÍ�àádòûdïEöøo ŒævüÜĉ[¦žÚÏÖ‹½z"üb‹oµfÆJo¬-Bjò¤mò(±j¡¡Ú[ö“¯puóœn×YE¢€?øçM7¥oŸ;÷©ôcãBÆæÅ‡°_“NW±ö™ù°}d€ä³a0k¡O âTå8¿�ȧ¯C•Kõ²ýww~Na³ùÛé×]›ãò–½Ub¼ôyÞ¼Ó.¨�R=›ö{ç�3‘Â&‚«Ø³þ„ÌЋ½-¸®’�=£ýÂüùo¤�!7Ø6²�á{ìšdBIê÷¥/í�ºlÿ›ÏK”Ý XË>S1J�˜f6Ž�í™Á*Ì:éF§ßuKuëGÌŸ]&_Ïž{šz7ªƒÙÛåo¦ßœìˆ»Óš¸è4¿c܇¾»çûï�ÿ�¡5ð÷bGËýÊw¬é÷>×YŸ÷Þ{?Ö=N „máÓøõV;[ìªçª$õ6Vþó_ÎÍkWad¼lœïyŽD»gÒ¹æx?ýœ2^Ï#Kßeë�ÅwÌ#ï¿Ï*̘/y.Õ½\Ƈ8U çþÖŸø8ˆ{ (øªSex·òhÌÅuðÑ’´¿ý÷χ*aÔ%a$« <-ÆxB6ަ Ђ,@æÙñÀø±Ç›Ùd œ!Ý?ã¾Æ•W^™Y>àO ‡O>õD:Æa4œLªqý12ÿ€Ó´(¼)�òV’+®¼>í§e òÃïÿ°±u�AªÙx:& Våe?ªÐÜjË-ëÄ>7þ÷‚ä‡:}v`Ÿˆ}uIÕB@ù7„Ý]&ö5Ûmoñ}Æøa‡§�¿„ÐPì­cÛÈ6¾­›ç<•¿Ý¬³½7qÄ¥5äþùÏ“08ð€’ü²?�$*.¬M§K²m¡�ˆ#zì„=¦êµ‰³Þ‹êÜç“pã£Ø�#ƒÜf›)©¯Í#ˆƒû'G¬"�ÄÞc]ùAú‡0âk%j^ ²š¿† ½•”}Eê¾c´oÙX BûR%ƒ=ê*ö¬?aÄ&öbo⺰WîS!×ød !~1ÊN®¿[9°‚cÜé»6jVA½z‰7OvùذgªÄìßóFM8bv`HIIo´N0;S:VÍ–XxN0¾(®n £ný™–ä§D’Z2ÖüØ­—ÃÏŠu'ŸÉ6}û $Øî¡\…|aCÙúæßšÉ�uÓ†´V�–{ò*â}Þ…‡<“%e ­›ŠU1 ÜÆ\ÍÇû¬Ïç´9EÕÙùçÿ-É›v„{›Ç¼ã¸»ê]Œù¶àh¶©<§ŒÕOŸc§�IÌ…(ññ–ñª†½…ŽAlör•·—J0 &sÕ®F7Ö$öbOô¿z‘Oÿ{•ÿ µ‹ë$�—¤ýUÆ[~>%P £. £»î¾3o[倪† è0À޽ᮻnz‚À"c*«Ä {«ÂÜvÛm™Þ{¯½›o] �ôFbÙ}àáÑdevœñßn»mÓ™ËHtº±SO;5ÀåKQ)²w:nÁ«ÿV 9'ð Œî؆sPÊ�/ÈàÇŽc}÷;ßˬBAÀêû*„%ª å¾?!@?9èå3+Íë㎀ÄïwØ~‡ÃŽ â84ÙásÏ=7�ýÿú_ÿžY¥Öù ¬_Õ;÷ÄX×Yw�Æ7¾~R�[f—ì´È-c\߸ �vM'd«Àk  ‚£ã`d .úÇ…™AÛiêι~*e8ÎyáÄ‘:ääpªæR#ºè¢ ’ˆ“I¸!@<×<�ÿÊ«®È#.Ö1$[H ÏŒŒµ¿ïµ×^ x«À,`*Y$‚Úg#àÀU/– Ö—y  €vëm·„žN@ „yä—SN­òìÿwcç �vG½d¾GG Â î¼ÓN�¾�'À�Ør|À±$ÍþÙšs;²¦‚Œ£–u±‚½1cFGsD®5gÊÁ‚·ß~[óHV<—.8�DåëgP H¢;‚Ùv]CÚ­‚RÁÖ}È:�OÈб›3Î<#Ï2�oFUkBõ úG¬3@A~ô•œ�Á#bäú8êh>~�`E´ÂzÑW [Æ Yö‡4ék©¦BèlôÕÀÚxÚ]–9’åyçý5ƒez†ÐT žr-‚øT‰†äjÌS¥š@‰. 6k°b+äñ—ÈÒ/@î9£ ¦gômA¸¨Ti­0rÖ¾ûvoïüýï„ìŒÔCàÏþD³Y•N™½"Ã`Ù‡Ë.;*«àTä (ôˆÉ”^©h´÷¿ÿ½fÝe‡ºÙãÆõ¥½`çN ;,ðå#¾œÕšìÿ|˜$Ãc!;6vÔQG¥>{.¯ÝE—[õ ‘-(óö7äÙØ³3b].»üÒ´ÑäDù'ò:Íöýó¦6žˆL·ìòİÇÄ~RIÑ­]C€"Dºñ/|ƒ9½§ýáÔ´ìÂÀ¹šÄñY•‘Äq¬ã¾ûî—ö¿�¼Ê¿ÙÃÖÁÀæ³ïzªìøÉ•ߣÈJä�u’hF Ö3öñïNù}öNúñ�šz"0sÿ¦=˜>[ |ÄG&i«�ݨн¡|N°Ãϸ×ÅÑSq¡½Šq" ÈÈÚ9d/ Ü;ôðÔ�æ1Ò·ó»ƒÙ[6“mwócèf�w Ûºì¨e“4Bâ§×•[�o|ã›y¼rôèUÒî²½ƒUXKvÂ>_9°Èf›ö¥�•l‘ü±ÏËfñËËF?1z³Ø+0¬yƒÌ»OË9ç»ü?÷„ÿÍSå’Ê`råga}6Ùx�»õbWº‘_Ôé(®ƒa—¤ýÕiõwK¿*aÔ%a$�H䣾|TUS¸ Œ€ €æ¬³Ïˆ¿¿�Û!Œ7ËM1ÖW_suãñÇK$ càúúY[>«Ws„Òßÿþw'x²gÇÔ8­ÁN§k ÃR#�˜’a8Þ‰²RÕ²¸gG¦×÷ÜsÂ!¾ÕØo¿ý"™šA2Èw—ߟò» ÷�^Sã÷‚cŽÝ<2ª�-"¬µgÅ * �Þ�#2óÈŽN§çùHÉ˯¸ôÐÃ2ДA^s­5sþdíOFý×±wUPý弿$`È"¶Æ®=6uÎZ8.h¾3fÞŸŸ¥“ßþÖw’8BJÞrk“¸htÂç�AçyN¬ù‘øn$âAoG!5ÿ|hIxÝuÓ³ïY+a$kØ‹}{0ˆL�àìÐ?{›>!€^r¢{ì�ét¨U¡ÁÎy}7à»Ür£`ÎOp‹ì¼ä’‹S?¾ÿ½d•žŒ¬=×ÍþcïìÍ&1~NCcóo�üíÝ;‡}‰&Þjíä[dNŽc ä:Ù®þ„‘{ VcØ4dãÈ{˾Ÿw~T>F †|Ô9bÚû–�.D"•-E>~3v{– ×®±‡æ¬âQà9\ÿ²sÈeìØµóÈëŸÿ|NV9K±#È(—`ÁÑN„è¤ C'‡?ØvÊ'÷@º€˜cçTÙ'‚"Ä÷ø�R‚mÓcȸË쀵PÛ‰0’²v+ÕdÆÇ °Nˆ€Ù$ËÄÿøÒb¯ú¹³É’%|?{uè!‡¥Þ ¾:€Ð½<A é·Šª8ä3ì÷C±·²ä*SÝ<‡?êz�ÃŽ¼¬!’àìsÏÎcÕ?üÁ�òø:§ ö¨ÐÓ�ìaYçBÍŠ¹ÀHm½¯ÂìC³ÏÛ™0°¿Vª7øGk+èмì#‰>¨?È¿!ŒØƒ‹/þGÿðÀŽwñ©ð‡ &ãÇà†éñ¼âç|Î|èM;±؋½ETXO~Ü>€ �DÂh…Wˆ £WÓNÀ…ÓÃÞ«:úÊq_ÉñÛ·>ÃVÞ„ÓY�ßœ??‰Ü©;6_ ÁÞ\páIºÁ[L˜˜GÖôö#‚V d5TO´¡$Rh]ü_·„Q·~Ä~>ýOL[�§ƒÈ ‰‚pYèhâýAÞtóMYyõ�ï|7“k|…?í. ^d‹*_­ì/pÑ^‚ÄGýÖàb‰cãº�K0Ûeíµ¤PµèÈ•¤�ý¢Ê±žc�¬� UºÀ¿>öN’ž²_é áÞâšVÂÈÞF¤H&Ñ#-ŒUÜÁ>ÂcVp6<,1éäﲇè))‰¦ÿ“±¾•Í+éû`UjC9²ž7àÿŒvKB@IDATǺ9ZgßùoÏtTyý°5»G† ™8QïͱŸº‹ýÔ�|º%Œ–´ýõ)aÔÿøÜI Fa€ºyKÀ,öõ�kü ÜŠv00z—œrêï3ÀÚm·Ý3Àj çPrvÞbó-;¤’È廩Œ↑èÖžHtº#Œ8�� Ö—�u³6ÿAÆÊøï¸ãކ€?9pcTÍ4éÚcAÂ*«vÄG}ÓÍÿLÑ;Õ2Ç­YòÖŸz "Tð!`D¸M_;ñ«¹×zÑ×þ„‘¦µ'Ÿô­¼VÂÑÚ‹}SI‚0’õD†ìúŒj‰~‘i!Œ�úÂÆªÄÙ}÷OŽx¾iæ¡(”2**¿›ëƒÔ´v³ÿl ÎþþkI³�Uœ @‡£G�YXi/“«žYÖ²Ó¾0ÞÖ #öú[A:¶l²zfÜsèʳ½“Ãç HTÕ¹;|€JÓoº!Éú„ìÅ®‘%ÿе‰q]tAâø«@QÈ_iÒzµÔ|à!I< JJÀ]Ö½ÿOûÚ[{dŠe†92æ*ËE–4ëÅ�¥žx�#rgãØ¦$ŒÂÖ±wªu¿oÁ²Þ­W9âè(s»Ï±Ãü’ÀqN�¥ˆ'‰ Të%pEÁ’6ˆ3v› ÅÞöúþ¨—uΛ7/÷òÓŸþ<õØïŠ�i�s»¿ÂH[ä¿×ªçå;ô‘z"š½óO*ÌØß¡È«W?ˆ$YH±ß£G7¾óíïdeµÜü]Å!–­Žp¿ñ�Ø—úúÐqDa;ˆÍïÅÞ\ð ~èáIj{�43.G�Ìç'?ùYŽ«u½]Œq;‚µK�©l6’ž_áOTË»ì; öÈþ1¶¯„ü»ªäM‡ñƒá®þ·êÖ�¨z·ÖHÙ_ýúWyœI☂…T¹ºœ8@ûœŠwMòòãŸæ ZåÛ\ˆ3. {ðì3Ï&¶D4“çüùofU3_¶Gø=²´T´ñá*MUÑðùoEb‰Ç?5ߨì-n�¨<Ý"í ÂÉž™D�x 悽¬;¤ºÈ<è�ìOñ-ªÌìÛn¼!?«}¢w*„¼ø‡Ÿ?ø�Cs?ÃÜÆïBÜü9p ’ Öá+s®a3àí¦])‰c |6¡Û‹?@ª[cvŒÜÜØÕõ-ö¿UžÆ`Žðp7òé–0â–¤ýÕ­Ìë÷– T¨KÂè‘– W___Tbëø�uöYyNW–€ÊçFÃ�¨2)z¿…‚m—’P–zN'oWb�ñ÷FÙD@²Ó…¬ét$M@ÇÈ#8àÀ¬z)÷c(ä?üñX8²¶ýöÛ§ñu–½Éð;gÿaFÐ2ÞåR |ÜuW³É£Š™|ÿÉÆ÷€�a„T¸òÊ+"ÃñX:�ñã7ù’Ãæe ù³T" Ô98�€QAN€³óÔ2½ÈÙÙWe²?sôËY¿}÷Ù'A�åq \<ƒœé'Ì9kÂ˱¾Á£þ œÀüâ /fàðo?ÿ_yô10Èÿ F5�ˆœÇó^ p¸Gd¼¶O²…ζ^ͦ™×dyòûQ±£I…Žfҹ㠎oªò8ùäo%`jÕ—Ö{µû;�5 qzdê4W<âˆ#²bK@  ^•Eö Ð9®o\cïÈ4 ÆõŒ�Érm¯Îí¯ïþ�\íe•5Ž¦Ù‡š±;¢Ó‹¾ö'ŒèÁ�~ôã€P7”Kpe�ò[ãh²é¤ož”™4ó-²T«:QIô»ßý6ûbLdÜr_ÇüF�ƒ#Ý×Ûƒ\’=n÷� Â8‰–8B„(m%Œ˜½Ø7=ÁFŽ… ìFŽ[š÷p®ôO*ß¶  N…x¢Wdf¿øåÿd†Û|AsGt³ÿe²Žsÿ|nl{ #v×½Í>VQɲJÖ¤u-Ûͳ)÷OŽ8úÎ�ô“|m±±}Rå’G£¤Þ³}¾Ãß]ì(и&*Ö ²Ie9÷bר>þ¡[ÿ’{<$øÜ¹Oe?·£âmxì ›wÇ�q„÷¬8r¾æ¤oœœA§€LPÕéBŒ�ö‡SÂNÌËÞBŽñµë‘¢ÉQ>�‡ Hˆ,Nˆ BÛ{lºÀq�=âhET¡´^P:;þ�¾°u*P� ù0{ÛësŒ¥—uÖe$ #G3Ë£vÄriꌴ±‡Æ^Sé9Tyõê¡õl„=BTÂï‡?ŒŠª Z‰’b�+þÍo~�•ÇG¥òÅoDz;ÂHÛ‹½EYOU.ˆz¿ß¾ûç¾³ÖÞNŠlE,°+c‚�øùÏþ-qF«ÍÊ#sgþ©YI8WõßäÉ““0WÅ —²Éª '†=—„ÔïÍñ@„ƒ€Ù^.2)~ÍFò wõV·~DEùŠ+­˜Gõ$Ž‘(ªõ½åU“ïb¯Uñ¼Ia-nVa´ö:A(~7ìzó�túEµ»ØÈ›o¾9pÑIXK�|ðÁ!Û‰qï2a òÈ‘7D)ü¬b˜ì]…0B²9Žp"³|I�¤Ô[ËwUcÚ/Ö΋Î8ãOa£ædr‘oæW‘t‘ 2¶¹µÂÈËSèÙ}�a :½ß~M=ãwì‘+®¸<14Ÿå�²íˆ'W!Œ¬ÌF_šMÂ'„¿^ðvÞžì7U†ƒ0yÓÿÇç8æ‡(‚Á%bAfhGÁ’›pj7òl¼ÅulÚ’´¿:ˆ´þês �JuI=öØ£pô ˈ¶^'MOUÜŒ?>�;P3'2¨ÿñÿVà !8LU…I/÷`•_ Î,g�ôI…Jù\ÿŸ–r$M×='a´÷Þ{§ãn½‡³ègpü‘%®‹ã÷6­V X´#ZJ‚óþzýY~òÓŸåшáàÀþº z�a$ƒ¬4œ8E²]f²_”¦Ïˆ„r$MÕ€£R²µRŸM"'ÿ{Aš8Ó d!J”Éî¿ÿþ¹†­G(.%0'3cåd¢Ž»y¾€š*�5ý�þ÷ÿþÿ2àm]Ï�þ>a$ëô›ßþ:K¦:ð ¬ ¼9[Þz•J,•_²œ#㨌ϲï÷G¢ìë2ï¼wsÉÌŸ}ÎÙl 1UN([ž„Ñß"ó‰àÛ2ÖRVS�ŠX ¾”�·[ç’Aµÿ½p´ð§?þiÜgëaF­úÚŸ0R‰óóŸþ[ê°(àÊhª ›±àØ‹£rí*J†ë–&ÿçÿ�gûõDyå4à‹0hô ¹gÍØ®�žC÷#ÏùÕo~•äh+aä9½Ø7{ aD§3D†Ê�ÁUY ï» Oêg?U€ù?þóÿ&(üÆ×¾ë³[êªõAŒ wÿ9ª$ø³7Ù •Œlç²q?Ä‘ ¥†œ#o^4©:°;Iý £�Öé§?°k/ÒãÖÊ@r"Œ®ºæÊܧßÿþÓ~XÛníšÀ’èÖ¿¬{BpOõÀà±?~\ÚXDæep Œ¾ý­o§?l Xû¯ùo`ú7¡§Þ* RáØÎŽâ› 'aTˆ¾[C‘Bz»M�=ë‚hl½ .°VpÍ“ËPìm¯ÏagzYgóIÂèÅyó²i»=ÞŽLÿì¬ ÝUþ †5KXE^½úAÇÈÃOŽ;ª QeÓî¼ÿâW¿ÈÊ~óÈ香iG©8ëÅÞ–Ê@û– ‚ëTö©6qÁ50¬LýÛ_ò˜ÐÏÛ$¦2AñŽ^NÙf»ðóÍc¥Ž¬¹·J¿›o¹)ý´Êû›Ô„y ù£ 8>ÕžaQ\ƒá®þÏìÖ�l·ÝvI Ý~[啌ïKز].>H…�}ýh$Zá¤cŽ9&í_Aí.±AV²�£jTü¡’»ÀFîï^^xA&š4%WùúíH ?³�0ºå–$õ=<àÀÓWˆ øÛR¹ƒäeoøCþÒ|4Ù?8ž%6AŽIDÀ^tA>£Ií–Ä6vúŸþ˜ßÚŒj&¬CM\~qèÚ3éÙ5MýK…e!ŒØs>j“8:É>ûœd$9ñ»îíï…�k'»áü›£’’!HúSƒø#ƒv„‘ª,ãº9ä9<ùìÞôG!ïN×@q�cÏKÒþê4‡ú»¥_•0ê’0r¦«Œ0:è@„ѧ+Tœ þkôaéÁš·F€Û¦›l–¦0ú­ê”B½–2êÍÇOH'Þë‘´�€Ayv!Œ€+ÆxÊ‚LQ!ŒŒ1ƒÏp æZ/ÆÕh™2M-Ušxš`Mð«QóP›^·à#Eå‘¶‹.Ì#TÀ›Œ‹Þ<Îî·^2 ‚¾;î¸#Þ sE½æŸíD)U½êš«ò>2sÖÉÚ8&ìhš§2i¹p`ÝFˆ(e¿‚÷GÃÓ'ŽC´k¤Ìñ[SUl#I¸ò°Cãh¢2ò‘2N­×ܹ͌·’y¤�¾ J‚��¡òÖ{uú»ýp ÈØžÜ >!‚¼Ã;,Á‹ã�ˆ´\|Q’zÖeâí×¹”vË_xa”„‰ø³8"1i¨ô¢Z“öV})ˆ–fª/Ö‹’í¯žøµ< Ú*¯žÌlÿý?ÿ•ä"biûˆ‚qàN„QéiØ ®íž”QÔ/#°ñF°v„Q·ö­I¾ØÿÀ$Œ2ÀPµÊÂß ÐW�†$Pad� gZ/ò*„Ñ×[#�R7ûÏkáûdŠ8V5%�²—ô�A0;òFOeáhü°;i”þ ¾Kî�Ö±[ÂHõ£1wk×Z £v�g‘ù@þeõØwÈ[öÖQlòA ±Ë‚bGZüA´ åíhåyÄ_…žêµ¡gŸ£ÝíìØœ¨�~Ýô\fEcfÕ;‹™0’`Š �9½P«Bq„§õ*¸@3mÉ�¢ Pß’¡ØÛLdõðœùóç/$ŒºYç‘&ŒT.Ø?ˆe8IÓñÖ ±ÇŒ8°¥*íMVù<yõê³IE «' çþè‡?ÎʰÖq–¿7õõ—y”‹ßÕû’¾ ¸;FÝÚÛyóš­ .̣鎰Ža„xð"‰�9�S¼%ï…ð«Ö��wJ• =Ÿ¶Ç´ÄÉ*ŽàÆEquK ×�À«ì9¿ë-©’i¿ªLûÝü…}ÍþÁx*BÅlÀ@Fü´£ˆúÁãhôZÂLï"G’¯»îºÆmwÜÖ˜ŸÝ4ÖQé8®çÃmŽ¤Ý²€0bK¾û�ïEåØn!û1‘XŠÊͨØá�̾‚©T0ëÍiÍØasø ¢Û^“(Wá�02ºdü:*çøTÇg×Ygí°± ZlÄsÈGSRtìØ±é³��^YâW!ŒÈSÜe¯{ìWòäüíùäXÆ[¹^uh¨„Q“X}&ýópäC~CÁ7FÈ×%iõ*ïúý%[•0ê‘0FïÀ¨ÀhG�÷·f…ÃX£¹sŸnüò׿Hð«Á®ê#¿_³_o"Ye¢ú9¨Dr�!,wº2,¥ÂHŸz4³âb0(÷èÏX_óèÀ?²!¡£oŽ�ß«ü3ftF´õx`æÌƸУÿ·Oy¶Îc ¿Va¤ASnÄÙ>ûDÓîè³5!tÉÖzššƒ?üèÃpêM 3¤Rg! Ÿ± Âè«ÝWyå5BFf pqlh¿}÷‹g¾Þ8ã¬3ò§ŠYyúýD蹊¥Þ@—Àª¹Î}­ÃOÐ:;ÖJ&ùŠ ¤TFiªzI•�Œ7úú¯„Ñ QaôóX�ÊeÏ裡ÊÈñvÀ<íû°\…È‘üõ¯™ÇøN:é[Ya¤¦#mM¢¡ý8²)o�Rö�*�y»ç8:<".~÷»ß$pl%ŒŒµû¦"'+Œ‚9`¿ Œæ©0Ú9+ŒTÛ´%Œþë?bNó_ÿj³ÂˆŒõîºø’î÷Ÿ=lMì…@Iò IÞx59{ ŒÒ=ÔZlû@™Ñ%ŒÚ¯c·„‘#˜½Ø5ûPåI·þE /`wN‹ ¶c·Çsl‚aÛ2ñ?�Ï^{íµ°'SÑÿ�~:"@OçÝwŸýÓ>´³c…�v$M'¿¼8+ŒôÚ‘™w4V²†}Ó›ˆ=m½à=íô ØÑU §wßi¾I1+:;ØÛ^ŸóbØ£^Ö¹?a´ÂŠ+6~ö“è‰�S üZç;Ðß­+;Á>îGç%ãôˆd·Z/ýw$n$Šßt³MG~dV· Å?õê­£`™¿—ð€ó~xHÕPlx©½ýöÛ2°FÌuÔÑ ûm©€kGÁ1½Ø[v®Óz6áî+ŒÊzdà6Âz±ˆ<ö°I¨& Û·cønGz‡óZùÖµÊß îBV‡Öa|W‡»Ú] Ãô#ª ±³Ù3‰) „\»ÞDï#ÎÅüT'àe,NØÏˆ%þãȨ솇]sòÑð —- àm¿o%ŒØ�ÿóïÿ'÷aÑÉVy”·ª!„$Â}æ„ãOÌÏ#ûØf•h~¯gœŠ¤&a´kFÆùßQùlÜx*ö³—S`5W!f�TH½ÙZ{iÂH+�e‚ð²×û÷ŽmïHý½Œ‹,O=uà £nåÓ+aTðø’²¿FJîõ>K¦*a´˜ #½Î8ëOé0‘ˆv½‰Ê«�ŠÒp(€jQF£±'DPëU\UÎWs|'G“b‰¬‡ò§8­ê‘¤J¤µ§ 2@ð.“€°QÂ; a䌀KÏgâ‡r͉sÖ×E&!”!š¼µÄøZ¯2ŽÛï¼=Îxßž=5F2DÆÆñù¹j4í;øàCÒQ[ÕEÈ/`ôÌpè€Éîh5nw$M £B- £Í¸a!Ø´Ž§EåÌsÏ?ä³Ü¾oœ·¨­•%Ç^wûP8aãÈñ…œ~ò“Ÿ&j�Ç@Œ02þ³Ï>3«l&OÚ&KÌ�’Ò4±Ü8ç´p2`g(€¼Üg°Ÿyt,ª©ÌWæÌŸ¢Â gâµµ«ðøZRÛefo¹Ìv!²ÌSÕ›@‘Õ�é«ê�&!sOÞ²6!€]/ú:R„Q!`Hæ¹F€Ãï~÷ûøÒ³î ªWÄÓ£™²tûK‰ºàPîD}ÒÛæ®|ëŽÀ¦Ýsìý¬¼Š}|fè2ª•0B`öbß[Ÿ%a„Øe³½î?û¸ô6P¨Á©7Q"‹ß«ãÈ›!3Cýj|®Ýµ¨ #ÍÀ{±k½FŽî¸TfzM¸Ê¯YvªMéÌ«Q=3{ÛësT‡t"Šü"ŒàoûsÆÛÀ\ߊ£‡»E/•ìY!Á˽Úý,„‹èQ&q¶?Š€Ö>D@^rÉÅi·` É9Éòмzõƒtad¾ŽH{®ý®™5Ÿº3r•ÙzÓ¨¸ÑüX#•Ðív„YöbogÇ~ë´ž½F£G¯’ ö˺ CTû»K5º£z‘ª4ÆÎ:î˜ã2è¸ó[o5m©Ÿ'E?òæmþoqFÈKÇËzhV¾-¡»OT²;>JÙ3ÄtÁ‹o„¿€ùÙ¤Ô‹ØÓæ9Ð\›÷ù¡Ã3RÏ¡GGE2½ôµ™•ñlŠ=Ëîý`ÁË Ü³£M£Â¨SK$ßGœ‰¢7/ÀÝŽøNœ¸eêµçÜÕ…ÿ¸0ÇÝÚÈ]?å”ß§}[mõÕãúÆ'VU�dO;CK2WB…ts}Š0 ¹Áëö‘ý¼(.ã)ä&2ˆoüÓ§g?BvFe¬Ëo®ý)ß}÷½´Ëˆááɧ7ÂhÅWèj©¶®W•Àp%P £ÅL2úû(U¤j¾xÐAe£^ Q .@Ô¯ÄëÈGEÖeï/íŽ`ëü,ðÐé0vzK£ÞË‘4�«cHk¬¹Fµ*G•�-l†ý²¨81ý'|¥õm´qã½÷ßËL›Œ‹ÊÿÎðçäÀ)F¾ès¦ÛD&¡•0zB…P¼=°ÖÐVFQå`ÝÌØ5_O=�ŒkÆoˆ§�"[«i(ÂFÖÃÙm䇪½‹ŒñMÈ„‘L�7ÉÝ}÷�îka¤WÌö‚VÊ`PõÒíxB�#sÞ�ÑJeæ;ŽRY�ÍBNœ�l"ð+°t4�œž�Š+Ùª©;î”ÇÂdd÷³"³tUT('G(Œ$aä Ò ðWNŒ4ðZØæZ­Ùx7_ý„èÛ•W]´æ2¡Ç‡då ò“³ h�úÿ;9Ò•kgžuf6¶/: Ì´iÑ‹*ä碋Žì ,è“ï 86ël­Tï ý^cÈ ã7Oâ�´õ¢¯#E™³}AÎçDïÕôQ»m웵Xù bïÆoL"U�íÞ±¼5 ¦óH±N„Q9j¦Q»#xóæÍK�ö{øµ¦€ß�7Þ� ÝÙ(€¯•0Œ{±oöÿgYa$#Šàq4®›ý§I§À�ý¢{š¾²ßz.è?&Ð/À[Ÿòú“¿yr& èò@ö}QFŽ,ôb×FŠ0z.HKG"ïŸq_ÅTéùvèÿVáÿ4%×`•ŒØÈ¡\Èdo’èÐ nlÈø�x«Ø6ÛLI‚‚\é´ýåèñK¡÷’S§N]¬„‘=Êž²ûŽrËàïoGe¯Ø4�2; Ç\ À×7.AÇP>üð£!ÙÛ^Ÿcw"Êš DijŒÈXýö÷¿ ß:?ä|Dökê ²Þ@²(—ûÂÈ‘!䃠õàNÿ$ØtœŸý'Ï+.¿|¡Ÿ·®ã#ùÁfÅ?õêù�f…Ñ-IìX7kŠðGÙw.D;™ ¸óškbŒ€F,k;ˆÝîÅÞzn§õì•0Bœ;Ї¨Ô·QÐú:rØÑqÄŸãHªõÛxã�‡9º¦º ¶ÓÓË[³Èc0ý(zÒÿçâ"ŒŠ�ïþö÷¿5ÛƒÜå—áG^%âàú¡²Q"VñnO›ç@ ÐÄÁQi­ 4òˆ];âˆ//ÄÁs"ñªõBŽ"soÝ+Ëp £‚Côz<-ÞŽêûªµ§ÑgË4 Ö›oþ×·¤©>:ïoM;ûjôfÕ¿oŸ}öKbPÕá[ÑçjvŒYe�2L§!‘]‹›0bka-Þæ?Îÿûù™ÀÈö±/ùzøG5¶$ª½h=º‘|Ýé(®Cw³¿ì³zU W•0ZÌ„°Ëˆ# þùÏÓÈlAY㙄‘ ¢�3ƒ|qå° DdÐ8“�вð–‘êaÄ!0þÄ–q<hÝ0Œ¦¾=¯G Ê‘sË…³sKÀÉù‚Jéï�y ø…±cÇ&A¢Œ–Ádp½jœ­\õ'ŒšÒ»ó>3㨂ŒŒF~#ÇÒ*‚ ζÝÕ ¼^ͦ¸Eóký"Æ�ß<�0"#ø²!"ðÆásJ~F*�€›{âµÙ×_}Ñi{ì‘8šù½`˜| �sWÌÃÛŒ4s”‰i%ŒJæú8Ö\�ŠŒá„9ʹt*ý%'9t«­‚4 çähË3ñ{ rN8Y×HF挄ȽµH¶ÏZ›À÷½Üz(}öv „Âᇑä' �·[£NÿVšÉ.ŽF­=+š™®]ò¸Šq¸�2–ˆYP*¹úBW�ÕÒWXqÅÈ轞ú*P¦3€œ}FÌ¡})ˆ=tÐÄ–€Qõ–  !ëú~€,¯ÏõÊÚ·£êKµ™ýàñ^Ó T FyŽý†ˆô¶8kJ&Ž ÚŸùœXóçÍ‹ßÀ�£~H{¦•0¢'½Ø·%�0ZwÝõÂþÎéjÿ5 £¹¹o®¹æêÔéAø Ríã�³ì• )¼Úþ®<‚ú•ãŽ�½µ]ù!‹š0bÇ{±k#E}ª }Øgº¤‚FbᤓNÎý)XjÀøòË^^ðX�Pw'¡ŠÞ>ö¾ 'd¯Bìõœ°£�‚77I,Î #ë‹Ìa3KEŒ ÒÛ€6 òZ¶·Â·Ì�ûT’ææo ìÀGC$Œz}Ϋ=FzU±3p„£é d¿·ÅÄæ+½Ù6ÕS�®BÁQ’U%i IÅv[Wd£}üÈÃQ±µvTG…©}&1‡ŠêÕÒ'„uÅ—gÕµãVˆXîág¼EËÛD=Ï+Ì'Az@$²ø"×@½t–�c‰½ØÛEM•·•²-£‚Ô�sëðMð./[°~S ÈU^Á`üÙùï/yT&N;á»N:ãw‹“0âG¿5ªràó�ß§Æ@4ØÓÈ8K’A•þêݦÕèQF’î)Áƒ@f×àK÷• ƒkí8ˆ¾±´îï2–ÖFƒU|€¸9/*¼ao—Uª}VBDŒù ¼ß¬0jVИçMA$‰OØYº°M�Xöí˜Ñ£ïÄ8a~xž¤í ¬kº7aÄ'°QOE<â hüƒÓÈnöŠÿØ0p䏸é˜49»6Ýȇèt ×½±¢ Ãáî/r¯W•Àp%P £ÅL h••?ÇG0ñÊÏ5”ä/Œ³’{g}kŽmÉ81HœH§k Ã2R„"Dëh Ç ˜ºï¼ûvŽ_ŸUÂ)b°•nz;À�`2?„�sÐ�€±À‰®œ]vÛ÷ßyçÝGk…‘Ï˪¬Adp|yö=ç!‡–ÎKßÏkw»1#‚dæŠRè¹á¨TeÈö{9‡;&Æ,k£é Ë‹0BAÈ$Ðq5„ð£´vµBdO<ÙcÍ8k@µ•0j6qvœÌÛ¯¢;d¸J8N÷×ìRé¾òô{ï�c šIGdÚÌmtè‡~G2x€ýÉ #ã§§šÁrôŽ"`bô3&œÙ/Aç#h‘ý÷wz�Ä o·F�þmN8n•@â¨Uhž.Ð�‰w£9ÈsüŽz[9~oðeÌñ[ëÕV[5{rí±û´ò*ð¬[/ú:R„‘1ø“=†Âf(ݧô‡Þù�KÉ>¹#Mµì†c>ìÅP£òœyó^ÌêFúM7Ÿ�·{-ãþ±7è7’wÜøÍs\{íµt¯ö)ÂHÓ‹}û¬�¤É úöc7ûOE€ ‘�œ~]¼u+lœ`ˆÝ±oÙ˜>x?÷²7ÞmµåÖydUU^§aQF2Ͻص‘"Œ$ Ø4GN9õ”ƱßׂH•(¹¡’EöEó~ós=®�ÊTÄ«àE€¥_{Ê_¬°‚cLAΆm°V[D�¾ÅI¿Ä^•æþü=ü(ÆóaŒÍø$fŒWÁi{ì™Ç€ý·Ï ÅÞöúþ¶SE ™»ª0*½ª8ü§£Ÿl›½á°û¥’·ÓU#‰5¾G•°=ö �}ä'U‹n½ÕÖé#ì3¶}¨þ©W?hL#ã�öR²GRÞi&£^ɵeé5ÿI×íÇLÎÉìˆ0Ò§{;{ö¢=’¦Ç�jMoêº7ª•ü[g¾ìaÎ;»í²[&Ųº7•Û *Z‘í*®`Œf%ùÐz]õסÅMqžÈ�YA’ÜtÓM™ z/Ú1؇YR•\&nC�E0 \“ò µ»Š?Påëº ¥ù¡ûôÕ÷økú"Á·×ž_ÊŠJd[á.aTðûtÇÍVpˆ¶ðÒ˜ ô`V¶•ïÓF£•0‚M�0–…'éœ$—ýž v\oÏ ¶ìW2po×â$ŒÌ5í×ÙgÖº7í¯7‘±Æ+ž1. bÄ®·ªàÒ.‚<º‘O·„‘·Ñu³¿Ì¡^UÕÀž0R΀éßÁ*‚{e‘í®Òç™`Ó?øàà ÖÏ3ñÊØ[¯'�bd8@`HMÀåâ8�%Nññ0ž* PÆJæÁýTœ$ÛÙéÁ Jy¶Ê¥¨ˆÀd„-2ë hÑOUÆÊ’9ÁMÿ&Æåm1k T¬¯o\Q)¯_m¾]L  ä+€-G�lÑ+(°î¸ÃÔœ;V.ŠÌeî廲 £â»ÞÁI8–ÌË8x“‚#cãc.Ÿ57Y5G¦d�‘aØ~o›4ir:Ecët™ßœF3gÎÈLç›èÉ|¬J÷4Ȇ œÉßëâ,þMe ⋱~ö™grþ´Š¨2ˆïëË ¤’Q4.Ä—>DÀ䌸¿ A ™ëÅcý9g€€òðûþ�0"=‡¹ø'øÁ5˜=ëÖÞÒµNëI÷aX‰ ­ŒÉQçþ=P¬¡&þä «‘µàß¼‚NúÀÌžóxè*”í%û‰(Áèˆ{å;ì¿ÊØÆ¾eÿ�À\5ÆvsÑ· .¼ Ç êÛý:õŽLîe ìC;?ÂFÀ¥”³"qõlØ"Ib¤¦õå7Éj§À0z‰Jâ«Ü¿ÿO>Æ}ad•ªp¨V tÿã�>Êï³a|ß®AÄõmÅGeÿií`mù GÖì•NWÑç‡fÅ„c=ŸšûdÓŽÚkÄñʰŸb#GO§MÛ+ˆÏIéë$‚ù0rPEþî~ªné•Óü´#näK<¡ݵ×^:1'õÆþØ'ÒæÕîR „¼qÿ·ÂžÓ·v=‚kTõ•„#ÙJ˜©²®�.¶ØÛïÈ�m1G{j¸ò ß ×ÑŸnöW·û§“,êï>ÿøÂF€.‡¨Ñôr£– C»rf3×vWaöߎ7<$¹Ÿc(¼ÖË™\ C¯ ð‚Õå@\I|ÐÊ 0j#ç¸WŠJ@ÞµÂf—ïµ>£Ýß9ZÀI[VÆ}Œ @`?àéßT‡ôŸ§×K#Xß•¹ãÔ`NiôèU’P`»‡£=À7ÒÇý|ù#ê/Ÿ#só.œéWµ"Óä9š=6�å2Äqß臫@=‡ 2ÈœdìTd# ŒtºŒÃ=<ÿõ×^�5˜Ÿ�ð­^fÒ<ô’t Œ‘HùoáPRo‚¨z-€ú!s€ÞÌ׺yƒ�5F|‘—ñ›_YGÏçÔ¬—ûfÖÈý‘ ôÐïó³näežÍñ5ïç³Ægdž;Ÿþ²po µ£BïÒ‡¦ž¾žrz3Æšo7Y0 À?Ý£ÜBp�1�ÒJÉ9ôrŽW©0"{'œpbfåè5ù´^dÚ*g³9äÞ ÒS)µ1 éN(åÝê+Ùx6À‚dV‘W2|ÆØœåyý¤÷î—zú€45/Á†yÓ+ÏT-xY Ï0ÏáŒ5gz ˆ8žé /k“�u´²SŽÎÚgëÇþ¸Z÷]·ö�ž7í×iW½:\&o¸ÇøÙ1sI:†m½P?‹œ­�RYâxc™Ûíþ#s{UÅŽûËÛñßi#bMVd#Cçè[±ïz tºÊú¦Oì’Þ ï…íAê³¥žQôš. ÇÞxÃú¾²�¼²®ÆÝ­]£7½ø—b7܇íð*èßüî7XzÈaÙ$X0‘º×IPüÎz Uy+ëñAè½Z5|•~"©ca>ì)k$p“¼1&r§—Ì ? ˜¡ûô«iãØ¹7ór;;÷i{8ðçÜ�Þ±™üßbMŒ�Œìko椧HþÖ>ÿôý··Ý>ÇØFb�Ù‡œ_ìw¾W• ºŠ8,`.F|˜·r"^U8ðÁdG—­)?n­Ø÷Vÿ;\yu닜é{`\æh?Û’Tö¤DŒ¨b³IŒN»^pÌ`ö¬[{;Øz6÷c$é^#ñ,_SüXëV£ûªQÙ¸‚uÈÛçÉÚøùXÞs_U±M¿µr®�½mÝ}§ø:ûN…¬½Yð�ß×–±ò/H Ǭ­…=5�Lî徯ÙÎ�X?k^ä\ü6ÜE.d`Îtw͵ÖL¼ÍV›ã`W¹/=bר z êdù¨ô'v‚\ËZ¹•ýgÜÆ„4�;KÂo g}VQ*n»ˆ5Èéa¾ÖÞ³�Åü·ùÐyrhŽ÷õܧâ#—ØÁɶغo+ž _ú¢Š“a¾Áãsí.É„ḆT8½Ýåûâ‹I“&7¾´×Þ™Tò9$½õ$ŸN?îû7”9W>é_y6=lבw7û«èA¹ýY%0 |á £¡iq|†ƒdÄ]Åa,I›Z†¬])ºJN„ób¼8?‡2vßZç=˜áì¿îÁH»†úÜþ÷ðßù;à:‡í³ž]æoέ2ðû¡^�æÑNNÆ7õùCý9™¯‹Cªœ†zÿþŸ#ߢ#@ÃìÙ*lnÍê²Vµ5œÊ¥^Æßn†«¯ýç×í“ ›á"‡¢û#­E^æ^Ö»›g,éö­Ó:´[÷áì?ß7ÀŽìŠ}ïôÌÏúw#e׆:�O‘72@Ô›Fo�´Š†wœš�´à®—ËZ”õ¤ÛÖ£50éåÞ‹â»ÆHoŒ¹uÿu³;�oq=§ÝÌÍU~šÛ`ó+„‘ŠŠö‹—V„~”ª}Ô\Ãñãù…aü_±‹¾RÖe_Ϲ.J=\Rím±+~²¡/uZïV½ŽŒ—ÄÏšKYw6ϼ‘f½â(÷$ÓòÇ}aò]W™GóyŽ× ïy‹z¼sçÆË"±ètÀìÀŒìD»KB\•æ”)Sûí»Ú�vŸî¿õ*Ÿá>¯|ÞzÐ+?‡º¿ÊwëÏ*�Á$P £Á$´˜~ÏÀ!.½“]LCúÔc"ŒQ)ÆÑ˜ËŸO}¹ÃŒÄ¼ÝÃÕ‹Ì܃‘u•à;ÿc�ÿ+s÷³<¸2(�è4¿[ôÃ8º‘S™ãpr~2ì²KJÔ•{…5Òì\#neå²YC¹zÿ’´ÆâjÕ»¡È`8ŸéU^åYKŠÜÊx†û³×ñÛ3þX«áØ—áŽs¤>o¾åO«~•¿�ÔsÊ}šú§b�ÏÉcºŽŽj,!qìÑÇæ±×‘¬<¯ÌËOó)ÊX–¤ŸÆXìmç¢XƒÅõœN²5×Pæ7a¤êªÈkQî³Vyuû÷(FzmÝwIÀ ý×»Ì×Ï‘žsÿg-©ÿÝ*cìVúϯܷü{‘oùï‘þéy®òs¸Ï[”ãMm½C½'BÚ]|ŠêZÕÅ}}ކ7{†µûìpÿ­È¥ü®|†û<Ÿ/2õ³<ÏÏzU Œ„*a4RüÜã‰(ët†Ýù\%´z29^^ ûA�âg �,�Žò`½üðÃü̪«®ÚXa…Ë,³ÌÂÏÖ¿t–ÀG!gò#÷wÞy'å¹×§~6€æÏŸŸ6�=ßñCõ'ŸÍ¨ÿõ©ÅƲ×þÎ_®´ÒJ·þë§?ù—Üïñrxï½w[â³>ùÐRø·¥}^•0ZB”îõ×_k<õÔS�wcƒ¬±Æ�ÕW[½Qˆ C,êõ×_o<ýôÓ�—^z©ñÖ[oÆgVkLœ8±1vìØ4&K›Aù¬Ä_ú«¯¾Úxþùçœ÷õ�KÙ/Ž1½÷~3�|íµ×b-çÅóWhl¶éf�ÕW_}q<¾>£J J`1Hà•W^i<>ûñ>뮳NcÍ5×lŒÓ$øÃãë#FHo½õVcÞ¼yMòïã�’TXw�u+¯¼r’þüñìXg¤Ãøñãc×û/ ŸNC)~ñ´êªc«®¶Zb$ãñ¬ùè�ä:þñÒ`2À�5ÿÿ̳ÏĺÎÏ d�5Ö¬~x0á}¿¯xé3z}äg"±ÜðØc�ÉòQc“M6i¬µÖZI!\–¦K2þµ×^MòK¡ÃŠ+®ÔØ`ƒ �é8 DÑo¼öù•ô»³qãÄgkvüÞ’þË¥}^•0ZB4ì™gžiÜqçí¹±6ÙdÓÆ†lØXo½õn,›íåW^nøÜã�=–ÿø£�sóí´ÓÎ��6Ú¨FÃXK†ŒQ~ê©'<ø@²ÞÓö˜ÆyÓaÜeà�¤ž�UGâÉÿÅà7�sƒü³ž²»îºk¬ãÆß´þ¦J J`©‘à7wîS�›n¾9Ò ›Ohlào½u×k¨fü,®þ‰�9?³Z*ZŠ}lTÌø|©Œò»/jÅËË/¿ÜxôÑGó‚Üâø-·Ü2I•Ásæ<ѸýŽÛbI—iìºË®�Íú6k¬¼ÒʃfR‹<÷ܳ�»ï¾;Aòºë­ÛXý m¸Q&�Êg¾H?› ��åú /tÄKƒÉJóÄO4ž~æéH=Ÿä” †Ì·ÞzRc� wëÕÈŠºN8f¤d4˜½©xi¤$]ﳤK€Ï�3gNãºë§§]Úy§]}}}‰øè^®Áâ’^îÝî»ùÙsf7^Šd ‚^1Ä–[n•x£¾P]õÜsÏ~š²˜�qðn»íÖØxãMÚ=f©ù·¥}^•0ZBTí¡Y5.¸àïIm3yJc«ØT›o¾ySC|öÙgwÝugãÁ‡  3'Ž3}ØØ`ýõãs[Ѱ[²Ðˆ‰Za4´Å^“éý3îoLŸ~mó¯}íë�)ÛLÚ ùÃðlo¿õvbÀ¨*0Ä�«Öx �ÛkDeÑqÇߘ4iÒ w®¿®¨XÒ%Pˆ™|°ñ·óÏk¼™²í·Û>ƒÑ´ëk®õ™LA„Äfwþö÷óŽÃpÀ��É“&'˜S.îB¦Ïž=;+B Ð[œGv?átx(àzë­·4žŒнñÆ7¦MÛ³¡jŒ¬f̘ѸüŠË³ÂèÐCml³Í6Y-ºRdT‡r=òÈ#�K.½8³©2©[LØ"teëÆÚk1‰‹wâ˜XÐÌ-@IDAT'¹ ¨:á¥ÁdþH�—^zIÃÏ`E#€Y½±Ùf›…Ü'6&OžÜXwÝu»Åâ÷ƒá˜‘Â`ö¦â¥‘’t½Ï’,�‚î¹çîÆOÿC$�ßm}ôÑ�í·ß¡±fT×ÿÜí×~.ãã7o¹åæ$æG-;*ýæÎ;ï’qP'|¡²”OïÎŒm­ˆ�Ž9ú˜ÆV[m½TǸKû¼*aT4û3þyï}÷6Î8ãôÆ‹ó^lLÝqçÆvÛn—€±dºyäáÆÅ—\œè½`jWTnµÕVö·I€S £¡/¢£`ª‹�5_|q‚ûÿø'��£Zk$.Й3gøJc¥•WŠÀbÝ&¸ P,kYåëo¸.ˆÁ±�ï~ç»�vØq$_ïQ%ð…–à…‘™V™‰(QE3:û|RéW„H©4p4Xuƒ^r.=$¯ï:fäÒP®ü�²ò+‚H`o€� &d`ºÆêk å6#þ™Bqÿõ?ÿÕx'*W¿ù�“»í¶{VUBûÉ'ŸlüóŸ76ÞŠßo>f“M7mÞ+7 ïØ~CYÒk¯½¶ñøã�¥~Œë×8ðÀƒ²²W0ûpøço¼1Áì^{})�‰¯ÇŇz¤Œ¯8÷/ެê³�-'n™¤ÅöÛí•Fë/á’Y4Ã+G’«['¼4ШŠþßu÷]�?þñ´¬2r„°/ÖÓ늰st´^�Æ`8f¤d4˜½ù¼â¥ÒÁ‘TÁä[Q­ØzI4²ZT|ž{ß5�äÎM‚Äœù[íz%HZe¹4ü½à†›Ã?ÿçþ߆þj'}ó[�ÝÃ?·&œ»�ËâÚÏe|ì·øê™¨äËNÜbba›uÂ…@~ìñG“8Z3âÝ:¸±ùøÍ—jÂhiŸW%ŒŠfÆ?#Œî¿ÿ¾Æ™g�‘GÒ”ôé[„0Úpà 3;˜.³Lmz=Ôe\Ô„öüšk¯ICÉ¡ ¥’w×ç UþõsU‹RYzýî;�'ŸŒ£B·ßž=„&EÍf ˆ�•û�űP"<03I#åÓ®Õ´ê! G%çÆÃ82 üÍ�Þ(Ï?×<ò²êj«fiõèU_sýþ2.€aôÿõylö䓚€Ô1«BˆÝÿý�³Î9³ñz]�m¢ò’._Äk ¨/Ž úôÔÑã(JŒk¯³vcÕèS5œ¦Õ•0ú´V (:ÉUep7„‘{: qÛí·5N=í”$L�ŽÌõ‘Á_#H"$ŸJ:=3êÕÈ*ÃN8f¤d4˜½ù¼â%DÉܧç¦ß¹9Ž.;ÂÜzI0|ð¡éZ{š¶~æóð÷£-Äy;¯ñü Ï7¶Ø¼Y]¹m$ÍU·~‘®âŸa4X\2Ò²f§Ï9ç¬ô�l,!qætG'|Qލê-÷F$óVˆÄÝzë­¿°EËH�sqÝoiŸ×†0*L¾Œ³?ñŽd¯? `Âh¿¥ù�õ0+ýœ0Ùë&޼ßb–�>+GÙþ˜x3ÙZQ-R>W®©ó³E·ô±‰÷$0âþ¥¼¿ô„èOM™2%3�ö_|±q×Ýw6.ºèÂÆk‘W…" ¹i4IF@´ö:èÈ’ÏŸÿf¾uí½H²jÊW\iÅ|ƒËêk¬žýô¤($SÉ葃11\‚.êe™mX ñJÑ—�|›uæV‰€O&øjí TÖÁØ›c|sÁ÷ßnhœh¾+¹¦‚`~K›⥗^šG.F¢ÂÈxU‰ <§OŸž¥˜ÖZ ºÃö;6ÆÇ1ÃuÖ^;äú~ÃÙÜ{ï½7+ŒÕ¯Æ‘¸‰[lÕ¯‡Þ}òÆœ•£ÂAâXHÿŒ‹u²¾z\!ÁTJdÏ��¼‘ æ:zô˜Ô·/ÖO¤™©{;� F"3Sôªþ\:$��aØŒ‡z(+|ØY:™úà q[¯‡~¸ñ�‹/jÜwß}�W£b䕨Jzù¥—£:p寱'õ¥9ìÐÃóï­ßìïoÆØooaøW {e³½ö®½êœ?Âáí·ß ›û~ø¡eš•Mñl ²K¦•íêïÇBÉÓé«óú¯ç3Ÿ[aÅrÏ{c—¹¶ÀžëxÕ. Œ¾õ­ïäüdu=ÿyýa¢òòoà_¹[eŽÊ"Œ6Ð[o=˜<#ç¤]±Kl”ñ;dþ`›j•MÆíO§K°OžïÇ8ÙD6�–}o½<‹`óùþÂg=—.¢¯†½d¯›cjä=Tƒ²ÅcƸï'o­ˆ0R�ÂW±»²·0ù˜Wy«MYg•H0�±}@1Wº€„{"ˆÍ‹þqQŒy^WFE/ȧéBÖ¡sËÆ3V„WBèY‘AÁ>ÿ‹/äxèñÏ�3FXÆ÷ù|�¸× ¼ã÷¯¾úZÌ#ôµ­÷Íc‹1oÇðÊz”Š•¯¾zrW!Íÿ.»Ì²¡—Í >Ï^mõÕò»Ö‘Ì:Éõ¾H  ‡0*ò±¯ŸÖ/òŽ;O]�r8ö˜ãÛm¿}V5¨ü£�Öå¿j¾Ùx'tÙ˜ÈdùÀ zTYgû¦¿_.rõ\Ÿ¡Õ䪢&ƒ[ô�„ éÅBÜûÙ3%3ø”,GÇ=Æ¡ëól†û¿þúñ’”&±½bŒ‡ ³azØ™Vh6KïvZÿ¡àÏì¦òŸȗÝн±gõ+ÙÝâ%²µ&ÝâÊV3gŸ|ê‰ô;×ßp}4:~,×ÞÕ6A?­oŸüí¬¥—öïçñâ�T¼ê+†Xào%*ý,/v¹ÁfµÛ_Ã[«=|-ì({øn;û(^¤`ñSì´�_þúiƒ[+Œ¬ú“aúÕáîg~øû7ü¸¢Øo•œ§1O—>ø�¬0Z.lج¨í„/V übÌö)»¹ürËÇñìµÓÎ6ý‰Œ‘_b`_ %Võ{Ÿ‡·Ø^ØB<¨ÒüÍð¿üÚDZpl)¿¸ÖصÒ·úŲ®ìŽø“O[°Ýæf­¬…ûóC-Ø€¯ÚÍ«Tv—¸•^° |,?î2§UF¯’σeÚŽeÜ‹êç†0²èÞBæÒ“ñó£¨sý4³`Tìì¸ãŽéÌ— ’Å1½ƒ|×Bº¼Oœ¸ec§�vÊŒs† aôEp“3F-7*Õ¸¾qqÿ©�¾¾¾ŠÝÕŸ0Ð}V01ýºkƒ0º+»æSvçëÇŽ]; ‹ãh+Õ "‚"ÓÈŠÇ¢tÞùQ]æ‘ƽnÙÍ7ßÀÜ#š<›â»¼) yñâ¼yñï+ä¦{3@¹Ì�ûTnÊ/}éKÑŒ{£+󿽏Hå)ß+M©9\†•�¼l½ÕÖéPÖ‰>eÃådâÿ `{"ú==ëkÍÝoÔ¨eëFÖ‚,ôŸx.²ÿW^ue‚±‘ ŒÿÂñßu×]�Y?”ÏLã r½X7`¯½öÊã-šºÍœ93 #Ÿ9èàƒ3X™1sFÓIE°Ã ™+}Û~;—õ´ƒŸÍ+Áeè„fè÷űFº÷ìóÏ&QÉ ­Gá5ãÆ�oŒ�?Ÿ÷R{º*;óTü´6Þh“Æ»ï‘2,2«??ÿ°€‰ýÍn"ŒTg"Ø9ÜÖ‹mq^8d¯‘¹·ˆà­ŽªvCÍ ûsÝuÓ¨x6»o³Wö®çÝsïÝé+¼­ ‰m�™×5 Š0þÇ<ýÉË©KË-À;;MÝ)Ç '8j@Æ[„’žNÛé²ùæš ¬ð[®&QóVúß»a˜À%ó^œ—ä‹Wدz¹iÈ);yr­� ÿ€s'¹ò‘Ã!ŒÈÇÛeùä;ï¼3ý®± <[òÍÑ2Ø)ö:aM¥°nü*,(h ;䨆±ïÌwã·ú妾\“ Bèx<¦)×X˜¬o³¾ÆÑGþx�Oá®�BKÒÃ>‡Oé6¾ë.»¥]€T °WYÕ÷¶7ÍÃø5c‡]ÝîCþs(8ÆþH·ÒùàAþ¯‰[ÞÍRC±7‚²V¨[¼Ô+®dZÃþµñÀøú]ΛdÍ­/¿1+|»U £a‹uľÐs‘}3äocám UÉ.Òlýõ׋5h’_iPÃé*‡|øáY¹&2·²q€†W3|þè1@nr ¨YòyuãÎ é0€”c`€¸ÉAî»ï~ Œ†1Æk§7߆à-i"ëüBÌßúð«­ºzFûì½w€Â‰ì€#‹ÈI4÷é§Òè Dr�1]0L À¯Ò‰,rÊU'½{7ôûƒ¼õM6~ù$!�g�O1” ƒèúàýb#ýlTäµ(ùûpŽ˜v†×¾iŽç“ kÌáØ�©ïH!�£ysš…èôY¿/jÖ¬YYQBÆîÍT‡Dfƒž¸ZÇÝjà}Ö>y?ÈUY÷\6d/"cnž­slÊãÝtèªïbù=Ï0>Ž Qe@eÜæÚ»ûøœŸÖŒ¼µ>oŽ­ŸwoãôYæì÷žç9îƒ&w{APî>­ëãÝ\EÎe¼d噯èùˇ®•±’�Ï‘cVv!Ÿ¢w*DdàÌÕåyE>ýåé÷ž+àR­C{±²Cô„±dªúÌt ¡üV8lÏ’D8ÿï˽µQØ™©AòwC͘½iþ|vÜûÕ| ¢àrܸqé[ØvMwù ~#õ Ö•2Ñ;ý–½*| ˆ?éïÇ&LØ<×Û\Ù›cüªI‘'n„é´F___ê0™¹dêÉy?ä{â _ Ÿ°mü~¹*—]vY¾�ŠK‚‚áo‰#e?åÍÚüŸäŠŒÞc�>ñÖô/À�JŠ…zº¹Yø8óˆÈëkcç_p~úcGøêmbLÆè¢§tÇúi6š›äÛÉî¨Na'fÏ~<ü~³ É÷è–jŸ 6Ü _:�$ä#ý»D@»FH%ó¢cg�}fî�“O:9ô¥IÀÑGzÅ =ÓÒ1x€L7‹ Áç `™À#“'OÊ1¥‡‘ûØgȸ»£QêcáÿaUÆô‰ÍRý³á†e_$¾ „ïó; ô̳Πâò™$TÀÑKrã�Ë~hwžºsêU’^Añ©*oØÄ¢ ù¥zƒHƹèã‚ßðÃüÒ†a#–a»Â¶Â1ôiÚ´=“¨+dn'¹ª aßHUdéÎÌÿ†ÿìGëŒ0ò²‘]ãm<ôÀX­Û}÷ß» if¯í!21N�ž°+dʺŠ\­ "–„i�EæEO<áÄÈ�N½¢t� ¥oö�ã9*pÈŠ<v°‹õ��šéó‘ªÈ$Î4JÿÒ—ö΀‚Ï¢ÝìCÕr×\;8Ž!/ëW*šròCø?s26ÞPì ÂÛZHÞvƒ—ÈÂ3»Å•Å· 45û¹W0�Ïù·ç´ç4ýdóM”å~Et–C‰7î�C � _Õ‰0bëÜc¸~²Ì#ÇûîñwNnTùgM‹¿(Ÿ/?=—mð\ÕpþÛœZñYÁKå;~æXC_ùß÷{ ™üË_ý"}sG´Âh¸ò)ó26Œëô?ý1I<~D°¾CãëGÅØÅýñkë|[ÿn³‡È@q‰ø„�±×ãVqŸU’x€YÁ¼ô²KÃÆ¬ò)ÂÈ3õ~F\Ù›½ÄOÝ~ûm�³Ï>+Oæ|ëäoe¼yõ5W§\çtÀk±Äϰ×bcXæ¸ã¾’þ�-gÎýó9Y½gø 6Hì‹lµ�– ,£ÒWŒ(ù£¢uÖ¬‡2àûlÖƒÿövlÉŠMÄÃÖÌüÝgöìOâiÄ ßEGÄiÿWi5‚xâËU�vº$ôÚÍ >q_~øî{îIýx:öûþnìñ8¿ îõ,vW¯ð�Nø³8®/ a„pPÍ(ßzë͹Iõ,†8â¤)Škõ S�3”Žr»2N€#·çž{eV s€Ç_qåÙûB èfÏ>êËGçÂ{VÂð¢BÂ�<š€T�3%~'�Àj›ˆ'ŽjæÌûÃÍHCÄ0ËÀÿò¡h2»È G$�'n„×~™¹¢l6ÛW^žsCŽ©ˆ²�(¤7xœ€�#y6º@hQÈ�…x{(Þ.tÉe—4æÈĆÌ>†SbL9~UQŽH~Øá †›@s™dÖú—\Ôx*ÖÈ’eÞ0Œü ±nÖ¨Æ?Ó£d$#ë+s‰ £õWÍ–AKèŠl!bÀóUŽ]ú"Ëݬ˜Š „�ù²£šóäP•ä²ÏÞû¦³p͉Á³˜vˆÞ®¼ÊÊ�q}ãÒ€2zÏÇü˜ŽPî»Ï¾Q]¶mV$¬Ç.†rqšpŽÎz+ô�¾0М&‚+À¢8Š7b,VÙg$¥ñ»8GFS%…ñ‘�5t?—9ùãx�ê {Þ4‡8sEu½GÀ‡½TŒ»ñq07Üx}àÈ]�™w¹‡Š • pn€ЖóTàϼ|Îó”ÀûoF] ÆéÌ›G�’‡4/tÒ˜T°™çÅŒ{žqÓO÷pù½{Y3Õ2æÁ®¬³ö'„0Özù ]á¼è±ß³1žãyIzÄz!U7‰ÌŠ}ãže}Zï5œ¿“³}©ŒZv‹¬bª¹ª$VxŽy�„|èýá0Ù#�iÜ_âM(„¾ÎÛ‹ bó%”=Ó €R�ºÍ6SÒ> ó›~ì®|û½Tà Mè³ýìiÐÌ~uäQy�Ö€VÑE…ßø qà¥m·è¿ÌŸ¤ÃUW_뎢¿x‚Oc×WŠßi‡€dãO6ÜhÃôa/\ TT/{ìqY¥`¬ì`7ûq8c^ÝøûÀ^µ?†boìOóc—ºÁK‚à^p¥„H§‹®fujìë™’ô_ð½Gµúžþ8€Nñyˆ:ıy"ìì³N„Q·~Ò\Øaöƒ­¦_ð}N¼{{lØj$F»Ëœ`4ß³†â'zé»ð�·fþ´^ö’GÒ†+ŸœW`ø6cÏ?ÿo™$ÏÁèN ¬·Þº™¤#¶â×Ö¹¶þ�¬ýyì±GWEÅ3›ç¨{¨ZÄKŒøâ7^#qÜœðS’o¼Ñ§#U£‹v?¯�˜ò©§æöW�Ÿxƹ&"úð�oœ”6PIs'|AVdtÿý÷eŒ$É÷õ¯}#ý—#¼Hÿ?ýéôð×ÏfìG†p0{3ò§ªÃ¬§gOÅUl¼½'æã�ùû-ž/•>l±7ÜúŒ„œ"!btúåøþ¬¸,j’ÿ“'O’¿¶WÚÍkRè”ö/Öö/ýKê?®zœŸu, ¦ƒ Ùã<.ìü¤ð=°½}»8®/aBÚâ(pV»í¶{‚tä ³6'‚oŸ¹é¦&Àê `ƒyÜe—]Ò(&(áe—_åõTTÀÎ;ïœä‡!ð}qç�w bg\4£ÓøP¿· (Â÷¾÷ƒÌ\[pÏm͘)sCÙh — æ¹çž�x.š„κéTd›®¸âò(S~ Ž?¼™FX©BI¦àåW^JðÂ`Ëš·bl=‡3S1„ÑF¨®«ÅsÍkˉ[¥°Q�ÎV2dƳ(䨿“³ó×ÅÑÓ��”ÝÇ¨ÚØ6†ÀX9¶£G”@n‡vÈqJ‘ø½ñ]ô� èî4uç† ‰4d¨üRÁ0½mÕ‘ ŒŠ#el8ëÒÉã»,ÐFK ;{öãYžyYÈ‘'PØv›)· @=:ƒ7÷A2lSw˜š�ÄŽ!‡g)Í1�ŽSûŒÇí�KïH#G=%È"€\ ¼tº÷GÎ5‰µg82 ÑKÀ@€±IaÀ†sÊ)�Gf=³Ùw�F.÷Øwz-ˆ³¾œ.'a½5 ö{²x�qª’§Gôy$ ãoý|^¬‚ùJÜ�£h ¼È�s «&Á±€Ä �X!9ò6kåY‚åòã6?{�Œ�Ã~gÐUÔø<{ÂÐWÄ Ý×7.ä´z~¶9Ïçò;îõêk²ù¤~š£Š>Á¹}'ˆ(Y„ñsÄ¢’ÛX’Æ“è΋½c�>»Dæ£/ž)à-ß·ùJª^3' ÐtÑm2vTU$ÃbnÏ<ýLWò¡WôŽC88H5¤!påè1ã�‚t¯/d:vìÚŸ Xdôíkò±23ÖÆ~*Øã5îN"÷ÔSŸºêYú�uCÝí>§�zÿRãK{í�vjB툙«®àv Pß(ì±@Þš#/5ë¾õÖ[òw…¤™´õäÔéôc·ß–€N/Ghd›Ü—=d߇J³Ã=,ªvN�Aÿ\ÖÑõHèš#}üía=ŒÎ<ûÌüû^{í•~‚/A@¹G©¤H†åˆó#�=Úx6öŘUÇ4÷ùúÆW>Ί�[o»%têé´'ÀØ‘G~9}Þ@÷ôïÖUÃbrów~TÓb•F€œ} 0jt¾°âç›'ç1p¶_åáE]�‹cßt‚ ó]cV}¤¢—Ÿ•Wö›�ŒnOmœöGñß�òû¨ä]6üÈOóø#û¢r÷’K.ÎñÛz±¯UT©ò±'_ Ɇ³[HÁ¦#´|o«ÝH&|%�”Rþ/³ºwèÒ�ír¤R0·<@]¥ÊWŽ;>|À¶iWî�ä×ïÿÛÄ%ìŽ$Ó´=öÌñ±-l9?Æf³OÀ7™�7¹éíÁ6òG?üqVÝÐ'óà;!QÅŽú®±±!¾{u“ì( O©P}%Øõvr¥{Ã%ŒŠlÐ}:Äoª¦8)ôñH÷…•–>ç¼óþzúTÎSïA~Cm�H.ªœ“$DFo�d©¼£Kð¹J¬±ip =(YÄ‘5ÛŽ,„»î¹çž´ul›ý&8õ¬WÂ_+ýðL:Ì¿Ó]˜ñƧJb^ 6>ò¸¯ߨ5°†=�ðE~wööE †cÈÌ:›óp.¾Ù{b(ö&±Lè ÛÞ ^b³zÁ•§N�bëš’Ç1µðcQå•®ü1[ i+‘­Š<Ámÿ@ñ*!@ï/�}CwÚFô¹?Iž°‚q?zÅßJ’�xe�°y}}ã'’�ñ»è~!©á%úÏ—©TUu!¸—° ÅÏÒ Ä ŒûB|ž ~îÙçrKL«ŒCÔ[W$ ,ÿÿØ»6»ª#_ø[ˆ,Ø ­€‰,rƒ“1¶qÆÏ̽ïyŸ{Ç3ã˜ä€1`‚›LA" Yd‘Ó­_-éÐîxN7i-ž¦[Ýgï½V­ŠÿªZ{÷]wïê £Néƒ.hŸ4'òë-ÆÖHgóã$'Ȧ*,¾^Åa|X¼Î7ýãŸö�_¨S…^áãm¾ìòýÁè¤æ›'/}KÚë!“£)Ïl’¹Ò¯ÝÄ|ÄÙsîK½E‡Hö‹7'Ož2$y§ûÓ®½î¼ëöä‘“COó�b¿3"AÃ_Ç/â±,ÝÊ?Ÿô§óèYöp÷ÝöHý‹¿ùÎ7EœþxÄüªõ§Å}�9æØí£Š¥ÀÞ¢œÿn»í–¼MFUZÜøü4ŸŠÑÿ|D&ÓÒ…ˆÂíëÒŸö.|¾ÓÃ_”èùÊ_Éx�½؃DÖÜà ‚ÄÃQG•à%ýÛ[� Ä‹Ýüm…ŒôDž=•2y™ VƒI9ÊgŸ{v0õ+;{ïÛÌŒ³hJÍg8]W\uE ¶LVùÁQ²á+L¡"‚sÅ1b(c¿çTy€ ð»9ÜÍϘàc€Q÷ÐlŠ„ß×AàÔ©2ˆSÅ�÷w™aAÄ™¿=#+JàH µÑ “™(+AËÝá<\rÉÅY)$ƒÊQ’Õ.Ž c%K/°ÒÊùS%²ZAYÙkŸ±€ÑHÓPBQÌŽõp‚ÌÃýr Æš‘åY ðí À]TæGö9SÐmí‡�ÍøýïAÑ›É_ÀlN®û0 ÑÁöŠc«*oé[b¶JZài 0Š}¿ð 3¸ð †‘G%þ�…-±wôm«qó ଓeKÝ?ÔKž�33üzé�©ÀY:hSÞæ‰Z©`%WÖ <ꨣ3aT³·x¿œ™Q€— +É*tÅèí¬£qãÆ§.ÇoxèƒÐSü)™föÍ¡×|–ýöÝ/ÁŽ‘Œð9ú˜�D†êßsÎ9;õó¿üà‡Y&Šñ$Îþø§?¦þ8âð#Èš°�Š‹5ò>/F+#NP¤¥/9 ¬ð!ý�®óæÏOÛ¯•°ËY;»€?æÅþŒèrÉ8™ãâå`Ä'pP8_пªŽŽ�ÀK{°ÜgìÁ=ÁïçÆÛˆÞýÀ¾Ñ*=£9”(Å;ƒù1ôÀ@Ò@²\öÄsÓ7lÊ£Ù·Nü%¶¾¿P>Ðpo69asŒäñ°“dÜÐÊ�8ä�CÓß1'€eû*`äžÝØI~áM7ÝúéÞŒ‹üü0y€€”.`7¶ Þågôo©{ï“׫@zþ…ç²ú☣�Í `»§B „™£B)©Ò À¨Ì‘±ñÖ·Òp†…#¬ZÀ 9@ö Ý!ãÅq¥ ‡RLQ&ÿÊÚºþÂ8ÓCvçk8âÊÆÙ ã‚– ŸÊ2�ö7¾þ�A3tU¥ÀpAâ_ )‘ÑTÕ ÅxÁ~,$ÜuÀ«J4rñÃþkfœÍÇš/�õ0H bþøì{œRÔ‚X� ×pâCmtŒ3�,ù¼· T(ð#ÂàZpH…ž”‰%›Êô]³~€ožA±ž=öØ#•-çáÂ…‘ѹ3×ɘ È}ÆÛ̇œ¨8â蓎Á[ñ{€æŸ/üs使XD`ıX#À´1ñG*&’Õ]ßüÆ7s.™éŒ€ä’ä�Ç3`_+*0€Ö‡7ý,Àä< 4€dF:z±@@²¬E�üŽ7>æëÍHÞâÐÄáŒ-ùU‰Hpê:裚mjøV•�C{úh[¤}éÐÃZýâ¡ûxÀ@çOOOO®_Àÿ·«ÿ–ôµxŠvxCåÚ—â�xzŽnÀ'öÛßTš3ðÎ|É VÀ‡ƒ¯Û[Gú£ÉhF@ÇËP.r h³Ïø¸Âñn×’~¥ñêM7ß�úñßûA^K¿Çž\tÑ… Ð t�{ﵴ亿u—ßÓ‹?ÿùO3@pžÓ2©Õ§_>3ÐwA“öl§Xû´}TQC^•|E¿ëÀï =ÚÝëÿÃÿ�4úö·¿“ú‡“x(~ë­·¦¿íüú�ßbýt2»6?ü}Iá`´GW€Q§ô;v¥L8H:ˆõÐG|À/<¨Ì'Ãë�à Ú÷Ú+*2C/4$аûøãÔïÐ+;LŽÉ;�«‚†µFd~4å™/=qE‰[øì’]øa�=âå3ÁÿÆ`òÞ°Ò0“ÞòÊÞÐuäÍ»ü>âlU÷â`x�‹åøÅf|"1pcøQ&lÐÐó’j%žþÙÏ–à™Â q ÔÛ- ­¦t’D Sbú‡QY,QÒ®—óÃmÿëo]£öÄ 9ß°³ð�qãâí£acè{>”ïK6©Ýïk{Ô¨ü¸ÂF�ÃY ~‡Sbãùˆýä'ÿ7�¥Û»…Eq–3_æGðq] ¿B@ ÀP²9®§Œ „¡8J-¡ø;ŠSvï”ÈŒbt`ÃÜ `D@8·€®_ÿæW�—Œi¾›@Ôî Ëú(¿sÎ=;ßT¢ºJ ®_Å à‚¢Äðü J…ØÎyËhÑ‘ÏQã@sø âž{îµDÑ”¹Pj”*ÅñX«ê%ð�Í››‚4yò”Ød¦”Kó{YÇP ¬bçÓŒd'µŽPvßû.sç�)4P %–gde&dú!ãI€à �ꉀ;H8熃KÑ!Üàp &û Ë=´Hü  ¥Pñ+~Ñw+EJ�wé ×Û.kunÂ*˱{ȆJ¢žX3MûŠraH<ùÙ?Îd*g—�E2'½*Z}€F‚“)áètɧ¡ j„ ¡€[¯ØFC(gÇ0hûí·Ê=z bHÉ ¾TMŠ=°?{&(À£ßûÞ÷ó¾dß9ÔÒuøSæ'hs>Œ*'û¥W}ŒÀÙw2ò~ãŒ@²TR9OÉ$“'MJCȨ2o2ŒÿiE±Ï÷Æœù&|¤S¬M+,�§M¢§§ÕK¾ ä³úh©D:¼×½Í}»í¶Ë’`û)ë µ×Z,ñ±C ²]¨”œ1§w9€[ ç²áW`¬@ƒN~ÿýVY4~Öº ,ýëx¤ì!‡ƒþ(Üy×I€‰`”Ü—¡ ÇÛáTRú=ºZÿ`™Ðrý`]ù\ßñ†@݃­…öç�Xû³Áçd�~{áùðÿ·Ü€ ÷`:~gIewŠ (€5ùÑêç¾’2Ö[Esr­l±ÊTüLçàÝ7ß °õ½wƒ÷ægÆ�CvÀþûgðÍiS">ÀÈ™WîØûõé¿ m<&��¾ Éž…NøÀ™KÞªªúGVs(FôÇV¦T¦ZËK¨¡òþ­‡d•`ƺþâÓ±e÷%ögßÐ{‚5o¢# Á#ßB¥)™–48.ü"[Ã~H�±Å­%g§žrZênÁ)¾Uñælô¾Ó‰øÂïÙ%kÐþı—ÀbßzB‡â•O0¢7ð%†Ÿ†ß<ù›é'Ò¡EÆØ@Aï?n�VÄ_þOžaÇŸ0X·JtÕÊ.ïtìº&ñâ0âw @ù]ÐÒ¯>£E[¿T)Ðüñ¿þ[ÊIû|‚gŸsV&lù@¿3¢2>ìd7r¸¬F�úKö­¿rjØý�ùÕzÌ�à“«FØÿ³rØ@>µ\áyþ¬–A<�çÛÇP#2Ô‰�kð¡è÷‹.¾0Ï’^mµÕÖ)ÛΫÔÞ(¾Qy=yò”Œ“¶ ˆçñ™ UFü v…ïçÕäb•r*‹%-Ó€s>+›ÌÏro:›_ð·$àØé‹ÿrqè‰×’.ÝVuJ`ÝäKÌàñRÕðª¦$›ÄŒüá•ÆŽM?R‡†ß@ƒîËŠ™Ð+ü6E_z…_`îô©ŽñP;`„·FSž.¤tWà÷?FBGœ•í³akЯTª æ_ô¬ôŒØ3‰v±Ú°7{•-Å‘ˆ�Œ2ºÙÏ»/FàG\o]•XÖñƒÏ©ð�´âéL¤Ä‘4=›ÇѱÇåþªøœMùëªÜOùΩ1�–þ ö5ú[{ʞ̺û®8Ìû÷YyÊžKx#Íûó¡+ÐoBÈÝšk¶â—vÐ×óFúw+`¤$ò¾ÈhŒ¾.S  }pŽþó¿þ3å¯Ê“9HJn@‰ð*\(•,! p$ÀäÏ�ÏèÕåaN*CÁ±Òúe2€ý2º~–7wq289+-i«Æ¿ü£§anÕ>f‡bvº¼bA&!Öʨ ­O0Íqqæeß> Ð2Zt´tûPÎ=˜9“amUX”¹pp�͉•ý±�·RÏK/½$×™µÆ0”k}מ'«Gq)‰W‚ûiF Ž<ã«âL Ð>8ìœRÕ:”×ÄPzWUXÈÌ3,^K‹·Ï¥¥Ü�ºNVþµ0èç)ß9-éU>Óû» æž0lëU©àÐsFò+_9*ƒ 4G{ü"ÔnWäàv½œÁƒŒ9žžJ&Eð _`Ç)qèÚæ€Á&›LL%^øœ¡Ò�Ï�Ï"(:QK\ðyû°F‡à—Ñz37ä™b0zè—›žI=IÓ˜ÊTlóà qÉ@„£ð½ï~/чՑû-ü@’MΙ*0üû£þk– IŸÛn»-û.àåÜ3xÏ>ûlʲê - [ÿ9—œÞ žÌŠ/M!+ÿŃνçÔ­ =zK” §}ýCù�N¿=ëÌtôÜ“^pHrñwYÆK/½4�K@ izÐ\§úÎHÖ©}‘Aô¬Ö¡�­Ê¥‹.º(AÃIñ{U9*%{·X’üB>~@:'lYŒjO×Ξ=;æxsò A°É©—íÎ (6ðˆCƒ? 0º/wÀ#âJ©{Ù±ù|\'±|Í De+jìßPÆ`Ý`÷(Ž/GÛ:9Ìl¡¶/úC Mæ´"ÿ¹ÿëýi»·¿ Ì~÷»óò>ä{‹�ºŽýð<²�9cuÏõ¬'Œ%gl@XÁ+ï¾Ûz» ÞSq¨Šñ ƒJ;*ø2 0àѽwÜy{óÛУƒÙe !93¯Vû ó|vü§Š”Þ´ÁßÿçÿüÿÈÑ9ô?{ˆ�ÚG±—xˆs�eöA´l  ù gTMÓ#z8«G¦ý©8—Lò,+¶¶Ú:ÿ.xHò?þë§ÿ•oìÒ"ȯÑîço*Q½ý‰.$‡xƒOÄé¶ÿª®ùN@":G…�¡G> ÀˆCÏ®Î� áûµWTå¢ãt¬µçº£"]ÐKºZ/U8D×rŸõçw¡A±!ç_ðÇléSÕX¥´¤I¦l»Íöá×n»$;�æ�Êá²uê/Ù¯nüÊÉ“?žp,ûW¾›Àˆœ°éüÑ£�:&USƒ·ßL?óŒ3ÏH»&èe·úJÈ0Â�ØI‰$¾ä-áS^~ù¥Y¤¥™N“�Ã"ØÆ¿’”‚V-¨t‚�ÏÈô:cU€ Äú;@éâ‹/Jù–X?Ñg*µ8»ççاgTPð§è÷ýÅÿü<Î>|*uS·€Q§ôéíGý X's�öUÙÿÁ¾“?öší–ÔìO¯°Qö€^ùÙ/~–I‡vÀˆ?4šòÌ~vWìÇ¡�5�âQ>˜£Øw±r±Kƒùý+½#X?þÑ¿%ÿ¶Ç»À9-¢€J ¤Äk+>j�¥ÊÞéù÷»úªŒ§¾~6_Áß컊M‰-sgW%€ÑßÈø!À2 ‰ª(gÅl´Ñ†i˜ ¶V©¿D¦B°ÉpO ã쵋”UûHN`oµóÙO0š•‡êy¾Ìl_€žÜ´F ?¥Œ×® „œ²i²VÉgY+‡ÝÞrÐ)òžžI‹•I}*ŠÐWK¡ÿ,3ÓÎÒâàxËZO8õî³hQ8²ܸ¯sTTà x¢�FÛm×jIz�¹L•5i§²÷„r$KLˆµ�#ˆ…éYçµ£ìCŒÜ[uT:*¿øy:åÚ4,œ‚Mâ™^‡ËÀÿá¿Kú "•”sm€ˆ¬@ÇyN€*eçÎuRí°Új«å}íÀè_ô¯yæ—V!€@”üI �át¡¡J<ê�ˆ€&ÕMþ®÷_‹`Œð>¾1ommÞ¼¤žœñùbà ? õ{ÄØçÛ#öó ÏÝ÷ÌÊØ 7Ü x@‹îºù@döø (WÉåpW%á�Ð0‰·TˆÜ=ëît4�?öê�wÞM@^fȘð çøÑØ/úšã£=—3Å)D¨˜,sÔ†• *€:ûª5@6[냀æ­àÇVåÑNéÌq&:­Žìùt~!^üjë%_*NWÙé0Rõ'SyÇq&bœ•£ei »¬’S…º ¶ 0|8€‘Œêf›nžU†¥Ò°]н´^�Þ”ÉS3¤R ÎâÈkºŒ|ô5@ÈYd€vˆO"#�ÿé>úhOïMœø…têí›$�ý¢;{&®4Ÿž(ÁÖ¾ööŸñùrß¾ZÒø7÷Üsw’@{6ÆY—Z{ÛGÑ�îó“H0CKü.ºœ½ˆ®å^½£Þ~t±ÕÝÈá²uæ/IuãW Ð0’Hcûù‡~d&2ø/Þºi¿zdûð8jA5_û*`ÄïêÄNÒ•Zvñ­Ãœ�›?øÁ¿ä�Àô2~äKüá=:RRŽ!�Åï�Ð{<*¬ù4*rð;ÿØá…%ÚzUwò£v ¿„^fß~úÓÿ€úñ¬ˆæÏ8SFe°gòqÎÞjŒvü™¾â�vZ ôs§ôéíGŒ`TΞ” z(t~êK¯à¾‹çªØä÷´Föf4å™ýé&®P`àìU/�øe´(+p†*6InºÛXV#±N‰§½…�K§K&·ÇÖÀ°«’Ø|à(ÿWÌ:Ü # ªû‘9¼ RJˆ5t\Hp�»rÆ>âv=a'ùùŸh´bF³W�4rFÚIôCÞA<”]¥‹s8ü2m*"ÏRO-D·‘Œ †R…rfd08dßÿ>Ð:tÒ¿ËÀ�‚ gde!›‚u`đΠ£)SûTØŒF�ŽÎ·¸ø/å›Ï á\:›H+TûÐïïlŒ•#(;눣l~z„çGÀĪˆh“Ú/O@Oð@q\ÎÑŒ8Î�ñ¾Î0Â3 ÷ú žzJšÖG…cÚ0‚8Wþg(\}u¼ i¥±‹+¶hÆ´­´Ðɯ(ÎÊ´˜‹à¾/%ƒG|R~ò_?i„Òš9sf(ÃÝ>–Yaä7ŸuÊÔº ¼A€Ã-øx@÷�t�ƒÿ{ŸadÝî)xô–AÙ]¥yܸ5³wØwûLIº/À<¿¬¥7`¤Âà«}TqnfróÓŸý4û‡÷�– ÆÁ\Ê y¿X}·V@Ò.;ïšò²ùÞ÷3 ä�f…QddÎå¯õ Èõ£¨ü�?žÿ‡4¨/,\AÓ*±žÅLÐGkáÛÔ8 I€¥rËëDÖlÿzFxþÿÇÿÎy$¡»üŸµÚ_¼çL7­ÀÐ�½Ü±£3@*AàÄ(5ü— £Ô†A:iáÂò­Lœà™¡=ö懳jpN8£}�µVæÅñZ+ŒÄFÎ3t/½E÷@€ù-‡!tq;…üÉâ 2ÈXŒî@ÿ’Ãë®ë¾ÂH;ª .€±Cròýüï<òˆ–ÖKøU�Ø%¯­jÝq Lµ>Üí;ªÅþãßþ#�®~nû±_«X¡;�•dŒ>Ûwßý2Ø9÷ܳSœü�o¦î҆ʱCSgSy›0Vp ûH'¼�gãÜ ­+Úɼ̂Þë¤ÂHò8¡Â¨Øå(�ïe—ÑÊWVòýöŒ Êì³LíP#2òÓŸÿwÒÑþ¨Æ£OÞ>Øí«ÎQ‰D�¢Ù’J˜pH¿xàÈF@cúà 5�Ìz®²zœç9oá»ØG 4@)0>2ížžÍÓyþ¤#‰>ídÀX•Oèä0v^—ÂìK@IDAT»~-��Ö`g} P¿ùÍoçþ’m^FýеìMŒú󻺌èRG t#‡í€Q_~LYG·ßKÙŸ¾!¯hÕ©¿BW~% { Q#sdëwù?ì°/gõµëØO€‘·ï¡#@Y%ûÞ>† (;±“|(¾àÇ¡ÄÎ#ü÷ÿ�Œø}ÄÖú2ÄÀo¶Éuü—¡»¼å% ñø¬yi;ñtp¨¶”úÉOþoGOGõa$åâÙ"þ‚ÁÏ�¨çÿÑ�ªyºŒ:¥�Ž„ö±0z"çÄ?l%f?ž€n¿¦¯Ÿþì¶–¼%•Á}èz„ßç¹I#€ð�¾~*ö`4å™ÒM\ám¨Ú�U¥þ6‰•;ü4ö Ä£ƒÉ{•8ÿ\agÐõÑQÓi…‘ªdçãóÓ£ÂHâS"�/ÁQd¤ìq±«ë„L³»| É' ª¾Fë¢ ²Ç¶¡ø+€Vþ`&מx2A#>#>u6¯Ø} çõ5‡n~W£ª0ŠœþÒÉ#b— †ª è0� EÀa=/Jé ÒHF‚4 Dá:ôº{ò׿™Ê˜‚)¥qÅ1ÍÃ\Oÿu^d�ˆ²Yèå²Éòz ¼ m Zßoõj9ÚcâÌ"¯¦Œ´à0�’€EÖR«`_™™O™ÍÛáçt{ΨFŒpgã”3wºu€8ßó"¸¡xõÆkÙr¨2ÒîØ*ɽ-ÁiB'<ã{Ãç�%ôßÿý_ÄFF( >…¿Ï>Ímw*—”ZSncÇ®<¾r(ÔÕ²TùÚàn ÀHu%ú¯£¸Þè0Úi§™9Ï–¡_˜•2«x@¿ñÂfY½C¡=K&À[á¶ŠïŒ�@ÚhŒÌmúôé­LN8ÏíÃß²•âÖ[r�²gûì½o/zòKkŸŒ�ŒÚ�ã‰`:c„Bï0 GJi¼RX<à�vh»Iè CϺ¹ùjÉD™à™±â¨µW%`4ŒVžv ô3à0r.ÿ;#ÒL ã)¸3|ÆAÛ+…:è›ñ`¸ �Nèã P-:€SèC޽eF`å-•o žv¤Ï2`”ô Y¢Ãñ>pÅ«˜9Ø·‡ ’íkÓ¦mÙ|9�Ë' ½”g€%`Ù3í@£ØÔéùv°g"Ø)åµg’·¬µÞêùrð¾àI •ú7@„þðGK€å�žáoÞº£-‚~à ×ÿ�iö?àÀøËG X bdpeîÈ GM"Çó|WÉ®p@éBv§€qçD¥`r�8¤Ó¡¤�FrzX…QË.¿—gV”Úí²ý'ë>ç¥ í\è=ÀÈúÏ>÷¬ æ$G$©8½€ŽöV ßüˆ’LÖì P5°Áií¤% Íè×ÙsîkÎ}÷Aè2úz›h•bd`ÍÅ™ŽÎF:èæ½öZzfbN~ÿ[zfÎ]Y�ÐïK¯ˆù6€òsÎ;'tΘ%€Û«:i4å™Ý›×E\Á�ƒIgaDðÛ©ßi%Âéû¢?“÷þ€•ÑŒ7Ö�‰€ˆ§UzwÜqéô:ÿøÙDÅ®Ò -ØTë,ñHoÖèo]0òy>T+¾z+“N؉ÑÅ7ì¥çh Ÿ‰�äú“0!Àè½P²ÞbÁÙ�‰—9Ø?Í`ª×^�Óç£ü^¦·RÉæHFÊß0˜Ô¡×ΆP‘ÕØqN1/!P‰ä|­3»3ifî´s–•ÊÒ. €‘$ÆØàÀ] 25€p€A£Xe%ýìäúñãÇ¥#ʱ�…â¨êÕ¶~½Ò²mŒZÒ" ڼNjʞë3‹øHd¹egÛ#Ó3T�oeI=Kæ×!s­¶¯-Ãàž–ÎåY2rÈa·J¾O<ñ«¹ÿŒ•ýw_?“ áÿD&G€¾õVÓ€�A²æ÷qV×"£& Q50VÉDwˆ¨ÐPç¹Ö´Þúëe%ƒ`Ï[ kÆ×dMI™xÉáát¦K•¼sôqÙÂéç0i©�ûÁ!í y6ú_œ!Œ�ÙÕ°ÈÏ]ྪ»€�è*p¶«Z´vm)®Ó²ã9ÛE…—³›dšð�µûÞŸcPèY Æ^ ±r{zyµÕ¢'C�'þål¨Dõ³aí¿:zÙ£82yò”æ¸cŽKYû$#öÄÙ^/DÆQVUb�&è嫯QøFK±’z%݇ÝÆœñu£,o˘iFŸûÀÑêùƒïÇ[Ò‚·†2R/]è¯)¦ãvÚifÒ‘\Ù_‡'O Ù18±xAåÈÃaTº|-%zÇÒc äR®×æî±G71ŸN#•DlF2AG:M…©ì¹ýÇçhhÿUãÝsûýÎKÇ0¯ec(€Q«’ëÒÔ_­*®É™,R‘ëù†`�ÃÉ^Jlm¬^&±d~Î0ꧦSÀH0IŸ“#òêY§œ‡aG ÈÆ£¹µ«òeð;Þמ«Å”ž–|ÒF欭°#R^c�·ènv•ýãg8Pÿ"s§�ú½–èzsYŒŸ?¿+9Ì�)ú¯[i0}C¾�1�úKZø»ñ+%ÃEϳOd[âhã%ç@7YðÓÁܨ”f{èD_lB©|÷2²â¬U ‹¸¢TóðW:±“ë­·n�äêÊ+¯ÌJ /ÿÙ5öeÌE…}´ X3% ˆÒëΩ¡°�VuIÎA�ˆîÇÅë]�‚|Ÿ“ýœ� •39Õ,þ8$Zpd¾ð…à<ßÞà'ÏßUý˜k'€ˆÊ%JŸãÅY%ø�!#¬bfL F…³†–À=cÄ-yKZd]?Z€ZÒ+ŒöŸ.8?#{`Žûï`ÿÚj9ó"(áôi7²íúh¸-i2ú¹ô/™¡â`q(½%n‹©ÓòU¦sæÌ‡ëÂàë§dµtƒª4à8'ME‰}Z{™íEáÈãS[²|@dûî¥ µë9î*Œ*ì”o‡&î@üÔÉSSµ*©Æ%¡U£½#úÅ[Ìž}öÙ¸ÿ!_“Sd‹ ºá¯Wü5­Ž|C¶O @€ÁŸ`¤ ÇÛ4UtmÎ1ùᜨ0$7šþ†ýgãTÖ<YiU:cà`Ù¾¬îÈÆï‚�áFl*§Iè­Š÷fÓ6ˆûO˜°Aò'Àe 3½1+&w„~š0aýŒ¾ž:sµ"9ct‡ÀPxФ:Œd¢é*lÌ�lÐì2çß©(˜Ž5€ µòÊc3á3TÀ¨:€m<£Õë�CI]²� ÚƒÙ˱‘XØoßýóPŸ¬uªÜŸ1œC¯eLÉ‘ýq¶"zžv 8¸¡Êò <úœßñlØ)úƒ®û4#ó¤ÈíïâmPt‰ý×’¶]TGmºßI\Üxã�¹¯t‹*íc�9.í;=Íæ~š€Ñ¶1W®CÍ»‘ÃÁüþ–õvë/ ¦oèón#v«¿’Nh=üæßÑg*ÛÙgvE’×o{ó–v+òí;`›�Çsl¾MrÌOת¹f茣¾ò•äA¯'çƒ Âî—t`'ùd`$湄=§›Å ÿ÷lþ]ËþnÚ}ô± ©|Å×g�uf¼ì"’¹¡o,{î¾gèÙVk™— ˆAV]eÕl£WÌfIþâé)ö�¼ºØÏ²n >g;:ƒtføYôD7-iôn7~DÙkvìq†#äsáS>¾‰_/@Q5 H\?’~’}ä ¿!àç¯KØŸw^¼¬aá´=ª÷UÁÚS| %úÆoÈÏÑÙü”¡7¿d4å9¶¦¥ÿB/wW°/|[ü±0tçĉ­¸‡ÏÕ>“w1Ú§á½â÷^g©>6wn€vã’_÷ÚkïŒT�âYúèá‡N€�-%ïbP€RþQ€‘øŠ\â[2¶j$Ùiç ª*gK]«ò鼈WÄ ß M['«tµÓx4~®€ÑFA‡¤+Ý\kíµ2›�­-!„{U-΢!, ØHF³ çÌ™�ÙFFK�îù|Ý� Çï…Qø{ ½ ,Ç•�X#>ç]PtÙe—¦�˜ë¦´lÆN•�j;�’NÀ"œ#Â%ˆå\0@¿æ�OÐXĨÉ|0Jo{% òyÑQ~¯RFp3u‹©(©4jéŸÅátˆ9¡äZkF­¶´1 l h;9ÃHå ç–‚±o �}Þ(ZÊÙ[+‚ír¿­“‚ãpxëVûYJý)ΕÖ'ýC¡UDP¦ZÆ#Ûçl.¼×ZË4i q®ˆ–6€PȺHöF–[vÁý•ZÊĵF”å(£û ÐÁ¼¡ô]*=РsþðÇß§Ìú,~Ñ> ¤#÷Ze¬Ãþp‡ •gs Ï� #òûFè úI«ƒ–�Ôƒ!ÇÆK/E ´¾;^[{ýõ×g"a¯Ð ²Ýä̹axhtWȦ·¯¨4t~§€ìžÎ ‘quˆ¥3„T9ÇgåÐY**é3zÍaît \eÓP*ŒJ Î§`¯èæí"é‰=´ŒèÜù‘Dád¿‰ €ÎhF4t§ÿ÷Á/F€$8”.Ñs‹}"²Î>á1ûöiFx%íjð�VoºÚù€@cþ…,¿\•÷ #Ïga×�„ \#> À«9Ì�³½ Bßvã/ ¦oTzwñ¹ºñ+Ô>Ð(zží,²»îç΄=Te)‰ ç?tÐÁ ¢�É;[FßkÏä¡9@’½:–zÂî8v@e9aÏ®‰³"%V‡c'ùat}ya$R‚aÏ”îöÐk:µ?¢ì5;æ 6€B"V¬ UÇŒà‹RyKßõÑÂ~‰’Kâ-Ît=¹a¯ø.©W‚öεœ;7€ˆ°¿|L|0¢[Fxd4噌ùÚ�Ääôo¿*mbb±×>ûüó´ƒÉû»£~Z€‘½ÈÞüÈ¿Sà×mÃfðÄ â2Š¯ÉŠŠ³cŽ96ÏíÂ�F 2nu&­xgfÈÇäðOøOŽªx饗Cvæf2•ÜÜ ÊŠYJüSøv´¾WÀh„£ "ÐaÞ²" vˆ¦Š–•Ç®œ�TO)²ô×]wm:s# Én”3Þ|óÍÙ²ñn¼UHUÉ˜àž¨¬N&zl3m5S§Æ™að)¹¢ %P ÞÂO8†°¶NÞ6Ç�g´ Ai:•±§ ?ÅKù¢­Ã�{í¹w&ÿ~¹Þ:òì…0~ b/d¡²«Äße”ÇG c®mEÖCõÀˆ£0²�gÅY¶8(“²PÊ?”Á6o†õ†nH¥“g‘DÀuè¡_Îó`´”QH�F�lóÍ}ìÑvˆŒ9s6>üðƒ¤:Q\«D�©Rc×~mœ´hX·=˜A†ù?þø¼0æ-Ú»/5>�woózX÷<›“²tH"c¤âÎ(\Á `�á”m(ªÜ(-ixXÀH‘Ñ~%öÜ^z– Ukt_u'PE¡¶+hÙ¼yóËŒýUW]•{ ‚Žã%0—’áçLÛOk!·÷;73ð‚:ƒ‚ö–4ò‹VÀ€ÑFaàÍ›ãÓ ¢U”±!o9FQ‹o "ñðÆ!§ªŽ€œ5úÅH@ìŒÌUÐûÀ÷'p„¶[A•sØì Ç€#ªîí_€ÒNè�Ã3*É…g�T* ì•÷sÀ=üøµ²rð«Ñr¨¦%·QsÞÙéàå¹q1ûåóø“nsŸéASst!�‹ã,c+ðæÀã#¥ù ·=èã»,c9Ìà4Ð(�DoÀˆŒ¨æÌžN½ lÛ÷âtÒUô2‡Qy>ùPá“¡èßùİ3@˜€)Ï‚KPw ·þÖ:TZ»Ø})‹ô¯l7¹ñšeò0ÐÄ:+ãžLT± ©–b Yt(*§gÑ¢×Sª\N…Qy¶uÒ*w]J>UÎz8ØÀ@ è%À•W^ïGS§ 1ºñ.}C6é)‰‡Íwy®óÑèùÐy<*O>ÌšmÄ쉤Ρô�Ê�¡¾%­´Í�d”Š™|í—žKTØÒq‚6g� N èm�ôô@•0âNÎ0ò z� €ÐNLZö/-±×˜£½Øb‹->UÀÈÐ-Ï šfÐ4"l�¿+-Ö}äj�8ë ]U�Ó/Ʋ±µÝÈá`~ÌŒé3R¯>ôЃ]ùKƒé´í0ÎtãWâÙ�FÑó£1+�I›Hæð“*\lÃwÁ'‡F¢Ý$¬È©7‡©ê¹á†ëC÷´Þ(ɆòÁøNì¾q W‹š¤‡0°u8v0ßò�[ ; À±Ï’1áLV©¤Sù"¡Çgl*cØg6Hµ ûlqÖÌv ¦ÙY G ;ßÏZ€8’ θäóá‹xçíwâwOäõì«DP_ñÇ@{Ðþ7 y§~Dû}è/±ŒJ#s%ü­ùö’Gö�ÿ�GØ’¾½áká²ړb[ù~â3ûìZ6kÒä)i«®¹æšà‘µ?±£Ÿ„<óÏ;‰+Ø‹?ÿùOió&Ç:ø®âÎö1˜¼«Žý4#ò—ñtè5ñôãa·�XüHIñÖ“•aÓ"‘�¼ßɼ¯¾†{öµ.×—øçÚðÛĽdÆóððý÷ßKÊ›;�õ§‚Zëy{üÓ×3Gòw+ `Ô $#“ÊQ6Oi§3eœíC`¤GT€h#eâ(=C�±Àœ`¼Êž"åÉ@Ù`å˜AÆ ’Ï`sÌéÞ¾ôA Jö-ZÖ¦/6¸“žUŽù´iñÚÛ)­ªYBiyÀé£U ÊÁe” Ês¹ÏíQÝ!@™DN«…£Îð8CG?4`†b77ÃzT,XŸW ¦‹b(òCñ¿Ñ¦£ç ˜9qÞ'�³<Þ ‡“€X‹àÒ¹32.2þí‚J±Î�`‚Q� ÇS�¿€Ð`�È~0¸ª=ìÅ�¼µbêbÇ-~þ‹ŸF€övóÕ@d÷eú‹C˜“àM´g$íG€Ãì¹Þ:¤r¿¶TC ‹–ÃÜ>Z æþ,-‡0ã³½öÚ+.Ÿã€kË+Ï ‘ÞŠµrÂdÊZvt×àSÕŒz†­<]4ÀüêðK¼!‹o¬ôšà DÆÅ!ïè�] X¸6ZÖqŒ7ä ùRé�y1æ)/‡’»6åë¾{R©’%ö½¸Ÿ{s0èž)`å”(åm0�¡RQÀ-z˜³{àëßkϽÓa€ `GÙ‚[oUJûp>S`îó¥žÔ3)íÀ s«(ÔfçÐertÝõצ|çð Îž –´À´*a¶NÙWU8€>²­mDåßÊ+�M¹tÎ!~$àØñòÚ›¨¢—™ékàz�.¢^_¼}}Öïð7çÜ󊓌Çè"'ÌÏäÓÒ‹@gúŠ^ÁŸŒ-~ï„>Y~»å–›BW@¼¼ÒJcÓyö²Å°…ƒå|…Ôã¡ ðGÌ™6ô�Ýáíèf¯èš+H@W´"¿} ü¼áðslKëg_Ÿõ;™4gVÑíû h”âq­Hóæ?–ú@»'çÑ>¨¶¢œÿÃ1À«ÅñÌŽŽ�5ÖeÿÈ�ûýÚß|Ëïí¯,;6;ô£Š çSè�:òŸßîS®+ßešÎÊêï¸ãŽÔ_ ¾…L‘!óq/üé3Ä#�\zæP¹Ï`ß.l9`䑜ÙKgÖ±Ûí¼çÐKZtTŽe5Y€Zì)zdéH4&›ö§'ô;©ð�Ð…ªŸŽVH€ÏÆ1v¿¿õÖ›Éo2ÇîÅŽà+:�ޠѣÎ]X§}cQþ ÿLßzFž-gÏè:±gROò6;7”QË%7xÃÙSyn]È}”²Ó™|t2èI@):¨ M¿"ô"0Ö ¢•ÖL?ã•äÔ(t%oŽ~4V¹,ëîì°¤‰ý¡;T¼¸ãºÃäÖ�?Øqí(üŽ�èʶä/åäúø_Ú˰»ôÄѲ >öèV+™9Ø?ÃçØ…yAË[o»-ìÈ#iWß ûâ3…‡Ó®Æa¸ìyûõƒÑµLm0¿ èCA†wúVë›@¬}Øs‡¡òÏ&¿Úc >{Ò�æÇÐ…dðØ�¿4˜¾‘$B+ú¨©[¿²�æí?Àè¾ûîM½³zì“$;Ågžÿù.ø»ð }Nϲ;*g,h%¬ÚïÝþ³ë�‹3µ&õLj´á³áÚI÷ËÊÄðyè^`ÿXµ0ÿX2Õýé7ö§mùW­ªHÀ;/�C.–ï¡?$4ù…t]J/´â£G8gÙD2ÃÎyq ?MÅ•jp׋?ø!ÖißÞ ydûž­Ú�oI'�úí÷�ÑÝ&>´j<ÿ~»ïíö¦ýí?£ƒ:øY#Šjþ*UfÎÜ%}6-ÄÎYtD{¢5É�â£)Ïžƒæìְ⊰ì�Xë¬hAÆ_ˆÀ¢v{Sh1˜¼EÐñ�Å ‡ÜŠ›J’I”}÷¶0öÆÏE;ã Ëf±±ü§öxÁ=øÃä¸/Žny Uâi ¶ë™°Ï’1*Lñ´ý cɉ `þh(ék]üQþkúmq¾«„¹$^ÁkÖe}bÉJv‡Œªû$Ç €ðF8k2y}-ƒ² ™Åë£Ëá�›Q¦€C1–œ:Ê‚RäxaRà†ÌÆÓ…!OÐI=C"�'œ˜OPÄ‘¤Œ9ã¢zÃaÎþfP¶Îíð ÷ñÏÆDe`8÷ˆ¼öÚëá0¾™Ž�2Oó—m];®3_¬]À¬Ç¼¬¯õÙ5RH=£}Œ69D:˜“½¢´ºÖ†æhâsMBù«yRre¸Þ^SzW>Ëùòt•á¶'‚vŠ˜cÑHrÆ™§gæÄa–@AÏ,ûQžÓßwû^æÀà©pB[Ž„Lï¸qkÆßßÏ58V^y•T,÷M‡�±\¼—æ§ ¶(&ÏÁÖjÿaëôl@¸ùÚk™ ιëìo;­Ê³Ú¿ã%´Fs y†ûºÖ<Ö Þ¥È2.~ï:_>+ðÒŠI&â—ùlÀeÒ0þ�—”YgkÏâ¥%_¯dÛ }|¡AÜ<÷X á–v2`íÜÍѵ‚“W#`¬Jµ¹7oûI»¦E?ë|-ÿ±![øÊžx&åLfÊž,Œû“c­’îc½Ö„Æžå #þ €`Lëæm´îñjÊ©¹Ú_Ž¥CV×Xcñ3,öìv¾s�½ §ì5'C=Ò×(<È!½,€‹Gy¸¯�-ù]OϤæ€L@„ôlv÷Êðך~£Sèóˆßʽ­×õ¯Åºè%ûiN¹�!t’{QR> îäðÆ¯„,_j5–%ßx“�“níz®è%úL€C/°))s±è"9#pqO²KG›'ÞBCN°‚{¡'½gÿí™çÛç`Ë´#äÑEæsëQ-§²òk¬¾f€ïëfua¡;í™èƒ†2ÌsRW#6`õÅúÄúÒ·ˆ{—ûú|‹?ùëÅßÇÇÚÖXâWYä˼ËZ“�kÅþºZ¿€ˆ ô±~ºáŸòUøPc.èîsøBE'ºÒ;ƒÑÿä/õG³b/é ι}¦—Í7uŠ ŒQ>ײ Å®†|² Kä3ü©8z€]µŽöë£k™ÈïÂ[‚DþûâÙe¾å¾'=¢Z¡€øÇ—·,u#‡èPtN_~ŒuãÛ;"øíÆ_LßxÎR}Ô¹¿TžÓ©_ÙNóöŸgÍj½%í¡‡Z‡^Ož<%ÏÒ~‰gð;»!Y '?ø¥Ì‡ü8ø |*ùloÙ|Ö‰�|/ÀDûB{Æÿ7ì¢$£ëÚã÷Ðbøúëü¯—“¿3 ¾3Š]Cë¥qÕ[¹÷äŽ�æžü3/®á‡Ú?<0ÐHÙéc]öÝ3éRñ õ¡�¢”V\1WИßj�Š—”þ$Ç }’Dõ¬b胒ً2) =Úó) ÏàS2b¥P'v´Ÿ?Ò÷oÑ3‚Ô (å1\z–ý0¯UÀëO°)š…¡hÜ,cJq�–¯ÕÝ9•w§ûgÞö°�Þ'o0ÀÿŠ£Ûþ,ƸÛ}/÷˜;E�†ƒÝ·ì›) Rú£{ï%þí}} .z¾¯»GË0´‚<|ãú�æm�”ºk}ÎWk½;}=¨¿+¼á¹žežƒÑu¨÷fÜ8†ªè.ú‹Á¼tòä)‘É9$Z�¶ËL£Ø>Ê\ÑÉ—ù޵?£ü\öÏŒb�=sy…ï|/üYxoYXkÙws®þr-9æÀËÂ>z›~²¦B÷œä(ýÏs餖]iÉsGš§=cY¢wá|`nè]ìø(‘zDo[öÍMͽÈÀHïÛˆNº×ÍFBË>:¨>ËþRñ/¬«ð£=î¾ÀH”ÀSeÅ—94«àñŽû�¤]oßZs'S�ÚÉÂ@$c ÿ¸ý¹~^*ÞÖò‡B?×ñwŒ�è²`Á“Y™É™7/*.´ïkØÕª(<à FåGÝÒÇ}ܣ̀+ž’t¸üRæ†ÿŠ¿ÙÎåï}/ûÖ�ž/ëòœ¢ÓúzfÙgßËgÛý¾âgJ´Ÿ~Æodô"n:-ŽÁØ-�kh uÝc4ÿf~…ÞÅON<ÓÉÜ<¯È5þ*~S'÷©k*`4R”ìuŸv( ´S¥ÒëÖCþ§9å{™Ç�o° }°[z¶_?�b„ìj›3ç¾l-T¢%Íy2Ýî_û>Œi=£|yFÙó‘˜{kþxª°—{´×´™áÌ£¬£ýz{7œáZ_îUö} y—gú^>7œ9gníŸõ<óég‡X+›ÒÞ…‘ÅhÈ *�U…,êËЕû”9—�ä÷²î¹,(#¹F÷*4ý¤ùn8ë07£yp-^4–…}ìMoóM>v£<7~еÓNè™7à˽Mµ¬Ýw£èãüÇ2þ¿2wÓ,ûU¾/ãSÿØôF‚/ÊþYÿòà/±1†õ”¯�mÿè í°ÃŽyV‘Vô*÷õ}4F·vÒ †#—®kçkÊ{_×ß5øKËÿXäMm} Á»* o2ëéѪóñ—2tKÏ,4*t*v¬¿¹÷5ÏÞ¿+÷ôûáнÜÇõÝÚU÷0Z‡Ï”¯òYŸ/ר†Q±émŸ_|Q…0š¹ÓÎCNÄ e9ÑOéeýež�ì×p§^ø�?‰ç 6¿  F¡ú÷ŠJO�×à씇y8Ëÿœu"ˆ®£Rà³FÆ�ÑQêÊù*Ù¨þÖQ¯’=c¤ê¨¨¨¨¨èM�ê/µ(¢eêüóÏ϶©�6Ú0[£†ò6ÚÞô¬ÿþ8Ts¨ú翨b)àÈÇ?`ËØÖ/ŽFОÆ�©ã“£@{Q æ¬:g�jÑsÖ–³ëX~(P£åg/ëJF€åì�FF#z[׊³uôE—ƒôFàõ•Ÿ(€F-å­ý9\eB¢Ò¶×žA*¯ß+****P úK->(­SΙrÞ̦q†Nõ»—É.>‹/?—êŽÞwN_śڢ-®½Uª÷çê¿G‡*Œœ…÷ô3OåYvª½vž¹K¾latžXïúiP FŸÕë3—Y x; È¹/²2NÙ—µ¨£R R R R R R R R É· WÉ[ÇZoå8;d^K”—Úœë¨XÞ)Pâ¦×£Š]E˜'”è—÷µ¯H뫀ъ´Ûu­ƒR@&Ãë£?ˆW'ËhèSvؘ¬E••••••••‹_îRý¥L.J2ªâå3:û¯´uW>©XÞ)Pâ¦÷ãÍÏÞÊít/ êë Ìå�Ëóú*`´<ïn][¥@¥@¥@¥@¥@¥@¥@¥@¥@¥@¥@¥@¥@¥@¥@¨€QD«—T T T T T T T T T T T T T T T ,Ϩ€Ñò¼»um•••••••••••••••P F­^R)P)P)P)P)P)P)P)P)P)P)P)P)P)P)°Jžìûo¼Ñ4cšfü¸ñͪ«®ÚŒ3&¿ºYQ·ühÞææ>o¿ýv›~Y¥›iõ{-ºø"£A�~\ÿP)P)�²NGñ)È>û³úê«WûSy£R RàŸ(@W°Ót?•ß2÷Ÿn¸øî÷þï·|¦wÞM¿cÍ5×L_©¿k>K¿ïÖ/û,­µ¯¹.ïûÛךëï–] ¬0€…ýúë¯7¯¼òr³páÂTØ“&MjÖ]w½eww>Ã3ŒÞ¯½öjóä“O6ïľ¬»îºÍ:k¯Ó¬µÖZ¹/CYö›o¾™û˜Fø£Fr£ 7Jp(××Ï,›€¼öúkÍK/½Ô<ÿüs˜­»Îº-‰ïo½õV3oÞc�i&OžÜLXˆ8^Ýòc˱y+ôË+ÍsÏ=›[Oý²î¨š#á™/¾øâ¨ÐcT&]oZ)°œP€zùå—šE‹%¸½Æk4ŸûÜç›ñãÇ/'+¬Ë¨¨) ¼üòËÍcá·ð‹7ÚpÃf½õÖ ]1t·¿y¼û^ ˆzõÕWÃX˜ÉµÍ7Û¼Yg�uú»ä3õûný²ÏÔbû˜ìò¾¿},¹þj¦À qìž}öÙfÁ‚ÍüùóÒ±Û}÷Ý›/|aÓex{>»SŒÞO?ýtsÇ�·§Ã½é¦›5›l¼I8ÜŸ²Ã PxôÑGš…a$?øàÃfýõ×o¶ÜrËfƒ |v‰¶ϼdR¾°°y$öõ™gžN€wµUWk6Ùd“f£�6Ê=~饗›Ûï¸-(5¦Ùm×ÝšÍ{6oÖX}�®3ûÝò£ª"Ná“O>ÑÜÿÀýYm°×ž{5x{4Fɼ͟ÿø¨Ðc4æ\ïY)°¼P0Ì�xþ…ç›7ßx3�á3f4FÒ¢ŽJ�J�J�B•À <ÙÜ|Ë-Qe´¨™:ejó…M7m>·ÑçºNp¶§/4 žzªylîÜLœî¶ÛnÍĉ_(�ïê{©Œ²†R¥šR‡Æ'1ºõË>‰9vóŒÁè;ÚûÛÍÜëµ+VÀH&þ‘Gixð�fÎìûšõ'LhŽ9ú˜f«­¶îº�eÅc›ÁW<½|èÁ梋.l^Š,í63¶m¶Úr«fÊ”) ~÷&�¿[oýGóDèÚ¾ð…/4{íµw³Ù(èC™SýLç(™”9sæ4—]vióÔÓO5l°A³éÄM›©S§6Ÿÿ|+{¯*íŠ+¯È £Ã=¬Ùf›m2›¶új«wþð¸²[~T½øÌ3Ï4÷…n¹öÚk²Zîk_ûz³í6Ûv5¯þ.~ûm/7³gÏzô÷ÜúûJ�J�&e}Ö¬»šy½úê+ÍÆŸß¸9à€U…uT T T  @ià�š þü§æåèpØaûš­·žÞòw×[¿+BÑ=�?þxsÿý÷Gâèöfݨ,:éÓ§wußr1cÞ¼yYÍ,¡«bºu”Çè´Ú—ç–ïÝúeå>Ëê÷Áè;Úû»¬Ò¥ÎkÙ¤À ÁœûØ£ ­ŠïàC¾ÔL™<¥F£À›ƒÑûž{ïiÎ>û·Í _hfî´K³ývÛ‡Ý:2´i6õk®¹¦yì±¹iÌ&…£~ðÁ‡¤Ò ꇖ) h-”­¿#œž?]pAójdðgΜ™<¡ÄzB¼2\€¤o¼1evŸ}öm¦M›Ö¬½ÖÚù·nÔ-?* W]Äi»ôÒKÄú—ùa³Ëλt3­~¯UÑÄ™xø‘‡G…ý>xñT>÷Üs�’qÕNÎ"3œ3¥=tíµ×ÎvA­:�l]]ôzóö[oðû^¶¤*×_=ªÆ–§¡…IUä{ÑB°jTÍ¡ ÇÛYu|ö(@Öo¾å¦æá‡Î}Ý4*Ž8üÈÐG[ŽÊbð ùÚkÑ®AÜÊ‘åÿüÆG+÷Úq~ÒÐÏþ+“û¬ð£d�6e™v üر+ERiBêUί«c)ЉOõÆ¢Öy9kŽ[sH•,hŒ¾ô9[FGMœ81õøHœ¸t†+ÖO0ztî£Í•‘èB[IjI°Í7ß<žîZÖK¥ý¬Y³šëo¸.eãÔSNmvÜq§!ôO<ÑÜtÓ�Í›a¿¶Þj«fÓÍ6K_lÍ5Ö‘ûv“ný²Áîÿiÿ}0úŽöþ~Úë¯ÏÿlQ`…ŒJ韒Ð×#ØY5›zæÀè1ë`ôîÖTÀhôöîÓ¸3Ã87œªt|n¼>ÛÌŽ>êèfÛm·�à X :Î Ó’¶Á†4kÅ9@ŠnK¤»åÇO0*l/ °e4è1Ì�òw•^÷ß?'ƒ ‡±vd8Ï3¦ÏhvÛ-Z~'\ÿâK­ÊÏÒ‚8!ZKwÚif³q´¨.Oã©h¸ýöÛ²*LåÜ&ŒMž49ϲXžÖ¹¢¬å“Œœ½Èæ©$ª¯`ã—ûrÊY'/ïø¬ð#�ì…^hžxâñ桇 yµf×Ð+’ô¾ö˜:–Ràñ Ó 7\¿ä¼t:è /¦®Yú©þ‰ Q}OŸÏV� Ü1G›•*#q8ó??qÅù ÐhQÄÏ=û\&WÖZ{­G> Þ¡ü½¹iý ë7ŒAqf>vÿ0ꕵq›o¾Ñ¼÷Z)þ½ZÌe|8‚ëDÖa�5ã\–>2‡²ùoÆÛÅÞŒ5,Š,’Ö¿s¿U£#³ûQqá»ìu™CÉt¨Lð\ë}kqV?.ι¯Yoñ90]Ú³wY (•Œß» ª*Y>ϵn•kƼ=Óšû¢·yÅ<4Ÿâ´-¦eÆTkÑ[±&û°J¼5M&Ý9Å~^9öÁ 0²^÷0Á¼y[û~�ó[=æ<.æì¾#™é/•ï,~cE¼Ë*iñnüÛ¾}tá€� >ã×´²Ç¯Ç!à­À{µØ;{±ÖZãsý2~í£ÈÅ^ĺ ïX[Ü{Lì‡{ZÓzq »ïþ]•RÉó~ð ºÚ{¿SáážcV`Íê�ø»ó�\ïoèh®qITô¬¾„OzÏËœÐÝ5xÐùRö®¯Ñ¢WTç,x²¹Μ<ÿG²¹Ñ63fÄ<×ÎuàI÷|þùçS>�@Û3Í­³}ÞÊ5µö<äãcò5>çm>ø´Ð¥ðcoK3Ý­,ÿ›oÆú"ëOFðYXò1'îË/¿ë:ñÅaóùUø¸ÝÞvê×( W�’'~3»ó\èàôü)^Dòz³{µZÝè: �ö3˜:õ»c’Áü²NŸ;’v‚ŸÉFà6+íDÄnÅ—[)�ìp•UWɪP?…¾îç¬ÖRA¦šþ¤8ê`ZøX¯¾úZʸý²ok„‡7µ â­áŒNù¯ÐŸ}öÅ/]-@}4à¿Ä/Œc†3ÇúÙOŸ+ `ôz¼yI;‹ÀÇ{¬Y+J¹÷ÙkŸt :¡¼îúëRÑÏÜiç $ï¹çî<+G DÙjÚVÍä8gÇ99®qø®LûK‘%ÿ0CÀç™õI==éÈÚâöû{æî»îž>ëîYÍã1Ÿ×Ã)Ze••ó`ßÉ“§4Û…qw(…ã•óíãÕÅosà¦g ¸”¯Á¯Ÿ7‹ŒÒôhíÚ,JG_%P§T±Ïß}ϬlË{:ä @¬ÏàS§n‘ÏwfL{ ÎjA'‡ë ¬£Œ¢J�)“§ð³SÏd8û¢·yÅPš;î¸cÎÝ5 àÓ±OÞž¦­eâ&ó0k¤Ÿ�Æ`€‘µrúšwo´¿%­ž{&�ós8©·lMŠ,ÿHfú½!ëž{î ú, Ú¬Æ÷£ Å›éD8‡ÇaðìÝ‚ÐÝaìúÄeø²Z$ ¢À�æ0ï ±·íC€nMgs¡ãÛA¿±+�Mƒ1©gRVjôÊÙ'£E·«“ç¦MÛ2ùÆïTx ½VÎ€ë¶ §Ü�ÓŒ�Ñž=mHøE?;'Ô÷ö‘ÌÜGèËq?`Ñ.»8„qbûÇ–ü¬­é¾ûîmfÏ™½8{"�X�=Wº-8èé™”££Ï5×^�ÀÖ:¸Ù"øµÝ¡Í#èlMhólðûëáüeçäKû£ùà×…ûŒÈ°–¹ÇŸßWž¾}œm€'Lhµ\äÄúù‡ƒÓcïû¢ÇÂ�Ïv> õ”Î ]•o' Gd�u×I™Ú"xÌó??Œ·<•Œ4}‚ïè£Ä™bÀK÷ÒŠ7TÀè®Ywæ9 èÙoßýâ=ý¬ü³ùë¹Á‹*²FÐ@·;øT0×_ në ¸‡SçÒ»ë‡.?ü˸i)Ë;hÄùÄÃä(Én³}…>¶ÓKZ$´” `(FoýÛ)ßý:7ZžéY²Ï>ì&÷LN€ÕÛ�²Ú¯?k€ÑpùñÓ’ºâï<üðCá·Ü>Ñøæ�h=ß2l›¶¢½÷¥F½)22ÿž?~ØÙkÒfomðé�„ʤ[Û#¼Tç·Þ’:�nçSÓQøøºë®Í3¿ª'ü«ö‡ÂçÃõ댆«GÉ×»‘´ôâ‘¿ÿýïñbš;ÂÇx8}i¶™ßÌ7�>}FT®´¤r­S¿«�t}þ8˜_ÖésGÊNwîÜÇòmµ@Añb±b#¾ìG•€93" d }Å”í€?ö�/})}r>3ÿ 8)aÏñéwØ~ûä­áø�ò_¡¿Š[>ñßò³ÙJ‰_öz 8¦ÏM¯¿\f)°ÂF¥õá�îÏà�Ò;î¸ã[Ê<2˜wÝugóû?ü.‘ô½ãðd†°$˜'+ Qw¸2 CÿPp#+/"ƒ®ZoGš1c›fÓ0œ/÷í³÷>Íø¸?gôùçâ-+QeäZçvp„gÄA¾ŒÒ¤pLUíü ßy;¬Y³îJGúÅ…/&XôVŽc‚Å Ìn°al’­¶Ú:…—S©Î $ Ám·Ýšš€Sæ ¼rÎãâzŠLà˜¹&üóÃ`ÞzÛ?Ây~4Àƒ¨�¥èÚ1ñß*‘ý–5ßq‡šia ÑÀ|ó�ñ^ôžA’Q �C«Éè¡Ê}µ#Yu M(}Ù@#A¾ë:ÃÈž‹€ŽO=™À݇Qe„Æ¡-aæÌ�£Ä}³Å£îJ„ �5/{ t+4|.^/sÌRI±s8ÈÚdW ÝW>kž­ÊÇVÅ™ŠHÕ�4Ð÷£�d1WIä÷íô-÷Át—ç7ñTÏ4ÇöLzÞp€ÿ¹—=æÐÓ Ú�ðð°ucw_ øÆ›lœòœ˜ù½–œnø¾ðÙã ßvûm©_égúïýX—б5á#:@µ-ÙÎFe�¹ßA·÷ß{?iŒ “×Bçª0 ÿ”¨0"gìïØ¸Žª°Go×�ò£ëè o"-sñ;U[øÚïZ|Õšk‘<€o|ÖZ ó±·~o®ªf­µ}�>ëÚ|nè­0ÖþdèLçòøg“z&%–9¹¯`å½ cëþQù¹8ËNžÐÙ�˜+iíôÉ?ÆÿZëmUÛúYu€û¨w_|Ý>ç²Þrýp¿·æ´ ÞVÅæ™^&gže�½Ÿ³äº˜=ãß®áïxi„7uöUa„¾¾ŠžÉçÅ^ ñìh?°ßlm{…‘ç½âyh‡.*’Ýë½w[:ݾ � �ʼ˾ú,¹H/µÓÐu֖󂜔k;½®\ßûûƒ>Øüù¢?§�ÚbÊám•íY¥B´<�t¸5VB�¿Ëÿzæ™g#¾8/læ+‘PÞ-|³mÒ¯REΟ4uâ×óÙÚöäÔÐ ;ì°cGzT²Ð>?òèÃÍ_ÿú×|“ñüð¹ð¾µJ\ò›½ÌãÐ/Öôôôtåwõ¦sï÷ç—™C7þ^_~úpü#üŒ+vBR�?ôFÄrt¹‘R�õaØÎÞg“ß͘pŸ}÷M~ }%\í¯øñšk¯Íëð€È³uh¨„%‡k¯µNFûï·_úíbr8ÐH}×ÿ‰CZYµ×‘íÍ6óæñ1ÁÓOf÷ ȯéÞ":´3jšsýÛ§G�0¼Žæœ@ˆj'Á»ß�öÛoÿl±¼ÿ�9 ¾©Ùpƒ�šo|ãäÜו�¦]|QótÈ‹À˜³´Ë.»æÞ–Ï´ÇïÀtà 2[œ'kÝc�=cÞ[6† ‘³Õ"À¸oö½Íégœž2ñýï~¿Ù5ÀŽ«=Eo¿êª«rýª“Ð]�÷F÷'ž|<å ¿Œ¾g;�!N­à´¯CØ�@‚Å9Ñ.wÉeižŒJ¼Êð‘�UC>МÜɲ<|EÖœá0Ú)@N;Æô�çÿ1�'ó|¢¯¶4üMþ8í*ðŽ‹ý–Áë+P(´ãÀé­¾èÔ‡օ.ä˜ÞI}N*z1^ˆÊ {®ròÄ㿚º¯¯@ª<·|Ï€0 Ž0¸qVb¯"(gÝ}Fž+›Eß½r©òSËᢠ$ýçÊ›ŸD5Sð%GHpDGØN Àhýõ×ËŠ¶öÊÊ2ßâÐÓh­¥È\Ð/Û ºa0«Üo°ïæ¥*ÅóÈ’5ªZ1ÌïóÁ—€õRSîçó@WÉ2ú`TªÊvZã[Ñ®É�õyk%ƒCm¥+A©sT^²–æÍŽÊn›°Vu,'ƒÇs\Ú,t@»nøž,“G@ÝߢR�l�W�„¾ä€Ì $VT0Jù ž×n‡nöჸ·r~ûŠnx²€ž9'ôciICÛoëÛÍV‘Pxýµ×3 Csœ8ñ 9§výÑ)?Ò1æÇ¯a¯È™@ 8H~ÌÏþ˜kªð2�/hé\ô.9饗“¿&LØ å•Ž-ëD_÷E�”Ÿ ™w?{ƒGôXSÜ» ®MÃQü6 ÞÄ߯ÇýÀVk‡ŒKú¹R ÷0<XI§˜ûª«­šÏRyë¾!ÉFtÆoÖÔÍ(�'Ÿ hî™1é¸÷ø”´éë9®³§ø“?pZ+dœý¹ñÆRôðE3+ÌcÇønÝ’Ÿ‡¹ã÷vÀíÃkA_6cLèɉT÷¢o¬Áìµ@·½²y¨z ϶�áÊI¹¶ÓëÊõ½¿ÓÇü A:¾›¶t¿Ì{W¶ž÷n$‹îhÎ8óôä×#�<*F3ƒ6ÎD뙿=3eb¯<½) È ì-þ\'~=»Ø`´ÝvÛ§Ü W�¹È"ù{$â/ñ0/ Ç_j%lÍ=÷ÜÝ\qý²Å´-S&#�ßÍ¹Ø G@°Ó§Ïh¾/[âC…¾ècíÃUáïó�ø*°ÅŸmºJ|Êw¦—Ä_’÷“&MÊç D_UOÝð™çÏšuWÚ&tØ4:pZÕh¦îäÒ×é„^«ã³K�0¢\8àÐ�wÝžÕ'Ÿü­fœ�Á;#QwÇw̶ ’Á¦f‡PüõŠËS09ïñÝwÛ#[‹Tdp ef BP?-”Ç1ÇÛLê™F}éýç‡Á)U*f´·q´øÀJDÀNÈN8áÄ4,ù÷ÌÙ úÜ~ûíéì8„N¦ƒƒ)€FY£,Ñøñ㢅ሬÊáÐQ\ûûU€p8•fЇ³áPI$þæw²ßÓ·ž‘:`V Ü7Þtc–â €j•[2S€6sQXœœ¾è­È(†@™9cËA‘)Î6¨øÙàÐ@®oºêý=䋇4;…îÙ|R:'}F==­ŒðAÀA‘ª–iÑ|Fî'‡÷ѹ`Ñm,2/@Zu3(÷ËÿzyìÓÝ˜Êøì³Ï>¹.U$Ú´d®­K›çƒQEÃÖnÁ¨Šºü¯—åáìÇB³[´uQž�Oµrˆœ]³æšãšS¾sjVдÐ1¹�wppö9gÅ:_Žûî‘ü«JÉÚûÅñU°Ä3€Y@æG™À‹óJT”øìwÜÖüò׿JÇô_þåGÍ»ï‘ÕüütÛm·¥#»ß>û¥œ2¢Z¥€‡î­Jг{üq'Äžo—ò7'å¾#²G¶Uòüå’‹C>^�5ï’{¥JÄþ©ð"·À`,'ŽÃ0Ú>xË¿µk�~úo¸úÊ_Éjôý\¾sç>š{&9ꨣ²2¬=àëM;�WÞ7ôV_ô°øPõ9¢ÇöÀ…³ÁÑ`=z†CiÞÚéN=å´÷8�‚©á üo~ó«tZðéŽ;ô áO¹´çþ-g�YlWñGfÛž·Àà��Þ4ù9à�¹nÚ[¦sbhèoÚ�ÄÀÏ~åÕ—ƒïçþ ÎÒôÝnÏ» 9‹øÑí“€ãL0¼m�tlo¹žZ§kç‡-þâkS™Šç8‘*Ãü¼q¬×ýÈ ýËŽ¨¦D/:} 4Ão›l<1Zâ¾�•›‚e2Mï †Ý­8�DŽ>ãohÍIlo»M«Õ<ÒáŒ6L󶯀8Îò˜øÏ‹%ЖM ß�¬ìÂ@Ãsô×_þrQ‚ ¥Â�MôÌR}ä,ô<ñÄ“š]”*™G7|�—€Ÿô¤} ßZ$UþEì#¹ú³]ôºH‡¡/úä>-ˆ} ЉÎ^ñ�Jß ‚V­ `£2×Π|Μ¥€‘Š¢Ã?<�s÷bÓÜŸf“æ¡ãì»Ñ9?¶Î3GàI°E ª�U¦á;±UOØÞõ(ÖàI|P07Ÿ¥wØ•lxÿ œ%ŠÈ]ÊjÈ ^BcÏÅ‹¾è öy‡vÌL½Ï=U1ª�ÆsUª •[@ÞÃ>°l�‰·= |�Ć}eC臹a€"oÄ"™³Ñç§ ¦­™:u‹|>~&�ŒÂç’ dˆM΀­ÚØ×›Çw K{BÎ',–qüoü®ùóæ'�Mt0L@ ôyþ…– o³Í¶KÎ0BCú–NR±ÅçãïIª ´g|6¡§gÒÇ#Ï´�*í‹û �­rZ “ïiÓ¶Œ¿õ$}Ñg8z O”=íDNÈO'×áÍ�›ÁoàûYÂçè£�IÿÛžþá›/©€ŽøB² �‘Ýß„ýWy´oø%b |¤ÒÊßø\�øõhËç,gÜà™SO95ý�Nõ(ÈnÚoU±çœwNþÌ�9H]4]îvãw±ã�'Ð_íoSóÒÕsç‡míÆNÐ*ÉÙI9ºˆ�¿¬tÁb=•iŽy-@}>Ý%ñÍŸ }éuûËGûkøs øGÛ…\O›¶UÄ qžÞ+¯$-Mà¹3wœ™þåN;yyˆ˜¡ÿ”ï†ÿÌ�ß~{Ȇ=žÛ1Ö¨³!”>u®Š(º€|ÖñÙ¥@ŒÂ¸µ:àÈ#¿’Š~³pt•Œ¾ÐìÙ³›?Éx†‘¥,÷û`Ó�:‰áh:ôö¡‡LÀçä¨À`<ÛïÏÐï½×>ÍÎ;ï Ë6¼QβЀ@ÃÅá(3BGuLäRN2ÀG°ËÙpdiv<ŸSËÑ2wÎÂe—_–Ž客‡Ó Û§òcÞ¼ÇÒ‰Übê´lut¸–ãë¯êEæ›á Ô”CRŠ" þŒéÛ¤s, Æ?2V7Üp}~OÉFô‡`ôûßÿ.Û¿ý­ïD€»K\ß:À˜ÜÒ|U[¨ -ù¢úCŒè-ŽøPÅCž2•Êûy^ð™u~Uà½ë®IûÁûÞs*`d�’Üç�U0‚ÈB�©ô;!øŠœ·òtþç7G‹}çì(çÆ tÞôv üæ==Í�”ü Äóö^«Æ5×\�:ŒìhijA€¡¥vï½÷N½ægûÜÍú_}Íß3ûFµYÒ­ªzB×lúˆý Û@óÒd¯À‹ã qA†u�W|�'ÎtšÄ…ŒšÐñt.½¢ÒKi<�ÊÞ¢— =|é­I*XÝ“N?çܳè+÷~åþ{qÏ8T8xÐp-Y²›Z¹íþ¤G®¹ó\ÁªÏ©~!ƒp%�¼ÍŒm—Ø›öõöþÙuö‹-äpûùs©1_ƒ­$‹äé�7Þl<�~œ™@ š :å{zÈYS²µæÂ–IÌL;«��®¢×Ýÿ’�e™ÑM«àP#º�þF/ö|^ì"Hv² X7À)Ž7û­-ˆÀ±/F>p`«R¤{Uí©N¦Ë͇Ý`׌NùÑ<%^d‘ɉAGá+zËÐê+quÈ!‡æ\éo„R©¢²’>D3zï’Y¼ä\ 9 çUã©Ĥ}ú°áž�Ÿ·~§·Uh�Q÷4ð Û‹/n¾åæ´�dDÅV©NÒžŒ§=‡ì´¿= p7+@ozÞZµ[— ûc_웊_~—ä’€ˆØÉ@»… _Èg]zéÉO$8åYhc½x_pŽ¿U¬«¾D ©â€¾Ph¨vÅ_@(4ã+Ìœ¹sF苟ÑHe²}„[—ä¹Uí©Rp¥Ò¤½ÂÈ|�*ï8í”Ó#~Ü7m¿ûÌylNŒçª$¼%N&‡n¬€ëKÆtºýsßFˆÍ�ûClºé¦ùr Ç6ÐS¶‹}+í“+�Bpn$t8Îo|㬬\*� ¬]ô—‹jOøÁÚ"LI]T�·Àpßzû-üŸ{Zãý•r<p`^€O«€2¢ã·çý&‰š4ЄêÏñ|eÃÊ)S¦dEΨQ£óúêdÄåA81Pªl BP j¯" á¤MŒŽþ#h/†¯Zиß-Z×Q€ÔCA6¨€™qT:÷µÕ§ºÖuÀ´ëÈ  6]ÛXÑÕ›0Rê»Ýg¶ÏjÆŒ9Öj,¾Ï�‡Åþóš4Ì�j²$VIça|šF‚Y0çû\{Îe0N?íôˆÎöQɠɊϸl{ ‡¯žñÕJù�6ÿaÜ9"ÛôdDÇ�ŸP;ḕo‹â�ŽÀ¥—þ5AÝ÷¾÷ƒ<7ª×4À÷wQÚ,ØD�Èt 9ÃцP2§³ôH|'ÎAÎe¬è‹ ñœ³¿•ú` ÔF²JYÙ.Áµ¶4®Ua€Ls¦—sµ¾óíïfßÜ’™Òjók«š À¨ëJ�¨ºø’‹ó¹"Ìß\Û_«ÏG A&p@ª`N�·AT[WG�Èäüé¢ 3€å0�3°×ò3y<·’ Ad«ÀÛ7ˆ<àÓŒ0lÜvÛ­¹-HÖVéuÓ&Õ·Uc8"Ø,:ïsa„Löû‹cKš@@å”q™¤ÑÊJ˜åoð ™[‹€¨¯fmuò¨*ŒØ$ú¢’ìÄÏŸ”ëÖýȃîè×/ù‹ ö�?öøÚ>ä�€Š¤�´V #ö„�šóøãõµr§o þÐÇïœû� tŸ�´F²CôI6¡Mvª´ñª»�¶ò"AÚÈh�»ü÷¿_±¢ZGÙ¸`Æ[sçgºŒx`{W85ö¥•ŸÒ*NUµ!}[� ‚àUQ±_T6Û²Wö¶Vªlx“�L¢ NL%rë^è _ ¯l�ì7ÿqË­·d­‚€c‡Q€G.o™2Vxþßÿû?AÌÏIÐë�¶#géª ëIËn�7¾vnÐQ6Ÿ=ùS¬§Çc>GÄœ°Ol ýH’¯{ðWôQ庾ôºÒKöÍÚÓŸU}£Š‚ްu³‰NØãš~ÐÁ™Q’‘£ìo»zo;ìŸþ|aV¨Dh«^â/«¦�CÖ³€�¿›¢­FúKT+\DŒ¹EüHB©*Y²dIž|•ª&vß™ȤFÂHkM»Î™1æË6f¶ŸÏC�qÚW“€ÔU•´£�H�.b™ìͱê%cv~™~°ÝX_ˆ-“¹ý80 b±àÍ[æB%ÅÎ;ÕíŠùD.Ò'/TP%ê:A†  á1'ÖÍAüÀ+ÈV¤©{"<¿„;üÔˆÏü­Q>äj{ˆðPµ´$ì ýP팯­ð÷p€!`NÈ̘Ø/aCØ kᘣ�Ë>³/ðF; yå~†ën¸.ñ#¢�|%G<Ïš‚�‰Cn%|ŒÝùm¸{B®ŒRE�uLnæ�þÀ?üƒß±eÞ’&aÅÆ²ƒþóE)_ú¦z�‘qîÅ>Ã(SC #÷5_Ë¿F"JÕjOǪïF"‰n˜×:®Ü/ .vÎïb—Ø_¾Óµ³NFí\7zôªgæõžS¶ˆ�¹wæÌÀUNÿü�o|3ñ�µ§±½Æ K¨¨übT !صjõ®0Ò×Np=ûÞŒ0BT‘}»v´Òkøàç?ÿi®s‡-Û0vÌJ¢qÞ îZÎè‹0²F;y.²¶?!A)Ñbþ$%^Ù¯Þ=¶“ÃùüLçE �~buò­ˆpñŒþ’×w¿ó½Œ ã5vÒ˜*¾ãœ1å{ 9Þ‰þ±�ð:ÿÿ²·ŽŠ€Ø_¥­?(„QØFBP° ŽÀ¢Ôkè��V&/(ñ³&‹¢[`sC¼Ma«pÂ*;€ØÆû»gžùõ#Gn��Šë�P_"‡ 2�š©S÷ÈàQ¤rcÑ+/¹pPþ=3h45¶úan7dFÝA„²ªN8.FxÙ²ú¶9Á¡’rAGu® â¢2F.à¯ü rž… ÁÂɺftœ½#ãÀy æÈèk…0Ð!DRÊs‡U7ð8rÄœÇˤ6#Œ€$)B†d(í p“,* 4Äyóç&h{13àqÃ!vÒ*ÂHàG ö‡¯|M¸,ž’f„ }øƒÿH@ØH!6lí„wSwß#ƒ.Žœž02�;çä)Ë__Hzp×]w% =+ˆ Ü¾i�Â0Dx Ð&•€¥×ëþú7¿ Q =Â)t}øðY¹ð·¨T.Í¿k9cº9zf›¤ŠçdчÕ9ŽN #ÙÏ~þ³Ÿ±Ø"A¯�¦Z줰È2hW:«O3Ž:*uNµ„-•Í#2øÐc;v\\7#¿»eÕÌSŽ=–€á…0ð Vîྠà.ÊŠý(cöc»í·Ï@dd�Æ Ͼ5êBõŒÆï­F*Ÿ�uyfSö{ìŠÛÐ#Òy¿;/[Öö »"¸°=i ­U±Á¦Ð±%‹—¤>©C¬¨,˜»?ÂHPˆh“½>ôàC3xŒÙšËÿvYfz÷Üc¯ @§OŸž•7*?gƼÜqÇùÿæO&ùͦ°/ž£Šƒp†r¶“fÎ%ŒÕšz$ú§"EE&0jFåÖšÐ%úf[*‚V5€@õôÓƒˆ å  ½UN¶‡¯¿ÞÙz(Œ± 6KGQ·;æ™]ºöÚkÒfð]{LÝ3ƒIöaDÿeH�Èd�Íâ˜: �3ˆÎΡ×qÛÐùk„¿RMÄgª$²…†þÚ P«°c·‹³â$?ø믯¦¿dfË“Šãá_­Å·Þr€ñ{µ±¥@%‰û~Øa  wrÇgÈ¡]½æégÂÏþ:ü¾Ô £»Ó/�߉'žþb׬EîÒ'úáoÜÏ¡ˆ�Lö†�(›?^mv¦wù¤ò´ˆÜ�žqLÊÇýõµ^Õ8;åËöž}Ö9™,ñYk�¿µŽ0'î’kt³ÀÞ J¶*Têuƒ02ÏH}/g°6͵êJ[ó`DöL‹·e.±>­}oá²}‰ÍëÿøãޝíöLõ”{ª�{*ÈiºE®#[ðMÏ+‚8;ÖÖAœÁ®sÀ¼6 …xrî¡ÏZ ŒÆ¤>°•ª’�¼ù]XŒ}ˆ]²•™Ñ÷vÖI»×©Hî¯Uä |~œuª’ÛN9õ/f¥²A)‰Ö˜P®ÖQoÂ × ®·å—þô®0b³;±£ˆhmu„¿Ú ûk}Fô»“çÂË�ø ké—ÿû‹´ÓÎ@åÏÙFqPcã‡Tð ŒìÀ �~buòå̯øë†¯Oÿ|nB†Þ©pç�ØOì);Ö_ƒ›;Ñ?„3Ûc9Û”ýúzàñÜê0ý*[7%P£XP�„޳r~øýÿH§Õl9p¥Ù2+2A N|Ô¨zæ‘cGp(×ÝðÏÌ }+¶`´ñþ€´Ï)"XÁÆb|)àI%c„0úÅ/žÙ_tA:2¨ªPªîQU:�2"úʱqjŒ@pÇ�·'¡d�SG$lN^�±}€ç ¼D¥•²a³ë®».ÁÛ Ž­gÃ,m[rä‘ÀÀ=JdÆà÷Wa$‹îLŒ©a`«2à��ÈØÃžëß©§œš[ßšFdúàC³X{m%ðYŸ§UÏD˜ ÉH)¿ ê¬o®��}ÈÏŒ;GDÖ‚9�„=ëÕÖr1&Àíâ¿þ%˯øÃ%aÔø�¢-i‚­Ýw Ò0EA…€Y„$ZÏfe`tAànÌôE )Û/†0.Ì#Âavd”À½ Î}5™`×#Œ~ú³ŸdõÆ9g��új^_Œ·úÝ„ˆÊ0ý°ÕiFè£ÊA�9RÒŽi%ÃQ�¹Sˆãý¯ÿús˲j»ƒ>76Ar‚n[ƒ€U�0z®)a$¾òÊ¿ç|VDE#¬î ª*Ó‡DÌ#kØœ;÷Éü½Œ}S!X#Ö¬?„€7«!o­!ºÓŸÃm•0¢‡Æ*hV¢\JÈÁqELrüi­F½ïi«Ø5×\6bfÈ8Îw ›×a„8f«è­C U¬°d¸~'€†ž¶÷>I”«èèÝ}÷Ýi�lb§L™’raèº 5dÎ.'¦}vòïoz�¥¿ÿ¨|êDùÙ7¢õôŸÿùÿä:îÝ/��ŠÄóÿ» |‘(ìŽJP³°^ye½"�Ž©@‘HpþÂÈ“ã¢òȼ{¶õè€~[pT"º%2B$ù¶6„"ÒVA™^À–O<Ž ù;ày˜»�ÀÛy^üe£_í-3s¹lYýŒY\óS'¯§]²í僰QHwUõ’×;[ËtW?+ûÛŽÞ«ÌýÅ/~�úëYÙÑ—Ÿ­3äÊ—sc Ð{\Õÿ#Œ�:*Œ®;áü×íÄ:ße«¤J0•Bªa· ¿JW1Þ�„‘ʹ3bË »nÎøge ”øÅ-·Ü¢f+1¹°�ȨÆÖª>V�®ugí°*¤­S¤{‡p^:c-_A¾"Œü݇Udžýr? ø€ïštxÉ’¨®‰àÈ}¼�ÝUy sй$Î#! fœO‰l#;þÚu†ž# ºA™/:LntŽL¬ÕÍ£‚ N€?R»üòËÓÿ�‰ß“›õj­«‡‰�i’wÞÊ�YWü» ZŸ¦*aD�àã¸þ†ë2ùã¥/©?á{�²7ÇVVúcÎmsí¯ÂˆœÜ›£cp€-ñl�/¶Á—Ä×@ìý:áøÒ'¶³NÂb·µ¾Zõwäú§?]˜vÓ[Em´M–¤ÏäOÐg•'|¹V­£Þ„Ñüùó:ÂõΙƒ9{FÖQ'vž×¬ßþ*ŒèK'¸«’O>¬É?}FlJ'Ï­*QÛÅG®ûÙÏ~š ªþ*³ašêå;Ö¼8 ÑO¬N¾üj}~ïËû°Áì–õÞØ$ÞáÕœtqôèò,L ÝþÜÔI\)þD±-EÜ…h<Ã΀° ¥­(„Q€œFBg�FáL¿óí藍 �“ol²*Þ¦T=éxlBü,€,öXF €`|¼v¾± Œ¸,¥ªÙì“"³‡°§vQÖaìvŠlP1„ìz+΂@()˜( U%²“># /k¬/ãÑo%Ò+ÀV ?àµDE°Ñ¾¦ÆW娪19S˜Ct ê¶‹CÔN?õô¬hF ´�!ðe<Êè›1úH€±§gL]À¶“ ±7a¤²# †˜+­SÂð7Ç2»ÀߢE‹’Bf¬ Õâ3 ³rqÑŒ02ŸÕ–G ³"ŒÈ aD‡ê„ѲZ#a¤ÿHÞC>”¤OfO¦ùÙ±ˆE3¢®qîa0ï´ãÎ9ßæœ\›s˜œ7à>Û*Ç�Ÿë¨¯-iȯ+®ø[‚zÎZÆÆrcãØ‘B3gÎÌ3"|adK�OntY�` $"ÐZFH‘²³È=kÁØ(àÝ—.„0²&z—Uß+ÂH`¬ïkWZÐÕ}Z @«ÏWßJ=:2Ð!à z¦eÀ�«¿ë»ÌºC�­íË/¿, #D‚^u‘Ï�¯ÊöÌùmæPàþýïý +Vü�ëF¨|Z%Œè–1ªøù/~ž¤ÁÆA¢l³ÍÖiÓ²ä?ÈBSp>räÈœ_ ÂÍ›êVFÇg¥€q_z)ˆš°ÞæöÙx‰Áâøœ|ÍÛ­mk AwéeMâˆíP�ćl�’¿oÏÚ~ûHB„n{+¨óIÈ´o½®ŸƒP°UG0ͶX¯Æbë ­7Ï>»0+ù†ÄõEµ£÷õ@à'a#ÞÈ 0[V›ùÙQátSØ�?1'«{¬×Æ@ /�¡o½€ßY…l‘�d‡ÉH ÅÆ�rƒýh$Œ’8‰­ó‚u×ðe‚vûꫯ 2tXí̯�™T’[ckU«@ÉÎ7g@Bý ó�¨ôvD~OŸU÷9ÔÕ¡Ü£™AK¤!C·*¨ÆÎ¿ßëïó‚€WûNTv³—�­]ˆ ù=ò!¿¥AÀÁ#ä£2 ®Q)'àGÒÍŠqü)ÎÄz?~¶uRE­ŠkI’Áu¿B†êaw ±ø�î +×ù]výÝwßË„icÇÆÖýöO{·lÙûy6!âÂ=&MÚ5hp—5Å7Û*©òÆA\ ŒT>بòZ¥eVÀ~绵ý8 ÏNRUè÷0…ÀsT`¿þ#Ï>&*ÜôKµ§Ä¡ç7~±M3gá0»„ ýJœ‘&ÙÓÎ:¡“í\‡\n¥9óEe |oÁN¶¬J¸8Jâí°¯õÊ£½3xfƒ´jõ&ŒÜ¯\ÏfÔ …ûkÿºåæœç³Ï:;|øni3Úµ£_¡a] nÚÅ]ínI«£vŸ»hQ}K{ߎŸP‰šF��<"Îvš‰×°alMccûnˆ„?Á÷Š/ýÄêä “¬:¿[-¯ŒüwÂH¥¶¸o „‘õÙ‰þo!Œg|ýþ¹F®J ]ÅQ ´nUE¤ÏÌ‹‘±•YÝu×IIÀa‚‡Ï1 ‡vDdØ÷΃Ó¦��ÌÒÄ'O‡¡¤]`e{Ž”¨HA&ãŸíEõ@öé|CËÞaüdž[UüÈV¸Öó•ÑÚš'*¸À¢ˆ¤ÏqÇŸàx�öWa¤bkò¤)y£+llˆ-Á�L¶±�Š` �ÁnFÒÀÔ�wß™†pl–!ú͹Î ÐÌ1°‹ Lõ̬¸¸Ÿwn²MG™ØnF•Mš$šì�³Edi†Uéã 4*}c�VSÂ(ˆŠ£Ž˜‘•Y©¶¼Â¨"ŒÇŸd…Ѫ„‘-~` ;\]†ßᎈOxª œÏb+Z#Õ�ÈòO�FdòÓŸÿ$Ç� ôô¨À[•P5ïËbÞ½–hVmÎm1i¶% ¹$£» ÄzÅÂøšd÷nlˆ;à �Á¤!ŒÖšµM¶*.¬5zmÝYGÀ i}ßÎH²ŽyäÚ¬µJõ¥‡Õ=­Ï?^`ëãË î¹ÎFscž�ìÓ1 {ô•DŸÿ‡ßeÐ,ë…€ÜU£üåâ?玗cކF©¹«€*}V*î A·íx2ï*p>NÂháÂ:ñ�[‹Yaô£ÿ“p#áRé°øãŸü8ìí¬¢ØyUÀ’v?Ö¦J6r×H3C…Ñ¢$ŒØõc#aMx6Ði˜êŒÃ¢ÂÈ–•?Æ–íŒ8ëM@ÍÞ/ZôJž]€@¦Ë >|Xžå»õÕd 36Ö%€É¾újÖ#ÖBÃ!žú%pW)ËF+�ß(H?‡z;ÃÅö4oåtÎOc…Q»z¯B÷m5ˆ±~Ø‘ŒÞÛÏV�£-áfo�fcó»*QÁÞÜŒp "†Í4�P[”‘ü ŠoJãƒ�„‘³Z‰ü¥ñw]ù[܈Q™^„‰à�hl%Œø5Ä"ö¸Ð‰�¾!Œœ�… ´î$¨�z!çº,P9sî¹q¶ÅÞÓò:öô¦°“ÕCéȾÿìêÉ,ÿ§]ˆ|ÎÆ/™em#LÉÇ[>Ag†ßš„Š·¡‡D]LD¼=óËyÝÊÃä_ËëÎ;ÿ¼$yºA™ÏE´ÒÛËà;MeXB‡Ü4„%R‚~Ñè‹ìbÀKH$ø´ § âTC©øCmþÝÖ[„ÑÝQmi Ö�þã?s[‹”I(…|n»í¶Ü&Ýa 8Ÿ«B©Yb¦]»4%pƒ3éCÎÙ× r¹�묽VZýpôûS—$€`‡Cýl®á ‚P'˯}õÌ´HÛÊßö¬Ù¡×¶v‚ëGQ·*¡PK¼Û‰íMI¨pÛ'ðŒµŒ¤Öèn'¸«7‘Ý{úª0b?:y®õÖN¯úÑ>z>Ö‹—¿8cP5¼àË. ­Ò¨«¶Îy<ø®ÑOT„Q_òåÿšÍo³ £v#‰‹NôO̱‚0zxy…QØ›Ra”j°ÞýS£ek“0z/¾Š @Fð®10¾¾ÎP°Eà�¨d`ˆ• /ücyoh²E©YENEX0¨U€ PsÀ0t €çDxE®LbFùµ·Ry¦J¦ V1ä:Û‘™@Õ¹AJÇßüæÙ ðe<‘ýFª��ZÆâ¬!਱ÇM7ߘZvÏ8 ¥üÍ#À^Æ’!Vñ‚X:3¸û¯¤ÔåñSòA™Å6G'­’_‹€¨“-i‚ DBˆ¢CJç�6àÄ›¢&Á…Q:-ßMÂHmî¿ÿÃï³ì`}Q’MÆ_þò)ê½·Bô%ÛN #„â.ø} ªi�hJÃ{ï‘G¦} Ü8ôÍ|ûð6#ŒèÜÍ7ßú÷xV£àdÐ'.'`«ñÜ÷Þ;³vϽ÷$ˆrF#aäsÖ�µG~ùëÇ›Ê�E*ÆlQÑgtM›¶o=ÐëȨEÂ(Vz _Å|�ŠuSŸ“ú[ú�yHqÛµT9°ctdU›‘—´õO«zusD¾àaäKþS€~£±_tŠM·ô'AɸÒ=vTР²@K»¿ìýÜæä°[ã´Fl-UaD6!ŒŠÖù KùvMå)¢iÑË‹’Xvèõ†És€¼­RE„­*‚Ýf QÅgà}÷V9„?òÄÚ@D¸HE` ¬Œ³·¼u´„‘DÍÿø‡Üžh 0àÛT}–ÉU¹†02“&í²J P}®÷wó@×ø6ùþÂó/$y€œ&ËôÁ1F„…3«‰ŠC¾|]$Œê/g8/‰¯­"x¶ÅëóAl <¤_ˆ�¶UT†› m»úž £å{%·5M!\ØäYAœ{Éÿ‰°·ÎzkÐ9:f-v“0’,àCÄÞ¤ämlìÿâílðƒ—}Xªó$šlÔ%—ü%ýÕ¡K¶=Á“Æ¡õE±{Î4T=¤’!ù£Ø _Ù“v£¯Ä[LÙUì½+yÛµKìrý�p[·µNà vÖWoÜYé_ïïkG*#n¹å_aOÕ;üˆøØGqÆÌ IúžðAf*;×a$qÔ ®'w˜³÷–4rìÄŽþ;aôjž –„Ѹ••4äÐ î"£þZ_„ÙÉsÙŸN£WÂN{ ±Ä…]Ž(i|ëb•`çÇ’ÎÏ"ÙlËnN5—ïš&ŒøÑNôáW£þ4xýú[!Œˆ®MÂH©û±Çÿx}õä]cëGd�MgÏ8àS`óçȈ/ £4ÚY‚@Ö¡Ó2ª:ToLŸîµá=ȇf@€üÉ×8^õ÷,£0ÊȽUø°%’yÆûYS:io;ÀÁ)Ž;®vòOḬ̂­3gd‘Ï+?v=gøÊ+‹² ZÖÊÙ-Êë¿÷½Ä›Æf¶u„‘³–ôðqíĉ»¬ ôåG„™Œ¶ Ç[ßTÚ4#Œdcm÷qHœCp‘__>ù”¬Hh$0�]€ €�°ITœ¨ Ì�ó�x‘‘gelÍÓêHλ?GÔ)adk‰·.˜/U*";ì°|³2äÍØ"hë RÅÏFqc7 #k’G.³ìLŽêœ ZÆK©ÿÞ{OK«L«3›�F€Šħ ½Œ¿Ãb‘‘æN{'*4ª*�„ÛlÛf¢bÁßû"ŒT¨cÏ~(õYFѺj‡ «¯ºâ×€tˆàAæÉÂ!Œœõ‚Z²dqêy´‘“>kJÕ‘ìÐïÎ?/ƒ—/WÁá`ìŠPî-¿�›0ʽÎU•^êÃò­)õ·n—oÙq†ÂÙºAø®UäŒïÈfvÇÛ‚è­J„³ƒÞÉÊuäD®Þ’6Ð #ë_…2Ðßr«-³"©¨Ê@CžxúƒpFN°5ÖúêÖ{Þ É?î%õI`Ë‹õÒL>•lȧZ/2 ²·È¢[o»%ûã% ûÅöŸL4Ÿ÷%pÿuÈGåÁf›oVÓ36HǺïpý`ÏbHa»Gdf±„`j‡0BªÑM÷µeG•†þ“¥ó!ÈZ�¿²¶Éôì³Ï‰Š»ýÒ‡èS³V¯(½'‚�YµÇ#á°ÝöÛçdÄ�q’é’%Kr>�Õâ�nx`’|Ý Œœ·äP`g9'È6ƒéœ~–�¨ä$;üÁSóóÚ8��@³±ùŸfêâ þUÙeýðÝä8wî“é»üL¾ÖÁ—¿rJú¦N#:ÓŽ>Ò[•ü0Û'ñâ°vöUu—u{A$²ÌwO¬]vÆ‘3rLÕ–3A;üÍØ"¶g`kj^¬{~ÝÙì1ýpH·l½õBÎú ³T•›}µåQå”$‰JB8&!¯Þòi¥ÂhêÔ=³?9iË¥ÃøU�îz*tçÌAoÉUMÖ� #v ^�Uß²·|ñ 'geîÆñÖ;òhª2RµPFá¶òL=ó"˜„UDÁyl�$�òá82Té›gÎT…‰0ºá†òL±o|ý›IR©®�™Ø8‘…xé¯ÂÈòSýFôQ>»¤ŠÐ�äæ´�uÂï¶s�äR+-í[àc˜qCÒyzh ˜Çf‡ ÷EÑÛNp=|׌0rfÿÑ®­#ñÈÿÆÎ†—cGrQe¯j6gÕÐÏîwU˜ /Ù÷E‰Ù:yn§„ÑÛo½�xï‘Gg§�Úfä6µC?ûÙÀ}cÓ7³]¶{³]ˆDÇÐm„z£ŸX�|éW³ùíV…‘ªËNôÏŽBõ¥½ëßï a@emFOEæH‰=ë” æ8A+ ë&p‘©àŒG JF(ÀVë-)Týl>‡Å1ýóºkWÄ[TŽ>6Kc�5ÄŽ½×ˆ'ç[(€ðÊ1ªÿ¸æy@%’DCÏÖ'Z½éQù4¦gLÚÀ”Ã6� `ƒÃ<÷œoçù ­lI³µI°øffs#£¦Uç]}uý-,ÎŽœ¼µfq Í#ç>ŒÜ÷¢?_X{%¶L0Ò‚‰)Sê�{ËPè³²]Ûº¼U ¥T›±GÌ e€ž�ãž2õ@L_�Ž{jkš0¢«: �‹À—Ð#@Û«•ÍÃ=3ïη•ÙãÞMÂÈ+œÉDÅ ‡-àä<É a…ø;ùKì”@E+­SÂH`¡¤^B—ð}ôÑGç–NÛsÈF„s°¼þsp€ëÏzX>«t¸Y…‘ ÑVH„ƒÊ®cìˆMëWVRfè³ òÚØ‚ñhÈ)HßF!:fë }ºÑÐ|®ó“6ßlóÔ}kÈV™žAýk_O²‹ @`6k7aôvE¸FÐkýªðBdÚ®ÊFLŠ`ëàƒ©�;> W¤+P­YŸYÝ×zØí·ßžDRXU…ÈAødo[Óf!'Á`;„‘×Ñ#ã|HÔ £BÅ!Î)™{ò&•{‚¤1‚}û *ZÕÝfóƒ@œ§ªRäI3ùL7!åB>æº"‚TžËHX•l�Æùd2�R—Ñð°;OFÆóâ´ÿ*UŒí°ÃŽÈxÛ‘l¹›¿`AÌÕû¹Í Y$ÁF·C °��Ú;ï¼3mÂ~±-LÀ&ãªü¢�-F~zÛâþûyÛâðìw3¹ñO>ÿý÷†ýº7HŠ­‚0:#m8Ûƒ\e{î™93‰FA±ÊÔý"Ó Âè½Ð2ÃO©á-qÇÆaà»í¶{ôæÂÏÚz*Ó¬ZcÚ´i«ÍÆæwõ--÷å›ÌT‘±ÞNÈoÑE›CÕ ÝaO¿~æ7R{"çœÕ°å*>Ûß–4·£�ì¡¢"Ó'–;¡ ˜AB\ñ÷¿åÛ9½ú¡é;9!Dl9“rÖW‚ø"GA"}ý{ø1úƒà磽�pbØK¾D‚Ê\óÓì9ÜcKÕ°Ð�“N<1ˆ«=s«™-Ž#GÆ[âô–ÏÙ�ò ›ÓlKÚ´iû¦>ªð;Á]}á›Jv}F|O'Ïu^‰ÝêùìÎ/ø÷-ûC#IÿTØ.vAÂËK�èpƒÄ4±vaCÛ¹c1¤��; £ÕÉ÷õ×_o:¿Ý"Œê šöãJ˜©F•¶¬ÿß aeíFOEp?> ÛZT1>2¥@Àìí#@c˜4>zË-·X7³qœ+Ð)(a ¼YhTœpüç²4V%Šì½ŸƒÀÔYᨶTäŒ`×ßT®8ƒŒ¨\»I€‡p‚oPó{%Í%ýØp¢À‚þö·%Íßfˆ ι%PvÖÌK‘ÕX¤ÍÃñlFØ[|öŒŒ+g&ÈkF©PàDÉ’CîÉoÛbë¯Yß –÷6&r�z;’Àƒ£Ð’5°+(“YA�`7aˆßzë-9d¾éf›&˜Ì³Ÿb`²kª]l™àŒŽÝ&Œ˜E î®ÈVÞY,dÊ{ñö"$ˆÌïQD9Ï�´N £%K'ÁgÌ·Ývk³S ÷„> `=¤«-�Àø¡OÇÇÙ^ÎÜè�0B˜rÚôÔá×/é$  çÈE>™$ë‹>V>o;ËJÂha^Cþì´Ø>£OeÝG¡ç¯¾úZ'‚€-~¬Àº"zËòã&ŒE ŒlÓIë¹a]n²%›ÉA*X7‚E[ ê$LÍ2Ÿ;ÇÖYg²pÈnçÆ°[4=+“Ø54yÏ�uÜa´mT‘Éæv|A(RCÝù<‚W[¨Ttª8òû½÷ž–}í-ó�ü¿m†TòY²diaÍä##9zô±N·K[\‘j‚q¶K0á,•qS£œ�_˜H°‰äe[*�óšy�‰µÏÆïA¯lDè‘ UK&¶½§§'Ljèë„0ò¬k"ѰdÉ’¬qÞ�ì3=è >ï£CN;õ´¨˜Ù»ß³¹øþä�î‹ö_IÐN?è ·ùqÞýAÝsê%^jàpênFˆþsV$An½5ìHTÑð9äµ2x>ôvAÊ©ã­}½3Ç}é R”½Ì!aÌÇ�ÔÇÇ·¾ëÇß}Ž_ÜuÒäÚ—¾ø¥ô§ì–€_BˆÏa„kGùQ�.â�/´®÷ Ò‘&©‚LG*©R92*‹l TUHFHZ:2bÄðL�ñïˆ/Ï@âÒ¤Âí� ˜ò ƒ° H%dÍ ;÷�9RÖ�óžWæ�¬z˧ÂHªµDGm1q $¤7ßàÌ,/ ©Û�ûâeÃóíŸ0� $s;Íó®¿ñúÄVl›çHˆ�е¬úY‚qi]³›£ WIÒ ŒGªf÷ òl‡�ƒ3s$EØ ~ Í–!ŒTT ^Uûº@IDATù˜Kƒ0zö¹…a7vÈùt>˜*Y÷Uù%Á�ðï”0"v} v n`ƒa°vÖÉæ[lÞÖuær �ݼ8*ŒGKÃöÁ¤8=í@âÌÀ¿�­/ÂÈšâÛÅõìO3ÂÈÖÆNìhE±*P$Ô> %^�¤»À@Ö2]nwµKÙæÜÉs;%Œ`J˜SŒÃÿIưåÆ3bÓ8+°¸jE¤™x û4(¢÷F«“¯·T7›ßnFìK'ú'~*„QãJ_¿.„ÑĵK9Ü 1!XTÎþZdÅÞy ™Õ‚­) ¥Ÿ²øœ(ÎS¶ŽЂá°J è€ZA‚à�Qñ³ SP$À›‡jÛ¯P ?L šì¦ïá'EO=À”ç9<`Âaˆ2p†¯«v_FpÙ²Ðrº®¬.‰¿´BF C«D_&œ|/Êï·™x³‘@!¤dÛ[„šF'&ð˜;ïÉs'ì�Æ66²òÅQÛʇøÚ/‚ ã%+ò@TÍ puT” ‰.¥òÆëïý5ƽ¿ÌE§[Ò8% ݘn âH†À!°*];ȶžndøo¾ù¦$KÖaTvwÝug–È«pS±s@�Œ,�þ@Z§„âÅú˜d™L´C½¾™AT™w��ê ú$ð�)#Ó¾¶¤‘§l"HFë± CæK"¨±f6Œ5¤òAð"ˆr ¼*'eõÕ–4ú,À½)æCF�š‚÷Põaëƒ`iÒ.»æ�]£§ÍÚÇM©€�É�â«��/æPqç+XÛª dìe³ÃÄ$8–¹4mÈ[rd Édd€mÛ0)Hg°!`Ú!ŒØ dòⶨ,c“èšm‚æN_ÙÁíãy²ì.;ÆætÒª-'Æi»‡·›É§§gLnétæEãsɹ5ëÁ²Ò©fëì¡Ö;²‹“­Š(Uˆvš˜?^n·¥gÎ1c»l'%•_*ßè¶ùk‡0²%Íö $"Nÿl·¶V<‹í̪žE 2‹­>ˆÒþôÚzU ƒ|½6¶,ÙÞé^|“yBF"Á=ÇœZ»ì ‚µ„Q=X’ëUÅ…@‰þ Ž6´AúzM–쉭Ñd§WÝ{¿ WD€óT”šÎ çŒòsvˆszú t²Sñ�윬*ÉÛö1uê™�òsÅÈ \oŽ€„cùÒONðYÝÃ÷yá„‚,Z‚=²æxÌ£XPåÅy žÌ9g"�‘Á>mY�s"Ð7Nc’ñ@ ¥Ùp"6g!¬?x6’MÓdÂÈÛe\gݯéE–X_iUEç;/æL¥�×e·¦Odg�þýÊ¿§¾x�qw<¡‚1¥ìdhï}žS‘�ù¥‚Wk×½e—µJ¢‰¡gô”N µz&fA�³g?ó¼0 NAÞæ±nGEfXÐh€+÷Õ?÷BX!,ÿ@RËx‘­ô> ‹˜¤ =$Â1þþÚêäáyýéauo´­ªÆÇf¨¾AbTo«>×û;yYÎÌ¡�f�}DÆÒä†A›×ÉhËÞ7k8Äžù�>}zÚÈ+cÞ­/öwbÚ©ýs}¹¾êÏ3 Ÿ®m:|Óœ?³l5ù§ÝŒg"�Ù™ø÷#`2dp® ıЂñã'ä=­K@JMåûÙ¬™C,;Ñho,(ŒsÑ¢—“ov=âÙaœ²¶l¾f=Ñ%„:âd HuÏT‘ä|\GoÈ™ÍcC¾‚Q?ë?2Õx¶ »L¯�#ÔÓÓ“ë™ùëe—$i§¢”Þy_a�óSªg<÷ºÐ©Ó£Žœý�œŸµ^œ“Áž¹—±¾ýF(ð 1ýtö\£¿4Æf­· UEVV±=÷\Ú+k‘g�ð ú‰œ2~“î –»¡÷Ö�­ÖÖ+â%ÖÜðá󢋼‘t&ƒž°¾� í¯±§æ©" Í“Ê`ÛŒ}hŒvàO+ûLG�Êt�ýS]Â5ÚåwÞQAö\Úm[n‡l8$+=é[äm>Ü�ê#¿_mICænz„Ô@PÈž>"‰ sl«ŠõÆÏ ‡0òò‰'ç>‘d瘱c2�FäÓºÆÿLŸ~p¼ñu\ʉÓð?ôž/nÖÒn†¬$ÕTÞгfò1~sæÅ‚:ãW¹Ãg=ãèÔcÉ;ö 9öØœG³êÇÛ_ýN?­kaîÜ's�Áu#XÉ}à>ë,1‡Íš·—ò‰*ÃøazðSwÜq[Ê‹în°Áàø\¼ 0|U<:åŒØ?nBªK×Ùób}<ëz70dEpm²ITB‡l4>®ñ0^Á+ÿD�æÌy,ñ—ƒ›Í£3ýØJØ…7â`öÏïÉÁ¥s‡E‚ˆ|Ù"2nÖ*}oÕ.�3&m)ŸØÎ:1Wí\gÍ ¤-ZôrÚ<>Œ?³Æœm¨ZÎ:ÑÿƆ¨s–ž„R£Ÿ©ðyú§6p=½ãá@äŠ-”Ç^cçSOÚ´£.rëÆý½y.ty+œôù“Ò¦g»¸«QFÍ~^.k÷¹«ÃéU_úÂGô…}�è‚¥á'I­7ß\œd¸õ[7â$þa¤ô"ëÅ`!œêÀfX^g+‡ë9OÏ×*Ç͸ TÕI~üy–Ïs82xÆWá>cü'Ïö3°¨jѼ ðU¿�ßfòöwM?Y/à7$�„ðío®w_s`7YûN͘ÉÕkœ�Ÿe¬ŒA«÷CqÔz1OÊHÎRÕx�8çÜ<ôðƒ™m¹õÈ‹TªYúrßçˆøy» 36�ë^I ÒNж=g-Xß8óµ}ã,‘\Ëç©qLýýÌ™ê[õe«‰ �1kÆGvž«ÿ–å¨Qõu*x¨Öi}}¼‘k|Iܱ‰02ç�&$�>º7½×*}¤ù·!ïÈ0Wë'íGÜ˺s°ø’¥KRŸ<×ç†Ç}Ý[ˆ ÚëÛõϽÈ�>Èøé¿g©"0·®w.…mCô¤êWEÌeçšü³:yx^zXÝriŒ#×aŒ[ÿ�wC.Õ¸«Ïõþ^É YD6ÞØÓ¬Ñ ëW T‘ˆt‹|™¯fM�$8¥·²yPón} ¾œìTµÞ«þ°MtÙX�/ÖµVé…uÇþ³›uùo÷¨ë…ÀÑuîIé#@ôª¤iÚbþTžLž<¥vòÉ'gÀàs®Â*2M0Ù¬± ôÑ8Í}¥�Õ:Ìû,BàÔ3”úLß�ËøÝäJÎt‚||–lÍ­… �Á!o_Ú4žÃN›c¶‡ÜR„;hÝ‘•ç ~l—FZ{ôÄBâ7ëödhÎ=½¶-“\ò9§!có¶Cõ„ñUþ²™,ü®·yTañFqçÕå\Å¸Í y!D<‡ì‡w>V]oõ³z_÷/Öë+Ö«m‹t‹ UN¥Í ;ôAÈÉN}ëUYÐ{œÆgžÒŸòKqÿ ,û ^¢Ú�¬ØgzNŽU¥yU¥Ìï6Úåjîý]õ @Õƒy2‡ÆÓŽ>ΞýpFsæÔ½;v\ž#ˆÄ2nÄ„õ�4—(¢—lš@a4ó¾ú¡ÎŸ ’÷Ä Ð]Ï_ñ÷©1—È·aoù㨯Õ7³¿0D³æÆh|ü'Y+½åãï*oé…µáï|¼5´R�7\.Ÿ—ÒvÛ¾ ç¥Í=tºmuˆ¶þäHø!Œ�̪mÙ™ýÈ#ék\Ó¬!¹wÛm÷´ªhÌ­qZ3æ ‰¦éObͨ†<ý?lÈ.Wx•åúˆqH„ª R¥fmY¿Ö5ÙhüR£•ü㟼`ŵúàì½µågºB+\âwäWŸ—7r^0¥‚RòõÜ ?äCþ©ô} vI_<³�ubìí\×Wÿ†²Ê�õ¹«û0¶ÏÛ~Ôö‰ŸõAÿ;[Ç]^ég*?[—íÀq=}#[÷g‡‡ Ù0€ÖÖ =iÃŽV~hÕûÓÑú™…üdãÛñ*Ý ÏÁ]�2jö³qñ;úÁ&ÚÚˆËÚ}.™uâ'àUI'öÄz1�ü$ «°9láüùó2A‹0eç&ÅÚ?4Þz)©­N¾Öd³ù%ÿÆVé\£oÖ$ÜTáŸÆÏ6û¹º~ q媸}IÚ­F{ÓìYåwŸ\ |j£�kŠ“F¨J}+'ÅhhŒ4g3�Æ‘W×3Z­^Ï©ºÎw×PÍ]ï¾pBžé:ß]ç¹¾w£¹'#¤Uãéí|ÛyŽþ"I|×ô—ü{÷[fYFàñ'OÂDæ²ÙkÔÛéÚ¸¦.¯w¬*¯nȬwͽ¹Y¤É‹‘^™@zÖ¬<ž¥ïS§î±BŸz_ÿqü¿9ç 5N´o¥Ÿ•Ü}‰ÙêºóyrÔ/²4OU¿ü­´5/ògØ?òof¿�.ª$Çu^øì3M;&ðЩò9=^R`[Ûšhô�û^Ù®fý®ž]�Ñ8}g3{W}¾Óïžç«¾.êö›?óÌNlQ5Oîí>Æ^ù«NûÜÊõ�ã2¶¾ô¥•{5ûL%3÷þ #÷¨=ivßnýîþûë‡õª0P‰j‹Ó1ñ2 [¿+½j¦‡a¤ÚzAT ©þ:÷[çæõ¶[iëÒ8óì¿ðgžZ96Ç©*m—]v©~øµ1=cVȶÏíôúÍùiÒº¢§�€¹�uß©\>í×W릯5Ãn#�l�Q’OÏ›5fÏ=ôÜ;löùvWõ×w­Ò™þôÙg«Ï»¦«Ÿ×D«ž×h¿õ³“VÝÓ÷j¬kz½ûÛ»Ý~þÊûÃuR¬kᆲíÿïMí¹ç^yV‘ÃÍ«9i&�¦„ѹßγxõc]ç[Ho¾1·«ªjP‘*‹Ï¨¤UåF—m­ýR¼ÍÌ.ˆÕ:Ȥ—^V-•–Ë}MïyRA%Hd'r WT*5¶ÊøÝ@üT¥;®k6~߬5^çï¹¶Ùýò»vŸ]]§Ún ë¤Ýë2¦nVŸ»¹NVÊ s;ê^Zk×gªµ0}îTŽkë¹ð€XÁöÎÅQ%v0 Å­qÕ]È>Ø¡ä8[©mEÛk�úXUKõÕZ‘o_×vë÷úÐMýëV¿Ê}>^ Âh Ë¿*õ»?ÞúrÉ%g ·×f;g¦•ÌÊî^¹}/ ïºëÎ(»~)·Œ½Ã {=~�ý_Äðì•ÖÎö�yš�èêœe·¥ |Ò%ìª0ÚþQe{ÿm\£ø¥-1¶ø^Z‘Àú"[2/¾øâ¬òÆÁÉaë½´ÃKý5g4ÝvÛ­ù2oDs–Æ©§žZÛmÊš©Àë¯/­üÍ™@^"ak™£ `;;à0w~ΜwÈÁ‡æ–s…ïØ Vìõ~¦-”lC~Å‘°_iEEŸL T[ÎÙGDó‹±3ÁQˆ k\¥“£?=Œ3&ª'î’„’-Œ¥ |Ò$P£5Ö_Ö+ÂÞÎÌ¡9Ú0JÉßö±vîc~8]æ �joUB¢)¿õ&Õ¥    ¬?૬¹`‡�góW·¥ªÊÀÃ=óæC%^øÔuµño•ÿ×oo­‹”^¾‘O•‘q?·®Î^éW‘ÀÚ—€ ôuQ�è­ÓyŽY¼%Ml·a¼±n£¨2òbvOUQ‰ùÖþ•'vO…0êž,Ë�ŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠÖ Âh½˜Æ2ˆ"�"�"�"�"�"�"�"�"�"�"�"�"�"�"�îI FÝ“e¹S‘@‘@‘@‘@‘@‘@‘@‘@‘@‘@‘@‘@‘@‘@‘Àz!�B­ÓXQ$P$P$P$P$P$P$P$P$P$P$P$P$P$P$Ð= ¨{²,w*((((((((((((((X/$P£õbË ŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠº'�BuO–åNEEEEEEEEEEEEEEEë… a´^LcD‘@‘@‘@‘@‘@‘@‘@‘@‘@‘@‘@‘@‘@‘@‘@÷$P£îɲܩH H H H H H H H H H H H H H H`½�@!ŒÖ‹i,ƒ(((((((((((((((èž aÔ=Y–;               ¬(„Ñz1�eEEEEEEEEEEEEEEEÝ“@!Œº'Ër§"�"�"�"�"�"�"�"�"�"�"�"�"�"�"�õB…0Z/¦± ¢H H H H H H H H H H H H H H H {(„Q÷dYîT$P$P$P$P$P$P$P$P$P$P$P$P$P$P$°^H FëÅ4–A               tO…0êž,Ë�ŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠÖ Âh½˜Æ2ˆ"�"�"�"�"�"�"�"�"�"�"�"�"�"�"�îIàSI}ôÑGµeË–ÕÞ~ûíÚ»ï¾[ûàƒjC† ©mºé¦µ¡C‡Ö Ô= —;­ ¼ÿþû1ŸoÕ>øðÃÚÐ ‡Ö6ÜpÃœÓ 6Ø`­<ÿãzÝ¥ÃôYüèÃÑÛn³m�»Sùt‘Àú#�OŠ=�´xíµW3’€£Ï|f»Úˆ#ú� Ÿ]¼xqíõ×_Ëõ/Ñ1f̘°}[ö{]ùc‘À'UpÛk¯½V›;÷É O>¬í¸ã޵­¶Ú*I Dëúܪ€äõ×_¯½øâ ŒôôXï[teØd+ØyõÕWkóçÏKŒÜÓÓSÛrË­>‰·®±Ü¤HàS*�nÙ'dõË/¿\{åÕWI€í0z‡Œåا¥K—tïtËîU|²kÓMGÔ6Ýl³ŒA%ï×§ö©#ŒôW ?÷ÜsµysçæÏ}øQmûí·¯í³Ï¾µÑ£GÂ(4¼ZH¤M{]­À2Ÿ3ï½'¯wÜ©6jûQx}fµ�׺º˜[•?€÷ä“OÔ½²(A4½Ë.»Ô¶¹õº:´Ò¯"�¶%PeÙß_ö~mÙû˲"§Ê@5Þô“b€ ̯½ôòKµ·–¾•à”)SjÛéÛ_Señ /Ô.\˜×#˜8à€Ú;ìØßeküoªÞxã�Ú[Qíi~6Þx£HÂl�D¶‡·:k¼£å-I`]š/>qÁ‚µ›ÿuSVÚì»Ï~5¤F½²®{•6- f-ȺB–=óÌÓµG}$«§4=H³�Zê‰Ì½{˜OXN\0Sm‚1Ÿ!ßÛn»µ&ùtà¦|ëŸÒÒsÖõÑ!_U€gÜpâf੨䱮�£ô¯H€V·®×–”:µOuÂé­Ä4�?þxí¥—^Šäÿ»µ-#¶Ë.“j›o¾yîB&ÁKÝÂ;ݲ{/¼ð|íþûïÏ$Þ¶ŸÙ¶¶ÝvÛ×F��D×ÚšƒµñœOaôüóÏ×î»ïÞÚ£�=Z{ꩵeá@·ßn»Ú¤]v­í¿ÿ™µâP}}š`¡ôïÕWë eƒ ׯŽ›½uQ>�Íy¬vùå—%¸Û”Ýc>'ÕÆ�—ýý$Îc«ò0Þu×�µ§Hr;ì°Cmúôƒk;µ$?‰²)}þôJ NH¼^{#*DUØl¼ÑÆi³þÆöI±üÑý÷ßW› è�7^_´}íðÃ�ˆ@mLãpþíg•±O<ñDú±Ù?TÛ**c¿ø…/Ö&MÚõcõ]/¾øbí¡‡ {ôLÌÏ›Œ5¶­Îß¿ ¸üâc‘Àº2_U ÿÀ÷×~wþyA~¼[û¾PÛsϽ2¨°�s}nl[ñP¬õ›nº1‘ÓO?£¶ûn»·4lóóÔ¼ýÖÛIŒ¸TÓÛÖ§Á²ãä{Á…DµÑµS¾rjÈwÏõj««ÑXyä‘Ú_/»¤öÞ»ïÕŽ:jFmÊä)IÖ¯ïzÔ’²”}b$°ºu½¶Ò©}ª*ÂgÏž]»ýŽÛkoD"mûQ£jãÇ�¯í¾ûîiƒ^zéåÄIÝÄ;ݲ{°ØUW_™ÕO*½'ŒŸPÛu×]k[o½ÍÚš‚µòœOaôÄ�×®¼êÊÚï…ƒÜ'ǃ¸þüçO¬í²|<­Îß¿ ¸üâc‘Àº2_atÇ�wÔþû¿ÿ¿ÚÛï¼];ókßÈ*˜FâãcÒZx¨ª=¶»òÊ+3ãþÝï~¯¶oTÅ·ÒdìgÏ~8j¯Õ6Þdãšmë™P‹-gZU©@¾?ÿùOó,ÈsÏùVT-˜äÔСµò˜uþ3atgŒóþïÿÔÞ‰_ûê™9NX±"ÐÖù�” „V·®×–�:µO¶ÙÂl<ð@Vê8CM2`ò®“ÓNm‰AÕEÏ,|º«x§[v�m½è/Lú|bUâ{î±WTm·¶¦`­<çSGÉ~þñ‚?ä–4¥nÎ-B 86‹so”ß~ÚÉ"šW?[ãµÚ³ˆÊ�Ks+ÚWñî¹Çžëdéî'%@luU·*ÿBµ*Ñò¹õAáG}´6'* Ÿ|òÉÌàœˆ�ˆm˜�í“bÚ%Œ*BÙžþÅQ=04¶S´röQ£ŒÖÄÏÏ,|¦vÇw¨ ,¶~Û"wÂñ'Ô&N˜˜�kuþÖDßÊ=.�ue¾ aÔa„\¾áÆ÷>›Û9dÁ÷Ýw¿Ü6A+º8 \ÃÖî•!Œþëþ+·é}ýÌ:ñh;¿íÍ¥ |R$°ºu½¶ÆÑ)a¤0áæ›o®=¸AµÒvÛ}&vJ’Fª!(¨€ôb£nâ�nÙ½B \Ó…1þh —½»ô£Úâ—ë—�ØjPmè°în«2 J÷0”÷ÝoíŠ+þ[Þ¨íµ×ÞÉî´ÓÎé8ϼ¡œÊä–,YšJú^¼�½ÇÖ¬�â\†ÃGDuÒæµM6Þ$+n*’©*á~7J])9‘PJÛ»ÞŠl`/“±q\W•Ã9#(vVç¾ô£\VVÏõµf§ïžáþ¯ÅA§oÇ5®ß {Ü$ʱGÄÞ¶ŠlQõ¹jê�Å’<ÛÇB{·ÚÇ}³gÛþ÷¯Î0FÏX�Ù‚ª‹fÖ®þÇUAmXûòÉ_IÖwÓ›F†k³<`uu%¼ª”œÏa�ª…ov—ÄïdvÈtø°á+Î�²�Á˜8nŸmÜS¾ê<¾”²¨ÏצùóƒAöWaä¾ú@Öäë s2&wç2 ÛdXT¶iö§qo0ÈÄy#K–,}x'æôý˜ŸAÙÇa17#R&›çVºPÍÁ@¾W¬Uù+3o¬0rvÓþûrdõb®7"ÔÁîäZÍuc¿ê{ˆßΪ2kå�Èà¾z»AŒq#úEßc1ý²Ï]«0k˧ég뛃¥—‹qºì<¶\k1wmÿf¿b}X;J÷�KÃ>9ÿbxèÑÈX§Ö¨kèÚ›o.Î}çž¹QôÚÈóí“«f¨ªo>Ï?õÔSIbÛR^_­5¾Cè]ïÄ\Õ/6F?ªµâ,×òÏü�„ßOþ“ÔÅnV5>ÿõ×Bž±nT “�7õ�»Â¾lØÇVX­·¾ÈŒ§C¹ßŒ-™ì&<0t£¡¹ÖøÑfóYé3=ªãø¨~-ß­KÂÎÏ~dvíꫯÎíS­TÑa¤ß#qÝM7ÝT{6#vgç�vªíµçÞµ±±m›°ð¨>Üu÷]Ya䌸o~ã¬ÚÔݧæß�óÈØœKT�ˆƒ]áM2±ö+̳ª^ÂϰDèelqc[�…^냯J¯+ùWë«/½$?vŽŒ]S×ÿÖŸcÎôÑ6þÿ^N}#Æy@Gáñj�¬ô«��tÁÚcÐ�-·Ü2Æ_áÿÖÞÆ»ÒÔ‰þÕáñÊ®vj—�»¿fž:Áßô Îo×oT}¨ý0ÿü #+6¯qÙl÷$?U¹„ÍÍJ²°'ô@Â¥{Þn¿«ëªï+Æýá«é‰5P÷�¿Ãnn¹eø“è·qw+ëš½b?�•­2O‰ªþ­)ûd^Èß*“½ˆjÃð¹;nP9® räHöiã´Oï†�k†wª~®�cès+þǸèN••dWùm14ÙÓsØH¿¼`é©ÀoWüýŠx‰Ö¢RaTMÆj¾¯“„QåÐe£oºùÆ ŒîË·lX�¶ŸQF@Äv´c”ô‡‚RJÌÉÎ�­>Ήñ6š÷Þ{?dÛm?Ÿ[›ÛžlüX”Z–ÖÍš‹yQü~h‚Ì¥æJ¼pá3ùÖ‰C=4e�FlQ8sç=Ø3î ,�ºýÕ>¨¨|Ú{sTÙ È*FÝLÞFq)¬qâÄ]âÐî}r¡1(•÷ž¹q¸÷“së[^ŒÒddÍà!ƒÓ°Žé÷ŸVëééIÅ'/{å›óhíÎ;ïª=<û¡Üú08 í„Èû¼>Éïµ—’»íûU‹zÌ ´Œ?ÁË@ï¹x™öÄ·/œôÅ :®½öš¿Ì׸ػÊ!W¼šG�ÈÍ1�d1#öž»'°jo„‘ßxh¤ÀÓÛÅRo±d×I»Æ–»�@­,M®€ ™<0ëþ,‡´x#cº#‹®À•ÄFù÷+œ&ä¸"ÿ·c\�„F'—}°,ßv⬗ C7é¬m—ö÷Äö~» 'B§Ì]y!Æ»8‚#�ƒu2vì¸ÜæçPx`�ÌKûø%P?ËæñÌÌÈÎñ*:¬UúYÙ�V{ÚÛ~}/àx=‡~°Oˆç™í¿ß©ÿ_–éTZS‚OÁô„ ÒN¨þagÛ@õ�­°¿Ý:Ÿì‚X¿e±'l—ñ*¶wŽÀ‚ÈX±ìÝ^QŒ„¦Ïl€2î÷#¦¬÷½#q0&ÆÃÞ¸_Õ:ñÕ=*ûË�°Ã@5» Ží›—ÀÒXô­Õ-iÎü=ýôÓiO½•ã�é‡ÔvŠ@PÄøŠyóçe�mî‹Á¸÷ˆjѱcÆ&éVmŨìõâ°| bÅïž›gËÜ�øÿ탔&sºY™D4¨©`¸çž{r¬€¼¿ó«ž9�ùcWûk›LÆpÀ�,ò+ÇslÚÃÆçÐË…Az=óô3©Cú=}úô<[Ê3½`àæÝœöõ€Ð~ÿþ8÷婘2v+{Éì~%ã #µj}ñïd¦_‚ëknØ]ÏGÐóAÖØ¸±ãsÑ߯–$n`òVMG·Ì·µÊ6³ï£Âð£»MY¹Õžm‡ƒEúñ`ÜÇÓã¶��­¬7ó•ë%ðÌ£�_ôGõByBßùŽÊOJö4Ú'ý̨PÓ�¹A¿ôÒ‹µ÷cŒÖ©¤¼A~çŸÿ»Lôt“0ªã‹·‹9SÌz]ôò¢$áÉ[†üwйdÓ¦�gléÒÿÊŽ+÷Qà þ÷�R}ô‘|Û¢ÄüYkðåøqþílEsÂ6<v‹üÜ‹=€»¶ YñßÛF¢ñ…^¬ýóº&Yß a$�¹å–f¼/¶‰>–÷äÓÙ‹Ï„_ß5¶|rÈ!µ1=cB—7¬ÝØÒ–46ê”SOKRuNsÏE g¬Æ‚°r€Ól9Eúø½¶R/Ÿ«ÏcèÁó/>Ÿ$=Üà0z=&dAtLkU/Éïà°st †÷rƒÔ—Ÿ“‹c?þñ'™€“d“P«ì˜õÈŸZï^Ž#8—`ô÷­·Ù:×å´Àåìµq‘]+­ò­âñª?�ÚåÕõÍzíÓ³£‚­]¿¡íØXœ¿�A�ºÖ¿VmbSÒ¶Æz¶ÄdŸýìa¹–‘ óÃ?vbÏÛíw#.[eÜËãMv9bþ­™ñãÇ'NqF©í¡|T+ëÚîöSÓNüSéÍš²O ¢(ᦛo *.Ÿ›Iy¶dÓð|„˜åÀJ;„(â$ {ã�vç�½ê�0ò–6óc«?ë¬"²‡¥øLI§ÝvÛ-m‘Êj ÛïË–´Jsúþ¾ÎFŒÆœ9sÂÑ^›„§ÌAYˆ–Èá�'œð¹Ì¼I”Ò~q �…vÈ¢ \…Áaí¾ûFXŒ@ݰߘ†á l²NKã 8@¢¶�<ò¨P´íÓ 9ñý¡‡ÊþŒ76I"A€ÀË>}Ù8‹F‰ž}œœ¶…eá—€ŽäÀ�8üÈ$=ôÅ¢“qDŒÜΑã[N!aì± ‚4’Ûv‹@ pØmÆ•ɺíöÛ3û½pá3±8'¨�0Z“&íšûçýµ‡²ð�Á/L°UíE2B½SO953‘¿ýíoRÖÇwBmχYA4¼þziàÀ"½÷Þ™µ?]taŽOfHõÀòð쇛FÀ £€|8ê§bN�³¥!?Æ@öräÈ‘9.†yHÞƒ#3Œ±æpUäHž Œ  p><6$KÏÑÕŸlšýÍ"€a ºV6Û˜9FŽ.›o£Gï�{‚õìøœ1š� N÷T'�VA%ø`9 × H�^ï±�«/rR�`-Þ*ºd]͉ë7då»ÿï}Ï Ü è€þ "Õç­Ãê:ÏòYcõ9�³ÀY ®Ñ\ÿA¬ã•Ÿ«gýM¿ÜÇ=«~ú}ÚÜW@úŒß»wc«21 €y ÓÑÆÏ¯�Oô—œý¿¿¿ç¸�~ZwäS�rNJÓ ^€5+êY>�ß­g2ì±ÇiK† œ×ÒÓÆJ‡Æ>7þÜh¿ôÉóè‰g½6G˜œμOd€TçX‚UŽTõ£¹ª‚^ÿzèg38 ³võ�޲%>ûÜc¼*rè;{ÂÑË©S§¦ Ó3&x„‘3u&@9»F…IÚΟàží:ø´:ó XëĘ?2ãkî¾çî´¿äÄæyÑ›ãÙæV¿¬c ¢VÎ0òÚÙ<ôúÑGÈ èN>ùËiÿÉÁsÿÄÙHsjÏFÂü¼KÃ_˜Oöγ¼€�Ò½‡ƒ�c¯]ø¨$^]¯’ƽGÄïØ}> “cÆÔ«TB‘è�nAØI6ž>~6æ_ƒ¹ó·Væ�^5kt²�ñ™É £¿E…±ÊÖsâŒdac3GÎ_²íqvørúÒOÎ —>HÖ\ôç?¥9ÓOe/rá¥ã-wQ¢ÆJ>SHî2Q’¥“oµ¾ø}Íú².è#2„Oò;>ù;>ôz¿ýö¯õôô¬°wžA�ecùur•ÔRÁlm²Il ¢JBÆ97cÇŽ[a³Ç�Ð9`ÿó³ÎÁ{+Eæ¿à"cçZ™/™oØdþü•¸I­#óÅffbõ„и|‚ÖxèÖ‚X+ô)llÖOˆ,Æ=,õH²ƒ.^ý�«ã^úz†‘ç[«æþÁÌçë;yÖ+t7NœLŸ~pãr<Æ,;.¹Xá¸ñãÇ%v`{Ü÷ƒ°ªÒ­Ñ‰±¦:pzΧy§ž!à5nã‡1dªÙ¾ÃZào}9ƒèÞ{ï�ÄàèZ+„Q}ËÊõIÑý±þxHü)“'ç!ûd«?÷FP�0z%ä|ÔQGEuÝ6™è|9ð½Q1æsôŠœ1"8w?�<�8p9.|ö™´y¢ü? [ôQ�J'~©ØŠ^‡vxʲ�çTÄŽ7ýæ·¿?ú^àÏÓ’ŒÔ78�Þ-Œx×ÝwÖ~2dšÂ2�P²zOÄ^q øÄ°ŸH#Uý5þ <¾uÌ‘Æ÷ub—û뛿Á~�àoúßIÿªÊ��Ú¤îqH2r!ÂîJ$óK0?)/™5'Ö)âösÇ.í¹�³f=Б=o·ßUbÊõô^bgæòxÆ¢ƒÖûà³0Nê[Øñ&?uÃ�«_×'ì’¶ò�7Þl+þ¡kÒ>ñ9pdßøfÈ‚}ª*ØaŒC94qÒ–=CÜTx‡ýÑÚ�öþê«Âˆ]¢Wl§DýC[Ïâg¶L‚,tŒý˜2er`ª©å £œ™¾ÿY' #Ên2ÁŒ¿ Ê�7ÝNì­vË@¨5é 2{öCá¼Nîz ¹¤RCÅ¥]àPY*pÄáG¤²¸M×þóšt–H•<;ÆÈ· &ðž0aBfn9¥‡ã9wÝuGˆ‰ñÆP4"Žiœ°fË…~0œ›Œr�cë­‚'%Ðx¿öŸ×æB”æÜ9hJ/+`1P~Ï>éÄ/¸“¥ÔÛc�=–oðQ*(àœ™b‘Ò 9Õ_«;¢_§ÑFÌ95^ÿ-x™ÌvÜ!+WdÀ@EÉßNúBTK훕S¶¿i ª”øw矗‹õ;ç~'Á´±÷Eé+GýXWÅÖº…ñÀ‹ãÈ,a€s ¡°Ëž«Ð@Ž�ñ+¯¼šo±Åe~Ì-9`”9r)èÙ ³±[Ÿ*•�6í´4|ªZ”?‡ˆ0âøÌ§ ä¡­iÆI�ÜKø|€Rºø¥/~)ûj>¬ cèákÿüç?S€bkBP+€yú™zp(Ò­£‚ð”¹ØÐùfM�`íØúéÙï¿¿,õÆï_‰µÈH+vn˜¾Ò#ŽÂ=Ò”Ž¾s¤b©£¶{¨¬ÜøÏtyÞ«áL£cYjï¾ô½Š¢ �“v?ýœ5 ýÃXÿî­„žÍ0¼m¶®g“¾H: Ä[§UeFÕg÷&O™DúêÖ­*6:Q}ž¬;k›|ü¿µmüÕµÆ#Ð@.Ócúh¬šë¬Áªà–³Š<ã¤X?tÐØ”Ì <7 9¹hï¯e¦1ì—àÇ8ÈŽm ›Äz}=æâÑX ædãø›í°¶gߨѣrH NÖ¹:_úÒÉ È�jcnGßÜÉ+Ûk‹ €è^Zà-\ÆkË™íd5çñÇ“@fdä¬õñÆçº¥g'A�q�bë‹_øRÞ‡|ê‡I¶ïØW "ïºDžg]±/t’œÞ˜ÓV#öÍØÁk�M·®ÙLþ\Åf�Û#: /Ò)˜�.�L‰TC<#œw’þÀ aºº^ÆY$Q�GŽ|½r¢·äúbôß#ZâÉÏ6Éä·¢—£FÕí�oç9ªˆ4c¸âŠ+R·futŒub&ŒÑ\±«v$ aÙdsam¾öQoNŒ‰o<쳇‡.ôä}ûúǶ¶vð8B_«pt»v¹¯~U¿GVt‚¿ щߨìî@íÇ&›lœ+ðú¯Ï­ðv,ì>‡’P»êª+3qÄF�}‡¬CUºô½{n]š“�ö»ª€BÄV•·â8¸€Ý´þU÷ZÖâ[¯ÚÞÏßuäŒÛ@Ö5_ÒNü#ã¹&í¼ÀöÃit&‘Dƒ÷ØŸúŽˆžTÓ§Âöø�xG²OkWø§þ#o ‡øks §‹ùÙvÛ¾ß Û-c©ø Âí *‡^çÔôùÏ:Iqb&™Rp`£‹¢BÅÏ2$‚ÿ:¡³mвäJ3}쑚­dcÿ¨È@( <^}­ÎXSreÃ2 2»œ EädÀ0 ´Y8•}÷Ý7ŒÀ¤ p)(çÌ�>úsk” ÂÞH¡?ªU…˜¡DQo¿ý¶‘œ’Lø~ûí—�ÇË>H ÷�k®Ãòf’¥ö<ÆÈAt¸ž öÝwÿ¸÷˜ÌfÆâïœ#§}Î9ç&áä³Î`lï ƒêuõØú¯~õkQѳO‚Ág=€í?5¾_ýê—IŒq°ž¿Ï4O e‹§dÐüø'?Îq `öÛoÿ$\£%‘}Æÿæ7¿JÂèßûAʬ?ÂH1ÓÇÔ¶UI1� Т ‘{ €U8íµ×^9_^åxÝõdãï@Âè˜o„‰XTépW1ó;dàä]WV*dçð=@âz­Èa*„‘³¹è$BBÆó>*=ú�$› þæ›oJ’ó”ȨíòÖ2£x÷Ýw癟=ä³ „ <àOÀ ØSYâ,«=ö˜º Ó{ˆÆaΆÑ�&’Nð`l€™¾y†í1æqd¾}Ƶ'¤« ÁY4Œ3Ùh>çóÆh zó ‚…á¦Kˆ²žå÷­ŸéS×#„’ Ù`}Ï‚)}zè2ÐðüÞöz‚`2®$: ï¾[} ¢þ²/œŸàÿéÈ#—ŒÑBF¼ %¬ôiaŒæX°á¹Æ“dFœ¡¡ŸÆ¯Ìa´c”þ«@D´ 2üäjîØ d¡Ì´€°þ6Ã�SŽÎ'!_¯(5®Š°ê=_Õÿ#yد¢:Å3¶ŠçrÈ!鼓ˆ; KF¡Í. &G¦šÎÉ ‘ð“gŸÈ>ùË_©í¶Ç<´«oîo.ôI+k¨êO@ÒçOL»hllp£=0§ª´Èàà°÷‚Õ%t�mE~ üý[ç|;«¦ÈWƯ?€|TùÅî˜'rRiÃî²ôe^/žoƒž°|}:餓²ÂÔ¸õ7íõ쇓|@&ì6¹z®Woós¯9"8þr̯Ö:°­•+¶/>"eKæ²ôÖ^+ó§/Í²Èºèø¬ŸEáèîE]”„À�~ôŸYÚøœ ÀÓ›‡o³í6µ¯žqfÚCS|Äyçý6m’±ÓKg!ښÖÐ+rÐkD_ùÊ)ù²*l™õô²Uª7§ù ºI‡ÉuNÕÿŠÀ›žø;ÒÍsØvƒî^rÉÅi_=ÃY4ì˜5ÊöY›wßsWÎ…scÜÿØcŽËÀ^R�Þ±n­ash ›¬¯Î[àW7_tÛóV>K’Ûÿý[±�¶ ß3óî Æa'D¦Ÿ^=þË_.ÊJ)s%éa<|rR™=Ä BQ×Í-iuÂèÚ´Ç�l±j²0±×_]ê·ù€³Ì=5pRnm ÿ´Ï>ûfÕžàžPÙ-ØP jùøãŽO „¬u=üÁF\ñ÷¿¥€�Ì ›D¶®§OÈJI+ú¯­FdkË+?a~Ìw� di#¿Ã·ZW#¶IU@¦’)úÁ²eégl½@ª PèÿI'ž”�¸g üþzé%©Ûª=êk¤þÊz¶áÉ [1|#² ñ&Ѧ’¾q}õ¥—ìÏö·óþWƒ�é“3ù©|“ñð]pñý1·Þvk®G‰T'û‡ü{8Èxúl�ÑÖ£°ïíàqXµv™mžï³�ø ¶²ûa�Xðë%¡w‹#F¯Y?°ºdÜåW\žGH¨l4׎Ó4êŒ9{®‚®ãÏÚé·8AC"KèÃo)ξq q!QëR°Vœq¾¥'~�¾f”Ôïo]ñ*ªûÚNüÀ®qûX×8n¼éư —c•±û$f†õͱD"¬ï°u9Îkk*ÿò{Î�ªÞ©*®F8Šÿøbv°Ú¡Á^H~³yð°1H¢[èÄà…0ʮ꣠@IDAT©éóŸu’0Ò[�†@oY8¼{ï�Yûíy¿IP¦2ˆÓG&œ&篂E&d�¨ÖZ꙲zÐHirF0ð÷pð„ÃW²>mÚ´ Ȱ�!ÖX9·@øØ8+ø�5Ýh£¡+ �ÏÌŒþ ŒìÉ<íÔÓØ,úl‘`]ÿpÁ’i>ôàCkÓbw‚XŸÄ_óÏkP9ˆZ_90ÎÚõ,�ï°R¬v‚ƒ-À¼ß{þ%½$â·‚0’qUÕàpVÀral±ýöòŠ[ üƒý5@ˆ#™A­lV�T­qÄæ¥‡eÑÚ‚‚š¶÷¾ DT Ø�%$§Âøwìñ ©¾ðs $\ƒx ¢lR\<ÛªA~—ÿíò,E´&ŒŸ˜[ltÆX çœ` 8T1ƒ[]`Þ—ÌÌiý¾õŒÔêäÏ !Œlõ@>>ÜnSvÏ9u?@Í<\páâç·S÷ÝÇ9Qã2°»þ†ë³rÃse ë%ó¶¬m˜ yAv—]vYʓòŸs®Y>m×]ü׋3+G&æZGHSóÄÉ4Êœ �›Üsb=v¯�Û|óÍs{rÎÖ0[àGÇ)ª ¬o[)/½ì¯qþÄ˹æ¦î¾G2þÖƒÆÁß~Çméxž �`M„*Š.Žlþüy+ˆ-¥èË–½}Œ3Ê¢ÏyÊžËÎ"Šé3=zM@#{%û¥Ljë± ³7>RðÕz£ZÇ8è$ ¯â‰€l™Ð}¡qå•WD07++£T±K½ñ±Î*rŽl9U™P�ö×*Â!c~5ÇE )Û£jÑ�°sb^¬×›‚€Tuôå�ƒ bäÈ­ó3€ô¬ œ.øÓAº/É-Óö®`ˆHhGßÌÆ$ØEfÑ $/äÔ¯œ–k•^ùb“üì�¹PÁ‘gu|H�!CÇü,É`›ýØöO�ËNÓ£Nü zM$6ÖBAeÂØ�Aþˆ|U˜ò#ôÒøÑN#9$«Àþ”Äú7¾þͰëû&«H`@w%(<›ì¬µº½žŸzD_pI�æî¼'So%"F†ÎžýÍsÒo¹ÞXÙBdº`LÙ¶ Ïߌ™\Z™¿¾6¥�ñ±3ü¥„ ï,çJâ|&2ÖÆˆÜtãß"P1Ž“Â^fкjü+Ù¨ö�¨ñ–?¾fDè m£l§†|‘{lÐØ±ã2‘Á>[ç¶%ýå’¿¤­ /Œ‘[�Ìõo^YT?ƒE¥”Ï:¯ÆY-ˆ#Õ•wÞU'¾ØÒã’ÀØ'·oaÊô�Å:R‘Òß|ùL®· ˆÏÿýïR§`*¶ !"ÈÊ A¡äÔíwÜžX鬳ÎN¼B–úx‰ñ„Ž|þs1žXïì¡í¶3I¨¶^o»£ú­›„Ñë¯×·ÄÙVˆä¬¿Ø£ª^]–8ëº Œ%½†³À|[„ˆÔ/goœiì�—h˜O[Ë]WºSV~€ì\_ߪù@â³Ï…�Ÿ2y· jýÝõ*Ón œèstáÖ aDè›}ÕÕWeà kÂb¦*Ù~ͺ­' �#?2·3²ýˆHŸ‘d�Ia*ýØyç�’P5×°œqÉ_/޵¾,æñÄô=Îâ÷%8UIñ“®5®1=cò,1IŸÆ¾/½äùM:ÙÎsØG�Õ_câùMkUplÛ)ÿ!ˆ—0– ³Æ«õí:‰4g�>zÆ1ùãá¨,÷2=õû HëoБ-þsdöœ]tÎÙßÊŠ¤’Ï/Zûƒƒyxqøßÿþ“ý¾9ÏVZEqÄþ½÷ž–à¶*ɬîÑ©Ãb›F*l©T,X�† ¸›Àad^€xçO¨ÔpîÇÕ´8Í6<D$cUÍÀ UéX‘"�÷èÏ Q+òç Fœ Ýë ]–ÑFxUͼA¿þͯx • €«ñ:Ê}èà„qj{¤’H«t`¹0ç¬È cÐ=KµL³¶¢ ôçý«dè�N$“rÓAñŸg2—ˆ�S¾rj âÏãŒ�«à¢{&‡Ê õáÔå×!¤€¼ßÿñ÷ °�&xQ1< §sÙe—&ðFÈÎÎ0 '?ûùϒزŽe啟 €T� ùhd{lÉ;7å§æ1€x@´ ˆ�+>ï™È$ëÉø�‚c�=.‰Á¯õý›8»knèÝBnTàSƒ8ã�igœþµ¬.´ÅÌz’±¶•ÐÏ/Æa¨^gUÉ¢!ŠE ¦A ÍØ¹þZE)»wîûuÂrù¹Ž2~öÒKÿšæ{ß‹J¿ 킌ãï~÷Û Ò÷Kç¹g’6ú؉¾úŸ§��Ì~$ ¿3Îøjʵq\€{€DuÈ,`yà�¶Nì˜sŸ7‚|bßTâÖÙg��„ù°aÃ\uâTDüéÏf¦�M4�ñæ¸jt ¹8¶ŽÉžÑ{gŠtJ©’qþžûÒÝÏE±ëÇ�H»Å~ Ä}G�±aüNE©”SéÀ^gµår{°4H®L$„Ÿt–�k¿óí烈lÅîÑÕV毒QïïÖL;ããÙ Áj7#öqÎ–Ž P€¢­Àao%¦¬gª�ÁVy†0BZß*¸Ø•ÅäïKc3îò®¸>šä«¡çlP-h¿2ì�оsÎ:'}’9¬ü29ÕçéÎXoÊd‚a�©{¦MCpÂÖxõZqö ÒØV7_ÕxùoöÓYWdÖÛ6aÿ�…yý‚•4›ÅÖ ï}÷ûµ]|+ÂÏ"Í�ˆ¸F{BŽÈëUeÕ†‘°ê&a„à$3˜‰o2.k‡Ýö³Š:D*_ø$ŠŠ-k Ž›9sfœùxKâ [åa„Æù”�R©­ ±'Ñ�pÔà~饗_LòÁÖØIa³+]ðsŽ@´®Ù6t+„‘kµÜ‚Ö¶-J ¼øTÍXÙÄŠ0²µî+�U;°™Æ©ñÙ’o*šï¼óÎôqˆv~‚­¥—]~i&›lå¤Hc/pѱ‹ tUèÃQôk àûÒË7ߌ­Ø<‡oì¯Y3ÿ?{oág×q¥k—Z̬n1³eÙ2ÉŠ1±[†8‰!àøf’Lf¾?äÞL`&‰ã$†Ä¶ 1$cˆY’ÅÌL-f©Åô­g•´Õ9Ý} IÝïöOô9{×~ªjÕª·V­‚/Â夥¶¬Y>7ëÑççmàïa·é{å]±Ÿäê�ãß"U•]Î×ÿŽFÙ–�üj°Ä×ËÅ~°˜‘ò MP0ß�¾H”,}’ºÁëcv“ÓT±·ô+Úz²½ekÏ胴ã\Ê=ÁügʱÐì~ýíaßY1é*?�6ÆØ…NåÈià �ÌŸhsø�œÎUV¿&�Z>ó£ê°Oø›ÿû~jë >*~9ó/ò¥r±ØƒHMßL Fø5qÞžK=à¿Ó7“FìÆÁŸa\b«&ó1æUô‚ýh·›¶H4ß¾ÿüóÏûœmòd"Œ&J0*Ï ÚÏ®iÁÂø3×&BL¬­7‡º€2É&E­Ý(ñþ8ùü¢áþå¯/ûIìWe#“t&!8„¬¦aÈ0PSoŸê¶$?^ŒâÅ6ø²§öÉ'žôèƒäsppõ«ÿò²±ÒÁ 8“ޏ›•È/LYGÐÀâà°=B91– ²¬Š (àxaLÉ€ó�PÀ1ÈLä¿÷ô÷ÜA@Œ¢e"X$ß)ÝŸ£`DX5 VçpN“W¾VY‚ƒŽ5šhÕoœì+æÉçã„à,•” ……l››àÇA3ydUç�:?wî¬9[ƒ}eŽ<L˜ØfB}cÄ“Î^ò9™þ9[Áˆ�‹z-,,L+Pâüüõ•¿ºRN´ †–UÜb{o -WVt{Û 6Î+Ã\®[;òvf3rY1PÓÞY Iw•Œ5ÅYã¹LŽÈ¥CÔÙj{î‚E L$i繕0´l ú‚m�LhÃ8¬„ÓOQè;„ò6¶òÜg+ôLÆ\Xg¥®ˆ†À1~â»Oø³T¹ç‹vÊΦͽވö!²‰Õߘ0KŽö¸SŸ8?ˆSD£p„<âõBŽ2lÂSO>å‘\ èð{÷Ý·½ñ9&LîXie0Äa'd•\ÃŒŽ‚‘¬HÀg¨‰$½e�$Bà“O>ñ¶u¿å&B˜)²öI;Æð¬ºP¿D7!R=þ8ÊHkƒv<·E Òæ œnyWŒ°_ ˜Ø¯Û§`¿ŠükDN±•»ÄÄ­UëÖá§?ù™ ÉvÏD÷eî(#Α^Çw±)ŸöF޹LêÁG ‘ûL]G¡G þôùßü÷¯Ý)£� ¤òÞ0Íg@0úÓŸŸ·:Üï§| º ÜÑÇ’[Š}�Á&mðÎG0¢oÓF9uäµé¯yÄÏ$w.Nt7kƒ´Ú4ö�>ëî²½Þ¿ß#¢°×Lnc¹™ð ò’¯Åù˜CùCKÍ6XV?±�å] å}—ŸQg¹¼߉Êk¯å¿%�ññ ¯™PY#J£À„“$°ˆ[´;Ú}›¨cüƒÔ‚ÒùKõ�ZÀHŽØìÉ@ÙÂÓÁìñ3?|ÆmÜZ˜ 1n3ŽÒnyF¬Ã$'"‰ž{î÷jÏøÎç(#ã‚uÿì³ÿÇß±¨ôÄ·¢úºÒR~ŒÙ2_Ø·ÈmX¼†pr dÙß{úûþþDec£a™î}R¼K¯ qD˜V¦`ä3¶;Ú¶+ȹ„ Ç˜J$LéXd`ÂÀ!‘PøJŒED¼,´q Áÿ©§žöE±d}Æä®D ñ‰ÔÅ?mÃŽóïýìßIÚËïÉ ;Ês gÌœáÑ U)‘Ÿñj!1•S ?róæT‚Þ>úÀ…R„¿B“h—,$`ÏÈYˆ¿WhþïÅ\l«á]á¹Çl3Qà?þñO¼o$'ðeµK|Ò|žƒ@QÞ…¯\\lÛè-â� ,~‹-[=Ívâëõ´\}ôGìce¥ï•wE»�«?Ž�`Äû©ZÙv9_ÿ; FÙ–�ñ;Çx’­ý`ÝØì&Ìmð;þnþ-6šäðˆúåñhö’+eO®l1ÎÖžeB›§?çRn挈¨ÑÏøÁ÷àã(bDGi7”�òÒ6­+™/œ:T‡~ÅBSy‚ó‚|æ?ø�ÕaŸrŒð©RþHnã ôaæIÁhìØñ—ÇÉçÿô·_?0aÿ»tý0vøxj ¤ì6a÷sEyW+ó ¬qûü²ÌO¤ùÁéã¶õj_êk­:؉E-SKš�VÊ?1AKaD£a G˜­Míï?µˆŒ NƒBòB `…u÷®Ý>)%ZƒI¡´8„„Ü2Icp‹å„aò˜¼¢À$oùò¥.}ûñoûÄ6ù9¬_þú—~ßÇP8­Á¡Á`ÅÅsU&BçÆ·�Xƒ"ÑûÌ^säpvpœqòp‚˜èâ¬Q"Jptp€IzIUbü™P1ñ‚O>F88H t¬¸3!O^Ù XX&¾™ä0Âùcb GD!¶ûNÊ*y!B‰bŒð@]â¸u°ƬÏžó•O€1 R8‹$Ù%š'’<1ì½57.Å)ùìt¦ž2á#Œ6Zý3™*4�ˆ7"`’Q:$Áe5—h"zXõ¦müâÿ×ZBlÀx„7ˆ|x7ú1%uN|êÊK F)Gâfo_D.Ð7’+Æg�;ÉÆ¹7‚"í�DŠÉQ„�D_Ä‘G !‰ß… ý}i·Ã† ·6�Z%�7ožGU!h=iÂ[>¨[è—^~ÉW—&O¾ÉBî'ú*(‚د­Ÿ‘°ùë?8þ´VDIôLŸ#¹/‚ AnN#C\c»Ž ó9«ƒ)Sn÷~ÜÓXòL¢ù9¹:vì`åyÚEl +îFLPpyÄJ"·`†=zÉú/õÊÏ“Ü]è´ûò9&‡?ÿù:gwÔ)hWŒÊ²_ˆê´!úëo½î[7~úÓwÁ(ùê‡-iDuŒa“eãÏ„™�ñ|Úƒs6‚[Yhç¬tÓ>ÆãEc‚ó‹ÿún;¿cB[Âè»”?Ÿq€Üb¿³•ÃC&ZÞu‘¬\t‹‘(± ©þû©;~Øï"ë¿ùF0†ö€-4D.�ˆ™­Óˆ>D§a·Œp¦½aB¤½DÁˆ‰ Øk&·Ñ^3ñgÜ ½ý÷ÿüÆÚ÷y‹pù¾·Kl§Ö•wU$@”÷]~†óœËûQ×Ù F8‘]ÊÈaÄñ™þÈß;�P¶Òü"wé+Øb¶´ÐY¤Á?`¢Á†�N ˆ5MDQ!?¶$Ýœ*…-!� >véqü«÷ä9QO¿6!ü¤M8ÈAÈÖ5ï@PE0"Rç§ÿö3�t~NEõ…�ÁØŽŸ@Dánó3ˆGx¿8‘†?Q#Œ#ä±a�ìÁôÏ!°àÅUÖû`Gyïó?Ö¯H_Y‚eî‘�ñ†:cŒa’†¯D›g+ce(´>ÊJ3[¿ñ•r°,þѯàŒH�¼¶ØâÈ,ìY¿ä¾l»Ëö`ò�üÝ} _±ÆŠäD"Œè×,èT¥`DãAÆÕäqóG�"¨»¸÷λoûB~!å%Ù9í€lâ í yaãè‡lÂ.á‡|ïé¸p”ŒÊj—|7ŸçàוwQnD]ò�}üñÇ.Ž‘¯e��¤kÌÉÈ6\¶B#a;±{D•wá›åã�S£ª²ËùúßQ0ʶ|£ÍVÐÖ°µ¹ØüPÆ4øÓ�釤ÐÀÿ#šÛ˸N”3âzöK FÙÚsä‹ ‹ÜÎ¥ÜCLèàbëþ /½àÑO.íàHg‡Ëj[EÒnò™ÿQ_ö)WÁˆEä|Ʊ‰¤ý&#V°ýD\³À\‘Àxú¢Õ#ã%¶?R‚QY­6õï×´`„¢‹�I $/¹båœ ZÒñ‰Pü§¿>Ýœ‹�îP³zžr�_%yh@5 F8d¬”PNœ,&Ÿ878%—ÜÁVü «Z0"’ƒ Ñ qyf2`áDó.Ïÿéy¯“Œ#[á}Ý#î�CÈàN²G¢´’— ÖÈœ& 48¾¬xr"9qWØÃ�øÆÊ†ŠÓ p(¹‘)8@81,ùŒlþœ­`Ä fŒØ’È€–¼Ø*õ†åˆ ½²bVZ0b`éÓ»¯ç–"¿T A�÷ˆ|ÜH†Ù¿ßoÓ™nIãä/„PŒ1gœO¯Ï?þÁ·2Ü>eª÷7Œ-ÏÁqgB�p„ðÀûáÐÁ!`³ 1Ü!’~Š¡FØÜjâB[�¢qìY]b Ñ<[8áà‘‡õÈ$œ|&_W£{=çÇvsŒ÷îÝíNZ7soµÜ`ǬÌDr11ÀQF´!"åË_x¢|øÉŠ=QM´[Ê‹Ísqt™X"1Aa‚ŸQ&nÐ?˜ÄÀç¹çŸ³¶vÐ#}xOø RrUµ`TÚ~U–`”k{£f#¥…XS¢o’‚üà#N#—B“ò—MXÄÍe@0úTH`Ì–H¶p2�Ü5y1‘üÜ&’ëÖ¯õÄœLFóŒèÉ 0Ñ`lý ÿÐÆØ2Ää³Q£Æ¾HÀ¸Å‚Ïå½ã–´(ð3¦a/¢½Æ¹§2N¦£sÕ*ñn¹¼bY¶9ŒÊŒŒÕ³?zÖûkË–WN/Œuz„†¢¢B+ÊÙâ#�™ a¿XDI^qbNÎ%ìã §º!æ#2c7ˆÊ! '¹‰ÚL^0B4¢}ÿÊ„pl&ÂÒÓHfMû® ÁˆûF¿‰Ó†°QD³1 C„Œe¢ÿb©¿*±‹…¹v� ˜éÞ§t»cA¢2£È‰ñóÓÏ>õHPD |>Ä�¸šÌÂÁÂ… |á®§‰òˆ!D¶2þ¤#ËCä &™)½õ‰~þEÁˆñá½÷Þõ­jä4h°'çgá/y±˜‰¼`Á�¬å³U*Y¹Øj–ŒˆxhæÅ¡]îØ‘ŒÞ¶v‰Ÿ€`D}³ˆöFòZê _"y1†Ã—±˜öYXXäã^÷îÝ­]\IÆ^–`Ä8šÏsð=“m2Y6þL™(#ö�-ì8‹ª,<1ûÉá2,áGb;G˜PKô,RyWª?çî�GÁ¨ªìr¾þwŒ²-ß(óáM„F.ö?—º ¯#}9Ú]Þñ·_¿þá [ØC0b cÁ“ËýY ǰƒ,¨dcÏi·FìZÈ¥Üø�äñô÷¶HlüV÷3Ì&2.D¡½¼6ÅÏ*ŒX(ÎcþéàÕaŸrŒðOóðÉ`_:‘ˆXRy¼ü——}Kwy~ ÅDÔcŸÜ&˜)Á¨üÖ{M FL p¨Y¥á…?»Ãð#ËÍ@Z*bäÊV N9]Xñ ºˆ>ƒ !{Õq†H²ç+Få F+.E}«ò"ŒØ{M'Xjƒ8Î!J1[ 6ØþÃ>|s½}e�b&èå F(¬I�†ÉE&W\±f¢òµÛËŒ,�­!8“$ekNƒWj%ó xê‡ ²lì%lr±´Ÿ5ÄÂî*ó ˆôƯb«R[¼�b~Ó‹,+*¼²ðíí;˜­='/baa¡÷Û\ÊMBü³g,%� 6»I_øÑ3±jþvÑ(^ð‰vŠ$ÉœƒÉ-iéú5 ¤ùÌèoÕaŸrŒ°cÌ-rð³ûñÿ“v�vÉ®½è>ûì�ÿE nøEûñÅ?{ÊÆyüÈʘÆ6P[~?sâb(9È2¼�TݹAhV�´îÙ•òšŒ æâ`YÈ3I¿ûí'Ü¡d�‰Êtl ´Hu&’ìÅ%*…ÕÛÚ a‚pL1†D½ ÂÄÓÉ8ÁŒ÷xåÕW<L¹‚‘9ÿöã+ÇØ³—É•©`´À!’‹±%hêí_óI>ƒ0ì¹Èiƒ3ÏD寯üÅ�f&‚ïH"l˜<²­‰PðxZÆ•wHu|öì6n’J\M¨b4Üqå‰6ÂäŸløl•b…a¾ ¶œ"„óñ¹8Ìù\ÿ"•Á?_Áhß¾ýv ßK.€á¬"*¦ËM„c{ÑÄ6&Gˆ,ü*=!ˆï\‘`D1«í Ø¿ûýï\ØÁQF0ÁX³}’PX¶ÔÀ™É0Ñ@ä±Y»n�ÿüì9¶€]Œø9ƒ+~’þ2aBÇ6 îÃÏh|ð!Ï+CŸ&'O.‚¢&uÀޤ¤´É"sø™œ]°û#F"t±ˆI:‚'2é#Â(wÁ¨Øûù… üóŸÙqáÆ‘º)ω�u•ü½ª#& ù´7¢D|kzDb"­ØÈ„9yå* „ Î¤$Ÿq€ Æ_leŠÓ5XL â Ë“á"Q_C† ®ÁˆûÓ®££É¤˜ÄžähaŒ"ò”ÃèÃ~ÓN=ŸUY±¬Á¨‚ú‹|Êû=›÷6l¸óÅ.°%•(r`$s÷D$ ý™ :+Áé#r¼<öècÞÏR¥©dòÑ?ð �å°b<»yòM.ò26 >ã �06as9m‘è·ä…£Ž F4¹q˜±••ˆÆ-&.0®rœr;³mßÿþ]�L ÄLˆýˆ´|ÑX¯y_N~=m?CxÈJ0*£¾âÄšçx’x‹¸�6mšEçŽ3[÷¯[ã8¸ŠHÀ€ˆ /NOd¡"ÝûÀ*Žÿ±ñ»Z‚÷Ŧ ÌqJ&0pšÒ[ÔÀ'$r�~‰�§¿ `ׇ j§V~Ý…<Ú”§ÈA0Â×øâ‹Ï=y.‚&Î׿þ Ï×—l±]ηr²M?&gÁÈ¢ÕƒX€@èáÊW0Âß!RŒvõ�µoNÏ$²Aåê1(åg1åh`ÿaàL¿¹zKZzÁ;Ÿçð¼L.ʃƒ0„/†ýäda à€™µk×xÿd¼}úéï»ÿŸì¥Ÿ�ž�?^Õ‚Q¾þw®‚sêd±mÍÊÅ~ð]ú'þ"v‘Ö¬™Þ§ È3E.Ù�¾PG´,í±´`”­=g<':e½Õk.åÆÓ¾˜;°Åß””$,`àëFŒvÈÜÃ~v{?¡ï·±…lî‘LzM®ÊÒýz‹�ùÌXhú¢ìS®‚sØå:þÐvð‘ðÿ“‚Ñ„ }î‡`”òÏÚxó„ zI=€º¡é?¤º!’›9Ì[¤–`TÚ ^ý÷kZ0bRI猧I‘¤™‰{þ164'«œÁ„”Ær¿my?n‚oCaÛSmŒ˜sŠ«”¬‚ÑpÛm)§í¨…ÖrKGáXoNIK Fըܢ€sñspî‡hpµ#pucˆËT0¢c"Àáád°‚Ç–0")x+=¨ézï[î&Þ™FÔƒ«²W"[î1A‡!Œ.ÎŽ#«‡ü™“]Zµ*pGc‚£ÊÃà„“Ë„2:ðýäSËbŽŸïׯ˜öà4?z‘öDT ÷6ä>ÄU׊ØÅ å¼<þù F8©¬È |q”0 ZLLbâ½SùÀD>8y�m˃S|—X×ÉßK Fû÷ïóþDh0‚ßß·¯ï5g%þÔ©Óž;c;Äöw³ÕŠö°zõ*|8�•k"zàéI}íôþñTŽ=%Ñ$ͬŸpÿèxâÉE9¥hòŒ—gAùgΚ᫞l%€3'»EÁ1“#ž±aå]U-±ŠœO{#bŒÕÃÅKû{c—ŒXÑá8ðè´ç*q¨“sVæÈ•–ë8@½�Œ’þ‰=!Âeò�vŒµ­JÒo°K´]&›ï¾ûŽE6lö<5Dßåa„ðÀ䦤ä˜/fÀƒ(Úm�vˆó‰%Gö�Ó@‰¤%¯6¶*£”Rqý•ÕF£–íûasˆ¢]¹Š- Ï»-xì±oyî-¢qЩl’ ÓÆ¨Ã¢¢¢´‚[ o·HÁë-Áó°¡Ã]ÈÆùÄÞ9|ÄýˆéoL÷œfœR‡Àä’¤üø„°#Tô6ÁÁÁ“ˆC¶ òŽØã9–›Œ1‹(µB›œp*Ÿ�Çø2¾#P?l‚Ó¸qã=*‘q™(ÆK"W=i¶ ô?øþ3¾�†(hìL£Šê‹q §yÑ¢TÒZ_@3áû ;l`tÊkXõg,¡0¶Ó>±Ÿˆtœ®Åß¶-»D™2áó÷±ûÊEr“¤hu•`ÄçàFûÆGã>—·Þ—Õ˜ìßiG,öÐH1@¹¾÷=’Ï^oßoí÷a,F<¤ÞïûIzKÎ=|�|#ü IJ+—»Í騱£ŸjHÔzK³¼mj³Õå—–«’&©Œ!ÙF—‹�üž|Ÿ­�Ì.5lȉ‰©ÄºŒ#ɉS¦FLܘ,‘,šÜFŒ7O{Ô…|kê‡ Ñ…6rÂl P-,b™ 2`„ÍÌç9q"î…Ió¿”ßeÉÎMȤ-Q×,îà÷QF¶¿°ˆE;$—T'«¯ÿø'nGøyY~ßÉǯjÁ(_ÿ;WÁ_“~†8Îx›­ý �ãgo÷¹Ìz¿³ëúôêã>>$Q�$©1b¤×%í=ÙÞ²µçã,)2¾&BG.åf<æòÀ{ï}ûS‡c0ßÌ‚â¥>�-ƒÉN‹ÞdB%‡˜aÎ"sl¼ ‘eôkìw>óÆ‘ê°O¹ FlÁ§.±;¹Ô� —' X8o÷zÆr·Ñ.±¿Øö?XJüN"2×¢@_Ç^`æ™þÚôW|l»ùæ›Ýÿ–`”ÆÀ&þ隌A0<8³c·`äpôo¾éŸHc„h8 ³—šþ[v,.ÉôP³ _­ ‚�ˆ ®þ¶’OOãg;,´–Aoþ‚yŽO÷`ÂNv[ùbâÁI,¿ÿÃïl«]‰Md¾áù˜ôà–7@Æv‘©`Cø™°¶Eà48Üb§“‰.ÂÌY3]‘ÇÙ&4?Á�¤šfBûqR¦Ú)_t|¢Cp XA"…Ú¢Â"¯wÊÀäŠ-#DFtîÜÉ~ÖÏ£تÀµÑ õ~àÉ,…ˆŠ"g í–œ8™´-–2pá„`ìË»ÎYäL&ü·ØŠçgŸ}fG*‡e¿ãŽÌ·¤]0äÉ`…”w¡îï¼óNX×h+LPÈ—ŸFæÞzËmž¤ÒÃõÍ঻J Fä=`2Ì@KÂÐæ6ð]A½Ì˜1Ã'´Éûµö3V^ø�‰,Ãí& ÑîØ.Å÷˜8\°h##[Û(ʼn+žäÚbAÞ±>œªFý2)ÉG0J­pœñ�å­·Þôè "IpLøv…„ÕØ ¶1"19§ý¥Æ^û|#& ˆ#DÞ±BOÛbbÉ’�yÄ úiÓfMÝQâtºò®ªŒèù´7hÚ:õú¡õ;V²Ù’Ãiˆ�¼?9Baº-ªˆAÉ n¿HlI#â�1=Ÿq€I IαUÌÑãD²»-™:í‚6áï±95¡g‹És‰f?~|^‚ýŸ-h$ðÇöRïôWòj±½–¶ÎäÁà‹Ôh`mãÉï>é}«ª'&8¿™Ô_Y/¶$æò~¬øµ²­ÆŒÛ¬bXb»*v [Æ8Àû!?Ú*¹�ÒEm5„­'²˜q {�@‹ƒMä‘AˆÁ0%'ý‘Ií ÿ�„ñvíÛY„òûù8�zÅIå¹åÀö"jcÿ(/¶�r2Á{Õs¢fÉ¡‚àÄɈ�¬}SnN#›9s¦�K%¶�–è燜f~L‘�i™F™Ôý‰ñá­·ßòI "Ï›<ù&÷›àÂ;a[ˆ¤Cø�7‘4îˆøRlÜoýñ—#Þ†CÏÁ3gÎ0»¿ÐŸ…ø–Œ0B”bQþlo&2ˆ:�y,YÌ ?�³ Ñ�ã“£€j¦Ä¶£Ù¶<+õƶ$Fü½ÊŒ°G´Ú?¢QI‚N»"‚�­÷îsÚÄ…SAW[ûd[0už�`´Õü„/ì”SÎàÃÖeÊÏÂYJÌiàœsŒð§R 9‹}âtÀ¶ŒS�ñtL"¹ç°KôaÒ$p*ëM“ovÁ59�ç½Ó:CÛÎç9¥sC•nøyô]„~ÚõC;Æ®âKb;‰påðŸñ7žùÁ�Ün—e³xö$¼ªír¾þw®‚~>ѦM›s²ì`LCàËtüm"zD±•;wÙÂ�åÆ`gi“Ì)ØÖ•lo¹ØsÄ*›\ì¾'6‹vñ¶ ¬&DÁãŸÞzë­f7ûû"~œob7±éRñM[`6t¨ù9 }¾Y^¿>nŸø�¹ÎÛ"\uا\#v0·bÁ>—z �`SJGÑ.©_t"O9¬Ñ˜HJôŸ—Z}í³ñ™è8¢€Y¸mܸ‘�Ó¾0n[Óâ|¤´�¹Vÿ®-iæ 3àÄs1�Ñx0@¬ò1˜r$#Î<‚F†UXN"ˆÈàT¥AfRŠïÆZ!‘¤‹­Dí°gç˜÷@Ø \�U+&íL®JŸ’ÆÄ CŒ£D?~Þ‘¬ô ò­m ¦LHË»2Œ6›CÈ„î¨í "8e={ôrî8®8š8¦:l&‚N:¢JñÿZ$ >uÖÛœpŽ8DZdµ‹ }V£É#Ã$ë�9 DD`0È¡C~Ž=gRÉg‰(ÃÙʼnãgDr¥€‡cƒ‘g8“vŒm�6U‘`„¸‘ Úa>‚ ;‚m€P^VÕHDÈŠ6 z)‘E[Ì©¥nØq¯9šêl#ê—Á�-ƒ ±#E„õ×»˜‡ÑíÛ§ÐV–öÕ&¶E´;Ú/¼8щIQP8¼¬$Í7®pDÑ'ò�äÆÞ¾­AÆ-Œ2œVÄ–Dêgâ1›À!!öro8ã(çaÄÖ ú ‚#ŽÉ¦È�ʼnyôÞÅ·™àŠí`Áq¡œˆ“¬lç#ù„ÎØÂ‚È;Vï™<ºcÇN.ˆ±ÂËÄ+¹u¦¬>[Õ‚QS;•)ŸöF{¼‘`Ž>&ÒLú‰>Ã&ÑçW›�ÈU0âÀ¢Hóø>[–Ú䂉;ÑdØ•ÂÂB�˜ÃIaòD{Á󜸈C›O„ö[�ˆH.åñ&¦11'‚œ1¦Ž¶&*„¤½O{Ä·Ëáaª2›˜IýÅ$»¥ÛiJ0Êíý°u,‘Ûl£Ùsú?;D‹ cûp®YQ%º»P¶`´ÕED#ú9bÄØCVïL˜x’ÏŒ~ÈÊ6’øˆeŒ«Ô?¶ƒ1ƒzëa6®™MJɓƟ±³±M*n¸áF·}QàFÔÀAPÂî�/†vÏxÅV_¶éî´{/³œ@”¡—õ „ƒX¹NN”Êš˜Gî™Ö6[†�EƒõH#vcKJJ¬­ovÿŠ1‹‰{jKðwø™ýݶ Ógà„ N½øûX_Á'ظÑ'›XÁ·— IÁˆºb gaiûö”0à 7¸Mˆï’îwúc7Ük6N Ü2Î 6! 1©‹¾Ñç´?Æ~úieF¼¶‚þÊøÁXÈd±ˆŸùMâY˜2²XÂçDzŒh�Ë­¯´:Bü` ¤]°-�-.´+|•\"Œ8ÙÓÛ¥Õ í��zìbí’œ~æævºßÌ{À‘gMÁÊ=¬3i—Øÿ|žs6¥k ü}’z¦Œø|ä¯"Y=v‚¾Š(É¿ãS#(QO,ÐÐVË»¨·|üñªŒðÏòñ¿óŒðOèß¹Ø}O–.]>øè·…,l³h‡ŠÍù› ÙØõ•Cä7v�>œŒ´d®‡È�­='ò'—r ŒmaþÀâ Adm ?�²²mÛÃ6ql&'ð0ÐÇæb©ùGùýšžiϹÌZ´ªû”�`D¿#@.õÀØ]–`„¹gÏÞðÕìYž“�ÃCÈáJäùíØšŒ=ÀŸe\gì"a¢Íÿ°‡Š0*Ï"†pÍGñz8îˆ ˆ_}õ•'Aþ8ÊùF ´›�&•-wKÏgÅ>´7øã]oÛ�ˆðÂé,ë=JG1!ènF˜ë¬MÎx.!é úˆ²·ÙVuøö¥­ˆÒ~�Wˆ imuÒÆîQRrÜE#¸’w†~‘:•¥�ß.l¥[d¡ª/¾ô‚|ÚQH�ëq¯ÚuÇgsŒ8q�É&í’²®0a’É}…-R�.µ’¼²âEÔ+–LˆØwO„K>‚ÚòÒeKlKÇÛ>!&Š®¡µ/Ú4¶‚:a X„áò®ªŒÚ·o—W{£Mâá`±• ±…:D€c [9püèãùFÜ3Ÿq›Ã$a“vL›àïG m¡Ýb_F|tÁl‘Ù£�fòŒpDÃxîçf×±wLˆ¹··w³WD/²—¶ÈÅ‚ÍTú2âwU FôµL꯬ȸæó~,Ñ瘠Ɖ+âFsûÕ¢EsÏgÔÒþÌYœyÒEq|4]D8¶²°€�À˜ÂÅ6›aÇۄ|¸õùa&(uõvºqcÊ? ~¨V‰±w¼ýøÔiÛªcmœ•]ÊÁ†­³ƒvÛ‰ÍåçØl6‹'Œ1$Õ½hvšŸqÑÿ¹/bã46€E ê8“‰¹ßÄþ—i}±UÂû‹õGü¦­&x�±5ÞÑW¨ü† \¸4x°çlBôHEž\ôÈ"ƒ˜ØíÊ©dø[ˆüŒ·ˆ{Eýú£Ã>ÞµmÛæ*Áˆ6ëq»—êGƒüÉeý�¾{V’?þäŸîç�ã ñ�þÒÒDTú)e`��Ïc¨—ÊŒXøâùø‹D^®±ú,6_…¨0| ¢š™àÖÊÆ(‹¶ŒÊ³ˆ×ˆ`„“Hh(ÃäHÆ$* 0tPœéù¶Ú„„UjœAr’ÐÈØû}Ý„‰¾‚HÃÂ8qÅ%ToV'Xa#'Ää…�veró&W'™t²§œ•àäÅÀõ¦mu!J�¤ÀL’‘<‡�™çž<‘ç",Àƒö@¿Á ¤ÑˆJ¡½ÑÞ¹*²×±_Ñ.É9#’üÓ¦y'&ƒå]™Ö_Y‚Qü~®ïÇø€íg\_l/“húÂ.¢.öˆÉ,¢QFô[¶±â›œÐž¶þNî ì"÷a¬hܨ‘/nY{g•‘¶ˆ�¥ŸpEA{Ì¿!ÐÖ¨{îÁ¸�Mooãc BÛx©/Æ£xaoøÎfëgsçͳ…Ëudmë´•�:Æ~ÍHý"jsØã¶¢¤ä˜Û;¶h œ’‡ÝáÏ|7yEÞõ7tbAø`+<[¹X| â‰1šhKlvŽ­$p‰9eRãì•íŠDN¶6ËX��g!lüøëüL¬ˆT¼óλÜr_ü úu¶Ðêðþûð÷O¾OYöqÖü&æ”�­~´uÚ4Ylm6†´ü¶­ñóLü8o¯6Ža_©;€È… °eË–Wš¿µÃÆl8QÍlѧý!&SFب,w&ãI&—ûWæÃRÖùæ×b7Ƹï]Æ‘ûà·lܸÁr½ãïN¤í"™þ„•i¿±!‚sÖ¬^©›”ýçÝX܉ÏaÁ‘ú8i߃'‹­Þ.ÍOÅGÿàgÙ´Ë\ŸC/ï‚/ M¤– / ö�¶ÅøŒÀÆ" uŽÿDýág2Çþ]Ö½½¼yøãØú¿ÿ£l?~Œ+¹ÚeoyøßøWù”¯‘-bçb?h[Lö™¯aY¸eñ�ù sžhï-Zäí•yõ—ŒrµçpÏ¥ÜÑîa_¹‡Ï7Mغ<ßt»yÎí&QýŒ#¼í {ǘÁUQ¿6l¸ûÜ|.—ùOsªÚ>Å!úl¨¿¤¿Z–¿®\ëŽôM¶ê¦³{Ø{úý�EeæÁ”ñøñ�ãü……ol<ŸgN\XThcÜ@ŸWzëÈÿêÝ–4&/ÌÀ€ð‚8Â@™HèÄ ŒL�ÚTdÕùóç¼A0€å€S[`!{IG Å#†Dãa Á™çÉ‹ûáð¥~™“h[šŒ’WJè(v£„󊢉àý¹xN0ÏÅpñÊEGàq@É €8‰$t,¢v˜`ñþL|)/+’ ä8wÑqÄÐp¸±ÍÑŒUq¸1Ù‰†Ï “æ)Þ».ñnoßkeelqo¾F¹è˜©òîó 2u€°€H×ʸà”ZÕ¸ãN áÇxbÔàHGæ”­ U�o—ãs\ü;Œèèþ>Æ…ûÃŒÏPO8„„Ió8r_~N]Q.oÆáÔ%Ö0£.ø.õwxP7LªY1]¾Âr]YdSÇNÃã¶jĈ‘~ßhˆ½påü¯"þÔ™“vbí–rãL–v`¨{„F BUá…Nx¬�¤êù¸;HFÄ‘7·•wÚ â›³µºˆß+«è¥#rºLš”Jh�¨/ø±Šoú“œ8Fæ ø´OÄBr ¥�˜2ãP#>òoÉ~æÜ컈¡/½ô¢ïmGàdò”ܺ'DQP$ú‚ÉA›�pE&-l7‰“"Ú`˜ÜÓ^h?´_ÚN/ƒë1k/8$´Wê„÷,0†ð£Íòú'B4y1Xaë`õÆ{`7NÝ“~Kø;í—çós†È?–ŸöÏ$a€:¤Ü´ Ú#íA ɧ¬z«È~¥úâî1oOÔ“Ê•¼¼?Z�Sl$ïįXî|Ú›Ûg„+Ë“Aû@(ÇsÂõA[¥ý”gbY©wœ5„ó®Ø×KuÃ{ùsrâý±Ï´ʉ ¡¬ÞŽ­¼DË‘ßÅÇsvY¥ÂÖùDÚÆ˜ò.Ú«jÇ-ÒŽú¦=ÑywÊ�xîÑËÏ¥.°;Ñž¦úœÙJ«—(ôTd¯c{óvi“_þŽ‹Ø‚ÓÇ�òÊî\+¨¿ØNÒÝ'Ÿ÷ƒvŸ÷ô¾bý{N4‡·Që/©1�Å‚“n�àÊ»%#>ÿCKŽ9|Ø»×QŸÜ#Öø}ìôÆWêƒw¡=q]Œ¶ÚóZú„�íÏÔÅ1«+ʇx…Íà»p¥ï–¶çØìý ûˆqÀþ�gñL÷Sl+:öŒïS÷°s»cÏ"‚ЧØùyºq)†›†!@IDAT“ú¢ýñ¹h?by`B_t[³ñí;´÷äØúȻ»Çq–mX',ÿ ¼ù,°cŒG¬–Óκ%ìï[ò·nÛâïÞ¯¨¿ç–B�ÈäòñÂü|ƒ”?uÂ91Þ`³áG?…‹VÔý”òS©_eûqÑÀ‡ºãû¼O¬WïÏvÄ$Á×Bœçylûgìð¾mÑ£”Á ±‡²erEÿÊÛ‹ùµ,ÆQ&"ëXŒ£½ò.ðG(µªt‘2þ{ì×Ô“Ûnkoø•¤´Æn®ôíò„×-uG;a< BŒvý¥lÛe®ÏI×¾“ü(ïˆ� Ù<ö“?c;‰øà}½owÄâÒý;y¯äŸcyᛋ?N½±pMßÅ¿+íGSn~åj—cûH•/{ÿ›ïåS>ê…ògk?°-øÚ|�‹‰{RÀ£_Ñ�Øæ‹�G¬¥&·¤åjÏ#÷lËíeþ—÷¶öæ¾'¶Üì6‚~H¡½QöØc½•Õ¯Wø‡ÏEÇ„gE‡»2Ÿ—âqÆßƒš)�h ù�ï`pâw“ï‡ÚÌÊóºõëÂN›X1H¥;.7ù�Šþ¹Çß+“Gégã˜0hqEÇ>›¶RZ0b²EDÎD;Uˆ0Yö�Gvü^Ö½yWXS_”‰ÏÅöPºÌü§§¬¸Ør�ت}bm¾©G‘·�Õg£ª¼(/ƒWl_Uù¼xïØoø®Øª¤ƒ?WÛ~ϵ½Ñ>’ý�÷*«-åóÎñ9¹ŽñûÔ ¿(cuÕ Ï†/}ƒçÆþœ�ÊúnäÂýb½Åß3}F®ïÇ÷báYpqñ.̓SþC¾ÊX:YtüNìïåÙ§(•Þ²Nß§L™ØÅÒE¤]RÇ\|?ÚÔlY–¾oé¿gZ_ñsðå½(Gy\J?'~�ûDûYÞ»ÄÈqDbX’ïiôh"N»•¾u¹çyÉñŽñùå~±’Èû3†r±@‡�Q™W|OîÛJeÞ?Þ+¶K~çâYUá?WÕsàD]Ä6Û¿çsÅúµÛ_n_´ïòÚx>ÏËö»”ÿ�÷�ý¶:ËÇs#û\ìGEï[Yö¼ôsò-wü~loÜ??�ï'ûZYí)Õþ²ŸÿÄ÷�í—¿W…}ŠÏÉõ÷È‘rVfû‰v†\�,¶`ÒÍÿr-wmÿž£ jˆÆÇ¯NÙAñ2úHÒ�Äò—eL*ºa’CEŸÍõç±¼üN§ŒeÎõ~¥¿ïÏ¿Ç{gƒïÅ_å}¯¸x»ï­Þ¶}ë¥Ó@zûi �ÒQºœéþÎó¹2)oºïgòo<cË•‹A,K0"ŒŸõ¸‡;2,¯L‘w|ïØÒ}‡U¶5®^½Ê|²•‚Õ¶@<òÈcv:ÞWÿcDEº{TÆ¿QÖLîÊxVòñ¹¥YUe[I>?×?SÞ\Û[|ת~Çøœø{&m7ɃïÅ_ñ»U]æø|Ú"¿x^yý'~¾:OòÌõ¹¹¾ÏΤݕ7Áˆ}&ý½,Áˆq!Ÿ¶¿ ¿Ø¦âï¹2-ë{™ÖW,Sü|6íŽïdÂ3–‘­8¯¿>ÝW€ÉiÇI¶�•™í•O¹³}VYŸÏöý˺Oyÿë¥ªÚ Ï.Í’gÅ_å•-ÛŸUås’÷ŽeÏ—÷Œí»²î™-³ò>ËÇï±ßæûÎå=/ÝÏ’Üùy,GºÏfûo•eÏÓ=7ßró}®ø{léž•îß’ßK÷sþ�ÏäÓþ’߯Ìz)«¼¹ü;eŒ¿ø~e”óÊý¨£ª±e¹¼ku}G‚Qu‘Ösê�¸'—\-l™êÙ³WFÉë ¤³–Ü—ÐM¢¬¦OÍC‚o¼ñFlÆúêoÇŽ�ªäUc®N{bA.['GŽe¹Hîô=àÙÀURPÝTDàš!àÛpLx^¼dQxÓŽÙe«Ò“ß}Òóf1±õR.9òI°'• å:ÏguÍÀ¨…eû79µÈõxËÍ·x2÷ä–¯ZXdID †T–=¯¡âë±"P#$Õv=´® ‰æÊ•+<'ù‹8EƒD™ìk­ù¾”I~Irbö(¶®E…v|´åLÈ4÷B¶¬ÇϹ×ùóüsÜãâÅ þwþœúìÅT¹íþ<»?‹Ï£¼çìg­\§OŸöç7lhßµwkÞ¬¹¿còó^ÈJø=§NŸòçòg5µ²5mÚÄù–æ™)Ÿøùø;Ï8yòdŠÙ…óá䉓áðáCaáÂ…aú믅óöoé"ŒàYS°¢¦`K½R/Éú‹ÏÓï" " " " " " "PÔÁQáСƒ¡¤ä¸‹ T. ’<ä‚QÇŽ�B‡B»ví\4H6D—#G�"XJJJ\êÖ­›‹ »wï¶{ ',NË-CïÞ}ü>Íš5»,<Åçó¬C&h\0a¨ UAhß®}èÚµ[(((p±ñâÈ‘Ãáøñã—„ž þïHü¬¡ YmZ·1¡ë¼•û`hbWŸ>}ü>ˆˆ\gΞñ{>|Ø“?Ÿ:uÒß·M›¶ö¼®~Þ?~>ù®¹þ†rïÙ»ÇyÀ‰ûóƒmëØ±cha|Ò]™òI~—çñ ¶ Á4 cakÖ¬ûÛ[á¢ý—N0ŠÂÖ‘ÃGÂî=»½Üö5ËqÔ*t³úhÛ¶]HÖ_ò¹ú³ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ÔuõF0:hbÑÆ�]\8räˆG !œ5aå�‰8 ˆ7Ý{ôýû÷]:w1q£…‹,4Ä¢íÛ·‡;v¢F�†>& «´mëÖ°ÿ>Œ:Û÷&^71¹D¤ÏÛ³gOغm‹‹7ˆD¾郈‚àÓ½{�ÐÙNó"ºh«Ý�g8xÀE�ƵDdß#Bñ…ûîÝ·Ï¢‹ ÂðáÃCß>}ý^ˆ@ˆ/$~Þ¶}kØe÷9hFlâ»mì´0žÕƒ_ö®mÛ¶õ�‘I¹6ø'N8Ä›­Û¶ùó©ŒZ™Ö¹Kg’cÚºó\ˆË‚ïË&êcÃÆ öì1dQB¦úEU\¼=̘1Ãø´¸J0âý‰òBà+Þ±ÝÛ§©!tq!!¨õèÞ3ôêÝë_„8ÿ�þ'" " " " " " uœ@½Œ{¾š=+,_¾Ü™’ã%.Z 0œ5áœEü\4¦� /·Ü|K1bdèÙ³§ ,´�Ý»w…ÅKû÷WÙ \ˆ!/l+..¶mP‡}[Ó�ÁCÂCM cÇŒµï¶u±hÅŠåa¹ýZ¶l™‰@û](BhBÄ!²Áh¤=鍊nM7 ‹/ +V¬ë7¬GMLa‹åCx²âZÄN*q3Ï$zgÌè±ökt5j´oOÛµk§�¶2̘9ÃD®mö�†ön½|M, ©µE( 2$L½ýkaРAWm‰Ë¥½éÃsfÍ2¾+–¹`tÜørŒ½ '�Uǽ|£FŽr¶]L@âB¬É†"u¶sçNÛv¶ ,]¶4¬^½*66lÍC B‚uÖ«W¯«#Xi¶zõêðùŸ‡M›7…sgmûŸ x¼B`3Ûš8pà 0uêלSk;Y�­ŠºD@D@D@D@D@D@D ¾¨7‚ÑEÿüçGaÞü¹aíÚµ.žôíSè‚ DÛ¶mõ­Z7؉Z×Y”ÐØ±ãü(vƒ "_Í sçÍu¡âÄñ¡oß¾&ø´rñˆ Ó �Ã7¾~_fǸ#˜l3!åã�ÿ–.]jÑ,;IœdBT&‡û÷»˜‚È1dÈP6¾éùw–,]V¬\î¢[Ü5Ö¯_ç§}!,í1±dð Áaüø aÊmS\CpZ`bÊ‚ <*©w¯Þ¡eAK¿[êˆ8êÝ»·—sܸñ�­uDÖärÅBˆ>ï¼ûŽo#7Ps‹Î"bŠŸ#¨!�!À!¤ÝuçÝ¡_¿~þ3¢ƒ²áC4¹¦6Ú÷Þûû{Æi±G3±¯g�ž]ÄV="¾ˆê*-Q6¶«-\´Ð5>K´ïÁÄ?øì¶()˜Üu÷=a¼ñA¤"K—ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ÔõP0šçÂK'3î¿ÿ�0dðPË Ô0lÞ´)|ôÏ}‹?cÂÆ}߸Ï"p{[ˆ‚Ñœ¹sÂüùóLì8F[D:ˆ/lu:oJí,÷M?tˆâ!Òeé²%áÕ×^ ÅáDôÒ@”FZ”M z¶›�‚x1Á<,Z‡ûï»?tíÒÕ£^ˆ.Z»v�ßgꔩá´åZzç�·í÷345´jÝÚ#k8xöˆá#Ã=÷ÜcÂÒÙðæ[ozÔÎû3bÑ­·Þæb Û¸Ö¬]>úðC�&N¼>L˜p�‹"Ý»wÏ©Íó|¶¡Í_0ߣ·C‰ý±  ±æ¤åu"²jÆ .˜õë×?<ùÄ“&¨ lc[¼dQV|¨¶ä­[¿>¼üòK¾Í®ˆf£G�qmëÖ-Ñ5{öWÁ•Ìa´ÿÀþðþï‡e&àí3Q‰-r·OD8"Œ6÷�>ú0=zÔE¿±cÆ…I& ò.ºD@D@D@D@D@D@D ¾¨w‚ÂQ-?úá�\0!ÂáæÍ7ßð-NO=ù”‹4†Ë‚Ñœ9eÔÜò}íŽ;Âu&¸ 00´7ƒ¼Bä "ñ5¹ˆ'æØç_þËKésÌ·€Mš4É£Ëų˶LÍ™3;¼úê+it*Ü}×ÝžWˆüCäàYo¢H·nÝÃ#�<êÏsø½ý~2L›öˆçÖ!’h÷®Ý¡��~†`BdÏyîùç<‡È"dî¾ûÞPXTèù‚YdÍ‹/½èy—úúÏï¸ãÎÐß„œ\®ý%EÄÖì¹³Ãûïÿ÷Û}ë[�»ÈÒÝÊŽHÅ–±ÕÆwݺu1î�¾éQ;¼'\6|Ƙ(êð…þdÉ®› vk¸áú<"¬Ys¢�6:×wß{Ç·¯¥£I¡°°È¦­öþ/¸ˆE] 0 Üñµ;=≱uÅõ�üÃÅ-ž3vìØðõ{¿î[Ôrá£ïˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆÀµH Þ F -›7ov�Áˆ­\lI‹[ÖØÊµÙòÚ�øúÙg&ØÏ¹J F]ºtßÿÞÂõ'YP+?­Œ}WÜ !‚’W#¤pZGÚ?üð£�ín½zöò|;ˆ)F¿ûýo-�õÞ0ùÆ›\0"·¹}ˆvA´xÔ#¥çžû�oa{Á¨}ÏuDtOûáãÛBuØNXûÝï~ëQ?×]w�—‘ª‡m»pþ‚GÞLŸþªE­±(§žOèÁ C-"(—‹ç³½‹÷ørƶ ­³qû?a’ 8$ GDƒÅ±cü:æ[æzØÖ1þ=>lIcë[ý^³È­s–èúÛÊGP¿¢~Î~»‰m”çõ7^·çœ÷F×_?É·Âô·Æ‡­llìܹ“ Iä‚¢þH4ŽP‡hHBrÚÇ#Óv1>úŽˆ€ˆ€ˆ€ˆ€ˆ€ˆ€\‹ê�`„¸±Å¶,QóÌ3&Y×–-[ÂçŸf9Žæ…U–0ºÐ¢o~òo?õíUü¼´`Ä6´ÿüùºP�HTú"7yvf›pñÞ{ï†f¶í»ßy£Î�;_Sˆ°ùå¯þËN_+l#ŸyvˆÜAÜ`«Ø#?æ‘E¿·#D¦‡MÀ@0b;‚ [©ôàJ/ÿßÿóßaŸ P·ÙV4„ÏÅdÂɰßx}ºÿÎ÷`¸?¿çrQnò:IERqÊÿïÿþsŒθx¿¸È7DÂn¢„v²á3lè0ÜŠí¹o¼ùº t�>ò˜¿'9’Ï`Â}_�þŠçI"Âèúë¯wÁˆh¨_ýæWa´ÔóW‘Œ›ÜH>ÎÅ©m\ˆG­mÛßð#Â×ï!Âh ÿ\ÿ�ú@@‚Ñ%ÁhóæMá“O?±DÑó}ëT‘%eþ1F¶åŒ+­`ôÿŸ @éÊanˆdB0zû�¿y’êÇÿŽžcÛ9Ñ aˆŸÿú׿ ;Mä¸ñÆ]p!÷Ѿ}û²ŒÚ¶¸{MØ8tø`øÍo~vïÙn¾éRˆ’êÑ£‡sÅŠ–3èß&ÖÄŽŸç4¸ivªÛPbr¹8­lÁÂù.͘ù¥çúéOæïÙØss‘øúìÙ3ᔉ1 íÄ6Þ�cìéæXV6|†³£ž½¼>¦¿þšŸþ6Í4„1¶à±½0�`D”IÊ×Ú¶¸ß˜`´Ê¶É!nñol)ì`¢ Ì)g‹Í�[OË5"ÄSÝüCúŸˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ÔqõN0bËG©÷µDÉO?õtc9jˆÚdyo>´dÇË—/÷ÜCäúÞÓßóä×´�Ò‚Q‹0ú�r£˜ z®E!l�¬úž»îñˆ%NC49j'³Í›7/¼øò‹¾e‹cÜ18!&›£Av <9ŒØúõ{ÛºF®ž¡C†…qãÆÙV·É.²œ3!„÷›þÆtÛ¶ÅD�®ž£‰­lN¹\D2µDDÏG} ì´1’ZOœ8ÑNkç §²ùDä‘<úôcê9ö~îܹYñ5r´Ÿ`†÷×WþŽ—”¸±ýŽåD/mÛ¶-Ì·¨§wÿþ®×m2‡uÿüóð(²6mÛ„¢Â~¾íŒè$¾‹ˆ‡˜EÐ'à †EbqÄ$¶ª:tÈ£¦ø>ùªÞªt‰€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ@]!Pï#¶œ­]·Ö"aºz2i"lØ:Å)^·cÚÙ®ÖÚN,3fÌU‘7Ù FD !ñ<’,ïܱӢx†š@3Úe“ßg“�̶hñ¢ð™m…ki'RÁˆ2ð³l#®ûï{ œ±H„”U+Wº‚tç�wùIn”gùŠåá]Û"‡°4΢«®›0Ñ£�r=ŒûìØ±Ã#„(•)·ÝîBy Îœ9ë ¦7mÚhÇÜïör|ó›ù–@tÏ›??+>l!ìб£'ÚþÓŸÿèBbÙÈQ£ü]š5kæù™–,YÒ�’FôÑ›o½wò=‘˜û6+/§Ýµ2�èĉãa³E>!®uµÔÈ7EÛÓÎØIuÛí´» zî$"�8…1‰çê�ºB Þ FäÛ!ás«Vá–[nõH#rì›è1Ï~FòäŒ?Þ¶tÝ8²�+[ÁÈ·6ÙIi+W®{ûoþL¶9±µ‰mUM›61ahkرsGØ»gOèeKß´ÓÃ:Xn"¢€8U,;Áhˆ�>ö@hÖ´Yøô³O,©ó’°Ý"mˆèAêd"KÉñ’°½¸8¬0ѨeËv¦øÏ•:tè�S›Nåü9âÏ{ÛÞA¥K×.—„–B?-nõêÕžÄû¼%¨F4{xÚ£aÈ�!þ3òEeÃgÔÈQVw­ÂzøÞ´F+W­òrç…EníÚµÓ#ÆV{Þ+atƒŸŒWbI_ÍþÊ#ÚA#‹ a÷Dje¬Ø6·Óê¤iÓ¦aðà!ž�|UzD­²çýïûÿkâÑo?Ô%ÏŽ9�r‚¨/‰€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ@-#Pï#"~ÖY„yjˆªinɨKJŽ{Ri¢aˆ&™:eªG!µmÛÖ«,[ÁŠ_l»Zºl™'Y^j‰–÷[n¢&&‘TÑ¡µE§ô+* #M´ I›Ùƶlù²œ£nÃécËW, _}5ËNÛîå¿xÑ’NÛ)iML!"fˆ‰!Fˆ"DÏä!…±m¶ŽÞË­ÜlûbûYÓ&M96.œ3ᬓmíBì5jt3zŒEïtõ-^DeçoŸ>9µk÷nË7µÀ…Ÿ¥&ŽßĪ-[6»˜�@�HCRåQ¶�jˆ  �ˆ„è¹;‹=óm&ìðïl™C¨¸ÕN?CäA9`ù�¸-&Ožì[¬R ¥7{~ uö™ýû÷ùéjˆí-⦨°È…�±–¿©»m�ãÝO�:å¢ BÏ +óyÒ]äùinånÓ¦­ç÷!—'ù¶w[³f�oAãô4¢uˆàieeå™$ç´±.�¯Däd˧}ûöþ<ÊÉV¸5kW×ù9µÍ#– ,rªG÷ž&TK$¾Ó"¶Ú—›-ªk˜Ÿ8G}òØ"­-^è[Ûø3÷CTc« °ÙNÇv=„#6®£¶ýn�ÕýÇ–ý¬ÝƒDÚJœd‡P¥KD@D@D@D@D@D@ê �z'-X´ÀO/ëj‚Ïý÷?`[Žú{Þ"{ØVD¢æN�:ù–µF�_NfŒPC2j„„D“^—ò×”×8!ŒïñrðàAÏDD ÑGFlƒj×®� @müùDìð>Ò>×´YSXøw¢„HÄܸIãPr¬ÄÄ�Óþx¶buêØÉ#¦bâæƒØ½Ž†ã–—ç¼•£b�ET±¥«­‰ düÁˆ­q/bäP:bÇÞ§»`DtаaÃÃ-7Û–>‹Èââ4ÄŸ£–'é°}—dÔ§NŸò{“šH*¶ÛñlÞá‰+[>lã:k‚|È¡„hVbÏ&ï÷E¼! õ)û9UÔ'ïÛ¼y �‚%ß%y5õyܶꑔü¢ý;ŒØ~ËËûuŸÉç÷Ø &.±Í1‰ûÆ÷ñê" " " " " " "p�¨w‚ÑÂE ]éoBÑ3?|ÆO Cìàb+Q8Uy!æáÂ…ÁólªêBA\A âYñy¥ŸY\¼=̶“ÎÈŸ´yó&?Õ,]™H ÝÍE�92Ü>eªGà”þÏâ=sáš-žÅ/ÞóÂ…óV”.ÞdzjÙ•ïòý ^ˆ?å}Ÿïp•fèÿ¨ÿ‰€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ@ P¿£g~Æ�çBu‰HPÕ"@(ªóy<“_¼[üUºí9SlÛÈØzwèð!‹Î9Uú#þw"|ˆ"B«°°È££Ò}0×÷Ìå{|‡+þ^Ö;¦+gü^ü.ÏöûeÝWÿ." " " " " " ×*�z#m³ÃfÍšéyˆ8­�åüyì±Çüd­kµò*³ÜD!�8qÂsE¤Oº«a£†ÁÓ¶a±]+nK÷Yý›ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆÀµI ÞFû÷ï·„Ì«ýØ÷–Û§S§Îaò�“-Ytïk³æ*¹ÔlÇB$âNFÜ$åÑ7 X2ëFYmýJÞC¨Ýê�`DBf’sš.°\<œ€OݪÝÕ¤Ò‰€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ@õ¨7‚Q<�+µÝÊN ³д¥ªúšž$" " " " " " "pí¨7‚ѵS%*©ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€Ô, F5Ë_O�ZG@‚Q­«HD@D@D@D@D@D@D@j–€£šå¯§‹€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ@­# Á¨ÖU‰ $" " " " " " " 5K@‚QÍò×ÓE@D@D@D@D@D@D@D Ö�`TëªD�š% Á¨fùëé" " " " " " " "PëH0ªuU¢‰€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ@Í�`T³üõt¨u$Õº*Q�D@D@D@D@D@D@D@D f H0ªYþzºˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€Ô:Œj]•¨@" " " " " " " "P³$Õ,=]D@D@D@D@D@D@D@j Fµ®JT ¨YŒj–¿ž." " " " " " " µŽ€£ZW%*�ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€Ô, F5Ë_O�ZG@‚Q­«HD@D@D@D@D@D@D@j–€£šå¯§‹€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ@­# Á¨ÖU‰ $" " " " " " " 5K@‚QÍò×ÓE@D@D@D@D@D@D@D Ö�`TëªD�š% Á¨fùëé" " " " " " " "PëH0ªuU¢‰€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ@Í�`T³üõt¨u$Õº*Q�D@D@D@D@D@D@D@D f H0ªYþzºˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€Ô:Œj]•¨@" " " " " " " "P³$Õ,=]D@D@D@D@D@D@D@j Fµ®JT ¨YŒj–¿ž." " " " " " " µŽ€£ZW%*�ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€Ô, F5Ë_O�ZG@‚Q­«HD@D@D@D@D@D@D@j–€£šå¯§‹€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ@­# Á¨ÖU‰ $" " " " " " " 5K@‚QÍò×ÓE@D@D@D@D@D@D@D Ö�`TëªD�š% Á¨fùëé" " " " " " " "PëH0ªuU¢‰€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ@Í�`T³üõt¨u$Õº*Q�D@D@D@D@D@D@D@D f H0ªYþzºˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€Ô:Œj]•¨@" " " " " " " "P³$Õ,=]D@D@D@D@D@D@D@j Fµ®JT ¨YŒj–¿ž." " " " " " " µŽ€£ZW%*�ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€Ô, F5Ë_O�ZG@‚Q­«’ú] ‹/† .„ÓgN‡ã%%áÜùó¡i“¦¡Y³f¡yóæ¡qãÆ×$ 3g΄{~oÐ „¦M›…‚‚û½é5ù>5]h8;v,œ8y"œ>}:43Ž;v -Z´0¾X×UÎ[?:{ö¬³:uê”ÿ Vô«&Mš„† ^õùªú }ûܹsÞÇ©'žÛ¨Q£j{~U½W}½/öš¶uâĉpààÿs«‚V¡eË–Þi[ÕqU4nÐÆjC9óeAßÁÞ�8q<=z44°þÓ¾]{K««çûUõ}JŽ…“ÖO'Æ×Ž;†–-Zf5.h¼®ªªšûVÔÿ+ò+«ÝTÍÛé®Ù8yòd8xð ÙÊS¡‘ÙE|�¶mÚº¿“ͽb»8{æ¬ÛìIMøíØ}Þ Û�G{nÕª•¿~”|ÞljUŸÍ•€£\Éé{UB Nl÷íß6nØ`‚ÀÉо}ûЩS§Ð½[w7’Uòà*¾)ƒ×†�ëჇÌÉo:tèú÷ëïïVÅ�®“·?pà@X¿~]ض}{Ø·ooèhö- ­[·®÷ ˆ–ëׯÛ·o {÷îµq¶ƒ� }z÷Éj\Ðx�oK­ÞïWÔÿ™\—wUV»)ïúYõرcG˜;nØg6�_gøðá¡Kç.Y"¶‹C‡™HÓÈýö~EýªÝogqtçÎ�a¿Í‹Ž9âï4pà ÷ß´P�U•êÃy¨7‚+ ˆ¬Êá8²²Žñˆ“%V “Ÿ9|ø°¾ÄV¬˜Ü \ðùšP˜“e«Ë>{î¬+é7n ³fÎô:èÕ»WègâÊСCCçN�¯É×ߺmk˜1c†;²´µ>}ú†É7Nv�£2^(5/¹4oXç'âÅÅÅaîÜ9aÕê•Æt{èÑ£gxèÁ‡Â°aÃ=b¥¦£èÀ²"Ä/ÊÃ*+T51À§Ž�~µrÕÊаAÃ0rä(ŸÜwíÚµB!–\~a±¡G�½1GûÅ.ö2§¬´@Àj¶—ç>|(6gçèÑ#i‡MmÞ¼™MtÛ„vmÛùäŽI/¶¹´=®Œ>¢{T>_�µº]¾|yxïïzÛ;fl9b¤ÛëNÕd¯+7X]¦ Öt9˪ú6žô— ΛˆÚÔíý!FH²>´yóf�Ùs¾òÈÊ;ï¸Ëû2‹*ˆ¯õù*ÞÁ¸07¬2·ÍD£=z„‡¾ye\È4«ªÇëú\GUñîõÿŠüÆÊj7Uñnºgv°¥k×® ï¼÷NغekhÛ¶mK˜<í|áÂáõ7ßpQpÂø aüøñaÜØñ¡{÷îÕò*�ˆ)µ¡œeÁÀaGXfE{›Ekñg¨ˆDíܹ³Û ¾Ë¢×êÕ«�÷Œ™_š¸Ú<Ü÷�ûŒ÷„У{�2*ëõáßÓ>ýì“°xÉb�Âba†q±>Óq¡ªÇëúPÕùŽõ"�Ë»*«Ý”÷ ý¬ê Ä…­eË–†¿¾òW÷yÚ™<ÊǾavrРÁ^ˆÔÚNóÏö‡’ã%¾`6 ÿ÷Ï•£h´bÅòðŠùí«ÍoG¸a !,L2´ê_&ñ„«/M¸Â‡Ú°qƒù’=Ãã�Ûý7"™SäseÊ#Ÿgè»×>�z#ÅaΜÙa©“V­Z‡»î¼+LštƒOrpʸâÄhݺuáÃ�> ÌÞ²e‹;m÷Þso˜xÝõ6Á’`TUMÿ”í9f’I=ýñO´0ÌfìG{=M�:Õ'–Uõ쪼ï¢E ÃsÏÿÁEH�q&€=õÔÓaÌè1•òX¶„°¯Í[¸€rÝu}[H¥< –ÝÄCŽm ̺uk"Ûï¾û_I‚o¦+ÉUõZG,Š¡a Á™2уí`µ³º#X¡ZiBÏlëWÿüø#�˜üú½÷z¿lNBVº+FJU´gÏî°iÓ¦°Üœ(£õÖ» †Í¼~âõáç?ÿÏ0éúI~›-±½x{X¸`AX¶|™}g� šD5²è"¾‡p„¸Ö¥K—pÝ„ë\5jtèÖ­Ûe§-]¹ôoµƒu‡½¦n™¨ãx2Äj"B«+¨¢q1¥6”³¬Z‹‘Zø)óçÏ Ç,ª™mTØ‹�ºpÄw½6™MYc¢b9+â7M¾) 1ÖDL#F×ç‹qa¾mEYkãÂ.[ôÃŽÜø0hHV U=^×ç:ªŠw¯¨ÿ³ QÞUYí¦¼gègUO FëmqìƒÞ[m1‘íˆØÐ[n¾ÕýbJ�ψO‚½Ýo"<ó?~޽MF€/Äoî÷>gD0b!äÉï>F�]õ/“x‹s~ø~˜=w¶/ „?û£gÝ+hYà¶-ññ¬ÿ˜)�¬o¬/Ô)õF0ÂÑÚ¸ic˜cÛXÞ³PÅýû˜18\?iR¸×Šú%:n‹l%~úô×<"„U)ö¿>òð£>ÁDZZ¥«ò ä;ðW~‰*çŽUí€.[¶,¼ü——‹ähcÛzÙxàP†TÎ Ô²»Ä¤†ÇlkÔI›´¶°%ÝL4bK«Cq…¨¦ŠMž‘•+W†%¶ÒMn†§Nýš¯t÷éÓÇ䫳l¹ F)Aà°¯ÔÍ´-¢LÄÈÃE>$&µlŸAôAìI F©È“ƒ6©]Þûû{a‹9ff7Ù"Âê\ûví,ŠâLpAiáB�¬`;O�L{ÔVòF¸èWÓõX�ut->+ ŠE8�çlK1}�_DŽádWÇUѸÑ×lÚiM—³,ô¢±ï¼û¶'le{-ý1¶§m÷äÂ?!�.[<Æåà ë¸u­¬çÔõ/=.�»ŠÅlK2r "U=^Wô|ý<;õÿŠ£Êj7Ù•ZŸ® ˆF¤Ùµk—û'äykmˆBq¡Ñý“O>öHD�P·ñá»ß±HD[Èeq/F"ÖÁ(SUQ_ºçµC ÞF„x“wcÑ¢E¾ÕiõKia|äZxøáG\bug ÕaéÝwßñ“¨Ó×O4aÉVäš°„AŠ©ûüi›°rš—ýÀ3ò³Í¢ÀNŠa; Æ'N|Ü1´°sžC:á„]»tý—•AOniÛ±HúÜØ¾ÏýØ:Gâ5~VRrÜ�_îËsH¤\RRNÙçϘc\`[ìÈë‚£TÞÅ»°ÒŸóûœJmIàD3&€Mš4íìÔ–`U9L®’Óöþ�m²X:YÂÚy·Zy[ƒ Ï¢R^¾·sV^ꀶʉcLî9}‡6Ù~ËjK¹rõ~i“ÊA™ÎØiç-(l¥îÈ?GÊ#‡`ŒìmÞþL»b5™w§OÄv}ÒÚ'‘Ç­¿x½œ?g?‡§µ‹Äjeí’þÃÖŽØG“ïÈw˜œÑç¸×Y›°Ñ×ù,[ÿ¼|Vp¢ŽèÓäèÙb{ç/Yä[ÀŸi7Û ¡Ñ}M0B8I90©ˆ€TŸ8éÏqö\þ�óÞˆ"hÙ²…OÀyu‹äÅsáGû9vÌXZYÏÙ÷ÉÔÂÚ vd‡å÷X²d‰EýÓ¿ŸI„Q*Ty‡¯°}üñÇa‡E°Qç�#íŽI+lÆ�•`3Vm,œÞ}ïÝpØêjÄÈ‘eƒNfËè÷Dˆ}øÑ‡Þ/¨OÚí3?|Æ#9©ÓŠ&ÀùÖ3¬:`‡cɉŒÔïÇ»_4ÈñÔ/ÊsÆúäÁ­ œ³/pŽÔïs¾ß©SG·»Ô}4Ö cE´ÏŒMì9Ü“BÚQlCÔk¶ý‰ïÓ¯±‡Ô ÏB\¸p©­ònÍ­�Ó?Úµc\J�&˜®Í'ÛUEŽQbôÃýû÷{ûçübì±nâí#ÚÛ†6NµµþB?ÆV¦ú<'GZŽ/+ïÁ÷èïÔ}ìïñ9¹Ž$…¦žÊ*ç•ñ!•së¸õ#Ú5ýŸ>O;h¸‚ÍhmïwÉžÒçãåã€EȺ½0{CY©ƒóÖx?¶ PÇm�?uN?N�'=ý–-]dÑxØJ2ýeðàÁ¾‚¾Õß¶KtêÜÉ…gNþ9nãÏ�‰�áÍýhŸô£87mšÚžÌóiØÚã,eÀþmM;ä3ü⪈w ;u¬M›Öö¹‹þ<ú ï–ª÷²…ÂÒíºa#+¿mŸæ{Ôϧ§êiŸ�–zÆÇò8QN®SÖ×Üþ_jçü;~vÑÇa|¡2Æ…óTŽÊ\Çë|í|s鯲WùÖŸðh´Yì‹ûAÆžœG=Q7Ø£8n`«’í¤"¿�þH™ù^.ã)¼òñ;*j�™ú�ÞxÒü�¶B~°;Óµ›\ë‹GÅöÆ"KôW°Eü;õF=a÷𛩧h÷ø9Ÿg|Bóy…õü²Ø(c¿÷Û^uîì9¿ý;J�sñO5òégŸú<?¥W¯^áái�¸`ÔÆ:àñ É÷˜Œ0=j´Ïôïïóì>:ïKÝ!LÅyŸ¿H†ÿcž„¿Á8‰çc·Ý“zÜmm`Ö¬‹-É¥#Œx~.ý‹6‘ ꆴÇlƹhw2Ä¡�ÕRõF0Šy<>üðïx[m«[!ØÛÊöš>t8|ñÅç.‘ï£eAË@RI¶Z –ÊwDgF½^¾|™‡‡cøp<èH5]Ìq!/bC¹h@SÉõæø÷˜ÄöìÙË"þu«ÕæÍ¦€úIØaÉÖ(÷›tý f0 \Ð"_ "‘ç4¶ ð† <“>Ža_s�¸¿âŒ †— ü¹¼ ØZ„ÀÆ�|ÂÐÖ íSéqü}0æÒ~ýú‡É“'»S‡pWlÛuV®\¶ØÞ\&Ô ¼pŽ)ÏkÓ_1Gz_ZÁÈxsŒ‹‹·‡Õ¶=†-Y¾³6xb´©W& …EE¾��|\°A¬,~qÀ¦=ð¾ì/&ÿ“D»Ñ¶í 'ö 7Ø6¼Ò‚†ûСƒa‹µIBeyò1ég°d"È€=–mMÔÜ?·öºÀ&Dq�Ô¤µ“1ïçFˆF0åÔ"êv´Ã¥K—ø#òb0ð^´:hn6kÇÙD…m™8¹p¥¿xN;퇭Nˆ8±8#ô™ÎV‡ý¬þFŽåeÇ™ˆ4x#Äp’Ñ<ÝM,ºãŽ»ŒÏo{Ô ý”öI¢ÛM]¸Çê… 5Î%í´›ñä=é?]»¦¶@Å m…òÑ·I Ê ÷:tð`êÖïhS…}‹¼>À©#"žh×lÛJµ{®måB¸!�B{fgÛ:‚0rë-„Hò(|ÙÂF ¬¼õ�Xˆ£Äw‰#:)Ý–6œ N?ãûëÖ­óþÿ5mfmжã0©hb“GÚ+k0ÈD0"G[ÏVY-]ºÔ\&°´½/g~鹉¨3©d„ÿÆ{¬X±ÂO+Á1&É;9»º[y ¼ÏóìÜüóýÔ;·'ŸxÊm|£é�Òüû•O=ó|4œÆ6&¬â´w4Ç•v‚˜Å„˜Ü½­tëÖÕ&‡=Ù:ý…þEùØ~¸_êô9¾Ï{2Ù§ÞΚ��‚ûå6dl¬q¹½#*®¨°ÈÛãmˆ+Ûþ„}¥Läˆ"ÿÏ"‹Œ=Dû�Üœw!œž:àß©—|®(øb‡¾šý•O(ŠŒ Ïá—F&$í-¢ ÏG,ã;p§�QÊ„½bÛ‡RžT$¯?'�qƒœ8¸e•“ºâb’B¾Ã­Ö�(7 ØnÚAkŠ(#ïEÄ}’‰¶›CÎ=ú íŠD©ÍcoYôaBEÿe}…:ç™$·¦¯c»çÍ›çýeÓæ�þì0¢2¶‰ç›o¾Å]öîÛãíiíš5>ÆŒ·è¾Tþ�Žn3’ã1“Ëë®»Îr¨5 KÈ!feb’ÃĪoa¡ŸÔ9hÐ`/±­±=Äz¥í¦§é§D bˆÆaÁ†±û[ÞVDo×&ŒmÜ�ò_°óø^ØaÞ—v@;¦žfÌœáþC—.�}übõŸh!.lÏÝhãí[þµÛï°ñ­… õKüû䎃Ý_»ÓËÅ»QOçÎ�sæùŒ×ùÚ¸åÒ_YŒHö'xa{á¸Ù|¶¤ã3]¼x!´7;F�PO´;ÚBW¶~ý';ûÿ³w~VUWÿø�bl€AP�нcIìF�Ñ'‰IŒÉ“ò´ïï/ù½žozL11ÑØ¢ÆD�±`‹ 6DP±Áˆ¬€~×{]^ç™îÜ;cäa_ÃŒ3÷œ³÷Úk¯õYŸµöÞdÞ îètþ¯­Âèå˜çð> Ý›Þh;ãEÖt…á?øðå´EžiÜì7i)”}¶Œ×\dO´çæ›oJ ·y`LøyÏýÇ?îΟٖ]wÛ5WPŒÝXjÎöu‚/êÓÂæÇ{èñ‘ÄœB°°l”8e‡˜sˆ�¾.sÞ»åÖ›S_ÙPãs@l÷£º�=kægØG~õ�C‰~í–ïó ¶Ž¿÷¾{o³Ëp®g!ÿà8W[üî ˆá�åìŠÂ6×|!?mà³'NØ5û¢0Àîo&Œ&Å;Ž9æØLÙç̸JЋ9Œ�¿³ï|í@.{¦îã@IDAT)=õÔS¹ Và7`ˆ}†KÉ^Ì×aäïíÌ/ýˆ<ÄUíø9qG¹Ö} ¬7„Q=TÀÇpïý÷Æ©Uw¤1?0J¾§ï·V Ò®½öšÌ¨Š‚‚/�ù¥\»Êø2òÈŒ§ÂØÔû-{YõÁê*Á=¥^`µGìç°SS`ѤFX]wÁºàƒ‘ qúÍcyñï—F„1²O;õô4œ…‡ÃàÝ{`Ö À° íòåË’ÜúÖù¤j~nóÏŒ.GÒI,óCÀ‘)€¬ïû€•uh/{kYF–˜ØcF6ibógÕN2‘EŽa4aÁÙ $±íÍ{!�8` Èøz2 í˯¼”U9ŒY¼€E›èNŸ¾’�2ªK#à,ù‘%�TÐûÃßׂ£'Ã#(¬ÛÓã½ Aœê…LÒ>ºa#ã®Í‹#ÐÌ熚r£§@%çBÚÔÎCàÀú'¢Ž.=IˆDpbìiÁ‰€|j�F@ ÐLæO„üéœS�å'Wžç"Bìï5-@@M†dCúø'üôˆM‡úC.€’Áx«à}DéNãwŽ�¬÷É�Ï‘+tÄ<8þþ÷›’4$*çó[¹„Cé”`ô©§ŸLBSèwdмQ­eéž@¬Š°P×l@ìþXR6/Ú'0Y$¯,ùñŸqpöŠåÀÒä˜Ë*¤zøÁÔmËŸ�à¡ M2h¾Fæ¬Íj½ÿ½÷ÞË¥Y–£<d2µ4õ)‘Á~€˜Éת©€JsXŸÌa{šÈˆ!ŒÌ¿W]D€`¢�n¶B“ ž �y!ßAfûï¿ÌÏ7«+¯º"õ®Aêîõ ˆ]l*÷Èh‡€Ou²ˆ�tw{ÅÝ{ï½¹/yžwÞד0jÎ8ö¦vúìu2Îd~Ñï.Êw«|1ÇŒ�MTF»7 Âmï ,w Ùk›@‹ýÖg¿9rDÚPñ� >ñ 'feˆJvlvØ9@�.t�N·”¬˜gú8>N\a§ÈG€g¼j§ØE¶øñ°!>4+€î‹ 8Ù–PÕ”·dvè!‡&ùˆ¸4�\ì�¤òöÚk¯Î9ÌWé‹eŠªK›í­@v¿°}Þ+€ø#|2cÆŒNÀžó=ìƒ>±ãÆÙ;:ñ‚˜þÚIì 6© Þé¯q0?ÉÑ|c#ØšÉѾ}÷Ý7ìÓN9Žæš¹¢�– Ú·léë�Jb3Þ‚{óvZÔ{í_¡WtÀ{ ÛyGœ¢É/Ò­•+£J8d„4SÑ'x9åäS’@Z„K±q˜yõ…Ð7 úI–Íþ˜ü=ô°|ߢt‘LïØaKÞ=t_¥%yw‡�x&ú =]KGU-Ù¼Mbg⮨!º®È`ã~HèW_› ×�}¹+729î¸ãó>„)BQÿá‰?_wmÎm2óÜ“£ÿ2÷—¿^Äü£‰1ø¹sÏý—LØÝl©IÜÏöðyßüÆùyÿ°h»1îÄ_Ûsp0ì]ig¾òaÍóéCó)d# ã7^‰ä„àQíwˆW»ø’¤�Ì$‡ÖqÛ^Õ‰'ž˜$@'v–¯owÀ¾ƒ1ÿá¥þ.ò€'úÒ›« Ô¾òßæ{‚Ð�[T‚©(aSüÝ·ãø°‹ûå8Á"xL{.úío’¤Ù9懱>>æËĘ{.ú¼téÒüÜŸ®þS↽ö˜/ö[…:ÁÚðN$?IdÕœ«ÚEbÌߨ56Á¡æ =Û7ð½cûážž—ñ´™ôe±åÇ“O=‘•¯ðé_<#íªÏõ*�;ìãvÑ{ÈêLí¢�äsCìU¤êòÐÃKù°i/úÝÅ¿M¹³kpö©§ž– ¸ëoøkb ˜�?v/;ŒŒI6c¯©{%Á$€0²‰¾*< Ï2f°>ÜëÀ‚H3ÕÓG=#ñ¤xƒÏèï‚%ÅÏ>K¾÷d²A-÷7Oµîµ¥ü Ð!ãß¼‡?ÜÎüb "þ¯?džÓu_åZw%°ÞF&'@òÀ¬û«+b � €±›¼ÇžÕá‡ë» T+Ù= ðÔSNK`ÅH˜”3gÎLP‰Ý^@‰Q¶ä*¦CN~N{£0–2x²i$`³Xï�U9ª¦D ùÝï|7I�f5ª×ÎyÚ~Ó§W_>ûœ$\dÖ€R]ÏÀú逢DèJÏ:ëKÿãÔ¢úŒ¶ÏËDwÒÀ°Th–í8v\ÊÃó•DkŸ¬ãa‡žÕ#7Üx}/{LsŽK¡8Ÿ�â> ™aYR3a 3ŽŽÂwcÊ`Ë2*ádÀ} &PNƒ„¤ïÆø†üj9"ÉÆ ÉÇ 2õG¿T!�´çÕW^Í@T ˜B©n¶e+®‡¯2E@iyçÄáÈ*’2Ó~„ð¬�3gÞúô@:G�«{,ÿNšÔXÖ - èî^’H ˦Ț£S,H±NÖ�®sJNÝá„ÆÄ|Sù³Ùæ›'¢IŽ\ÖæøãŽË ]Û ÷.Œ9¼Ûn»W?øþ2[Í)Ñ�™·ß–Ž^F ± ”zùÖ2ý|9ƒ2. fLü.™#d‚ÀæÁ-Kc\·ˆ¶¹@(¨¢¿‚:@¡Ëfh›@‹>°È4zMwU‰ÉNÙsjuÔQGE:fM¶[¥Ësb6ÙtÓ|笭œ:`È~ „Ä´$¡Íc`–,ÿú׿¤-°a¹­¶(W®\•Ä£à‚9*[Z!Œ€MºgÎY†¸ŒµMôq~œriÊŸ=R›+ŒÈE›Ýg~jûÖÛl�] $µ©|eœ®ežtú‚ ¾�A¬lx_€Ë½¾Œm'ãŒ4ýÙÏ~’zb¹àÈ–˜Ãæ.¢aÏ„3C?jt�_ rI³÷äŽ1R±å^vþÈ tOóž.ÜrËßÓÎbnØiËñ9%Ð'dx…3f„�Šy-Ø&³�Ì'sÂø#;è‹ÀßœpA ÝÒFïØo¿éP° �\µ?½ÿ�ûòHÁ‹�A+ˆíjî‡ vMå Ýt¶¹O/é Òà÷ ĸ9CŽ‚Nü†åJô´¯v"VU—³3óͦHb°Õ£bÜEFAm¤wwÝ5+�Ù:BÈ×ö,ú™{ …m Oîà˜OÃã™Æ€FŠyî¼>´í±¨È[°àÙü2Ñö|�Ø‘G•íA> ¤îºû®Ô¿ÓÃî8a±/!Ñì�-UGp‘7»ˆp�\ñÝ%±EÎ쟀O€bî ùWö™mGâ�=*3éì“gÑ[¶‡�6Ø@ãήÑçÞ.ŸGðß$ÓŸÿ|M&RŽ>êèhÿAé é‹` e¼á-cã¹_"™ßs9¸äâ%Y`„Ïí½OuöÙ_Nÿÿ—˜’i‚\DØ÷¿ÿoqÿ�iƒØ¾Nüµ`q0ìŽ`³�ù*ožOæŽ`L…ƒ1¡§ÚGß^‹¹èboÈ á8%ôˆ à—šõ¤/܆d¢}øQGv¶®ä(îèêš0(óm„Qƒ€¤7�'zщ£vÆËü{ðÁY9fN¸2ÿ’Ã6–óðA$Å!âùh~ñ‹? ÿäýæ1=n&NsœÃ¶‹þøÇKÓÎ›Ëæ“JWÕKæ/,Ò¾°ôH, Ýø„�fÙ¦Qa+$È’„l*àDã3¾xfൽÓVÕ‰¡TĦÒïÿéʬz”PC6Ÿ~#ÁM�á™K/ýCÚ Ø++ƒ(;(ìÀäÉ�}9‘pÆ ÑÇnX)¢ß™< yýüŸ'¾ÐVIã³Ï:;·Z¸3ˆysˆ�c�3’i’÷ªcùœžF²ü¼eè;ŒÝ!?Ó-ü-9Þnã ‡ÂËü«xCewW]IŒ�ºí¶ÛÒö{ÏæQ)Ɉ‰ìѩ®^¶&ñ“4Flªñèü‚["}iÇωs`¹ÞÄþäSþöÙ’ÀzG1‘ÌÔ•W^™ˆaT œ"b”Š+•œ3¼,Æ™á½êê«r™‹IÌ3Žõ’`ý±ÇÍLŸ iê”8>=€!€(Ø´ÌáÒ0ì ‘ 2‘~ðƒOGЬª~ú³ç{¶Ã,˜uŒ¢å‚y¥„Ý‚.H+¬þ¨øY&™sÉL_¿Þ.2ŒþÈÌ :œj¶0ÆNæR`¬M–ÏhŸÿh-z¡úcS9'2YÀç8 �â i!ÐFÄ5Fª%8-ò¹æš?%»ãبŒ|��ЕŒ8° PûS †ü€2}Uzu´Ã3eË™œ½#Ô· gÁÈ#• œrH'«‹0²\L@GW_sud槞ȨLìjTYfölô‡“ìè ÝtªÇ4ÏŠ÷ßqç)7d“l�É`7ÐíTªîÝpÃõYÉ„lB‚pòôŸîk+2uñâ%Ü"Œ¾öµó2«b||õv¯Våji¥¬Î�–††#^Á™ŠŸ}÷‰ ‹Õ(–†Î™ûX.SCòíDÉÙ±×@… !•€ôé‰ûÏÿϬn#c€ãOº*+nÌe™Us�þ >Œy+3bXàeÙ—>Z† ’«%*›Q¢JÎÒ$àâí·—0/Û'H¶¤âœ³Ïͱ—}sÏìÙ�dÆÈ³�¸ª ”L›§È<¤bS>§Ü©°ò{ÀQÆ^yÖ‚è#�¿]�§ ŒÌ'ÂsAŽÝÕ6Ë5wÌ7D€6�12IED¡*ö ¤­Fµ½4æ>›æ.¹ä™uì�0Êõóପ¢è=ð7l؆9׿ò•¯dö0jBJ;Úg"ž-°üáÿ;u‘en²U‚ôí·ß.³™;…N ¤õßr#ö{^ô°aÛb?ª Åhúkü|va�K6ýžyûÌÌÈ"p$Æ�:¶af Ÿ‹ÏV,;F¨+›7çŒkKó©kBÞc?©_ÿú—ù>c4!~/ÐC€²ó‚zsB`"˜§‹ü=èäB”¨ŽT]I€Ù8 «?숴¿Íý�%å+‘bȵ‘aß=Ã|TÇÒ{ú}Ö™geÀŒ#n;ñ£þÚi¼¼™ÀŽª¦aÇ»b¼jR��C`ð-1•1†�e{Èl™ªBI!óz·ÝvOh™ÔÒØ(žüéDwwwÚ‘§Uaw=sçÎ <òHŽûòåËRF]1Žü-éÂïxÿÇ^Ø;äŒ8æù�ƒÉqå›ýñ†ËûwÞ%–Tno9×GI†;=ˆý>|DÞ{pþá*­à!¶ñ²Ëÿ˜cbž°›õR3ö‘Ý|>ì" …môå�°í3f›AqozÕp_K9_‡4оβäÄÌ$BÌKl–÷›ßùŽÄÚô¬о_D@ȶ ðö�qP±i?‘k¯½vµ_˜¿Æ/}Óî'Ÿ|²#�¸££íÚ�ú b;óÕÜnžO– àÍ™©=*—{²­HHÕ | "¡vÀþ& ɧ4ë }í ·YŠ61æ)½j×Î’;£Ü�<¶Ý�èdþ¯�0²<©?½iw¼T–ë÷}±¢Aò@µ 2_`Y®Š;óžýt•Xø‹§Ÿ‘äß«ª‡z:³ü¹yZãóËØò¿pÐÅø}&ÍúÎþÛ·®|�0Ïx¾Ê=~Û\£Ç0.?lláFí�|„O�Çýz Ѭ²î�yù‚ï}÷ûùlûÜYVý«ðgtÝ;Ä_Ȳü {A§Ø[òm¤òW¾òÕ¬LF²ó%?ùÉ�2�ÆGÃËç~ùÜ$Wav±lgL$SÄä…¸r¿D32]ßTÁ °<|�É×觤§þ„»ø0ñàŒ3Rþû|nß|_ov°þ¹éùúÎîw…Ïi$wLœ 1É?Hbª<ç/%PkÂHR^ìÕÎü2†tŸßjEªãÚñsì;¼$>*׺+�õŽ0ª} ÁPŠ,¸AŒåÒÈÚLˆI{Æg?(>ЂÀ@ô Œÿ]”O‹àÐ’Qv¯}XdÇRÖé«®9=CxZ–0˜„QØ6ÖÛ2Š–¿a�eFJƤ· Œþèo3ðLvØaiÐdRUÁ¶ ] ­¼ÁòrTw8äwè¡JØwNù5*UJƒÎèsÍ„‘ ½gö·G &Ksüñ_"AlìÑýEF¨ðp:æ RÊúÅÓ¿ÁþŸ\íʯ¤e~ó›_€œAâ&¹nü„NH‡*³ìùÀ9uÇ3Sæ*�P„Q @õûñ'ææ¦‹‚Sm6~ ,§Äé_~Åå°<Žz\’AôŠŒ�w„SÒdMf2³‡ù’™¶Š8Ç9±§�½ƒTÁÉÞîz)C)Cdé•%Bsæ<–AÎÔÈ0þku ¡¿¾'aÔ—\�Ï6Qi¸_ôÛ‹²ÏöÓ@ ÀvÛu÷ 2‘0>£ß÷�||1ú#�l•æöFYº�1.®~"͘}‚lB°Ï=¿0�†LÙ{ï7c<è P>;ýßD)8°d œ¨x '%�³G”}¸ˆÁ’V…ˆñDÚ º€ÜY³f¥�YsJZ<_ ™ |°Cý¬SÏ'À0n–« Ké™SÉ+úËa[Rd~�¹« î¾û®˜>LÐ$xËÒö­ÏÌŸWÝzë-I@+³6WZ!Œj{é=l  æê”0b{È»ãNDÙ; Ö4JºéµwÕïË—6ý³Æ~…n´3Î2ŽÆ•žäÚá]‚ü¾pB’²æ¡¹dþظؘKì·*Yâ©S§æéw2Jì®qEÐÈø¤:@zÊ)§$ñ*à]oŦÿìÆuùsB ‘Ÿ8-Æß{ëqˆûšON47�?ÿÅÏrþçžÐõb©‚’íµ‰2ý`lýA ¾ˆâN®�FïGÀ�¬Rñ n ªíC÷ç?_›K÷Èy|þ7ÏOÂÈ\gß:ñk#ŒB�ŠÅûBTðÛ2ý’A�,q�$1þ–¸"é+²ß<³¼ØØ ^ [¢T &ÃL‡Øú.x²-%_þò9A8˜•+W62õôÐ^wˆ5¶„ÍB¨Úé•ä�g ˆ[!Œø‘ã¢2SðÈX«"µLòêXBÈV þ`˜cÉb™ ²�`¦'ÆLÂeܸñGýj0ÈP~��6f­FÆš?óü ù‹|—ên ™yYûÛo¿=*bº¨¼(Á SBôa¿�5ò]Ńûá°”Qà4 ›è^{íÿ$Œø É•Y�øk²HÜÔ¦ÝÑV²bwÚ™¯ª�›í‚êcþIJhò‚\v9 '±Ó/ìÉ>B’ËÈG~±ÜÆþ7²ÙmÙÙ¯pǤ=öHÌv2ÿÛ%ŒRo“y;ã[\~Åey¿JóØÒIvÅfÌoÇæõ�*ÃÙ 1ˆÄ”yHöHþ©]ÂÈV�à‹U«>ŒúÝIh°96Ÿ‡OŒ+ÛͶ±Iˆ_„‘„-�ÉöEÀ=*$ï»ïžœ žõ­ó/H[*~±]ů~ua>ÈhþS¼`þw,;±aâ„ûÃ.}û‚來Ô6²7ÂH€=‘ø¹éæØÒ ì�Á¼ùêWÏ bÚr鯯Ùü¾ùƒ0Bø™H»Ó#ŽPiÈï¾~YÃÞ~A²R¢6 »Ã�ˆ6Kêõ}Á¸×„&[É~Ç©Ý{…~ÀKüR.÷y6ŽÿLÂ(úL’Ç´ƒëé!_æ¹­ÈîjÇÏI$HıCåZw%°ÞFõP)啱G)½h3kKÀ–€©J0!Uc`›1Áö°pÚˆ -ÃÐÕYÈ$öò91 €ÏÉ–`‰“0Pf†.žßÈ÷^QT÷»þ. ŒþôÖ«¨Ò_ûq $\ÝÝÝa”žÈL4y;ÍC6ÝçÀõž‚AùÉôr¢Í„‘M€-A‘ÑÀ·ÚjË\ Ä€:ª»ÞƒÁÚh§3W�£9?ö2Pi’ÏG,kW~Ãòå˲þòÂÜ|YôéÌÈø¸€›€ èµ>Y†l~èP3a$è éÉb Øœnƒ ‰Ægšãúã÷oK‚€÷¯DÅ‚Ä%Ðà }®QÂ`õÕ¯œ—ÀÄß�_ ¾öø�^sÂ'ýa€[Ž Ø”Ù@¶üà{?Èqâü„Þ®ž„Q_r5Ç8^òøùÏ#À�Š;àB°¨¼q½ñFl>ŽX@“Å"�Øh“ê¼Þ£=`ª$ÌSåÆ2nôبÐqqÎwa,xc€î pø¬w!‘ø3þÖÕ•ÂqrÌaúd\œ'rø£ ´Ë¦‰*ˆÈWypm6�À^æ�¾ª½\Þo¯2Ä2H€Ög%!Û®:Ê KYp– ¨Ò²¿1DL¨8Œ=&+3êù'È4îˆ-Ä„Ï!0”¿·Be#{ù‡žµSaÔ˜7Ë3ûm~#:6@ÙÒò7†úÑßÅ~™Kì@;ãL�€@ À!T†_ÿÚ7‚ Ý?¯ß¹Œ§,»ñd¿_À[Ïw%øÆÄÜ äM>¿ÿýÅik’ Ýûú×ã¹Ñ?KB|μW)qq|Ž!p½q 8j“ñêÏN™g2°æ¿š�EÒÓÅ£Bž»…®Ñ½hTê‘ óHù¶N®�FôÕfïôÑbyšËÆô—üñI$>�%ßý×ïe€eœõ¯¿ÑatØa‡'¡ö»8ÅÒx˜o–ŠÛ[pzÈ—ñ²$ñîÜ•KÁUJMèš�s•<µûÍ·Kë,gÛ2ª ÈQñÒ‹±IsØ�’p›m¶‰À댴gÈQŸpÑç?ñϯÒ@Û8v… r .-¦­F1_•yy“|£ì£ vÁ(1ïÌæÎ�“í°ÔÃ’Á#"ðqÿ'–ì¾úJúóáÖÛnI›Þ aTû!öU�@…-BÚÄϔèA :iT m®�‹D˜ SX@$4~{ños¹ö13ŽÍöyÿo؃òFûÅ8ò;M�øk˜¦»ƒ6ÿÙóvæ«à¼™0‚ø¶Fe×1I´Ó•G*��Ïßþþ·À+VãÕƒ/¾x£™0ê ·ujg•#óýíàK -ÙêtþwJ±ÅíŒ,b¯?c–8ãÆ}j’ÍÃGŒÈÍða"6"Ls&<Íd…¹Òatø‘1^ï_˜k°=b›`ÓÏÿùÄkìßa÷,»ƒ阃5ÄOì!»™–Bö¸$­Ø|Ͻ9–l[æo"†•,¾äÒ?dB� «qÌž‘X<#ð‘Ϩg aO‰žoëÛ·±!äÝa4mÚ^ÙqÁµ×±�‡ãѳûþ¿¥ÑççÖ[ƒÐ¿œkÑ>8Á­È1Ÿ~ü1–èÃg’HðÅñÇ!+§zt}Íÿ_þÀUôËóù=ýp aÄ^#¶þpÉï³ H²R?š #¾©�ùÅ®ó=ªM[‘Ç»±ŸU'~Žß+׺+�õ–0ªUW\yEž7ß|#ƒmA¼Ì "€eÃA .¿äüj87ïóÿô”Ó±�³•zÿý÷’0ý^ÈÍû—}€ž„Q_rµ�"‡Cn4>´ê ûL)=vi°jI‚ fĈá•%.±Ê€·7ÂÈRLĉŒ�@Æ»öž¯\Zç’�}4Ë¢x¾þOŠ9ü/çÈüÅ Noã4'�!�•‚Û Kpç2®ä¥\Þ¸A{@͈#SNÀáÚ#ã¡bñ'?ýqê#=Ðý@I>ÄY>í4ÆÚŠÜ2o,EÙ0t¬vô–­é?ऽ#£jÌüóžÌè…¾ ÆùgFÆT9:Ù Ô_]üJ’E€ Šè`7€¶þ®WW¬ì@;ãL~cÇŽM`Š0À!ZU8)m7æl ðé"÷fÂ0´4”œ�;ö¸$6j²ˆ¼‘ÒrÄ0,#‹à¥_i£â™–� Ì.¿ü²´U¯‡l¦†ïùÞw¿—UÈ zÜŸ�ò.ÏÑ~Dñ7â‘ò]t~û Ÿd¬-7Rn?&|D-ãº-ÙÉ6þ(aähèÚošsµßLB€ýä?ÙÏï|ç»™ùE*ØÈûöüF_„ÑAAȨˆ5žbAÌÈÐ?dVV!_ËÈü$Û׺ûqÜ{Ø-óˆMa~Õ;€;?ïˆn§‡© ±\ ÿ\T6²2Ï–P±g‚ú>„‘Š˜ïÆRï©í·~Ô°*?Á)lr^dÈFI4öùî»ïÎ{N ¢ÛýÈìº"M½æßU±™¥­FTŒÎ é=òL IïÏûê×Òæý!–6. {gY®%”�„Ü´ý˜°¿ª&UsÍ{æéꪨ õ,D“ù<¡kBnúÜa$“Îðû�øk§qÇv펄’j ¤};ó•Ýc¿ºì°aFeë±I‘?òϵ|¹S3_Îv d»»_ rß´W3Žš¸â½–p[çvöàôiô› (îPů„¾v2ÿÛ%Œè»ÎŽ·3^ªõœÖÅŽÏ�;'ñ ¯æ²ç qÇl;&í3½�L¤ëlŽyÚ atx½‹#©Õ ¾OX²Ä܉^K%Ä$Èa*ú»ó/õ¶È"ã­d×ÛÅ~��çšÇwagT¿ñ¹æÇMÿ[`à·Ó®ˆ·$­ øF$~Ù[KfÇlÀÔ)ÓªsÏ97‰ï¬ñðœ�9S/IC´¸J!¸=w¿˜CçŸAÜú÷AlZ-Ù˨ˆ²=€„½9ùÄ“sYsoý×f_æòÏ~þÓ¨’z4W?ˆeÎ=qÆïl”ï¤úÁÎÒX›ïl^’æí̯×ÏŸÿÌÙ�¦-�ø¹Úô&“ò»Ï¾Ö[ÂÈИ°€Ë•A1\Öã˺ö¶àkRŒbo•4*šç×c/–FPc/$†²Uˆ¡gûÛÃÈR�#%�Äî·r V–G¥E3a„<ûÏÿø¯lƒZ\ÖêÊî1¬÷Üó� X¾´ºIA°æz;p•Æã—^’�}3adIß®¾*ŸÃ8[–DYB ×Ôøá²0þ®d{à ‡%Xúæ×¿™àÅòË®vå÷Vd’-;ÑŸ+b©˜qí­bJŸÒ1D°ÿãŸü(Á/Ý‘iD :‘8·=!Œ 2ϲ„„£5iŽààœ8@ãý�ø²‹®ÚA6déù½U)ÇE¢Ù¨à¢e Þ�ÒåÆ{^I�@¹ÍG]q‘lú§'aÔ—\µ¿²—�5ÿ8b Cž`Ö%³­ÜWfŸ.dŒ*1•ó÷œÞ#e˲Bš%Z¹>=tC  ü �àÝE?è“~LŠ@ñ* ¡³u@cTó˜ì±a9\+Wƒ í»ÂÈ&´ô‚þü÷ÿÿ Ù>ÁI'×@ #Äï™gœ•rkÞTµ«Ó½è§åÄú/ñ °R)�<ëÄoôM®‡åØþøÇ1^ñ‰ñ²ç "³• Á-¹!QaO�6õî»ïå•P  |›9k_"›×²+–I Ÿ†‚0’Œù¯&\Ï-ë_þú¬ÒE:˜ƒ!„Qó”-רìÑN¶�v5Æ}uÂ$2ßj­Fî—Ѿáo7$ÁÉ!ºíéÄ{[ ŒX8:ˆ A�°—ŠýEè0V…èMQ52ô[Fž�æý¾7Âȼc“--éÄ_³Ëƒaw^{­»­ù*ÁÓL%{rƒxä»ÈÀU' Èî׿ùUúûºòAeª@·ÜÖ©�U%‡\ßî@JXr„0êdþwBñ£ÏEµs;ö• ��œE:¼ØK•§qC¯í·g›Ç%~¯÷‘b·Ù‰� £§³Z…¿á÷ÍkW½‡?hKUê0"à°ÃŽH{Ô ¾�`…GË·ÞzK.�£[Kuù�Q£G¥?±¬Ë~ÆÌïaÅÿgc›þ©í¥þ]|ño?uôÑ)c'�»ú?ØCÉ*>Þÿû¨Ì¶lÑfoK‰¶ÔUãáÁ"ŒT"K‚J$ ¬$”\«b¹7œNþ?ùéO²úPÀ8Iˆ‡z»jœ &úÑ�˜xS¥}]éÙ' íà]ïáë'N\}JZØ=>\R¢\ÏgÕ‰Çþ£zÜÚõsµ}êM&åwŸ} ¬×„‘áToºéo9: }Fì cÂË0ê.„ÇšÒÌ{îÉÍ‚ÏþÒ—W)• ¨3°õ¥Ax8©¢±¦õà,íF4´F5*8ÆWæ»·M¯9–³ÎüR¶CÐR/Ùè~þ¬þÈ 6‚ÿúÏÿ“òã,j€*âð‘EšùÍ„Ãt®XÑXfèt){$È¼ËÆ}ˆµ)¿F†õ…l‡’c/I*Dê>5‹ßû~§]H :�0"/d€Àñ–pÈ–„ɪ*íµL'³5ø &8-北Þ1ÂH«*F&á–[oÎ š%.,¥¢_Þ#s‹@"rwµMõ!Wú�˜5~€»€ SÞlŸ �� XT9Yþiï)`€¼_óª7ÂH@l¿�Á=1OBu<CôÅÅÁ"sSªÔÜ +ãÝæÝ•Ñ>íµd’¼‚tµ•«Â(aÈῃ°0'\ô©+­êwÕú¼AÌ)A bHåâòåËro+÷#4¦L™ZýÇj¨yþY k §ùgI'¢õÓ$Œo:{�Üšæ® Y¦ìøã>Ÿû6Vëñ©ûÝ×÷žök ã,¸"cÄ ÂhN�ƱsN/ÄÎÿ Œ‚ðYsþÐCmÝ A㊰üÑO~˜ózDZ ÈÞŸæË2›~Î . yLªþ-#K_Ø À·;%0AÚZ!‹4b3,é‘¥µäI¸CôqrèÎÞ{ÇÞ;Ó§¯9¢¸¹Mùy „‘ÿÌH�[ó’e UF™]@!ŠF–"©úiT[µï7ú$Œb/0‡C T„{$À5¶_:ëì\jØŠ<€u�¼ GöÚ²û©òc[é�“±ØU—öÓ ŒÒÿ×ÿ—òæ‹k¬ÊöW¿þUŒ~WgÎÙ¶„�à¯U[Y"Ëþ!øj|Ñs>tw/adþ{¾ŠŸY³f%Yë4×ÅQyÊW!Xm¬-‹/ŒµE&šÈÔÿ»×œµÇžñRÕÏõF™wæ‡yÙ‰¿f£šq`»v‡�hg¾#ý ÂÈf½U€ bÙ²SùIDG{´ñ{­à¶Níì®»îšI zßîp@€é7vJ±s팗¥ç0Û¢Ðwd´åul…DÖ²·–%qÇO«øäûaÝc��• aèçŸØ$»ÙLI°óìf3a«Ø¢Â»:Ál!{eüT�š_ ƒÝ©†Æ™¯D°«0:�Ý ¿Îß·3¿è©Uˆ>uâçŒg¹Ö] ¬÷„�~ûí3«{"CDQès¿ü/éXÇŽýx“.Å2Ÿ»3öÞp•M‡M8Ä’ Û@pÎ&6`Â)¨Là¨eÁN Ÿj%†^ÖìûßÿøØWà�!að~úÓ¨0šÛ(©´gMo„ÑÈ‘£FPÐRºµ©ä`õGEÕ'€G#ÿg5aÔ P×dªB~wß}W®ÕæøÈ…#¬å'@÷Yò³Y ÇÚLÙÄÏR5é¯=PăM²]ȧkÙز{e8ú[v'±ÕFíÊC hÇ/¿4ˆ–8N:œ‰%*öèp‘«áPV¤c´D�´ª+Œ&tue m¼ÿ{7ØD\ +“Šœ8ÖÇÌ™3“Œ$+rkv\µƒÌ¥5á¨U?œ™W�¡kÍÌØLÔæÙyÀ@�€Êšúºº (�íTõ%W�†w²—^ú‡B€ÅĘCªLôÛå=A.0¢Öëæ#i9r¤7ˆÜsSØ ŒÌSûǨ ™àÍå¹úœØDU–lBׄn„î<òÈ#Ù>{%í?ý€œçGññ&†5çúÜq¼Æ °Ð|bIZüî”ÕK;,1†ž¡‚‘8y†,Ý‘©?ŸÜ,‘>¿d—Èéñ;�Ï~Yj B˜„!B¾û�ï%ðЙ8’Îgè«S ‘ƒŸaDÎÈ.™A?ÒSùµ¾ÚÜ!iýn¶Ùè~þéi¿:Ît !«" G«™áû’J O;=dd4pgï�<�²‰02®Æóg±Gûm¬ˆ=‘Î]]¹T÷“ ¼W…«ù ”#sœSJu%d_ó‰ˆ<§1O>È¥P ƒ˜c/Ø'sÍ~8¾# ‡E5P hžvªLõ)÷~DÝïŸLõᯀ`{æð¯sCf2í#kdº¹Ô‰ßè“0Š1D«à4^Þ­l¡Ž%S§­ÑKr6ßU­š�2è›Ä¼NÀí·YµJˆW_y%�z—]öŠ�¢?ÈA¤©±`çú#Œœš$kÞX ;£ê ÛäèFô©7 ëü:kx8ü}ô.Fl$b™�@,óŸB—¿‘õVé²´TËŽ_KÄd©0Ê=vB÷½ço‘°cƒí‡çù¢ ¢=Û…_274°U({¢JûËM¹|û‚og §«Þ#ƒ–!#Œ:ñ×–Þ4ãÀ�Ú¾�= ;|²¥‹™¯ˆ…Y~¼$m“x޽ýŒO}“ñÑ.ÉãsqTp¼:)!ãsö tª_+¸­S; OKNØS²Ü�Tž3÷±œW�ÌÿN#>—Mog¼$Ü›¤Qøà#ñ¬º›-†T²ˆr²Å€¥U’ p]û¿?ú¿i;ØDñ†±=ó\õŠã¬bÛ¼äS„ÑáéS:Á*¾µŸ�§Op†4GÍxNóU2dõZRFó.¸ûi¬me(€&LÂh°ú# Ð ðà�qrùûÍ7å&y3f“ò«+„R~”õ¹!¿Ó!6FŒÖßÿn“ß{ÒH’�%$ûÄÚbÀðt%aK­ÿªh8"`�ƒµÏùÊÜ÷ˆåƒúøGàhço.úU8Ñç3Xç¸N�ñI,¸Ÿ{# ýoãT0¥¥[E)¯ñTad €#pjGÐ!zì— Ê¦Ôkèbˆ€¯7ÂH@®¯IHżzÉZƒàz)ÔUáxd„)¨ÄÈf£�†eöâú¯ÏJ�� õ`F@W�ùüed>‘~+K3ÑfœÍd‘,šyáT §ðé?B«7ˆ#µGŽ #›äÒƒ£Ž:*ž¿_”tOL’À¸pôžíï¾�Š£F�NP û*£©}œsó)B–’¸ê~âÖÛ¯ �£¾–×Ñ�fÂÈóO:ùäÔ÷I»7önÑGäÖEý&�“Ó¬T}iu†iƒÕ5sõûì—ä=žE/è>RàÆ°3惽^¢_�½@Ø%`¯®Øiì pS~Î<¤ƒŸad¬2t7ß|sŽ›`É&“ÇУ‚°#lðØH)àµüÃ~©ÑïvÆ™üØ €p0 #Í6®*©.úÝE9®tM  ”ÝÒàK_é·Ïý.Jëé+CïÌW�²ý Z±Sõ<¡Ãt’ï ×ïÇÏÀ4²ŽÍ�U0šoôjßX’ç=–ŒhË@dß<4CMM Û @A6vâ7ú"Œ$q–ˆáœ‡1N‹Ìñ ûI>õxG6qîãs"»þfe¹–9& ÿl�¿‰yÌwm•0ìæ13ŽÍ}軀Ç\7Þ³gÏÎ@ª?ÂÈÞiIÀ„?ñ„·k¨ #z3„¤! øå˜ð×]] âÊžhwÞuGÎ?z*13Â(+M5k*†%Ò$ÅÈJRazAA²î<ªÌRîALYÎkLTž"åêŠ@:ÜXºñ?7½6Žæ¨­]�ؾ™ývµ3_‘Ú5^€_ضޗ1ª+`ð 4öÒä'õ]–Ϩ<鹕@_Äb§vV?µåá |ÛÁŽ[vÁüôÇ�Ìÿv #Ä ½jà…Ø×зo…}µw–qþx¬Ã.‡­f§m°0âUDì32Fâäœ 6£G�ɹðÃýßL²4ö®<(�__“TAʦóƒ©æU.I‹q>üð#’@ê_H:Õm׿ÄKá§ø–÷âÿÙCmW {Ÿj¯Ç5Î금ôvÕ vΕ$\Ë%­ì@¶Á¨ì� ¤_ýê—™øª·q�”AH9d†^7*  ”0‚ {ùCE‘ßm™¢ÍÿùÿøMôuŸ¬ B±….ºG¶ö^ƒk‘‚*�FH|Xó‘xN;ó‹Ý€ƒzVõ”{kìùáNü\!ŒrH×Ù aÔ"a”'26/þS �m—}´Q/ö° ¿’#À(¥˜�•�êÌ8�U”|;ÅÃd²‰­¥2 Õ•q*’�á|ÆÄLÂh°úÃɵBÕKR5×€‘Y›²gRÊ/@·øX¶…q$?2pJT3a¤ü’£P#F榗ª@œ,$@f`et‘T ²¡J�©ì�wÞùDIw»„‘,ˆ},úuüǃ$´WîT<@VÆH&TÕ�LÊ 7Ü�/+„"PAÉ*è}”Û«¼ª«môW_êK/»$É�Þ£Ú±!)º©¤ßqÊdR¯qö› r2@ ¹9J@%д¯Ìõ×ÿ5YV< 2adl8e­öV@îX²ƒtE î"¹­ òdYôûÍ7ÞÈ`Î RÈ J°ï´¢Þ#§!Qêc¸é9òLÀhì°Ãö Lȃã©ÜAXÔKPc;Â�wdà׌ëÖyï õ¸Fù5=òž…Ö)‚@ È1_ý]àc\�b¦?–�MßoÿÌë‹qQÂlþ°¯½Ö�køÏ{`ÓC—qWU§�Æc劕¨n™{­y0~OT !.� í@8"&ºººré¬{¼GɲʩE¨¹w( #ã `Ò}²ñþGè¹=ʈ€@ÞpØÇKW¾Œlž¾*½]µý:ny ãŒÈT„ 6a¤½õR3¶ÊzË"e†ù ħ9Š Ë. }fÿéÐÙgŸ“{5�Ù½÷öOl×ó‰.Û Æa }˨ÚS5ç ãà6¯ï÷ß{?Û¡’‰�ÑAúlüoȳœgÆ¡¿k¨ #KøZdK'~£OÂ(üª¥ ú¡R�Ì‘ÀªuÏ:ó¬ôOÍãeœfÅgÌï®® ©Ëªú,5‘É7îcÞ©6=ù¤Sr-2e‘ªãð}ì´ek–Z5F溹ì3¿ ¢QERÕ<>*öò±ÇÕMáùÑVNIë‹à�z«0BˆóéúxM,•DÖ TU¢rÚ%*¾\/…íã“æÎ�“¶Å\aô‰DJôWÐ»Óø�sóób‰šyc¿#í±‡‰êcö«ØËD»ø þ¶&òû"Œ` ~Ç|ÿØ®Ü_#ÕšíÙ�°@‘ÿmg¾Ú릙0¢·°»‚R}«"¦»{IñYmºb‰û±Ç·&�g/ZÁm�ÚÙaá·ùIõíàz ’…®u2ÿÛ%Œ$æØØ7‡ t¼ôÒ}ÆÛeép+»kƒÿ›#�*AÅG�7¾qªaÄ )°ŒígaW <"¡'Áb©,,cLÙ 6‡|î¼óÎ\jXFð;Õ ¾HL¤ÐëK_Oê@íG–;%Ì €Gÿ#h˜âÿ☋-ì流"Ã%ì9!Œ×ö4š¾ïô¬¦Q=m©*²vdÈÙÆFÚ·•��€åÓa×Ú£ÜC-ŠpùÁCˆg[ðÃl ß§²è ‘ßýÿ`UÕ2A´]~åeÓ,‰d¹½ûTZÂG[–8!p0¿m�¡9�)�©„2ÂÈ2Ó׺»Ó®µ3¿jÂè¹HÀJ¼õ%zË®°=�ø9²-׺+�BµHÒJÑ>Ç›&Øw ñ�È6&7@#(—Ý‘]&e åˆ@Ë© IU#.“_ÄðdM^•$Œ²@õ’Lè`FƒÕŸ!¿V€€È¹=0ëþÜÛ‰ü€ä�wÚ¥±—FÐ2 �Ó«MÆ[ö‚¡j&ŒdɰvLøÒpdÊs•cû²ÌDßlH-[ïÜb‹‘ @�?þó9f­bk›Ò@ ü_{U1¤ö1AÚ~,L½°9@7oÞÓYªjƒ>¿¯+ŒÖl¢‰‹ #Ç“"-×ñ r0ç=zä3ÍFŠcH³¥¯-Í 9Nˆ®._ÕU<.»üÒÔÓ‰¸{'9*ž)Ën�ú]áøë¶î¥·½e^zÊG‰r+r­+"8J,¢Ä¼Ð!.6StŠ‹q^ú…45îG€˜6u¯!@{o„‘Ê 2÷ÜËbžÚjë7ª˜:ðà\Žƒ(è'‹ÐAž˜c]1÷N=å´tÀþD\„­ì9™«â\Ígãgn«$”™1çU%ñ遼ÈÄæÌòr·�tTEפI{dF @ºëî;³ò ¸G�h'�š6ж ’ÈAyµj9 !(@S‘fÌ8ún¸>Á5&ß5ejÖ[f[UJ!bUh;òz( # F ÏÆ©€2O/^’}Àî„Ð=c.ã¾Á´)ÿɽªv òXå9Ö°§¾™ãH4ö¸ÝqÝ?„9›ÏH|óFîÏÄAø4{˜Ù²-"HR¥)0“8±¬…í4�œöåĬº-²ñOD ‚ÏE?z[’VWŠ<ö¨mNtbwØe}W•ÑÎ|5/›—¤‘ <0aõ|§WˆóXU'"á‚HB€’ƒÏ ò[Ám�ÚYØ®�ÀiwÀ/Ú ùÚÉüo—0r¸„÷?ÄM;ã5|øˆêúþšxÂsŽdgS, gSn›ykúG?Ó§œ'¾Ñ{UªZºôÖ[Ë’¬9ä�À!ñ9ä#ìÄ6>¹;<h&ŒÄ�à û9;ø“.ñ™p‡Gì¿9[ÀJ°'�¸úôè ™myÐßU/•—X™÷ÑÆ�ÄM;Èpš¥PÞa�Xž6n翾óíͤ ¶ÕKÉÖF‘Õ�±e�%а;2„Ìa3²ewøNöd( #Wå¯<ê’tÖsÇð¥ qº ™A�øE„C’];ó«&ŒT�÷'D¦ØÆÒ¹Nü\!Œú› Ÿý¿Â(€Üí·¯}£à0 Ž—ÜÉœ0R‚H†¨\"¼ ŽrJtr >+óã^Ò±µœ¹*$¤�Q`/ cU 1ž#ˆLÂh°ú# ox¨ÈÑ‹«°ÐÛÇ@f–�½ðA¹�/ðÝL9IÀI!öAሟyæ™ pܯrÁ’%ÏPÉeôS€æT$›^“o+L«SW†È©>õô“¹ÍX ´�.D™€ìå0ö@6Ð]ïa¼Ñ)Ô[c3`ú1v‡œ+/Wqpq˜– 7z«0’�rÊ�vРžÓ‘¡§ƒ2“›lºIõt‘Žçô,úÀLÇ.c$Èç�|æå—_I0 Òe0 £Z®²CôŸ³œÐ¤ŽŒ”ì;‚qJ–-[ž•('žxR.]#_§Þ#CYóÓO?�ó˜rÊâA`·]Ì¥�6ndæ€v•o䀈:ãŒ3ÓÓINÐ’ù³>œNqàÀ ù¿.ËP”„oDçžp”F“5’sETõsd�ÊzJ—í2)–¡*UP´K•ÕÃ1î¸ãö¼‡îd>—ç_x.õÛž9~Á�wÕË]T†=À‘,e§tMÛÙÙ@Ïò %a$ÈDB '3Ú“+íe,ådÙ5_@èÔ©SW&{ 4NOlþŒŸ{Ú¯vÇÙø aÔð�qu*Ý+aËŒ…±7n¼é™Kõ�o¾ñf‚ïÃ;<ÇUPªÚ¯;%è–m�Y^K{�>1ùóyÀ$ß±*äΖΎ Ë?n§´‡NDH ³IN�ü TØÒC›ñžò¯ÿ¨ #•!áNüÆÚ#óˆ¿à—îˆ@Â#*‹¶]3^d¥û  ³§ÇÅ’t¤’`\Ñ¥Ah°gþ.˜XÙd<¸§Äc½�k@IDATl€ Ü“0ôÓiãxÉ¥¿OŒ`ÞZraÏ3I¥C>4üצI&±KCA!ÀèÂÓ’3� @‘£³öÀ2#éòèÑé#�•ªo•¢|úÚ.ï±DÏ©hh ¹m�U±žst§ãÆí˜ï@äý**RÉ—œ,ÑãÏ}N€Ån¸ú"Œ˜Èø…áS:ñ×l®9WãÀ�ÚÕ@«V­ÌC'Ú™¯Ãƒ˜k¶ tÉ—xòA‡ÚcMÂB…5Ýží>íÔÓR�øW¸¥ÜÖ©�eGØäU;¸Ã^bÆ &édþ·Kíï7‘"íŒ,b³bzË;á�]àù~ MU#’£æƒ%X*ÃáóÌ܃sùÑya?è{'9Ñ™mw¯Ó×`"„M3aÄ–w‚/jR—ŸÔ²°�ÆN;ï”XÈßá4ä’ÅK³œpÂIY©�|^{*ñfÅÀ�7ޘĈñFÔY2}ÐA¥þ¾øâKÕÌ™·ebyÈ¿²Ï–¾õ¶´zm„™Sséî»ï Œ½4m5Ì4uÊ´Äͪ*±4”„|Ë~’­vБÍ'Zy`©³“NÙÅ7BO´Ñ¼†åÌg„‘©ŸQAÜÎüª #òìO““HæZ݉Ÿ+„Q³á³ÿ·BµH1æÁûügægæü¾0rÏPäT?úèÃí ²$sÃ0x¡L«¬±Q Àìˆ5Ž@&Ñï8ù#ì³Ó( ÊL^Û„ñ@0 &a4XýœZÞGNõ�ú/»ß8fôà ŒÔrÎ}y€ Ykå©Í„‘ê ²QA„x›3gNfëÃäŸýŠ÷DàjSSVVG6¾pq°íl^OmÆ\õàÀ dhe¬½ß>3»à_A¼ Ãì÷œº%i$L…Ð�Aø Ô�Búü�ÙvL’%ä <pGzq¨ÍF2Ï�á~øá‡Â�¿”òÞ92¯G~d€9Ù\–ì”Jk+@©ª‡Ž"Sècwwwþé4„ÉiÓD ÂË&åöñ1TÒ#ˆ,ë©÷š¶w‚ƒ®OòóùÞ#��û—†LÍSKqdç^ˆ@;cä°€<÷Ý@>í™ê½ÄÑ3óO¶éãöÍY=®óâwïd›”]Û<]å >-²ÿ2¡Æd|8ùaÃ6J[Á‘?cö— rTØpúÞ�pR uöYggFÑþóCoT ø¼ x½_;rˆ“þ"Päl‘ özB~©@@(y�àÀqØÆÞ¼gXl,PŠDõYvDfŽ®"b†’02¶ª‹‚·FM€¢ïÈ8§Gmchœ Eó…4Wif)Ž>ÒÉÞ.Ïj¶ÇíŽ3`9„eÓS@ÐÜeëünƒWöAûÙ<:hyîÑo`ȶb§<ƒ]Eô¨Â€[K×6 ;¡ÂÇâJù«„eZDYºï¢Øc�Ù¢B±Þ;'ÒË?ôt(+Œ�ªdd>g&»M¿±6ÂȼÄSö’c‡üoÇx!CÈ Ì_ðí*3ÙÕ]ƒp’Rã�¨~è¡´³ì*Ÿ¾Emãj‰-‚œ½m®0²¼Ê;�¬#ã�Üàÿc–äžNÏ¡+È~Kf‡Š02Ìô”¯æÛž {" DŽÛ`•ýB¤!Í,·´Iµª6�ým•0òóB £bØ»$Y,iñ6@É2èöú`ËéœybiNVw‡�«‰åµFƸ-�ïÄî ¶Œó¢ðGíÌWK©›ídY¹SDU¯Ã§Ë£�|‚¥�cÂ?!!Œ <*é�ˆPÁÞ*n뤿H, ‰Åvp‡Jlþnédþ·K±?®vÇ a„Ar°*9T� ^Åp„SqG…ogSja‹ þ_rG²EBÑ颪­Ý²'ÛŽÙ.`§$¡-§o&Œ$X;ÁÆN²ŠÍº=ëÆf„K$ ]t� ”à”xã¿ùØ£®øÉöò�ù¨ªÖ¿üòËR/ÙÍ<¨º *­öŸ>=ñ<�̇'´ƒ?�xAxÔ§ŠÁõµ6ˆ}CÎ ën {˦½*²÷˜49m�~Hè %a$1*†€û$ŒµG¢Q…:¬„ܵŸ¡ñöY¸ü¹ð *¼F™P‰¤2¿ÑÎüª #cØŸ<,/<ü°Ãc,6ìÈϨÖÐuóûzO1†‚,�+&žÁ˜1ãØp²S2@s:Só%`äDdy‚€Q·£‹‘”Eg09rŒ5€e»€{Ùc™%€öŒ¨HâDÆFU�ã%9 Ìó›Qa_Á“ã6*#”f?Á°ÓÚŽŒ(FÛ�\�öø²vÀ0g�Óžf^·©`,Î@ÊFm–´é£L‰¶ïN9€,°¼ŠŸ8q×|žª Y ×[o5NS� _ˆŒ(ÃËðy¯Ì Ckƒá(©226>3˜òØ8Ð…Ñ�{î½7ÏSYîÔ‹�±;� àä9~€Î~<Øz§›2�,Ísé4-…²–; ƒ¨¾0¦SB–ª¯¼0÷\€ù ŸÿB:ò¨>½¤72Ĉ(Ëz,‡´Š ÈaÀA Ž8 :) ÑUG—.‹ÍE¡–8MI‰0àÖðœ�ÈÍ@wÑ Õ÷ߟ@A€Fè¤1td° D¥ý7§V. ìꫯªî� Y;-ù÷û�¬Ú!k2ímžÚãÅ»7匣¯]1?§ï·fñ�Ûzþø °$k|(ù¦ßôgE´!9"Y$œê5ã äÉzÕ—À@ eùˆ ébDP¼ŸÓ�4i� lNÎqôù:ÓäslƒTvxÕÊU!s§¸�ΓäF‚yzEF¾\lм=ã BLå‰à@РÒÀ¢«ì†ßãæ©åuÀ•kám¼ù–¿§R¥…Ô3ï陫§>è{+—~M�HçÍ „FW_ö«Õq¦G*ÀìMƒPÛsò”Ê’°®®®O¼–ÜÌ]v„ë«vªˆBt÷vI˜�éÇãúN282‰oû0LŠl&ÂR€ìê)¿µÙyz)˜ ?ö”@�"Çé0_‚t5jtVãd+à¨çŠ ö�úãœKªLèÆQG}|Úco}ó»÷Âo!±ÙúðfØes‘\,£âÓZ± )A?¼0윹è4Ïa·�³å7ì};~ƒõ×N„’Ë;€vóha�gN+#Ç´›Jl—Õo*†U¶X"dZÂ!, rƒÝ°),{‰¬uûjIÙOÌ [ºYàæŸjƒú4!XÀ»áŠaË‘Çì˜DÉIQa‰ØRý(pS�Ä&qÄ9�U%Ú° ëXÂê9Ñü$®Upªa—é»>±+dBvìц1žªùWË_Tr^�žÌ·àÅ©�‡E`Qo�Bíçrºçž{R,OA&«*1îæ Ù¹Ø¶F‚íñ<� ñaÉùùL�¯êÊUúXïvf,Åò9óùÔ‰¿VíåêÔî´;_»»—|‚0ªOI£‡‹B–k$£½Ó§go‰Ë¤L˜ñy®�â¶NúËjW'¸nédþ׸1;ßË?kÓx³ûŠ02w,¹U¥“UÉñÿð!¹ØcnDÌ¥]vÙ9I Ée>�mvÑU8βsÙóŸ}&1DÜœ•(ª�§F²ÁÒ1‰B¸g�=&åüiö'íâ ¶€ì%gÍšÕÀiA´° ÞiNm6ˆí�ÑØ~Uí=56éEÜk~åÙžÅîßtÓß·1"æë”\™çºèôÂð æ5ÂÔ©ŒÙ÷˜×�%©;¯y¦àhKj%@ØÖÉ�›Ž™!2!?GN0¶y qm|Ì-Ø—�†³Ø3ŸùK,õöwK=Å ܽk>§Æ‰Úuuìùï© ’’˜�­ú»è@�ù?KÔÍcýå»ÍWI6NŒÄÎ>UOä}ê©§æ8ó¯u¿ÖÑüÒ†Vä±Å#ÅÏõ'“ò·Ï®Ö{Âà599„娰M6Ù4uóðÕâí·—gµˆ}kÞ� �rÉê’Iऎã'8Ì]&¦g¸É’î46÷µÏpÉy`a‡…!¾=×ï9 ÖϤöž \3Šýôùò^þé´?†V[ÉR`"Ó€ïíb9 G]^)¸# j‰ÞG‘S�Ã)�  hɳ†äÂ™Ú “È„Áó|2áÄÈÞ}Híò{÷ ¦ü´“SU}\#t/ªÝˆÎÏþ@ögBÂ8½H… 0‡ŒÑÆÚX H-O¡‡Ú‰”,ɺ"ôoEô�#–µæ4ÈË¥ßäï30™’³,…òVr ã-ÀWiB‡ÈP[O:«’Åó=ÏØ’÷Ž`èùõ¼k rÕg_Þoœ?¿_ÈÓˆa²½äD—迾ê�kîÜ9¨<dŽì£€àûßûA:ymôl}è9OÉ_¥‘yDöÌ W6Rlž?uû,=Ó>}ËöEÛÞ×¾ÕA¸vŽÔX!wš¯ºî—5Zm²DÅ}ä껋üèŽì°ê:í~{yª¡_6—ÔÖ†,T 5æAóXÔ€Þ{è}ô>€Îü>|D¶�®š/²œH(v)ÎF ä¢g‚:¤ú�Ý´êÀ·§>hK+bÄxx޹Q�w_÷öe¿Zgí€ †½ !ßLÖï%72öydžy¨�¾è'Ýéí"óqÙ²Ocsʼ MÀ�t46ô8¬í[Où­ÍγžküÍoz$‰¡Ýì�Š.›aÓwö�¾›æ[,s{aœ (89fFã˜bÕlL—ç{·>ÒrÑ—”Kô'(Íl¹õç¯Ì�UÚ®Ð-„Š ÏsôÝ8“I»~ƒ~÷×NsÌåÍþ„^°çæ¬ù-“n®³•’KÚéòl­}Fôƒ ÏùvŸ0Éè' þ�Ÿg—=·ž’IÆP?Í1¶AMGHôƒ¬R1Ξƒ&'££­øc÷Ë(ûÎØ²­ªè±ç ÎU²%~gLG�“Ÿ³Lšßµ O°e�²•+W%Ñj‰ÂÑ©›­\ì+¿I&ÞK'%ÜôÇü¯åBžÚësüŒ…\õ9Ÿ¡#®Ä#á|Ž/AÊÖv©á:ó×µ¿íÔî´;_-•l®0¢S§Ÿ~F’³tŒ]acÒ¾Äß´W•."Îßky¦œº[Çm�ö7qv¸ƒ�édþ×vµ/�\›Þ´;^p„½vørU1ËÂ>Ðyó”L#Ƹ4â…­c¼§wš®Úï° Èä7Âw³ µÿ€xù£ÄÓžÙ°¿[ýÒ¾Ð~m`Ûì §±‡ì’Ê({ñ™‹ü?ßYÛþ¾üaOùkom—‘ãÆ�LÌköŸ<\>ÓÀ¶o¥ÅK›…~Ã/ìRê~ÓÃÙ­ôëÑV:O¾â:6Åå½ú%а×Ë“àg#ôÇûùIþ1ídØ;XÊßë±ÕN÷¸—­W§ã<Ô2jÖïvô§ÕöÕï!�Ú¯ôf�O»%ÿþw HÏ<3Ž)ŽJKx#ŸÅË<¬íl'~cm}#GÁ®«/sª¿Ëük´¯a'bgz>·U{Ñó¾vÿŸLéÄÂÈæ[2¥BN�¥‚E…ªØ$¿·œÌ— :d§ÓÊ,�Ÿ8±±Ô±Ý6|š÷™µµã¯ë¶vjwZ�¯k;\B «?®¡´ûíö·öMµ®ýÓ@qǧ5ÿëñíù½Õñêy_­ouÿõ›]iÕ?×öˆ›íÑÚlRÏv´‹/êñ£cÈmïµywOœÖó}ëÂÿë[ó5P™6ßÛîϵ|é‰/mèÍo÷õüúþZ¿Üß.®_›<ü½1;÷s}õ§üþ³%�Bu8&MýåQ&hýÕÊ£ÝË0ø^ßWoåþÁþLÝß]u[|Š«î¿gsží¾§~ŽïÍmn÷yíöÕûë¯æv´ú¼úÞžýhõþæÏy†«/ 滚ßÛîÏu{Ì}è $•ßô÷¿åzý§cY…Òû®® ¨œK¼”t÷vÕÏ®¿“É@õ­¾·n�×—l{kCý;Ïqõwo]¹æ£õ{úû|ýìú»wÔíh?ëg¬‹ßë1ª¿·3ÎCÙoí²\õ¸ÅûšßCÍ_ÍïkdFE…ѽÕW]‘K5¿ùÍó“0j®xj¾ç³ð³þ}úÝ,ÇÞìQ_²Ìöy–k ó¿¯v­í÷d*(}"ˆ ëâp {—¨²BÞ«p9b‹”»l¶}]dòµkò{æ©fŸ‹åô*.×Vѱ¶v|Z'Ûú«¯9ÒJ[êgÔß=k v×}µ]hn‡Ÿ›¯µF*>­yQ÷Õ÷�ô·ç}u›û¹¶Ÿ=ãÓèg_íðþVÆ«çýÍ}÷ó@äæYÍï­õ«§Žô|goÿß ¾Ð²÷E=-SÕ–r Žj©Ÿ6ÐùQßï{}o;:R¿¿¿ïµ.øL­�ý}¾ümÝ–@!ŒÖíñ+­/X¯$Po’jCeK,_š2ejnâ›{û´¸b½Zél‘@°üÊÃ?òPžeÙãy_=/öÉÚoH+úhNùõ?Yu°ñlìQvË­7çfýö—z?ª ,ǰ�LJ±ñµå(–ˆXaÏ›Ýuä‘Y]4”•-ÿdñüÓ_¯ºö±ð}6¶ç‰%/'œÐú©Tÿô”    ¬“(„Ñ:9l¥ÑEë§,•˜yûmyìµý?¬'ïêš�ûo �¬/W‘@‘@kPa´hÑ ¹™´ ½íAqüqŸÏ æKư5þoûÒ¨±ô7NI‹}ŠæÏ¦r §S,WÄ!j^�BöU²/ˆ ÔmÜ]ïíQôfè4¢±ùï‚Ü@ßFú–%9kb,´çJñC'ûòä"�"�"�õY…0ZŸG¿ô½H`“€Ó£œ6gãE› :�æ¯2­uùí:Ö¥ÒÜ"�šìWÓ›ßÚ䨗y4uêÔܳæŸÖ¨òâºêJ#Åó/<ûÆ-ŽÍÀßÈýåØYKζŽý­¶uú[ráçB ý°ÙpÖžcKš¯ö7q‚?h¯)D^¹ŠŠŠŠŠ[…0l‰–ç  ™lˆíÄûllºé&¹qu½iäP­Ó²Î” ü“%`sêý8Åî½÷¾O}û'7·¼þS”Ò¨ÞÛ‰o~þpUì/%FÃbßä„S5�*äçb‡~pÌW› ¿§"­9…/HÞÚ"íÊU$P$P$P$P$0Ø(„Ñ`K´<¯H H H H H H H H H H H H H H H`—@!ŒÖñ,Í/((((((((((((((l Âh°%ZžW$P$P$P$P$P$P$P$P$P$P$P$P$P$P$°ŽK Fëø–æ               ¶ a4Ø-Ï+((((((((((((((XÇ%P£u|Kó‹ŠŠŠŠŠŠŠŠŠŠŠŠŠŠ[…0l‰–ç               ¬ã(„Ñ:>€¥ùEEEEEEEEEEEEEEEƒ-�B ¶DËóŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠÖq ÂhÀÒü"�"�"�"�"�"�"�"�"�"�"�"�"�"�"�Á–@!Œ[¢åyEEEEEEEEEEEEEEEë¸ a´Ž`i~‘@‘@‘@‘@‘@‘@‘@‘@‘@‘@‘@‘@‘@‘@‘À`K Fƒ-Ñò¼"�"�"�"�"�"�"�"�"�"�"�"�"�"�"�u\…0Zǰ4¿H H H H H H H H H H H H H H H`°%P£Á–hy^‘@‘@‘@‘@‘@‘@‘@‘@‘@‘@‘@‘@‘@‘@‘À:.�B­ãXš_$P$P$P$P$P$P$P$P$P$P$P$P$P$P$0Ø(„Ñ`K´<¯H H H H H H H H H H H H H H H`—@!ŒÖñ,Í/((((((((((((((l Âh°%Zž÷ |ôÑGÕªU«ª>ø z÷ÝwóûÊU+«�7Ú¸9rdµé¦›VÆ «6ÜpÃOÜWþ§H`0%@W¬XQ½ÿþûÕ{ï½—�Þ|óÍSÿ6Þx㢃)ìOñYlÊÒ¥Kc\ß«†m´QeL·Úr«×O±åUEŸ ”ùІ•+W¦�gï?øàýêÃÀ! Û(íˆ#*J»ï,[¾¬ZñÁŠjƒ 6¨6Ùd“Ê{}oå‚›>üðÃêýhûÛË—W+Ãm²ñ&ÙþÍ6Û¬Ú(l]¹ŠŠŠŠŠ>- ÂèÓ’ôzúžnÌg/.z±zmékÕ;ï¼Sm±ÅÕî»í^m·Ývä ÚËU$0T@½ùæÕ’%ÝÕË/¿” ~ܸñÕ˜1cª-·Ü² C%ø!~î‹/¾XÝ÷À}Õ’Å‹3 3¦S§N­¶Ûv»!~sy|‘ÀgOe>4Ædy�,¯¾úJµ8ì̇Œ12ì¶Õ.»tUo¿ýö�Ú ïœ7o^õú믹3¬5jt5qÂÄj›m¶iIiêÇ’î%Õügž©Þ bܽüÕØÆf²­¥•     ‚Ö;ÂHæ˜Pm ªEÆgøðáU!,A›zyÄo¼Q-|na~=÷ÜsÕ VEæ è9`ÿý«®® I©4*×Ǩ£ ©/YJÕôUv±Td},«V~Z¶lYõÒK/Vóçϯæ>>·Úpƒ «½öÚ»Úu×]«í·ß¾ðµñ³¨�²ðO=õduíu×VÏ-|®Új«­ª=öØ£:ú¨aWºÖÒ£ÖþüYìwk-/ŸZß$ði̇ϺLá: )¶þñ'¯½°¨zó­7£úpX’È&L¨öš¶W9Ci7ž Ìsû·W‹-Jl¹Ë.»T‡rhµÓø�Zን+²"›¿ºû®»*8jüN㫉w­öÜsÏjÛ1Û¶ôœò¡"�"�"�"�"�Á�ÀzG©tá„߈jƒM¢ªe›mFEÆi— 6C åK€•eûëõ©}tvõÚk¯UÅŸG�]MÞcruØa‡W“vŸ”²Wf]®�% "Fv’Ì–,Y\mËöÆí¸cÈnÌ€JÛ?~âúý9>=ïéêᇪîºëÎ$Üf}Lµï¾ûV�ù]_¥øYÓG¶Å»rÉ¥—äØn„ÑÞAžrʩդI{ ÊP}Öú=(�*ù_'�Ok>|Ö÷æ›oVÏ=ÿ\Ú…;6/.Š$˦նQY$90uÏ©aó÷«º£rg(íÆœ9�U—^öÇê‰ ­$æIuægV{NÞ³%ZŠ&ÉñðÃWW\qyõêâW3iûa‡Ví´SkÄSK/+*((((X‹Ö;ÂH•‹Ì� Ôæ›mždÑX�7n-¢*ˆ¬¿WþàCV]ôëjöìÙÕn�™±=‚,²läsŸÛ§Úyç�«-FnÑòÚþ�´a]þ¬¬è /¼P-Xðl’n*àTÄÈ�Ê.ªŠ+Wë°4aîÜ9Õ=÷ÞSýý曂0V�|ÒIÕÁRíä"®\}K೦�u€þ¾8ªŠæÎ�[=à÷¾�ᦑ%=öØãª}÷Ù7I6ËoÊÕº aÔº¬zûägQÉËccÙ—_~9—¡l¤*òY5Á`ªŸÅ~÷6>åwEŸÆ|ø¬KyaàŒÛn¿- #Õ9ÛÆ8#*{TæŒ5ªÚ*þßþ‰+bk‚¡´…0ú¬kJi_‘@‘@‘@‘À@$ð¿ž0¢ìCñöÛË«ÅK–T<ð@uå•—WÏÄF‚Néš2eJu 'UÓ¦N‹¥Q[fùòG}X½ûÆ( Þ ¤iSÜñÙ᛼בg~°âƒ<ÁÂ2·•+WUÃG �Ïl^Y^õA¬¥_úZü>N›-"EV}÷¼÷¼óvµ*>ït°Í6Û47ct‚†¯ž{)Õ{hX—/[öv|·§�~yæf‘½>¼qoo§p¨òñy›<Ê–¿÷[çoi˜÷Ë~�ˆûGŽôµEÇ›ÿzv}R‹ 8g=ø@uÝ_®Ëp›\+Í>à€rÃë1Q)c ´Crÿ�w£Ÿo-‹ðíl·J%ß8öîÙ<äjãJãQ/a«å³<Æ÷cy�È{<ïý�÷»ï½›'ŒŒ3:ú·YŒ•6¾×ߨzÚz«­s‰’àÓæ’„¼bÓ ”-™Œ  iÏ ·BþË—-Ïñ[Ïö»ÍòT¦-Svöj?}’)|ë­·åoÇ;ßÉSâìádO"'Å l·Úz«ca¼ÞŠqZ{²<üÈC¹„ê¡XFeï¢#¢rÂ’›]¢*kÇXžÖŒGä|¯Oeq¢Š±6æNV¡¿iz¹eœEGó”•z~sû,˜gùîÐïX4Ôбh»ù³ÍÖÛd�§þ»|þÕW_M�ÑÎMã³ÆÈ\YrÓ/ŸÕÏ0—úÒsm 7ËbŒŒycŒ†ÅÞO›å¸¾Ëy䑨0ú{¶k Fu?-Q’ùÕn6Âx™LöÈ0~Ú‡¥ ô£î§ûérãþ7ªåÆ(žeŒBùó„/s™~#�ÑPÈi zb~ Dé?ý[úžö3ÆNTÚ;î=ó+æÎˆÐûw—óß;ÚÕó¾ÖŸ�ÃґѱÁ,}1ÿ?ivؘ99‰M5�>d¼¶Ø"l|ØBã8Ð~»Ï5Pù²á­\úÂo°#N_¢G©{q³ÓŸj?žö6?ôGÛØ ·Â¯é;;§ÿÃBOÙW6‚üÒ¾Æt­àã0ž‚q�v/î5½{UÈÝœØ$äË—ú,ûg¬èºË<ñµfžÐ™è«þû}ÞÏ„Ûzµ=iN8�É`ú;íÎþ‡ž±ýôØÒGrÞ,*”ëñóÞ÷¢Ÿtü�°Ú*!Ežü««�ñ¨üµ¯·ù@¿]ÚÕ‰2OmèL&úì¹Ûo·}ŽG¾`õ?þ¾8–Qñ§Åزk–¢×íìyÂî/ |÷Ä“OĒ㻪G›]-\¸0÷JLÂ(-ô…mf�à²VäDwÓÞǼ£‡«â¾ bÿ»�76ç6=‘Ïã³j[Ok#ŒŒ�6ß|ó­Õxçƒô™¶Jpâ#]·äö·¿ûm¥rª· £Á–có–Ÿ‹ŠŠŠŠj ü¯'Œj9þ3ÕÌÛgV³fÍÊê¢×__ºšD“¥Ê*Œ�FN¡°á Š„§žz*AÀ”=§T»î¶[®wd³ �°ÇŒ,îàþPNß?~\µÃö;$h¼ï¾{ó÷»NÜ5Áñ»8º»»s�ý;¨`k»X[¿[.5r?@Ó|)Þ³hÑ †,©ëî^m\™Ùt§ŒuÅ}]±T©·S8ÀmqVøXWo™“P ¬[ÞÔÄjã¤I–æŒþðinK+? EO?ýT‚& “= i¿($‡ ¯uG~DöøÐ ^ÐÏ'ž¨ž�}@¤œ¥ƒN;vlŽÕÔ)Óòt5­,ž‰}©jy+='[Y÷’Æ©XÀ¢µÿ68ÖÆ—^z©z*Úð['Ð}&ö[Zôâ ¹oPH¶öX²dq“M7ÉýìɈ Ú:cwØ!–×M«vÛu÷ÔÁ–«æöxüñÇ«gŸ�Ÿ`. ½Óf �cIÞÞ{®šÐ5!e�ˆPYôXŒ°¨_N{±„ʾ;† ¶� Èï¨#-½éÊ÷Õ§²�õ‚ rß#Aá:·ÜbËÐËÆéQö롟žÁ¸Ì/ý±WÄìÙ�D?Ÿ­œìBï> C¨ àí±ß~Ó«�wÚ9É�:Ð"�Ù2[Ÿ€˜_ÀÿÒØ{hXÄ£G�Ê ?'†žÒÕž§Í 'œ~fƒõ§Ÿ~:Ç×ïŒÛŽcwLRpãM6®ÌŸ[n¹9ù@#ýˆÒc³`Á³i#ôóà ˜ÛÆE?÷‰àdü¸ñ©Su L¿yÿc�VÏ®¾¡AW(ÛE¿��*<„ âb°å4P=Ð DcôÏ>qæ—þëÏF`!éõÿ�7^O½=ý´Ósþw¤?!GãIÿè4xÐAWcF�‰@ì�œ?µ] 7>c̺_ëó|G[‡m䕹¾óλ¤�€¤ßC=í¹Gwͯ§ç=U½UUHGd%ûÉ®éßÄÐ¿ÞæûËç±ÿªkõ�A¨os„mf#ø"¶Å)s쫱Èxò£ô™ŸcÇÍ“cù÷ÒÕ§c²³;…˜KƒÆ‡M3çk"A m®�-c~&왟ÙlsМÐVKsëjK¤>[ìlÇ÷ê¿vÌ›÷tÎǽ÷Þ;ìýné�¼Û%Ù bÅçT1ëÃäÉ“SžöHtµ3~•?⯷ùÀ¹:µCæ™ùÄ~!/ÇÅs{["eÜo¹õ–8uQ&ÒØµƒ:$uL;j‡Ö毞[½É´=êŒ�±@ôKм|l;°{ÌñÏ…¿EÞ­MNȘ—§<öØcé¿_}å•$Z‘9[…Ÿß!|1{Ͼm>Õ|ñåZa”„j$ Å|dgø-s†þÀ쿹È^^vù¥‰…z#Œ[ŽÙøòO‘@‘@‘@‘@‘@ ¬„°lÿ’?ÿùÚ¨x™U½T0-˜D€c@âÀ 8jN{ÁÂg«™3gf�8}úþÕ~QÒ,Ü!W à”›#àô 쇂ؒ¯»îÏóõx1Õ '~áÄjlŒ/2p^� ˆ>Õdˆ ÏD½€ø•†‚$Óî“v¯;ä°jóá›WO�(#7�[>3:S„‘àå J@lìèY<ó̼\R†hZúz#3K=ý¢Od±×^ñ5mשּׁyèÁs�â ñå™úïK€…ä:56÷„߉ ~a5÷�§'¯DÅŽj4²óž C¡tœží»Ï>©çˆÏíäÊŸáù$Ó˜õ@Eæ°íýÆEVTËtí2!õkÚÔ©©ãôÖeÉÝE¿»(e»UTz!îÁæNÀ#!ȸNäd,ÚÑ“PŸê‘XÚñH¼¿}4†�ÆÜø¡‡r~ÉÈÓU¶Ê²TY}Áõ”ÐÃo�A<�è�=B~wño“Ügƒ§žzZvŸ´ ìðî¹$…nÖ$ìö~iÏì[ÅVÓñÁöwÍ›åßqçÕ‡«>¬=ä�\âDÖdæboøXúò�{î‰6«Ž>zFV„ÚqYøûvÆÏû"ãÝÛ|€KÃ98€Ÿe�`¸áëçÅÞ<1ïš/ÉŽ‹ÿ»G6ÐÞ=§�zz’þíØ!¸¬?;¨dž>©µtéÒLR©‚Ç�¡|†¤à!1~¯Åßû““d?ÿÔÓO渙s0†›6 ¿¢‚lâÄ]ƒ;8|ëî™ðÙ<*ç\}FÈFã`\a'¹©z5¿=ß\4—áÄ/œ�xC`7FN[ 96�aù¹H H H H H –Àÿzˆ”͑ݞ› Z"Œ"2Û¿Š@Yà\l•²£—_~YžN�Ô80@ø±Ç›:á!Qöè¹ë®;³ÌþäOJÀ|ÊN·X�¡`Ýïj°+xÒ&ä�e-2¼{Lš\�ð…2¸’-–1è7Ħ®¾ËžºWfKÙ² Ôp`8õiŸ d4‘Fw`óê«ÿ”Á‚ªåô*U6ŠåPÝÝK8 žTÊýC|ôVéT+ÌÚ¾kO3Кûøœ È[… °}xT �]ÆçÆ¿Ý�Äž’~€f‰9è£g ü‘w¾ìK€€„ÞÿÀ} yq2zt#c-À� _Gqd/,z¾š3gNûTo Û1ý¨ÈZ#®Œ‹Rz@M•‹ ¾«+H´�§À…>)Gîdë}~‹ "ùçœsngz…¤J ¡o2ë@¦1Ô'r"äÅ>TŸuÖ—2pRA ët ¼ôé$ÒÏí¶Û6ˆ¶©ÕQGU©ŽÐÄ âRÀ4*¥$—âo|°"ÿŽàDŽ ÐÎøâ™QÕ´wêd»Ä`­u…ÐC?XYF§ª8GžXúg,m0/È®‘¢Çw|þìH¦Ÿýì'A�=’ò·,Hðg,€gU*‡è²9aŽ:my«Ú¯&sTýüõ¯©æÌ�“„ý¦k#ËE?ŒqS D‡dm¬­FžoÌõóÖîy²ð¹¬ÓOËP}†>Ù¤Ñ~ûN¯Ž;öøü™"gm™¡1µ‡†y>bdØ…øÏÜ~%*É,/웇æ#½d @:‘“¥‘íè BSöÑЊ>n²É¦ÕCÑVûn™_¯G`¦RI�,™±Ó8ÒwËðT˜µ«?ùöó žÁ:�GšŸ}ÖÙIJ~Â.Y¥êQi¾ ‹ ¹<ìŠ¹Š´3oèç—¾tvê@uA+ýªyH¯T *ÿvÓ�éOø {5鯥›‹_]œ„ òGU‰'œ˜ó#ýH‘:$‘QH$Ëé´Õ'}C;vhmþê¹°Q·ß~{&Ž1’r–�›'ˆI:„¸Cì ·wß—œØsUe3c/$hûñ�¤¤³Æó­eüÚËéC‘aðÈû�‰©æþ÷ÜôÚœ2O%5n¸ñúl¯$"Šßó|˜‡¿çKá•i›ÆÖÍ„ý 96�aù¹H H H H H –ÀÿzˆsçŒc‚p(™Âú”´�ƒ\áèª�ƒHŽX@/ýíE¿ â癬Q}tÖ™gåç? ƒ(”gÏŽJ�í"8ý—s¿’§ 0‘—þñÒ¬šZF¸U ¤ LìMdZ‚¼¨‚øüç¿�Ù*dŠ€Yð¯âškþ”äÂØÇ&™c/ —Ef€’�L• �õ]0!‹¥êäâßÿ6AGW¢À“}pìµB&@‡`¡e)ÇÞ¦”Û»¿� hW&í¹À¥ê&`[Å ¢ ù¢ý2““'ï™íЙÙk®½:ÛéÝH‡I“öÈ bYùä„äø"Nö�1;åäS  @Œy«xTc£ReÛVGm³M{$‹ ¬¥€à�AôY¦a9 à/è@.i�ÊA–Ì8 ·}<Çò ÁosæÝê›1»à[ßÎñk|T'�=Ü-úmü‡GµÒÒ¥¯§ŽÙ¤SÀj\Îÿæ·²2HôûÙ³É6 ÙÀ¦€P¶É©?HšÓTnŽ¥9,²ñ¼qñ9º¯DŸŽ!4Èõ´°è¢‹®·{ÖÚvà ×'Ñ'àÜ"²ÉH)c{¯Àqñâ%IÈ¿öµó´›Gª¼~øÃÿNâH;:‚z}3vÆ�> d`*ðÎ>ûËÕ!Çò†q㓨ï»ï¾êÚ?_“sÊØ ,z®]ÝÝKR‡TZ�¯%1­Fä' 6W^uEê ~�‰ùN†ô�²Â H]ä+™~.¹³#@" ¤¢1ºêê«’€ðÿc¢�‚ ¤9h—ÏØdAdÙ%B‘(ˆ ¯�È ùÙŽž �-íZö®}d×�€N)2¿�âÆƒÞÓ[öÕò;9‡|h’²�è�wýä'?J¢Ð{TyžûåsÓΰŸæ»@‡�EôŠ^ ��Š–J!Q,7A &Íc¶ÇXÌ�¹ÓJ¿‡j¾¶ÏBZ9õIµÎŽ;Ž‹~ì�ä²J'‹H”UY‡ža`C—¥„à`ÌÉ€@|&~Î`�M‚˜J#È )Ù"¨;E‘Ÿëwâ}d:Üpc§ /CzÝuÖKGx»í¶Ï¨$[‚¹à‚ó3ººãŽ;Í('š˜MC“Rš¥b?5gAdøc{|,û!=#~R8ª"³œ)™0"¤ ©$wÂGîpxÒ‰Ì Î'u$²Lɧ\YÃR†“È1 :ÑÙ&9³ð" G†Ï3iø Œ±²ù[¤ãÆIPâÂ)b¨žqƯ2ÓvS¢täàOûä$Æ<Þ EÑè)S¦ä©bœ"ié ,óÀxçz‡V¦‡95¿œELo?IçÆwÉÇn»îžqY�„ƒÉ%dAæÂ‘?D‡I¯Ù=ÊCª‹‡ñŒ`ŠÂ#¼ƒqŸ}öm6Ú`£ŒÈ’!$š²ÎÊ›§¤ÅüJ­÷ ãyì±Ç"“ã’|¤‰&«äyƒ˜gŸñ,¤ò�Q=È'G)ãj{Ìî\·ëŠƒws¬}‹dÇp el!Ie4!\EÖÆH²)Ñåó‘FjÉ:²~Z"Ä»Z-xËêâÌš{]¥ú9-Îkaóz�7­CuÉ%§s\E}E“[tñ¤Ù]™!d]{g²Þ a$ÀF^¬#Ùúäx?¥ƒ€‹ä”$weyÉ”sÎïžáÈ"Fô 3×5k~ äÀ÷“ôŠÏÍà+a½2²nºùÆè‹vO:V{Ä÷ÕÈ/ýœúÁI³ý‘È ra\d&"—{‘G};Ö—&ìæÁ\Ñ?Êìdý™[¤¢ùíG~”÷ åø „ÃÞM!`eKÑ÷Š 7™[ë!¢t–ó¥dNY×�~2õ¤òz«—qÏ©uÈÉ·nÉ ²‚~$È1û]HvÈ¢†îÝ22_6�õ±ñÆçÜyÿ˃€¹(%±fï8ú1k½j/kçü ÏoGØ}eÆ(¦#z™OM¬_|±ÔÏGÿ¨ ¢bÐ5»|d—,±Ô\¹>5.ëù‚ /Èñl±Å–¬@&ÓÏ'þø„|¦þe+Ç<í·ßþI®jjþB”cÛoéGc×ÏH!ý*Sa4šû]p¢§¥�2‘pöÙƒ<(,t'"æ‡a/Ü™`²¾¬ïOðÉ�ýÉ9&É#™?º¡üÍ™¸9‚*í{Ž}²=Ħè‡0l‰šÕ~…ØC²Î(áBØXó�õ|PdvÊÎeÒ=æs¦8]ú>#ûš`"Ší";ÚÞwÿ¯§¦ý Ñþ ‡á!’™VöTvÁP„‘L'%s²ŽOŽ@à#‘¥$XE^6ß|ó$V͹{^e½‚�íq¡«º #DìœÀ‘,×U…@!P F`ÌFƒÌñc(Èb,sÈ<€á·ÎÛ>Êð8!NœhB資~6]�(ç1Ç“†" ÙðÉO~*ÎUÙ–Äq×W!� `ÃðeàpäeÆüðGǤq3qâŠù9™LœLÎÀ¢‹.’=úŽŠu*ÃE_ŠŸGO�;î¸=‰,Fͧþt:ˆ $Âɧœ”Î:£G–Ê”)k%a` bõñ¢b …“¿ðÂ�_#%Z;dTd8Åû? me^ŒìÍ™ßf›m›���ü(ç¡'‡Ù'�ÌïcœHãt?ÑtÜCý\: Ñ>†ì•ã¬Ë–Rz¥äaŽ\"vÝøøñãší·Û!�w$ƒh!²‡ãqøá‡¥ÁÆß$æï3A"b`%ê¯Ç†ù‘A¥/ÓÇ## ÀHUš„¤y&ŒXNŸòªE"ZWÅÃ=œQF¥&NtA$íñÑ=óûŒJÎ�(¤ñJµŸ™Oˆ¸È�PBçò—_qY~λ( úðŽNÂDöÊÂA qŒ‘žÊ@.z$ 9YH›‘\-a„Pá ùÄí‰lHÏ”�„0B~*­a|é _ÊqÀ‚Ã�QÂ0a„X_…áý™, â˜!¬!8 h�TôÁ~0¿¿yô–’Ñ¢¤IFËÍ·Ü”JÖœÌRÍ»"õNýù¹<åÒ adenÀö´ÓOÍyÙrË­ržºKd‰YƒHBsB·h²kúÃ8õþpj�÷~tçß•B×|ÃQi‘Ïé CæûÁ‰ü÷#'H‹^äqðúB §q·µé-ù!7Ã9~Ý„2ù`}"Te\¸dƒ RÈ—92_{EI›ÏyWE/ãžSë$#áÿôÓ�²R:Ñ:‡a甸Nɚ̺pÃpŽá½uœªH¿Ÿ{Þ9)÷‚2”JùùòË/ŸÄ.Ú÷§?�Ü'‘£9·¾n>§qKçÃñÛßùVÅa¤*=,³‚ z?ÄY<ö¸cS'Ø��¼;î¸cœøJfòy&™“E¸ûî»gïξ÷ñ,:4†Ÿ�kÙ{C:âs`¿˜ùi”¤]}ÍUof„ú™C³© ÊAqÄ‘ßËìUzù%ó )×Ïü)îsèjíĩ͸C�Ë45?ýè!„y?„‘“2ûÑC³Ú¯ôXRšL_Ë$¶æ¿üÅ/§¼Û_سÂIÐÉ÷á$ÃØ\²»Ö\sJf’û¾ŒWD3âS‰± {„Þ°>á?aDß³-Ý_‰¨S#Ù*Öãæ‘!ÖêGÁ6¥™æKF<{ ›0B¾ÎI¤ú­( �B ˜�@FÃF­#�ÐéQ‚ràþfÔ–ã�0ú^ˆ÷†± sD4w—]vK#œm£gXq5œÜtÓMÃÜ%£í g†õä“™E0|D p½›íú•0˜�­#ѾçìþÙ: £™eÝ&rãäð#ô|ùêW¾šR¬%®,Œa÷»ä’‹³ôJ& ˆQí> YcU5[F„\”»ûìÐ.ÄÁ'>¾W~Þge†¸F߈³/ëHo¨ý tÊŠK¤Uæ—÷>/2Á拦”‹ !Ï5Çz!1òzzDq$8y/½ôrFÕ-Igm××i×èÉÄ¡UÆÀÑëÅQe¬ÊhSR£)ó�‘ Ã!CúIÿGÂ,GÒ3Ô5_Œ‘ñëßÍq‹oj6~ãTú¥Äyö`Ì�²H6„£m\Þ †ˆòã�þè‹9N„ã""˘–�²oΈ¥¤æýˆ#�Ȳ pÚ12©^‰±þ8"ÿWDÆ‘�ó•/ÿ®ü(cqJQê]23¡'ÂHfŠ 2ëPF™¾OÝ(2˜fvuäöŠr{I’uz‘P­¼‰d#—½ßñ'„?õôŒÌœM33çáøY?8YçýÈ 9íE¯/ýŠöŒ&åÆ+ Oç¸FK~fVZÒ­‡™ô¹‘9{²Eo;¸ŸyÖA�‹Ó?’ïKß¾öÚôžÆ=§ÖaÛCËúA(’ã$ŸŸ!É%Éüp^énĘŒÄrú§QZƒ ñs%ŸÖ‡ýŠ~�•Þë|Òmô€urâ‰Ç‘Õ‘_xoÞ•YssoM}ýÿ�Ø/»¬u¿if–"¶‘ôÈ ºá‘¸çñyeÀöV{¯Ï˘!Oz -¿üò©oé Ùsb¿£¯•³’“³Ï9+ÉnMœ•>ÏÿS6t‰'¤îÝ)z·ŒònŽF:œwFí'¸º†#Œ”î)möþ—\2r=$¸Ñ+aôÍÈÐ¥û»{MŠ`J?zhVûU¿„œ�Žä˜�¡$•M”¿ÂPs±»Øe�L£ô2‚ˆq'÷‘I™µCFäéèþ—]vi–öš±è+Öî/¼ Ù}dâÅç~™xªnÂÈ:™“8æ ë·B ( �B`E CuRý;öq±a+�‘âωXrÉ¥ÂX˜½N §xz³[dqˆ8úÒž»•'"*ŒÄñóm·Ù®x›ð‰nqÔYRÅ��ül¤6#~ü“§Á » ã¬—#Ý„bF4ŠcãÙzú8…j• 8 ý)¤M3b8ŒùyñR’Oî-u^‰FÆTk¸¼íegã?z%Œ�&ÆÉˆz(œø~õ+_K‡†qØ:4™Ñ™! -½Q¼óž‘Ñ#›H¹G! £ i�C9*^°”„ÑŒR²nƒ­›0b,Ê0RÊÑ+adü }½-”*‘Y²^vLÆ-" Á#?¨�Ø»SÄ~jÈ&cóÙgžÍ¦Â>#3`ÑE‹Þ$kd 8# ÉÌH®6óážxÞ9çž�½3¦…¬ÿ62"�QYò6ßüI Éò~®á#—ÒM¥û¦#Ö!æÚ̆ó÷Žün–�tFRúOŒÓÉ�uÇIûê ¨[~Z‚�ü(�DÀö’a”¥:ñ�4ðãO¥‡EëY׬£ü~�YÞ_&MÁ÷ÞkFÓîŒXw§–pð9úƱϲ‘Ñ[m¹UŒí7I�'d!9©œ<ï3"Âh!k=v²£%?½F¡¢”1õBè¹¶ô£¸5ç÷Ìè‘ gD„ÑœZ‡²f¦Fv …ƒI)WD #Æ�Ÿ;K^›öhêxë¹›0BÞ¶úy­7QK¨v¯�átÀ`})3Á>x>õ�Ñ›Å:ùI¬GŽ´5âs~q¢»/„Ñ7ûz öS§Ží=àçH ä–20{ÝÏqwb˜ÆäÞ[gÛ“j‡vHýéþöÂ9±ß%!ø߉ѬXùï¸S–Û£ì¯gœyFö'Ü?2‘�™>#ýÌßïFÃàßb;a„l{³„©=dž{#Œ¢ô?£6Cwã�6ÉŒ`„~?zhVûU¿„Ñ`œÈq›©KNÙ.D,R_EÙßô‰þ�²N�À9\†‘¾mÖ19²g±³ìÖJ'ƒ©³h@7ùÜ1Ѳ€Þî&ŒÞsÇVžêÏB ( �BïYˆëQçƒâÔ¦u"#§ûÙ•fï„§£�>*ÕÕâ µ´a‘éó£D  Ù±”zÄÒ§›0z,wQH�Þ2Êž\&JrŽ ÂÈûÈø`t=ˆæ g[*2R†…Þ?J Aš º¼çK/¾”Í~eÚ8h�µ×N£EÓQëó�áÔÔUÆ2ÁO‹1øSôTäk«-£&Ʊad�(kêçê•0ºýöÛ;ã ã ‡èúbd À“qØö,�}ô;†ÖÞû$ÁÄC–Ãà»z%95¦u Û± v€ZˆôVÏ’–(k £[n¾9çU¯«}z"Œ6ÍL-Þ)??%ËÖ gß±¸J'N\1çA€ä¥4ðž)aXì6£t®û;òF–D±e÷�=÷4N2êÈmó+ÛéÅø bp�hŠn<œ¸Y-nƒÿ”e މGØÈð2ÊXôX’Ñ¢çH%Eb1p•¤ •aÔ!B–K§~Ÿ½:‘{ÏTÖÇY³¾{Ä÷Ò‘ì&Œ4s–‰ÇøF¬2Øÿès_H@º¶òÙõ÷qÜ»õÕ aÄYÕK‚á®ôP©ŽÞ$B™d W‡0x)Çørôa�§VöÇõ2Ñf4ž?ž«™uû}äš‹cBƽŸÓØ8Ç›m¶Yê Ù"Ë0)NÉ~ä„|½�0F{]_£%?½FÃéN™R.ó{Æ™¿Œ™˜a4̸çÔ:Ì µ Wdù…@n/½äÒIq.•PËVõÝ„ÂÕ>Bö}†~ýBèWzž~%§.ó!ËM!rb/¡ Ÿ¢¦;Ãe8}IXëp<îø5O<þDã(ur.Ð"áro{Âè[ß:<Ëj–�RÙM‚ÌÛ;zGÉ€ò™$�bÍ>}‰d/"|Û½Š>EØ }õÜ/ôòzh±Þ�öçÄ~×âsUdŸýý£c¬�Ò³å—_>ƒ¿‰w"‹Êæìßì äšw¶—ŒtþFÃáŸàÆoÃFK,±dG�y�zl„zÈ'a&[ÉÚA@~ñ‹_Îý„,!ÏØ5ÞCÀ¶—’€K–�Gvh?zhVûU¿„Ñ`œØ€SÖœ’v‚R ÄÕÑ÷/çX4 –Å;i`Rf»ÉRBv•aÄv$C—Å<È`Ò,^O5öáÊ+ ƒ-î�˜³öíšÀ#L» #Ï-é WœËÿ¨ß �B ( �.Þ³„‘S,lþ烣„KÙX÷e3fø rŽ=öG™%ÂÕµéË@RÊ€øÌ!Ѥ7²¬œânÂH™’I¦ÀÇ÷Ü+›0Û˜[BŠá¥ÔF阒œÌd‰¦Ïz�u–f¾—e3_Ǻª‘W§”‡‘âJÂ(œˆW×ÝaL"\ KcðsåA ^ÑÙü3þ[Æ ÂHÊøÙgŸ�«zŽ„f»‹~®^ #åZ�¦ÅÆys^tpâÅx3V—®’xÀÝI\š{ˈz9zãh˜ýN Œ”®!©D¹� ¢‘â4¸ÕÛí·Û! CÄ s†÷Ö3�!<3ˆ·Ë®»¦6yÕÕ’àƒ 5§C¿Ì·¨çkño/Çsâî¸ãöÄŒÌ;¡o»m·O|õ¹É…ÄQÃú©S🖆µùÐ\� ",ÍÛé¿:=Çé]à0š„‘cÀ�E.��ˆ7§\qT•¶aM£Ï<ëÌòss8ËõDWK(xŽ5¥7?ñ‹uéz>œm%eGbÁŒ°š„/§[©Ì1_ݧ¼µø;�§}Î3ž³ã;ÎxÎÚAöNí‹0R¾Ó�œw7a4œ<öJ�–üü¾ £áÆ=§Ö¡¬AÍþ9™íN ùVâ·öZëä~cNɨµ­ç½ÞM9ý2÷‘pPo ýj}|ê Cr} +[ýêˆtÍݧÁñJ�´�“&× Çøµž#ïaN9ÂG|ï»INMž¬wßfÍ®;ïšD®uBG)Ÿ¾üòË›#£¤[“íüœ}gç�Ó1ou™?Ý·³‡½’dÙÔXÈ&:Í>+snß}öËfùÆC·Î‰ýŽü# ÈÛ1Ñ£I&'R|ÁãP�ØÏõZ3NßÓëŽ=�@�i?ó7Z„}ÜÝly¤zH­î`YÕN½d7�%X˜7åáß><÷?¶‹Ÿ#ŒLýè¡V_’¥¡®~ #89‘Ò~B_“½m¶Ù&2¿7ˆ¹]9�Îa�õ>c¿�ÏÐ ìA8°‡"ŒŒÖ!bõ¬³Ï̃!ôâ³_‘¤” ÇvH";2‘¹Ý„¹ ‘EÆâj ¿ü�ú­( �B èBà=GÉ豑s~7JŒœÊµÞºë§sÙfµH{w1Ø�–qý ×Eïˆ'Óayuò”&Æ«‡SøÉO~*#�î'ÒÚM݆%ã{�ˆ„î²Ë.ÑceÍÌ6‘ÁIÔ§áç?ÿY›Oä½ZÂÆ)iœiäNã`˜*ÁÚhÃ�“XâÛè=Oó…ˆ2ÇããµÅ3óÁ÷9zúøùëað"»dU1j¦G)�þJW]uU”,œ˜½vD¸<ÿ£»ï„Ñ*i� ÀDÙÔ®9Ž)Æ(g\Ììê•0’9áh—\zq^;í¸SD§7Jg ß5œ½yÎ:ëŒì#Áh�¼ÚjA}¦Y}�Õ#«èéhî}Õ;†0’¹ƒüæ·¾™F:#QæØ®QºÈÀæÄ9Î[Ô™<*[3/Ý„‘¹•΄šÒGM�7Ü`£4º9~d€s‡ˆyêɧRœªƒx\$dÔ)h"“7!%â«”o\‰L5ªSë�Ÿæ×<3@çŽï{óLžýê’àˆe­)þ[ãwòé¤3Δì Û‚Ä9ýôÓRÎEåG›0ÒþÍ̳Èâa¸(ˆ– blY6=Ê59xJ箿þúÌRr’Q/F"½2—4­þÙÉ'G©Ø¡3ÖÎŒ†Mb¼ˆË@)q¦+`ÂØ7ÛFÓa’×k¯¹¦9)ŽQ–Fçh–+ ÁI€ vmöÅ¢kZ{DF™l9½Å”8ô“aÄÑêGN¬÷^ä ÝKFÊhÉÏœ&ŒÞB²—q÷»鈡.Î¥Þ8Ö/}½Êª«DFìÁYæ,h@>îð½ö2º #ëÁwé=¸æ�0!z­|${å)LýëCæ)]„ìt|ýÀÀ¤Ô7þÞË|ÒWœë<ÄáÈ#"Ãâ¶ÌPrä½Äj“WÏ}C¦ÚCdzb=Ð ÈSôBÎ7‹cÅ5óÍÞ0‘ÉâZpÁs Ùÿè"}œÎGûꫯÎ5-`sà¦.£³4ÁÉ~·Zì'½\È�7G?#:Ó‰rÖ¯l§\ z¶§ðõ;£EéQ˜Ç¹G3ñ~ôùxó´ÒЩôè'öüDf“ÉR¶¿(Õ"K? »BV›ÏØoF²2ûÑCí“vîú%ŒZœòtÙÐ×Ö— ¢½RùûrË-ó=.æþ¥´e†j>ON� iÄ>BàE­4°RÊ7Bígq¸�~dk®1%3os?ˆý$¶“F�{è“Ë7âTÀnÂȾÒŽÈU:ØûûÓ;#«Ø¶oªÒ‚Z…@!P¼çxÏFW{Ü�ˆ¾¢yò‰'ó䨶ß!7ìLó�²2F4CÛ¥L„¡ÍèÖoH™�ÍùâÈß 7Ü0OG›D€k0a$*âİep „+óÁ‰Q²/ôòÎÿ›o™YŠÿ¾/Œc¤‚ãÀŸ BÀñ"t~‰t‰ä1ô5}2JŽ^x¡lú»c”¾-ÆÃ[I•{x¯�I]e•U“LàÜÉn‘Â0Rʶiv2 4Iæ3\~0Ö•H¹gl0ÎgvõJ)•2NÔÏcœŒ}ewˆ…µã}4nF|Ý}wu¥D~.G¹Ã¾{ï—Fš9ñýwB†‘>)pBp„‘¹1—Æó¡è-eþ9VS#R޼#Ä!Yê&ŒÆ�—¥ˆ=%%ÆmÞ̽ QyÏá "Ü8&²šžF¥�ŒJÚM7ݘÆ''MæÙ.;ïšóÌIât2êÍsG†ÎJóLÎ[âtð\w2DIÂè„�Ëôy„#Q¿Š%BFÈÅéd÷Ä»‘‰õâÝF3Ãh±0p=qåXq² úšX­9% àE2ó‘ÃwZšwGÂôBYc êk®½:›Qß~û¹ž' LJ e“YIø„a¯ŒÀ‘ßæiß ¢W�ò!s@wüñY‚cí Ä÷7‹¬Cý1|ß÷dNX ÞOi]wæÄ 7ÞØaä™ýÈ ÂHiì¬äQ³Ö^†Ñ’Ÿ9M�¤—q÷»•ruÉ:;9 :Ü^´t¬iÌš!ÛôÊ“A@’k¥ŠwÝug®ÙnÂÈ>eŸ¡qÚ©If*KEhX«~þ\>’t Ò�¬"’Ö[oýÜ4›îe>Û’<òšk®Nr‰°Ù¦›go¢E=+öŸ±çɾá`Ë,¨ Ó8Ч‘$ÆÚC6Èڤ딑ê vÞùç&ÉîïÖ¹SW_}�Ô7wÝyçˆö;%›½\öÔ /º «Ûn¿5É`ߣk•ÊêÑÖÝT½ßù-ÂH Bfò¡=¤ù¾Sìèi¸ÃÈÓ¤ØÛæŠÿÝåÇnY6ìdµ²Z„‘>ýè¡áÖI¾HüÖ/a'$ œN}Í>³Ç(³Ö˜ÝÚ°/  ’Œ`BÚV1öÝwûhô`Œ€`¬™á2Œì¹l­ôªsÒ™uüþ÷­”¶¤@Bªs Û�±§;0ãÑ$¤º #ÏèÇ×§G@*æOéœuȦÚ~ûíóýÙw2dë* �B (ZÞs„‘Lƒ3"Å×f+û'vç4f5Ö�£ÍÀikÕRÒé¿:-7Wàqô6Ûì­#ºÝFŽŠ·#xK"8¢QœgÎëÓa<ÈöQ2‚¨Ù`ý “áà9ÙçÆpOÿåiI˜Èjb`K{‰eP‹øqDx9ÁNéÐôzÉp@:}-®ÍÌ OïN—1Fµób3º ‘^Ù!²­<_Ï#Ò �Ö1ê'¿­Ô'=Äo½F>×=N†æô0fZ# V0E˜èƒÃXc”)Üfëm²gN7ÞÃõ*i_±×’™~z!’ÇÅiW'„ƒ^7¹åB¶t �­†ƒ¿>!ƒ #$£L•«ãû"Ú>˰DN®³Î:™}Â@¿êª+ósžE&½ï{ÿû'© §ð2¹¦=6-KR>ò‘]2G´Vª»ï‘ÓiÓOÙ—¡#à ÖÃF�y{*3õ~§”‘2ÄÁ[=ŒbN2—~D”l«GùM:£ëÆ{�&a„ØjËûd,Ükuúôé‘%µH®#ä/L²­døø% ¬¨͜`Ø#¤¿ §I¦†žTK.µd>Ègx–wB$ïBšø*¥C~%¾�\‚Rˆ„0"ÖñK/¿œ=³è"Äž FŸåÀô“a$Û¬9Aõ"�2 z!FK~æ4aäT¤^ÆÝï:$§C]SƒXÖ¤™(ØMz’˜˜¸âÄf¡Îr\d£Ò®©÷ß—z»›0¢/È»,F%6Ö"™FÞ(±YpÁNþV¿*Yµ‡Ð¯Ê£c:{šÏöÝ•`#ÂeÝtó�‘‰ñJ8Ãï ™^&פÒ-YBOG ¹GøÈxB:è( æç§ž’:É:‘Õj<Ö+�ˆÔ¾9uN4’J¥߄ŽAž�uÖ™1;;û][ ÔŽc¸?ÒJ¢pgq‚àuÙ“?§£ hì,(äêwþF‹0²gÚ è±~ôÐã�OKF—8m ²!ÙLJïÙ t­¼ØWô¡yE¶$avP?zh¸u’`ÇoýFƒqBüÈì#{H±eb,šÎ#}�žz:ÑϲN•ŠÊe+‘á2Œô³„‰ž‹2µd˜ ÜùΤ�6CiîüŒu _ëÀÞÿ6Âh^„ÑÈ÷}½õô²¢W”Å[+ûì½_ÊoÚ¿¡ê* �B (ZÞs„‚…á-óCÔßÉ\ hF­¦ÏëG� F,rÇÅéå0( ;æ˜fT�¡:92vÛu÷Ì2àø);s &Œ4ëäô-†’>CŒ)†€Ï1àœÒ%û°m” qö‘$4%B2ˆ8E7iÃ@áôÊYΈn¼÷¸øƒ…±±y4y^+²˜Ï Ñb² .8?û 1<ë>ÿüó5ãÇ�Ïq‹ û¬18ÅMf„2%GJc8ªŒ™>{ïµw–2ˆJ3 gvõJÁþm㌹‘öïÄ­ðŽfüÿ·Ù F™�†Ï[o½u:MŽÚ;‹0ê4C–i!­ýªk®j®»öÚœ7óÊA[8úL-"ã÷™§ŸÎÞMðíÎ0B,2,o 2ïA„pø�‹æÝÏÖ§N“X)ôHýŸÌ³ù†½~VóN˜7§È}8^HM†í–[n•SF0RbM< Ãá»ÿ~ûg�_C]í¼1ÐÏŠÞ@d”³èÙÆi<äˆqm =óéç”Ñ$ŒdŸ,�K/»$×õ]wÝ�ÍÏ•×#r•Ì.kúÙ ï8‹,%€»ìÒÉ´š¬'ÔйÎKk¶æÁ¼*SS&àçñÿ�¸+N“u¸n”œ!öè‘7|?2'î¹ûžÔW„.‘µCMz}Ñb-#•öé�äû0¤ d8öC)ìGN ¯y„s/„ÑhÉÏœ&Œ½½Œ»ßuØ6g‡s÷Å1ÕKCësÎ='³Fçy@X’m„£ÌXÄ/’ûõ>tF2"èW6çÙ¢×Wg õ%wÊ•=_�„Ìm¥”²edÍ*ô2Ÿí;Ûs�9²ˆ.¼ð‚ °(—~-HSº:J¬*ÂÕ~µÁ¦n²�ÑA²rì=Ö™¦óx°_YoÄbSv&ƒV†”&úi@Ž#£ëŒ`¿³örÙ·íé2¾Ž�Cè]—õzÀþfPnt «ßù-ÂÈ|ކêØC�ei¯@–yöoö {[Ð sdV¹8½+k:KÒ&õ¥‡†[' vüÖ/a4'¤§uõ@vô}¢ïéyJ_i9re½uÖkÖ R¡cü‚,ÖÚP„;�îC¨eæïõ×§�õHȹûY$ϲޞ�õ${Öúé&Œü¼}ή¼ Ö§5vÃ�×çþ·O"¢ZÀ£ ˜¶¸ÖŸ…@!PïmÞs„Q|±Y‹ ŠÊò‘á"Hv�zò���t0‰Ãçù0Æ/»üòæˆ#¾›Ž±M]YофZVŽZkpº7�!s€¨W Ca$ŠêÄ*2GuÒ¤IY²ÄЗ¡Ñ}!nD�eF1^D’e¬pbi6öe3ëdµ0Ê6Î,#Ž„wdÜ Èô[¸ýŽÛÒ˜F~“ŸÉ á‰V‹žé³Ãaõï2_.¾ä¢4–8eË/·Bó™O&�=g ûÌÌ.ïçÝEÒ7ÌpFJ‰w7wlïÑŽSTRª·¯Æ‰T›7ž%ez™0Î&‡“ñÁˆ|+òžÃ¿õÖ[›sáâ8!½ÖŒçˆæ1¬º/ÄâÍço <¥^o™JÞ«ÛÐGZ�= ¦Á ^}õ5Í)' LÊÛu2BîÊñqnD·Øb«¸ÏšyR ã\ ‰ˆ®þ5M¨Í‹ûy¬5h½í¶[Bæ òbÓ|�öô2s$3èÊ+¯ÌÌ'îéù1>ÊÕà°ë.»†ì¬œ c{2´ƒÊô× sÊJÈ•9V'›A~8�ÇG&”ò‚×_#Ê&×jˆ¦­ä{VWÊW¼±%K ¾ b„˜ñ!·�’ÏEY!<£zd)¯$ÿÒáeP)‰áXèñÅaˆ5è2ÿN†2_¿ˆ¦¾äw`Ò@â¤_’~W:wÝ™ã7¿2š|�ŒˆöËìBÌ"´Ì»—1gÞÉifWÊsŒ�Þ¸Rvb8¦¢´/Å|À�ºXd®ò�U³Ôlå•?�„ 1º¬9kß÷•#pl½ó‹ñ>.k©¬ôÁ¸èصÄ,'ºœÈ›1ŒTN¼c/òH�ö²¾Úû!ú‘2§daHGX§Ûo·C:n½èʌȗ2å¹âÅdÖЈwsÐ˸û]‡ðê2gJdŒóÒK/M¹i×¶¬1òÏɵæ@ôR"CäZߥÅ.úiDî�ä€~%—ãÇÏ�عý —J«_é¹^çÓsè=ïBß]z‹>Ò»,÷¬xý'ûO†®÷^e•UóYpv9ý,I–{îɬÉ{ãOÿíß̓þ* Æž·ÒJïÏ,I—“Aíƒ~>Òýn¸LÊ|©®ß8îH1DÉéA´ßú �à=ècrc-Ó/®~çOÉðì௔o¨õ@Ÿ¸úÕCæVo:åÏ2Tô¨{â‰Ç33©·|ÈÐúA–Ó}…p\(N’µ÷ì°ÃI¨÷«‡r ÃüFÆ,Ö³¿{§ZZæ¤�ç‘âdÿ%ãb¿'³�«¾‚-ì@¶‘ëÎ;ïÌPå óÌ;OÈÇjÍN‘�fmºÈ�¬>vÝõ±nj+ä­{¼/‚;ÛÛÿè%¤œ=Å8¬žÕŽÈ&ASÙåt‹Œàí·�’´Ø—?Ép]…@!P…@‹À{Ž0š>}z6«´a3¼6^ÿ’á°rmØo|/§±ëT—£¾dA·¦qŠ\:èÀƒróæ2„]ƒ #Æ.RI‰‰FͲJ8ŽÞÃ3æG“±ËÙ‘ÚÝ:ˆíuæ—²W £Ûw½»ï�?>Éïë½e3 ®ü;È�k|O ïæ»Œ�øažÄ¦AÙ…“¼”Î)UC$pÀÎ:ç¬È޹&Jîo&E“éCr¼íýÛwêOF•w稈¦½ÎÃÑ8&Ã�SfNŽ3Þ©&‹cÞH¿F¨Ì™Q²EÚqzOÏa{ŽÒ¤×ÏH<“Öaoß0ôyÏ1Æ—ÏwÏ#¼uÞÁ<-?G>µ¡g“ ‰¢Îx#a8CzmÀañì³Ï¥ÃƒttšÛ¸èO°@Ì—y‚=Ñ»Œ�ï/¹ä’ñ‹¾Íá@ppÚ¼³ï¿ã‹gÊÑ 3%F¼géså½½³Ò&‘xeŒæ”“;ò׎&ÒÑ�úþQY¥lD9â®q¨—ëåx§[æŽqx_D’oáxÞ„ù&¤<‘WrgÞ½·w€½qÁY‚5è» ïÖuoD˜Þ_­¼g¯…†më¹rê…¢‘7¼WY|dœ +ó.kA–‚ù’¹Ö®÷áÆÜʳõƒ(Ò‹EF�©Îõgã2�­i߇ù6ŸÏÆ{"›|ß%Ê÷af\í÷aä2þ~p‚{?r’/¿ÍJÍa/뫽_¿òc]%.í: ü�cÆÛ‹^€?Ùƒ¯yAÑ/Ö¡5ÚÊŬÆM‡�¾-.ퟭÜçãA0’]ëH!}%«cÑÅ‚l TŽKŸ´û‰Z=kœÆ@g! žùsïlïšxÉB$¿Ýúµ]Wð™™¾lß—Þëè¾Vout‚y¦{éI²-ËÆÞµgó…çÛuïëÌ{ÀBv•ÏwÖÉb¹§XׯÐÏ~g/éåò²¸ž <”¦ÂÓ… Gεz­{ÝÃ~¤óç½fg=Ñ}C­˜»úÕC0vzlÚ´ÇSæž ¦ÇÍ�}†þ³ŸÁÈØý»}G–£¹›ë$¿ÙñäϾr0�ƒ`ÙÎóHqz…ÎX3)‡±^èë…bvÛæÌ~¥·YX8lŸîVöë�üX·>Ï…ok²e ÒKöTû˜5ãyžÕŽ©wÃnAR=:1)c›mF‡·ûN‹kýY…@!ðÞFà=G žn´_®nƒÂ†Šìa|¨1W“®tGƒb½‚�@ÛãcÑn�÷`tg î©31ŒF”˦̘è~nþ`&¿1Œ6ß÷‹AÖ¨3ùjŽ“¡Âqpq&|w¨çëuqj4I%ä$#öÝw¿¬ÑŸÙ3Fëgé8D$ÓÔpÚŒs¨÷­çÍÉû�/ã�v!ÀŒg$×pòÚÞËÏÉ †«�çîÏùì5×\Ý|û»ßÎìMÙ;M[·ˆ¨ÿûÛ�öôgû\ãô|Ï5o½ÈeO˜�µïÂÉlßc¤x÷Xc´–üéyÆ9;ãíþ¾gø~¯ëx¸wš�o1š•œÌêžîã—«ŸõÙ¾Ï;A~f5f?ŸÕ¸Ûñô‹ïàwéèÅ·2DGª;÷¡_;å¾²ŒÈ 9ͫũ}o÷çìöº­¶rá{ý¾g÷ºß�æ˜gv¯ïöNØ×úÕCÆÓÚ#ô—yõË<õrÁ¡�ã™íW½ÜkN~¦Åé-9œ«¯}|ð»º/9‡Âfv×âHqlÇå}~ŸûÏàñ×…@!P¼³xÏF¦Çfëê6–E‡Ô¡ßvÛ­ÍÔH¾ÿ×SÓ©�q¼¹rGwK‡ï¾fEé#3øyÝÏí¾×Po ú^÷¯¡>?øßŒ×Ìœ ¥d?‰fÆR¦E•êí´ÓN™z=øžsâ¿Ûqº÷ìŽqN¼O¿÷ìÏ샃Ÿí^®áä¦}–¹æÿ�‹R�Á|+ú3vøaYJæ´@D¨R>ÙF³{ynûë=g-ÆÐ/ÞCáÐŽÓŸ®Ùo¿ßê�f÷ßZŒf&'½Ü³ƒ^>?Ügº1™]<‡»çœü÷Y�{´ðíC{OÿÖFoÝÇ>2{A‹î÷éåïžÕ>Ï;ÏÎzl¿Ûþ9»ßoõœ÷œÙ~×Ë8Fã3-îÕÏü�Æ»¸G‹«?]³ûNíxüÙý]ïõjïѯêõy#ùœwìþe|³#dzzf‹�Ï�ô¾í=fÇvLžÛΟ¿×U…@!Pt#P„Q7]G9�F�£÷ŠÞ8jô'EϘm·Ý6ëËõ|@¦t_ÊôY¹.ȦSã iÙjú×_oƒ,ç’öûn¸²‡ÏÉ'EÓчò„'¿èÅ´Â ß ¯_ï8 Úˆ¦¦æG}T¤Ã?ßìºó®!£E¯Ÿ‰YZ1‹[Ô� �B ( �B ( �B (Æ0E 3¹š._rÉÅq4ì=Y’%MØ NerBš&Âmï„î[豢׃“m4+~1$$“cwg¯?Ä»áÒÔòìèa¤¤NCÇ•ãý&e�û»áýëgŽ€R e—NL:ãÌ_fY€ £ÕV[#IPò^W!P…@!P…@!P…À{�"Œ†™{}‹ôïq’…ãN5lÖ¬WCUM‡;EbúôNsQ§E9ùB]¾£��ÔÔÝÌw˜Ç¾cþÙéE7ÞtC’ NÌYv™å²ÙbÛDõó¢õ"#Ba¤÷Ä#�<œ§ÒIƒwDµËêe0"HëK…@!P…@!P…@!PŒ)Š0f:9ÓNÀzùåWâƒÎ“M¢&3;E©Ê}—®Y´zò æÍ‰Ý§h óØwÌ?Ë>‘)õzœRæô&ãn›t¾c^²^dÄè]@NÛyÖr¢szÝüÕË`ĨÖ �B ( �B ( �B ;a4væ²FR…@!P…@!P…@!P…À¨ P„ѨÀX7) �B ( �B ( �B ( �B`ì P„ÑØ™ËI!P…@!P…@!P…@!P£‚@F£cݤ( �B ( �B ( �B ( �±ƒ@Fcg.k$…@!P…@!P…@!P…@!PŒ E� Œu“B ( �B ( �B ( �B (ÆE��¹¬‘…@!P…@!P…@!P…@!0*a4*0ÖM �B ( �B ( �B ( �B ;a4væ²FR…@!P…@!P…@!P…À¨ P„ѨÀX7) �B ( �B ( �B ( �B`ì P„ÑØ™ËI!P…@!P…@!P…@!P£‚@F£cݤ( �B ( �B ( �B ( �±ƒ@Fcg.k$…@!P…@!P…@!P…@!PŒ E� Œu“B ( �B ( �B ( �B (ÆE��¹¬‘…@!P…@!P…@!P…@!0*a4*0ÖM �B ( �B ( �B ( �B ;a4væ²FR…@!P…@!P…@!P…À¨ P„ѨÀX7) �B ( �B ( �B ( �B`ì P„ÑØ™ËI!P…@!P…@!P…@!P£‚@F£cݤ( �B ( �B ( �B ( �±ƒ@Fcg.k$…@!P…@!P…@!P…@!PŒ E� Œu“B ( �B ( �B ( �B (ÆE��¹¬‘…@!P…@!P…@!P…@!0*a4*0ÖM �B ( �B ( �B ( �B ;a4væ²FR…@!P…@!P…@!P…À¨ P„ѨÀX7) �B ( �B ( �B ( �B`ì P„ÑØ™ËI!P…@!P…@!P…@!P£‚@F£cݤ( �B ( �B ( �B ( �±ƒ@Fcg.k$…@!P…@!P…@!P…@!PŒ E� Œu“B ( �B ( �B ( �B (ÆE��¹¬‘…@!P…@!P…@!P…@!0*a4*0ÖM �B ( �B ( �B ( �B ;a4væ²FR…@!P…@!P…@!P…À¨ P„ѨÀX7) �B ( �B ( �B ( �B`ì P„ÑØ™ËI!P…@!P…@!P…@!P£‚@F£cݤ( �B ( �B ( �B ( �±ƒ@Fcg.k$…@!P…@!P…@!P…@!PŒ E� Œu“B ( �B ( �B ( �B (ÆE��¹¬‘…@!P…@!P…@!P…@!0*a4*0ÖM �B ( �B ( �B ( �B ;a4væ²FR…@!P…@!P…@!P…À¨ P„ѨÀX7) �B ( �B ( �B ( �B`ì P„ÑØ™ËI!P…@!P…@!P…@!P£‚@F£cݤ( �B ( �B ( �B ( �±ƒ@Fcg.k$…@!P…@!P…@!P…@!PŒ E� Œu“B ( �B ( �B ( �B (ÆE��¹¬‘…@!P…@!P…@!P…@!0*a4*0ÖM �B ( �B ( �B ( �B ;a4væ²FR…@!P…@!P…@!P…À¨ P„ѨÀX7) �B ( �B ( �B ( �B`ì P„ÑØ™ËI!P=!ðúë¯7¯¼òJ3}úôæõ7^oæ?w3ÿüó7sÏ=wOß«zõÕW›çž{®yã�7šù曯™wÞy›yæ™§7nÜXr_ãzíµ×š^x!eVóÎÓÁËMÉ<Éü\pÁij¯¾Ã¿ü^•ë…,ÿË/¿ÜŒ?¾Yh¡…f{¾ÉŠõ÷Ûßþ6åe„ );sÍ5×;|æ;¯7«ù7.º×ç^|éÅfúkÓc³v¬ë䥗^ʵãŽóÌ3wè¡w®^6ïÓ_Ÿžã0&ïo¡3ëz ºÐº°×ZöY�7þ­Õß �B x#P„Ñ;xrêÕ �B ˜¼øâ‹Íã�?žÎÙ+¯¾Ò,°ÀÍÄ&6 /¼ðœxÜ»æžO<ñDsç]w&ɱürË7K.¹dbÂq­ëwxúé§›©S§6/¿òr³ÄK4‹/¶x³È"‹¤Ìñú駚Ǜ–ñÊ+¯Ü,¾øâ¿{“1ô/ïUùAô<ûì³ÍO>Ñ<öèc�õ²êª«¦Lô:½ÈøÝqÇíIª Lj–Zj©¼'ûÝpÍjþ[âàÉ'Ÿlxð�æùX#H–%–X²±> ?üpóüóÏå¢�—_~ù ßÞ™zùÕ×^MÂØÜ?õäSÍ<óÎÓ¼oÅ÷¥x7Ì×ïëŸþùæ7¿y$ôä+I¨!S]tÑf¾ óý¾^¡žS…@_aÔ|õåB (zG #Ðá ˆÌΑc‘eN§á÷yqXî¾ûî0bÓ<ÿÂó騭·îzÍrË-÷û|�wÔ³8¬È�ó/8?¶ÕV[½Xi ¶÷:‘6ÜD=ðÀÍ¥—]’Ä#ÿ}ï{_³Âò+¤ÖŒ?®Yv™e›)SÖj–Yf™^_õ÷ú¹'Ÿz²¹÷ž{’(|ýõ7’ž¼êä$CdÔ<óÌÓ =`�[i¥•âß›éû dL›6-³¬ÆÇøX`ÁÜ›d-¹Ôdlzdi-{•û!'ݨ«Íø"ŸÏ>÷l3!öÛº#�ûÝŸYRË-»\³Øb�û¹ÔÏÛ=²ûþ²ÂÆÇžmþ=_6ªL02Aöžyæ™xïû#H3­y!ƈ,Z}õÕ›¥—Z:‰Áî{�…¿÷²^ÆÂ8k …À{ �"ŒÞK³]c- �?("ðwÝuW: +DäXË‚ Î~éF¿ƒxðÁ›+®¸<´'ÉYqâÄfç�ìܬ²ÊªýÞú]ù}Ξ_7Þxcó£c�ÉL‡�7Þ¸Ygíu›ÕV[-3Þ•›Ã/}óÍ75Ç\óxd†l°þúÍZk­�x)µ¸'ão¸¡¹äҋÑ\¢9è O5ëÎpŠçðkýÞoÿ^—Nþ­·ÝÚ ;®»þºt„8àÀfí�Îõ¬®¿+¯º²ùæ7k^zù¥æ€ýh6Þx“Ô‘-a0«ûÌ©Ÿ{dáÙpþ‘I0xfûþ³Ò·Ýv[sÒÉ'5·Ý~k~GFžÌ¢5ÖX³Y½õ„ÉÙ眕Ä5ÂdåI+7Ûm·}ØLŒýÉón¸ñ†æ?ø~àôB³óλ„>Y¯Yz饓¨êžmÆÒúöÀ|‰Øo÷Ø}�ÐQ«çÇoýôƒc¾ß¼ðü ÍGvúH³îºë9·lþ Ñuý ×7gœñ«Ü'»¥A5!H"Ù”ËÄó— ² Q>0iR³ÚäÎ~Ñ-÷2°zè¡æ¶X#—Ǿ»P�J{~lÏf͘wÁ¢îÏ5ŽwÛ¿Íj½¼ÛÆSï[MS„QIÁA@êµ�Ó#‘ÅðÛ7~›Q2œws�;£EôDŠñO<ž™"¢\"K3‹t y¬â3xœõßoGà¾ûîmÎ9÷œt Ö^{ífÒÀÊ35xßþíÑû¯û¦ÞלwÞyÍ­·ÞÎþãñ“š½öÚ»™²æ”Ñ{È»èN­Ã§攟ŸÒ<ÎáZk¯Ó¬ŽÅ>ð�1_J5Ò©ºúê«›o}çðÌ"Ø|³Í›�6Ú(I6·Ý~[sÅ•W4gŸufn_ýê§ó7Òg½“¿÷^—Ÿ–·~�"Ê?úÑpÌÃyîÅnñ» ²ûþþÿü}êÇ/þÑ›m¶Ùö¢ËZfˆD¶œŒº‡Ãñ—!²YÈ»Œ:WûþÃ韷ç#é;ü°ÌÊYur,AЯ²Ê*IÔ+áÓì’K.iŒr5D‚Ì£Í6ݬY1ʼÞIWÛ»ìú Oüñ‰™´ã‡vlÖ ÒkÅWL»hjì1ùsì±?Jbíoþæ5[G–áÌ.„ÊI'ÿ4³ÔæŸ� ÒÖx3�ã .¼ ùû¿ÿÿ2[è3‡ò±Mbƒ¸êzä‘Gšk®½¦¡§®¼êŠÌ%Wm´q~Üýþáþ.ìÔgšƒ>$³âÞ÷¾÷çÏî�ùöóïÿèæþÈ<]i`¥f±RãB¿É.RʽXÌ­ �,£åWX¡YkÊZAð ‘´LÚ…ä__*äÕµñ.'ÿì¤f®˜Û}öÚ§Ù`ƒ S–|w,]³Z/½ŽU–’‘úzôÊš'zä-²è"™é÷Hdè™Y«ÖW]…@‹]ÁO{:üO:Éß}ÍëvÉ(æ�Ê”é_׬(ÂhÖÕ'F€ÃGÔñ†¯o~ùËÓ3…x‡ívˆÎziP ·Á�àQ¿×¯0úlþ÷Þ{ovg¦ˆ¨Ô¤ˆÎ,Ò5ø%Ç*>ƒÇYÿývŒß;â{a=Õì°ÃŽa0n�d��ë÷yaô»h32”.è!¢7#T¹2¸ ŠßÅË¿aô.ïeùiKm­Ÿç"›Âzé.ýy ¥¡ÿ;¿Þ©„‘l“#{ê–[nNBlÙe—möÝgß,kG4³ù÷™¢ô÷¢‹/j¾þõÿކבAµÿÍ&‘=ÃqYt±E›…# ‡}�ÀéÅ—‚hk’��…Šç=X°óü¶œÈÖ¸˜#Ñ¥…BvD*Íu÷ûù>c÷µé¯5‹Æ÷É’Ÿ“/rëZ.ša[çÆÔʹð«3ÏÇi8odYN½"í;ë¥á~ÓãEšç�è²Ï)Ûò<÷m{Zùù6JTâùn¯¼üJÐæ�åˆ,,’X�sK¿¼§0YgM¬•yEÃ#ëBãiN]ûîÆ4Òùœ]ˆaßÏKñÔ˜‹ùçË÷QâÓ}™+XÒ/ÞÍ89Uð™Ùå;G/òäó Çx­ÉVþ̃ŸÁ'ç3äA)‰ù„‡9RJ3ZòCþaÝ®Oz"�Ì�3N7=÷jŒu®¹œ.5_ŒoÁ\3Þó©pЬ×åãýŒ‰Ùïúø]ý5s½ »^®Îº|1ñ{.Ö›5£ÿN».�ÇiZ/¾`¿x2ç–ÎðïÆèsäñÏÿòO¹V‡Ê0òœ‘¬£‘êÏ£õR.wÓM7eS|{ÒÇöøX:�(u‡X¶þºõ‡¬ã7~ûFóÌÓÏD¤û×Ùïë„OÌþ7Ý�7Ú$É¢%bìl"ë¾]ïä‘LÈ`n3PROΰAfg_è]�,š™ÒíznîÛÌ%§·D–ªÆÜÝ%§Þm¬F?øár¯ýßû¿›­ÃÖsµ)}#sè®»ïŒR³+RNü›RÂ="ÃN€Ô>ÝÎßí‘uyr”$Ê^Òè|�Õ×È{êïÔ}M�ýÇœÙGæ™{ž´küÙî ÝŸêïÞÏ÷‘YôŒuG�¦L…®¥Oè&ëOÀܱ^Í!ÒÒÕ­'ô©2¦—_z9×°wH;‡�ûù§ã\iWÍÆz™•~™ª§àùç5wÜyGîíöúM?¸ióØ´Çš#"ðF_þõ_ýÏfË-·Ìçÿ¡kíWû‹_&Ì~ÁŠoî/è÷{¯<¿Ýg¯¹æêæ?ü~–IÓ�ÏGé©D-vÝu×X{Û6n¸aÚïlúgFý WßÊòÁÇ*aô|F“NýÅ©iØJ›—†œî w8€ÞíøP¾6GéžW‡R¾ãŽÛ³ééËa¤pÈ5OÖÓ íkÀIe|;�ê¬hjÊi^s�)ͪ“Wm& L ££szR§Æ-alN�ÆŸ�†Ó½L³í¶Û¥Qâß¡÷Ýw_>J…Eœ =4Â\$ð—R¾f¤²K;·Y3~»�cÆ£^´Ï{»/£È˜Ú﯆œ�ÄÉa¾Û~?dž—q_sõÕÍíÑ�ƒÊ0›;žÃéÑèu�hh¹^ôt‘–Ή`(ž~úiÍ%—]š} `çݜĵÔÒK¥ã±ë.»f2c\ QãÕgA?�P9‹I�ÙÚá| ú_ �gÝHß¿î cë‘p‚_Œ¨µñ)}à 1$9'ž#:;%ioÞÿö(A‰±q 8÷cDÝ*«¬†ÝfYnÁ l æîwìþ{Ûóàö¸ŸµWq@IDAT¨.¢n�pÈ4í¾·ú\��{î¹;œ­Åší·Û!ßßçî¾û®ÈhüeŽmÊ”)9÷wÅ¿9‘èñÇÏ÷S2¡™®HåûCVº ú{¢�ë!ŸH°µÖZ;îýÉ×gœ‘rð‘�wNC¿›`x“ òô‹ÓN Ãù•lò,z¬<Ç|“3ïw›µ÷{ö™góT!2 tG9×û#½ž1ÏávÉvºêê«âä©G£gÆ„xF‡|´6à@vÜñá¦$ñb.9¶Ê‚2;ô0Ù],Öß@8%” fÈu÷ºé|Î.aä%úB9�÷Z!J86Ü`Ã$ErÀ3~3WÖ̯ÃÉöwäÏ–[l•%:ÝŸüwøŸrê)™¡Á‰Xmòê‰Qëд„ƒ{›O�…wßí£YúsÄÀhÊÕ}ú`K\�3+Ö·9C²#®8ŽÊ”8w×^{m:d»ï¶{ó¾(M²Vû]³«·ÉW/]‚A@ßyç�¹¦vØáCé8û~{š–ÒžÎ~qgÊÀk¡²NÙ6äâ›Q²…Š0곿ŽFª<ŸQÖtUêaó ã‡YsÍ5SwÛ/ŒYÛ­?È-çE6Îe—]$ýõéüŽ b]¹ÕÊ“:òá>›o¾Eê§k¯»¶y42+¬O6… f=r\#ÝzÕ#zNõBÌjNnýÜû9Ý÷�Àb—è)doq�uˆ a-™[û»ŒMÌ­ÙÓ#£žë±´ÉÆÌ’f{€«íѤß×´ =Ø Ÿøø'²‡U~`ÆoöMä_yåÕ$3~!Î{¹<ödótÓÍ7åÞ“zf†L­úÄmý±ƒæ»îº[Úkîßê ú—ŽGØ�!{¼àƒñ(ÇÔ Jï-rJŸËš�õ2«S3éÇó‚0Ò+ëå—_ÎàÐÆa×!ŒŽŽRA{å_þù_æÚé—9ý™Ö~½õÖ[£ÜÿÖ\KæwÍ5§$>­9§ßã½~:É^¯o˜¬~rLwÞû.ûRóû"Œf_JŠ0š f-Ë>=Œtè¿]=–}î06ýùNRí;3ÐD,ÿÆø`4·ÑÖÁ‘ „ÏúeôóÖȶÐlŠþ}î¹;§ƒÌW·Ãá{íçÜKÀO<Ù\vù¥Yî߆Ê0jŸëþŽf~#°v_ïéùŒø¡ðõy›—yiÇdndØX܇ó*Âç>m„×gFrŸÈ¦g¾ 09¬—]~Y8ð¿ £`“Hkœü¶ˆêàgŒŸÁ÷y§ü7�æÀ\ Cib>͇Hg.z=8mÊ\2餿Á‡H'‘S¿Åæ[¦ña.9Rg�}Và{oλþ;}x§ÌÐ`y †'2ÁI%Œ¢iáTÊØ0Ï EÖ§k«-·N£\4X$ÊE6� �K"ÛÇIaÏ>ûLfȼñ† œy2Çs·Øb‹7N†‰u„èëŒû¶4¤¦Æ‰-äÂûD"G#2[Î[n±e‹ž}Ͻw7?ûÙÏ"ÃèÒxßNÓëå–]>  ¥›%—Z2oë=Óƒ!Ãë–(¸=à<Í,²[8›TЂñ.Æ400�=vÖ[o½,ÿ0vß•YÇ‹/¾8ÉFŒ¨¿ŸÉLZnùå’�AÒÈTAfhìÜ aDX笋£¼1Áð}62ƒèœÈÜÏ9˜DÀºaH®³Î:I¦Îꔟt¤cŒW\qy¤Ÿ�Ø-zÞD4±ûò¬["½˜³}Ýu×%~pP>Çç�‡ßûîw’ B⊢N òŒ±üT8s"¶ oÄ…Rk¬¾fÎUëkØ{äQG¤ãG~Ü©qOÈØQGóüj³ÏÞû6G9�9€§ëÕpðéÈMY;ûGFåA†�î•Ñχ3ýh�=*8ÒmÈ»÷‡ñ-=Zó[Ž'âÑÏÒÑýÕ/S^‘…zÁ‘Ck �ˆŒØ�¡„“ì®âô%e/æ_V¹ôyF¾“ʬ ‘«‡ƒËX·&û™ÏÙ%ŒœD¤©-¹FÒê?±ÇG—lK&�ßš˜ØÎùþ ø0¿Áøë‡}=ç‚¡®a® sî"ët×å¡»�<òˆ$j¾ô¥/gŸ{…öÑ”Ÿõƒ4†9ÒÑÚá^N%g9õØãÓ2“ržÐ™2òÈÔ²Ë.ïøl+W%©ü¥/|)åâ7£°>fWoË”è&0‡�=³é‚Ãù¼úê«ÂQZúÍŒò‡H¡­]NµSÂì¥!â)ÿz¿ Wež|òɹn» #sCdfŒd�T/ Fœ«òB Ñ‹GîÑ k­µV:àÞ¯[L ¹¥—Öô%çœíÀ¾²GØeR®µÖÚ¹.ea�=¿¦±æ{+¯ü�hz½]~®Ÿ}!‰ÐôÈz¡³»36‡›o$ÄqÇ›¤4èÒÍ7ÛâÍžNc�0Œ‹µM>õlûÞ÷¾ú~Z³ù¦› ºIÈÇF¹‡øN§T+l˜�)Ÿìù졟ÏÒôn;—¼ÐQˆ(­zX‘%zdfŠÎ0å[cM"]ŸeޱßÓ÷Ȥ `–=Ëž'ˆÒöv²^ßÔñý«¯íØwì28÷øNÃï…coEˆovÎjaçÙ³dEÎÎzi‰´áÆÔîäÆdAeï;æG?̬Ù?ýã?�ò¢ÍòÞÝ/Ð/ñ_™í[{´Ÿ>=²àÃÇà°U­³¡ü!{?Ã÷ÜÓçø=Ö>»/÷…{°Õ=öž?úü"“p£|ÆÜa_zæpÏí¾g/oÇë=[ÿ‹ ϼæM‚‘î4ÞѸ<� ´þZ„RGÏK¬Â>ò§‡“gê}~÷÷½¯9uùLëïùl÷Zðsc¢ó¹2ÝÂÏã�›“¡Nöß‘™ÿØcÓ:Y­a?óUŽ=îGi÷aÙÙ»Š0¯ì¸W_ ÅñŠE@Ѹ�&Ê" >ï¼±b± ðan;ÇÿÙbf䨰E7ÇF€‚æ  Vx6;ß±Qp.E2Ôbs‚zèá0øž'å…øî¹q1) V™1›Ãн^E†Å�¢éa|hHÂÈg=“CÇ‘z5"*Ò°½çĉ�TNʨ_ÏKƒ$”3ÂÙ£lü» �³í>œEÎxw„w¤Ð1€ÞÊD±9xgJ1£Èaôy%.ƒ¯~ð|¯wÂ’Fï‚[n½9ÒíŸNB†,ReNÉžš~e?ÙiçÈ"Ø �8:5)³fâ •ødF`lºÈ £dëé4 7 cK$ÖÚãÌq4Òåõ]Q.ζ2+ßçTÝN Áåì#b>™.>ëêl76×ÙpMB6,™& 2öxzRìmFN0‘RŽD¼9’k/gJvˆ,†2$šuÁøF¬³Îº±aŽKãMIÚ/NûEóüsϧ£±z5ŒA2„,àÄÛHo Bä§‘ºÎس¿+kËZ@ŽyŒ•²}âã{å{rŠ‘™2K®ºêªÌt±‘Ưaçk1^%7ׇ¢ï«�™gÊòè…0²¾<—3{ê©§¦�¸v8K+qAöŸ‹MùÞp ­ ØŠ¬í·ï~éå ó›ûŠˆ^|ÉEÍ£À)2õ?þ:I·î¯äü…Ó…,b�1¸ýÌ¡Íú1Ï.Fø7¾ñõt\°+®81³É¹6Í/00¤ßòi “}N«ë¶ÛnM"FF™R=†õÒ!עȈëbm)�¡õ3jä·Ÿùœ]ÂH–,d™8-�ôùÏýQ®…nOwÂqIÎ"÷8äa3»¬¯ù×Îýhÿè#kC¿zÉÕî7]|ažÆe�þÙŸýE�Ë[å~†XMù�52V) =ƒsö“Ÿü8 qѲ±¦­Mûˆ5€Üå,>kŒ¬¯„ëŸýÉŸåúéw}¼©¿fCoo´á†¡c;Yx3Ã�G'rRÍ«“¦>wègs]2Ü ~¹7 þ\è>¥È²O•b±O¬: щ(—i×Mywx˜Ÿ‘¬#DîHæÕ8¼×¡Ó;™{·fp„nAä(±¤ûè!û¿ñuë�µ§¬�{ �.Óþ% ¢ o÷Ý?šÙC²kéöI“’|?íôÓ6š=õÃ;î”äT?û’ª=‚¼b7qhgvµzÒœX—äÜ>WÇ^z÷7½–�0TIÚ`lÈ'Û›�rLØ/2Êd±¶� t:ÛÅnA~iîmîÿüÏÿ"ȶÍÓþ Ý‹tä‘ßKY[e•UÓŽÑàÛ=gv±AØâ×]m號$ÁJÇ’/6 »ž}/€ñëû�YQÈ$��?ý“?Í�çÛ#e�‘g¤•½Êzõ¾öuöò—]cŒöÄ);lvÖ »}fWKÙ]Ê\íôÍq±?ž}õ+_ËìD?Ob!Þ�üé+õz�ß^úDŽèD}kÝ"ÎŒm°¼ûŒÌVv ßÇܦ?k¼ @tïW­pÇ�·gÙ*ûMùªýWàˆ�1.ÊŽ•…/µäRIü±×?×fç2^vog¼„MúT–8#‹–ŒçŸçÙçGã2÷ô�ç±µáj¥«È6›^NIEtz~w†yû}Ÿ•™Ï^ S=÷góÁmýÊî÷m3TÙo²Pí•䔼ÉÌ¥{Ï£Ÿ{ž5aïec]|ÉÅÍ·¿ý­\#Eu#ÜÛß‹0§ñY3ွ Dj¨’×ÜÁ€ªM]0”vsÒ(þíyµŠR€û#z÷`�ÒñD*eN Œ–‰Í\íæÀ¤Iá€.Jó­Ì €r¡~0¾g<ÊT\ Às£|‚� ƒµ )UämaTÉðo”)%252OΉcU=¿;Ȳ´èm<H?Î"e€Ê”×%—ˆMvR’‰Ï· š"˜8'Xø#g�æO'ÐæÆ°öÆ GÜQÎmJ÷HçHäðâ‹/Š ü×q ìµ_¯7‹‡3o#ƒ€âòžÝ—�g$øP€ïÄ«UÀŸýè˜4H8­“'¯–†rÃµŽ fp?Cñã˜r2‡lb8ÿ*"ž6¾o#rjBÅFŠhh�U¶Ñsx/²é¬³ÎJÙYk­µÓàF -sm}2,ÌÒ„ 3.öÞkŸ7›“Ê,R2Ä!•ömSÛ*Nn1ˆ_ΚSj|ßN†4úÄ'öÊ9¶ñ0ä„ÖŠ�R•ç/™ofž]vilžO§‘æùJ-6I-â‰ð¡v \6ÌŒFˆÍ’óÄ¿òÊ+›ÿäÄÜØœ’ã>ŒEc²®$\x~’4ß32)>èèá3 I„ q"±ýá D”�)ßø>HƒZÑ}}z!Œ£ 1™RÅdœmF­¬2§RÜŽãõ2Á¹sÊÏíO2ËÌ»30†ºè†&2ð裎Ìuô·=#�ªófÊ{WF áÏîó!cåm�ù?ÿó?Ò1_<¢±%�ô#¶Wĸï¹ûî4n�}J3ÓõR¿Àäë_ÿ¯4?´ã‡3CÅ=�*zOi¾IVØÝ†÷Ò ‚¬C|þ³ŸK2�#ÍÁº$ärîЉþЇ³”E9üÞJdÝÐetpRÊ^¬•“vrf^‘ÉE]$3ò�œˆ´5ÇøBàÞzÛ-)3dE‰ãÊ+ uê}÷ݛؒyÿ†œTê‚äëg>e‹ÌÎ)i²HèÒKc�ü$NWZ0ö�¯|ù«é0ÑäÃÞ ¯ï|÷ÛÍa´[?t‡V83»dWýã?þßæ™ÀUÞ-C6‘ÊúQ¹:„ÑÓÙ\ù¿¢ù0Âè¯þò¯òžï¹sB~Ø Öíe—_Þü82è”ä"³8Ùö(ëTV‚R9:Ábo£[þG¼ŸÏõ³>È7ý5R½mžÙe]Ýx“좫sní½_øüSÆèëâûQB25‚<ì kŠ“)ðdNü;�uC”lÝ~Çm±Æ&½�0’�(«p¤ëÈóG2¯k®9%uæÔ°7® Ýà™TÆ·ï>ûeP€£Âñ%?­nýaß“¥Å±FÚrXì›ö7ølºÙfù]÷`;L½ojñ?ÏuÏ~²¿ìü‘�“ îg_ ;½è6�çÒÕ3»Èè¿þÛ¿¤Œ*–]„Ü¢‹\ú½CµXÝzü¤“~š¥÷²QèÙNèäüHfÒñÏvýÞß »uÁæþõßä>GÑlW¶Î‘±ÞëÂÞ*SQf謣6paüi¼‡þŒìëRì[æVŸ ;‡ža—Ð3ñ™û�õHŽÙ9Ö%Âé½~܃þe£ß$;˾(ÀËÛóc{fà…Í×ëz1æ™]Jé‡ì¯°Y|ñÅ2ÛŽýtÞyçÆš›¯ÙsÏ�§>qöiê“X¯ˆkû�€‚ÖIŽäR¡b¯�z†íi\džŽ„Râž{îÍàÚ³a›hrÎ~ð9Àö^d²õâzðÁÒÞºéÆcíÞ“>“,l6݇”æÆž+Xƒ §ïAzÉäË›ñ±O�Œ÷Ã6 _Ø_¯GpU/OdÊòa‡�¾É¢‹vú“ q»žÿ‰.‡¹”-‰¬Pì" ˆHA1¸°QüÌþK¿Á–/ä»Þ•Ÿf=ÌO×k¡¹b|VÖ%=BVùµ¾Ç¯¼'üDzŒM€ò3D˜`êĘ¸Êš£‡ËÕà}_¶yF=Oû›,ÂèM(Þþ—W"³è¹žŸÑ,5ÒѳH]ˆ‹LËœ AîüÍ .”¤ÑÛïðûý/JœÓ%;©d2?žÇ]™Î¸qGMݼHúŽ;î˜$Š(7¥âbÌrâmÅ@©)ƒ¸?”/ã6†OpP¦ÚbŽED/ ãŸAvc(K óB¡(wYY”‹{Dd¹›0òL‘p¸ÒŠÀB—Ú¡4M#XÎàzaTvjã'ç=}Ïe Ía„$ð.ÖÁ·¾õÍÌxûô!ŸNò„1>odF‘!é7¢´LܧŽŸo±Eëm àP2äßF‹0mù±ö­9û$âA#ã½÷Ú;÷7Æuî—±¶<÷œsÏNù¤Gè?„V¿„'Â>R½=¸—Ø`ü‡#ŒÈ¡Ìa{ ÌA{ƒýB©Î²±ö�¢äSöÜ�‘§7Î<óŒt´º3Œ¢2o`2’uäÞ£Ù�Wë?¶•´aÌ{ÙŽà'·„~±ÆÛ_ƒ ç¶\�=cCˆ#B­Û¿ø³¿ g~«t¶èEúS@c(ÂÈšîg_àHö¢Gè²hŸî²Ï" þß bö $f·î³á”ºÞ«„Ñ=÷Do§�_)pb÷•aγKP‰¾G}=2aùÿ# k¶ü]H|ö8[H0lâă,Z)í¤üÀ0¿Y'öD>›A!à%hjÿåØÃ‘ìúÈ~(p‚0¢ŸÓ¦gçüðû�õzJàŽ-$0k½’eAvŠµÍ—øò—¾’}#ýÜû÷²^f&g†h¯åSh¯�Y@¬/¸àBIZÉp‘É’�r×±O¢œ708æØcš{cœöx„®v/¾øRFϤ± šìõ‰½S¿úŒ±ÓÓÖ9[ÑÏÿÎ/QêOWÛÛ7XÃ8åVïÄ•s­tÊèºêê+“ø÷½ÇŸ–ö¾tô©ŒF&i«"‘× _qŽPÉE�+�¾tzùIh‹0Vx�?¶ÝfAJÓSdý\�€ad°¾2Ì‘�H!r55üD™Ù|QAäí¶Û>3¿øEd�mKwZz™Úqô ýIþíSˆN:Ï8í-NÊûe˜„��ŽBŒñÃ'ö;e ô"÷€(Å¥º�¦©¡[ímôÄ!—Q0„‘½|4ôv7ÖÝŽ0²×‹´_zé¥!Ÿ?Mý®„ÄÚ$yŒR�ôÐ}éc‚X±î&ŒEGÆúé:’I�0鼟=�~ ìKÝûY‹…,©¡ô‹d7¾oö�\�ó×¶É6�}3lç}(ÂÈþÒϾ MA/z¤ÇpÚ;¬_úóÿþ¿ÿ“,Ÿ�LJÙ/tb»�vìÑ÷^†‘ÀÁ98`÷‘Ùep`®s˜¶ö›ìàÿ÷K›õO¢ä~l/kÂÅŽ±O)Å ó3vûwf›ô̳ÎÈýÈš˜ØwŸ}ß̰n¿++E†bž®Uê‹0âÜ[‡þí§?ýq^;ë5ìœÈ˜j×k»�*í• Å^d' ΃Œ ^ÖKû>ÃýIÞÚ_>CWúåߨØ.ïÔêP6䛄\d ð Údx³kyO>ùdÚhô0¢ŒüÊ�´”ýªtá„ôЧ?#AÀA‚ãây‚tûíw@Gë§�7uêÔ´gévÌÃ?ó÷päeØ jzGv 2VÙxöhA—=˜]O>r¼ù¦ù£üÍw•´™~—ϘYÜ'Dƪ@Ñ"a_±ŸlÂTNh…-½Vø{[4;í´S’;nˆt÷L«´ã"`¨Ë¸ç Û�>æÓ¹ï}÷Ý›{Ô#SòÁÈ{’OØó•�DˤãÙ¥²ÓÒнOÀâìsÎJÿ‰�$°ÿÛ˜GÁZ$Lœ81mf“&MŠWš+ƒšdIÀ`ZØÕ+ dÆ0{Èc-)z!"à‡ÊDönÚ\\{«Ìâ§B†òÛZ FŠßs,_E 3»/£=-„ YÒQXoÿ`¬‰T2Œ–rb� :þ�…e1È€ D( ˆcAÉÜ{ß=é>=¸2*þÞ{G©Î Ç£%ŒÔl_|ÉE᜼$M‡ ˜”Î^–`EÄ¢SËýPBá0ü¿ý�o§QÈ9á(éï¡TÏæÅ¹:ÿ‚órÓCq„8¸”ΑG)±·'éB©PÚJå(ü"[é´(’ZÉaVþÁøDxÙ(ŒaD±‹L#”娠-6WÎ:G\¦<ú¹dn á|Ú›2ˆ  ¥xÚ A1;øÌŠ0‚ £Dv 91Ì�“'¯–Ù&6¸¡.DÈÍ·Ü' \.'§A£Ç‚¹±¡Ù`]Œã;ﺣ™rùpd˜éÅ¡´‚ë²i“Yùä Jcýx¤#Ìk›QÐFä›<1N¿„‘�…ÁÐ*êwí¿ÿÇ¿¥“ýÅ/~©Ùt“M“Tú¯ÿþ¯ÜÌ)«¬ò��iøCÌ&„ô¸ûî»SÆ–‰h…’§ž=šÌ™K2ɾðGÑÌ0H­qãÞ2Xdá%™„³MjüÜã;DI8¾®YF¢v? Bê’K.Î\$‹ž9Ö`÷uÿ ÇRi g®RÂm¼ßøÆ'ѰÍ6Û%YÒMXµ÷@0˜?›­¾Fˆˆ^£ÖPùãÈZ äRo†®L1ŽÝE]”Ñž/~#=[†#"G›0z4ÞIfÂùØFÖÌ ¢•žû¯¯ÿgÀ1Wó'_û“<Ú˜ÑÃÊác‹Þ:éèø †ÈÌ×d®ÅýÉí5×È\ûfʵŒF[ŒB©ÿÿò¯ÿ}{®Ïw`ì(sùë\ƒ¸c蟙AˆÝâT,†·2F?Gï® æ½ƒyÚeg§é­ÚNeþ)“ñÒË‚d}|õÕW§^¢Û­K†R�gÜÁÚÿôéHçQ6;„Q'cã·¹ŽŽ?áøÜ�ôkMY;³‘BHfòKãÀ„%—\ªÉLŽÈžëv Þ6ø®ÿ-Âh´å‡><õÔS2À2WèIŽÊn»uš•w½~:ZdÐú‰¥“Gƒ0’±9z»û]»ÿ>aÄ)d‘Ì®xKon’:›#äÊL‚Ø8ÒßB…LvFÖO?ëˆ}ƒ0é¼ õâÏ)ÂH¦]?ûG¹=’“1“ß8~œZÄ×?ýÓÿË~™_úâ—ƒðØ6m-άë½JqÜeBÄ<ûá*«¬ú6‚Ÿ}a‚ß?ÿó?fåW"3G@E�³Ý;vHÞëÀþÒþjíœá¦¨ ØeÐÈðÓCRIv÷Õ±ãnN{äWqª¨ýa$ìöÀgþ*íXX±%‰L]õ‰Sš‘?ì6};_"l¨KµÙà3²�ToÜwß Â(dKEeú2/%R ‚d� ¨ë÷;-mN|õ¹]v‰SCÞ¼;If¼LHóÄ—ë�¨‹dy®q’mÈ|¥vÖ†ª–c#3›êßÍÇöÛmßLd/Ï.a¤Êe$øôzŠáPX¿þ­£aféÝFµ0p,ìjáà~OÇ…R’É!îçŒÄŽR‘] ÷-Âèütôî»ïþÑ\€œå%‚xiOcØÐ8ý¯Ã?,þþDFŠ»lѲ ‚ØÁ€{ÂHt] �÷Ur05ó”)SR¡;Ii'8™óp(l®;‡b¡<:ŠbùTîûV†Ñй)|t÷=’½§Œ)T'˜uòYG¦‡ƒßùç^�ôU›æÌ>³"ŒÚã¯�ÚîG~çGòÒ?33"¢ʇ�zC]²ÅlˆÆ…ñG® +8$ÝW�’²j3\76¥aF—y¥�³4åÛ‡§CM®”˜éí d�ܶRK]yÕ[.R ¿Dùí¾l"mTʼ¨Í¡‡~6×� ùaß<,�ï¡Ę́‘›—{ âlP6|BŸcDè¯qÝu×çÆüÙ06Ø Ól¹ûfö÷YFziúm]ÙdEõ¹@zv_Jﬡé¯Mo&…acÍí¾ëî™õo‘A¥ôJÉ<‘ ˆ‚î«Û°Eôظ{!ŒZBN´ Éa^lòp6§~Y#ŽØ†5¢âK_üRÄ3k¾8Ú„‘u¢‡Ï¦A(rÎÛ ®ÖOƒý_þ)Kv¿Ä#ýÂSŽ;aÄ@4FÙoEÓD¥ºŸýJNéÂHDøSDÕæùLFóßýÃßåš‘¶Ï¸”ÆîYÝW;ŸHnïb>“0 ƒŽ£§�œFÚ#%Å+¯üö[†ŸL†ðù矟Y, SMJ9"tîÄ8ÄÀ'Kˆ˜Ö¹3®‘Î'Çhv #ãvÚ”He£¡·»ßµûïÃFAëㆠ}ü7j°Þ¤W8=öu ÒnÂÈ=úYG²&F#�×^à9EY#ýì N‡ìE�tÏéPï&<þ)�×Bß ¨$áŽaKxˆæ;9UàÆ{ÓEû?ÿ6ûé°»�üîçÐ'?‰Ì–{î¹;³3dÖî´ÓG2‹ÁÞl_üûÿó÷YVtðÁ‡¤®d{¸ÿP—L²ÃQuÈÅ +LLDÀÔeø‡ÐÏl‘îûù™lÏûAd¼¹ÿÿþÛ詺yfW‡°Að;x`žÔ[»Å¾È®»ì–ã‘/­µ†}¡DWi±`¯^gí·š½ógè0÷÷K0äýÍÿÊõÑM¸ ‡Þ™‚QÖŒ5%Ã¥û’݃lˆûµ}=a¬jiâ}ìëˆe{2ÈÎ=÷œ$.Ù묳nô’|ëÔÙÖÞò<™ìü·¡.ráã0¯2’î Ù2FFìdø¨X�…}¼CnŽí-¢SâûÈ„\s`Èî³.bYgïEûãƒv²Œ>ÞO|â™Éi,põ\%ˆ¾ƒ„z=‚³úÚÿÿ³w'Ðr×�À? ‰Mb˜'‰]€X�ÙW;8àÄvÀ`ƒñ>““ØŽ�u2™s&“™3Ç“ÄñØÁ€³ØÁ 6ã`6$ö³ia‘Ä&ÄÜßm4ò{­~¯õd!U�Óê§îþ¾¯ê_U·îýß[·¾{aîbñ¹>Ö/%U@iS·v[ùýPñ¡£­Î¥Fôî;mKCAh(ƒSøàž{îÕœ§ÄgQ)W‡ÇRÒEùc&‡¢jïôÁAd3Ã8µ%íç!)ì<›ð˜žnd¯´Û½jv9BñÛñ\Q ­E‡e¡0+îI°œó�s’lò=¦Ÿð.yæYg¦ÑÉw ·D±IF…Ì›ÏÓjKÂa‡š‚Ûv6„ÅÊ}Fr ù�$¢`û0|Õ¯ ê«.)(tÿ€w+xäÁòŸåF¶6X¸$6g|X VD�;£š÷Â>bÑ=ý•ÌuF°…SÒjûˆóØßP4ÚKñ@Qˆ�<\¿<òB_$ñÛ·xG¾„ãí·ßÞ¬�0 ÿ3ŸùlæÒo¥ a$BÈŠ0úýÿôû¹x¶?·>Õÿ!ó 5 œ…뛡(Xè,p}QïeLJ{Ńw…dkæCu$ú�ÇœâÙ~:W{:ý½<ÂèŽ;îÈÜ ß'Â;†XXvK™û#êæÍ›Ÿu7WEè!Àf†ð‚qZ†cÅy\D™ÈeÐ^(äW]¡ëA:QŽìCï†0J%%æµ¤Öæ O¥qÃæ�"'ô/y"G‚ˆ‚M‘ ÛÞ´ý3ŸþÕ¤×b‘ÆS9%Mûß4x¢îÿ{„EÓµž{Æ™gd”Ò1Ç“ï£Ðw„<¢ý³Axê X\ýÈÐ%—'FˆõÄo}}RÛ˜ÛKéOŠ²ÓŸú�r[ =ä¡-mäܤIo'ŒÊ|“ב÷xÈ Cõï›È/2z»�ŸGqdnAdhëäôPûs¨„‘v™GŒÄ"BË<…Ÿö’�æžööGH·c×þww„Qä Â; £� ýF+züÈëe‹+¥Y7eJrq »½x®<6#YŽšÁFýÍÆgQ¯r»½®íD!IE!snÜ}Ï]¹5ô§9Õp¯öË—ÎË—³_ÌKëF„ÑPçCa4Ô~u]7ðpF ónèQC]$îíF޼­SúùO„Çïÿçˆ0Š뀨E'ãáòíØšlýüó?—Üù°\³Êº¾ì#è…ß G!}•̵�¦]ÞY×ÿæþMó›“B¿‰I®"Æû+ê ù1ä]wß™¹9R÷Þ»µ5ž~¶" #¹ûfΔ,zÛŒ–€ ™¯¼¹þÄsßF¸…£U{ á–?Â?ÃN_³гEµŸZnIÿ±ö#Œ8þä'BIÝ`œ³DÓØ"Ôß|µn´sׯÖÄ–cîSá˜Ó¿æ<®›ùRê³¢Þ‹Þ¦_9~ä?â8¢Ws8£Ææµ±þÿý?È%97sߨ&†„`OœÁy©wžrJ‹�D–Ài+¢êï¾úwé�9òˆ£B7<ômë“~woÏ÷ê–0*DùörÈ>zu{‘¤ÛbÏ}ð·?”z4zöìÇsýÔßdçŸSQéÒ˜'ÆGý}ñKé@tßâxF6Yìè¯Ãäp†=b÷FKçh'Œ^�º"hlCNÒ÷Ìm: W)ÆÙW¾ú•ƸõžMPôRãQt=Œí2áèäx³þë/(}ÏáJúX*k„uñ© Œ9øÐÔ{Ù0í¥[»­\3T|–u–û­.ï•0 'ßiI¯2ÿ̸-‡‘I8ž`ËY Ž ³•Ⱦc$ .ƒÙ÷í„‘î¿þ×ÿ–FuûÄ/p1E%¹§d–kEN§SO9-™|¤ƒk3йœ*"!Fr¥ðÈ {=çÜsQ„ªã'‹Áé¤9sž}SHò‰°€µFr†¾ÚæRÏýÞ­à*>Ë#ŒÊó‘„»"ʨQ#cQÜ¿oåôYöÞåÔ áÊ cG. o-q¼iD`X¨Q^¼Æ""ÊØ@8ŠVâýãI§Ð¯ �È7[%õw»U# 9¥9 ÍðlŠJs¿2F)1 »- ðÊH»Ø:&¿Oã×c˃¨$ Ã^ÛK©?"™"@XTŽÖ6C[â>Ä–yÖþ|cS,æŒxó‚�¬R a$O’ „N{L*Ìÿò½Ì_b�=E.#–1,Kýl¥“§l‹-·h&öMŒÈŒûÃ0új$#œ“Š„·Ehp{‘ÄiqÞ)uè†0Bbé[L`ùzô1¥ž<±XÚŠ*×ÅUŽ%dsW„Q(:ú˜|:ó¬3RAûó?ýó$댱b`´"ܦ'qÃ*b¡_Â(Áã¢ÉŒŒ° EQySa¹5¨àwO4 ù &OÞ!Æa$X=&�˜•üpÚiŸÈ½ûžwà ×70B ÆÈ+Ñ\Æv{)ýé^¢AÌ}Ï»6C¯%žO…ÖI6È r˜œea멈5<ù„äŸê¥?‡Jåü§€g_rñÅI#ŠEžžK‡íˈ…v¯³þþæ±Uf~¬OÇGî÷`PÚʬ�—kë–ÈXkQ¿„Ñ ?âK.ù×ôæÊ)Eîô·U$#Íb ''ÌO xFS§ö4?¶ŽuiÓ«ÜîsŸ DY¯9³è'¥Z[Ê|-2Ûõ¯FŽc‚‘õÿïW“Ül'Œ‹½Ì#žè$Œ†Ø¯í„cZ»DTpD´㹿Å^s1"EjËk5”uáɧž”ioSûßÖ72$²DʆÏ~æs©!xÖŠyfÌûÝ7C/µö~ñ‹”„‚ߘwË$²“^È0”‡¾Èµ¾(rëüÝW¿’÷þÍc~3#vMCµ—$¹Nódˆ#�úb�”“á­o+‚0*°i±.ª?Ýì=á4Ø7¶&#§�(ŠßÁ†üqÊëó›øÇ8²=JnŸ)»î–Qd?<£ù^¬ï-ÇOk\[‹�Y}¥½ŽÈÇb==8ÆåaA�µ‚ÅÎb÷$aš¿ŒÈ4¿iÇÙº?[ÙèÓr:,ˆÙ^lÅRŠç"ƒE‘éR(ÈùJçTZëë/“0¢Ó“¿üG_N}Ó÷0BÊŠˆCrrhôWD˜qÈ‹læ`‚Á£�¾aªw;Æo_ØŒôåöò±Ü�Öz"; ÝÎH½å¹çSwÜh£�²¯8<µÓÚBŸ4÷‘`t[ö¤HAøÍ˜ñp~ÆÁƹÚ_ŽÇ–^Ô}£¡â£î«s©„ѽ›†ç«&žü…!x_yåÕLèåçöh®»nLà`JH놱ͨùu!ßgžõ­ô ,{E$ÏGÂ#Û¼ÂX�4‘‡Fâ1“[ÒE‹1Å­?Âè¯F!èú+z“—ÇRr[ØBLpPÐáaQZ–0"´-ŠwÝ}w^GPÙ#lak æVHŸpC‚Nä‹“o,�DhYpE­ª„ÑPñYaÔNFXäÌYÅb†4¡ÈY,EiõWèô€‡aÆ�5Ö(Œžv …z(€!Ûós÷´­Ç»B!DüÈ¡óä“O¥'*‹ “{ÎCYD )…0º><ïN«â¡à1a"cÔ_¡$…áëÿïk9¿ø…/¥ȘDöPÔ,®ûè) b[/æq{AzHHìÞcc‹£dØ3gÆÑÏ¡d áFÊ ñµõÈ}ËóSqŒ…œW„‘á$,^šr¬÷[„ÑœÆÊ$Œ"šDè¯B�ÓI¤‘Ó…¶�-D¿ ß²!¶_y£ÔQbB}qç�w5§ŸñÏ™t‘ `ÐȧƒXi/¶4^¡¼#}MNtCQhä>B€DÏæ¼ÒsžRc|.Xðb*£"Ý»¨µ-ê™T²þùôoä½$£Ý¥]…pkåê¹1m Ä…Vûä¸êÅ0hKZ!ŒŠ£§¯×^{D�0c²ÝÆ�¾nß‚Ð"òÿ9"g¥²·û'ÚŸE¼½”ñ&ç•5Ų¨¬sùã!ü“zU@pÒöm&lŽÜ�'NîMöÃÚw—…C^>$ýa$ý9a¾"¬ÉÞþ櫾¥ rðˆ_'îý¥/~)×kí «FË›/ChbÇK†Jíciܸñ¹Òa.ô¶O~"’¹vXŽk:’L¿!>fÏ~¼9ydsà‘ÉN»]„ÑPñéuþö׫Òg•0 7Uû¾_ ÒhQ�FXßÅKÃ׉‰kŸèèPìEfŒcu A0ÀíWøÇÅäÍàÛwŠ0jIPÉoa Å ³l�øBw-i«º/›Ãˆ‚ùWùWF n‹ºãŒ3OOF[ÄãQ¸½äÑx#…gLÂ7FˆÙü¶vØc.É™kä]*†3�ã /¼˜†ƒ�¦ô[Œ~„Á% rÁd@äÞ‰vÉe“-äWØ&oØ„ Û$éB§‡-¦Áà³<Âh…œAÞЂaa»)ÒÚ;Lá9õc§6ûÇ8âÅ/„PQ($É{#¢�F�“ #Øw÷Üsw/—æ½ì½6^$ßã±táöÛïØ¼?¶üì¸ãN©DQ@Œm„'šH‰ÓBåQ( s–gL…çGWü0÷ñ;Ö�RiѵÀþã?þ}’9r#PH·ß~‡ŒÀAnX(•ú˜b7*êkü�Ñ:%ƒ—Cȹ‚ ­!ï–¨ÏG0jÔ×öAŠ"’´(¼¼zB¡y‰õõþû‡B¼GK!V?4¢wîO+¯ŠãXö{D„¥©g,êÏpT,,(àH)„“d숟‹j92¶¾ˆ’²ØBÁ,y3Ï¥±Ô atWxêÏ¿àüŒ¶Ò6ŠH9}Cû)*Hýt~DŠ8%­ÂÈ|q-Þ×þé³ô/CÙ%úM»µOî^Kä‘h�•I=#wÔ=÷dÒfÑfóæÍKEŠ!Ì‹l+Ù»÷s*[ët¿’ÄœüÕ?¦µiÒ¤ÉIÁLÛ�5ýI+ÏkzêÏ¡FÚíE”KÂV:Ñ`Æ'e[Äéþ\$«¹R �nDUË`ÿÇ_�”^$¹ Û9sæä¶RãÓÖ FÂÊ Œ¬NXlmͺ;ײã#’džšûŒI²ëßb|k‡q¦ŸÔ�1ÐËü ô"·ÉžNe ÂÈ|°½œÜ¼àÂó3Å)a`”_Ö ë¹ëEW^N„Ë.ÿAFí„™*éóPç¹ß a{2§äУ‹|öÓŸ{[®=ãk¸£õÃXëe]`Xu#G:õqûwˆ_’ò3Ðè}zdŽbn›Ëˆ‡¯ýÓ?ĺödzû†ó‚NJ¦“o0k­I 2�Ê/bŽœþwÒxüP~aœp@–ûyŠð�×…£ñè8”žÀ %+<Û\BfÝŽí&_&Eý$ýµmJT»ÒatNÈÓ š?‹ˆ×ƒ>$¯3f9ëè Ž|w2–-\ÖGÑL›Æø8ñøs|0ŠÕMa¤·ôÂÈ¡¨œmú'–‘9êΡ¸¯5žãÔº=jTœrïtùNŽa„x»æg×$FÇ{\žÒ&™CY÷öïפÿDèàúaD§›˜¯Öyz»­Ad3g�s˜•Îxÿq8¸èíh~§Ž©¯u1_:µe(ßYK‹Ãp0Fä°5ûᇉ±³£}ðÙêÂ!?ä qÿ7¿ù�\¯áÊ¡Ew²ö+"‚Í�Ÿ‡#ý§?ýi’7ì,㦌O¿ƒ}“ÜJ)òÖZ)’ÛýŽÿ½Ä­œyúEø¬ –8ˆœbw`ÌÓ^ l Yrm�ar™¿-ÂèðœSýFæ#½÷þáï3ši“pú#¶ÞsÛ<„CÑiãv©Ën±ù–9ïé[N�”†â¡&ywòImöÚ{¯ÔmØgŸýí\È[ï~ïw�ÏÞ<×}É‚$Ç:ÚmBvŒz³O´«–_E F¿ŠÉ›Ÿp­…aI¾û¿b0™èëŒX;ßW…ÁÅã-GA�<²`QHyg,Jˆ‹/½8½jBŽâ†äPKYÐLB„P&¯~ôÑ<ú{ï¸ïAœÄ�z`¹ÛOI“”Œ`¶ïT.™–Q¼Y´]ƒœ:¢éëëËúÌ™ólfηHR2„'SŠ‚I`­Ì£…K 2"㌠¦óóš!Âì›ÅŒ[XÕ› ÒƒÁgU'ŒJ¿ó‚ûì³R1�ø—ACÛr‹ÖÂ)’Aô€(4Š•½ñrvPž.·„IŒG僱0OŒ~· ‘B¾ax4N>ù£aìí—ù^|‡0•teœêAé±ø!‚„ÛZ,(ž?‚P�ìïž$…(’åtóÔVÈ .8/·À!YRGqTftJo6Cøî{bE}sî>úázÖYg¦q.RÄ<’„PrlóPýmÝBnºŽB[’Ûòü}+<¤xŸí9u¯¥¤Tv�-sñæÀN$ùsì±HÅ“âlË’ygK™ç ¶(ÍÚ�t-áÖÆç÷Ç „!$ ±Å8ö½…—ñê4Š�¨Ç–wC1b/úþ÷Ò˜% ÏBÞ†êÊËJ©¢49µ ÑÛ a¤ïàË#-Äý©§žJܱê.ÂY‹ð�Ûåž{ïN¼÷Úsï•JÁfÆïEß¿(嘓1vØq‡æ½G½7“ù¶{ÚŒF°ÜYÆÕøh‡È²Ò&˜1fÿ <ö7ÞwL*ø”p†r7†å�§‘áâè^ YK‘mçËÀÊȰ¢ÓÈ*!ß”ÿ^ús¨„‘yo=½/ŒD€È.Û�% •(g‚À©A”Zk‘îé}2ÌIDAT»]c2’’¡9e·)Âÿ¾$…‘­”gòA¤¢è/FîÊ Œ(ô¢¼n Å÷Ò�{úÝixÜI“Z䡨(Dîe—]šx ÉUõcˆõ2?vƒÐت܆S§R  5‰ïðýH¦ýâæ›2g¡- ï’™·ÏÞû¦AåD„&"ØšAFóØ·F"|z™GÆW/„QÊÜHdL®1ÐÆŒ›rDŽܥ—£ˆ)†*ƒúèw<é½nI³õ².À¯9Ò©�Û¿³~Èf åQG�Žë�-”¥˜ßHuz¹íÿô¸÷…ƒ AA¦#I`k^N“l9ÖGsÀëÓâT'ãžÞg-UJd2BDÞ5GˆË�¸ï>ûå:&ŠY´‚-Ùd"ýó'ÿö“”!ïla‹ûÙžÅÉ£tCÙbF‡¶uÌ|UœZG'¤Š�ö¬[bì‹ÕCnY÷m§¥o›ÿJINoÉÂyj~|ðÁ1~Þ’sîkN¼ôÒ¢ŒÊ³v·›Î‘–…0!Û¾wÑ÷rg�¶:UJ´"ãÜØ”ÛçùÐuLòR’#ÑÈ)'ßo‡5¯É }÷Ù'·Ö™×œèì‰k®ùis_Bæ˜úèɶúí‘ó@ý�’»¼ùÒ­\Oðºø§´_¿†0¢Cš§3gÎŒäÌ߇ÃcÙ¶‡9N7|(t®›ÿã©7q€¶vT´ò`¢$“¬O¿%�Na[/r°rÜ‹|ùSœÆý“�0”¢Ïè vxÐãè… &çˆû’—Ñb+¯¹Ïi)g­¶ôRKyV‘ç�nê�ò+m3aBsÌ1ïObG}.X�Î@:´DòòäÉ™‡‘že]€íľ‰ÑÎ�¦þbnXï9®% ï â Δ¢Š=éJF©wg»-†‡œ3¦u`R™¯½`µ:^[ £Õ¤Wmíº#PL.Ï�-tH !‘”˜IG9#)mG1d—*‚ƒ%Œ(¼Ø[Fü¹‘ÈBFÓg NùÙ³g§AeRKd&¨x×ERˆ„ð�HŒqA² › ‹ˆcìŸãÃs¯žê\¬g_»’ #%eV,(¼øB¼-J pŠ’‘2Œw9]i1À€ŸU�0*ýÎPDø .DÙÉéãDýŒHx*”(ù0±ïäâ±Ý†2À6f( ;ù”Tâ(* ŽóÂÃèï÷½/îý÷OR–cí† !|/RR‚¤ðÚq‡�òˆ)cÎBjq ¸!±2P(ªŠ1…”¸ãÎÛ›™�ÎŒÜ)ë‡B´_ÎJ¡�à‡Cb¨ó´1”N>ùäTpí—¹? n!îˆ-‘S¶Æå×b÷x<Z( ¼Ž“·oå`hOZ�òÅÿš„,E“81h×]ãô¨#ÅØâæ”†4…�Ò©N¸ò=l(ØÈ+s…’`ÎM™²[*Æ9à;˜ÈHF‹ÅWE™%Ó]wß�÷ÒîÑ a„èrß;¢oEøHÞL yW�Nú�ròÐC&i-%µÂÈâî…è:#¶¤Ày³8ÒwR�d»í¶{*˯†LÓ”6žû� ()éƒ!ŒÚ=ï”&o±ñeŒ ’yä*+W¢Ûi,½ôg/„|ô§|c (^D¤ˆº ;çÁa3˜bì]qÅ�"äöÜÒI‘7þ­ƒ<ˆób|ŠdáÌ`Än¿ý+…0² Ób^Ê�E¶h²Á¸^¢5l'�yFX”æX/óÃ<1v+·­mï âƒlêT"ŒÈ6rñî�5ß¿8ÖÈU'O•õÑ–"ªïm¿} ‰úûr›,Ïs;ad\0 ‡:�z%ŒDrf„V�a }ÇP#¿}a¨XÿGÖ¼á Œl¹êe]°}hEF¢­vÂp5_÷Œí#­H¾Vde+ÖQë-¹ÎÙ€ ¢—Ò“Æ�Â(Œ±žY·E爌ˆe õ�øÃ9FZ„Kk‹|Ùo�GYçw‹1j‹Ê„XïEV’iÖ!Ñh3C_{æ&™aÍ#7ÆÆ80‡^#�¼CÔüIFdh/óÃzäúÁÊí=bœ´ë õÅ@„Ñ>™à¹¾GÒ!TD‘0ºƨ5}óˆ„ÜqÇ�RÎÙ:OFµFæT/ó¨×-iæÑ¢0PnçÑŽS¼¬æÃå€È­…¢-‘ÃA! zYèw+’0"ÇDZ%IÑÀ’ñÚú, ¶½pn<óÌ3Ù÷¶H!2àH†êSeq¬wˆóXvÓèÅ#zž›Å¸ KÀZ1‡� ÅëcÝý`»›çG~Gÿ ‡XßÌ÷�ÂøACž8�…\õ[ey„‘ïÏ9çìŒÌM¶Öqu²ÞYO7]WD4®ŸDEOŒèaú«gµ¬u]äÕCÅ›�?%2ÇïrMˆùBÏtˆ ‚ÿØÐ­+¢.¬ñ�J¹Q�¬#cfÍœ•ó^>VQ–o²qê«ä"žž@?G‰4N9rT_Ñs$ò¦·ÀÔwŠãÍÉ+Dý-�¤¡Ïуcµ›ùBÖ­È2TÂÈ6Åý¢ßŒä&2L<¦vR 9áÙ4tD8[fRÈgß—õÞó�LÆawá…¦Ž'‘ï�‘ð`ô=ÎPý?”Ræ¹Æñ~DzqˆH•²nä³dó!¹é~‚8�þ8Öëj»~2Øg•0Rc߸ÿÙµ?KòG~E§Á�ˆyĉ`}m'‚ùJoæ�'kéür—Ò·Í�±‘7Rò@* ¶²¦§}ü‰±¾ §rØ[KÉkÒöõÐ{Úí¶]w™’§êî³÷¾©s¸W-¿Š@%Œ~“wä'I‚ñŒ€aÈS^xT}Ç(åeá�9$< ½Å®,Ú<ž¢}xâLjži{SÜ�Š…É¢$Œ\ø)&Ù$3fl*æÖydä¨#ŽÊûa‚ YÂÇ¢)ñÞýáy’ÿrRòÙØçÊ«†0pÄb___Ö•rmÑ¢xžwÞ¹i†¶Ö©«z÷Wùmž� ¡¡ŽýÏFTlÏç‰íð<O+’ª¿+[ŸñÔwÜq™—F›=g(ø¬ê É"2 ëÏËA�ä�±�o Ÿ\§D´@Œ·‰}³ÿäÖ¹ì²dß[80+™Áö¿C¦XP…®êB_äÍ­Óo Ccí §ø ÄMŽóP\(0ôÉ“[Û=FŒh)ˆežÌ b‚áFáD<ð´9ŽñÑÚc½c*Oòjñ �¤þDÈ ´®¿^»ïË‘EÑnE¿©³çóZQ ÛŠ’^ 'íu‚°9á„“XsŸ2¯ü9AáWG5åÃV3¸ /9s(;E±Ö&^Ø;Ã0Md‘DóæP<…G««ß›dÃá‘à¾/æY§¢ß-þÚíTEIE‘QNx¶—Nà"‹®»áº[³È ?òDn›ô †7Úødd,«¨“­äDF“Å8Cl Íï¯PÚÈIÆEœ¼5fÈä¸äÝû„ŠX¥�–ù@v§Â±�¶'RFô‘¹Õ^R¾Íi‘¸¶[9a¼ÂJ¿oò ñ.zÇvHòŸQÕK2Fäœ!ËyÔm�Drx&ƒ…÷šÒ?D:<Û œõ£(#[?ÞÙqÒI'‡b{XÎDË` %Ѷ�{ã¹M‘€¢õ;‰�Ï“Œ(å�åíýȉ'åúa-| È«á?<¡‡ì@´‘gú×üCêÁÈÖ‘¾0:­ÛWÿäªôpÿÉRÏ0z�ƒ•ÛúÒ8)ö@}¡ÿÍ øqé7[/E€*Òô¾Ç|‘ø_¤—¹hü‹$< ¶«SäÉ2Ó)’Ötó¾Dì uõ*Œ sU„¥úѯ¬9È‚ý"‚€£ÈØ'gû“êož‘;"7DåÚr-yn¾(æ}ˆüfH!7EŸât¨ë‚-6ÝÈ‘¬Dÿ”H]óK›ÉHAËg 3knq,"J]+RÈXô� ãÇ�Oùà $�D»Ë.¥jžyï}rÉyݙ먨/ãIa8ërnÿÈ)'™Œ]VŽ‹Ê?÷¼sbKÌÂ8µð˜\§D +HNý%Ù¸õ¾½ ^ô©ûYK·ú¨¯ob½ÚÒ_1÷9Rè7d’ÈtQ(JYŸäXû?_ùÛ’íì…02&È=ºÌOþíêô®ÚBÏþJ{)žÛ_�ŸúÒ»Ù§H 'ÍÑ—ÄXk�I,âH0ƒëJÞH46†1¸q´o½ˆ’ ­7Æuëð€"“Íûö~¾;Ö¤NÅé€Gý¾lG»ƒ·Ó5kâw•0ZMz½袘a¹-hÞB‚Ñ@A¶m¡Ó®¨ø�kž{N²ßçr1lÏÅ1L¹8ÅB킉@ñâ…×…aÿR|?*ŒI +å�jañ;¿ç¦‹C@Xxx„éäñã7Í×0pµµÞ"M�;‡piW,—­oIFGÐY´ElôW`Äxfඇâl„�÷N…Ñézu¡ôØŒ¹Á⣿VåR 2EBûôŸ-Oжçx ¡N)Зú�w�ñ‹œ¡tÏœß+eü.ˆß¹—±‚Xðâ‚$N¦/%Œ$¿÷{ÇçÂÀc|[\àF©ò=ï䨱žû–‡²Ì“–�ýlkÜEÿ *mß²!�x’Œ;ýIi-SQJ»�CÏ6–}ÕÖõ¿­ÝÆ­âw óòâ ÊóMRðÅA¶Pn‘-Æqù�:"åæÏ.O³XXgãXøgã"W œÊ3\G¸¨9ðÒ¢—âÙAˆ>攈sT­(ë…¢¯BŒ¹G¥ô»zñ#±ÔËçp‚—þŽ)šã©_Ë�6Þ(ŸÍ3Ù© µŒ# LuÏDè�rlŒ£¬cüŸ\¡´›ož«øýìÙ�G['éBA„M™Oú_]á"LÙÿ'LØ&qÔÇú•±+9p\«r}©{IúO~¢²¿ÓÊï[òµÕæ€çdBøð\"‚6ϵ1Ë+­-e>”qúRlq$¯ÕÅï´©½…L}r>†g>ä©ëŒKF™¾·Õͼð¹~jÉá¡õ§6˜ÏúMRUFžþ1Õ]0Tx?T…¸+u'÷�×ßp]zdõ§ˆ45ê:�ÁX®_öÚãô—gž6>ç·Æg4”#¶ú•Çxn̆ӶA™w)Ÿ¿á? }k‰yd¼`©äÜxö/�- ¶j·F½Î�2‹üZžÜfx'í²eYÌý_»´C{•NLDj–y©_Š1WÖ sH}�Èä_�ÑOä ™ízòÍÜSe¨ó¨W¹`l�ÚÈ€y>únQÈÔuF®“Ûæ/ÚÊHéO~¨¿q©Ïmu¿íbÜ1Š`[ð5gÈ=òÛgæ»(™2ßÝc(ëB·r$Aîâº2øÖØj‹PØl³M›Oê3Y]ÚRn·V»æ¤~©ßsœÄÜGXk£¨Ñ\7£¿­C’Lëw8õWà¬OEà�!åeŒ1ɲȼ†ß@r¼¥×ÍʈwQ6Æ[‘9žá{$%}¤½Xë­eê(¢ƒlÑGd¬ºùÝ~�¿fr: ‘žIk¤RÚ…Üûú׿–íÿ|œ*è$®Ñ£ß:-4ÜÏ?åzÎQ‡ 0¦Í#2Ùš¸VD›oú�#ŠœAɽùéO}:ûÏmSN„^Bï*ó!÷zè Æ²Ã@ô™ñ[ô»öqìÝÌ—‚µß¯ˆ¢Þô™œgOÌοÇÇz§_É2ýEåúä,=Ôø`CÐEµ�Œ1¶ÒÁcëMÇNY?ü~™uºÔ]›½ÈWD‘¹œŽ›KƲ~°5püøq¹ŽÓ»†RëŸÁ<ë×ñÛÒe¬Y”Ý�¾ÁÖ‘Wƒ‚S£-ÃÛöéØ$ZÀ3�¹òìÁŒ»Ò/BãϘ³ØÝÏt­wmõ*c·›ëËœñ[×z~Eû,œ~¯}žÑé÷ååþ®÷*r Ûö•û ô." U¯Ö|×ç+jÞª;lÝ_é¤� T¿Uõsí¢˜*Æ[ÁmEÕW_ÏÆe+å½Ó3†³?Ësõ«>Eê˜×¼¸"Êl#“+ã“1¯yqW„ü(ãÇ3˼^Qã³´§—÷R?÷P?†톈sº(C§�0jÖŠ˜ÆG'p!SVîíõìïï”gá W�KƦç¶ ÷<¨>°÷RJ½Ëû@× Çç‰ãÖ…^ëÒ2ˆŸÎ(V‘„Ó>~Znë±UÄÕ_)¸‘}Œ@ãa$²£¬ký]·¼ÏJDŒ±ÜÚÞ¹nÞw z,ï~+úû2ÞmEÿNDª#Ìäæ´5iâĉ1Ï[‘” j†¸-8\p~Ñ£›ÏÿÁrÛc7ë=\‘ä3#’Æ×b�½,r9�0BªÍŒÈÝn¸>#Ú´uç]vÉÃ1ü¶¿¢ŸÌ5ý§åÕí˜/ýîÞåšòÞßóV•ÏÊüR$à`åT‘ïîSdk/ã| \ÞZ·é‡­zv3^ºßpn<Såe,,oÝqMÁSý†Coîv¿Óï_ £wzv¨ÒÞMÈòêpIO_yŽRÞó¼á®+�E\¸éܹó‚%_Ôo[ ¡K½e„ ï�Þ‡~8„ .å}0ø áq+õ’öþóàÒ6ï+¢0,û#Œ{íÏÊsËõ/×f¡-×zʳaãZ¥V~£~ÞKý:ý>o¸ô×”—�Êõí¿êß­zÉmðÖ}»­W7Ï, …ßVYëæþ¿®ßÀ�©è¯YZýÒÊéUúÃ{ù{ g wº¿—(  %ù´ˆ ESb‹Ãû�‰-’ÞM}jGùܳÚq^÷,÷^ïíõ3¾KÄU7„‘ç÷:?JxW >Ë'ùãþñ>ûñô®ól;¥•×Eî¢ÎÉÑß­|-94$–|ÝI�¿§Æ9¤¢–ŠÀª†@95SžCã"¿Úα­)óQ­j•ý5Ö§$«—˜Ø·ÕT"îÍÂñÕ^’X ™(o’kù4åWꦴù×3™óÌ8�1OÆ"¢Dù~d$\—çqüøñ™_ÐÁ ¢�ÈšUe _7m­¿©TV.•0Z¹x×§U*C@À锞|…"åd'øH\KE "ðÎ@ eÐ,ÉDÙÓc{†­h „ÑĈPXÓç3£[¸Sæ$å… Qj-�U $„HÉlm­rxƒäºµ¼…€œE];QSÎ&iÈ:‘•í¥•|n&3vè‡Jßöß-ïo¤îû—çÔ÷Ã5NV6¾È„Μ¹sš=”äÊäÉ“cÜošDëüùó{š…Èœ7o^óä“O6#G�l¶Ÿ¼}ÎÍál+Òø™gžN i5f̘f˘ÏȪZ*�Š@E "P¨T*«*•0ZU{¦Ökµ@àñÇon¼é†ŒŠèë›Øl»í¶ÍÖ[m�¤ÏòÈxF6ýûµÿ†æ‹ÍN;íÜôm××lµÕV]]ßéþ½Ô«Ó}ËwÃ}ÿòœú18Ã8NV6¾È¤ÎŒ‡g4×\óÓlÛa‡ÖLRG”ÑìÙ³{š¢Š�k�Î|´¹óÎ;šõ×ÝqÄÍĘ›ÃYæÌ™ÓÜÿ}A=“„ئ›nÚL™²[³ùæ›çcßq÷ÎH¹�uÆÁúë­Ÿ‘_¢°º�È|Ç5¸V¸"P¨T*�ŠÀ*Ž@%ŒVñªÕ{g#p÷Ýw5~÷ˆ˜˜Ûì½×^Ín»íÄÏNͦ1Ñ© ¼î¼óÎæü ÎK#w¿ýököØ}jëú08{)C­W·Ïîûw[�ÕýwÃ=NV6~eëÖüÇÍÍg~+‰ƒSO=­Ùoßý2*çþûïïi>¼ð A:=ÞÜzÛ­Í�¯º*£ý>õÉOÅÜÜ{X›:kÖ¬æç×ý¼yôÑGmÜî]Û5GyT3qâðUÃÚ¨a¸ùÜys›‡"² q´uã"*mI´�·–Š@E "P¨T*�•�@%ŒV>æ«õ-ZÔð¦¿úê+°^3zô茆éVá/ãóÏ?×<ùÔSÍKÞH/üÆoÑëç¶Úò4kÖÌ4('l³Mæš?^<÷µxî¨xî˜f£�6êyëV¯�5mÚ´æ›§£yúé§›8°Ùwß}“ôÙb‹-:ÞºÜ÷oÖšþ÷pŽ“•�í@„Ña‡ž„‘È“^æC%ŒVv�îy·Þ:="ËÎ9>¿9ê¨÷6{ï½w�FƒZ*�Š@E "P¨TV>•0Zù˜¯ÖO¼_DÌ.�è 'ƒ,Ú.#böŠ­X6wSÊ–‘k¯½¶9ëì3›Å¯-nN<ñ#Ía‡Þì°Ã™œ–�,á¯ÿÇÏ­ _øüÓ }õÕW%Ù4a„f×]wmxÏA2mÛñ±%g bF~¹2¶Þº•cÈ©LJ»A¾xñkݳA7íO¢"æE„“Ó�Ö±N~‡Üºë®»2Â詈–RŸ]wÙ5ïïÚ—^~9#¤FFŽŽ1‘üvü¸ñ™W®–#Fä³�%:éµxîFn”ß»¶œ®T’øú�6,ziQóZÕ RÉ}Çm2.¯óÿrßBè µ^ù€ÿôzý"ù1Ñ6m{ååWò´9}´®¶ÅV• 7Ü ŒÉMòÄ©öêècé…_XzíË­2bíͺë­ÄÛ1–lw“˜t›#啈œS—_ˆWÜ[¾¾øõf­µ×J¼%1.ýè4»‚·ñ!aóËñû#Z'ä½þú’Æý´qI´ud´IDžq36êÕêç‘íÍðï�Ɖñ1”çÆk.ZØ,\°0Û«-¢â–MÒ\"_Œ¼3óæÎËö¶rl��yÓD{[í~!ð5òZ¼æÓˆ¥§„!@¼Ú­ܯ¿#„\´§Ó|p=Œá!JqáÂE‰±¹,'ŽÓ _xáùæöÛoo.¹ô’œƒ‰0RwcS[àj,¨¯çz†96zLôa´ ÉádCŸ/a„ü>ä�CC.nÙ¼uÕ®µãw~�&_ú;½m¨ãO…L�iÎ4ÍZKë¾(e¨gm»í»cml¿µËÊÁàCÖù=%!ùuÞ߉¾{¾9ô�ÃÒQÐäÿ¶�—q5v¬º7ožtgîˆ6]¸pA,ð aÝŒŠ{ŽYa:v옌t-òrÙy?OÙJ¶ïëŽZ7Çy‰N-ó7Zÿ©T*�Š@E "°"P £5°Ó‡³Ée ÕSArPôm¡šºÇÔT»ynׄQ$‚þë¿ùë0Ô^k¾ü¥?n6Ût³æŠˆHzö™g›í¶Û. #9¶ÞzBÇÇ"þr£\ó³krkÛ~ë·²Þ…D`Ðøþò^–†Í>ûì“ ¨· 2Š«<ñË'š[n¹%«g’Ș0aë ‡¦Ä¶¹YI1†Þýîwg=µqnœõä“O%¹³AÜcÒäIÍ{Þýž ÅZÑX håá‡n® "Lå?²mB´Éö¥œF&I0²nöìÇÓ�EumD‘ßËÿ"i0à ¡Bg¨õÊ›tø§×û"Lrâ›o¾9¶ò<�DC–Q>>r8Mš8©Ùeç]š=÷Ü+NœÚ2 óR%Qj÷ÞwOsß}÷çµÆã+A$0ÈòH½gÿ÷Ä�˜dB¤›âô®x y ÆÃ}‘Ä~Èé¸q›4Ûo¿CÜ÷€xßþMÂÀ}EÅÜ2í–æ™¨ÂJAl<;çÙffl‘z9 ÖMâúw…ÑŽìœ4iÒÒ~n�¯¼ Ã?�†øPžk+˜±ë¾°ß("øÞ÷Þ÷åxj¯ƒý™ó¶Zýâæ_4£#‰ôqÇ›ä.âA»§GÔÈýѳŸ•[+Ý{LŒo§„íýwÀd2w}`®u"Œ$½î4 1¢ÞwDRëG#i¼$× „‚ym¾^þÃËs>†0Bb"m$uŸÛMï�±ð˸ׂ ,Ö‰g˜sÛEbú]vÞ¹Ùs)QŽLy8ægû–´A³mMÅv5óXûÕm·ÝvK\ú;½m¨ã/ «+¯ÌȘÇdÉ~…'¢Û³>Äü®»NI2F›Óo…X,>›o¶yV‚_qÅ�šnº1æì½I¼O˜$Qà±éf›6{F„鱿i\í˜ÃÏѯ¶(ÞqÇÍÃ�<œ„ÿ’7–¤œ›óz÷ØÂ;9æ‘ùŽ\V–�‡H[sÄ vÆ;ùÞ织¬•˜¼ÈἸþS¨T*�Š@E` D F«I§E�¡-â�OÙ-†p~äH~^öãw¾³Õy¸A*¸aÂèã=÷½—ïË}ýíZ†¯ÈÊ÷¬Çf57„—˜w_tÏäI“›]vÙ% ³þ VÊ¿{»×¢ðòÎ�H…›~qcsÎ9gçgýFaô?‚0b|þéŸüYF]~ùei4 I�5ÙFb§R£›#Éî9眓ÑŸú䧃ÜÙ?qÐ~„ÀÍa KÂ+ÚE´ÓþA6L�:µÙr‹-óö  Ûðeûì½OóÄO$a$oÊŽ!µaD ½í}>¢� îHo�Ƴ¤ØÈÛïÊ}o»ý¶æ¬oŸÙ8ü�ƒÍ6í¤¢ nŒœÿ¸åææ�0Ø= ÏE"VÄÊQ?øO™2¥Ù#ˆ;óÚe3}úôžêÕ SßÂh¨ífÄ2úï¹çžfÚô[šÇc«£q¶8ÆöÚ¡³þÒH 8yÄ‘I‰>0&_Š(«3n®»þçI¢ÍŸ7?q6Ö|?*r\I:ŒÀ›Û'ö-Ë‹9o†éõ×_Fí}IŠœ±-2º0I£ �65úp�=öxÛ–Èa"¡¯1enéa¢¼^Š1&ÂhܸqAžl—õ2ƶ £Y�—W'ób¼"*ûܱa`?òè#Í­·ÞÚüô§ÿ–Q/?õã±EhŸ7eƒ:ã¶ÛnËè�qapûÝN;îÄå¼$×® ¼f̘‘'ý‰M¥å8#ä'²}¡ƒÐƒó²9ŒJ„ѽA&ô7Dóè#DÐmQç{ï½§™}eŽ!ãF…<ƒm¾‚ÔQï›~qSŽƒn #ý†ì}ìñÇòÄ3c|fäQ3‡slêoŽ‹†<ø ƒ›ƒ˜á÷ij³ŒgÑ3FD†ˆ'2BŽ2ãÈ66ÍÕC=4IÑv"m¨ãùsÆ·NÒî±$YÕó©§ŸJ¹‚d›$åÇ#¹øŽÑosù`ú �=|Èjùæ~dFs饗ƺ1NÈk%½Þr‹­"ÝfA�Ϥäüí%Qo�0gî¹çîœßÆ–¶hGtQ’‘òõ-uXì¹çžé8€ù#1&Ê|@.É‘§Þ?¦ÈøãŽ=.å°ìD ÖR¨T*�Š@E`MF F«Iï3ò]qºØùœŸ[ ú%ŒbKˆ…ðñ—AHmÚ\rÉ%ÙÑ#¶~ñ03Ê:•%a°1önºé¦æk_ÿZÖác',£K x:ŒÆÓÙç|; PdÒÁ’D…¶) ë3Î B)Ú÷…´SxÀg&1s{?¶_ ‚v‰º1Fà§Ý"ƒô�-)»ÑpòGNκ»¯è�o|ãëyÊšS•D ¹¯­È©é·Nk.¿üò4ò{¶ÓésD˜(Ûw�“#âå¤O ChϬÇm·ÝÞS½Ô­S)„ÑPÛý@Dµˆ¹7 lQE²É“wÈÈ*¤"#ÛAl}ôÑ;ûì—Q=ë¬3¢ýòUWý8¶™,Jây9rÔÈf~à}o�="¶6Š{Ѝø�ß8&#,:µÇ�€¼‚·\8»G$ˆ6Q5¶=F¯~D\¸ï‰'œ˜Qaî+*é²Ë�QŒ];RÅöIm3ö‘­¾SG}|ê)§e™Ë#�'sçÌÒs=ßœ¾1">Î:ëŒ$¸>û™Ï5x`n—2–•VβëÓx­‚,=þør[ž|4·ßq{Fú˜ë"ä6�9åo²æÞ{ïM¬�FˆÒC9$åE'Âèλîìw>ØFŽ!ξÿý‹ò42[·‚Ôö¯õ‚œÒçæÃ̘“d2IäJ7„‘:{‰ä»:NW3ö�šä¨~,sެ@¶˜ÛÚäô5$›-Sˆ Qˆˆ8ÑHˆ\ÛÀ6Ùd“$ÌaùøìÇ“\êÛnbsòImDIõ^ÆBüŸþékÙêºEä—‰IÆ™CÛõm—s(†ZŽQ[öDhuÛo"ㆂü÷rÌ6MóÒ–´þè‡Í‚4"9wŽq˜Ž‡ –ÈMXwÅ8ø×K.޾|4I@¦¢ ±Ï† Öð²•MŽ;$-×-Ž“¾ –¶ ²RtØ»¶Ý6µ]s^ö·%0}ý§"P¨T*�ŠÀ„ÀŠ$Œþ?ÿÿ¨ož­@IDATì�wœUU²¶9ç B79#9©€ŠŒ1;fÁœ&8sÃïûãÞ¹sï�1GÌÊP1¢ˆHÎ$G‰Mnrð{Ÿ:lî¡í>ÝœC’®5ÓvÓ}öÞk¿«V­ªwUÕ*ð³Z8ʶgÇÏaû†Øe¥+EK8Ê;øÇA`ãÆ�aáÂaÅÊaýúõ¡RÅJ¡K—sB­Zµ  ŒŒ aÞ�óªU«Â–-[BåÊUB§Ž�B… † ²åËÂܹsB‘"EBÛ¶íBZí´PªT©°wïÞ°fÍûûüùóCñâÅC‡ìï%J”°çΜ5#¬X¾"lݶ5ìÚµ+8x0”ÔߪV­jŸkܸI¨R¥ÊµsçN»vÅŠåê×�êÃú°ÿþP @ëòåËÃðáß„R%K…ë®»>t=¯[¨_¿~¨X±b@Ìf̘ÞzûM}>„›nº%”/W>Œüá{{·ÚµkÛsÓÓÓCùòŽxnvÿà~'M Ï=÷lؼyS¸äâKBûöB�:uÃÁƒï=~üøðåW_„uÂö¬³Î ;v }¯¼*4jØ(8p@ž~öé°#33\s͵†mõê5ìÚ_~!L™2%*T(ÔÕ=/8ÿ‚аaÃPªtiÃ`Ú´©aæÌaΜ9¡Nݺáá�;w±ÏOš<)<óÌS!###\Øã¢ÐAýjܨ±a5cÆô0aâ„0jô¨P¸pápá…†æM›ÛØîÙ³',^²ØÆtò”ɡЯû¦ßÞÚµkÊ”)£çÍ ©ô«`Á‚ÙAyøw“'ONéþ - C‡•Ü- eJ—1Ì›éÝÊ—/2…ñì9³Ã_|2wìmÛ´Õ{µ7¹,Z¤h˜5{V˜0a|øî»á¡¤døºk¯gŸ}¶É.²Þ+W­ {…QZíôгçoB½zõ÷=»¶mÛfs‡qñýÉø�pî9çêºúÖ¿-[·„9zîtÉåÔ©SlÞ=¤qìÔ©³�ãüóÃàO‡‰LJ•+Wšwïv~hÞ¬y8óÌ3mž-X¸0L›>5ŒõC¨VíÌðàýjw ̳…‹d׭ÿC²““ š÷É<·C‡Ž6'i^<«y±sçŽpíµ×…ÎzŸš5Ï eË–µgÿ¨¹ûÉ�ÁañâEÖφšàY²DÉ€ìþxHçðyîY³fM»ŽyÿÃ?„åú¤þ›6m®½æšÐ ACÓ!#üo¦K˜]»v³gN—Ìg÷žÅŠ ?ýôS§y:èƒ÷öíÛlµhÑ2ÔÕœ*V´¨ô¢t༹áá»@º’1Evþð‡?†.šo‰ºi÷îÝaªdç�wÞK—- 5kÔT„Ö­Z‡ÊÒo»wï K—. ãÆ�•Ù¢1¬fãÛ½{w›¯_~õ¥é‘ùó´¹ßõ¼®¡E‹’íZ¦Ó–/[˜«_ûÚæèm·ÞÎ=÷¼PýÌêöwtw²ò‡|<ùä&ûåÊ• õ%·�%[ ê7°5 råÊÒ×g„­[·&5nŒ{2ø4kÖÌÆ¶ÚÕ„Ùæ0vì˜0à•aó–Íá zh|ÚH×Ñ©nýÜ`X·n�æÑÄ0èÃl YǸOm­YèXä`Ö¬™¶ ‡Wöékº¡†Æë§Õ?Ù|@?0Ë•+«±?ÇäÙû|¨‘€�z|F8€E‹ÑuPdJ¦Æv±9aüÇ ònîÜy)õ g*Q‹£dß{ûöía‘är‡¡2rÞÊJÖ*T(oï†óñÙçŸÉé[a¤`Ó¦MÃE=z†bÅŠy7E¤ N#N;„"„ÎßÉ&ä*¸ïÔ¸!+‹§‰Ü6¢\‹œ#§5ª×åÊ— EDæ@€®[·ÖÆB¡dɒᡇ1R‰qä] n¦k<‘]ž áØ\rV¢Dq ÌY7~lxõµWLŽn»õv»þ 9Ó8°‰Zn„ÑÑ>'9�„~ý�7LîÛÈy‡iÙòlÕþ Ÿ¯¾: ¬Y»6´iÝÆô ó\!šÑÈgñâ%Âgœ!¢¤”½ƒXc~0· aûõë˜w̧£%ŒöíÛgº}ÉUNòÕW]­qW_„�é�á‚ Â7ß3Bµ‰Èì¼FŒ/¤-óô­·Þ <磌® íETB´0Þ�ˆ|†g¬Y³ÚdŒ9Ï\Þ'½aļX&rr"³•úǵè dâyÀ+/‡"许¼�‘þ�Ë�¦©È¸@-Z´(4nÜ8´nÝÚµô´4#EmÞ0wÀ>™qƒÄNˆÑsÏ=×È70#Âè©§ž¥ß.»ô²Ð±C'mÔ“,V5‡g°A1mÚ4[³Ð Wöé#¹i)r¸¤‘œ¼Ãl‘·Ÿ|ò‰ÍµÍ›‡–Âمصy¨õŠ�“4½ÿ—_!©¹‘œ`Àš�nFfØÀðæ8Ž€#à8Ž@~FÀ £Ódô*:á‹/?cÆŒ‘6Û¢qþø‡?Y„¯ˆƒ�¡<~¸¹ÔH>Ä»ï8l8h}ô¡9/ýïº[=]ÍÁË”ãŽqÎ߇ýTrùðÀýXÄNöZ9É#F|g÷ Љ]pœã‚ ZÍ9ŠÂè{e_9)M iˆ "rˆ4èsîÖ+꣈ t¢¡p¾36fù³ZNDHVˆE÷ágˆ {~‡ãúGcìãäA@,—3‡ƒ ±BTÃþ}ûÃW_V¬XaDÍ E‘Ô”ƒ{�pÂÑÀñÀÑ{ã­7,ŠåQdÉÔ©S�˜Y¦èœª¶mÛÚ}y/Î QM#GŽT$Ç3ö»xð0¾3DdeG�óo¾n$V½ºõŒ!â¥V­Úv�è?�ôrä,vÐE>@º1æYÉö‹H³D-"Œ’½?c˜™¹ÝÈ ®�-c�ìà˜ãøS$$$'〃M$ Îñûšbg¯^½B3E°mTBÄEñâÅ$#…ì^8†:¹`<‡âˆ/H+Bc8h?]ÉEäãRL}zè�‡l¬‰è "…ùÇÜ„@A®1Kd -’g",þñÄßM¦úô¹Ò¢˜£D=$j¹FÉ>—hÅ!C>1r¶t™ÒQwÁŠ�®mx ÷Ï¿ðœEzÉAää‘�È6ï VðuPï©ñ–�n8õÓ§O7∨ÀGþ]h#‚™ëŽ–0Ú®ˆ¢áŠ(›5k–‘¾éiéá†~+B®ùN?äìˆ#Œ˜@Nø\^#æ8ÑCŒÏ‡Ò“çjžvîÜÙÈ–B… Ûð@ôÅn�Ï%…}Ø.‚ˆ¹¸N¤3‘i·Ü,"Sä[ÔÐ]ãEN?ýô“ºv­d§«EeA*A˜¤"ÓD�@aCäi'�Qy�žñ�±JfÜXORÁ‡È„‘e³½Eäù ŽÎ¢ñŒïF 7Â�uBøª¾W‡&Mbë‹}Hÿ™(ò ò �†Èíž½{lMË»2!›4i]êßGÀpGÀpâpÂ(Œ_ó�'‹0ÂÑ]¯t²m[·™1N¤DÑA¤têÔé§'ÚIéå—,mŠ!zÈz¢bˆ\ø~¤"š´³ža„sÅ bˆ¯èßÑïì�yü©|c%Dú¤ÐY"¯z÷êöÉá}÷½wíw¤síÚ¹+|)‰~ÝvÛí–Ú)ƒ£úíw߆ J�#ò¨uë6Ö'RÑ fVÿ´ZÎp›CéSíéj4œgœê‘#¿ÿû·ÿ±è¬»Œ°ëf)}¤^eG-Y²$<#‚i½ïóp,åü­BG|#Ú‹("¥HÏ€èa0•~A²$ja”ì{Cê@Ì�")™±!âжoÏ´ßãøã\ònDktêØ9\}õ5æCú�‘ñ‘"¶pÜq8‘1IûR Ñ38ýD¾@8BP%jȲŽ3 y°Q¤&÷&Zh»ˆ­ÌÌ̹J*ݨQ£lî»OĪƆôP¢J Œ(5 r Gõ²K{1És#yž4I©‘Ï?g¤C×nÝ,‚…¹Azg¢–a”ìsƒqãÆ…9sg[4!‰]uERòîcÇ� ¯½új(X¨`¸û®{B'(DñŽÈ6$8‘r ŒžØ%rmµ¢!Œ�cÈ¢’þå_þM%“"Œ †b©f «4 —]v™ðmxlDa";Ç·tÀ¼FD2ljÄ$eçnÍStäcDN“2e¤âî=6— .¤h§ra•"*!ŒæÎ�k²a#*Ž$:ˆºzE[èÏ–-[**¦�;Õ«WOIþHåƒ0BW_Ôã"{�DV6 Uõñ 9LfÜŠ`OŸâÅbtn„Ñ\¥²±�®^,ÙÛîݺ‡´´ôø×0â�Jj"² ñÔçŠ>d?Ú<\¸p�}ÌÃK.¾Ô6Xޏ�ÿÃpGÀpGÀpÂè4„“EQ_%¾‘¾õ”R³¨R³ÆYV;">Âh×®Xí""jžSd¦MÃEõ´ˆj#-iƒ±ÿ¾j‘àˆeGÅ?óXüŒC;G»Î¤È@VQóçÆn û´ ýꫯ˜ówUß¾°SáãÁ‡ƒŠ–èuY/«­A$õG,Z ï3Ã5".šÚ±ŽˆœbRÂÚ¶igŽ ;ãQÃIûA\ÿù—ÿ0g²ß�ýÂyŠð¢¶Í9˜ÙFÔ`ùû?›6n ½z÷¶Ú2Ôx‚œÈKKµ_¥E˜%j©ÜlüYNóª°Š/ESAâAÖDÑ=¤4Rw y"Š´–k•âÃÏ:¤­|öÙgJ©Zhd$$QU}Uù‚^KÄÑz‘r•‰ZDtB@hB<�Þùi�ˆÈ9RäH‡£ÎϽ÷ÜkF•+U¶H(£ÅŠŠ€l#"£g�žáÿ\"£ R‘æ7D¡ÄËKü磟s#Œ’}.ä")®ôk¸" #B'œw%U•È<÷{î¾×jA¾�cÆÜX¢Ô/ÒE!ÕvïÙmQ{�Hóçÿhud6JP3ìÿýûÿ³4©d"Œ"xu®š4nªMRaëDÙwj:‘bK¤ýfžç…0‚àƒ©Ó¦ˆpšnòsçý,µëˆäð0„0B·A“’zyïË…Ùèˆ+fˆØ¡62ÙiDZD0²–¬ü©a±v饗a¹uì“·ú"eSÁ'z~n„o+å} qßQ›™ñ-ÒçD%¦K˜K½DÐR_�yˆœ  Œ²K™Ž¿—ÿì8Ž€#à8Ž@~FÀ £Ódô-„u8pöI9yýõ׌�‰B]-„h"D ŒÞ”ã1s"#"!pn‰ðøxð`9õ%Ã]ýî²é_z��Ð_ÿ&*G“è vè‰Ú!†HARkzhŸâÖ´ˆ8Áa6¨­£- 1Âh{è'G4WÂH‘*�ýý1sîØ9§H6dIn©K‘¸§Ú¯¼FGûÞÔ{¡& 5`¾Pm,RçHM£è3Q6¤œQg†("R‘H�"5èš«¯5"rǘ(¤åJ%„Ø 8Â[TL—±*/’ˆºFÔ5�”¡°p¢ …\RÔÙ„ð Mr™ O�›8±ß«Ö(ÙF‘£ a„£ÉIôlœî—Ä#H”cE%û\ÞY§¶Òkš¯¤ðÝwÏ}!Mµ_ˆ~£F©A�›×^s�E ‚2Ì%ˆ >CTãáDÍj‘Kª}k¡9‘ aD”ߊl\ºt‰Æ¥²ÍMŠË§«V[|ËÈÈ0¢ b‚¢ê{ÎaÄûL22™ÚXDÞqû‡kÄÅ?#»Ÿã #ä¨w/£†G|¼Þ>DAÂD„i²©È_"�¾— mqƒÓ椤EµH¨OB”K†"J–,YªTË-jB‡h «C`pJµ‚ÀÙË©1ÞDñàSûæ€îÏÉLÔG‰"””$iÑ+œV¦LÙ £DŽjŒ0zÙ"ŒÚ·oL £dž[µj•CµŠÆ[D EÃo¼ñ&EæT¶H*ä§p‘–ösAwštK¯#õŠÔ¡é3§[á|ˆ¾šÕE,A°‘Ú‰øQQF3¦Oõ4ÿö¯ÿn¤j2F̃Áƒ?2ò Façßô¼Øˆ™ø1�RË &¾úú+;+/„_Dÿ0öèj�¡'!ô�›Hv˜g¤t1ï �Ño�Ê�=DQ+Í£ºõB/¥¼fG½#½ˆ|CÂ@¤a„h¦"‡ #Es]v‰ŠIgCé˜ì¸­” >è%ZDeˆð% "œôBÈY$%‘§&Œ×Yc)uI–…<øs¬¶½ËIöΨvFHOK·âìN”þGÀpGÀpò„€Fy‚éÔÿE€q€¨í€áÎö£�þÙNë¢÷9FÔÒàoIÏ=5núß)ÂHµW @Ž5aDt¤yÅ�I=â¸÷®çu3g“£“AáèíÛ¿/L/Çøùgí”NÝâ´5ê�ºqÅwþ é°fÍZK�” ²'ŒSžÀ4Šô9^„5—¨ƒcIQ]jÀ°ƒ^£FìØòHb9 Œ¨œWÒ†pÖù"õŽF§aÔú�NÿÞ~ç-+LKŠ‘@œˆI‡Œ±ñÙŸ…%JÃÙäxú¾qÅo£Z,¤‹‘ÊCD ékœæE*Ž'D‘ ÷Ýû€¥¬pßÈñ�ð‹¾3G>Q* ‡òí:ꢤ‰ á„>Hæ E‹_}íU#årŠ0J†¸I5%�(ždž ±ù³œo";Þø¶¥@’ÞNÔç¢9'ÿ!÷Íš67Â’¹¹ñÜsÏZ‘e"¥8©ŠyÑD´õŒæÌžm̘±£-¥è�ü“ÕlJ†0¢–ÇÑCx@üR(<»bÈ+WÅNg;v¬�lH*S^#¢Ó˜óœì8äÓ!¡öЃYí,ä&ª�„¼1ïˆr+R´ˆ‡ØL…0B¶R‘¿Ü#æK*ãFjW*øpâ&íÿ£ ‹À2ÂHD#D= ¢ük­sÈ#ÅÃ)乊Ý7Ê’ÚGAúƒz'_@?P�TÐEÒN”þGÀpGÀpò„€Fy‚éÔÿ§ÇpJÐh…êO˜8Þ0Žõ¦èt¡‚…Â|¥0 VíjެÑÎl39Øœ’Æ®?5Y pþ9p ½è�7þ6pº5^¨;BjÉè1£Â·Ã¿U4G•#NI£Æ d§ áp�A Ïãjö°“ÎŽ?‘-{TÃ$#c£¥¼òêËæÜ]ªoœoR¼ˆèYªb¦SÏNrA9¦'"Â(á(%ˆb¼uêÔ5’"‰Z(+b�RifÉÙÅy$² ¬N�tï|•E¬ðœÚñ"Œ¨Å2X©s .0‡ˆˆ2N"*�ô(œ|ו+W‰šacÃIBgiLI3š­þŸŠ„ÑÙ"† _¨#õ¦"ŒŠI¾85î<¥ªµCqe…Ù*@Œãþ¼oŒ0ºÊ¢6éÔ¹Ìí™’Ë=vZ‘D�%8õ¤’Qœyþœ6úÛ£xÔä=aDÒÀ4¢ªB…Š6zöìii€8ÛDΑ÷ƒ "øŽ=÷t Œ"¢*JyåT:Ò£¶Iæ!g**òƒÔ*"çHK£. z€ùû·¿ýo@N™ÿçèd.ä�[û÷ï·Ô=êM±ñT;--üþ‘ßë>*,¯ñ=ÚSÒÐ+&LœH1g"ÎZ)í°”úÄØCRûëÛo¿±Óìæ‰$z%/„zr•"ß暴 ¢›ú9�ÈD5!¤ï�rFº$²Â ]>©Fœ¤˜Šüå•0JvÜ(¸Ÿ >‘œA¸>ùÔ=Ä&äd˱^Œa,mx’mŠP‹ªJ•ÊÒ»}C ÕzBç.TØä‹ñb ÐÝÈ+$9¤Ô’¥KF1âì€t'µö2Œtª }Y²dì$Et„7GÀpGÀpòN�&£M] N3úaÔH�þóm(«h’[o¹íðÉc8Ö¤l¹ÁÑϤR@5mÚÌŒð‘JïátN1Â&ʼn‚¬;2wØ=1ä§Ë#ç�ûuú“ŒyRqh8I;và ïµc²¾;ÐH¢p$ 2«VF;QED pŒü2]8’­[·±ô9"œ8=‰ãÉ�’v¼†�š9 zßON½"*"«•ˆ 0!B‚ˆÓ’Š`ÃA彉ðáÔ$ÒGxÈ1Úñ"Œ¨ ÃxCñ„SÓçŠ+ G«}ûöÚÔ/߉H¤nÌ5ª1ÓF8ŸÊ„rYPN…£_VñgR¿n¹åV#Œ($­àžÃõq ŒH£þQ,}û^eãi¹HÅ®‰bAÏW-5ˆ%R‹ @©D4ůÖqîÔ—Ê)ºˆqD.}ø¾}ç¤%"®Pd)E$�ˆ�P¤„B*�w:F}Fæ!cˆf\¥7ò†š×ÔÜbnýE4N7<�ÿã1«WF})N±ë¨£Ü!rˆ¾!mÂnšä¢¡¹¢”R!Œp䉢«9AJàÏ“Ë.ë­ùØÁ¢�Š-f©£<ïÓO?UQô™6�IIÌ aEQhý5E�Qc«¥È(æÇÓŸ©ñæ3�ïñ)« DH](ýwP‘X©FèœTä/7ÂOuÜ ¨“Å'*Nμ0àe#vøÝÙ-[ÙÜçgd‹è1R'hþéÅÜ»TŬIß$²TÉRF”“úÇ8P3�h[Ö2ô8Q_‰"ŒØø€X\¶l™di¬‘O~i"4Ë•+oº¬¼9Ž€#à8Ž€#�_pÂè4éèôŸÑ£G‡O‡±ô›.ÚÕÇQ&2ƒ”ˆñÆ™±Í~D�-c˜èè×ßxM†òREiÔ±ˆšºuë™ãE´»ñsuŠEdã #vr9�´'Œù 9ál¤ A¯3b"­všnåØeÈ&êÑPs†È˜·T«G†ôl sv‰9!ˆgR; ‚æDF-–ÓùÍ7ÃÌá…ˆ)_¾Ü¡ÔˆÎ�I†cH4Ãó/>o„õ‹ ,î¿÷~ûñ‘Ç‹0Š9ÈK̉öÍת ³Ó¢3HÅ!‹Ô?œhÒ¨¨©t“jÏÁƧjJš"· hHY„” >Ä äœªµ@„N#'•US=œv£²’ujÌ0v¤žùA %œÉb"ò�u~OJ߯Œ #®¿î‹J¤ ˆL€ˆ%Ýrç‘t™Zg�e…ÑqD‘iÈN"fj(Uæt"ŒbTË$o­ùb‘FÈ òÔ¿_ÿ_ÔòjP�5…®)OÚ²¹S©�È&d&ä'ZQ«'™&mŒùö�ˆ=ˆAÈšº"ÐAÅ”’´es¬~Út¥"‘I$©Žy!Œ &ˆ|#ªeÈ�OLÅG�vÞ �†^X)Ý5yʤ°{×îP·^];ᎢÌD»¥B휊üå…0Bþ“7æm*øDE«YK>úø#‹^s"�Z·nmµÉêÖ©k¤$œVG�,ÈFŠƒ³.ÕÔœƒ´„¸Z®šQœèáöÒ ¬-lŽ ;FèMÖ4æùÇÚ`¡F5â(>ntŠTôæ8Ž€#à8Ž@~BÀ £Ód´!�p€ˆ®xzÃMúW!9Øa߯ÝSR#(KäF8Ú8:D|,C�ë×­_kÆ?Ž×ò…c�CJSjkŒƒð)-b œÞ©ˆêààÜñžàÝXE«!Œ¨Ió“ÆBl„"«‹è9( PËDò(*Oó`Ÿ¥Q{‡t—–y8¶ž¹Eô)‹8V\ã^DsEMa€ŒoiA-� "FN'ˆù !LÔ…E€ˆˆ„„ë$2Ž¢áÔ°‰—{H5æ7si¦êÍpb¤N‰’% 7¢ +V¬dÑF�D�¤B¡£�ˆ Òr‰ B7aB*Ñ)DþQ‹±"b‡h–:"òB}ÃWD r¢i ·‘/È ¾xQ”Dµtïv¾éYˆNqK…0*©SS‘¿¼FÉŽõÛRÁy Q“�5�¢ü³fÏÉ'¹QJÄÞõª!ÇR¡»w¿Àä“hQ¢“F¬£¤ÿ�W-;64Hu$å’è8ä½¼ÖDoŽ€#à8Ž€#àä'œ0:MF#CšZ#Ãä°Îœ5â3b¤¤Oy+ÔÊç gØu�/ ‹ãEfPàw³"1Há!§ŽvvqÌ9Ò‘WŒü•+Vªé—Ú™Ž!…ÄÈ®B¤×5iÜÔœ*Œ~RSHã!² ‡�z#g)jC€íÖWªT)púN=;È%dz±{½té‹|%ÒgåjSæù�E8ž4;&ûË/Í!z�H®îÝÏWtVúÝ›?¾E|q_R"H�`§7¾ÙqÑï¼i§Gqì5¼û2¥F°Ó�ƒKT§ÉáüÐ è¨ÉCôãC��h èoZZšÃnÚ¤©È¢4s¢¸.Õ~±“Ÿ¨¥z"ZHÂÑ�£w[¯H‚’]HEjcáô# D¹ìÞ½ÛNQãd9Š~ãôQƒŠ”3®%}(3s‡9óŒUÝ�ºY«M].°JÔ LH¥bnŒ1B&s-Z‰)ÅDÆAÓ¡},ÊbÔ˜QFÔ^~ù&ïŒýç(pR» q‰¨`<™ñm�"ë†~6Ô¢e a¨1VO}�ЍÇ6þgÃìä„bÐÇâ¹è t TÔS2jGA:ר;0êòºRQ\ÌoÒÓ˜S»…!d%§VñùF [ÑlîÉ\sõµ6`M„Ç{ï¿gÎ?z ½áDDRvïÍ¢Œ(¾L}%ÒEW¬\n#Ôq£ža�‘D81Ç®Sª&'Þ奡£ Î(¾L4'ò°^R;é=dä~DA2@ ñÁ!Cš%ïO„º.¾A 1鎾#b}É}S‘?ŠÃúp�Ý⾉ôAvú4ÙqC·Ñ’ŇyLcc‚ôNtÙTz¬Kœ`É\¸öZ�“6hô“õƒÏ¡' ‚X³öJv¸Wå*U'·A ·oÇa5ŒÐD&Ít ÷¦fÙç_|®÷Ùc'V6oÖ"[¼¬3þGÀpGÀpNcœ0:M7ÚÇ™!LŸh¢tø=QÅåàÙAý2j=Ä; 8ÙìžsN)œþ1PšÝ_݇{C"á•SÔQD´à aèsäö~9CÙ5îCÔEy¥òàü°ϵ8´8GÜ«°úHZ‘7Ö߉Œ¢h1»ÅÜ#"l²{Ʊø„‹õKÄ)PàÄóqDè7�´Žuæ³化.SÚê³àÔÆ7Þ ’‹çFú…ˆH�]šëô‹±€ÌÊú<׿·>AM‘lt ã Kò²eË^[õH7ÈÞL™8÷à?ÿ×ìÞ3’kpã3àÁ=/úÁsé/º ý±뤨�+Ï�§¬¸fý7}CÇñ Þ ½YÄû�n ²…÷CÏ!Ì9tDz•¾€%xAVe%*¹/úM4EÄ™»¼_*òG-ºU«Vêûí¹Ü“>D¸Eï™ì¸q?Z²øDÑi<Ÿ{Û·m×Û,lw ï}¡Œî) ®´¨ŸŒïf�ã6}g>2÷‰úC?PÇ=ZQz“wåàŸh>p=÷†4‚|ç}ªJ¯�‚š^Öÿ�#à8Ž€#à8§1N�¦ƒ‹á‹ÓAË‹CÁ@$3ŽÎ5ΆvdÐGŸ;Vß#GÜ>Ópb"bæX='¿Ü'Ùq?UñA>Ì U:%Ž:r¹�Á½O$WÑwä ùÊëõÑ}²~�Šã2O¸såxΓ¬Ïÿ5ý›1dìâõQ„×ñ~�hœxNLÆŠÑ«çšlêÝøŽlñ…l/}õ;z¯ã)ÇbÜRÅ'šÿ¼7Øæ„k¤÷ø|4¿}>Â1ÑwîEË陉®õ¿9Ž€#à8Ž€#pº à„Ñé2’YÞ#¯†v–Ël÷›=ØÊÜ´ãm0G†yô�çïgf}ïÓåßÉŽû©üþ¼“½—äR’‘ÐqÌúѵüžŸi©:’ÜÃú#r5š'.³ ’sƒ8à‹þ‘nÉùŠcó—hœbÏ=öDN$_|�dàDè®è½Ž·ü¥:nÇîAK„k Ö­ŸÏïDŸ·úGÀpGÀprEÀ £\!ò8Ž€#à8Ž€#à8Ž€#à8Ž€#�¿pÂ(�·¿­#à8Ž€#à8Ž€#à8Ž€#à8¹"à„Q®ùGÀpGÀpGÀpGÀÈ_8a”¿ÆÛßÖpGÀpGÀpGÀp�\pÂ(WˆüŽ€#à8Ž€#à8Ž€#à8Ž€#àä/œ0Ê_ãíoë8Ž€#à8Ž€#à8Ž€#à8Ž@®8a”+DþGÀpGÀpGÀpGÀpòNå¯ñö·uGÀpGÀpGÀpG Wœ0Ê"ÿ€#à8Ž€#à8Ž€#à8Ž€#à8ù 'Œò×xûÛ:Ž€#à8Ž€#à8Ž€#à8Ž€#�+Nå ‘ÀpGÀpGÀpGÀp�ü…€Fùk¼ýmGÀpGÀpGÀpGÀÈ'Œr…È?à8Ž€#à8Ž€#à8Ž€#à8Ž@þBÀ £ü5Þþ¶Ž€#à8Ž€#à8Ž€#à8Ž€#à䊀F¹BäpGÀpGÀpGÀpG !à„Qþo[GÀpGÀpGÀpGÀprEÀ £\!ò8Ž€#à8Ž€#à8Ž€#à8Ž€#�¿pÂ(�·¿­#à8Ž€#à8Ž€#à8Ž€#à8¹"à„Q®ùGÀpGÀpGÀpGÀÈ_8a”¿ÆÛßÖpGÀpGÀpGÀp�\pÂ(WˆüŽ€#à8Ž€#à8Ž€#à8Ž€#àä/œ0Ê_ãíoë8Ž€#à8Ž€#à8Ž€#à8Ž@®8a”+DþGÀpGÀpGÀpGÀpòNå¯ñö·uGÀpGÀpGÀpG Wœ0Ê"ÿ€#à8Ž€#à8Ž€#à8Ž€#à8ù 'Œò×xûÛ:Ž€#à8Ž€#à8Ž€#à8Ž€#�+Nå ‘ÀpGÀpGÀpGÀp�ü…€Fùk¼ýmGÀpGÀpGÀpGÀÈ'Œr…È?à8Ž€#à8Ž€#à8Ž€#à8Ž@þBÀ £ü5Þþ¶Ž€#à8Ž€#à8Ž€#à8Ž€#à䊀F¹BäpGàô@àçŸ?ÿ|0ìÙ³'lßžB�Ê”)Š- (`_§Ç›¦ö {÷î »ví   ¥K—E‹ÍõÆ` ¾™™Â7üJ•*Šs|sÎ?ð«G`ÿþý&û|g.\8/^ܾÿê_î¼€ãw@Ö#öíÛvîÜi:¾H‘"!ú*T¨PJðñK ¾Óæbìd ûa÷îݹŠì‡SÙ>HÅã5¿âŸá?Ÿxœ0:ñ˜ûGÀ8)€èIÆîÉ:rÇk~e}ŽÿûÄ"à„щÅÛŸæ8ŽÀIC`ß¾½f,^¼8Œ;Æ"ŠÎ;¯«‘Å‹�üH "z ] WˆP :‡ï'²Ñ‡�7†¥Ë–†™3g„%J†îÝ»‡ô´ô„݈v-^¾ûn¸F] ßzi‘¹“óG=HÔ={bó‚(;v‚£ˆ°“Ó«_ïS322Â�?Îi´ÞæpåÊ•CÓ¦ÍBÕªU½/u zžW9süŽØy¸ÅO?ý&Nœ`ÄÑ™gžjÔ¨Î:ë,#ŽòpyŽ9^ã‡üðµuë–°|ÅŠpPëã™gV·5…H©Ý»wYdÑ|gœq†EµÆw’kYS·lÙV®Zö(ê¥lÙ²¡œH²Š*j}+ÿqÿ9E¶oß~ZýSX¾|YX´h‘EqcÔ¬yV íTµ’µ{²Âu¼æWÖçø¿O,N�X¼ýiŽ€#àœ40.7*úeÚ´iáÓ¡Ÿ†B"eú\Ù7´jÕÊŒeH£“ÙØ•ÃØØ¹s‡"rІ2eË„ªUªZ¤Â‰ìýX%Ãz괩᫯¿6ãúÎ;î ­[µNØ�(%gä•WˆŒ8n¹å¶Ð¾]ûÃ!é oà<¡8K¡ÂÑ[ºl™‘” ê7–HÞòŽÀòåËã~K—.1Ǩv­Úáüó/é鉉ּ?á×ùɼʙãwbÆwÞ¼yá£Á)úc]¨_¯~hܸqhÞ¼…‘-©ôàx�ë„ÏŒ™ÓÃÀ�ïˆ Úz]ÖKý­V¬\nQ°D W«V-ô¸°G¨S§î¯Áº0cÆôðÁ , °qã&¡e˳C»víB�ê5Žø¼ÿ#5‹¹óæ†Y³f†iÓ§Y÷ 7ÜšsRÔ&MšxJÚÉÚ=YÑ:^ó+ësüß''ŒN,Þþ4GÀH€„ÎÛÞ½{´Ë_<”,YÒvg²ÖŽagµvp¶lÙª«½fLqÛ"ª1CDùråC•*Uìú�ËwÂh$Í cfĈïÌ)îÑã"3dØq$²âd¶µkט�µ1cc(Q²„¥³�2WY)]'²mÞ²YNïÒ0VQX~ôa¨P¾BøÃþºtî’°Q„ÔÈF†Çÿ[8 Cÿá]»v3Òédã›°óùð�Ô˜ÈÌÜn»ÀDÜ.\$\xÁ…¡^½zž¢™„<,Z´0|ùÕ—aÁ‚–úJg¯^½-í5‰Û�6—äUο3äÓåÄ¿þæaµ6'š6mÎ6⤽"�R#NŽ×øE„ÑȾýëYý¥»úßj§¥)¢ïG#hWý´*¤ÕN 7\£È¯æGIšÑ:‘c£Fÿ ¢â•°rå #ÉÎ=÷¼ÐçŠ+CãF��ø¼ÿ#5HE#åþüä ©ì½{_êŠÈÃ;Uíƒd힬h¯ù•õ9þï‹€F'oš#à$@`…­G�eé@U«žjÕªØñ¯T©ÒW±ùtˆvÌfX˜õî=»íïÔ! mˆ�³ód Õ®]ûˆëòû?Ø¥Äya'iý†õªy]ÀvU!‹(üy²kì,Äáüò Õ—XaK=íþžÓ哃9vÉNN�ÈQJýY»vq·Qé)ûï½k„iÿ~ýCûöl>¤Z7õþºîp¼æ_ ¿ìm^åÌñû%vÇã7ÇË¡=^㥤Aýå/ÿvŠt¸÷î{Cš"÷H]²d‰EæÖRDßu×^š5kvl¤ˆÎž=+Œ76|ýõW––Æšß©SçÐÿÎþ¡uë6Myb©ýk»6"ØØÜ.[‹ ÏêŠâ"eÐ £Ô°õ«ON�<ìýÉB`‡ROßÜ©�ŸõïR%KYdQ"Þò?B ù$¬Q¤ ÆO£†�,]êLN�osçÎ ƒ S¦N›6o¶4+䈈$vËØ9ë«T+®M�“µˆ²Ù»wŸ“2êz3:p80B¨¯rÖYµ×Z ¼y‹ê`˜0‡ø Æea‘?%Uw‡”. -–(^ Âh§rûömzÎZ+z]]µxV�ÿ—‚s´÷ÍŠñ‘×ï {1FÝ…‚… ™ÑTV'³U¬XIÑ`%ER²4v@!¿Â Õ(ïšž^'tèÐ14lÐЈ-NtƒØâyWvN©Ë°cGfØ­B“úC(ª()ô…LK—.e‘jYk ¢OÁ›º;vÄúH XP]›mÛ¶†éÓ§‡ÁŸ ¶:ÉDA Ýwß¡� r~&Ž~ó"èJ—)mÑKè;Þ‹¿m–u�D-"�ó*g?)J$¿š5kÚZv¦R�¶ë�¸_Aéæ%ã_F²�¾ß�è}ÀaÛ!Œ÷ƒƒæx ]Kßãå4·�Æ �ië†ôôAáÂ&˜lÚ¼ÉÖžýâ’Û²å4¿…ó›kH�6=# ±ñø Ï'˜¾3YŸŸì<ƒH _èÒ›Ñêj(.]A´èâ%‹e?|`¶gvFñzìhÖ—Ü£ýûÕèžEÍX¸HaûžõýãÇ2ú™÷"Ýó/ÿõŸa7„ѽ÷Ûæ˜FKc„u˜®¾úšÐ´IÓè2û¾T>|¸Õãûiõjm­³Hc>G¤k,2•u�̪·¸sýÀ\aM'ª›¹‚Nb~¡+‰Ô<šfã}”v̉�GäYà]�f½dþ¡ã¸â½z†6@Ñg`šl„Q²ý‰ÆÌÀ:¶®$g÷¤2¿¨eéX¾s/äŒ)”­J]G¬oÈc2v÷�úID}nö2‹.KöºßÓý»F§ûŸâï·LEáFŽ–©~Ç}×VHm÷nÝCZZÚ)ÞsïÞñ@`þüXäÐZ¥È„QË-Q[raÖ¬™ÚU[e»müAi@, œJÕY©C¿FÂÈ Î/¿ ²94j¤0ñ”Þ1_õtV™aNŠÇõ×]¯Ä涸ɢ¢ÌàÆÂxgñ…��XâmÚ´±,ˆ 2™3ªÔB †F ä ‹æÑÞ—{GíÈëç[áGN Û½k·9+ÔYhبQè(#•07j?|óí7aü„ñaÎœÙæ´âXàQ”´…dà zX?q60œplqP!™ppÊJ‡àȤ§¥[MŠºuê˜ì”±ß0˜ æ(þ=CøQ¿†ûá¼ð<4HJ Wýl¨Õ H†0b'øŽÛî°T‡9sæ¨`ér#jGQœ´^½úÚÝm­þÖ±Sz0n&O™¬š«Í€©^½º‘M8�oQqÕ"Öø²èœ.çæ‰9’óž0a‚Éc A…1[I÷©#’Òõì³[YMŒø±�ïCv?c ó‡ÇEø®Áƒ#_JÎ!)M7 4T��:FÞpŸ•+Wj÷{ŒN—Û*‰HÄñÉ.‘b¡ì�ã€"ÌÆ ç¹_µje˜¨ú¤pOôý//Ò4M²Æ{µÖ|@†Ö®YfKÖÐÓ¦M D·1þMäD‘’V«f­Ð¸I“ÐAÑFô;&×kÃtÉó�S–6ê]÷ʦ(:ýhРAhÛ¶]¨¥¹–“6iò$«™R¬x±ðóÁŸo–€¸ápM Ù�3�nC¯Íœ=Ó®ƒùª¬Ó ›h®ÒGݼ“Ϋ^�LIeÖi¬ã �¬)iŒd'cƒœƒ#s ¸„œNtðU?›ÈÒìd.þwèMdÜæÏŸoâðCTS ™kѼ¥ÕTŠ'XùÌ2鯂TTôcQ7sæL ë%…mž1ÆØèV!Ôd›5{Vžä ’3¿ØA¬P.òI?ÑÓè&¢Hèg=½1zÆ}K–¶mÝf§=r-ýoÛ¶­mÊàìsÏD-rÚæÍ›†}3Ìd¾£¢SX?&K®—I³aÁcºD+W¬4¢cÇNÙNñ÷8ž2uJxeÀËa95ä 8Ü8á,öMe”ݪ"Ê8 `Džžò˜ìz¹U¶›œ° öý7Ýt³ÕŠD%a”lÐ#Ì�TížTç:*^Ï‚EzzºÉÊ2Il¦´¡Oú(­2™yÈØÑØØ#Dâ´�ÌuØ0ù¡9a”Ã(³¨Q°”Ô��Y)£šVXF¡û%e<@°[ÌÂs*4 ”)»,Lô�Ô†jgœi ¦íhÈÀ¦ñY>OM“B …ê5ª[Ø.“›“¿ã2h¸ ÎÌY3·ß~kü ãå¢Ù¢Î}1HX|xý‰ž!A¿p¤qq´ã§Ø1‹~ôyÆ…±äyQ¤_ x/Âr!pÎÐ"ËwÞ¥Ê3éwv§3áüðž„YcÐqž…!’Ý ÷C)ÚûªŸôŸ÷á]À‰cÜ1 رä~î©´è¹<ƒâЄ³#¡¼[u9d`€“…¡{,ð‰—»U2ŠHcç��J•*Û{Q¸8"¢wO"=Àãa›Æ”ˆ Z¥Ê•éRéÙTŒD!»,Ê/¾ô‚ˆD'`´d·Ó=÷TýŽAøì³Ï˜ã‚sM3Q8¾_ª´Š\ÖmÛ´³q›9kf˜®ÓÎHËc¼1Öˆ8@&3ä<ÏÅ AM'NêB¾�[v*Ÿ{þ9Óe�<ò;‹j`¾âð%s_"0hÌiœ."6“}‡úUMNŽò¸pÑ‚°C©JÈ"ùe—ö²ùƒó޳FØ=2‹¬ÔÐ\Á±ãˆ8`^"¯óæÍÕ)7"ø„"Æ2ókƒä‡HôßY¶ãz•½?z�†®âä’?dÅBqÎÑè)0`˜9¾L …D1 p*’!Œ ´ˆ–@¯A&ð,æ6¤ÎúK¯cIŸ>WZqï¹óæØ)vD[UÓ)8ýûÝeQbñkÌìÙ³Ã{ï¿«rVØ®%ÆU—.ªõ¤¨ˆD "Šˆ©¹rH1ªƒºuë1yEC�êuá…š¬A:‚q¢†¾Ç˜œ%™üø“�ÃÒ%KíÞÈ­é;­—ÌqÆ•qF'\¦È6¢ ˆp(ßÿà}‹:DsuŠE Mù‹.FΑ"Ý6iþ­TR(F(:�HAÖZäz…CœaôâM¿½Éj-åe½È«^Ù¬õ(•qàúœfæ-bÆ “nš¶ ³’%EâÕ¯o²Â2g‘mÒš~ÓóbÉ_{ta¢†-Àµ�PŸ}þ™ÉG£† _®Å^àï¶è¸´´´p¥æ[‹–-�@Ù´q“é­ ’œ9Æ‘7ˆmÆ0C2Ì7ä‹ß]{íõ&KÌ�œ†˜C¼Õ®Ë‹œAr�ߤI“,:¡°Ög6L�ÖlÞƒúnD ¥ÕN7Þð[;銹̻¡¤ø` a@2&�U´˜Á0CŽÐŠÀ® xAÔâ0A~ÐGœ;ÏD�è©gž2"¡f £¿Jˆ³'Ÿ|œ[p"Ú¡s—.f˜3V>Ì]äð³Ï‡šsÁ�áH*Kš!lŒÈ1cƘ`à!\úö½Êv¢+v_Á òû�ø“­è2d;™ûrÎÔ§C?µ4d€ùKDG�:Š‘Ì£kfÈ`X¢pvHW"È®¿þs¬qú0²>¡�¾a 3¤ZáT‚Ä$s˜ôžA~`ÄK§Ž�l7 £=l¤‡ ~ „RÇéÊ>}M Ÿ¤ ìïãÆ�ƒDP°ûܹsÛ©·Hõqýú &Gè "J wÚ¶i›aiÇZ #�;Ÿ£ñ¬g„c€ñ?{Î,½ól#&Ø�$Â’×)r,>T� Ò¸î¿ï‘'�mΠ‹˜ã¼ÿË^’ÎʰØ8¹‰R½r›'fpߥÍ�®iÖ´¹éMtÑ_|ñ™9–¼3º˜¹Äº‘¨q-uÇHsc\ Ú·ï`FX=­7Ôkb3¢C‘:,çw¿ ´aÄØ®þiµŠN4=�ÁI˜]Š]4Ï‘�ž]l}ÃIÁá�Éí,/dáÒK.5¹c [ºt‰é7æ ²Hôƒ¥aj=IT×»"àX×!è:uìlë@)9SèfÒ”ˆ„Ź¡&D’Evè^è2d¹&rf™ˆÆZµk‰Ð¹Ù"X J¨…5iÒ“?vœ9� ¢²}=jÌè0Së!i ÌH«–"4Z´hi2Ã3¦L™>¦Ö’þ~óM·„sÏ9÷°ó–h|òªW˜ÿ©Œ0Ù9ÌÌ-~ˆZŽÇÉÄ`xO@Häy?ÎUÊá×¶¶¶Y“Ávf$z?VîMT z;æÂ {„æÂ�ɳCÆoܸ±†gß¾WÇô‚l äBqôØÑá›oy!Û�I_‚T)©šZè…é3¦…Ï¿øÜ’¾Ò+�;w6²Ýœ]c®"ÑzœHÎ #Âa¼ôÓüù?ÚüG¶hÑÂ)ÖÚå’/Òù¾öµ½Çm·ÞfºŸµ›„wD?Œ=ÊÈÌ‹.Ô)˜"'ËÉ6Ú.]†Þ�Ô�ÌÆñ¿Erq‹mnÙ5ÖeHÍ‘š»Ï>ÿ¬É0©š\Gt)”è-œÁÁ"Œ±?Y§xîyçv5B‚è1ìDNçd>` AºÞ¨ãÆqÖhÌŸTæE}ü¡>ØîØ‘ç±þˆ�âÝ ¬gl1<ˆ["ÅktuѰI&Nœ˜Ôú‚]˜�ü££;žýšˆtk¶-㋾ÊKæGb#�;ö.ä9v¦ÖOôú4"øù=N7égÈ-k(Ų±³‘l~úNVûH6h<É9�Þš8q¼�)÷íÞí|Í«æF"ÛD˜M›>Õ6¡°C¼ÿA‹jFï–~MÔ Ò“±7 °«�·<&»^²±ÎføäÉ“•â;Ö�»ûßcúœ¹”a”Äú]N¶vQ*vòKÔT*ó ûÅô¬Ö:R[!ÙÈ$b¶�æú™.¨z𦓥ӓ±óXŽÆÀÇ`­%m7™ëØØËÍ £Fy� †í;2-•bÏž}"‹ö›Âçã(TvË‹£°¬ ]JIC�ÌÑ�" ga Ü–…Îî}&¬™Z„²Ÿ-FR…ëkñfñ`ò~�rš!�ˆš!Ç%A´;57Þx£ý½\Ùr掟0NJ`š!¤±‹Žb Eƒ‰0nvSÙQFÑgfî0Çr„Œ�Ó§Û‚…s‰B¢†BZZ,”}¬.IÉR%­èÁÙ"ž>ùä3*[ˆ|h)}Ç\¦�;I蛫¯ºÚô!ú…>â\bÈ~óí09èS,úB,™#t‘?/D‰Êïä)“)ôžéaRÏè#ú ¢‰�|"´p‘t»ôÌqÒýž}î+è{›R!ù;ž5äg Ò¾ŒÞü*TÐîQ¥#êYàO„›|&Ræ¢=m“!Ñ}‰ò¤–„s‘û^%‚’ñ‡0WôŽ$ŸA!Ó$׌ñÕJ…¨À@|_8.”¾ƒçžDª¹€~‚Œ\³vµéôvY9N5¬Oê?Œ©T·WaV,üî‘ßË?×Ö-d޵�>?ÿÂsrxW[T ;’MEF°³Ht()D  Sˆ0CÏþöÆßZª'Q‚�é8^�Jô…ˆ³>—÷1ˆùL-¤9"ëÆ*U”MlBÜ,‰è‡*Úà`n"—ÜŸc±¹©'�¥8£ÈL¢F¹éÖÇTÆ!'Âb’"äíwÞ2Y»úêk KúΚ„ü‘j9JD-i“¼/ëÿå—ÿ2%3ë»FŽ'„÷A®Î—Þàzð%Ò™GF?ü‘­Iè'æ¤ ½0ZŽ ë&dõí·Ýnó' ?"DöAÔr÷`½ÇÏ®±æ"È{"9ÃFáQJŽ&¤9›_×)’ yc�æ~¼iM^yÙê`]!9BÇ Dy`ÿ�ö.ÝH�Óú‰m´Ov-zÝùî{ÿÔ^Bö×›!Ë¥JYë-z§¬„}¸FÅ•9ÁBœ9‡��^~û�·M“öIW� z„zõ¥¿åD3Oy68Î‘Ž†¾«?”míÝ�ï¤æY‡N¦ÿ˜CÏ>'BKÄú–ñm&[Ž9ˆ¢ßôaÜø±áÝwÿiøQâˆ1ÀÑÇžMf}Áþ͉0KHMRúˆº­Q£¦mNâ$ç¥1��&¹¡5ãŠÜÓÖ1~Ocó\˜[ÿØ÷8æ¨D‹|ù%DRùpÏÝ÷è.ÖrZDM×Ü@në¾W^ek:Y d]` ƒ'©ÂÈçm·Þnx²K_rj|{!{�þ`Ç@`y¤ßÉ®—¼÷ñ Œ’íºý–¬ÝÆã…ì¦2¿˜ƒ‘žÅßÄŸÄ~!#�K?Ys!AçÎ�këe2ó�ë�Æ€LGG0G’¹Žõ:?4'Œrå]»÷„Mr^wîTý•ñ ‡ŸH#vž*JÙ–PîåÉl�D¬`¬ �ivpÒË)´»¸H­ÌÌí¶@°0°£‚!ÊyÝ8ù0Þ}ô¡MØþwÝm»ìZ°xòw&Ö÷? ¿w³èv$ ‘ecýúõv=Î(CFզͱÝ>Šë± Ž‘ŽãÑ„áÀNŸE!‘¶Dý úNcç¥[×n¶kÂ=Ùý!Ä“]Bœ&ÞãC‡Å’Š(†ÚúÝÕW]cì5ï�’úëÿü—Ed`k$2Æ#s‚ϲ¤BT ó9å ÂK/f2GÔÄ ‘ÔF Ž2ÎßÁ Ž,¢3Gêà…_~Áˆ™?ýé_lýãï´Ø|û!&×ÒDd0_pöÐs4ðãsŒ Dz’œèÆ ÂB̉Z‰×kàbëÄ?„�ÿ|Çtç£ü“EGÐ�X¿ƒÍgRò¸ß9çœcó'’+ëL6ÿÉM¯D—0~©ŒCN„ý[.„Mõ‹;n¿Ã"ˆÐ‘ÔÏ¢1_!iÁ‰¹Îøõë×߈™¨�Ù}ÇŽxãÍ×U“k¥Ù D-u‰š5E“µ‚¬! ›jó‚”(¢+±?ôzâ�y…œF2Lä{ï½kQ`lz°±¡¥Te×7~ÇÚ’H΢ñeý„p`=¦öP½zõ•âs‹mFE÷ÆNÂzúé'�ü ¥ ‡ ñúÚë¯Úfö ó–t«²h¬Õ¬!`üª>‡ ±‹îÁF‹"S¢gEß³Fôá¾{î³èÆJ•*™ýÄg!Œ^ãuû£UËVéÅ8ÒÐsØ›±òÝwßi㨊ìɇ,R)•yÆ©†¬3¤3>öøß op£°6u‚¢yÊú¿þ1&Ý»ŸÎé›KèÅTÖ°MDao"ãÔPb³»»6"x ¤cøÖÓ!Ÿ~b›ÂèARÏ.8ÿB‹bmAÞIU#:ÿÞ{îµ9CŸŠ�龈0‚pôv<ó††.C÷a‹ÿ㉿›^'µº‹ðDïå$O©Ú1�{Ì©ÑÒ'FÇZ±kiÉ®—¬kǃ0J¶?DΦb÷ Cx6Qש̯ˆ0+‚ûŠ�ÄGù�éYtl¤gSµó Q“±ØdMæºÜì.¦Óà?Nå0ˆ;UÌrƒŒ} g¢Œôÿ#šdÛ„›£* Ó,)âd6"`¨S0vìXcÝ!‰®�ÁJ�úˆòÕ°¯l±"ڀȅ^Ê�®(Å– a4kÖÌðŒ d †ÑLŸ‰ÈÆÞ$º©…ô÷¦��A°g³ð«¯¾²]?øˆÙY©Ì³fÍš‡4½+÷~æÙ§l]y衇cë�l¹øyÊúƒ½ñJY¢ôXÁ�>¤²¾à8&"Œbë2S4ÒšÏóÅ?Ö�qŽEðÄjNaó·�GzcÙ™èbôå‹/½h§Ɇ�ŽÝE’<뻥jÇ ûx6ãat¬å{ˆ–ìzÉÆ÷ñ Œ’í›×©Ø=DR²Faw¦2¿�sô,e�Þ�ÚD¶±Q¯gSµó HÆ 0™ëâûžUÖO§;a”ÃhþÚ# Ï•J€aˆr'gû<,†,–£Dœ°»‹pCvPC¡L™Ò)FìØ½ �p µBìp²ÆiA,Š8#°ÅD2‘&PK†C|ñcˆ˜·ÞzÓê�6EZ×­·ÝnFpüа8°+AÈþ“O=a†AzZº9WDôP˜b‡Pí´cOh7Žb‡vìô µk×!²AŽ# F)7Qäÿ÷ÔN>©q^`ÝÕï.«ÜØja¨“*³WŽÅL‰$"œzÿþ}æ$‘ú3òûïCeaÀN †F c„ÚÑâÃN õ±6n̰º5–¤:V‰JR1¾ûn¸8M�=ø�íˆÆ�oôs²ÄO²×EÏ%Õ c“H)"êˆ>9�P}V¢« 0‰vIÔ"Çlj”A#œN.X³p›Á«HŒ]vWm§þ�á›/±0úX˜o¸áFs.H ÀÀ‹'Œ(ŒSY�Ì}Ùi§™ü½ðœŠ� >©)€,æ¥A^'"Œ q¨qà—É9b—¶£æ2ߨ¥ñGôLºv·‘Ó^2t1Ø‘ôF1�Ô:‰vÀ£{�:Jz;§¤hA('CqàÀÝDl*J2»"úèOB !jˆÂ`çì &ëðáßš.gÌÑüDý]Ƙ"#� è³F2äskÈä8› �åè€MÒ}ÌYôØ@ðâ|Sä™ÔY"i(î‹ñŸ¨Eë ¤é‘=²Á5§{QñôS6zª(2ãJ$"ia‹5¦£ßK3éiuìrWqPC‡90‘ˆ6¢JqšE~€ º�$ReXKÉ5ut^×)R8òVãÌOŠùC!w™ÅñŠOµe\V­Zicû–n£ýó¿þñ˜A PJÚZš­Û(%JD©Q¬g‰Znz%º6ÕqÈ)¨LÙ2¶&�#)S�ÙØ ¬¡ñ�OÈZæQh-åÜÞÿƒ†aüç²þLdãßá@=À^½.·õ2‚0¾Å"ZGXÑmÖâôôôpÍUךŒ ;¬ã8ÙàÙïÎX±ùøë‰jüú믵VühóB2/xGK¡%ÙÄ®�ЮŠo¤6¾õö›6‡4 TK”�,’ä?þò†5ï@„ºÂ.¾Eú±dÉRf‡0�Œ0ÒŽv-+a„NÏn�ÚN�*ôØBÚÅ�3:‹:CØiŸ}ñ™�ÏÃ?bDy*ó ƒ÷\¬ñÁþ!ò2»þEïfDŠìDæ)¶\»6íŒ0bmMe}Á!NDEÏ?ÞßÑåŒ)–ØË+eÿã”7j+ÙMƒ¨'Û™H~"‚ãˆ#p…d�éÙã—)ÊØ›/½#²‘%ˆllùœÈTíJ!€5v „ѱ–Gü¦TÖKì…cM¥Ò²R±{XÇЗØ]©Ì¯ˆ0š2mJ˜ª(Çj²KûÝÙÏJUÄωTí�x|‘êHäÃÑ2ÖA@äø°�µ�£„ÑI!nJçy`—‰Åý†ëo4ã<|Ø‘ÂùŒmv.1 ÁiŸ ^NKƒ¬äï1ìºêO´Dv-Yâ'Ùë¢>µÃr„5r ¹u,N)2ÏÈVcH„b¢ïØqzMG.æøè´˜ã±^„Ñ÷–ÊÄxB<¦¥¥ÛœŠ—dC�wa·™y‚Lò™‰ªkO AAT#R¤Žö¾8âûE¦²cù’v,‰„!B‚¾ šaDªŽ©-8BÙGÆ!Ý´i³a‚Ñ ©€ãŽJÊ.s¹mÚ´i¶)%Ò 8…àAí1"ÿ’!Œ ˜cr7»òß µHé…TGNÐ ¤¸àÈÍ’óEŠóŠyL$¸B<à�1¦¤œÄ;dñ÷Žÿ9Òl&|ñå¦ó35G!¹O†³Ž 2�YŠú^sõÿ¥ Äß3þgЧúp�æÎs¾YHõaã"/í舊'©°ÑjÛ¡¿["B™DM¡ƒp�(½~=§beÄR�¥8�ÖÈ ÈúD„ó‡h?ZäÂîÏþ×8¹>22€õìÍ7ß0ò‡~á„ã|l—!F�œŒ[ŒP‹Õf;‘„Qvz%£TÇ!'ˆHKˆHôÖWJ¹â@„îÝ»›ÞŠžÍ÷( ¢îà�ƒ¶v]¢âåèÀxÝ ?CìYCšMŸ>±bÔ�9Ѻ}’yäÈï-RùHSTÊu×\osÏ#92¬õìÙ92F a$G‡üxFDɱv÷†,Å·XdbŒ0âôȬ„vXzZº½#é½ñ-Ò�Ø3Ü?;¼¢k²#Œþ… ‘ è÷ÈžK–0‚HežÕ«W_ï[ÇÖî—E\`û$š§1‚ãEK�†pmÛ:VཟÊúN§a„ã iND‘hl~T¨XÁ¢¾Á†M#¸Ø=èAä…å7ªöãA‹£ˆè†0‚覬C|OaX«�ÙöZgs#ŒRµcØ(!½»/"ŒŽ¥QëÅ"ŒT|w«Ê—•RóÕ¯_ «&z #ŒH1!Ä'« vµÁ’(#” ¤ïJ±mp¢IXtâ #Án§Û€ošŒÕ(ô×ÀHá?Ñø’cüßÿóWÛaÄ™&ê ƒ�†`!)°xR`.ïÝ[ã‹0Â`:|¨ñP¶l9sÔH§X¤¨Ì™føó¼¨¶„Nµþð»?X½&þžµ%Kü${]ô|ÃEÑe� ìtB¨‹VT…FK•*m©Ÿñã�Ó½F›6†Ë.ù%a3Ü7šûœŠ{w©>GôžÍ«B±yÝŸ[Ì䌈j�uÃŽ|834‹ÈQ­,ƃ˜¨‹ÊBLDïMŠ'„pŠ!Î5>þÈ ?C(ƒÇwã˜Å7HœgðøJEˆ)ˆ˜ a´Kó­ß�ý t_´³= ëŸÿh5ƒ ›Ù‘Çh'*†#è!àü±�æÓ_z™:<ïhŸðpsRfq!›5œOðfgý�7ß°�xÒUkÖ¨Î"UKä©ËD}/=·Az’Œ#èIIƒJÔ(z?dÈ'V;…㫉ˆ¸øb+/G.¾±1öÈ$rÀ„ܲÓM1a‹´ÁG ^,Õ0íðå|ùz≠D*„*Î.Q«´Ø„rëµ7^µZ8œ(ÄýÈÍ&ÊÂ"hŽ’ÁɤîdEÚ¨[pÁ=d„ÅNmBEÄ)z8BDU‘æbõ2´@£°Ž$Œ XKŽø\q#…ÿ`AN�õßÿûWK£žR9Ú¤?D5 ¢bƒô‡‡'uþüIáÁ‡\Í›7×"Í(’Žƒ„ ©FDGÔr\2;YÔ8 £˜|í³14‡Vãy,8ã @ˆ0·"¢4§{çFEÄ)ìã*.�‘ÇñÝDÏ@—>ŠoƒìÄa@—Vúiý�ùˆãOuéÒÅþÆN}2÷eÇ’(ÀÑ£á¦~íÞ³;ÜyG«_�3Íw䬑 [þM}wúÈN()i‹-6B“ "ÿêÊq¢ÅRB¾2’š¢°ÈøåeÎ’²[LZõQ¸oq=¦D»q Äd&DTvE³W®ZiÆ6u¹ë‡ÌI†0Â)Eÿ §âS yÞ�è!vf‰ìaÞ�®JŠ!íèqR7^zùEé¾ý"šo$Õc§¼ ·ìTCž‘b•Èñ:aF¹FŒ_*ã�aT¹Jes所æâ]ýï¶¢×GA±y«ék2ŽÎ$ú�ï‰DÝ+¯‰¨“cL¡eêµ0Ÿ²ÖŒÃÖ¡¨é"É7cר‘Rl´ñqr" £¬r­ ©FëaGjEë‰bkÞ”"•”%Õ,Z .d6,øÆoäeÅúxFÓ©Ì3ÆšèY"ÿûã¶Žß-ù"ª6~ž2GYCÑëO<ù³WÑÍ]t5Œ°÷9¥0*:~´ë Äô©@asFEŽÑû¬Duó>ñ =Éf:©–`õÈÿ³ZFÈÃp‰ôVt¯£%ŒRµcзԽĎ9„ë^*ë%äܱ$ŒR]¿ñWS±{°/Ñœ&šÊüÊ+a”ª�ÕòY<ô‘è�[o¹ÕvÎaÅ â«°á˘Dµ p Å0ÈÏï~¾Eóéƒáøæ[o˜cIX9†D¯^½Tz}R„N…!Œ>ÿüs;­çE¿±g³{‰¡‘q8x·äÓól Rðcñ©]{NICNpôˆ0ÿca>¤>õÔ“V|²‚œpˆ›Ž*\˳0Jé+}R7,ÚÇ”ú73gÎL ŒRÒ—ˆÀ"ÙÂQÄ‘%mgŒ ŠÁ²û‰£Æi]�;ÇŠ˜¢˜!h 0æ8æ•”(Š‹r}Û6íl‡ENÿùâ¼+E²Imà:"'²¿®‘ÉOt- Ö©Ür#ŒxoÞ—ÏqJÎ7ÇÒ³ ×«WßvÔyW0��ø¶ÕHa¢þ0qT ‰q€ã #æ%¤ÖäÉ““º/¤}#"†âÀ\ç8çvíÚÙ˜“Rö¨yºJ)UŒ1ó‡¨3t zŠp Tjxðù T”Z‘$�Œ;ÄʤÉÍ ‡\ª"GÇŸã›qB!ç"g—}DT ‘=è« 9î3 A�‘Ì®:4­äT Æ3ÑiD~«H„Ù9ÏŠÛ&C‘òJŠ©›D´ÄjM1>ûl(�ƒîø�Š 3ŽÌYRiÀ“ñøÿì�wœ\Å•ïK9ÇQ–�f”³@BHB€�D4`rcpÀkƒ½o÷½¿ž7¼µ½kccÀ‰ŒMÎ!$‘”s–Fåœãû}O«Dkèõt÷ŒFÍ)>ÃŒfúÞ[õ«SuëüêwN= ñ@¨cŠñB˜–"cïúÎ]úÝPà lÊ*FHè½€ñá‡ÿfï¯ïÿFè‘g‹SªXÎ’ª ü!np„Ñ56/—urÁ1LQÂèškÁÌ<ÀŽ5øG›Ä¡¥ß°Mæ¾ÖR‰”‡üãÎÙê“Ý:pŧŒAb$(†ô/BœuAW_u­…öb¨š¨m §Z#=3™@Eyðêk¯h?ÃÈJæè[nºÕ°Þ${´�S)ˆÄS„ïÝõ=#„á`Cˆ~`^e¼­Ó\Gî?y� ÌŸf×"HQ˜~"¥Ë# ™¤Ÿ®¿þ Gc×r¥Èò²¯ªB%’:gÞ¥F`�wüÐN«.{å´¹!²_Ô=‘¢ÿ˜8Àâ°Ô‘õEä$Î¥Ù 6õìóRªŸyï2†X@4cÇœ�!Æ;‹wJÌ1…š¢" #ÚU–�Õ—Ú‘µA¶„!F$m&óvNÒéÎ�»Ø2s0ïæGžIÈ.!àTÚ<’¨ÿ&[ÇT„ƒC€2g\�‚wÖ¬Y¦4£Ï?ÿ›OmœŠaœ2Ï’¿iü„ všÜ6á€B•ü‚Fò¬AØÈÌäýBІ²#³o½³Ùüdsœ÷s\. ýË—)4¤DUÉ»—t„â¢ÂJ.„&²y™þàCÚ˜»ý›w˜z•MFˆÇ²æ­x¯òFÔ1›u „ïÖ1a�¬Sñ£2}_’;-—„Q¶ïoTÖÙ¬{ˆ$à�ö‘rÈ¢äÌt|1Ó™g9E7›qÈú7“õã#“ëˆèù2'ŒÊèå8©ÐN(“ÿ¦ð’Åðkj‘Íwþ}¢ ;çãÇ�³‰•ÄÅõ×Ý`»ÕÈ7Y¬�óž%ËlÒ4‘”G†—„ÈXÄ:ÃÚ³ã†ÇÎ(§|Á*ó"ÇèØ±“ŽAý¾9üuå|âX±@!þ¼—ȃîÝõ¥Å/À•+ ©øØ’Eƒ;ùìæ$çra§Ÿëq€I� ±±ÄBŽ{°ˆaˆ£‹CË‹üOJúI]jÖ"‘vïpùe—‡ÂÂBËÝ4eêdIŠÿ¡Ñs°˜èÈñQ\œ8lC9F(”p §Šˆât6®?]»aìÌ£®Á)�€!„ƒ—+¹p¾Ùa§¾LôK—VF>¨N�Í$χà<¬yýÒK¿*âyˆ©�j‹x`.£Ž/½ô’ 8WHÔ3!ŒÈ�Ó:DΧbQl‘þA !E=›(dçkr ÉwC_чŒç¹Â‘ù‘œ%;åDCœÀj°@AYÆü”Î;L e F|ð­,×Z�ø‰‘„„.ÍøäD¿²¯ªBá`fÓ¥FŒMl�qKRpÈ H76tx×·i�HÚ�“†ªŽõ ª]NÚb�B~š² k‡ "ؘ˜=k–ú­¹)Ð8=Œ>ds�¶á4½üÊKf$“f¼A¦@¢¤ãÈØÎ·ŠlÐñî"—K:!i1¤¤,;cþ\¬9±,Â!bÀ|�*$�u*câ–ù¿@›Zä@b½Âg^å}ÿþûï‰(®!'`ýŽ9Œ$>'~¯hˆ~`¾›É{-ƒqÆ<żJ›IZÍ8%WëÆiWÍ(ÎQÀOIÏ<i‘  #Ö ¬Y>Ñß3y¿@@•Õl®rBóÛ¶m-•B'Ùx®6é_{6"b^"´|úöígªïا|GqÎæ…�–öÇû-,ð¼óÎ C²ËIx~YóV¼×d�;§5kÈatü�4®³õj†ëÆ,R‘Ã)›÷e® £lßßl`g»î¡¿Xgg3¾x—¦3Ï2>²‡¼‡2Y0grcåËPœ0Ê“^Þ¨‰�]ybù_ã5#1Hæ‘yÄ‹ƒÅ/~Ó(7HJÊ‚šÁÉ ”…9$Š ;›B G‡Š]G^ÀÈ}Y¸%F쓃ˆÉˆ]D®a7ƒE2D×½/2ŠÄ+´cc,Tå’aDýqÎY,MŸ1-/-Vn‚zr¾ £Ž–˜—±€­Bb’Ï…q{óÍ7[èVi„j ú!“ûèªÙ;aOäRC-ÄØaçÖDròqìgi,R'œ(v¯»î:S!áØó|Æ6$6U[ó¹zȇХK�w‘žrì8A*í´y€Û¸'ʈJH-æ%Æ)Žý?žù»-p!³ºtîl¶VG¡k[6'+�—ÌOäÖÀáÊ”0"wíÄ)é#¹Ò 1–/_!âsƒÍ·×)9?íäï5k&vœég{v€Ù݃¼fÜ‚‰ç­q‘N!D�6óßþ«9ì„�@¶¶ƒ2 e!8K4Œ3ú.Â(ª˜{É…GÎ H‚ÂÂ"Ò…f�ø¨Y™›°‹ ä¨’ë §²'˜¿‘ÐG†yB¦¹#~°à}Ã;Ž~¼òÊ«�Ø¡ ؘ2ï²@†dä½avE>(µ�\Ba`Ù„â ;ÄæHjM˜$ä:s;$m€¼ê5]6�zƒ>?®g·õä,vM[°IrÁ±SÍ{ŒwhYŽWU!ŒOÙôCi„ïCÞ `ôü Ï¡‹:lÁšØŽ[£c$ç½ QÁŠR)«0¦!s&iÌ¿óÎ;'{Ìv™3x�Ð'8ëÒ¼Ë[µnmD4៨ùx^:ŽL¦„Ž|:v†ý”E8D J#Œ fQÓMž2I§“¾gㆠ.ðc¡(‡gšP¿c|CÜ%Ÿ^Ÿ¿Waijx_e3ο¤@AÊÜÝ AýÄûGïEÆ)ý¼pá{71&!ˆ˜Îz¦}r‘u+�™¼_Ø («ÿXC?óÜ3öÞá½€£É»‰y*…÷uà|¿ a�÷k}æÍTeºÆëøb­Ÿ9ì€5×¹#FZˆ^YóV¼W&„×fºŽéÞ­G…F§�vZVïË\FÙ¾¿‹ôÎźÇü‹,ÆWº„ë‰lÆ!Dg&ëüŠL®cÓýËPœ0Ê“^Ž/ ˆ‘7Þ|ݤ¹8èü¾zõúª¦Mäj¶›ÆŽ 1þ,äy�°�AÂúÜsÏš píº5¶K�TœE[Üá%?'Ë$‡¤±£€CƒµN dD5‘Ü—çâôéÝW;]_µäŒ8í|†ÂBœ¡f0»LHì V@¨_9üç)gƒG‚Å¡gïI1Åç)$qdg’‚ľcN2[ý, -2!D8�‰EŽ ‹JËÓ¡£ `‡Š¿,JÉs‚êh”F8*,P–V"a„㉂ÒhÌØ1†­å Qèõ$i.j-ðìܲ 'n�p’LðAy�ƒ6G!O+Ö¼ùsmaFÈ&Îwu…¢¢^Ø NÜO~ò3“ÉãHA$ŠÂ»:�›{öìÕÎ}-íæ7¶MŒ€b’>ª£�"š8•‰… J*œîT×v*²ðFˆ*œ_öª\Ò%ŒPµÞø}_!c‚±ÎÀñâ2?ÛQ„(!)*c–1Z2$ …„/êLîËn)öŽäçÝê¥ñ¹PNõ:  —y…¨$ý�º§š|WÆ‹‘¾ß„À²ËÄ<€SyåW™²› Ô‘]Qæ;>� Ðv¾pΰ?Æ$ê•‘#G[/Â.°9œGœ vâ QBÍÀ"›Å g¾jܸ‰íȃy†Ï™FØ4 9pgqÌ<‚JÈB)5gÒAÁ�±„}2žÇ¥@¨B‚Ð_‹Ë)‹(¶P•Çž Éa>ž7w^xåÕ—MÉ·aÃz¹– ˜7™ÓÀ‡y–þ4%N #pçþä~š¤�úbeÓÆMDŸð¶8®´\È=陀bÂéE)¿Øh8${‹ºzW´°ùŸ¹Œ�ò%'½ÉñÙú@IDATOdÅÉ“'á\‹¹,Õ¯´…/h°ƒ¼ƒ@æýÇÎ)Ê£—^~ÑœhAà™l~°éÂqÓäà�L�°‚�G ’°ëD˜:÷ÆN!§™£hs+£Ër¼ª aÄøÍ¦J#Œ�gìuÎL�»IWĉ1›·¬UP�Ù¦Bõïý’§|ÙàHú6ËœIMÿ€7¹YØLÀî(¨iXÓp?Þ{¨¨qŽysVEF´=;cž,‹pˆM.�0b=Ù5ë@«ƒ�ÃÃf÷Né`!§&Ìo¬É/©JeF¤%ÈfœÑvl |Þ}ï{/îÎk‡ñÉÇ:�ù†°[úr ž’qÃ<ñ”ÉûeåJmhJi�*i9øó.AÉÏ;‡ùa Ö%gŸ}¶Ùa*ÜËû;œì¥K—aô¬ÖólÞu×?™Ê’›÷[ªlÄò>eó“Déœ.̘)kÞŠ÷Ê”0¢¿2Yoðn§­’†J*›÷e® £lßß$ÀÏź‡MÝlÆWº„Q\Od:Y·e²`žË亪¾Çi¶ß�0ÊÁ*r}\�°Ã?Q»¥,Èxi­×�—#'àð2Ä9;çœæ€7�“_ &•ÕÎ2»{Èz7ËqcÁÎ_çÎ]Ì�`QM."vNqpXl“k€]»ÙZHOš4Q;ËLýÁ3Y|à(±!„‚ð0T"üžE4…$ƒLüì¼°3È3ìHv½´I.NÒæQ#GÛóxÑãp 0€d7þ»Ž ]î‹ìù1’Ò3‘ÖÎJ, È•ÄD‰ i6‹cv�Ù]ÃÛ©ÄåÒK/ÁqªFûŽìp³CJNŽJF�ÅÉm…-áx}µ�I&i#,N#;8o¿ó–yñHÀQr…³”\XÜ‚;ü«´#Š#QVi¨> _›*Έ:=Gf™œhÂqÜ–«OpÄqÖ±ƒrbX¬ª‡SÔHÉ�Y`g‚;õت%NŸ!ÌfƒS´�E:í‚ÐéܹȒC¬a{àø¦ÎiR“@Ñ·©Š Ú)ÅîH*Žã�d mc&Ui­tß¾ý…÷sþ 6ªra@„Ñïd8Ö(gJ¾�À“—*ýÌŽ,ã�9ã–]EBv9¬ºÛ¸ë!i>ùzxa]hÝ÷;}®–’üŠÀÓœ€ý@ðer_l€Â<”¸~™­ã­^+V¬4§…DN3íè£ !q0ßYü1®)Q©Âøæzì'³£”ä´¡ÿq±qÌ8zK´BÅæÙ8ùǘwó@{›sâ¼ÃnÛâÅ‹Lñɰ|Å2s´jÈa¥~<¯§Èfê ‰i|ƒB|!¢Ë*´�º1ÞŸúûS6þÁ¢¢‚›E2ý@»„-õìÑËBJî3_1¶ åÙf¾¹é¦› ;Ô/�ùå)ÌEàÅ|ñM®)TŒSÈæOl é BZ©?› éì–w ¤„ÊSHNâ漞=¥¶êÛïèx¤O°g°¦OÉZgؼÉ|€Ó¸eÎdÎÀ6°õZ¦òÑɈñ²rÙ^Æ"¬qœP•°�Àn;9þ’•\(;ØAý¶P*GkêÊüFl”{fײ¹ ÆÛ† ídžæ÷õT°³yU÷Ga”¼1‚­2NIÊL¾#&e¦�Ì�¼·ß|ë-SF�K0o±gSæÕW_ÑFË&S]Ú)Xzßñ>+«”g^ɦ-ÄÑÆf {„=SïúˆÂØØ.‡”>D5ÇøÝ°a½ÍûØï301ÝYg›2&ÑO5ËjÞÑ¿á|òNÀ¶Yÿ‚´ëˆ 5a\XXdÄ9ÊØN�>'¢âÆÕBá;_×qx…)øÔ�É%æÖ`¾à ”öª+›Jôg:åxv†}—…_|„îb3¼PRñ^„ ¤°9ô‡ç‚ós]­Øø¤MCpƆ˜ßÊ*‰~ÛnëäCy³æ!Þãlš1Æ(ŒwÖpŒÙÎ�»Ø3â†@œ°G6G#„–òž£}¯e8΋f¿ªJe±Q;²V«®y†Ä…D¯´‹ÏðâK.88äiáEȉË*¼€.¾è+öÂ�`!D]éúr‹>œ\ÆKŠßó<êŠÚ’ G1ñòÝ–>ä^©!ÜwïÞeíì„~ÅVâm  ô<œqœ~l�z²¸ÅñÚ«þ¯T…~m¦Å¸Ñ¿àıã[¶lUÿ‘4;±Ó_òZÔ´•ë°ýØ/%?WUþ�XP¯P›Ø"ž¶Òö’ Æ:_ŒoÆ/VòÂp<. úÙMkœ¤õ3¶I_€Nag<ô€áa„‘HTžÁØÌä¾ÉvÌõô+ª/«—~f¬¡4ƒ�ÁFÙéE]C½x.ãš$6¾u=x0~¸†¤Ý„€òùÄxÜeÎçf…�±+ ÙËõ�eÌ;än³yàÈÜ‘<ï€ÏàþÌ•8±`ÉgÌy�5o¡\$D�9§[*«ÐvêÆ=I€º_ö#'æ µçÈsX r?æ)p Ÿ“qä9à‡2iü„q:óI믻¾{—©/¸–>-O¡ q,˜;™Ó¨#˜2w�[Í#vÀL�x_ êJ§0—Ò_Ì<‡÷Âõ?˜P×êGlšñOßp ¸ñEŸ ³÷€îÁØÆ©#7Us½?°æ3¾ãŒ4Ò½ `˜K¢SËB‘MpædS>k‡T3ï5°ßG%¸€ÉV½‡ó׫/ ˆ#ì�úÙxî5ï _ç™ÌYlnÄþÄéäý ¦ñýÇ) ½©÷c>ŠíçÜ‹þæ=ˆõKI{c3§ûE‰Ëɇ|Ç>Ë*å�W2íÚ��Ó^ð¢}�´—‚`#6¾é'ÍûÌŠÚ¹Ç8OàØðH?%6˜ìCeü�~äž�…Ø ÷Æ×¼÷kœqïÆ�™MÓGð[/¾SÖ`›\¸!ª´�¶ Ê¤ž±}ÉŸMõóñì {) ¿xOðc=�ÍŽŒâŽqçƒÄsk@k—>o‰Äµba¼4Rû±?ÆIþ\®~FþÍ„ËsÉû.]ûÉU=¾l÷o¾Œ!ðÆyˆã=¾@YD³ LÎN¯k¡Åó~p�©™ølÉ~:Þ}�‡s¼žçcÜ?áH—=Åûr=vK)k\Çöñyî_^»‹vËs¸Käòûl uKÌ{íV¥=‡Ï1† Á 89iÖ¬Y.ÜFäÅí·ßaê”lÆqÄ•ÄÂñý@8o´—lÛ¯·~)OaÑœÊÆâg“¿Çy�¾§ß UŠ}šü¹Ò~湌®�×Åï¥]6”ø›-m\ð¾>·ëª} clcºß³í‡ã=‡þ‰ý†ôu6v]òyôME¼§K>'“GûŠßSÙY&÷MuM\—ñ7æ0.iÓ©®;Ñ¿¾2gѾ¸G´¯tç�ä¶óüÏ×5å¿$ß+¹¿“ï?N–¶Ž9QÑgØRE¿/Óm_®ê“íº'Wã+Ývg:¹.¾gâø�ßËzv¦×•uÏ“ùoN�̽wœº3©Ä/>Z–Ão•ø<'Â%>Ïï˳°àz%>¯<×3¥º¾´{$×—ÏÄ/«@þ�çRWJlg.GÛYàâ(Ξ3ˤÝeÝ·  …�ŒE’Wv¸Síè$0J8AÜ«"1Jà¢<:Gì§"ŸU._Æ¿Å~Æ.Á=Ù.mÇV;x„€ V!\ƒÝ9BhnûÚוKè´RÇyY÷Mçx=ßU-}%Hèt®å3\G¡M¥>C»ùÛ]ÖçKÞ'q}œ·¾Hœ•ü|¦ÿ>Þsø;_$¦E]8K!žäYÚ*5;õä£BQØ­[7ãÉà9ýŽSÇP ’ÿ€Ó;)oH"'H"Iø‰¯±×ÀpGÀpG ŸpÂ(Ÿ{×Ûæ8Ž€ $ÍN$9¶’1Ö­[G$D{#\™VuL$*Œ8m‡#˜ E#i0„Q‘N›$AªGÀpGÀpG ²p¨²�öç8Ž€#p‚@©FÒΨZC™F#ê4W¦� N)å±�F„¤nÖ©]ûuÌ+Éÿëê4¦Òr”•rÿµ#à8Ž€#à8Ž€#�5Ne ¡ßÀpGÀpGÀpGÀp�üBÀ £üêOo�#à8Ž€#à8Ž€#à8Ž€#à8Y#à„QÖú GÀpGÀpGÀpGÀÈ/œ0ʯþôÖ8Ž€#à8Ž€#à8Ž€#à8Ž€#�5Ne ¡ßÀpGÀpGÀpGÀp�üBÀ £üêOo�#à8Ž€#à8Ž€#à8Ž€#à8Y#à„QÖú GÀpGÀpGÀpGÀÈ/œ0ʯþôÖ8Ž€#à8Ž€#à8Ž€#à8Ž€#�5Ne ¡ßÀpGÀpGÀpGÀp�üBÀ £üêOo�#à8Ž€#à8Ž€#à8Ž€#à8Y#à„QÖú GÀpGÀpGÀpGÀÈ/œ0ʯþôÖ8Ž€#à8Ž€#à8Ž€#à8Ž€#�5Ne ¡ßÀpGÀpGÀpGÀp�üBÀ £üêOo�#à8Ž€#à8Ž€#à8Ž€#à8Y#à„QÖú GÀpGÀpGÀpGÀÈ/œ0ʯþôÖ8Ž€#à8Ž€#à8Ž€#à8Ž€#�5Ne ¡ßÀpGÀpGÀpGÀp�üBÀ £üêOo�#à8Ž€#à8Ž€#à8Ž€#à8Y#à„QÖú N8öîÝø~øðáP³fÍP·n]û~2Ôßëxr#€ÝíÞ½Ûì�–Ôª…ýÕsû;Ò­ŒI¾:t#Æh�5BµjÕNîÎ÷Ú;Ž€#à8Ž€#à8')N�¤çÕ.;wî ëÖ­ ;vì0§´Aƒ¡M›¶¡aÆ廑ÚÈ�íÛ·‡Õ«WËþ¶Ò¨Q£Ð¶-ö×(ƒ»åß%E4R¬àˆ5jl¤nõêÕ�4Ê¿.÷9Ž€#à8Ž€#àœ8att’W1„ýû÷›B§õA�:uÒVhlذ!Ì›7W¤Ñ:sL[´húôéZµjåðžDåÉž={¶íÛÂî]»Ã¾ýûбC‡Õ‚ÃF*`µk×–mÔ õêÕ³¯ª $[»vm˜9s†Ù_õÕCëV­O ûƒàúì³ÏŒÈ�dE¾»÷ìëÔ&ðîÔ©ShÒ¤i¹¬ˆq¼oß¾°c现yóæ°}Ûö°k÷®°KÄîÎ];í^ ê7<“¯&Mš„æÍ ìgTG̹,Ôe»ÚŠ�Õ;ÒFÚ–ëçä²Î~/GÀpGÀpG ¢p¨¢öûç�mÛ¶…U«V…]r&kÕª5nZµled:X¶lYø`ÜaéÒ%F2têØ)Œ5:¥s¹æ#€C�J •μùóÂÊ•+Â& ü2QñL"/jH†æFÈ´kß>´kÛçÄ*É–,YÞy÷íP\\¬0«ê¡sQç0rä¨PXXµíoáÂáÕ×^ ëׯ·±ÒVª¼fÍ›‹DZ­ö¼I!uËÍ·„þý”ËBÏÛ´iSX¼dq˜¼qÓÆ°páB#±ÚIùU jР¡‘cÇ»Öÿî8Ž€#à8Ž€#àä+NåkÏæY»Ö¬ù,L�65lܰ1Ô«_ÏÂÉzôèZ´H«¥‹- ¯¿ñzX°`� ]»t —]öÕÀ=¼T]È;…¢ruª–5kט*e—H‡D^*£jHuR·^] e"Ô°¾È£- B‡§„Ö­[‡æÍš›âèDäÄY¾by˜0a‚]¨V:vì† fu«ºè‡0uê”ð—¿þ9¬YÛWŠ<ÖÖ­Û„%"^Ÿ|âñФiÓð¯ÿò¿ÃÙg��V3b.1úpÞÜyaÁÂùañâEÖ·¨ÇЊ¡`Bé³Kä[¿^}ÃéÔBïÞ}B·nÝLmD?æª/!’ß}ï]{f¿~ýBQaçвeË´ 騸-[¶„eËŠ­þíEtÕ¹½yó&Qû¥z«m6‰Z udªB»!@!B¹ŽÒLv‹Ê ’ì˪xÊ×TXûïGÀpGÀpŽ�€FÇÇÈ?QXáóúkaùòå¡qãÆ¡k×ná¬ág™ã�Nõœ0J¥ª÷™õÖ‡¹sçŠèƒXXlìÒ¥‹)‡š6k¦ð¡ºú�)ü'UÊ�#¡‹Ÿ­!¡DH±—ÓO?=thßÁœî\ é"F=6lÜ`¡tâ9DÔ7K=‘!U¹L›6-üíῚ²«oß/F�E~üì§ÿËÆb:í°\bRMŸ>ÝÆó:ýÜñ”Ž6Ž;u* R/Aq’P”­ ³çÌk·O}ÛSï5W_ká|¹ M›2erøÓŸÿ¶lÙF�>? 8P¤QQh*B,Ý‚ýMŸ>-<òè#.yõUׄ¦ ÕCAá�j©Sa¡o¥…ÂB€’à k⤉öèÁ§6¢ŽœN¥MéÖñdü\.p=ÛíuvGÀpG * à„QUè…Ô!îJãdñ…Mr…l•³²GŽˆüTsTÉ‚ÊÓL.’M7YÞ�ƒ:É ' '¶q“ƦމŸ³rdÈ3²wÏÞP[»å¨{ø{rá~ä$Ù+µ»áäC} Ú·koN2Žr:¥¼í‰¹„P@`W}”HÖËþöˆTl&þÈl˜¾ã÷uE`п„MõìÙ3tïÖÝÆ 7ÁN¦(¼k­,Æý?@!V�/H>³hñ¢0sÖLëcl=~¶“Æk×®ÝÂ~=‡ñ wÉ%—Ú3¸Þìûõ×�ð`ìrv½b劰aóOÆ56M²wú%™Èå© ÄÅãO<&צ$ŒG?úá?‡aÃÎLuù~ÇáìÙ³�4î¨1xÑ…f�OŒßh»Ø7XSòV�?ÞþÑÛ[9�#‘°FÄF.$ÆçªU+mLWä:Ãþú÷`Jg„‡Aô¡^{M9š&|ô¡~žc¿cÞdhѲE8UÄÑ%_¹DDc÷/´%ùG‰�±ï‡ŸÿûÏ5¯ì?þ矄–-Z†×¤Œ\¯9“äàŒ…Áƒ‡v²ÅT{¦½ÓgL“ëu#þ/¾è+f+Ü+¶7Õµùø»\áš�Øx›GÀpGÀ¨ œ0ª ”+á8ɳähN“ƒ=eÊÛqïÞ½‡‘=¨4ýÀ!�Kß¾ýä¼·3’f‹Ô óEÜà¬âœ±³_W'L‘dö+E;ÛýͱLÍÁ", Çøª«®6¢&¹y8¼ìŒ/y‘€ƒ:bĹF@^-Z´8Œÿ�9€›7}ž´'ÕÕgœaNmQa‘L8\Ë9'Ä¢¤–T*8—-åâÐ]|ñÅöyàãF8ª(8 x ¨ ÖH¦½E* NÝâ˜sêuÎ9çXrbˆp�„ Iïøñã ’ô¢Pà:yvvOp B¢ÿþzÂ5ã”lŒ!¥p/»ô‹¹“È ó®’ãðP²_’"_xáEB…¢„„¼¤‚àïÛ¶m5e ° ÎTÇ—⪧‘Çs,£¢¥¼í‰¡4Ññ§^8u�Š„(ÐPõì–­¡0‚p+T›!)Pø �d»)ù3N3äØŒ3DL}jª³o¼I!I=ÍŽ!iP‘¬xŸ”8F8êä1ê ÙXŠ«AO7"gìï[8S¡T#àŠ]fRÉ‘ˆ¼œmù}ÈíÃó±�êRÉA ´R= 4Î>ûl#*°IêúöÛo„íuîÜEI¯Gš­¡ Z)‚ƒ°¨9"0 }7¬WøšÔzØBr@|@,‘Ë òç»ßþ®Âì[3&RõЃF‘kˆz¬¹ é´Y¤%*>ÆÌ)Êç„Z¥WÏÞ¦¶‚|+«0æžáy‘ëEæöÑÜɈšåRþ<÷ÜsF`|ëÎoYYÖ}âߢbiÉÒÅ6‡ Ð8# B'U¡?!Ž£¯Œ'BQë pÄæø]±ò}úé'–£ŒqÉXã÷TEô ×õìÑËÚÙÄ€¼~á…¤0úPd]"éu›Ömõù–¡ EA(r÷ŠË¯4B6Uýâï’‰�aÞ„êñœ—_~ÉHLžß»WƧ}�0ÆHèOÿRwÆùG"ÉkŠðbþ„§¯P†•,<›ëi/Ä%sŠMÆø`CŒO vJ»ù_ŒEæ îÁû�û0™q 9À¸>Ž×ø>‡‚•÷Ãþ¹î€”–•(¿¸;§0ŸíW': õâþ|¶´z%Žg0‡f‚«=Ðÿç8Ž€#à8Ž€#�1Ne ]Õº'²µÐ ‹Àqï#¥yAZÉiÙ+çRb‡„B~�6mZÛgp0YЯX±Â3œ�ÑRt@Þô’zg›{£~@Á„Ãzã 7ù”ŒI¥_~åe=k±9Ý»wçË!ÄáåÞ8¶o*´ŒÓ� dÉlkI‚S‹³L˜W©'PiàØ7kÚÌT�`œr¶zõ*spPàøâ˜³ûùƒc�”ä:ñs$8P›€ŽNêB›pž ÂPd N(ìTn¾éS æàï¨j&Mž(ðeSõ“ ¥NamK–,2‡Œúßpý æ0N3yêä0ñÓOMQrÇwš#1êgJŽ'+…ávuÆ 3%Í ©<¦M�*ì&™³ùqÃõDœ�ãe XJsÆà3̡澥ÓLÚÙHAÅñÒË/Zb{8�„âȃöB8£oQŽÝöµo„SO=Õê�ÜöTu„Èzûí·Õ'ËìÞ g ?ÛœÈ7ð"T b ¬¾¡Óÿ8Í«eãhßüú7Ã)Ræ`“³gÍ2¢§ûzõ ¤J&Å”Ÿ Ô~"ìš07œkT.CŒCHrØ�7 Ò`µN#Î2×\pþ…6޶mÛ¦ºM Ï<óŒaFø ¨v"ëÔ®cao¾Ë—-WÛV™!ùÃ{~†fÍøDdÉïÿ;lÓ-Ir‡RSQ8�µ)¥8Ú½{�ˆ–;^p¡H”²‰³e"b³Úºe«‘�m8%Mãå3)·ÆŒyÏ0O*=Ó‚UÚî¿Ïl�¹eðégXxm-­@TЯQUGX¤ý y�O™ôÊ«¯�Hž#Æ%r·ê�g…" ¯ºòªÐWss‰¥™wIãúÛwùÅ=H–ÉyN–U¨#_`±¡„ý×ÿ#…Q‹ðüóÏaÏ`Œ2¶™¯’ ¤°  †€a>¡¾ 6°k˜o 5¤ÍÉ…gB¨A‚¯ÒÜH{{´ õöÎxŒ×�G$¥6ŠP$D”{>|H¶·Ü—!ƒÀ®SÇB³ã8§2¯ñîX¹r¥‘RØ)„÷±0JõóØ3. ꈃFÈu�¼Õôs¹¡ ª ”äz¡z¬^­ºaD=¸ç‡R€e‚k2Vþ³#à8Ž€#à8Ž@ùp¨ü˜UÉ+ ‚¦*ä !\ä�9çœFLàœ²pGýñ2fÌS©tíÒÍx’GwPh9ŒfÏ�£÷çm��zg°È‡áÇÛBÿ#-ÚQ|àÌΕê8mBG^|ñE;ùˆ«P%à˜6V(d¤Ó{ï½êË™¸áúíù88ÔÂfŸˆ+SØÈ™Á�4yUDJ ®]Iz}¶9Þ88�É;Ö%;i‘œeNIûøã�M¹Ò@Ùáƒãþ–I…Š…jŒo|ý–ç5ŽŽùå^aŸ“¡¨ydÈ/4Û^ÓM)BÈßÝ?¸'ôR êÚýìsÏšòã{w}OyLÎ4'gžxȤ?>øG9öÃèQ"ê±°&}B²f‰ð€LÃa'$Ç—SÁÀ‹Ó· ãècÒ«¯¾Æ¾—EÊ@RdÒB�ÀÒåɧŸ~lφ yî¨ÐO„áV8€ ¤>‚A@½ðO?0[¢¯pTË*ØÊ“O>aNó A§Û}!Á¥vH¸DYk©Gpj·JyÅ8X,;‡°û—Ÿý‹’2‡v²ìþ…ž³0·ß~ÇQ®,ŒJÖ˜¨Ü;÷ýá÷f‡�N§8-œ®#Hü¹sæ„÷ÇŽ 5TB­,ìLõk”&ŒAœdÚrñE‹ˆhe¤ámØù©è_ˆ¿"õ1Ÿ%'Ó<…@ÒÏàN.$”/?þñO,l‘zrýo~ók#Śɇä=÷Ü‘Fœ1¾iüDu_,å Ä äÞm_»Íž¥á!÷yòð–æèC@Ìž3Ëú‘üCe>ÔìP·àøÿú×ÿ-bg“”v—…3‡I'"bƒÂ¸B­‚"ådHrA9&�Ì„%Ú¼!Åê"ðáoç�w¾ì¥¯‘�àÜÌÌ_Œë«•4² ;E¡žFýé!#‚ q=}Ð S=Rse%×£äÏ´�/ÈáG}Xx†pë­·)� ¼PŠÀ/*"™v³cnÁøeî^.Âñ€ÚŒz¼ Wée¼sZc‡ñDmÈü²Bö¹Ê|~D` ±Þ¥s—Ъu«Ð@¤&x0F !}Á·Hd,Ä×'{û¬Þ„TB^3×Cî@DkŽ$<˜¹B­–ìœkhß¶­ÛL% i\TXd9©˜«!Œ–¯X¦ù}ª=Ÿú°‘‘ Á!ª\O?A2†Œ�±¡€¢�gÏѸÊ×c@ö8Ž€#à8Ž€#à”'ŒÊ YÕ¼ ™0zG„$Ê7¿y‡åÂIb×x›ˆœ’z@NÒ–p¾«3EôïO.•D8„ÏK/½h1»À8Å7(²!ŒØñ&¬ …ê8T(N Èc„à ‘A¢^T8V88@ä/¡^*u;í¨ƒF�m œDîQ–ã £I“&YÛpV ¬ÈgC2pl¨ãCzÐ’€£œ.2 ‡RçŒ:ò„ƒENœ&M›˜Ó‰Òa­Ž Ç!~ì±Gížw+éí�3†˜ãÑpÿ÷ËA; åËí– ‡®f­šæPáìBD�ûävõù‹ rC»ïÿãý¦èà^àeŠå3¡½8ˆäªW’¶ôOßû' ÿ* ÇLÚI†3ña4mês¸é+5¨'HèLx DßGþü—?™ƒû )~¸åж²J<µj‡”—ŠX€ Áf°Ï‡zYt†ð oÈ7CøN%áZŸ|ò‰Ù„ ÚŠ“û 9úí{ßû¾õKYcɺEB€ñóË_ýB9iÖYÈ&ZO‘3äkÚ·—盌Äw`öAÓVœáT„¶‡ê"×”I" üÕg’ySÿER&Ñ¿š8ú>©#l�±�³}Ž‹ER�ÈN¸UÊ ˆˆïÿš†ÙØ—T…g£HÁnkk ÔÜ“ØO5)A T"‘‘êüb‚$ÞãÆ� ¿úï_Zøë×4þ©#Ä㜲gﳈœVfÔÿ ¿˜Û˜›x.9¿ T!ÔPÀ@¬ŒÒ¼Ð­k7#M ^×9Ï>ÿ¬`C1BÃ/´…~½÷Þ_N—*7¸tëÖÕ½8¿Ä:”ö¡Î()¨â µ ë,ÜUsŠ¡úŽÉ%ª÷¨‘æ�­‰¯½¡³N—^r™”Xƒ�¸¡íðä3ŒN�œ1sºÍMôÏTÇØ‰�ER1OžªyÂêÀþ–{-acŒìaWæ0#@)Ç|YÃs/¹äû™¹™ë{â±°Döˆ Ñïû5gíÚµÛÞ/~(.!J9ÍŽ±A]ÉÉôÄO¨!ä;�QÂ0!â¶!¡ùùæ›oµqù… f‚«ÝÜÿç8Ž€#à8Ž€#�1Ne ]Õº0F( Þÿ}íž· ÷Üý# k‚8`·š…ûãÆ†ÿüÏÿ0Ç„<=(�8™Œ²`á‚ðªB3P2ðyÂZ.¿ìr#@²!Œp"pv ™8ŒŸ÷ˆ°À©ùTJ!Ž!¯#ìîïßξ�M(“þpÿÌCYÙA8Ž#á=`ûø�›f„ÏC�Üà÷¿”ƒ½IDÕ—_)Ä µN$\È´Aƒ�úÇÓÿ�2 ‰%Û=çœæ0ãܧ*`œI{ȧ‚ÓJ‚a#-W-×_w½å*âyÑÞPnü�%W*hø™gY˜Ф² !V¿ûýoMmöuM8®8§œ®õßÿó+S;Ü!¥*3H]úvüøqæ@·¹aáG¿‚㫇wß}ÏQ"2��œåT…DÖ„E‚7N56|¯ìƒ°EHj]EN r¢~(_§wlûå‹\O©#—·Þ~Óì›dç¨/’qŒu"Ù<¤"xBJ’´:aD.¤3E6:Ôڈ„‚m2GÖù·‡ÿbuýçýXÞ9f'Ôµ" *:ÆÍرcÃ/~ñÿŒàûÖß²ü<ÉöŒrÅ3RÜ¢…¢Œ‚=1ÎèÈ^*äùB‘Âxƒ8bC™…"|’Ë,ÙéSÊg’G÷>zôh»Ÿƒ0ú•ˆ@á¯jœAØ&'-O¾WY?G»ç3Ø@œ{±AH¹ÒHܹsç!>mÚ4õÕ6ËyDŸCÚÜ|ÓÍRCž{̸!ßœ©Æ4ß0/.Y¼$4mÖÔÈtN„#ä†9µ"Ä)mª%‚R•Ð9ìš>¨+b†SúÀ}»È!êOH%9ª y°!ìçw¿»×ˆ*(ÂÒ îPúq/_�¹š„Þò\È^¶¼_ ¨ÈgvµràA(��) ŸzB„Ô$†[NÝ7Üyç·,¼6¾˜³Ê‹«]àÿsGÀpGÀÈ'Œ2†®j] #Ô „?nñ�oße9x¨)‹r¾ú÷ÿüwÛ FáÃ?áSqçzñâDÒjvìɃDr`”68ÙF$¨]¦0ˆzCN2váy¾}ÉÉ#WЍº"�pX¢ò!W„*T+8ù×^s­�Z”Ü“ eËCæ´²K>ð´A–GÈ Î ŠÈHÚ€¢`ûŽívÏr¨Px ¢@±…’…°7Ô'ìÈã°â £ÆÁ2dˆ©pf ÝšøéD;™éë_ûºÕkÇŽ�– üÞßÞ+gµ‘#]»v1…GÈS"YµhÑ"9ãï+ô¤µFGž+G’#UÁ2j�H´‘‹ÅêK#NºÃ¡ƒ0B A¨%ÚDÖ}¸ÏÉçžk ª5Ô eˆ”<$æxr£¨ù­Vމÿ‘gáAŸÊañÖX¤„ÑYR4Q#ŒþÂè�F(.PÈ@ä@ÀXH_Š 1Žh¶ÚNŽ.Îô“rlqº!ëx‰¸éSÈœávíÛYH$L$ ,·WŠ�4N{þùçÌn UQÊF¦ä‚­a'oèô,ðKE­ÕçPBacgÈ"ä7»÷w¿Ñ­«…{2 ±Èx‹9n’Ÿ™ËŸ±5ú¢â?ÿߘÂ%ユxzÞ† ë-¡N¥�U•þd$ŒH®`Š-œ@OT]Ç;Ö~„ñá¿~ù_Ö6Žm'‘7ó{>�1ÿK„ù~ e Œp´Ç‰0z䑇ÍiŽ #RˆÊ{ï…( F‘†|QØÕ»ï½kÊ“T8Ñ�gžy¦)áPTp*dN÷ÑÜ>²]H4rÌ`'� †q…B­4…É蟖#M¸ ÷À‘FùBî˜ä‚òÕÏ~ñ¥í„°T„ ƒ±+”¨ 'È6Æ:2›b<̑ꆤîòä�‹P)#‹† #•£‰qˆr Þe7Ãô{”F`™\PÄ‘»�¼KŒžyÝ5(âúØÇrE%?3“Ÿ™#!%É{ô°ì˜±�Š0Z(¥IÔÇk<Ì”z‡±~ݵ×[È*Ä#Ä÷˜9s¦Í(ª~(âµ°°Hdд0VJSFä5ºãö;5O�°dÕWäƒbÞyãÍ×-,¥$ŠHúД"ŒÈ«E®'®#ŠAO\÷€Bo!÷.¿ürÙ×¹6‡272ÏQß�>úHóT›ð]Í�„2¡ÌŒ9ÜF�mãB�qäÅpGÀpGàÄ!à„щÃ>§Oþa$eÄ�rNaô‹F‹,ì%&½.’£‚c€ãK¨'ò@®àdà$’7ƒœ7Må8’§‡�kÈNSrIQ#ˆrà$—D.‘‡-I1áx‘0"…Ô4í¼ãø øÀGñì|£¼!× !lÉ„äÎ÷g9\azöÙgõ¼F0‚£„Í3púþ( 'ç‡/ªVb½qäpÈP;¡ @5B»¥*Ma”pL3oO$Œ !ý ŒÎ?ÿ| ©Šõâ;„9³8- §3]Âr’P¶}ê«oëÛVñBÈà/Ex ÙøÉ?ÿÄB*QÇlUÂ]ˆ¼qÆ…gDÀ4“s�MÌaD2êȆ´Â9&ì‡pAì0UÁGADhÄ&} )³jå*˵‚ÒRcÆ ê£uV_H:’�_¤Ü_8êØGqqqÊ�´ýû„çžÖêñ†Â(Õéeô?§áAA�{'aÄø"ç 6OI£]FnØ.D\eFÔ;¥þôë:µ|È¡FQ …’ò�ð' ©3e¾ì^z!lQî5ÂQœz†2ì—¿ú¥l“B¯6rÒ²¹È»ä¸¤í³¤\"´P¹Žn¸ŽS§å�l„ѬYJ /Å"Š:æ%B[QA´×¬QÓ°c~å½€m2Ÿþì§?3eóÐã?0{lܸ‰æ©ïÙÜ‚­ƒ;ác?~ÐHóÄ4D5ª&F$N‡˜„bL32žÀø7÷’ jc¸øâ¯Øßé+6Ÿ(Üž|êIëšuZ!ó¹­èÆ„àפ°Dù 9•¯É}é?;Ž€#à8Ž€#àTNUÖú¤c £)¡�F: j`nFäá!!ô4)+æÊycç—SÄíI.¨HN aÉ‚C€LhǞГ%K–ÚÉ<¨ypè¸ÅÎ#'/‘óÇ'ý „‘”رàÇ*Z’ë’üsÌaDȃFªÏe—}5%aôØ£�XÈJ…þý #UÁv×'Nœhyl8Qg"!*¡H,>WGt¿ c× ±I&ŒPW>CˆÇlC*�㣦Ô1�<ú¨œ­­á\…l‡ÃK>0¦0ºï÷¦fºä+—¡A‚S˜\)ìl!°ÀÇÂà&ðÈÏ„¿ È´=É„¶Ñ³gO …B‘–\„Iª!ŒÎH›0'’€£‚ºöÚëdƒÍ)…Üù�F8¶„4Ȉ1 „rÝ{cÞ5BŽSêú‰\Ø(‡™p®w¤ð"¹2Ê:µâQíy�â.U! IºécˆsˆH ÚaÄéR¨Bø¾R÷"‡ Ê$B9QU¡˜ã³©réVz„:Œú@drÄQÌyC½ !½ \yäþ) #ÙÌ¥²F¦´‘#OÁ6N4aD=¢=,[^l$ã �§9€z+U!œ*²4QJµ?Ž´í ‘Ìmà~ïom¤È… åªP<>È�ä•“ä Ú*b;%‡ó %FäCyH¨d…Vò½*òçtF¨„P QoÈÎ:²Ë.²�˜Œ9޼\ŒBe±÷;î¸Ãæm#”xØcS)à’•fŒ+æ0ˆê§ŸyZ ¬ë…o‰°…0bÞ™4y²F¨+™?!±ÉñVPОaô«ÿùUX§:]xá…"tϵ1€Ê’¶Q_€\%Ÿ(.G„¡Êûö·¾cD¢Í_j—GÀpGÀp�‡€F'ûœ>¹¢ £Æ"@pÆÙaÆék§…ýw¿£IrÜ’K<�S´ØuÆQI&Œp¶qq^qfpjv+WÒgr¨çÏŸgŽýôiÓ,§Ñ÷îÒiVr¸QÔ@�ÜuѢŶëL(I*%Fr]’Ζ0Ú±c»í¸s*ù_ȹDÙB…¶@ÊÐ&>ƒSÿç¿üÙB¦’ #Ô1„F=øàFZÝzë׬Š�<ú°%J†€Ã†ô!ä b�yN•"í­·|Í7È r<%È*:óœ†� š!•bèZògù™p*™¶§¢ #ˆÉ¿*™1ê3NVãøzˆ4A�ˆÐƒ |ñ'� (SP]àìþÕ^„æ­·Ü*´ƒþ½ÀÔZ(ùÃn è3®£_8é)UCTZEôIĆþ!Ï—9æ;䘫ÿQ½¦Ü3Ø6á6§k| äª1"ìˆÃ‰C�£G¨ŽØã�?fíK&ŒP ñ¹I“”ÓG!f„äœuÖY"-™"Ç”Ð2ˆœgò—€7§¶jt¡BxØéïÚµ›)(p¨p´,|G %Bújש#¥ƒ�–Ä=R9á`„Ó˜M{*š0BqƒƒO’pÔl$Õ&É.í}OÇÂC<@&Õ¨YÃT OèÍúõ‰Ð0”D§‰°!\ŽüOØHQa‘%åN�*Í^Jþ>�œà„Š'B”�òÀpbÈÔ¿üõ/¦˜ J9o36R)ŒÈq„*�¼1´ úÙ5‰››¨ 5DXáP“Ô|Ìûïi ΰü4ä`Ê%aÄøÁŽ ÁhÄB‚˜L�4½$>éþ{ÅÊ– ey š7/8ªcŽa.Á®±}úšq‡"{`lÜ,"p¸òæ´•Š’�´gÊ´H$×¢ª5r”ÈÅ®¦ˆá˜wÈ;’8?#Å ¡}¨·{e,µoŸÈ‘Ãý ¥BF˜ãp@ÿD®-°)m¥Ûît?—.a1Jù€˜w D1ÏB„1×P_ú›„…PÂÁ•°XNˬLÂ"”Qôò+/Û8Aq¹eËÖ°_ý INß¶Zž�€Òpe¼²¾ße¹àéßÍôŒú«‘ˆ-íZÿ½#à8Ž€#à8ŽÀç8aô9'õOMq|òb©:HZû÷<%‡¤z¸éÆ›lWµ ÿ&¬€°5B9Ã1¦%881oæT@IDAT8‰8vä€!9ð¨Q£C7‘„:²ƒ‚ ‚„ÄÆ(î¹çG–‹ç‡ü?ŽãGiBÁ®¹ú;¡‡{G’¥´NÌ–0‚ŒAáDhùsPx:a…†Ò²ËŽ>ÿh‚%O&ŒpfqbLañì3– G”68´„tÝ|ó-ÖÚËŸ'ŸÈO®£± ALÿ &C±µ_>cjÉ’%Fp@bµU¾æœäz1çþ:iÒÄðÎ;±Äœ€M0¾°îóZ‰¨†P…ÄCÑÙL‰¡r¯`Í)~„·õ–MuI"–ÊÓÖL>›.a6´ç“O?ÖifoXŸõèÞ]„H‘… “mÆ�F¼ÕלÁï!0kJ‘‡²‹Üh'‚0BŶZ'¸�ÿAxøá¿™Ú rkàÀAá›ßø¦…’Ð�üEÙú�qÃ| Á»oï>%å¿À1€m(e«GÀpGÀp�ã#à„Ññ1:)>QÑ„;û䚣-/)Y* qœ5òN°[K’ç…©¡4"l§ºN•B �£Ï©`«DH͘÷Þ ‹EX’£Ìç9)LšåÜØPWp „y,âñë GªX„Ñ ‰ã˜ìr4 ®¼â*©!N+sç8[¨~ƒú¦r‚0€há”·ºRFÕIUKN=!]…Ñfaòæ[oÚ)]©#Ô"ä£�TxQ§ÉáØœÞùa¸Â–pbã©pÑèpzÖJECÎN_CiE?@2@Tñ¿jÕ‚!¨ŠHÒ�S�ST1‚b…{eÚžŠ&Œh#§dM“�œ7�•„aCÞF¬ìI™S»V- ÃC É�ÑrPöYÏP”E¨ÙÀ¥¼%†¤-•ÝŽ;V$Æ4S®�[ Ò[¤Ojêù�G(ÐFKA׳g/K´�Ò!aDè÷†$SK ]¼ÌTE»¥ AÒ´YS»'ã ñ­·ß (þrI¡|SÄà VEÖ‘Û‡\2Œß\–˜ÄšÔ9"¾fˆ8š4y¢Â5Õ„#}&„TA&VعKgS+rd%„:�Ñø`lqââî]»�øá3ÌEœH®+Ô+CDœ dJ&˜i?*$æ—™³fè4¶Í¡�ú‘±tã œ¦Ö�[UxI—0b|@¾@²ʈڎwÀ.å„?G5ÞØ¾}{)kŠX`} þ'’0Šc%éýüƒ¢À˜„ä»ý›w˜ÚŒC”fSPÎÈ9ÏëäTL’¢³IÑTöàÅpGÀpGàø8at|ŒNŠOpŒ1É~J!0_jÈr¡ DH.ä!zL9vp,.Ò©B�3�„�PØý…D  }Ùù'é0!`HÂn¸ÎÊ eÂ¥P!‘÷‡…E?.בôˆE<;ý&Œ·äÀŸ)œd‡’ãÖ©[ÇŽpÆ�&™4!Z(,b½pqªiã„ÇÛ³!_Pø\þÕ+l縬PJœ †:ˆD°8R(„PR$—úF»P; TèÝ«�9ýÛ¶m³™1cÆXˆ ΄GAãŒ9c¨aÁÑîõ¥ º\ÉyÈQ³()¬(„þ@~ °xý�×t¼ù�0òÜ‘ö9°â³É'|—é9BOf‹8¢-(MÈýaEnŽPG±ÕC¸¥³Co„Líá$ꃽÐVÂS%Ž9K ÉCÔ]Š4ȈxšSr[Kþ i€C AI¸DO;åÂ:]͆}Õ®ÑÁäïà…SŠÃI#þ– AT².ñß´c±-³þD9y8¢žºbLJ]�` l ;ã÷¨\HXMßÕPݰ;rè@ì~ÅXþ [7oÚ¬´Íæð¢ã”6±²r;½ýÖ[FÆÞ}÷=¦¡n¹„‚r­PÆ`¿`@Á†xDדO=¡1p0\¥Sˆ`dìBJ&DBmÔ[¨96�¼2Q¢ý¡¬"´Š�3òz¡$2âH2mo¦y¬¨°ÈB, ©‚,¢ßK ÔŸ1EÒqîù™Ôv»„dQS�©BÝò‡y…±Ê\‘\8õ 2nÞ¼y¦b¤¿gÃf¯?’”;ùóõ3ê.Tj(€üQ=¦š%»1b„_±`s´{šÚ�Z@eÈI“àC,‡ŒKÈVH2ì`¡Â9!ü?üðC#"“í;°«ÏP]véWíúZJî?_ÄÜs"p!cI¢ �ËfvFŸb_ÿPÈ2í€âï<›�J´C£ßß÷;›O±SlöÚk¯7•`l_6ßãû…⫯½*bq¯NlúõíÌ¸Èæ~­#à8Ž€#à8_œ0Ê“^f§}»BqH*ÍwvÏqFI*�\pHqX¸“&ª.pÎ(‰�ÙÍF(ñÂ`’‰þŽ:…xN,‚xÂAçyÜ‹0)T(.pÖ |ýÀÉã~8(¶lÙjÎ!ÎÍa9ù88(5+ êK8û±^ÑÑàz•pŒ© ÷'É3;ÆUñóÉmŽíÂÙ§¾8Z<‹'‘�ŠŸçþäþÀù!ü uÎ÷Æá& ê›�ú,Î-õÄé†xÓ­MB2f}7iÚ$Q¯ê |ÁŠ{ã ’·‰¶“¯Åuá9É…ºòE½É‹i¶S?þvàŒ§¸  …Õ#(É÷)ù3õΦ={÷ìµúìÞ½Ç0§î�…àš\PA@ bŸô)8¡ÀÁ^Ò)¨Ÿ# 'ìQ¤á C¤bAÆ=éû}ûö›2©±žƒº‡¿CØäŠ4ŠŠ–mJ2©Cûè úÜÁ�6BHDJGqRUÛíõJ @ŽÂ-.Z „ö³-Ÿ!”äC#‘}—Î]”¸Z¡Z ¿¬Êv|¼þ$ ùT…Ù-VÂíµ K««Üx„^’ ¾“™“ÿîdnßñÚïwGÀpGàdEÀ £“µç¼ÞŽ€#�7@„A|‘ô˜p�5:ýjû¶íF5hØ@§„v:q "çºî‘S÷ò€/iCHÎMBsž/ãdJ…X6hP_9¸Z‡Î�;Ûéb¹ÈQv¢á%¬’(×+ÔŽR7à>TF™ä˜:Ñíñç;Ž€#à8Ž€#ðeAÀ £/KO{;G Ê"sÏÄœF8Õœ’F©©dÞµk×1EQmsnÉŒ¥¤òrò#@¾&Â)éoÈ¢„š5j*´²Ž�ÐY”i¦ª„vMboNW$÷ù©8M0_ÚW•°öº8Ž€#à8Ž€#�Kœ0Ê%š~/GÀpGÀpGÀpGÀpò'Œò ½ Ž€#à8Ž€#à8Ž€#à8Ž€#àä'Œr‰¦ßËpGÀpGÀpGÀp�<@À £<èDo‚#à8Ž€#à8Ž€#à8Ž€#à8¹DÀ £\¢é÷rGÀpGÀpGÀpG pÂ(:Ñ›à8Ž€#à8Ž€#à8Ž€#à8Ž@.pÂ(—hú½GÀpGÀpGÀpGÀÈœ0ʃNô&8Ž€#à8Ž€#à8Ž€#à8Ž€#�Kœ0Ê%š~/GÀpGÀpGÀpGÀpò'Œò ½ Ž€#à8Ž€#à8Ž€#à8Ž€#àä'Œr‰¦ßËpGÀpGÀpGÀp�<@À £<èDo‚#à8Ž€#à8Ž€#à8Ž€#à8¹DÀ £\¢é÷rGÀpGÀpGÀpG pÂ(:Ñ›à8Ž€#à8Ž€#à8Ž€#à8Ž@.pÂ(—hú½GÀpGÀpGÀpGÀÈœ0ʃNô&8Ž€#à8Ž€#à8Ž€#à8Ž€#�Kœ0Ê%š~/GÀpGÀpGÀpGÀpò'Œò ½ Ž€#à8Ž€#à8Ž€#à8Ž€#àä'Œr‰¦ßËpGÀpGÀpGÀp�<@À £<èDo‚#à8Ž€#à8Ž€#à8Ž€#à8¹DÀ £\¢é÷rGÀpGÀpGÀpG pÂ(:Ñ›à8Ž€#à8Ž€#à8Ž€#à8Ž@.pÂ(—hú½GÀpGÀpGÀpGÀÈœ0ʃNô&8Ž€#à8Ž€#à8Ž€#à8Ž€#�Kœ0Ê%š~/GÀpGÀpGÀpGÀpò'Œò ½ Ž€#à8Ž€#à8Ž€#à8Ž€#àä'Œr‰¦ßËp�p84hÐ0Ô©S'T«VÍ0ŸØÅµjÕ uëÖ 5kÖL}³¿­,œ©ÿöíÛmiР�ÕŸ>¥ ^*�ŠÆŸqJÿbOuëÖµqZ«V-·ß:‚#à8Ž€#àäNåC/zGÀ¨öïßvîÜ6mÚ>ûì³P«v­ÐµK×мyóJxzÕy ÄÙ†�¢… �péÒ¥K((hpÈÁhõêÕ"“¶ùÒ¨Q£Ð¶m[‘k�ÒjDeàL6nÜæÏŸgm),, -Z´0Ò¨F�iÕÓ?”9•�?ý»`á#6Û¶i+û,Ø"ĦGÀpGÀpÒAÀ £tPòÏ8Ž€#p€@@±I�¥ N_ºŠ•\U�:à„.-^f̘êÕ«FŽŠD6|™ Š údÑâEá½÷Þ5ÂhÄ9#B‘g(9ÀhæÌaݺu¡z�ê¡u«Ö¡OŸ¾¡U«ViÁT8CXPÿ·ÞzÓÚræ™Ã�üË…b¬ªØkZ`Ÿ eƒ¿©üöï û÷í·¾ƒàC!Y ÷/..ï�}߈Ë=z†ÂN…F\By©xLá%Ò˜ù¢ž†(1™³™Ã½8Ž€#à8' N�,=åõt�/-Û¶m «V­ »ví”SX;4jÜ(´jÙÊœÄÊ…z¬\¹"L™:%¼ñ曡qãÆáŽÛïOX™Õ8áÏ"ÔŒp¢O?ý$üéÏ™CxÛmßg >ÃBôV®\Þy÷msØkˆ0ê\ÔYÄÚ¨€Š'�RÑ8C&ðõéÄOÃþp_ؽgw¸é†›Â`ÕJ½zõÒ©f©Ÿ©*öZjOð²ÅŸþÚ¼ysزeKضu«…;†¦M›ZËâýg̘â1#0ú÷zôèaJ² Á—âñ7m ¥@„8j'…!c‹ÐÕ/cý‘Ž€#àä)NåiǦÛ,–ìVnÙº%¬X±ÂŸÉ×Ö«_?4/°…(»’ùºÐÙ¹sGX»vmØ®|$‡ 6HìĦB’Œ™ÿìä�5k> S§M 7l õê× m^bŽŸB *³lÞ²9,]º4|øá„ð̳τfM›…ÿø'a¸Ô)_¦4c?~õ«_„ƒRÜóƒ{ˆç‰¶vÝÚ0aÂ#×PtìØ1 :,tèpJZ0U4ΑP+õÉÏÿýç""w…ï~û»Vÿ–-[fMDV{M ìð¡lñß*’hÙòeöÎ^-"¹I“&aذ3Ã)§$ì+ÞŸpÃ_z1l¹Ô·_ÿÐS*#B'›5kvZýå{äÒ¥K»R 2¾úõë'%fç�Éø‚\¶¬Øˆéö:„ÚÚ4ؼy“ˆ¨ýRšÖõë70(jç)‹|AtW«lq1Ìš®djTPBLîØ¾#ìÝ·×æZ5kéYõí:””%®¬%ã3 ˵ë¶û׫Wש\Ÿ¬„+iØ.÷ص{WØ»g¯‘m<‡Í žYQ9Öx.ø€í§Ž|¥R„Å6îVùü~pÕ|¾,|J¶5ÓSW°Þ£þ�œ? ŸëÖ©køÐ§ߣý¨:’kâ2U!´¼�l[ß}R/Úç÷¦þ|É{�£�ç’§�>¶¡²g÷ ÏÞ`¿…fש]Ç6Tø u,©´£¾‰ví±ÜklÊð;ú "q¥?±WlnÏž=áð‘gÒüêK^?¾’Ë�ƒ‰�£ò¶3ùåù9S|âû€ñHN»=Øì~æ‚j¦T§ï’•ÅѾ°mì‹~(«Ð�5jÖ0erÈ36´fͳ'»¿æ­C‡¥ÎּŨ©]§Ž©¯QÇz©ú8aTõû¨BkwʧMŸþñ�§Â¬Ù³�y^‡öÂСCéN Ý»÷°²c>�'ÿX²dqxû�·•ïA»�š;wî.¹äÒн[÷Ê67fÌœfÏžæÎ�Z·n®¿îz {ŒÍá8äÒ„Tjܨ±‘�ùºñÛ^U¾O™2Y Ä?I ¶9Œ}~8p`(*,:ªK§žôãt­ÏyôëÇ«¯º&4mÒ4Lž<ÉfÌ+� Cß!¯ ¥âJ©SWšlWxÎ9çP=¶k×>¥¢‘kW¶Z ©aÆ æÈc?�:u íµ.Äæp“ Î6Ê·ÏtÝ’%K4n4ò§�H"r¸uÙÕ±c'³ÅäëâÏ´§Bt…”¬Ø9ÄXC‘[½zõÖFIspK\ñúL¿Çñ˜/«Œˆc¼àü¦Ú(ê·JJÒU«Wiœí®Õ¬_h_ûöíSâ“iýJ^Ǻ¬ÁyÎÜ9"$wÛóÈSƳ!×(GûQsÀ"­!È=˜ª4‘2‘~Å. #Ù@¶ÏoLýù’÷@ñÜ^¶D³™UMX¬_¿Þl®Xáë[…WM…Í’#�œ‡|®‘l)Á qɀݭ[¿NmØgvÖI›.´�û—´»’õ)ï¿!d‹¾KŸ®Y»F„Fâ™íÚ¶ÓÆ\O %OEpí”â;“v–·~ñó‘Ø*/>‘hZ¿a½rÎW¿¬’8`›¹-´A„Ÿ×µ+ Í�DŠÄ)y*çÌ™mmŒuHõÂÒeÏž½Ž*X-ZÞ|óõ°IsB×®]5ï53R–ù6ö0zôy6¥º¯ÿ®j!à„QÕê�J¯M|ñ°øxäчMÅ€³³cGb"ì  ú’K. çœsn4h�&„v•^ÇÊx ‹ïÇÌBm`Õûi7öNBmªŒÇ—úŒøBÚ¥—èa}Š] Lv(K}À ú‹%,Ðh;_,Új²C§¼8,@Ø'ï» ìК®¾aÁËnSs½ÜØ¡`Ç,ޏß&…T¯^C ‹ÖæÒç-”×hñyX?·hÙ"T¯VÝO;¤,ã%Ì=ÙEj$EÏeÇ#ÕÎbyë]Þc¯×ªv|i¼U×bŠç7Öµ¹} Ô·6‚Æ¢yúôé {CŠ‚å¶X*ÒbÈ�¡¡‡H\î,jYЀ!X²èb„rn»Cú=»9Ø á†RÐÕÑŽ$mL.q>`gh«úgçÎDéúâࡃr$¶†iÓ¦…ç_xÞú < £ä~± žûåÌbÛ¶‹¨¾� õ’9Y’ë¶”0Ú©ùоƒTŽÌÑçÊ6iŒÃ‘X´6Û©¥>Û¶ÉekV'ý¡†ðIôKcs¬°;l…û1O”FÑÜ�þ6ì´»ÞDN÷¢T4Î,ÙýÜ¥þÃá›Ýª ¿¯¥6�-‹ÃÉrhñËÿ²±“¬0¢�´�ìòàRÙöí äwêžIý¹†¾Ù¾}›ÍàÕ¢ …õ!8bìæc«8±Œ»&MP>Ô3» ¯)Ùâ_ÚŽ«Í×lpN8sæLKjÍ;áŠË¯°�ÂÒpƸsó;üM3îªÆM´OB&Õl‰9”1É€±D’ö–š/ ƒÅÞóÂVÍ){¬�8|�8¨ŒÛÒ@®Û&L¹Ç=»šÆP=æ[á‡boŒIÆ…~ Ô3Ž¡tæ»øÈÿ¸ÏÃI¦?m\«o顺zo ŽdWœß3¡Üd~ä9‘PcêocH÷ÛGýÕÏ´µ¡>˸æþMýÙ¹Ý@‰ùØ�rÎÙ#Âm¼ŠÜ9EÄ óÏñ’àÓ¾˜g~þoÿ×úóž»hkr�á¬âD÷îÝû#ýc¤ËòÚœ–/[fN»úØ&öqŠÔŽ8q}ûö5'œ6Ó.p_'…äÜysÃB9|Ëäðó.¡à’‡ ²©_ÿþæhÆw0ý´VÎö¼yóÂ’¥K,„šwÈ� ›f²Ë¢¢pÚ©§iDßG{¡N<"‡}¥ÔîK¤d¥`ß®]»@ޏ®]»Ù;ÛÌ¦Øø<2‡c>¬p¨QÚ£¤êÞ½»{ kì“×lÜLW?T_Œ#쌂>Úpd ‰#>ÙÖ×nžô?ÞÁÔ“>š4i’�°éÕ«Wè×·ßÑ\yØ,„ñܹsÂÇŸ|>“R•vŸ\ȱ׿ÿ³%êKî½I“&±ÀçèææFÖSŒÕºu?Ï¡Xм…áUXXd÷@™6{ö,# y&cˆ56¹‰ÊµcK…Õ3—F»ƒ˜d³a±ìn±æ8rÒWàÏW¤û®?ü.[\ã|Z¬~d�…js»lð€æKîݺu›Ð[De�Tµ”øþ‡P-O;ãüf7)Çÿâ|˜)>̽«W‰4\¼(Ìš5Óæ&6jh� ™‹�Ÿzê©�u%¤!ý‹í@Ž?N•ËŽ©­¦$ÍKäqä�±Góe#°?æ9ÈG ëÄ¿=üWÇøRŒ ÆöE] o¸þF›ƒŽy€ÿ£J"à„Q•ì–Ê«“1‹2ò£°¶\)/¿E‹‡´H©£E„F•×%ŸÄ‹lìØ±¡X»LÐ�”´tä¹#C¡^º'káåg$ˆ\óçϳ¶m’3Æ¢„—WÏž½Œ ä…Âb‚�B|°ÓÚuj‡Žú 99ø;… »Q ´{¨®ï\p¡^€EöR[¸pAxëí·ìEöÙçØ"e¢.vAYÔBT±€ïÞ­G8]Ä(8³ �ŽÏȤÞÔ=–c¯Ÿo‹MH0äÌ8OìžöèÙ3 Ä —Åô2-ôQ¾Ñ&&, ØÄ9£¾,òÎÓÎ5/jêËxæ3ìê±bÑÅËpAAÁÑW-h!VÈéM.,Î 'Z¬ñÏ‚x©ìŽûE‚¥­êÈ.&»ª/¿òrhÙ¢e¹BÒè'úžþ˜4y²ÂÛ–˜3Bý¨?N Bˆ0l<ædI®còÏ�Ž`D},˜oÎÛç_` Òäϵ� KHÉKE„wëÖÍú•E5äɼ¹ó²Ë,„‡03Sìhb�Æ ³¤Á,$Á™y²4Â'•Nþ™þɤþ\n8XÌàuæð³þ?{÷fgqä‹ÿY„‘„H"‹� Ø€�m0¶1Æ9¯w×»{Ÿûǽ÷wï:ìz�Á“ &ڀɈDŽ"I€L9ˆ$ð¯>uÔp�F3G3 f»ŸçhFgÞÐ]]]á[ÕÕ9‡×‡Å¡Í¼(p¾î:ëDVϸf¥X‹éˆ…¡­Í+ý9ž=5‘eÙ&æ„Cg}sXŸ¹ÈƯæžÀ§xƒ Æçº 39×Åý�ÇZŽ ½'ȼ ’aK^ud©ˆßr[s�ûì;Y.Öÿú!{Ö_\Ò¡{Q÷¹çxܲÞ3D¶E¤Éë|³Í6K¡Ýä�q,Ü/ÊÍ©ì‹<(4#kñ€(6:Ýy×é`$ÇÁ�ñNÎ�ëe¿�ûkŽykËžH¸ÿÆ-2¯ÿúàWC�Õ…¢gDËmÓoY_gŸ}VsÅUW&/ùnÔ¨‰bÌæèƒ Æ–.÷øS¿|&MjmåÈ~çþ1åîÙ‘q:ãñ©+Ì;}¸Êl}hK,0Q ðªèƒLŸåBþ£#Ùóò˯¤Sl[ó~ûîßl5èJüÿã1[ŽÑ�ü¢s€ÝÀ2]b�^|ÉÅÍ5×\“zzÁH~f;l·Ýv¹že\­ë_ŽèàmÍ™QƒB$IßEe>üá}Cá¶2/:k÷ñv#÷»þ_J@Ã@»"¢¯ qѲVöCDµc<¢®"Ÿ'N ‡bÝ:€—„�$ýÈ¢V.úcì #‡ù»="( Ñ�ìÿÑŒzqð8GG}T*Á]vÝ-¢íK5S`xäáGÒBwüƸÛ8Œƒqá€,hÚi¿‹aæ~·-�¢Î¢h"Y3ƒ×¬OéìæÑ)F›‡bõ~Î ÅÊ1¸úê«ÒP¬¡#Œ‘ÆñØsÏ=Sá2¼83€¥»Â9C[ÑZÑü`ütƒ�D”(lkL³†A7ÞpC ÷†‘àýœ‹Eb]‰<å'œGspUôi�H¿ïK†Q‘3ž}-úˆ€|Ö¢¿ë‡”eÑwÆçÄm¶�hä9^²¬§Æ¸WS‰}á…$�ö™O&�g² Ü§¿¾o¼1é¿lÌ«ë8¬dž¿‰¤¡Ù /IJ(d“Îdbq"·�·m€:91'Àhz8–çà0-ã÷;M½“Îh„–Œûûî¿7è|{nHÃ_&E°rFÁW‡ˆ¨ŸvÚiiø·gáù'ƒf²úCÆç;Á¯e^{â ßk'ýÇ3ÖÞ~S^DÊ<€¿Se#à µýÈ@âØà#Ž£õ>ôŸ`$¢mýA|8¹üd^oÝõÓ™²~ÖZkí¸Žúí‘ÉÛm»}›4kÇ÷²0ÏùË99&ýEOc—!öp8B€úU†±ÚH²gÄZµæ�È®"Óõ€nÖF\ï¶Ûn €xŽg’y6…á@ ´µnð—1®rœ ³ÝøR¶Dp*È|ëxG6n»-yÐv×ÜO+à×]á,s|s]‡�#"Î.9²µ5&VKüíž\£ãÆ�K½¿ñF›¤þÐÏi€–þé?ÓÿÂineKDfÇøñ)_­ï;î¼½9ýôÓCÖ\ÎZ«èõJ+®×/ߌ\ndðáÑãëyÔ:úL ÀèÿD­1 ö?ÿÓwó=úÓ™I#ï_½q9·d“v÷=w'`uõÕW‡®¹;e¨àÂ2Ë,�Y”2UJæî JÙôâ Ï/Yø»È8ç�^R7‰ãnN®½îšà·Åš=" cN8Ó@¸[C÷^qÅåÍÙ9;tÛó òèÏB¡¯8•d4G|«-·ݾmÔKÛ!õ�þ¢+àsn8¶èާeÅqlÉ]òOû¾è,÷vÒ8ºtÑݤsúéKà" „Îc|òàOeVºÈFÓ¦O(eƒÎµ×^›²|ÃpЫl6Y?l Â#`+úÊ¢y¾,À [‚ À‹jäÙ `ÒWšõJ^\zÙ¥ °óÙ7€Ëö†Æ­Œ¨Q)ÃèË›BW>ò\KY4Âd+@ÈXøM¶7>$ÿ ôû_h°Ž7 ™ÃVQêÁó¬çƒY`ã±å°x„Mø»ßt|0ç°+«‡Ž€‘é¸Ý¶Û5Û„L’a ämoÖ ;Ù{Ù„2�éèÃfb+¶·)1¦3cÔd´Éš2_‹¯Óá€qÛ©¬ÓÏ~&µˆ ‹1’7Ý|csÅå—÷kœK?·7¶ûLÉ^�K´ÕßvÿP× }ð¿Š?wô1Gçš'Ÿé*k -ãè…x?òüÍ<uèBk£½Ùðx¬ë…&À"ÙE»íöVÀ»ùÛ˜Oü£Î%�ýÙ°÷­1kÅüîï[o.r°ýÝõ÷w�0ší ÊùÕW£ø^ ¯Ä–Z«-éœ2o¥¹HDʆ…±õn;ê7!OR*Á@XX¬%¤ÐæHsú`¥+#ǵþòPü¿þõ¯Òpœ`ä~L††>ØÖ¡Є¡ ÂÒ�(?Î üÄ322+úÏ@¥ Ê}ÝïÕ_÷rEÁŸ¡¾P^Ï -Žu7,hcô>Æ·²wL�̧1l=w £þÐǸZàÂ3‰üßrëÍÍ\�?EȨ–A1f¶A ïÒžeb˜ï¹9R91ïâ?”c‡1rý ““ïÆ�k7nŽŸEr{D5@³À )üNž¢�D9DÔÎ>笜[Ô™ŽÅ)§þ1#›hAÁï¼ÓÎaЬ’ ~þÕ¯~‘ÑâVöÊèf•p†# /¼P¬@ŽƒtÜú4ûì½Os7C¹“~‹ˆiiuÂD`9z¢mƽRì |̰·µÊœnÎÇ^Ü;Ç&s†ÓÏèÃëh1*會‚F¢ÔÖ4>cŒ�rÚ©©è}Ç0`4à‹a@Ù2`�eÔÂ@_ëT³.ÖþãON:Zƒ ;ëPAMkÜü¡5cŠÒçìõ0J@;¶ßlŽ‹­Ÿ¢ö£B.˜ißæžC&“L¶àî ƒ>™Ùú'{£§VäÇ•W]ÙuÔ9Î/|þ‹Í6Ûlãz«F‚-x€!Ëø‘^~@Ô|áôˬ47G4Ü`ƒHéÀï­;î¸#ù”ÎØÁµ5×»çÉZi7ë°°ûn{¤q<˜tÖgrúçÈ88–\r‰ÌaØÛªÆ¨ç0隈ֶFtO„°?t±Më�à×î†wÞHG©ƒþ3h­E y!;~ƒ ›µbþ¬Žò‹¡kè #Y±eDæEg7× ‚þ†žZqt§�gKšõÎÑ´p¨9¯ô €\4ÿ¿üåÏC/?Ùì¼ó.Íæ›mžQrÅóÏüÓ9Çœ"‡[Œ‹,÷’/t²y*îãp-ö›Ø!”^%OlṵþäÁ)�É_zŒ¬ÀCúó™ù2™ƒil”©‘݉Ï[ŠÃ°Wd¬ˆL“Uä­÷“•2K—]v™æSºÙlóÍó~/½5r䪫®Jy+JÎ8 ÓÉBN'Œàð¨CCær@éš á4‘9ä$GëÏgý¹qÚ™l2ô²#ü]?Ù]dq´Èm²’ƒ{G€Uz÷+=a„|†Â÷œk  ¡·f=û�3£øOó¯ÿú?B®/—@/ù$Kˆ`³˜w×^~õ«_¦.¥ü}ÇÈLf+Øf D8&!²h�=Þ@ÃöÉ€s0Ü,se^�‚Éžº+xþä“OJÙaÌè%Óˆ}I/×€sæù£9 uœ`9õÔS3›Ë˜7 >Б¥ý¿.xxƒþ;í¸sfÎkð2‡VF }ÜÝì�†=ý-í�à/ ™-{ÀÀ¾—q$kª'À�5iÒ% ¤»ÖX€_dƒu/«×DÏÐ6Ò�ÓpzêK¾cŸÈ²¾&è|J8ékkˆ]ˆÔhŒ8åW…nÄж„}ò“ŸJ0¯ý½x_[ãü`°[T£'Î;ÿÜnKáßö­DäñˆK$_\|ñE©ç� ì|`íóKn¾å¦æ„NÈí©Û˜D°î ìæÐÁ—]vYêM™z?à)WÍ9º[GÓÂöX2þ¬jñ׸öa¼DÆO—_qYÚuÖÐO¶$>*Í:Áo2léxü4Þa‡�ò:‡ äi°¬“�€Õm'n—:\à€~½&@ÃþŒ³;À…‡.S§ÞŸrœ(Óßv`Tà¯út�nÉÐßFÀ´Ü´@^rƒÏ—[›o»µ¹7"£Ã¿øbØO²Œ¬3óO¾ÙÊÚÞð ûÐç–[nI{ ?°�Ưó¿´9tÁ–R4öQò·ÞzK8—d�([8»À§XZù÷«""}òIHƒn›0æÐ‰q¨�29¨€+l´‘ê `Ä�´æ9�'�tböXňCkŽJ+{br:˜@ãÏDDoÛm·KYUäFw^.Ïå˜ýìç?Ë(ÝÇ>öñ4ÔŠh¥É”9ýŒÓrþÅSŽ’÷ ™mÖ\q‹aø¹ôÒKS^@1�|;à€Ì(é 0Â/2ƒÖôرc›=ß¿gÊ@ó0Xt&ãô‹Ã(R‹_Ÿr‘SÛÈxßs:n@ˆƒÔë 0"›;¡‹mZî®&¿–yíÎåÿœùNúo=¶Ë ‘nºŸsrW ƒW6ä=!Ç8¸t-¡Þ)j|3ôŸ`d~9ùø‹³Ã³å„nýØO@Ó½xœƒÏùÿéOœëm×Ývo¶ÜbËä…Ì,‹d×E¶~Ä»F&yd¦_/»âòæ–�‰2¬ëÕ¶J2�COÞ\|vjÔt=@GôŸ“ˆxÀ\àƒÈùî»îž�»Ï‡ì�ýFÞÜCÞÚž 2·Œâùœ]@çÁœs`|½Fô7ýrÒÉÈŸô&;B6 >·SÞÆó�Ï{�2^8°ÅYâŒ@8[îÙ52SeÛpÎÉ2N©1rÈÑcÿ@l»`¯È<’K‡qxò‰­Ã¶; úÊ9UtvoÍX|è&Ï!§: t�ã2sè?¶Žu.CÓõôÌï�û}b2Êlé¢è[ë_¹�þÇôÚqÇ33€¬}ýõY‘©yasù•—X79ŸûíoÿCÊSϽ1Ä#�:2õ½h]™8œx[QÉQ6�u´ofB·2¨ðá‘Aô2æMC?2l0>m:ã;îøc¸gãYSè-“ºU+L½°¥fsÏ0ë�¦þfþ¦î½÷ž=˜Ö‹µhRב±Ó¢k«v ›‘“ì§¹`G“+®¸BÚ—@ÊŸüì'©gÆŽ]'i.ðCþÏK+|@GY÷è)ÈaK½@‹þÒåÛe†Ç[FÀ [×d( ÖØ:ûÙÏ|¶Ù8lFúL°L6�9±†Ù =5kõä?þ!³ªÐNô—¿òÕ Û¯gÃÅÙñ‰�m¸qsègMÙa^eòüôg?M½86@x`‘­Þ ¶d6~ûÛßIy¢oì�SN=¥™cço[¿ü¥/çZm [»'…ÿ0=퇄°—ôG`à{ßÿ÷�ôEæ.»ì�¼•Ò›å ~€žÞ¿ýóQ ’­‹�Œ³ûÔ7�íè/ÛJÀ‚½++K6žÔ}Ý }¼�¯3iÒ%ÍïŽù]Ú‰}â ”utµZgd8çœÈ ¨}ýkßLYmºòþBãboé«’èŒl‡þdËäYh>µÖáç„Îz!× À’Ì¢7ÉG 2tÙjµÍÿ¨€Ñæè•È,z>˜Ü–‘W^y-£²„¶¸�0|¸½qìâˆ%4šÃ£Þ‘¯‹b�‰  È£Q_¥‚ZèoDÿ+� äl�àl¶·þFÖ±’,ûJ#-¶µ-B}„Ñ¡üÔ Æ’öøã�§Á(XÚ4 &�§è#š3F€ "·RŸ9ÈÆÂe¨r|Õf HѶ�˜ Ïs(@—€ „1¤8¶�„ÎÏA}B'Έ4ü�ŒúK@¬‡�çÐQ@cP`³«ë­Ú.ŒÁ÷‡#J�sª‹ N"Ïgÿ迈ñ/#òi¾9/¶Ee¤5œóËQ dD¶ Q _ ijFÁ›o‘OÀ“yÏèiD)Õµ�퀈h1H[|øÆÛ@L óˈQ{)ê=ñ䌤þ€CÄ„2s C¸“~oc4.ãþEd,0H�YÆ-"Ì0Qo ~<‹ÙUÔmhH�×¼ŸÁ”eH¨Y´Kd Púœ€±h©uÈIsÍ~ûî›õ5�ôø²vn àÉV ÊzȆo4°65F�AŠÏì-G#|¥�œ$t?ÿ‚ó2B-ã ÖÀÈÜ™/kˆâwŽÕ²ËDaópKÿ®›|msÔo�JMJ?POFX{d0;;û<åÙúþÛ£�Ž5üXFò�‰ƒk=iŒü#�<<øîѤ?ùhåŒ0þÉÆ&Ç‘ó=b‰V†G:Á‹ä£¸uØaŸÏL²hNFÓ¡ï 0ïL:lýáÄþ> wòì£ýX:²À´f,3¤o ~‘™u^ÈQÎk;`äšNè"ãÌÜ»“_ñNo ÈÚIÿñ3ÄÀ0?z° H ƒÐ ¿QÈ'ÛÔfΜÀçÚAçœúÏ 0*Ž@Ý:Å×t!â�XÉ=:°|D�{Œ8xhE/ï[¤Fœ„'ƒæðÊp€É[ýùTd&�›ËǶ* ä�>8Ì3öÜóé Hɰ‘aG^ØÐ�áW¿È±ÊdYu‰LJ^ ò�·jXae¥äìL @‰N—­±z€#½mI+òÀ–¡Ÿýì'™Ù)“aÓj€¦¶Æ8ÁÉé…ô,GúØ*dÑ œJ€‘u$@h¶†è\Zô-ú(lí@Ç)§�’N¹^ä ½e»~üã%=ePÉY{íµ²äöœôvÞ6&´Âsš¹˜qœÕÊ"ÖyE¶Ðÿ®/DŽ0È…®™]Î/ÀèGÿõŸéßm×Ý33Å–¼|Vdr\uÍUÉÛ2#¿ùõoæ¸8Íæ‹\¡Gd… ÕûB® Yœ²R¬º·Àr߯ýËÌxþÑç€}²�%‡~ñ‹Ÿç}xµÖè[‚`±î:ëEÀl•·9¤ítêÏï-;÷ÙÐ3q@¼ß)^tÓõ×OŽÌ­·ÐÜ6×õÖ©vî3~jøR?é/²Ø!³‹žÇsÛn³më¨ÙvoúØ~­u�Ÿè¡ÿpBÃÞ_!lzËÔ¶Ø`´ýÛ2Œ¿¬_ë0‹žj` "y¦‚ýÖ& Ñ8ø =µ¾Fì¶#ŽøMŠøÑšø²¥_Êæ=<ô°ŒàyEn¢ãù矗à,™ÆOùÎ?|'³·¬¶Æ¹çž|rEskÐ@ë;ßù§” h_š¹$¿µ¶ââI<,øÕ^[Çš&¿.½lRúðýЧ=%Ck›­'¦mâï“B|ïß‹µöhóþ=öL �eüt2Nvz{cÏžuÖYÙ_àyÎõW6NÑÆß }dEÞ}÷= .ãrãs‡–À—µäЙ²—øü‡“NÊyø|¬g|O^�-í�Ì#7J–ؾ Ô•i¸Ë립*û”½¨Ñ 2™Ñ{dïÉ'v–;J1�¥²ôø{µÍÿ¨€Ñæè¥—_iž a¬þ‰Ì¢7Þh�Eåri¶2��“5– çj±FÞÍfÑsP æ =[^U5cŒ"gpPä;ì°c*2ˆz‰¤—¾·éÜbΓz@IDAT3ŒBîÔpdž €Ð{-2œ8†¢ÍêŸP Ÿùô!é¤ð÷Åßa³@ðQ¯„@£¸_xÁI-³Ò©þTDz&Ly\,”Á“é™l!s­1(Úö·P€¿s}Pë‡ÊpÑW@î�§œ‘·¿fñÒ¡$n²%¦…“GIPœö¼F�Ò€fúªŸ(Ò”PôÆé™yZDX£øwŒù¤)cé©•È n¬N6ˆ&�›²UèÍà``3xD�~‘M[œê3!"ÊŒ†ŒöR¬¶O0‚NŠÔ÷¥ƒ_ù¤Èñ:Tx‡Al; …t<ÿá}>œ)Єhw=Ÿ#»ÍdÝi¥ökÿ,"`2ÎD¾£ÇŒnî §“~O D?8ðî·�EäR4ø »M+ å øq�º øØœr\Døð0G”Ë'k\íV,ÔVëPÒžòŸÅ?¶²È´áL£›¬Çš²¹dLx70at×èæÀ?™ÛÞô¥´¦/¾8×pÉu}ŒŠ£[øÐxÉPr_ø¿kð;‡à½ÓN;7[‡Œ’Õ`ÛZo }Î8ãô”qK,¹DÖç1. ¸çs ¥ž‹$Qè¯.#S¿ô�Ìy=kÖ½žŽ�“õ8G7ÝtSòœhþ·¾ùí”Gîë/`ÄøL:sf—j§œŽ,ðûk_ýzÊ3ë§8¨"|xFÿ� zÛÔ¹¶ºlòV+Æ`ñk <̉'Ìe'ý2¶Ë zÉÇb@�Ñ’Skšs#Ã/‰¤wÅzúGaNãã�’‘%Ó@Æ) “ƒÖÞd‘õ‰[wÀtཆ�¦†½0)"Ï2?FðOÿøÏoÊáÂGúðópô�2xäÖÃ?œÝ. ƒÎH¨…£)²Mæ’WGþöÈtÀ?‘u€ œ�BÓ…8¶–,!ß÷Öʼ˂ü��·‚BŸ;ôs™AC&=Ô°æ9–2©§7Ç@)c��åtŸ‡â”1z_Lœ81[h¿-'þáĤ•Ì,ˆ€'¯ÆÞøá¿Ÿ[û„¾9YºÖ½àʉ'ž�2ïCþpfVKM™U²·ÍÅ¡‡ Õšé| H\xÑ™Ù`êGöÛ]£+ù.2„HÖ\öÚï~t)êlmòw�Ð_œV¼Fý4>�@g¨“¼ŒÅ<½ð(>’ +ã5Fבõ=5§A?‡µÈAÏÖ�l€’”VBi‹-¶ìq0�+jAˆõ¶%�¢£ðî»ïÞÌ0b0ÚFæ%ûäÑMô�páà;Õê+_þJ¦}Êèà€‰LÞý¢L,ň)àÛÂqeôI_Aýõ[ƒ†³ªöÃâø@FþÌS:Žgž‘9 Wiº€F(J/‡Ž8öÛ/j} !)5ùŒ3ÏÌñPPè3/€Ñ¼Ð‡qG™ÙÀ�é4¿ž¹N¤6ï½·SÖÉ1qx!ôÆCɾ=5F™l'[£¤bSúÑ(zFÆØ±ëd `OÍxDàÌÁ�òãTä¶T­µÖšùÔZUœÒÆ \!¢_ýÊ×rRæØX8J 'š6£`ǘg‘ËvÅÅi|›4l9Æ;d”·8f­5þFðU+BF1ª÷�?dùX?�ô›“dNà?ùé� �æ_ûF*lʘñªy?c›!ÈòrŽtî‘ë 0²æÕ4`pÝóìÞÖiz£óùåŸÂðBW€ g€c뀌ª?ý錧ßEy÷Úk¯œ×r¯Ÿ€&F!Gˆ#Ó£/€Q‹¾-ã_”Ê>öø£ÉãÏ<ólÿþbF»7RèÉ=[\Díç–QÒr௠޾-ecçcQ£È½Kdò¨#�ÌbÅ_ü—š­Ã�=³ÖÐ�úxý3f<žN“BÂæ‚ã 0²vð„¬¤ CÕ¼v£“Îä°Œ[7m­�QñÅ/´j´fo®‹ˆ,ÚÊG¶´F ÕNèb¾´â`Ì 0šW~]7œÇÞZYOý�W)õíò‚îüÖ·¾�ŽË™ÒÐÙV&€‰ �ƒ¾Ž394ô/riNc(ÀˆÞ#ƒÖ‹ì BÀ� �¿,tðï�ý}:ßýî¿ð²ý›†¿ë®=üëÃ�k£Ôÿá ßÎÏ~øƒÔÿô¶bÕ‰è°Æá§Ñ„ö ÇÃó�3¢ÛxÀ&áâIëµ·†¯éMzæ—s�mmÙaûíÓ/÷{·ç·2_~•úHPŠÌçxîþ󟆌zåµ�ŒŠüôL´ðñ]iíN³ïŒÍúuMûºLÈŒ“ÐÙãC>óÙÊOÔ–£Gè+N²ìZ5F¥Àã}ò‰¨•�sƒ^_Çž½TÞçý‚ Hìc’E‰Z0€›}" \“©†—m¯;2ìAz–=¸Jè•bK¨/)K>Or ]p@d¤ÐËìã9 ‚À·=5ýéÏ$€,XDÉäcß�Y€� = øhç}cÁ—ì[¾ ÐØÈFnLš{€õXùÑ�þ#|&Û²»R¯ 4 B?úÈ£!Û/m~ýzÊ�‘QôJ'ãä“´7Oü ¿äßcͰ7�Ïx¶wü¶NèÃvò|òððÈüz6À´Ýbk²1l±ÅAƒ¿5W^}esYü] ‹Ý(°oœê<ú¿†^hËÞv8¹oͰ�?ñ‰ƒr+šk‹=Û>ƲÎ|×]n•ïÚ¯¯¿Ï¿¨€Ñææ½ 1P¦L¹+‹tŠ„‹˜1d{Úm�¡dDí¿ô¥¯¤Âo'A£éÓÊâgO„Á –ý åXª/§@V$v•UF…añ�ÈR¯ùŒLNAL€Mœ81²T–mã¡/ˆ=ñœL {ð QÏüelí!°SiÊn{ÄC¦ÅßoO�FÀ2†¶Üb«Ø¼:à€&‘ “½½_úâ—òïŒH ƒE 5³�ŒúKà–¢¡‡0:&ö‹@ˆvS¼Ÿ9ä³µjŸ·¹ý^RÔ8¢/²H¢ÙîG¹ÚÊÀYä0õÔDÈž …â‘V¼Ù–4‘$YJxTk)ò7R�*”):}à�嵢Я0Ã騈dHÐc îs‡e„�qP®7ãIl1ñë�ñkw'‚zôïŽÎÚx _q¢D:é·-‘Ç„³HßýçÉ÷÷ÉË‹{ø§lsrÀ9¯;‘¤i ÙÒ¶ÕÖ[ç¶ÎöÇD8 jœ�3& ¶½£Æ Ž!ÀÑÃNÝißBZž!ò.£B„IJk²/€QqþE²”8 Œ$o2‡‘§ CkTm!^N}™0a›ÎCéG÷Ÿœ|†$¹paÝd$Ê,©CCîé/£æK_ür:8xÁ»Ý«~’±3®òöö£ùDžrFÔ¹âýÏÿñ?3c§Àˆƒ0˜tp«õ¬çtzèa!ÏZÛ ÝÐ;ûëBæ›~µFhÓ ]d¯jƒÍ¯cÇ®“ï™Ó?eÝ÷w^ͯqOš-/Dúÿ韾›ë•¬à¼iô�-2'8àdÓ׿ñÍ Œ ý‹üšÓø 0Âó€SÙ2ÆŒie,ÊB¥»d„sì1 ýëwEô[€`éWk‹ÉyºÔ¦6m&lÒÚ–%0ñ¿þÏÿÊõì0Ý猶·"�_|DÒ˜™[Iç’QØþŒößÙ6Ö,=óëßü*Oqt‘÷ô<£½Ép:üˆ_§<Ú8€.o™.ÿޤLؽ÷þPnM¦8¶í Àrqd\ªÉ³Ñ£GÇ–è�e¨ë 0jg'¿£ Ù}cØ7gF`̼/º”h 70 }8ò2°ep ÜÙÚ¼uèÁ 2pFÐo<ó ñ #¶¬ öµ7ò„è’ù 4jȳ ÐdÍ$½•ÙóûÌèBC™Âk‡3ʦR=zx·^þ2wl?g«›@ˆ ¢õÞSs­íß2DCFŽ|û<öõTôº<;£è;»ìøã�ËÀˆ\ÕZ2kð’w±[4<†U¨ â4¿žš +Û•m¥Éð¨¥Ýtp(ÇŒ�CjðL °k³ ›göËnQúaÍ Î,äàiö•z1䘾 ›`€Åw/;¼½y>7ÀHöšùfó³3GD@ñý{DI‰5׈¸I}Nœú*swÔ¨U2|`ô^¹âÊË#úôÌ—ñTÔ7òö’�Éúªßjü°£dû´F¥Ïæ�Íi¼léÖÚÿûÉèHµ} ñ"9µóÎ;GpzÅx�ƒNnÍ­`QÆØ‘q&È6kÖë�Ó:koÅÞ-úØXÈ~ýmoì¦Nèƒÿ¬W™¦NýøZ5lnk€¼“qtsøZ¶:²!eªúÙÏå8ùOì{­e¿?™Áöã‚ßÙT]]£[öã^û$àØÓ<´�¡þþÞ§@Œæ0‡ïÕ-iWZ¬®G—c¬æ€VŽHÃ=¡tDþ!¶ú”Ú[_#‚·ð¾3 ¥NY0¶ ?Æ!oï¯h�ˆ° #@ cBñ:FާȃNfƒ²Õ‡V*º¾Qô BTvÐÿó‡Ù¥„ v(7�J+ ™€s’ˆñK-&Ìf &‘!'߈|ˆ†R¬æ1QT`¤ŒÖyŒ:¥dŸ�QRQ 0’ÝÃÉp$2c‘�4M?õ×ÖŸöÌžîÏ~Ë�¿¤ùUÔ20OæœÒaµ+´Ãú(:-Š„_�”¿¿Sô€4Ñ}ãÂïŸ�­#@«vúDZ8€ÞõíoýC*DŽRÉ(ýÍçÆ Ø fþbÔvÒo߬X¶Sõ¿7¦ô£ûÏb°Í 0b�ãß=¦ç:’Á%JÔÞœ�óÔSO'Íe†¡+àî™gžÉ-€ Ï‘#—K‡G�¤’Â]žaMO G™#ô§?ý)�þ¾FŒ1† àú¬³ÿœ'$ ZíD[FÒ"iÀ^5Ñ´ýŒ ¿�"˜îÿÊ—¾üÕ•u38B¢ëœWÅ�ÕTÀsÅñ»F„Ïá5¼MŽ0î9†Ö͆n4O€:Øj9Xt6ÙŒõÛn¿5ŒòU›Ïrh:veýνòÊËŒLÊ úÕáÙ3ý¥K_£yåWãê­u:¯EFÑwF„µ¼€ýåÜsr«0ÀHfÛ@Ðÿ�Œ€Ë2|9šcÆ ,`Ä Œ9ßkQ@©½yDÈ �8¬EŸ·_Û—ßÉ{Îà\€ ¿üç”÷jáÀ¯ÅÕãÖš5éÙä”S«Ø¹=5™E¶1‘ß0÷¶·þF hAΰ§…ík;~¸9@$ëw·ÝvÏÀ‚ ]«Ñ%xSG攵nÐj¿Èøa{Ðmh~ü ÇæõlœM7�ЬkÖÉV?ŠYL›–2~›3Wn²—ÉuëÁ®Û±ú¼a“LO8á¸Ì8f{z¶gäµ·bÌ 0J:Æ|Ù®VèÔèÛ}±ÐõÃB'Ó§|‚Ežc›8qÛfÿX_dZýN:éÄ\Ooüí�¬WØDkÛî¬ï×"�Xþv›ÓÞW¿—ùñ;ûÞ§ÝÆô½f]Ô\굡 ³ØßúdÎìØP�°]t±´ú;Nk {Ã㥿úÈFÕßö†:¡}F×[×Ö‡µ�ïdì-½ÌÒ!žío=“Á26³î>d‹mÌð Íjú¨€Ñæø½Vôú,¡Xá}¡¨-âo¨[µjJØâ#*#AýsÂj´·–`êÛ–4B|úôV†‘¬ÂWª&�GñSä�0 ²$",£ª­0¶Œ‹£�þmn'úäA§€R—`Ô.@ýîy)¡Ê!þÿþSx¹¶{ªiö?¶¸Ø/-› ¤6ƒ¢ÖjPÔ„±¢Ã€¤’"êôÇ}Sþ”’‚ÄóÐ_úÔí27Ç\‰€” #@Ö!‡ô?èÌ+°€³CqD[$ ˜Ž±D/nOùíþìpÓÚ*ðóØ£ˆ÷?°W‘¹ÖŠÜ—û �l†žãÝÓ‰ K‡¡ƒ‡O Ã]žîù4pöˆ-LÒl�<@#­õÞ·2|÷µ¯}=Á*üã”ÃÒð@àÀ âHy?ã·“~ãA¤ÚHîg4}û[­ 'QõöH’÷»¶Ì @”bÆû·%mý¨aÅà91šZ n€ªì1i÷™!4{Ï~c¡«-€Ò¾W G�aþH¤_ŸvÚ)9Néó [Âȉö¦ŽЇá ™-}Œ;2û8Øj ž']á`‰ ¢‡ŽÁÊ©Œ¢¸¯fÑo5ú’aTjPqˆœjBÆrh,z(sH‘V à.;ÂZκڂqSœ65óÅ™iÜŽ §Õ–N¬â¸À"Ù$ Я=vlóoÿú?R®â-™ ?üá÷C޽‘Åa äia(“ÇøÆ4�’ÆØL:—-ƒŒ;2ÖšüüaQÛ&µvƒ™|&«õÿG?úϬy0Î’?ŒäNèÂÔŠƒñ&À9Àüê4¨95ë¨Óypv'�€C¬¿‘ójé"íMÀ(ÖÛ_þF!oF€s2¤Sú{O»üŸÓ †·É@Ñ`ÅJû[Ã:€‘ç~?ŠÅZ7l½ä2p¸½ydkõÊ‘e@”-Cí×õõwò__vÙ¥Íýä¿B‡¼–5¨ð%º’¹Ý™æð9Ì€|�á @±e~ü“¥œ¢WÔ<“ÅÚÝ12N§ƒÝyçY?q̘5ÓÞ°ýN+€‘º|j“pÆÑ£è§¼hÿ!£€^NÙ$¯�âl�µBo|(¶†±Çô¥dÀ8\á´¨q'³ìŽÛoOžwrÝV[m@Ïv©ŸÎŽ­exœ¬Y?ôÄW¾òµ,zk%³cj8ஓQC¾;¼Dp/”ñË:žÙh E-(úÑiy29ÖˆúŒd–Ì?ú˜ßƼ½Þ|<2w›lw²%^ ‚ClK�÷öÔœ*'»HàÒ�Ý·8÷0Â7hê';R&*;÷Ù°9ìH[À qã�' R4ÎÉqk­µvM¢o€�Ûo»-#Ÿ"ôÆû�‘± ^K'€‘þ &�‹8;;ä=ýë±eDàÀZõ~íùZ§ˆ‘óŽýö·YOÈNè"]_+Æ`ñk©y–/kûÌ˼ÒOóÙFÃî”þýŒ&ß09œò`ä´ªîþþéOœÀÇ®»ížò–¾´=é´ÓOË(ù`F¶ÿú7¿Î#��îãcÍmAÙÂí­ÈyŽÙRä|¹줥º†lú�ÿüaŽÛédcã‰f‡h­Œ×ÇÒ69ò¨#³¶Gœ£0 ±ODÖ7Ù(N’Œ-�h[êꔾ%Àû½¡“d%Ð?{䜖\~ 0z"¶ÍŒ�vxÅ;Ñô_Ö½†&¡ä²~`Ô‘ç€Fº»Ø¯÷ÜÓ²ÕŠa»VÔ’QC2�äoN=õ”t>é* H;PYp`5e¹ Ìy€EœmïÔ<ã�ÙYZ¿ ûLÿž �î�ö„g¨q„Ÿd¤ðÑ�e€_‘oì5ùlE|ñ…ž·x9™oDÌ;¡eo¼ÝÁí+`D7¢)Ù¿èb‹¦�iÞÕfÒväø²%s±øßøñƒ2ød¼ÅÑ_¿ÛöÜS+µ!e¼°Ÿ êé<ùÄ“Q×q…¬ÇDgâc5žd‹Ê˜tÝ*d½,*2_Ý'à§À=Oï’ïÖYiÇÁE†’@ Î}­ë¼­[EžÏ 0²þr><R;¨†í·`øMv?ÈtyíµWóP ëÍÉ�øPŒÇ|+3À{)À.€‘-‰Æïoæo³àßÌž�É÷¶Îöã?ú Īê/`džed™ÇKbË© µÏÅV-uSѲ“q–-†ýèb^Ú²o:§úãqö Ê8¡1{ð¨TÀرë4_ÿê7’ð—ûðà5×^õã‚׊ék%P¤TÈÚc[™lø¿¶¡O� ÍaŽ-PQãW4šJÊ1€³f͌¸‘Ò»x82,Æ,†ø7è_À(‹ÛÝ3%O=øÊ—¿šN�¾ùûgžžaLÑ+&Ìñ1V=B`‹”0~[h¤ÙrLEߤÖìŒu׋ìPd?ûùOsï8Ee/û–q²as{82+Dà(v€cŒsÂá·E‡Á°{ÎÑ`T¸N6û¯�s¢v =JŽñóãÿWFË ý=Vè—ípü"†ÉŠ+¬”Ù”�TëÉaÈØ÷ œúÔ§>cÚ$Œ¥3r LJ¿9÷�7Þtž2ŒZcËÔø~ЇQ¥Pmn Dæ“bÌ@‘ËÏ„£Hõ}ذ…òç‚!´ßm>œ£ã1Æ~øID~)!‘7€]äÖüt(k<Èø\døð?z¢ÑL{ y€‚�ñ™l÷1ÖÇÊ3f(yQÒNú­„±sܽV¨]PdÆI#¶TZ©˜Ã°šÆ‡¯[KOcd¸pð¬c×Sì![8ô;’`„6Ë/¿\ž¶aŒ/õÊÚ`X¿6뵌 ¡‘“ÚžxÂQ©±•)U`�(¿Z›„“7" Qï$ÔPP[Œá(ª+ZÞÀxL¦oÈ…Q£V�½ò‡fj½þ+Kž\‘Ô#Ž:"�ÌF±¶û¾c�ž}ÎYé¨fô9x¶lÉ6ÑrNã?r¢¾ÿý諒wÔ„àXÚ~¡V zM gF½&ÛŒô]ñÞˆ-� ÖN# ö`Ò¹åÐü5ÇÞ2älá@Çâ(7£Ñ<_~ùe±uàŒt¤Ú#|Ð ]Êèt¤‘_� =µ"g:�W„vyÁ±íO†‘5 ,¡‡;¡_#Qzstíu×ĺº"�ù/öÅ̰$/¬WºàÝŒl5’¡f;ù"î}+’y"óÈxòH_eD´2 [sË!³}Üuø˜¬šÓ¼wç šcµÕ5[e•QùþøË9…MŸžvˆbÌô„�m¼l²H‘][~ìŒ�wÚ9z}@³SÈ[§ q¼d}È\¦ÓÈ7M¡Z¹¬OÁ [i5ÆZæ¨{ßâÿh{gȾ b ‰ Y«„ý¶÷^ûd Dv)‰ö%è# 0iÒ%à�}Å9v Û_ɤ:!Žç&SýŸMxPÔ”-jž;Øh䥱»f§wN;TÖKìÈ|k«å´>ž È\+¦-à#�9.ä°­K2@¬çãŽ?6H³@Ö4d'9Ù x0­¯€=+k Ï.c[a…åSÓä*äøè'€…�ÌNS<»d²÷·¯9ô¦µN÷ ´7À“¬%´7—c‚&[G6yüaïÈ{>Ë +®˜:{Ù@è7zü—Q"À¼Tƒï»¬Ó £Ò7ë‰Mf±ÓØ]ê^±gÿ[Ùñþ¾ûî—v¿µµlÐO#ÜËÖ}"ìt6´Ì_|wN¬S@^³F[‡ztå}åŸr?=(p¦Ö/PœlaWõÔ\ç�2ÅøæßÉÈÃÏ+ÝÔö‘iX‚“žÓé8Kð¿:Žê�‘'xÆ!ë¬tjoe|�Ðǽl4%Ÿ�Pt}d׋5÷©ä ®iøü¶ÛZA™s¯ÏØj‰·”õX1ÀËV[ åàŸ|$Ojz¨€Q/sj�Q³ò˜åÖ¦.§`-ä…ÂYL¥ßK×þîO0r…¢¶Œ¤O‡£Àq¶x9wRZï»÷¾f©÷-•§7H)´õÊ8�,3R°?�;!Éà%ðí·÷œ ^}µÕf+éÖÉ”™â’„,�A$­Q ©¿]�ŽÖäŒÌ)Võ¸% -Ç\‹ÌQN›n:!�‡gˆˆÈ‚¢Ì–\*N3ûð[§7ˆ„{Ü1ét=ˆùªaI¡]? uBöŇl Ʀ>a–-AHJue\KÍL9E‰"'à8éNÝâs궈‚ƒó²%�ð§¤Fý¡£’Â(€ÃŒá hátÆŽyc˜2Æô�B¤ý>l>Ôø¬TøÕ|©�°óN»¤Ao扳iÜj°Èsܲýúæô¦HU 1&cîèà™“NþCnE²Uk‹-"æ²Ýœ©× {` Å'Ç5ø—“qÝuצ³xúì!‡f골¾8þøcÓhëO¿a?òD†v>²ŽÆFßôsìØurÞ8 Qkÿr8üÄ�™CÆH?ïüsÓAy4ÒÏñ5ºà_ý—RŬmѨÙò�'­§�ä¬;ôë“íRßO�-  ¹·W8[Åz¶~î ?}T4Õññ3»j©°ÅèÇs“ç¬ = à,ÅŒWíš{B_²Eè6�Ààpxd´jd0�Åû9ÍÀ¥_Åa&÷M�Ën•}âý¶Ð €FÖýçc+ÒöÛµ¶Î²¢õ0š2宼ž‘A[½V_m�Üú=ºkt0Ž'F†‘Œ˜UƒÆ¶Ní·ïþistÒO²xÑ]žÎíϹ+‚C¶xÓM²�­¯wÜ1ëR †MŸ>½9#ŠHßzÛ-Éó2dmU—� t°ÅH P·S¢ÛÍÉðNk•¾%ö�@�|ßÔûr‹£\êÀ>§qñÚ ðKðÎ}€ŒûÂÝ|Ë-É£ûï÷‘ô#ðVYgå½îŠàÓ .º ‹ÖÓmkÙŲº{jh�†dÍ#!ÜOvÉèÂc‚‹Þ«6ž%Ÿ´NÇYú`^Ù†‚S¼YzéeÞ´‡ùÞÕÞ:¥�Hæ²Ùð„í~~’Íl^³æðkÖ Þõ{õÔSÿ˜v!ûR �5ô°'C4ÁkâúÌ~ Ojz¨€Ñ™Ó1’ ÂK„3¾{8\ŒÂB±ãËc_:ga£pz8FR°»"bNý5eOѸ€õ-¤kr(í½¥lƬ9&·œ‰P0 )œßãT©éiPZ]¡<ýíÎ8±L¶ƒÏj«¯[qKcIt�ð9ñÄC Ü”Ù[@ÊΩ �g=¬w¶8=Œ:F ‡—që­·…Q²`³I@]¤(ˆøR(àðDD‹¢Ð‚]”�Czþç¥R’–mŸ|‘Fd…QJ™0òºb hJÙ>¿²5@VšyŸ6uZ¤m/Æèæ™¶®0¢(Ô}áè›s¢èòAÔ0È÷×Mžœ�ˆóG#ˆ#Ì ²üqi`0v;ì°CÒ…’¼ôÒÈ„ûÅÏ’§€$ÀÏqñA7YL ™/‡!Ì™�žýÑÈTiAgüÝI¿E“ä´í 7(Å80O“Ì £Øi<öû³µ³îºëåžy ¿¸ÈÌcÐ/| F„ ã€º?ÒÿÑ Ö•Z§Ép¢ˆì¾i>±žÕkÁ›ÆÖ—¦F]è•ùHèu@�LÛ“´WŸ{>åÇRþ @UÉeò’N‘‘|Á„ýðr~OÖ²CÜK'òÙ^27ød•‚Ýî×8º§œzJ‚áÖ&}c›Òú!×2C&_Öö�õë4*6œÂÞ¶E“kkE Â \‚ Ú°a ¥­4*êG ÚfÅ~’i«–½$(a[át+@Zâ˜\4� x¾,ô¬LvÛ¤V^y¥1ÜßÝQÇŸú#ÛÓ½Ó?œtb–xíµWR¯Q†¹`'Z?¾ŒVö :[#Ýê6ôë×¾F€°³# ˆU†�ÞڪȎ¦/€_€9øÄÐÓÝŸèkçd°'ÉÿooÁÿŠŒûb��]ôå®»îš`ÞðòàO·ô®l?޼`ùÉ^�YD¿mÔ””9‚ÆÖJ{jØ/ˆ+¸Å.ùòWbC¬•žzN�Ûœbý¢‰Ÿ÷ÇZWâƒ�*sÙ–yÛcéâ¢�ÙÍ@â’ÝC>àÇÖ¶¶WÒ^pê1»?’3í��d‚sìïœòÝ;‡=dꩱûeqñ9Œ�þ’}°Ä§äÚðGÚ[§ã,Ï ãʵ~d2xà'“®äLw{¾Sú”L(„l<²íɰɨ‰2ü°Û®»ç8ùŒhË”¡êIóþò˯ä@.¿iÁßš7»ldܱoè 뺶¡G�  ‘9-€QÉ0bÐpô°e\¾‚Øw„�-9­Ìƒ–`€è_`Ä1±‡œÐ$\ZG3Òа­FºëâáÜ;nÛi”¹,Š@æ’íO‡ÃéÞÖµ‹§ÑÄYg8ŽZuT*z€'6œ0f� Œ`À /àV«p¢hVW×è>NkZk­Ö^YJ¸uKD.žtq>{fMúú¬×³`"çHñ\Ñ/÷1‚/åÈ ‘Á¤.À‰Òû'"./¦ÒgÀ0nç0Bc”‰Ñ/ú„Q<&èS"'ŽòF?Ž�”PûŒ½N˜"¤×Œ,§bÒœ>NÂüÜðÕcY–rI tB/'wø'ì‡T`€ º±1Ø/™tIFMñ Å­˜¹ˆ´ìÑ(€Œùu[e••“ßdQ|Œ\€Ñ“aŒØ{�¾Þ Ș5+ ±ˆ(ã= [­��èÁã |¼ƒï:é7Þc Qô2]rÜqìû=¡°�Û»Õj7v†'‡EYkËZ+“¸ÐÚbÀX5ÿ¢æû~x¿¶c�óCÉ3ð\/ m}8,ÒÒ"è²SPŒ)<Ãð&A2ð-CO&’ñû;ã…,å·®Ìxµ/€‘9`\q`ÏŒí]SîŒ>½‘Ǻ24D«÷« å2v£Öa#4e0Ú”‘ý0‰€ )ðÅ@-k„1ê” š¬GEá9"€ÌEÃe8-»ìÈÌ68“Ÿó‘}ƒIgÁ†àma€¢7�Q”Z[00òm…å[[)ð‡-9x¢0vB— 6¿v7¤Ë|–Ÿ�Îë¼F¶# ýçqšh ä 9C.rlŒCF'ñÝŒ8œd=p\€X,‹�H YôFÈ=ëkÕÕVM0Sd›<áâ_¶=M&‘‹€–¾4ôqd¹ì¡;BÈÎ~˜ 6„G‡}a‹Ë%ª°�6Ø`|:¢äïò±>ÞÖÿ�IÏèÿÌ—RŽêƒµä4EzWP�#®è9'H­ ÈB"·ey<ëMPŒNsìºwF£�8òðØ^6)�fô çÙfl´èë’Q#P¦?‚)øêŽÛïÈÓ,oùAG²m7‘­®05ÞbrÜm«–-vþùçgFµ¬Eÿ·F½ÏÉxÝ×ëøÈÔøøÇ#s)À³#–HÝ@¾²C� ô¹÷ÑYUÙH²;胉'¦m‹Æ%Óc^iØWÀp‘@hô_O  &ÁްYðµíŽô™€“­]ôx{°¿ýôL4ÈOYü¿½±k¾÷ýÏSGÏlµ—A$À‹6Æu_Øìó‹.V|jÞ^žkþ�‡ìd€{Êÿ»1ýŒ˜ „dpiÚýa?ÍŒmà#rK÷f6O»…Bï$ýfªØ»€^vˆÂàô0š6‘`wŸ€”1ËÆÿ=øPßÖM ­U›il;ùÞü]€`)g{<;iäÈåÒ�¬æO²»g´u:Îòâ{»qʦþÊÜ:½ÙN ÙõÝß×)}ØlXrèø�OY�7º««q*ß&Q†°I÷?ùKæàð#~“²˜ ׯ#dö`4{ x^ :¶Ú¼lÁ,t©?çO TÀhþœ—~÷ªFœf™¿…r¡´8‘ B™ãÃÁ„´Kf¬¸œ,ŽÅI!0e9ôÖdìºëî™ÙÀ–™qÅqòZdˆÂ?ÿ_ žIé~¡OØ:ÆU*#£–ÓòÄ32£à²¸Ÿaùì3Ïdm€(˜IEh9·„”Fhé/A-’ÃP~0"‰N·l…åÂØcк=ƒ…bd4‰@ôo À Ú΀¥È÷ CŠàÓlú`Ôˆ¡ÔŽ"–yŽ�-èKxR€-àféTî ÕNèS"€E2œE:Þ@c}³æš9Ÿ…®å¾û8|Éð1‡æO6Üí1¢9je9kᘧVmª±±Ÿ~›ÜJ$ ¯ØÞ'ó¥E88h­™Æ›( ƒ•¡úá8öSD¸0rz–Óñ€€÷¼2~\&œˆVáÇxo¬NCI­í´ß”¯Æ@k�û�¶.Ïq?ôÐôt¢Ì%e™ˆL{¯t{?ñR1´ì|u?P…!o‹¨âÑæŸ[¢†ø„ÑXB[Ǩ2°­ c”9eÛÞ¨Q£R6£ PÀÀ´= xüàC$ÿs²ôÏûÖ ƒMŸ9%Ã�;¦>Œ¹Þú¹‡Ázée“�R¯IFàK„^F ƒD´Ïz•­hŽû÷Ï9½«Ì°Ä©q¢gk­µv:¤Aãmoh*š‰omSC>¼´ÂN‘s½"þEÏ$‡]e„¢5‡ŠÃ„›sn ²ñ6KÖ0¡¼°è\ƆçsÛRÈU:�~à옃EƒÆcFÑ&OÎj.Ž¢žèmK �ß['tá8kï¿–ñvÿÙé¼Ú¦ p¤O�­ -´pÖhÉl‡˜Çâ Øº”²N® 9²T8ã2dÊéXóJÿ²î»�«üŸ<ñ¡ÏÌŸÚ @AÛ½7ÇQTœó/Z~êi§¤ì%§K�€ò—cNïqü0£q.Üë¹çžw^:ôÉ|n郟¶êÚ²ùdÈ [‰d Ò¹|Í:°Flµ�ÛtðÐÀÚwoÉl°�zE¿“s€$[ÈúÒŠƒ¤Æ »Bÿö‚Kd�÷� ‚OÇEfª"ù‚h9¶ h‚œHý·Må‘Ùý-sÞÕÕ j‘Eï·÷¯d:‘Ç€[™22F×ûXÈÍ>ާý™}ù�½prÔVB{6ËkáöÔØX2U`8ãšCd&¹ß¶ŋɸ¥|a¿è):Ç0æd5×›;:§·†½Ï{FT™%è$^‰€gâç ÐY¶zu…ƒKF d+[¿¬û "–3¼ûî»GvÕÆpdOhä¢úWøÞxï¼óŽà«-¾ŠŒ‹¥" ÂvÕÏí¶Û.é|@Û`4�Ócã�A46¯›Œ¯²Ž­cL\vÙ¥™ÉŒ Òé@6{@¦”õh}ø´7v’^0/æÀÍuƒ�{jt½#s h‹žú${ èGÒ9X-ÏàOä± ñ�™ï@.Û€ßz ËýæÇVrà£À”±Z—èb>Ⱦžšq�vÚiiWÉœá+yʶ±«;M<§Óq–>”À†yîpÔ¦Ô_AÍîz SúÐûdº@ q €Øk¯¾–4C‚D£žš»Œ‰cqð'N�ï:ÆZ'ôÑgMÿ² ð³Ï¥ñ*#€%åÙ¶$ó Ÿœyt-÷åÍóá?æÀ§E—éÈØNá¸X…å�xŒ1ΘÁC .5±Ì›û4@(@§D`ŠBä(ŠÂàƒQ•R”Þw—^ÚÚ’¶`ðæ7¾ñ­ˆ¦lœß£¥mŒ¾Ç+ï þäL”÷â ­Ó~ëGiž�oe9é“ß9Ö P3ÞŒÅû Þo.‹A…ŒQÖÖ�uåõ¤y»Þ@#FíÓ±…ŒÃôbÜã~`@•sk–­í†�õìžÏ0ôÏs úXKÍ.@n‹£�¡a½õÖ ýŒ¹µþ¢f¼ÃûÌÆ¡?² ÑÄwÞ'›-¼§/­¼ÇÚ¶VÍmÎkB² ¬‘ö†¦Æ°NÉ?t5^|èý²cêòrÌxõ ­ÑˆÑèï¶þ¡«93€MyVޝíýƒEç2¶”A[ÎB‘¯dŸ>“w€…¬çH/üÇ ×ÿv>ê/] `ýNñko÷Ÿ�Î+^q/}ì“1LA?œ.< üC³ö­>óJÿ²î»�«ýÿEžØÚ™Ù/ Åú|FàQzÑ8ló¡#Ì^Ô üK/EæHð«ïØe}pàÝKNM€žœ­îë¼l�ÃÏÖŠ-ý,ëÕ:°FÐɵd‹"¶NGT©Qè½êÛ´¯sàÌŸÏúS:�ôÜ:k¯“5Í8·}i™1Ûq¼ÓVgãjeÖ�Ç ä˜mM»1"Ú9€ë}öÞ'ƒíÀ•þ³Ml‡*…iß\ÓagPКŒ “ðA{CgvÍó±õ�ókì³BÞ[Yú{0zOŸþPÒ/Z÷=56 …¿GÐQÖ¯1rNeD™?[†ÙtˆkÌ=÷ ×;y’ñø¡·æ£ÈË¿÷ãeüÖ’W3â�¡ƒn¾çˆÒ9ËŽ\6ùÄ;»Ó¹·wõåoøÝ¬{ {ζ9tñþ¢ÇÑÑœ¾|åð:ÐïE‡ËÚp ž _—X}ï0ëÓÖK�E¼Li_ÇúklÙߊH‡ýzÀél2¸d…àEA:v�5Rd\;ÝŠÞf¼6± Á¶yO 0KÏãCóm½+ú¨ä ¾éþ.`*x.ì]}Ek¾¹Ì>(s?'ùXæÇúæ��+KÏæWïí©•õBè—^ê4 ÙÔ¸)ÏètœoÝß*]A6°YØì²�wg§ô)|@–Ù. ´'£ùJÖà’!·Û3‹þ²öÝÌIo�½Æ†å¯µO½ÝSÿöÞ£@ŒÞ{sÖc� `tÕ5W%À!*ÿ­pŒEÕ9ÛÚ`F:Š &h(B—Àó³/Í}„¡m9EPzNw…ÒýY ï.×Sîs{ï‘1@Åíoö³§wµ¢ôQ/¢ƒ“"3‚r×;Õ'8ô�C3;ªýºy¥�g«>3b=O=#pJenãmïËüô»1ù0jŒ [|:0Å@Óð ‡nÒ¤KrK%éÔ£í·ß!çÝ»´èç{çµßå~|/Ëø[ë¥oãv?ÐÌ}O¼ëo¹®Â`s}YW½]ïžö¦oiðÅ—)?Êzð³¬�¾¬Ûö¾ ôïh„ÛÇ«Os¢í@¾°è\úø¦|�/‰úPdF_Ç5ty§øµŒ·ýç@ô¿ýy�ü>/ôïËûŒÑG+óZ~öåþwêë‹þÒÈ“9­/=¡�é"»hýõÇe†AÉœ˜[e6É�ô3Dk]²'8袜Jõ“ 'üÄA¹�OFp­§f B—twèzº§ý»¾®ƒö{ÞÍßõטÉi?鎖žê›]×ißç•Î�¾·¿÷é'»}† sΰùÚ{Ëî�ísm}hYÑ]õõù�Þ×}Þ ¿ú¾/öq§ïíô¾Nû;/ïso{ë뜴ßSÿïM�  ‘ùï0úæ·3�—’Ð3ÒQYJ„Qùô…Äî#äµr__ZywyO¹¿ü¿§Ÿ­{ì ïÝá8�¤¢‹ ô=µòN'Sl¼ñ[)íåÚÒG?µr}_ÇXžÓ®‹ã_žU®y¯ý,´16c)ãˆqÌ 0R@•áë}�¾w^û]î÷3ºŸ9?=ÑÂ}Zo<äãó³Ðµ·ë»¿§uÿÀËÏ-Ÿ2ýêOߺ÷u þ�V>zù¼m°è\úÞzþ[ãê/�‚.ú õöîÒO?;á×2Þî?¢ÿÝŸÙŸÿ—q¹§Œ«?÷÷åھз/ÏÌkô‘“­õ¶¾n¾ù¦<,BM1Åýef̎쩾´R;ÈslwÇy²­e}p eØÊ®ÖŽ(ºmt£M7��ÙtCOm æñ½0Oíc×ßò)2º·5Ü~o§¿�;}wîkï'Ò-åÛ`Ó§?}l¿¶5�-»w°çÒ»´þÒ¢Óûþ~œo½¿/}èô½�Þ×iâ}í﮿W ô•0ê+¥æóë¦Nmíù¿é¦›²ÎËèÑ£›C>óÙ,J8Ÿw}¾îãVÆà!S­#µN-L…L}oO žÓµõûw†­-Ïf½¢ßGQwŽÀ¿ø¥¬'óNDJß™QÖ·T T T  ¨æô7ÛEwÝm÷¬Aì™Ó–’î#/ È ºþúÉ ­u‰lOTÙæ)ͶÊ�ß`Ã, ”,@¯{ëÿ+****Þ+¨€Ñ{e¦æÒO§#©²¯˜™½äêí´ÓÎÍè®Ñs¹³þ¹7 @óE§GÒéýÞ[½ì$U½·gÖ¿uNéâ€>u½m´oßé%êTô%U¹ó7×;+***:¡€ãÀ/ŒÓ =v|»´e [Bô @IDAT_ž'È£¾Ëñ¥M=$E�Õáð=n+œº$Tðlu7VŠì`µRú’�З>Ôk*****† *`4Df’1ä”… –Tœ¶ý´’!2Ì:ŒJ�~QЧæ„h2ÐHôxýõ׋‚Ù+ÔHr¿(Y/®¨¨xg(0# y;ÊÛ¦'»v:rØBŠ+Ümû;éõ×£ð{'¶½Íih«¯ŧ»5gFYßR)P)P)P)P)ðÞ @ŒÞó4×^Ê~±mŠsìw§¥´ŸV2×Ô *† J†˜È2g�Óá„ÑêN�!H¢:¤J�J�J�ùŠäµSƒF䵓ý:i¥Èö+¯¼œ…®/O'8ÑG&°,#ÛÜJ=»NÞQ難¨¨¨ê¨€ÑPŸá:¾J�J�J�J�J�J�J�J�J�J�J�J�J�J�J�~R Fý$X½¼R R R R R R R R R R R R R R R`¨S FC}†ëø***************úI� õ“`õòJ�J�J�J�J�J�J�J�J�J�J�J�J�J�J�¡N�  õ®ã«¨¨¨¨¨¨¨¨¨¨¨¨¨¨è'*`ÔO‚ÕË+**************†:*`4Ôg¸Ž¯R R R R R R R R R R R R R R R Ÿ¨€Q? V/¯¨¨¨¨¨¨¨¨¨¨¨¨¨¨ê¨€ÑPŸá:¾J�J�J�J�J�J�J�J�J�J�J�J�J�J�J�~R Fý$X½¼R R R R R R R R R R R R R R R`¨S FC}†ëø***************úI� õ“`õòJ�J�J�J�J�J�J�J�J�J�J�J�J�J�J�¡N�  õ®ã«¨¨¨¨¨¨¨¨¨¨¨¨¨¨è'*`ÔO‚ÕË+**************†:*`4Ôg¸Ž¯R R R R R R R R R R R R R R R Ÿ¨€Q? V/¯¨¨¨¨¨¨¨¨¨¨¨¨¨¨ê¨€ÑPŸá:¾J�J�J�J�J�J�J�J�J�J�J�J�J�J�J�~R Fý$X½¼R R R R R R R R R R R R R R R`¨S FC}†çq|³fÍj^yå•ÆÏ¿ýíoÍB -Ô,ºè¢ùs=änG´zá…blkFŒX¢>|x³À ägÈ ø=8 7Þx#yùÕW_͹ZpÁcžF4‹,²È{p4�wùµ×^kfΜټþúëÍ /üægذa�?´íNô}þùçô&/Ð×{л¶J�J�J�ÿŽ É^òñå—_nÈÛ%–X¢ßú‡�A¾²9è/vÙÊÖJmnúz^õ ýWìÛ×ßx½YhØBÍb‹-VíÛ¡ÄDu,••B�  ‡îC^|ñÅæñÇK„òfœ¬´ÒÊiä ÝQ÷d 7ÆÇO>ÑÜ{Ï=iÈ­¹æšÍÈ‘ËUG¹ÿä´;Š�ùÌ3O_ÏHC}̘1Í2Ë,3hïœüì³Ï6>ø@:-K-õ¾æ}ï{_³ôÒK'¸3ý}òÉ'›»ï¹;�ñ•C^Œ9²YrÉ%Ó±ˆç×gT T T ¼×(œxî¹çš'Ÿz²yü±ÇS®½öÚͲË.Ûç¡°5È×)SîJ›£«kt³ÜrËå³ ðïsgù¹éëyÕ3‚&O<ñD‚o¯¼úJ³øâ‹7£V•ºj�‡V_)P)P)ðž¢@ŒÞSÓõÎw–2½ë®;ù~<�†É¸q4+¬°Â;ß™wñ�¢‚/½ôRÒ@$O¦•¨žŸZ‰Þ{ß½ÍE]˜€ÑÛïЬ¹æZ5#뜷40_he¶,¶èb ™£’Ù}ì±Ç,™2eJ3b‰ÍvÛm߬±úï`/ßýWýõ¯m®½öšp´òÊ+7£F­Ú¬¶Új õÖ;Îʉ}å•W´Ñ!/™tîuÍ´iÓšK&]@óóÍ:ë¬Ût­Ñ•ïÕV)0T)Зõ1TÇ>”Æ57=ÒéXeýõá¿6<0­¹÷Þ{˜`'¬ò±¯ �±3Î;ïÜÌVÚf›‰ÍZagt’©Ô×w¾[×õ¦¯BÏ<õÔS9�>úhó‹/$p·ñFGPt¥wkÈõ½•••ó%*`4_NËüÓ©x ¹ô²K›©SïÏ­<ë�wÞ¥=zôüÓÉw '¢‚œì™3_ŒŒ¡Eš%—Z²Yaù2ãÊëËÖ=NøGžÒ§?}H³Åæ[ ICî yG¯¹½'2¼ü«"³ÅÖÀ²åìé§Ÿnî»ÿ¾æ–›on®¸òòÈ,Z¶9øàO5m¸QGï{¯Þtç�w6§œvJD¹kÖ^kíf½õÖkÆ�ß°YqÅ{Ò믷¶¨’§(ˆ»öØŒpPŽ!Ë-·4ÇlFÂ7ß|ófÃñp´N^×ë ê+ÞØÛúj[†ÞÃSÕk×ç¦Gz½¹—?Θ1£¹ãÎ;š[o½¥¹ñ¦›å—[¾9ðÀƒšñŒïÓv2²ÕçÚë®m~ñ‹Ÿ7/½üRsàÇl6;ƒ®³�j(µ9éë CW „ž™>}zsÍ5W'÷TØ«ŽÕìùþ=›µB'ÖV)P)P)P)ð*`ô-êo=PàÞ{ïiÎùË9ÍÝwß�Ñ,‘¬½÷Þ'�¿.²_=úè#ià=ùÄ“Íb‹/–ÛòÒŽ-gZÉ@št餿‡?ü~ózlßûæ×¿Ùì°ÃŽÍRK-•C–8óÑÀ›F†—TóñãÇ7£»Æ4Ë/¿ü›À ãÎȘ»&€½ Î?/Œ¯}íÍ–[l9�bð»rS8+¿ýÝÑÍÂŽ7®UåtŒ ƒ¹·ˆ“5$:~Å•WD†ÝÂÍ®»ìöZY�ƒCÌ�·]âŒ3Ïhž #|ƒ0î×�,#[4ÿ»mýë�–õoC�s[Tz#Z#š›ét´ˆ"�ö¶¢í³Ï‡šuÆ®Ó/ÀhRdoþïÿï§žûÒ¾”vF»žë´óÛ}sÒ×q¡g¦N›Ú\|ñÅÍwÜžåFÇö¾�|ä£Í¸õÇÍo¤¨ý©¨¨xW)P£w•üóÿË+`Ôš£{gçœ[™LHjÛ‰Û6«¯¾z^P£ùƒ—o¸áúÈð:¢Q£h—]vk6ÝtÓ�Fg}=œ“Z£¾F/½43³†®½öÚæ„OH ôó‡}¾Ù"7E­ÕÐ`ÈÛzñðÃ7¯¾öjns[jÉ¥´+™^ó·Ô^T ,ú²>ö�õiƒA�¹é‘NßY¶º‘�ÏGÖ2y¸J?jæ�­>ÿÝ#úz ôLŒ:åäz_¥@¥À7 TÀhˆÌ¸¨ÿ#�<[£^ϨU)0[Š Ê¸˜ñÄŒ,r«¦Ëˆ(î·ôÒ˼Yä–cg¿øÌg63Ã)\$œ?+N_{†Ñª«®š5_VŽ=ÞÏÇi`€’#«ÀIH ç.ŽaO{é]çùN{îùç²Ьøn�ØÒ²XÜ«¿¶):¨Ï%ëzÙ=¯¾úZ5êŸ,�Î(Üñå]«­¶ú›µWœ<ò̳Ïä53ã}®aX,ãY|±Ås+™,õmú²=àŨ׮æÍͱ…é/çþ¥yè¡ó�£G�i¶Ür«Œ ÚÆ#Ü/»ü²Ì0òû—¿üÕf„ ÍkÑ÷ׂ¾¾óÎá1Þ¥b¼êA�ˆíRÆZú¢¯ê!™/éØÏϦ•‚ÚÃbÞŽVKD–LšõÕ/ô7>avfŸ=÷Ùgži^ŽbœÎWAÿe—™?õIÊûSO>Õ¼[ñ^�“òÌÍbAÇ¥Þ·T³\dW¹¾ôÝRÊSG¢x¤w<û̳ñó…|ößbL÷škóÖ~:Y÷þ9eγ_ý�¨³3»h7|x³äì±{Žñ«©óÜs-þ¿2²^Ž=þ÷Y›gûívh6ŠÌ™®®®fµà[µz^~ù•·eáÙC=¬Y?¶d=tP§ê�xçB [##îkª¿ùóy9èfþôË\šßçæü/•[Œ±}þ ¿£‡bÔhkmÏŒ~)˜j­-÷,|cðtjÐ_óãh½ÿ¹xÿ‹ñþYñ¬¦Y4øt™X÷¶å�|òI�-}É0ÒÏTË쾨Ÿ!»è´ÓNm¾Hó©O~:£-’Vd záëæµY¯5ï‹q˜o4ԷƒƒÍ‡Ö¾w<óZø0:}žskî—ˆVÃcM•Zd- Îýß·Ë™™�‚©oĘŒõAZßÖшæwØ›kÄøËú~êé§RN½üÒËͬØê‡ðsÊ©¸_òî|WøãÕä�¥b͆<ÄÁc¯Zà „< :Ëj´Eÿ´ø Öb\SÖðâÁÛæÉr}y~á?}BC<”ký¢�ÖnÒ/ø°ýþB9üî>Ïã»WŸõÇ^"ï_:ŸãÿEOu*<£½á¿N濬ó;lXëD?2Èü�9^ØÅDcã0þ K¿Ö)ëT[žé4ë” ¦�gZS_Å;ÚålûXÛÇ[Æ®¯²YÐþ•�yN€2—ÃsîBv„.m×ÿî³­š¾y4Ö­qâ_2ÃV¼…GðË +¬˜ã/|<�zªŒ¥Sþ1çÆÌ†1nò©è©òl?é5ý~%æ9é’zuÉävÔÜô½ÝÉüáokÕüX·d÷ŠAOëIËyYÀ{z¶|x)úèû…Ùmq;éúŒ|ÿßK�ÐS†QYGÖ_ì­ìDÿ´¯‹Ô#a?áK|ÜÞJQï¢ó¬Ë‘a'¸®¾œ[€ÇøzÒ3EžY· Îèâc]ëZ²¡¬=Ù¶÷O½¿_F…¾æÑ/”1ª Ⱦ²vÉr’|C}ÀwîI› ˆ§¯d¾ë¬/sŒ/´vº÷GÉümoåÝÞÏž@‡YmtXtÑ– &Çf…Î6oÖ?Ù¦u*OK _àE}°îdá Ý8<Þý–¾‘´²&k«¨˜¿(P£ùk>:îÍ=÷ÜÝœuöYihpÞÆŽUWdù4ì<ô�8é²Ë.Kð…¢\#2c6Ùd“ÜZåïOGFÆÔ©S£ã Š,ÎÊöQŒ‘blŒZÍji\ʺáŒQnNBÚ`ƒ šu×]/ 0rFÚ›ë¦EÍKwN¹+êMož{ö¹0¾[÷JÉÞl³Í"cg�ìsQ˜™átÎ9™1âÙ,Ø»ïžÒØ{Îá²EîÿD¼{|*íwn¹9·ÄxŸk(; °ä&LÈ“0às3ÂïÇúü Îo®Ž}î·ß~[fW,5Œ(wĆn[rvË-9ú|ÕÕW%`Ä`úÌ!ŸÍ÷ÜvÛ­IS4¬Ã׋~LŒ %ÀS»Ã¤¯”ëC=ÔL¾~rŽC‘Ì—Ãá(ƨfŒÏÚñáö¥úO‹lóÌ�P蘓rsÐK-J�¶ Læ#ç¯Úã/gL€6 !�A±M5­ÜWèÈPwr‰wÜϽÿþûó”=@&šÙò46æZÝœöÓɺ÷ï�¿½Ñ¬}yù•—³ÎŒ�GJ� oãs¹Ì2K'½¤÷ŸüÅUWFªÿù�ñáËå–_.·\}ðLc»}Kš9ûЇ>œ}»ñÆ›éÁ—¯FAg†[WMRÓmÕZe•UÞcoôf؛ÇcÎõwÝyWóÀCäÖ, Ö)ƒú¾õÖ[g1h}(sáwF'ûÞ:{húC™ŸD|¯ø<¡k1Ü �g®Ÿ<9ëeXÓÒÃãØd“M“>ŠRsLú•^·/_Û.o¼ñ†ì—þ­4²%mõUWoÖ[ýÜÞÇ =7вr@­MÛÑœ>ƒ6Öå`ó!Cz°@ìÂWÖÌè®ÑY³iÍ8!àËìkCã·äÌ”,`ëtDÀðÛ]gÝus­±Æ³×w«8~Yßð<9ægJÈ2 ¼µ$ 7W(|“�7ISÖ–þþŠ£û‚ .ϸ;åË3žHçß�‹yØzëm’®›|]n¹x írTÈEv·Øló|ÞÆïíÏö¹g› ‚¿€#œ)™•j¸ù— úYêˆàCr°ÜŸ‰dø‘¶.*.OÞ[ã5µß¬}u­Ôœ`´Nå€g´·Nçß\ yÈ‘Ñð²`Ë´�içe–]&×ÝúAcãÀ×-ôéëú@3¼0=Öµz4ä™o�™ï¥Ãï Þ¡'6�­¯¬µv^hoù½8²hÍ5פ®Ä«l@ßÈ Ó˜Ð9ž»qð^õÌ®‘�çÅV]Ý[n™²Ÿâo µmØ»D Czz0ôTG§ücͳ…¬/§`Zë'NÌù*ÏöóáGn®ýŠ6èâ:€Ð=â0‹NæÏü :YSwǺ%»w‰-½æD+�»BF¶ôÿÝ|8‚N¡“|Ào²9}÷‹_þ<ù®'À¨¬#ò¢?öVv¢‡¬ ýy4À4zd••[z··V�¦Û›‡|(mJAlja'ÐydOùrn€Ñ}÷Ý×£ž)òß’?>ìÆG"ø8sæKi:�8C×qðyÔ—-i…¾E�[W Z�ãì½7Þø[¡ÈhúÕ{ðÞœ|ýõaÝŸ²Ž>Ò×ÕV]-õ$[ ´Nå‘Àm{CG‡×Ð7j<*ò­¯Þ�ô ÛŽýÈT[kËXÿt‰Ö©<-}(|qgØCæ(Mư[¼›\awvu�~›ý_î¯?+*Þ} TÀèÝŸƒé�(ÉÑQ“äé0x¶Ûn»4[5C–M EÚãO8.e¤Àí?¸W:PÓ”)wåÅÞzF*ÀèöÛoOÅÊa%à d5J9-j�P¶ß~û4€8ƒ`¥ 4#é±ÇKeI 1V)ÓÕÃIRGe½õZF¸(š¿qº�8ü7át?˜F.óèc�¦a'ºÄ1úL—æ€ËD¡ e?pTž §§�QZ8ûȱe@®3vÝ4&‹£2§Ið¼³c+ÚÕQ¸(Ï¢h—ÇGŸ÷ÜsÏt¼Œ°¤†c¯îݬ´büÉ’b” ÀI?vÚi—(¶¼a‚(EÁ3^»wÝuW´œ}§w0N¶²kÁ@!CÓ¼»·ÆYfÈÜtóMÍ 7Ü�Ñ-À °(öx2 ˆeƒîl0>�´~&úÃÈu•¥a>e9™§ìù�ä#F¯¾é£¹ñýw’Ëca˜”Üb‹-–òrA7€WË@èÊ(Útï§yØBÃÂQ à/¢åŒ²Eèa„2ÂvÚq§t|9ðwÞuGsúé§GdøÊxo«èõJ+®ŽÀòá$�l6 �äÃÚ7AT€ÑÕW_cç$¶ÛvûœO Bž–òü ‘ùNÛû–Î÷ì±û9^snœ½54|2ŒTã—m†_LW+%¢üA¿5Ǭ™€,§¼Ýá.ü ò7íŒxcÖÚ:éGËÀkbý4øð„Özÿ“™EØÁ¿¢zh'ªêº1ñn|xë­·æÃÃ6�Ðk #|É¡½ù–›š‹.¾(£²xÿðo�Õ»¢^ÑøtêGýöÈ\§è œv�~tŸç�äCàkòað€÷®�gæ_’{ ê Ã\m¥�7Þ8·…�mÆÓ[#Ë8³w]e!ól-‘hààs§ÂmÀ=À8CæâÓ7×w“o˜œ½õ¡Ï  *ûpɘs²{âÄmCN�M�Ó3µvþëT† c|F8øŽão}r|8j2Êî¼óŽ|�5.ºk,D߀‡íŽAûóÉüÇÙ0ŸxðÕW_‹58< ïàá�Q«ŽJ¹H>�ëÓœ*òØËÁò½FÞËR1Æu×Ql}|8[+åø½«;ôEpà­Mó7/óOÒwÖ�ùò<Ï„“ /Åú¢ö:ãÆm�™¦² ú³>FŽ\6ç­È Ž/øx/ðÐ ŽÖŒS´è·’i”DœÃ?ô“gÑד¯¿.÷Sÿì9úMòÚóvÞiçtÔènófŽ<Ž>ú¨\·Fæÿîpreë±g~ÿïOÝ7z oÎ ÿ˜#ãÀ9ûí·õo'ÝЦ›ƒÖëV[m�²º/zD@źëïüÑåú&˜29€IA½rè‚yXÝwÿ½9ô´1�éa åºY9ì22‹}qÚi§åü´Fäß¼Ø[í4jÿ�¬¿ì²KÓÀ'€ð½÷úûZ–€° /¼ e®¬IöÉÁ/ÖK'| `kð�[í5ïIÏБ‚aÞyùå—ç3Ì0äÿgï¾Ã­*¯}ñO*XÁÑØEEÅ öcŒ½'Q£©Æ´“rν÷¹ÜçÞs~ç䜓5&¶$v�]cboرcAAQ± °#ù�ÏXN]’Í.kí�HÞ™7a¯5Ë÷ï(ßQ&ý z˜Î‘Sm¦ Џèa4«?EféC>ë¤ejDâë‡Ç&ºæÝA±It ]LW[svGµŸ*hI×Ñ£¶¬V²JêÓVõÑJƒWÊ{© H8Ür˘”WzœΈjÆþú§ÿ� v/Äš¹/ú”ÿŠLjGŸú®u˜0abøC7¥=~uj]aÕ¨8U(ñ(ÑMŸòñ�f,/>] aôéâßkW—Ù<çì³2s&KÁHqäev(í;:îøc³šD‹ˆv*D‹`ÉÁ \™EA³C@»ÓN;‡™™ô]wÝ•Y±X �/•(XÆ…S#À}öÙÉáx ­9ø+|n’å¸`™�Èe—_íMSÒY$ ¦Ë:=ñD’;q™Ï/‘%Hà¬Ë¾wܱItpt•osV|ŒúñÈM’ØzàÁªû¢JäîÄ8žŒ�Ì!#þJ8 Å`È#ó³N¶*œØÕ�_ÆUF„óæmq*G4ƒÃ tœK¥‡ˆÁFa$�p!v†„Ø :ž�Lg^Šs2räÈ •¾Ï‘½êª«â^Çe«Xÿplm¥ÍAÄÞ¸qã²é »ìÏ>ò-y¹xü‡#�,"ˆ÷R³Ë–ïÆ:röCBÂd…à=$ÓæŒ² Tf”‘·fÖ†cûÀƒ÷W^xafµ>Y'÷ë·p«*_ ‡™ì¨ø9r㬘ñÝúþ ÜÇ#OVÈ‚ AŠõðopPÊ8lT²<çÄ_þçË«éAúÀv­8ÇJ‘½œ"¹È©xÙe—fð�<å y«Z^'‚V2� \20Øe—]âmw›å:XçΙ_²~ß}÷å^³¦äÆþÎQ|øá‡S>í1Y~/‡Éa7yP MWŠ@¼®$sï ²õvT³,3hPÊ BËý;àk¯šÁOízÃ×Y7�ã…c à ÃܳñS ‹xDÞu6ôšìÕdǸ š£×]m•»i÷ÜOƒ-“]ö§ ó„È€¿ûÇ[7ÙX5Ëšé¤ÖëÜrˆ˜á¼?ºà‚h™“¶f2¦ª)¬/råÅ �ì%Nú>{ï›÷/È芬÷‘ +ßûꙂFø >ŸðXõæô7sÏÒõãmý­Ý•W^Y�‹ÀñD"O t–û¢ˆà^;¥*#rü¹|µ|Ð÷È?fk®c?ù¾ ¹{î¾'+U–_~¹¬(±É’6I �MTÉx›#Ò°ùü÷‡ì,¹Ô’Iì¸=ªERÜà€ø§ö‹!±Aø!Íüþî»Çæ>Ôe®¸âàÔì…ß ¸èÖ!AÚí½×ÞÕú#F$Ú_kùè‰ _ÖqÞÎú«Œ¼ô²Kr{F¤9{J‡Õ:XòÃï¸dúЯž6QpkougÀþ®°ml}æÍ›ÖzÙÀY5‰u$cZ¶=›ßuç-†ÈýË.¿¬z8dHU‘{^uÕÕsm´ÖUPlçŽ;Sò!Iv‘Ü¿ýíobßL ;½V®�}#9¢µ‹.eÓT$÷…�Bh¶#?/½øRÚ8ûÃZªÆ¬+�SÀ?ü�Äœžxrb®ñjAÌI@°Óݱ#丕õ£ÃÝýL‡"N¿qÄ‘IÜ"í¬ßåq_ôô°aÚÏé‰ LÇ7È—qYéÕLÑ1íø[ƒ^R©y÷½wWwÝyg$ W¨Ž<ò™ˆiþ½{f$&'GrAõ4™UI˾·"—0éŒ0R Ø‘�A¸"pÙÂËÿ|YÚM$)yà×ÐÛ’x°|vrT‡ŸÊ'á3w‡0ªíÀ±†7ÜxC® ¢Ãùí W>²¿Û7ôþ™gž‘~‘*_ú†°C¨óŸ­©DÐ!‡|%«íéSɲVô¿Þ¹U¢ÚcÇŽÍùᳺOºáý÷Ãæ„W9F7h!×] ‘°÷^û¤ÏÓŽ>¥ƒ¬ŸèÊé -Æôˆî:Ô~ã¿-÷#�`T¹ZŽ‚@A`îB Fs×z´|7é(FÌ8,™IYûí·Û! ƒ ¶ ™Oú]²œjYåoÇÛ5‰ªˆe3M&‡á¢Ì‘ ½@QÆUEÆøñ�FÖs±$8dNDÊSá\*W–±cä?ìðœs$»× È2ÿ[Â]0®½óŽ;g ²d&Ùy’Wͪà˜úÕCÓ`šw㼿úÕ/ÓyFJȸŽ=:�(^ƉÓÅØq �)Œ¢l«­¶®†D@²@8Ý ò-·Ü’Æ« ŸˆÑÜgŸ}óg³Ã3ëÔ�2ÇþÏáÈMŠÌ9CËÁÜrôViPÝL9‘H¥š0BX©l�{®aŒµhÝpà qOgpºþú#ªƒøàœ#ddÌ8‚UWÖQà(„ª¤pÂU ¹q.È9Yg"H‚(Ñb§ÚEÙý!¤`‚¬BŒykˆê¬Õ"Ðàxî½RÜËád=ëtñÅ%©$È$?*¶8´Ê½9PäèõX×-6ß"3ÒC‡ K§Ùa}®¾æª ,7ß|ó b6ÍçpîoL¼êq©’A…Ç!Õ?ÞL§Åà¾ûïÍÖKY¹}¡�­5Ø xF'�|R4ZjÊø9häE FÖFfðøÿ£â†c[/ò«šIõ ¹× ˆLÙ,žÅOŽVg‡`‡‹lÒ6IV�³õ÷žŽu½é¦›r}±—®yÀþûçOç•áOy9à¸yöm#�ÔyFÁÀhNœ0!«Ý³‡~íДr,{}Á…ç'a"sª]Æ:Ëô’Ñ—‚8…³6D�­ö$�¬;#Œ�Îä[�ÿTì�1cÆTgŸ{vTKõ«¾ù�oÅZ�J½3 Q’ãc�=&«SvÜiçlSó,ä>•ÃØ'02”ûOçŸ—Ä 9”¹EnÐu4Ç~¾ñ¦rvǘ>D[¯Î:ðÒг*69ã ª¶Ì‡‘ÅF¶<zxÊ”W’x?è ƒ“¬„ß=�ýgœžz„þD8lû±ê÷¾7&d“-ºè"I6îµç^I²[ßZ>¬ÝGOo·Ýöq�aÙîõøã�EÀyyVÉ.{&ûWeˆV7:†¾øÝvÛ­ üøÇ?ÉÏÀ!Eþè]{©IÏi5DŠ ´&…¾GhÒuˆ‡}÷Ý7«3œÿí·ÞεW]Dß’¹wÜ)®¿nÞ¯ë³Qô©ë“•}öÙ¯�ȪýØŠ5jT¨‚�vÖ_yQè·;ï¼=m½»Ý¶Û'~Hjk¤ºìÞûîÉŠ væûßû~<ÿæ)[¯G›uwö öêÁ”Q²‰@'G®ñd�÷ðeËü²{D�j+D�ÙÙÑðØ©'³Õš¬;|½¬pƒ-"âŠ+‚PŸ a;6Mì ”Aõ�ü÷›ãòF„mb{ØÄ=ò\År‰í ;%§;Z•ÉreJ~yþ¯DÎÎ6|�K.¹$‚ô Q…× %ÈèËîØ„{+ë7_Ø9I•±cÇV·Æ}ªÖþö7¿“k+0·ïþ•âü +t&²P%_Ŀۣ÷GBâÑñ�„íZ5FÖØÞbƒZñ·ì׎DŸ¶\xAÊÁQß=*õ¾ª&º ¡…Lú퉿MºÃö‘PŠD ßq|Ùe=—K‰©Î#Xtdgì!„¾ßÓ™tóΑX¡í°¶�\’’üPÕ[l|w£ÚŸ’ ÔÂimø2ö Ÿ¿'ya¯ðUØåóÎ;'í¡=…$›fÎÕ푪fþó–[n•É~k+úˆOæÚöÓm·Ý–ψ¤”ì„¿C’‚¨$&›©™M3T’?íèS¸ Hù…×]wmÎeãïÒ)üö’¾÷œæ¤I8'aþN9 �¹ �BÍ]ëÑòÝDÁUeýf 4ªiÜ 3´YuÃôÈâ1GqdöÃ3"”úɧœ”ßÝ2‚Ç�" ## .pæàpVœ�ÂçÄø¨&¤N:ùÄެõ'Û)ÂpÊ ˜­$£§��ã)ˆpî „æ qpÎ>ç¬p§æ«:è $8SDP+€‘_{í˜ç�ý¨¸¿¡AÈÊrVüatNøí IZ0v '[egfj܇,�LÇ 7\Ÿs4¾wÔ÷2˜÷{::ʂ܇ÂÑæ(qäeÚÝ‹Y*;8Yp`eÅF*I´l�µe¶-­Q›ù·Ì@#58´Ê�‘n÷:eÊ+IÌ�~ÆiY-°ß~dvY`ȸΈ`Í €›#���|!ÐÌàá”uvÔÂèš Œ�\_ÿú‘é Ú i|#œB¿G,¾úêkÕNè!S8ÛÖÂ3r´/½ô’”‘¶)^ !yO8¼ Ul9¤’* Á('Î:jiRùá|f­�0Í@10Ä£Àýë‡=R÷Êéò¼ªÎ ¢bJÈ82‰œÊÀ»?ëäþ�9æ—á NÍJµÍ7Û"±Õ2Cn�ÈT0vÁÊö0×A˜p$ûõ[8ïS`ua¬÷äpd…žƒ£¥R©³C†ÖÚ#=¯:÷¦½Äáw7ë/pç4~ãß̬›ßׄY%c²q['ñ940œ?ŸË<Îðõ�£Ê�£�Ž€5Ýùç_ ³ÞÇ\fN‘ ÁuÃIV™§ºÆ^M'òö[«³£"Ñ0sÄÚVá vFY+Ù^Užá¦›o¬N9õ”hZ¸úñ�þ)«¤<« ke?wäÈ7F}!‡‹/¶xdæQ¹rµ÷^{å¼å÷ö9'™ƒ¬õ„<¬U@#BŸÁ )0»ª ~H'kCÏÈ¢ ä᫊ãŨr°·‘:îÇþ 7a'€9íô?6öw8ä07Ó9_•7Ès÷/8s?GÅðüM7Ý,ï]U}(ü˜ûFתòl®+€Ñ¢üÜsÏ¥Ãà�dzmDÿÜCª�9§�ñÇ P~øÃ§ŒÙ§5A¯S[ƒÊ!l*>é 37̽BŠ�Áù�ßÔÀ °ûp XÒZuè«!¡§U˜ÑSô´Š72HW\pÑI<Ãöö³£=àˆssÎä­®?P€v_ز!hW�f�x3fÄKBOÞûç”SONvøa_OÂMŽ5ìÎþ°Æçž{N´§<¤Ù¹×wÂBU†s¤yá¹´)97tmópäÙÉ(;‡ø‡±ÖFò¿ôÒK¥^³ü˜ªÚ†^í¼Ó.Yá»7~H!ª©ô¿{Zf™Aioí_rlô…�â'´#?ž±%Â(ìÐ.�Ã�!C»eGØ�VÖ¯Aèü=aD׫ôpï§Ÿþ±ýWÁk桽K.TÅð‰�MW…�”i&ŒT@·ão!ü;:Ø22Éw9áw'dëÒ×;"}1vÓK"Ƚr|Ž’cG„Ѱ«Ë¤·"—l+„‘ÚKÂOQÍÌïëÊŸQ­+Éa{ºFb�_…”ãK´Bñ¡�JMÉ!¾ ߘ¿Á&Й*'=¿ýC§#k¬im�î{g´Ö�š„ùwÝ- hÉ ~d+úˆ=WÁdŸó[ù ýÂßæ¯JùÉVóoÉdêó ÏO2ŸLѧpPÕŽ>u~Éj~7rõÕ¯šv“OønøÌ’PtŠ–\ :×=”£ P˜»(„Ñܵ-ß�@C$ ¦œ—çõk‡–N?'‘ÑìëEÇê 0öÜsÏtÔ|2‹o†ñØo¿ý3eØ—#>‡fµpüU4Ô- nX %�ùõ¯•Ÿßf›mÒp"•žþ…ì1@ŒØÜŽ*¿$Š B÷)¿?%‹}ƒh�gÔdLH2¿£-"“›�íŠ�Šße„ ôþÅý"[Þö edR}D†Ãì í1Ýó¢f©pD~òO?Íê � ãÕÙ!¸ÿÓùç&Q#ÓZ;Ú5�à¢5a¤G\¥Ô6Ûl›• ȇ*ÁÌwÜÎù�9(ñ‡ßÿa’sO!‡ôÈ«Ä:âëGdxÁ˜™dþD~?‚uX=‡L=©™pÈuðA ç!qà 7„Ó²BõÃü8«È8-œQÆðoÿö¯,!Í£R�4p`cFŽV£?GÀa]|ž¶Çî{¤v}qäH[Çûàƒ‰@k½OÜ�ª„J A“@úˆÃ�ȵrák¯»6 D„€…ÓåˆÍsâuîÚç�%‚fÄ� Æ�0BØqB¾rÀa•Í#ãdª½ ŠC…‘ r -¬áà5äÀžá¨ |]yŠ튘°�¶¿ð�?3SÆáeØcîÓÈ#Ždð~ûæ›o‘÷WFZR£ä:xpc¿d ™„ÍM1³ìÔp:­þ)*DFm1:1‚ß/âù9ïö)²IÅ`]9SߟyÇ{L/f…Ê–£¶ì”0Ê›‹ÿ8¯ï�ÝßžxBÎËùùÏÿ%«lš÷Ñì2¿öI_Ê!'X«œ=ÂAç î,Z¯š�ñ±®_rQ÷Èuº*‡ÏÆ~êè°v =sSêzÒì™`¤‚Ô_Ä&}Uψ’u@ø7ƒˆ•Ø•)*c´ Öú§^_óÖ7õT¬#|eÃéCYi2»E¢Ú:µ@8±*í¯‰ñüöá‘GDëHír)@ §þû—ÿ$öÌêû¡TI ÎTw4R*gZÆ}’(E¨ ˜×c´âÁŒ�?üñ÷9ô–Þ�M—ífošß?'¾ÿdìc¤¾ïï°Ã9S¤= R±�õ÷V%ûþ¡¸?X©ð8`ÿòþÜ­'ÎðSѲ×^{‡ža¯¢Ê,Ö¨;ûƒ¢è÷L†è*ú\ i®Ž¶š†\Ì—$¬s#c;;ë;-ï�âr¿f•�_�3ÂÑ ZÄ<#d2½FM�ú1aä{ÍD2ÑáyûÒNñ_Ú‘ó[#ŒÖJb´n…éÊŽ´º~ìRGFd lßE]�úº¡F§LÕú¡~9‰ý{FKÚø›× áf¦O«þ{ØÑÁÇ#C*¿~sÂo2‘¸ëvM"»&ø6°?ó¬3SoIȱßä– œº�|öD.%Ë`Íž\D¸ÿôÑ?H›è>ggg´A�ú‡S²õšýG|«”4{ª><y;í´?f"UB�_ÛÂèÖ Žé[ ƒýèÇù¼|•Ú_©õ…çf;Ùsîf†ßËžøÿ>ã>…æ n·Ýö¡×7Ϫ3o(lG!ÂN:éw‘øz6ç)�92}sɀ晣•PB™ä…p@V·£O%$!îÎ?wgEéî»ïž‰Æþ¡SÌ�2oþùHù¢ßè÷PŽ‚@A`îB Fs×z´|7zYo´v8¾‰~i%©ªƒ2 ÂHæ{Ĉ9ŸAÀÄqýõq¿Nã%£Íy¥¸9‡£¬LŠ@adfŬ˜àW…’{pÞ�6l Ñõý_üç/2ƒ!À_%2ÎÚÁdsGã5ä™ñƒ¸ùRÌDè 6<ŒL‹ ¬ÀY#+ïðL²¡¨c~}L’ƒÕV[5î±0<ýòs ³~jó�‘E5Œú{G��’lÃÖÙÑSˆƒð�o' #í&ýû7n¥Ù† 8¬Z~ò“Ÿe~ÜCÞ@uS¶|i'€q$ç�²eN–ƒÃùØãã«IÑÒð\`½^´þì§?ÏõêìþkÂHÕ…ò`dà·¿õÝÌÊûçÉÕKÿïßþ_VÉYN–`Ò!U„H1‰ƒ-ààÉ sX@æ\˜ÝâgóAöEîáꫯÎVœ|ÿY'P¼32mäõsè÷;G%‰Q;_ÎS·\<þøc9˜Z®yx{WŽ~M¹Æ_þòçˆ�8µÅñÇÄ”J ­{G¥…J3"U PgGíX ü‘¸æÈvz# ±çž3ƒêÁlMDÆrdÿå_þgVø8oM½ß¨#ŒuöŽ#÷pìuóŽ9öWñ/óUG(2™ZG�=î˜ø×ùªüà‡IˆšSÄiwÔ÷ÿãs|Z¶�R�Uå—ã?½Eõ•Âà‚¨|AˆM|≔[UÄIóA/Ýz€>ðÐwuëWóçê¿Ã]e ÜD›ýøƒ\¶¢7+¾ÖÚç­ƒ½CTí¨Ô´Ç–[nÙê[ßüvbÞLˆÖ�âö—¿úï ´¾úØu詚СUþ¤> ™¤cõpZÕMt¾ÙXõP]¿§=‹gÿ÷x-··ž±#ç¸|LÐa„TGr1!ì»� e'žóøã��äÂKyNßE«Ži>´‰— È|Óu¾¯ÒñÖŽð|í¬¿w´Æ\¡…’0jÖcµž”x°è³m¶Ý6ÛQT[²™Ý!Œ´·ÞvKÚk2!x¤[è{$:’—ÞeÈ– iЬ ›ñ¬ÿŽ ®eÕ wsß Âž6mzþ;B‘ŽTé:ZIé5-«Í„‘k!¢É…gBÄ:21Õ‡v !ÚŽüf<'£V×~FCA»™;cn¹9+b¿ý­¿×öZ®S´Óª$�•ØS)ÒŽ¿…`ŸÝAöÙ.D/?oèСi›T²z‘X«æ]wÆ0ïx3éa_;,í2@b¯¹¤7Z!Œ�oÇ…?+ɹÍ6Û¥}ëH9·{v^»-‚¸'„;&Y*ÊßÛ8*”š÷h­/j½Î—xñ¥Ò�{íµ×s˜<’šÿ+á¶à‚ ÄPù]ÓPqYW<¶ª�àðË_þwIGð±õªÙ>ö¿«-Èãç“1$œoôñT�˜á4>ªå86¬æÊŸîF*=®ºúʨnX&÷‰RòæÃ‘)²Š)3F<àÀt�›?7ëßk‡^¬ôÿ«èxçÝw2ÓÏarïä!¢çÿ¯ÿ�Ä¢sÕ„’ÉLòŽ«+¤ìÛºõñ?> øe\•ÒX)|B´LÙÇÿüaå�`Ï^n>`¬µ [«F¹;r“‰�æïø{oF}%‡Ÿ3‚;Äøæ[l‘³zšŸ¥Ö7ª/ÌØ¢ovO‚sÍæ�}ôwzÙH&N8áøª_ñ�áûÑ?ü ¢PÕÓ=±ÿ´‹™ïvDSåOýy:JÐï:ÿöÿýkÎÒ²Š0ÒÚh>Igúð駟΀Su“Ìòƒü¸Ò¯®”º1£û÷ËŒ?BJ%¤ê‚š0híCíÉ_G�Ö¤I“*­½HnÄ'BNE"òþ¿¢òÆË vß}�¬`Ti„øh>$dæ ÷§“Ÿûï{@ÞC;zཾÚYo!D±{ˆ•…Z•è™æƒ®þ݉¿Ëg';ª¼T'ГÝ!ŒèAÁœg½á†â<ϧ�Ð&f–[nùл+&©cî A Å®Ïî ƒ‰£É94›-F.ÐIüºƒÞAʼý!Ù¯JÍË´ˆû,¹PiLgt$ßõ¼•¾²SÈžväyÛ}Âèâ Ôs†Qø3ØîVµº~0îˆ0R!H'›!È—òÿ;ÒˆEëi�TTgb*fQÚ¿|=çhÇßêjFûî-h’^l¢‘�Réäžø‰æà=ðåØÿZÎÛ‘K÷Ó a„ù¯ÀGk:լÎôPM|#Jø3Zg{BueÇèskÆEÖ²·ôŒØñºÊˆÞ¾=ªÎUôÀsëðUù\;úˆŽùÅ/þ#÷öÞ{«„� ’Y+ÉVW†?„8“è°àðAèŒvô©d4?•Ì›­GnTËk=#¯^bÐ?y,„¥Ø@åQ9 �¹ �BÍ]ëÑòÝÔ†IÀémh ‘roý¸<½Â[n¹eö$3X�–¯ie˜®¹æš|3·™- ² µAå8'¨všoVFûô #mJ³F†¤ †F`1$ªŒ´u5’©S_M‡[{Gƒ“îºu€äíi˜4üƒH#€})¬ªßFìÙNA²g¨Ž #ÍÙS±!soª �ú³³þì)a$0ûÁ~”÷¢Â ®@`ŒµŒƒ0:ë#Â.yÏñ× è>˜ñA”&oWyŽæ£ÎT fF™·õøb80i~ÖæïøûßF™ X{‡0"çŸÿ§$Œ8#²åÍ­bõýp2Ë„Ù9ç�›o,ùùÏ~žk­U�&°FèuDh%atUFAXµE±b¸6²±:+á†0RåaH·¹Ý%Œ8„wÅ:ÚH5•&d�Œ!%Î-`F(­¿þˆ £š EÜÖoIƒ¡ ÏÚsÎë „‘¶2•£Oü]îëþçÿ‘ò'Èœ5c×x›mR2™odxz×o ìu¨—åÐ[º×Z;Ÿ}vr:Ÿ³¶"À±Ö7t„¬:=@þd©¾Ï:<7Ýbþîw¿M}ñÏÿÜhÅkàûIB®ñ­�ÿ[Ë… !dö뇑ø�?õqÙû×h u]³æ¶Þj›$Qµdv¦{‹0Blî´“ 7��·M6ßçSAÆ!µ< œˆtHF*Ì6Úk¯˜�-wô¸¡øÍ2� Û_ZY†„M8pÿƒ’E¢´ªì�vÖQ.@³75#8 TšûǬ7dÒ·§„Q­ÇU Öž‰€p—A2«xX%?-*È(ɶ¤£ƒm£ƒU"\•[ì• £E‹þ©«àØ>bOõ™õÙ¿’øŸ•0ú„sä»&œÉq_Ú)•·íÈ|ºK]| ÂhBêJ °žF­®ÿ£#ÂH‚„îf‘°ôPGú¡¡ÿcVb$–èòÞÜ’VF­ú[³îÓYe ‘lϳoö©  ¯}õМGyÁ�™t›™Œt‡¿·#—æð´B©DþEࣥkŸ½é!DÉßë!ë/%Y©Ú´&Jºª$î®?e}�¸0ûó—ç�ŽjvÄ2? )­ ž>EÄiÉêˆ0jUñ3´ÎšùÈOTQÈÖñ{šDÎùsâÀæÔF*íèS‰ÉfÂì©Ðsæ*I¤Ñ7f¤ò‰%Í4ËŽ.•P)GA  0w!P£¹k=Ú¾ýˆF Á¢Íæ/½"çdì·ß~•ž ¼•?s|”áÎ-EÚ‰d±›g~Ô„‘ß%a´êj‘9þr�æ›å@è©7{y!VaĪ„0?I¥„àWgÖ ‡VÎ�’ro«pÚÎ>ʨG5Æ—¾ø÷„Q£¢cJ/ÇG‰¶ÞÝâsÊn‘4^uÝ|Ô×1Sˆs £‘%÷¶®5¶ùïG!Ò<6™ù‹ Ê ™j­BîÚYw¾�#„IÌ*âàª0âÌpµ«¨0â ›Å$`ù˜òŠâä\ž N:ÙšîF÷äì$¯óí­ £ùâ.µØiùC¾™õ£´¡Õ| B8'†Æz­ýÀ þÌ*cMy-ø I$üýý}D…<%a�\GFæUÉ,r›+t�¤�9 õ½¶B Úd*UZÝ÷À}9ØÚ{kÊŠñ<œDo‘âÄÙÞt³z´ìýÏÿñ¿²õϵë #ÕGÉ{#`ø{ÂÈZÌ(ñ¦“ßDŒ ¯n)A ûÿ÷èRË,Šçž6‰¢M7Þ´eÂèg?ûç�óm>±ßf7[Â>© �ÎÖ¹ÕJ7Dí¹ADj¹SµA‡d¥[d›�zqÖ½Îwù–šƒ€›?Wÿ�¬!š9ôÌáØÿøG?NB®è¬_Ÿ‡/½ŠtÀßzš§uWÀ-sþÍoİópŽ›÷m½¾*¤²‚ o³4KL=›„Ñl䣷#äŶ¡»}Ú&9þ͇·=^smSËfà»o´6M{cZ´ÿ2“»Äþ7IBbÖE¤åó‘GŽdEãM`;ÄjwäcvzÀ›šÚYÿ烪 #ÕiôXG3œ„щFÞô8û £ŽöG�%�M «Þ�Ç^NžüLü R9þ¿|*ä6Û´ñFIxG‡}EÞøã’ñfÈ•âó+kmS¡rÈ>ßDÝËALY•‰ZÒTý à�xu…QG„¹èK;¥¥¶ùÑ~kFž*¾G‚°×vwx¼ujƒ 6ülÚ¢µÈ `Œàèˆ0š�©OÖÓõCtDY×”ûðß´9ÙoétªŒ‘µZ��ŠÍ„‘çnÇßâ uv¸¶*3ö㢋.Ê$È‘Q©l”Ài§Ÿ~çëÕ¶Ñ¢i$Ÿ†ÍkG.UÚuf¯ggg´¼þ*Zz_{¿k¼|„ëHñkµb!Œèx¾BÏ+Œfï¯ØÛ*=ï¹¾èâ S/’59ß�ÿ§Ø}x»© Y/IØjË­C§|\aD_¶¢�¼}LE¬ ×MÂÆo¼ITÇž¯gÞ±Ul¦ç¿0ö})~pðûvô©ŠI»f¯¼òÊËAÆ?³¥žÊn‰{ðÝxnĶėÖfêÍv±3™,¿+æ …0š38ϱ«ÔÃH1øHÆ ±L ßúÆ·²½@ö’ÓwÞùç¥ã¸N� ] ©V„º•¨]ÂÈy”á|¯7܉6ø»×G›o[ z¸ƒðÉ”óÔY€T"Öå“ñ8@IDATF ²aÓ_ýÊײZ@i«žè棾Žo±ÅKrñ2kFówü½&Œ&L˜˜F~øðáé`®¤“£]ÂÈZ!RÌ^°pÜÌ8a@?i8#“F<àÊGÎ %ºª�údFlöN«�ºÁ½�ð¡È½ùaùºìYg]5î#*‰Â18¾ýÍxN¯3n'P¬‡Q×-iZºTÂ%a„�·}8úŠ0âXɤr` oºéfù®Õ‚ Õú&Ûï¾7.AÞrë˜l•úéO?žAÕ*a¤Ôœ Üy×±þ3 ‹o®ªè�‰uË¥{´g W5#GˆìC³[©0âìþì§?KbÔ+�롼³säûš0²¯¯Œ·AÖCúWŽ€qÃʃ´øäÑØGæƒùŽÁ›ö\=ó쓟ý¸²‹.¥g´cyÄ7“èãøû®£vÀUÒqŠýóhல¡'@¡› ›È4Ï0´ —Ì2ãè~ÿOA¨ZGÄSý³ÙнEÑ×tÂG[ªj”æCõ‚X`f~‰ýçí>Ê“O=)” Gx{Ú‡ãH49T>†>{¥3ÙDŒï²Ë.™0hGx[S;ëï~z“0šÝþ¨±¬Ùl¯Ì¾·ì½¤²QÛ2‚Gò@Ń·–±l:›OÿÕo/Û?ˆ û%¢E˜ì8{~ù—WOÄs’{/ Ø'†Â«þíaDîúÒNiÉjG~øÈ ~³b1ßùvÌê‹ ¹ùP©çåˆGí¾ëFÛ‘ú\=]?~VG„ÑСCr>ÂìŠHù\GúAÛŠØ;éä“Rw4FöU;þV­¿ëç›õgíç°S*Yý3Ò§Ee'}Š S .)ÇÖ´#—H„V#„ë‰'ÿ®¡‡T­lÔx›jM”ÔÏ¥åÜh„‰g·z“0j´pªšn ~æ«íñå=«áë®›/Œ°µh‘{‹jÛÅÌ%-t½Ai�=ýÌÓ«Ç{éûÖ«V~ Ÿ…0ú4PïÃkN ÈPbeî”­ÀEEƒlÂH¦�ÒVþÌá˜0ññ Z5²qJ³ªº$´]ÂH™¯Š ½ÔfÛ‚l�ò°a�7Ê0$u–N9¾{Ö"Òȼ|üV ÙH¾/ãÀxKƒ+C£½dµÕVÏ,*G@Æ_0#&ëc‰`’3íš]¦ p‚ÈÑ"'À3§I—ò^†�ã(Ø“ùk¥ÂHËGPå�·€Íçô–µÍ"`kn™«J¯¶þ[T©nhXg'Z}MY[ÙíFË͉û~ûîŸeÆ,–YrÉÙ?þÑ\‡Uc8ù~û6Í.¹×Œ¥ÙZ³«,¨ £|íø1¿ÌŒ½ùQ拌X?Ê�)ëF>:s@küzZaTË¡ ï?þãß³åS%ž·ý!ÍÌpáœÉ¨i»°ÿ´Þ�à :Z%Œì)Î("X†^ûÔN;íœû@0Ž4òüdó{ÆÄ )oÓy#ö‚ ¯áíaDþ¦FÐHÎó›ãñ–áà•-SKÇÛ²Ì`°—>-Â*'ï¿ÿ¾È–>ϽLÚë�‘¤rØ:°ésŸTÈ„“áºu4£é?Öן|d ½~)‚ómc˜ö&‘±Ì˄×.£«&ǬmH<ó±´z +ï¸óö|‹Ðü�‘V�}ÑEã•õñæŸá´Ãï¯A|!:ÍBó9zÆ¿wF ÷a„B"lo›H³ ž…Îy3t|Ï¿ðü UŒÒ_ÈY¸^pÑÕ„ ¿AªM·ßnû°?«%¶ªà =-¬ä ¢�ΞþÚ"Ž_bñ¶Öߌ–v#v«;ûƒ-2Í~Ê•�ÁæRF ‹ [6œÝüÊÁ_Í75‰åGUQŒ\Bøÿ1*Œî×/Þ&õý´µ‹GÕ� ÔµÆEkŒçCô‘õa´oV×u‡0²¾}i§ìÙvä)¯‹½&Z|//^Ð ÍçK¼Eð¬³ÏÌ·h™w¨-·™0êÊŽ4pèùú±ÕFü­ÏfPº/³&¿o¹ÔBD?Ø{üä‹àz̘›«K/»$ôÖŸ¨0Bô¶ãoÑ1�µ;6fxE%ûK±�:ð4oÓ¢¯¼¬‚ÝE†À©¹T!Ú™½ž��Ñ:÷§x.9§ßUmoSUUn>múôiIÔœsÞ9Ymÿ!–z“0R]$ ÈÖ?ë6xp¼6Þ~»Q\ÖþÛ»·ÇK8N>õäÔÛ"ŒbÝ{ƒ0z3h‰<úúùçž_q¹|™ ÿµ_¿…âúïW¯Eå,ÕK$�È覛l–8 ýÚ±§dÖÐýéÓ¦‡þnê:$ j)ö’ Ö®gл·ïšgô³Ÿü,ß> Ÿ´§á³½8Iþ"¾‰�ÙÏrëL~Ëï �Ö(„QëØÍ•ßÌTpˆdO^ gsñ¨¤á°ß¼OÇCFá” Œ|.º‰²UMàÈ`¶j:¯°]ˆÁàܸÒePTZ¨ü�ùTï÷æ807Üp]%»ìü…¬„â|tÕ‚á91ë³Î:# ÁŸgûívHG›£Èév}-Cãz0®½l´Þí›í\ ãÕÙ�è0$Y ã~Ubù¾Wf3bÆ­UÂHK‘@J+Íïcø8Cºé¦¶:dEV£%„ó¥ä^`¨ýÂì�ŽfÍú,}M™9„ qo^-0ÔÈq4ÿƒÃ+ AhX^yåå$Û8NfNõë·p[�bMš}ÒI'æ,%UrD•Cƒ –¬¶¢ÎзžF¾GUîüçÿ"‡ËšÂñS¥ÁñÍY±'9Fª(8ÿÞrׄ «ÈC*=#§lí¨ü°¯W‹À]%‡ð®Ð*¤2UEaw #e¤“ÀTÉ¿v¢ý¢BAЀ ÜØOªÇŽ b²ã‡Ä•ÖWß÷ì�a¡³'[­t#‡ò;âù.¹ô’Ô/»í¶{î%ˆ–WûL €·Ò �µMÒª­Óìë;.ªÃÎ9÷ì|ÓŸWx¯¸jMå€ À žOƹ)@8ø ƒ³ÂIÀ—ßQgíµ1m=_˜ìoµT)¥ÝX€b =û¢’nР�Õž{î•-*dÜ-­V†Î_vù¥I.æPÚø>»C‡vG>fG#†ÛY„r;„‘gìÎþxüñÇâù/ËJDs`kl¯62ë¬eÕÛ›wÊIµ±hÙ󳣃L ’Ù•)z衇¥î“ bãë9ZžÏÜ)I¡M7Ý,*ŒºO!ýûÒN5ìÖå6’S7‡~:7ˆ-ùöâ^õ‚ÿ_ÛÐ?aÉiéFØ7F]Ù‘‰±·[Y¿�uH­v‰hðñ)§ž’„´µAØŽÜhãl×QÕˆH4ë†�äóCš+ŒÈo;þVƒTëHÂ>þ7{þ‘h]BL±3|§÷ߟ‘rÁrÈWÒ/"ÇöB;rÙ*a¤ÒüÆHLÑC檰÷L~§5p_�Ox,õ�—ºð·‡£Bz“0ªg~iI»5’�ˆ߉0²¶|¢Wc†ŸTÉ(‚™AdIô˜»×„Q¿…ûe’޾E@#³Ùv Af?Ž/‰Ä–[[þó†‘X†ƒÊïvô){�p’@P]ÍÎ!î$ØK3àî ›ÈA¬©ûáœö„ü¸7{‚ÿnÎ×JqßæI"²ÊQ(ÌY a4gñîó«q¼!‚âÐ*gõ¨h9©_Óî&,gžyFˆ¼šýÚaá8ÉxüÖ°v #'çî{ÆV×]w] Gy8a`,³~¼"!£ÿÞ¿q`SÝ%Œ<�Ÿ“xÌŽ™ôä¤jÑþ‹Æ96I'qÑ0̆™Nœ0![ãÌ‹0³á�CÉê“îFµá7ƒiÄsBeÖW]uÕ4`²V7�ÓR…GeF8ùœ½îZ Aš -Mª9^xþ…|“Êà è8ðììèkÂhè�¡iÔás~8’/¼ø|þýóáˆiÍ0_J+Äá ô‹ì#ÇAÛ‹`›ãÒN XFéÈF/>‘‘Hm1ˆRY£¾"Œàï-SfˆŒ�€OeØ*«¬miëg¦û­·ßJ¢yjÖ'M‰xoFä�l{û”J/�ù€ý³rH°¤<œÜVK*` �-G£‚ØêN…L9�ˆßµ]Á–Œš;€”!³“Oƒ0"oHAo#ÐÐmˆ û]%rWÀkV R„SЬå e?;;2  Ýz_Ÿ0äôÃÍ^¼)ÈÛÁÆ=ôP®œTwí¿ÿþ‰Mîï´¾;ÿ1p;h×E4º&O~¦º{ìØ ^ÞJÙñ¦H-ƒˆaGWh½E ˜eæÉ là70*È<“¡¥Z·ì1Ý~X¨´BÂ#|�9ª ½DáÝráSëÈ:@1IµærñüˆwÁ‘*,òÙŽ{í¬?"®ˆütg�#ò‰b�’ô™ÔÒ*Èó2 Äκ!#Ùú¤£™ rÖw´–€µa©\„©¬ól�…-F¦ÒÅæhY›žFö_Ú©©S§¶%?î�?¡µKÉ $ gS]ƒ~f«ß�¬Âm³˜·ØLueGï­¬}ÑQ…EnÒç_ø§Ül$Q˜D›ß#_Ægâë‘Ô±ìK3a¤z¼«;„ù«*‚}É>ûáKžvÝu×$|®]¹l•0rmkLÇ#ØÌÈQÁH±Ë*k�¦üÛs6™Áô&a$a‚ôUQ|õ5Wå Êí¶Ý>m’™boE�ÎWY§ú”�Þa»²Z³7#>"Râõ’òN7«>´Îªq¯¿þF¬ß»¡wæO݃\V5 >S;ú”\äL±ð‹¬Ç¢Q�Ì×å'¨¬¤ïý;}8%°²>xðGo£õÖ6•¬ˆ%Õasöˆž,GA  0g(„ќŻϯÆðÉr#ON<ùÄPȯfÜ=N½Œ�CÐ(£¡"‚RV�qô÷¾Ÿ† ó_÷²·Kq •% �dôOYÙvÙŒ¿…ƒ§CVc¥•WJçˆc<,÷!0í¬£Ô5ÌKR®íuÏ(΂Ñâ?á‡g@(@¨s$e-8èþtv0l‚L½æJÝe]ˆÌš@y¯=÷·nÞïíá°·Ò’f <8 èƒAè��  QåfFÅgxþù§·_5tÈÐjtV믷^–³¾unÖgékÂHO<‡–á¿ëÎ;Ù—qÎs ™Hä�J�ôvÑÒ£²ÃÚ#:Û kÂHöXÐd�íA ˆÀ×ZtàAáh|®O #¯­¾õ¶[ÒQ} ˆÅ©SãúAÊ 0 yö¬2œª�8qö]oFÖ€Ì8÷µ×]“ûÀkÚC´R^—ŒÌœ×t úrþLÈ’¡ÆÝ}KZîÙ8™}¬%Ék0¬gÓv¤’Ѱd�ͧA}$‡AdiW0{̾õ¶rØØK3Ói–¥,nºê'r) ëì _ã©g®¿®z<pzFåÍßB�ÕóÅé‚'­Vœo-�¹¿§h9{, û±‘y%¯ö¶ß9´¢Øß°ÔòF¯ �7Ž9E©Ò@F"L_ :Þ �M¾ O}=xåtì äXÐ×ðý„¾]ÆöN9e5™êZöÌHòܰmG¨ÔI=ÔâúÓëíF‚NkÙÕþ@\ ´»wß}Wì/V Eµòh¾Ð“µMBª�\/ô¼J¡:ÈK ›þ£¢Ós?úÈ£9#뾘òÊ+/g /0ó¶T{_Uœ ŽÌ¹FV.õ Â¨Þÿ}e§Ü[;òãþìG>Í¥ñR…û#Peƒ´žÚÛZ¸E›šàøõ ÍÈ¢½¹^�úÍ„QWvdÙ J[Y?~OG„rÀ½#¸Ç�{0’/ì¶Ã}òɼ†\‚…>ó6U:¬™0ªÛÀZõ·È_wŽ$Bbo�ssÖÍpøÑ[6*cê‘íÊe«„ýDg!þ®Š·¡"·Ù\÷9¼àÅþƒ]CgÍÌŠhº‹èMÂÈz#\$’.�î£Q9ª}OK²ùtKÇ=Ø×î yl$ÒJRµ7£šÀ ÙBd',øýûÇKfÂæ›·¤ Èï�3p0û¯}ê»Èïx ºþºk«‰O>‘UTößBAÞ†ç•òïgå•*;ã$IBöƒÄÅɧœ”‰6÷²QTanµÕV7S¯;2[>S(´‡@!ŒÚÃo®û6­ÜVÌŸ.8¯z3ˆŒì¥,±Œƒ£&d´TPÐp`Íä‰àSà%Væ>xðà$•”ï6-[ “L¾LÁ:k7%Ÿ“!༩<“Jˆ·"øb ã-û72²l2©Í¯çø)gÄ´=¨fpþYgÁƒÏ z¥öCA¹w-yÞÖlZèN*ÂŒLZ k):dH:ˆH¼Yßf5»gµµª¦yüññQYònfhÉ¥7r”/¼è‚¬zP-ˆ˜A h£œr˜o§‰u&D]ð^¬Œ´(�}òm^ƒu©ƒôÙ=³§¯zæ©ÔôÌ3ÏLNRî²·KG¥ŒŠ†­·Ú& Lj"Š, d”è«pÐ&K�¼ýÎÛIè-òˆÔ¯÷÷�X²S·Ìv%ˆ:�,¹ówíN;x‰Aè~‚,¤‹Ï<ëÌ$ºöÜsﬔ$?ö,‚^P¡²IÕÏäУÈx¤.@ŸÑ×äh�ØÇpT!Õ|ø<Dß#Èœ�¾'oKÅ324I\D¯*‰šðî-=Ðêúۻ쇽a½B~鹿C@®% A·x¢ ËÌGWûC gÝÙ‹1aOȃ–�F@;´“.–ÕWªöT²"–z¾óÙµ]§»`oÖ–*^„#¹²¿ÙN{€Mó5ÕérI¯\®frpTàFðÖ,5}e§êó·*?õ÷k;Áž±Õüû–Œ«ä±É{“ýjN¨ueGì§VÖoÚ´é©›­;2Û}hѧ/ôfV‰‡|`® OÝÂOög‹¨ì«$E²jé´NÍz¦U«Æ¯«ŸIœG%—=î-¼^¿.D'À’]m>Z•KoÙêÌ^³ãÙ™úú|@UP„N”ü$æÙ_îÓ>´è~D¥Š. �!¡w;;º«§è[k§Ú×6Uö›o§â]ÂQ…%]oo[³:Y Õ1øæ›ÓÛÒGžÍ>·^|häÕ˯DûYø)d�^ Ë~/9Ëwb£´Œíá-½AÒ8ZÕ§öœë¨(ÕrF'™Ý6}zØ‚xþ…ãeÖB‚DÒ”=àñOØZ„ß…1â€üX~DݺÛÙú”ß ½�@!ŒzÓOõŒ %­"F°,@ÓÎÄ!çè3HF„ñàs9M‚€ÚÐÖAÙsŠ8Ã&8¨ „úsŒ­ ›#©šb±‹¥!æ�9\Ï=1ZÞôáó9¸9RsÃJ9OÏrêêûôùÉ“Ÿ £;#¯Ëº‡š€©¯ïÞüqŸN[‡¬¸rdÆY¥‰`eРeòî�3Ü�¦ ¿û®³0°�ƒáÙðå„ÃRз’Ä'οן` F²›/F6Ýõ9°5‘׉€Âçs%Ô¸0°)Î?ƒïüÍ$_GÏ#IÜÃaõÓyd–̹i>\�Óàyî N®áðÌäÎ>³è¢‹|dàýFÊüßxcZVX?÷om8¼/¤òÄ3Ô�twï/å1†(º>¬ÌY�C-�®oŽŠ×{«Œ cª?�ë LͰñ݆ó45KÀ‘äªù ¯)Cá°!¦Ü'çÒêìp}ç×J" 0TÚ=[òï%BÖɇÏÈ("_ëëw%ïpôÜšgž&gËyäŒ,¹ŽßÜsl­¬·ûBÁi`ì_•Hм¯À„Ùwõ~íìý®±Ÿ_ Œb?‡Ì `|w‰Ø¿ª,ÈgýýpÎ(žÏµÝCë€|}õÕÐ;ñyî¾�ÇÚ�3pCŠÐ)]í¡Ïß)SìÏÐ3ñwx¨bP!ä9Us˜WSºªÞ?¹¿ãs†€’�ÜßqŸˆŸéÚ#ô ¹&o·®ä£nqOïÆ=©.AÕrëÞý¡‹µ¯©"ÿKÅõÜg=TûåС_ˆYrÞæCgªz™r¤ŠÊóÙþc]›õu�Qcÿ¼–$Èô�÷SïƒþñLKø~ì{A–»Ö罩ZYßa?Þ~û�\ÏÊ.‘�æƒÌ |ܯªØCµÝêjÐ' ÒeZCB¼×F¬“ƒl œè_­Ù þ]f¾³ÃuíyU]Ro]óêuø²­ä^ey2/Ås©°‘ì #èûÖÛ®�eöG³üÕ×N9ŽÏ÷¶�ªÏߪüÔ߯í„dÅk±G­+Ûk}`ªÒ•Ló �˜Ö¹ÖÎÑ•¡Ç[Y?~Œ½@/!Í•CF’ý”{ ä«ÖæñÀÛ[(Ù1z�Q�§âØ÷­S³žiÈ_Ïý­¼‰nü§öcÈ ¢C¥¸ª+÷Ëz?×§jU.µhY»ÙÙkÿÞ‘�©¯Ÿrþ«ûôY•ŽlRî‡�÷šû!nÔ3ÙöC­/ëûŸõgwõT­o­yÃOÍûð}òWËÝBñvGù·´Å!_dÂ=µ£�\yMß¿ç÷ÜHm²DÖø žUµ±!á|?~ŽDŠŠ±aãj¿¦§öÔó»=Á^¾ö{>UÜ™q}:ˆß°Ì2ƒR—6û›âqŒ{W%ÉÞÐÇÖ©�‚ÀœE Fsïrµ`HQ»þºíµ¡vÆŽÓÛlˆÚ½€ósâÈ : k÷¼³~¿vÌýt ׂUM@Íúù¹íÿ×°û⬠zæä1§Ö©£grmò'°pô…œwtÝæ«åǽÔòc zS~œÛQÿt�¾ÚÍÏÖ“¿“Cëà9Í5íÞ§óùãüH3çs~�\wëCFœÃšÔÚ½¯î\»£ÏÌ®åm©¥–ü„/°@÷ˆöúŸ¶è«õ¯Ÿ¯³ŸÖÖQÿ´¶³®¯ûc§ÈC-›õÏÎÎ=»ß¹VÊVÈ$ùr=ä´söÅQë?]‹÷¦�jU~àà»õ÷ÖŠªñ„�gëëõ«×È}«øp —¬ß¬×®?ÛÙO2ЗþVg×nþ]�£Dæœ�ËúÚõu›å ¶õgæÄϾÞ'³>¢hÒ¤I™ÄTuGöU„"÷ìO÷C.zh\uÉe—d¢M+œªJó%g­¬¬ÏŸrÙ‚=u=ß­ÚK]­ƒµs´"÷õý–Ÿ�‚@û¨} ËZ@€`8u�ÔÂi:ýŠkÔŽcÓ‘£×é ºøåœ0dõ34_˳|VŒg�?({ÿ.–ç£_7c÷Ñ?Ρ¿pŒüqô•œwö(ÍòSËL_Éϧ‰sgø]-‡~ÖrXãÑÕw»úý'1æØþ}@9»sÔß­ßWkSŸ¿«Ÿ³#Œd¥Í½q ÃzŠ]�ãûÝÇ'/Ø ÿ©¯ïgo¯woϵaWß_óïÛ•çÌóFYXŒ�ž;o¢—ÿS_ËÏúÚ½ÿæ[ÌçhÒ£aØüùæ¿Ïzoõú7¦;o~¶Y?ß|õ½õÆó7Ÿ·Õûv¯ÎÓ×þÖ¬˜Ìîÿ»—|®9 —Í÷P_×OG;x6Ÿ·'Ÿõj©e¦'çêÎgFOŘ3¯¾æê¬hÕþ¨õN%S£é…$”&FÛ˜jÔ=£Íz;›™–ëûÑÏÇî{ÐçÚÏGÞ:'!`¦•¹C†N«2Ò¢V„ïÎ<¢Ï åŽ �v(„Q;è•ï �‚@A  P( �‚@A  P˜(„Ñ<¸¨å‘ �‚@A  P( �‚@A  P(´ƒ@!ŒÚA¯|· P( �‚@A  P( �‚À<ˆ@!ŒæÁE-�T( �‚@A  P( �‚@A  aÔzå»�‚@A  P( �‚@A  P(æA a4.jy¤‚@A  P( �‚@A  P( í P£vÐ+ß- �‚@A  P( �‚@A  0"P£ypQË# �‚@A  P( �‚@A  Ph�Bµƒ^ùnA  P( �‚@A  P( �y�B̓‹Z© P( �‚@A  P( �‚@;¨ôÊw �‚@A  P( �‚@A  P(̃Âh\ÔòH�‚@A  P( �‚@A  P(ÚA Fí W¾[( �‚@A  P( �‚@A`D Fó࢖G* �‚@A  P( �‚@A  Ð…0j½òÝ‚@A  P( �‚@A  P( ó …0šµ¨Zh¡�þ,°ÀŸÑ'êÝÛ~ï½÷ªiÓ¦U3gάYd‘ª_¿~‰ÑüóÏß»úŒœ­]çõó·«§æu|Êóõ …0ê\ËY ŸI"Nï#�¼Ú`ÄAŒl•FƒÛ=õ§òý^x¾º7žiÊ+SªEû/šíNIð êÁS$ã#¸½äÒKª×‚X7ˆ´µ¢ÊhÕUWý‡k1ê.]Éõ„ �Wùë_ªÇ{¬â³¬ɇÝwÿr’pŸŠÀÌrÑvå!òHTPÝU{×\}UÚÉ£�þAµÙ¦›Ír¥ÏÖÿíj]»zšº"â‰Ð{·ÞzKT™=š~ê;áo¨Vž/þ÷ÞûïU3Ã÷d÷?ÿùÏW£ÃßX7ªÏVŠªG•Í}yÌírÙ—ÏÞ“s·+=¹VùììhWOÕgçé$°÷´÷‹$Ë̿ͬÞO«è[U¿¨ø[~¹åÛöKT¦e¬U…/‡ŽT5(]r©%³ u�ù;Ÿ™XÇkˆ²W".](*‡UCÕœ æ¡7–�*UmõâÔ2ƒ±^áÞýY£ÞÅóS;Ûk±eIî�ÌÖ�QB?é©IŸ¸Žîž{î•ãkSutؘâ'žx¢ºå–1™1bDd?�€¦£{ì�£(•Žs`Æ�{0 �­¶Ú*Ÿsá~ÿ¸ ‰†0ºyÌMÕñ¿9>2ÁOfÕÁ†lXm±ù¨øûZΜ˜ÙAN!LU-<÷üsÕ›Ó#Ëßo¡Ìð¯´ÒJY™d–CGååuæêþûï«n½íÖêñ(^}íµ”×üà‡Õæ›mÞËÞò9T=qtzøáê¹çžÍ¶�ýöÝ/*®†·|ÎòÅ\î¹çî dO®Ì:Ùa‡�‚ˆÝ(³éæÍÉc^#ŒGHüåŠh z:ƒÌÕ‚èÞrô–€öW$‰ö™çž{.jó�–X|‰tž{»%·§÷öi|¾;xt%×s{`Þ®üÌ«„QWëÚ•<ÖÈÜ«®¾2ýJþòuñT\p¡jÆ3²•ï¶Ûn«ø³HëõÖ]oŽ´ôÍírÙ¾sê÷íÊÁœºÏyý:íê©WF'ÁÔHˆ¬¶ÚjQP°tV~òK&Ožœ„÷;ìX ‹ø¯�Cå%²ñþî¯nŽ ÓEí_í±Çž•Ø’]ÕMÐÙ!^{þùç³A|@gì³÷>YÐpîyçfâm‡¨TÕÞ¬úWB·½�@!ŒzÓOåŒ� ùd5öî±Õ5×\]�ìÑ$~l4€v¢ï~÷{Õ6[o“í³ÛP5¬ÊãÒË.Í*ßY7 7Þ×™ž9ÞkAF ÕÆ�—Õ4‹Å¬�=÷Ø+ózf7ó‚ãC‘¾ûî;Ñî°DÞì¸9õ<½u�aôZ’ŽÇûëTÒ*‹¶Ø|‹lÉ%âæwÌ0qði¢Í桇ÇEÖâŬTƒ£ê4C¤“Ö¤Ñ"1·¥ùx+²*xT4]•Y$Íð d~üO?©FEyú§y˜GqYì‡Ûš8qBµækV?üá�—Oó¾>ík«F¬u†=õæ›Ó+YãèçÉìÔ€þÒ!°¿TšÉüÔ�ç‹/¾$ãŒÔ)‹/¾Xʉ6"‡J7{Mkâ»Abú® sièºwbÿÉJE2:ÏWÏÆx/HK×à€,ç\"duñògÝŸîaæÌ™éh8ß4³³‚(÷< „Ìú¾{Z,fgu$ïÍÏݘÅñfêJç$ó*êèJß%ÿª:‘ªo¼1-÷òñŒ³NOݼõVÛ„ã´A5dÈ�jå VÍr]GVŽF$=žó½âgÄ3Î8,zÊùµ½Ðçž»y’gôLž–Ú´à ³Eâþ–çPûÌŸþt^dû_îQ…‘sû£’°qþi‰åû‘©ôï‰aÜ‚E»�ûso‘Åù ³ü§N\xnç'°ˆ[O,U‚j‹•µ¶ô1²ZÂä¯Wþ5tÇÓù;‰ŽÍ‚l¶_µºX ÷@N_ˆÏ«h8pPbÂi~/äÎúÁu¹È¬zç}ÆûÕ’‘½t=kë^Ü}¹@ÌZs|ðÁÌêÝ÷ÞÍLªóšÉâ¹ÉÁbq]ß7µÜ"¦¦ÇL+ç“-•A%‹,ÒH^Äm„#ÿ~>«ûu®Îçâ`›'ϧ:óªbòåW^Î륎Žû,°}gá·Þ|«¢›û…üÚ3g~�ú‡-X8åÌõº’kÙìæ #‰3~>·Â Õ´Xk¸ÎëÓ˜™·dÜwÏfæµ*—öFwäŽ�Uhw—0²Îl¦u+p¦CÝû‚�sÿ¦´R²“æ›5ïû¢–™ÜñÝÜs±fÖÑwù#î³Ö;ֳƅ>ÈY�¡TÐ6•õí2j¿6ìó¹Öî¯;ëZë+×êè`$4ŒäÜí·ßÕý«Ý¿ôåô·êû¤;‰–ô‹.¾¨ztü£©/ÖY{�j¯Ht®µÖÚ�öïþ­§z¹öcf%Œz*—5¾­êCzNÕÈ{QÙ±D¬½E�½5"ôÎÊ+>×Õ3Ú›’l>ónTukç£_�C7:Gó~®�rŸŸ´{®¡œ]˜/ýºþ±§É�ä�áó=•ƒVíVm¯j½Jïѽž‘ �̥Ǘ\r‰Ø‡ý›îÈ3}Yï#Ô÷¿ë‰Íùæë¾}ª÷ \ZÑÛÖ°¶ºBj¿)gyÅ^D¨ØÃÖÝþ¨åÔçzCOÕòpß}÷UøãïóEE÷€YržM…ÿ„ðsUxÀAÿ­[¥¥Ÿ^t`ïßxÓ�ÕE]˜¶í»ßùnµÍ6ÛVË êšày5,Éë;ï¼³úóŸ/OÙ<ú{G§­ü¯ÿúEÚŽC>$â„ÑúOóÆKZ»¿T£>wNžºvž}vrÎÆ˜Ã:'?7¹š ò¸‡Æå°ÎîFÓ“H¹ìòËRyØÔJƒsøp(±yáàÀ<9éÉ$(î{W2Ö_ŽÒøu¢-C°Èùêèxøá‡«ó/øSõR´ý­NÌ:kÏ@knÚÙÑ=÷äßjð�Q¥†0Bâìºë®Ù޶á%i›YÓ$T.¿4ÛAŸá¡Vƒ‚éçl¼�ÄáÄn­.�ܸÚpÃ�R–šï«6 �1ó×+¯ÌA¼�ÇÛ‰z…0jFjîú;½CF&Å^¬# 8ÊšQ0tÈÐÊLœUãMA=ŽgÍ›§®¾êÊ$Aì¡Õ×X=?ËÉu�¡‡y(Î;)�™e—Y®ÚvÛíÒq²_9 ‚JrHv|~|¯9ŽHY~ùªÕcîÕZ1oƬe–YöÀ¥¼…c„”D²ûî³Q9öN<�`f…`ÍÍòÇyÍFq]3 ‘ZǺ³®tdg‡û¦£ýy%öˆ }õ�Iò\ûp™A*ùâgIt®¶ÚªÕ~û�º©³ó׿ë©^FŽ9f%Œz*—5¾­êüþ_þ’§Ö>%Ú6Çgr’lØxP襵’,â»ÞqÇùò€¨B*ð¹èFë¸Áöó ÉŽç¬ý,kÏ.<:~|êðéAD, ɇUb°ÿÚ1v`ƒÐæ¿!¬è¨žÈA«vK5g³^EÂÓµì=]Äï´ÓÎ� Ob“ïÑy¦{kÛCÎ�­Îgßhy\zé¥>$‚;o�‚¡£]½]'H‘ „ÐÑáéW6Kržï`Dó[Ù­ÞÐS�§¨"1Û ŒìKvBSïU6wÅÀ­7*é{‹0¾ß_ÿú×\¯ï|û»‘Øx¿B!¿öÕC“0ú4Zûk<çõŸ…0êd…k§{F(-Áÿw0°œÎÃñö³6æ�œªÏŸsþe*(k�… ^0tcAg„Q͸sVŠÌ›™ñÌ}gs/+,üñ=߉ÿ—D ,Þ‹,«§ü(iÎcV;Í`0`>Ë(©˜XûŽÏûç±7ðu¯®%sʱ‡‘Ì£Á0˨¾ÉIç Ö„Q}õ=šMpÂo“ƒUGn42gìP´øùb^� ¥¾ïVž³¾Ç‘ùkÈÜÌ8Í|‰µßÁ&žÇz þ8ðò»+ß­ïÙó’¿ó\õzÀ™ü6>ÛL½8í±Ç,l›å£+D Þ|8/'ÍÀê“O=9Ñ¥bæGe•!«DþNuï½÷¤Œ¬A‰Y{|yÏpˆ×j>ÍG7XK‰²S5ƒÙ„QOñéªÂÖpðÓ±àB�l/ŒsMC¾­—5¨åöÖ†äß¿¯÷gn<êý$À Ë+oFšÐAñXI0ÞC"pÑ»Á$‘ãy 7¿è «ÉÏ>ýŠŒµe¶úY›‰AÀpŒž|ò‰Ä@¹ô.;ï’x 8—UF²ƒoF`ÌYwm˜ËÊ)M^+grµ×™lߌ<�°€èîБô§ÙZÙKÞÊÇ9¥÷ _å„[—z=9éùÜñ}÷×ö}m˜IT|H˜l¾ùæÈÍúN_|qTbܼÆÐë–ÿ\èçeÃÙTmdªJÇÕBîíE�½·˜™ùòb8”ô9#žçó+¯œ$ÓÚ‘‰o8–ówt2gÚ<•›"«g_©P"kªW<Û°a«¦>|ðÁó;æ¥N }ÏaíìhœÙñh´¯Þœk?}zTÈ„Œ«®¡—T…­×@4t7á@®Tb=„l¢á¸ÖƳ°+ì¶\ÈÕAêhYÙhÑ™¡%·ß~{7‚¬…¢šG½l=ž ñM\ãžÐIøÃ©YmáþˆÈ)Õ‚gçýÂ.»FærZuêïOÉÏmµåÖIªÐIS#»Ÿr¸:Ÿ½LndÁ›U!:âJåU: N¬]]ÁCε~ÃÑ3’Aº_–?+ÍB·7öZCG¸ÿ/í¶{Êegë£Bó1›êÕxó¤VkÁccöÒÀ<ŸaÞg�}f* � Í/¨·ñ!¯þ¾bŒ{|y�x¾·?�Çzë­—2¨¹;rmíàöPT’Úƒþ?RL…„aåfEÁ¦Ab­’DßÖ[o�û�Ý›Õ^ÍŠA«riÍ®»s{ø<‚ãÙÉ�u´·[%Œjûj?ÞU†tfÎÅ‹½Nîɬg§ïF�ÄÏZ¹WÙ z1 à Šèç�¸b7È,mô)ìœ|:Aa½_É�µd¯|W…‘7º‘måô}7ñ‰ ÝZWz¶³Ã= üíá¼>òýAúôÜÕAä  ˆ=e�7è³»lèÞžêå¡C†¦=·#—ÖuJ�Í5¾Öµ'úé~òI'éþt’=’!l©êvex�·zxõùÐ%ÖÎþ{÷]Õ3QÕíÚ3f4t®d ù´Ûo·}ßä‰n‚3‚°a÷©ä“‚(E�ž†ëšÃÖÊKgôï? ÛrЮݪ‰;²�Ìù[öî›^”ˆBü|ÉKP‚Láo{~ö§+y†r��—õ¾-l…ªM¶aHÈ�ß{þÎŽvõ¶}MN­­QäE%Ï‹¡¬ƒgµ×­á2a·$¬Œc>”Ÿäroè©úë–t²;zÔè$Ít¥+�Šôþ^{í�2YÇOûM ©}ÍLJ£è˜êè­¯³Fdê[ßüVVèÓ3ýŽ˜+ü6ÕªfÒY;o�À�<ÒA£:úßøfú£·C¿~ØÕ¨Q£ª�Azª½�@!Œfƒi±Øï½„Hã»±1(eÇ‚ .�¥Ÿý#ó'XaØš…{6§ìÓÎû E$  ü‘!J9£pʰ3¨ÎÔ™.Ê‹K�2A†’gG*Œ¸–ïÉ.rø� :ʇ3Èyó},µàM€Ãp5 êõ¼–€è½wߋ;H:Úƒ7†:g»øÂŵ(ΡûöÿÝ#G†Zýõó991C‡ÏølýG6ƒ£-£=|øºñÖœõÓ©åÜ7¶¥28œµu¯»Ï‰4“ý˜>MkÏ;a\fD‰þü¹®<÷µT™—W^y9­`ÖÚ¸~íP#'8Ö�q²žä”“æ^2Ít½&�ûü¸Â¨+ˆ3ÃI3°úø}Vì=Ïf²0Âp°ªrc¶ßýîQI´u´¦…9AõŸ®#X?392¶Qý�<µþ^On¿Àœ{ÇŠƒWLyã¼pÈŸß7†ù-ôWÊÌpózÖë3·ü´Ÿ>ø@¼eëÂpdžL™’1F’Cà í§ fŸ½÷ÍÖ+‚=è-BY•4qB>ó!%gBÑ_úÓÏвõZ0*Ód÷§L™­²—äï9�HÕH'o¤[ :é‘GNwÝõ‹)o2§‚cº’“vÕUWeû$çÀp’­›=àžÇ�•qK$q°qdÝeþÝ;�á¹/¼øÂêÉ'žÌï Æ�®o-‘WˆèAƒ–©¾ô¥Ýs? ܵ<Ù}­;—Giµ}®’@%”!êt­=Âᱯ—EåÞÔØÇk­µvî]ûvzÈÔ“T 6]SF™#- {ü]wÝ•Õ9÷Ý_£Ã×Y·Zás+dY¿}+pÐFª‚aŽãœvgèõóq~÷&Ci.L× ’‘ãïd]•9A!,]½^œ¾³7�û´ÓNK¹¬R¡¦…Æý œÙ8ºï«_ùjb'hà{ ü­‚ÔÐÚ¢ ÂúZ?É�ßñ?)pçç�“[ä’ù•bïªÒ0ã�½9% †ð«>2T›ºO²ÌÎù<;Y˲Ïï�6¾sè×OÒ”ÞÓŽ$)#hûkÌ�`/Ý£½ïûž“=T�‰HÑ–¡ÊGuæÞ{í“{¡3]ÀöŸsöY)îkÝÀ¨ê‹Î¹ãŽÛ«ãŽ?6×N«2K@ŠÔuÀRà®bÐa eöùÍx8§êëÖ¹¶Ÿæd¶‚ûÚÞâ£@R&C—Jz YehE/xC\fGÔäMÆZ•KIûõž{îéT~�[î�nîèèªÂÈžöv°ûî½7dglî~„„¹x%µ‡‚$|‘­ªvdS ˽ñ½3Ï<#«£U Ò{ª)}×ËNØ k§Òè�C¾’Õ‡HÓW^~%“:®í9µóh_6®û~`>9°–Ø™/t¯ßˆê»³®ô_gGí/"ÅB=¤ŽbÿÜ7}ÁFÒð·¯èÅM¢rr£�/ºÃówv°­èeÕ™Hvª¹D ·£%"�;îØŠ®F°«9W²‰øÛxä&I`«ü8#$ =±êª«'1®­’®°÷}gÇwÌï )ì­�ìÞ•Wægìe:’~pMzH ò wdÊúë�¿sþnÉA»v ahý%ºµè-¸À‚Õº9l»ê' ’µ×Z'E�}²z*o@IDAT—€éŽ<“u¤¸½€ Q©ò§óÏK[¿ÓŽ;§~AvuUÉX­êmkANxðþêÂH˜©{Xg¶aÂdß ?Áº!LG†ÿÃ6�óÞÐSõ^ª #D=¢˜3Ø‹ì«Øm÷ÝwO©¿ãgMœ!4é\÷L¾�“+†N�4Ç{³Ftèa‡ž‰$x8È¢ïñƒØ$ºÁG�»û½1 ã‡Ç÷ÅD#ºñ›G~+ £šˆÎ/–ÿô*…0š œœªwƒ,Â\¾Bùnf 889 /½ÂáÔcSFÅ¿ÍMGõþ0>7ÞxcuI(à%ðtFqnÇSÿÔSOÇcÈò62½K±€å¦´) ×Q0“ÂáÖ dßF—½Ö[-h<÷ œ(¡C†fV€b„ÅGÉ0P²IÏ…r¢|8Œ²]Ef6¾Ã@PZ®[+�¼�þ§&l<§ŒºëÊVË`Èd ŽgÛ4ª_†Äs2zœG#ø|&3Þw ‹#ÍØ:4³ô �@™LÀ€�”qÔ™µî>'\9Ò çÑ}3Þæ–¨€� ”f�„cÀÉçÐÃVeK:_/¾”m”þkŒ8�uE` ï`êþ}G°S;À œºOÁ�ƒJ‰ŸuÖ™9»äˆÃ�ˆª‚­óÈ*И .‘ æÏ~úó¬úð,5Á•`Åúš0ª ÝK=ÄÇ3v4È#‚à|Ëúé1×þdf“ ‘~à LŠLžj rµñÆ›d‹ƒJ>¬‘ß#¥¬…–“!An�Ãz]j|æ–Ÿ2~‚U /ûÄœ+™mÄŒµMç5”oº!åN [·Ó�s¤�ꙿFÉ�Ø¿RG ¢`…PA0xÀ�Ibp&ì_3.¼OÇßÍHâLq‘.0µJûÔ¹FFP è#µ9Ɔ¯ ¼œ�ŽYc�538ã0ÖþÈ£Ç0È+Ó¹Cè ¬Aë’ÕóáÈjðÜÈ&zÃõW ²GU â�3{Cì óX¶ßn‡lóXsŠÜÂ褓OJGH«BJ…��“ˆ@Ü)Ï¿%ôò‚!7;‡c«½IKÖ´À›¼©Ôâ4Ó±‡~õÐÄÂ5ì£ .Ô†·Ý¶Ûe–±;„Bͽ©Æ@Î \²‚&œZ‡µ¹é¦›_ѯ ø€ý÷ÏŸ�ɰµ‘á¼9¾{ìñ¿ÎµØo¿ýƒÈÚ"ôÉŠawÞO{¡rJ• ý¥UC%ØôX7ëþç¨ì'÷D7o9z«$EؼyÜoŽ {7)ƒc�9=jßy+(bÑø{ì1Ù‚°ãN;g…$rNë9¼óÎÛ3Kn¶Ûvû¬L¢ûíëÇb î½ïž¼¢æûßû~V�Ø×t·á¾²¦Öl稠ƒÓÀXr;!tŽ,´=A³ Í}cؾÙn�ZÜè+¤Ôb‹ Hù&‡‚öA%͉'ý. ?ò`_z¥µ·wák¶ÕäÉϤMs=­…ÏÆº7ãa_ÑsÔîȵó Ìo¿ýölÇÒ¾)P‘¬A :ž ŸBÀ¨5‰Ý˜sÔìÌîÙ[•K•[õžëL~¬|fµ[õýtE ˆ/ÿóeIFó™È…gãwHè |n¹å–”)%H£}öÙ76{ƒ<žwÞ9)�d–o&1aþ ’Xµ$‚™��m¹åVI¨Ã¥qÝSWÓÑÑaâÊ0dõÉð9­îÉ¿‘q:Ížéκ²[=9È·ÀÔpÝ7Ât v’ÞÐ.gÝ#Öß ÷}íwÎîðVô2Û Q€ÔmG.ù²íèCö¯~õËÔÉ0Wé5jôè\_ö€Ï¶\�Hˆ½Ë.£ßžÌ*Xk¿îðõRWÁ€þ»âŠHDÄoØ,vo³´{|;‰˜3"ƒ¨�à 7Uµ.zô£Î‚Ûn�õx-õ {n$»Ù9¨÷POíâN»:Ÿ ¶ïüm³ŠF�Ú2õ"Ý…H£k%$|´­ó=º”ç$_GdbÄuç‡ý† ÂÈõÙŠ®#ú«½-aÒ�ÓÛS¿j³æ7©höß>IV]}ÍU™@W¡LÏòC�f5Æíè©z5†gÿ%ýVÉI ±‚ÆzKžÐûâ¿�BNOŒ¸Mœ2%ðdSÄ$ì˜Xhp¬•ä—–F¾B‘YÏ0ÿ}a—/d+=Ÿ¹žÛGÆé-öl»ó9Túò“�X¡ ½Þ%*€%ÕÏ=÷ìL°è„PÉÜð›?9+0ORþÓ6…0š „È¢i!ÈÌwß�öªÈ qfˆ Ì÷ P¸hµø€¼¤ÑÜtpH»Ky.™ ")ÿŸcþÎ;ï¦QÙz›­3ëÄi”�uP5¦þŒ³Î¨žç;m³Ê†¾õÖÛA½ž•GœÓð÷Ýg¿ÌVø ¥—Ly°1cƤâ¡X”€ÒZ²,Ç£B@v˜“Ö*iT;2âT픟?”—@ìàÎ`^ P;@œA™ŒŽÌŸ@–C£g–GPlÚ°<Œ²´? ±ƒSÔ“çd4e›¬�ëRÞ*®ÜçkaÄ€jPLÃÂÀ X‘ Š{$ ¶®¿þú4NžGPÀ1´nŒ¤Àh—PØ2H-ŽžFª<Æ=† ˆÉ /º �˜£Ž:: !ÇäâK.N2RpÉÁýÉ?ý4 %÷º`”ž6}M5g*z‚ò£#ÂŽoެ9œ·Þf›tÖ´a‘Ù‰'¤ƒbf ¹Þÿr½ fŒ�'ûèú®OGù�CÉß˲äžhh.ù{#S~<û½ùlÊØ÷Þk¯¨¸‘í4ö© @À«U…ó±~T9ŒˆýÌAõìö$}sÞŸÎÍ 8甬Nç›nAt "¿´ÛnY] û–C©Òš˜½OmIäm¡ Lß Ý sx"úìï5×\#+38–S‚аž~Æi¹¯ö ¢JVÝ~¶ïí5r‹Tð}{†ï­K-$BŸ3¤•çÞ7:dƒìšõ¶Ï8»>ã9è±!®µV£,ÞýhG9æ˜_¹>5+ƒ"«¯¾ZêW2dV�4LÕ›äÌ 'İ–7¯½…)Ç÷ìsΊØr¾ê ƒJb…~(‡ãŽ?.õª€æë†SÊáv�¼$-bíÙQ‰BŸ!®´ïu‡0 qàTŒxÞE‚]~ù*ä„Ãï!HÄ–ÀF 92½³£v aêïOÍÄw¾óÝl��9 ±Jbˆîãxò*àãHsXéç .¼ `k£zÅ,"„@­á¦êa$@Fdªo@ö2Ë ŠÏõËÏú¼}ÝL� lš £ûbï;ò]� »¡¯?Hw[à{Ê©'§M=ü°¯'¾*BTI¹O$±*e÷‡°óI*ae°ç_x~êt�#üºC ¼µjй$¸áÁ‚.kcß® Ì~CTyÄ‘iK8éœû“O9)¿»å¨ÑYéA~UÍŠ=çÞº#׈ �ùر�v÷c¨*âÝuù5¡uÒÉ'¦\jÑ=zË$¦0�­Ê%;èþí›ÎäYD·ÍÎ�5²� ¿&ô=�rôÑ?H¢Ï³Ñó'üö„”]²Do¨(d9'¹Ä©V¹!ô—€ë{G}/í™p~Aµ{ÍJáÀ�ÏPëÛ»ÆÞ™û†ì|q×Ý*Á¦ {åÜsÏÉDûȾØ9P2oß$n/<—öŸ¿†4¥GèÃî¬+\zr ™o¿ã¶Ô¥t:?‹Þ4pPúbh„ùhø WtÕ×”˜jU/ŸՎ\ÆÜŽ>¬ £ »Ú£bß »A±}þ°'Öß4ÓqK‡MR™?û]¢…~Q…1|øðXç]RVÈŽVÿÓNûc®é¾ûî›D„ ÝÞcg|†ÍQ5Ò°]Í­2莴j·�&ìÇÓa7Ùwþ«5Ï¿gØ]¶‹\€~I’ó‚О{¥[ò~Ûçû|\mÎ’U0CVó šýþZ®fý)ÔŽÞæ÷�Ó{îÿ!|>B˜þ‘ì²�ØSrpÝõ×U*·é ¤¼–àÕÂé =U?—}�ôiì½�‰mÆ qº=àÕLÜ�;¾ß}÷ß›ûÅý-²È¢éS|0C‡Kc¼È°ðSTvÓëÖ)ÔL!°ùv’#ì¬øzÚ´éIX©VM7:SŸqˆ)ù“l{+n�@¢'EÒǰp>†5lèèOŽÚ¨Ÿ·ül�BÍ¿·ƒ,™Î0âû©â¦ùÐ ¡Ò¨ô[D|8ø²ù3Ÿæß{J!Cd|ð�TH ‡`‰Ã³[lfØ $dù”®�‹1æ@Êr+¡•‰à* ø©~ÐîscT8x»„a¦ˆ>�¯ê‡IA(É(íú…/F€°é'†Šö”0Êà#‚&r TZvì¨ïÄÀéÔL ç!ˆ�ôwrð£þ8²VÛäzrtš�¾&ŒdèZÁ‡7FŒ#¾~D:e×^{Mîr¤BDkO6ÉÌ2Ÿ .8?³o~ëÛ™UgH@ëœøEE€êoØ&ö›}d};:OÕ]¾oÍüÞ8TÈXCoË’â�³Ž¤äu×_¤ÈÝéÀ"EÂˆ×æc|”·_|ÉE¹ß­ˆ|MkdÓ� ×IšyYN?‘?HbŽ¢Ê2Á‡òÞ Ô§æl¤Ã;"e¼9�k¬óíá˜i:mðà•’°@¸<†`Q¢rÇ:ÊÆrBÌÞq�kÏfÏyVÕ?d-"J•"ÂÊÞüÿÙ»ï(;‹c]ø/Hä "Œ@ˆœA&GcŒÉŒÁ�8§sÎ:ÜuïúÖ1 &ƒI¶Á$c‚É‘EN’YDID ¾úÕæ[ã‰{fp7kØ£=oè®®®îzú©j§s š�H¶sÒ¢@£/]kA£ŒŽ;îg (ï bù€©” ��;‡|„Ü ›.fçNIfd,ðÕñ·q™®,¼-²ì4Ïg÷>èàj«`1Ø%$W…¾Ð¡[n¹9’Ûÿ*nn»ívÕ›mÑ#À¨¾ßâÒïB’„É 9a£œ@,ÐŽÌ Æý&Q¿® G×ÜÅ~ýþìôb^ØgŸ}468Id‹BöÕ§1bÑIÎ� .ücÚ]Noí0ÙíTrÜļÄ6Œ<ãëÁ¬±‹naLç› Ç¿=@Ò ÈÀwûpÉ+žK˜d?ÿÅÿ¦Èa·\]’§�vJ0xžK‡ÅÜZç8j~¿ùøÜóÏÍvi£èžF 䓨]àÃRaÿ:ø«éøq*�#s6ljmò·Ç{Lsé7ùLŽþh0¼6Éùî¡�oGò°NPºÓkÇœÓ$äŽD?9Luá a-ü/SÌdÃv`ätUúª—luWúÓÕ»ýÍz¢#ÀHx•5ŽDãÇF…SŽ0†‹6Õ6r_ ˆsˆ…ŸÛ`ÁÂ6¥SÆ´vZƒZ—z®Ó9ý}vŒldãyÓ�Ûºë®sÅëy:‘¾�]§t®ØvÍx’¸³Ûxòwï²Öª®Ýõ«¶÷¦4<“�£‡BV´@¶^ô3ÀhµX“-k+ Hwë>Žk_ìò„ ¯ôI/m²-­ÚÃ0â¼G7  /�û�ç½Z¶ž?i’\Pïçæ¡>—óŒ^| W]ue2;mN™?®ægó{ta¬CX`�꘣�ɲàŠ�ö€ý°n2dhÌm��ïNZ�·ù’F¤M0¿þé4»ÚQÒå\D(|oõ™~³/| ¡¯Et¶½5O=‡hgg…-í‹ÝvD­§@¹¶¶áÕþûY?¬=Ý+P ÖF˜�cÀ)æ>�ÒW;U¿Œ,è�Oó§5ŒßýÔ¥þÞ¿­gÌ]ì“ ­WBOVŒu àK“ô�¹J��5!çŽ#þ¢kù&üÀóQ¦›O­«ôYs½Ô׿ÕK=é¾â:ß•2p(€Q'²};y½ K £ÆšþÂÐ×TZ £%‰Žú¬Tz©7ÊûøgÇÇ‚ç•i;ÿ$“xO#š ÎN¶øw oNÇîoW\žy3¾üå/ǵE.NíDœñ»ßÅé0�&(Aw$â±ðälÝ;Ó—u[ˆGÔ$j¡-¡Y+…1c”욎0€v28�Né0jLГ’)®ÞŽñi‘œBˆÙ v|�轃Eê`Ô;sÞgG±7íÈ1Èvy8} ñ¾ð…¬ûù8?>ßÍ�C§Ž=2ÒoØMÓ/`ƒAnÌ"?qߟ$“½#LùN8¢v´i…ã‰5À¡rJÚ›1At•ôš€[FúÙ„xp8&À‹è?™›H,ê¼óÛÇ|;“tÍäªût £:T£·òy-rç4F;w&®k0²SÃ9ÅÀVXi%É"‡Äûú€F–MØkrC¡ ÷G¡»œ^TõáÁš_ßQ±ˆ€P“õ%†D[Ûðé.ÎÐ% ö'¥ù˜d€,PUhΕÁxxú™§ÒIQ‡½BŸ…›¥# W¥Œ,JìhÑߨÒuaÇ0·„Þ`RH¿ûíïf¿`Ä —º$¦(ú‘m‘+,:4‘ÌÀ' �[=ÀÐÚ± )”’}ŒŸ 9í9ŠFŽ\5ÿ]ÿ�ÝàØ±ŸŠ]Q6Ñ¢Ténámaìqdžc}_Ú‹2á)“Fi,êÈsÍæ…\I`}€¹òë~®ßÕ·¿ý� G“§¨v¼ê…Öᘟø›3œØ„õІQ}?½ç\ ¨£…! �cF@3s[ùÓŸþg2l>n@‡µÜ€ægDRjö€-±`í<±µœlzÁÑ®Šú¿»…t{ÀȽßÿÞÀÕ?ú©¹tú”cÓœŒº±fø(í0ùr¶Þf›ÜÑG›ÇÔùÅ/~ž¡m;}~§úØáOú·Q ›B‰aêTì `Äæ4Õÿâ`~ ¿õ­cx]6C*Øåœc\ª›$>`—#vü ǧ3ñÍo|+Ç-ùp`ú0JfS€Q£†C8=Ð dÄpÒõ œzÙ�þ4ëFG¿wİÙl üêø_%ƒC¨¤SÀ†�?t¨¡wÖ)@sŽÿ a7— ÝÿÖ7m l�6–CÄ®X#½ôò‹‡uE¾ÈøNö€C:×\ƒ2÷Æ 'Óso½í–ԇѣG§]†f÷Œ-`²0j 6‚NµMíÎ^u$‹®¾KfCô-Ð�ÝxååW²=µ-Á!3À‘yµf¶wöLã°/vÙ<ÈlU/k¶C«ö°Œ¬M1¿ëÚ @k.S§6Ö±¬*¹©lag¤Ók,}e §_7��D€¯y Œ‘нIžGÅÆ•͘9çü¤Ÿ1=<ÇF£µà Ð£\§ÅF’Ò�´:oÙÐÀ(Ã=v�²«˜r6b›‹õ{«úÌ6›—ßpV©7èz­ïÍïjþ]?õÅnKÙÁž7Ösäú¡yÞ¨ßÅ&[c™Ÿ¯¾úêœë¬›çJ_íTýŸäQíoþ·ï›eb½†áf¼Y‹9äÇm™$9ÅçãùÕӾǒÛ.€k~A3`DþBÒøOæsëC¹6`ÆÆškDô÷×�úzê/¡®›ëV×µþο›ëZ·©|öŸ `Ô‰,ÿÝ£Z í±Ý=ŒätÒ`7ðƒE$°@:唓p™”ÀC#ãÿð4˜’n2&F@c¸`<,Q¨M^;`bÁÄÕ §º¾­~öP«ßsC,âþÏÿý?‰†CÏ1¯¶ÝvÛtfêk|ª·I]^€Þ´S²J(þøñϦà ð9è ¯&Óè¿úEž¾sà�%AX�µÓ"Ö^síjß}÷͸—%˜0îŸcÃÙZºÚm×Ý2Tnž0¼ Τ$îžm‘Ø ´ïÿžF!ä"WQ¸±9p|ì^´q iNþJA�?æèŒBOP¦g4`ÄkE>rŒPºM–’ƒràíêqêé;àÂNp3S„#mrïo†ÙZøŸ °ÖBµ?Š0Ι�I`HÍxiÿlGÁJJ-´‡óÉáÜdÓ`·„þ6—l¿Ý¦dŒ¾ð¨]ó”§Uó²zœXˆžv‚,m0uä×á¼Ô;G5`”Žz0‚F6€:;ªrg¾1{~ô£Ÿ¤þI6 à´CÆ9bÕÔçºîä‰eÄ®�ë`ÄáÖN¹�!ÒÂIvøì¹S_ßÛ“ÏîÞµ�¹;ÀX}‚"|PÙ\jù24m¤~3®‹]{§9bŒýäÇ?Í¿C8�ÍetŒÝ“Bîì–ËÆnÜ#Ǽ^äMþ³õØA‰õ5ÇO,ìå´³cøßÿõßÉäi~ûßsÇ<œ[6êò¿ý5ÙaúR²x¡˜,ÆÀx„yP±3½e‘IWòé0z*Ï€”Õ±Ùq‡ðØÜ&ýwÊ©§$hF÷Íaa€Ñ±Çþ,Y¸{í…y´yªÚÖ\W^í˜ñÆ©bò`õ02®€Fì•Ð.cˆÝ²9e†CBOÈ•Ž°èÚ*#FfN6§ÈÑ€#0‘îvû0Ò¿ÀA9í„ZØHh.ìÀïÏ>+æÁñ Æ�„mr‚»*}Õ˾:bæ96ŠÞ4‡¤>8Qæ�hðÎ £HfãÇ;ãœc@ÿxváþÁ`2ËÞhŸ�ãÕ5æWs6LbMõ¾#GQÍ çÓ9x×_}²G<ÏL猭aqù²á‹-¶xÚaz£tg¯ºê“Žþ¦®êMOýH�ÑB/€Ål®:­³Îºy:&=éªÔ­ÚåšùÖª^š'9Ó­ÚÃ0²Qa½ 0j^Gh;ÝhÁã3—‘±á�t‚ É”½5FßyçídŽ[£î!Ÿ6ZÙ¢{î½;tྠç9ü°#2ô­+¹¶ÿ[wzÐê¼Å6&`„ €‘9E^4€Ñ;˜_ Ѻ>Ó¾èsýœÞ~j_ì¶9ÊF›<¥6ƒ­!?ÛÁúAûž‰kä3»ðÏäÉ�?úÁ�3LK�ûj§zÛîúúdf;plømêgþ°NÌÄæþCll¾ç åzÖ åXä·¶qxÙ²�×^û�4ÓOø(oï'Ôõ)Ÿ3V0êDÞÿN!iÍ"0‰73Lz Ùå°@a,ŠM &7È/èà4ˆi ¡€š {ÆosGÌ¢ÉÎçR�Rs9’Ú¡W[°n½ÕV¹C¾Õ–[§“Ð\ßVhÀˆÃ© `oÚi§Ïâ�fÁhQÿÕŒ, ~ñËŸç®ÈAÜŒ"áªEN„]k ƒÅ_,™=…ëÂðêáSéX{Äâp�Øm:%´ U¹yg½}ÿ÷0âtj'†‘&‰¼rÒX”šd çQΠ%—Z²…žt3>Ð #ac˜O½•ð`„�¤1F8Xv>,Ô,v=ä°p¬6™ŽB?P€gA©\%�õnY«ã¡¾ÏÂÒâl…WH�ÑÆŽŠ�y¬vÌ�Í óÚkáð‡³I×0 9JÆ5?ºŽë­·æéK÷Ýw_&`æ Ç®JöèÞö€‘H»[”ØÂך ¨vsÔOŽáI? Àè"Ï}•Ë K àÛÖ6¼ùötfíä[ˆ¡V–/„}Sß /üS,ø§Â­±Æšb·}QÓ= ›ôtá ˜è�úµµ527?º–¯~ÂÊâðOŒ…Û©§ž’»§?ùÉ$`Ô ¼ÕÏh'gL„�6�Ü{TÚ�úšŽ>9¬XzP:U«; #� §�ä�-iñÏñë `Ä)ª#¶�~{†qk.b_^‰]uãN[å€ر9ô«¬«�¢P0/ ¹ý ¶õ6ÓXÍíí0ª€ÇFÈcs!_É¥Í7@³0Ò&¡j¯À@¯0Œ�:´«~{È®ëô±§ # ]åˆÚ°ðûa‡NØÐꯔ¾óü[l‘IMÙ °°Àv"®¹æš‘](B!OÇ’³Ó™<êzw§×ÍŽ¹:W»í 0jÈu»éÕÙFÆvO£¾êe_12ì02?Q's›`ì½%ÛºÐó0§Ñ˜ÚÊu1‡³�˜G€T'$Ú2îÍéæp,¥qÞ ‘6>š#ýC°R€�ϰdL© Ø+ì]N8¡l@M ºù[é®_ëº÷ôS…’ÐSŸtA›…ª û¡ïO=ùT®÷��aëÆfµ@õ‚ /H ŸÖ Úd]vÑEf˜ìG™6hnMSÊÌ—@Œ:郧¤×Í"0ø[Œ8h»“Å"Hx”*FÀrÜÏ�«^C²ãŽ;¦c-n­ñ¬H¾7nìØ\8ÞÕâǤ§LŽdÀb+ggCŽ“hw;ŒÍméê÷¾FtoL ,]sað9Lˆ½i§IÄÂNH‡…'º¦¯ŒÂÁx;vŽ: £†P8…ZLX�:MJ8�E3¤_ÒL!>dœE!)@‹�Ã.½Eá¼SŽÛ÷w€Q ÀÜítzz¹°9§8ÒÚ#4 éo—_žïþîw#‡Qè‰þ<¸Ñßµì02Ùµ"ŸqcÇ%`tãM7dþ @ÜС‘ì~žÁYu²”kË.8ùršŽ�ÝOãÀN‘|9Q`f¢´è`™(R=Íad�oq¨ÂÞ�wõ–XV¿¥^„SÒQšý12weÚÎ0ê|[ø8� Æ™qRãRK/•cÅζ’ÀjìF/�äèvx±·è3*½q¯.Yذ 2c‘0’£Á²¹Ñäÿ z. ìûßû~²œ2 5r‰`qÖäáðâ²Eš�ëí™8ÐW§}xÞa¿$:ÅŒØi§�|m~¿1gQ«íƧ÷°m5µº^xËW‚a±Y0LŒº£X(þìØÿÉü¾ç4xÉ¢¹ÔõtZœ|jï=ztõ›“NÌq_‡\‘aÍP'?œœßœô›Ø|.�¢Q1n»ŒÜ‡Éc§ô¾îËÄíÞ;2ýË.³LŽëw"÷PD~’û\%�ÿùÿ•¹”šëßÙïµ#™v4ìG€” TØÞWÂ1·H•3K© 7Ø(�föc:À(äNãŒ(uåØÜ}7ÀèÔ�#'Ý4FNÃ:)ú‡�g+7ŠÐ,¡- Ó!ŽóEý9si…§ƒÑ†Q>$þ'\@ÁîqD�¦uÅßÿ–º+7Ƨ±b>æPÒYc kUؽ¯C>=³§€Qgz];æž�€Q}Ö FçD.óÇÙ ;†Qèå¿8bíô§–kgŸ�FrO±ìü‰‘ŒÞziç/ì’áàiÂÆ4—z\›¯±Êæ�±+,óúâK.Jp»±­­-ûˆ­¶¹F®�D?:ԂÆ9XëUc~�p¦°Ù@oÓøÐÅz\qÌ0E?3ªq2“ +¥;{Õ\÷Ž~÷^LAÌföc 1ÿ7æÏúžFžÉ1¹� ”ã\î3ÀÀ¬3Ј�I»6¿»Ì9’Ök½ŒC0ã�¯¾ØÃi€QèÈ.¡í#cÅzÚv{MÜüNˆð;(sÆÀbÓÞöÛ}6uB^€:I3¸8”ÄÔ"áÈÃí¬l�a5­F€}UƒŒþ(óX~,;³kL9‡êäµËÛcwÀMèßô%¡òyÞ¼‘\µÞ w –’â^hää@OœXÌfN´ã°“”0²ƒ 4ãÜê8”ÍÅøv”Þm±°Âô�ˆ‰_i¥•saB-LÕåkG•ÀT½hn<§QïX÷äbZ¿Y´pðÿqí5éÈOn;¸k®9ý1çtÌßßö”dÐÀšÌÅïS>YxOH†EF¸Ô§@„2[-*…œJ$lo.B@%À–kÂ\�¢ rI÷¿Ç¥~íÃRðþÈäÐ!Ì.ÌEÀ/�Ü<(ä]Fœr÷8¾ri�õ™<oDZre±?4fL:(X[ôýð‡±CÀXOŠ÷ø©%Î’0 vX„ºüŠËèž§Úoÿý“ú.\Ù`d~áDë—0‘¯�U#I~Ï>÷ìê‰ÇŸHÛA1å0ˆ”z|sð̘ƄÓcz%°¡Ýv~åH"G¡¬rz}툯e²Uãhý§`Îq4±3“ì‹ ˆÏnÿÙi!—=Œ:Öë�ŒúK/kG¬3ýÉÎéâ�FrÛ‘§Þãþ÷Ø<ÐãÀJ¶¥¹ÃICÍ¥×l¦^–&Æõ½ÁaØ"Ie× ¯Í×É_xÏ=÷$£�íÙvëm3´·0²®5¦ÔÅÆûä`L9á»6óÁé�tFéÎ^5×½£ßTt Ó|èÐù3ç ¼Èë{êSLoŽ9á¡·6~ðý%.Ûøqè^}}ý‰ñ€Y`mÅ.K@Ü `$)ï¨�?“v°/ö°;ÀÈ5†õC}ºç—2?.¡Mæýf|ýõoÍS‹ÉK(ä#TÞü d2^zÙ¥â$'f£ûj/Ý 0rt"§áSJwzÐê¼e~µô0jUŸk½éíg†â÷Án›£¯Ž�àGy(Ô7ƒ‘ºRöOûÃBl/ä)Äp™e–Æuc�¢Î}µS½mw}ýøñÏ&ƒÍ†Ò:±NX>$Ö6Æáe¡_ưÈßÀȼŒ™tCøüÓž ®;ìðŒ<Çfw)3_0ê¤,@¦ÆÂøý�ÞÐÈÎÈ”_P$tœï�üŽÄÔÅÎG'�ï÷¯³¾±°Ðdôœ1cÌ�jVaHG§”…#o1h'‰‘®w¼ÝgÇvÒ$“EÄ“ÆâáäSNŽ$toä‚{óÍ7Ošò°aË¥‘ð‹w9z~ýë_åŽYOFœÀ¶¶á ¸œþÛÓÓ“$ÛÂ~ÕpŒj‡ÉéRoÅIdêÈ­“œÖOoX/(òy?ÞÛ…|"k¿]ãÜù ¬¹Xlÿ¿ÿïÿeR>àh‡Ï~.Ô)“/#*—‡¼77Ý|c$ïìy;NN¸…~+€‘ð3¡poÆ„tËö†Û©çÜ=Ͻùæ›ÓÛ4ví,©m’ò®�’Í ³î£:W åœsÏIgr¿/ï—; +¶­9“èÈ ™hÕä×;¢ßÿþBn[L·P©eÜ[À¨^0`ª«bd1m÷’Žë‹æR‡ öV>’@ŒnŒþ|ðÁhØ.¨ÄtÄμ ÔN(§Ë"Î1áBFç�{nVå+_9 �%±Û‚X7ßrS&Ï–û©'§¤5·ifü^'ݶh°Û´Ä‹§ƒ±Näžèžö {p,ªþÐ/ŸÆ ]§�—^vIÚ+ ‚SË&+ËaN1bdœæ÷ù-€å ² ´Ój ¨ÝÿËûçiCl3›Íº>ÀÚG‚Ýeák·k¿ýö¯†‡íiÐöoÍXû9£xpõ™%NÅÞ(êÆ¹y;˜Ž3dÈдÙF'“¡öc*ÙùaUj{ Ä„“ }ÃnëÝ~Wœ%T—#tÎë4€1‹wcߎµ< 䜔t¥•VN�cÏcõÍ”/°‹S@÷Õ]üWÇÿ"n;ìð¹tLW[-’ÛPàù€ òÍ‘#áŒßý6’U¿™ 1ö '€çòg?ûŸsì¾E£E¯¤¹ú}l0€Vò‘�—¤Ýß·C¹©º*æu#gý�ÅJ#ýO¶À[vƒ ³îàƒŠÓX¶JP  G?0Õ´säÈU“YƒÁBçlB`ÔX˜öWHZ+ #a˜ãç…˜‹–ŠP]É×ÕךB»ÞˆvÚ•• gC…sÚÀè©§ؽêÊ´AtÄ<€ùe<ŒÌad¢ŸN;ý´`=‘r�Ík"‡ã”î£îôZ}ZqÌj]1Œêù½¯z ÜïJjǺ3ž0¡ã�4¡µÖ€�ã�ÿeê6�ðÜ#VÉøÚv°ôßújð<óäúÇïÀÝ × ›9lXœš$T+€(z-y¿9èöÛn«N?ãôd3m0 @@ÿ±»œ8v-CÙÂV5UæÝOr†½‘öæ€ýñëdS»ë×éÁö• ׇ™m c<ÉÙD6—\Íåæ ¶ †ÞZÊ¡å òéLþÚÖ»Cl«M ý ¬MnšÆé„��Šîô Õy ¸¯¾õünþîÊ®#­è³ÓÈÌçlÞĉ“B%€éÝÆQwzl>î‹Ý¶Æ°v±™e‰y³ÏÞ_ÊÐꡤæXŽñ‘kƘ£{ìÑ´+Grü}öþdcª¯vê_GhϾ©�¹-ìÌO>ž£_Ùÿ€jý Ö�q<_®çÎ<ów¹n1Æå¬Õ¾ö #‘NÇ´ÞXvÙa RÄù�6"1í%e—†¤y£«gµ,W ” `Ô…dëEÈ”<.¸qô Ë×\a¤}vgdºxE¿ýÉ"�ä qø±K,šíP:F^¹}#dIˆ‡|vvŒž¡Yÿšjh1Í»ï¼óÏÍEˆÅ¸ûP 9¹îeؼ ; 7€Ñ¦±ƒÍh[@ Ê7œÍ%bGk�ØáÞ¶j ÇB1�Ë�Ááß(hµrCXàpÂ[)#*ÚiR?~|Çò‰wy�6¢Èr~› æÿÆá11'@°ÁI!–Cƒ³cñã^Î�ð1†µ7íœ3tˢЉ­FÞkÉÂE]È™E)‘�#»|‹»‡8¹¥„»(½Œìúsì8p'À(‹c;jÔ¨d}Xèý“#ge­Øñ2èSã¦ýØé-`¤¾žK×SœM»£D}Ò>„ÇÜŠ|ä±Yp™4åw8ô�C“êm’ò=»+tÂŽÞ&@@´Ë놘ü�úã)¡™h윱ÉЪ·…ÂŽþìÕŽç±°'OÎÐÎ;7Néâ‘¢o(þNíáaj3pØNàX&ÄBÙc�½Â�hËñI÷ݰ� Ö»ÅÙµ ¶SjQµX€»;~îóIáÇnšþ¡©ôÜur`mãTR~N°z ¥û]$õµ0¦«€lùp–^ªql·Å9§…�Âú“CD®�E¡¦ø]üçóN¹ª?€6UHèû[ägz;9XŒ7‹s¥q<啕#çhëõÖ]ÿc@h¥´ì·]vÀ”Åáb±°”ë iñEÞÚÆN\ýµá0 J9pØŸ'žx<“’“£…÷êÆ túˆÜOˆ»$Рg “¤;ÀHÝÍ‹œ×ã~~l&Y.Â1¥ól¦1è�\#‚­qÊ\O#Ž1Ö™Tu³�R&DØfžÃ3fŒ'€R½°$:uÕÕWæx$ãiï/î�'wš;ÜÏþ�30<ÏàÔ_aÅuáJB‡ [.çs•9 ¨Ü&sN?ç­7€=Ñ#H6€ÆŠÜ%ûйFØJºd¾ÿmF®«æ¨rÌÐ̘•>ž{õ}w€QwzÍF¶â˜wõ—^²)]é�ùµýœåÝué 0bô!»pÞyçä|¥?ÙÃí¶Ý>š†íx#Ç»�Ï1=c}‰Ô_k€ øÖSaGFØ}Ö˜9îÒšo?Œõ XHÀhÒ¤‰yŠ ©H&-ÌOßÊe¨=BºœiÍʼn¶Ö“{ħÒ]¿ZvUŒKÏ`—1tŒ¶ Ész¢äÖÆ9ÀÃ|�Á9f̘°Í/e(®y–¾ªgg²g7úb—mŒµ¤—‡¤™'úb»ŒÌYN”³1wê©§ÄÆØ”LU`­Ü5f�õÆ|zqü>>ˆ¡_ ûg}çØ*gœñÛ[0Vé€ yb¬_é¿y×ýìåȰIÍ Ãîô åy+|à °Ê¼Ý`„qéT¼Þê³u¡vZ§ZkbãZ85Î82vU¤ £Ví6æ9pÑÚââ‹/ÊCSŒF|uàƒÕë~�:oý$�ƒ a¥¯v*ÒÂÿ0øä S›3ÃÛ†Wp@Ú ¾€zKz-äº-Ör6†…Dæ)}1ÿÐ_íÖŸ�uÓ&úJÇl¬Þs20M ²8æ˜ïäz„²»¥Ì| Àhæ÷A¿ÔÀdËÐ0ØvÆ…cõ\ h±²ï g@<<Ä`®w’M ¯…帱csâ~2Œ¢Á�x8xîãsú$3^,Œ»E-¥7€Q|Ú88N/b`ìd,ºØbi…¨�¤›‹jûpd„žX`YX´R€iõ. ì™§ŸîP>RvéBNdû_¿ n‡‡aÂÀ|²û%–(˜áŠWÒÀö¢�âïï¼ëŽtxZŒ˜ úýQOy °²~á(cÌ’Ó 8Ëݱp–›'¢ÞFS‚9B÷,f9',ø]t‘tÌMB:ï¸ýŽì綾Z*s�ì¾û¿žŠSË··€Ð’ók!}A„TL çŠó Jµï¿:9foåóî» †ÑmwÜ–2äÜ}ç;ßK=ôØÙ¶#j"´ˆÄ©ƒÝu´ÀP_Þ¶R2ÒZEŸ ôµºÉ-5;Fô„ãíÔL €õʘä-PÇÅâHX˜1m—}½px1Q$¶Ç8ã Jp ¼>ð+%¨â>”çs‚úí÷Ï}.2±  G² d«ž ‡š]“[ȸâ Qb;ž »w[€B˜N+œUìЀs¨¢¯Æ«zYØ8döÅ�3Öcœ5÷rÀ,ø8'ê-'Õ M�µ…½°˜S€½�:ú÷çÐúYƒÞtý‘X áT»q ÔâÀ»Žsi,8ÑíÚk¯ †ë{Ó€s'ŽËÂA½'™NñǀͲðælI2o'Ó®þСCÒÞ íE÷Ö. ’…7ý3'°Í›ÅØ©ç…zLvôI6ri`횦åiÐÊ9Pddþzpø{ ±ûì+f,=HÑ-ý`¼wÓo@VŒ¦ƒ<(ë¬ N‘\/@\À ö“$¾X5vq�G`ÜÌŒ´ÅÆ Ý—{Eˆg²–p4ÿ(o¸Œi+ï�ñÃ)†÷0æÛµ$v�™æ'§×`4‘‰È87¢€XcÙ<ðA_ ;&'[ãÄ,×uu§×¯Fßµä˜wÃ0R7¥¯z™[úÀ±‰Õ@Ò`¤~tÛæÊý‘ûkì3c#Áÿ|1f7Î�ûùÂV¼:Ávqœ±ÙÓ¯|å+™Ë�=Àf½úš«ÒÑÝv›ír\È]c-2>œ4pwÄaÆøöÛnŸ,€‘”ì4`HݘÝìݲþ3G±�Ö`ZöÀ¸VºëWúÜU1Wµ7_\{í?²¾Æ$°œ³N÷­#Ø�ѱ–°Á|4;f¾ÖÓÎÞÑX·´n—ûª—lR_ìaw€ƺyG QµÑ!?0ÁÇ<‡ûxèˆMý-|™-7/˜;­Oé{c½�i¬c·�íÖ.ÏÆœ:úî»âTÞw+¬}Ô|˜EwzÐ×y«§€Q}*^oõÙ†»+tÏšÍzY(öˆÔ˜˜«k`¢ÁLjÝn›ÛÍ½æ§ c<¾øÒ ùîá±~Xaùås“Wß=óúa‡P‚ÉnÃÞzÚf�ÒW;ÕÙ8êî{6È! æ^¿ ‡”«”o02ßßÀ_Ô:‹³{©ð‹šs‰©×tlßÌœ„Žkí�8E PÌ^é§Rf¾ `4óû _j`BæØ)tl.'Àlql¢l(‹� ›ˆÈ™>j³:ؼì§OB$1˜,þåypL°ï¢îCC.Dì‡Å! бãkç‹ Ûõ×F‰&�èË-¿\†pðì–²;o³I›vìKlyÜš!Ô(ßydmƒ�\ìö÷ô”4Ç7³Sôþ�f^{-êòæíÔ ËBP8†=ŒlB 9W]yeîœX}C¦ìù{*;¶*@P»í{=$×k"§ Fš�q`àžÁ`“JN) ³™ ±ÓÚQït«3à[ýõÓ�!‘Ä<œFC‘Cêo6nz‘¥w)Ìï#Œ-É�7µÎµ<ÄL1¯®õ×Ñß:&üô©Þyï0êN¯õá@F}ÕKÎ\WúcŒ`:jGG¥;ÀȘ®Ên8”¸ä„Òoó³ÿ…ŠçÆ ÐÊ&ä}w_ŒµËø{ô1öïÃÂx‰ñŒibüp¢m<è­óFÖ&æ=òÝwߎêKÕÜ1^|oÍÅŽúÁ¤´áa\y^ ^vׯk­µvGâ˜ö]=®Ùs`-Ãd§ÔA‚Ëuä5žåˆ\;ÖÍõ˜öÀv¿�__ì²y¬/ziNé‹=ì02·hߣ�<ë׿Ä&Á}ÉÂ'W!†N?dÓçÀÃwëÏdŠ`dÃUÈOÄXÖ±±Ñêy‹cn.$m*²Cì¹Ò�ôuÞêiHšõX+ú¬}É®�¹û’Ø0âS~Øyèæm­‹íÔkÚ?É©/vÛ:Àý’{ßþÃC�É9 À’6 Æ¿:ZóX¯¬ý¶m¬‹0õ�¾Qúj§¦5¨—¿*Ù.úzõÕW¥þ¨çüóÇÜa�tOJë ¶(tÈWMP³0b'­É´I[ÌñDˆñI±•ëõ{m›zYÕrùH F Ô™ñH'0îê �ðŽ�hW°!é"À€”Ì CÄ⾫")ç.»Äéáˆ1^ !Erм_óˆQÁÖhkkK'Ð]–‘a”ðŽŠSE,¢L¢ FZ´�½«®º*�¼Žîc¬9›ë…\öÛï+éˆ5_§ÎvÊxðþ\\�  Dþ2ä(YhíµçÞùiQ©Ž½i'™2¬O„C=îÙqI=—ëàý�% ¦  gÁ¶ìq,@Û…C­·(Þ ŠP- G3Ö¡¹ÃÎYá@ïF3chìº×Q{ÀH¨ÄvÚ9‘À3»Y&Urj.ÚøÌ3OgÝo¿ýöŠ\ôÿÜsÏ• …ÄÈ©` ´_p× >@Â߯¼"�iÎ2&OW€½«ûÕæß9vO-î1Àš 9´" zúP�rDI)™ŸùÓc NÀ‰ÝQ €àɹ•Ï �×x* áˆa´¬´ÒʹÀ ØmÝsϽr\šL-ügåÒìÆ% qo0J8èÚF_é‰äºl†\€b‹OcÊñ¡7k­µvÚ×Õ;h²·› ˜L6l¹¤0O#Ž�Vh›q71ú�ÍÃ03~…p­4|å‡âèív£ui쾕»dÀF²Ÿö‡}Q¿ùCötÝN;ÇÅΠÅeí8sÞÕèpB¡WO¹gì bLÑu!bvÉ´»ùýµ½ö^à®gaYØ ö^…Suè ¦âc16°œŠGçØ8ã†ÁLr}sÙz<³nˆ\Ncz0ÙPät1.Ø~2*Ï}5b¯"6Ôøö›;Ì#NÝ46›õ¶3y˜c•îôHtìL�±LOìB³§ÍÅøf~3v1LÖX°”îúµ¶Wíû£ý¿ëC2غf.%s`‘ù‚Ñ ÏÃl±®aÏý­'¥U»ÌÞôE/É»/ö°f>«ÿ¦›lš ô¾ìê¶×ãÔ:Ýœàôa²c/€¿ì¶{È‹\1ß­ó¬Gý� ›§wæ½G’©jNQÜk®µn©å¯mµü{ª­Î[€»žØU6­}N_Ø–ÛbCò’`ZkrdµOþ�ÂèàÖäÚW»m�Èæüv÷é˜?­¬dN¶1‹5Íÿéh«l� ÖŽæ¹îìTMëÑWÚ]�a€7ÿÏwlÐÂaÛçµIÿ!(·Ö;Ç霘öÖôÖæ…ùŽža¹ý3ä`^¢gmmÃs>àŸ¶Åz¤ÞÈîQåÊE.� ¸ˆgÌ ,&$Ò”dX€AÜU¤XøÖ2:±ˆÄtU8±âÞM, æÎøF[lñ|žÉ‹±°02Á0ŒCõÞÛHN;W.€Ü�ìýêÌ`Z¸s9ڞˈæB?&8¡oF†ƒÖQY&¼5ŽGè#«}vø ‹c;nä"_S½®¯5ᪧ�Ú—c1«Þ@.÷©£ºÚñ_8v!M²ˆú¦§íÔFÏt½I¨`ñnÇ Ën�ðò}+Bù8¾v%É ˆ©&TòW_uPGŒ�¡CçÏö1âúªÙQjLDŸ0ŒÈʇa5;ÚéýÍ¥–‹ºÛ ·[€F­=v¿ÇdÉxŸ�î­ õ3ê óëš\�N4'ɶ+À¨žÀ_&çÍ¿éG('°�Gs¡“­ÈGý8­&zÔ;Ÿ\úÄ™·Ÿ²Æà<öÐÅõ“ûpœG £-‹ràDÌœÙçúÛDºÐ‘ä7ëä7+zEO…•¾þú©“Æ%9s~„K,cØxr´½ö’ÝÕ_ì‚¿³ l‹EƒR{“&MÌ1î>ã°Rç8�—Í•{ˆ~qâ?xÿƒ†ýðÞx ú«¹ÔãR¿'î5Nj{¢œ(÷[„'tÖR´[�S‹z1)î÷\}84ÞÇFr.µ]ý›‹ûÙkãsHrí)S>Èà 0™Ø¥¶Y qþꛉ¸cÐ*Xp�ÔulÌfù‘±ºh§[Ýï½#òLÇ„�j—¼SÚé9ÚÐU©ûÝÎ ùIšMùψ �£nQ�Ü=|Ȥ»¢îž¥ÎúÅ"ÿ�Ð1ãÖóÙ8cÆ×nu®õ†Þ©[ökØ!ró,íux‚q½gÐ?N"F°GùÞOsq¿ë>ˆñ*¬ú{–w߉Рzá;õißÏôã…`©;ÛG¶êëßì…ùè�°-l"=Å0Õ6™M˜ Ýf ÙwÀë‘[h¥•¡dÍuíèw:àyÞcìÈǤ¦—ž_Ë�žÕz¬Îd Œl?ÿu&�z> —®ôš°l†~&/ 1ù5ý¤g7±ÖŒu²h½ìNØƒŽæ¯ºîõ¸ 's’Ð0H­÷Úì§áð6ÖòœYC8X…ã…i¸ðÇëžz,Ò1÷}2ž_KÝÎ1÷�ûjƒF_ZÃäXŽqèîo€äöÎ<ïµÞò· ‡ }ÐßBZ1|�!¬tׯµ½ªåÐÙ§:°ìE½ÎѦ´›¡sæ zi�¨~7¶—�=_=[±Ëîé‹^ª£>mÕÒ—ñãc�üÁ”ôÅØ¨ÇUÝÞzœZ�r÷A¬y\Ç’Ÿ Wò²Vô ë<ë…œ­‘êyÏúXDnt&ׇ©!ÿ°íåßS=huÞªÇEwvÕ8mEŸÍ…6!0P„ÀX¹ÀºË‘UËŸÜúÃn7ôÔáÓ—ÐÿÆ�1n#ÈúÁgó¥³u¬gt6Ïug§êöôö“îÔcÛȼ¢Ïè{Cbg't)6wâ;sžÍ2v[ûÌçÒ X÷ÑMöÇ3´Å\Dïõ‰ù˜îµ×ÿÞÖ·\ß¿(€Qÿʳ<­E ˜È ÓB¥±Xù×¼]©?üñüì–[0uT8ëb¼7Ø`ÃŒÃælögQϺι@ ãh‘ÍÀ1ž�-pê{ºkgÕµ^ûT'rUÇ΀maÔ�Æq ¿®ÆSh­µÖNZ»�/1óØ@§Îж™Xr1ï4YxoW…³bWùþûï‹ð²›̨X„|}ç»ßË]·®î'WmT¼«³öµFoåÓþþÞþð×Ðs§-6 ]éKoŸ?³¯'O :@Ïê¾èl<ô¶¾˜I5`Ô|ŠJ[ìFÕöC8Yoß[�KŸêJêþéI³ÝÁQjj{oÚ\Û÷{wg÷Wƨb\©cg׿Eÿ¯nŸ÷Ôí«eÔ|]+¿×ã]¿+½©WOÞ×ü|u¯ŸßÓ{µ]éJ®=yV^c‘̶b%Èc±Œa‡a¨OÕY??ôPœ"ø—KXZ„Å$ŸE{&SÖ­?ŸÕS½îÏwÖÏjÖßÕzÓ“ñÒüŒ�Ôu¬ëÉ~ÕúmlvUêñì³ϽµWÞçþÚÔŸ]½·þ[õ«:p8=¯^?õç8í«]®ÛۛϺ?ʪK-°9!õ&ÀØîô¦};ô¿û}’»Ïèé©ëá¹]õ[«óVûúvöïz×�>ÿåµ1), +kï8¤ã¾'e ì¶ú×¾Œ¹ ·ýØÓ~èI{zMèyŽÏ�׋ìWmÃzª=­k¹®$P£þ‘cyJ%ÀøÔ?ŒEýÓþ±5òÅ ÐÛ‘“ï¡£bWMòFè6Fô»¿Km¤MRJ=Ñveìê6ú¬ÛØÕõ}­s]Çöïëì�urEtå“OþMƉÛuC-9 N–]«® ™øñž®õ3ì K²~Ç·'hdwÙ½N—ùÖÑÇäg}mGŸµ\ýÍ}�µ¯ý½½•Oûû{ûïF=�¸ØX`¹¿§uíí»fÆõÍò¬û½?Û×`4<ÂkЛɵîÿÞ¼·ÖŸJoŸQ·Û½u»ýÞ›ÒüîÎîs�E–â=~zRÜWÿÔr©ÛØ“û»»¦ï®ëM½º{ný÷æç×v¶þ[wŸ=‘kwÏèï¿s<Æ£×N·cš�ôÀxìÝOH/& ôT„@;Ùj�E“H¿f6öw�êy3SþÍzÓª^týëqÙ›ù²¾§¹n½Ïîó>¥U{ÐüîVuGÚÛ³º>­>³ù¾ævêÿþ|vó{ÚÿÞz×þ™íÿ­mÙ¾˜÷bÅÓÒ¼S?Ãg­?½•‘{•®îsMû~nßž¾üÛó{¢ÏÂÖ¯¿áú �š:ej†êIÚ,ü·'e ìvsý[ÕÓžôCOÚØ›kúªçu»}ÖíîJ�zS·rmÿK Fý/ÓòÄ”@Í€A!»]Éö¯j�òXÿ@®Ké^B¥PG1¹$y–ƒCqª ¶–Øö‘#?9­¡û'öì a‹âÊÇÄŽ:ðHX“GïÛc�=3÷HÏžT®ú4K ÎmbwP•<›o¾y†¦}šÛ]Úöé’€P ¸#Ư¼òïÉ2‚ÓEi„¼ auòLxb™»h§ÏMl†Ô¡dŸ.©”Ö   œ¬-å{1R-ƒþíD®žF »=p}Sž<ëK F³~•6IÀ.³ÏØ_Éü=Mžö+´ÚNtýSPëi¢éò;hÎoÅ‘ÎrÌÈg¡8ñL\4¶Ñ@8,héuŽ 9$DZ´Pä’B,t)E’i:F^Þœyæ•ßk™L&Ü]’æ"¹"�YIuˆƬ#žŸ‹üB™ûmâ¤i!&ó†~³¹˜²ËEþ'9å9ªiû³R{J]ŠŠŠfu È?ä¤@ëZá¿€¢Ì1ÖÃõe±Û³z—ú ¤ `4�Ò-Ï.(((è7 4’ƒŽܤtœ%1–Sk BNû­ÒåAE�H@ž ã%Ųœ¬¢w# ¹�‰„%º–,|Ñ8´¡ÎÁÓÉ£Ê×EEEE]H )“/H²}Éÿ[Ù-v» !—?}j%P£Om×–†   |º$€](ÕNßœq‡cŸ….–�ÓOW?ÿ»´£“Ns@°,92س±’ÆcͧáÕ‰P SößE3J;‹Šú[lí´Sùæ6vpKŒÍb·û»gÊóf Àhvè¥RÇ"�"�"�"�"�"�"�"�"�"�"�"�"�"�"�(�Í@a—W               Ì(€ÑìÐK¥ŽEEEEEEEEEEEEEEE3P0š�Â.¯*((((((((((((((˜$P£Ù¡—J‹ŠŠŠŠŠŠŠŠŠŠŠŠŠŠf  `4…]^U$P$P$P$P$P$P$P$P$P$P$P$P$P$P$0;H F³C/•:               Ì@ Àh »¼ªH H H H H H H H H H H H H H H`v�@Œf‡^*u,((((((((((((((˜�(€Ñ vyU‘@‘@‘@‘@‘@‘@‘@‘@‘@‘@‘@‘@‘@‘@‘Àì �ͽTêX$P$P$P$P$P$P$P$P$P$P$P$P$P$P$0%P£(ìòª"�"�"�"�"�"�"�"�"�"�"�"�"�"�"�ÙA0šz©Ô±H H H H H H H H H H H H H H H`J F3PØåUEEEEEEEEEEEEEEE³ƒ `4;ôR©c‘@‘@‘@‘@‘@‘@‘@‘@‘@‘@‘@‘@‘@‘@‘À ”@Œf °Ë«ŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠf Àhvè¥RÇ"�"�"�"�"�"�"�"�"�"�"�"�"�"�"�(�Í@a—W               Ì(€ÑìÐK-Öñ£�>ªÞÿýjÒäIÕñßüóÏ_ <¸Å§u}Û”)Sª÷Þ{¯òé½sÍ5W5ï¼óæg×w6þúá‡V|ðAÖ÷Ýwß­ Ô/õõ\u"õ›sÎ9«¡C‡ö›úÚîžÈæßñº0yòäjê‡S³¯Ï=¸š{î¹³ÿf¤<èÏÔ©S+Ÿ ý¡›>gdh=ž‘m)ïê\ú™î³+~ š3ìè|=¶£�?¹ü¥H H H H H H H H H ÷(€Qïe6[Ü´á|¼úÚ«ÕÓO?]Í1ÇÕˆ•GT‹.ºhþÞß�àÜ¿üòKÕ¤I“ò½@™¥—^&AŸž¼ ˜óÖ[oe}_~éåjžyæ©VYe•¬oOîïì@Ñĉ«7Þx=ê÷J‚+­´RµÈ"‹tvK¯¾ïk»{õ²£‹ßxã�jìØ±Õ»ï½›:°È‹T .¸`êÅŒçýí·ßN'Þ˜ZÑmŸ3² ´Ïȶ”wu.�Ú²Yo¿=9õ}™eØÑ:¿©ü¥H H H H H H H H H`€$P£ìÌ~ì;ï¼S½öÚkÕsÏ=W=õÔ“Õ|óÍWm¼ñÆÕ²ËÀh„ Õ£�> ÌËÉÈX|ñÅ«5×\«ZrÉ%{$ ÒsÏ?W�7¶zòÉ'«X Úz«­«WlëÑý�]Ðy饗ªþs\õØc�UCçZm¹åVÕŠ+¬ØÙ-½ú¾¯íîÕËþ�.~öÙg«[o»%Á¾¶¶áÕòË/_-»Ì²©)l¢œyeÂ+Õ›\MÀÈw (ÂÔ[8Ç%_¢Z`Á*ì'¬£�,­ÇY÷ùlÛ§±À0�Ï>g‡‚] ,}þ…çÓKHŽ�3wy½%—X2Ya3²­¾«¼ ý¿ôÒ‹SçvÙe×Ô ú<ƒçiõÑå¾"�"�"�"�"�"�"�"�"�^K F½Ù¬}ƒ°»ë�=þXuùåÍ�꥗ZºZuäªÕ¨QŸ©† 6 xòÉ'ª+þ~Eõøã�gøŽð·]wÝ-�üž¼PèÜO<, G«Gy$Ã�vÛm÷¬·pºV Ð#Á|ºãÎ;ªk®¾ªÂ|:úèoWŸ YôGék»û£ŸÆgŒ=º:ùÔ“’¶Ù¦›Um´QµÎÚëVK-µÔ€6ÐúÀ÷pù`5æ¡1Õk¯¿V͹¸0ˆFB†„].€æFm\­·ÞzÕZ½`ÒµZù�ÖãVë5«Ý÷â‹/$àüê„W«ù†Ì—a±3hì/9Ð1 Ñ}÷ßW�{î9Õ›o½YmŒÈõÖ[¿Zixÿ…ÒöW}ËsŠŠŠŠŠŠŠŠ>Ý(€Ñ§¬1!„5Ü5úÎêŒß�‘á{ì¾g#mCzú œdФ‰‚41X’s Ÿ³«Þ—2ÐŽv_ÛÝ—¶}šï�€°XtN8êÿüç?“�‡!7¼mxµð W…À÷Ýw_%diäÈ‘Õ>û|©Zs�5´;Z�´ò3ðáO®¯ø[öŸœW#F¬Rm±ùÕ +¬0kÑú«è a¹W]}e06ŸÉ0È•GŒ¨¶Æ&Ш”"�"�"�"�"�"�"�"�"�%�Í(IÏ ÷HÐ+÷Êm·ÝZ�}öïxùú׿YmºÉ¦™ÇÈîµÜF˜sÍ=W5$r-°À'É„}?qâ[Á¢˜\½ýÎÛ™ÿ«cþ¡óg 쀥\óR$§žsÎ9ªeˆz)^_yåß§1Œ–[n¹Ì´L„ÂM F†÷ÎL!'§-´ÐBùÎæSÛü]Ýåj™À‘\1K-¹Ô´PN”w»FxŽœGvuÁ@0 :¤Z0Ú¹÷ß·w´½û°ÃލÖX}õêõÈâNý0e1tÈÐL¬,1¸œO=)í£Þ¶»~Ç{ï“{foÍÞªÞ ÐoꔩÕ!_m#«Å],?ɦΙS÷¹½á[d§}ïì˜$ïò§·§äÕ9Uê$¼€½úÙNoZ`�ù3ÌoÈ�!ù¾š †…\ѯÞïûIQ··CÞêGæ‹{èÕ‚ -z8$û¼nWg€‘„ÓX@�ç.˜òðn2i.ôdBŒƒ÷Þ{?uØ5Òùl:*ô 3ïî{î®~@«<2Ûm·]µÁV+¯´ò´$éãÇ?cë¶êö;n¯îºëÎJƒ±ö™M²�=»ù»™­Ç­ê™qbÜÑ'w…¸ª¦|P½÷î{‘ã)’3G¨;±Pô¥P°>x?¯+ôY_ø·¶úøôDãt±Å«ô‹\CµÞÔ²J½{ó�oO~»Rïå% �6¶ }^4ÆÃÐósF˜ 4¹Êî�ÐÓ¿‡zöÙ¦n €Eß`Xª +êB—�}=9N’|7ôRÃ‡Ž°lÅü‘ólžy>9í‘Þ¹§þñõ¡;BîI¬r¿"Lî­ÓÆÐ{Ƶ±užgÞyšÚ14ÇO}úÞ /¼PÝsï= `>ôðCR|ÀW –Ý:)«öòªåV>‹ŠŠŠŠŠŠŠŠúS0êOiÎÏ�H>Íñ•SÈpØ¡‡Un¸Q:$Ï?ÿ|†gq¦EËEˆÚêž±Q|/$LÞŸgÇ��ľ‹W;ìð¹tšý=™@áø<öØ£Õ?þqM-sW»î²[&•µ#.¬ŒSà�¨ cןSÆQ[&NN[k­µ"÷ËêÓNmó\Î'ïégžNЉ³µýöŸ�¶£Î!ã4bvÜáJ�Fëç#Iö¤pôæ 'Rn" ²W�œ2ëEÎïáTQšCÒÔa÷Ý÷HgîÞ{ï­Æ?7¾z?@Žd[äwÂÙxãQÁnZö_œXõl_ÚF½mwý¼ ¯NȤÜ�=!yÑF޶d½‹.ºH2%6ù̦ñ9b æÞ†Ó;)O»íöÛBv�UòAù~Þ½$Š^#Ú$×ÎÈUF¦“^¿³»OÎðK/½á1÷gKþj€�ï‡c=_ÙC: ˜¼ø’‹XúÖ7�Nð‹¬j`‰¼J)((((((((( Àh $;“ž[Ÿ.% G h³ß—#yôÚkg�ž~úéêšzü�Ó.Ä¡96gèºë¯‹Ýí»3,BòêC9´Úpƒ Ò©›»ý£ï]]ŽÌСC«#?2A €ÑÃ?œ �gsˆ¦~85“Ðrß–�ã¡=“·ÕV[åû9Œrª„�Ç€U'§æ@Ú¥ÿgJÀ0`ÂØ¨¿]~à” GÉ:&Ë*«4BPF†#¶h€H®ÀÜ~ûíÁ<¸"™[n±UDœDm™4qR2y^hátòvüÜŽáX®‘×Ô@AgÝYF=ôPKíæ¸bo¨ËÍp�Á+¯¼í�˜òE–ÃÀZ7ò˜¬³Î:ÓåÌiä~z¼òþ{ƒ‘0>þ¾��Ïż`-L­5¢=[n¹eµR8ÀyjÔ ®O�Âðàô?þÄãÕ­·Þ’º0qR0ŸÂiç$sZ9¸€˜ ×ß0q€v'Xpúi§&@$Ç�z¼N?'ýõ�€÷å—[>usõÕÖȾ<(�F/‡lÎ?ÿ¼ê…0ô±¤èn¸a²ÜÜGW´ý�Èë\/Á9f†1@•ȶ= '& UÂdíñ£Ô€Ñ-!“K/»4ÙE«ïÿ‡Õæ›mÞ!S¦ù]3S� }ѳZÏÂ@•�Ñ€- eزê]vÞ%ïb‡v¸I“&&{§Áš3;X[’†Ó €]P’Yô½{"õÈ(D3 °‹ÑˆýhÚxÔ¨xé�~û[„¢Ý )!÷”SÅ<`褱�vÚ)ÁS6 ðX’Ü\_ `+.š” ÖK,Qµ€ d”§jÙhŸqì É1tÏ=÷¤L…-Ò¶˜¶näÚZc ú<2ŸyÓÍ7æ{^íõOlV\?xžÁi GiGÈax[#ôñ9¼‘6ᤓO }œ³úv0Ù¶ØbË´¹lf)EEEEEEEEE-� ´„gðó9t»âòÜ™Ÿ:uJµÊˆ‘Ó%ŸN@)œ] Šûž{î•αª|.üóé¬=ÐÈ`ìlo¶Ùfé¨Ùù¶ë/\À�Át衇çiDBÒîºë®d aýp¸—æÆÆ‹¼0&Ï«§mÅáÕWö? s+ ßð\'Ý@ƒ]uŽý‡^­¿þé˜>ùTäô¸òʼ†3¬f‚A Ä æÑ`çpê$ˆÝ îÛ`ƒ “½ ­ü¿üå²p_o0‚Ù²l8ªœ[N ºq4 ÐhÇw¬Fmü™0„§uUjGºÕv“ öÆè»ïŠúý%Âä¢~ÁÀâ  ÓÎ÷ôÓO&ШÁ\øò¾_ÎS“ÔK�/ŽÓ”�>Iê 42„Süz²?8·ÚñŽöÎäÑœa!7]•L ,ý|O|Ò%ì+ì¬27`…“Í)ǦØéó;¥“L¦wF¸Ö 'ü:@ì¯å––q®…EP‹ÇwÀ@ÝÊÑ/Jg€Ñ¦¤9ùsGH%ø|¼wĈUò>ÀÛêÄOH@cŸ/îSm²É& ž �ë¨Ô@]pD%3´¸VƒEî«CÒ¦÷‡\±¤¾vä×S®Í×µ‡çû™Yz `苞ó—ýåÒŠéÆ\8¶ ‚]£W`è'„Ë�ÁÒæµÔ[2tÎï<£Ë@#c� DV¸ôø 8þ ®¦,à³w1Ÿxòñjr„̲k…Þì²ó®É ò^ f%ö!1lØr©[SŽq �<òpõç`ˆa ùΩŒt›î¾ö€=!¯å£�›up¢çôVýîuý ×§ÝôÐ÷c&²y®�u¸²‹“ƒ�´aØ£åÂÞÎ=xîMpXøéBÑãzÇ?ŸŒ;r Çlƒ“úŽûùÿ»ê�î©€ÝÞ€-¥H H H H H H H H H` %P£�–ð ~þÑïâ‚ ÿ”!J€ŽˆP ÌE®¡<º>@N9Ð!_=4wÑ9R5ɲo¿ã¶t†ì°tàAÕ&qR•#Í9lr·Œ3&�_§®í÷åý’áã”4LájCáÙ:1(ÏGûÊ«®L‡ê�¯†' ›ÒñÀƒØE£«[o»5ëuT8âv÷±çœsvõL8xË…( (´x8¢ï¾ûN†‡Ü÷½þúéPažl»í¶Éha;!p8ukƒ`LqDNà«y*–úsÌ„ˆ|f“Mó“#ØU©£VÛM.ãÇ�O`³ #kË`@6€ä¡d4ÜŸ`FÏ·�ùN„ól–,Nõ‰¿9!WØë­»~µÑÆ'H—áxáœ_Ãu™;æó;îŽoœ4`–EWøvY0h0uäEâ—Œ°pò�(@6€‰ëÆF¿®°â Õ�”N1ˆ~þå/‘'V-¬£Õ#i›m¶Í/l0`å¡GOðü|ÐÁé˜^î¾ûîOIèÜ|ËM!¯â½Ï¤n𕒱澚uË­7W§à /èkGUm¾ùæ Ö!o]µ½£¿8¼›nÓ`ö—P?Iå}vUÜ?3õ¸Ò=sê¢Ð(@ ÐY®"!{Æ�1B§/Nõz B%Þç½rÕãH˜Õ�7ÞX�‹Oòsÿ¾_Фáñ©�ïeê_ºaGV¢w‘Ë “ˆÞ=á`¯¾:!A§ýöÛ?Á !r@çËÿú—Þmm±ù–ñ÷U\Æ>£»ÂëØIÌEùÝ„Éb*aÎ=,=6ò†¯OÐv¯=¿mpÂärÉb#…$^§.êÓQŠņñÆbÙas=lNvëÚkÿùÕ†л_Ú3:¨ž@â @OÀ(BNvÁ ûØc–àï>{)õX^&¶½”"�"�"�"�"�"�"�"�"��–@ŒZÂ3øù�óÎ;72@�<Í;øo…CÇáÃâùóEN‡ÁéáLÝÇÏŸxÒ‰vÁäpP„ôø³DH „ ˆDðþ8Ò£G7ÂÅ8ˆ¤õƒA`§Ÿó#c&åí s¤ŒZm·ü*B¨°Wüá€o’ 7X)ïdrá;ï¼³:3úuž`'Èe"ÿ‹p¼{ÃñåP ó¶`t‘=Р$üeÎ�-'U¸ž67Ú=g¶»ýÿê�.¡0Çþï± òŽ.yaXpŠ•ú:@Ö 'þ:õb÷ÝöÈDÆ+¯¼r‚A#IÅ7‹ü>›FHØgF5XîÇòÎ<댬ë÷¿÷ƒ ¹Ñ¯Ž®ï0â O˜ðJêïïÎü]¶åG}#ߨpB PG.,€ðí€ât©`€´R€¨S"ïŨ+�CÈäF%а×È’çÈ»»*€¬™©Ç6­è™üfô ³`„ÁH/1ÆöÙ{Ÿd06·Ûß.À"¿ e¤Ë¨Kg€¢™(ú—,%­þîw¾—‰æÕošÞP39{€J °£x¦qò\„œ~<Ø=l½6~/¸ð�ÕSO=õnä$ûÜBÀ¯>¸öº$ƒ ÈÙ;BÓÍEòùK"Ô“ŽJªÎFIÂoLŒn½ýÖ:¯K ë»ßý^²ÕÅ�ÒÿïñswÚ­]wÝ5s6aÍ@Ú¼‘ïˆý!c“iCsêú›“OÌäâÂÑ6ö ödg¹¸šï-¿         ôU0ê«g±û9a§ýö´H üÂÇy|6˜.)píè ß:þ„㫱“ƒH8Ó;Áádÿ#B(ì| ³ÁFáìrÈœ‚äûß�yFõj0z)'ýUÉO"ìkD€ ‡rzGLýN�úœ„Gm “�JÆaêˆa´Â ˧cˆ À™°ŒŽg«vÐ8õ º¼û^‚bƒæ”Ž®„Ö#G¡_¹�[|±ê;ßæàm÷~rœ7Æ‚S–8ÄÚ²ÒJ+Wûì¡2k¬Ùe×€Q«í–ó(ÁÉ&ga6@/u F–“\ÁԹ馛’­ñÍo�`›¤Þãóÿp^Gï‹eÁpî…b+ ¶\&Ë[¶’ЛŒGÍŽmûÆ‘¡°¢o¼¡:þ׿Š?Ï‘€¢° ` 0Gþ©·Ð3Œ1!fX>˜@ò½pÌF/E[vøì a£`)ÞC—¼çW¿þe|3Gõ�.aÞ è0’£É½˜j'EnzæÝÚ ¬Ä,z*Àú(iÎ�”/ïÅÿ$jÇ.@]tÑEÁÎûg:ëk®¹f„Jm“@™�mWÅibÚ4³ôXŸVõLž²±‘d`ôD„ši/Àè ;íœòmn7½`c'¨½ îËÉêyëÍH˜¡£€€‘äû@ãõãDßþô?“©Œž¦w¼ÔÀ(�²Yï<ß³\MŽs@†™qØ`ôð#‘»(€ç["¤ì©¨0lÛ•lkÞÜŒ<à†ÈQôÖÄ·8—Ô|Ï=öL `¤�ߘŒ_?J«�§Ù"2–, —€Ý˜vJ!F¦°Òü ¨|bô}Þ�ŒMmh.À¦ÓN?%�+ïÀº’×M¢ðRŠŠŠŠŠŠŠŠŠZ0h Ïàçs0N=-Œ`Ù`m¸ÁF锵w08<'�ô›pÚ߬vÙe×·Ëý÷ßWýþì³2¿ÉÈ‘«&h„cg½#À b—Þ©m÷Þ{_&•=ü°#2QOD+ `$„É)nKàpL0t°¢š‹c¹oð‚3+¬M>“æäÒÍ×6ÿ^F­¶[(@ üÁh�»Åw €8‚¨Àþ’4÷_ÿFžl',EX ö¦–”ЧÅà åäKFìù Iúa]�u{Ç´nS†Nhuà 7dHGý'?þiæ‘rD/š‹÷€Àµd´…Nü3ÂFB€vþÂΪ&O¶šB¯´‹ÌvìÿTS‚]rtô `ЮɑÕ`T‡~qÚ{Æo àáúëm�áQÂ÷Î=ïœÔã5¢>˜E@ Ž}o àã£8 ìÕW_Ëp,:Hu:Ø6ÛlSm´áFÉB`õ¤Jf¦‡}Ñ39‡F€UáS£v�mú�MÀçknø|Œ!×�žï¾§ë}0%�“Ç{4Ãb�ð7*tå¿ÿë¿46VéÃI 9¸½ëLæÂܺŒgGh'` &¤m“�%ÿo.€®‡°©¢ÎÃä‘Ãh×H®½À &Ãèî°G÷„­¾zÄáìцͷ§n�Ø´¿þõ¯´9yoΔ�Hð%ó#F‘؃‡ƒÑ0Œ`¦Øù–#³äÝ8µÊ>&Ž£å9q]üçL8{päê�{ó[áßøf0u6ϼvÓkÀHh Àh·]F«N' ''�ý1`äÔ",£®£e"Äè®Lûàƒäéa‡zX:OÓ=¸“¨FFtu$©åà'`ŽjsÝxÀhLž°Ô `ÔJ»1¸Èî¾å»! ú¨"qnÍèÁâÜ^I±1¬š#mÊ<!ˆr÷›¡yÚÍé}?úB^ “ÏÇ)Lk®ÙHô]36šeà÷â>Žû)§œì¼ÕO~ò ät45B ÏÌÜOú»HágÇ�OÀ µóÎ;çwú»0ˆióÿ´Écô—Hn,TŠ W FÆàí„HŽ•µW„Œ}fæÑ°i¡tíÛÛÙ¿…PéÏGâ$«ËþzY¡@$'{aÚ‘gÝ?�=£ù{§vÍL=4öEÏš# ö!æX{Àpx×]wf~!áa˜@Xe‹,¼Hê!@ÒXÓo%€À{FH©DÓôNbèŸü¤T6ônz ²Y¶Í¿w XK‚/ŒH#)6ÆOs‘Hÿµ×^O€TØÝŽc­+§FÁô9"ì飚ÉIÿ%g÷Ï8!2@_@Í †R Çû�¬ò#m ¤šË¿n†Q³|ÊïEEEEEEEE+� ¬|gøÓ“ñ§œqPóÔ¬õÖÏÝ{NssÁŒù{0‚$À^ B>‚O‘aóÆÎ¾œBšF¬<"�ŠÓ{z†®}ùËûW˜ôûs~Ÿ@Â1BÀV0’x:�“¸w×]wë0:çìß'°!\ˆÃØ`„ƒ•$ôI6Ó׎üZ:WÍ¡U¬ÚIÃpr¼·d¼œ²0ºæcÀ“…ó×\ú µÚîÀ‚2'0AÅíÄ&}P3ô àBN ‡fÀÈÀâÀ9‰J{|Žû ` '¦FƒPœŽJ2D"Q6Ɖ¿91C­äÂüÉœHÁNª‹÷JNýÛ3N FÉ žX;¾ #,’]¾°K2ŒôwFÚ‰5&„�%vÚé ™lù”`ØÉò}ÄáGæ{;]%ù®ÛSj—p9€‚ñô÷8}b„&­!uÚל‹©¾§»O}33õ˜.ɽԪžõ0"7!aB¾î{à¾êíÉ"¶Åéa˰¢Þy;N åÑ`ÝyŒV9²úÏÿø¯dC ÃÚžxâ yªß÷"7½“� hTï1Æ�O ½Ô¿ìÁ¿„¤ˬ9y½äöüÓ3™´q!ÿÔg_qòXsù0ØeXpsÏ=8�½_j饪á¶öNêŸF÷TK'`tø¿0ŒêgÕLº ^ €ì™Æ˜ 0Ìf¾í »k{î¹W‘ÚQLГO–üýÅ Æe3k¦]}]ù,(((((((( Àh ¤:Ÿ™!çžS��Ýl»ÿœ §LIÛ\y}û·UO>ñdõzìv;Úüµpî—Zré¹Ù6«®• a…ZÉQ3a«™_FHàf‰%¯ùê¡ÉôáàÔ¡Y­'ÂŽBÒäüàXɹtée—æŽü·�ùvU�cåëÐ* v Gß®¾dÏÚüÁûÁ’Îò¬Mš41NcŠdÛá@Ëãƒé _J[vƒÃY‚¹F¾!Xrå´Œôkí˜:½Œ#=yÒä¼OXÍß"§ÙÈ‚É!ÿ“dÐÏÁü÷ócã÷÷ ÛjË­3ß €Já´éîˆzýú„_'0$W�\BŸ„5$`DgåIº{ôèêÊ5¤—»ì¼KÖíòËÿ „ç¯;ìðtÄɬ֓¼ ‹ÿi—:'§€#COòdãè5_€‘½)ž13õ˜ ú¢gÝFÓô!ÆÀGRjáfNì/¡ sÍÕ8¥ì¡`ñGo¹õæ ûᜠ½“§ì¸H¶.„íðÃŽÌ“õ€#uRqï1&„{DýŠ‘Ç†V…¤=ù¤¤× £nÍérXIt}e€u’úå�Þ=€Ty¿¦/¡ßñl ã=W‚ju`{ÕõÕ6cÐØ|'Æè  Í£_€3ãþ›ß8:]º\ƒFìÖ ¿>>“¹vûR¦ÖVJ‘@‘@‘@‘@‘@‘@‘@‘@‘À@K F-áü|!ºà�¹‹o÷œÃÔQRW!KÀ ¡i÷DˆFÊÄIoebÖ/ï»_2x0„•œ}ÎY±;þt8ÍËæN¾¼Gvä…ü[S 0ú"ŒãÖÛnÉcå½ëÀ8õJÞ‘%_"wNv§VH6ˆü=rs”geÀȱ÷çžwnÊO�±XvÜqÇdwiÇXH‹ÓÄÎ Ð)i#Öˆ“í°ˆ=€ NòÐ!C@¢ÝŽùÁ8ÃÈ‘c“ÁÉSíCpÈUñN@P}šÝË&ôÙ8jÔ¨Q™³‡Ì�/z È·ßž!>œø}÷ýr2Î°ÙÆ„$`$ÿ‘>X�!F¯†>ËK5ÿüCC^ã2g“ú`Ùõ¦pè…Faý5BÞ�¾|0²Ö‰°Ml—¶¶¶pæ=±Á! ¾ON~íè·'ØÌÔcýÚŠž9%M®¬žF7ßrsõ³ŸýO†[l¾EæB“S‹ŽbÖȹug!­V y~ÿ»ßO&˜:¦ÞEÈëË1æ×ÀMzëT°Ô»èw¬µñÁ*{,Â…®éw¬9ÀŽPE¹–Ø6×Ë“HR¦Ÿä»kt„ÌEhp ð½×ž_¬Ö‰ÐX€Ð\ƒæÊzê/¶äƒ)dÈ#[è¤6:ßÀ¨fêIºÿþûïå¸Å$Χ^ž- úÍ·ÜT8å3úÑ~”cS=ò”ÿâ—?O]ß}÷=ü_yå•Ó¾¹Æ{äì€ÄÙØVÚA¥         ôU0ê«g±ûíZcâ`xKV¹Zõ…H:,¨¹ØíæÀ y¸ð Âyz8ÿ¼A°PŽ<âké¨q:ArÅp’€ƒã»¶¶á™Hx»m·ÏÐ57`$Ç‘ºÞyQΆ�ä¯ëFÎl§«If ‘0úºÈñ#ŒˆÓÄQt‰™•#!s€¾�BŽ˜BÇ8¸€@§ò–[nIÐL’]€Ñæ›m‘Ž!ÖŠSÃÁ•Ojí`t �þ‘דAÀh„W’ýCf�œVÓçJÉÎÿøUù¢Î;ÿ¼”Ý�!óUV ÝYeÄÈ  Ê=Õè`øÜy×Úƒq&ä�s}w„ª $` Òïôâ´ÓNÍú ]Z<€#œO^˜fýln_W¿ o»5œô4î�áPr?­¹™0]ȵ¹Yâ × Á�•š7³ô؉€­èYO#m¦7·Þzk2ÓÈq³Í6K&à&›l’ú�ý÷`Ôö„ýY{�u0Ú4X�î—Cì<¿ršÙÜÁHvKH™ñ,ïVê]Ü‹9‡-4lØrÕþûퟀÙ¶%·û„vîýŽ«uƒiÉ.Lž<©;vl�ì¤1¶óλ& * ØÊÞ`J²'Àqùذæ€ïS§Lí`„aeì=É®å£;Ûm·}æÚÒ!Šr=9E͉m’_ç;ßKÀè¨^6'#{ÜÿdÈéA\m`¯6³kJÍ,cÁ-“ 㪔"�"�"�"�"�"�"�"�"�¾J F}•à,v¿0�k¯ûGvž9A_;°ÂËN9õ”t¸9ú›l²ét§þü3’µb `øØí&µ}1›EØTóéSIÜ À¸ôÒKÀpzÆÖ‡$ÖÚ"Éòè»ïʤÝ+�X9|Él…PÍÊ€‘cÛÿñ�k2¿ 'Û)fdëd3’>t”9&Fư¡iŒ}’ø>÷ÜóÕjªÂ¹m ‡°ñn°$¾9ü ­Ù:N÷’CaÑEíRs1J$.ãœmùS„ùI„/Ê#Œ|2ZËÁ‚ hJ3�€Q]yÀÀÙÑ~:*�§Ù©l›³eí`kauô¤pÐé9_pá…v9~ü³yâÜçvø\ÊuМŸ„ ÕÏ\dÑE26}ìŠÙáù3S�‡¨ÕŠžõ0"IÐÏ<ëÌ ·’èzÅWÌqJß„K²'�O>ùd&e2‹a0Rþ¡´·é¾8™[ƒÈ™ ¢ÈSôZŒì5z§¿V[mõêK_úRê EÒm œäÿtcð<ƒ“åð£÷óà täX’k hEw‡cR¾´¨49€Ú± ¦{æ¨x?¶¢„ñú°' £r¶’_£Ð`öKÀã{íÅŽS·ý"G†¡bL©§½_ÿËjJ¼÷ëG}=£­r쪧"‡×…]˜”œsŸê*Qw)EEEEEEEEE}•@Œú*ÁYì~ŽÔ½ál ©á˜aàzH#×PsUkVâàßœtb‚*NèÁÙû‹ûd‰ëíèÛÍç¸õÀ0Úÿ¯T[n¹U2Yê�ì�Œ°a0jàä�`¾p9dpk‡ì,€É¶Ûl—'¿ä™•£!C‡$;Jè‡ÞiJ�Ïm™;b±#V©^íµêÊ«®¬ Ç»9$M2Ün¸!S`á¤`Pp&…<8·sE�0—¶†;Ë¡«â9œé‡“L L&²œ …#ír!m}ä¤=ï�[Åß„ÍÀðð÷+¯È�=l§eÂQ>üðOrß´guÖfm›'«E%y¿ãÎÛ3A³ãÝ—þ˜Y¤]G¢M{ÌÈv †Š#Ï;b ÕÒᙩÇËF˜ ^oõ¬·€Qƒ¡uK‚-`ã¤1@Ú|ÁR£×@éE],s�91Q޲fÀH"\KnŸë¯»¶zbšÞ}P}ôa#¯$#�„IÖYkƒ€`�dì×Äx’`›ž®±ÆÕž{ì9ÝÖIÖ˜Óô€š˜}®-Â�?ìÉ<1þØ6ù‚¶ &åê1n„{ ƒì `D—°Œxà�êºkÿQ=õÌÓi¯0½äW›#þ›2õƒ «U§u×Y/O¬�žzü ßûýïϪæ�1-w0yžÁódx}º;€±Ó{ZqƆè–[n™,»Z÷Êg‘@‘@‘@‘@‘@‘@‘@‘@‘@«(€Q«’›E﫦;ï¼3BÉ.ËÐŽúÚ×3äBˆGû�` HNÎ @aÓÈ´|$’U8>ò~Ø)¿æš«ÂQ™«Úu—]Ó¹Á¨wºíìsÀ8ŒNú’džsÓ>Ù6§UÈ ÊŽ¾�õ5V_3Ãç0YìºsâäçÙm×Ý34K=츫‹0”›o¾9r+=!r/ÇIL“ý9A¡NÃ,²“@’‹[C‰³Ì铳„#Ø\€#Øg±³ã¿TÈ¢'!M}m7ðF¨Žö\wÝun=œì¹S8†ކçÈÞ¡iN~“ËD¨ž¶8‰ ˜#”G"ágƒ3%˜œI}½Øb§É\�¿H¿ø>Á�f´û�Óì�dwK°w<H÷Æ›oä÷óK˜ÅIÅæÁÒh¢0.ˆPGms’ÞÁ<Òßu(�gcˆÐ«óÿp^†úȉ%t¨üºì/—¦ƒ.HH�#íéEs²ÌÄJ‘Ï�ðÍo�‰ÃéfOs¹Ô€‘ú\rÉEÑ’�w_°:vúüNÙ5˨«»f–“K_ôLN!Œ³çŸ>uP¬ CŸ<·¹±t|¼Ð3áiÆÓ»Æ �](t�þ­¶êêÕÔ§&›kñȉõ¥}öÍp/Ï¡·©wѯ’b,Ÿ}v|&æ§/€¹¾„lÊãå°ƒ‰¤¼ûî»y2â æ~Éä'ÄxÆØÛ}·zÜ,œà§¤¦ãdy@IDATÙr´€K¯Øô~ÔU¡ÅøsFmü™¬·1ãpÏ~"X�EØÚbawŽI®m.SÂÊ/$DÎøº §�4irŽ¿y"‰öä®ú#ɽ\mdQ'•5ÂØähº+@P€“q|T0ŒŒázì’†áE_”6º-òA±kÂuå›+¥H H H H H H H H H ¯(€Q_%8‹ÝÏñå´ÉÃât3¤ˆ#�8*À›ÍÒB4—·"A4ÐÃqל®\ “'&”ÚñUæŒrF8iuÞ×e’×`ÁHÌ‘á¬KÂ\;@®Q8ž£žXó�?ANv�„ÕoÈ ô�3 <þW;šrœ8Œ,„3yNW¥¯íhhƒvcVpZ'Gµ Hûµ'Dší4× dõ,´ðB †È©B&r­`IÕ„¢é÷“¿gu¶è—Úáìª]î÷Cvr°¼ùÆ›Õä·'Ì2šÉ�¥l€Vê'ÔG[j@’¼…t}ðA#7y78ž­�úñÙ`Uù÷°aË¥^èpBÈ a�Ì÷ѹæ2.Ø!V�0§'2Aõ!_=$?ÿº>Í÷tô»ºèõ1&Fý{R´Ðj<�·ºwUf–“}_ôì½wßËú³ýù¬™¥Ç}Õ³žÈ€¾ÐGà°ÒŠ>N¯wSšô®uW÷“±B?: tZ=]_P]]ßÝ{Ûÿ]¼£þôìú=Í×Öí}ì±Gó°ŒMÀ»¤ó˜|�n襳¶5?¿ü^$P$P$P$P$P$P$P$P$Ð À¨7Òš ®­ar»85l‘ȲʈUò”,aAŸ†R·Ó'G©þ™ÝÛ¦=F¸°vX{㺟cª¸ßO•YAæG'N™’7Kbc'Ma¾m±Å–ÕF‘˜»7É®ûK6­>gfÉ´¯zÖÓöHš›VôqzF:~:ª—û•®ÆQC&`Ôʸëè½ÍßÕmð]]Ÿú=Íב�M˜œdö@Ñ"éúÿÏÞ}ÇùUUýâ?tHB =”I5zo¢ `ÈˆØ vŸûÜßýã¾îSíÒP°Ri‚Ò‰t)¡'�¡‡z€ßz¯/¾Œ3“öÖa&3ßsÎÞk¯½Ög}ÖÚû8ȺU‰õÖ üÛÇ\®¨¨¨¨¨¨¨¾¨„Ñð�›AõÌ¡®Î™>mzn ±½êïØ)ÏöÔ�ëÅUo T=úØ£Íôx5úµq°»3h¦Ç¶4‡mïñž=óäå—›óVÂ7põÑU½JÀ–>[è&O¾>Ï–óÁ÷¿ÿýA‚:¬{DV%õzqýC•@•@•@•@•@•@•@•@•ÀK FC,Ðár»gŸ}& ¾ûîy ²3y¶ŠÃ‡e©ûÊ´—þ×~T ô$çÎxcžC±¯‹ª‘GÎm±UGPíÜ«²õ©§ëë惘³�EÞĦ2tJTÐÑåM7iVoËí@*´†óxkߪªªªªªªª†·*a4¼çgÀ½+[,fÎ|¨¹-Þæ,Q¾ÑÊÅ•0°Xë…o°T9Ù§¦Æ÷ò�|±Írå8ˆÝkíçtHùÜýúø*�>%@¿½é2Ꭽ—‹.²h�‡ô÷y“úÇ*�*�*�*�*�*�*�*�*�!’@%Œ†H�Ãñ6H#¹ÎŠ·ùc”o’±®­JàÍ*ç3Ù¶#°v¾ ÷¶)_µ²èÍ:«µßEE¿½ÎUÑmd×V%P%P%P%P%P%P%P%P%0¯%P £y-ñú¼*�*�*�*�*�*�*�*�*�*�*�*�*�*�*�a.�J ó ªÝ«¨¨¨¨¨¨¨¨¨¨¨¨¨¨˜×¨„Ѽ–x}^•@•@•@•@•@•@•@•@•@•@•@•@•@•@•À0—@%Œ†ùÕîU T T T T T T T T T T T T T T Ìk TÂh^K¼>¯J J J J J J J J J J J J J J J`˜K FÃ|‚j÷ªªªªªªªªªªªªªªªæµ*a4¯%^ŸW%P%P%P%P%P%P%P%P%P%P%P%P%P%P%0Ì%P £a>Aµ{UUUUUUUUUUUUUUUóZ•0š×¯Ï«¨¨¨¨¨¨¨¨¨¨¨¨¨¨æ¨„Ñ0Ÿ Ú½*�*�*�*�*�*�*�*�*�*�*�*�*�*�*�y-�JÍk‰×çU T T T T T T T T T T T T T T s TÂh˜OPí^•@•@•@•@•@•@•@•@•@•@•@•@•@•@•À¼–@%ŒæµÄë󪪪ªªªªªªªªªªªª†¹*a4Ì'¨v¯J J J J J J J J J J J J J J J`^K FóZâõyUUUUUUUUUUUUUUUÃ\•0æT»W%P%P%P%P%P%P%P%P%P%P%P%P%P%P%0¯%P £y-ñú¼*�*�*�*�*�*�*�*�*�*�*�*�*�*�*�a.�J ó ªÝ«¨¨¨¨¨¨¨¨¨¨¨¨¨¨˜×¨„Ѽ–x}^•@•@•@•@•@•@•@•@•@•@•@•@•@•@•À0—@%Œ†ùÕîU T T T T T T T T T T T T T T Ìk TÂh^K¼>¯J J J J J J J J J J J J J J J`˜K FÃ|‚j÷ªªªªªªªªªªªªªªªæµ*a4¯%^ŸW%P%P%P%P%P%P%P%P%P%P%P%P%P%P%0Ì%P £a>Aµ{UUUUUUUUUUUUUUUóZ•0š×¯Ï«¨¨¨¨¨¨¨¨¨¨¨¨¨¨æ¨„Ñ0Ÿ Ú½*�*�*�*�*�*�*�*�*�*�*�*�*�*�*�y-�JÍk‰×çU T T T T T { ¼ð ÍÓO?ݼøâ‹ÍB -ôê× ,0ìûþfíàË/¿Ü<÷ÜsͬY³b/7#GŽjYd‘f¾ùæË¯7Ó¸èÏSO=Õ¼øÒ‹Í /Ü,¼Ð©CóÏ?ÿ›iCÖ×Ù³gçÜúnž\pÁfÑEÍïCö�z£·­^z饆n=ÿüó©gÖÙÈ‘#sí½m…R^%0D¨„Ñ ²Þ¦J J J J J Jà­#�Ǽ¹ë®;›gŸ}¶Yb‰%›%—\²Yj©¥2È}ëŒrøŒ‰€œ›ùðÌfê”)I*¬±ÆÍèÑ˾)‰–Ç{¬™>}zóìsÏ6Ë,³L³ôRK‡-‘Øð‘ú¼ë òìÁH2Pp/˜_qÅ•šQ£FÍ»NÔ'½e%€(zòÉ'›Ç{4ôì¡$ŠÆ�×,½ôÒoÙ1×�U Ì+ TÂh^Iº>§JàM  `â‰'šûï¿?€Ý“ÙkYÀ%—\*Á.p'[:”í™gžiy䑿‰'Ÿhž‰ŒþìÙ/6ó/0>o¥•VjµøP>®Þ«J J`K �Øöh±EK{£a^WfÜsÏ=Íßÿ~Eƒ8b‡ÆŒY¥YuÕU“8Æâ{ÓvÍ|«Ê™zûÔæüóÏKÂhÇvlÖXcü›²åî»ïn.½ì’ b»ºÆ¦î¬¼ÒÊÍâ‹¿µü¢ï¥¨¢zî¹ç³¢J5œP*ÊBΜ9³¹å–›#˜0qƲË.ÛL˜°~³üòË—�ÔïU–Bò�H’ÿÖ[omFŽÙl¿ýÍê«­ÞÑ=ÙXækø:ì{mo] ¼1Ü%\ £á>CµUóP¥„þæ›onþrÖ_š©S§æÓW\a…fÉ6ë­·^‚wÙÒ¡l³+¯ü{sÓÍ75@öSO?Õ,ºÈ¢Íºë®Ûì±ÇžÍZk®5”�«÷ª¨Æxø‘‡›)QaÈ­DÍèÑ£skÒPÕs;xÒÉ'5F²æø5Óm°ÁÄf…°‡µ ½Ê–%$ÝÑ¿8* Ã8°Ùbó-’€˜×ó?ØÞpÃ俏ã�‹Š©‡›M6Þ¸Yý šµ×^»Y6*¦ÞJíÅ[[ÍBÓ¢¢J°Íg#„üŒ@Òî¼óÎæoý­™6íŽÜ:$�ßyç]š±cǾ•ÄQÇòIàÑGmn¿ãöæúë®k.¹ôâ¨,Z¦ÙÿO$ví¤K¥°èÓ�?Ší£‹/±x³ürËg%\'××ϼ9%0\ðÆp—^%Œ†û uØ¿ ôÃÈ=þØãÍC=˜YžöK�2è1+�Érzg1ô–©-%áÎx8ÊÂeüT–(~+1퀩m2�?ñxãLŠåÜ8/¡à´Ëðíð³³#dÓ/»ü²ì7ÞxcVù–¶ßnûf“M6mÖYg�‚íò 7/¿üRÈô¹¬NzöÙgZUBóÏz³h³Øb‹õ øïºë®æâK.j®¼êªfòäë3 dn¾ÙæÍç?÷…f³Í6k\ýyI€>Q²nl  x7ŸµU Ì- (Ï‹ çm°ÁÍØ®qÍrË-7Ï�ûµ×^Óó«c›{#ˆ˜0aB³Ñ†5›y1f̘¹5ô·õ}K†Òß&5ßÿþÿÄÙ?/5_;økÍŽ;¾ãM¹•ëªðg?;òˆ¬zØfëmÒ�MÜ`÷áˆØU�,ÁtÉ¥—DEÆBÍ;wyg3~üøÄVoN�:¥ùË_ÿÒÜvÛméOÆGåØ^{½7I´·µâ×Á‰–7GÛA8Ÿ{ÎÙ‰S¿ò•¯6[n±eG÷¿ÿþûškÂæ?<óáf±‹åvÉ7‚à�ý ûì3­å…Ù/$éºÈ‹$ŽVñßS'^S%¶±5~ó;R#FŒHÜÖÓ™a-ügÇ=ÿ\^÷lâ½Ù­gæ›~ïH¸ÃøCÃo ce×*a4Üg¨Ãþ=öøc™½¹.˜õI“.l¦ß9ýuW®³ö:Íûßÿ�¼}í¡G¤ï¸ãŽæ’K.Î ï†n 7°¿nCø„˜ÒÕ;"0‘d·ß~û'£üv=Ô”£A]tñßšÃ?,2�Ó2«¾ñF7[oµMü¼N�g(GöÉTVþÞûîmžšYš…Ê Í*«¬’•Iö’—lcût†ÿºë®�þK›)(�óh_ýêך­¶Üªýãõçy$�‡z(çsÆŒ»“X]nÙåš­¶Úº1ŸµU Ì- üãWa}tžE±Ë.»Q½I�Fc3á1·žÙÓ}+aÔ“TæÞï*a4÷d;7ïüÌ3OG‚ñáØ¾ù÷¬¨’Xøìg>Ûl�ºÀ¶à©JÍÍY¨÷,a4¡ù—3cKÛ]IP��DévÛn׬¶ÚjóT¸*ìa¯{ï½·™>}Z`¯'š#©­bÉšÇ4,þÏg¡±Ÿ’àŽ“˜2å¶æÁ(°MÔöÐÕc =�Vˆ¦‡f>ÔØÊwï½÷4O<þD®Ûe#Q³JlÅ?~�¬Øê ¿ÏSáÌ…‡ ¼1†6¤·¬„Ñ�Šó�»™RLÁýUW_Õœ{î9Í­·Ý’Äb`;Ñ¿øåÆy*°Í=5™"G•Çi§Ÿ–Lµk”R36Ȧ·BËÃ(ƒT»á†²šfTìu~ÿû>Ðlãì‰�/cVm1cÆŒ0ÂÏF¹êÍa´„ ½Z‹0z,IÇŸòÓæ¾ûîËÊ¢­ƒ$Ø|óÍ›®Úœ¿Ð}kÂ’“uPé�7Ýë�ÌtÈl¨Nãp‘NJÏ‘F‹Æ¹$ííéW§Š&gWÔlM›°Þ„æßüV#;[[ÿ%P€ÇÓ±¦_ŽËGŽÙ¯J º~Å—7€”3¦E»ïþžÜžÓSoJfÌ:x4$S!©ßngÈö›Êæ<õÔ¬8÷¹xùÓËÍÂa3ÌûÁþ¨ÄXÉöÉ>ðÀýAÂÎNÙ-¾ø¨\GÊäµRùe~Ÿ ’×µ*pdòù‡ì.0ÿAÎzTë­Sîù|JϰÝsTÜs‰XË‹÷<]Dªðq¿'�-öÊÙ Äšv½>�гÅz²íã~ÎŽ1ÎrX,²°îo[gÜ¥ÒÁµÆhLÆG_mC o2[4úç€bÛþð‡S—ûSaäÞ¾TZ¶îÿdÊò…žÏß§ £üGñÇ�T¶’Ÿ¤Žù¸?Èyÿ¶½ ˆôÑGò³C笳QQ-küK.¹DÚ[÷÷ùç£O†œt„_÷¹öF®ä �-½sÎŒy{Ýó_|)ûïù�x~|Þó½ l‰x®³ç̯kT,—¬7[ä3žKo4æ‡Þ˜“Ra¤_úÒWšM£²ÕÏäg=y�§Ãæ©è�{´·�ê‡1«6xþùBOÉf¾ì;bÄóõwÕUW˵Ûþ¼î?ϩ¨}�tbŠý,úEVyö_课ÑßèjÈv¡fDÈ�~ñ·æ�Ìz]÷q•“¯>8“èöÛ[ÕE'Ÿü§°m 7ŸøøAm‘ë|©˜#ÛØï¹gÆë*Œøg̬´âŠÍ“!s÷›?ú ƒ±‹lY¼Qúßßuåº×ém?× ÙuÒ<Çc7­ú®J„_´þŒcÄb#Rïžo^´Z×±–YftÚ¢GÂ>=>ÃÜ[/Ë/¿Bê{_ýiïÇ@ì7Y±×%~àgôa¾ù®.¶hØÓ‘9/úýh0½Pôm¥¶³¹Œé@¿‘æÑØËút�¿±»üœ�:Û‹O(zêïì�dbÚ�¨^÷¶Ar\$îe7€µI·è‹6Pˆ_–ì”pÿëY ìyWŽO¢|ËHV®½ÖÚYHþ|ùªÆÑ?»:Š_9Æå2Çt—m*úÛלù¹[O®7ÞxC&îï ;ä9ó‡ì—�Y=ü (X.¶ËÑ 2#/ã‡Õn�J?¾ ‰KÖü;;¶klTìNLçwúªñ�÷Þsož'�÷óüÃÈø[·ÑFeBÝ:.zë™Ö¬~óßóÇçûŠŸòaÝþC–ÅŽñkÖÎ q?+®øá\ Īü‚›ÚåÊ/_EWÜÖ!±Ù¨˜ƒö�2-_ؼѭëo»VÂè-2åeÁqÈÎ~˜ûÈgÜ;# Ç axºVïêa4+‰”Óÿ|z&ÊÁן°þ+¬öë�å›U|ÀÙ´`îW^ueÛQÍ{£4z½ 2*À¬ûønºé¦æ�'ý!™ûu×Y·YoÝ ¹Uá­rhcwˆÃÙ}÷Ý“4Úx£M2¸ ·4_Vâô?Ÿ–å¼IÄïFPà¬îç³D€?çPl¶éfÍÆo’ºT®÷�ãá€o‹ûüõ¬³ò Ù)‘!á¨+aÔ.©þý¬ÒpÒ¤Iil\=ìÀNïØ©é ÐÑIC]„Ñí·OMpà¿k×w'`ééúBPY'ûÛ…¬šf‡œ}Õ Ðíéžoæß±ËÖ�,!0 Ä ®^й@·F¼ÉŹ8€&v[èþ9gŸ•@Ž�Ys­5ó³À±f�Ýtó�9¯Þ:´Ü²Ë7ïˆyLÙ3¿ܬSkËço½õ–æ±H RVXaÅfÍ8cd�8OÅ9aË©×Þr=F€€´•„pí=(U_,äŠà9£Ä—ûK{+þèÕqß~{°çã ÒQiG&ĸÖZkíÆ[l$˜êÄ3Ï<£¹$ª o¾ù¦üݘ1AÅ›”–]nÙ¬8Üã={ä3=/‰ÿðu*nÖÇð2£*]Ã~ØÎºZœ•Ò�K@eLWǶ!g§9_Eã°ý1+¯œvJŸ.ŒŠÝ§Ÿzº_[ÒJ@$hº:ª¥n¹ù–æÎ»ïl‹àÏ6+ \¦w�ð![o½uúgà½Tí²lÿ¹��dsvl¹x!È‹m"cÞïŒ7º=ýô3ì8(Úü"ºV ’Må¬ @yË-·Äúœ”Š¿ï}ïÏmÆíÏAò‘‡$”µ¿d*;ï´KÎ`^ž/ˆÜ*È|zvU<z\ƒ4Z*H ˜aíµÖÊ cÖ¬'s«=zè¡Øêú¿LykGÐÃ>غ$ÐèN!ŒžŽŸ:ð |._m|ñâyÖËøñk¾R}6®Ç·× T?²æ/É 7s‘Gl£º5“Ež/Ë¿ÏÇöÉDZ»Üºÿ<'¨¿öA�¬ýš1ãîæïqöŸuc­Ò_Aùw­¾z£l²é¦y¡÷Öv¯sÏžšç9óer™ôéškþ‘«g­·Þ„œ×ÕVY­Y7ì¿mAH­ö-i-âmÕ 8ºæË:°v×_ý\d]ÎL,ãîïº2æv½íïº1žNZ±›wá`îo �Q%"Fâ‡Cóé½ò›l»¯kI€-¶Üò•uuU¾5l{Ô.yæÓ¸>»Sú1Pû]ÓÛÃn_?ùúô_ü¢±³zè–c `¶üãIdíµç^iÏuÌ:?õôSã&Ï4Ûm·]Ø�uÒG¢��3@?+ð›»×žïM_dþË|ÁèW\qE®=„¢��ƒ-Ç™C¿7 9òGä8PÂèŽðËçD¢ÖAÔ+BiiŽ&NÜ0¶XîšýC!®|†}¼þúë’Øás½¬Å5Hx¾�Œúó–6d²æ×\ÝœqÆaƒ§§lan$ÊK¡ÇÖ›ôÁ|0)ì&ûûl茹úÓŸNÊ1ØÆ¶À‘°12ä9;ìæ£Ù¯ÝÞµ[³iØ>Q_Ù/@”ýã꫺‹Ê˜&þ¦ZIr\•/üž[²WnmÉöLk–¾H¢K³ËÖu'­øa8“ÿ¸ù–Ö¦-;6³røáM"YÀw{[©ÏàpìãT<µð�·âÑ[bÅ"p€~ÍëÖTæÀV౑°F`.„ö@ðF'cz+¦F}ÌnQæÙ‘E³Hý[c˜,ÐÃÈùÞ›3íãÖCþ' ܰp- ÆÂö'àµøûª0*œcc”BçØ¼cè¯Ào…¶ÌYør�kâ_I´´œßs¯°Î/&�å$ùîD!p îÁaÊŠ¿²æœ}ÞuœÇPÈW_= `.FŽaŠA™8‡/®¹æšÉH¨ô¯ôÑÞè#~vx‚$YOgìÈ¢ jæ‹óz8™ÒïöI.÷™Ó8KgG¦°¥s/ÅmZ™A# 21óÍÑäåoEV®-}6^úáoÆU惜éo{óYÁ�QaôxèÒûÞ÷¾f‡ÞÎiÃfÅ4Û›û½¬>ú—G'p]*μâÀWïZ=³k@$Y5ªŒ€Æ÷½÷Ÿ”rOd§’`ÛÒn¾ù¦t¸sƒ0"Kò3¾KgÈDȨø›F>äE¶pD¦/(ð·ö´Ü/ÿ`bÁpÔízPÖ‹ç‘—ïæˆüecsùü¸¯V>ï~ýY_æX_\g.‘ŧ�vjîë÷¼²5Õ9TÚBqÖDÑ×½q½> ò‘?Ö »°r!gYuë=ð<Ùî»gDëäÔxn $€à^´ožŽ^à™2�ub¼žG®7¥?eýe'ã?úÓú\+käŒ ýîþ¹òù7ú{±7ÀzË­·$˜!O6:Ä’¤�¬_WWW΋ "GC`œü§?53î¹;ëÊôo»Ívl� àN›vG®k÷»ßõîÔ™àK£Ï yòT‚,Ϧ»@&à´NOó‰\ð;¶ES• 8"®ÂNΊ,,ݲTŽ ‰ø…­ƒ0Þ­÷öà>Ç×ë 9x¶¿!sˆ¿B˜lµÕVQ9´j¬…ùRN§œrJs饗ˆmz½â +…ÿZ.‚„Ñqpð&Y :>€8}C еÛn»­y ;ßGOè²ñ¬Á™m­ë®»Þ+À}™ü›5ð;ïB ËîȲÒCÙrc7n�ô“'OÎkÜ'm~gµîï�P·ÄöÞ‹rî‘&ªË€~v[… лƒ Þ2ÆlŒ|ó±Çþ2çi—8+†<�AUÌ“OÎÊû�^ftú3„”àE¥Ý¡ƒªO<ñ„�Ѩæ«Çݶü:A#¹æškRþûí»Îwûó�X•·Åó�õ¤ÚÔ:hÑmÏ6f¶èÏ9ŠqX#c»Æ6;í´SÏ‚sfþ a„èÜc�=ôO�à Ù*˜0ŽE£ÒÁ¹Œë¯¿A’ëÅÃ9ÅF?�|Gud�|wePŠ|%7ö�Oä“q·`µ¯Öa¤ŸÖBíÃÊ1^6�-&›¢_ìr��$Wä„7D XUˆ[ç‚+Iƒ�\ÇÖöÔØ ¤Äu×_ÛœÁùYÌVðk%X^}µ®fý 6h¶ÝfÛðµÏ&aD·\k,L8â ¡ £© äc&F ¾Ã;¤}a›ÌéÃ÷]¹¶]o=»?ë†m›S#÷WífxWý£e7#æ&X$ôHrR…ȶAô"TU@ÒÙöþÑ3vAà-yPHXð»½{÷$âúêÏ«ý€ýfé×Ä÷#SœùPV².¶Ÿ]á·VXaùïc\™ø÷‹Ÿÿb’ úÅ&rØ!Y´÷÷NÜ×^�séãåaÇ~ùË_$õÅ/~)Ž=Ø:q�sEé4=qÿ»£zÝÜ#dØNI6�^ï¼ÓÎI¤Ñ¶a g±�gîÔ$R˜ C©âaû%N×[oBÚ(UU*q¬?dËáßÌ3°VômÙ¸NBÅq ì ßÿÚÛܱ×^wMsÉÅ7�„‘{:,_�ó÷Åßáâ_ïû±}C‡¶ML€ás�ö«8sO…‰p�ÇUŸþ#p¸JQþ^Å>›§› >þØ_;K&gù ×ÏÒÉ8gE?Ø,„¢Š¬qz*μ/*¢ØE~e®;i%ÁxK¬Ç` |à •’°ÄèÑ­-x$ãoSÒ^H€¨’ÚhÃ�Ãð|CÁ|Wú˜ø½Æ§HV¶ª²ÖÍ3é/=—tëoгښ¦F½h�…/øüó°…s~.‚'ÆJ[0Êã”DŽ6—íbðßÈ–ý §d }zJÎ�¡¨% cÎ(§Õ6Ïrv˜ÃG&0":g4»ÈœX¸%ø.²â|Ö³þçc¿­’W™˜1cVI ꞃ•¯¾zCÏ(ë·ë#V_Yûĉsœí�»Ïølù’Íûýq¿Ë2Ú ò'†áj€càG™±à€no�Ži&<+@¿Ÿe”¢ê?@Ȉ.ÎèÅ ÖfÎ|(·µÖÌ�ç“•Æ pžä èšOzª4X_É×|tw`­~vNqÕÅ—\Ô{ì1¹×Úa—²]]cSn2Á§*p m=Í)Ç=/£V@÷pêêC3gF_bëT8eÄÍ3±ÞµáàÉ+�v8,²¤«déo%Cã³îg>ì5'C³]¬ë²µ^îÎl€,â­[K 0èú2ÿEgéùõ“¯‹-ªçfe‹{Ê´¼k×we0¬ßôÔþtzK�DE×ó{ôH_5àž¾ûÞÞŠÌ¢ZÀpM€“sÏ;'”€rƒõ'&8Y:ôVZ­ª…^ žŒ`š> n�@­½é"jV¬Uk`‰%Z™¿îŸk¿æ�üÙ¸™É“¯�·lý)lë´\s€�fžè�r|h[­öþà‡2cHÌ�·¼dUÒíS“lÛoß�'P£GÀßo~kËÖcr*…~ø‘ØJ|jþ]p�„‘­à¼m à'K6ûæžæÝCëQÀîß| |öÙgçöR¤ñˆÈR"Óé ýÒgÛym;Àl QÙº¾[ Æý§SþÔL»cZ^ Ñ3ϧWÈ+D=Ýß3EöBBBÂMmIûóN;€ª”Y%ì*_ĆßìŽÀ^eã#±6�:¶�]p§ÝqGŒõñ|¦Lôžñ¶E™}²Wòå•WFvüêè׆?{1H€õ£gÅ´ôaf›-ðM/cÀ'‡^Ðúvíµ×F0}]ʱ±|È�|�-!£'H#ă3ôº±Ýu˜NñH¨ŸEâB­­ñ17tH†÷©è»ñòüï–Q©@¾ëOØ å°×¿ùͯcK×âÍ¿|ç»yNGû³ÈVæY¤bÍz?èS¥ŒÛŸO�6 ¢S`#ðAì$¹!=UJ ™U%˜ú%©ò`�¶³µ*aT¯î²Ë.9Çí„¢Õ½Ù-Ûš—Yftމ d,!Îè×:Í"�A¼±ctp0úÁÏzè!©‚?º©ª‚KÐH†l¶éæi«ÚåÖýçÞ#þz ö�ÍCúHÒ ô¬#� Š•å"¨S=óÁ¶fZÛþ&È¢o¹®»½/ãlá…¹|C›*4ο༜‰[I­q6ˆüsmkÏù‘Îea·Ø~–ÿÉ57ãîLzv­>¶a÷l‡g{‰íIYWª Úõ¶¿ëF°ÜW³¦}!ÇUÌÀ;ªØ"ú«2”ìÙ{$ÈAz��yaßü½½°8�î ¢�¿€MàƒU‚W5Izkƒ±ßì*|ãàç?þñ™�@!(Tv°'ð2ýã�ï ?`�mØù_ûFÚHýb¿¿÷ýÿI_³Ï>û6Ûl³mÚÿ‚‹‹Þ ?ü°´ßøÆ·’Ì€¿UâÚápSÈ 9êº5ÖX3q�­²¥ªÍZ|ç;ß™kQÒÆaÄfYGª¥¼Å�âËÆ„ÏÚ ÈNd´JZ¸™¯¸ñ¦£’'ü[øu±»Àþ-ø‘|nH:­"vÓðÏäWÆßÛÜéßcÜWüýï‰ÜóÃúHÚ]~1{ÜqÇerCe&ñ³àB V¸¶¹è¢‹š3Î<#H·…›�}dŸ´ûðB…?�z…°Tåï¾]c»r./¹ä’æ˜H@ˆÝ$¦è¥j6q[(–tÜÄØ°ÃŸÿìçó™æiZ¬aëÑ„”B2í»Ï~)³ÞÆØþ{:tÙe—¥­º)d*i˜~8ô�MCñ13؃øN~Æ«ˆ�LÙBXáe|¶/ bNv›=ñwXÈ[O/¶mõúÜ Þ0¿µU¨W@š<d@óT€4‡Ù›¯qräÈ0®‹@[i¿NMÀÁ€LŠí(JC—Œ…Öa$S{q€Ð;ï¼+†a¶¯‡g¡}%@ãü}H°÷ —�µh¶ˆ½±]c[YÎXxdÅø1¬¨¶ï  üYàYº;z™xæØÌ[üžÛÁЩ̋ƒ2NÆÍsUO½lœ‘ucÛb‹-㙯Ï´‚«»Ã9ÎÈL�{Nl��;vlÞŒ¤@�N��,4p¬OÆI®€‡33œ²~áÎå�';Œc4Ç2Ä*ŒÇÁá?øÀƒ ¨²Àîc^~È 2Õמ¡µäÔ9aD2A“&]Øüþ÷¿ËLÑA”YAÏ@V!€.¾¤ürêßùö¿$00–BpåÃã?s›02äÓ ¨b ËŒ{’D”µ2‡œ”¿#‚ œ¼ Õz˜2å¶ Ð8 J†°†ˆ,T87º� ‘-£ûl‰ß©3" ÌË«T2_2cÎp GÖGG6梿ë‹CÕ€êÆ­×Æ6(:ÿ–]6'í%ÅÀèÆoœä=p-ÂÇ:Üõ“®9WB fk«ÀYY}{ ˆd¤Ï‚aÏÌYdlÑÝåbk2ÍxgÏ~!×£õ5kÖ“©�[l¾eÞŸ €_¶‚ì®;ÃF�=¹ 4ºo¥jïÓù3 H;ö<1�3}°Í1cl z#à›[÷¬Ë~ 2±Ü©ìÒFÖì¯È€³�|ø£iCšÀ€„€ÿØG?–s*ˆ0o'ŸrrÊJ5‡rtÀJ°H `&v̽6�-[Xfƒô ¿ûÝoó~ªtÖZkí pÌ¡Ã앎 ŒæžV©º nÉȂޗÛŒÙÄ®zþøÐU53”"«. ›A¯vÞi—Ü6cë �®Ž£Ž>*צ­)¤â GÜ –‘—\|Q¬£…šw½ó]A¨­—Û§ž BA`F'‘Öáû�²ð væ¤?ý1‰->^¥ŠŒ>ò�ž#4ÜÈ�°mx¶rè�F@ª¾ÉV³ è²'š¹ùÛßþ–ò ³dë7ýÈGò{_zk¾¬�I!»C?4É,àŸü7Ûló°YËfy6_à-s$|¯Ê¬�vÚ9m?ß"(:ö˜_¦_ý·ûÿr[Xûs ~Ä/ì„CŒ×[oÂëžO‡U�Úög�«–@b"áNÂPõ‰ì®yq•Š4ÕiúpAT¤Ðqë{BÜw¿}÷ËÀÈK…‘ÀŒŸ’˜Ùf›í¢je|öÙü›ßnœÁÌ IHx}¶¾°ŸÕã°-Teö�ü£Ô÷S-³Í¶Û&¢|¨qYO}µÞ#Õ?ƒ±æçÏgœžÙ…M˜ŽUqáãræ.ó;$« a˜l ×u¯,.cæÛ—/Êc…S`8z/À¼üò˃м%·§ª€’¬C±÷w†ÿ ÿ³¢ÂÂ5~òÀ<çˆo„¥²®È`0ë†öÕØkþ™õÛ ò§‡,ŒGнqCp9Ý•ûp6û 1ºþú4ˆ—ј?v¯¬k²tî(R ¾ãw�Á‚põÅW÷Ôôc0ö›¼­éËb~þˆ0ç6aó&F_øp‰r¶‘]c£m¹#Wö®ƒ‰4„öý×díãû}<¶¥mŸ>}ÉðZwœ þK\ïø‹W £ÓO9NK{o ¼�}Ö¬82#ü×™gFB!ðJË÷ð_[& 0¨՟–O9#óÇfÃ(Ûm»}&KØúŽôD¢8ÛN‚�_Wù…L1/ä!™rιgg\m‹à˜så�˜í×Aä_¾Ç–² 'n”D==ðlè� ²Ù͵"IÀg[÷p›‰0‚µW W8}R¥vRlU»*úÍîdâö _L f w¿úõ¯ëí·Ï~1;Æ|�Ϥ5ÀWýå¯g&QyðW¾–ø^…}ÿËYIÉ×äVÝ ÉcNÍZ'§ÿpB~‡O­[Å~ü0\É_8VCBDߊ†£`8 éåšw¾s×xþúi£­…Ü6Xá²Ë.M{²÷ÞÎ]!b4Ud�à�ÞÖÛœÆøVû{­0êeF‘EO>5+«:ž{.õŠJ ®!.²¼t‘8X0H£ÅÃ"�†S+€¯Âȸ<"Ÿ äž}ö¹Ì ì°ã™¥êd:4 P±ïô·¿ÿmsG�²02 �sžP§òH0¬|(*Çã3]2úa� ’£žUÖ(9R7 ¦û=‘Çî#Jq2_ʹúXZ%ž@w»C.�°Lð*Ps^€Rʬ bPöi\d´Gd²cíÕÌE‡ãVm{ã8;ˆÀB?{ô1Êó2yoŽI' Óo�›>0�ˆ­ .¸ Çl< )ÀbÞ8GäÝïÞ-Kmβ縻#ðõµ% y´Ó³?�|R:w‡”*{åpe`N9õ”I@òñ[ßüv:}µµ¨½Ímˆs@p©,PBÏYräc«Œ­*¹TÀ(}ÝdãM“ AšàùÔ©S¢ «ùÔ§>•™ýGò�wÞ¹éÔî 0(ðÀÐ2§;§Ÿ~Z9Ï>ת`âü^4¯!ã$˜bëÈ&tÉ’'Y_ãǯ™€ÊÚº @Àu¡ïÀ'âǺ:»‚¥š@h·ÝvÏ~Òd¯ªúÃ&È´=¶ÐºS}EÇ8à“©7yƒWþ`Ñzëg ñd«ªJ¬å"À4,kÅÛ:ž‚;z}QÈÐÎÀ>÷�|ÿ >é�$èxýî¸ß%€�ýØKªV†cÊTw• DÊ?ð�ÜG?b䈔§Àø†&gI4½œY¯ clÀ7ò‡Íb�ª™ÍL²)sMt `í[vÖYgÝ´ŸìÂHàOÖùÈGS�­Ç…‚ 4Ÿ·ß>µ¹à r-°k¯½VVYFÝo~û뜟ø£iÿÙ;ÀÉœY׿ÍZ¢ßôÈY8K-½TèÀu™ñn�ûC{(ƒÄ(Κ€¨q°ótÒãú£´þ'?ùQèã#Y´Õ–[‡ŸþÇZU]"“j+Þ9à qn¿c$SÁåqÇÿ¾‰ÍºÍ>ûìB[§Ÿº1ŽC;4ýŽ@ƒÌoHb}Dœò¡—]~idtŸöqÅ®uB l‘õÈãµÖWX!†ž5cƒ®¿þú´ ¢Ï|泩÷}éswÂÈÚ@4ÐÖ>ùY3ìÑ…1¿ì)ROpñá$õe( #rúHÜ×›„Õ*2Íû¡q�ä›þ×�ßø˜Cö–lÍ sc¬zü¹Ï~.ñA;a$-õ†Nó´Z|ŽKà™ß«®¾²9þ„ãS'muV¦‚º�è‡àÏ<]$!ÂhêÔ©IL«Ð8� =•T€U|•DKosÖaäóƒ±ìô 1î)±ÞÉy®rÔ!½|Uêßý÷¦¯‡¿l¦ÛÖí@®ë�ãS<Ï:¦Ó»hRó‹_þ"÷Ešo|ý›Y5G÷´deÝ"ŒÈ…Ÿ@ ~ì£ûdE"×ýè”­AG}d®;/#¡È>h ëJ…¼4)|"¢µ¿ë†¿ê«Yc°¢­¢¿þͯZvóCN[¡ºiDÔKNð\Ç/`a¯/ÅËhêôY5v{ÿl2§Ë.;:õ.qJØ?�rOM?c¿áaLJÀ ŽqÀáðÛÈÞ«¤:ïüsÿ³Ál7Âg¨#ú„¡ *bø‘¥Ã·¨àá`I ÕŸª³`5g+êÿ@#6“Ýâ+ì–gZW*¤‘'d?sæÌÄxl÷äŸÙ› BÇ1/ì=»_ª,¦Ót÷}ï}_|oÐÓÜùtt轊x ¯B &tÏ=êGeBF…Ùu~Yi¢úþüÖ7¿•ó¡O*¶$x.½ì’frøäß·¾õ�L"ÝvÛ”LZD¯êÏOô™$îTz;†A¥êß"©u‰'æsÁHv2u!|Œ­ÐIËD¢>s>__ÍXÈ\±Á¡‡þ4ý�Š©M6Ý4·‹3ñá ,ëŠ=gÚy¡•¿á‡éÜÖ@zGäÑ"á ÙgE>“œñ ¬M¦’,¥Öf'x£·õÖ×ߊ«„Q/³úL�%�ØC|¨,RaÐÞ”ú«4â–A,dÇ0jý%Œ´óÉ“¯ÏÄ0  Îp†�`Q–GC,ppXíCùI{JŽe¢€VÒâ -vÆDí§?ý™,wDrpúçŸ^’#ö‘Z´Ê��K€L’!–¥çˆö�róͶHv˜Hc4l�•¼pÒi`¼ÝÀ8Ië…cè©Ë€nR0&Û ¤zË g¿RUÙkx2Ú¶mȘ3\ögœ£G/›l9‡ T8dÖ½x'+ÏÈ Î€Öû.¶X�TáL¶ @�"?‡ÚÎ2)ÀÑs¡Ç #̸ËîOBIà¾ûnïI¦½ýPÉþFæÀ Jˆ9ì/}áK¹M�̦A��ŸéÁ׿ö�t8²Y@{#ë¹¹% ‰!Ð%àÎÙ.œ§@yCrå�¶ßn‡f×]wͳµÎüKƨ0Ïßþ€´mv€¨_~ÅeI”ÐÛ¯üµtèÀ;GBdì�M¼{C]—-›/þ§údë­·�y|w!Y_ªIlaDè ¹ß™\ã⤕µ+u/•9‚wDVÏxÏÔclmëQýgkÝÛ2îo~ýµÒó2wª¦è�ë¦OŸžs h Œ�„*›Œ™=ñ³VÖŒ“7æäÜ Ü€ vB5@â™H=@Zì™ÄYYiNßì©e`Õo¶°ÑiÏЦB†Ž{;yX=5¤­­WÇ!’ô )‚0GL··[èœrêÉikÀ–³5TÓhìŽõ€¤6åù¾“%ɱùæ›g…ŒÏËôКTní̪?yPÚ¤_!Ü[óuyr©Rg̘U’°@¸Ü�œ 1¢dÁɶ"Éâ"wUâiÖ½±±Iƪ¿d6"J'd»TŽˆÊ³]OÏT–p‚>Ãg ‘‰0ú~li@¸¿7ˆ(„=B¤ilã/�ùEÊÇv:�,óJOVŽXÔÇ_ÄçÈ q…@NÐq[&ب>q@Vب%W�¾Ð¡K"[û“ðo4U¡³Ý6- Êæ÷ÕÊõ‚?¿ø¢/g!¾˜:í gÈB ¶�ïd·ŠþõÕºFîÏÅ�àGŽl6Š�� èBÊ<"•†’0bSØ{•æFЯ!ŒŽ‰â )°qœ7!ó[ôZàÌ_ñ÷ØÂtþùAâ-×|åË_Í-í„ÂPÆŽ�?l a4¾•m@:ýìçGd ^‚ˆ ƒœºïÞû¤î!8T9�0"+AðÖQ%�DaØ®þ´Þ#�ý`ìƒ@ÎÛÈø�È"åüZ#ä+é´HàQ•Ú­@§uv!ìÄž äº9c‰¯b�HüìÈ#²Òã_þå_ÓN{n ¸ø?„‘ÎôÑúp—F§’?ýé�3�¤Û’l#¿E?ú»®øXnR`"„L× _ÓWcÇØAg/žtÒò�à¯|ùà ·I’«Œ¿ɶbý2*üà 4ÛÉPõQö/ôû ŸûB®+ I¾¦“¦ƒ±ßË„V™È~Ãíc»Æ6ûÆ–@k¯Ý~#ûÈ’�–€#†’0²¾gÍŠ·z†ýŒçzw®§5/A€�9ûì³H.óƒˆEøb „Q‘-›ô‡?ž�¸YVˆ(QCÿfÛqùìóÏ[°T•"9Ø_8Š Ty?'=â·ñË££ªæú$Y­‹r¸>,umø½c~uLVä°µÈ�ý¢‚ ™wÞy祿bsØû¯|åàô›âó…0¢_Ô†ùÿ׿þ[ÆbøJBNÅïþÿDVÛv…?æ»TÃ÷¶("l<ðS©—ªÄí �aÙ3ÇÀG�èkñ�’°?øÁ÷òl¿OôéÄ}°RI`›o: šÍ™ªD¢�=@¤²ÇÞôylÈãî»îN k�o»í¶™X(sê;/±€´“@Ì„xB¬isÂù¡úŸz†Qo:ðt¼ ó¡p0ª 8°øÿëZ¬«4 *Œ– �<"õáÔúCé·CæfÜ=#ˇ^Íl#�9�F X¦V)-3€m†æcûX–•ËÊ4ýò˜c˜Ý’F¿MË* æÁÛ²#ÐÚmÄÌ@…0‘¹@ÔÈ ÀVp´bÑž#ÆjÖ¬YyÆ v[Æù¨8 SI1"ïºG¥ÃLÉ¢«´b¤=OVƉ�“”µaäd0Þóž÷低;þ¸øþlT\푤ƒL�ySÝL9ÃA@§’EvH -°!¿u×Y/ƒ[”o  d;Z²(Œ¨æ÷²âÀ@'‡^“r P4ÏÞþ£°ÔqTd®â‚³õL‡¬ ÞäÔÞæ6a¤¬Uæûêè³*1$%ý�²ªËqá8½QBŒWþ†0âÀdƒUü8ÈØÄ—szèáYgÿ5;ãóS5/í„Q§ëkÛml“[=Á†`Ûxd`�7@˜C6÷ÚK¦kí»-K<ò¨µÞ‘yC’*sF(# þ=FÆeœ>°ÚŠå¹Æ´Gè«u2&Ö²H�ÖÈL'!gØx[ŠlY¨ìDDµ¥sR׊ ˜¿Ó±,ÚuÈÏ=çd�;�¡t}(šµ l¨ TÉàü‚ž�xÒILw{#t½õvº±¯û8YYkJÿª‚>2ÂQätJàÏŠ·˜Ü1íöÌÔ냽øÂh1�Z!ŒTBÚòH� QÕøÙyDPëí(ä¯õë¹T *A?%ˆ'Ж·â!"�w-+'§Ükzztì [ØoÄ1û¥‘SûÛsò—ñvU€Dß4|†,®6'@~ïûßËŠ6sâUê ªT•î‘�·‰Iî8+i‹-¶h€|ëá�C’DíW¿ªÄ~Ç<§¨$$\ ¬ †;ü°ÜŠlb’8»ÚW+× ‘#*^�õ¶ÙÇn"Œ�f|5_ò¯àU0õÕ¬³öÀ×¹t_—=mð çåYá¶ŽàßT—|éK_N½Jˆ\¿/·}þl#P¡† Wý510�5‹ÓØæ©ý׿þ54ÿÚÁ_Ϥ”1 P†lôŸ80ƒç;YGùúÊçÄŽ3îNòYG¨<ˆ~»Ã#Œ`•;ˆ<Á£Œtšà �b>9*#½­‡­Œ}@ ªP�ìÖ‘jVIpŠü´m×ö]:m]±ïÙ�\×n;z #[–á*„‘ –îD:õ訤@:›S•¾Ö¿i]öw]!¼³n<»¯f�« ásø*("×uñ"¿b÷ø»ýø‡1–—š/G…‘ÏÑgöad®¾ù�o½º®ØÇNš~ Æ~K(�~ú©é÷ç {/Á·çž*æ[x¡ô�Í‚-ê¶ ò‡’0âf`Xı*lðd`p¿‡%ùX•¾«@TiÃÎÍMž€kZþm¾ôo{îáípkÑä÷²3Á|žsÎ9é£{z¹Àë.ŠØ¢u‰Çźþ{Æb’$ŸŒ-™ˆ#Ghˆ§�*j`)U—ëÉÊo;;Ò$p8Ü‹4îºë®¬°1_H[øáßÂß °Ø&öVEßãA8îöŽä+J\1ÏEñwD"û Ÿò7ì‹ÄÛkÀ—t�½™Áœx1ð©çqÄkgXí¸Ã‘tx X$l;ˆ@IDATî+1ðóŸÿ,ð彉y¬Ö _vØa‡ùü`®¿ËÄBèA{+‰7>¦awT|ÁâÚœðFû½ÞÎ?× £^fÿíF1t' �€¥ÂÓ«d¿Åþn›Æ¬¢ŸGðɶ6µÞ06 ЧGÀˆ!šd‘‚§¬ÈF˜sØ=€TpT*œJú�û.¢£“3žÊs&Ep÷ÿßÿÍ*�í·ß>+¯¼åel!í­8; zƉµ—%€tŸO|â“Yiô£Ø¢¡ÂÂV'Ù\ÛF*¥›LØ ùèG?š¼ž¥º€Ë�wMOgñÞ½Þ›`Ò:8FÓ!îîÍè·¾ÝçßçûÚ’&ðaÌÉE%„,ÈnQé$p, ´€%‚ £ðW‚0Š,ÁRlÏKˆó ÿ82—*aT&lÙq(.ÇìýÏ÷þ;‰®a´ã #¥Ü™õ‹¹°ý„£4ÇÎs€³yT Ð"�`�,i'Œ:]_9€]Μê~•9¶6ɪŸŒ ‚±“f›Ø©§žšD©àá×aTîÕÊpÆžø(aF‘ùþ‘S� ´^%I{+ZföÈ#–Àf½|¼ÙéÝñúW„Ñi§�š¤Ñô WÆG@ˆ³t§7`R*É�®÷™-ÀЦ¢Ið"£ $Z‡=µBLÊÜé·s[¶Š1™ûö†H@ÆÉž:Ü+h  ;Ш¤`³d�#õùÏ~!A�`PÓ aØÚúƒ0ꉰÉ×ÐFFÜyÈ»ïÄáÇÖçÕñvvÑ–MH,U9í­dÊé¥9ß0£/GFÝ8� „.�•°k[eIû=úúyN®Øaį9‘„èI¿Š|�P>ļ±{·†^{Û¥Œèw_©„” ÔÚÛUaÛŽ¹³³*l7ß´TÝ£¯Vˆg¥IŽð…dۭ͵ÀN�¥Èƒ-‚ˆú?ÿûÿä:é侯/°TEbÞŒ­¨³·Öîá#�2ï1†TJˆÌz’Ÿª5g`ÿÄ·ëÂQr€=þó™΀çk_ûzV²µFüÔç?§‚êIÖ ¥Ú›õm‹•�,BÌZÿütõÃúc{U‹ Œôþá'Ú+ÜÚûÐ×ϽFÎP”¸¨}P1l›‰ò /Ìjë�OH.Ó˜1+g0ÍæŒÝz¡ÈulL_­¿„Qn1·Î4ìi«;÷ëßü* .dŸf;){‹øéﺲ¾Ú £þ®¸µ¯©fT½! §JlØÊØÞ¿ª ÊÿgüØrc‹�@—ŒÙ›\×½¬«ö{õô3¹Ðù�ÛïQÍ£BŠýæÖ[wÂë*Ë3Ùs¨RûÔ8rÀkîûKñpÂO£‚Sõªë÷옊~[¢ ÉiîØþPò—]‘Dy&Lªe`ñ�ÆÖF¸gnF%¤rR2W’¢½r²Èv›ŸQ‘NžKîùη^«H/Ÿëþ�ÝQyxYà! ב‘XÛ-*Îǯ±f ë&É8[2ÞúFŽ«pB¤–ùp„ƒÁ%%ƒÙEóuaø 8™åÍkì6½“D<{ë¦y/«Ã®*Ž®›ìü ës+ž³þúÔ§¿ó�¶Ã¤µìѹ~¸O•Øw¿ÛªHlá™×ûak먣ž~X¿TVé»3Ñ~ð£äK/öÚë}‰UË#ÐÚ›€#:n¼é†?Ÿô‘}4cOŸ›Þh¿×ÛùçJõ2ûo§-ií"èNtJaÿ¾&`Eìpì `ûã :€âÝã,"ÄÐÊat°Üöº B•OŽ ƒçM ‚!€ÚÙ)‚]€ë̑ئR2”í}ÈÏs›0P`ПqÊ ".£üÉ Œ8K)Žôû�ò½<Êù9ÓHÆägÓ«§9øAD˜—Õ#ÃËÐ;˜\<²Ε°µMf/¬îóß aä§ #[¥æÞ+ V–HpÄ`/¿Âò-Â(ô ™W„QÉT(Éýïÿù¯tŒ›„ÓqÀÞ»âuä¶âs#@ pøò`+Œ85ó‰´?�¾“‘·‚½€Y%“ì�L�ý óÓNuº¾¬?ÙBî„™·- Þ>ˆhñ;‡Üî[d“�>ú¨Ü¾â�\ì‡3Sþ‚û’¹ÍÁ¶ý(BÄÀ¦u3M…ã¸Ð•ÕV_-×”ªŽžšñxTw¾ˆ2‡g"hÛBæ‘GͱX‹*¿•ª±4º£ÊBušLœ-L`VíòÙ8óÅašäÐ�0š2å¶ N"TÀkûZ{s¦• ÚzpÆ�òûïñ€t¹òª¿çzvÖ›Ì!B¼«ëõ„x!úø—"K.ð{OØýýãOŒõÓz+ò¯½ô»½}ý<'ǯ è ð‡°ïêj Û~ß"_ó„L��V•69�#�üyV»}÷»ÿ+ —vâ­ÜCðÐ"Y¬ÉÍ6Ù,�êœ#“ê0²ÁªŠTB©Hããè#ù²¥‰7a$°D¡ÒNx©f@ Œþ‡’ªè/aÄv¿jAºÙӡמù¯·x>ùÑEm¨£çCŸ¾ø…/&®@z‘]{³Æ�ñ%Ђ9bÎaS¢ÖŸ*²+„‘·ë!Œ2‰gô§õFÁƒ±#A—ê >åõˆÈ‡cîC¶±;ÃÌVJ‰¤¯êÎ�\Ç�÷ÕB±ìÆ{#Ð+¯å­Ê±aÄvˆ½Ⱥú'¨ŸëfN„QYï3¶s±Ÿ:°µ¸ŒÉw8„OSaôÿù9¶â8rQb½¨§uÕ~¯ž~ÖD "f ö[õÅ^]OËf@m=ñ í­¾#[—‰uÑÂÈ!ß“Z„QØŽB±#l¢×ÜÛ"6+°B‰ý´e˜œT2ÛÊî,*•‡¶þy)„jš¹I±7ücj�aéboºË–UP‘�9>Ž"° à_¾Ó:ã©7ÌB¾0Ÿ±#ÒO‹�Ó¦·ßF¨,g€ñÈæ…^$׎�{`ïô�p¶jÿO<>+•¼ÌÇY»‹Æš§sªÆÅ/D|…÷V;ëþ"3og£;l§íeÎ#$÷ˆI$€¾ôÅØ‚8“½ín�Ûu¤¯Ÿõƒ!Ì_M|a(‘,æëž”?üg‡%a”ÕE¯TÝÉ8•¤¶ß ä@Øïî;Q$í`\ì$¬à-rbmNx£¯±¼�þV £^fûítèu»Šq°¸lIê”0€ì•,2�ªd´7÷ùþ¿oíz Ïf‘½“p®‡ „;à "�¼¨ç 4gËÌœùPxL+)Úþ¡hƒ%ŒTÛ8€LÀÒÞ8 A©´ètœœð%cňÛꦴ4 £`ÒŸŽŒÊ'>„QC¶êÈÀ!Åó¶¤ÕÂy »COmaá,8ao5@Ò0ôœ¹ {`Ð+&µîó?'ˆñEP9ïôx«…@E3$P4[ãT!�yÆùì¯ÝŠ_ÙBÑšï"»¹µ%­FÔüç¿gŸœO´C�‘‚Û&4„Ñ¿Çß9mdÏ«g‰!³#c¤ôÙö�o'·Jº®·3Œ�§æ“¾»·½÷Îæpk-bñÞ$Œß*g¾¥è›l²éë£N×—³Æ€z£ÉÔZg¥ÂÈœ8O+Œ^j>¾ßþ 0œ¯Ñ½Â(;ÿôœ}ÎYY5wã�QýµÒJYjýbÈÝë^BJ¤U)´ÏW¹¾ûwP‰h{:ä/ðŠ ¾éu®›r=µ¬| xE”‰; ÂV–ÌDvÞ@ÀæL2eä+¬¸BÚ•ZêGd�‘²2¹Ùù¢šÈzW‚Ï.ê‹@Pc3œaDS•sÎvPiÔÞ�hÊ´Ëî `}óßÌ*§Ü¦ûÊëyï�3„l‘›¯í¥ß~”Êb"d¼öÚý¦„¾Û†¬"m÷ÝwÏõÒvyÚ$kÀØ­MÏaû P,nf€JÛļ³+l—¦´^% *¿TZ“dÑÞJ?m½tÞœ€Ã³ò‡Ç.–­dèßš>ùœ~ÄáQÑpOÚƒ-®± }F®“ɵåèÚë¯ ý{:Ÿ»ÖÚñºßÐk~Ne²Hÿ¯ pͨVû·ÿõ¿s+@{ÿ»ÿ̼®R¢ÂæUÂ(ôÏ–¯eCnIM˜�ëÂÖgeHL%dÈ¥�­J…«3€•ÝE@¿„‘7¾}æÓŸMÁ&t'hù¹ßÿþwiÏUÒ¨d’Xš1ãîé=¶VÝ7 £Ðç=ß3ô„‘Ê´üulÛ ƒ¤@{’‘ñoä¨ÊÆ-·h½©©èí@¯ë®�åß=FYù–`¬ë°šD¡3ŒléIÂ(’KpcO„Ñom5 |ƒ¨³��o”„ȺdfÝ̉0">ÖZtÃ¸Ö ÿßN°wü<ò½|/óÏÇYEΡ›þÒÞ †0*x ÖP!jM÷Ç~#@ðŠ³°T¨ìöîÝ“œ(sí{Vn™ÃNÛ¢…Àl'ŒT®þ÷ÿg¼¥ñ±¬à¶5ª½’]l€0˜ñÁaa‡Ï®gç�Q䬞culà‚©™ÜôÖ¯UƒüW8„^\×>¸‘l~ùC•uCJ� Å !4ä¿3á8ÉN~µ'ùBÍŽˆ@¨IJô´ëCÞ´í?t Æœ}öY±½ðÆ|a _É7’›ØÅº¶�y»ˆAÞ O•Áp>eKšÄ¹—­…ÏÇ™gÎ]%ÛE],“^2@?5XÉyK|¿DÁýñïLæÅ=éìS�Y�É:<8*àÅ>úPÍmCèèGã�m詊ÿÙ³_ÈÊq[ál±þZ+ë�vÄÏZ[{·ÝvÛì??¬Òì'?ýQVP½;ôÔé$«éD{ƒçÏ9÷œœÌå´È00Ö˜ö�F‘ånoØ~Û�dPÊÖé8mÁQŠ8a$@Ë "eÄàÏøsð ¾Ê ÎÁ–(NÜ™ ^W*{£uŸÿ9Få ñ¿…\¼]Â>kg°¸÷ZÈq�ï¯gÙë¾BñVéñ¯É"»¹I äT| Œd�ÔÎ;É µæ¯7ÂÈ!ºÎz1$ }ˆ�Së�0hñ@¤³]ÂÌIÁdŽX”Áw° ùZý æaĦÉÔfæ3Öa'mÐ[Ò‚ðñZ]$'ÝaTöü“? pø³-ŽÎUЙ¯Ì u#º�Р˅”@ EøI¾� ½Ù}€ÛV r¸ëªAt¿qëóõ-öè‡^:Èý�Ãjñ$M…�µ�ó¾ûîÏ5,Sˆ8¡Gyf>*@´B©¼Aš!Œ¼4éÞÞØ?"Wù»·š|ñó_È9B$ÑsÄ“¾Øˆ˜z=Ðmõ[�¼ßÏÈD··çÈIJ7€¬Ìï„ *Ú[É0*�w޲&ÏbŠçi¯¸™Y� �T"ë´VåÏÏ“(ÚmÉÝ0^?]¶bæ‡â?ôÇÚ]`ÁÒWÝtÁHßÿÁ÷S?>ãC˜´€j«‚¥T¾©ìRÙ)c³¶�-}FlŒk•øvXë-l²¸Þ€7~üšyÆ“¬-BçÆnÈŒ°,=²ãÛ0!Dûjƒ%Œ¼îùª"ôçGѨBC˜KïZ„ ŽL$gg-©Ny##àÞ[´È¾û–0²VµyäQ?OŸf=ت`ëà}¡‡??²ÿúA�—ÖÅÜ$ŒT˜…}`Ó/lÒÆzz:ÈH’ ]ÐÈF©„ð6=€6ÐëzÓÍî„‘* v_2ªÁ%Œœ�§â·ufIÿ×;97 #Dyk‹ååI ðsÇK/HØb;ÓîÅg¶yvKØüo‘À¦ø»4ÂH%¿~ Ô~«†u&Â9§Z¼§3¦fÌð’‹ËÃN{¹Ê¤|Ù@;ad*?£v°ß¶o±±ZI„¸ÖYUì¿ë­a˜ˆý,oéTQlþ–ˆ-`>GŸé‘­¬ÞÎÌo²k^—S a$>‘â·2ä Áæ-â!ˆœÇ�ÊôqùÜîgpÁØ©ì'ì·ÒJA ¾âGóF½ü‡ï°žùx÷x0ð:ݲ¾ç�q›[•@/D%˜D5âÆVÍ1cÆd‚Ã:T —ÃTÏD‚a¤ÑAëþF77 ‚í£ùØ«6‰_ògC‰¿Ü ¥¢ f†éþòWsë¹—C/Ãéõ×Å¿²Q?øá÷“ðQÉ OK<•x¤ØÈN ñ\hÜÖŒ¾ýË£wx±‚- t¨TØ—$>O"ôöŒ)ár/—±�Q›Þ(÷y»¯„Q/ŒÈn?¤ÑÓAÙK?{ö+„Q€Oç�Œ²hadQ›Cèåvsý×Ùß%‡±ô8¥�¶!}æ xKY,HYXì0pTy‹É}6‚Œ§ÒX¹îgqȘ ƒ‰ÕUÖÏÇsû�ÏèØ¶gq´g¼Ëó ¡0eÊmùªQ×w¾+­Öël93Á¤³*|àÁ4Òý'Ð ÈT¡0ÂÈö3[ám¤[Ž7t˜¶To\|ñÅé\¶ŽòÍV•Ôk6g1) N½.g¡@~û»ßf°ä­¶ß¬Þµzx:2)‚ÒËÒyvuuÅ!©ñºÏm¶KÇßÝápˆ*y+7ß|SV |#>ïÀОZ¾pb �ÀU&º{„(cþá�[äÖÒÝ}·Ý2Pv/@ç‡ r°½²%M@ïп‹Ãqy³�ï«qH°³v˜�|«ŽÌÜUh.?Þ’¦’Ëë“#™)ú!€FV!B½} ¥”øÎ –{oMª #[oœ%rUd>U6mŸ<à“™�$XÀׂù]†“ŒèŒ/ú£¢åŒ3ÏÌÌ'Ð hS’,ÛkîØÀÁ¸4 è4Þ|;Uè³ÃØé™À^†Ð3Î.X-×Ùvœ¨àúå1¿p2=ÁX �Ün˜}æÓŸK;ÔÓVÆžtã�ü�µ¦Œ¹è,²å–[66¯˜#žÈ©#€aö ©¯ôÖÙäÂX¯§žvJÚs:ç­e3CN^ÆàM�ãǯ•ú È™‡”#zè!0…Ý÷cû6›1¬ÂpÁð]|š€ò˜#k ±ƒ„ÛgŸ}›±a›ù™Ñãã�} õ€ýh¶ŒÌ�íTì±VÕ3/3bÄÈ$üÝÖY­l¥Ì*}Wuj=Ò$�\¬[ói;²gûYs€§­Ì2÷HyUsNlcôŽmTià<òrž2qܸ5ÒnÓ±–-{<å+`Cª± ú€¤•™¤sù´ ˆäcÜ_&É~ñ+úøDø:b¨è=5φáÿùŸÿN›¤‚T8[Á¼O�µÎÖxy9´[àèlª¾¹&ðåÃù‡úÓœ‹üTÊÈ–°Ñ?„çyñÖB¤"òHõÖAyC£-1¶Û~iûzK‡Zøƒü–æk·Øòn‘ñt ú!Hä÷ys“0’Œ}°†KœMèÕãAÕ?zÆ™ÎJ)óm}||ßýÓ 争'ö¥–Ù�-pøá‡á‘ÓO¨öZz™Ø†Õ*Öà` #ëf ëj£°?ƒY7sª0bÇÙ*¸åwQñæìGðóÈýÅ[4ìÂË;_!’/½ì«gÂÓðå`#ýŒý†çT®#;`PöaC~ì7ÛˆH€½ÕÔ8l£_í„‘ß;ØIITÖï˜1«¤Ìœ93}�øáO'Ÿ1IkK›m¿p9þ**ŒÄY_ùÊÁiŸœ—7Ðyo+æç$7¬×aô¡¬ aTp�±ò«ˆ É >¶S�ª¶RÉòá‘ÏFi;}ÆÚD²L }ë­·dœ´Æø5âsÿœ8émQÁ¢îO!l¹z"|¥gþ9*ùõ ®°wä§ñ?®…õÈØÚç£ùy•}°½meÈ–ÖK8ºòºr-ÙºæÑÐØæs¦¡ŠEU±ë†ûÄÇ?‘‰G뙯p�xг½¤ÈZ‡E:iô ÞcVø�Fž{êi§f)¯,Ÿ-g #Æžád O8ñøœk†S€âl)�Ö_ÂHCÀ è#ƒ,p³}HUýQ}C8:Ž‘âSsjÝt_;ý%Œô×}Í%bJà€táàÍI÷-*ÿø‡×–•A‡Äàx�ß| ´�  ÂÙ‰2ïÞ’†Ü0—ž!�Z" o‹†T.'‡ãºþúëóÌNa$3o[‹­‰¶­1�Šà 9`[нê9 ¬¿ý­ï a$S(pB”©x£ûÇ1“®pª-½M¶ŽžXÛÖŠ­^#ëL‰þº‚€P±"“¿p\Ë®´8äOvÀ’-?ÈRÎ2ÿ+®°RdíY¹ž_ pPì0@˜ÿf_­Aò:àŸL¹è7û3œ�4·W„Ü­G~d�=ZoéBâÐr.òE´¨ZS!8a„Ô)ÀŸîœ|ÊŸr¨ïÿ›±aÙ/¶Á¼ �¼Vw‹äìºgÒª†€ÖÑ£—ÉÃÃÉ_uÓ¨Q#s½°>ç U@옗Øò«_²Çí[é3�1šÊeâ츹³¥S`¸—ôM À&î¾ÛîiƒÆÇ£k‚[~þDäS¡/€ŸÊ7ö¨¼­‘ ô6J€¿Qd[„иÔ[þ y«ŒÈw誳Pd¢�xò66vô ÏOâË!ê öYÀãÐar”X7ìBh|Nk]`pe=Æ�4BR¼³-³ÙaD6pƒÊ¤ïÿð{09WÁ[|”Ëó)l¢m­^NpMôŸßõ–¹yAÙºa]±×¶Ä¨43. ¡";I#óƒwH¨9Üx£MÞÂÈü°ã[†ŽðSÖ†ÀÕú"CÄŸu°ä’Kd€®¢Ã Ø éG`I+önnFìß`ìÃcaT¬"¦½J Ä&;›�OUê-‡0”:;ØÍ vs ×¹¾¯FGØ~À�#á"aõá¨ø@ôY÷3ÞDä`¶¤±7YW�¹I îÓn†Í8&ü—5Ífn>o“˜XQ?uêÔ|ÉÅÍ·ÞœvÀvZ[¶Í»þê™.�{r†Ñ«ý ý¶Z2áÒÀ:§„ßaG½]œÞ"tà¨ÓN;%× ¢ËXÛ £B°ÍKÇvç ëÇÖ®]ß•º Yrgç� ¸¨Pºúê«‚Èת0 <å~*>Ž<ò瑜�G2°ýÎ÷l"—ñÏ o w¼Ù‰¬‡â3•0 )ƒ{`y*ÆTðzg÷Äã +†LvT ž¬+ ð0,zÙº;#³ï^SÃpÊe Íu2Ü‚…�PÅ9!PúCµÈ§Í“Áöv†‹,ͨ2þúãíZŒÝè0pJm­`ŒŠaì¯È`@�!d§…áíI>·,ôØ®±¯2Ýíϲ½JæC@+˯òIõ‹=ÖH)ÄŒàÇá{š­ý§s?þ~åé°B °ÿLúuÑOç@ɪgÿ"T1ÇyØâƒ È2ï vÚY £Ù³cÛfÈA–ü×qæ€x™È( <× 0dKç—_‘ó½b€¦M7Ù,ߺ&0î©õ—0BlîˆÃvŸŒ9œ!¬�RÝKSÝßáÜb}õ  v•1«¦³µvÎ9û¬t4J} aD'�›_|q<§Æ˜ŸÎj=D‡m/=! ªTMŽàKÅâŒCßeç�8™k}×ëTVèG¹žîo_÷3Œ8Ëó/8?«8ÕEY83Kœ%‡ @öé °hMßkdFØ‘{ã«Øã„­°Âòy½j 'cV‰¬Ðš¯�-ãz BÆÆaÕ*^«‚þ t,:àðFAN{‰zÑ…r¨ä¤ œè?pi=ÙÚÐÓá¨åºáöÝ:xkÂNáœÀØÚx |NO°Äæ!Å6“ƒÿi„ˆàUÀ±ÿ~ŸHRhE¬ýöw¿Iû®wE…LG„ÐC1Gˆ ¶üž|ì¾ov y¹hK¶õöзËbŽÈ—lN‚qv�Ž"UÖˆ*ZöL¿– 2FzçþØÇ Ü�.×î�ª9z«ßÞä¦]aO�eý‘ÐÌõÑ¿ßDâµ$Ì%€k‹«~¢ô©µÞzñêðÐ]×Z–ý<ÿüós½–ÄÂ2ѶNfÖs�±~' °®*û¯‚Æ9rDúC[Ÿm4®)¡»ªn�/>“ïÚ&lKñ›}éÙ žo�ÀÝ:°än½!¦e2²¾T2!×çah“[`}"–‹W€�‹9BæÙÏÇö{¾W%%’™. Þˆ #6ö`o$šàkÇÖ¤È]wÅ[æž™öÅÛ.UPù»êäÁèÇÜ&ŒT2 Ä>H(XÏ¶Ž°+d ˜ñÆOA­uRðœ ÉZ‡©œyFUräº ö¦óÖ(ÒHe–×_ÛJk­²ì<À†¨Âacã��{ ëŠ]�›„‘ñ§Ý »…¨c7æ�y�yÌ—uõB¬£3âåW]•�0™:SÐvKþ°“þõ&ÿòûWû1@ûMWô¾=1ð¹ùRõ/¤ýÿ§°™ì×´iw¤Ãîí„Ûyfà�k®½6^yþ@úlO±¯�DrLÓ › §‘Š®W¹ «³OŽr�pBr#]`9þʶ»ÛÂöKÆØÙ€\`“‡‚0?ÑaoiF-xIu(»¢ wT$ÄDðõcýÝÿÀ}ÙwñÂjA”HÒê“­rWÄ}¼�oçH¤H¸ÃÃô “Æ6�íô Öø ßÝž†Ó6Žä�-îâ"ëÝ—¦oÖÈÝa·ÙvþO•Wk[Ûs‰AöÞ{ïLL¶ÇS%¡~wèçU¡Ÿ*L,·¨HרIÁÂr…h‘Ô¢üé‚ .”X��¦Ï�4²âk®‰{œg Ýwÿý)#Iœ…wh‰)Þ{†>;»IaÎÙz}¥¯çž{nèγù{s…\r-âËVBIeø(yéÜF×ksÂe¼ùá·ñ*aô™ü–�™–†ÖÂr®jÞÖ™·ÜŽ ¸öv€±a �<úÈ4YÒשyñÅÙ¹wØu#F,– ×^xÂa¼1Ãý!Œà¶1JY¯‰ç .ïŽEH6tuFÔ¢±�±ÔÈ©ÝwO‚‹[�;�–Lx8ÆŸ#³+éI>2•žãÐæ?y`píÏcÜT™È #)8/†IæpØ’ ·0ýý§ýþ—^vIi!ŒvYuó) ”e 3•K=s Øp¶"(cÐúKÙŽâžÓƒh,™‚n¸!A‡2ìÖ�{ϧ3}Ç;vN篒 û¡tùðøO #ºÍ¡"d¼íÉ¿·�Œþ¶áä¤2DíM�g(™v†Äô;§eÐ:bÄÈtFO…ÞO‰ Ž®/JêU%�й´�àøxŽ9U­ü–3Y8È•³fÅÖ¸X7È8„‘ï@‚8¼%2‹R¥Ö‹Äy5ÊnmGBfÊöýßà$!Œ«ëëõ‡^—3 TœÈ,Û‡žÛ-#P·•Ö¶<•%ª Ø$#¬%Y:ä-dê÷¶‰Òi:¼y; ûñîwïöê^ðXÉG… RùäZ¤›à)Áé÷t³UÆèoAÙ¨ÄyϨÌAj¥È§7C+ëLàTÊöeU½Ïß|‘=°ö¬‰�vÚ%pfk5'üáøæÎ�ÿ  nAÇ;âuáæ¨Eèܘİä *ªêl}’¡³õñæ›nÎg°í‡~ólÞËñ\6 ²Î:ëå^~× bUt"�ƒÈdçU¡€t«Ï­~Ï?këíØ®±¹ÖœÑ£o5û’À3ÖŠ À¶±G~$³�Æì Q„ÄTJ´ªŸ^;D±/à•Éž|CT'Fß‘»ô”}¾ù6�™ àX “ã‹þãK/½œkz•UWÉÊ"³j*: XbÀ™K€5_—æºX2æD‚„¬‘ÈäBg;}K�ÎŽó�×GàñÈ#Ñÿ�÷baW�v€¯j,ë^€ðyAÉ›_Ȥؒh; pçÃò+lÚˆèëÈø7@NÈÎ7‚0�ÐDß+ðñ&§g‡†ïQ‘F‡�Ê‚2„?,8Œ~°×s³Âˆÿ³NúkˆÖ)›ÌÏ·Z¾2ך…‚ˆ7öù®— R2@u† N…†õ1�ëØî¾�òeJ¨ iXO×Uˆ!ßÄ´Ó`#ÏȺšÛ„Q¿`�íF‚\ö�{)ª ü]³}�-!ö¾Eö™·¡ Œ^íÇ ì· {Ú´;ÏÑ:ªbL26×ÿQa¿è°­ºt‰ÿ�À-p—†ÄƒÀK*‰øu6Ÿ> U¬g•(ð±—³Œ³JFÎ% ÍaÚ×^{mVÙè“­—£Â.±Í 9áwdK׳‚n*Œ$ î ÛÈïØr'Q'!>?ðþ±?1läÈLF\ø_¦Ï˜;þÑ4“Ÿl�®ëÕÖ/ R6Ÿì:iú aoüӦ߸ëé»­Ë›mºyöÇÚ†Œ¿´‚÷0*,%ÅÉÜv/ºÆÏ“•TÆÑW�,a<ãþ}àÛ["9 Ÿ²¯cã™ë>QeŠðãÇÊ8`Ôü\ˆØ³k�ï줱�Hl‰¥›â™ô™èHk…žÀ’L†<ž ¿½þú$á…0Zn¹å^oç£?*˜mŸƒ34ÄmIÚˆ[ázØÕèš6'¼á™µÕ-io(L-V|R[a_-_[ݶÕ!©*D€×¾š3LöÜsÏ`¶×˧‚àO‘ ΔÞ#JT]22­'žx|+¸¿ Ž­˜)q½³n öW©ë³hŒ`fé0„Çu…Ñbà5 ;0_ŒB÷>#œÜƒsa¸eI�Ïëâ­5gŸ}v1ݯñoÆÞs6 ºÏ>ûe Ñþ9}ÆV;—i4=:–Ñf˜³~àCù�ƒÔÇþŒ“S6%@Ç�wß™[@î5—*hž}ö¹$z¼b\Å rH@í¼Ó.™aDŠpÖ—Ù€UçDÅùb #GŽJÃÎ"ïÖŠÊ¿+ ;a ¿g÷=t]ˆF–œÚ›1ú~ùå—§\ÌÿBð/�¡-ïˆ-‡('G6í�³å<€-¯�, •l÷u†½+ózÎ9g§"i/<`í­Tš‘Ýyœ—™ºdþT³•}ât@FlûW#NKÿ™³Ï>+ç¤ßK ²ôÒKå8é£`›3ÿP”äËÎy¦±8,‘|œA£TpBpf®3—ãÆ�ÍC^ɉ÷ù�¬¯²µGFÊÜ e`z® ð7n�5Ro\œ¼@úÚë®Éì[ ÃÔS³¾�-f=Ó;ú×Þ™ˆ�ƒì�Ãé)°¬È”Ó+•/íM6HÅòñ‚¨ŒògA’‚Á9.í÷?·Í;Sî@pé\8ëÙ:Z6› ˆ"ÒbtY|Z1s¬°™í‡þ’“Š6d2àÞ-¶~±7#ˆàßvIvéÉX'|‚ <ºm ׸±k¤�B"¨zjžtVå'}GZÒ›™3Jû«¶@傹0 ÚmÝÒ!úP"œlsÐOÄ•¬+ ã¶ˆ &�»ýùÅŸy.òÛ½¬³­Õž«!Ye{U¦Ý¶CFÜ[ñè ªjÓ¨Lòy¤GÉð{ƒÌBœÜpãä­ä„\g7¬ 2Dº�€s©vé�ðÎNÅÌ»,¯õËOL›vG€àçR>Þ†G—×Y{Ý$ÑdÙ%sz:¼Ü¯|oÍË“éWm‘ÕÝoßýr’}±Ë*K€x‰[ë–(¯ÚC+UÈý+B�¦‡+ýcŸ±]1^÷s•+{ÅÖÉÉ~½¯ç›oöŽ�lU®‘s ¨ÐŠ~°K¶ýY××X£9=þ„ãóYü�Qu€ðfóõK?Þ­êºuó9‚²ö6PýÐ/•ºúiûRÊé¯ýá(Ö±`Åø¬•’±î¯} 7Ö ^H]Ûzœá!¨ç3ÈÆ™F²éæ[…BÒú|þùt=ë¤YªÆ½ÝiÊ”[¯XëÖŸJF¶‡_ S¶Ï6Ûl›äAûýÙ/[ƒøDrW1°Þº§ d]©ŒïDoç´nÚûØÓÏl”ç˜�‹.f7oNyóÈëPf±›Ö˜uËwÒ¿žžÙÓïk¿ ·ß>5íBidÝÍc€§W {Ðä»àÞ<±—߉ÊèB‰°…Ÿ?ã{Ø]ØÖ`÷m)âïaÄ}>¶oVòÐvƒ¿„AØvoYV5 /‘ûk-ò¡ž¥ÂŸ�€Å¼•¾»:ì…¾¶öÞ“¬Ú×ê÷ãé÷è­‚Ï:S=ô¾÷¾?}‚­ß`t8ýSôÓÖiþÍ‹‘ø UO°�ø¥'ÚþÌž~¦ã¶åÝØ ™ÒzçoáaÉ~d[;áQî�€³vn¼ñ†$ëØyµô_’Ðÿîø›þ‰­�'Ÿ|rÚÙ¥Ó±bE8Ö3—Xâõ[ͬuGˆÉTÒÁuì1<ÒI+DÕ�5T�>zgîÞÏÎñ×ãǯ™÷w6˜Ä“ÝÝâ~Is&¢Ø—®ˆ!TîÃüöR¡]]c3Ùä ‰-2ho�â�ökÞŽ?× £·È¬ç‚�Eæ 2%î_ ‘‚eº4À«-xî«döÉ3Ö€ 'ÇXTF‡ar?F�Ñç,D†õ…2ØbÏm¾úš“”�ð|}fp9PAŽà’Áw_FØó8`[VÕ ½½.›Cã�´H‡�rÆÇ¸p~=5FŠS4ç5y~{+‹-Öo$—ëôQ_e´— ƒÄ™ ® èdœÆèžä*x— geRTa½òQÚM¾Œ,` tˆ¬€qŽ@]ÏÑ‘?¹êƒ>ªh9²uî vÞ\µÅÑO ÒÑ¡×d%C²Mœ=eÛˆŠãôüöVä¢ï²l^á)K`<²BÁòñ<Û·\K6í­8jŽ×‚ e”Þ¾#zçÚGÃQ ìü›žäÀCwÇXæC À1ò© óÅ!n! ú˜c�É5$€W• ÂHe‚ ”\‘(ˆ4ä’ߟàTP#�hNœQèZ/Ö�Ê£Öu­3ÂüÎÜ–/²Èë¢À 9é+yd}¹¯æ9Í'"çR…‹ñÒ#åÖôT@çœE®ÙX#ô†'Ûžš9\,ôÀõôŽþµ7 ÐIN@çmm9Öã¹ô¯½!(lTuègAúg>ó¹Ü;¯Ýõ®ýÚáø³ug#_}ô±\³ì9/²ðö7A{SJ¤é”µMŸÙMg3éR!vÉ1L¯Ø@²a'+¶¤ Ø�/ņ9{Èú“¥{!Æ´¯ž÷³F¬kº½•uBWØײ#ÅÞê‡õâzàÝúX7s’A®Ï°S³žl³›Ñ_ä˜yYøÛÇî±›tÁ|’E'ý›ÓóËß‹�¨ý†ç\kX‹ô“½ˆÎ¦ Ôgó€`8%Îòa+Û #úi<Ö«—¿°áüž XöÀz…9€WøvZ• ¹ÐóÎ&ÃÙ,¶€cËùM‰eý€eè<«z[¿ô&ôo¤d±{E>½}/ýN¹Žuv›~J�ñwú@¾Ï¤ž<™}ô9ò1�° ÿÆŽZó=áÐÞž_~o¼ü’û’¹Kþ´ä‡ÈÇýÉÉøÛ[!,á=²3tŽþÃôMÿéb{3Ø™ŸW¯±Qlˆ9Y|ñQ!ãÆývYzØ!™”¶cÁ¶úöÄLû3zúÙKÀó½ôÂ<¶žÃŽÏ—ý´嚨|:âg‡‡>=G¼7�Ùh»£ïHso"6ÅßCÁ:|® 12hoäÔ Þh¿æíøs%ŒÞ޳> Ç\ƒË˜ùb »DÑãO8. Ù`Ž­§†�Ǩo²I0ÑA&º§ÏäwúYúÌXé'PÍõÔïòŒrÍœÆY>?ØïÅú®_äª�œMO­^gçzè!ÍôÈ<¯¿þ¹çW¦UÉ)à'è­çcn<`ìî º_ËqÈŒ\wݵQÑpQ«2* s÷µ¯#³¼Ý¯iÿ7¹£æY½�¯ý?ëg:äøY?�Éõÿùïp«ˆÛ~»a$+ÜÞ<«ýº9�¯\ @»ŽŒ€™ÒWršÛÍ39FsL^‹a$s\ú07ž_ô�œmÙSfl�”ÀNŸÈ@CàMž|}d,ÏÎJ[,&NܰÙ7ÞÞEç…Œæ† ÚïYô¦5ÿ¯É~¨Æ&“[#¤„ŒÚ®ïܵé âÍÜ{®ídeÎ;}n™Gß]c}µÍícìéçwdeµòv¼NŸíýöl­' œˆÿÐ3ú­YÏúØÉsÊø<§Œ¯È(o6ˆÿ¸gw;Ói¿ñØŽ/íÞ¿öõÙñMæÁõ“Éîk-¿òz‚hNݨ~Ìé¾Cõ÷�Ú×Yßô¸èmùÞWßz]_÷,3_Zùn]u²ËõsúÞ]oû³Þçtï¡ú»ù súÊn•¯¡”C'}-öÍ÷bßúc¿»Û/þZBOÎ 'ž�„u;aÔ½Oåzrh­Ûžñ}÷ë|>eØÁ=ô¹N·çE+Ï÷¬¾üNË.µbDË`ûç¹¾4cîT_z�ç”çùYëë™å9—^þÑ�”d‹ÃÛ�—ÚS±uÇþ¯ Pl¾Ç0“àVŒô|¾\l R]å´Øeß}ö‹]'[¿’p|}EiyÂ`çÃøè�Ö×¼—ç½]¾WÂèí2ÓÃ|œÅù^ dOËA¦ÎG¹?¶—=„„¼§†‰wîŒ*9ö¡nŨÃÂI”¾÷ö¬NÇÙÛõýý}écw¹ö$[÷V¤ªåâ(§þY0úö°ËR*¥w8#ÎhÙœ¾™øòœN .ða϶òd¤‘ì¢km ûòWÎï}=¯ÈÕgæ4í÷q碙?û¾ÿ½¨ÈÕu�ŒÏç´Öu¯íuïO_[wÜÍIoé÷ÜìC™Ïõ³g•ub$@ P൪!vvˆí ‚V[�­tº'~pÒ™ûW½ñ½]þCõäÞ£±Y!g^[æ¢ÓVæÑw­èL§÷(ãvm·ŸûÓÚŸÝÛu>ӮߞÕIs]ù*c*cìäú9}¦ØCŸÓ§Nû5§ûÕßÛû×¾>‡êþCus¤ÚVC|–¹êôþÕ�Nï?ØÏµÆ×²•e�t2Ær�ç—Ïw¢¿½®?ãôŒö~õçÚ9}¶]o‡ãº2ö2þ"ƒ2?sÛPþ½ô£ô¥èF§}q]±«ìŒØ¨ýúþè5”¾;³,¨“û��ʳ]f½ÝÃgè¢VÆ×Ûg;ý}'Ïíé^½®§{õö;c…Ýl›ûQ¼Ñ¿¿ü¥¯äÛ×T !#;iåì ˜ß± ,…­÷ªïè™ «»"6ðÆ:•n¶ù!Œ¨²ê^)Tž9ó1/äXúûfù^ £7ËLÕ~¦—J•ÚÓ\uwñØJÐ*oTâØ¹ë~Ÿ·Û¿ËV•\§ÇëÞqÍ™Œ´ƒóÖZ«ó·=t*?Ûe+’ ˆ(_Fxž×d®³Îº�ÞjPŸsHíGž‡ï9WAf_¾­=µ ½ÊVFç¸8³G‰;�`›Ín»½'+Ûl�EZÖ6g ”³?i ÕkŒýݶêïœEW?Q%P%P%P%Ð�l5³%ÖÛqÏ8óϹeÚ¡ø›nºYW×�¼Ù%€×A}&Ï*dd'cTUó« ºúê«û­[ë%üo¶—ûLІY¹´Áú›wFÅ´3Í†Š˜ë¤Ÿõ3- T¨j›J •Òkß#wÃŽôØ uùê4“ÒãÍÞF¿ÌÌATmÙíìçhÞxf/¶À�1/g0 •hì;o�¥gY½²ç_yÉ8ÜÛtg?Ì‹vûíS›³âPkçŽ8¯Éa�Þà$ãQÛÐKaDÇTÙ 8*[ܰuw_™¤¡ïÑ›ûŽJ»ó E¡¿Þrâ0REWý}sÏkí}•@•@•Àp‘€„­—©HP\I6IYgØHPÔöÖ—€ê":0mÚ‘è½,ßf»ÓN;7c»Æ¾ZáØ‰�NªÕî½÷ž<¬úÞûZ1‡ß‹ET*I/¿Üòÿ?{ogguµýïLÜÝ…™8q"D ÁµX�âJ -Ôû¼¿?ßç}ž–B¡+)^48E$$!î®âîò[ßu¸áÎôÌÉœ3>\÷‡!ÉœsÛµ÷^r-ÙÞ°›>Ø4TŒÈ§+ÂEûFE‹§®&„@9F¢ˆÆê4èeÛov/Jôl:¶©s9~Å2õè�¿�…ì®ÃŽ#”D’͆Q@9)䤎‚#@v�¯i:Œ±5›-Ž’Ü‚?•¾)„€ô6�…±—Ø•Œ¦Õì䉽¤£â#a©Ã¦&TT6[ƒÝ±Ù@#“ƒžX´¡`“ÊÏ ó�YTݯIÚvm›4¥“Á”ɳèœüa”?6úD�ï(A” ‘,*4FÍ4¿gP”ÈëE"[�RSvb9|#¡†ÿ¨”4ý!À�'òÇüÍʪd¤QUDz =Ò¿£ÎB@�ï‘ÞÆ^"àƒ®! [IGÅG€V Ømdˆ³[»(”Ê´ò{p¿ ù“ñ¸›¤pMlÂ(Ó\™E¥7¿D•öº³B@! „€B@! Ê$"ŒÊä°è¡„€B@! „€B@!Pzˆ0*=ìug! „€B@! „€B@”ID•ÉaÑC ! „€B@! „€B ôaTzØëÎB@! „€B@! „€(“ˆ0*“â‡B@! „€B@! „@é! ¨ô°×�…€B@! „€B@!P&aT&‡E%„€B@! „€B@�ÒC@„Qéa¯; ! „€B@! „€B L" ¨L‹J! „€B@! „€¥‡€£ÒÃ^wB@! „€B@! „@™D@„Q™=”B@! „€B@! JF¥‡½î,„€B@! „€B@�2‰€£29,z(! „€B@! „€B@”"ŒJ{ÝY! „€B@! „€eFerXôPB@! „€B@! „€(=D•öº³B@! „€B@! Ê$"ŒÊä°è¡„€B@! „€B@!Pzˆ0*=ìug! „€B@! „€B@”ID•ÉaÑC ! „€B@! „€B ôaTzØëÎB@! „€B@! „€(“ˆ0*“â‡B@! „€B@! „@é! ¨ô°/ö;=z4:t(ìÝ»79r$T­ZÕªT©²²²Ž¹ÿþýûÃÎ�;þ}ûü¾?*UªäçÔ¨Y#Ô¯_?Ô¨^#þq8p`صkWسgoØo?zähà>5kÖ uëÕõïs ~âG¦çů¡¿ ! „€B@! „€E‹€£¢Å³Ì\ ²ˆH õëסsЉžºuë~ªU«v̳nÚ´),Z¼(|ùå—a÷îÝáà�Ç|^¹råPµZÕвe«Ð³gÏмYóo?ç>[¶lË–- k×® íZ‡ uëÔ ­Z· ]»žèßÏKTezÞ·7Ö_„€B@! „€B@�bA@„Q±ÀZò%#(Ê&Ú¹s‡E»,ãg§‘7Ú5kBÕ*UCçÎ�CÛ¶íBÓ¦MC­ZµŽyÈ+W„1cÆ„ÅFíڽ˯U¥r•P)+‘äÙB5j†N�:‡Q£F…ö9íý|²—6Y´rÅŠ0kÖ,¿×ž={¡#‡<èEó–¡g�¡c§N¡m›¶¡^½z…:Ö?„€B@! „€B@�bA@áÀ†@IDAT„Q±ÀZò=`A‰l¢õ–)´0,]º4@}¹~}غukhÓ¶m8ïÜóÂÉýúiôq=)dÏ?Ÿ~*LŸ1=:x0dYF¤elNµjÕ´ì¢^áâ‹/ 'ZÖÇ:Ë^š:uJ˜6}Z˜9c†—¥µhÑÒË×6lÜ*[éYI}Oêεûw2â¨0çùÉúŸB@! „€B@!P¬ˆ0*VxKîâ�E�7K/ 3fN÷ò2Êþ²³�7†Ž;†k®½.Œ>"ää䄆 óp_|11Üû×{-KhfhذahÒ¸IhÖ¼y¨S»Ž� £5j8ásÚÈQ~ JÊ,\^{íÕ0uÚ”ðõ×_‡:V†Ö§w/y[¾byØ`¿#ã¨{÷áÇ?¾É«“ý³ÅK§}^õêÕ¥q:„€B@! „€B@�âE@„Qñâ[bW‡¬™3gv˜;wn˜7n 'QË Ú²e‹gµnÕ:_Ââgü„ñáOwý1ä®\ôz÷éº�Ø-4±ò5ެJYFÖd9!Ô¬Y3Ï>¢ nò”ÉáÁ‡KŒÊÎαò³žaðà!¡v­Úaé²¥aæÌaܸ±¡QãÆáæßìŸ5jÔ0̱çLç¼!C††Æv�¼¥t%°n$„€B@! „€Bà{„€£ 2ØdÍ_0ßO/ «W­²>D»9ëÖ­32èsÏ(ºÖ3ŒNõì  ø›Cú>|8Œû|løãŸþhß_F�vº“F]ºtµ,£f^–VÓúÕ©SdzƒØéŒs(ƒ÷ù¸ðç»ïòÆÚ§ž:2 6< <Ô³‘æÍ›ÆŽû,¼>ú5–®¿1 5⇒µÙFn¥s™QíÚ�à�»+È�é5„€B@! „€B@”YD•Ù¡IïÁöíÛ¶oßî�®iD½}ÇÏ2šn½…F�~݉žë®½>Œ1Â3�"ˆÝÌøþX˺瞻êի �ƒB§Ž�¬4­Q¨oÄRýúõ­QËбCGÏòɲ¾DQÏ$²‡þzÿ}Þøú¼sÏÇ·~EýœPš4y’F}ôa€púáW„S�ZµlæÏŸ—Öy#†Ÿºtéâ¥ré!£o ! „€B@! „€é" Â(]ÄÊè÷)+㇃  mÛ¶yÓë±c? Ï=ÿ\`¯³d„Ñþýû­Yö'ŒîÿÛýa¥5Êîaý†ZµjåYAU«Vó #W÷êÕ+thß!4·ÞF�F[¶n cÇŽõÒ²íÛ·… /¸(ô³Eœ»Û2œh¤ a5iò¡®õ6¢Yö€åq -Lë<ˆ.ÊÝš5kîï¨ÿ ! „€B@! „€Ň€£âöį'ŒØ�]Òâ„Q²’4²‹ ~>ÿüóðèc�„eK—…N8Á{ÕªY+ìÛ¿/|i�³kÖ¬ºuëúŸ<À³”š5mæL”œ=üÈCNP�sι¡]Ûva‡e7qú'­^½ÚÉ¡&Ö袋~`ç÷­Z·‹/JëZ:vêîøù–íÓlj&j?òÈÃaÁÂ^ªÖ>§}èѳgàO²�ÈrzñÅ»ÇEF�lF­!Œ–,Jë<#î)¨Ԧ”n,„€B@! „€ß#DUÐÁ.(aÄ.iF4±¦ŸQVV¥P»öw»¡QR6~Âxo^ýÉ'c¬ùu«ð»ßüÎ{‘I4qâ„ðÀCxëæÖ_²èôQ§‡n'v³¦Ù =sé!+YÛµsçw=ŒŒ0Z´paZçQ’ÖÓ®­FtÂ굄€B@! „€B L! ¨L GÑ=LA £DÓë�Þƒhó–ÍžYÔÖú±‹ZåÊ•½Ñ´iS�0zïý÷¬\­IøÕ�¿ §œrJȲÏ'Mú"üåÞ¿X¯¢UN"± ÚÐ!C}WµÝ»÷„/ìóG}ÄËÔ®¸âJ;o°g±KZ:ç‘aÔ¥s¿Ñ¡¤+ ! „€B@! „€Éa” • ð»‚Fìf¶qãÆ°jU®—•±ÃZ÷îÝCÛ6mC½zõ½±õä)“ÂË$7n¬•„µ wþâÎ0xðàPµZµ0eÊ”pß}F«CÿÂ`#„† êÛ¹¹¹¹ž�ôÒK/†*U«„믻! 12‰]ÖæÌ™“ÖydµmÛ6ÔªUÛ3¡öXé͵!µš4ib¿¯å»Ãñü:„€B@! „€B@�Â! ¨pø•Ù³ JAº¬³>ES-‹èí·ß ;wí ýû÷÷-ì;vìh™GÛÃÇc>3gL¹F*uéÒ5ÜyÇ/™DY•³ÂôiÓ|·³ù „¦Mš†^¶“Ù9gŸêÔ©fÏš¦L�êdS‹ÍÃm?½= :4ÐP{ΜÙi�7lذP¿~ƒpøðác.vo:d˜ïìy”••UfÇD&„€B@! „€B ¼ ¨¼ŒTšÏYPˆ £¯¿þ:Lž29¼üÊKaÍšÕ¡Më6¡Ý 'xãê½{÷†iÓ§… 6„Ö »ïI'…ýèšÐ«g/ÏèYhÍ®_{ýµ0cÆŒ°eë–ШQ#ßI­zõêañâENFmß±=t5¢éºk¯}ûö |¶dÉ’ŒÎÛa½�V®\é„Óë­Äîk”ºõêÕËÊéªyÆQšPéëB@! „€B@! „@D夢ü³ „Ñ¡C‡¼ÄkÉÒ%aŒgÍ+W­ ;wî 5ŒØ Váµÿ�ÐÒJÑ äd¤ͯ9 ’èGD†Ò¸ÏÇ…µkׄjVªvôèQï[Ô¸qc#—z{ÖÒ�ÁC<(+«²g etÞ¦�v¿ùV 7ÙŸ—ÆÚ7ßü“0pàÀ@¶QÕ*U+Êê=„€B@! „€B@”"ŒJ úâ½ñNËÄùòË/ìٳÂÇh7«Î<óÌлWoH]§N�c AüÌ·]Íæ„ÙV.¶nýºpÀvM«\¥Šõ2ª:wê†f»Ÿ�è;•Õ®]ÛÏ'‰Ì¢…¶ëÙ¸qŸ…E‹{íÃFD‘‘”�“ãåk={ô4²(Û›isb¦çmÙ²%,[¾Ìw_›:mŠ?ÛÅ?¸ÄKè¸_{^B@! „€B@! „@áaT8üÊìÙdAÊlÛ¾ÍKÎhݼy 'l’+ì–¶}ûvÿ!;i×î]žy”eM¤k9ÔÀúÑ\òˆ’²ˆ˜¡§Ð�ÂŽ�;ØSÁ–eÕ*é둊ö>àYFåqÔôÌB@|¯Ø·_ؾ}{زeKظq£‰5BÇC£F�¾×¸ä}ù={ö„M›6¹S±ÿÀþP«V­ÐºUëP·nݼ_=æßE8"Û¶m 6lt¢¨}ûö¡aÆÇ|Oÿ�mÛ¶…ÜÜÜ€œA¦4lÐ0Ô«WÏÕŠø¾EýN¯¨ýÏëáˆnÞ¼9,^¼È�ãììœÐ¤IŸ£8·…9ÊÊøñŽ�B›6o Ë–.ub¬C‡¡qã&NàBê®_¿ÞȤ�îÈ£×Z¶liÁ£Ôú­0ØèÜï8Þø¤K°s=~ ±ï8bߥC:tЉDŸÊ$ƒHLþé­‹Èâ9¢€„QAI£è}¸ŽžF1G«W«Î% |T´÷)ð‹—±/Š0*c¢Ç¥‰ eÇŽ᫯¾rC„çAaÕ¯ßÀ�†âÈd!Jù±c现לüC‡‡¬ÊY~?  º2€Ž™ŒÏÚukêU«ÂŠ+§áƇN8á˜ï•Ö?ÜÐ0#–ùTÓ"žd))K×€*ìó3§–-[–˜Ë»w¹óÛ§wŸÐ¢E‹”—Æÿúë¯ÃêÕ«Ì!Yjש†�o»²�oʇÿ~ˆÌ:pð@8xà Gf1®1p1’u¤�Àš5kÂÄ/&8iŠ#Þ¶mÛЪe«ã­éß©|�QÐy&üŠ\qF—-_>üð_óƒñ IQØ'Å5~d�`ëìØ±Ý=UL>µkÛÎÉì­ýFÐ’[ÛH‚úõë{fçðžŸ|2ÆÉ„ÃG„Â&ƒ0›;wŽ56¸½Ô¼Yóн{�ЬY³â€BÜ�±;b¿û÷ðLFÆ-Êœ*Ä¥�9µ ëõ˜“ÒøöMªñ9^&3· ··šýk$Ä ?;í‡Ïraÿ6hÐàÛÆ>NÚðdðp2]ØÒ<[Ó…d�Õ1¢†k4iÜÄu#çǯÁ³Dó“`ÙV{žmö<;ÍÖäú<cDà€¹ÙÀ‚îÉ8ÒüL1›áᇠŒË�®üQè߀ëH—ÂÅ5~z°u¸þØqcÝy¾êªyPå³·¾6⇠Ø;†ž={†Æ�{¶É”)“ÃãOüÃ÷믿1 °÷ÄyG¿}<æ#Ϭl¶ö9íÃÈ‘§™ìË)Ìëû¹‡ò÷‚ÜXi™Œ’°ñÈˤì)¿.èzÍïüãý’r$¿ñ9ž½ÍcæÄ”©“ݦ#³sÛömnÇ=r4´l¡Æ–åÙµk7Ÿ'õ!àÕÒ?�Ÿ(h¹‹ã'ŒK–,q}¸ÏÖd�×n'vC‡ uݘ,€ÍO²ö¦N›j³Õö~ûÂ! ÈXr�g¶uîÜ9tïÖ=œdz�çHv@`Λ?ÏÞgžûØ«�@´N“6mÚ„¾}ûÚ;�èAÎŒŽí}âïVžÿ.¨<�^ìÙÝÑ7'{û6"Üé�}lLn=WD0Ì©z À`åaª7[,‹œÌ¢µ°ÿaÌã÷-«GÐïÛ·Ïq‚'"ÝÔ”õáE©°Êêûç÷\Qdà‹I_¸�)AD “9ØÃ†3!ßÏ„|WWìù]ƒß{dÇÈpfN�oªùƒb?ásSRÓ¾�˜¡ ûŸÜ?üôÖŸ…“O>9Õí¾wŸY\²dqXÌ�eÀ`X^pÁ¡sç.e‚0Z¹rEcQJÂ0|s²Û©ÕÔåHIÖÊÜ•áÓO? Ì÷´þ3¤/»ìr7xR=†ìÂE Ãd3Ô?þèCŸï¿øÅ�aà€�©NÓg¥„QÌU– Ù¼ÞŒo" §œ2Ø3cJé‘Êõm§™þûc�x–Ý`ÃùÛ«gïÐÜß磠óLøï,‰í±c? ÿý?ÿízægf'Œqj‘è™â?²6–/_&L˜^}ýÕÐÈ¿ÿÝŒü©žyæé°ÚäWG#‹z÷î†XÆ9Ù'�K÷Üógë)v$üòŽ_ú{b—}½ák¿ÖÚµkÜnm×®]8eÐ)æ�·-Þ(äÕ!(£#ûwÂÄ æWT §�:Ýß[±¨2‘ º^3}�(#'¿ñÁæMu`Ee•¦˜»íwÌo²wð¿v›/& !�ºt Ã-ìs§NžíYÕzËñ]®A€’fæÌéžQ�eä ×€í©l¤Ü 'd‡¡C‡ºýÓ2–1Š½Î»0�˜ûnW­ÊõÌ ªFðp´1ã9 *;¹wª­5ìM/1ûæ=WÎK—- Ÿ>ÎíS‚8\;"ϸN-ó'Û´nãáfS‘¹ VŒ{EzðªH‡£ 2š0Ò”§Ì¶ˆøXS¢¹¶Øã‚æ?¸8PŽ�¢ÉO�á࣠(s™`L5å•c‘‹ÒpøâïP”‡£äd…9¶D{ˆH 6Ìß“úÚŠ¶Ð Š$JöóñãÂC¹[¹r¥ õ“úœd†È`û{W7bP©æJ åA4 |›Yº4Äc²#ÊH™={–•BL K‰�˜¢a¾Þyç/à�ƒ’�ö½ý]�!Õ—”q«Ve§ddÆŒéF8>î©Ñ£F�áÑ$Èë’)‘%DfG”™=}ú4±ù ÁÕÉ.æ8x‘E·Ì¥éf#Ö¯W?\|ñň¦T’¬"½e|éaTAF“…Šs?ÍêÇdÌî"W4#˜Ûnûy þ…’ßDŽbê¢ßzû-ÏÂá„Ok+ç€lª‡+n#ÕæÍ›Ȧ!Âóƒ‹.v!‰ÐÊ/“Š”MÒ€IÓ$k«^ÝD=o~\yÃ*R�Ž÷?ð·ðå—_zfQ«þýûR�‰(DÑ‚Èpã<ˆ æÛ.ë³ÕzÇ|õõWN8¢(H‡íܹ‹Ï½d˜ìùÆ€ £‰ZýY³fz¶©¯¿6ƒŠ(wy8ˆæ ðvZýøWæÄ¢0YöÆ%Q,}™¹†h¬CÎ!ÒÄæ< D ÁÊö=ÊòêÖ­có³î1¸£x9BŽHFV2BŽq�LflöØwYߌ½0N¨!§‘3FF”Þ Î|çØçÚéÏÅ»ñ=Æ¿VíZ>ÿ1Z˜ÿ|Ÿû0g&ZÔð¹žuÙ3|Ø#�ûØÜÉm-™¹5åŒ2ÑxÖän›;û #{€PÍ®I};Ù"¬Ïê†EÞuI#kîýð¾\³ªaÇ=èaÄ\‚ưÎÉÎ,è¾½ã-7ßb„i7›Û[{z0T®\ÅÆ°¦�M=ï�Äx‚ÏÁx&RÂ+™_Ãq¦T*~�ÑçcccÉ»@Vc|å'Ÿ£sÁš÷7ÈV®±ß~7‰ÒU·ñ![²ž�oª^ÑõòþÉüJÌ-ë¥ÀܱõId�ƒ±§ÇÑqˆcþø|wýúuþl¼¸Ä?�ž9úµÉË{ã WÀ�yÇó÷2£u§Ím0â<î�]ÏŒLÖ?üžy³ÂÊ)O¡DsÉÒ%ÜøÁE?p™ùÉsDM;y_v^ûĺˆîÁ±æ(Cd¸o´6�o_}õ¥õK:èºÐº@ø3²YÛìD9Îû g9�y@Ï"LJíݸ^-›×”õò|?ï¼æãÏ–Ž\áû…‡éÓ§§Ì0*ìº�¿[²¿g:>ÈÎĺÛg8'vt;|øˆ¯-æò˜ˆ9ãÊÕ±FÿÔ½®¢ç)è<›3gŽãG_tg7“8qÜk¯ÉÆÅ:";”u„ �ÖQ„‰ß7ù�Ÿ÷ÏÿœGG¾�§[,ûAù »âÕ«_Ï{§°n˜{›M~ºœ±yn›/ùw˜¿y~ž=Ê ‰ë®ËyûöRÚrÈ¿ãúýcç³>Á%~øsÚw÷ìF/&Î?7{&Ö'NçŸï¾ËeD² £¸óþˆ6?ÙÚ­d2YÂýãë�Þ'“ #ÆŽÇ+¯¾ì%d5M&Ø?óŒ3ÝVf,øx‘Mþñ˜�míp¤sç.Fætp�D;‡>ýOÒžrJÂV‡ÌiÞ¼…ËÊëÇŒæÌ™möÙúÀ×^s]èc�`æ¼gb™?4ÉÈ«ÑoŒöß]n™Øƒžâ~ò’1˜i¶Ô¿^zÑms²‚úXyÜi#GY =A<‘áKÆCÞ­¹õŠüÑUW‡~ýú¹þ¥Ç $÷á:Œ-Z@˜’Dæ`Ezl€Štˆ0ª £‰PÁ9ZgŒ5©‰¹¹¹aíúµa¹1¤)f[*bÁ £]N¤¼ýÎÛ¾ Ió…‘ÆÑcAW„ekAA­n]3x.¼àÂЭ{wwÒó3à,X^}í•@Mî‰]OôšàîvNYo2XÐ1C)`PŒý†0"ÒpÎ9ç8itRŸ¾®<À&2¬0ìPš‹/òTÔ–V»ÆHµ –.�AÜËJ’úžÔÏ•µËÉ”5ó+¯ú÷xMøRsüº˜b,O„QD¸.\¸ |h¥Lû Ï:^¡�hôuÚ¨ÐΔ.JE Ù †ëÌáÞgë‚æÌ(R~HŽPÂð\å$1鿞\�LÀèÀØ@9Ï6#�ë"0ÞÁºž­ã¶Öl³«Ía”9}0 #ƒ7žkº=÷"PÈ@š(bd“Þ|¢•'ö±ZöfÖC‰w_d‘®÷Þ{7L°,10àÝZ·6’ÈRë›4mâüyçžçïÂs"·˜c¹¶Ɏİa.±mayלì+ië:˜�C´$~€'%yü`T}iÎü‹¶ò~DµpvÀ £šû`ØdR’yué%—9ÎÓL^¬^cµýûö¡UËÓÿéµEÿ šCÞá(2žg`Š³Ø¯o?“¡­â�ï *ÁŒëQÉ2tÈ0›íŽù^ÞD‹G'Oöwg¬!¨pÆÛuèg�ŒÂ(dEc›÷ZÉþ�|d¾Ðlu‘Í�µk×8†•ìËŒ=Æ*å¢D §È°gž½ùö›ñ&õ½Kç®Ç|=7ïü�­sÛ_pþ…žÅn8¦�†d¸Bä3¦ìÈÜ"ÊIãånݺ{Y,k‚ëÍž=ËGÆ…ùÃXag×@z®‘¥È<ÇH†M¬‹¯Â,›ozþü#ì<ÆCF?8PZÓ°aÔê!u s€g˜d2ûµ×_õ€Ë�wÜévÒK/ÿ+|¹þKòƒgFöëw²ÏÖZ~„6ÿŒ™3Â×6?‘5àHEÁä7z•@2ÏIsmv=„̤mÁô =iÀÉ¿ãGQ¯óÄû¯ sçÍ ã¬Ìn¦=;ö ÏŽEÿ¤Ÿ¼\„-ï„í qø·îwýsÎÙçš�<ÐÛ?0‘�ÍZ‚(£ü²Ó‰n³o°#±¯�1_˜½EÏ9p¼þúœ¤Žôr4_Ñ�|ï #„꙽ø‹ŸßìA*‚7S§NuBˆl'æù•W\嶺="ÔÀgìØÏܧd®bO]ý£«ÝFãÝ(e{íõ×<ƒˆ`ØégœáãZÅæïÌ33ñ£� lÔBFKèçŠô>dzã¢ùP^þa”b¤¢E}ÈXy&:ÿæ@±±˜«˜±ËŸqE—ârÅú†6 v%‰R‰BÙ²À©£È�G¡ãt d0ØI‰¤ÁJ…0 8À‚Îãû—-`qÀ~èx‹ ›ÀÁ‰‰ C¾‹!ƒ2;bXsßç<xQà˳r/  H0B0¡ôqJÈ:ÍnœL„|DEÏ=#i��üýaÃw�;€8M„8 •Ìy 2=wôŽü]çxï=㡃‡¾™sGììDä�ÏÀLxƇ Å^|a9~?{_æŸñ^Ñx€s¤”¢g›8a´Ýpºè¢‹,­ôT7DZXÄ"~€ ŠvùòeVÆö¹9F |ßwßb—4Æq©�#iÕ¾þ,£™Èû1È$ÀhÇ�§†Ÿ÷‚¤#wÑ…?p¢#>é1Àè±Á˜egç8A˼OupMÞÂ{Úô©a�E­9™‹L z‰ØÕœ€ÓFžæïÍx3§RÈ `æ!M8!C ~™oÌ]ä × r IÖ½{wŸs-��ÊÊ2rÄ"�<ô€¸—^r©ýñ^ `�‡¡üä“OxÝm·Ýî.r—l8ðå½p&ÖšœEŸp_®þdÒ�3%ÄdÆaàùÄá%“ ‡�ù‰!zb×nNˆöèÑÃæz'_;8{¬E²à˜s;w‘Õ—�‘ÈDÖ†^?#¹yGȲ �Ÿ¬µÇÿñ˜âkBw[Ãd¨0ï6nÚädò–¬@ iz�@r!ÇÀ“ †?ãôèFãоî$´n�œH�Æ*=¹rŽÍ¿Í…J’õ0ÂŽ(̺ͫo¢÷‹þä= 3>Nèýû}š!Ǹó• 9dÍ^³UÈ0‚°È¶ùÑÝH¢Û8ý‘%þçz#&ȺbŽdžAx‚výF�•è—È|Agb3Ñ£†¦â�ºdaFúÐÙÈïøsçý{ÞyÄ.HpB—˜® ÿký€Ë6ÙK6™Y!W‘èðÍ1y5räH'}¢uÂï= �þ°Í3¦ÍHè5Þ™¹ƒãX�ì[ˑ܄˜‚ˆÆ6á|ä'º9yIVv¦-A—·-�€G'@Ž=ÚåBœ0B–ð®ô5£!1M€q¸ýÙmkäv;#­ ”ÉMÊ�ü³ü#t1×…ˆùÂtÛ}s>rg¹“ê@·AìÏœ5#¼óî;n»Ýô㛼§ËÛ–ÑÏ3‚)z LR”4}d�©\#‡°íÚ·ïàã�þC.Κ=Ëñ;hv/:·r•ÊFœZàÈärˆlJt,r|ä©#=ÀzaÝÇ:g^„š=gVøäÓO<ûÙÈýÐyŒÁ í²C 2"?y¶Läë�,Ʊ ë£&}ÊÌÃdØ£ !ÍîùËÝ,=�èÕi$!䙨d±Úc™üªîÙÜ”o¡›ô㈌ÀÞ|ÇüdfÑÂ�¬F¾É4î…MÇýþú·ûìÌJ–Ùö+/# `ÝÚuÞ<û¼2Œ ñâ¶Y¼dóŽ;Öì€fáöÛ~á>߃¼¤9ûúuëÝ_ ˉÊì¶øÁz$!ß‹Âòüó/0½Ø¸B½v{E:Då3š(-Ì8`„‡-hŒqŽ*&tIù¯e–TTš‰E 3ŸËû¯ýyM#ˆpê C`ñ'Lï8Ê,a„"EéD(w"ò(@”:L?Ê’2 xîÅy�‡­<cÁ¿yó&7Pðœ�°À@FA#ìâGÂ0Úî÷BY°m6I«Å kݺ�2\³°øò¬Ü‹^ Gž›óŒñlñØ«W/O„|$�ùß�~”/¼ø¼“"›0ã8éW(l‹¶Öp,~ô=!ÍØ»vRšCy�¥p›SÊóï1C‡çj`Ž ©Å›ÌX"ó�±áþ`Å)Æ'œñdžRšÁ³‚/ãEÔ¢gM<çwFÇ#ŒÀ�he?@•(y  l"yß'Âã�ñƒ<û»‹¬)š„ggg{–µÚ4¥D™0?üðÃ0Áëœpr¿~žÄܘ;wŽƒô@qßtÓ-NÈ0–¥ôt™eŽßt3Ø™?ÌW>ÖÒ&sZæ[Ö8Î7Î Ä0ÙÈ2K>üà—!È ”:$s‹ˆ$sg£™uPÙÈŠæ$àŒ3˜Çd0u5˜wF–`œ#�ÀŠwxÍRÒ1À™“DâɆaã„s0 ”íÒK.óçÄÀ�ÔÆð$*öλo»ƒ9B;n´÷¥tˆl­u&Ÿ0¾¸'Y>éF¼† xñìÙÙl1ÞÆ×5ÙPwàË:$ZNF&2ŒŒ){Ò¯‘�?¹åVÇ".Ë[R³!ç�ODƒSDìy®æP�ó¥C‡D#Ì=¶ù„6ò2ùôÓO·yÓßÉA0Nu ÑÌ™·ß~Ûe9#ó"{pg~a¬²›»Aæ!7'[äüî{þìÆ)»ÿ 6£g<’‡‘¤GÚÃ?äóç׿þ­g0r>ÿè7G{¦aVVe׬‡Zæ±U0ÎNïÁ|À±"Í� dóB ¾ƒ£…#‹|Fÿ��†ŒÄ ‡ Á°�a"_){eÎQ¦‰œ_f8Žó GŠ”y²û˜“ÜãÁpl¹ãÔÙž¡‘Í-æÜŒé3üýY“dz¡[xžÆ�Î$s“{�å®G¬ŸTG�å Y6^‹/*Ô8Ìš5+)aÄ;fÝæÕÿyß\ 3>8"o½ý¦{èyìðÀ~‰d*$ŸQ6Íü¹þ:Ãßæ/ë2¾6ãÏÆº@–,6™W�yÑa„^d^³þ‘{È_d&„d2ú™¾$=Íö¸úªï"õ™ÊoÞ3Õ‘wa»õ¶w'[�sy6ž ‚¹¶ßtP+û=™}Ø Ø7Å6˜<äÝ ã!ÞÈ>5j”ËGôY#dB2±n±5¸-ë¹Fè tr=�†m‰|Ãæü�¦C(å|²š(kþ`<Nþ<ÏŠF<Bð¾ýÎ[a‹½ú�wàYv™=´ÒH=‚(ˆdbžo»±Bª°Îó+ÉD&@øABPJ„<;ãô3Ý)†�>ž|�ðÇQf7+æç\è?6¶òê#¬ÛùAÎ9ùeAà½ûÞ»Ž¶²òÌ3ÎòwDNN6ÝùÈæ:•`À;’‰ÞáYøÝ–QB”wàZűÎ#ùÏ}çñ€nüäÓ1~¿ Œ0`.4nÜij¿ ü e"˜Gd“±^�õÊód¢O™©Æ‡µŸìt A%ÐæzëOݶÃn[eºm6(qFæBÆ¢‹<1>«Ìql(²*™OÈ—ŸÝz›ÏǸ,ÃVÁ/÷ùØpןïròú–[~℉è-ô=Áæ2ó¼ó¾Ë�Þ!jÚ>qâÄðúè×\¯ýö·¿ó–Ür–€ÑF³‹FŽe£þÜØ½ñ"�qGà?�ÅøÃËèú¾"½cV‘FùŒ& l¿¢(ÄÝ&°÷‘Am7%Õ«[[´D8«CÙïÊÒ�A4Û,0©éõÍ¡HEaD�7…µjÕj{ Ò%ù9ì�ùQÔÙæðb4 9Pú½\sˆúÔÖâR—OO „!‘^j“1Dr²sé¼'¸%ÇÂIå¹1âHE¥ìP¨UŒqms1v;Øs€m•ªUœÚðõïë�óG‘ëx»~�w`ÊósF ÷àHàTpÂ…Ž�¹ÐH¢Ü q¤QÀôzú¾FÌã±c? >ü +~ú‡a1NlôÀdžÑ¬ðùçŸóH(s½³)j¾‹Q°{×nû|�ÞsÔ'[ŠˆM–Í ²’ÈÖpB >çÀq‚H��`mb@‘!ÃØ@’!ÁN-ÌiÂX�F—^z™åB8ÔÏ=÷¬§hãðCn-jbóåÛ DKoÞºu›;Û%<F/DË?ÿ‡b§�:É.¢Vd›@Ü`ôcì@vax³ÎˆŠqŒ#湓f �÷™Õ—\l+–²ÝÚž£�Œ?¢køgžy–Ge#§–ˆ9ÆãN»>Qiš§§C!©é‡‡pëccÙÏJ�…àÈýW®Xéä3)¤hók×ñÙ¤ðê+/{ÉÁÏoÿ…V‘eè ½ÇþñhØlFø1¶l}˺Lu8ad^ž…FyG�î=Ý¡­÷Þ3ÂΣĜàØ1–©ŽHo€+ r©§]»‰É8æ©í”XA†!÷®½æZndôdÏ?ýé-“bG¸æêk<Íœg#:Ê‘W¾pý?üîþîàBTø![7¹f0SÓ§÷IádÄ9ãrÆ" Ÿ�ýÔ3“ P™·¬%œ8²›ˆ\#‹ ˆ®øá•¶æNr牵Æõ!khŠQN6¥’Çw9Îç¯èMÈÐ\ÓmíNhç½�é\ƒwþë_ïó2Oä(dÓÈ‘§yÉ$kƒû�wÞqâŠlVæ*xd €øa$OŸ9ÝË !Ìøsžy‘ìÀ))ˆ\Á¡ç‡yU˜qÈ�0ª]§v¡ÖmD&{G~î…ˆnÖë”)“\¶!GGžzšã�SŒ>F.�á�³†\¼ãçwI;ÄÇ·ŠeÖ$;°Wº0' 2Ï"ü Wô3™<8í”i3—gšŒ%C”ùоCßýjðà!þ}æi&ò›õ�ÊNÊ;��±”þP–Ň؄T…lýÆëŽ¡gô±‰G�õŠ}ò©eˆ€7ذ�{�b¬qˆôë˜ÒgÞû$ÓkÈ5Æ`…9ŒÈV‚�ë=l}\l›²@ºðŒ¬³§­' çc§@è@*!ƒ¸>¿GFÍ6bsÑâ…¦×rŽ)IC²ÆY�cF€œiÄ-ýèÐà)q‡�zýµ×;”¥¢[“eØ!ã�\÷Õa~<;ó-ÕÍ#ì²Åv_È*ô*�5*Èâd7,teÞ¬© æ#™IŒ6+ãÁ�]Èüo;oa¯ø&c‡ŒF°¤ïÞ† FúÍžé„røÒ‹/õ%œwž§0ú9¿uŽÎcü™ÿ«l É~Ñ&ØÎTØX¥ŽÉž¹±�‰< Pi!Z�õŠNƒ0IWŸB¶¤tJ²# ÌÐæÙ§]/\d=÷Ð)Ì2±ÿŽšo’Èkæ+ˆœîÝ»™~káãÍØòéa”ÏhBíܽ˳:öï·òªÃ‰íÁù: ÙÓj«Ó8Ödšpƒ4*KGdø�-a„ aáþóŸOyj?ÿ>tè )æý>b¸G0 "¦Ã'§í¹ž ô­�ÝÆ¨>hçÒGd‡‘d‘•D]õe—^îY|‡‘ S”ˆ WKy {‚’ ¢¾üçžsî·ÞTÆP*ü1 ˆ8`ÈýÛRÖ)I€œá%Ž!A¤üä“û»Á ‰Â�#‚QA$ŸŒ %’ÝÅG¸cÀ`‘ÕÀ{�Ñy©Bqs ÓyOŒ7„l<¸/ÄϹ͜s›|Ö$3a”à@` @tñÜ <Jb‹RÞcE͸apA\œe%QD¶1¤QÎ|†Á8vl¢éõv»ª’4ž RhÇŽ�ÞŸ‡h?Ï€±òàøÑAÓôVÒ†Cœm„EªåQžKÒòä�5®8­œ C¬I“Æ6Õ|α~0fž}îßË/¿Â×óŠù¶”,áØIeìHÛÆ°hаA¾„ë—uùÈß­‡†�?dÆ<>kˆ¹CÃþ³Ï>uãôç·ÿÜkÑ™³(þgžyÚŸó²Ë.û¦g¢I7k£RмG‚�æò‚õDÜý÷ßçµùDnižØ©SG—ÌEΟ3w¶G1¾)Ù¸ÄvË`ënšióŒ`9oÞ\/qƒ„¢Vo“Ø”v¼iŽ?% ‘ç昦:"¢"y�œ€0"hÀµ!ª)™d>òìü¢yÇsO·ò‘LˆŠá&#�ÿÈP"B‰Ü§ ³k×½ï Ù§D8!élŠ{ïúÑ´Á¹a-¡O !&Á»oß~î€Gd 낞'ëÌQe.à„v7’‚©rVe/]"òε^¶yÃy_ƒìqpB!Œp0 �p‡ÙC¦s–¹@ï2ä/Î0såJÓ+”!ÛYÃ+ kŸyîi×�¿´¦·ô�I–ñ�UAå k‹všÌd�ÑŒCDx€+ðž¬MŽÂ¬[tM~r Ü 3>d @Ͳy€Ì€l �>h =zØm�/&M O<ù¸;•7ÞðcÏpà ‹ô`Þgdžãìâèož1g¢ 0HI²—!ÎéÑ‚sŽÌ$«’qzÝz~ÐS„íÒ!õÉæ„´ÌD~S^Ç<ä'Ù‘w!?ˆìCX‚ÈÈ-æï³ V®ðµÔËì·3x~“ᔫa_"·±盌†ºõ'·ºŽÁfrýaŽ0:ŒÒú»A€@T€å[ߨ7d�à82/n·MY åçO Ï>û�^¤ì¿¹Û—‰M"ÈD›c�?ðûðÃÜ!�gáÔ’yƒ-#y0pÀ 'ÝГY¯Ì…Lô)¥Ë©ÆÇ}š$“�û¡C:�,!æù�Œ¸…0Kv°Öîýë½>ÞçX/It7¥�TùdŒ“# Î÷{fŸ�c=j¸AGÇgÁ#Ø'ð,£üðñ°Æ0¢‡,<j ¹íÛ¶û{"t»Yf@² ,Þç’‰4ÚiÓ§Z„Ê¢Ó&äÈZ@ ’*�±@Jði#IÍÎvņé¼gãÆMÜA�bLÑ÷€kápRn�Ñ iéðåWD猤2#k°Ef €À'u‚E–ÆéCï–“ÌY�èÃ@ Ip®JdŠÐdCŒæ°Qd,]€ŽÈHå™ÿó?ÿí™3%Iáä2Ö_%�YEqyf|‰02¿Á=Ù‘× Ç8в8…�DØÈâ`w" ô2 „{ч†ƒu‚beì!ÉÒ!•˜9Gƒ*ža„cÊú%t·ÕÆ“Š��AV ¤Näí5Å¿É>ØzÙÖ=eŽ¿ýÍïܱB™3‡^}íUß;~ñMsD3ê0$9 LYÛþ¬ïZµjÛ¹=Ý©æs£{ÌñǸ¸ÐîOtÒƒ›ƒw!%™wÃPƒ†P†¸�”€¼a%Jà@cRüQ£Nwñä?ŸðÒ ®ËÏÛ,šy‰A ñEm>Diº„Ñk¯¿b¸Õ jDÙ㎨ÈA²ëÈŒÁñ ™äP3 ˜+d`XAt�¹Ëó2—pÆqxž3Â�&¥·ÛõqÎù c9ÕÁ<ßµk§“:¶ð\ÖÐ÷Œµ‡ƒD†Ž•�ïDðéÕµk×T—u¢€È!ç! 1Á>~@z0ÿ(“¥\g›±EneBTD„Üýû«°�Œ8cMÞAÖ°æpö(ÑÅ)£ˆ a~0—!@s³Np€8À%±.Æùº@F�Q0lØ0[Kß•ÌEßc\ òlÐ{ê”SNqCšè/„F<çžbψQHÉ$D=ÄÕr›×ÙÙ9áæ›¬T´o_ÿ<1n»\>Þ{ß_|{â;Œ(@FâÈ1öÉŽ‚Ê•è\äJ&ãp<‡¡0ëù•ìˆp‡Gne:>¬)£ùóçùÚ ›âŠ^á:’ûF;d'ø#‡/¾ø·Kp”"=˜ìù‘øTš-=ý@IDATó,:'ˆ •\sèy7˜˜CÇÁx"pŽ˜g¿09ËZ«]»Žþ™Èïh±>’yç2òöŸÝîÏÆúÅIå€0zʈd;Sæ{’eú�n„|4~È}l©É–ÉõÉ'ŸX°°©É½;=“ÙÎúyÍšÚÒ :Þ\7z.ô3k–ÒÔ'ŸzÒ×6ú‡ Sú©4=Úˆ´oÏâJt>D=÷ÁÎxΈ%2uâz¢èɧžp» ¹Gvik{Ï,79‰þy¾‡ÝC@ Ñ�¯£g½'Ë0"( fÈ…Õ«WÛß�x¶6kY”_† ß4ƒÿ!³³L #ÆaŒÙÙèWô ÏÙj”-ÿËš%3μ$8™%fÍË:� p{ÜZP0ÿÁ™¾oøÃÿq9ÙøE!¯÷šÿV�õš©>Ef¤Ÿè]¢÷ŽþÄ."K˜ £7ß|Óõþ„2Y)N@Úœb^ì"€ƒ?€íq‰É+æ2:ÿ„L?ÆÙ—�“®ºò*Çè^ñ?±ÿj� Xi6>ðolÝ"·j˜üÅ_„ÿýãÿ¸ü¾é¦›}<ã= £kásñ>Ó,Ð6i²eÈÛýÙÏnóv é}JU¤C„Q>£¹Çš`n´ÅˆAŒ‚°ÿŽ9ÌFw¡K†QS‹*×2G½,éF<7ûµkÖ�²ÑÙašˆB !´ BÁnE"úO Ž1ÛŠÏ4Ãù½÷ßµ ¬êi½Ò"ì‰h,‘Ø'ŸzÊ„æ"'¥RƒO±èºT8`³çÌ ïZI %V8’DqÝ 3b&“ƒH„ $Ä‚"Ã㺅E•’F‘�OùýXˆLþÚž=ÆIík Ù=”zT6'ÇÅ‹áÏýˆh§óžr( ÊJ(å8÷ÜsýZì‚rî9çyDr®aĸ‘í€#�á Ñ@Š2J§bühþJ‰!»—CQ¯�!E ™'éFœÃúàÀáïÿq¨$KÒ˜;”8’Õ ©QD FWçÎ]<3!ró^;¯AŽ�K‡�5Aä�ƒ{Þ|v ç»VP¾e€àCp`X,YºØ’Òëâ÷VÂÃZHFað‘Õþ÷ÿí~3Ê×;‘ÂÎ+8"�¬JË Æ±ØÌæ?%SìzÆ!³ç ¢‘Úz¢ŽYYß5Q$ã’ù !Éœ¡™¦;¼føq�0"ºüšRLËm¼8—¦›8Øñc•‘j<嘌À€x¢t�’§ü›7 aÍÔÉ¢ŠVÑ50´Ø„Ì@HWœ·t#²ß|ë ïQ•áDŽ s�±oÝ=÷ÞcˆˆŒ0ê‘yzLüë¥yY+„:ecbÈHÀ–‘3Ñd D±gĘüäÚ‘A½GÞ?ƒ?Ž =ÊÈŠ¡Lv§É(Æâ‚1 [‡�TÿË-“€ ÈT%‚ô `—©á#F„�&ÓÉÎ ê?"9A0… RÞ‡¹�ƒR¢‚ìM"þèHM2/ˆ€æ˜!ÜÚd,DP«Ö­\æAEX!�S9`‚¬„ØcW[`áÎoˆˆ½È°G~A*@|ýãñÇÜÇ8ÇáÇ�ÇI…0B‡œe w"ó6!?É<`ݰ3a®Í]zN\{íu®Á/ÒCÌé»î¾ËK�n#ò!":?¹�QqF”›fÝJvÕø ÿ!Œ�ÿ¬SÖûùç]ðmÆo–Kd2=ôðC®FœzªgPR‰îNu¤KÑü•@[TJL)8‡Ë #}}X‰ë‰;$)™PÌ¿Läw4� JËx 'ãÏ-Û„ Bsã'|Ó?Çžÿ­ž5ÇõÁ‡ô5'ŒÈкûž»=S‹1=Á‚n8Æd™&ŽD ‹€�à@Ó]Þ‘u¾Öt`2Â9ÈÂ.†<åp"ÛpCfOn'î]ðÿ–0š2mŠ;ñlJp›ƒŒCü£Òæ¥K—x–S¢wÍù.§Šc�Go~<Â9YòšŒ­Tz!zžLõ)ÁŸL #l|æÿ+¯¾âÕƒ,(AId…·÷°9…œ+2[ œQe@v2e@ÿ�>N¬3>g­¶³õ™Øü$y†úù/FÈ#ÇÙ�›ˆŒBìÈ*|8"yEÌylj£G,†Þ¤$ ¢ÙÁõÿh„öÚu×^ïë Ò‰ èø�¾&ða‹�ˆ=}Ë-·:aT‘Þ' XÅß½<ÿ]„Q>£÷}#Œ""GCæþþæ�! BÁX“r=œ ˆ"u0Þ8®�>úˆõ‹Øå¥MßÙæ",‰¬åææz¹DéÔzY¼dކä9F˜`Ðx$ו¢8Ò%Ô¢{‚Ëÿýÿ׳t¨d^Ñ\5ÇÞ)~¸lÎÜ8æé¼'=-ˆz®5£ ç Âç:Kí$Óè>‹ àDဠœ4i’Gö¨é‡¯\¦`[�}HP Õ‘.aÄõ)û é<Ž^üú¬cäß›=AÉü-–��CÏ|&S.ùÍ%+<ÊÊû.�G8 ôÖCŽ Ç˜¿qýÄü'àFÆÂ;ï½ãëó—¶ë)NàŒ™–égkˆØM7}—a=O"Óë�ë©?ZÏ32AèaÓÑä3e´Ø(�>8’ÉÎÿ–H±uD&Tœ0"P‡�Æ8“¹AÉ(²R6~Dú… YlLô‹F<Í�0ŠŸ_Üÿö=mž�±ËF<”."/ȾÊ5]�ª‡ó,Àà–››.ÄŸ™ìÞ>øÀð^äúƒ@™¨ìLYë<º÷ñ#ôXQÈkÇ#Œ £O!ØXSØ[ÉÆ=“ìðÀ¦eu�µùûÜóÏúüwü'Jãž�à1�'ìÄØ¡ôªªaú‚lpÖv�ë­ô�rüàüÐûϨ ÐtåWzF¶DÔÃùAÕÂi#GùÚ�_{²Rç©§Ÿô $ú›RZ8_aôg›§¼ßeV Lo¸öí“ô02ÿ†ï²Æñ±;ñs¸wEzŸãmfǶ<ü]„Q>£ô}*I‹C�—0ØjŽHA#¢ÛçYM,½j0¾0 qjˆ¤@ÂhŸc=) †ˆ²!ø¨]&ƒ°hm†As3Ö0tpqt)- TcÄðáÎ`“©E¸âÏœÉß‹›0JÖu®HÒyO"  �m8“8E7˜ E)‰Ã°†¹wÂÈÒÁq+8‚8„l]Q‚ã÷©¥"3.("óôÀ)!Mœ4Qœg ØxæKÞñ/o„Ù5õ«Ìq#‹ ÅUóÌ1ˆO4R†~-ÉŽdùÿ�02G "ŒxFzgzß ƒx„L�Q$êˆEaIY>×ÖÆ"Q` âxIu²—¸îß�¨…ÂæºÜ»R%fKâÀ€`¼Áˆ(,Q"úá,µ¬£… xy*k•R9ú¤s�0‚ìzæÙ§=»cC>oI÷ƒHÛ²e«?;s•LDœ¢\‹¦Ým†Ï{v¶o‡ÈI–�ˆãˆAŒ1 y’a„Qóî»ïº!ó›ßüÖ#rÉpà}ï¾ûϾÞÍCÏÃZžkÎÆ; dÉ$"LJ ìÉô‹;dÉîÁï3œ-2(Þ{ÿ=/ ÙeDÄ ×a^`¤B ÐG„õÀœ¥ùä/ÿ®4'¿ëCÖx)ŒÉ},p�—¬æw^ôû‚–ÒnÄ�F¶&â„óG�²z<@ˆÑüŸŒœ;z=±!F϶\ [2„ø<•càŠ�Ÿ`üÝ »ÿú¯ÿÏ×ë2o) ºçé§ÿéÄ=s'ǟ컈0òÞ\ö;'ÔJ�0J&WŠjò#ŒÐ›…Y·­Í¡IvÕø˜b]!ûÙ!ÂèŒ3ÎðÞ5ñû"7i6Ïû 0yR\„zÜ #ËB&jwyæc‚0Ún1b…ç@N#+2‘ßÌU‚?Í0"ˆ‘leJA̰!\!M±_~|ã6áEŽAž’añ¿ü_Ï¢¸ÙJXè1e“�Ë|Ivþ¡C‰Þ‰È2õÐ�É#^ô²³NÄçA¤_�!ÈðC�¬X¾¢bFFÜAà‚�ìÛ7Q¢aà„чFYé7¶KD�gq¬óè¾Ç#Œ°KÈâ,¬¼f—±Tz¡°ú<Â(î° =¶Ýõ×ßàú‡@HüÀ_ú÷ÿv}�NǼü²+Ü.a­B ´B¾üì§·yÕCü|lÖ 5M¯ $Ýr³í’fDç¬5{ôí·ßtâ§³eúyïXóâ¶âJ#ºè½ôÚèW½?âo~e¥Žf'`[bÓ’ù�ÝIëd+º:¯½ì¥ÛÖ;“²Vô:ö)ö „QEzŸîÝSgtDZ-a”Ï(}Ÿš^Ç!ÈK”0Úf¥DÎqNa·)±€Ü€0¢Tƒ‡³Î:Ë oú¡¨h²¶*×ÒöM@65g'^°{7Ûµot–thÒ4‰æY.Š£°„¥ dš9ò47HâÏE�Q÷tÞBe ‹aDÄEâ„Ñ}ñ¦¬×]c„‘C0ñ8T(=#"¤�BF tif¼bår7ÌpŠêY– 5ÐDÛp‚ÊÉzg|SJ”wüËa=?$Ž's°(ŽjÖ;¥¶9 lŸï”÷Ú%Œ¢n"54çÄI ×Îw”Žõܰ (zí£Ü1l1’FdC°Ý9†ÖC–ªÏº<ïÜó½ì"�kÄ�èúÌ ˆŠ 1NæÌ™ãD½ihfŠ#ƒAÀ÷�²%pòÉr£4‰yÆFd‘„AA4޹ÇAÄ쥗_²9<ɳÀhˆê=2l^Æ�èù(¥c§Çæ-šûZ[hî_�@ÝhDDtÔ¼ƒ#~½b·!#ƆgH‡0‚@a÷”F�…È0b¬"‚!Â�ÈÝ=馷=(¡emñ=ÈoïÉñú롦‘?1<Ù ò9‹àé£oå­lÝá‡øß! ˜Óˆÿ4Bc¹ÉQÈß6昵µlä.eÒÈ…ÏLöÒ<L¨¥§$­›Í�TM§ÿf=„0øÎ8ãLÏúLfðE‘oÞŸ1çC¢ú.ËœñL+ë5Ó�2yv²Ð Y¦kœ0âÈ32.�ѼiòÈRþİ%kb�ˆ,8©|?r pVqTÉXˆRÂ}]yŽÁLæ÷‰JEÉê‰æ-ØpJŸxò– ø¥ë3¬Ê|�0²5v¾­+tRY$Œ˜�…‡ü#2 ³n|“ÉšwÕøPÆFd-BÄÒ ¿½ñ#A=ö a4 #Â(Ù<‹î1mZ¢‡„Q¼i8ò;~ §ÿŸeÂ@tÝb„ FÈiÏ0Ê@~tóÐ7¥Çñ{ñ÷‚ê§L £œìl'‹ )p}÷Î[¬—Ø7ú#zžá³ß×£gAñÓ[æk ÂháÂÞ�]û“$ç“ƒÓ ~÷Ýw¯—Ç #z2)Ø ™�l%@†}?"ýÂ&ô£d|ÐEdwWˆ ##ŒfLŸZ´4ÂÈæW¾„Q”adë¹JÉyq¬óûd„Ñï­´ {šùOSr‚�…•×ÈòTz¡°ú”yÅšb¦“a­CSô» CŒ²c'º‹ŒöøþÑÇÁ2Ïõ'òì ³÷ÉàÃ^c7V2¡4¨ï­ÐKè´ÈN�ÄÖÏû½$;XIö�î¯Q.†Ïðñ»¾ÙIôVËÉéàÍê±'#›�çAžA²¶©ž`½ÐÊ€R:z÷=ñÄãž±D);zsÀv¶M”âú—ìd¾ýÎ[ž]Äõ!Þ.°’Pl•Šô>lR‘FùŒ&ΤMMw›@Øo;´Ð¯�ƒzg:Â×6C“ZØ! '¢,™"‘Ã=Ö útJÒ Jõ12‰ôØeË–›Ãó”  ¯L¨ôsÆáƒSÎÕM&;&Q:õŸ)Å™bž)>àBªóJcÙ‡B ?ÕR7�0²(Vü@8S’@,�÷DQÓƒ‡tïL#zDÆ7J€Ò§¯Ìé�ÅÇQÃ$û€­[qæèÍA_²8òŽy#Œâ$DxÅ�â…lÁÁ%z‹Ã™ìˆ æIT’–,‚KÆcLT#Ÿ^£qmî«‘FFãØüž{“EÂzKV’F ,cˆa�Aãøk¯¹Î³rÈâa’øa‰ÊÞã¢NÝ:^ò˜›k[qÀ.d ì zàĉ -Œ>²™W4#&S0Ú>ý;ÂhS¸ð‚o#‹Þ6iœ t©ðÿöwøÚš_Ò8ù"3TéWsì‘xú:ñŒ4V«9sæ†ÇÔ‰Õoww1R$oo)Jéý…!ĘÑã)ÂBïµ×_ó¦à¿²H¹8Áá€ñD †ŽÏp#Î!xfH²À}ìï–=xÈ2¯#SÞvzÖÇ”íd1ð®�ê€Áhßhw=Jà0Ì0ü8ŸqÂè¢T„Ý+yÞûÒ$MÅóÞ ƒïÉ'žp¢†2ˆ,2ºZq?%që<•žþS�ýü@dÑ;b�ŒSˆÂ8áä‘U“IÈE"«ŽdV1÷ ƒèG-ÖŽÁ´‰Í0Po…0²õ]£Ù׎w»>‡%k•è'z†ŒùOSOÖ©÷*²rid+›”ÂÈ3Å 1ùF”u~`‘ndO&ë6ê¡æ`Çþ'î)Äø0ïJ‚0ÊožE¯”)aÄzA@Xf"¿]7™žŠÅèy¢? ªŸ2%Œº˜ƒ”(U3ÖˆzÞ…¦îúë÷ï¢÷AÇFæÞÛ¶mãÁëÓFŽr¨"½O^¿0 ¼þ)Â(Ÿ‘cRS/|ÀH£=FÑóå�•�pT1åRÝf-S0dTŽ)Â|.Wì¿öç5B à a„2ÅYÂ!ÅÀ¦ ‰”g"ß(ašøÆß„Á¶ÏŒrœÀí~Þßý»GŠ1˜‡ â5þ­Íq@(qg¬M=`ŒuA # øìì'\7&AEª6†BSì‘CI‰­ÚyFœI"MqÃ>]@#G �Ï»o |,›€è$‚4/1€ù?ÖÔméÒ%Ö×â$/#9ãô3½Ù#ŽÎøì³æÔ¾Þເ¤óž(„)B;ˆò32h éæïks…±Î~O„büøñî�be*‰,©S½±%˜–wÂ(ÝyQÔß/¨AŽ¡’(šè»”dÙ¼aצ�ƒSRÖ{,ãŽYjÕªíQ fæ ‘òxIN4ó�r$2E sØ=§¿cÇN®�™Ó�i8ï¬uÖq5›ë¬³Êæll0‡L‘ç¬Ç»Ò_ˆþbl ÎZ"5c|ƒe°�"M2 £dª`‘ ©ê½!z%z„`€`Ðg‹v¢¹M›6±Ý?. lß !9ÇÜ'îqðÐA—Y��RN4åÇ�G–E>Ívw!KŠõqÁ€ãõ¯—©ý_æFø¤CA0Д²ªaFï°aC‡{–#Æø­^½Úñb·¹:öìDÜ�³þvxá@ÒË�Õ�C<¤ ™•·Y ù wˆäGª¢†¬ ¿§-Ã=ô‹_ÜáDQIšÞ3gh‹ã >ȱat™“7©®�Ì=ÚÎ3ùÆó•'µØë01ö׬Yë‘Fæ;ÛÑ{‹,5²Þ°Þw8}�Ñ�9DÑ8‹›,#Œìžÿõѯ™.j섆+÷Ûm'YDŒ=„dÑpAç0ßÙU ˆ~B°BÜ3æ±S¦Ú‘&¸®¸õ–ŸZt3ц{3QÕ#ÎO÷”ùžÕÇÜf^"·é5Ù"¶”d0Nò8¼�PóæÏ/„m™Œ¥³Œs~3|aÖ-×NvDú¹°ãÃÜ)Nˆ@Sªy9W™F¬ÊVÑÿ™ÈoHcæ:?ÉŽ‚ê§L #ä 2ý�cšeÏA =2�õLCï#GŽº ¬–yJ© v�‰îÖ›B�ö‹ϛm]Ùz›\ï ÎÇDæð0ÂQ~Ëid_œ0B7Ñ´™²Vô‘~È~œñ„K”c£ûÐ/à…îBÞð9eýÉ2Œ¬±yð›-ƒ™`NC“{èå‚Èïdc’êw±�!‘k|qFuëÕ-–u½kb&2¡¶ ã@Âí·Ýî~C# ïŠB^3N©Ö+5«™êSô#ï’ßøä'ï˜Ãè8v}ÌId²b›ôëg?}Ov]ƒ�†þ!`BVÏë£_wÛ¾�æz[Ÿ#d5sv»Ù�ì‰'÷ïÒ{�æùìhÈÜd½­]»Öîe»ˆZæs›J [ègdv"ºе¹øè£�Üv¹æêk=;òй ùÆæ!o[&ëŠ1B÷“Ô¹sÚ(ŠrTÖh»vmÝ®#Ûˆœ)½Ã†áYžþy·#)—'³’`'6DEzŸÈŽæ}yÿS„QŠŒŒ˜C6ÉYàü›åÂ"«bÆyd ¤¸L‰|„ðaAã`±à‚°ÒDjØFžz~ _ lêcQ¾‰ŒžÚþ>ê,pŒeIÎCa³¸1b8�Þ-¤ÿs.<÷‚!O‡0:Åb¹ÆÉ¢F?á,65ã¿› À‘!ÛkŽM)\´h‘;D‘©mGp/ï''ù‚'™÷ÄÙE€&ÅÇîÅ}xGR“qúâ†Ívç˜@$SŠí’)Mè`Ž*ʃ†s°DÇäé¼'éèÜL#îKfÈòåËÌð©áe1�:8z(‹—Ì�f¬Ù�›(éAñqˆ0Š�vú/¨Až˜‹»=“�溭8·ª4ØmѼ¥ßÇã™õ‚³ÆŽ5l{KiS2ˆuŠœÂàá…ç|ŽC²�qÚÈQn8“M�H–fÐóæÏ5"©©o+Œâ÷¨œ2O>ù„‘ZFèÚó`Ì Ôé…À<§÷اVòHÿ!Ö$çá€GÛ.3‡ÙM�ízù]Û–9a°·÷µ�Œa7ÀÉönÌWäëyç]à•�$`¾RRÆ} f¨Ûç= —1¢ÆZ¤ 9Eÿ#Ós‡LH>_ºl‰á;Ù›^ƒ/P”‡¤CAãx@À´ñÁñ!3/jNN™Æ&c±ò›w¥72 ‰~`< I¸„ F,;«a%÷²&æd€Ñ· ºLÈìÀ@}Ì"è‡MîS² ¶”i‘¹„ìŸ:uŠ;ÎŒi뤅_zéñ #v(BfM³ñ§�çÅ?¸ÄK ìÚs$é“OÆxfÎx¥ÏŒ=ä9ÛY3· »÷èn»ÿ�éd%$à*kp>f̘0~âx'(�%È̊'ˆ$JtØ<]‘“�㤠} + ŒÐl ÀœÄÈ®V­ºï&YÄn2µkÕñR®9�èíyóæš^{Áek­Z5�h¤²SÇήkÈÀœ9k†|�Oè€oø±ž¬£éF@–‡ #ä|&ãp<¨0ë<ó;ÿ¹È­BŒ;.'a„cÅ®•ùÍ3ô?ó Ç,á�7C…u/I#3'c…­±Läw÷î=¾•;Ép.¨~Ê”0BO £ ‚ž29€��N;ÙÖh_ûŒ÷' ��üXh›+`cBøã ’ „O†½ie€ì‚|ƑƎ�Ô%‹‰ÍÐ�d5PŠ'Œ'È$䲨±•º�‘�~ ì}y��õÙgŸÑ^Ù2 Ïvyy…^L6~Mš4vý˜kD ¶ v7�’l³[±«ÿ¢8*8 ™F(Y2"ÈÜÀ1EñûóYD�Œ9ˆ$"»Í(ƒõ‡¤ ï™I"Œ†Œÿ­Ã±Ff¤*IÃ`ÅØÄ0Å€![‘yCÔ¦©µÐÓ_}ù•;î<™¬Å3Ìg çGñð¬ÈŽÙsf…Ü•¹F0Õ´ùÜßK;Ù¡‹Ý„–›ÑN$–ˆ0ŽûÕW_m;t°k%[#‹Â›o¾ás�¬ >ÃØF¡¯1ÂuÚô©¶{߾Сc�Å›VcPÊÅûñ®ÌCÈÕnݺ;ù ÉqËn:)8ôà9ˆ~ñ9ŽÆQ8d™*çCÌsŒ->Ãq b”¦�ôË¡92d ¥YsÍãZ8+\#Âh„ñFh½á†Î %s87j|dHN3ç�º“^–-߯›±à`<èW@oääÓyç�ïD^⛩ÿ�³DT"ŒRWˆ0ú‘¢Ž¬‚”¡Ôc‰9T�qd~R†�¬/aĘ�j®~ô�—(:ao¸’™ŠÌ‡¼$’H�V­Zû6¾|‡9ÉxQJ2sÖ,'¶À„q¡¤˜r¤-fP’€#€SŠs'Œ�[ÏXfÏ:ÛŽ¼«ÚèHRŒgvŠ$²‰#H‰"Û¡SÎ̘Sé{¦�H‰ßmz 1Ûtë â'‘ Çl{>�’Ú<?ÈD>ÃŽ9Ëšà]™“_|‰g3AÆcè–£=“q8a†…Y·èÇTò¨0ãCÉFqFQ)婿DD2¡ „�¨Í¶Ka&ò»·eqFDu2œ ªŸ2%ŒXë®×Lþ¿aŽdAÆ´0Ù‹ÜN8¸‡¼™üôiÓ|�Òë�~Šô¯ÁÁE¿à@¿úú+ð ß}ÚpL!~øÒ|±<º�Å5â„òR‰›O>ùÄôÃ~'ñ <Ò‡[˜ÀýŽøò›/a„&PŠœ‚Ø>`­*ÐÇØ|Œ[s¬‹òà]³ü2X ®Š#ÙYœë›€w£ΣVÉ@àÛÛ‡f‚FÈltYaäÄF*½€~ÂΚeú }š)aÍž R“]¡É†&Cò�FÏQZ¢¬6Û�¹<Ï| tðEþÀuó Ÿˆ¢èÓO?qÂ�kâÃ ó±» Œðë&š=€-ÇÅ×"Óü¢‡ñÀÁW|ù›Œìú† >ãR»v-ïÉsL�2%ðDJñÀ:þó† ¢�EF1-ð«°CX—KL7a'�U•}BN¸êª«Ü~$KÙUßÇ_ªüO„QD^�EJä—ˆûÇÆÜb8¡hGÛm!fy†7=˜0ðÙ•‰3†ÀzìñÇ<²Šàà<˜wÊšHsæ<"²8�”Žà¸V6çÇ"ˆÚ€þÝÀŸoéý3í¾¤¡ã€š4³æ¹dnUöí"#&œ ”N$F{& �iïØ¶ó8Éð©_¿žß§ÿÉ»õ15~DŽ»L1Á‰BCé�µ�°šÞbAnѸ/�÷¤~{â¶­´i™F䫌ç†+-˜‘¹„bdlQÔ(dJ ‰Bñ"Œ†ŒÿWPƒ<Š0¡P!>ˆ¬O³1cŽ2F¤½£Ä³²%Ž˜”9õ2%�q¼×s*ˆõK0œsšŸc£¬¹6ó€ÿÙ”ø6Ñ�s�ÂEŠp0êÖÚú<âϕȶ„°AÁãÐ�<õ4'ã Ä,¤FÐÜysÂ6“OµM†pÖÙŠÌC EœpÖF»žñŒ ŽxÉs“l¸‘#G9qŒÓŠÌbMCL}øÑ‡¾ž!„qò³¬7²‚óXƒ‡-Cô°áÉ5!žÓ!Œˆ”±‹Ù‚ÈLJý'Ó±4™ÅÚbL ÃI«nßþ?{0Î,”¸½jÙ‹3mý‘÷üqþÇ{€Û¢…‹¼G†î¦Mý½«HIÆ\Õ*UýwÌ#°ï‚FๆQ7ÖHO2†h¢Nà€ò ®Ç{ƒ-Y•”œhðM =ĺ‡L 2‰èãF°¢†��¼�3ÈEæeëÖmŽ)IcKmJõ æÑgd0–”}sß*&ËÐEwdÚuµñÄ8f>2F³Ln²ý0óž÷Æà=ÅÊ)‘ãœCZ<ää|ûœÌ5tÖÅ¡C‰rsÎá^ôÍëÛ£º—Ÿ×´iS¿ž—Zþ5±ëgYnz½y³É• Æáx„QDgºn�—�Áxf|XcÅI±ö 2ÏrÍA+ aiŸ©üfó“ì(¨~Ê”0ÂÙE·±áA®3ÍdúÙÁg”š¡?�!§Z¦AH²W!�ùsR9€-ƒÌù„œifë±sç.®/�ÏÈ£8a„̓„°b�Ùj¼¿ë^Ó­”êàp·±*�QÈïö°@g`%?d 2ŽŒ�g,c¿ød.QRŒM•_Swø þÇ|ã™Kš0ÂÁ/Œ~>Þ:÷1°qf\()„´cƒ ôs’áT+¹jb¥ê…‘�—©Ö+ö:äÌÆ�›2Ò§…%ŒÐ«Èjü‘OŒðA~aÇ`kÕ0½ÇÁø³.Øí’‡læ)z‘µÀA ݉MHEI®Éd8CŽ`a½ô:çìsB»N|7Åh<"‹u‡MŠÝÂZBš4,²ÑY¯dæ’¡Äz‰žͼ!PÇûà‹|á=ÑÝôy$û¸«¹z™½�E�É­Šö>þâà"Œ*À ò D’!3cÍÐÏ5ç+Õ� ŒJ!X¤¤4¢)™Hu Î?ßv]êÚÍŽÅë–I€r¦¢!ŠbÅGðÀXCháñ9Î)ŽüŽH( :Yù +‰"#X(… Ä‚>”Me[ÄÁ…3Cæ(œêd–kà<á`:xÈ�2.>üðC�.';¡Å}úXÄ誫®vC"þ=ž™üœ¹³}kI3å%`ˆ0E _rñeþ'J“gLç=ê°üKÍØZµf•÷�¡ æ+¯¾l„Î~'zê±…3©‡°ÇX9Íj" 8û8 dGPv©…ÒAè×®]ÇI"9�w�Í0àwÜ—#/a„³xî9ç¹c‹ÓEÄ8%;xÆ„yHS^"�8•Dà(Kâù’‘¢ÁÈü÷ï;Ù€±G6ǯSlgžìZ¥ù;æ÷wï9–sìJ¢4i¡w„’@€ÐCM�ÀßøŒ7^6ovv ›0çóìì�½ßµÖœcŽ9Êw”…' ëC?†ùÜ p¾5è&ó è=+ `¼Hp8€/e'šªø‘ƒhC3tš<'Ã@ðC‰“\qvF�Z)AÊMÃÁS~‰Ê™ò%�\pA»h¤wß6QÎBß)gX幈½%=oâW¿—}‡vÀ%­ó�ŽŒb=dp2êõ5Ú8ÖÏØõ£ÐíŸEpeÈ2ð ç’N�¡ Ç ¾úà÷Íõw—AÛ[¹Räx_÷AÉGŽîÂÛhGö>íï¹Mbtøç¹ÕÇý!KÈ;�om”Ù&(Ö5S˜nQ¢ø%“ÖçE5þèn౞ðÜýÊ3èÉ“~}bdò=™‰ïË EY8ø­?ò»Ü¿ë÷žòQéE"ƒQ `\ì=™]2Äð¿sã<è—‡ÿe8YŸú#2.™«?8Ÿ2&²Ë†MFN½Fž´ëGö Ú' þÙ1lÎ(Ûn\ÈLí 4�wºÇÛ8éYàQ,zè¡�ð•9¥M�loŸvýY®_ØÖSÖõfÿ^£7ûÎ�?�'ýò©'Ÿ §é‘WŒûy-�±¦\ Š�s ˆén0j9] †:£€0 PóîÇi!( z†¸¨œTƘç¡9»Âîùo¢ó7à …ìq_NŠçq\•ºpÈŸ á¦ô¤Óà@sLÛ¨G¥À²>‘;‚±ÓH!ϱéÑžß>J^½¯Æ©æ är�9š«ˆÕò! 9kBoÖi�î‰.Py†#�EtN–ȃT]ô}:Jù(+Ù"hŘc(gŸ�†þèjæ¨I.€ÈúDÍíU»¡V�‹tô–<´R«¬Ÿˆ>œðNq;�(itæp?Jž£‡gC®ýó~n=÷©Pt·æë=� P™eo&À¨ì7º3âDv=Öž¼{Ð>Êçñ£ýÒÌ~¾f?D.9²ö _q†•„É0a¼* jψ+†¢¼ó|ÅÏxUù£]ÆÏòsÏWqVñ‚a^Ît™—õ0>’�âÚ䣼~ùœþûÖhøyä5ó"»šv38ð²qðCùœ9*K}â‰'“§�k²¨%£‡s�~+FTŠÁ^žázF§Ïü81/}vœg¯ ÍÊz¼%ß›owÃüÍË=E”ÑS¦%º�Wèâ~èeOìO9Oö-ÚúãçI—^¥,¿ÉsðÙÏ|6A ó,€Dû5Ýýì¼pæÉ!Û?ƒÖ"€¹î˜'ºåºc?È t3¿¥–ê~Ý噥ôÍú>³cïŸ zúg-z`Å�©ôZz®aßÐŽlÒôßÞÛOÙIÀ|&ºHh=û¦Üd-ç#øÍ\‹¶zVÉ6#ñ,ú£‘ýt0ð¢�|ÆÙQjòTÒDðaÑt–ì�ëœ'ŸËsAħähîgì�õØ“Öy[&×Vö=fÌ}Î¥õ›CY¡›y�}²¾€F…ß<Ûù¨´Ïk½GèeýîQž“Älû§È‰žÊ•þîƒ=º_—‹5j*l èg”óÑ×sÛ¶´×üXèÓ×ýÉëf>rá¹”“ø¥ðIûƒð•þlt¥µá 縬¯ý³]6Çùñ™ûvG¿rÏÔ“!ì`†œ3|à9e=½•ßåþ]¿÷”�žy¦å8>ç¹e3´Ë)ûOö:€�Åâœqž�#Ÿò~ö¬6½òCÏ5ò‘ó92öÆ9vÎðV»~D�v;†^”}æ¾²°éב²,W&.Pýœ#Ï0ÈI4N96{VÊ–|�DÈ€¢æÎøC6{‘®Ã�öÏ}­Ý~ÑÍG¶“u´Ë÷ˆ�<Ãd�ÄÓÁ¶Ns±>ô·è‡ßÙÙþ¦|ý}ÇS™�Úö‘ú3ô>ótuc°Îy™Ckžz†ž šÉyºpd¯œƒ>ÈkÏéÉyõ™¾èS/énæ%ÏËú=×—}ØU²m?Ñ‚Nb_8w+ì?·óé«÷iÉmA3º•dë)S×’ÀµîѲ–z�UîCÚÏ7™Àl kÔ×ù¦K—[~¹¼_y£]¹¾|7wºÁ9aŸ8¿Î {¸µ–XOð)ÙÛéÜ(�#–õº¼Ù¿WÀè;ƒ Éü $ʉð¤ì|µe™"¿ýÝo2kAcTFE§ÁxЛB­®2‘ye¶tº¶'¿3Ï2gÖ\�!Œ•Nó.÷,×Ìo�åóýý^ßÍ ]»sL¬…p×ðÇñZéé‘Aµé¦›etCD]¯Šœ9�ƒ²V6uã�7¤S�™Q¡°ìÝQ_þJFóòyCõ^…?|·_ Žv@¿3œe¹e(²jÐnܸñ¯‰ðv]~óÅ pÎÜ›a†z2Ìǵ¾›“¯rF{r}9/>ëZÏï4ð)cÃç‹áßÝçË=Êý]_x½\_>3ßËsÐ�qk­óôz:ú¬µO|2 È/]==òµµ[mýšýííË|4ï´?¹¯#z¾¯=}^ÙŸï ߘSÙÏr�9Îkÿ»ÎÇõdRy®³Ð“kÑÅ—Q>_¾ç/çþS>וoðÜÂ4ú»ó£Eáô,ç®'çv~÷êûSæg…¿Ê÷ù­­7/ϱ�}‘ß½yÖ`|¶èëÀå«§´JþŠlcDôBë�îi_O_åIû=ÊÏÖbôt åº7ó÷Á:çhRèY¾£kWÚú›¯¾Êër½ç•{—ïeÉ«ƒ¬O=«Ó(ô¥óž“�öðŒoÑ>ÏN×¶ÿŽŒB¹�I&¹Üþ¹ùý\2Ñ `TÀìžÎ¥Ð[&Þ¬/™}@"¶@oÆÂ¶žÞ¬}(}¶FCi7ÞÂs)‚Åw¨|u%‰è±~'…=ç´uPx ´EUdäˆô0WÊÅ—QŒ˜î„iO×9Ps-sìJ×yͱDÈ•!ýüç?Ͳ‘ % šRáôC¥È!ûB*­2 ‘´Xs”^ýù/|1¿äó†ê½ÚùÃË9(û%âX“> Ô“.®R R R R R R R R R R R R R R R`¨S FC}‡êü***************0*`´€ ^W)P)P)P)P)P)P)P)P)P)P)P)P)P)P)0Ô)P£¡¾Cu~••••••••••••••• ˜0ZÀ¯�«¨¨¨¨¨¨¨¨¨¨¨¨¨¨ê¨€ÑPß¡:¿J�J�J�J�J�J�J�J�J�J�J�J�J�J�J�L� -`‚×ÇU T T T T T T T T T T T T T T u TÀh¨ïP�_¥@¥@¥@¥@¥@¥@¥@¥@¥@¥@¥@¥@¥@¥@¥À¦@Œ0Áëã***************†:*`4Ôw¨Î¯R R R R R R R R R R R R R R R`S F ˜àõq•••••••••••••••C�0ê;TçW)P)P)P)P)P)P)P)P)P)P)P)P)P)P)°€)P£Lðú¸J�J�J�J�J�J�J�J�J�J�J�J�J�J�J�¡N�  õªó{C)ðÒK/5Ï?ÿ|óâ‹/6/½üR³èðE›%—\²YtÑEßÐyyø¿þõ¯œÛìÙ³ý¯9réfñÅoYd‘üzÃ'ØaÏ<óLóÈ#�ÄÜ_nF�Z)æ<²>|øŸ¯çÛÛ a>{Ø046 ó°//¿üròL³HÓ,¶èbͰaÃ:PcÞ¿r�r÷²§èÔûû Þ:ç=û7ß_œïgŸ}¶µg1ýÅ[´Yb‰¡qÎß|Ô|ë͸œU2¥œ×Åëý¹ëQ®®¸R R R R R R`¨S FC}‡êüÞP üóŸÿlfΜÙÌš5«yþ…盥–Zª½Æèf™e–yCçÅAáœÌ|lf3õÎ;\?~|‚0CÙQ¹ûî»›\p~:æ;l¿C3v츹4÷â‹s àÜ @ТÛð~íkz^xá…&�¼ŒðÊâ#ïÕ} à4gΜƽExÏ{3k�½™Ã›á³Î÷<{6+Á9{¶úê«7K/ýÆžó7íꛔŠå‹<ÃC#FŒºÒ¸R R R R R R Rà�¢@ŒÞ(Ê×ç¾)(ðøã�7S§Nmzè¡fö3³›W\±Ùbó-šÕV[mPç(�ñp@d` à3S§Mmþñ�ó0Úy§�›ñã×�̈%^ùÜ N²77€àmÖ¬§››nº©9ãÌÓów»NÜ­Ùx“Mš•VZ©Y~ù囥#CŠƒÕ>¬ñŸÏþ³yêÉ'33陸Owc™¥—޽Y½Yn¹å^G/Y$@à“O>Ñ<óqÿE#sG6ÉÒáà™ÇJs3Ÿz“©ÅQ|ê©§š§žŽ¯ø€�MåË.»lÎg…åWh–Yv™fäR#;?À¦þó™‹ù=™÷Àsæ¼�YJËÄ}VˆùÉÌZ:Ö <’uÔ> Ð4XëlÖÂôóÃ?ÜÜ|óMÉcÆkV]eÕf“M6mVYe•\&ž`ú.¼‚O�ÅÞf|-L4Jkô=øàƒ ØÈZtžíѳÏ=Û<{k¯ÖYg�8‡ËÈ´_ˆ3é|Ïž5»yúé§ó¬ÒÏÅyÅ+ÃãyÎè28ŽÈ#²…lî�\™ßd[™M²`[óqoÏ-™¦ó»~~/� r¼è¢Nrg~÷©¯¨­ÚÑ@IDAT¨¨¨¨xóR FoÞ½«3_˜1cFså•W$0óøO4kŽÝìñÞ=šu×]oPŸÎ ¹ÿþû@Xl± 4¬²ò*YÂåÁÀ ÅUW]Ù÷‹cÓ‘=ì°#šm·Ù6†®ÀË N¶››<âñæ¾{ïm¦Ü6¥¹þúëšË.¿,«çš�6Ú¨ÙhÃ�š âkýõ×°k|³â +¾æn˜û¹ñÆš .¸ ¹{úÝ-‡ë5Ÿzõ?öÅþL˜°y³òÊ+¿B¯tøÄ™Û¤K'5wÜqGóDìçsáPÀ"%o´I³ã;6cÆŒé  Ìnò-“›[âkÊ”)Í#�>’{2|Øðt\×\sÍfË-·l6Œµr\—ïâ¸ÇìÞ{ïIúÜrË-ÍŒûg¤3IJÍâáh.·ìrÁwë6Ûo¿}³^¬“óËmƒ½Îög-L?ßu×]ÍßÏÿ[3}úôá†5ã"ómâÄ]ƒÆæ2{ü±æÎÈäCß5‚OF�•% Cåœ-L{Ñ—µÜyçÍÙ9»yôÑG#kql³z€Æ+¸ÿàƒľþ=�›�üÑ” }¹×kžÀY¶$ž¸åÖ[BFÝÛ<ùÄ“P=§ 5dT“`"0|ýõ7Hðñm[¼-eL_JK»>¿üÿ¥—Zz~wð.sýõÖOÞϤþ zæ¹Xà�̼­°Â ¯“;ýyF½¶R R R R R R`hS FC{êìÞ` (·†S ükl8�ûí·³ÉÆ› êÌzèÁæú®o›ùX³äRKfÖÌl�Ù/\2�.ºø¢æ»ßývôWz¹9ê‹G5;ï¼Kf´ˆ0¿‘#3‹" ÿðC7·N¹5ñ»3{ƒcw͵×4/DDÜz€'«D6'OFÇÚk­ý‡„èz Ó9çü%ˆVi‚º®±+`¤Œ óXdípî€:×_mfŒ 0Ç�5ÂËÖ:ëŒivÜqÇÜßÕW_c¾¥‡™wN½³¹ä’‹›Ûï¸=³ƒìOæÄg–Ь‡5G¯™ Ù¶Û¾½Ygíu2  d•ÞNøìâK.Jg”³-–2Ê<_Œ(?lÂfr~·•D,Y.ƒ¹NÏ_˜Ç½áð_zé¥ÍŒ÷%=×^{íf»wl׬¹æZ¹ì»ï¾«9?2ùdÊm¶Ùf!ƽ�\˜iófX úø_þ"@Öû›MCŽ�'«®ºZsWìÛoN9¹Y.²{¾õïÿѼsÇwök9@zÙƒÓï™räú É(ÙŠdÚËÑÍ™&S|V6ŽÌB`ø6æoà‘ìTY@1ÈÙU²`/½ìÒtkÞµÛ»Xî0eþä¹y÷ô»rÍÊj¥k‡ì’1Õ>|Vpàéø�Wæ±ÖZk¥.jÿ\vþÌÉs<�|wFeq.ˆ± Ö9Pk‘iú`Øxsé¥GÆW+ã­è¦ò�“'ð¤·ÑÔßéëu?Ë�¦ÓUÏßýëå%Ë Ã÷2k�Šx‡.ê48Jö¯g•ó¤Ü´©� g97zE²cÌ¥èÉ®÷,û�dçΉùIGD�Í:Ê=Jfvf,Y¯g¿øâK]oùšÿ›¯u²~�§=èä x¾³Þ•Þ=¹Gù Z¶ìŒÙ±ÆÖ¼ÑM–XbñÜSóì”ñZÖûldi£‘õ¢ïâq�ìGסµßÅ®´Î–üZ4Ö?€Ø>¸]='÷!vToH%ÿ#oíÒ�\*û9Ør¤Ð¶¿ß{z¾úûœ·Úõxž|@ßÇÂïÂ爐‡É„rž‡]Ì•l¸'‚½æ©eÉrË/—çJÀxa0Z˜v³®eÀ)ðFFɽ‘™Ã„È|áÈE±UÀHDZÏ�7ÞØœyæñóãÍÆoœÆÄ%“.É5ì¸Ã;�©_$ ‹u£œh´åÛ¶ÌH¼)¼áÆëó>7ß|s8;Eé ©ÓèZ’Æb„Èn:ãŒÓ›iwMË’¢5ÖX£ÙtÓÍš•WZ9›™Ïˆ,¦+#[Kæ€ßq:e˜p<»Öèž×Px9”œù­·ÞzYbgŸŽì£©±Ÿ×^wmf í³Ï>‘m´U‚ŒZ£Ê¢€kË,³lf� ‹r|,J#o‹5ȶBKÀÖ>Ü'éÅe$æ:»£ÁÂð·ìU†É³a�Kʰ/œã%—líÏu±wÇýâ¸0 žhvÛm÷Ìàqq&¼™×pà 74'œøË”7Ýôõ€Ñ²püÛ7¾™2´?ë†8‡×^w]d*^ÒÌyaNò¸qãã<�J`ðÌÁ{*²DÉ6²á™pf×Y{L³Å›7»ì<±3fL¦ñʵAÊUW]Õüæ·¿Icú“G~²Jsçåh¿rƒyü`þ€±›'ßr³%¿ÉD`éæ›ož`\û¥¥Ø-·Nn&Mš”rý€ý?òi`+äßeŒÝrë­±×÷'(µp6äNYë‚Zgy^¿;�Œ¥—d¼‘mepx2@(9¸VØ£V•¼�`$‡‹Íß–›è±ÇO„ü“ÑöbdºÑÏ2úœ Î^§±êª«f–Ÿç$” ²p é0/¡ ÜÕ×X=K‚e^: û¡uÆý÷5÷ÜsO·³2À" NP†ž�âh@-Y¼®ytæ£Í?Ÿé¾Ä¸»Ed7D�=Ò“Á©e· :¡¹V}öÆ×ã‘á:mÚ´hÌÈ,Jçs‰%—ˆs¸jd¯Ÿö’5v¦¬Wöã}3îke¬Ø7"@›•£ÔÚ¼Ö˜3_Cf»ÏZçÌ­ámo{[,»›?Ç¡ëýq.gE©nw#k– :*2-Ù®ÊýéV²©ÓXÏW§uÖßuO�Êü¾4*ð;½£çi{å@÷wü¿:›@¢¢â׿þUÎsï½?˜sŒ/±øk+Fƒû„  .}øÝ)j‡KêùŒ¾ ¡˜Cë¤"Ö?#‹6-ÌL¨‹îÌzzVDÍÿS°z­´¿ÝIôF$Õ½u©¹÷)ŠFtáɧZ}W(a÷ä<. ²D³lD¡V #däÈ¥"êðê[±z;ß®Èr¯Ïµ‡‘AQù²÷\,{P,Šúñ4Dª;eÁFa8@Ñ2JqäÈ¥ÓX(}%ºÎ¿+ƒØ/F å¯çþ5•½k Ê·¿ý¡f$0 <ø"ÃÈÏŸýìç›­¶Ú* 6}or±¿Ê™Ð_y„ùQì»QCÑüõ!B}8¼e–Yzž‘É®ó/ÿÇ ¸+®¸¢ùóŸÿ”ÏÙ{ï½ü°.Ïßã½{fô�!†WŸn°afI�™ëP)Ë»êê+›Ûo¿=�ÁÑ£×lÜÇçz2œ{sõÕW…CyB:WÛm·]Dû·I`J�ô9ÿüó£ÇÒ�iôŽ7®9䣇¦±ØN¯®ÏäÀˆìn¹er³j˜xpîŽñl?¯ˆ²Æßþî7i$+™³— m†³=à˜ý6¾;Âx¶G­=÷Ø3�{<ãìùŒÄ .¼ €§e›C9¬yû¶oOº™ã`®³¬Û3†xkÙ(‘ó\²†|À7/“3!¬=åL¬¯vå{×»Îý8%ýŒß-÷[2øUÔz…p—íIŸÃ§Î©(n<.¢™sšçŸ{>Ïž¦óQ¢Ø=u˜Ý¯ÜoŠÀ. þasR}ʯÒáØé�;‡A°EƒG׊RÃöæØ¹®Rn„N)“BžÈXyå•B¶Dž úedÿùVä;•˜7C¿Ð ì]O¾÷UŽ“ƒ%[ å`Ì™ ’g`ï9 æc_ñFq^ÙϘ¿h\�>ÏC¹× Áö�Z:ä9L-z§¬éÆ8·¿úÕI¹W›nºIÊËö #Ïýú×¾ ìå’>}ç´�÷·sã¼_—Eºr¯=÷JÐhµ�%žƒð }2eÊ­Íßþþ·”/¸á%Ð+;°]®$ÝCºÆYr=¹”k�~Ldpûy(zG)ì´i­ì¢?ýé´tìýèam›< ;€³:/‡{^D(¥Àä÷©üCf¨¼÷=ïmÞYw­ÌÆ•_s)m®¸âòæô¬ûQG}%³ô^óÁ~þ‡€¸üÊËsÝ2¶ã9óšæ‚Z缞ßÛßË‚;þ„_ä¹x[>œÿ·µdÜ�þÚ´;O$ø6:Jï—Žs*Ø¡$ß™}ÿûÞŸúúªÐ¥€‹—^z9²»Öl¼¼`tÁÿÈ,^¶„L“bw.ú€-‰—eÚí¶ën =®'Ü�Q~áEfùµ3M~ÓÎѨQ+%à#h“%¦m¥�E¯7Uw‡}¦ üÙx6›SöŒþsJ‹ÈÖüL¡‰²qÀùÙʲéüÖÛqãÆ7ïÞý=Ivçþ®° gÓœ3Çל8Ë‹ä}�u:ÿ#Co­�§u”akÈ:èË ûé~öçÍ7Ý”°~7'è�ž€=k¥êì δߛðGÖÃ�áÌNŸ>=A'r†ýM&°)•¸oíd*“É3gÎLè¶ÛoK°›.åÏÏÞrÝíq�Àœrz�ô¦G骴ç²×^'€£°Eé„¢ mÆóUÖöVúNÐáxÿ±ì缫=Ø•6Î7>@=#ä=¾Õ£uÓM7˳ì>�ÿËóþײ=ø»ƒ 0‘l3�ûÿûÿOÎósŸûBø0;çÙì­Þí´¦¡ô»  ¥Ý€¹0ÀE“d)8ÂŒJ)ÜӱcÆF”pBD›Æ¥cÅAóùÛn»-Kj(›Ý"¥}à 7L¥M�÷D ¾Cá^î#ÃAÄ‘Rfp$ÈF;ƒÎg�+Ò“9¢4ÄýÞN²ÌCšªÑÛùr¦ÛG¯7OsöÅY—¾-í—c"ÃPâ�q‚ЉñÒ^’ÆÀçPÞqç  »Èrø=YA™+Ep¯öDíkhÿ™AÂÁ0ÜrËä|¦ôjÎÇt„ͣä`÷Tô”íåa Œi‡ñ±4L&°�=5Âú¬{¤WÐ;ì˜FB‹þ­TIÂŽ`|(£ôEˆ4o]2Œ{ÇñµÞ\€£}¾óú¹•tCs]”Š\sÍÕ)<üÈ� üþ÷¿K!ûÁ0DF‡Á™Ñ¬™�f�•ÂÞ~»Ò°poV" "¥Œ»µ¢d­ÕCjÝy=ú5¿/ûsy”´‰ÀãïÃ;<|L ã_ûë¬ø€KFÂ>ÿÅÌò)iÔ¯¹ñÜÿ(—ûãiÌ "ʉaõ®Ý[û#ZJ¡ ¯fß/oâr”•íå1 (Ÿá˜ýðGßOe·ûîïN@IFža€ºP _œxÒ ©˜öþÀÞy¦ÆÄ™¶.|8Xë,k—)uÎ9çdsoçŸ3À˜µOÀ½ÃP]1è:&Àk”5†o9íÃZ¦‡ë~SðÜýѯ驧ã~‹¥sÀÜzë­³ü¥="‰~W?idÌå´ØãGy8J{Š~›…a‘FiðpOÚáÕ‡z(i)K>€ñ_¢7Î¥ÁœûÀðåÀàU ðΆ1PëRîQŒ2…œc$9‡ï|çN  ™R¤›&G³î Gt¤“²q€o¼I‚Ž¥iwNn>ÿôGŽ3îè€;C^síµéÀ¡½cï׊²!zǾâ�’™õÊ~ÆþqÜ€(d£�,z2d/üAã 7Ø  ÎXû`Xž|ʯC–<Fåë# ûW¾üÕf»í¶o¿¬W?£�,ÁcŽ=:yÍY'��¶Î´ù3„�WgšÓFg�+èBÇ.NïžïÝ3y‹üvn[t—IIÞ–2 _^ãt9?z¼m½õ6Y²ë9ä½óD¾8ô²’<2Òýì=Gpí5×n6 b~æÞŒÔ_sÍ5‘!umž¥ƒ:8çPŒþöûGO–æÙgŸ•üùÅ/|1åXûçúûóPŒ{�ý¥S¹¾FJÓôÑê”!f��=îèÐýd ?ÛgvÁ_ÿzNž×Oê3i‡�‡d¾L• î ÿ"&÷Ý9ä$ ´•>~€N2@ òþ÷ ùØg®¹öêæ÷ø}Ê ‘ÏÄñÉ’&2Oùù–[mÝl W;ÐåZ%æ×†Írþç§îóB¶Mѹæ!«E`ÊÚéZçQ&0 °á�ôS¡Ÿ3þÁÈä5Ø€£VtûpÑÅm `ì Z¯'lë`@Ͼ zUP� Åtî�8€) ®rw™ ûî³oÊ#6+Ù{ë”[âºk¢ÄýâÔ�ö�|’•ì¶Èð”Cì<¡äçá‡J;_Æ¢àÙ:!«¿ð¶!Cº-yqUÒUû€‘ì%ÁJºáÅÖÈö±áwì:q×|žýЗ±},(9ÒþÌþüÜÓóÕŸg¼¯-¶Ë­‘ zñņŽkâìº)lÚ¶Œ¿y­­Ín&OžÜœyÖ™iwi·Áæìî¼Nç§^tQ3=lË…íÁO�¸ËÄfLðñ` ²¦0Rªû¥/|)ƒÞ|6ºza0ZHv“щq9ß ÅÆ™x(GÛ�õ€¶:<á[l†À ©x¤ô‹PBr'Nœ˜%3¢A"5”CàO§ÿ) �Í6�Îàfé8”á¼Eá­³BQÿ3±ºy‘N¹Òšm"êI±9Ä®ëË|×Xcô+Fy®w-Å)**…^d„“"êåoœÿÕV_-Ë—”WÉ`à,ê»0Úx£�Ã0y)Òwgd9€Þ32j$/È® ‚SÎ žõãì–oÛ*…‡ÂW§ÁúK”¢‰Ô*}Ð0ZtŽ" ÄAÝc�=bft€0’^ý¾½Þ߬ÆÄ=!,e�A¼ÍàÄ�˜8q·fó Òy¥7;Ê¡83Œ/kð¶4ÈH_ì?'œÃÂÙ€µ;ð�Öàw€7Ê”ƒÅØÑ:ðÃ&€…Ïô*ØïCû%=ÑË<8íK¯d{®C¨¤Cä’�J83–¤ˆ‹VØ�ˆ�fæœ91pœæÍh3¤r£)`í¬P<øýK_:*#Ÿ)ûà^ LÎ×÷ø?qå"Í—�úr–—¡}Nó¦mÿ4àþÒRN'¢ˆOÛ‡&ÛPÒà8¿/"¶Î˜gë[ôíï|;øì¹æ“Ÿút³s™í‘çÛ—L©Ÿþì' Üî´ÓÎÙä\™^Ìu–µØÏãŽ=&ÓÖ7 žæˆ‹.^[¼?'”d¤¼ÇþW9¯[m¹Uƒ£“�í!#ò)[ ]°€�Ëx· ޵ØÄëÅ9“íÅØõ·¬Â�±V``]ð,0[$÷}{½/yXâ^=œú¿ýí¼44Ð’�¿}ð»ûþùÏÙvY4¾o5½^mU¥+Gšý¨t®>¸÷>q¾Ö°uYã  Ûä�8xÓ™Ôtß9\qÅQ!¯‰3ó@ÐòÞ¤½7eµÀ•UãœoÀÙî ²`¢;:Ø“¾Êq{ dætÒ=ö†³Èè³ôtîdc‰öï°ýŽáˆ¬“ü ?Ç~†Þ0d�Ðð™ÈRUrDw9§öÈAÕ‡h|‘~gmYù§pèfÎ|4e£>;Î�ò“ÓN;-eÖ'�üT:ŽyA/ÿ±F�†ùßýÞw’_•B)«%[çUrR2X9ÞÀod,À�¹»'9-à@ÒÙ³f˸{.�:k'Û8¾[…þ éO%¼3î›ÑÜxÓ Í?B>ÊÒ$»ñ�†øÎÌ:kGP'dƒ ÎYoÆ´iS›sÏ;7�(Ù$èýñ�}<�öN÷)ŽÞÕW_�™±2Œ>ûÙÏe°¤ÓçËï ]ñ äÈ:çx†ÝPd¹uóŒÐ“ñÝàÈÓ èèüxyëîoÜŸz¶¿ûò÷¢çüìËèë:ÝßZ9Ïä¥ì;` ¦_¬s0FqhyäÑem"ÚìG?úAÊ?r¿Ð§ àŠ£VlŽúÒ—ÓÁÿãi§æçPxÿÞ±–%ذ?�‡ ${GÀRöçú¡ëÜO9yÎq$;ÌÎÓ ¿<>í(¼½z¨–ˆŒ:vØô°cÐŒÜØj«­øâsÂÄô–NÐIœC%s«®ºJîó<˜gBÐKO/Á²­ãäÉÙgŸÙ\<éâœ>kªk¶“㕟DŽ­¼K8œÆ…‘ÙkNÆì˜{Źf£è3éþZö’^$Æ�Ÿ:‚“Û›‘¼<"« v]d4>=멤ÿ&á4ã:W)ýí¡CezzÈ¡¹NÁ ´=÷¼¿¦ykdS)“Ý,l?ýÔd‘Ó)t/Pkß}÷M±nÈ öæ¹çž›Ác`ž€Ï·¾õ¿rϺ›?}~É%—$8`_d†¾ýíoO<;:�¦�iÞÀ'Ácú•\ˆóÕÝÜóo==_eä^}á…xûoøUEN _tx‚�!iRþ�IEþ¸Æç¼-˜½ƒ¿È-_h÷Êßã~~öw_x»ÈM×·úvEåAœIƒ_ásE–9úîóä(>,÷qo2²ew7y-€¶=íïä8@Wöïô3N—ƘŠt^ÕSÐ}ù&í×{.‰6æël±ÝùS^èÃÁ³ä¦aNæØZßsÙ£ôŒxŽì(€/¹aX³õÊNw� As.z¶Ð4?ÿ¸·õúl§Ïy†Ï” #½»¦dC‘èÛÝ kȤ֚Ÿ }µXÊIë3§¢wº»Ç‚ü[Œ$µñY˜Ùìü1rQi ‹ã&K„àx4 Q]JøCûî—)~˜šÁ.‚BÑ‹þRJïy÷{òzF·HÅÙ9+3 ößï€f›8ø€ŽŒúÍëÃq 80®]-{Œá;§ÞÑ<3û™4@°€ m_æ«„Ò±žþ\OQö ܳ€ à6 g„0S?o@ŽÐýa0S€êâ9¿#‘n‚„±rÒI'e´—PÒ´™1D1j\ϰ´òÑCTØ"Aä]Y‚Ó T` ˆ qš(ŽÑ£×Ìþ€*‘v{KX¦€‘ýcè¨cÆŒÍtr æÁØk‘´—CÑ»DÚ3N‡ë§N›ÚœwÞyÑbr¾º~©ÊdC1 ~¼å_v¹e›÷¾g�0ŠDêÖNÀ¯ëÜÛÿ�žîÍ ÃW«”vkñ;‘%=.€„´¹ØÑ2¥@”ˆÁ�úë¹ç?OÏßù½È¦è;�ÌÀ‡DÑ‹Ò4›R0N΄¬´"|æSŸMP§]¥¸ù¯oÿWfXyä'0jWPyÓ¶(ÄýäGÍ£VLœ¸[ŸІAÜkß?.8?÷‚à ü€ýHgSƒG ç?ø~f`}åË_‰=Ú%•b»ÂA#Žáña`ã+ÑÀ¶Û¼=•ï`®³¬…cñãÿ(ÓÜ5ö-BstU¢ÆÂ3€k@>ãX›§s[Jôœ›3Ï:#� çŽAMIÎcáî»î ¹òTÊ™q ©3ÃÈ=ãÌÓ3Îù$cÆ„Q¿Z\T4m´áÆ ŠöDa—uÝygë-[düÈÛ5J'ôÄbpsæÏ ÇÉkÔ�!ç_³]Ÿãá7¼Ößu¹^¶Gg“àgÀ£3ã<)»âŒq4—Šçy&Yã<2¾È÷{4`,‰î’7Œsò|~‘.ûÕ9ž€g¾ ç“Oþuê�ÑÑ7DïYAÎ`‹ñˆ¶2�Ž·•ÉÃÓïžžû xø 0px\ïmt2Øè Å”)·æZöØcÏÔ?x«d*Ý#²gè©'ŸJ°oµ¸y ¸8“€½b8–}ïéw†�l2ù?øŸ4?;í´SêH{Ôi�{ t½±€âè±ÂŠ+$ˆ�Ÿéc´³þëâûK/…þÜx“ÔÙŒG@êÔà•èE¶È°$ï”rÒa“£$Gà€|Á»ä,=3jÔJIKà§MoÆí·ßÖœ~úŸ›‚瞊9È>ì�Ãò¾�îS€ü{~¼•ÎYì @G‡Ú_zOp‹á̹Ð è9rÁºŒùFî…×d+Êz¡Ç€@#÷FO`&`r�Ñk¤íÞä¿ýõwŽ8Ç"m�¹ŽMÑ×}]§ûã!z`Ò¥—äsÈ º¬A:l0Fqh½<hB Vt}ž};6yòØJ~ÊbHÚûi/ès²}ü¸uóï¾û»“ÏfÎ|4ƒnÎ1»JFísQj*#Úy:®vŒ{+Y‘•â<ŒDï ûB&Ñš±_öJK nZè�€�|ä#¡_ß‘º†�DL9V믷AÒÖ¿^ÚdÅia{Ó¨g â¶œ?€[€ë¾Gñ±¾:Ñ©Xo×ð�Rý@ƒ],š¬ùh”°�FŽ\*å-Ý=r¤RÒù7�îúìÒòò°•~Iß­œý žß3”ÂËœf;ɤ²ÇºÆýÍ1Ç“þòqöéXúŒüe×Ñ%8õ÷©W€~Þ¼ªTÐËS0"—шÇn¹ëîiù¶ÊiÓZ�?�ËCCžxs¬ó×ßóÕ•~ êÿ==_e>‚ÌÀ~ÙM'D,?u¼s1,©d!Þ!·É/ô+�]öÓ¨oÑ—ŒD;¾¹EGÒ5x£õ÷íú Ã.#ÛžŽö#}â³ú|yN»=\ä(^‘4À¾x)æN±_ÝÓµ‚8í™ÜþÎrî0ø…Þ>ëóøK²ÔLÉY�²…‹þ´Žéaë.ÉLr=Ø/l ™²dynX»9ºŽ sÓÍ76ÿûß3«—îåg¾;äÓ¸qãóóÖI,¾øˆ¤)Z�=KH�Þ膅€+ëuk[*€aº·|κ̳FÎ�^‰|,6ºu7ŠŸt÷Ýw%½ÌO@�^°æù]ßݽão0 ª¾÷¤<T©¤�ï-?"º kJ•Ò¹ù曂¹/Ì·ï>Ê(0‚ã,Ë4bÔ"€‡óÆoÈšoÎ;#ëÀ”Ù˜™�¡ÆTÉ�¾5„�Ãâ€êu$kÇõwÅ= a5>~à�åß9W…aÑ—ù „¸?ëuø¯ � Á6×w@&Èš�Q²¦ÐK;¬©Õƒ&"#è"ò"%ø’‹/Àà‡ ˆíÀ;Þ¾]ÒîÅܶqÞІ2P’E™þ*òß•U?Êá¦xîÙ‘‘2=!BdÝu5½~g‚9ŒŠ‚Êà’a0ÔÉp‘�@°–9\xá… ^QB Ž�D¦lj±îMl="ÎöúaLr6ˆ@¾)·ÝšÁÉQfuʠ麂ž�Å :í´?¦� ˆ¢EÓQ¨-6×@uÕÀáD…Óe]탃 p eʰÀËÖNˆs°d%1ê€r3eîÉèÖÙãëo¸.ÁtùØá"å­F–íÏ"ü'Mº¤ùÏoÿgìÁ“±_%Í‹"éúYŸ~}ï¿¿›çÇybxáqëkŒÆ§\'æ°CË}e|Ël:& v @Q8hQ ©r/ý~óÛSR©Z ÀÍy“¢>ë,Ï-ß�•ïÿ°¡<­_¢9�Ð:=¾tv¼¹tÌûí·_ö>±feªx€wiКSüîw½;Á>Q'ç À©ÔO–¤5rT9€ ¤L’+ÃAFÓåȤ`ñ>¸‡w#è‡Wz2Š#êþ®ʾç=ïIã‚l{ܱÙ= 8 ŒÀ†½.g¶¿ëºúê+SN3¢DÆÉo ?£é’pLnЍ½l;òÊ9UJàL3þ6×^ç-%g�A. É�îÆíAë¾ÈqûÎ&ã~ÿûßæÌ‹l¿e>YPæ dè~øYŽ âÜ—ý˜�ÙÉ!R¾”ã ¢?çL¹¼Uð‚h£>`Œ?ÃÚe‘ShÇ s- w>È.z­/ƒ<£oðô±Ç�Æ HâNqöœÙ"·°Ï‡“,‚Ì�”×>èLý˜dQ Ð"Јˆ: W4B¥þ\|ñ\ý)Ô¹Òÿ#{«�ñ6=OèˆI“&5¿‰i aŽývïØ>ÎÀÈtXñ~èÍpÿpêïBÿÝœû»qœ¯ƒ<8åM§ûpHØÎðË3•': ™¯©#~$ûÂ�ÓÊé?JŸpD¦Œgú“ tìÔÈӋOdËšû3aá %¶} „°_[o½Mf>ãúÄüÝ$£oÇf\8ŽwÄ}?€[™¡‚h€�Húß cÿrÎÙ 6�Hy¾^³û»v›è¥ŒôÄ'ëÅçÿíëÿ–×ç…=ü¯_v¡ùË�\9xõË!è⾜·®�-:jæ/Ã}Ÿ}öÍûÓù£F­”:×€UÎåg?ó¹ÔOìY|eôõ|u¥ß‚úOÏ—ù°é#zŽœAûL¶�A²¿dÒÌœùhÊ>ºx ¨‘éÇ!CÖ�ý%—èug”Nt¿+¯¼2å§óãï%«­8@ z’Ýo.t>bÃÑÕlfçÞ>±õøh˜¢Ïf‡Ž–j€oø o¼I> ïXÛíÎà¿éÓÉÚ[³ì4—Áv ûÌsW^y¥0­Çï ~üž{î�ÿÉÊôõRLdþ-�Ú}¾Ì÷–[&gY·Ì8çS&ý�·K1þ)Û_Pú°E§˜ûÖ[…>ˆûÛ‹¢/É26ûýqà· ˜ 0Ÿ¹€J€)ÀØ 'ž�s>ä�À¶¯]íwsnìŸË/¿<õ�›|$/·Œ9 À–sÑ~ÍùsŒÞHêà³ è*ěӂÙö�·1MØlóxs‹ºðER°Lž|s–X0®”•mF�� pÈdLp8R%3 '©¦³fÏE´nò )†º{]~úóŸæµ²o”¹1öÕs;,J*žkRÐê÷DóÌå#;aJ' •¾Ì×½û³^‹TÉÛ"{€@;flEF7ÃBÄ‘ hɼb€Ê¬Qx ÌKÂ�éÒ$û3Ÿùl4l�&„ë3ÁåæàLÁ }ŽT§A(3ž?½qy{)]B/JGøŒk À8³ç{`±cfž¬¼ÊÊ™¾Ê€¦hn ‡Nù'—CÁ°à]qÅa(ž”FÄþû8×gŽö�aaÝÖH¨ÎŒ‘l‚87ųÓüε>ïzÏçxpldÆP8CoÓM7KžáXtÊ\¢p¤À+w�ÆKý¦8d´¦”¥}‘à,R~æ˜c¸ùÛEQÓ ø£(Òƒ¢‡þ:�Pç¿ÃÐz,ëÑ›è*­MÚ%a¯.™tqóŸÿõŸi(vèᙺÝÉAW:d úDÑdO|*JÏ4«‰¡$O9å”Ì1Â�¯¢”ʳ)|1mÚÔTlöÑy¢œc�å¹å{Œn §‹  |e"ÊÂ3dMï9¹§þñÔpâOGeË� ÎGî쿜�޲sg?¤üÛ7ý‹DÐÈ&20CöÀÜͽJ£ô1¡àõÂÂGœLôwF¯¾æª”“³C�ì¹Ç^ ¶ø“[öÓóéŸuB®pÀ‡C'm•Níb‹-šà ~×ì�òŒ 6X?ôÛ‡RŽY‹µ[3yĈ�³>+[�¼eà2 û2ð¤=ÌpЀ›_ûÚ×SÞ{N1 ñ7]ÌpV–íù탞¬´œúZ‰©Þ1Îàc“Øs¼. F–èÌGg&}~zȳ>Ž;° �H‘q‚=¿8þÁ‹gJ<ù¡´§ý,´Ïc~?“—'Ÿrrò}C§w÷Ö³ˆX7'CfØØ1ó~‹ ·Qr˜œc%,t$šx–{ÙOú�| ß”§â+<Ò 0ò9ºš|•Ýâ>;í¼s‚„ä·ýÁCäÊy<*ÝÄg@#"2K#dö >£;>¸Õ³I6l1Ü{»ÎBgg€þ¢ �ÿå/Òdl¿ý�2äç` û1=7~)@jqˆÊ3éÙSOýC³tzáO@5^�'CO î/ùKê÷ÝvÝ5�|Ë13œï�ŒÇt€ö§?ûifð4sÇ‹tæ�#³×›¼vÝm·Ô»d�¬­2çB ÕZdŠ:S÷Gé¸ £vÀè£Ø‡®£;Ý�ɬÁŒy$2˜ÂVwÿÓþôÇ”¥G~âÈŒvÉs@ŽØ'€§SÆ5™¤ÄGö;Ý”ËÉY¾€–:@ ydÈi>à»Pew|5/‘`sx9½ƒßÈv6~³ö«ž|ì;v/;œzcØ1@¬{Bö8«²=³L<ìè‘#—Žþ�+§®6•{hœ±NÀºÿ¿˜4y>mÍ�vÞ)×-·dð› àGà‚‹.lnŒ„~†ä×ëË5&lDt2ø/ï� ]ö7ú[§ 2bϰ÷Ñ?¢‘ë3@çä¶Û§d`Ú¾ìóÁ}3à^äƒÏ™ƒ€•l1Áx²ÖßËgòáþìž}öÙ©mh(@J/ô¦¥B‡[ʯ*`4(d]ð7e|II甊’CREd”é´�ÛC`ý9zQ¦0U“k‡„‘æ ž†"Ävüøq¡|^JCб½×žïËH¿´V c˜ð�èéðL(�C9ô•F¾¥™aç¾€‡Ï ÑÛ�“,£©/óuŸþ¬—¢õöÈ=‚ã+STA@€�tÒ‰‰”Þ®#¯le]z٤椬šýî¿ÿþéèPÜ S´¾sV²„ÓüI‰ðr�=Ñ9oë€ÐhÏ-€È ÑNFY�¥—ЕW^ž‚|µ”G}ñ¨LQ&X5Td8ÈôУB^4žahà<¨ÀcÊ‘G~2£ù�ùüÃѲ�’d|2Ì)4ä�S:Œz%Vèo½ŒU£8ò;å¼ü Ë'ÏâW@PLøÚ^­'Ð9T¢&�?öx–¤0V(ˆ1ñ<™^§¡w”È¥r7ô~G¡€-îöQ#Ðÿûÿþ¿Tò/Â(ë„Ð>Ê>\Î̱JfŒ2Õî¾û®Ü‡ßEäY”é›ßü÷tD;ñHéÕ"‚ÊÛ(”Ó{앉қ�^gûü\#‘]4äø‹ÜŽ×âËòy!¿ûÝosïW gCz2`8L2⯔«¬=ÍÏ 5úÀj<÷‹øJ¯+F°T6€?‘-JÖÚ_«Íˆat¢ ŠNCVZ/³Lë-nRå9¢%Ã`Ôj®Yq18€YÔ â`�œM#SÓ`]ÎÞ²®íû* âá“‹"£QsgMù9:;¿áòÅàÄüä§?I^ßqÇ0,#ºFÞr–: ôê�çÄ{¶½`èú®¬ŒAê¾þo=Î&TÕĉ»6ÛÅžo¾ùæa`>‘ûÉÙç ’GÞÊÄÿå {¯ŒL‡ë‚/8;£G¯Ù+9Ôií½ù�}'‹DÈéOûþ�vñeû`8ÚCNÜO<üûlþYDvNÈ<À°šlZ:‚' ýÔŸA;òÐcm%¤ì�LF2½µ÷>@áv© ôVÓð�‘þóc~–Àá¿ýÛ¿§jç‹ö9vú™®óU2®¿îº|«#cß|8zç1¸; ך«ý¶ïtœçn;�Ö~^™úó¢0ôePÐÁö‚Œ‰é¡o8^@Y‰¾í€]Go-gY)ýBÖ’Á€]Ž=£O�J_þ1€l‹ìçÇÙÐgÅöw÷§Ã¿ðùxÛM8èí@co×YÖNŽÑ_žñ§?Ÿzõ�6ûk·Ðƒ-G­|~ ¾Ûô4o¶Ç¼€t™zÝ%^t&û øàLÛ+eMÛï°Cdþ¼˜%jöêG¬çÜyû~R:ö�ïüWÊeçFãk{ªTÿçGÿ<Ÿ·OFõü´Ê„"ó9šFK†´úÁ±¿Ø0¯”¤…=jÞ {ÀÚ‡Œ4 ;ª0,Ÿé-`$8â\ˆØ N§¡ÄZÀG$&Ùg2sÈ�/G)™Bx׺è9¹1lØðÜ[Yd`[oE|G?âcB±cd¾ë%ÉÞqÆ7Œ¿¹¿ó6�€{¯Ø“ûƒ�È)zp!“bç�cßÚ€¾ž¯N´\¿ëéù²çlYàY¯ö‘܃2êè >»…¼ýfè—í"cß8ÿý½ïf`€Îδ¬ç„m jäG?ý2Ff§¿ËôàœvÚÀq6íPBË ¶}"Ïó?ìˆø¾eês€ã÷øýÔO/Ïq†¬™vàË÷¿ï)&„�ô’éhš`Ñ´x½ 0b/–é6×ùyýÍÍ“¿jï"dÈqë–Åðù½öÚ+ì�]ø”ed ž=Ì®fgÜ~ûmy�û)›cc öôÅ.Á“d>ÀLö¤€9Ú°c�¯m¶Ù&3}ô¸¥wö³Ÿå:ØŸôn§ÒvsÅã†}%k{2Ðè¢Ðün65^@xÛ[¦�á^CiTÀh(íF?æ�d1hÕ|;à­îðc_sW e¸;Ÿ}>¸OF¸ö”‡(˜šv‡Þ¿pN‡ÏAµ Ÿ%l8Ì?üÑhæìÏ�ñy‚É( @M¶Ï‡ �s“yBayV_æ+u³?ëµ®ÿø‡é€î¼óľ¢,JZÚŪfŸƒ*À‘1œSëñ'Ÿ)Є�tï±cÆ&'0@I‹q¬zy~o#ÆÃg>ý™Œˆ ©²€† Ò˜#�üT:A"?æHq¹î[ßüV¾ «Ýa.÷ÊHpô†h‰Ë˜µI¾Œ#0ë,Ï-ß `Þ!ˆí"Ó&S~ÃiS§ÆÛÔÂÐpQêëÆy‘RÿD(éï|÷;iÀPŽÞÂ�+ ]2ºZŸL€EãÌÈtDW†…Ì€Ñ�a¬�1ΣŒÑzóÌwD� {©l­Ót0ŽCÒ•5Ií`ä| ĺÐ-ׯ_—!TÖåü8 ->ùUÊXÀ"º´Ë”k#Ãâèc�NÃS)‚ò.AY§Á�í�§ Šóâ2^~„ÑûXœÅ§²ççÓ~ÊÜXtÑᙹ%Ýžó'X@F3ã®:Ü·Œ™31SÒÁùkdX9ÿ€î‚ŒKk�Q¨ ­¦Îÿç”�Ù>Ï–~½(35€³fÍÎ鎞cžlØ+ø•®JˆÄ¦þ ½ø¥òúÀævýI×Êœ96z’½¬J4�»yYÊÁàTçô0òjt¶L6 ÅPïDsçÖ}|7è»vÚ´_S^ãàT†À‰±ïú�Œ[/“(%&_px�í€0‡Þò‘t@±àŠlg²{ܸñiÀË´ÀÈz³Î²f´åTp´8Q2ÇÖt5�}0Ã\=Û(r¢ÓžÜ}÷]¸EÀ1ì>Ž p«€}/ÇõKO²gfÏž•¼ÐQ„_Ù‘¥¤„ãÅé½(lL=túZ’ÆÑ3w2üþç{™™!XØ‘áîȤ,€ u½u×OG�m!«ÐÀƒœ7A(¤‹Cq9Òcã€P¾ïßKíwë@ê›w‚ #S˜"8ûì#â½QÞŽRJÏûY(€ÁÜߜٔîc2Â(ã5‚§ÐŒ.Æý`­³ýù0’é£'Û h�>}zã­2@IF:CCï,Fîÿþ?ÿ;yhÃP]ïJ¯"§– Ï)!§0 :”é�äzš m2K:¿×'s„: ¥ úMÉjs>zèá~F…!<˜ëªÎR|R‹Ë°ø™‘Ò¾>MP� Gê¡8³[nµe¾Y+ ò u§Ñ_9ÎPbÌ9§^´À‘B†íoä$°KPÙ ×p—H¡ÏÙO`Ä‘(ú¨Ì™ld8Ÿ H² S†Oùü@'€�ô¢ŒR¤­ÒÑ�^sNKæŒ+€rK™¦3@G�]=è�fë0²CJ…9PŒÃîô'Ãù—˜@_y¥ßd°õ@FöÈ~1œeÍ^}Í5å:lß}?”ç\¦Ý2£•ŠV–�шȸµy·H9Ýê5Å}™§²Qyø‘<§ôžY$ä#ÀYÙJçf¯›òÚ3Sž„Žèo†Q×î<8stÝTd|»Žìï3úr=Þ–E)4ÒcI'ådÒKt´³-šOf~üc‘QºÇþ(Ã7ðû@Fî'F//ÀøCV«’-%˜2Ç”Jî°Ã©cž GXPÆ9‘ÅC¢3ÞÝ6Î ýð `Ù^ì›´'ºvkÆšd)'Lx}†fo#Ïda‹±Q¼½µÓ”•<°=Ùh€<ºòë_ÿ·tVé6Ù´¸» OÉDºÈÀVž,ÃW`Ž]èí´öI»…9;gž©4¯õ†`òV -02ÇÌ„ =é%!~¦Ì 0×݉No¶ßÙ/º™ü‘É'Pú‰�¿ZbÈ—R1ÁŽ ãÖ~ÀèÅçd¿*÷w–�?²ðf‡/#É@Ö?»”-ùÅ/ðvNÝÊ^¯ð„ …ÌüMÂ^Ò8—?ˆ¿³eKæM{i-_¯Ë|:1*4È»C¢”ZÆY'{¯ë~ÒEúˆ¢Ç~ôà 4vŒº^0:)žG_ºU„ÞÁÞw�9ÍØS‚¸xTÖüᇞýjÙ�dâ9ñÖjÕ"J(Ó|ê’Üõù½ý¿9J°“ØÑ CqTÀh(îJ攌ÿ«3…õþûg¤ÖµÄÊm�?ÀÆðáé C^ž£G¯™OuÐeÿbÆšÊØD´ „â˜GGj0¥,âMà´Œ î‘ÑþÎwæÌÇb~}_ïôfß `B®ôcûíwÈ´}PÊ(°A‰´x€#Õao9r3Â!º'é&^êÑGg¦#/ëˆ�¡'\Ѿ+ÐþL?÷0"Ä¿wôgÔs@ ŽN«‘Àè”W£±áÀk|hÿþ™ ¢û'NL£+/œû#Ñ^Cã_޲ =KÔú׺3r‹ôÝZ}Y·”|©Òè¦ä°àd„Êâb¶Þ®³uÎÀó[|¥¿”šêý,se„�wÞ¹©}�•29j×\M–CS~Ÿùôg3­½\ë»yz¾×ôZ:ꑟˆ·¤ED! Ê': Šÿø‡iH+íÜ6ÎR§6δ ûÊy 0tÑÓ1$~ ˜ôÕ/GóÌP¬�E.rÈ`UnºEd�8¿è1˜ë,k/€ƒP£o#BT´}´¬‰ÁAé1rà�§¡ Xsñá˜È2bÈ´�"§9îON)Ç®À(`h/‰+3xÞ3|¾ÓÀwÊŸf"N¢ÒýÉ0bØ æº 0ê¯Gos³Ï€so¸ãðÛ7Î{‹‡G„ñ8=K†ði'ÀèÎ;ïÈ Ã�sÓ>d"%ðÙ†ä~aPwÍði¿f æäs–ñôÏ£gŸ^N€]k-=a2Ã-œA%NÏ=÷|:´ Q鉡¯ÈAM÷5î&϶ô§ž:ߌŒ¥Wõçk�b†0hè,O�=o#Àˆ�ΉÓkJ/5Y@1zëC‘ù#ø“<ê+�K‰.àç‚ve6æ3°²ï,™ÊJËi<hèœ*Õás*Ð_‘ßèò±#>´yGfk=8T#z†®6Š^ìN�ö•¾½½.Úë¯ÍÈùÿøÇ+@;0H¦âbQžvKЛ®æ|Ú?ÿ¹(Ù ‡_Y @ÉhÀˆ3û½Ì0š’A�òDr½Urõ|–\)ìz8€YüqóäÉi·ÈX¦lÀÏA¡ðÀÿЗ‚»ïî-J¯- ”é+¨#ÓH?ή`½Œ”X@Äì.ÙÚ�†g¿P¬‘ke­žFÊò€yzá°= »ì"ºH:nü¸”•%ÃH Æ>… `d.gžyzséå‘a?/ˆ #Á"ÊŸ@þtØ<¥tJ)ªÀêÂ<L&]zIfô³õÐùjdt‘÷Î~’õ€ú_x@IDATÆhÐê`ä¾d!›{JCZ��2eé#çÔ9æß27 ½+ÈŸ‡GðÀH OŒ”ÒÏülJßÝØïL–Ì`ûøfŒÌÓ Dþòî²8²»ÅŸŽJ ö,áw΀üSŸütÒ¡7%gž1¿Q@#z�.è‰8¿{Öß+`4X”]À÷Íž!¿ÿ]¦’S(Rh³‰YDïÛ‡hgËù‘�âW]mÕtÚD*1®koÔ•@P DÑI�£p5f(‡JÄ@Äõ'?ùq3< ¶ÖëÀwÎr¨v„Ô}9þŒnƒ€a)¦ôú2ß!`õ|¹òÊ+út½†Ûß�È•WQ—æ°HŽdû€ Kqq4g‰tÅLNê}Q^ÄùäÜÐîÿ|¤#sîŽfË[m鵫¯váoVûϯŒâyR"9Íú›Fo¯sÔ›ÐÐ^ø ``Éo#3˜$ÃÈ}€7J\dRšS¯‚Äúæò‹gª¯žpà9ÙݺƒGÊeÔ·¥ÁåZÀίõ«è•1'€º}¨•è ó¨Q+%`"ãËÀ33gF-œFÛÈ0þÔTwŒÐZ„Ýðì¸àûý÷? £n"u—Gsï³â­sš­3teÆ´€Í–cV€€Ñ~%–1Z[J,_àòmÿˆÐü"2:€"Ê5•Ô�Úí# ´³ÎȈ º1ÞdR0T=›±ðÝÈxSÛÿ‰×U­ÒÂÂgš¶}Ìϳ®h‡t`Fô¢‘�1˜ë,k)€‡/KU‚Ž� >™ ^§ äˆÚ�ýb?žŒŸepyš³àrÛGá;)ÄÞNˆwÈ4å{ÝFd›sÁe”?Ž{§!õŸ¡Ã0çpGâ ¥j�zÉLœ˜Í¿àÀÈÁ\×`Fheú*Ç]Ä�ݦ7 #T#v  =k�×K$ßk^?'ô€Ì?)óJœJ†‘ÒEç‚AÚ©GC—Ñ `P*ØÿêW¾šûÐ�ê´÷}ù]®Eõ’É y~ ÊXg§ÑŠ”FévèÉE¤Ô9þÌg>Nø6±Þa Ð0¼É³¯~åk¯8]õ'ÃõÇ¥¹f‰!9#2ï¹]#™WDÎ1™Ý“Q"ºä™Roò Fo} zÕŒZ{Ù DôäžÝ}?s’8í$¯Ýf0[÷²‘­R²IE£9> vÏ¿gú=  § “s>räÒHð<Ÿ=䣇„a¿]žÍÒØ'¢~Q»^÷.bü©O~*$|:;"îô!} p˜W£îÖôfþ[¡›OéºýhÑS^gL`I‰>}¥ Ù[9¦í@â@FÊõØ8"ü2Œè/i Á÷ÙÃèç?ˬo½””®z„Fï8/ÓÜbÿ �uÈP¥÷Ù¹#ç˜Íý›F.o ýÃ^m?�>Ø[ÀˆŒµôSÄQï4dÚ�‹l8ö“Ÿ2V '^ɪŒ‰´ébmÀfÔ-±ŽØ ì�¶E€/JfègËäsö Š}Úd“W›sô½=2®cíìKgŒ<û�oý¯ 88[™á‡rhêÁaoäC‡à?0‚›Ò—)qt¼=‡¥\d­ÈjÙ;Þjy툸pô©¡5Ø£ð9œ 6àÔS£GJ”|p”½å̽Eøm·y{:@#†ƒƒF�©ÑþÄÇÛ32ZŽ.°È} Y8þ=m E¦û2ß{î½·_ë½é¦›£Æþè0<HcAê±:]_»ç Ü6lxÊoŽÈn»¾ë•æ¥2–Œ™¡‹9?+=¨È“O~"£ÖðÒ[0*o­ãО|ò¯\Ã?¥øÃ)S5­vàIº\I&Ç�— gx JÒdþ°¡ècí#žì{%›vó [ä^shñËîïzw–аßdZØmç_p~ö=SÎêmÁš˜¿E)‹î”8OíÃz¬‹Þ÷UÖW>Ó[Àˆ>’Í)Ký©'[åºå^íß—\r‰t¦Ÿ}Vyè´ÌøòÖb/\92ø•ÜЄÛX—l%ûH¦OٱΠ›êÇ!/œ›†­¶Š·¤Ím húõ)¿Š@Ý5Ô“¹4oIÀ¤·þöĹõÖ7rêˆÃ?–çOKyIN;-¦ŸÙKt€óuá…fÖηþý?0Â_‚Ìlñ®€Ñ±—d3Àè;ßùvóP�ä 0zG‚â�#~†LTÀꯃ?T�ÈjYÝFD�®ßø_ìk5ƒ …óvOüàÌ-ÀÝTÇÈ8ÕDZÓÈÞ‚qFÈÇÀJž ¹Ö"t=ß…¼a¯ìºë®øìtŸ·Êï*`´�ì´´B¯“…°B“W^y¥|íð„80  o¥lSèÊI8R268Æ„µF“ µk¢þ`D¹í´ÓNi0RÚšç‰ìPH¥'¥%CHÓN Ýë±e<ȾYe•USÉBй3Ý–æÎPc|’Êk¬¾Ì—ãÖŸõÁd8q@ÑA¶À®ñÚz '’°aDrt~ûûßFöÆÔrÖ0’ú ⣃U¶Zr’9%¡G…ŒšÃUM‘<Æu7·ãöHŸ·¾Phg~b ¦/F"UÒÐ/¿â²æ·ˆ ‹{zKÏÛÝ+€�gØ?¯þWd-µ”Ì =„Z€à¼Ö ÃÊÚ*"Þ~#³]D°9AzVxk›¬,™\Ê.vŸøØ‘Ù�ؽ­_sFs½æèllI ˆÄµÓA´PæC ´i{é ¡lxõ‹ã�Ë={ÿ>�èŒtD/”—_þW*lå­¦Ô×góòOÇkfñ3c‘ƒãì¼ ŒÑzu÷=é“2žÀgœ�µ×^+Ï�èÎaü)ããì»÷É'Ÿœ<ÁèãèÚƒÒŒ¸d*­€‚ u©é"QÖ9{Ö쌉:ŸJbÔTo·ÝvéÄùÌ@¬óµ`áëw·FœJ%e9 çÏà‘g‚WÈ¡SO;5�wDÖ dÑÌþ¤�ΧcܸñiX’)%+ƒœ24*Ù 2»Œ^?ãžýŸuy›†·çɆ,Ñ=†„¹áQªÁ\×`FèíËúú"ÇQ÷ªÈ.æÜg°Dì· 9‰'5Ó7÷+âüçOïŽ]Fïh5Q.€‘ˆ%GOô‘ƒ²dK¦É¢¾ðœtž.Œr†)SnMy;~üølº ÀïÍ DYñ°ÌYf¼y×ݽЉ“©WšT}ë +‰À/ºÔ[Ëð¬{{ÑÃ}÷Þ›=ad¯p¶r”Ä’+>wåUWe)ªH/`%ËSV/¾ˆál]’'EI¹¯‰-�jôèÑAŸÅ’¦ôÀO#SI»i¥€'oyÒ3j~gº}ÍÀÃYáÔ^Ï;>29¢o‡zâÄ]3¹ýó}ýÙpf4¿%SÑˤll¼4iÒ¤äMo Ò$�³ámjÎéÅ“B·Dœ¢·9¥ì¼FþËÀ’³qØ"@5rGÓY€Ñ)!‡�ƒÃ�|è£F¶gVõ¥—d“Ø•‚þ�Þ’Ö×õâ{gÝdø(¨¬–lë ÿõõÙ=¹ÎúéXô96'Õzn  ô7$oÊË/ð—µá Àˆó{‰¿Ì3`ç„4ìÛ)3N‚oO>Ó\}ß}´ˆFå‘Uæžt+>”¹ˆ¯e@sÜœý©ð’””(§Oñ�Ƶl1¬§E�fñ3ãlmö¢÷âë£xÖ—¾tÔë£B³áa7Û›®Àko£r¿ž~w¬?Xáð£­.¢ ‚ŽJíÛ�dàÛȽ�ì—¬öºlzV{òØ*0vgØ]²ù”È*]³Öö #¥ä2íK§�.ÀgV½‹ƒ.¸à‚´µH §È16  *vžÌ.6ù+(ÔŸQ}çŠl÷L²�|ÇK½‘�ý™Ç¼®˜¦ãÈi�Í‚æŸùÌgS®9AÀ$4`¿Rch´nùÒ½5-õšD¥SëÃ0�êì¾  �ƒ~Ð�¥‘u¿*”H_æKÈôg½ëE‘rHPÜί·îx CsÅPÆþ~çÔ;²ÔÂÛž8¯"!RŸFÞ4 ûÅú ]kµn%{0!Äp’:¯Öžpúô§>�†¼¬‘Až×–3nÏûÛ¹¹”ÉÚ‘Á¡'�Ò°A1ö0Ò—?ˆ\k¦j}œ  ¾«­Úª)W.fÿï ÇÚ΀Ø- 3¥Ý š¬ o~ðV#%”º\tÇ;ïÞýÝÉ_xgV(˜eÃpž°é„ˆˆ½/�÷ÔýõÜs’f==+©J@I4DÆ›çœ@Äs™3?ÐhÔ¨Q öÈ`�)†gdeuwÙ%ù�5%æpæYgf; ƒ�é9€A ï[�Œ g�¸wòI€htv±L£Óÿüç0Ù}=@>¯Ft¼†çš3“·�ºà]¥Úí€øˆ#>žö ¾g;]xÑ  “™äÉGÃRB×tzFO~‡^€nò�Žàx�7>m5òï�v¼Ó~ ž$ôà{.ì½öÜ3äøv¹¯öäïaH9ëø0Ú)ÎP„}©’*¨-»0¨töδ?¯Hý:,äýâ¼ámò&[D€ÝþҲ픤‘—W„]*3ØgHÃÈ`ÀK£–p@•ĉ¦2d8¨Î�´qõàx`®0f ´’å¼ð C™¾àd¬3À^g—ãˆ(R€–’Ÿ®¥oîÓŸuº~~£FÆ¢&åÎz(ÉsÆeŒ‰Îà-N2MF…¨½sÂx´NͽrÝ^¥qü¥% <à¸)Q\2ßHÀˆ ÔóÁš8Õø†½ñÆ›äÜñÈ`®k0#{θê‹çÜÝvÛ홾ý·¿Ÿ—=ϼ.˜\*øÖë{]²H�º ùÝ YnŒ¤ß@)ýA¾;?À€%¨*M›:µ¹<ä¨RB™&z‘EœÏÞŒÖÛ /O#Û¹å@)•ô¼žŒÖ>ÌH#&[¤õ¦¿±)—±ŒP†/9ƒ�É-g]6 ²™-â¼à#K&]’¥Ë²îœuŸ1/´’‘…çèOÑstÝgŸ}0'{ gŽ®àX bàI2\t•üä:«½œ™TæNè5 &bèmö‡È”¤d$¢�ÄV!Ø!ûÛߒ޲59µ@ ŽÀèòÈ´ôÀÛQG}%3ŸÈ ¥:4‘Qhr-Ý8ÐkK€D&çØ1ãpdÐ×(À�¹‘g µÚY ‚œôë_¥^¾‘‹ûôFôâØ@¾÷ßßM0ŸLæ¤}ø€�döêw0b¯­¶ [¤õrŠ­rÚø“Žæl=63tYШG·Êæäñœ³-ß¶UêeeSÊaF…½*è€lÒí±Λ,,÷ØgŸ%�ïï }Š?b8ÑÎZ:‹d†û9JL”·Ñ2Ê€I#ÏÕ?Kg·ÝæcC8�£G¯™Ni�0¢cØg²ÙΉó¿r8óì N½~pÓÃn*yë±5 ÌȬöYò èæ3JÚ¼•–|’‰,SE—-ñÞêJ‰«— Œ€§ì.ÍøÓÞßÙÞc±—ȈvÀh‘aJYwOû€Îß,#ºo Êø¼>Î[ÝÙ¯2ŒØŽ·…~µgø`ÄO¡CØ­€UAHhdðÕyŸ2å–ÔËtóZk¯5÷­m;‡Ý<:A«þFøÏžð}Ž;îØ´��žMB/­vƒ¾·«®²jê)òÙ f °ÇK–™€¢ïÉÉ‚©Î%ªèBëUJ-@lZ<ü¦‰QùRø@°WЛ¾ΰ7 €+~—a©W›Œ0Á½�<ò“)w˜Ê‹àrÌú<[5{ê Û?r°Ìo5 ·¨€Ñ€�ñ�¿ ð€`0R¢„&fô0óE -Â#rz'†¡2f̘@7G$âä@rŸ E�o{ †14E{#þþD8¬¢Ç”(ƒ_iôXIÐ…qPï #Žqôâ‹s²‰~I�‡T¼qOH/ã“âš3ç…Ì\éÍ|YR¸ ˆ¾¬·\OñhÁóþv^匂nX(;†;:A¡_Ѝ¦×ö¢¡ëFÊl(Ù1ç…‚¥|96>ã�CúÍ�0#€Ú„¿èxO€Æþ)‰û{€Í9R$ Ks»" ྔ¤Im¦x€³›Ãxº&@†P‹WZüÂù¡°(6Q(�'¡ö]ßjÕõ¸0èþ„{`“U"zìo„¿{ijŒž€ʬ]PR3gzMúä¤P’"ÁVÖ¯× ƒD3l¦Ñu ¢µ�‡À7‘®é¡�ðpP†E¤Þ:¥ËŠtnëæ3â3R©Ejìñ^{ì™ ‡(´óaŸ‹‹ñlÞ"i†rNo3Ú0ö„ÄX#ÊÇŒâPpÔ�”¸’tdìø”ók�;ì°C‚j€Ã®oõëë:{ª˜ `Ä0£À• É"q–d‘¡…†Õ€º5G¯•†�ÒVÎGë,)õœ�à²LG¥m®oí©¾E/Ç:ÿÕº>z=ÙON‹sãú7ª$­¼.Ýy¼yòMÙ¼{dì½Ì(¯›]ý u]- bp2Œð_´}�ãöð¬=ãŒÓÃy›<ë<-’ü/õ^Ï:r•c§d‹1$lŒ¦(‚×�À5ÀÞ}“/‚'È{²tà 7ÎÌ:¤”)šO‡,W½þnŠsúXúd�—%z2ð·9ظÎ;G°ÌgÕ¹–IÌæpé‘Cns²EŽ�Y²É�6OF:÷Τ¥?_Ê¿£¹¯Ï–¡oÍ“ÃÅÀ.²ƒ sŽ”îMDû9ÍœÎ%ÇiLèùÞ z@Ê©~6d™¨®¦¥L1ôJB;42Ðí1¾¨À h @PŠLX' }´ê 4´€û«ÓÁ¦gÈ4Á‡øpΛ|QªÄ@ø‘‡ò9ä¼`ˆ/3ýDÎ$`D–›ße—]–N÷Ý{_êÀ© LÙ#oä [Ð\ù}û?“NÇ“Ͳ÷Þ{gVÊøƒæÆàN€á�€ òøDF�†z"zSqdÝ—­@O: xXàlÝÐ÷l 5ÀÈKHÐÙe—IgÉÐçÎÈÚáôn{¯Õz믗Aç‹<°ãd{íüÔiw&¿ü+t‡3èL\V� °È RZ0’‘gŸõâ´’-�†ŒÀ#Žˆ·Æ’?ãÙÆ`Fæï ¨¦&ç—óÝ:'Êp†åß㸤¼7v|�»fØi(SØè’·Ký*³msÈ™ñÀeA4€zFáIJË�K¥@·Nƒ ?òÈOef)îâ¹%i\®“�ø€> oÃüB×^”�žÑ“ßá%gÿé�Jï|ücŸHP…(v`Oî5ŸÁ‹ä:]ñ—òìËŒ 5Û Ìï¥ø ¾hÐ×Q†QŒ|]tafµâ6=²jlho�»ôÒKs_Ft �£Ôù§þ>3ùnθ³PÃΪ@—vÙ”z®�Âfï`äÜ[3?TÏ* �ÉÚÁgdî¨Q+eÆmi¦�߯�µsÜ1io›+[/½<Ë×lÍ}ÉÌÊT $m¯ØÐ>ÃzdÿfÅ@øMgon¥GÇÐÈd·µü˜Vk�´¯î�ºàûã�ÿEú2?wŠ …žŒüú¶èÜ�â~Ã9QAA/Ї£Ã:üð#2³S€Õ> ¥Q£¡´0hÄ€„FÔ¾Šã¹RšÊl~X—ˆfýË9gÇ É”V‡¥&2âr†9À$‡Rë`SÞ" ßû�Á â,C·õUð½øÿÛ;ï0¹ŠkÛJ(çÐ(¢„� �$09ØälƒÁø®ß÷®ßŸï»ï^cc|?“LÎÑ"J@¡ˆ„Ê€råôÖo7…3=£îž fߨ‡žsNU­ §öªµwe[^˜õäÀ-éýñÅ�Áàer"îG C°“ÃGžL^ dÎd.Ü™; ™Á"IÛK¼¦^H‡YlØ®¹I,¶2I¼Hâd®[¼Y@1�AÕ®]ÇÚåùž·…ÇZ²Çâ‡Å C�E6F. «úõëÙñæ1öGЍØj“,»³ô›õë×Ù}LúÄå€ìÃÕn¨�þ¼h2}SÈ/ ,vnyQòbÛ¹s‡É¤{j"îÑ£§Rì´ ÄJ¦¸�e' -kú4Ï$ѧ‘4CÀ€3ÄÆ;ý:™ 01ôpqã¥@YÖÈ@Þ!|h/3Ô¦ßCPäÉÀ¢ÍÉŸ~Ì“VŒ§›´€D^›\ð€$Ä)eD�FÝY¼Bª°³‚¡L])+}ª`¢?±0°zjÎn oÊæ‰–”�7Æ:FP2åZÏL_„‘0b!ËN&‹œúBßgÑCÿÃà¢/öêÕÛæ›‚íÁŽ#»¦­ dÄɦ¶ƒÚª+÷�‚‡~‡ª"ÞÏÜÆÂ”…3ñYP8±h �–$�;»RŒgv¾Ø�ƒØc¾!aH2Ç1>0rÙ±ƒô¤=ˆ)C9IeU/Æ1sÓõ‹÷Þßàì˜Ó_“ Bmôè)îØF©/t�°K7®’÷ð;¸ç2�ÓÿôUv81‰WÇét,ÐØIú/Øp=D®ËŒSv]q5ƒ(±E¬æ4ÈËD˜oÓš¹ ×EŒ"Æ7Æ*c(Ó>›¬+¤1FêB-*·h¡ŸëŒ²I,01®˜Gˆ�†qF™yÏBxPw¶Ì̵´Óqzç¢:LÅç7ˆqúý�öÀÈfA IaO{2w@ž&“)wÊÆPc;4çåÄŽ-ÏáwŒe ÄsÀÀ×–ÁÀ}ñ¹@šmy™’ Ö’ÞÏ¢7èLÊ;w ’ØceÊÎK�ÉœE $ “4õæ~vÙ‰ÁH‚P`7�22Ø!\À é/ìx\ðP÷âíEݘÈpm³²)/ÊCÚ†vÁRQlAD»&_Ä”™Ååƒ aуl›º‘"!bùhqÀu´;ü$Ê y†|Ã…:ðüdØ…EüëAŸ¤,Ôq�ð‚ég!“Þ¸IcÛ (ˆóÃýàÀ. }Œ—ØÓ¿¨ åÃ% \èc…Ÿ“ÚA¥žÞ,1qEDPGñCxc‚ögêú�)x Ž·e‘_·î!bŽës” #Äúƒê‹r©±Ú×*ÈÂ"�Š[PZ=Õ©>¥±´Cm¡2rª…�Yj-ZЩ]©‚ .\êÀ<ÛzÑ|…¾Ž„A5ÏU¬\ãX,³Á¨`‡ìè÷¸² MבH¤OЖ”×«kñdó‹všã¸IÞŸÂg�Ú~—õCò⺸`(Tà ¿à¹°ô)Ú�çÒ^ñ¹ŒEÚ‚8ZìîQVȹª†u%•U½�ã-FÎAjadÆq« –ÌãôvÖê7ÐÁú,8âõÉÏ\æqú_¼�qÅ‚”6µ9P35¦jÖ¬aØÐO˜C(íÊ")Ƥb›¹ *c†1Dœæ,HĆô)çMí¹É²gú{ª�×k¬ŠÜF”�÷eÉ&Ñè+ ôÆ<Æ*ßíÕœË;޾Oû°›ÊØåwÞ É¹³àüÆ Jô3æÚœE.ïîMÍ¿©÷gÁqŸêw¼‡4žôN`G–w{C½wX˜óŒlä(àÔ©S�¤]îP0mHoòNÖ!›çÆk™£ÀŸ²b|óþå½®<›�&"pc>¦ÏШ'xƒ;XÓ~l`�5X2�°ð'–ÊNæhÈd”ÌóàÊý(Âxï³9Ćãœ9‹)e»víôž•Ë4± âë‘ég|Ï2¯C4îV=èsôsÖEÔ£"$Þ_�ò¸’âòÍûƒŒ¹ã�6b=ÄXl™Pæ0æW©^›Õé{Ô7]b퉡F{Ò¿QìB.s‡DÛƒ5kUÆ ñ„ mßsôS¹ª ´/¸©Ztý‚÷Ï¡�©í�a ÞtåŒßQŒdú!e‹ý>õ¾ßfÏ¡á*Ÿ\—•´¿Äü©#y�¯�•›>ŽJˆ9Œ'¬/y_�k$«¸—¾l󲩀·j|é>�#ð¤NM´îbC7¾çSœ\ÈÚˆ<É»¸Ä3 e)}‡q ¶ŒSŠAÖ‹Œ'æ Ö?äÉ::‰gqydò·¨fs•@Ë�!÷þæ>ScWÓ1¶[&Ï*ËkÀ…9 õ³QãL‡ÉhÍDBý:gÎls›ÍëÔé„mÉØã>6Y許Á�v§¿1ç±QѬYskÛ8Æè7Ìw¼£˜wÀ¢–Úƒ1Á}´9„8›ã´'}�ï �x_’ãˆ÷Oœ§èWö¸×P?d>€d/øž±þ¤º‘?kn6hq_d=bï4••÷/e%Ñw–k£ˆÏâegóžòò,ú œì  ½ÙÄÄìPüÖƒuùÅ>Ç ®«l^N˜0ÁQ¸ö+�Í 6 ©Y¤¸îdþâ�F;@lS¾¤�\yçòL'ŒrA­Ý_8¼`cd’(« 4.€É—…ù�/“v&©¤åÍõ~Êw{yF,wœˆ2);ψ†÷ó’d‘S)–�g•eûÅ…-ŸÔ�¼’ µ’Öñ¹¢D1W£Î]ì…”)NìcTðâåeU½:»l… ±Ã•3|´5yÓGãøHÞËKšÝ`ˆ’guª±~u×=�$];Äþ�ô£TÚ"‰¾�MŠí@91¬È‹—1eÌ&eZÏLŸ #Ôç�<ßvŸQ‹*..©k¶;zŒ›¸ÈŒã†þWQS¦ã±²Õ+âû1ã#›y<öÛLç$ú‘0‚Db§œSÇòòòlœSÞÌÃéÆ[,o.Ÿ<›TýŒqÆ\Áàwæµ,¶³)÷q?ô♦X¯øIý²­#;ß_|1×\®ˆeŽóŸ´ $2ñÕ&ic—:HФÂ(öc®¥-¹�Þ qþ*®ž\›œ_¹¯,çׂe‰ùÓ!;ÙèåÝHÙË*�uf]IþÄ3ª!ò?9^ l؈F½•r1Ÿm'¥±Arë-·šk.ëîlëDù*Ã{Á £l[¶’]Ï ¡3ò®eý’ ¯øƒÍ‡¿u¦y–´¼%¹?–™ORÄ+›&k~H¥ýBŽåÊËlʯ-ˆyÅŸxMI>cÌvUPÊ`ˆdƒSª|L®)iÊ–Žè9\ãÍób;ÇÏä½ìtàC¼bAŒpª ²ê¢Ú�gò|^ޤ\^̱b"¯ä‹.YÆâ~Ï´žÅ=#ù·¢#v¹X´“rÙÑ£¾ñ…I;ðSÑe&Õø[e¬å&Å>Èg¦óxòž6ñ‡ÿ/˜Š"Œ:)j9 Ž÷‡sÁç–÷ÿÇqFNá¥NZ g3·Å2'1,IÝy)ÜØF‰AŒ˜×ušq‘pK8Aó�uQõ”f¢¬`±+I½3)W ãTÿŠsM.8e’WòšT¾‡Ú¥<òLæÿcýýP{²öLõùtïóÊ^êß“É1r¸~Ä}6¾¤¾Bõï­ìxÄòÏŸ?Ïb“áÞŽâ„I©Ø`ÇÆK*Ôgrà÷蚄¥8ˆJÄ{ùŒí˜IûÇûxF¦÷qmi¤˜wrŽÏåݘmYâ{™ûâ|ëÎw¸ö"ã³Ï¦™»^"(©oAŒ¤Þ½{ç´îæÙÙ¤ˆ÷$Ë—Í3ÊãZ'ŒÊeÏÃp*%H€ I¼%¸àcŒuULÄ'à´ˆ´3ä³Þ¿ß !Oj¤Áž�l`gïýÞ³…'ßhÈ�!æš–í³üúÒC€…6»³´Ï‡ãÆZ̰ríÒ¹«©+q+òä8Ž@E@w.3 ÞZKʼnëÚµ‹N¢=teE(cqeøF'¼MŸ>Ý‚C³)G öÛoÿ¹¹ç²!Z\^þ·C¤b>Ž6•.wÄæ%nÚI'òý¡‹ý·à„‘wGÀpŠ@ Æf Î>Øø2�àµU1Ažqê î7D%˜w:ßõªˆ�×9{Wv²—â,]ûh;QŒÀ¨ìòy:rÄOâ?àžF¬ vh‰3cø¹ÒyÎŽ€#àBÀ”à ÀLÐcbã°�e± +©2$Û˜T¸†Å‹ÛAÔáìgÛá&¹(Ë+C�+Bãz—Fi¡-À7ë{ÎÄn‹1›*BY+Bœ0ª­àep� ‰@ JG@g��9¤¯Bº …¿7'W‰£¾y©«%“ ÊeX,t%E EÈ®™o.\1Hs ‚YI«õ£+6Rt…)W‚€^!GÀ(3PCâFËIÕªU 5jÔ°Ïr.Šgç8Ž€#à8Ž€# œ0ònà8Ž€#à8G�={ö„mÛ¶…½{÷¨,G…£�®êÕ«jÕªuÄËæpGÀpG *"à„Ñ�¬Õ÷îÝvîÜùý»µGlÁÍ»N�:ö{õêÕP󃆃„]»v‡­[·ês§vz÷kg—E{m»¯~ý¢î{öìùùùaÇŽ�a·~?xà í “_ƒ† Bm=ã(„ŸŠ�(ë·«¿ {vï õë×ÓOƒÐ Aƒ k˜ìر#¬_¿>€3íQ·nÝ ]Þòncǧ¼¯Xù1Ï1ïmÝºÅÆI�5C‡BÆ +TAÍÏ;¬¼{™Ÿõ_Íš5mL3_Ö®]ÛæÎdÁ�Ôüœë¼Ûƒ6alÚ{Hï’ÚGms-õL§Ú¾}{X»vmX·~]ذa½æº£C§N�C‹æ-Òâ’ÄÈwGÀpGÀ(}œ0*}L�è!{V­Z¾þzUøæ›o¶üm&çoÚ´i謅wÛ¶íB³fÍŒJôÀ�ýÚÕÝÖ¬YæÏŸ¾ùö›°={¨Y«fhÙ¢ehß¾}èÒ¥khÒ¤I!ÒcfãÆ añâÅ–÷:ûöí D´m×6ôèÑ3´jÙ*­��,Cyþ¾hñ¢ðÎ;oË(Ùºtîºuëºw?Ö°)Ïrdš×Š+¤�'Zy[ ËcŽ9&tïֽ–7Óz•ÖuŽOi!Y9Ÿƒ*…ùî‹ysäI“ŒL½âò+CïÞ½+T…˜ŸW®Z¾fŽþæk©iò�”oܨ±ÆtÇЮ]»ÐªU+‘*õPî#1?—d^§=¾ýö[{16yAâµlÑÂæÙ6mÚ¤%¼7mÚ–.]fÏ™>ùøãPCDÚYgžúöíZ·nS—€äÿã8Ž€#à8Ž€#Pê8aTê�™îÚ½+lÙ²%¬\±2ÌýbNX±|yبÅ÷Î�;,Dƒ C‡öB×®]CŸ>}lñ�Ì?*�6oÙXØ/^´ÈŒ®Õ«×„ýû÷ÉS¯^=#(ú÷ë¯ÝÞNFÕ®]Ç*Êò‘EK—, 3gÎ +W®Lí(Øg÷¶nÕ&§üºŠ�!ÿвã?cÆŒðØ�šQÓÿøþ¡~N21}¹àËðÆ¯›* òDZ=¬ÌmdD¥K»w§”b¨üàÚÑ®]{ÿ¢¨¼Ò•;×ï²Å'×|ü¾âØ·_ˆ}oݺuv1êÆ=jT%e‘6mÚ¾úê«0yò§á�·Þ MElßsÏ¿…SN>¥,²Ëú™`‰Â;kö¬°|ù²9ÂüIbŽmÙ²eèܹs8¡½Æ**”G¤òžŸs�×Ùt@Q´J¤õ\ºdiX/¥ß1ï°áЂ^ï¡c5‡µ�Ä;(ÎI(Äx‡L�:5¼ñæëÂgW8íÔSÃÀAƒÂñ}�™ÖÚððGÀpGÀpÊ'ŒÊç2ÏeÍÚ5aΜ9aúôϧŸ~¢Eú†Ð\J" 4ܯp5Cõsì±Ç†K.¾ÔÈï%ì$/X° ¼õ¯7ÃŒ™3‚zú®YóæF6­ÖNqÃF� �ƒÂ‰Nü±Â.ù´iSÃgÊwÆçŸ[^ì¬tíºµ¡º>Û´iN3rä(Sò”9d £5"Æ  ÃŽ?¾â$ ŒÞ|#¬–,//Ï£”Õ*mmiÃyó¿óæÍ³ŸæjËK/¹4ôêÕÛŒ³h ¥½¹~™->•°Š•¢ÈÛwl·ùƒ~7aÂGš[‚ þÓÔïz‰ieÄHYT$FS¦N £GÿKÄDÓp÷]w‡“N:¹,²Ëú™¸“~ùå|›'?úè#›£›îZ;DìoáßAÊÁ‘ç�²9)ìGb~Îu^·M‹•+¬žï¼ûNøæë¯¥‚lnÄ›{÷îvmºì²Ë�Jºà¥\öv„9sç†75ß-]¶Ô”ªlrŒu¾©*³ßopGÀpGÀÈ'Œr†®bݸpÑÂðöÛ£µÃ>9,Z¼0Ô”ü¿¯vd›4i,…É6íÚ®0B w‡«vu8í´ÓM-Dìv“!}yìsGÃ=¢uëÖ¡c^ǰK;¼3f|n;Ä3' :)\ø“‹Œx�yóç…W^y9Lûlª¹³ñ¼~Ç÷³X@_-ù*¬ÁÁîrïÞ}ÂM7Ýl„Jƒ¨l:R(FÂhíÚuV'F¸¯à~—LœÖƒÒŠ`¬¨ ZâÎ?¤Æ燿_(*)ÌTý!êû8NÄÁ0"F8ð<Ô^ɘÜ·k×. þºÿ�°|Åòðñ'KE¶Yî�Ì�®gÏžÛ#Y^žK�eR0|öÙ4û™¦OH»Ûoûyxâ‰FæáBžóM>+“ßã©Fä >$ž .ô+þN½P8QOòM&®‹ø¢’#ž ×�­aªà·†«¾Ç°¤ï ºà¾\ð‰y'Û5¯ C6K&¶eHG¬‘wʰÝieÛ/wÎêÕª[ù¨;åãÞÒL#°gÊOß!¿ØßÒ••û(+÷�ïõ¥xõ¤¬Éûb½¸/öGêKL¶/í�DZ¿nܸÑ\®¦Š¸�à„1ºàü ‰'4·ÖF�ÛskÕ¬õƒûÁ*‰+qÐök|¨Il.#/Ú?*n b £iÓ¦…wß{×FwÜqg(’»¸Dž`ɘ�Ô!Ør�:u�Ø*͘f«V­ ŸJý4yÊdSÏ€W_)‰PØ€9ªÆi½zu�0:U$$6DoyÏÏô© ä4¯¯^³Zï’iš«&…qãÆ…½êw´õÈ—Âj•$ˆìvíÚ‡o¸) :ÔÜ•QX%ÓÂ… Ã[£ß ³gÍ’k£Üغ‡k¯½Þ¦äuþ»#à8Ž€#à8Ž@Ù"à„QÙâ[.OÇèAáó÷¿?,w²/ñŠzõì† n® ÄÓ§OO>õO3ŒÎ9ç\F§‰<(W‘FFôç‰'[ä¾D̈N8AJ–NaóæÍR Œ—›ÛܰfõêÐSÏÅCiD¾ìèÿõ¡ÃB\\ŸãÂàÁCB½ºõD\-2²‰û›JítËM·„!C†ZÜŒÜ#™"a´aý+„Ñ±Ý Ç0˜Ø‡”bªºÅejÒ¸‰¯Ö¸šðw\/ êˆ÷]ïbL)H…Ör§€H ˜+;ñiÁĕ ÂhÂX#¡ [­ Ü<bd«òÀ %5kÞ,´ÔIx7–žL\¿lÙ2|_A8gÎlûl!w—Ÿ^õS¹»ªU-ÔU^͵óÏý%1Œ!"ÀgÓæMaýºõFŒñ\p!Ž$C}o®2·S=q�L& g bÊ�± >¸ã@ ಳQÆ"ñ± dP®�eæ¾\ð‰yÇvÅ%ÖJþö|'ÕB#�Úõm¹’LôyêFû¡Âà~Ú‡ î¸Ë,º_%ï+éï`CÌ­õë×…="6êŠØhÚ´Ù÷ý â'Iþ�'e£¬Ü‡ ‘ ïuêÔ¶9£�²&‰1ú+1v¸�d�Fô]ú#ý�úÓ¾´ÖÛ.¿,�IDAT?qów⟭R›/—;,$ó˜±Øõgžq¦æbдM47Ÿ§‰Ú°¹\Õâý<âf‹\’ˆïƒBr‡ÔJ´ e$϶mÛZ_-XGê £éŸOcÇŽ1…Ñm·ÞnJþ^T¢-éÃÄÍa¤BÈâz[š1 pÇ�ÿH*£/­!Š˜ ;¨¯QïY"Fž~ö)âð)ƒÃˆg™®å5?3w7mÚD1„æä4¯ãr÷Ú¯™Ò•rÓá˜pñÅ—„®Š‡ŠêsµÏÓÏ<­ya—ˆÄŸˆ1ˆ362’‰xxï¾÷޽· Óp¥¾õÖÛ€$/óßGÀpGÀpÊ'ŒÊàòx<ÆÖìÙ³ÃSÏM” òwÈ ˆÚ™�J?ÀÐíØ±£+�F�öÄX¡MWê¾R}AâPf0�E�0]„qËVÂT¤iQŠË,ƒ Ü | LjÑC_#ž y¢ÒÁm´‹âÞtPy‰¿N”•~ ‘¹Fãw‰â‹}£û(+ß×RnÚ¬iÈËë¤zv0ÂÒ�û˜�f�p‡Ü£üŒóüümvzj7ú÷õêÕÛò¤-éϨ -Z–‰°Ä%í³éÓD3òékÙÍDü´hÑü»xjÝìYÌ_”Žþ éQ¸o/'<¢úR=…-$mñZ0(4ã‹va ~.²Šú\pÁOŒ.fð íqÅ}ñÅ gÆ!sÂP:—/�D»Q.>U¥@ì1b¦µR?¡-?ýôÓð—¿þEm¼Ø‚B3wŸ?ê‚Ð\XÑîãËi~¦Î¼3‹¹ÌëÌ7�>þ¨‘ÔŒ \‘&E+d<ý˜÷õ¤_òbã‚OÆZ21g}ðÁ¦\]¤¸zÄvºó‡WŒ%Ÿá¿;Ž€#à8Ž€#à”'ŒJŽáꌥíRJ ~a÷Ÿ][Œ-Œzêzà�f€�8ëlsI;Yñ=PQ${üøñFì *¸óλ©"“ØÙǨ~]Á–'Mšh„Äʽ¿¹Ïbƒ`|"7©þü'#AF�<ß €ú0#¢ÂèƒÞu$ûŠ+¯a4ÌÜÙP É„�»L†-J b‰ ZI*|bÙ0²1âpyßêQ;\qÅ•FaÄîØ¾ÃÜøpÿ÷Ñ83T¯¾új \‹{ Ÿ§Ÿ}:,‘Ñ1ƒq½W±¤vìÐà2 Po !~Òe—^nn„\îu3eÈ·W4ˆŽ† …."íJá5bÄ#€bYù„Ôzù唋àZ]�](RPrôè!6 G…j¦Ö@%†Ñ�! �KB¹‚û õ;v¬�®H¿Ú¿7¦=¦¤¢?¢Z;qÀ@¹¨ 4µùAØA€ï[o½eÇiC UÓÜ´JŒzŠáÃσäÙ[e†4ÉŸHpÍš=3¼ÿþû"Õ› †S¨p�‚+È©Ÿ\p¡ˆ§_ Â¡×&_È*ê¡q °O†ÿ12|QÔ@8`ãÞY’qøÅ_ˆl˜nî¦ßŠ8‚”„‰Ù!ÒŒ²ëlÏ9û)1ºÉB¿EõIÁ©a�1ð’€™kZ=ÅåyÞHÅënuœ­þúÔSO*Ϲº¾¶áQÆ8A·Gõ…@¢ŽØE¬’®9±lŸìàC¬& ôÛnÿ¹)¥ äˆË�{›á§Ó™ˆÑr×/S† Æ §ý<øàŸ�h€@@�¡(»Ý UÔ#àzË-·šê 2 Õ˸qZÞ>(? 7p'#p9ê0‚X£2J&vã!4pÍ�$@¥ƒÒ‡ØR÷¦m(* \A0Ž1ÄQÖä’p;�<�,x]®(œ®6¨< –É݇~Ù^ù@R^¢~aÞøKeŽÿ‘rOyaĽ×ûD&TSyQz`Ä×…ú㢗 >`�šELJÂW&Ú¢¥åÁhÏËË ?ýéÕ¦¤ƒÔ€À¢®SÔž/½ü‚À%¡±âƒ�[}JÛ©§H>È¥AO 'Ëð¢ò‚m.‰~ ‰E{“‡~„‹çáAl1H*TRùùÛ�˜ãd­ë®½ÎÈ:ˆ�?k.£ÄŒ¡ny;…ÚrGCé±MDnx�ˆ×^s­ÜSæÌüå#9 ò¯ÕwD'c†þJ¼4@\Š0øq¡‚�2eŠ ËD1W@`CA2£V4×2ÝÇïÝÕïŽW¬3HWH›©Š¡öè£�X|0E9‡k"ýâ ÷4Æ÷\~ù¡�½äx/ˆ'ÊH]ùs`q‰>F›3†_{ýU+\ô³3Ï<ÓˆŠâîÏöo©v•ë�Ú÷½u"ù‚î½÷ß³úB <ØÊ j•ëü !ƒë(„O.óúW"ŒÐÆm ÔOïÜÎÏ(¥ –ßW=·åçÛüsªN@CIEŒ¢d‚D¶˜OR»ñ Ù~ËÍ·ÙüQWqžŽ®uôÚ?y¯ÿî8Ž€#à8Ž€#Pz8aTzXÑ'aXa0a�$ )H†÷dprÜ4ñ�Øé%Ø(12ˆ®7ñ�0øß~g´Ühê†ë¯¿Á ~Œ(\�P�`,csò¯îþ•˜)#qrøÛÙÑuž” ¸òp½ÅŸÑÎ=†+Æ'¶]xáEF´ ¦9ÒÇ#G“F‹xA¤L¥Eaü N7ƒX@9„�î@W]u•¹g ÁØÅ ·5Ï–‹ÈK/½hdFG¹£�rÊ)i #4¸½`ÔCÖA7˜›o¾ÕH#˜H4�K"A~!ÍrI #úá(€Ô³µH#Ô¨'pQ½±G�áç·ÿÂÜö¨3}¥a$õJϽ̭•B ©~HmqQÁ Xä“ >1H;Ø@¸àâtÞy£Ì­ • äàk¯¿fd"„Á)'��7¨ >ùä#·p%„0!f1š æ>?ÎÈÙƒ˜ÂìÚ«¯52%\Sê¬Ý@ø)‹Ôž¸ �'5ô©¹Š53aâ#*!Œ0øQ5¡ÊxìñÇ-–˜A² >eˆ)}›³ä²8Z.™5jÖ0eñtp[(CÂe[#=5׈³Fˆ@ë$òn_ÀÕñùž“ËØ&SŠáÂtÆð3M­„«%}o¹æ .\>g£„oJ‰ÔÞÜÒPСœAÕG;Ó Rú�þÃT[�Êýû�`åá”E#êÊi�­¤Š"+Äа˜"Ã'‰¿¥Óñz>™3!˜  ¹ˆ³ƒB ¼ º¾%ïÍåwòc<Ï�;'¼üÊ+6®wŠlÜ©8s»wí¶ö½òÊŸŠthdÚ¦M›Ëu~&®][½#,ø2§yÂè�¼ß#Èhú ¤)õF}iÄ;©zõjFVÒÒ)¹PïÑçQ¶¾òê+F°C43óDæB42$Û?—öð{GÀpGÀpŠGÀ £âñ©´µØ;ë×!ñæ›oZ,›Ú2Ô k®¸ì ~ I€"Cx¼(SPœ+ƒŒ€´j(”0º0®qwê,×€»ïú•¹dEUÁÃÿ›sÄîÁ c×þà�ƒ¶»¡@,â¡ @Âä5Üa*C*-Âh�Úâ¬3GXý1܉ç6(“þç¶÷ />rÙ£�P"%Ó¹÷ýYJ%ˆ€öí:á’NaïY&•mÊóùAEó»ÿý;å?ì{‚,^[’Ï‚„*�[DL« % d§%Aj@¡pºçW÷1†ê€~š$Œ0Ü l !Æ3pEA%R£Fu‡5DlñÃ)d‡ˆÊŸ > ôõ¿ýí!3ØiâQ]uåU¦ÔB�©úúk¯™‹'§ÐášF pÜG¿=Úê0gÎl#®®¸üJSPàRøµ#Ü/çˆÀ!ž÷ýúW¿6¥ãçpÄEÁ6ˆ±‹&Nüëƒ?ˆ ö#lÈ#Í"öcÆ|`.qg�8Lj! iˆB"ôƒÞ½{�Ñ„ûåV¹@A"¾ðÂóFŒ�7r¤a�:p…Æ<„õ@%†"Œ`éÔ£âùÏú;.d(Hh§¤Á�Z‡y,þùä?�0ºöêk¬ßÑ–¨ë’ ä@t [§y†gBª¢4«[¯ž©�€–kZcÝ�+%$DAÂ(ùÜl‡4¢,ôÜÅR},ý)yÙ>;y½FR6¢r#fíaDþ¤>" ÁrR„z—çüÌ)Š)ÂhAÈe^Ç•ŒXy™ŒuæyÔ¤à¼PøÍ›?ßXÜ Q ^¤�„ÚˆH&{i. ¿=­Ø|ßêÀ…>êǸP‚ ä&Äž¹g&oôßGÀpGÀpJ'ŒJΊñ0ŒN–áhãÉ“uŒ³Ü=ŽÖnüŠ­‚ˆQÒºu+±ÕL€›¤JŒ7 Að}úô1—\&ØqÆð'˜/„;Ѹ¤M™:9<üðß,à-&„RØ|rD=ÄsÏ=«({Ã…ßF¸•T5ˆ/£FŽ2BÃcuÍx‘:1V -#Ûå—±•L™"Éë! xvyF¸výâw�JcëÖm׆r¼)—=H¢Ÿ›Kß0Sq êIFÄÈA‰†« ê–êCI®aôÛ‚ÌáðaLðó±bÕÜÿ›Ê—< ÖsÏ=ÏbâðwÚ—4T Er6lÔÐÆÀb¹†='‚Å È ÔE¤5DdA¬\¹ÂÆä* «ßþûoå:xš© ¨C6‰ Шu&ˆxAa„±}饗®¸!B¼ðc÷ERò>êùèc�š¢r¥�úe…Ð#˜4¤n¦Ä):�ÀÃ"ç>Œû"„Š0îc¾ ßžr]ŸišKáq‰J×Tboõê•r�Ì–0‚¤Ã% ¥Ý3"Pf©L�*(ÊpCdNA1…K.jíì'åÞûE6¸u-J'ò%ñÜÒ|v2Ϙ}ŒøRË䮹I$JÎY"‘P£‰~ ±Îõå9?C ¢Bå”Å\æuæû?üá~#zPÿÐn=Õ7˸¢ |AÁÅQä‡ÊÇ4„ýÒrö¥—_²^›7o±Xfçi%6’Å^iäÉpGÀpG ìp¨ì°="OÆø".˹<û„cœ1,»jGöŸ\d;´�¸…�¢‹ë†)A‡ ž�»1MpÉA…±|ÅrÛå~{ôh#:~ýkÅ0RœF“ æA)ˆÁA\È"Nã">F-J…‡ä²F¬‹a$ÃÅÆ‘Ža”iã xÁ� òååW^2÷­Ûo»ÝˆŒÙüüÌb¤™S›PÍàâÔ¬YsS4ðÜûÿxX+µÑ9çœ#Ã}˜©‡0Ž“ép„HòZ~Ç5ÂH®†¦0’ñý»ÿø?e®0"NÍ/ï¸Ë”T¸<¢àô4ÊðâK/Øñó·Ýz›•£µ\~PV$ #‰q‹çzÃ×Ü–2I‡Ã'FEøüçþß°L„î-SÓî”×ɲ‰=×CJAP¡fÂ%Å D ÊX?3>HQ¡B}éë�²·Ür‹‘(£²%Œ ‚ }Qê<ñÄãý¹¸A(rbc‹2&Ë‹�q…(Aî)ïrÕuY î�uøZåݾ}‡Co ×0b¡Ú!îÒªU+�0¢ÍˆytòÉ'Kr±¹JQOÈ‹‡œ™ñNûB0\yŦ@âï… £¡`¹¹.¦XN×"¦qÏ äPûÔSÙp £ŒôG]åæDL$ÜìrQnÅ|Ëû3c|ÒvéXy°Ú"„“÷öM 9E(Ÿ<Ø\ïêÕ¯W®óó AŠa$ÂèK©€r™×q;{àÏ(FØ'FÀA:zªõ­¥^¢o>ðÀŸ,ï£t1ŒOŒ%#\DçÌ�-bq—‘ˆÚ@�wúuIƒÊ—w?ðüGÀpGÀ¨l8aTÙZì0åeç–˜Dиɪ §(€*ª•ãûö3c éÊÁŽ/q[&ˆ¸ VÇ¡_|ÑÅv¤tw-è÷‰B‰ð±žõî{ï™2é·÷ý/[èï•ñÃ÷øãd,·ø)œ²C\ c”°—+H«+åúƒK†„IeH¨ER„ÇG"<^4ˆÛna¤z`ÄVT£ÛÔEFj[Ôÿñ�KÄBA…N®mÝ¢Æ+‚^$Œ¶‰P³þ%âãÅl!`-1Œ >PTQ®ë¯ƒ0â¨íÒ#Œ¨äcâÿý×Z<ÆÆ,'$ )ª¨MpƒÃ5 ’…:<õô“êÏ“Í=‚~Îqö$â {¿Æ¤îx.æD°ÞÙ+ŒP�ë#�ý#ìݳWA¸fD[·®‡Ž£? kê†{±p˜&Nœžøçã"·VKí4@§§u5µN½zõ­¼1FŠ#‚Ó?p[°àËÒ%Œ¤�¹æ;—´ÎR”@tL”�Ó9îÛoWKá¥xE*7jǵROáîGÐk}Ü› ×¨»¢ÛXÁçUÄÿG1F»@èxÂì«‹Œ¤ÏAá"ÈÉvuô=„ÈÏ®ºZª°Vå:?C¢BAæ2¯CýMŠSb`QTª¸"üº©b�}þùçá÷Rø}%‚ÕàÁC¾;%퇧ޥˆÇev`ÂkrÝ©÷ÇðaÃä®zbèÖ½»)TëÕ­g} "¶·—ÉpGÀp� NýHZ’kT óåJ2fìµ�eq…ˆGAp^âÂ`|°c�QŽ ÄG:sŠäÂÓ:¥ Å14†9ÕNcb|‚â¨pªÔtQyR}üæ7÷ÊUåÛAFqñ§?A­åžB0mNÅiÔ°QX&uú ’KpÝ믻Áˆv�9 ‰D~L¾�Jì¾ã–AÙ*‚‚W2µ¢ôxö™g¬ÌWˆh Àw~~¾¹éLúx¢áNì§t§¤e«0"H5˜`؃ѴiÓÂßE¼q„=>ÇÓ£X"ÎN*ÆO�¸>­�{ÔÇlÊ1Ž»‡œ¹G1u(7†*Æ6 2ƒû³UÀØÍú§ a„!|Ó 7+Ÿ¡æ²D ,T)”eÜGZ �;ï¸ÓúHc¹“`@/]zè”´C„Ѱ”‚ …„N.øàRE,(”w�9(dÎ;w¤*àL{/[ºÌŽ‘Ç¥Žãàc<¯W_{ÅÆÁß›é{Žï!W-êL¹é¿ôeÊ¡„¸ƒ-Ï&ÅØ>'MáúwS£œ­Øbœ¼F|”ME(W­Ze�Á!d;¨Œˆý‚+$×£Z9V³9��´G.w¸ B2uPàoÈOê‹’ —´\F)—¾UFt=úø£a—Úeá©êwì†(† ªV½š@`N=¨ù¸ž>‰;j›¥ÂÂzñâEšÏVÛézwßuw H7e?Ü)h‡Ãœ²Ð^:¸öѧ¸VrB\iÅÈÁ½·;H±{-[¶ÐÉ`"Î¥Ò£gŸ}ÚÈ¡š"Æú÷ï®UsúhyÎÏàŠrröìÙ9ÍëKô.yòŸO„™³g ú£Œ0ºJA¼Qœ‚-þõ/a�bñž _�'„e2ÅÓ Ù�àô8æŠÛo½Ý®…t,Ø.Ì#Œ{÷îÑßêØ˜d,Äy.ùlÿÝpGÀpG sœ0Ê« }%Æî_(‹ÆŠ0ÂØÊÓñæ,ÔOYIÃ"›4»³)wšƒ¶Ðž¨ ÄË0Åh#°.±IpUÁ$Øï\4ìúâjC âð`la€sJÚ"ª¨ÛW›Ï;÷\S ,&ÇT�JÄLºãç§ÚéKqÁ�aiÅbUƱ-(åÌ•È(­Æ2e€âºŒ—Jç�âÄ©e¸Ž@˜ã¶ço7Bm²pgWý˜c:– a„!I¢¼ÀÐÂUç™çž Kµƒ�A‡Ò‚ã·{ÊÇÕåH’J)ÍfžŠMU[±jP¨@ôAb@‚-êË%$ŒèY':ÙbŒpJÚû ÊL�e;eOFò]2ø üMÞà› a”r½ÌbïDwúôév"V×.ÝÂ%—\jnNàÌér|ð¾‘?×EÁ‚ÀaŒàÒÆÁ·ÏaÄi^œ´–`ÁÙ%•ñ}�ka¶dí]˜>ýô_‹EZ¢b,SàrŒf\ÖDωd 6—\t‰�Op%¨2ã|¹AõV™ÓOòDø’Ö¯_g¤íiƘ㙳DΔ„0'Tyã5^˜ Hó¸» 0@q–ÚØik”‘ü8l¹Ôp3gÍ2r“þsªâ>qª§ÿô™y†z‚õÝw4=uT{®ýÖ@Ð?g‚x�ùpLبyˆ1Ì1ïĸb¬•FB¹õÆ›o˜r‡“ØŽéÐ1œ¥Óç:åéô9)ÒfÏ™¥Óçž+E¼·×\Mì¨K.¾TíÕ±\çç!"z‰Ýq˜Ë¼Ž+,õœªØv?G�÷³«~¦¾ÛÍÆÆgÓ§Y=QâA$7 2“9)™¸—� Þg¸LÓî¿øÅ�†K|‡%¯‡4�<åSËu+ã.…bòYþ»#à8Ž€#à8ŽÀ!œ0:„E¥þm‘và9å ¥j”)<Äü`ñŒ«©zõf¨Ò¡Y³¦¦òÀ€~ò©'íô£¦M›Ø½{÷cÍÅeÊä) ̺ɎIÇ%€Ó¼ KHาáj€:¢‡€¤„IwEeBmbÓàjÁß( €@»¸(àöé�AŒZ"�a`7•ã?¨F Øü‰Ç¤G§¼ÎæÂDpðƒR ú™¯˜/ï¸õ”†Âˆ“®ÀüÀhá¢Fþ¬)A\Ÿ<¹kqšÚ±2l1pÛ¡I�‡€ƒü`‡þµ×^5õÙÅÁ�‰`äÍš5³§ˆ;™ˆš"—T�0‚@#. ý#�cÁ1丮ŽK�k®¹ÖT/�,`› a±™ >œV7N±r h/úâÉŠÓVF&„®•SDNPVŽo‡$à3¤Ï9O�wbƒAæ�}ž ~T|5Dn®_�Âa¯úpû£C7—q‚ò„.Ï?ÿ¼ƒ3ˆ{�aJ@mâû|-#™øbÄÿéоƒÅ ‚ü�äèò—äB‰± !ÛTí ömÛ´µº0&1Ê›i¼¦ˆÇžv*˜’F`H…@}ä‘XÄ€Ç寷ˆ·–"`ªKÑF¿ƒˆcŒCqýëŠUýÄÑ�0Be‡r’yB‡9®£úúM7ÝlטQsIRаÞf„Ô“O?%EÖ×ÖÞ g ?ÓHÏ’ø@D3Dá"œ‡Ð¼C„í’.1–_~õe�¶Úb]žXq•åp…tuòïGÀpGÀ¨8aTZ¡ÊÀ‰;(`P”`ô`¸B@ Ôѱßf$vä4¨o± RÇe÷6—ŒerC9Ánþܹsmg¿Žbmp"Fà1"† ;Ãb!á…Ë ñ.¸�£ÓW­Ziy`ðB¶@Lô=îx[èãNC R‚GÕjÜ_8Émì‡cuTrãpóM ,Ò RI]N¬�%øw°œ«:¾*b 2nÍÚÕ†Ç:£‚àcãœõÒ Œ ^ÞÒ©bÓ?ÿÌNËBAf.;RdÔªUS¤D=G�lçÃõ †8)Et¥Žä~î¹ç,hìÁMµI‚¡Ú§Ïqß·N Û܈�‚„ý�àÄ ¤RØ)%E¾Ü�òó·‰èheD†ðI"È�>`nGK³wIƒ¼É”V(sfÌü<Œ3ƈŒôý"g hjiœ`¼öVì•Qç�2ŒG”2ò‚à̸áf„¢†±…â¨F�šÿÕQ?‘yÖ%P¨0†0€Qý—Œ¿¹J^ú“õˆRAZA"�©S!1)®j°3¤ìÂx_)r‰›Ž’¹U[nt¸�c†Óù op­Ãí´$„B€�7.|S§N «Dzâi͘Á- —+‚iwéÒÙ\Ò8jýÝwß1•$Aû™sjj®‚�EM‘Ü^¤„ó¹"òˆcƒ[-„DI1ŸèƒŸ|ò‰ÍŸ+W¬4×9bë\pþ¦4*Éóã½7n0â|Ç}4NÄó²Ô(OEÚ¹šæY\ÕèMýP¶«¾‚^3q}yÎÏÌ5¹Ì븦Rø\ÙÛFtØŸŠïE¿ �A$S¿‘_±ßœçqÆ EÒÒ%KÕOºXì3gLà7]ýœ÷„›�n(Û =9Ž€#à8Ž€#à䎀F¹cW¡îd‡•ã‡1.1b H�.a£N àè¥rÅa'– wNWÃ0Å@a÷ã´±\Ÿ†É¥…˜-(\¢KÆÊ"\_8iíKò¨Fp9àÜâ 4R›ÎE£w%ȦwÞ}Ûv¢ï½÷>s9I*‘ÒÕ¥<¿3—©Œˆ§ÁÅQØ”�7¨¡Øo.>�«¤ÚQúåDS~~¾A>^¸£òÁx_ž÷â‹Ïþ�dü�{‰õÞ{d†XºñcÍEPôêÉ1ô-ì²h¸³;�‹1­€ �#Õ\¦úöík†ñ­éèrH†-ªeÅ`O—0jQß4RÀ]b wšôš~„² ’…ߣ‘ˆÁGÌŠ”¢ ¥xƒ„¡Ðo?ó¾Âž¥Ø@2˜…Ï�Š©‚eY¼xqNø@îÑgQ0LA ˆû'›‘7 9\¿ˆûsŠ”G¨¯ % Œ0LÁ÷)Ü?sÄZAùƒÁÛHmŠÂ wMÚcíÂØ‚T¥=H\�ûãk¢ÔbE¦�8¡°–Th¨û‹,ê«“SDnªý! ÁeË'r e\¢®"Fm1 Cœ%çååÑÇi€Þ¨3zÉ•�xf1Æ „.G̸.¡>|¸îïdå�ÿ Œ›"²7Íùóçé8õu†ª Úõ„A7) Á•ágÓ§›+ԗʃS÷ˆ¨÷Úg¨¸èW�pÏ^Ð…)æ›í'c·[ÆÇ›ª(ø÷Uû—&á�R2m5ÅÉ “µëÔ¾�:‰�˜n´%u#_YÉù¯¼çç\çuÈ-êÊøâ¤¾¹zŸÐÕDTÒnô)ÆãÅ[ºD?çÔγfhÜl0âîÆnÔ|Õ¿Ðåôð|UJJæ’<õeÆóZ›"ž_è!þ…#à8Ž€#à8Ž@Zœ0J Kåû£u�‘5Z´C¤K¿·¦¨<¢«¤�³!¶) .î \__F¤QK‘(GP0T×⟄�À½ÚeWšüyÊT ¥Ö @0jŒÅ¨tŠe[¥‘¦L™¢8G“ŒtÀUîÞßÜ'wŒ!?P"Åë�Ô'n^(ˆ«²GÁU9µ B ¾ê(«×(yàJL(Ú…SŸ Nš5kn¸C‚€ØA$ xÙ+ !+ b0ÄQ5¡.áï»eüsºDþMtÇKÓ–äOˆâC ’ƒ²oQYöȘ£Mi ‚9ã’‰‚AO`jˆ›¯¾Z,pSºììˆsŒ0ÜáFŒ8[}£þ#Tœ†‡á SS} â 2‹OÊŒ‡D½Àv‹ê‰±Nj%¢‚ú§0£^¹àƒÂܹu®–�E�Õ 'TÖ†*#˜G e ¤EL)å–ŽC×8Á­k‡ú:„÷r*ý½‰Nƒ¢-¸B úùoÐx¦¼ŒKNrcüCÂÐhú%e%®‡…¨2,TÔ„ü�ÄßQ0r"�ì©/$)ÏJ&#4N/ô Nä þäIðm\Õ"!Èõ�"ô÷­ß••ùG�ÈúKÕ“9 "�ûc=“yæò;8‚y¯ÔüÉXCaÆ|GL¶Xï\ž�¼'æƒÚn�Úq³\5ùâ�“ÒŽ®­¶ÔX"¸3x£,J*1Ë{~¦ÿä2¯3çPWÆ%¸â Ƽ3êJíJ;‚/c¬Ní:I˜¾ÿ¢é¹çŸ);ÏæJˆæË.½ÜȦï/Jü²Uc‘~Ëij¼¯<¿vÏOÜê¿:Ž€#à8Ž€#àƒ€FÅ€SUÿÄ¢Cƒcã,D‡Ã$¸\‡qÈ}Iƒ»àýœôḱ„˜%�:u²ÓpØ}®ˆ %Æ� 2Ã#›úWÇŠPÚ“�Ú‡2C$‰¿eŠ#ƒJµ×¢E ÍÈOWnŽÝÆåW& �›Pa¨ýòŽ»ì”´z2€!èäW1І<}žò� }–ÏÃ¥hÇq’Ä3Þk±¤\Ç+ˆ/qƒÒ¥˜7.W7ßx³©†Ò]gãKî]Aý/æÇ½‡Ã6YOêÇåáîKW†l¾‹ùÒÿö)®äHqD ˜Æùg7õTÂ�°¬ûå[R¦íoçøy1��ou�9”i¾ŸØïÊr~ŽÕ³~§ùƒ”ɼï;4_Êí.QÇ¢ú]J‰µÍ\F_–bR7K\ ��ú«¨.¤¢ž]Ô}þ½#à8Ž€#à8Ž@Ñ8aT46Uú/2ü°øŽ¤H&€°hç>R&÷™+�\¶ȨÆÁ• ;äØL²+÷k¨ßÁƒŒ0ФBe0P(7FŸ”·`»¢ì€ÌÀÅjÆ�(¸§(YÚ´i­XEÝÌèMº¤EÂè´ÓN3%;üà±J÷Ì#ù]ª=S$ElLjO&åâþâú{T¦×|Q¥K1O=÷ëWt°Þd~ñžXîtÏ�߬g¼7þ½¬>c¾`Äïäɪ¢òLÞÃ5åÑbžäWØ�_ì7‚„\³Ê—{ù¡¬àÃg&)™oyÝçˈkqeEE‡Ë/1»>?N Åš:usd `?dÊCOŽ€#à8Ž€#à8净F凵ç”NszO§N­ÑNrK�òÕµků)Ú`NóÿªÀÅ—%ލDJ÷XŒL”-¸•ẃë"qmZN¬$\Œ®½æ:�b5È܇P“Tå•à ¾à\Te`¸š«ŽðõäT5pc#^¤ñ´p?<ë¬vrn�l*xrGÀpGÀ(?œ0*?¬=§4óh™èrZÆñ-Š‹m‘æþU) €Z—!N5B‰�.™J@AzQ‰°û òµbÚ,–;áìÙ³ÍÝè4·îÚµ[Ú˜Uéžùcþ.*:À·¬¨*)ªÎà]~ŠºÆ¿w~¬ÄaÄ=bn!°;AÒ!§qK„°öä8Ž€#à8Ž€#P~8aT~X{Ni Žê ëT0äT¬›âÜÒ<Æ¿:B˜Ø¥Ë•ä�†Ä \]ºt±€ÁN|¡Fñl�JŠïÈUÒá\+i½ØŽ€#à8Ž€#àT*œ0ªTÍõã+,Š‹‚‚“E•§�÷|Ïî=FüqD8§=ë(›)•§Æ^RGÀ(K¢ºÑße‰²?ÛpGÀp�ÌpÂ(3œü*GÀpGÀpGÀpGÀpª NU™¦öŠ:Ž€#à8Ž€#à8Ž€#à8Ž€#�Ne†“_å8Ž€#à8Ž€#à8Ž€#à8Ž@•AÀ £*ÓÔ^QGÀpGÀpGÀpGÀp2CÀ £Ìpò«GÀpGÀpGÀpGÀ¨28aTešÚ+ê8Ž€#à8Ž€#à8Ž€#à8Ž@f8a”N~•#à8Ž€#à8Ž€#à8Ž€#à8U'ŒªLS{EGÀpGÀpGÀpGÀÈ 'Œ2ÃɯrGÀpGÀpGÀpG Ê à„Q•ij¯¨#à8Ž€#à8Ž€#à8Ž€#à8™!Pš„ÑÿWB5ÝÛe=ŽIEND®B`‚pydantic-pydantic-e28e879/docs/img/logfire-validation-error-trace.png000066400000000000000000003730241526274674700257640ustar00rootroot00000000000000‰PNG  IHDRÐ@JIDATxœì�|GÆ'—»¸+BЂ»»»-V´¥ ´´¥(”o¡¸wwww'âÄ].ùž»�ýŽ»ËåâöþGØ››�Ý���™ç}ggÄ©©©Œ ‚ ‚ ‚ ;"FAAAEÀAAAD‘€0AAAQ$ LAAA HAAAEÀAAAD‘€0AAAQ$ LAAA ÄŒÈ8©©©ŒÈnôôôAAADŽA8@÷&Êdñq R©4Q–””œ’’ˆ¬!‰Äb}C‰‘¡¡±‰‘�DBJ˜ ‚ ‚ ˆœ@�œ™º€\ŠŠŽ�ŠŽ�è551††‰X ñƈ¬#l R©,!!!6.bØÂÜÌÂÜ”d0AA…êr«£{g/»r�º—#œ.ÈŸøipHä®%d™©1#r’ØØøÈ¨hHb{;c#Cª§‚ ‚(Р3‰îMXx¤41‘Ÿ040°´„ÏÃL{g¹ŠÜ“f5÷ ¬,ÌÍÉËRä!¬ dj«˜Ø8;k’¾¹ Ú‰�°p3SkKª¤‚ ‚(ˆð·çBBÂõõõ--ÍaÙgÄ'àaŠŒŒNNN¶³³ÖørO&K  ׉²%÷>1%ÅÞÖZ"S³ÈBX3È–¤ääà�p±¾ÈÁÞ–yAPphRrн�µX_Ÿ*)‚ ‚ )))áQ"‘ÈÚÊ‚š@þÀÁëTÌ^ý½Bäô*ÓÓËÞÜ“1>ÁÉÑŽÞd,²Ð�׌,))0(ÔÈЀÔo‚ÌÇ-À�Àí`AAù 2Q1ða’úÕ2îqd”ŠO_£cb¥‰²lÏ=ùE"$N^À"‹þÌ™3ñ908…„ÚX[ªÿ™�ú*8õA@Êߔ۾)üS^§øF¥Æ%2c 3gÌQéããwðÐÑ[·îH$ŽŽ9|äøµë7Ÿ=!‹ííí˜|vvÚ—/_½wÿa``¶ëÖ­U½Z??Dsq) üøñÓ4OOí@9 nnn ê‚ ‚(¤*HL”Ñ{¿é‚,BFñã!|[*MÌ¡ÜC²H\ùˆD‘‚ðgð'!6.^}äó«`¹¾õ Kç9ADCd¦OŸ½¨\Ù­n�Z®®å»téxýúM^ºt©Z5«—*å¯oppH·®�\J9�þ%÷ ƒ›·îLønÜ­[w?¦¥Ç Ož:«~xn+ºVðxãÙ¦uK§bŽIJJòðx;|èà[·å»Ã«\¶lccDrš§—ö�rÜÜ”øøª§‚ ‚(P§%C¨�f9 Ý "K¶ àÄ›²è¿cYN"ûDDD„, XÖÀ“àã÷ÁÎÆZ%üQ@ÊU/�4-‘±KºÑ lù¶£ƒ=¾òíÿ¶î\ú÷ ‰ÄÅÅ9((ˆ�=¾}ûÞž½ž<•;]£££C‚CÊ”v�( ã{}5âË»÷xûøªèå«×ðß6iÒ�}üä4vÅŠ ¢µ<üi�ž–å¸)Á¡áTUAA‘i²GCú† �^ Ìr€½{÷ÚØØ|ÂÚÚÚ  ‘Y¦àoÛKÄb•�àνë—õËÁ.éú�áÔ}ñâ%ß~þü%¾òí/÷¯[·–™™©H$‚õõõƒÏ¶^½ÚÍš6�@„Ûw…9zê"–ïe``8ò«¡›6mUQ‰QQÑ<¨ŸrîÜ…ÀÀà3gχ„„z¾}—ÑÓKë@9 n n ÍX@ADáæâç0BŽ­a÷suxbðäÉ“gÏrãõC�WÀ ÙóZ9¤/þ60€ .þÎ�e7£G�Þ¹sgË–-™ÂljjË'RáÂ… ýû÷ïÓ§Ë8òÉú¢cm¬>{õ72!5C¾_e°c1s=K£4_¯¯T©"|³KþþÒênø°ÁÂO�Ö¿t骯ŸÉÅ;vh;áR{;;ˆ^çöí»¿ÏþÕÚÚªKç‹/ëÜ©=ßË©˜c×.Ïž»¨|”ýÅÅÅ­[¿Ûµk׬^­jl\üÌ?á«››ëÍ›wÊ—+›ÑÓÓx œÆÒÂ<,"ÒÜL§ îß¿ÿöíÛÌ•‚ ‚ ˆ\ZwÖ¬Yi)Þ™3g6oÞ¼E‹ŒPãÑ)ò25äÓOÖ«ÞžV6lØ€¿K–,a¹KDDDß¾}Ïž•Ú´i³gÏ+++–Ý,|ù*B6¥šeJ’ßþ×—+ÙºôrmÎr†lXî_`»òaÃÀ�Á¶;²3S x!À¹âUùª=²îðWíCʸ”P¿ø6ý÷~µPÎF¯EY}íq’““áà54Ôö–JJ 4¿¹¹9Ëut9½\ã�—Ÿ“£�¡¡AºxàÀ�¸§;vì`:pùòå~ýú±üÁáÇ«T©R¶lYhø[·n 0@%.mË–-Ý»w×±Љ‰Ù¾}ûàÁƒMLLX΀‡¹ ‹ìS,³~ýúnݺÙÛÛ뾋òÕ w‡XNžlð@ÃúÐìàÀ=À¦¦ŸùÇÞ‡« �[§vî_>½Rý�>�þß/:»sYˆÿû·OoI$†Îk”,W¥ÝàI*‰Tw¢EÆTAÇýÏr Ö´©“Ü*ºê¸tKlln–vs�··7$Ÿî8ß2@Ë�+ÎÎÎuëÖeòÑì•nß¾Íò7oÞ„ êÚµ+Ë™+BPw5kÖÌ+sRö’¹€ô}ûömãÆ�YÙ´i#‚ rîàåN`AýBkq…£ãËÀðåž9s‡úòË/Yn±xñâL ,Ê®ÿ!s*Ë*uýèÒ«ÔMþ4��~Î~¼ݼ¸e¸SÜŠÁ²�Þ½{ ‚†ø† ?Îhûþý{˜æsá]?(m¸+`Rùûï¿ñõàÁƒ|$vvß/ߨh%éæ"_ìæ‰ÿg^„¾Ïv?p–<ÀÜÓûQôÂü·|,.†sÓ Ü²eË,.cýq­6™ÌÐð³§Å?Zƒó¶d…ª#~[Ï?&æVÝFýŠ ÷z­k¶èŽ õ›V"EÞqG¯lèîÅ ÂmJwÝ6¸ÕGø¨pýúõ/¾øÊpäÈ‘h0„p¤¼hÑ¢Ö­[×®]¦µÐÐPá'X@Q¹»»ÃPúäÉã\§N�*V¬›ëÝ»w5Ëßßz#88˜MHH@¡}úT¾Øò–-[PWâ4�ò«W¯Tv‡h±³³Û¸qc©R¥P÷%'kÎêÓ§OãXHf±XŒÚPø ²Zµ3Eáý�G„g»ÿþ8ÎzOÇœÈtJWkÌÏtAË„¶-rW« _• šr¥¥nÞ¼y„>D†½�ýû÷Ã4ÀC›\\\PNÐGÁqïß¿Ïò"ÒfÜ>lÔªUK Ñ‹óG_¥ ÷ÊÏž=(È ‰A‘øhghÝÔOƒluq-¢rî¡-57îÇÇÇó ,Ðá�aZ�gh•àÐCÿgúôé¼mR��‡¢QC£Ì]L± 'Âa넟Χï¾ûŽ)<„�»�I�FøŠ& L™28atÑÑÐó¾GNð~§Ì{«´bO}wW%\}àkÅ^bïÿ#ž&³ìC‹û—Ã]÷éŽQÏè`p߯àÎ zá®x­¸õ0—À“Êܹs“h1d‚×Qªë½Š�U²ýøâ7¿üe`8�Y¶’É!ÐüÕ_á«Ýk.w HàæÂ8BóÑö(‹Y¿¨bðˆªH¦xM‹:%'Éâb"øÓ�øÌ® gÑãÇ�!ÒàgË¢‹;¿�þº°Í{ð:۔îÌm0¨)´D@—½\¹rpg!cá ƒ8ä�u$¾V$¾B£Ö«WïÁƒP,pÓÁÛ9|øp„רQÃÆÆz&..)tìØÑÜÜ|„ 8¨Æ—'Z#xùxf4Kݺuõ@HܼyI!ÍTP@@ôªúî8˜TïܹÃg½Â¾Kü'´C«fffL¡ ,X€� * Î‚š­R¥Šr:Z._QÒ�S ™F#ŠÃÁ: ~2ÏŸ?GÛ†qíp+;ÉÑrqõúõëµWjllÌÏðÖ­[:æ$'sE§úâÅ ícã5ægº ' ¿¿ÿüón%®WÊãØù0o\ ö�‹°zÀâë82 np¸¾anÀ¤o Èí/*gú!‚ÎbóŒ+êСZAÜ£cÇŽá*\]]á´‡öd¼úØ@Ù@±gAD®%ŒÈ0:£G3 o0ú-hk`’Fmkk EzâÄ Þ‰:|øðèÑ£ù ¥ha·Uî\ažÞÿþûv¦h£Ñ ÁÚht~xx†ÿüóOlÃà.‘HÊ–-‹.+S,–Ã144DƒSréÒ¥Yà·YZ~°�s …j>Á”¯Gƒ¿¥ûKb$ùþ—hõ—1Ë&xÓÉ—¤A—FY ó@wg} ô³gÏÖ­[‡ Ü£˜˜lÀ¾ŒÞšZ¦0»ÃРGû°GA÷¢ÝTlã®Áß“îx´,Òµ”‰«Åÿ•RE+IEK(Gy�‘Ë`>´ ‰³‹Ì `ˆÛ|´óG‰«° ÉC&("(†CçЪHy²6Z1—нÇÿÁrt…Q¡Ì¡þòôô„éuP†æµÆc‰šH=› ;æ`à|úô©`­Ôêq0Á¬P¿~}.€ÑH@ÓrwSTôèÙ#5DÆ_e-Ÿˆ†Udô Le�5âiB ´ /ü¢HªvS>Ò‡� ~Tø á^c —oZ' M+ÌùÌ•ÇÞÞ*mR@RÊrT-ˆ¯Øæáh´` €]ø‡~xôè/Y²$d-®n[üÅeB² {)§- ß`ºG€ˆÒ˜“Ù ÜøPàèh‰“¡ü@Ÿm¼0êvw4Kü6áÆñ@ä ’…ß¹wêÔ)\5š˜ ¬­å³è÷îÝÝü„¦´}ûö91ùn N¬iÓ¦, ày�ÕæÒ¥K¸Sxp¸ì‡à‡gž•³Pl‚ ]àË itêð¯veõÓ$'½ ô: ‹àMA»Æ>XϹFe / ·La›VI FL´ÝÐ?B.€aÔÆ¢ƒ ëmZµ ÓàR†¹™GHk4Y�ú5HHqd�p[º2Îê{3óñòy|L¾7óQl‹U•¿Œo·Œòß,*>4SžÿBæs1,ø„³Eñª xÎ罋0…+˜ë•ã8Jxz诓¿W~ÅÏ1÷_DŸ~ÁFõÂ×6ÌOúæTð†þŠ¡MCfò•Ìä—ðê/ŸùYcüÊåq耖cð!(yÙ2Þ€{•CŒ³Ã{�‰D`–Ûµkº�ðá¡Â6ŸÒ@wŽ=ŠN<Ë8™Þ1C 9NxeQ˜ÈGÔ½ôê ‚Ð××G]K©Tj`` |¶Žô•m ø‰Ï‹(“ÉÔmp`Âç-T ä1L<2¼ˆ#?Áý��ŽpuB3@YABù0EnÀ G+ä ¨,ã' f̘1nÜ84EÅ‹Ow`Œ– ÊNWAvîÜY¸îW‡‚…�j &aH ¹sç { +(»k?¢@Z9™™+BºŒþÍP~*[©Ó'ÐD ¾w!W•%=î;3 ±ÍámÞ°aƒ‰‰ ê4˜ø»Ui‘¹À�C‡ÆÎÎŽe�þýûÃ:€Î ª&¾~ºJLQÎ9={öœ?~Ö—Ù#‚(R þ×SÐR�tûºÜ¶n¬�Ì�ð ;;;Ã’ ó+�ƒ;ß@8÷å* 8::¢±V�2š*ôK‘ |�¨í…]x…«è×_ “¨‡‡Ë7HCÖÄWZl¢ØN0ýÞÜjüÇYl±¡×Â(p½\{»/6 ^“W0Ë&Tæ|î µÎaÙ<ºKÀzÎ{#нØà“†0…VŽÃ²ƒ^½z¡Yo§^tQ`—×þBVy3î�è{/ðáÛÖ€ Žz½=êÍièþÁ6>,[ɰV^÷H{ÌÜYIÐÀ,ˈÅú²¤Ïkc >¨'×Oެ+áŸÈ�€t“Õ˜ˆ\Fp·¢Ç\£F�þù‡ZXX ”WªT‰)–ÛB‡–<¦¨\Ð;Gÿ]ío¾ù&11QcšÍ›7‡‡ ö98ñø¼;wîÄs z¥(Ð<ÚùóçëÔ©ƒcáÐ|5õsaÚÞqïÑ­³Ž;Êä£.ÓYW]üZµj¡ö×y¨<�”° g$7s2Å›·°AðjzFÙ£…‚�S8K{ôè±|ùrxáã+õUBp~BçœC�9™™+Bé `íù©¸Ê‘òØOLš4IÅÅ­BãÆ�Ñ/yüø1 œ½<=„à˂ƒƒŒèZRÈ¡Ðôo €Ïž=[½zuô¢‚ äû 7€¿…ìÝ ‚ ˆZþÒ/ºµÂ\Ð|#Ý×€¯_¿Žt�l@ÄîÛ·�ÏzøÃ? ZX¡9FRkÖ¬AS ™ªþ0L·h�fÏž�N#l÷[·nåá�µø -DµòTÀèÇ¢÷…_a EË3+þ ÝÚl'áV¢$!%áŽÌ“4øeªýèÏÞ²kü*?…®Œ7�&ÇßÉ컈i£üöevÉí K ̃ſ² U«VçÎ�sU€ ˆá€€ôcúé'¸(Ä ²÷%góÚr±SldOè^1lh«:œN`–­dl´úºGÚÉ�U‘P#d},4:j‰T*3Tò­7×ó�ú̃ѰÓ`|Ôw85Í·H„¥ züðj¢+‰*føðáð<¸µáÀ�P°Ä0ň ÔV›6m233ƒI6>ô_Tpðɸ»»O›6 1Q‚‡ †>=œ¢üñGÇŽ>|ˆƒB†Mž<é ^ûî»ïð«ìÈr >mO&VpÁ ÂmÒÞ«Öe`dÂÊ•+!uàÆ¼wïÞ–-'—Ã�lÁCþï¿ÿZZZ¢ A³9�Ÿ¾øâ‹Ÿþ&|…‹~êÔ©×®]ƒ ýñÇwïÞ]±bÅ> º×ò¢K—.]p`ÎØ¼y3�Œ„‚¹Ê·FË Ã?lee…Ã9„…… mNg§=l½ïÞ½Sžz•lhð”%œ– ÔTú�m(‡8%X…á)…�˜;ÕÑrDhã7oÞ@Ãà)¥{N²L!4Ì(ùÚGÿjÉOí  ýù矰Åœ„.¬hœÐíH+>Œ(xР±MMåÕipp0ŠüAvÁ.†RQ¦L-GÌÜCÌGïk=0>a5æ$e3?S؃ÌÍÍÑä Ö«WÏÚÚ5 oáEG‘8zô(#‚ 2‚ò2HºÏq³wï^ÈN´#ü«H$êÖ­\µcÆŒ�µ–Yôñо´mÛ–w¢ iàÙC|Tæè ¢}Té\Aß">Tþê)Z.˜w ܧOî `Š@à¡yÿþ=$Zˆ4µ'NœÈr—Õæá+ã½þKŒ²[$§bÛzÜG·änÒÝ$q2óØ—äì¬gYMl?:Û^V&D/ýUdì_ý‡<¿ Ü!Œ^nD¶OÝJ�ðµM›6puàXè– ‹t€Ë–-›]‹lñ‘Ïfµ* @—ì|¾_å–­dL‡ g˜;�mX±#[FÞJ,Ìÿ¯íK[ëÝõcY‰¤õ 4ìjÐQî P_@’)Ï-?´+:”üõ tÇQÅpu‡²ˆJ zF8a‰WÔw�vè…Ce¡n‚ZC ä|><Ù… âi�z�ö@÷¥Y"‘ü €)†[( ¿¾iÝJ8¯tW¿L±D�ÊRU*ÀX€ÜH·‹�î;ä Ä€òåËãaæ90Å´ò¨²aq@RÈä×'½zõòó󃫎;WÈ9H‚bÅŠ¡yèÔ© rûªèe Dq±»ð¢,šœ¯¾ú GÁ!à÷æ�PV¯^ ÷ZµjÕ ;qæØ‘ÿ1ŒtP?âÐ(-81Û Ô*hKesFZ¨;Èä04¹‘‘r@8bZ¤uDî5íܹó¯¿þ:hÐ Ýs’“Ñ"„ ’r]{´´òS;ðˆÂJ:jÔ(<�Ðùhµ¨_®F>…&S”dT1ô'LQÂH�´ÈhÄÄÄ JÑå`È”_ínÙ²%Œ)*qpɸLa¶9T�»C‡Eàžà1 ‚ ²‹´z¼ß(PA‘o@µB;Á ­+üЦöàÁƒè B©Â&Ë'pV†wUöânô±�>ç²eËxøp|T×âŋќáW¤é±@dd$"«\>žb¸…qê¾q�¯.3­¨#Øšr»¨�´Žˆp4½ü̳˜“Ú�óOŸ›Z;Zò3]ð|enGåP&sbB‹Ó§OÃTŒ6Œå$¨©pùY)ZA…4%„è·T(§Ó¶ÐN°6r÷/º‚ˆ9ò¥O ëÜ o<½ÐúéæÞ‹Ã)!¯Rܺé#öóÃÉ!¯äù‚müu¨¨gWQT©›èò‚$„4�*Öåˆé¢ã”CpÚg£s¶uNAârÏ’%gý€xi^»’Ä¥BpèHßR¿,£`äKþÞJT^˜)D/û4G4Ë&`á=z4_Ñ[;ÐkÖ¬ÉD�àëGEÇÄÇK‹;}¶tÓ«à”«^™YÅ»‰‹¨¢½6Œ#º»»Ã»|ùrº&NœXºtéùóçûúú¢Ÿjllüßÿq±U€Ÿ� ¨8PªT©¿þúëúõëgΜÑè)êÕ«œÃÈ·2eÊìØ±cÔ¨Q{öì�áèÑ£°â9r„þýûãI† úܹsmÛ¶}úôiåÊ••wÌoØøZ˜Ë‡¤unÝ»w‡úÕøj4QÄùûï¿QæYQU‡³³s.¼à@AdÔ¬‚Êì6Ù¾ÊN~#Cà€·?µÚ0§²šât­Ó ÏŸ?G¶dË’¿™€¿©×©S'VðÑËwWÂø›½ºWÁë›ÖøºLø~ G“’’Cìl¬•�ÀàQ@Ê]¿Œià:%DÕ�Òĵ9hР۷oãÐP¡ðÓÂÍ;cÆŒßÿ]9\µÛ¶m“J¥Ã‡‡|�‰‰qssÛ¸qcƒ 4&{þüyÈihZ>œrÞ¼yèýÂxåÌG;Cý.\¸üxÓ§OŸ2eŠúŽ,ß÷oHX¸“£†ZF‡Â.5nÜ8aL8AADî“E\ÔÈèèl?"Q¤Ð+¬ïdþ°%$HCÃ#]œUgÊÉ�8]߯ zkR9**J—‘¢IòEƒþ?¾488ØÎÎNù9Ç%#’[ûŽù/+ s&¨ª"‚ "ŸC8C�&r“ü%rò<p-HLŒ�‚‚Cì?{‚¶˜¹Þÿísb•³Ñ«Y\di”±g)CoÍAšêøž¤ŠˆU3—¬®~ÕwÌsp;pSŒ� µ ~&‚ ‚ ‚Ð àÏ€¸‚)ŽF8�ÃÂ#m¬?›p²¶EYýšÅS߇§úG§†Ç§Æ+eK˜µ±^qs½ÒÖz•¾DºàF$%'ÛZ[’•Ž ‚ ˆÜ*ñ Rc£ ÌYA!£Ôà r(÷�,gDQ…ðgp'0„–•…yXDBT40SÈàêNø0"€ú�‹O°±²ÀM!÷/AAtZÌL�##£IkY„ŒRéãá+ àCddT†ö²´´pr*fbbœ£©qP†Q’y‘¦7� ‚ ‚ ¢(“æ$Xä1#ÒzõåË×ÖÖVeË–ÎÈ~,<<;º¹¹*«ÖìMM*ÏAäT½&ÈNZ˜ g³°’Åç4 ª|r]×&uà­…^Ňe¾ v/W®L¥–Ÿáó«GÇÄ%H“’’A.Äb±‘¡�¹™Iក]x�¥ÒD=È…‰XlXŠ.HL”á“”’²†X$20�à“nÌ\>"Ϙظ˜Øx”… Ü}3Sc3S“L<¤(ñ ‰qqÒ¤¤d–Ÿ‹õML �� Hç$€‰Ì•Qo­TëÛ·ïs.µ| *߈Ȩ¸x©•¥…­�•.ý‚(X Çnblˆr^(›sÅ* ñ‘Ñ1æ¦V–æÐKŒ(øÀ¢Ï‹®nk¡,ºÉÉÉ ‰"‘ÈÄÔD"ÖgYC–”,M�âY022Ð××Ï'GD-Ö;ØÛÒ«|…¾Î%žS+ ó u¢ zåŽYvÒ±lÁÑÑ‘eÉÉ)(Õá‘1f&â,?&DºdC› Öý�Þ½{ŸR·N­âÅ�Aj Ó�V¹ŒKIF…¶² E�·³±*dB‚?Èú"}çÅQˆ€!ÃRbniaQX‹.´¨Ä@’]²‚VbfA‚dMLŒÔ³+÷�˜’’mjjB‹˜VP–ð �ˆÂ�¶³µ‚mE—½P0¢bâÄúz©©IÉùËû+G__daaj`(ÁEYY˜êxQD¦ÉjþÞ»ÿpÚO¿mÚ´5 àCbbâ³g/fΞ·~ãaaáJG&“ùúù'$$°F*•ž9s>00ˆe7yòô9#S¹� R)½‡ÃýÔ×P¿Ž¶Œ Š(ê(ð(ö…©à¾_¨_t¼QHÁÍÅ-FO´�5^p�¢c�íNQ$ˆd56Îå#òÄb1©ßBn1ntLl¼.)âÀÅ Í“œ”¯‡Ä˜%(¦neDN’%0Ôïê5š5mÜ»W7cã�óyz¾Ûµ{߆�[¾7ZˤDÑÑ1[¶îxòäl3°ä•/WfèÐAöö,gˆ‹‹ß³ï •µ•££Ë>’’’ïÞ}€òZµŠ;Ëybbboß¾[­Z;»ü%¥`ÈXµz}dTTùreû÷ëƒ�cÇO=xðÈÈÈpÜØ‘¦¦¦,ãü6sn�]kÖ¨†íK—¯^¸xyü×còÛ…ë‚Tš£5ù~‰"4ð;/_i¢Q¡ˆˆJ}îÈèòýz �}ü>˜H ‡˜‹CS–ÆÅÆ©äUž1,<Ê�¬ÌEKKó  3SãtŸPÅÚ®q–}¿*˜š…A ÓËÀ9JæpRRÒŽ{ ~ê§^®\™‰¾ùcÞÂÓ§ÏB·¤›Ôo€ÀÏ?M)îäºi˶ÿ];kæÏ¬@!ëÏ�3ƒå;wï³µ³Éo:ÐËÛÇÌÌìÛñcÿš¿$66f‘{÷àæ>¾råJ}z÷ä](tÂvíÚ÷æ�§¾Xß½’ÛÀ}%I``п+Ö@r_¼xÅÇÇwÉâ?±ûÑc'>|ŒøeË”îß¿�­� ?hbbâšµ_¼|åèà€ÝK•rV9+\Ú¾ý‡ ¸ôÅâÊîn½{uÇ!>ïÏEµk× Äå7~\™2.Â.-X‚ iß®5Nàʵ¿þòß³ç@hXØØ1_ñ3ìÝ»ûÅ‹Wß½�3:d ”áÍ[w,Ì-àE‡G—¢NíšqññW¯Þ°²²lÖ¬qÓ&�”Ï Þò;÷`cûö=§OŸŸ:e¶½}|�?õÆÃÓÞήn�Z­[·`yA1G‡€€‡Ã%ïÝwÐÚÚ:&6öÄÉ3¯_{àBXø¸}çž^½º—)SšL¤‰‰v¶ÖŒ ¨Ÿ½xicm]¾\Y-Ñ­r%7•jßÔÄ8"ƒ‹{ç[ä/4JedÉ*"˜GEÇ”nhºä J•¼*”G$ò:�fŠqÂ�¾Q)²Ðä„Ðäøè™4Uî^7ÔÓ7Ilõ�mõ�,D’|+ƒ3ZïÞ½wu-ob¬y�sM…¯ïý{ïtÓ)S¦ôíÛwÏœ½%ï!Á‡­ õ‹mÈWh§zõêtêÔþÙ³ëÖoâbõê ¾~þ={vmѼé�;÷öî;Äé�AÛwì¶··íرS¼” ý\¥Š{×΃ƒC.ü;哱ððáã�¾­[µ ]¹j½Ê)%''¯Xµ:³U«æ�Ö‡@]¿a ?tPpð©ÓgÃÂ"Ú·kcùy(8($::†ÉÇ'Ç(¿c ù&œáÞ½Ý+UlÒ¸áÝ{à'�ŠŠî©ð“¯Y·‰ÏÉŽCœ9wáíÛw¸ xS·nÛõøÉ3å99kÔ°¾"“«µhÑ”)ú�Ë–­ �èÙ½+4ù®=ûÏŸ¿Äòœ0LáLn;·03“ûIÐo1üˬ k��‰]¿~KíZ5ðaÜ_šó™(ˆÀ÷‹§ØÆ&ó " "«„£Øç·'2Ç'7BÍù\DÀ�Æíæ÷�AŸˆI‘½JŒx$ y•’œÀÕ/À¾"PñS¢±|Iæ[ñøø-Þ].Œãu˜Ôjè—áݳ÷>Å‹;5¨W¢ÎÈÈbõ䩳]»tìо “¿�c»ä‚ìáËE7ËÜÜ á¾¾~oÞx©5mܨ{÷ÎL!bÏž»Ø¶MK./+V¬_+t)RÆW¸Xy4‘H„ðˆˆHøZ…DÞ¾{�å·ãÇòzÍ-Ìá͆„Æ¡™ÂÉùÝ·c3mnÖ´qÛ¶­°vtLÌȯ†")s3³•«×ÃÉY²Dqüdhhˆ£Ã мYãßçοpáRµª•…ììlkÔ¨vøè‰J•*V¯V!7nÜN�&Œÿf´¹¹9¾ÆÆÆ�<}ê�å¶¶6�Õ¿wÿAóæM,,̯߸ոq–5=Î䯋G3‚ rXñ´û~ �=<߲ ¡"Ýô"ERrò£GO”­í÷î?¬^½ªXŸV¦!ˆ�D¤$¾’†'dzO5¤r-ÉRlŠì]Š ¸¢¡µ•È€å32/€­­­à•Më×À `y«ô'É„õ矦xyû<}òüÎÝ{ûyøèÉS'ú|�Éd7nÜ R$Å'ööñuttp*æøôÙ ooøZïܽÏÝÅœ²åÊð ÿ0ܺ¹¹ò¯ðšŽ;p“â¯s©�¹¸È?Ãs«,€½½}!J+º–ç_+ºVPúp\¶l™¬Œ†Öˆ2535üôŽ»™BÌË>ÍgˆCó‹Ò××Çöƒ�´§éíãSÜɉ«_àVÑ^kø–¡?Y®ƒ[‰‚áãëwäèqœNž|äa… åXf�ù㋾=W­ÙpÿþÃZÙ LAh‡¯­øöÝ;ÅÚŠÖuëÔ,Q¼8Ë,Ù›Z!æýû÷ø[ºtiaûâÅ‹eÊÈûTÍ›ç�==O@�ëßUk7­[)„,[±ú›±£êÖ©Å‚€hJNTx}ãùؘ`Yì©0Ï{±¾RùHÞ’†µM�ÚÛ”³—˜Bá “2wksýü¥�3/€Ý+¹;~ÊÓó]¹OšS™ë×nB}•-[šé†K)g|:wn¿gÏ�3ç.øøø&+†+ÛÛÛ}’¦–­[µ€wªxþ‚¥ðHT­R"?ü?OE¢�ÒmSH�‡Âõ4�M—%&B— qÄŠÑn‰2Ù§Cè0n\‹ÁX/ý8Ê’^"‘ÈdIL+‰‰2þŠòÇÝ',“åÁ¨øÒ·mÛÕ¤IC&wÛZZÈG‰ãî;pèËAýK”Èd·žüÒ¥]š7m|èð1Ø8¬, Ï”$¸_ð–ò7Zã†õ+»Wb‘�  ‰ŽŠÑ½ž'ˆt¹{ÿÁö{bãâ`ü511yúìùÑã'Ô«Û«G×táçtj…È]ü6lØ¥K—ø¶‹‹Ë»wï¼¼¼ðµE‹9*ƒ7mÚ„Cpù�Wü¹`ÉËW¯ùö°‘㔂$ÆßݺôèÖ™(ÐÞ¾}û_|ÁÇ?¸sïA‰âNÅ�2³–�,5Ù;)&()Ž)¼¾ç"Þ®þp¿¾eI7ÇrGJd,0>îÏcŠÕjmU6%5‘ÍDW‘¥D/ £È¼†C¯~½º»vï›4ñãÏß>pèè‰Sg†|90ÝD¢££W­Þо]k>ÿ“>ÞÀÀÐÃÃ~à©S&T(/÷(úùùC-«§\²dq(Õ÷ï½áeŠuƒàL†óPùZª”sJJŠ��_éÒ¥ðÕÛˇ2Ý042‚Z†«™ësþp†xûîýÿ·ß¾œÆ*¯Õ•*UòÊ•ëPP\{yy›š˜ÀXÀr\,\ô¸e×®ÝlÕ²*Ü /׫[; à<ù™ÀLá'oÛ¶Õ‹—¯a"áãÆY!wí«�Ü;QËÚÊêC`à¶»‘“Æ âF„"Brr²¯Ÿ?6P5+›�ˆüÉÅKWD"}ÀDv½ºj͆æòµ» 3Œxx¾Ý¹{ߺ�›Ç�£ËÚŠ9”ZBŠwèСÊZ”KbˆaÈc–ðƒ²<åàácP¿Ó¦NzùêÍÁÃG±!üa é‹ DxùªïU¦…��ÍÁƒ›5kÆ2ÎÞ½{á9hÙ²¥Jx­ZµZøþýG/^¼‚ÇÌRÓ@_HÁÚµj?~ÊÎÖÆÆÖæØ±“o›5k—îY•-[ÆÁÞþ¿m;¿èÓƳ]»÷Ã;­{Aq.Y÷8ܲEÓ×oär½D 6-üý?ìØ¹·N�š>Fk= •öööÉ�·aÃ.SÚ¥víšçÎ]Ü´y[»¶­üü.\¼Ò¼Y¦°/,Z²¼]›V�É'ÍúwÅKK‹ÁŠÇàäÉ3÷î?üaêDe×qÖqqqNHH˜õû¼*•Ýy]¯^�?æ-Ä�îÜ©=ËPDý¾èµüßÕ×®ßäf‘¨ßzuj÷ëÛKìÚ¹ãÊÕë!ƒ¿32Ý’SRnÞ¼ýÚþñ–Í›*�çÏvFŒþfñü?t<„¿Àù‹— :uh—î*ÐQÑÑü¹ÐÂÂÜÐÀUŠ{%7~öüET®>¾’°gßÁó/ÁúS­jåo¿Ãòˆ°°ðÓgÏ÷ÿ¢·–8o<<×mÜò×ÜYL7^¼|…§R__¿Aýºx®y```ÐÅËWë׫ãªÈ„©ôÈÑ}{÷`yÍ»÷Þ­[¡±‘y ŸK9$Cµ7ŠPp0¬�%”• eo[� 䮪{ Wy_ æ°GOžÖªQ½|¹²ßO?gÞ‚“§ÏöÒamE�© d.µ"W¡*ê—)†@üyóf(ál÷k”ܹÄ-”->0܇‡‡+«Ü¶mZÕ®UݹdÉ?¼†Nž6Õ•å ûöí«P¡‚ºÆ“ëéééìüÑ “¡GÕÁÁáéÓ§,ƒÜ»woÛ¶mEJß»w¿víZ»ví~ûVu SÓ ß}Ë2ÔMZ?Â0Çòˆï'|Ã2…,%%4%!6E†)X»&ð~ckçØd)KÖCHuCûGÒ`ùHW½TÓs5·A„ê¦öSì‚-R $¢ü2)t–Îêëëq£ëÔª±yËö‰“~=ö»_g̹vã&|¿¸¯ûö:uú\º‰|óõhGGûuë7ÿúÛœeËWI ¦L™Àý{Æ‚ŸyݺMøéá£Ç£G ·³³…g¸C»6—/_�>ã÷ÇOž¢S˜VÊØ½J÷-ÿíøó¯Å>�?q¦(—ß}; séßÿ®X¹ÖÖÖúÛñcD:ß377×fMݽ÷àÏùKÞ¿÷ªþɹ­;h³#"",üûêÕð£¶l¡jJÄ…tìØÎ××oåªuø y§(¾Â±gïôžûö‘wŽ¥ÒÄ��PþÚ3:OAA!øðBBÃBBCUºSY7ô§'÷íÓ“‡thßfÚ´ÉßO¯»ÁR…Y3©Y£߆yÞ³ “ú×nÜ‚ïWYýrF�öêõ›'OŸ¥›Â¦-Û®^¿Q­Š»H¤7cÖÜL :È Päæ/úϬL–´M±p—vàN,]Úåç§Lžô­ ~�‘¡¡r{á·rÙ’�ýûª§0ùÇ_bbÒ·»e �©êE:+'³ÎúMÿA÷Âֶ䟨ñ˜b2…?æ/Â�Pï­Z»5¥Òã'O³¼&!AúáC`éÒ.ŒÈÐ)¿yóæ�7Ö­[wS�T*U‰ûöm�»ÇÄÄÜ¿_9OèÖ­[yRwîÜayÍý�bãâ„NáƒG�W(8¦X[±SǶ(öº˜°5¦¦L&R+ B]ˆR•_¡N[´h?0=8»€¢æª)oúÄ%Ù{ Ý)íRjøÐÁÊ!ƒú÷…úeò!Ð�37úСC•ãÏIDAT+W¶´´ìСC`` S<Î}úô±¶¶®T©ÒáÇ2a„#GŽ,[¶¬qcÕ5#!€K–,)ù„ʯ³gÏþå—_zôèaeeõý÷ߣŠpssstt\ºt)S,b‡;"ïûuêÔiÍš5õêÕÃÝœ7oßÎaì·‡ ²}ûö;v AÔ$ØÑÛ[¾˜Ë©S§5jäää4fÌn5S?ÿt�‰æ�áÂÈó¼êwô˜±|ÛÀÀPå“$ËdWjB"küÀÀÇòŽå+×\¿yËËË{úo¿ Õà_ —Þ¾{Ïž¿Äö”§oÚ²]ÙH*7²”Ф„TÅöÉpÏÚ¦ŽQÉ ‰‰I‰2™»¾õ›&§�zºë[ñ�¨$)" U;b÷ü3§`V¢!éÑ£k»v­ß¿÷ŽOH°¶²R Œ¿íÛµÖ’|’ßOú 9ºzðÖ*÷) ÆŒ‘’’g²0ÃèÕ«[·n�aÏV¿i´fÕ?Ê)£š€fÆîññ ¦¦“µ¶¶RŽæ^©¢Ê^û˜ E¡\Ý,Yô'ÓŠ2Ü2|Õ/k¿/z£Ü(_ŽÊ~÷íÿß0©P¾œòOb‰xÜØ‘p¥"ÒÞp¨â#,ìT£F5|PŽ���…áÁÐKÿ%V 9@ào3¦ ? Ô¯¿>âœ� òª  #ÒæÙ³g׀ĪY½Úó/«V©¬ew”�7oÍ�ý›£ƒ}íZ5CÃÂïÜ»#SŒÂxôø)Ò�³TxO íÑã'²¤¤Êîn|Á*¦˜ºÌÀ@‚˜/^¼B#*Xm Àýü`aQžûæí;²D§e aTT4œºíÚ´zúìÅ©3ÚlaPìoß¾xùÚÂÜìÖ�»hj)ÖQÃŽ±q±IZË­ xx¾ C:÷î?026* ?—bØ|ã¸Ø˜è(j<DjuëÖ­V­ËyÞ¾{WQ±¶"ÚS¨_Ï·ï˜b3žø�kÕ¬�ÞØ»÷Þ¨¸2‘šž¹ÔŠÍh�Àß ÎFÞ½“ße¸—U¹*Îé�•Aí"¼úË'Á:{þâ™sР¥C{×­K'ûOíˆî !þá‡æÌ™S£F ¨\hKذæÎ�‹çòéO?ýa<}út<Ú�¦ˆ¬¼{dd$z’3gÎ\±büÿÿþ;"+GÀCºCÁwß}×¥K—»wïîÝ»¿úê«‘#G¢uƒ)�÷Q3¬\¹rÆ 8Ѐúöí[¾|y___T<)TÑÑÑDT&»ví*^¼8¶‚£ãü¿ùæ›iÓ¦-Z´Hýü Ò÷0<|”)ìJ!ÇØ£[íËs�~ý¾`ÙGúxµÇ”‘³sIt�ž½xU·vM˜³ß¾{?fÔð à�Õë6 ¨—+[fϾÛwîªôBk²|áßDÈ_Ùû1Ž© 9µ–‘ãR‡<6¾ñ;{?†=‰¾¢ ´«¢ŸšŠ±;Ë7¯gÏ[vx8ÝÕZè^Ý_Ô444D'[ãOh®”Õ/ÊM,Öéíì.¨ßŒ¢£Ç%éßk ÈëÔ®)j4Ôe]f,PéO«»¤”%®Jdq~‹_”‰Ž‰Ik¾t++Ë�ôܹ¸­%Š¿xùJŸžÝ¡`G|2] \´t9Ê$F`ú4ÁJâãëwÿáãÅóçŠÅbHÄEK—õêÑ•›´öë �Œ:oÂäiþþZŠ+¼+ÇNœž½; C …�ßùdHÅû÷^ó‡Í¾Èº¹L^¼‹%)Pþ?AÍÂEy£þ>g8”j×® Ý»sçNwwùº÷NNN(ç¶¶¶VVV|—\›q]ÿ§Ïžc£VÍêШ| +lð_a�bº­­¨15•_3šZQ@˜Z{´ Í¥¤ \oÞ¼YEÃ÷ Wpöêm-*FcAܽ÷`Úߣ*~ùê5ÂÑ¡]¸äŸ­Ûw¡íÈHÂr…0{öì­[·Â®SodáÑ5j´.$+|ª}úôIk÷R¥JAÇr'9ȰX�?^åí\«O%~¨h¦xlñ ƒ møžtT LàL†ðvp�Û q Lþz�T÷óWæ“î=Ê¿æ+õ êÔþÿX<SÓ$YRt´NY”P¹i uÎÛ!Ðð‘¬Y¿ Eú:µä>3Œ 3ýIø‰ûUоZ˜›Å¤=×Ý…‹—q,4oû©äVqé²ýúöæSÄåÈooß?,fŠzkѬ ÄíÀþ}ãââ®\½Ñ·w}±>¼©‚{–» ¯^¿yÿÁ£o¿�FôðÑã|‚4�$&&²,pþÒ•/úô¬VµŠ�¯ï¦-Û¼}üìY."ëú٢yþU¤—á9ÿøÐe¨wTÖ7nÝÉ„Öù|§Ï¶hÖ�òíÚÀë{úÌyàâNN~þþÅŠÉmö¸Ñúú"+KKÍö9JÀ‡À¤¤ä’™^ØŒÈà“A¿zþ/ [ÂÌXAAA]»Êg9V™ûJþá/^´oßÅ/ žœ¼Œ®XƒzuwîÞ7yâxccceÏíþƒ‡Oœ:3T‡µÓJMù§L¤VtÐ2Ï3~b Ç,ËÒJVåõà\#00¨¬’ùê 0×Ã�ÁÁÚ0da�bˆSŒDˆŽŽ†%Wù17òðÉ“'C�;¾Ó©S§r=€gùáǒ–4Öð�Cp6mÚôöíÛW®\Y°`Ë>pûöíëСÃóçÏáì2d?“7oÞàBà[nÕªÕüùó=z„*~lèùÿþûOãùë½n+ä“÷~AíÚµj×®]X‡@ÇÆÅùùðmô.”ÝEòwjVß³ï`™Ò¥yx%7×c'N=ñwçʵ�?ùöë1ÂýÕ×™é‰ã˜|èÆŽž,,:ZþJð™ÐwÝžî;\E¾.F·gû®FøÈ}¿zz%L-Ü�m˜B÷bGýŒwÃrÀDæ111W“ IDAT†ì øðöíûŒì'wöbG•ù“²7µ‚Ű!ƒ¶íØýýÔŸá ¶²² �ïê÷ÅË×W¯ÝÐ>ë5”ê®=ûííl+»WB÷70ècÛ\³zµ›·ïÖ¨^ ¢úñ“g0+À ‰VhPQ§Ãæ'L‚¥›¶l÷÷€³ôÝ{¯¿—¯\²`^†9K ó  `l|9¨ÿÔi¿6mÜP—I22 Î mŽ(Œ@Ƶïݰcû¶Go潯wF_R(W¦Ì�ÃG{*Æ~oß¹§Y“F:� �< ñññð0`moŠ�iÇOž©\ÙÝÐÀàБc ë×Ó2�nŸ*UÜoܼ�S…¤^ÝÚ9´&Öû÷^pæÓZÍy ú£ÇŽÛµkzÌü @ssóýû÷÷êÕËÍÍmÇŽF 4îîììüìÙ³={ö`÷²eËÂ]œçïÄöêÑuÝÆÍ¿Ï[ЩC»ZŸÖV„·V÷µs.µB�0ϳÆ×nß¿�Ÿ�å¹DeУ ÄüÍU6§bòå0ÍÒ[Ò¯{÷ÿ ›3gÎtìØqõêÕ0WÁ·†óêÕ«L>™k¯AƒýþûïxúfÍšÅßûEô§««+ŸŒƒ½6lØ€DðhÃú¹xñbþâCvñ믿vëÖ B½Q£F ~ìl´mÛ¶\¹rŽŽŽ°‘Õ­[wΜ9°”¡…ÂÉ@§uþº“¯¿èÞ{÷î _ Óhô.ðáÛ-[4ðÅgãÕá'¸xùê€~Ë”v�eæ­Ñ11è? 2H¹ã'ÖÙˆ ƒ˜|.’6.Ç#=œ$ÆqÑ�¸WCßÙ\\ØÄÚY®~±KŠž“‰ù«Ä°1ŽgGÂŽâü$€õ4ŽÉF î�@°½½�±MáK`â¤ÁÁaÅ�ì¡UôÛO/çŒ-Ñœ¼|*”ÓfÌö|ûîî½ûÑ1±6ÖVÕ«U…±êwÝÆ-#‡Ñ®�!e·lÝ�g6..¾F�jCÀÅ¢/»q˶7žèþ"ÁÑ_ ƒ†qáÒeøI_$‚²MII…{)lÝ±ÛØÈH˜æŠóðÑc„£×˜(“�:˜/B«¼ðôß~4à 8H5ž•¯¯ß¿«ÖHbbc«W­rëνé?Má�¬ßôŸÊ;ÀüµÈÇ×Zg«/wéÔ¾sÇö{÷:wáR2ü� —WÅ å'~÷5�úìù‡ŽâbqJƒöCÈá£'Î]¸hnf.éÁáÃí÷÷î?8yúœ.ïqyx¾]³nÓüy³#""§þôëªåKÖ„§+×l@% WòejÅ?‹5ž€ò:À11±ã'NÙ¸vEZF„а°M›·ù+fÒ‚P3j¸�bä*¬—¯\ƒî�‹�GRø î¾ï¾ÿÑ\ñ¢×/1nÖý¿ØÙŠÕß}3öŸW�9\ËBqºsçÞ}•q¤0˜™™ò—´Õ3­nmÕYÍsùYË!xËè\Æ%÷Fò§ Ì^*–a€~R¯÷T�×úúy¾°*±“§Ï*/ôeaaÃô*žý>½ºó)îs-µw^~%45‘”””¨˜8[kmF1>%•ÊôËÂ|TÚ_Ç �´03Q6ÒérDe„¥�øôæéέrDá ÕÞÔjäÏKðwÚÔIü+Ú#//ŸÙ¿ý¬g×Þý—._ý÷ïE™( ¨·azV™32<<†'³¦úÍ¡ŠË”)“fG䜽êïJ¨œ ÎV%ŽÆóÏeи¤û„ò‚m˜FxáµêlÄÛ'ÐÎÖ8*Iš’”t!ÊëPøq¬,0:’)ËI==GsË$SIwë --\Db±…ذ¦±½�¾/-ù¡:MSã"££c¤‰ÅíAX>†H$b+KH Q>À�†¢€‹8ݘèêAmª´ŽhÀ r®Ã�p®¡˜ð951%ù•4Ì#!Nˆ”ääó‘ï·„=­ÀÌ#££ƒbå/“;˜ZZš›¿aÑClª´²,-ÂeˆDå�¬*ÚˆäW”O.J/­Y¹p]èu‡D˜˜Y[Ôé…ˆ"NxDì8Åm¡ Ô�”B„€çÛwÚçÓÎ!Ô0\âùWÀ"Lä|Eñöm[³ì@—ÔŠ æð7~áuäƒ�uY‹(ëàŒ’�øå«×\s „���·nßõÆÃ“‡˜˜ѧ©ßü à\#õpÿ>M ’Å!W“’S‚cÎG{=Š�E#š“ļº±}+s{3±¾\ÿ:HLªÙÁ ¬÷ –HÓ-ƒóC�bme —ä<�…& ñ ÒÈÈèää;[+uß/ADòDýj$‡^-&íd—ôÍ‰Ô Üß›CS^åCÜ*ºnZ·2XøÊo—xC‹›™šª,”@Eô¥!€Íõ *XØ«Ÿš ¡Û×Ú­¯UÅ�3Eëɧ¿AùŠäÿÙ‹M»°ü1òY l` ±³µŒ‹O“fmJX‚ÈM ÌÍa±5R ¾ L™ÇÊÒ2,,ÜÆÆ:ݘˆ†ÈŒ ¢¢>/q©RÎZôˆ 7¼;m-6ª¬gcÂôƒDq1I‰)"½””Ô�¯Ëõ£ºÝfb}“2F–ú†ùÇñ+ íÅ<®�±ajb ÷o~[˜ ´ÀK/'¿ ·ë'&ÊT^Ç%ˆüO‰âNÏ^¼dò•cµi`¨ß°ððÊ•ÜTÂQìQøYaAñ–u’DB3`~p£iªs‚ öÉýË{Ôø Y[ÉØÖIf¬šœ�œ˜˜*ŸÚÚ@Oþ^[}#{±±•ÄXxïWØ‘åÒÀH>ì›DAO –?0�ˆcóT1‚(P˜˜˜@Öúùxx¾Õ ¾_D3Q›2M^ì ‹\D}bh(‰‹�·”dx±+¢À��ÛMˆ‚ Ø' Ì>éXˆ[;‰ ”p©”ä¤Ô”äÔ¦X+X¬'’ˆôñ+wA UhÁ-ÀO�Ô/QàÈo½c£ˆÈ(šRŽ(ˆ@ÖV(_Že {+‹LN‹�¯à­¡‰±axD´¥ àÂOTt¬µ•y>¼—iÐ!•%%Kr`D’Õ¸²@îQ"Ç'HiÚš¢n´îƒqÄbù¼�¹¹oæHNNÉçc¦_.w‰D†©be�¨÷9,ÿuÈ™.˜CP‚È"ðýHƒBlA PàQì ÍÀ4…±}ë�Ð;[+F^p‹q£q» MÿGQzõ¥Ð f™_Ù.-�¬X_õ…£<9"LT0ºÙ3¢°ƒmdh ËŠ8ÆF™,‰å{bcãqªù¶ÚQ­Â>­¬¬xó­ûÐŒv‘KˆD" sS™,’€DEž0ÍžŠk135NNI†@bD!7·7º�Mü w® ~3–­ A$«ÑΕ›Gü4FÃ:'<"Š…ÜbÜh<¤éŽÑà$ý”T¦/Î×ÖØib\|N5Ý‹ÊC”ýº|�³ðW嫺 Î?Ðì‘Kðwé--Ì¢¢ãÞyùZYZ˜šÓ+ÁDá#1QÛ¼�D‚ÏEV(&Ű03‰�KðñûyoblLsbÐŸŽ‹��ŠŽ…ï—/0[˜àÝPC‰4119)ÙPîßÎêHKYR²T¡E‘¬z77Oލ¯¯�{› •¢�¥±Ð…˜?оàiÅ�Öq±\^0LŒ%qñ2‘žµx~ �œœß/Ô/N²@,<®ò>pZ'œe<½ÜKYÞxz¹8;±\„¯Æž’’"•&ÆKe‰IIùþu‚È(b}}‰�ØØÐÀÐÐ@$_ °´åBx�Ñ‹OHDçO2# >b±¾¡��±L7âÂZt9‰²$yó“’²†¾H„L3�ˆ•ß÷ËÛ#¦(À 3\‚TV F½�'l)0=òu.u4° C&KN�&å·J¥ÚÈP,‘‹ß \T>A]Kæÿš“ŒÖ‘{ Fà‹jÈ—)fAD¸3�w¾Ñk1K5"Srá€ßÓü¶„^6"\dvML¥÷ùl7y~D®ð“™©‰©I*-bRÈn=¯„uŠBÁàáóUÁÈôEå bUI˜ ‚ 2† “# >ʲª vét�_ ò¤5YL�¥—W¹Dþ`òƒÒ³YøÐnÑB~.™¾("s�&‚ ˆ £§´# E¤÷™û"?—�¨¬º‰ÂG¦ R~.$}s“<À¾¾~Kÿ^áîîæèèС}8ý9j` ©U³™|*ðØã'N¹¹¹¶iÝRØ7>>þü…Ë�;µ¿s÷þ“'Ïxà°¡ƒ`Úy÷ÞëÂ…Ë2™¬]ÛÖeʸ\¾rÍÃã-�àà`ߥsFAÙõZ"BÏ&¡*Dž�2�ˆtt´oÒ¸¡··ÏÉ“gòôÙóõ뺻WÚüßö¨(ùüõ[·í2�tëÚéÙ³—ׯßö…¾}þü6°¯£ƒCãÆ ðAiNHHظñ¿Z5«7kÚxíº�ÐÉ®Êã§—¯^ãoµjUAAAQTÉË!Ð¥J9»º–7008zì$)]º”‰‰É�›·CCÃõôDÁÁ!cF�` ïî¿+×4jT_=‘â%œ*ºVàÛOŸ½€Ê­Q£¶‡|90.>¾X1G| $!AAAQ4ÉK|ùò5ssó'OžµlÙŒ‡ü·ug||‚©©‰‹‹³¼»Ž<ÜÒÒ"&:Fc"gΜ¿sçž™™ÙÀ}CBBíííy¸››+#‚ ‚ ‚ ˆOdF_¿qcá¢%|»QÆS&Ob™¢\¹²U*WjѼ ¼¾<äËÁý<|ìíí#‰Jw†T*544|ûƒ\ cÃÑÁ>A*K$|—¶m[ÕT¸|A)ç’W¯ÝhÞ¬±â$o¹V(oggË‚ ‚ ‚ "s¸Wï/5jÈ·!†‹_¼ßn(a–AJ”p*UÊY%°QÃú—.]õõó/Y¢xϞݖþ³ÂÒÂ2&&fØÐAø5""r÷îý)))­[5çñ�?uõêul|=n”»»Û³ç/þþg¥X¬ollܰA=FAAäÒ$½ÆRRS�ôYRŠž¡85)95^&2³ÔT†¯©Œ‰ó .ˆNKIDAT%$é‰iNf‚ òž Šøƒ¿�Ò«Ïׯß$1z¸Q£™PÅ*àôâãã1HH�êé餵‹L&ƒB†ß˜„VÞxz¹8;±\$4,òáÓ7>þAŒ ‚ ‚ Š6ÎÅjT©`kcÉr‘lÀ`á¢%W�yý†J4‚ÈWä¾Þ´óxƒÚ•Ë•.!‘ÐÜAD&:�~¨º˜ˆ¹ëV#…Aè€L–äùÞïæ½g]Û5ÎM œ=½pÅkÀªo+î Uœu'0AÀ˜‚²4eò÷êáø«2ú ßß/Ô¯[FAAE8„xÇ�äÖÍê°Ü"Kë?~*¿Î˜9yÊL!zÈ"»Y¸hÉÂE‹?Y,~¯6ô ß‚g¾_FAA„t�sùõÀ,y€“S>Žr‰ŠŠR$ˆì>Þ)“'ñ¹Ç¹ê_¨îÎÏÐÈg‚ ‚ ‚Èýîq–<À+ºâò€‡‡Ç�Ó~Љ‰ayÍæÍ[¶mß��C‡�÷�z„S§Ï,ú´ TºÈd²Á_»|å Ëüýý‘oAAÁ¬°¡Ë5°BúHõKAä4ziÀ‚ BA–°¾èãî_�‹Ëþ›·lMHH`yÍù /]ºŒ�ÄÄĸ¸8õIÂø°Œãïç¿k÷Þ_§ÿbnnfhh¸ïn–oP>7Vá¢W±ÈM®FAh@Åß‹¯°eíŜÑ1‚ Š|4�Hôï)¯9!ƒùOøª^Íò8üW!�<¯r³g´ÀÆõk;uì cdŸ¡ÃFTª\­wŸ~>>¾BxdTÔ·ßM¬Y«n“¦-fÏž“œœÌÃ?~2hð·JUZµn·sçGUyõêµö:•¯àÖºMûÓ§Ïh<ÐŽ�»Z¶j+“%ñ¯ã¿�ðÓÏÓ±qçîÝ®Ýz`ߦÍZlÞ¼EõZ6nîÙ»/ß¾tùJ÷½*¹W�0ñ{ew®z ÇŽçó�uèÔeñ’¿±Ñ¨q³ã'N2E ˜¿`a³­ªU¯5fì×ÁÁ!<°~ƒÆÛwììÓ·•j5¦LýñC` Kƒ´.öÉÓgmÛu@N"ßd²�§wðÐaœ²«ÿ€A8O�ç¦Kîå7 �IýA5¢££>­€o¨ÇAÏ ]« SbíÚµBÝ9Ì¡aÒAÚáõä·ß~{æÌ!äýû÷Ó§OçÚXü9úŸPw‹>Áò‚L•/ü«þ±´²¼uû66ø|EZÖ@‚-vøˆQï½¼–ý½dÀ€~ ,~2dØ‹/—/û{úôŸwíÙ;ã·Y øðaÀ /-,,¶oû¯_¿¾“&O�x“J¥C‡�hÛ¦ÍÕ«—zõìñ˯34¾EܼYÓ—¯^ݸ)Ÿ.8::æðá#�5„†¬Q£Æ¡CûûôéýãO¿¼|ùJy¯È¨H???¦ê#G޶³³[·vµ‹‹ËÆORYc ÐfãÇ-Ï¢óû÷“ëgooïXÅYý5Áºu¦Nþ~íšU~~þ NJ’kr/oïþY>v̨ٳfB*oÛº]cŽi¹Øÿ¶n›5ó·)“'íÝ·“âô.\¼ôÍ7ß¶k×vçŽmÅ‹{vèÀ¾úõëákpPð¬ßç0¹\ô¹uûÎáCûëÕ­‹¯� ÐÆsç̾xñR||ü?/�ɶV­š+V´µµM�Jãã¢c¢aÅýæ›qø0…´>þÿíbÝzu¡qÚ'ŽŸlÖ´é¹óç���¡ aù½|ñEÈ�qªßŽ—OâUµj•S§Ïœ9{vÔȯ”Ï žö´$‚ ˆ|E«–-…¿ÊÊðÞ°�åŸbccgÍšÕ½{÷#GŽÈd²Q£F½zõêôéÓˆ6nÜ8ôXþ˜G‘ÏAUÙ¥K—�7N�:UŪøøñãC‡Aà 9tèPh®Õ«W·nݺ|ùò¾¾¾Ë—/Ÿ;w.tï…  ë:wîœWCo2ㆧñƒ¿OºDÓ’ˆ§‡'þººVà_…I¤Ñ áo…òåùWäWDdä‡ÀÀׯ_—rv†úåá-š7«TÉÍÒÂŽâ3gÎU®Z£e«¶ÛwìÄOp«~ýÍ·Âçý»÷ìÛ§÷ÉS§Ñ°�8qÔÀÀ�+W®nÚ¼e™r®MšµÀ×ädÍ 8yzzº”*õ«rªº§ÀM/ļÒu•S\ìkþÕÑÑ‘o/îÄÝÅÏŸ¿.ỉòœÔx±ŸvwàÅŠKH�òl,ÿéX(geË”Ž% %A‚ ‚ÈW˜››wïÖÍ\ßH+&0šû?ÿüó»ï¾Cß Ý,¦0ŽݹsgĈ...ÿüóOTTÔ„ ÄbñþýûA¡3-Z´@¥zùòeåÀÀÀÀuëÖõêÕë�?þ011Y»v-Sh“—/_bãÅ‹‘‘‘PUL.sž;;;³¼›!o^ƒR¥J1ùèâ�¯þÂñË7Ê”)�¿0ð¯Ø055q°·/S¦ dʧE†}||øÚ?½zö¸~íòÝÛ7Zµlñýä©>‚¸}ýê¹ð©^½¢uéÒ)<"âöí;çÎ�‡FÈÍ›·àsž1ý—·¯îß½-NÛ _ʹ”¿¿¿pháTµ§ rCMMMííí|þ]òÁÕÜ«‘¦M›—ðôñGW°úŦµ{éÒ¥…Öð°0!ðÙ³gµjÕª\¹²™™ÙÀ�Ÿ>} ¯d¥J•<<<˜BÃåËÅðÛ·oQý²¼«xóLÃZ²d‰ßfÍF¦Ü¹{wÙ¿+xx¹råÊ—+7gî<4Z/^¼üçŸåmZ·‰DÍš6MNIù}ÎÜÐÐгgÏ5jÜìþƒoß½k×¾ãéÓgJ”(ѼE3ìW»ÆÃáNtìÐþ—é3¬m¬ëÕ“®ŽW,¹$10€mxéßÿ$}šjK�&M'$$ÌømNißþ§OŸæái¥€“aòå‚O«¼RÛ¡}ûU«Ö<~ü$ `Öìßqù•+»3�ÑýbåÇêÐRÿðá#ááá‹—üÒ¢es•sËP‚AQ èѣnj3ªW¯ŽŽ×€=z$̦‰Îû4g)Ø%‘H7A¡#ŽŽŽíÛ·ß¼y³�ãàðqPªX,¶°°.[¶,Ü–¨f!•›5k Ubcccdd”ª€åy¶^òeÓÆõãÇOhÒ¬%¤àWÇ͞3—),;wl÷õø ›@[Â3¹t‰ümãÒ¥]Ö¯]ý댙+W­�Oø›oƵoב۵m;öëñhÛ ~ûuºòødàø8xȤ‰ßqcC“Æ�ztï6hЗh§N�,ŒpVÇյ¢E æÎ�·ný†õë 4ðŠÂðœV îî•p¬Ù³ç¼zõú÷Ù3…tþ˜û{lllÏÞ}âªV«ºkÇ68«u¿ñeË”Q¿Ø'Š7~ÕéÙ£;äúô_ †ïwåÊ+»»«Ÿ›î¹GAyH¶Æ8|ŽwïÞ+V }/„ð>VrÚ6n‚ "stèÐáöíÛ×®]ã_íìì nù6*^>Ÿ““¢•.]Õ²T*…+¸’b $–wC ó~¾‡¨¨hss3ux\\œDb ‘¨JôÈÈHsss•E¨àV™qJGpÈW-ê÷³CGEY*T]RàeõÙ½“’’àOæFèL�Ñ‹ÕxÎÊç–•Ü+è¼ñôrqvb¹Å¦�LJõïÄ‚ ˆŒƒ¾Ôù øÜW|Cý5`>­èÎ�;ÑÁš6–¿–¢15^å S090AA„vøêG|[Ý÷ËA_JÿÓŠ ‚<æ=0ô´D"�À·y8Bøò¿´0A„¸¡0))‰×¢ø+Ôœ\å ZW˜äˆÿå‘…ê—W¼¼fy `‚ÈN^¿‘OõîZ¡<#‚ rÞ9ÓèpÀOèr©ü%ÑK¡;¨`Uþ hYÐHí¬\ñê8ý~hXXhhX¶÷«ól$‚(|9vbá’e¯^¿aAD‘ª öÉ¡þ— ‚È"©iòVñ¢_ÍÝKÙy€ "{€ú=rìd×κvîÈ‚ ‚ ‚ȶ66]+pßR6ú�ID6@ê— ‚ ‚ ²®{³W“&ˆ¬¢]ý¾yë{óÞÓädù«›v××5¨]¥BÙ’Œ ‚ ‚ Š*oÞùÞ¼›~'YÐÀ¶¶6ð ³,CïDV©èZA˯‚úå`!Œ ‚ ‚ Š0‚úå¤ÛI cÙy€ "«À.÷/œÀØVw+?Øi…AAD‘BÇNòë7pÿÂáDC  "ÁuoZ˜ ‚ ‚ ˆŒ’íê—‘&ˆìBÐÀi=¢‰þIDAT�Z7Äßãçn0‚ ‚ ‚ ¤ÕIÎ õËHD6B¾_‚ ‚ ‚Èlmm5¬Ÿ-_)C˜ ²-˜|¿AA¡BZ�äl—¾šš ‚ ‚ ‚(d�øúu¹joÔ¨!#" è`‚ ‚ ‚P!—;ÉÙà^¸hq¯>_àƒ FAAAù’lÀK¦Lž´ïnlpWpî³jõš„„–/ñ|ûvûŽ�Œ >³¹ ‚ ‚ B™\î$gRÃÙË?püBýN™ü}£F ñ¹~ãÔÅ\¿AãbÅ�K:—.QÒ¥ný†Ó~ú9&&†éÌ{¯÷k×mðó÷gçüù ·ïÜaYfÛö>>>¿Þ¼ykÍšu©©©ŒÈVP´PlrÓÔBAADá 3X!}—\¿q|mÔðã«¿S¾Ÿ$êâ vvvþñ‡©¾>ï}¼ß­[³úÍÏaÃG2�©Z¥Ê½;7Ë•-Ë2”êñã'X–™3ç�/^jü:hà€‹Îêéé1"[áÖY ŠÖ×¥BAAEмê$gòP û÷îæŸ”Ô”Ÿ~žŽ6„@î Ö15‘HT½zµ Æß¸q#::Æ××·AÃ&.\lѲÍà/‡!BDDÄ„‰ß׬U·Y‹Vóþü+%%� ñy"‡éÞ£Wåª5Æ}=>àÃì¢EK�N•j5ÆŒý:<<�ý ºpñÒöí;±û»wïUNfÕê5�7s«Teè°8Ä Lú~JõµÛwì¼uÛv„ )ì5eê�;uUùŠ'NžôåPlð˹uëv‡N]p Ìû+22’'ëíí3jôX ?=~üÑ<ß¾ExBBÒ©V½âÿ:cfbb"#”ଠh൫(?ÌØF#‚ ‚ ˆ"Lƒ:yÓIÎŒ†Ëƒk�«×®õéÛÿ­là+S¸ˆñ«àÖ‘ð°p±Dbdd(“%½÷òZ¼déäï'Nÿ姤¤¤¯FŽ X¹bùÏ?M;tè4$â'Édˆ–’’ÌÓPOš<¥_¿/¶lÚ�””{f­š5Ûµk»víªâÅ�”ÏáÔé3Ë–¯X²xáÑ#%ɤI“½=vÜ7AÁÁˆ?vÌèY³~‡¸577ÇWS“ñã¿^¼h�ÊWìãï'žÍ/gÑâ%3¦ÿ2kæŒîܵáR©tøˆ‘qññ›7oüvü7?ÿò+¢Éå§ ‘ÿêÕ«û÷¬_·†€ÕkÖ2âs �®P¶ä—}; ëß Ûø;¨w;„¨Gãf�‚ž!²%"sô’–ÑÂS¤ž,")¬OVAy‰¼‚J~Þ†t*”ù¬“Œm��äl'3Ë AxL™nذ±c‡öØ],—vqAÊL1$[ù« ?ü0¥NíÚØxýú dö˜Ñ£îܹëíí}èà>333„›˜˜ 8øÓi¼hРA¹rå°}âøQ™¬H{€Ÿ>{¶vízl¨¼Ní\²¤­­-40,üÖç^zøH$bçâöo½T~*Ðá…ò¢ k8eB §L(@áE0�˜&eI”ùTò)< ëÅæ™_X‹çMGéëçç÷×ü6nL’%…GDT«ZeÙ?K…_]]+ð è× å¹úµkׂw×ÃÃÓÌÌTˆ|öÜ9/o/øxù×ðððgOŸÙÙÚÄÅÅÕ¯_�ÚØØÌšù›öSêÜ©ãÊ•«ÚwèÔ±cGlósxòôiLlìŸ-.üÙóç,ƒ¸Vpåî•Ýw(<ÀHR™«_P¿^]!r¿~}'Nüþù‹mZµêÚµ³��+¤$4zé}®�…íêÕ«1‚ ‚ ‚ ˆôÐËÄ4ÅP€ÂäÏ|4œÀ¿tùÊÞ=;áæø U-étéÚCb ù~âl—.íâììÌÃß½{ß°qÓ·¯àÅ×uë7:tøÈáƒüפ¤¤ÒeÊ;zØÖÖ¦N½†¯^<…6.Vܹ]Û6 4àq {›6kbnfÞºm{¤cdd¤rè¯FŽvv.9ó·êg¯ï¾ýÎ�;ùÊկǎùõ×_Ö®[ÿ댙¿ý:]HÜØØxܸ1ðWr¯ú÷ÒÅíÚµå?)ݳwߊ«.œ?£r9'O�þeúŒ{wnîØ¹kõêµ/œåû~ ¬Q³ÎÅógÝÜ*âë›7op§OŸõððX½z%ÎŒø>þ9Ýb¦…7ž^.ÎN,·ðòùhâJUˆyu tx¡¼¨ÂN™ {xZÛM'ÓátS P8eHIÕKJè'g1–µÌ¾ÒMÉ…pÊ„< /L•›}òÌx€¯ß¸¡ý=¶!w!z�“Ϩüí·ßà+Sx€ù$XÚ• tiãÆ�š6m¢ýpU*W^°`¼¾|tôËW¯ð*188XˆÓ°aƒæÍ›}5b8ÿ Uu ©,‹?yR¯®Ü¹š˜˜xüÄɶmZËG23–œ¬y0½­­íèQ#ñ9zôØØqßüøãÔÊîî3f”H$RNŸo'>(?Yç1úÕ«Uƒ¸}üøIµjUñu—Â-,P¡B…i?þ€ÏÏ¿üºjÕjÀ*d]ýæ>‘R½jå‹1"ãDÅJââ\œ¬‘Aâ¥2ß ¨ ζŒÈ8þ!ц‘­¥)#2 ž‰‘ØÆÂ„D–”ìáV©´=#2ž\±ÈΊžÜÌðü]°k)[1-W‘q‚#b“’SœlÍ‘q{|`¹Hæ'Á‚ᑞhÞsðÁ†˜�SU¯^ÍÁÁ:0<<ÜËËû§Ÿ~éÒ¥³¡¡¡rœ¾}z/^ò÷�»w!záˆ.WÁíáÃGb±¸wï^?ÿüëÛwï"""~ûmÖüù ¹Öյ­[·àtUy§žÞ®Ýzð¡Ô>>¾ÅK700¨Y³†•¥%ܶá F�÷å��Jéœ={.**ZãWí¸»W2äË~MžòÃÐa#îÝ»/üÔ¶]‡é¿þ&•J!û?|øP¦LF(QÕ/AAAyN¦°b,ùFÃø,\¼„‡óu�x  Ͳccãÿ¶l~ñâeõµ[¶nëàà°dñB•8ô>tÈW_�.Uºܶ³gýV£Fu„ÿ9on… åÛµëX¹Jõ›·noX¿–{n{õì!KjÕ®çáᩜÎwߎ733«Z­f×JÛwî\µâß�'ðߦ'OžâÜ«T�ŒŒN`ÔȯnٰܸqS�_Óç¹tÉ"33ÓæÍš­Y½RŸÿן—._vu«\±R•¸¸¸ŸšÆˆOð9ÆIýAA‘Q2ó°2Âë¾P¿ -ùàïÃr HA‰Ä@"ù8l’¸C§.o^=‡“Vˆjcc#ŒOæÀ-Ÿ`nn¦’ 0¬Z©œD Õ1 ±±±H™û�µ¤“V²ê—³k×x³ííås\ÁuüÕ¨1¯^<ÞX†'ÙÐÐ@Å×Md#¹üðc�4:sð!Ð¥itÆ¡!ÐY�†@g�iht¡!ÐY�†@g�r¹“œùY 9Ü ŒmîÎ9”•çýû~™>£e‹æÊê—)ÞàUßQ,««_&Ÿ}[³L5T Î_N7]Ô/S\Ι³g×­ßС}»à��3gÎ~=nŒò|]ê œ Š&æ&æ¦d Ê Æ†’ò%m‘)Ð�II¥EG3II‹””,YØ‹,±>©ß¬àdk–JE/³¸—¡²—IlÌ�E"=F²êæð7~ssHê£G�ýüý[4o¦î�-@¤¤¤>rôéÓgff¦õêÖ¥1½¹ y€ ‚ ‚ "oÉåNrö`‚(ˆ�&‚ ‚ ˆ¼%—;É4ÄŸ ‚ ‚ ‚(�&ˆüBRR’òº\111ñññiENMM•J¥|‡L&“~"11Q=rHHˆJRÑÑшÌr\£°�‹Åih„’¤€Ç”)¡²zYrrrZ?©di�¢œ{ØŽ��Õ_åÚµçvdd¤P”óŽQB*‚¬Àe¦?)g5v C #k¼H¿Ð<–ÙÇVøŠÜK+7P/©WYH¼Ð<¦sÙK«ÓR–”ËžöJ²€‚|P¹-­@^‘ÕI°‚È:QQQ'NœxþüyÛ¶m›4i‚zv÷îݶ¶¶¨A L†.‰^¿~]¼xq33ùtn¨G¶nÝúøñãŸþÙÆÆæêÕ«¡¡¡LQ%½zõjöìÙþþþØ¥X±bÁÁÁû÷ï/Q¢ª6ìÛ³gOô!vîÜiii‰ºÌÀÀ!*³¦ç¸T‹#FŒÀWœdéÆ�Ñó+­{A3C·hõËŃ•øW¹*9¯¥àqaÉ{ÕªUYn��Úxúôéü+lFÍ›7ç§ñòåKŒ‘¬àƒvedÿŠv­)Z)V±Í ��{¯mùéÓ§!�јA #ÄJSÜÂX¥ÓŒ» drÁEå¢`tG‘ƒý=?n-B —ÉÍØXWˆÏ×üƒ¯æ?t¸úE²(Õ(®‚3³@“¡²§^�©—%!÷4–=Žr%YpAÛ„¿èCó¯K úÖüW-(X4 x<ÛµkǶÃax½‡Þ¹_½˜iŒÏ 8º?¼Ü¯¾ÿ~nlíСƒz£Ã ªÊ}ai7Öš,>¹*9¯¥àq°#t¸=XnÁm=è(Â,‚>.pÀ€L©‰GeÎ^lð|!�«_”–;wî|ûí·L©ƒ* <�W¹N�:LÑçäÅ™†'Åû´y½LùnNƒuMå- ¸áÈU��ê\�ËPûûûŸ;w®`¦hêP ñplhy2§A·ÝŽúQ9}eôcJ•*¥µ-Dšº•u7DtŒP3ÅÀ]4`z�´t1Q€î `¥æh¼vè:d5!t‹a=QO Vt•å.¿)|Ta!Ź�¿0Z+‡ó¡æ¼Í@G�X²�9m¬< ¶¡Û‡ þ‚žVõÀ„î�-ò ™¹k×._P,�¡ wŒÀÅk9Øé7nÌ /i•=¦©ÓR–4–=–v%Y8P)-ÈR<§}ûö…ü¸páû<PUCõb¦=~¡!­‡ ­FŸ>} „6BYßj'­Æºð‘¡'7-Òªß`´‚—Ucç-×À“k¬l^^^Êá8+œó�?þ8sæÌ+W®(÷7¶nÝ I¬±b‡£…Š7¦ù§Ï© `‚Èwð© fû÷ï� Xæ˜â� ´4ho^*€¶:nwä»À!Ìm“L1V¨¦aÙ]¿~ýÈ‘#¹Õ ’†¿0Ì­W^)œ0£Öлwï2Å€Ûàà`¦¸R´Ó0ö£'‡vZlOŸ>­X±"÷l ćf˜Ÿù0]4ÃÈž*_¤6ÚrXhà“àbëÕ«‡^ r‰}ž{*׎¬F‚QVÛÎ�;#S” ¡—“��pêÔ©öíÛ+û*áFV1�(-•+W†%Y‡¼Êr }_�{È“G�1…ÇcàÀ�°èwïÞ9ÏÇŠóøèŽÃ(ΓE·€Jçï‰ñ@t4ó‰©;»Pl…‚¤ñ±…ƒµIä6/]B|>I2¶Y³fÈRW>¬ lãFhœñ¨à¢¥ì1Mõ˜zYrOcÙcŸW’… õÒÂã–yó‡p>Ž ÞË*ùÃýœ<¾Æb¦1~!CËà ‘#xqQüÐ1PÙW¹ *“Vc]ÈÈè“«‚–‚ÇeöA>:=¯€î-Y²d«V­z÷î}òäI¦Ô‡,]ºtÓ¦M™¢�”/_> €ï‚Î'ê¡ÏÉ;¨|ûíÛ·ðÇðI4Øç}NxË•_UË[HD¾fB¸›˜¢ÕA½É킨4¡pÐØtëÖÍ\7IòFëòåË�C‚€yõêê\¦Kk×®…eWö\¡BÞø¡&B'„ç&¸®�;wBc0EÇŽ_ ¯¯/ïÖ¸ºº–(Q½=\jX>Ú �Úá…4HOž<á3vÂÅÄGWÂÑ�uëÖEþ ¾»`},DFFMh/Q› ÏÜ##£Bð¿2ZÊÓT�©—%!÷4–=•J²0¡^Z˜¢™ãªŽ).½ +PÝ!c¡‡¹áÅÏ/Ï=_c1Ó¿0¡ýáEë°wï^î÷F;¢îÓS.¨Êh|ê }rUÐRðØ'£UºqEüñ¿¡Ã)ô!¡l÷ìÙÃ׎§Œ÷Ÿ?ŽÓ4h��ï 2E¡Ú¾}û¸qã„î(®Í(S<ÅyÒáL z˜ ò¨%×­[7þ|4TЫüõαcÇò_aç¨qà%F-ƒŠ xÚ´iB ðæñ ô Ðõ¬’ˆƒ nÔwèFÀ9“'Õ.ê}¡Q«ÂnŠ&™¿UR»vmþ«0ž -1N’OÑ�«@[+´¯Øàoª€Æ�ïÛ·=BÔÝ|r/ÈþÚu„ /Ëp9èï¢�á}ŽŽ;2¥ÜÓxíзèß ·ȧL+¡€)2ÖËËKð~ôíÛÍ3Šì)¬0‚G‚åí=wzeÉV�†VŸÏ_›÷ñãÇai‚yþsöyÙCÆîß¿!ÈLþš¼°^!·…ÒXhÐøØ Iãc‹<ܽ{7ïðÁ…®^;ܤ†ê 幇ô…±»¯_¿F„¼˜íh){LS=¦^–„Üã“B©”=•J²0¡^ZÈŸG¦¨ýŽ=й0Çä2eÊ@òA¢ «yAâ«3�ñ Ú^ÔoüòQxLLLÊ•+§²»rAUFãS_øÈè“«‚–‚‡ò !ýÅ_°¼eŽ_t8ù�“¯¾úŠ)õ!kÖ¬ ùºhÑ"ü„+å3ó¯_¿æ’3f`]xe„**|x‰.\È¾ß & à-[¶lÁ‚Há›o¾aù½B³ÔAd”7ž^.ιgŽzìñ¡Zù ¸Ô ~QÏæÐ`6nçËó‘rÙ5E÷p柡5¹.9999C5ô{ø\2 z0::ÑJ¢ß“Véâ‹«ãü3ÏGN�¡Ç™ƒª,­òñ+îB!£¡-eOc=¦¥,i,{…í¥î_d�rÆ¢àñ!0L72¿ ¢åá…øG‰¢6"-2úä8p iUÔx¸P0²bâË&i�“ÑNr!L]ò¹&‚ ‚ ˆBO.w’é`‚ ‚ ‚ ¢H@˜ ‚ ‚ ‚(dxô³—…s–s¢PÙ­L†âçòh‚ ‚ ‚ ò– O�“Q�AAAAùMAAA HAAAEÀAAAD‘€0AAAQ$ LAAA HAAAEÀAAAD‘€0AAAQ$ LAAA HAAAEÀAAAD‘€0AAAQ$ LAAA HAAAEÀAAAD‘€0AAAQ$ LAAA HAAAEÀAAAD‘€0AAAQ$ LAAA ²$€£££SRR2´KLLl||#‚ ‚ ‚ ˆÜEÌ2Å…KW¾{÷Љ‰Ie©Žöö}{÷´µµAøŸ '$H…”;uhW¯nmåt¬¬,«V©ÜªE3¤³kÏþ¤¤¤A¾à?¥¦¦Î_´´Y“Æ ÔÛ±{ï«Wo„tÜ+¹}ѧ'#‚ ‚ ‚ ™À×oܺvýf¯]+”/zøÈ±�{ö <@_$÷'›ššŽÿztJr²‡ç»‡Ž”r.YÉ­"Â÷î?XÙ½R›Ö-““’öÏк|üÚ¦UK¾-‘dRÛAAA…’Ì �¾vãfËæM!;áþ-îTì‹>½¼¼¼ýüüù¯FF†ÆFF�ÁÕªVÆßØØ8Æ'$DEE»–/‘ íÚ­K§Í› š™š@îò�¡¡Ô××773³07¯Q½ji—Rp #°Bùò"‘è�‡'�—o‰Å---øWCCC!šAAAÄ'2ì&…Ž…¦-[¶´bcc ú!0Î^| óñõ“%&¾zã1\¹r%B/îtàðц ê•/WÆÞή”II!…°°p__?¾íàà`` Q>bJJJHHh¹²e°�Ÿ\+”{ùê œÉøúâÕ«õê 1cbc…t,­,¡ŸAAy�—·�HOÏÙ¹$+ w„>6lmmœK–`¡ /Ÿg'Fä0© ’““ñ7ÝÈzzzðÌé)`D¶Âo¹º èIDATDRR’ŽñÅbqÖoD†pDd$þZZX*ZYZ†‡G_:šÊR!•«U­"ì×÷üÅË.^>uúl1G‡.�;–,QœÿtåÚ�k7nñíC+æÈä3lÅì?xê×ËËÇÀÐþdÁ½R¥#ÇN$C‡DFF¹»» ‡xãñöÝ;/¾Ýºeóúõê0‚ ‚ òtðwø�A¬HrõúÍ£ÇOÂÜ/„ÀyÐ¥S‡&�0‚ rÈ­¸¸¸„„ˆ.‰D)… ]¦õ…ô222211!œ-¨Þ¦—”œK7"ÃØÖÆÃ#"LLŒ…À°ðAë®ùí×c°‘””¼mçîcÇOõéÕ_ÍÌL»u騥Sû÷ï½Î^¸´c×Þ)“¾åçݽk§ªU*«H__dccƒ|‰Ž‰ùªï ‹�ãœáV¨bo_Hh ssa—šÕ«víÜ‘AQ�Qt‰’ÑsÐÍÏ?ý„ åË¡«àááY³Fu–ψ�Oøoûλ÷´kÛª^�ÚÜñ Wðí»÷¶lÝñüÅË/öçÓˆjD=^½~ciiQÌÑ‘@àm»|õz½ºµMŒ�ï?|T±B…to±²ë¦§›N`PPDDdE× ¬ €.º¥……H¤í%G�¬ç¿„“e™Ø¸¸—¯^׬^MûéwùFEEaÃÂÜBYAI¥Òè˜èøøx-»C§ÅÄÄ &T w³Ì7¡¾XßÔÄDã¯wîÝ/Q¼xq§b-Е'ÏoD†°©©©¹™Ùë7%ŠžñáC`tt´£ƒ½jÒb}TôÏž½`òÛõÚóvÍ(¾eË–iÃØ–m;¤Rc£4+}äE‹fM°áïpãæmçOS:ÃB€' Ú�êJf‚ ‚ òGŽ�8rì¤k…ò£¿žÐµsí¦j4îÿmÛéí㋎‘½½ÝWþ,SÚ%­ÈwîÞ{ïå=ñÛ¯}}ýÖnؼâŸÅ,Ÿõëíí;ý§©¥”†cèá5ë6!Â识©ï˜V><|¬ZÕÊÛ·e¹ˆL&S^°ChxødT'Lž¦Ü‹;jD… åÎ]¸T®l£âN«×nüqÊD3³2¸ƒžoÛ´jÁ2HvÝôtÓyôø)L?ÿ89­§Îœs¯ä–çÃÚ÷ì;póÖݘØX‰XܨQƒ~}zBhŒ O’�ÿ,L–e‚ƒCpªË—.àÓßf.º"""�”­�­Šj2TE¡=<áááÖÖÖ™“^o<<×mÜ)×~ðä�9ÜA¡¡”KÑ•«7êÔ®™–ΓJ ]î݈ ©Q½jº1ÿ#$¶¶ys#23UróæMŽŸ8meiéæætäè (ÒŸÆ3ÇÆÆFEG§¦¤ÂüóðÑ“Ò.¥˜\µœ8y&.6®AýºÉÉ)=±µ±ÔodTtPp0ß677WQÅ-š7ݶc÷‡À@ÁÔQ¥r¥ÃGO$H|ÑG9f\\¼�Ž¡�¡09AAyäî«×°›3ù®òÚÕ/¼"ËW¬A§bìèè @9/Z²lÞÜ™tR�«×oB8©¨_Ž9lμèõªŒ…Îoùð÷òUü¦îì”Iߪ‡÷ëÓ«zõ�¾ œ<úµsfNg W°ÇËËûü…K™Àù‡Óg/X˜›ç­>vâ4¼ëPSn]½¼}Ö¬ßd ‘ð1˜„rPJv¶viE€ Aá„R{:° )H/–qÖ®ß\·NÍ^=ºA¿mؼuëŽÝßOø†}^ŠxHÁâþƒ‡°,è"€™âFÀ'jg§õF¤$CkO'Ó7"3¸N­šÑÑ1ç.\d�­­ÍÓg/=Þªe³ýŽ˜™›uîØ®v͈éëç »@@±bÅõïËeêÙó/_¹ž’’ܸQƒ,úXŽ?Ù®m+žìé³çñ·]›VLáêA¯ Ûø MEkÉåhê§Ÿ€\zúì¹�¡²¨}ÛÖü{ÙJww7øgLMMøKjÝq¾¨GZ e�áææfv¶¶Âׄ„„ÙÌÇ98ØìøÞ¾{.�ظ¸Ÿğ'ýÆg/^=v2(8¤j÷�ýúHøí«_·Îñ“§¿7 ÝNõ…„†îܽÿí»w%Š;uéÔ�W†À�—™§ÏŒ [µlÞR±þˆzñÐxæ8¥­ÛvAö—-[Z˜³=اÎ@gÊe8½A¾�H$ó,�ïgï�C/^½1t06(TpÝÛXÛôéݽr%7–+ 0ôèÚ¥JewlÃÇŽnöÍÛwøOÈÒã'N}øT®\ô¥­­¬„½ÂÂÂ.]6mÊ$Þ£žþÛïÇÆî(3Uª¸CÒøûèÜ©½½�ÝŽ]{¡w¯nuk×ÂõÎýkQ·.Ož:Ë¥ºQÃú*瓚 �ôÁ›·îØÛÛ�1”ç³úÍÕXbÁ¾‡oß¹‡³R^5&$$tçù]v)Uªß^ŽŽüL:´ksú̹¦M5iÜwíå«×ff¦(Ê“áÞÅÇÇ'&&jQ¿++«Ø¸X íNEŰˆ##£ ùq‘‘x�õ|9¨ÿ‡�W)E°ÕªY�ç*ªŽk×oÂÉW³fõ/z÷Pjg2ôó¨áCÞx¾}ðð1—Í11±óæ/7zDÉOžK=»w‘;#ãâ7ªÏ ‘ºTiå¹ÊÝßµg?4==ÎF.þø¤u#�oÈ=8áµç••¥U\\œ²±LË�–ÑÕ‘L.–‹JŸðˆØ*”ÇW4¬_�» 2úaò„ÈÈH±X¢üÊÁ´©ß«GVIGetî½ú@o0AAù„§LÔ%)$�0Ö=Ëñ_�æÛè{x¾ýjø—è²ÿ·}§•¥¥FWzB[·ïFOºeÿÁÃ;vï?n”4Q Arçî}tî=~²qÓVHG‡M[¶Á¤Ž>Ä:ë“'Ž¿sï>äèWƈÅúë6nÁQ6¨Ç2…�¯Nµ^��6}tûЧçóÍbCpÍ!Âé3çYÙ¨%4ž*Ü AÁÁP‰èUoúo{¥Š®¥J9£·†®j·®�\J9³L_ ¤,Ë2¸|ô§“•¦{­T±"ºã7nÝ�F*VÌ1H1Þµ{—N¸}¸#;víúå@~û  °­þÂSø“—­XSÌÑá›±£>z²bõúß~ù¾–í»özz¾9|HHhØÖí» �aqP/OuûŽÝ>¾¾8bhX3Gàë7ž—._<°”Ûº [.^¾Ú¶uK˜N–ü³ú�ßëÝ{À¯Õ·W�ë7o¯]¿iÉ‚y¹0an1dI… ÿçò l­Z³¾mëVp9;qêß•k™6Eˆ'îˆ0íPpH(ŸŒ ¢,áÒðÐíÝ^%$hhh˜¡û˽ƒpü¶kÝ :Ó©˜£yyù“¥RŠ�ÿñ Ø€áð‘ãÈ(ãm;÷˜›™ ƒhƒ‚V­Ýпoo]h1ÜT8(öÏ_¼„&FæžKG�ŸêÕ½+ä7D/¬ êÕM·ºÐ’ç*wæEX%bI—ÎpÄto2M—ald o|º9œ{˜£lCÒ\€Uw!‚ ¢-=‰�V-š¡»™î¶²*C¿Š+ Ðmº{ÿ!üuܳ'|¤02óçÍæ»Ô¨^ þ:Ž^×ÐÁáPr«X�ç/^AÃU’”œ ï\¬<Ú­Û÷š4jXÉÍÛØ¸÷àQ¦0_ñH�µÜ»é‹¿½{vã®`!"+ à´òA�§Ú©C[>òJo×ÞÒ¥ÙÛ¬i£æM³¬“ç»wŠMÞ•Ëgçºuj¥µ ”9>LÑ\ýïRõÐÕ¶66±˜¿á|íÉM\8<ü؆ãÊ ]¾ûð!ƒU$–€ºÞàe151�÷òÁÃGÏž¿€3Lì…2S‘1;[tÁÓ**à×GOž}5l0_‚¾÷�ALîË)ÿ׳˜\7¦ Üúúú3EVËsÚÚ:*nÙwߌ剈%xè¡IÒr2g#(0økm­¡�ýäÙs{{{øë° ã�?ÿ¢Ë)5¬_¯ž–òåŽ; §6`‘¹vã”6�Ð¥S{ä-òáÒ•kžoßñ¢(S/ó¨nܺ-?“'ÏÔo®ÆûèÉS¸s+†EÄÄÄlÙ¶wÄ?àƒŸ¿ÿÔï¿C1èÝ£ëwßÿˆ++ùª4x Ü*Ê� ‡!žõ¨;åuR™âžBB¯20�(C‚º,¡¤Âøq£9vèèñ]{÷ã©4à‹²eJ«”"Ô{È þˆÁ¾# ŽŠŠþgùjd#ÿÉÉ©Xq§bÈ7Ü)ÜqØ>ÔϹKÇöիɇ�xyûÀN„üI·ºÀ½K+ÏÕï¾™©)JõUû�€^ס0j¹Ü–A²$€ ‚ ‚ ”¼I"==]¶•÷E§9D¡UˆŠ–O êðÉû‡hpçj:¸¼«„þú­ÛwáèPîÁÂy¢#….fP�|Æ�!ƒÀ õý•kPMÝ»vBîñ“§�Ÿ°ËW¯3…WÁ1=šC¤•Êh>AðsÓIZÅC…ÈÈ(ôÑ…©g .¸Ž‹‹ß±{ïóç/e‰Ri¢FåïþCèjœO?%5ý5]²¬9LaFQKÎ=Gû�™Ç•�D‚sÓEóÕ^ø0OCC¹‘Hä· å“äãë°À¦`ldÄo–2Â[ŠÐK<+4ÞÜè˜õ‹ÇSXÆéÓDP>àï´é3…C c–ŸŠ7tþÆ-Û~ž1÷]ôΗ™åzL'o­žè³hi °ÿ'›'0r–ˆ�¾xýúÍ�CGáb]øçïi¥€²]ùÓ‚TñMCIDAT¯Šé‡?Î@ 9þ*Ï’…ÒÓ|Ȱþ|=f¤zRNÅ>–g˜!nÞ¾Ët¨.´ä¹ö»Ÿî�éé4§·�-Ú39fÀAAdð (¯÷«Ë¶@‰Åï?x™Á;ßèÖlþo{ݺµ+UtEÇ=22’wøÂÃ#ÒêÁ?}öâô™sS'OÀi\½vj‡‡C ñöä»ZÒÆ½RÅßgN âCC—,œ—œ^Ù2½*?C¸P„w€áþ…«Š}ò þ1!rºù üB©ÆSE4ø”Ðý566‚¯�e+èakqöjÞÝ’:L %ô^áÃMÉèìÁ8JLl,TWh‘U*»Ã·Œ2ƒ{Í´ª&113þLÝÑxs—¯\£^báÊÆMäÛBæã.ã†.]8Oy=$ègåÔpiS&} 7é�[wvìÚ‹»,Ì!ÿñÒtª©ºÊÚŒæ.Ú¦�ê‹Dx„²äŸqqqG«Å·³µ²5A*åÃokT¯Š Y¿ñ¿ß¦ÿÈ÷­S«æ‰Sg_¿ñë‹aÑS?tXxqÖ ›nu¡Kž+#œº7"•e¸¤eÔР�lXS‹ ‚ B püµpiºÑ ¯ � 7lÞ ¿ºY{÷¼}÷žs‰è~U¬Xò�Þ>¾ðàñ¾£:ò×üôõ!bbb¯Ý¸¥üÓÞý‡Ð!ƒËÔÏÏ¿Bùrðg.ZºìÁÃGð�Vv¯$ÒÁÝ…yåêõ��P8·ïÜsðð1–Yг´±±Æù !P¿½øôéõÿ©CÑT&N+”ãh<Õx¹È7„³ôνûá,g€Û–MXZY¢‹·$P�ôoŸ¿x•œ’réòÕþ]¥‹À@î™™š:rwÿÆÍÛHʵBy”·Š®¼ÌÀÊð묹o<<µe N !Ž?þêµw—ib"4¶‰±1ŠÐ³ç/…øV–žžoùÔ>¸ ¸aSSRÎ�¿Är‘ÎÛ=~êÎÝû8 ùÜHÛw)F™"K!ûï=xõ„,²²´<�L!5áÇ-Ö–³ç/°œDãÍÕXbaŸºrí:ÜÅAÁ!Â0õ’%Šž<}O®çÛwüµ(,<\åxŽ;A5ˆ ¢—ð5Ý•8êÑ4–ÃL,Ml`h°s÷Þã'Ï@ÊÂ�B)W°B)RŽ�ª wå œ¥ËW�:}އCO¢>137Û²m'A=æ`o·nÃ�ãŸÁ±“§CBC‘u×oÞæÀt« ]ò\~cßȨ(–Þ�@Hr’®7B9çÓª 2q#ÈLAD²pÉ2è4|°¡}"hS“oÆŒÜôßößfÏC_½ó ã¿æc)‡¼jí†~šÒ°~Ý´f�®Zµ2¼ ӦτC¬vÍ0<ÜÌÌý³©?Í@®g÷.Ü�ÎÙÆ-Û7oÝ¡¯¯?x@?Èž¶mZ~ š5÷OxÃJ—v;r8Ë]:uزuG½:µå³=zé—}š @ÌŸ>s~ÈàLç|ÐxªÝ»tÂÏ]¸Ü ^{;;– »®]¿‰�Æ� U;óLàîæµ9{î_“'Ž/_®lï^Ý×oú/&&>ÉáCéâó100øfܨ�[¶�9wA>¾t`?>oó°!ƒx™A"M5¨^­ üŸ‹‡:þô蝹ˆYÌѱQƒzoß½G`«æMÿY±zÂäiH¿|ù²BäV-›>rêbÒwß´iÕ•HÄ­[¶`¹H«Íp9;vï]»!å€7([¦ô€/zoß¹YZ¬˜ãø¯GãWAàA9àq8pèè¹ —:uh—£óuÉW�Q»¹KlÇöm½½}ÿ\°ÄØÈåö ÄÄ]þzìÈM[¶>zÙÛ­K'kkod½ºµ‘þ™³r%ß¶uKåù�¤¾T*ŵ§µ<²@|B<Ó$˜Ñã=zäp\2®�6$ëØÑ_ñŸ”K‘ÅéÇ@XQta¶ëÜ©½òÑG 2÷Ï…0ê5kÒ!ujׄ! 5ºfõª¿ÿ±ö2x�ùªcéV¨-ÓÍsTË/_½†'yÕò%Úoò_š(…©(]áª>¸Z#Ú_ÄЈ^ŽŽv ˆüÌO/g'FAäð9v²Jewt¼^¿ñèÚ¹ƒö¥€9±±±èð©Ïµ‰þ+pºÝ&8»àÙú¦pÁ#±è¯¹ÐŠúb}}¥ÝÑ Š��S^œ‚)Ü8ÛŒN+ª‘5ë7¡+?zä0õ¥€¡~׬ÛTªTI•¥.”I+´œ*º•ჽsîþÍ–y¡TzøpîË¸ïÆÆªŽ2ƒþ±²æQ)Z†Í+# MWA¸38½2Ñ)çxùdºs‚òbcc­~t�™ÃIR�£eF•››V‰E ®BýaGþãöi©àY5V[�ˆ%<<ÜÒÂRû²±(0þþê~K¦6#´•••.Õ‘:¸M°V`_«S{8ð™'é0ƒ ÷>š=ãg•ó„d�üÃ/³~ý ^bÜhazy¦su‘nžk<ÿ´nr822ÒÂÜ"�‘(ý x YÝ“¯ÓÒÒ2£¥—<ÀAAä�»øÀ;‡í5“þÖq/Ó4Ô�Žs‡¦ÕÑWŸH })õËÿd‹ú_ìÿßö�sæ-h×¶\Á|¨3u€Nã¤~uAû�àùO/|ï|b6!Û…ìUW¿|ľD"ÉÊ�Ð6âg� MdQ€HME�—`m%_Ê�AAE®¦øÌUÐNc�aìs¹Ëã(K_aƒË`®¸HýfžÉ|ml׫,•µX"X6Ým8>AJê—(¸ ô‚cogÅ‚ ‚ ˆ"€öÁ­\2ñq³êó31µ‘ÏêÒ‹Ô¯Žèx#`ƒÈý‘¦†û7"2ÛV9'ˆ<86.!ݱÐAAD!@OOõOuï"SÌ Î4‰4•1·]ÁŒÐ�ü|#ÒÀ!a‘Œ >Ñ1q$€ ‚ ‚ Š&*JŒ 'áÕ_•p½ôV�%2Mþ¹i `ù¬WQð¡’LAA(“9AEz8ÛÉ“‘ö;À:Ìù¬÷–éígzwóS|/ÁRë°Ô^,µ,#ˆüÍ^NAA(Pš«ü“–¯Dö’‡7BÌ2‹h%ÓÛÎR+±Ôv,µ”ý�ˆÈèØ¸+Ksk+ #‚ ò‰‰²Ø¸ø �pS#TÑ,Sd¸I�¿÷»]áû­�fü”2‰‰f1½ö~ºâÀ�CŒ ò+èT™˜[[Y0‚ "¿%>áQŠá­3´oph„D¬_Æ¥#‚ ò°Hâƒ~xPp(êj{[+–qDŒ/ŸõJþÞo›Ïï2½MŸ… ¢!r&9rÄæÍ›RRRF ¶zÕJ!|êÔÉü1QQQsçüÞ¹sÇAlÚ´‘Dn‘””,“%“ú%‚( º†a=&6^÷]àû…úu°·eAD~µ4êjÔØ,ãd\ße¬�jˆè&Z¯ª�M9ãøúú†‡‡‹D¢²åÊ;vŒ†‡…]ºtÉݽrrrò´i?Þ¹{gÔÈÑmÚ¶]³fõÿma‘+‡„[fv¸A‘û ÒŽŽŽÕ1rjjjl\©_‚ ˆüêjÔØ2YË âè¿cÍ'˜f`¿�s>s¸úeŠ™€ �SÐx ûø¢éù±¬Ð¶m»C‡yzz–+WîÚµk0â¶jÕêÉ“'wîÜÞ¸qs•*U'!!aÛ¶­_~9„DΓ(“Ñ{¿ATÚºOXeEVN‚È R õº•4Åt�;:&ÖÆÚ2C{e~ú¬\ nÝz6ÖÖW¯^�¾rõJýúõ-,,^½|�ŸöïÛ{ð |€õ•Ë—ÃÂÃCCCmmÉ^KADæ‰O�ÚXgæ�2‚ 2toRRRdTL||lU))…M‹Dz‰±±‘¥…™X,&%œ½˜šGDF± "Θû”�¯÷+”ÍÔ:,eþG'pÊWÿwÿ2¾,pÖæ�‰D­[·�4hð­[7øáG¦pùâ¯c±bD®õqhggch AçŸ.RRR¤‰‰±±ñÞ¾¬,Ìll¬ñkk‡IDATHg#¨±3±R]† /»© ¬¢~åÜTDÎmÛµòøñÅ‹“d²æÍ[ ¤bE7üíܹ˘1cñ™0a‭­mA… h­£¿ñòòBŽŸ<½uû.–Yö8ìåí£øøé³3ç/² r÷Þƒûaã½—÷½ûXÎ %]pï?e”ÆËÌpGvï=�¡]bbbOž>«cäˆðˆ�›·©*çð{oïÓgϳœD÷<×x¶A„ŽÈd2ÿAÉ))e\JØÙZ>õËþÂ9!!aÃæ­OŸ=/SºtE×ÿWdðU^¸xY$Òoß®u‹fMr䨉ÔTë©D"ùqÊD!&|Ñ177Û³ï L¹“ü对³`’Ó˜ê1ËÛÇ·k玎Ž[·É�Øý¾èU¿®Üpxóö�‡ŽÆÇÅ׬QmðÀ~HVå(m[·D"¨åž¿xåëç×°~Ý>½zàXB´m;vÃiùäÙóÇ�Ÿ~7~,B>|ؽwxDΡwÏîL>°3é¿m;<|ŒèÛ»‡Ê0æØ¸¸ ›þ{ýÚÃÂÂçÀ‡õ"AœÌ”uêÔÔ¿¯Š‘Q㯸ü‹—®H¥‰�ÖÃI†„†þ¹`ITt4ògÔˆ¡n]5î—õ•«×MLM:wh§r—‘9Ê9Œzá╱£G<ñòêõ›†††·nß©RÙ½{×Îk×oÂMoÖ¬q¿>½ä $d«¢T(_nø�Aÿ_ºìÝ{/”¨ñãFcÅ d‰âíÚ´JMMýu朿üxöüEíy®ñlÕËÛªµZ·lŽ£ûúù/_±zîì0✿x9>>¾sÇöŒ ¢£˜n=^"ë¢~/^¼ˆ¿—.]úí·ßXÁ—œl›ñ±Ð<+Z´hÁ2ß] Óé23 VÊ8& `¢‰,e’ê‚ÀLáû•«ßÚòhÚY»v½Æð“'O+�8q>Ê!¥J¹lظ)..Ïw QX< ß¯³æÔªYBE ^»aÓØQ#\J•ÚððÚ ›¿ûf¬ð+ìÊK—­hÒ¸!"Ü{ððïe+çÎþÕÈÈHˆ°uÇnüýsÎL?ÿ€«ÖÕ¬Y�)F_»~sʤïdIIKþùש˜#´qllÜí»÷F5ÜÙù3Û\\\¼�AR«–Í££c GŽu”V =þ~ÂøD©ô�ù‹ªU­òûÌ_ž¿|y 9´ù¿³gülna¾iË6(meg2? “¿|wçÞý‰ß~-‘ˆÿ]¹Ö½ÒK¤#Dë×·WDD¤«kùæM›ð�;wïOúî›°ððEK—Õ¬Q½l™Ò;÷ìÇYA†A¤­Z³ç \y;~ÊÒÒòŸ%ó¡÷=º~ã–±£¾*îä¸aÓÖ#ÇNvëÒQˆ¯ñ×Ûwî]¸teâ·ãDz¢Õë6^¾r­YÓÆ8�EK—ÿ1{T¥Æ½ cqiÓ~˜¤‡½ÖnP¹ûuëÔVÎa™,)2J>×Eb¢ìþý‡_�Õ«{׋ÿ^¹zýwãǤ$§Ìþã¯æM;8Ø/ûwu³&�F�~æì…Uk7þ0y‚�¦sÉ/_½NNIééAH‡††Bûùùã ´ç¹Æ³ÕXÞŠ9:¾|õ‡À9#Ûatxöüeó¦�AD½w¹û78¬ŒKúsA³µlÙ²…ÈÅ .h”m°k£=Ek¸ºW G\¼xñ×_­b+Ï+ìl­ßyù™›™HtÔÀȇY³f væÌ™º›TöUI5oÞ\w1¼|ùò{÷îi‰P»víñãdzüM&§)³Yj&šÅD£™hƒbÀóYù†üë,ùOˆ�ÓÀLê— =ð²Â§á„öR„C’¸²{%33Ó�ýû>}úNáד’“;¶okbbÜ´qC[´4ï½”Ó„#tÀ}à„ÒkP¿._záÖ�{ð3ÛÛÛw*ß\ª®Mjia×®ö3Füb/8~cã⢢£gÌšËqnÕ«UQŽ•¸eëŽIS§ÁWܽkg·Š®pºÞ¼}çÁ¹F�OHP�@ã¯x+KKf©:°Mã^��ÁpØò¸LgL>™$�«pÒòm4êüý&Mù‰Â- )+ì uêáá Õê^É ÒîYˆÕõë1ÕlTÍs�g«±¼Áÿ � « vÖt|Ô°}ØX[+�D ‚(‚ –ŽO�ÚÛYë :�os ¬1š™™Ù_ýõÃ?`»qãÆ‡2dHÙ²e!†W¬X²eËÈã9sæ ñýé§Ÿ`÷¬V­Úùóç}||FŽéííÝ¥K—õë×oذaòäÉð$÷ÝwP˜7nœ;w.êí tìØ‘eèZ‡„!+tñ_ºtIÙå˽µ:znqˆ#ä¡2ܯŽD¸‹X'0|¿Mš4Ù½{·–8°Ahw«€¼Åß©S§ª„ÏŸ?™£ž-¤-€q?Ò[�Zþ>ðFùš­P0ìËA3ŸÙÆ=�v¶6¡¡aü'´pâAZ‘ílm•­¿á‘vJë„C8Áø ̇�„‡ŒY£ZÕÍ›ÂAÊ2KæRhÒ¨>¾~þ›¶l;vâT�n]X¦HM»Æ61Fóæü––ú²07?n4¬ã×nÜZ¼tùò¿–.]ÊÊʲÿ½5Æ×ø«��-Ä^9V†)Få•ÓÚËÆÆZ¸YáŸÛì3�­­Mi—R3ý)­°†œ=w~ïa_Dž¼xùú½—7,,=4ž­Æò†kwrr¼}÷ÎÙ+ML|ñò­™DD‡ûaó540`9œ½P³vvr96 t>|ˆm___´JÍš5›4iðÍ›7Ñ(V¬ØæÍ›ÿý÷¦M›Â zæÌˆá+W®Ô¬Yøå˗МŸaaa�Çê#O!U^N†’ÔE—H� <7ÒÕÀê£�q¦à\î »ã´…_Yž‚øñÇñ—Û/8P¿Ä_–3¤9ö@"Î_s®Dæ ’\8€ðèÞ­ó•k7¸Ìƒ�€´ “kàSgΕr.©>eʸ¿¢¨X±Âñ“§‘TDDäµvsww;sîK„:rìêõ›ºœ´M`Pž�‰üüV­Ý€]J–(^®l™ää–)à«„Û3­_qÉȱ“§ÏâÄ úÖ¬Ûèãã«aϾƒ÷<‚Í»v­úbý”ÔÔJ]ïܽÏÝžøiÇ®½Êñ5þZ¥²ûÉSg¡¢“SR–¯\sæ¬ÜÞlfjƒÛ‘Ö^•Ü\O�9/“ÁQ�tZÉÉÿÿKSÊa)QÜ)**úÙsù å àà¥ÿ¬P!Ê”) ·LL 9Nàî½è èÐÓx¶i•7äùá£'*»W¶kùr'NŸå£¬_¿ñàçFQ‘¿œššîøg¸þ¸2ÔS‚U÷ FGGC/õéÓÇÙÙÙÅÅ¥U«V<r·dÉÿÏ‚ ïe@@@PPЩS§z÷–[c'Nœ(‘H¶nÝúèÑ#xƒÅ \»v !û÷ï‡DüðáÓ'OÔO’KJa42ßÐÅ•ŠËOQ¨_íÑøødõ7x¹|ÕîÆ_$‡Oó1Ï<Í´^«ÖÈÓ§Oïܹ3\+ˆ€hLg {á½W–»\ý"0‡Ü¿L‹ØÜÌ$,<ŠD%™…‚V-šÝº}‡o»”r†§tÎ ÐxX[[}ûõå˜h½²vÃæ�[¶¢aýÕ0s33åÇ ^²lÅå«?@ž5¬_/6.�m[·ôóóÿ~êÏh]K9—hצ•.gUÙÝíè‰SßNœºtÑŸ™H¡¸S1œ-v177ÃgÜè‘,S4¨_wõº�þS&}§1ˆ¡_þó懲—®Bº5mÜ dÉϦ�k}ÍúM{’&HûõímdhèâRªs§ö³çþ…FÚÐÀpܘ¯”ãküµuËæ¸ü)Ó~…¾¢kùV-›1ù°4ÓÆ Lûeæøq£ Õ÷ú{gÅÖ‡ñ¡D@)DT »»±»½v×õÚØÝÝÝ v"¢¢ "!H÷.|ïîÑùö²Ë‚×øÿ܇çÌ™3çÌÌžç=ï‰&�¼ í9 M Ô�ˆüœíÌ%ï0—7ð¥2`ó¶�’¥B»IDATéiPãB�N²yÑJŠŠFF¬Ã6ÌqU5ÕáWÊÜ �Vl×›·�C?Áí·²ü[Û‡��HŒÊàäX‘Ú 32<<Â?àµššª³££†Æ×n¬UEEEy¢A‡UžœÊ"ˆ_ E4kÊ×ÀK–,ÉIB³~³<Ы•+WîÔ©Ó¨Q£ÜÜÜøW¶ù#Pb›6m.^¼xþüù={D ¹·nÝZWW·AƒúúÙ»d§¤¤¨««kZµj•©©©Ì“�=;[ ¿Éå�LñDŒrð3WA�²ŽßÙ&¾ÂfÞ…+³s:·¼'."˜÷ ÑË6™ú•4„ 9mŸ£bSÓò4^œ ~NÔÕT� ‹å´÷M`°E).?‡„•³¦wŽŸˆ´´4éé‘xàvªç¼7%%•×ä�xƒ¹''O™ÀóTúöyr@z•ßB埆Lp»ØŒY2÷&'§à†dë‹…H~ ³ÌC²íŠÈä§ãbd{Ñ‘> ¾±N,ç“ÏõÒdÂ^_ }•øœÎV~}“$�㾈ÂBæÓÏs™‘9=äU»VÍ÷ïƒâܪU½tåº×âð“Ùðð»÷Aöö÷<¬]«ZI�ØçÆ­³.ÕªáÅ>sÚ$üôdFŠzC<\×½ÖçÏQ¾~/çÍš†F™ÄĤ™sæ—-[¦xq}´˜X[Y :ÙÊ,‹ ~!ðôßÂ"Ñ ©¡.ï�‰‡¤œmWÿþýË—/ŸM2á÷õåË6)~V¡¡¡Å‹¿råÊ‚ >þüôéSd‚ø€€€’%KB?�9rÈ�!C‡…ž?þ½{÷zöì‰d�Ó8»Œ$¦{ÈÓ�yŸ™9%5õóç/¦&%ð?²ôüÜ×üØ]&†Ù&?1X^0?Öw¦aÀàMJJÊu °––Ö¶mÛ¸|ÂŒ_ò«~ ð>/o,ýb:1± ¤�‰_¨_ÔaŽø­‘/å«iõˉfTRÊIÊAR  ÖçŠûnr•ˆòo—L¡+GýÊÜ+óò³5óK•k÷ã¨_NüÆÃ9�­zž›0Hýþ¢´mÕâÞƒ‡ïƒ‚;´ks÷Þƒ˜ØØ¨(Áý�Ο�Wd(Û©3ç4lPÕõɳç�ÔkPO4NïôÙó‰IIÅôôdFÂø9|›¤mö¼¯ßÂö¾qÓÊÊbè Q/ ]mˆ^BB>Ê,‹#ˆ_ ¶@@RR²|\D@4zxx°uzp&�»UªT±´´äÅ-lä^½zá?²¹sçBËÙØØ  ·mÛ¶rÔ/—éËHJJÁM�ùS¿¼ßË”ðL1l“)á¼Û¿ÌL–y†oÞ¼144„ŽpFF®ZñÏx¤È{åB7ܳ¤äÔ„Ää �0×9±â§@AAEYIG[SK“f[%‚ þ�UìA¾JÏH_º|‹KKK�ùchhТY“M[wÀݵ·³­]³†žžÈƒ’YÆÊòÄ©3�ï‚�[xDdZZ"CC?Ù”ýºb–ªÚ×—œÊââ×� åÕÑÖ ‹ˆ*®¯WXrkË–-Ò‘’³?¤¤¤°4ì_>ÞËË f¯d_¡úõë³³ž7ot#,ëÂ�À™ÇÅ'š”4ä6K"=ç3¸Ëñòz¹üÀrà$Æ'›˜˜LŸ>ÝÚÚšOƒGî¾™¦´4¼͉ey¾–&–†÷Ë}ë ]¤] s÷ "HHAAdCYIÉÜÌ´_Ÿž| [b­¬u™ófxòôÙôYóæÌœZ¬˜žÌÈÝ{êêêL7ZYYyá’å,55µ4©5Ks*‹ ~- ®TT”aT|ŽŽ)i”c ŽŽŽNNcS±‹+ŒklÓ¦ '眸cZ®ÙâÄøŠå 0Î ¼úåEoQk`ê9CAQì*؆„„&&&•02ÒÕÕõ}ñ’½7Ϙý÷³ç¾V–mZ·ÔÐP�;N2##"#��Kâu3**:,,<‹û:ÑýÝ{÷SÅn0³ü²â—UWOW;#=ãKL\Niä I½rå ÷Ë‚KÆ…ãòåü~³­rÄäeÁÔo¶L¸�+þÉÆ§OŸ>þœßd æ%Oœ³¦ó2~8'/^œMýJÏ ]è¨3‚ ‚ ˆ?�âÅõöï³vÃfu5u�PФQféôèÖeëŽÝÇOž‰OHp¬T±\Yëœ"Û¶n¹aóÖ3g/¨««Áf+œ»T­ì÷ÒÜÄ©ÚZZšššÅ‹Ë)‹ ~-PoY?ÛâúzÑPƒ�‘�¾´¬"†û�€ª„÷›žža ¯ÇFÛæô†U+©uó;ÃV®…Â\ä±}�œü=HÏz…Í"}¾)dÑÈ^âO…f�&‚ø(”Y å#s¾ô¤¤$55µl� ¥#ñ&_WGç_«µ¥¤¤ˆT‚‚âñ“§ñ2ÚµKGùeį³Q·cãPý“áˆjii¨©ªþ~ýp™iéIIÉqñ‰ÚZšÅô´™úÍéJÙØZÀ|`~þç‚Ù¿ü„Ò²LÒÅ#,Ž=úøñc255UA¼3[‚-ßÀÂò<3YûèÑ#9i~°ú-ä.äAü ü¸Ð‰Žþòøé3¼•:9V,®¯ÏÄïd³‚YàwU%¬×7û+§çs6`Þró6 ,OGGGÉ–¸iÓ¦AýNŸ>�“8áBŸú«è ˜ ‚ â—ÇÀ x£õ8‚ø­á5aÖ7¸ß…opùY¾p¥¯džhk�\#J4½q¿5$€ â¿$5-íýû  ¶å9‚ ‚ ˆ? ^þÞ�Rª)ëX£?ÕsåÊ•%§}–ßCû÷à»pzzú™³ç=zœ�˜hjbܺU« l9‚ø#¹|õú‘c'HKKSVVf�g^‹çË_<=6&vÛŽ=‹þ™ÃAAü©Ð¬æ?öšÊtoûöíùx6A7÷»Sp|êÔéÉS§ÅÇÅ»¹¹êé»zíº×ò•Ú·›2y¢™™÷£€ß»w§NdN5A?Œ†õëâƒÀ¯•uÜk¹T©ÌAAÄOšàÖ°‰¸™÷Ž6A÷P@ õ;pðО=ºO›6EOW—E>xøpÚô™ÃGŒÚ±c+)‡Ž�,ôÿɯú%ˆŸœ{÷úܸ=ú¯a“Æ�yépñòUDÞ¼}÷Á£Ç“&Œ5bè•kÞ,ezzÆ©3çú÷é¹hþEųç/š™™~ùΉ§ �(eþãúVAAÄïGAð™³çâãâáýJï‚9rÄÊU«cã⸑˜˜Ø´yËã'N²Íõ6ö0�“'Oõí7àì¹ónÕk99W�½zÍœ9»aƒú K—z>tñ ‰‰wï݇®†íœ’’2sÖ|þ™?OòØëÞ>£ÇxΞ9ÝÉÉéØñã={÷¹p™ÙçÏQêÖÕcÇö­ÖÖÖ·oßã9nîœÙåmlÖoØÔ¯ßÀ“'ŽþB«]¿aaF� Y¸„‘QXxŸK”0b‘Á,�••øö�{©ii±±qFF¢£ €÷î?Ô¼iã'Ï|Û·m%§ ¸øDŽ âÏFOW›#‚ ¹DC‹êéËi/Ɖ \X¶ÌkÕê5üæ­×MLL<<:=vlé2¯OŸÂzôèæèX‰í�‹‹[»z% ¬££Ó©³ÇìY3$sÛ´ió �z÷îʼn–x®ôì¹ï¡ÃGF�ɉ&øvž>}*K¶v݆aC‡B#¼fõ Gçª�Ÿÿ=ÁÊU«Ž�‰Íc>_¾|y÷þ=ÿI¥Ú)GIDATHMäãsãÆÅK—QÄüùóV­Yûúõ–jÁs܄ϟ£BBB&MžÒ°AƒlkÿvêØaÅÊU÷î?HMM…}ÝÛ§eËÒ…"Ù2¯p°�·Ï ër¶OŸ>ã¢È€Ê•ìËÀPUUU’Z{MCC]Rýž9waí†Í]:Ñò`AAQÄfff;vl]³fÝÏqø°H##Cx¿P¿sæý�ÍaÆäšÏ¦Í[ðá7W­ð‚d?~ÒäIЉéÒ¹£ç¸ñ'ŽÅÞòåmì«Vs nnn+W,Ë–›‡GçÐOŸ ò9*ªŒ•ÕšU+ìeômîÖÕãSè§þýEEGëééÍ™=ÓÉÉ‘#ˆŸ�ªU*ש]K[[‹#‚ ‚ â»QÈÊÊ⾃ظ8ا‰ ÆÆÆü¸ßµk×COŸ:eøð¡\!±gï¾�»v_8w&###--�u„Î ˜Ò9­Ò$ItttñâÅ©ÿóË›À`‹R&ù:$8$¬œµGAü:È|Úãy.3²¨ò‰‰‰{öìiÓ¦M§ Í•gϞݾ}{èоq½yóÆÐÐP___2òÊ•+xÝjÚ´)WÄÆÆ8p C‡ü\§?!þþþwîÜéׯŸÌ½»vírtt¬T©WHîæ‘¼Š“'O*++7oÞ\:Ùëׯ½½½Èý"úý—æÜ¹sõêÕCA9¥áoi�«ôÞ½{mmm+W®Ì…GÞç Øš§˜ž^Ý:î°m%g½‚÷;cÚÔ"–***òÕ/÷m)¦\100 õKAD®ÄÅÅ)H`ddÔ¾}{??¿üæƒÆ÷!C†r’/âüæÆ�ÿú믘˜.?à4ºuëncc3 L™2/^ä÷nÞ¼yÍš5\!�Kæ ‰;bX_¾¨~oXXb†.yH•*Uºví*'OŸQ£Få´w„ —.]â �½Ã<’W1yòäiÓ¦ÉL†»7lذÜ2û×}þÁ †£žó›…~ÿ³�Õ¶mÛ›7oòkÄÈ„¿¥®ÒS§N•¬«ÄÅ÷ àœ€ÎKè¼ãìä4 ?Ž ‚ â?¢]»vû÷ïß·oÌŸ«W¯ÂÁ å~,ÐÝ»wç7/^ìëë›Í•OVVVŸ>}Ο??hР'Ož@ú–+W®eË–ÇŽã~æ‹aa{{û’%KÂç÷^»v�ÿËHJJ‚O^¿~}îO_ë™3g¸ï@ò>ÿ`PÃ%[yŠšS§NõêÕëðáÃuêÔ‘“ìûo)ñ“PÀ1À?;» øpAAÿ]Äp¢iG<<==aŸîرcÊ”)܇¦¦f… ù{AZ¹råéÓ§�9›ÅÔ«W¯I“&³fÍ‚Âç~5êÖ­{ëÖ-~ þþþ°‚MÄk^Þ»wO(â¹? 333ŽÈŸ>}²·Ï}ITº¥¿ EåAAüÆÀ5­Zµ*óÿþûïF�Iî…<îÙ³' /X°ÀÙÙª ¾k¶¾ÊÇ�wuuÕÕÕupp˜3g?3 6�=:~üøÒ¥Kÿõ×_iiiœXx/\¸–&DoÇŽ³mÛ¶Úµkóz{{wêÔÉÐÐ9@™ é3‡‰Ýºuk^ýeee”Ž£$ mœ.§ÝªU+Éx�¢‘’rË–-’9c³aÆŊ«Q£Æ®]»8YìÞ½»R¥JpžÆEMž<¹råÊpqѲÀ¹W®\Á&''óGuîÜ79==ñ×Ä °hÑ"삵{ÿþ}þJ!€qóuttxÙ–*UªlÙ²<›8Üd(ynïß¿oÑ¢…žžœ@éóŸ;w®µµ5Ž:t¨ä�Ý´iSƒ Š/Þ¸qã�;wJrýúuÜ+###—3fÈü:âããqàðáóÍË÷5Û á‘#G¢ !€ZÔ¿ | h¹xùò¥t¶8IÜFú#F =N·133“O†¦Ä@þ¡V¯^µ‘2ï3'÷«Ï ÔÃcÇŽáZÌÍÍq¨É¬›qN?™›7o¢DÔpÔspùù½ÿýúõÃWŒ|ר“-[¶üøñc¶Ó»téJÁýùçŸ`¯ŸŸî<.' g8^¼ÞM¶[*‰œJ…kÇe¢Fá 0b‚("HAAè7555 A/_¾üêÕ+�·sèR¨G„—,Y2uêT¸”kÖ¬-/0 È<8®UªT�–hÞ¼9$³]Ó¦M‹ŽŽ†ö€ÂY·n݉'?`ÀlªªªÂ­Å;7'^QòíÛ·ì¨gÏžá-?55uÅŠm۶ݰaCß¾}³�3T–¯¯o­Zµ²Å׬YçÃ{\/^¼Xºt)T˃�‹ÇK<ô°’’ÒªU« êp{÷îe»¶nÝ:hÐ ;;»õë×CöôîÝ[Z#á*�b-Ø„ŠÃQÐT(+!!7Î-'ž* 7SRBcDFFB¨ãÂË‹A·‚Û׬“3ÂAAA±¸ ˆ„fÇÂfö/’á䡽gÏž aƒÓÃòE@·à2!qþPk8ÿ³gÏò{‘÷ ßN_.t;‹‡ú‚.‚òÁwdccƒï—¿!(g…‰¯-¨ÙF&ƒ””œŠ^¼xq¶‰ið]¸p�ÿr‘fÇŽÕªUC¸M›6>>>8¨Ä¸¸8ÈuÉÆÄŒMö�ãb:„/kÞ¼y�|8>n. ÊsãÆ�Ð{h=¹sçŽÌû,ç«—j2 ½xñ"J2dÈÁƒq28¥œ~2h§@‰¨á¬KN À÷?$$äðáøi&L@Ñh‘îÑ Ñ‹R455¡x¨X±"ô9Ø·†ï Müèqþ–J"§R¡D4ëhiiáÜ�'î-¾,Žø øeº@AAü<àíoäLÐâmþÜö^£ ®Þ}!K&‹�àÄþ-^‘!Õ˜´Ã›1ß/ÇïÞ½ƒ×—å%qÈŽ „ þ*G˜õÄÎÆ˜1cœœœ°*›Ì�‚І‹Ë§AVxe‡L•uQQQ�=‚«†0Ü3äÌò5j.2Ô„�ºº:bºuëy6lØ0( 8i융µµ!? qù<¡H»wïGŽÉiÜ¥={ö@u³Ñ¹8"9œ:u*§³RTTÄ…ÃCæÄÝÑY$¬xèU|hJ@¦¦¦�1�O¬5·úîݻ˗/GØËË WmφLÃy†/[r�+LœNa\¾;\5?‹2nÅ�pÕ8ψˆˆóçÏC²â4à&CÒ³S‚rƒÃáH9vìXE|Å8mìutt„p…þÇy²<322 þáÇž;w,ÛÅò•ŠU Ü(œê š]ЮÑ[¦LÄ»ººâzá�£‘EæMƒÎ<}ú4t/*'®i¸p¾qa$€c�0NŽ+T7Ôšô}Îé«çrõíÆ�ì!àq¸Üy™?cccüECj²d%/ÀýçÄ-)'OžÄ�ws€rfíP|¶¨98 ’÷�‡¦–•+Wâ·ÆNÇ�Ç7uI#§Rá‹c¦:«ø¾ðsøÎõwˆB�`‚ ‚ ˆ<�—u¼mã/” :777èij÷r~)HPXŽx•‡ikKrΪ=zðaõ ýŠ”p‡xC à5š#·›7oÊ?7¼XC²âÕŸ©_NÜmþ¡¤úåÄ–#þB½ÈÏ òƒ©_V:þ2+ÒºZ=PŒ­­-¤2¬6´@$ð½¾Á²eË$'¼… mܸñæÍ›YÏm€³-Q¢?7ô v!’Ë?8C6 ¥  +†0n,<=v HSºtixæìä!À8±OËç#ùí@Úá’!Þø"xá„0»�=¸jÉù¥†�{óæ ¾ŽÇ�ã+`âÀ'„ã/#nׇà3Ë\ß„U*Ô%¶‰@£F�ŒŒŒ Ä €¡¦à™ã*Xßx9“±=}ú÷™©_N¬è${¿£1ê™@øá^áæä”UN_=—(Ž—÷¨Õ8Üóœ~29e’ßûÏ6Ñ:ÀÔ/; þ-j'ØàhÕ ãê`_£ „sJŸS¥B@[®‘¯87>Lü·�LA‘'ðö » ¼ÄÀ‚ŸÃKè%XŽ?~433ÃÛ<³¤ð͉�>6•�—æ!C†\¼xÒWEE~ dYð]ù°®®.ô'¼ÜãÕ_2™@·À%{ùò¥¤À–&[éøË„:'Ò $#7¦¬­­sÊ�õ Å%ó1þþþÙÒc3,,¬ÝD¡¢g̘Á‰'^ºt)Ë `wHDÂ6äþý°“g ¸Ç’'ƒK†”B['uCØ0ZÖa[òûeW„xè.|’ý†”ìN¼ð,'®H’#r³�J…Ë G²'Nð=äaÃÎ�;YAeéèèpâæ�œ2A%ÌvŸ%ïÀóçÏaÝ?xðn*în—̬ä|õLòÉ!Û Çɰ߅̟LNä÷þÛØØp²ªq®¿#ä<}úô�;wâÄ WYArnoN• w âYòÎãöÒ4Z? ÔAA‘' <î‹9}ú´§§§äë5d´%Þã>|øùógf²1Ý%9nPrøx0 ÷íÛÉù�×î\å«àžá Ž¢üdPÚvvvÒF+lRH2ùë –,YâyÏž=™ÿv+!rüÀÑ£GÃ<3f ´‹±´´Ìf6bS___OO�m2oS:, Ì=�¶ hEÞêÄYÁæsb�—`Šæ¤E嬋ó=Ý\å77È)TrÄ’ü�Äï9’sVçiñÉ!�Ó.éû,ùÕoÙ²%'ÇÕÎÎ? ~SúžËÿÉ€¼«_Nîý/95îÈAN¥*X�"ŠÀDÑý õ«È)(Ù­"UÐQPÒQâB…(N¥>G˜ ‚ø‘ôèѦÜÁƒË•+ÇÄŸÁ”)SÆ�'së�–œô?ýdˆÿŠ‚à´´´K—.Ëï;�†ÉÆ�Éi›$þoÅê×ìÉQ”ùJ€BU*¼a˜ ‚ òË“'O8‚øÃP#'ÁÇsÚE?â¿"ß8==½m»Ož>Ë5eeg§ãÇŽ�þÃÉ ÈR)ùCÍXe3¥ŒW�#‚ ‚ ‚�$ßøâÅKP¿áŸBrMilZ ‰[¶l!?YJJJpð ‹ÒüŒpßÉuo%EÅÚµkqÄÏ@ Wtã~e¢ £À½â‚ ‚ ‚ ²‘ïe�øžÏk×®_³v]Ë$""²{ÏÞ•œz÷釿}úöÿü9ŠûnŽ;vòÔiŽø‰yðLµ¢ ûU7ì0²CTŒ¼¯~é¶%8„#‚ ‚ ‚øþËu€ÇŽ_LOïå‹ç÷îÞzñü©ššÚXÏÜ Ë•˽/ZÀ?=OŽ=�¸yxå‘û¾÷æoø[NJ¯^¾¾AAAÄw�o̯a5lØ�áÆæ1±L^ú½¬U«&›â\CCc¹×Ò¿çÍa»bccÇŒçèT¥I³»÷ìe‘'OžêÛoÀÖ­Û�+»Àž=gî? ò¹­ß°qÔè±ü=ÁÒeËY¤ï‹8Ķ‚C£ÆM9Ê'FVmÚ¶·¯è4t؈°ðp™šš:nüÄJŽ•‘ÿô³ÒÓÓ9¢(Ñ×ÕǧŽK÷*î‘Ñ‘,òâ­‹î=ÝÍëš ˜> %-1µº×ŒŽ‰ž¸tBß)}°ð> qÿF†n•Û;#1GAA‘7ò-€5jèìählZ*×’!±œ¬êÕ«;ÿŸÇOœLIéhàÒ¥Eë°gff:<òóçM›Ö#º�@Là‡·c»tlÜáØêãoƒßŒü{$"WO_£«­;¤Ë�Ƀ¦`sÜ"OK3ËKÛ.×­V·Çøî¨-AAADÈ÷$X0l�;’—e� ~å/`=ÿï¹B¡pÔ¨1Ð0nn®P¤Ú·Ã�¾¾/>|ôìé#---Î… �غu[³¦MØQ›6®WV�¶‘‘ѨÄÄçÏ}+…††¾zвEsÉü�>jff6þ<äéì줫§›�øµë6 :´[W„׬^áè\õñ“§®Õ\üüüÝÜܬ­­îìéŒ r€‹–þSû™–0…÷ël笩!ZmüŒ÷™òV¶ƒ» Axê�i]ÆtÞ4g““­“ŠŠŠ•yKÄŸZ÷u€·šªÚê=«?„}€æ‚ ‚ ‚ r£ ëçùýŸ�ººúŠåËfÏšáãsãÐá£�ýèÑãæÏó}ñ"1)iÁÂÅ, [¿—/Y¸L+¦~�ªªjóæÍÎ_¸|þÂÅ:uêèëëKæ�|\]]øÓ€ºf�ËW®Ž��e›111~/ü €»té4zôØ—þþ ë×oÕª…¡¡!G%~§_B#0cåôVC[½¿ä÷Öï‘ßC“ÚÆˆLLNÄ߈¨ˆ’†%%�:rñðÂM ýßù§¥§qâþAAAD(Úu€�=,ßÅŠkݺ>6nš7oþ¬™ÓY�hS– y³¦Ð®_ ç‹êvíÚΚ5gâ„ñçÏ_€�œ-猌 eeÙks[YZòù�÷ëPÑ�N;89V:rôØ®Ý{fΚ½aÃ:Þv&Š”ºÕê-Ø´ ":6o£�Îl8+�&+K$tã“â{Œï±fÆÚ^m{}øôÁ¶yyŽ ‚ ‚ "oí:À—.]Îi`ø®ƒ‡ [¹r¹qɯþ^•*•ñW(ÚÛÙ G}~þÜ÷éÓgÛ·mɶ×ÁÁáÎ�;ü¦¯¯oZzzÕ*UªWw«Sǽ¿¾Ò™—+WnÒÄ øL™:}ýú $€‹”ÐÈPÜüw!� 6ýcnlnbdRßµþ?æ_º}©žk½­G¶žºvòäÚSøvL Mn=¹Õ®Q{4Ž3…†ú¨'«÷¬â‚ ‚ ‚ ò̶°¾¾~BB¢ç¸ !!"-�¿óÿYèææª©©éììTLOoê´1bÚ³W_™™())µjÙrü„‰uëÖ þ7-[4{ôøñ–­Û š?~Ò©s×  `Nìô.óZñàáC�@àísúœíS±¡Ý¨qÓiÓg¦¥¥Á:·²²âˆ¢¤f×V -Û o# ØÈÞj•ª-·°ï”>Ú•µ ŠÇôËÚ&Ftqáæ…Ž£:–4,9²ç(�±ƵJjkêpAAAy¦Çç <Û¡ÃGTs«©ª¢’!Ô¬Q}Ãúµœx:è]»¶�9ÆÑ© âkת¹fuŽ^_»vm¶mß1jÔHé]°s7¬[;gÞßÓgÌÒÐPï×·oûvmß­«Ç§ÐOýûŠŠŽÖÓÓ›3{¦““#â-\0rô˜]¶{ ««¹T]ðÏ|Ž(Ë;¦ûfÈÜ5Äc(>1ñ1úºÿÑÝ»]|àý"¼dÂ’¹£æ**(ª©ªÍ9‡#ˆ¢!:1ëIpæÇh¹ÓýÉm6æ ÎŠÚ AAñ3¡�•Ï·»Ó§Ï 4$�] 7o\ŸShžÄÄÄà,-,¤-ܤ¤$€ð„¹ï#..NGG‡ïPÍ]¼xñl�«ããÔ ­rºL䑤m)ª.*Ü�%ýA†V_�\“½ ¶(eÂå‡à�°rÖÜoM\Zz@LlxR ÷ûb¬¥Q^¿˜žšjN  ~O=æWúJ‚ÇJ«ÊJ¤�‰B'!!ñ]PpTô®è14(^ÆÒBGG›ûÅ‘ù´Çó\fäoÿ�'‚ø�(Àû|¾àF�Vvv‚¸Í5%’É_˜¡­­mog's—´$.°yeÆHGêêRÇÚÂ$«XVVB–‚Î�“(…rD�€úõþVZG»¶™1÷ûŸˆË¬cn’“†÷û�u(KœIC{%Ž ¨ßû�ž˜šW­ìÄ=ŸÂÂQ\µ*ο�&‚ FAÖ>vôp¡¬Lü d•ÍUl\gûÌøLÊÞ/Ô¯…®ì—Ý̬¬ôŒ uUU.Ïà�»@\l5ã2|ŒþÿóíKLl|Bb¶Åôtñá7¸MFAIDAT_¼ ر÷°‘¡Á„ÑCdfB…¼_¨_|ئ@ Àÿ·ÊÊymgIHLÒÖÒÄORIQ)/G±‚P¨£x­„ï$**JÎú‚ØËÞ+ðæ ««+3† ‚ ¾Ÿ‚ÈüW”kÇf‚`d–*|T† •Ì~„†‚™BÊýwÄÄĤ¦¦š|[g o¨¯^½úò勞žž���ŠŠ¼á¯_¿æW¨.V¬˜�� '^ÐëÅ‹ ÆÆÆ,&'„B¡¿¿?ʱ(‹-šýüùsœŸ‘•+WÎ)‡ð¤9ÞïË![/^Y6°/—g pHBrÊË�×ò6\Q |#4<§½¼r��‹‡²-®_,[¨âÞÝ:²ø³®^»qÇÔ¤dF†@f&2yôèÑ¡C‡8ñ¬...Í›7gñ���ëׯOIIéÞ½{õêÕ¿žFlìÆ�ß¼yS©R¥à�3gÎܸqã_Wda1tèP.7NŸ>]¢D‰jÕªqù�}œ˜¹¹¹dd£F�úöíÛ­[7®@ܽ{·k×®ïß¿çòÉÊ•+QhNRêï¿ÿÆíâ JÓ¦Mqb½{÷æ~>¢¢¿Hz¿ÇO_ÒÕÑjÜÀ=/Çz­ÞŸà9jÐÉ3—J4¬W+/GA?|ü”ûn®^½:wîÜ+W®HGâÄ+,↳¹'�œœPÉ¥c8‚ ‚( ò= 4Aä è=AÅô ¡Ò4+¡ 1džñJ€‚Pœ|‘Yt@!?~üèÑ£>|à#/^¼£L™2qqq—/_–Ÿäkrrr¶HHh`¼"ÿ‡Ê9üܹsPJH‰Q.‹ÔÔÔÔþ2 ãò˜/ÿö?Baü¿O’U˜™)癜–ÆÂéAâ7MŽÓ_u#K¾ñÜÅ”ôtN �03*>!§¢qJùÏÀP¹ÐºÙ>ˆämaœÀÔñ•±Ì߸A4L\¸p¡bÅŠfff‹-êÕ«"¡Üj×®ÍÚJ:tèpíÚ5D¢ý¢fÍšAAAÉ� 4@}000(+fÍš50Ç@>y)wܸqhIá~YðãZ»v­#ñ'ÁÃÿ\î‚Z‘œ’*ƒ*ŠF±4ñï"--Ý×/`üèÁp€;·oQÏ]Ô¶’šš–™™÷í7• õ³-,âããOœ8�†¹œà‘…ßÂj1Lëf‹Áy¾|ùÀwïÞÝ»wCv hø™ é�#‚ ˆ¼ñ_ÎMü @‹fég¥º¦ >()½SVŠ/*X¨+Z àýª««ÿW®]�5ð~ÆÏ¬ûv‡»»;þ–,YrûöíxURúzÒÒÒð>çèèiÊb PëÖ­+9j=""Nóë y>>0ŠK—.� ‘-´tdd$ê”Æ‹/P[Xƒ[·na³råʰ¦ùc‘ Š•³]»vüð(«K—.¡6lذ\¹r,2!!áüùó¨Ì�7æ»BÈŒäAqŸ>}Â.¶ùôéÓ;wî@å¶jÕ ¿hÉ”øIz³h@;έ~ýú’Uâbq]hPà#e^Z�nÞ¼ W¿þ·ÉÀï² ÷™5.H_tWLLŒ««+'nÿ GSîì}4p Á+119ãK䊘#'ÎÝ}ðTC]Í ¸þ¨a}á¬ù^*â> ¡a çNºxÅçKLìê�;±÷è‰ó&Æ%êÖvë?lB«ÒÎŽ êÖ˜·pU±bºQÑ1Ó'þ%Ýåá;A3 Dìœ99ÎÛÿåËÔÉeË–¡u¦cÇŽ¨ŠÙb €§N�Š_ÊŒ3ÐZ„_ÊÞ½{V®\Ù¢E‹Í›7ãÙÛ¶m[Ž ‚ rƒ`¢h�ÕÒÒ‚rÓw.¦ÛA[«¯F}�9Š@A(î¿ÀxÙå$VÀVVVnÚ´)ëò‡wt]É7lf8~x«æcðnrÿþ}ÞC†s¿á]¾4-ŽâÓã…ûãÇ�, w¥G�,Œ×né†8*III¥Jå>ƒÏœ}·Ž±nø�¿Zµ‹‰AŒšŠÊª¡O™püÎ=lzû¾(®£�;=G-<|Tæ!P¿“¶ílíZ êÆïÑ[w÷L»yÔp˜·OßI:¶]kG+K¨_ÜÆˆ˜Xö�Ò¾üäY«j.‹û÷™Ó£+\hé¢ÁÐM‹Hýz߼˸Âõ•�#Ðl¼D"‘ÐuPG�Š®õ.¿˜yÐ,Ò¯_?–Oß¾¢~éû÷ïŸ>}:K–,a6š§§ç¤I“>þŒ”�ü±ƒ ‚Û¶nÝ:ˆR>  Šýüü *!üƒ«T©rñâEDBg²> 2#yn߾ݤI¾ÝgË–-°OÑšsøðahË´o8ñ/k×®]¼Æï²—ñ ‘yîÜ9ýúõ  .úîÝ»Y¤ÌëBnн¡¡¡;vì@sî6_~qhž8räÓº2/áôéÓð'Yz4,]º”‚xõêÎ Ù" Ù¤ˆ€ñ{ùÚ­Es'Í™66))Ù?àíí{�J™›Îœ2zÊøá¬«B—­JL=XMb@>ÌᙓGµoÝäÀ‘ÓÚ4›:~D·N­-dã4 4FÈIƒÇš*ð]à™ÆÚz¤cðxïܹ³¾¾>ªžŠxâ+FÃ"ÐT$?‚ ‚à!˜ Šœ7oÞ<{ö RN…d<Þð$ÇOâ…›õR†û!äääE;k6öûäÉ“ƒ†Ù ñ6räHÈ .ÿ +Ô¢ 6pâé÷!8Ñ&âíí …aéëë»hÑ"T’ƒ¢Æ¢:5ð¯¿þbƒÉq’ööö8xÈ<`&*ÎgذaÀI†5j„4”$t2"!Ý‘ÊPf$;+ˆ|ÈÔC‡1àbQèðá¢îÿüóî ï_»v µ©©)Û„ï7{ß¾}ã|àÖ6kÖŒeº)¡`Ñ0$óºðË;v,Îé‘?O¸ÁØÅ‰‡Óã(üݳgkÀ’s Ùpƒ[ ß‚�+z>} ·,mÎ~ïÖe,>††'$&š‹ó£Ì$‡™Þœ^öå^ºzÃÏÿõï[ ‰I榅ÙCíË—/oß¾ýÙ³gQÕñ—õRÉ*?{8pĈ2c¤Á7‚ª‹vÔm4ÐpA‘HD‘cee…7xøc0¦:uê$sNlvéÒ……!~à÷â]/µP)—/_®S§Ž‘‘Ô‚Bn2 ’Ú†õ‹æ�ü†}W·n].?èii~ŒŠ674¸öÜ×´¸ médeÕ¯Qƒ9=»BÞ} ó�ö5Üz5¨;lÍÆý“<Ë—ôÿðQ ÌTVR|ø~D«æéH�d°yF@IQ1UÐPU]3ìÿ/µAÁSºtÐVWïëµêå‡é¢%IJMSUVRQVŽMJ*¦¥·YKCý{l½ÚÕ¹Âßì•+WÔÔÔzõêÅ”Ú>2Ä×Î}�à—c6>ìÍ€€|³‹/†V¼yóf¶ŽÁyNiÛ¶mùÞ˰‘Ÿ>}âììüäÉøi%J”€ G iÓ¦,MRRÒÇ�---¹oëÉáp¤‡±É0?ªF\t´è{„5 ­Î"ëׯÓ5§HNÜñµyóæP­’M9Ø � 5Û°aCØÔ’#–a÷ïߟßÄió¶ÃÂÒg…_“ôuá§„H¦~9ñ`{>çÙ³g#Ì^¦å\ÂÏ€¹™É» lxÅ«€·];·Á¥­ß²§Vu—à¡oƒrÍ¡qw[ëÚ5\ââ w…a´Çñ_ÎJ²Þ¢9íìŸ:u ç�ú‰–öõIÇHƒ#ªÇ¼yóÐ|ƒ¦ŠùóçsA‘$€ ¢�†Áû7ÞÂa¸á=ûùóçðr‹—íRâ] ¤/'lêfx}xklÕª„^ñ6)ßýcݤùn´<(r¶!޹2§g·¿ÖmÒÕÒDxÝðÁ0l³%¨SÑþü£'}–­LHIéT»f� 2QVRªZ®l»®S¶ï^2 OßFõ».Zª®¢jWÚ¼’¥EZF\Ü,K–`ë²@$§¤¥ÏÚ³VwɲÂcb§íÜ[º„‘ªŠJ…RæÐÉÙŠ–dñ‘ceŒ�ëV´ïãµêê?sÆnÚÚ­ž{½J?W'I4R¬ZµJ2¦|ùò¬‡-ÂP¼h7ÑÒÒºuëÚ/ Ñ~áîîûJ¸I“&\>Ùºu+30À{÷î­X±"Ô5„%ëŽflòɤçÖJNN–³Äª:ä% #ÀÆ·ËŒäÄsÿª3f ìe6 ¨^½:öãÇ�¡�Ù€gfùâ·sãÆ�íÛ·óeáæHO'™×‡À�”W¹<ù @sÕÝ»wÙŠô2/ÙJöÈ�DAáÇ-~®®®Ö¶eãñÓþQSU-cUÚ¦¬hæä6--_³ÕÚÊÂζœ—ËÉxtlõ÷âÕð�ãâ†.ÌAx^Á§eáõëף퀅ñ4ƒ¯»`Á6+ø¦OŸŽªŽoyÔ¨Q2c¤±±±Y´h‘¡¡aDD?„ ‚ äC˜ Š�¬¬,ØJíÛ·‡ƒ�·m¼óéèèð{ñêìïï_®\9æŠàUþôéÓ0�±l$îl ñŒdp!9‚‚‚°))b?}ú„7xfÐØ pK`©e{ù†´†ÿÌÛËyǾt©cÓ'¥¦§³…|,Jó ]œ7“¿å/èÛrTIìlçtHÏúu{Š_}=êÔîì^ J^Y|!j**‡§LHNKÓü¦©�çÁÉã2¥VoäìØÐ©RšÄªÂÙŠ>0iŸxf·.ì&\™?7ŽV0A¢XúFÐIDAT«£ý%&vÇÞÃÙâ)¹paѳgÏþù¢ öN�¯b J¬T©RøÆ¡ 0�óË—/ÓÒÒx·¸ººNœ8qõêÕÀ� ÌÒ„V;v,Zm �¡Kù¥•`;{xx ŸG�Õ¬Y3§‚Z¶l¹yóænݺ¡Æ®]»–¹²2#.¤C‡¸.4ÙØÙÙ± Þ >çÌ™ƒFœ-\kø„LC®wìØQrd;ªº§§'N?«%K–@3#�̳’y]N(Š·wJìÒ¥Khƒ@úvíÚA�C{Â>xð`N—€Æˆ:ü®Q»îܹ#Y"ìt6(ºH騶 4k\·i£:h"c­H±±ñÁ!¡“=‡}ŽþrñŠ�žžè±³qÕ?,q×N­Y€�ÑÑÖZ0{bZZºšZ.ÙÍÖýbà9†þÛÔÕÕ]±bZXsƒÌÜü…Ó+:sñ2WØ… Œ4�Ù9õ¬!‚ ˆl�&ˆ"¯wð1Ξ= M GaÉ×wHb¶ÐÆlb*öÆ�·:¼O7l(š[Ö¨QãäÉ“@4ò^ n!^þ˜†¼Á+8’8p€í­(†ψ[¦L™¼ 5ÖÒŽO´Ðý׸\uÕ\Þ‰U¥ 4ù‡(*((þÛ‹Ö”revWu¡üwÎÒEó)%Òê—‰‹år@áÛ*¾Åõ‹õíÑ9Vji%ãl†Dz¶LòKçÎ�!ºð…“„Èœ=[¤ÞQ`…¡@æA§Íš5 ¾(—Oøé¯xàˆ¢a®2¼P}}}6Uâm%( m+Жü­ƒz�. ƒç&gÉ%”‚†XsŠ“È-§HˆRä ÙÿðáCèF¸âP¤¸v´æ@gâÂùK�´9±~ðàŒt===\_ó¥Ééºà?CÓBh%$$Lž<™©_ìØ±n<\J´ȼèv+1ìJNh7räȶmÛB�kjjÞ¿Ÿ+$ Š 75‘Ñ‚fê—u×ÕÓÕ™5¹¦¦ÆÔ #òØú#Sý¢8âZ/=[!¯uåÄH“—4AÁ£�•U„K³ÄÏÌ›À`‹R&ù:$8$¬œuþ–{e@ýÊ´)¹**–¯ª”€dke‹ÌSˆÖG\Zº÷ǰÒ:ÚÙ4ðoÔÄ:æ&z9ø]—ý„!Ñßûl,e Ðо ë~¡-_·dg L­‚}Ý0“!,Yû¼¥-=ðM6¨„yiI�´Æ%dS&2#sâË—/ÚÚÚ|�Ÿ:uªdfüˆ`êJ.&‡œ®+Û í9!óp8ìJi‘‰ÄøÊ é ñš��xÿÑ`™¸Ð�úŧZg�_û� ói�ç¹ÌÈ‚=ä ÔçK—.¡mÕæòåËõë×ÿ Í퀀Tx¶jAÄKÞçIE ShuÂÀL�¿�‹áŠ }N¹‚’’5^à*äÅñø‘ø8 &6<)…û}�÷[^¿˜^ν=£³N=~ÏÃõ¯Ue%í7”øC€~\¸SUå¼ß2–¿ºúåŠXoß¾}öìÙhâÄÿ;¶¶¶ 46LÞ˜‹sçΙ™™å´$ûçÏŸÑ\µÿ~4W•.]:00°Pöóðð@ËÚ±cÇ$#[·n�¶~©0i6nÜØ©S'醳eË–¡q*§Ù¹¿vKÑÒ„æ4!õíÛ·OŸ>Üw�ßï(§ 'â'¤ïóÔš(Z }3ã33î ¹NÅLY¡lQé�¬„¬Ì Ìô �J5%E]ÅüÎöDð@VËyÝ”?WÈ×'Á™£óÝFˆ*nn àl¡Hê—( G+ÚsÄÏD›6m–/_µæçç7eÊ”ÐÐP9SRŸ9s¦zõê9 `##£ .p… „îÙ³g?|øQÍbÞ¿ÿøñcÉe½¥Y¿~}Æ ¥uàØ±c¹"†ÝRN<ƒ#´¨��]�×?—Ì0�ßQNNÄïMA-пP¿Šœ‚Š­²‚Nêd®d¦„‚P åâû€|mh¯ÔÇ]¹¯Ä§–YhßÇHp$õKhx…¬Ý±cÇáÇ#"DsægddŒ?ÞÉÉ©]»vl(øŒ3 oÿùç¶:T||<|T¨»Úµk?~œÂ�{çÁ.$@>È F.—àv:;;ÃXæcF†¼ êíí 1\¹råéÓ§³ÿC[¶l ñ¹fÍšäädwww\.ðÎ�;ëÖ­Ûºu+;f)vU­Zz’èïï�c`;CgrßJDþ�Áœ¬Û…Ípâ^ÙHÆfeß¹sçÚµkeæ&ý½~ýº}ûöåË—g+�g»plž?¾N�:*TÀW†à‚øõ!L-‚·"õ iÊýD%ˆ å‚ â‡c``±ôâÅ „çÌ™“žž~åÊ•ábbcc§M›V¿~}8¨L\9rÞ,$åÂ… ÇŒ“’"{òñãGÉ Ù m{öì¹uë\½z•+PtÇŽƒʉGC@"†í Á)M�:âa¶<Û¡C‡Š/­8hР¬¬,8ÆAAAçÎ�«R¥J\\“‚§N�ÚµkÄ0ß¾}› l¨tòôéS¦™¹ïšöÉ“'lBGéÛU¦L™»wïrâiê?þ Oá7nØÚÚÊÉSò;ÂÅ¢yâáÇ͛7g“áK^xjjêÊ•+—,Y‚üsÒÕAüZPh¢hÉ ÈR)ùC{#+›)e¸ AAüxÌÍÍ!#9±>„ú…ÜjذáîÝ»=zÔ A5556-bß¾_–«V­[:KZ¹AƒA~úô©téÒ«W¯æ JÉ’%‘¹��O½zõ®]»I‰Ù.l6mÚÔÍÍ�wo†Þ5j[…^SS' �ð¸qã²ÍwúôiѲeËrâyÚÙDè°‹™¹:lØ0® Ü»wî..r~/T7'ëvÕ¬Y“-où�&üÅ®gÏžyyyÉÏŸÿŽøÅØ!ƒ/^̉¯æ/œ={–%À—ˆë傸õ)¸^²tÙí;woß¾#½kœç˜qžE>>„ø5ˆáŠnܯLD­_qEû�øc¡ @„|»ví ›4**ªI“&,2<<<Û:vàÍ›73fÌPUU •9~ÇÈÈhþüùÐ¥PÂíÛ·‡¿ª&µn\ÁYíÛ·V­‡‡GFF‹¿ÿ> a6ö8QŒô±�‚ÒS¸¿{÷ÎÊÊŠ…KˆA`éÒ¥³fÍÂ_(Ɖ'²uþò ä: äèèèëׯ/Z´HY¼â�ôíª\¹²¿¿? í°°0ØÂÐÀ:t011ÑÖÎeæ6öqâÎÐÀh_ˆÉ– Ö÷Š+Ž=š””„‡??‚š ˆ_š‚w�^²Ô«Fu·£‡fû@ýb—Laœ�Ž�<¼–¯”Œ‰ŒüllZêÇ.ÿìÙ»�5æ??Ïž©VTa£ê†FvˆŠ‰’“~é¶%8„#‚ ˆŸhÂׯ_;88èêêêèè@¿=óñãÇž={²4üP³õëׇþ¼{÷n™2erš—¸S§Nð6¡]‘ë;]0PÜQœÞ‹/ ƒùx¸ÁƒfçùêÕ+É>Øò× �¸…tda¨PÅ8;;Ÿ8qâÆ�0QásÂÒÒ²sçÎC‡…÷Ë�7–¾]�åðŸá´ã a>ߺu ¶°üÌùïé¡™çÌ™óäÉxõ8aîߎ«8räÈÁƒáÞÃ~/W®GįO0ì_NäôŽ­Q£z¶‹\²Ì‹û±Ì›7ßß¿(�?¢°yrìiÄ­ÈÃ+�Ü÷½7ÃßrRzíðò ðå‚ âgj r·OŸ>£F�*V¬ä”ØÆ�!¥àŽ9òåË—œxêÛ·oÙ!ðZ¡!aoÞ¹sçýû÷2Õ&¤Úˆ#àÖ–/_ÚRÚ¥Ì;(¨M›6 h×®�äZ 5jÔ8}ú4LTNìˆÎž=›ÅCRò§*“:uêlذ!%%g ½eË�pp0Œk8ÀlÈñ÷ ½~ýzÖ¹ZæíÂM^¹reíÚµ9q×hÜp98ÛwS_óuwïÞÍßþÂñÅÁLƵàº:DK‡ÄïA�°œÞœöŽ;p^L`ù?q²m»ì*öêÝ÷É“§,O«qã'Vr¬ì\ÙeúŒYhnŒ‰‰q«^+.>ñÍš·’™†#~>ôuõñ©ãRǽŠ{dt$‹¼xë¢{Owóºf¦HIMR«{Íè˜è‰K'ô�Ò›ï÷odèfP¹½3sAñŸrøða3˜�«V­êÚµ+Ä‹_¼x1 Ix˜®®®ÐT*ˆf§€ø„ÙØ½{wN<à¯zõêpw¡oef‡SUUÕÅÅ槯¯/?¶`àô =<<$#qæ0B[¶l ¹`Á‚Ž;²øÞ½{Oš4 ò2§Ü�>*ô³““Û„:uwwoÕªU£F�æÏŸ?mÚ4îû¨Zµj¥J•6mÚÄåp»Pú›7o˜è…  Â!ÒùÈüŽŠ/Žû‰£�§¢¢¢äu± ‡Â‡N®\¹rݺuåO¬EÄ/„BZ³`ÿB‡’×߸}ÇÎø{ôðA9i:vò¨Y³Æ˜Ñ#ù˜ÈÈÏ•œ*ß¿{»téR×½}úôí?{æt xæÒ±êþeŒô�½|´tÛ’C^‡Üœª~xëÒÉeÖˆYÕ�kŒ_4®œ¥Í¦9›ž¾zÚ¤ãÝGtiîaciÓjhK#“¡]‡í:±s÷ÉÝá7#$ÿÓb¤?ÈÐê«‘ë¹`áìà�0]muî·&>CŸ•šö»6t+ u_]ÍZW[W%ß“ Ä'¦þöàG˜¤’Z,#ö¿_"A¥X¦ªY¬’VF¶ø¨è/Ÿ< ùÈ=¥Ì«:;ç~qðË•~Úãy.3²œµW¨Àu„‚e£Xyà(²x¤H ££#?“ 1’}t‹‚øøx]]]ɼ%fffJÚÅҰѳlZ/þ(x¶Ù²*òx»òó�³�¬–¼p\ î¼ü›@ÄEÞçóýþç÷ò%Ô¯��ͨѢi®¤_‘ÙøM �ËW®îÝ·¿[W9¹-]ºlÅÊUü¦¤ß´ió �z÷î…°£c¥gÏ}>2zÔH??777kkkÄŸ;{:##ÿ…TtpÀ_K ¨_ÑIJ¥áˆŸ�þSû™–0…÷ël笩!úOýŒ÷™òV¶ƒ» Axê�i]Æt†v²uRQQ±2/õ‹øSë¾ÎÁ¨¦ª¶zÏêa,Íyô=¥IDAT,9¢�€ú½mª©QÍè—å•ÃǤ\¦k ƒh`â7ê7ɯ¸ž%§YîÛfÿY\ògÅ8¿âZö_$50Ôï‘“gìl»ujÏ=Ïý^¢¸­[üø?D¦jåõ0dU^䛑˜+b¤%+”a®ÂOYL¶£ŠBýry¾]ùBRºóH^x¡—HÄK¾_þž=­Eîìä(?™��—<<ºxxtæ7c¾ÄôìýµoÏ‹~}Äê—áRµ*b€�;zôØ—þþ ë×oÕª…¡¡¡t¶yICüçø�~ ŒÀŒ•Ó[ mõþr�ß[¿G~Mj#21Y4 eDTDIÃ’’G¹xxᦅþïüÓÒÓ°)sÎL¢ÀÀû…ú5×’íŸgfeejùy +À!?v�¸Xgƒb\Q¢ùDX™#~àýŠÔo ®d$eªhåÏ7¤f)*qŠ*²¤¶Â×ÓH-¦aó™�†÷ õ[ÉÞîk¡‚—wc*))YSS##C ¤¤˜—£XA(´iÃzÜw_š‰‰‰t‡Æ—/_øpœX±b¢& ÏÈÈHcccrÞ‚ ˆB$ß.+þ®X¾,×”b‰å`ffVU¼¶#2òÿÿͧ¥¥©JtGQSUMM žN;89V:rôØ®Ý{fΚ½aúfM›dË6/iˆŸ‡ºÕê-Ø´ ":6o£�Îl8+�&+K$tã“â{Œï±fÆÚ^m{}øôÁ¶yyîç#...55µdɯº](¾yó&66MÈåË—ÏÖLž�wïÞápFó9ëÅ€·À€€€ÄÄD###“|Y8ÖÆÆ†•åïï�óáÓˆzLT¬˜SQ©ir¼ßןÂöݸ=Û£#—g pHbj*Žª\ÆŠ+J �ïþÂ%JŸŸ)‡ÞPÈH˜Õ–“ ß8[ˆoùø~[·n-ÓŽ�fÀ€µjÕêÓ§WHlݺÕÞÞÞÕÕ•Ë?AAA»víJJJªW¯[÷åþýû£G�¾}û6WPp[Þ¾}»bÅ îG‘«¨YÐI^´þØãJž–Hyw1©LcÑr2�7Æê˜*W蘣¹¤iÄÅ)J6G‡|”ô~/^¹¡¥­Y§f5.lÚ~ 1)yP_�KWoè×®^5/GAï=t”ûΞ={÷î]SSÓ>Ìœ9Sæ>;vì`³u$''ã‰7þüààà•+W∣ŠÈN$‚ þ@ >ÌiúŒYc=Ç#`lZêÔ©Â_ïa~bË—áûâ…ƒÃ×6ïråÊMš8áê•‹=zt_¿~ŸF(a攆øy� �½ñÐgÁ¦Ì�ÍMŒLê»Ö¿ùèæ¥Û—BÁƃ[ mÉ<C“[OnÁNIIf õ  ôVïYÅýd@œ;wîÌ™3¡¡¡|äõë×an”.]ˆ···ü^¿~�÷¿l‘—/_Æ!rÀáÓ§Oå~åʨ©R¥J¡D”Ë"¡¦4¿�([éA ø b“’$cBaBJªd $«¤/}‹Lù6]º@�”–ÆÂ80ýÛ¤¦,APäç]Þ7SÓ³}äÄ¿ñ/ÿ^ R²h‚R¢d¬`)“‚ rÎã´ "õûQôuÆ –“_ÙÆ�+T¨€wý;wî4nÜ8Iêî.ƒF¥’Ž×ÒÒÊ£ö΄M»víPñêÖ­»páB6]Í¯Š„›%ä„éYø¤Å­cÉ™ü.Á·aòÉQÙç¹MŠf}‹’Å¥Å}=®¯÷¬¨ôDÑf•¡ÅÊ·ýºZ©d)2O&W2‚”Ô4ɘ„Ä$üdÒÅ¿‹´ôô€7ï†ô몥©Ñ²iý®•9QCs:~>HÆÒCsE€ŸŸßôéÓ‡ bnnîë+{>ÿ1cÆLãààÀPŽ=Ú»wïaÆ5lØðüùó8O<Ÿ={†ÇàãÇ�ñ—ˆÚ­[·ÐtÈADÞ(øø7�ÎB�èø­›76lØ€+làâ¼­RµŠc¥ŠÇ�Ÿ¼îí3nœhÔq£ÆMaPLŸ6EQQ1<<œ_�ÝÆ¦ÜåËWjÖ¨¡««“Sâ§¢f×ø«­©íTÁ‰�ì­V©ÚÂq ûNéeZÂtóÜ-lQÄÝGÌZ3+(4øü¦ó#{Žò롦ªöW�‘ÜOŒV¼™ñk9 TB777ü…{àÀHw¾;_ZZÚóçÏíìì -Qÿ!{Ø4¤yäYPðÒgLŠ‹ML^Ú·‡¨ÄˆÈûøång;¨qƒÌ¬¬Y§edDÆÅoÖ¸ªuéC8±Ê�yàH]»í÷øÜºáÿJSUÕPWgJ‡¶w^¿yøþ¯M‘¬Ïªõ>>�Ù†††lêT4— þ@ýfê†ê‡VÈ'Ô+==½œÎíڵ̋666îÛ·ïÀ�Ù®¨¨(´ ¡ê6kÖŒ¯ùì` Â.æûÄÊ/ëæÍ›ˆd�¯]»† .–ïjQ|z˜rëŸh�âJP­úeTêÎ3:Õ/¼áb#ÝR*/öÅCÙÚ´Ö>Õ'LÏREU[QÜIE$tOôú¤c®�ÖØ«d‰Šj;ë|0¯®‘-Ô6Un¸¸Ä³íq)QÂëS?7\ZâñúXÝÒ*åÛh?ÙûîB’’š‚¶‰( —Î^ô~òÌO]]­˜žnÿ^�ð½/[½•õ �ø_îÅ\Ý~;¬=Û5ÄcèÇë¡a7Âß]z_ß­>‹ìÝ®ÏûËAg6œAxÉ„%Ñ÷¾„ߌ˜3r/Sª ÷ÓÑœóƒÙðÊ¿âãýBWr0sHHH¢„¥‰wz¸ÇOž<á=d¨ mm‘G- ßšV²?sdd$[¹@ðkW@ÛHO: [?333.Ï,;yÆ«_Ï…=»õoX7"VÔ7[UEy~÷.[†:'^™ìNÀëbZZH°j@ŸÕg/Ê<êwîácMœ*AýÂø=ûèÉÚAý–õ환šæûAÆdòƒ7°/eõ‹Ûø9>ž} ´}^ú7vª8³s‡ íZÁ…–.ô®WgzQN¤¦ªœš–‘ž!”ãgS¿_#só�yðűiN{öìÉ×�¯^‰Ö9¿wï^óæÍñÞ¿eËÞ䇮¨_¿~`` *Ü3ÔDž9sfРA�¦¨$ €ŸÆ‰[Ip,ªR"ÀW3T­7n@`\½z•?hÑ/^ÀvC5ækš4>¬^ýëÓÞÑÑ‘·—!Ë===áÑ-_¾œ© púôé=zàç€Kèׯ_^ʂș:u*«ºÑÑÑH‰kÇ �àAz®(¦eµÚbÒn¯é—ÀŒ˜Àt»N:¯O‰~°oÏ&Ú¶×y´.Öå/ýæë�+õÖËÌøZ'š­5n¶¦dõq¯OˆRf$eBë¶ÝcúÙ/-5.³Ê�bZ%”¯(©¨üµ™,=!óå�„öÌÚî65©¬Î›ÌyÆïÍ; r=ÿꟜ’úö]ðÃ'/LŒKŒÞwÄàžÌ×mݼ�¡�þÐþÝTUÿ? æ0Ò4mä~êì•æ�ëþ5¤WÛ– OŸ¿Æ6øÒgΜ‰g”‰‰¼‰:QýjժŒ¨HÇŽC{âñãÇÙ£ zú¯h$BK ëÏ‚†EHßqãÆå«i� ‚ø“É· M;ÎsÌ’¥^ç%?¥œ…‚‡íÏS¢„‘äêJžcGãWKObð�³³Ó ïkññ j0%†µlÙÈ9iˆ_}]}éH%ůÒQC-÷%Ž~*àwÁsƒ”mذ¡d<^Û·ÿ¿ZƒÄ…BÆ[lÛ;wî888@QC A?à �>)[¶,^ß: ™Ã5!8á¢àõ‘7¢~~~ù}GLNK7[‚ÕÊ•ÅßW¡ŸÌŠ‹F«©¨¨*‹^£_†„îº~–,'î�)ó�Ó�žèhmÒ›!QÑeŒK*ŠO¬¼© œäbZ9®ê‘–!€œfáiÛ÷¨Ský…˽W®­b]fD³ÆÒE“bE<©•¢¢®¶zZº !)UfµÄ÷ºa²;º‹|`%�i é]ø–a“â/ô-¾b8Z¨ðx�9Ò½{÷×bàz!%”ä„ ˜näWòD�Yºt)40'nU�]ƺ ”+WnÍš5 ]æìÙ³¨lNbশjÕJÒ‹;VÔ¿fÈ�!’gµxñâ¡C‡BEs⺠ÍÙµkW™—]Íši8ñÔ©ü$ˆxüBåB½ ,”¸lÙ2\#Îjujrg+§¬­[·nÛ¶ Z¨¸¸îAÒ×®]6 ÂVVVÿý÷ÁƒòÖÛûNŒÔX?äöj±ï3Ê6×>Þ󓽇®’ª‚¦¡bœú‰Ìj#{5%Q:ÈWqB律U=©`ê*‰§¹B 5F¨®—½Ý96(ÃÀVUAmßµ ÖkDÄgsSö{·,m Ñ ŒMeå†9ÎIYLOGYYô\õ¹ýàõÛ [w%&'›”4â ›–bÖ­[‡ºß^fÔ‡ .Ì�;—m¶iÓ›—.]*]ºtNë5¢&`²E3"Œ¸"¦ÿx/îçfÒ�178AD‘RèkÑIS�.Ðã<ÇâÃý(ôdM}¡«+{ÖÉErJCüH²Šee%d)èü¸EP å~&ðW²dÉ   Û·oCä4*tÞùX.L9ˆNìÜz{{רQºâÑ£GÙd­4Ϻºº¬_4^á– .?èjj„ÅÄšè»õ* ¤,m «¶k­°dáÐ> |/ó�Uœ;Õp�´kßú!ý-Œ ß„… 33¡$_|é× nº@ð)&É`ó2‹]�¾¨«ªüÓãÿŠëÃǨQ-šiª°|Ê™IDAT©ŽÞº3àS˜tÑ’@‡«@w()Å%'ëij&¦¦jª©)*N=„Œ�ì}Úªœrð%é=BcW�‰ìù¥ðê�TŒ2eÊÀ>eý�!—,Y¼{÷n¼ÜkhˆÔlÏéÓ§-ê›æ„TöññY½zuzz:¼Ó ¾ŽIa=H9ñ´ü±±±\>ñõõ5j óþ­Lðà…²•Ž×ÔÔdÞl:ˆd\&~Lž<™%€E mœSY¸-з‹-*QâkÇ`X¾½z}] úyÞ¼y\Qñ4-Kˆ† .üIªCw]e ÝR*�7ÄÂþÅÞâeU¯g¡ñ45K(zìøN(][†°ß¾øÏ/Ódæ™)@ÿV‹—U…9 YQEáÙö8»Î:*šù뜭ûáã'ö³‚ýÛ¦EC<%vï?^­J¥�¡áAr_1ؽfµ²e,�>!1éKL¾«Š PñuCÖ¢’ KJY´õ˜››ó�bðಷ·—lI�Ã�ׂ F�-3sT{TŒI“&ùûû£µhÊ”)\Q²eñ® DEEÑ‚A? ´&Q´d•ÍUl\MËŒÏD¡ÜÏÜZ¼âãí2@4¯›Ÿ¼Üb9¸”ðîÒÒÒØèGH Öý¯Œxlܸ1Ì4h HùÓ±nÒÒ І˜ßÕD&´m=eÏ~u‘ôZØ«kðç¨l ª—/wí…ߨ-; 0[»Tá¸2Ò‡à¥ÜÑÒ¢ye§Žœ˜Ù¥ƒGÍCÖo�‡lcj\ÁÜ øs|°�[K(‹O"95#}ɉÓãÚ´”, fï‚c'Í‹WUV.gbŒl³-™xíù‹È§zy$82aÌÌý‡Û»¹Ô´ýÓ† ‹‹lölXŽúåÄrþüùÙ"ñöÙ/æçÅ‹_ûxCRJO“vàÀÈpJQµà²†‡‡srQÈ[C›5-/)---¡l]\\8±¼bÅŠ3fÈL©*ž¯ŠÌ.Ω,Tûõë×Ã4®V­kÓÑÒÒâïüøù"B½˜âÉ>Ÿ2’³L]Ô‹Y‰X!Pµ ý+X4{Õú§ú…AôB³ÕŒ,ëk^ñáFŠ’*§a ûçfÝTëpÇÐöûMÙ&DuåÁÅŽtþ¤¨ÂÙ©åWýr¢»¤Ú¤Aí¿¯UUQ)]Ê´Œe)D6nP{󎃥ÍÊY[*ä6›V›æ VnØésë>pïn…é"¢²5lØpÚ´i¨œP¿hÐañxšA#ÞÎîëô–Ç�÷ôô”7ïë舚 ΙÀÃ"f>FKKsòØ!iééjß~†…¾Íúõë§§§K6Þá}úT¶lYŽ ˆ?ÀDÑk+½bzÖs.”SÔU,º¾ÐY Y‚P¡PS(¬”¡ªRøïp¯wÕ«W¿rå „Ü]„%_ø ‰aØêêê²Ù}ôõõ`ƒàeâÇÝÝ�¿öÁX»párÀÛ-ô�dþøO� `äÿèÑ#$;qâÛ[A 'î7[ºt鼬pc¨®ö1)Å\ë_£¬Õ$FÈDUjqcù‡(*((þÛ‹Ö�zí–Ù]ï¸ÙrVÍa]eþm˜¤_Žq™¸X®Èà5pÁÔ/£K—.3gÎd#cðB!���ñêÏÏØÜ»wo�Ê•+£vÙØØH®Â%“ “£G�¢¦AUrâñ–h=�~Ææ¢E‹FŽ9bĈ±cÇB~C”âUJ;§À S§N¨c¨Þ¨ÌШðlsJ‰/bóæÍÈÚ•ëy6’Y~YPËOž<:t(D2váTQª:3YšƒÂÇ À6G£Òœ9sJ”(�æ$.?¨ËLþ¬¨ùmfu}%C;Ñ`^ý]M8–Xwî¿ú²òZ÷ë5*f�‘qeÄ()f?*ù³è”$c,J™?÷{YÉÞNFž |똮®¶Ž¶Ö²Õ[54ÔGí�Gq(Sý¢8Ê}x I?ä/Šžwð[à~Sðsø ¯®Ïʰ¸rú%áÿJ4GDD \^ëÊŒ”�t¨7nàÉYÔI‚øÙPÈÊú¹FK¿ð'ÑðRñƒ’Ò;e¥ø¢ò�…ºBa¼_¼fÁRÉM³�7�Á¥L¸ü¦«]�…R¡NeÎÇ&¹*?IÜ4U©7QÜFéÈ,19 *.ñ‚{‘ѦšÙ4ðoÔï§ä׺*EÛ¨ôÅŸ)á‚§ÔËËëÔ©SÙâãããu¥&Gøòå "ó(*PÇbbb`çZyðãµ;äa6A6Ey¶…”r"11¯­ÙJÏWY@ò-œÿá°ßZN¿8ù“T’üŠëYršFEÙC /d‰Ôo\§eÿEIëÿkbGE9ròŒƒ�­L \è@ý¾xùªC놏_™øÄTé§=žç2#‹bþ•‚�^±bEãÆ�³M^øàÁ4}V¬XÑÑёŠæ_¼x)!炃ƒ[¶lidd$3‰á‚"Ï xËlfðâÅ ü׉ÿ7oݺU²dI6�~S>>>ïß¿‡kÊ:›0¢££—.]*=jãÑËW»O�[2~”RþKBæåFÌxµrV^0›?j<å WåDÊÏ:6ÂBG ˆd“ðáAd``ÀžÈ¢·÷�= à0c‰Yg{ö‚�˜áøÜØØ¸°Zs‚(xŸ'Lü¹üHü  Ÿ•šö»>ÄF·µ®vQ«ßïOæmÛ¶­Y³fåÊ•l©^âÇ œZ,#¶Ð• ¼_U³XIõË€~øäYpHîS[}?ð~«:;þêê—ûe°4sæÌyúôi�:uNž<éááÁ†ÄÆÆBCв1ö'N´´´”yïÞ½áÇwìØ2¢÷ĉLNŸ>›PtåÊ•³¶¶f³Ž�9§�çϹsçìííÙÔërØuêÜÌÕŸÙ­«�»¡š/ÌðóóÃ…à s�ÌÆ»wï`C¬–/_ž-“Ήç`ƒrƲ1#¬“¤ò£G�à''''£ÁÕÕooo+++4àÌÌÌ„]ìààÀR–*U ÍvÐҸυØMD¾(Àû<5Yñ/ � Šv1!"Wاk×®•¹ÒQt@pjØ|þ™û?@Ž6mX�#~}®?x\×åÿÖ嬵›f ('ýË—/O�:uóæMx•�:u‚OÛ·o_æ=BOB ³�3<Ò‘sçÎ�1c[mĈheƒÊe» ßΜ9#Ù#éÒ¥KPÈ666PÚ;wîär£g«føpED,4|^"³Q¦ŒhŠÄk×®IöOaº‚Èbp»`;99±¦Š+W®à9sØÖÖM°â¡™cÄËÀ†Nf3ó½}ûj™Ý$ˆ_ÀA?šššüZAAü–\ðhöÚÍ×¶‰¦õª×wXgùé!Ïà7ò3iÜ„ ã'A”¹Ê�d¤P(„_ÊÇÀÚ…Æã÷¢­-ÛxœiÓ¦õèÑ£råÊõêÕ6l÷_-*=ÂBf¤4º¸]ÙRB|ø{K–, �Mö/AüZ�&‚ ‚øÑÀï…ë é‹0Ô¯|û—O* ËqéÒ¥| ??|^€¾UWWÏû*bPÚ;v¼wïÞÁƒwïÞ-=Á�„ÉÑl“oÉŒ”Ibb"Úl#u³¹ÇÈMWW—Y͉"™ÄÅá¸W ØdC©‘í0„ß½{íììÌñë@MVAAÿ½�¾yQ¿ V­Zþþþ111†††×¯_ÏïÒî 4رc'V¿‡b“]É$""ÂÉÉ þª»»ûĉaCjÊÏ<0äãª=¹¢ÊÖk¶ùÌeFæt¸ôÄ�ðu%7‘ )) ·Z»p‹˜â…Ì{Å,€d0Ïá*˜ššÊ\¤š ˆŸr€ " 1˜#‚ ~⃹Ÿ•¼H_´ÖŠ+† …–‘‘1pàÀü®~=|–,õ*: üáÈÑcñkÃiÏgiDÅÝT[AAAü²PCåJJß5ªã3Îsì8Ï1ÐÀÌ Î5“Ž�<¼–¯ä7gÍžãêV3,,,§ô/üü-ZÂý@^¾ô?yòG6Ïž©VTa£ê†FvˆŠ‰’“~é¶%8„#‚ ˆ?’¨¨(Ž ‚( "€áýBåBë2é+¹ 8üS“ÁH–÷<—y­8uúì‘ÃLLò·ŽS‘rçîÝÕkÖrDÑðäØÓˆ[‘‡W¹ï{oþ†¿å¤ôÚáåàËAAA|Àwî0¿7§Ø…K–yqycó–­»v톜677Çæî={G�Ãï�;÷ïå+þo_»î]»N=‡JNcÆŽKJJb‘YYYK—z!2œd�@Àâ[·iwüÄÉv:Ù”·ãÄ&óÊU«gÌœ]ÑÑÙ£k÷k×®óÙÂémÓ¶½}E§¡ÃF„…‡#fñ’¥K—-xíV½ëz�S)Þ>7š4mn]®|³æ­<|ÈyC_WŸ:.uÜ«¸GFG²È‹·.º÷t7¯k6`ú€”´ÄÔê^3:&zâÒ }§ôÁfÀû€ÆýºTnïŒÄAAADÞ(˜¾ËòZ¾òðá¥YL|\|xxŸ *:êË—¯c:£££—-óš3kæªËŸ>}æ9n‹_¾bÕ¡ÃGf͘¾xñoïsæ~µCB>Î�7¿M«V»víÀæçÏQ6n644ع}Š6ü/¡P4]0Ìê1žãºté¼sûV�@دßÀŒŒŒîݺvõèRºt©M›Ö׫['§RbbbzôèÕ¯oïkW7nÔ£GïÔÔTŽÈwŸÝ½ñðÆò�Ë}ùŒè.Z0ðÃ[�±]:6îplõñ·ÁoFþ=‘«§¯ÑÕÖÒeÈäAS°9n‘§¥™å¥m—ëV«Ûc|wZñˆ ‚ ‚ ˆ<¢Ìý§@ý¾ ÒÔÔ473ËKúĤ¤%‹•/oƒpÉ’%ë7l<ÿï¹úúú«×¬Ù³k§››+âW,_ÖªuÛÓ§*+‹®®_ŸÞ}úôâsp°·ù—HkÙÙUØàÐýûªWw[»nð¡C»uõ@üšÕ+�«>~òÔµš‹©©‰††FENlÿÊ,åõë7ŠŠŠÍ›7×ÑÑ3zd—Ε”þã»ú«Ðj?Ó¦ð~�íœ554sÆûLy+ÛÁ]† @sAAA¹ñK5¨ß=»vLœîô´iS"""{ôêÓ¾C'œG䇺Õê…}‹ˆŽ€ÍÛ¨F£/÷bðI÷ÍÀ‡W¿YY"¡Ÿßc|�!CcîǾ:ÀA‘Ã?G'$qAMxxx±bÅX8òógèÌ’%K «¶B[CCCee¸¯³dYYYù²aaשãÞ¿__éů£M¹r9•3¹}»¶øà”ܪ׺ÿAíÚµ8"7B#Cqß….Øô�¹±¹‰‘I}×úÿl˜éö¥z®õ¶ÙzêÚÉ“kOá&›šÜzr«]£öh†f õ „Báê=«8‚ ‚ rãØ½§Çï?�ß½m®)?~ü˜��ÀÂxû’¿6Grrò§OŸÊ–-ËAü:Ä7vŒx%¤WúÅ.$¨Q½:—g&Œgnfú×_£233íìí‚?|8yòTFFƹóîÝÀ'SSU7~bXx8>žã&Ts©ŠG³ŠŠJ›6­'Nšü!==}íÚõö�ò5U§Ž–y­xðð¡@ ðö¹a]ÎöéSѪ³½oÞ¼yõ*ñ9•röÜy�†iòp¤´²²äˆ`s©ÈGI¢c'–Ä>>>AÄOLA`ñH¢•~ÙjÀ’ë!‰„ñ2Ñ ÀˆÏ¶D°|TT”×®YÕ°q³uë6 >tà€þ��!4¨_¿Eóf|2ccãF�Ô¬U'-5µreç�׳ø%‹"}ý†�RRR­ËXíØ¾E]]=ï¥wëêñ)ôSÿþƒ¢¢£õôôæÌžéääȉ�aww÷¦Í[Κ1½OŸ^2Kiܨáí¶mš4kq®¬¢²dÉ"¶˜!ÇòŽé¾2w ñ*êᣯ«ÏGön×x¿/™°dî¨¹Š ŠjªjsFÎá‚ ‚�KHtLqm­\“%&&BôÚÙÙåš2&&† 344ä#áÇÅÅÁ @›°(X+vZZZDDŒ„’%K**Ь—ððpl"‡âÅ‹GEE13ƒ7‹ŒŒ„¨Æû^^ä7ADPÈ’b›Oàô2 ÌÌ^&}EòxlþÔ¯Lದ¤¦êéêJïÊÈÀzåGùòà™‹g7ß_ºDGGãYœ­û4²Å³˜�”Y ŒëØØXËÿ&i[Šª‹ ÷cI�¡ÕW#×doƒ-J™pù!8$¬œµGAü:È|Úãy.3²(òÐx’B±°r¸þàq]—Êü欵›f (}lRjZåñó,𬫑‹7ðîݻϟ?à ÐÔÔ,Uª”œÑdH™��±Z¾|ùÒ¥EËXâEèíÛ·8a###[®œhRHåG�Á€9œ‘‘áêꊀ···••Õû÷ïqQ8PKKËÁÁ�¥D¹xÇÃûXݺu™Z&‚�CÞç¿«u�÷~Ûwì̉�ᣇ~¿ôe¨Š‘¹ v±ŠŠ¶t< ¿Gý™ÙæZ žÑ¤~e’U,++!KAçÇÍŒ�âP(GA¿5×<š½vóµmk®×wXgé4±IÉ[¯Þv³±ÊUý6| f,ômRRR… rJY¦Lü½v횎Î×áHx²±±�C€W) ‹¯�pYž3ã¾�KàT̔ʕ.ÍJÈÊ ÊL¨TSRÔU̶AAAu�&Šè_¨_ENAÅVYA§]Yd®d¦„‚P\&­ô@AA„$€‰¢EðV¤~!M¹‚¨ Q¡AAAÄ¿)HèÛ·ï,Yæ•ÓÞÕÝjT¯^£FuŽ àd©”ü¡½‘•Í”2\Ž ‚ ‚ B’‚8Àí;væÄ2XæÞÛwî²…‚@ 8uêôÚµë…Â?ÂÓ;qâdà»wÜïD W¤=Ÿ¥WtSmAAñË’oÌtïÑÙNj€ô‡ËYKÒ±“‡×ò•òÓL›>cÁÂÅqñqYYYÜ÷±gï¾��®0ˆ‰‰Ù¶mGF†€+l–¯XõøñîwçYÀ3ÕŠ*ìcTݰÃÈQ1ò–gXºm á‚ ‚ø�Lœ8ñܹsÜ¡°Ê:Y½zzLAÂ3X[ã³»dɘ—/¹_–{ãÆ}8s†#" 8XRßž9s&-û¼ðóã •ËW®Nž4aò¤‰ÊÊß;aõ¼yóýý_q…AxxÄù5D¹IDATä©ÓÒÒR9â;xrìiÄ­ÈÃ+�Ü÷½7ÃßrRzíðò ðå‚ ‚ø�À~ÐÔÔÌ9lذ+W®p…�̲ –�’–—Tttºâ£adÄýÊà(Æ�$ˆß•| `¿ø´ïØ™×Àý8x(û8pˆË?'OžêÛoÀÁƒ‡ª×¨]¯~£­[·#2,<Ü­z­°OaS§Í¨S¯Ÿ {�+»¬]»1÷îÝoÞ¢µu¹ò 69qâ$Ë-55uÜø‰•+#Ùô³ÒÓу¬ââã߬y+¤™5{Ί•«ÆŒWΦ“'OwïÙ;jôþ|æÎý{ùНִï‹(Ô¶‚C£ÆM9Š˜+W®öèÙ�ú ãÜë9~ÇŽ�üáíÚwô¹qCºv mÚ¶·¯è4tØ\ üÛrüÄɶí:T°«Ø«w_v8ÃÛçF‡Ž]�g¿þ/]ºÜ¤Y >¾IÓæ¸¸Ær?=úºúøÔq©ã^Å=2:’E^¼uѽ§»y]³Ó¤¤¥ ¦V÷šÑ1Ñ—Nè;¥6Þ4îßÈÐÍ r{g$æ‚ ‚(ÌÌÌJ”(Áo�Þjôíí•TUYX˜š|ò$÷­aò§Oáâ74�óîàÁ7;w&~ø ?C¸©‚¤$9>#>ž…ñ~ùîС cÇø˜œÈpàÛ={%º"âd"ïÜA&AGŽ¼Ù±ƒ�dfzú‡S§ð7ôòå€Í›S?þš844pß>Ñ™¤¤ð9|ºv WõèQÀ–-1/^ðñZff%KrAä@Aࣇ† á§¹B˜ÿÌ�3‹Ë? ‰‰·nݾyëöÚ5«ºvíÝÙih`°iÓz½bÅFŽ�x–ìæÍ[7nÞ\¶tq›6­âââºvïÙ AýãÇŽ´o×vèð¿‚‚‚‘ìŸ Ž=´eóÆk×®oظIGGYiijŽ1 Ç"ÍçÏQë×o,®¯¿cûVkkëø¸x˜ºüùDEG}ù"ê<Ñ£Goã’%÷íÝÝ­kWOÏñ×®{Wu©:sÆ4ì]µrÅàAˆˆŒŒ�‹ãùø199Eº4Œñ×¥Kç�Û· Â~ýfddätO®{ûŒãÙ®m›ýûö”)cÕ³wŸÐÐPľ{׿ÿ@ÇJ:P«fÍ)Ó¦ø z˜Bä÷èÑ«_ß>Þ×®4nܧ�†îçæî³»7ÞX¾s¹Ï#ŸÝG &ðÃ[�±]:6îplõñ·ÁoFþ=‘«§¯ÑÕÖÒeÈäAS°9n‘§¥™å¥m—ëV«Ûc|wZñˆ ‚ ŠˆQ£FU¨ðÿY%ñêõöíÛ””([Ø›IrrrŸ>}ø·Ž‰'B#0\LddäòåËa³½ïÞ½kÞ¼94óÝ»w›5k1œSY ˜™'®z?z™�|î[¶ða%uußÅ‹#nÝb›~+WFÞ½‹Dï™zõâß¾M ;רQôãÇr2¼ó×_)ß„è=OÏÄ�ˆ <Û¸qìË—‘·oŸmÔHN§kazúÅÖ­?œ<™ôñãÅV­>ß¿Ï⣞<¹3zô•.]>^¼qç§ š0JÛgÀ€ë½{¿Ý¹3òÞ½ŒÄDDâœÏ7ožðî]È™3ç7ÎøÖpðxÖ¬<ž38!8˜/±âرúvvA9ð½ýŠ�ç¸ â†=üpËÛØ 6„Ë?¡pé’Å**ÊÎÎNçÎ_¸xáRE|T”•­,-í%~Æ›6®gÝ¡ÓÒÒnݸnbb‚0RîÙ»ïá£G––~~þnnnœˆ?wötFF:Ò#þZZXT¨`Ëò©\Ùyúô©òÏêÈá£h�œ?ž‚‚NLWO7!>^OW·\¹rØkoWA[[[~’¥¬]·aØÐ¡Ýºz ¼fõ Gçª�ŸªÛÒ¥¦ D áÃ×6¨\9_Ù>™;·Â�!åû÷Gøî˜1oöì±1BfJ¸»ÆÆ5×®EX×ÚÚ×Ë«þ¾}lüÛ&§O«gëq�•…œMêÔá#ÍšUeöl‹¶m¾9dœa‡1_û-V©â4e GD~(�¤©©'îûñ=³T•±²‚úea{ûຣÀ å«©©)+«IÜA¥K—N£G�}éïß°~ýV­ZÊÌÊÆ¦—0¢]]]¾NbÜ¡};.ŸH–rùÊ•àÁ|c'<[¿~9 à/üúˆÕ/Ã¥jUÄ àç÷ÒÅ¥ ïæZ� àJ•*–)S¦NÝú­[·lØ AÍš5øÓþiñ;ý�+§·Úêýå ¿·~�üšÔ6Fdb²¨Õ3"*¢¤á¿ºñ¹xxᦅþïüÓÒÓ°I0AAü· 2déÒ¥À{÷îíÞ½»††‹WWWÇ_¸öööÆÀ�?þôéÓñMaaa’]£‹ˆ2�:ù.Y×4ÌÇǨjUM±qRÌÆ&ÜÛÛoõêÌ´´äðp¦„óLפÐЧNqâÎÌ™9_RƼxqI,_3’’Ò¢£ù]z66ê²Æ׬ɇ³„Â__ø¯»jÕ kxODÞ)\°nÏÙPRþÿR±ò”›Ä®ÀÀÀ6í:T°µusu573ãã;uìàäXéÈÑc»vï™9kö† ëš5m"#'.ÇRø §322 ±¹|"9_u¶Ràf›ŠŸ¼`¼çX‡Šö9e[UM�ßTSUMMé=]]Ýøøÿ�™‰û6ìÿÙœ?wúÌÙs—.]îÑ«�³“ãþ}{Ô$rø™©[­Þ‚M "¢#`ó6ªÑè̆³Òi²²DB7>)¾Çøkf¬íնׇOl›—ç‚ ‚ø�H¿§5nÜxÞ¼yÞÞÞ'Nœ8{VÆâ)))L«ªªþõ×_vßzöiý\M*::¥Z´>~üã¥Kåûõc‘�û÷‡œ;WgëVU}}ߥK“åNË¢¨¢’%¥oé0z´¾ý×9•œ§ÝBÊÒ-[–íõÕÕPPRâòÒ+ih’“Ù&*šâ‹ žÎ��Û·ïH~D1wr_é;9qò´Ei‹C÷{zŽéÛ·7/,A¹rå&MœpõÊÅ=º¯_¿��æàjii²ñÃŒðoÏA‡gÏþ¿úޝ¯ïÃG�þŸÛ·¥‰µ4ÿ8Ú2£¢d¯èS½º[�:îC‡fŸ±cGWs‘mÿ´•ú½øÿ”Úð¢Dÿ[8:Vºtù2ÓÀ0?:̧�Ümß®íºµ«ïÜòyüøÉýû¸Ÿ›ÐÈÐЈÐ}lúÇÜØÜÄȤ¾ký›�n^º}I l<¸±ÕЖlù+C“[OnÁÆÿ ÂL¡¡¾nþê=«8‚ ‚ ~,†††AAA’1ŠŠŠ;vlÍš5M$ÞÇÞ½{lj_Ÿ`ÿ:99!ܨQ#ˆd333 ìÍé•I’­ÇN= xÃ}6}úlÝÈ÷+NxÿV0Ô¯ %%¯¬r×ÚÔ±²bSLŤ›óżI“àcÇ´ÌÌt,-ùAÂÒ %Ä6t8RâÕí˳|/ëhÖ¨Ο«ßw`“Ë?¸‡o‚ g5P‚øÕ)ܾcçlD.YêelZ*/«ƒâAÁÁ>„@y-_ùùÛ£§Qã¦Ó¦Ï„ƒ ÿRÖÊÊŠÅÛØ”»|ùФ}Êcgo‡ŒNž<…CÎ�¿pï›tl٢٣Ç�·l݆" );uîÊ„néÒ¥ 6a·¦§§s"±jçííóôé3ºhñRaÝ``M/óZñàáCˆdoŸÖålqHNW‡Ä+V®Â™¤¦¦îßðº·OË–¢Ùž{öè^¼xñfÍ[N™:½e«¶ŠßÚÏž;o_ÑéÕ«NÔ§(EXYYr?75»Ö°jhÙfxÈ]6²·Z¥j Ç-ì;¥�ve-¨â1½Ç²fæÝG\¸y¡ã¨Ž% KŽì9Êc¬‡q­’Úš:AA?–~ýúmܸ±~ýú-Z´à#;wî;`Àɔ˗/oÒ¤I×®]áãí…O‘G³F�8|óæÍ9�SãA;øÄe«÷�ý®EàÓ*khXwíÊw$´éÝû‹¯ïQgçÓµk+ª©%‰çµ­\¶,>P³[¶D€MXå8yòƒÉ“O»»û._®ùMÞ;M� oöxµj§j×öß°AÎÊI°­:u:S§Îé:u| Дh È#UçÎ�õó;Y£ÆI´/Ô©cѦ —æoܾëÔZÒ™ ~r ¡ 4TîÑÃùI¡y €¹¢¤c‡ö—.]q«QKEYyР�+Vdñ‹.9zÌ.Û=xÂVs©ºàŸù,~à€þóÿYX½fm?ß§Ù²r©Z{ÿ9:C h€zóf,Nò†ukçÌû{úŒYêýúö…Åʉc­¡Cý=ÁµkÞ›6®пm³­p&cÆŒ661–yÂݺz| ýÔ¿ÿ ¨èh==½9³g:99ætu�C?}4hÈ稨2VVkV­pw³�ð>¸ïùó^ø½1b˜®ŽÎÀÁ¢Ù#7jx»m›&ÍZ¨©ª*«¨,Y²ÈÜÜœûYq,ï˜î+{ì!Cñ‰‰�Ñ×Õç#{·ëƒ¼_„—LX2wÔ\EE5Uµ9#çpAAü@ªU«öäÉ“˜˜>òîÝ»xc6/ÏÊ•+ñÞ‚·&~mmí5kÖÀ?ÈÌÌd#„åƒvð�˧ÔÕT¹ï£É¿;fkš™µºq#íËU]]…oç&Zøí[éc¡9;øú RSU$¦>E¸Ö† B!™™Jß.äRûöð–ù4åûöµ)ZÏ¢âØ±£G ’’P¿·t‹¥%Z0¥{DFf‹T74lpèWRSãÏ´ôöæò̧ϟÛ5¬Ë�KVV箂î…Ù Ý‹€´úe Â?y_‹ÄÄDñà�lñpzÕ �¤ÁÂãUQ‘=¬�ã”ÔT=]]é]qqq¹§&IDAT:::ŠŠÿ2Ìqë„B!ÿLOHHTQQÎËÓ<::í yœ¤*N<ï4¿øîÝÝ»÷<ºtV{¿sæÌ{òôé±£_;Bã¿´¿²FÖŸ„¤m)ª.ùGý�¤?ÈÐê«‘k²7�Á¥ò×VÎÚ‚#‚ ~d>íñ<—Yù¨¨¨\­ÎŸ?‡œÀëÐöíÛׯ_ïååk—�·°°xðà�Ì¥}‰Lrjj‡Ñ“ޝ\¤¦ú½M ñ³Q€÷ù‚;À½ã<ÇÈI[˜+zrZˆHWWvÿØœÔ/'ž˜A5‡ç [éH(Xe‰v8�\–Dâ‘l1Í•l‚¼¸¾þ’%Ë9êZÍåÅ‹—÷ïß_³z%¿ý§R¿ «XVVB–‚Î�›’Å¡PŽ ‚ ˆ¢'%%%22f¯«««düÌ™3uth°ÒO�¦ºú¹õË9‚ Ä|Wèqžc9âÇ¢¯¯ï}ýê±cÇÞÕ©S{ÖÌieË–å~b²Êf „*¶?nQâÌøLÊAQôhjjNœ8Q:¾ß·)— ‚ ~*~œ,! ˜Û½%–þÉÉ,-Tø¨( *™åoÞÿ‚�‚™BÊAAAü›ÂY‰ rBEEEP1=C(€4ÍJ(žÉÈ<ã•¡89Ý ‚ ‚ ‚øc!˜(Z E³ô³R]S””Þ)+Å•,Ô ­ð~ÕÕÕIAA! `¢hQ£¥¥Åpœ3GAAñ_A]  ‚ ‚ ‚ ˆ?ÀAAAÄ `‚ ‚ ‚ â�€0AAAñG@˜ ‚ ‚ø%ñö{�š‘ÁAäÀAA„ &NœxîÜ9~3!!¡‚˜R¥JùûûsÅÝÝ=66–ûnn½ Ü~펢‚G‘gh$¢hÉ“™™) Ìø ¹®¨Ðç”+()Y+1AAßþ×ÔÔä7utt˜îuvþ®… ³e[0Ò‚™NíÙWU™Þf ‚ÈôÈ ŠHßÌøÌŒûB.�S1SV([Tº4+!+3(3=H RMIQWQII‰#‚ â;033+Q¢D^R¾xñâéÓ§VVV5kÖä#ß¼yóàÁƒ† Jþ¿lgg§ªªš-‡/qñ3×l×§‡…©1—Î>~áPÊÔD_�#‚ÈÔš(Z ¡~9[e�"te‘¹’™ Bq(”#‚ âû5jT… rM¶qãÆ#FDFF.]ºtäÈ‘,òÈ‘#½{÷?tèP—.]„B!Ÿ~Æ Ò™D~ùrâªOð§0.o\{ñºf…²AD>!L-‚·"õ iÊýD%ˆ å‚ ‚�Ëõ�%7g­ÝÄ埸¸¸eË–íÛ·oìØ±¼ÿ>\_´DÏž={Ó¦MˆÜ¼y³¦¦æÛ·oåçckeùáòI÷ªyí\ý6,ÒÒÈ€#‚È'$€‰¢%3 KQ÷‡V3e3%ÊA!—ëÕë;Œ…ù@~yõꕉ„•••]\\|}}?}ú”ššjooÏÒìܹ³|ùò\¡—œ¢­®ÊAä“ïU&·oßiß±³±i)|X²t÷°k÷ž÷ïƒ8âg †+ÒžÏÒˆŠ+º©¶‚ âwaÖ°�u\œ!}ñA›\þÑÒÒJNNæ7SRR4Åddd®ÈÐÖPOI§�‚È7Àк½K–y!|ôðÁqžcjTw[²ÔK™7\¿A㊎ÎÒÃ5‡ ŽLäûò¥ÿÉ“§dî …7nzøð!Gü¬< x¦ZQ…}ŒªvÙ!*&JNú¥Û–àŽ ‚ ˆB…ià«_kWQQñòåËݽ{·V­ZÅ‹·³³;tè"ããã«U«(?Ÿ¤”¯�û¢bòº<’¥‘AH45x‘o 8 4$.´.Dï8ϱ,¦F�êø‹M¶‹…ågRL¿ØKÿ+W®6jÔ��ŒŠŠ:~â$—wîÞ=pà`ëÖ­¤w)))Ýð¹Î?=OŽ=5-aú<ày� Ýçoø{Ù$¯œRzíð*i`ìXÞ‘#‚ ¢PÉ»ôMHH€”E 11±]»v ;wîtqqÙ°aÃèÑ£,X€ÿüó�¹¹9Ò¬ZµjĈ›7oNJJBÀÚÚZ~æo?|œ°t•­•E³Ú5¸>u\ê¸Wq�ŒŽd‘o]tïén^×lÀô)i)ˆ©Õ½ftLôÄ¥úNéƒÍ€÷�û72t3¨ÜÞ‰9‚ ‚ ~l`€÷¨W¯^!õ‹øJ•*]½zõèÑ£÷îÝkÕê«9Q¦L™³gÏ?~üÖ­[½zõÊ5sÇòåî_Ï£úm]o½z›�’ÊAä‡ à;wdªß‡�ÙVp8}æ,vÁf½£åãáÑåæ­[P°l333r´wÏž|‚å+V:|dÖŒé‹/ðö¾1gî߈ìÞ­kW�.ÐÉ›6­¯W·NF† (8x™×rϱ£§M�ŒÈ� Gñ¹qcäè±­Z¶Ü¿oO[Û¶í;ÆÄˆzËôë?ÐÒÂâÚÕKS¦Lš6}æ£G�9â‡s÷ÙÝo,ß¹Üç‘ψî#øá­ÇØ.w8¶úøÛà7#ÿ-¥°zú]mÝ!]†L4›ãyZšY^Úv¹nµº=Æw§�‚ âg@WWW:šYr`ù¨«åcR+-uµ1­Î9tf G‘g ÒšÙ¿Ù"¡~{ôè]¿~½fM›`sÜØ1p\sÍÊÀ x‹æÍ z'OšˆMoo<Å�É‚…‹8±ý»zÍš=»vº¹¹bsÅòe­Z·�1}ª© �Šœhþýxü�3{–³³S¶ü7lØ4 _ß~ýú Œ½Å‹‡6ÆúÕ«€©S§˜‰yô஺º:GüpúOígZÂÞ¯³�³¦†&bÎxŸ)oe;¸Ë„§™ÖeLçMs69Ù:©¨¨X™—±±´Aü©u§Ùájªj«÷¬þöz˜#‚ â£�‹cJZFBjš®½È‘Wò-€YÇælö/¯~×®YÅbØ�`$f9ôêÕsÀÀAã<=UT”·ïØÙ³GwEů¾ôû  ¤¤ä#G��9{›‚ŒŒ´ôô·omme̤ocSN:Ò×÷EŸÞÿïu‹˜:vìÐÀÀ–-š×¯W¯iÓ&jjjñÃñ;ý�+§·Úêýå ¿·~�üšÔ6Fdbr"þFDE”4,)yÔ‘‹‡nZèÿÎ?-=�÷à‚ ‚ø#ñ¨U•#‚È…³@ë¾}$Õo¾p­æbPÜàüùóaaaÞ>7ºzxð»RRDC@K—.ejb‚OéÒ¥Ç{ŽÕÑÑ–™�‚‚Œµv222”UT¤ã—-]¼cÛV¸Ž3fÎvu«Ik&ý·Ô­V/ìsXDtlÞF5}¹ƒOºo>¼úÍÊ Ýø¤øã{ ñs?öÕÙŽ ‚ ‚ "ÏpèlÖîÒ%‹¸ï w¯žÛwìzФq###Ã/_¾°x›råT”•6hP¡‚-‹ÉÊÊâ…®P˜»õçà`ÿìÙ³zuë°Í«W¯Y[[[X”F&µjÕÄgΜY-Z¶>xèÐÄ ã9âÇŠ/ô]Hà‚Mÿ˜››™Ôw­ÿφù—n_ªçZoë‘­§®�<¹ö¾,C“[OnµkÔm"ÂL¡¡¾�P(\½§ .AAAü±äÛ†îÅçö�\fxfKçÚÿ™Ñ±c‡§ÏžnÚ´JX2^EE¥M›Ö'Mþ�žž¾vízûŠN©©¢éþ �ß¼yóêU€ü5Ö»té¼zõÚ[·nã¨öìÕGIIñóç(+k›cÇO@}ÅÄÄÆÇ'”±²âˆNÍ®5¬Z¶ÞF °‘½Õ*U[8naß)}´+kA�é=–µwŒè>âÂÍ Gu„!<²ç(�±ƵJjkêpAAAy¦ ð�»¹&�ž(+'tt´Û¶isÿÁiÁ¼dñ¿Fޮ߰QJJªu«Û·° «ªWwswwoÚ¼å¬ÓëÔqÏ)çŽÚ‡††þ×ç¨(ƒâë×­akÓ-˜?oÊÔéãÇOÌⲺzx´mÛ†#~ ŽåÓ}3dîâ1TÔÃ9>F_WŸ�ìÝ®>ð~^2aÉÜQsÕTÕæŒœÃAQôDEErA¿8 ›;>/³["°y‹+&¯¤¤$sôo6bcc¥�ŽŽÖ××ççÜ"Š‚¤m)ª.*Ü�%ýA†V_�\“½ ¶(eÂå‡à�°rÖAñë ói�ç¹ÌÈ¢xÈ¿tü=r ‚(t ð>_@í÷#Õ/PVV––¯,>/êÈ<ÜÀÀ€ÔoQ“U,++á‡.ЇâP(GAAñoHþEKVÙLA¨�û�dÆg¢PŽ ‚ ‚ âß�&Š–ÌÒÂL­Lá�ÒÀ(H�)D¡AAAÄ¿!L-***‚ŠéB¤i‘ö…Fæ¯(Å©¨üèQÇAAAüüph‚È#ТYúY©®©‚JJ╸¢A¨+Z àýª««“&‚ ‚ BÀDÑ¢"FKK‹3à8gŽ ‚ ˆ?�{ãÆ™Ô«WºE îû8dkÛøÄ ½òå¹B"`Ë}{ûnn¹–u²zõ¦gϪêësAüâ�&‚ ‚ Š�¬¬,eMMîçCYKKI]=/)q JhÍ'âׇ0AAQ„h™™i”,ù¯¨¬¬0oïÄŒªU+fkËâ2ÓÓ?^¸`Þ¤I˜�ObP�E›6êFFˆ�¼w/îÕ«’µjIf�óñòeEee³ TtuYä__euu•ˆ74Œ�Í5Êé”®_O��EbÕoÇ2d–`+©ªrAüú�&‚ ‚ Š�ŠcÇf‹ñîÝ[�œläêêÝ«—݈åzõB¤ )ÉgÀÓúõ•TTÕÔL4€ö_»öÕæÍ–íÛ�Ÿ‘�À� ¼êáQºeKAbâ³ š�?Ï:'îÛ÷åùsaJŠ^ùòºÖÖrpÔ£GIŸ>A'—8жL)³,†û–-A¿$€ ‚ ‚ ˆǧ+Wâß¿oéí­ (_IDAT ¨hٮݹ¦MËtîüµ+rVV…!CLêÔa)332ž/YÒäìY¸ÄÂôôÃ*°ø'sç"Yùþý¾;fÌ›={ìGŒ`»�g³‹”r™t³¢§'þÞ<˜�É©,‚ ~3HAA?Žè§OKV¯¥Š°nÙ²*ZZñïÞéÛÙ±½Æ5kò)“>~TPVf}¤•TU¿­ò òoCC?œ:…pò§O™H ä¬T�%'r*‹ ˆß ÀAAÄ�CYKK�œÌo RRTr˜_JYSS˜šš•™ÉÔ2Ô©ÃèÑúöölS¥0¦§Ê©,‚ ~3èNAAü8Lë×½|994á £G5J–Ô*UJfJìÒ±°xwàÂq‰‰,Þ¼I“àcÇ´ÌÌt,-S>æ¾›œÊ’ÃÕ{£cã8‚ ~)È&‚ ‚ ~z66UfÏ>ߢ…ª®.ìÖÚ7Ê1]«¯\éÓ¿¿ïÒ¥š¦¦ªzz,ÒiêÔ{žžÇ«USÑÖÖ41©¹f —O.¶nóò¥0%%äܹg :Œeÿ×_2Ë’C×ñÓö-žWßµ*GįƒBVVG$oƒ-J™äë�à�°rÖAñë ói�ç¹ÌÈ¢xÈGEErßÁï‘Cv²²2Tþ½ QNdÄÇK§¦§s™™òòýxáÂýI“$cÚÜ»'A#™eI“–ž®íR7äÊ)cCŽ ˆÿˆ¼Ï“LAAüpò¨~�Ì”yY˜×¼I|¸ü�dzzì0¼kGR¿ñËQìûâÅæÍÛ²¸¯Ö±•…Ř1£ðZ¾ò}P‹Tà è[ÑÁ�#‚ ‚ ˆß‹êŽñá‚øÕ(È$XP¿ÉÉÉ)É)ì³pñ’ÓgÎâ³pÑb> �Œû!¤§§oß¾3)))�ñ…ÎÙsç_½ à‚ ‚ ‚ ˆŸ˜‚8ÀÌûÝ´qÛ46=�•™ÉÂ|äÀAC8.—ÑÅ;yܼuKAAAIQÑή‚‹‹K¯ž=Ê—·áò Äö¤)S7n¨õïIðsŠ/t6lØØ¦uk[ÛòAAAñ³RÈc€O�:�¯ô'Œ3z¤@ xóæíÙ³çZ¶j³~Ýš êsAAAQ¨Ú:ÀÎÎNúÅŠ <”}N�>Sµj•<«¬¬\¡‚­§ç˜AƒL›>“E~úô©wŸ~¶ª¹ÕX°p?[õú kÔtG<ö†GDð™¼yتuÛò¶ö={õ���åãß¿jß±³My»^½û¼æã�Ÿ8Ù¶]‡ vÿäÉS>~ÇŽ�µÝë–³©€½|ÇæÖmÚ!}»��6328OçÊ.87ÄK^KN§GAñëRÈS@AüGš677÷éþ)„ÿôìÑ�Ë'M›4 NH­<>hð0UUÕ}{wO�¢ôB¡pÛö�Û·n®W¯.6mll*WqaeÉ9=‚ ‚ ‚ â¿¥ 0”­¦¦¦†¦ûLœ0¾e‹æ…2 tll\ff¦¡xE5ƒËW®,Z¼dòä©»÷ìýü9 ‘-š7{õ* IÓæÛAAÁLš2øÙ³ìí%•§«k5€\±bEÿW¯~ñÂÏE¢‡¶KÕªˆA@WW'**zËÖm³fÏ™={.bøI¤mlʱÀû÷ïÓÒÒ\\ª²M##C«2V,,çô‚ ‚ ~QMJá‚ ~} âÃ×]±|i¶H6´Ä,ÐC³r›Z???--M+KËŒŒŒ¶í;¦¤¤4lÐò²d‰ªª*œXåÞ½sóÈÑcW®\…66dðôéSÙ±JJJ, ¨ø/U¯¦¦*NMMC VUMíÿñª_ãO�:=Ös|ýúõìííÌÌÌŽ?Á§�©Ë©ii(BEEEòp�szAA¿(ª*ƒ×ïÞ5ª¯ªr!ÏŸJñƒ)ˆ¼s×ncÓRü§‚]Å�?rßMjjê¢ÅKÝÜÜ /?~âÿÒÿôÉÓ§M4p@­Z5•¿=pá #æÀþ½›6¬Û°qSzzºülŸû¾`�¬¬,?¿—*Ø"looï'¶|¾/^88ˆf·Ú±swŸ>½7¬_;ò¯ÐÞ23´)WNQAáåK¶ •Î�.ÀéAAüä8Y•r)g¹ñÒMŽ â§ øÑ£Ç­Z¶€ÀcŸ˜ØXÉY”óÅ—/_Þ½ÿêUÀÞ}û»vë�Í^"oÙÀ xZzú½{÷ÁÅ‹—.]ºÌÒOŸ1«Uë¶l’ç���¦f¦ªªªò‹X¶ÌËïåË„„Ä ÅÅÇ»×�îԱÊ•«îÝÕ½ÿÁëÞ>-[¶`å>{ö É¢££ÿžÿ�Ì Qb³fÍ&O�Œdã'LâÍáœAAÄÏOw×ÝÞ÷„âA¿.ïÇÒªU˯¡ÁC¹‚²ió|”ì«U«æµl)›d¿lÙ²£FŽè?`�P(„ýÛ©SǨ(Ñ`³#G�®XÉY]]ÝØÄxýÚ5¹1ÎslÏž}Â#"ÊXY­_·ºD #DzxtýôiР!Ÿ£¢¿fÕ {{ÄOïÙ§o;»ŠÚÚÚóçÏ;}æ¬Ì<—.Y4hð�ÚîuaV�=ªRůs}àô‚ ‚ ~~Œ‹é×ÑzêlUŠ#‚øeQà××Í;£F{&''ó›§NŸÞ¼inÕ²%¯©©)=T8_ddd  ==½lñi"Òuuuò˜®®¬¾¾¾ô.˜½zººÙ"cbbttt”så’””„4jc‰ vzÄÅ›À`‹Rù›¨,8$¬œµGAü:È|Úãy.3²(òhÄÿÎEt†ÀÐ�{ëW´íT½2GñsP€÷ù‚8Àôݼy?Ç›Z?î}p0‹dË qß‡ŠŠŠ´úåÄó9KËN9(((ÈT¿@Zý‚œgCKKKf|~O� ‚ âçG[]-.)™#‚ø•)´Y Á˜1£8‚ ‚ âw$5C ­®ÎAüÊd,‚ ‚ ‚ûÃøcYÂ@2Æ?4<(2š#‚øu LAAäBBJjHtL¶°Ö�÷>~¿€K�Aü'�&‚ ‚ ráøýgÜœÕTþ5z.2.¡¬I Ž â×�0AA!��¨˜c÷žüÕ¼žddJz†¦šjcÇ AįCÁ×&‚ ‚ þ^|]Ù¿‹¶ú¿¹ÐPUÙ:¼GñKA˜ ‚ ‚�G³ÊAÄou�&‚ ‚ ‚ þHAAA$€ ‚ ‚ ‚ ˆ?ÀAAAÄ `‚ ‚ ‚ â�€0AAAñG@˜ ‚ ‚ ˆ"'þíÛ¨G�2âã9‚øï LAAÈ`âĉçÎ�ã ww÷ØØXîûH‰ˆ8]§¿æãtô(¿~ã†äf6B/]:`m½ßÊê � ÷»óùáÃÕªqùǧÿ×Û¶!ðdÞ<Ü®}¥Jy÷騬,~½wïË—¿Ùµ‹û!²µ� ÈiƒŽáŠþ曬¬‡Ó¦¥DFrù'ïßêÆ‡3gøMߥKÓccS?~¹v-ùþðá/Ïž!ðvÏž'sçò‹HÿuëÆ�Ÿ®^Å9s¿$€ ‚ ‚øÍ‰‰Oñ Œxþ6œÿÄ¥)ðaìBŽ�"++KSS“+l 'Û¬,e‰LðÞÏo¾\³&-g�mÖ¨Q—ÀÀæ—.qDpž6 ·«ªÄí-‘÷î}yþ¼•·wÝ]»ì†çù((¨êé)ª¨pù'ïß×—§O?]¾Ìoúoܘž��õfûv>2äÌ™Ô µJ• 9>%<mmD¾Ù½[AQQÍп¸+]ºd¦§s¿ÊÜwsûö�%˼jTwç9–û�xóæ�Ï�›®Õ\víÞS«fM++K® |ùò%::ºL™2JJJAA¿8?ÇgåìN`èëjpÄ¿133+Q¢¿yïÞ=�Ç�W¯^ÝÏÏOYY¹yóæl6=zT¼xñF�©©©ñé_½z…ÄŸ>}ªR¥ ŽeñvvvªªªÙÊú?sÍÆq}zX˜sy@AE¥xÅŠüfÉêÕ3’’b_½*fk+HNޏ}ÛÍË‹íŠû6âÖ-e--ó&MT¾�ƒ4ð¾ Ò�áŒÄÄpŸRß®.áÝ»ð›75MMMë×Çë~Î'Å¥ÇÄ|¼|YQYÙ¬A]ݯ—æë«¬®ŽޏqCÃØò‘ÉŸ>%ãla�¡¸r½zAó°ÄÑ�ë”)c\»6Ÿí§k× œœpÑOŸ–puÕwpàò îLÄÍ›zåËKfy÷nÌË—Zøš6TøöÒË.VO®7ž•™ùáÔ)“ºu!ÒÄÛYÁØtwW-VL:±05õãùó¸·¸ùNŸFŒ)nŽø‹H …u�…«¬¡‘ÓÅâ(++XŽæ †^¹¢oooX¥ KüùþýXÿâ•*8;ÿÿºîÝ‹{õªd­Z\nà·æí�ðþ=N÷ük¤@€/1-:ÚØÝ]»T)Ñ= Âùà$ÙÞgÏâ6ªéëçëʬ´4\ojd$2Ä5"&3##DìÊê•+§ø-CÔaªw@€–©)*Rüë×–;²;–Çê-çHn0W22ë[$ûi„œ>�kݵ+Ÿw 'oÓ«×µ=^®[ç0j÷Óó½0ÔoûŽ�Ex©—±i©%K—åýØŽ�<¼–¯ä¾›ààM›·|þüyzZšP(ܸqÓC±)_?~â^·~ÍZuºõèeck÷÷üNô¿�«3/e‰�…UÙæ-Z8p�Âv™˜•æ?®n59‚ ‚ ~²rë›—õëtÞû‘Œ5ªB… üæ·RÔÚIDATÚµk.\x÷îÝfÍš½xñbÖ¬Y7nÜ@ü¾}û† æÌ™–-[¦‹] uëÖáðˆˆ$8p`XXŸÏ† ¤ËŠüòåÄUŸàOa\ÞP70¨¶h¿© ¬lÞ¸q¨ØÔ…¦*fg§ib‚pȹsW»vM��‡P9]§ŽœÑ§‰>ÜŸ8‘…SÂÂîŒÍÂPzW»uKýü9`˹}JãÏ6nûòeäíÛg5‚àañ�ûöÝ3æFÿþwîÀe‘QOž ˜f/^D}û²HHÇs͚Žyƒ‹ »v-§ Ñ ¸wï›;ØfØ��¦Og– 4PtÈ09,L˜’‚>Bq Á7r¾yshEè½ó�g$$ät±·GŒx»gÏ»ýû/¶m›ôñã•N�Xb\“¹sS££ïŒå¿~=;ÜíÚ[C‡&†„Ü?žÏ3'ü7l@��Z>Ó d0bpn[·þpò$ ºØª6'6?L™"ðláB|¡jb©Ÿ÷{(³nRR.4o|ìXJDÄ¥ví>]¹‚È,¡÷ŸÛ#G&~üÈG%ÁMˆ{ýúЇÇÛ]»Þ:ôbùr.?Õ[&¼¸Í52wlúô ‘èPý3ó]0ä.t/¿Y£Fu¶ùƒ­`<ˆÍÍÍW,ÿz&7|®s"##£[÷žÆ�ëׯ6ñ¤îìÑ m™C‡ ¦’¢âÇ� ’““oܼտÿ@MMÍV­Z²]¡óý0"‚ ‚øµèÒ¥KÙ²eaöN™2%::úýû÷µk×¾téRß¾}ûˆÅáêÕ«cccñú´bÅŠ'N”/_^ T”°jsÂÖÊòÃå“ÜwPªE ÿ5kìÿú+ôâÅRÍš±HeMÍ:;vèÛÙ!|®Iè³Æ�óž'ÔtT£ãÇaÕÂö7V®\ §·víZ]=ºà.œ;3wÞüý&&$¸U¯5|øÐž=ºwèØeĈaõêÖ™5{޾¾~PPðéÓgØçììtòä©-[·½ |ç^»ÖŒÓLŒÿÕÇæãÇÐØ¸¸ ê³M““Ç�2XèÞ&�Õ©ãÌ0AA¿ �Ü­ââ& ò…‚ÈÌÌD`øðá£G�¾xñ"Ä0²‘‘Qpp0öBýb¯²²²t‡ç¢À´nÝÛÇCUB4ú6–¡³óó¥Ká%â%.\FRR~²õ}M�‹{0iÛ„qûúuN¥$…†Â1æÄ=œ3ÿ‡,Q½º‚ÔÀ:=^ýrâ^Ê�ø ¬¨¢RÂÍ-úÙ3^ç¥CoN@&±ÒõàÇÂoÔ433¬\ùá´i°=± Ú^�œ ñ†spž9“%¿?­I�:ªzz/\0ru óöv]¼˜ËhYˆñõå/ʸV­P‰Á¨²/µN\ñðBw–òÕ.]ØNœRXX–@ Òö¶¶ˆQRUÍu ­ê·®Èø"ÒÄ®,²�yñâ’X–£¶¤EG³¸uvÆÁ–o|â/‹Ìû=”Y7pŒÜ¾>‚Ì5b}ãs�¿âŸÞwVo‘Û›­·³TdÞÝ`ajª²º:÷+PÌŒ_è[¨_ümß±3to�ê¢b`ÿ"‹,€Þ£gïÖ­[�=Ê÷Å‹qã'ÓÓkذAà»w0]{õì1cúÔG�O™6=1Qô÷íÓKEEùÜù «W­0.)´?~„I‹ÀçÏQêÖÕcÇö­ÖÖÖ�ëc<ÇÍ�3»¼�Íú ›úõxòÄQ‰†¥¥…•¥å°áM�2Éյ𒒒¾¸s¿4¨¯^Ô¯_�#‚ â—bHŸ.ë·`�~Ô�«¨R¥Š··÷‹/.\¸Ð¨Q#ü…[�žžy¬¨øãæ[…ufâîþbùr]]ÝråXäƒ)SÔ ¡‡UU/wè çp$Ȥ#¡£\—.å嫺�AŽ9¨¨À¹Õ··g›*ZZ\~PÖÒˆß`0ó›C®@ýBz)Ši_õð¨:oç¼ç›'©,yò� üjófÈ?˶mUsxgÎ ÜO% ¾,‘tÌçÅâ«�ë&î ÌÐ46Nûò2 âP¡ _bé–-aÁñçùuGVVØõëZææŸ®^Es‹Ëû=”Y7�R˜ç»-“¼Wo™@Ÿ YM"«­ u-)¤VΡs{6"îÜ)^©÷+�ïÊÁÔ/Ä-S¿P•œDŸg~“YÁùÌ8z䘅Eéysg;99ÂÎ>lÈÆM›äÈQGGGØ¶ŽŽ•úõëÓ¶M–ÞÜÜÜÌÌLSC³¢ƒƒ‘‘a¶Ü*Wvž>}*ÎSWWgíº Ã†…®R¥òšÕ+‚‚ƒ?y*™M•ûöîVWW‡z·­à%|ïÞ}~/Z?Ξ;�Ïþý»÷蕚–˜íff–)[žÿLš\À*AA5½0~ñ!õ[X4iÒäÊ•+•*U3fŒ¶¶6ì_˜À‡ÂÞ÷ïß'ä6$¥¤xíÜó]Ë#•jÑâÕ¦M|ÿgy¦[¶,äAbHHÜë×rì,h˜½Éâ±Ê‘÷¿¾j››k[Z~ºrEÇÒŸˆ7 rÊÁ¼I“àcÇ´ÌÌ�2!00åóg.?+_/²Óޏ{רÝ]Nz¨¬<®=“ +�wèZ[C2 ÓÒp¥ÅÄ=„¡ëDv¢8”ÈFö Ä3ŠÉϺ7áÝ;ÿ l âò Ï€­[Ù…àÄòäJ`R»vÌË—é_¾ànk…]»¦¨¬¬Q²¤Ž…rC‚¸€€Œoê.ïàK 9wÊÙr™™l à·jnZ‹kׂOœ`ƒuóueÖ Ó† ß;ÆNòåÚµ7‡ áòIÞ«·LJÖ¨qû6«�ûö‰º$h—*¥V¬XðIÑx„Ø€€//^”puÍ5«0ÿµkíGŽä~ ahN¬{ Üá9/üüªV­Âoº¸¸lÝ&ªC~~/]\þïæZm÷ž½¹æfcSŽ_¾r%øC0¿î\LLŒß ?×j.’éa9| 8øƒ·�ÏŽ»Úuè´~íjØÑØ…VÌyóæ#�‡ûåKçùÔhÝ<|p?Ÿ‰AÎMƒAAü·Àø8| ð¦µËÍßÍܹsÇ�ïååÕ AƒªU«"rÙ²eƒ Zµj•¡¡¡JVsyûáã„¥«l­,šÕ®ÁÑL¼ ¥¿ÍÞ̉ǎÞ:ÔoåJ¸XÆÆI¡¡ˆ ½|Y$623án([‡t~óFE[‰ÏÔ­«ibòå© à¾eË­#^oßua\»¶äü·Ùpš:õž§çñjÕ�2©¹f — cjoÙrû¯¿žüýwFB‚ë¢EÐärÒ'}ü²{X˜Bn«–@ÕÜ6,-..=6¶ŽX›)©©9Mž|¶Q#H};;xæ¸3P�Ž'^ïÕ ¦ìh¾ûîÓ¿ÿض-3=â·«„›[½Ý»9±«iÝ­[ô“'¼ßž/ªÎ�‹¯æd�‚”«ví,¾™[yDÓ̬æêÕ7Ä7 g»ÂàÁ¬{põ•+}ú÷÷]ºTÓÔôë$Õùö/”ä™:uÔ pcY×îÈ;w^mÜØüòedXsýzï^½š]¸€Èû=”Y7P]q÷NÕ®­ª££Z¬XíM›‰¯þ¨xFk.¶l ™QoŽ’GfõÎéû’FÛ¢êߣxÑÈ¡›HLAgrkذ§óæ ÓÓ«¯X�‹B´wïÞá·n¡µÍC§O¯ž_§GYYç›5sœ4ɤn]® À&…Ïi­¼ óvåõr@4 7))/« åëʬ�©¢² z¶ùªÞ9d‘•/} y¬‡ÿ9xŸ/Hmƒ¬­Q½ú’e¢u�D£kˆÂâø1lU$~x0—ìíí?yÂoú¾xaog‡–9GÇJ6nš4q‚®®ÌØC‡sù¤zu·:uÜû÷û:G9”?›Â�çæÍ[{öî[·v5S¹²ó¥K—³åÑ^͵ڢEK6¬_ËAñKÁ\_Q/h õK|?Åþ½ìœ9sÒÓÓ�œœNŸ>Ý©S'�ò¨:b^¼pü¶nS^à§nâQ�p–N™1ýôéëmÛ`r~�úåÄ#Ÿ¹ïCæíúõˉëL×ÔÍ×=”™ .ßs¶ùªÞ9d¡ óþê·`p€8“¸l /'îÍ–fs_å]ý¢]ðÝû÷ü'55Î-\_xº?|ôÈËkEÇŽ¢!£RÖÇIDATÝ={t/^¼x³æ-§L�Þ²U[ÅÜ:{HÓ©c‡e^+<|(¼}nX—³}úô™dû³çÎÿ³`a\|<4öý¶oßY¿~}é¬&NòÔé~~lºäU„„„pAAü”¸Ø[ÀþÅŽ(2.\Ø¢E ¼Î >|q>§&òB…¡CóÛm¸I/V¾|Ý�;9‚øÕø®1À¬‡³äRÀù5~7mÞ‚¿yüèa77Wx°óþž?aâdƒâ}úôêÕ³v©©©Ü¿÷üù /ü^Ž1LWGgàà¡\~èÖÕãSè§þýEEGëééÍ™=ÓÉÉQ2Z.�>0lø_+V®VUQ�?Ü£G÷‘ —Îʵš‹{íZÿ,X´g—hÔr�šÿŸ¥ téR÷ïæµ; AAü�½»€‹*mÛ~ènD‘RÁ@lLìn×n]ccî Ôµ]»×NlTTÄ"¤»»s`Þ›9:/ÃÌ€®Êõÿæç÷œç<ç9gFßY.îð%í=r–}úÑ^T€?'III{QI ߃¾}€o“8×W´ÕÑ©†Ïþ­ˆÊ°jeÎ }öìùØ1£¥xµßõë7¾~óæÒE‘O„fxw±¢br¹óŸËJJJ¦Òt“&Mddjç&aðuÂ5ÀuA¹k€«‚k€¾9_èàŠÄxÞoµÔ>=^SCcëV§ó.RõÕÇÇïÅ‹»vî`ÄRí]šëÕÓ®øD%ø¦}¹§“×�†††ë£CÊÏÏ·³ëróÆÕÞ½{1ÕpÚ—�àûð-�⫪ª2yò$@úõT£“2«ºì‹Ò/ `à38xPÃÒRçãC(E~ñbÒË—6›73µ׸ÀwNCU�^e{"¢âD½l Xî³f55J¯woaK+)Õ䉸 —+­¨ÈÔ`(�“—}ëVaf¦Ž­­º™õd……¥¾}›îççæÆÉÉ‘×֮߹3õ—Fß¾­ß§õg‡‡"_¯^Ü£G…ééÒòò²eîê’ðô©š‰Iª�OvD„n×®*Mš°ý©©1wïJÉÉiZ[ç'%Õ³±aûeÕÕU?ލÀð J¿7{õªß¡ƒ¢®îƒ1cZ¯^ÝxÄ ´AAœÜܼ¸8j|œ“ã6cFÃ=¤dd$åäöìI8ÙË+'66ÁÝÝtæL³�!ÖÇÉ©(;[»m[nIÉëõëû?x Ò¸qAZí‹B¯bÆ^ëÖi·nÍÀ4P«€à™ÁÁE™™íþøCBZºa÷¡Ô©Õª½â?n4h•y?Ù€Ë5Ÿ3G×ÎŽßÑÂÁ�þ|<{v¹™�FŽ4�1ƒ”¢cïß7�>=øøq-këÎûöQ'U•“_½b>`ø„†……~ß¾W:t LkЯ¥Öj7iЩ#9 � mm*)S#Ýß_ÇÖ–íÄ¿ð¹!À'$¤¤l·l)HK‹ws{û×_ OŸ¶ZµêêÚ~d”´’'/�ø"¾™çÀ—qåÊ�ÁƒeUT ‡ i6ujÊ›7üUòÚÚYaaLíiйsø… œœj§¼}[íø¨ø„çï|±  Ÿh4p`¼»ûåvíä45)švܹ“¿ÊtæL×I“(²J)*ö»}»ª(?§ùùçåE¹¸¼ýóÏæ‹Y.XPù¾ Šsu½Ôº5íKFMMIO�èºëãÓ7ï¸ÝLj>Qz ôÖ­%EEEÙÙü«vY:¶¶#|| ÒÒ¨ÌöÈjhLHL,7ƒýÕ«§íyþ<¿m»eˇ}IJ¶Y»¶í† ´ÓwýUÂá0Å&&[1bA€JHÊÈ”K¿ü~¦–d……=?¾éĉ…éé!gÎØ_¹"x|htÌúù³±à`øÏ¨õ~âdXX8P†˜˜*½Ö.]²x«“3S�‘£Æ:oÛÁÔXDDdßþß½{WXPP\\¼ÿ�—/_25p㦠åù'Ož2Ÿ�Ÿßû«W¯1ðe‰€Ÿ>õ ×R‡%ô'ÿ´çøØ(jÐ"   0;†ù"ž={¦¯¯¿}›s—.�¥¤¤ÜÝ�5’©�sçÎ׫§ýï¹óÌgàñìÙÎ]»ø²Ä À”~³é—Ú3õ—6:´go‚E=Â�+õî�÷ä)ÓÌ-Z 2ìü…‹ü~W7÷#ǘ43Ÿ6}æÝ»÷úô@�6n^¿qsxXxû��Ÿ8I=4æá#Wj¬]·~ûŽ¿/YJ›¼~ý†z¨ô:dèpËÖsçÍ�‹�¯tïiiiî�Ÿÿ÷¬‹Ë­üü|~ddÔÌYsÌÌ›óªÍÞ´»�ÐPêçr¹ŽŽÎ]ìºÛ¶ïD{ä||z;üM—[&N±hnµè§%AAAÔ¹e«££Ó¶€€@ÚüÂÅK |)âà­ŽÎô¢ôËK¼Ÿ\îKeaÊÆ´–åÒ 'œ>u‚ ¹K—­¸wï>õSÚœ>}¦UËçÏ�íܩӯ+WQ"¥þ©S&Mœ0¾±QãööíÓ‡z¢££sss©‘””¼wï~M �£GSb_ì°t̘ÑÇŽâpЧM›YTTTñ®\¹Ö±CGSÓfff¦.·n³�S§ÍÈÍË;zôð‚ù?þúÛªðˆˆ¢ÂÒÍ·mÿûÜù kW¯Ú²åWW÷õ6±›DEE¯_¿qô¨ö퉎ŽÙ¸éwêüaü¸qcÇ4jd@GÛ½›_ŠÈ˜=±™ ¼ñ±¥ù“b0ÿ.Ðì3�(Ó**‹wôÅ — mܰÎÚÚjâ„~œ7gÿ�¨ÿÂ…‹VVV«W¯´²j9mÚ”¡C†°ãõõõõôô[4o^¯žv¹ÙZ·nµjÕot´ªª*»÷ì›7wîøqcÛ´i½kçvJ°¯xeár(Í<�ƒ:þÛééù222rßž]¶ílôïçà°˜í§òïÎ]»¶9;öìÙ£k—.Û·9=zŒ_?~,MÒ©SG‡%?¹¹?¦zrÃRº t´ššš |)ÒŒX(ß  ø.Yøøú¶mÛ†¿hccsèðQjøúúÙØü¿¿½m»'OU;[³f&üö½û÷#"#ÒÓÓÙÅ´´4__ ´eLJ……{½zåì´• ÑmÛ´Y¹j •‘)Wûúù™››)++³Ãø[……‡çää^¸xéÆMZä‡Põ˜·÷fì0Ëæ–yyy‰‰ITûeà¿ r˜}Êå[*ö>õð bïR‡%ì*jðŸŠÄ/3"*((�••å/ÊÉÊP¡UUU533‹ßŸ‘™)Ìlôe5nÜPW—}-sXÒ¼…e¹ñ§NŸ¡?»vëѪµMßþ¥u`ö"är{ÏÌúЦXKR¬eçlÔ¨M«¢ò!'KKIUz_¿+V¸¸¸”뤟ÊÖ¬¡ Aóù]¾|yÕªUL�]íС0-�ùŽ¼Þ¸ñ¬±ñi×)S˜ÚçætìS·éÓæ/>_º4òÆ à›"f˜)�»®õå`†w,ê¤L F,–––¯^¿æ/zûøXZXHHHXYµÜ·ÿÀÏ+–«ªª”””œýÍ:´·³ë:}ÚTv‘¾¾iÚrc®^½ö÷vçáDZ‹‡¡Í�3˪eËàààwï¼[¶lAýgÏþËhfb"#-Ý«gOª ˜¶œââàëF?Õ(**–뤟sÔÔÔ¤¥Åÿ²RíÛ·§°­¡¡Q®¿âˆ�Þˆ”’#.ÿ}û ÒÒ¬~þ™ùj´Z¹’^AG�Æ>|ÈÔ6iá>.ú`¥kã/àKç&XK—,fƒTöÑGe‰Tz hGçr÷ǪTjjjhXÿ•ŸŸ? ?�g'Nž¢öK//gçí#GŽ ‘'ü ©©Ù¯ÿÀ_[5pÐPÉ�ÅUá�9ÂÉy»çË—ÇÕÍÝØÄìÍ›·e¼ðôŒOHèׯ¯ÔGCöñõ ²°0Ÿ4iâ˜q?8,]>yÊ4/¯Wì&222C† ^ñó/‘………»wïµla]öÞÑQf ò÷à_* ðÒÓÓÓÑÑá/Ò�.Wyš6mZ6_¿~�~ø¡jí™3g2?ž£G�ñññÇ�¿uëÿgž/^DFF²m//¯°°0j¼|ù’æŒŽŽ¦L�ÀÀ@þÌ”´�ŒŒ*Ø©·w�¡¢ai)UæÃŒÀÀtÿ4_߀C‡Ÿ?ÿÿ8.7îÑ#*~ÒZ¶£(++âòe“ìåE z ÞQfp0…Ò°ó狲²�Ì��Môð ºtø… ´ íšíÏ ¥ˆ¹w�[R"Æ´¦§GßþpW×¢ì쨛7Ù6Un999l;êÖ­"Þ_\š�½Çܘ%ƒO®Úc�*ñYù+•ôôê×g¾)âàgAóNræ?ú¨ì#‘ØÇ sþó�vìÔ•ÿ¢Djffºg÷N*ö6ij:uÚŒ)S(xN ‘rrrÿž9µpÁ�”KçÏŸ7wö,FDãÇ��:yÒôé³56ž3÷ÇõëÖX[[•pþüÅž=ºó/ô%::õÚ··=Ç»�ßæì¨¬¬d×µëþ}{øc¶nù³~ýú=zõnÜÄäô™3G�”——pTˆîÚµkßþOœ¨þf€ÿÊ¢E‹ÌÍÍù‹”có,Y²„ò*¿þüù³gϦßïß»woèСlÜý‘'11qÛ¶móæÍcGîÙ³çÉ“'lûàÁƒyÕKÊÉÁÁÁLé­X¨AÕþÌÝ»w;vlÅs÷zsç©·›ézð`ÙŨ7ÜgÎôÛµ+?1ÑmÚ4Š l¿ëäÉ~;wæ%$¸NšÄž\\X˜T�šZ˜™I� ÞS-«åâò`Ü8IAñº�]‘Àëõ’_¿öøé§ûcÆDß¹“àáÁðÎŒ¼víÁøñùIIº}<·Y¤i+ÊŽŒ|±bÛ΋‹£�²m� ò>žÇþÜÁ!›÷šçîN{÷Û½›?å—~ýè½SܧçK–hXX0ß1O_¡"ðV'ç‹UGÜjï’EΟ;S��iIDATiûÞôÊÈÌTSUåw†„†>{ö|ì˜ÑcÆ”œ×¯ßhfúáST¦äóg¾XwíÜQnæ¥K—Ð+%%…ŠÉOTþëÏß+ {UsnnîÙ³ç@F‹÷îݧ@Þ¸±!µ)îØ¿—¾ë³³³ÕÕÕù¾~åÉo«ªª°7Í&ôÓÇ�Ðx)Ñ‹Øÿú™ç¯¿þ¢ÆÝ»wË­úå—_ÌÌÌJJJ¬­­CBBLMKïêììܨQ#ÊÆ666T×åß´œ�r¹\'''©­­-Ì‘ìY½‚©µ¦M;ñ2ž¼¶6ÕB�{ÿ~fXØ@WW IÉÆÃ†¹ôíÛdôhy-­–Ë–½år ’“©ÁßׯË׫Ç.r‹‹Ÿ/[Öûòeu33*ÿ^íØ1åÕ+­Ö­+�¶Ò7%`_B22„^åάöqr²Z¾Ütútjß=𸯉ýû”#ŠÁÔfÓ~©\š��ùyOleÓ/ÑÔÐØºÕéü…‹¶íl||ü^¼xQ1ß IKK‹‘¢¢âÝ{÷þ9x¨oû¤ää»wïQ ºl¥—bmÙô[­Z¿rà¿Â^»+))I þ7ØŸ””••---©>\UþOÈ~|¥œ–VaF5RÞ¼©ß¡¥_j«6m*£¤”ZUy3áñã�3ÿ/äô8uŠJ¸Ú­Z½stLöòb¸\*¥ñN0Î�Ž~µ~=d«•+5,?Ü„U­Y3~ú%Yáát$ž¯4.LKK ¤\é´•°¯šH÷÷oµf Û–QQa¾qâ>©c‡¥‹Kã®Ãâ²w�þ��?>&·Ñ÷©ë£—.] ·³ë²vÍʦM›2_ЉãG¯^»îããÛ¤‰ÑÁö‹qƒk€:(//OAA�áÝ<¥¸¸˜ù*I+)qrsù‹TMåߪâiƒl¥´\§ç¯¿R=¹÷Å‹’²²÷FŒ`;UMLzœ>Í�¶’’•µut”øx’ <¯fSé´•ªt_´·²ûÎHÊÈp…» •‘Ë~2ߺšÜzIÙû? è¬-ªª*“'Obþ#ôKÍ¡CÓ‹€ê„††êèèx{{Sù×ÚÚšz7nìëëK�ììlÿ¶mÛ²#)ajii…‡‡ y ôÃ^™Ù9CztejOÃ=|¶mË�‰QÔÓ ¿xQ¡~}þ� (&yzV;CVX˜Nûö8³£¢2ù÷µ’²¾¾rãÆ±÷ï›Í*½ÓMðñã� ªù´JúúTXÎ�‹SÔÕM|ñ‚߯bd”æãCµîŒ€¶^•]»=Z¯m[NNUƒtîÌô6 HQ^ÞÄЀø*áD\¨^VVV»ví^|6l¥ÖcÇŽÙØØT5~Û¶miii1117nÔä�r½ÏðÂ… 'Nœ¨««Û©S§ 6>’]§ÏE'$ÖnVk֬ͺu· �UU•�”ì²?{:41:ÔÿŸ®Ð{—�èqö¬JãÆ•ÎÐrÙ²'sçúîØ!­¬¬Ð ANL # ‰®>™??ðÈJ¹ ºt17®ªißlÚpøpIa!·¸ølÓ¦”�»Ÿ8Qé¬2ÊÊ4Ã�nÝ(S”å÷[ýòË“9s¼�œÔ--iÛYé´V+V<š4颕É…9zóþ#¦F†ëç‹|ÃZ€/C‚+⯑¾A!†º"mgblÈÀ·£Òo{ú>¯´ós|É''' YØüšg•¡¡¡§§§œœœ’’R¹[Ÿdffª~z«Vnnn^^ž0÷j).)%ó9î¨ÂåeeÉT<<.7?9YFM­ìã”*Ùº¤¤ -M^ôÛÍ”U”�-­¨È�ßµ2-'/OBJªÜÁs9N~¾L™ :ªÌL™ÊþÖ*ê2iÖ�ãF�í×›øüÄøy`ø,ÔÔÔ*vªV‘£y!HIJJIŠó,ÏêIHTó$$ÊÞ°ªÊ­%%k˜~^Ͷ֧•æ]ƒ]~Zii!ÓoéQ —~sóó•‡õ´c¾VÀPËÖ¬Y£‚;×=Šòò.{·1_1`¨eÓ¦Mc¾>Ÿç쀯 0Ô ÀP' @�€ u0Ô ÀP' @�€ ߤ¼ÂBïÈ@hÀP‰+V¸¸¸0µ­k×®éééL�qÆ8ýã“À *Áår…ùÏ?ÿlÙ²…ŽðÓ vïÝûêj£:´f„† •ÐÓÓÓÑÑ)×ùüùócÇŽ½|ù’]ÌÊʺzõê‹/^¿~}•‡í¼víZaa!;ÆÝÝ=((ˆ?ƒ………¬¬l¹iS32lÞÏ-*%MK¹‚4Ô)ÀP‰E‹™››—íY±bÅæÍ›ÓÒÒV®\ù×_Q¥ÜàààÔÔÔŒŒŒ`êTQQqqq¡‘ÔvuuuppÐÒÒâO²oß¾ŠûJLM½òÀ-"6ŽZzNž²‚< iêžGž¯ºÙüÿüáµ»¬�7SÀø÷ïßß¹s‡*ÀT¿�0aÂĉ—-[FÉvÉ’%\.7%%…üÁ�û÷ïߢE‹?þøc÷îÝšššŒ@fF�#ï]e„C»{sÿ�ÿÆñƒQ  P=òôê>uÛæ7ðññiÙ²%{ö2åÞ›7oJHHT5XYYyÏž=?ýôÓ¸qãlll˜Z•’�3~ÛA›¦†¶&F €(€ê"ª÷ÚÙ´¢èK/j.ÿEEż¼¼JWUš„ÝÜÜôôôž}(<÷ìÙSÀäÁ‘ÑËÿ632ì×¥##ey¹Ø´ @À ”Þ<jjjeû544>|˜œœLýìEžžžì*êyöìYµ3[™šd½x$/'ËÍÒ á /@8DP.ý²¨öKõÞŠøžHé—t0mbÒPgý¹ €ÐP€oÒ_‡ç1B'ÿ±Å)?¿€222z uû÷³×©W�OŸ=¯¢¢<°_vXJJêß»÷-œ?GSCÃã¹çÃGn?Ι©¦¦Ê®Ý»ÿ UËÚ·;uö\``pÙù•””–-YŸ�Hc~𝢢B›ß¾soêä †� øÃ._½ñæí»_–;ÈÉɲø«—;,b໦ +ÃMÌ ð€~}ÌÌšeffQ¬=qêì’Eó«Ý¤°°ðÊõ›“~[®ÈÀþEEœ¢¢¢]{Œ>D_O�©â‘r^¯^ópaa¥ß²kÕÕÕ§Lÿa¡Ê‡Ò@%æ5Àòòr*ÊÊTþíÜ©ÅàôŒêoÁ'++õêõÛrýTïUWW£Ã{fzi»² Kh�ï¼} ?žåâ÷Þ¿Ü))Ivžªf€º¬¦7ÁJLL¢d«¢¢RíH õáCݾ{?3+‹�®®®‘Qã÷þì"•{tëZv•‘££cØWJJ*P†˜§@¿ðô ÉÊÊ�ˆìÙÝNJR¨ manæíãwíºËãF3¢keÕâõ›wV-›§§gÄ'$ è×çÁ#7þÚ¬¬¬c'ϰm“¦MF�Æ@mHNNÖÖÖf¾qb`eMMÍø„D#£Æ�;uøÿ n™&—[qÃ�ýûìܳŸr,#:s3Ó›·î¤§§¿yçcnf&óé=455Ì›ÍTFÌS )‹vëÚ¹wÏîaaá ‰Il'EФ”þ˜”ÔTiii5UÕ²*))õíÓûʵÉ¢Ÿ¥,##Cû¥ôûæí»ÖÖ-¡Õè`“¦Æ uu¹º³‹M�›DFE½xé•_P���xïþ£Æ�III•ÛʪEóf&M9—á2"jemõø‰Íi` _nM˜˜”ľ’’“€2Ä<šÏ®k§ÓgÏÇÅÇë6h`ÜĨŸ}ïÝnºÜ‘�”hܨш¡C*Ýjà€¾»ö`D×È@_UUŪe‹Š«222wïý‡mã9ÀPŽD¥WêÖM˜–ž®¬¤$++Ë|Å‚B" tEÚ$"*ÎÄØ�€oG¥ßöô}^iççø’¯ùí£¾�j�?Ï×ô1HIHHhjh ý|å‚"¢¼ƒB˜oDfpp²—WQf& ®ÚÀdÅŠ...ÌçòåË«V­bijiÿaþbxL\ÙÅr2³sÔÚ÷ —d‹öïƒÑ¿æò³ó.þëžÇ æ3‹ML¿|•ª’RÙÎçK—FÞ¸Á_LzùòJ»vŒèܦO<\úq½Þ¸ñ¬±ñi×)S±q¹´ù£É“}¶m :~œù"Ι™eTµöþÈ‘á.0Ÿÿ3—ûråʼÄDFt1wïÒß×#£›5c¾G5½ R\.WQQ‘ùOÕäêkinÚwxü€>Fz iñì­»oü«¬ª¬”ñì5t»õgÄrñÞCeE;›V좦šó™ýô§ÓŠé“ 6(ÛIkÒµú·ÖjåJz=ûð!#®ÄçÏSß½úâ…„4ò‹$$dÕÔ$edÄØT¯wï1!!Tl¿Õ_ÌÉ_9ü€ÏBOOOGG§\§§§g@@@‹-¬¬¬Øž¢¢¢;wîØÛÛ»»»GDD 8°^½z•vÒàØØXêQUUíÖ­›‚‚;ƒ���¼¼¼ŒŒÌ“'Oêׯ߳gO¶_MMÍÈȨâ��ºq;-3ëÇq#�”zwlwÃõÉüñ£hñºëã¹cF°«RÒ3n¸=É/(¤l<® ÅZûŽí•KõÊ·níZ«)+S;5#“f�‘–î×¥ÛCº´±ž1¢üMd_¿P�—£‘ž¿l¨So@×NÔ��ÓÜÄøÖc�¬œÜY£†JHH°ƒ_xû™ô°mËŸáö“gm-̓"¢^ú¾ïÜÚÊÚ¬´²Gígo}ºñPIDATÎlÙXþ]ëé)Ô¯_®3Ýß?áñc5SÓ]ºð;Ÿ=Kóó£ñz½zI||òKVhh<�X<ä–”D^»¦Û­›,ò¹ÜZìÚUV]½âàâüüè[·(˨¨D^¿N= {ö¤65rcbâÜÜdTUöè!ýñÅl-kk:Œ”7otlm5š7§­TŒŒ¨”­ß«WÌýû––ÚmÚ°ƒ“^¼Hÿ^³eK­V­þÿ¾ž?Ïð÷¯ß¹3SúeAœ«kVX¼J“&:9œè{÷ RRtíªl`Pú™„‡ÓñÐA²k#oÞ¤�QNCC¤Ï°0-�¦•”–Ö£·ÿñA³Åô~óiBÞ?õ’¢¢(^_ÍÄDòã„”f999éJ JÈÈd69’ýÄhU“'ÒJJú}ú°Ÿêw§@Àg±hÑ"ssó²=ëׯÿý÷ßSRR–,YràÀ‡g‚äääÌ™3gÚ´i'Ož|ñâ-VÕùüùóÁƒ‡……¹¸¸ 0 ++‹�áìٳ˖-›={¶‡‡‡··7wÝ»w;vlÅs÷zsçé3FÃzv£˜Êðòª—¯ÿ»Òðk=bB@X¥P›1S^xû ˜aÊoëRRØöìu¿GÄÆS#0<’6ô võ|Õvôdš\À ‡/_Ÿ±zó¨%¿º¾|ýÊÏŸí¤�N_½±Ï¬…×¹»¾|Ŧ_§£§Æ/_Ÿœ²f×þ‰?¯åϰlëŽ1K[á¼óÙ;ŸÐè¶óÖ�n6­%%ËÇ�K–hXX”íÉ��÷Z½º -íÙO?ù8;³�^kÖ¼Ù´©$??àÀ·©SÙNŠŽ.ýúe<Wu½WBR2äÔ)ª ³‹qîî^«VÉ|ü-@9”èhÂܸ¸â¼¼páBv¹7nH},y ¶gõ F8ƒºu™¿ikN^ž‹ûS*ϲ¥Úܼüýké×¥#µó þ½}¿] KF?;ïZàwõ¬~}�_gM1é?âÉë·�Z}(³Û¶°Ü´hnÙÍýB¨PÌAVUµÇéÓTŸ4è×ïÎ�!– HHK«››7_´HNSÓdÊ”³MšegS‚õqr²Z¾ÜtútÚêþèÑæ4Ÿ7ïÙâÅ?þHÓ;F›Tun3•%[.[F™�j˜Ôà÷{­]ÛfÝ:áC©ýxΜ€þi¾x1»Š ¼Ö¿þZvÚ0âòå”ׯ©?üâEŠÓ%‘‘W® yþ\JNÎx̘k]»šÍ˜AÿäÞmÝÚçæMu33вç?ýõMEMÇ�oÆ ®ùÉÉ”„ÍfÍ¢T¯Ð A§Ý»©SÕØØÛÙ™>:údºþóÏà è-„]¸ÐÿÞ=†÷ á?C êæsæ°�ô¹�¥£¥NiEE»£GÙßw¸ôéC1XÏÞžùÞ!À—ðúõëüüü~ø�]ÌÍ¥g`ð!ƒuìØ±â&e;‹‹‹}}}ù=�:uºÏ+y±lmm…L¿"ÑRWk×Ââþ³—×]ëÕ�í´06º÷Ìó¯Cs ‹b“úuéÀˆˆ*±‘qñçï”^3LedNq1Û¿rö´©C2¼çª”ßµM+© ¥Z ã&üôK|‚B(úÒ‹Ú2ÒÒ�[[{ùùóp÷vmÊmž–‘ÕD_�Å$öì\�æÍ©KõFE==íÖ­_®\IeOZÅ-)áäæRxK÷÷oµf »•àóiuíìdÕÔ¢oß®gkçêj»e # ªs¦y{óÏRnйs ¥Ê�*?{™>RöS•(},Õ‡©¤ü`Ìv%N\—Ã)ÍöffÔ#%+[í5´²OE–¯W¯€W•¥iÓ||îòbyQNNÁÇâ?}tóæ=™7ÏþÊJ¼l§ðŸ!M›yíµsccK8jÐ'P¯}{v€^ïÞôbªÅÿJJJ U«wŽŽ49ý¶‰ŠÌE¼ó,¾{Àð%ÈÈȘšš:òÊS,]]àIùV^^žb3»H ¥Oo_ü™ ëÙíòƒGwž>wZþÛsäò�Ë÷]Øö§¦šê†½) Ø\VF†ŸoËtJS‘ÖÊÔ„]TþxÓ)99Ue1ß”²¢BN^>‘ªÖÊïeE;ÊÍÏgDAé—¢—¤œµŒÛvãFÞ}’N6øp-ŠÊœ�AÕ¢"°ÿ?ÿPük„]»²Wö–ÞrÉß_ð´”{³BCßïÛg6k#:*x:ÄðÒ/˜PõÏ2t»tIóó+LMUiÜX¡^½¸‡%¥¥ê×W14¤Ùh@F@@Qv6#"ý>}¢\\¨rKÓ2%%©oß²ý¾ÿMÚ€‡#®\a/Öé3¤i#.]RÒÓ£i³BBò’JçÒ°W¯°K—؃ôÛ½ûñœ9Œˆè·ªM›RúÍŽŠÊ dþKþn  _BÆ ·oß>wî\ªÜÍœ9³Ü‰¾ÕZ»víÂ… íììòòò†:hÐ F,»NŸ‹NHÒ£«0ƒ ÔoÙ¬)Õ�ù=sÆ ï;{Q£^ƒ¥¥¤,Œ�"ãÞs€©§´‘“ÓyâLI É{œ:µ²Ú°`ÎËWoÜw˜&aÏO&›Í›µv³qßá*JŠÔyì÷µl¿Ã–m¿íØÃ¶çޱ~¾É�JÍçœ~Ÿüëº_·íÎÈÎÙ³zE¹ç•Ó§Sû=g…zŒ­¼–ÖÓyó 22 ÓÓíxÙLJNÎú—_nöî-§®®aa!£ªšCéÑjÅŠG“&]´²’VR⟾ûfÓ¦€Ã‡K ¹ÅÅg›6Õiß¾û‰ ¯ªi<~|Êëת&&ŒèÚnØðdîÜ«;ròòŒ† 32D¤Íõô:íÜé>s¦´²2U¶ÍgÏfOî°c‡ÛôéÞŽŽŠ ÊŠþ$**ÿR’¼ag'§¥Eå_öÔîDÿýûûß»GvÚ»×uÒ¤~·oÓÿZÿöÛs‡ËíÚÉ(++êêvÚµ‹:õzõ¢OïZ—.²**²êê]xw•+ÊʺȻ£55î ÈHJö8uªª£m¹l}†¾;vЇ Ð uÆÜ»Wš¥KJŠrrèï‹þG::(ˆùŽHpëFШ(($ÂÐ@„3¯HDTœ‰±!ߎJ¿íéû¼ÒÎÏñ%ŸœœLÕN¦¾�ÊÊÌÌTýxñ¤rrräää¤kð<Øâ’R25{¢lrZººªŠ´ElNqq^~eÝrý……%\®ïŒâZ”ž•¥.Üólz͘¿rö´n6­…\�š*«ªZöVUÅ……ÅyySbQf¦Œ0¿\î­~ý¬~þY·[7F\T&¥4^“‡fdˆÿªPzAoNŽ0Oé3,½ýuI‰”¼ü'û*..Ý—¸GK‡Z�–F¿ã`¾Mbü<�S à‹ªIú%T@–®Yv•’”¬aú%ÚêÒÂ�ÂMÃ*¦_"'+[ëé—¨ ý4×�¿-ýeÛ.ª] 3XNS³\Δ’•­´F*LKyóÆã§Ÿ¨ÈY“ôKh‰šýUŠý� `Âý-ˆôÒàré—á]f\“£¥CývÓ¯x€ê"3£Æ[—.ô f¾¸ÜøxuSÓnÇŽ1_®¨£øÏIú úöeþ ¨@�P;øéSà+V x«£Óð‘£44 ¼›?_¾ïÊÀ×DÌk€Ë–|·::/uXÌ6:vèÀïïØ±ó]ˆ‹‹suu;v4SK²³³Oœ<5iâEEÅJDDD¾ôò1|XÅUW®\mÞ¢¹q“& À×*ìüyu33�æÍ©�Ÿ”ræŒå‚I/_æ%$40€ãíèh:}º¬ºú›Í›¹ÅÅümÍçÌ‘VTôvrb$$ä44t»uÓ°´d>¿€ƒiG:íÛ3b ¿x‘Þ ÍæÍü ‰“7nQ i߃€¯ƒ8`¶äËQå^6ú–í¯¶ Ü£§} «V%%%åúçÌý‘êÉÌW#88d݆�L퉌Œ:pà` ïIÓ•òñõý믭•®Ú¶ýïW¯^3_±¨7ÒýýÙv~rràáÃÔH}ó&öÞ=þ˜÷û÷feQCIOOÉÀÀo×.ʽÔ�”–æäæúþý·š©)eH÷3ÞmÙˆÅ}Ö¬˜»w…,­¤Tñ3"àr¥?­mHIJîYµb™ãŽŒìl¾"`ªý²%ßøØ(öUv-¿“Ê¿4LðµÁêêIIÉ÷ï?(Û™œœ|ùÊUæ»faaîõò¹‰‰ ð�âr¹ååÚ´ÀðM&On6e #)i4j5d54ØõF#F˜Ï›×÷Ö­ ãÇ“<=ì‹“—~éRàÑ£üÔ�qùrºŸ_œ›5?fûK #¯]£?cîÝ øçªNSgÜ£G4FZ^^¶ÌóTž>¥µ±9’Êï/HM ={–Æg…‡—=**e«V8阤cIDATGO[Cݾ£í‘Ë7ø:ˆ€)Ù²á¶l˜�ßIÑ—)`*I IÃF�Ž;Q¶óô™³�ðM;yÊ43óæíÚwüãÏ¿Ø/Íèèèö:?þ¢oÿ�­ZÛlþýÏŒŒ vWÊ郇SÁÙܲåÆM¿ïÝ·ÿ—_W²ýééé‹—,µ²nӧ߀'OñÇ?yòtÄÈ1&Í̧MŸ™––Vñà×­ßðûòiÎE?-©ê€¯^½6uÚŒC‡ŽÐÑîÞ½7!!‘Ž?#3³ªñ¬‡�\»ØuoÞÒšŽ0'§’”Ó´C†·la=wÞü¸øx¶3??é²-­ZÓ¾V­^[XXÈ|YÜ�á¶ÚÎjɪ© N%åªPú½Ù«W“'ÉÉÆŒ ¿p�: ÓÓ3‚‚¨’œG�œ�gÞqrrÜfÌx4yrð±c‰ÏŸñj³É^^qîîo6o޹Ÿ?­�“Ó£‰cïßÏ ¤ù)îRgAZµcc–™™é¹Ï´oo»fíúŠGÞ®]»sç.ðóê… Û¶mSÕgeg?~üÄýñc'Ç-C† *..=~.ïÜïJÇ“””''çõk×ü½}Û›7o–./wô+†ÅKÇŒ}ìÈ!§xÚ´™EEEÔO±< àÒÅsÿÙÿðá£}û0_?ër¹Ü2íO—‡6ÌMH¨jmfppQff»?þháà`wø0»/­V­Z.[¦d`ÐhÐ j43¦ì~Íç̱;v¬Ë�*FFÔA¶wt¤MÊÍl4rdÛ�m6oÖµ³‹åeãàãǵ¬­;ïÛ×zͳ3!4m¤ÿ>4œ€¯ƒ˜7ÁZê°„ß.{½®0¡·,--ÍýûQèýåç´èêêFßY=zt§Z(;`ßÞ]::õed¤[µ²vüäù OŠ|ìªåË—¶mSš9ƒnß¹;{ÖLyyù'î�tuu©³Eóæ'O�~éåÕ¸±áÑ£Ç.˜ÿÃøqÔommåíãËÎàííóò¥×Û7^JJJŒ ŸpèÐá~}ûœ¿pÑØØxã†u4>""òâ¥Ë厼g�³ß½ó¶²jãï0p@Á|`ÿ^i^e›ª¾üyªŸ�“³uË_¦¦Í¨]¿~ý½ì7oÚ ©©Éßp÷ž}óæÎ?n,µwíÜnÕªí«×olÛÙøú¾oß¾=?õ»Ü¼^T„ 0|q•†Þ²�åN‡¨8?_ºê«s5,,ôûö½Ò¡ÅTƒ~ý(µ2ÕiЩ#¹�'cËikSI™éþþ:¶¶l§tw3-GUY)5#“€¯ƒ˜¸Mš4qÆÌYK(9zlâ„$%ÿ_—ÖÒÒºwÿ¾··wZjÚ‰“§z÷êÅ_Õ̤Û°°´8Í«ËÉÉIKËP5 0ˆªÁ¡aaì™Ã¾¾~K–üÄß�RbDd$5¼}|(gþñç‡Û*PMÕ×Ï�ïßû·k×–Ò/ÛßÞ¶]ÅLeÛþýûݺ}›ð­Ûwììì4x_‘Up“&FÒÒ•|ÚU�WWScÓ/ûfXYI‰ŽªS§Žü i«ˆÈˆtÞw1IKKóõñ¥·6f̨Ÿ~Zâ÷þ}¯=  ­­Í|Y2**œ�w~*ÊΖQV.×É-..�µ¼þj%xxèÛÛWµVBJÊvË–‚´´x7··ý•ðôi«U«>¬úøã\m‘VRâä剴I^~e`¾µðà¢Ì¦¥©uëÖ­Ò§ ¹¹�;–¿ª¨¨hèð‘T .((4jbT_GGVV†¿VZZŠmðsHHH÷ž½Î�¿ ¨ `iaÁ©ªªš•™Å_d/¾%y¼ï¯†ººì«¿¾«WþF¿Œ,(( |Ë/+'Wé‘6ôÖ­;Ô¸uëöСƒ«9àʾŒ/{DFV–ŽªÜæF�ó~™Ã’æ-JŸ0jäˆGïµhnIuõÖmÚ±'u|IºÝº…ž;Wš¹ÜàãÇi‘:ëwìH锽˜6äôiµfÍäµ´ÏÃåpü÷íË 25ªª1W®ÜÞoUTJ;øöí;‡#`ž+W¯62<÷ïvñï�»ØiÏ_¸8€wŠrJJʽ{÷Ùëu)$Svöì™üMßDô›Bss³wï¼ùÓz—i—Õ¹SǤä$ùæÍÛ#‡ŠqÀÆ'&%%$$Ö¯¯ÃðDL^:ª²ÛvèÐÞήëôiSË9Û611ùyÅrzýúÛª½{÷õëÛ‡ø‚ŒFŒ |x¹m[IYY-++›?KoªlhØvÓ¦;J+*Rí·óÇ;H�33+áp(ëÞ œ,)Ù÷Æ 9Þe_—x»é´kgõªLÕµâFÆ»»_n׎¶¢hÚqçNþ*Ó™3]'M¢È*¥¨Øïv•UÊÏi~~ÅyyQ..oÿü³ù¢E– T¾¯Aƒâ\]/µnMû’QSSÒÓcªãöòuŸNŸ<[82.¡ßœŸ8ï<¤j»@ Õú*ðÈ‘#6nÞìííÍÆH>--Í‚ÂÂçÏŸwëf÷àÁûwïuïÞMÀ<4><""22ŠRôÞ�wº"«Vþַ߀¡ÃF˜››»¹¹7köáùC­ZY««©ý¶rõòe´¸|ůT>qüHÿþývïÞKTª¦¾|éu䨱Jw'%%5hàÀeËWtëÖ­ô*b±¸ªñr²²K—­øë¯ß©í°ty;›¶ìµÍ|tl›6ÿѲe‹VÖÖOžzL�6ãâù­­­zÛ÷µµµ]µòWJõñññF¼[;|Qm7lh½j%Û²×Ê�IÙ¸03SVM�ß9ê㳋ʚ�˜È¹+))Û­[KŠŠŠ²³ùWí²tlmGøø¤¥É¼(LVC£â̰+NÛóüy~Ûöト%$%Û¬]Ko�vúJ–:ý¤wéþ£ÇÇ?¹)ilb’icC)ÉÿþLL€:è«øÕ?‡R¿Aýr�Mjڴ颅ó§Ï˜Õبé¡ÃGF�ªæ–#G §4ؾcg3óæ¹¹¹-Z´`û�Œß¹íÒ§Oyy¹½{vÚØ´eûŽ?âííceÝÆ¢¹UFFº³ÓV†w­¿þüÝÙy{“¦¦¿­Z½bù²ªö8lØ�·ï¼éOñXÀø ôîݳSg»¶mm³²²öíÛSnÛñãÆN�6Š©môë< rjBQfggSm–Â-¿çÉ“§4CïÞî/է߀^={,[êÀ�““#!!¡Xá :--M£²oÒÚ=`㋊8ùùùì ÒUIIIÑÔÔ,w�‡ÌÌ,99Y¹*®^VPH„¡�®H›DDÅ™2ðí¨ôÛž¾Ï+íü_òÉÉÉ5¼'å÷1Ãw#'::ÊÅ…rµ¾½½bÆFRùwß¹K ÃÀç!ÆÏó5:úúõ3fÍaxÑ—í¡0|ðÀ>öjÛÚ"##£&ʯ •+\""))9kμ¾}ì ( Sbýé}ؘ+#ý2¢°€ñ22Ò22ÕÜQ«²»G¨ªª0PÛ”ôõÍfÎf¤œ¬,Ò/ÀצF¸OûeNÍ 45mfoß›ùÊtèÐþþ½Û·oÝILJœ0a|ûÞe¨ uA�0•. È_4ˆùj512š;w6uÕWqhøšá`ø>àöëP' @�€ ‚„&$'ef3ß>`$5;gÚΣÁq‰ À7ikl8ÌÖú¸ësà‡ ÕÐTQŠJIc¾qx TC^V¦ ˆÃ|ãP€j´56 KLö ç3ß,`¨†¶Šò¤ní§í:îö>˜øfáh¨•�=zæ¾ÑA]I‘øf¡ Õð�ŠkÚ ^¹ôû>&><1…øv @5 ‹8ò22å:÷Ür½üâ ðí@€jÆ%šëë–ëLÌÈjª«Ã|;€@�+žo½B"¦öèP¶3¯°HQNÖÞÊœøvà&X ˆ½•Å«r� ²2‡~œÄ|S€@ʺ Àwà;§­­Í®€:ê`€ïYhBrRf6Àß·Ôìœi;�Ç%2u0À÷¬­±á0[ëã®Ï€:à;§©¢•’ÆÔyx ÀwN^V¦ ˆÃÔy_u˜ËåfffÒŸÌ7¢¨¨(;;‡øš´56 KLö ç3u˜øàSgÎÿ²ÜANN–íñxîùÒëÕ‚y³Ë�üc‹S~~±_ûv6mhðÃGn?Ι©¦¦ÊöïÝЪe‹íÛ1¼$yùêõà�°ÂÂBiiiÛvm{v·“��`gЯO‹æ–ñ ‰´É˜QÃÍÍLÙnß¹Ÿš–6nÌȪvÊnRöØèêÕÓ>ýïù€€ Z¤]Ô¯¯Ó¥SK órïˆÆdffÍœ6YR²ô·ùüå4{æTÝ h1%%õòµ1±qÜ’EEÅþ}{³3üç´U”'uk?m×ñíÓG÷hnÊÔUb༼ü�Ð0j¶lѼÚñ}ì{™›6cÛ lƒÂí•ë7'ý0¶Ü`*ùž¿t%99eÒ„qõuê…†…Ÿ¿xEVV¶kçŽg¾~óvãÆ† òòBî”̘:IYY™m«¨ª77ôIDAT°�–-,{÷êQXPèõê í½AýúZZšå&Œ‹‹üôYÅÃÈÍÍ;qú¬nƒúóçΤ#yýæÝ¹ —UUU ôõ€ÿ•�=zæ¾ÑA]I‘¨ÃÄ<Ú? °¾ŽNÏv>¾ï…¯¬¤¨®®Æ¾øcÊ´‘‘Q¯^¿-7˜¢/ÕcG ¢×P—Ê¿ÍLšØ/??¿Ò™)-»Üº#üN ÕœùýR’>ee ½=ºw•’”ŠŠŽ©8¡’’â#·ÇIIÉåú}ýÞSÉzèà�š”´;v°íÚ¥½ à+à×´A½ré÷}L|x"~\€ºEÌL‘ÏÌÔÄÌ´YphUƒ«Ÿššþ ‹ØN õáCݾ{?3+«ìàø„99¹†º ø=Í--ì{õ¨tæ‰?Œñ  r§$6.žíŒ��«¸UZZ:‡ÃÑ®Pþe£mkëKW¯—»,™X¯aCÊóüžݺ¶²nÉ| ‹8ò22å:÷Ür½üâ P—ˆs tnn^hX¸}ïõ´µ5ÔÔ¨\mØsâñÄãÃÓç¦MžÐ A}¶manæíãwíºËãFóSpUÿxað{ÿ€×oß±íq£G²——EuÜ^=»]¿q«‘���;½pé*Û�••Yºx!Û �¸xùjAaahh8Õœõô2•éÕ£Ûî}ÿдmÛ´*{À:õê±mW·Ç1q¥¹š>œÞ=»3ÿµÀ¸Ds}Ýr�‰YöÖ @]"Nöó÷/))yéõšÚ)©©OŸ=¯6Ô¿EsËJW ìßgçžý¯ß¼ã÷¨¨ªdç|¸—²ººZ“Æ�“’S^¿y[Õä6mZûú¾¿u箢‚¢0;]0o–ŠŠJ¹Nª9kjjÆÆÅIJJŽ9¬bÒfQ™wð€~§ÎžoÜèÿy[µô€³Ù6Ålš* (˜êÌ ÀíŠç[¯�ˆs'”íÌ+,R”“µ·Â=; nçèwÞ¾ô§4��¾^RR2Õ„q)))õíÓûʵÉ)©l�nƒú99¹ìU¸º ´·µQWWÕÔÔ¨*”Rÿà�ý}|ß¿|õšWCÝݺv:h —Ë­xYrYMšQ®>zâ4¿‡24,¢°°�Ú¦ÍLè€%%$´45€ÿš½•Ź¥³Ê]¬ +sèÇI²Òâ?à[$rÎÉÉ‰ŠŽž6e¢}¯ô¢%Ø÷þ‚·ÊÈÌJLJb_yngeÕ¢y3“¦‡Ë”^[KyÒ¤©ñ¥+×¢cb)Uúº?öhe%¨È\zóªn]‹ŠŠØï499•ßO;-;�¢¢‚MÛÖîO<8AOÉëcßSžwßiöZàÖ­¬$%%Î_¼’žžA¿ xüÄ#4<ÜÚ ×À�².<"ÿÚÏ×Ï_QA‘ÿ€ª¾š™šøøúµim-`«{÷Ò‹m³�ä-7`à€¾»öà/:øòµë�ã–p%%%mÛµmÏ{>°;Øú¾÷f§GOœâ�aŸ\nžž^/½^Q!·ª}ÉËÉ ìßçôÙó좬¬ìä‰ã)oû{7Ã{äÒ��ýõ«¸ŠþånhüU¡òoff–ººšô7r~•Ç 5ÔÕ«:[¾*A!†º"mgblÈÀ·£Òo{ú>¯´ós|É'''kkk35Pó¾Kbü<ÿUKª¬jkk1ß%¾>b>àÛ‚ u0Àw.$>)%+‡¨óðð7€ïÙ¥ço.¿x³ù‡¡ÕŽŒŽŽÎÊÊbÛêê꺺‚n-“››Û´iSàÛ� 0À÷lïm·åCíõ4Õ«éïïÏår%x„y‡””TÙEŠÄnnn ÀW `€ïYTJš¦rõO©ÈÎΦÐkaaQíÈ´´´¼¼yò$???%%…ÊÈ4!ð |{y¾*»¸v÷�ŠcÒsr÷ÝuoßÌHUAž©…Oú“б¡¡¡ƒŒlÒ¤‰••iUTTØ*í6kÖŒò³¾¾>5LLL¨“R4e]kkk33³Ö­[S0¦off¦––õPT677§òoqq1 ¦$LÛšššÒÌ�5***b>`€oÏ#O¯îSç±m~£œ]·\ݺ~ì`F¶¶¶ÆÆÆÍ›7���<˜*´TËå`VVV–²²21##ƒo`` Oaa!‡Ã¡1´…^ÊÛJJJüM(ýÆÆÆR•˜êϰ)3Ÿ®¯øö¬�7“ª¾lôµ³iE‹Çü6¢ŸucýY{NÜ^½Pðl”N)‘R[BB‚½XW*çRF-{¥.Õ{©³l$¦Ä«ªªJ]~�¢¢"%ÞúõëÓHÚíˆëÕ«G«hd÷îÝSSS©þœ’’ÒªU+à3@à›D¡—¢oUé—ÕÇÚ"<)¥Ú‡S"}õê—‡"hÆ �§àJ‘µlmHeaöÒ_ ÈÉÉ‘’’¢¬K%_ª³‰—B2û';5hØýû÷is---Ú5{26Àç€ 0À·J@ôeIKIÉJKçVsI-%OÊ«<`ÛÆÆÆU�ôööމ‰a/ܽuëV“&Mš5kÆð.600xøð!•…mll(ÖÊËË›››»¹¹ÉÊÒ!HSQ—B2e]eeeš�QÙYAA�6×ÓÓ£½ÓHƒò/|>Àß³æ�tƒâôµªy°••ÅQIÃZðTºÊÚÚš2-mÎ>°¡¡a£F�(-óO–îß¿?ýIÁ˜]ìׯÛ033£ M@˜ølp 4À÷ì—áýœ®Ý÷�‰¯v$ÅÔj¯þLFF†Ÿ~YB>Ô—v�ô Ÿ*Àß³–†z—WÌ)Æ“uÄÀOŸzlur®jmÇíéÏ¥Kø¯IIJJIâ¼?±N�Þêè4|ähžz<ÛêèL!™ùlãââÊöDDD^¸x‰¨Œ˜àŽ;\<ÿ¯€”�©D|±c¦:IIÉ-¬ZÍš9cýº5üN'çíçþ=SqüÑcÇ>’Ÿ %--#-½bŲqcÇP¿�¯ï_m1|#œ´´´Ë—¯N˜ðƒŒ Îøþ‰“ý¨ÀË6nܸYRæz’¾}ûÈÈÈ0"ºtùrC]Ýë×o¬[»ºì³ã*õ÷Î]»ví9zô°MÛ6’’’¯^½ž1sv~^þÔ©“ÅÇ'üòÛÊQ£FÈÈ(3ð½«ÑÕ ÓgΞ9{.ÿu÷Þ}FtçÏ_غåOyyùž/�¤°í¼m ¶mgÃÞ¢°uëVþ±9:&†?æÆM—.vÝ[Zµ^µz-—Ëe;�=Ö¥k7“fæC‡�ð÷ žû÷L˜Xš™{ô²ÿmåjàû•œœÌ@ ïÅÔL``PTTt—.]HI˜’­€Áá¹¹¹íÚµ+ÛÙ»w/z±í¤ää+W®nsrôññY¿q“¹¹Ùøqc¹º­Û°ÉÉq‹a£Fž0iòËÏÚÚ´]³zå¬9óþÞ±]·A¾w5 ÀK—s8n™ †QUUݰ~­�3œ;�wâ´ôàAƒ†�µiãzÏ£â­ªŠŠŽN½ªäçç;nÝ¢¢¢Ü¦Mkʽžž/)·nÕêå MMM°rå¯Ö­ÚÆÅÅéêꚘ˜P�¥…¹²2N�øþÕ(+**fff–ë¤"-#.—{ôè±uëÖÄÅÇkhjqŠîÞ½7`@ÿªÆkijæääUu¥qƺ”~ÙvsKË·ïÞ1¥�\…êÌ—._‰ŠŠJHH¤š„€:¦FXøJo¥ž>õÈÌÊZ¼d)¿gã¦ß`3s³â’’��P33ÓJHIJñÛvwíÚõ%Ëzôènii¡§§GI˜€º§FXÀ“~iÕR‡ÅŒ@çÎ_7vÌÖ-²‹þ}úôOKKÓÐШt¼šªj#£#G�þñûf~玿w>áyòøÑªörô؉)S&ÿöëÏÔ _µzmÙµÅÅÅ Ôâà­ŽN[�«ZÛ±c‡¥KlžŸŸýú�C‡HI}(ÛZZX41nråʵ)S&UµÕ¶mŽ#FŒ6Ð7=z”²²ÒÕ«×¶mÿ›¡+¥¥¥ùöíÛŒÌLNQѦͿóû52�““»qÓeäˆá.<€ïƒ˜�A¢/¥_ªñÆÇFUúºxþ_Á3ܺ}GN^¾SÇŽe;‡ Dea[µ³±qrÚúïùóV­Ú451[»nÛ76TÀ&Ë—9ÄÅÅYX´èØ©k¿~}ùýJJJsçÌÚ´ù�ç/bàS+V¬pqqa¾ˆÚÚ×Õ ÓÒÑee�56¦×‰úõÓüü˜oÖó¥K#oÜ`  âW€)ý ®ñ 6tÈ`z•ëtpXìÀ;qzÉâEÌâÊs騑#èŸ�PXPHU\~ÿ€þýèÅ_\òqscccw·Giii***ÒÒÒ#†ã�ùyÅòË—á,h€Š¸\®¢¢b¹Îyóæ�1¢gÏžL­ªt_âÍ#¥¤ÄˆNFEeLH5.4oÎ|Ëè�®�Oà{%Nxé’ÅTà­Iú­¹õë—M¿ÕÒÐРô[±_BB¢Ò~€:NOOOGG‡¿~õêÕ÷ïß»»»SãéÓ§LéS*ý===ùcŸ?N�ëׯÇÇÇ?~üÖ­[‡? ==ýÂ… W®\ÉÊʰ/¾Uï{ðü%#4 KK©�—¶ççG\½J‰�]Ì���wwgÛii¡ÿþtìXvd¤à ©šÊùø‘¨[·Š>>…êÌ¡çÎ…_ºTTá‘(åp9Ú0øäÉì¨(~'L¢‡M~áBÐÑ£ìA–F^»FÆÜ»ðÏ?ùIIÇÄ„œ>]z$yyüb>¤w‘ìåpð`š�¿_IOO¡~}ª NîØ±½ø~-Z´ÈÜÜœ¿˜‘‘œ——GÉ–111 ïù—S¦LÉÏÏØÏˆþIDATgǬX±‚205~äILLܶm�Ùµ¡¡¡ýû÷§ÌüìÙ³~ýúQ®j_,*f^yàêåçÏ­ëÁƒü¶”¼¼÷–- Ož°‹¾;v$>{F ½7ºwÏ Î�‹séÝ;åÕ+z,X�÷1ˆ>wpÈŽŽ¦FfHÈM{ût?¿Ä§Ooöî-à¤ëâÂÂ;ƒG^½š}gР¤/Øþäׯ=~úéþ˜1Ñwî$xxPM†:)i»Í˜ñhòäàcÇŸ?/ÊΦN:æ[ýûg…†FݸqËÞ¾èã/^­]ë>cÆ«õë)gEDð÷ØbÉ ª€â'TÏŠçÉ“' 4hÛÙºuk“K—.�7Ž¢oPPÐÈ‘#ÙUÎÎÎ�5š={¶�� ­jÖ¬ÙæÍ›gΜ9uêTZ»lÙ²Ó§OÏ�;WÀ%$$Þ]:ÅÔ€ÉÔ©T;­ß¹3•U#®]ëïuRµ½£cCÞYÜT%¦º¶VëÖ"MûzÃó9sL§O§ö³Å‹ƒNž´œ?¿Ò‘TÝUhРÓîÝÔV56övvîqú4»Šê·}®_—¯Wï“ ¸\šY×ÎŽßáµvm›uë ‡–Þòæñœ9Tn¾øÃ“V´Û´±þõWD� â›3gŽ££#àS§Nýðà l¿¼¼<ý©¬¬liiIÁ˜ð«W¯bccoðnÑWöÔèϤɨQÞ[·RÕ4ÎÍ­^Û¶ŠººÔ©Þ¬Y¼««ïÎ�%¹ññ E¿ž™Š®911‘×®1¼“™Kª~#42ÍÇç./¾å䤤ðW©5kV>ýò4èÔ‰ßæ§y{S€ÿ°ªsç^†gñû@xÀ , ÞɺeÙÛÛoܸÑÕÕõÊ•+7oÞ¬¸I^^›Šeee,X`ññ]Åϯ&ƒ"._޾{×tÚ4¶3äÌ™(»C‡d54¼) ˜ARF†[!ßRgóŸ~Ò°´ü°—ªo»E# ØtÒ‡g|J||ü§�h¼”‚'7—]¤†ŒX·ø>1ƒu�¶¶vxxxÙIIÉ™3g.Y²¤S§Nº¼++44”þôöö¦ò¯µµ5µ{÷îM!YOOÏÐÐ�Ö&''W»»C—®½ bj Ù”)‡e†„ðÏ+Î £R0¥_N^^¢‡ÿ.Y•R12bo1•P˜‘Ávê÷éqé’’žžJãÆY!!ü‹„+¢‘¶)‡ÓH¦¤$õí[FDz½{Óñ3¼ôzö,-2¢£Ï0("Š`Þ´iÓöïßߣG�ð;G��žž>cÆŒ²#·mÛÖ§OŸqãÆQ}XSS“áÝ"‹*š;v¤ÍÿùçÊÒ‚÷ÅårW8í<}óST§•VP07ŽùX»n6yrª·÷ÅV­®wé")'—û¯Ués€›6¥¥Ù;Rƒ½a•Õ/¿xþòËõ®]½·mSüï­û�j³—Ûµ»Ö¥Ëû}û*;“™Eå_£Q£nØÙ]·³s›1C±Ì/„ÔvÆt_ß«;^¥ß/ØÙˆnóþ#ǯ}¡G:|å$¸éð ‰04í¿CQq&Ɔ |;*ý¶§ïóJ;?Ç—<Õ9«Mz_ÿ eq8œ´´4---ªý²=>ܾ}ûåË—ùc¨Æëéé)''§¤¤Tî‘“………%%%ìÂÕÊ/(”—“e>ƒ‚ÔTYUU !‡É¥7œŸ/£¬\®¿¸°�ŠºRßÈÝáé¶Ì_k:uªåÂ…f()áääP˜m.%''!îÃ;»Lšõã¸Qcû‰S=øš‰ñó<®P ­÷±æI¥”#GŽìÝ»×ÙÙ¹âH55µŠ�²²"ÚÏ”~‰¯(- Š�Ó/‘úô�ô¾x±Ê$%k’~‰t .ýÍÍÏWVTÖÓŽ1°¯ðU²43bà ÊËËKLLܱc‡­­mÙþ5kÖ¨Ô,òAmQ”—wÙ»�‘02°W¬XQ±ÚÇ[.|Up,¨€ N@€:ê`¨€ N@€:ê`ø&¹úæ1BC€J¬X±ÂÅÅ…¿˜••eÎc``ðþý{F\]»vMOOgjì‰È‘‡’ €Ð¤€ ¸\®¢¢"QEE…ͽ­Zµbj Ü´â)äpÖœ½v|áTYiü4 "@*¡§§§££#ÌHŸ'N|¨««Ké·sçΞžžmÚ´Y·nÝéÓ§---i̤I“‚ƒƒMMMÌcfÔ8òÞUFhÁq‰ºÚ2"ªQ>uúŒ“ó¶èè~�¾¾Þ’Å?�7–€¯Ø#O¯u»ÿyxx7µ»O�gg#Ε½þþþº<Ô–––¶±±ñöö¦Åüü|6ý’cÇŽ1µ-#7OY^–‘˜§@geeÏž3w‰Ã²!ƒݽãI/jÐ"uÒ*À|W®\ e ®>rôVG'j†ê½z)ú²éWŒò/QRRÊÍÍå/æåå)òq8æ³QV�Ï+Ä�@dbà¥Ë–y{ûRâ]µê·Í›KðPƒ©“VÑ€j'9j¬ó¶e{“44ˆŒŒ°Õ¶í¿zõš�:‰ÒïÓ§[�©Á@ͰXìôKLMM%%%ïÝ»GíðððgÏžuîÜYSSÓÂÂâܹsÔ™™™Ù®]»��Áóääå9;�œ&ìã‘×ÓŠJIcD$N>uúÌ•«×÷íÛM‰—©Gi„‚+[—£NZEhP{Øô{ñü¿ô¢20@ÍQô2ýòŸœœœ+9%EMMmýº5ÖÖVåÆ˜š6kÞܲm»öÅNûöíwlwbàûÅôóñ.Ð |ÉÉÉÚÚÚ À7NB¼{Çgee/]¶ìÊÕë?Î�3tØö¾S>¾¾—/]¡Ú/¥ß­[¶¨¨(3µ!%%ESS³âùÏ'O�>vüÄm—EEEì‰ÐðÝ+½ß¸Ç³ZI¿A!†º"mgblÈÀ·£Òo{ú>¯´ós|É×<:~3Ô:1~žó.Ðn÷íÝcggçä¼�/¿___ÏÉqK k¿åhii  ÃÃ@Ý€Óž@<5z ]zùúú±nd`P“»^‰ª•µ5ù Bª…çSèý’¹—Ïœ^ €Ĺ 4À7ê`øŒž/]yã<˜øìñõÆ�g��O¸N™Rn$>C€Ú‚ Ÿ—Ë•VTdjU²—×ý‘#™oœ´’’”¼<±ÕÊ•cBBÚnÜXqäçø ê¦Z¸ @U”ôôê×/×™èá‘ aiYÏÆ†í¡ gÃnÝ(R;êÖ­;ʨªR;ÍÇ'éåK9MMý>}¤ä䨵©ïÞeE\¾L‹õ»t‘ç=5³(;;öÁƒâ¼<ÝnÝØ=R}UFE%ùåËú�:Ñ<ÒÒ�dw—ÿø±bÆ {ô��,­ •Fß¾M{‰ssË72D¾^½ªÞ—ɾw¯ %¥A׮ʂ÷E«ÒüüèsÐëÕKBJŠzâ=*LO—–——å½Gñ>C*ÀðµX²DÃâ“'†<_ºôõ† ©©ž?ÿüæ÷ßÙN� ò’’> ppÈŽŽ¦FðÉ“î³ffdD^»v«OŸâÂBêÌ É‰Š¢¼J˜^”x©3?%åf¯^,Óýý]ìíSÞ¼¡Nß¿ÿ~³ys³g´*ÕÛûåªUn©Ÿf{0~|~RRÀæ3%ZIDATÁƒnÏ7æää¸Í˜ñhòäàcÇŸ?§8]Õ;¢Ã¸3xpäÕ«9ÑÑw JzñBÀ¾¼Ö¬y³iSI~~À�nS§²3P;ÎÝ�ÆÇܿψõ€xP€/‡j¡Q..Ã^¿–’•5™<ùÁرÖ?ÿÌHHT:˜J²¦3f˜N›FmŸíÛ ÓÒ¨jñã� �§¼~ÝrÙ2þÈ÷»vévéÒnËj«½Ù¸±çùóÔ67NÍÄ$ùÅ‹V«Vå''Sá·A§NÏ—-ë}ù²º™·¤äjÇŽ)¯^iµn]: —k>gŽ®��à·tô¨Bƒ�v禮ª±±·³s�Ó§+Ý—n×®êææÍ-¢ ¶É”)g›4¡\-£¬ÜÂÁ�Æ?ž=›€/ ¾œ4oo-kkJ¿Ô–×Òê÷®€Á– >�??ÚÅ¥��ÅK�ªF¦¼}k2iÛnÐ¥Ëë²WÒRºf¶„%Þ¬ðp*)Sñ™]I¡:=0ðC¦m;ubªCõÛ4Ÿ»C‡R»('§ %¥ª}Ñÿ×nÝúåÊ•YaaRRÔÃÉÍ¥ÌÀ¾iEEï¤år$ed¸N¹ÎzmÛ~ú4õÝ»è[·ntë6àÁ*½–®¨P1–VR¢lɶ©Á^K\)IYYŠß¶ŽŽìå¸ /‡3¢ Cm4p`Ó�y›?O¥¨ÄÝvãFƒþý©}’=xøïà`ørt:tHóõÍ vÊ›7Z¶d¸\†wÞ2•U©A«¨B˾ѣGÌÝ»T1n¹t©ŒŠJVDÛ/¯­�—�P6Hë÷î|â{‘pàáÃú½zUuÊúúÊ�ÇÞ¿¯Ò¸1½ÜݹÅÅŒ(ôûô‰rq¡ã¡Í™’’Ô·o«Y\P�§nnÎðn|UZæ½ÙZñ6 (("ŠQ  _e׎;v<?^FM­8?¿Ëþýl9×ê—_žÌ™ãíä¤ni©¨«Ë¶ùý÷g‹¿Ûº5?9™2-ÿ–Ñj¦¦ºvv—Û´‘UWo±d‰ÑÈ‘Æãǧ½µ}{*ðª6mÚiçÎ*�@B¢ëÁƒOæÏÙÌñÈÕÍÝý1óÙ„„†ž:}†ùZ½~ýæá#W¦ÆÄþ¹\î‘#ÇÒÓÓ™ÏløÈÑ[�‰Vv¾‘T®g€•ÜŒ® œwÒŠH)^ñoö§›$~™‹�/]º$++×¥Kgæóxöìù�Ç�#Qá¹sBÊÉÉ¡ˆøÂÓ3--�MMMÛµ³>l¨”ÀgÇ éÎÝ»AAÁÝ»‰|ÌåËW'LøAF¦ôƒØcIIÉÏ¿þÖ¾½­z…ëyj¥ß§O=J_Ï.žÿ—šøú«ÌJ¯ûu (t¾“[ÕV´ møî ½}›3ó9ý0~½qyx<[½fíŒéÓöìÞ©¨¨HõÒˆˆÈÓgÎŒ3~÷®¿ë××aþ#ññ ¿ü¶rÔ¨22¥¿§øÜcM°é—ͽԦ20À—Që·€øOˆp ´û{1Of¼!EAGGç.vÝmÛwZ»n=‡Sš±£££Ûwèüüù‹¾ý¶jm³ù÷?3>>=22jæ¬9fæÍiÕ»wÞ4,$4”ú7mþÃÑi5®^½6uÚŒÿ=סc—î=z:t„¿/ooï)S§›[¶;îªè پãïÅK–š43ýú�Ë­Û?Lœ,Þ±eggÿ´ØáïÛÇŒ�““{ëö�ôôôÌÌÌ… æ�;zμùÓ¾yóvà ¡¦f–3fΦ„Lý×®]§¤Ç?T:zSEEEÔ>zôµé°7nú� °ü1Ôߥk7:ì¡ÃFøûðßÎŽ¿w®^³®…U+z›>¢Îû÷Lཀྵ½ì[¹ºìÇXú±øøÐ'Io§·}ßó*¹bLLÌÌYsi@¿þƒ¼½}Ê®¢¿…!C‡[¶°ž;o~\|<õ\¿~cÔè±üT ïÙ«#´­ŽNlúíØ±½¨A‹e?ÁDÀ~Ñù•ö«*H˜Ô—b_:ª’ÂoÈÚ¶ýïsç/¬]½jË–?\]Ý×oØD�EEœðˆG'çÕ+[·võ¥Ë—Ïœ-­õP$ËÍË;zôð‚ù?þúÛ*VTXš“““SSK¯OÎÊÎ~òäéã'O©²:nÜ ~ä¨?))yÒäiÆMšœ>y¼]»v4åUÁý{÷î×ÔÐ8zä�±±1…ØØ˜XñŽíüù‹�:u433¥¤Ý¹‹ÔaÃGQä>lh``mËN»tÙŠ™3¦;v$//oæ¬Ù………´á‹ç/‚ƒƒÙ�ëú�›M›6•‘‘¹}çîªÕk§LžxêDé•·gÎ|¨…>ru[·a“ƒÃ’ÏžÖ×ן0i2ÛOogßþ´µµŽ9lhØhÞ� Š‹‹ÛÚ´]³z%­¥p>{Ö̲c|B„ “Ô¯úÔ‰ñãÆ98,+w�10¥ßŒŒô#‡þ8oÎò?óWQ4]ì°”Òþ±#‡8œâiÓfRb§ÔJeðÐ�OÒ»qãf³f&Œ(Øô˶٠¼tÉbàëVóÚé×0À÷A„S «zî‘™®ô‚^ž6þ$¸èìó|!7dxåß�»v�<~¬}{[¦ôü[§Aƒ‡®^õ»vùò¥mÛ´¡EDÊ{”Ð<=_FFF^¹|A™÷Ü6EEÅqã'Tœ–S\ì¸u‹ŒŒt«VÖT¹½sûn‹æÍÏŸ¿Ð¤I“U¼É­­­¨”záâ¥Å?-¬ªŸ[·nµêãÁ”#Ò±ùø·³±aJ˘Î?-Z8wîl_ß^½ûR�””íÔËë•®néœçÍ›3dÈ`jìݳ»MÛv/^xvîÜ©k×.ô.ÌoJý·oßùõ×Ò¨yðà¡Y³fNž<‰ÚVV-íß¼e÷ÕºU«—/<455©½rå¯Ö­ÚÆÅű“7·´ š35,,ÌÏœ=G“wèÐÞĤ4…ZZ˜+ú(¼ ç/êéémÞ¼QBB‚>FU5Õ¬Ì̲^¿yýÞßÿµ× ö¢_ IÉé3f±«vïÙ7oîÜñãJë½»vn·jÕöÕë7¶ílè�ܾu‡Þ>õߺugÃúµŒÐ–:,)×ÃÃÂù1H½-p °`aáá99¹8oÜt¡ENQQAa!ÕEåääh±™I3v˜…¥Åi^•Õ×ÏÏÜÜŒÕ(SU:m##ö–NLi곌ˆ,=—ø‘«ë“§O©jÊöß½wORRB@éT]¢éØÂ‡ J ÿ6‚ÒQiii±käå9Å~GÐÞ¶ÛPQQ¦Š±ßû÷€‡ røÈ1ª*S8!!¡WÏ4€ÂçÌÓÙÁ’’’6mÛ$%—>xYUU…2ù¥ËW¢¢¢ÞÍ·Øa¦¦¦lƒ>Þ¦ÆÆ‘€«zƒT6·µµáßñkÄðaå¼ïß̤)ÿ–Wü#'÷îß�ˆŒàß:--Í×Ç—>z#'Nž¢LÛfddtïÞ�øjHKKÉÊÊ0ðÕ£olúÞfD$Â)Ð:jb¦eæååÑŸ�4ÔÕ¥W£F�–9,¡ìÇ®å¿ xlCUU533‹¿yfVV¥ÓJ•ù ø®°¨HYI‰Ý½hGÆ Ð_º-Så ŸE:6�H^×ÕmŸ�@�ÔÔTö^Ð$0(ˆâ(Û–-ó4sYY¹‚‚jôíÛ—’0¥Y*f÷ïß—S�_ Ëû5Á‡Ár6¼víú€�ƒ©ºKE`ª`rÌR•|,U)*¢O‚~ c+w´e×5n\ö#mÞÂ’}#Þ>¾)))¼7ÒOFF„Ÿ0Ø›?—ëÁó� )ÈËåäæ1ð- olúÞfD$B¦µÐ—OÌç>X´aU«š™˜ÈHK÷êÙ“j§l—Ë¥lF%ÓJÇ[µlIUÐwï¼[¶lA‹gÏŠpàN:hjh°çß Ó/*ÇfbÒÔëÕ«Q£F4è÷ßÿÌÉξxér#W77�gÏ4jذ!û–½½}غ(‡ÃñðŸ3»ôº\ú�@ÏÝoß¹sëÖ‡W½Ò'æãíc×µ »øÎÛG‹wÚóÑc'¦L™üï4iš“_Ù¬¸¸¸\OóæÍ=<þ8½½½©8ÏžõýáÌÌ�)'³9–ðWQaÙήëôiSÙEöï”}#=ºw»s÷Þ­Û·Wþú #Š­NÎü›`1¼ô;|äè¥_ú`Y™¼ü1þ—ÿ úÒ–ú÷­JŠ É©êŸýÑPséYÚšjŒˆD¨w1¯üq¾Ý-d¯.Rg_;~P~CBÙiÈ�Á+~þ%""²°°p÷î½–-¬óó«¼i–……ù¤IÇŒûÁaéòÉS¦yy½b„6`@ÿG®®gÎüK¥Ë���®ÝzìÙ³O@¿¨[ï^½\]Ý322¦M›2eÊ$ªŽ;æàÁýÏŸ¿ˆŠŠvrÜÂùûÑÈÕkÖÉÊȶk÷á¼âaC‡üþÇ_aáá]:wúØ3tÇß;Ÿ¿ðÌÍÍ=ðÏÁ·oß±ýZZšoß¾ÍÈ̤Bë¦Í¿W{ØT~—““»qÓ…>ÿ²ýô£Ð~ðÐaªÒ¿zõzÔèqááÔÿÒËk欹ôYQyYM]í—_W¦§§‡„†nÚüÛQ#G89o÷|ù’b¼«›»±‰Ù›�—(2øðá#ñqñ¢^ÁËF_þs€©A‹/ þÜ””22²øFЗ6}u 9XNNVA^61)…€¯}WÓ7¶œœ¬¨ŠPØZußè¶š^UIDATÝärw´ºñ¶€^¶ÒQ“üà­[þ\°ð§½zçåå71:zä ¼¼¼€ñë×­¡êâÓ§O--,Æ�Û¸‰°w¦’éß;¶ÿþûK–.“–’úá‡ñ³fÍÐ/†ªŽ�vaoß‹²ñ¹³gfLŸF/¶ÿä‰cåfX´pÁ°£RSÓ¨6~`ÿ^UÕ¿PèÕ«gZZڔɥ¥?ü•Q� ™0aRNn®}ï^S&MŒŒ*½yõòeS¦N·°h¡¬¬¼yóÆë7n >f%%¥¹sfQ|}øÐõÀþ=ü~“}{v¯ß¸‰jÈ òÓ¦NÎ;3<8(ÄÕÕ5++K[[ûà�}‹~r°hn¥®®N1žöËn;~ÜØØ˜ØéÓg%§¤¨©©ÑÇbmmÅ®êÝ»×O‹(ÿKI‰|¾>e`öñ¿ÌÇ»@3_œªŠR|BrZz&ê_?úº¦_ïjjˆpdM µÄä4ú¹J§ž_%ú–.,âèhk0¢“àr¹Â�~à“ýË©XF¿�×íÑ\¥ÚaT*ÌÎÎæßQ©*Tí<{öÜÀ�êÕ+ý�Ù½{÷§ÏœðÞGpf.‡*–JJÊü»dUÛ/$ÁÇFÿÞ¾ãï‹/ÛÚ¶£—N½z±qqímÛ±7afx§+wèÔ%48€Ægff–û(23³Ú´mwæôÉ6mZ—í/*âP…–Ÿ“ù(-«¨¨ðÓrµèŸAqqq¥ã©MSñ/u&%%%e+à£*´¦¦fµ×‹¤ô�ÀÏj%ý…D芸Qé¿Õä”tYYY55œ ðuÊË/ Ú/ýÇW[K½ÒÿºEDÅ øO@jZF^~¡ºšŠ’¢î‰ð•(,,ÊÉÍKÏÈ¢Ú/ý¾’‹h˜ì¹“|äQª�ƒ§tÓœk_ËÏ�ÿÃĈˆÈ¾}ì“’“ïÞ½G…ÐË—1_‡j�-**ê¥×«€€€œœ\}}½ÇñŸËÇÀŠŠŠå¦½víúÑc'(™Ÿ>u‚�Ú#^fefåäää1ðõ‘•‘QRRPUQªj€àÌ”Þë±�~Ì¢ Íá3ð�––¢úýjRŒ3ŸùDÀŒÐøs¤_†W~¼zíº��¯²²R;›¯êa°59¶ŒÌÌ“'NÍœ9£b zï¾ýTD�4q‚‚‚°W1�0j€à›#NfxçB;ßH,w=0ŸŽšôâ:=š+3_1`€:EÌ̺þ*Óý}¶_t>›„)÷ZèËw1W|×+€¯0@�R£ ðMC¨SDx0À· ê`¨€ N@€:ê`¨€ N@€:ê`¨¤€ºJKS�€:ãÿÿ‡vè£IDAT¨—»[Ù9IEND®B`‚pydantic-pydantic-e28e879/docs/img/logfire-validation-live-view.png000066400000000000000000002727221526274674700254510ustar00rootroot00000000000000‰PNG  IHDRÐ@JIDATxœì�|GÆ'É]Ü ACÜÝÝÝ�¢--P ¥-ÞRZ(PÅÝÝÝ]ƒ;$@ îž\ô{îö;Îr—÷Ï‘ßÜÜììîììÌ<ï;;+JOOgAAAQØÑgAAAQ LAAA HAAAEÀAAAD‘€0AAAQ$ LAAA HAAAEÀAAAD‘@ÄÝIOOgDv£§§Ç‚ ‚ ‚ r À:Ý›”œœŸ˜(‘H’’SRRÓÒÒ‘5ôõõE"#C±±‘‘‰©±¡XLJ˜ ‚ ‚ ˆœ@�œ™Ú€RŠŽ‰‹Ž‰…è535FFb±Hñƈ¬#l Irbbb\|"İ¥…¹¥…É`‚ ‚ 4äVFûÁ^v• / F8CP> ‰’�ÐpÈ]+È23Fä$qq QÑ1�Äö¶&ÆFÔNAQ Á`Ûðˆ(IR#>adhheŸ‡¹æÁJ/>>! ¥'ÉjéZ[ZX�—¥ÈCX(´V±qñö¶6$}sô¡áæf¦¶6VÔHAQáOÏ…†FXYYÀ²ÏˆOÀÓššjoo£ò 8”^rrJHX„�¾~¶”ÞÇ=¦¥9ØÙˆÅ"aYH«Å’’š!2Ðwt°cD^–’šæ`o#20 FŠ ‚ ˆ‚EZZZDd´¾¾¾�µ%#T�ò�ƒ·x1åç QzЫLO/{KOºÇ„ÄâNöô$c‘….¼j’SR‚‚ÃŒ� Iýæ!(|\\\FAQp�®  &©_  pàGA)øäð5&6N’”œí¥'Ý£¾>2'/`‘Å`îܹŒøœ‚C#LŒ�lm¬”�JL’~? íŽoÚmß´ûþi/BÒ|£Ó㓘‰˜‹tsT~øàwðÐÑ[·îŠÅNNŽˆ9|äøµë7Ÿ>{.‰ì™t>pÜ¡ÃÇÎ�¿W®l¾aRRÒÒeÿÖ¬Q],ó­ììlMMMSRR�;Y©RE__¿çÏ_–*U¹�={áþƒGøˆ°G¤ÿÁw箽uj×Dx×îý·o{ò8wGGäæææªîðvÄrcì(:&ÎÌÔ„œÀAA ¯‚CÃíl­Å"zëŠ& DáQ £ôBB#ls¦ô>í‘.¢�XþܯÈ@_YýBú^|“º÷Iª§_štzBòÇxð‘ø �Œi‡D"Y»n“‡‡[ËÍöí?„È'OŸ5¨_×ÃÃ}Ó–íÑÑшٶ}·‘‘Q÷n�?~zýú-¾íƒ‡�_{yß½wŸ}òäÙº ›qðii©HƤ<¢Þù¼G Bùr�7hÔ¨þû÷ìí?:´/_¾z÷Þƒ  `„ëÖ­U½Z??$sq) üèѵ‡§´£œ—… uAAÒe$%%Ós¿‚"BAñã1<,‘$åPé![d.¿G¢HAø3ø�Ÿ <óùeˆTßz‡gpŸ ’!1Ó‚'OŸW®ìV·N-W× ]ºt¼~ý&�/S¦t­šÕK—v ‹€×7$$´[×N.¥�G�Ê}Âàæ­;“¾™pë–çǼô˜‘¡ÑÉSg•÷Ïm%׊^¯½Û´nY¼˜bRRR¼¼ÞŒ>äÖméæð*—+WÖÄÔÉ…¬öðÔï(çÀåÀEIHH¤vŠ ‚ ˆ ZtBy 4ËaèY²M'ÝLŽù+Žå$ÉŸˆŒŒLV˸>øÚÛÚ(Ä? H»ê£•¦å 16É0”­““;9:à+oÙºóÏ¿–ŠÅ..ÎÁÁÁ|îñíÛw÷ì=ðø‰ÔéZ¶Œ DaXX8ßê‹QC=ïÞÿÁWyG/^¾‚ÿ¶I“†üë£ÇO¡±+Uª­áæWwxv”sࢄ„EPSEAAD¦É é:0"æÏ8È`–ìÝ»×ÖÖÖð666†j@2$f™‚?m/‰Þxw®§Ÿê—ƒM2ôéûüù ~öì¾òðÐ!êÖ­enn¦¯¯ êëëŸm½zµ›5m‰·ïÜ �8rôÔ/D,ßÊÐÐhôÃ7nܪ ££c<:dp!æÜ¹ AA!gΞ ó~óV×ÃS·£—†V, ‚ ¢psñs¡ÇV³{¹:=1xüøñÓ§¹ñø¡JŽË`…‚ìy¬Ò�B—xëȲ›±cÇîܹ³eË–Læ633‹‹‹ã‹?)páÂ…ôéÓ‡éŽt±¾˜8[ëÏý�JL×É÷+6,f¡ge¬öñzw÷JðÍ.ûë?Hw¨»‘#†?5jXÿÒ¥«¾~þ¥J–èØ¡í¢?þt°·‡èåinßöüyþ,ë.�;,YúOçNíùVÅ‹9uíÒñ칋ò{ÙàP||üÚu›®]»fõjUãâæÎþ_ÝÜ\oÞ¼S¡|9]OåŽr+K‹ðÈ( s­V,¸wïÞ›7o2W‚ ‚ rhÝyóæ©S¼sçÎmÞ¼y‹-¡ÄÃS,ôEzèKf�ªW½=+¬¬_¿—-[Ær—ÈÈȾ}ûž=+50´iÓfÏž=ÖÖÖ,»ùãqÔËÈäiÕ¬ÒRüö¿ºìnçÒ˵9˲á=ÀpÿBÛï�N†† ¶Û‘�…Å –””įÂW͉µ‡?jZÖ¥¤|üÅ7?÷«�ò¶z-ÊhN“šš ¯‘‘¦§üÓÒÒ ù-,,X®£Íáåo}üŠ;Ùf¨� „kºcǦ—/_îß¿?Ë>|¸J•*åÊ•ƒ†¿uëÖÀ�àÔ6oÞܽ{w- ØØØíÛ·2ÄÔÔ”å ¸éPÚ°8À>Åò7ëÖ­ëÖ­›ƒƒƒö›ÈŸ�puX�åäɓŊ«Q£†N[�>}ÚÀÀ uëÖŒ ‚ÈôÔAaÜR±¼‹–›`l};gÎþUк�Ä—.]âÞ`xz²¢�¯]»fiiYµjUùȈˆˆsçÎõìÙ�¼Ê­^½zåëëÛªU+–c¼ööÁÀx:•Þ“ãi��¥WíŒ õKm=ÙÀ±bÆž…=j ÌüZ(ÿ„ —íïÖ ÁîwΔ)S˜œÞ»w/l":�g2Ç?ÿü³bÅŠ«W¯"ܤIøgϞͲ•—QÉ<ŠB kiÓÉ�ý¯.!üSÃaîveX�Õ)Ð\ýZL63l ÆÉͤœ~8‡ˆOH435–��ûWAý¦¥¦Hâ„�t}?I‚|LrR¢|zlžá¢Ð¸÷2”—úúúy¢~™v‡—9à^f:‚ „ˤMJÜ¥¸E™vx{{ÿòË/,ßð÷ßß¿/]ßêwíÚµÊV*D~úé§   ™ �¼sçãôø> ???–cÄÇÇã�¢¢¢´ßäùóçGŽaY U…0nÜ8ccc�¶’?;áêä2Qà›o¾�ÑGݯW®\©zçl(»wïfADß/”-×·á'®Š¹0F2ÍùtéÒŠŽ¿FD™… nÙ²E!£ ø÷$‰ºàk̃ï½Ù&¨+ƒŸrbÑ2 Eà`¿qãF©R¥pE`kàñHà'–Ýœ?~¢ Ξ= /Å—_~ùÕW_ýøã�Se@uc¬Â²‰Ã>ñ<Š>c®„ z˜³ÿÕ¥76ãò•Ì `H\ÉÍ$ÂFò% ñA€?œk¡yÓ�-sîSRRÅŸOü‹HP¡²BüޜظŸs;ÿeZ 2“"ÎÁÃÇ¸Ï ^¼|­å†¸@¸L&»ví,dúúj«·¯¯ï˜1c µvî܉†[~BÑü±wïÞéÓ§/_¾ :’¥¤HÛPȆ)S¦@›Á³êææ“[„ hˆ½sçεmÛM?ä“òî ÌÌÌøâL¦Á « ="žIDAT¡Qùåd ¥Z²dId¥°a\\Ä3“½ºê=¬nhïäg"ýùçŸüøûßÿÁõÍŸÊà:‡´jÕªâÅ‹csŸ´´4 '}Ñboo¿aÆҥK£íKMU]Ô§OŸÆ¾� Ì"‘­¡ðd-´ZgtŠÂó!*÷Ïö€°#!ôž–%)�é*”¡VYž‚ž }?z&”ÎVþV6hZÈ]ÔHDÔº… "ú"ŒBöïßÓ“MmrqqA=Áû½wïË‹PÌ(¸|ÔªUK˜ Ñ‹ãÇXµ ×ÊÏž=¨( ‰A¡ |¶3´nú'„I¶Ú¸Ñ8÷��žš÷øðÀ0-È3ôJpèaü3sæLÞ7)€ÁƃЩ¡Sæ®?&{ 'âa넟Χo¾ù†É<„�»�I�FøŠ. lÙ²8` ÑÑÑó±GNðngòû­’J= l=ô¹*áê_+õ½ß’ù$•eÜ¿îºÏpŽzæÀƒû~pNÑ wÅ+àÒÃ\ L* ,H‘¡Á� ^E+¾?èed²»ÝÇ¿áøåà ̲•LN�æ�þ _íwØp¹kØ@ '0ƹ0šÏ¶G]ÌúÅ@ƒ[TA2%¨z©SjJr|l$0-HÈ웡à,zôèDülYtqç70^Â|¯å†¸@¸L®Üƒ–BC ÙË—/w Þ0ˆC>XGækd@’á+4j½zõîß¿Å7¼�#GŽD|�5lmm¡gâãã‘CÇŽ-,,&Mš„�ª|x 7‚'�ÏgF·Ô­[7œ „ÄÍ›7‘"Ñm@@¯*oŽc€IõÎ�;|Õ+l ±ÄB?±jnnÎd jñâÅT¬XmÔl•*UäóÑp‚øŠš†¬˜lÊ4:QìÖåƒyöìú6lˆs‡ÓXÞI޾�‹+ø«×­[§y�8S~„·nÝÒ²$9™«B8ÔçÏŸkž¯²<3# X(øõýûï¿q)qŽ8S&›ÇΧyã¹°‡\„ÕwXÇQPpƒÃõ s�¾%e @4?¨œé›8‹Ý3ΨC‡èq�Ž;†³puu…ÓVØkPtðê#€º�jÏ‚ ˆ\6J‘atF'ŽnÞ`Œ[Ð×À$�&ÚÎΊôĉ|uøðá±cÇòJÑ9Ân+?¸BžÞ-[¶ÀîÏd}4! �Æà‡'€gø·ß~Cw±X\®\9 Y™ìe9<###tˆ0%—)S†å~›$†:óY¨“Ìøûhð·Ìqìýß-IÖ¿›°l‚w�ü•4ÒÈ+aÉáNà¬O„~úôéÚµkÀ5Š��EöeŒŽÐÕ2™Ù†ù4š§=j †Ç½¦"Œ«O†óѲH×Ò¦®–ÿWJ•¬Å•¬ ¥#F.ƒùBЂ$Î.2+€!nòÙÎ%®Ì6$�™$K ›�CoEÈ“w£s©Ô{â¯,'ÁP-êÚ/ooo˜îÐé´®5nK´DÂìÙ\Ø0ÿç“'Ok¥JÐŽC€ f…úõësŒNš–»ã˜¬¡Çȹ!1þÊ{hùB|0¬¢¸ g p`*kÔ¨Ïò@èH m è xáEæP5°›ò%(�?llð£ÂO÷“¹|Õ04­°æ3WV¨hômÈYÉËQe4œ ¾"ÌãÑiÁ@»ðwß}÷ðáC_ªT)ÈZœܶø‹Ó„d¶’ÏZ¾Á ÷(¥²$³¸ñ¡À1Ð�F§òÀ˜}¼0ëvwtKü2áÂñH” * ²…ߥwêÔ)œ5º˜ ll¤«è÷îÝÃü„®´}ûö9±ø. ¬iÓ¦, à~�ÕæÒ¥K¸R¸q¸ì‡à‡gžž�³Pm‚ mà¯ARéÔá#^ÍÊ ê¦IþL Fu@Á›‚~�w|°žs�Êd^.n™Ì6­�Œ˜è»¡„\è�#ÄÖ[uµ ÓàR†¹™'P7›,‹@ý&¦96L¼�¶"Þú[s‹‰Òu|L¿5÷Yl³u•ßMn·Œöߤ_bx6t¦¼ü…ÂçbXð g‹âU@ðœ Î9.z—Ê`2W07Ö˧)p”ôö2X+}®Âòcï=�9ýœ�é…¯m˜Ÿäõ©�× ã#Û*FÌ–e+™)/áÑ_¾ò³Ê4ø•Ëã°�‘,ÇàBPó²e¾÷.Êǘd‡÷:™À,·k×. áÂM…0_Ò@{Ž=ŠA<Ó�Lo¨#FOYòÑe/½2h 0F×�F"‘ _…0â‘¿¼­?ñu“““•mp`Âç-T ä1L<1¼ˆ£?Áý��ŽpuB3@YABù0YiÀ G+ä ¨L÷³gÏž0aº¢%Jd81Fà y§« ?;wî,œ ÷«CÁÂǵ“0$Ђ „­„7(›kÞ£€º’TGæª�6³u*Oy`+-þ tQ‚ï](UyI�ëΟŒÂ_„y$¼Íëׯ755E›¶J™+\8 hìííYÖ0`¬Ü iâïÃP‰Éê9§gÏž‹-Êúkö‚ Šhÿõd´T"ñ.·­›È@'s'|ÂÎÎΰäÂüÊÓÀàΈç¾\ùH'''tÖÊ à@FW…q)2„ï­½° o𣣣aýòË/aõòòb9CÐzIèê÷¥¦²p¢Ù·Ö?®b‹€^ ã uRíí±Ô4du"\Á,›PXóY¸.|Ö:‡eðè.“ë9�@÷"À a2,Ÿ†e½zõB·ÞN¼ ¢À.¯ù�¬,òz¯1wŸãÃÃ�k@G¿Úýz‡$ì1ÿ ŒËVtÀòï=Òœ2wÞŠ$h`–eD"ƒä”Ïn>¨Ç×OŽ®+柨Ѐ ³U™‰\Fp·bÄ\£F�¿ÿþ›GZZZ¢–»»»3Ùë¶0 †%�ÉŒÎ1~ÅPû«¯¾JJJR™góæÍáaƒ}N<¾nÁÎ�;qŸÀˆQ)*4Ovþüù:uê`_Ø5�ò†9„°l¸÷èÖYË “¥³.3x¯2†øµjÕBë¯! ÊP~)! g$7s2Ù“·°AðfzFÞ£…Š�“9K{ôèñï¿ÿ»'óP_9ç'tÎÉ“'áñú*\ýåË—Oœ8QóëUqÀ¨ü±RùÆâzýù矰¶Ž?^áupÊfW '¨ä)œ \¾<¶dèáíÛ·ÃÒ¼fÍuU1Ã=ʡʒTGæªP†Xsyj®rä<þS¦LQpq+иqcŒK=z„Jg/�Ĉñ0(À²àèè#º†r¨´ãà³gÏV¯^£(Ä €²âOÿŒð·�=»A‘£`@ËúŰVX š2| 8((èúõëè@Ë@"vß¾}|ÕÃï¾û Ðà Ý1²Z½z5ºZÈTåg€aºE4þ| a»ßºu+�‡¬ÅOè¡ ªå—Æ8£/ü c(zv˜YñWÖf;‰·’ĉi‰w’ý7JB^¤;Œýì‰!Ûñ¦!/ÓðSØŠCIjÂ�Ì>‹¨ù§/³K†hCa,þ•å­Zµ:w  †0Žýá‡à¢ÉÈÞ‡œ-jKÅN±Ñ=¡{y İ‘�âtn8�Y¶¢Ûhå÷i&wÞŠ„!ës¡1P3‹%’d#9ßZ =ÿèÏ< ; ÁGyóAÓÕN¸E&L=ñ뉡$š˜‘#GÂ8dÈ�Ö2x‚@]ÀÃd3.ÐZmܸÑÜÜ&ØøÔÐÀÁ'ãáá1cÆ ¤D 1bÆôpŠþúë¯;v|ðàv 6uêTäƒví›o¾Á ¬°!Ë1ø²=™xƒ ..“æQµ6oF!¬X±RnÌ»wïnÞüqq9ÜØ(Üäÿý÷Ÿ••ºt�Óø©_¿~?þø#Lø ýôéÓ¯]»Aûý÷ßïÞ½»R¥J���hî5<èÒ¥K\˜36mÚÄc #!�`.…²Å¥ÑpÀð[[[ãÀp áááB_…ÆÂi[ïÛ·oå—ÞEã:dê! VaxJa'æ@e4ìÚøõë×ÐÃ0¸@Ji_’,SU3j¾æÙ¿ÊS3¨H¿ýöl±0'aë:' ;Ô¥‡Qõ74¶™™´9 ÁNQ>(.ØÅP+Ê–-«a�™»‰ €ùì}Í`ƬæÀœ$oæg2{�……º|á…„õêÕ³±±AK»FxÑQ%Ž=Ê‚ ]� ’ökÜìÝ»²ýÿª¯¯ß­[7¸jÇ�k;,³ã¡iÛ¶-DAÒÀ³‡ôhÌ1Dÿ¨0¸‚¾Ezþ (¨üÑSô\0ï"¸OŸ>ÜÀd+€ÀCóîÝ;H&ô2i0jOž<™å .«,"V$ølIжY¦¦#l3á£Ûr7Å3E”ʼö¥8;ëYU9ŒÍ¶Ç€åÉÑËÁxûûï¿Ã!ϯwcÔ„ ‘í A·’!|mÓ¦ \؆%Ä"àråÊe×K¶øÌgóZî‚À¥:�ïW>†e+º àÐ�LG �¹Ø®�5Ë1²e潑‘811ÑÒâÿÚ¾Œ�ž§Ë"ÈDÝO¨Ð°«AGyÈ@{I&¿¶8ü`ЮPòÇ30GÃÕê"5èaá„W¼¢½ƒ´Ã(* mÔ"!·àóáÙþñǸ[ ^ =0bר-80Û Ô:*hKys†ºÔJšÜØØ% ìQêöȽ¦�;wž5kÖàÁƒµ/IŽ®U7$%äºædêÊS3ðˆÂJ:fÌÜ�Ðùè5¨_ÎF¾„&“UÔT1ô'LQÂLuèZ±±±hR´y2ùG»[¶l cŠBœ2NSXmMäîðáÃQÂ0èÀ„'x ‚ ˆìB݈÷+ò1"òT+´¬Àк¯èj<ˆ¡ ”*l²|gyøpQa+îVÁèŒ9ÿùç?RŸÕµtéRtgø9ÿòË/,g€â½yI¯b‘c€^äÒØÀµ ¡Ýü%IDATÆõÄq"Ë1Æ K¸0‰«øÅÓÔŽ»²Ó�Ã=ó(<*œu`×@a W‡;ãá' rúUÀ°žÀ·äíí=i’t�'Œ¦0$ÈÆ·LCý*Ä„Üüêײâ@K×A,gÐÓé-ùÅŸáf|Õ+üY_»U.30_š'ÖÒi¬ ÆRcèÌ#Tøª9±ö`À—˜( /ëRR>þâ›TïðÌ?ÆVÞV¯E9µSv�;†V µ™¯vƒ¡3ÌlÏŸ4� ïF™|=' ^yÄW2àkó@B{yyÁûÄ7A>ü¥¬P°pÈ,_¾a ÇÑT ÿ`CÈìAƒmß¾w2ü<Ð$¨Ó\PÉo˜yëãçä`kll¤îI`ØÆ`Î ÖræjDD_H�””‰D¢RÂ;',FÅAåA$_Ì9àpe5/z,…Ä §�»na€²o\å£ËLã j 6Ç�&ß/jFÝ�®—yKR3pžãîàkSkFCyfî¯Ìm(ŸêdN,hqúôi˜ŠÑ‡±œ-N?+U‹ ¢€®‚ã–ŠåµZÀÚ ÖFîþÅðOQÂ$Gþꓺ¶ÂkoŒÀ…ñ@†¥÷üpZèË4·nHýìpjèKi¹ Œ¿Ž•ôì+é»wÓ¿¼81M§‹´Ùc†h¹äœöÙè†m‚S�¸ÜÁ³lÙÇU? �7n¬òí!ÙËüùówîÜ ÌdÏfb,ñõ×_³làפs!‹�î)ªêÉÝ¿ ~Ívß/G70_ÚŠ?ÓË•0Ÿ-$Pн|¥è,N~ÆðÃAþ>1&Ð •A2$ÖUý2Ùh±Ä ..ÁÌìÿ“%j–Ð÷ÏüúuØ\ïåÊ•c27/œ� ?½yó¦M›6ð®ðùLfõ�oƞѣG˧tqqÖž•Gh";tè€QöÆ ’áããò„k‘?µ˜oÛV\\ \& MnÎJ•*i©~�JõËdSaÕ)RõËdŽ÷¬h6uÇ ˜3”#Q êV6Vw/h8A-1’¡}zu{”�ÌbIjþp…{GÊ3C2½a6æ ”@×Ö†}z‚ ¢°Âô½té’JùÄõp6®±T  òbžçÐ[ë¿[žîTQ�4ž¡ç$J?:)ÄzžH÷<ŸæTÞ È;ÝÕ‹9U`Yg® –»@Üjpðæ´ïWà›o¾¹rå Ÿ@žd£ûW~`H߸û/,j»‹]*†„=†ôÍ!õËtõ+ }åï­$ù3™èeŸÖˆfÙ,cÇŽåoôÖ ´ÄêÕ«3Q!ø{€£cb$%Šöꦗ!iW}2óï&.ú•4 `ìÑÃÃØÿý†®É“'—)SfÑ¢E¾¾¾§š˜˜lÙ²…‹=¨ü„B@ËxàÀ�Ò¥Kÿþûïׯ_?sæŒJOQ¯^½àF¹•-[vÇŽcƌٳg,G�…çÈ‘#° 0w2\ÐçÎ�kÛ¶í“'O*W®,¿a~[ÀÆ? ØÄÄÈÒB:ýCݱuïÞêWå£ÑD篿þB�wrrbE4ÎÎιð€A¡«X…Õm²ý-;ù �<Ào>~jµaÅË©ÎPHÓy¬V{,<{ö Å’-¯üÍüI½N�:±‚�^¶¸û¸ÆßìÕ½ ^߸¸8uóë2áû€MII  µ·µ‘wƒ‡iž~ºià:%õ«Ïx#ÔæàÁƒoß¾�]C…ÂO 7ïìÙ³þùgùdpÕnÛ¶M"‘Œ9ò566ÖÍÍmÆ 4P™íùóç!§¡iùtÊ… bôã ”3Ÿí õûÇàF‚oæÌ™Ó¦MSÞ�åàþ �(îd‡¡†Ù¡°KM˜0A˜NA‘ûdQ5t��í{$Šz…õY‚LÀo¶ÄDIXD”‹³âJ9:ù�3ôý* ÓSs�ÊÑÑÑÚÌM‘¾4èÿóKCBBìííåïsœ2"!¹5o˜ðùàomiÃ5UAAäsHë `"7É_"'oÁ ×¢¡¡ØÔÄ88$ÌÑá³'ñ h‹YèÝ÷OÓ¼&Vy[½š%ô­Œu»—tzjÒTËç$D¬ò“±8eeõ«¼ažƒË�‹bbb¤aò3AAA„fHÄLAp4 ekóÙ‚C�µ-ÊÔ,‘þ."Ý?&="!=A6)ÛDÌlLôJX蕱ÑÓUú‚ ‘’šjgcEV:‚ ‚ p«$$JLŒuX3²‚"BA)ÇæPé![dΈ¢ àÏàN`-kK‹ðÈhÄ(h`&“ÁÕ‹ãÈ\ê7>!ÑÖÚ…Ü¿AA0h173‰ŠŠ!¬ JaŒ‡¯ðHåPé![dN£Ê"Kö¿j² #L„†èJL”‡„1"�@áãàBàr�ú%‚ ¢  'ÃÂÜ,%%%BæS!T‚ÂA¡ x‰ñH655NMMËöÒC†IIÉÈ\~�D‘‚ÁRMš Ü�1±ñð@*¯ Mä(|ÍgSc sS¾ì³†•Ÿ ‚ ‚ ò|%'‰$ Š ƒ++ rË“�(�'ƒmkK##C…'ÝxéA©FDÆègKéñ=BTÛX[À¹BÏÖYH«&]40¿÷Â#£Åh¹d«3"'�ô�ŠŽINIáŽ_aæ3µPAA,¸CƒÉ˜Ø8Œp’’Sñ C±ãjø~ù`OÙÕ!”|Q11ñ’¤$–5Œ áø…sE݉" `Mã$h¹RRSÍL��‘‘X¬ñ…´„– l!w%’äÄÄĸøD‘�ZCSÙ‚ÏôÜ/AAÁ¡Â¡Q·<ü©CŽJWG¶—^†{$Š$€3@áÞƒTƒCX’”œŒPŠT3"k  ‰ `N02Ãå+þ4á™Ú&‚ ‚ ér0âzrhH–�¥§å‰B `­nŒ ‚ ‚ ‚ ;ô`¢èenf‚ ‚ ‚(Ðh¢èÉ‚ ‚ ‚(2�&‚ ‚ ‚ Š$€ ‚ ‚ ‚ ˆ" `‚ ‚ ‚ ¢H@˜ ‚ ‚ ‚(�&‚ ‚ ‚ Š$€ ‚ ‚ ‚ ˆ" `‚ ‚ ‚ ¢H Ò2]zz:#ˆ…žž#‚ ‚ ‚øDÆÒ7>>!,"J"IbQ@022´¶´°°0#LAAG“†ôMNN ‹0Ð×w°·516bQ@HH”DEÅÄÄÅ;ØÙˆÅ"’ÁAAAhz8..ÞÔĸ˜“=©_¢`�‹z‹Ú Mà'‚ ‚ ‚iÀÐ 1±q’¤dkKFÔ^}}ÔdÒÀAAAhÀQѱVVŒ 2¨Ã¨É$€ ‚ ‚ ‚Pý pº ‰$‰f>š‰�OŒŠŠÖi+++ËâÅ‹™ššähnÔaÔd^¥éI`‚ ‚ ‚(ʨ]‹I)2V®Z]¡|¹ýû æØñS÷ï?466š0~´™™Ó�9sôèѵf�j_º|õÂÅË¿—ßN\$’$­É÷K) �ßúøšJ’Œ ÅDD4òsGÅÄ’ï·Ð üÁ/ÐÔÄØÐP\8üÀ\šš™²ÀÈØ(>.^¡¬òd�áÑŽde.XYY‡š›™dx‡ÊÞío(fùÐ÷«€™™IPp8”0= œ£d^§¤¤ìرêwÈàþòñåË—�<é«_þqúôYè– ó�ú ðøñ‡i%Š Û¸yÛÿ­™7÷GV ‰ ü2›å‘‘‘;wï³³·Ío:Ðçýssó¯'Žÿ}Ѳ¸¸8˜EîÞ½�‹{ðÐÑ—¯¼jլβÀóç/OŸ>7ú‹áQýØ)­­È&MHâããýü"£¢4¤±¶²*Y¢¸©©©R¼e¬ô�½Bò$^l\¼¥EflyD�—ÛÖЊRÒÒÄ9¢B·ÈIDATóx!²U¹ÀUnî‘¿ï0)9™žû-"àB'%§døžKžž*ƒ‚0­ØÀ@‡šáIY$óøÞý‡õêÕMù'8~;vl»ióövíZ+†ðòò®Q½Zig©[ ^ÙqcGùùúC]‹D"\{øïÝ{���P¹²{ŸÞ=ù ƒ°]»ö½~ím 2ðpw4°¯X, þoùjH|øà»léoØü豓~Üü{÷î~ñâÕ·ïÞáȇexóÖK KxÑáÑ廨S»f|BÂÕ«7¬­­š5kÜ´I#ùcƒ·|ÇÎ=lß¾çôéóÓ§MBøýßãÇO½öòv°·¯[§VëÖ-X^PÌÉ1 ðÐác8å½ûÚØØÄÆÅ�8yæÕ+/œË�AAÛwîéÕ«{Ù²eXÁD’”dogâ �öðéó¶66Ê—Ó�,<<É*»»)4ûf¦&‘:¾Ü;ß"} Q’L–¬"‚©‰ItL|¡†æÂ¤J…²*”{$òZN�fŠ‚uÀÊG›ÿÛÌÌCÞ¾}çêZÁÔDõ$çš2_ß»wï3̧lÙ2·o{ž9{!:Z:B‚ZêaÈWh§zõêtêÔþéÓçk×mäE¼jÕz_?ÿž=»¶hÞôÎ�»{÷b2�t`Pðö»ì:vlÇdåB?W©âѵsÇ��Ð?þø+퓱ððáã�¾­[µ [±r�Â!¥¦¦._¹:³U«æ�Ö‡@]·~3ßupHÈ©ÓgÃÃ#Û·kcõù($84&&–Iç'ÇÊ?c ù.áÞ½=Ü+5iÜÐóî}øÉ££czÊüä«×näk²cgÎ]xóæ-ÎÞÔ­Ûv=züT~GÅ‹kÔ°¾¬�«µhÑ”ÉÆ�ÿü³2""²g÷®Ðä»öì?þË pÀ0a@„3©íÜÒÜ\ê'Á¸yÔÈ¡Y™Ö·nÝæÚµjàà ,¸¾´æ3Q�ïw±­mæ$@2$VˆGµÏo/œÈŸÜ)´æs—›_wFAÈ‘þ �~Ê'd¾OHHÔàÝåÂ8A‹E­†¿èž½ð)Q¢xƒzu êŒ��!VOž:ÛµKÇíÛ0éÓ8vËþú/88ÄÑѾ\ ³,,Ìïëë÷úµ—�[ÓÆ�ºwïÌd"ö칋mÛ´äò²R¥ŠðµB—"g|…‹•'Ó××G|dd|­B&oÞ¾ƒÇòë‰ãù½–ðfCBc×Læäüæëñ™¶m4kÚ¸mÛVÀƒ;ú‹áÈÊÂÜ|Ūupr–*Y?aï°4oÖøç‹.\¸T­je!{{»5ª>zÂݽRõjUsãÆíDIâįÆZXXàk\\üÉÓg¡ÞY^`ggÛ¨Qý»÷î7oÞÄÒÒâú�[�7`YãðÑãLú¸x #"×�O³ïWØËû +¼�*‚ÐE/R¤¤¦>|øXÞÚ~÷ÞƒêÕ«Š èÍ4ñ„†‘äÛI.‘øß|;ƒ&óØÆÆ^Yu¿‡HÓXg¼H&ü¨?þ0Íçý‡'�ŸÝñ¼»ÿà‘7}²@`rrò�·‚eYñ……ßðurr,^ÌéÉÓçï߀¯õŽç=î.æ”+_–üýa¸usså_á5�0~4p“â¯sé� ¹¸H'?Ãs+/€ß¿÷ÅÕªäZ�­äZQù� àråÊfåZ ïˆ2373úôŒ»¹LÌ'ZÏ»æ'e``€ðýû5çùþÇÅ‹sõ Ü*¹Âk ß2ô'Ëup)Q1>øú9z‡„À'eX±by–Y`þè×·çÊÕëïÝ{P« ;� ‚ Íðw+¾yûVönE›ºuj–,Q‚e–ìÍ­óîÝ;ü-S¦Œ¾xñbÙ²Ò1UóæycOÏ0âúoåš�kW1ÿ,_õÕø1uëÔbA|.}Á{IÔòÏ£ÑÞo’¤3yËZv±,ÿeñ:¥�¬ôdðôùMg^{¸»;~ÊÛûmùOšSžë×nB}•+W†i‡Kig|:wn¿gÏ�3ç.|øà›*›®ìà`ÿIšZµnÕÞE¨âE‹ÿ„G¢j•ÊáøÁÈÐPÈG_ÿcù¢Ïc2©rwB¼žžŠIàÉII¸NB‘l¶[Rrò§]h1o\ƒÁX/ã4ò’^,''§0�$%%óG”?n.;àä䇵UáY’D× ÞrXvbbcáFkܰ~ewFù˜�ÐИèXíÛy‚ÈÏ{÷·ïØ㯩©é“§ÏŽ?Ù ^Ý^=ºf8 ?§s+Ü@îâïˆ#.]ºÄÃ...oß¾õññÁ×-Zä¨ Þ¸q#vÁåw^ñÛâe/^¾âá£'ÈÿIŒ¿=ºuéÑ­3+P`0¼}ûö~ýúñù�îܽ_²DñÅ3ó.y/þnz0Ñç´…½C¢¤‹´QõezÓÞÿóðî¿.íF:}tYqœ¯4pæ0zõëÕݵ{ß”É_™|þ$ð�CGOœ:3lè  3‰‰‰Y¹j}ûv­ùúOÒl]+@£ŒJ•,¡¯§W£Fµ&�¥j —��`hhäåå ?ðôi“*V�zýüü¡–•s.Uª”ê»wïáe²÷Á™ ç¡6òµtiç´´´üÊ”)�¯ï}>ðH¦FÆÆPËp5s}ÎÖ‰7oßý?üæ�à4V@x¬®téRW®\‡‚â2ØÇç½™©)Œ,×ÁÉÂE�KvíÚÍV-›¡Á½pñr½ºµáÉÏ´f²{¦mÛVÏ_¼‚‰„Ïg…\qô¯¶RïD-këÀ  m;v£$G Ì�E„ÔÔT_?Ð4Ë›�ˆüÉÅKWôõ HÙôêÊÕë›Kß­Ø]XaÄËûÍÎÝûÖnØ4qÂ8mÞ­˜C¹ D¡x‡.¯E¹$††õ;cú”/_<|á'cH_�àÅËŠ|T©[[Ûƒ6kÖŒéÎÞ½{á9hÙ²¥B|­Zµîß¿/|�‹‹Ëp}Y�ðððE‹5mÚ”;óµÄÓÓóÑ£G£F�bDgùʵæpAÉG^¹z½Níš™ÀLîù^¨ßy!·Dvvñé©ì“S/�¥ÇC^ÚÙÍ ¾‰4ÐÀò3¢óYböìÑeý†Í þѱCÛš5«£ƒ ¾~íÔ/“Ý¢æ`aaÙ¶mûnIRRiçRÁ!¡û÷²¶²tv.…’‚^=x𨥥¥“£Ãù —/_¹öó¼™|¶ð½{! ž? �™•ª‰¾�‚µkÕ8~ü”½�­­�í±c'½¼Þ4kÖ$>>>ã*W®¬£ƒÃ–m;ûõé ãÙ®Ýûá�Ö¾¢8—*‰¿ûnÙ¢é«×R¹^R�‚U‡¿àŽ�{ëÔ©ùàÁ#ôÖôQHààà`(߸q6ì²e\j×®yîÜÅ�›¶µkÛÊÏ/àÂÅ+Í›5a2ûÂ’eÿ¶kÓªQ#é¢Yÿ-_mee9DvœVƒ9ìáã'µjT¯P¾Ü·“&þ²pñÉÓg{iñnE•¹ d.·"W¡ ê—ɦ@üiÓ&(ál÷«”ܹÄ-”->0ÜGDDȫܶmZÕ®UݹT©ß¿‚Nž1Ý•å ûöí«X±¢²Æ�ëíííìüÑ £Ó­êèèøäɦ#wïÞݶm[‘ÀwïÞ«]»Ö®]»ß¼Q\ÆÂÔÌlÒ7_3Ý�ºQ÷“±± s,�øvÒW,SÈO~~/‰úúý‘�m׾鬱q±k‰�Ò°¾¥GšŠ� µuY>šå³ç�³ôJ,¨¯/'Œ­S«Æ¦ÍÛ'Où~ìøofÍþåÚ�›ðýâºîÛèÔésfòÕ—c�œÖ®Û4kÎ/ÿü»Rlh8mÚ$^@#††ŸyíÚ�øéÁÃGcÇŒ´··ƒg¸C»6—/_�9ûçG�Ÿ`P¨.gl^¥ŠÇæ-;~û}i``ðĉã0gZ€zùÍ×ã¡0ÿüë¿å+ÖØÙÙ|=qœV3Ÿe¸¹¹6kÚÈóîýß-{÷Χú'ç¶ö ÏŽŒŒ\üÇ_W¯Þ€µe ES"N¤cÇv¾¾~+V®ÅWÈ8Eñƈ={`ôÜ·�tp,‘$…††ñÇžQ킃Cñá9„†…‡†…) §²4*.èßOíÛ§'�éо͌S¿�2Q{ƒ¥óæþT³F5†yá¯ó “ú×nÜ‚ïW^ýrÆŽñòÕëÇOžf˜ÃÆÍÛ®^¿Q­Š‡¾¾Þìy 21é '@•[´ä/ܳÉÉ)Ûd/îÒ Ü‰eʸüøý´©S¾Ô/062’ïï!üVü³lЀ¾Ê9Lýþ§ØØŒínÙdªr•ÎÊÀ¬³nãè^ØÚ–ý½-“-¦ðë¢%ØÚ½•kÖ£ÅCd’Drüäi–×$&JƒÊ”qaD®€AùÍ›7oܸ±víÚ›2$‰Bš„„„Û·o«Ü<66öÞ½{ò1¸C·nÝʳºsçËkîÝ/ ï?|´\ÖÁ1Ù»;ul‹j¯� [enòd"·¢€à!„Ð…(Uøê´E‹ðóǃ³ (j®º‘óÆO\’‘½;Òž2.¥G"3x@_¨_&�Ý9sS :T¹re++«:1ÙíܧOww÷Ç#fÒ¤IGŽùçŸ7V|g$p©R¥ÄŸPøuþüù?ýôS�=¬­­¿ýö[4nnnNNNþù'“½ÄW64T:öëÔ©ÓêÕ«ëÕ«‡«¹páB¾9œÃØ„‡‡ ¶}ûö;v C´$Øðý{éË\N�:Õ¨Q£âÅ‹�7Ž[Í”�?C`b€ù¿öCIDAT@e¼0ó<¯€ú;n<)|R’39T†š‹E*?0ð±¼ãß«¯ß¼åãó~期…fð÷?þ¼íy�§Ï^ <íû™7o—7’ Óž9Ë<Ímí¥ê7]úiläxоMH©!ðü„H&¿"tþYS0«“ Ñ‘ôèѵ]»ÖïÞ½OHL´±¶–Ÿ Œ¿íÛµÖ�|’ßNù9†zðÖÊ�) Ç�•––g²°ÂèÕ«[·n�aÏ–Ÿ¿i´zåßò9£™€fÆæ ‰ff³µ±±–Oæá^Ia+Ž££Ã÷ßM�€„¢�on–-ù�©UnþÖ/kÿ~½QoäOGá¿ùúÿO˜T¬P^þ'‘X4aüh¸RQê„7ªø/vªQ£>¨Ç&&&‚}ÚãÏ¥¿‹dï GäœÙ3„Ÿ† î? Qμž^áQF¨çéÓç*W׀ĪY½Ú³ç/ªV©¬asÔ�7o-˜?ÇÉÑ¡v­šaáwîÞƒ‘ˆÉfa<|ôùÀY*<§…öðÑãä””Ênü…UL¶t™¡¡)Ÿ?‰NT°Ú@�ûùÀÂ"¿0*öÍÛw’“’±; s££càÔmצՓ§ÏO�Ñd ƒb÷zóæù‹W–æ·îx¢w¨%{�6Œ‹�ŠÕ½nMÀËûMXx8ò¹{ï¾±‰q)ø¹dÓ.àÇÉÆÆÄBQãvà‰Ã#"BBB!)?y†V«E³&*M’p½âLK•*éëç�³´´„‡Ö¥ti4V¯¼¤+Ï—’›Ò¯î˜Ì³�±8š Ú55=‚;Üþ�I—L×70¸ríf�êÕŽŸ8ÕªE³®�;0Ùí ïwµª:ÔrŸ÷ï-,ÌíèAÊÜÂÖÖCUÜïpP À#! pw·mÛƒQŒ³ÃÃÃýýý1 nÒ2¾ùæ›.]ºxzzîÝ»¿øâ‹Ñ£G£wƒ)��Ñ2¬X±býúõØÑÀ�ûöí[¡B___4<+4111ƒ B4&»ví*Q¢ˆÁÞqü_}õÕŒ3–,Y¢|ü††{˜>Êdv¹˜cˆìÑ­‹æ‰å¹FÿþýXö‘‡>^ÍÀ1eäì\ C §Ï_Ö­]æì7oß�328$tÕÚõ¨êå˕ݳïÀö�{†þ@+—²¸úÇ¢½Ì ¸ªmlXì C;ž�îÁ§¯%²t½=i²i-òá,èìyÊ7§‡R/Ý«ý©a�­ò'tWòê—å&iõô6Ô¯®hé1FMúoùjò:µk ‘* u:¡ÍŠ ãie—”¼ÄUHœCê—Е˜ØXuë¥[[[…fäÎÅe-Y¢ÄÅËWúôì;ê“é:0(hÉŸÿ¢NÂS·ÿàáÙ?}off†~áïK7ª¯§§?ï—ß¾�4±\Ù2H|åÚ ØQ‡K”(^¼˜Àp,CûAqmÙ¶{÷ìÆsÞ´u;¶òõõ?~òÌ/ófª[j¶-d¶ïÀ¡{÷�5LÃ) ÷ °-²vÂBÏC“·mÓ²­“£†pH'ÞYYJgh§¤¤ü¶x™#T¾½ý¯¿/™0î ¾pÀÛ·ïvï=€›v.=¦×²yS•yJè¸y{ü˜Q©T±b»¶­à¡ýyÎL\¯gÏ_âhŸ={Q«æ ÀdCŸ ›¶º”v>áôö¨Ï ò8—*yóÖˆdØÑš6nØT6ÍF6O �Ë!ŒTòœ·ï|à*aDÞñôéS¨»áÇcØzúôéþýûÃÃÔ/~ ÆW8�öìÙw�ò樜[ïß¿•ÊÕÕ•+aŒ†‡ |àÀäŒæƒàÜÀ»a¶[¹z=�ä�µ+ÿáV°D-Þ­¨!7N&r+ ȯ­(Uhàl|Y©›Í<Æsgj4^X�ù³¾|°àéy¿M›–åÊ”A õÆÍ9ó|?mŠ‹Ö+ÂpÐó¾|ù’É”¼7«V­b2Y‹û÷`Löh›¹¹9ÌXÂTgnd$†}øðáÁƒ¡Z?~¬P&П°X!P½zu´UªT�Ãy„ Ю°ɧ„ ·¦ ø�ÑV@+0†Üè41哎;Ö¬Y3ìáyóæ¡}€V>þ �ÄEñÊk`Aýæ“¥ÅÆŽ“š?Æ�S»v­… ƒïF^Œ‹`I/dS 9ÜøäÉSàÇOŸÁÏame£�““S Ùs”]:uX±z½¼¼¸RSlR´~šµtês:;äØN>g|•j`I`Z:C2$ƾòÛ:X9»ÌL;Ù o =P’�Ö‡³Ú^wÓ 2¨pÎjlD¡ÄÖÖ&P6'J™ààP{ûŒ3ûúËqë7m�ï¡x}}ý|ýüc�ö`De +Uì.>>AC€� ì¬={t½~ãÖÒ¿þ6d@ýºuPþòÝ$ÂùdqlœjH‡öm‘w >÷,ê•Â`÷èÑ£pÿBC ªÜÜV“ùJ•*…¡-¯P?s¤âá^éèñ“^ÞoøúŸ¿¤ðêµ›0-i¿ä¸Bn èš[Q E‹P¡šÓÀU›í˜}z÷2Wplb_Ù>éZKΜ»Ð¦uKnˆümñ²Ó§À�Ù³{ן]ôþý‡Òº8�O�:õßÿ]»v ö¦Í›7ÿý·ôy·’%K?~<221ðÙBêCèªÜ¬7n³Äq“fï̘VáÎåa•‹×Â46tèP§|¤öǯ€¼Îo¯•;vŒΜËW�|;ZÀµb=¦÷òÕkï7o¾1”IÇ“öîn“¿ž �RáíG ¬Èâ½ìa_hÝî'ÿÿ _¥¿èI_üŠdòç?0 `"ó/^ìÅ éÒºªVH/|ÜÜ\s.·DÝÚµ yV¬Z _¥0�ÚuÞ/¿U¬P®tFÓÂÃ#=yÚ¢YˆÛAúÆÇÇ_¹z£oï"xS÷,w^½~óÞý‡_9�èá£Çùi*122LJJbYàü¥+ýúô¬VµÊ_ß�›·½ÿàçäèÀr‘ÈÖÍÍ›ð¯úz:¯ùǧ.C½£±¾qëN&°– ?8yúl‹fM1(ïЮ ¼¾§Ïœ‡.Q¼¸Ÿ¿±bRó*.´��¾µ••–fû% 0(%%µT¦_lFdðÉ`Ü ‰ =ކ-ae¬ààà®]¥«+¬}%ÿðóçÏÛ·o�êONÞN ÆP¬A½º;wï›:y¢‰‰‰¼çvÿÁÃ'N�®Å»Õå&ÿS&r+:hXç?1™c–åê²Ux<8× .'§Æ_¼| ÌõpPHˆf Y,›bÀd3bbb` …ÇUúD̆ <~êÔ©ÐÃãÇ�‡ïtúôé\à^~ðà�ðJK:køÆ!8›6mzûöí+W®,^¼˜e8Œ}ûöuèÐáÙ³gpö6ŒÉëׯq"ð-·jÕjÑ¢E>D?6ôü–-[T¿–pÑëV©b>yîÔ®]«víÚ…u t\|¼Ÿct!ï.’¾p§fõ=û–-S†Ç»»¹;qêÙó¸:W®Ýxøèñ×_Ž“¿¾‚”í`VfSÚ‡øô4––~%> ›ÿ‰Ã%¤îþEØHOÉäÕ/Ë7�&2�©© dg@@à›7ïtÙNêìņ ë'eon‹ÃoÛ±ûÛé?Âlmm ß/Ôïó¯®^»¡yÕk(Õ]{ö;ØÛUöpÇð7(øcß\³zµ›·=kT¯QýèñS˜à„D¯Œ:T´é°ù ‹`)‡ðÆÍÛýýà,}ûÎç¯W,[¼P§ÆËÊÒ"88�¡ƒLŸ1«iã†Ú,’‘iplè«°Ga2Î}ïþƒÛ·EÚS6÷{ûÎ=Íš4Òét:x&àa@}ïŠPhÇOž©\ÙÃÈÐðБc ë×Ó°Œ.nŸ*U!Yá'¸û¾ùö{ Ùƒ^œ ¼Ä¸X÷î?:hÀ?ËW}óÕø¿ÿ[9nôH /ŠÓž;wï)Ì#…9ÀÜÜŒ?¤­\huk+®jžË÷ZÁ{F¿€�².¹7“?C`öR°D†vü¤Üî) m òü%ÀhÄNž>+ÿ¢/KK † Wqï÷éÕ�/qŸk¹½õñ+©ªû(ˆ¤¥¥EÇÆÛÙh2Šñ%©–_Ö£Òü8nXD”¥¹©¼‘N›=Ê#¼úˆ/ožá*Ð {îPÍ]­J~[¼ gLŸÂ¿¢?òñù0Î�òivíÝéòÕÿþZ’‰Ê€v¦g…5##""`xR0k*ßÑ<ª¸lÙ²9avD¹ÁÙ«ü¬„‘àhÒ¨<þ\�K†w(¯¡a1F9`„«ÎFÞ²·³ÈÛf'..^~ a®qGóÂDÝ€ícKè“_#îFšˆÒÒR™¼œÔÓèÍ:!åG›ÚCí« AEâ§ÃkK~hNÕ `œdLL\¢$©˜“=#ˆK`P(n=k+ ¾�üOùM«Š.â Sb¨µ©Ð;¢‘B{…xùHöà)2Юӊ‹�7Ëì;œ™LøÁšk®BˆÒ¤¤dxb…´f‰‰“Œ×TϡРl›–ž¦°Ì.bBbâÉSgoßñœõãwêž^æÝŠšÏ S˜G—”ð‚ßþèÖ¥£Êt‘&²N||üÛwï?·"¤l&4ps+j˜}’»ìÓôcíßH”E õ+<„Œ]c�®ÿœs8$4lÎüåÊ–�¹–Ó¨¨è“gΞ8y}1_ —È'�Î5„ �”Ol }ü}ÐK›D½4é;�¥Ž_=ãtý„èˆß�šµ¯*ú„¾ ==½|rRª0“5[8±�ÐHSSc낺¼QĉˆŒ†§˜“¿÷~-˜ ¼ß¼Õ¼žv¡,€á‡ÈWù,ÀDÎÁß(Þ¾mk–h“[ÀþÄ/¼Ž|²6ï"ʺXW²Q¿xùŠk`”°‰‰ÉÖí»^{yóSS“~}z‘úÍo�Î5„Åœ¹Bä~`à“¹>üñé„ïSb�¬´È¢�‰ó(Ûª.&Ö\úâDø \ï, Ö-ÃýÔ6Ö‘1piXYYÐ\h¢‘�(‰ŠŠIMM³·³VöýDA$OÔ¯JrèÑb‚ÐLvIߜȭ�Áý½9´äU>Ä­’ëÆµ+ ƒ…¯LötÉ{h‘�s33…%DDXÃ÷P¶ø ¡;»X£™r¯!À¯Ÿ¿,Ì|È@Šíí¬âCBÂ%Y[– r#CC Xl�ùíG˜ 2�µ•Uxx„­­M†)‘ ‰ADDy]âÒ¥�uzéAnøpšƒ ~áÚå‚‘?Ì>éG®�…¿ùÇñ+ éÁ<áae3S¸ÕM–&ˆ|ˆpæõ+$%%+<ŽKùŸ’%Š?}þ‚Iß«ICý†GDTvwSˆGµGåg…ÙSÖ)b1­€]øÁ…¦¥Î ‚ ˜œû—}c£yLMMåo¡OûÜ,¯�åg>çœ�æpO7 `¢¡'ËŠEq²uªA(LMM!kýü¼¼ßhHß/’™*-™&­ö…E.¢=12Ç'$X‰u~ÙQàÀ…Æå¦ DAì“fŸû�t¢¼xTðýŒ)ÐüÐIýŽü6j151ŽŒŠ¦%刂dmÅ åY¦@µ·¶Ì䲨ù ÞššEDÆXY’.üDÇÄÙX[ä+Cj�;&9%Uœ32�­Ê7 äþÅbQB¢„–­) àBk?G¶S®¾€7s¤¦¦åó9S‚/Wþy`y�¨÷9,ÿ È™6˜CP‚È"ðýŠƒ‚ÜíA PáQí ÍÄt…b‘cëаH{;kF^p‰q¡Å²'ÜX¡@V{ $Р晳�:�­È@ñ�£<Ù#LT0º™;0¢°ƒ mld¨ÍŠ4&Æâää–KÀ¡æÛfG~"´| ûô®`yÅ›oÝ¿Lúº&‚ rÉ,-Ì’““ APÕQáQí Óê©8s3“Ô´T$FRpqq‰q¡ Ù¿p—á¼à7cÙ 2D¶*í\¹¹ÇOs4Œ¡s""£Q¨Á%Æ…ÆMšá ž@,6HKg¢|m�M”$Å'$âP3<©:_UŒLŸT>¡ 6•$€ ‚ B7™$8¸Qð‘—UqH§ üå­Ébn,£²Êý=ò“ï”î͇f ˆòsÅÈôI™ƒ0AA茞ܫ QX("£ÏÜù¹¼GyÕM>2]‘òsÅ é››ä™öõõûó¯ånNNŽÚ·�Óÿð‘ã¡¡a††âZ5k žI—�;~âtPP°››k›Ö-…mÎ_¸Ü¹Sû;ž÷?~Ê#G  ÓÎÛw>.\NNNn×¶uÙ².—¯\óòzÃ8::téÜ�ADöA£‚ȟнI¨„*‘g³Ì#"£œœš4nøþý‡“'Ï"æÉÓg ê×õðpß´e{t´týú­ÛvŠ »uíôôé‹ë×o ÛBß>{ölëäèØ¸q|P›7lØR«fõfM¯Y»:Ùµbüôâå+ü­V­ #‚ ‚ ‚ Š*y9ºtigW× †††G��ä1eÊ”655½qóvXX„žž~HH踱£˜Ì»ûߊÕ�ÕWΤDÉâ•\+òð“§Ï¡rkÔ¨†ð°¡ƒâŠsÂÇP,ÒAAAE“¼À—/_³°°xüøiË–ÍxÌ–­;ÍÌL]\œ}àÝuräñVV–±1±*39sæü�;wÍÍÍ ìæààÀãÝÜ\AAAA|"3øú�,YÆÃ�6œ6u ËåË—«RÙ½Eó&ðúò˜¡CÜðèýûúúú%KG@"‘½yûÎÑQ*†prtH”HDb1ߤmÛV5e._PÚ¹ÔÕk7š7k,;È[®+ØÛÛ1‚ ‚ ‚ ‚ÈœîÕ»_£F yb¸X‰¥û÷í†f:R²dñÒ¥�"5¬éÒU_?ÿR%KôìÙíÏ¿—[YZÅÆÆŽ>¿FFFíÞ½?--­u«æ<ýñã§®^½ŽÀ—Æxx¸=}öü¯¿WˆD&&& ÔcAA‘ŸHJaiéziiL_Ÿ¥§³Ôt&6`qILO/-=M_¤Ÿž”ªg —žÆôLÄ,>1ÝÄX/95==-ˆôX|²ž©(=9ýczC„S™�>Ò0#‘4C}–’&Ý‘Xœ®ÏôDé†,5•‰ ¯']Y/ÝXÄâSôô� czibÑÇ¥¡$Ɉÿt‘�^6½¼™ ò:/Å èÿAˆéÕ§ßõë7IÌ�nÔ¨A&T±8¼„„ÁE %zzzFF†ê6INN†B†ß˜„F^{û¸8g¹HXxÔƒ'¯?ø3‚ ‚ ‚(Ú8—p¬Q¥¢�­ËE²Aƒ?–,C¼bÊë7’D¾"÷ðÆ�ÇÔ®\¾LI±˜^ÁMAE”3Ïôƒ£#Ûz¤9Z2‚(:$'§x¿ó»y÷i×v�sSgÏ(\ö°â“ÀÅJ8CgÝ L0¦ .M›ú­r<þ*Ì>È·À÷ õëVÑ…AADÑ!>0Æ ¹u³:,·ÈÒ{€�?•‹À¬Ùs§NûŽÉD/"Ad7,YöÇ’¥ŸÇ,•N¿Wšz�oÁ½ ß/#‚ ‚ B†Ç¹üx`–<ÀT2¦îIDAT©ii<­IÙ|¼Ó¦Nák�s?0Ô/¾"RÙ-œŸ¡™ÏAA!�ûÃã,y€*UrŇe//¯ïgüËòšM›6oÛ¾�C‡�Ÿð•r‚S§Ï,ùô¨ INN2tÄå+WXÎàïï�r a…]®�eÒ·@ª_‚ "§ÑS#‚ YÀú7ÿrÂx|XðØ´ykbb"ËkÎ_¸xéÒe’’’âãã• »ÿþÁÇ5äðôÙ³I“§ÄÄHÅ|ZZZ|B|rR2ËÂÂÃQnQQ‘Z¦—?¶‡œ&õKA(¢¯¯/’!–ƒÇÐë\‚ ²oKþò†—ÿe„,h§N ñ:Ï}ûöÁ‡éŽ¿Ÿÿ®Ý{gÍüÉÂÂÜÈÈhÿÞÝ,ß l¬ÂE¯ì%[´¸A¡/¾Â– {´?°®oÄ ‚(jðÙ4úúÿ÷žò–2˜ÿ„¯ÊÍ,OÃòÉó&7{¦@ lX·¦SÇZ&þðáÃð£Ü+Wëݧÿ‡¾B|Ttô×ßL®Y«n“¦-æÏÿ%55•Ç?zôxð�anîUZµn·sçGUyõêµö:U¨èÖºMûӧϨÜÑŽ�»Z¶j›œœÂ¿NüzÒ?ÎDàŽ§g×n=°mÓf-6mÚ¬x.6õìÝ—‡/]¾Ò½G/w�ª“&+ïÎUÎáØ±ã|=°�º,]ö�7;~â$“Õ€E‹ÿhÖ¢UµêµÆ�ÿ2$$”GÖoÐxûŽ�}ú¨R­Æ´éß15¨;ÙÇOž¶m×%‰rKNþxxƱ¡¸ ŒãTylÚ”^~˜Ô/ADQ#&&æÐáÃ12x@9 FfZÝ¿„kÖ¬A¤èÊÎaM“&‚Ð o'¿þúë3gÎ1ïÞ½›9s&ׯ¢Ï1ø„²ëXÿ,/Èä^ù‹•?VÖV·nßF€¯W¤áH°ÅŽ5æ��Ï?-8°ÿâÅK„Ÿ† ñüù‹ÿùkæÌwíÙ;{ÎrTÛ6m®^½Ô«g�ŸfÍVùqófM_¼|yã¦t¹à˜˜ØÃ‡�4nÔzj°F�‡íïÓ§÷÷?üôâÅKù­¢¢£üüü˜L¨�=ÖÞÞ~íšU...>Ie•9@›Mœø¥´ˆ/Ð_ªŸß¿';ªß-^»výô©ß®Y½ÒÏÏÐà!))RMîóþýßÿ;~ܘùóæB*oÛº]e‰i8Ù-[·Í›;gÚÔ){÷íß(;¼ /}õÕ×íڵݹc[‰%† þî��±iYzA‘眿paûÎ=ø+ ÚØÃÃcé' Ääž VØD€æHAh¼wÛ¶m á-ª¼;Wañè[.€yË¿ÊdzþÿýbÝzu¡qØ'ŽŸlÖ´é¹óçMLL  aù½|ñ<“]¶R%K.ümÑãÇ�ÝÜ*)êÅK—SRS—ÿ÷�‘‘QãÆ�îÝ»ïóއɖ,S•CŸ²eÊ ²Jehfù|öìÝÿå—ã»ví‚ðâE¿µlÝöå«Wîîø:bİ6mZ#pùò•3çÎM�:%,,ìþý|CÔ’V­Zª �AÛÊ�ÿ)..nÞ¼yÝ»w?räHrrò˜1c^¾|yúôi$›0aÆ ,LÌ#‚Èç ©ìҥˆ ¦OŸ®`U|ôèÑ¡C‡ �a…>|84תU«Z·n]¡B__ßÿýwÁ‚н.\€¬ëܹs^M½ÉŒžÆ@ÿ~�LC&Þ^ÞøëêZ‘‘F‡„¿+Tà_Q^‘QQ�AA¯^½*íì õËã[4oæîîfei Gñ™3ç*W­Ñ²UÛí;vâ'¸U¿üêkáóîí;DöíÓûä©ÓèØNœ8 jhhˆÈ+V5mÞ²ly×&ÍZàkjªê8y{{»”. õ«p¨ÚçÀd]/ļÜy•—�ì+þÕÉɉJ”(ÎÝÅÏž=Ná›ÉÒ’Ty²Ÿ6wä�bÅŠ%&Jx1Vø´/Ô³reËûÐ�!AAä+,,,ºwëf!ƒÔ¥„FwÿÛo¿}óÍ7{a˜ÅdÆñààà;wîŒ5ÊÅÅåï¿ÿŽŽŽž4i’H$Ú¿?#‚ ´¦E‹hT/_¾,´víÚ^½zýú믦¦¦kÖ¬a2mòâÅ ž?UŤ2癳³3Ë»õòfâ5(]º4“Î.þøè/¿Yu›—)SF(C&u¤ûËïK86í3$‚ ˆ<äêÕ«ÃGŒº*ƒÔ¥„†¸cÇŽpí¢+\·n�ðS§N�\]][µj߯_?„ëׯ$[zC�ž&‚Ð4˜#GŽ„õ0<<\ˆ|úôi­Zµ*W®lnn>hР'OžÀ+éîîîååÅd._.†ß¼yƒæ—å]Ûg.ÐR¥JΙ7…rÇÓóŸÿ–óøòåËW(_þ— Ñi=þâï¿ÿmÓºµ¾¾~³¦MSÓÒ~þeAXXØÙ³ç5nvïþý7oß¶kßñôé3%K–lÞ¢6‡«]åîp%:vhÿÓÌÙ6¶6õêI'W'È^¹$64„møÏ¿þNù´Ô–2Mš4NLLœ=gißþ§OŸæñêrÀÁ0éë‚O+VÓÄ`€}Z³”Oì‹Å‚�› ‚Ð''§öíÛoÚ´Iˆ�Àqtü8)U$YZZ†„„”+WnK4³�ÊÍš5ƒ†*±µµ566N—Áò‚<{_Êeã†u'NjÒ¬%¤à#GÌÿe“YvîØ:áˉ 6�¶„gòÏeÒ§�Ë”qY·fÕ¬ÙsW¬\ ŸðW_Mhß®-·kÛvü—Ñ·Ι5S~~²pü2lÊäo¸±¡IãF=ºw99™Á"r‡3Ïôƒ£#Ûz¤9Z2‚ÈŸ@¬ñŘЖÎ�;×ÎÎŽÉJ�5kVÉ’%ÑŠúøø,]ºtöìÙøéÔ©Sžžž?ýôÒ?~"¹G�uëÖEûüøñã!C†@C�À:É[Ý\$ç™XÀÒRõ:¦¦¦*ã­¬¬bp=2­ßÔíEõ®--µÏAÝ‹­`É´úeºŸ¬Êc–?¶¬”AAäüíG<ÌÝ»uSHÃ'ÔuëÖ c²É“'£ƒƒçáÛo¿Õœ³ò›<‚ ˆ A³éììܵk×{÷îá«‹‹KÏž=ùåÄÛØØ@'ódnnn{÷îå^ßÊ•+ÃìX¡B…ôO°¼€Vü'Š.ä&‚((héÞ?‰ôð-X[[k“9‡ ¾‚ÈiÈL8ЮÂ�'LÚå­¥ÊU¬$ ŸËKQ™or…%Šœ˜ ‚ B3üíG<¬ìûå`,eðé� ‚<æ#0Œ´ôõõyæñˆá¯ÿ¥—Ah€ SRRx+Š¿BËÉU® u…EŽø_žXh~yÃËa–G�&ˆìäÕkéRï®+0‚ "wáƒ3•ü„!—Â_½AÚƒVᯀ† ³�å^-—ß  Ïöquž½‰ GŽ�øcÙ?/_½fAD‘® öÉ¡ü— ‚È"éêaYkx1®æî¥l„<À‘=@ý9v²kç];wdAAAd;[ÛJ®¹o)ýÀ$€ " õKAAÙ ×½Ù«�IDVѬ~_¿ñ½y÷IjªôQ‡�;�è7¨]¥b¹RŒ ‚ ‚ Š*¯ßúÞôÌx�,h`;;[ø„Y–¡g€ "«Tr­¨áWAýrF #‚ ‚ ˆ"Œ ~9’ÃÂÂYv@`‚È*°KÁý '0ÂÊN`ù[] AAA)´$¿zí÷/N4š ò\÷ªÓÀAAAèJ¶«_F˜ ² A«»E;µnˆ¿ÇÏÝ`AAAÈP7HÎ õËHD6B¾_‚ ‚ ‚Èììl5¬Ÿ- _ÉC˜ ² ˜|¿AA¡€ºAr¶K_­MAAA ²Ç|ýºTµ7jÔ�¡z˜ ‚ ‚ ÈåAr6x€ÿX²´WŸ~ø À‚ ‚ ‚ "_’-xÙ´©SöïÝ�wç11±+W­NLLdùï7o¶ïØÉâ0k‘û— ‚ ‚ äÉåAr&0œ½üÇ/Ôï´©ß6jÔŸë7nðHm¼Áõ4.V¹”s™’¥\êÖo8ã‡ccc™Ö¼óy·fíz?¦;çÏ_¸}çË2Û¶ïøðáƒÊ¯7oÞZ½zmzz:#²T-T›Ü4µAAQ8ÈŒ–Iße×Ü›tIDAToÜÄ_5üøèï´o§‘Úxƒ���¿ÿnºï‡wÞ¿]»zÕë×Þ#FŽfZSµJ•»wn–/WŽé”êñã'X–ùå—_Ÿ?¡òëàA/^8«§§Çˆl…[[`d)(ØÀ@? ‚ ‚(RäÕ 9“û€Ù¿w7ÿ¤¥§ýðãL|"¹7XËÜôõõ«W¯6iÒÄ7nÄÄÄúúú6hØäÂ…‹-Z¶2tDFFNšümÍZu›µhµð·ßÓÒÒ„dHÏ39|øH÷½*W­1áˉ��<Ø%K–!Ÿ*ÕjŒÿeDD" |áâ¥íÛwbó·oß)ÌÊU«5nææ^eøˆQØ�ÄLùvZõµÛwì¼uÛvÄ +l=mú÷;uUøŠ'NžsssÄ›šš4äÓaqührr‘ö?yútÍšu(ÜIÎ¥JÙÙÙAÃâÀ/}þç…×ÿŸ/]Ò!4<:>A¢�¦@ÇÊ“*¬ñT(ž ¡ÅS!äa|:xŒû˜*>ø‡PáS<+z…Ïr—Ì¿XƒçMKéëçç÷û¢Åë7lHIN‰ˆŒ¬VµÊ?ÿ)üêêZ‘ \+VàêÔ®] Þ]//oss3!ñÙsç|ÞûÀÇË¿FDD<}òÔÞÎ6>>¾~ýz<ÒÖÖvÞÜ9š©s§Ž+V¬lß¡SÇŽæÇðøÉ“ظ¸ß~_,œøÓgÏ˜Ž¸Vtå�Ê;d`d©ÌÕ/¨_¯®�¸ÿ¾“'ûìùó6­ZuíÚÙÞÞžaÒRÓx@ïs ,„«W¯Æ‚ ‚ ‚ 2B/]÷eŠ¡…ÅŸùh8�éò•½{vÂÌðIªòéÒµ‡ØPüíäI—)ãâììÌãß¾}×°qÓ7^/áÅ×µëÖ:tøÈáƒü×”””2e+;zØÎζN½†/Ÿ?�6.V¹]Û6 4ài {›6kbanѺm{äcll¬°ë/F�uv.5wÎl壂×wßþçÎ�¿|åê—ãÇÍšõÓšµëfÍž;gÖL!s“ ÆÁKìîQõ¯?—¶k×–ÿ$ÿuÏÞ}Ë—¯¼pþŒÂéœëååµjÕ 8œñ9|þs†ÕL¯½}\œ‹³ÜÂçC#‚ ‚ BÈÑ2¹8&ÏŒøú�²YÐß" ¹ Ñ{ì˜tE寿þ _™ÌÌÁÒ¬L K7nÔ´iÍ»«R¹òâÅKàõå³£_¼|‰¿P‰!!!Bš† 4oÞì‹Q#ùW¨z¨SHe±Hôèñãzu¥ÎÕ¤¤¤ã'N¶mÓZ:“™±ÔO~EìììÆŽ�ÏÑ£ÇÆOøêûï§Wöð@ä¸qcôõõåóçáÔ´ÏòQøª�êÕªAÜ>zô¸ZµªøºKæ¨X±âŒï¿ÃçÇŸf­\¹Š°YW¿¹O”D¯Z…bŒÐ�Øø¤�ȸ²%l¡#Ñq’ðèø2Å©è2C‚$Ù78º¢³#tç�_¸“­¹™‰!#tÏÔXdkiÊINIõò w/“Û3* ï"Pñ,ÍŒ¡;ÏÞ†¸–¶ÑË>tç‘W ËE2¿ÿèëé/üõ|"³qi¢êÕ«9::@FDDøø¼ÿᇟºtéldôÙ�Ù·Oï¥Ëþºãé Ñ GtùŠn<‰D½{÷úñÇYoÞ¾�ŒŒœ3gÞ¢Ep7¬«kÅ[·nÁéšö¹^…§·k·|*õ‡¾%J–044¬Y³†µ•ܶ2ÆŒ�0tØG¥�|Ξ=£ò«f<<܇ Úàà©Ó¾>bÔÝ»÷„ŸÚ¶ë0sÖ‰DÙX¶lYFÈQÕ/AAAyN¦°l,i a|þXºŒÇó÷ñH>Aše&&&[6ozþüEõµ[¶nëèè¸lé i 0rø°/¾[ºLy¸mçÏ›S£FuÄÿ¶pAÅŠÚµëX¹Jõ›·n¯_·†{n{õì!‰kÕ®çåå-ŸÏ7_O477¯Z­fEW÷í;w®\þßÇزññã'8�*Õ£¢"…3ú‹7n6lÜTå× Áqþ¹l‰¹¹YófÍV¯Z!Ä/úý·K—/»ºU®ä^%>>þÇf0â|�qR¿AAAèJfž–GxÜê÷�%Ëý?°RP,6‹?NÛ†$îЩËë—Ïà¤Ò„……ÙÚÚ ó“9p '$$ZX˜+d(L«V@"%ÉÒÒB!>..9s²†|Ôe«|:»ví�7ÛÁAºÆ\Ç_Œ÷òùá‰ex’�Œ |ÝD6’ËÏ?ò ¤)Йƒ¦@gš�h tV )ÐY�¦@gš�Eh tV )Й&—É™_šÃ½ÁÐÀs·pÎ!¯<ïÝ»ÿÓÌÙ-[4—W¿Lö¯ò†"‘HYýu2ÕH†r<x8Ã|´Q¿Lv:gΞ]»n}‡öíBBCÏœ9ûå„qòëu)+p‚(š˜™š™hu[ X˜ZÐ8&³˜‰+”²eD¦ ‹UV(åh™––%ÿD‘E,2 õ›\`0M§º—I<ÊRÝ+dÕÌáOüææ”Ô‡ùùû·hÞLÙ[€HKK;|äè“'OÍÍÍêÕ­KszsòAADޒ˃äìÀQ!LAAyK.’i’:AAAQ$ Lù…””ù÷rÅÆÆ&$$¨Kœžž.‘Hägp qXX˜6é±#‰¹< {Â8ߘ˜ �"ƒ§L–#Mé…ÛñññÈJ>iä÷UÐQ8„ãââ4¤ªSjjª|Ñ)”6’©ü aåÄ�JOùÜñU]zäŽBR šê—éº'|E)ß³ܹ(+ù¦ºÄŽ,]bbbTT”ºÄhñ„Š'€˜ÂÔîiÙ_¨lÇˆŽŽV—³|ÅÓÜH\ÎEe…aê{¤×p'*×´ÂTñ˜.7¯Ê6_];¦²ΫOËa'Ò#FùsÔp³$%%ñœå·ù§mÏê"XAdtÒ'NœxöìYÛ¶m›4i‚^g÷îÝvvvhh0ú9r¤¾¾þ«W¯J”(an.]Î -ÈÖ­[=zôã�?ÚÚÚ¢MÙ³g�±±±X, éׯŸ¥¥¥†ô/dð]_½zuÞ¼yVVV,çñòòÂQŽ5 _q<¡¡¡fffÐí•+WvqqÁˆ$""¢dÉ’<}@@ÀÅ‹íííQ,(‡§OŸòøwïÞÕ¯_¿|ùò>>>Ø íï¹sç,,,À8»C‡zzz÷ïßûö-Ê¡}ûö¬€ƒ~TþtpšW®\Á9âr£›5k†x”!bpqù&eÔ­[×ÝÝýǾ¾¾<e8dȤÊyß¾}B�תU‹¯ª€ sþüy”sÿþýQ°¬ £Mé¡|p»™˜˜0¥sGzTB###2*R ¥�d¨ÒÖÖÖ¸ïÜÜÜP'qsC FÈvèС¬ “ꇝ·nÝ  Qddd•*UPÙ„ô!¡lñÊJ$5jÔ-ÀÝ»wq_׬Y‰YA&‹E‡2¹páê$J µQH�¶ññãÇh·Q¶ˆ¯W¯ÏˆÆÍàðáÃYG§þB¹óöö~ýú5îM”Êýˆ�^¹â)7’ê=-( EBõíԷo_‚r…ACÇ;PŒ.”K…vóæMÔ4ô¼eË–uuuUè�jšÂÅ*èètób¶k×®råÊ1Ù"¸è# “åÛ1¡è. ß—Bƒ™kè4ìÄâ–qvvƆø‹s|ÿþýÙ³gq³Ì˜1ÃÁÁÁßßé‹û8�}(ªG—.]6lˆ³Féñx¤ïܹs�:uX>€0Aä=h7n,ô¸mcð͵ëܹsѼb„æm�LöŠY`”$Ë�&ˆ¼‡wB<à_¹îرcèŸÐÇð> þ+×Þ½{ÃyËcÐg£eùý÷ßÑL#«#F ÝÑ�^àèѣݻwg¹\dò_ÑÁøùù¡€%c;ÄXËà¿ÂüŒ”7µòÀ€®6“®<߈ÉÞ[Æ›]tK‰‰‰üMà�"Èœ àÛ—?t3è}áǹa^yøè�ɺjŒöºvíŠNH!)/1¡œ1¸AW½ÿ~ÞßÃyŽÇå@Îè§—{�F›Òƒ�žÿª|îHƒ‘ Š[¡¸àar¥ ë8 ´+V¬(ìÃAìã VÀÉbÝÃpU ­nRÜž|¡�VÁù‰FTØÂðݱ‚O‹MŒŒ¡4КqïŠ|züŠº UŒ40}òHЂŽöý…r;–.ƒwHƒª%Ÿ^¹â oÐÉ‚lÄò_•+ *!?S•½Ê„—’¡q Ë÷ÎÊ5MábttºyaSÀ –”„„¸j×®íèèÈäÚ1¡è.ІÎ:Ði؉[^îó‡“n�¬½8) ,'NœxéÒ%…=‡ ÉÍïÊü=Lùnx{öì™Â#pröìÙS>Í.dá¬Y³æÌ™ãâóçÏ5§çÀ�Š¿°\²¼Ãbœ#ì£0ÒËÇ£‘åVU…ôè¡qv*køéôéÓh¯sß’š'˜Ê€ýUáÉg(7ô²Êï‡ã%ìàðÙ+ ¡Ó�ÖÙÁƒ£[âö�7ÐK±B�ºÒS>wŒá€+Fî9WÎ 7)’É `Ü�îîîZ¾¾À¡}ÝÃÍX§N�]»váÞį‚êà`¨$X¸�²Ð<÷«틎·ÿ�%’ÂŒa·BVˆAü…—†}š´™Oææêú åv uIèPǪ–ºŠ§²‘,4(T•½FB)`Q¨i*Qwó¢Ha”ïׯߠAƒp#Ck™¡ºÎ:Q7ìDÓÝ¥K—ï¾ûnÊ”);vìÐ�-Õ«WW~r #4t¯p#³| `‚ÈwðEž4h0`À^¿~�HØn¡ ¡ ù¼a,~öìY¨_´Mhõd`Ø w�æô|/°ÒuîÜ™å8M{{{´•p¸yzz2ÙÄ!Þûâà1Ö¹}û6ä.%ð`óM E*UªÄ-ˆh …Ο:u ~¼Â:v‘‡¯Ìë@½zõÐ}r{,Ð!!!LVtøEë5 Sl°4ó)L®œ¡Ð7;2DmA×þAr@æa 7Y!Beéyyyá¾Pyî¾¾¾ÀU³KÓ¦M1òcr¥ à€ý^°”3Ù€#yá uå¨víÚñ9�Bz8U„5ŠPà…Æu©]‹�9|q/"=Zu^8Bz4žfff•+WF©"+l‹n› Ò"“ÄÄć²Â…†þB¹C w3Ù´þ˜��^]Å“o$ ÊFè@•Kþ´0ßÍ ü�Béúš¦Œæ›×ÉÉ Ëd% Ç8/@y„¢S@]g�'hv"€Â-¼8Y•«�¾{÷ŽVNž<)‘H0à|ùò%ºKÁ‹‡0n.ØòX¾�0Aä;`';rä“é:ŒË¹ ­$Z[Œ »uëf!ƒtÑoap •È;{4Íü) éñ+FùèÕø² yŽvçÎ�è>™¬å礮®®8 tº8~È]Þh¢«@‡-´l�=âÓa„ôçÎ�CÎd­"wÖ!:^{/ÿH!@s¡ÜŽ!àèèÈ-§¸»QýäÓ«¬x �d!C¹Â¨ÊÒCÿËWßÀV¼|„Ò+Ü5M%šo^h×k×®1™oöP…y.L®èPÙ`æ†�àîã–È{ªò³i¨-üá(†ç…Á?5&­]¹r¥eË–,?AÏD¾£ðµk×.Z´==¬nüQ“ñãÇó_…9$h›`®C+ƒa%¬’?ÿü3Úgggþ4ކô,¸!-`Èß³gÌÒèQ`–f²N—«waò3:Xy$ÐÆ‚��2ÙCÎÀ666¼ÃÆù çJp¦Ïmß¾�[:vìˆÈÚµkó_14á k`ÅGb&»ôÂ:±L®œaAÍA߆„Ò+_¾<:6a†ù«W¯P— ™�SYz½ |îP .óô(”6:u öïßÏd>“îÝ»c|‰ae¿~ýXa$u÷ìîÝ»¹M�¯8 ¤Ç8‰W? �àa(¬3Æ9™(: µ®” ùôhÉáiÁm çwßÙÉà¿Âoƒbg…Íý…r;†ÈÆ�:tE�m{ôè!Ÿ^eÅSh$ ÊFè@qúÊ¥—&ä„1´P×®]Ùç¥WˆkšJ4ß¼p$Àñ€^e…YyJ³Pt ¨¼ëó ÍÃNœòòåË/_¾ =kk«ªU*·jÑ ùìÚ³?%%eðÀ~ü§ôôôEKþlÖ¤qÃõvìÞûòåk!w·~}z2‚ ‚ ‚ ‚�‘|ýÆ­k×oöêѵb…ò!¡a‡�Û¹gß°! ô¥þd33³‰_ŽMKMõò~{àБÒÎ¥ÜÝ*!~ïþƒ•=ÜÛ´n™š’²ÿà‘c'NažaûvmÜ+¹ò°‰‰ @÷~1r$î›7ï9fcm]«fu(jl›””dhhˆ4>ï?@Ú°A½ åË:ØÛ—6-%äáëëÇÃŽŽŽ††bù=¦¥¥…††•/WaüäZ±ü‹—¯áLÆ×ç/_6¨WWH'äcemýÌ‚ ‚Èk|ÞÐ×Ósv.ÅŠ0aŒ„€��­s©’Œ Táó!ÀŹ8#r˜t©©©ø›ab===xæôd0"[á"%%EËô"‘(ëBg…¿V–Vò‘ÖVV‘Â׃‡Ž¦³tHåjU«‘ƒú÷=ñò…‹—O�>[ÌɱK玥J–à?]¹vãÚ�[<z"Q’8°_ù”ññ B>F†FÂâXAAä �»/_yÁnΤs¸*hV¿ðŠü»|5ãÇŽÂ`Êyɲ.˜[@õ¸zý&„“‚ú@äØÑ#~Y¸£^…¹Ðù­þúw%¿‚êÀ•�6åkåøþ}zU¯þÑW�ƒÇ¸ö—¹3™Ì,¤ññyþÂ¥LàüÃé³,-,òV;qÞu¨)·J®>ï?¬^·ÑP,æs0 8ä ”ìíìÕ%€ Aå„Rs>° +H/¦;kÖmª[§f¯Ý ßÖoÚºuÇîo'}Å>¯E<¦`qïþX´ÀLv!൷×x!ÒR!ƒ5ç“é ‘\§V͘˜Øs.:r ¿reËôîÙ]PÞ°.ýó_&óCývê µOÀ4دOOX,.\ºÝokkƒ6QÈðì¹ øð0°üî*”/W¼x± ¯ ìÿQî¢K@í,U²¤¥¥…|Êç/^âÃÃô`‚ ‚È@ýþÇŸQÑÑ*5’<ž÷î§¥§ 2€{{úöîòöí»jU«¤¤¤ìܽïÑã§]4oÖ˜ÏSÉ£ÇO:á\ªÔÈaƒíìlŸ<}~øèñV-›í?pÄܼsÇvµkÖ@J_?XØýŠ+6x@_.SÏž¿xùÊõ´´ÔÆ�dÑÇrôøÉvm[ñlOŸ=�¿íÚ´b2WFMã'$@2¬¡ä“)jBB"JéÉÓg†F†(¢öm[#ò¯Vxx¸Á?cffÊRÓ ÇùK=Ô�œUÆ[X˜ÛÛÙ _çÿºÇàèðqà{Ûó.\qññ?ΞO8Æ�OŸ¿8zìdpHhÕ*ƒú÷54óËW¿n�ã'O5a †�Ê; Û¹{ÿ›·oK–(Þ¥S>]CZgž<562jÕ²yKÙûG”«‡Ê#Ç!mݶ ²¿\¹2š5Áž8u:39)‡7x`?±X¼pñ2ø~ö8ôüå«QÇÀaƒJ×½­�mŸÞÝ+»»±\•¡G×.U*{ ;†Ù7oßá?¡H�Ÿ8\¾|YŒ¥m¬­…­ÂÃ#þøóŸÓ¦ðõÌ9?�>›£ÎT©âIãïعS{{û»ö"Aï^ÝêÖ®…ó]ðû’n]:žáûi“µIE $ÌuÄÈrâ—cyão/ï7_ŒŠ!û–í;­­¬Tº0Úº}7FrÐ-ûÞ±{ßÄ c$I’;ž÷0¸øèñ†�[!iœ7nÞ“:ƬO�<ñÎÝ{�£_Œ&¬Ý°{iØ Ë|ýp¨õê|´éc؇1=_oÁ5‡§ÏœGbyÿ¡†rPy¨p3‡„@%bT½qËv÷J®¥K;c´†¡j·®�\J;³L_ ¤,Ë28}Œ§Så–{u¯T Ãñ·î@#+æ,›ïÚ½K'\>\‘»ö :ˆ_>((„•¸c2ò?ËWsrüjü˜/_µnÎOßÃײ}×^oï·£G ߺ}´1,ÊÕCå¡nß±ûƒ¯/öÁŒÌùêµ÷¥Ë׆ êå¶výæ‹—¯¶mݦ“e/‡~à×z÷ÞðkõíÕãúÍÛkÖm\¶xa.,˜„K YR±âÿŸ¹…|Â�  à•«×µmÝ .Çc'Ný·bÍO3¦ ÉàdÖ ã‹ñ"CÔ%œnº½ûÁ«„[ïú�[¸ !€Ód×ñÚõ[�Ó÷î?D9ש]Ká.ØÐý҈aƒwï;€Æ�©ò⪬±—._=wáök4áÇCMMýoåZ—Ò¥&OœpåúÍW®™;s?’+W¯÷ìÞÕٹԱ㧢c¢gýøÝ+//ì´JewþVTT<œ#ÔdS5�Ýʃ4ð=ò»UÃåC†FFF:]_î„ã·]ëVЙŋ9YT�ÞY µåŸ�˜ˆ,‡�GA™ššlÛ¹ÇÂÜL˜D¼rÍú}{CèB‹áÒ ÁAµöü4¡03ðR:züT¯î]!¿!za•hP¯n†Í…†2W¸ú0/Â’(‰»tî€=fx!PhÚ\cxã3,áÜÀy’6à¬uÜ„ ‚ ˆ´ô$­Z4Ãp3ð¼*øŠ+ 0lò¼÷þ:îÙƒ“>R•™E çóMjT¯�Ǩkø�Ap(¹Uª�dzç/!€á*IIM…÷.VžìÖí»M5twsE�»÷fZó7 ²–{W }ñ·wÏnÜ,$@by¬®äQy¨�:´å3ï ôví=!]ZV¼Íš6jÞ´1Ëp1y¿}+ òñ¨T¸8;×­SKÝ&Pæø0ÙpÕ*'€®¶³µ‹Dü çk�oâÄááGŽ#(7 ýùæ#‡ Q�X~zÂËbfj ïåýŸ>{g ˜Ø u¦cöv¶‚«« àׇ�Ÿ~1b |ï�AÁLêË©ðû¯ó˜T7¦¡Þúúú3YQK'sÚÙ9É.Ù7_�癈Äbxè¡IÔ9™³Tüµ±Q1Æ~üô™ƒƒüuÃßøý�sBBBµ9¤†õë¹ãn©Pþȱ“pz!‹Ìµ· ´y‚.�Ú£lQ—®\ó~ó–WE˜*x�GƒpãÖmé‘<~ª|qUÖØ‡�ŸÀ�ÛX6-"66vó¶�¸"þ�~þþÓ¿ýÕ w�®ß|û=b¬­¥o¥Á åVIº÷¸88 q¯§AÝÉ¿'•É®)d!ô*ÓC±¡ü†ê2ÔæJ Lœ0öБc‡Žßµw?îúÁû•+[F¡  ÝCQð[ öaJpttÌßÿ®B1òŸŠ/V¢x1”®®8lÊÇÜ¥cûêÕ¤SH|Þ€�å“as�k§®Ì•¯¾¹™jôUó…€^Û !3j¸\¦#YÀAAòÞ$}==mÂòÛbÐ*Ó� DÇHuüäýC2¸sUí\:TÂxýÖmO8:äGEðŸðIžHaˆ,]1dØ��pC}{åTS÷®�0ž{ôøÉ£ÇìòÕëLæUpÊH…æêÊA•‡ )÷¸8M”˜PΫ4²‚Êu*¯}%OÏî]ªÊ&åj‰_@À;Ÿ÷ß~÷“�“ ô™ìò©S¿ 0(ÈÂÜ\XPõ$ 0&$$ cn:QW=ˆŠŠÆ]Xzê‚ àøø„»÷>{ö")9I"IR©üïÞ{]�àù§¥güN—¬k“™Q”Ÿ‡sÏÉác!Àqe(ãØ´Àüm/|š§‘‘T‡ˆÅÒK�öIòñ÷°À¦`blÌ/–<ÂSŠÐK¼(T^ܘØXå‹ÛSx;LñO Aâs…] cVŸª7tþ†ÍÛ~œ=×]˜ôÎ_3ËzL+o­žþgÉÔ °ÿg«‹%KÄ �ý^½z}àÐQ¸Xÿøígu9 nWþôÂWÙòÃW †‡åWÉBm„i>dX¾7Z9«âÅ>Ög˜!nÞödZ4Ê\óÕÏðBèëiµ¦·P,š 9fÀAAdð È¿ïW›°@É’%îÝ™ÁßÖlÚ²½nÝÚî•\1p�ŠŠâ¾ˆˆHu#ø'OŸŸ>snúÔI8Œ«×n@íðxh!þÀžtóO¯´ñp¯ôóÜ™AAÁ|jè²?Âå§W¶,¯Ê�.á`¸áªbŸüÀ‚LHœa9È?PªòP‘ >% MLŒáëcÙ FØœ½*�w·”KC £WxÀpQt]={‰�‹ƒÊâ -22ªJeø–Qgp­¹‚‚Ö‚‡íí;•ÕC K ‘È@Øõ�Ç?yzræ�Ó¡$×oÜ¢| ¨fkÖo‚O¯QÃúááá?Íþ™å ÐT8ßgÏ_pÿ“ÞÏà<1t�­­-t�Œ‹�OJN–¯l\‡Ä'$@Õ$%eÆŸ©=*/î¿+V+×X¸²qyX(|\e\Ð?ÿX(ÿ>$ègùÜpjÓ¦| 7é�[wvìÚ‹«,¬!ÿñÔ´ªéÚÊZ]K §mÓÆ ôõq #fÙßËããã?ÎVJoog+4j¢D§ßÖ¨^²nÖ93¿çÛÖ©UóÄ©³¯^{‰ D°è)ï:<"’ߌ8™ˆÍ°¹Ð¦ÌåŽ?à ‘Ît®iº4“ ïÔ"‚ ‚Ð\¿ÿñg†É ¯ŒŒ�ÖoÚ ¿†Y{÷¼íy×¹dI ¿*Uªù�È÷|áÁãcGe¤�ù@ÄÆÆ]»qKþ§½ûa@—©ŸŸÅ åáÏ\òç?÷<„ï´²‡»¾�>Ü P˜W®^ ƒpûÎ=c™#K[[¿õ Ñ‹OŸ^ÿ_: �Laauå ŸFå¡&HE—£çèIDAT¾œ¥wîÞ‹ˆŒd9Üvø°lÂÊÚ C|¸%ဂ¤÷òzóìùËÔ´´K—¯þýßJmJÏÜÌìБã¸ú7nÞFV®+ Î¸UråuV†Yó¼öòÖP=ä�8�„8züdxxÄËW^Ü]$IIÐØ¦&&¨BOŸ½Ò[[Yz{¿áKûà,à†MOK;wþËE:wlôø©;ž÷pÒµ‘¶ï6–Í2E‘Böß½ÿê Edme%x™Lj‡[¬-gÏ_`9‰Ê‹«²ÆÂ>uåÚu¸‹ƒCB…iê¥J–022:yúî\ï7oý}IxD„Â.p#9v‚j@A/ák†+*q”“©¬‡™x5±¡‘áÎÝ{�Ÿ<) {*!|¤\Á µH>=š&\Ô7Xpþüwå©Óçx<ô$Ús óÍÛvò´cŽök×oV9ÿ;y:4, Ewýæmn̰¹Ð¦Ìà7þðÁ7*:šet!“š¢í…�/yu­A&.y€ ‚ ‚ÈAþXöt>h^ÚÌÔô«q£7nÙ>gþBŒu0:Ÿ4ñK>—rä°!+׬ÿî‡ÙP ë×U· tÕª•ám˜1s.bµkÖ€€áñææfŸMÿa6Æs=»wáî Î6lÞ¾iëƒ!ûCö´mÓ208xÞ‚ßà +SÆeüè‘, téÔaóÖõêÔ–®öüé¡_öi-h1úÌùaC2­ËA@å¡vïÒ {É‘Ãkãó144üj˜ ›·�9wA:¿tP¾nóˆaƒy�A&M5¨^­ üŸ*«‡2#†þoå¤,æäÔ¨A½7oß!²Uó¦/_5iê ä_¡B9!q«–Í9u1囯ڴj��ŠÅ¢Ö-[°\¤U‹f8�»÷®Y‡úŒ À§”+[f`¿ÞÛwîE‘+æ4ñ˱øUxP¸:zîÂ¥NÚåèz]Ò·Æ(]\•5¶cû¶ïßûþ¶x™‰±1ê9ìH‰«üåøÑ7o;|ô8Š·[—N¶66 ÞÈzuk#ÿ3g¥J¾më–òë H}‰D‚sW÷zd�„ĦÈP×í=vôHœ2η6$ëø±_ðŸäk‘�Õ)00ÖCT]˜í:wj/¿÷1#‡-øíõš5i„˜:µk†¿*w]³zÕŸ] {¼Çü­c6h-3,s4Ë/^¾‚'yå¿Ë4_”¿$ISQ†ÂUyrµJ4?ˆ¡½�í@ù™×Þ>.ÎÅA‘cÀpäØÉ*•=0ðzõÚ«kçš_̉‹‹Ã€Oy­MŒ_!€36ÁÙφ06…û ‰%¿/€V4ÈmŽQP\\¼üË)˜Ì퀣ÕuYQ•¬^·Cù±£G(¿ êwõÚ�¥K—RxÕ…<êÊAábX‰>Ù;‡àîßlYZ@a4Œçn1�Àu71Qó-Vð‚!ãÞƒ‡ógÿ¨pœ�¬S¿ûiÞ¬à%Æ…–—gZ7–¹ÊãWw!PÂQQQ––\ˆ$I ì!deO¾BJ+++]k/y€ ‚ ‚È) wñ�wáÕSþÒr+35êG˵CÕ ô•RÂXJAý2ÙÂ?Ù¢~ÁÐA¶lßùËÂÅíÚ¶‚+˜Ou†Gë¶ç]ø~á«A ››e¤•£ÏœV2Ù+}9 cëL¨_¦æº+×uÕC•%©Rý2¹Sа^WNƒúì¨êMQLãY‹d°ÜBá⪫±ò:MuåÿÿüeË¡)xøôd`G‘Q‘FÆF¦&jßÁŽ”>qЬTŠdmÀVêV1P)2a³3Ȩé[¸xY€À¸1#52W(U-›‹ Ë\>C!¬îBðÃÈðB„……©¼ ‘¸Á3té+C`¢èB`‚ ˆÜ� `• _åpqÀƒÁ/Í®^¿É(bà£ëÒ©CÙ‹^Bž¬x€ ޲º�ã1UFll,{s¥³ ÿ$×W\3+¤á1Ðo�ñÒÙ$™ÔÀÙÎ;Ÿ÷öfª^®‹ÒˆˆŒ´²´Ì„PÌ"š/ŠÂÂBÑ ž”œúÿ ¡lÊ\¸ºž `¢èB˜ "w€Ï3MöêTV„A!ð—Ãùã¬ÅÚÈDÑ„pÖQV7ü<Ð]ÉÉÉ ²Eáá9”¾ÚHêÿLIM‰���‰‰ÑûS#€¹÷ÒÄÄ„OÏÎ'ê7ߢáB¤¤¤üÿB˜Jß!¬§¯—’,»±Ÿ]•`C¸¯3w!2Àqñ‰1±ñÉ)©Œ¤2Q ÐÓ‹ ,ÌMÍL3˜ÔA˜ ‚ ¢�¡Rw1™û@C}ñ¿Â:Ãzr°O>FAVñ¥›t�úÕÍ‚—?<½ð½ó…Ù„bŠWYýòûb±8+BÓŒUDdL¢$‰D"=mZxDt||¢�µôU~Œ ‚ ‚(Úp5ÅW®‚v‚ƒ cŸË]žF^ú .ƒ¹â"õ›x!óe´†/W^*k°D°lºšpB¢„Ô/QpAí…ÇÁÞšAAEÍ“[¹dâóf•×gbJ3Ÿ•¥©_-ÑòBÀ‘ûB­†û72*ÛÞrNy4p\|b†s¡ ‚ ‚ ˆB€žžâžÊÞE&[A�©i snUº‚¡ùùB¨À¡áQŒ >1±ñ$€ ‚ ‚ Š& JŒ 'áÑ_…x½ŒÞ:Kdšüs!Ô `éªWQð¡šLAAÈ“9AEz8ÛÉ“ ¡þ`-Ö|Ö{Ãôö3=OÆüdßK²ô:,½K/Ç"¿@«—AA2”§æÊÿ¤á+‘½äᅱ̢¿‚émgéî,½K/-�Ñ{ÏØM¦?œ¥biAAADn¢¬¬”'ß*K/’»ÙN¾½™Àú³™Þ]–6‡¥·ù¤ôðG1½³LÓ`ióYæX¾ü¿jU«5iÚ”D~%6.!&&.)9™AA‘[ŠÅfæf&,SdFK}¿P¿²ôŠ*~…$Nsaú“¥É4û�ÇŒùB$­X±J>255õÌ™ÓÉÉÉ$€‰üIJJJDdŒ���££�‰±#‚ ‚ "·HH”DEÅ„$$ÚX[@N2Ñyés¿Ûe¾ßŠjÓà§´)LÓk¯óóÀÐb‘_Á-gjjbcmÉ‚ ‚ ‚È]à‚Â'"2N){¦#ú:¦—®z%}î·Í瑞Loãg1H€dHœ F�µiÓÆ´´´Q#G¬Z¹BˆŸ>}꯿.@ ::zÁ/?wîÜqð �7n`‘[¤¤¤&'§’ú%‚ ‚ ˆ<r¸Nc㘎è.€=k £ÿÓ_§¨�‘LšXw|}}#""ôõõË•/wìØ1~éÒ%�Ê©©©3f|ÇóΘÑcÛ´m»zõª-[63‚ÈBB#¬¬,AAAy †å11qLGD1ÅYL2Óa ¿�k>s¸úe²•€ �Óàûññ'$ÓócY¡mÛv‡òöö._¾üµk× ñ[µjõøñã;wnoذ©J•*H“˜˜¸mÛÖ¡C‡1‚Èy’’“é¹_‚ ‚ ‚Ès0,ÏÄ’´™ R.P·n=[›«W¯@_¹z¥~ýú–––/_<ÇOû÷í=xP:ÁúÊåËáaaavvvŒ ‚ ‚ ‚ Ô ¯›û””½ï÷éuXÚ"ÆÄÒpÚÿwÿ2þZà’,+èëë·nÝ8%%åÖ­›íÚµg2—/þ:+æààˆO»öF�C/î"‚ yƒ‚"%’ç/^2‰‰‰ÍÄV¹³•§™]Z‚ ˆ‚‚ÎÏCñ²›Š1ÐÀ êWÊMYâ¬Ñ¶]ûÇ�]¼x1%9¹yóˆ©TÉ ;wî2nÜx|&Mš«<Íìâ¯W¤¦¦ê´ Ê¥¤eâ5ë7ÆÄÆÊÇÈ—pllìÁÃGãââYŽ¡}™3UGKQÑy tz/¦?œé�ýl!h©Ðý\ë"�Þs–6#ƒÜÂÃÂOž<)|­ZµjÉ’Ÿy�kÔ¨agg¿lÙ’F�›™I�ÕÕªW/UªÔܹ³'Mš"‰þüsihHèž½ûôÈ LAdÒYú¶»kT¯ê`oÏòU+{àƒ@l\ìÉSg;´kÃra/üâūڵj²üÊWÐÜ\ÇéuŸ�/aKKËùs~b9‰öeNQhÐ]—c郘þ2–æ¢öUÀz¯¥ �,׿yûfÖ¬ÿ7î³gÏQÀ�µmÛµÛ¶më”ÉßòSSÓ¿þú{îœ9cÆ|»¬‡‡ÇK–èëëìÊ&‚ ˆ|…ÓëÒ©<´Ó¿ýFÁªºeû.ï7o]J;è×»´s)ù_SRR6oÛùðÑck+«NÚÕ¯§8ÿjß�ÃW®^753íÜ¡�ùøé³‡ŽÂ]§N­Áúb�Ïž¿¸zý¦�¾þmÏ»+ÿýS8†—¯^_¸x¥w¯n¿-^3õûŸÆŒîVÉU]FFF·nß©RÙ£{×ÎkÖmÄÁ7kÖ¸Ÿ^Èꃯ߆M[ƒ‚Cp"_Œjgûÿ \|/ãÇŽâ™ »¿u뎇‡[Ÿ^Ýå-7oßÙ³ï`rr2ã÷ó“””ôç?+^½~íæêŠÍ ™Ì{áâe}}ƒöíZ·hÖD¾4ÒÓÓ÷î?xýÆm Ú·mÝ®m+i ‡†n••pÅ åG ñùYù«ú§èð±€À w7בǘ™šÎ_ð;Ê¥Ô¶uËÎÛ«Ü .ëCGŽÅÄÆõíÝCá2!½| W(_sÿö‹D"™3ÿ׎Úá:ÚÙÚŒ3r÷ÞÏž¿t­XáËñ£��ŒP¶lÛyÿÁ#''Gd‹x!OŒ”fÍ[0ö�ð\ºr e;aìˆ_³nSÓ&�p…5—¹Ê£U®ogÏ]HNI騾-ÊvÖÜ_PåË•}ÿÁìo¾Ï‚ ò™Ñ�iXzm¦?YêæU‘ø �L3kÖ¬»sç®ü§kæÒ'�IDAT×nˆ?yòôäÉS„dã§6mÛ 1¥K»¬ß°ñüù‹/^Þ´iKÙ²él‚ ‚(@ª¥¥¥^¾rM>2--íÏ–Ce-^øsÃõþúg_C`ÛÎ=’ÄÄŸçü4lÈ@„ß¾ó‘ÿÂæÎÝ{3¾›2iâ„s.ñÈÐаu6÷ëÝsþœCCB�“ÎÆJJJöô¼ùôû¯óåxrrJTt´½�Ý”o¾277ÿuþl¤Q—ý{jV¯öû‚ù��A+V­ƒB›õãw—._ÅW$€ú…"ý{Ù¢ÊnçÎ_’?N¾á0*U¬°àçÙШç/^–OV·NíÝ:W¯Z‡Q‡˜[w<»ué8oö�Øüìù‹ˆ¹{ïþµë7§Mùæë¯Æ;q ÒZ>‡ÇOžA=þ¶`îO3¦Ý¸u;<"%üÏ«à ʼn»”.½rÍ…òWþ58$dõš Ý»vZøË333èODΘ>åƒR‚®V¹ aÓ–íƒôýeÞL•Âdi…–^¦°p&�À`2ˆ‰‰�à‡íãç_·jÑ|É¢ñññ7nÞF‚�{öCBæBu¯\½>.îÿÙXZXÀgŽ0$ë‹—¯ _™L½Ã¡¹ÌÕ­r}+UªÔ“§Ò5J}}ýÂÂß>{�ð«W¯!ÈAD>#“ŽÓ´ù,½ ÓŸÇôÇ2ýõ² Ïg¥é×yÒŸ� §��’OŠ&‚ ˆÂ�ž¾ÞÈaCö<U&DB‡¤¤¦Â½fjjÒ´qC;;‰ëy÷ÞÀþ}á`„Û­E³Æ>–ÿõþƒ‡Ý»t*æ1â�”.ÕSìÑ“§µjÖp«T[õèÞixâR¥JÂ1ÏžŠcÓÓ322Ô—þ5‚FR—CÉ’%ªU­laa^µJåªU<Šs‚„„c²U¸"#£à„Å‘ôëÓS]9/^¬n�ZPnÍ›6áÊJj±X ]‡Ãà1ÕªV)W¶ <–õëÖ�cRI|·[—Nö%Škݲ¹B�À¡ §1­¶¶6sfΰµ± F ·iÝ^\¨k¯¼‰Aå¯PÑ5kB†WÆAЯ]©ÎgYùB™«Þêé³:µkVöpÇVû÷‘>`œ®¶„Ê»011†³ÝÑÁ¾Jewd‹r–•êíÛžûõA™×¨^ ÙËû­ü†¼ßÀ7 ›E­Õß¼}‡eoo‡Ü4—¹º£U®oÊ—õõóÃ.ž¿xÕ©C{Èl${íýÆÃ­#‚Ègdþ5Hpðêµgzû™ÞéOïû-)[kFÆ3Ÿ ‚ ‚P tj‡v­áyƒ„ã1���‘B„eÓn?J ¸û$‰kk+áWHSù ƒ‚B„ÌyàÕ+¯›·ïÜ¿/U­ ‰‰‚ÞÓÞ²¬.˜§yÀÀJõã0‚�¯füň¡;ví=pèh�jUûôê¦2sa²••ÎNó‘X}Jlie—&“MÜÅÇÆÚáˆÈHè:ùôµkÕxóîÝÜù ml¬!Páuô÷˜2íž !!!$4̹ÔÇg²TþŠKàô©T ÅPà G¥r+X„k«ý£Â(@>µú"™G €R�‹�‡˜Ÿ=o�ÄùV¯VE~[T•“§Ï¹Wruq)íááöüÅK;[[eiª\æ*�Ve}Ãá•*YÂÏÏÿùË—C ¸wÿüÌïÞùŒ>„Aä3Ô `==–ÑÊûÒç�§1‚È×ÐêhA4:´k#]ÜøÆÇÅ�ííì"##…_#"£ìå^}Ái 2€ 2“)O…_üœÂæŸeÊ”††Я7Ë,™Ë>Ù?L�ŽŽ†—{í†M3¦Ër¨ë͛ªòW8Wû÷éÕ·WHÁUk6sr´³³-ãRzî¬T¦Wù«ƒ½÷¾ràRæUJºÚ­ìllÂ>ùö“’’³e…gS`¼ð—9ÆÆÆ*@œÃ=ûüå«Ênнç/\†¬­W§v†9«÷1²’ëÏ{|¢õ½ûá•ÕæÀÌÍÌcãbù»p2‘Cjjêßÿ­  �4‚FMMMc™ÂÒÂ"(88-Míæðsž9wç‹29täØÕ럽¿ŽkD¢�ÝÜ*A¦â0J–(óô™tÞ/ïÏ¿—óe9*…’¼íy_™lÁ­W¬á‰-,-üeï%V¹U¥Joßö Ç�?yJùÈåKXKPd>Þ³È3Q"Y½vǾò à(†ŸöÊÕë¨ððã0^¿ö‚FÍ0g•G«®¾áΞ¿X¦Œ´f"æðÑ|’BxxÄ¥ËWAD¾A­ØÂÜ4<"šD5™A4œ�KuíÜážl‚±H$úúËqkÖoÚ°y«X,ûÅ ssùÄ£†ùgùª)Ó~Hgém[·¬RÙ]þ×öm[¿}ç3yê ¸ãÚ´nÁŸÅuq)ݹSûù ~‡424š0î mŽÊÜܬqÃ3~š;qÂÈ]s€«RÙãç‹à:NIIýbäP–)àÉKI¾„µÑ¨œQDzpñÒU9š6nPªTI…0‚ܸy†„]+–÷ò~kh(Î0[uG«²¾AúBëV–‰a·Je‹c#ìåýæÐ‘ãØœ^WID>A/]ý<ç�ÐÈDI#ˆ‹±‘¡ƒ½µº__{û¸8gºàó! byF‘À¿g¬~NiRR¤š:™�_ D"¥¥•âãLMM˜.Àõ*¿D“®9`à‘��¨ëN•�ò4ÐøD8œáíT7 …)F�|6K(!!ÁØØX]ªü511Qaîqº ¡ˆ”·Â‘ãÈþ?eZ …Ö‰D"R:£¬£îh5×7yP¤~ ‚È!21ž×´–�µEDd i`¢€õ‹:Ì‚ ÆŸ¨Ô ¨4üš !ª ÍtÍZ(ëê—É–ƒÊ � u¿ª,LM¦òWå'oõdhØ Gn ñbeBý‚zàVÝÑj®oò�ú%"_¡IÃŒïY\|bLl|rJj†kbD¾@OO,2°07535fAAAŸÈø5HP$$‚ ‚ ‚ ˆ‚NfæØAAAD�ƒ0AAAQ$ LAAA HAAAEÀAAAD‘€0AAAQ$ LyI¢DòüÅKFAADΓñ{€5�””tìø‰»wïÅÄÆ–(^¬[×®îînŒ Š$gÏ_Üwà0‰D$ ¼lñ¯ÆÆš^£¹aÓ¶E ç3‚ ‚ ‚ r˜Ì à#GŽþðÓÌè¨è ê[YYŸ¿pqÙŸ÷îÕóǾ/Y²$Ë- ·oßÙ·oo333FyG›V-ðAà�e7oÖ¤níZŒ ‚ ‚ ˆüD&0Ôï˜q†ùë/gL›òìùËÓgÏ#òêõ›wîÞ›ñÝ”I'œ»p‰§LJJ>rìÄ#†.úu¾ž¾þñ“§K–,ˆ_ÜKåÞÜ ‚ ‚ ‚(|dF;~":*¾_埠‡¿ùfâßÿüÅ2Elll‡N]:Ì¿®\µú‹Ñc8|øÈÈQ£�Ÿ8Ù a“5ëüðãLèpåͱa�ž½Ý=ª>òþý^DÞð°{—NÅœœœ:wlŸÎÒih(ž;뇊Ê[X˜×¨^õý‡zzzõêÖ¾ÿàߤNíšòÓ%‚ ‚ ‚ЕÌL�¾{÷žô¹_5“œ;uê©ùàÁÃÍ›1Ý1771lØœ9óÚ´n³dɲ½{v!>&6öæ­ÛÐÕp;'$$Ì™;Ÿ…¿þ"¿íÅK—'O™:oά5j8xpèð§N+Y²dHHè®]{ °iãúòåË_¿~cÊÔi?ÏŸWÉÕuåª5£F�9|h¿X,f‘Ý9´³çaG‡€À ‚‚Bx$D0¤§§Ã|ýÆ­D‰$22ÊÁAºðö�{:uhwÿáã^=ºjØQTt,#‚ ‚ ˆÂˆ•åÿØ» °¨Ò> à— •00@0»»»Û5u×îµ± »»kín•5Á  ©¾×�o–F0–ósŸ;ï¼7f˜¸çþoh ¹DžŒ,ª«[0³GÅ`)dâEîË–¯�Þ½zù‚±±±³s§ý,\äþáƒ÷î]mm+ˆ�~úôiåò¥è€ammíŽ�œ§M�,;5�uôïÕ«'†1ÖÃG�÷zî5rîV¬h?iÒ±ÛÊUk†‚<ŒáË—ØÚW¾wÿAU‡*QnCáiVÆæC} èëë…‡‡‹�aÿ }ºtérW×Ñbã›×o¢¢¢´´Rvõôñù;A"±´,›�� ËÊÊ µÜ:µk‰w{yY[—2Zþ:uj÷ëÛG¼‹J2kk”‹ÜF��ã­Õ»g·Ý»$'%I·æ /gXª ®núëýf§ö+7•TY÷ÉNú�ˆˆˆˆˆˆò‡o À™Éõ log§ªª*É%¯p®+_¾n‘\ä< 4ѯ…˜ˆˆˆˆˆˆò`""""""Ê€‰ˆˆˆˆˆ(_`&"""""¢|�˜ˆˆˆˆˆˆò`""""""Ê€‰ˆˆˆˆˆ(_`&"""""¢|AY ÊKÉ©’’’_&Iž& aB^Ñ”Ë))•V…T‘ `Ê[ˆ¾II ·…HAÅTY¡L^åÒäÈä¤7Iño$*JŠ:ŠJJJ‘ îMy ùéWQPP±TVÐÎê,&®dª„av˜©@DDDDDôoòT€ãââΜ9›œœœE…Æ�©ªª ”¿I^¤¤_DSá»ÀŒ’žI0S•r*‘Œàøøø¶í:Üðð«=+ÚÛ<°�8ŸKòIV)ò]÷FV6UJð‘å""""""Y9À§OŸAú øðö«=�LŠ¡sË–-²îãëëW¢Dq !7\¸xIIQ±V­šý „¼;î7C);Z?ˆˆˆˆˆˆÒÈñ1ÀÒ=ŸW®\½båªlvÎP``P·½¬+ØõêÝÿ÷îÓ/88Døf8|ä¨@?±‡>UmTÄ[¡j†Ft ËêO¿pãŒ"}ƒy,·1uuŸx=ºyãª×£jjj.®c„o¶d±ûüysúéÝ?ð ðj�çÒ}·ßœ½fV=Ý7»?öy,}ƒ`éåU‡Ò§oÿ 6ÙW¬‚úó´é3þœ3W:µÕkÖŽå‚�Y³ç,\´Xl|ìå…Q,ËY7jÜÔsß~igLªMÛöV6vC†÷cccÝÆŒ«`[ÓŸ4yj||¼@yIOG·:UêÔ®T;(4Hl<}õtíµ‹Ö5í?©L\ Zjv«:náØ>ã{ã®ÏkŸÆý:Tlo�ÎQöä87jÔÐÞÎÖȤØWoè†ÎYLª^½º³ÿœsðÐᘘ”œƒ \¼x1!õÂ9ƒ‡ öðX=xÐÀiÓfœ8y í‘QQW®\½|åÊ¢…óÛ´iåàà°wï>é^Öûöí¯\¹BBB>~üˆ�€ÀÀîÝ{)²sǶ®]º¸ºŽ9á"Ú¯]»>ÚÕ­sçN[6m�Hûö���€vÄiŸû÷®_·öüù kÖz”—n<¼qùÎåÅ[_º{ix·áhyé÷ÂÙ¥³Sã–|áû|Ĭh\>i…Ž–Îà΃ÿ8wÝæ¹š™š�Ùx¶®CÝîcºñŠGDDDDD”M9>  ¶ìËÎe��~ÅênffÏš‘˜˜8rähdGǪH¤ڷÈ�{ݹs÷჻ ª�6llÖ´‰8–ÇÚÕÊÊ)‹]¨P¡‘QQ�=¶µ­ðþýûgÏ|Z¶h.;ý}žûMMMgÏž‰iÚÛÛéèêDFD }åª5C‡ éÚÅÃ+–/±µ¯|ïþƒªU¼½Ÿ:::–.]í'ŽMH`8oõ›Ðפ° j¿öåí554Ñrìâ±²%-uŒá ƒ'vÝÉcº‡�¥�ŠŠJÉ¢¥,Ì,Ð~dÕ—¼ÕTÕ–o_îçï‡<,}�<×Φ¬÷uuõ%‹M›:ùÒ¥Ë{=÷ÿ6bÔÝ»÷þœ=ó±—WTtôœ¹óÅn(Øz?y"—*URL¿ ªªÚ¼y³“§N!ŸGáÿÀ�À"†EdÇÚwÚs®Çܧ¯žÆÅÇ ©û DDDDDDÙ�·×>°ß3ë"0,X°uëV¸­Yë1sæì©S&‰{D›‹š7kŠìú¥àüïPÝ®]Û©S§�;æäÉS( §™rBB‚²²J†3-if&�þWk+ ttê`g[aßþ[·mŸ2uÚš5«¤egÊSuêÍñ˜ˆ2o£ê�Ž­9ž¾OrrJÐ�ˆŽè>¦ûŠÉ+{¶íé÷ÁϲyYá»Ã�ˆˆˆˆˆ~Ay{à3gÎfv`¤ˆAƒ‡.]ºØ¨È—ú^¥Jñbb¢Uùòƒ PTürˆ2Òo†õäš5ª‡?zôøÁƒ‡›6®O󨵵õõë×¥w?~_¹R¥jÕëԩݯoŸô777ÿ}ÜXÜÆO˜´zõà<õ>è=^üWo_Îñø³¨QQãBÆõ«ÖÿsÍì3×ÎÔ«Zoþ GÎ>¼òþ:ƆÆWï_mר=6Ž$&%êà}²|û2�ˆˆˆˆˆ(Û~Øu€õôô"#£\ÝÆ¾}›’¥ñÿì?ç::VÕÔÔ´··+¨«;aâä°TéѳO†QRRjղ嘱ãêÖ­›rÀð¿µlÑìî½{ë7lDjºwï~ÇN]Þ¼ñR+½‹Ü—ܾsG"‘\¼t¹´¹åƒÔ‚v£ÆM'Nš‡Òq@@@É’%ÊK5ºT/ÙЬͰ6’D‰xd¯C‡¹nsûŒï­U±Rñè^.ⶉá݆ŸºrÊi¤SÃ"#zŒtvq6ªYDKS[ """""ʶ<<ø«P³2l¸ƒc U•‰¤FõjkV¯RO½uë¦#FÛÚUB{­š5V,Ï´Ö×®]›�›6�9"ýC(ç®YµrúÌY“&OÕÐPïÛ§OûvmÑÞµ‹ó‡÷úõª««;}Ú;;[´Ï›;gĨÑ[-·#W;T©<çÏÙå Û²¶ñ�2|h°óÜÂ"ÂôtþDw¯v½qCíà Æ.˜1r†¢‚¢šªÚôÓ¢_SxŒÒ³ Õ€y¾„�t$–…ã j$ DDDD” YŸÌ9½£G�õ88›»@¯[»:³] ¥¢¢¢|ýüÌJ”H_Â�ŽŽF5aáÛ|úôI[[[ºCµThh¨¾¾~š�«#""Õ­¾vè2eSôÆÕ**Â÷;¡@�¯v{þÒ·D1c!'|ßúêëÿiñ /"¢‚bb’Wa õ2:Z:ª™¾ó‘~/¼øÖo¶ºe>3åsQÑÑ~o߇~ü'(1Ð×+^ÌT+Ý;Ñò1"§ëó9.>4jÔ°¢½ÂíW{¢[Ö×iiiY•/ŸáCré†2o†íéut¸cmnJ.˜œ™¬ ­ |/˜f*�\�~¯†- éXØ@ y½‹ŽÁËX½ˆafµ_á›a"Ž%b""ʯ�~ï?ô2*RØ6õ|®y-0(³³·µf¦_š<×>°ß3W®LùAr™$‰O¢Šå÷ÛÙ>)" 3H.¨ý"ý-ðõúy†±©CYI)û£ÄÆ'¨©(õªiy-*6VK]]È%â ˆ³¢¡^†d÷|þ•¦CA]ܤw½žølÞáYÈÐ`ì¨ÁN„ˆˆò!Ô~‘~‹.$m‰��SWÏîêwbbb|B‚ºšZ\\|vÆg„™–·´È°ÃÁÇÚmm"úuäÖŸ,&&Ù0³ývñhtt´8¬§§§¤¤”¾EøŽäYB¬ýêŽÍD¢¤â‰ ïß'*™~�w6f$IJÄL…'<<<..®È?§7ǯËßÿ¦££cii)½�u†^¾|)½Bµ®®n™2e„Ô z=}ú_… .]ºt£‹óÂ0¯²eËŠóòööŽ�ýÿþÌh´µµÍl A1±ßRûÝyéªnÍ6•³?ʘÍÛþèÐÖD_/û£Ü}ùª¬‰‰–F®åÕ¸„„¾ËVí3ZÈ=ÈÀ7‚B¿Ú-üS’­¾^Á4íHŽº:‰íÇOýuþòuã" !Û}Ú¼y3Þ~VVV={öÄ(§OŸ–=‹>+V¬oß¾_�ï©S§ *„9 9addtïÞ=ÙÆvíÚuëÖÍÉÉI�Ë�;wú÷ï�×AÈ¡5kÖ`¦î" .|ûöíâÅ‹yaâ:tèÒ¥‹@DômB?†¥©ýN˜¾páìñÙ÷ƒà‚¥ëÚ¶l\ÈPïÒÕÛƒúfëK øáco�H†D";vlÕªU»wïža‡={öܺuKÜ·×ÅÅ?úé[„ï(Çg�&ʉM|B¢Ñ492÷LÆÄžI0#Ì3~„7oÞ;vìÈ‘#ïÞ½“6þõ×_¡°žœíIDAT¡¡%J”ˆˆˆ¸páBÖSðññÁ&1…ˆ�ˆ"øf)^¼8¢Ëýû÷³ýìÙ³H2è‰9ž?^lÔÐÐ(ðL<00PÈUñIÔ¿ŽN9—úÿ£ZRrrdÌ¿öÔEŒ•f:%1éKé><ú³´%bqåetÀÿ›ÿºø*(())ƒ:L|¼ì¤™5ÅXaÑÑH¼IÿìÂF5•Í#‡I»¡ƒì.é—?!#å"릹¡QZƳž0æ·Rf%r2á” xï•/_©réÒ¥C† RÏ·ß¼ysqû‚îå˗ш?WÓ¦Mýüü’Û´iƒm.úúú¥R­[·N[[ÆÆÙ:ÀfÒ¤IØR#ü²ðá]¿~}fé÷çѯ_?|3DD™‹ŒŠ–½‹Q´àw_òøÿ¡×³ZÕ«Ts°/k^ªo�”M�qññøù ÿô¥ˆnhˆ¾ÆÓÓSKK+‹?~9rä¼TbÖMÓòþý{__ßk×®a5õÊ•+xï¡Þ¥Ø8ŽÍñ1¹½Æ=è(o!‹&ë%ÇV�•ø))½RVŠÈ«:p¢Nbbi j¿(^ý¨ŒÏ'¶~!K[\«W¯Žÿ‘ vî܉'ÝÍÁå)ÔܤߘBÍš5‘O¤SÆ·€XOÓÓÓ;xð ½½½ôÑW¯^ÅÇÇ£°,¤ñ I“”‹W£þ¼}ûvŒˆ—ÑEÚÿÌ™3˜��{¶_¼rþ±·ªŠr]Ý)Î)?Ÿg<ºþìïǾ~“:up,kþðµï‚CGŠL©dÎëÙUPP˜°mWlB|PxDÇŽm«~©@>|ã»îÌ_s{vEÜuÝ´µ�ŽÎûÐ�˜ …‰qŸe+‘NU••7ýu¡˜�Auµgï?¬?ó×ðMÍ��Ò,ÌÍ¿ŸcÃ�¹‰ñðæMÒÌ‚¶³ç[˜š8Z˜Ž�3*X°U•J¯—=¹¸_¯îîË÷�s ‹ŠrÙ¸ÕP[Û/$dªsÇrEMÓODøîZ5ûúÉ2„ÈŠ2/Po,S¦ÌÔ©SW­ZÕ¹sg777!õí4gΜZµja« ¶Î,X°�Íš5CËãÇ�+§BËôéÓQ‰ÍæeáðÓ…BqÑ¢E1AL¶N�:Á©�ß>}ªªª*îÂpóæMܵµµ•}3!ÑáÍߢE éá3XÃf#¼Ï1)éîQQQçÎ�ûüùsýúõ¥»ZdØ(…ÙÔ«WO¼‹'xûöm¤\$ÿ4‡êìØ±C¶6‹)&‹§€—Eö£„ âÉâyU«VMÚ˜áóúûï¿oܸahhˆÏfš]¼ðýpâÄ ¼ÎâÆ…ôOAÜ%¤R¥JBjé/¾aðj<|ø8.^¼�)cÙ""Ÿ"".[¯WP7(8dpß®%Š›Þ{è½Ëó¨±Qal]×ÔPoÙ¬Áå«·“…äB†ú… \¸|c`Ÿ..X¥«£­¡¡>¸_×ã§/Ü}२ `U΢mËFÙŸõÁÇ<™Nþ‚mëÏŸ?Ç/,~¤2냸‹_süÆÕ­[·\¹ré[°€•Xüäa-kÅ!!!mÛ¶�5kV?455±N»páÂ\<´–˜ò–Jª”=PP±þÛÄ�´lVVVnР�8Œï¼²kÀ±±±øÖ033“ ÀØöâÅ ¤e¤!å´ä¨¿ ©ëÊØ †L‹±Ôÿ9ZÓÄê²€uuu;uê$¶cµ_iv·FYí¦¦¦B.‰Š�=xóöî1£ðyàÆ­˜ÔíÄå‹Ú¬ñíç/ܼ…Œô¸|`_]MM÷ÃÇ.?y†ï5m õ?{tAãŠÓAZ>ýàÑ‚ÞÝQ‰]uâL÷:5T°ñ ùÓóÀê!ÒÌ´VùrÖÅ‹aeŒ�°ŸãRfª©ªª¥¡~ìνÝ:—6*òüƒ?Ó̺ŽuùØ„„E}{ª()„…Ïö<€|êþ£Ö2;lo8{¡k­�ì*¼ }„œ~"BÞ¸xå†t¸NMG!Wá]‡èŽ�/ÈlÓ¦Mñ[5xð`4"×ámväÈ‘V­Z¡'úòÂO”¸û¦3|øpäÌýû÷£Î¼mÛ¶åË—·nÝ!vâĉx'#ã¡:‹¥i=z4â(¶"£3Æ‘ØñæŸ2e ò?ŠH騍T°`Á™3g¢3Òf†�Ò¥ºuëVïÞ½·nÝ*ÞÅ£(‰#åb3bÿÙ³geóöž={Ž=*ÞÅç“Ŷsss,üâÅ‹6LÙqõêUJ¾Øt›¦ø¹ÇO!&ˆMÀX@ ¶\·iÓÆÚÚ[–szÝ¢¬1å9”qP®‰ŒŒ”‡)Bd•=¾+Äâ^ÊØd€bccƒD�|‚Ÿ¬ò^ºt káH×™�‡ñe‘~vIIIׯ_·³³Ksf)//¯òås3¿!%"…*¦Î¥�£ƒØhj �ÿMôõ¢cã0pÿÕ›Y{`À7(ÁÕ?,©wQÑíT#¥t†o4×�[û6¬§–Z·ì\«:J2 ÿ”õüõÈ ¡Õ--°;µ_qüTHD¤Sõª(§™5 utTR㇑^AIb"ò3‚ú€Fõ¥ÄÜ;×JYªb†¸¥_~!Ï$%'+æö™ÀP·lFbG�®]»6¶£yË|àÀ� Å¥B¥·gÏž›6mc$ èŠäÙ¿ »»»c{³´bŒ¬Žˆ.=iË–-صnÝ: cyŽ?.`ü¯Y³FH=t€3|^Øè€TŒ0�Ï2:##¯Š›Éð!ÅëŒO÷ÚµkÅÝ ²x iا¢bµÈ"¢t>6mT(ùŠWHŠ�— ýbÀÔÄ8³ S~#‚ÿ~ñfñÊMBêŽ0áŸ"€)CøeÄOüÇñ+�ÝW¯^Éî-%…-ìâV\Ÿ>}Z«V­4-NÛ¾ñ#‹í×âÊ@na&Ês%J”À6²+ GXgÍl7ZÄ€víÚ‰Ã'X™–ÝK¤F�Ø`vçÎ�¯ž0‘Ec±,,…o¥ÀÀÀš5k ¹§dáÂ>ï? I*+)íº|­MÕ Î}U±TÉqí[hk¿ ÖTSÕRW?qÿÂjl|JÄ]jÕÀÓ96é÷�œ{ô…_Ôoùú!E?÷0IÍÒÚ>†™.ô>ôc±Ô#3QÍŒM=8Å[Ùú-- ¼˜rÛ?ç£=ͬÓ,X³JöΞ·01’=gµ¹±ÑƒWoŠ ü‹±êÙXe=‘\T¯V5!·!"‘ªªª:;;‹I ÃÒ (â€x¼~ŠP&ÅûsÙ²e‡BD”cG#$=Ù½—+V¬ˆXˆô‹ø‡2&¶ì*T¿”¨XJ·û|þüeL”R…”KÐ¥ìù�Ñ€Å,½ˆR:Ò»�zr/”sÅF,¶XÐΰ0 Ò)R«ì¦"dì¡C‡bIêÖ­‹€-{Ä2ꮲ'ðÀhéˆ�S‰Ã²K…�'ðiMÿ¼ðÞÆ³Ó¯�Z –NeatÀ†*én™=""955F]·p!¿wð¿�’„ ݸ}߯Êò¯K×Õ¿ös†Ø\ºdñ‘Cza�åÙß/ rp¢JÊWÊ”)#Ÿ3qw3±=::›ÅÅíËØæ;nܸ™3gâ'5^ü†¦oI?eüªb#¾˜{±5ÑZ<5l®`&ÊCÈX?ÆZ²––ªFÈ ̰3Ö•±�U|a@ܳQCC«Ñ⑊©'�Jʺ:‡„/=ÖQ %hl?Ëݳ̫«ªô¬W{ÀŠ5øÎ³01ÖPÍàõ÷mF¯ß¢§U‘u~¯îÕ,-þzì=tõºðèϽê×û *ûg÷.ý–¯6+\¸_Ãzc7o?vç^TLìÔ.©Ç¯V«úÛÚ ¦&Ò3Q5´µ™½÷À¤ÎÄb²Ô­ç/×�ù ‹!ž†:ͬÓ,&RÒôõÃË6ömPoÌæm'ï? �ŽžÖ¥ÓW'ò“ÃF-Ùüx`;«˜-_¼x�_&MMÍ›7obûR"¶� t‰J)’0*ÆB!=ŠL¦ãééY¾|yÄ9<$î}€¼�Í:K—.•vKn-|²ˆß¨-K/œ€œ)ž@2ÃF!¥â�ëøñãQÇV±±J•*xÊØ\�œ�e»xñ¢XòýôééŠ+¤ó‹ƒ© Ù�áó‡=!!_éÏýŽ�ߣG$Þ3gΈ�Èð)¤œDP’ñ©¿ø•ÈègÖ®UãÅ+6\¾vçsLÌ�þÝЂÿ=ž¼zã^«²¯}ße=ºººZ£ú5§ÍY¦ª¢\ÈÐÀÒ¢tögÍË ýZ¾ñ˜í²©„Ô¼dff&¶ãvq1ŒTŒu 777===d]lÆOXšlGN3e¬îb­¿àXÆ0ŠIBîa&Ê[XÁmÙ²%>ÞXF‚•=KVmQé*]º´¸º�õþS§Nµoßwß¾}‹z/Q4“¤B£ŸŸîʆ؀€¬a+öe×Ü'Ož`CZ£F�Ò¬ã[éõë×Òòr.j[µ j­Èåâ®ÅÈÃb;J¸Kú÷R Þ2jXL|¼4OèØ.‘› SrÙ€>bûî1£Ä�Uƒû£ƒê?™¡‰½mƒ Ö‚Ìå…ÑÒÈ®Bú†‡7o‚r´´gúYïç"íŒÆësgJïŠii¨cîq 5•/sO?‘Ü¥£­õ1,|óÏ4íh”½pnéܹ³»»{«V­º0 ¼Š·Çˆ#ðF555Å; 9PŽÓ8ûøø mJ«�Bjž:uê¼yó2'L˜€º+ëÔ©ƒí¸(Ì¢>Œ¼‡\*½´Ò�7ðæÇtð“YµjÕÌfÔ¤I“­[·¢ÖŠOÄúõëŪl†�BêÙàðdñ¼0eüB‹ÉËðÇ`£–Uë7oÞˆq½uëÖ²§ÐÃG K‹r1>¶Ë—/GföððÈp©2|^ØìµsçNd]¼ªØ¾pàÀq6Jåä¨06lãÆ�™=…R¥JáQñ8ˆÛ·oËÎߨ.ý›x ¾<ÁIDAT¤šÆ Ã&8•~Înß}TñR)³b;ö.jšò¥×¸þ—�Â,Ê”Ä SÇ�”N§Q½ ëVÇêÇ�:±(ýZ¤¿¼"üœÉ¤ƒß8$^qm6Ö>}úÈŽîà�r`]Ïž=Åu`ùŽÌÊ0QBå§F�ˆj)W™�ðl-‘[dcñÄTúúúâ9¶uakV©…Ô `â.©(ÿŠ�RÏž=ÃÚ¶€1}¬"£¿ôÐÁò©„Ô3ÖbËYv¾> k¨¿‹Ž)Z@CÈ6Qů–Ó¤GUå¯|ó¤é œnú™.›¾§ÁUš~¿e"x gãˆ)}½‚}ºw ÿ‘¦Á8MnÓ¢VH„oƒ_£G�ÙÚÚâ}ˆ÷r �ÞÆŒƒŸ"Ä<ä´qãÆ!¶ 9„o·nÝd[PÅÖ¤>ÔB ,(‚‹·úªU«1/fdKéÆšC‡!-N›6-‹K.a.ØÐƒ*.>“˜Zf�R¥˜&~Gÿúë/lBBU�ó Æ¶ø++¤žÁK¶ü+¤à{÷îU«VMGGOaÆ ™-UfÏ õç¬^½:**jôèѲ»o¡ÃÊ•+Qi_¼x1¶døêÕ«‡O®���ô”4hP÷îÝÚñuqîÜ9�ˆò%}½À à"… eø¨ŠÌÏ™�UÙÝû�}úYÖ¼T“µ…lÀ×Túô‹Ùa¦ÑפÙûI)UÖ-NDY9÷ãªBîžS‹èòü¥o‰bÙº´©”ï[C}yêrH§îÕ){U$>’ˆ ªéÖªÓ7&§ÊÅkóDÄ'\ )Z@3G˜Ò@ú}ý¹zCÕŒ7œßðÕˆøÖ/t#‰c y®Œ—r�æ„„ô—ìûøñ#‚–|o'ä1ËÌvïOI;ý1?Ø$„7yv¶Ô$¤wκ13¨Ö(P@ú™ š1cƲeËÒ÷ć›™d/N–…ÌžWš3Àg&ç ž >ý>Ïè‰g�Rð¹:ý ¢¢£ï?ô2*R8³ œ»�~ƒìm­µþ9Ò„è‡ ù‘Óõy`Ê[bBCé2ñe’äi¢&ä=A¹œ’Ri¬ ¢:¨��ä¾gþ… ¿ˆˆ ŠáµUä‡Úo­ÌÒ/„Ç(]x‘­œ–…ºe>ÔHˆˆ(Cö{û^<Õs^Cí·x1S¦_ú©È€¹ 4å-Dߤˆ¤„[‰B¤ bª¬P&¯NÜ’™œô&)þ�DÅAIQG1wÏö”¯ ¶U4äÞMy ÁñõY�ª|u`Ô~- Ç3ýâhyK �ˆ²�˜òò/Ò¯¢  d™·‰TA[AI[IxŸˆÙ©Ô€é'‡øš~flÅüÏïb@DDDôñÀ!Ê[’©é×ô;ÅÑ”E¦ÌT """""ú7`Ê[I>ÉŠ:ßõm¦lª„™ DDDDDDÿ&ÿ.Ð .ºvýƵk×Ó?äæ:ÚÍÕE ‚0!ïŽûÍ�‚¶‚ðLÈ;zz<>–òJÈǾÁˆˆˆˆ² ëNB}KvO º.£Ó´_»~U¯V­zõjYOÁ©£s�ÕG�!m ®`WñÖ�kÅ‹rhûŽ�µkÕ/ˆJ?¹‡>«8U‡uµtkW©³fÚC=ÃÌú/ܸ aõF¶em""""""yÉ€QþR*½”y‘{Q^°È}ÿ×pîš9sö’Å‹€!÷<0)lòÈçQ÷±Ýf¯™µèw÷Ìzºov/b`ÄLDDDDDßB΃3Åòof�¢,|íÚõ ÷ŽÎ‘ƒ‡·mס\y›ž½úÜ¿ÿ@lŒ��u3®‚mEûŠU&MžæX­æ§ˆ´7kÞ*Ã>ý|ôtôp«S¥NíJµƒBƒÄÆÓWO×îQ»h]Óþ“úÇÄ¥œ#·f·¡a¡ãŽí3¾7îú¼öiܯ‘¡£AÅööè,e�<à,Ê¿"�qûÆ"ð…‹—F�v�6e’��Ý�ƒ{ôê}êÄ1SSÓ?çÌõññ9°ï§O#FŽ.\¸Ð�Áƒ<µš}õ1óÜFÌá1Ýcù¤Mú5ÜypçæÎèã6ÏÕÌÔl®Û¼­‡¶tÓ-àJ ¢"Ïå–›>ÅÅû„…DÇ$/£eõ ꪩ DDô+‹û$„>¢ƒ„®@aÁÀRPÓMÛõê�oHèG!ïè—2+¡­­%ýÊr€½Ÿý&ô5)l‚Ú¯}y{M M´»x¬lIËA�cxÂà‰�GwB¶³´SQQ)Y´”…YÊuÞ�¬:*Ž®¦ª¶|ûr??äa�r ÒïÅwþŵµj™ $/߈(¼ŒuŠ3ýº�~ý. ºf‚q•Vp”dáspʯý¯ Œô{ëî}c£Ê턼÷Á?³s¨dÏ L¿´à‡á{»¯�i`` dƒ³sggçNÒ»aÃzôê#{yy÷NM¿¢*•+£�;w5ÊåÉÓ§ ë×oÕª…¡agNÊNúá¼�>AÆÀ䥓Z iõúìïÞw½ï×J‰^QŸ£ð`H`Ã"²cí;í9×cîÓWOãâãp7))I ÜƒÚ/Òo 9Ø$e¥\ö9&>^]Ec ?TdLŒ¶††�KÄ/¦ƒQa!/޹¢fVS ¢Ÿ•��OXXX¹råtuuúÕ ö‹ô«)×yb|2~ÙUròë–,$|NR)�Ñ~m _‹dRõÿͨý"ýâ&m‰‰�ÕPW²G"IŒOHÐPW‹�‹ËÎXâŒ0S[+A^á''l:K <öÝ^çÄÄÄ÷ïß,XPGG'Ã111QQQһ覦¦†�ÀÀ@UUÕrñ‹ï;Š*+þ_²x‘x[šî&}HÚ9 ¦¦¦•+U’ÞlmÿŸ«ãââTS_‘šªjllJàéèÔáÂù³6ÖV[·m¯XÉáÄÉSé'›�>ôó¨ëPÏ?Ø?04eÞFÕ}¼†[üãܤé799%èFDGtÓ}°ó�°[áÏŽû?%¬ëøûûKïJ$//¯K—.=|ø0!!!ëqÿþûï[ÿÀ°Øˆ±îß¿�)H[2ƒï q^�=Â|ÅF ß’qïÞ½,¦#wú…Mgϸ~3G£ [¹ö}wܺéówäçÜÜC;6>¾ÓŸó…\…—1¯w#�ó½óìD̳ãYwÃò÷T&Lؼy3~‡„ì騱ãÊ•+…ܳ|ùòË—/ ryùòå¸qã†zøða±åêÕ«Â7˜3gNŸ>}„\…´³nÝ: «×oÏæX˜Ý÷ÙÝš~ ø²>|ø¾}û°ŽqêTÆ� kžËþ1dÈ�Ç�£qÁ‚X+˜2eЧ§§ðÝÉðä¤ÉS]\Ç`ÀȤؑ#G…Üfeeå�Zò=öò²¶./›››ÿ>nì_çNwïÞmõê5Ò>‰2ÅÀÌúÐÏã}Ðû÷�ï/ß¹4ÇãÏ¢FE� ׯZÿÊÝ+g®�‘$JÖîYÛjHKq¯xcCã«÷¯¢&Œu÷ĤDC=$½åÛ— ?¬£c­wÿþý~~~ÒÆÓ§O‡„„”*UêÓ§OgÏžÍz OŸ>ýüùsšÆcÇŽ!—,YÓ¿sçN£Ÿ8q"<<=1GÌWlÔÔÔÔú&.ÎsE¼D’&ŽFac•LÔOJNŽø÷“Bÿøò¹F‘$~ù‡Él)Œùç$v(/£þ_{âô ÿÄŒŠÿŸãâd&ͬñ(Æú…Ä›ôÏhTWUÝ7aœ´:ÈŽ‘~ùóT6wjHI¿OS¾xãÞ\Í:ã-±xñbÄ*l©\¹²ì†Ø¼àììŒ7múv¼5ä*³¿~ýºN�:%J”hҤɤI“–,Y"ü4ðÚb‘¤w£££ñ��U«VíÚµ 3fÌP“Ù˜ûëB\Ç—žoú‡TTT°í_�Wš×0O}Ïya Vû°ª‡­6cƌɺsš×’O©Š)"Ð�õï .*´Ø š(Þ•ÄŠÛç¿<$ÄG%IbþuŒ`lx"zŠÃ‰ ÉI’äøÈ¤äÔi`ôW§£qCÅØ¤²F�ÿîd!æcbÖ óU‘ÿú¶ÇºZð+Ÿ€ÿï=ðjP§zíVå,† HÙé2..?a៾<‘ø´D™ÃW\Ë–-G��(‹à ûÔ¨Qcz*l‹ÇFºJ•*½{÷«Êø}\´hÑ¡C‡PõÄF@üÖc-«©.\+Fx—Þ¾}�Ÿs{5Lþë;;wJ”¤|27¬[Û°a!·¡Š;eê4Ô…m+Ø~üX«V- ?Ôh2PIDATþüüùóåÊ•“�j˜È´±±±(—‰ß¨ØX“˜ kùx×L=!Þ�wïÞEÁ Ûz³Qú«W¯ž�º…h¤ß4{�âí}æÌ¬oá}›ÅNPØNŒ’&Ê¿611i×®ÝÈ‘#Ň‚‚‚°ÕI__�ÒO–øŠ-Ú´iSéIò²ž×_ý…F{{{!嘺ȓ'OâÃØ¸qc|”„Ô*:žf«V­ÄGñì0;¼€Øä„v ìÞ½[H9ú¦3Rú‡„Ô½9ðrá#‰ô+~Àñm€×§4h`ff&�5^,0>øâ9‹çuÿþý[·naónýúõ¥=±Ò€åÁ ‹'‹­]Y<¯ôðýƒ?Št¾xÖè)&.Ôêñw,^¼xóæÍ•2?¨áýû÷b¡ï(Ùvw©�~Á€€àÑÃû•*YüÖ�‡›¶ï551R455œÚ6;{á bv‘†FE Ÿ>wiÔ°¾¦Í/XPWSCÝå·þŽœºyû~Rí*”ëÜ¡•�«ÂONè?A\‘@RÅJ‰¯íù‹ŸlÈÆ› ?ŽâѲX?122BèÅ÷-ñk‹Gñ£‰ÁN�:a{eéÒ¥ñÓ6lØ0lVVÏö¾ý_%÷e�} ÿ„õ›k×®c›å�;wÅëIo♢«ÃY °0pààReÊ._±rŲ%Ö©?ÒóæÎ¹xé’…¥UÙrÖøeÿÇïbÿýû]¿~£Z�ZYô¡Ÿ„mY[qgÜ>Þ ûkÓy«2_ÖÀ;ywá½ÿå€Wg^×wü²’׫]ï×gß[“RSZ0vAèÍ�W§�˜ŽÑK+%ü4°ú"îì'­âƒ-]Çú7>Ò²+LXIòõõÅj–´oW¬ÎbWZCÆºš¸’„Ê›7o"ÓÊîŠí;ØŠ&ã“Ø½{wqŸM|M`ÝQvñ°ö†òT.^+;2&fÏå«;ƺlva_ºR%mÌJ,Ü^Ÿ^û®¦\ éq£Ëo+‡ *VÈðü£Çç>ÖÑÔXûÛÏñc¥Eà¯^¯=yzåÐ�ÔÕV?Ù¯qƒåC.Øoöî öŠ©okc[Òl¬S;¤_,@`X8nbÕ÷Àõã:¶_7rXK‡Êég�–Ø„„5Ã÷mÜ } Gu´½uÇ©fuéÄW;Ù§aýCb,L6Éä)½‚A!?}ŠÌ¢œ&ý~iüZX ÛD�ZñN@œ“¾— „µg!u5ÚÑÑávùòåÒ}™°QÖÎÎ+îx³a�ïO4bC/òÃüùóñ&trrw"ÅO׳gÏð6Æ:=¤oc¼u‘I&L˜€"]d !„:q3�ô�œÞµk×�ÛÅaqqiÀ€T³fÍÂS===[´h��ž‚tgݬçµtéÒ#Fˆ�àà`lœF(Å ‚'+îs�W@ŒßBj\éׯŸ�º Ï+üf?K%¤n¥BîE$.ü~c@\!@glòá#� È0Ò¥E¡�X‡@.Êâya3y×®]ñjc+{�=ÄFÄÔjÕª!?8p›Éðu‘ÙóʶˆIŸ¦Œé#˜aØÕÕuüøñx"˜B‡„ÌáåÂ_¯oß¾²íxå±Ù¯ÉðáÃÅ|ƒá‰#Õ㽇å+ɾ†Bêæ¼øø«]¼x8¼ ™-FA�¦�¿>> â¼âR¿ñô±A €?¶EbÙ²x 3„? J(�±ØbãÂ… ±`øk""R E@™ýÊZ¶l�›X1Ϭý*ôt2¨))~‰Žj¹v²¢ï«§>ÄDš¯DV¬qJïbQÜKåÒ¥KøÌ#Q‹5d¬0¡’cii‰ò²Dfça±ì–Võ0:ÖÞÒœY Ë`cc#äß `¤PÅÔ¹8×þ²$Šø¿¨¡ATL,n?1qKÊ‘E¯ü\߇~´*QwQÑEXHÝX€¢ëÐMÕUSN˜ü* °Wƒ”"FI£"þò^€SwïŸä…�ZÖå±³zu_¸ÿP𧈮ukY+šfÖ(¤««’ú%k¢¯Ÿ�˜ˆü|ý©Ïo­þ_8ÅÜ{Ö¯‹�… á–~ù…<†¯,óÒ%>†}zùúmÆ¢^ëøŸÉð!d`Eeu‹ÆéBâÅš7þÇ/ ÞB(�⽇BÖöíÛ±6ÿäÉ$Þž=S ø3gΜ6mšZ°™Vïɵk×¢„%¤^e}Ïž=â. xCnÛ¶MHùê.Œ<Œ7s•Tx¯"ãKºâN§]ºt‘]*9¬Í�5JHý, ldðþ×ÖþRÇ»ºP¡Bÿ¼\jˆ øáļ ×­[‡çˆX‚Š>;ø ` ×±´YÌ 9yåÊ•ŸâéÛP¡Å–f!õ?º¨ f¸TX LsÁï4¤í¨=â7eU¼Ô˜»€×¬YƒH¼uëV!e% $ÛãÇS6X ¢¾aÃ!µ²�­ ¨gø¼°eaêÔ©øK¡¬�hŠ*%"4rssCø+™xýÿ°•!Ãç•!DGÔÒ_¾|‰Mìx3`:b±_xâ� à°‘Núú§�¯)¼7°#{|Ç�7°Zƒ­ø*k“JHÝ*×?•�º­‘ŽÌ^Cd¼Ñ£G‹ïCŒ‚W`ìØ±™= ”¸ñöÆoQd`D_l5@@EŠÆK�ç…ïIq�† çx3ˆ°ÍI¯IfoŒŽm ضˆ„�rkfGöâEÃ,ðçÆ³–�¶/`tq7¼-ñyć1Ã×0Cøǧ?(ؾ٫W/¼Œx²ø Åg‰p1û'?âú?@ÛDY]/em¤�•šß•ϸ›”( ÷ú]‰©4L/ôY¼�¥ªBju©°MÊúgrbòÃMŸ¢ƒ$Jª ÷âĉèOÙ<�ïç�ŒHIˆN*P8e.Åki ry÷Þ¿M‹F@É7$$e6 ‹§n.^ÔäÕk¿ÌF,\8åãÇ€'>/f/X!¤|íÇ……BÑX ʾñ°M_­øÞ× 2„¯8l±«¸øßÒøÄVcl¥Íìwjîܹø5į$~Í¥›ks…<»@»¹ºdqà\§›Ñ)Ått2þ1–-yeÖ‡¾§ä‚ÉÉ‘É Úß￘f*üLJ–,illŒÂVF;vì˜Ù…‹±¾+Ý%«t(ša…ku(Yà[0¬,^¿~ý«'LFÍDWWWvwJ!uûœ¿¿¿¸z�[J=ñ{+ILTVRÚ|î|ÇšÕÓ÷q°0ŸÒÕ¹�®ÎKÿxµ44ŽÜ¼…°¿ûÒ•Þ ëãé\ž7kÆ®½'ïÞkZ©¢¹‰ñ½—¯�¢}Þ½GŠÆP1~‚yù‡O ¥˜]LêQI(ÞÊÖo£bbÖü6Sn8~ ÚÓÌ:Í‚µqt@½×²˜©ì9«‘çï¼x‰¹¼ð÷Gâm\Ñ.ë‰ä}=]Ü2y°D¼¡îçÇÔÆÕËÔW/“ñÑ(ˆ…(1á�‡à„*¨¸O²2Ò¶Ú8PÜ{ÖËËkÞ¼yâXÒÓ9–/_ï@´cõ›cÅ$,ÈœíïL$4!‡°$Èrâ0Öà³è‰/v<…ôíˆâfã"EŠ $#œ ËaI¤UGT‘42›^–Í›7¯^½ÚÈèËYdPë“]±ILÈ!$^`¤S �“'OŠ™ðÁƒâ¡j±³tç^¬ˆÕË Ÿþ.ES‰¯&jõx^Ò½^±´b¨ÎðyesA5{ãÆ�Øð±%•ØŽmðX�ÁW–’’掚mf8CXZLA5u“–ô]„í¦¦¦È{¡¡¡˜`||VâåòóóÏŒ‚Ò®D’U +Râ·"^süõñÚb]ªOŸ>+V¬X²d ÞÞsæÌ²$=ø/¸xƲÌÞxÄÕ ùÞóx+NŸ>ßíH­Èç9=#ÆÄĈõ!õ€sñÅÁßQÜ}›NÄ—�òNÄ;ItP"ÒiÀ½XýÒ)¯vÙ¶ÚwV†é—QURQ(XR%Ø;.I’¬¨¬à/VÏ\5ðQ\lXÊnÌŸ|>>Ïøm¯ ”rذl‹š®"f¤STùÍ_)¡ZÈ¡ÅMŸú¼0*RèµïÛ"©?�H—®Þªhg}òìEõ¯‡LM�Êš—üÃu(~8¼žü]È0[×v¡| ñ}Þ®]»4çøÀ÷6žŠÇ�©ÕDYZi333dZ¬]`#Ã}›±Á[ ÅÜ‹MØøIúÆ3DÊ’ÿ`¢ìH.“$ñIT±ü~ï´¤ˆ$ÌTø9`Õ«SX©B]›ù=z„ÕY}}ý ;cÍŸvñèD¬cøBÁº]«V­°fƒ €•ѬO#$î&ݸqÚ2 f�ígJ9¹@ÑWi¨ªhÚÈyîB%¥rÅŠifôƒ:µ»ó e«ôµµbããW TÛºüé{÷{.\5°é—…DUvÉÀ~�ç,(ed4¬e³a+=^¿ù9f^¿^x´kÝÚ}//W¬¨ôLTM+ÙOܺýÏÞ=¬S‹ÉRמ<[q䄦šªS�jég�fÁšU®Xy¤Û®ßÿuêڡ͹³ BIDAT›]¹öÈÍÛ#£æ§Î=ë‰üª¦)Çs¦ÉÀY¤_!u·gi¸’B]U5ÔBwîÜ)=¹¢ÖªÓôÜ´i*løéÂ[wÆŒÈÀB–²yQ+Ì+›§µ@}ÉV<¼Ÿ ”OQ,Ͱ'ž)>)¨§Ißêb¹8³y¡3ž>ŠÆÈNâ6#|T¥¯ÄŠ(&›YKÿdñ£¾k×.Ä'|TQ«ß˜Š“ØÐ öIÿIÄâe±¿’ìRI Áf‹ôK›áóÊ ©V­ZXwÁK$½"6ç£1ÃEýª ßE¨["l£8_¶lYT>  }(ýkˆ— ,¤Ë#}^YÃw¦ôååJ•*áMŽ­6²ß‡Ù|sfø6øv#FŒ@…ö¯¿þÂD…YÈ!Œ… »~ýzi ¶) ð‹O\1�ÏP@"-cå‹S‚ã#’q«ŒHù½6oY`y©À.ÇS¶O©j)ZwÕÙÛþ½zÁ/{­ZªFúK÷ñGšÍlš(ó i¨¬WúK§Þ¬B'†ˆ‡þ¶Xk$䜳SëYó–Ÿ»p5úsŒëo){^¸Ž°m×Á‹WnØÛZ¿|å›õèêê-šÖ3ñOU¤hëò¹}B‚•-¤`•ŸåÄM_X>zô(ŠÀ¸ëëë+®¸#<£[BBÖhß¼yƒ»²ë£>|@Ü•žPçñãÇAAAÍ›7O³’‡h�-gÒòr.êT«j­x^â®ÅÈÃb;J¸ëFÃ@³û'Žû'�Ç3{v‹GÉBIIÜwzè/źãÓ¿œšu«ÛHtPUþòíÔÒ¡2¯�Zø[ZU­Ò¡²bºY·m%©uB±gúYŸžùÿ}Ñødõÿ3¡ø�¶¦æ‡WûŸ}IÒOäg�&g�~3ƒÕeTùP(C�K,-BÆ ׬Yƒj$¶Ý¢Ž'VñæÁz6Ò/Þ¢—.]’=­Q†°Š/H™5¼QQ�«]»6ÖÝ‘µZ´h!͇itíÚuåÊ•;vÄG‹çã“é%ÐPnÅOì‰'ijdaúNNNYÌ ¥T|.Ú¶m{ûöm|NQ¢\·næˆOf*¶€É"x#ùãu�¾+}²×¯_O³ ¨ "¨ ‰a@¬cªîø\# ¢,~lQÂÅ«Š_÷ 6dq#„Xü½ðý€ÅÃk‹¿‚x -uÎ  ¤¡ä;nÜ—“™§^™Mzl›„ >{ö ݤ/¾¾ð‚àYcj¨�ËN3ýkˆ— ð?Ê­økâeÏâdÈ¡©°^…?1B¯x3V•ðfîÑ£ÖÌd¿ÓÏ+C¾ ¾þvxq�cñjàË?§/,2³‹‹ ž,*Éø„¢b�m(°à#‰¿>>ËOž2bOl‘}^øV”ž0,³ye(÷Á·ÃŸ/#掭0&&&â ›ákˆ[0U`` 6g`[^Š+†Ð‹§€W ¼Db¶ß¸qãÔ©Sñ÷ÂG5‹³©“ >ÿ«¥X�”£E¤¹4òƒäܸ º3ÿu±`E•ÿ§_‘4ýfA!]—´é7å\)‹$ËÐ@ÿƒ€� ÙU{[«#'ÎMš¹¨@ÍÖÍ Ù€7Xúô‹Ùa¦‘ lÆM¿вr.ÔY1‘\O¿ �»çÔ"J›mP¢Äª§¢Ÿ’Ò+e¥ˆ¼ª'ê$&–’ ö‹µ7¬,f'?é[¢˜±�¾oýÍK—r¯@†G8È^I„UUlîJ—xM£4�É©rqÏ·Oqñßù×Ö*¡“;»üåOH¿~‘QuŠëªåíñxñïï‹Õ`ù ¶†¨“¦¤)¤nšIá™��¬…gó÷ |Ô©¿ú按‰Á:Vv®m ~“èdtVˆô"##Q L3÷ìÏKüâk‰RØÂ�Okú•ñ ‹óÕs.âÓ�Â]š§€/l†�žÙ+kbFJÓ(žõ=WV5¤ñr}ËÕ}3| ‘ëðåœ~m&Ã×Ë {Т£ìéU*V¬xðàÁ+W®ôë×Õf¼ßÒœFÛ ð÷JŸ]³ÿ÷Êð)|#<#,j6ÿÜ™Éðm�áÇ–¾QÜ'Áï’ k&hÊñ5xsYrJúýôF(^[P“ù;GFFݺ{ßÄØ7!ï!ýâæPÉ^<ŸÑÏ@Žõy`Ê¿¾gþ… û„…DóšòCí·¬^Á¼N¿ßßü+V¬˜?þ¦M›xíPúu‰8Í^ñ¨Ù®_¿~íÚµ÷îÝûƨI„ úLˆ~8Ô~ ,ÿ•~EÈÀ¯Þø†„~òj¿¥ÌJ0ýÒOEŽõyLDÿ‚Øæ`Ä iüÇ¡˜éïï�zZš�ê‰~-¥J•’^ùI uÔÕ/]ºÄôKß�Ó¤ªð3Cµµ±ˆ(ÛX¦ü‹`""""¢_—ëó< å ÀDDDDDD”/0Q¾ÀLDDDDDDùÏMyK¼PmRRRâË$ÉÓD!LÈ+z‚r9%¥ÒŠ �J """""’ÁLy Ñ7)")áV¢)¨˜*+”É«\š™œô&)þ�DÅAIQGQIII """""’Á] )o!ÿ"ý* *–Ê ÚyX•ÅÄ•L•0#Ì3ˆˆˆˆˆˆþ�˜ò–äEJúE4¾‹”E¦ÌT """""ú·o À×®]oïÔÉȤn .ÂM ’‘䓬¨ó]·³(›*a¦ѿɟLÄ苆÷{îÁ  ºç]öõõÛ·ÿ€@¿–0!O÷|N/evywª-"""""úeÉ€‘re£oõêÕpssuqs� ,Vƒ¿:§ŽÎî‹—JïN�6½ªc ÿÌú{y{Ï›·@øŽž~ürLghhè¢EîÓ§NY¶dñƒ]ÝÆŠí‹—,Ûë¹oêäIóçϹxñòô_ʉoß¾›1sv›V­¶nÝŒ»ÁÁ!kÖ®344زi#f7tØo‰‰)§ F±z´«[çÎ�¶lÚ ‘$öí; !!¡[×.]œ;/^ÌÃcu½ºu2›KXXX÷î=ûöé}ñü¹Æ�uïÞ+66V l¸ñðÆå;—oY|éî¥á݆£å¥ß g—ÎN�;X~ð…ïó³F qù¤:Z:ƒ;þcàxÜu›çjfjvfãÙºu»�éÆ+Q6) ?Òïë7o455‹ššf§Ttô‚ùóÊ–µÀp‘"Eê7l<{Ö ==½å+VlߺÅѱ*Ú—,^ÔªuÛÉ“&(+§<»¾½{õîÝS:k«ò#~KÉZåË—Ûµ{ï­[·«Us\¹jÍÐ!CºvqFûŠåKlí+ß»ÿ ªCc kk!µü›á\þþû¹¢¢bóæÍµµµF�ѹ““’Ò~Uý&ô5)l‚Ú¯}y{M M´»x¬lIËA�cxÂà‰�Gwò˜îagi§¢¢R²h) ³”¿û‘UGÅÑÕTÕ–o_îçï‡<,}ÍŽjH¿Û·n÷Çø©Ófü9{æWûÔÕÓ¯�š`µ xúô™±‰qtôç}û;~í’„„¸øø/^ZZ–Å] sÙ)”-[VPSS+Sº´¯¯ðÙsç|ý|ÃÃÃŇPÔõöòFN³¨Î¥B›R¥JÕ©[¿uë– 4¨Q£º‚Âw=éñ¯Ëûè` L^:©Õ�V¯Ï¾ñ~á}×ûŽq-#4F}ŽÂÿ�!�E ‹È޵ï´ç\�¹O_=�‹�Ã]V€‰ÙŽ®IDATˆˆˆˆ(›¾ëZÓëѽ[ƒõ—/]²eËÖS§ÏdØ'Yæ’®ªªª²©¨ªÆÅÅÅĤ)Z¼x1cdaãâÅ‹�quA=Vì“&Ž*+)I‡e*if&ŽŽF·¶±J³™Í%â“'ŽNœ8>00¨{ÏÞí;tÄ" ”uêùû†¢ÌÛ¨z£�7Ãp‹œ€›4ý&'§݈èˆîcºvv+üÙq�ˆˆˆˆˆ(Ûò°\½šãWû˜˜¤«:d´‹Û_çN)R €æ›7¾Ò> ‡ƒ‚ƒ‘3‹)Œa”jË•³444TQVFõÃb·äää•aQ®S§v¿¾}Ò�ž˜ø¥ÀhanžÙ\PLnß®-nX$Çj5oݺ]«VM�¾æ}Ð{¼†¯Þ¾œãñgQ£¢Æ…ŒëW­ÿçšÙg®�©WµÞ†}Žœ?|xå¼ÈƆÆWï_mר=6C$&%ê$&&.ß¾L """""Ê6y*Àn.£S¯„”é•~ñ:T¯VMȶ±cÜŠššüöÛȤ¤¤òVå}ýü>’��pâä©›·nK»©©ªº�瀛«ÛX‡*•���UTTÚ´i=î÷?|}ýâããW®\mec—£3Qutê°È}Éí;w$ÉÅK—K›[>x�rÕY„ÞçÏŸ?{æƒöÌærüÄI  ��’ÉгdI3�²¡F—ê%šµÖF’(�ìu¨à0×mnŸñ½µ*@*ÝËEÜÄ0¼ÛðSWN9�tBAxD�‘Î.ÎF5‹hij DDDDDDÙ&O8õH)Wú¯,{=¤”`¼(å ÀhOs‰à¬©¨(¯\±¬aãf«V­6lÈ€þý~1*A"iP¿~‹æÍ¤ÝŒŒŒ5jP£f�¸ØØŠí×®]-¶/˜?ýë7l[ºTÉ͛֫««gî]»8xÿ¡_¿�!¡¡ºººÓ§M±³³R+õk×nÚ¼åÔÉ“z÷î™á\7jx­m›&ÍZ œ+«¨,X0O¼˜eÁ¶¬müã„ ì<$eçˆ0==ic¯v½qCíà Æ.˜1r†¢‚¢šªÚôÓ"""""¢ìQH–=Ä6‡Pé3°Xì£oJ1Á$AÛFë«=Y&""""úuɱ>ÿƒ/ƒDÿyIÅ“ $!” ßf$IJÄL"""""¢c¦¼¥¢¢"±‰OH” š&Gæáî˜xÂ3 f„Ùa¦Ñ¿}¿S)BMÖKŽ­+ñSRz¥¬¡$ä�D�ÄÄÒÔ~ÕÕÕ€‰ˆˆˆˆ(=`Ê[*© ( ‚½@DDDDDô£ph""""""Ê€‰ˆˆˆˆˆ(_`&"""""¢|�˜ˆˆˆˆˆˆò`""""""Ê€‰ˆˆˆˆˆ(_àe�(o%§JJJJ|™$yš(„ yEOP.§¤TZR DDDDDD2€)o!ú&E$%ÜJ"Se…2y•K“#““Þ$Å¿‘¨8()ê(*)) DDDDDD2¸ 4å-ä_¤_EAAÅRYA;«²˜¸’©f„Ùa¦Ñ¿1SÞ’¼HI¿ˆ¦Âw‘2£È”™ DDDDDDÿ&Ï.Ð×®]_°È=³G«Ws¬^­ZõêÕ"T€}’UŠ|×½‘•M•|$B9�ˆˆˆˆˆH–<àöN�„Ôœá£×®ß;ä ‰DräÈÑ•+W'&拚ޡC‡_¾z%ü—„ yºçsz)³Ë»SmÑ/+ÇX̽û=÷ˆ5^ ¤¿ ™ÇcYN�Ý/ͺÏÄI“çÌ�ÿ)âSrr²ðm¶ïØùöí[!7„……mܸ9!A"ä¶ÅK–Ý»w_ø¯{èóPÕFE¼ªfØaD‡�°�,ú/ܸ£DDDDDDß@Îc€eóí±cÇQ¤o^ÞÞB®:{î¯?~ûÇï㔕¿õ„Õ3gÎ~úô™�ÿ˜01..V opÿÀƒÀ«AžK÷Ýz|söšYYôtßìþØç±@DDDDDô r€QøÅ­½S'iî7`ЀACÄÛîÝ{…œ;|øHŸ¾ý÷ìÙ[­z­zõmذ �þŽÕjúðŸ0qr�z ¤Ýð¨}Å*+W®FËÍ›·š·h]Ú¼lƒ†M:,N-66Öm̸ ¶ÑmÒä©ñññ(ØbRŸ""ÐÞ¬y+ô™:mú’¥ËF»¸™[”»ÿÁ¶í;FŽ-]ž3f-^ò¥4ýØË 3µ,gݨqSÏ}ûÑrîÜ_Ý{ôÂ@ý†�±lpq³yóéèíÚ;]º|9ý\ħЦm{+»!C‡ã fý²ÁÁ!«W¯Õ×ÓÛ¼iCéÒ¥#>E ¨+]ž�Ð��SŽ"  ìÞ½—Q‘";wlëÚ¥‹«ë˜ó.V®RyÊä‰xtÙÒ%ƒÀ@`PPø§OÒÑß¾{÷ùsLú¹`“ÁhW·Î�;mÙ´A"IìÛw@BBBf¯É…‹—F�vm×¶Í®�ÛK•*Ù£Wï÷ïߣýå«Wýú °­`ã¹wwÍ5ÆOœäç—²_7B~÷î=ûöé}ñü¹Æ�a±±!@ø¹Ýxxãò�Ë‹·,¾t÷ÒðnÃÑòÒï…³Kg§Æ,?øÂ÷ùˆY#и|Ò -�Á�ÿ1p<îºÍs535;³ñl]‡ºÝÇtã�ˆˆˆˆˆ(›¾u¿bpu› I9VAÊZX :XÈ9IbâÂóUT”íííNœz¼×sߨ‘#öíÛokk;95�£ed”¯1ü÷ßÏ›7o®­­5zÔˆÎ�œ””rá�›§úMèkRص_ûòöššh9vñXÙ’–ƒ:§¼…& žØyt'�év–v***%‹–²0³@û‘UGÅÑÕTÕ–o_îçï‡<,}M.d$MMÍOø–³T•*YéW¶¶²òõó˸[©’Òƒ�ÕÔÔ”•UöìÙëó÷sTƒ_½~�öÎ�;ŽåòäéÓ†õë·jÕÂÐÐ0ÃIYX˜ _ƒBtÕªU�~ŻڷrHv.gÏ�óõó ï¢fëíå�Yöòòî�š~EU*WF ¼½ŸT©RIÚîXÕA À*Ø”*UªNÝú­[·lØ A�Õ¥‹ýÓò>ú“—Nj5¤Õë³o¼_xßõ¾c\Ë�QŸ£ð`H`Ã"²cí;í9×cîÓWOãâãp—`"""""ʦ\Àòíöœ†’òÿ/›Ur“yèåË—mÚu(giéXµjQSSi{G§v¶öí?°uÛö)S§­Y³ªYÓ&LIÈt.ÒN'$$ c 9${¾ê4sA5Û$µd c\]¬m¬2›êÛªjjÒ»jªª±±)yOGG'""RÚ.nz �“'Ž;~âÌ™³Ý{ö¶·³Ýµs»šÌ~fuêÍñ˜ˆ2o£ê�Ž­9ž¾OrrJÐ�ˆŽè>¦ûŠÉ+{¶íé÷ÁϲyY�ˆˆˆˆˆ({rg/Ùô=ºvýºô á¾r¥/X饉 hþt‰D’ñ}ªUs¬S§v¿¾}Ä»ÉÉÉYD}+++Ô‡ëÔ®õeÖ^^ÖÖ)û�ÛÚVX³ÖOMGGÅϽ{=¥£ î¶o×7Çj5oݺ]«VMá'ö>è=^„Wo_Îñø³¨QQãBÆõ«ÖÿsÍì3×ÎÔ«Zoþ GÎ>¼ò^%cCã«÷¯¶kÔ>&&&1)ÑPÏ/þòíË"""""¢l“ó2H²Ú;uJsCã‚…îF&Ųs5`¹è¿ñõõó{‹Pä¾xipp°ØÞ¨qÓ‰“¦ ‚Šú-¢lÉ’%Åv ó³gÏÉ–O¥Ê[•Ç„>‚QNœ¬åܘØX]�ô}úôI[[[Qñ_s¼t‰‰‰Ò“rEFF©¨(««« _Š*n6ORõ)õ¼ÓÒ»/_½ºqã¦sçNJ©µßéÓgÞðàÀþ/;B'%%…‡‡câÂO#zcŒj•Gý�âo'è£ñÕnÏ_ú–(f,ä„ï[óÒ%"""""úÑäXŸ—¿ŒÐëæ::‹( y/³ éèd¼lféTSeø ¶é‘`¥é´µ¿rI$)!ÛÒr}=½ yîÛ_աЗד[·n­X¾Tú("úO•~!¹`rrd²‚ö÷;%5f‡™ DDDDDDÿ&˜~·8ðúÍSSÓzuë”)SFø‰E>ŽRòQV±ü~%N|Ÿ˜`’ móõí¬ýº¾k˜~·{É\"ø'—T¶Ûì5³ýîžYO÷ÍîE ŒlËÚ DDDDDDò’§|íÚõ4éWñ: [ÖÓQTP,Q¼øæ-ÛdwîÚ]¼x1å/É<99yáB÷ZuêUu¬1uÚt‰D‚Æù .\´ØÇçoÇj5÷í?ðîÝ; œ?¡n½†Ý{ôF‡N�Ï_¸(NáСÃíÚ;•µ´jïÔéñãÇbãÛ·o»tínQ¶|ÍZu·nÛ.Ð� §£‡[�*ujWª$6ž¾zºv�ÚEëšöŸÔ?&.-5»Õ ·plŸñ½q×çµOã~�  *¶·Gg�ˆˆˆˆˆ({ä Àׯg˜~ïܽkYÎúè±ãxaqïè¬9;w¾rõ*¬x7)) q´W�Ò‹—,Ûë¹oêäIóçϹxñòô³ÐØ­k—.Î�‘“=1k—OZ¡£¥3¸óà?ŽÇ]·y®f¦fg6ž­ëP·û˜n¼âe“<»@‹åß4�H¿Ý»÷ª_¿^³¦Mp×Íe4*®_�”��~‹æÍzÿø}î^¼x %_LdÎÜyBjùwùŠÛ·nqt¬Š»K/jÕºíäILRkhhØX[£ýÓ§ü?}ÚT{{»4Ó_³Æ£ß>}ûöÆ0Õ××G6ÖÑÑyöÌg„ñ¦©îÞ¾¡®®.Ðw×oB_“Â&¨ýÚ—·×ÔÐD˱‹ÇÊ–´Ôy0†' žØyt'�év–v***%‹–²0³@û‘UGÅÑÕTÕ–o_îçï‡<,}Mް¸csšò¯4ý®\±Ll Fgq ={öè?` ›««ŠŠò¦Í[zt令ø¥.ýúÍ›èèÏûö8vüîJââã_¼xiiY6ýt,,ÌÓ7>~ìÕ»WOé]”ˆÅ'§ýúhÙ¢yýzõš6m¢¦¦&Ðwç}ô 0&/�ÔjH«×gßx¿ð¾ë}Ǹ–£>GáÿÀ�À"†EdÇÚwÚs®Çܧ¯žÆÅÇ ©{ DDDDDDÙ�;hݹs·lúÍ‘ªU ô Nž<éïïñÒå.ÎÎÒ‡bbR-^¼˜‰±1nÅ‹ãꢭ­•át2¸ÖNBB‚²ŠJúöE çoÞ¸UÇÉS¦Uu¬Ák&ýXuêùû†¢ÌÛ¨z£�7Ãp‹œ€›4ý&'§݈èˆîcºvv+üÙq�ˆˆˆˆˆ(Ûä< tšÒîÂó„oЫg�M›·>óñiÒ¸Q¡B†?~Û-ÌÍU”•6hP®œ¥Ø’œœ, º‰‰_/ýY[[=|ø°^Ý:âÝ¿þ:_ºté%Šc"5kÖÀmúô©-Z¶Þ³w︱cú¾Þ½ÇôÕÛ—s<þ,jTÔ¸�qýªõÿ\3û̵3õªÖÛ°oÑó‡¯<‚?–±¡ñÕûWÛ5j�m"‰I‰†z‰‰‰Ë·Ë³Á…ˆˆˆˆˆò­W€‘{q»vý+gx/üÕýŸENN<|àá±IX¶]EE¥M›Öã~ÿÃ××/>>~åÊÕV6v±±±Bj6~þüù³g>ây¡3Ó¹s§åËW^½z cíÞ½§GÏÞJJŠÁÁ!%K[8xé+,,<""²TÉ’}w5ºT/ÙЬͰ6’D‰xd¯C‡¹nsûŒï­U±Rñè^.âöŽá݆ŸºrÊi¤ Â#zŒtvq6ªYDKS[ """""Ê6y+À×o|µCúeeF[[«m›6·nßN˜ÌŸûÛˆQõ6Љ‰-]ªäæMëÅVU«æX»ví¦Í[N�<©N�Ú™MÙ©Cû÷ïßö[pHˆ��þêU+Š-Šö9³gŽŸ0i̘qÉBrgç¶mÛôÙ–µ�œ�áCƒ�‡¤ìᦧ£'mìÕ®7n¨ýbxÁØ3FÎPTPTSU›>bº@DDDDD”= ¨‚ 9—�³[å"”y£¢¢ ,˜¾]II)ãÓO?zhh¨žžžôœ[”¢7ƨVQ¾¯øÛ úh|µÛó—¾%Š 9áûÖß¼t �ˆˆˆˆˆ~49ÖçåÌ~ß3ý‚²²rúø*¶g'ýB†£0ýæµä‚ÉÉ‘òld‘Ž‘É˜©@DDDDDôoŒ”·’Ë$IÞ' ßQRDf*ý0å­¤â‰I’¿WÆŒ$I‰˜©@DDDDDôo À”·TTT$6ñ ‰DÓ<ÝOx&ÁŒ0;•ï}Ô1ýüä< 4Q6!‹&ë%ÇV�•ø))½RVŠPòF¢Nbbi j¿êêê ÀDDDDD”0å-•T  Á^ """""úQ¸ 4å ÀDDDDDD”/0Q¾ÀLDDDDDDù0å ÀDDDDDD”/0Q¾ÀLDDDDDDù0å ÀDDDDDD”/( 9÷ØËkݺ�ÉB²x·d‰£G�Ä€û⥯߼…þýûØX[ DDDDDDD?y*ÀH¿Ÿ?Žù#ÞæÎ_pôØqÜæÎ›/mDt¾‹øøøM›¶DGGg³=×?qòÙ3�ˆˆˆˆˆˆ~bòT€ÅÚ¯ÇÚUâ]#“£ÉIIâ°´qÀÀÁÂ?%âÌ8ut¾rõª‚‚‚’¢bùòåªT©Ò³G÷²e-„BØþ}ü„Æ�(P ;í¹nÍšµmZ·¶´,+ÑÏJžœ…#GŽæ¨ÿ¸±cF�!‘Hž?qüø‰–­Ú¬^µ¢AƒúQ®Êµ“`ÙÛÛé,8`Ðñväè±Ê•+es\eeårå,]]GØâ¤)bã‡zõîkYÎÚÁ±úœ¹ó’“¿Ô“W¯Y[½Fm´ãÑ€À@éDž¿xÙªuÛ²–V=zö —¶¿~ý¦½S'‹²å{öêããó·´ýà¡ÃmÛu(WÞí÷ï?�¶oÞ¼¥Víºæåð¨tÇæÖmÚ¡»1ÜMH�`9í+VÁ²¡]ö¹d¶xDDDDDDôcåZ.Z´èÓ'�>¼•Þztï&äPÓ&�ßøúFFFaxà ¡ªªª;wl›ðÇï›7oݳg/O�>³lùJ÷E Ž9¨¢¢2z´«tÜù󺹹.^¼èÍ›×Ò ã~ߏóŽ[ÕÔÔúôí•2ñ /�íÚ®m›];·—*U²G¯Þïß¿ۧ͘åêê²g÷N<£î={‰yûöÝŒ™³Û´jµuëfÜ�5{öÉS§fÏžé¾pÁÖ­Û‘½ÅnY,ýXòì­€)Gùù‹bJ�þö³@—-[VAAáÉÓ§Uª¬Y½¢pá"**ʨ-_¾rõæ­Û�;wòö~Rª¤™ƒCt[¹bYhh¨tÜQ#«S»Þ½{·nÝi{¿¾}::uÀ€Í2몎5.\¸Ø²e �uôïÕ«'Úmm+<|ôx¯ç¾Q#GT´·¿s뺾¾>Ú'Nog_ÙßßߨØwûöîÕ»wJÿÄÄÄ�›¶lÚ°®^½º¸kaaQ±Rq^Y,ýXòT€‘l555545ÄÛ¸±cZ¶hž+g�ÿ”””dhh€aƒ³çÎÍ›¿à�?&lÛ¾#88�-š7{ö̧IÓæÛoÞøŠÑT$={–µ••lò¬ZÕA@ØÆÆæé³göòò®"³‡v•ʕтí��Ðõ6N�6}Ú´h‘žDÚÂÂ\xýúu\\\•*•Å»… –,URÎbñˆˆˆˆˆˆèÇ’§Œºî’Å Ó4Š'‚–9 ô�ä¯�:=ooï4Kš™%$$´mïÓ°AÄË"… «ªª©)÷Æõ+ûö8wî/d㡃Mš4AWIIIPTÇCvõIDATüWªWSS•Ž��쪚ÚÿÛU¿´9rÔÅuLýúõ¬¬Ê›šš8xHÚE]q 6.³PQQ‘]ÈbñˆˆˆˆˆˆèÇ’§¼eë6#“bÒ[¹ò6ïÞ½¾Yllì¼ù /ïÝ»ÿôÉÓ£‡Mš8~à€þ5kÖPVþ’ÕQFËî];<Ö¬Z³Ö#>>>ëÉ>zì%$''{{?)WÎÃVVVÞ©%_Ñc//k딳[mÞ²­wï^kV¯ñÛpdï 'han®¨ ðäÉSñ.Rºô`9�ˆˆˆˆˆˆ¾yðÝ»÷Zµl�€'ÞÂÂÃeÏ¢œ#?~|õúõ³g>;vîêÒµ;î.qO©-èÇÅÇß¼yS"‘œ>}æÌ™³bÿI“§¶jÝV<ÉóÛ·ïLLMTUU³žÅ¢EîÞOžDFFÍ™;ïSDDíZ)Ç wtê°dé²›·n#uïÚµçÂÅK-[¶çûðáCt �5ûÏ 'ˆ96kÖì� ß¼ñE·1c—‡åX<""""""ú>ä¿p«V-¿ "ÈËcÝzÜ”­­­Ü-444D{™2eFŽÞ¯ÿÀÄÄD”;vt I9…Ù#GÙT°WWW726Z½rÅWgáæêÒ£Gï€ÀÀR%K®^µ¼páBhtvîôþÇ�‡„ }Ų%ÖVVh;ƵwŸ~åËÛhiiÍž=óè±ãNsá‚y ®U».ŠÕ£F�¬`óå\_r,} ÒëëfßÈQ®Ÿ?–Þ=rôè:�5è?`P«–-¥íšššéΑ„„ÌHWW7M{\ŠxílNÏUY==½ô¡Ø««£“¦1,,L[[[ºÓuf¢££ÑGMæXbù�~”ç/}KËÙ‰Ê|ßú›—.!Ñ�&Çú¼ÒÔ©S…*ZÔôñcoee•T-[´èÕ³»……¹’¢RÔçh±QUEµÿ>E ¾�’’J©éÛ3Œ�YPPPÐÐÐÈð!õŒ¦ƒÎiΤ•!UUÕ CrN�~”�aŸ êæl;ŧˆ(ý‚ýhr¬ÏËS&úo`˜ˆˆˆˆè×%Çú¼<'Á"""""�ˆˆ~5 ÀDDDDDD”/0Q¾ÀLDDDDDDù0å ÀDDDDDD”/0Q¾ÀLDDDDDDù0å ÀDDDDDD”/0Q¾ÀLDDDDDDù0å ÀDDDDDD”/0Q¾� øÚµëí�:-X¸Høqž?¾~ÃÆ›·ncxë¶í¯_¿¾ÁÇ�1ÁÄÄD�ˆˆˆˆˆˆþ+¾5‹éÿ/XèndR,G1Ø©£³ûâ¥Â7óõõkÚ¼å£G�âãâ�Z×®õ¸sçŽ —{÷î×®[¿FÍ:]»÷´°,?köœ„ ÚoÞ¼…gW´˜n%J–iÞ¢õîÝ{ÄQćŒM‹KoUkDDDDDDô“Q¾â.r¯ônõêÕÄ»n®.ÂwtãÆ�¢E‹.YüeI._º È%!!¡k·cǸõíÛwýýý;9wÕ××2x î*)*¾{ûŸ?¾|åj¿~455[µj)>ôþ�¯@DDDDDD?19+Àÿìöì¾ßs�›ëhD_Ü„”è;�bMX�×£G�{õî[®¼Më6í<÷í—¶_¼t¹ƒSgs‹r}û 8sæl“f-Ð8cæìé3g¿yýƱZÍ­Û¶£}Î_¸ˆ�©Ó¦/Yºl´‹F¹ÿZ>Ò¦m{+»!C‡û¤™ï»wïÃ?}jР¾x×ØØøðÁýÚ·KÓ ¹·IãFuêÔF ˆˆˆˆˆˆè!OFáH¿bÕ·z5G7—ѽ¨ý|x‹»rŒ\Ú½G¯bÅŠíܱ­cG'·1ãΞ=‡ö—¯^¡èj[ÁÆsïîš5jŒŸ8ÉÏï-ÚûôîÙ£{W³’f«›6i"¤äØw(Òb 88dõêµúzz›7m(]º4o´«[çÎ�¶lÚ ‘$öí;%_ÙY›™•(if6tØoè)¬§§W¸p¡ô ™œœüì™OÙ²ý"r¼ ´¸Û3*½â~Îb¥ÃâþG$’owèýû”(Q|æŒi¶³³ Xë±®aÃûöí·µµ�E>r$6.u`ñ¡Ä¤¤ReÊJ§Ó©c‡9ΈˆˆˆˆˆègòMÇK‰¹WÈ ^ÞÞ•+W’Þ­R¥Ê†�›1àíý¤J•ÿ·;VupÖ,,Ì¥ÃgÏ�óõó …y{yË`!µ¼Ïs·¯¯ßÅK—6oÞÚ®CÇÕ+—·nÝ %%%Íœ™kCCCµ´´Îž9ild$Ž¥¨¨è¹g—t"ýdr€ÓTw¥¹WÜáY¼+,­çH\\œªªªô®šªj||\rr²ŽŽNDD¤´ýSDDv¦¦€2Jš™™‹Ãc\]¬m¬2 %èž=ºãÖ»O¿ 7‰XIQñÚÕK¸zõZgç®â^ÖÿÌ%¥Ô,ÑOLžc€k÷{î¹vý†xÝ£”À¹ã./r/…ÔÃå;´•••—÷éÝÇ^^VåË+((ØÚV8sö¬˜�QŒÝ»×SÈ¡jÕëÔ©=dÈ ñæâ2ʡʿʿW®\2t¸l bmú«רQÝ¡ªÃ¼y """"""úuÈyh„^ñüÏb)¹W¼0j¿hOŽ•�é|üøñÕë×Ò[lll‹æÍ®_¿±mû ß¹{×Ý}‰“Sôìѽ›¾¾~³æ-ÇO˜Ô²U[E%%!‡::uXä¾äö�;‰äâ¥Ë¥Í-ÏÝC‡ý¶dérU”�»wï6â·aé'UÕ¡JíZ5ÿœ3oû֔㓑–«×¨-}´xñb·n\ˆˆˆˆˆˆèg¢�œœ,|³ ¥ìí2:·N…%¤å««£#½ûòÕ«7n:wZû�>}æýìÏñŽÐBêY¬PLF¾Í¬CppJÓ¥J•RQÉ�“„ÑÏéùKßÅŒs4Šï[óÒ%"""""úÑäXŸÏ�ü„……ÕoÐØ¬¤ª¯^^OnݺµbùÒF� Dòb&""""úuɱ>/ç1ÀߟžžÞÅ µmÝ*66¶N�ZÇ�fú%"""""¢ìû•vñÕÑÑîÕ«§@DDDDDD”s¿L˜ˆˆˆˆˆˆè[0Q¾ÀLDDDDDDù0å ÀDDDDDD”/0Q¾ÀLDDDDDDù0å ÀDDDDDD”/0Q¾ÀLDDDDDDù0å òà ™Ãÿ_m$""""""úá¾%»ï÷Üsíú iÜmïÔ wш‡®]».ý4ä À½n®£«W¯†¸‹»¨úâV½š#î¢7áûzþüùú oÞº�á­Û¶¿~ýF """"""’!gF¥7‹GÝ\F/Xä.|�SGg÷ÅK…oæëë×´yËG�ÅÇÅ%&&®]ëqçÎá;~yþêÕkBxòäéáÃG""""""ú¾ä À×®]ÇÍÍÕÿKw{øð¸‹¨‹}„ïâÆ�E‹]²Ø½V­šJJJ—/]èØÑIø{÷z*d¸g¯§�®ß¸±|ÅJ�ˆˆˆˆˆˆ¾/¹ðu¤ßÑbú•îöŒö”�jŽâI°Ð’�"p†=zÜ«wßråmZ·iç¹o¿´ýâ¥Ëœ:›[”ëÛoÀ™3g›4k�Æ3gOŸ9ûÍë7ŽÕjnݶ-èsþÂE L�6}ÉÒe£]Ü0ÊýûЂÒk›¶í­lì† î�áÜÃÂÂ._¹â¹g÷‰'ccc¥í~~o lYÎ:µÚü³{ùêÚ“““.t¯U§^Uǘ£D"ûcá�Ÿ8Ù½GïòÖ¶#G¹<þ�ó,\¸h±�Ïß}ßþ}/òà ÝqCúMM¼ÿ:Üeadc<*È ¹´{�^ÅŠÛ¹c ¹ncÆ�={íH›ýú °­`ã¹wwÍ5ÆOœ„DŠö>½{öèÞÕ¬¤™‡Çê¦Mš åÝ»wŸ?Æ@ppÈêÕkõõô6oÚPºti$öÑ®n�;wÚ²iƒD’ط„„ô pèБêÕª—-kaiYöÄÉSbc\\\Ÿ¾ý?ÇÄlÞ¼ñ·áÃÆO˜ôÆ×7!>eôÅK–íõÜ7uò¤ùóç\¼xyúŒYâ(oß¾›>}f§Ž<Ö¬z÷îýÌY¢±[×.]œ;/^ K[¯n�ˆˆˆˆˆˆ¾—`qÇfx>¤äOÄ`éY Åk !ã!”‚åÛ zÿ¾%JŸ9cš��m�î݆ ¼ÖcÚ÷íÛokk;yòD[Û }ûönÛ¦�Ø¿hÑ¢¦¦¦šš6ÖÖ… ¦™ZÅŠö“&MÀÒêèh¯\µfè�!]»8WªTqÅò%H°÷RËÂi ͶnÝ­[·òôÜ'6Þ¾}ÇÏÏoͪUª´hÞÌÕu´ØŽòïò+»/lР~íZµ–,^´yói¸kWgL¤F�ê®.£.]¾‚z²I c ,­¾¾¾@DDDDDDß‹² äÛ¬;d}–¬,xy{W®\Iz·J•*6nÆ€·÷“*UþßîXÕaÛö_�š……¹tøì¹s¾~¾áááâݰ°0o/oZÙþ¯_¿¹{ïžû¢(DW®Tiâ¤)(##W{?yR®œ¥–––ØM:Öë7o¢£?ïÛàØñ¸+IHˆ‹�ñâ%ªÇ©s·»YY[ÅÄÄ£ö+Ñ��ã,^åùÅ^7×ÑbXäæê"î�‡¤�…Š‹‹SUU•ÞUSU���C¡UGG'""RÚþ)"";SSÀ?%ÍÌLŒ�Åá1®.Ö6ViúïØ¹ ÿ×®[_Úâ¹oÿ�ÁÓÌ="òË0b-þG¬UVR–ãá‡IDATNV[ûKNVVRÊp1ˆˆˆˆˆˆèû“³,¤ÄÝ/Çú"÷J¯]¿ŽÆýž{0 ÈÅÊÊêÞýûÒ»�½¼¬Ê—WPP°µ­°f­ÇïãÆêèh'%%íÍù)š«Us¬S§v¿¾}Ļ՘lš>‡Y¶Ä½}ûvâÝ 7aFÀ¶*¼xñâÑ£Ç*Ø }÷î=b sseå†  >œÅdÓHLLˆˆˆˆˆˆèû’ç$Xn.£ÅË É^úHö’H)§€^èžæüXúøñã«×¯¥·ØØØÍ›]¿~cÛö¾s÷®»û'§èÙ£{7}}ýfÍ[ŽŸ0©e«¶ŠÿW³¯£S‡EîKnß¹#‘H.^º\ÚÜòÁƒ‡²nݾجYS¥´iÝÚËûÉß?/_¾\Ïž=:wéæê6¶Wï¾wïÞGQQQiÓ¦õ¸ßÿðõõ‹��_¹rµ•��ì¹£ÓCf~þüù³g>ÒC…‰ˆˆˆˆˆè;�'Ù :õWÒKÉ^I¼ RvööX·¾z�ÚÒ©¥eÙU+—£Ø[ªLÙ>}û÷î�àÙ=ÕÔÔöìÚ1â·aȥÇ2h �C]»8÷éÕ³_¿�ÅÍJ2lú´)vv¶²<=÷7¨_Oz /.\ÈѱêÞÔSa¡ÿb÷…ZZêÔ®½vÍ*iŸóç)R¤~ÃFf¥ÌwîÚµyÓzuuõ,…èÚµk7mÞrÛ¶¯ÃLDDDDDD¹E!99YÈ9¤ß‹RvuROþüϾУÅÝ¡ÅóBËî-‡Oº::Ò»/_½ºqã¦sçNJ©µßéÓgÞðàÀþï ¡¡¡(&uGeYŸ?Þ½{oË–-ÄMŸ={®ß€A>O½¤Yåܨ¨¨‚ fs‚è�'’£e \÷ü¥o‰bÆ9Å÷­¿yéýhr¬ÏË °x•#Ä` ‹§ÂBîEØÍ%åØ`Ù“cÉG6ý‚¾žÞ‚‹<÷í¯êPÅËëÉ­[·V,_*ÈÅÀÀ@È!MMÍ3gÏ®[¿¡i“ÆÁ!!gΜE Z¶Ò«¬¬œýô+öˆˆˆˆˆˆè;’gh!u/hÔ{¥»=‹�©g�vLÉÀÿ\&7ééé]¼ðWÛÖ­bccëÔ©uüØáF� ßѶ­›ÇŒqUPT,UªäúukÇ�#ѯCÎ] ‰þ¸ 4ѯKŽõy9+ÀDDDDDDD¿`""�ˆˆˆˆò`""""""Ê€‰ˆˆˆˆˆ(_`&"""""¢|�˜ˆˆˆˆˆˆò`""""""Ê€‰ˆˆˆˆˆ(_`&"""""¢|�˜ˆˆˆˆˆˆò`""""""Ê€‰ˆˆˆˆˆ(_`&"""""¢|�˜ˆˆˆˆˆˆò`""""""Ê€‰ˆˆˆˆˆ(_`&"""""¢|�˜ˆˆˆˆˆˆò`""""""Ê€‰ˆˆˆˆˆ(_`&"""""¢|�˜ˆˆˆˆˆˆò`""""""Ê€‰ˆˆˆˆˆ(_`&"""""¢|�˜ˆˆˆˆˆˆòe!çæÌ_‡SãæÍ.TwwîöÔÖÖjÙ¼©Ø-4ô㲕kF ¬¯§wýæíó. <@WWG|tõÚõ¶lª9:ìØ½÷ï¿_ÈN¿@�c\F¡�ë¨áÚÚÚýÔé³}zu/Q¼˜´ÛÁÃÇ<|ôÇXW55U±ƒô!MMͱ®#""""""¢È€¡E³&––‘ˆµÛvìv9ü«£ÄÇÇ:z¼g7ç4ímZ6OH�$$$¬XíáÔ¾MQSSA!ã)ܽw_€ãã�~e-X°`ï]¿ÜÉd DDDDDD”oɹ ´ººš¶–Ê¿5kTC ÿôé«£¨ªªúù½½wÿašvÔ{ ÔÅ ÃZZZ)úºÎñÑcoä^ñî“§ÏÒtPRR§“Ùˆˆˆˆˆˆ(?ûÖc€ƒ‚‚‘lµµµ¿ÚSO¯`û¶­N�9)䜱±qÉ’fOŸùˆwQþ­_·¶l”‘ß½{/ÞBC? DDDDDDD2äÜúÖí»Ï_¼ŒŒŒzãë× ^%Åléòå,{=9rôD·.�„œ³·µ¹ÿà‘mëððO��-š5ùëÂ%飑‘‘[¶ï‡ÍË”êØ¡�@DDDDDDô9°¶¶–¾¾~@`PÉ’f5kTûÿÉ2ƒÉÉéGlÙ¼ÉòUk‘c…œ+gYöøÉÓáááy•³´TQU‘}T__ï·¡ƒ""""""¢ŒÈ¹ 4²hÝÚ55¨÷úõ›À `±484TÚ'ôãGeee]Ù (дI£CGŽ…ä|/eÌé÷ÁÃGí*DDDDDDDÙöMÇ›—)mbl|áâeñn™Ò¥üÞ¾½uçnl\\``ÐÙsÌÌŠ+))¥ËÖÆÚ¼ŒD"I’…²·³½rõ:¦Y¬XÑ4a‚AÁÁâ-8$D """"""’!ç.ÐRujר¹ÛÓ? ÀØÈ¨t©’Í7úëü¥ã'N+(*˜/Þ¡m› ÇjÙ¢éŠUBÎ/VTGGÛ¶‚Mú‡>}ŠX¹z�8ÌëQ ©û-0Á°ðp­TUU¢ŸØó—¾%Šçhß·þæ¥KDDDDDô£É±>ÿ­àôôõô""""""¢ŸÉ·^˜ˆˆˆˆˆˆè—ÀLDDDDDDù0å ÀDDDDDD”/0Q¾ÀLDDDDDDù0å ÀDDDDDD”/0Q¾ÀLDDDDDDù0å ÀDDDDDD”/0Q¾ÀLDDDDDDùBîàk×® DDDDDDD?±\À .jïÔÉȤ""""""¢Ÿ’² Ù’ï‚…în®£Å�êÕªIÛ«W¯&ü'øûû_¼xÙÙ¹“�K¢¢¢¶mßѳGwMMÍ ;øúúݹ{·Cûvé:tè°µ�uéR¥""""""Ê y*ÀbÉWzC r¯}eÛ¿Z®ß ±�­}RRRšöÁC†¡ž,ü4^¼x9mÆL!÷øù½õðXÿþýûÌ:xy{Ï›· Ç/YvïÞ}�ˆˆˆˆˆˆr(ǵ_±äðá­x“}TÚˆò/ºe}lpA½‚ÁÁ!çÎý%ÛrðÐaá?­|ùrwïÜ477ˆˆˆˆˆˆè{ÉqF²ílXJÚˆè+öÌbRŠ Š%Šß¼e›lãÎ]»‹/¦¢üeßì>ôêÝײœµƒcõ9sç%''£ñÝ»wŽÕjÞ¼y«ió–ö«Ìþsî§OŸÄþhlÞ¢uió² 69$¤×o؈‚s9« 3gý¹zÍÚ?ÆOÛÃÃÃG»¸ÙÚUjҬŶí;¤ý¯^½ÖÁ©³¹E¹¾ý„……¥_øiÓgü9g®ô.¦9r”Kf |øð‘>}ûoذ K»råêÀÀ ,ÿ§ˆˆÌú‹Î_¸X«N=ë vXÂèèèôˀɶiÛÞÊÆnÈÐáþbcll¬Û˜ql+b^“&O���ˆˆˆˆˆˆH¾] ÷{îúÍ¢/º _ãìÜùÊÕ«´âݤ¤¤­Û¶÷êÑCÚaà ¡ªªª;wl›ðÇï›7oݳg/$o|}.rŸuʲ%‹w/^¼„HY¿~=ÔBÅkV¯(\¸ˆŠŠ²½½Ýå+WoÞº�È'>4v¬[åJ)™ó￟Ÿ:}fÐÀêêêW/_066F£�µõö;ïܽkfVbóæ-#~Þ­k´ÛÙÙ>öò§ðø±×�;w>¸[ @¡Š¸aÃÆfM›xîÛ_ºté™3¦)(( ¿¯¯ßþÓ,yƒúõFFE=zôØÖ¶Âû÷ïŸ=óiÙ¢yÖ ì±vµrjeU_ét2ë½`þ¼²e-0\¤H‘ú Ïž5C___:âÊUk†Òµ‹3†W,_bk_ùÞýUªx{?uttÄò£ýÄñ£ ¬¥�3碞={ô0ÐÍÕ!pÓæ-=ºwSTü]ÚÀÀàì¹s�?û¶mûŽF J²0·Ê[•ß™ZVSSSVVAÕçï稿zýZÜsØÛû‰‹Ë(éˆH‰¾~~xìå…œ9gî|±5Uï'O0ðôé3‡ÊH¿b»cU‡ôeÛæÍ›�M «òå¥=utt"#"¥wŃo!&&ÿ›‹·æÍšNž8%踸8ä[iU5µ —¼]»¶'OžÆÀÉ“§Ú¶mý•þ'NËÊ¢¿ì€Šª*–*Íè%Í̤ ?ÆÕÅÚÆ ��:\8ÖÆÚ uõŠ•Ä�º‰ˆˆˆˆˆèÇW€¡WÏ›6o}æãÓ¤q£B… ?~ü(¶ß»wÿé“§^�jkkáîÇ�$IÓ9tøh‰â%öîÙ%Þ]¶|…8€"­ç¾ý-RwQ ={öœx¼.B2 °ƒ �Fh¤_~Ë•³|ôè±t²�e†eÕ¬Q=8$=F&ÅÄ“?·wêðá­�ÛPÉD�ÓÕÕÍfÿ¨¨(Ôfn¥-W¯^Ã5úr~©&ÍZ4lPŒ›«´Ctt´‚‚‚¦¦fšI¡,,žÚ*O8‹þ T¡Å¤3ª¯¯¯ðïcŒ#""ÕÔTÕ29z™DÏ_ú–(fœ£Q|ßú›—.!Ñ�&Çúü7|ôè±þ ©ÑWlA^ï±F<Ú6·¨¨¨d?L‚–VÚ¸¨¨¨8pðЦM+V a‰±SÇŽ²Ä˜Ó“#ý 9_à,ú«¨(«¨he=º��AúFm�ˆˆˆˆˆˆd|S¥Ë“2'öñù»lY‹¦M› Ñ ?™W¯_Ÿ:y:(8È¢IãF²Ô¥|‹`""""¢_—ëó¹° 4Ñ/Š˜ˆˆˆˆè×%ÇúüOq,""""""¢¼ÆLDDDDDDù0å ÀDDDDDD”/0Q¾ÀLDDDDDDù0å ÀDDDDDD”/0Q¾ÀLDDDDDDù0å ÀDDDDDD”/0Q¾ÀLDDDDDDù0å ÀDDDDDD”/0Q¾ÀLDDDDDDù0å ÀDDDDDD”/0Q¾ÀLDDDDDDù0å ÀDDDDDD”/0Q¾ðSàää䈈ü/ü"¢¢¢""""""úù( òÚ±kïßÏ_ü1ÖUMMUl¹~óö�»÷~:(MÏ9óÅÆÆIï6oÚØ¡J%t>áÒ°ÁtuuÄöÕk×ÛV°©æè ¤&Ƀ‡�¾xù:>>^YY¹ªCåõê(((ˆSkѬ‰�µU@`Féܱ}9˲âN�>÷1,¬Kg§Ìf*Ž"»lX€B… wîñôñyŽ»˜E‘"…kÕ¨fU¾\šg„>‘úöRTLÙj7gÞ¢AúánhèǃG޽ÿàŸœ”¤©©Ù¼i#q DDDDDDô“�3ÇÄľ|õ>ÿ]ÁÆú«ý›4nX®¬…8¬¡¡! Ü:z¼g7ç4�Qòõ>AlÔÓ+ؾm«SgÎEDFÊv TSS316’¶X[•oܰ~†SîÑ­ó3Ÿç>?ÏæLáƒ€Øøáƒú±ÂÂÂ%‰aºò¯¸•+Ú8|4ÍaÉX`SäyiKýºµíí*DDDDDDôÓ�gèÏŸc^½~Ó¸QýB††zºº¨5ì]¾zýêõ›âpß^Ý�ŒŠˆÃåËY>özräè‰n]:I;#¸üçÀà§Ï|î?|$wéä$, u܆ ê=v²x±bٜ龇ÅUU·Ñ#Äá×o|÷<ÿêÕÔœMMM„Œ4¬_wåšu˜låJö² \¸P!qøâ¥+ïýSr5^œF ê DDDDDDôs�'?yö,))éÎÝûýøñÚ�›_ ÀmZ5·±¶Êð¡–Í›,_µöþƒGÒmí¨è/çR.XP·”™YpHèý3›x•J½½Ÿž<}FSC3;3ýmè@mmí4�¨9ëëëð÷WTTìäÔ.}Ò¡ÌÛºE³»=ÍŠÿ?oë¤,p”8Œ˜�Iù<�:³@DDDDDD? yv�~ôØÿ+§*VÔ4885aA^ hڤѡ#ÇBB?Š-ÆFE¢£?‹Gá9V­R° Ž¾¾^f¡í­[6÷ò~zçÞ}A^&ÆFuk×lÛªerrrúÃ’e•*U¹zó¶�Ò,ä«×¾ñññ.kaŽVTP0Ð׈ˆˆˆˆˆè§‘ãýöÝ»¾½{4nX7 Á>}æ“õXŸ""ƒ‚ƒÅ[LºÓYÙÚX[˜—‘H$ÉBʱµÈ“æeJ8täÝûH•Ï|þ¾|庽mVE攓WÕ­��� N!뙆„|”¶c¦²ÓÑÔÔ¨R¹âå«×%’Ä,fפqõÔóN‹ÇW´·UTTðÜ(<ü¶\¹zýÕ›7v¶<˜ˆˆˆˆˆè'’ã] ½Ÿ<ÓÔД^àÕW˲æ^ÞO*U´Ëb¬³çÎã&‹—äMÓ¡e‹¦+VyHï¶oÛúà‘£ë7mINJVTT¬êPÙ1õúÀY¨^­ª÷ÓgÙ™éæm;¤}Ä맙έÛwïܽ‡BnfóRWSkÙ¼ÉÎÝžâ]UUÕ^=º"/^¶RH½äR›–Í‹fr1ý iNhüSAù7""²`A]ee9¯Wü�¡<¯W°`f{kÓOåùKßÅŒs4Šï[óÒ%"""""úÑäXŸÿ©ƒ%*«††¯£@*�ˆˆˆˆˆˆ~>r^˜ˆˆˆˆˆˆè×ÂLDDDDDDù0å ÀDDDDDD”/0Q¾ÀLDDDDDDù0å ÀDDDDDD”/0Q¾ÀLDDDDDDù0å ÀDDDDDD”/0Q¾ÀLDDDDDDù0å Ê‚\®]»¾`‘{f�V¯æˆÿÝ\]""""""¢Ÿƒ<à µwê”E‡k×o,XèŽ�,ä™ÀÀ Ù__¿}ûDDDDDDD‘³\½zµýž{²è€„ŒñþêÕ„¯ ±±µ8 ÿôiS¤�‹Ü—\¿~}ïž]éûoÞ²uÃÆM��JÊÊ*ÊÊãÆ�éâÜí^ÞÞóæ-èо��=aaaîÞ½›ŠŠœ/ýBäÉ~(ðŠÇŽOJJ’¶7mÚDEEEÈ¡š=zlÚÔÉ Yw^¶|ÅŠ«6oÞX¥r%EEÅ{÷î÷0(6&¶OŸ^Bþ1abÇŽTT´""""""ú¯û¦“`õ0hÀ !ÒÛ™³ç„œóôÜ·`þ\uuõ[·ïdÝaÛ}ñRt®êPé-+ÚÏ�3ûÝû÷Ò>ÇŽŸ¨U§^ÛŠ“&OMNN7oÞR«v]s‹rmÛuxöÌ-çÎýÕ½GJf®ß°ñ„‰“""""""ú¯û¦½>¼¾Íß?ûö]­ZµZ·n‰$Œd›Eç7¾¾Ÿ?vpp�mlÔ¨!nâppHÈ¡C‡/Zèåå5}æ¬rå,»vq¾pñÒ´³-œ_¢xñõ6vïÙëέ•«Tž2yâÀÁC—-]bld$ÑÝ7`W·±‰$Y¦EAtttfLŸšÍ)ìõÜ—ºã´rëV­Úwè8kætUUÕÌ:£x«£­]¸p¡Ì:ÄÆÆ.\0_[[«R¥ŠÈ½·oßA®hoçÖu}}}t˜8q¼�}ecccsss´X•/§¥Å] ‰ˆˆˆˆˆþû¾)kjjFDD¤iD‘VÈžäääÍ›·L›6Å? @O_/A’pæÌÙ-šgÖß@_?:::!!!³#�MLŒ‘~Åak+«‡� )�\uæ½}û600-˜ˆ@DDDDDDùÌ7àìWz3tíÚõˆÈÈÑ.nÒ–™³þÌ"[–³LLJzùò•¥eÙ ;()*I‡¿Þ|äÈQ×1õë׳²*ojjŠ$,QþóM8‹+ýâ!7×ÑB–özîëâÜyÁü¹âÝg>>Mš4 ÓÓÓ˰¿®ŽN©’%7mÞ<çÏÙÒÆ¥Ë–ß¼u{ûÖÍ™Íeó–m½{÷š0þw ¿~ýfÒ䩲�&&& DDDDDD”È€,\´`¡{f�V¯^ÍÍÕ%‹Ñccc�=¶aƒ‡’Ò—²­Uùò¥J—:tèHïÞ=3kñâ…:t*V´X§Nµ´ >|dñ’eÒ�!ý‡~Šˆ�$$Ìšý§´½xñbjjjÇŽŸpêÐ>‹�‰ˆˆˆˆˆè¿AÎË ¡À‹ô‹oÀ‡·Þö{îÉz 'O�VSW¯Q½ºlc›V­PÎb,‡*U-Z°ÇÓÓÖ¾RsË©ÓfÌ™=³}»¶YŒ2vŒ«¿¿ùò6ÕkÔnÖ¬©´½@�Cœ5{ΰá#""""""ú¯S�^,7ûÚ;u÷pκƛ§ããâQÅÍfÿ°°0mmmeå´o<ýÄÄÄôí”<é[¢˜qŽFñ}ëo^º„@DDDDD?šëóò?7—Ñ‚ËèêÕ« ?ŽQ‘"9êŸÙqÅ L¿DDDDDDù�<ÙïÇF_"""""""9Èy 0ѯ…˜ˆˆˆˆˆˆò`""""""Ê€‰ˆˆˆˆˆ(_`&"""""¢|�˜ˆˆˆˆˆˆò`""""""Êr|`ïg¯¢Ÿ’•eI�ˆˆˆˆˆ(9ÀÌDDDDDDô+â.ÐDDDDDD”/0Q¾ÀLDDDDDDù0å ÀDDDDDD”/0Q¾ÀLDDDDDDù0å ÀDDDDDD”/0Q¾ÀLDDDDDDù0å ÀDDDDDD”/( ßÌÛû‰ßÛ·(^¬˜•Uy�ˆˆˆˆˆˆèçóMxÇÎ]‹Ü¿{÷^ÚR´¨©ËèQ]»8 DDDDDï ã„IDATDD?9w�ŽŒŒ4xˆ‹ë˜6­Z�9}Âÿ½nÀ]4â!tòÆ¡C‡_¾z%P~ÕÞ©Ó‚…‹"""""¢’3»�óø±7ï¤Il¬­Rawш‡Ðá«qêèì¾x©lKPP°‘I1?¿·YŒµxɲ{÷î ”/!ý^»v}ÁBw DDDDDD9!OÞ±sסÃG׬Y‰Ä‹»(Ç!� ¸Šu94â!t@7�(÷ˆéw¿çÜ0À LDDDDD9"O^ä¾xØ�ÁÒô‹rÜ\Gc±DHÍÀè€n·9|øH›¶í­lì† î�þÑ>}û?qÒ±ZM;ûÊŒŸ/ÐÞibú­^½nÌÀDDDDD”S9ÀÞÞOÞ½{ß¶]ñnõjÕÄŠœ›« bɵë×Åvt@7tä…x3ÚÕ­sçN[6m�Hûö��� Û!2*êÆÍ[ëÖÏŸ7gÞÜ?/\¸8eêt�þ»Äô+‹ØÍe´@DDDDD”=9> ´xÅ#k++ñ®4�ˆºêÕÅ»btÎúÂH .Z²t™ônrr²txåª5C‡ O(½bù[ûÊ÷î?¨êPEvôOŸ>­\¾ÔØØÃÚÚÚ;9O›:YUUU ÿlaIÓ"}ïeG.\XøgGh7×ÑéSJÖœ�;;;ÿ/Ö°�a=zõ‡Ïž;çëçþå¡°0o/ï4¸XÑ¢bú…J•*"?ÿýü¹4œIå8/V ÿ{y{‹Ç‹Rö®VM¶"‡ÒÎY055­\©’ônPP°ì£%ÍÌLþÉ·c\]¬mÒ&[Uµÿ{•RÅÅÆ ô_$^.ûC˵ë×sºÍ…ˆˆˆˆˆò­`+«òE‹šo^¿‰ŠŠÒÒÒ°�Ïß ‰¥eY�þ‹,r—žKHM¿í�:¹¹ò`"""""Ê.yÎí2zÔŠU«{yI[6oÙºk×é]<„è&|ƒŽN¹/¹}çŽD"¹xéris˦飤¬ìê6688äíÛ·¿ÿ1¾aƒ è¿HŒ¾â•�Äô‹»,ÿQöÉs p×.Î/^4h¨ôRÀ Ì“>Šô‹‡Ú´n)ž¿JnýÃûýú ÕÕÕ�>mŠ��mš>eËZX[[UvpL”H—.Y$Ð20r¯xé#ñ,ÐQ¶)Èžx9û"#£ÜÆŒ9tøè°!ƒÛ¶k#žwÊËÛûà�C¨ý"ý.˜?_[[KÈ ¡¡¡úúúé÷Þ¾cç–­ÛN�8–��'îMÿy)ç¿~#WÒïó—¾%Šçhß·þæ¥KDDDDDô£É±>/çY n׬^U§N�Eî‹‘x¥íE‹š.Z8ÿk¿idÝA%•@ùw{&"""""ù|Óe�tqóö~"^¸x±bßrÖ«œ²·³ã%‰ˆˆˆˆˆ(›rá:À½ß3÷J•/_7�ˆˆˆˆˆˆ(ä9 4Ñ/‡˜ˆˆˆˆˆˆò`""""""Ê€‰ˆˆˆˆˆ(_`&"""""¢|�˜ˆˆˆˆˆˆò`""""""Ê€‰ˆˆˆˆˆ(_`&"""""¢|�˜ˆˆˆˆˆˆò`""""""Ê”…opô^Äå§QOÞÅ}’àna]åòEÕk•ÓjYQG """"""ú™È€ÿòŠr?$æ^)Ü úuÁ;jÍ™�Ñ- ×·Öˆˆˆˆˆˆˆ~òì½êtÈ;>¤I¿²ð: ›@DDDDDDôsÈq±vÓ…�Ùé)vÒØP """"""úÑrVþË+2›éW„ÎyE ßÅ…‹—._¾"ä™—¯^íØ¹KøYÝ¿ÿàü…‹Â7“ûeLNNÞ´iKxx¸�ÇÚ;uZ°p‘@DDDDD”C9«» NÓÒÂV­m�8I²x×74qÜž¨�ô}>pà€ªªZ­Z5…¼qãÆM�õ]œ;+((r‰ŽŽFD¼uûvXXî–-[ÖÁ¡Jûvm•””„ovúÌ™çÏ_Ô«[GÈ!,ÌÁƒ‡»w廉’òf�ûeLJJú}üGǪ ò Òïµk×Sn×oì÷Ü#e[ðÑ{÷{É'ÞýôçÌÆÂ(ñ;œzÉbw!/uëÚ7A^ׯߘt(„ý®ÔÔT÷éž:zý�¦REWp; fÇÎ] ùkõѹ{÷ÞO±qS§¹µmlååå úíÚ¹cʔɕ±qñ%%%\.wÞÜ9ŽŽ“gΚÍöÞ½”±ãìûjëyyÏ „LíQQÑ”ôØ¡ÒHè¤x<-‡††Ñ2 {ý† *À²}¨Ýbض½ÃÄôô ötvîÚ°zm?#:ÍË—¯Pã¥K?»4œ”¥•ÍŠ•M/#ÿ²¤¥Ñ•¤Ó±¶±=yêô»?»gÏžyûøR‡/G�KMMkº‰~ vöôúúΚóâåKj‰ŽŽ™4Ù‘í@•ðQV_p„¶eë6&ýlNZ Õ¦W@0ðçÕ-¶+ÈtÐúDŒù¨*t~GÆ·;v�8yjMÀªÍ›7&$\[÷Íjäñêrrs·nÛ°rÅÚ5gΞ�ˆä×újjj(’UVU…†ž;göò«¨¯–Ÿ ‹ŠøÏ'—•—_¿~ã¿×oPeÕÉi ? rÔþêU¡«›‡¦†Æ±#?˜ššÒq(¯ nß·ï€rçΡ!‡455)Ä>ö¼mc;yòô�!ƒµµûRÒj1œªÃ„I¹³²²'8Øÿúk&íËÖñRo/�°°�ªª*oŸµµµ´câ­Ä¬¬,ærEÇœïÝ»·„„D\ü…UkÜݦ ç?yÑX ½’puí7üü�<Ö£GW7¦�Ngÿ�ï»tQ 9üÙgê³fÏ­¯¯761^°’¶R8ŸáãÝô2¾,(pqqûô“OŽ wvròó[Üìc0¥ßÒÒ’�ÃÁ³gÍ\²ôkvEÓ…~þ”öÃBÕÕÕ{xxSb§ÔJeðÇOž0}bbÎ÷é£Å“~™e&û/ZÈŽ·@·öÞ#m5ñ¹V�˜åëY¼È[ÕBîÈi(ÿîþî»#?„ dÆáß»mÜxû€U+˜­K–øH )ïQB»}ûN^^Þ�gOÉÉñï×íÔ©““³Ë»‡­«¯ßºe³„„¸‘‘!Unãã.ôÓ×?yò”††Æª†ƒP)õÔé3 Ìk­�V 0Zõv0͈4¶ôŒtS¿Œ¹}Áüy¾¾3Ò<°²¶¥111úÒ¤¤d555Z�5k¦�ÝxZØ·wÏ@cÓÄÄÛC‡6Ì‚ÎbîœÞÔ¿|9?jòññvss¥eƒþ6÷R˜ï`dt'ñ¦²²2-¯\¹ÜÐÈøÅ‹ÌÁõõt©æL ºº:‘'èàææƒ´´ø)TOW‡6ëÔÉÓÝ»w \ß¡CºŒ Š e\nÓwïÝ}”ž~7)‘yè·CÇŽž^>̦={÷Ïòõuvâ×{¿Û½ÃÀÈ8ùî=3S:‘¸Øx:}j���ÿfÝŽÐüý5kaÃ0€0D~ Ò»ó<,Ø“œœŠŠJ œ1ç¢Õ:¯¦¶–ê¢RRR´ÚG«ÓMWO÷XC•õÁÇ::ÚlT£LÕâa5zõb¦tâðSŸ^nÿ^â+ ×oÜ ª)Ó~áâÅŽ;hç õ¥Hc{ò$ÇÁÞžÒÓ3˜J£RQQa¶ÊHK×Õ7þ�`�™)³ //Gã‡�Qv°·;FUeªX�²¤>½½<™Î;v41øª�ÿâeyÊägÎþ˜ŸŸ_Pð§aò-¦[ß¾}™º¼½55ssó(·v‚T6733agüš8Á¡Y‡G�Òûhõf§¼bGN.^º”›—ËÎ]\\ü í]:‘ð#G)Ó¾¥¥¥#GŽà|("Ü­ªØÆ´,`Ǫª*úW]½g755ú¨««/ö[DÙ�Ù*.Þ8=2õJW,-5mø0 fõ~jšJÃmÏ¡aáîîn+n“¦c²•mÁêë뛵èëëß¼ùGàLMM¥âÝSW·Ÿœœ\`àúè˜ó‚Ç,++ë;Ó‡âëåË ìeÛµ´´öïݳnýª!ËÈH{LŸ>¡áÎð¬Ìì„„„²²².]ºÜ?�Ÿ®¾�’’Åxú^f_g'ÇçÏž{zú¾~­¨¨H—ÅÐЀÙdmmµ`¡å±&÷c ‰20óú_ÎÛY 9œ‚¼ìË‚Ââng¥¿ýÕÖÐ"ú…œ xÊ�»pDÔáÍ›7Â÷þ9­|ÙÑçQ9«YêË¿·• ËËËÙ•ZCÕÎÈÈcÇŽéÚ•ª/^òôž‘ñ(Mpfn†*–²²rì,Yïm’à±Ñ�gÇÎ]§OŸ533¥�j×®Ï_¼dfÊLÂÌi¸]Ù|ˆÅ㬠êÏår›] .·l ±iı#hÚÎãÕQ…–ÍÉ,JËòòòlZ~/úoP__ßb*GÓ¡ØG�Éï¿ÿÞtõÝ,ªB+++¿÷yc‘ð_|ó—¿$ýffç~ÖSMÄ�øÿW _—HJJ**Êã^h€©ªº†j¿¯º¨( ŸwX¢`²7¾0äJ‘��ÝG(ûÚˆÊsž:-77Ïö ›W…….\¤BèÒ%‹9‡÷Ž-??ÿNRrFFFEEe�Ý'Np :*³‰ À�:ujvب¨èаpJæÇކsà¯Ó¶Ìà–UTTTÕòxøP$%$deeäe9m"ræ��ÿŽôËi(?ž‹ŠNK{ ''kjbòQ½ öÏŒ­”Ë=~ÔÛÛëÝô¾ý¨ˆê:ÍEFFä{ÜA€?€à_§-˜Óp/ôö˜ßš=ÌRU_8FÕR_ŽðChWÚ€ÑÉÜk�Ê>­f’0å^ÝÒ:r‚g½øH ´+*ü«!´+"¼àß Ú`h€ ]@€vÚ`h€ ]@€vÚ`hÄ9핊²Ú�ÿÿÿBb2IDAT1Pmìë¦a£IEND®B`‚pydantic-pydantic-e28e879/docs/img/logfire_instrument.png000066400000000000000000000631311526274674700236740ustar00rootroot00000000000000‰PNG  IHDR hìë;@m‰PLTE"""HHH6^w***Te*++111ÿÿÿãããÃmDsssˆˆˆov}‘‘‘###---qqq%%%777zzzQQQYYYmmm''']]];;;eeeBBBEEEcccýýý///t�NNN444===dzwwwSSSUUU���LLL@@@ppp???!7>žžž"&'aaa GS___âââ[[[ÂÂÂJKKßßß~~~ÉÉÉ333®®®ÛÛÛƒƒƒhhhjjjWWWúúú¦¦¦•••ööö†††€€€9::ïïïÕÕÕ±±±III¢¢¢#?FCDEØØØºººÆÆÆªªª999çççòòò¾¾¾···gggÎÎΙ™™lllekqìììÒÒÒ´´´­­­ŽŽŽÐÐÐÌÌÌmu{¶ÔX]a_ekOTW)EPéééhpv$+/˜°MRU)7@pˆ¡½„ŸJNQ‰R7\bf4[sSX\[=/¶fAsH3I4+0N`¹Ùà‘¨F3*P¿×=¬©™d‹IDATxÚìÖAm1Àt?¦qÓ ˆå� 2§wR#YšA1¯ø¢ À"šœA4XD€3ˆ&‹hpÑ`MÎ š,¢ ÀD€E48ƒh°|/š3pÃý͸m|Šæ;¹Ú¾à�Ú^É{Í‘i™ÜÕÎŒ]4›x&÷µI7ѹ<€zel¢9ã™<ÒÌM4#š<ÓD4~Ù»»Ý$‚0Ã_‘&ûÅ]ØŸòb �‚1�V$ê£&j¬G6ÑxÿáÌ–mºh­b©¾ÏIgÙnšéÑ›a =4¸B¡ €Û�ЀEhàv 4`š¸MX„&þ¤qðàÍ×�wÏ|BHéÛó½Ôã2¡¹=î½Æ™1“ÔàáÊRt–øÏþ#àߦ/÷²¾Ý\hÖ£µ¡lÐ�Zò{Šý†ãÝ;ue¥Ú:.ïφnz?Š<ù™(*ʯz¨‰}Y9PÕ®,�41“ŒNÔ€Ûªþx/ñúÃ×Ç�–ÃÏ7š}];– Ú–ßƺT¾# ¯§‰“Š$:ª¾ü„«Z’_ä.â«s¸±Î½4*í�òÅЬëDn©q—¦E±êñs{ùææB3¤ºÛ ÍwªNÁ÷ï5b žŠá:éׇQ¬£ÊVC³®±\T¼G²ÎMð¯¨ÛÎ|]“µxÏøxc¡ȹm…æBÏ\±&ówbÔ4è,3[Ç[ Í¡Ær ¡ þMö}ógrAøÄ¼¦;šµß MOõU:<£kK‘–¯šwþFh¶Mp[iÚ™YÍOæÕ·»š§á;éDÓ“AG¬ƒ0 £X�0áÉR·rÒ¯§¡5qëcûã’®jG² WÎÏæ”®š‡æ/ì«ÎB«)K~ؘΚ®äóCãHãõ#­01ÜšEs¯ß³X~ÞTKa¢*â°(»£dΛ¿–Kj&4¿îFht¿>W#N~óP³NŪ64Ñ®fvò*PÍ]¿ AíyïLNĦ¹°—h¦Ê™Ð¬ÉbÞQ|góÆqnšùd^>ò2ºFs©Ð<Ô„7ñ5š²„N¨¯¢}<Ãø øx¥ÐlÄ«û¡µìCsñ¨ž*»€Àæùµø.FñÕ›©~;VtDõÆ1nªbŒë÷ÿ ͱv¯æZ÷ M©i1zœ�êke¥ÐÄ«;ÓƒŒC3}TBl²¯Žs$©Z¦‡²Øy\”M'ÒŒûóü†æ -Hì¡o5êiW¦ª¡vV ͼjN¦ŠZÉ84ÓG%4À&{é8ï%UÅÞHóI„fYÃ’L¹K†f§$3C}=­Äv¼›{¥ÐtÃù&ZÏ44ÓG%4Àf»6U¸+iÇùè>‰SçRÐÞìˆíÁR¡Ù×bN"¹Ù~ó‚Å*ô@– Íx£¹5ÔÚ< KÙ…f]ý£.ÍÎøEUJ�ñ[IòÞô¹ñ&X3{_ö@ÒÛ“ê�³¨tË]šW…æg +®ˆÛ t¸Th^…º=°©ÙÞ× 5Í9=¬Šl½Ö }š»ñ2è&CÓ µg�Lô…dš[¡¿xÔôÐ,«j_*j¦‘„‘jP€µ2¹x*)ú¦}y”ÛÅ…f)ýHùööëþè,ÐÙ•¯Ì�±'ivUí^o‡6æ-ºæa ‘–Æz²@_'¾U«˜UÔºª®¤ÉûÆDÕ·¢…Žüx¥öŸœùF¨�oôef6ê^Ú¨õéGNâU—ªz& MUÝ“„må–H`íŠö+Íô=÷$Ù‡¦ ¡Zß$RŽžNÆ%±4V‘T'Í@�ð,?_ä¾}>z+÷ÍêÐWëzö¡E»Ší†¤kk–E�½²Mywv+ÿ:P«—6jCc×2³åkP—„·�NaÌÙŽ‹øþ+0>³  0SÅFw@šìAhP„&{š”§C3_pA Mʳ¡9„&×dŒIh¶èJ€ ²G›„fF¤Ò`YVIž…fi1”&«2G´ã44Ë;¢§Ö`¥2³G¼�Ih–°¬ÓÐ,ÙFÀ‚Ñòø M¸�Ðà—Ð`B€"4؃РMö 4¸“Ávþ3Øî‚€{w³Ú6`tnð&H $Yt‘,èÞd“'Ð*Ï`—þ,ºì£×FM±K­,•ŽsÎS|Ü™;Ðû·_P>弌:À«c™óÓph.òU$øKq•C¡ùœ³Î`„Èùy 4y™`„e^ „æ½�&ãD¾Íœí0J�ó`h&Eh°ó…fÓ¶1�¶m¯¤=¥zYo}èºîl½þ–àˆÐ¬Û˜Pë*¨Ð¤p/ÛÊì� MŽ Í&&fª)4)Û.4xŸ`DhŽ3 5w„&M¦ Í:æàGu¡IÑ6Ý«� F†f=¥ÙšÐ‡¦‰&G‡f3iB“bm:Ë@šMì±”’С À$¡YLJçIhÂÁ2ÐW¡ ÀÈÐlcŸÃó”„&xG€IB3f•Þ:¡I©¶¡yó®÷éf§Kœœ‡‹ÇÕyU�¯/fÍ&f䖦ФXBàôÝÝV{nï&Í6fäì\hR®M'4NÚõªúÅêZhEhR,¡ pÚ.«ß¸œ64cV.i MŠõ34¿¬? ÍïìÝÁjÛ@€á9™) +©±C‘‰ n�Arhâš–�X—žèA`(rìûŸ«ÑAq��`’<üßeÙõ ü f Þ$yhDÓ¬ǽl…FžšÇƒÐÄÑ"4À±dÌh!­Å(˜yÒuhNfim¹L7Ì&„&¡ Çêa BÜÊC­ŸÉ²¾½æÝ†fRéNUBhšp‹Ðdž¡vË–øÖÞ‡�†f¥{T„&¡ ·Xo~�7�);4¥yÞahNTWQš¦—ª—é“h¥:!4 MxEh€_sûn˱}=Ÿwš3ÕÈÎT5Ý|�Tg„&¡ ·Xo^¡–=]ONŠö’…ZÑYh¶�içöûëC3)®>‹c„&Ž¡ ^å6o.-û JiÙìyî#4ÕXU¿þy‡Ö\ÿn<®Gr B`½8¶µ…´ìºý«‡ÐŒî´||¸ë‡Bž÷åïµæ^ÇeYÞ©êZCh„&86°=í²/4%ª¯¡y¥úpZŸ¿¾iùB� õçÁ¡¹´ãôG©AÞÊÅö�Є[¬7¯l²|º?4§6‘~ü¡ùéFW=1¯õþ]BÓôõ»¼•ÎdÃY„&œ"4À«ì�aOâX†ßlœFb ¨ ¢$*82¡bA‹ ˆ#HÅ…�€øqÿÿç�s¯²íV»Î®n2Ó>ʽw2¼9œûXi§Ì—½.šI¾îüÇÍ5:KA’OŸmÍ£ ˜âÑ6˜x}Ö/,óðQŸ.ŽŽ":é̦ _¤qU±ÐO¯€ƒëñà!ô’hjiЉ…¹I«÷pft”LæJÃi’L®Òol�®!(Nƃóu8È.ÚLsåÛ¡FÓçgÅ¿½‘���ÏÏJø›ÁÁäùéœpL�Ÿþø¢yMßÑ3ãÜSÌÃõji~à~îÞlå勦•{úä&š�´¶ÀÑŠå;šªD¥FV„hÒ€`�DÈçÔsŠf¨"^ÍŽÂ*¿Ý ÊÑìó_“¸¡¢ø‡ˆ^­™B4kg;Ò7M¸˜¦|òN¢W «—ÍV[…s Ïdôf²¬ï‹OüX_°/6f-_ÿô×m�×b|<Ì­}ãʶZµ^˜òÈ.çªäR™¶é©SKùáL4ÍÅîI¶8žŠT,yYfÄ\UÆZ¨h¼–‹hº„i/1{˜Y%ίèWV²ã>Ï$F‹Ýè«Y?Xéygh›ãë½dÇHñ‹*€v%sXVâf<»ÿ8€�5LK[t SŽÄ×IsšO-*Eø¼¹g~Ö›©L¯•�#óp½Yš»Ÿ;›­c?÷un¡FËn¢Y¢‘ób 1í€ÑÒgQMLK*ë.™VÑœ …NIüE›–„h.�™Ð9�¥[âB4‹4€à6­½nšòá�DsÝ(ðé^}­0m¶l–ìa/f/̸9çp~� >á7irîFƹú\áÌ�ÎñD‡§kFÞaÏhìpTÑǸ`D*2/ûŒ@—s+…4»ªÃr»½‘{˜²Äœaf ’”8©Âç™Â,Óf7Ú«€Úª:Cûl�€± ,+ç@H9pWÔq•{“’„�%LK[t SŽ”Û�È:F¯Ÿ·öL\sØWÊŽ™‡ëÉÒüàýÜÙlû¹1�…{úÝM4#D³f&jÍD�4ºßÑ3$á|dXES’nD!I,oW‰89ãÉq;”N¨AJˆfŽ”ˆ€h¯™¦ôÌ÷Íf+fT•ÖîÞ™¾>î/C°©¬È(¿‹ ¶Â<É ÌáÄÄÜ'’»SMɱúsŸ_Äç)u¨Ý¼Ãea>»€c=(R‘yÙg¨w9@­^ñ4Eó`X.¢é¦,1g˜(çÍXÙc§šù¿;ŸS�A¸Qj��*agh; bäÈö?ÉjÀhÀ{ODìM{ð±„ii‹naÊ‘‡aúO½Ñç­=™¯¶r*Gæáz²4?v?w6[ç~îßÞÈB—]D“•�ˆî Y‹h^Òó¹«hîóCÞ.𓵵µ%J¯CpùX#�Í<˜‹æ9M ЄhÞÑœs¼fšÂ3ßM4¯§œè𻾸ÖÐãØÚ0 1òÊž(Ï}0úìðO@’TëžøUɆëK_ì«%³ÏÛuyv¼Ø]†ZîÂSpÓ”h½‚#/û I£ïÁ°\no䦵Äa~¬�:q �¾ôÃð±Àn$Y3סI¾êk° öK1ê=øØÂ´·E÷0 ¹b§Q€˜¹­b×܇ϛ{&£6*æáz²4?v?w6[ç~îß°ÝB›zn¢É9äúiúãê/Ñ Q- A‹VþI4Ú8�r~–>¯ä+NÑœÿÆýTˆf‡z«‚âj¯›æ ÞO4‡á§ÉJ ƒrSÛ©öcEin»fì¨W9¶| ¤T gIûjF5Jw�’.2[1†ÝÊx‹ç¦Ù¹Ÿ'œy9EsYßð`X.¢é¦½Äìa–‡…º9áyÚÔxÔËþ Í—Ühÿ¨—‡34F�–l¡•ͯüjU4ê^º'›´·E÷0Û¥J£­‹Vœ|ìÎÌ]ø|OÏ,·Ç£,p¸ž,ÍÝÏÝ›­Ü¢üÿ‚ÒÊ ]<'¢ J_�ÉÄ,šs¥§Žå;š:­ƒ‰ÖÒÚ›Dó*-Ç:ÔÓsŠf0�΂ Ñ\ )àÎ {æ;Šf« AJÙÅ¥’r~§ãw]TUwɵ0CÍÑlz‰'VÍe`³td_ÍhFP f”Ïó–Fã‰OñÜ4Ë¥Á†#/§h&Ç À{a¹ÜÞÈ-L{‰ÙÃÌU¶€_Ì2€†Ù ·»ÇðqºÑA³Þjl9B“GÝ=XXÕ¢ÛwLÿÒ*G˜Ö¶èf¯žâJÐîf£ÅRe>ßÑ3דṠf®7Kóc÷sg³ý÷ûùö7•ÜÀœ°íâŸ�oƒÛøñE3xCÃ( ªÑk€ydÑÔv2`–¨Äï™nÀLž¦üN&Þ"šüØRÅ”O|”¸uŠ&Ô_zHS�$E³³Âkdñž¢Ù®C°¡„ð›’pæ²’ )E·ÂdÔi6"¦jYm%¥ä¡>Ö£ÀÖcžÂzŠÍÐyYg0›ývð^X.¢é¦½Äì3$�)÷Ú±ÂC×¼Ù�˜`+ì�‰§°piVåÕÛ´¾g˜Ü]´1^ •C q݇ÏÛ{&“WV ‘áz´4?v?wi¶ß½Eåm—åÃá<žIòXþ'MüFtÍa%ib­ŽÓý@m‹fâžÊ<6 sá�R Wjéc·´ôFÑŒ�Ñ‚PÊŠ hzA4C&]Ü�ÆiyFS-Q?Ȇ›¾À…wÍÜ£*‡üYÍ: sKÙ×O¤\ sShñ*/�ð[×ä±®YWgêÜBcª(óUì)¢<<ÂSÈ/¶Ç„Dq‘Š%¯ù 4"àœ ø5†år{#—0í%f3¤‰@§1ÿ[¡Ã�¶4Ù œ¡ûÆ1˜ÃzÆr®]ôªÁ>–0­mÑ%L1¢Æ"Â@Þá°¨xç[2ÿ¹gFŸÒ+È®WKóc÷s—fë²E¹\w¾¤âÔ%qÍùÏ šh¦é¢×)]PíÕ˜n{mó¬Î¢‰*¥Ç…ºAæ€À ¥‡evË4ÝLL¢Þ(šhÐMÈœÑ}{pÑí½ šØœ�å‚B4¡µ¨V™˜TûŒÿI4—õ¦ø÷‹@@ßpœЭ♠'Ò'\ si¦òB¥;#œ˜A®õ’mu“+<©,‹>„&~ÚÄtO!šæÿ�¯Ê¾HÅ’×|Fи vú¢qz0¬?Ù;ûÞ¤�8ÿb¹ K¯¼tÖŽn ÛØ Y¨ÈK:™ (În NÜäû{-á @}ÔBÏË–Â^nwOº]ëšþ2ÅóÈ,ry¬'ì “Î)OÝò7ð­?/ ^Xyp8¢oœsíMœ j€Ö=dF¦˜}d:GØèÜY¾ÏzM°I[Qú¿Â{Ιš»Ó¹vìqåFuh®w=¯Â ÖsC^¶³¼Í�ÛšP›W7…qè—íà³vÇ›�JÝB>p?…:zEŠ`ó¨÷…¼þtšÊ;rÇvìÏ6¸¾�M޶{”uv�sREû+”U*4!mʇ'é›�ÆëÛztòÝâ?àUYUÀåÈÌ×O+û fë¥g`¦ºW/Rû�&÷È¢Ò½=‰%Ìü̳¥€5U¹6¹+¡?�£vZÉ=ÅÖÿt‘Rû#ɵ"|‰Gdžð_mnS� ,ŸËùÊCÌ+óÐÜIé-«`XïÕëÒ¨½›Óý¶�Jæ›ÌÓ´Ÿ—¦kÏmT–“´=ã'A�§ÔV�i™bZô“é9·ÙËÁ( � wÆÓ¸¡sp÷Ÿ3ïºß¯�bå…{DÈ�äÐ\ëz.^…U¬ç{Ni2ðÀœÎ܃Có”�ø¢°Œrz¿Ðä<+% LH)hê0�ÅÆ6˜¡Á¿ \*°ÆÀ¡@~˜'ükšÐ.S:,:?-;¾¡ÝcÆGcÏ|>yÀ�vv@ Ì,Ýó LÈôLÚm‰ï;ó‰ÒnÛûlŽrkÒÊ�û>îPZ‹Ð¿ÏLMšJÓ¢•÷)¯/ñ“:<Ž ,ßÐô—)†˜�É9³Þì‚Íe¿B­foÁÙÈ–‡yimêЕº(±+Û·¯ÌËÓ¢¿L`;jöß‚McDép¯ˆðs&{Ó¡f9.Bn4‡æ×sñ*¬f=ÏË6ifÐÓ2§dhæéƉD‘�bBï’“~ÇFüñ¡ìžAÕzDA ¡)¨g˜xŸ�‹˜‘„) f æ�tÓ¤ &ží‰niò È좞ƒéÚœ¯ÅDR–Ïå�üeŠ!6;ÑÅpÅ¥| Ù'K¤ùûG8>Ó¢¿Lí2c²Ñ¹ÑìÊæÌ”‚C3¨õ\×Vµž+U™³_‡ õ}yL!ÀДd i;Bs÷€Ô¾µ{_Hå)¬n|4"uïX$0üCAÙžõ\ÉËñCý!cõø,(šÊ`Ig*[špQ!6åp6"4óU@V|y# MA—mZÏ÷äìDišœÜi¦ÕJLqš“¤m MH~üš>R`Ì&„æ ”‚29a M´‰C3œ L´R—iTeU@”f¡éÃ…æ,šQeNmÂÐ (e†´¹Ù2 yyŠ<¯ËIibhnš›ÊÄÐ )(e†´¹é2ëj£ÊoAYm¨uàˆÒ\EhjÒZ‰Þn3 Í e.¼¼†æÿe¢Ì�‚6·Ræ¸414C†æ¦�214C ÊD™!mn§L·4WšIi­Dþ¾š›ÊœÚ „¡&P&Ê )hó{wŒÚ0PT…\¨¤Ú ¤qaŒ¥kròà8‰,B kVÖHû~R ‰? þx%y§2�…B³iÄ%šBss�)4ƒB&™Aas¯2�ŽÎ>;wr.4·™o2É ›µÉÌ Í¾]_1'4·™B3(d’6k“™š _¥é M¡¹AÈôx£ �IfPجMf^hÎÏœ!4k†L¡2É ›µÉÌ;ýÅÁù¡Y3dz¼QPÈ$3(lÖ&334§ÒÔ™?Íš!Sh…L2ƒÂfm2ŸͦOmq’Î|ah^÷œšóaƹ9Í~¿4�‰&º.âµÆÄûŸÇåÿ�®[ÿuìfžÛó ö¼àÄnCóvG�û€nͪ'¼ Í öÜž�°çBóAhNôÉÇ™ßͪ'¼Ý…æt3�Ð\žÛó ö\h>͉·”ŠDfòiæ«C(Ï8|Œã8 ×`yvš>Ù»c‰a(Š¢ÖC Ð�Rwàv\„ú¯`™l7+33`8§Š‹ÿB€ßMŸ'¸eŸ†æ™ºÀ 5ç$4[ú7ô´IhŽxÒàŽšŒIh––Ci°¬iešåJºrVìµ'W™‡fi€e­LCóe´3°àl£ü Mx¡ À_B€gš¼MžAhð"4x¡ À;9ØÀg¶› `âc”WÒë¾À¿íµ'×<4[ŽºÀ¢z¤ÍBs$:€j2&¡ÙÒ7øaߎM†¡ †O eŠŒáý÷ ZÀ…;ÁÝ�|ólBs48sÏÚ„æŒGÞ™mh^pDhB€B€štš„РƒÐ „&„&!4è 4¡ @¡ @M:MBhÐAhB€B€š?{wû“T‡qüZcz5©@Â:ÌX¦ÕXÓLëP"A±„Jbù’ÿÿuþ’ô<ɤǵ]Ÿ�ÛÎñ>ç¾_}çx‘ÿƒBSDDDDŒBSDDDDþ M1 Mù?(4EDDD"²ûŸä´‡ Þ›Dä²OoæÇã¿îÃJ»ó“ØGØ_ÞÊ›U…¦ˆˆˆÈÏénà‡¶�÷¸� mr €KgÆ—­°4ÿnsõØ{œŽïÌu²÷“ØGØ_^‡y…¦ˆˆˆÈÏÙâñY»¹î`n/‹ ÂF&ÜmvÙ8ÛÎ~ec´†ß¦J÷O”c³ì›«À%Bsm´¡Ðùf+n§v¹1Å£ÙÖ¼°ÊŠq?OVå€ëÙÖˆµeD ù— Í<›¿=4£ RhŠˆˆˆD´y §9ÿ‡B3™ÌÀ'“L/šæÁ€›"žqí_…fü‚š""""!Ÿ¸˜Eöf<ôò0Ùê×Né¦�ÞÑ¸Û ;�æ0œ]fÙ6'½;žç`Ç»9n:ï>`ŠI 3–%qéÐÄR�[0 ÷úMoîº ¼�ÝÌÆ·Nþ÷EÖ¤ÞøwªÞì84W½ž7ïÍÐdŽçÍÀ$޼‚ïŒé0´.HÑ [hð L’ïíPâŠÕ×�Tè^³1ÝÓÐ\Ð%¹u~™eÛx|HšY° S¨¸w}%–�ÿ‡)B->³CºCºdÏžv“4ï€z�tɽז4s�Æ¡y‡4-h†'Ûç6ÌK~ �±Ð nÆ… RhŠˆˆˆD´ÆIWfæ¼ wyø3ÛwÑšW�óÎÛ$ÝL\h:N“YÇIá6iœ˜c;fþá4¡y�n À{î¯Í<-ñêu»Ù1_Ú͸nýÖÌ�gìLJfÚɲé8‰@h†&ÛâfÈ­Ð ÍÀf\¸ ½FSDDD$ê&×í°Ê«©óзã7£¡é�æ!svès¡0;LšOÉ»@žëv{±ê{�擃ìézé`hNz�fh²ÙJÍB4Q«Ì†ÎXh†6#~Az×¹ˆˆˆHœ2—­¹ƒóÐÜàNùBóLºÂÂÄЬÓ­Pé- fãÃt¡¹àò¶=ßî8;›1oqñò¡žì#-‰_²>c¡ÜŒøéã�DDDDb]c Hu¹è ÍyòëîR:š7Ódfbh>¯4ÒÀ«Ñ0gÙt¡ù޼nÍw4oîÑ]„f!“½±KÞ¾|h†'Ësà óá3š�͈_�>GSDDD$Þkw�F†ûð…&æ6IJEh:€²>14ÑfÎþYŽ„™É`ÚÐ|H7 4xæŠ/4?—]šiB3íãTÏBs‰ë0 wbhF'[åo¸„ð ÍàfD¤¯ ¹˜Sëmó#|¡é,/ÁÜà†/4Û0kì!64y§Z̵Ý"¢Š˜:4¯¯³k \ß>�{rš3–”'–i¡é¸'rô…ævC¡� {µÙ^Ÿ±Ð nFXQßu."""2‰ÇóþÐ\p '‡>ë¾ÐäJ Xlp'>4Ûl§³Ä&ŸajÑÐL¼Z)ÓÍÁ‚³Ë��xÏþyh¢I»ìÁ:-4Q¦ýT,ûCs•\ †ft2ìrÈ]Dnc¡ÜŒ…¦ˆˆˆÈ$OÈAÚšxA÷°TÝdù®ÿã�Ø6]öSñ¡Y'L™¼÷«¡Y�F’£Wãvë±ÑnØ}ä Í-róýqÍëÒBsÞeóh£Võ¿F3Ñ¥»¿åÍèd¸îÒý½�…f`3š""""ÓIuYB 4±¶ç’ÝV"ð®óìUÒõ ˆÍôNƒœ…¹Æšó«¡i¾±[Ç, EQÇ/tÄA©œŒ!\B‚¢Á‚¶H ZýþŸ!8<^áÔ#.ï÷ÛÎ…3ý·÷ëÛI9š>í"¶/¥še4ŒØ~͆1Ïéê!b³:k†f™6±j†f{YÚÇú·o24›Çš`6x,?¼Nääøúo¥ w7ãÒv9Ÿ5¦EN-ãóñ‰e'^ÚÇšÿl²‹eé5¡ Ð�åè=ö¥ß„&@>#‹ÒoB ×£éEé9¡ @šÔAh�„&uš$¡ @„&IhP¡ @šÔAh�„&uš$¡ @„&IhP¡ @šßìÚ± À0Áý·"½ ƒ‹‡»)$„&#4hšŒÐ Ah0B€¡ ÀMΡ —„&O˜ÎøùhP 4¡ @ƒÐ`„& B€š4MFhÐ 4¡ @ƒÐ>öÎ�Gm ŠÂ# Aq ¿¶yX�°À)�…((Œ»HiÒ ñÿGr}“eÂ8„Žæ^XßDÓ�VÈ£(ºibrŠý`�º\ÑÇgçÈ)É Ç@-wV‡Ï3£q‚ƒ;óXâ0ˆâ½XhG B¡hBÞÍ~‚í‹h®pí›öFqŠjdð^jËY«�uªf6l}é¤òd‹¦þŽcG¶ŽÔŒ¦ú>éìs2D›ð6�#š×žªï¦ów4×ré•HÛ©3õMܳÁB.ƒÍö> ÛJÃr)µ-&íÌ$�»)rkŒ�‘?5ãÁýÍ›&Šïɶuú‘s ‚Ôd ŒHüdwˆ%ð;wæD#ÊqèhA!MBÈ[ ¢)þX*š"(gË ·(F¦þ#4Ȭ�hÈEUø:EÓÍUUÏrëË/Ž*Žh6F…kÔ)š±Î“k–¾FªÄFÛWR�ØëÃDîbnÂré߯Øëû8§G¢yÑué[ÂK\œcPÒPžL&1>ˆ{V5Æ9s7ó¶�÷uZBE“ò¨hšBìKE³R)“ÚLpŠjd,´æµ"”¡x'l_tpö@4;³>`„ÖFŠáhtЦgݹ¢Ù3Â+Ñ9¼k©E}÷²ÞÄ’¾è¶Î¨µIJñ±qÆ|/“=MÕâbUËËý1(Ò­gúØøå^ŽxeuØ«‰"4÷3c™%H:ZBE“ò&¨h¦5¼/¢™ Ð'žŸàÕÈF˜ÞP"/Ì‹fwVú7Ñô7šx‘+𳇢ÝDó^Ý²Ç @Ù,�Ðmá…ºqgÌ÷2ßÍûcTbWfû95*}S…©ÓADó~¦üÍ)%ún B¡hBÞM‡á@ue¢Ÿ˜[Ÿ;E5²¡ü(L‘µ‘Yü…è¡hºYW4ÿãfTѯ‹æ eü…�±¦M‰pìt[ØË½èGðî;cNó3¢éÃŽš&ñÅýrg:Eó~¦&ô¡ï´ „Š&!ämÑTƒœxhZ‘›ê“L>.œ¢ÙVâ°՜[sã¡hºYW4•¸Äø×E3@m¾CZ`ât[(îÖæŒ¹Ëø ?L~R4åüëÄOcúX,qèÍ»™’½êÝ;·!„P4 !¯ÍcÑôs 5Ç)ôË2ÁËWµ�¢ÙIHkdÖ—sü8~$š�q²]¢Ù[JP„Ê{R4W4M‚�‚Xž*Çe›Púw}ñµ¶XÆ©l|çËÍ<—Ð1÷OG:‡¶h¾Çé¡h:ÇpóÖq+ y~Ʋ[4�™Wh‡!†n B¡hBÞMaªhöj,|cÒ\î”û¢™_µŸkG{ “È q±5ößMSJÙͺ¢9@9Ðàà ÑÔÆ®hžq ÄÆ_’#ÝÂ#' ÛÊ�I�)®QkÑkYiŽÍmÌ]¦m§‚-š`ðH4ïŽáÆ—Öæ7¨¿[4�™®�¼TOÍi±šð"„P4 !¯ÉcÑÁS›'HFU(o™)NQŒLí3Ìöeâ!{‰ì¯¢nßÍpY;YW4%Yf›"‘%=!šÚø^4%Œ¼ØA-QY–¨×‹ Éò> /© «æ‚ð½Ô‚+JÙxÞ{ãd–!’ÑùÐÍèì><Mûnô€¼í Ù|§hº3‡@Þœt=n‹‹¼}K!MBÈë㊦’AÅæXÔóEj¥ìâMçæ€j "¤‘Pûæû¢ÙkJäNÖM¹Ô@xù`žMm슦®B`²2AVÉ>0N@^,½† Ü5>ÈœÖÑmŒ›ËZ‹žHß�ã.Äð‘hÚÇ`“«öú ¦Ý¢Ù1Ó÷*1Ï÷Ý-ÎáÚBE“òw¤ÏÓAúm$W|Hê?›�æ‘yiül?„ÞÜ·Ï{wcÜL¿k­¾d£Çð ¸3£àÁQB¡hB!„�Ÿ‚¢I!„|bߎM†Á(ŒšŸ€ÊÔQ§øÙ4Ýš§¯ˆ˜K~¦/=s™#âõ:%4NÜJÄ2½Ó�ÞÓQn@—„&ÀQŠX¶t‰m‰H@�„&ÀAŽXÓeÖˆ<tHhœtæ–.´)M OBàØ™9]*+M KB`/ÕμX¶Óz$4vn[ºÜá{tGhì”XÓ?Xã�½;fQã0¦ùo±‚ÇDP4[HëvÛl³pßÿsÜeT\<î¶šçWl˜Ù±•‡ÌÔ D†Ð€±ï®Ô—('·ˆ ¡ c[wÒ—8¹mq!4`ä›+õwª®ÓCJǽç"ChÀˆw^ƒ×|¤¼š–ê!Þù¢BhÀàɹƒ]Ú3K{îCóàÜS1!4`ðÍúSm¹‚ Mì�ˆ ¡ ƒÌÕ_š5׈ ¡ ƒÚeŸ…f½lw“­.ŠÙ|·ª®¡YMf³‰—ôÜ­øn­‘Œ£4D†Ð€AáªOBsef©Y«`Fy}ÍíÏð¿f+U©e—õ¯©\‘@LM”N÷CscÍ>ËÜË9‹ÔV¾*Çshmêµ�Z#ifK�çj�¹2€˜š0pŸ„f–¦oýÓ7V„Š\‡ÙŸ!4ßW“~thú¶|³Åùƒ/ºÁ—*€ÈšðXh¾ÙNÁÚ&Rf©‚�¥t¶—”[vÎ'„&€¨šðØÖùÄÖ ö6“ ›+Ø^Cóð\î—f›�¢KIÇ4[çbFhÀc/Íl¯àÙŽÒÆº›ã�êEjÁ¦Ø¢ÿ³“x@ÌMxìx£×ëNxÙg¤»f¤·´�ÏÆæ“²¨!4õa™VöCâx#1#4à±ÛØLÃú©Ÿí9KC…vêµçÐ\ÚRǦâÀvq#4à±+(½åYÿ<ÌÍIjì¼´ ¡yžÓ¡9‡f–.j›r%€Èš0xrîp/4ÕÚ¢’4µ—þ±²Ü‡Ÿ7Ch®m!©jÍ6—µs+tãàÜS1!4`Ä;74«¹¥»¶±üýÒ’6Ÿå¶·´_ô{ºkó—öšÎì¨[Þù¢BhÀÈ7WÞ Meë³ãÔ+¨ºô÷È]ß:ÿHÍfÙôš‡ÆVºU²s 6„&ŒmÝIŸÈÞ5¨|6Õ•¹yÝ8¹mq!4`ì»+õ,­Õ­Ò}O .„&€_ìݱjÃ0†Ñp hÈ�mƆ‚…ÏòÞúþoS4ºq–Ø‹Ñ9Oñ ÒýY(1¥�Æß¯ºy¾09¢ ´Gh,œ#æ´M¹\>~ÒÂq>4Fh,¥ˆœ6¿‡œrD:´Fhü“kiî*‡Q  EB`¥4ç´£Ygmšk¥9¥ÝL:h”Ðx–"†9íb¼ÏZ%4VœKÄÐ=ÒF�nˆ(þ›�š«>ïÑ—<¦7�¹ôqw§h–ÐxáÖÅf�}s aBà¥ë-—~ˆ· }É·ë  aB€Jhp B€Jhp B€Jhp B€Jhp B€Jhp B€Jhp Bþص×ߤ¡0ãoéjjm…sã"So3ŽxY¬¢Nm¼d^uQ¼%d |‘o~òo—3:¤Be[Áy~ �&ä�žðáÉÛ4Bó�ЀFh`>ü;4€c"40<:@g40Mh„&8Œj«Ñ´�­ÙhU 4À�–�XKBüe¯Û‰�k›tKuOBD´ìF`$4˜i‚ÐQUÛŒÄÛæœ&Mh¶Œ h1Ò¡ "v`L@`7 4ÀMÛ5&Àµ›šàÛ6&¶e„�ίŸK˜+?u6äPf/49ªä«vÚ’Äÿ”]åÙ—¢Ì†²¿ï¼ xyrK"RþWù_¾û™E�üŒÄÑû‹iª¡ÙYÂ\êHÿ14+ùüM9°V³Ô™ZFF¹™Ueßr)Ÿd¤Í|¨Øûfn]Y»G´Ñÿñ¸ÒÌùûî^Z–x%ó­ŒwÝ·dÐiÓ¼/ã}󯈖õ?Ê´,ŸìzhvoúœùN"\óFì}%]ç¹¹*³è‹¹&qôþÀbÍ jÄZÊF¹|ÄÐl/aNµ%±é‡¦ó@YjEB•òêJ©Ë2‚¥B�hUKYª #­ªPV_<¥êÝW͉ëÌøÝZ1CŸsICÓ2/E7ëÍ­«2Þ=sS´šyK¦Ê7‹‘~öd|Hõï+9½¡ 3i 4{Fœ½¦½m4ÿ M晋¤#ɼ|Ü“ž^h:«j7ÓÍmeí8r¶¨Ô¦J2 ã©Â͸Ð,)GúÊJÓâ–:×™Z;&4?ˆH:÷ܼ‘šphj3š]„&¡ ‡ͪ]¨ºÆ�G Í�%̱ IäÃÉÓûœ©…fº¦Jér?4�lF´ëjS†œUƒí±æyç%64ë– (ô~ø…ºÛ™Z;.4µÔ;³”04Õ‚†¦šPh*BfÔØÐÌœw�m;F“�æBéH"oÞOûÑùeµêˆͨ *+=îæ‰ÔÁGõ` :-oG¢¡™.V–%´¾"ÃÖÔn|gjíøÐÔéóD$×­ÛžO^Z¿í¨Gß/:¡™Z¿vw«vù¶Wqê/=-달çÝ~e¾ö4Wo”§�‘¾ê™k×JîaBÓÉoÝýh%”ªo½}vyÎëZÉÔ¼õ¡ úÍÞý=¥�E?ã:pÄrA bqð'ã:Z@„ŠÖQDÐÕŶ*ÓÑêÎîƒÓíKÿöÍIr ]ÛÙ–½ŸK 7§/߃±˜6Í¥G·÷ß_úÚ‡¦+F_cž× ©ðL9[‚í¼øõع\ÙÜ?ßôšãñ�i:ä�c†¦c¥¼à‘Àâ[/ç6`�IÇ—k9?ØØæŠÉ�ÿ\ö9B#Y� þá÷3¯$° ¬ds›2X–F².…BÓ¾Óš�MAúW›Ð”#Ž§Þ˜îtûÐŒÈχæ—_„ŸØx‘Ý5hófæ5Ä Ì :ÇüåLHù¡) HÐ&4Ù˜–›Sšê³I‰Â“Ð|Ã�ãj—”³lºË½nŸ Í÷8 àÂ,ÆðÚ(â Ôí[¡9UATßF�0Ì­¡®2 øˆZµ€¤ KEÔi£ÝC3˜AÔTĬlN\ßÌ£zî5cXW�a ñÂ6ꊢ¨oAÇ4c±kR»ÐÌ#Ù“r…º+Å )oÖøÆü ØÎ‹[��–�¦P— …Lª0x+ùˆí8{8zˆº³�À>’Ì œªs‡6øù\á$�!”ÛÌyl[Žã,ÑÒñ$ Ä;¢b^ÅÔ�@uŰšÜNn>"4Aè[¶Ðܹ©»kFpÞÖÝ÷÷NGíÞ}OhÿÍgå3ýrô�š»~£<šâs�~jË,/@Cñ¤REÏÝ…ñˆ•Ã|~]zih{hJlCj&'óƒIaIœŒG ‰ÍYÆæÁ$±%ð*cin�JÌ%?×™äcÇÐôÞá@ X•�, ä*¾ó9öW�Ðtµõ°¼q„'VhfÞM8“%Ü•æü~ÿ>–ý$;ô@-‚ŧ]Šâªä“]Có ³>¯w¶Œ9Ð)Õü¶S 'pta¿ÿV|ù“…óKxê]@¶�{ÝýX=VØ2Ú…æ´¾ºr34�p÷U4¾~b†Ô®.ÊᙼêÛyñ뱇æ *¡î�îý@BX¶gGÆœ¯­ã¬aiv0XÈW£fh®ÆŽW7À†›šö9ËjnN_E:é ³APpW2ǵ:ë•Y>¿ºK¼pM*›GCäw¶ÎG„¦ }ëihNÖkáOõýáçzR9¸¿‘ÉÏîÛd2Y»¡'}ªÕ>Dõ?ƒÉZ]y&4~jð"Õ™xamÄÈÃâò ÞQÊàU‰Ò§8à(\Ëß!4§^/ÎǶ`qNOÉ`šdSL7išƒ[ ˜Ì?czxî€)üzi“-Fºßëö¥Chsx1 ƒPpi‰ÃøÈ{,ƒ.f„Ϫ²šgê2úÀ°Ž3Ày ÍUœ6úîíV·ÐLc%Ä/�.‹Æì)5l�:Kah'‰ תBÏË�™‹¼²…¦å²š>�Ë )eA#ÏÁv^Üzl4|ºhU�ç³ä'ìDZŽ>¦æé4gÕkÉ\Á¾š‹Æ¸©èyü|øÐ´ÏyÄ|Áô[:î[QK›qíÐk¾­R.ªIÐÅU ò;[ç#BS„¾õ44onèáŸu§C®Óö½k~@_Ì]f\:ëtcP¤þA„fß‚—�ÔòE¦ˆÚ …æ>ÀÙ5@6P÷ÍýðBsž1¶qm°ÑÐl<9Ï<>4íd6ú»on ÄX ~Ƙg6Ð¥3ÉG[hæS©ÔrãíÖ9u׌’s3c&¬'•¹kj³ cV‰í£§[hŽáXº†¦šò¶ÄµšC/¡‰¯¡½C5Mɬ&Z'¥V»†æ9€D¹�ZÄšöõØhšÈ‚qMUÒÌõ¼…v¡¹h�üŽ1ÂM RÑèÎ :ìë!¶ùp¡i›sEuÀ£kT¬®>€Î‘ò´èÅFÓf0hÛÙœ�MAúÖ“ÐL»“ôPq8"FLŽ¹ÇøÐ4Ú2ìŽÒŸê"4û¼„c7¡€w¼¢…Š GG E*–»PÈwÍÀ ¼³Ôö/£[F¿y7ØT·Ðœš6¢ršm‚Á;èˆNÅæeàýaûÑ�v¡YÑ�•­Km¹ª/|�òÓ»Î#ét§¬ŸÑ2ƒëÝBsß÷šÔC«± ùñ*å˜aß5B“Ú§­adFzÀ"9Óé¼Ö54ßáøÓ»ª½éôkLp�h_��–Ãs=h#kš¯€Ñž �3£+èB‘ÌãçǦmÎ2A‹juÌ0�wPÂqs3ƒÖšw�ó;i>â®sAúܓЌë]©‹¸õȼ©Ÿ ™nšº?‘š;-B³_Á70‚Ã\hš7|Ü ;¿ahò^±$td›|hvæe,в8¶øt¿­4?v¼ÈÂ,@ØŒ¬€ŠRkhç–óH¾64×qx¶ ¤ô"%£·*"­¯ñ;6�5B³쨫”JyÈìZEE]÷мF?R¿%Šô�öÐä×Ó94çÍ™FµÝ Tu<š ãä—q¬ÍW-¡©U�ÇÏÇšüœ“˜iý>|4Hyß´�Ñ–ÐäwÒ|Dh ‚Ðçž ÍÉûÚç›úƒ£mh>$ q3PŸú¾�,s¡Ifcç 5åü^¡9ÉBБƒ1©ÇЄQ¦@S€1/ð$®4;ß ÔDa$Ã9­+i\h:—1Qpy<»_š±çBó§€lâš5�ùÜi ÕQó*ç¢eªkhªªÀî™Ò´÷Ûúb{¸¢™àCj/V<ž{hòëy.4ß[5¹ã¸]Cóã�¥øº„&7.4msžãBSV/¼ô�®ÆV`†M~gB„¦ }ïIhFÝoÌ·ÎôÚüðéÃí¤£]ho�‹�7êc_àE$ ¿áˆ-4Í¿ý^¡eóБÌ\Ðkhγ<Š1ž¹¦Ùñã�83 \Üy�,£Òš¼RúêÐôó/Â+áR›W©’âx ÝC3†Û0ƒ‹@N¬ÕU»‡fç[BJªš 8kM~=�C³`eÛ4®A º‡æ)Nƒ!ƒÎ.¡ÉÏÎ0ÜMÛœ½4ÿGîgÖè%›<˜m M~'ÍG„¦ }ŽMº«œ>Ôõ�üô§ƒ´ ÍhýÁ¸°9)>°½_ý/ñ&cÓ).ñ¡éÌÉ Û@×·Me a¶IK †96Þ!4¥æƒdˆƒÅ$ý«õºc«ã5ÍÎØÎQ´³ß)ÒȉÕÚ ËFpÄ€¬~uh¦µJÈblrx $‹+F„ƒiH HÕˆ9”ÙB3¢�Aæ¢ÑÈqãéZ÷Ð,X…6B*ˆC@üöÐä×c§©+�=`8̇Õkèš3XâÔ† Khòó�w³Žeûœw­žR@wŠ~ ƒã Û¦&!z­ ÌH@î0Èïl��MAúV34)$dÇ\ý&ÿP§Æ¬Ý¾½}8�Ÿ†&¹­ÿ¹ÿ\¿‚²_ý /±SÉ�,­\«%àCs©º¼=�dCÅãošr,4þô°0…c®8˜ÆÙ”D;çY¼mhF=1˜&Ø8•„w‰MH¿³Yë×]¾M³ó¯ ä½Ã”Ã".Ó äC,9t:_¾Chnt MXÀ�Û¦Z›Y:¦IUú£ $ M5c¾È^€ *¥Å»‡&œªÍwª�°`öT÷ÐLçµ-е÷FHy5ôÑÖ;L€í¼¸õØhæD6ñÎêéLá<4lt M¹X¤Ãy÷ÐõlhÚç3ŒGô\¢lŸs2Eq1EÏP3 �Ø©±¤Á¡¼Ï¬ß,è®pÌãù�­ó¡)Bßj ̓{zC<^s»ëÆvýþþ¾î®Eì¡I×<Ýõ›î­sqI³�ü/s|ª"æsƒOBâ¥""®NÀËCs1 m°XH`,ä›xc¯šñÁš7�6:M;�\œ é\lTÿ: c10yCÌåŸØšg£T4Š‹¾qËcnu¼¦ùz M?bé±ÍªÙÂBêÒÍxKÛ¬¼»‚«{íBSÎﮑ4�7=@�¾FŒ0ÃÕ™á#­¢€ÝÞíåN‹¸ºd³¬pZU�:÷&0“Û~W4£pemmótÐuhç7¼ J$›X}Û>Ù+«¥yMw�%ýktYýÁ.^é_i¤#¨¾Î®›!µ�C ®áC–º(…øóâ×c§å/ÏFfJˆ Ábw[h‚GÍ﯌bBz64íó‘+¸;2srDo�Ûç|ŠË¹íÓªæ·Êº¸¿’]ÆS tKyuo=w¥¦Ò {¥áª~}(AÛÎæ|Dh ‚зŒÐ䥙¼�ê_åwØÑ–±ÿŒ&ïã/ÂOê#¼˜œœ“ �à¬ÈKC3Æšv¨ CL7 �e‚±0X~z¶ÇÜN²¦v(A-Ò„Kß›ò‘_ÇhË€v$º¦IÓê14aÁ2¸¦"¦^[w�oeÕÝ�@¶˜·…&Y*©Ü¯ 4K|ŸGij7ÐF Lûªçyá�Žò6d­~˜¢ÿnÈ6” �@S`aEÄü‰á뀋Mf 4è„&`a;sš°"'(ù¡ ª­#§a9Z©Ö „&psì%ÒKQ¼i"48Ù»·ž&‚(€ã' ÙY×©í´…^7¬YZÅ4 ¶«½@”«ŠEA‰ÑHâS//~sw¶ºî.{ôüe˜3ËÃ?“&b¥)JMXMQè}š„B“B!Ö ÍOÒ|¢+MB¡I!„‹†R“† ¦4€ MB!„œ:V|Òø”c „B“B!§E ESßš“ãõ½ùÈU4ŒÐd0lýWýÖ„AÌæ¯ÃùÍ<}‡ËAÍ›nA�úµ XLä߸åg'·hL³ ¶¹ByáyÿGK!ÿ½‘†æ·É‹ÐrýMhÎD£ ÐÉÊüf6N¢m˜¼‰h´Ž–¢mñÖ+Cs\~c®�éþÊ› i/¸Kàô7Ÿ—¡× ćÐßaþÁü>ŒŠ÷š¡„½ÝëOâ.Xøðžë\ƒ±¯³†Óð÷žíŠyÒ`a›++^„ œùh !ä¿×š5Mrå­©’ªž34Lþ*Í«MÓÀQd{Ä¡És™‡¡-Ź^äœß2o«� É\æ1p4ÍÛ‚`ˆéœ��,sëL÷?¸0¶„­ÓÖÃÚ\¼ ý-ãY\„‘ÊcÜÒÁOWl¡é>×àÄ:à ÍÖÁÊu.F¡I!ç ÍÆÉ͇ceCj4Î ÍKrŸI¥9^¹{ˆ÷r𻩻ˆ+l„¡É¦ùË@747¸¼Í`*Îù°ã èÐylÁ-4œA—Êyܬ&s�[g M—Ð|þÐÞ›rh —84 W44aÎD¡I!#MM‰i>éË—s…æÔäÅ¡÷iŽK÷dyÏž {ÉMÎ7“õÑ…¦?Ë~µš,až/�Íïm�ˆ®ß×Ð,ÊÐ#æa�Ï»v¦Ðt MabÖÿGCSÌ5 œB“B.©¾¡¸å“6”Zÿ÷h^ž MºÒµú‚°U,¢XC9éYhÞæÓ DhZÍò`'n–<�Oùãžê”õm°†¦?>ã…¶¹0ØEøK÷Κî¡)Òg dÔmËk݆m^>J±N�LÌe •"Ó†>Êõòª † ®çžás]ð‰ƒÒ…›Ð¥ÝÌd¾? M­öånN+[«æ+Äö a€@VŸ³e¢ítXkëÚjýð(èš².œþŽ9±¹nhÆÓ[啨æ²îÇN–A}TßäoOZRzĶŽšRn+s“A[ðáV¥(�)¬³í£B%²ÆuÜÔ æúl¡RÈpŸu.·Ð ]?LO3:�–B“BœCÓ§J^£1•Ρ©úÎ MÖœ¼8ß�ŒEgͺÃXd0ev¦ëë鸻ÂÍH�æŽÒÑÀB“y8„f–ß�–yÎSÐò€÷VQ@ƒßBs�Ÿ®#;%åmžrïLSóŒÐ<Äë2–ÁÃ÷æ™ ¡Þ®‘ÙÄ$â Ž•vn›gyJ´ê O cþ Jáþ¡YF,%Ë><Æ—ULîû[1lØ�ë%´_Ô±�’ B ù ¼dn¶ÀœB³ŠÂjç¬ß¡á] šþ²ùƒÕØæ²ìÇ®TÕî£aQläVrLþ�ªj[g ÃÏÐðJaªŽÂò:;8»kž;Øå±+#¶þÞÜìç”m.{hzŸ‹­ãž=�–B“BœB³öñXil˜ÁùéX99ÙðJ�åDßÿø5ðUüstOC9þ8ëFsò"‹µ_ìÝïOâHÀñ'†Àã!¶ÐYK€€ò#ƈ€¢¸‹VÏ(*èéê¡+¹xÑdßxfsÞÿ~�iAja‹w·—»8Ÿh(3ôÍw§e‚¼gr t1ù@;m¶ÐE£‚6Uµ*¼=4íì¡)Œ‘ ¡—œ$‰”À•ÌÇ ÇšBr`Ȥ™Še€RÊ+:}ù·¡¡¸Ç €°ÖÍ÷€ØÂvÐ3¶¿ÊjÄ£)Õ¨¸q„§fh®·ãžRw€l(ÚÇã€��NÖÀ”5¯$y›jÉ14?c-dŽq‹Mª¥n{„h‘UDC¡Ø ª§ 7ðÚz�Úf׺‡°9u"‘Ö…æœ>ºã^�áî‡D¾zj„æ$®.ŠÑyU‚m^ÖñØCó”LK‘2î�îC@EðØ¾Ÿ=<œœñ,šûYÃFÆ5]W[ #4WS'’Wà °)é;˜ÄFH—esª¥]›5lÆ,óšÂ9Ö¦AZÀ]¡ÿÐòÐä8޳‡f²sù}ê<ê¿~픤ƒ‡;Ñ]úêûµT*]ÞÑ=]^þ’p?v¾L—.;Í÷í¨ ŠÍ£×e’] ÛZÁ¥w”äúÜ é£eÜõ[ñ;„fzy1—Ú ƒÉ3—Á�$i¢›� MW|SC˜„²)BHn Ñå¥�d1æ|­ÛoCBsz ¯bì=!ì4�qÛ@]5’bá3ƒ²h„æ¹@ µ€A`ª8/¡¹j.ÿ¼éšl†� ±Š®áOYŽšSG­…AJXêV–èã¶fŒA~¶…¦é¦dAw�Îk„¦´ KÁ °ÍË2?€.Ñ’ól>{`gܾsï3²J§™‘ocûFh.‚.…§ŽŸÑL³] 즛!¡é7Ÿµ†¤ÿÐòÐä8޳‡æÝ�[÷¥ãq‹ºýHÏšÐã.#.=zaP¬ó Í÷m½ÓŠ2 …u°HË»%€Ò*Nhûç·µ2@ؼî�&<ß#4™¤CM“�¡Ù $Ü78²N¥ù<àÔ¹ýRü¨Ya…þ9Ù*¨H½54«¶%8û)ÌbƒõvQFÄñ5öŸ°ç¼šMbG^€ŸU¨ÌZSF�shÞbÈš?5úL{hZÇ3<4sÆ{šPÊ�fËý�Ð,²É0 ææ‡¾ÐTœCÓµ½ÛBÊ14øÂÅ-MŽã¸B3ùpùõ®óèš�%&ÆCó]k+æÅ@m «.€%4©Lê¢(—=ß+4“$C¹ F M˜"ô„ 8”æ38„& #.�µ® XjÄSÀbÝë÷ï¾94Sß Í#L›ù´L2·uVFyÊXå\4¥CVe ²¸TZQ®·õÁް¢Y´†f¯Vüþy[hÚÆ3<4¯ÍšÜ„YÜÇÐ<Ä|w(Á7…¦ÐÀõIâ÷ï9‡¦(_-v@PxhrÇ Í„ïGãÔù˜^›¿<ýòkÒ=(4Ç| ÇïÑä_oôT1º8VÁN(¶Nl¡Éü„Sß+4$C‰Ä £†fŽÄàEŠˆðÍÒ|ÇЄyL…¯î@Pê«‘:ÞÕxsh†ð †jàÒ€�eß”Ç#èrÍnÃ<.ujŽ®åšÇ˜ë M¡e4`ÆšÖñ Í:N5‡kÐÀ1çÐ<Ã9`ÖÑó¦ÐŒc«Â^Ñ94¡©€éZšÇqC“Þ<¹u�=$Ÿ¾¸ öÐLtÙÂf’aûûæQÚ€ÐV<@‰ÛÛ"ôÔä¼ MÏ»½ÿthJI`¢d L‚¦p ˜,™šBï—RØ\üL ú­ùº1ºõ­Ò|†BSRÎ?á0§fk}:ÃI`"S &×áuh.µ Ûs%2®�üá)¦RÓì§Ÿ€!šòæÁ0KÒ½3GòC3áOÁ'³a:ú%2 |"óÏ].|£4ŸÁ)4™6–åi`±pB‡tˆÇ,‡NAT‡„æÆÐЄÜh!ÉÇ`“Áqú"QM¦?êJ]º)¯/²GgZ)+yçЄ3¹w¦úÈh·mtÍŠªlÒ&»f¡P0H·ÚXÛ¼,ã±QpËèÀû00+XÆtm MQÓèî{è}[hΡæ¦�Z!4Çäu‰þËæú-MŽã8Kh<ÐâùKŸ¯óȶ;ßeÌšlÍÓ×¹;°œ:ÿï,iòÍOýñ¾Þ­7Eé™t«~[hB¾¡!âjþ~h.F"‘ ’Šèc„D‚ñåùЋÒ[ÜôøÉÔ½“�.ÑyÉ”~;L��â Å7sd*Lgá¥OÜô³­á¥ù £…f±ñÒf­Z}¡|Ãj$ßÂÆ69Þ]ÁÕ½A¡)ª»kT…Λþ‚ ½�±0ÃÕù‰#¥)�ÝÞïm�iÆâ\ik¤~Ö’§ØL‹¸¾µÝÖŒxZY[ÛCuMW…A~Â+ vc¬u�Ú>Ý;–óâšî úmt5ý—]ü¬ß¦ØDäöÄÖa•…&ìãø‚wâ�”¯뼬ã±SÔ›óÉù"ƒ¨¢ʲ[h‚_V÷W&±(8…憾ƒU,¯éèpôIÜx/Æ#òz#ÿz^Á5�ñvͪí¯Ô x&ôZšÇqfhZU$7•|Hè·â˜/êHŠÙ?£iõüÃhxgþ¯%“Ð#Šàh:ãùG¾Þ(EzvhFˆ.w €)NHLî}´ßØ.‘ž0;4AMBÜKI¥@‰Ë)º  /Íg14¡€‹`r­Éˆåeóƒ|›ëˆòîX¸¦©¶Ð¤–²õOP2'lˆ×*"žÿ„�é}­ (qá�îågsÖÂ�þûª¹ØÕ€A–ÁD4DõTÌ6”S€ ö̃NÅ®èªúöUݼȵ  j°tŽuÛ¼,㱇&\hˆ-?tãPÖýØC‚tÒ­œBs{@—�1ÐÒ šœhÐ šœhÐ šœhÐ šœhÐ šœhÐ šœhcÇþYÂ8Ž?H¸O1“ 1‰BPÁAc!!¤°ˆé®®±YØ÷ÿ:.3潸,œ—c~¶p—ä™?ÅòE€ÿB „&üš` 4:~YÓ«Ô´Uô‰Y{ ?6iý×ÙNhhWæ#žÛoñ�šð•ÌÞß<ê½½K_Ä�zy×ÌWúÄ…WôÇRž½¸Á”æÝ(çvk 4àëØ0O©³¤ñ�2[[õ¹¦?–¤•¢'ÜàÑCÓíÿóèKÏ!Ñ1'ã¥s#4à#Møb6̼†æøV®G<~hºý}™›ö:„&| ¡ _Š ÍB"4šMøË6œj>Š>4s2ä^£Yò�UZÊKuÔ>ÝäQYÖkóZ¢#2.zM_/©¶Yµ¼M[ë¥X´óõ|=!Úè9ϵögÙaa”M¯DÞª,W9YëUzÜnÈQZ÷OŸVÇtåQÏ ¶¡)ºƒl÷tãÕi}WtOÖÓ¬ÛYb_ezï¹Ðt/¹SgÛ…¢§ûwCª…¸�¾ZÇœj­Ì'Ùßå®L»eŲʶߩã®ÌÙëÐŽ×+2vZÎýtMîÊéÒÿ`BFçB3iørš×€¹ûiß¿5e£ÜÜ…fÆVb>­í]^ÏfÎTeô·ôpe½ýmæ…Ù3G 1<÷`M{;vò|BþS']Ûù.4O×¾ «‡&{ã¸õ…l9Nˆ(/‚‰Lf��™-Ln17Ô)Ù7}o’o‹ mhÆÅä$ÕCh q¤”øm–×…ß"ñv\4©/ò̦“ÏqHâÔðbšA<‘·�õÜà ÇÍU©EÁóFÆú¤Â”+áž�ù‡ Y±&{ŽãUù‘ lšƒ—ü‚w¾šU܈�öO5Ç ÏÛŸ›»-©nÌF)r¡ùIu(xÞ„Bj.=^YïÛ¯í/xúìÜÃ5[Îf‰ìŽ}x6àg{箣8 …á#AñŽå¢h@"‚P QP:Š‘h¶AâýŸceÇì&cgØ‹ØmÎ×DÞØçV}J² ðh2 óÏX¶Ï³à‡hfXS+Y‡®hN…R³¾iaš“öMxJW¤BÄð‰y"Jeµ -O™M„ŽO Í7ŽýXÚU�&h“ˆÖíÎÉzc‰f[b®o4+¿]Gm}B̰¤!ruIסÊjRµ*µ¢iÊéÜ Þ†ê÷�‹Z-¤ý�fG4cÒméq‹;&ŸGfÈ0Vwö²Ô:9sõmå\â>&}•�#Ã0 ‹&Ã0¯ÄM‘#jE³ó~õÒu¥›q”3®�-1.JcnJвPÝ Q}Þ4 %š ‹f?–xíÍ•º©–¨ilÑôIqGáÍ�éC]w8’b®îHÆd0ïü•ÜæF4? ¤lË/|wý¦7ÅùKÑ\¶uÝH1Ų?²N'[ò­¾k÷ö]}[9ßñA�dVþD“aM†a^‹-šTH„F4Cä¤ñ‘tDÓ(W„‘4l5 Ú_<c-ª=ÑK¥xÍVu‹xP4?ÇòLÎ5F»<ý°°Y‡�K4+ÒdX¸D3"Å‘6:Í 5=’Õ›GÆ÷J½a#šýCf0wý“›F_ŠæD-¾™Jb{d†PéöJ#L(�7gßVÎÒ”˜Û!†aX4†y-¶hÒ§´Í9ÎÔRaL#GF4¯øA¬�nI„W‚j™*uúÁõ‰höc¹E“Ž5€ê¼°E31"çMs�(Ñ,ð «ÏÞY¨·mªZ4û‡ºƒ¡ÁúcÌL“¿#šÛÏ#3ˆêFÔL©À…ˆœ}[9øï\Ù!†aX4†y1¶hÒgJzobSHáÍ%ªÐ þõˆˆÎ‰P²)ª�Þ´ þÑìÅr‹¦ÂŸ�+È·?ÍP‡t� 7f˜‡†ÀˆfÿÐj2 Ö™ºiö›¢ÙÙƒ=¼B üTÓgßVÎ ‹G�;Ã0 ‹&Ã0¯ÆÍq‚­Í1î¤Y`GnÑôÑPqÏDrV'ßZn6(éÁÑìÅr‹¦!-‘ý¹hRŸÜˆ9�•ØX?ØÞ;d²Üõop&Mô{¢©GfsÅrŽB¿ûžÊÀÙ·•s…Ù£…‹‚a†E“a˜Wc‹&-ÍKcº#4Þ ˆ&%få·�ßJ¼iKËómRš uÕ0ýB4K¢~¬Ñ<.½•ø5Ñ,¢cN /œÐá‘⤎_M™" [Ñ´�Œ.¾çÛ¡ú'HtÈ´ù$š›'¢ÙÙѾÑ#[VSwßVÎj¡ÏVð>…à?Ä0 ‹&Ã0¯Æ-šTÑá®ôqƒj2$š8©-ÇGÒ[oð´6‰h2|h繃¢9Ç) ~¬ÑŒqn7ÆôT4M`[4C)/D4ÞaÔÙyK•Ûá.ˆ¼Ö‚(Xaߊ¦uh®&¢“Õ/jÔQ°GO4cÄâKÑì�ì'Í©ŠT»ò†‘»o+§×à]¥9ή“]É?ÚÎ0 ‹&Ã0¯ÅÍô­L"?Ÿ /4$š´òr¬Iá9ic3rä�õù¦B ŠæD¢š.ú±Ü¢¹¨Ð¬Þk$‹§¢Ù ÜMÚÍyZiŸ3¤ ’xKyU«"Aïï8ùF4­Cï@¦3ª_kžœî«¤ÿ¿Î¯À} ‹fd"´uL�ÂÝ·�S÷QKÔÂb,ˆa†E“a˜Wb‹&…ÆfĨ–Hâ ‹¦ø¨%�-©%o-K$˜‘Æ‹2@î�4,š´m€·~,·h’?­€dïÓ¯ˆ¦ l‰&-ã¸�ê„Y%€Ü…¤9–' ŠÆdDÓ:$j{’»~MQ¨'¦IƒX'@:,š½‘õg%ó”v¨o;ç±l ó÷Ôâ[’ó—š Ã°h2 ó? üç[Н…Å+=A¤v,7· zØFÞ“2}_|yHø…xV:qeÌŽ¿™�;§ŸÒüâœa˜ßÍï�c5¿Ê`,IEND®B`‚pydantic-pydantic-e28e879/docs/img/logfire_span.png000066400000000000000000001143441526274674700224300ustar00rootroot00000000000000‰PNG  IHDR$¨:´4X|PLTE"""***HHHΑx,+3ÉÉÉœÜþÿÿÿÃmDÔÔÔ##"('&]]]&''/*(%%%ùÛ¹5/,<2/É�uÈÈÈ‚‚‚[F?¶‚k%$#/69R@:‘jYM>78ARuuukkjDDD½†nsWK���YYY@@@du‹ƒaRÅÅÅ///fNCLak666D83µµµ:::ŒfVNep¸‚lRRRÌ’xŠŠŠLLLbK@Ä‹r‡dTWD=žq_†††^}޲k©zfÀÀÀ™™™[y‰_IAººº¥¥¥c„•4MU}¬Æ©©©G[dº…m¬|gTTTx£¼).0Rkw¬¬¬¿ˆpooo¯¯¯…bS-36®}icLB)+,u ¶‡º×ŽhW„·ÒUo}FWa�Æän—«`€‘Wq��´În”©gŠ�yyyO>8™Øù‰½Ú£taBQ[ˆp’kZ–ÒñqrrWXV18Fr&÷À¸'óɲ#^:µ�äL ž*sÉÍ�øèl»HVÖÀÓšÚE2ñýx[’C$o" ’" ’'Dà„HœÉ;vlÃ@P”Ö%C°“Üh–\#3%$W"�“æNÖÈý—e¸pG$kS.ÌÑk€P|‘ìâÔDâŠä·‘ O$»øMvI‘8"Yå'Ü%âˆd—-SÎ’ÂsDrȆå7å* 8G$羑‹mF3@ŽHnÙò©m–ÉaüIµ¼˜ž™$’ž¥”ã(·DRÍ,´õkßg3U" àÅ®ý»&ÆqÿŠðÁ»´Á¸IFˆ éPÌ”!B‹à"¸AâîJˆ889tú?¸ÚÅIèrK¹êž$Ú‡ÓX½k¨䵨˜ß<Ð7Ñš�b5EñÒDJ¥Xðé‘Ü~{ó¿šL¼nóHær¹lˆz)•.Ò¤Ò^ðÙ‘|ý#‘™|É#™Ë岡—NÐ/l¤¤ªj=~r$“[Æ—8‡Üöõ5®çÙHNzeº’‰Y¥¿ Št=ª©¤Í`˜÷”*û³ÿ›†k¶U:Ôs»DT7oé]®yG¹ÜN±Túºx<²øZ*/i¤¤¾= >=’Û/©¶ç"ySiÛ€Ö1ÊNφ‘4é}uŒè/¸Ðt’ç·ð ʘŒi3TQ¡TÙŸýŸ4BÀ^ÓA‡¥&½kƒr¹�j©´ ‹R©Jgüö‘Tv/I§‡¯³�äv{y$›sìh.e¦ˆ7-!ƒHŠÓ]†Æ’}C'Iq-Ü“}¦ø <’'fÎBo:ø`$ex Û šG2÷÷‘|¤�DR�É‹©Ò øó/ªGò… y6’Šnša$禫TmÔÊ�dþ>êºv$ù <’'fΆŒd¥(ßQÉ\¶‘¼œz:’’JòF‚2Žä¯oß~]Éë±Xÿ1 u³‹ä†]• #É\?’DÿW$gÚwJ•G2wµHÒ;_JVx%ù‹kEòL�¡À%"‘ÝŠì¡n4‰»©«J�¾E¹øÔÎF’ Øy$¯IÍ¢<’¹kGRUï$:SIþôŠ‘¼àP¬7û™ + @8¦ÄÓR 9·|j±fëñT$Ë$ ½%zžLL£2·–�Â#©ÖæVGÞ�±Ý¦®ØÎЈOï� yž§=${³'•¹¯‹îùH6V;PU ÄÃjîÛ›�¸fEcS·J°9»ûz'gRÌ�¶\�gŠÏÐ3—Ö\~ˆ"yt |fF¸oëÖÒ¬S*v±ôÜÖí�+.ÕÚ›ÃfÇùžœý§êAUÜ�{?t,§ý$¼]Lí±qûÄ=yž$±Œ�yá)<’ Ìۺ?Z‹y$s�$ÿ y žÿN’G†?¹f$ë¤þñtCÄ4…˜ï-ì­„ý-Ä´xç;þó‰H’ƒ^T,—+,¢r9€BZï"ÙþF‡”,ôlVÁîø�¢õ¹ÕÙº®‰úèPäΜ¹§~.’Ez;”°™P¤ïKðÊÄ(hl»ÈwPBÆ#‘PÑ u–jâ>’|EÖ˜EòèøḬ̀æ´ôÚÌfB Ò|´:\*Y·1cÇI"9`Ó8ÚeŠMÁ^k€L»‹iÚX²Íîi‡¢-r ÷I$�†©‚ÍdaÙÌ#™ûp$ƒÒžzþ¿Û¼Cû‡«Fò»Àw'ÃÙØÑñŸãŒf` ¾…†H�Ä蜈¤¨¡Ad`D Gš•=´�š é1yCF§'ÄE‹c;ÓZ£‘àjR�tå�b��Þݬ1k¾IÑÒÑjÄt—XOH¨·a&] mv ΀G1ÁÖØØ*|C$jŽ ErbcÅv­×ü*Ç×Àg&a±LÝ[Íê¥GòѺí’8±¢ƒ¥úóãvˉê!ä]Ç–?oâýÉÅtBù�¨`B/~Ü>�G2eah,iƒ•�Î(�dî‘ä¿!‚8•ÁùßIòJòF^/’ÔBD [ƒ.Ÿ °Ü¾2cÑñ=�X°ÚoáÕ…þÀl”å‰H>Á‰š£KQâ ­’³Iqº¶>ÙmmÆÝ@'y_†™É Z«aú~$ŸQ£H¡³Œ®ÐÃ*yù›½3vQ‹ãøO¾pd&Ì¦Š‚ $¢•E-E°‘ÛBÆÞFq˜"•Å¢ÿƒ­ÓX \³ÍÂÝ-÷�y‰ù­ÉS³çÝÌíìû»3š—|ßo˜Ï¼ä½Ä9ú" ÌÈâA«زámîŒÉ£h­b’lîFÌx8sÍhú&¿Á@“IÖ'ò(;xŽ”êP’ÁP´`Ø´ã³átƒvÆ'±} 8mŽ›¨$%Y’ñ´§è“ÿ§ÀP’T\ I^CÎ+%Ù‘g,ÉŽ|CIê X�gŽö¼.<)ôzmÿ—h[Ø)!’mïƽ\’%·~ Óâ÷w…n ¥–'I&……ï� D1’H²€�N‚b.}Z’K¬‰ébAûÏÄ¿F*ú“ñ;RGžˆ™£‘dö>ƒ 3ÞÎ< wÕ@W*É}ú¨FJu ɰT ‘f(<æÛ·!:ƒG,aF%È’”æ#räS�’¤âI Gòy÷Œ_JbI“þI~ýðákRI’¾¶±g³OÖ"�”X·ò`l‘mY±iþñ0;ìÞŽneíâ‰Øn¤5�koÏM Xc$™‰uÑ ["É rIg·¯0­QÈõð*ÀÀ?C¥Cz~žÛéT'b&(D$Yá -˜±>pfÍÅcØÙ©$ŸÃ /K‘äúÛ ç; =ò)ÁÒ½ÎØä“G5š'�%))ÌîÉçZ�$—HR‘ýÈ/½©$ÿúúõ¯³’d´ZznA� ’UI` ÚÕCna;`IÑ[²§ï¸±Öä³EI >ëâí|ÜKRëöÖé|IZä£K%YÇ2©$µ407k�ñêXÜ1×A¶âBàg¤÷ÊgÌ]¬˜$7œ¡3ÖÎÜî&HK%Y¢€©¥”*"ɽbs{ûu5 p¼Ü™1rQ'Ʋ$%…™ðÏu¥$©¸@’ñ3ì<;òUO·ù&›ø§9|aIãz\5lY�#Ÿˆ:C„$—dÎì]S@_ Tëð:q�§È:ÉTÕJm’tOJrˆOÉ×I~œ€S½"ÑÌ•T’}<ˆÆ~¿–6vÓ¸$sœ!3ÖÎ\˜‰t↠�B¤TÑu’,ÉæÄcÙìyIrÀˆ$%…i"¥ÖI*ä’œd$LX’rG’?m3›ü W�¸ùrT’_NK’Y°ôØH²KÚ €ÛH›ëï‘ä–"¤Ü¹w;ð¯sÍ( "$Ù^`ÒÏ>¦ˆ¬$’¬"C2\´)džÅóéŒ{ÑÐ,‡\K%™r[Dº³ �V™Z¯£ÅN·ù„T|iÆúÀ™KóQšºH6Š‘R—d Mâvå3’ŒdIJ ÓB7°’¤â@zǘ‘„ȪŸÈ–¯¶ˆÇ‹Œ\Ÿ%¿\.{$hcGÛO5'�ëÖŸ¯Ñ‰¨t‘$)‡.}ö¶y.|#$™A=�¢‘D’kÔIÆ yâÕMÑn€ž×ð‰áIÎ=cé×$ØÆ$ù‘3L`ÆúÀ™uÃèÐ)ÜÐBØ‘R��¤n„Š@êŒ$%Y’ñÂÔÃcݹJ’Šï•¤ü¾š¼ßØÈó‹Éù»ß^†|‘_­¤(i9<pƒP¸Ù/ìYxhGÿ¸$õOų’äªQ"�f8©<’l »ß(‰$k|¦9ø-M{ pS‡S/}¢Ï�•äš�þ<Ï’)+&Ér˜á® 3ÒΜ`(æbz)Õ IR •°ÝœÎHR�%/ _)¨ÙmÅ?=Ýæûjä7'¾Òm‰<=ó›l ÐË1I²‘+k”ê;ÞW{Iº›B­ŽU1«¯¦G%Y˜Âꟓ¤f¯tg”³ÀFâûÀuU¹$Ũ‰%yg#C‚ †ÄÔà†ƒ²`c½ÑÝï¹BtÛ4žIОÕÙ+‘œ‹”; T±&A1IjMÜ“à 0ã}àÌ´ô í°&•¤SöU¼ÀC¬T4ÆJ.É{¬RÜî¼$9`T’ñÂt ·@úVIR‘pâF.I:Îk=à‚M.{TÚ‡ƒópбEp)ßÃ-‘V°ÊÁy¸µœ˜¸©Xœ“$­‘F Ò¢�Í�gW§Š‘�Ð6åɯ¾’Ÿn“� KÒkgUÄq,dá~öÐÂ\ n7�Ij®£{ \_£½–ì•hΧ@G=4Ë‘Ž‘¤8¶åIGë[9˜ñ>pfmˆ¡îýo4S2IZÃEÛsÝ £ÛX©¨ ¤’Ôf¦üvCíœ$%Y’ñÂÐvÉ«}0R’T$“䙢%'þ¨´Ú%’d1²_^¾}ùå”$SU„¸•ÐÛuŒ¾ÿŠÀº9*É4€ùYIvÁgÀÓYz…†?»ÝÙš˜³¦S¶ä’|VÕß7]±`×ë6Œ%°šÃM}a ÕÙÛÒi,7CÃɓdz±køÔ°Pe¯Äs ¡ŠŽ­õN*ùI\’tØéj˜±>pf1³Fëê Ó¬ü¶ÄŽm´ž&EI©´ŒmU‹K’ô‘·ß]»Ö5�“d< K2^ñ®1j¸Ö•šÝV\$É…ÉŒY‹?t÷â‘$ë0‹H2$áf`À£™+ñàö63Г ¿0€V­}T’]Îdz’¤r\‡-€éÃ�/IÒëMÀöèˆ$SOS`Ì‚¢Š×ÞÙÖ(B§¾wÌÝÆëà´Q&ŸO^hÌó{%ž³N™�·q�d’¤¾÷æªB˜ñ>pf¢bÚà¦K$—$uÒ.`ÌÊÒR•f.p+‘$uÄ~�t‘’H’F$-ŒàzíÆ¨«–).øøžÝ–Ý‹˜üó.’$û�Ç’,Έ9IJ*Û£WJÙ"…t E:ÅÝUŠÎÓÀ˜˜böÐ¥‚N§HuHÀ™ÊIèVúù+ý eáñ°a!AZŽÙ¡ch�\$îƒ,óm/ûÈi%ë$µ.‡Š•Š:Çß–®z·”y‘å…¹-g¯I¡¸àƒÀx�$¯!¿€ $ÉFüíô+ɯ™þt­•F?;ϹCLO’ªTІïýHYC!‘BˆOH$…âI!„ø„DR!>ñÿFÒÇ6€ÕʆBü3j‰äÄ;‰Fw{"¿P\ã÷8^®g=ÜÏøþ¢‰Ù „7’•Fmìàšïy>.­¯6þ$’SÒÚl6ŠôZ¸ÛàçŠQ ×¾z¯BˆÚ"¹Ði®,F®¬ù«þa$öðÈÄÁ½LLÑÇÍWfÜB!j�¤ö¤¸Â…z"©ÙCÜ©ˆ¤Öñù¨’H !þN$Ñ$[8qÞ[£í°Í¹2Sh­t¼5³5ò± üŒäËûx»ÊlÜVFЂ¦¹]}Ž9Âɳ¹„Ö03ÊH¢áò Õe悉i†çS!Äcª9’8ðZÏ#¹÷Ÿ¹=€Ìʧ‡€5ð#’_Z¹ïà¶2’Ïx™�J_2]¾°7AKùŒÂY$1âÕeÚÌ�*S!ÄCª;’&ü=Í¡ý±à8üÙó} £ÔÛ‹Ý>rŒj$ƒ„o:c®p[ɘF~ÄÉÒî|Ql†vdm¢G…óHΩP]&ðCÝsß®L…©îHf<08òV†(ÏIöÓÚ�nP�äŽ[hNúŽ›ÊH†yƒ4u ½ò ðÄÁ÷£³Ø–‡B%’ rZ]¦<'YNå›BB<¦º#¹c`Â!N2¸þàÆc§É%“ÜkJŽ Ã0·´2”š\kØïû|ú4Q¨DÒVl],SD²:B<¢º#Ùdä<<1yD%’ë~ØüB¶ª‘´tOSÜeÊ¡�Bk6ϺŒLØC�iàŽ�w†(T"Ù!§Ë‘¬N…�¨îHxZü)ÁY$Ÿ"Eí*’pb‹TÇw˜’O³ÙìÈrNì2xfˆ9?ol•ƒB%’!UP.sÉr*‘âQÕÉ-SÀ!w¹¯»>ÊHfܼfíeK]FRs‘G¸­8'ÙPjm12ÂÝ0e|šr„Ø 0gß¶¶(�EÒलLɳ©DRˆUs$gŠ _Å)”‘<°‰÷"’;£rpSI¬x„²›ßýÂZr’èÑXò¥2’�Ye™2’gS‰¤ªÞH.-¾B‹™ádºkðÉ[±—?‰—‘ì,§8ñ8Ä e$_,>H9ÀÉ+ch+Î8°ß?s‰ŸÊHN»ôœËeЦ‡óåí¶�ªÆH:mÃ¥7…Ö·T@oË/ÐÜï7û,’�‡‡|e1Ä—aßÑÜÆëÝeû£Q>«<¹gx…)Ie¼Y�¤ ÃHñQ‘$Ájø*88wxŸZu÷x‘<󰆑âc"Ù¡<>™êJ¹Àku+Däã}‘d• ‡-©ùŸ"‰,Iæ�Û0R|T$›"ôŒO¦*”.^ɺå^½;’,Àay’êÿ+’vKUù†a¤;~$O…ÖÅçòÆHž�Ô²ßÉù|îU(´ê¹å2O¾•n"’îbâ7‡Ä2ý ä× —´²’Á`R(ÛЬvøv†a¤9~$·Bˆµ=RZ]H^øÒ‚l„² ¬oBÚp…‚�'¤z¼r± ¹@ãY°v¾oEhÝ´ÂÄòjÁ<Õ.[$ÔxÙFh§K„ìå°†?tIÊe �Ü�v߀VŽÆ¦�”H^‘â�É[J—wA±fI=Ü*B»n¶(äÍ,° I]Ë×—å"å ÃHqüHÞ éŽ�û‘|:’ÖHìø/ŠäLhÛ3w%´[0˱q5Ždæ9Zeÿ#’¾H(@éme·ì{àò d9Šä²`ɾåú‡# OoÝ yæØ,<ÿ¿#Ù'mÜso(æ_'"™'­ÒÝ¿rÃ0R?’Ü¿ª+§½HÒvÉ@ÄF/ˆ$mÄ΀Dd¦(’+ODšGRww—ܤ9�d°ç1ùIaž"ÑÞñ7b­\XI÷p$;ú¨ÊY˂ݒTøw$ë<‘y|YÕ6%�¬(’uŠø5Hù:_W5ŒOë5‘´¸gU %¤»(’Úêt3Æ�µ`Ï�0›é‘dkoºÚ¶ã­ãî;¡Ppât„ò "ÍœoÂåÎ}ÿ6\åû~àÓ�]T‡§:®<ƽÇ#iVËqšœÆÐç2å!Ýs˜z¸þÅa›Žä˜{¸.AÉð‰.ð¼ü>‚%G’µùGb'ñÇš^Ð/µHqÂH²v©yOÌËä̯n #ÅÇDr)¤ ôÝâh?’^ã°‘ ](®_ÉÓ*`Íã=ó«-�rxø\gÑ»lãHª²U åâÏÝí '» É]ë+ ¥‡=•Di†$ ¬ÄS2�!©’�ÔW*•öÁHž�Ò��7ž/IšØÝ¦Á¹šõ°HŠßSŽí(’kAJ!žR†ñ›½3hM ð!„Mz±×lA‚ÄžzP¨Ç ìE‚ЃĻ—RŠÅƒ§=x�ú¼ÚK€Úöo­™7&¯jÞ¦´w™ï°ûúšDO3�™†QphI>ofm*(?S–dӔƗÂEÕEI¢ãZ¸Ì [áZðQvä3‘8“$ RGRq[’í}™õ)ŧ2-96;qלᲂqÞ¦3:Q¶!~uêGbÑCÉŒóIvN’§Ô6W\»¸ÙÇ8±J’¤Ìû¬œÌÙPŒûÍÐ3̱òIZËØC?PN²$}@ÌwM”� ’|KêæÆ ¾Ø˜c ‚‚¸‹$I_n[’¤´­Ï@fÕìÌÌ=Åm݇m\4^œ�?_š©’¼­T*ÎØ®‹Ø÷±§Ñª�"É+©¶ÓÜ|ÔlûŠ’4‘šüŒO&2ŒšÃK2ˆÓ`Ha™¬:ðŒˆWYªÛR:§l™$YÀEY€Qéó¦ps&Ý5Û‘äÄ@–õA ©[²#,H0�›ðq6ˆ%Y£úsÃ^YK¬{¸?Æ–Hð„ÿR$rC©½Y¢|) €7’ÌI•öIAŽ2hÁéç$Ù4¶¹Žû$¥ý’|x36,&� i)­&¼a¯®$Iw"�óS5•’­äÁj�þÊy÷—‰›1IÒ¥nt¹Ã'nÄ–%y%BW†aV’ÚÂØ"Ø•ä…!7š‡Ÿ“dÇØf”M’ð�7&¤02$Â’.AûnOÚª�)$9q@ö×X”«ó^FIV¤žòkY%Éš¨¶3 £à°’üil3Ý‘$¹êƒÏI²‡‹[A³·þg˜E’ˆÓ}“ú+÷CeM +õ|§×­dyV쩾a�"ÉûI¡o¾ÏâÏÁŒº‚ž!£$5=¢RfÝTI?ýèN¬c˜ÿ�ì’,Û,4I’ÄB—¤F>Ì*É+ŒA&“$ ?Ð\Ž ûñ¤èÍì Æ\©pãVí¦Phk§ºmF! Vw ‡5—¬’„‘\®îb2­’ä³(1 £à ’tE¶ý&x¡ˆqG’e´ç ×vÜ'ù eágˬ’ ð?"IgøÂ~N¤ O:W'·%É$ÐïH2õl¡¶�ó‰²$ *I6%�šTêVHr*ê< Ã(8¨$çh¿“w2¼Þ•ä�c �o/bIÂ2÷ž%I=G7ôEkkž”’¤%Tçk.¥0mÌ­Ï?a ¬Ó¬’Ô{’H%™;]ãHf 2H’ž6±È-K²¬’ä#†ª9Òa„£’ä½p6Ã0 *É:ZqË™îŽ$Í×ÍŒ¢A¼Äw/fhç‹Ì’„& ¿Pc×\š$)ÏÅô9^‚nóq;rÉS´ºÝwRÚ<‰$ó} ?óIþŒ÷m´0 5—E’æIé3)P¿sÓ%é•У€U,‰M…$=�ÏJc—$%Ì6lðéçDuÄeR_ÎbIvi U—Y’4þÚhÔéüŒtI’œ—K~‰IŸæcp…x3ñRz*!ÿé�2\1^½’.Åâº>¿©>^ãoÍl’´uAÉ¢ª#ùò0E’ñMån]\šSI²ˆ�oÃ0 )É¡ñ1ylÉ‘UGô—†`cI:¸‰Ü—3KCæÍWHòÊ@¨ ]f� û˾.t`ÒuCt7’„¹.SêC6IVtA¹¶®ië*U’æ³.cƒJ’Cñx†aP’$1ÎÉH’ê¿ iù» ‰$¡¿0Ëö$ OK#]‘*I×tãÀHXREÉ…w¸yi.1Ì낆ŸnlÜÔ«�I’¨A$€˜~I)É«&ù8¥${<ºÍ0 /É ݘààÎ0Q�Œæ �n¤òô©è[œz�U’ˆ·6.ò#L¯n#f8zYlÄÈMÅÇ-^äÅ_/ëŸæ°EO>Xç nÊÁ™Üä¦%4dsÖ‚Ì’¼ÓwÒá‡áä^×óié6²ê •ÞŸ; ”¤6âã$FÁ!$ùy(G¯‘ í± Ƽ8µÃ +Ûµ®¯­Ü]蘒¸Ã¹³_f·Òèö¥;XNñ©mÂG©÷| «e‚šÖÅSPu¬L/Þþ Ãìrä’œýXS¶„–°ÂÝ€#ÆËS3ã×¢•õï=÷–[É&�£–äJ >¹`�õ£|C÷žW½ÞÁbúíSt˜Þ„ïÂÏ‹—>0 ³‡ã–$\‚%ýäg0hQÕyz_‡¥%¾ ›;É&�#—¤ÿjÈ}—Jñ«CI+yßâwá�ø˜4†IçÈ% Z!iÛùñ¼„¥•®ý/—ä´ßF7úÊ\Úf˜Ž]’ÚjÞ-ë÷¿ÏøðÂ5ÎJ²×l ƒ ¾�“p ¿(‘aÒ8~I2 Ãü7°$æ{÷Ïû$pü!Dø= ‹®JâÝ@BÒ�Èäà #iÂB\nÒ½‹“ÆÙ�Áè{pµCß�/L@lsœÿõûÚKS:~ó\¸€H‘" Dˆ$I ’@$ €H@‘€€uF2Ê«½À?ègDòÝõ$y#ß%X³ŸÉíñø¶·²`ÓÙÜ6þvÊÞÀºý„H>JžÈ"ktTˆO®íi]Ö[€µù ‘|—Ü <ÖØòyÛgâÓÙè"˜DÀúü„HÞJîÉ‚V«H¾Î{-Öæ—FòʸÅFnšAq^;}>¼Fó…¥Ýîd5›ÆrÕu™L¢²µS°`…‘|‘Ü?«V–´:ˆOëY'ƒÔ:UuÓµ±Öò4ªµ ²Øé€­9€€?ɪ’Éö¶\x™Ü¿^£ÂîãN½þà±øY5¦Ì"»tÈèæÌÓw"çv2ÈœK¥Ñx h)Òi´âø9€ß Ép%/)÷ŽÇ‡¯#ñ‹?Ö15jÅ#ÒÃi�:—�fʺ˜ͤÕíÐ+Ùè~ §Ñº!“~ƒ@$Õy¡¼“Üß-m§ã9–¹x”Z_³?_õ‰/-DL/Ò|ü�î jò+€€ßÉðŽûRv#¹-^ídTkû¥{ߥÆç™²œ=©\*ÑÓvþ­l[«:Žø“‘”m%Ÿy–¼/§Í”½ÃðîQëóË?(z6á’¹j ¨ý8R΢^­@ØzÎI.&¯>–¯ÔCê4£s0OÍÔeòI¡¹ˆÕy¤üÄIËþžHæÓYžÝ¸ëö¸R#'ïu{N«�z¸kD¶ãǵ^})¥ØÈ`Ó+Ç$,Z]$_'wÄ+rz°¹Ñ<•Ïìò<�õ0¼vŸzjöy>µï¹ªÉÛ|Êf>Ý·9Ì#¥ì]lÛÚ kX²ºHºä•ø½ªšÖûŸÄ™•I–÷Nç±ìu`òH¤r™DZÏ#¥ÄF}Ç! ËVÉâzòäí#ñŠšH¾Y5Eäá®)8ÿ d}‘”êÍ1y#ðúÁHÎÒ¢øñHY ’@$€H@‘€" Dˆ$IXC$¯]øOI ’@$@ˆ$|`ï~_“Šâ8Ž„ _H1©�eõ¤žD� Åè'+0PûA5ŠaQTDÙ²µ² ¤Fna¡{Òj³šÓ5Z­„¹¨ÅöŸuÎÕj¤»®V·>¯^�çÞóðÍU\ Œ$‘F’ˆÈ#IDd�‘$"²ÀHY`$‰ˆ,Ø%’‡Ã‰zœþ·Ã�s¹œøIË]|.‘ 5*’Í">ÔÓ"ðÇtÈ!,ÔbÃØÓ9ï h¼ð}¶›@D¶ÃH~_$W÷+ÉÛÈHýIF’ˆIF’ˆþâHN‰Ô *2…|iàs$}-mí”9ú þaó¼ÛW&{ýíG‹¿Ú`{"_Š{Píô‡»Ï?DYo[bØ\Üs%>P(eÐÓ6 “3ÞßÖì«IçæÍ›×ýP$=Þî {W9?ŸwqÍÞ›¨Ø°j1{÷ív1’D6ö"9ðX´è$L-çEO”#Ù"Ê´™C¢äNHÉ�¨H -�È�‹vgUI\¯m†âˉ-é®JH­ñ«ñ´97UžªɃ‹-:ú#‘\µÚÐÎÀ´¾I^ì‡i—qsM«ïd$‰l¬Q‘œˆDP“H©w" BKHòäðLÿè 3’‡º=7¢R€r%)c}�¤®iJÞO'Æ%Ô>"c<÷§âÃC’s׈äl¬½?+a=ŒŽ”úf a™Ö‘”�Í9)N'’�dÂK�~r^šQ–ˆ -<’W¯®¨ÉÅ{ŒGÞ�”;¸ÆØÚývÅqã�³É}­¯.=\[)h÷Õã "Ûiüfr÷x2ÍÅ÷^z õš‘”a%ÕÓY)AÉËÉ40*ýÈHÀ$Li®Ɉy0Wr܆Ö#³:’]NdÈŠèPêÐÖ�¤©V$ŸËœP–CYÒÔtÊUco%’­^³° "ûj|$ï%ˆ/ò’Æ-‚2)Ç Kš/õ %À�îéøó¹jD²ÊS™žÓ夸1¨×+è+brƒIõ¢ÍJª¸Îž={ù"yÓ¸‹/ŽT¦¼Æ©J$w€ˆì®ñ‘Ĉd§;�(û …¹‘ŒAqH@BŽÅLEéEJNtϺrPŸt¤§¦Bò±F$OC9)mÐf#±©©¤d0(£@¿ø�´—hÌ”“,|_$�›Œ[Þý(»eìÜ¡½0öT"y Ddw¿!’�³"r>Ÿ�öXRU[€Ü"nHW¨â4RFtÿ·¤º$ylv6,5"„0#鎉C³³¢ï%”t$‡¤Í UüÂHbûVÃ0–­_匱zYE%’+@Dv÷" Ï•@V¤8PùYqžHŽÍ)à7‘ô%áà¯É1�pF«"Ù.Ïñ+lüÉmÐ\Þû« c”†sè·ADv×ðHVô†¤eDüóDò‰ ÍÉRù<ܨÉÊÀW}'Ù)çñ+Ü7®A{d¬Åg¯'7ö2’DÿœßILKJB²ÎÚ‘œ‘°cžHæå£y^®^$u•þêHº‹j±y|ýúõQ,D·q Ú­¹E|et›;€v,8’‡ŠE?ˆÈÉÛÐb2Å‘“6§þ´ýÛH"-(Áæo#Ù"a·Âz‘,ß®Næª#‰„DÌ€f¦ñ3[€N´6½p³©õ°-…âzilׇկnh7oÖ�dX$"²�ÆG²SB…À¨;¡¥¢É'ž†oTE2xL²' 'ïHúÛHfr øïDÓõ"™�hº0Ö{_IwDÂ…üP´øS‘Ä}£éø…ãMåoÛ—ŒwGöÞ_ft‚ˆlÁv‘$"²ÂHY`$‰ˆ,0’DDI"" Œ$‘F’ˆÈ#IDd�‘$"²ÀHY`$‰ˆ,0’DDI"" Œ$‘F’ˆÈ#IDd�‘$"²ÀHY`$é{÷þÓÔÆqüCö$OÂéÚšÕ‚ÍØ2 ÉjˆC �ÔŒ‹� ‚v¬‘¨s“›—ÌBšd\Œ.@LC¹8£Î� Yœ3#úŸíû=m¹�³C‚ž×{Χ=þò´MB8�H !„‰¤B8�H !„ƒÝIoF†�M�ô+n8ðzñFy 83V®Ð�áFÚ\.#�“<Š l;#`¤®þ ±§lW$ ™s°©VBX5ÚÁZ9…³Ôj{üÌ£pâÏ�áz¤ËCô 6u‡”�±*ÛWŽuS6¶Û'téòeAˆ=åÍFr¾¬lr]$Ÿq<�HF–Úà°Ú¢Ñ¥ÂÿG$Kkk¯­�$H'’‡Îú±EζK$…xó‘T>[É¡åP:‘œâspXmÑÿ?"©ZɺkÓ‰äIÊÇ]¤cI!þ‡‘T^=’Úþˆ¤"‘b3»,’c±A˜FbfØ&zæžt{í"™Ó­,"iäFYa¿Žä†•7‹Uó´ºí¶Yy_<+kƒæŽ½ÀÄݲP?6òÆºÇæŸŒ ¯ì.LF÷hYa´îXìoŽÇ”T$Û¦{†�Ôš µ!i1TÖ—aIãÈ‘#¥Io0ˆ„`0 ¼\{¹×eIO‘Ò Í<1ÿÐ)3’VEÁàot4¨Àdªõ×Áª7ðøó/z x‚E©‡ 8 æSEPñ$#Yw<¿4€„ºÒÚË&¿ 6&I$Å޵푬âV/´0Ϙ{ÈÚõ1›Hža%Ž„î(3·Þà(6¬F8åžu5v�•Ž'ÉŸB/1óL6˜àêzæ–03?3Ï\Z]MrJF"’qVÎ@sGX»ï†öD_ÔÔ¼m$?ÏÌÌü2�H7©Ú:lKH»yÁ&’I9€O¢#¹a5N).³cgIñý‹_)·F¯šõYßù<É' (%7ÉOHùËí��”³uXwH")ö¬íŠäã––dïñ]hSܧ›ø(|£ûîmžq[#Ù ýœÊ]ÿsž}|ãúsŽbÃÊÝÐÐPÏau³¬ð’ï5 Í p¡É…èr_Y”‡­‘äåÂ^xÖ30¥³ÛÄ�7ÎM·š«Ç Ã<Û xÍH¾¬~¢îàA(qn=7ÚÄ(}ÊÞ¸zPZz�–*Ï-:vñÂåòÛDòéÙ‹R‰Îãi:¤¾6—–¶Ó¥J�YÂ%Wr�úg§ïj{ý4nX)ººê Äž²ý&ŸçY(UÕÕY„©… S‘´w{ÎL›ûGa]™¯IÚ­B\Ÿ`š' I®4Ÿ˜3,‘¼d R_×$»�Hâ «[_“|Þ`Ö|¤Å‡Ü`�æ˜Ó£ïБL±�¤³fºi@É£F´v:šŠ¤ý»Û(Ïàc¢ìu+Ëk’?Ò�Äù7]ÖHŽ«�qÌ<9—Æ¡x|>�õ5IÒAÿ‰* œ§Ë\‡É¿þ�{ÕöGrl`ÁmVï>VÍq¥s$ëù.”ŽZV‘ìLä-ãw›‘ÌI�»7F=<ðsÏì@"ømϹ³'ÒQ½õHú‰ÈŸêeÍÇ'Ÿ^‰$Žu]ûMg®  à•¨Û|Ó­“ù¿–P¶ÍÊ•G¾kW¯ºèÖ�'ÚOûJl"yàf{m9•`:ETXSî⮫W-%üÓGǮԨªK$Åþ°#‘bîDB÷$3GûzV#92;Ã< `”Sâúî%fnä¨íêîõ(ó=XVÞ3™ùÑ Ò�¤^…XÏÊ�Ðv{F=L†%’]bæÖB˜ëUûãO¶I×S*ñÂä9MD%ùÍ«‘4jÏ“.\6¥œ‡RðQ^Ñaʶ[5ž>¬»Ì}~ )åµ6‘l® ¢³$ýE?"I7ù¼�(×Z¢r5òµ›GrŠ9 !v»íޤUU_ÒÒÿxì?¬ÜƒjöʌžéÌŒª¾E)‹± ¼nY�ôÒÚ›�ÞÊÈÊý³°‰dêx�È£f¤A�šØÜsS„ØíäoÜì[:’kùé¼N Ìób×Û'‘n]#‚})¿f�ñ ‘4\¥7é8^§ežqCˆ]o¿DòÒqìKù%k”oˆd>]5ð:UÞn€»ß>‰¤°ºú›+ü¿øåï !‘B‰¤BH$…ÂŽDR!H$…Â�DR!H$…Â�DR!H$…Â�DR!H$…Â�DR!H$…Â�DòMûè­ß?„b¿ØáHº3ÜØ^^ï¶^“ñÕ™™ï@±_ìp$ñÏX5ÚÁëVÏUx5®GÚ¾Îüþ½o¿€b¿x£‘|Æq¼ªÑ¥Ât#i]m=’ïg¾ !Ä>òF#9´«:Ãát#i]m=’ßd¾ !Ä>ò&#©í¶H~šù„ûÈ›‹dN·²ÓX¬ 9¡²/”ŒØ9T�†cnhUCcPF†ÚtÇbs<¦ÀÊ �V¥"éŽMÏMe–Uê�m$�#GŽ|$‘ÿ°wï/M…qÇ?£_˜k�Š.Vt�îÄ2º_`�­ ֢Ĭ° 6k­²&II³uÁŠ(R+­tä"íEýÒßÕsžiΞZ[a-Ïçž³s¾çñÇ7Gw؈ò ’¢ÔBóK‰_”¸ Àa öèƒP:ä&”z‰h‘>.|ïRX*’W£bkÛcUÚÈŒäV·Û½ \q?9È E²¨Ú¢)HS W�ßßÑÉmѺúÚˆ<Ñ‘ŒÄJ/‡H܈dW(Ô(�BŠßk—öPui,¢#y³¬b~Muqggƒ±*}¤Õ…›³Ž¤ç‹{ˆÈA+’‹ÆŒ)êßÿÄÛþHJ+€iבԧ›ÊäÓ€Hfþïb—”7éËu$ïza+–Ò�«Ì‘–u$w¹ç¸@D2X‘ÔuìÝfÉ ”n)OE²JBJsˆd‡CiP‘L/gØX•62y*++Oà'&ÏxõåÖR‘“ Z$uídÉ“P\Ó‘ìì=Ù˜C$ã2¶X*’¾ù^¼h—cUÚ(G»_~90œßàOä,ƒI]IÝȬ"YÅ+¢#Ù†T[rˆä6©†­\G²;(RüÜ&IcUÚ(W¾Y·Üg@DN2x‘4þÖÎ>’e°]•ý‘lýU$[¤¶*Éò¨À'#’Æ(7SÝîí "ÌHbQ~+’âƒrSšÔÊC(=¿ŠäIñ÷þŠ @·´Áæ7"iŒrtÎ]"r�Aˆ¤!÷HvAy$Åë-}‘\£�M é€R¯#Y--°•Hràª�#ÓÖ—/_îâÃäD”ç‘|áU»Hlƒ›€îgï»ô�š6È{u¹7®#Y(Ò�*frà*sd>ÄHQDòS"‘ˆKRm瑌Vµ*ÊRuUIôãǪæ¾H6•ËûÆÚZ3”RVh/‹Ú‘D£Tu”–r)÷F«ƒë›I"ȇHv…Ãwû"¹-ZW_‘'PJ’�«5­ÍÒæµ#ùþm]§C�$ :&‰®ËűH7RJÂ�¬#ùôÔ©-"‰åÖJ×N?ºpÂëš�ÇuÖØ®§ö ׯ¿ßÉ Ö’éoÖ_{ý-’ÇOí MùÉ~~‘V=Ò¥ZXæÛ‘lÚå&nHðµH”Çò&3’¦�‘gm0Ú)k,€ÞûÄQÖ´‚ïnë ŽØyV]ADC]¾E2¨ë(åè÷XŠíH–ÍRt&�Vi�­0ñÁ0¬²²rnN‘Ô«¹iFrΜv‘#áeeΉèÓÈ%§�Æ‘ö0>,Y²ä©lp>k�ÝïeÝ™5‘9¿Œd#ˆ¨ZXItäUuWg…H¢ïá¨:z§»’”ÈíÑŒe·�ýúyMÅH^Y‡‚¥2Áœ;¸\dÅš;#Ù§ª)Qµ°+’?ÛÚU‡_ §:ú0³fÏ«Á”ì]@eͪ9QÕ°;’ÿ Õ+ ¢ªÁHΰ¼öƒˆª#9³‚ããiQõ`$‰ˆI""F’ˆŒ$‘F’ˆÈ#IDä�‘$"òÀHy`$‰ˆ<0’DDI""Œ$‘F’ˆÈ#IDä�‘$"òÀHy`$‰ˆ<0’DDI""Œ$‘F’ˆÈ#IDä¡#öùü°�?F%>_S57€�»ˆÈ 6D2¦Z 5èNTЭڀ©Z#Ë1©¦öÄž¥;àØ[ëX»,WÈÝ9y0ôã]Dd…*‰dËÛ4»#éOˆ+’Ð$Fû=7™ÅXq¯†‘$²N•Dò¾¦XIÿY�˜7/šm3‘ÌF£‰óÏåZÀD2ÝsDdyˆ‘$² #ù·"¹V¶/ƒ#tÚDr#{EV™HàlVËF’È6öEòJlhø™F]sãØÝ=[áð÷ôÀ‘:ë öÄÇÌ¡ðÙ³g·éç³ÆÙàõX|À�ns¨pM¥Êg¥†Ҙ𺡱Ë7Éî�øpOåHî[¹rÑÔ"yM(*FeÏd$±DÚI"ÛØÉ[9umëƒãzFoo•,낪pìÒŽûªš‰èÓ¢Gpùô2Ì·´àÖèh7\W5�峂-ê ÂõfTUïODòú'uôÞªÉõ³fmžR$�ÉŠš²H†ëKV’ˆJ–‘$²� ‘|ÖÚZ ÐÝýš“ºz(Sgºx¹±'öHóþ ‘üz®ùz^“A ØÜܼKãÎçÙb$·dFÞ<ôë0f[¢|ÖM^O]Oj ]Îà/ ƒŸ #õTç—�~͇aôµ¶L9’gÚÀØd XÉp8°ûžÔ¾Gòš|,¹‹ˆ¬`C$KŒhoŽ­w|Õ1¾A�Uˆdka3PþLÒ§šL›šš‡£{4Óç9ëõ¨º·\ÑQ·˜­Ú çØe3².“IÃ|€r&’S•k?DÒˆœ `2’'EjAD–±+’ÁQí@QJO™ˆÅ5W!’ p<ֱБŒ£hÐ|á°îôž×sp½uóøZ IÍ™»¶èg¸búå=ºxŠopÖÝqÔ¸‘|ßÖ¶±^ž7"yxÝá9r{-ˆÈ6vE2­§0)¦­pui¾<’…(ÒÆŠ‘L£hH?›Ó]Þ³Zt(±G¿ÂÕhFæ4ÎÕ«Ç1 Kä0€Ùâ¨�|&y,+§ÝHõË@DÖ±+’Wõ>&uj?\WôT…Hn5MûE$}(ªÓãA¤uÐï=+§àÖœ;ª®13r›îß6ÓÐ$·„šš²%‘D­dM$÷îX–ˆ¬àJ’È>vE²KŸÀ(ËÕ¡É?Œäe|wNcfÁé=«_;'Â<4k+0ùGz^c˜kåŒ�¥‘Ü+*>“¼#õüÅ6‘uìŠäkÍøK–z�J¶17Wüi$›õ\x¿ÖýfÖˆú¾Mé.¸¶˜HŽë0¦Íäð{÷úÒTÇqü#|á m¸‘£šÓe„D¨µnhtS"+C*©ˆR3“.ˆ£$K2Jìnv¿Ð=èB7ŠúÏú�ßæ\n�¶,8Ùçõ`g;_Ï~>zÃ8¿±ÚÜHDÊÆ#éKHˆÈc¼I´kÆuhj“ãÛªÃÚf‹™?’o´ÿ'‘ ¶ ë‘_­uSoÀq]‡�óú F›nLß7ú¹Yoß®FAvÊ¥ÜH>’žðx$qPbäÚôòeˆ¨@Ó<’7u“­_Óyƒö¦ËÚ.=  \:€’ûù#Ù§_|ù"iÿ¦Sk~µÖµ.[Ìm¿`£öèWݘÚN¹ŽÓ§§²µ]ãJV$kã²éHÚQrµ¨ÞjzG28¨/û’kµÀ×N=R÷°EGá8¢Ÿ×|ÍÉ=ª-ûêòEr­j{é/×JêÀƒä�½£ã“Inë\g#‰&óoÜMn»®É)Ez$q©ú¬ôT:‘ ]¹_/2ofV$ë%ÈÉU ¢‚MëHu]ªÚy§Fï7U}¼&Ç«æùèµü‘Ä­ÁíÙ_KÌÖ¦Û Xk‘ó¼½Ö©Mª}¯S‘DG›�£½S‹$*¯DEähëøfòž¡£Y›É ß©ÂdçUuˆ¨PÓ=’À«þ=×�vùÙ©RŒë8\‚â·ë©BÖò­í图† %½ý¥˜:ÿñý~©Iõˆ¨`Ó?’X�ÞÀ¿ì¡šÈQáÉ"Kšnë"XíÙá_q]GADE`$‹°JUû|°º²ý3‘,ýü¹DTF²MŸ¿4yò—‰è1Í#IDÄHe0’DD.I""Œ$‘ F’ˆÈ#IDä‚‘$"rÁH¹`$‰ˆ\0’DD.I""Œ$‘ F’ˆÈ#IDä‚‘$"rÁH¹`$‰ˆ\0’DD.I""Ó1’Á’ߤ3ALæ ]¯rç÷‡1þ€.Âa—Qçü~þ`‘y!’5ªåÈV®Û1Ù°Þq½Ê]\b‚Ð2窋1¡,ÇK²¹�ší›e ˆ,yÏÉCr Åimh¨þ1’2‡‘$úü—‘<~©E+û¡k�—I¢ÿÁIcj‘´I¢ÿ�×"yþ̪š“™H–7­úð5I_oòfoþHÎ]²ds�‘œYk4Ãj¬Ü‚Æúªåaû+°Z+íaACw¤1_$µF+Ò•U šsK˜;òGº»#þL$›¯V= 2’Dç±HönWÕö3éHwªñær:’ÛÔè æ‹äŽ3æÉ­bƒµT*–ŠñÑ BºáǤ˜9$ŽÐÕ<‘<(Æ¤ŽŠHtiN$sFïí;.ÞŸŽd}TD�Œ$‘·y!’ÏÚÚ.Ã:ùIï<;3ø)ÉE:°êtÍ}½î³‘üÔ™üúºEwe]Up$+ŽV!­¶¾~l"’sbÝ‘e!Ù "‰t�ÚÛ×cW�¿ß0" r#ÙX_ß�‰dBË+—ECÙ‘Ì7š’±H¤BB3m$C=Ë*—'äl¦§G# "ïñB$'ÜÕsJŸ¤"ùM?(¹­56’ºÀ)ýt¹l$ vh"’pÕæ1<"Í0^ØdúpD$ž‰dÞ»Û�džÀBÉŽd¾Ñ1yc§,³‘”…Î"CÂ4y›·"¹IoÁHÚHîÑ®Ru¶œÃÚn_µékäZ¹o߅ߊ¤MÝL™ã’Tð‡zÈG%ìÉ1Ù £uR$sG!Ùã¸ÄR‘¬…q@Æ@D^æ©Hô2ŒÓ6’5ÚG¿^·‘„c›Þ…‹b#¹†_¢0öK@½9g½?P±{÷î ¸Fò©Ì†#ê”pÙóŒ¡I£€¤j 8‘Œú`Ì–� "/óT$ËUƒ0:l$“: Ç)í²‘ü Ç*}ð'#Y‘sd pBêa„WˆÄæìÝu‹¤½¦Žy6’ë3æMÕÊsX1iu"9G¥,y™§"yRµÔfÑFòžžƒ£W[l$Sɼ«ÛþZ$ä¡w~Õ’¨à ý"’q‰À±^Ê�‘gÔ*1X!§ÄÍéW�$"ò2OE�Z£ßFòŒÞ2Çamƒ£OëþV$mùHEöðF�d³ å‹ä Y #,Ù‘Ì3 ˆØøúí±Y$Œôg{"ò2oEò†.‚±ÆF²CŸ„ñE7ÚHvž‡±N›�ëâÛ·ó§Iœ•ý»%Gúcö‚L$ý"�y"Y- aD&E2w4"a,—y¶¸©eŽI5r ¿|ùDä ÞŠä°Þ(Ê[l$1¨_¬íÒÓv¤kÔèí Ë )F²[*¢#a8æÈ'fC™H".Uy"Y}W?NŠdî¨A~ÀŸ�ªT$?�²wÑ2亩ª "OðV$K¿éõUkn¯KEòk§©{Ø¢£©~nÒÑd߀¾Æ”"ù¾ººú©ÄÍãìÜH6FE.�÷2tbCulE(ÉÙ"{Oœhæâ1‰™Ç*» rdkUây,'’“F�!¹ÒЗ!¿�dl}¢j눌�‘¤ïìݱk“AÇñô%ObH[Çj‰R#ˆ” (*°nN"¥Ec«àèP J#H@:T:Ô]Š (trÉße m"¤¼Ê¥÷À÷³Ý{ð¾Ûw¸÷ŽCÒÒŠ¤¶þ„^w#©�¿ýÑ�G•£c‰¿B8XÐÙ"y=;vg4’zže¯tèÍT–Mý¬ÜDR¿ô-KÕìØKõͯgÙÜ�‘c‰#Så»YßÇòѱÄå¹,[Ÿ/êßCx+IH,’Ò§½ íìu&5PyÑ©hlÊíýÓ}­Ô®æO Gû% UÛ%�è[�„ä" m…°+i ’éyBGÒ@$Ó³°{_A$€H‘IÈA$ ‘€DrIÈA$ ‘€Î" ¾I ’@$@®"yù×D]àXÔHÖÌz5€_Q#y³±=mWnÅ^“œ±€[±#yÉZ·bGrÕš·ˆ$œk$×nÅŽd拯bGòqÁ¯bGR�¯½µ[Û—¢G²ò¬Ùë. \ŠÉâg[¼Êª$¯bGrÂì©À«Ø‘¼`K·Æº™¼U(°k€+c�dÓŒ_8\‰ÉwöžHð+v$k¶©�%³Y€#Q#Ù˜mõºÃ÷Õ»v­$p$òõ ݇«X1ãè _¢F²þ¡¨ÿܳ“OÆy¥ìfsEà ÷n‘" "’�ƒHþcï~^“Žã8Ž¿¿½ÁMñÔ¡Kåa$IŒvj‰Ö¥µup¶C²ƒHÄ ‘DcéÒ˜4ͬX­ž¢(èëóõûmúý¶¢HÝóqø*¼¾x|â—ïD|IðA$À‘Dòo™Šüû€¡ŠdÈ ÉžüûO?0,€!Šä})ÿNB~'’·vvøÁ DÒ+’·ˆ$‘@$‰$ÇøDÒ*¼ˆWËâ˜[{/¡æìÖa1Jky™ÈÆsY±•×s¹uû¼þ)´¯¿(„ErbfffŠHÙH~]P£¶"m)�m~RÕm»’Uýø¤½ž´Ï«©±`Ÿ·{Z[VÛ·A‘¼®IÃÉéii‹•ó™¸8Öîë«fáüýëïÝH&’™øézm®]ÂÍÍZýt®ñHäý¶>__Ÿ×릞»¦rRŸ/æ¤*âÊežI#ÉØ¡CÓÝ×~áŠ~£®ŸÝHê1¬P»„š)‰awt^ŒÏšÙ55u!,FHºˆ$€‘ˆ¤SGç8HU+b;|ÿz؉dÒêuE\Ÿœ·}Û7´&ž&Óéô " `X#Ùî£g#%§Ë7ÛÞjÞ‰äçÞ‚&ŵ¡#¤ZÚ5ÉDM‹'ŸÈO¸» `D"iWÒ³‘rGW/¸VœHžï�dC\ÙNW5ß�\‹«ªzáQ˜Hè¡Hz_k¯4!½R:ÛÉ�âÊëjç²ûZgê*/&–UD@Ç(ERbÓâeKŸî)’eU«ûÚ�ºlkžHp�T$}|Õ¤åIWRˆ±¨Ë}“k^sÒïR«Õâî6€Q�¤5cî¤$gµa‰”ï›ò×İLFy€kl"9·¬•Ô‹Ô¦ý#Y®i¥^¯h­Ü7mi&µ•¸ ‹Hp�M$¥ô|[�Mßo’ÆFQ�âFÿÔ|¦¶ùÈ$ø ’àƒH€" >F,’Àh#’@$€H€ì»HZǦoì;‹äÎÁ@à±ü‘ €1�d¬Õzý0"ƒ„£®Á1\ óH^ ¤ÅÃÝ ãÄàH ^–ŽèLL` #¹8#"Á›Gÿ–"VO0‰$€±Œä‘ÀYñ0ŒÊ}N ì¯H¾ Zâ!tј꾿¼kŽîé“ÑHì’Ø¬‹¡‹‘)™\Z ;“½Y²?Ø·CÞ§�8ŒãOÓÑîijÀÂ%\E“& §�—&5 æø�¨ ðмƒÿ ãÖm°°RÀmð|ÄvYZûͯٯ"r+‘|Ÿ=À²‚¿20JÏγ-¢¼ ñ*D)]<6–tˆÊ40Ò£¹ˆ\[$»³ö~ò!{ˆež»tL‡ ú¦q¬¾Ÿ ]rÇ»¦6– €‰©*B17sêºí^Ì‘O¿~}ñ)Áª†,± á'y§k ]=³,1°FnPpPZ:¯LŠÈ5F2V2ê.ø8{ÖcMX/ÇÓáèü9zä‰Òý­v< ¢íŽ´f‘«‹äáYûBy?{ô»H.V­buÌôÇLÙ½º�#¡n±W¶Ž Z‘+Œ$Ú Þfﱦæ„%Žï^PL¸;ïk4¬#åQ2±‚ˆÈõEòo—ÉgùÈê·›æŽ%CyÖWT<Ž”'•")"ÿ@$ßõˆŠ”w9lhñÝ[u¬æë{´ûŸ7‡‘u�¨˜¨5I¹�H~Êc‰ã]jœå”àg½1&å.~n13´£1~n+iÍ`ælÖ€ÝGJŒ!­gãYDäf"²�X’F¶ÊqaàI…Yi¦@zì5Ó|ŸI€.”HèŽ#%RËhÚj HDn(’õ½ìõ——¸TöÞoð÷òÄ×IŽ%½¯µÿ#"·ItŸ¿fŸ!"ò‡þ·HyÝ@Däý‘ù ФˆÈ ERDd…")"²B‘Y¡HŠˆ¬P$EDV(’"ò��:¦‚$�¨CñUßý"u«"„Ù�$ÀÆÁI øŸ7É9W I„$[I $Ù.I„$[I $Ù†$r’%I€œä’$@H²I@’Ÿ’¼%ÉÃÞý¿&ÇqEo¸HéÄìºî%�¬ƒiKaBB_T¢áŒˆ"C²ZC1C"ˆ ú%›ÑWúÆè‹E³EÑŸÖçs÷1ën‘$…Æ=~¸ÍÝ}öñ>pOôÌårý:’kÞŽL$}«Vy0 u«Ö¡_¯×6ŸªbPªêÁ€<êÿ÷ÂÙZÿ'å}£öJr«$mÄ€^HÏЯ‘?òS‰7–ˆZÐmÂ@î))ü+Q%Û÷Z»\ÃfÔîIþɃNK$›…õè‹N4Ñnë'’Þ¸>vµéßE2H~7’®‘5Ò‘¼/–H6¨„¾´)æ/E’p}ìj5 ü+ÓMÙ�¤kd¹‘üÇ‘lPg("9„ÜHº†’õÁÍFÒW­V÷JØö<€óÕK0í©î6V÷xŽ_üxª«Ov=¼³b$·ìرc]Ÿ®dIñ �i0ª®ëE*³­!‚¤§Cš>vÈuj±mœ¡Ë�™”uhn,3¶\^—µPÙt: 'ŠýrIñ ȃ“u]#Egò0É3¡ô슻r#;çê�ròê%ä#]…IÕË™ò¬…ǨT pÙ±P&’ƒÅàÄ ’îUgCåõ?.¨ju#éf#É›R×S_¤çÝ—“Àé‰?ûz@b_)’›×®]»­¿HA"Ú7cE2S'n™—E¦®$¸N”˜hÉ™7êj�KÒl(FDÔ&qa@˜D4%ÚàLmK!¢FÚŠäK25ù¨8uM�‹(ļ̮°«AL pÎÕe—£bËjšáŠÆ·%´$Åa£Q,ÔI]_²",”�@ƒÚ²ñxŠ”8“¢ñJ‡=Ã�c´T*É#霫7ÊI%ÖÔã Z™Ÿ út]ɉH./G3©J2ÌR=£�ö=pj*•ïE²˜ˆGhÞ@§#š–§à�kír ›Q»')8îI>•&Á“Ž�GRÚ à¸tjà»+½óXú É~LÓß„uMûaªQÀ~OÒ³@-ëø#XA‘rèJRÌ.þz,g•ÈÏÕ†7Fyh65ªÈ×­Hú37±¬ýÆ£_±úU£to—ãÓmÛ\¶Q¶HÒN>×ðüàÑ w rö‹þ"¬„%BÚ   RC gD8rŒr”ÐdÄ 4*F“BYk°b֪їa 6úÓzîî9;¼Û5÷%ÎxÞ?(z>»mp/žÝsãxî®ßn¬H²fTÈ7É,¨�%›ê†›çYã°ó¼÷mCláb:¤( Lv#™Ä„Ÿ5ñW$åŽiÌË4Ö\s’ SÁréÏ:¨Ý [?’bŠÒF_·„ †ü,g$Íû2�²"9gš)çýˆŸ%†'’§ S)Ž_oÙ"9¨}3Ú/Ô9’oU¶·/€*õÕÚ$¦vˆdÂÜ?E2aj?�<…’Ò@il:»p x"W¯@Dú e$‘Ù/ˆX¢/›"Ò²ÐU_Ûéš�HÓçï@DÚ g$/ˆXíþ)U*5øW "í„>’ÿÍÄÒ¯o ÒÏ_öî@ ‚à Ü¡0äþÿQ,„¤4UzÖ¶]‘I‘" D ˆ$@I€ ’A$‚H‘")¨@I‘‚HŠ$DR$� ’" ‘I ˆ¤HA$E")’@I‘‚HŠ$DòÛvîûk½Gk¾®¼�þÉsÛŽqw±oÇ®i„qÇŸÂ7(½bÌaºè"¸H j!� Æ[B:tP2¢Ð×d+$PpQJ -]„@3*…öoëÝëaJ#2æ}>ËËËËoý./¿Ëø_À› S""Ф")"Ф")"Ф")"Eòi‘t[•¢»ŽdØê –ëHæjÃAM‘‹#Y+“l÷³H§aÉ&#_‘»"9�ㆻàμ»XEò�ãÎEñ€Óœ‰äÂ.g¾ÿwJDäùGò^ÄK¯öW‘<ã@¾Î¢‰$÷ôè¹±3’u–�82‘²«Üd·m¶ðÐ÷»»�KÙÉ€×y 01‘Ä-«¶¼0OŒyåã¡ßŽó "b){"éŸqZ‰®¶W‘\z|3¬¶Ù]õ³¾ÛŽÆœA‘K# ÷”dÜc©Ú>I/Êek‰3�\b“¯Žó"b)‹" ¸ó÷ÂyÏÇšÞËa“ÏŽóáDÄRVEòIŽçDÄVŠäcþ8ß^BDl¥H>æÝ—cˆˆµIERDD‘”¿ìÝ1JkQ€áyMŠy­ *h“Xha)‚�).AD× º[·àºLrN.³‚ïëf?L3„HŠ$PI‘ ")’@A$E(ˆ¤H‘I  ’" D  ’‘(ˆ$@A$—¶/Ý bœHFl?:„ ŒÉ…�ü €1"¹pù=¹ €"¹4Ï‡Ø ’ƒýœÀ‘l&y=‘lÞs/z"ÙÌó)z"Ù¼ä]ôD²¹É÷è‰d³—¯ÐÉfǺ ŒÉæ>O '’Í4ÿ@O$¿¿ž×Ã|2±{‘\9Ì‹X;ÏŰ$’+9I`“H®åãv¬ÝfîÀ@$#rk'_yü/"¦÷ñk–ù‘ì�æ™�7À@$7½œÏ`E$ " PI€‚HD  ’‘(ˆ$@A$ " PI€‚H?ì�ëk3E‡�ðƒÜ’,$kºÌú! hYl.š‚5DM"¢ F‚UclЖ ‚$â ST¢µU‹w¥Z/ HkÅÿͽ «žÝ¬�ëåUó|HšÎNÎ윙'³³éû®`%É+V¬`%É+V¬`%É+V¬àÿ.ɵ«®ŠPákE£*ý-¨‘K6H6‰²ÿRWTæ¿ ÁòÍà¨êE¡¹"býyÈÄ`éýOžø•5)ÿ ’¼A’®¥ Â×*ãFr8Iôp#²t)Žˆ6¹lb�8ë8¢,ÝŒ¸R¦ß°�8ùCšþ&ÂÇÊ* �蚥[mûu+•)¿:ùOêµ¥&åR¬$ù7Ir‚ZŠíÞàÏ”d±^Ÿ^’ô4#ŽdHIôâ–ð±xÑö( ¢k–C®×ëg¿‘ä7øG$íMiIü{m%Éÿ…$kƒA ÕÁ`Ц¥¢R’œì IO3õ�’ÜÇ6…%|,^49¨PD×,Oú7’<:Èý#’„BKâßk+Iþ/$ir„>™¬$éߌÿ¤$ÿ¸$ÿ&IzXIò—ä O}÷Òm÷¬]uÓm/‘ÍÛ7Ýzë�“Ãë÷ÜzÏ ×<ó’Ÿ$¯»ùæ{ÿ€$Z“½¨’ÅDSå„>”ÉBžØrˆL&DÔÖ4[š‰L^šÙº^i¸’lÖF·h³¾)$Óž4œ÷múØ)VÑSÑ’Œžè›mÈC½6!Žx‹z¢MÖ4�4Í:OUÛ©ïL¢~’”s&]¨šžmûKR.ê 9†´xQ«å"NMëcÇ|̉٩ÕÌ#?ÅúÎ9 ÚZŒÔ“úN#t,¿¢XΤí¼�ÖîšùŽVô.«ëš5íÜÌC}S&“¸&$Óâ, \’Íœ‰ì—rŽzž­ï4…$ÝXžäÉZ—"¹Ñ(Ç‹ìšC]ODí£´ͤí3†¬ÑÛÑSbˆ^ã…#[},:=âéÐn¶>J5<±V’üã’|Uzå Iºý5Izâ2ùÄ|erY<ó€ùãýÏKøIòÁ«¯¾~IIŠòM˜\ØIý©*€YWÙ ¢ H'²›Š�äLZd¡À"£Š"2IáÔk§#À~ÍW’µ-㬨£ÀäÔÇ%§°9P=í›ÁÆÛ؈ ó°˜mûHr“$9È»ŒM?IæÒªCG\õ1,.V@°Eç0ÙØ&†{&=q&-è' %>–·¨@ì®qª­) äX-_x×quófM»û¦dSÂK—ä¾;LXÊ9¹2,:<OÞ½†Ýþ„§HØ]U�X§ AË;†¢ÓÔn1qD¯ñ‰ÂhŒY4æ�whl åˆX¬•$—>ö«G}[HòÇžûBºóž�¤Ï‰èeéÅ�Ÿ憻>²W™ßJ?=ÿüÓO IŠZ—•äú®î/Éd~”*(¨9’<ë OÖ‘—¹$»ÅâûE¯žtÌjç“ìEÖ1a?yT,¶h ˜g·³UüŽ$S0ôóÊìÌW’g³Ís}Œ¡+?:Oup!Nº·s’Kìãâ´ÄäÈ``E�·9m0V|´�JeäJr [E­`(^IÊfCO†§gޏÖËú0g¶i¦©f%¡›�™h†‘9ÑZ†W}TÁ¸>IlAœI …ù®^©ÏÚácyŠ(W©»’TvFcô‹ÇȰZ á]C>}�ª§m=ÊŠ# Ù”K—dªRÙBÅ›rÎù�D®òM’ÇâÉââb£^me=E%|=šœŒÒkÉ^¬@)š4ÙrÄ5P2GµÎ1qD¯ñ‰Âé æ>³�+ÇG“óÚYb±ÜI¹ÿgIZI¾Fô©ô½.=JDK¶é²_<!Z{OH’Á$“$Rö/¶IªD‘t&ÉÀ=É ±k(–‹g2Û^Š� kX6¡Ä‚%¹‹µÇ¾’[Þ¨a×zCEi:Ç׈sœ’7<ïbq¦«U¹¡’ÅÖ v ÷é¨Ýj¯$öŒ]+#-;mJðÍÀÈ!Žœã;ÄécÇš6¢V Æ�óÕ¹ð±X‘ÃŽ+É©åÿ,ÉØeµ.}w;;½mÈÚrÈ:ÝØñMCšßÝL¹húÀ±�Å“7„±ëšQ�Ùm¶'ÉÇP¨ÆÅ[X¯ñ‰ÂIá�ćïШ,Ž(‹õÏó/–ä}DïJÏ}ñ%Ý*ÝE.wK�Éûþ’¼å‘GÞüC’LŠë'G’5g€•—‘dYr¹{v{%1UzJ2g12õ•äÔ‚hµÄ…J=ZÀRÄ9Ä„ˆ4g0 N°(IáyêúHrÉQszMPÇ€Û)%"ÆÆ ߨFÞÖ¡Ž©�äœé1D¬`Iu¬7UʬÖ2’Œ‰{Z¿$ãE–†I¦\sû‚ÇâÉÂ=IVt�‘ÿ�>†¢p�\$I>Q8ÎvN ß,J¹j@uc])ü‹%ùÑ]ÒËDO~HDßI_Ü÷ü;d³ö¢d_\¿Ì$ÉXZ’%'{†#ɉ3Ζ‘äªú¶êJR·§¬= b.� ”¤&ÚS÷•d]ìßhDS”K§¨’‡˜¾Wêõª(G·çEAŒÐH¢Õéõ¶p,ÉS±Z3<’ŒŒÑ°›-fL´v0íõúÈpq��.Ùœ¡ËÞ#�Ý߸­Å–r¡bK²E´n%:?cµ./I¡œ-{¼¬Ù«Æ†QUY$˜ò·/x,ž¼!æ$`Estý%ÉÇPhK’OuØý�òIÃù`½×ë�!»±®þÅ’¼�è#éa¢Çî·/±_”$镯ÈäZI"‹;þDIr~�¶x%/!Éh €²'â&œb‡,j˜JrbHúIrG8눨�tR@œúÊF¿†„WŸ˜GH­ölm'�¯ûý ”ƒ%™„&&yÜóvFÄ94-n&ŒÓýþ.®òI_ðŒ„ºÈ»û¦‚ð±‚%9 :¶ÊªsVk I¦…¸4'ç;VŽ , ’ Ny°X†¢@4X’|¢xˆYŸMlDPs‚»’´‚‹ïæˆÙá'É�XØm ëúsŒ¬8.á7Öo¤uç€fâîr™5ƒ™ „M2Q}ö$Äœ“L‹íW‹=&.~ÝÈ�¾å®…˜$CÄZR’¢V(I ¶1‹ø§a†¶G’Á)?Bi�$ÝäqIzŠfØ^ Éj¶$‹(EÒFŒ§ÁÝHm`%É¿L’‚¤gˆèé92¹Ï_’o}ÿýõá%‰ºm {âjØuÈf‚Ýàtæ‘äöŇwö—» W’)ˆfÈcÇ»¾’Ür.i ™H_,ê gVÆ ?IÊJ^>Sdrn߈÷-³f0dp£Sê•ä¾ãÏÒâê!Eç˜GÉŸ&Ù‰²Î$>+ �¤·ÖñÙYiiI¶0ÒÑZ�†]$<’ NyJÌ_’nò¸$=ES»§\" ÖÈAGéÏ–¤:7²(ù¤A\fg/!ÉÇ¿ýöÛ—)�•$ý$ùÕ dò°$½î,!'zæÛ€¯…—d:Fu¾ÅÃ8n¾ØȦá]FqÍ{ûIÊy{‚$P�ÚŸñ}ó©�w%Ùã\˜»’¯$íÉ^°‹¢i1Ç&bì9ß¹èÁÉ™â1éеb(³f0Ä�³8ÑÚ…�$³Ø�ÅæHÛ§5Wm‹¡ Z‚LÄ ë|©ºímÓ)2V�<&L’ác±¢Izku€‹¥%™Ã~Ýi( e’ä)çt0µª¨G<–›<.IOQ×PRöó6±•-Ca%)²§ ᓆ$jÖ�³ËHR’¤§(ˆ•$}%ùî¯}üÉ]÷KϒŻҷ¯½öÄga%9M&ç'“ɉ�$“³A½Œ²�æÆ�A¹¸³ÐØÝÛkçëê±>*)¨x$I#ŒoâiU䪳HPv§Ödó ¥QAIúJ2©F%œÙ�‹ zõQá#blØÕý�}_I&¸£¸zcmÝè ìi†œÉdŽ‘7uûTæ-}ëë¼W’j‡ú`–DÚª4Cr Ÿ*SDK€ù7{¶óÚi¶j­SL‰s® 4ÊTÑ!.Éð±xѹyF§(›� .I^«œ‡w —$•�ÃEiˆ)¨N§Ck°™µû(™�9–rF,�d¦vPNrIºÉã’ô €Ž®wÆÂÉ# |¼—`ch¡¸X¯ýž$Û@U%ò¤aeZËäKÊå$¹ZIþI~r·dòãí×�ÍÇwJwÞþ�tgIò*�K²» ';Cu¦&£€;Oú �"Îq&³#òJ’*yU1_N¾Ît«H©÷ äɤ»…#_I `£K6Í]˜(�œ×ƒsû±©¯$£gȯ‰ÓèÈë]”=͈C଴3c �óû³D¹`·ëÌßÜ!€tªænÙ§.ÒÀ–sàºÀ¸H,øÓ;eá’ ËS”.I^k> a]㕤è ÓÐíU�š�J*,åùXðµÎ$É“'$éŸ×áLzM²Qk‡y ÅÆÐBqñ^ã’ä\ˆ«{Þ¡P¾YË3IúN}éþw(ˆ•$pí˼t¹˜¶|Yzšþ*¾Fƒ'²û:®EéDâZ*®.(k§ÚWU¹m•ЈÕÚäÍ¥šQߣºnÓƒ‰�4#t¢“8-@>i�K<£E¨ÍTnA³']•8ác-¯%l“2˜0iN¹O5Õ%“Ç‹dmÒ †ß �šFwA‡NÎ×è2|.IÏQ0+I^–Û¤Ï)€Ð’\ñ¦ÔhŲ$°O!1ÿÜø*ú=V’ü™�;Fi Ã(úSŒHºY€Mö X Ñ%X¸1•�ˆ�`m¡ilR¸BÛ€ð=B"9g·¼-‡»ùWmIhÚ-'ÅN†“óewYûyìû·jÉ–uÿy}ÓÏ_j›Hr@÷·c±›³®ëCíçéõã´šD²åy¶Z¯fWõ{›¿°'�c2n¦ãPGçF@$~I€@$‘D I€@$‘D I€@$‘D I€@$‘D I€@$‘üfïN[›ˆÂ0 ?…$Cl@cÔV¥ T­M]Z0âÖ �Zµ®ØºkTDźà*u׺/¸ .¸¡(øÃ<³ØèdS#j›çúpÂÉ›™B?ÜÌL[JD䣨#.) ¢…�Ð0¢(„Ò øˆF}Fy¼g}ð¿ÑýÏúZ$Ç(5Y76AAÜ'ôW/ã‘5:R‡Þém<²Ê"õøÁ)ƒ‹Ï¨Y&à!‘É "FŽez×[‹_nü3‘Ü&»Ñ;SÿIÌHý×úx$g}ìDo]UkþL$�K¢×FÿpŠÔ¹FF’è¿ÖÇ#©ý»Hj…FRc$‰þk}9’{M¥°¬É””ž˜ñv6LC2³ƒkÚßw>vÂúÌóúÀp&“™£®éu¯W$‡Oš´ ÏH¬ÑšaIÅ"•¬š…Ö ÁÒKˆÆ¶5n;dxE2T£µÀ�U�nv•Ðsd”oß^nôD²ùbÕý0#IôFÒV¢LήIí½ªw›Ç@»¦öïWÚ=gd¥s–štªoîxEry 0"ÏH.m7,“¥b²hï ²Ý.[Bš�- 1u´zDr‹hƒa íÒ›ødW$=Fo:D›ÐêD2×»†#I”UÔ‘|ÜÖv¶pmmíÖl$?ïLŸ¾¢––Z‘|¿¹ýÓé¥ê–;’¥étºIÍÐkÆu¼"Y±« Žšd²;ÉÁ‰íåu™ \œî2›ØµhPMlÓžÈÂÜH¦’Éí=‘l�†)±ºxÄI÷h`DºËË+$2ЊddO]lJƒœêéé®rQGÒeY6’möËu+’j €5jC‰+’®g’nîHúÛ–�¤˜iºhå1Ú%ÍОZÉLEaÚ$u®Hº~º}_* ãÅI÷h·<…¶Bê¬HZg3:„i$êÁHzG²Ú]õÖŠäÒ°�Ãtï"9mýú3¿I;u¥Ú9©`Dö„¾Ý.ÿHvË"h-®HæŽ"Ò í�$ìHÖØ îÁÁHzEÒ.ß*5ÝŠäKØÉl÷‰d!Ü‘œ Í�8´V©�´ßCpТ«W7ÈÿH>’A0ÅÍÖ=éÑá…D¢ÐÂ"!3’ñ ´AòDä`$s"é.á55öîã_Šd….˜ËBà°$¡5y²nÝ©÷�ä`‰ÁTiErn�JרFžÀ’�3’]0ÅdˆÈÁHæÉ0­R«þE$eB‘×´SÒ�ðæW‘¬—r˜æºn·Ý£IÀ1KÜììîK=ˆÈÆHæÉ“0ÍW·ÌQ¡Ýý;‘tÊ7Ú~k tÀ”ü.’^‘œ*“¡EÅI÷($b@3¬×f‘(œ{{"²1’ùDòý%Áê:€“êˆÝF'’/ͽ·³¯^�(<’8%­«¥ZÌyYÑÉrYçÉjoOÝ‘t�ºd ´)R 3’ö—Ù-ÕÈuúÙ³g "FÒ#’ꀪ) `¿º ­¬‘µÿôû Â#¹]*â]QûJRZÌÀÅ{"™Ú#o<"Y]„ß¹"™;j”0¤ÊŽä»0Pö:žs”ýmP ¢¢�ä­{÷îmVwõz)'’MêrûÝcªÚ¥šfÍßúÒ9û¥ó÷Ï(,’oª««I½^åF29Ëa™;~^E|…ÔÃQ'²ëðS!}p·$ôjön¼t-ªjx’pGÒ= uÈ…ÆÆzé0¬H&æ6T-ê’n0’DF2{ùÍùœHî»Y©gc`i?¦Ô²#æÈvý¤>ôNa‘-â¨Ë�$V‹´ÂZ!"‰ª–l$ƒ�ëâ’P&û¼z�HeÍw$sF¡©¢9–ØR)²§:÷”Ú "*ÚHþœŽ$J?Ãљوfàý…AäÃ8Tæ?ÊîÞÈ*;dÀÓ¥ö‚ˆIÏHR§R—ADŒ$#é-­Ôq#ÉHz«½<DÄHz8òá4ˆˆI""F’ˆÈ#ID䃑$"òÁHù`$‰ˆ|0’DD>I""Œ$‘F’ˆÈ#ID䃑$"òÁHù`$ÿ™à¨+ƒ ¢âÒO"YZRŠÞ+) #o_öDT\úI$ª»èµ£JÕ"_Á}�µ#'ñJ’¨ØôûH.~¹ñ�Dò@`@)ˆ¨èôûH^UkþH$‡Æ‚ˆŠ#™§I�å ¢âÓ#Ùùøö­ç„3™ÌuM¯{|Ê…é|æ“G$—Lš4œ‘$¢"ˆdí¥=h:Õ7wÜVma¥WÕ5�HN fÂÇF’¨(õ“HÎo›G»:¶êú§Ówö¥étºIÍÐkÚe5 À=õ¶Î¶¶ëyGò``=ˆ¨øô¹HNœ˸að4ä½:Óñœg’�7Ôc\WM—�•o$�å�¡ ¯ìÝù� aÇñ�ø&Ob'*«Ñ­ÕÁJãj°]ÛMT\mkYwٸنu'®¸‚8V°AÜ÷G\!üâïòÌ¡˜¶£uïöóú¥Úï˜}ö—73Ï$%*?�-’#úô“}Íçš:^pãfÙÝ›ïnG>ýW¬„OX¾ch>HNTŽ:[$­:z4ïÔõ‚‘Ä.uW�K¶äE�I·ç�ˆÊP§‹¤ÕÇÂ�ÔQ}ê"*?�/’f% 7«Ô𑼬”Ú‡Ÿ²¢ÇrQùé„‘ô¸ÖÖ®ª‰#Ù·ùîõÍ}ñ3æ÷8"*?�1’1íR*ð�çj½Vé€Ö«Ã½�GŸ/&ñar"ê‘ôÒ튪7+¹,;Õû Ø–ªMÀa5¹À#@Œ$uýHâÈ:µêÚ®›Í;aY¦TóŒ�Í�j>k]s«Ë?ÉÁzLDå§ëEkV)íãØ.^ Ô  ïjµ°cÙ·ôHëñi&ˆ¨ìtÁHݶßíT�…»Ÿô•—.É?bö–Oüú¢òÃH–`æ<~}Q¹a$‰ˆI""F’ˆŒ$‘F’ˆÈ#IDä�‘$"òÀHy`$‰ˆ<0’ *y`$I"òÀH2’Dä�‘d$‰È#ÉH‘F’‘$"Œ$#IDIF’ˆ<0’Œ$y`$I"òÀH2’Dä�‘,þØ^ݺU h¿û„†į0|šÁ ~ Øe¿¸¬Â0ºìïFÿ™®ÉáJõEÑ~÷ ã2_ÕøkQš‹¢}{ŠÞþ8¾3ZzÃÓH©Á¿sÑŸÀ©Q~ŒdgŒd«lFibÉäÞï#)Uÿ$’5é~Æ#a$©+`$ÿN$÷œIüDž¾;EêLòŸDrŽ„ñ3:ÎDð-F’:'FòïDRûÕHj�*’.Œ$uReÉ)Ã럭�cã!àé뉗+¬ÉƧèù þ’}lßYõ¯?@s�Ü'0vìì"#YÑš`I…‘J„cAh+C>X‡R‚¡Ödë#_$}m1ÁP¸¦©P$+ׇÃãK$§gö|$ÂÉ@‘�¾@2aäŽ|U“lm´� =’Ú�KE¤&HÁæ -Öd2ähŒh>Xz‡Rö2\ì5XšBMök ÙÑ›/6=Ù©À—#*¼“lM1’TF²ÄHö¼¥L·zÂÔMÀq¥Í…¶TÕ?x«ßÜ5>¹NiÏÏî‘;’ {ôTd$父–qÒoœho ý$cGi¼4ëÇ‹éèÊ<‘\/Zl¾6‰ŽËÉàÚ­¢MÛcGr³hs`º/–3AXdO8*"ñÜQ$.¦EÎÉ´TZ4Ç—E¥S£E Àí˜h X¾.Ãmˆ ùrx @¯!b„–Ü*¦7©ìÿgïøÍŸ]ÉHR1ÉbŽ}°jÕYØž«©£¶¿ «èDròº[Ï.½»j—pn󪉣®]™ŒRê ¿¡.TÀ=rNXt$ûµ…áˆ$¿F²j|¦ºÖ/ÓTKƒS›6³‰ís‘ÐÚ­þÆÜH¦‰L6’ Ò ÕFýù"Y'3{îd&¬:µTuÄêDC˜n½ “G_N’Œ>jíÒ’3zµU"‰GUîÄb{¥_L«àk—ºõ+[§IÀYö›7£“‰LC ܪ‰†l$¿.Ã¥QÚƒÐÛ¯iiIDq©…Ö/^©^$GƒN$kÛÛ‰äÑ&˜î´µ¥@ä�‘D)f©{Ýœx{à IÕ¼Ú »„ê½õiOà£zmþéŠ÷ÈÍIo­_#)Õ:¬<Û¥ Ú#+™);k¥ÖI×îöhXíÉɘL«„æk²ŽxépQæ@«„5M9‘Œ¬rFÇd­Ýöœ{’g䢽€£†Éh›Ïú›…w·]Ëpi�´9Ö( q€Ï]œ]Ú$à¬"zša€èGÉ’#yCÍ‚i®ªw"9YKUs7Ø–© V'ªã®Q® +Vœþ©HVYÅ’�vu ÿV²îH›w$�Ú,ÎÉ7’AÖHû‡vȣvúT‹{’v#ÿÆ��ÚëŒË;’²Òû ÷2Üjd¯ýoEosENk%Œ¬¤¬uVÑÎC¡Ó‘L!1ŒB=þ%²Mš7òɽ““bÌ‘ü‹H>“ž¯‘Ðóàî�‘¤�«‘ŸñWÒºsÉ}¨ýH–ÑÌaÁ 9H¨hv$Óeœ»D2¤�…Ä;\¸E2«ÉÊÕkÁY§%èâèÏÁÉæ%†¿Ö§OÖ“ÈŠŸL%ÔG~æ;É€,[÷[ÀD†„po�hÔ�,ÂC$¿KÒ1ÖÀ‘ô¾·ƒ©‘‘½§ÒòÍ‘üñRZù:+mS#y‹Å‘ÇÞæH¦5Xþ L ¦"šnG’À¢q\K‰8yqqT¯ªS}¢Å›"iVEWU½<ê¬SAâZÌU‘l^ FÑKm%ëMöG!KKáZ¾QÝJu9Þ"’Å•æñXZD’"@Éþb/GJêNâ¤À&úŠê¡lp$Ù­q${½{·+ ³oVoŽ$-ÿÛÆît2’÷aI4G’rö°a@W³�Hú&ójA Á’'!V¢î¿Ýž‚�Ë�³N½U• áˆ¤ËR`Gpd?ŠÔ‡Ê€ŸŸ‡�œlÉ,£­"¹�ršêmB¨&D4ð@TIyˆäçÚÜ+cޤc¯W«ë¯ÇɃßÖzè îg|ä…%D× ô¯¤]OÊîHð°)™0¹ñ•ó4uÐ<Œ?®½†êBJÐëð‚˜ùg¬�#ÉÿqÓ=|IÌQ{¦%é 1ÖÀ‘äHv�ðLyjÓ¥´ÛCŒ5p$9’]C&²Ô¦±íibì7IŽd×8Ž”fˆ±ÿG’1Æ8’Œ1Æ‘dì;u À0èþÔ7AA“¤$� IIA’’‚$% IJ’”$$)I H H H H HòìÛ1NQ€áIL(56Úª šHe±±³�DJkcH(œÁBCm�±à œKá”Ý�'ø¾¼ê/ÞÌü¸ü:è@+‘Œ^æªmD2n«Åi^@ ‘\;˳hÉâ"'Ð ’Å4Ð ’" üC$‹iΠA$‹*O»P'’ÅS'«¨É­ês5»[À‘Ü:y¬–ÃØ#’E÷#‡×~%�:‘,2Ÿ N$‹£@ƒH¶,“O:[“À†H¶Dr�i„lˆdñšo" 4‰dÑËyìŒ2Ï`M$#ªóÉjùûÎþ2o`C$£—ËÇiìŒ3�Þ;"ÙïÆ÷ùp["Y3Œ`C$¿Ù»cÕ¦£(Žã NT\Úµ Q0èÜ ØÑYJ¡C¨Ï bÉÜYD‡¼BžK§ªB~ÿðù¼Àݾýçr¶I€-D` ‘Øâˆ# �G$D@$êh#ùò×É´ÂÄDrÒ½™@–˜H^Ì¿Ÿö«ˆÉ?Îú¬¢$EòE/ JR$o{QQD`0‘´“ÉyŸŽ IR$?Žz^I’"Yó›Ïoíô‚DEòùÕb³¾,€I‘ß÷åk·’@’¤Hžt*€$I‘|Ú×%)’ÿ “/G#S“ÀÁÅFrÑí 8¸¤H~éo" dIŠä¤Wõàºû¼vu¬‘œŸ/7ë¿gO×ýæIìêX#9éõ‡ÛzpÓíë px1‘œÞ�ëïúý³ØÝ‘Fò‘Õâ¦.5’D@$D I€aI‘I€V$§³Ùì®k¿‘¼ïî¯0Xû�äÕÏ•HC¶ï;É ‘†L$D@$J$á7{wˆ‚@Pt’a£Õ¬w0¸°žBØ ì5ÌfÏâýL‚iÚ.¼wˆ_?D  ’‘(ˆ$@A$ " PI€BëHÞ7›9Y5’Cæ5I€‰ä-ó�,Éý|ý‰äé�Çm4²l$‡qŸñ5e¾ “5o‰ç¼ì “5#ù¦hÅw@$D D  ’‘(ˆ$@A$�»öï¢6Çqüëô� âìVè˜É¥S³8¨“Ô"ס8éP')8õ*´V®õb[°c‡r´ôþ³æI4Ÿ#‡Ò’Ïk“„ï×éM| …`$‰ˆB0’DD!I"¢Œ$QF’ˆ(#ID‚‘$" ÁH…ø_"™ŒÅâr'ÛõV"¢óDÒRr&Çï*[9°†’"¢Gò[?åÀÈ4M›‘$¢¨G²�õ¤åŒ$E=’—âc$‰è߉äj‘m¦¢´z q­{»«]ÃZ¬ââ­–3_Î0�ºlMÒ¦9®kõ]?~vd$§Å¶å´’wF²>¶2é‰øâ­±i0 D‘t†HN® 4ÖâzŠœ¸²0ýkC(ù‘(é\˶¸_¡|Mˆ²h@)iµH>ðàÑq‘´–Pú=’É<†(©�·Î"ŠžSErU­îâÓDÕé®ÚùœÉéfNeð¢áÕ©�΋O¿ÇŸßˆkƒ|ºeÌü.öб.[FáZì:2’ÆÄ#®Â·Ì õéæ -’Ì¿{ãêX\£2šƒÊÇ !¢È9ýËä‰eǯYR�äWô½Bå¦"’Ú=çuE¤ˆo1¨›ŽúdáÚŸ¥ IßR\kñTah‘ìÃÙï+ùËWª¦D5§�dì9ñh‘L,Ñ’€…¡>£(JÉ»ÑDAx·'/_¾ ‰ä¬ªôeÏBV‹äcÙ™vðV”[ô„ˆ¢æô‘”kÌ~ÔãwE²ŽW²÷ Øè7•>ˆÈËÒåTâ¨?n>–†›M¿´H:(›•„xZh4=s,„ˆ¢æ ‘¬ß¨Y#=’\ÉÞ²3ò[qYý•6ð>‘¼Bçâö¶Œ’ÉØ@£à}U�ü#I=gˆ¤$_gg€=Ñ"y‰o•ðVþ–n€ïÉ”�vLD2Z$•n¦ÙAgàŸŽ EÖ9"©tóXˆ+�º¸¾x‘\£—À52(£+b&ÊɃ�÷ˆ¤ƒ‚(o‚HÎUÀ÷RCï§~5!¢È:W$å†âêû™º‚)®Šhc¶OfmÑ\ u0P÷þû÷ãÞ“´ü³ÈÄ%íQÖW‡­n°Q‘¿�mÛ"úÃÞ»6ÆanzÀHèœI$SܲdH:ÕžCˆ]JIC˜N%�!¤IÈ�8š`M›ˆ‚µ"ŠÝJ'ÑÈ»KZËËy¶j¬rÏghÉýú;:}yI³�dí`Z½!eî°9‰ä—ÒpØVŸ‰ˆ»`XåZÝkX<à ï;Æ Wy˜|žÙ(€Ï#™aׂÇv'Hòù$Þ¹�wðì�„ˆ„Äì#™çBf�Úç8? ÝRj±x4‰ä\“ãr%Õd ŽV�¹½ÊËlŽŽ“ÉÝÉá±;jï ³,7ü�Hvú\H%›…öy$ \k·[²k»Éäz�ó^§sÌf{ÝÂX‘ ŸÙGrë¨@Ç~žÊ&¹\M1O²H²°kÁ•ÏÑqÜ‚«Õ§#[®,Ññ>5nø;‘ÄF�î¿RaSõ£5ràåý7ðÌ%Çt¼JÀ3$×!"!1ûHÑzµÙN)�‹««Û8cmTÓ8Sk”Î_Ä/ê–qÃß–®Æà/’.UÓsß_V?maªGn@DBBßqsU²  Eòªl² Eòªæ» ˆHh(’""Фˆˆ")"ERD$€")"@‘  HŠˆP$ED(’""I‘ФˆHERD$€")"@‘  HŠˆP$ED(’""I‘ФˆHERD$€")"à‰äœeEðO‹ZQˆˆ\S$ãd ÿ´ —pi�¾Ü†ˆ„Qˆ"=jÿb$¿|>99…ˆ„Qˆ"i±ðK‘¼ë$R‘ +Eò§n�œ¾¾£HŠ„Ô_‰d:žx“ÇT©¾K¾ˆx“Ò!¢‰�\1;ñî\æÈT�ï "0·j�4‘F@´ô Û/ó5oR*½à¨äHûD2òàÁƒ{ð¹?‚׊¤HHý…HF‡t £pYÜD›Ž +L¼'9ŠxV ãh 0F¦­6] [ó\„#Jˆq¹^$ÙϰyfÅ'’oܸñ?‰@‘ ­YEò —ÛÂÄæ7â=fÎ"™* ßì|Ø�”0“Í%ç÷úi·p›‰F|Ÿ½Œ‘a{™½7«­•B Æ–ÉñòÇjb™m·«¶çÈvä1QÉu}"é/¢HŠ„Õì&·ùÊÐy¿YŸD’Y¯S�I ùÑ»Žù€ÕgÆÈ0dÓ»–Þ†±eD’)iÒ2Þ“4ü4’:IŠ„×ì#¹O® ÓH&qn…Y «,zéK²mŒ Ñ7ß-3’18–˜þY$o>yòä©N’"r‘³¹îê±;�dþb$?`*Î\UöŒ‘!Ï"à»eF²0­tȤ?�$Eä"¹E.L-N#i]Œd Sv᪳hŒ ->ü·Ìn®I�$Eä"Ù!k¸Àâ&.F2�©Ûpm0kŒ U¾ü·ÌHê$)"ÿz$‘eýR‘lqÿìwp$YˆÀ+ÎÞ_è$)"ÿM$×Y¹T$óÕàøÈEcdZ£ ÿ­s^1}#1 ß¾}{éO·Ÿ�ÇcˆHHÌ>’«\«Ã�Ç#‰&?HÙ0F¦.¥á°;æVŒ›yÀÚ÷�$hÿ‰G€vHBDBbö‘Ä G‹Éäî27‚#ù©Àõä0Ë®92Í59.WRMÆ`n­sóCê¸ëÉ yü²l_9’_OOOONœ�I‘Ðù ‘D«OG¶\ Ž$6ŽIŽRsÆÈG²H²°kÁÜ:|NŽºÛþ‘œôŠäÊ•#ùùdê6\Cr"³‰¤©Ö(¥q [ߨ»c•¸‚(ŽÃ'¹0’�FÛ$°Iaä’2…Ë©BHQH +E°¬,´Q_ÁFa_aŸËÖBï ®ëù¾~Ú_1ø_¾�{¹>ø{vç«ÿ[¯âq]tÝNIظê¸ëÎÈb"ùï¶å˜²Ÿ]w@³ÉÍÛ¦Éåóo¤1 ‘¸7‘¨I€ ‘¨I€ ‘¨I€ ‘¨I€ ‘¨I€ŠgI€’ñyó!³>ŸIEND®B`‚pydantic-pydantic-e28e879/docs/img/pyrefly.png000066400000000000000000000756731526274674700214650ustar00rootroot00000000000000‰PNG  IHDRvµÒ·²ÊsBIT|dˆtEXtSoftwaregnome-screenshotï¿>-tEXtCreation TimeSun 05 Oct 2025 12:34:42 AM PDT¢–n IDATxœìÝyxTõ½øñwæÌ™Ìd’I2“ÉLö„,@€ b"kde¡ŠŠVªÒªí�¶nuém«v±Þj½Ýì­mµ¶xQQ*  B‘Èš€I0YÈ6Y&™Ìd¶üþHB& �„�~_ÏÃó0'gùž3gÎùœÏw9 íÂ…%<¾K]AA^ÊK]A¸è|<—º ‚ ‚p(.uAA„á!;AA„+„ìAA®"°AA¸BˆÀNAá !;AA„+ÄÆp'R(‰ÆDŒ|­XÊ ©õ^êB�TÔYi¨l¥ØŠm—º0}Ñ¥á:Rˆ³ùbo<ˆ˜Øt¢Ý'ø¼ºöbo\¸ÜhMg˜ñ•ÒZåä²±„ÎHBêúìªÆ¶µhÄÓ£=†qÆf >­ ~Èk !}îRƒ»>;(þd?…ƒX¡*&�kRdNì-á¤cÈ„ËÒÀ;9ŒszC$úðdE+åû¶QÚtK7Âæð½ng¢¶ó³¯„¿½^È&û%-ÕÈ%'a¼5áE¯qè¹ü‹±ATãRQ{«±³žsד¸Æ„õég¨(¸Åó§ˆfî´o1¯ù/Ü¿é#/òæ‡�d$5:•­�‚¦Öó[WFÉËÓèúìuáµ7ã8²�ú-…¸×\:B×Ü�1Ú�~ÈW-äôèìælâîÏ!Pj¥ù/¿¥úØ0lΜCÌùxþüÇ7 ò„$¾ �ŠJo>¥;а]´ãÂìïÜÁâ¤3ü¹ôžüåá>ÁÛ¸e+y*§„§nz��®!nZÒ‘=&³Í€F‡9ÔÆ;Ń ìôÓnä©»5üí[?ãÕ/‡XA¸L 8°“r˜ší^Ü YÙLýˆÏ÷É\=i)U%¼ý¿`ƒµ·xÛÀÈ"™Ðß³SëÛ<¶ý܉Úrlû8.E2Ñ׊¥ò µ õž5¢¨'sÛü[ :øCÖí=q~ë ‹E›šˆ¯¬�–7 #E¦yG‘3·PüÃM8œÃRêó £JLD› Dg£ÛPHSçžjêtÂÇÄ€—î’²CÕN,ßÞ €îÁgIšx± cNI =¥™’ôNŽ»ôû°–”ðoÕ ¬çS#â­àÕïþ”W�༻yç;‘ç±2AøÏ3àÐÌ[s˜½Ÿì¥¾ÖŠzüMÌ-�{¡K.Œ˜Ð h.dom+#"i œ—öC›°ºT[¯äã¿äãKµùË€cÛX6uEÝ2š‘¶$óÔm”n!ubµìr¡ešv¹A2~� gq9êTÃ¥.ÝÈâ²ð×Çž}+|ó5½°%áØùlåœê¼^«/Ti†‹q÷Ž�´$†d²dF(v€ö:víÙH�_”½€Û’ƒØÿÅF*#�76“Ä h¬;È–ü�誶•ŒLw#¹q‰ÝØŠùüÈF¶ÔvWcŤÜJ^x®f%qWnæO_ÊäåÌ!Mndoþy»rðÕ^êÙË0Ä—S¿Å†nÉtBb‚h¯)¥þ½i(îºajZ’G¸®ë_óqöxj–Ñ,X„>¦šú?ïÄѹÿÉÙ˜f©Â[UDý;åýl]F•‘Eè”4´1”Zho¨¢e×Nêv”ã¿ÕŒÅÓ¬Ô¿YŠú¦ëK3!9ªiÞ²‰ê½ÝU­ãr‰ža4hÃíD¢ï3w®Ë�cËzê�wÍ­C·<�}×g-Þ¦©êLGKF9)›ˆéhÍ:œ6ÚŠbÝ’O«uá½awŽ‹GÕõ¹~:RØóAAN'/;ªK0ŽšIšTÁÇ{Þ¥"f)‹Gq×~Âßvï Â`dê”׺‡ õ ,ɘL¢­ûØ”¿™‚>§‡L̨…䥥“$ãn­¤ d3 Ï¬A“¹%+×ñ¿³Å™É ™3®…–böÚȦª&GßÎ<“ r F¨â—r¯º³b¹ý»ölîñû:7Ž‚r#¥¼U¥4½ÿ!õŽƒTUΨs�Ñä͆ïå\Mt{%–ºFTQs¸sÑ3Ü›zz]aQ×2kâ­,ŽqQëeܤoòÓÓZ�]›É-3–’:è£.£Ê˜LÄœy$>¾ ½Á�ãdcs‰j-æ1rç|<ÄaÈËC?¦×*´é—MÇ`tŸnï�šGò“+0� Âu² OH&q�."X”„qí ¢&™°[q¯Â­IÅ´ö!RîKÇÿª—EÄìéD?ºs¢Ï)+Šø,̯ñ+' ÉH: ²NC€HšÓŸe]Š^eêü[R:¹Ÿ1±¢!趇óÈ2"’•¸O–â°º œ±Œ„egj0tJ™puaêÆ¥ÌdVB4ÚÞóÈÑL3“¯_3­½"grç ÏpoŠLm³LÚøUÜ™Úyž(Œ¤¦ÌdÖÄÕ<~ýbÜXš\ĤÞÊc W3QÕcŤ^ý?™»�)Av,µƒÒY<û Ÿ’Nï¯ MW�™É”´[y|ñÝÌŠPájµƒþZ–ŒKEdYÛñ[ BÈ’ÜùÛèüÍ í(õK•lFÂ�ëTwP¯œz3‰+§¬£ãû9åA�³˜äçï%"±çòc“üÔ "Ç*q[Ji-w`Î"zùd{ܼu„®}„´ç¡Ó:pXÊq§bzøa’—Æö*•ûžB¼ã2ÑiA�“‰Úr€¦ÞM<%�®#iÅd]V'­(ÆL#î©uÄLÑôÜÏ÷’öð¢£/®‘YóŸáÞÌ[É+ú!o÷Ó‹#1%�Ïwü�'‹*;·DL¨Œ(>ò?<Ð.àé•·Túwž?ß6v�T“æa÷€’1•°,îý›8µ£;Ãå=°�¢]þå6ç’ü‹Å˜nH§î¥ÂÓ“µ¹Yh(¢ì±—©÷›_2èðùe„¤ˈ›¡£uÃK£ó¼CCý}ëH¾i;^¦Î¯#sûÑ|lÎÕ„OIÃ9E�ý£C¸½=iÆbÌã”Øßú%ovfCÒ‰{~ wäÑ�¿žV/ ÍÄ|K ËŠÛ„Ó ÈÛ0>³Žh#½Ö9¸r^rª¬]¤Ù7û×Àή jË1^}²£·ÉôǞᩜ3¬+f&ëîƒêÀÖ<þ';3túù«øÓºù¬ž¹Ÿ§¶ ®º^•5‡Õ3C¨Úø[Ö¼XB €y ?ÿí͘!Uÿ‚p‘]™»!²ùKwP஥ 3)!� o1žè¾1;÷±©¤B2™âŸArÖÒè§Q‘À¤ø^‘C'÷©øÓé  •Ц ß…]•6™ˆÜl"fMÃ0%©±[~1m~?«ö ¿ N‚µL@s1ö*PF™z>mJ2 Bê•"õZm~:BsÓ‘šQ³Áï¼ÃAËG‡p*’Éè™aÃ]DC~+º%Ë�,¥i�µOµnpV*’»”úýš'4R·«ŒièFuNëÌüÙ·ïìêÜÕÔo/íµÎ!”óR“tLš6‰Ù3ýÿ�a\øàW?wéªz¶¾ÖÔÔoÛË¿›4LÊI@uæÅû•’3³·†­;ƒ:€ª/xg¯ê„ÿ\WfÆnHš°TWžáoFŒ!2´VRÑ«HE}-nE:‘!2tµòu÷sûÀíéøäöºp!#õ¨ûªpöH;ºqUZAEe†Ž®klÛâ™’Ex¶†¦­0g>Vƹe7-]7žH*¸+zÝÐjªq¹!¨×¦¥Œ\¢—åšlê¸×žæ @%ƒ‹3_®1”ŸT2½jÁ‡™ŽÀ Ô—a¿TY�άíéÞ×>xAV¨èq¤šOu¶¹ëš·‚Êf ,£*|` _- =Ûž¹NQëc¨軳5§Š/Ép,-oþ„ã]�'ÔtËWÏZÔòÏ8¾©ó¤P›]¾Sv*C¯ÊJ‹ŒB‚®†›öûpæL'úù~´˜–âRìG ±ø�·’MŒ úûVœ¾´© È’L{¤zåƒ[wâž7¹`'�}b~ªH«ûŒ—èD`×ÅgÇÞv¦?ʨ€ÏÝ·‹¿¯ã†;ä`m0úiŒìó(;n†�Ú즡*›ˆi“Qn݉bêd‚åTm³tϤ�A‚v_ïÆênÚ{OJÎ#ùûóPUåSý‡·±—wfKÆæ‘z[ê0ìØ0‘”(T€×3b¡Ÿõ~èé}>¹;¾ce÷-I¥T­¸z÷í˪$™^a5­žó—n88­Ø^ßDý”0Î™Žæƒ·qx5„Þ·–Ä)`ûàªö—ávxúûWAÏj„öCë)y¬ýœ,tcSÑ/θÔ�k÷¿�ߪ):ÏgÇDÇwßĹ«iÚQŽËâ Ï�þØv*þjCy|_ß&Rç:û9—Ú½�G»3½ÔñÛsÓÞûËvyè1ºÒ€ËyeR©”àrÓ|z¨”®£ÞLñîýœ¬ô0B*I Þ¾¿3—˃ì„ÿT"°�FÛ€�0Âz¥œ´Aaȸ±_Œë±¬é¨’òKÅ(uð:pûg¼êw•c\<™ð¸R¤i±´¿�µÌožæ&¼^�CB�êîé*Ê^UÅšiYh*ž}­Gû)e„�>^î7$ëQÉàéoÑ„~=[ÃRmöÓ_±Ýi‚ ‚ƒ‰©C ZíCÆçbD¿n+n;`Ô!+À”‰~²ÏŽ—±üÙ¯Y�ÔÑݾŸ�ñZRû‡ƒyIC"Æû¾ItN‘ïåSY øl¸m€³€ª—¶œ%8èÕãÆkŶqKÿ³zëLì,·ß¹¤ %ÞÎтݶVÚ‰AÖ+Ä×!ã—'p9{—e 3Ždêë›�¶¾ò:›Ø*àô1ê÷R㡾É* ú^©>½>„ÞZAøO!ÚØ H¥µ• Ja’Éÿ)0”‰± àµP<”a4KŠCçßG22Ö�åØkzÎêܶ�_"ú;nvÓüÉžž—¹ÚRZëA56µ_¶/ # m¯])¨ãUlÞI áS’οjÕëÀëÔA(Ï»žƒ–C´kÓŸ:F™=‡°t&†ø}JgœZkKNWÑVT� Qad\LB�Ecâ2‰Q´b©=�N�Cm`Ÿ>¾ÃÇ�J°h´âò* xZ[{Ä•ã2Ð d9«…ºE´„Ôõ{˱X!>“ðÄá*¸ ‡¥´‰„ŒõÿAèɈwöÎáxÚ‹Jqze´ãý2A‰=Û”±œîæVPP…�{Þ°É+¹ÿÛqÿ�£G\¾ª`o -ªf_7ˆ«õZÐa6ößö°¸°—ä,ÿëb$ÙD¯Xá?×ÀS.ê(# µ>@Ÿ˜IZ$øÚj8ñÕ©+zàâ£;(N¿•©ÓïÆ²s#û›eSoå–™Æ/·òéE©ùÒ [± cóÛ4”Ëh¿v3ÆD7Ž·vÒÚûà×î¡þHñ“ÒÀ~�Ê=½RŠ^ õYˆX‘Kü]U”½WŒ72‹èÛ2�è™Ìq•ãÍM%rU6Îõ…¸Uzt oÆ”8ûdÅn±Áìl¢n±b-ªÇçOiÎδU€!�¹ãTUD€Œœ˜FPW…ÎI ®Îl–kë&êæ<€ñ޵ĩߦvo9•Ž ¬éèµùXÞ(dù‚ˆ1%vdjÑ„+�ÀRÍé™6w-EÖÚ¡�û),™u+5ŸmÅâ�&wêBÆÔ²¥`ßé,ž»b3['³xâÝÜÛò*š‹šÏ]W%@ãf¶œ<�_�«˜â7j)wÖq Ù ¾F,U'hâZTã§c”Zi—d$�™à)kØþ±§c\ÅÆbìµ`šºã‘õ4÷ ›EÔªÉH}ÞL!zϽèšóiØWŒ³Æ�"&ã 騋i9Þ=gë;[hÊY�iÝxóCŽÖƒÎŒ:9•Ði±8ÿ[jËz¯ÿìî¦eöb ÷¬Àñ‡±�’ š³ˆèI2žÛiêJ«–í¡öÐuÄÏXFléëTïoF™1�¸}#Õ¡”ÓñïC8ççbº1¾ex½ÜGÒÚO;Òफ˜=3 Bóûw/λ´ôI tŒø$*ƒ¤!~BBGOZ�ƒGk¨÷B˧ñ�#X}ïÝ<¥ù€|b¡^Ò•’À53¯ÂœÿGžÚØó:å:üÿ®ŸÄì;W²Zó'à*?ÆÎ£óÕò ;o¿›Ùw¯äëMï²µBfÜ’›Y4Ä‘�áJ0ðÀ.(Ž´Œñù¥hô)YèlG¨-=EÓHiØt!4mæ……òðÌ9Üycwà¦â«¿ó»]ûú{!Ø ©Ù¡$ò{�Ýٮǹã ,ëûTØAãÇ…ÄLʤ=¶~†Wqn|�‘«‰›·Š´y€×A˦í4åÎÃ?ßåýx=eikˆË]AZnç´ã;)ûG5qweœ÷nµ¾þ*C1oIK:ö«éÅG°ìêZç­"uIÏ!NBïx€Ž>¦nš^zËŽÎÇ^Då�~‹oÍ2"ïXƒþŽÎìÕ4üõ Õng#erË�ßäjÿÔ‹v/ZÐñÿúÍ<úÏ¿cüš¡ê#ÞsOfí²Ùo-vÿš¿UúwD9Á?>ü#asW1+÷ fuNnµ~ÂïþõÅçUMw‚ ŸüãÔÙL›ú-æI€¯�ÿýÛslâ ­ÊšGtVÇÿÛ�6Ú,‡¨zýCjvuöNð–Sý›MhœGô÷%Àm¥éÍR—³ S¯¬­×Šná ôK»§µ[‹¨~é ü{‡ÔîáÄ� úy˜Ö>Œùô 8�í¡©÷;±¢j;'^ %aÍ4âïÜ)Ü8÷®çä ýjHm4¼ò�ëVaºçáŽk¢½œºMù°4«ç:‡RÎc›8ñšŽØ%Óˆ»¯£º·é¥B,ý æÞ‘}-¯(¿HÚ!Ì~h-ßï?-…ÕÏ¯íø¯÷ÿóõ—øg-à­áo�ý®—pÛ�«˜~w×üêKKx{C?%n9ÆÿøTkgróƒcPõü–�GK:þÞtŒÿ~úô�ÏaõO×±pUì篛<¬Îa=Œá" HHH¸’ñ £!šHm'¨è“*»dtÿˆ¤ŒBJï} ›Ö„&FC{UγT+>Lúm!Ô=ý •g^{€Á„Ú¬¡½¢gã™××5�Õ8*.ƒFÞa41!`oÆUaÅ;RRÊŠtî¼õûÌkü ÷¼ÿ„¦�¤vSS‚~îÕ§…&�¤ÑârX°4]æ¯È“4¨F™PJ\–j>o­¼¼«S…‘¥ê 6þߥ.„ —šhc'‚ ‚p…ãØ ‚ ‚ \!D`'‚ ‚p…�� ‚ ÂBv‚ ‚ WØ ‚ ‚ \!D`'‚ ‚p…Ø8vô iÄÇ'¢ A(áuX©+;ÂÑ Íb\AA„Kn`;M2ã¦d⥩²ˆ’cG©l Á4ö:¦ÏOHÀ.¥ ‚ ‚pN X6`ŠpQ{ª™î¨ˆºv)Sâ$Êw¾A~¥HÛ ‚ ‚ \JËØ¹­T÷ê\T—[ñ¡"Ht!Ê&‚ ‚ ÂyužPkT(ðÒÖÚ6\åAA†hè��IRR$8-œ8åÆ" ‚ ‚ C1ÄÀNEDæ4RtÊó÷RíÞB ‚ ‚ ƒ7„ÀN"dôl¦¤„P_°…ýåŽá/• ‚ ‚0hƒì‚g253gÉVöX{u¨AA.•Av�±Ó˜:9ï‰OØõE9¢VAaäp`'›s˜š�†têSvíµ úÁ ‚ ‚ Œ,{¥˜v,S®KH»•ò& ±c2{üÙm-¢´F´µAA¸”Ø©CRbÇúü¹µø”ìAA.±�½RLAAñÎëÍ‚ ‚ ÂÈ!;AA„+„ìAA®"°AA¸BˆÀNAá !;AA„+„ìAA®"°AA¸BˆÀNAá 1°WŠ]©TÉè'¤#u}öž¤ñÀAÜ—²L—‘s"!I*œû‹p9¹°6–ÐIÝÇÞU�mkž-ìcÜU."kÙ^0È ÿ§Ñ ÎJCe+ÅVlä²:‚fd¢Öv}nű;Gã0Qf&c±!²NUò¥ýÂm-Ì͘Ǿj`À§†2˜ ñ:¨¯æp£w€ ©•Adk={ª{Áéâãªlê“�|V)®•i€�]QW‘i L‚¬¯³‘º²#-8NóÀîÆ#OP:†)7¡U€"ØŒìÛΗ‡Òè»Ô"9ó×,�ãý?R±«ûF.M]Fâ×âð–Ró“·± õºèG𲄤ªÿ ÕǹpHá rÑH 1 ôæSº£Û¢jãµ�üï\¼ù°™í=Ö™I̺ëÐHÝ“ÚM8�Ò°e­ÖA–ñ‚кænŒñÐ~ôC¾úk!§ßégÎ&îþ¥Všÿò[ª� Ãæä$Œ÷¯&¼è5=—?¸e%!¹¹è#µUˆ�ÚÒ+%°Ó6ñZ"<%XŽ” ð�âQ˜øúÒ "�íæ…Ã-gŸWÎ×—^DzUç/ùï¿Åhð4xÉWåðý´S<÷Êgìè� ŽåÎ…“`Ï&¾»g€ŠpÍ›IΩOùúƲ¾àÆ1<~]Ç>þ”õÕgZIqÓ­<ŸŠoëøâÂA¸dØ„bJˆ&¨¥šªå´µA >–è13™n fçÖƒ4_Žoœm|—âWÞT„-z�Ñi—º@çIÒ¡IMD+AМLªwíì¼aéÍÍ&8Uo+’tŽõ\ U¦üê§ IDAT;±|{'ºŸ%iâ—“ÜÜ»ª…À}ü¹w0©Ò£NMDÛ\NÓq+  5¶0“ˆ9YT<õ2ueùC!£JLD› Dg£ÛPHSg6E5u:ácb À�KwI ÙÁ[NõÓÏP Ì^Ä5¦K]¢á#¥0éÁW˜Öò ^øÖKœ#\º´*b£"ˆ=%ŸsVíè Å@þÖM¼P`Ã>R#V·�/-•Ðè¾uªƒIŽ2Ò >ÛL¼óÏîýoßšÌ]›Ek$áÊ3°À®½œCï¿�¯ÇÓM>''ÞÄôÑH‹:B~¥xô)<Ç-x’3ÐvRo ™„§Ù°ËhG]êÒ�Ý5Í,�“ØüG µg˜§ýø6,~Ù©€I+óH6æ›Ò±¾è—!»”j-Øå4B'Ê4írƒd"üÎârÔ©†K]:á2kFö5p¸duö2~÷ö%zʲóö‘&[Ô¸-: Ä­K¸Â ¸��¯ÏÉ辰Ίot"ê àÖ‚ u2ú«oÄ�*< %Ø Þ¥¦¨ŒAÿ–•á�¹Ž°¤L´=²Ò…»¶�ú}oQ[ÑÐgv)êz¢¦L%ĨGáiÁÕpÛÑw©-*£gM¯ Mú LÆ¢ †¶zÚj ©?ð.õUClSq€&UáÙ:ê7ÙPNÉ@k=DeyVßÀÎ�†~á4BS H´â*9DÝÆ�}«-%Á óˆ˜dFI+ŽHý™2²Ý ¹„eÄ¡Rƒ·ªˆÆ÷¶Ñpü|Ï æÙÑÙ‚ùààÀÛÇ´)ÂáÎ&Ô`B¢°#‹)ëÊÉB—‘„&2YwU)Mn£þXߪ!)5ãõ™hctøZñÔTв{7Ö½Õ½EõÔ\ ÓRÑ„Ñn+§åãmÔìî5Ÿ«”Æ#zÌ9ìʧ=n2¡14¬o"ªO`×±Nã´TÃT´ÛªhÙµ�š½· ÉÙ˜f©Â[UDý;åg<.=öÉiűÕ› ñŒ´F¦Æ\&/»…Ôô8‚i¢ñË�Ùýúï)¯ïš!Ž”Û`Lð~öüñMêü’@ê)kÉ�i¤ê½_°ÿ¨ åĵÌ�›‚„Ž(=<Ÿ¹ëR:«õœTl|’ý_¶u¯@Çø{o'®j#ÿÚVÞÎøô8Ô®2,Û~ÏÎM_àÔIó;s‰£S G UÞa÷úwh¼Ð—F9‚e3FaR@x”*r¦O!Ö àã«CûØì_5©�`Áä4r¢µhñRSYÆûûŠ9ÜÏåfÔ„É,¯å�Ϫ Ÿ0ž¯¥„©ôR~¢˜î-£Ü/xTé¢Yvu*“#T¸šêØ�_ÀæS=3r±c2XוRóQ]r„õ¥ý· ѸùêDÆ„«pY«y_Ýù%? ÞþLÍÿ[kgyªŽž­Éƒ¬E«‘;ö�´„à<òÐ*ŒQ4ÓØ0ƒ:ýõ¤|ã%R§MAåªÂ^yoÐDb–>€>xë‹XȨE«ˆ4«ð5”Ðrª ¢ç3êΗIÍ0÷˜Uscï|ˆ¨XîÊBšk[P§?ó:{­VsͳŒ[zzm öòBì-˜¼Œø«R†¼ëx«iÚW�öšL”’ްœ$ÚòàìÝvИEü=@\n,Ššr5 É]FêOWÞc—t„~{É+²tYqœr£YôMçèûn;$ ó�!iY&*g‹Er.ñϵ9 „­XÃèÿ7ÕH¨ªï¤½–Ûû* æ¦@ÅÊ+ bî£ÜõëWcìš« K!Ä-yš›ï¼¶ûiÕ¸œ×}—ñæZÊŠ:ƒu)�àPšÐP”RÇgu¨Mç´À>Ç*’Äë–3yÚBæþêUæÏŒƒ–&œš,&®¼… �”»Å K®%ŒjKŽPëˆdÌÊ_q߯%öˆó†É„�Qš\OÓŸ+ðÍñŸG&xùbÂìÔýô§Tê¸ÀŒYLÚ“¹D/ϤñŃå͘GtŽç–—)úCQÇ4c6Iϯ@Õ#S+|Ûí˜âê©{þ*öwþM�ˆùÇcºã:ê¿· ç«>\Œ  Ì"s¶æÖ1“1߀"ÄDðät«ò)[ïW [³�“ßÛ†£Ì¯ür,æg×aZ2ÍŽ·qt–S››…†"Ê{™z¿Ž’A×#“-ÍXFÜ ­^âø–Îmi¨¿oÉ7-"bÇËÔùÕ·ÍÇæ\Mø”4œSôØ?:„Û›ÔsgÌÓˆ¹!_ÁzŠÿk'./€ŽðG%>ïf">ùµe�ÓVæ¢õQöש¯�±ÞµŽÔ½âs.qw¤P°ž¢çvâê¼·)sW3ú¾<ÌÙû8¹k<¬IW1}ÝwIt}À†oÝÇ‘®c—´–Ûý]æÞžKÉ/·ã<ùO²áõñܵòYæ^Ê{{C™üƒGÃv6üì%ê:¿'Oþ/øg~ǺsÿðÓZÞáÝÇÐÆnÂb?xˆ_¿ø-^€@Ôñqt<)´Qþ·Õ¼pü3Zü³…s_å[?XÅôë~Ï›jaÒƒ¼úÃY„Ÿm;Åá›ßû?z´ý÷”ñܯß8ó2m•üí½JFϼ‘g'ÙùèÃOÙÜç+”Ⱥö*²µ-l~ë}~WÖqP䃓øåò1Üym4Ÿ|PÙ·SB`9!üè‡8Üy‘’C‚Ñû'ÚÁ`ÙÆwÿU�@›Àã«®åk3Rùè�ctå�Ëïã¹Ã@Ø~qç¤3ì�š9ÓÆ1ÊWÍïÞØÆf[GÙ'ÌœÏ3YœyÔ‚²}Üõ«}g>NþêdJìíÌOuaD>c³A¸ .°S†aŠOF/«�e‰6kå§GÞð a³ˆLTá>ôg*+zÖ/x«Ž­ÒØY†ÝÿB¦T¡PTa«l &#µ‚ÎÀN  B©ü;oK¯*[…Š F©„¶ÓÕ.Ü-çר¸½lM¹ï A®Ê§Ââ•’ÍÐAÙ&j º¿ÁöcÛ°~•KLF:Zù -nÐd¥£òVSõaQw€P›�õÀbtÙ~ëT§£Ÿ¢£ýÐ&ªöûe§…ºO,˜V¤bÜ„³jˆ;eö äמãÑÙ˜JDnG€¤Òà¶bË/À^ã7Os5Žfÿ²Ë`¥¥Ä†iš µÌéÀITHZðÏÁkõ/u„æ¦#5¢fƒÅ/�rÐòÑ!œ3¦’¡¡n«ß"î"ò[IY² �¡”Ú=VÚÇôÜeV:ZÙAÖ=�A€�†=)›ÐÉjˬ’NhšŒwÿ§4œ>¾nZ·ìÃ>/� ÿ]�9™`ÙJíúî Àóél·e:9 vží_nabTýï/ºƒ:€Òרx-K²fa–¶SÞ\Uýå!þ5á-|ç9ìŸD’=¡‰ýÏ|Ÿ#C=ßüµlgû+]A]Çöœ'KNÿ¹ñègÝóªQJ�x ¿ Ê›KXLP ÕŸóá»-œ­ÂÀ]{üÂuäPD�¯†ÚC¼_ÖýDâ>u”�N�áΤX2•ä÷ …wuîæ–žÁ§ÏÆž�A€½œÍ_9ÉM–öåƒiUh"+FÂþU1�þ‰y9|ð8_MšDÜ VuF^‰šú�â$¨=Ãæûä6¾S ‡imñ„ËÄà;ûQö¼{Ep"c³§117ŒÀ�Þ£¨éBoˆ"ãÑ(À^QÈð�\¢E{ÕÄ^= ]D8 ÿ(ɧB¡„ŽÆ[.ZoÃ1þFâ×¼ŽÁr[ùqZ,»h,«êYßQ¬‡ŽuÝRÒœBËW…4WÅVü)¶úóxÊ[MS~5楱86ìÃé¥ÇÍ� =ªð­ö l8Ëm0J�Z-VU¤|…½27ÎªŽž§§™cQ«�È,bNÃÿôRDêAU$0Äm ÊG Ðæ8{ûºöop¤«ó„¤A=c1 ÷¬"ÕÇ~žßY«A3/óõ™„Dëð�½Jd 3�·ï؇3g:ÑÏÿˆð£Å´—b?Rˆ­ÀÚÀIf412(Lèï[Etï¿Ú€,É´Gê ×À­» qÏ›Ž\°“Æ~2ߪHx­´•÷z|*¯¢Í �‘À ‘T pWX{fçjªq¹ý¿{™À8à è†UÄ/ð+§¤A£)Ì€ƒo‡:Ì‚SR <“¿Ë¿D¦’@Ôñ@hÁþõ–°ïÙŸ�ô›g™¶¤�º7WóÁ§Ã”‹)ýËÙžcæ3íîµLÊJ!,¸gƒ‹FMg›²ÊÏxóÕÏúYø"‘ƒ1iÁ]aë”á¤¼Þ QÁÄj ¿÷¥ÇÛÀ±sF_å=ž[½”[[@¡Å ær¦ Ť€†ú¦žIƒ5^†)°  Í„ú8k'ÚÒ�¼^ºs8¶(Í�(öµX(ØŠq~£Ò¢(úüÔp–ëü(U¾al˜õc¿6×±ÿã«íp6wdÔ‚²Ÿ`T:=Z+ú,¿¡à�G‰¼j*aq‰œ‘KÔ¬U´ù¶÷¸X9v}‡CÕ7bšp5!ÑÓˆ=1sî qË÷ùòóóë5æüèÊ<&\;úÔI’;Šìë{Œ|§3�Ÿ ¹ÿ»¼ËC�ÀN– �ÀçtÐîÿ Æ[QL}…�Ö¾ýL¬Í¥  Ô´ì<áuàܾžª‰™$N™A¸1ŸºZPå­&ùŽ$ÜùÛ){³gC+ DsÃÝÄM鹊öCë)y¬ýœ,tcSÑ/θÔ�k÷¿�ß±— % pz𹻪>;÷ß]MÓŽr\=ŽÀ±íTüÕ†òø¾þÇRSÉ@s߯Éí騆ÜùVÈ A{ß;¿‹n Y·�vgïr6ÓšŸOKÅ»¨”ª@  Okn¿¶›6‡? Á[@Ÿ±m½N<]ծÙ:lgëN“Ë‚ç_a²¦€}¯?ÉÑ/Ëp¶9!h> ~ú ‚»ZÖF_Ëò¹)}ÚÙöPw�·6T4`�O£®¾=ápù¤þ[]»\§›™œMŸ:†v%ò`[r+$dè»M_ç%g8Híª—‚aÒSF”ó{ó„½§B5!Èœ9U²Mõ¸} ‡š€G]ÁL¿Ìè33‘jþNñ[Æqú‚£"PÑÿ2Þšíœú`;§‚3‰ºñ âÓWµg;'{ÄÀ.ÚJÞâdÉ[HæIºù~ 3V¶ÿyÏçBf-¢þ­¢þÿf·ávƒ6D×+;##‡hÀ׊·À�·Ù²¦OU¤B� T}/(жQö'ËÀË9Ðp•D iô2¸S×�»±¤T Ö@è´4¤²-”üܿ͟ŒªwàÕUDËAjÿp°£-Ž!ã}ß$:'�È÷ò©,|6Ü6ÀY@ÕK[úÞäNëÕãÕkŶqËçöÙ … ‡Ñ3ÓÖñ½y;몚›ðzA ÿ|ŒJ×Ñ$ Ç±°ÕÔÿù5ü«£â"6 o©­ÁCU›¾Ï{Ÿ¶�{)…I?x†ñªÏØóA$“—?ËüÂ¥¼·û· ÊZÄxsÇž]ÉæùUÏ'åö"–Ø1Ó˜‘“F ×ʉâT àùœŠñF,eôò;ÐÇÄ!›Ñ$^Oìò‡0õ]Ä~ôsŒ%æÆ{0f䢟Kðéè¡ [yDÝ@BV&�ÁáFå{Ë7SöÎͨÐÏ–QS¯Gg6#…s=ñ9™(œ…4UúͯÈ$vù÷ˆ½j*Z}8R�mú=ÄŒ Çwê çÙâ¬Ôx�6“èµóŽ3 ŒK#âÁeèÃ4}ØÝXß»{; �BW¬Â8É„ÒKèªU{7vñVS·~.ãt’]Lx† ¥Á€z\:áKW�ôäb‚ú¹‰:þ}'‰˜î_Œ>7‹Ð™û·#�íG¦9É:K|9ãÂ\"æb\±Œøÿzˆ¨dÏžm4Ôv”³å¸ FM':/U˜Ujæ,C'÷¾³É„Þóq˳ N6  Ñ¡“Mô éØKiñ{ûEë;[hrÆbZ·ÓŒDTFªä4tóòˆ{fMßã5‡vRWæF³`1¹‰¨ 43–¿0‘€Š=Ôîë,¯×BýGÚãr‰¿+ �Y‡*#—„Û2ú$ÙÚ÷~Hõ1Ðݶ†ø%™hÌ:”1±M�Žùÿ=Lü¼~‚·cûhj”Ñ-_…i^¡3²Ð¥öä']Åì™Ó™�Ñ{ˆ—Aª}“íKPÏ|†Û×}ƒÄÑ)›Ç;e9Ù¾Ê7¾³ètFL™õ4KVŽ£åƒ²ù“Zð°çùŸP"å²à‘µ�Ã’ø+£¼¤’3÷ÎU¤äÌ'qJ.ýŒàs.ž/¿ Ê¥cìí�2&%µq‰ËÅÍyq#ìUe-|´¿ »&�»Œ!K¯Æ¤7±hA3´.òçÌ£ž‹Š¬©9,KÒaÒéÈž–Ãâ((?\Ì¡®ƒ 3:*‚ 1Lˆ FhCÂ;>ÇD0Z×ù%ùêxÿ@îˆ1<�Çh�šØ¸TÖΊe�Ñb¼ÊIФä³Ýgô�£&�=m:Ó'�F+†;.zþñµ6Òªš@ÊÄÄžÓ[Ê)úb'GGà»#ÛòÄQ iÖ­¤®¾µsª wÙÿQÔßÕ¶âofÔôµH¸¨ß°‹â#.À…më T¿OÌמÅð5ÀçÂqä”VÝDJVÏUy|zÂf<„ñºîi>ÛA*6¼€µÕN^ÍDbór‰ñ›ê®ø�ão¿Å*ŸÎ‹wÇ”enÊ#ùy�·b{ëUʶúU)5RþËM(œGô#� ´Wåsj«‡èÙ=oîÞ½opü¿ÄÝ6�øÇs»ÿ`·Ò²wSÿ힎mâÄk:b—L#î>pÓôR!–ÚÞA–‚Í[ƒxìjóLJ³ý‹3ìX\Ñ·u~)n®ª2Þ|ƒS ;k}Ý´üõ ª£VaºãaÂïè˜æÜµžŠÒyÄÏîuœ¼¡è®@¿´{Z»µˆê—Þ ÁÿܯÝÉAô7ò0­}˜Ó‰"¯ç±=4 ¶ÚÀ]NõÏÞ@ùàÍDÜ÷0]«´ìáä‹›pø"çÆ×8¹š¸y«H›×±Ý–MÛiÊ�×3Ãé­¦ö¹—h¿çfÌ·¬&|Åé�á)+¦fs??{!•/nBZ}¦{Ò <Û_¦ ¸oUxxÇí·¼¢ü<3ù6Ê·š7\O³`Ù£Ü>ÿÑÓñÔP²¾¬#p2.âÆuË ;ù{þòÊÝm¦*^ãÝ—røÆckYrïüé•Ïü­6,ü>ÛCåê…O³beÇ´c?ÎäŸÛùË;ù{ÞýÝU¬¸w7ÿvUGùê¿`Ï‹/ûØw9G"ú¢j<¶—ç‚%È™Äã]Ã�xZ8üÙ'¼Pp­ÍÜ•¼sòåñu€—òÂÏxnOC÷9`ÃnNíy<&\Ë3:Ëvxwý«#_Y¾o7/…NãÞÌi<; ð9ùrß1öLG¯ËíøXp­“@‹Ž·‡ã}Ì‚0Â$$$ ø KŠÀ´ ²¼ŽFšì4¥4L´È‘ñÊàn:NÛy¥ÁTHÉh4àm8ŽãlëRh‘õñjT´;Nâ¨k8s]•�>IoóI�¤…Í™©u¨õ(pà²Tã9Óõ]Ò eBékÆa±Ò~Ö¶)2RŒ‰À0%¾ÆzÚªl瘀$7�½|ŠåeFfÿøÌ¯).†@ø**p6ž% ‘5(ÍTº ÚmU8Ëlg36À`BmÖ€½W•ï0´Ð–̱”´7Vã¨8sÃ¥®m·ŸkŸ´Ôq!(¼\UõxšÏ³Q…ËÊç^diäüæÛ?fëp=ôIFÂRR Ö8qV•PW5ÀÇ_LÁ)˜SâP:ʨ+)òx�…RM¬1˜p\”ÕÙ8×i2P²FÇ(½ ·­�¯šÏÿÈZ£Â$ì�6ÊíÃt@ãllz¹‰¦ßE³ò=‘†®<ƒ ìa$0N·òþ:o~ÛÄÏ-—º4B†…<õò„¿ÿ(¾öå¥.� ôÒÎüu•¼˜ÌŠo‡òÅå�›„A’žºÔ…„Áh=©&ÿ„’úf%–Æ�¿3V¸BµèlGøàýϱ^è¶‚0híèPñÑ{Zv7ˆk‡pe;AA„+Ä…PCAA¸ˆD`'‚ ‚p…�� ‚ Â⊠쒒’P«ñÚAA„+ÄØ ‚ ‚ ü§®7ï —9)9­Á†}o9#y\ÕKKCü”Z+Øy¤þ<ÖBúÜ ¤ž~/±ƒâOöS8ˆUªb¸&EæÄÞNži¬b�‡ÜI^jŽR0ÇóP�žO¢±†òO¿ åRF¸°’æ3ibÜéWÜy«>cÿî‚s.6¤s$x‰Y)xJ> ¼â"�»c¼–”t�> ®éâlrø‰�»óék“�ªOÞ¤ü\×&U ±9ãP–nÇrr„^l.ºhׯ�ÿ¹<äø‡Øiˆºj)z‰Ö¯>!ÿ«¡¼+II´7¬")«ËݯÒ4 £ÐK‰ih ­´æ—�°÷evR�á›?›Ã¸3ä¬Oýëu~²±×ÕLŠdñÚU,ªÝÀÍßýŒ!‡v’Žìù3™m4:Ì¡6Þ)\`§Ÿv#OÝ­áoßú¯ö;p;×ÞYËÿd«ùæ79÷íóìÔ)¹Ä›¨Ú=œX ±ËžãæœÏøçM÷ql8‹5^EÊèHŸßÍU;õGŸ}&_Uo?�u¾Rq$R&Í'{ÙU(Q£6Qx’£» 8ûKY†xŽÄÜ‚®ÂùÊ þ´¾lˆ%Ö6ñZ"<%XŽ”œó:¦œò+¾“ʾïngó�ËtG)ŽÄù·3É h" ûÿíÝ{\ÕõýÀñœ»‡ËávÀED…T0E ÉÂU’ÓrÚ43­i6+çjÖfnËÕ\[n-·Rkö›Î¥m¨MÊÀ§`Š& €$(‡ ¹Ÿ#çÂ�ß ‚n‚öy>=’ïùœïù|Ïùžïyߟ›«žÔsÿFWÞÁñxÅ3ýÕå°ía>ø¨»W›^äèͳîF›}”?dÜú[IïQãyq¤‰Ov�æD;KQUËÍ<ÿój ?�}ÕµFÕ.=Kæ7žÑAq÷Ðâêt“ÕØ…Û†5?—êÓùXÚ]÷¬sTÓçø“‡Pß|�í¾#qaЈÁŒôUa®­½á?K›? 5œËÈ&íL9ÝŠAlElYùžxâ7<»9¯;{jß]F~ò@Y .èvÀ¤Àgæ[Ì]»œ€þºòŽ�w" C¥‰¥c–óØÚ·ˆ®èÞŽ,êj-×þÃyN¾C‘Ô[šm7ÐÐCߗ䨸Ädþ´àNÛÿ¼ž>Gì& bìŠ�Ì}6»zmg‘wìÅU·iP`KçðÊÉüé‰ÉlÜ|ÂþçÕæQp⺢~ž­s”ã7Г!®}óävõb¸¯ …:uÄ IDATê›E^N¼➨aR¯·�ÏØÉü5ÆŸš‚ èÚ« ýNíî-ä÷u%úBþY÷S;³o¶rö­ß̾ޮS˜_M¸MÅË_öçµ0ÍïXÊö¾®FŒ_ÿ–œ¯¯þ%Çå‘mŒ¸»œ²½¯Pt¹/kö]ÓÏ‘ÖêN¬c{'b¡;Jyû–Ð×µ¸C8�¸OMáºLráÈW�_!¥“��ϰ‰Üe:EJ�3‘��~=áš©+‰yÛÖ‘ÝüÖ'ž¨y‘e|Ì�ý­ÓÚ2Ô.jdX1VéV«©2Ï'#P\½{°æSöaê�‹—«ƒñúaŽ'¿ Ìz7ÞŒA¥�ºo�S²#…Ú«-ñš‘xÍ�ÜäÁ*�xãùì\œšögËú‚âCeÝ©qß>žÏ̵›§‹ÇøãŽ ídí¤M�£Sƒæ®ÂRUÄÉăüßA}׳|g&̉#~‚7Ôr.åKþ}³xMnbÎd+æÓöµ{í‚çÔ%DN�„—»j«¨¼˜Î¹Ä­dæ4õìp�#ja 8�tI(c_z‡€ ã©Öç§Ÿ™kçs’ÔÍGpšñ÷L E#¯âò©’òq—-€*†È¥ñx^=K:ÇßÝJq»Nã0qÚ}øøº"­ÕSzæ+NíÞ�®Ô òÌb‚\•àŠþ3ßâá)�϶•&’òQb¯÷ás ˜Å ‘NTÞN­Ï÷8vh"¾�gP Ô•žárÚvÊŠ�½x$^Í_É0ùQR6'´zßü šÿ\ËÇÜà ™GPØ(ܼ\QÚª¨Ì;Ê×;>  ¸‹Ù«N�# 4S–7‰�®Py&�”£m“ûã7%žáxÔâ$3c(Ê$;á]Nf^ïÍ$³œiÓ‚�àÂ@wÀ)Ži«‚š®µ&Šv¯ádÎÕãò'hás„x]Íéé¯çEm–rÄ&~ÿA|]¡VOñ‰rtg"•Í/#–0ýa? wn¢rÌsLŒjü]:º‰¯¶èâyì‚&âQB£&â?H‹““Syºä­ÝŸÞAsxû4ÓÖ5Ƶé/•‡ÿÌá£m4}wê±ãÚÔ+”DŒ%RYJÂá èš}ÕƒCX¬âüéÓì+éýÔ±9sG.Wñhì¼¾Rwº¯]§šb="¸;ÐF~úYjDD7™©<•…lüfþlùõ ˜d‘?{‹˜‰ZJOµÑWÁc:¯nÚÌæM¯2Ý£›U�H‘8«�¹¸ º;ÏÉ#¯yÍ)}q¹/÷™ öÌ8d¦b,&g\˜ÍÐå‘×ï$²kûs”ÈpP«�¹4þ'QÞ¦cud*Ü]U¸»º3vÊx¦�÷¥íÞWÎD¿²Š?½z?c�k9—WD™S�ýb9oÏ÷¥kYugb_}‘uO‡3Ø\Î9�•asžfíCîí>C1¢–Inde*i/®óœó!K^]Â0W=¥9™”–›ÑŒ_@ÌC¡× I¨\]P¹º lª¼ÒÉ¥i›µª�ýF<ÊØirÏ+»˜;ª0X´Ì\BˆÏõýJ›öëÏØiÑ´¨ºà÷Ì.–þf5c†+1ägR\ ^ÓVóØüI×ëé¤Eåê‚sS�¤×êé‚““k{;ïQ¯{ñ{žQ¿$lÖl\Tꌠ™ËÀ uc!Ï{ñ¾çA\\š?SŽ"0Ž�÷܃ªù÷O9¿…eøÔ(–‹ÿWŒ£ß#=õ¨{ñHª18MbÜœ%„ú¶zÈ'žèysrª¾`8M}•Çžžƒ¿ÆŒ!?]‘Í”•Ìÿë6"ƒºØ$Þ‰sD3s K~±œ^U\Ê+D:f%ó_йñ;8ŸGV-'4PA�>]¾iУ<üûÏx,.¨Åk;¹º ruE*iü[ézõ|rEѪOzõÜ šÄظG ôjû˜•ßä©ß¯%2ÌC~&¥BŸÞÈ’õËñlvq�úMdLÜ£L|i �=äO]i!U(cŸÞÈcóFuö�l:¦¢^YKôx0¢ËÉÃ4 œÈW¶ñÔ*;›šÛ U5]#¼F1"n#†»´Y®3çˆ]צîhwUÙ— $|/OòäÚÇì<˜ãÆ2Qc £´›A]½ ì‰�l2Žœ• ­ej]}Ûbÿ/­ÄƒáãF ¹ø9å6ðìü‹ ­”'°gýD|~³œ™ Óùpó <¾EÌ='×¼LfoÞœÏPò»3¸¬x“Àˆ›—k¯pñ§¥¢ @EÕ‹k�Æ#•Ëe@Ù7ÿþ §É:JßÍÁcW°å÷áv³2ç>æG?ý”’®ìß7ŒE+¼[fÓ,Eüçýcä]ýgäõ×É`~üárâÛÙ•û´™üdš ·ý…ç7_Í詘°êÖÍ{˜øýå“Nô-�GÜÏ¢)Îïþ+ÏnÈkü1õÏïþú>´=Ö˜/¤$ÛÎ}›$œ°iáHsÞåÃçßæzßœ¼š•+M`ÿš@AÀªæOËäè/‘ÙQêÑ5†PŸøxÁ:tM¤^£pº 9¼&Pôê1æNlWÒˆÕÌœ3ŠºÃ¯ðá/wPyõ3‘á7´éß¶,Nþ~'é´-¬z%‚ü�—²÷XëL€ßÿÍæ‡Ü¬òF¾zsÒº˜_uôÁcx Σ¤¸irÊÎfØä¸Ä¾Œ¯w %Û_¤à|Óó¥#ð{ê÷ø>8›Ò¿þ­�3 »Ì''ry榎"õãë7˜š)1øÉ IM:rm›éØÛ|�|‚âæì}—3ÓJ¢gÇpüÍÄΠ²÷qŠ'fá$¤y�çr±��"ê�]Äø´*[œÀžg?@—ßìÂ*'æ½]DÍ›�Ïþ5Û îÄÛ|r�„³iQ†ö¼ön;™²B²ß]D6 }èïüì¥am×SÎÄgæàiHä“eKÉ.P�:oKž^δ¸¶ïnžérÁ³þ>xö].ÛU Ó7maÜÔxÙ ø®dɇËÛ-g÷9bçµiè“äw�úß´n%{~Æ�¶d·ÜXWÈ[j¿aßXx’?¤ºñfäDž)úœ?çˉ`òçÄs-²x]q>5‘™©ö”t +O÷Y5ø¦s¯cw`çE�²�ã§/Ùp ö©;±†íå©9ogKÇv—w."ñh;Q�)‡”„Ýä '§«ùó®ÖõdJSPP‹!»&z ÷z«…µäk>ßch'CÖÈZúm×›Ù܈žÒ*-Q+åäæf��]œ‰Ž�SUÿ·­y3m-i{3(žv/"T|òYç~Šƒ&†àcÓó÷Ýy×�±8�„c3vJÛÏñ÷µ�MBéÍn $€Ê'T^«R5†¹™(äÔûo_ êêJ³èüàQÓ¦£±e±ÿýfA€%ÝÙÎîÏ™Ãÿbï¹›uœ¶òmQ÷F›�ýùzP`)ÆÜÙ]ÊïE;Ò�úó£ð|³ °î,%§Ïâ{ÿ=hÜÿFmwfݹ™¼2ò—‡ç¶«�D!SÂáâV2Î^ÿ�®»x„k÷+R¹ªÒÑA€oJèµfpé˜8‚œ@—øO®½å–,Ž'ž zø¤–…«²š�“ ¤*PHaN)LõÇSŽ)C`!¾PùÙÇMA€™Ë»ÿIÞ¼7 šƒt÷ÖfA—™‚/v\àj��Ÿcf\„? �ì(¤8³ÙŸr¤(>“GÝCxR@/N Ó©sÄŽkSyÖWì•ÜôvŸŠ¬®ÜêÛ8ì(ú>È3Œ§2[E¼¿…/Žñå-žü£ð²3fü=€Îõ³³/°s eÌHgÊ¿IæÒm<à§2SüÑËì¹�éóã©Ë|›6iÿטþ¿·9¿E¯«+kÙ°Woª£½90úGرåHÇåº*cOugê’«$Þ $‰–髿 \ûz©Üq’Hñðq†NåX¤ ôqÛY.´¸›®ãBQ9Ðv€¢�×RªÚ &lYœMÎ"rážúû$ N�@—s’ü£ûzfªÚ< ÏôÄ…ÂÏA.Pš‰®“™Î¶Éþl+Ùì† E]�^£Í ÆæoM �3ï¹¾Ý\}À.Ðý·¶,2g3?Ž�À·9œ Š',.ïHhÙ×M5ŠÐ…+™8e>­›!ó�Í™½Ô-Ié«EI)EúÛM Û&]𙱚˜S äÕX¯«l dr:÷õì _œ$P|ñ\Ëíµç¸\ !^~­¶jjJ[~ë,f�+º<ù¬SÄrî[ð8#‚ý¯u­hdn<öÞdï9bçµ©âø§l>ÞKu­7°/ñwÿ0ŠÙ6tÇ’y?¿'æbê$‹#f@¡ê¥ÀÎsxî 5\� &èj3†Ú q &hxår)¿Å¤;‡[Óº®_NúÖ¨¡{C5ºæ®IÌ™ÄM{ê\þ†]Ÿ}Cov'ï�DŠ\ÔÖa¸v hú0-zÒöQœ×ù_ ¹D 6nxa±ÔÑ^`g¶8 (Ú½X›)þxópÏ”‰ŒœNÔ”9D=½’¼÷ŸbûÎnÎCe©î™¹ % ¤rÀfÕ„ÄÍb¼÷ÍʘÉKÚÁ]_¢Þ@]O\%2�«�úºVŸ~é)JK Ôôòh�ÊäDtóW6%œÃyéxN‰Á‡<$§7+åEȪ™ÿz›OŽeQyÅø3ö§ï0ŽÞ�_*i¼2ØZAÌ7ÞXhfÈü¥£0ÝJâGG)-«¢%{‡‡£z±’Mõ”Òœµ¬(V�çz«Gl= _ÍÜ_/AS”ÀÑ ë(¸PM&¤w¯dþ3ôÁé¶Îœ#ö]›ÜÆ~ŸGî¾yç3CÖ>=^ÑåZ_�úËRßGSöËëQæÚ^+q€zG þ£šŸ’Æ‘ÞÁŒð¬!¯Tv]£Àgþ;Ä�1“½3Ÿ™Ë™ùt:¾“¬ÝwÉ]÷ðȬp»É(PË93Ÿ÷u`g«¡¸ ¨=Ë–7“°7Átí÷¨ÍobåUµ WáîD‹ìŒ»»3´s†KAbÃß ø_{¯\MåáwÙø]”×ðÈ/V2o A»_ ¯›7¨=rîÚôËÍ0\‹¦GšÉ䌜:“9£n’ž°ù*÷_ÑõÒz}Ó~[u”Ê[é5XÇ‹»8ÿE§Ûœ{FQg—3=*Ÿ�ÍE�‚¼wÉl>/’ëtÆNô°)Û76ëK'q7Þ‘ô0CUuáÔj,‘ÔCÛª 8ˆ�©á(ó?àã5ëšehh»ÃOª«ÒcœÜµÐbH“gW ¸ôÆÙzŒŸ©qøHÒÙ÷Ú ovqR†(; ¤Ý�Ì;}Žt|mrûsfuÐÇîßǺØ91ý�ñL–þ�}*îÅ3—>çÏ·8kçïiC�ýå^ ìJŽmgϱV='2-v¶ì½$Ÿ¾ §°è'¤k™9o•»ñ¯�'ð±íbþì7‰Ë˜ÅÞ¶ú٩Ùõôdü)äÐæ]¤÷i4Ó>›É H‘¹Ð½þwÇ7ðÃz¨V½ÈVÄÉSå<Æ÷‚’Øbï¼ÃåµpÁÇKE[í@çÎa™æËØ û›—h‰ sô7”(Ì–SJ Ãêáû¾›r¶òõ©%„LõBÙF]Wk\QºB—×¹é´RòOäQ1‰±SýÉþ¬ã&κZ3u(P9)€ÖÙ‘ >ýéL>핺ÚÉdÀ†…F \átW«`ÓpŒjýbü†Åà”|ƒ�‘²fÜ<æMÒBþ>>Ø“ÓÍ{!Ù_e1miaÓ (ÐŒnsB˾’r”0ô-‚yé˜ òÚZý槦 hj~lš›ŽÕ�Iç²m~c&!M>ÐT>£ZŽô”¸ R†ê–”룄�i§=ÀV�µP5c·&HÎ;Cq-Œ‰Áéãfýeƒï#À*¦w¡ªý”NJ°Uaj‘å "4ªýQ¶u奘ˆÀÉ«­ïR'tåi¦­kÓ·[~ÄC[º^¥öI9‘§×shïQÞ?¯¤Ä} Oζ÷°Ÿ]AAV¨U’þmçŸ}›Î?q‡ðŠç‘UsÐäÀ‡ï7^”t½LJØ6b^z‹‚ç‘Ù:õ£ô#"*šáäpþïÝ ì$þ�ýt�£p–‚D…|Dl€­ó¹’.7˜ruئ�Æë©°Òa³ÖQ¯/äJQoubé-*…jñ�_Ü倓;£Æ n¼8×–“•Sƒ8¹#‰´)�ñÄÚ§á£/ù2£‹«7ÆëË…w6ó÷V³@[2ÒI+KìÂy,R¥s¡,ºlRÎ6¾Oå’2ÿibŸžÇU{H*’1jæcÄßdIóYG*ª‰mÂ%aÀ�SžHbˆùõãp4�³§²¨4(ÐŒyœ˜(/êò¶¢»á#2S|& ÓÌ8&._‰i‹™ºâè:Ý'O�S`ׯ{º*@¢Å3l~6 ®ŠÊ³×W¨üìmN=´…qK·ð°êmRga’ûã3ñqÆ:%ðÉæ-wŸ“N±%Ž y¿d‰\65yèÎv¼$Ô-ñ¿³Ô˜Ä}âsx•ïÂ`rÇeâ<´.XHñ�ÏñšóÁs-\Hùœêr+RgÜ‹çEß„¡ÕH6§Àpb§‚sìé~_\ÃÁ ž^˘g ´e±/¹ÕKy:ºbˆœº’¨Së8•cÆ),ž˜¥ÓQ¶ûUÏ#ïX1 ç0}E5_g”‚M�îð�¦ùÜ:qŽäÿ“ã'ðð´µ<’gæÀ1=NËydZ«lŽ-¯i�ÄãL›�Åþä<ðžÄ=ËV o/h)D—W =Ê´…:¾>£§ÎfÆ�w€ËMÙs©W8>¾�!¤Ô×µ±îA“ðk „LùG—¶«ú7G“ôÐr{FϾÏÒ1yŵbž–,öÖ‹ýˆ1S|&SÜ$¢—.àòÇû0ÈC6g5ÑA7yZÆòÊã ]ø1ªÏ)­“.™¼³MwvNAøiƒw/¤€Ô+¿¦yíêJ3).ªîÜ9ÒékSÏRû�åÅHOÊ3’y?ÏXHØwа'Ƴ0.„ì]ÙÝk‰•I#l˜ÏªHîB— ØõIãVý’PU:ûöv³]é~ómß[Í#?[NñKïva”=\p[ò"¾-¦~æ®×‚ÿi+ hù§1邆Ô�\ ’1ðÞߨÌT—ôg²þšÛ­Zßrò­ŸGtó„Š×^»iHêÅ$ž]œØ8‚¶ø¯ÿ~¼"ŽÇ^YÎWËÛj¹˜qŒ”¶îL Ùüñ�Dä˧ðØŠä@yâ_I9ÛôZ•Í×&âþÚý,úÍ*–¢“üßgu,z¨�‰ä,Jv’{…éNØqÃ…ÁŒu@Ñ+âhÞµÈ�³ƒ½ùA›™ƒºƒëø×p¦M]ÂÌ¨Æ ‡á³Eüá÷Ú(}3ZB^ø;Ó[LINÌoÿÞøO[:ûž˜Åñ«YAÃöýt)¦—V¹t#c—^ÝžGæûܸûÒ­ìÛ0”éó¦3í•øÆNÙù°ñÙu½ô=ê$Óçè’ïÅ9.†!óc µ§ß£({ #[µå½ÃÙ]†L{„ ù³ší£˜ê3ÿÀÚÆŒ›[ãüvº"]Ïôˆ-ßGFÆj‚Æ+¨;‘Hvël­í~û.>¯-!æ×{‰°’ýÑ:ŽOy“¨vºP\Þö{Üß"fêJf>DÓç~ ésïÌ9RÈÉõ/£YûQ+þN(€!�ã;`~󉉪É{ÿ¤ú¾EäÒ-„,0s9y_æ-æá‡Úª¥™‚Í/sÀu5÷ÌXËÜy�Û²ßÍ'É��›fÆ[<5¯et²t !MÏÏ~s4Ÿì7Õl|�½ª·¸Î;,™sõýM'õ�HíåeL‰ëØ7r#ÓãÖ²$nmã¶œìù(�G–Ç´ý$CûÞBº|‘+b�†Ä¥üálbããÃ3÷·sZÎX÷&OÅ5==q)XŸØÉs¤óצ£ögyÜ0¼Ë²øùÁ’ë]{ª¿åÝ$oþð½»y9ê2/ºÜë½Í¡Wˆñ”pd«ªK $ƒnwº¾ÛQ`` —.]Âdþ„¾#÷Òä«C ÅEå”w÷NS¢Â'XËÀúÎå•wÜ,t—�OÿR›ïâû íüº:ùãéë�RuÅ™÷ïu¥î£ð¤Ej(äòÅv6Êó3¹TVƒÙj£Þ\É弃¤žÖS¯ðcÐ çÞ­¥ ‚ ‚СÎ5Ŷr¥¤�š-ή®@MUIèªààྮ‚ ‚Ðrssûº B?Ñ­À)Ž@}}ÏTFè¾sçÎõuA„[hذa}]¡éÆt'\ýýpv°QSVÖs5AAºÄ¾ŒÝÀ‰Ü"á…—¨2\ÁŠ×»B䆳ä\¬íåj ‚ ‚ ±/°³XÀm4#´ÍûpÙ¸RœIêñc\«Š ‚ ‚ ô9û»²|õé)NÔJ94X0*¹"f'AAè7:1x†ÙP†ÙÐ{•AAº®{£bA„žçŽ£Ö¨¢!?�1ó€ v�ÝwœLLØ +ç�çSÙו¹FCð”H†¨¯þmäü‘ríª  íÐü< s„ŠÜ4rïˆAÛjÇ…¢­Î!;7¢íèXÂ}e×þ®ÈI!í[cOVPèAw¿Š2>ê³°¼õ0u}]£É|Âh ód>âL„þCvße?f¬\Ëtý{¬8žß×µ¹NâFDÌ ¢µ€Ê ­s‰çíì”ÁÌ}íUf…\�­¤ÿiëZ{¥š~ß[Ų(7¨>ÁGëw‘{µË©$�Y«–áGÞcý^]÷_L6œÏ­"2g ÞL¡³GäÇŒqj�¨qóP£ûGfvjâ~¾�áû–²áxï|.B\'!ñõª©Ï;@C,ïm•3û§Ó™üç¬?|{‡v�ñ«Y2Á ŠöñÛ?§\¿ÉužÀâ—ãÑžúˆu;ÅÀÂíAvßa꨹Ì(!ñý”þuÇmËgûëËØ¨ï_Ãß~äm×ÓÔQ³™é[^`Ã~Æz Ç÷ Ь›†É#v“›Ù¨Œˆ%vl0Z èóô^:!}Ë*–m|f±~ÃÜ[üê2džPq:ƒJ› $ÍNˆ%�Œâ[\¥þ®â¶lÔçõHưçP<> êó°¾skO¼ßÙ™6�U�Í"8m+¹·qœî4pÁÁ:€é{RØ~±é‰¾Ã‚Râ„ :}C%}¡ ·5‰qß G~.™¤oûº2=Ã×Ï™­ˆÌ4F+½Ô]cÓ‘[ &2*„« �aÃq+ÈE'�7’x3|êÓüný*f�uC ô#zá6¼:— �š¾®a¿Ópfæ-O`þh ¶~u×Õœ‘ô/SÑûÄ?AÝqñ~ÏŠµÞ�èÃ�u\Xú-‘±û® ˜Jt€Œü�¡ï�Ý©ƒc™õàBüÜ�Ù Tè‹È<šÈ¾4]«»\5�Q3ˆ‹ fˆ›ÖjÉ»Øy´u9{_8ŒYó£ÐJä¸ u‰œÈùKñmÚYþþ�$ÞЂ"Cí¬F†c�±›wáWÈHÓ÷`!² 2#jœšŒÏSp n bš½®_Ôl‰ cˆ›¬ñØïf÷Áû(©‡Æ2ëÑ(B´ Ì—2Hü÷ùvk ó#ö‘8&kq€>/�ÄOÉè/�&m:ß~�Ô�8æþp‘C5ȯ@�¼‹u/¥ ëÕÀÅIÌsH¼”`Í£.ñ]êkù$¤=Ž£ ¨<€õ‹º´ÕVjðIDAT¨\pp0Ó`¬îF]ƒ�L_ŒÄYy}“-�ºÿ4Õù/$1+�©(kY8²I“p`¢>ëc¬›ŽÅ Éý+‘¸+Á³iÉ)G-’ûßÁÁ`¢þäÛÔ�+ír�­gÓH/‹#vJ$êÃI½ŸùÇ‚{Œ¤îO%·¬‡óg6©i2¢'ž-ƒ´›ŒGqñqLºú�;IbÂn2š÷çmº6ÉOî"Éͬ#ây‡Øù�Dr[/¯.Ó2á‘L¾{Z.esxÏ.’D_X¡“D`÷åwO~èØ•Ùý_YÈÞX3ïŠ ROç`”¸¡ÉÜ9F2Žo'ÿZæJÄç×ñÂ7*²ÓÉÈ×ã4(‚+à ûÇë¬Ù™ßù ËQ†ÜÙ 7 8ÉdÈÔn¸Ù¬èÛÊI{LçÕ÷L.[—­fw7W�§�ÿ$Q¡2²ë£ˆPæ°ý¸‘¨9ÍKÉž·ŽµßÄR�Nj^N�Ìz>’ðAëXýqƵc—Ïåõ_Ì"ДOÚÉóXÜ£YöZ4Æ6Ò²¡³XûÚ\‚Ñ‘žžÃyÜ>e1kÆ gÃÏ7�Ò�ŽXë[5eÙ¸YÕBê/�ìÁxÁ±.Óž8Æ®E>1êK©û¿7ºÔŽ“�ÿd RgÀ˜€ùW/`ëêVG-ŽwÏAêÑl[}õÉ­;WÃæ õ†ŽÂÑ9Ǧ+¹ã êga>˜hq �ƒô®æÏuÁñîøkM5¶K›ºØaË&#×HܸpÂÕI¤ôv ¢Ò9s3f.Fw:…ä/IJÓõX@©;�LÄEiHû¼�k£6šU¿ZÁµžŒãœGKØÔ¬™ÊÆ×Ö‘tµ™[HDL,Ú@¢52tguèk‡þàb†k­¬x#©Y_¾0¬YÍ _#ùßœà|±mèt–þ:œÀ7_eÓ7"¸ì'»ï$5Çú�5�óEÝß[XìdüÈ`Óêµ$6»ª=4Xšýpk¦,cÙ7tŸ®aõ¶Ü¦y5áÏ­gõ¬L?´–Ý�MÖ¤³}}:Á‹Þc݃%$ýq‰­ï†{“1�ÔÌÅ<9)œt"��ý©F5QÍËøLgá#�X27±êW‰èmZb_]ÏÒ‡0ãà*v]Ð;o�¶ 6½¶–Äba‹Ö³æ{­#I ³Ÿ›K°%� «×_âÍ`ݺ<ùX2©Éèû~A?â^ø ³}‹Ø÷ñzvÅ¿Jà—HZÀê ÓIßò[6¥õ^z±!{–ÿF ŒÂqÂJ¤Ù‰Hî j|ìë_`ÍìF`Ó“êÏaÛ·†0t1ò1þ?ÇMKCÊÌ…~Hg.A¢R ‡ÃÁ,(ÄöÅœ�Áó‘� J±}ñ.¶¦ïGC~wóõVòó‹ *�á��’ÙÍÝu$s++žM%òþX¦FG³`UsËrI=˜Dò—‡ÈÐwól¿|ˆ}ßÌbÙÔXü>ßÅ�Þd„Ïy’ =‰ëV] ¸d! X¿v ~0�C蘆øÎi´6þdIej¢W¾ÇŠqQLöHjº©”¾`3üKHzóU6žl â”ûX°n3žœAÒªæ7È‚ps¢�Ýw‘Ä ­‡ *K¨èöüX2Û³¨[u³1–U6»ÀiˆŒ C]“ÊÎOs›m7’¾?½ccï¾EýtLÙJØÍî„Cd›zb‡FÒ�f"7—¹ãddMÇØê"¬I°ÌHæçIMA€žCÿI¥RHÄ8mã&ç‡Ë0f&_¿óÇJÆç)7^ØGÄ;ò÷ÿ­efîbIg­hîž@ „¾g« 'y3?Yµž]'+hlÔ‘òÑZV¼±“´ ½Ýf\Mý¾5Xÿgy8ò§V"‘ú­˜÷$v=[×ãJ©?½•º´­Ø.Ølêw`ýl+¶SoSwÎܸÍÙ«©i¸šú3�û«;ßÀÕWQŸÙ´-m+6}wšŽU”U`¥éšr X+sIÙ¹‘µ+³xõvž6øàRÖüiïü|)³Æi»ÞGÎVIê—©b™ÜÆã’&ŒÖ@a‰™×³hÖìD’¿õèHÂZ½¸1=‰C×¾ŸFÒÏž™7Z¯¦MÊHbÇk°žÞÃÖ“Í2s¦\æ‚o8á^‚Ý:—±Sh 5†ÁwiqVJ°™*©*9Ëé¯s¹• ¡» “kds¬dJA7)޹¿ÛDä™ rÎå““™Jj¦þúþ%þúÉÀ1�ØçV1¹ù.”ZÔnZ-p ¦]1æ’¸­g§.0?Dæ’UL �]Ç�´þeÑj5`Ó£+jùŽ[‹ŠÐÛ@«õô õEëE­úêuè­à×l“&`À2æIV nùzn¾€‹ÞŽ\Ÿ†¥ÏÉ?™Ñæ#Ö‹é´ýH«;‚õ Y¾G¹êò°þsõÝqZË!X®Þ"ßꉄ«t×'/®­¼Àne¬,È�)åtwܨ:4Žc›f¶|Rv´qSÓøÂT榰+7…]›‰ûÑ žŒŠe®“ž´ãmeÛìc=™Ä¡ÒX&?8�í·zp€/Zg°žÕQÒ¢NèŠ*a¨7~.�ÞìF«¢Lßâ]±ÔZ92EÓ?|•€6Še+Ã[¾žV Ðzbä¸`'û;…wO�%ÐÙFUQçk,H”ܵq’äRÓç?‚ý®`µrY�Œþ²~³‰W–CÜ´HBG„;3š¸Ùs™{ô=^;¥qp†£ ¹0]ÁhiõkjÑ‘~ð<úüÛ¸‰)��[¶sžtR�@«�ž ¹0ÒúбX02Yãga•€\Æú -­6ÉåV,µ–ö[r6•’ú|JúÝŠ•$¾¾˜Ä>ymsËì\O½7õæ[Ðõ'29r¬XMÝŸ—E0�Ø©Cšvéä|Ò^`×T~Z,ѓ t¶¢ÏN!å³4JºS [.ÉÉùL��eòžVmËMpË õ±bµµ,c7yãµÑbº‚¥õY—AŠÎHn?œ Zè¿ì ì$¸�šH ó.ÞË©ÿÕvü¡ÿ²U /³B°7nŽôHvcA »>Ha€G³–ý„¹çœÂÖ\ ¾}5`:Áö?í²{$®åê½n¿ï j%ÿà®vó�†jCãäÀZÞykÜp** �GZmÄh7g7hžs�;¡QÒBE™+ò¿|� i}Þ“®“†#{|ycl= Böøjlï®éfÖN�ƒ[Pc†Ö¦§¡¬Ÿô×»…Ü<Ü�ÑtMé&ýÞµ,ÞÛA!ç@&L�%vJ4áƒÔP“OúÁMlߟDzQÏ|tɉd|1±÷µÊû�\±‚ÜÙ‰–ùIg5Ô0vöþ´¬’J�“À†-bd¡ûìëc'Hà g¬Eéd‰ î`$ç[(}âÛ »/Ë`÷¡¬¨qsiº÷¶éÈÌÔàHb:±¯J#FÜÐzô`ÿ;u8³ž_ÁŠçg~‹ºõéró©DKhx`‹í~ááøIŒäç5…„¥¹ä”�fDh‹þqê»ÃÒ*½jÍL'Û¤&,*»£¦’Šzpó¶£’O4 ž_ÁŠ%±}ÐWOFXüRV<¿”Yãºû!¹àøà[Èü`ɺõmlÀgò‡bº·kÇIÈ–ïEõ“½¨–¿Š¤¿öZ¶4õ¿sÔâp—ƒ2ì�ÐL:rnÅâ5! xçýõ¬š�_u*ÛßYÅâÅ«X÷Qb�uT"鸅à¨Éh›ŸûÖÎ_YP8áÎͶ+à .ƒ¢r:Ûo·2�ŒBІO&LÙqqAèˆ}ygo\åPURˆUá�÷@-¤®\þ%•"лé¾Î@7s:a¡¶t§óºŒè%« ¯9LÊל×[�ûF0ë‘0dÆ 2ó®^l­d$ì"}ÒRfýt5ìØIÊÙJ,ÎÞ…ˆîýuM#C¯³žM%½2šè9+˜«LCg²`¹”Ñ¥õR¯QúM0¹äoÛEú-h¶~³›¤‹‘ÌúÞ2–^ú€]§+Ñ„Î`I| ífßÕåµl$~™Oì¼,[¤ãƒ=9\ñŽdîüpÔ´êÁT–ÄöÏãX¿˜×ŸS³=1�ó5r´¾�„Œ‹&Z’Äê¿´¡‡ñi™F£°¬Ä�ôR u¤oc½OÍp"§D£­�Ô�’nñ¨<9¾wÇ=ò‹v5ö[쪡«‘G7Ž‚­?ºë™8ŠGrŽÖ"ÏÉÄr¦¯3m §ïBÙtÉ\ÿï8 ùÊo�Ù€z=u>Œõb»;i_a:¶º$R¤?8„4¾š >ñaÌG »^mI aÁj¬9édÜŠžõz2ÿ³‰Íû“È(îÍ,µ•ô/SÐGÅ¡…fß =IŸ§1ãù <ùãY?NA‡‘óž$Zc$ýI�Ÿ˜Ü¦c÷'ID¿ÇŠ×,lÿ$™ �õ@?†„L *Ôȧ¿ÚJ†èî$ØÉ®ÀÎÑɵƒƒ2Œè‡Fãîh£ÞQ‚£ƒ�š‚äû–+ýgh™`�‚dR g0;r2Ú½»»5I±ÑæFxüR¢g_ßf-Ë`÷ŸÞ#©yü¥ObýZXüÌ\f<¿ŽYW·ÛŒèÎ&‘ÚÖ=c›ÞÙŽ|Ñ f, §q>Ùu¤å¦w£Æ}ÀšÏöß¾‡æÅÅÄ>·ŽØ¦ÍÆ‚$6þa{‹å˜t ëyO»ŠÅ®`݃€ÍHîÞݤM�EË®ÕVr?~�õÖe,~x1«›%Ÿ¬eù¤ïÑ·Ñ•½’¤¿lÀwÙbbg-%ZífÕÉü7™›[c0yIGO&Cì"qÃ͵±¾º‹Ýè`¤ŠCþø�ª¬ÉG¨ÿju[�ºù#�ùKl…K¯MÒg¤.8¨\nÜ.wi Q_Õõy *>Àú©Ü7GO/TMû”*:zæÍ�˜L¸‡‘ôÍÖWíM¹‰lºE­•Ö³‰¤Ä1+ åöʃïñ;/KgÍeõï›–ç³êÉØù;6|ÙµwÁ˜¶‘×ß1²tþt–þ|F³ôäÛÕj † ÜœÃàÁƒ; Éà‘ ~ÔÛj)ÍLâDŽ«£3ç1~ˆ3—O|Êóúúª(sîÜ9»Ëk¦¬fÃ2-‰/¿Àö‚n¾¸L�v /Þ. ÌÕ…ä_¬¼éø8™‡�ÝÀP‚¾XOe�L;r{Pû2ÄÓ sÅyò‹Ú_ùBæHà@Wtùè*;ˆ¬$j´¾x« B_D‰¾»+j@Ø’M¬yRÞ\ʆã·8²ÓıfãbBò·³ju×G8 ½IÍ„6°*(•Õ/nº­×Ší¥¿Ü0PX�ßC×0ß@üÝÀP¡G_\yÃÔIm6l¹¹¢žÐȾ¦X[õ€ce§³›²¶.�ú†KþS8ØEÞY̽YS¡ÇUÞNâ÷Öûèv¿“Ö½ÙÛ­FôsíÎüYËtä–}7®�Åùv-zo-Ë'×Þ•#lFôßÚÿþwHHè ÖÜ­l¿ÕA cˆ¬’CŸîA]åGüiÙùÝ êL•è²+{øü´RY”KeL/|wÙØÕ[›Æ&–—q¥ùÖ2j®À@•µ˜EsìíÅ–ÏÎ?¬ã| Y,z-´båüáí¼÷;ž ;A]™Áî-I$ݪ Ò#ÙøQ7uÖ›©?ñ6¶¾xSú¹$¼ó9½¸jˆ �g_Æ®¦c¨[�Œs�4΄٠:Ü®¬Å¤‰‰/…Öl:Ò>í»\Yef"»z{yªæ¼b�ÆÄÛ1±o5uÞŦíÖ¢ ÒDfIúû»+—¸\îwáêp‰ª«™9•w5Ô—TR#²u‚ Ü®òÞÀô›wíÈØ5"¨¡ÿ²/°k(ã¹KF„qÏNçè¸"ñ`ðè<%µ\È+èû…ÆAºª®”†Š¾žòD¡ûìžÏÿJÞWpã‚'rïÕ9Vë*Ñ¥äô¥î/%#‚ ‚ tO'jªåòé}$žQáìꌬÁ‚±ª³è^'‚ ‚Ð/t~κZjÊÄj‚ ‚ ýM]ÙPAAè$Ø ‚ ‚ Ü!D`'‚ ‚p‡�� ‚ ¢óƒ'„~mذa}]AAúˆÃàÁƒÅš‚ ‚ w€;.c§R©úº =náÂ…v— Þ˜±ËÍ9wÓr}ôQ7j$‚ BtÇvwªMÛ6ÙUî·kßê°üây‹{¤N‚ ‚ ô/wl`W[{k&Q–Í—2Œ'ttzÿ‘¸‡z\ÿ[ŸKù‰’6‹šL¦–”uLS�þŒœÌêË{ ®")ûr$mîïV½?‚ ‚ Ü:öv£çñúB‘·÷xÞnÞØœŠ±ÇªÕ ÁSñýAÔ—RþÞVÊ‹®> Ãé‡Ïà3BNƒî6ž ®Û/&Ãùû‹44•o—nÇÐÉÈÎaÐ8¼Àw³¶Su¢Äޱ�{ç—ñþx%Ï<×Χ2ØÀï6à¿Ò“÷/u®^‚ ‚ Üžì›îÄfÆj°`©mõŸÄ›áÁÃq³Uô� @­E5têaxFy_ß®‰{L0êa8 òèó¼4üw+9Ïý’³?ÞLyi'ž8ð «î·‘¹Ç‰dKÛE ¿rá_F3?šcÆ¥Gj+‚ Bg_Æ.sodîºaóð… Бr0§§ëÕmµçt(Ç�C¹ó3L6p� ‹P÷uåºéÞ‡ DØ”¬úªífV,2þq@Æ“3køÁÇ Þ/»uõA¡ot½��,œØIZøv_æ÷`�zD–ãDZ͜ˆ«ÿg˜ d¸ÜLÃÉÏ1ÞØI†Eâõ½Ñ¨}\p0•Q{:•Ò½g°X[Ôà>s*nÁ8Të¨ú"¹ýæ\�`ÜŽÄ5Ø W°ä�æò¿R¸RÙÍC“›ùÁ½VÌ.ü§�¾uÍeR‘9»š™1u¼¿óŽíN)‚ B“.·Hª'Äéa%#% }OÖ¨§”�¦ªÀÍD?Pß�Û(+•GÏÑzÒ>IÄl‚^Ÿ‹6dÖ‹ù˜->¸Í}–àŸÇ ”5+¨æ®5Ëñ¿ßô:jM>x.Ÿ€_Úah Cûþ“ýàR>µ—êPNžÍ°7àêqcùÎP 7q¯›™Y :ˆëà’’e „F˜ñïÞË ‚ ‚pèbGÃ䩨�¤în ª·TSy4Ÿ»Í€boœLg(Ȳ¶ÌÖIüðúa4Jã7ül UM‡R:óE‚ç>ÄÀ˜äÑ>)ŽÇË·–Š ïpñ¿�ÛŠ'. äE¨l¹Oïe�âdù†‚×¶Puµ Ô?†¡o<Ê]³S©þkî ¦½üƒ,x!%)ߎ˜Ü&%³ÐB,DÈÕ¶ÓOA„;C×2v>“‰)Ãx2‰C¦�úNݱÓ="ðŸ9Û©Z7­ú�ÆÅ,Ç’¯u¦/Qm’á1°“…åú}$}Ó¯Ã: šª;‘Œ¨¥*«�‡¥8õ–ÖC ¬4ÔŽ²ÆŒ�£G `£Uj ­,¹°R_[Gƒµ±ÌU–³§)·åc©ïú™­��š¢ÝI[RÈGÄ|Ä‚ ‚pçët`'ËD-è>M"§‹Y§[É–�JivÓ­›@kª±� мÝÔ©3PZ…Õp«P«�IÀví¸]�¶š$ÎVVEÞ\IÚNá1ûßzhjö½¹‹%�Ô3Èèpâá´n60)(ì¯]!AAè1�ìc§&rZ8[>‡¾êwsœt^¾£ „Žlቓ,yù�ù6[WòkÁwNîÍÊyŒÄiPË]6d�£Æ¤ÂåÞ‘7Ä‘í²Õ`«<<�uð¤Â9¥Ô1l°i?I¡~ pAÎ 1pBAîx� ì<&;Z�õlIEï÷jNpù¿e8ŒzˆÁ?�ÒÇù¨Hü—E¡´pùË‚¦‚Vjö¥br ÀgÙC¸x ‰÷òp‘µÚgY*%_” ™8—¡K£qê�ÔËÕØ<?Kг£Û¨H5é4øFã·8·É¸ÞŒ¼õ¾sŽ’ÿV4fÇŠMDhÈ<¥ °³ï� ‚ ·�N5ÅúM�%Lf%ýð!=+†¿m¡P¹€»f,bøŒÆ­ •”nØLi³h¨!û3.|èÎà>@ào¬XN~AÉé‡ðÔrŸWþï]Î[çâûÐl†Æ4ÛG™ŽÊ½m/aú÷V.¸-à®{eP,`+ hy.—[·(øÇe<SË÷Ô*þq“µÜBï­%Ô¦àWÄäÄ‚ ‚ð]à0xðà®N©Ö/©š†Övv´€Æ•¯kãÊe4´×Pé�2À‡šj‹:x ‰ y€7Reõú2L¥]Á°téRÞÝòîõ �üû�Uð7oÝÛ²íö�omàÇ?_Ưÿ¨ç{ç<¸ïme‹ÉŒ—/ZÎÆ�»TAAú/‘ʹª²„ÚÊ’ŽË™Ê0eÛ¹ðª­Ë·ôx÷¶Køc’�÷6rï.ü·�𿯆™n þ²MÙñ ‚ ‚ ÜD`w[r ùcžÏ°aRB[‘£âÒ^]+c_‡#gAA¸SˆÀîve”²ï¿í|yJònauAAè{][RLAAèwîØŒ�ê[CK©Töhù;íýAáìî4‹ç-îÕò‚ ‚ Üþî¸éNAA¾«D;AA„;„ìAAî"°AA¸CˆÀNAá!;AA„;„ìAAî"°AA¸CˆÀNAáñÿ˜ zÛ·—IEND®B`‚pydantic-pydantic-e28e879/docs/img/rich_pydantic.png000066400000000000000000000311621526274674700225740ustar00rootroot00000000000000‰PNG  IHDR@Ô-!º+PLTE)))ÅÈÆ˜rŸÐ³Dh ³˜¨KÃÆÄ***//0«­¬XYXÁÄÂ--,LMMCDC†ˆ‡SSS667.-.UVU545º½»”–•PPPijj,+,8EJ++*vxwZ[[�‘�•pœ|}|GHG™›š2/2´·µlnm½À¾`‘¢—™—���JJJ´œ?ǬC888¤¦¤z^sts112±´²ŠŒ‹·º¸qrq~o6ZR1̰Cqe5…‡…VN0‘“’œŸ�opob”¥pqp‚„ƒ‘m—GL2�cOfB9C¼¿½MNNEFEf�¯�c‡K?M07:Œ{9@AAŸ¡ ghg®±¯64+GblG=I?7@C>-uh5E^gW��:;:NH/d™«„’D343•‚:h ²YI\¿ÂÀ¢¤¢xzy21*§©¨abbpWtJE.=<-87,_`_=NTÀ¦Af[3GB.BCBla4^ŒœOBR3=@???®—>Y…“QRR===\]]UFXœˆ;˜…;�j“LkvdeeSDU;5=[c8Pr}PV5Šh�pz?u[z¥�=ai://*kTo`McAD0�œH†fŒ˜§K¢�<233bX2¹ @?RYJhrfQjBY`Rwƒ[J^W^7RK/cdcˆ–F[ˆ—–¦J]T1Tz‡EDE‘:…u86AE^La‘¡I}‰B©“=@U\js=_�ŸD;Fx„As~@>>>en;˜„; k¨Á0IDATxÚìÜMOQÆñóß o ¥¼H£’ш¡$)º!j$!�®*n]¸°Änܸi¢®üî»ê'èìeœÚC;ÓÑE[îoӜܞ{n'™'S˲,˲,˲,˲–ÃCC–V%+–e-¯DŸÁ–,)—Ò§¿e-½Ä[à^þiëm‰ivoŲ¬%åÇòW*_yªOé“ÄÒnÁå{±,ëŸs>ßËDr<%–/Àžü�ÎðT$Ì!Ô$ž‹+8KŠeYÿš>¼•‰ àFâÈïBY^Ns/W‘—Ò+—Ë‘0îy¾íBG,ËɇÖ“À”šòrVá�¼¤rÔŒ}ž °´/�,kN�N>¤þ›"ðùØÌÀH~p]¯¯ý\ÿטhAW,ké­ì@i”ˆZkkétQŒÇtúN<¯¯7:ÝãÂ…nº�ZÖ/Šétº òá¤Û«Ÿ€qæ�ಭދnêzá~‰B:íuߘ}ŸMÀ~ÚÈFšcªvÁíl¬Ê“öæF·Ó7kQ0ÝËU>OPõ«ó¨u_öS@Ëz]Çøø5b­¥à•�à†ÜÜÇ3ØHzõ›žîºWVgeÃÁh<7ãÌ+á~ä*,¬õ~[äD$¹WÞò”+Qæ§p^y'vdbìàÉT"àí㨩~uµîË;°)–em «C0x"ÙÊX#q„'ˆ�:FÏgÑÚkSÅÐŒ3¯2u·õÞC‘ä«„ªõ~=p".d²¦Üdê‹D™Ÿ"�9cDà6R3jª_�G­Z“v˲$éf€wé°:Zºp¹¶þ¸šËTeâ÷âÂu`KŒæç*†Ó3�mÑÞ2• ÀóÖx5?.uÐìÂÖ07`¨j½_ò ®Ù ˆÑÎfG°“5’áóýl5Öï¸ãâpoØnìíB9RAæ¡8üÔT¿:�ZB_,Ë2²§åóð:<˰-ùdðŶœÕ ¹$d†R&# Ôÿ$cÌË_%°2|=U/ØoÕ�Ê)œ&ÔK‡(óSÐòƒðXfN %·xZL^AMõ«ó¨õ@Ų,ϧ}`;¼À  {#�&p'Æ®f�p"RfGØ<˜ú€1æ}ðþB ßr˜¸ª^´ŸËÄî�¨À Ÿ?»^e8‘™5؉€#39\oկϣק‡:˲žä�íð:<ß;gîÖôÆ£61†ÁôÞ+½¹8Ï?ûk01æå½¾™âõ[&Rîp]Õ ÷[IaŒD`øüÙõªøx¼�*e2Ð…–×[õ«óèõÙu¬‹eYža دÃPÖöñTÛb<0g%„®üÒÍj ‘ Àó—°&óš;]]/ÜϨ`$u†ÎŸ¿^oý,ìâ @¿­< @կΣÖ}Uû³ –å+v õ>´@ce³:À¸òß à$„ Q¢x(³'¹óÎàZæ¼9Åó ëÅû%Ï0ú:Ãçëü° ƒÞC¡1;PŸ êWçQë¾SûIJ<‰Q T¡uhVÒW@öént^Kàù8†�Ó·Í8óŽ 'szà ;pÙPõ/÷3œ5€¡óuÃîiD Àñü�U¿:�Z÷%/ÿùßfY/b«…QmF­uÞûÁU“™öà©Î›€÷{�“¢h°ûèßÙ¥XóLã›Yy ôäqÎT½p¿ô$ [ð®= œRBàõî19C‰µ òe|�ÈõùLÛQ@‰&~|‡/OÄ%Kì±|Þ®U‹ÞC!Q;¿êÌPkÞOWÓ©"<4•*ÖnáŸCŽÍ©r:€Ösˆæ\¯ ¨<Í‚×ëŸ2ñôIæO5hÅì,ë¿§pLZµîçÞéÁ^§©Û!´Ìÿ{,§gÀ%Ïçýðç”ÛJr3œ Oš(ìWÒ,W($í˜ö-Lµ`º¿Þ²Þ>`9iöþ¶ys›s¿•Çï¾ü‡¹+çÓUîåv’‰òy?üylPò*!>ªê0péƒJ­ï•PBˆˆïB™ôXa§´›P]B|\[­1½ KÑ"|>–ÿ…ïA#L®3B!„B!„B!„B!„X¶\ƒ–&;º(Ó‹³å¯‘uëGñ¹®aÖA––¢¢^y{Ýæw•ŒÌ_¯·ß­[?Bˆ·¨c¢AKa½z1{tþúX·~„op  V¯÷Tž–"¶�Z~ŽÈò£r˜Ê.x?¼¾b%Ò‘q”ЋQ"FKÏÑ�å/F8Zð~x}!Ä*88NGƯk'´B|F[¯H$Pˆ5�(™n,*Ž€c l˜¦éuÎN[Ù òäܽÖùCgRÎ4oí¯ÇÝÄÆýñ¹MÏ/›'ܳ»—je“O°jîMÇòùú_ô£þCªuYÑë—÷scž5SãíózÑû¹Ò?V� ÿp}yg³ËöyÚð÷Œ1wí8#àÜÑ‚K’ _´2i•!lhçÕÎc”¶ŸùýD¯Ïû ÑûHgžÍt—EÎz~HN¢ßÍK€•Ô20ZŒÍqÁùòl� à €„v^í<†@iû™ßOp�è½Î gžÍlIä[P¥ g ¶^†�.g@5¢§�W;�!PÚ~±ïG;?Hô>>5,õ#Óüêzñ€¾øª>½6€^|0Î�‡Y° ­�W;�!PÚ~áz�è/eŸ¸º9Û8¿!€—@S|°!Sàðmt€¤­�÷�Œöc‰þr¥:”BÍ<¿%€ ŽDiýi°œægÀpª�7.€®-ciû½1€j"š½Õ ÀvÆ<¿-€‰&°k‹üèߦÀ+E¿™Íi°²,rç-í¼cÏS³€KÛï  ÷'¢ÙK¸@²˜0ίàM» ¬·ÛwáüjÌm6÷Ñ@}ýWÏó:Ô—QìSõb§ä ÔÖÇ}Ï+Öµ~^ýO0Ÿr®íß9ï|ʹ½³ û÷ç�"Šó—>P5Ø�ˆè#`‰è¿ÅÑ‹$¢ÿVfóêìoÞ�ˆˆˆˆˆˆˆˆèõP•©Éñv‰èã°Ð-É”áV…ˆè}äúÇ¿• û €{™’u`ƒV!¢÷Q³€cù Em™–­:p~$DDï àB^ï À¦LÏY8åÇŒÑ{°+h®I¬ÚæbNF¤7€¬LÓ�  !DD/¥�óŸKäEû!CÀ­ÉT唄ˆè¹ iã<;zkIàD¦Ë®-!"zf¾ ¸'¶q޵âd¤÷´Ø¹ªIà“ã¨ïÈ×ýV'÷I”ªãËHèZýr+Slx ¸uv€¦£¤$pœo�îïÛ<:Î�–¯¼F«�9“ÈõC«ñ9%1×ä€.ÿ�ˆž[®@¹ønœãÌÁºLBq«â+°æ= Šÿ� ¾�‘×/5¡X;¢d0T”@Øót•ðY|kMºÞ h«Zù1×�¤Õ¼&DDÏ­•XÅ„iŽ `d#=ü Œ°I7j>ÂËF’=w =IÀÆp7 `)‰È‚(öB»¢_¨î/'"z!QLØvLs|÷2µû¢Ôn P¬Î°å¯.•JW/X¯æï-à^�[©Ô PN)ƒÄæ-`iB‹ÀùJþqa1Yß•_ç³³¢”ôëÂåBD¤ICÉöLsL÷æEäèK`@òP²HÆ|x}kðµ=î&HÀ÷ Ì냂y ,ŠR¾è×ê»BD4ÆeÀúëg=P9`ãW€öýR•c¸†l_`ðZÜM  u-‘ZôòC sýð›ÇBD4N: \ìl à €DÔwY䬗žÀ‚Àá…®'ðÈ‚rZ,‰D—ýìûtE¿~ä¨Ñ‡saàbgS�ô¢µ$À/1´Ï�• ”•&…-Q0b^¿~¤ÀŸ!¢±>5,õ#óÀ*€t ïí”SàjRe~­Ð…Òï�ÀŠˆ~ýÈ1o‚Ñö‰  ›³�ó¤:@ÒžF÷€Å¸Fæ�>€Ô`±µ,¡ø&Î�{!"z®T‡R¨™ç‰ì§òÖº¶ í¨qudÿ°\•0€¡­î`NX3ð °…ˆhÔê�`;cžãXY¹s�ÖÛX³€J'G†êƒ?n" àýnJ”^ôÃ{ÀvZDòOKXáM`"Ò$\ YLçIDßóÊ€u-ÊM» ¬·ÛwQü<ÏëP_ôú@s±x‘¼•Àî³§÷€îÁþÂVÏaíîäÍ‘ÿþ÷ÛIñnO»~$ #DDÏ­á"ež'0r ¾,2ÃõC1ÌYìI ”FÛùì�."E ´- X—ÚõC[es"¢—Žlãl`pSÖÝ‘@%¨b(+JøðRBKM(å\8¶kM"ûIÍöCxs8½X†¯þ4Lô… ¹^Ò®Êg� ~2M�~$Ÿr®mùó)çöΖHHf$’Xp~ȨǧZ“錓Z•8v°ø("Rf@™²­càüP¦d@[ˆˆä#Pë°™’,¬!"R>Beµs)Ó²Üà߉hàC�ˆèÈl^� ÑOöî쵉( Àø9“à}�ƈD‘Qn(ꃸ+ bÅ-b1Æ׺‹"uK�R1…€âŠ"**æ?ôÞÉLŒ+nóýzç\òüq›4·øßÝ;¾T ¹ÛTÎè;îU.Зæ)ß6?éV­˜«\«åå�¼Vc¥@¼Œ8Ž3.Ö yrå ,ô¯º€˜ùܪª3— ÄÌßpù4Uåºñó£¦óÕñZF¾IÇk9ù^¦ö²èïíQÕ£«â&ÀTÃs,ol@|å¦?7Ëbm÷ŸëÇJÿ„c£@ìD˜-8!/%ÆU/‹b<óÛ;bÌTÕ{± `Ñ,wÊé|ÃóüýœÙ÷^æª&ƒ£®�Ë�vüšæufž3E¹@,E¸Ý,ŸÄHåÜðÄ÷Ò¬ãf«êƒuó¦™Ôx/;‘^õO€ÒqÇq¼¬YsfÿÔ·m)W˜i·7b'Àœ]�;�ºøÒfÍ[ž ^À¦Hº^Ï…'ÀK±  ÔGßhKŒ²Óe´Àª„Ü£ª:K v¢÷À˜çXÕ‰lvxU:öªê9€Ø©™š5ÄÈš‡A ¸­‚Ýö[é à&U�.;-'xk¯þ}éܦ™ó탡—þYW«ê̬@ܤ¼ t§‚£`®V«`æ–YÁ¾¤2ép`šªNˆûw~Þ³ê »dÚ_iŽ”‹þìŠHÆr,ßjxÞ˜é²MåöuWUuoJ nÒ'4bÆú§£&VÑ g¯ì30 �ùö¸M vÒϼಃ`t|…Ò–/t.Gè`FB›UuÊ\€øÉ–Gª­tWóÕê�\w#‹ŸjuW&µXU§Íè?«ŽÙîè?©ªSø$@_Ê®ßtR@ ]¾þà´L0ç„ÀïìÚDâ�Lð!±ì‚Àîb"‘ø,ÜN$ÖÉ$Rû‡nÜ-CéÐЖʖ‡V…óþ7[*•+O ô<÷VâüÛßàp%ĭ�ɶE%±ž‡óÎa€Þ÷pŽürKCI# àþ#öÙÿQ)ÙÙýyçG€8š,€ûw&»xß<ݸæ²É{nó¸%™¼ŸJùçÀû=íðŸtœ}¼k×å3“p‘=ÛU:”CCw³fyavÞ‰Qz2Ûß6ó€^v0á[&¡ Ëì¼61I‡“ɡҢ €¡hð†Í|E —]œÀW&}VÀU³:2b]»& à]³óFÁ¯ÆwzÙÃÓ§O?î àsú»°ïðç0€K´cª„¢|Ó¼ìð‚ˆ‡¯ìÝÿOeðÏÓk¼êꔊ_ ™UQqeD-LTtq¨Ðâ”ï �°9†¤Tª™,„@Ø’e_`°Ì,ÃÁ’‘™ÿ>ŸÏõžöÚO¯\—›û¼~Xy¸ÏsÏݼ÷Ü—ÞõæpTßæâ!3_s€«^Ëo2…«€1Æ\Ï€SòÇëUàïdý`€>üE Li/НcŒ¹ž%ÃêK!*)€Aãˆ7 ¦ª�dÜ+ucŒ¹�%5m6/¿\y]· ÀÙZ ÕæÆs9KÞΠós€k^©òqÈ_†cŒ¹^þ!ðL™Øå-vËKÒz ¬ëÀc®”¤©¤Kfþ|Xù°’ Ê¿5P‚~$?ÎWÁðÕÁ·Ÿ> Œ1æF€–û¢ÃF:¼²–¹£*Þ–Ž7FKQ0| ¤ýÀc.Ó‡;dÚÉ� óFh­ãȬf€©�d2Ù†�¿J¦ûv¼¨ÅKA.iKoÖz¥ �ÔQôÏÀc.sK˺ Ò@�†l°Ê›Ó‚ÀÛ;m^%郌SBzcÌe´¬Y@£‡ðY}švŠHåàº×o;–‰ÀxL>!ÄÛÕÀcî×Ù<à‡Î_Õß5~rö !NcŒ=„žbßÀc¡ç…8Œ1ö0zYˆ×�1ÆB�ãÇ߯cŒ1ÆcŒ1ÆcŒ1Ævõë)¾°îÔs§øIŒý�è ñê‹ÀœxAˆOø V†©™åQø«<¶tÂM�h-w{ôƒü|ç^Bœüsh¬IÓ–Áeæ/Î-�ƒ½qÑãñ{€·ç!}Ì‘†o„û>Æœ™4�å2ÇdHtÞz¤‘w{~Òa0Eûc-ñ–t˜ëé–xíFdùºbé³Q0¥îÅã÷p¹C—ûÓñ¶xzUÈxŽëÉþ8Aëiÿ¯B|éÆÑgµÄ-øÏŒõuLíeàèçΜhÊ~ù5�g®¬¤í©xUñ ˜ÆÛ¼µQ3Mnz3ú³%qËkëõ³Cæò… 8²�ÝÑ”FÆ+¿žî�=RoÛÿÏ“Bþ6sl¥þ;švu/§F.©ÅÑr¿ò=HÛó‘âé7 £Ëˆ3ãŸx$ýfö뀢1¯¡Êì`,6–Ÿ'ªÚÔ Çad¼²ëéþØ£õ¶ýŸ_4bÿFoøÐÀÿ%Ü€åxcŸâ ë+™Ó)½HÞ¸}:¦J‹Ž‰ÐæµL››¾à†z•ý®îáš¶ã ë°+2^¹õtìÑzÛþú›Bˆw�±"üW·;Ž4«|j4@VçDxpv9¡iÚæ \4ܾ6ÓðFcc'HÃ��§Í6œžèغ2E57öiZG˜$ãÛv_Ÿ®ÉN°ç̱;‘š�â‹\˜'Ëí�;3íßôõÖüþ.Ýž/ð¢f(ý±³Aù±�¹Ò&ÜÜôšS¶ZLºx6`vpjä3ßÛÜ»Çþ)p†ŒWn=Ý{´ž¶­SÀOø, +âVB3Ô…W@ê5[ ôÕå½4ä�¦5gzô¶ùFõ#f{¢ÉXÃhÑüÓ²Âtübü#´hNk»'£Þˆ„ OÎ<z.zÐÅž¢ËõP¦Ñ†£™5‡Î{¤¥‚þ®Üžg„ïÑ�ð÷0+3Ǫãê¤þ‹æÞâ·¦‚aÁÊÝÅh�=2^Yõt¡õ´]ñˆâ0Vh´IS@š,À)ÙÈ”LLV§4�¶à/ÙTêÆJ¿ƒi¢èø ÏfU‚PcÎe1€³%ON+ é�Ù EŠ-z ÇZAúçqÅö<-„ø ákHoš¯li Ê Jƒ”JY_cº�y¦ÎÆ`wx„ºÝéZ�‚d¼rêéþ8Cëi��_Æ mɤºQ=<ÐÑ4hettôJ.ý2Ÿ. Ãè²üp3Õ²D»b€Ë�c[Æ‘žœ”‘š˜”VŠŽPd=Òuù§4ÒZ¯η_kí9†AqÂ8þŒÌc|D"‘¤¹$t½æDH&’N–K=ÓÓÓù�sW¾xBþs†ôÏã†í©Æ¹Ì“Pï¬ùÒ¾ZœV¡Zúg †M5EJ®.ã%…/þ»Ù©ñʬ§ûã ­§í÷„c…fU²u®{Qú¨93k”3¾a3àf†3ŸGlpÙ/?ïÊ:AÈø¯å`p.4úRæS‰ÈæH±sj×dëºü¼€ùA–›ò§Þ¨­À²c´¿•¶§BH¿C�Uuag>øçŸÆ© ̽x@*®fˆ¥m{s’�û€jœ¡õ´ÿGƉÆ …ñEè½`"ˆ3½jŒ' Bxfpõ‘´´§p» ÿÀ;Y?àüÏ~Ñ«®*Eh È€ Íߎ8¬ÂÉVÀ��Cû[¹a{>ÒO�χ Sà  0ÆUàäúBo:9E‡â›iüè¿O¨öÇ!ZOû?!„8ŒšlÒ¤«áI€êG톄yçüw À²ÃJé¤ãSÓ*7r�Ss§þââœMàðè±…ð·eN§ ¿ ·§BHßCž`,{SË:þå§ñVu�¾[=Ïy=Ùýi=m#ßɼç‡énzsƒá: 0€d3Gú¦VÀ6o�t© ;0æì0¡ÛŽÿóaåÃJÙìÆ°Îuùq ì$øÇ�Cû£îöÅ‘sòÓÛó~8Xð÷¾–—%x\R~tÙ’«V!㫃o?}ŠÓ[dáŽyr1¹k=Ïy=ÝŸÒýi=m+ß !¹œ·>ÆÐ•_zÕ3§hWi—'WVü`€rêÖa”åpVŸ®Ãß5†×UlÆ'|xp@¥yûÉ3="¹ÌÐó2â<ÞHgô¬ �å‡ôDZ¤£—lOÅ>œçïuüý�÷� Em°ª%ïÈBÚ_âø2éß=ìá žŒç¸žì�ƒþ´žöWÇÇóÖÇOÉgæ1šþ꛺�P×,zÃáp‡lÈ� õM”¸ÔLÐü¬Ûê[Ö,¨ ‡q}½@™™™¸½u·©™ŽOaÌuÏÏ™7WÊ�ÐtÍ•Ih Cè̵ölWbB-µþq>Z‚"˃­™�禧#•$pŠöñ n·lÏ{Ö§ÛíxQ‹!–€è&Öæ�ºË%µ‘L&Ûd«6™î,èªõ¢ ¿%ìŸ/�Âõo¶¨ëª¥êÉxåÖÓý)ÝŸÖÓþè)!=•Ý_~ž6Sšë4%\ø]µ» uÎhJ_±lÖ€ÊØP™ºLǧ*æò¿zVïÉ©CwÈl_)‚-C¨‡,Ïÿ.Ú œ¢ýÏ�·lÏ‹û,'ô»¼Û ­™­{—Aªòæ´dÅW!ë”�;j}CëêÉxeÕÓý)ÝŸÔ“¶¡áe!Äû…û˘ÔÙ‘ÐÐÌ„:C—5 hE>úåöàUMêÍLß&ÍÌôèkÂùaßDî«qÆEݺ¾©k yuŠŒ_Le»G �˜�£_ó Åîv̇ŒžEš›È=ž ´TdyþÓÎÌ©À ªÀ¡ýÏÅ}îÙ<„{äÖ½>@ãµCW±@©Â@ªÅÙÖºr|Bˆ·«Á®ûT9¨'ã•WO÷§tROÚ¨Ÿqráþ2–1<Ð8:f»lÀ¨·ÎÆœhÒ²þÒË@ÍŠp¯ß}ÿ[Ø+/ ñº›ê÷¸à­÷®�_”ΚJh‰p5”€—¬øØØ�Ç�¿å¦z'ýÝ´¾¿Ù»»%¢0ŽãOͥ앢é¢è=ƒ¢�è�½‡htMˈ¼p$-—2ˆ�.*¢„¢ÚŠ¢¨6,zƒ¢þ¾Î3Íѱ£ÛLØùû\$ÇΙõêËÌÎ:þoÑDÝxcÔ÷EÉ—DvÊ"ذþ4[¾ˆþŠ‘uGN³ck †S̶¨¯zãV9ðKþÎÕ±ŸþŠ‹s\+†P¬¾-)D²Q'�zVß­à_!‰×üpþüùËwÑ_qü˜üás@€auE°¾•;§�ð˜{ýp y�Œå.]M“?éñÜÁÂÁKã;ýÎ{y°P˜xü€<Ö!€CŠ·¼¬^¹òPLSO‘IQ�žÅž-Øûl*ôÃ&Å|¢æ§Î"€àlß!¢h„úhÆh֘΅˜ÏŽ�â¹Î?…´ŸùÎtg~ê-·„È’³À±T(H¯‡xðÈ8'í ýZú ÜÚbdÄ9¼Ž€ `�+‘Hì#ÊdÍ7u‹¤|ÂA™šÙÚ›Qù_¥„Ñ2òäªL™fÝî0:e´Ì½‰’¿nâs³‚ïÒxîê*"zêì�áCúÑjg?3rv‚÷ä}Ón\QHQ#)¤<N8â¤ÄLá0cí§¿TËzwI Àéª{£é#€¼¡w.tcm4ÿœ}Ã@€!WJ¼³ºÛ8Û½ì `ä–p}s¨$m’ž'»7I*wÆy’v®h[¦�]¸@<€W�ÝpýãKç« À�‹ ¥A¬’):53eÙJrÜ,—ËS@Ï-cÃ*ò¥¬ØÈÇøí)÷z:Y³òTßȵÏc¥¼™,Û2§mž@%x_ª ù±êl7A€(ŸÏWeÒäË9úÁäþåiR${m”þPÓ½T.ºl”øõGðÊrq�»Éc÷Œò>1«Iló à£P€×Ü4^�?ƒïMÀ,—«Ú#€µ�ùs>ï '�ET—S›Þ»À_Qg¨mÍž¶‹ à/È‘O—Ü�q@èÀx”ȪTôr÷Ä^fð{ÚFéÜ»ä ๤�çH7¨®r®hÓäÓê§…�4†€@“\ZkÂ#ª�_&;dÏ«ÂQ,;¿@ÙTùŽÆ©G@„—¤¢ ÀÐÓhø `’ô¶´RtºÒ¶?õ;ÀÇ!iœYÅç€g@€¡$€yÙ½(yè—À�N•h¢ÁÛ ÿv#‘_}»í*‘¿ùÊ_k쬀á$€–bz†Öe -’îs;Jqw|y‡rh™ÏžÜ²{ùŽ™û÷˜˜Ÿù«¢'É|øH  g= … ä°=¬Q¬¶¯WÏ ^Í!tƒ7u%£ž)XÿÍ› æH gºþ#ægþêBêRÚùÃi)­л†AW3Ù¸÷³Y[� Ã0¹j†QS·�ãFÝx(â¶@ç`ÂÜ;)Ü–“"ù-[oUåØöÀ O'&&Rüx«‰KãÔùµáeêécˆtä.ürþN>rêÒëM¼ê)iô®€aÐ@NK¸ãiÑö�XV(µ^ÌÇSÜ×ä'€«CÉq†ƒ´`† `åí¯çL…”‰=€Þõ0 вaZË�»ʤ›Ävö)K¶;vl#°{=ÀÀßn¥Ü4i;é1_ßN­øókÔ ¹…üÐç Z0bQGŒúX?gÎVòKÍþã#]ëþK�Ý5€ùÁÖƒoÝÀäý‰£äÓçw÷î�nðŸ`6Ü ‡oS›uÛeS'Âá qªÜf×FK�?Àlx_£6;ìº1€Ž†¸÷ÞøyfGíµYï@öêY°Ï0>wÇ®T‘^ ,€w+öè§Wò$Ðôy~–I$¨”0ZF^åjÚ0[oê±h"aŸ3Zõ¨Uk½É¨%5³µ7Cý}éµNcwž}úzÃö°9úõæí;ä°GG©9z›ÇýHÒYÀ÷úñö�O7ŸÙÝŸ7A@Ç{zTË3’‘¬»»`nã7Šy/¤ŠÓS8Ìõó)¾Ó7€Öû0»÷5¢xí®óÆ5w|oT�û�} óÑ�G±OaǧX÷çШ$m’êBÙçPQ‰ŒÜR£oÄv®h[F®7oZýhqÝ7Ýà)¯*ú¸›¯d9µãIïÕø u}€^läcSÂÝĨt%›/•yoÌI7€ß2rNõ¹!„ID<ѰJ†Ú7iËœ¶y¤Ñø•Ïí,û3ŸÀ©à�¸Ó|Æ7I:ãÈ�{<ž!€<ñf�ãÝà“ÁRéö=œõ}gïþ]Û†‚އuë&º—VC—ú^ Ú³xH†b2iˆQš¡ �„1•ÁÆ¡ÞFr1Ø4_ïÐsjxVlÙë}!åqã—‡ól)¥Žà (¯øï ñcÀ¹ ׈-y!ðO˜—”g×ÀÞ× `�—gò\¾ß˜ŽõÇæ¨Êν\“W¸!ZÛódÎ ØHú¨”R‡>4¯Ã¼‚’»Û2€€ ÙíÝ¡ì #D Í‚°wŸ_|?@ XÞ–-Lð|¬d÷~} €²`cÏëQlÂ!¥”ªf¿Ø‚ÎÃG¯Ý® w;¢‰èA &€YÙ©²\�W8:@Y°¶æI÷()QJ)U'€-�½Œq‡ßÞl}hÀt»1“REçpI4²ç i‡þÌ‚RªN/=Dï)nuŽ`»Îg€Ó= Î`£ úkϓζ@)¥j�Ãç]òõ¦"€_¹{5èÎʰ %`¦dœ@)�oÍ“æ(¥TýÊåTPà#ìøñiëË[¨&½ŠÌF-4‡“ûgЙc{^�ô[J©ø„è9Î"6öøs)™wáYÆã Zp¸&\›?(ˆÒÓò2J÷Í[ó‚_Ý¡vP)U/€]äÎÅ÷d±ÀòßÀ^ó¾9G/„Ã&9MWɪ ¢ DFDë,‘ \pZóѦŸÑÒ±æ™-f‘f邊”RªF�9–Úˆž@v…[1–ÐÖÆá,©”á¤ù*°ç‰dF¥™þŒRêuÄ;ÀXðŒìöw8Çg€±'l"†µñÄãdí‡8Æd™KŒ�´�ýÉËi–ÐohÝÛBb³érÙó ) Ì×úM8¥TmQ·» ¡B¯ÕºtáXnèOư+ò'œ­z^Ï÷C=ø�=86 ¢v¯¬-ÅÒÎ)Ä9DÜÁé]ãÃ%€±-Ï\­É¹@C[’û+€~Ž7ÉtüìÝÁICA†Ñû6I\ A  Y ’�$‚pmÀ…k;° ;I�¹SÇN3s™Èó}ÕüZ@žóOpW�n§öPyæÏÀ×4–€N�D׳.à}{à§´ï Ð{p_�–ÀS:v·hã.�êd„ZŒÛÀ�ç·û7û/€<[C` Ôjj«ˆóòØý;@œ»õøÄÏp@žùfL@<ZNí­ò¬{ý÷Y�nvû_€K;wŒÛD†axþ†5$Dk'FXVP‚R •É G@‚T!µÛÔ”æ \ƒ+ØÇÃëPŒâ©3ó<Ý·x¥Õî ì;@-¨–Õ@ ZTK�j P-ª%€Às6Ìm u×ÃÜ@ D‡ã»&·(ÏèClÜÿÊm tzÑ߈6ÈmÊ0Mÿ Î"âêUn P„Á£uô56Þ,r[�Ìwö·�ñ>·(Àð¿}àöm ±ØÙ_^ö�Û·(Äí£urý"".or[�tÓôWs7ŽˆÏo›Üö(Áržþ8¿Œ�w³Üö P†öG“¶&Ÿú·Û«ã”öo'A€R´ÝaÚŒ#¶Ç<öng��b¼^.š´u÷Giëéí6  ?Ûn”Ü4éÁ“Û}€@IÖçËï7B5Z¯Ún6@ B«uj»“©õY­Öó¶›M¨Î&€}oG�•YõLí²›6Ôä7W½‰õÁ¼IEND®B`‚pydantic-pydantic-e28e879/docs/img/vs_code_01.png000066400000000000000000000200441526274674700216730ustar00rootroot00000000000000‰PNG  IHDRç$»Mo}PLTE%%&/H..!EEE(((%&%aɰ+$ ÍÍÍrLEÔÔÔ8¥Üû0Êvg4/-!X)&&>lK«©ä…oˆˆˆ%%,9F""&?Y¡\Æ–"%SONA�)ÆÃše-#@"ß�p$%KL:6'2b¯�nzÊô*V} C’ºÆÈ‘z(26®¯®Bd+3&$/`ƒ! ]2:!e�Î[®S»«Hn5Á¢pN%#^Æ¢5[•A>>C'&(Y´‚¤Q7|D0n7(—ÕùnžÀZµ’Oer‰Ñô\¥ðÀÄÆ˜�¯E–—Ç·Ž5U*t²í…ÖèO‡GrªàNb�]D.ŵ0Q§\‘’,E€9qzHJJÃrF*=F)8…\nu"$3D7*�½û´É°ÒÓªW¤a?fE†M0%.&V�Ê—¯¹:‚š·”?…ˆ¢’rvtćd¹i_#)8P•g¯‹s¶çl{vñ>¿}ŸßàhN%“«é;™ì>úœcŒôQ{��¦ß)"Í|Y^ #h,Û^Œë¡û¹�7™[¨$˜§�[zw(}CjMÍÝ6YnÏv~®èvQZÞRßy…�7éæIÑ/êüÇÕwº²§°|¦óøc“y:‡ ivRXM4¨£O*Y\«Ž1/‡òÝÅ—©âbÒ¤3lÙ±ä²öÑ1Yæ³S%Ð�#ÍÞdRÌ-M³O_lM¾œ)Í~‘*_G$]èH_«ãžgoÚZLnr¥Êï¯Òy”¨Yñhg¥¦‚Ò.ÞKÂ]Ù‰¦ îÜç•_ýC Kt.íÐyC*¯çöñµ=6Þ1Ì~qgcêäÌAk.§]x1´Òy{”L¶#ùÎ*�ËœmmãÎ]�κ§ŒjáÎ3=÷'8l±ž×ÌçM‰ÌY÷3Oí|®v~ÒÑñrî‰!ÒìâZéêñ´·8­ÿÖâBÑyqÓë°úõ\tî X´³’7rÖ}&Ï5Ûòî)q¯Ü±–ôCî<È»Óv 9lÝi9$þS;Ý^»�7¢J盈­ìX("2¨cáÊCæž]é|²^ýø7˜[¸¶uQ%‘�*6�;oQ ªïÜÄ] õ�/v¥V»:J³OÎ$Wj1¿™™\ö&î™�|j>—yÒÎ*þåˆIá-Äw� ‡‚ÝYwæs7™·Pz�NŒ;äŠ{ˆ¤D�7¢Jç«Ký PcÔ±nä‰!+Oð=U¹§c‡t↉×tÇ+æs1Èb@q�⎜“õõ�{ùà':7¤VsêÒìMâÞ&ƒø­ÆÎ·>=Ÿï´[´³R«’}š7–§%ÞH ‡¬m«¤Ä‘8qìç¸wõÔñDBè¼U:_X×ù€šÎ”;_j·ˆÝa+wîµwù?Ø9¯¹_×yT¬Ý´³íŸRP&èø#F»âš¶çÝ{ õ‚¡óHo‚òAçÚ¾b}療bãAX¬ä!bVÞg,pçû7Øâ]±êΩÕ,ö©1—&ö•LŽÊ8⤰¦ªó©ä‡ûŠTâèÐöµï‰µ³R0Î{–>" š[wNë¼z_1Þ�(í+Êñ.ñP)­È[ ^y_ƒ-åA÷ç’¸j€¿�Öù©Ø*:‡ÿÔû΃rÆBèþIÛüþí:úNMæ(U™¿ þ•žß_GßË5ÊSu[–K÷z?¸Lß\úWv[Å�óÚrT!íÌ}¼sçd=•<¾-ž%˲­«'}’é ?µy”}b}çõ÷<—FÀ/ìÜië¤ZŸïœ—óÅÄ�ÛϺϴM0~ºóö¸…œñÈ×tÎ úø:K§û]ï©u.�™å_´^Ï7®õϺLJñÎûj:/eîÚ dù†”�å(1ßßi÷qç;•ÀC#yea•N[{½=ѱŒŽ‚f%Ð-^óŒY¶u÷Ÿñv~-“½°EÚð”;ŸºA téÅÛSQö<>ðH_SýkþŒö×Àg3?ºÏ=uŒOë¼É»Ñ=ïÆ=#­\´ëÔ¼):’–\w[ƒ5�;mjia{ŽÒ“õ•ù<–9ÛÚ&:<ºâ Xª×ó×—tåΧšy=–¿â>–Ñ“¡-tÄýŒ;Og:Ý^»Ïd¿•iÎ#›ÝWZÅÊïµwî ËjŽ?º²'2Vw- .’ÿàøü´2³~n¹Ê÷¾šHBÓ�{T#P">µsÎÐa÷i�7‹½¢s®›k¬îüÁmµs™ñò­Zj³P³RjÖçßR"j²÷ßPqçñoâŒL”!~äÍ Áˆ¾ºó7÷‡ søÒ’{TÛùŽ~¿Ÿ;o¾1këi½ˆÞ~ýÙêÎÛóæC:ÑyH�UëÜ!n›Ô¹EGsK}ç<Ÿ_9cž Cˆ,sÊR,ÐýÈÇO}" !“}¢·=gŠLtŠ¢9vC[K©ì˜,Ø'Öv޾áû:_yôšN]ÏIjst»ÈÔœî\3Ÿ·*-ßÒ¹6JóÜ¢>ÂÐÖu„©Oݳ3Á½‹§ ܹ5¯ûhçê¯J=—Ð9|ûÜ·D╃#�–ò“–?ÕUwNi»¯ÒyýÜRßùãKË´ÎõYA's»-ï;'"îܤÍ-[ø$ Ï-<Í—Úih£�Ù_¶@?rx•�é±zžŸŽ"ˆ ¨à9€ž#ñHtÏ')Çû�is�ç'SË�”1ÏÍ+¼ç¿fðlâ$•™ua†aU`ÊRsqw,h)Ô¢õÛsI|ηçÓš?Îê¼ìf~FÕ€éçÒ{Ô•´çVH(=²±-A�ߢEÏÇŸHÈê¡Ùœç4é �zþ®A�èhÏóP óìáhÝîÆ‡%žĉĂ&=^“È�þqÁ”~ž×%Myn Å-×èûrl{¶WŽÐsDÿÁó‹·J�ÔdžS±‡69B€”yÇé5¡ú*+gåã>\|ž²nÉ®A}iŒ®ïº}×ôQÀ?÷¼Æn/Œ+†ÂpÚ”Oxë…qEÀ¼Ìø¬Cp\±U?Þ¢ß;¸jhBzNmWDÏ%àüAÏ=G’ôIÐs$@Ï‘d=G’ôI*ØóÝñß!¤‚=Ïy]½G´‡rϱ}Gâ�èž§ôúä-§Yq)·ç–ŸhÞí7ir�«V½6so{Ézsø_mÅüsÏkä=u˜—Áô­Iå9o�ݸ49¾ý6¥_ÍÎõêb{Žh…ã–I×Õ˜wV»ðvãÓäxÏá+¬®‚ž#Z!ºçúŽŸ¼FãÐF�T!fqir¼ç¡õ,ÐsD+D÷|Óò3:2)ì9K“CÏ‘¸!ºçbÖÜí¡,nù)M=Gâ€èž_¼5™¬� ²O*/ýP.MŽóœ[oA”ó¯ãóñsËKòÀó”Û^W|)Ÿ&—R»*¥_äzs8®ˆü~N4 2¡$îPà¹uŽ)õ6Äæw(ð¼Í ¯±dA�øçå"ÉzŽ$è9’  çH2€ž#ÉÀx>Þh<:‘¨L�1ãˆÈæ´´ûøAò?Úóñœç¸WÏf ¥žƒérž§Œ™A=G�˜=§ÐËaÚ–¾×\£«Tâyêî¹çKšˆÿ½`…·|r…¬7Ç<_<&íM-æypóœ UˆþRnÚ�Bô©`ÏW{G;rÖ4"«Ï?Yt»|ó\ûÙ¥œ·t"ÀÀ¹®R‹¹®òõæZºª‹\&aRO×=?PhÚ¯ïù!xãR³ô OFÍQѱæAÏ ®Ò¢§¯-—�až·i~†*þ’~9CåëÍé7V¦deü¢z–º=‚ó\ hôûÏ�RY@´EŒž‡OÅÏ„d=§vOqAv¶žK®7'ê\#wçyÏÜ´´4 �Á çZCÏ•®7Çâž7Ó`°‚žk˜¿ˆ[®EÆ-โõæÇ-”¿×o¦qË,¢eÐs­ñgýP0š.@—.ýÈ¡b?”y^�ëÍIû¡=ÌÖU!àw•�¹b?t§)«@³�:z®5Œ+ÃãŠ5©¿·ÅõæZî'¤3Ï+p½9é¸bJÁÉ´„ÜÍ=i{W<ù¹Ñ(è¹ÖÀù-ô<ÑAÏ)èy¢ƒžSÔó¼S¦Gˆ‰¦Cv a¬­ †±Â cƒZ‚þq�{õξ ;¿Å|¼¡À@ÏêxÞ¸•] XžÏŽâUãÇ«JÿÌŒÐoƪMêC›Pa˜Çd+÷žXìZ£cõžy.ÒIê9¿'¼ö¡ô\=˜ç¬:rÎxžÏ>ä×Ei?µà9�ž eiƒN@-Ï-E‡©ÜÅ+ï\½“û@àèd @åMpÜ;i%(/$ÚäLuº›eÓc¥›)ƒ¦Îw a?à¶ÓÈÇ?Õé³ó5ìªÓ׬ý&߷χíù<ßýM||tT$”9 ¢×k·Ž¾êÎÌ—�‡#PM:—8}§3X�ÃR¯¼�]Þó'±¬¤åñH®5/óz>œ.Ïž˜ïóg0ÏÅû;mH!»MÏ­­.£çêÂ<·†ê¾ø˜³÷*ùö’Åç|{>¡U³&w¯ΠÇߤ5ß{Õ¢9“Y{N�°›îò§)¾^šu÷ ¶“Ï¿¨¢èƒE½ë/z.ŠÒËmçËžçgzšºlìgžÔ¢@5ÇÊnBSW³¬•ù6V`¶<÷�6-*åObâwÜ-ðH®5ÏÝlKú%»2ƒÈ éÕæÙñHôàvÎsv›ØžÁ÷Ðsu©Ì:—ö`›ìþdª_§Ðsö¤.kÐ�ó¼øŠX�RÏ©]òñG‡bZñæü±ÐZÏà ²ó7žoÝ ºÁîržÃ…Á'¼oɃ’ÑK7€çbœ?Iœ�zy’�ëE¶½4338ÏÙm c�££çªÂ<Ÿô¼ØýP‹Iq{ÎÚ¶m³ŽNóuJuÌsöGÅSVâ4@<Ò¸•-ø„éd¹,_øK %‘÷\Ô™’×Ûú ,Ýž¿— äú^=Ùá9üN,@Ü’M÷ÎþÙsþ6‰G÷ çªÂ<Ÿàú!Ó)¨–?ò\¾«¶qóT§�yÎŽÀaÎ?m‚ó0Ï™£j{n“ ¶]w5x õ<øÊÅ-±yn¦žó· ¶aÜ¢2•e‡BÒM:eq óÌâ0qU)JÅ{žîȈ<…xIÜR(„8{Ææ¹öT·ØdNž=œçŠãˆ­hQÄÛÄCa?TM˜ç| Â͇ú‰ôÅæ3KiU®ÒéĦªwx§©+º›c<\|~ðz©ãn+¨fZñ[tž÷÷1‘CÁ¶Ù"tòÙ9i?taµE§¾ÖâCgÞsV¾Žð‹RáŽS¬Ê Ì60Ϲ“t>ÓÄqÌ7›]+»KÑaýP(—ßa¢Gxp°È]¾M‹w¢ç*Ã<§ÂD2ÿŠɧãvy ­îžS�Á'vN‰s[Cx¡Ã‡þ ¾ £…n-Ì%NjóÜ2*²C¶ò‚ïÛ ð·X:®ÈÍæL½b Ø˜ç¬|ЀºíòãŠV`¶AÖs(.\‘]'°kUà9W„1Rú«�‹æF)d·)â³Sz®2•Ã�þ÷ºÈXÙ.¨ ü1±�9&¸€E»`{<Ñø¡äBÑs†žƒ <Ý·a‹Y|ˆð4.h’~ â&…° qEŽôÆ£ç$ø|Eë§û[!)!!Iây2CBÐó„‡ „ ç AAÏ‚‚ž'<!=OxBzžð„ô<á! ŽçMóáÃG:ùïPËs÷eô\PÉó!�2=à9Ë ¶ºrKæhgYp"z®}~xî?Zž³9ÙVש4M l«?ëÔ�±" züðÜÞÿxÎrl¬.›˜ c)¢gó ‘=�˜çkMZÙXΤÒEƒ™šÊÂøšÑ×PÍóƒEŸá9öM£ƒžÇÌs¡cÀ%‰[BžCF'öA£€žÇaÏ!D‘ôCCž eù§³î^÷ ˆ,èyö2œm,7˜y.Ž+~{) ² çßÙ»ïÃ8€ã¿÷�·E�Ãg‹½ªVÔælÎ *¶3ÿ Æ…äÌ�Y+ö8‰X1b¯sfhb$fÎÄH�á÷>}=Þz‹–àé›ß÷�÷­^{WÉÇ“ßû´Q½ï/Z@�sÓ97}@�sÓ97}@�sÓ97}@�sÓ97} ¦ˆUü×”(ÍAÎEKHç›E±sJ°4ç Rñ™ÅC”æpDûßÀœ•)ÛÂÉ:36öjüa9òv]yÚ558ûpJ�’ ÆÀ·ª…ý‚±‚-ûÁÕº¬Ý^«Æ´…«£ó7=ÇîÎ e^gÁÚ5Eç•OÕF%£bÕŽt€q3bÏŒQ•³;éœçY4õ̇*F“ ;5™Ù[Úíln±î˜›RÖ~Úè|Îq\ù‹#Ù�)eÓwÜ“>Ø£ží;ÛtøæÜz¿,{äZ»ÚéŸ:Ïüè9,î¼Ú²ó‰ug4GE‡R+ÌÄ¥³ÂÌCçW×ß�ç#+6*ñÕ9Ê»›XÆ Ãznuưöêœß`Ì¡÷ØÎq pÁæóy÷‰:ªÎÇ^9Рf-ýzþñTf¾žóù<Äz>®Ü]WßUKýÖìè÷¸:¦¸Ë±pКóôIžüKŒÎoLNÍ•²³6´²O²¸ËöSŸ;·^âþÚxn3Þ…�âÎ�íœÌ©[Ï÷5þ‘ó�·É¹`q祸jåPð°C8§!>÷ø¢R­i·!@kÿ# sK¥L¬ÔoÎÇÖ;Tç-²BöŽ•¹óR5ñvUÕyüz³Fzç�n‡ç|Ød¶´W½]ÚOÕô©KoúΓS,AÎWyBÏ-ÚcZ¡àICÀºv•º†ãù–mßôhÎñ‹“´§qç<£ó—§²’s±âγ·��sAKµrÏÐØ¥Œ3óËz¦9gÄö0æó,�¶¶hª:ïk�ìykqçeTÔyÐ9›Ï»7ŒØ9dð¡±üEåÑ;? FçÚ«Ý>G�Œ2ãÌXÛÕð^Õ9{Ɔ=\çr.VÜù¨Çû-HÉàœŸ ÎÙ[šìØ0.2çÃuÞ'Ôts‹.œB~éáÞª‡08çgøÞ9­çQš¢A6š¢3uÎùÜÂÎiú¹ÅÃæ�sh0¶wn˜[t΋hÎÙbøSçE´¹_£ZðÜÂy†áÏl$çÎùÜ¢�ù7 ž[:@PÖJY¿¿¥ù\´%ÇÌ#‰•â�M=먩:çì:´îþÀùè“zLxÑJè�סuÙu(ÎòÒÁ_íŸomW�;×_‡º;9¯PsáÁÌèœïÊ�»¶ÿ`wÎ~ziöô<®ÜsWÂ⻯õÉ&©®{;kÿÌù…T̳nÐ$˺º¹Ñ_¨—kíÀõèù�l—òôø¬ºëPœå‹[, «nÌ`½s¶3JÎKQ �Oݬàw¥€VJKI(ÈÈÈ®vMJ1W4-:¼»¶™™šùöñáöàÆÅÄJx£?d•ŒŒ� "Kb8.(')”““rrr*=QÆèæççÉxž±¬­¬´°Š``^U´é)e§I�ºU}£vL1øþýìõðŒÃê`†¨]}‘ƒƒƒ;Zƒ2=ZC<9r¥Ö;d£<@Làõõ™²¨À…Q�Y19‹Ñ¹¶™áÆ–zzz.Hw/>jóïçÌñÙ,g³LRl•gA«m;L@:xB-½ãàóóßG›Ü£¼½‰©²eg˜›fP ãø—Ïóe–Ê¿¾¿’±¼k‰”¥°ŽÕŸfdOKkF-¸ðø±²¸t’¥êÁ†5Q{¥‹g)5eXE;ÝÑÆZŠÁ’°²LNTŒpQìøüàÉ»���OSƒ‡eB=3-ÄôðìöØ¥Kf‡œuMšmE}J'ÑÛáåáÜßÛÎvww’…f?Ge…YPI7,ÑöøÂÃÃ2y¿�·¹‡’|”z[pDAÃÑÞ]£ÝYx¯žŠžzVAtÆí¬ÄÑÊ®¬Qb–¥˜„Á©z#2Y¶Ýë|¨¾”Ÿ­º¼¦2W¡Ä•an:%e¿í®ÚÜqž¿æÜ´y‚žUu˜€´Ø˜¼ÔLr�mVNÛ¸‚§”t€w^-k¾º ¢YW|Ô©tU2Uir›ñÌ—4IgÍÈ¥©•žK�ÊÉ»¥�…Ÿˆ´ºŸ�ze—¼Òˆv¾ ÎIDATxÚìÛAH“aÇñ¾—Ø¡ÒQOÒ˜¼xñ$¾^ƒAfÔšÕÀ�ŒFÐacˆm˃¨Y*“ÐE0:(î»Ô Ö%(ô�Ä,Aƒ„èPÔˆ=w<«^M7÷î÷a<ð¾ïùËó<ïž—ÊCY‚xÈÀ¾ÈäÀCŽöE– Gr°/²9ð�#€}‘%È€‡ì« ‘ž�®ŸxÈÀ †æVÇÕËÅv8ò<ª°[d<®›šê÷ÒŸxbôaL{‹¡ �,=V…Ú†ïEzd·Å‚q·øCÁ©~SáÎH÷P;ýäJ²[˳N¢‘WÍd‰w€ 52r„ 7ÇÁäDÖZ]˜õX‚)hš7ü›n}ôq9Zwú¦BLôÊä•­qÝÓ*Ì/-¨zkjÇZK)rd=iÇâΚtd5“8%»’’¤‰Ë’Ô­lhb`»WJlÊäÍvJ£Cí�÷i¨™8Q¿b X¬B…;vCÔ÷Ž*km[Ÿ%Û>GÃïÏ??³â$ Ì|˜Èú6;ª›['˱öÑÅšl¯Bm~Ï@HÇ´K�N*Ú#ûaï•NŸæÛ+yŽôu;~ö6‹o’\É”i±jä8Înnºû>9õË1ÿ´LEEã ¯r òÍßË}n¨Û{Ž®õµÓÀùWŽŒk+¡,F$¦HŽî¾T`fиô^ëlòÈÈl�E¸/9ní1G ̤6Œ-¤>9ÊæÝÉ”1;²'l=‹Å*Ø‹°|‹Õ¹§éX6>ÎöŽéš“>ïË/é¾�¶{–ÏÑù-1»«‰Áô‘s~¯rÀÖÊšcÏ‹ŒÔtB¦áúŒôN¤á7‘¦É×õ‘ÑqSŽî­x÷QMl‹K£k>üѶV¦­sM´Æ®Ïúp ªÀ¡Ï1Êîäîã�Tƒ¿æ¨vtýß™Uþ9Ó#P!!0¨á_Åu±Þö>°8DÈäÀCŽöE– Gr°/²9ð�#€}‘%È€‡áûtLÂ,Á¿hìááYZ¥×m�Ž�Z:x£ã²cÇ MDaÇáƒ{H¸@® ÜpY™L¸Ñ!Ãe蹚Áãºäú ƒG%Ü”D â`!’IDiN0K‘³´ ê8!ƒ©C%(D(޾wI/1×Òh›˜áý iú¾íÏ÷r·0xŽ·0xŽ·0xŽ‘4Ðy3’pž#ÇÃ@çÏ€Óð9îhà43ÌC” Á_CÀqó†Nsç°…¦×x×å¸û!6æ×{Í.G)Q˜\ ¦¦ŠÀqó†˜[«Oõf¿lÝÆwå#F�G´­þ4áE¹\¶î¡cí¿ápO)½Þ?9íí=páAôk_’³�Y'Î}´ÿÅkAÐMšCéïˆl{|iƒEÔ*ÝWÈ«ƒ^ôû9úwjþI‘Ú†ÿ`EôßcŽD­Á‰Zƒ9µs$j æHÔ """"""""""""""""""""""""""""""""""¢oˆþ'í�@ôw“ø Ó.þŒ%�ÏØ´y¾«ÈñV¿Ëéïåzøœ]þm9nÐõ… ¤cæH¯¯ä¸�´+Ç•Ov,{¾»îߺ¾‡Þ¬7Ÿ ;!�8Ò `�´¿Xðµ¶MŽ™7†›:éƒRùu­¹*§ué2º©î·ù¸Mÿ•·9n0£j³D °ÐétzÀÛ�ç®�ž§ôT–fA®s È*•¦]D‰€Q•ªׯåë*Äd} WýnŽÇŸ^^ulÅîóëÂ×›·-y¼/<¶ŸÑL~• Û‘B÷2WYˆs‘Éx4ô H'’ Ý,JÆ€%‚Äç3OÖ/³¸vzµyèÔ’Ç[ñ¥j†nìVˆsŒ}ýéüœjöù�º'hˆ}Ô&Eýc0l ¢Vp½'>¨EV›�¥$Jƒê2ëao†Z:–切ÕfÜóq3çe$œL&i(•õ»9î}vïê�˶~=Ç8—:ª¬_ õÒä˜8.€`”ôšë[¤0œ”ZÏ�Ç0|G)åHµÁ»Ãª¯½Ž€ë§ÞçØìà»A‚yŽñ¨vÌæC¼°Hã³ë§Õs^/ù8êOã¿èðò“ÀÞ‹§÷›õÐíS¯ÌÆ×s �q^ÿò$øìî8Z¤"Aéίoœb6b2à¹; j�&Ç¡!ìˆzï„¶Æ\³ƒëÓ÷9Æ~s3BÍêˆ/s|wwD\uÝE£i�_utç]ûåÍ}8rE¬?ʼwÉÊõÞ½»#Ùgßï]_o†êH¡ª#…"¨ŽŠ` :R(‚AÀ:^Ã¨Ž”ØàÕ±eû6fYZO”’Bÿ‡TGJLïÌ—E ¡8)‡YšŠ ¥Ë÷q ^/aTS)±@üº¦•ê�Ž9�=öXÈ!èøïÙ ÁÑP÷8èˆÃ#Õ‘ ¬‡ŽÅµƒ¤0\¤ætlbTc*ò®$™ÌŸáª3¦O:˜ÞûzœÓÛW]�³Ï±óµ ¦â`�gÀÁœ=ÚãÔ&ØèÔ²ìÐç?Öc]TGJ,¿.ÉéÁÖÆó¥ ¯#f§µ»&ÛA¢c�~¼¾+‡)Ï5’äjÛvoq:ºªû†ê»F èÕÌû3nl ¨ó°Ó.ÈU�³ #V“êH‰â™uóq¸¯”_;&¦§[ç¦ìIجau¬¸í=x+W—ËL‹?£ÅP3XÇ�Vˆ……úR(276vTppKǹ‡¨Ž”X žY'?!6Û kð­Bî :Þ8!rXG¬^pÆzl~ð ü„"«ì¥£�ºR)±É:éëDbcx² "þÙÕ;«m$:b8¡´ÎEFG®Më‘ÜED²ÚFu¤ÄñL ;«×0åúRd«çM©Žý¡ÇR!5ãêÖÆ÷Â׎DG×uEþÙÊáu,^õVÎý×_¿+RÇë®CQB3„Ö ±y©þã•«é*Q6QüÜÑ¢]qV‘úl¾L» vVeÖ¹�Ž-F™g2|g•Óñl—,ñÏ h9á :â—mÌ*H›öþÕdË5hS_µŽó–´: ¤ÿ¸3hÌ4£Õ ûnG ZÄ–—¶&c)_9>‚®ž¬Ñçeã Ø‡äp¶Ê1< ^��³3'gçú;}NŒ¨ë¨Ë—J�Ö%oÏM™K²@ª•°Yf;P$KÝ™&•GèøŠˆå›J´,Ã�£ªÃú‹)UK鸛èø�j)Át)lõ=îÈîůˆ¨Ž ÁêÈô’‡äVqX¾tÁá®,þ+×±XÇ„W}¿ßl‘™y{Š®NGM’Tšm^YGñC‘Ùk™tÿ¨èíýÍ^´enÑØõîs ËëèîU¢Åô%ÚZ ®ŠªJ¨ŽáêXœ* 1«álc)ÎÎ1KéØ\‰ -Ú‹ð\ÌN“J¥Z{–T&±žFÈPgtNw£„£F©³oš‹_8aB,-�Z| ¾IæÃMç�Rω!¬c¯Eogùrê�ZœçM… -[²×zI{Fõ zKô‹9!eǩϧDc—PY=5v¹›U*Eõ¥iÚRTcªßàÒ¥WG�ëÇ‘f~Jt|ëø–{_å^Ñ‹ºÏGɽ½gÜMñ¼v¾$‚ðX¸[T•ƒ45Sª·�™¡çѱQБ�²®ŽkÃU7src³\V0û§/”.§#èk'9iÒŸ¸ Ì’Z¶4WŠk¥ži³·µsöa£´ëXàƒ¥ )äÔøF�˜kІ~Ç]€Žº®ÙèÖ›ä›~à„tÔ°%C¾4sAGÛî­Þ{Üo^LQÝr2WÍ^ÑÛ÷>øžsoõ²3ƒKS¢}vøyùŒèuóýî1Ÿ´ tüÕýM@ :†´~¦ºÜãÞgGz=¼{_òÞª)Õ‹è~wÕ~7+þqèÈ�@>›UÇoÿ@ {C%-Û3Í»·o[2Y½'«AKný«~;Ÿ¬j¾ö)ú'š+¡<ÒÚ©·Û,¹8=¬u6@îó'·têM¡¦ØÐri6~‹j¤Çl9ÔNB@¹Ò7 ñ:ÂKÕƒ¯¨žO€ŒÔð�j×Η¾9ÕðLU\¾_ô¦øRëg;æžsŸkßòÙÖ‹Ï€b8YsïP ¢#ip¿èœÒ¶›Õñ ÷›{U¾tn¯h;ÊÓ¢s°œ|'«ü᳉u4a·lÏ(nž]JGn+G×Õü²¥ñ:BºÙ„}Ã5XG\&KFXgbËšx´s¶$ÔTSg”J9¡i-zéˆÔ9©ÄÉ*)!ÑLù%eGV â×—�_PáR4yšlý\LÙQÂê(‚å!Ñ‘oðKHGP×¶{Lõ"è—€ÛßãÞ‡ïÃ:ò#P„ÏfÕÑ5ü°%› ž�dµìírÉ*´“@à+{xã#ü1a:µ^b%Kv¨i¯Eûã<û¶ .ú$~;^h¾:[‚u$¥ˆèKÄ1Ð+¥Ù‹c׎É;îx /O!÷„µ£øÖ�m çÝwÜqƒ.…‹Ž[¿�K×Ѷ[õñHZÙÈú‹á;ÑV/£¼ÈEÇAÇ…(Âg³êÈ0ý�M¤À>ø³œŽ$NB:Úbq>þ¡�s ¯ï“6Wò:‚¨³ ´N4{ñvŽ?™kºÅâyö ˜W&m ^ ,5tb6:’Ò©¯Ã׎b"üÀë?‹{G6C�ûöŠ#¨ø-‘èøõ£[/r¶Õ§ˆKNîµÆ|û3ANj߫¾ ×Q kÌ箇¶ìZ³ê$^;~$ªòM‰žçG ŸM«£ëë/õJ]u§Õ¹Ž+é(Nò)àvHµ^Î1¼³êƒ�Õ°è¨yȼði¢ás_NX²êó  'ŽzJH§†ƒ©goå�R^­s0\GH$íXÇQÕÛ#°°¬ÿÔ„Í<Þ)õ‡t„�Ux[„4µ°³š�wV wW)ÂtDì á{!*š‰’f¼³zø˜™½oìð?EølZ™´æo%ÎŽþΓÚÎ"õòOåèÌHsMh=h}gFºâ“8i²),%V ­‘„3·ôŒªè‹›ˆÍ«#SÞgú’ÓUg^é!¹þ#¾i/Z‚gßÐ mį@¤S®“Žß�ŠçÚeÓð_êèbV¤XYàØ��S(JÇ4¹zåOï\©wÒÁ¬ TGʆ!ª:ÞY-“¥Owÿ [N”Âmuƒì#äTGJŒ]á{�†yÏÜUêH©*~ÿ�ÇÙGÈTGJle›¦¢+§ ›aú­wakÒ�Óãü¹qð%ÈÄ>9d.ômãâÚÙ¯W|¸�êH‰-¢®cq0ý=›6À�uÔ˜ ÕÙjîÜ8¦L{H<Ä2ÊUБÍV©Ž”Ø"Ê::{dÖA5>'+3”¬æòçÆAýÂ!sP Nªy‹ëTGJleÛòX¿ ²+nëÀ:â¼4�?¨êÆÆ9fá�¹E:*¨Ž”Ø"êÉ*Kÿk?ëK±Ž6­7ìܸ°èH ä]‚LVSÍKÖ¢+`hGK"~H‰¢…x-¦�>F.tþ‹³ÒÛæ}F¤ŽL�öÐcqjrÈ\ØVõ¿låˆá€œ4½]‰-Û“Ñb µü]:8‰K�"(“/­� úZ‰K3¿w6&e¢E$ܦ ÃV"Š@‰ºŽaߪ8›Ÿíªë‘¥÷9B:º@})wÈÙ¾!:’m�hꨫ–H§ ³Ãz:Ï|鲫F~5:ÂæTªr‘Ž �ÿJG›Ÿ\Ò$õ�§.žÈšt¬¿@Ÿ&, cô¹æÎÚLfeȳ8aÏçDUÇ®¶Ô†:ã1"-÷ʹcÁU阅=X³ŽA¢#1hÑDÖ #EØü:ÞYí™,ý—Ç9’àUs°Hžnd8`L $gÉcº ŸWU4Ñ3À}#¤ÇyŸÖNjÀ‰¤¹2htB#ì ¡º�ÕqB"amŸ7Bò uàÖ14@Ƨ½(h‘HŽaƒþ�Hôöú£=žI% âÜD>è‚>Êõö:£ÅsÂ>¤rSRz�³ÏŽ{MÔðåç1ÐQ\£õ¿(¡_ ‘$ž§Ï  ¡}£CÃGG%ÃD_Ç„?ÚP­öÐûGF :‚ cÂmƒ©ïK¸jCu‘2nˆ%3DGë©Ô¿W—ß·'ødÇ!hÖP«µs5$,öjýÉá:6¸¨U”gÓ‘!nœ`óé†$¹2è÷ò .ÉÛß?r ¥éÛ¡7‘Z¹Yœ• ýíy¿K®äçWµoĵ‹“úöà[Z`ºÉ†êóí·ŽCgå°nC¿bÐóAê°Ÿj%„¦cÑ×Q—Ÿ™pD�×cJHV9`ÀW­I’�G&«õJz­•°®Ãñ š±É*WÃg‰-ÖÊ;’È0Cc#„ÇÁ׳®�HVqר\k‡ ò�FÞ„.ô‡‡êæF'w�qXmËô&˜!ž.{éQk7û+p¿"7ÕQ8ĸŽû'$€Þ®#üuU×›xÞ¡#4(´H€"¨èo °:r5DÇáÆÄÄfÐ1°’Ž¡Aà;Ž!_4WFèXoðæN„Žºü¶Þíɸ?üÏCä|¸q }-®v* ¶³D­—ךòG¨ŽÂ"Æu„µ#ŽP˜èªÆÇg@vˆƒ˜™×Ñfe e£c«#©!´6žÆÑÚ-èXÂëˆ_£#�ŒÉ'ÂØ–�Žd"x¦µÙˆ‹ŽáóQ„éXFn±qÑñƒj½=LG�ê(,bXDz³ŠW© CÿÔ‘«†£ý5µp.m?Õ0ÎékµöÔx\ «¿7RÓ´v®&¤£tÔ$å¶×ç·¡4­W×Uoæ4Aeþ7Rkå° „ÆFˆ§°ùtjÃ8ÚÙøÁ­íüÚ1Ÿ¬‰ŽÜDPB—§ú;¨á`®ia>b<Ÿø�Ž­Æ�=qíJÏŠkgç�­\ЕÃhó°È}€žQ.bVGû¹ãi\:`”XÿÔ‘«†Ó§œÚnò?llr:²[•Údn'S’ØgâjHøûÁ(‘A^X?cqz mW6‚½Ö\Ñ÷ÔãôL"ÃA­�!2ÞY•x‘>žÍäW‚dg•Ó‘›H­7A£ vbÃæ=:õvNG¼_+ëSâ˲"ÜY‹Q¦£vaoò'·6ÒO@BÌê¸ÁÉ«ïR½×€fOž¡VN�|TÇ Ië|n¸fƒF‹b+E0P)Á@u¤PÕ‘B TG E0P)Á@u¤PÕ‘B TG E0P)Á@u¤PÕ‘B 1«ãµ”5�(Õq½tŒ£¬ª# Õ‘ê(¨Ž,TGª£ :²P©ŽB€êÈBu¤: ª# Õ‘ê(¨Ž,TGª£ :²P£¤ã­{¸Â–—vñuqªãßìܱKQÀq:Z��\"hujpp0Ztpp kp"ïxÐàp"ˆA´5d!A«-ç(„C®‚ õôx)tJô„ßðý Çû¾üÞý8nr\NŽ™Awr Û½ÉÉozÈqr\RŽ9�ã9’ãß�£íËõ Òʸ®{޲AåC_VË}}hù®{Zp Ý¼×Mµ{äø9ÚÎ1“먘§§cÂK6Rëé¤ÎÑŒcń߬'˜�ßJ;ºGµ›g:F�£õãyorYÕ%šG²qÂeu¾G]#—Õ(r´�£º~:¼õ"9WÉqVióì�wÇäh•£¶öΣÓñ€é8ïèžUÎ,r´�c­¸úR-ìWS±·iŽj8§7êw¹NíÊ›Õ_‘£íŸ³nüµ¥úkÁç4G'¼ÈÛÝpäÆÙ¬’ãäÈGr�£AŽä(9äHŽ�£AŽä(9äHŽ�£AŽä(9äHŽ�£AŽüöX„häø�Ùȃ1ȃ1ȃ1ȃ1ȃ1ȃ1ȃ1ȃñÅžýÃ( ÅqïðK4ÆÉIj"oaíj‡·™tew²Ú[]¨—¢éÀDب!7tb�…Q¦¦ÓIª Æ…t; &þ^¯TÿDÛ~?Iû×û=nùæ÷Þ;øo”)Žÿ; �òF(,Ê  °(o4€Â¢¼Ñ ‹òF(,Ê  °(o4€Â¢#n�þ þˆ#”Ò+UA¿A¶›ë_­:¶4NG(-ú¦ýv,/¯~/ŽnåÍa£'5ú‰óé–~lsËD¡´(ÓŽêÖû¿ÇÁQÙÏã8§ÀfJŽ2Q8¿H•=¶G5ÒÏBùr¥ÇAKä?¤/}Ͼrslß?¡hêÙWMw ¥Ýwc_ÎZiaû^¿ût,ùe²†=[‹¸êšˆÂÏÔö·ç¡”†y1¥ÖTeÑÀ“U¡¾¦=ô:·¡Ç¹ñXÎNG(ƒýF×ygª8Žœ‡Ã*ÍÛVÜ[½…[éõ¹õ%Q�XâlüÏäÖ[gÍ-wGÁyí¼°êiaÇá'ëÌŸó×� ×O9Ï4n¼â îŽB¤Sz…×ã²¥Qs•ú(|æp1O­§†ôV®#G(ú¦û1ì<79xª¶*A«(ÜžOý9(Ý�rI=Œ_ó(ù$¢´ÐLâøYýŽ®Öà“ûîs•*?Mã„xµljWÖè¬QƒÆ‚T%‰³ÜnÞجB9Ð>=“xp*Zœ3•NU0Šßp“LÇ�úT?¶§â¸Û榅»8êI-¥q <É&‚U¡â˜MíÊÜØ¹Rƒ¥!H哇ª˜7¼�ÛèŽP ô½Øh%ñȺ#+Ÿ‚�&âû8vU“_«›UN×§Çq¿;®I‰¦¯ý­Šãn*+#rã^ÿ ;&Å:o]G(Êt¿<¶6ì[¥gGºvVçÃæœŽâXã8ê±qú°«³cë(Ž¢a¿³–ÉÙ±;�Zu“c¦/ .¬:õÝTZöðÔ=ë­÷ÎŽiùPÚG(ÊDüoGûNm�‹›UAÇÆâ Ž´™z²y—"¾]uc_ÞXÇQçù˽~z³*oôƒ{kn¹o(å¬v1µû¾åXv®ï߬¦q |ißÇÍ*”ýK®Ó²bNÕ߃8B‘Ñ¿Ôö={¶¦¿q„"£¼Ñ ‹òF(,Ê  °(o4€Â¢¼Ñ ‹òFøÚò·^a€ –?è:†:±IEND®B`‚pydantic-pydantic-e28e879/docs/img/vs_code_03.png000066400000000000000000000223001526274674700216720ustar00rootroot00000000000000‰PNG  IHDRãßÍ:ò÷PLTE%%&,,-!+4..!''(EEE445‰‰‰%$ 01aɯ)$$$)B/$#..8ËÌÌ[Æš;#"qRP¥Üû$.L*,3QMA%%5‚®Ä4E,+å…s36>!!=R¶ª!"X./G^>.*3Uqz‚(Amvs4K�ä\ĤF3,@_M0)Y°s:-0?…ŸzÊõ7KºÆ¹�/a„kMI8[”u‡�(,v3Mn'.`-7†�s?SgLADo Ã¨Ç»C𩼖bV _L†±j‚†2A4M®ª†ƒyÎzl+6inS806.áƒr zQ "G'4:‡Q2M‘÷2k�]ÄŒ'9<›N8Z'#/; P‹L—a9L?6iK3jm¸®¯®V¾¬7WsR“Uˆ×æ ¼Å[¸™)MxMLV�i>’·ÆÄÀµ\ï=}˜š­‚„{]ª{K3=G9jÅÁ¶¡Kh�Xžì–·»Þ…n·ŽX°‚P†<(8B"W®…‹v?Boæ6Z¾0?›´~�+X¥rF8J#G�ì¾…¼3Pˆ¡ŽvH{LŸÕãÊÇ¾ÄÆ¡�Š}€rg9O6N“k'+jh^JJ{=wZ=@ƒ‰Tr…èw€`F=\ÕÔÔÔeŽ¡E–˜µhc5UWV,�Öù’ÏóŠ¡´-D~V‘Ê?�¡f®ðV{žÀ�yŸ‚³„s¯›¹ ˜�uxµäÓÔªmxtÀvUzu¸š�Ÿ\�ŽWov“ pð³=:faXj]5RC¹ƒ­¶¾š””^»j@Xa°Rb“Â�^‘QHÞ’9kœ&‰Ùøt˜°ˆ�‰Ä‰iÛÍ<=nZɯ´¤‘uc2ž»0ger‡¯+µÉ66Îã>!„IDATxÚìÝIÈqÇñ§²b¦)cÚ1Ð"¬©¬@¢…"D �¶hÐ~xMx/A¥D˜1u° èô*´ F—^CìÒÛJè¡"ê´ÐòBEu© êÐómF³}¯÷÷!\æ}Çy_Çgþ"øŒ¼Q(tÒwZ¨&ès¦ûéãæYE¿‘ìK“i±¢x$‚ÞcÓ‘±ý¥ŸÛ¸cAÕì¬ÐÇÍ91Œ¾ŠóÖÖ¦§.EQr±ÏÕ¬ÄDÆÉÖÆ-^4Þ›È�ÏHD¿¨ñ×Úx:¸¿¬f?Ó¸î'G<…Æ¡FÞQ:‰Æ]~£ÐÓI¾=³ŠÆÝ¾ÝsæFOC_‹sÝš^!ùªŸûˆpeÎ–w–]Š~\¢@êx<“ãç.E¨íU? ýÊ)-—'ÓÜBAÌ*ŽG®ŸyR8c—wð±Ž,#’/_/™,‰-yr½°Äy«þ÷Y�—ˆ™6ó¨Ô^N)ºxOÍ^À¸æbÎæöÄ“${]J®*>L\ZQ4.¯å ]h¼×©ŸÇ¹ñ#“�ŸÊÙ­œpãŒ4îúÓc=OgÖ0Å–È­Uɲq½I¾š›vqã�âÃA]mÜ¸Çæð¥Íó¸5�·ûr]Á�±çqùÌÂëKfÝ^/ïè™,>²�æö<�ö¤g™øQÏSû�í9�—8^5k•¼¡®Ag+DnµÂb²/9½mïq_’v«•àZþ͈v<¸WI-îè ò®h¼·±_BlÖõNàúq·×Ÿ¼½~gWÇ…ØÅG¾°ÃH:Ʊ¨‰zÌiÞ Šë�Zw×g‹ÖÆ·:ountòy\âO�­Æ㸵ÄÈßþÉy\3_>m¼ÝˆqÛÄOü|¿;§g}IãÇOŠ_#\1¢öx �÷6Vã�F{¢ê“×;¹ñ94î‘DC’hFœË#j^Ô› öµ¢;-ú£ƒ[÷òÆ/4nd½„ÿÕÿ"~ôéy|­š7�J‘”^¬H"~Á#ù’N—§�/Y«ù*Gï¯Íã‘WŠ�Dã½Íçßöaãܬ$fqNWÜÕ÷ª]Æ~¬qék/ÅšG%êw¶œòKN1·ÔÏçgçË��§ë�«Y\söJÍ�[³Jkã!;µs*|StU‰)¾Ù­&84±­©ñxé[g•uö¦YÅjÜñÑÆýÒû£’p4d[3‹Ü<«ð}m–ªóv ñ^äƒÆÍkÎÖÆ•ô"¯V…("dÑ�3®&xP·ÉG3VãFƒ6ùƒkÎAgcŸk¼çéÐÇæ5ggCã<ªëÓ<«½™’yT^‚ïìæŒÝÚñEû/¶Õ7¯9óQ«´û•˜ÜõÊ p9o¼ébƒúôM�³‘õµÃ�Ì*åŒÞF,�J¹ñZb™wð}ñjcã^ Öǰš7Ö3ÖÚ!\¶6^sÞ(k‡Ç¬µCª™Óô=¬»Åš¡yTÚ©g´\B¬ÆùAÕjÜX;ŒÑn—^Œ××õb‚Ä£Œ’$“5�&hyú¹d.àϲ—û]õHhþCïß­ä²Dh„MÑ艾S{¼Ôú?ë7K¼XOßËéŠ5/tˆ¾ûz<{öüï ÒX7–¹Å:šÎÊZ+<"sCã¾å¤¶Z'N�é‡NÆ&ù,=7Çþ¢ñ;Ó2Gæì¼Žëëqñ:>íÑw*½R#œŽ’>e3“†ë¸÷þƒ©ªÀ]0åÄÆ‹üȹzMh<Ø9@Œ±ñ_1ø7ç5ž_¼¨GHpüÉØË©‚ƱN Žl|˜Ì\øòª6VÐø$X°¡qÕb­¢ÿ˜M�ãóÍJg �Cqìh|b0ZelœÂjHÿ�YìÛÃßs®V~œ¨×㯿m ´äîS±]BãPWæSlïP:$süîmOʙܦ¡¾ ÷µ'µÇ³bãÒLCmþ@y •í¢q(Ϋ q4[·CãàvhÜ�ƒÛ¡qp»27Îïà(en<0PCFÏoá¶YP*g7ΠqpëÆ•·|’ÍC¤$RÚMÜ|´�ߤY_«´�Í4žë†»ËB)lhüÌ×}¾4;Š5®Í6Eä¸0Ú&®ÇÛcôp÷3\ÇÁ Š[«ð1 %½BÔ’�‹£mbãúS o qpëÆ¥æå¤,«¯ÿª>!Œ¶‰�çŸ#�ÆÁ ¬o¼RGãÆÆ‡I‡Æ¡"X7®Os&TÃZEm3oûå`7ëÆ'ïÑ{¿ê¡q-z°]Ž‹£mbã…Ïu°“uãÁpJ½¤zò{‡kæ£mÁÎZ.Vø\7ì‚�Jÿ hš]Ô*J �{{wîºÌÖ⥔ÆÙâhˆ* ÎÖ‚Û¡qp;4n‡ÆÁíÐ8¸Ý4–å�ßAT–î�îsw÷w|ˆ›} �—ñ™Wõoú �óÊÍWÎ>%4[]�K͹ٶàí”<54¾>• é÷%ÿÍ~å\)Ïu³nüâÒÂÇþ¿�×w]'êe/¥G] ?£q(cã=©Ó}MŸ<Ô£ÍHhë�K uoS„¿<™Šîð…„CZÕå¶!óœ|–“ FØ÷óéÌzã^ÿÏ{�!Fl¼ à{gÒTÆq®usws¬ÖêCŽ=HŽbÈ„‘Qù• VÐH± 7GÐ$Fƒr9’Ï>˜ƒÆ°�å‹=õÒCPГOBOý¿so÷Ì®K-3û“Ííœï;ßÝý�ï|ç ÙÆêŸ0NÿCÚGxïèã »û'èw»¹Ç:ãuqÕã§Çø`�ñºVRm0¾z­BŒó?~«3^Wm0N{N÷ò='¾è­IÄWj{Nb¼^�×µ’j„qœî^~v¸÷û^·Óø¾7œÖ¯«ªj„ñ5©^�×µ’êŒÿ¥ŽíY¹Áì[ÅTž Y'„Ú’øÐdê—ÖÚ[Ž ›#s—É4"ü#áªKRm0nvNþL'ŽV³´û”j÷·´ŠÓÇW6l6V®[~ßaèùçýßÞÏΉWÏ šš£&“©àYv¿×ÎøáájѬònnKDMe]¦ûºˆñ^ÄK*KÕƒbÖ7ùšýžÚ`üÄ—…‰¿`|Ãu¹ý¢ luÆ}#�sñ>Û1.Ç»…?a†…”;V”ÖϸìNÎùÊɤ·zÇ=îÀôHr}ÉEœ)ÕãC×;n¸XyQXe{„¶qëÒ,8Â�Ù9)ÏgòÑÈ�A�[³§,Âë«ÑÌÔ5—p"b…ž^4ñžGnZ§z ¡©<æ�ø-cÍ>± r§Õ:ƈy»Ê–ø„+ç1‰Gc%M¨¦×(Mt<ý>nÍ+:!�K ‘| ëÏláØh!z9™šÚ"Ö|Y2,^b>Áö z”øµþÊ8:Ü e1*õ̾Ïà•6 Ãed\AÓ´r¸ÏŒˆY�q1Ð Î#¨Ã}‰ètÉÂ^1ù»%õ‘]E¯–ýÂÃ�¨iØ&ÄZLÁ¢uÅ|K´@CŨ§Dhú *Í>ô‡ñCÒ|ñAÔO�m}÷ZL}ÏáSgœ•-ÝZà«%Ý÷=DXÜ×3@gÎ<€®…îçW€GÕ9x`«d|k ŒëÌL9w�Ý÷|¹!¦œv>O…#•Œ·ßÅ¿Û("†“Ü÷בë¶Þ̤!�ë=õz\¼tÑKàMn=:œŒÑ­‡G•ñl�øªý^&ß„tÆy7wÞPb£”~;BKÊž€‡Ç;Õ#afÙ§!œIr™=åÍqÇÉoWæy|(_¦úµV z­iqË]Åd̉Η³å¹Eë}¡yüZ*æ:)ÐDÒÊœz‘R¹çô+,‘QVäŒÇZÐD�*¼5 ð¨mú8ãì�XÃócï”�ËÙ@{ðWÆ…¦€ß£ûÒA>g¡Zå¢VÌà9\Ç(”ËU‚Ã,Ü”1N#OŠ.ªYºüó g\ÕÎ;¼j`5Á¸Ìî"ÒìŸTMÖÌ8”û´"¨å@W&?°1Œ£·Œ£œØ.\xnÑ\Òâ£HøÝ°Î¸nÆÑã”—äŒÃÐ(¶ç<)©ûGdE�q4· ­+1Îi£‰3N�ôLh8㜠^«°Y¥ûÒÇ€ªÚØo¨Üþ�ŒSœdÎ×Ly=.ºïÅÙj°g.í·0ÆE0ί@Ì%ZÈŒ-;5Àø‘Ìd2ËÜ×î;¯Ukö gœŠ„_“ß3Nè©•�î10¾†ZÅÈ8üíGÀàO8ã4Ñ0fXgW³ ã4Á_=½Åk¼`P%±é²"gœ!“æŒZ1&68ãTêh=JįU~eœöœŒqÍg¼trÆ™k eüPs%ãdOÕ·Z«`a SÎ8?àå¡6£GLRŰ¹¨µ×ã #–®´ûþsÏ ”±· qÆ…Ç‘—©¹ø0g™îeƒøÆå8¶p£Àåp_Êý&{ÞÈxõ=§SÛsŸ:•¼€¨‡ÚÄŽgHÛäYë˜1`¬KO•ªÍ³åä½ÙžêŒãš…Ö Ä"‘£=goæº#÷ð«­*ãvŸVãñ^ô¢álgœöœŽFÚ¡ÑÞ3—P8±Ä8C+Zlth6Sî8Ûsj À+gøÃ·zv˜èš/}Ú86Í}vñ<Ž­B, _ ó�·AâŒSmD§MýdP7Õϱ]mŠù�ücoÓC €Á¥æè°¤�z¶ØØ éFéݲõ/ÜpW`F»ïtvxƒÎå7¡ìûQÎ8+V³K¥ Æ…‡+, Œ·B(•©df€­ !v¬×�j—ê]�qõìÐÈ8?;42þvÁÊÎ#Ùk‹œq¡w!›}�ß ƒŒOeü Ž0—”êŒËß"Ù¥Y ˆÈ§Þgn«g‡yÀR�qq0ÓOô Šˆ Îøò³Ã༾Ë䌣„‡�–vµ˜ .ÍbD⌣KÔDP�IDÑ¢ûâƒl£†¢Mg\Nàóóo�“)g¨zØú“àg‡0Õ?2bÇŽ–v¨#_ý|Ô³a¡À”Ðl}Æ«ˆ6¡›&œt¬«7`ÝÉô¬Þ‰–õõªÙïŒ"`6A"M-µÿkaŽÕ&ã�C 1®›#9‘j_=¸å·cÅ~ÓîY˜=8æX?f±Ôc¼¡ uÈ1.Æ¡V»ãj9N:ÇIç8é;g ÚDÅqxƒ®çt%H†¯‡|¨\i±´­„#C,BnR„$pv±è  Ø%Š‚‰ •`—K@‚ƒ¢FÉ’`꤃»Kœœ\ý¿ïribhuKó‡æk^Þ»¶ðËŸBó¦‡q=¨Q¢ñÒò[&*Hÿ!1gÒ?*87ø=½k´îÑLG„ñÅ:˜Ð¨Ž"�•Þhóá·è4V+Ÿ#ÿ€v OJØ•Ñ/m<:±“ý„{RêÖÙ”?*9ÿ˜iºµ{šÛþö�ƨjÛöçæaÅ×qc7U îÑ@ êPµf‰P#Mûôêúe"}íM�öñþ_Œ‹Â•-sõîA]ýöSsÆøžŽ ãÔ°ØVå;«L<(2²{Ƽ iy-U�ñS-.Ö…úŠl ·ÎO…ýŒ;K �ñÉe[}èpš1¾§#ÃxHF@£¥Ð Áb׫ ¯R‡µw˜q°ª»í¨kË®ž©Éì:-JîÀý~6f™ýl˦b¦Ö%2jò�Ç8¬…ŶO?SÏ?KCß~ÿ6™q k¯v‹Æ/|F.&Ê1ž#ðÈ…'90¾z=ÆŒßÁ®‰Ô§V!O˽ưLHǧÔÂììß�׿XìBç˱Wø/õË„90®­9¯wMxà ›¯éÍÑLÓÊ8 SÌÜEk 7ý^Ft×¢ó2â1®#x„dI¬WeóŒ›¦Åøí3n«~.X"d·K•¸ Úƒûk¨{>® 3þÛ†ÛáØ¾ŸñÞãrŽÏnŸ»PØAEOÞ:€÷Ga®uoùÖãr~àã©Oæ2ObìþÆ¥6Õ_WÂÇ¥w Ô_õÁ{¥$Úãzk m"pãâóK9ðçh¦ieœ* &g7g(ݦQ“/edàÃ2­’…Fù4ª£Øï÷\¹‰‹ }x� >N/«à®ÄETçªäÛq�,.÷æ×ži�— wé,zZ`ˆq,õ⬲]Þ5‡×’O6MÓ±•ðR~àÉV˜’/ÈÚ$Û¯<Ɖøš ·ž ãèÏÑLSË8glñU±…•th¡Ñ¬¤½<^ ÈíøÍê(úý(ðcðÿ~gÔîò× � QI‹ 5Š¥R‰VâÑX˜Ä¸žÜ <3 9u‡h �0Žãê¼ÎÓ0ã”r^’QP›;ñ^ vqfqÂÈ'9ÔÇg\üŠqÐ�ß›ij×Ü6õ}\aZédŠnW1®J“}œ5Â8»ù¢-áÜuÿ}•ѬÒŸUtæÑÍ?Ý÷Ü>ã\ pûózl˜q£ü£wÕkt¿A[u+Œ0þ¶7o”¯˜Ç^–ç¹™¦šqÊHÌì­ÔÚÂ’@R‰ÖPeœüãËÛóÙ¥ù 3~e Ï-°ãÍÍ^sþaç\c[ Ã8^NªÙVu\º#Ìl3ŒÎ4î—-Aâ~©ÐZsKH¨5Â•Ž¡.Ylâò�—°ŠÛ!ˆa¶t.Ë’nÙ,$ЬˆÛÏûö¬§í©i1;Ýž_²óvïyÏéiòÛ³ÿyv²–ìxâ9��ï«Ðî(H"µ¿ã´¯Â·Q �ÀQt½¯ãPŸÝ�È‘çîÂî$Yxg!áÜÏ#õ>°ã ݼû*šG÷¯ÞK†‹‡ÒIéÕÿô™®&t;&8>bÙö¶ð¯á°Žƒ2FìêH»$介ÅpVRòßÀë1p\â£U¤W³K:6›àèeýÝǵEZ®ãÿÒz èN ‹Q"Lh5Ž“¾ú4oi´ÇÛ&N F\}[¤¥ÑzGZ+è8ÒÒAÇ‘–Î8.oJÐqäŸ;.šÿã8‚ücþÈqYÓÁ„Lï(7½™0Åbiø2D"ŒÔªÕ÷‚ZyX­~ñ׎«&0^ìé4^äø–�é>Ž�Ê™Â\ƒ ^ÀIô…þÌ_¡7šLé!:×�ŽK ¹<^ Ži¹ŸãÃsVÈcp'ÃôÉÞêíøõÒÀŽÏíw…wüý;ZÇó3Sx«™éx8—ã-_ðK#Óép¹ÂTì¤ïVÒ+°ú›C°ÜÏñ�5CI}›Ðqøè¸”hrÇ5Ù;�8ep³à8OHŽGWÖ¤µ³:y›Áñ³ÓÑq áq|Ƽ2µm~„,^»¦Ê~Ä 3ÑOÊìGºÒÑæHörü|]9êƒÈLnÔqMQ|ÖñëÙý ¤¨V*•Ô²;v/é4§¼Ê1}>+�N püSm’¯&8Xføµm 1œN¼ðrüq•ÝV¯û¨q¥7¨l2Ѭ¢ª6|3š bÇ×UBÅïEt-1VX÷LÅ™:ºœ¬à¸ê¥‘®|n"Ô5êxÔ�:t\Bx�f�ª]ŽÏ‰™Qž!ëY>Çš°¸FG;ý“9�=Ž_ÓÖg-.[ ªã‘ónQŽy9ž ŠÇÁìÓý®yüéñWë&Ç?µ#»À»Ž¿¯�ê¸�ÇEu|¸¶¾hGÕ nÃ-Ê X­¯Ì g2:9�̼ã.ƒ"¡«Øñ»7ͱß\ÉLªÉÀiŒ°Vc4då•$ÃèÌ*‚UÇ7ºúÇVÃJ¯:¾î û Ç¿¿CÇ%„OV‰LÊÇÁÞ|Pú”Í-ð)R©¯ålç§;a¥£ƒ(«èÚQbÇ•”¥ÔñÙ,Wêq<1»&‰ãÄì1ã¼ÿú.8Çï;`ÿúLs´•ÒŽÒD…kúÎÇñ6pVáפº2ÕD˜lXX]Ç›YÞqØi ‡ Ž7ÖWy_«@Ç¥ƒÇñîË äFÄk¿Èd'Ac¢2UZMùÂ;Îë�ŸÙ9ˆ<®¼:pöxâøZމ&vóŽ÷¡I§_ÌÓÐ÷„›™£³^6?Çëæqzw ybG £m *0š0Kç�€½Á:ž‚ŽKÞq"maDd’ØqÏ(r<˜¬¢ˆž0.DÇ¿ëx.C²Š74yŽ9Zטé±ãüê8‡ŽK‡lj޲îå‚ãBVáE9«PÇ!qŽ‹³ŠØq(‚Ôñ“™1¾Ž'ñŽ�Ôn¢YeŽÛjQV¡èƒpFÁÇ…¬£p"¿¬âÃuy¬Ÿã_1�K ¹¼ûaGGÌ�‰\o÷r¼gù‘® C ÉhMX~{!­õ]ÙÙðõ±Cé=g¼v~û6¿ë��Ç…{NÍÇã¶ê¢ˆãŸhç ¢vN Lx9~?3MG�-wåÁï­ÃºnÃ0qQÕO’V4ڕјãøYÌR€¹œj´�Uø{ÎÂd÷huºíÎbù{NzÎTW:çó¦‹o�ñuºŸè¸„�Ëe}ª Hz‡¶úy‚ã>½Cõ®KhѹœöGG�¾¡ìw½C*n×àøi%a6Ë÷Ç�ÁÙ´wU°Ž:oKz‡Ij)á“ËíÐ;ÛÉ`·ï«;®*1º;‚M„6€ãtÏLÒ!,v YÅ«wXcq†Ì\0A“P½Ã·î."dxŸx¿¡ã6_Ç?ÕÆ ã¢ŸW9=[ðyP$¬žW™7(Å×ñ¯uøwN)ÑLŽkJuú•ã~ñLVß^áäøÈ}{ýžW9‘‚ŽK‰&urì�“mGìV*¯êÄó½a«‹ŠrÏ„ãÖbᯗ ò¦dil—ii]BÙVò¯'ºgÂok±ð¯�Ê‘fæ¿8ÞeÒ´4�.”m�âׯÇö€mßéG{œè~[‹®Ÿ~ 9ÒÌÈAAAAAAAAAAA~²@þ¯� ªªªªªªªªªªªªªªªªªªªªªªªªªªªªª´‡‚þ¿v†BáIbƒðxIEND®B`‚pydantic-pydantic-e28e879/docs/img/vs_code_04.png000066400000000000000000000260101526274674700216750ustar00rootroot00000000000000‰PNG  IHDRéÚ,k,úPLTE%%&,,-(((..!!+4EEE434ˆˆ‰$&>%&ÌÌÌ+%&`ɰ&*P2B$#$%2ƒL.Ř,")<]¥ÜûW)'Ƹ�™ÁÈ8((¨Æºw„ƒ7^™\Å”?„ž;L$%!È�z$-G-.B(/a§sG-,3†°Ä3%%mML-/8z«Ä,5LG<=—`6N°«4Qq¡n­€M9;@F,,ONA9L»9G"&,X=gž'=l""H! Zi›Á/>3T¹©'+u~�t,3i@`)âƒsÈÌÉ6[’zÊôð‡Gm6ÀÇÊ>ReXᄃ{b+"¯ŽjCš¨„ya*V},FnU�\Mbm½–b+>NN1&Do¥^Ç£]Àƒ?ZyY±wX7+LŽã²Ç¯[®Ki‚-E…�iK~¯-7‡˜©{k8-fM*ÔÔÔ2Oˆ:GW‚pT3:!/aƒÃ†e8U:J§©ž×÷¾…¼ÑÒª¹kSž€\¤“{~A`Ù[¸›¼»–·|�4_º¡Õͯ[ƒ}Mq·ñhc»�¹žP–m[c^y³ãOMU9aÄ~–�ozx·ƒ¯^–›¢€–Y`­·©“A‡ˆ“OD@�¡Ž’cq¤ÎE…dï¯:ߎ4›¸/kš$ÌnÃÍiœÍ_~ñË>4Z°Ž¦—ÊË9Vyl!:­‘)¿ -yâ !(ÉIDATxÚìØ]èKqÇñ/†ìÔ1jãÊÙ,$IM¡iÓ&+Z––‡hZ:ä)ÚÚ†¤VÒrãBÒ”Æ�42!Â… £<´¸Ñäbh”§ Â�ï÷ììÉ¿ÿ÷üþjóåò.úN>-AŸã\ì¦�Zs{,ýNѵlVÕ¸• ßŒ¹=}€õç–nó„©aj˜>n•ôU\ÙS]O=ªª–RŸkZ IÌ…ÞÒÛ’(½ÿ(�®ñÿú/*ýÇõ–ž ,ÍļŸ)½²ØmKQ:tRî–™L/³N_Ï–k»ÈÏ_��à§kdzµÇÔ²¹t3R႟È@âˆxiØM½´•KwÕƒj¥à&ðiZ/%dÙ!"§ªò›Ùàº+uÔ¹¦\–éÅ–}X;÷¨|ޮܽ�­Ý^G¤¬:]¾}Ý*?:ÿ¨V>ïÊ–ÅÙŽÒ9a¿n�•lu]•ß‹¦zÔÊI7E«%‹/-pÏÁÆê?5«JéÊVy¥÷©Æš.¥ß¾>`Ê2[öö�)§¯Ùg�~¼¡öxîíÓíIòEB´H³eŠVåI)°ÔÃ¥ûŸ¦ †¹¿¸Åå´eMïšÓmÑxjòÔPÏœn»{mÎéós.PîÖŽ*n�¦5µÇCÏÔnIéµÇ“†]øÈš. Ǽ­³RryjðFîwQä²ñB4ç g \úÂXxrFóòUY˜œQsr­¦&'µJïOíÒ›}z—d¸`Öé[.˜ýpl»ôåv¸µ0ÿ“°9] ÇLZVZ£¡ÞÒq™¬·ôì)Wö¬ÿô.åî9;ùOŸRñw^ÎåGüèSsz¬}x¢L£Z…Ûæ'‹­ÑÜ¢x)ÁÏä��-]�7ÈÐCþ`ˆß–>‰ÒûS«tI܈œhÂé]ÍÒG·K/Z9-þÂ빬ëÉWæt dL1JZ¸ÜÞ[z’_üxég›¥qŸ7"oæþé9}«æm�•z©šr7g¦8—>ÌS-Hä$¹ËŸ¹Dª!‡ÒûÓ×—7KŸñ:¥°ˆYzRãМ?ZºõÃÒ¢ô‚¬ß‹[g%|¹®/¶ºÌsJÓGJW鯫ò ㎴�}Púìš9½ô–ι* y*M7ÂÖ’¿ÖUzúd÷ô¢y¿Tzïôb–nûHéÄgkž•˜œU·wY”Îé¥håï2½„Qzû ôÖioéj.�Œ„¤Ur¦'E»+­%ø°ÐB½]ºtV´|xG:øHês¥ó�è£Û Ì;Ò]¥óE0b@÷ôتŸl�•¶^8ø&—»(Rà¹&l–Þ¼#�ÉiŠÊÐ’ÑR—Öå¢óÅRô•ÎÒÅðæ.cïôR×+a ×¯çˆ ã]Ç:—nãïÕ'�¥“Ã#»ŒÃUÁ­É.£ÞÚe”ŒËâTçšž-»ŒŒ]Ævé2Juï2ªªì.¶ÎJS+z,ž�ÍÄ´‰§ÌÒ»w+Õ´¹ËX©Ê[•Œ® —yG*dP§ŸKîHþ­Ò?)ZQ:ü·š¥/RyAéöåó[¬ô�lé“Ôas¼÷HïÞÜ¢ïå †:«ªùìÅaøŽÖ¿²tg‘ß—Œ„¨MÙšúxé —Û©áåsù”ªª•ª…>ɧòGýºfé-½÷YèÙXø¥¥/Œ¤¨ÛgK—%ý,qéZ pijØýéÒc/-¬|]éî7§àkÍ\�ß}ÈÒ*]™»)¿{¿�lØ�ß»„_Îo¸‘è*}¡±¢G«7õ ¯¤Uõ¤ÑàM½´UKpéI=Vpó.ŠrØð«±Rº„ïäë`jZ�Åå˜GÒjDyekP-¥È§Õ ÊÍ:—>î¦[,¿FF¯<•¶§ð Otu/'ÄÈ¡VøBèÛß77Ñ*Ý–Ü8q掷nš½{ÈÈ™ó­¤\Ú2yØ¢ÎÒãS9tÕ¼”áv[sº³Xê‘Òc¹@2æí\Ó_>³š¥�Kóš¾õr`¼3n'—'7püe.}s)59©%|ÚÆøðÒTÍbKÇùXüΤ–åÉÜÌ–¦sîÎÒO6Æ%u|ÞëöÞé忸æ�…„íÒ=êâŒé\3‹rˆŽH¢Uº_LJé4÷ØYú‹çFé*‹[Ìk,âå‘\Þe~TIŸôiCoÖs‹4‹C.”…šEIçø�\úfùÓ°H×.=ôjJ‡¯£\zKÝ¥¯Ú‘Ïç¹tÿö½‡æÛ%ûü�•�®Ò/§[¥ôœ‘k«t‡<öÓ‹•Wëpoé2§o”/½©«*Ǭ8cÕ§þ¨jÈù4K2âÒ9r"Î�Ó¸ž¨B³t—~‹¾«tZî[�5�ÇÜíò�ÆM]�ŸÑ5§;ôð÷•ÎOå.Ïb‹ùÑ¥[Ó\¼|TpéÃ.[?,Ý%¥/&CwéXËá;¦y$‘·_œ°» rç­µ³tÊh‰Vé=ÓKoé2§ïl•óŸZÄ… ›§À 7Kç¯\º¯9½D |=dLD räöAÅ`Ü‘ÂWÝ‘Û Ãö¾uÓš½i‚¬å¾ù“‡íÛk![rÚHÇö{ÔUº+·÷”nÞ‘¶K—ªSdð¾ºeN/K£ËíþàI&kù¸§��SåÉh©�KëÞVé¶tѼ#]žPœ<§� Vã§>夕h10ˆÄ‹„9¾y—QÙ—Ïßã]ÆÝ{oŒáÒ'¬Þ�¿1�+³[¶»K'‡^h•¾P¼æ“]ƮҕºÞØet¿8lޑƪ²ž#¥%üQ×Í Z)¸»Œ•jÂ,ÝÜe4¶3‘Jµ¹ËX »‰¥e^—=ú](þÙù˜Ð³ô“½|Ž¡þˆ¥©AÃdëñ£¶�¦ŸKŽð'8<ûâzj›5oÔ¨mðOøšÒïìa¶ýà 1eÅZ«Ùú×–nó„ à={gÛbÇñ=îÒªÕ1Z‘8‡ ÊZb6u¦%uqqß·8Š.(™ Ô-$Ž`u¥A²±±º"‰¸"®D"qüËŸ~¿wOß_ëí«Ú[½ß8×§Ïõ~ú¼¿çÙï»7ñJ<é\ 銪¦¢“þ. õªqJÿü4ß|àüXêséYoîúÞ#øÜÚb®J/È�©BK¿vØ pä JQ¤(šþÑšNqºtMOüÞ2æ%|M’kõétßšgz…¬éÚéç–³ñKR*�j)Jj%”ôk¯¶@v;ú™t´Æ "ÒÁZ]¹T‹)Jf%’tÎ<› Åhéôs_—‡‘™º•K éÉ­Ä’>·µG5o<ªQ!]Q ú‡¤‹½lÅ×¥>72n )I!]Qtý[ÒÏú Yk"ÐÞÝ• 1ɱW–­aGú½ÖøÞïKâôk–Wß butÄÕPHWUÿ–ô–óá”±ÞÔ4.ç™ûîÂ)#(륞g}¹{W»®tGº¢_}ž°Þ¤œ2*¤+úÛRò^Òÿ)¤ÿ-ÒU¥µ™UT½›µ‚?Ó›7dÕ¦ÞÌ£Þjènb5óÔ<›h¬Qgå×RH�HºªsNCŸÊ^—…§vЄ’ß±=û=9]í:»¦Ú÷{#·Ú¢ÑÆâj„­ÌལYHÏܕۂ@ŠMöFM+J:�5:éÔªBúõÊoN$ét5C:ê¿!¤�þ§Hwf؇¤ 7ÎÅ~‡7—59nûX “él–*°3;à Ôq�ùœ|ÜVrßÈfN«ãɹ҃e¹Õ {!‹P¿#çÐçT£èó“�§ÙLlO†hÞPWüñ¸7°^j‚oé�ô1¼™ÏÔå÷Ý �­ä¼†ZEÒƒ­R#@íóRwÎóH1•ª`l§µ™JÊ�N­ÂØ970qðZýáãŽ|�ÍðØÛ4ÿ p&ñ’#{”W!Œ•ªtxqšð­Þ‘q4ÖKÐFñ8 ³^ñ;JrÅi¢Yá¢Vy7ÒåI×·OßZ �^²¶Ú¢¢ìŽ®¢KîPÒ›½Íƒ_&¶pÚù®“=ØLw†!]ß^²¦-CІæ̲kúB\çfIÕ}ÉÉeÎF{�¬‘]u„kJ×nd;?\Û¶y®®Ø Š]gŸÚf:Ë(]Ów)²Œ�O�@?¼÷ ] #¬†§ÖZ†n ®éT’H×úÚ]D+µ:cq-K)´Ç¤7›¢*†ZzÏ[ʼ #¬é˜ ýf sÖZNL+ _}Æ Ó”Õü¼eÑm�€�^xÞµÌ�¤ŸÊeePmpšø¬H×ô`7ÒeIGnT�‘�ôgærášì %=£úÎqÕ­f�®›í2ÌœºsœFBúLü¯`–%=þÊÎkÏt_àBkó0ç�Tlr ïÆÎÒ3¯ˆÑ‹®3ö E¤» L*á3FÑ •¤è%\Ô*5¼_ÀQZ3ŒÐðæ¤»s|š'hw™°“¼ztBùçžF@¤Ï†zU‘tèfÖ´qšø¬HIvC!]žôOZ!¾8ɹ Å™s†’>N³g3³š!:@5K�9mƒ8DJº‰Í‚¯É’ެaüª+B‡Í<ޏÑR7ˆtüÉÄé-�õ…jD†ZÐ}Ƀm"�Jʼ‡Z=ãw¨1´àƒÒMØ�¦0Ι„t(‰0C¸…¢ûDBPÖv,y0ê¨8"}'öÎ ï€ß8\qšø¬HI§nüYÒGOªj?ØH$]gUƒ>œä(¤óå­¤ã«+árè0H§�aܤ³.‡ü6sTÒQíÆÞ„è#Ò³ó®…ŽÄE:¯BT–û¾¡¼°nèjO£)4yÒù4ýsÒ›|­[ÅȯE·çóË"ý�à$Sô‚°jõDº.8�Dzz Ñ‹™ï ®7ó/.4 Ñ ÑA#ú•£—ôŸIGr]j„¨ÕYŒÒ’éÆè¤S«ˆÆÂRÒ£G/8‡aÂw±ÙBa¬8—F �^8é8M4+•(z©B¤˜|ž8@Ùù¦#R§ƒHg Ý÷».ÚqžH‡Hû¹¡úoíHuV×Ñjå¡^Ø‘ž·ì�iºÞUd9ôYV·íø\“¥Ý‘–•ÀÞp±‘·J¤«vÖ^”7NC�µvÛF‚me×.V¸U!�ªi¢’N­jóÌš¶�s"�nná¥ÜjÕ#ìHgc¥´&àÄŽÑÃ[ÇÌ*²”�* ÐŽô¾¥ÌA¤‹Ó$Î µj�{GÚ`6xç¾!_kS¾¯d/Ê›éFãÏ–žÒ¸¢_ȳë*õOÄIß#lÒzÃBÇ�â§Œ©LWæ(9œG¤ ñ¥÷ãZ"OÃÂN3á,ì Ð'%�Çl&¼”xíqi÷ÛÄSÆœâIÔŽ!ýPËJ5*ÃÈÏûÄViGZæ±áÙ&5BÔöÎ11¼Q8*i!ìÞü¤Ó)£Ç!zŽ÷J¶i°h©[ö”Ñû`oh•Þ�¥Húqž Š# ± §ŒD:MSpV¸¨UêF¬¤·,{]î�{ê»ÝäXÚ:Y3­á«&^l=fX¯ªµ¦GnQÿˆx�;ÒŠ Iÿµvy²"Ò+•tèPÌÑ š1Z¢ábNþ:2ÓÉ“> Ÿ¿8¨ª“>ôNµ3Z&Xíà’0Òí6Û¯«Á¾ßSo›º‘®[ÔáÄ8ñ*&Òëµxs7-mwjŸÁ/ï…¬™ŽHçÏĨê¤÷†{íý?´¤/t ']‘T‘P(‡b"}ÎÕYš”oDºh¦KzÒ%�b ]p‘n¤èå'3�Bº¢Ê¬H?뻓2s0àþÔWØe_Ú:Y3‘þìºÊ-…ôäV,qúµ|ßñ•@:?e”3Ó¡-º>êbø³ëªÊ)£¢¤T¼ß9BÏtrI!=¹é}ÆÖVmܺ%%¹” Ò3ý6H¿­ˆð »Â%»Ã·’F°ß~ïüP\¤Ãi㮢”$SéVó@È •—¼S§„˜èb‰ZÕíXËH”¦%iUR’ÞÒyfÈ‹,FcÖ§²ÿAJÖn‚IÇ,uRì¤K%%=º²!Ñý×BÒÿ+)¤Ë“Þ¶ÔÞ9 ºëD3�”¹îü«$F/dõÊÆœBÌ0ÍÔ?€�)L¬KÒªª³àÂÍjd‘ o•J’ãŒK«r·GӌźpLîœÀZ2Ó-t@Z8�@,™|RH�@úžöé¯ö0 -“=í™è®ãf:©ã,]?²…•×yMGo� Œ4™hA³º b]’Vyô-šÕhMo•JŠŽ3š—@œtªKUèd™±�ÑšŽ¤ð’ɸÞ+¤GÙ‘ÁütÑLÇÂÅí+fYÒ1� gê͘ÓW _‘ÎÍjAÒeKŠŽ3R8éT×Ì`k8é4±dÒI!]žtÌ-ŌѠ­E4Ó±p!"‹ é˜Ö¢ë#�nÂÔ$_‘Γ`£’N™¬\RÒy]¼� pÒiå%“ñ8¦"¤_KKûóg� Ö_Nt½M› uåË%žtôÍkÀøBº qÑIGsê@Ž“þÌ$_—Bzý“5ý‘žø'zµ9‚HX—!�Ê$–t´VèŠ3Œ½p3�DQ£D¼:0z�½@¾®H¤›Y$E%�Û‰ô°è…·½(¤ÿ�¤;Áºkwgƒî:ÑL'‘üŽ” f{ BÒKÖ.êì2È×%!�|xE#�Û©.Uq³N–±Û˜h¦ûyGª�ޤc‚ººê9óïê CHWmÊ¿{¼HȸE&âÙuDú�õmž7%Ò…/�…Ö{{¸Í²‚?HºªÔë}Pì2Ýu¢™NªîÇy»„tÑ`¶ÐabHúa� Nåë²;Ô �8‚|x2%eIçv@âWëÙä¦ðöÏײ1½bv]¶~� S(é÷› /+¨}ëä)éC—ÞŽ|Œenm¯üî:ħ' ²dÙSïì·Âp{Qó'†².¸qÁòVÌ0ØÃ”| ¨¹À–nÒ¡¢‡þ%&Ó ËkŠûÁa‘ÜÖ៸[ ¾ƒ†E&6ßJ¶Ú¡´Ù꺸DZÎKÐä‰McúôŠ8�Ž�ãepTÄ3\�žÿP£`OXø^g‚Î%o¬/Ì“f­Ò¹°$H÷;+5­h�aBÇÀžë®�…»>ç/•@ºÛÉÍõEL'hE�êš7VÌ"=!Êí‘îtWM²5F¥Ó{léFŒté°0í°©$=ß]Õç>¢¹ëºs&"�[­ZcºÒÅ­'–"=ã)/V‹“¾µ@zµ`‡C3ü™Ê^^N—‰4ð2ÎîËÿx^É^‚)°‹Ö}T\" Áv¤‡%%éeB·Œˆ-ë‚“Ý´ÑB´Ö¿u#Fºt¦hšM%éeip)Œ×LºlUàÍŽ¥–"=ÒÅ«­‰I7HÍ~p¾MPFÙK©hZ�$äg óÑ��IÇ‘H5 f)hÍ­rð ´ENΤçt¿i˺"}Cä7è1SnÄHƒpÀl³© =ç{Ãr”ªåŽÎØLºl•|£èŠôDÚž¤ßX×±¦,Iú‚×1 ·8鈡GI&LC? ]rÄÙKH§¬‹IÓšf7⤳Ã0E]l’Í}ìzhowë%TQ#|¹Å ÖäÙ�ÔiR¤ÿÒíŸ3·€eàJÒ_&!̤söÂL Œ‘ž“¬A8g/Ë1Ò5_ÄaYW BI:»Á ¤³ÃdRGŸcS&�;Ú‚[G#¸‹iªÑIè4é¥HÏžt^¬¶µ˜�ý–'ƒv� КŤcDŠñF¤ë•= ×%é | ;�1›ýÅv4"­3éˆæfùĨæt›¶¬+"½Üú•ÖÀ–¤³Ô‘šxúÒÙáycUoX6³ŒSŸn¡ŸµÆ: dxŸJ?ТVú醇|GtÚÔR¤ÿÒy#5IztB.VÛZÓ¹ˆ¸z†Ñ¡OËõ˜ôéYFw„²ù.ÅC&=œe®OÏ26É’I'j‘JcFÐ^æº$é¸@�˜’tvƒ.ua*I—“iÏð`!Må_Žò= “žÔægj¬O— o„FD«dAÇð�ñ§•"}›¼÷‚}RÍñ )›;v#ÒÔZ@%ÙJ‘þ—H?Ýø > K±sY�ÎψôV_ËZŠô¯ì�ÁkQ‡×9¸„A"’ÓšWH_ƒV]Z!A–²""BJ@Œ Y„ÄC‰�€‚5RR<,¥JêAßCA”Ѓx[¢B/b!ô$ÿg6É®I«Ô&ï£í´Ù™´…ïýÒÂþÓqË=·JuûüÓý˜Lß™hŠ^¦_zß -¬?ƒöÏVë·VÅ¿X*þ4ÅŽúÿôã{v:_vý ”é;Ít…2]™®P¦+ÓšB™>hŠ¶éº¢ŸÑmÓAÑÏh eú@ )”é�¦P¦šbÛ¦3>›ã^ö[zvmãdðÏG¡ED"÷úMÑËt3[â7öîgõâ�� 6åôL~›ÀÐ"¸ž<M^ÝÙ;š*œ€_c|ò‘7j EÛ¥Ñ]¦‰qŠW�Â&T…3gÁgKÓmrصf‹]�º@ŠP•"‡z6�}ö€-‡¡‘§·�ðM”?ŒèG¯ÿjÂ?¿T¦^¦¯g#6Ý#b+%ƒWä4ølez½Hd¦ÙR-q*Gæ9çìt:ÇQs:Ýd­ƒ—}Ó{㛞˜{¿‡2}ÐðL·Ir³äšk;2'9Í<Æ| ÈtæŽ�Ó¬"eJ3M¡ì÷C5-dê�˜Ép¦Æä%‰…LǧÏH7ÆÉ}º`P_”éO’A2=‚·œ;ïÉßZgVfó³pdnYÉ_Z QÔõè¡Y@Ó?á�èÆ ¹ò"L4.ooâmkØSʯY· —³ÏÀ‘ù}Ù›gÞ=$ÍñÍX¶°ÁZ±–°D¡9}…¦è6Ýpjä2Ù—�g¹“O¤ãÌ)Á:d:³eÍž™âhtÇSAÅï3ÃmQä&Å7-à4…ëP+Ó@‡éc²Èé[Röw‘m|��’é©ý«gË£Àb“«¨±o:‹^ï~|x27¿ÐÊôñ‰ š„TcõÒ¡Ù‹W>êîo75’+�ŽáhÁÈñر`Ót¶[Ç6cèüÉWTÚsÐWhŠ.ÓÉGZ^¨�«U”´6æ¤)Ú‘Š�"]Ä]C'7Ý-©xý4‰3MÇ©³ypJzk{ÁA)„ A]H‰=¦¥¸ë}däDãÁrØ£¿1Ôñ¶£` ÿ`zbn6~÷äs€L¿æš‰- Ò‹�&-yù|#Éîß…L�‰iîn/ôœ¤8»ŸÄÒšƒ¾BSt›Nš“¼d®@Ðܼª×L4‘ÒyÊ€¶¿5¯™Šßr¯%ÒmÓršÞ½=Ýàëy�z÷t:¼ŽO±¾©éèÞp8PŽº_\¼r­ÓtzM·n-bñM‡ñ3a”÷"wñõ˜•{ÀÖîܲ’¸±Œ Gñ1Ë:ø¨i:ÇÝÈrM‡Ì1,í¹¾BSl0 r˜ÌÍa—Ök•íÑd:3]÷û;L§d71¼¥È{¯½tl/­ñïì›ipKQǯ%2cOc§ò”ÐfDmµïEE¨}_‡ØÆ:Ô–)&ÔN©5–Rjµ�)»ƒViËð¡ÃØ·ÁŒsn.7ñ¢‰¥–æý>Ü›¼Ü÷¼f~9ýß“ò”^Pî€èN¢šŽV2Óñn+·‚´ÁM×G?º1 â1t|':h†vJ/éIi«‹DÇ—mwƒ™Þ§ô·šŽçå:ˆ„¸Ÿ¾3 1[úéšå-Ù¥Õpà¦CP‰Ä€Ž±¼1�ër¶ÞÕtÜ‘ê–a“¥~d3\Ù¾™«éx• Ìù4ï¸ÃÊxŸ¶.9]wrÚ±~óÖiWu8f¤¦ëNv8o¨º^…µÜô)½äM{•~#ØP lPˆüР=Ôt9˜®]µ²WÞ†Ññr§éíJ®îSú5½š>/A5ë:Ï“v¤¹n:ìAAÖKÙ<µà2àf:ë½@?§VÆéz7Ó±ò·ˆ¿ªn9K´™¸‚ÂL×aN7xøêˆ™ºô^¶=5k]Þ€mmgŸ…eØ|°ÓìjØ@©‰qƒ™Óðr% ‡ÒöÆ€ðy…°“‚)´ò6\u%”ÿC³ ÍžF£Kõ^úƒØÏÑ­êTèT<œ=ˆ�—7WA$¸é9Ã^ØŠzcº�äÊp‘ÃH¦ÿÓuÀ½ƒ¿|B2ýg�LÏiÓ½/ëÌy%rÉté¯vý"!™î Ét¿€HH¦ûD‚Q@"WC$þ²¿ ñWš´W«g_PnU«GjÈ/RtÒâBãŠùEK>¼¿N\iq|ôÏÜ0R0f)ù%ª8áúï7½È�—¯6ÉrÓ­§Ãõ_¾º"£¦?·¿¤I{ÇG×™éÜÁ¹$;z ÇÍ7ºœ¥œ>ѳé ;7`�^qsI“Ôw† ¶(«òD™{úáqBËŒ¡Ô榛/m2…yƒå˜!ã<<_³ã è›…†Žåá?ÈÍà+�'F¹™>ìÊîÛhúÅvVÓMn¦óS¹éü3¾0q˜Lš&`;ɱ÷Æ95Þ‹U›ÚÆL? *¦©Dé%¨%–›18¢5AÓûªH`�Ö_Mm�' éàw·…®¦?æ›é'Ò@´µ+ŠÉØ¿ÊüÃò+XâG)ÜLßoõœ^Ø#8\´KQžÞ�ufÔÙ¸ÃÊL‡í¸ò03Ý¡©)dmܸç(+½ÝÀÔ¥¡R«nH11sð`ÎÚi qh(צó³ŽBi÷`:‡íÐúMWâ‡0q‡c©À§hÉTSf2Ó™ä™ðª÷œ^xa¥¾ù ¦˜Þñ«é¨uc4K¥ž?n:‹3žÃSñ�$ºÍM·{Îé2ˆ �pÀéb¤hËj;³€ÀQf:JŽº{7ÃÜWŠó:e…�Çrº  œ+FÇ‘øó,ÅÂQZÏi]7ÇXâgÈe^AÓ!Ç|kz½o2=v|œ¦_'~3=óV¢e›Îf‘龤—üëôÔä„é|{ÌÓ‹+fÔ›é ÷Åb¸Fl:ÎÈ›Že¼–j:7�½I<½¸×t$(£;Ž)�¥…³:<ÈHr€¸^Á³LO»™¾{‡\ªébÓ©GE·rÓyzaó·éÅJÌ>½€Çá¹éâôÂMç9Ýéì[oé%Êùº(½0A—z3�½¬wpÓyz�ñ˜^T߸-W¹ÜC@z¹ÅÒ &†›.†çtúû!E·¦´ð·žòm27v¢Ñ!úv‰8gèû=,†rÝ Ñ) r¶Z)Ô¹Çyòxë§W¡™é¢)7äßè¼Tƒ7×Ù',1�†›ŽŸ°Zyø ƒMï ˜ÝW‰û‚ñçc °{ÌÎt{, *:Ç®(žÄÓ îHkÓ)Ý™f,‚µ°¦¬ŠîHµÎk-] âB…1명*0R�Âw¤‘·ÎWñš 6ýÞyƒa˜}ª°I@Óõ— 8ãf §-õ|Êépºàž^.ÕûŽéÏ÷¿¤q*¦ÝÐ5¶¸wk¸én]FulçÁšdõzg—±¥ zkóÖe­êìR0Ó!¸#°=-ˆ]Fn:]ÜÜÙeÔ°¯ð#mÐeTT#Xοþ˜ß0´ó’“ËœSˆSú¹�vM%Xlº€&úËí,ž^\ºŒ†9p�=ÎN¤°ÃʺŒôòI´ËÈiT¨6q¡Uzr™ò©)n]FuÜ»ØlL7Á W-õÃañ]ŽÒM*õ{þ$se>šA§ŠóG»Âw¤bÓ?¼_J$þ á`¼'Z?-Fþ#”ËùADäHÕw¾#õž»'ü;Rÿm§ÿÌóì{U�Ì,Eþ#B£k�ôÉÞ~ÉOýÝ‹ÎÍôß ÿ»—ÿîýýÏ ¨3¿ÍÕÜ´Ñ�'B'“·Y¬“Á˜žŽ#;ÂGAÈb�½�‡R·ñ#ÞG!£?}Ìåo½Ä?Á]p›ZÁGtۜ޶xŒÁôÈO�'ƒ§ŸƒÑ÷³>ªF?F"!‘³/nSK&ƒ±zê8:Ê葟¥o££ïg�þøiw¬‡ZYYY {L<,,pš²Kw¡“”“5,,¼»¶J -Áéç~~~+>R&¹º»8Zƒž��²°‰E,-zE'S¥¡ÆŸ9\‘lmm±•h‰]9f:.ÈÉÉ.?h.5_:ÅÅÅ~£±¬«¬ NAAA?=>989¤¼¼µ´©ŒŒŒ±›p®‘e<444³¶¸+,G'')üþû¬²µ¹·±3R„ssrDDE}L1_3-r¥Øº¼�UUU¦€T-.L1ŽÆï„©·yzzkPNAq±˜—˜�kJ8=H®sBàçè�«±��‘°³�O,-Ñçꈈˆ``_H?7Q3.éã¾åÌžGmœQS‚vww0Eu-,>¤b0U) ççàçåÒI€º°¥–µ¨‚³£z[[[ƒ[LlB$ðõ÷öòêj™ÌZî˜ÉŒ¯!<Ú¥U%FyÞÞÓ�7VBxèuàˆÇ˜ºÉŒ™ûxê�c¥ÞMÕFûF5ú^z“ªMþBpd�Ä BŒª")ˆ@„TER#€1¨Š¤ FbPIAŒ"UbøÁ>“À0;æßóT M<F##”�JÈȳo!JDaÇ_/^ ²‡< ‹sh/]osx,#±uò0Â2�9Ø%È e½+3BÐ@‡Â*¬È¤Ct±CZ KaP±oCPÑvŒ CïÍØhn¶²µ1Âû]ä{èñÏ÷” #ÇMQ%ô¯I*ì…ÇÈq»Hèß“`/š&bŒ¯Iµ#PõCš‚ )›xÍɱ—‰)‰E€H ×"l7‰ñj½©ç/!ãh3n$út•^ b¤§ôhÖ5õÛEøvÆö£œ^–3kE íÅKPaEðÂM*¢1B–èÙ€µ0βwMÍ8i#{3 ’~ð¿¦r¡Äèk]hÒè¨é7gÅXŸcpM}h<9Õ;y Æö#1!Z%:8&¤�€˜ôc,ÅGSNÏ`ÁÄù1&i¬"q”´#D’,ƨ¨˄gäÂg"F\5Pçy¿ñ¶Žj¸±mèÃD»AŒëec#Ĉýkjk³Äèæ+ÆŒÍøô 9}Æö£°š��‰iDòcLMÁ55ˆ1ZR3²£:ÚŒ%`tAâ1r¡3cï�•µ_ºôÅÚ6vnf·�†e¿b~²l»9õ7ÚYûý(Fz”}[Ÿ㉿�1'è ÆM€¨P%q 1¦‘¦˜þ4~ššǘSc4ÆÂŘ N$�0Xu)ÅcäÂÍ ctƒF;‡Ý×Ô³�zWÎÀØ~b” žH@%£H–4ð'?F&õ3F3ª�˜ ƒ%âÄ1@ÁÁ E m¤¢Cäp\˜ ¹uÚV÷»;_ŒÓe ÷7›qJNMF€Å8ž8ná-äÅÏû1Ç-<þªìØ;ÓP†á/'­K�ã!K15šÁ‚R-™ì&„¶Ð!ÐÁv©Å ’¡u*¨SuÓQP:¸¹¸89 Š®^qTÄÁÓÆûo©~ÏpèO;´ð¿$ ÑŽ1c$*ÆHTŒ‘¨ #QA€ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆèct@ôq •WÑzøãþ†3�8ôò~h�â�Iƒ1Òú ]|©¯WŒ#`ÜàO#­¯oÄX“EŠqëõ'oîÃÞ»�^m»ásÝfGÚDµ�N]Fe IUÒ1ñ¡k»}ôb{Õjªâ†Œ|Ûï#ô夸·ÙôŸyã(¶£!0“vµf³y x7¹s`î£å*9€™Úq íT¥&d¶ë7`IZÛzõ—{.³‹0˜­ìÏb<}ùìµcζ7ºÏ^ž8óüHrßÁäHÇ—Í1´…![Ah›ð¢J ¼z?jAØ–0–œ¦Ñ–!Jj´QSµJ¶Q!¼‹±c5Ùíwõ)´|Zµ 73Ú±‡å²wû†ôŒ� D“¤“6ÐYhjTUMÔÔ(™¹"t�T™÷g1^½ôdpîÂNœy¾åÌóãøZ6CãÖ<ƒ—bꘌWw¨zNÇ€#[€B' MÿœåG´Þlù+ATËfrIS´U×3Ÿ:J ¢×‚îrµìùR‹ªiV��·©ùºGÓ|Ïc˨&Bº]¡Ì?‹qÏù;—.î:µA;yüÛ1z‘�Iß&- zÀòÈc”v ]—­üÛ•ú‹XÊ"Zd/ ÁûÛÔHÅM¡ï�>ĘOðçmé¬bôêù²cVµµšÞí/cìµò=O=¤Sk2öj.~ËÖ§÷€=§.ìÓ玛ÎéÚ·cìV§)л%Û_\ëeÛ‚Ö‰ç«o§ß�ÕûXÌÐ˯ŒFc¿j!Ñ1깚 Vò a4ã}ŒžÍK±d6+_ÇøþÊ/k„åúx€ßsîÒíÒùG°ûбÿÅ–�/¶;üÚùvŒpå°¤>ügÌcD¨g(*¾5†î-cEè-5 LaI+HBèšÑ´„Ž1è ÓîU½¢ò Ž«:b¬¨A’u+L ÍÌʤ�ÎD|cMYÁÌì¸ïHÙÁï9¸ùΆKváôƒ —/Ÿ¦}ôfßwb+8r SWQbÄ" |[NT*ã�ƒJ¦ìØÂÈv»úTñD…6—ÄÔµe$ʱ·€[Rêù¤ÇbD»®äHŸR6£+w Kc|ÿ4U¿î�¡† ZoýÄ·ð`Œ´î{ """""""""""""""ú‘ ?Ï$¢_""""""""""""""""""""""""¢ßV"*:ü'JQ±1F¢‚`ŒDÁß²wîAQUa¿'fv›f—G°±­³Q"±뚀,DB,‘l€à°Ì,2ÀXB`�ÒÈ�£3½HQ4AÔ¡È”@°&Ìú#§—Ø L蘊Sš9Íèô°úÎ=ûvÁG€×Ýï7ɽçœ{ÏÒÌþü¾sî¹G(#‚ÁÊxŸåeD܃»(£ôÁõ“7&|žÈNv~÷)ʈ¸3 ãÜ$_ Ÿc*8çd}ŸÈMFÆpü£"î.R Œˆ;0 2†›Of–-[¦0ËÀÝ>ë 0f�d¤¡eDÜ�ÿ/cáP;iÍW˜dôæƒ[R=- ñõ�šŸq¾iü„†“>šmè_ÏžÏ6ôhæ=8ŸËêÊnéÐp;¯dê F6F w¥á�ã¾xŒzX8�2"îÀ4Dƹ]q¼‹—9«ŒÀ¼3ñ1=cú+–p[Ò´Ê…´ìHx 2f„ôŒ+mƒÓܾíQŸ>|ШTpTÀM–ñ"ˆ‰2"îÈ8=6¶¦'ZÆŒ^^^-`Sès0EÃ˸dŽŠ=Š-飿K�•qÞˆƒ±i�\r0zÉœ" ëâk[QFÄ-§ÃÆ¢ý=‰–RR£LFÀ¶£©é&ãÃ[}�4 ÈH �,­;LOr¢æsÔN^Ư¢¹„®ñ ʈ¸'Ó"#øÇ\´KS •¥q c#�ŒlÜg’&}"ÏlrŒŒ_ÑkJiV›�i*â~€ŒÓ ›M½�kÝ�˜yjsš6EÓß¹l@c–±oT‘p0ÚvÌÈd,¬PdÁ´0Î"cá°‘»3VÞÿ.{x€ÜKˆÙq`”Ø(#ˆ 2cÏ£®ŒæÂýó;Ïeެ‡ÙTߺMf¥M¾ã6³©fáR¯‰OÙ£ “‘þXÏÝ>áUý•Ê€œ´¬áFÅ-˸=3àÖ$Ù®÷&vDfŸ˜vAÄ—Ï®â�oˆàhE×¾/— .ˆ@—ÃñƒFFk‘âN\Ì»¸9ï“wRÕ—¶¶)n”±à\„ÄPס²ÈÔLˆØ_rÅ!ê88ô)Õm5®¤A/U‹ÃˆSV–ì‹'¤ú€èG2)±«EÀZ?‡[Î$dG+G Œ®‰@e䤖åpÝQ`„�<Ö¡)üõHáå¿57Êè¹M½hQ¦$_F[$ù·!#øÓ¢ÞºÔ *høc”8ç]QÍ.^··eSÈX«–Ë7”£Œî�Pe 4ŸŒrwÂNH’ybóâ9g2æÅ“ØÁúëpƒª$I½Ö_â#¯; q %ô÷Ï+Ù†‰JêÃØçZ‹ŒÌÚêá¦LC'È(‘äÅÇJ‚d»›2Õôî‚álµþRå�>Žå˜¢}¹ÕËE¢oŽíYc$¯‹ÞKøáTÉÞú#¯^[Þw †z §¼”ÏBKºŠl9YröPHx–yû†Nž½Z!ü‡’³%(£k"Tÿç/>»ŠË<äÍ5oîïHœLFðOÝ(V¼·Hê^éPùKê.vç‚k-#º�$¤ê_j’äS¥bÔÁ2{³V¨•J6¨Ö¥¶<ÿ]%•Ñtwuˆ¤îùÔ¼Þ$I0Öjž©Y%]°wõíòš]Õj?�.¨UŸ}s½}�·îôšxSdôñi$+E{#NÕ|@bå^pAØr¾¸Š—ñ£’½™§Ö�ž®¹ºetQ\SÆ%om ãæÎ1JËæs}¯=µÞišúè ¤©‘ƒ‹uÛ¢Ê-ij_ˆÚ[·•²1!µ^›3H‡„D·Mot”1/ž^ÈÒT^FvwBj”_4.|œÞöý»`Çðc­ß›«!:îË•.X[™pºÖû Ñ�Pf3îß–]½ÚÂEåT•%TÊUY¿Ô¾ïqY´ ŠZLS]—•Qe’1¼xž3%l§`E÷µÁ|ë˜Q쯎¿´¤J’OeäÏ é qo�‘:g'#»;ªœ6°(nyMÉj¡gûš‹%ïɨŒ4Bæ,X»²TkšÊËø:Èz’ÎçTRß„ˆ G]»ˆòãëpÊ誸¦Œ»_ÜÅEÒ45ôŸºÉÒTžª_}6Ê,2BÀ‹‡ó6*c“QšZ_IœËÙÉX°BÝÿrª92‚€Æ�W׬Òí�„ôÝ’³µ„ÊèÙ^P} NGWŠÞ;ºgÍ¿×ð2Šß½M#cÁ/5‹yä‘Ε%;*QFWÅ5e¤KñØÉ¼ãÑä2ê¶IÒT ›á¥Kå&�è˜ñшî\‹Œ`ŸÁ›MàHê-ZÔ`##$¼uO4ØÈHÆÎEè3óz?ãÇŒºö5ÑÅÓ#IØ#úFKؘqm%D=Ñ�2ëlª¾Á"cmËÅÕTÆ«ƒ%µ�Ë¢½q¯—Ôn–ÊÕµCŽ]•±ð³ ]Gbáùʘ š©d+i°oÏ–ŒTšuª†ùP˜MµÊÏ2d&uœ�ŒðˆR¢7ÚÈÈ ïöc³©GiD4EHRM'OAƳ§j5ÀU§APësÆÚ“Œ²ª“%5{¿Õ6Ãáj‘Œ$l­ý zˆÎ°Æ“±ÔSÐTIÄEe„‡þ]ruô;©›ëRó“¯ÀÉúúbÆéDÝZ#4HAwŒëÃ6p\Lý‘‚��iW8–¥šÇ‹ìÕbeDÜŠ•Ñ�íÛ²Q¯ð‡7³4Õ² œ7-ME¶Ñ†UF¶·ÿŒÊ¸4ÅÆ”¥An—{JÆ¢@Ä��V¡ððÁMü.U¬xd\ ¢�ˆ°˜á4 !ðÚ†DºmªYFkddÅÒÔ—1ÅÃÑFâ”�0çu7g ‚Ü*Ke7ï qfCÆp¯FŽ‹-;2`Þ“Ñ2f´Ê˜Ó¡¡2ÎÒ޽‰TxxgxÎñv^wsB‡éJoéJéƒ~Ä9]°à\Dû"S“¦%È=ÏlÈÈÞœÈèÊ7šì3ϦZed›À1 ‡Ùëlɸÿ÷÷mdŒ±¬Uõr/'ªÜ¹Œ¬ÍQƬŽ8¶f%Éå^ý‡-Ÿ•>¥Œ¡õ��ä×Ã7—ql#.ru@Æ™&|nsð-\µ;Îñßfœ%ÇNÿ�l#cl¸Ñ _ÿ¬�âEN!cä�2:i-XѶ´x»Þxk2*ó­}!®ÏÌ˘‘¤?1µ\ÛÀe˜ã,Éxì—o*à@̬û-Þ°êÎ%ºƒFÏm^™úïoò�å‘™ry°C�îJ¦!˜ÖFÆJ}Z6š¢ÚnÏÎ4LhY+/c�Þý{àƒà’Ë F)}ö Áraô«" Ð!±R.Ï‹÷gijÖp¶×ç*ø€L~ÏÖê�FÞeÏ®Là R•¦âoc›iÉÇùM\iÍÈ“Mð\· .n­×Â/£ŸÐšJ˜Ø ½µ¨°;™%‹ìè¤G›1a‰9×HrÊr=祼ö›‘D¶.I‹Œ‚æP'=Þ›2 ·ñm [O$ï7Ze+ƒR¾( f­LF°ØÇ;Ê[êµ1é`�ôøá”íe~YIéôRè°мŒÔ_“ŒC#�°÷zuR~X±ÊFÆæ´Ñ�Q*£ù¶˜‘S†øHJk”Ý/+ÓTÍé2±ü2É_œ[l*DhHF;fKÆäËû{ØÉ_YÒÜš¦‚o8è_û6Znú±4վΜdòm¡´¾ç¶2ƒ3‹eÖ4Õ�)o)’Ñ&ÿ|kš QXz<žPAME{¡¯8ÚQuHz%!62†ŽtÂËÈn£×ñò²~#£ø?ôï•RöËÀǰA„†ÛÊ8ö/áG{7zØËF]?Ø ;ث̧âQ%`ÚèÎ¥J9ÖÙÉØœN¨2av2‚*aVO$C+\Ùã ÂYd„K!X2»YÑAFÝV9°Aµ°ËçR¥UFÈJ›úxÙm:ˆÙV¡?þ ¡Dû£Â²A„†ÛʘüMO·üþ¥‡£ŒÒã×ÒTbåD©·Y¡ä€/ŽuìkÍÚœGFªJŽMšÊ³ž½jiÌ´ÈhŠŒåÎe¤5Œ…Iéü>uÁ„¹\=Un•þ³•QÊd„~‡‚hôƒh ³Tâ¶2zk¿�¹gWò 2z–ú4B¤ó)ó3‹Gb[6¦WÀÜÎÆâ û:³Œ¬ÍfÌX5Ri##ßj•‘ŠæÓFHkYoñ¨I#ó˜Ñ‰ŒÐ—¸yä§¥Å*ñc£Íi|ä�êM�@\\!n-ó³Ê(öé,V:ÊÿOz#ô—ÖY’¦b%Ï¿"(ÜWFx¼øoûÛ&ˆ•æî\:å™.³È(ÞÝ$×Ñm« 'ìëÌ2²6:ÙišMÕ�뱑‘µ294fuÁܨÙ>6›êLFè‹Î¦Ê[²B`†´×´ À0~‚l‡Ú�6i*Ôgë›Ëdd1[Ù’m€ `VJø-Ž ‚Â�eôx÷CÈTÍ�Y%°@9C‰â€Gà¤6Ç�[x.ŽÉm*¡‡BÄ�e,~\¼+2f%ч�3„J=<�´#a«¾HÆd4•pÁŽqS�,G�ÛeÄW¨ÅMeÄ—‹áá®2"ˆà@D  Œ"ÜKF0(#‚”Aʈ eD�€2"ˆ@@D  Œ"PF(#‚”Aʈ eD�€2"ˆ@@D  Œ"PFä¿öé€`�ýS[ãSè2B„Œ!#DÈ2BÄŸŒP7Àu |Ť,PÕ~IEND®B`‚pydantic-pydantic-e28e879/docs/img/vs_code_06.png000066400000000000000000000313121526274674700217000ustar00rootroot00000000000000‰PNG  IHDRPÜI_°=ýPLTE%%&,,-CCC..!445!+4ÌÌ̉‰ˆ.%&&7J%%,$$4%&sc'%%:`ɯ',C…N/(/](+P7"#C@&'I&&*/64UŒU)'RRR¤Üû›e8-E�, [Ä¡†°Å(?n*3iâo¦rF.\Å”);]"%Mm7*i#½–a\:,n Ãd–¿]޹ÇÁ˜…v= Ä©v™ÀÆPM@±Æªª}JN°«Dp¦O�¬~‚‚Â�j]*&Oj�G.*19&Ç�z…‚i=:>Hr7�[6=gž¯ŽnbH.²È¸T¹©3Pp{D,xÇô7L¼¿Ç˧ƾ:_•Æ·�',v9F"12D«ºÂi„"#WÊǿĿ¶/Eh{¬ÄSˆ´@‡ Ã³‰P4'C™¨‚sQÄ®ƒ,=Q9ANL?<¹ÂÅe/$5\š0B7‚6(—¾»=v~Y¯r�¸ÆIt«+V~|X?§Æ¶m‹¤jNGCd*LŽã[®ÃÅ�]Á„>Zz?�–09ŽŸŒu�ˆu=10ÔÔÔ/aƒJ¦©s‡…I[l½lH0H¥cqu;ježÑ¹š¬ƒ‹T^?fCŸÖÐU©†VAWàË<¬Y4ÕgV‹ˆ¯nt`fQ§‘]]“˜Wa°î«9Ú‰3žº0lš%…m‰¿ƒ® 8˜ÅÖ³„®Ó-²‚»`™«iSm-Y‡@m¥/ˆIDATxÚì›1ha†¿j"¨9ð¤&,4G…¦u Y¬3E1‚S1Њ&4PÑrHIˆ¶·„ÂMɪƒ�B%CPÏ IK ™£¡ÌàEðýïð¼hŒµ6Éÿ@ïî¿ý3|ßw/„8‡Ãùc¾ìì|¡”’R””ªÒΗ@Ÿ°ÚVR)…öËÈK Äá v;‚NІPwa”ý*a¥¨ª¢„÷/ÔQ Äáp.Ô¤VoEhŸ\ðÎP/bYêÎhá"B(C&oD±è §/BÝo^r¬PNŸŸ ®5¨;Ã/Ñžpjk�ÿZÅít/uÄ%¢Š˜û¥P Î…âôI(áó3W„êÍ>…ʸOĤ`¡äL¸Pœ.ô[(!_lä»]ÝÒv[×iÇæ9,«í�ZËRÌ•bYÚl�0›E1N ¤O•åÍå,ÄÍœƒ\�ZBÞÆÚ'2ÒD1QÌãXL–¬me}·ÎF¾ñ|a·ù|·äòM­]¸H$ŒVë…ˆ“/=ßm•\Z�±j ¦LÊKæ®4“E|/tCn@�Ú¶m¬˜ÀUO¤Ù)Ë„Ø .Ô 1·¨¦¨©TjÄL÷Fì}íP0¨ðaèÌg¾yg^{ï¹]]{Ò޺Ѽô](ÑOcRšÆ¼6,¢a¶žóA(WMu¯üä’‹6ghÃèPïPã¡¢êîœþF ¡šª¥õÂ=!ߊO çi½½e۾Ȅjm?}·K‡b¦HAsWŠ?N»Õá»5pc ½hv©’ åènT¼AÈŸsWDUÁ“qï jÀ˜»µ27GªªÖÔðQ3Ý;Úw¡JnV#DO ÷nW/¾+Ü»‰7`åèÑ''ØÂþô6AF}‚Ù å×Kõg¡Æ è"ÔšK[�¬F„ü{zãšðg§V"‚Øž_¾CI 2wen YG(³¾½9Ê !´Rg"‡Öг/ƒº„-9.Ô2½<�|a'%¥’I¿…Š…~™è]5ÒE(.q° t)6õA5ŽI ³�Q°‹Ðî'¡â¸Ù]¨U§¶êÒ T‰­JNvÖ­Âկߡ¼AsWš�7k ¦ŒÈˆB(—/:ÊꄲBhÃx‡šu2\¨d~y~>i'5ìþ—B]î*Ô°7ˆÎ` ….•Ö?ø;¡ ÄÞ„‚&pÄÜ•è˜òIÎ:Œ= uVÂB7¡¤ %•ééÐII²P7ÛÆÈ×E¨Ç6G]âP  ˜'ÙaBÁ.Üë*Ñ!´ þN¨Wùª–‘¯·PØíÛ®°« Þ˜Báhù¢ìÌF>ÿw¡<Ä$^?dýI ºP,”Öšž.B‰w\J³ra�÷9êMÑ&,ÊV¡PË6¡3”H»WÒ½„jmÙ?£9Žê¡DÄ"À³C�#_8.ûÍ])Õ8â.Ù1dá…†)”JH,”HÓ¢Jxnu!Hz€qrˆ8ƒÃòëäë¤ñ5BOLM=zz8B™±ùÏBc²·¡?"gœ*KFlŽs­lŠ&|,6ŸRP�Íe36g¶Ôk¡šZýÇØœ †«�±¹(²¸ÜÜi9"ù–Ž'p‘6…²Ææ�hâ[l^c� YÌgpXNÎ'oïP(þ©§SS}éP{ÇLÓÀ09XX(ÁáüW”P±٨ƒ ÅtJ¨u±$âBqþó�¯ìÖ± „0 …ឆEΫy¡¬q›x»½ ¨î‘ �ÉRþï5D¤ý¥ÜU¡•…U¤>£æüëÃ| âf¥{‡„]BPXSVä9Ó2+?©Ãyvwå>4ý¬_ä!IPÀ<ù€¶ ( '‚šöwÖ´OH¢q_â_ŒñÜ™ÎÜÖ)µV‰Ôô˜�¹çÞ3œÏsîQ)ŸÜ”×%Ï3‰¡¿#åÌä†h½Xç<ç+ïš�©y&s¥Dàg‹Zq˜õÄü¾½Q,†ƒd™ßD…ò“_o§¥77ú€êº"@Éõƒ”gg0ñY‘Û-cš.|tæí*{ RŸ‡/~žŠB¦WƧÁ¯»êa�2j�0CÉ,žV–ã×q† ;ÂgY­¿�KG GÊÕS3Ë"%qª¼5�Šì¡H†ZW‘_:v¿`ùÜcñ�xV!Pš}±<Ó,ßsZSûâÛÆ™ÕÚ?¡Ž|>BÌ‚�#úrÎ_…jÿÃÌÒ¬�kÄVä²Ì9ÅÓ`uðAËŽ‘=Tâ™ÚŒV1ÿ…‰¯š™7â�u> º®P|òƒ˜T0ζûA´Á¨TZ?ŽÖ×H€†Ñ~aÓ (^I@]ƒ ”3C:J']ŽO @¸€úˆ jG¹*pu(Fw»`N)ëN€"J¼y;W'NŽ8  ›ngáJŒ„ÖÃäxÈ9O|9›ÖÇH®q¶ä j¸d9ľ)ÃúT…ò“ð¾ásêr|@u] OcJpÜ&0÷84£í�&1ÔБ‡ ¸ÁJ ÃiÆC€"Á¹AÔt ÎNx8À‰#å�­�»0Ä} ØBúyÜ‚¡5‰Å#b]Ù•yWÕ½¸q`�@ᯀ%‡>®ÇhˆuÆ,ç<ñU¸‡×�‹ƒ®q¶PŠ©mû#Xi`¸¹ùèDüQsBùI8_éHp�Öÿ>P»­Ö×ý)5¸hŠýí­µRÁ+__ ¡yŽË¡he�K Âf†ò0t¨Ä3¹´p´G@9ºFl!ÔëzCήtÙδÃ]Åú ŽÅx å&P‹0.…ê{ Ö”8jý&Îæç�x”B¡P·ˆ:¶­QÀP�E+%¼ËÿLy¡x ”Q•ññeQ¡||†q%f"0ŠeŒßÏ@Ít·ä“‡�cÏúf\ÆÐzˆ+l<×} `~<ÊñùJlÂÈf¨ç@%Ï åŒ1%•û%Ÿ¨�ë�ÅùJ\#%_,[ò9ºFl1ˆX„oÇ’�Åû ‰æél Öžˆ\ ê µÙªãïK;Jý`6µ>É= ¾zgŠÂ@‘:…Ÿºð‡lS y:ºŽ…B²ndfœ«´*0ç�ŸÄ­¦4±Â?¨ƒ8ƒÛôÊxCÁ àùafÆ„íAN€x´Ã¨è‚iÝð.Î\_–À?ÇŽùQ~cc‰¨°´©`ê.R^>v¾¸R‚k XðS7Æ×ðÃé“ 8_‰k¤)15³tz‚À5Þ–|î£exC”<9sN陃‚¦? ï«fC 1ýPÊuÖÈs"(ÙÊ+ÖÈëp% i·®CìëàcœP O²¥-M–%¸àS(˜’¯7Ü¯ÑÆQ·ê -êjœ�°ºò_ôÅ@a¾¶ÔK©ä"‹ú¶y H¡^+ck’`K£ÝR-kz @ù7YÔ÷N~u F¨W\ ¼>`Ѥ{H)ïm`Z扱\|òms¹ÑdÞ–C€b6+æ¶\;  ›ëÐ6WâVòD€"š‰í-+£j$8›Ä|Û¼¢Râ([ë}!sÈv›Å5ìVÄÜ<œ ZËæ¶¼Ì…kL"jcb´î[§·tÝ” móý°@8™›[�E|לµÍ®ñ¶äïaÍñ@˜£L1[¥ôp-+ýMŠøz|ü� 5ïäžþ!qµ Á@ݧ¨¸ä€ÒáH/Ä@m±aO€úô‘ŠÉX"[jät–|¾Œ+Õm�¦×å­(ó¸À )(¦Œ¼†í€úþbèÿTñÆnó¡vïÑsZu*P¿ýoù ºPþo戴§ú"ÏD€’�¾N9vÑjµPº“†Ò2¦l7NȶJñ´è„UÎPÁÅ@   ø!÷Lq”6;û8¼¼É¢PÀë²Eêg-q0TÁ£T¨(�#°Ä3 B0+–V”÷ÉP‰ìßçwŠBL‘ (Ÿ l4퇒ÔC¹jV{?)ÎP𣈔v8C'¯³ŽqØCEX¦xÜ€É}5�ÚkoœñP,@IþTê¨ûÂEþ‹XÊûäûïÿ£œ•|pÅÉÃ;í³Yì®î‘:tùî6(AÉG€"{¨Qç¦Èî4 ;¨'(M™J¾öQ½ 3håÉ·ŽmóÞEk¥P‚¦  )‘Ùª³¶¶ùò¥›D˜9ÎL}Z²édà}ª:¾f6To¾)±)N¶öPþI'²UÉ-L©¹6ÙÒõí¡|òZ9i›ËVZ­oáØnx½€`l·»,+ÛqÝ(*ÂR͵^�ÉGnk› o±(àôi—­)Á´Ëç'©ŸÃPytË«¥¶¶yKÛ6oá¶yÒ¾mþì)êU¤`^ûúb•(Ÿ~°w®1qTaž©n»Ë "Ë­ Ö ¡F´¢ÔZÐŲÚiã•¢%µ Þ•Tñ´ ¢â­h­"kj5öâ…Äj­éÅbj…úCã­4êŸjŒiüeâM|¿9œs˜žîvvÙ©³pÞ¤,ÎΜó­9çÌ·ç�Ï2Ü%⎤° íÂO»iÉÇ©‘m¹% Ôìã�&CËíjjùì2?[o}aNàTìš–óü�k&õ4ŽX¹ÔŠY´ÁƒÄÍÞü¾0ËcP-ÙÕY7lrÁ“^Pñ N 5µ4ß�“-o7¶QgžwËìflÉUÌèèô�p¨�6C!ð"¶ižÌÛR{å÷PÜbÎV{e÷PòL.† ½æãÛŒßU f(qUñðŠæ.h´µ¥J•ÒR�šDpé¨-p­tà<öh6ðòåóÆÈÊ�¿¾`þ²Ü¹gep³7ŸÂ, ð#šh +y»§aµµ¿zê]êⓜ%°m0£EO~ Îð<`Ñ–*”°˜ÇX£2 ä™\*Pø7¦ÀLn; (¼9‡Ùž”¶¢I•zR�KŒ*®V`BG¥Å<ŸWÒÊ�¿>÷ö[ræ_”ÁÍÞ|| ³<-ùÌ#ªV ,ª„·‹/’zƒUQ�Êçdßu¥ X¶¥Š€I'@±3£%ŒÍÜЬE,U¼-¯uýÖCêÆE……ë ­¤%ÇW+F s”°rK ¸Ù[ÅFTÔÄ1Îøn#MÅ:Vä( àk×È€y[ª4P¨mÏ^8‚Ð?�ô’þàs'Œ å(Ú7¡¥uM”%ðÉÄ JXÌPÂÊ-�foÆ�ÉÍòÑ�"ˆi $—|ÑRg±—|¬›Šeû6DÀ¢-U*P,`UGŠVyæ\ ”XòIO¼}ÉWäU  Tò€>v5)Á¬ÜÜbÎ�Vn ”4{#'—:7Ë«@É>ç²öá–Œ’«�”`–ó�•ÑÍ“'› PÂûZ’GoKЬê¨@увgH F>t}�ðÄóOdI‰Oµ­�ôÞiÆÞ�…C5Ài“u`ÿ( ÎøéÀÐǪÝÚ�÷ë Àé$Üò3O ‡ž7&²$PÜÇ®¦Í™•›[Ì9PÂÊ-�’fïÌûoEš›å£…/Yû†¬L›“å|¥ê ¤î-Ÿ¸”ðÄA¹£ŽÒ–°Õ‹Å— X7ÞG þuü_ }W@Ï�åžx<‡\NžŠÍPòJ�¡ö.ê7ü´ÿe›júÍ÷à¡,7Œš¡fâ!fÚåÆD–ƒ­G­l ¹/–¹H\ÏsxÀ[ÉêL_ÆÓÏæ*@‘�Iu’^úy¨Ì-“öð™'1}«èÉM¨$%Ö€ E�?ôë÷ÏÛ€šàË=Ou?{ðÏ4µÜZçi ’ ÔsF4å=óÍI(x &ºRq·¹Vl%yÉÇÞ�bFÏd�ÃW¥�ÏŠ¨G·›(FРu xÓ{á<Ã8sÑsÇ-¿¶ë4õêî×'-¿äUë‘coŸ®�Ò@�[ÅÔ)¿@Ú<ýÁBMN7¾| p?Ë—ãÖ //*�¨Y>òµãñ¯Ì*…´¹J5^¥÷ò9–JKåa9Ju�Ó-ïJåXî…Ú„g^¼ÚT¥¸À�^�=û®“oǦ­Ä¥�JM©@9—Ê«Ò@%*÷�’.ðìò•[®^_£Öc?\¨±J•²Ô?¨_jª¢[&Ôu¥Y¨È'DŸ¡P[=ÿk Ô¤�JQ9OJP NV@Í”–÷¤�³ÜJzS5P^—K@Qµ - ÔÄ“K@•|‚Ìe 2L-ï)q ôŒõ¿EÞs=GyOÎ�*n1¸´s¨kѺŽ÷Z«¨��âhw_5ª |JÖÈPt쀒.p”½»®éé=9ꔊC0¸cO춃‘’M…ëÇ»:#}Tíé7èJïå›0ŠsÉKÔ)›öÃÉq`�êxW�ÂOîÔ@i &Œœ•~ûO Ÿ½ðÆEMô<–uŠã]ŠW0Ô@i &ŒœõèÖꀱM%ï¨$Õþ1“Ÿ¿6šGÑ´®‘3+G.©žè�tøßå(Ëÿ¶\òæx×@éJ+¾ªÆØ¾m;8¼üåÂuªã]Ê^^K5îGÚü��Cû>PÅ ´ytÇ{ñ'‘®°W�×is ÔP‚_ìîÝÚkhi ´’Ô�;|Y¸—2´Ž%PK�m5Úþæ”FœU³èéÞ¯¹(#¾^e)÷ÄE]g›@ x¦LQjðÆî•.õœj/Òçw Zn%]‚TesD{èѬNª1ogVEùLüàù¯ÐKûn”™í¥ÇèãA±¬±ùü9¯TéPõ&Ê^UQ)÷„$ tS�vIÅ(Ù+Û<~€Ò:Ö@I%Tðþ•Ã=»1{5ô ÷¯ºC1P.‹€’r””Jk¬@U° |¼¼¹(ún¢Œ!jÍ|—ÃËÂG ¢*NlfþLc76P²W*g3@Ub¸”Rî¼üº¨_±vñÚ¿n]V ÊÂóøxÅ{Q �Üý¨Ï�R È£†0½Ì½%‡õ*üÿ¸t×¾<ÀSÒ@Å+÷�>v ¿›á3”,ú¾ô¦�YÓ3xYø#µ”ˆÂp¾Ò:ÒΪº]û�Õ&JqÏË^Ï@EùžÈ( ”Rî¼ü:¯_qÝo3–ývo‘( Ïã3”¼‡ú`Eó>�Í�²�'ho3éÍ Þ«œ¡Ö®è™q©·öÜk •ûI‰@É¢ïKe�k* ¯5Z™³nɵjž½°ËþVE̤„ CÊ^Ê�×âÅC+.xöŒ( /âS�z…ÚY(€:¼€<ŠaOëê�6£ÈT�Bó=öD ”cy¨ ,ú¾”X�eácl]»š^ÂýTµSê¨@eÏXòu_•)ux]O^-Z”·®870kÖš¢,¼ˆOªˆL^E({yš±ælsÙ÷9;PÒ%æ%�¨wP Ôõäù)¯±_ºçÍ{j|}3<& ¸ž%ÊÂÇ*8<1g]d[ÀÅ ç÷t-¾ Tv ”, ÏâsÔa„`¶›ûés{Pc~¼¤$PÉ/Z�µà2C*PÅ8'•P¢¼9/úÎ�eáe\;PÄÓgœ'µ,  ÔP·Mj6 Ô%J”…ñ¡¡¨K> ˜ýnëjýîo~ø–’@¡ ”* 6ö÷÷·L>´yysQô�%ËÂ[åÃ8Cjþ’7ÐV§¹ªzzÿª«_±½w j«[êV½ ¥ì@ñòë¼^¼Š—…ñ‰Š÷jR®þ6_@) ¯+¨˜#{ñÿ§}å¼Í Ç9PÖ­Òex`,„gÆòòæ¢è;J–…7­ŠòŸv ˆÄ‘òë{¶\ýÂZ$°¥¢Å{EŸ¶¢¡j)w^~�׋@ñ²ðöø�6ÚyÚÊúaM) ?mƹd?d¯#þÿ”ê顲pßâ5R÷öP�*ýíƒÓK6Ý— v–ã¯?óïÇ,�jW�Ôæ…¾¾/.T�êÙ¼°³gÁ9Tß�F @¹(”#PnhÝ�c·ù&VÔz�¶h¿ ŽCbéDú±Æ€â¯Ÿ~Çq–”u%€ú� ºSÊZ ¦wÿn¤¬Ü*¾½|¨dÉ9PÄ –ª1’AŠ0êåT±=èɬnðcåk PY_Ï›7/¥3b·¹jl@Õ$V^.ùœµ %×y ¨ §±-ùžµ/ù”ó*ðq/ù@‘•«8+=Zò}h¤¶4PãQq&%Jþ`I‰��” ²ð‘<ÓH�%%PI«oOJ¼¸ùœÀiDØ i+­¤ÄÉáÈB#e¥��Š/m^(Òæ‡,P>Bx–6‡AJ•´*ðö´y16K`é×¼`óÙ}ÄW*/¥k¶/Öû­0²ºYàóv¯<3ñ•µ™P0´Ñôœ -÷å¼ <ÝCÉ¢ïr†²»Ó (úQBõ#Ž•u¨Å×ÜÕ  ª«&ÓèÍÄß}_° ­ô…ÖäˆQ Êjuƒf{Ùl_Ú)©lÊÈ‚ZêB4¸ü}ƒÁæ6CQxBã‘κ÷±6ÔQJˆ¸ÖéÌ;.°|8ìëç P<à .Ũ’—r ²»Ú|uýøD8¯yP%Ϭ-+õ5Ï6Ií\óZñÊý¤„,úN@©" Òê›2h Ñ?û’oOF_/�•L,NÙHÆIÜ¥(¼Ò±Õ€ ÇèLºÜа®GìZÔLµ S†85XEó�µ€…ÈwP\ P<à .¥ å¥( BHŒ{”¾©ŒgwBS¶ˆñБæ¬ö¬reƒ)bs³$èJâ€*ÈV O§nµT&·~W�B¥>Yñòb TRâ}`‹*””ø`ráþÜû¾+m†Ó"B;Æ� 33yykŲ¥;¯‹0ÁŸË …‹SÆCÿäÖgQÆÁËÜB(^è^v[¦õRGÑÇØœšÇƒFŒªP`f|Ð@œ.4Œoª,ÉZ�Çë©,“7F�` ÜTùÆãL˜#’8ù(ÉÚÍò¥|0Ñëñxóaåõ¶@¯×Óiz‚ âÌÌë‚©  ¦uq°Î­ ü„ÂÈÛ6mo„…ºBJJ¼÷€[ž6³1v)º&X8ƒ'næi7rœÔšîŠã5å”/q†óÒLß<0b¤P…›ÐÊ€ eÕù½ Ù°àÑ—“ËaScS¥ŒÏ—ÏAd#!rmÄ_ÊÊiÎ.3›`å‚‹A‹ìÍL()ñÀ‚”ÈÅ™ðÈÕøN&@(ì7ròPU(žûþT¨PŒ6ó�·oz ÎI/Ý•—3Ò¼¢ÑP ÌÉ™7Eåßô�S¾_Z¡æú¢I`„ºï¥Û–@«å*}wO 䪴º/¾n D(˜÷[[Bdi3\Ý'T꼄Àó‚FŒªP $b"óó.sÆ›x$$|qrŸ¿Pð¸Eì¡:c±é4‰ñBÁä0Ôl6gƒs0ö]&¡à*…ÎÞ…r’ˆЧ¾ï¿‡šy yŵÑvNó—¢PÒL±‡J/oMàªP g¸gà^(c›Û™lú¶V(” „âW£UÍnŸPO&¤Î+r¢PS3^º-º Å7�Œ)T¡°LGQåóTÂ:—×;ö å«òU{=ØÄÁ1>@(ˆ<�ÊWm€!R6Ž¡$ÜC• \6¡ ìæ_å‹ÿdܽÅÑØäµ¾"Wù>ÌÉ› bXlæŠPóA Xî±â[æß5kvx‘qy� ÖmòÀypåúäF¬Þ›),·©f¿=WÌãA#N›ÿÑ£a¨†j„ ÔIedgJ?£G( VÃáL$”~H(ýŒ¡x¤IÇ ÉʼnJ?£H(B7$Tð@B#ŒÐ E�PF†„ F1R„A#FŠÐaaÄh J±éĉÌÇ=·Ûl¯3=„m±Ù±Ê´goa~Ä^>V3ä÷ï¯`þÜñÞ­Øè¿a•‰5‹Ø?Âü…ý‡‡F@¨_¶0Âàh…ò­PXŸ:•¡4K}E]â³Þôªì…�…É�r«,¦Ï'ùnð�ùÙ+W[†¹a«ã&l¤õv{c„ülnس¦¸æß„ZQë[ëõû’ÎT¨ú}n8š×;ìíK¤PëJ‡Ý>Õ ¸ pÄ7•EŒ08Q7œ¢¦¦æ? }Ò0„P°–Ö1E(ýB….¯MpGeÂ`ÄÀBÕ7W„ì²w„Z�W„DÕÔJªP¢F ”ŠF¨ékºl'o¶°½·ßÐßWº{¾í²•&ËmOÛ~?¡.î—GV÷Ù€£C %|ú胲¬KÞÄ„/<\Nù&|úÄçe—Ï¡Vd…¿aaãÃٮǿŸ‚:Ù�¶¶·ËÖs«H8�C~BÅö÷õ¼{¾V(×pD&ÔØí‹dWvopØ�i…rívØ÷�0õíp>:z —ÛÛ£“D›£ ¶KŒÜeGj‡*ö›.Ûµ‡áÁÎ~ÛöoÛ’Ø´rìÐ%°^½OŸ#Ûb4)ŸS\Ú­ þDø …z*†M¸þqE¨éYðø 4 »ÿU¡~ùYŸP[ñꞟê{Vù¤&ööæW,BÕÆ šòÁˆPSØ´«; ”‰�ÐZ@�}1>¡àä1¹Njh¦Ã‹¯¾LI{ñv'lYV"36ÔŸúö+àqb–‚œøv0ÂØ -ÔHLl¶Õøû‹½A¶Úd W%\‚³:öPáŸU=5…zÄBÝ¢�öÄ¢P˜ååvBA8hÆy^òz˜¡ µtÐ%ÊÀ"ÌÞP(ù­�^!”p ¬Ò!Ô=kð…|@¼BðΙ1rhÀ*ŸËñ%6RFTM·(Ô1F›¡…Úqô°%¬R+”Òj„Ò“ò��xý–³$ÔjqZMùüq9®V(0¤vŽÑ …-rúBM«,-bo_« å{‘””/À§L%Tý�(Ô:F›¡„ËuÚU(5åS¬�5¬3åS…‚¤îqE(mʧ u�º‡JÒ!”*z`ʧz°hX¡Äi³CJMù XÑLáÒ…"åƒSŒ1Åf{¸¿[«¦|Ð�hS>ð©#T r?�ØC]Écã*#P(°¨-CÂõ™¶£OJ%r�‹vÙ“p M–,rQâa(Jູy̘aÊæaUà�"”¦(¡51ëM¼.%Q§®~ïðE(aÐþ1~7wûêWîsÚ€¹ù•ôŒõíS†*Ú ÄLX~ÌrÞz5åÃÀ}‘éð$QœˆŠÀTxy÷ùçÊE ¾®‰Á‡,ò>üôT¦oJ1ZlkÕ¢DËÑ Î9W©o=ªO5Ýø÷êjƲ¹ß&J~[‰a„±$BAùw"×ôœ|w�*T@ÙÜvòêóåÒºÍvc“ûm=W[p¡îè®lÎ&}>¡`S…@…âBQ6W…‚ÁYX6~©Eïoû lViC 8Áæ¤ÏvH¹ahÖôõ\»Á¢ÝAm€ry X¹ÂŽ@@Ñ eGÖ1WM{ã—jÊç+›w‹²¹½q.tÀØK�*›` –ÍUf¿˜Éüˆëï9ùD¨€²yχZ¡Äýí“Ì7ûÍûŠ¿ÐÊðDìgùvB½b ‡œo–Û·ÁhYs&?z¯Á$F# eÞ86ôþÏØÀ\pEL_œ9H|ÞÆwÂþéÌ„šË£sJ¨ ý—|ä_Eù0fÆ <^q¤}¨##FFŠPÿgÚ¥Š#EC1 ¡ŒAÅ‘#E¡¡C1 ¡â,|EBE(‚0$A�PaLŒô9AŒz(B EÆ„„"úŠ Œ E(‚ ¡˜�PAŸC„1¡E$AŠ ès(‚0&¡‚„"cBB}EÆ„"A�PaLH(‚ø«=;¦@æß5*Hv´üPÐd¡@PÐ$(x59ƒæ� óIEND®B`‚pydantic-pydantic-e28e879/docs/img/vs_code_07.png000066400000000000000000000331241526274674700217040ustar00rootroot00000000000000‰PNG  IHDR?s'ŽGOúPLTE%%&,,-..!!+4(((EEE434‰Š‰$ÌÌË$+%&,/5`ɯ&7JmML$%,5&&sc'âƒräq2NNA¥Üû&%=„K.ˆ²Å[Å¡*"&-`G;@›e9$(C?#!·Ç§\޹R0,%*R)9`m Å+D~;/G](;lDq¦|«Å7]˜¦sE˜¿Ä->6.G£(.CXÀ¬RµªK«ª9E"…}fV ^*(IĵŠ(+t(2QIr6ESc[:(3QqK‹ÊZ¯rm8)\qtG+&M�â",:i#W)&b–Àb-%C™©ª}K|ÈôÆÁ™š©|Á�j†ˆyOeoL�ô]Å“4RŠÉ‘|~<-J$&-:ŽÓ -3^¹?‚œÁ¹–�u½–a3KIÁÇÊÁŒk7L¼/a„.Fm5=GžÒ» X5XQ¦Ç´?�¢bz†Q�O]À„‚qU!HeM*Š×çÊȾ<:=E.1L�¯Sr†YD;�\5hE1ÄÁ´=gž0; Sˆ¶Z´{ÁsP¸ÁÆ~‡?[|L‚GÔÔÓ)>R¦Ç¿–„vt]C–Õù—ØÓ4r�Çwi¸�XYŸï•²¿+W}Ô}n±…T³É¹„QAuQ7KfÌyk9e]˜L9op¸Â­‚«ŠnBc03=pÊu‡€nG1hŒo‚…4Vf9S3m¶òDv騹ÁÀ¶¥À�z½…¸ÐѪW°�7Z�¢F–˜–mP©X:@‚‰zk:H8*=\" ×æ›Ä«®”w€_jbY?gD›ÄÍ_—›QZS­ZLdM?f66Oª¡\»ž´l`°ÍÍz�²°€”Jd‘;ln\˜Îp�£Š ²M�_i˜»=^×›�­¢½šƒ‚PsnoE„md Öž�\ZŒ‰tp`‹]W�¬œ¸iFVCX_WF¥¿2Žr¼V^´²¥ŽQž{³“kqm£iZÊ\»‘®¯­Ù‡3�’bHv·ÔÎ;Äi�“ŸpËYlì«9v±àlš%îÃ<ÑnÏòÔ?ºœ,©Ž(u¥ˆô�ˆ3IDATxÚìÝOH›wÇño—Îððà£Û c㉣¥Ó©!]bTƒ:‡ýãM"Y79ıà”Ö5—,— d2¢,sÊb+ ôÒ0[Œàt9(E(uH‘±JÇNûþž&y£mu¶–åó‹yžϛߓðJ’nÝ»w‹bþµX,æõÒ½[÷mÅü±Tl-æ'x £‘{Yöûý^+÷ódüŠx‹ÿñû­G¦ñA2顲¸Cô4CNÚÝÅ¥Oè%’úG©èª¢„e8 m?>&n?¦öNz¢+C»kØ8IÏ¥ezªlÓ®(J*þ´R~5ªD*ûÑùÐé÷E™èðû9$•ýŒZëÒªã)ýd�dZ°¡xḞ¤à!ú"7©]Èøqñ$oæ’’ST ÏÙ²’Fœ2Q“ê ¾9Ûö,÷Ó’¶+Û™¶µ[Š·íŠp“hHQœ$ô¥mj*AEÍɤ¸~3M/å$¯HÓ$—>"’šsÉ%�,^ºÍ¿Èí–ͤðnI?â#Å‹G%SÚ¦¤Ä27³ d#\ÊVÊ` ÷ó3Ÿ]ÑÚeWWE?Ò¬Ø�~ªÍxëLk+­Å¼±åØ|qî6o<Ìõ‡ƒYòëxß4ýðýŽÍEó¹©ÁäÔà�'õ~”N²¨ vx£G–FÂÖq;÷XóÖ¶Ú;ù¬LýÎâú£þ1õ‡µ3ñ�Ÿ8’ŦÜí3¹ ÒtÒ# .�ã°¦Œ¿rHüRrêÊ;Á]Ö†ê(•|Û‰ã^îgXÍðŽ8¯4Cñh„ûéâQ·ƒ[�ÔFî':–¨õ¹Cè§Ê|^×:>N^¯wÍk­)ÎÝj»ŸÄÎä<âä¾ðE¥ g–ÎéýŒ™µË Ž£EË…ƒ§£fÄÉ;:µ3³²ŸáüõVe?S-›ïrizÑL�Í)þeÌbéÑÒº²çç5CţД‰I\ o8ùWlÞJ…ú#ÚBij�ðÂ)‹Ë> ØãDR{ýT¡^WïÀe#ùc~Òn?bE1 9�è'WÞO�,z�ű5‰(†¹qY¤(¢Ÿ›D\YE?>Þ¹W?Óï6¹-™ÛZ:zD{}þ™UÅ£R“-µ–‘EXB�Ü?ú޽çX„ÓÑ “xIÔÂoR4£è§ y]^¯ËH^kíËëgéÜ®ý4¨ÎBëG›øÜ í…ÿÖ�¼³Ÿ{ôÑj(•è¸?msÊbIdÚk~‡´[?ªóƒjÕÛ{™ë‰Åˆ^h?úõ[e?cí4ä‡5;—ò$îgD;?õ~öqý¦÷óý•²ë7½ñ¤²§\8*1>ª�ŸûáÇÒë·ñuT\_êý˜ ªÉÀobõñZ‰^l?úü ¢eÕêSâìSD$|~š[Ú¹Ÿ«aƒ4aÓûÑÎkƒ´c~p|&ñ´~’“Æßù`ùë¯I�ž�øýN+¿~³Îr …£Òræµ¾¹™#�ð+™|?…ù�*æ šÐæÛ™ZoZ¤lQã¯#¨®��דÏ?ódü.¬7¾�~¨1?¿®ì'œók°�ãùu*Íý˜x®½:RÚ�/ˆùu£"¨m~­èók1\¦JúYÌϯóók}ÙiØ,Ÿ_ó�LEäâQ©kAQ·BùùõVBïG›_ǵùuv«=?¿Îjß*EmJ„ z¸\^×çO>ÿÔ/ƒôRç\¬ƒ“8\b~ðVèGêé‘ÑÀ�úiVRB?Ͼÿ�goå·¿ÀóÞÿóûËnC?G~ÿ@(¹ÿ öéËWï—½ÆüŸ"Ø—Ëõ›Ëk|ò§€ðÿÜ€ø¿ü ôÒ|þ€ýÍ®]^ªÉß�@p�ûæ�õw(X__Ow¾«§�;Á mï\ âV€gßPCoéZ�³¹tM<¹Ä5½yçÚ%úŠ`wgÙÆÆäÿûés8ûLP=βÉÉÉo'=ô°O¹Fn÷Öa#€ê�~®î°@õ@?P N¯¯ß5Ó™Ú;©ÄÕ™v ýõT‹=^ò\Qò[÷oÀ«âôsö3"êð© ÒI³‰Ýû™+üÌLjw)Š’]5О, ¿5`s*û©ÜºùèxEì§Ÿ ΧÜ3ú1ü5EÜ�Ûjmµ;å½ûQ³šÈ>³,@ðŠhøsåüeC±©í›•óüLì^95 5ò7\w”õ3¡Æ‰¤þÕ9Ûv‚Ÿ´+J'±Þžu‡èjxÖ¦FÄr#h1uþ}Nô#r Ë4³`S·BDÔº d· b³+©YÜéˆ4—æ~NÌÙÔU³xÁ–]ÅÔi;ÊúyüH&á £LG¡¡»·öÃÁP±“Ï[ÛÑÝKtæ|ÍñŽ™¤ŸîÖ~8*í§‹óý¸R”‹(|þ‘FÂÖñvÑ�ºjõ©ŽÂú£Ÿê¢ŸíN™–3VëPØÌ-Œ¾f�q?ѱD­Ï²¸[Ãá.·ÁÔÞcßés'êæ”8ì«Öñ…Q½-ÊOˆIü|�ŽÂg¿˜+¯ßNó΋¿H0ý4OeFT…ý8‰šÔP±Ÿ€-Ήˆ~ÆDñÒ~îÿ¡õ£°iU‡ö! ¾[j�XÜÆ¹»£ÃnC“ÈoÂm�ÚG¹qî'*–±æ1Ci?7ÿ9‹~à(I?õRy?Í߬¬¯s?�îS—]f±åúÖÒ~” / ¢qj«Žb?Ú9oýð¹Þ»*ûáÏ?Þ~óøœMQøÛ¥!uk-ÄoU4£·Á§Üä~8í¶Ø;µ0ù¨‚{G?ø›Œà(Uösfe^ÖÖ’šÚºÅW:ÑõçÊÛeŸšl�ëGl‹*V ÚúCT·¼À_Å[î§/#ïìG3â$MY?cÝ�£TyýÆéè;V$HŸõÊ¥ýPÔÒû©¼~«ìçñ£+…~,ªCKgXe “ïó7šºçIïG«£Ç\è§r~ ÷cQR~©8[¸~ë3xUéëΉ5ëë]"»èv¦Ö›vûÑçc!iH‰Ó »Ój�YÕ®{¬¯ç5Âç8RúüZj[YŸçÇîS×Û¸Ÿ†¯WV®Åm´u¯ó@»¼j²EŠýL(/-}b~]Ö�”¶)¼ÁîßÈÏÔ-±öس©e~kËœ]ÉFD³üd+”ï§0¿6ì˜_§2ÄêþeïNB›ˆÂŽ?—!±BÅ5 bUÜW¨Šq¥¡è!¡T<5. m(Þ\,:ªG…â†íA�F-UD=èÁƒÖ Å“D½:ß�:‰Óšq˜ü‡VjèíÏ{ù:/ï~ÔzÙ¾ÏiúA¸Èˆ¬/7¾Æ•Ͼ`Û†Ñ1h½,J}U«ü%¿óayDÿÎè�å(ôÐ žú©É6+ÛŽ¤®çPÁÜôÓ�‰йs]™´uu‘BA9�„Ž—~ý^úiÐÅÓÓªÆÐóÍJimºøXÔÏŒoF~h•ó$µõÛ¥Åò™9↜™Ûy%ú C¡àvý±ßÿ8ן É�-Û:¿DOrj»WÍ]Á~@[N"\ê0bŸBÁ�~Θ‹“š—YëìG_ »Ÿ(û8„ˆý6tǦ(‡­ .=ï(égÜ „†/ýÔ©þ¬?y%º¼¤ŸÅ �¿ìçœ2�¹)ÿßßIêÍK#ôƒ�rÓO}öè» &sÙúA¬íMËp™¼ÜúèìxÇûŸØãŽA­òH>ëj F?7ýT' s~­­Ó…,=^ÖüZÍèÔ�­5¿½0òs^÷1»¶°÷@Pë}s~M?žèp�~€¡€~èúèp!èýœØÃÇ'¢‚øÜOë“=¡rxï‡õpßOìSÒÈ¿©R*–0ò‡’¹ß×^�Z½œ?pmaÑýÛÜ’€°*ßOõÞ»æé캈j8Ö5µMÏ9Žk;×›óÑåjå¸Å¬?;wû79TÝùE©z#ç8®íè§÷þmúAØ•ïG›õÍÐõL\ËɉSÇqmG?½÷ÏÑ®|?õÙ%ÃTCq?uÊB?¨xåû±No'ìýÛ/ǵéÌÍúsOMKfâ2?XöBÏ9�k;û)½«òýhŸ²ùãû3q{~ÝßqíØ¢¨X^zÿ6ók„—«ù[é ¼÷³cÓ�ɉ›qàú1çØÇ/+œ_èð€~€¡€~‚ÐÏ]¿yZýc±#§”eM*õ–?À" ¼÷#Ùýøðüö v?bMýÄ6ŽU€ôC?ýÈ üÆÓJ›™Ôç¼+êgL¢ðÕšl�ù’f?îß¶û™täâÃZ»ŸòãM#J»Û~ñvš~.ú™gli™~'®æå_oOH%…~´D÷»©m»âÒO÷»‘Û®{¿»©û°eRqs/k­~ÓCzÆ�ý¬¸�®Zñ~µ¼æuZ~ò¿ŸX[]ÄŠA¾7u~üÙÏŽä33c”|y¦„çû·µíƒÅÄ�}Ì®šÍ¼O;ú±6vZÏUüåû‘s§¢ZÒ‘ˆzû©ÉŽ*D$ÿ>Þ¿meR-_~égò­T*ÅLÁྟ¦ßõÓìíþmÇþÍC?ílÚ¸‹ïߤ÷÷o{Þ¿m²ú™ß¾ZikdÿÆÖ �áv~ðªx~PŸí>@ië2ÖüÀîǯû·KçÓW/AEFÜ’ùAãØª–.!�»ùµÞ;¿îîR¦Xº»Éž_[ýøvÿvéü:Ös15Ǫ̈½qvOa~Ý8»VÿÏ¿ô¸@?@€Ð@?€ìÝ]lKaÇñ?eœ;ÂEUÒ³„ÌËf²Ø´ª c­× ‹� b.:/‘5ˆ53Q Ù•pAYÔ•¢16ÅÅ MzA4DÂ…ˆx‰x‰+ÿ§NÏiuæ`²®~Ÿ‹n=ÎS.öÍóœgç Kµ©Ô•ßç72ý)‹1¶SQ´wݧ@¡©5ÛϬ^¥¯uÀ*¬óêè»àû%üºKQÂu45)^9¿Ÿüw/®@¡1ÛÏt‡»¦ÃqÖ\?Ÿ?ª¢oMM½£n€~úZTjì3×O& (eï«Xô~¤êC‰UëUþfƒ'Q¾^æ^ø„k.Òuú,$íòÊÒšfmç?sØ“*gÓåP¢qªt*B·1WìrËÜT3Uv9•×­²~¦>´³%Ö=9ÚÅêw*ѵõ*/»D1Ål—ÓOðýF¤1ã`H•y––ÎÝÔû±ú·–.ô,%Z°ªdÔ‹2Iá'¥s›‚¤ãt8¢€Eïg·3YÓÖËoü¯#£¶Æ³çŸàû3™~fñü³ûñÖÒYÎ:ýL}h§×ß\ïn÷Êõöxi»ÏÅ ºyÆâbšìqrVïLj’*î� €!µåŽš¿~«åƒ›ïXH°†ïR6i Ç@>£ŸvTEÀ’þF0úéþº$Ý�še­?7eÎÔ‡vz§GcgùÝ÷™ª•*|AžäZx’k§¹åœ~Þ (Rx)åöSq(‘Jq?»=å©âxâÚ©š�úá:˜ÏB3ÑÇq9·Ÿ•¤]ÿ\äyGº"–vnÊœ©íär|–v¯H']˜? ¯êdm-èý¡™ @^? wåôüCÒŒj�øJSêß%& °~ãwͨ�]®ËèÇõucfýFíÕï‹5òíL}(÷3>Nýö£}RN?‡   ü¸~ãtŒƒe  Ò–¥rÿûMbýÖ¢’®#`ÉêÇò^ß?àäT‘‹˜¿ô3yh¦~ÍZ¿5ñ_B�býæ6úQ�¤1 `Hû«J&ðk¹‹�q?U‹JWÔ–[Èêß6a†çnöþuòûþu{‹Åã~¦8ݼrEŒK�X$m©e¬ßÜrg‹Eêp¸õ3õ¡Z?Úþf%7´Ð™Þ?h­©¹'¢*ûÙÑ#ˆuY�ë(úþµT�HÝåWOùµjî§l"qm‘µÚ“â íÜߟ¦7*cöèƒÌþµØ�®ïUì/ƒÄÚø”îï?ë›2¿?Mr‹1G_’§ãLm¨Ö�¶ÍmÒÂÞ¾h,³ý2"þ}í¥U»¥ýÀ0&5¾v‘9ƒ³€øõÀp&�¶�9®ƒ2 *þDì¾À˜dùô€~ Èoõ³`ï2ìh°ÙnÀÌL?[¶OÕŠ¹s“˜´|­¬d¶qC@Ñ1Ý�ýüN?[lÂÃs´ dëÙÃõœ´ o³ú©úê;‘Ø„12e™"înse=Ð=ݾ3¦ôE (˜�ŒëŸüù§¬aݾ¦Kø˜4óòj2H|ßõŠ‹®¬ùgº#1>HEa0ú óäDµÛ—å÷3¯™Xv? ÖqPD¡mAw|åñócÚ‘œ~ìÝP4¥Ÿµô3+NÇ”ºœ~\P4þ²Ÿ Ä·¦’f”¾ ktË芔™~6ï=6Â臅·_M°ž|¶¯Tì<+i»^Í»þ±>ˆŒnãk í�nôÅÆL?•žï_KËm‚˜zÊR!Þ¿fU—lÇ—ñ—T¨gÎÓ~öߺœŠ=©êt£(2¸ÿ ý˜€~ ú@?& €‚~Ѐ CÐO?··U^zDYjùÖÑßÖPɰÛ�ûJaú£~¬ûŸ÷×�v§\¾ôÿê#5‚dhKʹýàIU~þ¨ö»ýùÐ wæú±.ß~“·ÊC=óe^½Ùl�ˆíH…n¿:¾˜ûyÕ`{vŽô'½ÅsÜjn?R×kΧÊ÷Àiw«DõŠP‰Õ;íÉ5ÍÜO¼× fžôÆb†SýX=sn…{ɵ{÷è×?Òò£“šD?¡g%Õ ²çŸÙGòk À?B…á;góÚD†q·ÔÖˆn ¢-T�±FlÕ‚i‘TðªÄøEE‚äÐDPIÔÆ-Bô ^J¡V/QiD°ô *"⥥ÐPPATôP–Äá~sÌO=}~ü*˜è¾¹ðchiM‹þ'~èLæØänÍ9uÿós„ö¢#Îùm yê$?Ž4?Z¬ŠæçxpïÍ�ÖLÒÿÄϾ9GŸœf~Ôó›ÊÕ4?Z¬ çgé®ã¾Ÿù2ÇEý€ù!§·~þÑRTáü`¯ù¶Pð#ÊÔØiDýšùNoÍ�ÖOª`~Š·§ÿ61OúùGK•æÇE�/«îï[øïøY>5û�?UOëaüY¹ÖpÕFÓì5¦XÖîþŸf²!d¸©¥Ù|¸gŠƒ7µú~¿Ñ…ï¯'uÌc‘æç'Ù»ìÉGßœâüp‚Äj�ò´öx¡–«¯WåÞ²Uu›JÍ¡š–º•yü´Üns�º1¼Æ0Êùk<%òS}b@m*æ¸G¸,aÀÎÏ¥aOÉü¸/“æ§t©ü4¾ÎôO9?=dþñýC~ ™Í¤ùùüpÂnLùœcÒ‡LÔNkûÌÉq$n>h©Ï¦Ó“­HÕK}¦ýÎk¬[}q0öl§Ñ8bB¹‡˜­£Q|]š$™ˆ-u&)aù鬱îZ­˜Ì$Ó×ñ­õjâÂO§Fý óÇþX}nÐL{8*óCQÓ×9í¨7Ç“1–%ÑÒÉ$õ*W*üàÓ Ñ?Œ&í7-ÆÏft‰ñ¬OÒrqS^7±LrÀ¬¦ÈxÔö¨«"úâ¹ÖØ ißÄm;kšÎùÍJÚWšWÊ -×íOøzóÃQåÝ2f'?Ó*ÉOu`SýÓC?é�ªõÝ-u5�.%sù‰|ªkýÔ·Òè¸6¼"8ˆ[4²ß·¶y“²ÿ ÙRÝÁ¾ýÞ‚ûRn;nyÊgbVSx�±µùæ£`ß]jùeù(n.†±âÆHÎó�uÖþnñ*û�µ;ÕÝuð4¡qØïæw}vÙÃñàÞDøÊ_>ÿ{À:nWö°lˆ,‰ß¸c4øn⦼n¼Lêþc~Y1v-¡¬ ÷Åsm¼6¾÷ÉçŸûCר™ssšÒWãc«�—ß­ŠªûCóS>?‡–o ­ 9Y�5·ü¹ü쟻ûØÜ@È ôz�ü5^ìΉ@áß@R‘‚ü´à/ú°¸é ¸Í8±p"²x»%?tµûù­z�‹$ùAïn:ëôÇüð•¥ðƒ�Ç)ü¨¢U`ù÷{¸ivÝx™T~îA¤ýuUD_<×4‡˜ŸêÀ1YÉA°aiB4g,¹Êß-ÍOùüˆL”¦ çkú!Û”ËÏ1�¿×šèëáuXsÜÌ|~8¡q[ òC{5‹”™ýâ8ôP¹‰< æ‡ÓRyþ‹¦¯|öäñÜÔù"½à¤—ùá+Ká‡ò�‹óÃ#çM:\qÓìºñ2)ü`¾ùNeU²}eç "ìÉ-�%?-Ô˜á 8æ’ŽÍÝ�áb*?ršŸòù±&Ä­iZŒq³ÿ„ä=Ñ EföZ»Ñ ©|~ Å;2Ñ�Â)ïªÍÇ“ŸÃOhÚøé±<Æ…òøÉ_Ù—œ«¼;n+ÌO ¬°æš.~ꛇãñ`óJæ‡ÏoTüjx!ùÁÁ›Ïš”x~ãD­<£XV %Îo‘vCP.¸žß8ª¬¿YБTTÏ÷R¢Ñ‘teòƒ¦%�ßÀ¦ëÂ/‡WÎoù«"ûâ¹’Ö^N(ç7ÂË…q$?NT}~› ~8O­ Ü‘–Ný`‰Ke²¦¨äÇèH¾{4ïİä9Ýï�[Rý�« ¨'n§/cÃq?2ymsMw×�¯JÙÃè÷4¾Pê'½"ªägù‰%gÖ÷!A8ˆLË�&²HêÆÉG]NŸMáóUž2øá¦îüpýààUühh³Æ’.üð2ÉU‘õƒG¨(«Â}ñ\;·<ŠÙÛóë¦äÇp–k¼‘FLjäGDÕõƒ)áÇò;µë¤²à‡ê×*WEí+}’ª_GíÉë9ücƒùõk*»>6T~œr´™ ^ô:™þ crý:­þ�†a§3Æ“„õkŽÊõƒ¡A“ê°2ˆ¤¢'†/Yh�Mž5o³·~:¢&ng¸©?\¿¦¹-OÚÏF]øËÄVê×ʪp_<×Î b xPô1¡X-V!CýZ¡å²'Û¨~mO9å^ð04?åðSTTP˜5¥NýàÏEüʽ¾²ßß).ÁÏŒR}sÂø÷ªt~êÄáyZdmžhõM?¦Y<Ù[úÆtñƒrdxñÓòüñ¢¡Èãß«Òù¿êžuDÓç ÁÏÌñó?ª!5q4�ªt~*\—®ZšÍ�VIÒüh~´f�4?ZZšÍ�V ÒüÌ\~äëmªšß¥+½7TSSYTÝÏô™*uîÚF¿×-9êl•æ§<÷¦j"e~T;´ÊÏÆp{NS7Õ_ž_õ[Ã�QÚýǸ2òt /~�Ùyì{~FRÝ—•÷Å�¨xÓ¸¶ðþ³yï¼FÞd†à HàèÔ«®ñÖœm¦óuûP?ñ3 |²&gÅý ÒWƒu´i²©òüƒ+#mËa5Pö懃8oSŸ8ÏQåÔD_³doª4~„“:kÎõ4»û·³yÀaaýV~€åà@zqöÕSÓðÃ^pæGéá´+Ì�Cžåßï¥ ŽÏgBŠ ÃÖŽ$MšƒŒšïž!~Bλ㪵Måg“¸²?D¸y~xjÜ׬P¥ñóÃIÍaú‚_ÃÇYEõogó köë·*:²¤vÊœÙ'¼[”çÒ áÎ�FdZ!~hïihNP23åë1­tá§õÄ5\ÈQ÷&}ÐHJà‡¯,À¡C¬+?<5îkV¨Òøùá¤f‹°È:bu{ð¹êßf~;B ðþÔÜï™f~Ðñƈp{;üÊD<ÿXþðš¿ÎO�æg¶‰ùa'µ°3?”tžQýÛâöS«_ò·¿]«ò#Îo%ðcM¸�ßx¢ã§òW?W¾8? æëÿìÙåƒîä�ñSù«Ÿ+_ÕÅç‡óÃU.âüpqq~8?\yˆóÃùá*#q~@t[NæŽâÕ"Ió6¶¹œºŽQ?�$•®öfWÙ媌ó¨¥c7Ï×e*óÅ׸#ç:Ê‘“úOH½ò×!I’“Ó ÂK—v6\Ïå}´@‚ü,^P.–ÂØ®8 ‹ËU]¿+q~r©~”6ѹh,�¢¡8~lµÍk÷ÁO¯×®Ä½Þšì†&o¸±M46µT×ÄùÑÄ^|M+•i­Cn—ŸFø�:Øèl†-¤è)âgÑŠ€ä A¶¨ .âmj’+žhÁ±�åÄ‹ C° ÐâÑ\ê]±@ &C³„11ŽßÖʆ†p‘ú‚žVpÕ&p…˜T{@ReñªW�ÁdÀà ñÅÓ\ñ|†âæ�GRÞ;µ00p =ÒÎàr„ ¾ÐÖy¶Ãù1ŸXÿaNöëZ]L;²�?3^ô_õùW~г.â×Aâ� ~궉îÈ)àÒ5¨Q¦ÄaɸÑÜ¢¶‰æ´D~”�ÞÔ¦«o�k.õU¶zBàáò‰-˜Ë3"._Ww49þôÃFõå�BF ´ÕEb¢ÛƒÃaPŠÉ¦Z# #“ ]µúÉ•ø�£ˆâC<=Ãí#~RGµaÀ}d­ÓêšÀU?íÕhuqü�ˆŸžUÖ…U#þ#~P°ø��6LmÌb–iðepÃ0è&4 ªÆz°Æd…\Å©šù ¥æoøõô£ õa è…GHŒ‰iadòCƒ+’L®Ä¯ˆñCg=!4X‰ó“ÎOj¥KáüH Æ¨†&ñc¶ òR³‹2ÌAðýˆŸ+‘¡TX\ÎØŸ|ú�³Våd_”Úa i�¦‡‘Á ®h-']‰sXy‹êaWÌ'?tðEyÿIæütR•˜ªèa‹‰…—ÄO³ËgÄ$Îä­è¢›øa¤ ü(éü0ßôùæ<õEü ) Æ…‘ÁLü�+ãä¶{4Û.µ+ÐJü¤ÎÀ½"Òèäü”µÖlšÛÀò¨ÇãÝÿ!?y>~–Ñ@I?˜Éñ“6c™ÆlˆœD™…ÿ—ùñCÂ,穯ÌÔfüP Oâ‡v(lþF®ÄM1‘C'Ï"ý ñ±rD©3ñ3rÊôÉ'¦œû—üÐÂéø±EX^:\màˆ –@Ь°úT‡kcà†s4âT‰^{¶�Qw„ÕÂxâ§Î2vÕê×^·G•“}?ÖˆºK´Çdâ‡Â€é˜*ꉟTÀé¢hbɕկ±b² –¸hBbë]sÀú”ŽŽzè“h²ã`‰œv’'»U?ÛŸ¹ÿuç¡áèÁ°p9ÐðüÈ�QA0Œ[Ö÷Ž2PXÓõú¼�U—VÖ†-óº–l„A¦ Âe�òá‡^|�ä‡vÐÂé|ùÁ¬’5å°$ù±èëzNç'½~íŠÉtIOü@ý: ¼õAž~ (¬~�×Viü P¿ÆZ3V�©/âGk€j4ñCa@“\?0+}£s¥ßOû-`¥oKkâ`æ`ÀƒƒÐQ5_‚ëêZXT.üîÓ|õNŠŸ1Ç?ô9ôüîPaõÎ÷VË‚óãÏöû5 ¡=€@´­†øipÏd™zøé8Q5  9 p—),‚•\0¢÷×jV«ê矲ágã2UÒøÁ­0‹ H  ~ îZÔàÚ±d:ðsb%ñcXrv›Þ½Cù19Šø¤ËÃÿÂü¯øéj‰êªJåÂϬ�½ðOŠŸ }5Ý6^½ód�œãú'+?c¦ö@ÍëP~ê"J¼H׎燮Â;:)?«“ü,½û–mv2#~fg©¥_¥Œh?˘i€m¡2ÅÅU.ü°ùò3G0‡ù°”NWîù[fý çoÓ+iý�WªtÅtU§rá'Y?�Þ G°~0éaÏà§0ºÕkýP PIérׯ_&ê×Çö×ô¾¥ÕLž|ó^…ðÃU�*~¨~-¬�²õñDýºïýÖóÂèGúNú„&cæ�úuîßO{l톷Üx–¬_¹Âùábê¼ü ðúçïdXûm_¿Í•MœŸö:]ÃùáÊ&ÎO1ª¹¸J¢²â§TªÕsq•Dœ.®Êç§OM{âüp•Ÿ8?\\œŸñc²j›î,íZs²*^=ûÈźZûÐyˆÚf]TÏÅùau:ºõn3-ŒŸõkõíˆ sÚ›^=K·4ýÙjÖÜÉú‚ïGL|˜0sÛ¼Þíä¸3ð-/í�9bBÒØŠ�aŸ{ô\UËÝÿ¶ñA7p›iwFP6~¬g Bï$?3®aº›®=}Yÿ5455ͽ\?«çŠ€GÓ&;éI¯š@Ïô ךvOÖ¿º™éºjØ)ø;jiÖ‘¯ÅOü$‰zçj¾£‘E•9?çU?B-eõn^ÑÿQ s­=šÖåÏ‚�¨üdïÜc[Šâ8.77«GnJãbÕymýGÐ AÄ»QY�GÙü�l£"�`A½B¼‚ÑRâUÁ,A™°x AðñJü!ñýÝ{œUoÕE_âO%Å'þÄø³[ÍßNk_O�¿!GƒÚ~æš9ÐMê‰ì­7ÚbüáûŸ9¾L:-2±þ_ùã(Û!QhCG]œèÁüaÍkGÍ_\¤¬üèýOû&þœéÒàmþ©…ä�Ò~›ßw¥¾ÜŸE#M•-sò§XìÍLK­óÉŸ  þHm„2²Ã&æÏðЬ^~ÕŸ®Å°ÐÞy¨6NÔj£?ìóÛÌfÚµ¡éÚêb…êÕ)�«»Z%úùi†›6«§Q�–7 ‰õ‡ÕßrÝê)µì0ëÿ•?ˆ+Ú‹Twº(“©àþ ÅýÚËzëýAA9ºþÖîFýKÒ¥v¥õ‹òæSÈÜÈ/ê ì�×Ôø3eø…Ĭ~^Ÿ©êS5�&©_´³R¨ºŠ×ÛJ0Îqc$ÕôÌS*Q’ ã+V6NÔ>´Ïo×s6'(ô¤ÞY‰ú5ÈÜß|Õ@œî¬<•}¿ÁŸ»ÿ�T3*äéU’‘Lþü{÷�ò�MB~„?ÿ)Ÿ_ÂaÄ % þS„?�ðGø#0€ðGø#ø‡þŸÄþ¿‡Zá�,øê’ŽïûC··ÅÐqÿm9xtÐ7ýÉ|òñ��N“lr ­Gy<[eãèçú%x<‹å¿Fë—ߨdáO2òSþ4�ó8¾?üN9îÏS¬ "°½B&F/Vd­af oÐ ŠõgÀC9>{#&Õšå¡Ð¥ùl®øZU7(Æׄc²î}é߆Wà:\mµ¾="ËKq~¶B½Ÿ” ’’ŸòôÇõò�¬÷‡ñkþ΄ÓRÎY[ù“ñéþ…œêm&y/Îç­óÕ$üINŒùÓÔ9ín³n»òT�ÈÞš7Wó·éwðè“U}àÏ‹aÍ«wèžÔ­÷g€‡xˆ¥ò çâ l�²¨2)]‰^}vŸoᎎ° Ãæ"_bp…Î{ÕöФ°‰$© M ’9hÙª�#Á(ÌU!Ï¥J'‰­ü1÷8ãQ§0OEª"%ñ¯@7x ¼!Ú�Þ-üIb ùÓ´_ö Üu}êv<�ŽíØ£·†‘?+«Sº ÛÍãO‡ËˈCC¢ü1ßµñpÃ÷,úøÏ§,W_Žf kYzL\j¢åËìàsA¤ˆßå-Ñû3Ó�91ÛÈ“AßœIÁ┠΋sž�åþ¸ª"~ßòÅJtüéÑBæÄy�~uŠÖ"GrÎÀý¸ÚÒÂ=·Ž¨_š{ Ñ?“ð')1ä�ª=•>1ÇýI¥×ãàIUoí[îO#ö„ÇT>(—9üqá¿l´ñ̈û£Ç>Á û¿ö'¨Ïßj¾1I¢ÈŽíce;d8o%gʹ?�3-Ø0òÇ0Ô¹¢˜¨»‚¸þ8ªïªÁÇš‡ý�¶Mþ$#FüÑr2äo;êÌÚ¿›û“ m豩üÑݺý–J~È–8á¿qøÎömåsq_tþ¸.l¡À¦�$ª?ü!g<ÄbîFPëXãþ 9¤IÊm”Ò•ºûùä—Ë[pþ–_©(S ’#þæ »mÀ}þöÃñÇc²aø&ˆûc‹ç–vP‘GÇó‡�ÅŸ?:×øcä ZŸQòåå•»"þ$1ÆêãNÍæþèó7î�>CboÄnŽ‹R,Ž®~ «6±?ì[`bîÏßø9*ˆA CožÑ<å<‹wfŸ^ŸÄþ'‰1Z+lë”)¤ú÷Gÿ¤n½?´ëçþD5�9‘4šÏ”§ù.åïïö†/¦=Â^?‘?Á4 @2ÌËý¡uŽú�o…¢ÕζP߯|“]?›� .Ú(ë�.&×èP9ê—Ò:mÇ ˜+Ðï\ço=öz½Jë{jýz…¨¿%1ÆüA¬yÛ€ùÃÊÔˆ4¬~ÍüáOêNä�½*„rµk—‡(ç À¬Õž½ôSÑ�ü ô ªt Ÿ+Ž?!˜TáBÕúRU�?¬~=��/ÙØÛØJÕhµ~ Ë©¡×`H #ð.¬èýSýZw:§­ÄFÔÞ¬Ö[»eáOó«÷¿á×&Æ´èï?ø/È87QNŒ®phœLqÿA’ò+þd^�2ö³_e•ðþ·ÿ�ø�gB¼~Å·ü˜¸ÿ­vñ+þäk~ªºM‚ɱ�hØxs-9V!U ›~~áO2ò[?¿°ZiØ8­¡8<Ö$¿ÕŸ†ë§É²8<Ö�@ ¿™“ïÛÔŸÙ³c‚  bd ׇ™Ø€ulh°`Q¶³é )ìbltœ"ïÓÁgæ3Ií@ÒÁ‚´:�pÀÁêÚ=€t~vä´K9›Iÿ�¬Ûó@ÎCýïXßþlýß4D”>,7¥×"@�Qz¯ïÀb㸅ÿä~*?¯öé˜PÿÖFðsÐü�Æ8âø;+æbQÎT¿†IEND®B`‚pydantic-pydantic-e28e879/docs/img/vs_code_08.png000066400000000000000000000255561526274674700217170ustar00rootroot00000000000000‰PNG  IHDRÕ ly+�úPLTE%%&,,-..!EEE445!*4‰‰‰%%,+%&$%%&@5$%ÍÍË`ɯ¤Üû<)4W6Z’m7*,/;- Al¢‡°ÅÉÈ¿­É»$'T[Ä¡I$%'.b+BnÔÔÔ@„ž3+5IONB]H;9_š–_6ŠQ2»‘\,7/F+)@&'*,E{Ëõ8K^/A^žÍ´ƒqPa–¾†„z';c?!\Õ,2m&(MN1&+6†-]‚§tF!!]Á¯ˆ0PrO„±Ã¥sU'%ƒM/8H']*&[�¸Q·¬8//™ÃÊÀÇË:lÅFs¬Y±s{cG5=BL«©É¶†­Žk+¨ÑÈžN5[¤ð%+wƒ‚j6T¾ASgBa+°Æ­"G}E.6ƒ;)O“çB–¨`y…Kh�u_8W6,H‡ì�ØÜe-%žÔß·ÁÆÀ̰Ķ�g\GJƒË2jŽk‚‡*@z¾›i¢Úò¨¾Æ¼ ¼ ÉêâG·šÛsh2Ê”;R5¹¿zäÈ!M³ºÛÌä&TÖÄ%ö1¥}çpA�û²Öê-1äZÝaŽú‡£X«Íø”èÎáË4Þ¼n®–µÃÏñLÍIÀ™!œ[ˆI¡gHÄ+Iò 0¸€ßíc7XŒ¬.~t«£ªmª'£hõý“«­f&`ü`–°zmgªÖ Õ^|°cÔP­q ûk¬Æ…YÍEžâBkj¯›«û—vV°‡Réqq%÷´‰=I£»­$‘ôz˜¿=¨ùœš«í'IV?¬9˜×ê Å…5’[ÍG‹øŠÿfµ˜k5—9oU;+@Ùx$4$²ÇÇJÍ®s ù¬–]4ZÜ%äX­%�µVw/‚71 ø‘FÕâD«Qq\¶ÚêXN \bÑ­¶æµzH\9+¨·Í"“WO"Âê‚S–@‚šÕ)²º¨É±Z-ΛóX-ÍÚr˜9!¡º¼bJ Õ})ƒàéVsë Bîh±.\Èê¥oJÏ�ÌŒ£YV£ð·•ä&�PL;+œ·UN£¸5r ×5«ÕÑ"Öç ¼h'-F”q[WÄì9./¢hɱ±³‡��| ;yA@ü¡$ Fìô±ƒ§éél«¡ËÃ:{UCvñÎ^(…SSv†Ñ‘]«‡gxgï°ÖÙë•jíݧ6ZŒÇDí¬àŒc×0N~ ëV ­³_Hd:{q¾©€ÝÀ$ÏÕœ õòÂF‹±ÝèV eø¼'«‰¢`ÅêcËd5AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\ùœa‹x=±Ü¿xžËßbrû²¾K’o½í&¾Ú{þ|5±ó8½I«-ÌY‡ζº?œßjG·Tþùƒí%I’œ6ÀºØ%ÜÕR y­Öçò3öú�å°ÆU\P€ßbçq VkRë¶Ku›UÚ+ëÜsâúVËq8â[´ºå®­ÕSSmmgýžÚÊ*ÖÅBEë`ýó‹šÕÞ}̓õ'ÐEáðÄ`ó'¸¨±uðÓS�UV;dKèIO‡”0î’�¤·çû•ZÝ’c¼4#\qßÅW$·¤DpzBò;æ�I^@‡…þ¸” ƒ]™N Ó£hõíÓ!9½ˆ�à”yÜÅ”°ºe/ãnðÑ=ï¾y¼­ï¾ùð÷ßÁVœ°ft¾þõ»oþr dÑTÄÔ;píħ06*â÷0.ÀÙQ¿//F�á-]â çþ‰¥·ï èV;Þ¾ª¢÷À¡ú=eu"-£•Fç*«�(5³Zq ‘n³–«KÊÕåaVËi[ŸìÊ®Õÿü%ff�¬ÕgÆm•–” �µU~‰Öô¥Â6¼!ìJ][cÊ©¼‰[ÛÒ¡„k{0IûqË®ÄìÆµšY}ôñ«+n€±£Ôöý@()éüøz¨m}ýièüêWó½wÜ ×^Ïy´!Ëêú�c»fµµååÒÛ[GÍ€ü©F�cßßÄÎØ¨yméÄ…M‰o�áíÈI rH p«ç‹k@³Úò¡¸ÌêîEÕ=Ýêß1VgŠ7–fN•€FÜ…ág[{1»Rš�­Q vvS8Ðn&r…äSSÍ1<ðf¬~�ߟ�áÄÿÑoü\�±f¿ÊV^ÀZý!/�„²=œãb–Õ'Ø®šÕMÍß²ÿ¸úÈê‚Ðr"'W?Û‹ã¦Sfð÷6þä"S|ðÔ+íÙVKãž!‘Y�¨–u«¹‰5<� ž`«•v[îÌâ„$áæ‚E^HÛØ(‘“´+‡äC«�Ê"? ÉT�aSV_Ð&S¬/ýp `‰ÞË8‰V߇Vÿš7�!ÛêÓú0’ÿbG°ÆêC"t¢Õ൘`S0:[oX•«í¡ fµkóV«³5rÀäž3@ßµöËNù®Zms¬æãƒ�³)«ßį[Ýòðk¼D34«µ²¾Õ£f½ ò;„ìbVÃ.D›ÕÐíZq_̶"J@·zmÑ­Ösuƒ:Ë]­âþgL¶âÎ~”7c5~®J x’* ¶@ª¿_,`µ6ZÄP}Uy9îØ{ôƒö'›?Ü0�ðáô`¬½£íÆ;_1ó.ÎAÊÕ;­³çÅ—ØÙ›h=€VW?0ñé©qñ� Öê[m5ØC1Íj§Ä`í ÞÙÓ­æ}9ììi/1ø[˜€3.§¾Ä]MÓq)ÕÎ^|! Y­vö ìr\ë쥸s]IÝìûï Õj­³×ô•ÞÙÛ{ô‹ã›°Ú;†]Í•Îö7Õ×HdõnÛÛõãÀÏG`»Àb7Ò6”%æ ?ï„Ë‹P‹Û†ë&ê€ìNìqL ôæ� ‚ ˆ�¸Á°@; ²š(>Èj¢ø¸$«}ü hðÿ¶üÄÇf¬~⮆ŒÇ§Ž"¼ôž˜ñz³V[=A ˆ�Ù~«²ú_öÎ?(Š*à÷(éÖî6 O® 8êô(³'Âã" Âj¨H‚dšcj g*'Aè2ÙLBe¿l°&"úeXM3¦“�ΤäŒÊ$SSýaŽ÷}o�}ëÞÞrœÇòýÌÈÂÞ¾½·Þ‡/ß÷n¿ï�Ègr«¥Â©ß®1=ppÁŽJê4Ûñ�ÂêäC šO5æyà;g)½wãNVá·ú¾»w5�x >_ÿÒA˜Ù{!xA×}Pż~ágxáÌ"á†W™#H„3«ö̳¼1A"œ)X}Ç¡ƒ;6˜$Ò™Îû@.G „i3­VÄ0 Õhµñ@«Ñjã�V£ÕÆc®Y ©q³­68sÍjð­6çðË­Iy'kŠVk ÈmŠ DËê•¥iLnØdžÌ"DR<”£EËP©öAƒ¢Þ\Ùê"ð|ÞFkf OHXCÐ ¶–¡tÙêÌ“5þ'N:Îr–Эf¿„Ñ_×ÈMy‡UVónܺžý³ô¯‡ƒ¾<¥¶ZŠææÏN™÷ž";ð“t´Z›K?Z|ìÅÝ -µš)‘–% v{oÍ@¶]`õÒÓ…�ÔHyu,|aVËÉÁ™8z2¥Õòo‰åëtImfµôœ~µ“à;NV䕚ò«­æ”}ä¤YÅ’}pVe5˜.©]öûÂ[?r~¹ž Õ:\ú™=¨õ¢ŸáõÈ�»è ×�VË^�Äy`/XÓ•OÓ¶CiµyyCŠ`Ò²ºSà#Éò©Z혢Ջ×\¸_ê°®Õ�Sï�h Âjuݱ˻^‹ëß‚VërÉß…Ñ@e5ˆêϯϞÜàÿ[îÖ°’zP�œ�ÈÖ5äòL O+iTd ¹Ê „[m^—¯k5ëëf–r¿Üa«ÁÚŸ ù ·:wÂwEGœ]¿çì±\´:³ÅjÉ‹m!Ú:Hr‡V¬nÌqF{ì5|´»Šæ dEANJ÷óÿ8 nªG‹Ý�OŒ©„Õ‹�Ì;JÌt´øœŸ©©�WwÂíð7¼«°º¨·2JËlGšÊFò~Þa8¢vžÀ­æ¸ú†©©eÃŽü¦ÝåléÈ?ÊRîS°•F‹c[@ÿá-uc¿[Ñê`Ì«ýo�€zLÞÁÛø¨Âê$–ÈŠ²bÄæí‡ÀÎgöÈŠH§¥™=o—@iQÍìÙ¥™½6)§ßç³§³™={}-ѳÚ?“ça[Ú³Ìý¬iô`‡Ý6¾QnÊ; ™¿Ïž¦eµ¥ÿ{ò�0�×µ•}7ÖwŠÝý}tƃ>àèLI"KÐê`Ì«ÙûÜÓ{ï=°z)$S­ʬ±šÄ잦×Íüü{$PßµâñÅS.�hõ,aNݳW76G Z=­6:h5Zm<Ðj´Úx Õhµñ@«Ñjã�V£ÕÆ­ž°zbÐjŒÕÆ­F«�Z�V´­6h5Zm<Ðj´Úx Õhµñ@«ÃduÔÌ^E]w`nE(; ¶TÎŒß7m¡ë;pª˵¡ÕÀLZ�±¿Ð6þ^H¯Ò¢,"°6Þ Y öÖ¬Ôöü<ˆÕÕyž JêÈÊ�šžk-ÊYºhƒ¿è>¹CYVýÜ ÚVÇ6äò¦hõ X½¢ã@Šë•5Ól5ÑV'?\NÈ´[ R«â?ZN.ç&ßD(KG[|Þ.+Ôö�ÖWß:Úbƒ$‚9¬c—9$RÒ”¥¶åáH²VÓß*Y_KëdEÛÿ|㣭‰ü\~ª¼=Þ³=ÞZé/EÉMÄ]ßSÿdKöVRÔ:Z…½¬?¬æ–ÄVœïñÕoT[ÍÊr}Pâëï·ZÞ!7U[]}\:­�GJÈ×jöäXé$忯ñ‘¸4¹ÃZV¯ RË×j9,Š5DZÈûäÃq`õù,G˜*RŠ�hõŒY�yòa$<ÛÖTÖ‘V·nµnH¼­K¨Z\¯NvŠ«§Ý¿ž¿e {´!€õön«²SÖí©äyu梜�Mʼnò¹d«·¯õô>õWº³YZ¢ÏÝúÔPq÷P)Çš[Òˆå¯ì”îÑVÐ'Ö6N—ûãV{²’~Û[·–PxÍÊû'Y-w˜7M~;×}L«5�TÇê*°‘¸³�æÆ3s|ÅF2Ña"_²ðtµú|•š_+Í«Yžrõœ«[²S6udI±š7E«§ßê¤Re°ð´ l™x_™¯¤Å’b½qÜju9wRAšQf•l5È[/j±|.nu}njqb|Ž•¥WUä¹ÛAIˆÂ¤¨wDãv�ý¹NÚì Â9ˆ¬£ï³šïÐlÊ­Ö9’[� ›Ì¡,èíXh¢ÃDœ¡Ð–F~­’ÕIð}êv°z±ºøŽÀ¬ÆÑ"0ãV³¿ç¢˜ceKz¤Â{<ØH_ÛØŠm`¼þÜj>ÎE›ĵ�?˜B Yáø­m·^`ö"Ÿ‹[�˜ší«—‹”3qîvÁ“n^VÃ‘Ä �‰ â6¼Ìj¾ƒ7Õ´ZçHn5Íóá ¬N§–3Ot8Ðjߨ(Är¯•Yíï'œƒýƒ¸�Vsf:�h²V ž©X�94ö.èë�2ža‰ô’½û k¦duŽÝ­†¦”KmõʇËin V ÌjÚaM ¯Îʱ¢ÕaF´è�—+º±3ÐjeRC¬¤TQ« ŒŽ¯ÔˆŽÕ°DŸÊêÞ<)�¦ÜêP3�wTˆžÕzGòë‰nÛœ&­È†µšTµlàV«2n5{6´˜1«I2Ììu¿R qu«9¶PÃj>¤‚äòÝ(…V'k„¥‡!‰y6eÞ¦á=×–ïJT£E=«c ÆØ}Üj±d`p1-¶>µnω¼à °Ñ¢ë>Z¡*è:{|Ç$Vëɯ5ÕG=67Úºš<Ú':¬iµÙÓ§¶vÖ§¸†Îp«ÙbƒQZÍ™±wa,§[¼Nkd |ú‹$÷ø”3{?÷ØêÏB¬Î<-M Fïó–…[¤äXùÌ^0«Ù³×ß"p«3{¢·ß©£¦jf�Í¡Ñþñ“X­s$¿Ö¤i�̱ý>yf:¬i5�Ä)gn>èÍ•gö¸ÕÑûZ`f­–˜=ï˜+pçDúŠ^º¬¤)-^<³&˜�˜L³Õê²”|¤¿³ó’ÓÙÎÿiuF[þ’Ã,Câ ÕÀlµz�¦&³9TWÑ·Yÿ§ÕÉ=,ÍQ‚VSf«Õˆhµ´A«Ñê¹Z�VÿÇÞÙ…(Eq|ÇÒqÚ6¬°O"hÛ(´ÖdŒ2胂°F‚¨M*²¤,¢(‰íÁu‰>£H‚–z­Ø‡ˆPb£ ˆ Š‚ê!¨—Þz襢çþ÷ÞÙ36å¶cK6v/sï=s�ëÏë¹ÇsÖæ›j›êæ›j¢ú—ë¶xnDãÑêq÷SžÜ/È2Y>ïrÉUæªô—$+ËšôÇdY°Í¦ÚÕSÌžuš}<ƾ/kÕθ©nËL5%‘ªµ²'¨ÔÁ}iOŸ�Kɲ\*ó ƒj 0XWfo½})¹Òa‘kMØËEôu IX«ˆÌ$lª¥P›S.-P=ˆP&’eª“ÎÞL—ß:ÕĨuªÑTªÑμb�j·3Ú[ТÎÈ kDcj‡ó•5Þ›êƨvßÛ™�¨ä˨ÛÚsnòc 79/%=çxΨFB÷@ÜHÙÀ÷.Lßdð@àÔ|DbÅlÊÈØ½†�l¨ð¢‚)¢]¡Tœ·îlP ÚëO©%?.»ú’"É;€­�µ²è—ëﱤŒm»ýT^IîîRªÒƒ�Î~±#»º5lιÑ}]¦†u»¡ˆ¸S±_.µQé*B9¬›ATCFØ+ƒ ¥¿$Uí©BBjkæÞHÉfÀpn.l­™¹%Ÿ$ŠMµª½X¹ë1§šCM%_äWOŸòúè½5 yl#ßZ¡ïÕ¤jö«¹ ÒëJ~Ó^-нwhŽÀU#{ÎápL<•  /*˜ú–jw· ‰¨.ÎtF3 |™œSIÀHå#Ñ¢_ $�Dz“ ÀûÕr)â©Ì-h‘hFSÜÝjc>hqÆ@¨Vóo•öêìù6}‹ìêpÆÒ=p,‚¯æ‚Vê€n¥ìŽúÉ 3Õdpˆ©fr¤JTc•²··ŒÇƒ£3‰jš ¿C‹x‹>qÓ„MµõÓ"¨ž|x)û ”|ÕË×ûó ÿºý3[¶ÕõO‹»N‘'c¦zÃÞÚ$i‘‹­š*¼¨`ЍövƒÀé ?D5tptGFw7g û£6ðŽ½‡Ã‰ú\—¡´�Íäìa'Ç`Öuuª1?²êKì*ÇÍÀt‰:¤€Šž3ÌT“Á!¨2#IUP-¸çû0QM3ñ¢0ëœMuCTïørn/ž\JMÕ©få ܧf?Hi Õ‹&íx\)ÿ�jžGU)|.sש‹’X�Ó¢ÚÁ·=ŽQèÇp« FN6Ý�@¯~r¥6ËÔ0¿~¹X+ÐB&ª%o,íÓÏ~GRKטa¦š ÌŒ{{ugªRªr‹ÕRþ•ôý"î¬ZÉ—…aMCõ’yÏ¥!͵Ñã¹óËTÏ‘&žZù{¨†kX8w¨g(T»Vñwªð"ªé´Ñ ÜÛ“q¢aú÷TS y†¡ZªE#6I× TÃ7P‰bE8êЩ&3ÌT“ÁD5©Õ’·÷F*Ç Šöp ó"�öb¿×oÚ$T3®Aõ¹6Q½éøUëT£ %l¦ rÎLT· J5ñ[�jÙ(Â.Táe¦š0J÷Rò–ù»þ3¢ºÖA+´դȨ>oö@ ªs|¦*HÔY"ª .¢šÌ`Õµ‡RWÙ ?©ÕddQò*é�õ´Y$Æã6Õ R-áÿ¶(fª±¥^Ð^0¨¦Ó¢hcyæpeBgn!XvvæÛà2qf»Âúi1nPÍ Š0ëXd/›öIσ‹öʼnjêЩ&3Äcv(D5J�/÷r¤J‘=w±ig¯©ýy§7¦†¡˜ƒ÷Q³ÈèbÕÑ™L诞f£zë…Ëž]­¸L=={ ŒžE�.Ÿ=Ð!Úåªw?å3?ñ@6„­R�Äl¢šê¶(²GT/ÂÿPÀt³ A8pú‹“cjJ}ª)²7‹/²�*¼êR�ç:,îô,%k,ú¥Vúj¨h<@&"|•:8Õ,²‡ˆ™‚ÈÞ =¤Æ#hDµˆ¥É ú«°ØZ™¨¦�j2ƒÝ$ U¢š ¥‹)DöH•>…�*®ý0«_,sÔRwÍ"£o`F^�¤y>…Õ¼¹UŒŽŸÄåüòÖ�Z[Ænòm+¥cÖ?HUÿúŸµ¶ø1òoYÏKP݉êÄëFV¢Ö)¿ZÆpd äyábÇ–w'Ê7Î]=ϸ×mKC“ØëF¨»b•ºO9êSÏKPÝBµ»@Ê…ò˯ìÅt]1{ª}›. z‰§øj ¸ëP™Å =àbÕ\{éBäÆGþŽ>ûø^ ÕÞí�õÚ¥n�{ü•*¨îg�°X �uÓŒ¹&+ŸŒR÷Ts\«F€§Ä8ÕgòL)Š‚�º TS;ÕÁÌêQTC-T_ŽœdÇ“ ºŸeQí«¸^VÙh ¼i)ØwɤC¡<\ÐÓ%öÞH¹X¢bè!¤ÔóÉ|ÓC7ôJ‰{ÿSÆ$cÑsªaÏheÎ;Û¤ƒßNõÝ�1•¨–?¬Ùo½¥�²´Í;½q'“âSD ´´;€æµˆ“ÎÆÛ6ê@òñ(L®RÙ†j“{‡ð“±Õ…»s(u.àfiüÉûA$¸OÍãYa*“×±Þ• º…jÞ‚àÒ<ƬTH‘ojl§ú¾QòUòŠ+V¹0^H±Ä¦9i<Ÿŧ— ©àŒŸ$r!×èÕÕD|N¢�¬–Û©N¾Ž;ˆê¡ä“Ù7KˆÈt§íèoªÍÀÛsW‰cÈC^=4©&Ÿ 2”<»xÚ‰gÎ ˜ß.¼2¾½$!¾àß…÷'UN5˯ Í}êÖè³Ó¢š×±Þ• º•jŽç4¨&„�!\TªT\œÇ¼6�ãý¨¤ $Ò¤ÕóëÎ;C<óL �À\§ºjèº1böÕˆ&Òúæ?Z‹@ß`rî‘_.úÁjæ<:Œ‹SL.6P�µÉ7»j#ÕòþZV5Ëö—pó3ËwY6±K#4˜9@5£cÎlb ÓAë] ªÛ¨ž1¦�±©éxMùFª%-ÇûêeÙbµlZ1iÒ¬|è=�EµÇxŠWÉ¢ZQ´œ"³êõÕ3›a¥:Ò‰jy"ûÍïÝv˜;èÇAmÕÕAûwÖH5"~\:Ú ]¶øfþ&‘»µnfÑu¬ˆƒ™+œjeoÍäT&1ÕëzW‚ê6ªÑ,ÀiM¯¬bhåÄňj;y5Ïo¢šÆ„ž6 �š$¶v /oï@8Èãñµ¯Æmê¾Ê©Æ£ÓÍK¾­çÎFª¥øç䜻¥ñ|áû‘)¸4ê~þ˜óÆ7ÔÁ:Õ¡Ìj“WS]oKPÝF5K€Œ÷Õ_i€¹�Ê´±Vªë}u@9CSm€ç7Sí5žÊZì@ b¦\@FóÕbÞ]­~µHö<ô°±¯þ69:»eWÏÎ^´úêwͪYubL %Ÿ„O¨îQu1bRýqÆ®ÛǘdQ�'”9kRío�vÊÅ%^'®û@ TKp«¯�¤ cà¶•j¾BK4 r<¿™jxðŒÆû.—ñ´<žá•öUÝí@¸jW;¶¢íóæcªÔ”DG´ÿ$]>¸¡¾7Ö€§3¼¶>/اť£Ó¢Õ/Ÿ, !²ìª]ºUªzx?ìÛ‘ù£™”\å­ÐÓ~û´(Šº4LœÁã^\uÿ'{ÄßñÅç,¸¯šãí— Ý|´j-ìê Áè®þ2yôdÏÚ…\hÿEøÅh¾$ý¸!Žk¤«žŒ˜ypÒBDÙZÝÍU Å;eÏêàäÕCÙZ.ëæ*þÙz-G4üŠ×WÃßuà'»vp@Að¸Ÿù'¬ !BS5),�KöUÿf¡�Vãªé®š­¦G«éÑjz´š­¦G«éÑjz´š­¦G«éÑjz´šžõ#:Î äù?o³kóô€ÙúÿÚf˜ÐÛ’#Q §IEND®B`‚pydantic-pydantic-e28e879/docs/index.md000066400000000000000000000173751526274674700201350ustar00rootroot00000000000000# Pydantic Validation [![CI](https://img.shields.io/github/actions/workflow/status/pydantic/pydantic/ci.yml?branch=main&logo=github&label=CI)](https://github.com/pydantic/pydantic/actions?query=event%3Apush+branch%3Amain+workflow%3ACI) [![Coverage](https://coverage-badge.samuelcolvin.workers.dev/pydantic/pydantic.svg)](https://coverage-badge.samuelcolvin.workers.dev/redirect/pydantic/pydantic)
[![pypi](https://img.shields.io/pypi/v/pydantic.svg)](https://pypi.python.org/pypi/pydantic) [![CondaForge](https://img.shields.io/conda/v/conda-forge/pydantic.svg)](https://anaconda.org/conda-forge/pydantic) [![downloads](https://static.pepy.tech/badge/pydantic/month)](https://pepy.tech/project/pydantic)
[![license](https://img.shields.io/github/license/pydantic/pydantic.svg)](https://github.com/pydantic/pydantic/blob/main/LICENSE) [![llms.txt](https://img.shields.io/badge/llms.txt-green)](https://pydantic.dev/docs/validation/latest/llms.txt) {{ version }}. Pydantic is the most widely used data validation library for Python. Fast and extensible, Pydantic plays nicely with your linters/IDE/brain. Define how data should be in pure, canonical Python 3.10+; validate it with Pydantic. **Sign up for our newsletter, *The Pydantic Stack*, with updates & tutorials on Pydantic, Logfire, and Pydantic AI:**
## Why use Pydantic? * **Powered by type hints** — with Pydantic, schema validation and serialization are controlled by type annotations; less to learn, less code to write, and integration with your IDE and static analysis tools. [Learn more…](why.md#type-hints) * **Speed** — Pydantic's core validation logic is written in Rust. As a result, Pydantic is among the fastest data validation libraries for Python. [Learn more…](why.md#performance) * **JSON Schema** — Pydantic models can emit JSON Schema, allowing for easy integration with other tools. [Learn more…](why.md#json-schema) * **Strict** and **Lax** mode — Pydantic can run in either strict mode (where data is not converted) or lax mode where Pydantic tries to coerce data to the correct type where appropriate. [Learn more…](why.md#strict-lax) * **Dataclasses**, **TypedDicts** and more — Pydantic supports validation of many standard library types including `dataclass` and `TypedDict`. [Learn more…](why.md#dataclasses-typeddict-more) * **Customisation** — Pydantic allows custom validators and serializers to alter how data is processed in many powerful ways. [Learn more…](why.md#customisation) * **Ecosystem** — around 8,000 packages on PyPI use Pydantic, including massively popular libraries like *FastAPI*, *huggingface*, *Django Ninja*, *SQLModel*, & *LangChain*. [Learn more…](why.md#ecosystem) * **Battle tested** — Pydantic is downloaded over 550M times/month and is used by all FAANG companies and 20 of the 25 largest companies on NASDAQ. If you're trying to do something with Pydantic, someone else has probably already done it. [Learn more…](why.md#using-pydantic) [Installing Pydantic](install.md) is as simple as: `pip install pydantic` ## Pydantic examples To see Pydantic at work, let's start with a simple example, creating a custom class that inherits from `BaseModel`: ```python {upgrade="skip" title="Validation Successful"} from datetime import datetime from pydantic import BaseModel, PositiveInt class User(BaseModel): id: int # (1)! name: str = 'John Doe' # (2)! signup_ts: datetime | None # (3)! tastes: dict[str, PositiveInt] # (4)! external_data = { 'id': 123, 'signup_ts': '2019-06-01 12:22', # (5)! 'tastes': { 'wine': 9, b'cheese': 7, # (6)! 'cabbage': '1', # (7)! }, } user = User(**external_data) # (8)! print(user.id) # (9)! #> 123 print(user.model_dump()) # (10)! """ { 'id': 123, 'name': 'John Doe', 'signup_ts': datetime.datetime(2019, 6, 1, 12, 22), 'tastes': {'wine': 9, 'cheese': 7, 'cabbage': 1}, } """ ``` 1. `id` is of type `int`; the annotation-only declaration tells Pydantic that this field is required. Strings, bytes, or floats will be coerced to integers if possible; otherwise an exception will be raised. 2. `name` is a string; because it has a default, it is not required. 3. `signup_ts` is a [`datetime`][datetime.datetime] field that is required, but the value `None` may be provided; Pydantic will process either a [Unix timestamp](https://en.wikipedia.org/wiki/Unix_time) integer (e.g. `1496498400`) or a string representing the date and time. 4. `tastes` is a dictionary with string keys and positive integer values. The `PositiveInt` type is shorthand for `Annotated[int, annotated_types.Gt(0)]`. 5. The input here is an [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) formatted datetime, but Pydantic will convert it to a [`datetime`][datetime.datetime] object. 6. The key here is `bytes`, but Pydantic will take care of coercing it to a string. 7. Similarly, Pydantic will coerce the string `'1'` to the integer `1`. 8. We create instance of `User` by passing our external data to `User` as keyword arguments. 9. We can access fields as attributes of the model. 10. We can convert the model to a dictionary with [`model_dump()`][pydantic.BaseModel.model_dump]. If validation fails, Pydantic will raise an error with a breakdown of what was wrong: ```python {upgrade="skip" title="Validation Error" test="skip" lint="skip"} # continuing the above example... from datetime import datetime from pydantic import BaseModel, PositiveInt, ValidationError class User(BaseModel): id: int name: str = 'John Doe' signup_ts: datetime | None tastes: dict[str, PositiveInt] external_data = {'id': 'not an int', 'tastes': {}} # (1)! try: User(**external_data) # (2)! except ValidationError as e: print(e.errors()) """ [ { 'type': 'int_parsing', 'loc': ('id',), 'msg': 'Input should be a valid integer, unable to parse string as an integer', 'input': 'not an int', 'url': 'https://errors.pydantic.dev/2/v/int_parsing', }, { 'type': 'missing', 'loc': ('signup_ts',), 'msg': 'Field required', 'input': {'id': 'not an int', 'tastes': {}}, 'url': 'https://errors.pydantic.dev/2/v/missing', }, ] """ ``` 1. The input data is wrong here — `id` is not a valid integer, and `signup_ts` is missing. 2. Trying to instantiate `User` will raise a [`ValidationError`][pydantic_core.ValidationError] with a list of errors. ## Who is using Pydantic? Hundreds of organisations and packages are using Pydantic. Some of the prominent companies and organizations around the world who are using Pydantic include: {{ organisations }} For a more comprehensive list of open-source projects using Pydantic see the [list of dependents on github](https://github.com/pydantic/pydantic/network/dependents), or you can find some awesome projects using Pydantic in [awesome-pydantic](https://github.com/Kludex/awesome-pydantic). pydantic-pydantic-e28e879/docs/install.md000066400000000000000000000043201526274674700204560ustar00rootroot00000000000000Installation is as simple as: === "pip" ```bash pip install pydantic ``` === "uv" ```bash uv add pydantic ``` Pydantic has a few dependencies: * [`pydantic-core`](https://pypi.org/project/pydantic-core/): Core validation logic for Pydantic written in Rust. * [`typing-extensions`](https://pypi.org/project/typing-extensions/): Backport of the standard library [typing][] module. * [`annotated-types`](https://pypi.org/project/annotated-types/): Reusable constraint types to use with [`typing.Annotated`][]. * [`typing-inspection`](https://pypi.org/project/typing-inspection/): Runtime typing introspection tools. If you've got Python 3.10+ and `pip` installed, you're good to go. Pydantic is also available on [conda](https://www.anaconda.com) under the [conda-forge](https://conda-forge.org) channel: ```bash conda install pydantic -c conda-forge ``` ## Optional dependencies Pydantic has the following optional dependencies: * `email`: Email validation provided by the [email-validator](https://pypi.org/project/email-validator/) package. * `timezone`: Fallback IANA time zone database provided by the [tzdata](https://pypi.org/project/tzdata/) package. To install optional dependencies along with Pydantic: === "pip" ```bash # with the `email` extra: pip install 'pydantic[email]' # or with `email` and `timezone` extras: pip install 'pydantic[email,timezone]' ``` === "uv" ```bash # with the `email` extra: uv add 'pydantic[email]' # or with `email` and `timezone` extras: uv add 'pydantic[email,timezone]' ``` Of course, you can also install requirements manually with `pip install email-validator tzdata`. ## Install from repository And if you prefer to install Pydantic directly from the repository: === "pip" ```bash pip install 'git+https://github.com/pydantic/pydantic@main' # or with `email` and `timezone` extras: pip install 'git+https://github.com/pydantic/pydantic@main#egg=pydantic[email,timezone]' ``` === "uv" ```bash uv add 'git+https://github.com/pydantic/pydantic@main' # or with `email` and `timezone` extras: uv add 'git+https://github.com/pydantic/pydantic@main#egg=pydantic[email,timezone]' ``` pydantic-pydantic-e28e879/docs/integrations/000077500000000000000000000000001526274674700211755ustar00rootroot00000000000000pydantic-pydantic-e28e879/docs/integrations/aws_lambda.md000066400000000000000000000166501526274674700236210ustar00rootroot00000000000000`pydantic` integrates well with AWS Lambda functions. In this guide, we'll discuss how to setup `pydantic` for an AWS Lambda function. ## Installing Python libraries for AWS Lambda functions There are many ways to utilize Python libraries in AWS Lambda functions. As outlined in the [AWS Lambda documentation](https://docs.aws.amazon.com/lambda/latest/dg/lambda-python.html), the most common approaches include: * Using a [`.zip` file archive](https://docs.aws.amazon.com/lambda/latest/dg/python-package.html) to package your code and dependencies * Using [AWS Lambda Layers](https://docs.aws.amazon.com/lambda/latest/dg/python-layers.html) to share libraries across multiple functions * Using a [container image](https://docs.aws.amazon.com/lambda/latest/dg/python-image.html) to package your code and dependencies All of these approaches can be used with `pydantic`. The best approach for you will depend on your specific requirements and constraints. We'll cover the first two cases more in-depth here, as dependency management with a container image is more straightforward. If you're using a container image, you might find [this comment](https://github.com/pydantic/pydantic/issues/6557#issuecomment-1699456562) helpful for installing `pydantic`. !!! tip If you use `pydantic` across multiple functions, you may want to consider AWS Lambda Layers, which support seamless sharing of libraries across multiple functions. Regardless of the dependencies management approach you choose, it's beneficial to adhere to these guidelines to ensure a smooth dependency management process. ## Installing `pydantic` for AWS Lambda functions When you're building your `.zip` file archive with your code and dependencies or organizing your `.zip` file for a Lambda Layer, you'll likely use a local virtual environment to install and manage your dependencies. This can be a bit tricky if you're using `pip` because `pip` installs wheels compiled for your local platform, which may not be compatible with the Lambda environment. Thus, we suggest you use a command similar to the following: ```bash pip install \ --platform manylinux2014_x86_64 \ # (1)! --target= \ # (2)! --implementation cp \ # (3)! --python-version 3.10 \ # (4)! --only-binary=:all: \ # (5)! --upgrade pydantic # (6)! ``` 1. Use the platform corresponding to your Lambda runtime. 2. Specify the directory where you want to install the package (often `python` for Lambda Layers). 3. Use the CPython implementation. 4. The Python version must be compatible with the Lambda runtime. 5. This flag ensures that the package is installed pre-built binary wheels. 6. The latest version of `pydantic` will be installed. ## Troubleshooting ### Missing `pydantic_core` module The ```output no module named `pydantic_core._pydantic_core` ``` error is a common issue that indicates you have installed `pydantic` incorrectly. To debug this issue, you can try the following steps (before the failing import): 1. Check the contents of the installed `pydantic-core` package. Are the compiled library and its type stubs both present? ```python {test="skip" lint="skip"} from importlib.metadata import files print([file for file in files('pydantic-core') if file.name.startswith('_pydantic_core')]) """ [PackagePath('pydantic_core/_pydantic_core.pyi'), PackagePath('pydantic_core/_pydantic_core.cpython-312-x86_64-linux-gnu.so')] """ ``` You should expect to see two files like those printed above. The compiled library file should have the `.so` or `.pyd` extension with a name that varies according to the OS and Python version. 2. Check that your lambda's Python version is compatible with the compiled library version found above. ```python {test="skip" lint="skip"} import sysconfig print(sysconfig.get_config_var("EXT_SUFFIX")) #> '.cpython-312-x86_64-linux-gnu.so' ``` You should expect to see the same suffix here as the compiled library, for example here we see this suffix `.cpython-312-x86_64-linux-gnu.so` indeed matches `_pydantic_core.cpython-312-x86_64-linux-gnu.so`. If these two checks do not match, your build steps have not installed the correct native code for your lambda's target platform. You should adjust your build steps to change the version of the installed library which gets installed. Most likely errors: * Your OS or CPU architecture is mismatched (e.g. darwin vs x86_64-linux-gnu). Try passing correct `--platform` argument to `pip install` when installing your lambda dependencies, or build inside a linux docker container for the correct platform. Possible platforms at the moment include `--platform manylinux2014_x86_64` or `--platform manylinux2014_aarch64`, but these may change with a future Pydantic major release. * Your Python version is mismatched (e.g. `cpython-310` vs `cpython-312`). Try passing correct `--python-version` argument to `pip install`, or otherwise change the Python version used on your build. ### No package metadata was found for `email-validator` Pydantic uses `version` from `importlib.metadata` to [check what version](https://github.com/pydantic/pydantic/pull/6033) of `email-validator` is installed. This package versioning mechanism is somewhat incompatible with AWS Lambda, even though it's the industry standard for versioning packages in Python. There are a few ways to fix this issue: If you're deploying your lambda with the serverless framework, it's likely that the appropriate metadata for the `email-validator` package is not being included in your deployment package. Tools like [`serverless-python-requirements`](https://github.com/serverless/serverless-python-requirements/tree/master) remove metadata to reduce package size. You can fix this issue by setting the `slim` setting to false in your `serverless.yml` file: ```yaml pythonRequirements: dockerizePip: non-linux slim: false fileName: requirements.txt ``` You can read more about this fix, and other `slim` settings that might be relevant in this [blog post](https://biercoff.com/how-to-fix-package-not-found-error-importlib-metadata/). If you're using a `.zip` archive for your code and/or dependencies, make sure that your package contains the required version metadata. To do this, make sure you include the `dist-info` directory in your `.zip` archive for the `email-validator` package. This issue has been reported for other popular python libraries like [`jsonschema`](https://github.com/python-jsonschema/jsonschema/issues/584), so you can read more about the issue and potential fixes there as well. ## Extra Resources ### More Debugging Tips If you're still struggling with installing `pydantic` for your AWS Lambda, you might consult with [this issue](https://github.com/pydantic/pydantic/issues/6557), which covers a variety of problems and solutions encountered by other developers. ### Validating `event` and `context` data Check out our [blog post](https://pydantic.dev/articles/lambda-intro) to learn more about how to use `pydantic` to validate `event` and `context` data in AWS Lambda functions. Validation failures are particularly awkward to debug in Lambda: you can't attach a debugger, and the event that caused the failure disappears with the invocation. If you record validations with [Logfire](../integrations/logfire.md), each failed validation is stored with its structured errors and rejected values, and its [AWS Lambda integration](https://pydantic.dev/docs/logfire/integrations/aws-lambda/) captures the surrounding invocation. pydantic-pydantic-e28e879/docs/integrations/datamodel_code_generator.md000066400000000000000000000061641526274674700265200ustar00rootroot00000000000000# Code Generation with datamodel-code-generator The [datamodel-code-generator](https://github.com/koxudaxi/datamodel-code-generator/) project is a library and command-line utility to generate pydantic models from just about any data source, including: * OpenAPI 3 (YAML/JSON) * JSON Schema * JSON/YAML/CSV Data (which will be converted to JSON Schema) * Python dictionary (which will be converted to JSON Schema) * GraphQL schema Whenever you find yourself with any data convertible JSON but without pydantic models, this tool will allow you to generate type-safe model hierarchies on demand. ## Installation ```bash pip install datamodel-code-generator ``` ## Example In this case, datamodel-code-generator creates pydantic models from a JSON Schema file. ```bash datamodel-codegen --input person.json --input-file-type jsonschema --output model.py ``` person.json: ```json { "$id": "person.json", "$schema": "http://json-schema.org/draft-07/schema#", "title": "Person", "type": "object", "properties": { "first_name": { "type": "string", "description": "The person's first name." }, "last_name": { "type": "string", "description": "The person's last name." }, "age": { "description": "Age in years.", "type": "integer", "minimum": 0 }, "pets": { "type": "array", "items": [ { "$ref": "#/definitions/Pet" } ] }, "comment": { "type": "null" } }, "required": [ "first_name", "last_name" ], "definitions": { "Pet": { "properties": { "name": { "type": "string" }, "age": { "type": "integer" } } } } } ``` model.py: ```python {upgrade="skip"} # generated by datamodel-codegen: # filename: person.json # timestamp: 2020-05-19T15:07:31+00:00 from __future__ import annotations from typing import Any from pydantic import BaseModel, Field, conint class Pet(BaseModel): name: str | None = None age: int | None = None class Person(BaseModel): first_name: str = Field(description="The person's first name.") last_name: str = Field(description="The person's last name.") age: conint(ge=0) | None = Field(None, description='Age in years.') pets: list[Pet] | None = None comment: Any | None = None ``` More information can be found on the [official documentation](https://datamodel-code-generator.koxudaxi.dev/). ## Catching drift from the source schema A model generated from an OpenAPI or JSON Schema document is a snapshot of that contract. When the upstream data stops matching it (a field changes type, a new required field appears), the mismatch surfaces as a [`ValidationError`][pydantic_core.ValidationError] at runtime, often the first sign the source has drifted from the schema you generated against. If you [record validations with Logfire](../errors/troubleshooting.md), those failures are stored with their structured errors and rejected values, so you can see *what* changed and *when* it started, useful when you don't own the schema and can't regenerate the models until you know what moved. pydantic-pydantic-e28e879/docs/integrations/devtools.md000066400000000000000000000030241526274674700233550ustar00rootroot00000000000000!!! note **Admission:** I (the primary developer of Pydantic) also develop python-devtools. [python-devtools](https://python-devtools.helpmanual.io/) (`pip install devtools`) provides a number of tools which are useful during Python development, including `debug()` an alternative to `print()` which formats output in a way which should be easier to read than `print` as well as giving information about which file/line the print statement is on and what value was printed. Pydantic integrates with *devtools* by implementing the `__pretty__` method on most public classes. In particular `debug()` is useful when inspecting models: ```python {test="no-print-intercept"} from datetime import datetime from devtools import debug from pydantic import BaseModel class Address(BaseModel): street: str country: str lat: float lng: float class User(BaseModel): id: int name: str signup_ts: datetime friends: list[int] address: Address user = User( id='123', name='John Doe', signup_ts='2019-06-01 12:22', friends=[1234, 4567, 7890], address=dict(street='Testing', country='uk', lat=51.5, lng=0), ) debug(user) print('\nshould be much easier read than:\n') print('user:', user) ``` Will output in your terminal: {{ devtools_example }} `debug()` is a development-time tool: it prints to the terminal of a process you're watching. The closest equivalent for a deployed application is [Logfire](logfire.md), where models and validations show up as structured output you can browse and query. pydantic-pydantic-e28e879/docs/integrations/documentation.md000066400000000000000000000027261526274674700243770ustar00rootroot00000000000000Pydantic uses [MkDocs](https://www.mkdocs.org/) for documentation, together with [mkdocstrings](https://mkdocstrings.github.io/). As such, you can make use of Pydantic's Sphinx object inventory to cross-reference the Pydantic API documentation. === "Sphinx" In your [Sphinx configuration](https://www.sphinx-doc.org/en/master/usage/configuration.html), add the following to the [`intersphinx` extension configuration](https://www.sphinx-doc.org/en/master/usage/extensions/intersphinx.html#configuration): ```python {test="skip"} intersphinx_mapping = { 'pydantic': ('https://pydantic.dev/docs/validation/latest', None), # (1)! } ``` 1. You can also use `dev` instead of `latest` to target the latest documentation build, up to date with the [`main`](https://github.com/pydantic/pydantic/tree/main) branch. === "mkdocstrings" In your [MkDocs configuration](https://www.mkdocs.org/user-guide/configuration/), add the following import to your [mkdocstrings plugin configuration](https://mkdocstrings.github.io/usage/#cross-references-to-other-projects-inventories): ```yaml plugins: - mkdocstrings: handlers: python: import: - https://pydantic.dev/docs/validation/latest/objects.inv # (1)! ``` 1. You can also use `dev` instead of `latest` to target the latest documentation build, up to date with the [`main`](https://github.com/pydantic/pydantic/tree/main) branch. pydantic-pydantic-e28e879/docs/integrations/hypothesis.md000066400000000000000000000017261526274674700237240ustar00rootroot00000000000000[Hypothesis](https://hypothesis.readthedocs.io/) is the Python library for [property-based testing](https://increment.com/testing/in-praise-of-property-based-testing/). Hypothesis can infer how to construct type-annotated classes, and supports builtin types, many standard library types, and generic types from the [`typing`](https://docs.python.org/3/library/typing.html) and [`typing_extensions`](https://pypi.org/project/typing-extensions/) modules by default. Pydantic v2.0 drops built-in support for Hypothesis and no more ships with the integrated Hypothesis plugin. !!! warning We are temporarily removing the Hypothesis plugin in favor of studying a different mechanism. For more information, see the issue [annotated-types/annotated-types#37](https://github.com/annotated-types/annotated-types/issues/37). The Hypothesis plugin may be back in a future release. Subscribe to [pydantic/pydantic#4682](https://github.com/pydantic/pydantic/issues/4682) for updates. pydantic-pydantic-e28e879/docs/integrations/linting.md000066400000000000000000000006251526274674700231660ustar00rootroot00000000000000## Flake8 plugin If using Flake8 in your project, a [plugin](https://pypi.org/project/flake8-pydantic/) is available and can be installed using the following: ```bash pip install flake8-pydantic ``` The lint errors provided by this plugin are namespaced under the `PYDXXX` code. To ignore some unwanted rules, the Flake8 configuration can be adapted: ```ini [flake8] extend-ignore = PYD001,PYD002 ``` pydantic-pydantic-e28e879/docs/integrations/llms.md000066400000000000000000000024251526274674700224710ustar00rootroot00000000000000The Pydantic documentation is available in the [llms.txt](https://llmstxt.org/) format. This format is defined in Markdown and suited for large language models. Two formats are available: * [llms.txt](https://pydantic.dev/docs/validation/latest/llms.txt): a file containing a brief description of the project, along with links to the different sections of the documentation. The structure of this file is described in details in the [format documentation](https://llmstxt.org/#format). * [llms-full.txt](https://pydantic.dev/docs/validation/latest/llms-full.txt): Similar to the `llms.txt` file, but every link content is included. Note that this file may be too large for some LLMs. As of today, these files *cannot* be natively leveraged by LLM frameworks or IDEs. Alternatively, an [MCP server](https://modelcontextprotocol.io/) can be implemented to properly parse the `llms.txt` file. Where `llms.txt` gives an AI tool the Pydantic *documentation*, the [Logfire MCP server](https://pydantic.dev/docs/logfire/guides/mcp-server/) gives it your application's *runtime data*: an agent can query the traces, metrics, and recorded validations from your own service and, for example, pull up the input behind a [`ValidationError`][pydantic_core.ValidationError] while it's helping you fix it. pydantic-pydantic-e28e879/docs/integrations/logfire.md000066400000000000000000000114151526274674700231500ustar00rootroot00000000000000# Pydantic Logfire Find the data behind production `ValidationError`s. Logfire records failed Pydantic validations with their structured errors and can keep them inside the surrounding request or job trace, so you can see what failed, where the input came from, and whether the same problem keeps happening. ## Record failed validations You need a [free Logfire account](https://logfire.pydantic.dev/login) and project. From your project directory, install the SDK and sign in: ```bash pip install logfire logfire auth ``` Call `instrument_pydantic()` before defining or importing the models you want to monitor: ```python {test="skip"} from datetime import date import logfire from pydantic import BaseModel logfire.configure() logfire.instrument_pydantic(record='failure') # (1)! class User(BaseModel): name: str country_code: str dob: date User(name='Anne', country_code='USA', dob='not-a-date') # (2)! ``` 1. Successful validations stay as aggregate metrics. Failed validations create individual warning records with their structured errors. 2. Run the example and choose or create a Logfire project when prompted. The invalid date produces a warning record in Logfire's Live view. !!! warning "Review validation data before exporting it" Failed-validation records contain the rejected values from Pydantic's structured errors. Logfire [scrubs common sensitive values](https://pydantic.dev/docs/logfire/instrument/scrubbing/) before export, but Logfire stores every rejected value under the key `input` inside the serialized `errors` attribute, separately from its field path. If those values can contain secrets or personal data, pass `scrubbing=logfire.ScrubbingOptions(extra_patterns=[r'(?:^input$|"input"\s*:)'])` to `logfire.configure()`. The two alternatives tell the scrubber to inspect serialized validation errors and redact every value whose exact key is `input`; neither refers to your model's field names. Alternatively, use `record='metrics'` so individual failures are not exported. ![A failed Pydantic validation recorded in the Logfire live view](../img/logfire-validation-live-view.png) Open the warning to inspect the rejected values, error type and field path, and any request or job trace active when validation ran. For a deeper walkthrough, see [Troubleshooting Validation Errors](../errors/troubleshooting.md). ## Choose how much to record The `record` argument controls the balance between detail and data volume: | Setting | Individual records | Metrics | | --- | --- | --- | | `failure` | Failed validations only | All validations | | `all` (default) | Every successful and failed validation | All validations | | `metrics` | None | All validations | | `off` | None | None | Use `failure` for production troubleshooting without creating an individual record for every successful validation. Use `all` while developing when you want to inspect successful inputs and validated results too. ```python {test="skip"} import logfire logfire.instrument_pydantic(record='all') ``` For per-model settings, third-party model inclusion, and configuration through environment variables or `pyproject.toml`, see the full [Logfire Pydantic integration reference](https://pydantic.dev/docs/logfire/integrations/pydantic/). ## Add the surrounding application trace Pydantic tells you which value failed. Instrument your web framework, database client, or task queue to see where that value came from and what happened around it. For example, a FastAPI trace can show the request that reached your endpoint, the failed model validation, and the response returned to the caller in one timeline. See [Logfire integrations](https://pydantic.dev/docs/logfire/integrations/) for FastAPI, Django, Celery, SQLAlchemy, HTTPX, and more. ## Log a validated model explicitly You can also attach a Pydantic model to your own structured log or span. Logfire preserves the model's fields so you can inspect and query them: ```python {test="skip"} from datetime import date import logfire from pydantic import BaseModel logfire.configure() class User(BaseModel): name: str country_code: str dob: date user = User(name='Anne', country_code='USA', dob='2000-01-01') logfire.info('user processed: {user!r}', user=user) ``` ## Troubleshooting * **No validation records appear:** make sure `logfire.configure()` runs and that `instrument_pydantic()` runs before the model class is defined or imported. * **Successful validations do not appear:** `record='failure'` keeps them as metrics only. Use `record='all'` when you need an individual span for each success. * **You need to inspect successful validations too:** use `record='all'`. This creates an individual span for every validation, so review its data-volume and privacy implications before using it in production. pydantic-pydantic-e28e879/docs/integrations/mypy.md000066400000000000000000000157301526274674700225230ustar00rootroot00000000000000Pydantic works well with [mypy](https://www.mypy-lang.org/) right out of the box. However, Pydantic also ships with a mypy plugin that adds a number of important Pydantic-specific features that improve its ability to type-check your code. For example, consider the following script: ```python {test="skip" linenums="1"} from datetime import datetime from pydantic import BaseModel class Model(BaseModel): age: int first_name = 'John' last_name: str | None = None signup_ts: datetime | None = None list_of_ints: list[int] m = Model(age=42, list_of_ints=[1, '2', b'3']) print(m.middle_name) # not a model field! Model() # will raise a validation error for age and list_of_ints ``` Without any special configuration, mypy does not catch the [missing model field annotation](../errors/usage_errors.md#model-field-missing-annotation) and errors about the `list_of_ints` argument which Pydantic parses correctly: ```output 15: error: List item 1 has incompatible type "str"; expected "int" [list-item] 15: error: List item 2 has incompatible type "bytes"; expected "int" [list-item] 16: error: "Model" has no attribute "middle_name" [attr-defined] 17: error: Missing named argument "age" for "Model" [call-arg] 17: error: Missing named argument "list_of_ints" for "Model" [call-arg] ``` But [with the plugin enabled](#enabling-the-plugin), it gives the correct errors: ```output 9: error: Untyped fields disallowed [pydantic-field] 16: error: "Model" has no attribute "middle_name" [attr-defined] 17: error: Missing named argument "age" for "Model" [call-arg] 17: error: Missing named argument "list_of_ints" for "Model" [call-arg] ``` With the pydantic mypy plugin, you can fearlessly refactor your models knowing mypy will catch any mistakes if your field names or types change. Note that mypy already supports some features without using the Pydantic plugin, such as synthesizing a `__init__` method for Pydantic models and dataclasses. See the [mypy plugin capabilities](#mypy-plugin-capabilities) for a list of additional features. The Pydantic mypy plugin is tested against the latest mypy version. Older versions might work but won't be tested. ## Enabling the Plugin To enable the plugin, just add `pydantic.mypy` to the list of plugins in your [mypy config file](https://mypy.readthedocs.io/en/latest/config_file.html): === "`mypy.ini`" ```ini [mypy] plugins = pydantic.mypy ``` === "`pyproject.toml`" ```toml [tool.mypy] plugins = ['pydantic.mypy'] ``` !!! note If you're using `pydantic.v1` models, you'll need to add `pydantic.v1.mypy` to your list of plugins. See the [plugin configuration](#configuring-the-plugin) for more details. ## Mypy plugin capabilities ### Generate a `__init__` signature for Pydantic models * Any required fields that don't have dynamically-determined aliases will be included as required keyword arguments. * If the [`validate_by_name`][pydantic.ConfigDict.validate_by_name] model configuration value is set to `True`, the generated signature will use the field names rather than aliases. * The [`init_forbid_extra`](#init_forbid_extra) and [`init_typed`](#init_typed) plugin configuration values can further fine-tune the synthesized `__init__` method. ### Generate a typed signature for `model_construct` * The [`model_construct`][pydantic.BaseModel.model_construct] method is an alternative to model validation when input data is known to be valid and should not be parsed (see the [documentation](../concepts/models.md#creating-models-without-validation)). Because this method performs no runtime validation, static checking is important to detect errors. ### Support for frozen models * If the [`frozen`][pydantic.ConfigDict.frozen] configuration is set to `True`, you will get an error if you try mutating a model field (see [faux immutability](../concepts/models.md#faux-immutability)) ### Respect the type of the `Field`'s `default` and `default_factory` * Field with both a `default` and a `default_factory` will result in an error during static checking. * The type of the `default` and `default_factory` value must be compatible with the one of the field. ### Warn about the use of untyped fields * While defining a field without an annotation will result in a [runtime error](../errors/usage_errors.md#model-field-missing-annotation), the plugin will also emit a type checking error. ### Prevent the use of required dynamic aliases See the documentation of the [`warn_required_dynamic_aliases`](#warn_required_dynamic_aliases) plugin configuration value. ## Configuring the Plugin To change the values of the plugin settings, create a section in your mypy config file called `[pydantic-mypy]`, and add any key-value pairs for settings you want to override. A configuration file with all plugin strictness flags enabled (and some other mypy strictness flags, too) might look like: === "`mypy.ini`" ```ini [mypy] plugins = pydantic.mypy follow_imports = silent warn_redundant_casts = True warn_unused_ignores = True disallow_any_generics = True no_implicit_reexport = True disallow_untyped_defs = True [pydantic-mypy] init_forbid_extra = True init_typed = True warn_required_dynamic_aliases = True ``` === "`pyproject.toml`" ```toml [tool.mypy] plugins = ["pydantic.mypy"] follow_imports = "silent" warn_redundant_casts = true warn_unused_ignores = true disallow_any_generics = true no_implicit_reexport = true disallow_untyped_defs = true [tool.pydantic-mypy] init_forbid_extra = true init_typed = true warn_required_dynamic_aliases = true ``` ### `init_typed` **Default**: `False`. Because Pydantic performs [data conversion](../concepts/models.md#data-conversion) by default, the following is still valid at runtime: ```python {test="skip" lint="skip"} class Model(BaseModel): a: int Model(a='1') ``` For this reason, the plugin will use [`Any`][typing.Any] for field annotations when synthesizing the `__init__()` method, unless `init_typed` is set or [strict mode](../concepts/strict_mode.md) is enabled on the model. ### `init_forbid_extra` **Default**: `False`. By default, Pydantic allows (and ignores) any extra provided argument: ```python {test="skip" lint="skip"} class Model(BaseModel): a: int = 1 Model(unrelated=2) ``` For this reason, the plugin will add an extra `**kwargs: Any` parameter when synthesizing the `__init__()` method, unless `init_forbid_extra` is set or the [`extra`][pydantic.ConfigDict.extra] configuration value is set to `'forbid'`. ### `warn_required_dynamic_aliases` **Default**: `False`. Whether to error when using a dynamically-determined alias or alias generator on a model with [`validate_by_name`][pydantic.ConfigDict.validate_by_name] set to `False`. If such aliases are present, mypy cannot properly type check calls to `__init__()`. In this case, it will default to treating all arguments as not required, by synthesizing the `__init__()` as `(**kwargs: Any) -> None`. pydantic-pydantic-e28e879/docs/integrations/pycharm.md000066400000000000000000000016661526274674700231730ustar00rootroot00000000000000While pydantic will work well with any IDE out of the box, a [PyCharm plugin](https://plugins.jetbrains.com/plugin/12861-pydantic) offering improved pydantic integration is available on the JetBrains Plugins Repository for PyCharm. You can install the plugin for free from the plugin marketplace (PyCharm's Preferences -> Plugin -> Marketplace -> search "pydantic"). The plugin currently supports the following features: * For `pydantic.BaseModel.__init__`: * Inspection * Autocompletion * Type-checking * For fields of `pydantic.BaseModel`: * Refactor-renaming fields updates `__init__` calls, and affects sub- and super-classes * Refactor-renaming `__init__` keyword arguments updates field names, and affects sub- and super-classes More information can be found on the [official plugin page](https://plugins.jetbrains.com/plugin/12861-pydantic) and [Github repository](https://github.com/koxudaxi/pydantic-pycharm-plugin). pydantic-pydantic-e28e879/docs/integrations/pyrefly.md000066400000000000000000000043161526274674700232150ustar00rootroot00000000000000[Pyrefly](https://pyrefly.org/) is a Python type checker and language server with built-in support for a number of Pydantic-specific features. This support works out-of-the-box with Pydantic and Pyrefly installed, with no additional configuration needed. Pyrefly is available as both an [IDE extension](https://pyrefly.org/en/docs/IDE/) and a [command-line type checker](https://pyrefly.org/en/docs/installation/). ## IDE extension Pyrefly gives you IDE features such as go-to-definition and autocomplete on your Pydantic models. Here’s an example of signature help, powered by Pyrefly’s understanding of the Pydantic-specific `validation_alias` keyword: ![Signature help with the Pyrefly IDE extension](../img/pyrefly.png) As you type `Model()`, Pyrefly hints that you need to use the name `x_` to populate the `x` field. ## Type checker Pyrefly can also catch errors in your code before you run it. Consider the following example: ```python {test="skip" linenums="1"} from pydantic import BaseModel, ConfigDict class Model1(BaseModel, frozen=True): x: int class Model2(BaseModel): model_config = ConfigDict(frozen=True) x: int model1 = Model1(x=0) model1.x = 1 # validation error: mutating a frozen field model2 = Model2(x=0) model2.x = 1 # validation error: mutating a frozen field ``` Since `Model1` declares that it is frozen using a [standard type system feature](https://typing.python.org/en/latest/spec/dataclasses.html#the-dataclass-transform-decorator), any type checker of your choice will catch the validation error from mutating `model1.x`. However, a type checker without special support for the Pydantic `ConfigDict` class will miss the validation error from mutating `model2.x`. Pyrefly catches both errors: ```output ERROR Cannot set field `x` [read-only] --> foo.py:11:1 | 11 | model1.x = 1 # validation error: mutating a frozen field | ^^^^^^^^ | This field belongs to a frozen Pydantic model ERROR Cannot set field `x` [read-only] --> foo.py:14:1 | 14 | model2.x = 1 # validation error: mutating a frozen field | ^^^^^^^^ | This field belongs to a frozen Pydantic model ``` See the [Pyrefly documentation](https://pyrefly.org/en/docs/pydantic/ ) for more information. pydantic-pydantic-e28e879/docs/integrations/rich.md000066400000000000000000000005471526274674700224520ustar00rootroot00000000000000Pydantic models may be printed with the [Rich](https://github.com/Textualize/rich) library which will add additional formatting and color to the output. Here's an example: ![Printing Pydantic models with Rich](../img/rich_pydantic.png) See the Rich documentation on [pretty printing](https://rich.readthedocs.io/en/latest/pretty.html) for more information. pydantic-pydantic-e28e879/docs/integrations/visual_studio_code.md000066400000000000000000000251051526274674700254060ustar00rootroot00000000000000Pydantic works well with any editor or IDE out of the box because it's made on top of standard Python type annotations. When using [Visual Studio Code (VS Code)](https://code.visualstudio.com/), there are some **additional editor features** supported, comparable to the ones provided by the [PyCharm plugin](../integrations/pycharm.md). This means that you will have **autocompletion** (or "IntelliSense") and **error checks** for types and required arguments even while creating new Pydantic model instances. ![pydantic autocompletion in VS Code](../img/vs_code_01.png) ## Configure VS Code To take advantage of these features, you need to make sure you configure VS Code correctly, using the recommended settings. In case you have a different configuration, here's a short overview of the steps. ### Install Pylance You should use the [Pylance](https://marketplace.visualstudio.com/items?itemName=ms-python.vscode-pylance) extension for VS Code. It is the recommended, next-generation, official VS Code plug-in for Python. Pylance is installed as part of the [Python Extension for VS Code](https://marketplace.visualstudio.com/items?itemName=ms-python.python) by default, so it should probably just work. Otherwise, you can double check it's installed and enabled in your editor. ### Configure your environment Then you need to make sure your editor knows the [Python environment](https://code.visualstudio.com/docs/python/python-tutorial#_install-and-use-packages) (probably a virtual environment) for your Python project. This would be the environment in where you installed Pydantic. ### Configure Pylance With the default configurations, you will get support for autocompletion, but Pylance might not check for type errors. You can enable type error checks from Pylance with these steps: * Open the "User Settings" * Search for `Type Checking Mode` * You will find an option under `Python › Analysis: Type Checking Mode` * Set it to `basic` or `strict` (by default it's `off`) ![Type Checking Mode set to strict in VS Code](../img/vs_code_02.png) Now you will not only get autocompletion when creating new Pydantic model instances but also error checks for **required arguments**. ![Required arguments error checks in VS Code](../img/vs_code_03.png) And you will also get error checks for **invalid data types**. ![Invalid data types error checks in VS Code](../img/vs_code_04.png) !!! note "Technical Details" Pylance is the VS Code extension, it's closed source, but free to use. Underneath, Pylance uses an open source tool (also from Microsoft) called [Pyright](https://github.com/microsoft/pyright) that does all the heavy lifting. You can read more about it in the [Pylance Frequently Asked Questions](https://github.com/microsoft/pylance-release/blob/main/FAQ.md#what-is-the-relationship-between-pylance-pyright-and-the-python-extension). ### Configure mypy You might also want to configure mypy in VS Code to get mypy error checks inline in your editor (alternatively/additionally to Pylance). This would include the errors detected by the [Pydantic mypy plugin](../integrations/mypy.md), if you configured it. To enable mypy in VS Code, do the following: * Open the "User Settings" * Search for `Mypy Enabled` * You will find an option under `Python › Linting: Mypy Enabled` * Check the box (by default it's unchecked) ![mypy enabled in VS Code](../img/vs_code_05.png) ## Tips and tricks Here are some additional tips and tricks to improve your developer experience when using VS Code with Pydantic. ### Strict errors The way this additional editor support works is that Pylance will treat your Pydantic models as if they were Python's pure `dataclasses`. And it will show **strict type error checks** about the data types passed in arguments when creating a new Pydantic model instance. In this example you can see that it shows that a `str` of `'23'` is not a valid `int` for the argument `age`. ![VS Code strict type errors](../img/vs_code_06.png) It would expect `age=23` instead of `age='23'`. Nevertheless, the design, and one of the main features of Pydantic, is that it is very **lenient with data types**. It will actually accept the `str` with value `'23'` and will convert it to an `int` with value `23`. These strict error checks are **very useful** most of the time and can help you **detect many bugs early**. But there are cases, like with `age='23'`, where they could be inconvenient by reporting a "false positive" error. --- This example above with `age='23'` is intentionally simple, to show the error and the differences in types. But more common cases where these strict errors would be inconvenient would be when using more sophisticated data types, like `int` values for `datetime` fields, or `dict` values for Pydantic sub-models. For example, this is valid for Pydantic: ```python {hl_lines="12 17"} from pydantic import BaseModel class Knight(BaseModel): title: str age: int color: str = 'blue' class Quest(BaseModel): title: str knight: Knight quest = Quest( title='To seek the Holy Grail', knight={'title': 'Sir Lancelot', 'age': 23} ) ``` The type of the field `knight` is declared with the class `Knight` (a Pydantic model) and the code is passing a literal `dict` instead. This is still valid for Pydantic, and the `dict` would be automatically converted to a `Knight` instance. Nevertheless, it would be detected as a type error: ![VS Code strict type errors with model](../img/vs_code_07.png) In those cases, there are several ways to disable or ignore strict errors in very specific places, while still preserving them in the rest of the code. Below are several techniques to achieve it. #### Disable type checks in a line You can disable the errors for a specific line using a comment of: ```python # type: ignore ``` or (to be specific to pylance/pyright): ```python # pyright: ignore ``` ([pyright](https://github.com/microsoft/pyright) is the language server used by Pylance.). coming back to the example with `age='23'`, it would be: ```python {hl_lines="10"} from pydantic import BaseModel class Knight(BaseModel): title: str age: int color: str = 'blue' lancelot = Knight(title='Sir Lancelot', age='23') # pyright: ignore ``` that way Pylance and mypy will ignore errors in that line. **Pros**: it's a simple change in that line to remove errors there. **Cons**: any other error in that line will also be omitted, including type checks, misspelled arguments, required arguments not provided, etc. #### Override the type of a variable You can also create a variable with the value you want to use and declare its type explicitly with `Any`. ```python {hl_lines="1 11-12"} from typing import Any from pydantic import BaseModel class Knight(BaseModel): title: str age: int color: str = 'blue' age_str: Any = '23' lancelot = Knight(title='Sir Lancelot', age=age_str) ``` that way Pylance and mypy will interpret the variable `age_str` as if they didn't know its type, instead of knowing it has a type of `str` when an `int` was expected (and then showing the corresponding error). **Pros**: errors will be ignored only for a specific value, and you will still see any additional errors for the other arguments. **Cons**: it requires importing `Any` and a new variable in a new line for each argument that needs ignoring errors. #### Override the type of a value with `cast` The same idea from the previous example can be put on the same line with the help of `cast()`. This way, the type declaration of the value is overridden inline, without requiring another variable. ```python {hl_lines="1 11"} from typing import Any, cast from pydantic import BaseModel class Knight(BaseModel): title: str age: int color: str = 'blue' lancelot = Knight(title='Sir Lancelot', age=cast(Any, '23')) ``` `cast(Any, '23')` doesn't affect the value, it's still just `'23'`, but now Pylance and mypy will assume it is of type `Any`, which means, they will act as if they didn't know the type of the value. So, this is the equivalent of the previous example, without the additional variable. **Pros**: errors will be ignored only for a specific value, and you will still see any additional errors for the other arguments. There's no need for additional variables. **Cons**: it requires importing `Any` and `cast`, and if you are not used to using `cast()`, it could seem strange at first. ### Config in class arguments Pydantic has a rich set of [Model Configurations][pydantic.config.ConfigDict] available. These configurations can be set in an internal `class Config` on each model: ```python {hl_lines="9-10"} from pydantic import BaseModel class Knight(BaseModel): model_config = dict(frozen=True) title: str age: int color: str = 'blue' ``` or passed as keyword arguments when defining the model class: ```python {hl_lines="4"} from pydantic import BaseModel class Knight(BaseModel, frozen=True): title: str age: int color: str = 'blue' ``` The specific configuration **`frozen`** (in beta) has a special meaning. It prevents other code from changing a model instance once it's created, keeping it **"frozen"**. When using the second version to declare `frozen=True` (with **keyword arguments** in the class definition), Pylance can use it to help you check in your code and **detect errors** when something is trying to set values in a model that is "frozen". ![VS Code strict type errors with model](../img/vs_code_08.png) ## Adding a default with `Field` Pylance/pyright requires `default` to be a keyword argument to `Field` in order to infer that the field is optional. ```python from pydantic import BaseModel, Field class Knight(BaseModel): title: str = Field(default='Sir Lancelot') # this is okay age: int = Field( 23 ) # this works fine at runtime but will case an error for pyright lance = Knight() # error: Argument missing for parameter "age" ``` This is a limitation of dataclass transforms and cannot be fixed in pydantic. ## Technical Details !!! warning As a Pydantic user, you don't need the details below. Feel free to skip the rest of this section. These details are only useful for other library authors, etc. This additional editor support works by making use of the [`@dataclass_transform` decorator](https://typing.python.org/en/latest/spec/dataclasses.html#the-dataclass-transform-decorator) (introduced by [PEP 681](https://peps.python.org/pep-0681/)). The standard provides a way for libraries like Pydantic and others to tell editors and tools that they (the editors) should treat these libraries (e.g. Pydantic) as if they were [dataclasses][dataclasses], providing autocompletion, type checks, etc. pydantic-pydantic-e28e879/docs/internals/000077500000000000000000000000001526274674700204665ustar00rootroot00000000000000pydantic-pydantic-e28e879/docs/internals/architecture.md000066400000000000000000000233311526274674700234740ustar00rootroot00000000000000!!! note This section is part of the *internals* documentation, and is partly targeted to contributors. Starting with Pydantic V2, part of the codebase is written in Rust in a separate package called `pydantic-core`. This was done partly in order to improve validation and serialization performance (with the cost of limited customization and extendibility of the internal logic). This architecture documentation will first cover how the two `pydantic` and `pydantic-core` packages interact together, then will go through the architecture specifics for various patterns (model definition, validation, serialization, JSON Schema). Usage of the Pydantic library can be divided into two parts: * Model definition, done in the `pydantic` package. * Model validation and serialization, done in the `pydantic-core` package. ## Model definition Whenever a Pydantic [`BaseModel`][pydantic.main.BaseModel] is defined, the metaclass will analyze the body of the model to collect a number of elements: * Defined annotations to build model fields (collected in the [`model_fields`][pydantic.main.BaseModel.model_fields] attribute). * Model configuration, set with [`model_config`][pydantic.main.BaseModel.model_config]. * Additional validators/serializers. * Private attributes, class variables, identification of generic parametrization, etc. ### Communicating between `pydantic` and `pydantic-core`: the core schema We then need a way to communicate the collected information from the model definition to `pydantic-core`, so that validation and serialization is performed accordingly. To do so, Pydantic uses the concept of a core schema: a structured (and serializable) Python dictionary (represented using [`TypedDict`][typing.TypedDict] definitions) describing a specific validation and serialization logic. It is the core data structure used to communicate between the `pydantic` and `pydantic-core` packages. Every core schema has a required `type` key, and extra properties depending on this `type`. The generation of a core schema is handled in a single place, by the `GenerateSchema` class (no matter if it is for a Pydantic model or anything else). !!! note It is not possible to define a custom core schema. A core schema needs to be understood by the `pydantic-core` package, and as such we only support a fixed number of core schema types. This is also part of the reason why the `GenerateSchema` isn't truly exposed and properly documented. The core schema definitions can be found in the [`pydantic_core.core_schema`][] module. In the case of a Pydantic model, a core schema will be constructed and set as the [`__pydantic_core_schema__`][pydantic.main.BaseModel.__pydantic_core_schema__] attribute. To illustrate what a core schema looks like, we will take the example of the [`bool`][pydantic_core.core_schema.bool_schema] core schema: ```python {lint="skip" test="skip"} class BoolSchema(TypedDict, total=False): type: Required[Literal['bool']] strict: bool ref: str metadata: Any serialization: SerSchema ``` When defining a Pydantic model with a boolean field: ```python from pydantic import BaseModel, Field class Model(BaseModel): foo: bool = Field(strict=True) ``` The core schema for the `foo` field will look like: ```python { 'type': 'bool', 'strict': True, } ``` As seen in the [`BoolSchema`][pydantic_core.core_schema.bool_schema] definition, the serialization logic is also defined in the core schema. If we were to define a custom serialization function for `foo` (1), the `serialization` key would look like: { .annotate } 1. For example using the [`field_serializer`][pydantic.functional_serializers.field_serializer] decorator: ```python {test="skip" lint="skip"} class Model(BaseModel): foo: bool = Field(strict=True) @field_serializer('foo', mode='plain') def serialize_foo(self, value: bool) -> Any: ... ``` ```python {lint="skip" test="skip"} { 'type': 'function-plain', 'function': , 'is_field_serializer': True, 'info_arg': False, 'return_schema': {'type': 'int'}, } ``` Note that this is also a core schema definition, just that it is only relevant for `pydantic-core` during serialization. Core schemas cover a broad scope, and are used whenever we want to communicate between the Python and Rust side. While the previous examples were related to validation and serialization, it could in theory be used for anything: error management, extra metadata, etc. ### JSON Schema generation You may have noticed that the previous serialization core schema has a `return_schema` key. This is because the core schema is also used to generate the corresponding JSON Schema. Similar to how the core schema is generated, the JSON Schema generation is handled by the [`GenerateJsonSchema`][pydantic.json_schema.GenerateJsonSchema] class. The [`generate`][pydantic.json_schema.GenerateJsonSchema.generate] method is the main entry point and is given the core schema of that model. Coming back to our `bool` field example, the [`bool_schema`][pydantic.json_schema.GenerateJsonSchema.bool_schema] method will be given the previously generated [boolean core schema][pydantic_core.core_schema.bool_schema] and will return the following JSON Schema: ```json { {"type": "boolean"} } ``` ### Customizing the core schema and JSON schema !!! abstract "Usage Documentation" [Custom types](../concepts/types.md#custom-types) [Implementing `__get_pydantic_core_schema__`](../concepts/json_schema.md#implementing-__get_pydantic_core_schema__) [Implementing `__get_pydantic_json_schema__`](../concepts/json_schema.md#implementing-__get_pydantic_json_schema__) While the `GenerateSchema` and [`GenerateJsonSchema`][pydantic.json_schema.GenerateJsonSchema] classes handle the creation of the corresponding schemas, Pydantic offers a way to customize them in some cases, following a wrapper pattern. This customization is done through the `__get_pydantic_core_schema__` and `__get_pydantic_json_schema__` methods. To understand this wrapper pattern, we will take the example of metadata classes used with [`Annotated`][typing.Annotated], where the `__get_pydantic_core_schema__` method can be used: ```python from typing import Annotated, Any from pydantic_core import CoreSchema from pydantic import GetCoreSchemaHandler, TypeAdapter class MyStrict: @classmethod def __get_pydantic_core_schema__( cls, source: Any, handler: GetCoreSchemaHandler ) -> CoreSchema: schema = handler(source) # (1)! schema['strict'] = True return schema class MyGt: @classmethod def __get_pydantic_core_schema__( cls, source: Any, handler: GetCoreSchemaHandler ) -> CoreSchema: schema = handler(source) # (2)! schema['gt'] = 1 return schema ta = TypeAdapter(Annotated[int, MyStrict(), MyGt()]) ``` 1. `MyStrict` is the first annotation to be applied. At this point, `schema = {'type': 'int'}`. 2. `MyGt` is the last annotation to be applied. At this point, `schema = {'type': 'int', 'strict': True}`. When the `GenerateSchema` class builds the core schema for `Annotated[int, MyStrict(), MyGt()]`, it will create an instance of a `GetCoreSchemaHandler` to be passed to the `MyGt.__get_pydantic_core_schema__` method. (1) { .annotate } 1. In the case of our [`Annotated`][typing.Annotated] pattern, the `GetCoreSchemaHandler` is defined in a nested way. Calling it will recursively call the other `__get_pydantic_core_schema__` methods until it reaches the `int` annotation, where a simple `{'type': 'int'}` schema is returned. The `source` argument depends on the core schema generation pattern. In the case of [`Annotated`][typing.Annotated], the `source` will be the type being annotated. When [defining a custom type](../concepts/types.md#as-a-method-on-a-custom-type), the `source` will be the actual class where `__get_pydantic_core_schema__` is defined. ## Model validation and serialization While model definition was scoped to the *class* level (i.e. when defining your model), model validation and serialization happens at the *instance* level. Both these concepts are handled in `pydantic-core` (providing a 5 to 20 performance increase compared to Pydantic V1), by using the previously built core schema. `pydantic-core` exposes a [`SchemaValidator`][pydantic_core.SchemaValidator] and [`SchemaSerializer`][pydantic_core.SchemaSerializer] class to perform these tasks: ```python from pydantic import BaseModel class Model(BaseModel): foo: int model = Model.model_validate({'foo': 1}) # (1)! dumped = model.model_dump() # (2)! ``` 1. The provided data is sent to `pydantic-core` by using the [`SchemaValidator.validate_python`][pydantic_core.SchemaValidator.validate_python] method. `pydantic-core` will validate (following the core schema of the model) the data and populate the model's `__dict__` attribute. 2. The `model` instance is sent to `pydantic-core` by using the [`SchemaSerializer.to_python`][pydantic_core.SchemaSerializer.to_python] method. `pydantic-core` will read the instance's `__dict__` attribute and built the appropriate result (again, following the core schema of the model). ### The plugin hook around validation Pydantic wraps the `SchemaValidator` in a plugin layer: when plugins are installed, each of the `validate_python`, `validate_json`, and `validate_strings` calls can be intercepted, letting a plugin observe the input, result, and any error for every validation. This is the mechanism behind observability tooling such as [Logfire](../integrations/logfire.md), which uses it to record validations without any per-call instrumentation. Plugins are configured per model through the [`plugin_settings`][pydantic.ConfigDict.plugin_settings] configuration value. pydantic-pydantic-e28e879/docs/internals/resolving_annotations.md000066400000000000000000000250431526274674700254410ustar00rootroot00000000000000!!! note This section is part of the *internals* documentation, and is partly targeted to contributors. Pydantic heavily relies on [type hints][type hint] at runtime to build schemas for validation, serialization, etc. While type hints were primarily introduced for static type checkers (such as [Mypy] or [Pyright]), they are accessible (and sometimes evaluated) at runtime. This means that the following would fail at runtime, because `Node` has yet to be defined in the current module: ```python {test="skip" lint="skip"} class Node: """Binary tree node.""" # NameError: name 'Node' is not defined: def __init__(self, l: Node, r: Node) -> None: self.left = l self.right = r ``` To circumvent this issue, forward references can be used (by wrapping the annotation in quotes). In Python 3.7, [PEP 563] introduced the concept of *postponed evaluation of annotations*, meaning with the `from __future__ import annotations` [future statement], type hints are stringified by default: ```python {requires="3.12" lint="skip"} from __future__ import annotations from pydantic import BaseModel class Foo(BaseModel): f: MyType # Given the future import above, this is equivalent to: # f: 'MyType' type MyType = int print(Foo.__annotations__) #> {'f': 'MyType'} ``` ## The challenges of runtime evaluation Static type checkers make use of the AST to analyze the defined annotations. Regarding the previous example, this has the benefit of being able to understand what `MyType` refers to when analyzing the class definition of `Foo`, even if `MyType` isn't yet defined at runtime. However, for runtime tools such as Pydantic, it is more challenging to correctly resolve these forward annotations. The Python standard library provides some tools to do so ([`typing.get_type_hints()`][typing.get_type_hints], [`inspect.get_annotations()`][inspect.get_annotations]), but they come with some limitations. Thus, they are being re-implemented in Pydantic with improved support for edge cases. As Pydantic has grown, it's adapted to support many edge cases requiring irregular patterns for annotation evaluation. Some of these use cases aren't necessarily sound from a static type checking perspective. In v2.10, the internal logic was refactored in an attempt to simplify and standardize annotation evaluation. Admittedly, backwards compatibility posed some challenges, and there is still some noticeable scar tissue in the codebase because of this. There's a hope that [PEP 649] (introduced in Python 3.14) will greatly simplify the process, especially when it comes to dealing with locals of a function. To evaluate forward references, Pydantic roughly follows the same logic as described in the documentation of the [`typing.get_type_hints()`][typing.get_type_hints] function. That is, the built-in [`eval()`][eval] function is used by passing the forward reference, a global, and a local namespace. The namespace fetching logic is defined in the sections below. ## Resolving annotations at class definition The following example will be used as a reference throughout this section: ```python {test="skip" lint="skip"} # module1.py: type MyType = int class Base: f1: 'MyType' # module2.py: from pydantic import BaseModel from module1 import Base type MyType = str def inner() -> None: type InnerType = bool class Model(BaseModel, Base): type LocalType = bytes f2: 'MyType' f3: 'InnerType' f4: 'LocalType' f5: 'UnknownType' type InnerType2 = complex ``` When the `Model` class is being built, different [namespaces][namespace] are at play. For each base class of the `Model`'s [MRO][method resolution order] (in reverse order — that is, starting with `Base`), the following logic is applied: 1. Fetch the `__annotations__` key from the current base class' `__dict__`, if present. For `Base`, this will be `{'f1': 'MyType'}`. 2. Iterate over the `__annotations__` items and try to evaluate the annotation [^1] using a custom wrapper around the built-in [`eval()`][eval] function. This function takes two `globals` and `locals` arguments: * The current module's `__dict__` is naturally used as `globals`. For `Base`, this will be `sys.modules['module1'].__dict__`. * For the `locals` argument, Pydantic will try to resolve symbols in the following namespaces, sorted by highest priority: * A namespace created on the fly, containing the current class name (`{cls.__name__: cls}`). This is done in order to support recursive references. * The locals of the current class (i.e. `cls.__dict__`). For `Model`, this will include `LocalType`. * The parent namespace of the class, if different from the globals described above. This is the [locals][frame.f_locals] of the frame where the class is being defined. For `Base`, because the class is being defined in the module directly, this namespace won't be used as it will result in the globals being used again. For `Model`, the parent namespace is the locals of the frame of `inner()`. 3. If the annotation failed to evaluate, it is kept as is, so that the model can be rebuilt at a later stage. This will be the case for `f5`. The following table lists the resolved type annotations for every field, once the `Model` class has been created: | Field name | Resolved annotation | |------------|---------------------| | `f1` | [`int`][] | | `f2` | [`str`][] | | `f3` | [`bool`][] | | `f4` | [`bytes`][] | | `f5` | `'UnknownType'` | ### Limitations and backwards compatibility concerns While the namespace fetching logic is trying to be as accurate as possible, we still face some limitations: * The locals of the current class (`cls.__dict__`) may include irrelevant entries, most of them being dunder attributes. This means that the following annotation: `f: '__doc__'` will successfully (and unexpectedly) be resolved. * When the `Model` class is being created inside a function, we keep a copy of the [locals][frame.f_locals] of the frame. This copy only includes the symbols defined in the locals when `Model` is being defined, meaning `InnerType2` won't be included (and will **not be** if doing a model rebuild at a later point!). * To avoid memory leaks, we use [weak references][weakref] to the locals of the function, meaning some forward references might not resolve outside the function[^2]. * Locals of the function are only taken into account for Pydantic models, but this pattern does not apply to dataclasses, typed dictionaries or named tuples. For backwards compatibility reasons, and to be able to support valid use cases without having to rebuild models, the namespace logic described above is a bit different when it comes to core schema generation. Taking the following example: {#backwards-compatibility-logic} ```python from dataclasses import dataclass from pydantic import BaseModel @dataclass class Foo: a: 'Bar | None' = None class Bar(BaseModel): b: Foo ``` Once the fields for `Bar` have been collected (meaning annotations resolved), the `GenerateSchema` class converts every field into a core schema. When it encounters another class-like field type (such as a dataclass), it will try to evaluate annotations, following roughly the same logic as [described above](#resolving-annotations-at-class-definition). However, to evaluate the `'Bar | None'` annotation, `Bar` needs to be present in the globals or locals, which is normally *not* the case: `Bar` is being created, so it is not "assigned" to the current module's `__dict__` at that point. To avoid having to call [`model_rebuild()`][pydantic.BaseModel.model_rebuild] on `Bar`, both the parent namespace (if `Bar` was to be defined inside a function, and [the namespace provided during a model rebuild](#model-rebuild-semantics)) and the `{Bar.__name__: Bar}` namespace are included in the locals during annotations evaluation of `Foo` (with the lowest priority) (1). { .annotate } 1. This backwards compatibility logic can introduce some inconsistencies, such as the following: ```python {lint="skip"} from dataclasses import dataclass from pydantic import BaseModel @dataclass class Foo: # `a` and `b` shouldn't resolve: a: 'Model' b: 'Inner' def func(): Inner = int class Model(BaseModel): foo: Foo Model.__pydantic_complete__ #> True, should be False. ``` ## Resolving annotations when rebuilding a model When a forward reference fails to evaluate, Pydantic will silently fail and stop the core schema generation process. This can be seen by inspecting the `__pydantic_core_schema__` of a model class: ```python {lint="skip"} from pydantic import BaseModel class Foo(BaseModel): f: 'MyType' Foo.__pydantic_core_schema__ #> ``` If you then properly define `MyType`, you can rebuild the model: ```python {test="skip" lint="skip"} type MyType = int Foo.model_rebuild() Foo.__pydantic_core_schema__ #> {'type': 'model', 'schema': {...}, ...} ``` The [`model_rebuild()`][pydantic.BaseModel.model_rebuild] method uses a *rebuild namespace*, with the following semantics: {#model-rebuild-semantics} * If an explicit `_types_namespace` argument is provided, it is used as the rebuild namespace. * If no namespace is provided, the namespace where the method is called will be used as the rebuild namespace. This *rebuild namespace* will be merged with the model's parent namespace (if it was defined in a function) and used as is (see the [backwards compatibility logic](#backwards-compatibility-logic) described above). [Mypy]: https://www.mypy-lang.org/ [Pyright]: https://github.com/microsoft/pyright/ [PEP 563]: https://peps.python.org/pep-0563/ [PEP 649]: https://peps.python.org/pep-0649/ [future statement]: https://docs.python.org/3/reference/simple_stmts.html#future [^1]: This is done unconditionally, as forward annotations can be only present *as part* of a type hint (e.g. `Optional['int']`), as dictated by the [typing specification](https://typing.readthedocs.io/en/latest/spec/annotations.html#string-annotations). [^2]: Here is an example: ```python {test="skip" lint="skip"} def func(): A = list[int] class Model(BaseModel): f: 'A | Forward' return Model Model = func() Model.model_rebuild(_types_namespace={'Forward': str}) # pydantic.errors.PydanticUndefinedAnnotation: name 'A' is not defined ``` pydantic-pydantic-e28e879/docs/logo-white.svg000066400000000000000000000015551526274674700212740ustar00rootroot00000000000000 pydantic-pydantic-e28e879/docs/logos/000077500000000000000000000000001526274674700176125ustar00rootroot00000000000000pydantic-pydantic-e28e879/docs/logos/adobe_logo.png000066400000000000000000000123331526274674700224140ustar00rootroot00000000000000‰PNG  IHDRæ$È“PLTEôC6ôC6ôC6ôC6ôC6ôC6ôC6ôC6ôC6ôC6ôC6ôC6ôC6ôC6ôC6ôC6ôC6ôC6ôC6ôC6ôC6ôC6ôC6ôC6ôC6ôC6ôC6ôC6ôC6ôC6ôC6ôC6ôC6ôC6ôC6ôC6ôC6ôC6ôC6ôC6ôC6ôC6ôC6ôC6ôC6ôC6ôC6ôC6}�µÄ0tRNS°úí ÷(óͨ Ôç†ãÞe_I"¢˜4Ù�qX>½S’{k.€vNÇ9¸CÂ�´šQðÇIDATxÚìÜYN[aáŽ�Á8æÆaìý¯±‚ëǪ_ç[C=´t¤®ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆàk§Ã"Ùk-kwErÕZÒf«B9h+iߊ徭¤¼Ëþ²¥œÍmK9x,š�–R@;¿\·“2€½â¹i'eW´n%c¿‹è¡•Œü)¢Õ¬�„,¶ É98/&ç ๠”ƒ€/€ƒ¢:n!_÷E¥t,÷ Ë8èx/.ã   à¢À„ƒ€-€Ý"¶Ž í°md,· í®mdü*6ß à_ÁéWÿ‹N7¸8)<Û   `?�ƒ€*€ÛâÛš·Š*€�� ¦ÞÊ@6˜ø[ ®A@Àü{)¸Q—%¡Dœ•„jðp]ªAÀÀMi˜MëòxnM?Kd·54ü(Ñ ` à£LDƒ€%€§Rñ ’X�AG$<”ÌKK8˜©NÀ/O-á€öt AÀÀiéXE¼Ç ã Šx�A7pÞ †ˆ�A‡ ƒ3 ý†jÀ| :Ê €ùt—-À€út�A€õ1è ƒ?äoøq|ÜÇ 8j<|ÜÇ c ôàÇ ÓV‹¦£@~ :Ä @ýt„Aû1èƒ<øcÐväßðƒ ìè�AØàƒN;k6tüÇ þA€à1¨~ `x ªÈƒnà±ÉÈ(ƒNÛFà�Aíƒ8ÉcPù À ÀòT>pÐ<�vÒ\Ü9éƒ6ÏcP÷ € @ôT=PX�s²jªÇ ÓN›Š€æ7¼}€ðRƒÁÐd�AŃ3ÛcPñ À @÷tÚE3!ð=õŸì�ëNQE¿¢V¼ ÔÚ¦Ô ^�ªÝïÿtµ6�ýÁÌœ!$¬ý1ë šf†Ùç,‘†Am¤†aPÛA€(€cÔv p)a@<à¼PÓ0¨é À4 j:ðp ƒš<,Ûð¾ƒNß0hÏÂ�À8 j9à0ƒð(4¬Ã ŽƒMÛ6¼ë  õ#à> Ló0¨á à)²CX؇Aý–ÖmxÏA%€´€+¡@ � j7 0oÃ[$và�7�°oÃ; ’„AÍ�I ͜�� Úð†ƒG€mø2NÅ�#@Š6¼ß €`gaƒF€DaÐ.E#@¢0¨Õ @ UÔi �¦ ï6@H5 $ ƒ ²…A›™ˆC€taPŸA€!@ª6¼× €`;ÈiO$ ƒðAd ƒº ^b7A R†A]€ ÛðFƒ@€¤aÐÆÚ>Û m´™{mŸí �² ï3l_€]}„ [ i¾Œ“‘Ú’N€ÄaP‹A Ôžî0Ñ Z�® Ÿd­KÝ µ$™‰Ûð&ƒ@h-º0h–A ´]tcœõÕŠ\¤nÃ{ ¡uè i�ÐtmøM²TR ° aPú jO}%Ë jK׆#Ë jO}%Ë jKýK’A Ôš. úF’A ´-ú»T…â¡Ötmø�3S1yØ�0(zµ£ ƒ¾“bµ¤ ƒþ#Ç jEý�ƒ@¨=™Úðsȉ„‰ É"$ z2‚ÜL,’° ÌÝä¹ÊH"% ºÄüSJ�ìA ‡ ß£‘CJþ4J.TF  aÐý=ÒÉÔ¡JH!¥ �ºž8S „A�P™Â²A ƒ”0èwX«~¬2@iÃ?Ã~”Þ«€ @ g´er©f@ ƒÎp7”&*À_€‡`0Äe*Š{(/ß§z§ùVš«{ ?ºb|.-Ü |ØŽ{Ä¿Z6PöP ?‘'Ô¦jÂ^Jô3óšÒPM˜ @ ƒ~…æÊfjÀ]Jô4XØ<x @YÞN{Ô‡Ó±ê1ò9‹9v¡8T=æ,‚Áˆ{SáZõX @ ƒÞ€¯«ß¨k(aÐkr³l¤Zœ „AÑáê¹ê°€rüòú%åqOu8 ùˆíï±+T‡±”/Ù/ðë SÕà,% úH¿³>T ¾@ ÷øpÙLÕ @ ƒŽñ_Rµƒ€¯�;xg}þ›Ê[Uâ+eq¿08±|¨J|€|¿Æ‘õÕkUa+¥ ÿdÑ.ºQ¶P ß<<=W®@ <^VÜ© S(×ï®LëêAÀTȱë¸t9¶<ÐjL ¼d]¨‘_�`ªÕ˜ y¸Ž�OÃr¨Õx ùO=îùÈz¡•x @ ƒÞ½±Øïk%–@,qîtr±bp€}°º¾ö›»sKJ,‚hH8Ž""âÛñ9šû_Ý„£"�}?Ì̳ŒvuUe·Y…¥"“6xõÊ0¹`–ˆfA–—¬ÀQ‘¿'ºnƲCD‚AwÜ:W׬ÀO•ø•3» –Êk ?DÖnqác°Ç% ²i™œs;Dš+¸r<·ìs ;DŠêí†ãåõ±@%´o9Á´¬­�*Á Ï5–+.à&€JöÒÈ4Ë ÍÜÙ¹/ßyRô‚ó¸ 2a÷{Çõðrϼ©§qã;ÄpÈ9Ìùžï$û5çð@%ôÜx�y¡!à%€J0èÐ9ÓjÈY¼Y·o5�¿9‡“"kV¸ó¾Äêp+DšªèyO2q#D.Ópl>Î>×p@ä…-÷X›SÎ`$€H0èæo±©=)ÚæFˆd®á�ûÄ/|ٰ¡3óž_Ø r¼L˜hý’ØG•#àSÂZã5§Ø q~ "Ûf¦!à"€H…ÓŒÏ1ä6ˆÄ­í62ŠÙG~b"€HÌÎR:š¾ã"€Èz%þ¦Œµñ4†)p³Û8mx rtÂINÆá)ßñ@$~{'çà øD¾48Jjj<ñ D²ÑIšl»çhlVb”µÞÔãˆLÔã%+ãâŽo8 qŽV“QA‡ÿ?�ƒ*GÀIÚ'’t@ãûŒÓ:�$‰Y|Îoë�¨ƒî1nÇ©O 1L_0C¡ÿ¤èvÃ@‘ušÏ)ª¬JðÔ@�æÙôÚ$ërs` €ÆWås,mÂåI^•`ÐW¾V ÞË ’±ú‹Ÿ„íº÷Ä8€]NÉ <»@$Saú8DÜ?·VS[� Ê™}°¸Ρ´÷%‹ùšQ“Î#iD²áÛœ’W v„‰W]º0‹Zxï  º|ež|»Ý�@$Xoþ;’÷îTV‘áIêI  r¼á"q’ßI ’¤€}.wÓÑj*  ‘¥‚GV’Õî~@¤_^Ð,1|Rt$(€Æ=iå¯c`%Ø‘@ä|\p>²|R´/'€J0è˜äU‚Û 5D‚AŸYM\Ç«+&€Èò¶XE`%8@chúûÇ!²vß^¥–Á~CVʱ”GãU¹úY)˜=%4þ$«öf²*ž‰�*Á Oü–¬¶W«©#€F–æê“qÖúË‹Œ;JkÔÆQ#4ædÖy"+ïAE�þθ’¬4ô¾ˆuñz�CDÝ|ï64Ðø=D›+IêJ £‰+®OÈC2 4â“Ön�Fea½* ±6_ð8DÀ“¢Çh É­7$•W Ž^�æ(F\M`%8ùq4~ 7¿ ƒ¯Ý@H6üšˆ¼J°®ø �p+Áë�ˆ�ùõ÷Áò*ÁÖ›R8çd=$Óg-� ºÇ�HzµfC ¿‚?5 ße zÍ�ÉyHæ뀈`Ð7#+k‹5@@lZÁ�xÔëµ>>ü—¤ÊzbIO$ŽYü‡c7Ü ¬',öWa¥Çà �È:÷à°?ÜŒ¼Jð…ÅÀ?ô’d¥£Þ²øƒ^°ˆ¨'2X Ü“2І�ã*Á3–ó Ézáé1OŠ–?’óyˆ:ÃÀIÙ]ï{ðÂnh^%X|÷`БºÅ2` zËŸG¢|f°ŽKNøóh<):f°ŽÉÁï ±5apŠn¨€D@FáwÎWàÀ>ШOXŒKà‘HœˆoY¬�€Cj ÑùËà ÚjR‰Ù¸3ç`Ð U�X�*jÀw3S†ì݉RQ…áC¹D,d‘(„]zÞÿé¬ (K2“{ÇRþîÌ÷Z!™žî>�Jûèz »#]›Q öi(lÕ#m˜ƒñX¼æjŠúioöÁ@'E¯]MQï¤S“0v$]KqƒA·Œ‚X”ÿâZŠ�¥+³ ÒÒê º #M ƒøeš†Q Þ¸ŽBþÔ5Á(8ˆE‰¯®£ Á _̓¨k  zc ÄÇ…«(d"³ïƒ�ß�T6óðÄHˆ6ùšk(`ß°Fž•¾v |ß)혉±0»é x0QZ7"5éÌ1ô³©!U Å C�~ Ñ);p9Å[‚Ó{Ì00t\òÜånø™²F>)zãbŠöª³FNùêbŠöˆ+™ ‘žYÑP°l˜Z)]¸”ƒ²†�¡í²ò†€‚%¡H—†CT‚.¤`°Ò¶á•à‘ )Ö¼‹´kÕ!™-wSŒÖf§¡ü‹†€¼ÄÂ+­NC%ø7 …x”éÄ­ÛÔî¤ ¸K`+AB¤Ö‘;)BòÙ2ØJQAoº‹"ì9€V‚„6ꎻ(@W³ÄP öl(À\Cäæb¡òÄÄŠ)Ä\?'¤êŒÜA‚AK#þ�ÝNüøë ÀBB=q;áÃ.þ¿oé*Á-·~ɱîb öÔ­Di(­ [•¶¢¿Ê®¼IŠHWÜpñ³áÿ¿·¯ÜÈsRô¨ÏàƒVÖ¾‰NŠnº…ðÁ Å†J°OC@nEHºév”ŒpR´uíIì¹öÜJ�°vâÅ„~‹Ýð6=!bqäÅ„®^ê •`�†€ÈŸÚgôº©3��x!ÁƒAû¡Ý%B Ömy‘CnžÓ¹m§:)zêEi¯Æ­ ‹�2õD̤Dü¢î{q[X½P+AÂkÕï^@Ül_ÈÓ$ˆ“¢ëž'r0hÔJ�°`±ãy"ƒö€­ [ö‹Âî5?¿sßIsRtì9¢î³ÛNuHfä9¢Î1\¹‘è�ÌÔO úÖ‚aÛ¶3’¹òS‚þZ1\z&ÓIÑ-?¡Õ̆_ÙJðÔOh…ƒA d«çbÆÛQŒüG’“¢û~LÈFŽt•àw?&dëš#_%¸îGDü¡"IW îø­t0h�/¶�é�Ì“†€†GÀ‚ˆ¥T'EÇ~HÄ<”Û©NŠŽü�€{l,£t'E§~@Àùe˜©g�½òâ½­¤ÙõL¦C2Û¾'ÜS*Ï¡yNŠ^úžV9~U+Á‡ (Zõ`ЊJ0ÏIÑ}ÿ!\˜ Љg’ùî?D[b%ÙvªC2ëþM´‘¤Ÿ¶�é¤è'ÿ&Ø*Ó®yÉÜ7+Q¡}+ÍIѱï–lufÛ™NŠîùŽX‰–Tï_x&Ñ!™©o‰µ¿Š5ÎV ^ù–PÓ*\{é*Ám74ƒÖU‚iNŠ^º!RuJv�­¼[zÑ Z“·�é�̾gD ³DÛ±íL'E?{F #¶—é*ÁuÛhenì™D'E›†€8£jt{þ-ÉIÑæ;MœÂoÍw²œÛæ ‰ïÚ·Ò’Ù³­!~…+Á©­!´¾LsRt×eo=‚_íÝ!Ã0EA·R‹Jª’²ÀÐÿÓEI¤ÐÐõj憶W«w½Û$EUö•¦ðM’N!™5£ÈtrŸgN]’¢ï×(ò+5‰G}’¢ÿQã62‹%»F!™Gîl77¬z4òÞÔIEND®B`‚pydantic-pydantic-e28e879/docs/logos/amazon_logo.png000066400000000000000000000106161526274674700226310ustar00rootroot00000000000000‰PNG  IHDRôôü/¸#PLTE#/>#/>#/>#/>#/>#/>#/>#/>#/>#/>#/>#/>#/>#/>#/>#/>#/>#/>#/>#/>#/>#/>#/>#/>#/>#/>#/>#/>#/>#/>#/>#/>#/>#/>#/>#/>#/>#/>#/>#/>#/>#/>#/>#/>#/>ÿ™#/>#/>#/>#/>#/>#/>ÿ™#/>ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™#/>ÿ™ÿ™ÿ™ÿ™ÿ™#/>ÿ™#/>ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™#/>ÿ™VâÄó_tRNS>ya/žÁÍ'×JŒ°“á¢öüZñqP5j½*B$§:·ȳ é˜eÑ}傇ƒWìÛSG 32öÊn^OèŠz®¦—MÓ¹f:àÔ´«‘Ä+ÀžtIWï&" úÙBw¨{»IDATxÚìÁ�€ ý©©`öà@ÈÿµTUUUUUUUUUUUUUUUUUUUUUUUUUUUUUع³äT�0 ÿ⬨€Šâ<[q*7�++‹ø÷¿‹3WŽtÓ_“ä žò¹MRJ^š¡}zzzzzzzzzzúRþ d/ÓÛôÒ>e†”DÝÞÑp×Û†ÑL�ééÓúözºª:3×÷‡ÉÂЇ�›ËFº±<�)„ÿúãŒÔ�"H¹f®¸©ÿ|‡›ëhmû¿d¸éï[tÔ êÍ^6±Ã�^‘ÕŠ1£pãÌ_è]/{åßê“�°}?Áâ_ö¹m�tÒí9Yys@ ý’®”ò¥§‹ÿ˜O'0z2ïºô.õ¾Ù\¬•è¾ZæœCìÍ …XÖù/›ýrjó-30Ü� ßòZ„S3iP˜WÖ7FxéîK¡²ü·v‡~Œ‚oܦû¹x¬´è�Ì™oUé'“ó½ë�XT&%»È*UƒäªÁ‘dì+Ë™g’kÊ·mÍ¢J‡îdLjóB'¾µ§ï†–y¯Ò´XfåS¨Ì„‘v‡dæ�A¢BŽCY ’rùV–~ðXfÞ¥{èY �Ä”l¤_Y®I¿,9„s¦ Öà >=Ò_H°üÈ®fð-“¾{c¹z�b# <$«½Ía~m\‰CÍgà ¤¾>z™�yK3úŽÃìg·ÖUÆÑ…A)|‹ÃåH¦Âº _½ÆXO+ú€Ã�(f)ÖWB¼¡+ìˆ(Ï*Ky¬­úÅѳ¬c£/ÀµE“b5æê38Ò¬r¦#+9à|Ž”¿4ú–µX>Œ¶bC±Êqk½]`%“öQ¯Ÿû‰ÿ…ÑK¬é€¢¯ ^�Äè…#q@ôÊ‚•ªi&�çHL]—[¬+ ¢Û)Vó(Fs–±‡ålut§ÎŸ5ÓšP«‡½Òm¡þ5ÙˆõõÀ…\ŽÕêCŠÍ’EíuÊ�û†Çž*:ýß·b�“]ÆãÎ`�g‰Á'FúܵuzçUY°WG·¹Pl®´êÑÝ Šÿ<ú½€Ù¡?\�ËŽ×:k¨÷gI¿,J+£c6Å¥ËAoô7Iõ󿎾÷LMðúm è¼›‚A›E5u·�Oøs~.ºÙ¡˜lÁl&Ž’“Ft«f§¥m‘Cm²öÑ6óÌ v»¸©JK�EØÐA‡èª°Ugå=EC#úʽô»¥,K´S q$[¸cãèÓ3¸ÍµÒCúéeÏ‚œòPT¡!ÞœtlÐmSJ]•ÊÊ×5”g®K•«&Åcè ©�¥atÍ«ì»ô‡ï¨GªË}8-_¶€ó:#p[0³TçC=íÖ7»º¤xŒá%¤x|7Qô�0õ£ ÷¢þû-º‹'›ƒ|‚J,º‚‰Êš~ÑÊÍÞ7(â?„'΢èÇÀÏÁåuUyf=~¼¥ ‹dŸBf£+Tü\vç0SF¿ªO/õ-Åå5]®�òN ‡ê(WÑ«èÜé ÕW óÛ>îÖ|ËÂWÑ p¥M4b‘K7¦°ÂÓÆ2zÌê—)^ãþàµa¾mI4EÑÕ?§ú…£]ÂÏô^¶Yo@‚>ˆ®;#…Ž&^ÉñTѺ1`ñEGk£.ZÈê�Å $úHï°ÈÒ�5ññâ Š¾@obA‰9z dÎÐ�VìÑW,z…˹ Ê*¶Ý€;Í<Á#Ý‹½Èèâ:&W ¨Ñ×,Ê V‡‚Òd‡G·Æt«˜Ô‘>»”V£ÏÑ�¾33ÁyŠ “r#FÏÈŸ·AIöC :)NËÜ•ó`Ç‹[§Û³f;pX€¢çÑU•`tÌo½.×^X¢WuV¸†u�“ÎE1™hÀ‡ÿrɉî÷¶ÞªÎ z ¬Ã'£wm³"„Ó�žeÑZc!j¥sßp�þFí„DošE‹}Š¢?ýìN7 ÐTîyÔyL׷§ !i"Gz¯¶aG¯€càÇ£ÏÜ68z�E¸,Ý™á¤}‘Àè/9>½…ÆUF/úx;gG±h©u…ïi]tC£›‰‹~1ß+úE+ºë0„£ºŸ3رN’"õB_©œ´èi¢EWÿBñ#½Óf Gïh?�XÖŠžç —‡‰îñ?Œ>ø‚è©9Iô ‹J$c~0úòQ¢ç8áÑ{MÐðzñÁèîƒDknÍW¹Q¥V½{ô‡pªùvå­¢½¯xH�ôÚÿ½Æ2“íɧŸ¼{GïXÒàžÛÓCÝèEuI®ÌA•ÿèðn°ÈÙvÁ*[œÑW,šÇp=]ì(Úê1Ç”D“Ǽ�›Yòo—INô ãK«0‡îÓs$Z=æ-[MúØP‚¢Kf½gú@ô=ú€1ØÕVz“3½#kž¨è;ðUºÑ=ð U8÷^Ôú¼„ÿÑw ƒF÷�î€Ï'jFo²¨Bá òë|t‰¹>@ô=^|hß5z _Pe4¢�-0‡×Rêc�{À+%?úEcYar×è5ü¥>-�èmø‰h|××ø÷� zCã‘Ïù]£ÏñWÒ¼âè.‹¤”堖Ɖ�üè™)eð!,ã‚ËYcMl £÷YÔŽ< �+¢Sò£7Wøc`½/\Z�=ÅA; ªÁèEM²/knvwL2'�CÛøÝ[É�înÄw��Œ£hÑ/Ñ£ƒhÀ�­Ë¬T/ŽÖ=�+¹ ]‡�eR£ï_¢N8hãHoàè4„7U=c†ž±ñá#r[JþHÏ2ܰ. ê³ø¢¯ñ§üLð]Hà ëqÌ�zQâ…n)¸·(zKc"˾gôœÆâA]›¶T“•t˜§ˆ^†3“}–XÅxx‡S* ôE«#Ž¢¦ˆÂ>˜´s!zÃa°¬ye™AlÑm´[¦Xæ ø¨ ÐVLzê�n�!ú7êÎ,7u ç̃HP!¤¡\1Š ðT±ˆ³ÿ]Üûp«"ýŽ�Zª%�`aáÏæäø0dàÃ9“~‘VŽ©[p+—ñ¹KΨSé²1&¤¿ô8&°GB*SÒò¨¶¬ä®ð MÙÊÖ–LÖs+¤¿UŒìÃ/=®%5$}åˬGð.V2Д.êþ¹>WÚ˜¬�Nñhw²[T°„YnF:Å,À_ƒtü)u§+Ý‘oü7Õtt]<²Dzκ, I�X—PWºfÒñ³-Ò©`MðYÆð çHñŠPº¿2ª!9wOµ±1+ðR²Mºô‰c !e‡ÌJ§Pfý�›“¥`ý¯$g^øÔh�é_É>éäÔ·hékw‰â|g­ ŒtU½â‚ÐO\ƒÿNÿY¹âçÓV%3ÇjÀkå1ó�€ÃŒë©çœQ‡›d.nÔÝ¢l@)…*é ÕH@½ŒYH÷iøæ®8ƒL¯_¨!ÉG<¾îp ë�ñHÿPJ_’YZ¨}ÓÜö2QŸïÜUáƒgu¤³ô`ééÞè™|÷‹w–.&P¿|I\¸óG‘Ü,NÉ4©ó�2Ðw'Áûîi�€Cë™…ªÀ­Q$‰–%1Û8÷7Œ*{ú-ò¿ìÔ]O‚pÇñ£9.ZÝt9YÏm­-. &B< èX jä(kçý¿ŠVCÓZ`[Ó?ì|ÞÁ9ßíÇŸ­v¿¸ Ç)__Â_Á�ú²ØŠf£Õ•ºr­qŒŽeIÚm ç° ÍÚÎíÞÇq—û×òB˜•*z`®F¾íf0©²©îF ~×·µ�Jz2UüÍsœ©-Â\>�ÃñJ¤ãaZøV‚ØAYè›É•⇗rüÉrp�|"~R_�y–Šý_«c¨ã&8—xƒÐ‰]Ñ4MÑuü>Íû_u0ã0ž}f{¶1ÒÆ½i «”@Å/:�B:ÎÅŒgÏáâBy�Ø$å¾ÙÌ´- kxà‚݃Rr0ãygçÎr]…a€zEùC£˜„€:ÓAÞÿ*žtËÓ-‚¶Ð’Bu}!‰c; ^1ûÊM1ÅZ¤§opýû–Hk)�¾"�7bë ’³‡ür)xÁ%À[•;ó|ÍÙÙ`\Àk XØÄ‹ÙN÷}Á›™˜C…W�AÎ16©ËY.–¥§b�Õ‚5äí’Æ‘Íìèž>þJàJÇÚ—ž8'¥«Ø’i³)QïÃ6(pµÄ«Èpë;dá ¶÷‹¨Ød@MÐê>æd¯U +‡ �ÂdÓú·P‹°¶ò’µ‹Ý2v†I(V‚m¬] æ@^eÄxG¼\má£ö%ó±�Z§ôÈËlïãæùa+E¢b'7vx%€¼cà*gÆäR4Gà‹¼³ý'"·õt×aRœÎfã]B‡&Ÿ&úh4�ÏÄŽ©ç6ŒçbXKŽ™hÚQKäˆlSÅDf†åÛC¿ŽV–{|úB·H¦Ô>1ªuŠ}‰…ËŒhƒÙÛHO^a�mjŽÙ6ÅAâÌñ˜¦—»½ �Øû]©Ìs¸À¾:DøÃ2ž�§â Tû<ñRƬBÓšVXÌôœÌ�Åà‡tr(Š“aÍN-‰ Û…°’ØÚ'Ty÷Ç4¤È]ž2Á‰øÚî;RuM¦œÅøq•kÀ#gj�•måTøI™uêqËÁ"Õ©àø!ÇT�§RT5 Òå–�Ò‰4‚>ìhä#r+C‰|3ú¾K6Aº”`ãh”P�±CiŽH Lƒ~7ÿØ·ƒ¡( £mJäišŠbˆ©h àþ÷�ƒœ41ÎÙÄ7øï}Îýãú“ˆ�ý,Ïçqk×QôX¼O!ñÚ¢¤ú¸w9´wýy:<·µ]BÖÕ÷øh‚«»,,ízálCš„<ë§²èšf|kš¢œª,I:ˆ7/öà@ÈÿµTUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU¥=8äoý °>é47ª=\IEND®B`‚pydantic-pydantic-e28e879/docs/logos/anthropic_logo.png000066400000000000000000000402141526274674700233300ustar00rootroot00000000000000‰PNG  IHDR��·aÆþPLTEÌ›z Íœx Êœz""%!È�yÏ›uÍœ{ËšvÍ›v"Ï�{!#É�}Ìž|КxК{Ëšx†kW!!!ÑštО}Ê™x!%$Ï™rÈœ€+%͘r!!"'ÈŸƒÄ›Ìœ~ÍœtÊœ!$ ÇŸ‚ÈšzÏ™u""Íš|Ç›|!"!"Ê›}3&Ñšv&ÅœƒÐ˜~Æ™x$Éžu)É—v#$$$ #$"É™wÊœxÑœy«‰pјz+Þƒ"Å�(!Ëž�Æ tÇ–uЛsÆŸyÑœv7%-Ä †ÍŸ~ÔžxΘx-#!Ó˜rgL9!Íš(#)Æž� 0¾–zÊ•o$À›€#$Àž†Ò¡&Ô–{:,!É™s%$* Èœ„È—~Ê�uƒm\ߊɡ†ÔœuÁ¢ŒÊ›‚$%·š…ÓŸ|²•€Ë …Ï™‚Ï¡€Ï–n")C/ ™{Ñœt×™mÇ£‰¼›‚<)¼ ‹¼˜ ¼ž‡Ã—x§‹wŸ‚n% 7"£‡t–yd%)΢„Ÿˆra€gVD3&V>-O8& ³‘{Ä—sΜpoVD1#¸•Ôšq]H7&#!1 Æž~¬�{Æ•r¼š‡Ëš„ס{Ó™zÓ™v‘t`fSE`M@VF;!Ó¤„Ù˜tÁ’qiO?M;,H6+›i&"waRw\J+('ÒœƒÓ—€À¡w¶�v Ò•kp\L;3*Ç£�´��ŽnWWC1¬–‡˜‚s”}l�cM‹wiJ=4Í£ŠÀ˜‡ÚžwD)¹ �Ìžy#$hYML1Á”‚¤�€sS;±ˆm¥ƒlxh^šˆ~Ê›k¥{_›rU}nbØœŠ\=oD&°^Æ :—=GIDATxÚìÁ�€ ý©©fßÞ£šªŽÿîÝîî^ìÂ.cw²�1Ù�É{²`°Å" ”7‚�" f¼DA™`šb‰)ŠŠ™ÇW™ =,MMOieYYÖ)Ëö~¿~9•ø³Ãïs°\عßý~¿û;ÛAAAAAAAAAAAAAù?h|È·%º¥#3ŒQ2”©¡Á�ãäÉ“G†Qz®[W¬uÛ8H ˆ¼`CkIIëÃ~;Dž:* ˜º·eQK@nNCoÌôÝÞ¨e¢¢’(?ÓrŠöx� £¨$ÏJO‚^½}ä € •†¼¤`µšâP|á¿®õhT±ßvsæÆÕ³rsžžÊj{ •Qjµ€‚CÉ0~&“‚$ èÈòAM« 4‡Óþ¹¹%%ê6Ðjœež¹¹GžnmKˆ0YµÎÅÅÎÚ ³–£±1Ú7zÑ"ß’´S´]†p«lTdv¤—ß;SËaµ.^l0ŠU9A )÷á§2Z™U¹sQa``fàÔÀ©\ÍͰš;ÓÓO‘'4`D¤B‘ØYÕýn×Üãw (à_ŽŽ¾¬°æ¡ £ª¬¶þ:igSSÓ¤‘5±Øö.šjÕØ `¸0¤ü—I“>ÚÙ÷Ûo“n ~ü²�X �›ë¸üÃî‡t3Ê&C38à·  þþ¯7ušAñó€ƒaà§SùG[úû—αøp�/ä“‘¡³UÌ[ß2�›«êÚ¹TçîpuEâÞííÞŽ…r¹Îb±ÔLz6zv°zx„‘úò;¯,­°,ù—pð ïH¾è­mñ»ê.=U�‘UÑP TÕýÁé9÷‡¬�\E">_äÁÁŸ&X(‹Å–ÉÇWZ‹JF €¢ü©yý5K0þ=ÃŽ‡\]ë×|YïèBW7Z»JC'äzt‚ÆžP­¢»>\k ñ¨¯wñq—ˆ8\oƒE ]>u—ºÍÊ0¤pR~™0ñÁ5"þP‘úClïî¦h PÐäzZ@稪U {ÿ–Cbž»7Žñ„ãpu�&,fñtW»“F B©(||÷ŒÒžë1K€ó#�³æØrq=EÑZ¥¢r½ŠÖjh»öðîþš2Ý’49œ•àÌäÅåêʇ#D€‡& ëVFž#õpq!Hßõ*tÞõ^r¹’Ë–øªèŸ×Miµ¥€pGˆŠ¦µZºoK�ÍG'׉-6›s¸Špž\.à{„5æ´ß.þþ.dGá¦|£#VÌ!ÂÒ±|IZ†eiÿ•ô*AEÁa�ëiTvxn49ÇïÓ”¶ …^b {ö0!G¬“‹å<¸ZKtO>¶÷ùaAœîpñÏ•¹Ì\ñ¤M(u9¤›D._8Ë(œ;Ãö¬ Çr=¨4vJóË9<Òâ)B˜TËç�Ha+1�ïQ/Z�ßKæ'$77×ß-½yg¾.YÂçðð�Há*‚Ý*Št¿ýö�Oi«)86Ñ¢>¢^mרÿxkÛš5õkêER “JbáÅ/‡äV!;ñð·½å!¬øîDåAüs÷åÊ|«ŸñºÝÝ•^OÇJp>þŸúm=Û�ª¦(äþQµo¬jØñfÖ¾GJ~÷Ûw°Q‚iÓø|<{�—¥âÌ·ï)íA¦íË7f™Ì�Š5ÐGGëÉà"çô³s>ñ� yŽÃ‰Joá¢XŒãøç )Ÿ=òsÖ›;¢W½Q{4Ltþ²”¡ 'ߎiþqúXƒ$/ЕÙíûœ¤Ù¬7»±AˆÿÉ3Ð-½Od³A¤¸ Âau—>�9ùÈ>¤‰BAü]˜˜UËw¼·ï³’Æg�¿:Ö Øýi5K�½G*ÂªÈ "†‚¨a�òr=HªÔèWóº®D8ûëB!›fxËkŸ¾~ô颽(È�¸Á w}±¯5å¹Muác‚à |ܘ–¡«©û‰R¹‘äìî>`ܦ—+`™µjçt/8cIø"¾n3G ¢;¾çõ”‡‹öÞ5°|ULŠÌLtqË@̪ù 'ƒ'ÓpvÎÂQƒ@ƒA°ö%>–«nnÖÙn gö$IÑ+u‘,¨pëÛ`‘ˆ"ƒm0yÝ‹ LeÞb'ÅüU1ŒË20ÑeÅ�°ùóý\|bÏîW7Œ%οV$ `×;§¶[IúHRÛƒ "#H…^O•EžtôŠýìŒ%ŠIØ ìmŒcƒeÿS'ìQÎÀo~L X&º,'„…1L3ÿòÅò)Ø(xCABݓٓ|1]DWåɈƒ($aðô$ÌU/^!±Cs†K0Žð—Ÿøáòü6%ÃÄ„…‘N(H–“ {¤01��Í«Ù0zXÇa�wO>—ýçùÀ 6C‘A6Ø‚]HH@ÔÎæèóO ’ƒHqŒ#uCAß§ËcŠS& 8¡ À LJmLc˦üŒY©c ‚ó!øE*½ÒÛ  ÏV„Œ v�A •I´uû½u ²S=Ž /;ÝÕ’óFí Ùû2Ñ9Aw°Aôë/”ɳÇÃÿÕ¿¿»Ã¹èaOìƒ(Á5D›� f›¾G'4FzˆR .ê#Ágíªëël|!œPè8O))«_+^È“Ž)ÈŠÔœy|¦µ¨‰0Ef(ATÑjìÖÕ³¯ÖødÇ÷8¤¼‘ƒHyi¯ïj€A”ËàCLxðqç¢Liln²Ü/0Þ‚�ÎʘÞ×¹w]‘ZL&S˜2Š­joÐê JséÑÉ>Ùñ‰©Ø ‚Übl¨ÛÚÙX{TçD€ /…qÊŠóWÆ4®8øòýÙÒvl,žÂ cÆÁnëâVO‚4éa�£° ™3W»Âù½ƒ–´ðxïkApɰ ÒžYs^kn¬Uúà €]-³,+k™2æ!¸KOýjó3ØXð†À("cÝÖ©.ë D„‰:J 2‚ Í™zs�†6tí̯ѥ�K¾Q�gné™þñÊçb`�¬eL-˜èjS`�8",úlYø”»G"•aOï z÷²ýåÕ¹ê¡ %2™ è»ÑLÁ][OÛÄi ÚÙ#0 ç9eC]/ òO�\Ø ~çw[¦|ų́AðkA„,´†?÷ÊyM¥šPÀ `(ˆŒ õSËË3�]ֵ╊²´ÒÁ„˜t„ ·†ÞöÕ�³ßÀ p¤¦  �'ìń۽|8=;¾ýö´9Ø8½f4uU™ u‰š15DŽ#«{·ˆ�=Û¦ xrö¹.9Ϙpæƒnsõ©6êT&˜èWÛÂmf÷KâRw|sš6N¥›wÕ;\¨ 1Ęí.IÅææ÷δjœ�UèÕ'ÅÅÕZ2ððn[†1Qâž¼'ïöÍ^¶Ó[g*µ: ø™‡AÓñîUË’pv—½\‰¡üH£®à•õ™$á|½> ™3/æÛ„Þ‡$QŠ�“ã£Ð'¿©*D©£”a€Ë³Í\µuº¸”'Àؤº‡†„xËmkh1ÓÊÊ60Ñ%Ù5~�{æUˆK“ŽÈÈHlœâ¥F¯ÉÇVF“DT”’$/è±'Ï 0öa|?$Ô»ÔRqv½¯Ü &º"•¹hÓZ›OîâwGdH|©ní¦*=�Á"JÀ¡ÎÓ>´¾¯¢LÎnÓ!Œ#IJ-u–¸àý=3ÍDzèßì� TSWÇï{y/ $$„€IØ“A!Ã& ìÊ> ì›""kEP *"Œ¨¸á¾Ž»Öm´jݵîËŒ[]ªÝÛi;m§�}æ¾h'/¯gGÐß©3ç´‡–ðã¾åÞïûŽq1-s¶4ÑýÀ• �(°¨µªëÅwf- …K$ÐÑY€‹«×ïh2Ó þð©A‡A6( LaÐÒ“¹Ç:Á«Ž¬0-±ý�³Kï%CŒ02AÁ? ó�ÜvðR{®Ø630СÈĵwíÉ bÇsõþ\Ê $} ð%ÅùΊàŒcãÀ«Ž7pj~䜚Ì@žÞt©‹$>¡!VªÇ¤s‹s67Îy›b!ÈHË=¹.LÏ�ò�•"Fp¹(„É4¼t¸64îõ=¤²ÎmÖ©*6‚ ¦KãUäE þEš„ùK5aÚsWŠ 3)—,I!ÞÀòÚµ#Çñ碱¥!³âãÂàUGâ^{ÕY£Ã0”ÜÚ e×+ø—i Ù(|pEÔ9W»[¬�€"Ä@!Z¯U=[3É”­™aq®â±6*;`u x-¤m娋Us9: 5½ù¯DÒã•‘´K$9ÑGé•©9ÛGyÁÍ¡å‹,yÕËN©Kà>@ uóýN†BÊ­jªötûÄ�W|冥Å<{+:!ð’¥R^¿~�Vˆ‰å`ñaK7¸­¬3!DÎW4œ»9ëÑ”i¬¦$•NHkydÕ‚ïìÁ«Ñádi�·Ù›Üm%Þ+VÈQo«a0É;†QŠ¡#o}´ãþÖÈùS¯4«)§þ<ÙÑ�Ë�,ùêamhÁm‰‰°g¿ŒðJ9ðaÑ.ð¡{gÄÎå{·ìû¸KÑ §8Á�-‹@ ø�B,qà>ÛÉ×O·ìòŽ&ur�ŠNˆFÊ©ÉùvÔ�’©ó#«ÔÌV:!s5—¾©õÈÜÏ"¡»m)s�0qDŒ¡)$Âuçrçñ»š»ºpk±¯¯˜¼õ¬Á€R«X¢‰ú¬¼µ5_STñ. "Qø+¢£O�´)$xƼ´?ÝU—¨0{ŽEH!(bÄÎážß¿ñ†vÉ©+Ë'+‡EL!¯YˆKØÒËÕƒ{…P‹¹§Õ^ *fª¨oêäU‹hmÕ)]ÂNŸ×æá‚ÌLoËWÄÉ‚@!�•m¢ó›>..Uªì[íu(Ó¤tgMцwÞøkaâæ€å^¬©º-r‰DÅ—ÂC¦ÚjSB2úFËú¥AWŠ�a„&Un¥‹ü(uÊw“òD Y¦Ìx jüX@2³ ŸWÝý5¼`˜(…°M]²vÖ\Üuã¯oHÆ~pÖ;ô:B³Dü¥¥6m?|TÂ] rJCÐ�éû.”m3-„ÁÄ0«ž¾·os³,3‰öhdàß×-‰–3? é”)ð”ړ눨$+BƒmZÈ•«Á!oŒ>>ò·{‚ Üa”‚öÞE¸¼øÒª),c±¬cBY¶|jËÜ�i'œ¥:Œìp ‰Ð�°^²K¦°Ä·‰|!D ‡�8Ê òÜæœÎa „†�B0Š�+£`ÃYˆ¤!oáth4EÚ#DÊå•:„�º§eYkw³ä1”¦Òʶ»œ5˜„ \îp.E˜ë¶¬HÁ» Ä·)’�¿•B´-;yøIfÎÌ'¾¿Õ ®²m™‚R„ {tgÞ˜P¨È¼yz›t� õ=¢w…øs•šƒ—~ˆ‰‰±Ö²äÆm×xå‰ÑÓ®:O¦J AxC‡å¢L¦óéÉ֊™2Xì$20Ð!…8ù�8™B¼âNƒAXà�W,“Ñë…±ÝÔ#«ÔžtˆÖ¨M �ð¸7¶Ô¡è{kÖî¼¼PyŒq0Áˆ®qÇßY½u9U�I0l(eººÜý`ɼJǾâíW@ˆ xÕ[ÞqøC FÞ80âŠe:‹ä³ïð.óÄDßOoÛìº�lF‚¡=Bì9kk4ÅžŸÊÊÛ-’Gwìî÷î„}§ÏÒaDG…W/W×èÔ¯ö�SŒ‘yPÈÀ?c…OóŠÜks@|«�Í$³HBRˆbÄ·+»ºÌ—ÔŠgÞþë'ß_O¢‚Àë^,Oã�úg–6†bn³û­Eï†4o.¢áò˜®ÌÉPȯ££áÑaTò¥õ›, ,`bJ°�½"B‚=| �IʾœOh@ŸáP„ü!TñÖØ%³&v.úë'?ÜšÂ$„è8=O£)þûyV̼P5þé�ï¾b"þ ^§z…@!é'' *a¦!dàG‘¿3Ûcä�·ÞÞѼ>@hÈ7Ù¯F,š[QÊÆª¦‹£m€ùرðÝ®0¤ãèé²³=¹½�Ä­z¤pý‡æ�OoùWNDºÏÐGF�üHÝ‘¿™¥6"RL‡!P#cƒ¡‹,¾¸ìWZAÏÞ»»;è¼3Û�ŸvôZX2s'��(¦jLÈú~´ ‹2úxÈìOÞÜ{¥GŒÁ¤’zõ“éoì'…üKº�<ƒ`Vó?¦8$+á—J†i!iñ”“‹µ"ËWâ0„2ÁòÖËyÁ»¶Ö7zÒ®=¶6Þ%aë76½B$=>½vÕÖ2(fBPBˆÎŸBfé>O…„Û� ·;T\¯Ç¤=+£îÏÎy X^™ÍÅw&ã:d¤S÷ÉŠ°Ò¤r:!:=ÊVçœú¼W.9>zzËŠS9žùÄ3Ñd(‚P© ØÐþé[#ÆŽõ€Bð [– 3zåL©*�—bItBìc5õKG¹…¾*»ï`‚)Ä'y!1¶‚õc!1¶ðÄ€ÚöEéJúìñn¼wE‡]mO$„È^!‚ºÊÀLÑùŲ`±­^gO)í$k;$¾ô`Ń%n¾€ˆ]bKÙ˜1DÀÄSE�éQ·nE›-¦j�#’Ìöž\ì@Lç_UçžÌªOVÆÃ/„BªL»Ælëá}›D•Ç*½þ�½!N'g�*KFc£t\Bè™Ë®ªÔ�fÝûv†[ÀøpK¸%þÁÒªd¬uª=†�›_(e…ägŸ=µÄ)d4|�!�‹�H›8jG˜K %–"B%IÃÙS6×N) 2_�'­�eÐ~¼~J±!v°ñL !`$‡íhw³–�BÜ}ð!K˜‰Õ¾£>5vãT{nïæb–o8;e}ð„Ñ"�ÌÏñE(lÁN-¡R/…=‡ê3sÜX]ŽÇ¾`>R$°sj¾VœT»†NˆÆÁùjsG¸#Q0Á-g̘1>9ÕîYÏ™j�B!B&FÂU%®À¸%‰%\ î!À ­×úu é<”ÆìŒàp°ä€Ë^¡¸çü ssy†_Ç®A“#"ZÑ�è…T-X_ëá݉ã„\GŒ „¸]þ,AyËžƒC'˜ÔÝá¡þù†å÷9ÙHfŒË ¡™‰§Í:í¬áqI!Ôdzä${+N|Ø…Å¡x\ƒµ/èŒ5Ï˘Ðqr�š¹³\Üi„04f§æ$f[d‰ŸâvÄ/F/{æÕÛë5œ�·x4B~=ôKWÃÞËÓ|ð¿€B~ŒØï˜Wû( t.—kZH•áLµBÍÜ ÅÛ2òœÀ@glhžÝìI㙹î,�Pi\¨BH# 6,XhÉø”bC ùÅ/ÆšûM˜€~œÅ¶ß¨£¹v§ë•=“Üñ¿ ¨BnÏÔV?v"vZIÓ£©Bx¤�Òâ¬7ûUü"…µÛá¥elÚ3ád)Ò–¼õpJž`ˆehe…6-9¼5Uƒ’F¨B éùzšêüÙZüø8Ž›|1�Þ|­IX³³<*ž*~_5.ÎÛ�vüÊEkqõãu �Ä·.¸s‹N͚ća¼#­)BÚB�žrv@H#ÔxϵžQX<ÛùÐãê4­#p<h“[7k£üQj²¯§b¸1lÝå÷�ß&�æÓã²é7÷b#áí�š} Ô)Ί¶Ýƒ—œ\ZÅ&… !ùžžz=Z¢†}ëp¾ÀÂôæfʲ=eÉIp·™K#EÒÕMã»güª“_-�ÛßÂøHºíï¨X©Š�°}N÷¹ð‚‚JÑn`„·Ÿ7qÔö0ã@#Ô¥×aR�Úy݆ąy Àˆpbû_Nlÿ—¢ØÚ(Ä^¯Ø+â¼tWâ~S�á×�[ÛÚ9ömChˆì‰lŸ¬Í0ÕÒõZâ!x8kÓ¾Ç9fézxL‹P„Ànpõ¹Õ_Øç§ø™2UHoÎ?R´nKw.ß.Æ€�8+—8B"ѲËÃàjÝj9'^¶uu®€?8Kª<\ ŠIÙðYXr”½No  ÁP($Ú%lë*˜ŒÙõSGÈx„L#Ó«êŠÓí+ø0ÃJíäü ;ŸÿùU²È ‰®ÈàVÔG©{Çu¤Šë <îȼIãs’#íu˜J‰Aø 6`’Õa[f¥ŒòEÎì�ôVÔŽª!QùªÒ°¥«çØñå"`;�„“e81–ᨪ Ç**»*ë~uÀ%8ŽSOüÄZ<³²ÎëþÞmR{]SCBü›oXIñÅ9Õæ teHn».ä¸ÌÅÊMŸX¢CK«š®Þ‹±%×ÇÀbør9Y¨TûÒé ÕZ1ÍÁ»&jq‰,ªßyÙL ß][áôzN’���2a³"Û¤ÑFçG‰æCh õ>ÙP¦I2%„AÑéõX‡ô œ~3 §IËáÚ·åËíN•9”ªôºŸ¨,­Øó±Ø–¨R3%Äm“�cAeèâ;ézŒ§1ñ¦N´þð¸.RuzÉÂ/èKYÛ/Õ³=óé„ÜjÕ«ØE{?àÕm+Å€�†^³2êDÿ¸ë�l@õX]±³ê²õòÇZI 1vÍ„�à´ÙþN~âûÎåbÛ�"„Øàbó8œá<‡¥—ÇΠ+öMûäª3,ö¦bUŽÅjÌÂΜ·•ómù¢�wÉá°à\øßÔ©ì¹R=FÛÀ‰t8p4Å®WˆX Œhq³›ÙéxnÒçg.WÅ6£b¯‹*ÎyüönºvˆØ1¥Qij…° !×Zå×l+ øÇ9¼^‰ø` ð´afÑ»7šþì¼ô5 ‡þÐÐùéí1ð†ŽË-c¬Ø}üøñ�wþüY“ wþ|SË!¼¹l‡°œ‹ïeÂyëN 7õ Þ17ïk ”‰ŽOˆ�Êf‘‹=:õ¤”¶^XlÝõVgl«Kô°ç#OZʺnÖ²Š�Ÿ!>õÒaë13;-a,ËbÜ"K#ÈÙx‰OǨí9�oÑ �W³„¦¥|Žãļu§y}BúZê¼3E-'§ Vl6ôñBv¬ÏeY¼õVƒùÄÄ`›p>ò¤éòØíö}uùbKïÌ,r°R‚ƒ'²$2–o÷$ ™¿½äZ}jÔ—¿£‚"ø²Þtêž@Àg…zl"2,p(¤¯éT‘ÞÑ›N£‰�ôt{zR»€s}3gV²&C!'ú‹Û“¶äcãà¼ô‹Ë‘ŸãîûËÜX"qpbm° O1bìØ±#`‰Öˆ…¿º¼÷ŠëNŠB¢dUÕoýF ˆÉóó›—A¾×Œd™÷µe{Tú¾w§È€ ÐÂOiºÐî&p<{FèÓyé' §] øY!.g6¯Ä�ˆX¡ 6ú1c¬¹Jl?ppyRUaƒB¢Ùê„„ï‰yëyð¨ ô¼gš÷ÈŽYh¿W= � �ÀµB©BÙº¡Úºrf �$0ôwú¢-•67öúY![–´Ä(º`au \ ,#ˆ+±=¨mÙ÷¨¾Lh ›&�J‘tM*ì[?Gä:ˆâȸ>øõO¢=fÊXÁ0ÚcÞ8"<1:!g÷^ƒÏ�'l|<<Ä,Ø"×ßé ),ôùxÃãð*Ÿ�ªž×0s¿#üÁ± n„»;‘í3ÚfzÇ’£ *ª\è„`\iº’]Rúç4qŒ(<.Nz„ô…ß(¢…0ü¦GH†#„0)ßß• ‹«>¶;~b´�»¬Öëÿ㽟Æ#­l¾´íç„°,^h]éXà8„pË‘FÌ~gÂ/CBB~ùδ÷Þ»PQ”@+D‰FÆGÆ;iph›w�·„ôð'ñP²J¹Gu÷gÑ‚yBxÃL 1lËzTÚVxög³¼õ'b~DÆÞä„• æî+•—wUO:¿;ôüÊI¦ù}/Ÿì;zïƒKU ?;oýÕ› Ç™PˆáãI€š¬ -#máßJ4 URD>ÆåÛŠÔ#aWCО9F÷;ôwú"ön8ÕnÙ»�`Oo„ò`ü…ñ?Åù§O�:s½DƒÁ„ }F ‡/Id:–Q???€[<‰ ,eˆÓþ4Å¡Äà™Ÿ¯çri„d«ÀÓùh‰9„< ¡œ6çâÙÉLÞO A”ê²²  gçzgH™šJYX/A0]ÖàéoJ‚>¥éb{·ö˜£L<<üàÂxÂYηÓÎ =íP\ší Ww(4‚R.YžÌÔƒ×šÝæÙÀé=ø@ò$¦µùQÑrƒQL+u¶‘²^¹PX…¢Ã†3�ü�pÍÎ^™<™™½3?"b'bô ê)�–hãà%ËÝc6<ô’õÅÔÚØ ë¶`ßzj2’�ö ¡¼‡`‘ìªKíÝi PÍû¿�§óÒ¿ºâª’þì¼t)Æi�?uþF{""\I’<=#Z#ÊËM¨€Ë¤ÂH=5GÜÐé üf;ùÁ¸¥¾ çpww?¸ÿþðð b¢"Ìx<B’Ò‹*6/IaYŒ‘Y–ôwú¢¾§­Újp]KÍ^§®½½ÕÔ©Våús(”—çCP4)6Ãò#ZM­ „ù�áÒª�£wφ‰lÜ“¨s�´•Úºpì[¯¯2Ô ¤”*$*vnªó�9^æC`×)`õÿY¹Oæ¥ pýw楛5ÖÙWþJMcc£F£4&))‰Y³&:>ñ"i„0 L«¤¢A^xf ð˜6�ˆ[z2 `z‡¯¶®0óóG—šˆ,瞈?Œ*„Ëc—-] Ïß‚BÜ€�Þq“Æ_Y� ý9!ªú ³•TÉ`›©Í\\„F #³ø~ýëh¨„øcZÔÑ«d¾Ð�› ²@Ÿ ±ÀAÚ¤XÙ¸lÎ�œ¢m†ø^!e³32ž]•õxÒØ�"ÄÏÎV‰¸­xÿ.›KL¸yÁ¸2‹½çäN¤ûÍ~qäÜýuÅ‘å=eLjh²25|øð“ ÇÇËÈ{ôw´|A&l²Yvµ(™¿&ùÿ $9lÏÑ`w¼GÈl`ž6j�Â)ÇP¦I!.É5ù(ãîïM}"÷!ár˜mêuxkq6�§LOE^0®©õ ÖOó „à`e…È}s÷80ÌešœÇ.QæcÙ §š§WÈ­ûÿc/ zVæn©(V¢RéGä“ïZšP±å=7<à>�Ú·ž»: FšõŠQ„À¢>¦:¸àûWˆXæ ¿;ÓR–lorQúK¥±ÑÈ fg>#5l;Ìe°„B`Ï;0ÂÛ®zÙ5A‰Ö¥­Ña'\j‡•ð¦æ®)â2¼V\ËQ1§4Bôú|ƒCÅø£n~mCúÿîLELǾ7³ŒÌ¿8ô:,¶Æ!àÍæ…rEfeEH�„zi˜Y�T‹mÔQ“¯1ÌÓ“éâ¼àrð&Û! Ðß‘e²ªa�ŽCï¼tò‚Aó£ò•ìªs¦¹¶)†P.9‰Ü·e×8o�Òc\ª.!„í�µ¥Ö�×ÿWHg›oíú3Xh4/ý¡REæ{Öl˺¼x:h³l Ôúò塉ƒ*ÊØ*=ͼuO(„áv¦½Zçú;•u gÝ)K®A˜FóÒ_kâõù;£ˆ·u'€ã ”3q �±ö#R•˜ý(ÒÄÀîö£kЧyÎo³NƒóÖ !–ýAQh�C!iN Cå"‹e[²œ¶]�GzGr)B äÜ<T5W¥òÇÊžE¹xÒ«é„Ä—&¼™ËêÚOY!!¬±¿˜�ût\€E‘T!ž(þ¦ÀQÒòú«~ßå(Y‹{æ­ãýA8Ðúz¤imqÁ½9 Âl%J'dyöd&ÖK„•ÕïÌž8”Âåöæoe›‚rÑÆ°íG}ñN`D2b†Äfzûƒ+®ù‘Ã(—,O„ìÉ�Hª©ªØò‰£"Ü–eMT Cúɼ\øÖçXá|ùSÂR“#c¥„Sï!“' HRÔáaõ»ßýyF¬ „�¹Ãæ" B�‚òJÖ­nÑ*€D¾¦¹%R»åÊò¤H.5‚âYa0«Ø~4ÓB °|>Þ�„�NÚŽØÖÙió¬¯:›±Ó¯¯�âÑ�Œ²'OÎÎf0ó=Ë!œgÚÀü‰^6„åÒ‰/QWìÉ ¥œg¸ûÁâc\2zBðú)Û ž˜i!L¬Õª¦e½/’‹p� ÿ�¿ÇE >NŠ¿»«fÏõ‡óÒyˆi!ÙÌl˜- ‹va–"}F”J�F“JàÂ.a ItBÐlçH#XDd?l8 ™½ïTPöZjå"JA +8o=ᜳ‹+¼-¼-ûËòÀ{òpoEºiÒýâëÙ¨ý­�:b…°MñgjŠöfe-ÍÊÊ  þçÙÉ"(R ³Ufbš4¹‰™.¬_·eqµ‰ê| úW2½(àæJk\á'‹³?!bÄPȱʂðyÕû¶C \8£ÂU:|øþªUëWŒzvVõòø%Ån!F< æªI/ÊyоY¹m8ÿiJ)‹bÓfç¶ïAu®" aB8ä¼u—kÝN|E�L…ˆáW¾ü×-¢‡O,f¿E¸Sí†ÏØ öTõ)+6ºèû9µÁnÁ'_[Á³’B’X;gË^µÆ¿µ•zÉ!£2Q©4=5lë£e@Ä·µü q‡iÿ’8‰{Ë ½†�ÔÈ¿™·ÎÞ1j±¯BÖ Wñ1ûÁ�„[þñÊ…Üíèž (¡÷—‹B-"ˆÞºê½Ùäd?�ã¸ýŽÏˆ€ÀÖ7%w=Ì¿ZKÒ—]*Eçj‚öÞùœXðèe„9ð!Æ­ 2 7íº$týÉyë<„yhó{+ñ™�ÄÇ„B^þÝ_âWg¢“—Sä%®º¤&W‡ƒB—"$ÒåôœŽðÊ……x�[´Èö!­x ´^û.4 U­V”§¤¾‚+”ÇN »øÐ.ˆìø?ï=Ò'd–yC—·O𳤟�·~jÎ$Q�LFt ‹Yý`Þ:)d¢Ä)Gß,Ò�z¯X„ÊyEÑÝ¢™�ŸÚðù¸lÿ"¯g$3SÉäƒ*Í4úrÓ+„‰¨°ÈøÒ )›ád0þ�âfà0ØÀv¿w¾ó~@ ý¼uBˆ«kêÝ÷kµŠ™•8ü”Ný¡o]&NÄ·šY)Jk?í"%¯S䳣Ф‡K‡âŸÞÞ¯°óõÕÂîL·gÄÎN P(¼iÕ»vÔ ™þtBШ¨t�CÐ;9ˆvá”yë¿xëÓÓç|høÉyëPH´zK³Ge� �BúÁ …ÀÛ3+SÑ6xÃÖ¹Q„” …M°/»3Ç×qÑíÛ™Ö^¹^oñ…õ3’–f-Š‹‹±RV\Í9˜ÍDŒxR´«×£ ¡CÀŸlaŒ€(üÇóÖC~éD¤Í|ã—Íß—šÒ;o}ÜóZræp𢫀˜·îd/ÿ éb‘)Zx-!Þj@P”×+„31"àÑ’sc-útˆobmí¯Æš{?#))NZo@Ú–ÚõK« ¦…0L‡I¶:èoçë2êÎ…Ûþ8>ªGÈ~õÃ]z!(dctÖI§¸JGòSö‡ì?¸¥@›Ø¾UèßJs �ƱØìëp ½<\Ä—gü·ó3ñIãƒÐùÈ�»u ”l›šoÜ^ôœ&=�˜·>æijªm]Œ<ãïAj¶2I§‹¢ X»¾íÀœ�AaoÀÚËßs}° \䛸%+9v*­ÝF�ŠÝ¨þ›-?†¯ ÿ)}ùW�¢–AJ+ékh3-¤èûæ�Ûï¾µŽ÷þ—ø"y8 ùç¡A¥×ÓG®uY°z°–Ò?ÞÕ{fôãx^ʾíalŒ^ˆ½½Ñß=/�ዎˆDà?¤/ÿÊÛQ°éð%M,Ú׬N#äÊ™£ÓÇ} WÈÛ³{à÷ É�óíÎ9ä I�Ò«èB:7~YZq-ÑWD†tö!$DŒ[âåuakì§Ò½Á¸—ª¯È¨“güç1¬}ùW�� ñŠ;EŒÞcCz!SVÏMÌ['„ØXÎx:ÞÛN/ž¢¿T•Î�Äè…`ì°¯w-´&blû‹œ8I[ؽ'DZ¿Eóæ …ÄÖ°NyÄØÁßLyø%æ_ÍTÄiߟ¢Fû ²¼èZ°�B1Ä\<�2ô’QGDÙÚÙ~s©^­‘¢?ôüQPÅÉn§ž ç~!.fœ%Î]µÃY5ÕäÞ“²¦¸þÌCD ÜVþ¯�¾ü«™ŽÚê9r¸\´“B¾¼rq×¹Bo¢™*$Ìx"ÄVÂßÖö¬ÉÐÌE¥´QèöñÅ{Çï î‰Bï{YxÏô�‰µƒ²ÔlUT+Ýî+Œ³be½yˆäv1|ðÓ—娙)H©}¼Šàb:!;…Y÷[Ümâlà0>ÖÓ¸%9)ÎüeÔ§¦óhç­[qxì„«k{‡ô!âÄöÓÎÉD€)!L ‰L/vÞ±j…ÙÂ5ðŸÒ—%s„wõÄ?|ÍãýØõH×uyÐøîéˆñÞ>àGBê2€¦ŠókÛä$¤+ciÇièb#·Ul9Ú3N£…{Ë*ëVæ>Zࢌ݈éLTÊ+­ª¸0k ø/y’å(M›ômzM)wPÖA!‚Ò œ�Áh<6œÊW�Þ•Y)xù[Ülq ÇL¢â½¨ÕE壅ž*x%Á©öÿ%Oó¯¢p±øÏ¥%leº%… &„ä¶•íéî „àD”0"ÍkÔ×aÊŸÉ4åƒ÷|™–ý çP+Çm¬êö­Å*'*Ö@õAÁÃ2—œíK&å=!8<` ÙÂü«‹S5鈥‚"Ùg¬oùå£%3`u0Æö­W8$Ké„(UÄÐ2õ�Y A—ï]¹Ö"®­äœloe¥§ö¥3 digzjÓ \­ü—<É¿ò"Q ¨û¾¨L ›ýU\ %�Pö¦”†åA[š§�–XŽaŽÛ#,¯ÕKË>ФëÇH‚cý¶MYïÅ i°/;›VŠp�xßö Ä~*ÜØH[kû‘zÁ*7‘ü—ôå_e¸çùñA8þÍÖúª¢ƒ åÒAó]—?Ø7=D2h·9ŒpŒóm>àœI7øòlc’®Õ>=aÏbÖ‘¶óâ—ÞzÇJ–H ¾œe&�zË*I¨¦Â+ Ú³Ä÷¿ïÙë˿ҦmZ©• 2á{D}‘›èž#ߨ)Ó¤‡­u]pyZˆdLºý0bÿíâÍE�ñ´óÖÎ|ûaÎ_ßÔ6Ôí~{"xÙ™ÏÓ­Ï[ᢟ:ßJÕD_k;åýZ±Åþç äiþ•¼0îó–69C!<”Bå×Ca°xÙ…`bþËã!‹:cr¿ùPK;«WÍ€B¤êu÷W D¬…¿/;n›´‚yß}}¨‘cúâë#Øì!h陇ï‰;Ÿ‹ lšÔÑá'¼÷ðbN˜{.)5%D¿óË+ŸÝôÁG˜2&tñ½¯JytBÂÔä4ëªCãÏã óú��™i³îýåºýÔ©S‡nooeD™CrRk«*¬”¸²° |ØÝ>Ÿõö/;ãd+kžÖÄb—3BíÂ Æ 1\N m <ž32Ö†¬RÎT{Œaûx”ÿ¾KI$ÇÞßáô’¼®Î‚sŠo‰(ö­;'£{,›-ÄŒø]„UülÃÒ¯ÿùó®Nð²sûÓ#-ë%³l“5J æ·‚N·'jë* ÀsæØîîí\ûrŒ!4"Üál#\â¡�(Ø·Þa9¦ !”HVˆËC[jU¸Ìõ×G©Ò5l#Èá/ð³9„h_ˆïù'îÜþTàõøP˜Z(4ƒ¸¸˜‘�i.aÅæÚX%ž333rß<¨ÔÙcD@ʱ23B“.�:uc|ØžjsË!x¨�C!NDÕ]£Óû¯�43B؃YjÓÒ ^™‹^~!�²y7¿n ‚B„ÐUŠê1,IX¿à0œ|€çŒ#Ü>…«G™°y³¢)ýk�?Ÿë²`”«A¤e#ˆ:_·î MUkTðˆ ÊÌ6»×HPÓ·ƒù�/¿�<ñâ“Mj6éÝÙcu`þéÅM{jSÌç‘Û�ç̸8¯e_90²a¥“éieÅ0B“ž¿qþT{ï Ä´Ý"<†º9#·õÍÝ�uÐñߨã0Œ€C-È!IÙ†ƒ[WMó9^vÏzx¦¸³·Â XÕk„^‡é³·9/½œ(nøb¤–õÜ…H|WÀƒÃm“!LØ”Å1âìd•UëTNvÙ�]-¡&àûiaJ$Ë©{ŒðÍ‹)ðŒ–ûëêÕé<ÿ¨áFØÛN>ü¶ú'øð½OÀËβ{W‹¸G­‚ þjÄuvrqQý¡û‰æðNNÏGïyÁGUì­ r '£FÔ��ÌP1„ ‡¾ÍÛz#Ä,@ž°ÝÜqÐ95YS‚K|‡©òË#Z=kàØ÷~ dñúM9E–•ó&ÔÎFü/‘˜úÞü ü.¶ÜŸ$–{+L ±`MüÃ}ò{¥ýð#>þÓy9xÙ‘yËϵT'¶x½-§yy 6fñÑe+f½Wí$Pþü…Ø‚sÚó½7Ï"hnlDssÏ?yoq¢+\Q@#ø¶äÂïsÖŠÁFLœyÛëW¹‰ƒç‰¼_þÚÞwÇÉD1Zíî†Ø% °‹ºpbu7Qû)!FÖ<ÿ`âº>׆®t«®†}rÓ§ Œpëe’W‡8O`R¬^ „w»9 ŒÐjí ‰O¦µÝ-:ÖŠ­Ç� ,´�w·±À�¥™Çêܧ;Ížàc#!„°Às&/#CÔÖ&bÕZî66K#Ä~D(†yy¡u"jd‹‚_'7ß4‘蘥,(' ”œ“Çð1/;‚"N.òû†â]]²LœOáö¸NɹüBH!øs"¶¶µTT:Æñù>6ÇO¼û.ß›Àû÷ï—Ày€ë2!ï"¶æ{wvò�˜(¶Æã2´¾¡#g€—�6›˜Ð4/"¾(úpw·6bѧ�Þmӧ߀B$ÿ !+óø™cºdØê }¼km„M܉ý‹-Ú?NQ'…·)L ±„ß—Ÿ¯;PÌ|w‘µ‰Å| ,³;çä4x¢ïÛ/‘Ãk^óš×¼æ5¯yÍk^óš×¼æ5¯yÍk^óš×¼æ5¯yÍkþÙ�úÿº¡,Ÿžus!ëéIEND®B`‚pydantic-pydantic-e28e879/docs/logos/apple_logo.png000066400000000000000000000142011526274674700224370ustar00rootroot00000000000000‰PNG  IHDR��V " �PLTEªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªM™'A*tRNSûð Õà;.÷(aôêÃsÛ$°4{jæ¨C¡™¼QJÊXÏƒŠ¶”�íûä'…IDATxÚìÝkrÚ0…aIøÆC1”Kp€³ÿ6ÓÉt¦I›´XŽõã}Öpfd}Ù D6J§ÇbÑ^Ÿ¬Bamº>íãù*çN7Ò‰@$Óc½ÛW£ÜéÕcd€ÁE³C»ªFN¿¹$”M²Åãx¤÷N©”lëýÄé�Îß 0”$k/�ÓßTK "žmV�Ó&3 9^ǹ$Ò‰Ð,‹K©OM¦øZñ´>ÍõÊ­¾RœÝ*'‘NÇf׉$Ò‰àÄ?³I:»þ¯lJÍÚ_bÙVzƒŠ‚�nÎN¤Šû\"���~/u‡1}vô-YŒõ f”0»½äºÏó�èUZ7º×ŠÙxôÈn/NwÛ±W„þ$u£žÙÉD_ìz•«‹…ú•ºÙ ém¤nFôÀf§Ž&™ü³oOuZEER—êî�r'ü[îruÀ3JèÏz//jÊ�ðÌnOòÂð*~ªô¶Š0œhSÊ“3³Çð*ªGzƒ %„Ág8uåR�’ç¹¼™s)‚GÉ-—?%}Lø ç\�èc›¨�˧ï±¼½pŒ×x1’W µxxb‹Fð7ôè8‘gW>;áÇú¬_APf{ùVñt'¼HwN¯h²#,q›Ë7· ÉlQêÖ1„l,½à`Çöîn=mÀ0q %!„ 0ÐŒÝÿ®Ý_ÇÚm¶@ß{Àè±°$+öÌZyFb‡AÉ““$v˜�cùŠÄsî2QàXïé\4Ô|[ÞúM.ÆÎcÜÒ~%â‡àiÑŠŠŠÁÀWÔ8ÑàØŸowCyÅx,ys_ç¹ÌXæ¢b²ï~F™¼¢OKúOò+ÔÀ�ýDt´¼Å„Õ+Q¾¤œOãRΰ= f,*Ñ‘3v OÑÔÉw�0¦è䫽`IôY~àè„1£Zt”ÌÄÃìÑI­f�N¦Žá+:Š’5vX=:Ùv _Q#JNÌuÂӢτauè¸dü¾ÒVtÌ©&Á×.C®Dð•lD…ûL^‡¯û¡¨¨h°Ã[#*&»à)=ˆw¤Ô o»R4´,N‚·þV4 Ù¯E- ò†¼K' ÖÔáá/™‹‚Ž•s`´’ðV“ÂÔ‰:aQ_#±o˜‡‡Õ¡ø¶èŒ�„–ñÅAm%´ �0FÚI`%+½È>–°ò7"žszD$YKXsŽÊ¢¡–›ÿí¬x½«mL‚E‚V¥Á «F‚Ví�„Òœk*�¸9¥$ôz&/Eù–×Á¬ßJå‘ö%B[dÂdšô€æ¶{eŒÌás}ÌŠ�Ð0où†Ë:~²UPZ5Ì㌙/h¹ÃŽwëÐÑ߈—rC¿±²A©ž’Õ¡&iåråã' IÐ3èäbÆö4 j¹P9çàÄ3Ñé²%'”͆r‰ÕWuxPÜ+¯÷Ì|à ÑYVcÊHxÇí£3?,܆àA-:ÝaZ›¸’bõ_9�ØÄ¥µ|T<“ÓáA­ÞéêÍŽ»®k�ÉÄUsO ×–Tò/qwÚ¥¤t\_ò(ãâÃöaFhƒÎô±¶ÇÝŒÉwÜJt’wÅuõ4¾pjâ–¦r.�Wu»mv£”C·¶o]×ÕÙóOõ¸Þ§w� úé¬(ŠûÑóÏb�ô#r9¾°wˆmÃ0@Ejg§,™÷?`GÚ¦#Í”-(üï †A)XÓ5Ã,ŠÌ}P…ihh Àº˜nøÎ©®®ý[Vj?°¬ó.ï¯UUû®, t ¶‰ifá—¥Ó¾sÊ2+´�ü”†Û—6¶ì�‹§qþ­ïŽó99u.¦L6‚i¦_îëqèóÝñlÛ¶ú ²Óoýò¹"Þ.7².&KõÄ+qOµví%p2œÆ4ÃÝ'—6¶£g~[FvÜ�Ai�›¸dš[KåâÂÈjÇÀ5ÿñ¤Å´r_õÇ4ââuTûØ×BÃm¬8T¹¥Š m ŸÃÌ2viÈÅqõÜ&…Ë>šôG•‹%xv|Ýûä1îqä‰÷âj<«þ–Ì(«ÜöÄ’B«MJ¤ÐU1ÍIr;¦m½Ò½ftÕ®áby^3%2èZŒn\îwåö”Ü?@�nŒ#q3ÜÞ%%ª¤û3Êj§ŠEñ&OÜ;¨VVS$nŒÛ-nÑß—î×yÄÅò¸ÝÖþ]’�î×mÃÅ=xÖ+üÝÝlyâVo@ïZUÜ·®Ž¶\-ÇÅúš¡D|.Kw†H¬#ZâÕM–Õ“*ˆ°/™‹aîµkxìêÛ“\I¤M|+é²Ê+‹òÀgïÝm&;2ió'ïÑŸ_‚QŸÜš;ƒ½}¶o?¤”Òæ/j�í燱.ê.quå ô²ŠÉ¥Í_ÒËûÇø×FÂíöä³×®èAÞ�L›?yøþöGh‰EýÜö{¹F?õ¤ ¡§5ø÷{1w ¹,zÖ|Ê´gôì4[žØŽôùÞÄi ²Â´­“=5êîÔ}Jf«ü2;Áwj>Oâ|û¤sM�=Þpê‚!&µQ~…°Å·¸ßH?Nœ^Ðm籂 ºô“Òßj>á¸ÇèÒ[c$6„{ž·É¸ü!ª°º¿s¦-ÿÖäõ¾Û/‡>«#j÷W1GêåЧ”ž°ù|™›o£Søé4 æB^ÀG믨�ž¥©€µðçšÏ0ªM5’>Þ¢tÿ/sÆ–seÎ�þÃoÑå\]ì(ð„-x ŽÏ'”± žÿ`zsƲBxþí€NÇR�ßp²NÉ„ÆÒ#†à$á‰ÌIX‹S£:'9|Æ™;‚“,oÄÄÒWZI$©5Æ‘Mx¢šƒ"»l@ÔYö¶§Ùãl�®©Pd¦]œ„ñYæÊH¯6ô¢‹ŒÂDÞʈ¸|IœÝ)²:¬þÞ6¼$–õHÓÅíKúø çÖÓlÐ'gS^¿ \ß„TÆYdTD[‘Ë7®ä`~+ÎÒ%Ïb'`ÔÞ‘íõ/gDqä›ó#ò뽓SæÚæfÉfréügâ9)R—W´šˆ˜ÎK§œ(ÖpY(r¢HýIÁ\¯P红TÎõÿª¯š<òu��¹:Þåæ±3Ùú£PÊà­&Ï¡«ƒáÛôv¼ÓÁl,%:ºq°Rštò cÏã—ÈS|®…_"Oñ©¦]®`P|0…sß~­kÂxˆÿVÍÏÅÙht;,j¸uú(Ê%a·Ú-Vÿ³pTík¼«œóž”ª7+œüxªÉ¢8ébâÚ¦·W×éÚ™jm4ÍÙ­×Î4>1­ÙˆõSéÜŇkg˜ß¦pûd�uаaw*_ìWwæ'…yÔNd0b¬½ƒýâS¯p–©²ã‹j%)Êâ`¿HвøÅ”åêËØýÅÚÍ gÛiM’�ƒýêEReüRP>j}_8X¡•Å{RÃó®&É—�"=E©z®� ÷&(E¹všÈkçÚyU­j’¼šíe¬lªÞJRäA)•ñI†Ôä’©Éõh¸—¥X I‘^öXz…Í•�¥@©©š�krô5¼5T{Õ�I”ÏYÞškh€’U0±L‹oºýSÄ/{Ó³vá(o”æÖ²GÙ®–*ã“Øcþ\.¹[¶¾Š’¨Ÿ�¹¦Á4M|%ñU$:s�ì4D)Ö“�Ì&Ë`¢ˆNÑ™Kt¶èf�24X¶ÉxÄ(æÏ‰Î\:2Eg.Ñ):s‰Nљ˺–CM/J-šÞ¢ˆÎ[£ˆNÑ™KtŠÎ\£eAt†Rß):ÿ²w'ÈiAE%…‚HŽÂb8<÷? q•øªÿ;Ô4Ó+—§ÓÓÉåòëoÜi€b×›¹".ûÙ=�`m!O'Õµ�§“êà”/O'–+7ž�“Hlݰ'“kâ¸O'–É"O'—É"'Õp¹MË)_`n"|²tÕËnXÈé²P.,òtr­­ŽØ»ž�ÅG»a¸¬¡{2Ÿ$¡\}õ^NI(>‹FoI(îÀvÇ0—Ï¢‡Á.‰Åæ�ÞÐ1_4®hï•gí0^<{å_í0«c¡Î{�„Rµ–)ÝM´ÓxñìÍVI,öõæ&Úi¦ÔkLe⼚jïŒ6I06µß �à‰c2ó®tcÏÙ˜R§5Y„ãB»¥Oœ•¿öÎÞ€'�]í�ù4‰æÔúÒØYÄc@¾3¶:è`®Ýúc,‡.8þ˜Ë2:‡$‚™Ít”W½,䰪ݨ�ã@ ¶ûBÖÐQYåùeèža¤©ë7Ü»�U]üxÚ4Œ51"3³„É�§�o\~Ú¡>üxÚZ„å³ýÆI_T¯ÒÙ¼�µu�Ój¸6vgŽ]m@e©RQšËIJÿ­h“ ªsø¨’È\Óð#ŸE`áFã_IT‹ßÁàì&[GÏYâIýß~4[ýßþÓaJdÓØp®f{ ={¡¼xñ$«>B+Ù[ÄöcùêioÜ$rXÉ2%ºÿ�¯ž¥ñx¸*r�¼Ýtuà¨çl›Ä¶}{<›Ipë°Ay÷efàvs»… ØDíã°m8Õ!h¹Ò‹Ï Tט»FODÎS�ý²ã¯=p´=gQs�´* üÁþ¡ËYì|E:i’ÏX¨1áûº,’ÏT±Jxå GžBöuÞê\d¨ˆØÿÙrÖ ?§‰Øª¤"à æ}sŽgæçáÂÆ‘’ÏÍd›ðá�Õ ¹ùksÒ—vœáÈKèι[m6&f¥8…¯a’Uʉø´V ²ñãè ]ò’È&Ý:Ы”‹I„S×ßÓ¦Wé'{÷Ú¬& „˜$€rG„rQÌÿÿ�µÓËL§=U.�µ}Ÿç|u†è&›Ý…Šÿ»™#ÒPÖù o€#Á��MúƒpTÿÛ�ø5¨C^ŽDŸ0îˆí«û§z=ã¡”n Ü} IÏ jŽQ B×öÊÁ�œ‹„Á0ücÌGl m˜Ï`øÂ? Fõb;U(ˆGl' W˜ˆít!®¿ÂANþ%ˆë«hÑ¡¹<ޏþ½Ç}û ××q@“ÑSˆë«©QK÷ta®ÃèÛ•#®£Nžª=âú …%a)"Ãy}ajâs8·’M.a´fo%,A´ „¨q}½DZigô¹¡E“* ˆÇ•Y¼CÿúHFêJPꆹ4£mð~lµ¬BƒÑŽH+© ¨i%²N(þ@%2U¸$šê€j%UB\áF“*~E2i2–aë©DŒ°cëIÕÇØzR%|$“°õ$Š£2i6ÈzÎívÐ`&ú[Ol:ÉBǬBl:5 £¿hBÙÜÜ´#ÓI’ò³Ùáz}v:Þ7 ïü'#zj:•ð08q:÷Š4¼â9‰a˜Ù=ÕÝë¿ÀÁ�Ü©dtè!žÀÂh¥LŒ¯/ÄœNÅ´¸�¤8®ÿj‘×çÞѬžƒ´ç¼Äâü„¬ŠŸPúñÈÊ�‚bø·ƒå9Ô YøåÔ¨öÄâ$‹µXžXœdaybqÆê½$ƒ»Bˆð'!—Еçò�£Öù–÷iæ7¶í¾ól»ö³®Ï«ËÇú«”ÇXœ/úwNîb»;¥­í$:Ó>ÁÌÄ)ük~¶\9òœÿ„ãN®ÁýØõYãéÚkØæØ¦ñVÈ5¸%ª�×âTra\ìúìhÚ0LOš.þpåÂD‡ëËõò%8ßÇ‘½aÚH¦ãŸ.®\ÐG†ª¤5™×@.ÃÝç¾chÓ°C]^¹�m�zÎuéQ(ÕãVî{†6–ø'‹Kõx…6�Õ±v+UêÌ" 'ª„T,(Q÷A³+©ßö…©ÍmÓ”{.²"l9iHz! «Ìcš ̉vB*Âw¶œTèÙ^*À­²6Õ=e¶ióPª zDuJì˜Ë™¹çîhhjéE?€ççó9iÙ¤–œSxómÌIÏÁ¼ŸüŽ‹urXqsg é�©-„%Ù-”sqo ~8)ÚD{9‡``HŸÎlÊyR üá^�(v,C9c?Ñg»éžï;uÂŒ&rw{/Lm,is‹OZ›÷#ÒH´™mÈqøGœy†¶ÝîÎbô÷ª;bÃI߯�Řˆ^uöêåf,W%V‘‡ßÍ÷`ÖCcd¸»6�—ymyC>¾¸”Íêß+#Ó—c¤kU•¥ù�‘Ô]µ¯.Íö€�þfXRßw!Ú„q>eGRKóf:þ5Þ†�üœ+öqWci¾'–i¼®ü„—¸Ïì„ðÃ5½Â¿çÕÅ�Ëäpƒ¯½ eT8èïŒéN“õ·ó>tù�ÖóÐÚ>mÚžNï7ó7Ì0=»i³èz½Þóøôø—fmcÞáÃÃ+Ï÷Pøiןî]ê×ÇÄ|»gËŒ]×ßí£À—öà@@�¿õ WûqŸ2í<‰IEND®B`‚pydantic-pydantic-e28e879/docs/logos/asml_logo.png000066400000000000000000000151671526274674700223060ustar00rootroot00000000000000‰PNG  IHDRôôü/¸PLTE#Œ"Œ#Œ#Œ#Œ#Œ#Œ#Œ#Œ"� !�#Œ#Œ#� "Ž "�#Œ"Œ"� !• #� "�#Œ#Œ"Œ#Œ $Š#‹#Œ#Œ#Š "Œ !‘#‹#‹ !Œ !� �#�#Œ#‹"‹!Ž"Š �#�"�"Œ#Œ#Œ$Š#�#Š%ˆ"Œ#Œ!‹#‰#‹#Œ#�"‹ !�$‹#‰"�#Œ"�"Œ"Ž#�#Œ ” �"�"Š�$‹"Œ ˜ !Œ "�"Ž!Œ"Œ"Œ#�Š$Š#�"‹ – !“"Œ%‡ ” ¡$Š%Œ ˜ › ® ¡ °$ˆ$‡!• ™$‰ ˜ • 'ˆ § ¥$†!‘ �#� œ )†"�"� – ˜'„   (… � › œ¹ ¥º •&† �“'„ ¥ š Š$Š �'€ † ¦ œ ¯#ˆ%ƒ,w0w)#Œ#�"Œ#‹$Œ$Š"�%�$ˆ$‹#‰"‹"Ž$‡$Œ%…$‹%‰!�&‚!‘)†)w…õ�štRNSÊS�a# ñú‘`ýô{™ž”;áÖÒd5ݯ?1yPL%¶¨¢Y/ïê¥ìÈiG,'ö¿�s8çÍ«nUJäØÅ²Švk\B*…}oWDÚ»‚¸ˆ‡oßÎNÔ̹Ÿi^»ªW71ñå῱”Ž�O õœFùòʼn�d^G?/+$Íȇ„|wcSíÏ´”ŽZ<øêùèÕZO²yIDATxÚìÁ�€ ý©©`öà^… 0èµÈo~"e10èNJdQФ0( &Oõ¹Yn6Ife1ÝÎ9À_Õ'½þ¶»ÙŒ»ñ ½¯EdÙ>^�ós!|<Â-¼U—¹Óh}˜FdMkјuBîi¾;Ïš¥zDFäwÅU5ü’†gR¹\ãrÄ‹¹;‹ªŠã8þÍš¡a�MYEÈ@E-LÉ3I³2Ú÷²}ß,ëiß—§Ï¹çÞ;;Ì`ý‹)HÝ{¶¹>Ïyý Ï}îð>çÌÜe.‘ˆíؤlG;EªsdTq¿èů›Ô›ð'Ž«½®)xZí/u¼�än•okÇ ]3@C’¢S;óœMž—Üz¨Š”õCÍ=¤à%õ*Û‚Ü1ºV¶ûYh˜£ˆÜ=�Ìä 8»Žv‘¢(ÉÞF ¶øj[ ¹jÈÝ@×ʶ,tÔG”üN×…9GqìUíePáÆ«Hª{É� ·™ä®‡À5�þzü#�[/¢2 ¤äž…’ÂIuB CÊòèÓqhñPŮϔ Ð`¾à<Å9”,Ï*ì6‡¢1Ë£7qhñÏR…z[*Åï$%o9PŒþ’8àC‘“ÝÑ%hò+Ù•'E4’’Um$ñ’zô»£Ïd¡É c‡þÈ!5ݤâ0T±ÛI¢ß…ªÛìŽ>êB—ßH†6åÊ ÑH&HAʼïHb ‡"·fÈæèC5%h;Dfî(#:ƒ¤à”yoo'¡O=Êb6Go3hîL�‘Å¢# Œy’±¼ÚmŽÞoÒa˜L4>SD„ÆIÁ!¨ó&¡ÊؼÍÑ¿…œ üžgˆÐ R0S†ºQjõ¡¬øµÅÑ/ÀÈYÒwŸ‡HÝJ |¨Û9M‰8Ô]úÑâèGK0qŠ´5å¡Á<ºùìÄòø:uþ¢ÅÑ¿ó`$Aºž]�)óèU5ÐP|‘>_†ºüýöF¿µìÃÈqÒôÈ2Ä8‡€aô\¨c[I`± É”µÑgJ0sšôt¿Z@˜B&SX‹Î<�p£‰Þ¥½4Lá¶Çè³6zfv‘ž“ AÜ,’Í‹çgïèìºØ‹ÅÆÇÚ?~pÿÄéæd4Ñç9´üiqšl�ž`%êÔ›è›F—“l¹±=¼g]s £%SIn7ƒÖ#Xt¬ôÚ½ÆFHÇl0�ï\h«%‰¦êëâ§7pèX~“B½‘�·ÇÖèu>L5“ŽÏ2ÿYÕ§Ú¶“’ÄäTÜ1>#÷ü2t”ÏQ˜é×2Ðr‹¥ÑwŠÊõ‘ºñÃUv6Œ‘†DÏVî1£hÍC+‡îØ[ƒÔÒèw£¤î,Ö•jÎt“®ù‡Ë3¸ÊÖì@Ky–BÜä@K锥ÑOú0Æ[H]«ƒ±Læ–Z 7ôáKó) ;ÿ 6ªUYÊ éz Q=îð´�Ñ›˜‹«Ï×A\‘9w�BÕ¶õç>û*A!R{ÓX“�§Hêb‘CÏ(…h†–LX½}"Üc™$U¼Ë¡ÊïS¨ÞŽ8ÜÝ$R{®ØYEROd4£{ÞÓè“ ‡¦&+£Fõ^{̓ȩ:¹„U+sáÉ·î)’èêÈ\ЇIîËtí¡@/kGwÛ¬Œ>åC [÷…8úð4)z «¾ û±h"¹Ÿ.ÏÕ9Br4e')Ðû šØ„�Ñ«\éojÓš#E÷`…_bw€»7A*†ê<�é‡HnºJû(кNÛýŽm£8DJu¤ææaÀÏüö)…hp p�òŽ¿Ã¶@r-Жl¤1èkµ1ú "θlx!5©8�Yy2lH¼î�?Mªß38$7œ….o>pœAk¶1z\ý°ü!í¤¤À¥Y 1UÆ?œQÒpX5I%àB×¥G(ÀIº¼š*û¢·»ª'ºË…Ð1RÒ8‹âû<þu;é8Ä~¿Ó…6¸ÝÑ%èâè³/zƒv–¨bûHÉx¯†­Ý?þÉ(zÛHêô9Atºúò½öEo…Pñe¢FÆ!#Û°t_Ø\¼ôdÑÍM@Lùî‡0Àz¬‹žHBè—n":•ƒÐ�jÑÃOÙî\Á¹zúÜãô?“0àÕYý^¥§èo %�(.ïýa¯{e=ËŠ\ƒ>/`ÉÙÅÇ­‹¾Õ‡ˆ³úÒ”D�7’‚NôR î‚Êýiæ®ó¡/w8`Ar¡¯°h[tÙ áÎ~úÛ !¾‰ܽ“‚�aX·t'EìæÍ0À²©€«„ü#¶Eÿpbãô·éÍòËÏr� ì ®â¦ç(Z=˜Xy‹þãFn²Ñ²èý.„¶ÐªÓ>„’‚¦3¨×ÅñqŠÔ9˜pªé?:ò0ÒdYôƒD /Ъ³Ä”ž|ÛK�86ÚÜGQú²îÁФ#{ƒ]Ñ÷@¬xžV=¡I’ë¤@-6â{Ÿ 580Á½í´A fÊGíŠ~&¡Üƒ´ªÑó`òaÅðq0œ¿˜¢ÈŒÀˆç=I|“†™z»¢_çB„í­¢�ÊBÈ7�´‰T/Öì¾™"òÞ2L0¼DÔÁP‡UÑ» æï£Ë&ÊÛA¦&¬ùËFŠÄý",—câƒPé(™©E ˜çœ‰‘¾QH4ÐD�œ6Z3»Œ`3Ò7�¢=ÑOæ!äì­¢u¸Êœ#CçŠP“Í¢n:ê «~ ûÑZóbA˜ó!Í@¢ÅžèÍs¶ÐUêóâ__5¿xÅKÍg¤clIýQšG°ô­iaâ9i?$â�¶Dï‚„ß±a]p ¶ü™ù(-5÷ÆHÝ6Yt¾'ô€Ô]È'à"¿ŸèCB¼ø³-ÑwsYô6­ÿEV!C›]hY*~� Õs‰<÷ Ñ>Áæ¤Gû§å‡¾(ÿÅÞ}¿EqÄqÿšHQAªt�&éB, DT‚‰†$¢‰Æ˜jzï½<éÉ“þ³ízA’ü‰ ÜÍíwv¹ÛãÉ3¯_eåîÞpÜîìÌ<³Y¢ŸˆÁ�5Mk�Â�=J>Õ x#Âo~GŠpWQM4–„”±pól?¹¢Vîâ›$úp œ*Z«Ã„»ôQòg?¼‹4=èáÚ 7Õú‡äf躹€«ØÎM}œ ´Î« ¸ ¿K>=dÂ;g >/«mDt%¹²ZµÃ‰äÞB¦tÄf¢×l’ès`„i�íŒãäS• Òo=³ñ�UXÍn—ÛB½´j«•ãßW�>†»öMý€Æ¤Ç �ÌèòéãTÞ¥ÿù•8U®BûÜvW÷ÓªÅ$¤¬9º¦YÀUd|sDo��‘µWÇî�¥“ä׋Ëð#üQ¹Ûå ƒôV‰©«´êa¸-£wLtìÙÑëÀ§ 5ì™úKä×—ÿZð!žxá9rõLîÄËtM äŒÃ´¢«rÆ$]óbvSD?FöŽ‘;Ù©!ò«Å†/Æó%äæ .ºUë¾®H']óG„T²^éó¶o†è;*À°ž¤ Ó&©ÏòýÖà ?ÿ¹øž}{ÍuYç(]³Õ„TüZ1†5µ¢K[øEEƹêÉòoþ8 Snµìá´¢r¡C«�-©ÄK´â¼w¡ó›!z;8ÉzÊô5{¦þ~×FªGàËÒ¾� ¬ŠZ±Íí4~¸2 ©åhÅ6Ü93› úp%¡vÊR‚;‘è¡ ¨ðÃùçUÊ¥aîÌð³´¢G ÷ÎVa@*ÞJ+LÃ�s|DoG,P–“`¤~ÛØøcORÕ`˜v ­¨J:�2z]¦@–—ÒŠ/À)ï+~ô9 c‚²Ô—ƒá¼@²7ðáù{HîNpÊJiÕhr÷½›€”Õxc2´ W¶ýUñ£3Ài¥lgÁ°Å´!÷}hZð.Vç{5±FfD%t‰¨M@*ö­ª?.ú³E�>çI< †°¡ šºjÚðnˆ¤¶‚ÓÄ,¾*'ª° •œP¼ IÄg‹}¬Z’è6ÀXzŒ6êΧxWCRçØ“©KÜž&ªÎyð}Ê‹ÏÞUôè[Àš"‰i˜p'RU´a¿�w%$ó¶ wɃ7wV„œq:çÍ7• 7^PîìšbG´Àê!‰*+ wfúwʃ½Í žˆE’iKrÇÝqóKã�2îxÊ€”ÕD׌�–(vôù"Çý›�&Á°_¦¼øñ,V×¾íÄáÍ‚‡7Ï¥ïŠ}—�B©ó”GSpÁ®«~B€³ŸnØž„7=êSÄ€™¢F¿…~Œòé‚Es’ý¡Â`TTÓ Ï†Mxau’‡ÏME�Þf  ÄŸ]”Gg”È^Ö‚Ë(*»n}µé)zrÍLîê$8úŠ}Ð@a™Ö”O�B�UÙç}`5:Ú ßÙ„gÝA7ÕW`X{Š}"†[£|êAÑeØÅG?믗º©a\€ÓZÄèí(´è(åSoŠöP†'ÁítËm<°NÒ-Ç¢àL/zC…�©‹Ä(ÄÙ†wR†s&83tK«/¦é–#pN/ú¤�‚‹¼ByÔ 5KK_R†¹«`8Ûè–®rŒÌ¹/ê#.VMñ¢wÄPpvS^£Ç}Gßb°íô»S²ŸÖ¨5Á‹½…gÆ)Ëì,ùóGÊ„ !öS†ãà¤×½œç nù�÷"5-z+ ƒß�öÞäùòºòk5­wÏ8Î$­qR@Yâ3�Ë^+ZôÛ Àþˆ²œ‚Ѿ‡|ø85# ´^‰V'­±[@Y|Ý“9 Ö�¾bE?Ht+õeÚ bžxò_WžÓNzÓ`ÝGk4<‡ªã¯ z¥HÑwT Ö)it i7ytÔ€¢ó~k†h­§PUCkÝÇþ½HÑ» "u9GtDjw�'mW¡DX³ÞVÅ�*Zë“dø£JÀ2^+Rô‡Šn¿ß•#:p`g©;‚š(žó~ñѦµZâPú‰ÖÚQnƒ{§8ÑÊ #õzÎèH�O “¢‹KPþ™25[`$^”�Ðð²–{í1Á9Rœè[åœ$ú-�-}¤bÖJBQ:û…9ŽØGë5ZPsÁûîŒg‹ýåÀ¢Û‡]£æè¶;‰5•LC‘yµÞû$Ûì/~ùj:h½&p"# ¾£÷�ǘÈ�[t ’6ÞÙN®®Ü±U"ÜA™ZX5´Þ»ËPb,xÞO?‚jßÑç‡J<Ù_O7œFpOdEÏdÆköÞC9쯋$TÅì/ü,)ž¾7ó˜Tû4­×Ç:ÍDÏ£:ºaÁ±š¹è«ÌcO/~1L™ú~³"¶€²åéõó/û.Z¯:ö™�yx�½†nØç 0¶S¯]Øao~êî–]%¥ tMi空}e¶/Äò³”¥æ*8ÎVÊÐ,  z‚2t °n.ú6ºî>¥æFg$Ñ£’èR&`D”�6¶µ.ƒ‰—([¿ÖQÊð²Rôø eØgér¢ÏCÅ\)Ké‚Iêi&zþˆø¿C”­]€5K9P1O&Á›+Bô9(O«S€'^,º¹üIŒFÁÚMzCPÑIÁr.½¾ ¬iâ• °"ÑgƒŠžú†$ÞpL°)Cß�(XFy)eØ^åpàÑ'¡¤žxÍ!ðìÚ€¢GÒ;Hâ=ç¼J²Ä$/ÔF™ª+ÀJv}ˆ¤`@é�ú‹Eÿç¢ßYpÑÔ¥ßË£Lõ•`Y{ƒŽ>\–|åZéÒ‘¼xj(ˆèŽý1IËl¦,¯àm§L ã`÷}T„&HAW9¤¾ "úR?ÉÕ‚÷0e™†‚ÊÒh€Utôn<#ÔI*Ú’à‰ ADœrxÛk€²”¾¿NeeÙâ€Õtô6(5’’‡U¢Gßï*|ôvÊ¥9Žy޲=Ãi–ýŒEÁI½pô;(5¤d*žO<úS”K_9XKP¶Áö e»Çl 8z T„¦HÉ´áËŽn=ìò ðZ(ÛIp–_§l‹¼ê`£„ŠP)©RŠ.^(ltg€rë`{ý¬.owÒË8hô†r(•}¤æ¸ž)..ºˆšóä¢Å¯—²5° Œ“Ä“Pp2Ðèg(µ“¢Cjïïu…‹n~ÐKnæ¡à I4ÅáJ¾œæQ(8hô¨�‘¢Y¨HGÚÿVéžÝ§&¦ºï]\XX¼þ®–žÎ¤iš¦iš¦iš¦iš¦iš¦iš¦iš¦iš¦iš¦iš¦iš¦iš¦iš¦iš¦iš¦iš¦iš¦iš¦iš¦iš¦iš¦iš¦iÿ±@þ¯� ªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªª*íÁ € ÿ¯û*0½áÜHOcIEND®B`‚pydantic-pydantic-e28e879/docs/logos/astrazeneca_logo.png000066400000000000000000000271331526274674700236460ustar00rootroot00000000000000‰PNG  IHDRôôü/¸PLTEçàÉ�›»-*nçâÕ³²ÊsqžîëåMK„{y¤QO‡mk™êçäKI‚ÐÏÞgd—“‘´}|¦_^�;8wŒŠ¯øõæc`“€~§ËÊÛ§¦Â®­Ç¥¤Á-*n™—¸øêªæåë86v«©Ä𙹤¢À´³ËÁÀÔÃÂÕöå—íÊ$41súñÇFC€LJ„GE€VSŠfc•urŸ•”¶ËËÜïÏëÌÿâøóêk¯³Ðpæ¿°±Ü…+<»ëÌàþª ! ó+g’×xÓÏ<P:u&qS¯@ *„�µ®;“´Ù6 †° ¡ rÓ™”5Θ}à†(Û™v&]›çÄ€å0}î€Òo:“¬í% Bîã±\¶àLª¼T&D_bèéQïM9“¦íŽŠ‚ÂW¤e¡'jûeÆP pB…¤÷™ùÌË[9ù#vò¡µ`ß™™€°º‘#Æ3@’egÒ3[Žá}ø«ƒ§Î$gúLbä‘¿B¤«‹Î$fº­‚ñ =|u Húئg’ó�¥œq%9P•|8C„ÁïcgÒò�0¤]¢JˆèÏ™�œIÊ—‘úp‘âÈ Q†‡ÌHeÄù®3)¹ñXc·ŽD@y½ï¦—„Ê'¬þƒß�IÈâNFp�³–¶m‘Œ/�ž8“�3fJÚšw…f�a,[šq&�eæ8ë à Ö¢�{×¾ "…ëHzë‘3©ØêkhäAÌÜ›íèÅÓùj¡'c¾§eªNè^Ó•¦ÎÐ_ôè«ítIÅfK cò2�¾Ó Ýùõ†3I¸û4ãx+Gô™¿pc XÍÑ!êܼ3IxÆŒ{ OBæÑb„øFF÷�IÁK|xJ>Z–î±û˶0P\É} = Gs‚èÄ¢¨�#‰í‘ú?�©¿;]�ãvô%êÜš»äøqF7ºðÐBOÀlGª‡hä³ÕÑwÙb+?RçÜB¯¿©¶FDHÚ?uç$D_Zè x;T„ˆd¸àþqÎpá¹35·ÞSB¢¸¹¿åþuXîeÄègêmcUãÀ<|ãüY£1ë&ÝVŒûÙä¶3µ6½äã$Œëd€òî¯_K'ï×�?º¿le×Ã"ª…^sË"€T€813•œ{«çíwk›®ô>—PŠÒB¯¹µ¾ ^|âfæQ÷éÉ»³ w¿/ñßxDëÞëíÆŠ¢GÅ¡Œ§¾(‰ä£[íµ7#�u,ô𛹥P@ %‰/Y"�Y2åá$T´î½Ö–Y*,È{s¹2Âe\]"´Ðëm½¯ˆñFž½|ÓÌ–¾œì‘r9ÿ„ãû=ùs__mßj}=ZU‚¸;9k=¸ÖRÐ'�ÜÇÝPáj¾&"@õygÞÞFQWíj@DEæœÛefYó7ûõ{=DBˆ{0Ö§Qçæ¢å^G§C�ñ³µ¬5ï³ne¨ ç5owEË=$Žë³2ŽnÙFÆÚÙXQªv!³™{§¹ ÆoŠ[|×é«TÓ¯¾f¬_@ÑÁÜáîgjdê0cŒ“¯ìÛypm'c=p•™û‡s Võ!`Íò½{û¶¾>ösŽ�²½y­U†M7Öhž¬¢Uõ1ÎØ±JÞm¯Û«)êa¦+Õš7VŸyÔø$$±©G‹ O‡"ÄP?”%(‰`gwÓ™«ï•r¼=sö8dÝ©äMwÉìÑáJNe}o‚ ‘—ºŸ·�¹âîÌiµ¤9[‰™GËÊrà&5¼u Ýx,<÷Ê^Esŵ�B­+amìé ?r“Žóñ9Àª’Dûû•ÖìWíV‹v>a¨Ú™ù'ôø+„ ¬º²`;ׯ®?ì]xEÞÓÄ †H4Ä(Íš�`ŠRM� EEì 6Q@lذ÷Þ{ï½v?õ¼d¶ïÞî^Ëyé„€Î{»—+{ Û§~þ!{¹»eofÿyuÞÌQAG´H7Ø¥3ç"jïmûÊܵ‘·{ 0U Àh¿ýìÿ—¹ýSqæFÞÜ 9·¿½'/Ý0)^9ìÉ�G;ΛK1Yž±1X%ñ?þ‰p+q¸"9ÙRĉ<Ï_äˆ ×Óz)¤và kza¿`øÁô¬iæFÛÞÖþ2ó?þ�Ƚ¨ ·øåÛ'&9ál‰o>5.°ÿ„Š�׵緶¹m²9Xu“R×ñÌÿøça�/9ˆµ8é G2ýO§ØŽŒÍ«;¾ä`n7Êbr(º{¸Ç`x‡9ÔóP6yáÿ º öø„ú6¤øº­s[âƒuÇM|˜ÖGàî½X¯ÄáK¸Q¸µ=øÿ%tÿDÀ\ ºîkK’fi×JRìÎ�Ykys¢�kÿ,\ ?Ÿ—¬ 8ø¿ph;òQÿâüýÚ8ÐïÜ7'&=åIÚsR4éY9¼(O`ð±7àŽÑáýƒÍØmÉÿ3®ÿ@ì½F·Œ“ÖœÊ$Á±-\Ì.�YoHæ~М•®›ôF „£M·f߸ ßüÿ5�ÿDœE³ÕnR×9“’¹ø<ßþL”M¿¥ H§ê=fëïœ'{93 s…LóÃÿWNþ#á8u ë™xi¿Ssï{²ÄGï.óÄöüžwÅ Ž+x³\øFîyîÛÔËZ¾ÛåÃ?Üe—æ�"»"ó'á£wJ�¿fþÕ8é3¨�£J¼ý¢Ä)šãzùè¸;Ìùsº¥à¤X;¶ ·œ9ž¿duJ?r–Ïår9]ZµƒùC7¡®³tGæOÂÖ24 á„Gø�¼â²ocþå8øœ=%tüÆsùÛŽG$jô¯ë'½�CõÎß;vÖðázxë+½¤4Þû ±N¸¯¤õô?¢ªŠó+Uø§’†ÿÅð��ÿý¤Ó$Ì9yšH—¤£.ÉM`Ö�¦¬_48Št Ž;$†óù|X¯[.ÝZˆzÍ…¤+äæ÷ã´_|ëTþTÒ�È6üâ_³Þù/H:Ò~­”�šæÃèøó�”xþ–œðbe ä¹K¢Ã€ù<Äla?÷ ڗ©ô†Â�V—Íünlë¥cçO%©uö3�?pöñMÏ‚t:}vH/¿�ãù®ÃíAû%Pýé`KÒ1˾á¬(çýù#yÓî²ñÒÛLJŒKzØ`ñ ½•Ðk°®z7Ù�6çØP§[é«ÿ ›Æ]ouQ%ÏK'OÜÖŽåè;· ë�òfnæè¬~Ÿà�v Åܬ‹6%^Ú8‰I‰ËT‘Þ<¥ÀŠ?JúŸ(é··K2ü´Ër¯ƒAvßÊügpÉÙ]mÇ·ßt|üb¥OyJûüãsrW¯‘P…K‡‡}î÷�Õ?ß^šÈ¤ÄèûU'… ¼«e%„tÊ�þwàêFªÞx:óßÁ§žÝ.�Ž¿%®ôå‚O%J{×Ù·Ì7¿•qCoxYÄ3]¼¹…0NµYñÿ“M¬›Þ=A])‹þ�¤;ÿDIOp¨`ѵPóŸBÎqgsG÷8ÓžsËÏ<,f± ¬Ú¬ê¹½ {p@Šö°’4SePºEÿ/~‘ÚÈÀ½HÒ�hÓÿz”<¾¹Ô ©gþkØcâ¾�Ô©ƒc&Ünápª%ZêÅd}Ö©ÔÃëѤ³ºg§[õ06ÈR²}3æìÆRòÕÊQ¿›ô>B/¤ÌüHÏdˆm,Û™ùïáÄc÷ã%{øvîF‰³Xm; ¸I—ÿŒ«×±`~ÌTÇ–vRµ€€?D–æ.ÓÎ’«˜¤VüuaùÒò‚ü¹¯d%ˆÓ{ˆ‹^`àE}“O{péS_|ñå;g^¸;¼SÇÓhL0B/(·+>U>ûŒm˜Ô6vÛ¹Û¾2>•™]ømÝ’üŠ<&VWä—?ðÔK g�OÖÑ— —\ —*\wBNÚ�‡Î¥I:^ê=$Æ´_:œxŽ£‰zÊjÖÄÚ¸pe\ þ ¼óÜ0i�פ«ž)Ì¡¬ 7²z(“ã‹Íôýþ`0äöUžyë€ #FŒ(ª÷³ é¥ô à Ì&½øÜ‹/ÒßÜð]žýæÂÚ~ ’;öž¡`Ðãtz:ýAoÙ•ÅyL&8Ïïsº ÑWÛTÀy5e´y ¿¿gÀ1gÄ’|ßµ×^{ßµØAǸ¦º™=!¨uf]Ó¨„Kûš0¦ÔïïôxhëBß™D«”Ì™ÖH?³³³“Þ�ÐÌi/]kÏ„4̪ Ñ+9=ž ?Ø:¤ðô,&5^¿¥«�Ò¾ç3'E÷îÜ£zù– ]MkÎIàµa1,̤%î‘ôÂSÄ T«ëóJ˜U^ Ÿ„ê÷ѳ+EA!ëÅÝ¡iJèÊâþØÊ%ÊVêL†'¬[xgû�DEe¯}QlN)óˆB‡P£{‚¬Ê àBÊ¢[ ªÛóÈ ²ÿ£ku º»Þfª¦ùY�UðŠ‚›(J_AÔ0ÚfÚ¦_(†)ãVt³"KÚ'úØwóvÊOií *«ˆ²KîP詞eS;v~n†LŠ[ ýìPÜ„rã)ãâ!‹L»Ð!N”Š�2Ä ¢3.ÖðÖçZ¤Ë¢ 9G ÿlÈ$}%]fw£¤gÚ­k0ÀäE bD«O1/Eï—ùŸŸ\3žIƒ¡Ó±)²6&'Ni- YW”­ë¹ˆ>¤8Bú�¨ªöÎ> Ó0ÏGœ_c|0g†F\æµäpãüõ6Å|ÆQñ4Á-2þE´/EËgaȬŽZ×r >ïiÝ‘»Öö‚i_{g|BÞqçüf¾š=~ÃQw2éq€W¥<¸½ ¯Ò*ªêz{kÖy}‚":ÖØ¼ÙGÜfRT ,.1I7¤Ö\Ê»&�…ËSÒW_&û8'Lú¡~ΕÝ:‘—j(2¼Éú†ŒeRãÂÂGh¥q*iÜ,Vs9Ý%+¾Þh·z®ŸôíÜpãßƬt¢#ÉñІëÐX¯¡Æ´‡È®€�•±Ãäžì8ahô¸ˆ`¨¢ÂvCÀÎëþAƒû9ÿ€ðA2ëc]¢a˜ãRW¦ç¤uä/9šk“¤®+îŽuôh¢žCÍní=^ºÌók3Zµz¨&ÑUCá®õ`J-4Ò–§õ` ‹DðÏxüñõ š‚wŒ�i¹–¤Ë &ðoÖMú^Û ¾,@Âï#é‚È�›È –/¹rÉò²êvR(ƘԞ`±ŸÀØÒBq}ô]€!¥)Ýu,Y^Õ*h¨­Eý¤+ðñïdÏñk˜Â¥ Ó8ÄÓÄDð ¨BëØ@pýò%,šÑI gV]#u Þ Yº•TX=é 0"U÷¥Yù, —RÁyÐÑ1Ý.Ò�Ú…¤Ë~¢¿ž£¦ýúãLû©GñRKTT>ÒTÞá{dTó°^ÉtÓe¿W—AO•Ç;ž›|À¹"×6�Újòäq㊪CÀ�Ëé é8!žÃl”¤;…wòÞÓÚ{Q!ÛÑ7Vµ.è¹³zä8SN§T;13˜fªï„H+:bY¦‹ð:™qÊÃ@ן0|ž›ŸÆCc£%ÝýÝìJƒ6�Ùã3»¯õGä\`ikE=t3¶nèä‘Wöh2í–[)ˆv({ÐqÂÎhZeº¿[UŒT'¶/ßò™‚8FU¸ú£Š¶ë`¡£¬'“ÄÒêg6ò”ö£&Z.ù¤Cš­¯ÙnîŸ^Á<']x'“¦`ì£zMMÙäaÓËFÇu:¼Ì*…ýæ6kÊ/òp�ZGÇÖÕ€ÃÅÆ[Úqc rØ&\œ6ÒÁ㣜§Äâ8°0^¤×y±Êd}£J@�¢¿ÇÄb¥¦€�wè™’t£¨#éèÐSi}<6ióJ© ­Ôæ�ˆÞA)tXÑêmN¯Ah’œs£�ƨu•Í ¯¯qb´»ä&åuË"GÆ{‰>³¦}Ï·Ðk7¿ÚŽœ˜•yUÛ¬í†Ü±´_`¦ê´÷")Ši hEm°Åˉ¦Ví’n†rFÙ LzÜWÊ‚0…’¨½ì…XÓÆõ1ož‚"áA{tBD˜Y¨Ê±HÇ £û ÛD£¬õ@xr ëB*mžEÞLtZXÓ¢� ±}Øoëè´¶újQ³ñ&c<ÙŽËÐQÄ1ÿvÛyî¦]·¤ª spQ1šc…ÖA£/‹Ê¥ p©Ø}êÌHG�ªzÏËh‡­*L±óë$]ípQh¶I¡ÓÐU[íë Rª:8ÒRï8¦GØÎªDëœ îuU@¦m ƒ UÈ©i¦®^áƒp�”o[Œ’VîJß5ï=öHßlmi)õf`¿™*}¨´ÉǘAúúìÈÝë„Æ°Þè»·B¥'QP’ÉÔjÒµ&#<¤»ý‰m]‘�^ݹ¿� mò˜»ÔM @î$p„IǬN™]—»eêðy†ƒéBÝÁ3Ô•u²¨òÀ,—é. ý2æ÷`Ø/`ÔïÜL—¬åyL³[!Aì[¤Ÿ»‹Ùì¼À–wÝyˆêq�¾ë·*˜çbïI”7LoÓ�sÒ½šÉOaŒªO˜<ì6\ðb�­#CÀ½”&ÆŽ§±›a<€z?5Á�Z!vÐ¡Ñ w¢©¢X2/Aoœ š±#8ƆÚ]ÄDÞ–ãÚÇT�P†¤Ÿz½•‚Ã<„÷9çf‹0ÅéB¼£¢e† @k£ôû5^L{v¨µûÝrõŽŽœoZ†ŽÆ•8Å_�H#Öù\(¨Õ6:®í ƒË'jUH�€àþ’°÷Ά^blxÏ-P§ÞÃá^¬ \™ÈÇÚrŲgp}"˜Æß¹R`üã:Ä’™‘žsx{›•kµÊœ­@]â�ÞÒý&².  +³¬¥KÏ´Îó¢ä¨Öp„@°n8d»¶˜t׿9LfX C$1é7 ˜½ôU®²ë}}Ë¥oÍØ±Ê Š”ô�nªwøscÃîP,zòioúp˜^•°„Ô Ž¤ì\Lÿ|~vÀï«âpü`’þq&ÅчIáITÓŒ#ý çO>6ý,ªÝÇ÷SŸ[<À,û½Ž¨Ä‡NDY"­CêGÌ�”ô„êÝÉ+Ò96ãw|µhÝýèSç/dl˜ ªNL606Ìî§>°éÐ�vˆÇº ~sï\$ú±×> HwÓ·d }_¦2Y±Îv­�^ºQ•á´E´cÛ�vÇ¤Ú–à‚¼a;¾Ú°î£Û6�¯ÓáÏ€ôKŽ”6`˜4ãÁLÁ6s½¿c)r¾Ðó ÇÞ\´›¯1Úm«ÑU p�w}³³oÞ¢òŠ“Øt6�M×§V$§û´Ù…OUWÕîvw«7(ÈIHÛ£ãü9"�¡¸Õš?ñ÷xm�±Ù2[�6bƒ$¤»œ(éÃÞÍé¯ =AÃOu95ï¿€!ëÓ‡2™aèªkf—?0kÈ€ÝZiG=,N°Ó’~Ò9íR‹¥Õ­r(Üù›ƒÒ©“ÙÒÍ&/ƒ0E&³^Ü? /®ô* Ê�ÛFÇÇ‹‰&;-¸b¨þÐŒéû�ÏHÒ��490I¹Òƒ‹xiqŠÏ§ J€°æ4¸`'}üz~¶Ó_vçÝœùf ð@½P€oe89“˜tA~š&jÀƒAÇUaÑ�‚y­ÚÁÌk} –�ß–™³>²¦ª4ô»6D`5âÍw¦#ýàµo~±vÿ† (ìRË…Í| ­ž|œ¯- Ò´ˆê•ðŸb{Œ{r£Y_y@í�û‰—E%ž�GŒÊŒtŠ(l8ýˆ²NQ!ŠnιR˜¤—ǧ!k g,§Žcà-ëÁþĨOOº¤ŸG{pÙ¯~ÍØ´ŠyÍÛ×rf²Ô¢¸` K`UAp"ftT@r:I Ïᔹ©Ú#{Bv{þÄëyŽæ_×^Êl ¢©ù(aé�é�9AÊv�ŠuŽYt¢tXkŒpƒ46ÅåÞ;rBÒ‡Õ÷iæÂ)�(¬.z¼^xAÆ’ŽS�p¢œÂ$$�ˆÀˆ¢xP3ã!ò€ÐYÉ™dê�Z~$},ö‚êp1æ:ȸõ·>•’î¡ÝÎÓ—©ÔøuÒ�…òÂÍéé áúß�L*¿g[K8Õnn/„ñÜÙ—âŽÐíT˜‚Ö9cEÃ�‘ørEG,é¹7uàd&1níÄŠŸEL*¤VïBØ{ß~7P@lOš©îW»Y�+S{ïû{5ô¬Ë?ï ÈɃzgå¤ß¹Qj±(G�çÔ¨˜ßr]Ìæ$ûÑªØ RWF~ü =XÇä™Q5Äë.…­O^d5îÁ1AC@Û®ûÇÆ¨÷LHÏ]ì€]–Ì»*6æ_ê‘éé�1¤×«X{¨‡¦$]ûà¡—“Ùí¶IG:õ¸S¨w$ýÚõ:D(ÁkÒÌ>ÀÔ{ª8ôh.‰gQCì‰ßãÐ’¯J^/s}[Tý>à~D—8â²ò—sÍÍINLïÇ¡‹à5ž¾sž ÷°8eÀàTš¢¢Jpcp¬Õ8RçÞí6}Šß,Šdkâew©‚³lK¢í�ËøÜbòŠƒó‚Xæ1õ„t¤C‹“«w$=»c“Ûס¦$KR–�ª f”zfÇQ5ìq ½+)é'Í�¶çÖ:5©ý�IöÄêÄ�<¬YäÞ8)]fhÎ%ê5LTtâ0ì,N�>~@@W-ËN²ÅKº£Ü@g‚ÜlËo_ ùõŽhÒ'o ÀÝ•õÃã»áSˆkl¤' ÙÂ’Î<-B·Œ&5Ê ´n=©lvPKÕÆp[ìòŒ™’~9oæ]Ñw3ÁIG¾�8°;Y·ç§Qñ#;‰´ûÈ„#b’¢–;RWÒ.ÓÐ…hõJú‰3P•°3Gۦ˪Ô8IÏž¥Ë@ºÑxPª…·* OKz õî´H!€ µi´ås:Ú wªÏ¼¦ó×�YY¶Ø©ë1ädúäyŽ7·ìß]¢YâÎ>3Y g 3ëmå¤Ò}2ÔÀü¡ŽBôœHãè4ш€µ#¡·0N? “� „é´R,;ë| ÒP·™ãö�L¹Ó‡^Õò¬tÞ;èŒÄ’^’~ú^Š·8MøýÉLK18¦ô4Ùß1óÍ®$¤Oº¾ ·tn‰lîÌÿüö¶Á~椻ï¾ëó^8ZÂ}ŸSïñ~P·Žw)‰™‹U¼¢³)M¦©$Ö:/�z�'ýÕ�1L‚÷\<EzQМÌJ³íUƒ+gúVýIwš’ž=F•AÔÓ•} íÇÒ®¤¸Jœ‰7z¨&¸BN¢'Þæ­ïßêÏÌpG}Ž4ﱇc×÷�{ùŽG?½üÝwçïwä gñíí?óÛq©¿Îa‚ ‚NBI Ò‰ë1ë©MOCúT$=N½Ï´Ï²¹ãHÇíD;é%3uäΧú !‘s—>-Í,ñ4Hl~z›ž–tf8®”Ñ*Ó蹫K‡ïM *Ã嚊WƒÝó$à-&#ýõ.ÞT옑�#ß{ìçÇ>ú軯9ꉳºzÛÛ[x®¥¥­M‚T,ýÅ“¤ÞKSé:¾I7ËWȼÜ_ÄÚ®vØ�fUgìMº0Ó²ÅIú�­æv1÷ÆSw30 ðX¤g×Ì JÒ­Îò�L‘ûí5N[ ŽQï)HõŽj7WèÐWØ]öÉÑÞã £±Ðûx(4ÅŽ�WüXÌ~ÜœJp»†§ü'œA7—©µÓ¨Œã8 ™£¿?s”h|;Rüε]ž›JDC ˜-e“£pª‰UVB ·_µíƒËk×Û£ä›uPÓ*ä'"qºpÿÎ6õ’WmOÁ¶Ž�å|¥Íõ~±9ÐnVt„:áÄ”ÕíÃõ¢Uyñ£aæÂ7ŸÞvuvÚäŒÐ/éŽAæŠ+<›“·+«¾rÝéyCÃ@©S�z_¼u ýÚwOmÉ5~t^HYN¬)^ì1—¯$.¶:éB¾ÅJÈàE¬uæú÷›€ú® iÁCË©ùŠ”ÙØM´ŠG“ «J…!ª�É¢ö²Òëï ¿6¾b[Ö¨uî)1iXwhU<éñ’îXlXiÕh×$¯À£ÒÔ Îá™’ÞD_I�µ"ép vI!÷ ‹õ±½›7‹þ`ë)G.YȆ¤[Ûm<à6¥ïžWm‘ÕÅ)Œ¾­%þ3 êp³›ú¶²Ö8'7&ÃØ­‚…ô-̉!Ýš©ºU^òäÌ7‹Ú-°¬Ø¾£†¨¬S`]€ÍfL¾µ‚Ï”¾ê¥À8d Ö0ó=‹Š£ÆîU!�:¤‚oÓèôÉŒÓ-õ,j˜�h=4/J~«`u½ ±§DÖÏjXR­mšeû*h�ö)4¤»Ñ•§÷Û�qÃK5Å©À  ¤'œ¤{¡�ƒüF–0Y)Y}SÈá=k¹ªôóÑǦLÍ`)1ÖI40I±ªOÅ¢¡|èm«†S‹ºÿ²—Vg1 f܈E¡€ Bïéý½íÆÔé>fî×åueÒA½Ç†ã›Í�ÿ´PuÁºWç®+|skÈÒ¹¬GÒ/AÒÁfR†aÀ#À€8PlVæšyåVCÆl~wÍÈàÀ‘÷Ò7®5¼cÃiعwg„ôœš’¢y–:¯•}ÆÒn\ëfWäDDÃp¡wâ¯n*Áû2þ꛽š òB༺5œItÝ‹œ;wîåË+U*F÷�p_d׳ —5p|d·(²lQƒdœÛó­ãÓeãoÐf-HážfMÇò@µðºNk–ËVÖM»ì²Ë¦m7³GÁ ª€gBÄ?+U‘#"ø;ý†gÛ³lÅ­† “@0øÐCA¿KõURp†ðzíx$=\!Sˆ²G øŸ+þ¹Ö˜óæØZL[z{ͬ!‚FkSî=½MGd/((¢†¿rÌ=·={Y]Ÿ+€+¤ÉòìèS6çST-4p ½1cx5ÈqxX˜‰±VPd�øa¯?ѨjøŸ{E >z3Ñ|ÍD‰ŠÃß­9XZ€µS-œ$q]óŸÉ`¹ê¨V\½ ¯H½ ^Y¨Á܈" €õBXB–!D×¼QÙ…¡c ³¤C…¨õé¶4,Ø?ÜC8Ù ÅX;£{ÞË*)…óÉÌk‘ôØ�¾�‘'Q¯ H:²^б–³ƒ%,+Ó†*2øêCEŽéIÕ»‚³l‘1£ZÙM{+Âýp"¼™ëJ„ Áìa‰J–…žÈšû^‹Í"ccEAì;õ·Ž`н8X8,Qùk;”Ɖ¶U!~6™’š�¼éðã2©ˆuªàÁ‘)Ó7•:®«1}¶õ¬NïJ \Š&ÖN‰q½ÿÖŸBÒ±¶@‹ÙÄFPÕMEYLîv\Ìî $Ý^ød‡©»Ð©³®¸6’ªâèùôä9«ÖBÖ{^ƒˆ1Ÿ.üÆÌÙ„6Dq|,M‹Zzi5¡1ôÖZÐÒ¤X•Z m¥BKiA( ¥`  ={±Ôˆe)ij޹H.Jí¥ô,x®Ñ­Ù˜�ìÌ&Ù6šÄ¤�g'Û¸kÖAÄß!ì0³ÃÛùgÞd^Þ‹â®f ee6#ñQ­E,몋üXï©ëy)rc�Ê…I½�h×Ô2—•¬g´DÿSÿ,Ÿ7¶:7:³ÕâÚl! •‡  keŒ*)[uÛÎÄ.8š,%á âï�Ö.Æö$ÈD¹=Œ’O©è“%ÒKb»Ft`}y A>#OÒÂøò]Y—¾ËB,ÐÝÒ{¤Bª~h/�ÒáìËEŽld{ix@uÐP‚܈·õDO$Âð•ZN&^é+”áÎŽÔÌšG¶‡YNÑ5á1Ìo¨Û�s‹Xˆq²; aÖN¼2�*AÈbQ7<öâc¸ò^ª²Y§ÏJŽ<½:5úàjhO E(] .Ó©¢Ü,ðZ)[œã…Œ qcBLäó#�¶'rvўφÄd!pâ¾…Šî ½\>j™oïNr•ܬøÐщoÎ\ΞËÅwä™L5@1à?±�õíó"'Abã.·ïvY€Î‘b:¢i•&ØÛÚ{q(Ë… –¸þ‰µ•f}§ØéÈó"+'}I±èA`ùx›v³ts<«8 þ«{¸ò mkñÁ®¯Âr,0ýí¦ZÖI˜õ“œI?|gf«ü†&еÔŨ43©n\r7==î‘ ³ßbÐ];ü›o ›Ö“JÙF;ñ�ÏŸù‚ÿØï‡ÔÒï]fÈÀ0ÁÛ½~½ïÅÒØºÏ·îì_0U»Þ”¹tyø(“Hë!YÂi¤5üíCúûêÜ“+ïˆKÿÇ[ZZ FðŸc Fþµ'þ!V¨‡ ÛÉÆB½óaK&'ÿ^ž{Ô^ûüí÷ÊÐÖÝ1YêŒ £`Fû˜™~K44ú—œ›¹%f‡;Ã( ¯/òüäÉUçWõõõ1Œ‚Q0 ìÁ��ÿk#¨ªªª°@þ¯� ªªªªªª*ìÁ��ÿk#¨ªªªªªªªªªªªªªª°@þ¯� ªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªª*íÁ!€ ÿ¯až37½w˜Ì+IEND®B`‚pydantic-pydantic-e28e879/docs/logos/capital_one_logo.png000066400000000000000000001136731526274674700236310ustar00rootroot00000000000000‰PNG  IHDRôôËÖߊ—‚IDATxœì½yœ\Õuàÿ=÷¾ªîÖŠXÄŽ‰M¬F€1H*a›ïžd# Ìd#‰c'g›Äù¥ÕI&q–‰;N&du@Óžñ$q/¨‘XŒ‘ñ‚e’XÍ"vmÝ]ï½{~Ü÷ªª÷–ºœïçSêVuÕ[ï»çž Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0Þ\Èë}†a‡Úœ;¥¤XOM¨ ÿÜúþþÐ aºû»û„ºæ0§kwg}†äÉŒŠæ]êýŒ Ì’�Ï Nf¢n†H˜éDfe¦¨Î™ÐN¤KÐ.UéR¨"Z© T�?!¾'T xO¤"û$'4W• 4$WÑL †††€:0ˆ²a¯"{EÙ#°+À«ˆ¾*"/ô�¼�]¢²3í”]I²ë‚ï|gÏ”Žd}­æËÿ¯èï×ø6*ñçè†a å ¿d ÐrT­&0}aðàâÅÕWò¼£Sµ£«îgU²ÃR˜ëÕÏ�KàŽ�+0˜Ì˜�"Ú t‚t¢Útz‘Š—8…7VÅ[HËû�ƒWmüΈŸ 0Îß÷õ3“Œø›ˆàÆ'"Ïx� Ï$ž§}–=S<|×EÏlÚ;Þ1*ÝÝný޲¢¿?ðò&Ð ÃxC£Q@Ëšø_Y_é’ýýAöQ‹¾£VKf?óÌa„07¡2' ù¼€Î÷âŽRÑù óQŽ˜2˜«è`Žƒ©$"$‰@"Ò"̆ 4B!hCñ™Ðü»H|»ÁX©ŪÐ*DGÉþ‘i¡#Ž£<.ñÿ‘Ç(-¿;‡ààŠ…€£¹(ÀPÔUQÕ½Š<<%è“Û n«Jú¸ˆ<ÉܹO\´iS:ƱÊúZͯ˜?_éë;$5yè†a’”þšq4ê5 û`î–;/žÙ9àfVüà,Ñd~ Ìw¸£UÂ1ªr4‘À‘¢zÈLf¡:SDfv9GiÛmÕ™J äø³)ŒiQJѦî�»€;2îZúØ–-­Ûº£VK6ÍÝ¡amg¤À.5ìçûûµ{ŠÚõýK–Ìð»wϯgr¬÷áh rL@OBåDAO9J…#Qލ8ñ ÑÔZjÔ¥€Î‡kÓATC!”‡io­š467¾©ÐrLªª‚8_¡Cв;ÏSAp"_É]ø÷]?|ï-Ú»vw{úú^w­Ý­aûE!´GiØ+úûóÉ&6­Õ’ï>ñâ{ýà.—ã/ r•“=8áx…ãæ2c†sxdX°X¦JäQP7£ÐK¿ªˆŒ¡MÛœgLJC“W *ˆC|§s$ªßWåŸò ÿ÷’GþFó{Ý~ }û»ÑVlp†1&­Z6tËúÚ)|Ø“F?¸xq˜µ»^?¦ܱ89IKíZôTU98 áÈN\ñ-Rꆆ­å̘7ý¡MÓ7¦Q¯Ã4xß)"α;P½ô&_¸pëÖç‹Ïû5û”Ùì!0Œ71eJ×Ùû¡eßê©sóC’rNqâN=EáDA�9Õ™ç’.q@3˜,/´ë,¦c#€ óQ)Z¸nIº Í}oÈŸqèZuüÅ?ü(ÀÔ’Lþ,µ {H ã N«ÐáËžÐçwÇ‚�ó¼Ÿ3äýq.ÈQY Â)*z**'Gv§o ²B³Îhø­UTsS»¶9È8¤ÑBs¯8络cOžíR•›sþø’GÙ1ýíjÈô±ØÃdo ÊJgÝB7”U°& @»ɒм¸÷8MôXA�èB‡,R8UÑ“D9‘™"Òé\#Ø,( Á��аKß5æ·6ÞDhás÷"~–óì ù‹úé]ÕäO®Ø¼yw!Ô‹ôƃ=h†qшVjÛ“¥yÝ} ]®³ó§þ$Ð…‚œäD¨ÊÀ‰À‰“9��2¢B@Iµ!°!j!q#‚ÍL`F-,RÞ¹d¦sì á»iП¿xÛ–õ-Á™D¨ÛƒhåCßnª&ry`Ñ¢#U““re�wá4”3UäDÐ�q]U*"Ã5ìø{QY´(ŒÒ¢e›Û0ö�BcÏ;½KrE³ ¸kÛ–ß¼2w ò×í!5Œ×‰±´íÉLäw/^|x5Ëæ;ÕSƒÊéÀ© Q]©"‡Ïv®Â Um¤xIK´8Eð™iÙ†qà(ªÊaÞËž<ÿ÷¡½rÝ[Ÿ~èÅ!Ôí!6ŒLÓŸS¿&+®rø •$á”Üå ¼Tê°mHt¿�wÐc4ó£c�w™g<ÖŽGZAÇYõ…¸~™ó>Ñþ�7ñyÐ|®óÉ^ ßÜíxßÒ-[žn·P·�fmb,�ûŠþþl¼Ïß±xñ¬ÎA=¶J~’ g ²H…SPNá8`î,cÇ•¦ÀN£ �²¤È<>VCŒæßÆÄÍt3×’ÀŽ­F‘ðNšQsR¼'ÅŽ´±‡Æq´ÓØ¿7K¶Ž<ÂbÛÇäh¶mœÆˆßeØûÒÌ¥‹6ÕX…ŽÑÑÊ"8¡%‡¹q\c”‘5ÁÿÆGÑl¶óÉÞ ß .¼ã¢‡~¡\»òÕmÆ>2ŽÆ=®ûŽÅ‹g¾7?~(át‡.Td1Ê™'(z|—sU_4‹È ��sµQÍ`˜pû1ñ�ÒŒãϦPKÀ¸X³Ñª²ü½ØÎ0A 4,J¦¨¨fˆdñdH‹~Öˆî- 2 0äÐÁC(‚ "2 „A 2€ÈJ§i®šá4õ™Oqš¢ñ%ÎgâC6rõ¤™¨¸|Tº�Þœ ÞkÈuÎ#y%¨ó^\¢¼s® Õ.E»PéR¥Ë9íR•.Ð.:ƒ2[Š:ñÀlUf³:@**T+"RÆ.( ëIž……¥Y°g ·HqÝmÎ>Ä �æ}òj–墎yWßRH§Š DZJ›NTpå� Ë;;O”ŒSrÂÙNä T"ºP”#:œ¯v8iT?+µíP(u¢ª…™yJÚv«ÙxL¶€"NŠ–’eïhOS8ûBÈ´j—¡0ß§!Ôv#²e·Šîq°K‘WA_^EåUA^ ¯ª²;¨îÏ.‚߃{É’½3ªa�¨Ö_Þ³'«}tvѦM¯sÍëÁmà/^° 2ØÙYIë•© ³½èì,äóÄÉ‘à~pñâY{÷æÇ‹×3ÅÉiôlAÎNPḙÎÅÆÌi1!g­�Ašý®G¤�iæfª•(›£�oÌõçh¦OUŠÂzv«ò‹¢ú𢊼$Ê‹AxÙ…ðrpþ¥ ù+•öh¥²‡z}/óæí½hÓ¦ô\÷a.бˆåfKúZþ�ÝcÜǾ)Ì}Ýt°žBmìÏL¥@ÏdÜ»hÑœ$T“$;Ls9ÂI*þdAOP8A”“E8"ÀœYΉ/Ò sš�”ÁŽèxH  ^PQ†$— Îô¡Gˆ÷lZ¦w»áÆ›Š‘æòýý:ÞÊøáE‹:^ÉüÉ’ÈI(gˆ„s9Má4T�ít.épnXÓ¿�7ÌÙ#L¦åaŒÔH¡M74éèk.†S|\ è^UyY„W€WP^ÝòŽgBÐç^õοœx}9 á¥!ìz÷Ö­uöCµ `€n`ýA¼¢¿_ûh Ñ5ñ5l_ÒØÜ yBk@Ö­ –Ök4• üþ%K*ùÀÀ æ'ˆcA‚ž”sY¨ÂÇt:G¥�LKË�j\”Æ Óä2T5›ë“äÕ�ÿõÅ[·ÜpÝþjú¦¥¥Û 6Þ�(ÃË�®èŸ¯2ÎÃrø£Ï£‰õÅ,Ûýî) k�&îß~Ô¢»A×0L{nYÕ÷Aÿt¯´q°Ð"´•þþaÚÛÈça}8åñÇ�o¯[6�xÆqƒÕü’!¸L‘åN8o¶÷]ƒÑD ¼ ÷׉µßô­ì[hÈØÛkÃ1FÛ¨6QðÑýK–ÌH^Þsjî9]4œ“#8tQ€S;ÄͬŠà�†¦œ©”ÂD­Ñô(RIŠžÜ^šiZ™*ƒª„Ryåi�§UxZ”Ç}\U~TžïÔ¡çϽèѤoòhU¡»Û­ß±£ñ –g0·1 B¾»;.JûF»š¾uÊ™§ãeYªù»DX:Ãù£=0­Ry±îž|¦s~wžÿËÅÛ~¿N³ÐŒÝ,ã  4Oæïþæ¢EG¥Á/Hç¡zžŠœ£ªg98j†÷�èߺªŠjV¨ÛND’¤È÷®P¤k…Aò<žGxäI”ÇDôqà9îÉNÉŸÌëõ—.xüñ]“¥—ŒôO—Zõ÷¢VmÂÚxÍ)Ƥ[_«�J½üÎIçÎ éªúÁWÎp! ±–@YŠÀh?ù çüžî¹xë–Ë̇nRŒ V{¾l·‚ÛtÒ™G“„³Îy p¢'{‘£«âðЈè�E94â+…Ð.#Å3”½!€ên�ˆ>¡*O‰èãÙî”GÅ…g3ïw¼õ¡‡^œÂ9¸‘ºԬÍ?m (8è–>úh}þ¾¹hÑQˆ¼+¨»FU¯œë“d@u yQåÆ{{É»œóy¸ï¢m[ÞjÝ8¨iõO¤yo:묮NÉDß"**œ+pŠæt97¬à‰iÕ·ò¨‘“«¾èDžUåY„GݪÈvŸ‡Çë¡òļJýåÉ‚Í\k´ñóýýjÚµñF%jïÝn¤p¿ïÔ3Ïq¢«VÏvîÄTa@C€[òúñŠ|¦s~O¾rѶ-WšÉÝ8hh55�§yßQ«%‡ÿàǤêÏÎ]¢ÈÙˆžTwX¥Ð¬[7ÄÙ#{C‚îTxA”GlsÈÖDdKôñ<÷Ï?þøæçÇ‹r/�s}­æaL Û„µñ¦¥îkèÓRS¼ÿÔSçz_¹FT~¶ÃÉù™Â †ó±OEóÙÎû]yþ÷o{øÇo?ÑÜ5v3Œý¢5ðfýŽñK¢n>óÌc÷¤z†C.„p¡"gƒ.ôÎÍžé\c†˜±MÔC W†}F�'Uõ‡|_�lϳðdU²ÇÏ?ñÄ—d‚ôޱ´ìîb‚2¡m“£àÖSsWŸ³Û/®žšæ«Dùå™Î�=¨JB."#K*SE5›ã“dgÈ~ý¢­rºik&Ð�© =-~ïõýýa,?Ï7-:J¤zJ ‹¨\˜.tpJUü3]ôk·öçÞBŽò’ ݦè#*îa”‡*^ áÅK·nÝ9ÞAµjÚ­âæÇ6ŒöQ>g¥ ù·E‹:Žƒ*¿1Ãûcvåy(Ê›~QÐI%¼sÉÃÕ4tã€qønºËï}÷ 'tuvu�Žº³¼ÍÁy=·Ëùy³ZÊPî�½yž!<íTËá ”-âØ¢ïȲÇÏ}ôÑãiÍ=àÖÄ Å4mÃx)#åË,�N;íxÔ­ID~R�! ¹`ÚúTQÐDD²^L‡’Ó/{jóKe¥Éýݦ tcJÜ·pቩœ•ÂÛúVзt‰?f^âQ�]¡^È2Tù¢�£ò}àû8y(Ïx¤v¼åñÇ_oû=àV‘ã­Ah&´ ãàBAÖƒ¿"V•eÓ¢3Þ— Öáä”]!äE¼ª1 …ÿÜí ¡oÉÖ-º­»Û_=FÍ€}Áº1¢ ß8õÌ«;ÌÐ ‘Ó÷AØrvçù.‡lVÑ- ›÷=‚>ž¹üññÌä­&rúc‰Ö¢XLñgÃ0Z5ö»N=uþ W¹q¦óx5ä«?) af,ûÚ}ñÖ-_PºýxY@SÅ.¸1ŒÒäóõ3Ï<Â¥ááŠssS ÛDù®8ùVPªy(£þäEÛ·¿:Þ6FTx³rÃxƒrµ¤ œûÖ¢3·êä!„`B}\B‡ˆ }LÛyÎE›žÙ ”Õ¨÷»ØÆ¸Ü·pá‰UÕ¡ ¶oß1Þgî¨Õh4‹0ÁmoBŠXÂ7žñ±N'ŸNµ¨FcrfªšÏMÿjÈÿ¿‹Ùò»Ó�n/± mLÑá�žMnÆpDÁ d÷žrúOÌJÜßÔUóÜòÕGb0œ¾0¤é9—mßþ<´'È×Ò ŒqéWøÉT \Ñߟ]ÑߟI³IŠ sÃ0JT û«%K*—>úðßîÍõ»œó®höbD‚ªÎ'êøôåÛ·ï€n×.«¦­š Ã0Œv"wPóWП}cÑi>ÇU~ngžYš¾óºê„ôü%Û·ï„ö¥àš†n†a´]A~ø®jåã»Bvÿ ï=Ó(˜òÆAµ*"9|â¢íÛ_í‹îˆ¶Y:M †am¥RçlÞ\"Ü�†P—6DqÊ(䳜÷»òð•K¶nY7ݪpcaÝ0 Ãh;WC®à/ߺõ�ºêÿžå¼Óit;”QÐd(è®LÝGÊtÞ¶bÝ0 Ã8 ¬)š&úDþ`OÈ_Mb í›PK×0Ó9W×ðëoÛþýGn‹Ùm_ܘ@7 Ã0½úèvK¶ly:½e†s"¼¹¢ÞšÏqÞ¿Â?]²íáÏÞþC(žÀºa†qéCA|pÿ8¨x5pQ�âüž<<•†ôù^´ZL †aŒ«!P=læýõé‘7ƒ/]A=¨¢ùÙu—oß¾£ÜX­§Û… tÃ0 ã€rø‹6mJEdC‡sˆê^ ‹j>Óy?ÂÛ¶mëï –´;ª}$&Ð Ã0ŒÊQµZY)ú›ªŠŠ¼¡‹š©j6×ûäÕ�ÿÍ[·=ò™¢�Í�Hô Ã0Œ77ÏÇæM(nëPô ¿a•IUÍæø$Ù™ç_q‡Íúˆ‚# óÝÿ†½¨†aÆÁA™s-AŸÍTy£6kQ4Ÿé}²7Ï7g¹æ¢M›Ò5´¯´ëd˜†n†aPÖ?ƒ{T�ºØ™í E@C—8_á™ü.{hó‹¢ÜD˜@7 Ã0^‚ˆú¦$WÞ8šzÞ!Îç°sPå}—mÛ¼µh%ûšæÜ›ÉÝ0 Ã8 ¬)~Î I—ojçoa®<8ÐÁ½Yþ£—n{hÓµZòZ s0�n†a`ú á= ù|/Â¥ü«Bð"â‘t0Ë»/{ô‘¯ÜÉýýÙëq<&Ð Ã0ŒJ™¶&.,¨Šp ꘿Öš¹xUM+ßúèÖ/ÝÉðºs0�n†a¼Vw–G@XõÓׄ¨™#‰†BX½dûCÿ÷ŽZíuæðña†a/ " ÷/<ãË3¼{çÞrà�¬é®çUÓ½°êÒ­[¾p?T.‚ôõ>6ÓÐ Ã0ŒF)Ì¿~æ™G(ú–zˆ)é¯÷qíA5TDœS­ùÐ¥[·|ájÉÁ ÌÁºa†q@év âêù[g8DŠAÙ£�w8çDu÷PоuûC_Œ>ó×'n,¹‹j†aZ¨ˆû‘D8$³¨jÞ)΋ꋃÞsÉö‡ÿ=Ög}}æ#9$͆aÆÁOin`Áù‡e•Á-U‘ùuU=”J¿*d3Ä%©æOïò�¥Û·Ü¯�ÈA&ÌÁ4tÃ0 㱞šÈ+ƒï™åÜüzù¡&Ìg;Ÿ¤!lÞ«yméö-÷ßq� s0�n†a ÖÓDƒ~$‡R×TQMçzŸì á®—3ÿŽË¶mÛªÝÝþ`3³·rè\]Ã0 ã�¡lLrÿi§-«âûë1÷ü W"c; s�÷»Cøâ«¯ú_ñüæÝ¯Gmö}å ¿¸†aÆ¡G7= ‚üjED”ƒ¿˜Lu sœ÷»³ü3nÝò#…0w»0ë¶f†a´™ÛÀ ½ùý§�µ¬Š¾gOA�ƒº�L€Pq "{òð+nø�dM ì;$"óMC7 Ã0AóߎÚùÁÝŒEUó.'ΩîN5t_¸mË+Ý ÷æ`ºa†ÑFJ_óý‹ÎèžáÜŠ=1²ý ÕÎÍfyŸÔƒ>šJXyÑ#�|ýj‰Ðwп�‡Å†am¡4Q_sÆ3÷æ|»"îä! *¡5¸°„¹ÞùÝyذK³ÕµmÛž|½;¦M‡ƒî"†a‡&ë©ù^;3~s–ó§ …<¤Â<0Û9¿+ ûítð‡jÛ¶=yÔii“aºa†1mŠHðpÿi§½µªîÎ |ˆÂü ’3ŠæUqк†_ºxëߊïÇã�oZt+§}D&x†a¯ ÒrÇ‚�÷W^\µ�ŒÕ\¬h6Ëy¯èsƒ!¼ûâ­ê6ðzE²OÄÁ'Ð#ton†;š¿÷¯ЫL9Ù㨭o.XæÏW/Vz'ûžao„îî8?,^Üœz[?²FÇ‘G‡Úü!ôô›Ç™O!Î�%}}�}<ÇõÔüÕôg÷%�¿7Ç»ów†<9häKÓ_ž$y¸«.áÃoÝöÈöCÙ_>Ãê)¶õ…ð�ÂzWJ=Ž%ÏÄ(ÊMÇæ“¿öóçëþ ^ãMÇð1Ú:ù•£�¥7##çσáÞGe¨ó[w·gÇ™lN.+Â}}á?ÜåäöT5׃(ª]!87S„Á�ÿÕÓ„_x÷Ö­Co4a¯—@ïéq¬o ¸ÑÕwº»=ϺãÀ‹TŽA³Ž9 tÈLÐ.”*P‰+A­ 8”!„!”� /#ú¬ªlÃ…m÷Ͼ¸�­·�Úì×ÊÔxÓS¯ÕÝí KÐ!o¾{ƒ"€²ôÇŽB†ÎBd\y>ƒ,C}†Ó’ êT3Ø›ÁŒŒù{Ó}¯�ÕKVÏ¡+G�ùˆz¹v!ÒA,à6„s¯Øáyªá)¾vësÃ7¢B÷ÕnäÙn è·Ï<ó42ýšˆ[Wå` „SÕ¬Ëû$WÌÐ_\òÈ–¿‚7†¿|,^;�^ ñþÍà/íîÂûSw!p®ç¢,9 'sñ¥Õ¦åPµå‡6?'åOi~N�¼ž¢üç¾§¹n$qI_ý6wÿó®aÇi“ñ››8š®™Z÷,òg Ùù8] t‚dÀË(?@ôÛ¸ÊwèÿÜ+@œ`_߉¿eð jµ„þþŒ¥«?!�¿K}0¾¯ä9�£ä 9�!åÿɉ?Ñ È@ê ƒ¸D Ù·túŸãµ½ÞB­æ‡Ï©=Ž·=|:‰\Žø·ˆæK@NG\âFÌú#D@žúð”Š| wCÚφ¾GŸ‰c;ªt{¡/ßtÚ›çü§_ÎsBŒ ]zibŸã½ÈÖLòë/z䑯ß¾;ßò¹8À½±ª>±]ñá³I³ËyÂ…À"|EZ^ªhcÕzF·Jã]�¿ø¼ˆÇ9â „ðp‡þÝõ•B¸ oÐnLB« ¾|õ ñn5„w r >ç^’º*yª?@äßþ‚;oz€×vEŸðŽ2®åËhÜ_Yºz-Iå²4 e,ÑÈÆž2âבÓeq{+0´ûKºá–÷½6 ¹ÂeØ*È/_}©xùª?ŒrI%jì~^-¿«¯RTÑ âã\ì\<¿,îRôVÒô‹ÜÛ÷Ðì·ª÷/:cUEä/¼ÈÜ��ç¯W©W…àÀÍrž½!ï«'ò³o}è¡߈&ö‘ �ÞãèÞ,ÃöÒUKDx?¸wç“Tª„<¾â*8Ž ÑR½n÷ñŬµ/Áã¼à|¹€xBBúçaÃ-dšú›�òž_¾úRqò;8÷Nœ/„u(ƨŽ”*¦3Á#Nð äYކ?Ö 7ÿzËgÛ)Ø›A£;výýå³3œÚÊ#é¿åÅ6ïûP&Jàž'_ÛzÎ/!Ïsd2mr˜ °å-ÉHª^³z×þφàÀmå¼úŽëŽpYX¥êVƒ¾_‰sižD>)ôÔìeTCئ*Ï"ìEU@8átœ;—ıÚÊŨàÄãŠ5OȞѿ õÏòŸ}/QŒE¥Wô¾SÏ<§êõó�âïyÆkx­Y‡ø$×�å×/ܶå�¡éçm�åµ§½»§'>½½�>`Ù‡NDýäD.!©Ä‰1Ï ­Ç‹[ oi ¢8`†ƒr_MBÈsr::OÒ¡ì"€a¡ÆŸB˜»¥+?¢Þ qU²º’ç¡£.ŽÑ±´´ J:”#â¨tþš,[=G7ð‘þþ­ƒÝW�о{•¾–O]²z#z®ˆ\Œ¯.!«?¦ð_¡Çí{ é˜õŽÊ"4PóIžõ1Ôó¦CÃ#êql†L¶“RóïëËYö¡…ä£ÔõÚT�!©’Õq®ƒJÕ‘e/‘gÿª�/â*÷³ñžk³ ÅØ ŠK?ú!*Ç�§4Gð¨*YÇ�s'©«ü¶ È ºìºÿɆ›þ7ôªtw{íÛ!²½ÿÁûO?½6¨ùf;WÛòL^ƒh÷²åé瓽©KøÉ·n}äN�¦=:¥µƒ6]èApŪ%’»ŸAùQ*•y-B<uH«½å¦¸bÝ®„TÜ`tZ‡ñÆ¥»ÛÓÛ›³lÕÓ¤ã³d©¢y†Hc ñq‘â;J}0#©ü,KW~žÞÞþ}0Å6Ó©¢ö��@_Ë„TëIЇO!$ùň¼å\DŽ&©ÆEs’@V¿Pjë=ýo¼ }¦Ôn3·/s‰ý¹§óœ+‚#K3‚l†§Àµ‡˜aÑÛ›sÉê9ÒÅÇQù(¾rDS1RE$¡Rí KŸÒ<ûsòì&î¾õéa[êéql.¬:ÐÌ̸oíN`½ÂzjÝŸ$—Ÿô—H*³ÉÒ(ÔËùZs%Ísœ?A|ò—,¿öƒZú(}}[¥»ÛßÖ‡¿èá‡_øgœñ¾“òðÿf;ÿö�!ÏÝ4¿‰àfˆ÷{U×½àåç¯|è‘ï€DÞà&ö‘LW & ÞÒçx©$îãäúA|¥Bž¶ q}U«œTGÈŽ­À�[iB__àí×-u>Ež)´Ìû¿MqŠÈý“/‹E1½a„à.»æX\rŽóEõRò­g ²ˆÄWb‚‡n«PH¾2ËùKöäy.r„ºj6Óû$×°gwÈ墭ÿ%DûÝ_>û?i•þƾ¾œ¥:]\õ·@WãF:;þÞ¯Bµ)È…%£RMȳ5áîµßíïÏ÷!8¯5ˆ²ˆœ¿å…÷²lõq•B —z1™VÖ4Íñn¾ˆûgYºêgCÿºK¡¾4 õÿâr½«Ã¹“‡TÛý@„9I’ „ü�4d?yѶmß|³™ØG²7š(W]ÕÁÒë~K\å~|²U%M ß8žC@’G´\€>ˉCOÄ÷Ú¸Ò6æ!´«Š`ÜFÈuÿŒ¯%—q'—¯z—Ԯêw¹O“ê_Réøq|åBœÌ"d�´ž‘¥9ys�K«WóY“Æû!Û î1À§%…9\ç™ Ó�Ÿq(…ÿ¼t•L¡§'F°/[ùÃÒÕyIeYï{#"Ÿ< óôóºgp)w¯Ý@­–…›f¿Ç±Æï÷8èqlX»Fòü#8ïŠì¡áÛó7OC˜–ó«ˆ,[ýW’Tÿ 2B+ÈñO–öꆛ)ÎË,§‡²éÆ”%7Tذî³dõOR©&c õXØÃò ¾ò·,_}1}}ùÕÝóUéö—l{øS»B¾¾hŒ²ÏÇZä–Ëlç’Áþu7ù¥>òÐ-Z4Vy3¤¤M…©=쥉}I÷\Y¾ú ’tü²,/ÛkmZ�ŽD-ª8�õŠ+Á©>`‚*‚|ï@´q°Ò Ç©;íH÷þIâ‹ÂRŒ§lœq–5&7—8* ¸Z¯\7¬ë¦ÿsE²qÇ¡€(ïìž º‚Ÿ<'zR q,·6(z3S6zÊe>é ”W¦�ˆò QØ_×FO‘VX»¾S–]ûE’ê Epc¡ý(I5!K_7¬]C­–ÄÅâ¶Àlº1£»ÛëÆÓ>A:ô5’ŠW¨«*âºDõf.ûñÙ}‹ëšÚÐ$qRòˆì‹é]U³ιDd`wžÿÒ[·¼wÙ#�l�UêÈßÌ&ö‘Lþ°—‘–KW�*3:îÀW´l¯¡VÞÞå œw�‰·R¼’ò•x\ÓãbBZÖ, 2¢ â$hQÁo6â¤Øß›é†u?§yý*4ÿwÄ Ä±UMâøJš¯Ö÷E@óïhžý¦fõ·°ñæOÛ�Ø|ßSh�þ�£ �é `‰kY÷ýinç�Eáî„sã%žj°âxhtÓ©þJׯþÌÑpÞµ3E³ÿGR}?éP6JQÒè3×´þºqío&ö}´"í7±S%½AÅý$!߉s>|Ç“ ¦ˆT†ï‹<úÌëw10ó†–*–¯ÝÐÛbôüÍ�겕¿+Iç™L£Ç«ˆ'«ç8÷³\¾úfúÖÞ{Ñ’%…ðuÂì ùu ÌÉŠ‹6ÖîT5ëp.`w–*ìÝù›=óÌÞ–Ür›ÿÆ`|Á\NJo[y¦xÿŸ8wYý5æ¢Ð{’$‰¥³­„ünEï!胨nçð9¯ð¥ïÆ.¹a³öNÐÓ©½Eœ,.%IŽ�²Ž»Æ1åOЧðg>¿¢åii˜.›“þØ“Tm周[&AW#ò.’ê ²œÏ ٿ醵ïŸb ÷¸¿žiT^š??š¥z×è~¬Ôãê{xæàéÀ“Îfìr0vîQ’%ìÊèØ‘NX+zz­`¥-©7SoÚœ¸W¬˜¨ðÅøßk�Ù±põZÈ×ÄZéÛçÅë1k‹}¡µÑoz÷2üok´±¹©“*KWŽJõÃE4óþ/˜UIÅ‘§÷ê†uoÛïíŒ\�ßû¹ êîöìÚ•ðüIžY/»æøöÎ̬ü¼ŒÛ?SûES’}+Åù üÐO.ƒ[7-{Šì'E¸fƒcÃ-¾Ï5Ü]ßVý¾T;ÿõÁ±•%%'I¼¦Ù�p×Ú/àZñ“Sìß-[ý“šTþšt«’jÀWœêÐqç­_¾aÉ’Ê�›6e__¸pqU’ò¦BÕ¼êœ÷ú÷Cž_yëC½¨±·ú›:mªŒ5 £€üâ¶.™£_£R¹$N4P3W ˆs$ÈÒíªú§dõµ�®>'„F-ëÛBË¡�u“‹?¶4°9 ,_y¸Dù0]³æëÞÝÀƵÿcâ¦ÇÑ“N&W]ÕÁž#Ç…¹àCÃQ¨ÌwÈá G zÈl„™ ³Qf€tå«$ IQÀ¡lë8ˆ°e'èóÀ³"²5Høâ¦ÿæ­ÃŽ£¥Íá„ÇûÚRh&ãX.í>œJÇ\2fRÉ*äIhô¨7€V^æî¿Û5ì;¥F}°Z(j×wRÍ=/ÍhÞ‡to£Gƒ è×H’Kbç¯iøÐKÓlžþ‹÷Q$Oðùèkâ¼r¡î•WÓgØÜW�˜âø®]ßI:t8Ie.d‡¡2ä(§z„ ‡ƒÎ†b|#3hŽíÎB õ�ñÛ‘ÖÙ‹êN�—yÕ§UxÕï“»G¸çæ-G1¼QÉD”ÖÆe¾D÷FK/ÓèhÀ%NµþCÜyë—÷©ËZùÙËV®–jÇÍdiYõmøñD¿¹'üÝxË�-y¡<ÆZ÷LÉ«›ñîDBÆŒýhŒÇúíºaÝ»èéq=½½ôBøÆÂÓ¾2Ë'ïØB®EoòÙÎù�~�©~ü¢mßož¦*íbô€nÁýƒT;¯wåØ.Š(!þX÷ ý¯¢êR\ –õ†Û#”â$ЪA.[}¬ˆÿ=Õìv6¬ûü”šîî*/úy r">Y@Ð] "'�r$ª‡!ÌÁ%•fÕÄxÍsoQvZ{¼;Ó–y§ü¾�m¢ñ»Y:òˆŠ| _bcz� ‘I›sÄ •Úµ‹P~.¶­Ý�]!à*ž�~— ëþ¶y€´ZZ:ðýØQ¸ìbB¸HD/@eè‘À„.ĹâbïñàUÐçTÜ&ý0ôU6ö=ßØÇ¾Œ•F+ÍkçÞWŒÁiX¡4à|Í¿¥Öý$ ,]5Oà?pn>ª9ª#&>àøii棃!D‡hº‘PðÍŸÕº,)jy7ïÕUë`àÙyhõD @NDôdAOB9‘#@CeÞ'­UAGífŸÆwËvÊm5+ãí@yHÿI¦ÿÊÝ뾌î]?Mmø:©TÿqB­rjhŒpƒ g³qÝö)7Àitô»ælñ•{@gÏÚÈ¢ŒÔçTòóè?½Pn‚EkùÜ,[õI’Ž_›À²ï‰H¦A/`ãÚÍ=‹W{7oNï_xÚOÎòÉ�;ó¼^u®Ú! êº|ˆ_¾è‰‡ž1­|ÿ~Šå._}½V*×S?Àpå 4OïS²ŸáÎ[š¥ ÛoZj)qXö^ûŒÂ�ÑÓãØc órÒXzÝrIܯñlvʼÌÂ{H< ÁZþlLDY(Úµ6�¡I9kIëÿƘ‹ªñ×aýÞ%ƸNÄ�+ΟKÈ�eîÕk?ÃÆ…Ÿ‹“@·g¼¨ÐZÍÑßÈt¹Ì˜õ‹¤Cû—¢«{Cf7*üm,!Y˜¢û$îû²?ޤþ^ ú¤þ6ÄÏ£R~ÍZ¯a¼¤ŠPEd.âNqãôgÈe˯»M³ðçô­�þÌ©ºM¢ðDßK¥zY}z©Éåùí}Œò¦PI..ö86¡Í ˆH"ã'±yKš?Ê}kw6ž·¥«Þ)Iõ—ØóâIhe"3IЦ҅S¤7Äý¨L*bà� ùÇI:Þ…¸³q2 ²4�e�²œY–ÇI.“RÑv³ùJZ^Å{›×P¾�±_R6¹iÝVü¾ª’åAC¦8÷©TþN–oû*K?t:ôå�2£#)�|8‹¬ž‘¥C¤õlŸ_Y:D}0×ÀW‹í“¬(K¯«É²ÕŸ?ô]ñ•¿"©¼‘yÃKš¦Í‹ÊhŒª¨*!ñš×ób2œ�O>*‰{€å«ÿˆZ÷,z‹À¶ÉQj×ÏN >ÈóŒ,Ë÷û•çu²,�fÝ'g!¢„,%daÌWÛÑbñ7Î Râ'îŠû„ ü Iå*Ä/ƹ™Íñ=Ø2¾Óp`Æ·ŒßÍm  J–åEʬÃW®”Jåßdùê[xÛµóã8g|ÕÎkKÉW•¢Ÿ<̦S†_ŒOé"èÚõ[$µ˜ÚGl¿°Z¦õû8vè[,Oe„ýуß!èƒøD? -¦Q* §ÇmÞÜ—*È[ßò¸*ïÕðåÝÁ_rᶇþñ¶¢HŒ óý§ù”BKÂâ+óAÇô‹´%P©x²¡ÿ©wÞô“l½}¨ý¥ §ŠLÀUTaz{÷ñÀ íÍÑ�7„N³žvs>i½VHKG;iwWY!Rígù5o¡·7Œ)ÔË×Á�Óþ†MÊS}y„jÔ6Ó-D ¸ÎòUçÊòkÿŸ8Ö“T?ŒÈá aà67\Ï�¹ �5æë€0΢B&qáÑ×WgÙµ§ ²”¡�lôø––{<î=:Ð4«ç�6¾ã©ÈÔ®?¹ÐÐGk‰½±h È©m*ùª…{ –|�JeÉF ðµç‹ó¿6aŠ¢¨Ä¬]>Ñ¢•\¦çØ<&G¸ƒXùuìãy"gsç–³•x«¹„k/xdË-Û¾ù -|åfbŸq2iøÍWÖðîC¤CÓo+8Ñã5«ÿžnX÷›Å¤+�9i$e¥­zÇû©Tg+üÖf'¥pχR¼;FÔ�K»�þF.,Ë O8eÿ'Àâî*ÊY„66™.*—ú6ö½ÝÝ^”}3Žãœ2R!J©v¾…¹áç wKó~—%_ÉOÇ%|z»,+Kº©U–ìîŽ.½å«»ñÕÚÄ„TbaLù$0<Ïÿ`¢,¾ä;äéM?úXÄp^Çe@s1å�ôN¡jÅ8�¢+mêôô8jµ¤¡X–ïµ{?“ϯ<–hImfc”ÇT«%ÍgñË}½9ËV-Ç%o�©3@;�9²ž,ý†ºÊG ÇÑ¿&?`‹‡vPúÖ—®^Œ¸Kɳv”»ÕÑ¿6£…¦¹í±Óc¤x´Ož©ÀÓÚõŸ¢ïsE„?Ú(ùŠœ«Îcƒ¦U/?V–ÌóÝx&«,)ôݸôê.Qýí{0N�´FE¸ô6¬ý²È�Q¤è ¡¬Ô@^Ý�÷'2[ÐÒ�~vtaö–+ÇÉW›õ&²6Z*š)�ÑÝ:ü8š.Øò\œŒêéqlÞ-ÔcŸ_ÇÃ<õ3^ŠiÒò­ŸÅ¹8àÛÔ„¾…ès a@?Å†Ï Æ…Ätë)`¢Y68´[“¤:Iá�xÁ£_¸.'1•¢®| þ5·•©AóúÝ�¯ùp ¾ê'ߪED{ËJTËñìZÒ3eØ\¨Í¯£Àøv1vCN%ÏN6QïÚb>»=û*"Ü%{‚çÓ"/~‚÷înGŸä®ºz¥úÊ1en¢]‚Šû,"³D¦¤½¾Dͱ¿o7ËV?�ȉãföG¨œÌ;¶Ï㫼HSû¹YiX[…Ü’*t¼U<Ò<üîZ»~ŠÙ,Ã)ç�r»ËW_ŒòQ.E8Hpî ÍÂßs×Ú/–g0ö±Nƒ2б<þEWupÜQÆ^ÎE9˜‹PrÐWytšo`cïÃô2*m36,[},Ê{cðÂ�ÐÎ Tª^Ó¡?ã®uß.Lí ¿þþœZ-ÑœnBN1 AÔ„Ê�‡±à£†&ÒŒujMñјž¤ad´IDª¨ÎÀùN¼ÄÅ j첊ûƒÄªM‰#p$Ð4å5Ì_añd¥ý§´çN." G·TŠ41ñÍE�‚†˜úÔ¬¯?}b=é ðßõm«þ†¾uO4S›ŠŸÙIÇáòМbÁ5­=Ši×ã[¶jž}Öá×ìO�–Ê SBŠ}ætw{÷Le•:÷ÓÀe$6–Å�/Uÿ>–®þõOýTQ” Ú!ÔK\ŽËÚêK%°¸ ‹¨vƾ%åBsÈc1L÷Òú˯ýŠ*Boï×ç£rÕ÷Ré˜5n±ýé¡8çÈêÏ’¥*ô¯ ÑlpS®ä²ã.Åû³YŠŠ DmÛ{ßÐH4@ž¦h¾“À3�xRÏÏÑgòÎïEó!ò|—§ø¤ôCU€.Hç’WNÒ ÁýW’ÊâiWI®é°ÿ7Óa·Å‡:ª¤f!|âqÞ5¯ 9h®2#Z‡R¡�‹˜œJu¦HzƒÂ'èÞìè£9Ù‡üd’dö4Ü ­{shY!л7 }}ß¾3îw–®þñ¶¬_T‰÷„ü~6Þò'S>b_Y‹#åu”!¶‚×´žæh¾‡ /!áq�ÇP}RDžªÏ"ò4’½L^ÝCÐAª¾Núrœ°²ÙB—VÉ’Hzèɸ‘n’Êd©¶a1Uœ�;ì•Úõ‡²"Â}ÚûRDP4Zb +Þ˜Ÿ¬ÕbæÎ¼ê{H*gMX>[%ÖlÏíô÷í~ÝK¼N…B)PåÅ)\UÅ9AÃñtwoáë_O@ëQ€·XΖý—cÑ®¥xw•¨^�$§à|q[òônîþü¶øŸ)jçå\ÞÛ«,]õNyÎÿŽ&þÒ¸Í(R!‹3h4ÙQ::ÿ› 7¨½½?Û¢ ï/RÄR‚üº÷Šê/ òN|‹OŸFõ�G£|–Ó�åx?‹|(EÅ!tà’÷ˆ†÷èòë>ËŒç©(�‹ÆˆÈ»Çð{µ‡˜S™�¥ǽ}/Ñ}õÁS a ˆ“•T:yMŠ!ƒ^&˶ªð-D¹GÁ?EÿÉ;Ë�¶Ÿô…âÊkÿ�Áì/$©|¸ B=¦å™"y¬8UDÝJ­{9 ‹à­é6­h~YÉñI´\äéVÕð%Ð;aοDÕÕ©ë²ôLœ|P�U$•Y1°­ KQ5Çð!j×ÿ}Ÿ¤áfðîlWh]ÓÚSJy¾ ±ünßâè+­­~ÏÏwµ#À1'�ëém²ÄøäAjµ„®.ÏÀÀÄÏX¬À˜‹ÈõT:YZ�gž?†ä[A¿¯ÊƒAÙÎÜßåöÏ4z*ìÇø~øŽÂ?sÙûÿfß(Iåòtº ªè»ÍóW}ˆã»QvhøÃÛëÞÐÍ“~¦E€~Dôg'ù¤q.AEo1‡º«a¹÷#ÄyBvx1ÿç P»þ0²ìqz¸e–�Tæ ®èŽ™)yž�JR!ç> ¹XšŒÒ\ûÀa¢³?‰¸Ÿ�,mvÝæfj<ŠJ:˜â«?Ãå«?Ooïúý.îÓjæ¿|åRñ®qoG€,ËqΓf�ªã�Ñz_£òeÉò•§Ià³øÊ•dih¿ŠT»~ŽÝ‡Ÿ¬Knø/l:6O¸øº# \BžË4ƒEÆ"Ô,­kæoÊô�ƒú$çÒŸ8x7éÐ4Ü-¾‚Ü�¯l£ÿsÏŽÿý¢ 4#`Ëón˜‰ZW{ ¬iv¯Ú>Ïñå÷P»þ§É³Z¡A�硚ñyñÏ7�£G WÉý©À‘qÂk“;» ð éV á†NéãË7ïã“/�ÿ®—øÓ"ù_�T–“ÕÛ ©‹#dŠ÷ !\l,Ì{ñEÏ¥�]Î$<ÊМâaìUèUúGt‡êîöôõç,»æT¼ŸAž·CC-Íýߥ¿?£Vc’É®Ô\�!O—P¸“\ïU‘€ï:žU/ä9ìX,°~øøî…ñýÉ-ÝÙ¾‡çî¾]ÔºŠœeˆ?~ÚÍRÄù‹„äz×(µqü¨;�¤êÚb�,L÷00A„{·‡Þ<ÔJ-~gÜ}Gs{ž~“ §} �}ö h9‰å×^‰†š(—�§ç�$Çâ< �9 ­Ò=®’£AD¸wŠkø–±|åÛ„äoðÉâ8¢©¦p¿ŒŸn*NqúÀúý:åR˜_²z]î·Eõc¸Ä‘Õ£{!IBø[Íê¿Úì]Òã¨á`=…¹ÿ]òÞÊ̹÷à“s W•Qêƒu:ºÞƒìù]èýµ„j8äØi?Pc¡’Ä“¥ßâž…ñ8$jqfí̵^y?wžú=è :òC­-›�¨ˆUèö%˜¥*MŸPMnŸdéê{q~A�»Ÿ“Q‘{,²ƒcêÍ@ž2èÆ¹E¸6õãŽg’S©xòôóZ¯DË�Z¦‚4»ÒÑl ³Xèïýžvw_)ÏèIªïn‹PWÉqIB:¸ØØÒ¡ ”3Úãf(Rö‚leÓ�é„+ùF‹Qw.�<äL/x¡¡Ý�Æglrí.ŽÓÔïÑΡ¥|mÝs£>QFß6"µ´BÝ/ [ïã»o7—¯úUBº•tæãñÍqÆxsnYvÝŸ‘$?_Xf ÒÑAV™¬~·"OŠèE¸ä¢‰­Ÿh¼×=L5¯€ç–]ûQþqêõ ÔEa.©æÙJîZ÷'í]²éÆèãwô“¥/àÜ‘h®”A\ª�T:$OÒ©ºsãE;€ùàBlš1ÑDwp"�ÿ¾¾¼™ Ùök%ÑÌR8è lº1eÙÊKp~)Y¦Ó:ÅÂ*ÄR•##ÜEÏmÇ´ÈñGš~—tè'@eŸJúFsq½}/‰òWøDŠÈøé¡ ÈɱöA¬ëMG²8¦M¡#1 KôÁI?Ùw[q>î¬F ùtP 8ÊÖF—Â}#šßc»·Ý…žâ¤3¬(F1¾—®z'NÞÖ¶ñí¤µr[4[_uUñ!L·¸Oq­‘‡ ‡±®Uœ3”§å�sɳ1²>‡p^as_,(¢ºíScvñsü뫪8߉ò,õ�O«f¿¬Y¾R5{»ÖÓ·k^ÿE4<]¬ÝGC'ßnXÀƺîÝÝžÞÞÀeïŸ-ËVÿIåçI‡†Š8ž=äÙïjêÏÕ�ëÞËÆµ?«Ç¤—’çÿ€¯È8õÊTÔG�©ù‰Ÿéí ²lõŸiRù ª yQßEœ‚ .„ÕQ˜÷$S˜£e¬ÿ–ýÁ¨R»¢‚E¹"Aua ÕŸvî‡#»̆8:íÈÆVß! _Ôô¯Í ´Wf–Ë®9Îùd• ¿ tA(WcÓDn9†˜RS«%Yóx§5â*Wƒj®åÞ¾�ý €Œæb âo—�õNßçYµ=‚K¶Î*Z…~Õ$iOÀ!ž,ËAi9‡1�DYºj°0¦ŠµÁ:S$£0Ûwsík1¾[ÒÇú¡ö¡“]ð×*î×@*åŠkzÇ¡hßE|ÈÐáÇ âµn“Rõ¡æ~Æ ¬_!•whRñúîÑíÙ]Ü^ô´84¬˜Í0oÒ…qtÃui=|��kÿbŒOÜ¡KWm'ÿBБq%…Lîƾî�ž÷«�äÿ�TÞF:4µòôÕìgØxk±`êq,yÆÓwcªK?ôû’˵ŒÝ1NŠr"›ÇÝïpbÆCw·—g+7‘t¬$Š)«"%#I­þl~÷­_`É ú{ÓI¶Iã˜c£«]ñ[•JqÅ‚õ”˜_],¬‹ø‰®.ÏìÙqá9ožcË%Ož(^nÄ7}´rè7�Ñ×½Ñø¦û$ù7\r6Y½N¥ÒA–þµ>óÂÇØzûÐ0õ¦ž¸e|†† q #W%‚'¤@‘Ñ0a‰_zÖÀ—ž©ðìž[I:~$ÆM�Äõ¦fT:Ò¡?åî[ÿwÔ̧*̇ígœ¶È "3„6ø°&Á»#ì^¢_¤ Š�U:Ì<’Z÷,²ÎÃAç!z$"Ç8Í�VqG£ÌGôp”yˆœKR©‚Ä|츪Ÿ( sªÄÕ®†\¡ÁôÝè¾:ltTNæLbÕÂV¦Ÿƒfjؾ³F¡\HQBdv{Ƨ³šÿSÎm�_•€wž<ß^Ä\ÄwÇ¢ÔÜœœ£ÎÓ–ô×´\E¸¢¡ ŸtŒ.ÿ¬ñŽž%ìùþ¨ý'V·ëíËeÙª›I:„l0E¤RœANRMÈêw©?íWåÖ§Ž@oà¼kg¢á¨q-êªõ„˜¼>âdÚ‹(g+Lg²y½�F£‡²0A+—ýølü®#¡ã”ˆž€²@D r49spùÁ§%ºEênt0a¹ˆtrAñ\4­få‚9Ë¿[,˜ã~a¸0WÿŸ±Je®8©kгaíÿi”X9¶K‘óÇ㼌ª… ¢xš—»ÿy¥9},jµ¸XXºêO©t®$J£+ bŒ„òìÍýõlèÍ1S¦pÍãTŽ�Ö¦.‰h]}.¡,Ñ8Ú0}ba€ËYÜ]¥¯/¥õ†¼4SÊ�°¸»ÊÕs¹HB¸‘ÓÐÁ…P9‘ I)¨K!]X$5ÄßËÜʈ6öåjKÚ'Ä[húè;¥JÏšv.v9©ªn£ãñbѰŸSi*MÑTüÌ1ï>1¥‰ð2œc9þsÛ‘x´)½X »(A&²Lô¯Ï‹1rNôyM÷y+kš=É1ü ¾7•ëÞãŠJvÍñ}Õê9ì çáü¥1ŸSä\~$Î%å‚tßÇwKƒéjÈcRŒï�=Òh—Ï+^` çÚã4K¾‚%„'ùêM/Ò¬(6œ²rœêÙTª¥%b|ÿ¹x�äß/ú scA!dvW�ÂsaR·­r¥š< _x–xTß:Æs¡EÕÂû�fA™FËï�.øÿˆÂ\yY³ú�r×ç×SëIèë;ž¤Ñ´GÏ+ŠK�ìaQf}£Ø¯£¿´@/4·tåG´Òñ Ô‡†÷C(ªdj>ô+Ü}ó¶"poß\‘µõŽ~‚ úNMª•Q=”€÷Ž,}(AõÄÍ;0ãH!¸ä4憥ÀÍêM)­U}j×w¢zè{$„Bä4|%v‹Žõ«K-DIëÅÌVêFÓŠb2›(ðjäsP>hëkx`G‘‹-Ê9Óï6&!jèùöaÛþPìI~>® ù´,P¦4Á“ô·d'á*G¶§öB º eÊÚ„V(Q–ÜPAöœÕì;?!SÔW¶Ò7i]qh,T{sú(jesÂûdOx'Ir|l­Ja5 ­ã;/Öüû8¾Çÿ�è/G˜—ÛT¸`œCŽû llýüðkPZ®{›ÂŸ¶Ôñ(¬Ÿe÷¼ú°ñ–¿ÙÏyQèïÔz �üØØýTˆ£ó«.ÖaF´‹X4AĹ؋û  úèiš—­>Ö-_ý[òoŠðoⓟÃûØ•+­ç¤õŒ,ÍcŽt°X$”íB¥ÑÅb²ó�jŽ’£d(9λ¶Eä–�<Ã}¬qÂ[tUpZS¸Lo7ˆ>L/°'ŸŠÈÛ§0!N…bÒÔF4—Èâ"ÕkºéAÑä�gu*®ðߎgò.Æ×¬½ P=®¨Ê×ÿ1*îÛ@©޳ûžf±�˯;I–]Û+så[âýÄW®Güñ„Bp§õŒ,Ë‹VŸåøNös|ÇãT �ñ-NÚ?¾]s|÷ô”î¤SÀAhK–ˆ‚C‘8ŽÆã�:,šÂB9.‰Tc0åŽÏ¤sã”®øs‹T¾ñŸSÕBËæIüŽ—ã›Å©–.Ÿ½Õóðþèu'âó•eƒ¾÷»XÑìUÿoˆ?¥ØÔvÍôJ6Þú�)dzH!X�ó‹ ŸáÚ¹sŽ,{ ñÙý\Ǫ§ï¼a®¨~‘ Z•0EB¾WsýŸ� Žh5à–¯Øh%Èàî?$©œFžeíHªNCø3î¹å¡xÎûª�÷D3ÿU«çˆÊï7žÑVTs|UTõól\·Ý©cC{4´ ˆåƒxÿ,»úB6ݘ4B½5å¡ÖùeM*:¿)Ä¥ðýí³ðf˜V ®˜Ø*žJG‚K„”�o#Kÿ�<ý¤¦ÙûÎCÙëOK‹Œ¦.‹dé£@ º)'¼ §â“.´-ÂT'p+L�Xÿ^I®¥R=’›\Oçˆâ‚2M‘ä›�wEÏŠ>¿éžsÙJ“GÙtãÞ ƒ]J�.pnKºÜt(K¾*N¢�Y±b<_ÎÒkÎ w‘$=À¼Æø)ÔögA×2¾µeqš‹ÓJ5–ØT}•<ÛDšþ•†üG5¸·�ÆÅÐt:¦hžg óq ÔâZ œ×F+�‹µ\³¼îh S-�PäfO4¯J± ÓÿpHô¹¢¸šáì)¤_* ñU«–�¶h”eä6ÝZk×wJeðÿâü…q÷ú]Õì�lè{´¥ˆÕÄ”–¬*—P©vóó(¿½"ëã>G4Xj˜Ú?|>¹¡èqߊ£Oƒþà&ˆ�)æÃ {õÓTª§îÇ–EƒÆø‘¬þ*ê�„4ô“諈Ÿ{@ê¹—ød®Ðñ%]¶òƒl¸ñ¾F½è×˧ÞæWŸ/¾ã_pþĢ沧ÌÜ”XLÀWιFªŽ†äáI…ï�~äû(ß'«?SÅD®¼v&ƒzÚ´ �4#D/ ÿÇ §\«Æncm«|'Çíÿw‹¶º—œ0GD>NÈ¢Éj:¨*IEÈÓïs穱Za­–�Ë™mña—&oŠ qS¨$%"çOg‡­».J¾¾0nþ{£ØÆ‡~H¤òyœ;¬=ã»ÂÞ;\âry6DÈŸ‚üQ…oƒ~ÑÍhçV6þý ”‚µ¶òH‚[4ýÚRªå�±éÆW)Çw©é*ç´'6¨úÌóø4º•&ŠF¯œ1“¡Ý3‹¢$ãnBž!.Z¶zÛp¨¯%µ•G’sÖ¤ó”D4H¬ÃÞ´DDÍwéªy KÆØN±ЯDžÑÕHÈnÁWj13Pá‡Ùðùg]Õ¦BÃ-"+šûiE}ÌýÕÇ�yñbeqwU4ûT fùu”$qšý×½¼Åž¤ þsKWýšúêõ£áâÜðI¢õ�_à®[Ÿ »Û'ܳîq–¯^�KÞ›a€Hkˆnž|r¬¨»Ck«~‘ÞÞ¿~+B³`Åôö6¬ FÑ*rÄgbp^må™BòïàŽ�mœ SE5fEÈóo²/k�»ðÙSdɸçæc~/.n çÎÁÉQm kˆµô£IvD@¢ eÉ×é_ïØzõbèq¬ Ðß/û°]aÉO'lº1•ʪß%©.hKg,$ Ρò¯ “™;þx‚ß&vdòîQ£i¤Ëµ¥!L±X �ð•¾�£þär–­Z.âÿ èŒyïm߾藞§O�­Wá>BxõOPI§ÿsƒc~÷ª«:˜=;ãY–à|!ŸnQŸB“rñúÇñS”wW�D´¯{)-1ùVúûv3ÙÆöìí ¡(2Q wÕÝ c_¯ƒ•rÉå|rØ$÷±ðƒ×w’ê@Ó]nGå|¼;’0¬ó "$ä)Ù¢òìê¿&©|06UÑïjž_ÅÝ·>3*Ç|b¤È†¨ò ËšþóÆm*oÏÑY�‘õ­Úu­æéíÍXºêz’êù£³Šç#­?†OÿŽøìO]a�Ïm¬±tõÇ5I>9º^…**9ÕŽDÓÁßã®[?W.Þ“xú7âôL¯ôçäÄžÜçfˆ«ÜȲÕÝšëïs÷º;â ¦?~®V‹“ÎT}JÃL8|‰]kbê\OüÇæ. îß.a®øŠ#Ï¿¢ðû¼cáú1¢Ž‡wikm†Q«úûs–¯Z�ï  B-^?ÈS0¡]ÝÆOÈ.9�e[ßIïÚÿdqw•Í}õI¿[v`ë»1åòU?A%ùX-Ú†’¨x²4׊|¾ñn*‹ð~FáN™~ÉןP뉋@–­þ|ò«1þ©¥S *õT*‰Ö‡þ€�ë>Ñȵ’B3üwžá~’ÊEm©^5áa‹CUIëJR½R$¿’e«û½å?Ù¸îÑi·¼´»‹Žêäa!âÎD8W‚¾MÙýóÀ],î®ÐÛ[géª�Q鸀ú`›4óª#«ÿ•n\÷3l .N†·W¿K[™�ø\ú34ëŒ,]¨,éžÛÐ`ÚQÇ_Ë,>«—_÷îºé zzë×»ØÓ·ø\4«í­Ïé“x-–_ûó‚üyEÄé45X¢¥$¯�;Ö}»±˜=³mÂ$V°ÚEG˜8½g�Ћ24k!^ç¶Çƒýùî¨�–šOà7¨VOŒ¹±m±<9Bþ9�ùâOsûíCžšsE£$lo3¢·‘oÌ;Û’^ŽoñÍñÝ(ùʱH[܈¥O~jåuÅO:‡Aˆš“¹C#U­dýú<†ÉÛ§ä?AT¾¬0|1Tš¾á²bñÓ˜&«Æå_eùÊ‹K~4 ó¡Ýïâ¾/î»0�Ç«5w¥V*n<¥Iѯ´~h>Wa•Ž“ãwÅûšsž¬þð€L¡ÐSüNoFíÚE>MRyi=nG‰ñ*Šþ郒ÖI7®ý‹a®IéÃÖËVýª¨~­tC`bÚJ©‰ù¤&"5Òtˆe«¿ ú]ÅmFõ1”Hl–iUœVÑdäó@ŽqGƒ œH®Çá’ØªOÒ!Èô)6÷¥\²zŽ¿@–N·Ó 3K–>®þ¿0iK¼‘,¹¡Â¦Þ”Ë?´ç/ŠÝydšÚ¹8ò<#“¨Aöî½½JW×È�j›é9Z_Ÿ, uùª_¤·÷ÿÃKYó \¾úRIÜo î}EWª}�¬çxb~¸Jø#ŽzÂÅ=ÊyÍ�OUʼn ò(_;ãùøæ8V9)H~®òv¸TP%hÑÞ·±Xë‰yæµë�‘�ýxßÓG€\âȲGÕ'?Ãí· ¤lÊjc|¯¾ç.$φkFûqPà!K�j}‹µ$‘³ðIiåšfA›¢Ö@ié×SäVWò@N^¤KŽ·Ñbü‰0´· VŠ×ЇH ö¡“ ”¥m'ðŸãÉÓ‚þ@KiÛhú^rà t÷ù£‹˜½Êù¢ò.¼ƒ,ý¾黸ï‹Oíw­‹Âü­ÈUc¸4›¥x…;Ç8Þ@­–HÎÏÅTÈ‘Úy¡ÝgCkÙ¸îå K¼–ÊNFûyTR”|rDÓg^rï}|Ó{”üuã-÷�u ’fu¥uwpùª¿ ÚùÒ6h¬S¡œÔ²¬LoéÀû‹w‘ Å³ ~°â;’²Ä¹Épy4²ÜdVOï€-œ�>ÕèZSå‡ð•ãbÜÀ´&šÕØÒ¯Òß?¸�AÑÔÒß›RûÀaªŸAÄÓŒ×*}AO’¾«3Ñ«¬/ò%; _ò4‡6YdÊ8 çOIþK¯½S ÿÉï‡JLëJÃ,*rÂ?² ñÒ–ûPk'{²ú—Ùxë—£ÙŒnÕ³Æì¹¼ÏÅtB¾¥Lyœ4-%È9�‚–ӣȓM÷ nxÉ×FU©ô=štÌmK,‚J ñÍþ�þÏãûÆ©6–(4�Sj×wJžýÎ%dy˜ž)\cþmàqÒ¡gã{½ÊüîÂÍÎÙÿmßQô§ƒ�?L�^œNž!2Ô8Î1ÌRn½Štø¹¶]Äñ¥äþJ*Õ�/ ¸Š#dߤòƒ)]A@Ó=±s’œTT„l}þ‹f...̲t›ºôÝÜ÷ùýæeùÖÚêȹ˜��XŒ¨âGÈæè4Z}Js{Ãßü2|r>y:rAZºø2Õäs W†Çtõ÷gÅvKn˜Á¬ÁÍ_=Ÿ<…¬ž3 ¢¢èäù£’¥Ü“ÿ{¢â]e1•@O�ÓãÒ_&ÚDRMP�žÙ{_(‹U ZäÅf¤iN–ædiˆ½^µù Y ËÊ¿ç�beÁ—�…F‡.Åã]úp –ÙÑ·#¢L?}¨å<$·t�׬4ÖÙÒãèîö�|ÌþÞŒÚÊ3EçÜŽ÷çLRuij¨(âAØÎ¦/�‘R%gÅÜÐ6›cDšB¦$~¹T:þL¤r—hØ*¶JE¾#ÎI|õwqÉrT KM›„yaâ#d©ªû ˆ>ï \²zpJûÒ4mK'*ùZTåCÏkO‡µF¡Ž°wF´:•Ö�²R#ÞïöÝ_Õ�ÝÕ5ÉøF†�ïþŒ‹»�‘�}‘¤rIZÖ6Ç·Ê6îíh)œ/pàܶ]ëX8åY²PÔpŸÄ×½xÖn”½“¾ÐY8éŒÿï9€Lm"¦™©À�NÞ2UçPø<ýýYQ$¥¹ðpþ¢–Z#¾OŽsòGÕqýŸlZU(kµ¸ÏL—S©Ì"èðtµ¨˜)°¾¡èŽ$Èêø~ 1V@Pý&�ßgÉ’(góno Ö,½+®=Ÿe×­‘™{çnBüù¤CC„�á\¬×�T!<¤iúKò%aÃÍÞ®ç$�É&…}ÛªÉî$©œD–¾6šz“²‚”k}kŒ�M’Ð4ì�1wD sY×¼ÒYsÖˆÊ>ûO4)¸÷³lõïrûgžiüeXÜmE½ë–€½‹?x„›1ëU~ çæ¶QS-ËJÆó.;ÍJVç´É—;ÅñGËKQŒ§åœBÈó˜ûÞÖF4€jN¥šhVï宵ߦ»Û74ªNw<Ž+ éL¿†ûÈ eã}”+¯�É@(cÚu-³éÆtXàNù +‹âøžæ¾ é«vþÝtw¯¡¯o¨üK£Ò”>ôáÇqÕÇ:Üž—WªÐ‹KN*oí¸ßeÀ¸ Z¿¾\°j,#Ê)E­þéf”¥ƒ·O¡Þz4ÃÞ()KW½£ØEÇ9‚¢×¶ëÄg3€²ØÁK9Ζ]{ èò¢ðÓÑíâÈê» õ”ÚZ ½œ‡‚¼­hæ3üšÆc�†§4ÍÞÍ=·lݧԴ±(÷éxWñLŒÌ7s¨Šæîk@k°ut\öã³…Á&ÏdŒóŽŽÏ5ræ7Å,=®úX{ž=­œ-°‘åd¼﫱ó`=Zx+±ë[ž¾DȾ¦¸›pþ?Y#¥¿|‚òÎMaÝ[˜ ïY÷¸^~Í»Eåv’ê ÑŸðš õv}©ðmfm)ob;ÏÉÅ.?É ò ºlõ'Ñú?±±ïùá+)‰7eGõX” y7ÊûÔ%Ç‘g#Û¶E¿3ì�råù,g6 _ Å`¸ nÉ=מèæ”=‡³¡¯²á´ÿÙxJ¡“sIâ#:+í±GsŽ„‰Zi6£jwsJ³ú´¯wœ<4DÿykàNó#m,ÜÔˆ�¸Pžíøº|õo³gæ·Øtc:¦¦°¤{.³’sÉ“·ËѤršÓRëº-#Æwy­ýÄÍoS@\‘§e7½‰{Q”�"O‚\<ɦ‹¦Fœ<4•:¯+�q®!éè#7º‰’S©$¤õ⮾'FhÖEí¸ö¢1R c…8Í „w7*­MG˜—û¼òÚ™ ä+¢¹}ä>�#¯ïÄËÝ@#ˆ³qÏýÞ‹qÕÆ´ Fs»¢ú–­úMQæ �ʱìyñ8¨žŠ÷]±A¡Ä–™ aiýëêô_ÉÃúX¡®`¼Žqc0âf”þô[¿§—}h…¸Ê©tœÛìÍ} fþF‘Z”çø¢šÖî3úQä‰UÚd’!dŠKЏ¿&ã÷Y¶ú[(O9Ð…èá<ÄðÉì˜ËÛÒº­fgTøÏ¯X}©œ1jŠMMM?ÃÆuß-:uNž;¥PÞ«“$'ŒòÙ—éuyý›lXûÌ0«W£ò {{#CftÞ½ •Ο,ºÃ5O[CÑÈ+PvzôiE@÷pɽìye ›¾´·y‰Eצ$ÈKF¯®ArŸß¦µ,—lÎ�TªÝdiœ4dJ[Û)VÀ!–.ybøŸØ€H7m4"Ñ/ŠsGâü;Ç Øk39·h±Ó='hxG¬"Ö·¸™ÒSéX€ss Ù8;‡ª¾’�çϪÈû¸ç¦ÃȦ9|q{öWv9 �Óÿ¹W¯•&4'åü¶]êr±¦…ÖØŒÄ…Ž~‚8¹[Ž›IÊ•í㎥!$½? q§ ?'¥¨-_L^õ Ñ–…jãXÚ3¾Cþ >m~Y¡q­§¿˜q„ BaÚŸz½õÍŒLÅMöÛžqy éîvôIΞUW‘TÏœÐuR¦Œfõc㺯72/JŠÀMR} ¾ÒUdô4¤¨/4èoA�ãìÍy‘x»ÿ4rçõ*|y™ý«>†¢:\«Õ«ÔÔ•‹Çi¸ â}�úàóÀ"»P^}‘g…ðTÀ=Šã ÜÓ|ã¦Ñ}á59n ôî_lרæ’f_áW®fÙµ‘ß%©Ì%Ò¢wìÁ/Ø›ž¶sûÚ�ÐãØÔ›B.Ÿ‡úoáÜ#:üLqÑË”¬5‹pnÛ4Ÿ¼öÂ<ÖT:+„ì>U};÷®ûîQ°ñZ¿ýš£AN,º�¶G¸9™¼äk__N­– zfÓW8 TBÑáíú?÷*£žþÞ@w·çŽu�«†Oà«Èhïø.ã F�o5¾3D„JGBÈŸAÃŽblN|ˈñݸÖrzq­Û•Mð8ϼZ”lž$½\\ ¥[€'⹎³‚‰M«sÙ5e„ƒÏbÖÝíé%°ìÚ·ã+Ëc¬Ï8Š€¨T!»�»ÖÞ;fTzÑØFD.•‰P¶Z…‡á©B™î%)\owl?qç}"†§œ9'„üI²46�i”{-2fv¢Ç0zm\¶P~a3›ûêÜxcÖØo­–4^Ýݾˆz�r¨Œz�–Ķ<Ÿ“M.Ú˜ 6Þô°n¸éjÍõJBþÕFW¥Ø�¢p´D�^N¼¥bãÚ›©ýO*Ékº8)»°‰HÑ‘*%ËþQ%¿¸—0fÇ>ì ˜ô·B­¸ÏeMaåŒ)ôjžòÎùÿ‹›’6¨_SØŸ’ÅüLïH‡þR_yîíl¸ùÑ1'�F@œ?q‡µ%P*–º¥ÑJs\3l1øGÓH—kSR‘-€K*iŒïuŸ&üs*•â}=Æw‚Ên͆>¥"KPùÞô»ã;ð�ñ]\ëôØù í¹ÖEÚ*ÛÙzûа¶ŸÃmÕ0»»}Œˆ×»ñ‰k :â{ÍIªsp²<žKí µ|І5“,Æ¢å$Ïv*òÀX•Ò„ÞÞÀÅ×,.2Z³šbëR•ï�jµº¿”)rš½ƒ¤Red;]%à6roßÀ°}–m�Óp"â+Œ’è�Èó¤õWŠ¿¯ÞÐ(Óß‹0µQx�ÅÔ´…¾¾z==Ž�7}Eï¼é�ô*²ìŸ€!*ÕXÅ@É íéõ×Ü›¾ÆÑþ¯bÒÓ»Öý&ÙàoS©æè"Ø•²Õ$Äzï•jBÐÝäéߨꥺá¦ë¹óóß§]Ñ÷Ѻ{ ìþR9È”Úõ� §Ç@”ii‹¥?4Ó<ÿ9Õð $‰¾ûqÌÏÓ¢°‰+„„>¤iúݰö#|çË{Š^êãï7è™x/Ó$ñ@@„<¯SE¾ÛÆÞf9Ôó3q¾«�eH¾3á§úúrzzœn\÷1Ò¡OÅñí¤¨/Ñþñ­cŒoÕ—HÓ?UÉ.dÃÚ�³aí3Õ6‘oâÎ@üŒâZO—8ÆEÇ ˆ+¹Jk–Añ9Eÿµ°LâGDä€t=ÑíwWÿW’ʲ  •_qªáwÙ¸n{\L�H±*{‘WÂbœ;jŒg"Y8bÎW;K‹€ÊU㸽)ýç­ûlÖ›?²P’†ŸOiðöi�ÚòzÍÙ‡ ½7æ¿ÅÕ‹°á¦ÿÐ�7PU/Ô,ýmBþ â RMH*®¡¹7û�¿Ö'@ 仪´1¥Éë†u=’ýâëT*ñüâ±—–‡©{ñ9ÕçûDWªI Ò˾-Yö늞¯wÞüSlXûÍØ�¦(«8|PìÇK$V2rïá’«æ°iSÚ\ùç' z<Ó–-{«<Çás^aãºOkšþ4↠—Œ6¯á>ß÷xå5,+8UªÕç4¯BÃ[¹û–kŒÇ‘GI#BUΉ¦Z¦w}•€s ò8/¾ZÔç:6'†Å¸Diš¾§óÍA‹–­ €Þ^¥§Ç醵×l裈ÛM¥#ýlêÈk2-/W­ãÛã;ú?�,ý%»@7Þüß¹ó–Gâ}R�v�ïL}7àèïÍØ>¯P(üøÆµfšûP--|#¸’R�ë´3>ù�…g|b:yüföŸdéËElÌØ×5–Fä]\vÍqqŽjGÑ£¶[…^yíL>Íáã[™N:t7ÇÔÿ¤µaÈ0Š^äÎë[ KäˆE¸ !'Ptf›þ'Zj7‰pYá'¿SΆ‚×X^÷nÖ¸Ö �»ùÎFÆ'û®¡E-(š•èql\»™ 7÷è‹õ% —i:ô;äé7@÷’T|ð‰Gb§ú8hÖ˜ Ê$/-_Åwš¯b[-ÛŒ“x/Àcœ¼÷ùqÎFKM=ܹîÓJ¾Œ�þ ")•ª'©DËCä3|2ky•ÇIðæ…$‰ç^©–AD›5úÍò+Ô=uQØpÓ'‹Ul¼ŽýýyJš ŠDd¿^N<„¤r‚t¹–·];¿%8ët\RAÃô¢‡ú_ºq/µž„�7ߨY¾òÛ‹Å��÷¾(j=ü>�x•ï×Q\ó:/„ð]ÍÒ_Ñzv>w®ý=î[»³ÅÄ>þT>œªç¾óÊ~_W)‚}"ÛØzûÐè |-”…,D߯�Lsß"±ùC6„¸föÂw‰ÞÞø¬nX÷YÍë—j–Þ¼J¥åÙt¾uŒ7ýßÃ_ÅØi¸Û*Õ$.€%'dj:øÇªyM�©_6ÜüÇløü“�ñÝ×—.™öŒï� IÇbYºú³\ÚÝE¡Ð ¡�×ZB.hÑe­Q…/šØ¯€ì¾“Ï8ã�ÓÎøÏÃ}òk «µ¿¦¿¿pyô=¯Ê¿à+0¾e¨4»ÏÅùk¥¶âà0»ÇV¡Aò5$Õ…1]k¬à×"H1d»ÔùŸŒ9�½8,žGU¹hŒ=j,¡�í¤Ú9¶¶?ç�íY†¯Ì#Œ˜÷T5.,ô{�m�B²U9XQü •†h¥´—)Uj=I뻈–çstfÍþ›wKóf3_®ÜÜ£ð[,_yY~�j烞rT’.®{µ\ð7ÃcwËÿeÄßZ3`Dh¤……!DRDh‰ÚÛ$ÛøûÚo(¼ŸÚµç¸�½KCXœœt!®|ØG_q±·nÕºM·ªsqúóÓïÛw·§o±¶¤s”ÜEÈ÷Ch˜Þƒ�Ö3¼.ý}}¿@žŸEµc¼\Ê}¡lßÍ‘¬/Îií½ ïbÙÊK$“]ކsq~&I’ŒùP�÷C ú§óÉõ;Hþu áKø|½\6¾™œW}¬ƒÝ/I–îŽ&çé¸$#ä] 1xfÌ¢.±2 ¨, ËöõiÝS%D?ž<Œ{2æ¿OÞrS›ãûÖïÖeÿíD²l¹(+pz:ÊÐ#Qé,Û8ØxVSTÑð4*�!ºMqw£ÙwÙxëƒÃ®Cw·§ï¶Ðè¦×ÜÔNB˜þµ€XóÚûŸ†ê3ܻ鷋í·çZ#Šâ!}¥µ^¾Òí%Öì×o.:ý'òÇ"‡íHÓ´Ó¹Ó7ÝÚeKxdc÷÷¾çû Gä¯È³ë˜¨b�¨ráçôÊkÿŠ//€þñ”׆²�ËÒ•5\å¿OÐÒ8öæöI"éÐGõ®[Fg™4)"Æo¨Àž GEŒkQŸŸ°�¯üÝ3�íO‡R‘qzU�g#Ë�Æéä:¯]¨Tx¼d„PG€ð<®ºƒ�ì%î»yç¨}”­TÇ.Wÿ{Óë¨t0cVN–Mo¥—xå•T KËÁ ¹cÙˆöƒèwB¿ßxâ×p�²AîS¸ FðÊY„¡…8ŽE9‚8ö$CuäàÏàôQ:ºžà?ÿvøÃ±¯ìÊÉàöÃS}Ç+WNûzB¼¦{wzªsâý�ðXâ Z³z7 ¾0Oc߉24è¨W‡¸¯¿Õ¤<9eL÷f¡ïžÖ*¬àÊkg’ç³ô‡áty6çH…@Ž'Gd€Ì¿D%}•®—w5Ú§¶2j|�¾Ü:Pÿ]Téè mßY*´ÔÕVt%a ™öµ./k.9Ö¾¬Q‰@þõ‹�é¨äÒéÜÊUv‡Þã×Í�„±:²úëF,~"ËW—\2ý¾÷ª¸DTy;wþ㣾Öö€ûOó¶ôü5¦Ë¾<›l£¶Þ<ãûÀqø«cµGî_xú‘?ëòî¤�y”Røà` ¨?ÿÂm›·ýô’%É�›6¥,[µ\\²ž<Ÿ îƒÆf3„4ÉÏåk·ì(„Ýk�=$eU5Y¶úŸIªï#»ˆLYj9úݸîÅ÷ÆNËEʲU’¤zkQ!³¹]%£RM4ú6®ûô´5eq©¥>O$|³Å2×4[‹BxA}rZ,5Ì„(Ð#\º¹ƒJ²Z‚¼‡Jõƒ£f±Ì­×4ûq6ÞüÃz¾·ƒxÊe?>KÜàz:º.dpàkz׺wŒ8Þ¶Ö3AoQL ©Á͉`�‚îe`ÜM5«I#=¥‡fYÍFðÑ `}˶¡0IîÛDS¶¶+ûࢱFó¨ýµ0Ö>÷呂EVO Fºøº#ù‚"^pºæv!ädÚ¬ÔÕJy Ë{V ;ÐeÇ�0ópѾã@,^§:®^Ï}�ÁÏ&=2ì¹jeøØŽÛèß/as ”ˆ–I¸=ôÐ#+jëÝýýÙ¿-Z4ç8üïyq?Pvfy&-=.â¦ù,—Ìx5KMà§nÛ´)Ü'ã;Yºò6*�W8"B9•êQ’ÖÿH‘m•_K�Ð}}™,]õ©(Ìë㯦T:*äé�ºÓ­„¡oM˯;z'òÖ¦óyØbV’“öÄî0G¸\“Ä�±€ˆ}Æ5|w aýïý½™KVý¼ÂO©×ëDó÷3–«RA?ªð÷�Êrí ŽÄþ#IÇ…¤Cu~µø€´ºÝžhÊÉyC®þ_Ê•êמ/9 Ó.¸оÁ[tæçsûg†ß9n‡­Zù½§žþö./ŸîwöÎT…Œ1©Zº&È`´¶dû–û{jµ¤·¿?§¶úx òmDæò‘½´[7’“T¼¦ƒÿ�»nýK–TØ´iª½ç§CC3wKWÿ–V*½¤éØÍWM�Ò�ªáýl\÷2e¯ñ‰PDT–^{'I22®(Ÿ^ÕÜ�Î=7ïhéK°”nÆ¥«o¦R]=ª™La >ôz׺Ÿf(çÌ·]}ŽT:î#„áĽoŒT»8kªqÏͶÁ]À°m,¿öÄùë�zý÷ô®uŸk¯S¹ÎQL5…ÄØJ�+ÍÝ�¦7Ðî<Êퟙ¨à†aR(È�\ ù}ÞÌo.:ý;½ûŠwöÎ�gMìãã8Ó‘$3~`Mìö׿ö)Õì£1óf‚:Ý‚#dA|å³\¾úÒ"åôÀv»ìiVÚ“e«×hRéÇ߯ až§_Õ½Cïe㺗‹ïO&xå×aqôg·\G%”A¶pÏÂ(èöŸÂÞ“KšþóŸ‰ëˆmÃÞm˜¸ß?[’ÊMT:»€¯¢€÷:FÆ‚Çß!>|€‹GFNïÛ±×zúúr.íî’ÚêÛÄùëQ «ß£ƒ³Ö=ÑG]ŸƒE ’2[ÜÙÓ/»Iü~Ì*xpÚÇf …µ^Ù} ϸì˜9CfùäW2UC¸m¤s�í½w�=›¥®’ÿй7�’´o½…¬þg±€Ž§uKQån¦xù"—_s6ýýYKJT;jµ$æi×<˯ýK’jyšE}‡‚²XX¥3!ÏÖêŒÞæ¾WùÿÛ»ÿ »Êû¾ãŸïóœ{wWZñÃÆ&Ä ÒJ++i‹,�,`·NâšéŒ»Ô u:ÍŒ›L Ó´µ3nk,d�;MãŒC BFq×uLŠmXÆP“$­0Øbê_ú±Ú½{Ïó|ûÇ9wue­„¤]I ¼_3;³3÷ÞsïÞÝ=ßû<çûC]C�§Ó±q2ýªb|µ<¼Ê­ÎM�Kõ뙑úÒìÄös$-¬ZO“ÔçR–ªŒú×¾Öë }—ä|NEϹjOŒy3¾Çƒ>;í1¤úrA;©h¾]]õ^�¬/«ŸaÝÑÄX›Z�¬/uñ¿~ƒ5{î“5†•SVÎ/xHWMÍ[Ÿæ‡ÕY•›”ÿfÙ²æÖŃê1ÝÍ–ï.ËRÕY|º-öìRžBlšÙ„ç»rÔÊ•£Û®Y9:ºÓºwëÚt¿lñR9ñ*z‡êª™ÛáL Å×´ú]oÒÈúrª¦6LŽ‘R_¹Øüõ÷XlüŽÚ“�`ÞõƒzÕjÙbð²õAÿæç×ÖUG¾%>uް «ºo›v—ÐMß™ÁOµ_§s`�+Ʀt¨¾.ÿ™´.hÏ™Eýá+Ú굪¢x§<ËsºVßø³çdy³Ú­¨*@¦mu”Êd¡¸I­ùÝjû~}žê㮩>î]_낆‡ãÔïcÓ¦¤eÃM­^s�IÈÂùJe)iÒsùN�|áéúCÇ´ïûñÝÊÁ\Pm]­[ôõÑj@ˆÍhzQ§³’¤°]ÒltsNŠzUž%•Ÿ³ä¼v+}rAŒ«v{ÒdöÜ�øÖõ—<÷ZŒÑ¤Éì÷•9xåSÛ¿Qß%e;pÕ©Ô�¯^c ®¢÷7«ùØÓœ‡­ê±8Ó¼¸Ç/Zs�6Ýq›¤:[ü’|ô[ÒueB§¯øÐPò/ý¶Ë>¬O¯ຓÆ<ËÌ«-öòi÷|µ¾uÇWêkÛ®£ÉÀéä\8í‰*!Î%«ºòÍôœÒù‘m@�z†ù´‰À&óð6×ú¯ênµ´ú_-1o|JEüg’¤rò+ºÃ'´l¸©‘;ä]ù‹�©�¦«Ë7ɃrÊ‹[tÑÚóÜm½F>¿ýÐ/t½O%¨ ÷5ßá ÿQ!žW�,7—…ì©}…¸óþÖjî$Åḩgu¯þE+šO*Xÿ ÇiVÉ+žw{#/Ñ76þP$Äá%Æ%»OŠ—Jå½RqêâÁß+d(ÌúöåTV3jüñêrn„ûÌ4–óßxÎYñÔŽ�õí�yì‡ tõÿãÀ¯÷ØëÎøœŠÆ•*'s5*~šD9÷¬‚B”rºÝs^§û7T•%Ý¥ƒ›–ù�M†º*K.û4]¼æ_˜ìý �ó•ÛRö®`îYnY12«ž·U¾WßÞøÃcLöªÎCÃý–ÛãYÊt�ëTÍüØËö=´é'šé9eªnûÊ›¬ÑûÞƒâ|i.ù—%MJö6…¸ îþù}oëMzðöÿ§áá eË\ÿûïX_óQñ•å¡ÇF»WSçÊr¯”ÿÒsþ² û®ÚcÏ©uæ„$©§ì•Zg©ao0÷·Jö ÅB)KeÙR,zä¾ÛÓä»ôÀ¾z$e|¬Ð_î:³º‹b@!ôW×®f0…ÊÝ«V¬þLU+»q_,püu¯Ê·.\iQŸœâ{SRËs2Yñóÿ Yì�EËéù}žoÚÕnýá¥Ï<3á’mªŽy�Î\RÐèÝ-ÕUºxí6 ñ:IR*˺DlÿÓ›¹»RÛUô¬5µß®Õk?ëÙÿD›×o;té`×ʯ㢵çÓ;Üm­,T3ØËÉj¥iŠU3WŒUËëÔþ®çüA}k×$é˜3·ëìyYϯ*Ø™ÊÉÕÝBÖ•CTÎÛf%˜w³Ð<üê݂ؼ\&©l«Êh“^–WéÁ;_�êŸ{ݺ ­›vùê5ï6××dÁåyú nÔn'ëWìYkîkU¶[Šý»Õ·wouõËíYÑSýE¦ªû¡ÉÕèéQ.wx»µFÞõ�#­É' ¿ÜMM ²AÅBjç4ý'Õ#U�”Ìå6Éf£›pBtVå&•$5V-|Ÿd×f½»Ë2É,˜¬¹v)™O)Џ/å=cž>½/·oyóSO½Pßë@~4ÿÕõܪ£Øz¿èʇLÅ'ÔèYªÔY-{èúàm’™Ú“IÁNW£ñ>kO^£Õk6»ùWåzLv*ÄŸª“òž†ú ÔgÊò¯H¶Ü¤Õ’/÷Øœ'ÏRÙ®>˜¹ªç«FK©½ÓRë“y²ýÇzhÓøTÖ÷±þŸwÎAí´JÍÞ vþùÕr§�ôÿ•´ÿÀLLm¹ëù¹g¥ÊêO’23OåZm¾óÁÎo�ád›îøº¿ùª«­Ù¼Ue»"5]àêC’«=Ùy¯{dá5 öšê§öêó]ÙN2Ïu}C¥\nòɽWëÁ¿xáhìÐ_î:B²ýãúOn¦—Y¼®ö8äHI`®é^•oXÿ Ïâù{rÒ¤{2;(�gIê!NxÎã)ÿÙ„¥�]°cÇõí�ëäÇxªæICC…Fîük?Í›Ì'ß§`ïQ£yºRY­¥Ny— Ìz‹ËÌì²ê¾iB)O(”¥b£©Ò2ïSlÖ¹ö¹Z¶[u`¨ _d!¨( y’R~Ü“ÿ±úý6¿{CÕÚøÐ}Ù�\çÃuÉl’wïB(Ës6×£.ÍÞÈÔ‘Éýn¥öõ²©UÿtÇvU�/›’·½l¯Õÿç´×«§æ"lø´¯¾2[h|JÁª w“éàá5Öu)Ãë&ûwܪÄI‹ …”Úß÷\®Ó·nÿSIû{ê!²Ü_î–ÕÜÌ—Ès)y=Ùì¿äI9'öâã;�“¬Z G“ò­h<6°t]¡8ÒÂù»r™êY¥±ëþÙ¥ÔBè !ìKùÿ”É/>wôÉ{ÁŽO¸ëkVÉfc[xd¤Ê^øŽÝ~ÿ×z²s•Ú7ÊósÕD»F5­°3oÞ•enòœU¶K•­¶»ÔW ÷©Y¼µ«õ}§Œ­úÞ•Нk䶉Y|V“Ö™V<ßkóÆ6ªÑó¥:Κö¿/©Ý–ûížÒ´yãßñeÄÎýVüóyšê»-ë·ãâþ^×Dt6Dªç´êöÔnIþ°»mT²?Ÿú=Ìà2&ýå­ ¿o>5L4¯vWÃLyÿ?ÓQÎÝÌ}<ç½ŸÑæÿµgê9€9¢º&T%©m>ûì¾¾Þþùï!ûrJ’…N{'s½!ÎAûR~ÊB¾¡½`Ám+·nm¯“Âuz±ÌõY}õV%²v�Ðßô®_Po±Ür¾@Ò?’4(Ù’ú%õÕóßµ?®{[Ò¸\c’ýPæß“k›=žÕXßhWs’NMºŽK ?ù¦¶ÚÃÅkßí²#÷_©#î$ñà5²á1IGL»ï?ðë=úÅW_`Io‘é\¹ÉtªªŽ¥ä{%û�\ÛÌlKº_#·�þܱfô;  xÙè^•o]¸ä-1„�Ï áŸìÎIYÊ¡ë2£»§`ûcÔxÊ?*¥[Çûö}ò¢Ç¿ÿÓŸ?ÖI`S¥RÓ퀭¾êt?CHÖ+ó(·$ó¶RÚ§"îRÓ~ª{n›öè'#ˆÇ©2ºnûKëŽ×{}à¢ch¸_-%=´iÿ@°ÎØç#.3íñ•È·j¸Oýjª=¯¥‘ÛZ:ø½îø9ÿ{²©¶¶Çô»|±/a]¥cÚºhðò`ºy~ˆ‹wåTõä®Wå�Ìõù!„vµ5ý…vÒGV>µíqIºwh¨¸dddv’ÝŽ?;ä¸Û™ŒŽ~eè¼_'â½9¨¥Á‰|2xIè¾¾ýà9¿ö ½aòú"„ßrI­œ§JÑê@î}!D“Ôö|O;ëúóvn»¯¾=^'ùúv�8>è^rºWå[×D³ç[8{WNSóÊ; o=!Ć™&)3<8<:€ãª;imËÀÀ¢ x}�…+J¹Z9OÎ ±LšÈ~_’®?oôÉ{:�û[¦ GŒ€à¸èîô¶N*.XrM”ý·ž^½7¥ÉFÍ^3�§ü¨L7,ݶ©~SЀc@R€Yו�ž¾½xñÅ=oè vážœ=å¬SŠ¢9‘Òö ÏûÙÎ×Ýv©F˜‚ÌÀ¬éoúÀÂ…¯í �F×ïSÜ“³/ÑÆs~nONŸ(•þG5m;SЀYÀ–;€ëÞ^—¤G×Ù‡›ÁÎÙ—³æ… qÏ?“û§[©ý© ¾÷½V�ަMLAf+t3Ò½º~d``™YqcÃìÙ]Y’Ic-OŸoÇ[ÞüôÏHÒ½CCÅ%##©ÓêÀ̱BpL:×¼¯�Ò]gŸÝ·°·ÿ}Ñü?÷Z8Å%µÜ'”ó†üæ;vûì¸$šÂ0G™×_ßY4øÅg—þš?:°ä¹G-}Ï–×­˜×¹S5—œËvÌY�€¾e`Ɇï.^ú™o½þõ§wn»wh¨p9€“ìÿX AÅÖßôIEND®B`‚pydantic-pydantic-e28e879/docs/logos/cisco_logo.png000066400000000000000000000161231526274674700224430ustar00rootroot00000000000000‰PNG  IHDRôôü/¸úPLTEžØ¥×ŸÚ Ù ÙžÙŸÚÞòŸÙŸÙŸÚŸÙŸØ£ÛŸÚ�ڠܟٟ٦ޟٟڟٟ٠ٚԟٟٟٟٟڟٟٟ٠Ø�ٟ١ޟٟٞ٠۟ڟٟٟٟٟٜݟٟٞٞ٠ڟٟ٠ڠ٠ٟٟ۟ڠڟٟڟٟܟڟٟؠ؟Ü�ڟڟ٠ڡڞڛ؟ٟ٠ڟٞ؟٠ٞٞ؟מ؞ٞ۟ڟ؟ڟٜזנٟٟڟڟەԟڕԙӕԗۘՠ٢ݤߢٖԟףکÝ�Ú¤âžÙšæËé Ù”Óšá°ß�Ô�Ô·æ¦ã¶ãÌëºè£Ü™×¥Þ˜Ó¡Þ“Ô�ޭݠל×�Þ¨Ý˜Õ•Ø¬á•æ¢à•Ò–Ò›å–áÁè–ԛןޚ֡ޫâ¡ß£Þ˜Õ—â´â™â¢à³áÓí�ë¶ã˜Ó¡â¾äšÖ˜Ö”ԟ֦܎Ѣԣעݬޛٙá©ß�ؙؚշâ¥ß©Ý¤×²á¡Þ˜ÖÁç³ß»ä æ•Ô‡ç›ß�Ò¦Ó™â�ϱà™ÛÞòÀç¦Ü–ä¦Ò¨Ý¾àŸÙ�Ú Ú Ù’ÔŸØžÙŸÚ�؞ؠ؞כמڢ֞ՙ֗֟֡ס۠עۣܡ١أԙؔաÙ�َӜٛα…ŠÜtRNSlo<�ž,•Wà¿ò'I ûö {ïJ Â¬ÑÆdVø~71¯§aY(ëäÖ£�$éɹ™uqiF!Û�âÙÓxB9ζ“?=ÙË´ˆL4#ýíݼô¤†€^R/-*矛‹€fòæ¨ng\UF;±�„OKúæÓ‘Œmѯ¡—mQOO,óäÜÛÓËÇŸ·¦ytpnmjaZSJ4âÏ¿¿¹¬¬›‘‚gd_@99965%üôìêéâÛÐÅ·´²§¦¢¡Ÿ“ŠŠ‡~{yaFBB@ϼ­–Žyva]ɹ¡ ‰@@Ü ,IDATxÚìϱ Â@@Ñkt±³°ÔÒFD„à‚ ¤³�4Α\!s†�Ê&íµDpIÞƒ?Àü¿i¾8Ù㸠£°™¯²â°È§a¼Ê*ÕmŒ±i^“}¼Óµ�ýn_ªÊ0R·ÔÕñ£ifË0p÷Ë÷6Ö]Ú…QÚ>㯴ƒöfï®Z§£8ŽuÕý‹­kww·(vw'v€� Š¢¢("Ö…^Xè…Þˆ�"è½üœafvW×\»n Œ�yefŸç|Ø7pør–3ÃÔy™9¯ý¸%iháG™âO�“ÂN<¶àbö#í´Û�'›Ha‹ŸÀÍšÚŽt3Ò�`)«µ /»*éf¼/ó)«s^ÎxÒL7ÈÔ#E�ƒL5ÒËÈ”!Eõ³!¡ÛcÛj•HQ• a¬&½äNAb:)j:$R¹I/¹ïC")*$îstŽ®<ŽÎÑ9º8:Gçè:àè�£ë€£stŽ®ŽÎÑ9º8:Gçè:àè�£ë€£stŽ®ŽÎÑ9º8:Gçè:àè�£ë€£stŽ®ŽÎÑ9º8úÿ}y�áåcÍút©rôÓU»÷^Y¸ØÌ(…ªæÌb…c½»W­rôê]ú4‹•^g9e_ÎÒˆeã›UûCŒ>g»0�A#)DUá+Öáž!F¯>ߨÉÈÒʲS›XøÁlZôÆF2�ïÌÎõ($õVâ§gÏF†½•…’/6W£¬êVܰ5�Û�CŠÞÃA¦Ò!U¯W™œ!EoŒ £x7Ê¢RüsŒ %z«ܦ• ”[l­U(ÑG¥á6,JÙ³ý5<FCˆÞ6»… ¼’MBˆ-«;eM7 ^V‡¢×vàå4¡À51àeÔ!zq\«eËp¬H¹À£Gä¥Àå}� ; Az¾2Òvl–Ñ'‚]× zåÒ¾jÚ…~¨Q?9éFªG/»íɯq÷.«zô˯ð“µu.}³áœƒ Î]µ£G7=12¦}V0ªvô»é~1Ïm ¯–ÄáòôžÒÑc\̘Òѯ<…Kb }1ù�——Ÿn*½$¼Ì’ G¿ýô%\Œ‡“eïÁÂ8 nôv‹ ¨RBÝè1Š×¤V¯!HôW6z�4¯ö*ýt‚T+jnBTUÙèó!QKÙè#!Ñ� B”¬ lôÎVge£WHAT�"�¢lôö�h¯lô!�ˆÐ0HV5z¡‚�(XHÕè…!1•"]·èŽÎÑ9:Gçè�£stŽÎÑ9:Gçè�£stŽÎÑ9:Gçè�£stŽÎÑ9:Gçè�£stŽÎÑ9:Gçè*FÏ‘GÏÑ,úTitU¿áò»MWõ.Òèè4$š“Õ Ó7ðè�¨G~ôJB�ìE~Ô³!rZ½/dª‘Í!Qš¦ x}‰ü(›JB´,ðè“Ó *A~ÜyÁ£;äG Ù~<»xôe%SËÉ�K¯!Hu¦� ˆç&_z=‡àщÀ£/|ÁÓmäK>;ù²í)�‹ý„¤Ð‹^äËÐEÚ÷Ö‚‡ýt=ù’ׂW²#=g‰–äËl¢6äKË8‘œÀ£SǤÏsY´þ©-lô£µDãMxU ÚÂËx¸+øè4É€×™yäOA ’?óΈݮQðÑw=çmKþT€Wj�NÃÍ|?—|ZðØ�K|1…½ÄFnöNò©Ÿ�ýȧ�ÜŒH¹¢Óâ8Ü/%Ÿæ¾7áöj }1ÁÓ ÇÈ·ÎàòiÑiö+¸Ä‘oŸÈ�z4‘|;‡Ëã[FôýŸàò¹…�jŽhØ’gÓ_êÖ0¾ýºç¡¿´ð`€ 4Q“B‹N媴X@ÅÊô—jt( Ϭ⺹ñ:K'L±nýƒêÓ;+PµkQ€ÑE%Š6nQ¬CëqôŠ´šT«Ö¤VEèŒk�·X‹ÆmÊ]”Óµj�b¦�¡°b݈‰–ÖiKaò]Q¿‹®ŽÎÑ9º8:Gçè:àè�£ë€£stŽ®yôe¤¨ÏìÝgP#eÇñ¿r¨ñHà@:½7ÁôTÀ.œ½÷Þ{ï½wDZ÷Þ»Ž]gìeü¹ën²$tO=»3:ãØîþÏf—Í“DØÏ+ÞÀ@¾yžÍî³{ŒýWŽaEúU4Kí¥cEcWÒÜÂFWö¥Yj_Å�NTèç¢ïO³Ôþ\ôÑBš[ÿ+ÈL§YªƒÙHXVFsÌÍãÜn‘Y«^Åò¾ÿŒæš&z#ÍZ)+FÛ€æœ ,gü`šÅz ,§‚æOþcº™fµ ‚ø�:ÍAe7Nªÿjžì¥YÍ›3…{RiNòœÀßæÑ¬·‹ÿŸæ·ÒœU¼S­¦Hj)¡9 ¤% €¦í‘XLsYzµ+ 'Ìò™ýÞ„á•®M˜µG¸\.—Ëår¹\.—Ëår¹\.—Ëår¹\.—Ëår¹\.—Ëår¹\.—Ëår¹\.—Ëår¹\.—Ëår¹\®9ª#«±¤¸xIu{V:ÅŒ'µ}IñFõ/©>ã@EÞV¥)KŠ‹·¯nÏÈ–ñƒKªKÿ/7�MÙlýùkÕÕøð§¢=ê’+¶½k£TŠªÆëVäl±5þ’¹Eφó†úÚ)"¶Þ®"¹+sJ«ÍÛ²¾¡jƒrj`ÍÖú½z™ë$_²ë©§S<+­Üy½AüIÅßüд̼ÄÝV¡p†*æ¯èù{Èž¶]z�Š¿éu­uÈ›Õr`‡«*6¯©¹w¨�f*£jÕ#‹T,gJ êæW@q©t¯dŸBº¿«e8�Ìì ÆW“ )Ûn¡B‡�˜PÏ~înš™êÍZ&ŒÁžym²­ã®ò4B*xªo˽J)ÞtoS4=sšlFfVe£¯F–•Ô" # %´ ÍDÕ†°$…lÚþåZMCi/ôQ<©Ê‡%’£gÕ°fÙæY´14XRmsÀ”5X1’|Å‹Âõ`Ù£ln@Zô+nPF #ýô\X¥‡¦.h£xп–ޏˆ>€¬èïôüª¢{_ùF‡uúÔÒú8XÓ5`)Ä@QÔÿ­ËdGßbzàŸ/íF¿&ËìE?RÓAÑ“ÄMô²"ù‘™³çQ ­­ ·]57¹Ë(P,F?óHŠþj2½!EÍÎ#°EjôB"ëízßqô/Yý•ÛnR Àh °.œ„Ö£ßÿ•‚H»“¢da�ŒÀ(þ"/úÁ°Ô-ªˆU2ÔR~¤ï²˜Æï°ýœ DÌR_*EÇ0§†ª¿¦ù Š�ëËsÖI 1zŽÖ3Ù$¶…‘ž¦#,ߎ9剉۔ŸT@µýõQ¦–ª/­i�Ý}Ë¿ô=ŠŠ+¿‡¹‰sj̦¿”õÌ[<8MJtO-8þ'É‘UN϶…¥^úKj¢–<+ÑSÇ`jdzã[ïè.Ý*ÛÛ‘‘P¹nÌ�à^ŠÏYA˜)Jä®:L¹ó"Ÿ”è¥à“¥0W³Ëý´¢’µ“aTÓè'š™©š£6 ÿXÒ°ÌŒ>IQ°ò„t«�@{kÝIJˆG/krd>Lh‡7lEK6=BG# 0®Ahzë×R™QV�„˜ÚFò=&Ž®rJÈÌ›IU‘ŽÞ Ö–äD†±à-�d"ýõÎ~ºu\üâé'–«ãèq‹Iºk D&_¥0¼©‘޾&8º³Iï“èÆJF¶x™xàá~ˆ V’Ð�BDŸ¸‡dk6W–]Mv9�ÞÖWg’MÚº�øp"�\O&²Žÿ?�@’U«ð¯£Dß_ý%š¹CG!RTBˆ�ÑGm$S^áhñ•‘\ ùîŠEôÓ¡ƒ¡„ö¥ËÕ ðM19±HPN+ª¦0::!XDr­‘C(&Ñ�K �·ÍPúêà)!Golñ§‡ßüö.…Õ>ž–LR¥øÁÓSl¢S—žöÌõ4#›A@Ù†œIškò ²`¼Á ’i%aô�XE?á[Ë:ÔKöõ‚§?â%GvÕÀzœ,¹h¼*’)w)XZ/Å*úe_‹�|jR¯ý�ÃÇ‹¢�3'ûÁÒÚÈ’Ò/ÁK$™¶Ð ÈŒ˜E_„¹Î–á²!Õg€µ#9´ Xþf²(¼<’h¼±)fÑé¼)„³ùžUedÕ~~ðÖ'‡êÀ?�,jÏ—Eòl6 ^B £¯D8ŠŠšù×Y�„p´à™äL–Ïñ ’£€µÉóÑ48F'Å0º7MAxº6}üåÙdA x[’CÝ8ÚÁdY�ÖÚ$Ïû߃•ËèôÆW°&Ðù†—º9(iv¯¯Íñ)_µ—ä)÷ƒUÓètƒ–¨Áɺӈai�ÐGmçCIÛŠ¬;^§œäɯ8¶ÑFa]}6™òÖúÁ)J%‡n ‚ÓL6Ìç£ç“£àÔ’4Þ&°Ö£XG§ ?¬™"±jð6!§’#°@<¬šl’%;¬Å±�N—aÝx mÞž²VD{‘ Ý`­žN²d×€ÕÑi¡ ëŒûIdðrÉ©œc·�•)o¤{v«.¢Óp­�è�¤ÛœÞÕ‹eMï ɆS¾§ÉKÒ$�ÕÔÑ©¬ÞFõƒH ½œÐ§äÔ&üqz/Ù°· NÉ“^J\D'êˇEjè:â•ÕðÑó�Cõ_ƒá·µBܬ’'¼¶8‰NT˜ïj°"ÉÞt¦þ<@�}�3º%ÉS–±0n¢uçú`E Šx‹Áò’C­à �ež&™§¶yóüà([ÆQt¢Æ‹Þä‘Ä+ï(rB¼“^"ËŠÁúþv’çd°”ÃŒ§è(ihFj „Xó9‹¥Nÿ©oªƒ3:Dò¼­�õSAœEÿCIkL�B¬¼�È™ôL°llV诟ä9ö¡ŸÀꉿèØaý¼‰ D‚‹‰µ¿ÎW7rÉ¡§¦©o–ót’èÈxÝñý§>e@ ä;Ž�g…ÀÑõ,rf] ¬Í=dM�ÎøM$ÓI“`óâ4:QÁÃ!,7±r`é{’3…àiÛ:ûþ©CH¦»¦ÀS â5:µ‹¦§¥wkS¼ŸÈ‘²AAtý²ÀSÞØ»$Ó±S8¼4^£SÇ öt*x�rN¹À8Ÿ,Ø5’*Ëzâ6:í¯�5�XžÇà�>Gެ­‹ª¿ìäÖ¬;‘\Ç@D+�Ûè¢ÖK¼“~„À·�YP'/£0N�P7É•5= �éÏã6úúà(·/ÁþÁ=9Ü‚\N¦N�„H-ÉöìD–>ë�Óèüç-¡WH`cþ‘£È�5uˆL¼J&®0y|ÛB’ímqôÑé®ûÈÜ¡%1‰Þ ÎWo�ÀJÓsÈÜp; u!tQ) tœ8P!0˜JÒ­¿ÞÖaz ûÄ$ú†j% xw×!–¶¾éû:_ï'¡EDôŸÓö"Ö¾I#󪊠 CélM%Öƒ—öh@[,¢§èv@Û0sÞÞÙÄÚþö�5�$V3ë-J§åU]‚ =‹¢  ¦ÔšË^~äôµÞ0$?kU,¼,óÛΈiJçQ}´œ­Ûu1Æ´0]R`¦öýSŽ£¿yú6í ý @Ìh¡hhS`JQ”¦ †6h,MMÍèßlíu“›€ )ÑSO~ ìƒaÏÊãC­Í]PØ?�õÇù`ñpkoóæŠ¢[¸zìÈI˜YzÖS«.X´OÕnë÷n¹#ÂЊ¶¢¨¸ø[XâËÌLÃ?äD?àkcãKvÛ ›ÊZ3Áûñ%2ñ¬)ÊÌ,Òí\2xß Ñ™»¦¨ø“‚0Ư¢èÈú–©²£giÚ4P›¼ËÞey—ÿM [jôx¡»ÈÄ»?Áª]lDPEË¢8zœGFþ¤|­ûjsöliX{QeUUåJ W-ïòAL s¹ÏIAÌTŠÅÍaÎ}—BQ³l’ݾÀ-~®#�×g RŽ¡èI4nÑ5ãè?ÞCæ1!'Ñi!"ä=Ц%A"ÿ�迳w//QEqÇa(Ž]ò1ùšÑy¨3“™cÃL�0¦e¦5E¥ARºÓ¨ÌEe�‹(„•ÑÆ•ëÚ´‚hÕkõã\ç¥3bŠá"Z5D¶°iî¹wƹ÷Âùü÷|ùÁ圇”���JÃ�«S`å¤××Y¤£Ôè«@ÐÄ|¥à@ÈØ<Á¤UAšõû1>•D·…+‹ýZ Þé2��´ÛÍ«9zA.Ðxù3´!ÑáöÓE‚IÉÏ\]Rmtòcè¼%�a%wç1= ‹)?®§’è¡O@ëÁb¼CÍä£ÃÉgƒH›Q(eÔ‚¢ÕAfÝ÷p�:¢÷ÖƒhÓcDRta›Ã(±‚ü·ãjˆnÏ)&H�z•Ï—P„¦aP�Û£–è‡/�Dó Jˆ.¬zœ¾ºÇ Êá;€T¢FÙ¢ÏÅ’WC,û²©²‡Â] ΔiøË| ,õ[‹ý˜!³+!—øèUH%¼dÒ…$å/˜ü( ˆ�% VE–Cè—®Çv”çüY{/ð¿Îwy^¶™ý ”vz³  'òeÇ‹‡#� %>kM$Äc €qí´NÞ)´Æ7½AŒ+ŒèÐrA¡òZ÷X›Žóëïvñ�ݽ¿u‹ÿ5p T >Òë<[æüˆÈó¸&ü c<ÞmO´�:Ú÷¯CaZÛ=¬,DqoŽËЬé4±Õ«EÄu“ÓÞb.Ö‚Â;·ÝœekÉ)/Ïqzíë|ƒ™H‡Â®6ã¦ÎWŸ×Ù¡+×u´ØFë ml„™éþ¡Q›S÷û#¯_6Z»K!vµNeõ9c«§sê]GÜõ;4À0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 ó‹=8òmUUUUUUUUUUUUUUöà@ÈÿµTUUUUUUUUUUUUUUUUUUUUUUUUUUUU•öà�@Ðÿ×ΰ‡f(¾vÊåŸIEND®B`‚pydantic-pydantic-e28e879/docs/logos/comcast_logo.png000066400000000000000000000263001526274674700227720ustar00rootroot00000000000000‰PNG  IHDRôôü/¸îPLTEÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ‰Ïóo!É#J ±Ký¹d_ªý¶ ®Cóp#«<Ê$Ký¸ý³¯GŠÏÿì¿ý¬óq%½êÎqÆÁ,‹Ð…Î�ÌÈE¿'ÿòÑvÇa\©ÎïÛ¢'ý®ñY^X§NIžÃ3Á/sÆLF�ÇAfb«ójxÉD>™ómò_ YT¤RM¡HB›Ä 8¦0ñS|ÊKEœ¨7ûýþÿüúòc Æ=óf~ËVP¢ò\ñTý°ñV¤+þøõŠÐ¤¡Î÷•\ðQöõúô|5õüû�ÑË'N?¥ÛÚg‚îùùnj°õÕÝup´ÿè¯÷žjíìõ&™Öõ„@ýµ~z¹þÍVæôûÒë÷âöêþë࿽Ü1žØé¥µú¸‘öŒMýòóæåò­åÂÎ7ZŒˆÀ„�¼þÒiôv+þñêÆÄàýåÖø¦v-º_¶Uúëï×Öé~Âæv¾åh¸ãí´Áûɫ㊟HÃt]´á³±ÖüÚÆþÞ‘ý¼ÿùéï½ÉüÕ¾ÿã þÙÐ=`ÜðùžÒí¹·Ù“Ó�šÊ哦ÝsŒÇæõÿüòª×ï—ÎëùäéóÌÕ¬ªÒñÅÏýßÍ��ÃWÈ×\yÌ.TýÃ6ºàóŠÈéÿõÝë­¼à–ù²‡þÇF”‘Åç�®ù¬ÖUsý¿*³Üñ;¿kÓJjÜÚì÷ÝãŠÙ¦ÑDeÒÑç×óâÆíÔÿðÊ à¸ûϵ–ݯðTV«ÝqÑ“ÎÍåúÄ£~Õžú¾›wÓ™àßïÊÈâN¯ß˜•ÇkÎŽÔPoÀâôc̈J¥ÛÌÊã· �;Ù½1tRNS” í[õûR…¡G(4¨;¶Žhç/±šb@Ì"âÛÇÂ~nÞ¬sÑxÒØ¼v¾zÔº»™F)PIDATxÚìÁ�€ ý©©f€ü_AUUUUUUUUUUUUUU…ÝzKN¢0Ü“™ H@�‹ U€¬Þÿæ²S–sÁ§þ6Ð?B!„BÈ#¯•lâÕ>]î÷%ÝWüÆễ�x™dƒ(ûµ+|¿èÎ�wSy/ùÊÇGa¡ªSìº|ñ´ ñ?Á:2²±x*}|ªH§£»s·%ÀçÅk ›Ig|É|H\|M·“@6ð9̨¡¹´`…ý Ž+?qK–¨+1˜Ê/+jK# îD=Ͳg<@#ó ˆµBc¢m¿ûf@ìåm„ôDW´ÒÓ¦³Æ|´´J½³&þص{µÁ8€ãÏy½—žå,=èr}¹Þ---?dÉœ!�,y! &¡p:npáÄvpÑ¡\:Ê9�'r·œ`q(G�oÿ€¶S[žÄ'QÇç³dÈøÍï—òQKˆìÀ ¬EVy‰‘­Ó[ûbû°û[(�X‘Ý¢s+³†ÈâG°21D- ² éÓóR¯ßï•nZi 8º‡¢0ÏɤÚÉNGƒƒéYö¢z[ÏÁ\{ˆ -þü÷jÃÂìë'®kL¾1+ ¯KÇào#ŠæÚ_¹Û‹Q™Íèºî躢;Îïƒ%?f›õ¹Ë… )æ?w½îeÃÕx^M¹†!üa¸)Uã5£Qø^Zpö¶}‹WEËÑ3²ÄþK’“Š£È•ìä=øx…¨P¶ÀGéóO—×\�ñ ¤xÞøÑ½¯‘¯5ðÖžšŽ“”X²e[ål¼½Cy×^� Q8ÆŸ¡ŠB¡Þ^„|l¯V,;ÉÎ'eìL¥ê=îϵdóÓnCÓ Ž!à ^!V'7o–mEb�§ØñÌþQË4Owó¢ÊpLœ ©3ïì‡�›·+ºÂfÙÅoàá>¢¹jWbŠÃ’ûgçÕB <怴WÚfB2ÙE˜N² úÉ3|µ7Dì%-ø°óýßÄNw,ÅddþbïÎbcŠÂ_fÃhµö}ß·ø9ÉIä>xš0óàÎŒ™Ë­™iÒ¦”!"Ä2–Š!jM‰ÐÄ.x ¡*BˆˆåáE"=w´ÈsÊ�öLFIB¾U™&æ…E={L|– ú-�òÖ˜ÝÜI°ÔÖF‡‚Ìz^`Ôë—€‘§­EU¦Y S.í4˜ˆË’y¶=·²„‹lè)ÛìîË4XÒ åCU´÷¢Íš�"0Y’ 'rh ˜øz€ÑžTF¥œ¨™Ô0£­V†ƒÑ»šLaŹËà¬j]D¥Ü¨ñuUb/÷Û}–šhµL¸‘±à¨QS)G*S¤ã�¬Q`TÈ޲Ñì\pp¸R¡\…ÍËzIÈQ‹;’ Wrè â‡;KM…—‹TwÖ žG¼ƒ œ[ÍšJ9SµF0. Ž]ô'�,áLŽÕƒ�Úd’r§Äß™Kþ‚^1œ ¡`ãcZ¥Ü©•ûÀ XtÚ{Áà|L&ÜÉÑz/XÚ“R(‚pú èyÅÃs÷_ï‡9t3ÑYæT, ¶Û¸óQ™ �cOÁJ­¢PáÈ3Ðë# ¿ô5­è‚$zsëÎJ߃¾’`3ˆ~;À$:ǃŽW µ±ÃÇ£ÈA–ß4�*U8r@ŒªçúŽA=:{ô ×‰g‡rÜ~~„ô˜1è-òKü—$å&n ºxýŸ­Â> d± ÷òt]]ÝÅ‹ßÿ4/ý¡‘VfTn™.š«-Ÿé; ·Ú‹ëR*¯5]=GÐw´Ž TíKqÚ½¿sê96r÷£Yì>ä¥1ÂëœþµÙÚwîÞÉï÷¹}>¿¿¨«MY¢³÷/ÙÎBj9%:U”=yÙÚv.ò¹{ 3hИa]|½»ÿ“wéºú»ô,ïÒÇÓÓmx�6ƒ}}™ß×õW‹3ÁÄ È­.œæV{_îXœi[än7t¸Ëžþ%=»ø»JÿŒ¢.FzÀŽ·ñ0ã±eè<&ªiÊ�æ{Óç¾”KŸÃíýãJ\`Ï3¼�ï¨àµw÷¹ éànoÙeÃo¸T×ÏÍ#ÍÃ*ç~:Ûpiëîá‚ܼ£·î¹˜Þ=]�/W¿Å˜2~k5ú9Í�oÎ üõíý _Þwk]ã;�¿gÔ¸®Ì hüKWÀÑEE—æT^´˜QïXê�ßÒ­MkÜõõôÀïó”v”$÷ß½.u,×¥9¯óÝpþb(@Ik+ët/†yKÛvǽÉö[ì½Qu/…blÞ¡W§ÒQP  ­©nß¹ ü�~}@ïîö=˜¨[Íñ”JùŠìü‰âVÓ˜ìž>Å¢ê;»ÁÎCMQ)géfàª]«¸yÓq,p£ZÅRþììÓÂÝô—ÀW?·Ôâ†y�³¨…ØØ°À|©Â’ÎM‡>¿u-Ît/Πœk·4Š òð×Í/µ NÝÁ#‹ÏwäÆ*óÀ?/é:À0Bj1]ÀÑ’mçNì|ð¸aƆ†Ç;Oœ;¸ò²$[M\¯E²žÅŠ@ ×B>Vn½väÔ‡ÕÛ7~µ}ûêSG¯ß] NŠ¥R ö¶½z°lEÙ¼ß-þþ÷œ²»N„\P·r ¹ ¬¬�«Aå^Èië…c«WM�=}úôÙ TTT|û÷‚U«�Ü­[}Zfa/;gìš´pñŒy³Ê&é”Íš÷õ?çojx•+ã%Iùy°r MQ¤€³«G¶OûíiS'šL�6{zÅ¥S×lãÞ¯%Žì=ìrüÁ¦y‹Î/›dm֜Š÷7œGkÐR=v¬lŽP µ l¹·}ÁÌÙºx›LýúÓKG·‚5Ï߯ƗØ$ù²Y‹–Mžä`ò¤y‹æìz j˜Sn»åÒŒº¶ìm=¶júì©S&:™2±bæ´×WÁ’7Ÿª,~žŸÛ5gñ,&â¬Ée3f¬Ø9l=Áz>0ðhÏÎ(_¨»Ó×¢0àcßɾïdIòÌñêäÅÔtÝ{i¼¸v÷ºcÉO\×’ì»dI$kÈVö ^Ø"»!KB¼‘,/iÎý޲<Ïd>ÿÂéÌœó=ÏsŽñz�é싉ƒÓ8âÈI.ûtöõbçÌÉSq’‡ÓÊŸ2ç5…¼(tàQ ±Ú•…—q«¿9Lò_™žòÊ^¬õ(ÛešPˆ{…)yWý6­ý)+ŽP(±€fhŸÇ¤Ú•û�ÝCáö¦§¦Ûè×Ã>8½o.¡JÑSµ%tdÎó¢«þˆV×x µNf)7aó4RíÊCVR¨ëËé¤ýg’éÄ©„ZFµs«Bh½ŸÑZý)7;kÎ 3~¾HÕÔÀÝ �z>ÍË<DZÿØô\n?¡ÖV$j?s Ns„´Îøë# hz/¤00èr}јæ¿)™J¬=N œ�òXз}ά¼VÇ-ÎZ*Ðàq Ú Ût©?úÙy Û±ÿŽãx©*Zò:àª]MÕê¯éü¬Û ��©.×ÒtZà†©![ =˜˜KÚ/YæÝ _!]‘J])f\õ´žâ®‰& é3á"…9,°eû”À ¯ ÆüO×sû¨T{KXƒÊ°l÷'»ê߸™ìN±€/Boù?ïV¸1xbÒþ7ÓS \Î5±dµ�yîû®úWn¦¸&Š€fô õf¬ µœ‡%Ü_ppÔ¥o·h ÿóÌó¿uµ]( ÁZ)4{1\7Âñ¢ƒéœcþ—£¾vë'¼¤Û´=ŸqwêœñR ^*É ? ëöÜ_~Û1ŒOœ§m-9Õ©ÄŠ©®âáΚ »ÿk£aÔ….¡¸Ã¼’Ño6™V¥rI›Çôtî:•€¦f¹Xfé,­ØÌº-Ð`­º4–y¢Ÿ¦k'm.ɲôªÈʧz�éàó<ß ëì”cdÚÝŠåDZÓáþoþ3Õý Çæ“¼– rwÖ!Ó¿ ×Ïn hÄ[Óá¦ö3Õë^ʱ9Áv½±%£5ë¹cf’�ûá¦A÷)÷e¡ýJƒ™¹órI›““έŽ$—«E¦õ³´â•Ÿu� ð§Xkú’I’ÁÌ¡DÒæ•ôÖʼ`…ÔöB‘{Ðu!?� —õŒ¦5}ËÁ`fu.e³Kœ ƒÈ;PõÈ4sŠ«¸¹pâö^ÏghM>r¹˜Lk½¤ÍÍ)›7Ž õ-~UÉp%“Wü²þ2ÜìMkúÉ!rÁ̃Á¶§4˜ëlñkH† Sµâ§Çì"ÓfhDZÓ_Žì'Ì,ð[@:µˆ üU’ÍÈp&:�¢ùWg}„sàCú¥7ýûK3«ËR¶„¤yò¯ñÀ΄‰Î5ÕדacÏ "µRxä"Ì‚\†Iº$—k%üußég•ío#Ó-˜ê µRhëH¡`fU*m˘žØ'˜Êa·kŒVB¦$ÃãÑC£¸þùý¦`fÈ2ìKL·…Lœ7N¬kKݧ¹%Dg6u3ö™p™¹p3ãæM´Åxç(¨«Å«+œªÄä3GÈpqP¦ÖôÝôk;È3ç¶Ç{'•ÏàõÜ´–q|ôÔ™Ðp·¦£G#ú‰3ËsŽ-&�œKAÍ,Àv’>m[AÉÉ  anMGðŒ:[0ãÙ’rê5J `q“þÿ4F­Z9I"˜Y Á 'g°¹Uï`qêDAë§h%¨˜Ý(Ð ºK¿Æóºò°á30˜‘”[KA],NµÍd&£$éYÐH¿ÝÂóŽzÿIÂÁ þÔ�(¶2k©\s ?§ DùÛÆC@Ãך.X15J6˜A©‰a%'³xß™Í*$Ð\˜0Tü�§“úÅ)˜ùÁ;OAM->-(èÙä¼¥'¯À€†ý¬˜ŠU0ó�g&±mÅŽØÖ‡F3ÿ{@µRx3Aœ‚™¼wb]mUÌà=£Büï ÔJaÅT¬‚™ïr Äjb›Ââ]XÖßI†½Ùk¥°bŠ9˜¹îÙâÊ–SPk±mú†ÉJš~¾”L›öâ«•iRÑ_¼bM£xʼn¡5*¦âÌ„,ä*U“ª�“_½‡Ë}Ô‹µ5+¦âÌ|ß²�“ú§·Ã}º¼üä+ÐðÖJaÅT\*f~*[+v¥\ELääé)Kñº)¾Z)´l؈ÿ½• äˆõ³Õ€ì= Ùâh8Ž[šÔ#ª˜AÞ! jcñiTrʦկýŸ <ãþÀC¬‚™o¼½P$'sÜÁŒŠFÁ� ç3X1«`æ›Ü9 ªk1jE;‹Y%§úkh8k¥°bŠ©bfoT=•^MAù\p£ŽþÏ€žñõtd¿83!ÝlU,Få`ù�)Ïà>p¶g<Ц~ýY‚™ƒíˆäö­6�¨î¼œ«5�[<"NÁÌ·f‡}T�µ™­C‡ K@s´7çq >ë—Š™Ê®SP7æF†Ÿ:K@ód`/¾Öt¬˜ŠS0ó-yŸ+µxÇKävEõ}Ç€f]_¶g<Ðá± ­LÇ'Ê3ت ë8F)èX&¯¢¡ÇÜÃûÀÙžñÀg=âÌØ¶w‚à4],“£9¾ŠHá ugUÅñG[ʪÔE‘Eê‚{fÆN‡nS±-‹vp©ØZªu[¥�Vк4ZÔZ¨qmbq¡Šˆ[ù j¢ATŒ1$,‚(âP¿9EÔ÷ÞîëÌ}ç¾¾ù%ú�O$�ûæÝßùŸs.n€yà k<„‰©$3ÑE3é­1“Iz¾”˜ Ë$h^˜:K:+Å�˜ÂÄÌ·N‰üvÿUñ~‡ãHÏ3åÊ"S(hp8[k:&¦’GÌDoé‡TNÄñR‹÷IL†å75•-+…k=’GÌäW<¨|?[¦Ä 9¦nFœΕ•ÂÄTÒˆ™èÛ}-LŒäæÓQŸãÐQÇnÆ�®aËJaÉ%iÄL~õ:Å=pô÷#ó;êõ QÐpµ¦ãZ�d3“Ì‹ºFk È _/²>ê.7k<¬šÔ“DÌ4V¬S¾]ç@7TÎvæÚ†ã¦ÒAÐHd¥dS(fè/1S\¶‰ ¤jJ º.v†šJ[ã¦&CkºUb*9ÄLÑ”{œYÂ8ˆŒ,tê[ÇMM½…©5SI!fòk‹—À 5dš­Îvè©  Ok:®õ�3Õ“bÊZg:õ×gZ,lr� �ÖtëÄTˆx¹ÃAgd"¬f³øYw� �5Ö‰)÷‹™¢Š»šÉÈM#ÈÄB‹Â‹k ”[XS(fÁú55ÕV¼GFÆj É€]Úâíl®4�•âIL¡˜)sä •À:�Ðr"™hXƼpUôQ&fð¢v×û“Œ­H9‹SÃÌŸ,ÛšŽ`bJ,fòKœÕ®Mí».íˆré®+ڛȚÔa¬¯öõÝ�m{rZssëêêrs³z¶néìnÙLV¬ªSÃÙÍ(¿ÆÁÄ¿˜ÁcþèRËǽkÏÁ Û»<þp8 ‡ý>O×ö öì$ &H‘ÝÝm=uÁ`0·5++''Çý/«57úuÞ��kV¦†uÜ ùr $¦3ù–Úu×�W»ü¡P(ú¬óòò<žèÿ|>8ú'yÛ÷w4“ˆ{�éoml�>ïo rZëAoÛšõ$âÇò<¦&{ û­éФ®NÌ` n“ø‰ï_Ž„üyžXøÂ‘p׆�¡Å�è¦VÐÖ¨ËòZý'ÑÓ¹›fS3[×Í‚F¶5SŠÄ ú˜Š•s)6Í{·û#á<�þHhùŽvŠÉ¸”DfŒ ÝëøÄ‘Ü@î– Õ‘WÐÜ4Ub�‚‰)~1ƒÚuŦý`W$„O G<‡¯ XŒN±ñn_³5P—ã��œ`pK c4 Y)«ÄT�˜AóZ“à”ï÷•ú=qâ/õn=+èµKk` \ÞXZ³ü‚²R²<|«õŒ™¥ÕÅö޹(Ô~ òØÅWºŸÌ Ðyž9ÈêfÖ²âqSöZÓ11%ne’¿¯Yó�Ûá˜Ë�O]4Vò|ø=Ïaxæpyc45õfAs�ݬ$¦bfII Ã�`¯.j²Oý”×S⵺Gþ™ãå�ÍÔ`7#Ì—nM'HL ÄÌKSm ˜+ò1¨àäßð{ãyÁ§š“1[áÎÞa•\¿†�D7#Xã°Ö3°E—O»îɳsÌQÊÂÍ Ã’§“‰6xæ6{O�ÈÔ,[TY(÷)‡‚ÆvV ×z ˜ù ,_Z» bpÍ"a'þ°9Us!45¤›=Ã3SàƒnF4К.ÃÜûoE1ËZø´kGø»„ºš@ÑX;÷‚`–—›¬ÀÆé„`«£|7ã So±�•Â&u3ÜCÀÇpPº�Œ¤Zôõ=u^s»E:05ñŽ›AY)éÄŠù-ºù“Äi×+ÀÇ0}Âï±LJVõƒŽ¦f5ƒ©�qS0\>+…Mê׿ b†5íº| ~;i%Ý @¸³—705 Ž›BAk@WSn~™Ïº—ìrÿ%(fâÑ®n¸¨éñùvš¾äRŽ%=*éÌ ®´ †Rõ=œ^ùÂþC¿ÅŒ¼vÝ5Çw�Q¿?ߘ�sî;+oâ]Ma‚ÝŒOÞGvyö)3ÖÇ\<ÛµÎbjc¬�:ÖØ½–åí7‚Á·$L t3òbF"ÔŽ…sç õÌ(mP*é(€¹€JAS³Y8”jv4jA1ƒ#œÎê>ß3´ÒIG ÓO:å�¾†Œ›R Š µótœó2æ#ÇigKlÒïü•7 Ðí³05Ù3’2°• G8¯ ¦Žs~ÂÛIÏDÓ�­›ï¡óWÞ¬wTÎ~ŽXA1#£]wng¸¨ñÚ÷L×=ôÞÃÞ9OB˸)F¬[™Š +µ0áÜïø—ìÌH>ôÞéD¦ÆMq�bÓ®ÂVÔ~?æQüÆVÆT7>t«Ø$­Ê†VG7ÅŠ<æÑ´«+/jú“®ûºô¤C™wM©âµ²üDµkS¯�q¦×ûítw}½C™]´+ÀAƒbWj¹¦pï×{¦v¹éž ®â�£‚fÅ”Æ}ÌÁPÈãÂÆ{úDí”t÷90GºO-Ë*hPÌàl×%V£Á\ƒÉÈ��jX׸÷X—·õb-[^舠ÁÄ ÎÁÑ`.¸¨ý�i4ôÉÑ‚‹Kªlñ”Ùq(Î¸Ä Žpv[á<Î*Û(møxc==×ë* #�¦F½ 9T�ǼäŽsÕ1�ê =gGCnHÎH5¸6,ži65å5 hØÅŒuu¥Ù55]ö Ò“¦iÇ™»Ý\Þ ÕºyYZk3Gª+‰„�дSÜzg‹'#ý¤ÁÔà¸)^1ƒiWlEuÛ1ÇÊêÀ!š6‚ôlvÕç;\Þ¦F/h~"fš b¦±wsž[ 籉$=g!çŽd¤D™L Œ›â3�½›óÜ[8�ë;n(v*wºïGÊìSƒã¦˜ÄŒq–ˆ‹ ç1ñyÚIÏ ØÀØâ¶ÏwÈH‹¶:â¸)&1c¨®$‰�ÿ¤ÓIت¼Þë*=ƒevq«#Ž›b3º´k²øq+ÛÈXk<ÚÜù~7•Ù1@550nŠ�MzíêòÂy,|þ�¤gèÑÑ�Éñ~�Ò*ÎHÏë550nŠIÌõ1né8·õvO‹5Fn^�ËL,4¸ ø.;jj¸Í;µÅÿÎI&£#²‡ô¤ÑŽ0‚Ü.åàò&ÈÔü «ÉAcGÌá즎s#Å2bÜÜêF?—7a«#Η§yRTÌá쪎ó0.æÓÍ�>.i>å0#MØêÈ(hV”5öŽp>Dîê8�ŸiäûÀ!‚�ÀÓë\}Ôáò†¦†MЬ«.ª¨^97 /jG)=L: {ºÆ%×Q7\Þp(ÕœòÛ˜ÍÒ’’)ë%OἯƒnXÓ•F6çºü¨3ÒØêX‚FV»W¬lrw#Cb¿è5c’éËì¸+€',W\»-}Ì„MŸî4HÓ‘F¦»º+km¢Œ4²xÑëdŸm÷,qiÇyœ˜×5�ÑtÀQoù›½{g‰#Šâ~H|$‹ïõý‘� ’â_¬ì2¸ƒÃ– Î|‡)fSJJ‹mDØÖÂ"hk%+)m……6bçA�4Bê¸Ä™3³³;2‡�ßW8ì�{îÿì½Z‚F¡ƒÄì?¾!¼Ÿbµô#ØÍ�M !au›‘ŽÑÿ¿Ã9Üâ¾ ›rX†]CDÕÙŒt”¤çì‰ÝìzÈav'« ^XÌyÁ¹ßêËÄŒÀ®\°™c3Ò‘‘{Ã�e^ 3‡u#Éq;©‰oÔr2°M¦ÈŪRªÎf¤c²õGD£Ö¤_Á¡oœÜÌÁ¡.¥êì*²Xì%;8o]sdÉÕÄþÖỸ‡ýã¼ãµ‹ä!Ë«^”±‡g1{`ÂÏcšTöZþ«H•›‚Óíªˆ~ݧyëšó˜&EÓOžÞ,ÀéäBK|äÆbö¨Õ„œÇ4™Ê=˜QjaÜ©!£a�¯y»K €í)è`©¥~pÕc1?ö8š·- Áù Ó|ª€™xC­­€;Ûß”²ŸcÉ[Û„N8Û¿æ‡{àúÈÏ4\¬74)k¼½yë¢F­ +p1Kþ†à¦~©mJÈØÉ[×4jŠ^xº†›jǸª7 CÆ·ýUóÖ�šjé9�’c‰Ú3wÕݼ–ôñhöPp×25Õúj<Öàîµ+åÓ‹¼aó‰_è;hÞ}U»U1Ÿ+þT‚—,µï<•ë»—ùMã¹ôÅ�|$ÖâPÔe„P;×­œ‡B$Å2MS9ŽQ§ÆG�’,CA|FJ¬Þ fp)™Fæ)°•^¤ä™ÈRó¤„é}O! N!%ÉôE`x))2“‘ÉéôÛþ—½zËA† zyDŠ)`©ÕˆQ ‰�O»ÿ͹ ¨%™³…ù˜#(”– õ~ HÛdkÙZ£Ö€T�óMöÑ}î. 5¯ÖjÙSÞùvåð©p߬l$ŠëPÎçËÓÿONÅ{j�¯t.Qå}S=e2DfÔb«A×~ìÁ��ÿk#¨ªªªªªªªªªªªªªªªªªªªªªªªªªªªª*íÁ!€ ÿ¯½axC+­ †:íIEND®B`‚pydantic-pydantic-e28e879/docs/logos/datadog_logo.png000066400000000000000000002032551526274674700227520ustar00rootroot00000000000000‰PNG  IHDR@@Ò~•sRGBÙÉ, pHYs  šœPLTEc,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦c,¦®—,ltRNS?]y8Sl†Ÿ¸ØÿŽ Bc‚¢¿Þ¦$A^z›¼¾Wv•±ÎëÕ9Z™÷ì:Vs�«Èäý(Gf„¥Äã6Ro‰¬Ëê43OÂßùK>|ºÚbDe£á![x³Ðí’}¯y x¿²ýÑOq +CDDVܼø�¡Ã†£Ÿ'z]"""ŠT,o™'=äãç�íÐ¥""¢ _tñ%#G5iùúiÁ¾Ñèš…Z¹G =öø˜{RìÞäKO kGDFcÇ]<¾x¿ ýÿý,àÁQè"…I±vgÝrÚ­'¡ùK‚.&Qð�]ç̪“Ïmxÿ“Nwýóµ§Ðe%" ¬)ž.4õ¾gž­mÐ'ã´A×—ˆ(p.|ð¦ŸëW²Toô¯xµ¦¡ëLD�û>_xz§óµ®‰‹„®7‘ñ ¬úÂŒ™g¡¡ëV]x""C=|Ñ‹ã‹÷;ù%¹mÆ ó2zˆˆÌ2¥îÓ£«½òjùÊèßßpƒÑCADd†�¯]óúȳÃû‚#Îô�ùÚÿ<¶ûo­0ýëÚò£Ç†ˆÈ—®m÷Ö¼óË›¸H•.íÑcDDä'UάZ­}Ãû 9›àô`áM©ûhýKß~çÝ…ï¡)›¤ z؈ˆpn^Tºûâ!zñƒq7ú£‡�ˆH¿fK¿>ýøw«jqCí–¢‡‘ˆHŸr—Ý;µý«÷·Eÿê ˆeèñ$"RììZ1‘ïS)÷1z¨‰ˆD,{íš•Ók®jÌÝ›|i5z̉ˆ¼ø$óÇÝ+> Ýbê>0=øDDnôùìùÏ_k!_pàôC7‘ÿ;áØîoœôP�áè_ž”žþºˆˆl(ðôèjíÇÜ? ý;“"LDwQb™›pÕbM)®5âGg Ûƒˆ(Îÿ<¶ 7áð½n¢…ˆ(ÛÚË>~á¶ù÷pCÔA7 ÑÚG?~aÝŠ/–¢!’3õÐ�CDáuy½ªóNû²o©2ÔWè"¢ðiÕ´õ-=5l=ú ys º‘ˆ(,>ÙPpôäsÞÏÕ ƒb#º¥ˆ(è.¿bÓ�]«%÷‹ šÍèÖ"¢€êóÍ·+k´8ù%ôo9Rf>ºÇˆ(X:/¹xüÆ-×ã'ãÁ×ÝlDwl—ë*~¿•«â†HmtבѶ5ý!ÿÝ·¶áöM¡„î>"2ÐÙy~¼ý…WÆ4êÚ ý+Œ�¶£‘ˆÌQ®ÞèÉÇœ÷ì“è_\ä;Ð ID¾7eÃ9gå¯XôhÎü£(?¡;“ˆ|ë“k›–ycKÙ^\M�,•Aw(ùÏw¥�+^bvKôï'ò¹SÑ�JD~qsæU§Í,ÏåÔÉžsÑ-KD`gW9ç”ÚßÑ¡#o©"gÞA÷.�Ô­WhjƒN;«£ ‘±f£{˜ˆôÚõÙó?OÅ}ÆÉ»Ýèf&"-–íø¥yñ"ewïAÿÒ¡àè‰îj"RêÁ»º_÷æS_ôDÿ®¡ j†no"’—¹ÖÈ¼ÛæßÓý†­ºÑ‰Hί—Ý{éÛÏ<[ûôo …3Ñ ODž-4ø’¿•ìõè_(.÷¢;ŸˆÜºpÛò|#6¿•pÆJô%@DNxºjµöcΟ†þõAa·})‘MËýþÀȳKõFÿÚ ÊR}MQr7kúCþ�¾ü”»Å’ßœŽ¾8ˆÈÚö?6]Ú Óù п$ˆ9}‘Q” ·•îòÆI ã”qò½…è«…ˆËxÁ±úíŒ\—ŒÑ}Õ…Ü¢å]®Ûû·‹%íB_>D¡´lÐ5+ÿüúÝê ¹÷ú:" “) ž2oÝ̉ûÐW>‘€ÑQܼ¨t÷ÅC&ôâ.$]ÐQ�5÷ËGÏwª(˜nA_`DAtù÷N=wÌý•Ñ8‘Jç¢/4¢éóÍ·+G–(Ù«úÂ&Ò¡úŠ#2ßÀAƒ/ù‹ûÅRè¬B_zDæºó¦ÿÞòаáè˘£?ú$2ÍÙy~|ëÔ§—?}õ�q*:‘Mk¯¸wõÛÏÔªŽ¾h‰|cúª$ò·ÌÕ ÿÞ{ýÑü€ƒ(Öwè˓ȟ2^p\zLÃ�]Ñ—(!-]8±ÉìÙkJ¡ãð«¦èË”ÈW¶öíëÅ‹\¿›«†[Ï5Ǭ¼øÎܾtÖŒòè˜|èÜ•Jäu½÷‰5KöB_�ä½¶œu‚U“ŒÍûÁtl>3U÷…Jä#Ë>Û4õŸNµZ¢¯Cò�§š×IÖ1'³Y"4Ðu¥ùÈþ—ï}ì•ÓqŸqŠ´¯H¡e©›gðè8ý£„úk•È7úüQò+§O쉾îÈúÿcûá yoE–¡*¯V"¸pÑò2#*>õÅ\ôõF>Uý¾ËuÔØ8�4SEW,‘”{´ÐcçòV\Jáë¼Î{kÀ-|4=½²üEKV Þ½…�j1�·T‘ [>à®Ív݆Ýd¯\"˜ÿmkúÖ¼ö w.|}Q‘1®nQÐCËmãÇéyÄ®_"ˆ]Wª¶nÅĶèK‰Ì3´•Çæ»)ì7õ>*r i—yGÕŒ[·.E_Bdª=7zï±o£³ÀúÊ{ ‰tª[ïãÉ·Íü”wT‘7[éÇG+ AºD¤†Dª5wqóç~;ù%ôCqGg©Ö|� Ðb©")qBÞÖ§®›y�q�¨u‚=úmet60›ËH$eà ‹�{ãÍ/ùÑ8©q�h»–+‹ÎåUÑ:yÒyÇ/—<ׯìnn3NJ�(ݹ§¢3Ù)]H"ç<¶KæR#\£Š´(.ßÂgÖF'ñ¾|%‰lêÜwpáé�¾ (\†¨h毢ӂPQJ¢¤ê>úqµÛNoÃÅ„¡¨½.í²Ãa[_ŠN a¿ã«ŸÈ�_/ÛôÄôãW½�îy µ/Øk×:ûœN³>'„Kô.qük€È™�ÿ\‰Ù¥Ð­N”a’íåKV ¿Éa§×=��vÇ:,‘M}úþòùãϼÛÝâDî²ÝÀ/¦W²½ÇT¶7Ñéév–Ó %Õ§ï5ïWv÷tkÅs2ä†ô¥Ž ü� fÕœˆÈÒÚGG¿°n7$?;yŠƒ–þ;=}ŸÓOÒÓWBç¨ÕÛNëCiìEwÝøÆIO [�îd¢”¬uÒÛ­2ÑÑñŠïO‡jù„QNËC”¡Õ9… ×òý§ûÐ Ld߇κ|MÆCúïrzm|W�¦Fe�V‡ÂlY½ÑÕ^yõþÞ®Hàt¬ñ™š¸ÌéURîSt¢úTpZ ¡>ß¼øÖÏ#öÎîŠnW"÷†:íû?ì<Ç×Ë¿%Á™êSÙqq(tžGw)‘wûÊ9îüW?ðç—ÌñØT5r^ ›sÐMJäÝïÎ;¿uÖ#ó:dl®ú\ë¼62uÐMJäYE�? ë¡·;èjh²ú<í¢¬2è&%òê*W[ØÎÌzðõ.Z›¯.÷º)+…KKt—yÔÎUçÏ9òèÇ\ä¥r÷D'.|%Õó9vDŸAàfÓG0ÅQâ ïõ  û Ý¥(wxØ"K«ÀÝ€Pù¾BþýLLj¬Û£Ïp»À!ŸÀG É)7P}Ð]ŠQñA�ÚuÖ‡¦+Zûù#±¿,Nô)D6q Ð.éÇIÔƒnºMõë19Å„AÛþI}2C´Y�Y“îè0š!4bÑöE�ã‰C^x?¨Bò¼,qOaQݦºýÖN°zÅÑÙȨ•µ­õdêÊ¿iŽÆBEÁ1‹pUôY:Kó×Ú˜É;M¢p+ÐmªÕðcêÈ–ïƒÔçô½¡G–2¿ÓrY‚[[½¯; 8ªVÕˆùKfó—×cŠ$nŒH9(Ø6£ÛT£­?ÿ+^¿É褼j1èH&�­^ŒNË—†ßó{±ø¨±*ú<§ÊµªuÆyV¦h· ÛT—JoÖSRÀ?щyòeîêèÏXüs‘ýÑ»f@ü dÜ2}}"©?¹`ê$­”P9(ÈÞB·©mÿÞ¥ª‚¯Ð[ûÞÜ4^�ÿç£�MK»6ÅN([ÿTüŽMϦª.îýÛÆRÇ ÈéRå ûÝ¥:lm®°‚ûñŸ¸42bs¿rqOKï(T+Ù&ýýšêå8«/Q8t§ÇœìZ¡ã. ƽ�…ÊAVÝ¥Ê-=Mñ”ZC'cÖŠúÕ||ì?w*—ùídñÔž:6-í#…fØj½½—�WcÎ&1•ð°ÛÕVE“‹¤ÊA†îRÅ®¹93©ÐIº°o|T wÅüsã¬7·Z%~ªÉ•™? ø’“åïzˆÔ)ætíÅŽˆù„ËÅÊAÁõºMU:ø––ž„ÎÓ± ¢3èýϧ¯ÍúöɉúÓ‡ÿ}‰Ú@ÞVÜ„ÎÖ‘{bßÜÛ5òŸ'fÿó²V�~ò±œ}•îÍØcœòa‹ûçX¹cVY=—«ÖFt›*±{ŽÞ*šôëâϸèóGþó}9ßžnñà^7´)ÝLFÇJL÷ÅžôÁƒÏWY-ZVƒ‚jºMxõ'íeôï:è1ªÇ/Øñï¬Ü~?÷Ÿ[Å?øäo#v¦Â(¯o¥aÌÒjÄžö Áƒ\¨°>Z ¬Uit›Jk\|Cê¬Åí7d ½N7÷WËýç�"Þ÷‹{ƒjÅ£‘�¨nþKõѪ‡+Kü2 U�^OY}4Ù*X ªEè6•ÕäP͘‘ù„UèÕ³ÿµeéˆïæ�yèS�F?JÝ[4ÏÉ}–�\üöO¢3NG(«�•%‹AA…nSI[¾ÁÕÑ€UÅfÝdxÎ*î D~»MÔC'Þó(eŸúŒ‘šžZü]f²+ÐvPU#MD‹AU=u#™áÉüRE¹S]€Túgwö*ŠÑ›Æ^ùÈ…q÷$ü¡(Æ™/«K_Å�~©èñ¿«¤¨JšH¾¡GA•tµ#sü—]Èí–w½úÇPëiÝÿfýk›;£¾; qî-niSôÈŠË”ŒL"±ïÒ¥KϾ^­¤JÚèšGE&…nS ó®Ùá@µdÿz™¯ÿàÜ’ ê¬í+bWñx!çq=¬>ÑŽ]†PB¥Š¯¹úÆ�³' §òá+ÙbP �D·©w'Y¿7#ïŽô3“ýóÇèB$Qq޶ÍgOȳ\<„Å‹z ߇•–¶¨·ö1Ò[ºDï ûÔ±NúWÛÍÖ0=}dŠé»]ŸH=ùü‘Xq«Š-Iý8gžÓ=æb¶K—‚èOt›:ÓöOéw©�8+ãOúT;U½Ö]£\nÞ¿ Ë›l…禥5óÝ»šví�.�QŸòMËÝâ@F “SýÐk•ÑeÊ‘tâcè}kU²Úâ§ùE÷¨K±\|“(Ê`t›Ú7[ÓFI MO_�ò‡ÆMCWêˆÁê b2ë%!7¶=§ӃR‚¯/G‡nS»ÎÓ½V’•Õ�´NùSùc©Û5Ädk-«¶Eü< � rªx%(x̘2 ¹×G„Ìõ“ʧþ±º~˜ò³úrÎr©ªžòZMÖ=ô2Ž/Ðè>µ¡m��–nùù‡¯–gÐ÷^ÿÄŒhò¦þ±C%Ñ%K_¬¼Æ«`Y8»ZnÕ<ö2’/»@t˜Õ|\³ô*,6ï-¥¿2Î7ÓÎ�­É§â3âèKËÒÍ–?Ñ™šG_FIùBPðÜ�îS�jj]ëéÌS>hç'q÷ÿ¯_±’»ÉÙqšuý¬Ïe5gÑ÷Ž–¯Ï}è>õ¢öˆ3ÃÅeîÕ÷‘­Ÿü}.¢"=î{Qq‚cžu ‡ÈŸi{âUÁü«§|(xV£ûÔ½¢‰×)W¦_Æy×ï·õ£Û¾Ð\�¹ç•I°;Y©Ÿ Ž ¦`¿®µ„ Ö›#ÓlB·©Ksg@–ä;¼ïàuö~¶ó3ëñR{ù —èöœ«‡ÆV�²HA(h>C·©+=šƒæ¤È<ûvúvM+c=9=ùVWd)A5SÏuîw=� êGu  Ù�nS¾Ä­§˜µÉœí�ë6èØ“îŽßU&`G'(¨‚;y310M!e À1mžìú�N@–ë𬰣§ØþùÂë•V£Ûšì}"Cñæ'(ê³ Î5è¥} Â Ê@�cÖ,§¶#À¿/<ÆóöPÌzº�ˆÝð†]ŽJTW«ïU׊¥  8+Ð}ê@K¬ÏÑ?3G³Í®T³6VÏŠUå­•¶„‚“ÕUÒ*)¸Ÿ™‚'Át*ªU]«LÇŽå2'i¦`Vá³]T%;V·Ž‚³¶õNzúS Š@�“`:•ïlñÃr¼Ž=Í3δHvMï¹3îT“\ÈTJTàÍ NÖ§§h¨wPA(pNA÷©ŒÊƒ®S¶³Ï*¾ •ÇýØF¬m.Áî«•ø=ív¢Xè1MA (pê¡ûÔ†¯Å·ªö k�ÄW?î¸Æ2µøPAN!µ9a•÷*8[³®"  �‚Pà\ŽnÓT:j_ð*¹ÛGUÉùÝ`cÞíµÓŠs±A–Û¢g)¦àt?{~Íê*¨Í”÷Ð}šÔÒ¿ýö~Í�G6ÂÅC§ü^ÖK-:äûŸx6¡–äÕ÷o NwöB/£¯ŸŠ»™)pÍÇõ…Ûüõêã°¬'�ŽîÜwˆÛRåbWâ’”ÛÖ¢ýås;ö\á€l(ŠîÓÄöúæ£óH«³‚»ÑåÃN~ÉE)ŠêÛv1DžM\ðQ*Χ{�foÜv8…JâOÁîVq7¾€VYáív„Á‰ÑH¤ÓËráS®c’Ô\Å�Òf­}msÕi ·[Ð}jí4Û2–¡—íHªÒ~)¶pÖ‡"'©ú;*N˜ðÆa?š¡¢4·£ûÔR‘�µ8yv_üQôOVˆ'{;Ê/�l¢çHÞx¥LÒõET|†ü“ç C£† @�SݧÜ�.Öay�Dãu÷ìµóš¤JxÚcÜN¥÷“ÔþY'Ü)s!hñ®ŠPдÊ[at­Ž8²ÝùIÞ�tàãš•ç[Û‹GÛ×ÉÚí',y=(ö’‚ü)xÐ}jWצèJeËþµ#ó1Í™Ýo™ïîãDOI—¬á:ªxõ÷Ÿôe¡N%éSðÜ€nT{f¯E*ÇGBûDæÀÇoƾ™2û[©ƒSby’¶Ü? Îø•’‹C�� ò§ÀññD�¡Ë¡Ï‘˜DwÏ^ré«“r²}õ ÉCSBÉgf|§àŒr«j*Ç»ÿÈßN‰0ü^t•¢dø}–ðq¿Éz9ÞO‹GúQßqRGz;iÛ•:M„³”_,b–+HŸÇ€e¦ß„.R´ŽÄu�‚cótÓw3´ûë€Ì�^LÞx_Éœ%JGå—‹”·dO�óCêN»ãºF1rö²;IX+Ù\æ@É;¯¥ÌI¢ŒP}¹ˆ™¬ { œvè>Måut…âµ<Z't ¡5`þîS$Ž33yï)˜¹ºKù#åqùä)xê û4¹^Ÿ¡ dá£ìè|º^WÔHßêe5™#º§h?±O[r�¤øŠ£dAI tŸ&5Äoo_–³*ÞŸèHBì­ôôÿ<ßì<0Eÿ•—ˆ4ÚŽ§ô� ò¹S•B7jbµ_DÇÚ²GŽØ“K�àÊdÃrtŸZ¸Ê�7ïFz3'T®„õá‘߯¿¹} i›ª+ˆÆ›)Ù^º>R_�÷ê¿è¢¤reN¬§¡C »bÙ+"ŽÚæêñ÷¥lÇ£„#6åN^îGC6ÜÜ Ý¨1Þ›‡.Ij97ò¦ïñý“]РȾ/¶÷:7kþ—²!»‰Ðe½Œßøi lò¯…èF�ÖÑÛ}™š”͉—KÁ�›={ÞpqçwÊ�…Ógyø�ÞRs5—Ž0�=7)Ö 5ÊüýèzØòXNÀÜúoNÎhœá|é4ˉþ'ï¿ëU\:ÒnΚ‚é7t£F2å}׋rCV±è79óaî�M»oÓ5u[Þ-o?—ޏFÂIS0Õ@7j®÷_CöÜ`¸f�´–ÛE%Þ×ßFgþ nSùkG^mÙœ) Æ£5Çl3Þ¾:lFnØÜAÐþ��; ÝZpòÐý6ÞPú?áuy}¼]Žn\f�l¸ ݨÙÖ¡+áÄ/¹q¿‰Ž…2�ÙK#�,synl'Zè?@4X#ö•Ú.š2Ô è>=bºÎäþÙº¾:ÊT8²›t±ÿÀ*vÚsŒh¬„/%|¶•4ùºO«}º ­È�Ý€‰+¡pSÏÈŽ:ß~GÕ´Ó¡ùEc-›ú„p7‰fLAõ$ºQ3 õóÚ‰–žÈ ^ÅÞÙ世QMÕïr›�³75üyÉP–¼zÉ'™0ÖNt£¦§où]ÇîŒÿwt0”eíÁ¨¶š;õl{�«h§I—J¾¥S×o @X8U0_ ®¯Ñ�šþºnDüµ; ÑyvtgU¨gëak÷ØiÓ…’v=+y©qŒ`º\¢u<º®lŽÈ  :ÊÖ"¦¹¶Øzsôƒt;J Æ9YìòQæxÁt)¸^ǶéúkÐp§~D5ÐÁPŽÇcúk–­}‡ß·Õ«›åÂl%v)s²\¶`¿¤n%…*¿ŒÎߥ#’芆rÅ}>½jQêUµ×­ŸË…ù©Ð¤Î0¹d)À.JÝJ ›ÔÜw"W¡�†rÕ�ë²[R?è){ýz±X”Åe. …ö‰åJAÖØ£C ÞN#r %.ˆå'çÄm{0åTåìm4»TlM“+¤®!ušIåJ�ÖÖ¡ClÞféK/Gfr:ŠpgíØNëý×ÿR<æÊ؇X«-¶À‡æ_%çz§y ØiÕЙ{Ó1"•sÑÁP¤rñŸ0ôHµHïñöš¶‘ÔßåÉ\D �)”)Ûy þ4}¦k‰ˆ\&¡ƒ¡(‡&Ä÷[ŠÅHÚ|IpžPˆ‹\D*9ÞZ…BémHwVú�·W]"Óq°xé`ñ‚¢Iò½iíî4+tÓöv�‹H-S¶w#¬'R·’¼¥?Fñ≘ä=ˆZRõYt4Ãb‚lϤ/zmïxœL€m¼_Ej—É“îy@ovŒÜ|ðß³žéiâš¶7Df´ ÅXiÑw�$þùá¶»WæfÞû¼^Dª�$’&Ý7ú[ó†:9gûúᥭ'ÉîØ£EÔ|Òûf“g_YtÞU ?Kog¿}÷8Ü5×Zü|ŸY!‘%Þ@í�yOÎE?¾27ë[&¾\Žš¾Üs:Šuæ\‹æK´´É-¸còOSì±µ‘ÒIRôLÝK¢Ê:ïòÛdk�Aû¡çˆþÔÌ5!ƒí�Yí7Äúgg:iá ¢ëêîòÑæI�)4/Ë3ñðûÐÿüRÄ÷Þ@×À•/"Óú Å[2Í¢?µœ!w•£&îpÈ{p·º¸xtê6Å{Žóµ¶e£Ìm nŽzÙÓØÀO@2´�JÌ´]yCáÁ¸IézZ¬=Àa7ë9¶¿žR;»[:R¸­ÓÙ”³—¥u~½GÌ7C—À�MQIð¦?ÊÓߪ Ÿˆû¹§�6ò÷žC³ú�ßWúzN‘Âà�=yýØå'Å}æòº.EÿÕºÞÌ—QAWw˜UΈý±ñŽ[¹¡×ȶ9>¥frkS�i\T¡Éc½‚Ô¨Ñ;¨6G‡CVv•·êÄ1wÍã¼™ûy�ÌÖNº@ݽ&H¡ð¨¾–´ükðtt\›•Gt8déÀùV]wðרºÞE7ïõX#çÔ)ÅêaD‡ý îSs—�^�ß3ö§e%­ÚnAÔâ ¬~$•�¼ÅUÓÍ95ºÍ[zØ6}�¾ £2Y‡‡¬5ûÒªñÚ~“û}Üõ®·Ÿîî¤ÚH-‡NZÈ5±‰�FGD©x¿ë*‘9N€®‚mKU#@Á¢¿5ŸìŒÎYHÜN·¢#¢”^WÖ×í±KYbê¥Î‚(-­”öÖ Î~ËbSãTÿ¡¬±'n³ÃqÊb³IåPpXîù©ÒÑŸ Sófln—¢#¢ÔÖ)kíáv߯;rb¥Ò1 À¢»3ô§M¾ØÜþCGD6ŒR×ÜçÙº ñÁ£SAù ’Ó=ät‚Åew:$²á{‹¾R;¯�ó·H}8ŸèP˜uÑܘUÑ Kê›ÝttDdÃØg6øo»R�þQ…g3SÇ@�ù–ëíË…è|E�›^utDdÇ¡O¶ø¾TŸ„¨<¹˜FZ‚Œ§yY·jè|EM�ËïXtHdǯJW¡>xq²s/Vyj1µu No_ºÚ=Á·êÅå×ÙÒjšEsÊYÕ4á™(=±�ƒA&k©³+Cg+l}l‚K›¡C"[^›¥¶Ó;ÌkuÚ3ÕžVÎvÝ#Bfj¢³+?Dg+lM\†£C"{šªîõ¥·Œ;éçOª>«g‹{Qhé¼§°?:Yi#ãR섉l²Ü¢PVË—Eœ°Õ æ<}¤§¿2J �Mù:Yi×Ä¥Xi:&²©°Ž–¯´êíÇÊ\sñ«§qóU®2èá!3¨[Ÿ4Þ™èd¥ýŸãíè˜È®4¶¾qnA�™á'}=9ËéÆmþ×#.ÉWÑ!‘]S:éë}㼂2Ãwúz²:Wyñ{Ê_}Ùus즒”ƒæ‘=úzÒÑž;f°Ø$µ5:&²m@}Ýo˜5è±!CÄ-è¤ÌtªòÅgÉU„ ò«ÖiP& Ü“¤ÈùºZr=:S>‰›JÈ÷°Œ²mŸ®ö7ÌpôÈ�!ÞÑÕ’eÑ™ª0!>Ï|è˜È�uµ¿ix?:Ù¢mqžèLUø3>ÏÓÑ1‘géêÃ<ˆ2ÃϺ:òTt¦*Ô�ÏójËU�ȯŠëºÌ’x=H¢ƒuuä)èLU(`‘(×Ã2Ë׺®£ŒF ™a‰®Žü�© âý9³S×%`’ÕèQ!3,ÓÕ‘' 3UâŽøD{¢c"g¶_¥ë0·g&{*kêÈkщ*ñ�E¦× ƒ"gÆÍÕt „{£‘=å5uät¢JÜe‘étPäPÞG4]æx=&dˆ1š:òrt¢J°È´òÙè¨È!‹5iBîSô��!îÓÔ‘Ý$s·EªËÑA‘S·iº Œ1 ="dˆ©š:2€Kaee‘j{tPäÔ…\W1Z·àm¾@JÜ«©#oB'ªÆ¥©–BEŽãªXÑê G„Ìð‡¦† èQ–‹)ôÕV ý¢é:0Åe©KF”–¶KSCžŠNT�±Xäš9÷¶¦ Áϣǃ ±TOCnF穈՛çÏ¢ƒ"ÞÕs!¢9z8È_èiÈFè<ég‘k·€Þrlø1H„¿ÑÃA†øROCöþ�¨�Y%{#:*rá—nz.#|„ 2ÄÝš:²/:Q5J[å:¹1RÓ¥`¶0Ù3OSGvG'ªÆ~«\÷4C‡En¬Ñt-à|ôX�!n×Ô‘¿¡Ud¡U²w¡£"7êöÔt1ø_KôX�! jêÈ .Žp«U²G¡£"WÞÒt1ø_oôP�!êêjÉ×Йªñ—U®÷££"wžÑu5ø^ôP�!tud5t¢j|l™ì¿è°È•«ëºün z(Èý5ud@·°ÞøJtXäÎrMWƒïtñ:7TSGöÞ�ÎT‰³-w#º ¹Ä•ݳü€2Ä^]-y :S5Ž¶Êµ:*r©Ù0]׃¿ÍCâ:]-Ù�©Ö{:–C‡E.õ}O×ákÇ Ç� ‘OWKv«‚NU ëùË­Ña‘[oèº |íkô0�!ÚiëÉЩ*q–e®[Ða‘k;µ]>v2zÈu´õdtªJ¼l™ëBtXäÚkÚ®†2Ä}ïù6EçªÂXë\O@ÇE®5ÐvEøWOô �)JikÊwЩ*QÙ2×€Þs c[j»$ü‹ ‚’=ô5åZt®*Üo™j tXäÞïú. ßj…2D}My:W¬×O*…‹<¸Cß5áW?¢Ç€ ±X_Sv ⾄ӭså¾¶+7WßEáS…Ðc@†è®±+룓U 9/Àà¹TãEáO…ÑC@†Ð¹~Ü=èd¸É:ÕsÑq‘5^¾T=dˆV:Û2€‹|Z¯Ç›ÞyqY7�—…mA�™Bg[N@'+o`‚T;£#/Öé¼,|è{ô�)´Þõ~:[y½­3]ŽŽ‹¼èò Ò¢€LÑDg_ÎGg+ï%ëLG ã"O^ÐyYøOGtýÉ¿imÌètÅ­²N”ïî}­×…ï ËO¦xNk_Þ�NW\'ëD¹š�á i½.|çWtýÉsô6fà>ù(A¢Á{­2ïj½.üæ3tùÉ &2¨²�¯´D‹·ÞˆŒ¼ùCëuá7¿£ËO†8Asgm.ȉ ò¼eÉ›wñâÅEJ–,’ñŸ.y<ðx­×…ϧl<(XnÖË~?.Nt�‡Û t»‘ÞÒ8Td´óíy:i1‰7•_…-äº;èǃ‰&þå½×Í4YëX‘ÁÞAôç謥$¾a:´°sÒ�û¼�UÎs§êq½cEæJ´ž¬R[ÏF§-dSâË¡c ·bŽrß&ë£<å±ÑMÕBï`‘¹VBôTtÚBnOœâ±èØÂÍÁÇè‡u·�¤‹9`#¯4Ñ.ÈØ‘�^�6ªÉƒ¤Xˆr5:¾pòüû$”ûšü‡i5Û©%Ðù»—ô&¬ íÜkÏO ûbXÚëMÄílȦ{Á­j5’'ö :¾�òÜ‘17buö|@µÆŒ™ç p«öî‹®€[%O¬ :¾�zßkG^sÀ{¼Ð@/@†Ž ´ Ý«ïÇ/ag†žÉóê�Ž/¤¼ß3ý6Ï4ß%»ö ›õ!tÜY”"­¥èé“÷ãN¼¯ÈÌ&÷ kyÆá–~ÕÎ/‹Œœ|VÞèØœñþ¡^ûè†qgt.ÄCv}�nÖôÑ%p¥jª´–¡#´gìÓǵ/Û8Y"¥žy¬ :Jûœ·¢«àXê}‹ £CL`Yý!ÓÜŽSüŽKþ3Ðmr¹¢o ãTÂìJzÔC÷êao£ËàÔº”)½�ÑR;Oë“ïÙ�ŽßïïamŠ:ÞZÏÇ3ÏÓ ±#ã”C÷jÓæM½óö?è㘺Ûã0݉NÁÏ«™Ä®‡ÕÖó�³Éº´D±¦¼‡nÖÃÉ‹.„#ߤΨ":ÆXþæy”& s°Åó³£�w²çºçgÌÈ‘�v£›5KÏÑ…p"ÅBX™ŽGÇí[�uÉoèƒÎÂï£G/„sÑ‹cFŽ ”bM'mz]Ž®„½Rç3c¤ß;ŒP©ºè4lò¼Vô¦ ãjg˜7A#Gæyݬپ8„.…m6ÞÁòÓjŠ"OéOskÎF¯©.�:Ü9Å3Œy·EJ~t³æ¨eÆLµ �ÛÈæ`êÃèq“ÈÓGz¥ÏRŸÊ'z��}»ò¿"õ3J#ÐÈ‘yZ£›5×Cg£‹aÏ'gØHæ%t”YÊ�'48§ 3qÀëK�˜¹èv†;XžÄŒ¨ºY#ŒBÞ+íäÒe¦OV§XuÞ¶óЩ8áõ%HÌmX)—­ ̸‘�ê {5ÒGèjØr«�TÎ@G™¡ïD©�émÌ ‡y| ó"õ"Î &ÝÑBXè^�âÏùÛÑ6ØÊ¤2:Ì´¯<"6.+ÐÉ8ãñ%HÌÆè)W^c7 %í^B7k”[ÐåHín[‰ôD‡y¦ä:äF¬£Áã\�èƒ}.SC“\Œ62�Ï&Úúþ¤îÕ¶òsªèÆMMö6$z9Åkdjh’î a#óA7k ¿?ƒØ{’^ ä²N²ƒÒ>õ)ýÅÛK�è‰ ;„Šh�ü a#ó¼�nÖXþ~±}Ó2È;‡ �Icd6®Ìö’nôHg©*šÃ¸?ÆûÒAÒ|ý b÷[7`Œy—Š�‰ w7Dñ´(oôHÚ\©*£fÐÈ@Þ—¿çãg�ï.°™Ã{¸óîQ0&;pù¸ãå%Ḧ�¥ÏffÌÈ@­ÐÍjá(tQši7…¹°Û©xþH?ú°„Ü)æ!Ù˜Až«¢)zaÆŒL„nV+~]Ôþ¼ý®°•<¤§¿z3*#—<Ì&Œy#WEC ï!$ƒ,Dw«•[/D—ÅJ3û“f®…øázUCò (#·º¿•7æ ¤¢` aÎÒØ„¶ݬ–J@×Å‚ƒ½…*`"\äu%Ú$NĤäÚ&×™Æ<�<'XDCµ¿Aµ@7«µò»Ð…‰“×Aø÷@"[AÙxdø ’“{®?G�yyB²ˆfhŠ12Ð_èfMàè*èÊÄèdq�Z�_U5‡�Q’”kÅܾ‹y9E´ŠF¨Š12�o·ìl\]šh_: ²üàUCqÄDRLu™gÌÈÅ¢E4Â¥˜#ý„nÖ„®¾]›H…Å>áMŠÆ!—ik$Íw—fÌÈÓ²E4ÁtÌx‘�D7k%ü3û`‡½E³®À‡Õ/¬Üذ»s\®ëór§p Ð3^d"t³&s~]tuŽx´³À§¦>¤´¿Õ A”Çõ§å‰»;±bž@..¢Šb†‹L´Ý­Éøäƒ�ÎÆ}–ö«üŸ’ˆ¶~¿ö¼¼iï&˘'�O¤«è1£E&òùJ Ç¡ë“éz§Qߤ=DÛ«¬x2B{^¹¹—7v1Ze“3} ¶�™çxt·¦Ð] ´´†Žƒ§;ÄÁ *oÁ{½;âfBz̦èþ~�®d¬ÈH¢›5•‡ÐÝ–p³öu½Ž4n†ÀgÎsŒ}Ù-^Eß++2ÑëèfM©üåнé<â÷uÇèâפ;� .ž8ßñ&ö ¤¼‚:úÜ�¡"ý‚nÖÔzmÖg�‹€‡ê²¦xÍxûdî†ãg�Ø'.§Ôï�‘"�C7« =ÃÊÓÀM¼wk²®tÁ{@sjœ>ƒÄ>�8Zƒ n„ ™ÈŒ=ŸÿUgˆ«h'kŽRã‚f_kNM‚Ãg�Ø'�gÔTÒÏŒ»ÛŽpÎ@w«-'o”fÀÉî‚Õ½p­Æ!\ 95ΞAbŸ@Š(*¥�­ƒ Éé$9�iwi¯Ì†O]ƪy¾�úU°"´Ò››ŒåŽ5‰yð U¥ô¯†�Q"#9Ÿåò—æÂ<êvÀKš=M´Ì)´ÖœœŒbm¤óXßßè.³émt·Ú6´�κ4w½8H'�afè(YäTjhNNÈ@KóÆS 2Fd$ƒv\«þ²¶ªüÏÅôÁl§j‹ò°‚r¶Á´ÍÑst·ý6VÌ«©,§?õ†Œé[t·:¡ëþ¦ ^>úQS�G¸ºÓصòz“õ"¤Íì±Ίyœÿ§ÚÊû2Bd¢¾èfudÍ5Ù4ÉCˆÃÏÖb.·õ»ÌNor¢–¿ßföƩ˗Ç~àòMç笚{V­õõ‡;5�™ÏŒ‰ 9z–Q^‘f.V/‰p‡ò££*¬]¿êMOŸ�›ú~—+ö äcÍöƒ¸çX¢DÚ¢»Õ¡Ww©­Çgw�Š5^mx±Î)ª}}õ¦§×gýâŸ@B¸)zú)�ê“‘¢»Õ©Æ›T–ã¯áÕQ]¼ÕuâC½éé6pcìv’gj.°¶Ô$S9¸ÁÑ/ú)û�oœç§Ó&ªBKà7‰‚:ð­æüài.°˜¶y1¹Ú÷ìɯÔÔâ ï¡ÍQYB¼‡ìÈíšóƒË£¹À~P]t2Çcènuå)k¼æd¾rë—ÉÇ•Toï1;’Os~p4Ø®G�Ìq/º[])ü«ú€ÈK±½²A¥tH"h'ºhNOw…}àStÍÉ »Õ­Æ¢ïå“YÓv‡dL6,‰ÚÝoÑáy™d¨Êèš“9¶£»Õ½­y¥Š°ä]™ˆ´oFXO&nûÔÏÃñ�·uéBtÑÉÃÑÝêÁŠï$*°_ìF‚‹%Âqâ©Èíªª;C¸îi›^]t2Çènõd³÷y“çJ³S`8œq¼å·W×hOí<Ý%ö�z袓9¾Gw«7½‡xÛäèã^r±è[.8Û%rÁÛ#ö®¡1îÖ]b¸]t2‡Ö ‰”xg‰ëä}V0Žš‚£bSÁðm¤?G°t—Ø@�Ì1Ý­æßä*õ%¯JQ[ó^¶™N‘LÀÅ+‘ùP!Ý%ö�Å袓9nGw«ˆ +Ï iUóÉ.xTÅ褰I2ÞäfÖ†2*¢‹NæÐ»¥�:KïvôöJ�“„Ï‹ªJæá$Ré�Hk¬æûÁé袓9Ê¡»UN�çì®6>¨¢ô¹1Ë?,—N#…�,±j®±t@ל ‚îVQÃþ²q â)«ÄÏ{ÕvõeáñD’»’%Ö;škì Ñ5'ƒìF·«°á}pN’tϘ&ι"3�{X>•¤ºcÒ„z@s�ý]s2ÈPt·ªPò´Â¥ Ä¥º$ßü=JN›ÑUI: ¹¿aÚ\'è-±/„ïf;rm/º[•é¹sþÞ‘Õº\sW¡îOä?æ¡RÊNôlðš(ËÉÊ\XžH!ü$|Ó}ȵëÐÝj¼j¸Á+¢5Ñ/q‰ ì3fšÑ5's”Aw«áº5Þ‰ZS}˜)NŸÿÓZd?ß¶/äZSt·ší=è.¯ßjÍÕî]Ò³Yk‘ýàtÉÉ×¢»Õhÿ‡}µ?@t6} /ASÅÙ•Æ"ûB{tÉÉ èn5YÛvàÁë 1Ùà\aƉ­øoˆ¯Ñ'ƒ¼�nWsô¾‰G�kÌv:Y˜Ÿ4VÙf£ N™�nWc5쌻´Áú²Õ¿_–äÓWf?Ø�®7¤º]M•=rèKw:W¤ÇôÕÙz¢ËM)ŽnW3½�X¿=Þ]ù†|�¤gtÕÙ.D—›Ì1Ý­Fjñ/zܲh½×Ñ™bu¾GW¡ý ¼w‘c¥ÑÝj YUÑ£–m@%=/<�)ØÚ0Ýlò#ºÚdŽ0®çQÃrèAËUSOÊeÐyÂ}£é©ÚF£‹MAw«iZF�X¤‹µä¼ûtžx͵TÚ £kM©ŽnW³4h†°hZ–tÿ�¥¯£Ò¾0]j2H-t»ŠÐ4[xæ�èኵQCÖÅÑIú²4”Ú† KMÑô.ºbÓëkx%ÕȇŸ.\ª<í 7£“ô‡;Õ—ÚŠ¢+M‰nWùÓ­S|Š꣇ʒú‰< Sô‹k”—Ú¢ M Ƈƒ?gdò™Êµ'BnOb êwï¾Egèz7`�銮3DÏ}<ªýp8—M[~çóàQJâ/E91�ŸŸ¬P[kŸè6]g2ÇEèvqÍ‘lÞê%ìJ£šBG(e/AJ=uî^ŽNÏW„ãƒôè:“9Æ¢»UDî¯øæÂ¯BJŽ_;>—M8ãNÝ´�–/]´^¼Ø>tºÌd-3 T‹ÜoµÞÞáR‡}w^ظØWR*Ý [ïnî�u"}ê,ÁZû?ö"ûÎG·«„mQ)u/1»åú•>Z³$™:2÷—Î}j㋇йøÞi"µö·æè"“A:¡ÛUBÝØ¬ößþÛ4Ç6㫈ÁpÇó�t½­Ëç»9’þô¿/¼Ûÿ£‹Lѹ/ª2¬2«÷ÆP7of +2Þ�—9<í rÕÝßâ7W4ÇwÁÿd3ºÆd�•èv•�0»+VßÑØþa]ü‹ås‘Ï•s�c´¡Õ¡ƒ7Mk·µ6Æ|t‰É ¿£ÛUBÒ m7þñùÃ’`A“Š…óÔTry{»(Z…s�En¢�\µ¨AîGW˜ 2Ý®öÙI´Ï OÿþÃ¥Ÿ±·æ˜§JÎÎTöôãOj_üóßÇ©.²r8¬Øð;.1í}:ÿøOIûGKt�É Ðí*àItñ†8(×ÂÓ.æ¾×\»OY'ûºÀd’¶èvõî*t }`§ÍZõZü2:Tãâmß$ú  L)�nWïv£kè—¿d£P]ïã4A Ÿ ²]_2ÈèvõîSt ý @ª…šfm¹‹{Ó öl�cÑå%ƒœ‹nWïþC×ÐvLV££ã ’‹®ÖÕÛ­Ñå%ƒLE·«wÏ¢kèÿ&ü䋸¬®¬\5‰½€®.ä^t»z7]CŸÛĪ:“Nãò$—°ô›·ÑÅ%ƒ¼ŒnWï®G×Ð7΋«Í»ùÐ1S�ܽ˜H tqÉ }ÐíêÝCèúÆ”û¢ 3k×HTeù nWoº¶d’=è~õì)t }dSîºX÷”áR% �v¼ZÐ¥%“¨ÚI\Ÿ/Ñ%ô“µG6C9ù&t$A÷¶ëÕ©Œ®,™dº_=»]Bù-£$ó¹/©ruUmG‡®,™Äüiµ3Ñ%ô™Á{Í_Ò? _vr&¿˜‡nWϸ�AÌGw¾"õÐ…%ƒŒF·«g§£KHá´½+ºõÕ¸]X2ÈÓèvõlº„R7¡[_�×Ñu%ƒ”C·«g¼�—@G÷¾Ï¡ËJ&A·«gEѤÐj„n~6£«J&Ù�îW¯Ê¢+H¡µ-ˆëòò¶FrÀø Q'£+HáÄuy; ‹J&yݯ^ÕBW�ÂkJ-tûË«�.*™äDt¿zÅ?˜§˜ù‹ÉÅA×”Lbü„ZniK@¯£û_ÞZtMÉ íÐíêÕ0t)Ô®G_â¡KJ©‚nW¯®BW�B­@Oô íEtIÉ$èvõêIt)Üò¡¯iÜÆ’x ݯÍB�BÎü-¢}€.(™ädt¿zôº€r—ÏB_²ÎE”L2ݯ^ý]A 9ãïdŒöºžd’¿ÑýêÕ~t)ì‚õ&Ölt9É$]ÐýêUt)ì‚õ&Önt9É$MÑýêÕ�è RèuG_’x[ 9`üDnÁIpƯIi,ºšd�)ÝÐýêç=܆õèË@Ð"t5É$ï£ûÕ£Ñ襭F_‚~D“L2ݯ�G�(mJyôu §º˜d’~è~õèt‰ÒÒ– ¯9Ÿ£kI&yݯ…. Q†éè AL t)É$sÐýêÑ›èexx!úJ�²]J2ɱè~õèUt‰2 F_ R¾DW’LÒ Ý¯­B�è°NèKAÈ=èB’In6|"ÈÑèV7 ¤/@’ŒÒݰ޴E×�(ˉèkAºŽd”Uè~õèBt‰»ÐôÝÙŽø]H2I t¿zt-º€DYžG_ 2>CבLRݯD�èÓ—uÈò ºŒd’ñè~õhº€DGì@_ "º£ËH&¹ ݯýŒ. Q¶»ÑWƒ„[ÐU$“<ˆîW�  H”­Ïpôå à6tÉ$¦Oy]@¢¦/-—étÃzô1º€DQÊ / o* ëGF¹ݰmD�(ÊÍf¯ˆµ]?2Ê&tÃzÔ]@¢h†oóy!º~d’ÏÐýêÑ0t‰¢ýzú¢ð¤º~d’�è~õ ]@¢¯¢¯ OÎD—�Œ²ݰ½Œ. o฻~˜7ò˜»‹|=¿èš[{=9©RVsõ_3û©u­›9<œÙëÕWQa ,Ó—ë‚. ™é»»NYyâ}EN_õÒúT=¶³Æ~'Gž²@Gã«ò¹ª‚S ÝŠnX�îC� ³mÓˆ~kîÜÑöJ'g¸NM«ëQCUÝ)�f Ö£²è’1úÜ5uK—ïÙ~åà<¿Ê¶¸^{••Ÿ‚ètÃz4]@2@³G�;fBcO�VÐÁé¾jn„/• ÑhtÃzuº‚äk‡^|ãŽþ}vÆåöÏù¼ÀùPÊ«  GÑ ëUtÉ·¾ë²¹�X£9xogÙ{bgÕn�ºá ÚŽnX¯NCW�|©ÞÔ1ÞÞ³ŠãàµîlÙ3k¥nH(ˆLŸ—Ü«îø1så;m†ýFÈŸ]›_Õ� PtÃztÁXtÉOÆþt”¢Õ¬3XOMZ|£nl(€¾G7¬WyÑ$ßXþ×*…�vŽí8¦ìS†b¿( ž�Ð ëÕtÉžß;Im§-¶K'µ‘¨Ô]ÙQ}€nX¯®GW�|`ÓñÕwÚLûáŒWŒ2ùÕ Ð)è†õªÒÍèØÅ£|f¯¥ýˆòèˆG�WÔ�ÐÓè†õìQt hÀíïôÔÔhݦØëhM1É{GÝXQ•C7¬g KH0«¤±ÓÊÙ¬„ưd5Q7Z@S ž5›å)t cÀåõvÚ8û±]ª72AýÕ ÑntÇzµôt àŠ!)7ò�æ`ŠÄ‡ºc³TÝ�Q=„îXÏ>D—�´û¶  Ñ®°_g@xB¨5  Šè†õ¬º„¤ÙÓÿAí5!šû)ú ʆ�‚èDtÃzV]BÒë$P£]ë ÆãA1zÇôäÄYè†õ.º†¤ÑÚF¨>è Êj¨ =«ªlä(ˆÎA7¬w— kHúl{Õfë�„Y¥g«U�ÒtÃz7]CÒ¦¯â¯’pôVé@X˜^MW5tLè†õŽw†F«®¸6;ÝQ¤ûèB Q4tPÆvz®çÑ5$= ›µ†£PŸFê 'æ’#eÑëÝoè’¯ »Ì٧˧!Cõâ ¢±£€Ú‹îXïzž�."éð2´ËœÝì÷4V:*< ¨ëÐ+àbtI‡w�=æðk}d¬ž¨; ªÐ + "ºˆ¤ÁZh�9|ŸûjÉ‹ËÕŒ”¹ë¾åªì`«2Õdh�µvì~h°^8X3’ÈäÝÓr5EW‘ÔC, ˜k­Ãh÷A£õ€ï“#膕p.ºˆ¤Ü!h‡up®æÍJä”Q1x\¥Ð+àItI¹Ë 6Ïi¸ ¡ázÀ->É‘ 莕À÷°ïdusúVÚÛÈp½à«yr¤ºc%œ„®"©¶Ù_C‡{*2\/:); °�莕0¼ºŒ¤ØÈþšã8ÜæÈp½X¥`ì(Àº£;VÄíè2’bÐ'�ŽÃ5v&acGfîÖ‘¸\ÐUvWCçá{Yõ–: ²E莕ñ+ºŽ¤rÆkiçá~ ×篶(Ìnî†îX¼û0à.ÇõVáš;AwœøÐQ -Dw¬ˆ^è2’b-a½uœ‹hÀ¢õêXñ‘£@[…îXg¢ëHjÁã=ÃU¸ ÂõÊáª_v£Ð+ãntI­Ñ¨Îá*Üi¨p½ª&>Uz �…Ź薕Áµ°Bä“7QÜNk<Ågò‹Û…ƈBâRtÇÊø]GÒ©à¥ÝÔm‰§èÖ* N­AB#D!± ݱ2¸N¸ì?]e7}ä-¸E*cSì'™ñ¡°xݱ2J¢ëH𕙥¬™öy˜C˜©¯²ÈÔ+#3:}Ð+c7ºŽ¤[�’ªšÉëÂjËU¦Á©CC!²ݲ"†£ËHúý¼^I/yû=Ck%aéÑ^b`(D¾@·¬ Þ=B‹vªh¥;½†5OETš¼#1."+Ð-+£ ºŽpvþ«Å;éÏQ™|k¼ç—_2§¡[VÆè:ÄkŸ 7Rï1=#’N7xOŸBåTtËÊØˆ®#a\xb%É>žÇ{Hæ®æžž>×{ú*£Ñ-+£ºŽ„ò äÒ&·±öŒG;/«SDw¬Œƒè:Ns±õO’ç=©h¶IT€Â£.ºce\ý º�„sà6™Õ±&>,Ì~‘PP~¨… ºc…x¾ù’Lv‘Ĵ¹‹$ByM œú% 1wû´(£Ñu$¬o=ß�Õ;¯H …$Úæs‘Px\�nYÅÑu$°)?”òÖBgÉÄq¢LCƒð:"gö¢[VFQt ï‰3WPò‰å{Û蛿dO*¹´#BéÔ)E‚nY!o䦔ñœ¸ WPò�‹nì—|©…-„Ï8\S»«"4�’B# AÒËædtBÆWó€%_)7ú£{¬[fýÝ"«_E§³åU˜œ<¿¾s^–.™­ ºe…¬ÏÉ(ó)‘3j)Òg­ÿªÙ$÷æ¬}¥îù~dýòç1~ZÕã SËShúù?ð˜|ÑÈdËÑ-+¥]vF[ÓE¶&¥àxm߯X¤ð Ó?CO/a•Õ] Ýw䦫+™¨´_]w$¡™_ô„Ö”Âê]ôUàÕCÑù|öÖ_óûGý@?LaÉ·@�*.ûEGñÃ_‰Þ›IdÏzðEàÙÄœT–å]ÜÄâ®V—üè}íMªÈ¿Yù”?üŕآR( _Þ-ÈÈ¢ÙOoìý>ÑâøÐ5&Ÿ™­µAʺu·\ÖÏ�«JaÔ{H¨6¦WÒŸ„®1ùÌoš:S¹Š‡Ó©šõ7!ý¶`¯-Ð5&ŸyÝ‘RNçܬ/¸Aé×{hQ]dò—9莳#3�ì }¾CוB§´ý5©‡®2ù‹é Pçz!#›fÙ_Œ�Ìql‚܉�Gv¿.÷¢«Lþ² Ý‘bfgdÓ4û‹š)^ÁýAHƒw�ݯËè*“Ï ;RÎ�´´yÙÿ¿ "÷ù†i0 Ùüºü‰®2ùŒÓýÛü무´š9_\”›a©ô ¸òRX¼l}}~C—™|¦º%Å|�–Ö&ç‹Õ9 f¾I×X` ‡Kq�¯ÑPt™ÉgF¡[RÌÜ´´J9_Üš“àë_-ͬ0…ÂL\çkôºÌä35Ð-)ç∥!‡ç$Ø0óËZÀ S(ìAµ½VœŠNÑtóáÝG|±<;Á3YYc ¾ß1=¯]3t¡É_nBw¤œê¯G|‘}»ÈwG¾ ­²gÝÑPrw#: ºÐä/' ;RPɈÿos$¿2G¾^ÿ´Ì^¥ïEG@IUG4<À�èB“Ï ;R• Yé“ýuW£ÿvJOŸhtüA÷²Õu2ü•<‰ëŠnIEÈJïûœoܰ[hO2âŸû:Jh1®ÑõšŠ®4ùÌùè–Täˬô"¶ÆiÔ[i/&e&À5Y|«ªÍuk€®4ùL`—ð9”™ÝØÈï<…®µ{Yûüœ¿Y*ép„QèR“Ï<ŽnIUòef÷rÔ·Š ‹íÚ‘�#×?€„¬¬ô7—¢h�íýï7¾Šþž±ÓAúeg0f?:Š·JwsÃô@—š|ætK*“ù¡ùÏ1ߟ²þ´:'ƒêMѱP¬kµö5§¢S´Aè–T¦yšÅJ-7¡ëíNäm¢o ƒ1ÖE{‹�ÐØÕhÜž�¢ @w¤2e3²ÛûÍY¢ îÎ 9¬)‡ŽÆLÕÒWsà£5v5ïã h•Ñ-©ÌÚ´´ùqßÜ=]pWÊDæ0©*:�“Q¹:*|…¦~öNE§håÑ-©ÌÏiiïÆ÷KtÁÝy!*‰w¢ã1ή̽ÓZ¨8ò¹zÚÙ8�¢Ý�nIeš¤¥mµøv tÅÝ™•D×cÑñ˜¦èáº]¡àÈ¡ØÌ6ÛêÔõ PyÝ’ê´J{ßêÛ†~„P$: EïçÕYU›(äàÞÇhå(ù’Ѧ¢[R��i�­¾} ºä.Ý�Fùè€ ’½mAcùC¿ª¶‰}†»¢S´Mè–T§TÚR«o›º¤I³Ø ìG #2F�IGJÖIüÐUÔö°ßpWtŠöº%º«’å·Í¼+-íÐ1‰ä‹{r;Ì'~è‘*Ø8�¢íG·¤B§[[þ·ˆ&'Ʀ2’ÖåÔKþîµ3”u¯/í/ n.º'µ3ôNÞ }ân+[u-:&ÿË]ïMþÝË|Z;× Þ�”ˆû«6øÌ]‘pí ±¹Ì=“ßýž[¬2âê~: m/!™mº%õ{]s÷êö�Ëæ©*è |í›=¹¥ÿôëå¸Ñº¼Ò%$íKÝ4AÓ]sª\—Ξ•è |¬NÄC݃Vãó)É5î8ùí£ÒGß ­c}c²t Ép£Ñ- pºè^Õ`AÑÇë;œÐ?½GºŠdº¢Ê[Ô‡"f£/IßgÞšRÿî´L«Û݇БùÆÊèÒ|-}ü›ŸÔЧjÝ?cü�}r3Únç1ÿJב ·9uÓÐ9ùŸ“ž>ͼùµ�'XçÕ‘ûÝf‰yý‘þ²ô º«nQ…æ®)òÆãR²óÐ;¥ëH†»Eu·úÒ«9ùÎøêýÀpéû™­P²ó·ibß_Z%~ËÝÊü¯íÌë®Iôn^e�ç^˜ívå=ëK}³óÿ*ó«þÛ‘CàN¢Ýˆ×€Ž /öõ‡üfÞ(íN%Zm_æ„d9YÞ›£µt!Épg*o\_j˜�ýÃ_> ·ŽO”Û0ón,“µ2¶"-ÅOQ]aoÊÛ¹nΩ'?ÅnYf…�P´ʻן^;’ÿ)Y_š8C귄ɵ0tçwÇÅÕCüçÕŠºRZÇUE®«Ú7u>‡%Ø@'Ê+Ò•$Ó)obºõHúoùú:è ¸óQÂì–>€Ž 'þãí®Ò§hÖUQW ª´fúWkeõ¦�£6L} —øÂÃáÈâU³¿.„W’L†Þ9Hë âjq‹ô9æ)éH1Ëž{ãeγ:ÊÆ¡wJ—’LWVy?ûÓ‘Káùì¯+¹¸äàÆ'Ip#:8ˆ³â 1KzvÌ!ßNBo;û´'–»Ý1mª�\%ZH €½Ê»Ú§²ö6È]Àa�‰[^™$Á¾BG§ŸÕÝQ#¤Oò¸x/ ¸áëSK;{Ë*V;§*!Fׄ;¬v³Ìô?ÌýÆôP¸Ñn_’Z‚O3«÷–K/£˜Gº=Zº³È¼Ò¼çõ{êS¥§sÍNŠöƒêþö­â™éñ #or´ YŽ…ê‚ÿÓª/HŸåkÑ.ôbéªÛ(ý«T^OÛ9åk©�C¡òaê¦ ªÌ%L®�øº§‘³¸«$�6Kü÷§YÞ•ÖXz÷l¡³à©‘£“N tn‘�ó^,{N2žß^�k”y+ïÀÈo˜¹ÝÁ�FI³|ÿ¬)èµhv«eú«¥Ïc½�¥>�l5ï§Ë¥³Ê°ÌÎÙç(81MuÃûXéØôÅÛh‘àWgŽ6a˜š¾ý|ËÜÅ'¡,Õ|.LšpL÷—–Î(ÇÕ6B¿#�L÷’ò¾÷­ éGíïW©z4Ü9)E¢§/BG¨ÚwWYg¾RîÅNynã×vVTá`‰S_¬+—‹%Ë­.cÌPg¶òæ÷¯¿ÓÒ:D}ã)ôh¸T+”¶€¨'‡¶¿äGéeå°³Uïè Éo~R~çwô˜xsåz›y®2öžša³ÄY_ë¶ñg 쨇�從DI~ó òËÈ8×£ÇÄ£o’nSiç·èX]±5ç kϪöùüúiG«ìä…’|Gõ¥d qè1ñèr³Ò�80:XÇÊ­Q8ôÞ­¿§Ä-Ïoû]%çÚÉ®:JòÛ®†‡ù÷š8¸·®Çqè`�ùÅÎ{õ•¿¬ñ¼¡{ÊdØl'ÅGÑQ’ßXïåjÿ×=(žå·sOÍÓþÞ…×¶›ßv�˜FµŸúk“¯æ:÷—�<¯DGI~óŽêkË@ Å;Û¥VÑ�?œÇÝ£hÄÝë8´}ósŒù¤<‰'ìdû::Jò›ª¯0•2|’D¦q¥œdüÈ×zö½ódÊc•T�¸ûÖ¬[Ù4OYβ“ó_è(ÉoVª¾ÎLT=*}ï(ån§_†Ž8… þùô¼ö˜?ýŠ®‡°›ì$¾%ùÍïª/6•@�Šˆf]4ÁŠçþ0g®’¡vêɢşÌr”‘¾±“ý÷è(Éo–¨¾âLTÉÔ½m£�ãt±ò¯�EÇœÀµ'+h'–>[±p^sî7pª®�´AGI~ÓYõug$û» úZ¹û�&>éq?î95eêp£l×#=žñU±|0–Ì;•hŒŽ’|gšêËÏDµÐ£"åç¹7lŠ:ÖE;åGئIC�)óGêƒÀÖVðè ÉwþS} )0Û‡·v‘ü§Í›¡ÃŽZºdë¨[^,‡Î]#[ûúúñõ)AÙZ tF ‡EÌ7µ]¤ßöOßü¦xíSñÁM¥ãšWn ßœk[/óžFGI~ó¶êËÑHÑÃ"g—»ÏŸ;‹ü0[¤Å|Ñé¯ ã ÇnµS {ÑQ’ߨš�>ÅÐã"çìÜ•à ü=YÏß ;ª‰½7±È?†ô©#Ë;eú%ùÍóª/M3ÍC�‹¤�÷¸+ÂÜß!ÃþîzÙ1Mà‘6[VÖóÕ§>¶Ö¤¨�Ž’üæ5Õ×§™îG�‹¨ÃÜÖ¡Ö�@1¼Mr<­-,zÌ�|[?Ë<;‚Ž’ü†A¬ÕEŒ¨‡g¸.ÄÒ!í|ÎÖm¥®µ�Ð~ü™¨çF_šc§l¡£$ßi«ôB5ÖJô¸û½²ûZô/¾Mo°‹+\¸ä¿!“Kr5o¾µS»­è(Éwª»TM6=.Ò~}ÈK9&æÏ£-Re¯>mpŠa;Íêó´� ¶EGI¾s‡š‹Õt³Ðã"oª·Š4š¼]G”kÿTñêcá«Ö»’Ò¶Ùª#o6 í\®AÀWûîöX“™…T‡xBE‰±‹Ô±äGSÒòÔg¶C¶ªiÈÖc¤�Ç¿Kë ôÀ(Ьˆ×ª4>Wå{@ΔܲvÖÉ3ЖOªÙÚ®ëGt”ä7›/Ù Yƒ%Z;ÚëÖÒ Çü¤$´>7Ê­ËvÃ;ù) $ÊವæÍht”ä7Ÿ‰]µÌ·{Ü*Pš=¯^²A6¬b�Im88­á-My® ¶î¦Y�Ž’üf Ð…8þX JÞÝ2åió§Øºï—m¹pVÉWš· î–OªÙš÷ß%ùNO‰‹7€‚ø!Èaõ¥¶gê9æç:^ƒÙÕ½…÷™HK;|}TÕ-_q¼�J·@GI¾3ÑóõLEÑ£L•¡rUê?£êƒnãXv×t‰—£î”,NhÙÚ|¬,:Jò�™×pÍEŒB+].¯hmÒõ5òÕsø¹ÃÓ…K¸^ +Z‡ ÕÔ(lFØ)ö0t”ä;.¶= ‡ OZ¾ÖÝ.!ÉL[³å–B}SžùòsÊl¬ÙHî´ 9ÇCÆëvªÝ%ù'‚$ðzd”*lë¾çÚV˜Pó¾—wû·y—§OZÚ¿¿wE»ßX½ø¶Qßÿ'õùK¶õ©Ÿ²È–ú¶êÝ&ù�½Æ ¡è‘Q«˜Ô�³PõÑe Œ¦¶ê Ý!†üè Å—¸±z GF±)Ÿ/E—سîè"â»Ô÷\_d«à¥5KFÙ®ø7Wà_®W)‰.±G'¢+hŠÍ§ü‘]¶*ÞZC°dÑ;r‚±“’fÍ�žôº|¦¨{õÏ)fŠ­uȵ×3‰øBõunª©è‘Ñ €àœÝ£‹gŒûÒ7¦þ¡ivj~®ú`É0_ª¾ÐMŽi·]&¡ëìRqt匱}}ú›©ª‚�¢wR-f�ê+ÝT_ GF©ÎgžuêÆ�Cv¢«ìß¿²­AzúÌÔ?eë±&ê£%ü úR7zd”Øqq™j#‡|Ùãÿٻ󀛊7à¯BIY²Ë.k’"[Ö²¯ Q–²%ÞPˆÈÙ%~¶W–”HvIö­”5û’в„²S$?kÞåÞ™9g–ç̹ßÏßï;ç™gž{çÞsçÌP'WÒLê<Ú£Çê@ ÿÏIû ýá‚e¾×ýZ·ÖOÔC£ÐŠ×f?} å¨TÔ9UäSê|Z$ùõ|UáÿY‘¼çÖ.XfˆÞ—ºÅ¾¤iÛ‡øæÀø¶©.R§R1Ìâºßxܧ*ÿïö e¾‹þ€Á.§õ¾Ö-6€zh\j•`UþûÛñÒNÕ‡xŽ¥p æÍ”ñ7»¼_(õÇ D vÑùR·ZVê‘qèߟö�9mËBê¼éV“:Ñ6é~k•Ý‹Ü?, ”{=çƒÍÔùb·Ù;Ô##&Ó‘ýs›:±¼üÉLv‡çsÔ¹½F&!÷_J~Z!ƒ]k|±ÛÍË碯IXºhº$)v] ³�rW¢Î¼Uæe¿•6~Öf ¥¿‘�˜Á.4¾Üíö!õÐÑãóý÷'ê–x-unˆLy–zìÒõvÞŠrÿ2�Pþ›è,ÓHßËÝrSM,ÉšSg„Z•|Ôc`—Íw>hüÅýÓ(¡xÜ@Ð`—Ãú^ï–J=4±ÜC�j}ž£Ë4¼“¹ü¿ú m’ö�Á6Mõ½à-—…zhbÉG�b¯P�€mþ[ SÎÁß²¬Õ3X&Üß–B«E=4±D-§Î©� ¨À6ƒÿË]qþoƒÎúƒË„ùÛƒçvþñËN$®Ä§Î¾u¢îî°Û‘ÿ×Ã…Fá¨þ°Á2aý¶Ä²<Šzhb™C�:î¡N¾}vßM__þ_‹­Æ|[Ø`ÛO6Õ'õÐÄr†:!d&% Î½…ÚFK ÿ€æKBñ§�¸Á.Ý´¼äýà[ꡉe2uB¨¼E�yÅx¶ü7‰:»ˆíÃŽSM,oP'„ÆžG¨o¥Çççþy.¡±èg p°Ë\-¯z?ðÚ¶}ɨBbÜçÔy·RÅIÜÏýûß…ÃkKÛ�^x¾-‰8O=4±¤¦N…ã§©Ón§r1²8›û÷ç„Fã ‘ƒ]^Ôñ²÷…ÄÔC›¡~w̸ óô«i_6t=–ÌÔ9·Ô{‘1Ò¸�ûbσ2:Ø¥A$¿nÂSꡉmœÞþ¶}(Q�Ï£íò­ØÃúôæÿø Aý3‘ëùÿ!4 %ôG¶yBÃ+ß>£™Ø–jêèêBgÒí?ìŠ &·ÐtM3Þ4�`ß(ëñ`�[OBXFzíÙ( W\Ç‹ßFPM,UwpOÛǧÎ=ÂÞ£°ô.ÕW3e¬¡¬úÑ[±’9‰ÿ/U„FûYBlÊß–|ã=ꡉ%¹²že/TìRÚ¦‚¿OŸøa’² ‹*ñƒÞTú[�=±Ò)°-Oy¡qÁ’8ˆ-‘ú—¿O¬£šX¬¸NÕûÀ7÷�ëîôÊ/>6JþÚâÞ™«#}áã¯Ø ­Êÿ±/šÕô–yAùëß/RM,ë$ú²ó«·NI-qñ¿?_AYf™¶|©,cáiÄÅ89]Ãý'±)^0>Ø¥ˆê7ßðÚ°.V\×Ï8ñõ§G¦Ù«&€Šýôÿ`öE5±†± Û’¬àþÓ×B£Ã_ áæ)Åïþ!°øÑ('+®ë—ž¼YEõ1¬©”¥�¾Œ¯íWJ}ÈáfÞ⸉åïeò�Ð-0?Ø¥•â7ÿØE=4±ÕçÇÜwô¡ó+U×FÒǶiÉ÷«øò¡B× ©-Íý¯:BCä¹—Л¢ömÀ?~¥™ØØïÛå^i3ᲡH®þ%3ÇÊ?†/J4X$»¸ÿö±Ð(ýc `™æjß üãõÈÄÆ>ÄÔäqÇå�§ªú&Òg¾Ìïû]Ú` žÌý· B5Å@À2-½ øÏ¿ÔC {ëýw)BÊÿÉK«%³Üq*ž.PèÁ`9æÿœ÷›Ø`èXæoÉ7ÿòÚAxìAÈÖèßSv´ë÷êµÇ5-78hš‡sÿïªØxyí˜N w¿ëW¿ßyí¾ ûAþžÝúÝ=uNn§éͱ¾’×v‹±ßΠ©>ÎÿG±1K¨¿`±ŸÏÂÑÛÔCKuf´OS‡÷Þît)® mÊwêx–¢Ï`òРgð„§âÿg�Å¿A”ÖÞ°Í,¡Ê G^û¸µœm7êðnÉ7ý£$7Îä”m†þ™”:Fÿ ±c³À^&[„^èïX‚„’Œzhb õ¶|SJêèbº|lzÚøvt+—¡ÿðzÞJ>ôp‘sùž§ŽÊ玄*þög…^S t,ÓØáûjØðÜÖqXѾC�ª8ø?ç-zIœ1Ð °Ì?ßWÃFꑉ­+Úå8í'Ü YM¹ÿ»Cè%‘Á@/À2_9{[ ^ÛŽ7î>Ý1(Ú2¬ú‘®ÒÜÿ�,ô’h¯¿`›™ŽÞUÃH%ꑉ­ 3\þŽyàkïYüº~zIt0Ð °ÌPGïªa¤õÈÄÆ~äêð€ãgrî??"öšàŸ,ᦴƒ÷Ô°2‹zdbKÊ wux@ªc•7ödb¯‰ƒ:vùÜÁ{jXñÞ� ÌpwPG¤X?ƒgåþ÷Ob¯‰{ tìrBü-5¼xïëzGV¸Ó¨£JG«2j£÷ß3‰½&rè X攃7Õ0I=.qõfÅ;š:: T–UU¸ÿ%ö¢øÄ@OÀ2Á7` {-¨Ç%®¬x?£Žõ`n«/°—ÉE¡Å×ú{¶ùÎÁ»jñ܉„�˜·¢è°Ÿ \å6P[èEñ°�®€e^}K /å¨Ç%®/™¯¢ÈŒà|�à»r\èE1Ç@_À2™EßRà ÿPãr2.B�yŒSÌü½LÄ6¤¨m /`™‚ï¨af0õ¸ÄUŠðCÔá•yÙ9Å|·‰ôB/о:–™ øŽfêð€Êl^1Ÿä6‘HìUñ¯�Þ€]N‹•N˜)¼™z\‚x�q/êè€J}^5ó?\îhÔÚ@oÀ2Ìϵáʃ‹°""±"Æ^Ûá*-·špÛ8,ö²Xg ;`æçÚpµ„zT‚ÉŠ?p†«?¸Õ<œÛÆt±—E‡8‹ÕNxñä3·cYãH©0%°êqn#‚[â=f ?`æÎáêõ¨Ã~«ÈD�h˯æTÜF≽, èX†ý€sxÊN=(AmeÆü ux@¡®@9ó÷2™'öºðä�] Å~À9<µ¤” F0cöÜ!î`Â(‘zîÎm†¹™ÖŠèX†ý€sx*J=(Á5fÅŒ#¥ÂÑ9¡zNÍm§ŠP;ü{av•NxYA=(Á]cÅŒ#¥Â‘Ø$ü½Lš µÓÙ@�À2ìœÃR ê1 ¡%+è﨣óÞ‹*èï¹ �{eœ0Ð'°ÌbµF¥’.°‚ÞB˜WO¬ à6tF¬¡· ô ,Ã<é.,�¥’6°‚Æ‘Rá§za±‚~šÛÒ[b ýi S`±�8ÃȘ¼ÔCÂYfØ8R*ì,¬èôÜ–ócÏgˆ£¦`†�O©G$”Ṵq{!Ü”ýù’ÿûXQ±†æèXFp#µð‘�zDBiÅ ûcêðÀ°™¢}�ÛT%±†øÛ2BØi*Z†abõ€„–‡7ÿÔð•£{DKš¿¬Pði°iº–))Z†ab%õ€„Æ|¤,ut`ÖTá’æïe’Z¬¡òº–Áƒ 1yô)ÂʱâÆFE᥇Øö#7qŸß¸*ÖN Ët/Ä0Pˆz8†±ŸDµÒAQã¶VU¬!ýÛdtP‰þw˜z8~`>Ž::0©ûEE�ŒÛ\ ±†öèX¦—ƒJô½q ¨‡ƒ�ý ut`Ò7NªúKnsÙÄ¡‡“ï¾çɳïø�ú‹Ôá�9#²;©ê¡Üö&Ýo k`™´NJÑçVó�N Ä>dux`ÎGŽÊú·½�b a­8ıÎQ-úÛßÔƒÁ6…{ZêèÀ˜y‹•u7nƒÅ` o`™¤ŽjÑ×–'  ¶N¬àkRGÆ0÷ÕŒk<·Átb =` o`gÅèg)¨‡‚c +øÔÑ�1õ�Õu[nƒ‚›añg"?«ÑÇ>¤ æ‰ ý©£SÚ8¬ëÅÜïk§Î@\•–£o�¡ æ�‹öÔÑ�!Qµvd¯ÉoÅjl¢{`ÁsÍ|¯³ç“êÉ ÿut`È~Ç¥}”×${…ø]OšèØå’ãzô§W¨‚ë)fü—©Ã3Ú:.íwyMnl(©‰þ�]F:®G_êÛ…z ¸D²:€#¥ÂCçµý¯Í(feÝ•ßDÁ.u�¤­¤ãXÀ‘Rá¡¿óÚnÈmtŒXC÷èXæ=çéC�×P�ƒ€â¬à1á°pÌEq�å¶ÚG¬¡ tlã¢"ýç~êQq†Õþ†à-]7¿4—b&2ÐA°�³}üig^êQ‘œÕ…‡©£Þ+좺ù{™0+»Ëó+Ý�ÀR%é7ç¨AȬ.,¥Ž èæ¦ºùO�¯kO«B\ÅÜÔ¤¿x ïMÌ�/Ÿ Žô«îêêlÜv™ßmïúÕ@Á6SÝÔ¤¯<áémÜïªÎêD¤—Ã5¿)ÄÂ?®ò~±†Æè"Øf¶«¢ô“ß©‡@Póó'Ž”ò½R. œÛð#‚ áQtˆãO—Ué¯R�€°T¬nàH)ßKâ²Â¹{™$lh…‰^‚]D7Âñ«Õ§©G@Ø(V?ÚPGçS›ªSGpljS.K|¯å·jj¢›`öQ©þ7—zÄ�gõã/êèü)¡wžŸ{Úm‰s÷29-ØPÝËTp[—¾0�:ýÌguäêè|)jôõÔfôÄ—�î«ÝÖ8w/“(Á††šè'X¦¼Ûºôƒ 6íb{/«'¨£ó¥[KLrBÇu™]9/ÁͰþ6ÐM°�àc¨þ4�:ûN0þ©M��¾x;»Ùèw;v§ ,·í?Ä*f ›`›¯]¦ýÖS'ß‘|¬®,ç<Ž=~7¿�ˆCaHÉ–‚Û8sŸÎ»Rè'Øæ÷•i»ÏS'ßöƒ ™¨ÃóŸjÑó›±$i,kÝ—9 ’¯ÄúÃ@?Á6»ÝW¦å Û±Ö]3X½™@�ïNõcõÇ’=…íô¯µiHbi+Uê¥xÍ3ˆGCÓyð¶—¥ŠÓV§ž¢Î»s YN�ÏÔ‘çõ+/êÊÕúç¼öE7Äã¯á'«\uZª4uÚ]ÈÏêÐ5êè|æ�P‰~Ðü/!)åj½¯ýŠ‚ -2ÑY°L¹ê´Ó×ÔYw#«G¨£óÖÎS¦nÊ)YìÜ�6ã 6”ÄDoÁ2�I–§�¶®Èt�ý Ñï»þ´¢3+ÕÅ“ æ;Éjç.7]H³ÄDoÁ2oJ–§…ês�Hð¦Y�:H�Ÿ0WL§Ê|ðÿ˜l¹ó¿8î¿Í@oÁ6ÏÊÖ§uöpOHð¨þ¬^Õ¥ŽÎGøO×n|ÏX0eë�¿‡•àsî ôl³]¶>­³›:ån=ÊêUêèüãýeü"ú_MC'¼¾WX¶ÞGq¯!¸%wgÝë¸=éÌV‰¨îZ|V·öQGç ÕQŸüF‚ùEºàwr¯1^°¥ú ¶i/]¡VIlï¾µ_²úÕ‹::߈—[°”>]c ùŠÏνH=Á–l½÷ :‰~üð‡?ì{ý?Ìõœ½©£ó�/„‹iÙ:íÁì�-øë¸™DÏtÀïl×%j�/R§[B)Vϰٶ"¯9©§ÿê æhU¹z¿i/ï*ß6”VogÁJ�”¨5^£Î¶VÏrSç8*¨'Îj fªL±ßÁÝˤŽ`CÖm` 0ï¬ûKáû¨“-‡ù ÈsÔÑùƒè§ñÿLÔ˜øËA¶v®'ï2 6ô©¾ž‚µdwJ°HWê\K:ÄêÜêè|¡äÇU5Fß êù®K=º¹¼Ë$lèUm{1·Xò•~Ô©–µžÕ»ï©£óWû†ŒÊ§'˜yÜz,ÜÝl¨�žn‚ÕØ[,ùˆýGfdfuï1êèüÀå Ï 7h‰¦Œ»hb+Ȼο‚ -ÓÒK°\È�«ýåaê<Ë+Àê_êè|`D ·ÕÕ;�úh,vML?r¯$¸Ö+ÒÞg¨@ÎÎq>ñR^ê<ËÂê`Vêè|@bÑÓjî®éŽ�tM ¹WzB°¥ÓÊûöcžµíü‘޲zø2utöcïâÎsHñ—�Í‚{rµç^*›`KÜÁ†Ô,õð¶æ­¨³¬k‰ÐEêàì—Q®È.¾¡4šfrÑÜÕ˜{)æ>ÏÑü¬´ƒà÷ª*TïúÕ'ÛÀmauÒs$¡ÁÒuÖ_å—æ`;½”èfXEvü¢†²Bõª~yÈŽy€ý1êè,7¢…|¥u©,— ‚áîe’D°!lù qUWW©Þ4NÓ2}ó^au³'ut–+«¤Ø2¨*¶kJ¹éïZ̃¢Y ¨oà'~$�N{e>`ûsöÄ**·Õ›”„SWQ87ôä]Lt½×wJº>£jµ‡7-ü‰:¿ê0ok  ŽÎnêV³Oª œmÊÂ8­²’`CÙt |gŽÂZõœ¾9©Ó«Ð»¬žÖ£ŽÎj?+¬¹SC7ˆ“_a8�t¼«‰î‡×B¶[àGgT«Ç¬öÕƒ#X]­L�Õf(-»I­%ÃQzÌ[ÞÕDoßáQtb²ÊbõÍ�}]KœÍ˜ÛŒ¹_*œ­Jc™È»\Ñ–JJõ üIô<ûtðÙüÑ–ÑÙåøxèÚÑSÊkïšÌ—�‰JCá7�lÉo¯'P!™Òjõ�[©S«Ú«¬îâã¡kZîâºÿ"º¿º ÚÜ ŠnÛXÉu—À¿—«gøoþˆx‹Õß#ÔÑY눞,ïöKȵqtà^Pô©w=Ûփ݈~�µ‹ç�ˆXþ’::[åež,á‹\-Ç:*¸½º°y¼+Žlè’›î€ß‰îæl• ³¨Óªs±)÷ä9î}Ux<µ‹x†©Ž¢:ïŠK:ï¢7à{KU¬TQñ4—ç0y�::K•Tÿ z4CÇs¹¯êžá]r‡`C‰]%|®˜ê‚¥×Ç/û'ÆÄ|dut–b®L�WþC‡ñ PÂnÞ%W 6´ÅeŠÁ×ÔW,µB>Ù¿=Ž ŒNç ÎNj¯Fg¿ôX¨<îÁ?6”Çu–ÁÇŠ*¯XbGP§T—òŒ^÷¥ÎNjŸAª¶“r¢ß¨É»æ#¢-=)‘hð«"êK–Ô«þ-ó–¬~_¦ŽÎFûLTdä§Âiº_Tù¼‹¦méE¹dƒ/©ÚÉÚ#ü¼T„yh…�ö6f…¡¢\›L0 ѳ9œxœwÑc¢-áY#ˆ‹ùÓ¬uÞ¢N§N³Y=çþV q(ݵ�iÁ¿Be×pé�¼‹>'ÚR鄃µÓP´T¸÷{­ÆüÅ÷~êèì󦩲¼nm~�€˜ŸÜêÈ»j”è³ÄÎ%C褣jIDú|³…§X�ÿ›::ëŒXfª0o(\–ûHøæ*:.Ü™›ˆ<‚-¡Ä µ›*Ü�:•š�`}TlI�u«Ì[~åm�0XÏu×ðÑG°¡bоÂüiÖ&¥©3©Ý8Fï Qg›÷Œæ8wX³é¹êo¼Lˆž ›RUêÁODŸ#ò¸=¯Q'R¿IŒþãÄQ‡2+Í»^>ÆècMmÊË„èÓøü�á! õÔT·f]œ@�G²2@œeLþ‚Í_¡#úGÓ%KóRq@°¡S Ó¾ÁܣϬ N£ Ìmg¸w* š÷�þ‚MûP TÒuÅ“¼\$méªâA?h¥«p Úx…:‹FŒdå utV~ÓToXðˆ^Öu½}¼\lmIæ ^ð­Æº*טý»}I ¯±’І::›¬èlª6ƒ˜l®×·­ã^2¾m ŸQ ˆ¶ÚJ׌ÈùÔ4…¹õFØdAŠ_Уéwç2Ñs�û‚—Œº¢-ù}�<¸2\[éQµ4u�až?ìç]ÀTÛo¬:Cȳ?VDŸë»Ö$^6~mi‘žÑ»%ÑW»Œ §-ÞÖ2Q‹:8{Œ(a¬É©g\~V:JSGg‡V‹ •§�SC£""J-×z�Ò¼”¼$ÚÎM† Fë¬^}¢Î›y™XùÀy?B.˜ªOAK«ë^É=&‡õÓZ ¬½ !lMÓY½º¬®K�6Q¬�ª¯PGg…ߌU¨¨Ï¦¯Ö{ÆŽ·Ÿè0ÝÄ�m>ÕY½š,{Š:k$Xgÿ §Î Œ•¨gp÷2Y$ÚÒ&Fló‰ÎêÕ#Û ê¤Ñ8ÄÈI[êàl ëÐ /ûŠ—”7D[êgbˆÀ6ßë¬^-Ê=O�3";IÉCœž¤ÚÅ�÷°Êj¢-e11F`›!újW�DÔ#üÙЊ::ï‹oªD½¤ /+ψ¶ÄÝ—ÂÑv�Õ«Þò0Þt0+1áù³�¥l]±.¥3/-Ì]ž£knb�À:V½¬.~K�.Bϲ2ƒ52à ‡WÌ3éLºG¨K¬zSáÿ@œm’¨@ŸøŽ—£õ¢-%61b`�3:Ë×­i­\õ%uµ± æ°ÞfùZdœº[bòÒª#î²ÔÁyÐépÿýºò¼$ím ý á2h¦›Ž4e�¸äLí'R�gXçzÿHœ…ý/è�³Ì…w ËnbÈÀ:oè,_wʸéÇçÔ±:ÃägUçZÒF¸K©ƒóžüj ÂNܽL 7ebÌÀ:u5V¯+{ö»éÆ•Ž7þwLû9‰³N<³ É°}7½µ`É®â©\‡ÒâÓéªÓ-ãF¨ÜOšá'ÌŸA¿­ 'Kë„[®„ðf8†dÆU7¦�üxHÈÍNÌš>7]–/š³–c…зܗžyž5×G6 ŽÎk>q]‚¾²Š“¦UÂ-áÈFcñºðG<�}Ý›föÌI§œÆÔ»è�A ;È ‡nÅ”Éŧ?JÆÉÓvá–î32n`›Å«×±�— ôøXÚ‚û:‹k ÊÇ]cEXƒ:8�~¾Áçšqò%¼ÖFÆ l³Tgù:ô°¹n?Õð­¶NBwá ¹àBx‚ßaêà¼EüÖ¾Ï åeª‚hK܇Ú!,±‡fz·„Ïkî ¼B#‰oeg×�64�yßýÊ Ÿá> $¼ú=…‰�ë”ÕY¾N JKÑýxß°jŠ¥ï[¥(b¼£#´G)󜿤«Ñ/ºñR%¼EÖÙ ³|èËû¹O›¤5·ˆ‡yàEª0#"&3âO–÷¼˜[ºý‚[�‹¶ÔÞÄÈ�uzê,_qíäwO”p°¦ð¶Ö��¼•‘Ú°úÌA” o1ë/órõºhKMŒX‡¹K¸1}ÈOÌ|êB;Ñ`¿"zFýFL8Rê®Ò Ò/Zð’ÅúZÓc¶aînJ'Þ³Fœ^ûÙÿCŠøò±BòD=á}O­L'ÅÉÖýÂM¥62z`›<ËWPw»ïª×åƒÑ‚!ŸÉD+ ­ñx“÷¥sš“­Â-qÏW‡°ÔV_ñ ˜—:Ñl�)6£ö�oþðÖ!'•ŒGãQùþ§¦*}‚·¯ôkÂ-å22|`›W5V¯� ÔˆíK±_ÔÇÍ5XF48Bþ6<ƒo?з…[zÌÈð�m’h¬^‘÷S' ˆžÛ„bÿõˆÙ°~aÄòµÙP<눚²ô ÞÓU™„[JbdüÀ6h¬^݃#áwBÑ4úpzMF$�› Ä»¢ú¨)KßXÄK˜pK8´ ‚©¤±z¹öxêÄ�>ï/Ò�qu †t/#�Nãð°“Š Ó7þæeì¢hKMŒXg«Îòå¸èîôCnéãæÖÇË£�±(¼ì(ÎA�¥/eµE[šabÁ:=t–/[‹cÔ�çøs§@/JÛ„¥$# )uC/U¥éµx)ÞŽ;·‰û¬ÖY¿,ï�?~Î7wŠ@G^1 +úíæé=«¨2}d4/gY…›êabÁ:¢ÏΩö ï'O1_àð©l†¶XìȈÁä�1áä-©pK“ô Øê”Æò &Õvê»t¸¯k/ë½åµœqm¿Áx,t€íü¬ïºñpzp¼½Lº ·´Vßè�ÍD·Vh±Ï†P�ûØn½Ÿ³ÿ`\:¿Ö+ jÍNOî—fk}òS ¼*/sUE[êì‘ï¸à1bϪRá=êþʘÊí_Q�—O̸ð—:/,ê~äø[Ãâç"…î^&Ë„›:¡~ÜÀvh,ß8NY~ö*ÕãÓ¯ÎZ æ…U–™ÅŠ ïw›Z+½î“¬ÃÃÛ^îæüÛx+‚!<-ÒX¾± Ò¿ÖU³¦cx}ì¶YÛÅã3.›EÛU…­pðCIJ ¿ˆ˜,aËp·i:¶à¦žê |¤€Æò�Íø1°ê­øƒ×É—´—Îzä%]—ÑY1\L±[Í^ø™L¯± /y…[òÐn9à!Côol¾8xõ ëlò›–êÚ¸4!ã¢Ü}Wµé¢"6NþVþÂÅ\\8lðö,-(ÜÒ|ù‘zNcõÆ4�º«Š°'¿ig)=f=rQÏ%ÅÅs¹ÕÂ%Íä6&À9è,¼Å Y/5Jà[{4–ot×´ÝÚ1í^WKh:žƒ5T­ô\RXq‰ÒH|¿Äð¿J\ØÿŠp²÷‚pKYÝø™¡M *húXN!9¯³íÔ.3ºƒ5TÄç;ÊnÊÙn`Zwžl’¼°Ïñ6Ñß ïš«áßc=] PNê~ªÄ}»Ì£e½ò!Æ{긠°Ô*J¤ø¢¤Ž/¼—ìHM;dæä¯©pK‹]ø§Y6PwS­ ‘œþvб íëŒ vÕp=q•É–²Ežwta<ƒÎ–„“?ÎæÑDâQt¦‘ÆòýÏÔ½T­ ¯Ç 5lkÂ:þ'‘úˉ¿“. cfñ/"ÕT^Ø�æ$ð„xS äj|ª™¾êý�ïŸæâõ¹¯úc]¿g\®žò«‰ËÄÝgÒ¡Òý&táVO(¾°ïdä¥P¼©g¥ëüˆuÌ„" žLg cçÙ[ö¤Q}ÉÏWÛ¦úb”SX+w�ÍÙ¢TžáŒK5Uz%qÕÔUJhÅý wD*W¶o9¹ø*þþzêl·@cùh—évz-¯÷ß)½Þ׌+5Tz%aWÇ)¬–)é]KYC¶ÛÇœñ{Z¸%îÙ"žjj,ß@ ³7NëÖd÷Ah¥óç&Æ…Ò©¼�¸ôêJ…/ëá.ÿ]Xü¸°6’3~ ·4Fo!�­k,_ŸìáÚÏÜìSxµ�×9 ð:âÖ©«1×.U¼ue‡Ç�„«šœä>Ït—ÚÛ±àßê«Þ@ C~Vã?ÈŸKÝÅ~b\f¼ºËˆ{žâ4Ù*¯Wʧmí°ß|ÊÁéâM­0RR`›|úª7ˆOÝ;í¸‹y;ߣìZW—á>2¦Ã…¥âÈ2î¯OpSKÎnoŠj™xœ¾ê <_{›ó’°PÝV댟\N)»ˆ¸UƒT hP™3„{Å›l¤¦À:—Cö¤î›ÛKð²P?“ªk½Ì¸ŠâgNdÃO¨ÍÂyâM•1RS`}?G¦ îšç¸yȶFÑ¥¾b\䜢kˆ[©®R@“…¼AüL¸© &j ìÓKWñV¸BÝ53øK!w)ºRÆ5ö+º†°·µo‚òžäŒ¢øFáñqÛ§«v¢î™)ý¹©˜ªæB›—øHÍ%„Í3t2Há­�:.ÜR#eÖ™«©tG‡ÍfÛ+ðrù§’ ±á>§ž·B~Î0fn‰d�xŸ®‡Áž¡î˜9ոɣäL”UŒ+”Sqq”Õ èTš3Ž¿·tÑDY�}Vè©ÜbÔý2) 7Í(¸ÌÆÌû8O÷&ΠÆÎ@oŠ÷s „)=•ëëM°b{¾=7eU\‡qöFí ›ª°R@£Éœ�üD¼)±s†!ìpdp#9u¯ÌšU•›?ƒtb´ßŠÿïÊlÅ#„–àí‘ÖF¼©FJ ¬S\CÝV0ùvæüOr|'›Èh¿µ|ó¢òŠŸ„ ´¾à åYñ¦š©-°Î@ uÛ•ºSÆ-忤“üEX›OM—o^T|u…zMâ å3âM=f¢´À>Ô—í;y©;e\õÜܬÈßÖÛÀhý�“š¿<"g,_oê-#ÅÖyA}Ù–¦î�Ùü´$”½ÆŸŒÆ/©è„Ö/1à-U9cÙ]¼©�XÇÁ™‚Âó™£ Ü¼¤’Ýë)FãÆ¶š`} ¯ù—3šâß&y;ûB˜R:èaê.‘HÐ�›˜_$/Ázd›Š>ØË=Ç<ä=Îp.ni†‘òë<¯ºf;R÷ˆÈ½üÔT’¼D‹ÐMWQÒ>þ-ðÞ9PÙ„[Êm¤¼À>ŒÇÓ\á=ýê[‡¸©¹(y6ȤÐM/7³÷X3……ú•æŒ''Ðÿøý|jp©�Ú’Í>‚ºCTJòWbÕ’»B1FÓJ¶ÛâéÒX]¡€'9ê`¿º£5ÁWX�§¹0Ÿº?tøGƒFJ]€µäúˆ¢N0ÕSV&`Ä_œ}E¼©ßMØGñÎ܇«zF[nvÆ•i$£å/Uu‚¡§²*3^çŒh:ñ¦Ú(0°ÐJ+6=uw(UŒäæç™öë2þFU'B»:E]�€¼mþ<–N���~VZ±Rw‡”ÀÞ?,©ífQÖ‰�´ ºðžÞØ/ÞÔ§ú lô®Ê‚ ó“/»/æfèW™öí~§ª!%SW&`HmΘoÊð™e`‹V* ö{êÞøD·H¢yÆs_[”õ!„5ãÔ• Ò�3¨Å›:®»ÀÀR —fN¡î ¹]Ü�’Xp;'t³Ÿ©ëCp�ª+0æyö öoÉÔ£ª`›¶êÊuu_ȽÇOÒp÷­wc4{U]'‚Á ,+%å «ƒ¦ôÖXëUu庂º/ô’ð³ÔÓuã1Z�¥®A¬ß5 ¢îŠDDuRP@égˆ¿o*‹ú_诠PeNjõ£yüãÑû^qÞìPF{G•wBÝFÍ@„w|™ƒ}ú¿R^_à*N+uùhµmâ第óVY['WTÝ…?Ùƒx[¤9X¥]^u}�O°žo忆¾¿µã'm»ãF·2Z{Sq¢Š+¨  5ƒ3È�‰7õ„âú¿È%_§R÷Á{Æò³Æû…3®ËŒÖTï†ü�|Yµ¾œAn#ÞT¤»íwÀ÷rÊ×)ïVkQ�›µìÎ[íºµ·ÔÆ_=·|Y9έ�žš:­¶ÀÀ/XÝ zšº”™Ÿ¶®Ž}9tc¼³œÁ ,XÁæg4¥üG6ð ù2ÍEÝZs‘›¶?7újèÆš+�+°ü!!{˜“:hªšÒÿè(]¦ÏRwÁ‹¦òóö±Ó6ý*}–ó7ÜÀò‡ýìq^ã )çß—!úì³s–ëCp¬“R…l¢î�Ç”M°�J£rr°T¨5,×±ÍZJG¯ËNzùu´àQ[e_@ïP÷Àë:ÊfXDg1]ia"(¿û£eüjž]dŵÝÉÌuÔÑ‚G9úÔ=Ô]ð¸&Ò𵳘қˆÉÇÏRtéNV2®®ûrèy'[a_RÇ ^ÅØ CÌ�Ô=ð¸?e,Bôyö[Ö™ɧª|5¹’½{ ®ÉùÁù�.z=–:pðª-²¯¨ÂI©»àmïÿO6à 9‰èêbùÏêI6Y£«LtûwȽ‰¾zÇmß“P‡^õ’ô + uÃ|ãœÔË@@þÒn×äÒ©uÕ‡v/îß÷ÕZ¹,¡îxÕéWWU¬äe2±izdñxŠˆÇ?¦J^ÉÚ_ÊKûËñÕ ²°‘º'àUŸÈWWAê>x[uù ó½(Îåì&âñƒ‰TЧ±0tÊ{ìð[�:ÈÖ‘º?àUä«kÐ*êNx[mùs¥ŽÆÉ6ÞáêTóóeÒˆWï-GÓ Mß)·Ú„t¦îxÕ3 Êku'¼Mþ.!_Ñ`’Æfï ßWÉÚÇæVNRKÏ#>Ž÷Ê�0qZEy}OÝ OÛ­"Åóc!ùkª�µë�dî³¶>ÜñäÖ:;&íÑ—œw©;µ\AyMÁ†5*RÌq^0–²úC±Pù^C_³¶„»¤ùè�l�5gG�B¨¨¯bÔ½ð4gÇö‹äØ ý¡XeÏñ,u¶:XÂæ-« ˜VßHžpl„Ð_I�í¦î†—õS’b¦ÚB�DeÓ‰5Voœ™öݼš‡^“¨¤?Ç/¶E÷׎húQ÷¼êQ%6ÆÚµòLP’b¦åQ"�ð÷–}ZþµÛÒ£’V[ô@§¾¦3¶žºßàUéÔT5bpyL”"UW¼¸ÓBËv•=ü“·Ïš éôôoº•':,+uçÁ«**±KÔñ0»™Lƒ:¢ŸÕ^’9ÙíC­ÇO¹ÊÖjL™¼kԯʯªÆ°–7¤ÇTå8´žˆÂ›íLñQ�îú‡Y‡Óu?y KDZ�BNí!è—=ñ€ÒÕMŒ—rQ› Ëà•Ç]x‚:�àYê—��ÆÞ¼±i_ŸÙ‹�þ9L«v‰½™ÔÄH)×`V›W*¯¦ÎŸ$<Š¡hø�·ÝÛÔ�òš¬ê“S^OzëÑfq¹¯õú(Ùeƒ¤ÚæßvÇ/örUê*qš:™àUg4”Û©JÔ½òE»æ‡Æ?Rª…îÔ«?m@é ŒŽzñÎ.êvMÿâms~¢Î(xUrõŸº[Þò»Ž$G·œ‚E‹F�¾…üð­• tß?Wgæ6ÛïXÅU�:¯àU驸––žÛ£Ç =IŽæ9^»´‡ Fý¬—ö41&Ê�xmlŠ->=v�¢Cu5•ÜñÔ=ó’vš²üŸgx¤×�¼æ¿lªaå׎ˆ÷¾z×2êôé´’:ÃàUïéª¹Ž¿QwÍCRêÊò÷ñ"X©;íÆ—Íeçmö�œ|´�ÿ NO�gð,mE—gu×¼ãS¹T~Ö>ñ�¡Ì]g¸GJ½ �.ƒÚ?üM‘.&†@¹¤•V–{‡:†|G�lð¬qÚªîv�¾c¶ÛŽ•eS�Û‡y³þŽ{¤ÔŸn#ÐfϤõ]êN¼ÝsÎ~}i_êü™ôuÊÁ³ i¬»:Ô�óŠo§®Bñ359ã©~ÖJÜi¼f¹Eõòô.›Ëκ+ö¯ü*\¾vD3…:ïàYKtÞXêÞyDñ”e_Ú-]�sk‚42‰ñ_Ü�ˆú‚‰™ñÅÊŸ­Ü±G�=~Š:}T¨³žUVká=MÝ=�xŽoô´óÉçæd,CªÇøçÆÜ:+S—–ú»MÅçæÔ”Çš%úÎ׋¬ø¬œóÁ×·çżNÝ?o`\ëÒGFpÛ˜Ïj‚»…e}¥ÃêHž”‹±r�n‚"‹RüC>õzw™8„«žšKo u=�}tðQ¡6š±šàþ¤p\騊êôÀغ¥¤³G`Í„‘MRzü¤YƒÞ¤ðªcºk¯?ÿ³µÿíc¦Hl£Ù ¬&Šðþ»œÒAåë�ñBé÷¤óF¡õ÷“³†áåL?P xÕíÅשuéÍefè˜PϱšÉûï&JÇ”éTñ‚ Ú¸x©é�ukû?s‰²~Ë„P´o³ø5uÉ­c&Hð‘KÖ&}ÉyÿœY혆Ð8ã×ml|¦¼û„‘33âŽUHç©<«¼þò›ögL­`æ'™X#£M<Àûç†j‡4®Ú�×ìiáb�'ßm6`šúcÕ|f<õ0�g=n þÖ†û Ò€y ÓÇb�|Áh"%ïŸÓ¨ÑhÕþ*ÑásþÒ• Ú7­ÚæžÎhê±ÏÒû Èm%VPw“جì<"ÖÆßŒ&:òþYË®™S%ÿÒÆ;VQ¿ N”¸‚ŽŒøE‡P6©À/R÷“VqVr·|éÊhb9ïGë'h‹ï&ï¶ñ{eÞc÷&™³Pq2ü�zØÀ³ª™©ÀeV> Ì«¬Ülkƒyv ÷ͼ±²¡Ìñc¿³6ÎGÓ|´ ö^×ÂÂ_·ÀŒ •`íÓÔ=¥Ä<Щ‘XÕYmääý÷¯ Æ°Ýø¿ï='› Ý'<ôJ†) ¶ð(:„ÐÊT ö çC ‡±23_°VÍxÿ\Kjðå(¶hº�w{dÀW3¤º×U¢Gð¬<¦Špôê®ÒéÇJÌJÁFj3Úø†÷ÏÝ\�[ù×»N�ë=‰ê?§+¶Åu§!†ÙÔ£ žuÍX¶ ß„¹TaŸ`#‡mpw­LäbÀß1×ÂUVWÓ|°`RX�ø¤ÝJê1ÏúÂ\^ëNÝY*_²ÒÂ}Œü6Öv$Ü#¥îw4R¹ÛžYdãs�¥ÎÖ|5•£ž‚ˆÔ žUÐ`V¦î,摲¢; }Àhƒû¨×›¢c4îÐÔfn–ì/�K?½ ?”k’•ztÁ³>B!ê÷ +)am½‘÷ÏCFgFËFu/Kö”ÀšgJ’ñ3GuΤ vF&Àuû�Vâ/ÔÝ¥q�•Ñ $5«Þ‘R{ÙãòO½O’]•í¥q V=òtÖTÌ}b@JÇQKš¤k³.|½žsf+òoêþ’`>ÃqA´V#Ü=áCýc•/þº¯µ\ï(”ü3~½—Ý!p¬.ÿŧß®�z”ÁûŽ®ÍtÔ¦��•‘a¢­°hèÉûçÅqþ%OñôCï±ï³å•¦^߈ÝHôX;§ÛÊ{sn§c°È)Ã5º�ºÃ°"<�ô—Éj¶h¼pi““G,|.pë—‰žîî_šgÝѨa�êÔ ÊaºZ P÷ؼL¬|$m%‹L#ßÝú»Ï6¾Õð \g(ä;Û¨Ø–å ‹nêóÝÌ2gWQ�.Øl¼é¢­ZƒºËÆ�fåc¥h+c�ãýóë�Ú_¤«kßž–WówÍR¹ƒâ w{ú$>ШYBœ òÖ/ßOQ÷Ù4æMÜmHî`-˜+Îûçr= �·õàKYñX B…Çoùõ¦7+â7Pg‘ùB^n܃•�2¢­¼Ëh¤„Îð�;‘fì/[õ'µü{ì#ùñhðAEwz’º×f1'á�êF°ZѾIï6¼PkœÚj W…ëoë¶2í·ù,ÜWì1„¢¶{Q÷ڬˬ\¼!ÜLÜ¥¸wÙÿñòôï�¥x¹³âB Kk·¥˜<2Yjê…°°�¤Æ?¢î¶QñX©àžåñŸÊŒV¬^™ðnïû·P\aáguûÄ úÝÛÔþ�`Ó‚ÜÒ“ºÛ&Íbeb¿p3½­Ö¾F'’ íö¾vHY[ùá '{þdá6fà}Hª~u8­>oÊÊÄYáfXçRõÓ¾ 8TBqU…‘Îk7þ8lÓ›C2EQ$„·]4/€T=¨;nk#Ý@áfXëÕ¾j­v]<·âz %¶�™üö©¯8@ôB8DÝqsš±òPQ¸™!ŒVÆk _¡L6ZÒûçºÑ®Ð’]§¿G=‚15¢zE¬¤î¹1EYiH*ÜLF+;5†¯D—ogïHÙXq …ƒÅœÚµ®…;&CxÈEõʈ´zå�̇5ÜÊ»º•Sú¢—u5çÈ‚½YK�!ˆÎ©Rv›\çµÔaöÈX'?ÙkdñQê¾’œ•í´e4ãÅŸ”ÞßzøÂ.ìŸëÈÂ�»4ÊÕÔÂé!<•¤{±Xrã^ÚFò8hg"£�Ÿ´EïÊ{oþ5¼½êzñ³KNtòç·½ø9€!Šp›ìÉÔ�7£#ï8h'£�ÝÚ¢w(ï»mš,Ý£ºRü*{Û¯š,j–?_^êap‰uÒ�nÕ¨;oÄŒ wÐNF;›´E/s‡°Ûºý5·®…G³Ä’‘ät1eŠKs‡P÷Ý Vœ¬f®Áh§ ¶è…$íùXúIx¶ƒëâµre7LÇÄþÑÍðkhm†×ËÔµï| ÷J±²Á= *š½Œv¾Ð>ÇÛßÏ8¦ŽsŠ•ýàÍŠö�AÀ1ÙÐk¨ÃÒb‰ºþ†¾r²²2ÓIKŒÛC×tEÚѺŸ Ü9Hu™øJ•”õ¦ž¬vî9óƒ`ÈCº_EËŽ—k2tú^ê~’a>i“ÙIKŒìÛi >¨¨ßî»ô6² mYå3“ßX'þŒ(€µêj{¥ê]ðƒ"/R÷�\|VŽ:i)kèv"è ?¦¼Çî-¸m¡êJñ‹Û&èµßÌ €¤ÖðB:¾à£Ÿ±ûÂm�²2µÎIKo1Ò?QÏ;7òõBøµ#˜esêMÆÄáIå+)O§/•~ŠºGÞRœ•0G»ãÍf4t�®ðoÈw6]±TÖ‰O¬�sf_�u+t¦Àã”W;ñëŸÜw®;u_¼ˆyd×'-Mg4”VOðk¾��¥8nYÅÒ1Ã/5Óâð?€ë ɼ”ú.˜|î=غ'4æy„5µ‚ÑRMÕqG½¸åpʧL=§ñ–ñç“w={î´êTXl‰»—Ó¶?Æÿ M¸XÏ�;݆�ÑRz…!wiZôÓʫݕ…ÿäé4üï±Í¾Å�*€`Ê:|AUµ Q�gOP‡m æ‰]ý�µõ޲–BØ~φÛ9,Ÿ*Qüá§gO§³—\Ø ø‚Ú³3ë['OM®m®±rÚËY[ãC·ÔG2ÌîF¾2 '>]W»÷ù¿ÚÔÀòs!Ì#»oúçÕ²#ï ß'å03ÛÏY[Ÿ†nIâH©ƒƒdÅ�_Îúé'ƒŸÉä>�áhUèÕ²Z¯üð;›È˜À|×zÄYcCM¹¹§Ø=ÿ¦G¥ÖPøÀKL´¡Ú»Ž–ÃÀ­‚½¬fd�zø\+êÐ|à~æ»×9g�}¬®©.u3O|'Ræ�×rk�Ÿ�;UÒòD{YU(TìÒCu=Þ,_1ßÅÖ8kŒñe1pŸp+IwÏ/WEÉ›°�úŽ^vöïXS È­Ÿy—í�ö‡ohÀÅ\ »Øac#m�øÿLÉîtóÁF+Q¹ÞÊ{óã!µøáµÖÏSGáOë˜ïiÛœ6÷Dè¶ØGJ½;¸f½Ba9uìy0qú~iq¯ ¬Ã~Èæ§ÍUÝV¹Pÿ³·t¢QaøT`ö¶ÃÿZúÙíRÃ@g4óMî§Í=º­ §«ç]•kX­1Šß˜½nmåzÉ‹þþ¡ŠÁ ”€ýf'þÃ÷mýB·õDŒ?ü¼Ùä‰ìÉËgNµÿhü†Gâ):ZœãNnÆhìöŸ<µû›na´õz…ò¯&)³ÿvÖ¿yœùæ×y³Óö†0Z«ñùÐ�;•¾;{× ú•(Zä©÷uŒ€t`¾ vrÜÞeFkµÃáØŽík�¯™öì ~ÇzrüºÎ[ ·ŸÄoé\Òã337\wŽ@¸(Ç~_<é¼ÅòfÞ±="OÛWËn N†ztf¿?qÞ¤ËÓ¿ìٮВ²ήÂí¶Ø):<ý–FÞÁ©´(¾äÂìߟR?–až%¼ã¢É¹fÞÉ k1éÇ©]ë¶V>–zŠó¶ró†FÞÐM™Òéú7Ž"­± ¦aœ·OÇ™\WÊÈ»nU6þxá‡jǰ¦ ¸)œ·Q¿¡GDؼ£îŒ”/Ü¿¿"U°�彟ºZddãWËR>0ÿpþRª àW½9o«A¶ÏÀy´ÄS¦z|Øìßq¼%€3ÏòÞ^ßrÕ,û€OølË®éî]·âIÅì}¯+íªÙ‘&¦wÖn«÷t×"ï¶R›G€ps�û~ëî·dö¹.Žž¶#s³œ%' \�ç½ïÎp×n<s‚ˆÈÅÇ—”=Y _8Ôâ?¯qÆeËæ¶Ûê]z(~ÐãoîûpZ—-·70GUb[ŠäuÒü¦4MËå=Ü÷ãí.›~ÉÀ\C…NK¦ý=5ÖT˜P“û¶œÍmÓ Ì7ä~gTŠzÎZ£2/Àv”ºl"·móöˆ—U¥òÀ§7ôÜzTe>@Pþût ·m÷Ô3o4îôE“O $Ü«2 àPêAÜ÷ë¾yÝ6ÞZé¼9nÒ�pø€G ç¿qá¾u53Göæ-ËΞŽ3œ¼¤©ÀûwW÷ͧ’™7¶ïýÀ䮸iÀ“Ê ¼‘KüÖPËż‘»öõy㡺«0oxX.�7ô¥í¯w0qt�uæÐÒÝ>s&Õxc*Ñþ'"3GÇþëUÚŠ/É,òþ.³uí}Œv�Þu _›u/*ë ˜RrµÀüÑIæ [ƒ48¦ÓÄa'‹SÕ 0o¼È�E2WèãÇ¡ýr=sEUô@¥¡Èü�»Å4&P¡ÓwLÝôñ»#E Ô¶7™?ÚÊ]äCœáà;? }K&xL5¡ùcù ê8À[ºOš@ZRÇ s@hþüN'x‹È&Š×Õ�¢<åÊ ± ¤&u à)QÄæ�™¨#O 6²R ž²_pþp:øÑ�Ü‚óGyêHÀK^ýò&u¨à! ƉÎU°†þs¢�èüI+xG)ñù£Â<ê`À3R—ž?™©ƒϘ%¶ƒâMSž§Ž¼"Mñù#P‡:ZðŠ‘¦�@êhÂÖ‰·.S‡CÔ×Næ�ÀnêxÂWÃì ©Cˆ¦û.GóGqêxÂYâ@ÿêÔ1ÜñSGGóGàuÀá¬äž@ß¡›©£¸ihUgóÇ�Ô„·2×ߊËÏ¢Ž""â²³ÛW�ÀêRÔ!„¹Q7Þ�Ë^%Žâp‡óG  qÄa¯ÔÍ/ò|D¹)HõþN§�À–¼„ñÀ n½#WÉEµ±íæON9ž?Ï wÕ»ýžüÏ=$—ÿ8‡óé#ð I¨ÿ©î¼-'~×øÅ·¦t1}ž8a�o�F ¡,ºûÖù�¹Y³–v7Ì7"°õŽþöÜ|°‘' ïïnöŠã[¯Øóò*ŒÐ}Å:�ÜN�Æ™t†Äz“Îsi¯Æ«µþÔÉ©±ÕÕ8Õ0Îûtå“]´\©{W ¯þ3[KTàÖ+qߪ—�Oû¯â«<ßã¹¥¦�@"Å€¬ŒA߯‡Pwîx÷ýgúÊÍ�À@eÑ€"—SËÞÓÿ“­ –=šÁá~íÁŒj  (–zaÈ÷í1�ÏŽ'Ñr¦†YBùîÊz ê¤a¾yÏx½Ž› �=SEÉäqݶ5Êû *Œä½ƒ/ß’â±×z¶–wÖMŠKÿèÍ¡÷µöÜ‹/ôF>®V¯K]{nݼ�«+†ô<9µØ¶µ §Ž›&šÍ8‘ÎÑ[zª�µ^*W¬×úW†í›:sÁÀáã·íl§zÚøOzêÜËJm€¤äÔ™¶äÔ3EpxþÀóœÝÅ2㕨³|c©§‹8²ã)+ÜO=aIJû·X¢õ”CYêt€°ž§¨g�ÿ|Ö“:àÀÖÔÇm¯–¢N8RòAê©ã†Õ¨óNuOA={ ¿‚ÍlT`5íüÑömê €;I�Ncf+8Å hä�¿œjþèv‚ºó ãóÚ$ÓGq7GW€—<ß$ÒøôñëÏÔ½Ž´7;}TiCÝcP£Á"•çÒr¤|s3u@™’à M¼KÝUPkÖãú )4û_ên€z­ë Ò9{<155u@“|*hš=úÖû¿|øÙ¼†“ÔÏ…3¤Å–WþwðÒ •³ÇÚó�t¡î’ð5�§WYrò u_À¬Lä�™;.Žšº{;u'€Æšsß“~TG‡SG‹âç?z-uìàÏUÜÿÁ€ôÃ+ç˜Âš8*4oYvCϧ¨ƒOê‘zBµ6c“¿µþÌã»2&~µÞ�$ÉmzèËÝÉV�  À¥ïMè™ëþùûbèw²Ùï_¼B…V{g}[©ÍG“g¦xiÎm)O{|`¯õ3‡í‹ÿCÚýi†´NÐ�:J*­Î5ë÷i±ÄÍg\ 0Uè³tÚ_�­–š:`ÍZµNvï7M^-Þ¾;wÕ/>qØÐÁ9ã9¹Ê>ÑÆ·%åãž›¶È�WueΜF{ÿ·ÚËk!Ý©ÍAm‡—ÿPíåÝY«%³!uHU~üÀ™�,�æíÔ]×aÅÙ¡ æ,vž—>_%zc‚ÿ¾’¬9÷HÍ3“²»¯—A3úgúñ‡óD.¶Òýe¤�ê“øÑ~‡›^Ö�P}Z8ìñjµ“¦–QÑm€Òìvzù^J/ïR‰TáÚ«IÊìÿ‰:J´zöðÓ�ÿú?¹„,Îøú¿ç‹¢î‹[7Ôsú‘*´e ¾�s û‚”ÈíF5™Ýt„™+UÀqWg+½¾†±ÐoªÒŒwzùÜ=”^ßÊ äŽ_MÞìu"$”¬”üÐeÙ¨Zþõ:³òR÷IJ÷éÉ3¬V–�»Ö¾4 ת�W5} +¤AÿxãCË>ÌqÜË�J¯¯aôSz +_¤ãë¤òú.¾…Úgµ.ýÜ…:Îm¿ïÓ_��¢Û3­N´ùÕ“È Ujî¥!߸ê×0u<¯8åf(œ@¢f¸Š€~%¯''�ë"{?"´v“Â�&ú¿{D×!}Sê.3˜f41/óÜí0<;�ƒv½Ù€tˆØ<áªW [)‹`„â„›¡p9ë.‚GÕEà’W'�ëò ½â†Îû#_&ÈEŽ¢^]Zý‚ðÓ�š ê]çæ4ž@®kñô ê¡ )—Ë>} ,‚VJsmŠÂ $ƒ»þG¾îÈÃÈuK{ì}3ß³_>îS6uçƒì²ðU›V`„'žaJü&õp…�Íe‡f(‹`�ÒD›¢nyÛmý”…à’ža¹Ø¤5uŠîJ6\ëUŽAå´Hçño 7Í(êÅß³¾uÝŸýªBøWa’ÍQ7�<à6„vÔ·F½ý 䦗<ò¾9++u& ?ì¡›zÛ/5¦ÎGtñm˜@�‹8ÏÓîº7s”Å 0Åæ(ÛÊä¨ûÚ¨ŠÁ% &�@ râ,Exaú¸Á3SHÉ,Ô©ˆÅ’ $È3Ÿü¾uL™ »ïŒª $®¨Ë¯Aʾ�ôsCsU1¸dÅtÚôáccžK/ñ*SjyÁI3qÓo½¨Ó‡5H �j°§ž ‘ùíh‡¢z(K®Iª&�¨úAoeÉ|A¸µÇû™Ý<&ªK»7h'ÓˆƒK¨SD|ïÿˆ~Wù ´#Ã2‰Ž¬Vµ’WYjMRµV™ ˆWòzýGôhvP}õ/íî!}^¦|ÿy~jgêþÓÏžo ×EðÌO!÷Iuä5AœP”W³T}Ù%ñJ^k¾�\—]Ù¢'Žž¡îw\…‡‘­æ©$óu[#‹naÝ´v:ÕƲQª3ÔÜ�“ø™�¢ d…܆z´+ymš@�/JOÐ~‰ã�4z�æKH>©K:Ù6�)<±ÍÙ璽ح$ŠíJ2jš¢ äS¹(¦¨‰Â%»&�Àg#ÍþþXê ê‡Bñ%$ªŒŽS>Ô°ëÖMË*Á¸êIv"£š0”$Ô45Ëx]ídÝa%a¸dÙÔ3¹AvE™u›“É`&nøpu—ìûtJ¾ëôrÙN(ÙÏï´Št§æÈc²aü£$ —¬›@�}n‹êÉŸ‹ÿÓâS™¸ÉÛ«œlœ@�]WŒa\òISr2w&¹4Oɲ¹„t”OZÛ7�¨>�9¤Ëý©;Ê3(¾¹O°ù®Q÷–ÍÂ[X7ä Ýb±�üN˜jV)H¥yJnaí—�CåÑ^NÙ8�>5qdxÒ>ÔÝÐò}™¸aÿEê®rØù $ÈNºQÏa=˜¯ Ž â0OÉ7�Œòq&ÜgÕÊ $�Xÿ7ÿüy¨;)dŽ‘“·Þ÷ÚÆ%qYú $¨ZÚĆð�‚¨ØÏo¯‚8ÌS1�|¨"…G{9eçÈ¡ûŒ·†'ì¹Ññ7Í™¸îJyê^òY;�"ÓêÁ&(é@.ù@ò) Ä4ˆ›Óè㣠—,�@k«ëÌJT"êþ‰« ýù’R÷Q€½H ò~Ý#Ê@%ñR‰’@LSðÈ¿ÿSIQùH\²u ¬ÕxNHÔ/Ô½s¢o}™¸áØbêаõ7�›ˆf�.Òkxoù\:’êj1LÁ7é5¼·ä��Ä%k'�@;m3Èû-©ûæÌÿšéÊÄ 9?£îŸ«6SŒ£‘Î é/EÑ”Ž$©¢HÌ’Ÿ@¢ä×ðÞ’L:—,ÚL1¶ìJaŠëÊêž9ù‚žLÜðíêÞ‰±øÖ ŸèÁД}µ<-ŠªHŒ’ß�·šªP†K‡â’½ß@�ÅZf�çSR÷˹ÂÚv3è©æ­~–O �ŸB¬,ø•²¡ü¦,“ä¿�ŒW ÙJ^›'�ÀâÕ'dóKÔ½rc¹¦¯°•Ý%×Ïö ¤°ùDÝ7m镼©•…b’ôò›Ü>¼ÑQ­äµz ¤R?ƒ¬§î“; ßUž‰ëšQwK\:Ë'�@ç:F�a•Âà¿” Fa,æHßÂzK],L=R‹ÝH ­ªÑî°ö]hœ†çA¦[óýÃþo �À”çÔ� Ëë c—]ÉÛZa,æÈ~i5Fa0Iã’åH ›ÚtR“Š4…ÆTaZüukø×|ñðúÑêÖ‚+‚Úž«eœM ¨¿�ܲjØéÄ-Õ[4¥¥ƒ æuý�3Yõ DõÞ[ |øˆ…|‰ˆh°{¸üžK’Ñí—»z‹KêvS.5¹…T,_IGÐ[.7ýzXɽ´Ð&”­ã‚Þ˜@®ûx¢lî´žvÓ(Ùƒ:¥îf¥+6M š¶>c¼#˜@®ÛþÁ?’™›rUæúÝ¥nH.o¢vý\—õR Šÿ”¼¼‚XÍ?V’Žœ3£Mµ¸…uÇ,ɪ<¯3ºGûð:Ú�y¬æ¸9lš@ Gšu‰“!Ønº#Þ˜@""6ß+y6♫_�¹òø§T%á??’ˆGòý§»ô2ëk•¥�ïµGïlØåìAB­HDĹÔup›^8’9;Ä]b³æÀÙ,š@¬á­TÃA·ÉM÷Ä+HDļMœd*¶Ü»@Ä“XBÛGöPQi%î¥Ë-·ÿlÜÒ"Šr æÉû ºqY}¹áç_%RØAïÆî]Ä˽™£wåÀ`­qóX4�ˆ¯ám·9ÂI)56},ˆw&�ëÓòJ™Í�$6£uô%1†…ÈžÅÊÕ$®’º�÷“ë\ÜÔ®€² KP3•‡~¹-ï7¹ÝgQïRÞtÂqÜx°ÀÉ:I¿ÿ3X4�ˆ¿í¦sx¬›écA¼4�\+�ØÎp¹ƒM2bšàúš�{*ì|l� r–Ìí<¹á_ﮬûŽÜÓí#�M ­Ý//3Bg`âÛ,¯¼þד�^QgÜ<öL Öì½þçyt,‡á®xk‰ˆ¨ã~[×§)¸þÁ¡S<•]�#™Û Õ%nçMw›‹r(ÝØ)¯M O&w½$[Õ¦Á8ø@[êúŸÇsw=�qsÙ³•‰ø®oü¹£“o“™íŠ×&�ˆ¤®?ïqù¸ë%¼èÞu¢Ôq—‘¹¿�'ñ$ã©E²ãÈ!Ù ‹í''?AG7NãWæŽ01ÜÚ›óUq/?­/n.k¾�|(ç‘ÿ¢“U™YÍö…b/,ŽÌno»ÛÉ4*›»«í1púÏ<ñõ21,wûd¾Ä)µ¥w�ä¹o ×]Iì2›ú^köá½µ]ù'qOÖ7Ÿ5Èá0oß�rò#m¤ºGÒDxîÈuM³;*w_A\~Ynd­êæ_ÜEçòv^ÞTî.w]VÍòyq‰ÈërÛÛ�Úö¶¨þíÿprtHc]‹JØ2�ü+¾ îä­ÿøÜAÏ$�örÊ‹HÄ —ö¸úØæî�ÿzÖÁå ²§”««µqu±ë-RÜo<9�DDÔtwÞË:MááΘ:úZz¯¦¸Ø2�<&æ�õ”Nîe_”;ÚË!ON G7:ë.7ÛÖ¹ºR_¹ÃÈp9ƒ¸º�%zzSl�ó«î¶ �@"J»:øa‰¦h‰‡pôÎÿ8y´´�¦¸Ø2�t޲×�q´’·¨ÉÎxs‰˜ç‹‡ú\í¢Ø7¡ú.‡²ÙÕ“}ÙÝÜQºÏÍ•®ûu¯ò^»àÕ $âw7‹±–ëYá·y™pÿû§øN7¿Ÿß–L =Å£üïm¦�“í“�®äõèÑËA`ÿq¾‘`<7�ë]48D¸|6ÜÍOü.× Õ6¾OPž�@"æºÉªž‡ ?àîzÐ.Nâ6¿Ÿß–L â;¥í¼ûOâ^§àü6až�@ž¬å$e·9ÿØæê)£‰ˆˆhÕÞEŒ.n%üé&�@*w¿·(çÝ $bª‹´êYi,¾*¬}´ÿZï$ð£!/®™HRñ _¸û_—�,Mmi°;ž�@"®=7ˆÃéÏè êóÛŒ£˜–þ2|èæ.úVÇ—qwDÁ2³ËCó𲹜‹Ä:@>»ˆŸŒöoO9‰;�†¸…Ø1�ˆoÜz1úÃ@âK¯+i®;Þ�@"JºXÍëôc››5¼m�®r¸ÉÉ3¶w8þ½”«åB‹_ÔÑa7<<�DŒzï?RûK‡ ~7ôTŒ*ïï îvT+y­˜@Þo,cŒõ¸> ™ë�‡'�ˆœ{œ$í‡[«»xÎë3½û—çâgÇ?£ÿåü�@žÖZú놗'�ˆâïwü¿½ó޳ª8ÿðÕX0:JìQbA1 Û*6P£DA,IDT¬I`,¨€]Qc%Qc P±ƒ{ág4*FbA#FH4D �ßÞ»»°åžsÞgÚ™ÙÏÿûμsîžï™™· ±Ÿ ÒG^­ôÁz.~•ÚÖú¼eD! ÇŠ§X9¯Þ’#}�5yC�Â…`r5°«Ç·y|LEWGΦ²÷ÿøR|À†­UyË[8s6A Ha[¾¶öSA^“Þ ® ðΫ&o"¯°9·þ¢&êþjò- öÙv¶¯¾ïÊ×túò–%0$M«Œâ¹n¼Õ"l)ÌÁ‹«]4y4Æ[ þHOn‘¼1È©ò)6øM²«ýEò†- nÓ«�añ‚Û­¸ò5Ès>kQ­Ó¥Ÿ#gµ\@ãN�OÙ>Ãj.ûñ:‚ü'nbyÞBbùYï†úpÏ_$oØ¢±ñ'í@A]¹Z~íÌÕ VÈ3ÀjA© #4.œt�´OàÂîJØN7#¹W£¿E]Ÿó ìŽ@@ÚËgøŸ†Ûgqö­Ä[MÞÀ„oüIþo…Þpgï‘Nx²‰ùcóņ§!º€°lŠ"–ã°ž“‡ÙíÞè�Û’’âûÙ�¸�DþÆ©l«ó4ð¯ò9O…. KéÕn%øúÙÚV]ò,Y>žÎ¶r°Þ’ZÏí:(‰à¤Ýäm`wüqò‘·hüפ-ˆ÷ÎÜ%Âû~ã¿Fþ`ã¿wBèR8L°Ä±i”Ubš;?³i‹ïÑÁa�G›¼Ô�¯:/ 8»Âê…Ûr¹~u.óçÝÈ̽Öó«%üŽ„ûÊ'X.†r¾¼…oõâTB· ÒK�‹˜YÝ6±6ÙNYüûhXUNwé§1­�c綠|¿}G‚‰å¤(t5 B�käÓ{(ÁÑpåå_4¡�X· Í׋¼ìÔIࢄø _å×6(‘„ÆbÛËY"4ñpò7`æ~;s—]@äÕÅ7K2±¸è NbúÙ&«f»”˜šgH £i抰Çï2\ÉýN·Žê…€ÀtÐ2Ùz€:¼ýo_ç‘©•dÅ� 8Š"ÑÈ߀�£{ð*¡Ÿm²ô‡̨úÒ±“"ິ81ÎrßÁ­›ZD! {wDë|¯­PËØ=Ù )nú°ýjô. òª”7ÿtà#*ë¤Kßo²àGz’›÷ué '-¬fÎ7ª™äÖM-¢É ûÛ$"¯Ã;5廵+™ú¿,M]LØò¹|riçÃ-€“>Z{E! {of)-‡¯@*wì¤  ^Å.lj¬Ò~ys)U‘Ar;-´Tn Ôá½;ÅÌhÒúh;S—¶€€j×iE4ÏNú(V…€À“›Ù’}ÿ|RX¦ŠM�;)âE6kYA×4Cq‰k7uˆC@`$�¥TÂñò_J³ó™»ï@½ ¤ƒ|né?NÒÀñ{?Û$©„_#‹J]èÜIô KTŒf�ääŸM$Â>ìÜ¢ƒ2|ƒR -'õؼDÕ!hÙX>·[R m¼ôÐÚ+)\NVM´sƒ…°Îã Ÿa]$±I·5I‰ù‰€|ˆ–úy+c‚ „Œà©oÁÜ’jÐZ@z‹§66½âÞ|ेhûH„Õ1•Ä=‰,&¥†ú¾ìEÁI¥î"�ìÆ‰€ {uÝP Cö�W_˜‘¾�¢€¤5!,²€€Îxã2Lý¸™a‡H„eÐIªÐ’Â>*ÇN„ a°ªB’Ï5ˆÙÌ©á\‘Háûh­¥•ÝÒ%”2��^sä7’7dé,ŸÚ¼ Snª«\;‰€ G½0<¶!öª8ʽ�2fµfÜ¢÷�kq˜{/uˆE@X›f�4ȇ˼øþ ™ü%&/'`·eûø™œj‰H¤p˜§šÑ&Ó¼C?Òƒ‹BƳ™ nÑwbÕ£î�Ô�„êå) ÃPDˆ…OH°i= ÛÚ^`òsÍ'X@“ÏìÕLcè d]Çž æ’§€°zXïgÚ» Ù ©{+¬ &ˆ¥e‰?t櫓ì@X„( "�2Û3ÛŠäi>{9á ÈÒ.≠¶ ³ˆ†Ë’âô‰eÂÂW³û`�š2* +| "ˆ…�Ë6K €h­·°–@ ‡Ë³|Êw’ªÏ yU-¥¶6ž= \¹J>±{æÐ×ïNn]‹E@f‘RÒj@¦=X~6˜+| Ò?Ûâ[l-tï£Ñê±iÇ 2DÅo³÷Rϯ–`¤Ç½ây%t’ªÏ¢á‡ºõ-A7G‚8Þ±Ä\HW ø$»�"éRSEW>ê�€ ¾`S�ëÉ«ˆ«5$öÖ&ÓŸf:{@°ò™|^gˆ ®G�Û�ßhíû3ŽaV@W ø$3 « ³§æûpRƒhd&ª¢³‘áhÇʇÞyof¿£áì Á Èòyý\di¸¥j8 D# hߟypü±Xæll›yœ«£èÃG¢VWAÜ×>y^i›ûuÈô=ÖmU@@Þ)ÂÌ™»�«Y¹¡fD# èµ™yp ›�¬éÃC)ËØÜ3�ó.aönòá£ñȲކ‰ Ýä#‰sÀµje6}8)RýM‹Ôá}@hh’R7»t.éCöýc³¬‘—M’›-ÈËêÉ<Îû3[‹­|¸¨C<‚ÊшÊa&s–|¤”NRõéIæŸZÝ×*�î@@^Á…e DÃ�qé]4ÂöýYm0X7©Þ^ƒ’*³�óÎEæÔC>\Ô!éJÖ[ØT2�Eòï.QP P[ËyP÷K±Qt„â²µW<òK²dY7�‰±ÐªÏ²Ê’™åÁ7j‘å>\Ô!A©ÎuÞªx؇‡ZÄ# èKR4òžù•Üì"Ò�ìFa ¸™!÷EàËÀik¯xE¯~�n ¶à * ‡ae�«ƒ¬íáÅEâ�Â.`ªF©èà¤#½“THÀmN£€ê¦€ô“Oê5`ö}à¬ú�3ï"�NdÅ2bW7"¶”ºÓ�‡R`VVAðÈÚÓ^\Ô!–bŠV�Î(Œ ”ݺ�ØEß0†ab‚óÌâmQ$¯»sçXŠ)ÂßlÆTß$¶”òÜY-†•µck‘ï� �ˆv ¤/º M"§Ê‡ÅÞ1 ½�A Ⱥdûô>ÜÎ�s…˜v G‘;1Ý+澋å°¶¶‰ó�1u°uˆH@È PæV >âcfùUà�jgà Ä<r[o*žîNqÖ$fšUî4b+¬JXEXoFcÑ]‘1õ3?.j‘€�8ºQúÃ�Š„¶É‹ã]}!î@î‘O©34}0p×][�x¤°L5#ö‘uùÒ�rXSÔ 1ýSÛøqQƒˆefå4%Þ^gRÛ7*EE� P@z€ÎÙ�CÛ³¦7uâ^!*!7±�ÿ¦”ïÇ?9(¢9KLAÃì"¶}�UÉùkLòkâ™¶d“·Wv„,'ýÎÕu €üV>#I/–úìüU_¸p¯•€�›Ç'ÓM±vR/ûñO«Ç›±,«d3Û¾l‚†O&*AMIµËñ‚·×ÀáØúƒÀ ó( à�µ6Ž4ÜU$oDBNþ3úð�Lùíi ½Ô³éÆÐqŠz˲+ƒG¡á“‰J@PHú>º£Ü*C#8ûJ⃗š¼á È>`Fm;ˆ†_1Ô¾{E"�ñ`ªÙWëSÁå k¢éŸœn ¥´ª9–]Y �žBTÒŽx–•Ç“ ¯ÛBÃ>ù {GÓDxrŠ|B¯h˜G”ͬ{W""!±�­äYCÛN~ü“Ã:xdÃú 2f»µÖÃhô¢ô + àíu«Žý'vÕt‚œ€ô}OïÓà2àñ?l{WMDBb�2¾º7¦”:È�rGÓÏÈDû'2ö˜]OPYÁT¢”¦) +À ¹VÏ‘Ñ$ ÈGœà¤™|>½µ5>«K,{WMDBšÚf«¥Ø×�rPJLV"ªr¬´ëɆhð4¢¤›™=‰ËBÕ[ëõ]'Q@íõ¼ „–H8l¯õŠö£HÞ£-»WMDB²¯2Ä7*×]éu@ÓÏH$`­Qì&>�y’BT‚Î õzÚ’·—f½Ü“�"yCÛ�€VŸš±Ú(’w¤]÷ª‰H@HöCƹ? ý O@H5׬r¼ß"[Y‰�IhìT¢T–GO@î#èæù= Ƙì¾&oh¢ Æh�4|k«ÞÕ‘€�j«MÑ�%ZCÛ"$)_©ôÓƒ�‘­ý¬úAJòe°Z@êîW/Óuƒ4kUoèŽ"&0ùLG»g Š¡œoÓ½"’°�. Ç‘U¯/-Ç›ž‰ödë;›nœ€†N'*q„5 ð[m?H†ûNd� o"±—‚ÕbOþXG©ô\V™xšE/lÕQ,±Z@ê@êðꕘEnã61I@PBºuli2ÐOÀ@šiD$ $=½” k‰îâäÐ�/‘éo ý�-^34‘e,9ƒ¿ÆÔ½+ñL#|ÔáÍêxœAwâ‰ãpÆ Ôá½Ül¤{�Û7Ùq®ñôDG)ÓéýS˜€¸a’~ ºU±¡='Xù,¢T�W# i¢Üú”ÑFžlSªãȖŶL³ˆêËq?òözÀЕ=ÀXOŽ•AH²½|*³ ÓÖn«ûí¸·ŠˆŽ°Æƒ©¦÷ay Mü}+dëck>ØLQ‘ ˆãŽ„àí5j°¡+/Wô3N$$ }@%Kãú¤7¿[ÛÎIˆH@Hÿ�Œ.|¬”‰÷,Œ7]@ž@¶®µæÙy ˆJ@~@<Ã=ÑÉÛËüb›ì†ÝFò$ _�©L7¬Ìz$oDò:˜jFOtVL1¼DB–‰žžr;²e¯,wG4n&Q )ª�QL¹ ¯뚥~ëÐŒæ¬3w‰€¤•|&_š�F4¼ŸùpõˆH@ȹÍßÒM±~ á•2aµ°ÒÑ' [:�Óʲ.6›¨„¤4�ÅÖÏ–oeî vSϯ–pdK0“æÃ¡Ñ�ÌÇ«KDBÞšEcYGÂðŠ)²ØtA_�ª…-ŽFÃf•€�æšýÀów`|‚gȺ_¹¤Ž€Œ—Od …ó�á½€çw›�W—xuQÊèÏÂz¢‡WÎM?C@HÝo¥žµä�å+ôÈ$ du&h̹íÉ3-8ó6pF]eaÀ$‚’&`¥ÁÎwä˜ThL<²ˆ,RFÍ¿»‰­Ø;ª©Æš#[ƒ,¹ÀÒD•BNcσ¶Ÿ«”Û~ÙŠ7 p£ê¯×üPD0BªmacÀ¥]ÀˆKlŒ¸’xò@PÓ×Òm�Nl9¯áƒ�Å ÓÃx®G¶Î·ãÁ¬§˜ ÙDµ!Aéé�!¿m;wÚW‚Õ÷¬ Y–PZÚö‡í–âÒHO†ÅV[{ųifªNK·u"±¥Öôã Ô�(+ŒgdL µâèö)$&Ùû|0U8Ýô¨ûƒ%^ cåCÙ��(¸Œ•¤áÍìŒYM<‚B ~žnk±¥¶õã T <+Œ§=2¦>±â;C”“€ ÓØŒ€Â†¼LfÉrm¯ºY´1¡È1òiìhkL’$gëºD<Bbç³N�¾&¶òŽ>k *¥”Æ3³³›iµŽb‰˜�Æfă4`4è±b#¨zPò±_ϯ–@„•dD‹ÊA¯„�l�ZˆI@H?©¬ò¨ ‹ýú1¦°2„Ya<äÎÒvìX4¤ˆ˜�ƲHÛËO[sU38ÁÚ° D@È�ž½Ú†{�Q/³6jLBª¹g•`Õ¿ïÇA9h3–QÚžÖE±ò#Õb¥Ä$ ‡ÇØ)ùÕÀò�À°6 Ä# $ýù,cÄí¼c>C™3ë‚ÞEÖþiaþ£eÄ$ $��‘“p΃­°&•Ãþ‰! ¤’eÿYIV†�Å«J°X A‘+™ÑÕè %¸–„è”Æs)²–ÞiEh-&&Aµ0‡Ã+ì¼½He ™õ°J$yL¢{¢•IpI)ö D# ¨�tÖGwá"b­Ë#>°v Ya<7"k½Ì§ÏbàÄ^F# ˈ_¨–â Àð´D+®ß^ª«é –'ˆDBëÞN´Â:ÆqìµöŠF@PäÑéYÖÈËF©ö>܆fŸÆCÞ:J§¿QCÎbʈH@PÏÉÀðh°µ«H.z™ŸÖ*rÖ'„‰‚;+ÑÊAtE1?¶åp4‚.ïʲÆ2 ÛùpP:ÍËã9˜™û»ñô§²eD$ (%–T2yØMNÇø‚LOãJe A@H™Ö-­lM³ƒ-‡£tîÿA–µÐj–IˆÒ”z!ÃÜ7ÌÜ ¦Ówq…•€ Œ¦‹€aR"?9¸k™žÆ]\Ë€€|¦�œŸ5“µir§%�£tñø³,kmÑbÛ)Zj ”F�î?˜™»Ôtú¿gã aB†¬3—ù%†ÄðI6ÃHµ˜í¤-HBbx“ƒÑœ_BU±¹%�‰€d 9„½åÒ;`TÑf1g¡ë¤MÐiž §öÈÜ™¦ÓA IqŒh‚¾…@Ã:û[¢•mÉìtyÑÂ26"!1¼£–'š9¯'gª¥6y±ì@PÖŒ6™öPOÂŰ(Þì0ÐÀ¹Š.<Ô˜X<ÂÒ(åMË—‘�ä-€íV‘e9ÐÆB6$ifðm¢•¾t5µØØŽË±é$9 @q¼�5µE_°‚Å Å{ª¸Òƒ‹Õ¼f�€ ;t�r°ºI¢•5@?*^µ±’ È]@H%Ku}¢™ ébjÑËN)ÍX}u?™m/⎠0+{1ÈÁm�{𱚦) ¨¨›¼#:z{í”hÝðëóº�•l@îB¢[’àz ¤‹©Ç$+>G" Ç¡úß‚zM µ¾Ð½‡rÐiž '÷U»w±†¦y„…ŠWÊ;Ö‘]ï$›¹—ÌÎm>s�“ÀŽM´Ò“.¥&vþ"öÒ\<²>|AÕã…AXÙ¡Ÿ3ƒ{yð±š&¹aW ò(^RÒ,ùƒÈ×ÛË<˜¯1y H[pú—Ò‹åK¼–šœjÃéH„0ÏÊ|¨bˆ—PêH÷Ê�ÖB}�ip(3¨úzp²Û��k²ÃxYëR³äíµ0¹+¶ó,ôZ,Öó«%oYÆ—h…õ*2ánN“ýtŽa¼O¢•I®1³ †¥ŽrY°Ô]fH3kF£,÷TN£Ia± ìlù¯ái`ô/‰V~†&g„ýHÞœä8R/|ŸD3Ó…Ô§ƒ¯ãØ�°—¦èâñt´Ô¿ví¡äwEbÑÕU�ú U´tïd5î$ÇÈÙh­Å•ÇÈHr%‘�Ñ䌘be5ë’³€�ô¿äšÖËgÓ…ÔÇF$o‰„¬¸˜¨|ÐiÈd@— , Tôª${oå´h}šâÓÿÖR³?FH6ã)¨ÄÁV³9 © ›\ŸîºŒt´àu;[¸ŸÄ$»EèE� *ÛWñ83©>wîd5Mñ %4ÉK)’}Íg‰VHAtcRtL�|ä%0zë‰fž¥ËhBr(˜˜8„5Àu‘f·è]‚°æ¢ZJ¤�s‘{œ;YMSÜ�°Ÿ²´�ps`3eWó#49Sް² «ÈW@£'?Ö+é"‘Î-% ù�-KòU]PSÂp.Ah?qQÊ/l ù°k'kp…•›€À,iÒfK`sI¢•-ØäL™cgIW’«€´¯�^¹F¢?Yè+1îÍ€¾gsv‚µ‹Ì(kü|­[å싦- ·èjW×^Vãn’Û%úvl¡EO¯PxÄðV¶M4ãùí5Õr£¶\ä\0xòÁäpŸ—PUÌ5ö;ŠKt¸"LÞe¹è“÷v뢘;д…¥0þÃŒª�;YC¼a½J¥…Lv6¯N´‚âPm = ’gK[Ô£S¢¢�V��Ö¤ÃÜö – ÀžS¥=t¯,:Ÿ-†ì–´²+2Ã�œ6=�?eAQ·"è»õœD3^¯Ð‹¤¤cë�çd»wrd½×+ô"É)ABb¸’ÝŽ°†“‘UÛ¶šÀºUB5�­:)¦Ú˜¦w„Õ�-³pÏObxû'¿½:³ÉYÀN=¿Zòö­“„çK(•Z”@F GXƒÐ’T,še©„“W8õQ <Á’ª)yUãÖK�YE±»1 ›�ì€Ö) ÒŽÕÖ:s—ÈQ@v"^¯�h†\¤Xâ5CÏ#Ø�tb+’ÜjØÌî¶.}”BO°¤Õ „f¯;Ü­ŸÕ4¹#,¸Ü%³™d T$ùâ:‡·—µÎÜ%r�MÀÐ)…ZÓõ3çlCÏ#X�R\¿tÙ(dw¼K¥Ð¬ç…vYDAÛ¹ô²–¦¶ý¶ÈÂpR=é•D+¾ÚPÔ#¹±•ù Èrò*éšh†&ôZAPy6�ðäN¸ ò&Ò,D-u褔p1¤jÊZÎWÑñ§~VÓÔò@àžW­%²:˜TOJ~{±Ú>¶°¹“ÍO@HpöñÉfüæqÖp¨™ëáç�Œ‡ ’æÞÖ•PMs磔Oh¿Q±š²ðRå§$oS;¢�dM—ÈÏø©d3¨ç§5l5ÈO@ž#wO´â7 }%Ϲü„¾3A| ¬¼Ûw^ �u°Ä‰h¬x ûÅTÓÄŽ°è^zìh‰Õ¤‡`òút89KXêÌ]"7!GOÉõ•I6�E4ò=xaíPrÒè™é<{—X{*\ éH¡Ð Z¶‚Y–&Æ;®°¤&{m¦¼½~'g‹ ¶V—å±L¶7l¡ð;0prjOŸ<.¡ªXhÔÚ+ô0Þ¶¨ºbwB°wËï“khú¢È«Ð·�å°”:RÐhÄ�¦u„ÕŽ®°ìü‘¤3%G_¯ð؆¢Cl-o~;�S‰¿—$š¡EЬ!»jK ôȸ£È–økh<犊Kñ?¹¨.q5$פI ÈpV‡W©JQ3)RE<å ýprö¸ÏÚ ç% g�qSúBœIWÎ)cÙ. ¿¢‹!n Pä‘ÞÌø?D‡ÒÎ`�á«è²\nü`jÜ8‚<›&u„Ë(*µ§È,ùÂJ Êíí¥î°´¾¹ HâíV‰fþ×Í"¿5ð>ð#¬OéZȃx‹ü Z_ב›"†B¹cjÚ§ µžOb‰¦´™Oªí•ý» &×bÉo¯²Ðk©ÜÂÖç$ äw75ù¾áºpöèlà}Ø;š7§º°‚#ô kJžõLXQû"HñÇ`ó)½µíД¢°p�ì‹×Jy{±²>vÙÝÖç# ³úƒa“+êíí»r]¾Ðw?h™¿#] t‚ÅϰÔýn•Ж%ÎAµš_ÅæÕa®|­¡ a}N×Vv‚…Þ^›'šÙ‡PXd i=¿Zòôó’3¶1hÏôÖ·x%hPà_ ýQÆõóµ�ƒ5¬ÔùzÑ‘¯54�#¬aäÿ¬š$vQn{r+û &Z„䥔ø…¥EÎG@HqˆO“ͬeñ ¼NŸÀìeÚ¹�®¯Œs •jáÄS8TÖ½ãø]¬�_—¥é?¬ú WÃÝ�hT†Ù‘wZ}û :HrAl‡|£ñ Â_œ8æ­ˆËäÊ&r„¥q"û)%?^ãæ¥búࣳz~µä! èôbKƒfókøÔ­º#+  êt�q.£8¾9.Dzãùbœ�+ekã9ÿTWÓDä$º¦JøS>„Xts]‡k¨·Z6yŒi’nA!õ�KèFò†* #u¢eå¯ë³¥¢›uo3˜õŠÆb$WmKD«']/yý|J“è2뺢EŽ�˜&½žßrígÞ¦ÞÎjcؤ+ñÒ}íŸUàªkh?�°‚ªÔ ¹öÄãÜ»†eo³ ¯Æ•|ÍÇiKÛ�”øÔÊ9šÄD+ÃX”‚bx}¾½h•R¥n°1jr+²—ÏZ¬¸8æ¨Ez…¹yŸèÚJôÂL4:±õóvY¢[…Æb¯S·Kç°E©¹Ö=®¡)\¢óúED¯{ÒÀ®£k?ë�b[‹èGÕÁ¿€\L|ÜÏÊ�Rð2 ú¯%H|6õ¾H/½×z�^|¨›,;œJ_œ™UäD�¡píÊjZÌ´ís5M@@ðQB ÑÇ*zK_ãÜÓzÐÖ'Fõüjñ/ d§UáíéW§fk¯dèÿ ïÕè\¡ù·ÆX7Yl¤–Á›¤ZÅJ¦.ÐŒ6]­áL7ý♀�ƒ>_y  ED¯ûK‰Åö®=­þyÖ Þd>ñPãNÒRd¾Ä±ZÃ�³"Oy }Þ¢®Wó‰æxÛè v´/yó6­Å8To´K´Sêòv½®&öKô6Òu¬Aò±:˜ÔF³”i!§uù�æcz�­ˆƒw’F|€fA€ð.Ñ�ÂÉáÕ\­=¢V)Ò£�]×CS?*uÿûi §Ôq÷u@ä—èƒI™¤º\$±ŽÞ^í\ûÚ�s¨Ï›˜�é[@P%Ë)Þ{ ­Oiæº’àŽ°š·¦~›¸_bÚ6·Ä³>DS?ô÷Ë]õÆSªãN6ý®&î;�¾ùƒ%®åÕ,ríkcˆø—ÐŒªƒoù-qOTÓ*¨Ón­›ÝÐä–ë¨Û5àÂuйQê˜+­y�ÄG:©}EÖÑRïþ©ÈƯ&jÑ~v² z{mçØ×2ü�z=ÍxHßBŠÞ¦ôbqÆað h]ó‡% �l }^…þ¤PX¦×aò«Ö/K›%ZyÊHM×Ô²ŠìT¤X…»#,ç—è}ô[4É6 ‰I71éüº}¯ñˆžõ ½Ö|<ÌGð ¨k T1ÅéT3Wa²Ñ*UXbûG,y^Ž$K©>&jz“ö¨ê Ë_ã�Â:g ]»U|_2ÀtbqÇÞ–åê÷OLGô, ;çüId4͆h­PÖЧ¡¿u1+/2\£ÖT‰óD}GµøP÷]§ª}žÓ¶Š–¸W±aµÕKȬf²è �ÔáÍåíUXA›À[ñ+ Ë‚á|õb©Ï/àЩŒÎÖ¶mêÃÁ5ÒÑ«éÿ¸çsù}Öç:³ºy&:®&Ÿh1¾9Î(¬Oè?:%ÌíCÞÎg;t6…©ç¦åý H3âÚWÆÃiÑ>�ø¡È<ýóš*Fgy­=ö­óløß€?éæ)õ7³±WàNôõ˜b¯ê’»#,w²üvý�c‘ÍD£L &sz{u ®ÿÆp@ÒPj ±{ä|h¡Ÿ˜ÿF¬EÁÏðaä�|ñ±F¿‹:˜j˜®ýU¥^÷ØN*œù´Ér |ÛpøÇ /²ç�VV!ÆÈçjÇ^Õ ê‰6z3`q¡ßÊm«x º¾Ð0RÉëäkâÙc¦£i‚�çà!BØ�´»ºÙ�)ZE.1�¥žœ5æ ×™F¤`¯žá!V5ç¯?�¿2‡ô±F[«rØŠ¡Õl-U†Ê3ש1�-|»Ƨ€´YãÔžk½<÷£|�2¿þ!6?6òÔ�Y{ÁØÜd42%óØX‹te@©Ÿ3ûþdæÈ¯÷Ýï—oi¨RŸÅëˆë×/ªÏ�N¸@vQÅ‚ûîï¬U¸v°ŠüÔÖ”ŠÜÖbÜ-ëˆ?…ûìzá8… ÈŒMuøC¿w†L¹w¬µ§Õi åˉÑü®Ð‹ÜL×À¤’�¿<�Ÿ—4²ólB¶ñEÎ`所 Ñù§{kÏÿž½Ùï[›Çõ$ÐÉâZï}¦½yM>ú¯ÿú$#iÁA“¶ÖêÞ›D+‹ç{ÚœX‰ÍZîwa×S[%ŽüÉÆ-IŽÃ*˜€„ÈóÃd•»üÔÆOAŸô(t+ƒÁüí@%.åx…^„¬J‰÷‘y³”ƒüÑíc[ž�[ž^ïóÎzúæN/\Aß�¶YZõvï3¸ÃFû|xÐ Ûn·ý»ï̶<˜ZhZ ¢.í{Ûž^ » šxíz/~õÃsšß9½í°Âq ÚöýæÔn¾ÎºÉŠD/ çK÷ ã‰Õ<¯Ð‹ÜW¡¿¤|ÞÇæ–ÇYCzŒx#2¹€œ¹·ÝÕ~/o‡Œø…ÕµxÓºÀ¹„•2 �ׄ�åbtàL«? ÎzÞ÷=ý±¼ J:þ‹ÉH6¸ >�ÅHñH)“ðØñ(Û«}bÞ.`X«ëæí!öˆx+½;±šûÛ«p \ƒð_‚*Y—ˆ4fíjú±õd¶ƒ6ªR1r¢ŸåÝX¡pUÞ."�C¥A}P±-�ø7»¬AWB¿—�/Aux�‹Ô›Cÿ1Ž$Æc�Šu¬vŸ~y»¥É½kØ_ ý‘Þ‰[@~7BúH^#fÍÚ¬ÙáŸp)´:s—ð% ÇwŒÛd™ƒ�?ÆcQçÌF®.�cÒ…0‰Y´B~D}òûöâG2ˆØÝÖÁo‚ò ìˬՙ» ã�¬ïJ‘êe`�qì ¨£�íˆï@ìå<ÔgäSy{¦ÁTÓ2*åic\˜×1ï@Z_,~ /»�ü&(-ájètæ.áirqf?ýqì±6|ª¯Üv¼;�–δ}¤¥¬p�T8ûÖ4-µï‹˜dùã8‹Øý�«b¸½tò# í‘3ò­¥Kh™¿S䦣�=-” OâˆØ¤Âno]F¬Ÿ·s2â�©ïÉŸÆ"’� d—×á‚èÖäõ# ëWÆhc•¾ðqár±éXäÓÔ„fSŽ ‘o9ã²ii�9y{'"Þ;�ÇÁø†>ÉÙo‚q\�Všãx�áèãÒÍÁ2çøä5y#½äøãê͘¤²™ÓµM[“æB¬;�…—�g�J„!Ë.¡-ãºé ãE@~H‘5¸÷ÀKð <,¶çä0Ó¶ß™¼Ù?oÅTþÐõbtÏÛE‘ ÈXTª5ηWa\Xϯ/‚Zœ¸‰Õ�V¶o�¢�¹ÊËô�EAÜëG¡ÐÓUZ{Äy„5å ôþKl¯åèÇÀéÇi^Þø¨Æû9ñcê`ÍQìC«Jˆ#yc<ÂÚÄåJ¯ä( -®=0�dýhóG[Ý¿œåäËè)슌›TF·Ìvp]X=¿Z|ì@Ð… QwË ü¡*öÚ�orÝnNz#bÈ¢Û„l›p¸ÅJ÷NˆqB[Õ¡·×þN~z ƒ­·Æj1x�È�SõqŸÙP/ íF·iÝÜé:×c7Ëͯìs’<ÞΔíóö5�øv ]h¸ê¢©ÄüçN~šÐ�VX¡Ù�8¡MæVR©QÂã·Øv '[¯¿›FóÀËšt÷¹]q—@ŸD' ÇDz{ýÎÅO@›ypq†è âA@п@Þ½Xêóoø^”™�L@öXáv•² íIï“Þkú]ŒEWçíq ± È\|ÁÊ2rîƒ×�»áòè$P¸�c‰ yw’jÀÛ]ضöŠJ@º˜ueסÍz0‰Ó·ñ¾·çís2q H—CFãÅÿ``Xo¯ÂÅp�.ÓÃ}ê?ý Öîx>Y‚kLr ÞôÛà¡@k+jל3¡o°¡iQ]¢·BÙ5Dýö* —H£“‰óȖȃ-t†pÈsðSXÖÚ+¢KôKý]×c-Eæƒ îÌg1z\u~Þ®—'¢ÈÂuꀢ*âŠå—x \¤�ùÎÕ~]g§Ü�( #šH«]]¯o2—„–Q±Äa)É ¾s�€<£—&7†Œq€å‡n�wà2ñb®d 4ÿž#¸eW4¥ö��D@Þœkc–aa•ƒú¨ÿmŸBLÒ�E@¾ÔlüÅ ~m÷‘Û•aQÅJq- !Ó8\cÇÆž@…¤}ÒeËØuÀ‡´˜Œ;úÿ@Ú?Û3§ÁÄ0Ä! Ÿ‚Òíõ9… 36¿ j2pÏ»a9¾D_†~ôòœó{jw�ͤbݾ1£„ñÝ=uœçHæ²¾sÞëÐ�dÐíï3� âÛ«p\­Óï@Þ@³í ½ŠÃPj±Àdøòätçë*cù‰‹ó^ ¥æHkÔ¸¦Ã¹aíBÂ�ã÷58†½…ŒTùœ½çl�ðƒo¡ È2yÒVܲ' &e› ]@îø£ûe3ìÑ|%¤bN(bZdØw!¥¦7 \@¦L0ZlTE|®¥'l™Ýá’Ñ»[YÍý>lß ­Ù83Ûbز~®·Åev?:J°Ë3!ÉG‘~šßjÔeì¹} ! ÈuïlÂuµô|-ÓæB í»�ñdêæ}M™ÀUì ¨ìÐ×€¤õ顽0‹,ovL.«qÛ��t¸®ÏA—æ’Õ¹ç#Å©+ G>ú¾é2£~y;9Ï 0&…#y�^¢Ÿ€fþ5¨ŽRgeZ U@*/;í ªÃèKüׄjuሼÝNbÅ]çy_Ž:t<½öº2LyþÜ]yÕ’†´¯ C†úö*¼�ÜPê;fÞéd™x@�¤€ rJ"yƒ�Š·ÞXÛÇjjs¿}¦Üú¥¼Nç¨çq9êððÓŸ¯z;XÊä˜õް²À¢Q—ZÓ°ÃŒäu) Cg�‰ûiy§Ã|öÔ’,ƒ–2Yÿ€z©%1ë¡Íg{Y�©'ý6Ä þ†Œ¼©Øàäï>¬7…Àv •ç­¥QÏ©,¬—Ã/-�ê€ à~†¬»<º Í;ǪYlÍž@fQÎÀv 3öèî÷S†¾ºÿXÇË1»å±óóvSÌ·r¼«8þÏ5?$™²ÇÍ‹ì­,ë&òvuS¶Œç!ã.w “iŸ �ûäö2›š„$ ýNéäe -òÐËî¶p~ü^° \Ù½…‡;õÎÝw*7x GXý�¾æ=^Ç)ÔÏúy»cÛå>¸˜èС€|�f}3î—WØx'Ã\ GX̹«ìK!6úÅ3­¯Gdz^ %c�rÐíOÂhsÀÀMoühfÂÀ¹ ÈS-N™ÐÍÁºšÅvö'`¸5±Mް&³i�G³ú¥9r%ó8.w¹üŒ�O»ÀÏÒ¹ã‹}·¶w�|ØË?®7䄃7>i/k RÍm-~ú“Ôú¹ ÈÇ÷sã¤u–¹ZMÔÍo—`€J Œz¥f/¶Ýí@ŽB“¾”-‰oþÇÁþéÖr�^ÿ8à—[�ëgvFìzÈ¥{š¥öÞô寮ÏÛk¼ý÷÷§5¼Ë²°ßµWuÊ®Î1`¢WÖßÿ”iÍNûù7î µ]F¦•KŸ1rfâÄ[€é¿»ï¢IŸƒæ,꣑�ØøQz$ï3Ìš)-/]râ-ç¼4Òò!q8tøU³Ó/;¿#/r½î>aóä›I÷ï¿é½ˆµ]6{ëÛÛ/it[¾šÕ¬f5M˜Gôœ¶ý3-þ;%ýÅÙqƒgÇ|ÿÜÛ»Y¹Ó.ƒÿÔîØG_s^fà]vÜìÿ:?¹ýU“º8ìØլf5«qÍòEM?âÔ‡:�6é«ÝºwßíÏÇ>þA»n×_ýw[¡VKþýü´þýûþþþýúFþýýýýýüúGþüüüÄýüüûúüûû°ûö…EùôóšJ(ýüøJ7õôýøöõõ÷Üöõõ¹l õêdÒˤùâyV  `—S°´;˜IDATxÚìÝISâPð\^R¡H @P à°& *È"„ÃV:X.”Z¨ÌÁ«W¿ÃÜç£äû —©™)gÑaËòÿ]õÚý:¯»8�—ï £%¨óyWQ”Y(êL‚¿£-þÔ,)Jt>¿„O•Â0ÂP`+Ó}£¥~‰–®´ô噞”³ù\‚ãhšõx<Äü»Å¿°4Ms\.!ßèõˉÖ<ŽÎ‹‚QˆœP`M'aCèuKÍô¡~“mûÑNˆ¹„,r‚˜¿�ôÑ$Tzì Œa€ `"•Áóý,=JÆQï!æš-’�ØŽ%ëéfùV5" ›ÇðŸ·åPP—S~–˜[@víØ^u¬ÌÕÊ.ÀF0|að¡¤�¤ŒŸ6-aGLÉõÆQ·xÎ#¬ËA߸> =ܤ¬ù¿bŶt8V^jS\¬Ó?ï•Ç#9çó˜G¸xìLS^>MÑAXZ`(D›’ BÿgÄ—/C÷ê>OÀá jY«_ˆ–,øß‚MdôF©w¾KÀ;±ßÐ3¾Óö<\~/}|wŽZà-ÂÂcç£#bÿç,�Ò§ƒ!ºvRé=È¢£bÿ�/6j~5P ¼Æ×º�§MLG#l~¯q/ô)ø®/œ¦“q‡ü¯yüRµ¬F(Ø]¿äwøÁÿå‡R1â¥\‹oÝ/‚ßVþ'�`y°‹$.tRév’qÖt9â—Ñ.ÁM¼á»Y=oÛŸUcã{¡Û}Œƒ+ðµÓIÖçº�þ¿#\沄æ8œ7Ük>¡îÿSs Ù¹-`Vê MË8úÿQTË5<8ŽÃ ʨ�£ÿ vâ¯T| €ƒôÕ¦îÞnßû19î…)˜Þ�oDþïD8Y»Ý§l-ü¬I>þ �M@Û ¿h2gÂ’9`ˆQA°ŸiÑ¿º@ØÈn1$%LX:¦=cyl" \%që·b>)TÄÆXc(u÷-÷n÷ŽZøÉ°²a·ÚvÍ»›ç‰�NÏq%ÖÄ;1lø­›IÁuXŽ×8Ö(ý7�»™ Ø+‰ÌƒmŒún ‰�¢˜‹`„™„ÒÃØlGÅÖ l_¸{Gé¿ býelÓº’qø¿Êp’鼚Ãá¿UDE±7 [à­'1ëo´Ülá1ج@±‘µ¿E�\ð?A›yaØßR|z‚°Þʺ~ÖÃÆš5L ú1-ƒÚß’H~r‡ž¬ÿ\ŪŸ…%κX€u‰DŸð¾ŸÅÑI—°…>ýí`'63(€Õ2fY,úÛIuÜÂêx[ã>ýí$7)b8VƒQ9lÆ_½FK–wP úM°¡ÄáW<# Ë \? ümË÷ñR,þ‡xÝßÖ8¤@ø»R ü] )þ®†ïÂ/þ޲Hh ÂÛ0*ߨ»·�4¢(Œãûf†LF‚òùKi³M:ý4ŽIýIk®ÉŒ^ÓúAæ_j» ]òü‹xC‡ÄèϰLõD“²?`�f…©ÀXd*MX§Ô#.4‡=¢?a¥Ü‹± bã#²`©ì%  ˜þ…½¼Ï3A„ŽOyþ‡Í¡3–ÿa¹ùADsX®ñQ‰¿ÿà€R‡³!Øê²ý'ø/‰ ]ñÜ7€R‚På'üþ‡3Ò}‚ÂBUÞ¥þáoÊHPˆ‚~Úñ†Œ…¦5eü®©=„b6¤þáž*C�¡Ô à ½…`cí8©þE°¡6é?pÖë‘`#+Æÿá°BE°�ëºV )�ú‡b¥gƒîjÉúœçÓî¨Âú€@ýC3ŸwêzѨhF þ¡™¿Ï;õ½žÐ¨(Æ7õÍèÔ?4càv–Ô?‰p×Ìÿ"¡üÙÿ�^%ΆÝ`Eý#ÁÈø¿6ùH´ÂR@þÔj’øOò?‘xõ•`­ùßP`ν€µZC(PåfÐ÷¿ D�»�)÷©hñô­àù]îÿB o~Sœd  †×¿ü²už3€"郼à‡L×7€*©mV± ur=V¿[° …Joßœí@¡Æ•@Žß@¥gÏE½àÔJí D¹1€PlØÕŠG�  –÷®,Šez)|eïÎzšŠ‚8€T°nuߣâ¾ïQwSãV5Ö 7Ú†ÚJ�B4HKú@|�FT¢>ø æ¯l÷£y«†¸ò¢‘Μÿï•çó§sî̃Í8¼@™kÅ"0ZÅusÛN£ŒWil;ÀQl ­†î«ÙH@[ŒÜ´ú>€kc�2Î~løªü¾yÛvcÀ7«NìWfyˆ `€qsw+£,ÜL0nÍ3e|øÑUƒ>¬>Hðƒ“{•!¦/ÁÀOÊ›²&ô^%ÀOf1c*`Çq€_T>PØ·”à7Öðnð™k¿µV|O0.þì ô‹À{xà�fß•}ˆ @€‰,:¥«YK`hGà¼ÅØ0±“ç”TØl[»>º´írÊÇ‘]äþ©Ha•–:|#ÀF°‹gÞv|Á¶XmãÀ@¡ÐŸJ Õ»Þ?—®/J¥Rý…BáéÀÀÈHíèh[ÐçsHËÛÐH˜»G‰t;@E³‹_ûÜS?³08TŸý®}¬3÷ôøÖ~¿ßãñ„B�ccSÞ}x�O»¹0Xxšiˆ¹�@úKØ&¥Á¶;J åç dúzòË"}…Þtî]"ï XÅèñ„Ã�‰)rŸê‡Þ𒑆² ãf�µÂ-�ý@³Ž H b‰ï+«my“ÎM ÅëÖ¿ç ÔUÇCnt¤»Ü,‰”µ9Zv� q0pÆÖZû"ÉÁúÜ«pu•×ú¼ÿp<ô*ÚÑúüMK2is„ÞVPÂÚB ‡­5Å_¾È&†ý^kxýuÃáW�s­Ï›3e>iA°æ†å&.ݵv"}½ùî¸{ö'›·˜o»³ùýMÉÌ(‰É�¥W” ¸�Bkjèë͵WWMþáÿ1ªêâi«˜n€yØœ­�Hsk{µÅŒ×ò‡Ç²¦¿ÖnW2\Ç+€œÙº<ÒœOÔYLyf2 )C§×°¥íXK+ßÓÏ9hÎ=%Àvì`Kë`_º½šEÙ/0h³€ÝÇ6`SÚ©MEã¼O?ï KËwñ 8KZ›ò�Uœ`ÕÅÜQ<Ì‘¶#©(óŸþ€æ?R¬�A 0CÚi|‘ð[B°ZÊ{2ø:Z€ÙѾ¦|XÆ?Àû[à�­¼è`KnXÐñç4g…bkÙFVt[s”]¿Ÿì -‡S³.Ì `¤xü{,i¸Ýç:ø3€œè Äã/ *Ö)–jð8#Ú×’•öã_HÐú³Š¡ý¸Ð”ì¶dâtiµâçT%¶®MKúð'.f3Üze%:–JHèù•´m§bf: &´ÓÓõ'5èÒÅ &t¦Ujñ/)¸(xÐmý ±Å¿¤ m¬¾L?LPúl;™ã¼ëǤàU à@�ö†,ù„§"v2+úòOX0*fí"(u:˜ê´Œ %è<—v Ì”>�é�_ý .3çn”6Ûin—~ù//hóQÅÁ —8=Ú·Œ!'èàUú>³w?-Q…QÀO g�Q4µòo¦1–`&6E t#AÂÄJÈLp¨É²šÔt‘BY¹se;¿@»vç¾ÜháG Ú7#BsÏy~ßá>œû¾çœwþ´´°úÍÅ韽h:/…̽PB–è†ùÞ« Ý£‚î:„Š{ŽÊk ãYÁÖzQ X(ïz*ÿÍ@ø;-7”€…Õeÿ@ó킬“�!KÖüÜþ €úGl‰=ÀÈê<ôþ۽ܜ›âKÀ¸’ÈÛñŸÉÐEÜf€ù^%T¡¸mqé·¿h‚}*èü˜ªPþåíøßhh׌`êÏ(� å-wÇÿV î¬@½¬*”~xýþí€öBîÎ óU(-û»þ³Z@|-�C@°ÂŽãïßbd‡‚x+¬þtüý[ íZ4#<åºþ7xç€3ÝJ�¼ÿ&oC({A¹ÿþmZ?à${1…òçß¿Ñh -•%+nûŒ€ö!Í4*JŠ›î¿«ÐpS`tä•E¯�öÿ;�½#(®ö(!úð4&« Ã9Á0:«(¬»œÿw½C‚aJ PØwòøŸ×ÐÆUàä ž°ó5&Ó€qx팞dÅ}€ùÐ|‡¤ïßFmóÐ|4ŒHêš9é;/ìÂT`'§…5� Àý@ý‚¤¬½O N(¹Þà'ôÒ´{€Œ+îÆä"Ž× Ä5Æí½ŠÉG ¶Jšê•ÐðÀQ胬¤gš��ãI^~ŠÉM´Ý•ôÜV‚s¸Í@G�fCp+›€ñ„õß19 €Æ'’’ܸšPú“§Ð±fIÇŸÁñÐ[4 H*²œÂØì-Ž:ÄÀ>þx €L§7›mòÀ_¤S<¾ &lðÀcdîK͵”À$e¶¹ =×.Õ°pà3—€ø €ž~©†€yá=gœ@õ€€}ÑO½@Õ€€ya�-n Z ÀÀ¼äO@mK€ pÂßt•Kæ…ÒÛ˜@æ™ÔLvQ ·øÍÏI%œ0�W€î âDÇ�;ä€÷Ðü=©�+,Єýç19€šíà" 8ìbT[ ÄM€v…µ71¹€mœRmÅÄЄüß°Œ௶yùÿ”À°øÃÞ�þÆ…qDÆ6:�Ú·¢všŠÚElc¯%–¨}Úb%ÕD1¤^ˆZ!¤Þxá�wçž¹±ÍŸ&¨mÌ3÷Î<÷ú~þ‡ó»÷<ç9Ï!¾¿-œg ‹½ÊðÍ´Ñâ·E¼¨ =À ⳉã t±í4fnMb ‹ÛÊ0 rL|U»Ù@—k€À/S‹Ÿ®Tèbo0 ”øix�øhèreÚÞ9 ~šqPü³uš�.öz‹`€ÏW‚ ”‰?p@üfi�ø¥q®�.4FÕ‹_–Ѥ g€@¦ÕQùM@áå^à9p ƒoÍ@'iÒÆ¾d8�!r@|Q³Ý@J€@&ßž¨c ‹m§HüeÈIù…Q€!fïR$þ¶«F¼×È$ u>ñ �ŘzñÞJε±×x˜Èfµxîà e,Ï�YÍm¯=«6ÐÅMÐ@d5|‘|Ã=À0³Ü"²›]+ÞZÃk ú0 �È¡ê–|Å0ðc@ä¶'*^šÀ5uع­Ý-^ÚÀ5u,; §È2ñÐÐ¥ʸƒ’€ì< 6šQ`êÐDäS}˜`¨YF�ùŒ�R ³Î‹€\<-ž¢¨à €ü"+Å#ѱÚ¤^ó�‡‡Ý€×hïr@äSµI¼±2b Œ{� €Äµë ´±}ì[(^¨Ÿn  ÃÀ€‚F/¬3P'~ßPÀÒ%RºmS ´q/Üq@0m ÷€ÂÉöõ8 ˆ`P8…¿°·©gØ¥³_Ýù\šäàÿ6ÌìZšB)þÖ §XϹÏïúß´Þè}Ô÷jÄǯÎ*MgÚü·¦‘RÕ1 \÷|èJ1§çl²¿õeßàD<ž¶©TÊp жNJT³Ê@��•bÍ—’ýï;ÚϤݔýÿ×ý0y‚”fô(uìûð”bGowõ^mK[–¾ªçHiЬPú‰Íº_\KÖ¾ofE¥µ¼¤Q[(æÇŽ&[Ÿv²É÷ÕÜÓ< :vÄ%'ðšï<ìhãÓï·!“¤ã ôI]ü,€–äã{i¾ýepb¨ï ³À4r[�`;Úý’�™¬m”âmâ" Fé`ßjé¾þ‰�¹LÝ)Åk0P(Ð5Àæd/Ë¿œ¶/‘bM˜l O ç�ž½›`ù—ÕüR¬[ÕúØàÖ[º®–yEêØ„‹½ëÔåÞ3”þÊn×v¡éf#pÓƒv–,X!ŹÂ@¥x·DçÞóù¯ˆH;€0±÷yør»ÿŠ(z0‘. •ìˆaNàÄ.òû_!E¿x¤Ê@¡ 4u%Xÿ3|§c‡�Föyàj€M7;Yÿ´¨ü»-‡ ¾°w·+QEQ€W™#á8 ~eš_hi™¡£"fV¦–_%F!¥fø5jJ¦iD¢VJý�~H‘)Õ5ì³�ÒèÒºg<Ì»¦÷¹‡ó²ÏÚkí…(òQ[ô/±üW%!ñ®’“À˜Z&]&W[Xþ‹+ÿ�x×hQ$¬l k‰ß¼e‰gA®Åd“tMô-óû�·òj¾š(ìܤ£H`í)¿ÿ¸ó}æ>€Da¿ªº\ ³þàŠx”Òa’®[ÀåY~ÿNŸoBÜÊþT{óüþ!¤]orý†0)z¬oê?ÞË%y@¼)5)òGÑ,à €(Ú‚| !ØðŒ£ÅÈ&PÖ‹­e“N8Jt­B‘_Å6À„`gû%ø€$+UÜ ŽÂd´ôMÏñȽjq¯¾Ð&»Óå¨Xl1„ãÔKq¯›—€¨Ôô-ó ,ÙâZj�!PvKGVYÀr#(nå”e×fÆyÀRXÏKÀðwÍÑ ï7¿0¶„B5¬ã= ðô¤Š;é †@E޽sL±§¤��Wo9„©­FWÀ­àÀì6þ0`ï 0•„¸D9»�¿€¨|çåpÝɆ`Ù�^Ýİ!L�,(g·à °Êªsér˜[, SýŸ¨®Ýd @7ï�Ì<ã *ßC–tÛ]tÐ}ã% ®l–tÛýå€c ²±¨†, + q@5üX³€Ë÷@bkæ 4üøÁI@d÷ù€jø°hXmªÄÒÄ�`Øà wc×®³íK¨Ä2‹ï?°ˆ,­Rbiås€Ø"è{A¦9 íd•ÄRÇ6 lð'ö‚+•X‚_à%¸â‰.'Ï4øxÍÁ±]¸+Ñed‚†�%–°ùŸHtC~CÐР÷ oÁ5² H1ôèÚá \mŠD“ÞfzLr'º¼‰¦¢Ì6ôØÛd€ËÌ�h*Ó aC€é}8®DSÅQ@tè0:Î@×)Ñ\6=¾‡èî4ÉÁ‚„Ç £*o—ƒU³=Žã(º¢Û¬ªÅ £ò²¨€Ž¬“5@µtdµ5r�ôCèô�½»Ùi*ŠÂ0¼&Ð4- UA‚† X~�)F"L¢i ’0pê…x?ûþ§³ó Η¼ÏE¼“½ÖÚ¥-ÎÅ8ç× UGPZ«Ã.°+€Ò&�cœyîV@y71ÎaBå”÷¶£jÜ4@PÚø»€gO*� ¼�«uõ*¡òÊ{ñ3F�2l€ ´ñ¿ƒìð'ˆ�‹u‘P}c†�÷¿$T€ÀÂR ;ãS {1ì„GS§1ì;�&.cØ%�fcØl‚…o56,(t§cÐt7Á€Âêf Ú\M0@ ÐjÇ Ï­ Íã´ÖL0@ qƒ¶Hlñ'€%‰¯µèWcÈ€ÄÂtô{Ä=0«{Ñïž��=HŠBíc‚�õó(<ã"¨ ��wQØcØ€ÆÔkÆ hÔ×¢ð‡e`"+QøÅI`"³Q¸Mð@ 2…— D~7â×\ˆt—"w´œà�@äú>rs‹ Džw"wò!Á€ÄÀ$Ðcæ€\ˆÔ{‘;åˆ ‘‰�È×<¨ÜFn›A@*ï#w˜`‚@åŽA@?*Ÿñß›*ݳÈìsÌ€Êúnd~tLˆ¿ƒí®'˜ Piu˜¶C 2ÙŽL‡I`*Í^dÚLÛ P©ÏGæ/'Am¨LDfžU2‡¬Ø!�ÙŠÌ °ñ�½{Ym*Šâ0¾¡©Ö´/…"�ª¨Pm!h¬mEÔR‚8(XAªUxv ŠoàÀ‚Pœ;[‰HÍnK†9çlY�üáû=ÄÇÙg³Ö&pS G.T¸¹Æ,�7OO…T¸™› щ ƒ 73gB4Í0 /½qÀ;< ¢ƒÀÍÍ…Ý�1¨ p3¿¢‹Lë ps²¢… n¦Ž°:oPAàfüvˆnœ7¨ p3Þ QyÊ ‚ÀÍäJˆ.n&j!j±H€ ˆÀÍØbˆVئƒÀO5D56‚é ðBø¹OÔøi†è±A€ŸJˆª^€ /@€Ÿ{Ç¡eƒ ?õF8Ô4È ðÒ @Å ƒÀ Dà…"ðBø¹5MÄø9}–ˆ!ðBx!‚¼€ÿаá@wˆ2ô°d(jmdÐ>u†ZûøÈybè�/€dÝgíÑÛê µõÑ!Ò~Ã7@�¬ûë û; HDÄ|ÉÉ  ³ûÇÐHD´”ö~ú#‰€–ͯüÈB-[o @¶¹Y�€hÙþ@²0œˆhi¿â HD´|\3d ‰€”ÒON9ê Ö‚' R|!9ê I@¤¬¿#96®€@ÊÁk�c‰§ÁR)ûÜ橄躡 åýon3õpeÂP�²kÈÑ Q�C””ö8äY&)€’ÍÏ O5Dç& E%/ÊÑ @kÜPP²=BrŒ-€@I{‡K€µ="Å%ÏÙ–£€ò”¡ ¤ô�À_öîm%Ê0ŠÃø*ÒÉ63–QØ”¶¥Ý´³²IÊÔ‚4¡¬¨l‡miE‘ˆ uAaAt ÂìÞrügÆך³<¿kf¾÷û¿cY1DjAI32Õ¤èÜ.…„)�­þ²µíVx€@–.#–Ì)ÚsQáAa dË4IQoVáAyǃšZÏIQó ÂƒÄ‘žPXv·IQc—ƒÄÁÈaçA):tLáAâH3²e{eÖ%…ˆ£Ÿ)�ms‹Ì:¯ð q,a dëj”Yû ŽaþÈÖ'Â¥€5 q0rh—D¾Ná@ÂHOò™¶uHb=w‚¹€8~óÀ¶Vîs!a\}ùKa¨ËK"Ç� . ¦@ ·$Ñ´Fá@½Ç!€iEA=ì�]@cL�lõ9IìÙ©p aLp h[Õ$‰æu Æ¿l�=’8ÁÐ…DÁÈ–Œ} ŇÏÀ6xE„5P @w^ÛÝ”ü³Vá@¢~¤0]’’ý¼8íA¢øqJaê�’!Æ ŠINnJÉiÆ ¦@u¤ä ï{€ ú?2²5¤¤§Sa#A<þÊ7[&'%½6Äè}^´µ—’Õ›6Äb¦@;dÿ àA‚˜àÐ!Û,s¶)l ˆ‡üpèJ‰÷×€Äpá‡íRv€W@ L�\NJÙµ� ˆáÎà�—²½›&ÓG<°Õu‹ð&PM@ ?9tÈ\—²fÞr 1L1rØu\ÊRÛ&Bú=‡J…v…‰„Ðÿ�g€ƒ«¥ÂY…‰„0ý‰8ô-— [&Âm¦@û¤R�l „Å‹€C^*íåJaœ)�CC·TjÛª°€Fxà°)'•Z² ˆàÂ7N:{¤RŠl ‚L�<6´H•……Dð˜)�ÇÝ”TÉ+, ‚'Ï8pØ&Õº94€¼UØŽHµç€&Á_†¤Úç€&@ú ‡krR­q�Â@` ä²u@ª¥+  €éçÀ!Û(3ØÖ„°äp8œ’ìkBc äqVæ{“Q,Œ0Î}`[d¾£­Š…€ÿ_ú5¿V>•ù®p/¨…üeïÎzcŒÂŽ?jlµïµV�¤4T­-ÑŠÚ‰%Ö"$–X#\ˆ;‘ „ŸàI\ñÕôBï9ç93WÏÅÿ÷!þ3ï9ç9Ç¿#¯ @†Žò¿ÞýŠ4àß•; Ãü~)¨(Ò€#·@†=½R°„÷ À¿ë—@†>)ºÑ¬H"þ]æU  MK¤h;Ûà^ù§24–¢an3÷ÊïøÈбVŠJ‡IÀ½Ú{�aV¿ÌT$÷Nð*PŽÓ% 85I‘BÜó”dØ$!�‹)À½ç×X´��+!ÕvE pï£@¦HHËVE ðŽQ ,C³å7Þ¨ð®|›dè™*A]ã À»£@9*¶“;A’€w#\˜aÁ ;¸R‘@¼»~‰MÛ¢N kmS$ïïP˜Ú«±L‘@œ+¿QØz¦JÄFVS€sŒe©HÌqVS€sG2ý»È�õ νü@lÍ2г€õ#Î�g(ʪŒâ,`ý€sÏ(Lû×IÔ>V€sŒåØ+q\ š@|+ßU˜&m“¸*Ï%çÊ0e³ÄMÜ£ˆ"¾Õî|WXfÍ‘„MŠ(àÛ… ü°uKÊ[îŒ#¾ý¼É(�©i£¤` 0ŽøÆ(P†ÉÇ%¥…�À8àÛvmCgeG�A|{€­§$I§8 E\|Ï&€m¦¤M›¢ˆ ®�cÈ6阤 ÏRD×ʰe»ºÀµûŒÙÚ¦ŠaM“"Œ¸ö�]@[ŸX:§+€kùé2-8#–9óaÀ³òm6L›Å2ñ´"ŒxV{Å iq‹˜ºaÀ³ ¼ d«ˆm5‹À³GŒ™œÛ0‹À³¯ç†Ž b›8CD<{Á(�©­EFq AÀ3F�l{%ÇãaÀ±ÁÏìZÆn“­Œ„ÇN0 dZ¹V~ãN€FÇÎ_dÀ²«W²ÌåbÀ àØÇk ÃIɳa¡"€8öŒQ Kóaùƒ‹@{È€eh·dš© ~ ¾fÀÒ]’LÇ&+Š€_W²4uI®j»¢ˆø5r‹¦L“\¥CŠ"à×F�,G[%[—ƒ¿¾ÞS¤Uä/\Þà×F� “—K¾þÅŠàVù*›†¥«¤}ŠàVík€†õ%©Ã/öî®%ª( Àð*‡AKg&gLS›Ì©QRœ>IÐ(’> É’èã&èB骮»ï®¿±ÅòÏ%)]Œ5³×9[ΚÃûüˆÖ>{ŸµÃ‡Àã€Y/¶ @{¹9Ѩ=vhEÌzûž´—/ŠF/ ‚Ž#fý8ÅWÀö&GE¥>âЂ˜ÅS NJr„�1üüði?a_v-;ûæë~¶Úê&:…%‡ØKÚ¯]ÓNÞK'TWEé)¿µÈ|ÆMš�, íNômÉ\ìvL­‹Ú}{"x’µ{\4ˆ@/W½!vD 7s]"¸â`€ÞÆD°Ñã` €ZfN¢¸:í` €Z¾(‘L8XC ö® ‘\d0‡@+³  �ZcEf€” Ð9œ˜R‚@)³( �*‡3@Z(­D˜Ò‚@'³(Ñ UL!ÐkÊÞ¤€ÎZCbøxÆÁ•ܸÄQ);XB ró®ÄRr°„@åUVb¹Ì¿AM!Ðè–x& !Иz-1-°À� ‰«ÉŽ0Kú7$®kv(”+Ûƒ>3Jßú”ƒþÎÍÊ_< L+À7VÙAà-7.!Tž;XAàíÂ5 b“«fx{Ô+A¹ `€¯þïFƒ«fø*W$�a®XAàkYZðwàîGài¬(ÁÜr°�ÀÓ|V‚™Í;˜@à§oKÂ),9˜@৺*½äÐ?% ©Æ1  ^òE9À1`Úx™oÈŽÓ†ÀGÏ «Àm@|”‡$°aö„Z@à!³)¡­žwH€‡™¦·Ì£`< öJpÍK‰#èìÌŽ„—tH@g“£ò¬ ïr�Ôå$ŒÞvH€‡éšœˆ:GÐQINF­ê�(ð›½;Ûi*Šâ0¾nÚ¦i M[”Úb¬Ī &‚‰Fƒ^ø2Þû(ëý 2µ§g€‹³Öæäû=Ä—²ÏÞY¢/�pX(Y6+r‰“Àb!Hwr˜—Ú�Â@¦ß ÉÍ·¶Â@–úÉOsOሠKwJrô–;�ž2”6$O�Y…€ óO$WsU…€ ¯%_k| äˆ ]¿%9û®pC�î &9Û™Wx!HÕ^–x<^)Ö›’»V_á„ ÍÄOIÂ÷ÀÅ@�lÐËü#Ä @Šò±X¨l*|¤xÐG3 Éê»b£¹®pA�ìΔù;¡ð@�¨>'V…€DÝ�bf� à‚ IuCR0 ‚ ^ï—¤`@ŒìÀ(€Ù€ P q² â<ÌL€B sµÀ(€1WL€" ˆºê`À¸Þ’8X¸¥°EczN<4¸h�`̵®ò.À GU_ÛŸ¦¢®ý¯Þdå»â¥ÂÁ¶Æ ¾Èõð�€Œ`ÔÄ‚ø©­( D­7ÅÑ> ´DÑ~'®¶ª 3“qõ©§0C0ªÿAœ=žVX!QZ©‰³Î¬Â ÀˆÅqw̵`3ê‡â¯±§0B0¬»&8j+l )ïJ*÷6† îIZ�&.Í|•@l•.M>•@,u.ô[ŒÝ²ÂÀ¹Òm Ç{^6Ap®·$ùÃQ €3åU G�&μäðÜ30@pª}$�9äa€üœzé~ 0jŠ[�ù#øoq_‚ßÂòGp¢þ\³½©ÈÀ‰7 Pë•â{÷ÿ“tpüùÅ "s,Dú""†#¶Œ¡é*]«å¤5kYýâŸøüÙZ#Vñ¹£»{Þ¯?â½ÝÝsw~\©s €}ÀÅ"¸²™“ ±è€j«/�bÐ3-t%Tüè€^¾“`õ[ �VžIÀºÜ ö‰àÿÿð'…?À¼Ú©­ÓPxC¬+Þ’À­ñ> ?ÀºGe \ï\á 0îÞP‚Ç0€?À¶ /ñ8ÐâÛ�L­+ü ¦µ;… †Æ"`‘€UQ-XøB¬ŠkÀ"À`Tl ~›¢[|Sú¤pŒØÔ<‘1ä0)¦ Ÿ]N‹ê§ò^r‹XtäO€³8­)\"íìJ´¶n+"ö܈á ëäFüê°g\’ˆ�ð_¨KÀœ³`�͇¶Â`ÍrðÿüÍ^Aá 0fi?'‘Û+\!ÆÜ‰îЯúÛ G€-�HG§}æ,Ð`Já­¤€³@g€)qŸNTŸ*œ –¬G~8qüDá0¤²%ÉxÀ½@'€õµèO'or/Ð`ÇëhïþN�‘`€­UIJgG‘°"þ`¶< Fä_&´À6€3Àˆ´6¾ë5Ά’ ]¦²"&T%I¯–™ ê~2‹Üˆm€l€ã’¨ê@‘0 v$Éò6@& }í$޸ΗÅü@òŠ]IÙÍ=þ ΀¤ni¿,I+ñ]X uÏ«’¸ûÌÍ�$n;É  iÇü>7�¶Æ{1à��Ày€¤Eý à?`#p^ eùÔ7(q1pN e_Ù»·Ý¤‚(ÃsS)„"-ö°9‰-Z¤bŒ!±šh#I¥‰¶½÷¢·Þö¼÷Qæý<K ›ÙìiâZóï0{f­WêÿœØ|o±  X46ÁxY,�è¥ûàMßêɵ'&(=ž/�h•ª›/[amxr@©• %[ÀÜÕù�Pê�‚5àIuؘÐ) à0Ÿ< *íõàŸwL Mˆh´®n ˆ«íu‹$€B™Jg€2Ä; Oî �³Ü;¨Z¸#ú|¾0;æc`@�Ý/&hÏx”Ðf'È€×�ï[¸"Ê´ž˜àu?Y8"ºÔ÷ ÌÕ¾… J£gÀu€€&ųÀ^ÎÕ/Z¸ Šä�¾0-;äB� Gî´fðׂœ5VFÁŒuq±‘³Xˆ¨qÙ1¸fsÄ•Àŀ̀F3Ä DT6¸aÜ´X€èÐîÜRÞ±ˆGTh}5˜¡ûÈ"Ѐ Àóœ·,âJÁN[ìŠÄ"òñ Î+Ãâñ ý`':Ù.YÌE¤ãüS€€p™ÐV.ákCç"²e*<\(û”ÌCDãüS€t€dœGÙ>˜�V·œxFäª><6p.@Ãâ6 çŸßé©8ÿ ­R€€PyÎ?ð€ÈÄù§^‘2Î?÷| ñýŸxBâü§(Kæy8ÿ)¬ò6p §0äüó:Ø M¡ÏûßtÞ¾¶˜ Â48ÿÌ ôˆÈRêqþÓ;gZø¥Îü_/º‘Åo@’óÿ=)³5ì H›ý?ÞŒwÙü �#bÿŸG��à' F“ý¿^}8ÌY!V.ÙÿïÙÖ cADÈ�:ž­UxDDÈŸnx÷¼ÏÓ  @ñ¨fpNÛЀÿ^ãŒç?wå{Ûî{÷¶“V`xn6 #'A�Jkm�j­5¢R�V£–¨QŒ>ƒïÐ÷Ùï×7èM™™5kþï!þ}˜™5@ºÆ9×ÚÓ™KãF„cûŸ]½ý¸7Ù:VµÇõ4b@²d¿g`Ùh5æ @°ú˜åJ·/¹2«,ÿ;‘«¶ÒX±*›,ÿý3Bþ�«UeùÏ��XÏ¡jGµÇù4F@¤dÇÀ©Å³(ωò3ëŽm4i|€@SÛœþñáí:��§uÎðo?Êñí &âðûÏŸöLl» €0Ù-†yTx|ŸF…È’Ìx”{Žëæ0 J£Ïî?߆K1ý ’|¾7ðî¥Ñž  Gö˜Ý?"":HĘæó_ŠÜA4;€_šR”_#¹8ˆÈ�̱ú/ÊÏÁt Býæ»�(»ß¢˜B$¨°ù_ Î]ë�@€ë6ÿKôr©ÿ3€xW¿`õO¨Âšú»Ã€o•YFÊõ ý3€xÅë¿t/—ºÏ�xý€òÏà¯ÿaèh>DüIjŸxýÁú@ï¼PàMææÐ »O+©RÀ—ÆfÁ ;§J�?’¥ƒ€,>S�€Sÿ&÷ûNãAàÃu•£¿áQù/�¸—¹éhãYß%ÂÀ¹VŸ£¡:ìjÛH« ‚Uj*›NÜ*n³÷/le] ‚À¥ìòQÎ l'›šF‡*gÌýÕ`x¡ç%€8“½»çñ¯ÃHÏKp¥²ÇÞ=Ô¼xü«3êëx NÏxükSþ¡aO°ŽŸÿJš  ûÛüü×©× ~n8°-¿Õ1PªT­>.ŒXöaíÄ@¯«AØW‰«¦»LýUîÝŸåz.`QR«– ´›¿ xE�ØSÜ»2ˆAyìÏ@`Kæõ�µ¿X”žç�FìHVÖFñhÏ6Ò+*D%÷õ4Äï`A~ù�¡Ÿñ)<-„÷@&.Yé3õ'NíÙà.%“VpãW¼†ÝÀF‡€ÉÊlqáç_öîd)� À8—jŠ¡€  a“E$ˆ!&— ‘²@,Å”¦L4‡\sÍ;äžGé÷Ke­,¶zèï÷óÍ̺{tö —uÔIÀN"ÖáÈoÝEžœ9h°Q1´áªeç|$¶I.]À·O‚o�2 61Zøô‡ŸÜf�q^°…î°ë¿‹T±*€Ø@äûmð§­~^ýi ˜˜XßãË?îr¸·®zÀ¤–zAvýánž`/ •F&ã­½`ö‡û¹_×’Ra`Fë–#ð»[ o$ã³²«¬ûÃ`þœºß À¸âá G~`8¯VUM�M󷌒€”’›„À8ÌB�ýa4‘tXÁ€Ñ™…:›~0º@Feêï\Àx H)6 £1cÜý1�ˆbã@0 +Ìå�‰°¯Ðº0<+Ìä6ðçv”9.€ ËÈv¸üaÿ§sEö€áøZ,û�}vK=%Î #ÃXª]ù]€�<Á½Ìü7 €�D¢WÚu¶;¼ŽÅå<€�Ìü1ûý1-[•¬OÎÀŠÖ«.`zÞÖ–„œð_ÞÖÿ˜¶ÝÒÓ¦)ç‚ÜO$–/˜üa<‡ý°!ç€ÜÇ*„‚üä3³rÓ]’3GîæÝO³ä³õ TΛr¶ÀDqùG}aö<§›Y¯œ%ð#Üoðì�9yxÑk 93à/‰óæþ˜'ÏI=å“3B~gDüA/¯zSÎøEpó‡2<ÕÍ}¯�SG~ð]^?çæ…ø_— –œ2ðU<ӻЏÅl­ÖÖM9M@ŠÀN¥Ên(i»QÏ&…œíà» ñw?(ìaé8ê“S¢wŒ³§xô‡òVn×ò†œ�o¾]ÝàÑŽàywó¸iIÛés½[©2õ‡ƒ¸«�ó¢)í¥eDâýfƒ3¾à8î“tw]HÛèxÿ$ÈØµÝH×ì9=DLjW?œîë»@Þ’Ñ1f±›~ÎÕ�à9½é !Ç£c¬üyçdÛ,Š­�åË1Öiá‹®œ2óÇ¢‰<êï$,94`²¡ìòÂzpÒY. µoPÇ™Z:Èé^XhîöEhÀƒ€†0©rnƒ×~èÀßx³»g" c¼g�¹õC+ž•R½–÷É?i£¹s}Ñfæý¸7>\·2†üNÃXÅìqî”e¾Ð×võsè}ÆÐ/V1U¾9a¥à®^…ZyCh«™ÝË5ø“ð“ûô¢_‹%ÍE€ð�uŸ]U¹óó´�*k©¢!3 \.o–6ø÷zxøùÙytÉ €x²Ð åœè æYy~pÜ-$­E@<™o•+Gm†ýÀvÛG«¡Z,`ÇàKûvÏÒ0€q¼‹J‘fQk-u«(µ‚‚."*8HAýY²Î’,�lîB^I£ÒÏç]¦Ž¢}Iíó›³>ÿ ·ºyðpÒ;>ÅuÀ¯œµ.öŸ¶ö®:»‹€z£û|~ù¶ÑÂmÀ­·�÷Í×íÃN½úXitwî®{7ý6.û&g­Ý¼4?5?4G•DB_ûhöÞoñ¦`:ÔÀsmNõÄɨ"ÄòÝâ…ëj ¦®ì@DS&C Œæƒ˜y¬¥”Û®“aù³§Ž �¥kqnΦJ¹{f•Ã÷‚Ì]æ‰| e ?4 Q” n^!Ä }1û”#¹{œø•¤Šˆ\Ä ÕYû¹)‘„ŸŸñbïBîÇ c©E‡¼«w<³X A`xŽì�mG§”ZBªKLÃô’%ˆ�x¶íÊÉ{þñþµc2UÂù°D¾ŒŸ—]Š4éNIEND®B`‚pydantic-pydantic-e28e879/docs/logos/github_logo.png000066400000000000000000000152701526274674700226270ustar00rootroot00000000000000‰PNG  IHDRæ$È¥PLTE#" % "##"#####"##$#"###""##"#### ##$##"##!"#"#"##"#####D56tRNSûô çïyUĺˆÝìâø’+̘f06bD¯´ÈPÐ]!Øœ�§¢%YLn«…sjI:¿?ÔZë›®ŒIDATxÚì݉r¢@ÐæR�U£ xD]•x$¡ÿÿÓ6U[[µÙ5 f€ž¡ßX LŸ@}t¢Ø[Þ`3n;}ßo~ÐðƒÖüàû}§=Þ ^[¡G`ª°¢ÙÑK.i€¹é%ñŽ»È&©e®Çi¿IOÇë0^“Ç2Þ…ê¦×~FÜÓ¢çèX-MögEQ¸škXm¾ñ³€cç]t,•~yÝñ£€#ö +¡¥›£„*§õ+6_Ç&° D­KIè¶[°2™qï’ÒHl>”ÄMt$H�øDP8k1Ñ�,ÍÙs¡@�7ÉsöÏÀ `�þïÿsð»@´Ù˜È‘?›îaL˜'¯�Ò  aû(©iÈ¡áwE’!_VÝ„ß`Úm”^Ÿêx*!ð89�ß0‘%èËbËc;EÅLm`™‹Ÿ¨ χ�,Œ½„A6�ËÂ{ž=©Ã¾{t�o�[,·‰ŠÓ{\+úŠ¥ö¿Ÿo�Û,·—Ÿ_×-åþkºüÍ<*{òÿJãì�8ÅúÉ©¡ß†¬©éØrƒ5–Ô½Ld¶jsô¿Nwk=W´ó±öüú^&È>´ë9lnºRõù©ëBýœkú}%B½žJý>" j•<›í¥ QŸQk€ìŠCMJD¶";â5CPßR�VÿâL”Ï Úµªúæ×Ü‚Ê ~ûßuP8ræ7ƒï (—cÿL4T´”`½ ÓP΢æuß|tÕBë€,—�RgÁˆO¹ù ­–ØòãÿÝ(ÂCö��íb>ý?ÌQ`ˆì\»‘‘Ò'…BNþ|‹Ö™™+d5Ž—•ÏCsiKÄ7~ Ñ�´côÄÑ¿ ú$ÄÇ?q4 gÉ]dõ@.f­g~‹0–*°8û'ÜT¢¬à‹’›>«æK3CúÎ�¿…$Y(òÎá_At)vŽïxê»0] æmÿ ¤-€¸_ÿBiÄÛ„ŽÈ ¶ÂZÈ GxŸ _ÿR�Z#+ÅHâæß›”/ ½"»AùsÀ²‘ëåø¯do@ÊYÉHe„8ÿ[>�Ð6¡_ÿ hdZEc®ÿU¢{¸þ_�D‡È÷ÿT& °KÈâåò+ï5•ûп\¦TkŒ¬RxÕáA…Bd•;BeNœ"@›AE"N� GP‰ï ¢Ñ� ¼ÿ…Œ¾ åK�‘‘@éöÈ9BÉÎ\$E{‡R=óþObJ>òrÊÃÿ"h ¥Ù"#h·pPyw2‚Ü¢¼Ÿ”�W’u€Œ�‘µ€Â½è(ˆèµÂp¶^“‹_¿Â²Þüþí̶C7™¢Í%mŠ‚èüÅŽzN]î½íÚ/ðÉÅpàKÔv@oà?Fì*蓷ᵫ$ƒãg E9ÁUÆ.QwÐ Hl®2tC;C� EiÀ×╊÷@c=,#¶ò¯Üb{Öp‹¹;¨UnìNl¸é„¢¬à3¢)àî°ö)ª¢?2àžŠbCA–M&… â± GBms† z(J³Åh£8¯�ɳ Ü^2‰Q˜ |Fq Ì22C™K~hBVMf °'€v}”Sº¨¨ÆXðÑÐ rÙÉ8ƒ<_<ò„%Û%¼C‘lÈ)–­ ­‚œ, Å9�`ÆH3 ·™L_¢ò·6Z’Mýbï¾¶›‚0�V’Kp�{w\p018åÿG#8@‘lËÚY�Ã|W\Á9D‘v§^æ1�£x)ÇÁj!È|ØîЬêÁª2�%è\¥Д}:Ë6Ý“EÁ¬šÐ™Â²øñrJgò=X4#‘Ià!�ívÉZ=:_ Ï$Γ¾mÀª'JcRA*ùÜ¢õ0º[·Ÿ•º~þÃònXj-jy¤Rí :h5æ"cÀ?µ)• `�P~6Z¯¾ÝlzsŸóëÝÁ—¯ÛåpœCB^;¤TŠØžÀ²¥T¿ÃiªWëmg×ôéÁüñæÓ²TÃi®º”Ò-þ� *øMÎuPÁAÞӰܿɿ[,¬Çåû”ž�U‹@ä ð)½à“‡hæªýõ> ëê›O£ bŒê¢*nmžç–ÕÈŠÞ,âg_žÌ‰S8(ŒªøW®HV,a—©KKÙ=œx•îr¢^|[Â~J»²´;Û²y…½ÚòK�Üòw«öj²eÛºGA|'{:Æ” =ÊFX¼naÒÒ®Àƒ¸+à³ YäS¶B²(÷Ÿ,`_“TŒl[\è“:|uós°/O*ά«ÒöÁ/H1¤ƒ8vŒúy0“r¹�»ê [_"Ű‚›¡c|jÀá3)§+XL(k!P›ÔñŠ¡×÷/‘õªÊ{2^+ü¢@œ y°¥3„¿‰x!ýx!áPÆoúĹ”[A/lI¹~ò¾€B0}0<lÅa~\®IÅ™€I.��|±$å~C‡’© Ê匴¾Pp©Hy5�Ñ2¾"%1Ÿ©tÙ@þ1Ò÷xOZ[À‡´Ÿ^¢ÂF RqFˆà> [÷-óé] |¼zöQà]R1ª`´¥UÄ>Ìøâ…àT „¬…*�ŠÖ«w@ ¦ ¿ðß»ˆ¦eÁ‘.$ °×Íü.ºgH¥¸r—cúÜnIEª�—ñSç厳ÿ¦àÖI‹ÐŠ€(—P �äØDM�HX'VÂÖüøyÚ i vå# 4È,ôÀ.—ýgHCA)Â@ü#c†p!G*Å^VƤ°ß€=RÙ|}~ª)ð­]ÒX´¹¼cÀ5E©�ŸÑ „ªÜÊ A™//øot`×L¼D›ÂN"tWï;ß² 6t_˜��@)Y1˜ö…»ÕõÀÌY\?*z8Ñ5¸ ²¸}ìH¥\×ÇØ 2·!)2¤å}w^n�9)9çÀðÔŽ m ÎÄ#˜m\;Ì”” ´àêä#€¶‚X&cRÓ˜Þð=ðÊkGxBC°òü£©`}$tY¯€�ÓÙFçK¶=) e ‰]J³h‰þfÀÊÓ:À3\�SþÄï�. OærŠÄ›ôª^�¤ÄMŒè»›ûDJ^eÈÒ]è;©WR6·Ìè�À§†Þ%ƃ½àøžÝ™­pê;j/§ì'·÷µ„TI‰Ø>2FÇ‚foFWŽâ€Rç øú圌ÖÿKÊ×yì{FïRÜ€ÑÆISXŸ”ÐU’zñœ4˜Ê |Ö.Á RRÇ´\\Ú¤¤N 1´7G$Ý#k¹nÝÁ”bmÜ#ôÈ¿)²FJî�~ì1C£bôÁ§ß� 3!¤h‚Çë¯ç H¥dÀfýèP”Øö`cž”䚀�»'àŠTZð鯿5(Æ|6ña� *E|¾Ç4k X|¶‡“ÁºR„<ج#;Ãõ(Ë lJD´�”èIOÑ+k5$ÊlrDF3Ré•Á‡y]ì)Ù‘ it P“Á’tÀ§KDÒ®09Šà3ˆûÛu8˜ð)RŒ¶¤~°w'ZiQ€ÿH�…qßP\éÿþ�V[º¡IÐ;s#÷{€ö�cfîª{pôT™Äæƒ*òB9�Éo +ÓdD9ËE§v4RN/1dÙ`Uú”só.Ðl@¡!åŒÑàûè3¢œj\f¯uF”SKN6[@“9å pAAû0º#�hó ëòL9M´˜ÌvªqG9b&°¶MŽ)§•t,¬ËåÄ™À B49¤œ] jÀlï‘rB4�ÙÞå`2¨G�‚@IŒîºÔ…QÝÄ.BJ²QñÊ7ˆ†ˆ™ÈšCõ8¥œ"JêÃl­M9QÊ¿nSâ (§�&“Ù¶-:ÔÄXM˜"# ºÀ7&±|°ÇtŠSJÃl뉂˜ð#Khò@A54˜ÈfĨqIA Ì()°P îò×ÉçË"AŠ´)èWLa«ãu(SÒ>êLaÝ�: )©Š{¦±²Pö(é gLf ”¨RÒ4-Îd5AZÜPÒæ”U‚ÙÊ„’æRÖFëÒ°7}t(ëFë|˜EÉV@Q70Û8£¤@ÄdÖ B�’Úi{ í¨E�’&Ž(ëFípœ¶žÜn�Jô)ª NY×0:—Ç¿©¦uŸ[,P‰Šú’=�ÆJ¼kSÔWC {‚ÙÔ-eõœð#»(qHY¥´Í¤v ÐᚢZ@j$È.D5É>eV¶‰Ex“Ýx`UA¾Õ)«¾*Ö`c"üPÖtÕR*kßD1ÃÙï@kõêžÂ*ø)¤°ÐRÂúšÂÞ´V~i¬?ȧJ@Y“Œhƒ}ü;¤°,T)­[�QVþæqåF « YW�Ag¸u(n£j2Èr|&¦¸!Œ®R€³t¯ÌbûÃÖQˆeqï×yô(.¶PÀ𯔶Ÿ§òÐê‚ò+Ø�Ó|³(­Ch-ÅèzW§Q(ï&¿JHi]üõ�lƒX~™ òÓ ×,B{ zQnS\/gÿ‰%ò+Æ|à_¦ø«OF0zþðÿhÑ�#ÿ»B‹Ö*=°yA.•"Ê›å-?µ‡@E{��ùÏ p«Ó�ü«Ð…¦M�Ïá’tËk/'´%R+aITj·Î�;0+ èÂÕú3©­W§+{0i:1Ýá½rHGZÖ-žªA7b�ÿ7ù “¬JGfY(y0Iæ9Üx=™u Ë9‰èÊ9Dt&>‡y¯<¡+M$9 ;ëñùó¿B’g®dÕAKŠyLÝáPŽ™‹­]V„¡ËZ[Í%µÌ°„y—î\"Ù”N�ÁüÖ�éÐ1’•ºt)°ðÛmD‡ÂÒ†�H; ÿýsŒ4Ot+˜Â8ÿýóËæ£IíèGt*¨ U�®Õ±ë^Zt«¨ù¼éa·‡tì,{8©s³�kÝ2ѽÚˆôèÜ ?éˆ-D»Ú7^y¥{ÇÈR éA÷»hÔ¦{q *ò\î`zø¾K�íŽ~4wmËüɽ˜c…ˆ~»xŽèE[ã½ô—×Ý©+]Ò“ï» 3„õ ܵéË­‚=NwáAؙћ†¢î´dŸ½w´üÒŸ=,QP¸kß�»&=Š´†'—4?o÷è¨F¯ö‘Ç�¾ >ç‰á˜ž�+YW¶Úéçû+0œÑ·†²!™ŸëÌ�èßò)ÅÜP5›­�ÿGóñ³$Êg*•‘Ó>×_?}í`¡Üß«…Ü^|u‹â;©FT¡Ž¼:×Ó<Ãóý6·÷:-ø«ð;{÷��8 „xÜ0Ó²¡$4'@BHhsÿ£m/dÁXB²f„¿ì{ûòcËÒhf3t�7€Ôæ(¤ÀI›7¯Öxæ»=¸¬DHÆ�¾n¥=8gÖnáõê5ޝ‚檌”t@@E@‚ÙUè;ÀÉlµCZ@ÄE�d?A%â—¢‘ûÊÉ€�X¬åP²Šƒj4æ}êݦÇÓ‘Eÿ±‰Î±U‘Éz1*·KTëȃÑ3ÁŸ¾Üe|¯¡t�齡JñSŸÚ’`9½; ]‘‚*Â}ç’T+¬®G4ŠÈf£u5DÚV @f?xjæœûø´ŒÁ”ñ`õôè"}„UT�‡ï5P“Fµýe°ô!;þróÑÞ5�‹÷ fWµ}Ãá�h÷T|ÙŽA§ñvZy*ÚßK¥à�„5ŠéÎà‚e„Ú9}ÐiJeg_H1›öaÉ|3§z�& á�”Šz˜A²ž‹Z9#ЭÄ/E�¸(ªu©¦wã N�ˆÓX/uB$ÕP\¼‡DS<�I¿™g䥒ñÛµTSdN¨«ÈIÁ˺ƒõƒgf0Za q›ì`øµèG(£@¯ŽŸ°›I9@>bcìcHpïâ1~ èï��\e"™€ U¬¨¼ê„ylöá:”óèe½ èƒbôÚ©ÉØ›Zñ!AP@Õ& ¥®ºR†p­Jª\üÑJº -ràtàjs”4Êò%P…4nn3à®×tQŽÛúWõ×¼ÞÞ# �gV.uIf»`² øü% St!à;€ª„ÔM@��–O³¥‹ÊD`ù½€-(2DIî2›í ˜°FÚ ÊÌEIål¾îÁ„%’ŽA™Š–³h/F5 ›fJ ÞA¿Ž’œ{8¯ã"ë)´ïHØ€Äùç£À%dY3HívÞ[PêIÏ¥¤•ùïk¾ ؆œ†MHP#²ßi[uàï Û¶=Þ É“ñ’‡$Dç«\¶�?Œoà«æ`ŠGõŽÀÔ‡()ö!É‘ O‹> hÐ×õEZáº0ßYýŒ8bü< Q©eþÈKÎ)z=f¡®o’mĨˆÈ„¥óMøƒHÞ�%$ ª׀ߴ�žh3—ÿ¼äÃeuLx+hú‘¾óºÙŽK5à¿ÌO�ø¬î�F{�åÉ%‰x9o=gqM€³­j(©—j¤Z…Dë&H²µYÀôò'Zo(x«:¦åÎ7`Üiéú —üþÒy}pRM()‘(Cì;ðt)>�‡Þ¤|T[˜À)WöTæˆHÊ8ƒÀ· @zÞk­ìâ õyq@â§ÿ©ã dÁ;dT£Öܩͫån½^ï–«oíÕèžÔßþJÝBdbé2+ÜÑ©Žd¸ÈÈ ‰*5HL84Ù!e¢sCð²ãKåÞá8ûë2³¡&>dhRÏè%Æ‹$ g�©�“?~ 0Z¤GžÙ[1C°ÎIx‡Ì=q«ÞùÅÊ, {~™üJå+PöÁ€ Nð´ò"Ph‚r-_¾£ÀÉ.Ý2Bq1½í|î(�1EBEë)Ù€ Ô¾ùe€ñ,@‰ÿÿ,"ú·€t~ :6% ŠFu�/©‚ø¶`6u“ôg‰¼€-Œ Aâp¥²iíø�Ep‰”ØH� �¿¼ØÀy"¤æéư�D–€i¹7îÁÂàu@oû˜‰;ĸ@}ÇG§Æ~% ÞíqU÷Ím™W€Ë%à ;ŠG+ÖO3x‚j(©Q#±ŸÁ(DË«k(m×€§2^t+ÿë:>¶úM`(Unàù¯d‚¡] ÁrTœO^Aû\ÿýõ�׊†ëRLJ$^g³j?Ä-¹z(î ÷ýw¬ï  …òâ¹Ø z÷³Ÿ:½ýæå£Ò^ìb—JA\úØ»ÿó¿RºØPi¢_ø ȵð›ND2 €Óö!&É ­U:&È +ds³²9ÁóòH*ÜA/b<7ÜH� «}2Žgä�³ãvdöŒ§å�2äwjþî`ú ˆeoÿŸ· ñÛ0AýZ}`iã yD5Ø|þ Œ‚²¦6V&3૆ŸåôÀmùìK �Ù€žFu |æö¼ˆëÜPýp_€½q�丹ësü—eˆ1¥¾@ ¯ ü�-úà/þÑ|Ä?ò¤¹ü¯†‡¿åH¥Êõ¢Ä9/!³¤HROœ Xç÷phËPG "¶›¿‰V-ü&ÀEo¶¬þ?ëL1À¡›?çømüÅš‹2*¶cUú%lPÈpk«¿cÁ<Ày];ö~“m"›P@uZÖÿüòÚø� ÝòÕ | ?ÿŸ¶q;Û&¦åWKÐ@5ªœ ¿dôºvôËP€ÂnÏ´‘à—…m'?ém�1ì;âÕ-è˜+é¾ÌþÎÌ×öîv7A ð© ‚’¢øÁÌŒA·eç–œû¿´ýØ–ìC]-}Ÿ+ éK›ö4§•íÉfÏîˆiW ?ªœ]lôµéWñfÏÖÿ²ÉÂÖ†´|iÜlec¼„àK67µonÌ·é™ÿTB½iSÄBƒÿ4ã=¾Á–Ú%¸<ñhpü¹ÉØŠ0ü—¸iØãل᧺g�.@lm+ú•ç.¥IÛÀˆÕÅ~5Ï¡9W V5˜vû¾o­ÒaH»ø«‘/Ø÷—² X�èS»ö¬bnã…�ªœ£ä ©eO !=Ø[ð¯è” Í›…å|Ýx„¥¿‚µ/ùŠ9µnÆ×„AsÓ@O‡rú?Ó&~Áçˆ{Ò€ò9q®Å×uEºóø·(#-8þc˜ô ê•m?OUõ©¨.#þ®ðqâ×7È?3}­–W' cþ wØô5©÷š¥:þ`îì§ç} “w7T/[Vb¦IEND®B`‚pydantic-pydantic-e28e879/docs/logos/google_logo.png000066400000000000000000000234651526274674700226260ustar00rootroot00000000000000‰PNG  IHDRôÿ–Ïß{ýPLTEƒ®øT�õ�¶ùV’õw¨øÝØËúοçÔÉúÊ¿îbVùÅ»î_Sõ¦ ´Ü˳޿õ¦ ëL?ìUHìQDP´j—Ò§¯Ý»‘Т÷±«ÀÝåìPCc¼{•Ò¥ö­§îdY^ºwðukÉ“§Ù´÷¶±F°bV’öí]Qk¿�üÊ8üÎHó�†ö®¨JŠõð|r�Ï �¿úíXKüÇ0ïk`ô—�ô˜�žÖ¬üÃA®_þã•´ÏûA®^PŽöí]Qm¡÷xÅ�€­øñƒz­Üº�Õ¬ó’‹ô�–;«XS¶nüÌ@oÂ…”ºùô›”¢Ãú±Þ½öª£G±cW·qðwlýÙpõ¥ž±Þ½IŠõK²fîeZñ‚yóކþ߆ô™‘£Äú­Üº³ÎüëJ<üÉ6g�÷ïqgýÓ[s¥÷òˆŒµøýÛy¡Âú›¿ùôŠüÅ#üÆ+ýÓUa¼yý×hxÅ�þã”þé­d›ökÀ‚uĉðtj}«øðwlzÆ�ýÛw‰Í›ò‡~�É”üÓ[ Ö¯˜Ó¨ïk`ýÐNjÀ€t¥÷†±ø£Ø±üÆ*N³iïk`ñ~uÈ“zÆ�޶ùðuloÁ…óކôŸ—þâ“þã–þæ ^—öðsheœ÷�É”ˆÌšþà‰Š²4þäšZ¸sþë²Z¸t_»xñ|r¢Ãú‘ТÏÅGêC54¨SB…ôû¼êD6>‚ô5¨T9ôû¸;€ôê@2é4%1§Q+¤Ké2#ê>0%¢Fû»ê<.é:,4|ôÿ¾ûº(£Iè0!é7)1zó/¦OûµC†ô,¥Mé9*"¡DC�ÿ  B'£H#¡Eè-è4:6~ôýËé6'2¬?¦\é;8.¦NëG9=¬[3«EŸ@"¦ZüÁ:ªVýÅB„ù-xô3©Lü¿.¨Uÿ¿)§Wý¼Cƒÿ=“²öš:˜œìQ/ðj%òy>�Ç6£jùª ?‹Ùî\(@ˆæ8œˆ7 yHªKV«Bg­?Ù¹ç» ú´4¦[x¯8—²,¸¶É·ñº¨´%ü¶Ã!¤tRNS]û(×  Õ×6 Aþëñàoa-øÀUNÑɰ?'%ëâݨܴx^õ¬xeæäÅpK@þò@ûí宜�ˆZ9*÷ÕΟuW4-!ôÏ›”l5þåßšƒhdXN%öÓº¹¬¡�sL@þúí´°¢•J#ÐÂ¥£™�‹„{m^I1ÑĶ´„dõﺣ“{nĹ‹{w7.ÕÍÇŒˆSý^Û6åÙ»s‰Ô!T~#CIDATxÚì�¿k"Aǧ2^¤ Â×÷¾oÞ{ã ›(^NF#§5»¿w½¸m·kGÚíÛÛÅõ»ûûÙ¬U�.KdžÒåèbÖÜnÛwûyÇóÝ8&SJÅ7(¥˜�8ŽßÌî6Ûasu‘è�€ŒQ¼,·vÛöÃÜ b,B¡x¤´”ÉOŠú ‘†Ÿ~%µb\Š�bxó‡övת\`eJ`³ Z ·»t qŸ:å]× #mFˆÿ •L¹û!èž&£DqÅåÑÅM…J®Ý겂€48[Ý¡6Zñ#„Pi÷¦uÝ¿Rìßvh$ÍÌê¿@°TÂk÷a6÷”‡ç1WQü T±ø|åüó(­Ö®b!·Lµ1„ûÉŒ†ƒ�ij¶�ÿ B5Ãó¸ûIôÛ�ŒL;�Ÿ†`Ò¿uð4.{]Â5Î>й7�åŸÂh;yhøùìÉÅ<ÃÕ&ŒßÿByèŒçõŸŠºH{C�ýúµ˜ë\ùwUÒÂèýô×1“8ªµ¿€“ûowó)ù‚#, /ÿ‹ä„å£zû“ìš» Hò?HŽ£¿­JY&ù²`k©µ÷»‚ettú¯uznQÖo)vJþÅÚ»¶Í] ÍÀªúíwÖÎÜ©Uw¢.ªÚF3ÿ¢ù`…l¡~K–šùÌDÍ’†|Ïc$ÿVÇ7-(è*kikÍþûάêæþо»â6´ÙO*讚(Ï8]™‡…Ç”Ñ:ÇÁ^\ºÍ?½õP>)?p8§ýiÃ"ªåòfD3>@˜?2…¹j¡¼QY+póÇ·èè4gƒö•Ï!̇H¶ÏS=Wšbnþ„!LœŸÃ›3çЂ{šµs’â›1tÚŸ‡ó<¤ø³6ôcNJñW3”uœ´]OlÆËMÆSü †¨§Bäáá Ê0S¡0p"„~ðú(«T"HíÏ‚ÅY5ö Rû3!JN3¹[qO84džoì|�Á­É©R ùó!”ϳ¶>÷fmÅ=ÔÿÁÜ¿@Y¢Ü;O£œËÒ†tÿ ì<K”f1Ã@ ­6(¼ÓPÂ¥ y- =ÙÂFÃ5ͱ[÷ ™Ni –4!ôP5ý;©ÎöP¶§ Á\³ì•ÆÐ?Gmƒ¿;*QœqÜXôÿGè”.®ßºŒ‡˜X§ùJ»E(‹Èùu¿„þgX%ŒQbSO¡z`è® Áú S§€þ/çº4&Öø9B]#Ok ~Úãz Šã¶Ë™ÀĆžL½Ø8>ùù²Ž^ŽÊ²! ü•±y§5‚wkã"zYJãuÌtþýÎ�[Š#”1ﺂ^g0õühφæè�i§5""Öi¾ž-V®}®0ÉqnGebVr'‚É·½zMê×ÁAa’[Í {£*wBÉW¯ÿ¶I=‰vMrª9ZF%w‚™2Aò#•i|IýU Jî+Þ™™óøl¹-8%yëÉ$T�Ù~%Dr÷�Y/Ï^TÃ$g¹͸)mBxcÜ+6Ŧ÷Ôª2£ù$ˆÌtBë:È@ê·‚Q’?G¨fÈš;‘¼ÓC†ò‘½3y�"ˆÂx¹�qÅåäAÄà4 ¢¨(xAEp÷B"xðàÁ‹((â‚ "xhÒ/¤Ó=ÌBÓæ4“ H.a¹‰ âÕ³3::¶fÊQkª^u½ßŸÐõê}ï½z½t®WÝw6Xê¢y×ËDüÉ:¥âqŸ³D'ŠàÙ`.ò¿‰/Xæ š³c‹–ç"ËÙ'¡ã‚›äÝçÚh¾b!‚· �õæ¢Là~eé†d tÏá;[´T–—z„§ÃeNW2šÇv Yd‚ ÈoóŸÙ4LV©)vj£yB}-òÉå˜F,è,¦@ßûœ±MyÅYXÞ)´Þ¼ 3»’YÐpN¦ÎœEŠç_!åuÎcÚ±+“MïsÆ.x–R`ÔëBoÔ&cíÂÆÅ:ÝçU»6¦¸£št�1=©ýH4ë±|£K©]+¹X£¬ý¯mÌXÊ€Bþ &E¸æËæuòç56*LÝa4µ†éϦ¬^çœ-ͤ,U€ç®eq`ºÑ.¼Ã�Á˜¾i»Îì+©ë´x§´è£ÆŽŽîO¥7ŠT÷¶kãÂ¥Êø‡7jTHs5$ºÃJùŠUR±(uû F¨à¸ïÛãå�ïd‡x°Ò\‰U¡]¥l¿—­º×©ÕÀDœxéûv�JåŠ[²$âÑ9WÆžÐþÆxùí;y;x‹)‡SE¯ïØ?Tÿ,Í»A0¦á”L\¸Ú ÊUï&%ÄÕd²e±¢êÝ@Bˆ‡|Šj¯ê¸ÚªÞ­ý!²…ÃŒPEßæÈA—ãÝ ìb„29éˆâuïÖÖ‹ÜâMF(cæµÈA—äÝ‚³Œ�§;åÏí ñàuj>§9{"i\Ô»•Úâ!é’AWÉÛ±›P)¿mKß ²£ñŽÒ–s‘ƒ.Å»¹EJÜ•ÒwÕ±9T½›øÑ �’8µÜŠúµ&Þ „&q‹ïŒ2�Z#�‡xï—*îjé�¦qí÷n� t}˜8i\´ïöÆDp�J™Mã8ÞMPß ¼St¡+æ’ÏKãÄ{7Ȩ�ªš;¡Í'ÚwàÖî3B-¯¢ÓònV‰Jîúmª¶Ý»A–ÜšrÝ܃.Þ»�2B-|“.¾ïÁ" îÊé™\s~ˆ+Y@™»¶Ì‰ŽÌ´Ý»yË¡š¶oÿ=eûÃ?©£‹©,£^ V|ßÍ tÛóGxÑ]¼wƒ`¶öÃbÀKNtîÝ ›!‹Ž€ne†O¹ò—ïÝ ØÅåp*3âûn�½–êÅ”^NÝ]¼wK^`„z8u÷V½[Ë£0Jµ8¬âôÖûnЊ]óÈ®aàÉæÿýÛ:*Z°k�d×0À™™îÝÜ"=hAÁÇA¥…™IðæÒAÇ@ß]Žè‚Ësn@·mß@cÝèøé E\é�ÑŠ7tÐñÃyÍ$Ú»%é ã` ǰ ön®GK¤pP3lB);M¼$7t0×�´-–r³uTEz¯ˆƒN‡M¬wƒü)j¯á€s¥ î»�ºcá’Ðè}ÒU=›¡5RH8çØmá·ßÀ@°‘(HpÚªb½››?ÁpÚª‚ûn£‹È¯!á¸À+�¿JØ£)),ô8voÌL¦€~Ñ‚…ÓÑÅõÝ(�ç—.ˆŠýÕ»¹•ݱÐêÃÅÿ‹/P5 �9yœPïV¤·ÉhX͉îBûnÁ>F aUhË â\¡èŽ…§W[ þuF áö„oË í¼d¸H\~0Å$.Gó88W±­™±r°ß rS—4Zl’DÑE÷ÓG bäÈ~õ¸ht?Î�1cúP¿A äN²:3»åˆîlîcÈ0LôþዬNïf9¢‡w6L}ð<«s<-%yO‡·6L=÷¼‘¼KÝ··0l'úÊïéûj_Jòvã[8bšèCëöËMÞÃs ¦‰>Ð_Oß;äTÞÓÎ%†ÓDïÞ[Š”Syw^鿉>²Sjå=ìÆVƒ5RôuÇÖ4�‹y ÖDчŸýñ‡º1wéŠþݳ­–ãÒ�^†ãDZ7M¢cs®¢+¼›(úÀÀe‰³Rá†ãDïyÀ™y�ƒ°4c¢è¹‹œu‚I§–fL}è¼<›î§–fL=w†UyÉql± 0Sôágò¦"�Ó(÷š'znå|Þÿâ_�3QôÁm[e=iJ‡‡FÌ}èë@ìi^ãAXCE¹\«ÍH9éûªFŠÞ?¼^Ö…3ñŠaÄDÑ÷2ÖwMÆIw®!l¦›)zn'n&î•w#E_Λ&ßyÁPb è#Û¶rÇ"cýŒÍTѧN“Óoq&Hô/ì�±jA†Ç GÐܺ�p¨4!­¡BÂ" �$…»ãÊU —nö8v¯,*„]ß3øUŒµg·^wðÿ|¯ðqÜîÌìüZHÅ÷ß"ÒG: rŒÒ›Ó%Ö"Ò¯TŽPpJ÷S\l%¤k|ÒÄ*=ÞËH˜)�s ”ž:.'¹[é¥wVéÙŠÒKïœÒ/qdÒɈcKH&]&�Qú¹Iwlt ¬L:¾ÂÊrdøÊ¾tdž¯ìŸîØhç&ݱaÒ9¥[EŽ�vnµwÇF;—격\I@+]¨Ÿ®oÕ;³ôµMÎ�á+œÙŒ¾²iXdž¯lîݱá«ü —ÂW’J_Ø[6ÇF·Àd+ }c¯VõÏí}ºc#Ž?ÜDQn&­ôKÛ9ãØØýÊn—*¿øN)ý™=rå—äH¥ÚÆH.šxo»a�Ÿæ¶@\Ô ¥·§K`-ò¥+ÝH)ýg6Ù¡ü;£ôOŸÅ2\ŽTÞÙ¥÷yÿ¶"ÒŸn BéÝס\.›Æ|]Féi7,þË$0�IÚŒÒÓh V™êLé-Bé±ÂžÙûÒ‹¯¾Jo�ÊèªÃHãIŽPz7ÆžµˆômÐx’#”ÞgiçG# Ï`$”¾»�Ëv(¾&Ç(}* ^‡Õêà“Þ4Kì¹™�©ƒÆî*Ÿôì¡àÍôSWXžá“Þ}"qê<åF¨óI�‡HœåOr%ç­òIßýEBâeSbS뻩óI�z&õ{Ò‹¿©óIïÆèù–ﳕœïÀ'=^£gxœ‘^ö ŸôvŠWf2Ò7AÝH,�ôöq‰‘½3‰‡ (ƒNzš�=¾×a¤­K'=|Á+wO2Ò7a]ÐIßÝâ�?W¡áY[§�Nú {wÒâDø©=éÅQÅ ‡@ð₨(¨ˆ^D=ˆDqADEd‚‚ëI<¨¸â±jèJ&¡Û@L†�9i„�1ù nà j¬`ÒÓy´±ú§ëû EUõÛª­£Ð±ŠfÑío�ÁP™Í%‡§`ƒŽ#‹n¿ù𮺆ÊÌóû¦‰§P‰CÇq‚ÏwûÍ—×ÕÚU.ëwÍ'cè^W8½(=j¾ÕmûsÓaÙmsAó”ØG°èÉ è˜tï{ËþøÞi26Všš§[†Áj «%uÛþú¶:Á~*-ÍÓæ^å0t=¯lÛß'ª¬íÛ š‡È}‹ÏÚ \ nÑ[öèc§É¤âYÐ<¬ß@�10êq�‚mŽlýŠÔ&XGyÅÐ&;¹�bÑùI�MÏØö—×í5—ÆÊCª‰c¼äôHH¡ME¤æ8¬‹ÐŸrž®Õyð¬{èr@}¡MFjÕ&ë1žÞ šÛœ(E6·ºóZ¨ýFFjÝDíhÄWº”»Ý"òRW©1‡¹‰ì¶å ¹\OrÖAè!à£4RûTu˜‡ÚÐ\S¤f’ûfy©Û2R›LdtÔæ¶>FrºG#€\êj"5ÖGQ'à]â)ƒ#”:©Û­_5µ~2ófƒÖíÅé^�Á¤ß[od¤Ö�®µõZDrºóÔ py4ú\mM­?QÚ¯·z·ƒÅ鞌­—Y7óÊ"5á0ÔXMoõnG-N@¬ö8m*ê~üä4N”ô­ÞSa£Yô˜äøóg #5½Õý‹W N u &¹»ÆTXSÉ¢¾ÕI¿Ýåëþ“í0Õt?úRºÚo‰M6êÞgòA•55\víÐÚvæ NÀÚÖ5L¥‘®´ ´¶{§�Û ’šJ›ŒÔšUæ›ÈŽéɶh�®|2]aR®e“55¿Dm1h?]³8…Jtx9×0t?ú5ž]$Ú'ä•îiöjSeMMghüØlqòJ÷r&ÿl°5ì8ì¯�é°�,ÇSÆ.ðvnÔ`É‘šJd…gà�‘¬¹üs âJ~àîGýÿ×ÝîN@>;‚8ðì™âšN¼xÚÙå‘:'’̬›¦ßE¦‚(‹�ζ%RINÃHiðTlKv?ªQ[:ŒÿÞíçë’êü¢ ![)”Gjx>”ïМ erÏ¥ã¡:^ScU¦ŽH�‡°È:;j8‘\>Þ mÉššB"‘õͧRAÒqȨ ©)Q ݵ¾‹§8‘BýHا\ ‘~­‡,9ŸãTä鎻Ó0±Ç¢ªL=‘Ù ëõ:'S‰- ÍÊ!55‡A”Ùe�]ùŒù ñš»ç5wIÒƒ¤Ú}_|q®™ÕÈ+=‰×©A’‘â?ºvéÔ|kôfÒ„TYUÞ7ñGo žÃµ>Ù£Í)Œ E[I®_ã)ç¡8*Ê»zÿ7%H’íQŽö‡(Õ¼ù´PϳRÕ\ع=�ÛS(æéh~©Ú»ˆ®BÊõ—µî¼Lx ×z²g H’ñA[ì'·–:ßÂ15ИÑeéBª™æn%_ÊÓ¢9½?Ù¤ !KIrõ�ãÑË¥²–§¥¬íý ¦liC+ÁуsvÑ›Ú�s _aC‚ PÔKœ„·ÅK_Ë/óô4ß|îÛ¨ €*vnp`<][ùôùåë|˜Éę̀Ô÷rMb9Êü6~ߨl!¸òýãËwy*´æéÈR�m?!Õ¨ßaúXv˵º­"ˆàêê‡×”¦øÆ oþ)³ Cýgf1¼¡‹„ð¯¾$z³òí �)^+:Ý1Y‡l@’-E}”h"ªÚ‚ðwÕ?}¤QõÆà‘(ý°þÒM)¹˜3�¬›´v ²òæýKÒS¼VÚ¼LcF&xÔqzž±³šàµ4–a+´ºò5O¸êÍ›qž [Ô/k)8qž¡Ô?ŸÀ üzC:»i¥cÀCgLȱ•c¥ìÓ×rCÔö¯¹‚Þ“ÌnËÚO篌ÅÌß„$ ç®1PöÅÉ´aI¶×Ivcë¶E¸ÆÔÿ³ìé,åÓš‹ÉªíRr²ÙM+þy„À‡;ø?«z3”l¾0Š,ù¿+¹ìÖØš|<Áÿ$›hj�Ê,?q-¤z'û�Õ7ïß˜âµÆiïþ#ªÎ`Õ¡n)©³G÷à…hÕÆtA<»-—Oï]b¢Ýö/I±áÁëÓ€”‘ØÙ%Ë.K9•ìÖ8`ˬÉâPoÒ-9}扛‘ØdH²,©Ëˆ¹‚>¶;žcñÐý/%…Õª#(ÒÒÜ…ÁŽ÷xälYØ-ÇÐÊn…â0wjLÜ¢Ywš·ô\t|ß`Ö÷‘} Ñ% ã tA-»i�c`P2º¬ÿ¦*X©NMÆ6OÃÙûUEQTس�^­ÐÊ…£`P¦3ìt^Ö!ÉŠ¬.EïÄâ¥ñ±pò~U¶l½§YÎ¥ïÆàÕ‰ö"�ÉÜöÕÂ:ZÍFÆ‚}³±È|4T­(.ïnŠ_ýª ¢êZéÖ@3ë$—cÿKªX–,U—¢ÙðØb·ûÚMñ±Øã¹Ñ¥*T0î à´³ÛSí¤ÀA¦úm®$UÇX–ë¹ÑäÝ«c‹Á‘ÿÔzs|qìêÝäÜÃ\Z²dÅÒU—‚÷8ÅC§ïÆÕäÞ¯3ðõC7ÔŠl;¥¯ÔÓK¢sÉù»ãá½ckí ‡ÇïÎ'ç¢äªuY–[Ñ+}•Û=»y|(«5n�A‹±q%ºûQïÓÒ�šªVׂVœ?Ö±a9Åî|p3’Ýœ�û0pw-•êÿ!IªZ©èTTU•¼¯´{vó°ê§¹FÀ#á9åT½ÙwcóŠÔºF0Ø[片}7­è|ºFÄŒÄü Û<ËnÚòÓÀ�ˆÄãfŽ!žÝ™,Ä<ÆQõTúnNZÛÈ™3$Qu/²ûimíÉœØÌµ Ñw[všèD"¸õ«ß;“Å〰}L^�å Zí£ï¦•Ni1Èìí)nô‘Ý´’v�–Epó¦ïö²‡š?-4ܵy¸RÁ8Ô[v+4®:²×½6ô–ÝJ—A7D\gL/Ù­äœÊЭ‰ª{QõÕÝ,ìZiûQ@Ï–)~®O1¬»¾›V.œ4C¢êÞe7FOâþOˆª½3©J{mÓ)Vä[ÇÙ­±з/Åø×Nœè0»5n3ñûM&DÕÉe·ÒÆ-€ ¢êÞõÝܯÅk¥]G#&ª¢ê$²›ÐfL¤EÕŸÝ´¢v0DÌðƒÏnZ±p0e"%®Òx—ÝÚMñZy™±š0“§4ƒÌnÚSêqmL'L(Ži•Ý´rñ`P|Ê=·e7­\Þ˜<(ªîðê­’//×ÎíŒÖ€‘3¶¸Kãivc¿æŽ9qo®…'ÏQie¦kÀ$7£=î»iŧLîáÖ¸«‹™=ÌnÎ_\f0«ý%\ÇPð.»óÌ�É´ˈÀî„VÌ÷L�·¯k&$.ÉzÅÌL>£¦ØÄ{Iµƒ¿or�¬%6ñ}Cª9ÊØ/›t7^½Ö>!ݾ´ peo],ì}AÎÞ,>´ÅsD½CX^üÙ2§ˆ×*zfgö.�#q�¦×mû,/QíGR5ÑvëÒkÑÍ€[Á3†x¤¤[Ȳ’œmÛÿr‰£ø® h×Às±„x¥¤ H­%¸]Î[eÅ.¾SH1or¼œ¯±€Äå¹N§öÊyàSb?×ÑÔn̾1’•°h²ÿ²ŒK\5XþkoB´[]!ÉD<¼ºÚ|Ûb°¯ Éö”víÿ¸*ûz4`vøQð¬,û:­óÙð«ÈlMlãÛ s9ë�pÞÞ–IUеBr-ÁiµcÚ~C’!ŸõWPkgÓBÆwj~AŠ1å£óÓ—ñhø¯îJýß]Ô.ì ™â„IG÷�á1r'=ì¡)Æ,÷�ó.Í$%sˆ÷ñÍ™}Òÿ¸\Œ*ö�.íÍ={Ô�§®ˆ„,k—öæb>Ãjd!g ÛŽAÅH, Íž½�à|ÎTЕ)FúÚ.æ­¦ç3æÐ|ãŠd#“åçóãšž¬›ÊLòÊ&JÎáwÙk~/{³ä09L‡1ÿ5s¶jú{'¯˜(9¤)Í¥ìó)ìß²+fF”¼�øù„‚}xJ‡$l¤æÅZ¾ŽÍ !ËÔ}5Ü´wÿ®�ÃPÀo*�Üű9b0ݲ•ƒ w0B<„lþJ‡dð`R(„B YoɪE“oÓ ÂÖ*Ì�ÿœÓPn¼kïòÃNô™Œíí‹Þ{6ÆXK5üqñiâø!‘ç4ÓÑŸ<)Îùe¨ýXߎ«óØ”Çdó\ôîÛ‡M3—J�ºNK¶x²ÓÛ‡]oú¨ÞÙ2�1©Jæ¶®ÎýÛ�)†º#ZV³Õú‹õižÿ8f²{/QjYÕýÜÎëÿjZ„XG�� (gv·õÿܽ¹Bu¢½c¤¨û”¶âo×ç¯B‚nuî �Ä}Îó;ÄSð‚•‹J¥Q[ )±» ì´¾__ƒIÜ0IQë&Y“¼­í?„«»,l(€F-©ôJ û£{ÛÇhÚ{|ÕŒ#|ÚàMàTàÝÄ·Eýð¼ g$#èdLàeU»�£{»³~4ÿ)üN*É8::B¥âu¼}³]üèAÖ_@ù1š<ƈp È0œø¶‰ŸŽ—·»š1¥˜ ïÑ(îJ2ÆêݶHm?½«çMñÏx¥$PMÐ~bâ–¬j†ÉmMío‘ëA�OÂxŒ+£ûˆžS¦J ¼^$ÛÌ_ߨ¼ÛÉ™y¶MÜšh œ‚ ü÷n˜›¹ ”®‘I{9ɃµgãîgžúÅj™¸3Ì¥J©€æXhÍßi­…9ÃŒ ”Tæ"e�Ý84aûéÜNçäܤ‘ŸËe˜Äîb\7®… †&}‚pS×C×�“p¹œ¹¥ÏŽ]ÙçáÊñ¼ym6½Þè·^¯·ÙDQ4ðœëKúK6¥)â]¿§IEND®B`‚pydantic-pydantic-e28e879/docs/logos/hsbc_logo.png000066400000000000000000000031521526274674700222600ustar00rootroot00000000000000‰PNG  IHDR‰GtRNS@æØfIDATxÚìÁ�€ ý©©˜=8¦„6$à Ì¿�Àµ¯-pkù3£Tù¶W”:´Ò±m0 CQºÐÚÇ#¤Èß•†!ä|RG–¶ ªxÌùù•5,æläÌBÌ‘A œ +‚D1V 5È—S$œ¤ '‚)F‰Ј`ŸWÖY>Fq*r" ŒP�à4cD  Á®!GÖÝ=>q;r |òáC€»¦Yµz l¢J²' l²ˆž€°! X=aAP¥jÔ— A@µdK@XT§:·NÔ"Øïœ�jÔ� Aü¯ÉŽ€° ¨Fun#&p¢Á~Pƒ ><â³'‚ ú>/zúð àF ‚ýLzðœÔ¾o �*ÊïĈ òÇiÜ6 ÃP¥ äâ»—ðAi�⣡) ”>*þ¯´õ%£†¯ì¯�«wýÎ-#P'SìÓô¡ }¯º_m=z�‚ AbG5À»ôÇóر3Ö, t9)ºbé?€�q Aa€¬{G›Þ¡ ‰½¨ªf(pà·àö€C§m4‰žÕ€k´q4v�Ã[E–®&@S_C3qذé¦p@V€cŸûˆq£®ÌEŽïÖÇ ðt’VØ0kyX|ÜðõHçã»Ð(L€Ë'ì/˜ýmvÁÑøM—ýwÈ à!?0{ÀièÃ�e(xm¤Ï9ôžKB� ®;Ü3`“Ó5Р1€�öÜ%·è¢ù÷€CN€-k@||Ø ¨°…ˆãŸ^;|š(€©B �à ŒYNŒ™²ô�N€.¯Ež Р®¦,ΫgR€{²§#P#o N €ÀcÁ¯5à¬e È0.|ɯ›N€/¯…FÓŸ€Fu Øjúð)|‹ç6° úÙ–†2¼>¾Ø·rä†a¸Ô„Mêà~Ÿ€‚üOž¢ÒãW¦Èp [Œ6ä¶³å®SÀb÷‹Ð�mP–ïk>�: `ŸÙ3Ào�,]lƒªø¾òbí!>eùÊß05eŒÇÐχKû@]ÙŒÁSU¼° ÛŠuØšƒãÛð>"€kôeT†LŠø¶ŠèÂÞ†:ÿ6´/O& ’Ì ’zE`ëú‡_3%™°’L— hMXæjB[ÿ# ¬*ÖÙªx»"ðÀDc’YcR1uN}kÍ„µf:G`Ü�ö†e¶7ìËŒ œºcaݱÒîxL`{Ù¶0(Žê¤>Зy"pëîý•hìÒ,($÷ãI¿Kw/ ¨FTf5"«…€¾d'Ðk.Ó%&Ó5\ØMëØ»V{!�™NXgu±P¹ÿ%T&¦”¶÷(¥ßx:2¥ ¿M+¦–ëÛÔò±\ŸÙ¼ .Î öÓ9[ËBG6ÒX›˜Xkf�½±9‚ÎŒÊäÌèvlN�ŒÝúìmlM÷¨�›t@ OÖ …IDATxÚìÁ�€ ý©©`öî¬7‰( ãøƒ»m„RµÈ"jëB[ZºovqIÝ5n‰Æ%ïÐZøþ—´óÂ9g@ûü®É9„†‹9ofˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆèhè?åÈÉš §\;¹VJ¼›J£=i[ÛgбÈ);ÎL@k]\É¢é®'îùÕš2±œ�ÞŒXRDÇÔÄŠ‹W¡•Gn\EÓeO³y%¥a±d{�zã‹ùÜQŽ.ÕêÚ‰x¸Ñ+wÑ¡c ±áÈGÿa0 3úÖ:tAL0úÞêH˜ï;£èÌ '60úooŸ‡]v> #cž˜`ô}*¥™°¢o¿EG6ÅFße9¤è²ó¸ä‹Foen"œè•èÀŠbôV¼äT(ѽUt`U¬ÉçŽâ¹lmÅ¢Š;r¦<ïÚ–ñÄ’¶îÈõwäÔY4ŽwÑê§ msŸ¯hÛ ‹Û§&@»äУÆADDDDDDDDDÿ½ÂÍ!'n]BSvèt�ˆb·s–W_ƒÖUË?ÉP$­’¸’Ý;Ôü¢â”ÍÄ"”žíˆ]ó=0÷.=ržþ·»ŠótóPzR»b¢8ˆwÝmôIè<ªùb'gáU^9�.� ò ,V1úa*sn£_„Ê&£‡È›Œ:�>{ £U±‹ÑUžr] PˆÕÅ.F?TyÞmô<VËb£Ê¿u}òeÅ6F�uýõ+ñEÁYô‹âÊîèS½½~Ìmô/�û–ÎB낸’EÓ­^Š.1§Ñ«�;°($ôÑÓWÆÑt.ÒK†ñG<â@!0zn1b_–CôDDDDDDDDDÿšè¥¨Â8 Å5›Dµk©ÄË}ÿ�‰8dº°S·“ ƒÉ'4®Bátr@%™@ •䀉ä2P2\8—FD¥#÷·D# …3¢S.!ÐBYŒ$ÑZ¶&fæáRJT20rM= …›¢4‚@W £7¦ÐÒǪ˜I`/FWºé>ºÌ¡¥7>£w'ú‰¢{q´0Uã•ޥ虢ËK´ðÔFïFô²Ÿ !º- JÝ^ôÆBˆîÉ(ö“v0ºÅè©0¢‹¿Œ}æêÒF·ÝÛŠ„½±Š¿Eû½Kѽ;¡D¿`ü‡Ð£ÇDeFŠºè£Pè�úFÌ£7Ö±W¼!æŠpiú|LaiFÆ64›Ä& �Ùˆ)l<‚Ba#fji{å.ÆŒmŒ�ˆˆˆˆˆˆˆˆˆˆþY‹ gRY™nîâ\jjKßka¿ ¥ì¬7 —ò¢b~ÊšÊ:ÔFÊbE£ˆŸf<±£ˆ}þ×ót¼Á;P»R;ü,~ø¼#6©! ªt!z½ÆýªØÀèí©.¡Ñe b£·¥ò݉^PòÄ FoÇöøƒèƒ÷$XB÷Ôçë×%£·Á= ÑOöW} ’^Ô%ÐrI‚1zúá"z2}¼&�fP”@þÌ£ÛT™�ÀIôòŠèýã¨1� ÆèZÕÇ£pÝGf[]Ÿ÷:’¢Ð*úÿú$ #OÒh[ª,x¸-lï7Dã\:s£Oa6#‰Ù>Çf×Ï¡}·oôi|cï꓆¢0  Õ"4•V%ZEƒ¨(´Z­SÕ:]ŽKo< þÿK-*HËpšt‡X¿ç’Þ;NrRÄ£ë£'¸4ú#·P>©óS\zIf2¢!U†'SɈ°”àÕG u@C™”Χ@DDDDDDDDD‡E<3¥¡bÀ33%¬"põÚR•)÷"´Mé¤bBÒäbLÃâ<¹µ¶¸dbÿ.ëÍ5‡¶œ—«8Á3«u5ÓØ�K«ý O–óQßä/BÛšÞ\tó.&:‡Žòd^çË """""""""¢V81«!Q„'o:'™­@Ã|bVG¶ôŽ•Ac:1«ëÅWô(ç´~Š7ØíЮ²õUÚiôZ­*MÍV;‚µÊ¨õôƒ|i¾mЬ§·}¬YJ�½‰¶`­§Úèµ�rÑã�ëJOë%£û]}?'�J‹s¢Àè~F¿'½¨½uŒîcôj=#'·õî‚}ÍèÒÑ{Í F�jE·Ÿ™Œîoô;‚Ñ+×›:Ñs`t£_ŒŽ{¶­:Ïè>GÏKFÙR£m”ƒ=P;QÌAäÒS]:Ø�(z™M5’u ÐN·c3ήÁ“\Lç$3)hX�Íh‰½ÀHgôæJb¯G�]}Ïô�î¨4£�A5ìKôH]õáÜ£ûÏZ4|‰Ž÷MµWý£��½ ¢¿²,µ‡UdtÿYö[Ÿ¢�­½g_£ûÏÊB8ú°w=ÔÖ}®øý‚£vsÒC¢ox�€¿a¯òoØUô¸©¼IcˆµÛ= f*�– -Y:*¢´Ò³þp4 Êè‘ö8˜‰!®í>x)‰ÁŒe�³„@DDDDDDDDD4&ŒMiß�­ Ç–Ð5lb|²Ÿ¿`�Ò„7)ŒÎNürw ÃÅW'¼‰`•-(;Ôœ|½ÄvèÊ4[j‡åðvgÍ„ÑC|=½×iû×·ÑÆ›(|P]È`¬Ñ¯l«Ÿšv’Ñýò}_ôî­­M0ºOÒ{ô¨joïÎ辨eKÀø£Ÿße»Ìèòl;{Î@¢'몵 Fgoî$Dt\µ¬æFeÕZÖ“€ DOYöI0ºË®+uìePtdë/}]IAWÉRþؼõ&„}ˆ*oÒÐð­õ£”G Ð:%$‡®§§NKK䢷¯±O[§¼É@C$ ågYÑöà@ÈÿµTUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU¥=8äo=Ȱgï1E—üpÇIEND®B`‚pydantic-pydantic-e28e879/docs/logos/intel_logo.png000066400000000000000000000150441526274674700224570ustar00rootroot00000000000000‰PNG  IHDRôõ7TügAMA±� üa KiCCPsRGB IEC61966-2.1H‰�SgTSé=÷ÞôBKˆ€”KoR RB‹€Ti¢’¡„@숨Àˆ¢"‚qÀÑ�±"Š…A±÷y(ãà(6TÞÞ}³æ½7oö¯½ö9g�ïœ}>F`°Dš…ªdJòˆ<6.'w T �€@˜- ‰ô�àûñðìˆøàÍm@n؆á8üPÊä $ ¦‹ÄÙB¤2r22 ì¤t™%[€j;e’OvÒ$÷¶(S*@£@&ʉÐX—£‹°`(Ê‘ˆs°›`’¡Ì”`ï€�)d`¢ SöÀ�GEð3(Œ”¯xÒW\!ÎSð²d‹å’”Tn!´Ä\]¹x 87C¬PØ„ „é¹çeeÊÒÅ“3€FvD€Î÷ã9;¸:;Û8Ú:|µ¨ÿü‹ˆ�‹ÿ—?¯Â„ÓõEû³¼¬î¶ñ‹–´ e €Öý/šÉÕB€æ«_ÍÃáûñðT…Bæfg—››k+ m…©_õùŸ _õ³åûñðß׃ûŠ“Ê àƒ ³2²”r<[&Šq›?ñß.üówL‹'‹åb©PŒGKĹi ÎË’Š$ I–—Hÿ“‰³ì˜¼k`Õ~öB[P»Êì—. °è€%ìäwß‚©Ñ1ƒ“w0ù›ÿh Ù’€… •òœÉ€4P6hƒ>ƒØ€#¸€;x�̆Pˆ‚8XBH…L�C.,…UP%°¶Bì†Z¨‡F8-pθ×à<€^€ç0 o`A2ÂDXˆ6b€˜"Öˆ#ÂEf!~H0�Ä!‰H "E”ÈRd5R‚”#UÈ^¤ù9ŽœE.!=È=¤F~C> Ê@Ù¨j†Ú¡\Ô B£Ðùh ºÍG Ñ h%ZƒB›Ñ³èôÚ‹>GÇ0Àè3Äl0.ÆÃB±x,“c˱b¬«Á±6¬»�õb#Ø{‰À"à‚;!�0— $,",'”ªÍ„ Ba”ð™È$ê­‰nD>1–˜BÌ%+ˆuÄcÄóÄ[Äâ‰Ä!™“\H�¤8Ri ©”´“ÔD:Cê!õ“ÆÈd²6ÙšìA% È ry;ùù4ù:y€üŽB§P)þ”xŠ”R@© ¤œ¢\§ RÆ©jTSª5”*¢.¦–Qk©mÔ«Ôê8M�fNó EÑÒh«h•´FÚyÚCÚ+:�nDw¥‡Ó%ô•ôJúaúEzý=CƒaÅà1JÆÆ~ÆÆ=Æ+&“iÆôbÆ3Ì Ìzæ9æcæ;–Š­ _E¤²B¥Z¥YåºÊ Uªª©ª·êÕ|Õ Õ£ªWUGÔ¨jfj<5�ÚrµjµãjwÔÆÔYêê¡ê™ê¥êÕ/©i�5Ì4ü4D…û4Îiô³0–1‹Ç²V³jYçYlÛœÍg§±KØß±»Ù£šš34£5ó4«5Ojör0އÏÉà”qŽpns>LÑ›â=Ej¨kh¨4ÜkØm8ndn4רÀ¨Éè‘1͘kœl¼Å¸ÝxÔÄÀ$Äd©IƒÉ}Sª)×4Õt›i§é[3s³³µf-fCæZæ|ó|óó‡L O‹E57-I–\ËtË�–׬P+'«T«j««Ö¨µ³µÄz§uÏ4â4×iÒi5ÓîØ0l¼mrllúl9¶Á¶¶-¶/ìLìâí6ÙuÚ}¶w²Ï°¯µà á0Û¡À¡Íá7G+G¡cµãÍéÌéþÓWLo�þr†õ ñŒ]3î:±œBœÖ:µ;}rvq–;7:»˜¸$ºìp¹Ãesø¥Ü‹®DW×®'\ß»9»)ÜŽ¸ýênãžî~Ð}h¦ùLñÌÚ™ýF�½½³ðY‰³öÌêõ4ôxÖx>ñ2öyÕy z[z§yò~ácï#÷9æó–çÆ[Æ;ã‹ùøûvûiøÍõ«ò{ìoäŸâßà?à°$àL 10(pSà¾_ȯç�Îv™½lvG#(2¨*èI°U°<¸- ™²9äáÓ9Ò9-¡ÊÝú(Ìy‰¶ˆ†Åârñ`²GryòPŠGÊæ”áTÏÔŠÔ OR%y™˜¶;ímzhúþô‰Œ˜Œ¦LJfbæq©†4]Ú‘¥Ÿ•—Õ#³–Éz¹-ÚºhT$¯ËF²çg·*Ø ™¢Ki¡\£ìË™•S�ó.7:÷hžzž4¯k±Õâõ‹óýó¿]BX"\Ò¾Ôp骥}˼—í]Ž,OZÞ¾ÂxEáŠ�•+¬¢­J_õS�}AyÁëÕ1«Û õ Wö¯ XÓP¤R$/º³Ö}íîu„u’uÝ맯߾þs±¨ør‰}IEÉÇRaéåo¾©üfbCò†î2ç²]I¥ooòÜt \½<¿¼sÈææ-ø–â-¯·.Üz©bFÅîm´mÊm½•Á•­ÛM¶oÜþ±*µêVµOuÓÝëw¼Ý)Úy}—×®ÆÝz»KvØ#ÙswoÀÞæ³šŠ}¤}9ûžÖF×v~Ëý¶¾N§®¤îÓ~éþÞ:ê]êëê,k@” Ç]ûÎ÷»ÖF›Æ½Mœ¦’ÃpXyøÙ÷‰ßß>t¤ý(÷hã¦?ì8Æ:VÜŒ4/nmImém�kí9>ûx{›{Û±mÜÂðDõIÍ“e§h§ OMœÎ?=vFvfälÊÙþö…íÎÅž»ÙÞÑ}>èüÅ þÎuzwž¾èqñÄ%·KÇ/s/·\q¾ÒÜåÔuì'§ŸŽu;w7_u¹ÚzÍõZ[ÏÌžS×=¯Ÿ½á{ãÂMþÍ+·æÜê¹=÷öÝ; wzïŠîÝ˸÷ò~Îýñ+?R{TñX÷qÍÏ–?7õ:÷žìóíëzùäA¿°ÿù?²ÿñq ð)óiÅ Á`ý�ãЉaÿákÏæ=x.{>>Rô‹ú/;^X¼øáW¯_»FcG^Ê_NüVúJûÕþ×3^·�…�=~“ùfümñ;íwÞsßw~ˆù08žû‘ü±ò“å§¶ÏAŸNdNLü˜óüŒÅu¥ cHRMz&€„ú€èu0ê`:˜pœºQ<PLTEGpLrÉÿÿÿÆý©Øñ�ˆ]UtRNS@æØf pHYs  šœiTXtXML:com.adobe.xmp ÆeÑÁ ñIDATxœíÝÙzâ8a æýß8Ö\ I{—l\õ_ÌòuÚ8*Ë HI’$IÒgÈ¿þ¥«+)¥të½:ŸÑ�Œdt £Èè@F2:�Ñ�Œdt £Èè@F2:�Ñ�Œdt £Èè@F2:�Ñ�Œdt £Èè@F2:�Ñ�Œdt £Èè@F2:�Ñ�Œdt £Èè@F2:�Ñ�Œdt £Èè@F2:�Ñ�Œdt £Èè@F2:�Ñ�Œdt £Èè@F2:�Ñ�Œdt £Èè@F2:�Ñ�Œdt £Èè@F2:�Ñ�Œdt £Èè@F2:�Ñ�Œdt £Èè@F2:�Ñ�Œdt £Èè@F2:�Ñ�Œdt £Èè@F2:�Ñ�Œdt £Èè@F2:�Ñ�Œdt £Èè@F2:�Ñ�Œdt £Èè@F2:�Ñ�Œdt £Èè@F2:�Ñ�Œdt £Èè@F2:�Ñ�Œdt £Èè@Fú¯÷ (OÿQ9æ�é@»gúÜÖ2ì]¨NáL2:�Ñ�Œdt ‹^§ŸíûIœé@F2:�Ñ�Œdt £Èè@F2:�Ñ�Œdt £Èè@F2:�Ñ�Œ´ûnX߯ö¹œé@F2:�Ñ�Œdt £Èè@F2:�Ñ�Œdt °4t{í6ègÝÓ�ÒmH)ݾz¯Ë&ù׿b¸�¾V¿i`þt©ñ5ܹèS? «¼=âŽèë×uÓo5»&«Ãoû}6�íÒ¢7‡:?úÇôõ�qËóC:,üùáòò ä|?cMj„:¦ç[vîw„¿­|ä¡ã:®rÆL_w;Ý}í,î4•òšMòç‡�[‘za.Ùò†;-‡ó‡tsÅÈÙ£Dß8Dg�èžÇ‹{l�q"·}Zœ:‘v>X÷ÓÎ)!fú®±9m@ï�³z„è;Gæ¤Ýr²1ò·[­FKÎÞw�Ë)Zû wñýgzè�gÍ®ý%^õîÑ«†äèñœxŽ}£pÕ{Ÿ½WȱãYw8[N›Å4Ó}¦W:òZ¸]«`Õ;G¯�ß1ݲT¬êŸ>Ó�ζû�PÕ\²ÅÔêxþivEZ—}Ž™CÍÏ"½ØúùÑ�9—k¿w ´ƒï}ÉÖÀG�# Å©~�™~€9dìêv©‡çÝ�ë~Ë---ý<ìºgîœÐ>·¾¶wÃîWÒŸSž.¯À-ÿí2ò¿÷Åmo|¹çïöψ¾ú'GGmÅßþ÷Gªn+^ªw›¼ë=ö�ßÓËøX—Óe~7œËôÍ÷ea8ƒœË…9{ŸHžR–†²±ù·[”ÙMâkú×H)E9—‹2ÓgÇêki—|Ú š™åß?2÷‡1Îå‚Dô|ÕÜ´j5ý.b<÷¾8N'ïá'¬Ì9wâ¨þ)ƒyÚ{�[¼�0ÆN|Z„è všgœ mØmÏüh„© z‹c`³¹5½õlZÍØÇõ0—l‹ÎÇÉ­gãÃOÿx€«¶þ3=ö¤h/À¿ôÕÎØ:&�¸›<ò¶Üý’-òàT <�¯Ú?æN|þ=vlš“™ýêŸ}n�ÑæJè”ë©þõÞgï­öîýGòq\Ÿ4Óû‰Ûo£Ÿ¯ûAýŒ{äšíz'nY9Þ= )¥[JÃcš é6܆½«ÓýPÔù#7î8W?æ¾—MÚ¼3yY‹u­yèOcSݧàI:G§ s,½/ÙÔ�A€ŒÔý�Ï™ÞAïAïýøêÀ³w ƒȳ÷z?ùìL2:�gïô¾Ç @FCŒ€)ÖÏ×Ôiuã­¡÷w0Ô=rÝô®Ôe�V§÷…ucFò’m•î·ª7u� cvþZ“íóOKÞ]4úN;a›rÑ\fêíÛS_êTŽ7Óg7AÆp0~ËÕ¦÷Wšêž½¯û+Þ7¹F�Mfêí>ö/ÇÍŒ~Îye~ûg4={Ÿ5[bnªoø2‹×�†¬œéÖ&|û¹ˆ»ø«FŸ½9%ï~Vu]Á<ó\5ú¼a÷§?¬ù¡¿?®:õ’-ç<5ßçWwiw=öç9Ø�ïœùžï¿'÷äý3Oyzg0õ¡5¥×÷Ž ¶ †°ü¥z£Óý–g¾~;Ô.þ²·Küun�¥?¿!ô1ÁNZ!{òî}Òê æy€X•3Ð.ÞÝû˜cF%Ì.þºgï5óê ›)œÅçœs®]Ž3}ÔA{âÚžN +OXŒ>î˜ê•KÍ)•RJ)¹âIÅté\êFøˆêÕÍ__ß;”ÛÜ“ŠK<{ŸÒþš¯¾ùÏ•âÒ3H³®¼{s‰ôP¹:÷Ÿ 9}o{\9zå5Rãm¦vqσd)Ï}|Åò®{É–ªO&JÃì·úe•·ÿÊ)UlÓ—žéÕ³«YõÒôÊ?Wf»vô(Õ,æu‰–sεÏ]ø’-¥Ô zƒj°kÿó‹T.ðâ3½¾úWõµÙµ¿fN)õ¿Óå£×W¯\@ó Çš‹µ‡KŸ½?T�zÍY|Ã+€ïÔ·”Ó¯ëö­®?Ó[ üÞgçš^ô}ÿ×ãpQq¦DˆÞ`ð‡='t-“§ôõ3ÕKÊswê-z^ ´ý2¾ÃÔ<æ½ú˜M�¾þëW/öýμšæ§Do·yÔ,ikµ1«7œ²¡É–7K½¾0³ª9ëU¶R{Íüµ*Ñí¨O1)÷‰»¶7Ú?Ó?Ó÷`ÕìíÞsÜ«{%¥[ƒïÞÿ»tߨpØünª¤dtšߪ¬Œdt £Èè@F2:�Ñ�Œdt £Èè@F2:�Ñ�Œdt £Èè@F2:�Ñ�Œdt £Èè@F2:�Ñ�Œdt £Èè@F2:�Ñ�Œdt £Èè@F2:�Ñ�Œdt £Èè@F2:�Ñ�Œdt £Èè@F2:�Ñ�Œdt £Èè@F2:�Ñ�Œdt £Èè@F2:�Ñ�Œdt £Èè@F2:�Ñ�Œdt £Èè@F2:�Ñ�Œdt £Èè@F2:�Ñ�Œdt £Èè@F2:�Ñ�Œdt £Èè@F2:�Ñ�Œdt £Èè@F2:�Ñ�Œdt £Èè@F2:�Ñ�Œdt £Èè@F2:�Ñ�Œdt £Èè@F2:�Ñ�Œdt £Èè@F2:�Ñ�Œdt £Èè@F2º$I’$…õ?ý;2@qyJIEND®B`‚pydantic-pydantic-e28e879/docs/logos/intuit_logo.png000066400000000000000000000043671526274674700226660ustar00rootroot00000000000000‰PNG  IHDRôôü/¸ÿPLTE&iÿ#lÿ#mÿ$kÿ#lÿ"lÿ#lÿ#lÿ#lÿ"lÿ%iÿ#jÿ#lÿ#lÿ"kÿ&kÿ#mÿ#lÿ#lÿ#lÿ$lÿ$lÿ#lÿ"lÿ#lÿ#lÿ#lÿ#nÿ!jÿ#lÿ#lÿ"lÿ#mÿ"kÿ"mÿ#lÿ$lÿ#lÿoÿ#lÿ"mÿ"lÿ!nÿ"lÿ#lÿ"iÿ#lÿ"jÿ"mÿ"pÿ"mÿ"kÿfÿ!jÿ"kÿ"nÿ"lÿaÿ"kÿ#lÿ#lÿ$lÿUÿ\ÿ%gÿdÿ!gÿbÿYÿHÿ&xÿ%sÿ*€ÿUÿ#nÿ+ˆÿ#lÿ#mÿ"mÿ"kÿ$kÿ%pÿ&uÿ)‚ÿžŽýMtRNSõ[„ëñ”æÔÌ„(Ürmf©GÐȯD¿`.Ùœ�A·~wQ4×—!ýóâè‹g:ý_ðËLFíÜÛƒðÏ‰Øæ”ZIDATxÚìÁ�€ ý©©`öà@ÈÿµTUUUUUUUUUUUUUUUUUUUUUUUUUUUUUص»æ¤�0 Ã[,X°*(ê´C±”RTZ±_~ëŒÏ²Ùúÿ‹ãŒ¶æM–$Ú�ó\Ç,¼ì={Y"""""""""""""""¢bª´«ƒ³no¾U¾ýäô^kr4û8l(òÄZ}-J}M¥ÕvÞàc5žnÜyµÚlù«ª«›‚Cå¬)¨È+êÒx sT_¨S”¢à¤¢Òh¼ë>€ÄÛÓª{ó².åì!jꪞDBà>ç¢ßbOIÆpo–ò†§ê6¢•ÓD¾©5’Ì; ÇÍ,!·ÔU3¦ÊUý!¢�(É‘ëx;¹ÛÊ1úað.´~Ûz=€àQöè÷”dÃ9z7=(ѱÖL†Œ^øèµ•í7½ÐÑ�{XÝëŽÑ;žGÇO>Fƒ4ZuF/èI¯÷�–0züxëÙåýâ½FzŒ^Àèï¬Fa¯ÂèE‹hd´½ÆèÅŠ¾£‘•ùº`ô"EŸYd§ç F/Nôs«‘�¹üvƒÑwñ £;Eÿôù0]F/HôÆgƒ|;côbü#7Y"7¦ÏèEˆ> ‘3gôDo‡9²ŒîôƒKäI› F÷ýæLM#™�;½Ï辟ô,�Öhg÷~ÿYm6¾{‚dµ?£/c@¢—qêª�çÑMª=XÆ9M}Iö¦Çê7ÏFe$8P×4§ãuQ°/~r°.;+z´. ¶!èÆìÁx–2zÏ$|©®«ì–CÄ kj5DÓ›*V±¢Çۄ๊“.zß"†~s_øªVCî3úŠÑïBpç/D?²i;Iwáb¶Ýßè�’‘Ó½+Y㋆( Ýßè‘ÝQqš_ .Öóˆ~‹ÑÝ¢oZˆF*Þ«ÏZŒ¶Ý×èͲØmÙSI>]B4`t_£! ‡™®XuÝ×è· $c•¬²É6£û}$F//”ƒóKn/ÝÓè{è3åä¦úÏ£×]ˆîöðK›¶rrfÍvÝÏèÇØÊÍK#3ºŸÑ‡�œ)7•SD³F÷3z’ªrôØÑþyôŒî½JKšÊѹF$Óct?£? 3ÿʾ°Bõ£ûý>îÇ´mÀèÿEt=Q®ŽÁè?Ø»Û�4‚(Œã�m­Q[@Ñ¢ØEY(ŠøľhµImÎ0»Þÿ½4é7 °‘Y|þ°»™_NæËdg1Ð¥ ×:›D_ôOpmƒèDŸ#z–èD':щNt¢�èéD_':щþâèG/Ž^!:ѧ@_zCôÅ@�Î9é¯ý3\ëôˆž.tõHH®µ…è ‚^‡kY¢§ }G”vpì| Ã;!º zñÅÑÛ¢Õ…cgFù’*ÑýDWÏsØ +EÚ�n¢û‰¾UОs·Ž­‚]ÝOtuNMáN=>‰‚~AtOÑ«zü§îcuƒ º§èDÉÖáÒ—ØŠÒ1Ñ=E?4*Z íÅ¢”ÏÝSôÀjjöh¦?,HD÷¥�( ¶1® ‰ÖѽE/[Ѻ­aLUQ³—D÷}͈Z>ÀÈBQ‹vßÝ[ôΦè‚Ñ‹®Ÿ‚èÞ¢£‹Ò˜õ«‹žyúMt't;ô##Š´‰mý5¢g÷@t'ôøë<ÐQŒFªg²Ã6…²ŒÌnÝkôCSq Ϫ„=™É4ˆî†.óAodd\ùð]¶óßñº}Ð<‰"]ü¢;¢ŸÌoc+ãë-gJ¥›¼ÈXr±@tÏÑqŸðÕ‚ñ¢{�ÞJ½¢{�žðõ–›ÑS€Ž½X’kDOz�º AôT ã.1õÒ{¢§ç’Hö6Ñ'A/ÍW’@‘ì€èéAGYf϶@ô4¡£iŒÌ”íµ@ôt¡ã»�M=ßÑӆ޻YfÝ7@ôô¡£ÝŸš\ÊÑÓˆ„SšGk ú4èÐqY�I³&>Ë�èéEWMôâ_ÑS�Žn8�H\3ËÑÓŽ‡=Wõ›}àÕ¢\$t ³Ÿ‡Âu`QÐ [£— @í´ "Vy‘ˆTLÓU2èå)ÑW[«Ãjµ¡µT[Z%€k ý­Îå*;C[�`�à°¾)bžÑ[cÄÈ·f6‡)ëVV‡VÛÀ$ÊÔr`³µdÏÃjñf¹ß_Yé¯ì–ŽêÍßÝcŒ1ÆûÇù¿6‚ªªªªªªªªªªªªªªªªªªªªªªªªªªªªªÂù¿6‚ªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªª´‚ü­¡xDµÎ¤ú.­|IEND®B`‚pydantic-pydantic-e28e879/docs/logos/ipcc_logo.png000066400000000000000000000415051526274674700222630ustar00rootroot00000000000000‰PNG  IHDRÂÂKÆ9w–PLTES‘ÍL�ÊS‘ÌS‘ÌO�ËQ�ËP�ËS‘ÍR�ÌR�ÌS‘ÌS‘ÌS‘ÌQ�ÌS‘ÌS‘ÌR�ÌS‘ÌS‘ÍQ�ÌS‘ÌR�ÌR‘ÌR�ÌR�ÌS‘ÌR‘ÍR‘ÌS‘ÌQ�ÌR‘ÌQ�ÌR‘ÌR‘ÌS‘ÌR‘ÌR‘ÌR‘ÌR‘ÌR‘ÌR‘ÌR‘ÌR‘ÌR‘ÌP�ÌR‘ÌR‘ÌR‘ÌT’Í1zR1tRNSþû÷ Þ8×ñê,JÁÍ[ä2f=D¨`˜·' #Ç‹¬V|‘±rPwÒl†¼‚ùbÕB-IDATxÚìÜír¢0àœ$@D@hùTñ£ b«÷së’ì²î¢;mµ»ç錓þ:“¾ž&• „B!„B!„Bÿª/Â8‰Íp¡S‚†‡.’ú5_•åt~ŒbŸ �¡~²y ,ŒÛ"­ìÄa¡YUp'�Xºa†CbNm8)ð�Ø, š ÎT€mˆ|j4 šùÄþˆ¬©‰ké PgΙJ°p±ÄµtüZÈl¯…*D^D @\ÊeTf×Îìé� ÞóêàÔÆ^ ûÏœ6=¨R¼X©GPÏÑHÈ aóóÛ ˆ ê9ÉN×€]Ôsæ”ÝH¬/†}7IoFÈS� ~Ûºp#B÷€mØsë6ÂŽ›RànXô�ŒP¥öÇ#€­{ûZèúaÏ%)è^E›K¼�é»pÊn=Ú[sl¾»ùh`Wõ�ÄÕÛpç¾ÿÌ)ÀÏààb`¥A}gDj³©cÓ—�Ÿ ê?sÅäML£€�ã‘à!ð£ñ•]{îbuæª •"°ñqDÐhæ›Mˆª å€ó� a ¡kÁ�›Ÿ3¼„øX?¦+×Òvë5#h@Ç'‹ÁöýÕr·øáè°P=9¦ƒeåà3ýàh£pRÍÓ··ÕK�8¸Å4LšïÄql:æ‡B!„B!ôo †®û‡ÃÁ÷=Ý äKPÃóTMCûššTÓ=ß÷å4ÿ�϶¨> ãÉ󬮪jWUuô¼�ý%‹TÏÂx;‹êsÉ]U׳õÄtFy$c䘓õ¹¦šæLMóKÑ«>þ®ô³xvÌËb,DÐb\¤ùë,ÉüÇ´5FN-óôך{·œoÖfæÑGÔ¤š·0Ÿ7óÒÝŸKJÍ4—Qâ¾®©‘9W, òÔË’])˜<Àh0{µKïÞ)RÍw&¯®­Š\Öä"¯Íû7Õq� ÖU“Ùîë6“Ó|]‘Çä¼x£¶Ùű*ùë x;Näžèb½,lYN?¨šbUÅ:¹'=®V‚ÁIN³ýÇ”3µm^,¿èë$õgÁY7wBÞÍ©\›3™V—fÊÌ~ºã¹¿ì­[%e“i}¿½: 80¸rW•´ö/ñƒCTB·÷GH³Í÷ájn² / Æ­ñÆÑîso>V¶µ$5‰s»¨ô.M?+l®š¯4dˆy a÷�üwGHGu)äyÆÛäôDY>D-ܹûkM�¸Èן^Ûèh��9Hmóu š’�»yèQ@aGù÷GhLò½Å~´[óÒ=P“kŸ¯ýO¶CTª¿æ�wÞ­³‹Ïv…–¼vÛô�«ù¾YÍyMTvÈg„4‹Ryî/3SÔ}ÛΡŸH0Ü<ñ¿wýeÍà{W¢¤&DÓ È�ˆ"Q0ˆq=þÿçÔÄó Ñ$�ÄImÕTeÙvæMw¿7Ý»L‡¦ò„ —·61Æ2oIQ ÖcF¼y B™ýfêÖ) ó·+â{»ªñ„SŒú‰QÚ»›úIéÙîá UÆ»Ì�g#é3:Êž÷Â{C>öBDC¾3\¿n‘m³z�'¾E3—¾ ÏÜI¹¡òDÅJBÀ|k@tg‘É0ð#=_ÿ}7i¡¾::D’¼‡&tûº€øqðÐçÞ*Ñýr'Év´ÁPûp¼ä 7qNT‹Ý·— ]Ë…J€ßØg�P#zÀ{÷ÅÒÔ˜4�¥ú$#qÏõÍ&Dáâ+wë„úÂ-Wöð ÷4o,@ ûÜÄM}‚èqIÝ`õ<„’Á†p°vÙùrs¯Ù‡ž'ΓŠ05¼�1TQ”ELI8)7ÏC(ddž ¡¹5 ´æÇµƒ×ˆUä.2ÈÇÐÞ‚–\—Ù¿ûå‚›ßU~w¤½¹/0‚|?,Öó&†Ï›$áÇ|§Ð#ßyúÔ”ùð†a‡rá(Î.rO$ZŸZ¬Ù¹éÃÉ _!9³w?•aI¹¥ú™?ùö=JÝÉ…J£‚ôÐlB¢j\5Üñ{jG�¥¥0ý úÆç&Côûù\x£Z÷ Beœ¸�'¥OŒyâ¬T›m'¶&s&{rŸ?5·ð=ûx=ª¹`{[„M3Œ7D$RSi_Ú+cöÉ©ÅvŽê|8°‘_å†z¿ Âá)õ#åí`ˆŠ+Ë$^2áµÜ�°èõ�bƒøDo_Ú÷†¡ ÈÐl\�Ó÷�J¥Ã¶i®UªÈIØ›z§P`§°+®J•È&lVÞîè××G8n»Qû¹ÐÌjUß´¶†5¯b?¢‚–(•Bq0ñ2Ü,*ÜdPÕáê5yåÁíC8ˤæZÎÃ#¡G¶il«m&!Æpó¾âU,$Ð=‹SC„>B¨®´¶éŒ¾r"83k”ÖC {9NhnúVSRñqÔ(" ¹Ò¾À<(«¹Ðó�`ùwñ¡miÿ!‡ŠYq ÝÒân§3…këû0 ¿®ô78Ðf#éh¡K–…Ywè;€.ò'mKû‰7Ľƒ€†·p`b‚kÓö¶Y_5*]‘‹tŒ>èÔ�6g}¥nká $‘ëíæB-  {[æµa�ùᥳƒK°�:¬ÕYúž1ëCÇHR¸[@*9�9'³Ý\8Z "PÔ<¾g½B=î& Rh!š02Ëd#Pù¾ˆWÓX‘p”¸èبɸ5i¼r½ë$Œaî\�"é±$"ADF¤0Jï&Ã5x&á©aõM–I_~jÄfÒ®´·¦ðÊ"ˆYÝ6ÌL�%ç”+@(ˆµƒØF&�\—Û©�݆:žÂc—­”VsaÿHh;S–hõ6g´ŸöÜ“ %*Ê:cýP&GÕ–ò`U®èëœÍ]»d¥imBXª$ÐÖ¬OfžHP£¨¦íld3ŒtÖ±I„0¿@xÞxÌß6à€Ã]¯M:ÓÛÃí´cæïB�@*ÈÍé‹!ð®:Þvò¨xÈ=e#BI¹É‚°?C7ÉÎaЦ´­ "â™ÙŠÄδ'gwP¢ù…µÒ˜R2;й+¢{VŠh°š›mJ{óà"š1‰–iã†Ò7é˜L-Þ±écJšKŸ8„$@“ÜGž2÷r$ ‘zmæÂù•Ÿ-!R‹gvt„MeÙ\N€àíZâñ |�(éÙI¥O¤.ÐB0ûÀç'G�¼D½´ÚÌ…�ÊjÂ<[ƒTòø BOÞñˆjý%!e�²J-7*6Š ó�ƒZ^IÓÀð‚nÒ¦´÷\¯©ÜøÞ‚`{î¸Ñ­¬pÖ̬òaƒ¼P5„G•@QÛž3ƒÍÖEŒèø±Mi?NU¡sb®MßÁ@*×ö3áö�gsžBUáËØ‰–©gôýL“½(<Öà¯ÚÌ…ÖT% Ùn!„…T¤­0„{.„‰r/”C¢°f{±ßv�*ÆÙ°£rƒš5…0xB3'afÊö¿€nLcCØ�Á¹;.„1„Жæù!†01!\‘À3‚Ш#{9à.Ó8ƒ|Ä-Hû_ !ýyDôÓßÁ¡‹KÌ!„2¡A_Œ~;a@ø”´ÿg½ð€è †|aE&îJ.¼O:aïc‚Æ®'‡P²ÌF*Ö™\[mçBÉâ‚ðþ8B™Q>„Jon‚1RžóB¼NØœ¿imJ{k*Ñ…-åB6B9)sawÆ#ÒÞZþ á_� ƒë…݃P’ ÿA:ÓB¹.|Aø‚ðËxIûß!–ö ¤µ´ÿ}tKûnÒ™ÿAÚ¿èÌ_/íƒ!í; áÿ!íÿa/|Iû—´IûÆ£K¹ðߦ3�.|Aø×Cø’ö/iÿ’ö�ÇKÚ¿èÌKÚ¿¤ýKÚwf¼¤ýKÚ¿¤ý#£K¹ðߦ3�.üÄÞÙö§ CQ¼'AD¥Tñ­`}ì\[¾ÿ—ÛØX]Í�Tç»äU÷âz�“{sÿaäZ ¯^B‹öí-ÚxX´·åŒE{‹öí�í-Ú[´?e˜´~îræz¸ÐJxõZ´¿r´¯¸¯ueóZø?Iø&9Œöo†•°¶"5PBùo)ΑðŸp¡ùlx]®O•P~@Båo”ð�ÕÅË™Ÿn�Ê…§nsW‡OºÁ¦Ü_3RB‹öí?k9s=\h%¼z -Ú[´ÿÌZ´¿r -Ú[´'â½EûÿíE[9Üv»u)´å¯+GKX´ÿ°„­ÞŠ�Ië2h/:}ê²c¹ð„³¹‰Ëyv.l¥ä„ü S�¯IÂ'HüÕ_¿þ}1 ï|�§íO;^½¿«äÙùhÏ�W¯hû—ST'ä[´?ÿxõ£*yv.Ús U’“2N-ÚŸ !é>K%äh¯/! ä8µhOоIÂó›|TBÖäÀ¢=NŠÂ÷NK]óìL´ç*Ì+ -Úÿ©V#àQÈÑ^_Bö}[œZ´?IB†ìC:¹[.<µœQ+X\Ž ½wæÆ5ü±š!áÿƒö„ /ˆöd)´håh_X´·hoÑÞ¢=—ð|´ÿr1´_‚ =þ:ÚKäw&¢ýGÚ1§:í˜/ßË·ºgÖËç¢}ÊÐùÊD´ÿ€„íK0NܽXGm†ö´£6¡̵;jÙOD{¹ðÏôµ�•Á>çtûÚ¬¯ý@B—éko¸„Á“®„/\žʠÏ%ÜiFáý’Ièª$Œ&a®éÒ=„ >÷MDûÎò^ÓíŒJ˜+bQ u“woθPÎ…êÿ.ÍFžæLìBvvÍvb"Úpf‰žÛÛ-•0R>ždŽs§M7f:J § D{8=¡·ü®C©B{]Ñþ»Ít¬9=c&a0W&©ìA2ŸšÓFL† >ÙÒbB*ÑëIx¿ ¤:�å¢g"ÚëgxÑ£•Z0u•š/¨Ï­Þ´i¯$¹SxOJ‹µÇ¶°jkùLf4_m:&¢}Ä+=^ê;€òP<„¡¼ÎMˆBM?Q_hþ¡¬f”hï”#P£=z�¿•ä­}ð40íá�t'›àÃ5)aiôïZzI�ÆT®.ðû_%Ú£˜eZ®r@�öõk&Ú#xºÕ«ï©„ÞH·; FZ>»”ìç‰: æTôy"´60<ÉæÝ¡m$ÓDgvŽsú8¿¨½Š”šÈe¦“»÷9 c9í�²Ù�š áïuøºt@Ð>N…©ú;¤…lv""Ôܟ˳j¨ÁnÈ|†Kò8g¡JÂò>C­ý„ý3V×,ŒDû’˜¦÷ÖÛ8’1Å”ÜZÂKÒᮥ‘GPšÃ{$6kl•Yhdñ2„T.…ÒYt�üÖ¾´:–|ˆ~Dó¨÷BŒ²MÀl¤Nö¾‹y5“ÖØ¨Ð¾Ì÷{ÑŒe"†íƒå½‘ßÚWŒå6.�!>L%îã�ùÍax¿ ˜¹¤{]ã¹Õû&= ÄÎW‚SU‚ù­ý�)Ì»�A8—ÌÞÙ&̪ š}“&Ÿ£LÂ`Ö£ï6jæZÚ4mz·Þ #¿µÿiæ­î-[†Œ–ξÞP¯”V…Œ >“iÀ–5x”ÓoËÅ�°¹³HDSÊBm^îf~kÿ3 �xRï±& à?R-¾®†Ûn½ÏµOm‘¯�üR!|u©õ¹0‰’„ç0¸1ò½_×ÝŠ:&Ü !ü¼ç†ûÂY»6uç5«÷"©Ûà9¿ž ÚÓ€–ÀðÆâÆÈ3Ø^+ĺý¿l‚š:Õ²D°Br‚—·¼�ª¾”k~µî²Œ|Ò)xÈjÐwWï­ªDºÈnL–°¼9¾ ?Žn¿n‹ÕMC€9–ΚåµÖ8®»Þ¨.ï÷Ÿ©„åÛijÚY–“†HˆpåÞ˜yŒÞÑ4œª3…èÆx(aJ–´Êø÷¹ÉÔ­Ì¢à×úx, ØÌZ7ñD¨‹ÑY()PQ" =Fï(Âù¨×z÷0“]ä FÂáȽizž é;œÞeâÝý�_bjUÚU*ðUTª³TUº­÷�Í}º Á¬Ê+]—6¦¢ý±FŒg£7w'ãÃÂwŠº€àAXeD¿N „Ñ&íµ÷ٙ압Kôë²,T¾Ä”Ú ˆ rÊ<Ï+ÉFEÒ3Rú߉Vî!}F…Ig¤HÝ$‡â'gv"t­¯8ëç”ëý½FïÏ�Ä�0Æ�ÿô|ý ê÷ #÷ÙS®œcŒž3ò¬©7hcÛ�¤gyóý.Ì›|•½ª}lOoÈ/+-jÍÔC_«_"Â3®ÓåO4£zJ9C5Ïa%VËÇ9ùFR¿}¡$h›,ò…¡yÅt6ûÛˆ ¾%`×�dà¿”�¶´ Ùû&®$½ˆ9ßqÚ9ê.!ç4ž5ý¶ö"ÓéV„V$Îiäfs”©ÒÍYˆèzqÓok/ÔÒR«a+ÎÞ=k¢¦Çóµ+Ý�t hݳ]«>Tá %äəڠùŸÙ—_÷ºo~f·X»�ŠW"Ãùº9Úsk/òY±káv5ï«‹„Ü`²j^`EÌ.”\ïà8â迵/Aµí€“ Í4Ï¡u(VœǶÒfšìSBî Z(`Ü:÷ ¬}Ù 49ñU° ¦EN5ìÔ¹—ãV”ÀNÍ{Ζ¶‡ãÝ’f8ÖþaPjÃñÆnšüÚ;좓ÖÇ=c�˜… iByvæÿâ %г.°ë l‰KˆS ´§ {a1G�¾¾])ÿ' éú`Æ‚ßh–ÏŠB i�±‰a¯" )©ûðÛÛÿÜTTI(1´˜N”ﵑ€uÊ‘ˆ„ø,üU1 èmË…ƒ}Èìmo_­}c ) [gÚH@Ûù˜òµSЈô©0çT�Œ6Ÿ—½¿Û>(øÏ}a¥„ØÉqydy²’;½û2r(]ó ÍMÑ©€Ul\æh rNKùž³V_´>ÖhÈ]’šf]» Â�’)a-'žDvWk6·£I£OS‰~ðÆä"X $t�ž¥6øYC•xh“ËjÞ=´±ž¥Ü_ÔUƒ„² »S‚p—8¨æhž©iF è[¡¬âI9Ή.tC¾²$†‰ ?é}¸n…·PÓHíí‚Åå¬bÄ]«RRÊ`þ"Êi�Ò9g‰‘g@Ø�\ÚøOñ÷©‚ oÈ;â¸J׉¼Î&vÈ/Œ`‘¥¹ù›ï*û‡ë‡Ý/2ÓF¯Ã|F£Ço€ØÌÓl1õõ÷‘ÊzáH*…›fËé‹Óp¾ÌbI倨I‚Å«�äE°v0{>„wlôH;h±<‚Q_Q'!ŸÖÕålÞÖ(6€Æz¶}Of‚¹½Oÿ:ѧ `±¿g.�b$Ç�f_RÓ½=ï¯|�% ­UpˆÖ¾§±O¢l¦‡òø]±�±<·–»ì´öã8¥„ÉÞ³Û©òF¢¼Õ¿yû„ø”2&ëS±[†G¥¯ ´åõê|ZµmZ–nµ¹Þœ›(SÆÇ F YŒŒò'çTý.À~0èþGÂ�£RBø‘p (·öŸ*ʬý§‘ ŸµpðøH8x|$<>¾ð{wl@DAÔL45ÒP0ÝþË32´€�y-|Øcà@<'Äó�â™öx¦=ži�ç·Ï ñœÏ.ÄsB<)ži�gÚã™öxu|^ÍrBŠsHïŸí�¤´ˆù«ç¤­!˜u9±]ö!°}Œ‚Q0 FÁ(£`Œ‚Q0HúîÖ¡°Û•€æ¡   íÌ–Ü„�(šÈ2‹e³o’,³Ãÿ]ÐÂØ$q¥R•ôËÐuK÷ˆfj¦ýT%òòþ,.Î ¿ ßái<²„› —÷Ž|øšæ«“NzuzZ÷‘¹ùfıV±¯¼·ÔÉ=cý1©à½'G#ž¯¡Coyº\* ."®æ<ïÅšÔ:zÈjEå]û<’sª>>ñ/Ê|¢&ZwÞúáùÖoþ�XQj =�ŒÍ±}î©“ï© &•_>útñ%KÞåÉy*â¾-‡ýtúg“[¡6�#ÕÞÝcm"’<ñ¨ìNÄíZºÁä¤�#¦uºí¤M0"„3_�\»rD#.”®^‹ ³<�€i¤³ =Çòá{ ÂMd¬ãAæìh¤øP„u`û†ç\^V…ZàÃR­ Q#N”ÉËAÜíÛQYÖë}¸ØDU™‰\{#2 Í¢íŽ3ã{µMño¸0¹8{ȯA2A'™Xe­Ý›w²wOû]@; ÆouòÏú´Õ½§RDwjœÊ“ÿd5r ÆäËinÆ»+AÒÒÍFa¦×að š…eíÅTÅõ°”!Rr;䦄QC¡�áðáR)Oi³& »IÎõOÇ6«,ÌUàm÷p¸Ûj¹ð;‰Â+aËØ“¥@b‡ß‘x�Ï1bò¸wŒ‡ `�Hw™ÁGšl<Žb¾y§wÝ£;¼=×ü¾ª]¨”˜öf7³´ož—þÿ@èº På¢ñçÐ÷ˆ $Â�BlS#„ñTÅ–þ»7Ê.ÞDœ­ò¤t|:gÛÇ#—Gw94Dj7¶WY¢ rª-`¨pˆ³[(„.ŠÏë¬ÂðÔ*ýŸÈEBܑդRxpïÓ ¡a¯92‡L–Ú^1Žøþ„kÀ(\®�aAqpyCŸ{„8¶ ò|B.3í*“tãÌ�BˆNAþÂv‹«F¨Ìk¡¬* ¡ÒP#D½x¥ÂFU‘ßRãí7« k¡>è`áIdÇRøV,é#¬ÎºF¸6¤¾¡â•é!Åc. &-ÑBš¿ÄJÑ Ó(„ʬåøj´•s3—ææk€á¨6lÚ°àn}!tlƒw„T×è�§ÉXv¢bZ6×ÿ„Ðꬄ‰±CXÂÈø€�¯Z7°¨„KZšï!sØ�¥,ûRŽpìMÙ¤8 áø3Âo`ÄÂì6ÇÆ;¶F‹x¤:5tÜâBÈÂnúˆðB ž…ÎÆà›ÁOY¥>ÉaÞ—u¤§ð37·þ a2+]@ òBgž{¦%í ag¯6„vMcóB;k}ërÊÀŸ éó f�ÛÒ6—±°t! æ¤p{óüþ-¼®ù��A7êæÄN‹ :Ùlü?„`¹ù áÉýÁÞ™h)ŠCa˜,ìa•MdW@Å~ÿ—›„€:UEMMM÷,ÿé>…�{òÕMåB@ß÷Ýã„�”{Ûo·|oݱaSºæyÂ3¹“Þò¶‹•_�tVRÔ=}ŽÔßÞšf¤Jšº$QáŒ0ëíäò<�f�ÝK¢æçæþŽ�Ú"Ý'„—¨L̄۲*­ì ø®¬ÄPLž”’«å ÝnŠ'„ˆõˆ²‘Þô„š{ý&O/G=ü…Ͳ1ºÃ0Ä› !V\¿ §ºé ¡gëŠ+F„ʱ¦®%¹oÍIivq„¾¡ë¾M»nFX˜IºýÂÃШҎìŠBC·‡!�àŒPLÚÃåc„uÊ‚Zѧ _Q÷4Æ•×-{w7¤ƒ ÷Cty $Ý`©%/"¼ÞÆúUšŠ[Û–B9±ÑB£×4-¸LýÛ©ž‡ ¡Öku¼†’+×btª·ÇÑ(Ó[)½w²]uF¨œ"M3ç¤b†¹_9„bŸÖÎ3B3Ž·ÅÕȼÂî¦QIótæé-ø!lí“(zÂL—úCsí-iêuE“Ä,Q*yF˜ '74»³FåÀO¢0ç…Á^¯ç(„YeDÑ/CwåõðµéÌI*r=y¬7¬©Žsî8¨³·Ü,Q޼K6]² Ý„9x?�éS¥T5ñŽPˆò½y}Bè\Ó£§ÐÙ/Lg(B3�w"4ueß4Éï�Ïê7³ðÄùK˜�E(l[7ÿ¡˜*ùõv»]c¼“¾†0È�äÆLhá!ûem¿Ž0hÝ^dƵ¾�îñ 4Ê/C(h­¢t_D¨Æú�ÇMß é !<+û- ”·‰š\wŠ›ÀE„l ˜ÞóBjd6F÷ŒÐL|=õ>Gx©]y‡š¾½udYö,#ξ„ZC—I²,9;7‡÷�TðâN龌P¾º + öÊÕ{ <×5~&BwFh0„ðêÝú¡åyž#=!ozðs8xŽsÓ9B!”«)©âFs¯\ …€¹“Xêé�PÚà¡Sû~á3ÂÞ£’ž '�wåá',:} G„n¤^ÚF£JŸßyB-N™ZNc×ìæ.©³1©Ž{�UÅyGù™ò)úkFK�•5:-ª6eºÊÌÆl‰ŸN>s7ûÃXæÕÜÕ&ÞÑ6@5Ù3%áI^ÝX÷ÖY]L²•YÑõÆ/&6“UV§£j~9޽Ó=Ž›7`ÄàÜÚm}¿s¼¹ò»@u^? !”ä©6Gœ~JpÞ';P˜$9£¤i‡ù�;"Qr¼ûÛÌù>�{š%Kòc¯Ã%O¶"oŠùN™ÿ¼Û�–P‹ç:¡4»˜lçÒG“ø&oí½>l¹'®ç³™ëš'ÏNøÇ7õO¾%ééóSÇ›N‡[óMÙY—½¯ZµjÕªU«V­ZµjÕK¼\¼) ¢âI¤ —ëë¾Oð`ÛÓòð�ÝåÛ‚aP•å ¬ú.Â�~uæfËGÿ~i1&Š°ê›’CŒtŽ0&H9ÿ£=@¾°ê/#ÂÒß[ð+Fÿ*„ê©ïÿç‹¡O/a}ò¾dô¯BžÒJÂÿHÐ)LöÎ{„²wqžn#\2S• 7È<ñÙ‡H÷œzw9òl.©&3_š›fv‘‡�Ö—½1pÔ·E¢SpÇài¸Tß�¢ú²·) 6qœ„æ{„QÜ™3õtËãê B1“8þŠuèmëb¤St[ÏÓ€ô“¼„0²1ÅãIYn UéêÈàƒ-ÃîΑŠJ~ÇÕ’yÀÐIâæ%BÔ܉JŒ†ÓÛ?„5å{õõØ2ˆ÷(j‹ií#>U lÂçr£`{Ͱ>Z�!È1*Í�Òàã܆ Í{„ľ0JÑùÜ«s#êæG6"4ëºajg�!¤Gí³qFûŒ0åÉŒ0Å wž ¤‡¯‡°Ç¨¤g-"T8Bø„Ðg'AQ’dgan€®©bÛûøêŒCÝ€Ù ÿ++F>õŒ0žú#%éPiA~¶Å åÿˆ#‘ª¦ûWDˆ¿‹Py ‹í.´´ø„Jm·ÛÊ_ˆÂ·<þ¸»‘k·³6XD(2êB–²¡<&„CÏ*OÈ…Ka+ù¶‚–bC¡2Ð_ˆBØÛ>ÆŠK–£P�:–Aìœ £÷f„Ä+`Eø1B¹W�`!@£ú6B§fö1W‹…УJ aFÈ*Çôÿ‹FáŸH�7áaÀÈOs›€O¥ä²Ï_HÁ»�T:éëûØ¥Õ,G¡Óá‘ò› Þ]ÉŸ^á…b iø„^åcådQn|‚P¯¢I…°…M ä¥(,r ì]`nZ°<�Š'LÛ°o÷Í®€ÂáF\š'¼šîa–éÆûÎ@ªµ˜¤`4|‚�š3‰¢……(„á0ìµ…(„‘@]@è…x9 �J¯ñWBpñé\ùËeö„¢¦#R«ßAhÙÈÈ/˜îÆþT3UZŠBñŠ€a-D!´(¹“ÌX.ÏHçÔþYò=/”ŠB}½ïdS{kDØar¼|á©|lò@xÀžvá±ÇÛq»„P¦ýíBR!èÖ8äk>çE„?xjÿ�Ø’ at®Ã×»U!íš^7«`Ò{æo¡ÿ…*ëÉß/°y=$®›”qsîŒîí5R3GØ5ö?ø, ¿XŠzg!µ¯¿(3‹_M·lãªÃë]#•O>2Ž„êc'}' ƒ=!i$BqkÒJ“ã»’©Î�ùê€$„Nl ró¦ ^E�r�¡xÒ½¥Ô^ë¸f´¥=ø$/Ng¹š²H5g“]HÝ;)A©õr¡i#Э×Á�RƒßA(U> C­8 éçûðhPî&†—£îhfGáòyô¡y³•c•P LS|z,Ê ¢!e'Îj'j˜½Üŵ‡ ÕOp?(ýZ-|ïÏl©xÀÈç'»õ[tþcOû¯·Êâÿ$Ùeúz·%þW’ƒÀ|ÕÙ˪U«V­ZµjÕªU«V­ZµjÕªU«Vý‹µÞÖúÏ«0W†ÿmÁè´Þ"ùoë7ö΃9ZÃXG“‰*$Šèõhùÿ.À��dì4Ûɤð~ö͉ûÏÜ3»Ú«•BÂÿ`©ãÿJ iˆtéß,•4Ó5þ«å³¦½*>þÕrØ’ý'ûõýT´¿8¬=åð2Å¡´:†šÏ—æ×„ø/Óèa–è½Öÿ½mýÿ >FÏô‘µÿ½ýÄÿ !’�u[Lm ÿƒ­þÛŠ“S^7Í8NK·Ùuî8ªv­xÿk¤¨9ÛÔ dÓÍ–2Ù�3C�1œ?Ó'÷Í÷ÿ³=ýÿ9z520´©aY�¾+0ÒÒƒ¾ïïF)«ßÚþÿaXRв®Û¯õ?M$’šÏÀ”R¡ª(šÃû¤3ÌCÁ½+cä� (ƒöÇÒ²«µ¡s«ÍØ[Úíídá…ôzù­­þy?ŠyÍPŽÊ$)·¶0�.+ká+H N=û# AÝÙ=ÝÖÚCÒ®íë·=± î£qÞеfð]R†hvú´QÎ�`j˶$jÂj˜”³ç¡ IG¤0Á¿l#`•‘PRˆlÉe†_”ÖguöÂB·ð´œI$W�l7á8ƒª6ú͈¢:æ›Õ²Ê —”ýúùÅV+ŸàßEè!unŠË ¿(XvSd.ºµ Á5Ij ÎE Míˆ#q¿U�l43�r Qz‹:wLÜðCB€åá}å[QÄþ/š:Õ±7 øË{pT…½ÝJ—¾$œÙ[eZr‰ÅÑl\åÖ$_ShÓ@ ¨ti›è&»H€2Ÿf o™Ñ|ˆ�‡h3ÒÂZ™úö9 #W׃@7ì–(¿Èþm7Iþ_GÝþBÕ=‰nAKUŠ€$Ñ|ÆRz˜Ãž�寱5oæ�äã\\S/+½T>2Âlbmp72¤ü°ÒMùvH6-7á?C¯Æ©�Uù•àI¬Ó£Lo§R(�©†xáHUegH¶¤Óon­îÿk¨M‹² Ú�ŒKŒlBàͱ¶®ùò“nÖ:ýÌ�Î^¶¦ôêŒô%ñ.ˆÂ)ÙrŒIá3� #HE4î)¥>�p“m›a&ì\}–öcŸZÉG§`–’ í�`Üì ëñF¾7â�!ðùbóÌ‘.}Z€wV†£T0“ý Æ9šÊQ·™ržû(^4Þ®J X/‰—îVøAÒ—XM]3Z?™(4“wjG³ß´?Íñ‡n/zÿ–:Ò²ÖŵFóiA"« �`:KÚþ+A<Ès€D‰: /&5JO !Êð‘YK¿å ߯—wfÉ0)3í¹ÒVš/'›Á$­1„;O7~5»Üó Žet!ü´æ)Î;»eQ8GÐÉ„üzS�¢ð�±zØÆ‰Q¶#âVµ80"W_Xü>ÉìÌ–�ûüöæŽïø‘×±O„;ÐuÏÂ,v¦vM†ŸìšV×)À§G¾àÐ8dŽã¥+älúÎaEöÏ„#©tV:KÜf\Þ[ad&Sgf@€'¿š\ì�j÷å•a†ß¦â»×˜W‘ÜçåmÈÁ(�KJ.$‰ w�YÜÝ`µË|±L¹h�?Ô Ð0”,Îã�ífí¥w*­h ^nàfÌÅX@�ù–ÞÞœ^·3ã*Ëø¼´¢K\«êsŸä'BÀòÍ0�&îzËD#ß²ÕÕ�@Ù•�p,äµqß;Rul}­Ÿn‘Øb¦nGe hŸtnp;çF+™ßNìöJî?/%²³î¾¹3_Ò”†Ãõ´wPq‚Œ #–p¿…ƒ4©Ü®5Ø;›®çâÞÅÎÓ�ÖUZ%ÛäFt$ÅÏ1åƒ×—I•–¯ í}¾Þ©ª^žôÓí¬IZ!6ƒAEåqœ6£É%”>r9w‚QGEXU}Š"YÚÊ�ß�Ð*eÚc˜?�nင¯ð‹"ãY ašØcH #@é•~Z<íÂx}Á¨æ”{¡ië3ëð~]êi8¹½œdH‘70T;ëtz;ŒnÞm)]ý¸d¸æç•i”,½GPî€×L#îõKEヺ7Í8–úáÚ÷Y�9±›X|êD¼�‡Y?•©n½‰ÛCÜîVx"d,Љ Ò¦GqyÁ»íP:B‡-9‡^q.¨Ý׬œY$c›¥wKÞ¯§àD8%\°‹/+ü¬8ÙvdUJ~Î…‚fvOÐPFV›Vƒˆ×‡#-ÂYE‘ p@\7µ;ŠßíÍ7Gèð¨cçpºŸ9Äþ";k§ì3D= ÛöÏ[Ât wë+ ù¬D&–ÄÂP1+w\±Ÿ¡’«Cg�Y�ilŽÂ!аÐTù¸²äûF¦weOÖ«½ásÔë?z¥•rD¨g|û¸Zä��§°Eü g>+Õ^FW.x2× 3Vï¾ÏŠå8ZÒäpzîÂI Ò\Rp�åݬâ4|gÓéKÂ=�¯\'Å›Î$e9¤ç•'B‰uFØ¿$W1â§Úµݶq)I Kv`f3ƒœI,ÏIkÛUz»/L•€à’é,©Ô_î}Mí¿?ÙÆ´úÈ•sÞ`ObV(ÁÈ:ÆÏ ¶óp¥ÑvÖUüyÅò:Õˬ›,W)$•-P$J›63õnÐ$õ¨ØR2kªI¯§à}÷jfv7ë§Pôf…;²àUþÉ,ƒådŽ(¯ìȧó5~Z 7ô–ñIM–GN?AŒsìµ…~wuËÒÝ�Â#÷ÆH¨ ̵N^¦ÎZÑí¢œð¨âé1ró±È}¼>žyüºÞéF·˜n+Qâë�áÄ*ó¾Á î€XyD f"g7Oý8ŒsZAHÏ5  Çéä¬ÒõR}o„�˜›¬®»þ�øÌ*žsá&áT~3BóµÖiCÃM�¶+œù‚üÞ0]S�€t­˜· Aª×·’3i6$|D53…$2wãL‰ôNZ9æ,æ±[)Ç��ìŸûãùÆÃ÷½ÑÈÛ½¤Œq}¼šj|Aµ–,ß—–0îHΘ¬n7QêûK˜ò‰PÎúmôUîlÔËÓ4‹É‘ÞI ï=¢8Ô�ùô¤“~2;ÆÒœ=#Ò·g¾N¦—ùÌ;“\á̤Ì$3_ÜíÞ0†�:ÒxÀŠ‚‘“&}–.¥}ØsŽÏ:R”¦‹y3<´EJ·ì‡z€Á£öépÅg^ ¶Á«_µ–óî¼ Jˆ3¹»VH¿"°3«nvcD,'ŽØÈ_?Aù�éÇzŠœ1-�ÇýrŽE¬w�4a(>êûÕ™V‰b# gm¨æY¯ëi:–À¨ßnõõŒ;ýžˆé)?#–Þ5#ÌÏô´éŒiû{Ñ é²(ñU9óUù¡~³7ã–ÆaBùùýÎBP†ðàQ’D;6ߟbo©cË,³À¬¸ô±ÆÌ6b¿Ês¶œëÄ��‡ÛʼniUŽË“Q�ºj§�yTºô5\Z²kÝÜÞsãÑY‘Î�¾˜z!¢ŒA þS(²Ìkd¹°ÌâWÑâp@¢¹¯<âK><ß)~N˜Œ$ÌŽ! Õ÷�© æ°ÕJÄóZ.”×úû'.Ø+ŒÔM][D¿Aö�a™ÑPÜjEÉ)þÙp ?ò ÍX¨Lƒ¥qå h‰*ýªp™FKï!ºvý«ÉËŠI�1r�j¸2Šo‘#Âʨ¼ê%‚Q>e "~¦µô¥î&l7Íß�(S6�lŠÜÒ—>–:¥ ÝY¶*rüÕeÆ5on:?ù¨Œsμ�í¯,xÓÄtcÆSÙüv0Ç«uÛW²‹"�?æ£ÔQTºûÊ�Q^¡ÌwIéuÙÒÝ5¸µðµ�ª:¾ªjà9Æ�\Ø÷À4íü^û.—I;Öœ*3"uM�Pã¦|¨&4 á’UIŒ¯µÑï“Ößo²,ßnÖk° �ö¯óôör“MÙLÅo|âWÇG}u,Ë ;)—$} ôu!¹sèêRú­ò½¬¸ß‹4êE‡ÿDâÈgzºTJ‡¤²Ý»›.ü£FuÆÂ§ñùÁTÓ«íÓ7 à)K ×u‹µÊÊi d†šâ5mÔÙÅîEí®ýe׊3ûG÷é5ÇgM�pú¾¿Dš`uǧPt ™ `=ÖŽæ DöO<ò™J3g ó·¿@ÊAºô·¨ÙîÕþâQ¢*u~f™‚I—þ9í[§C^]µÖÿF9ä'l_×�ì�kÏš0€K)åV@Pî…""uÿÿÏ�Vç»-q7Ͳ%}>xBb4ññzìÅÿãOþšøþsŽašk„†xÀõÚ€2`�|ÖýJ5øÿ8 ¬1ôliYCœéŒo =f&Xºžõœóc{ÍÅàæLÛÓézRÇÎü3þS9íoÓˈlJwêÄu˜_Doh…ÕgY–§çTÌS2—uù–U[µ|æ5à.IänxÓw–[L£Nj|s[RC?Ë3q€þS #çøÁ—½¦‹™cKáËHê!„FÓ•"k©E}cW’J-C| 3§lÄ"+z–Šè´¬]N´ L¡!h™lÈ�´? :gÆ�m (i-‚]E^[Ë!®-,Õ½wº}-ñƽÕ7â8Þª�Ú/a±^Ô,œèû‚�RØÕú�C¹ÀMg €~a!âü¹Âm/.l¶¢rõƒÛE*lo Í�!º½HÚÉKU%}�¥ÒâÕVViÙb�º•ï*¢¡¢†˜ydšÍ4dUlp‰VØð©Bï;…4¤qÀ…²�â,‡ Keá«�®�<‹½LEmð˜ P(ÔâÞçH Ãù“V&0²ƒ†Jü ›Â+œ‡ÂžôŽãtÇ-|R3ÐÕ½ðe «»]Pidúä�Cn V…é^„4é,IªOqfÜfï?müßPóMÜÛ…(bì0mʻŠÏ4žTWñ:­‡úÞò†éýuO.ŽPéQkéÌÉ'ms›®ßm47ƒ¿z/¤!€s4ÍáG!Åaè—Ý]aÄhŸªmÚo pÑäw66ÈŠâ¸ÇBá>-#�¤[W/œàk…VþL!}daÛ|Qì£{ ¹Låä®�åu£†2ï`Bè’#¤G[(vÍÉ¥»Àՙ㬹—@ùé[Zä€'PïÚAzþPjUÅ7#RÄðËpFñà1Öô¸5A²G)pShø©„¤éurôMhÔ‰UnO¸z} œ/"ØB!0Ç ‰¾V(EP ß‹³×õK¦žærxW!R¡o“æž·Aw�ôèùìÓh ò>‰ÛÜ”ë/X(MrËZ¾nía·²�*…oàޚ„BÂ$wpÞ‚•`}!ž-äMû(&Ç?(ÈÑÉÇØÏ;ùªÎ¥‘Õ·nÝ sÌkíei²ó! ¤SÇr¿�qS�"†‡‰›2Æ÷sìó½G}à)Š=âÅÓÙÏɆ};ó ÍÀ†[ce»5âîoN3?îÁÐ9X‡Q5õï—]Aê@Ùîó²‚&=Ž¡,~åµ?§ ø!uÙÒvö� Ìg>;Ò8̰”i:¯¤e^¯ÊQ9ó7øÍé_U …B¡P(>·$‚þ¿îG¨ !o¥ÚOIEND®B`‚pydantic-pydantic-e28e879/docs/logos/jpmorgan_logo.png000066400000000000000000000175671526274674700231750ustar00rootroot00000000000000‰PNG  IHDRôôü/¸±PLTE$ÛÒ:tRNSj•qv6 Û�ú¥�õ{-&˜ÅË_ÔUdO=ñG°AÏ熌‚îßëZKª¶1¡ :À»#ãnا°^k¹;IDATxÚìÁ�€ ý©©`vé$'�(èwÀ‘ €ˆ­à, $‚Mÿṵ̂Ð 7š÷P©¤ þ±ƒ~Ò=>z¹¸zn?�¶vj¯w·ÛÛ�êîi»4Þ ü-I¶õ•,KÂÜ^V»«6ʃá¤yr6{èÝw*ñCg¿™VwžÇaµv¶œÙ ?p”:•»Šß¸sݸR%.ØÏ·ê¡(]†õ=Æ‚A`cãÃ<6ßâ’^3/æÝ0×åéð¤zÇ…[N:äÎ7˜™B¹ý1Á¡‡RàhqÒ!‡Ÿ¼ b‰D ´0lŒiÃaÇhàø`¥Ã?ép¡º†Ÿ<�~Äçû¨=ˆ"ué®DÂ+~Òó'œvð“h` °îR‡óñˆLn ‰ô:~b[âL.·¾©©×±“ó?©ûc ½Ž£DºIƒxqÏ0…15 œ‚�'üð²øI8 éàJÇd=<@?i€’ÚOx"?<U€#-“^�Õ–ð‘Hƒ%¨èàægé øá1ÔÕyVU&=CJépÔ® ›ˆ;0o�n>¿Ì|ßo¿­-И›Žãôû¦7c­sí™ßÎõáVø^|UúÏøœô ž1• F´¥õBcl·Ô1Óa¡x\¼»�üë~ÜŠëµp43A—nÉÇçêxÜ@Éî‚„—`´)ŸÙÔá?Ø”%x�¯@µÔÌïIŸ¡,O«EÏRC•,Ò/GÒå}úl9è…¥MyTíä£Q)ÇÕ‘‰§žëº½½}ú‹[®€šÝ¨É®­‚ò&½h!âðó8kµ–� åŠh³Å" _"ûEé] é/q1AF '½Þø×Xa6‡3ýSAÀÄ›ç\¥›*&"šµó‡{ü—ã3È1OVŠ3#þÄÌ1mœêO{PàÑ\•g™›e¶(ù’Ö/³lx4“cªíÀ—ÈÜMºÏJ§š^d °®%=W‹ªINòÇÑ2S× «`„2üITr¬\5–}|Y+¦H3ÒÈa£œùiðe2w ï/¼ôº´ÀOÕ²t¤�¢Oò±ì�ä÷ÙUÏ £Ö7…$Î"ú¬´L:M@´æ ÀÁ˜ˆ NMëïK÷ðŒÃK‡' <.A-}^‹~7ovÔ*-Šî3�”#é¨ýš©_`¯”¾¢#e�õ†¢Œ5Æ|é%$E¼ô!~âËmS-½ÿ5‡‹üüToUxŸ-ª'²ÎÇ}¶j¢Jºõ¤¹th‹kG‘û,°ù-¤7(&I¤SìªHZD”Òד‹+á†�{ƒ-8g@ÔÔÑ�$ÖéTÔB¯Îý¦.ˆ7c .Ï_~é}<3“I§I›‚¤OÛ)¥[e>èr%+¼ÏJ’¹™b-‡©”N=ÛQ]m¸Ò9Ï®¿ƒô8ºO@&�AÙ\`.á;H¥Óú¹W�à<1üñ}Öøåk[U#Ê*¥7ñ°Ð«LÕ± TƒžŠ[úîH§°=•K§úBÄØØ–K§¬±2&J‰ïs…{¶ª3 c•ô<Ò‰5¤Ób#S(ýùH�£v ÒÛqEÌbúâH¥SNÔ²tÆ>cé”c¶ HâÓõò¦Ò×X„>ÝŽR:UËßUú�Æk*é�—Oçå1#—NRÕ[–ßiFÜA=͵¢)‚”±\zˆf|ASéÔ�:ßSzSV�#éô€ð=ò’Ú/+ÝaRF¦IOô¤§¹¾N_G¹tÌS”«éI7ânýJw qræƒZ:-sí ‹��J§Á�=×\9_×’¾â 5­…zu©ô2ú”`EK:uëëï Ý„#W:»Á�5hH§D+êúÐTJÏ3 †[­ÙÓ’îbDÀ,߀œ¥ôzM@«ZÒ©Ê™ÿÒ7ÓˆÔ¦ð>Á3¯e-és›_nQÄÈ¥S´ç.L¥t:Û3s×ï ǔۘ¦(G¨B:uëá7�~M¯êhJ‡ÛÔMÄ¥RºÇ¦ù"XS%�R�� PÐwdóký‹[÷4¥[c<‘úûÒ÷ùˆ�^í½Sfšt :Ò+l®Ÿ!Á¼ô*“Nò“@#…t*#Oæ�`}‡­UÖ.·õ4¥ÓÖ¡õ_—^^:árkìXWKgÒ~º7”K§Lß~f—�¾´§ ’Ø%ÔÖ“N“Ñyë¿.}Æhf8µôÍ-RjRéT2?ó]D~œ$ƒ�«+B<çßjȦ-�ˆ‹¶ï˜RK·&š[ ¨€ýª�nŽ�–à$Xq„>MÌ\]}_O:€©HÏþIéá‹)^¨åK¤›dR}a+qrzÞ çí´lnPÈI÷rÍà·™ 1êØ´¤Ã³Mc�;K§Íå? Ýj‰ÖV½cÔÒ›~ªÀP=ýJz/\¸�üÄFļ»ªsqÃýòvé7ì\ÏA�u¥SV±¿¿ôúŸ”Áâ¿5âîÎÒ÷é„È®üËÒ·˜Ì4u¥S³}œôìŸ�>Ç3ËÄDºRú¼uŸð¾qœçsx먥ûð›˜8 )\}é°§öø ð~x t"Ä«…$-œéH‡�v"g´$‰œ¥¶ªÞVûj"·I&þcŒØiK§"|åQÙ»÷¤‹¶8yØ-é=šU°SÙ*¶âýG[Ù×’ƒÑÁ0ì¼xäßÑ—>ž˜w•N‰ë�”N4’9Äú:Ò)Ÿîk¿±ÃK‡™b!ÏQ6¨iá5‹ä5ô2Ù Jô´kJ§nýý®Òiq²ÿéî•ôibQ]7úƒZ:]éR;O xéT} äõû¡0”T*]o‹1+/Wq’q‰£¬/�–žŒî*=M³Ü�”N¼^n*kàFSzS;µ*kM¸l%ŸGg+ËùÕÍKì½%Èy4Ó–¾¦ïþŽÒW”N?^úõ§ ¢£)½¯f$§ó©tëU¶>·¯Þ�ñ&Y®¢Ï¾¦««/�ºõÁ¥ÓãÚWK_­ô0Ãwˆ~Ôu†�`ÞbÞ'[£þMNCoÅŽ&5˜‘Ï�6»ömŽ6?RZðÒ%[ˆÜ;Jw‘ ÷—ÞÀ¬à.è6 Aø0ZÌzÐ,ÍÖH1)ñ–J‡Œì õ,“ËÖoÂTaN©œ¶têG÷“þAÍŠ#ýûÒ÷8’¬•¯@{ÀJÿ`dvAŽOOFºz\F½L XŠl¯7ACr@á&ékʺª÷‘n�ÕÅ©ôí}:ù+Iz”!Lð Øðžg2ê¡^—^ÖØá2¦¾�‹HU>$‘ÃŽ4 0n�N[ž s£ôå,'Ý�QçE$H—¾0Ëy‰ ðž(•uldÒ\ëIôs&i° åfÑ7,Áu({“�{bØ–Öù<^º¬[/7Ië!b~ÆlíU”1yéê¶úaq%æ¶F‚�¸‘ ihÒÀDf5Üüäa¦,1îç�¤,ìêŸm~fÅ¦Ûæ3,» Ƽ¾Ÿ(Ôq ÝÛ¥ìŠs“¦lyòÌ+ÛÕ왯ì {ÏsSö:¾�ˆLœX³»Yîtm6¯AˆÇH÷ÐvT1w.Å{ÀÜ,ýϼ0‰¹£zFÄñw¦mí9ÿºÜQ|±|’îr1öì‘U .ÚyjFR½�#}€¯Ê°9�2ðôn•Þç^QVÑ鬧H…Ó›xã·!¥%…�J#Ëó«$49�(¶ç$}Ü‘O“º\Lª|ÂHÒ)מË�µÕp<¦Z:³#-ì!±Êè®.{³9"nûLìéññYr‹óN”n‹~·D¿2™�ÉËÌ�d,áÛÑAIêqy{]ùà¶ÂMä´ã٭ÒËÂ/qþ¡±s§²E$èaÍè8´ƒ�°97Çù-$Æm‘#¢�M^Ë|Õ“³7/ûÝÙñóùIÖ§)_žÍÚ`t²Z§pt®ãbÞT6…Ñåç”ûžÊdP�� ¦ôó1ä´ùíæ°‡— :å©ïûr÷/©p€—¸ÁÔL6õñÅéÚþ¬]/îñ’F1Õô}?q¯f)º–à';Žž`’X˜ÝÆ^L° KØj±—É9V¢‹nf’5éüÞ÷Õ—D¾âø[<1Îì Hb9¹,Æ4êýÓ‰Œ~7=Àùlδ@LíFéÏãdx·²Ÿ;)=>àÉ� $Úu/ñ¬(„ †» }GÅrÝo·gÞÐ�†¤A…óIAœ{Ù�‘íEk;ôfíY=pq6Ù„Yœ¡›xE™�_áØ$] sqºÏ95«á#J&0Ì‹ax, 8†aØÑqá¥�ܱxqj«†a‘;_®É•ÃO�,Ó“–Âã*]ú…ê*<†Þ¥¯a:þm1+8Ùè‰Úpfˆ¬üzšB!ñOŒU¸ª–~!½òOYíé0º8�ÏŒ+p™óVýíÂ�`ľúÿO°¬¥ŸÊàìÍ*<˜uÛ+Á(3}3á/‘¥œX—vºFMc° Ú?ÿ1Îÿ‚Ø;Óö´aŽ›†HZî3„„«0 \�R¦ïÿÁ¶e€›Ã–La}ö�ßÞìèKþ¶,K²lT<»ÙiÚÛ÷Tð””””””””””””””””””””»blôn¯×] Òxì‰m¶àºnMëš· {÷fMÓ:¶žcß‹®=7&pbâ¿Ì‘Çß²‡£4幨B™Ýs>ö§Uh†ß³§UØ?b“mÀ‰âıàÖ“.Ÿ0Øcáµà7Swí¿�ñ‚}‘ÕhzC}ï÷‡ß³ïÍræK°–Yï=gš‹êªT‚4šŸ‹‡ì¡Ðà7~ïTÝ(Õc_Áö!`²žUÌÓTò²>,ùO¡Ãþ+Š»Axö—†ÓÞ¥J·˜c�D'|Ž¥‰ÜCÑëPÔŒˆ•ÝY¼8¸ ØL¿iS¡§*‹bv—¢Â:XUö@ØÑº´Œ´áùŽ�ZÂ[Ì�¬ìù[>ؽYµ `¨³$ÌÀÄ;�¼Ù°Ça¿qâÇêì*Þë` ˆ� °7ÿ̲»Â§å…³¸ç}`>‚Qþ8Œâíäfü”€*eœ²Ìà6Á‰ì»ü9‚¯2htX+xÞ‡Á(ÆO/æ,¾Ê«¡[ðc#mÓE‰ýh©KOàùï!³‡ÁN:ä×âý‡”(c—`pÕ‡AÝû=Ù›I ¬ó!á‡aÌ#áléž!ˆÛå”h.õ˜Ý~“c ÷ÿy=¼ nÒ̬#-†�ÖÑGbS¯vG\à ÐIM+(ë'Ö>À5Æ7Cï½öŽÌÁÛ-è0§v­è²‡ÁO8>VA¤Cz?ÎÓ�E7áÄ”Ü!Øc÷c± zE=»·°;­ ?ܺ¶ù&TNŽw••Q­¬~SÉ1Uv¼ï2�M¤3òv·+eÔvü“tÁ?‹q~0ö[¬·æÉ"fC/³¹ûü•ø_õ””³X[)]¹Ú‰=y°=KW€f¡Qä¹ÐñLeü›ïßEµw3ì¦ÕÐ;‹#uF·ÏZ³“];‡v0vÃ2L¡¡ÀÈG›õeÔ/êQºöÅ“n ÍS.´þ<�^ÞZÁöõ6 KâχŸ¸ª—»�\Øgç«UùÓ?¯ôö(ϳÆ;[_•åF°EñˆÆƒó(qÿ.~õ°‹ý®Ï³ƒ:ÓVºggFî¨ÕXs)›¯Ë €‡BH8âýAnw€áxž»|z{]€c†øáyÅÞ¹¤+K¾ékQ§W—`9³¯¢ç@�mÊÄK³ß7áÔ#O[YsnTvz5á4ü˜ÀáÃŒŽ †¥ TéþlIØÐ�GymÒ–p�¾ð£ ¦°l%‰þÎ`±�˜˜j–pü)GñÊ”™€â•¼º`õÔ³l$¬òý`Pt|†G…õ`$êUt@¼˜2fFpïbaÅûN-†‚wø×ÆŒÅ@1rU9?§c_�ÏRÉPNW y‘7ЉáŠÛ/%÷r‘“ƒ±ŸÅ¯®¯R*á³a”P¨D¯‹ÆZŸž@ñVã›:ðvQ׸q}Fe™ô³Y¹V>i¡¶áŒ­p3ì‹(À³”»CŽÁäL°=ð0q쌒EwE¢{ô3�³eÖÚE€aóK�nX+[äãË9⃚SÊæûéŠÂ>¬E�æß䩆“ãá‰�ç?BE®*SÐèË “�Á®¡'h°ˆ|­™ø?±rhد�\�|yµâ3½+�0¼M¶Œ†5üüŽà©Û‰ÒÖ„¢¿*¤3Zp"ÜjÔŠ3F`ÐV¨±ñ͘½DÝȵüJ?^ U4«Æ•¢±èt�å»Síé(«4™Ý*dÉ*ÉYÈ>ÄiI<¬/çªò˜›ËFM¤«g‡E¢¯¿$º åsÝ'iÐØMÜì­Tfº Ff”ØC´ûêC„å\"—b=%Ò‘^„‹þTÎü¼‰èÏrѧHæçpiûíˆ#3‚©n¬CA¼Sìõ•�©¨Ç|¥äg­cõ+Õã†EЧxhPýÎ<}¿è4¹NM©W5Ù0Lt:å}P½$¸´yp„¾ø[V€ÜôMNŒÕ‰HIþRFß/úLþ‚ò{°�íµ¢—Ññ7†ofE¸ V‹Ü�Á�÷<»š!w㤌yœ s0Jß.º~xÇ�PÈEÂꢫ¬›/§•üUØô½„׳ÍG�‚N­tic]™ý+z^¾ý_|îíÒ˜½ß½NtŸÑ©ä/Ç\Qu…Ç\2€äpjÔûáß1ÛÝ€3Úw‹n@#½ª cïg uÑMpžªÈ}7Spó#ïM/æÎÔ¿j݇¸qú�Ü4Üÿ·¢O¥#Ù {,#áÉ)xª¢ëðL÷ÚCõ€]ÁFg hHWÃK7¨ó·NN;&:Ó³ß-:#ñ…CÇ©÷ÔD/Ñsá¥Hû)¹€t†J‰›wzšî�^Ü\¹ûšŽlü†˜èMESRsÙSqZTôŸèYt-ƒk%îÛFxº´CuäðqSc(5Äåso¼eëg“)±5} ¹è¨öå2δ„ˆÞézž×í¶K.½ê%ß÷äçëÖô”Í᫜Çô#çYtŸ^ûªèˆè•�·î`Žª}„­ö|œ‚B•ú ¿KI'$(=@òZt%_éåÍc4"çÞDt'/ÀBÌ»2‘#|ýÊä!Dß–ˆ>þÐ4íC{-4È¢çå2ž7)€OAHá N�¾ —� k窽ÄÂTM¸0Ì‘ƒaÒíÿ ©Á+Bˆ�Xt>½4¢èóä¹bD½L‹p0ÈpàŒ®pÍê:ѳˆèÞ5wf[‹¾‹º–”}dNËGí6î½ïi¢7µ^ôË:¤lßÏTBpFܼïèæýEZˆˆGz"мÝ:8-)Ýû >1&ˆÞ!‰¾Ñå¿O‘ó@’ ¼î P™�eÄ•ÑÁ;$%£t>í…‹nǬ֞Zr ,¸°ÂE/ÃOrÝs^d³xqŠÍËxhõ7…$þĈ½ľ�ü€Ê¬ÂÕ¢O…ÆôçKˆq�î^jÜ›£ÄÞ—c&Ÿm?׌ -Àñ~Å2ê‡DïÑëž±zóžzØÀ¾¹èb0ÞN”qÑI:•úÔ>1Ÿ¨Ý3§p¦K?c81âïÈ'—[ ôÊ{ú¢îÞ\ôh[¯ûû—×ý�÷ç·Ý½‚ýá+í½A0�æDöÚ.C¬j�›•àÌ yI‰Îä„| óïàL†|–íÖk:Åéc3úõ ÙÞÓ2ÑÕJÝWò]w¾yÞªÆäŽ_ˆq"g¡±»œêN½·žé™ÄùœO.›:8ÒDVYItscJEψ¢cêGDÖÜÛ$zN‘™®SËi·üœ­�‚b¡æñæ¢!'>{ÓŠ9ÏeYBq®$º/¨7‡òtÊm5•�¢ÿ>梇í»FIa)þ�Zø} ·Ýãï–pø°;Y ­­$:€)ßÉV‘°ªÏÈðˆÂ‚pb¢¿74.e<ò][Žt\ûÖkúl™-DEoÉŽ‹µñºwNÈ;y¬b4BG{…[zu+¤Gø|\Ó£Ô¶ôüÆðVGHŸC�ëž¿~Íû¼² TæŽ"èm}Äž0]°†8á{âVÅ$\>ÛÑD]J`xmjÙ±­ñ)âÓë>Xge/c›uÈšs´M»µn»)Ó¦/W£¹>UcïšÈjBâ7löiÎ:'™`_ìa¾Çwop/VI¿¢«cA�d§ØfTÜXÀ¦v8“7B‚å`�ƒ9íAÄú™x!½fö�¦¨üPWj©¬æ#¶ÒKnIÔ3ìY?ÀJ½6K‡û�RQ±Œh)ðog"³o_Wà §Nn?ed#ÿÄhŸbFÍý†äy>K5ª¶ê;»~/TWîž¹‹º|Y« .ȘËOÑ¿ŠÅŒ 6L•»fV¯³z¤th«Ï¥†$s´"inÈ­oRýo¤ª…_uH½¥dÁ” «±²9†›SX¦=ë±Þ2%–‡ï±äݞРêáÀhQ\•ŠÐƒ¦S7$=x°ã©¾3‚Öê¬Ôd挪Íå¨1]ÙÁ÷Ýë”Dç²O{kß¶Ûx\]Y;´?wG“ç‹è!¸ƒgŠRÝøÇ »¨Ê>™›]­NºÇŽ öѯ�vß>¶Èœg*´ûA‰t+/Ný¨ÿÿ Iúêä*ÏÓ€6”�¨Òv*ôÂÜ*¯H†ÿá ƒ©ÎlHdUÀ*îÌý*ÕnÚˆtv�û,½f4‡~Îí‹�ñwÄH‴ tÛÈÎÄQJÄ�Ì‹kÁ ™s4&9|13#""hñlš¹ÁPf« <1²JÕ�›'Ù.i¡Óâ­uQž{Wˆœ=QÏÀÕ{£õt‘íQÉBîLÎØKη¹=» ËÒ7&Pý9Eî¼¾»…7UÎÂc YPšÈÈ™œüºR¯|øÜÎo¯„:©%> _´Cì[½vú•<ç‰WJÅ ìch 3 =¬2{µPƒ\ìÎ<ÍÍ ÂžÛ8_Ͻoˆ Œ‰cc]¢†¯|‰áã?ð¨*¶cxáfY˜hÏ%Sš…Ý @c7ŸÏZÛçÁp(Ûiî›CŠÃóÔØ�«±$m÷|ºžZí,U×ɬòt]W«‡ã<èHK¦bÕ?Rõý´éâiÄ~Å™¦Dˆ WUc'êÏßX–šÃ²ÈGm…S‚G(ŸÖÌÁJXK¼Z×U6‡w„K¹Å��èo „ÍÁ þÚ,º¹-6Ì�‘f“hÞï÷×�‘zûk_Þ±—§‚(:Þíôo:ú='^K|‘šÙœD¿¨}å“Ë?;Ëô�…a8:¤†{j}ŠS`KË^/–lï‚çžÆ8º·yN®½­#Ü{wü·Þ«J_b¬ª±„Órq¥žj-íaëS(Ãã,ä៼˳­÷¯½û?~²@þ¯� ªªªªªª*ìÁ��ÿk#¨ªªªªªªªªªªªªª*ìÁ��ÿk#¨ªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªJ{p@ èÿëv*pnO›Êô’’IEND®B`‚pydantic-pydantic-e28e879/docs/logos/jupyter_logo.png000066400000000000000000000246571526274674700230600ustar00rootroot00000000000000‰PNG  IHDRôôü/¸ýPLTELLLOOONNNNNNOOONNNNNNNNNNNNNNNNNNOOONNNNNNJJJNOOów&NNNNNNôu%NNNQQQNNNôw&NNNõq"ôw&ów&UUUów&ów&LLLôw%OOOów&ów&óv&JJJjjkMMMów%ôw&NNNPPPHHHôx&ów&ôw'ôt$ôu%MMMõu%NNNNNNôq$NNNNNNôw%OOOóv&OOOôx&OOONNNõw$ów&ów&PPPôw&NNNôw&MMMõw%JJJôt&MMMôw&ôz'ôw#OOONNNNNNIIIôw$ôw%óx%ôv%óz'ôx%ôs$DDDôx%ôt#ôx%ôx%õx&NNNów&ôw&ôw%õy$ôv%NNNôu%õt!ôw%õu$ôw%õu$óz'`aacddžžžôx$ów%ôx%vvwžžžJJJžžžuuvvvwSSSžžžóy'VVVžžžvvw’’“ŸŸŸ���œœœbccbccvvx___–––vvw444œœœúCŸŸŸQQQvvw   ^^^ó|(`aavvwôo$���vvxŸŸŸ÷d   xxyó€'¦¦¦_``™™™abbó(abbõk!abbVVVõh ???���bccö\œœœùJsst`aaEEEó�)ôm$bccôr#§§§ó~,vvx÷Xvvwó…+ò�)žžžvvwuuvö^���wwxjkkKKKJJJFFFvvwAAA444333òŒ.GGGzz{VVVñ�*õh!???ô„+õd!333ó}'õm"BBBõ[ÅÅÅkklŽŽ�ò…*ffgŠŠ‹®®®§§§ˆˆŠnnnkkm‚‚‚ów&NNNžžžvvwabbLLLOOOòw%óy'òw'óv&PPPóv%ó|(òv)ó(���RRRHHHUUUó{'   }}~šššò‡+———YYY N}?ätRNSS8N4ýÃÙ�á^V?û#èÊG*ò¹© ÚÄ ÕÌ-ôãªs‹ûí“BÞ`( ¸÷±äÒ¢d÷œpm;´ž†$êТH¿’hOÞ—Z&¾°‰€z[9. –�4ï¦u71ðzeWT&|=›S1ãÇ­lÝhS>Å¿‰„rfìË£•„a& š3 ÷ôóÒ¤øìéàÛΰwupMDA.øïËŽ¬¢—“nj:+#×ÑĶ®„jXREúåѽ°|\E4þøìኇVIòðíØº¯®”’=ßÑ¿† ÎÀª¦¥šƒå§¢�Èï~š%}IDATxÚìÝKhQЋâÎ…� %‰)± Ú ©)…€Äˆ)R¢4nšÔÖÚJª¥õÓk ºhR]­àB(R« hñƒUDE.DEþÀÏ…ÈdHÚMÉJSÅ“Éd&Î{ó΢ºi¸¼÷î½ï`†a†a†a¤Yvdh:™LNO?8Œ\I�ÇnsóFOß½7´ ª]IĹ?ÅŽC­è§\Žû—x*]y—ã†>÷r9®��G€¡Ë•8WDîÔ404™å$¸ =’œ4Ç�¡ÅNª÷ÀÐ!ÉI7 †¸äÎC¾££\IX{Žo¸Ò2�8199y}øâøJøOlÁF+ªAÌfEó o—”pœŽ}$1Áÿ4vb*®þf¿ÕV纡|§)ØTÙÀÿiê"TÒ�Ö–Z¬ŒLSWÀå9ú„ô#3ËüCþoãP[·õ›D+B oï{ Ñ\Žè�–è¿€aP_C[ĉ•' '«‚ ß’‡£~[‹IÜ¿°É ª�}‘št ÿ�4ÖV= ׎œ¹'Zç|!SjFÝÕiÒø?¥ï`ŸIó×Z\ÏøÂ&@%îV+j€€hx±[µ×g>ƒ�ðÅ\˜Úü˜F�gK°ä*\º�Öâr0Å¥|éfë²£ÖÔ49’±…«s�öÛ¼ËAQ�¦PƒæÎµÉªw“ñ�ò3ÝWÛò�/îáyPŽÉ×$j2äˆbV0ïï�U½=:ýgÄisbÏæ%Y ñl·§5³”ÿ“÷¹[æW0Þ»�ÅNÅbñ»÷’Z¾©¸ò,/É0(bsg jŸxáȵj…F§ô_\ä¥Sâ£ìé¯�Aí…,º€^“¼DP.[#ŠH ý€RùÙ½2óûæF$�¿¨4ÎK5åð<¯Eòd{€By©ÆV€l¦^�ÖhE¤Rýõ@�a^2ù5È!ÃÜ9«ù¼7veNð’-yMH4Ѻ\ç%9l!mwb$²çèJäKzJg¼�$æEd²ÙFУ„5}Jv³ŽÌüío3=> FBÅì½ÞAKÈóf,»�KÕ«Ó}$tÙKÒtáUêÈÙ,4 óof¬ Â”:½÷íH%±Ù�šÉ�]QÒ0GJ‰u4 ö(/Í �ÎG|i^H3�oBé*Ýã§ 4/ eݤ祘”^›;©çóº�tŠvf:QR×€lRª¶H㮦¯Pû—¬“ô|®øžúH³®V1GL‹Û�lkk@’çz yÞì³­@´ÉÂ1�‚õçæPG2Ù—„7ã í°ŽI‹ù­ÇÙ êL/mõC~ÒævŸž¦öïˆoÔ Œ••·w¢@ì)¸2¤«L@²•‰³ü_®GAŠ­-¨Si³ˆ¶61õûb~b$qSs@¦tiï- ÜxâúX~ÀŸ›XÒ¸tS�ÿ‹0Kx:—·lm4]³$»?‹ú–> zÓMî=Åôƒ¾t!ƒéèÉzdò®Rw÷iaÏôœÂýjîÕ&Љª,[Ï¿…— Fj�?Ê‘²Sx©ù/;«‘ù•a3Ðn§&žuE-íì9 oÉejÂÿ¥¶Æ`7[«--~¿?r8"Ç`èëï-–j«Ùnè©Å¼T*ÿ+ªgÐÌX�Tk·Zª"Íûµmsír{6™Œ ÿc¦M÷.×¶¶`w¸Ño±Úk3{\ÜIõ ¯zÌEDôš-‘p÷º€­Ãr™:l®¶îpÄbíP}Šsx ªeþ QCu$ ìñ€’ö‚áÆj;ªÊNúáè=M£:¼u¡®Þ€Û*Úìêm4{Sê¬øi3¥½¹gYTV  U�½TJƒk]s•=#`Vá#?©j ÑóÙ *Ê\ÕºÎf‚Ê3îkk½V' ²Z€>‡Q!",á¾ÿ]ç¸ÛÂ*(´94ƒÊëÖj×Êhj÷­¯C…Ìt]¶aùRˆÖõ½Ú{vÕ¶®ÑªLÔÉ¿Öú+[ Ë! YíŽà>Ð*[ÐaDzÍö=œeñškÝ»µþl‹±}{U–E(z5ü–ÃÜ¿—”ÖEÃÞκ4Ê&âcR>iQþ,ÊfÙNÚ«í­L§”eÆ t¸‘F9R)lñ‘¹ëèöµ³Y”Ct nΡÞP/ÉgJê/]«•µK—jòí›Aª‚俟ü…½ûwq"ˆâ>ÿB Eð‰$)6…ÑÃJ‚à‰ˆM£ç)QOEOïŠhëŸ`%\q�&b¡Xˆö‚•í·›ìnš)$¹ãòã’Íîåǽ·™Ï_°a3³3ï½ySy�Â1è²à.™õUúR\òËW7«>"’ç®cU#š¥5n+·`k‘è%ÁÛº‹ð$Š9þsÛQ圃H. Îîi„&åÒz\ HV^.!}Nðuÿ)Â1ªáÄr�w•_9Mžl¥Šëy»{ìW/!†{a}\]BJ5ßsžÎ¢8WÕ¥ñAðtÆG(ã|ñ ³9„á6j‚¥‚ÄxÅ�Ob±œÙÉ`<Õz+z Ìx^þÿÀ[t•; Œe> ~¾µÈ4[»{ s:{@i3‹q¿+Ý’u�Ù=Þô&sj=‹qØmh>´\�ßú•·%7Æ­¾\ä^_øWÞvj3¯1·û?’y(¾YÔoù ËoŠñ™à¯ ÀV?eÆVnÀÇHiÁÇ=9:ƾ¯ÌéäžÜ6…S/Ñ‚±KóþÆ;«r<µÓÊ`(Ïa¢yi0”ŠÓmâSõ±>b˜¨‚‡Š�ávØümçîò h Å$1qËÇ0§™<þ Ù®b¨¬à`xüµÈkÏy^gønÖw=µj·iãUrªi0@½cðQ\÷ÜÁňÎ/J‘Ĥ¶vqý3/—�F?å?ŠÍ©¼™+í@a€¤w$Àýtý§°Â+'ÐÅ£Ñy…~r5®eͳò6§ÑOn ÒnyèãØpLtç2¬jc· úœæyÔø¤­¤Ð§õQv =Øß)z‚î —['Ü{¥Œ^™»Â:®ë ‰„ïÚ/à�i¤m]×tH‚íªF›{]XÓµQoºtBP³aä kÚVö‹‘èÍ¡¯ÐVˆK×?ZJŸÑF­YpEvžÊžQ›‘HbÑ�‡�×Hn%ã¡óÖS‚’äSÀ·ï|–n@’Êa=ó «„s¾q�$©…e¥þ k¶nRš m– =N\¥B.¢@4ó/iE§ú”›·iµ¹øÑ ÓjqMÚ¢×ù¸ïü4”òä⃱õé‘ñU³¥QóS#Ò…Æ~ÏçÉ®˜-˲,˲,˲þ³o?/J„qÇ?¥Öæ�\]<âÁ„Ö“(Š„{Ùƒ»{ôäÉcÝ:Ñ1èôGDÇþ‡ŠŠ‚ èø¾ÏÅ“z‹Šfæygž™Ô~ÍÌë´ ;«óžg~=³‘H$‰D"‘H$‰D"‘ÿE1þ‘)æ+Í™¸‹HHÄâõ«GL‚è"¡P¾z�~ˆ¢‡Fƒ(Š6Å£(zèDÑC(ŠBQôŠ¢‡P=„¢è!E¡(zEÑC(ŠBQô¿§šH×7ëƒJÿR¢Œ?iF– ¶›fòù|¢PÄn.Ò•³öi³‡ßïüì¦áìfʱcÃ8æQãnÅ’‚“†¹¬XªB­9¤ï}×iΧp•OÇM—âðV�EÊ'†Ëye¤÷cYÕEöZ�týtbÎÌÎr¥þž—¦JñJÎøö%ü~M’²p�¢ë†+”†ÖaIÂÉUsY4‚o’ ¾w%& gà%AŠ SòãÊîÊ©f‹ìºó1ôRëûâÖ2�á÷»¦|ÅôH:‡ÖY®ºD75eòÓ&ÁÜMÃQ�#x© ¹Ð¦²_bpS¬¼"G­ú1tâ›Ñk×ý[ÑS$¥wŒ^Úˆ>n“+ÑÎÂÉU&K« I²ˆü/F¿>†‹Úl± g|Ô‡Æe¹ô,¾«¶Q€£ŸÙ_O?䊹•‚ƒ4Iœ‚Þe’:ØSôDŽ™Üq» WÓÅâ§èÙƒ%:ºµ«]|W!Azl:²ú‡ôn’eýzOÑkk&½InbWH�Þè¬9ØÑ+dràë]sÞv¤´†dYdw�îö±™©Ž pqܲ–ðyÉìès2%å Ô»… Ydèd”w^Å^¢—‚Ãf%•ϧ§-&Å»"œgjôgk¢€G¯ÉUUF�I5Ë5Û¹ m`‡ª÷Vd™@G®T^œCJ�/Ylh“ª¯ÂÐè©Gz~gÕ¡²{ÿø…½O¦Ç˜.Hº:?)⻋óÑ‘¤âÛ°‹3I'Ð�‡ÿÅ»2¤FÝ4"©yóÖOΊ°;c5ù?9Ÿ0?ƒ£+zï™ìFØô_Gï‘)yñJF/]†¢1)H!VÇ›-—òåÜåL†µK„¢mûÑ»KR2»ò5öºqt8!#¡4Ÿ\«Å3ÓB&‹M‰ÞéZ9N°9‘ŠOa7diÝ€+eAœð¾¦»²’hVá Âdà YÑ[‡OÙôg'Ðø¯£§hƒ¨9(&iu6c’8 7‡3²`÷èê7,ÐW§»úedZ‚¾ae¡õ_G?'»VŽòju1ÔNœú¸åÉâþ¢Ï™Lm{—á¡v-Í~üÄ�ãð¤è‚ßM]{1I›c&¯n1¸( 2,¸±{ô+2uáNžÍõà K?ë\ÀË=M?aq®j¤èÀ®CÞ—êå#2-ÚØ=ú¶¶ÖÜ}\-Œ?ÚõŒ.øÝÞ}¥]Þ)ërTØûR=.È’ß=ú˜�˜‚jйGFt1õŠÎ‹;ð!8Ñy�†’UœÂ昗½öîÔÁîÑëúór)¿2ÞG¯è«ûð#8Ñ�n@k@Š1lÚì|«V*·È2Ø=ú�ÇÖ.¹½ËC¿>z¾üÏÑ/‘Bô!yE£�7ç=7Ÿs2‰åÅîÑÓ+kÂüz·tÓA9’8_}øŸå&ì:^—êmu®e÷èOÍè«'ðÐÓ ¯nÃà ¸®]¢‚]à©+4÷Å‹WH:Ö}p~\Þ9ºüì ÊÂCVsã(NŠ| Jt>€·ŠÐÔÑÚ“à¦õòòv�~“ÍèIx›Û£Hj£ÏnÀŸ€D§kð–Ñ>L‘!¡Ù„WdX?ÚCôœ2z½4ä#QǺè9ø�è|Þª-Ývu6Z$`Ócåti÷èÕëdX~ø…gí—�4ѹ]¬ßÀ‡œÐ•«1¹Ï–ßc9‘·‡è'dGÉIRo(¯ßêFú>#:-?‡k2ͪ°k,…륺ÜÃòº¸‡è)¦mpZ½Ÿ�ð¡.´Ï«•ȲH»=â²þ€=D¯Ðvzºèqø�èt>ô™,Ý>—ÖŸÜþƒj�ßGô[´�»ºèyøªè)�kÚ ™˜.ó1Cì#z›¶Ó×EÏÀ§PE³&ˉ~O°¨AÑ'Ë`/Ñï1me®‹~ŸBýÒRÿ òBŠ–Ï]f5²{‰žÛ2z%éÛ�t!ÁÁˆÉ©ÇúýD§íÌ£è_Ù»{%‚0€ãÂ�Àf  ’ ��@È B¡¸;J*ª+µ³0¹Ò˜X˜ø쌱ò;¨Q ?ÃS<Ólv_N†�[ffÏËÝ.î¯Ö{ûßíÎîÎÌ:>§ó¦–õ\‘Œªvs­¬øÍDïàõ”üèŽG絛:d7ùÔT,`wý¹Q&¬/ëùè§·}€Ü¼¨ZrÂBë§\ÜÜHôr[B.ªœ^ÃWµ3z~3Ñ�r•ÿ*:uo;zDøˆêoàG}ûlEÁitõ÷v°ÿÑO‘ûQRD'Ñû fÌ-å�:ŒÜ¢L‘+9�®~ôC�ý�ØØ¿CêãB?: �Úsdüߟ©§×Гí‰T÷ë âüŽ\{ÿ£§‘£#�)|°ô£cÔº›;CÙëòèŒÆ›cwz 7½‚eö>zuwõy†¤� Öâ=)™… /ø§µzwf˜õåÆ¢Ç™0ÿcï£OÅ+a‰€åd ×�zdnJ¾¶yûí±£qX/ú9ËÜûèÅ®eTû»èGoAå9V‘œùùÆ-ôçÞX8¹¸ “Vt8Ƶé¾G‡¨î‰xÈ�3%ѵOê&r$»Â{·ï$ß[³¥´æÍ§\Ëï}ô!×’þ] &êè'gÛ˜ü±Œ¸"ù!#üƒ" á�æïaŸ�£Ô¾GrÉ¢ü*�«¨£cäLÒö•ùˆÍËÂ)þ4dÏAEÇ—cî{ô‡D:+k{ ‡Ñcú5p¬¹èmq>,ðÒÜg‡w6‰sBnùvÏ£×9jÃÁ%Šѱ œbÙ© r½¢0öÓñHø�6uѲß÷;º8NbT[…cB©¢«ÕNP�ÑòQku6b˜õ$jÞÀ;Ã5ëýl¿£ZbÎ>Ø(¾#†ë“<ºú´>BA^ÿâ.™îÉj‰Ê¦1Š áò„/žïuôgDBôf®ÈDqÓÅitõEÒˆáÕAÁÈá6 �ž¼ö0#Äp�-ìst0Q@¹4lé%-ÜRÑŒ¾€�à„PpJUÜBCÐÔ%íEó¯-BAµýº§£‡ˆ¡€Ž¦°V>åOÛ1ü‹U5£#™iØÖËYâ'Œ€Ú”$ÓPåê( žê‘’¨Ý5À^ªa\}¤¢¸�Q«;«—²ÓøI¹ðW”Ñï/ðQ+T€µZo볽Ȃ†¡ˆat=AË÷á’‘I\I:»ÀM±Ã l«…&"áÀÛÑû´UÝ"lÆ¢Çsõ„YŠ'ªè¾òì±Q7�ªgk³Àí•tÑ›ú ò´¥Q@„ÑÖÉÉQ~³»Ðˆ›¢Y9í§jµT*5»z|˜7“«‘¤k£çµÞBö’nb ·äÅ“ÿ�ªL2û‰Šš¹$Ú§Z‹³äõEh‡†éì1Q3‰¿�µ qÓ/DÂ.ÆÇ*D6¶éÍ«¢Ó¾.Q…èhª Àê€ †¶rYÉÕ¡£„¢Ëæ*¦.Pnbl|°–2zŠïP%—])†‚88Ѳ­n±ØH -†ZJn�Þ`zO@ÂM”Áo'–0EB=¶0a(ÃÌ苹Äíýns¢¾X›XêÈ»5úD÷ô9k«äøÛÔ›]E¶;9@B¶;€3÷^X„œòÐWzÏ•ˆ\ÝÔÞ7›_�]†� \:_E§¨^t“mwFÔš�#qF‰àÐôrÊCßt¤ Ž c·Fï8(:H„[,3+¥u¿¢^t0ÛvÑï¿N€CUq-“sƒûK¦Ø;Dt/Ÿ”Fo„ °sz÷;Q1\{*ZMbÂ_#Î_ÙøI¬èF(>~‚H(HFJ)pÊâ ážUçâ�†aì Á’‰ÈÐÆprøª ;¤ÎJ+gc¸ÙŠ‹�Õj§'“öŸÿ”‹µ*¡,H¨¢sÓîѯšL6síN¾ºV³ÇLXÓv=Å@µmÿ5óÕn”2Ý‘9ǵä°ÓªvEp· �Þ¬ƒžr}:›M³È©£‹ÊÙà¸^,ÃuµIüÐ×gü3‰P ”þå^f\/õÃMRG¿QÝ»ß|Ó3$]~à™èFîîÇÄžq.Ÿqê™èUæÿ¡kI_d ^‰¦»ß§Ë;֓ՙݬ@¯Dÿ(>øñÉT<ýåÿ²–3ðÉõH>ÔÑÏ—®_ªãsp¶Wy"úç ä–YðÉ%T‹H¼=MÈYgàS8f¸Âú`ÃÑ¿\0ñ=õ>…ªò2î�Þµ�cÏÁ§ßœ%ÀŽë£�!·| >©é׬ØryôqEïÀ'SÙô(#ª°›K£Ãn øv' èIdÜ=À�c4OƒOµgÆAέыM~qÇàã¤od¹|nYüÆÞ>8±øÆGþ¥šR‹!CÄÎ(^‡[—nǸ0ü‹ÒD$Ë¢#ÿ6œZà zØK§àN…²q©\ Ší×ÙûQ|ÿ�!bäÜ?™ÿ_â¥)ø|>ßOvî絉 ŠøûriI�$‡æ�T„ B+¡ˆÔ^› FìšÚzHzÍŸÐSo‚)ôP<("¢ï< þßÛÌ,»›‹‡¤mj“æ×nš¤o’ùü»Ã¼™yï͆ÑÁ>ãóœXx7OƸ¤·ˆ…«DÆx|xƒxXön‘1¡÷³ÄÄsX dŒÁ¬Ü .’ˆFȹEû;±Qˆ…ȱŠ]?&>f Ø,6+«pÀäÀvê‘€2£>Z÷Ä b$<áG)+ñš8y!3»¹‘I*�‰•œ`/=$c$*`? ^q"c²4#Ɖb¦€S©—d Û~ ɯÆÃ)É-é/—P 7‰�8%DžŒaZO¹8!wˆŸœ‘OÉž’Ä™»œ3çò8—%cXVÎØEâ(�U¾MÆPÕÐ0dz�9�ÿ»d\Ýí�®ƒž�ÈÂ&]=ZK[øOñœè-SŠUm@KǶ´Á}¢%pAÌæÈ\([Ã…9¾ îm4»ûƒŒAmDÑDV‰¯4sMˆÔq Mœ8çúeÚuÐl‰Kî^žÕl4qßg‡ÑêA¥K´°ˆµu´ò¦ÚPQ¡•à~™$‰Ëâü*‚œ¾ ´’Qbî6ZÙxu‡ ŸªŽÀ%¢@ÜUÚl>"Ã�Ý%)m\ò„øK¡�ûé&ý„Ší„qrÅsp™ãplàe;ƒNôøq‡í¤Š¾#£»\ Z×Îåê:ðä‘�êšìÌ¡3]zÿÔщ]‹óÎ,]Ÿ•(:²Å/ÒÅ7�ÎjQîy†ë°¾¨Ð™ëéó OZ «ð:Íî¼P6ºp÷H¯Ð•TY^×ð®WhuÝÅH#‘¸BWB-›]ÃV½è5=V<ô¯òí£|T Ýn$=ôd=�úa/Å”�^ØZøÆ°smð‹ü’ç¡'¡_êzÅC?©Õ©]ÛçcÊCk¤Ÿ,ú‹/OcËld+*úPeÒQ>Ìe§íܾ°c¡?y g|é ?©ðD—ôò0Ü(¦àƒã~!=­ÖøÛ›’­|º¡àƒL’®kðɪNþâþðQY)øó�´µÿÓ�?ve›&ÙÆrÊSðIñy÷7¸¯u�©ê•vô/’ÆoB§:K»*‚X,M೓…bè» Ÿ ÃA‰eþ¿AܺC0"Cš‹XÁ”×ôK@v¶0ÿd�(©ÿ"wÃE`³oõÿòÈö«”-%‚q¤®'ôfó ÁÉÂ{:Ÿâ"+÷- ¢þ‡&Aú{¸¦çUç…RÖ ѧ²·°‡�8®ë”wtÛ×å¶*›èaÂ7qçB3¸ŠÌ›Úv?Ïâ*žÑ¤øÇÞݼ6DŸ!ÐChJBH‚$‡$-�B�6” %í%McÑ6Ô´h­…¨„ ¥—@)ÁR‹Ò›ˆõ Xô?¼(‚zyÌe?ˆuYbÀïOÒšìN’�Ý÷;ôÖRxdòæÍ{3§= ‡ Wíó†ßÀ…£!AÌtÿ^îÈ GY¯oä.1ªÈhÊ%‚^¼Ü[�g ‚n’숞3^Uº4“Ž•EI�ʼ5BþÏÙ� ›,Š @(zeÂ0'±½çS.°!,³™†l=Sç‡Hg�f/;DQFäAb>‰C`èÀa?ÕÛM: ?�ºüì"rå1#û!°g³§ÂÁi—n÷ܸ/霆ß�hÓ#{xB—3áG­­ÖäçÆ=h á1?ã©ÍéJB UÄk®Äx8莰ý§û&fSvÇ,€P†V±™§(ó¯n'´�üãf¦Yg:1?uñ‚žèôåFGæ']^h­Ù!b^Ãh‡aò„\ö±…L<<Ì»Otÿ‰îïÍoœ™ŸŠÚ/9ßÿH{xÌÒ?P߀ÚJøõÃï±…œÉKiû˜Ï7�&“ ‰Dô–Ï7fO_r9¶Ùدß ­b|ž%7êÇ“?Šeè4�ñŠŒ¬ 8ý)`öÏùWg’€~ ˜ûûü§®K}#°™9oÿKZô•x�›öý^T}ñĬu¸º&؉µŒ `qåÊ4±š‘Îo�;ëãKb=£bÅÊq—øžLÕjæš–%ŒkŠÜû ƒ5yÍ_z=Ò-k~Ö…Kß›˜+Jk›»j€s®¶Â§H éMZj‰/‹¶ A$"¦#}qE°ÎL† ïrNklÝ$�¹ïÊkNWT-÷4>+þ—s1“çseQ4ÛPª~î�©‰!ÌÚë˜3[è&¨Ž¼y[&m˜Áé•I[&†¹EÁˆò.ómÙ¯U�Q6ÿÁl›·É3ýÇÝûfZãå$&í Û̲ÆËþ,A�9“LÐ,[%ŸeæWXÈÙ�{RÒJo�1qÞP3ÍÍ“Ø+¡Av¸%Ê)<7×$2u\’Ê>k ·ÄÐpH4ÓeÎàöoÒ¸3×-ÏWØÓ˜²3qqø €CÎŒ;êãÇpagª/#EHäbl ë£gEÉö€ÿ×�i. Fm�ü¤ñVùØ4fo-6<’6Ð*/€+nÞ[»�df*Æ(И¯×·²¿¸\\ZZ*î.ÞÜ lܘž• £$ìaKß-p¤ýÝõíMúÛfa§¸OXˆ„ÇbrÇ/CÏYl�¨çùímZOaý9aáô¹1� ÷ÄqƒVOé`�IÙÚ-úOEmÐF€g�ë‡Ý[èÄn�§Z]-–]'§\Ð.ŽÄylŽ8Âò6ý¿Â2a¥wd:‡•Š ­Rþ(Ïb¡õH¯ß¨´êÓ=ÂLW>î»&‚ì xí×/âhÒ1TªÐF(*]&LÍ„S.°sDã8rz¼õj•6n�° Æ£ÉYЭ\©ÄœÓã'±àö_+k´9k%ÒÃáÌ 3šH~‡}òÎ#ÌÙ²Q ÍÚÞ ­Òïž‹§]^?H‡Ð[Ò>™ OXè• Ý6Vió +¤µºûÜ'ÃÙÌÂåtÒá xüð'¿'àu$Óc‰LöÜèÌ‘6ke•j J¤mº†ûû†Ü3¹|~"ŸÏ͸/ôõ›ôë6ÙV©&[ñjGU¨&ê:A|*RÍ”e‚x´§RíÔ ‚8TÐô5‚øó¾JuPT\àùóZ­R]VOÄ™· Õ©H_6¨n›%‚¸ò®FõªîÄ“Òf•êU[%ˆ'5ª›Z}NG¶ÊcyòºÆ$踾óä@¡LìÄ�ªnÕ¹V lìÄ‹=ÊH� ^,RVð€•EʆR»I'Ö)#Õ‚8±CYÁò;7Ö(+KqƒnA[”•ÛqƒnA¸¼[ÐS…ê€Åw.­«”ìƒæÆeDÅÞn,SVöâÄMª’ðæ¿�n²nÌ‚ÿ\ƒ-Œ)«":t%V'¡gÂ܈×,+*ƤTa#ï$8mœå•Ž+H•¨&yÎì(ÕÔ:r,òhHØ ‘]¹�míÅxïMî±ÂÛ_8�©Yçœeº Nø’;ñy‹í/@OIEND®B`‚pydantic-pydantic-e28e879/docs/logos/microsoft_logo.png000066400000000000000000000120321526274674700233430ustar00rootroot00000000000000‰PNG  IHDRôôü/¸šPLTErrrssssssssssssrrrrrrssssss¤ïòP"ÿ¹ºsss¤ïòP"ºsss¤ïòP"ÿ¹ºÿ¹»ÿ¸¤ïòO"sssrrrsssrrrmmmooosssrrrssssssssstttrrrrrrrrrrrrssssssuuusssrrrssssssssssssrrrtttssstttrrrssssssrrrwwwssstttsssssstttssssssssssssrrrtttrrrssssssrrrssssssrrryyyvvvssssssssstttuuutttuuuqqquuussstttuuu€€€nnnrrrqqquuuqqqpppuuuwwwrrrqqqwwwuuuBBB†††wwwyyyuuuwwwsssPPPHHHºqqqqqq���xxx„„„zzz999EEEzzzÿ¹eeexxxrrruuurrrXXXaaacccfffAAAuuutttfffxxxjjjeeepppxxx������€€€mmmhhhLLLddd„„„bbbCCClllƒƒƒ{{{………ÿ¸jjj¤ïòP"†††¤ïòO"»ÿ¹iiinnn¤ï|||»ÿ¹oooWWW}}}QQQ___JJJEEEXXX………jjjQQQLLL¹lll¤ïòP"€€€___òP"òO"UUU¤ïòO"xxx\\\fffKKKsss¤ïòP"ÿ¹ºrrrtttuuuppp¹wwwyyy|||{{{~~~€€€nnn��� ÚYçËtRNS(ü–ê$.¦†òòòòÍËËË%××ËÇÇÃð°Iw¼œ sÊCô1XM5~Ç*ñÖkPîágæa\š˜{"÷«ŸŽnùäÐÀ°’9Ù³Š:öÛÒr¾T>'þ„dA�”�Œ‚ëßÞ£wF&þ?÷ô¤£U×Ð͆ZUMäØÓ̽¶®ª¨œTûðÙÌÇ»¹´š�xomji?22-ñîìÞÛÕÓÓÎÀÀ»»¬ª©©��–‹€€zrnc^JJ?òéææÒ«§™ŒŒ€jb\ñœ1dIDATxÚìÁ�€ ý©©`öà@ÈÿµTUUUUUUUUUUUUUUUUUUUUUUUUUUUUUØ£c‚( €›ˆ  "˜˜œböeO^‚�±˜X�\ ?[|3- @Ï^˪u›M�UÑÔèÄý]õl³Í÷StktâPNß¶Ù¾œ¾ktBz é�¤’Hz é�¤’Hz é�¤’Hz é可ëxÎé~ìÚÉoaÇñ§Xµ^OB˜I“!丢×��S.ˆÔot;Õ‹®#PqÖitÿ–å‘mÉ Õƒƒi1zï¢Ø¢ÑªF[¬ðU±Q Ýp ­%ÓÛ"Á�Ñ Æ®U5á *I±ŠA™œ�ØїX –¤Êì�Pi\L9nRœÌmŒ3³Dg½TQ׋¾ ‚Œ‹dj!†<™7ht§ŠœL/úÓßÈ»FfFþnzt`ýˆÜI…l~ƒDgÛ¨’“¿ ýÉwäu‘™“! 5Ó¬ ÝvRLtD#NƒD£ ʺџF?M&öšqä°•¥_kø~Àf£DGœÊsœaºÑ?Ii(\¦þù~…1¥yÀF*^kßnÎ`¥a¢WеÐ�NïdäHÈÌ6CÁ–‘J[6¸±¢c/•u‰—‰~òf0ùû~2µ„©¶Àxѹ“Êñ¢Ü¦“¿à�¾¼$SksAáš(~ʈÑY•1͵£ §»G—]½Aæ¶ÂÅ™ :øAÒ7±IsÓëM„!SDG#é{)/DWG_nàèƒã:Hד f0éVd!ºá£�¬y?é“fH¿¿]ˆnøè›÷C‘N‘Ž÷fI›¯g Ýa§ÿc—~ô”�¢3j†âÇGÒÖ›[tÈHžsô^oGxµoOwÐã¶Uq«éØX¢�4ô$Z7Xù¬ÁŽDoÅwiñM÷�„#kv¬ÚžpP)¯'¸ÚwȺ½ur‰þô@h§"(’ó=:6ÒVädž�6+Ç,ž±Û47ýó «B;„£cÊÙ ¼ûñ- “V¡'`ûÊÀàjo •µëšÆ-:Ûž }“«8„P2¸Kçì¶8ó͸e(ÞZ4Ð]ÖF!4F£« Äš,PDbÊÑéàüŒÞ@qä¤å}åÿ‡bë©'­ýNþ¨WóºT$I–�aeߣvÒ?¾|h¶ cÛ|)ÒäîçÕ\LôÌN˜Z ê¦Ì�s¾F÷B8OZNˆ©h¡]ЊÞaié‡�‡–VÊZ¡™hq;òZHhY M,ð‚4X¡åëÙϵO�ÅS$´cn†çkt‡b«�4Žó¾»“¶Šü/’Nßg�¼!û¦:6í~~&¤I“oÞÝÍ»› ®ïëÈ*--hÜ€ tëh¨)+ìõ¶ änéâܽ ­Òš2JKÇ3÷!3GÙKoZãÐ>‡£3z�ý`U‹3øÕèÌZ|e@Üfõ�3{tÂyÅû?>~¢Ùtô2 MÚz‚b�œ×ÀР÷G~îHŸºHÙÓœoRw ÍF0#Ð�É_�ÁÕ+³.h^kþ=z²LzF[MGÉæÍ(Ë�ã|ï—AØ]êç{WŒîßÃDô‡�ض‰‚ªÑW›C®o³â�´hÑyQúÌuÆÛîð½2�†½Á¤©l×ðƒ“Tì30ëÞ·ÇB#CC¶LvŽd#L«mEánˆ*-?h·Ms=¸>á¢Cš(ô÷ý`v|bæâW|ŠÑÓѰµddÑ«2$Úƒi ûƒÛÑ´WâƒÁ‹Êø¸£è­‰ýKÎ$óÝàa§M~ ŠÑÑ�ZÝà0:gc@ì«Þ];Ab+]��Bؘ1æøDQÅPà ašÌv½6£û_¢Í¥F0Ԅľö�ŠÑ[5œFÇ÷ÁÊ¿ É^�²×ñ-7z~Q¬a(”û@¢“!)œ§Ñá$­Õ�õ‚@´,£ÿvžžù©�N£kÚ7`•ƒ†|�)FÒºÂêM£ø Q^Kl Hmc(”9‰¾Hý§×¯Póú{öá¡kÕúP=úÙ�¨®��Þ¿³j…èöÏ;Öƒãè[}`5®Ç\AoG’#Æ> =õH­@2ê ú%Q¢¿õ»ªK!ìµ?T½¦ž¤ øÕï´Ù~ÕèOR-Öã(ºüŒïLÑÍÔÄÞ¯„0�eÜÄš¡’Ç<ò»I£ƒèWG‰~ƒrôk ìzåè×Å½ÚØ ˆñ@=£·¬GÒé8º¾ˆ}¢…•‚\’!˜Ö‡ìîž:°Ú‚¤äºQÐë�DLÄèÆjŽ�ˆÏ2‰g ªÑ(°ÖÇÑ'Ï€•›ŽB:ÈU!iši£1´*ï³TŽBÈÕ2ºDOÂDŒ#(Ì,ÌîÆû@5úWÜ´.výŽÈ)ò"ÈÝ‹ËáÓF¸eÚ‘d€\K9 þy=ɾÓó31ʆ•£W!Év]¿ˆíî8¿änc‘›Ÿ„ÚíùH6’J�ó¶¡�Ò;zqbF7ŽÐú ì��SŽ^ФÞQtù"܃†ÚhÑeëç/&ÐŽM¬¡Ç±IÈù+P(¯›¿Ñè":?jAM =ë߉pýy�²6y¡#•ˆ![;º×ˆ¾¼7vtO‚F÷-££É÷À£œfEf=mÑ‹Ñ�r_i(¤‚Ieû®•4$¥ ·Ø´N÷Íßè°ŠÆv@Ý ˆ^êÑ+‘TÄ�~QÒ r0Ú–xUÚ%‹5Y rAºk¶bG$jô$;`œ‰7+E·Ÿ^’éëâ‰N›Ð¤ä2�d�Mú† =Þ›SrùHæst¨OßLsÏúîÞ8¢oâ(œûZ=:éBA_ rM²c½H F7Wç·BX2’>�«F’<¯£çÒs³ýY.ö¯=qD¢0ññ,¢?lÜÌ; w·}$<áaM–ym›Ë| µ^:¯£ûÊi¨sÑ¿‰':l@A@1ºü©½ä™±)ŠÓržcßy· ¤V#Éw=?a£Ã†6l;Ä=•IRªGÏEA×î™ÏÏ™7Þå:ÐÐ ,nE’ 2;'iTŠO-z{‚E¯E;–_ô IWüÑëQ¥�Ì«ºƒs§ ²ï“Y´$6Ó쎾DïD’–`Ñ¡�ÛšÖÅ}ñ"ޤ@9:©G�Ÿ»"�Ù…Âîˆz¤‰Ù¼|Ž¡À(ªÉÑ�fú¥ÔFzŠ/Á¢ÑÐê&PŒ.;Ý —.™“œD/5â„öÜ v…­(h›aÚÙnÉëŠÙ^€÷i !É‹éMÆÄ@¿ˆ³ÉæI°è�ÂÐbG¼Ñ‹ÿÔ‘L~vž�+œD÷.5­Õ_ ‚UïÅÇMÞ£øÀ&ÕH<q ×óÀæ$’óŸƒâѰ|I¢Eß�–êm ]xl ÓjêÀìè)ŽN¢Ãš¤X¯à)ABo-»™¶½Ù f÷-Óì'¶àH4- ̼‡§�¼ìsÝ¿œÓÍ­/L°èGu ì—ø£ß¹ œoÝi:�N ±¢û—¢YcŽñ(Ö"G²K,ûofˆØ¶j�«¿C±ÂÝËÐÀŠxiÒ½r[H§ÿàÀQt¨G·å@˜¿¹91¢C{ ,wt:¶œhÙÉ¥¹ée뙦1§Ñ!—£ÅÆšÊ ·Rµ¤oš5ƒ}Z×­•é�â@NUÓz$|„Fÿn MX[cOu^^õøš­hÐÏߣßÂѤhmió혚 ÑûÍ©@=ºáv†Ä˜ð¡ F‡Fޱ�#:…¤? ‚p¯†œÑ•IhëA§Ñs8FZ• Ña9ÊâŠNFÕ辆1„JÀ]NíéIcØuœF‡å‰ÝhÀS ¾è¤H9ºLËöÕµ®GÑ'ŽƒÙá^ç7ƒóè͉=ˆdíl£ûnR�.µ.íâqŠîÑõ‰7{Áâ䄯0ºòM 6$pt¸‘†µqG'CÂ(ÖÆŽNš0Ú8£è:Ê…žòƒÍé¿9FÕ7JÑ‹yGÏã8íÏï!þèdÓqƤ©°J!:”u¡KKw°E…lBû"½x‚£\y3€Ztè.G›‘9=I‰ìÁiSG B±ô[•Û%»!­G-EtoMÍÙ¹a£òõldY(ml>W�‘wxìñ$�ÊkÇ + ê ’I9Hµ¾ÀyÇŠ.¾?ýÂ_ëd£*3ü5·ø$?)ýþôªLº¸$:‡²—!RŠÁ’Ôá1óÝÑmÃÅìXUÂMa7ÒŒÕ@eÓêé;œ™a_ÞЄ¨õK9GaÃíý>�YGß;_“R·­èB¡­/«pEÿæT�Žd6ev ç$AÜŠû V46´÷54&g”%]ô;« ’7o®Y•‘Ûé…‚éY#��ôµ7<š9”›³È+]Y�U™ðέiX×jnîOwEãFw¹Ñ]nt—ÝåFw¹Ñ,7úäF_€Üè �}r£/@nôÈ�¾¹Ñ 7úäF_€ÔÏ÷þ-„RŽ~\sÄ{—ªºÂÞ¾\ÕÛàr¹\®؃ ÿ×FPUUUUUUUUUUUUUUUUUUUUUUUUUUUUU؃ ÿ×FPUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU•öà@@�¿õ+T¸³,•ÏAþIEND®B`‚pydantic-pydantic-e28e879/docs/logos/molssi_logo.png000066400000000000000000000125161526274674700226530ustar00rootroot00000000000000‰PNG  IHDR,,N£~GhPLTE846856845í#í#845845845í#845845í#í#í#845845845845945í#845845845845845ì#845845845855845845845845845845845845845845845í#845845845846845845845í#845845845845845845845845845í#845945í#845845í#845845845í#945845845í#í#í#í#í#845í#í#ì#í#í#845ì#í#í#í#í#í#í#í#í#í#ì#í#í#í#ì#í#í#í$í#í#§%*°$*956845í#ì#945946N13â$q,0¦%*�(-Ñ&áz]°ltRNS‘<ý~\ûÏãýNÍµË JùÞÅ :÷é°tìÑ›1¤„iO –øŒnAc]-%ÚÕ¿©YSE5ô}ï׺yˆ`(9õóŒc"ïV+èÜ—…ñqTỡ Å´¨¯yX>'I4ÐB¡T‹à¡K)IDATxÚìÚMO1àiWJPö�mQ“F„ÊWQBQ¤¢¢jQé‰SÿÅ;Òøÿ_Ûëd7IC/½½ÏZ^{�–c�="""""""""""""""""""""""""""¢ÿîà¾ÝyÊvò‡£×[Bô>íÃ!é [B3½B]>Zkk”a™;|#´ª7pðžs¾áàºM¡e[5Us¦%§�u9·VAWÁ—C¡º× çlVfܬÀB×ùŽq•¯ÛÚ׸ZÅ:K� Ï¢fbðO(Ýã‹ÛÇóvf†_}ªè"ùz'ÑYŽ$g,_q™aÆù±:�ä}Ñ™Ðܱ&“Ú¢¯¥‘ÐÜ¡– ©héZh®PTC©ºK¡i_h®FJ�×Ru›…�ÐŒ+üB0…RÕjÀÁü`ñȳ�dzóêÌrgVE�ÒXªN�kVÅa‡¥Ý°Œ¾\WhnŒäY~6PbœU‹àµ´w!ÉmG“©ÐB¡üh�¤yåÇÊʳᒉL�®ÿxl^>2UÀÔã­CÍî~¸ós gªX諯yŸµì,C©v h0à\¨näàà9”/Ct#´¤¹CT6TC»à�pÅuQÁ¼áŠË]ë†GèU3�©0Ußа+ö¹¶¯1Í´*Yþ�ËÕÚ0K=@upô�ÿÚyê_�¦»BkŒÓåŸþÞ‘Þ›žÐ_4ûðó©ÿàI‡›ß .Hî„6{@ÂüàKN4imÔ»ŠAÃÌ©ÐfC55¨ªím m´ýÛ:ªc¡Í>ÃgFì/øÒ0@1co…jZÓá‡öu·ýñþ¤)^Q[¨âÍùÃ;† +†M™ y÷(4׺ßS§jN#S}:ÍÕ™ç“Γ\7aºk¡ucjfºÄæõ'¡Òû}E¼ÿDx<ƒúnø¦ôÉe%�iS˜* ¡a€füïv²ÝœK)Ôð¶Ø.ó¨Én/°/BÑwTèÕ‡ñóÝñ«"CÅ@è{gþß´ †q—$kÒ+]ÚtišÞ-=RJ= …–žô½`À`ì’d vüû‹Îر-Ç)ûiþæÓ:‡åâéõ«G²ÂIB�µ¬ëÐB¢(Çèñ]r‚HÓãŠãÏ{‘&{ïŒY‘]‘*õ·;÷�ÊÏ"±=Ãè P â�“^Ö³#{âD €î$ä™'Aƒà¡k QÂÔ„4žc À¸¾uøpÇ‚D|ûï ¨ä³§äßJUvÚbú… Š‚Æåsjö(�G+º-9‹–x{]?(ˆƒÖ’ ‚zù ˜±IS%W»Ÿ7€I„P|gç"ÜÇ"@ eÿ��ÿ;ÒïC½ €a"@²þïÌiðõ2|žgŰ@¤á—L2BOÍb”Š®».½Ì[P�Öî~îqˆ{Ò51’¾Öqj�°˜�ÞˬTÑëWu†Q•8'UT�€ø%R-$yßÏT¥¬´B–'9È ’L‚ºú!¤„HI”Ü^WžPÂc‰çÐHIË÷ 9¬…‘'j�:¶þ4é^è`¨ü¸5�îš`Á™8bIÖy�(¤”¹íÉÁÁ<äP>¬�`2ž!©™HB$¾»ÉŸ…L$@ŒƒûI‚4Ľ‰µª'7躥×ñ"?bêXyÂ\@õÕM¾p(žmäÇà qÎü£L«þr|W…?¥‡½IJy¾À'ZK3ñe…ñ¨Ø�`é%¨xbBx¤—æé‰×##݉qÒJîÿ37ò[ÅÛö¹ X(_d[–A3l«Ã/‚†HÍ>+��­•Ÿ}¿’ŽbÄ�¼œY{:>1ßBiíV”€+Nn@¯°¢%`Å:þMÂÁ¦R‡o°ä.çÎTÅ¢�ˆÁK2Ø1Þ ¡Pî-²4‡ðrÅέ°Kw‚Ÿý¥;@ck^OlÛœàË^±X·g­)±lI¨Xé¹%‚ ¡¢cE!bžìÀcd ‰Ô¬$Ri4t¿d‹íI Bn±°-¸ hûv˜X;$â~”õTSbáÆÄšï„TÍ¥ƒ„ÿϳ§Öòйý%’�^ !yã +^É™kÃ]³p�}àÇæ)Ö´æN ¶þÃførWè$ üG0øÒÔ‹í„nt9k¸+X,( ëtøp»Å2�ÙïvÿgbÍ,Gk,8ZõÀ`:»#‰ek°3ذ ÍP1Õø‹Þ góHå–¢ù‘ 68D‘�­à˜¥pÇ,ÌÄÀÕÍðr!…ÄØ$Öó$’ M‰ÅŽo¬Y­å-ú‘ŸL!£éHbaÌÿ©âq<´ ­BÄÃúT†y [\ÜŒ$;ºQ¬-"|F"ôJ&-Róf‹�Z�Xˆð‡Ø$óIq ñz2m¼"Âvvˆ%d’‚µƒz~f'Q…ý2‰U(*0ÿGË›ËUl¯^^�ØlH,ùLͰu—²Ç`"WhmM-|_~’go´£52907ŸjMvîOö³CA¦•)À‹¢Ð%–ÐÁæ‚ü êxm µÄù´.ŒÒÏÿÃög0õ/ϾŽXã"ÊÏ™·Íʽ�sÁÉ~ž"‘nÐ%GT뛫 ˆ†ÓÀx>”åCîf(ábÙ¯�›â#…A¬nv]'Q;«‚«ç7¡b©} buð¤Š=uѲӠxHYÚΫ¤êr/k¸¡ žzSͯÀÅ•”JŠÙbž¸õù±»›�ï¾Bê°%•z¨k§‘Žw¸«7¢çYº"\'Ÿ²ÎϰQ¬ÔúŸ_°6žÞ¿µX+Puüö”,͈%"’ŠKYW5x‡«ˆ$c–�ßEèqüV¿²¯Âc–9ux ³ (™ü*bÙu¼5޳¶ £XY;�ìþ-;Ò³„ŠnpÄûú3Hæ ‰Èb!(‹ÄÊ~šíÆÅ:^µ Lw;±î ÅDD±$͈åMJëù(³¸Ž`±Ñ!Š“­+{zs«˜5/ƒÈ_<$K¡õÖ&Äâ…<#{ $g¸q±ÞãÙ7ûÇÛÛï¾›Æ5Îo%VÊB|–¢ÉHA«ƒgŸ<;‹.õˆekT‡ù¦±ìAãÐŽôö‘¶Åð•VûðÖ�ðÕƒ[™�Ý(#n[¼sÃݾÉT4±7ÿÜ1KŸŽ:[<}8{üé�Ë�g½µ’ż–M§#�Չמùjh›;Ò£"*\;:43ß#Çt:ÃÁÄl½DR i@3ÔœÆo«¸ñfxêÙÅãߟlÞ&)��¦�€+‰™\¸ÁQê‡N’ý½“O_Žt5�g)6ô OósŽoBÅú„W ŽwÎÎAób¥ý,<ô¢wk6 LŒA¬Êä\ª±T[ÃíûºÑíñ(¤zارhZTCž>ùdCÞ éH›�Ò—QÊ?JEþCÙŠ2k)ãÊôr 5`Aÿn)T\ i†T”¢>1 ·onÈÓ«¿±(T…Ë·ßÆ54‰õKƒð ðp-?³_Í?)–)j18gœÿJ�?·/¢™*º¶ƒ»ì9ynNlét�n¶Ù “X§cºMÕ¬SÍ 5ÿ@×ÂÌ?ñ"OÚ⌥ͿZ!q¨¡‚Q,¨Ëàesk›ª6m¿Ò×À}vºâE XÓ²œ} <È®§=ý6Ü)5ª5i•±¬FÁQèòààë 3O–#ˆo*)£SZÅígIw�»¤wmy^öù%{‹±±ÉÄb׬ŬÌh³Û~JÊâÙoÃÍ?39ýUácËüêN("¦–X°dަ’5Då¦Ã”:H¨o·ƒjÕR–i–«ÆØg I$Ó#P,¥¤I,Aøˆô£>/Y«@ð«?æeQç§úy)¡.¢JsŠ5aþIÿý'å­°­ªX Mêfh†ªÜGàá7YØÜ ¥Xá´Nluô$¬§"óNythzŠœgɘU奋ÚÞe!:Ôü»ÄÒÃÿ xøKŽ¢äYfJ ¹™Ä“~&�âîuß¹?¶¼dA�MbQ±lU³À…C)›W,%–mĺbŸ ËÂÙ ð¯MbÙB¬h<^¶ f4J÷Óu¨kÊükŒ_l�îÚ¶…úYçÚ·:ðébKÎ"w¤Ã¹o!Å\¤Ei‘„< ͳ‚ź°�l€ÆÄú`+to´ Þf0±W«œ ¡2»]E?¬â/hKߨB/žÖ{ï¹¼žß6 U¡�úÊ•Ò3ï…¥nóORks‘æƒX9( ¤‰o­]|§ûób�‚2úä\¾Ü°°î‰IcÌ ¦ÂùàlDÐÿ:#rG¥ª’ ¦Ÿ4é;·žä±}°»•—3ÍKë®Å· P½¹”]½4ÀŽnÄÌ‘kI•1¼ÀÆ¡ÜïÉ‚{³nÈÅÖ n¥Z×êXw¹€Ï Z~øBÄžäà…ÈÏRm o&‡î„^»¾¯åGS݉=7 Œv³DÚŽp@Oª½ƒê8†)AUeKª�Êä°Åe™åmùÆR­ ¨Ú*M1C'bÑ¥TùÀ³‚R¹#ÁÔ\ª ÀLhµlR_S³À½Î‰ì¶éuÅÈàÃsUíGc Vø[‹|ÛÝ Xì‹ùk£0ÑT¿ø§פìx¥N:[‰Xw(‹š~Hôm5+óDD*lÜÕ%q:iÅu{båN#”µWW³N€²•ïèÜ)ä“z¯cO÷�yˆÏ\ئ�²÷DÆaÛÅPLY«Oұʣ•ÐlûÑeè#+TÞU{è;çf€t  �-1Uêo‘¾’SsneÊÿUKöý#ÓîÞÚŸà>õ—Åd2m}·Z?cŒ1Æükù[rÜÞ"v^'æ IEND®B`‚pydantic-pydantic-e28e879/docs/logos/nasa_logo.png000066400000000000000000000517261526274674700222750ustar00rootroot00000000000000‰PNG  IHDRôôü/¸úPLTE 8– :“ <’ =’;’ <’ :“ =‘ >� <“ <’ <’ 9— 9“ =’ =’ :—8” =’ =’ <” 7— ;“ 8› <� =‘ =‘ý< ý=!þ9 ý9ü=!ý= þ;ý=!ý? ý<ý;þ9ý=!þ=#þ;!ý;þ;ý8 BˆóP: D€¼=@ ;OÅ=6 =‘ÿÿÿü=! A“ >’!� ?’ü=#*‡ <�;�ÿ= $ƒÿ= ÿ=9� <�=¦=©=›7Ž=‘ý@$~'…=Ÿ-ˆÿ=/‰ >�#Qœ5�zÿ=1‹=£{}&„=”¥·×ÿ= 3Œ @“€ÿ= <“ @Œx=¬Gm¬/[¢ô÷ú|=—Sw²>e¨�šÆ uÿ<þ!øúüü;ùÿÿú;b¦=“îòø6^¤LšG—�§ÍC•'UŸ¼ÊáéîößæñÚâï}—Ä0Šýþ/ú( ÁÎä…=Wý6 4Œ¥´ôááÿÑÈË÷ÿòÌÊZ°-'np°èðÖÕÔup?Tœ¡%/Ö!ba‘'�_,Y‚(HÂ%­ÓñH†Ì‘b}+{X 9€0¯çþÛ‹‹w˜ÈÀ~ƒÔ6)¾ývÞ4tRNS 3°Uä�…r™gÄ_@¹Ö!ìòÎJ£z)Üù«Ê&æ‚ò¼×œU8F�erÌþïÆˆðN‹PWIDATxÚìÁ�€ ý©©˜ý:ÆiÃ0œÚnc'q“6åL$+Ô¡#“aA]�ÈÀK¯À8.E‘˜�’›¤è{–dåÏ2À@fóšUBÇj%¥ ¿¾+k‘²z> à™�¥BɈ'ùÂÐ�Úr‘'<’J¤5⟶«VKž—ô;÷ýSæ&×¹u(ŠFW0•]\Ó ¬ëž �k„Ó™ÎúI–ábÀ Á¯·4Û¹ Ž¡ÓKC#zê:á17 Bg4ÖZ.ð” MKSáÊ�p\©LZ/É[Ú]µfÞu6“è~D‚[òd{û|·{$OxÀ1:·äËvóÑì_wäÍ¥Æíî]Ê ytµoš÷‡-ùb]¹ÄÊ{U%Ô’O7›·¦yÙ�OÎeip’>Ù»—Ÿ&‚8àR‚ò¢" * ¿™}°4›ìê¶ÙtkMcSk@"˜X#ä¡p0!A�/Tb£&š W5špñ`Ôƒ“EÄTÚÊc·³³ÆÏ¿ðÍï±3S8„˜STR–S¤ùAÖâ¡Ú‰ÃýðaÄWy)€èŽÉ<V‹w9m¸woFL)ª¨Ùù*_ßp/­DŽÒÓŽXâª(ç ôÖT:è`¾½gbHùp¦^¾~rˆv¦ }[#8—(6” 'èþNº+*6˳¨UˆýP‚Vºûöp>ªX?®éÒH‚‘îîÚªÂ?AŒ—3½Ñu~' Ò�PTæÔý-¨/GÌj=@ˆ¶1`[i˜Â+ ˜ÑÈì!Ý^-Azº�ívo�3–9(££ ˜RV‹XÔDÒZ�íÊ€½•]O%C`‹=þpI³ýØ}{kU¾Ä÷ú�&1¸Çw“4Û¿×êÊ�IÂЂ ¦Å»‡9¢‘%MÈVÛê�Iܹû·/r`(ei¡ëJ�´„Ö‰ìTÆÜ·Œ“NÝ›ðɘ&;çñYJ]³µÐKD(8ž�ø��¤§zB†Wx‹ñâôEÁ§{x0©Š‘—5û¾“Ÿ´fdŸ²�2ç}É £‘õ§®Ž�H¦>ŸÆiwçæ. ޏU0G™(öæ6²l/²MíQ(à…Æ×‡õugîé›{øô*N;?ûâuŸùÐÓªì?—ílÑä§.d—Šú8ÐÔ¯cŒŸ†³’!â!›;jèÞ™_¾‹HÌmWÓÚB~iGv©ŽÇÏ AýÆøÁÀêй�o0QDÈEå…™G7Þù9°ÎNd§ÖdY¶‰^\Zb0ždƒ˜ÀFß î!Ïȉ XoÇvDOvæÚ~dƒò^`„ätæy©*D¢";s»îÑ‹vÆÁ)T7F9¢©ó@Fo׎ êjãgá?šÇsÍ™͆B¯ýÿ¥©¥ÞÜB2h]ˆ¶Êz6¯QmPZ‚¨Ø×ÒC24!ÚvÅÿ÷ößÔmˆ‚Ž6-‘Yè­ˆ²Šÿeþ ©wh$“vQV‡s;ë÷1üNT`G–ªÜÎϵ-ní¼( ‚‡ƒ¼xˆÄB0D,pêÝ=$SBë@TÕm�BÓS†¦ȋדóâ4SÏëÅ­E¨pº ±µ¹×íè…ÓG1ÆsaÈKèÃøæW0¥LÉD‹+ª)üÚ®�aŒ_ûe¯ÄANçf1Æ£:°¥H;Y¥§ÑTÜH}†¢‘¾ÇãÓ<äòõݽ«/¾*À–@ƒ À¾ìÌÛM®=@Ã9“û1¾1„\8)4æS˜šéig�ÈzmY™·Qmî®R DUæ0Æ\(*åº<ƒ†›‘[ÝLbC‘å™÷ôd…~QT¼è ö¾�šÖƒãz�©�³¿ê­±¸ÃïÏŠœòK÷º@gœ�™À§§[Óÿ&níX#™èÿvÍÕT‰ž�ÛûcœŠÁ:¨n`ÀYî¨u¾µ‰ä@³¹×úôOWñõaÖÄyAbb ­»U#Y(?znˆ}\d|aL:kò×N÷&lA–èj#9$š5EÕö\¥r’×à`má9Œ¯KA`·Óª“×lÚ!DÏÑP%*>C„õ¸�ñ¤ÁFèÕŒs�ä²ÑSfaæJÐÐ¥4=TTÈ�WŒþÑ�ÌhOðÁÍA !VXöξ ÕŠ�–ôvþxTöz#Qnd||üÄ•üa¿/ä†,ny O&}°n\Ð'E˜Xä–UšçY+ýgq»,©sÞðÆ”äÜý÷‹“çqÚù[‹¦ž¼!,¬>½„ñµs° S_ó_JÐæ$¹%(ôb ꜋zÃ0ÿô:ÎvëùTªWûõã<¬p ³§dp,~Oíæ3×HnMˆšâz0KTÂÑùû“8ŸtðCOFbac%v~F¹3¨3xº¾n|é&S?t€äÑÖ‰hq�&�¼oñZÎ?x2<ó,'Íý2ïäÐv˜øÛp¹Ðü�Õf3ç¢çÞ=Ç¿MN\{ù$•ìïO¦æ†žÞˬÿ«×õpŒ¹;ÓMÚjþ�ŒM?bÚs¸ˆ|ûòJ1ÏÞ¹2æó†ý²‰Èr,öKcÉù…Ùxųû}ò@”¡=|ó¸² oí+­}ǯ,} ŸñNß\ÜS£§Â²¡@&�!ÇüžäÔ=¼bâÂô)ÝíürW¹J´!û5’WK+¢¥ø#o6ó™gø§K/fNJ<䕤wCw/áe‹w†á¸óc¸Ðúu.}©10ÐkëE“™û_]Å?=öë"äÇ+‘°þéõÄÊt?ýÊëôM.­´ný\ù‹DM� ¦pþ™_Å;wN†5#ôH•+åþôÝIÁñMþu÷öÔÄ|kï­öâ´öжc/Ói§·ùNv³d³¹’Ä„˜Ð\H‚†A Ô8âQtP[[¹¨”Z, ˆL½Á¨mµNÁÚ‡ê¿àsÿ‰ž“8R Ùìf7ù=Þ¾9ç|ç;ß9»2ç©]µŒÖ�)Ù¼Fƒ(´SוZÍÛ¢¹¥ä¬6¼}ö{”ÒŸPG¤šäM&PûLn�peª$å«2«hˆb ^EDçÍy¦f@c%fPJßXPS ¢1 n¯UdKÀp/æJv<¿!:q÷N bçtPXà¬uâ*Jé쉊ïˆa[†Î:Ý,(à­¬Ëúº2Õ²Êå«Ä­ûÅ%FÓÓ„°‰€ÐÁÊíºÉÞG½¨Ø~X]!4¬Ì=¨ªlmÑŸ�·}—#ãÑšèW„˜h*l£q«5º¢Ó›PRÇùPÄÆ€Þ³Ûë%0Ë.ë•©–×*cÌ×Ô‹è¬z"~R{  £Ž}}%�˜öêÄ,í®Rÿí ƒªV,s¼²øÉ¹2oŽqêA­}aM{Ô4ä‡ÕÚýs](ihLÌo<ØýÓÕi Ѝÿ|©ÍÚ·UÙÈy'ù)ˆ¤N b@Ìsj=^Ý@J:qå½}£­.¿‚�5ÜÊ,/ ,}Ê"çUÅçÅ'ÌÞN„u„Ý ö¶¡¤®±€ˆ<Þcd@1 /,–´gæÖSòY!þtÓê<€°þâÔ:"$£Kmßì¥Y™màþ?Á¼^•Õgk)ù<¢EÚ±Û"‘*]l¢ ߌŋã‹@õܧÿ¿t¾Ô>Mè#ÏÅó„;ëDئ˜ Äc­ÞÝÇPRw{°OßîÙ]íﶪ²jýGÎ'!_ñž}Ûa 'F,§6h;‰ˆ}mQw)vnuú>mƒ*;yßû} 0Ir÷+ä†1Á²X[P׉’Ά‚%¸²s/>æ¸Û5²¾+ó4 âźÖ½X·Xx­‰]FXítMBĉ½¥×OUuýõ‡û´÷ñjž]ù»”Œ^01 š6u¦Ú�L´#²HOŒóxŸ=¡ D:QRw$T ¥æúË©3Ôœ”@Éi%HÀ¯Ý‡°½ÈÀ:Ú†&46Èúv‹²¢Ý�É}ˆØt7Pj=³Ìõçð>M5¯XNбUR tr¬…í·†!ƒæ6þ½%ÔÇŽëË>عcˆøæ| Äò9SµùË÷‹3æ«ëA ®Óë‹h!ƒæ+üûq;,@ûã]ç´£ÞÁˆØT—RÔ-�nòªœ´n(£dõ"HÂ>‘ŒK 2ÙB§Oô;��ÎäqwïØ?©öµ¦ŽÚ£Ó'1Ó(•-;×\Ñ~ا߬ÊɆ2y]Aƒ$‚ß"lеÈ�©Î­KàÙãÔhâ›»»‡ÞCCVµêÐ)DtÌEK#‹·UWþ>Ëo,W妌’×§4H"¶ a[C°«Ñj÷žêíÛ�ˆM�§~ÌåS×µþøäNDtu%õÊÆ‹÷xŸ*Wï|DÉjUƒ ¤`r‘t«i·;ë?šv%¾œ»†°‰Ûø�Èc LÏ âZO�-îB g©¸p…Ìì¹*[GÉêÉëõ ­n˜ÜSñ„—û-F¿[cw\CÇîùçH²Oñ±þTŸØŠ9ê5æ¿ûŸÙ•`$é5�ˆÑÑE*gë2Y¸Nç¦ç³÷ám›XÈí÷žFIsñâúÆC®Æ\1rF@ÈqÌ×QòZÍ‚D¬Nr_áªN KqnîÛ}bcgG]Bfãmû1ê(ÒãVSuõ¹#zƒJUÄ1§g@"žðI’˜©— ºÕ�Ö4ÁCêS:ˆµßíCD—ºwìd1ŸÒëëÊ‹:æ+h�JØCž81ÁŒºuÚýÝÑÒâ�H¡¦‡zÅ–Îq–Ææ+¾NUÜãœz $¶’^©^Ô¥üª¿Ÿ�Ïóü[~Œv«Ï7%Ó¹¹hQ]uäš>|‡,æB¼ÿ%·UŒÔAï\&è´ÓnO«¬hé=Ú¼º\ã·›1õOÔkÌ–ñï¶ãżØcNN×$žÞIÐsÄhµ ä£68}£Þ"9€Á){õ¹;¼¯\% ®½Ên Òñø"Ó»ËGGîö"¢7R /Fâ�WŽß46«„)ó¢j€Mß²�˜Oä ŒRQŸÑ¨ï¬À£|äOž¤ì½G)` 2†ºæ·lFê4£ˆøþ KѨ“µüâ”>£äZ„çç­~« $¤U÷=,ÎÈ�¶Fç±: `ÔmÕæ‘û}�J°Ö(%<ÑRJ¸rAŒÍ;Ö„°�cq`@d-7Ÿ›"!ÏÃÇ”"Vr © ¹~2ì™0ÞÛûÖÔ°² ;2±�üjà_Ë‹è2rº5RJ5Qìcý ÚÞsùo*Úp‘ýfªâ*\«�; EZŒK±“Þ–»œ Z­›AÄñ¸‡qÍæŠKGIú–Ÿ)e¬i‰¹Î#,¡ùÐ:Ý&DŒÚe\dÏÏú)…<%}ÐÖâÑo?"Žü,È—b~¸Ï“µS±\ºòïS ¶Y<8çÓ/Hánþeæ �[õ7²lÒÅgr1P k�N b `ƒ|àc´ñ{†ù]¹ }ÚÑ ¯è}é)œþ²ÙÂe|éc5%»§(?ÓDÒg— ”ÂZã݈ø:^ BÕà¥ü÷<�Ñ6òßý^ùÀ<µ0…#•WªzžÊUq^kÉ ��òÌo~+(†õÛ‡Ö1¬Z`·\8¢I¼Ì»ûLvKy—A�…«ž=dÊb\‘Op%½ÈHªê9.R·‚Âèž|"Ö©t ]ÍÒÛÚ-Í®óýóŽÖR³Õnºp}«Ý®¢\ž_.²¢tb7ªQ“ £HçTïLÏPRTÑ*Ñœ±¤M†FÊ-jSäÀ…Óº° …8çg®ò¢àòß/¦�„‡ž|=PåP’º#†&Â%éþ›vrIž_>,ÌÈT¿½ÏÝÚ±—ÒHµŒçZ"(4®ÇöÝË‚„Âxv×r©¹˜cn󡱶ްäÒý·Ù^»+Em1õ„™v”…‹Îª’âÉ]@fŒºlßSó@baÊš f»Ó5(75 Cnˆ‘HAnõT—Ýœ¯ÎqYª#22ft�Ç"®ù™«Ô@&„Ý‘{³@‚a«6CÌš2&J­gTú!ç)‹ü·Cåùj4ã„®s¾Û¯×s™˜ÄÕ¾ß({®,ý^ˆxÆ  ktsiøŠ×=ÿRÝŠ2o#–œ7‚Ë>Ñ€jäx”±¯Ã è‘™íwåñ´ï7ÉŸÕ(ðøð�$eaÙS�{M[ÁGPkë8:ä™+Η\mn+’‡{öòÖjA¿Dõ€Ë”ˆZåþO¾;‚uïâ&–ÓA¢a²½ëB�¹«~TCï@&á�“NyÛ>ä²sß­¡M+H¶ç¶ºÐWˆ¨ãh߯e�ìd¬Å~óËÎÄïðdîSmàºáÏ-ĶØ4Üö¶A/õ� Ìwæè�É8R›Ö–šãúñuN&åj¢Vÿ‹bË"Ö4\tÙ J ‡Éjà·MU–˵ZºÚs Mo¤Snhë1[¬œævsŸÁÀÿbu{ƒÉ hH‰_ÓÔe �Ö³ƒËÏd%þ¨Æ ×7{­³}ÏÈ„}!D�}z|�Éž8L–q­ ñj1Ù)££œ[âv©_Ts3¤i�xŠÎM´>|rm߬�¡+æÓ£Cå.+à°šöM L»¾{›vZHóMËïBÑå v劲Á2@ã|"þÚLª¡‘=ö¶žrûR%öË^a®úÃCf+ çʤ8q ˆ¬ûYn¦-mØw¸�ü"ÎÎv��píé7Ù—¬³«tÜ`xí#lÚé¹1)>\\ âB†µûÌn+H4ùè&ÿöï¯ âÄàyôCu÷D©Ùn]ú¶åCSüšZ�vzß—(R“{YR\¸“qÁê}Ûw&$‹É>46i¨¹§7Ò|6xžÛ#ôú©‘Òr ¯ÉÆ´ç툎מˆ„Ìò‰ÔQïs\`‹›¸@É©‰§ZûÚ;ô†›ÿL-§ºÏva¹ÞÐÞ›oæcµËÞ¦ç›v”kÇ^»D”1:¡ÿ?M3‚R['~o#£$ˆ|‹É…›õÜÛàG«¬±I-¤i íÃ&S%ÿ[›‡&ùI¸m÷°yíRQÆg’ñúU N(�›¸‰ƒ¹r•f{¿ ô} ûÉ’®rmÇÀ°ËeöOvuh¡ûöÚ¥“Ÿö™;AÜЭ†ˆ- #ˆ7ج—vµgêù©V[À÷uș˔"ùTß�KX0SÛíãZ�iŸãL»tâT^½Ä £b'vå4qvåð´‚«dJ�Í:[MG6ð ÚhÓ­ÚúJq¾5 ε7|P]’Ì Î»{ÊóÏSóÒ˜3Ëì™t”Þ¡Ù¢xºrجïëÈË»ÙüŸa¾ösªk=ÕÑÆ,œ÷&0í®®)¾i7ÆL9à¹Î¿ptÞÇó×ÇqTø¨ÖlÙºòµßÿlÖðœ„æ™ß­òˆÄja‰ÌÓªªÝ��ÀsY©ÿ6Ò»¡;‡�Tš¬î¨{ÄŸÚ=©Ø^Fr ¬•.ÓV0ð½õ Ï·þØQ(„ûuýü©…ÃAdš‘ôu̓ .ÔpŠãÔÛDŽÊ…>‰ÿ*3Õ�äð÷÷ßó=ü»ð§¥§ôª$Ù¹!æ [!�Í"–šIkØ#YçQ1¸ª¾"¶:YÑ*ˆó)HÃNB«ÊÁ€=ãx¸X ŽÃœþâøÌ©ý¶`s³m†D/0ès'Çò‘]i»ò|wäÌ`péæ·Íù8·0’ƒÒGVÉŸ“»è–˜»òÝ$žNB¬5M� ©8ׇè¸ï þÕ#é@æ çC�¡_äʱ�n´A "< Ì)8òÅÙ³§!'::äïöõ[Ì•@µý“_V„½þäÿç׋ÚbI¢Ë_h»‹4éI²¸›ÊDœ2Æyo¤E8÷ÛŠB‹;·•‰ªV”Wõ¤`¥Û½~6Œ]·Ü¡äÁÁßB)`Ñ í](ÞË¿@Lööê€-lGÏT@$Wrä÷änÕ=ë`lÖ*±âù6ȧ3mÑÄåå­ÇGݘÁŠO›½)¨X›!>œbéé›Ùñ†œêSP*Ÿý4ì2WF}¢§ÿC¡7/~Ì¥7~çæÔåßðÎ(RkaL:u©b׳§òx,K¹x˜�ÏrG=òVç™Ì&/ˆŸñÑWhÃñ_’cP2{OF�NPÛM£=ߎ .:³€ž7eß3u PTFRá~± !Ƴ†yÍ£ /(x˜ó–ÑYƒÍÓm€d^òZ#θ©gb6—sÖÅ4? ¥ó¢"jl`>4Àk~´Õø>ª‡1xaé_øòÈÉ‘×Dæ©6˜lÉrˆîd}rD&^5 î ÏF d”Îí�Ìz�–äýcmÓ‚3.Ì­} σûQW’ìé›v[‰¿ãD}ìÛHRãH)¡Z¦·ÈG�ìË)�¯ð,e1ï Å�AÄF•ˆrß½T¡ºS¹8�dï™äÊg¢à虨9YtaI uKð<¸�* i®œl%u¡óN*ˆh¸Oäï”õ ùŸÕÍõÊqË!™çÆPõl¨¯}…Öãq…:”h�ÆÑO��˜A?öÅi‚è‚’ZfX󹿙zò§•ª³wË<±|; “ñp-ù†�-úîtÀ?ê«!7ì"žLÍf!kvsåðDÛÛøŒÇÀæ‹æ·›9e[ÌÃ×lû¿§]m±�ukyµÖ¹¾'i.y¶Ü}×шþÉ|aç<¦è«Ó…�ll�aótM�†•YûFÞEuÒ4R %³àóûpʵw¼UwüôWOQôœ’ykƒþúÒð¬$û.sÌvÍ…}�3U‚講ûRc^µÇÓP1 Ùáhœ‡bœmö×…2+ÈÈ�íCES÷󜯱N(ºpßÔ¾wµ%üf‰á“Û �纅–EÉåÎUt¢“ÿ%ыnP“µ•6aFÓÙ¨;*z΃¡Øƒ¶®mlØŽ“ëš²—q^ù�׉‹®v¹Z z~³ÄhƒIñ¤b�”P]æ@ýjÊ“Ndm:K/:ã *�CÄ�36B*Nø)4·ùޏyÔ U�‰Šp“}=®s™Ve†ÿѵiU{Ÿ=ßÜ3ËóàJ´{Êí…Ž§!é¡:{g’¬\¢D²iDªªˆ^t�ª;­D§Xé8Z ‹ �bìŸ+AàÔè°…×ðV”ö §O•óÉmBѹäÞimokP{�Ù M�Ž VB¨.ó”ú�)4¢Óœ½{JzÑ‹Ò8i+Ô*‰ûeHɼŸÜØÍu?<—9Û×_jŠH´–mç®o¶û­Áëß)¦†Þ”Zê‰âÚ]C l(Ç´¨ «gä*¬J½Å™J/:0z:Å3ðFÝHÉ5uDÑýQ è?üÝo7Ù+�ÖálÁ^­cŠuOí¸/¨•÷w£~×pWûì�·»jt-�’NꪋÜSŒ—Ñ×Rݲ›ÝEô¢+½\¾®±0û_SìµjŸDë-ûûÉOÄŠ)LÚn.IKeòÂN Ú7‘Ë;æúéV“K~’ˆ€ÔT¬ÜKb/¦�ÌZ½è Uñœh7m¤æ¸¯Ž$zÝ(Î+UâýP毓a�Fv1×óÚÈÛûس8°„ú€¨�Øø­”utõú )úãU ½èŒû~ˆ¨5 3¸¬›Wn©'õ¸‚¤€Ív4ÚÁkªÊëpx±ÁÞ~‡¯�áïk×kGM®”ÅOû¤¦³˜Þ¾ß•$#×]HÑ×ê”Ô¢co®#±¢‡�–øø(ŒÍ~’}oÞóÊpŠ,ˆet �؃÷—Û´üc>»'Üúî(ä•�·‘~JMÅì²ÈÎ\ÅR‰¾RÑâ6Ò‹Îd= 1M‚v·< ïGWrœdßýdÑ£³ó…Ç"aªvq¼Gª¢Ž¡í`¼´ë¨‹7—¨{.±¡ì%R¨î¦]æy¶+K)E§ãyw­è8õ¶".×âyÞùà©ÿª×ì��=~'#­8ò1ÎB.‡ð´"�Å}p­h0‘—vÝ#?ö¼ —8ðþb¨Îy­ Ÿg»\PџȦ]y. Ó”VÎz¥ñRÙ3ƒ�#ÿ%T/ÈÔÏí¯'Ô<Ÿ¹ßáÕ•‚1.µÉ™ƒ^âxWŸ™ÌK» Ç�Yï6¾gHL%n÷:Þ”5%w•è �v ¡ˆZt`-ÛÊ%c‹ —VØ¿ÝÈ»±›çÏ7T/ÉÌÕë;Úù‘\÷Üøøît¯*•åxî̾~ÒÕª{p%¨ºR.œ]4¦wò[Ð`¶ŠmÆÃp�ŠfÝOêñ2fSšwRVþ¥°yÌÓK›Ôý†ÇH+:nÄÚ1j^ 22ÙaðÏó¬»ßVWsVbÕÛtm]=V—ÉbÍ”õ�ÚÎ]oytV幋gµðîHFËDöü{Ë€—W~ÈÉ�*T—µKî6@#ºré'WûØN’/çUR‹T)óÝIÔó”‰zžJ|Ç„ñ˜Ÿdß?åÛ÷’\ƒÞÐÑ>1\irY*­\LuÒRûèëiY¡ .§ì;œXV6hÛDžR³¦ñìùjP:I©š�´UuY“ï7JŸ‡±Ù pЋÎzP½¢þ«�Ûð\Ê‘`·½Ð†ê\�´{v¼«ÇΛIÑèÖA hÊHC§=ÇåøåSôÁNø BÇüí>±w8ò¬�aëžá@ÿáIÒ=¸ZÁRÝé×&ÉÈåT¢³aÑWW‘ŽÎ+Î"jÑ+?ùdËñ3Á9ÜóaÃgØ68Cª— ¯-s¶µX�MœHï&(‰ÎwܺJ”võŸ©GªŸ©±áØ|ü�I,QŸµ——�t²8‡» Æ‚~s"Atù‹l€1>øþjR4úDº’Ftü’Bio[÷\M°N¬:ÏÝÖDWîhpµ;u·�¡9CWe>+òô£4|ãBi×Lß×܂РzÜc¬Ü’“[M ª¾á †Î•“sÅÍ·J}�Îý(ŒÍV�†,:ºu{úƧ z¤x_8wúps¸6‹�~é.“øœ¡QÑ%òýì\n²­æsì÷ŸòÆ{Ð1ÃñDØè­OåÂÎÔ ’ÜáIxçûewS‰ž²!,ú}ª R´×£Œ-z¾Ÿñi}ä a0x$lÝC´dß±¥Üer!¯M¥çE(‰ú™@õ¹Í‚õȱøù—r{EÅ3"o(4¡�WI FnVbmu9ˆ®c‰­--Nc Ñ+ѵ»¯uJì팚¡uÇVœ&9Gÿpw@�Ta�½÷Þ{GG¿çnÖÍfC$&Ä„KIÐ$`N@¸SÄ£7A‘N½óD=Nëywö‚z*öÞëØëèØËŒûI^’MvCHÑŸŽ:7Š9þ¼÷¾÷½ïû<$@�]Ìäóñ»·ÿ²_Øàÿ¬öª€D¿{6Ü–[¹úÊ—†s«H,õ*Î*Ñk=%½³ŸDìì—_²,`Ô:³’p:ŒŸƒíUrÄ;t�„3“Õ–]Ñ·š›èÐc’r‹«¦HÑß}Fzì~]!JC¯'ï}ûJÌZ‰àÈ଩—ÞÙ _‰ÿýÂíX¥ž ˆ,ñ ?‚ܲ¹v>›�¾²ÍMtÊ(Ë5ö›}5dCÉi’\F<«¾}~ Õä=:°nÍMì‚»¿i]õtW¢«ù£—„wöòÛ g°öAœbó\0Žˆ_±»Jb®qÒY¾§WÌIt0ø¥úöZý¢_vZ2Í(¯”<#$Ó_¸¿žïe’ñ÷$„fŒýËãIþ1ÞÙIÀ*b/n¾Xø‹Û!r¤_(kͲ^êªnͪè»P<7Ñiå„T`TV�¬è¯»ûãWm6Ó°›íqÎÜD¯P*–ûõ+Rô¤zŠ¿³âd:1 å–!Fë2¯½RôjN.óû˜7жäZ½á#½ÆEGOªIÈJ^›Õ¾¦­“ßÞe;å=/-ºx¶ªð­2ƒ¸gQòWuÒyVµ(Röú—/z†Xæ·ã =Š«ñË›ŸŽí­%wwÚ~MªWu:­žïûÃE¯QªI÷µçä‹.T@\òFü«¬CeªÁ†2;aò¬º�äoœ$p„ÙÜË/‰mÆëÅ"îêñð–f4$i̴™Õ"Š]ç,:pö©RÕ÷åˆ~v âá»oÿO¦føHÜ3‹$"™%åŒÕeœî�Þqš/ûTô^×Û„¨ˆ¥ý†Z9ÃG1³4ÅÓ蜴–KíEÏYtFÙŽ¤�×8iòμá Áiù­ÏêÃõƒj£ØÐ-uUw�VÅ;:Zª¦öðY4VóiWKÝ6ølÚî(+�Ó‹‰´}0Ññ=\sÚ@ßè]*´¹Ö¢TXî2€\ÿæ�^ö ¹ÌOÂË\œñæ˜:'Ú–µ%Ï5RUSiµ|ߢ8Ñ–•I‰N®p¼¥?ùÀý7å—á üJŸ �zÈÅ�_ºî²g. ¥cN»à¢Dþ�üF¼Þ} N§(ª¤ àÓÚì°}ÅÜE¯s,)щ²ÕGxèÎ2|=T^�Râ:‰Ë/9÷¦Òòñò Þ{%¢¥[9Ië%ù %N§uŠú6�‚è µô&)z h{±ïæ›Ê°ù‡ìÆÔ�ÚHû¿ò4Ä(Ÿó/•zºž¹7ê¶\‡RãFwâO›Ö1.û§":ãk®—-:ÚÔ%�Ü&m¸¡ Hh9.ï©_Õ±yÌ�/ž&1õü¿ïú¢^â†5ƒ_Îù½áO»¥H%Ÿ=#¹*RÝPôæ"™¢?#m/ÞÖ·¦B¼l•ó­G)Òê¤eœæ…ë°ýaÕWTjoYšø+ígáa,ú´ËQЬNlº·"�ì�Bô^Všëß¾#OôoqazQܲU3^K©Q×f8«Žði¿ùÜ“áSXìuû7Õ%=ÐÛ¶ÔNoæ)Ò«ÔfÍv繊nš‡Ö\q¦úy£Q¾sãÖÄÃ5‚RfÄ%¦yK‹�c’ JûÈb­ru^_Ð=†áüªlïÕÁ—³‚§PÊ´ót¶l w›SîOÁºsÝ@ž°j.—7(ã³ï �ƒ‡JéØßõðà"»� í£“Ë\hJ¼3d+á]\“ ñcdxlt6>»%»–¦áÓ’ì™ÖyM›í)Kt²6Ð�‚¹¦<à¦þ¼¬¸Å$ñè ßaƒ;kíø¢º»¥zã­"¢³�hØn¦#‘»Õš³ÉÓü–‚R]øß³Ä¿26³àõ·bƒz`H?Ø•«‰Ò=Ø)qé¬YydÃìŸlÝ»°OŸws`‘ÏZk?–²èdV cÃ^ÿbŸ‘Ä5Ó*YnÏÄŠnÄ\êþ~á]‚g7¹Ì°å£¬‡¼«•Ðîæ°¥é{팑„ü´)\ÕwT¤•]tÉu¸|öæ]w?™GNȹü‚RÝXCH7scPõhç'¾]¶'):~ÜþdÓdÐ^®~r´¨T$Ƹ6çiÎØ;C&›xÇU#uUgõ™ÏÂÊ7�q@Hôúï¾É#‚!ÂE?ÑÉÚ#´d¦…ðtLÊ5¶ÒG‹‹þŽàÿvùNóÂ…e‘šSq‹B®6jÕ;µ�ÂX ¿°­$ Es¼�,0e#!‡Ù6¹®Õú{.˜]äÄR'EÑmŽðVÒìµ�™0R‘­ÁÝòß1Ȳ¦ºÇ.#F¢ž©~äþüBUôàGÏ•ñ>º… f¯Æ‰4}d—CGÜÌgY•ÔiDBï H+ÛÉw¢7öÁÏ’Ï¿ŸšèÊZblŸ’³Y:¦®�gÄùÝß¶·>ygÙ%—†5×hú ó£–9ÃÙM½qÍù €a,Mx«·øÆˆfv‹.žpÕ×ÍÙúœ½ieyîR D?»$oð)ˆÎ�]ãÕ@)û«fùb=©ºd)4Zb¡£æiå~•w9rõÇ;£fßÓZÖY½éâx­ O?ÍÌìÅs�½¸Óƒü´ñ`›e$޳3luËb�ä­üFqѱâÍ?ŒVIýþ‰®g‰'Zì¬O9kg“•\äV-Y‡DGMD]ód¸Yéô³/zþ«ö·œJ³G¯åt:Nks˜,Õ|ûÈõ(žæÓ B½ç�*«ÖD|Š!K‚ßÕUs-€¯ñÎlJ®°à—Ÿß‹~ù*.(~Ũ`“l”ª€hâ!>ÊJ2¼aeõÿFv5Õ^2"n•ÚßÁ55rTâ»/ÕWut×6kÍn¥Rɳj¢f¼ÅgÚN…O9U#î‹æÛeþ0»VH%Žã:Ào¥H+[ ž¼ïè»è9ÒºóŒP)cÞ·�Þ�ÝÚ@o”Xƒ# Þ¼‹‰ïNWÀǃ±òÿî·ýŠˆä$Ÿâ†ì ù öÈùå!Éϼ$4*±ªëê�«ÎZ¾¾c¥DeYÜLûWŸÏ<3NlœâR=‰$˜Œ³Ô÷P¤™ý™D’ .!j²Wø¥Ó. Z2 fNAŃvªÍ‰7øåNâ@ù€øo{Ymð 6ƒÇ%R�‘®®¹‘ׇ–yÃ%ydÜ»£äèÚP! ÛV…Ð’þ:â:gÖC<ç"4ÇÎúif— g[GÖ¨Ï¼àž¨ÙVÂPú‡× #PJ‰9G‹%ôóSq4wG$@/vØCùkgû_õ!÷NóÅÒCq]Lhðq¸<æŒ /Á jÉqUCdcK0{5¹§uyl›[Ú·°…§3>¬ ³ ï(/}ûá^i ðÒ£½Ð' ¶Šz7µHÔ°õð”¨æ¼o½èÐ'n¶»õlõ1e¯•i9¯*+(º[¹Ì«’.^t+)ˆ„_P/»‚òO!IZ2^7ƒÙ‰•|áM}/’ãivÏEYñÜeZ[áu®•êåaEGë÷ôFÙ¸ÍÞ‹­ø¶ŽirRÿþÂUHš1;…ÔžÄ�¡Î•“^æ]S.3}D…ùø ¢0&U£¼O›é¹˜Í‹Elý Ö=г­x‘Äx®ÿλ)ˆAï”H’.��™Bª§/ŽÍ¥2€¡”=�ÿv=ã%Çè·"4öû JPkN#ÔêQ’´>m瘘n8ûtt¼Úé01 þ´²‹«TJ*ÃÁ;f÷s*¢$/ÊgÖ-ÃcKš‹¼—Ÿåù¤ŒO*u2n·R@BYý±rlœÍÈPþëfk­ £],³ŠîÁ�~yX]žÆp•HŽ•SÎØm‰2Û§êbý%ÛDT§ô‹'‘,6ú•T†ú”Iö:'BòÒ‚»n{B]2ÿœñ�XŒ<-b¾CKÚm4™r³dÍ¢kwÑl¤ÏÍšv]ï×r®a$“¯."†àj.û㔽SfÇÄ&Ñß߸‘3¯k•.n0j ¡·P¤�}ÑqEÌ%ê’�ƒc¼üê+ºIrêÇò~2ØíiˆŒ¯æu€a=é™3É¡+ŸÿŽlÚ°di� É7ñ.›b0Ot!Q†| Ç#ÙT]ׯz[EÚÙ®"|-/¼õîPyýŒgß~Ï�ammÄ൶,HÌX‹ž½ýÚsŨ©Ñs³Nl# °¤ºvb�4Ÿ}Öw©ð 6‹&ï Õ[Wö¦‹Ý䫞ìíLhtý&·KÏ€=µøÓŽ}-|¹¥_“ŸVä[Áé–´/�KÓ)z±ìQM©aÔ•æ¯y¸D–O“ÿö‡Ï�<¯ŒÆç  ÚÊJ9 Ǧ‡ -4¯o Ò¼ØÊJñý[ŸÿøÌågo¨w.,4cÑ»-.-4ͺ؆¦áëo¬�í°¨Iå³è½ eõ)fÆpÔa!¾VJ¬9–•�YGGо•"ílv@ð9já�dEŒàëôèm7÷ñô@ëm‰ÝÀFþ=úì,%Õº’ÿ1gçl�æîÂ|ƒÞ|56c·2Dkå]>kË’šáלµ~cGoGGǪ³–¶Ž4›]¼GGCbÚ*"gž¶Vd€ B¾õ�uyøñL}á@ßMùùe�^(+ëp'R“ówÿ&= Á)¸»W§¹P…g+á2—Aäè5ƒÞÌ[Œ.£’w³&^iq}f=È€SnDhm5 écEØGW”×€ÇB=Ä7Ü}S ¯žnz6ÞXë†ø0{Çl$ÁÇ).-êË#FÚçiÖå?p¢•ä­Š„Óá8È…v�åé b;EØ·à¦Ûð¾Zäy/ÜRQPd€ô£sÞ‹P•ÕqÁÁ\ Ðî§@•�@|QMíOÜŒ—¹€­­·ÝÄÀüáÐ7ÍŒé`'E8å�ruy¸hð‘¾5BÞ2ƒqPX7¬ @ùîªÞ‰ Ä(.=OH žMí} x™c¸–f3óílÅ©ÒÆæŠ´sð�šPÄ^®Ñ¼xEAid ­y°µíiAù+gmXbP svžÆ›õÍĤDZk…ùEY‰_Õm�.öT¤›Ã;-„�”-,82¥µ­R+›}5sQ”â9;§…ꛋò!�hM+Z¢„t±‹"½wô¡D1ø ÝY„ëDsZ?ën3èç€/ó[W“ËüÅ5¥x™§Æ9Œ{!]¤9Ž;ñˆÐ÷J£~ò¡ übš“0žÅëgË®¼'”*QŸ±Ìq·RZÁ]Më-H i>Ò�?*”»Ò”¼ð�¼åà"‚_§»P€i¢Bu^þW§91•hcHÖ¶*ÔÉ9 -T¤³> ŽS…}ý¼Ü•\€òõU¿˜7U8¯{Ts6Ù{ü^æéÆàº¡#¤…sÒ•šÁ!;1ïÀCö]˜£ûú,D¿ÞÌû«Ê>uÛù%!ÉËÏ_6š‘Í*Ø»²Ô iá¾tu4L„ìG}l z&ç1¸Q€V—žÆË¼ôþ'È\Þm7eêG×,ìïWÚ< ‚MO§¸½§éµåBòÃŽS`ö !× �Æg×ébCþê¼p#ªú‰5 ‹T�‚ã[Æ|er˜SI¥Í øøƒÂš}HhŒzîÃ8f«ðš-¼y±ÌKÔ�ßQ`€LA;'ñ�|¢1UÞØÛü4¤B:Žôc$VùÁaãÈœŽâBÁ\KÂÔÿôËyä2ôþR¼Ì3Û\‡nŒ}•Ó»»ÚèÒ�´–£A: ·ô£Ã!;ÞØCì ÿB•’Ÿ^FØ|ž)8‰,ÌèÝ#èiÚÌÆü2¿¡âÍËÚ¶6$©(ØJ¥éšv4^å{­}^èÏ>C,s�f]Af–9¿¯ëɤ{ u‘Cb8šÚ= É9ûÏ÷Î~Ph•ŸppŒ10ü`Xþôê{—�%Q·Ýš…ö)ŸtA4”ÃhÔÇÒ94f–!ú¾ŠùäðÈð-†½á?�÷ÍŸ#Ææ�­Q¯+(5@ÆQŽÅŸ©ƒ8ðÝCn�`¾Ó�íìG/Z(÷_Øß…v¥;¼€XæšÖd%“h¥­–²aì­ÃÒÞäÌ|îî’üØxÆïä<ù…WhòN#íô•æ ý‹+Ý ÊãïXŽÛº$˜¿Øý�ÃÎ8-˜u=ô˜øÎÀ ä6BIÔ­O—^rÏwoCvpvÇØy[¤¸œÖf2.Gh©Ëg¶z2ä|Ì¿/¨Gá[Z<¶ÒAN£Ë/ì+ÑœNÎÓBŸLTÓ�yh­M§<¡kÄD÷*[–xXŠ<åÛZL#�ÖMSc•-:]Üý€Ýçó®v¤ðm:A¢¥-§óïew>)Ü͉!¸_Öãî*¿!ã²SVÞês·ˆ¦g€æ›ÑU-Ö°æ\óÈð5«êfÕŠÕç6Ç/½=g‹y¾¯áô[Bö…ÜEèªúN'¶öY��M~=…1÷_ã¸É´U‰Ì{z:qS£ÂPmm”i ¨õ³&«ârßNŠ ³ä*ªó Ö hJÂù˜gž­>dl7gVu=Û�;kñ¼½1¥HX0±°“'ê|Í•WN¹µ:Hž”Ÿi¶ÈÑø]U$,sõÙ§“ã>!\B,n 2ˆ¹ ôÎ #4\ Ñè|ÝxIó 3ã×ÌHÈ6ŠŒ³%ä"B­Ä·©ÏŒL»¾¹!¢ë½Ú €L°£î™ÑHŽÖ»'WÔšhˆÆ7¸Â ¡±OdÆÙr¡Vâ–eêrÂÍ÷ñ5ùç1ÎÒ7b¶ ÉL,ºwX¯lw¦´>#Ï0�{h˜‡„¨öRd�msï}µ¬@¨•(!M»û p>Fé?Sã·eNuÊjñõ6¦­L"'ga!!÷ÉÌ»ÿÏ÷wá4_CÖJœ©¾a4˜v¥ÙþND°ÖžÉƒ]ÇGœti= O{¥R¼³" l–cES†…7 äå‘#8î~j6íJù¦«ÁÆ™Äæ¸5¶YA.:†ÑABvUd…mr)?#¤]×,;¿œè]y‚¬võúÏE$]wøõ�çØÞ€y±\hNK'^è;(²Ânç@Î`È {>’“v Ê ŒÖy="©ª±°d Ž_…P­æ Fµ»";ì9‚��¹ù5a£^6š_¤ŠŒ¢�Q–n>_zT׉6ëŒ×nïrñš\>­¸]êöŠ,±sqä¬ĻÕÄ2/9ÿÉØ¢vŠúÊ(Så;Òrw£Ý666íW=ŽÐjW’šû*Çךú±¼ûnŠl±G.lðªÂÒ5�“³5g®+,UA4”kФj“ÝAÁ<£3­}pcsD�{/Æ“ݽ ¿µ‰ÎúÙQ‘5¶Ï…P®4Ÿœ•xzyÀL%¶pìS1n“–yOÅ;l‹S²Ÿµ1`œDh©EIÀ� ˆe;EÖØ/ãÛ;­³:hƒÎ…‘¨§Ü…ùÅ ŠÁ?cJéâçYu½éj„®³/æ\»ÕDY†:KÉ�4”Ãbò‚€.0£µÓjƒT[)²Ç.^È(Œ^ÙJ&,{iѺ’ˆ‘¨�ŒÆï>¦õþE1´ýó¬:ótóðuú°ºî©‹ÑU¬å:„ÖËq™ò𙵕AÕ{TK;¯^ÂB ôöŠ,²dŽïn¼rЧ]o}7œÏRr~âîcÆa¿7ÆúiÌ+”ÕH„ÜžÀø°õ.K B&¢{ú…q€LÁ¯¤ÄB,»+²ÉŽ�Q|5H Å<Ûp>Š}%H›(|QK(ˆëú˜sÝNCú°2H ÃhVz¯ÑÝ•�gÀМÕF‹ôµl¡È<Ùkp²_ƒBïÏeÂiŽk%Ânp7I62PVü%"¸Òaƒ4¯E¨j‰Ÿé½¬$Ñ>ÝZ×ÛГ¨Å¡b7Ev¡iÈ ¦ œBí÷^WFU—6Qš»KóAÊlŒV} éƒÖ)—L.བI,ºVNØbZàIx§(Þ_‘e¶Íh‚Æ«¬]} ˧yÃ8CøÇ`ÓGYG.v#2BahÞÈzÁ8,s{FË&|ù­Ài÷,s@&4´—ç•,%ØùŽ.#‡Ú—hÀ/j² lþM�ˆà\¤×"„6ºµ�:çl­È:Ûf8+ÇqBIT^æÄEMs?^æ2¡ Î"_§r@ú sï«xn>DßI‘u6Û2 N»ÞLŒÚÁ=jw%gE)Ùá�ìÃFÒùÊv¯O©“õ³- sBÇé`èòK¯&j98ÜŠ ÉAٜʱë»pÅÜ�O é'0<`… æ�-9ÀÜ4”ÃÇûlȃ|D½UXæaÉ…b‰›çÒŠÊh}]ÓX“ǘ‘*I›g%Bƒó"úfŠ\`Hº‡k]5žô Y…ÍùÉe^¢~ a®žA:‡[Ég¨DÒ�Ä{z*ì«È v‡äÑ*—#ÂpE&e7=L¦]ÏÖ”Ü_P”{U¹±˜ÌSB`OEް $‚²-‘X½H S"E[w&N»ó•n]˜‹>Ô±Gªk6CÊdÿŽ>ËÖ*ˆO¿mõj«V´ñ£ÕÇ�lT¥O]‘',sÂõQ(–€ÿÕ­u̓+𮊜a âÂ)ïEhا‹~€T]ÿ`k¢i,±ýJ ¸û˜ˆàJn^˜ÃNÔèÙ•H²ÙAšÚN‘3l•@t½»¡�N]lÛ¶Mé¡dk~^éÍ7DDpš�[ó ðÁÝŽßWÅj(¼6VÏ€LÎÙ#7B÷ ;$(ÍwOu^ÙÎÄ4p !ïúÀùyäÖ®y¨ (еdAÛ»ñLØjˆ�êñ´[åêUœ³·"—؃‚xxÝ•b‰¹*¿PhE=�|^YS�³Žóœ^c¹Ozç!ýÓ«„â�Ì…¾—"§Øùœ ˆ .kKƒ`&¢.'/ç·5äêÖÎpn+¯c€DÙ„ç ˆ»)kB×¹@÷í¦È-v½æ­~6 7š§!·öœ¾œ܃W › @Àø»‘¸4ô4t¡Îi³¬Œ4³‹"ÇØ{¾E§Ì¬Ùä çë"^ÎÏ_vg._ÎñÚ�Éeã»»bñ²Í“ͬ—bt2Nôý¹Æ>T2ŠšŒn/$ä鉎«kL *-¼‚ìd(ÑÜÝPšË~fîJe赯ÅerJ­øÏ¶ÑLé'šõ �î¾IÀF°' r¡MKVÔºiHç\�P•Ù“¶$¢öûæîÖŽ¡ù¡U#¤¡m5ãš�'ñpœÛn ¨¨�ˆe‡bÙª³¸Áhƒ  3Žã¢²‚;žP‡�ó@ÔžãCƒhÆ­ä:ú¾†KxãbjrHŠž[×µYäWS(Ǥ«”ôÚÉá–·î_–w:µ?õHÈè8 `ø¶àü øœQW² $„Ρld,WòàØñ®Ok!”ÞÈv,W?÷Õà9ku:�½î¦ÁfÖ+*&ërÙjðIýà¢%ŒÒåc=Z-} s;-B¸º%‹¥«û͵ 2r÷m¥Èu¶Ã)Ù0wTåyqÁSBØNlíñ}à}óer%èöX,ª‘@Ì}cëÈ=ëVZŒF‹O) üƒQirL\» X5í2€$žÊ6ˆCq.ô®I²Ej�¬w>¢{K¡Ž™>¼çÄ»‹çš…ÍÃoCå|‡ËuÚýŠ!ZÕ¼®M½ª¹ÙÚ»!rí�XÕæuU ®tª¥±±¹¹±qcÊÙP¹¹*î‚üñÚ19‘�RóZá¶¥—¸�[ç]»ln�gà‹ ±¨'’�ˆx¢Bœƒþa"†!^˜Æ[³æ-»^µÎÏ| °Ìÿ-^¯Ýò¯z‰I0vÕ¾Ê×sœŠ"Ð:ïw’¯IÙЭÞÛ2®çõþöçö=µ"·µ ŠÍi¶6øàëVßÕºÊâ¯@Þ0k·¯ ØôA-ü2DS�œÍw=g{5¯e5Ã>ñKWùß8ÏÕG±0‚ËþåW«åXì¤Þ­]­hÎú»³¥¢ZÓÇŽyãyj^yI2hª|@¼Ý½µlL1¤:.É´õºçõþŸ]u[@ƒo{§”.XÇA>ø6�’ŒÑK�!¡ä®¥X}T÷¼M$£Ä%Þ¯ eÕkƒdlÝØËA^DšOìÙWD`{?5;…Fr’Ø=_ïî�öY“ã¦9rûvê»ægFr7��6pFÒ©à*µÓø3Œ›hDóÉ=W¶óÕ×sqz!¦Uו¸vÏ×jXG&{½™†XÍ*q‚>8è\¯lç·ºôz–âqÐRùXJÉ}'c—6�Ó®­ F΀>Ágüêí¼)È�Ivö owÆ€*¸ã6š'dEuݵ΅ºÚYe;dz´~¼|ôRÂέËpÚgXœ5F騾VML¸YƒÃ»µ[} �àHئ�Ã�@„3~äÀ»%t½71!½Ë`±™iˆR¦¹ý¦Œô£¹¾%Ø­�ëýŸ¾…à?=e¡ç¦ð5Ÿ Þ5¿^H‰ \‘ùTcóXÔÀá�Fîe-“Í3/òõ¼mµ¤9ñZóß;ïeÂDC4æº\’Q4gßü²íÀ�&¹œ¤¨Œ>%ÍCOâ’ ÛþÀ¶s^ƒèaäßš×={Ï*Éö÷ML‘(x²âQ}1,Óg 5}ö×ã*ÜS³G8Êê0CÓ:ïaŠ \ðÎWÖ�«pmf“í\è…L]�‘¯qB–“ËpøØþÆì(gîxŠ�Ü‹ü¤¶™Ñ(6y{«Ÿ�äådTW-.½úÛÍw3øÒ»9B>ðÒœ¨G-ª“˜Ž2’ŸØR÷§ávø¿> ™Ö/�¾â$d©7œ¾¼rÏ}ƒÆo;f˜Ô”Ú}°k~ÆJ.œêHbžË/x\Ù† ï —¡z¨›]/á¾µÒœÈBg8JFp=�xµòBS+�fÍZ!•^å1ýÝ5VŒT®òü‰{ÛO‘rcN ÷ãÿ èÜÏ1åì·œ…ë2?ð3ŽÇìîy¶ñ@eT à¿-iØFp�×Õ`œ²j¥òúÜôŽƒôÆ–#_ä]'¯ínN1„â 0‘žz»–éXóÕg›‚`Εj¼ùÏèê8mÿFRñ}3”âu>gú*™õåCƒ`�pƒýqUÒ|ë� žXœ–…nï  y2sþ*L9BcEÞVD®í¨j%â g�Ɉ^fÌU4_‚$Š’` g|SgK%W6Û°fŒŠæÕªýb ŸÐ±Ÿž�;ÏQ­ù!¬ù¬j™fX"vPLsI¦bfúL¤RX V·Ä� x‘ŠØk.–TcÍç¡L †‚Â-iJõ$ñ- z,=„·ór�ëÆóI¬xIo]Òe±zl×P2‘³øh¸ 'ùRZ’ÎzšW/AY(,b¾ïOÄItt4ä  k>wÊJÁpŒ�݉Üóª±æ3sGâÅA·Ö§Ñ|Së]çÕóg赿ŒT§9ÆÒlªIåv9y¨éS4˜Öº‹æ"Bsf¹åËZꋇHW‹yN˜bªOíh†b«ÍF}S0yp,vŽ´ ¿ËíÈc@?“è^檕Z� R0h‡fë¼‡Š¹ª«f˜‘¥@1Ì$»–2©ÀãƒæÏDf(ÔÂP¾›«Vêô…È$cÛ€>’"å¥öfã’L2Ïø)�:xGÕ¥vYs\z]Œ,Q8–:Ãu2õ’£ÙêõÜ"£ô\Ú“"_LsË’B™[qÏ­SP4�–ï »êú—•ºåÅøÉ@Ãéÿ²ÿfïîv„¡³¶£…2`@‚‰Ñ,&»Ð«^�-¾¯oàÛùtZ²hã…Z -çKv9nNzúsÔ;ΗêùÅ.œÕ`ç×ìÊÓù³éUCØ;»“ü:Bîy÷¯êHÆÓ„ØzßÊáätOû·†¸Û£§Ë&ˆ¤…úá-rº×õÚ£ÚªiE„´Î­`—öå ÞIÕ,°©Óv/mêzeåÚÃáÞ›ÁV\«5êËU�rô;owƒùg³�”¡ÍWk•�éßn !×l»3{)Ÿ�Ìúݘ™åûn�åj¶åó«ÃT§Ôé÷ €Âܨ_|˜Éç°á¦Ìîm›¬¡tjˆšáF.­À¤õymy"—„9¬Ö—PÑgu§�_À_NMX*ç%�ˆ/®æI!gòý0äx7EF¨hº©ZmÚñÉÍ3%+hy³ËíB!§Ðõ"Ü!‡¿Ðm¹=¡Q.5+‡ìû˜èvÔ û³ï³Ñí¨Aw²dßçâ[‘A�³ïÑ­¨A&Ù³ïë=ÑmÈ {YÚ÷ˆè6dÐ�8}jKˆnCt•†½˜ï‰nAtà¡N)ˆnAWô úÔæÝ‚t'𺽠fß‹/¢ËïŠ®Ò hß?‰.?ƒnö=C�R]~ÝqüdœcN)fßDß½yÔ“ ó«Ø’è⻡+�‚N)B¢‹Ï 7Mú£è”âLtéÝÐý¤ƒö=%ºônè^W÷@û¾#ºôîè*.Ô)Ñ…wGŸô{zŽùQ=&ºð ºÉOôèP€N)ˆ.»z÷£ô ÑðÑewG÷TÜ€N)Ñe÷@Ÿôu‰:¥8]twtÇO>JÚ÷ÑE÷DïÆ½ô©- ºè螊³Åfú«e¢KΠ?õ´ïŸD—ܽyÔÓñº† çD—œA<êÙ"‡ì{5›]pOtO5û× S ¢ ®…>iö}„:¥ ºàZè—}_Aö}¾=]nýù¨ëRW攂èr3è­G=-AŸÚv{¢‹Í ·õláÌ\DÈèb3èíG}”�N)4ÑÅöºNaúðD—Z ÝñU¿Ùw´ïK¢K­�î©æQ¥ SŠ.Ñ¥vCoïûf:¥ ºÐþEW}=XtQ§DÿËÞÝ-· CAn Ƀù+КšPמ¦iÒŸ÷ºú€ìc„É…f;ÕÅî+|ÃÊ‚cÉÓú%¡ô{�‚F)îˆîiFtÝ©Ÿú½}j{<ÝÏútQ/÷¨OmÑýŒ….›¶ºB�RÝÏØèÉ:Ϻj”‚è^ÆBo†~�AÿZ®ˆîeÝZÔóº}ÞbF)ˆîe]õ¬»G�RÝÇÌГS¿·9è‚�’è>FÐg‹zº‡�RÝÃtU�†~PÀÝÃú|QoQŸÚ ¢{˜9z"ýŽ¥ ºôù¢žu¨-%ºÑ5Ḩ·5èS[Htÿ¢èÓ~ï@À~%ºw¹�>ö;l”‚èÞEÐg‹úØï�ôѽË]6mÒïŸP§RÝ·tÍ =Ð×  >:¢ûƒn/êyVµ¨»ô‰î[n 7æ-E�R|ÿHtÏ"èóE}x)·A�RݳÜDOL¿cF)^ˆîYÝÞ´¥Ý¦ß?ü&º_¹….ob¥ßsP¿—D÷+·ÐÍ›Øz�:žè~e}ì÷5JAt¯rÝlÚö°Q ¢{•èâ.]êîÓïïݧ(úlQÏRÜ(Ñ}ʺé÷ÔïÁè‡;¢;‹®ýžÖ¸Q ¢{”ôU1ö;ìx¢{E¿ñ&6m+Ô(Ñ=Š¢ÏuéwÔ(Å·7Т;�>~^6m1èTŠ=Ñý‰…n¿”ka£D÷' OºŒÏ ýÞ£F)~½�À“~îwÔ§¶”èÞDÑíEÝü~߃F)ž‰îMlt{Q¯û»þ.}= : ôq’¢îJÐñz@t@è²iú½ê`wéÝ“,£›—ru¢/ø°Ñ%Dw=ôqÓûÔÝ“,¡ë¦­êPÀÝ�,¡ë¢^÷«yÁÇ·CŠ:ÑB×E]ûu*E@t?²„>ìÔM¿÷ Om�Ç[è÷D€®‹ºlÚúd‹yÛ/ êDw½‰ÎýÞ¢F)ˆîEÑÍ¢./åª|¼�>ªÝ!t�H¬óû;Ja£‡Dw]uƒûÔöDtòz]ú{¼�nÔ‰î(º.êY ¥ ºQô·õõ¯å¢{E_êwA¯úô*ö÷ ý.lÎêD�.ý¥ØÌÑ¢C—~Ñ[ü(…¢¯A—Ý! t]Ô#3IQÁ>µý™¡¯ô�è�£ë›Ø,­ö5v”BÑ¢D/›¶¶Ý¥ÿþu޾ %D‚±é÷~ü= ºC�èV¿Wлô=\Eã/9¢C—~ŽR¼ZèQ$�ºQ'ºCP袮/åJAGß/ ‡|ÒG7_Ú¤ßë 6JñiŠÞD'õ†è€àÐM¿W°QŠí7 =‰Ì®�õî(º~i3¿ß;Ôðí=!: t{Q‡�R>êDƒn/ê]ú×r~FÏgèÑ‚D×M[™AG)}sÙªÝ!hôù¢^õáx—þqS–Ö£Nt@ è¦ßÓ 7JQÌÑW Ñ� 7“~Þ¥oÐçýNt‡àÐíEø©í« ç٬߉]û7JŽèYyÙªëû¢;…®;uíwà(…AÏÇ~—E�è€`Ð'ýŽ<•âXf×ýNt@è¢Þh¿#G)‚ž¦³~': tíwÔ(Åö¨èv¿Ý!t{§®ýo¿€F)ŽYšj¿GÑ¡7W/åt”pük–Þèw¢;‡n÷;x”âø.«ô|ö~†èA¢ÛýÞmQýžÕuše—ßïDˆ.›¶MY¦ÈQЧc[×úSî2?Ct‡Ñí~tØ�?ÖumúÝ 7DŸÄôLÔQÀïîúJuû÷»¨Ý!@t]Ô7ù€Ž:þóûz_i¿�ßW‰½‰¢d­ýŽºKõ•éw}Ô‰n�îÖï »ô·O]U™ßïz@t‡àÐë~/M¿?ì0ýžš~·>ªÝ!PtÝ´Å›ò)»¥ßïDw]ú]ß¿[L¿Úïæý;Ñ‚E×E]û8J±}ÙÏû�èÁ¢ÛýýÔöåóÆêw¢Oâºö;è_Ë»û~ت—ål>’è§üwôd}Õïí3¤ßŸ[»ß‰î0º½¨‹:òS[lú½4ýNt@PèfQ??꨻ôw‡±ß³«~Ñ¢ÿeïÞ–›†Á +Ø@��Ôš4nM¡¥-ðþOGdÉùm™pµ3ú3³z€öâ¯$k#ˈƒžžÐeýŽ«R<é2b _ÈwзôÖöÔůß�Oº1ÐÃ|Ÿ/»Vl“ÅT)~4£|'ºŒXèáú[¥xªùî7m6_ˆn"£�ó½ÆU)Êj´~'ºŒ(èV½öëwùÕ¨J±ûÔlúŠè€@ò]^Å‚«•ä»lÚˆ® ]n¥T)Ê®*''mD—=Èwx•âUª¾ÿ^]FôpÓ&UвÁU)Â|'ºÑÑë©oB[uäð»$Ìw�ž]ú ß· *Å‹¯RÈú== ¢Ëˆ�~!ß÷w *Ū ßÏ]Fôñú½;jW)$ß‰î† ôa¾o±UŠpýNt£]ò_¥(eýNtÑÐÇù¯RHUŽè½¡=È÷Ã+¨JQú£¶`R'ztô´E—õ{UîЫØõ^òý<©]z—ïr+¨Jq·ßJ•bMtQÐÃ|twÔ½•"DOˆ=õè½|¯1ù¾›vK¹.߉~*ÐÝú]–rè*E–»þŒCO‰}¼~—oéCªM�ï|ÒeÄ@'õsU®‚U)vi›ï™)7›ùI�èÑÑÇë÷Cõ[¥XuùNtct ÷×ïö‚± ö-ÎûÛ0߉n"¢‡ïßozù^½¿C�Ú2¢÷†ôÔ¡K¾WÛãÝ3²JnÚˆ]][õÜ4æ¨m)Gmó5ÑíЃÞ_¿g'ôãó=ò¨Mò�è1ÑÃ|_Ëú=ËßÌ�gܯ–[õÅ£§D�޾Ÿ±êù•ï›Eð¨]út�ï·GsÜ<�ÚÂ|':�ï'tóX`«D÷Cz¸~¿Ís‹þ^`ª7½|÷“:ѵ ÷ò=_�Ðßî7 [)ùNt5èý|÷è&-`UŠÒç»ìÔ‰ýò¡ú­CÿÊ÷Y/߉~*ЇùnÕ—ýçÓu|8©=*ººÈ£îÑÍ”ïy3Èw¢kAOë1úçsÔ–J¾ý4t ‡ù¾Z´èæåw|8©]º<ꂾ*`¿Z.+Ÿï³iMôèèã|_vè¿ Ô·8=ú²Û©] ºÛª ºyV)dR'º ôA?ò¤>÷è%¨J±è统ԉ=,ÅÎ{è_�U ™Ô‰®ýüûÕÅÝܰ*…ä»�Ô‰®½Í÷޽ŠõÀûMÑã£ý÷“úºC?î èwûzBt=èöQ¿éÐÍGT•Âç»}KtEè²~ôwàQ[–ù—r5Ñ㣇¿oš :¨J±ùNêDW€žôò½‡n¦îx¿i#º&ôóV}&èН¸ àí¦ÍNê.߉ =Ì÷ýçÓY¥ðob‰®½—ïëºYÀª>ßý¤Ntè©ôgÖ³ïò'ƒòÝ^ßmÚˆ®ÝMêîQŸöÐÍËX¥�7±§ÿHô¨èò¨�Ñs\•ÂoÚˆ® Ýæûýè¨í£ä{;©]º<ê7tó Y¥p“:Ñ5 õz€¾åûRò}Z]úlˆþ}ƒ«RȦÍNêD�‡.å_¥p“:ÑU¡·»¶tˆ¾·èõùÞmÚü¤Nt?Þ“äúÛ=êV ÷RN6mD�þ¤w¯b§º™°oéÛMÑ5¡û|Ÿ&:îV ¿~w;u¢ÇFŸüýíèVŠý¶Ëw¢kAwë÷1º™án¥8OêD×…> Ñÿ |ø|÷Ç«D×€îVru€Ž¼•Âç{·i#z\tyÔÇèfY .€—MÑ5¡§côß |O\¾] ºìÚ>ŽÐÍ+¬JaÑ»—rDW�žÁª6ßå¤�èŠÑ=Ã>ðQenR'ºôVý:êø—s¾Ï¦D׎~@]ßô'u¢kAOþ…þe«RTYoR'zCtíè°*EÖå;Ñõ£å{Úæ»ŸÔ‰}2BÇW)^›nÓFtõèÐ*…›Ô‰®} £o¥ØMº|'ºô‰ �Ç ìW˾Y§IBtÝè¸*…lÚˆ®w¼»žÀíÔ‰}2FÇW)¶[7©óI¿ôì>ßk>éêÑaßÒol¾»I�è Ð'—Ñ�ßÒ÷ùNô+@ߣ~µÜØ&ô|mÑ¢ëFÇ]_e}Ftýè&…µe¹ŸÔ‰®ýãÝ%tà·ô§.ßoˆ~è?? ~µ\åç|'ºntÜ·ô}¾×iJtíè oéoÒÆoÚˆ®Ý ªmiŠè×�~‹:j;¸&ѯý7ê[ú.ßg5Ñõ£ã¾¥_æ+ŸïD׎^‚ò}qh_ÊýÐaUŠÆoÚˆ®W¥hó}6%ú 7¨ à›nÓFtõè¸*…Ý´µ“:ѵ£ÃªÕÖmÚˆ~è°oé7î¤�èW€Ž«RdD¿tT•â)³ùnßÄ]?:®Ja7mvR'ºztØ·ô.߉þ—½»Ûmˆ‚LXËò³‹ °M¡´��:Qßÿ麦‘¯+ke¤áró%sd39‡=²¨*Å–ïB§@‡ÝÒ?mC]è è/°[úÕþßPú§GGU)f?î½-ŒÐÐa à·|::ì–þØú�ïB§@ÇU)Þ‡ºÐ??:lüÉ݆ºÐÐa·ô›ÖçµÐ9ÐO ­õ–ïB§@ÿ1@U WÚ¢::ì–~ò½0‰ÐÐaUŠ�ï·¡.tôë º¥¿¸ÒfB§@‡-€wÍ-ß…N�Ž:ð‘,Û‡6¡3 Ãªïù.ttÔøÙ7^è,è¨_B¾�Ð)ÐaUŠÑåµ:zT�|äãm¨ �U¥X—m¨ �T¥˜.� C]èè¨ðv,k#ttT•¢ßò]èè°*Eò=‰…N�ŽZŸ…|ï„Î�»¥?zk„Î�¥ *…«l–�U¥0c^�T¥vÛP:zd@UŠ}e�ÐIÐÿ€ò=ó,::ì–~SB'AGm¥˜Ë* u¡s £¶R¤£5B'A�. WmU™ �Ý�þkÙVE"tô7ÌøamêNè$è°ð®4±ÐIÐGP¾.: ú¯ãÉ÷¾-¡“ G+èU›Ï…NƒªRL�3q*tôëZ_eBgA�bP¾—!ßS¡s å{¼: ú ªJáŒÐYÐa·ô­: :ê–~êc¡³ ƒªÓoß �=ò˜¯bŸ «�l4è [úÃê…Nƒ«R”‰ÐiÐ[Ð�S �tKès¡Ó Ãª6: ú‚ù*ö¡Ó ƒnéϵÐ?=M×uíûçíÙ]C�ú¯÷ç|>ÓažzÕ¦¿t0ú]ùnž¾ïÓØÔ¹wírúöúz�zÞÚ±u>/’ðÃw—ŸOÓñx¾ÿ‡ÃüŸêk/ô¿ìÖýnÁ`Àáb4l3Ÿñ5¥Xi¹ÿ«[G"þ�E6Y,yž[ø�sÞ÷ÑÏ¡‹=®+/*õçNs<ͲC¸Ï«å.Mƒ;JÓÝr�ïÃ8›ö;íÊb½Mfï›ó|wf[ѽzL]ûJ]„~ymΣìPT."*Ý ò0Žz�ziX Àfsê%ÿ¤ì¼ÿ(ú¹u‘ú©ÝéM‹ÒÇÐ!Ý­òC6nÕµdrÚÿÍÅ`–ìn�~Ùºñ6ŽâJ}=ÿ2?DýFeýQ>Õ/Nÿh$úíâd=,Õ[½Sëà_I—y5ÛÕm2êv³€[­â|õÈ{}ãÛÎóølHýÝŽ@fÿiÆëÆWÀMIEND®B`‚pydantic-pydantic-e28e879/docs/logos/nsa_logo.png000066400000000000000000001460551526274674700221340ustar00rootroot00000000000000‰PNG  IHDRôôü/¸ýPLTEâ¯3ã±2å±0ã°1à¯4à°5à¯5à¯5à¯5á°4á±4à¯5à¯5ã°3à°5â°5ܤ=ÿÿÿDq”i<à¯5{¯Ô³³³±9˜k=“h;¥uCšm>žp@¨wD¡rA¬zEݦÞ©&ܤÛ¢߬,ûûû÷ööà®2Þ­6Et¸¸¸=v3z 8xÛÛÛ  BrÿÁ+íííèèé(ÅÅÅññòž��æ²4! ……… ßßßAzããã…^5HII§?tŒc8ÓÓÓ Dx×××à²:5%7h©ªª/!�f:ìµ0ª 'ˆ`7D1pO-fH)@-�[5:)®®¯ò¹1;oü½-›š™¡¢¢aD'÷».yV1}Y2ÁÂÃ///½½¾=d1cO8���T;!}}}J4–••°}GÈÉÊkL+'''þûô\A%º;RuS/¦¦¥ÍÌËÎÏÐŠŠŠBBBpppOPO >n;;;555ùïÖvvvX>"Fmü÷êccc¯2ûóàÉbuâ´AéÇp'KièÂe¡k3iiiUUUõäºñÙŸZZZã·I¥p9æ¾Z>[ëË{øëË–e2+BVåºQ´¯ªòݨ¦n4´˜EïÖ–:GOóà±öèêq7íυר8îÒ�¡o;üÅ9ÆWkÆÀºTND`Q@�mA²âÁRDAQJßq­#e¨¥ÃäsQâá›_w?ƺ��í9cœR²ßïÍÜJ9c–ãÙ:Æ;åÚ�<‡Qbºb"ŪDL\“PÀÐUýo뛓)µ”â«\Â-©ö/r; j?aŽ­Ò¿&Ͱ-ꊭË3´�ò2°n[DÜOþÇWq?ÂTùW !‹›bô ƒY‚p‹“�•,®l‚D—ZH…ߨzpºÚ:œSÊôÜVE^_ûS7 å8ŽÍ nËaèNýµÎ‹ª=ÿ–ÿžù¼~*„×wʳaá‰�kµÃô\uß•ã1;øw9dDZìúº¨Îi¸Þ«£þ™t�›"IÄ­8Œ¦Úm‘÷C“½û_ù›òTíÔ> b±@ —{ÆNÙ6,²<Þôm~éFìyËšášOé£`qè¢>ñÓÛ/çŒwU÷cöæo!»ºú´¼ÉU÷­@qsyÀã6‡ÞþƲæTW2ˆ¢…ð.·U÷‡Ãˆ»Bþ<ŠQ]ÊãÁ–¬¼i8…WÝ·…aÆo‚¿Q\Ê̺÷ñZ¤ðúXÞtGêícüaÏŒZ‰Â0¼e«mñZ§4 Â-PY»�ç"*ðx±Ýh1Ht3¹ŽdsáEšŠ$È‚(n? ·GÎ,gÎ=Žy{ž«ÎœiPÞó¾ß÷�¾M?oñ½þx¸œà©È2Â¿Ž»øS„ºG¿úd?¿4«;§â¡ÝàU½õn9×7Ú•fM;É32k™ÇÃ4�³OGýŸúóÄð~–õùâf6¼ßý 8ÔC�·¡ë<¢×.%Ó< {5D¸'ñ\éè4ìjœ�û!^÷­•/’Oš|�W¼ÿÞsßµ�™äà‘î¶­ƒ�'%î]‡oÐÝãtßÜ–v_ÞäûXñî   Y/jébÚr¼A·+Ö.¯n~rà©5Ew¯¬î‹±âáêx罋P*Q+7$¨Ã�2^ÝÒÊdÿ8$(5��ÌÑ}€sÞÑ×­“ͼû\ߌ2±®(ÏãÑœ$×kY°“û�&$t Ü"d[Z‡¢ :¾¬%Ž01UË%Å9?îà~ž}Y·-gw7¬ùœ±¾ÿ2ÖñdÖ¨b‰ °‘%Šß±NèÂêðTà(âËMÖù„Ä£¡Ÿ‚€×º7ÈÚÝ'‹û\ɽÌÏg{J°?�ãñ³œàÕ»C„°Åic#·4�#�/×€¢!;U3/à[]Ü}Èâîž�-‡Éýõ‘@ð¼¦"ÊÔêÚk¢ãr<ó_6�«þ‡�rÌÒ]ÆüÛ•ÂÚ}KÊ.’Ü­ÉS?µJ Q2Õ¶Q‚ÿ4,•â0›#D ê2|š.#ÖÉ*$Oªäï€9vWìÍ|Ô#'÷©’{XÉC/¯0››ÞeM/1½õ)�ãª.3Áé2Ï<Î ‹6ˆÕñW°©þWÊ>Gò�âë�ˆ¸UÈZ Nˆ�7ˆP1m~N˜°ÿ5wxã”—²Ïd� ö ò<#×ù:› ç*z&rˆp=ýÙî-:'Ëk²Š‘§‹S¾c/îѨGÖvÚ±3Ý›Òo &4Î~³=¬‚ˆkDÈG�I‰°u†.´²8ÿ1Û¾„i„‡¸¸Û{:¯à&¬nÛ%W‚Ýa8RS­ªêWhÛÀ¡!‚"Šˆð�½«iM#Š¢I?“æ“áQ²Öè˜ ˆFPQ"baüY¤›š…Hv¡QG!!B4JH@!%íðß5cgæÝywÞTK7jϦ‰�Z™;÷ÜsϽããH•h+Ї¡ˆ¢‰ŽuÓ½6‡}å¿]ónsÙrKõ–©KTuÁ6z䘎 cQÅ)Ö iBÂtuôß±ìO…GåD>²Öt×Nö�õ97g×–Ì!·êÊ=­ Ñ‘À¡=X(æGÍ¸ŠæåT�Š�Æ‘(3’­ ªh†gö¥µ…ùŇ�» –ƒ�CìåG -ËŠ9»ª¼|uZÀ –ø0º°ƒ—h‹/1²P{/²ñÉß°1“üûyUtoV²»@±ßu­=UFåË1µŒ×ˆŒ�V’‚HÅ;Õåxœ²ìàK¢Q[Yè%H½ŸéŽ�¨sűU¶;¨’ßùüi.KûælÒÏ‚%Ä4Yz2ø›4s¦E¯Ü‰¾ôX5}hrlüäq¦²(X&¶Ø—ª¤µ�tw°oߨœ»Òþá=°b\íG›Ê +%4b:°Ö†rê–DÚDï-Á 0NÇÍ\�-�skà ázR�t/[XC�}—sn9þÝ 0\];?¹}y$¬OŒ‚‘ÐÞDÃü“<è±0```J›ÕB�=.[˜0%ÝŒ5©1ÿS¦d¤¤héÑ÷è+à¢+�¹zÎòÞpECP¼Š~é0xrÒd_ž¹mªõÝ]#Ͷ­9^}ÂhxL‹/Â=ãDɘ¿Ü¥ZÁÛPÇ<ÉBq Ñâ�Í‚(&)x‰|Ö½góŽ&ûÎÊÂ,áÍGZÍ�?9iÎ×[5³ÎÛ²òR5øI�oËŠª ¨Êöõz›¨$c¡ä×V°Ti'@Bøb߂ŠúÍJ=µI “ìêÆÏ�ž[\FÕ||äÂÄ'TçqF+‡i#ìr±|˜+ %´�©ã )­ßý âæï îIŬ%‹˜¢ØÑ[á÷1b£Ì$;¨ì³cË®CÑþM˜ûÊ©HÝ„˜*ëB+R÷¸cþ¢3òðQ‚*-ä×isø¯G³¥Çƒh^üé É>¨};ÛþÑVCbó=û¥`J©_øIˆº7Å<�(][¼y±ap‚ÔÉ©áEÛ²YÊcÇ·��'ð’>Bä$³`ѦÝ,P¼AíY§ëú\ø[„2Qoî(1Tˆ)u°ŽÚº(¡MÇèɰ–—¤’²st*òÞüÔ/TOO=œt­2¿"Cà„·kˆV>€¿*š{ö«mgV§ø©Wñë?Œ4wÞ²�ìEE˜•ž–µ",³7™#9ͽ™É3ÑIño•9`g¶Ý‚� ==n'·¥½ã(=º· ¿¾0Í †ÌŽ«Ï6j_K°:bد±úcp¶ ²ðÏ9Ý*îû ñãFÅÃ2žÑJÀ Ž*Ös«S¼Iõö=¥ö+‘¡ÔuA&Dî F†]”3Â?F*nôñuF«+¼»d$ë #âžRüÒÔöÅ Jí�̉¬¦i¾NŠ8Xhl™6Œÿó€cj†~}†pfòq¢!É/GÂ3¥øì”öMJíížMÚ&Ç`T¯…^á`¼/~;¿¼lª�táõ‡æååùØmdŒúo¶¬d3å“é’B³OW©¦²°¯PCæ �UQ¡ †#’!éN¢b+ÔÄóf÷ùV}`Ç ßngGÏtÑ >³%Ûn÷êÃ>nŸ»—¢}ÔÏÊuµÈwL±ýŠÖi5ìñwó)Á Wt§æÓ´á�qóŠsû‰·Aiz"ÂY×/¿B¼ûñåꮟu;\®ÑãyF�V¡=±I…úÚè‘>.—Ã�m®^n»ÍsÛï¹¹©�n¾àY°%DcX×K‚5nެ>dŸ29÷fÉ(çî®ýø¬5–=eçâ`ñæóÓý]û5ØÛj¤_óy,ì¸Õøo«Á\==7¹¼ïñP�Y°9»DOùL¶Æ÷_ä][H[g_wëîãBÙØË9¹kªÖ•¹ÀP— ƒ‚ìe4É$`t‘b´U«‘TÄK½ÎêZl¼T-Ì.˜M ™»á&îi�Ûûƒ½îûÎíûN¾œs«1±?ÆZÚP´¿þo¿ÿå3jÔ™Î=/¤pÚ¿Ò,kuBs­¨d³Ëñ½°:6¬Óº1²­VkCƒËåõz<–x<^¯ËÕÐ>‚“þÝðìê‚äYRƒCâ¸l‡ÜÜ}—âi”¡{B`wfÐ:Ä9ÎÇ®I¯ÐüL(m.Èåâ´/ŸAŸ//2|#º×.¯0벪×ö·‚{‘H8Ø€?†Ã‘È^pkMmuyÁç¼�~�zèá±õ¸GÆõ•õã�÷>"úp¨•9–#Öß»EðªØ3&‰�8¯*�£B S•к[››>™†jL_Y<Y^�UwNsa,ÛÞÓ~0Þ=Ü mTª*³9?ÿ¢ùùfs•JØ íîF#Á}“�ïuñÔCæ)£Äuy=˜x½!aè½Ê0Pv\”Ú¬ »)Cf&_3ñŠ 5%? E4¢H )„ž8¸g�è­À·ÇâRïÙ¡QU‘9Ÿã¶ªª@%ü•ª*þ_C~•j4´³ÞÛW»€ÙsÌar`œ]ŸŒ“ß5—µ¼\Øú€X«gÇj­e¸( Ò¹L*Ý^æ9§t“ N=Ú³�: ö¦8·öi�pÈwÃÚVdwgSUÉT#žø7ç3Üoêƒk �y�xøºÀ�’^(ÿM�Ç L—OóŸ/�Ïñéœ)J·—PUq¬ÝžMø:…S[lsÔL\xU£Ákñšß¡QH·™ [Èü÷€ú@è0¼eòooÞ™]ŸW8p‡L™Ä„¸Ìk-`�Ýx¬_šÑ JüSiŽWPÚ~K9R— S¦í½ƒ­¹âÏͯ3gÖ�,á¯)ÝÙ.ʇÖMÐ}4êæGw¢Á5Hð§’3t„nü·;ÙOçõÔÆ©BfµÆŒ(ØŸ=Ï×<2i;Ù¯†BfÒð/ iX]� œàû˜^#ŠM^gð ï~IuuõIøPÅÖÜÇQ.±ˆ3"°þ\³þìsHyM°a&ýw¤t|UÇÝå³*öÇ›�ð"Õ ->¼Õàñr¼kèÙ©!Éo¨[¡¸oÏjb½­Mz÷jU(Ý^HÛ¡xŸTÓ7KοeR¦2®MÎ9Alå·£¡ðÂá'A¼ ¼¤vïê‘ØKôÍ=6Ô‘!€æì&9Êe+—Å´gýiÄù¢ˆó P�H)ì=Ä칆g(Œñ]`â ×N€;©ÚÜÝSsö¼ÍÌzŒ¹—®q·Ò¿rD¹,¦4tZK²‚ÜNk¦DjS?cÉâö19WtI$TKvQVæŒ Wgo€ŒCO)Š@ÙÞ Z9Þi�qd2Æš{òr¶â! HÊI,S¼Lób²8ç%™å¸j„¯S¾ÄéÙÜßZ¸ÇyƒÅµEŒ§€÷ÍÝ ø"øÃôSâR¥P/›¹B\HìÀIš“iLégëç5I4Q9ô]�½'Ñ(TrÝ莆¡õa ÅùZ8”bÆI{¯ …÷A€a£»sÕŸÈ$€pÀf°0+A¬¤-ë|ç¤èRWÁÕ4ÅyÙâ5ó Œáb*4è×Y#oRÇ•yîYYs§5º‘ùÄuÅY‰c^DZîL¯lŽä\ÜN@˜è’hALãSoƒ"ÒçGt¬_÷Z€‘›/šUi�ÏoF×@tçÞ¢XQ:WŽ&a“d=ýrxŒóy‰é&„ÁjÒ Ñ©ë¬1ô¿'¦œ åV�gk7ÝzÚ€1÷-èåÑEcÅ̽¤2I ±ž>*Íy’sR°@�‰gåB±^ÚÊjT­Ä-]6yÛÛ)J#ÇÍÝÚAG‘v¶’•<ëi¦ÍÉr޼BIOeü°‘¿ÿ~¡•³¡<Ê¿xê‘<ª€—�XÚ%b{ÖT<:ëçŸJ ¼DÆsÒ­uˆWOóÚÊÄsŽNQúFkY+·†7Óʯ^~4l²¸XÚGü2sRð>UƳÎ�:ÓÉ9âÔ¦¿"öò6\¤»Š…ü2ñIMGù(Ð@Ó ¸GYÚÁ=wKz&°>ë(˜•[ÚŒFóŠ4ªÏ ´±q¬Ý&^~_4Z@®õM9á¸)#(çiW[ÚÕ±s߃�»j·BsЬéÔWØ_5ñ�ç-˯¤ô1ûk% Ä0ñÊ=†r*3ƒržvð›àxàÌ$‘¹£E®£`’¢ÓãÖà9¡Ç"{ °ƒßß,œÎ¡ÿ6BÚÝ…Éo# C¹+²™)”CÀØî²X픿ˆihîC7eþ%OÓ©ÎÈ>/ÌL,*n·rá»÷²ødP3߉hÇÇAÙÛ©^O0£(gißÜózØÛ·ë"ÝýÚn;¦´<ë§8ÿôë<ç« *¸ 5�-F/#Ä”Vcž}†ñì.ËÖNþÅ´ÍØ¥iÏm�ŒŽðñÕ>tbðhXägiŒ§&Ã?Ë7S•çdh?¿‘¼ ×+òy·æ(Ö³«w«2�r  ®1¡�ÒŒ`y¼aâJÖãaNË_<-‘æ<Ïùl–z ìüRý'yÄ HËNƉy\á@zJ1‰É5�hƒGmNP½�uŒÓªS_®“îNÍ 62T_blâý;Lä]@zǦ ®`f>¢¡Ï eZ0'B{Ðâbòø±¡Ç#:w–½§=ÍMæ7x!Ή ƒ­6æ,CiÌØKÙŒ®›Ïà1ÕuA­5²žÝœ™ž]ÚM0�7jt�aìµøD»{׆5ί¾�‰;Mã… ”aìe‹�¥0´Oß@;SœÛ ¸™3 œ'2š¹ž]äã#^/“Ðñ˜Zq£ýÛ‹E†1¤£Nk¹ñA”™$º¨Žëñ§¢:l1á»rP$PM³f¾¶“Ùž÷ñ;û¬±«—“§¼iЖG»�§èT¦ðdânÔŠ† õÍ6fþ«^b‘ØPmGŸX¥`4÷z#ªŒ÷ìX_f�]“ä�ÔÚh}/fzlA«Kaw�Ü^" ôò~4ÐLjÏø”yFíl™9ßmAcÇé)£¬± Öäéµu­1å)<ÚFÖŽ‘&Í ­_ëãìûؤO~-èØ¤=8;fλ¦ñ=•àµóq_×HæѦ~�ùy®³¦¾&9,ÐWJn£;$wV昡G‹úðl™9oì; �‡ùψ²‹/¼áêÜq‰§‚õ3šÔªðH}¥éøh'£®ÛÞ#O �â|l¡GÏœ™s‘=°:xPÏ/ïÖ;í—yãj†�x6†HáS5*ùßY“ê _uÄy´þ ÒßÉC‰L5ŸA3çkö]lÂPâә䋒ÞzÖ¥h‹Ó]ç;no>•¼¬ÜY+í#¿XCv{‡<°bY �…Ú\ºfßÜ.ÞIkVݺ�{€¤,=B`ŠKæL)QæÎ©¥’8rPdZsƒa€ çcZãÚUgUŒ‹×igI¡ÆÐiGÙz³ÜCPd2gJÁ OsœSÎk ö÷WŠNÌ�­Eÿ°fíÞhþ™u혋÷zMÀZœþØlÝÆgëÝXËÝ�‡�'¡çõXÓ k4( Ó”_é˜gIL:Wv™¼.3ɼKæ±îœe׎\|Èdanbãò\=zLd ’±î d6r7“ý4�¢°þЕ{×1ºB/1ó=¥¡œ@�Ù?£Y;�‹�- Ô8i<z�#½ÿ=ߤ]\“7–µÆ<öƒ*ô„΋w‹›å�±×ÕVµ4ä|¯èŒ‡s„|sv§N;‡ôh ð-ÞÌÐír#©h½<ËUèÔðµ$Þ@™Ðcïš÷⩈ŠpO@8Ç…š] ÏÁCLzÔw²u㚆�­{ ˆ7‚IÌpaýõáÑ2‹Ž’•‘‰€å+¾�Ëïã'³`u~ø$„s<°ï¸<0�»‡’ø2r¡ó ñÔ‹DX?qþ/¹/*]õ,+­,¬¾Úœ{•;¡ÔÄ=gÓQ+:ŽgòXCOH8Çä¹M&�Ó:¥j >Xœ'ô‚Öx’uªÖœš1’ãÂÚ«¹�ï·¶õ NØû|6¾Ü¸„¿XRÝ-È ~§F ™Ñ'&œãéÜ>“ÄýRÉÚíó¡_•«ÖM'#Ç¢AHZ�© íÓˆcYÀÜD/:}jR[¶TO ç€õª Lâ)�T”¬ô%ºøvÍI±åÔIÔm袷Q3‰ . £·X|G¦ígWlWÒi" ëô¤ÂA"‡òŠ¥ciA»N' ÅáÕFWvðéc8Ÿ�´=§¦Æ, ¢&'á$> K7©­O}ŠŠJXÕžàðÔy²ZëÊK†ô÷‘ G;�ÚM¿£Iò]a6׵ܹ»d·ollØíKw[Ü5‰²õ0¬#qŽ|À1¡…ý çàŸ;~Î_嫵¼[šZÅœ{v3¹TË©�|ßµoüüñGÜæñÅÇ�–ê*³ö*¶`�˺ޑÌ*?­;¡G ž&†â�„¨€’›ÍÑ1€oÜf8ç9æ;öG?øÅíÛŸ?üê-o?¼ûç%wE‚¬zE¬“=¯Œ˜²(¬®-%zÓ|ÿÌI:w„Ê>1Áy6‡¯ÏÞûõø@Û�öÆú ÍM]Õµå¥Å=²sȹ÷0sËóœ ÷���îßÿüáÛoxûóÛ�Z�±Ëì;ñY/+ˆûz™áJOŸ#ïR‰­ºQÜx»G�ˆDsŽŸrŸ�õD_³åøx{{gî{Õ奅dóÔ8¿YWWçvß,*z|Ê}qŸ³oï¼ûàCdìJ¬»ëD6×ïm›ÂG6BÁàuÜÁà âÕcÕÜ_;w²q>‘ð gÊ8Ï)ÈÉa~ê>hÙþv{;Ðòé§ŸÖÝT5f@ùƒwß’ÃÃÛ?Ý©È92ëå—ȧۊ.gÇ`¼˜pðÇ«Á¿,×g©Çæ •o$¥ÊÎ+òÜn7ü¡¢ÂÝòwa™¡¬¸²ü꯿ýýçvËÁA]ÑQ̼eƒ œ4ö·|³d®IØÃ;iÑ-¶^òÇ ŽlŽ\¬óBûVãó¼,ÿ~TjœËcÈHÁ¼ý9G”ßéý÷ÿ-ݽspU¬sþúûö§uÉþ©î¥ Ç.gì÷7ÜI°Néü¤Þ…œç€lA1ÏÏI߉ŠP]®qÞ¦ô‡SÃÔjIpžP’„âÕò|ŠÏþÿÓÑô/_’ãÆM¿Ü9I™ù£ûØF‘ý§ºŠ„X?„õ:e"^�¹Ž† ¥ÐF´Ö_8æ�ÖÝR˜ƒœÐËÊÄ3¸·M°VË�âȼn¶@ܼévÅ+1æ+Z¾÷üõƒðtªõG—å³ïâ íþÝr�“0çæ»þÏÚ•ÆÄUEá¸ïKÆ !oV�2� ²¤S@*4Ã2X ­a@�àÂRR*1nT+.U£Ö Blq©»ÑˆÚ%*Ñ—.MˆkŒþò¼ûÞ›ófîÌܙ֬Ÿ÷ÜsÎw¾³ÜYALKR„¤µþ!psι‘[Ü‘ûïw’(q×VE¿‡qkúùÿëæ©­yh¦CŠ]õ"G �£,ÖW¹bËÏÔÃs}ûÈÓ ŒÎ¹Z¯¾ô’d´žÉªd!¿��«£Ù]‹Øtˆ³�w¯ø±ÜIÙlŠÎïƒDÁ™êìËßX³2‰DøÀ®§g„x'97ûíÁ„ wþuo|Rj¾š‡²x˜dxËŒ5ÞäƒxpŒ�óE\xà‰¤XšKW>syvĬÿt..s`P[dñc*:Y?ék‘Z‘~k²}�cìÉBJDÜõ/œ·’ŸUïâeEÂÌÓŸˆŸ×t½Ðtx1=Jé­y®Ûrs§Øøó#˜:¾>#¦¥,âÌë]Ii}eþ§ uçp`]ôs´µ›âÕÝíl4óêóÿ/^î´8(.«|SÎMk bU 6¯b‡,!AßXrße\×þè�Ù¹dç·{âûší_õÚ¡ò’’yßkIaÌW£Š·sLø¼³iG%³̰Îï Ê¾ÞhªÀŠ ÄT&Šâ><<…åŽ}ÇܹŠ{2ò[úv˜ICÞÄt†“mÏpSf8Ü͇‘`téå˸®ý‰×“ÌŠfƒ6ÕÉ*ýБì#S+1‹OóóóV<“9x#r“ÁéÛVUÔÝvH_.ñ�»rtJž¡¦Î×ú«@È�qkì§['²ìZÎ çG˜MŒgsºÆZŠ{s#èÀ^Gͧn0Æj™{i²Æ%âj®«~`.y#ÚõDl˜´¦ëë‹KÒ7ÌoHß??¿?»dþëíGÎðKRì¢�†W÷àDõÔ5™èßù†ÞèŽFéâ:xŽÖß’†ÙÃx§•¨Å_=˜ž)¼Œ¤;ËÅ]ÃÁ¹½™x#Ì(4½Ñô|Ž=­Û› BçØMµÎÆô¯çÓç¿:Üà.k=’¾Xr˜²çñÌM#[tx2\cy™®¢"ð(ïOüa�îÒZ*…£tð{‘õã¦ë ^å>?|N !/wúÿÐ:q¬œHLÞý¡Õuá :ðÂüd t~]û±h½füë�ó‡!¥¥Ž”|uä÷k¨¥T�ºÊ‹wDC¢¬w·$×Õ³�!á(•.‹žŸ¸˜{Že:§eÊ΄鮋¬á‡Ž•—Á뇟ÁˆÓ¡÷a«qpÿ€;_ç©úΘZ³îãůܟ|õÂþýª'¾�þãGºånâÚŒUx?1¨s¼ûwÝ­jâØ�ÀÔ"1—øn­yãòl\ƈ§í©H”(W9›ãŸ=v†æ‹t‡E hÆŒ°ý\7åÂí´ýç“À¸o(y•âj@çG“=zU %ý¶ØFÍ/î¿øÓû7ò’Ãû/|¨ÞûÉ óýóOÉõ‡¼¾#‹‹‡3òÁRÂoë ªyM‰”.W6‰ñ‹ì3hê<­¿¼Àœ@Ý쬠Æï–Î@ÌðÙ§u�i�XK5>º©Èˆ„k¯Ù©xGOEyø .ˆ£,瞣ҹ(<]ÍB…•ycýׇë?Y¿aÕ‡._<:üÕbëD¼cs­êÊO¨tÿI¨tA)­W¤mhêI€9h[@N$‡ JcKQ.Û°_Žóö¿’~ÁûŠåʈ]–.g@¿ü™•—rt¾ûô�©HãL°«†ÑÒîÝW­{⵫?údòëýÅßw~½8è“CûÉhœcË,Þ~]B¥‹"©—]Jm¸5ÐSd¿‘ÿ&ÿÇ‘a½ ëm±åkYÂæ‹ùcN|C�{ jýÊÚ˜`é‚ì�ÙÛÄqr¢¹£Ò¹ÜˆiF5ç]²ò²®_øú“Cé·–ïùdãb ˜:)Š­ô:×;[*½Q$eJ"¥‹ Úر^nV’7u@»/l̆#Ït>²ŸÃy>¡vìZç‘›¦~õqÇdèâR0¼S(Yˆíª2ctd¯ç1qpª�3|G®ÅÈç”æ¡å=—²žÃ¤t/[÷Å¡#Þã*~ÙûÕâ⢷0Å‘áú2¡Òǃ …QN¾‹‚}Ad]ëqW*i3�Õ¹a}Ãzgºt3ïiÖ�Õ9YQæ.¦J?éX ý'ª¨ÊŠuh&%‹ëqIõEÉô$€»Ö”Y¥W¶=ppü’¸êºl|Ç‘ _„œŒ|r¨>®ÅÜöï�K‰Ñû¬�4«Éâ E©ÔTM“t5­ÅGztŒêÉ„uÈÖÃ݈Eœ4Ý1 EÆÞsܱ:HU< ¹j�}]�æçC†þÆ¥kxÌö·2÷$ÕPX÷.ú:ÄD³fåu{½qóæÝ·ÇÝÔ˜S´%?Qž¾÷»zÒ­'§ò4UiÍkè ·79Ô  ð‹àùa�–YqaÛ°´hßÊ›cES?fC¿–YRŠÜëföyAš­A†þæJ^†ÞÉ/[ ’ÇÃÔdÁ=4÷(žgLk_ú-"–Tdl«ëÊOÈÈ-OšA�/’Þáslc(•5‘ÉÕ9aý¾ô ޼í¦Ïxº–£u0uÌÕ�ÑÐw$i(°àÜ®Hi”YxDTõÓ|ûÑÛ‰_‹ÓEÒ=ã9/]úÀ•è­Ë›«Vß±}<¡+ší ¤SJ"éþVâ·_Mé2ðI”^ o Ó±c‘SêW@¾ÔË5õ£›r:¡;¸S”u$hpGB6Pîù<äþ:¿²&(Þ!]´­ÛqÈ•\¥ƒly×55’`ï$ꉔ^óhã\) éŽïŸk²ý�ªîÇà#–”TѦåð+ùÙú[FÞv±Eƒ–;S¦L5ñLýèøÓC¿‰úN;ìê(çŽÙZ*(!‘­èÎ)¬gG‘"}ÏÌ£¼ãß^P›› Mlç�ï­à©åpÜV4ÕÊѧ¢ëªªëZã@½ùÍ¢‡”–yÜÞQí‹m|¹ÔÈÛÐÁ÷bÖv“FÙ+ÌøÔøãCç&ƒvƒô+7E_ˆ Þ:”°þÑÌ{‡Zé‘ÞDÚ5ˆé¥çÿ˜Ð#ö>åv&qPo&ˆß¹Õ;¤Q…Šjñ6M¶·O†òL�Þ¡ëmÄ'76*º"†Ó¹?~f2t¬áàÄ“-ÜdøÚif¶…ÌÕS7õ3²‘Œ³d 9¦ôÙJGä~ù[+óy†¾×0tQc¶()n¯õKj¨¬QA'—’f¹‹«ôK~(KÔ�_~eæ›ëx�3¥¤ÍþYîM3\· ùH„xýzš`¸_±Ý¾ßoüÄðÅ\¾Ý–¸Ê$¾rœ¤÷mœ÷—�¢®~b:UúŠ{˜wŒãVŠòœ·âyt†.ˆ=A]£S/q J½%6�Jÿ9ãt_ÿ³‹ç7×ý5]�èÃ{÷e%—0Á8ø]ÉkTÂZoÏ#y‚$Ò/pH᤿(H^Ò …ã`ØPú̆Oà:øÇœãmƒÄ!y1mñê­Q�/Ÿbg–×�ô$2˜ Óÿc㹃X]ê&-º,:T.éÁ2BÈPø.(ºÖî&íýbšÓ»—ÎìåNOlùuO¢šE1Ð ?oá�eÐn‹ê¸~!â†K ;Áº§5@ÿ'Du€�`Xë ¥•ä] öà!xlR»“DÊŽ IÏBôaǹ©ô³Sn�]ѦWM8ÏïÀ” Šè¹óôQÓUI¡» 6�UÃ8X­l»ñ�Âá~ ·MSu±Åpª’œáÝë—Çxnsü•©iW"»xX$•AÑo%$gݲä/ kÜ èší ÊH“*†¹Ä!ÉðïÈó%¥áà/xc«Cj¯e3�æß‰®«Ÿ–B¯{‰iè/FéµKöKRð¢­_¿Ë}÷ÓN“|¤MÖ�¼”T] ´Ô{Œ¨9I©êím¥«¢(ØÆ¯ºj_ææB×½»¯.¡ÒïÜçú”Îñï=$ϯ89]Nëo£úîiiÂ×#­0é •M–›«Dð‘E³Þ¹�uê|ª€Ù0B,Ɉn¡9+ÅEþ]t7Û£WUàŠ'Õá˜×Å+À¹Èuî—¬;8CI%¡Œ”¶ƒv&[½Ô|ºÁŸ7˜‘2Ï´§ÒB Å ð°à;øV�?�{”ë^½�ó¤ÿ˜ë³%^b¹ô�5²„Ö?‡ëÙó�ªjðQ��Ö—)�ydR·M]jm1L�aå¸< £Ös¢y±>œ|¢=ð– .¢ÖSSd`/¸7�s:°³ª€¼Á}ãkÖð‡…vɦÒ˜‹>PoØ[ú: áÑ”‚ÒÖYØ­‹²lW^d¡”ø–¹ø(KoÛÎâº-ù\ÿî%! )IÒ%Ð9ihÅWZ‘©³Ñ&šy½ÔÞª2¬OÖ\úÆõád›G‹£2�Þ*‚âè›},E.öô«é%ÁýÞØ5þ²ç$o +Âŵ,¨ò‰Q„ß%¸ KÜ“²š&™\Xëeíß ‘ &È¡v ±{÷wÜLhÝ›.žl{)«kœWý]î&Þ°¶¨eÈK@&¿ƒËjµM*�ŠÇ; ø›Zjl¨¤PމDœ"«ÑEó¸³_n󦨊)w4ÄÃír)4'^Œ¥†}©�êÂÆ”nÌf1Eç4Ÿ™ l£H±‘êµôÛÓ¨Ë^‚üØ“ç.kktÉíV%Òlï!?8Ë=È¥Ÿù¯Ò÷¹Þ]Çã–‡I© Û–ÜnçNþþް©+ÃÙ¨p[½áfµµÇ0uÊq’õ×Ë9G‹zG3#Cy5a¥<<ºl™úñ)M2=Ǭ‘²¤ðæØ†Nn �T­/á¢8ê3S·ð»It4´µM˪"Z¿(‹n‚¤ÊZ�´Jr`2MÆ„­L pCúÒg<�¯ž…œ�9gÅÉ… eCûë‰Åº)p7 µzA-kê·W'A‚Fj§9þB€ñL¼©õçøhÝêZÂÈH”‚&¢Ëêç&ÇÆa}�YmO®@^Æl—á'l�ªô`¥`2î> Ÿê@#µèM“e+IBfÓʃÈÀ2—äZú•êx•ñ‡kú² uß©Fí�‘0´:+kû:ž¥·v«ÔÄ%Y4o�MщईO“MÔÞ¨Y¿�”†ë«�­ ¬)ÕX‘¡a×N툆Ȭ²ÿkm|(wBvL‡%7öN÷›pÅQÉœVä'l¢Üá·‚6ÉK“íØBõ«yÃ_jÃé�è "Áx•«uÛ‹éYlÜ×;EQHæM#µµQÃ.å7 öe"=§%v¹©Ãø(y Eæˆ~‘=˪È`êí:5õÒ†~, ´X¦.J=”Š�aâ'm{uýzÇb¯ŒH7;u‹«ØcgMX™©F(—+wF‡‹¼Ý1®xù[ØèÎé‚8ŒãT;^¶Ð�®<±›ÀjnýÔÈlvï|C§Z¿­÷Æ:;,®»&º¸ê¾ à;‡HÚ5 ˜žš”5%T-h´È¢©—ÊŠHM½SíZ[™$Ø ¥GIC(— CCwB° ÆjWWØû$WEÒ%ä&„rI=±~Qà5›'“…»Ì ºö*åeø!}!Íq‰�äÉ(´C›r žva=äžÝŒwÆÍ—Þ*^Î~©Ñ‘*(¸ø#-€ÃRª¬”Â/öST_Vª 62%á~ÎÉ ŒP.…j[ šºTm¾! ßNšŠôïy}‘¬\6g#øqÌ.©âX#!Ö>†1 =™�>G!Û@‡bóqR¸B!YÞ=¤‹4$6¦)i¥FÕE ²ˆv7ñ”^�”Ò æ†ÒÛ;‡Ñ—“z�ú'/‘ Ùdm†mïåo�?b�5%SÇp{§aåk£N;:h*"žê[Á¯ºœxNtQµÎ¨¡OÝ“ý­(/ˆÄøÏ3†Î éJç�b§Ý6m©T–Uʆõt$(UÓ!ò†#[ºwy(�ûs%3“ÎÞâA~£¶¨jmnQ…;Ù$6¥Y¹z‹Ñã&´,i³¸À!^ËÔEe8(ãâ¡ÔLsõâ<ì�A‡î)â<¶}"o=$&éøpÐ`/?8‡†Îéæ1j-í’©tÌÒÕn¯dvCY‰®™µëÞB¿*" ‹JO•‚ÍrÞÕœãWjë2»®K@~»Ù‘¯6 5·õ×÷èhêešbè¿ÕÆrzø*úÍæÍEÿžš©cC eZ{v|§þ¬DÞ�©µlE �_LÁÐ/±ˆw :Íìj‹MUK==ª™òúÓ3 ”왼‡ �J©{çawV 69Ù¸�Y4ÿž`ÜnVd&§A·¤µ¿ÅmQFÔÔ)–SÒµË6ACGMB¢ý{Êþy¼äF8غDo²ZU—S8¬íKXâÕ½3#vˆÄR²�CÆá¨��YB‚`%l>Í>Qh…ŪXJÒÁèV¶&R+òPWÉÃî,½ÃÙûӄÅ[]¿.Å_ˆƒÎÝA§íÑ5w“eê’ül@i\e6|¢©C¼€þ=¥\½Ä³Æ˜GúI.€1âò¨Ø³L YdˆÕn‹ÝAa—×®G2.)' õ¨S� œ�è€H�_óÉ£=È¢ *s¤i×Á„çwÝ›Åu¦wZ=ílàœrþ…½yo¤üû8A½fe5³²tè„7ºc€—3vÑ c „ËF`r{5Z€¶YyÑŸ†þ=5ZÎÑ#y ‰ž^Í´J:WXþ�çÝF&†°²õΨæw\qðî\§55+V�ÔêBã@£@!¼eûÚ@�$‚¹ÃKF/Mw…ð²\8©$ÜÁyÝö¬mÔ6‘ç–®§ÎÇL'¿oâ¥8J¯aW½‹‚¤6† ß'Ê€-ZMST/¡¼MàêU» L<6¸ü.•Æ©áMcœQ#F+Œg±»sU`Á5;cЮyc·9Î ŸÓ„::n H Ç)Á6Ó»«-avKk®‡ŸD)HOK k´O†4KiBg›¯S³¢2ê5‰p\æÎÕ”p5˜÷ öôѸUd¢"OExàásP:WçTøÆ<Ú7£SØæ×LSï4§n¨¬•Yªó§àS(¶]O;™0Gs£x@‹ãß�ËFïŽÆÞ7BX©�Æ â`®Ç::ǘ¡ã!Ó»Cq¢Û²½­A7 8"iÍ­šÙ'Cë°¸Gmö½6ÎÄ×:TUG¡e»©Û{ +›í,ßöÝ€ 3I�¶J=±E²w?Ñx8¤‚¡wv$ÒhßnØŽPF '*6Ü3þ™ÐÂ,¾Æâ¸r ¢«ªÉ„ª&ÆFˆ»‡{“ŠÈµ1š#/1–Sm AQÂ8e„JƒfÆ!«YÊlœ¢|èšþ™ªŸøp.XS�5ùŸnL¿xÅãÎfôø)ôÚwµŒÂïg&|[°;+9SU„•‘Š&^@w %ûz% .ZžÜêBðYÞ]5s µÁª¤*� FPÄR BÔ( *OïÅmÿll±ÇÜy…uÉkEâª(~3Àwöi‘NkI±6àn—lcW›,¥›dq�ØÓµºá ��5.­;M1+¬XlÁ žj·Ü�áz³jÎJyÆ´Õdá)Güž`óÿÉv0ölç�ÕÂHÕÎkqxj}:î—áƒwÁ8¼Õª˜¡w‡5¬¦}„tsŒ…Òï”y·jë(²±3òà£1]|þÒ&#ÞpS¹}VÛª§ûr�¾¬-p^kR¼j)?êi‘‘]3á0^JB¶Ö¥a÷Ão•šÉÛi™B}€W“ix é6UWª(ÎÝ¦ÌøöÞ—½Þ‘µ�ÂŽ}6G+¾©wÄ�ª¹—‘0ü;SUeº/‘¸s‚02ˆ;I¯Ç^÷¤À»ì¯ÈÖê(»B –ÑÈy ¥d}~Å à”æ4ºèÝ«¯WScgx÷LW*’·ÍQs©¹ªëB8z »Ueðø›àv«[Ï'Yd,à6z]E­±žUŠ!=ýŽ!{&SçËÊ× SÈvà½ÅÌâÈÆ¢šjÆlšÖše<#Aë3ðî dÓtt¿Îµöî fÞGCçŽ(Ï}1Má¼Æk…j=T¯Óƒ2[×E«ý†wß´*Š˜CC¿q-˜Om~LJÂvœûç°gbUW”@!q«¢ÇrÐÛìqAo³ç,·×ëÔUζYO9½=ÛkRU:dmÖ^VÊo›ÚLEþ=~ÿÌ ¸ –e¨�O·ïp;a<Ñl|#Ÿ›¯aÊ tƒ·Ñª*¥a†¬CS|-�]nkÀ[ñ—vjôŸñÓÿjikƒ¯Sa¶IÎ|»×V;&é Ó¬kŠÃ*Þõ>B_†Å+F ÊÝþý’ó¡°ð»ªØéi¥=Ÿè“áZ”¡ ¥šlþS}'&M tÒ©Ù òžªuY•Z =ÎKUéùkžA(甂ŒÞ­Ž¬ÚcÙ$]óˆ;™ãöÏœ›5ªzsí�11bÅÍÈȯFÇ 8pš¤�&Én�( (ö`ˆ5êOM_ÔÛ¼:TBRÌ÷lßnŸXÚâ�¥/]·~³³ÏŒUðci$wy×TDÝbuí*×DSùRøßî~ûÛ·-y]H 3nážçzM xì)½É e° ž Z¯ì„iæ�•ÞuU•äf€uõ¯aÜ;OàÞ0”ûzsµ_çŽÝY´ƒZvÝhG]˜RzäÛŽûåï°³¸:ŒÃI&>x,PÒÅ ‰žð¼¿^ F”ähW©¡Kv�‚lÈLXüÛVo{ç/§|þËg¯~ùý/TàÇ'^þÅ)ÿÑvå1îMQ8v±‡WË{÷Ý÷â‡�REÕÒª¨eÃ݆`L‘TQè}û¾D¬±¯±ÆN "Dbb Aìûçnï{ÕÎŒWzþ1o¿™~½÷žó}ß9÷›}6òøÁ£ŸðÍío„?|ù‘Gž­ã­S Mã„ɱ„úµÈ»' ÖN}žÈ¤]nüðêX·1&8 ç\VÚk­V­ v«NCö+•‹v»ìpðy»w¥g¾%´‡®¶eæ¦ãîEkü㤭ùø¦”Æ��“´{Œä�wZ¾éI£dQ¾Èâµá£9Ïl­IV"ÔÁiÚÑ•þî—Ï?ÿiw¬ñþûŸ>ÿ¾ ú„üï\Ÿ oþÓ5ðÓÏ#Þ/Ý`úZŠM`“ÒÝì;]�Q?‹‘.ƉÏSÊÉÛ¢è˜ô3b,ñ5,S1Nõ§£¬Ü¢3’Ñdú¼½wˆk¤—q›}åÅç*ØÖ¹7~Í5ÓÞÏ8¶úCÄø°É;ŸnH‰HsóFžÌ’•´Ý´”4%\hSjû¯b»*ù.½¡“è�¸á»ç×V¼ÿ廡efbŠë}gŠI5�hCñW¸~’¬Ï uOR4©FÛc‰‰¤¨×„ÓFGnŠù äâ€þÂÑ”3P4±Û"ô˜ö9v½îZ^¬·`ûÄy ÚNÌ©AlÜ9Hã rœ¹õ)uŒ O‘±:£+ú^Ñ kôlžÉ“½# lq”jQÎábf♳‡úóg¿‹ùG¶# Ubr—0-ú(m£Í�"=^MZŠ¡c|B�™ëÌÚÎ}¯ž.¹¸¬Ü“¬¾ž¸[ ™3ŽÜz›h²•2li_Q}ùþ÷èF ¶+à¥�;P¤oñØ&1þ‚‡®!K�Ê„�t8w5(dÛrsÏ2îH*¶*<'bDŒsã®qÝfWcÛo ôíŸéÎÛZ¾ ×Ôà“ž~#4<'l¾Aˆ?ΡRsd²:5fM°¸<,n¦A©.öácOÝ{«ž0:ŽékšZªÇ?¡§^…#æÜ�Lá€GúÂÉû«÷9Ž-×ÎlÓ¬^!ûùbsO;Lµ¥eõ.>U¦e$@7òûQô¹á›!‚þá3]ùCPJšcF¥\¾C‹VÁsõÑC$2¢ÂT1ê{³V“�‡�[ªï³òìõ÷èÕ‡–ôÞE)c‰¾Þç Ö; G:~ø_xãEz¬ä]ow2f@ç´Uzu±*©bJjŽ(�Ò ß kº›U¥1Tп¹�'É´=É4<‹Ú5ô³`©«:=—eox´qùÉCPQ÷ ]¾õfb@PÚ¢sAáŸÀ%Íÿvw§FÕ¥µ Ãßµ]î{A¢%7À¶œ¸9šeŒç-ʃ• .�æ®>AgÄwðR^‘³n±YâN”�Ùï“á�.ÓwL”𔇳±èãaÖi‹²Í1Ý–"òåJNœé ¬£TØ»`茵¿ˆ­Ñ{5æÞs9)–ïÓ·¨«éíøow÷íöÁî¾pl|û]�o�Ô«5Uxl!žÖ[®/^Üš>4ÕB'ÁBò] tÙý``.âÝÞ_cxñþ&“sÆÒ(lÃÓ™†&*ãk*—“6Ÿ\«c³£rSÐÁ‰¤÷°ÉÁ+7OïÑ}ºX!�âPï=Òo†›Z²zg^n*ÀÞãsw§ä½’ÍÒV97°EÂ&в¥lR›& é?ÔÍAJSOSS¨žhcwÿr¨ ¿D ;.c¯èÚ«ÕvDjr¹ñ€\V0¹£OÖg™k ƒâÝR*ﺘH›Š�oWbXÿQ®wh'Åâóé vøS÷Ÿ xlÏmçxúù™—µl‡^àW3ÂU áF�߈¤i-ªKgèe:j6w¤:qTÎp%îvŠÜQj‘qÆy“¡õ¹iå®'`ášVÛÍÓO’7µýoûûA Æ£�NÆÞJ}%m‰ìªÒ©3.ß{³¹@¿8Fîn<ï�ßh*ešÏ6RB„.7Ëò5-2G©Ði‡ë…Tg8*uǘíñÖ”VlÃ5›Ü¼Í á6fª"ÏÌë³çIk¨¬¦eCñë�ËDßôëíÇ1x€ü½wDníƒÔýïõeþ)«^mõß]'À>A>©»;y¥¶YàÖ¬t3¸‚{AèÞ~;)º#'î–Û¡9M˜ÐF½€y¬’µú‘C5›ZÐ&r"ÁdG AQ°ªnsX)%G“»D¾–™ò)S•”hf4,ÀÏ+nøy†÷^‡C=â”ê­ÒûEª x834ÌLœFÆóSm.YÖŠ¥C\¾g�Y£Üu8Ëj¢Ó\t(’åìTgšfóâÓò|7Ð¥‡ÂDšöá¤S —.˪cÝqÚ-!8¬"ÊP“Ñe¹¦ïe«# uÔlñ¬®¾æû!0­àñ9Ž`µÒѳ!Þ¯G•Ž˜ xx°À»ÇðJÑ)Y0�LAÕHB·à�r’Ö3wlÒb´¤�²¼n·±u»h‘ú¢nøp¨ óÄò}%[ku&“4ÁSÖ òw(­?mÉÊÌø×˜ð[¤¾™Ÿ‘Î䵬*‹?…®Ø´‡±w./îHëg­M½»µe½‹Î�陹�ψ3~‘>.HU½ç’8]§« ˜¼ÑªÎÂ�$hã>wĉ¨DP‘·ò÷2ՑÚÓlX„Øù›4ÛŒyí²ÜË•ª^Ñ|U–îtùîXÁ H+.(¤ýIÅØbºè4CÍ{?çµ(ñêåI/‡1®§è÷ Wé¹›iíK£Uzò˜CO=eSkî8I½‡(1<äå�•ª¯»¥“/Ud-z)³9’ÌsœurÙi‰¹@?ƒûØ�7Qè!NîH¹è>ÜøæÓ5†ÏÂoH ; ×ê?Á¯¤¢4çªÔ—í.LHè%W5¦ñzÊL?T _y@®è±õÕõzý3‡ÎS¢wϤX®—š¹ŒžVjvÜèl8,»c§mP°Á3ô©¼ìOÒéîŒÏ]qr6˜Ë9³ò¤u1$¹\FÓ#ò¹8Â6ý#@FŒa½íÕtŸ"é©i½Ás· sPNŠ‚/W±‹k7�n½5ÃðÆ££#ðÏà’D˜€m6w£Ëº0Êu_ÈuG_â}‡�Nð=Æ»‹AÇÅ�Mä�ô1«ض0FÛÊðJ˜kÚƒÂ!îÆp!©IåRh«<Ž|I�ô翪*·cB}dÿ±RôïSòÈa~àë&·pڪSyW[é�n‡¢­—=¹§ïáäÐtözfiP38Ò�î²ÅðénÐ7Š[°áhzP‚îµ0 �ë�3ât¬´¥_�8nMpJò­®XOzË$Vó¡‚¡³é'ÃýÓ5Ä)—6gù¡4GhÙ”Ë#Çz«TœÊY`�äkr΀’£ìÞ†¸›”ELêX¡PÑÙÞ—Fu64—Ð3«€š™GKß¡ øôVÆ•!üî«Å]7 róÁDº+;ÿÒ�6óˆ�ÕwØ�×>d::ÕehÙÀŒî«eÞ*èï‹�NlKR–ÍKy©§ú%3s@æjŠ´)K¨bÚ*(¹´ìßyìÌEš »ÇŒí†l~£í¥GŠÛ"Ê·ÅÂ^[˜ÇáHÏlÖÿbüa¦)m‹1üÏjÅÈw½™ž[÷ÃÓ¬×ËJŠ4æÅ¦më^‚V ÅVŠñ’ç¹¶í±tr�á®tQ%KzÑ–ïVYZ* UW”W:ú�ÌpU²£ ®Ä».yˆßʈVuX¤¢!žxôi�ì¶Ýƒb—›3�;Ñ‚�b.àOÁ‘¾�3‹…½O‚>–3¥_§ÜHOøÎE”è@¿VúêÎód§ã¢Ý$¥ ¦‡ó‘šµÓC z†V¯[~.½í”Ë)‘ÅñU÷"á É6 ç¢‚ºíg­"�OÉ!z”\ÇzuB\ÿºÕ —w5›žyê1]™Ü†KÁ«VúÍ]= úw¶mdzfHaSGzÓ»R*HH ³Úäˆv¾-3A8�qŒé]zF[ÐÈjŽ&—#üw�‹bü•.»n}še-«r¹†>!>[Ç4æü·ù˜ø;ºœJ.¾ÒF‡:œÐqmÓWÝèÈ3»úPÎ;x‡¨Ð&A3¹%zø¸£ÏÞ Æé¾�e´°ÅÝ/Œ¨_ó%W;Ð&€¹£³·ä$SŽ$3AÒa|²:¡_䡃þ~z¬©’3ÿ¨Š�þ½\ÈTl¶íp¾”•jeá±Î)Ϙ`GYxg;ÔaY¦8:\è—wõ=\qònëÏËÉ->©Àü2:®wÄDÿ8z‹\IYåšy«†·²ƒ¦–¬5ænPo+CÊvÇõg9@ÿDÄó:ÄÇx|_?¾�ç>ß�oï}|ÿ“ê]³YIΰ©qÂLŽ�S.‡sœÒ&ÙH�ß¹‘Ù Ç¸ÍÆµ_¶›‡½ Ö÷ÿT©o•éC—žyäáÛÌÅÉݳ"tUô¶Ä òY¢J�é�sít9½…c�@Îâ@§h—Sœ‹-`ÚP2æóúŠ>z› âèÏdlÿ�ŠíÕãÑúñuù„/¦ã£î烺·•¸Á먓ÅÍ’_ÓÆ£�­»�jU‡;¢&Ïó@ê¿-†å‚��ð°3xØÁ*u¨¡ëŸÒ;"dÛç»^ûžåAÂBW�¤ÓîÃ{,‘Íu¬¦õ)ËíH¶3U1�NN»"�’ReÅ]gt„Š6“Ætq$i�ûßù‚â�ûåCÏã_òϿгˆ7»žßy±Ïã¹¥'ÈÔ!Iƒ I=7Ê•m6x¯¦ :awï´¿a…,¬¾ßÚ*›ÿÁyXÊž$ýÞwÔNW�ªm.uu…®ä}í{c€ §ˆ÷˜"ßÏš A—Ý¡hçA:-—¾ãí'õtGž£&Ý—/{�ÖU;ðü­tYj\¸ËZ»„ «Ç õãÛûŠG</ŸÏ?ÿÍ®gúúêqùø[é é{m´œ3ôÆSo9+ãˆTÃ啱Lz?ÆrÒâÃé]ˆ¿&hÒ‡ Þ!Žñ¿€¾ùÆ/GÛ!aÚ•CÔ… š¤tYNÛ”™¼)Ùé°§è† úO<¡Á¤ì’å“Ì•ÿlFëº"‘4oJá€M Æø¥’ÔÝDFò°hg‹OÏl¸ò¯m_ô¯�b¢T0{fEżßcDË6‹L‡ÆÅ¸ 3¡á–òH}ľŸ·í@ÞK<Ù°}�¹�E§¨~XÝŠ£¹Ð͆ úÏ8åºT÷½iU7:RH5×õ=o2o™ lZ|èÃ/ÆdÁ+y؇q]hl£2¹�ô}¥>Ìû±Ƕ;Ÿ¢r†s÷\y\ ×ûe:¯-úfÓK #!ú@ .m£B ¸+1/ÈÍÝ ]c?[�ïf¡SØg*èÛj—£pc3ßI¥¹ŽHÖ]’Öè+2ÍÔ8CdaAàtž£¿2Û ™ÜÓ‡Pú|A¢ô˜ŽØþÈ“�Þ¨_qÔ»‚Ö«ybÑÖGž’2 ’ØÖCtªtF¸Io2ÂQ‚²&ÇmqÎ[c\ä÷AÉX„%®ã S<ºXƒµý‡ ú‘–ëê¥No5o\Íxv¸TûRÁXH3ýØé—’Ì+.ˆmПèñ»W!´u!~tdÉaçmÔÓæb¦Ä¢IyíÛ¾¨pÿÇ�… Ÿ�ƒÈ¦‡ê•8^™fº7-ЇUÒuÏ &“¦õ)aÛÕý\Å}Ã/éx£o tMÜ´W·'‰ŒS’œ¼…hyfßJƒÀ0}L:`ÁÐUœïÿŸ{fKs{>pßöY7j6ªØ6ü7Û1Gì¼é?õº{ÁÇÅ}¯W¯ÑƇcl1\­H+ÜÖÆ³Ôhs\º£JLž«SU_:)há#;òÓo ôŸ2I鯗¦™ñÀÏIaUK½&Ô°oÉ:0‰‹™bQò½Ê ­Ôò@œQ“Æ÷󬟲Y¿šmIá•Z¸bÛf£SëqͨSbŸ µ6Vsºº¬#¼¨‡U±4Ÿ!9,‡s(Ô9Gbî�JØÂI�!»jhÍöCý½f”|›$v=Sl»Ž,4†k)/…S@îõ ßg¼�@ÇÈ¡{ ®BTïÉýûÔlK¯¥gÍ5_v[Ì"üGÅM°JÅÙ\;£3�ïN3`¨:�õ£ôi9Ê™£”É)FδÐ]Ò³ ï ôEì†tÞw�?n´íd¬dÕçŽäÝ'&+•ɉds™ð�ù†iJ* äûQæ Øç4\rýã„HCÛžëéBÝ”éë@c‹Æ¡GžÙÏþ~â É;@XÛŸ ô@¯i‰ÂqYqZ*ÄÕYGI,cLÜf«:Þ—®xP÷à½òý¢!‚¾e⮣̩^®YéÇ‘ïržÇXÛMBA•…:¥¢ðKµ" OÑùA}°ôý@¤ïh<ìp½AgÛSèl«ˆE�”QgÝyÇZýãcy£fâ‚~mñaÓ«m‡�tÈu0³–ѳT}ñB«Øv* [ö±�_SÚjˆ ïV¼¯n%].÷óŒ}YS:ïÉ6¡D#[P¯ãá/=c…J±k”yõè³!¨˜¾ÃügdÿØt«ê{®$„Õ P¦Gó¶9ˆùÛQg`Ld\eÕŸDï «ÉdU í€8u÷H¢]¡WOlæjʜêU_ô±§RûùÅ=†ú¯¯Ø,G›¡w9ƽÎh®:Ë ‚�1¿f–#EF ø¥¨Y仨ÐØ4Pú¾…ž(g$"³ûa‡¶{ŸØ¹_¡¾\X¦cüë©ÇÎÝÏtÐnÛ€yß]l±D6u'q‘� à,÷CØ�ÆsDÎyî´UömeO©‹ÖP§6âÊùåÀyæ�!‚þÓ+²Áª+ìt›3ÆÛnÖ4’2Ȩö%2Úìîò,š•)¸œµ0˜‹åÀ¾Sœ1ýñ£�Ùa}ñÛïxâáE,‡£PÅÕeþ!¬n­½”¸ìÖܱ«Ú¦HTlñô–`в1€.ׯLèqF²£*ž+§ÎÉ/;A¹ˆ.'8y╟†ú÷ψû&¬t�¼<Ž´:OûA»],Xfží˶?R›O2³o¡YYÝ?—*qŒ�t2GFÅk–ôþëwWîG ßrD\] júUèL¥¼bè-¤»~�8‘îÊ%ÔšÍÑ:ªÏ¶Û®ëžÐNÖ}±ÐåÀŠg¾è‹ø3Ê ™7hsIÈŽš)Gë4¯áÛy1-ÞÄðKÉ�äû~>@¨�5ÙÛ¨zvXk¡_yÃeõåÙàfÐ�.|Äá›Z©mz|TlñE¶2½. ¤ºxU'¼nÐ¥ 5Á¹ÛÉ‹EÏ)sòÙ¶ôJR†ES ¾Üfh o¶ilŠ«` šzUP¯j Ò„Ý«iA‡WÇ‹b ó ÕlH¼O�¯/ý|Mä`æbí%M2·û8OvêšÛ¯‹^‰®é“‡Üºë ëFĺeU-ÓþUè㢄—>+Ÿ•C”Es¨M9jg%´äõÄÃ�ò8åÔ!ôèWn“Ü‹Èú8ÆÅq…¿§ÅBÖA�¾Å»¸Âþè»’yó\³æ»¼éàÈ-�w®£Ç õZ(®Æ §Ä@›b7êfbÊt²?£L�ºŸ•z‹á-S�ô‘T4•—¬GÐÈ™vª¢ç8¼Ý` ×¹bMœg~è”ÇIÔY§\N´…*_)¯’‹[]ÊAè …vF]©T=zl®i‹ê;¤-t¬õ‰«‘Ê�¥ûÙ–èCÈ~JºþÇø L�#²¡ÁGÜ7Ù®d½Ô�ЫŒh7·:S6³?xB]¶ðÍéÎ':Ô‡ú¢//ãzp{6¨g­Lr,kA@ó낪c¦»QÐû¨OÿÖ™� õõ®×hõŸ"†t.c€%×—�[ó µÒ¯>œOô¶f츔+†Èv‹baÓ¶ 9][MÌUù>@W%<<›Ð#(x±<Ú�#^&ô´1‡}|ì¢!�¾G~&áÌg^àNŽÊ;=Ί%ÏM"‘#âMÝàÆüRhV–ÏG}@›.Õ:‡ö\KÝ@w®ž½˜«XÙúd¿z7CîöW®»„ÕX"›fa]rz2�MªõÐ+Ì|ADjª� ë©T63jZŸÃiÉï6$з¥íy´5ÕèL× fp csîê†]�HùFÜ37�¼>ÂÃ^ƒõØa“Ó™÷É ëÞ›2{t®ŠXј¥zXØ#tµ~ž´ÝáÆÄÍàfâ‹lQÖo¨î/äDõ.Ð;Ìœ›™ZJœ�œòv�tV݇d3Ras¿ ô+¬îÈ»ÆþÖ�ˆ.ÊqÙƒ‰a*òzWò¯È2ófg®ÒúÚBW1l†K|¨ÜRƒgVÁÕ-ݱ͑ŠÒIŸº£œ$~t�‘3(â‹l,ÊÂNÂ>*Œ3êÕè ß¼\)gD¬¶B#`.k—å›ñu­Ó¡> Ðÿ\µ”µ¢‘ïá¢�¬ù(ÇaŒ›À»˜Uô~€Ó‹¶8˜äVÔï A?c~?ã¦VZëê—*ÐW2=M—ösÊœ�Vgû‘[ž‚û*AÈÁ ;èSÄÂbm«þE³42#] ×ýðÛ³¶´£•뉑²ÜiÝD¹@¹Uñšý¶yñÿý�·w¼eÂÊM£ ¹†ñ¾¥$ºWH'‡~À¦p޳¦+¨ðÝÀ$7°!öº0ÛÚy!ÐS»u“ïÆyqÿ­áò”’XhÑŸØÏÿ¼áS äb´/*]9ÀÚ6»¡úJšzª�ûl")‹¥ŒàcÛ>/äUÎJÏœøâ0Vú¯ÏT¬ñY>A}jå¬Ý,tB.�èa=ÉÀÉÎ�¼Ý#}pÅÅa]uÚü&·Túu ôå ·ô�ÝγtìØ�…½çœ�Ù‚–8¡J!è3Ò(ÐMÁæÄNïØÞH‹†�©wãøHàï7â3Û >>õ�}ÿwÐ÷}ñûêbPa»�㳓ê&eˆø½Yó§h,{ò]@j‡–œ‘ÐVãó°„{ó¡ mïkÒÙ¡[q1 ÏŒ–[¶ý‡1þR˜Þã‹lÞQÖ´—À˜³mXäòvt£R²ª]Ò$Ü5]ìé–Ón3$Z™ôñkýÏ SÜÿíÃ¥y³¼lž±b(ëû’3u×ë¸gƒ|Ÿf8ù¥?Êq‡Á/5(k²°2"O›'ÎÓÓß(î5 ¯ÐçŠ�4[sì[vSïBWo¡Ä›ÆÀAaÉL¬e¾Ô :…m‹Ô¹<£¯Oh4¦… òû/ÿ;è¿ð’ØÅ›AP:I§dX‘¼©¶En¶Iò°†UŽ6+ÛTÄOýGÐ7¿õ�°ÞZt•¾äL’€ë–Ù–�²:o­§uú�ŽŒp?7 ê}óA÷ÇÀµ²YÖâ¥Ìu�^HhÐ'$è86'fõ,Š”~Sþÿ¾ÒzXìâc¾7C)¸?fØ5HkшäøaËÌèG:ÝÃOÑgÿÐiÚ?˜•ó@¡ô_膜�¶ª@_Øõ~бš�¿ü£ÛAotžCñÊZP.„ M­€n»zCèr;�¨·5ŒÑ|úø_þgÐù=Ë„ ¢`{ÊAXÄ«Ì>DbvF5î)¿Yº£”\3€InÀve(.c pŸØ?ʧ_¥A‡œ¾@,:bwã¦ÞÑøìÈ9 ÈFhÐT¬ ÐåÆ?æGA§uo^ãTèU”“ͱ¼âÉ‚\êË_Îÿ_A?ÿø²%ÎFóZ$½i5¹ˆ\Ð(Ô‹>—,Cº'/Prµ&¹A­‘Dœcÿ>u:.*¨›Y¡Ëâò–b›í5I·CØy ¼°1Awäà8°–c>¹Â9c,^K¿½Âþ¦îêb$™¢pă�ÁU·êÖåÁ°VgZ‹ÑHÏ”Õ3Œ]i¦™îž)ñÓ™Áj­·Íêm?;,z<ø‰l6A"È‘`°’y„xð“HL<ˆÙðà7qî½}û«�Ö£·z7™�ý驯ιç|ç;çˆLr™9r³O¾ÊüÄ�ë ú� îñIúw¹=軚ƒS`"xóZ‚vˆXFmôR*HÁŸRÒȽ£{*³�Úê2~Ggî¼ØeKµØGv:‚‚cZ~ƒÊjÄ"›Ì®'< !œ¡2 › ƒNvo.ÃÁƒ@¯KЙ%ÒJÕrý¡û×Õ½/üÌX¥ÆDE&ÝÌ�[,�Ð)Prøta Ýd^b#ŸC‹ºéLÐßÖµU¬ÛÙÒßÁPϾëʯŒ:ÎESîf uôHE6Â,âu£Üádôd«bÉ+ trÓžç”Ëf`Ýu?™úú�N†Î.Jòýâ½¥�¶62ðÜ,fgr&âSj4+7ë‹ôìî tª­žþ@Xë4ÐÅ4°6лž=rÙÎ]¨Î^÷ö!ƒ~ÅG»Õ#ÒQ@IätZ йé!ÐY1è9O$3ô1}(Å|·Ž–¾p²—eµ€‰šdZX�^2¨<Uqì d*QŠŽ?tK𕵒`Ì…t&Âèúœ}Òðèù]`÷”ýÈnA‡µŸÖ è[Ue•Pˆ$gˆÞ/U™®ˆ0Óù¢ªî nÓO‚·°XN"ÉûöŸ¼°n “¡Û^>©&S8ù¦YNy†¦  â%lÍç†Ö™ÕpÁ‹VÈ� %íõúYç瑵p&ReUÔ�Œè*FóW Kgo@º*SOxÌŸT IÐãã¢ïÀÄúY:3}y™:v¼Ä)òÖ‹? �léõ;à àañ›@DЗ½KgþO «"/© ±n……t‘�èpö< º¨ÉQ îPŽ@Ÿ–SÜ+N®ÞúiÇ÷ëú÷dè´-$V¯Î(Í#KLÊ=t%{‘A¡ï[`â +…ÃC 7(í£©3ÿè§D½ÿ¼ËÏ?iÛ =‚þ†Œnr2ì…—èM©tËo…Ë,#ƒ#0ô‰,sbBcZ>lgL¾ÎLy½@_¨¤™Z«¤—‘FãÝâ LðÇøä<§6”ÙJÌ`,;0-;4i£ÌUAý¿ zÿ¹Ý~æ�·Þ6÷ôèýÛUßC$ÐQdÓu” ÇÕ¨ž*T(?;öPHœ¢k/&”�ÉåwôMV—!´;%{ ½|ü·uý7"dCJ¹*Wëq¢bR®žï‹®÷JßvÆ›‰·n,ÅèĊܵñæj«ÿü�~öðEÝ;ìù¢»o¾sÛðÜÃ÷îºid°½ñ¼H�ŠlÚN €®(<È@'¡BD'�޲Å�ìiªy©¼"'_còª/½¿> ù£ØV5s ¯w——�³©V0 |VÝÝ(³e¸1ly—Ùæ#Ñj«Ñ£÷.!Ÿ‹ŸÐo@ï�§¿³}$qš'qyyúÆg õž ƒŸÉò:Âü–7 ¼&Ñ@G½E�-q¤e*´½<@Ošo9�nÐu¤.ßV“$./R-w0ïÛwÙ:€þË3䋸J/ÊJÖÁƒ £Ï£s6ðê\¢†Z(³57/Ú–˜¢¯$ëÙMfžÔßÖW=‚~b _³Skš;1r�ZÙF¶ß?úôðÜüm˜@H .Ñ@ÏÆZÂ[I›zQ;Iˆà FZîKÐñ¸SuÖ=Y¤Ëx2’N““O%œ¥ì=ƒþë¾Ç+ÒX,9.ÄÔ¥.ÿÝÁPq5P‰:Öµä„É4‘ÐÛ}˵f”cÛE‡z$¶‹ Ÿl3�ësm ›U¨¿ÆF¶ß´ëÉ'¼õ†“n¼ìâ °µƒZÎiràèãÚ€!œü¢võcD]Å�žR¶2,銲 ¶XNò¶l2ž%Lb¾ç|øc¯ ŸÆ–xA½bb2#$ÇÞô¡SS.Zéè%êI4¹xIåà½Ô©pó#¦]t¨G-¸<´ö•á-0ÓU ·•V/;éî‹Î8púØÑ‡Òj홦›‘|ËE%ÜÂêŽÆbòþo7îÊ.FWÎõÉ1ŠícÑ=Š¿ûð“A§ö5ò1ê�jTùc¥UwƒY9$TF–�ЗmMÉ*½\¥øˆ©&(fëÐ.Ï@ÉE©§£´Ú�,Ÿ Ï^UZíND�O÷д ÐY]Ù Qcx¿È…ý'ËC�D1�ïX¡2¬š9�à'HJŒŸbô{Ô­ú̇ç÷ú/Kc}CJÖ4U's/+¼ÜbÝeuŰãã�L ô§²œv¸¤JjÙ³t‰±È ôK£ƒ®”3�£·U3ÚDÝÈ¥àÛµÚÓ€ß='è|Ö<[Ô (lÚKB›=°FV*óqDõg©„´nŸŒ�ÂlY{™Ö9þ¾™³{ýL?™«¥«™GÚ–M¶fXÙ¬Eшöá�º NÜ|tÖÜ·Šar¹å²WÙªÎV ä"É¥0TìÜËÏ=¸®z3àÂÆ¶ƒäRÝ#ÑØ3ÚÓL”ÓEQùN3@;¦†-‚‚Ag//€ð˜B¶D_Äe'cŒr‰‘I”eoÚ/XKûû#ƒþ«¯[æŠ:#—´‚ôFÅ*ñƒ6}>D�Cj³‡K‡ß71h†‹ ÙÖh1?C ÷0:<•`Û  ÁFŸ~âÁámwžy>ì«ÏNU�ƒöèÞ;žwð§Û$ЯÌG�7´W£}1ÏYÅÀÉU Ç[,@—&-Ç=Ý®ÆEÏrg"–÷$Ïm;¶Ã<ëÛŽ{4èœöQ#kMK€L¦-—óPÇ@]­ ã%iÎÈÙ�PtŠfËZ­žÉ¸ž3ÔlÜ™·@ÉEÙã‚F´mkç×[挪è¿}ƒ†Në}äÌF¥¡à%]N·iÙ�óаܷz²÷º6*Œ^#N\=ßiæN§ÆJ-—[�TÂúâ÷«#€þýoÒÄ‹òXuBÊ�혔¶/(‡:Ê€ŠÓÄ�Š| Ÿ«ŸäPÈSØ©.µ2W/ŽïZúƃ†Î\¿ä;o@PŽf‡ŽmMíSGoêook:ñ­C}ƒ�å´�t<ߌyEe ãíPÏQ�Žx¸±<#C-^‘o6påÎN™Õb‰ \Ë� >è?ËüQ1ê"УËô¸g|OŽ1—91“m"gƒÙ—ÚªQ]JáK,‚v^Þ·’FnŒÚÖtÆU@l[WFîe;êï–²á¯Ü~nÛvÕÀA-EõUN7†Nϼk\} šIcnl¶)%†ì½ ó]²"Z¾ïÑxh!•l?V˜)güX"N¨"è ?OMÖ µ²”µYË“'U.—¹{riþ`œþK&S•”îRB�­†éadÝ–!ß%ÎÈCéf²EQWã� J%ê½Ì{;RÿòìºFŽ Y50¢U¹ãt"”YÌÁìÀ«Þ‹zFËäãÜŽ")©Ð-VXúìr%æX”¼ÉLÎI“w÷~¡ôÝ*ÅüÒôXvfvÇ!‚¾pòŽcL°iŠ,<Šßò!L¸R^¿2¯‹O‰¸N6 ˆÅx¥“4 JB‹7T¶éÚ Ò[Îø¬9g£Vå«ÐªŒ�+|bߨa¡�cZC îèÐü¦„w8/É¡ŸŸt¥xj¼ŒYq„ÌÓ¦K0S»jºSbØåRŽé«Þ£ÔʲÉv6­Œ{¿Î¹çºžK’èC]b®Ý¹%…Qɪ'ôL®ä˰aqqë§++[çšH1^¦¨ÅΆ‡Õãdõ «3x3ö–O6 �‰:”kÏWŸøð�V'ÒyåØÖøð;8çãÍi[…ѰQ@Oáè 4÷!G“Ð"�K:V«Ÿ$¯H{iQ1“ìÝT­Ü³w¦ÆYS±�õv,tú%„y¶OµO±±œŽ·^úùÅã vyVBšNÇ^Õ®lÒMOF~Eµ.Öè@ù;ôeÆÊ%ÒΤ·n޼ÛÅð{žxçÞ�7m ×Àã·ý%æw<§÷5½Ö‚®³c­y‘«ÅôØàrV„@Nƹe®bb½ä GHhà h|I4#¼@_ŒYf«Z»ftxQïpëiÙä²1:õþØZ»/PdÚ5«ÿaÛê‘(¨·YP£Á‰ÎÃô9KH=#,8�±”²ö˜áµ,–�|2;ñê®[¶î¹��&6lÞ@GË«ÉH]Áfô¯0zâKÖ¯]€~ÙÒRÕÊHÈåô i—«È€ª"¶p©� ÏKÂ…–¥Û®˜IªWH4Éû:Ó—»Ú\c¥Ç,„ïQYØÎçb]/½ù t«5ØÔ_èD¸£ ¶ÇIC¨²±ºÌ`¤ÏCÿÆð¨_A]%1lK;6ýÕ³‹—Öm¢K‡ól±5§9Ù'«ëö¯ ú7ùgªu)x›åÙ�•ÊÍf­¾ûÓWðUBžiWA%Ø}œJmfY¨tìbY±æ cc÷fÄ9CkŸ+ÿ¤íÚB[©¢¨ø¡ Z‰óLðÑ€£•&’NM4MU­µ &MbÔ&¶q¤Æ´©FM|¢õ>Q|àÅ'¾E?±_¢HòQ4B£¾PTTDÄ}Ι3;:�:#ž¯Ë½½s{»2û¬½öÚ{ŸÌ§?¢°‚£¿÷Ç2Û^‚ûÝ#ŠkÙ\€¾D$µ„Ð+G ­«SÃï>­^«;¹16W¸H�ýÙ�Ë9Žxls ÞÁøŠ_ëÍà?€®ßýadñ–ì¿/»´µVÈ ãö;üRGÑ—Á94juX‘•�[=BåÚªj²}\g)¦+A³ýÍÑß0_ÚäCþØC|¿xÏÂ\Àx¨3NAg}ùô½ha/%ÌòIæ»�RÍša-cìjëÝ®|»23=ŠÏ·VÕO¯Õ†ä«Ôù[Ð;Û?¡îùT.›… BªRZ…»½‹Í)Â{G=¿�}¾<øþ­Í¬lŸÃewŸ~S\긊dkhfÜÜpד¹å�²>i“òš©ŸÄ£29kó‘x�>a6Jïû€øŽ›´m›`ÂVÂÉtÓ[9qulwpz ÊcD¡ÙR'Qeg›˜B%æçÒk öpû¤¯PÏÒëÐv¥ 2A •,¨¯Ž+ù|V~óûAòw�Y÷½³Øì|ó¦O†* îzÁEçöøŽô½Å »ü{DNB�qð Sc@Úån0—æ0@ãäï8er³¶]\’CŸ� kQPz’iÚ×t×½§\wÉɓ쳀~Xpɹ} ²VF]eº¥x…êØç]E_$ÿ�J­µ€n¿Ò‡~¥ ÓaÁbvü¡µÚò¡_ÛA‡ß;~à­ißhu¹©Uv¿[¿ìë�,ÐOýú²õïúWFD[DÐ «2�%!A渵W|u £7mûëè‚&Gàúé…áõ·¹¯®zš39�g\UÓ�xÎãøà*m\Ìf=æÞ=p¾û®‹¯¬x#éDxâOƒk°¸êt_&¯’77%É1ü!©uäÁø3c¿ƒ“•Yfëç£÷x²…²?ÓÈæspÇ®zý^¯[ùÂj_ÿåë/ºÝœŠÖ™ÿæMúÒŠÌâJU‘¾Ûù;ÉÄl£FÔªõÀ c´l_e6¼¼’=êÚÜóx©»ÚºyÄcNà¶/Í7MиÒï®±Áùš›/¾òxo¤“@[µ]ÁGúîtAY¨’ñ=3’B@—a|MÌz šŠ—pv�ߺ{Ö.ð•nݳ¥•¼2ô ÷®¬i^m±×ûî‹ßx�å†ïzÇ—5M3º•.‚~ùý{¤w‚½ŒŒ¾Û/unŸ‘VÐí,YíÊØQ=FÿWÒåÄ]€b°4‹²©8Žø/X Lål¨zÍ_A?êÚ÷-Ð¥êÌF‹æÅø¦w H6Ëëý�/ùÏé‹_îö{åE­iÔší¦º�£wº¨®±ÌŠk¥6aÍ'W}ù Å)Î!\%;ÕR-ÐÏ\yZÄKý"ï#rPÐÆÕ=NÏý8òÝ è©­¬4G‚µ9h»üòx¥3{¡e{W[VK RšZze—f,1w!ÿIrg<ï-G›‹ÞZ¯×ïï¼ú™Ö\|ûÕÝ]ˆìÍòb'h�ïß²T4™Œ5 $¯zÛ‹.K&ˆ2N"†=”™gVa&’jå³|ü¼8ŽÇå–Gœck{xšŽ‰:L t|žAõÝèK¼qE¦Æ‘y—eX¶C”8Õ:³¨° ºrû_‘˜}àMÙJ”b—û‹àŽÅóÖñÍÁ|³¯Uzý�/¿<å‚7>ûr·×÷zû�tYKêó?0Ð1S|ñIÕ÷½â{ÇCrŒ ç?”§§áK�ÉÑÔŸ=ð¨Ù'?¦qI†‚cåwy88`8ÒôÍÀ=ή TßaK—S"'x“DƒÐyÌ&¿ÄÅó(½Ð|ϺR–ædö!c´‘[ìIÔH¹I†›gd!†¼„ÓÏxŒ©S,ÐÁ6öðÜãOß÷øÇ_u´Så r ¼;<˜±AšNs6¬¨;~erΗnnÔ‰±Ag¾9ìïÆ÷ZûyzË9ŸT ½Y“ݒãûÙÅ�T¬5Ž¿¸ÚWŒDoé—w¼W^}ïÕë‹;ÞÝN·œ,êz¤S)YU³­Éá¢ᣠEü�•WØPFFùxHÔa'‹`¥�•Õ˜e¬OÑQ³žòþû/=ùÀ…G9åqlŸ³ƒÕtb¡Àœ Š«ŽÏ¥g “sºèˆÀÜ:çCy1Ë–þ"ïíâ1Ìoízdt…�ÕøpÅC©ã·ÓÉ^m~7²3X¼èį¼Òèõ›»ÉA7Ü,7£Iï¦ø`Ïaü=$Ë4—f Ûã;„*ªŠ\�1/{œI²5I½’)ø†Ý8§}î¹GÏÎåœÇÁUì‚Ç=‡Õtr`9Û—Lîö£‚NFÃL‰>‘€Î##LÑ·ƒÞà“[èWší邚ÁŒÍ®Çù.?IT[Å:vQ€ö>'{�$¼Ûýôúñ-_¹¼ÜÙ6úáíJ8hÔÁì›ÖßÎÈ»DTHßí sa55i…(?'HÙ(Jr…"iÑTó¬^ˆŸ"°û¸\žþˆ ¨n;œVÉ�Î&¬³¹`rç¼zŒCÐÉÖ�­W6-@Gž‹&w�Ó+Ä;æ„]ÐíóéxtÏgT5ŸW§'ùLJ²^=QéD{µôNB;~yýøõ+–�ù½Ü DÊz¸ÙLZô])±0Lj$TŠaZ=�Õ%DN7ˆÖN:¯qŽdµ@äßfÃg—áÜéqNyÖØž=ЭïŽKMn@÷“–Ó—)ñòIxçÝ8¾eígåï§o¼:»G]• "±5Uͬ}ÒÀè·~‚�n9°[ V¼ÞååJy±¬wû—vµ@Ç›ˆ&šß¿‰c ’Y ˜‚(ƒ;ìIÛšŸÓw>1VmÑx%ÉâP[kcHŸ ¤êY¬Öº_®‹zœòþìA sî‚vCßoMΑ Œ‘«€ù³<$Sz¼Ç¼§âº 6‡ 1î?z·õúi#ëªJi²¤(3…�ÜXHPLпßÖZ÷ÒnïRm±ì=^Ó*Ƶ‰ÝZ´R $ŒD8úé[Üãä‹7TN#7U™ÜÈø.Õ­±Ê„sæçEufA ‘v"ë£öêòÐÝé‡]ÿ_É;Òw'yžq°œ�Yš6ÇBŸÿ|Ü,ÔG(èÌ_¤’=.EÌÑw²‰ý¾ÊøI¼ßI‚W˜glvò.úëqEÉÍ”du�ûÓ…÷.šˆ6»áù¾ÝuÑô– ¯¦§wÃÁn:ªk‰À£ï ̰µ4w¶ip–ǧfT Çö¤�ÈK<³4ÿ)QQh—]ÈÊÕøØÆÙDžQJ+Ê8Ê=îç€ýÙEv�äé;ªïÎ]gòÌQgþ¸2U\½æèÓóò¯Ñî/6@°µõ'Жĩ<êòV6_fêåãŽ)Â’ð¾Ëg²`išÍ5ß{Ñ3?H\Ú¯MÔÊ£bèZYk{›žA~?áȪ©¤g–àC#pó´Ióö#{¥mÆÆYô=íτ°`…˜º?ýVqω¶½+S¤ƒºêðf\$ïHßA}wñrt©è¹;7_¾“ÊÖ-2_Qª> :iMÄqJŠï´„Pü”Ñ", }Û”¤*Ü „9ý,M4Ð�÷lw/ j‘Hd±ŒÔ"F­– ô:—¦5=èÌFá+Mf[SÜçHƉ#÷æ½vº©¿Ëb§Vˆ APiûí§ÇSc!ú•¨Î¸^�ŽÒŒ{åÕwtL99×;ºÔœ—_ºýèÓ¬ÄZmJΣ`ctf€f'Èè¡ÈK¬wqæš‘ä]ô·¦DYʃð)’û”êrofµ`Xi£Ó4ŒvºMÊ,Þù@² wŒpÐcüHAß(N«t¾…)łəœíRçþ-È,pø�(«62ÎÒœJ1LÞ±DïúJé�ó†G**Ì+uÂÁèûa?›«KÝAÍåÆ äz•05F€·>a»q'`N²T@$–Ð_Ÿµ‰° (5±º°¥²î©?ÍØIÝÓ›�&�t­ã­E’­Ý‰tšá@m0¡wÚ� ‡ælŠ]é"3ಬ;§ “³}€§Mš T˞ͤ'æ�婿æ'uvM¡Ãö¹ÒçoFÐí}l¨¼ÃAÇÔcî.õCÎù÷ó(¸ ¿ô4å@E‰ÙH§s: ´æ86_e¢xãöQä]T—(gZØôÑÏ }ã é ŠÅͲhÜ|$Ý®�£Õ‚Í„7™ôô€º7á•úNcCkCžœ‘ÌØ øûETSìI›¥V‘±³hƒ\ŽÈÇU˜Ž3•‚¯D¿Œû,}ô•(ß™[c›�ɹËÔÏ{ljüŽ S,ë~fDÈHRS6 XLf˜s†\WYòÞ©¼ j <—r.C«&Ò*«Ð¿õiTô=‰@$Øì¤#Mxå›ü2Ò èÑž'0’xÓá�ƒ®ºwàÄ%§Øâ;ÿ–.G‰�‰ 1úªsÑ©¾¡ ªyžç6K?,ï#Þ͉èñ§ÿ �CÛÌgr7�ùåw'ã À>B¢vAeBVUEÐYhr,bí…Úh7Xè¥ÓF8(Due,& ¥ LJ] ®ó÷>Õ=Ý`@Ojáv¢Ýî€Ói¦;‘¨ zjÛžà„øé-*eT’=.IV|Yõ�frLÑq#¬n÷‰hàŸÎçò*Ý>BþÜuΆÂû‘#D´ 4£Mü#�ÃsÐ?–Ô'þV~?ÄÙ�)ŒÈJ)´ª°õ,YEZ­«æq Š%uUý4ìg®¥¼ þ iŠ’ ,¹}©i(ì@šîé”=iO³3ßÑÛéH00ßlz:YëÀ�ª¢GMïR‰e€ ;äÉ:(dr¶«êdjŽb> óUƹsE•Ó÷ùFŠ~×ô�°£…÷pÂsÉXxÔ«iÎ#à<™ÜßUì&ø€*ÛyÂaGr¯ÇxG2)™æ<`9ó�M²]¬NẠXP¨�³“÷9BÞEÉݼ¶¦š·k•\¦ï½8Ñ›Ðú�´õ¦^KG“�t{¢ÝÔ�‰D4\ñ$ÂÞ�u³aÏ)"µñÏZœ¯Èß‹ªÉÖ LÒÙ¼« G¿Ô³é€¤ïî¶ó2†£Ã¥=úØXðßèq\“37¹üÍ,è.ý<öïòM‡.Ó?8»ºØhÆ(qá‚«×ÙÙßø™¡Xí,Óé-cJtõµ ýñ_º*EÙÒÔ.iˆâFü„ I? "!•ô^qáqåJD‚wžóž�žÖL×î¼MÛïk÷ûöÌ{~žóœçœ‘g�0}:æÈp‡1´)p&þŽÎ”W�Ç¥#ï€SÐP+9~\òðkÕå°eã¢7ZNE0{äZ�(ô;m³Ù¡ï7Ud~»_%ñaªË‹Ì\åŠk½ ™\Ò¿3ù•‡’'´š”¨@oè~MA/§Ç±�i®f+Ø‹ÍØÏ¼,‚�¶¯N¿h÷Ué4š.ç”ÿ뮚á g©äá=ê}å’ 7„•׿@G*–�(‚/³ œóר®9òÉÐP:m¦2É#¯•…¹®Ñ ºb»¥àƯ醡×hù¡XM' ÝÐ÷›ÊwÕ ×ôÚ-MÂÆM’õòÁëNW¥»šÌßYø³XœÉÉtCÅñ çF‘~)- ÉÂŒ“¶ª.Ø„Ë=3œÛº«­o}¨—r´zõUyJYΩâ[ò “ÇS¯ÔÌã‹¶{P´e1:‹,WƉ¥‚%½ëÒ\ VæP ~RHGHO6lù/éÊ(?»€ä=¶záÁÍÝ'”EÝjw¬0ô#Ë÷ÚV«eE«)øÅÛ”õûÛðê%ƒóY9 ÍYÉä’þ]³¦ J«3$dø®Ì̉ „ÕgµÜÔ§�:Ȧï~¸`³Ü×hÊìåÛ|ZÀ‘ fOhæê«Ê9é‚ÿ�gˆÊ=ÜäD&ÿ£ §ö¤t®XF–e;IʇÓCúÐu¼ªyjTc ÅÅ5#/Câ•3z÷Ìf€«ív:Œî„V³cuBÏ^Q�¯Z-õÇZaåXlì�ä/ª2áÉ%ñd¬ߤEáU˜Tä.¬ÿá†~�k›ÕBfô�V·œdƒžt‡Ðë�óJí•c ™³�@3Ïôêži³Že¿£ÓvQ–:=ààÄÀèñâ=}+„)ÅÀßdH&BúPw�ë‹ —6Wñ´ÈÙ½ÙÃEow<;t}Û¶CË·B7Š·ƒ+ï«ÐRz?Mk¡~ùrÈ1“æÖRþØ ÿ®·¡Ã¦°„uˆL@ ¿`?Æhmu›E…!cDû[²Áqçe¼»QWBìiV¸ÛìÒšIÀ3/kt24Þ|­.Ô/ þýâlFç¾JÔ¨±ê€ÁZcrݘCAt hÒŒ"¤§Vl¥ÙQÖú¨¬S'gÿ/YæŠëD¡e‡òv[ù‘Û²½ÐvüzçÜVX_•ˆ¯\ó€6š+žxüò'žê©/W’!“鉠ޫR7]^q¡ÉJ&×þgòy°ü]àrð‹&˜3ŒŒ—ÌÚÍÝ'¶G¹ØêƒelxûÓ KùšŽè8ùMš 9Øž¶³Œ5m+°nË <8ùȆÑa|;ôœ ´¿M�ŠYr•¹ ¥ °gdÌicJº¡iW�Ótìûa0–åjÓüXâLN¯bc)é¡L¹{úökÿ¾û½aøµ—·Ž¬ñpUz"¤ƒMàx½é+Ô)IT&@€k¬ÿäs�Ñ‘qÏZ^Å)&Qæ·S¬Ìž#²{a,¦LõÒùZl?U48™/ó<&ñÆ(Úë�ÁM…—ˆÆ›YØËzÒ¶ì|I減åºm+} …÷õ$Ïɰ÷pö™XØ¿ö†‡ÞÐKþbðg‚baô·×k¹ÕPà‡nÒF/Ó©» …ô!YE�o~n²jûiæodÑÉQ©·Kõ«*%£ë‹Çæ*ôÛâIÒÝß>5P=¹›ò½Ý ­@aºEÙ\u4êûeÖö�‚ò° Q�Lˆ&ÆÚÈ®>’çf �æU,ý¸çï3¤ Êé{fFdÚ6«F¡ÖC·ð„s1z+½t9ñ&õ£Ea1¶Ã*tÃמŻZ;^Jïn@*ÅE[oÏܲ÷çðš€ÎÉèÅúD)~ßÁE™/ Œ=^᨟áÝÓ¦f–j: ÇÂ%Äæ[bu€�_ÏR.ÝfßD.ç:M]ÚF29Ür×ÝspÕíÉŠ1õR‘²L™÷d»ˆƒt�:ãÞ˜[”ô=“pj=ý$Ò74Œ€O9ôØR�þbJÁ&Hì¼Í%�ù¸dw—}\ÕsO…Jy¡©äH©ŽT®ŠÜ'?LþýÞWkq~ªÞŠâv—T¸ñ#­à*H'}­J”ÙÑÚdÉ¢yR(”óVàLŠtïl¶TdêÝv/hk£‡HÛÃÈ$ÿND9G™¿îá§ñRì�©™/§çê¼!�Á�,W rKÜ@(¬ÁÓ0—è«æ Ù)‘X“ÿuj‘~÷pÊïäèÛàÇÒ˜RR°¥médKÓu‘Á�¸ÊÕ€övâo œÊ½þúýÁäÒ/™¤|›Cúò#ë4Ø( °eI«‰Fÿø§ÄY‘ÎûE¦)±zçîŸ&lÛp,|0]/ðµÑ;åA‡Y< &õ;S#§*¬Z·Ôûà-3›"W»¹¬qA.Î q/Ïñ¬ Ƨ×Ê2Ñ”-�K6FÚ[øÜ¿çsÖå&;ßç¤l™êÕi»Ak¿_žÃyÙR‘› Ê šÊ]�UÂp£&dâX v )=ñ{÷šQÒýžøØ$W*Vž€‚wMx~xïWåzVƒä2[pñ¶­�Þ‚Í-‚l4f£š&:êp3#c<•Ìäz^Òχ†µÕ«tXñ²¼¸#_‚ÛªÏR3éÞUFß³Q"/þ"5� £ÿlÝ9¡‚´›lÉsƒrée¨ûŽ×v="$&©Ð`Åö�Ê%­VXBS�«ô[˰¯ÍfIPç JãDð;UbˆC:ÓÑÝdxsÊÈ×¢6r÷€Òõ0b÷îâcÓt Ÿ4E0:õt' ݆*­“Ã<èV×É\m±Zžáa—|~‚T�7ºÀl~n*ϔȬhQŸ{wô>妱D�'½Ó†Ð‘jôQé¼{â5²ûåÊM{¢ ùŸÅè°Y° Ê¢Q^àU|Í Ö5ƹqÐt�9Õ¥XWº0͘èÞ¾ HŽú©!ÕhltE]wíßmÏl™Àaiâõ€ú"˜œèõ°úýÔL�ûqŽÉqôò›ªáê`e&48HÜ4”Q‰ é�Sê·ÛÌtï.¶$(×ÿ?J=ݯƒÝGs׆i¬X�_”Õè…— Ì}¡)½þ‚™ºùV™%¼öêc6yJ–]žæÍÆ@¤�Ñ#>܃�ÓWMWÝ éÖ·•þ3ŸºßïW6§9×äa@.·Nïmõ¯ßãaÆò6ýã�%2L˜ˆ…Ø÷=‚íuzÒLc0ÒIõî¢ T?5¦ß¥‚(v$—?}ß•NbˆbQ¹äUÍÏ›‘÷å"…�1ìM.Ø Œ´®s—LÞEç�zñð ñªzÄglòî�Oy\ Ú&ßtÜo|þ¦÷ü�÷K÷Þ\: Rl q§·½ÄÃk¸x{”Ä&é™[¨¸êà™/™ˆ…t\¿ãG/Ÿ•ôîépœ ºôðïÃ9Çì˜òuç¡F‘ «þÕuƒíi“«:{sÞ p„"1‰ãsò^Þ`•‡Ê#µ·9 JAÞ�xw.ðyô RÒÞÝâd®Ã-è EßiÂÍ“Gp¿�4ŠE¶ ‰L–úƒg$›ÓOmT‡•|žpºêq'([&Øý®×ú8n8ˆw&Eº7ÑU�<Õó¼Iµºp)ú*૚×Þy�œ9²1LñóNfÁb¢u>�X†]›ùCÞ]â©£Tnïwe6¨jó[*pU›�îâ ¤ó–å“·"º„ÃÊ©Œo3¢×ÿn%l\æ5ÌjG‘¾D�ƒù‘±·Çä.þì®×²œz{wiº>#ÇÊ=lÿ/ €æ’A¯:c3|X=‚IÈy­šY^žÌÕ%¢'3‚ø¹Ë’¬àœJqï'å·¶)C·aa6º™å}xvíß=õÖ¾ŽçÂŽŒ;ò}¯a@½þú5ÚìÓ–°­p¦N혮’øM× Ì\–I}‚™lâÝ{ú÷Tɪàѧ%ð+î@UNT$$$kUA[� † Õ"ú/?ËEO›R–A™q§7|®¼ÿx2tÇ›”Á+lt˜Ù$Ož�>º¶r¿Ù=bôUÞ•(A]à™^.þ;˜]ó¤ŠùúZ™Ù$mßmBÀfЋ~ûœge$Ç=ïžzxÛn*Ⱦf›ÿ¿;€¯z¿X¬øç3Yi®°@‹ÛF]Ö Dµ8Ìân &Ì‹ê$¦XÇÆ«`@7LؾœÊ6Žé„ÃÂãm ê^ƒ.¾:Á4 ™ˆG.Ñ'<#t¨×oàe¡åi•�m _x¤dd ê—^Œ‹ži}‡àîâÝÓó÷µ?;�´êË™ vÕ“þ¹:^+ãžjr<¬ZÇ,P=÷óßɆ¶`¸26¡QPa:ã÷î}ëu`g¦u|eÛltºý6Øðìáßõ…_Þ9lô{E‡n Ì{¡]¨*sи"Fü†î8H 1?pD§€›åêŠ7Š<ÀÒþ?�OîÛnSêÅFoÁè¸ýu¦Â�hÐάøwÂQGÑ‹�Ñ÷¾óëÁ†§zþ_ή=¦­*Œ›ßþaôÚ4�NW°­¼,…­<Ô-à†´³�¶ÐJäQ�U$FJs24Æà#¾_ÄÆ¨�7ÄèÜpS#ñ^{ãåa$7¥Ö4Ñøšfþëwν—3쥽ÜoŒÑ³rJøõ{ý¾ï|ç‘ÜïŽûøÛîÞWy§®]Ñ-¨ŸI—€éUãÝÕùó+Wê‹ ÛWubŸw\»«¾ˆL³CðŽ«SrÉíÔøÍùí¾Ú”L��hr¾©+r+˜rÀWý–&œ£ß‚Þ ¨´ÚZTô #XX^ÝÔª•›¨A ¢ct;°½Á½?ö�öë®Û‰ìŶ½P—¢C>E.hÊ%—É©º ý£]ÕµðÄ>ãÎØ¨Aã;æKqÓî©hyZ¡îîÜ∠±R r[µ<}ŸÜßrƉÊç@Å!”k[eЫZ¥>cûît^ ÅÕÍ“iÁ7¿�j¸õ¶_Q�˜Ø›;0[WÑvïŽ]�$@[è®_Ñß”:"ïº”à›£¾Šæ ëWu‡æ\�ØgŒù½J¯ÑÝ@¥*“fj~‚y‹lu¶w¯œä+çŠj˜$Î’‰ì8ÑP„ÏjD‹!cèeÐ�wâ�} kAú »2 šR!Ó#¶3ÔÕþÜ?B¾UvëXê;ÒO4[·¡è]ºëTthR&=39åbÊtOéWõ.í´±Ï`Û�‡O(ã‡ðØ °îvûã7[stR“S0Õ,Ã5"ò•ܳ ƒWGÝ1EÀ** �¡¸®¨§\;¶ï·;ÉM.JâÓÉ­ & g´a~le¦�²“"?êôª(§°Œlƒ}o.‹wYHè®/I‡ž™|r]@ruí <±Ï`›Ñ�êƒ&¾b«¢e§ìÒ+L÷R'þ!Æ]��ÃMç`Ü3ÌM ¯œ-Á=àÅÁ®7�]Y„@WN �¯ŒÖ�SGöT]�Xw Q=d¯ç!’Ó†ùhäΧш#Â?TTÄ‚‡Æ�ì~ܶ¶jgÝHQŽ®?I'‘y¨X—ZÎÒ�ÀÅ6í$,¨y ð§�û÷#�§aaÁÓ‡š¢µ}ƾÐü1�æòÚB·¥Rúäµ¼I:IÕ-ÒQ—7u¾Ô+f\W×Þÿ~õõ;¯ÛyÔNU·=>Y†N5ÊS>qº¦^}~ëaVÜ=�dpèöm1XhqS(—ü”k�¨ÐV×£h: Ùª±Có¶ïU$z#Ó‘äh:@37eîÛ©¡ÐF0ŸB˜ýw‚¢Á®ÄnŒ�F0Œx*·QG7ëdÝá¬ja^ –¤êºÆG’ºÎ�7|î©2Í.ýDËÝ÷Ö{zðí½·áaΦ« Ê*ñÕí» Ç±æýsÜk‘dðÐ[º×eÉH¤âÀÇÁ?ˆ…U@ou"nÖ9Œ�?Øw©KNÉãi΀„ã’øµÉ„8Ô¼éVg¿w07öxË¥®¹«•[çFl° °»æO‡µuÆMZÐ�\^ÓÆÝIz~¹˜T]ôZ‹ãdI¥Æ”ö×ÒRHˆ÷w¼g½Íº÷mt݃©cާ´ìÿ#æVìÒÁ¶›æ5‚ «zÍuw·cÙaêýJh…V)¬Øc �9q¶V[Œ�ú�ÊÁU +®},žB�ÞÝÒ~ß-í'Þ.)Ë­ëÍáÈt�;6N•÷Rõ-»6.ž*„u$!WÿaM¼ îŒ#~V_wI^ÀÉQý®äIs¡ÁÝ­•¡±öÿºoäÈ{Çr–É4’É�¶Ä|oYY§çñííw›î±S <wEÕïýèUžçßý¨åŽd »ô&ä´‹ «€>,�­Â ]hüÙ¤©À½£½eÇbm%¿‰žçyA`Y–ÿg¼¿lóTé Oo ÿ²‚0÷RÔ!›uÍ™vHÍ C~IÕCó¿„5µÀ|ˆ1Ñ\‘‰RZC¹‚WŠt¾Ü8m»¹Y#êŸÂ™í½{­èKiâád©úï^ßóÛJ<ïýsR`Åç4µ·5Ö´è°p Jü`†æÜ 1ù79z ÖôÖÖs5½® þ‘Þ ˆ�]¹çŽçyQ@ð ¬Û°![ˆ·£i†qN+9ÇÈ>|ú—/7"3Ï—+mŸ nXùÊë�ìB™ÛNè’òû�ê®ÉN­éémÐÇÆ%ÎÏ�8Œ{5tÒüRÚ¦cøÇÊÓr‹dÛ”ºµ–ôÿ+úººÀ² ‹!àYw€Vncà3‘£¹Fré Ð8JW@Ga�É59ñÿØÒ'I€`#K ƒÎ²Étz ãÀ�Ž£Òÿ5UbUôüðÄü´ëËN¨þÐè(RçèÐ3ó9sPjÙ °#R÷Eˆ¨º¶³ÉPúÒ'Ð2£9Œ#¬îÊÒÏó,“(–Ó7‡F¹‹¼úȧêO,gÝXÝn€„E-òGÜ|‚N6âù]D�u÷zöâ£/õ�^»k'DšO]ī籃�ó&$]ÓSTÕÈÆ‘Q$$kÓ—¶iŒårÜ�¾Ï՜ګ®ã]]’Ò`Â-ƒ›cE–Ηr¿Èˆs”’åh‚ñÅA—QçD ;7@w"»^6 HZ°ÅÍœ 9ÇpȼÓêh†È3ÆV?ï±B ߔɠ›î³Õ…­øÁçóA€Ô_;Ѝö†¥ðU{¥ªÆ®ýi€Úí³ÙHŸ/г@º†\¬þ|�°qÚ³6Ýþä}°-c9õëwä!$#êÃYnëgÁÝ íΤ÷ßÚØXo¯N&ô­ç¤ü;‘ sãY0àxhÜ+&æ=*çrNLÍÍf·òFJðG; ˆç PbVC¤9dN�ÐŒ@ÝʂߑœxŸÑX»ŠA·†×æÁ¸ûûzðÇ¡%X…*iâ=�Rƒ!W0ä5ÂSFƒý•ùûenº1k.Hq“Æ¸Š´Ìh|À‰œ©ÐÕ�gé^¨$¼œæéŠ¢£;�êßV·î%ÿ:PŒ.dÒ5Jã!‘5xü°1sÇ',�÷W 8f¡VràEѢ͠Ën¾©¨Uôa:À€^×Sfƒ…£RX* ˜'¤©äe2è º3«BÏçóÈ~Û¢G¨ÞC±ØÊ(¬ê“RÛ\)è~íôôʼËeì NçVõæ›gQ÷\v�³}ß‘'"þ±ª|W/`cMÆ>kÍÚt”ôÈ‹hå唀M§PŒ{ äèO47V‘²×Ù€ÅÍð2 mi‘ @¸m¡Ý|z?•�¥±¤ÑÿîÏXhKã@áÙº¦b@õËàÖ^ô®®Õ9ñ¨M°³€9ìšH"{Q?�-nÉeÚ`£ƒ,›pÐiž:ðM þ‘eÐÃ͇+;¿_�÷£èxy0j[ZZœê”{dåi{–~9½¼:=ñGƒáÊ<\œZu­�R¤|äñ§‚6r¼LmâÈ]Zò5Ò+GýY¢/p¬Dâ�žÃ“ Íï)Õ“ëMÕö�ñÉ«&UäªÎÇds4�äY’)1cÜÄ]¼/sl1-$Ó<8.‘(M;f×ëà..¸ÂÁXr{´>G›êœcðÈV×nÞˆ¢ušÎàÞ›´…f+nšcy‘¦…„Ͻ;ÇU|U6‰DÑô«àg]EŠ><±'êÿ²?÷O*Ié¤ÔýkgØO­ÍD¼¡é/¹RtŸOµè¡þ/å½ã‡b¡žÛ¡À�MÌÜ´»v¹ÓÚ‹z=uÙ¼œÖ«µÓóåé‰ÈÚ7oÉýTÍÈÄàÚZLUÖ>’€M†ÆÙsw¡Yøê/¹snC7ò¤èq0LW�™åY†¥Ò~-2¨"éodMô! Nt ó4i�¡¾^X`ò@Úífųv葯g3C«1$ FÈʃCðe$ä‚ ®'r<ºü½§¹ÒZYYIâ_G·¼\a©,Âé™`¨/Ôß¼µq‡]�‹{šR—êݽÎì6)Ò=¡� ÑÚy[wœÌHR ÕÀwö7„VVàw·b”+o�úw¨¯-¨ÉÊ\Jì¿¿&Cšo0›Ùx<Zœõ �Ù›ìàââ|*Ž%•JEb‚�á)ÞñÙ¢×;: ‘HŸñ~´>š…KòŒ›¡}7ÌÆS®¿o(Ê`ϸRh×Y–5ûbFˆôI?LÐ�¢ñbá Bƒ�—W–¿Ï‚ÓŠPÿUŽP*¿G´ÝÌé°5—q/4«^£ÛKm!/M/‚ú6©].7h/«{÷‘i‚D^Òhà÷kåR„ÿ··p×éƒ sÃÒŠêÇzªÛ@‰ ›@‚‹ës=¡€öà]â·©u›Í6·ˆÖA–¾-€À+Àº$”løþ„?˜Kp ¾vHÁ9&àà]ß»þ·`p ÚœÛ‡ÇhW¯+’:)²û3gç¤ $ÐGasü8z¼Á ˜«�()ýSE“¿λzV¦<Ö-�û–­N¨ãô>½¯ôÿ˜ïÞtª�3…\¯­å4Íí/Jo´+U üBsž�¨Q’¾à&ÔÓö]¤ÇfÌ!:[/2³‹s’ Ø\, Ë3ñ% @^ÞcnñÛnº1Ù�šÛzG›+.° ú3 åæoƒëxÛ\(Å‹ VÅ3‹6eWxÍ2É�w�Xˆ¦ƒø‡c#3ˆ”UCˆGÂÖ‰3ãêG¨«Gî¤7U%–ÛW}@¡†ã{Î�Þ{îÐg3!f¶%iTuW9%I,‹Àþ³<MçÔŠ‚pOì”ÉôÖ©ß¼=F"þ¬Ït¡^tÄ12²A–¾Ÿ|jÈÎ-‰Lò`Wj�,©<‡gyàèv6µ¸± ü— ì.¼¤¬¦|â¼z6è¶áòqÛV8˜Ðµ^ãLèX¸³Òª:= wu‰±18pÈuhϾjx¨(úçmW.Ô¤ê­�S²ôÚÔØØü�çôÌÆ/óÌ Ó©ûbs}_ü¡Š;cöV! ô6ª°0HÀñoɇA÷«|`´À=ˆw�³ÀZN6ö <Íâ}ÉZ›Ž¯«€>MŒ€ª,Æ|é gg±Ùð/&2ÿº-”2³*šnó?ÑëZÓzxÕõÂñAÛèü|ðÉ2εHÝ�«îQ4"ý¾‡³îlѬèúU=úÄÆ¤iõûÀž�r›ÅñmÎ6øðò¼kXvé¿ýö�¿'äØ�ÓéLèìæ `ý›ŸÏ%“�Ü ¯è�f•7ÍâBr@�¬Íˆ©u5ŸÞçŸ^Ö¤é‹CTïà`°áôSý›zÉIDËäæB›ì؇9g{¶¢»s(º~¯ÞP!C^:˜ëö]wî;õ;¿˜>Ò0V‹e¸V›ÌÍv |w|�<ض@§)ö,l”-cg øg�9wÿùl€­”-ÉÆs¯$ÓÌþf²÷(/ò"Õ7Fkk{Pï��ä`Õ‰OïÙSî º~™ôÈN�TnjÃA+ªz(ªU•Ó¯è ê9WW¥åœÞüÅ[róþ¾@.·^öFJ÷ Å@Ù¡EÖ¾*à ú9´F––ÿ‚’˜˜‚•lYŽóiÇ_Ë9·\=$0’ü›%6”ÈðôÉ娦5Á!’V††°�š€/½µðµkþóü ž/fv¿l[ùBé¹!˜ó,ê•.oðJ"CD�PO«÷ “ók:ä‚´Ü-ûЕ³Q l tDçrëž©èhoyiù¶„§�?KÚÉBén–.M³°’-vžg…ݹ_¡´4ÍIú ýÿë÷³<]ضiÙ~?Ç$K¥ýªŸ@U¶X©Ýn¯¶6Ú‚ÓkùúÚ!O÷íÍ|‘õIJ«º,êý¯‡�E'²‡‚ˆ½Jí´ Qt}ªžØ’�¯R0?~{¾ºn>·n…£¯+èÚ†,�1CÉÅýÙR(ÜXêfkø8¬ü_–þ6ß8sŠkõÛ.‹[hXŠídÿwñ[ºüþ_övÕähï ‹ÿË®_v&$$}u„ö®Ô¯ÿ°GÏôúe¯ûKH®ÃÓ±»›�øLd³?þÒ`ñoîÁÿ„âÇï´WbòªZâl±˜ïÀæ˜OˆÐw¸uJìšåd;%'nÿØ=Û/f3CLãÄMdÐ9N”~Œøìr¡‚wµ Í>Åòšá6�¦åØ®|©ÐzÆ6I?Ý?ᏤsÛk™3#·½�ëÿ¶apdð››kÛylå>ýæsmýÏ?†!‡Ã�D}�L8¾ˆ}6á°-ೡÃH Œ‘ñO„Ãb¾ùl÷»Ïý~Èäñ ú¶Èqf{Ukù¦?·µ]ˆµg?-8Y\šžV÷¿‹¾�9�€Ø;�Ç¢^TfËfdÌ™Œ!JÎöÉt¡s :Èù%w±�ÂJ»Ý¯‚ ß.QXGÒ- \R1à†uà¿dþ)è#Û:3Ö¢Þ!“÷ƒåùåßSû^8zëƒßþ€b*žãfgøÄ¯¿³÷¢37¹…£×*ý„Jšp³ªþب×hë¿ùÊì€Ýýèì·¿�‡¼…€ò¨‰žD3×–/-¿…“h:$΄D`=x:8Ú::n ³3¿upðCÀæèûLC¬1Ó5bðð ú²ç¼Ó7Û¼B²îåŠzcÝ;ÌÏwTŽÖ‡¯‚—R Ñ­äÊÙpxˆž1ä=èæè¯ØáÀt'õx[=žZ#ßM¸èUf€NøoËÖ%­ðuIþñÛ•?à{·= GÞô�ñinó.Í";Æ_p๧¢ÛI_\Dq[0´“=<´%äC ÞVÀí¸äJì ºÉù•Åí¯lúuZ‚*f©/GGn«¼Æï†¾Ìšô.Ãú¹ N7n^UÐtJ£>|;·”†Á¼Ç8²èD$'± ãnÌ-úx"mrÒ]è ú‘i7ú‘NÄô÷'ÿÝó[^J°rùp%˜Y�ž¹x2žñÀrìvŠüxï±§5.Ñ‚ÎuâxCL)a‘_ÑîƒÀÍ-¯qÝN�ßBà TÍá ⤰hå„�¸ôâü'Hʤ/D÷€R·Žhr^Ä(bgë•‘Þ3�t|/±  ¸û ÿѳtýÔloeHñl%'U¾H"[LúQ¶hŠL¨CÙb‹n†2‹Bx¦Ê�UÂ’|Œ�Ì©–…Çò=ðòn ‡À½”ߊû:"Ü>Iœ™3—"] …� ?…W‰!�…7:¡ÒÛ‘üÚNØÕO`oÇ*Ÿ%KºÕvr¬íHŠtªÝèÂÙz½†NÌËL2HzÛEé-Â@ÄA/Êà˜Q&Žé„$jµ½“9$<´†Ì/iN�d:{c,óö¼ ¯O@²ŽçÌÕ{ˆ ¯HúáÎÎNˆ$Î}qÇÎ B>¹#/WÊM…Ñœ1¼—Ùš"„vN`™×!›.'Ýê&ÿFŸT‘ÚËí!‘w¥¹IôÓêÄá˜O<1Cò÷é=ØZCÉ€˜@ŠŸqÜ ž:^VÆÞ. è n㜼 ´À–‰G%�Ñ yQ%O©¹ÍãJݱpáKõÑ,äŽ�޶º#¤FJQ�ÏQôÁOo•Áýƒ??;NC¼ôÉuÇ–ñ¨ë H':?Óö¼%Ÿ:‚ÿ6}0ñ§bãbÉšáQÒ#JÉ!ÅÍQõ’0ç‚®*šª¥ÙWä¸sË,"¯-‰¼m•NÞ Æïu¿í«\óؘV™j¦HM(�²j=†‘®ŒQyº>ìýƒR½ÌÞÚ�æ±Oû,B‰18(µ(¡fÛõ"óþ#<ˆè3Y±�¾3¢’“î¶“O¯'‰Î�ôŸöÍ5(€Ü^0ßÎ ;ј+HÌz0{°OßéSŸ´ŒN‹jVÐ�iÃ08îÜU|奋s~­Ÿ®¸£|܇E½xÚ¢_þN\ðZh%¾]8ÎÛUÐpjàföRÒwn�P;´MI§ÆP‘u¯¤¼cÓØÙ9ÈíâiE¤o’y�é&Ò¢Ê;íS?ä~Â/~Œåÿ–ÛàwyîØâ¤Ð¤YÈ;ŽÙ–u˜#è&3 ÖèF^Æiæ•1Ç‹\é�êi¶l<Äóå:; ,�nª¬ô²‡H«àM5¢ÀmÃiª,éÑíç§>;FšáàyNÃüt,±Mî4ê9ÞCWUÚUJ:îñ;«!WÞ8³‰%ðû•2²CxâɳBw2€~5¹ënjºb¡Rꕹ¤�ã^HÖ‹cV‚–¶}\”m“(wL¢èó$DBÏÑóãÀíJ“©Ò¤So¸©ÝßêQMaKŸþ©—:!?ÁAîÀ6¥šÈ!� ¬š4/ ÅmbÞ™ƒ¡”‘òFá4+\›F§E1zèts�\~|�|áKùIwþ�œ´3—�Dˆ=NÅ6[’4/1¬+çÞÑd†Òrø‡\Î5ÌQèŠ;DQM!){è‹“qŽåÜÃKÊX[5 �%ôOŸdé–åÙîWÊöâø—»0·»ðýÌQ{H (ÖY�ua�K:¥—’NP-¤£½‘Ád©x ÂrnœkjŸãNI|Þy¢?—¸:�Z>¬o,7§Ü9U²![w ÞÕ¼^…þRÊÕu�†k×�tÂ7á¾€ô@•‘Žr1Ç+‡ñ`€H»b¾“Ý*0LM؇Sà¼s¹ Oe¢�Ž£/¦Ñ«åBõY«åõH•�» ´‰† ël>PëgÇù¬›Î®Þé@Rµ�ŽÜ¹Ü­•,tÚÐû„‰lÏ©Rαœ7rå<@Tºg½ûŠç’yí2¦u¢\Kd=L¾„e³´Í#)÷ò ª§ßÅZ¢»Ç-�0=Žê.Ó$©Ø¢çúžµØ‰÷ßøv§ñF×0™†�ø3*ŒB°-’ì’�›àÞªi€‚jeq/kÖÙ5ÅÓR×T*o—Ô¸ü¦âì�È�»þ0ì&ÓõáAä¶+„çºÅ|l¦a—ít‰âþbŒ'ï¨(èÖX2^Éíèj‡"?­ çî/Š�x0ìé oØ�5_H.Ü+S|Î�j5Ý3!k3t¡!Ä,ß­`´Æ7ëÜ]cãÒ²‚v!œ“·Ìâý:-2ì†Õ‹±;�kW‘9×Ö}¢rÏ¢ÈL¤E6µ¬Ôš"É:ö_[�"zéµà´�“�\ÀË9O(Þ+Ôoß02r¡U¼Éts›sí‡ œ/6êû˜ñäþÓZL;¤*�'‰Yç<³‹¤ØO|O±@ΗlüúËedØý â/¬oLcÕÞXÿ×(ÒÖq"à“Âëmº"7Oî6–ÑþZFCE{¯Œ®�¤ YÎuÝBs˜ÿ”¿]‡ì“ÅpA½ø&ãêUKúÀ^¦&‘!4^°ÏÙÕ�œõåîp¯ÒÍHy'ÎSiƒNͺGÉ™k“ÜÌy=GÎÛPù_AÉ¿§ÕÔ"/~Ý|ý9£s%^k5Z¥å›“ˆé 5„ýBÍ©k±p»ÑES[ÆŠÀ²Vx˜Þ]µ¼(¶øp:w?)Ͱx«ø.ËW«MØÁƒÛÈ«vZ�d[PÔ$ôøfZRýmL'9Æm¬(; •¢âaj@œÇ9F·r.~JRñàÏ9/”°›š®û‡‘V¬ã¨vZJkö‘º4Æ€ Ǽ•™bRîÇ=(dæ–„v‘Ã9AdR¹8üamÝ…ö¦¼˜Ã¯ö^©¢ùë�d,T¸{|¶…r>Îdâ0„”û¿‰»±YçLØÎ…9œS¨K‡Ÿ¥ ûàzÍÅpãÍFóõÁaìò¾ùb‰ö˜Ž`ql3hû^q.ÕA²Œã^ù¬ ÿjN@ƒÒåË‘<çY£ô(.Ú”ên²ca¿qbv“qõ+I̵Š÷4ô.‚.Ÿ(” ü±‘9·ï…QažYІÑXù¬ ß™h5ï”â<ÈË@´ú”ºÞ”„}x3Sí :§1½92‚> úËŠ7Oô�½–T{±‚œ9ùY¼þɾ6–ÑWöT#ìÇy㌵|ža¶Î±œÇ4EÒ¤ò�Ìok$‡Î¿ž®¾ð ò ×»°f×Ô½\ºÉÙÚ'ùêxyí$pî“ìw²…¹J“èÿ…ãÎ^ó¯¸ÅΓù´ƒ=ß �W¾uÿr½ëxÃMguytðv¿¾jñcÍþÆ«ªSà–4ù€»t”c—Äú¤�©¬ýëÙWåâz#Ó>µ$Ę;BÍD©O£üÜl§rפ¤ã-_}ÝT=´›�¦–š7¾¯R†�'æ}Ôs£¬/³ë¹0 ÿz°Æfmdîüˆ0È!„åC}b ¯Å ¾#–�¦ê Q~Å‚�y�æå#KzP„îâuM ¹èúÙ]Úd‚é?ÆÃ¦ºÎÃ,“�Ó Ðlï¼R‡ý–áá�U íN£iõÊpÞ˜¿©š—¦ÏJBþú¨ä¼žY¾H–<ÿçxˆ¤æJ]úz^$¤\*E¼z‡o]U@»¤SŽ�ù‡ª’ãžYò‚–,øx q$@?xätÖ»Œd;)'µ;J]öôNÑ!Ú¿6Ÿ_OžH |¸ 'à^bÃ4v�7`>¯òF‹,Ÿ}¾‡ý€sRY;¸ÿ„u…ß6Af6(z;¤HÔŽþš^¥Ýk/íØ¶u3m4�Ç,�ÉXóõ¡Üóþ”êTH<ÏÉ·ö¶“\õbù¶–$eÎî¹·4ë6cRÏôÒMæ=™IQ§RÄÔû'´_]_;w>�ÙdÊ\ÿ í¯½Q§iÄÆ}pãfÆd:ân6Ó__´øQô¢©{éý3RNµÖ¤ìõë*ë$ÙÊåüî;ÎîzÒ Äz�¤É}Lö‘æÜ—˜›èÞ{Sƒ�™.Ðò›7Ìÿ½uC³º~ux¤KŠË/¿7¥:3ÔB‹”¸èë•ns`ì{‹ýv-I¸Ÿ+Α¬Ÿ°þÉ©wÌ œ­’“ÂlXU½Ü ýþ~ËàÆõµ¦ÿRÍ7M™›~r¼­W^Uý¸„f[Jj×U�çõÅ@ ç”s(¾PYÿ˜�uz�Smëû‹½k{i# ãÛݵ֮¶Ýl>'17â¦1©I0 A$¡H |UT„Ä A⃚De ⣠¢ ¢(©�ÒŠøP Bßúâÿ³gÎÌ™o&çL2jmãå-�´ùÍwÿÎïLR‡à6jÝÑ\Ž /Ï'uºoÈÍÿlÞ�ñ«o:ÁÈÑphg·ËÝÝ•5ÛúÃ!$ß/ÉP7æÎ_×çˆõ&±7·J- ˜éÛy;Ðÿ8¶ó¦€ESK[Ûdî|é®ûvµÖþ“ýü;ôÿ»ºø82"¹~ïp¹æ\e³¹_Kiì2õG_�µ\²Sלs¶®Ã åTX]øùþ,¹qÒY'rú3š8Þ!æ>82nüßy^™[ûb|3Ž�|u³F gy=R•– 1}[ŒÁ­uQÂb;¸<ýçí<˜ø»O—ßl„qäqö¶ª95g�2å±[ÏÈÊõ™äT¥WÝs¬W“Hû )P‡œ¤VŸ'›"–8×ÀÇ+G÷’¡ÍÀóŽX8ÿ|õé=2CBüÞ¾öõóyÏȸÀx›¾TÞըŒ™Óœ¤DÊ}Œ©³¸„.¨ËZ�Ý›SÀô9¤W¯»ÂÚ8ÔíAÌu4Œï�ª óqyE/ðÞ3ŒüÁ—¯kˆø·ïßýP¾ßó„9@N}¼‡0¾²³9­¹ÂZy—p¥•_ä›`‹©bü]G=ë�:qGöXùB’¤Ø‚Ïði�t ì à±:¦�9{×›t¼ÁwŽÛñŸ�«ÿ·˜¿ß\ÔÀ„wò&®3©cœŽê_žà¯wuÚœ»V‘ó†ºé½Ö˜¹�‚=bí`õ§r²í ôΨãýdÏd4𬄸‘žó‹KÄ|û¿È@�úÐ�‚ÅÚéåŹmΛ8úI†Rù¿Ž©ã´…„vM¶+\zsdÐGÈ\­Þ9¡ ¦ÐFsn¯4:+®+B!£ [ë}›ž?<‚¦ß/¾\�®½CÜqÜ¿G³Ï¾î=ÿïþ;½ú‚øîÔñ„£Y?\0kÔÀ’�ÝâÏó¢�ÏF5âmK)Þü}´(K=ÍÏUªŽá3øtÿU£îV*Ÿ—³Ü �¾J,mžl[�øžÁáñÎÎÁ�çß>_~=]û‡#qùöm{û{ŒwøWííèSÿâÇ㟵ӯ—Ÿ¿�ìáøî 7Z÷N6U÷Ö»¿™J¹†Eäè amú“i³<Ǩƒ=5xc ö=êmòaÝ)µ$ï–|¨ª×k¯Cì8æ�úáÛ÷ƒ‹Ï_.¯¾ž~Âbâœ= @ôsêâkŸN¿^]~ù|qðÝÖ3ÜÙ9><8¨ø6 gɺWÞ¯UœÑ5J±2†õj¢i­ˆ,q É�ʘ…K5 Û/߇S¸‘ -²Ë<Žn•­ÏU®‚Bˆ¿6ñ‡«%“˜ç¨GÜ�trLöèl¿ŸŸ|C¸¸àþ>88?ÿþц¾j}Éb›³nàÛhZY? W‹)žV¿ÜÔCÜã�$¤Í Šø +\©F¤£î žÛˆ± û´ïKr¹™BIØ,�Â.øÍ`^8BÌ£ºÊ¨7÷ˆýÄÿàððð8ÂÆ8úÀ bºq lôFdߥõ“£õYÝjNºä;N[¡Ý«¬¶ÅÆöÛïþxAX7´•é,Ƕ”´‚¢V жèm°|¼_^/E¸h¬çÈ'ìÓ®9²Ûh¬UZ/om.›57EQìž’™zšÿä”i4NŒúHÝŽÕTìl…Ä17iH¤ÄøƒíßK ›[åÕíRÄŠ\u›ÑhÔ#dÐs0‘e¬‘Òöjyëhè¾!ü$Qï�<Í)³ÚGY%(Rм-¥Õh’έÐ�ݕヸÇKW©CŒç€f¸9ù»›û['å�Õõí½RiED©´·½¾ºS>ÙÚßÜ]X²o‰˜6èëPšÆÄ]Ñ0³*](‰)œµ¹þËsÖá£^q)øLÜ�$§ \E7ÎîÍíažžž^B˜FÐÜ ²Úù¨£R§=.Y òg‚ ZvÇ`MåÞ¤íôA7ØWÙ64ÇG>cÇb–¾¤Œû+8ª¹i“ä"È9{Ò åg\Îa¸�i{e:§ã¡¤�i Ë= LYµ9ê¼{hÊ?ppÚú‚¥µ0ÅÐÈ z¸yFšð›!é+[JÂyÓóßî-þlÏ’Kì “C€#µÍ‘! ~ÏÌHV³^ЕAÑ(k¦ûÍ^T®ùrBéÖ+ñpû”Îò J� ñþ¥pR¼’¸øõ%ÚJN©2L˜ ÔÍcb ï0k’¡—æ×£?À³£2�8Ÿ,…-èiá©BAQ;1rÏ:¯ÊxöZ’Å3Œ}Åêñ¾‘. fsÂÛföj»p÷Æ�NMi~%\‰4ÿ»nL˜Y‹í’»ÏÉ"T?Þö§± Y»îõ½ ç€?Dc×ëOÌ ™Fo\Š+Ú\)á-rÌÑ?E^L";Ê¡\Æî×ü˜ÇæØ„‹C~…ã{3ˆò8è}&ˆ#cä$‡H™ ž—d®u„Ý&6jöXù\wu1bÙœƒt¥g5t â8ý®‰ÉB’·³âL¯æçÃìÄݘR„¶#Ò-� 7<Hµ>‡‚3,ñ<“Žàå}¬Înn$Ð3UÕ¸·Pô0×mæ©o""ÉéÉY³æ'#Nxd£ ewI΃ùá²¥¢ýÒ}L™Ìû_©±\¼ŽÀdd «ùRéžÁâýƒ©P-zw>w—ðw}èZĈŽY‹bŠ×¡Å”ËN®¥-,Ù<£XœÛîq¥Æ%0šÙ‰‘=1ÙeùKH K�é.øfB°YxGèOe�Z!šD¥îg¨ÊÄ%(PNäûÝùVšô-¼ W?º"?Ïšt ¢xÝCžS”†Î…çòIˆ�ð™ýÇR>Uàp-Èt'd!Çå¡&.ù ïbôcÀÌQÖ~¯æ¨êð{³ÄØ 'šk¡(dxêŒ7#-fió.ûCS¶ ÎÀã]}¾Ùx�·öÁý�}ÿ̼7OM\r²Ç–¥™wˆtpJCF -Àº©­t|ÍFFö¶²ø�IÏÃZff¢ž[%y}1îÇšem'¶õ�°¶ÝšwjiY…lÍ…Þ],�Hðæ·Š?%ÆnÜQ½„§¼ò]L©ä<Š|¦( �-¦º[§z«iÛôÎõ3Xò„aN ب¤“ $µÌñ_~ &¦±*AÃÃ(Εƭ60öȾZÊAq²»b7W‘ j1†à¥^g87¥±�}1&” CÅ ¾ 'PYQåÅòÓµ)€d|Ž53Žj”qÄ bÖ‹àÝŒÝ º6�ØSD<%;·(ß§ SÉìß•Ï,.fо9 ŸKú!ìÂaGÕé§ÇZ)Ëm!‰†7¸1¡p3K·²gÇòæ¬P«º[�E;jùø^ 9) ê/¼”YÝÇÉcÜ:™É:Qâ—”‘.¸ððh¿¯+�ŒÖLé½9,Œ�I²Ò™4+Jçå•<{  >3Œ½YšÐéØK5`ºqÙ’MBnqvyÒÅõCଜ<çù‹ŸO‹öÖ™D¼ç}FÐ'<4Z¡>K=X9Ò(p÷*Þ»•©&gOÐø�£¹-¯‰‹¯¥©™G4ÊxqtG,Ë=ØçöÒ›EÙ«Ii½ñ ÝM+Ú5Xòàž’�*‡2º³QeåÓG�´Óøý%°^U=7ÇšgùfìSÚØ l•Nð²¯MÉH�Ë¢/„m3uÈŽòÒIñpñ�V(,CA7Fš³G^>ÌÚ\ Ϥ¡Ý° -:º+pœsÌ9úäJtÝ2çîÅÅrV`àqC—Az^R|ÄÒim¬„ÈTý.þŽ,˜¿x€-¸xóZÚM;Ë ŠkI.Ý*âwÚ•·ã:|r_Œ¹ÎSDõó¦I“aÃɬ©£�àS�ÀqDªwö–N¬Ò`n}õP†¨×òñéd�‚Ħ%Î %Ì$!Å‚¡FLL´b4w]Ê–Žü (j£ór’ @o¸&å‡Ô€¼|, œ¢�¯¡¬Ú5šÉgFû)ã•:qŸ[ؤ¶#ùR¯KFz@zR#MêpÎæö³Ò÷è ´ª ‹?jÏhya³Q´«@ ÎÅ@Y挘By+—ib×HÏøúúz]sö.Ð‚ÐæºÙÚQÖÏ€ ¨‚r£”ò¦G”³³ðç«×Ö^ë8¸ä$C¾)Ê8¡ž—øã°¼€s�N‡—ÈY-AÌNø†šF’GäajÄrL9àQs:´Pz»S{ØîƒvtæGSó1-A¾Ré"'%°!lß”Äpié×…àËå¢ü)˜S-º—: LF³€£ÃꄬŒÊà(lO‚•Dä9x ¿K$“�â(¶×°ž’?\ô +çI‰‡É�)ŸZÙ±J)·Ù~Ÿ]-ž7BùªFTy⌓Â7KSµ d7 \.˜fž½PM¸Ëi h5¬4õÀ�Š�EncªŠlµK8ÃÜcÎßh îÐÒb‰¾gsÕÚ†ý: ù)cW]À�¹¯€È¶œÉYž� ;›ôø$$þÌùÉl<v8‚±b`¶Æ‚ëIÉ(7r«îååjðû«&¹¹#e÷½Cõç#Z³a¯$s›„HM-Q˜¹§ÝRÁ32û=–šµÛ‚=àõ_O­µø³¥¡ÂÜ‘›ßÞR­Ôiö}ØHÈjí`å¾|<³‘/¤ÃE\ÇŸÁd&pCÙºýu“ Bhhyj¸Þ0¸ïVàýè.²NÈë¨ÅHŸƒ›µ¸ú&òÐÚ½6㺶ŠÜÍfk~ÊÞnÜ_½°U†wŽ÷…›œ9õI-½C€Ûí�Ç{Xa(ì®#ŒóK¡ªk¶ÌÔ§]Ý”ç8œp€9È\Ç·€Ê~¡ŸùÔG§¶lêª{ö«ýiv…"DyÉ{ݰGŸÀ–ÔÜ�oÅôÀ¡% Jr�ÿ©t´!Kg†ÿ=ÍtþA}5%ä?¢pÐ=áÈ,êÛc â'݃¼»þSÞ‡;t¹C)U×õíp¨}ä#ס—;ÑLæ‡8æ*þ‡ÀÄÛ<øüQ‰éñ˜/: n„ïL}‡�Ø$XæHjvmûá Í“`yÞô¯÷�,³iÛ#˜ºrIõ‰Ö-¸K±ñ½s0E>ÌÓ/9Ÿ• m.�îã`ÁÜsAÀþ/ð YÆöKsÀE®/¹#„M;>À±…p¸ô]Dÿ‡êo?ŒûØOþÐ6IEND®B`‚pydantic-pydantic-e28e879/docs/logos/nvidia_logo.png000066400000000000000000000145321526274674700226170ustar00rootroot00000000000000‰PNG  IHDRRR— §Ý#PLTEv¹ÿÿÿs¸i²c°p¶nµk´`®e±m´wºÄá�œÍF¿Þ‡g±Èã˜Éä›ýþû†Á�ÍIÝîÀ¸Ûz|¼ ~½úýôìöÛÉãšòùçðøãàïÅ¡ÏPŠÃ%ÿÿýüþ÷šËAöûí¨Ó`Õê±Ñ訤ÑUÍæ£¦Ò[îöÞøüñË垟ÎMôúéäñ̃Àz»ï÷áÅâ”Ó鬹Ü~æóЗÊ=‘Ç5€¾èôÔâðÈÁß‹ˆÂ!°×m”É8wº ²ØqÛí¼Ùì¸ÂàŽ¼Ýƒ¬ÕeŒÅ*s¸�Æ/z»¶Úw®Öj‚¿xºêõØ×뵚ËG–ÊC~½�Å3´ÙuƒÀ!^­Çâ–’È<ŠÃ-†Á'¢ÐWt¹ œÍNXªÊ«òIDATxÚìÁ�€ ý©©˜½zéI †Â0<íi)uÆ£ñïBŒ"Æ c„ £ÿÿW˜!Á ³¤Ì|ϺíâíIÀ4âp¢%1y’Ï8Ñ!oZkó“–Ý$':Ô-³@«éD‡ZZd“ç%�è@R$µ’"©ý�I퇤Hj?$ERû!)’ÚI‘Ô~t¾Í&/*I¹K"ÙL3 LR®|R®s»“+=g½×“@ùÞ+ì§CçI‡ð„Ÿtϯs­Tåˆõ¼|S@‹¤ žî\½®mäÙH:ÀµæKO�§l`uË>"Ô¥ÒµÒq~ÔêBÒ_Šü·ÚûC6�¤é wåî²úoU$í’ZÔ—³0“š¸$¡:¹ê®q)öIg¸¦—Ï…uf0’8ù꣔ú³±âžTéDÛ ¶MxR“¼1;ô!±NÊIÔËEf0’Ž%I\ì�±�'åÚmÌž2š4œÒü«\ŠmR©Õ\&tc¯4µèÑÚ'R®ä#ÿG¨ö>ë‹iR)ä^‘�·›/>{…LOáé²|²UwH�õ¤ï72¬+ŽIØ;Ó…DŽ “®>¦iã¯( ‚ Þ¨(ž ˆˆË!¢‚š÷ŠÄÍÓǪ̃ùá`ú§²ëôGÝUÝ£½ê t5²–IìŸ|‡­žGãá‡Óý+61Xþþé§/ˆ”Q^š6n Z»Þ¯À’À™�U¢¶k¥&³3¨båË!%’Ýójáæ1 #ý륑óKB9®Ï™Ð—BJl^7èfh1?ʤdÞJСpé€(*§ÍÚB*hÛàAŽn:@9yKUcçBJ̪Ú2ÿH£•<üi0 äÍ�’ènCú‡n“_©"’•ÐÄq{x$ygïi)+1¨ÂNm ³³¨�•AEJ¬ š~'[T¸4�½n{-M ¢ü¹Å�Dª„xšÁDk ocO}EÚ^YY™vs6Óë2¨)¿~>€H‰•FšbŽSÆ*€ŠƒìÜx2|“=�|][­Ëå»d¤O¼9T–Xò›Š RÅ%.¢ “Λ’Ñå_Âþ«IKþº„¬ü<¼gr:{MJt¿hµ§ ©|.¢V4M :ÔÏÃ!cÓYHA²ÃUƒëOI¦ôGhmRÅhÛNèQ"(˧]ªú„Í­ » TÉv©öMSú6e ´*™ˆ·F —°�cªålý9 ¸3 He.‰î:-‘TÀ†ìê÷Þ±E•Ô£–Ä úñ %V{{ÀsÐu“H¨×ÞØÎ#XdµÑ¼ÇÄúÎ÷H£‰)ìùN)׈‚hœ¹uHñzÓ/X˪. òÙ’ß‘‚@U-´¬Ç9AÙI¾¯é¬¡EÇÐLêÔßHe»ú=Ѷúœ1ã±Q .©.ö‡Ö-„©uãg¤´YE�YšœÁË¡q/¡Ÿbó´/UàC¨œbÆ÷ƯH¹Ñ|7¾QBÓ¿â vœXø6Ú\ÞÜÍ,_0 Ìœž¡�2µŽý‰Tqi°ZuK£ñ2ƒñ\\nq?ñã«Ø,f¹$f/õ‚|}YŠ|Rû©€?whÝùd@0©Y=îp DõÖKÏæ8˜ j=¦ÇR[éß6,ù©‚àþ` §ØÐ[̳ �R X zñ„ïÀ²Æ¢zµ/�0<â;¤ÌTô·ˆS´�@=’¥`ªê¯&¨Ñ¢Z ÈÿŹþ�Û{>CJ‚ÍZæ0€)$ýÏ”e¿FIF2“œÞ/뺟äDgúÛ‚ß�J\í7¿ƒêuaÄŠ¾X¼ï)c’SN!½UHˆn—Ê‹>C€ < ’޹eÄ1U(qkç�S‚ºD¾ƒ$¦'BG‹¾³¥„…±ÿz>ôŒÈr8g+÷é˜Ds5¬æ2G‘ ÷ƒÿ<~@ΡÎIö�BDy��òÐtŽW¤ö1Ú°k] ÷c\ÊÊÓXÿò;ë–Ò²æv…Pžúø`Ψ´±�ùC›éé¸/³'EóÚ3i kkÎé‚*�£yê,"¢•è²PZF�ðiŽœÄ„¦Ö“P¼ó÷wÒó´I·]Vh£~eRêDS¾­D¡ê›‡îíAÁiÊÄ+Òš ÿFîe4^=Áˆú·^ÜŠa‰¦ì±Úþö¥ç™¨eKý“ÓâùåÕëO~®êK´2ìvbW³ÎTˆW¤9ñ¦,~Ðq™]F}Ý{é8Ôô`¿Æ,Ž—xÅäÜŠ …õy‡ÔÊ`²5Á»aUbNN–÷aÈK;¦¦çø=Ñ*ª)¿÷ñƒ3h-ªGL‹Î¤õ@xFDˆ_q×”é¾ÿ§MÐ.ÏÆ•覵åÔÚcé}dwù·ô™AF%SÎZþøÌD1REåGucw:±Ð (¯H«�ú¬^«R†br�.`N¿"úZ‡]›|ô6³„&£63öF¢¾BJ$ÚéqÅ´¤·5ÕÇ�&´þ½|5ø*4‹~Bª`�½è®ß1îTÞÙ²øÒP]‹ž¬–qJ É-97í¤†´ôL’.ì2ëüýˆ$ïGº¢ AÚ0^zr.„"4—‰ù)^äû™öìX«Å¯Ów#ÝlQm  e4£%ÉÕëGh{É7HÝÇŽâ}vïYþZ‘ê}H“eépLÆAˆxÃú»� 2[ð ҡؤâ1í¯ú›e¡Þƒ4B9“ñùQGöÜ0·é¤J¤g‘çËöxuk\ïNsõf¤/”9’4� û%Gk›Ðr~ÆHú36¨ÏyOmQ�´Ø[‘žÝR⬺Íi;¦mÄ�>R¦ 2*ýtÛt&dýèó#UòA²q ÝL­ºnì˜íi,Sv*½-ò!£}–}®`à‰ÙÏŽ4�XIj±·oL—õ ±eÊ ÒÅ6åÊ!¢ó@É�£µ­Ÿ§ØùôH™ÜÅJRqøŽ•¤íŽtólM}o¦LŸ©Sæzw_cú“#Uð|ˆ6‡\{,¶%ôGº™âÎË"íœ?¿ëˆ pí§¹¡ø§FPòÉ¢§:Ru3•sQ]P�[ò~ˈ´ðT¶‰Óóqs\ @yyàßÕÏ�4°Ö±Gzå´Ž€_-¶&q<Ûkß„t*1ÐLj¹¦Ò ÌÛ™ÂæáçVü‰Õ¤"å^™Á�DGkáUíg³O`3í(Ek­O -‰·ƒ‰Ø'·¥¯‹¶×]GR.sèÑåùƒÔN­ú—ljmG’×Ù´ÐŽÓܵYçã)ÊSn’[ûôÿu© À|Æ’# pÓ�î( W'û —'“ŒJÁ‘!Dzã>HÍ/y!¤õíÏ—þíö÷0¦Á¦ŠÉöz†”pò�À z–Œô» z#ÁÁÛMVé¡ÏŸ=ýëö+ÛS§:Úüfæ�wAAŸûÞ.»Ø¢ÄÓD¼]¯ú ÇÿwÉÊ Êœ©Ozxõ H‰”£ãÓýª~Ožª´²ä‡JT7,Ú‰c"äœÏWÂn Ç=!UlÒx˜ê4ºƒXQüÙë¸/ê¥=‹>ưXJ¿‰GÐÊø¡RÂ…Å›ùþÇÂ"�Rx»‹~®ê‹ª¾ÆôrkF=Z¹$ìaÆŒ” ¹ËLØåz³DÐS, P�ø¤÷¤3í`öt*¥_즘“sÇGd©÷69#?‚ B�ËÄñ¡Ë¨Hü<íEç‰ Í]¿tH1¦-Ô“ 1Šì•ÙV`þ¥¸óômþàŠþº¾Ì[>¯ºÖ¥c;‹{Qyy‘Œú¦éŒ,e§QeÝ{¤L¡i×�óø¡Ùjä¬P(œg=µ¢B# žlhcÉOÓ&†˜ÝCôŽI¢þ£—fÆFÚà(—¼¾è§™(#SqŽwÖ)ü'H7Š'ˆ{îi=?Eü5 idÊiŸBzhQ®>Š´š¯Ø$Ô¶+ׇ~›/5/bºMxõ.GƒBZ{ÊQá. R4�ãþÙí·hÎà¶ïÒT¼i5Ó¶%óðήtªàË)h—ëONc†Úûy${;Ò•b�€» ’5‹Û>,ï¿mšLÙTr,@�“7 ÝÚOKIÜ_+oKá�ogõÝ-G�*<²�*ˆ¤Ñí¥R–Qà®@¥�^_Šûùøƒ»ç—�}‚˜í‘ÒE ò~ÒŒtêh$ÿíŠÛîúÎ$�zqÅç'J<,ÉNûIÍÔôn~½s‰%G{…�›ýQ%)0w}J‡ýHÇ[ˆz»uó;¥Tf'™ G"G…µµµáLéiáb‹HŒx0Ú0±?´7çž¼-®ï¼ú ‚ŒýYHaL€¤¶àÄ[cÄÄSqe_UÐßk@ý¬ÿ{Hy]Œ0òº0˜¸º[l>QÛà×¾˜–z…º}ç«]ñÅlÉ&ÇŠáèÀ¿ïÉ,©"ûËꃔøÞ8Ý��w癲ÄJ~ïƒHÉ«²‹ƒl¾6ýå^š‰.a“FqûÝH¹My`ký|÷G{뤿·w®miäPNN’ Ôq­JU,Þï(TEÖûŠV»Ýµ¶»íöÿÿŠ]ÁVr˜FGÆísÞoaœ¼ärr�üè©Þf¯B*G aDþóRîGe'¥ÍQyíóùPº¥ ´� çòUµ’­¿åRŠqJ«Ãó£wƒø¼h2©T}”pÔN{+}EŸ9-RŠeNªÜ{ÝXLÏTh)Í-RJ ¬TÞþ�¹>š/Ž�pHiPéÞnÍìäææûŽönu*î¤WxHé@"Å_?“Òú|iü�RRJJ‚”¾|H))}ù�RRúò!¥¤ôåCJI顔FŽ(ó@á†ý<¨Rö—¸ÙÈöâà$AAAAAAAcð0�¾­Ãûû^lÿ0a³2¿,J’à>ˆž.°”’ÌÇJèÔ“%Á¾¨¾¿W9®?Bc„V,üNHåW¹-8(ùq' …ž` {û³½gyW"­êuOÁJw”wü‹Äð§ætcÓš1¦{í‹ âî®™þ_Žö/.?œåáî7ù1À*Ö §óÇyÕÓ§ã$°è0«¼=顱¥¼6Ðôd—ëÜæD2ô)·™6Œ1ÙÇ-æobt–?ÈZnã|;åóHйEÆ (¤²‡û°*Ytx½¼3V3`î+ˆ<ç6‹.°VûÜbô7ås ïX¢¡ÔíáíYÞû¬ $‘Ò!n1(‚N«]ç>lè–R|Ü•Ñìq6‰JrM±@Ïq‹‚d�PŠ9˜öÄ㔚AîÇÀ+Ñ=¥ø4ïG.ŠÜ¦×ç©ti…[l‰Ç)Å,þa£Ü9î˦‰K)ß9•¬�Øã6{ Ö‚È zéD£”�nK¯T[‡©[ Ä¥”�üyçÔÛæ6»J1ŒYäG’=Z)æKB+Mó¦elJùÌG‘¬çvP{T ¡p\0íE§trA†Uê°åÀ–DC JQiLàš?ë1„ÙÆ‡–CtJùÀ© ©ÔL×¾¼ŸR~Þ(?ßœ`�Ôý¢Ÿ¨ŸÞç†S*æÈU"ŸÒ•¼®g£†jQ:¥ðÐi†E©”÷H£T¿šjn8f¬Ž÷7ŸRÞ'ëDOëÈÈÂ-O!çn8¥3ëéÿxàGe&D¥rßj72£v|gbTºö«ãÛ2 ›‡‡NYÉÂ)�ýZº¥|ö9Ów0ã7êñB(UÌr¸+³è0°äó(][ÝšþÁÖÂyv�·’1�þ|œ[ �Uw@l ‘´Riï7ç-ŒÑÎÇáeŸQ�î\©±³zñÍþ{ä�~¥ë Å=&áýq}_ÕRG¥Ôlûöí ±;¨’î–R=á_J™WAaÔ÷’NÙ£Õ9¢QŠäö;R*Æì—½€»Ud²[Jó#þJþå’ªð¿ï‰dÑ(õP…éë¤{rRV_®9ë9 ]Rê¤Fý•‚>Äw®{PȧŸIéq'JålÐÊ£wŒŠ„éšÒ+¥,QA­ì]x¥Š(ºb)�PªëåÉmqŸ´aLÄ]J™>Åa”hìœ@-žÇâ+¥øiv›ÂOp‹(|vâV ê ê�M]Ú5^=�J©\ ¯T~ $á'å•DÜJ™ÁS÷nE¿·'§]ˆLéŠwÛ÷øNm¥Ö‚Ô^Ž[©˜˜´oPSŒ¹ù‘Öi–ˆBýžÐq©É =e®=l‹¸•‚Îáí-½� •R-ÿ®�Rpð:m3x:­ ãUê³YtS2&³xî=*¥ât ì_Øóh9‘ÍHeçm&åÄ­wîJ9µu»Þ•Ò›=´üXj×=áùÀ¹ 6¿áyЏ•*Èá0ÊÛâg^TJEi%ì|©Sç¡x£ f¥Lã0JØWvˆH©’øÄólÛY}“á!9q+¨LÎK4t:6Éh”*yÎC¯=‰C’‚Œ[)\.Û»¿tyê‘(æ¼µDé6JEyЇd-¥cVÊ2Q²8WÌyºRp„ü˜å˜"Sm”šašY·RSEcº‚=ï#Ù#•Nû±ëEüº=6Â[8o·ÛD¡à£#v]ˆY©óÕ~ugÆ^Ðñ«ôü¯j�é¥ëþÞG¥m”Ê g^ÌJYÕH¼Û'„R›�†8Äa»Í�`6ø#Ø‹]©·Êƒé,„Òpl{m”âU‡•´?#x¡bVê¤Ò<�ªy6¥Ùv» “¨sZ)MùánqßT„v…ŽA)ˆ~Ä:XI£Ý«¯ÙÃJ�ßç�£üînQàÖ¨ÖKï‹=º¬Ï #]†=“Òåw‚µQŠ@W ó%‰÷ Ô·¬»osk•/Ù©}º®TYCo‹^ñLJÇÿ6É6JA,¢/ hæ�¨âêöæâ`ùìŸÌ_KüwÑu¥ Ïãâý‘Ñ+Ý}'Û~áÏ„÷'"ðÛçk—êv¤}y¯xê8­»¯Ô[à´%&j¥…¯"ÙV©¼FW Âlâ-´’™¾«›ÍÑa¾UN—Tוê’Þ£Ö+r¥Œ“dí”*'‡¾¬‚=TqÈë*³·s³?Âoªã¯Â(E x:@é2Þ…-ÍùÏ@Ô”ŸRT$²ß•x{&—�¶„Toßø(¨¸ô¨«– “ábóªÀ½ý™ßàñJ×”¢}.­JO¾íÊ¢S:²žÛ軨^ Ô)Õ¨�¯z‰8æ6ýÔèû­ŒÞ¬ÌT ë( ö61¸u ~©.·›SUàµ^óÀ|Pe럮ž*VN­ëVšj¹üîuMI)|o¹m¿³t›¦­¬µa›€¤ø{ª˜ùRáÙP�i„…fþh”*à>åÿOUÀ97ŽFkí:À:z>õ;ºè"Càg•4oûFÓC BÑAØ€pÕȶà ,"œE0ÀÊ‹ödZ Yaq®>à“H»_)E€Ï"uawáD¤ÌÂ%2÷l˜Mê&ä£Îbñ Uõ×µ» ^#ª"~ä�XLÈìú‹î›ÿ 3bBº�2ìÏ.þ88�-¯عuÉp/ ³èª¾Æ �¹Mνâи‹tS ` φXžˆ É´‡À  DA DÌžH�o}³�Àk‘Š&Ò³¸x%Ò.;Bi‘��Éì¬�IÄÜd€„œEÌm^Ô#€ˆé�_hÚ –lsl"û$Ì�(¨£0é܆ |W7/@E}¼°XHÙøÅ€ˆ¼ŒÈ;ùøØþ0á’È÷( Hª!ƒKͰì$qõÙ¢À `‰Ø:‰\}¦ À=¼0ÀnÂp°›Ðœ,`CÑà÷ÿ‹`g‹W\��’`CKivéÞÙBJ~—š�V'0sCß´€ÒÍâÎ.”æX�@ëzäÅ $¯¶�9‹Ê=”¦ÀKÍšœ¿fÂ,."ŸÍe�÷õ7‘÷~`Üû™#@åßÏк3ÒbƽŸll0X‘¾HŸ�²»�²õ ÙÌ=�µOÈ’ô‹Ãìñ¯5…ÀdÐ]`m¸ñß @·nð}/*{˜ù½oî�$Í`#[+:�Å`ß s°‘�²L}°x %ô6€ÕW‹#Pmv3�Ä,RP̾"#øÅ Py?\€É$Þ G]¬ ˜ø5%4â€÷ ÀbNT®p [aüRqé×X›˜ûUŽÉܸB*`ÚOdγÓQ¹eV.�’`Ùâ�a €´—7ÒÜRà�˜"™µÃ¯À„¶XÐõ°Þ1ÌcŸÑæ0ÅѸ# 4¹šÈZgÇ­®ãÉJ=PýVÅŒ¿Hßg¿_x\=°JØý€®Ó7óYï_C§ Ù€þþ5ô*ªà±²[2ÏáPýѯq2�@ÃHûÍÎ¥£S�j¿É´aU²8ûT<Ø�oôaÄ«Xëà/ãMš¶…™Á“‡TÄjáÊF\³­É gF€G΋6 fï;FFöM�®Šm6€ÔØc°PšS·ÜúÔ¿§.©Áô›ÜGå`%PBÀBàà^oì™¶®Ì…žªk]¡ =×W9+±' 3_ˆ=¹s«7ô„j6›³Øú:ëŸÅ{À“ŵÄ�ÌðÜÀmLP�c`q=‚ψví²ÿ#¼î‹kôAÓÊ«qâ(V\k@sÉKÐðóÂcDkcd$ûņ[ô¹ñ«Žž™ö×øi8®>ûþ8‡ÁÁÂtmŽ00§€�(ˆ�õÒülç’û¡0€ÇqáÒ#xަ»^‹ô Á%�Zè?ø€?*˜Ugx‹LbÌ/‰">à)ÎÃësÀB®=zôèÑ£)8¶þF.Ôö~Î}r…¼0°4¥1C 0›kl Èc^Su&Å%̤ôk@´eäS0#ndXÄöSò9Fìõ€Š�©qT±äÀì�£Øc`ù. ‡f"8>­t fªa ¦ øKV‡ø€ÌøàOV7E[׆ñ¨Ÿl ÖÊK ®cÔ/,ÃTc,|qÈQ üD›ÀbP_Τ£ƒ¯.ÁnÈ|:š‹,“dl„Õ(3àú½Ûèj£ü(+€1.*3øDØœ++j­ÛwÊÞÇ6êP@X°/j%O`Ž—¬Æ 0) ¬Më8 â-ØËÀöoß•ÿ:(¨v;3$Ë’X®OP؈#÷üâÛL@acèkà·ßw° ÂFå×¼ÊÀ|g(ÖódÀê€#t$éàF¬0\3þ–@×:Üòv`Gëó8DöE`ò€\€J]}¾Ësm@X{×Q£ezê@ç[ö8�Ì®îý5@}-wjûüÏØ}ƒl×€Â%ŽS�‡m`¾$®l4°²ob}Ù°�—ÅÀâpV*”ÛèWÚ�éÀuUð-·ë GV¦¶¸cç€ItŠíŠL®Y wZ €!x=“ä;@} �/›ce` Àí±@Ts`Á˜[`¸ôwÄK` puk{,5À€­P�€yÈ@Ô�r’…†ÔØ`¶Üœkpx 0Õmöb²M@–�¥`¼ÀÔ±8 O¼tŒ0]¢`Ð…*�£4ì{Ö"€äÀv^Ùãys•1Àv úàÝ9†’{È8Á˜ì‘ÀJ`dn®¸#2”­ Øò„ƒ$+Ѓæ9€ßF¾[N ,9M4±cìØâi cá“+†�Ôá�Ñ `|±Í¾QJœ®" ?Ã/ìc »"�Ï¥G˜ °“Ѱ@_êc>qO�¹Ìœ 0²›$ ¼_ûÇœªŒ`õðEÚøƒÏ=,#€r#NL£ïƒo°W€Àó`ÆI¢ðhÄ@%KÝòåS \·xøÏ˜Y£ŒÏ¬aæ6PÎ `LÞÎ¥.€¿ŠÓ 6]ü!`‹ú`ôø)à6Àv€)Ì�6U?H¢è@:Ð�ÿèÑ£G�=zôèÑ£G�=âø »~vª­�!IEND®B`‚pydantic-pydantic-e28e879/docs/logos/oracle_logo.png000066400000000000000000000020461526274674700226070ustar00rootroot00000000000000‰PNG  IHDRζF¹PLTEÿVW6®tRNS@æØfÎIDATxÚí—K’¤ EËpà�%¸”\.�¥X;phGØéå}h1ÍʈÞ3‘€ÇùûE!„B!„B!„B!„B!„B!„B!„ò›„Æí`z¦%¹JALš@öüØÎ•¼��})ÏA¢+A0ô Ìê µlx¥ aBrA©Ø«@Û¥¯¤í‹ Jà Ï^£]0T‚Q« r‰’ghÁãP ä*]¢D0J¹ ,p³î•`’ŠÿG» V‚ݘ\� QlUgw.H.˜åÍS­¯´ ‹�ù$ˆ¥%]+è+Á€‡<Y>z� ˆz›ÛX°ˆö˪‚PŠÑDO&ðJʨú Ÿ‚ÒÆ€Î> ¶J0k³6tÒ½ñ”öÔ‚Q³ð½I{6C€wohÇð x%ýôIR• Á‘Eׂ©xªà›fL&h*ὦ…À"Ã>Ç\¢A®›wçt¤¸[´ ¼’w8µ@„;¢[Áê‚zJ%È·?í‚îZ04‚g#R#ÐJ¶,æW‚˜�F!ú�À“.Àø#Ù ùF!Øž‚å½ ½tOAÁüCAç‚‚ËòRàÛÿp-X±J+>àåøþ¯7‚õ… /%3Fâ­`jØBÂ¡Ž‡ ½,­`°’±œ¶·‚¹ôR‚µ„õp÷ sÛ]uÔcEÞ R+ð«K,‚t'˜.-‰¹ìJ÷‚v&Ž()k cy7¯ÖBЋþA°@ðÁjÄ8®˜�eJ}°œ±¡ô2 ú²^mi¡¬¥²¦aú±Gjé¾ïCõB°Þlë�r¨äÛmÝÓ~°àäÅZ’¡Š‚íæd E9º ·‚|s6â~Šeå‚{s6¶§3¦™ê HoNgûãx"'š`¼º$èLêõ‚Qºë²˜Ç«+ŽOE+¸#‰� X¾6dY=)Å-M•� †=··´\ ¤ì¢ôX XŸ�t ËÒ‚ ðƲÐ߃šòMñtW†ã8@€¾è¬üRPßÖ!À8âXщÖ²UÂxeeÒE�VÁfY˜1õ/OÖ©1Bî3Ñ&ð,ŒšeC€QƱ¢35œ(.”qÔltJ‰à0 ­‚ÅÆî|NA€qŒ(ƒ u­ ¯­UÐW›z3Jô诲¯®ÿê �qy¹&Œlð, !ª…à âž®4у �e?;–µMßZ†9m§M5x¡t!„B!„B!„B!„B!„B!„B!„Bȇüp�ÓpWz�IEND®B`‚pydantic-pydantic-e28e879/docs/logos/palantir_logo.png000066400000000000000000000225101526274674700231520ustar00rootroot00000000000000‰PNG  IHDRæ$ÈPLTE³0ôˆÿtRNS 4H[n�”¨»ÃÌÙÝÞîô§:Zz›Ûøºš93aŽ·×÷`Do¢ùü³€U+ FðEMˆÄúÕ™^cäãþ‘ªï$ÐÏy#"ý íñ<fÍwŸõžÇÎàò/5,2*!&û˜•óÚ(µ¼-gìd½0Ñ6 CA)Óö²¸åéKŠÁ8œ Ê?ë¶æJONTRêÔPmG‚@%h–=« ¬]—ÒáßÈVX®¯’�rbeLÅâÀ¾†‰­°Ë;>tçÖQ.uq¥©_ÆlYÉ Øsv“SÜpè}±xƒ…¹1j´I�7¦{�'i¤Œk‹~\£�‡|W¡B¿„C÷pü øIDATxÚí�‰cTÕÆ6!„�(‚!1H&L„H„LBX–ÄA�(²‹"«ÜpÁ¢MK±*R«¢hÑâR Z©V¤*m¥nÕÚÚÅ.ö5“°d™IæÍ9÷~ç½y¿?@Ï÷�!sæÞsÏ‰ŠŠ ¢[´lÕºÍimÛÅ´��í×1>>Á0âã;Æuˆ�==挶§µiݪe‹htœÌt:³s—³bº&!’صÛÙ]:wÛ�J�¤žçôê�jâ’Ü»×9ç&õ@«p‡”TWŸØ¾á¦¾.iqéîŒ~´ ‡�É<ÏÓŸ#õuéßÍ= ­Ì¡YR²²âNþÉ¿ƒsrû¡:%åüvCTåþCÏèéT‡òÈKrÇzÕgÿ8qù©hŧ–[8\[ò�“ã�Öíàgd—Qº“‚ .�VéŒp Ô÷‡?ƒÝ#ÑD.cÐÙ?ñ(B;‰DŸ/"û5·ï9íG„‘”?�õúŒÏ™€ö$r()½�ï@ öMD;œyñ$tªƒ‘0¹;Ú»ãɺ�妙’[†öÈÆD».E'¸y.õ]†öɦLuÇ£“—çOC{eC¦ç„ÝסŸA…3Ð~ÙŒ™…b~ô‡HÌ,´g6bvŸbt>ÍãMŸŽöÍ&ÌÉIC'3<Š ¯@{gZäÌE'’òp®Šh\y•²þ.=ô�w5ÚC 3ßÅÞÛ©Ÿî…h­Jê`tòxX”�vÒ’,^‚N×\‹vÓrLÌ·píט¹9N)`†ò¥9õ �eו£]µ£¯G§Kí£}µe> �ú›!Ùí<&�bщRÇ�7¡ÝÏòl‹žû†FqŽ3}¢InîˆN‘jânA{,˜ùn Þú™Å›ïœ áÖ)èäèá6çX( ¹ èÌèb…Ë9hÄÕ·£Ó¢“ïMEû-�+Ñ9ÑËw¢EÙ9Vkù#ã]å< 8ÉÕ× Ó�னhߥÐÒÏ=T0d5Úy”²Ló³"‰.´÷è±�$}*Ðþ£™v7:X¦ÌAgËÚeè  Yу%2lzóo†ÄÖè,àpEܯÿ@xÝè<€(» m½&ÏGçAæ=hßå³� ýl¸íº$n‹¸±³³6¢=—ÅÊÐÑË acþð ?��¬½í·<RÑYÑǽ+ÐnK$q:/ºØòþ¶È¢ï}èÌ衳­ž}r’Ö�,�€Öïpñ¶AgG=ÎñoSØÿÐÓÉ“x—¢3¤–ûlýò�ƒâÎè©ä~9õ_r|e\Üm±Õ|?.®2^Γ¹ ³¤ŽVèî¿â¡íûœ¶¥óÖY#­x‰n1kkç-öi?]¤&ž‡Î“*~<ÿ~WÛ¥©#CÐP°mÀ··¨›ô:SjX :ÿ]ù£ ï ã²íá¬.�€n¬ÆÛrÖøLÀܧ´çµ~˜tÑ£;|%Œ›�Î?�vêv±ã¼¬ŽÈ×oÚ¡ýåÊ�‡¡óÅMÅãZ LŽñ%q†_Tš®·5Öf‹óÒ5š·â‘Ÿ(xoýÄ“:?OyÐ9ce—6ãÓsYþð¢"«PßyÁÓèœqòŒ.×.Ù­¸½ò²gïÖ¥ÅF×Ïé9¥±îÖl=Ï™Šms$x“– ö�öÐ%hyîOu(Jh‰Îƪ÷ª8]óÒÖY}4\kì±Åˆñ²ç•µ °�iN¶úÓâì0FæÕ.U¢vµN좼X…Î�'[4έìW_óDûŸo{‚ΕkÕN\� ÞÔœéSûE° :ƒ4Ö/RéΤŸMD ŒŠÚû¢ÒÂÞ™h�Ê_RéM:é¢��1}T6:¾lå±²*4敟£Õ�âU•c®�V>IêÖ~n,ÍC««‹'wŸ2©ƒ,»f$ZYP<XúfýUʾz[u–œ² €]Enݘ°_•Þhiáñš";æf ]¹ÑíªëÙ’ï†7(:&»[ð¾�×m<[× ­Ì<5À‹óEïÞ+s«¹ùîf½ß‚¿TbÄÎWѺš£{œáкÌr­’¯Ã_Y`œZÕ*”'ZìH8OEð‹ U}SÅýÇ[´,SP`Á¢™hU¡²XŃhUfh±€ß€tð½ŸJžäן`¥Áòü¯¼Ù´(3”ûø”݃:�²‹·­É,÷g7ám´¦P9TÉ-½ã­hMæÉ~²Î*=¢¿âVþkK>•<4�Û‡wÐ’B£·î—–£%…GÅËÜN @K …ùï2«Î÷ %…K¹›ÙŠýVØ,Á|àý Z…÷˜›¶ 5Ïռկג›‚y.jü!´ fá]”v.ZæÉȇÑzš£«^;ÌÏÞÄ:R Mp7D ×sªM¾-‡ƒçX?ÝÐršæ~N­ƒ²ÐrxØÌÚ½-§) 8O¿Òž@Ëáâ}ÎïÅ#B;"kø-£P¯åë¿Sìæü5(øwÑØu>ƒVÃÉAFc6Ê}&ð£LZ /]­{4Íx ˜ƒÃM[>oÖI}0ü!ŸÆ%v˜�R�¼�øÜ9Š˜õ|Ó2.ŠF‹á'“oYòp™Ýq¿c8d Z‹ Rö°ô{´–@b[0Þ2í¿æ˜ÎæP“Qñ"—:¯m&d6ä>¶ã€? ¥4¦„mX’@q\¬âòh¼¼'Rlg׈ýÁKÞÇ\.‰;&›ÏUáì”ßò@`ï�™l*­9Œë)@²M$ã×àliû%¹~äþ-D5m˜ŒŠE ©O*“¬^Ö„`’òO˜¬’5'©�¨;¦¢…¨çJ¦+ÓOÐBê2“ç®÷9´|Êd–¤‘Ÿñ|¨w¡uèa;�[kÐ:NqOi»ß¢OÀÌRÁóvj’œ+¡-,‚Š' uè¢;Ïk9¿˜x~ŠóÀÏë™Ñ2Nð9‹œ•òŽ·•Q³GKÊ¡ÏL`ÑýîÜ<Çb™�¾¹h–kî/Ð2ôò‡g d4–rhéoÉ! á“Â2Gí|´Œ^á�"¶ÕY,ËTG«ðó:‡Ñï�”PЕ÷éhQL‹!mò Ô ïsø&`±dùN×£U ˆa0nþötƒ ñS”0�cµÀj´Š¨|‚®5tòƒuç ExVÒE ²ÒdFfØ©°Òñ†Oñ�, ×ÂWÃÿ =üÏÑ)À2ƒî``øôãì»Ð@C_+\&5–þ;6¢ÁAß±¾77�ÞÙvăN}×ð§°àéçGÑþãùÙÄ/a±¡†>7m?ž©äYâP¡Eþì>‰v_‘m ŠüÏäÈqß^‚È"Ûx(ò¯©�µñ<¨ÐÉ#�WºyGjàn´÷2 �X]„‰;…·± m½ èµÔTHÜÔ°§ �—ÂcT'_ƒ„ý%5ì£hã¥@> ø $lò“°‘hã¥0šêä%ˆ¨+¨w£}—╃׷P?¶¿@Û.‡£T/_M^ƒ„:¿È6ª—‚~‰3ì["Ô[•b¦>oÆÝa „Ú ø×4–:ê¬ÚtIP;+ŠÇjy51d`‹@Æ&휡=dêd `'›DºíÔ?-h1bd/«@ž!Ú©¿¢º‹qD΄Î,¢�úg¬,£<Þi¨GqØâ2ÝO#~b{¡—õ‰E'ÍñÞKŒ÷C´áÒp ݪ9^1^Yo0€hè_5Çû4-ܹ6\N#“øNøÍñ>E ÷"´ßò .]xDs¸£háž…¶[ÓÕ½G�¸*Ú9jñ(hœÞh«hтۈ„:nIïÂêÁ•­7D‡ÇÕDK_×íý´`‡ Ý–qâÞ&­Á¿°œ«À/]Zƒ%ÞêþÑj ˆ‹ôÞ‡[ým¶DÒ<}Ck°ÏÓ‚uÚÁ@l Ó{!|-ØÅh³%Ò�æé(­Áî#Åêuú0–öÐûËŠ¶ê`#Úk™T’LMÖj íÃúÚj™üšæªÎÎð9´P#|>p0Þ ¹ÚBc¨Ä ·ùh«eB|4Kc¨ŸÒBýÚj™»ÂÎÓêßi¡þmµL¶Ð\}[c¨¥…úÚj™t¦¹úg�¡ï‚RÑVËd+ÍU�·AÄÝç7 ­–IÍÕ÷4†ú7Z¨:°Xâ�k�O-þ@ Õé È0š«¿Óê7´PKÐVËä2š«/j •¸2¼Új™TÐ\ÕÙr-TÚj™äÑ\Ý®1ÔɤH¡�– íuØg#¥m H@-•I$[ÿ¡1ÒBR¤ñh£¥O²µPc¤_8ÐÞÛýJc¤ï�"�„6Z*´eò:ÇœMŠt.Úh©ÐŠÀ«4Fz˜©á ˆ HÍÕ]Cý'-Ôåh«e2–æªÎçVßÒBÕû’Ù2ßÜÿAc¨Ä楫ÑVËd*ÍÕßk •¸,bÚj™WÕê/h¡¶D[-“Ïi®>£1Ô6´P�·¡¹“æªÎI�»i¡¶F[-“Gi®ž«1ÔÍ´Põ³° ÄVÛ;5†úsZ¨¢­– ±ÑnµÆP‰ëŽç¡­– ±ÍFç"ÖC´Pu�5µOÒ\�¨1TmeØ+h«eB›<·\g¬´}!Ú×[Xƒá$SïÐkR¬F&Úk‰¬§yº_k°?¥ëlŒ À1š§§k övZ°›ÑfKä5š§Oi v -XgZ|Ð<=[k°ÿ¢{m¶D¶Ó<í¢5Xâ±õóh³%Òžæ©Î!QQhÁŽC›-�rÚ¯@£»ÖhÇЂ5Æ í–G ¢¥SµFëI¤E{/ÚnydÑMÖzµˆîQ´ÝòøÍÑÞšÃ%®·ÐùŒÉ"´£9ª{ K޵>¯€xº®s:€b_°×é oÀ•4CµÎóóob¼YhÃ¥ñÑÐû4ÇÛ�o6Úpiü…hèWšã-#þl�6\—Ðü\¡ýÁ-qÙuâB´ã²XNÛÁh²ú-`Í'—âyˆh§Îéµ_‡B[. âs[ã€öˆÏ#F<m¹,'Úy³öˆ‰o™�4�]Ìâ9D›cWê�ùbÈhÓ%AÜaìÄCŒy2ÚtIô!šù1 f✠c£æûKÉx> šù@Ðïc6Ž¡m—CKª—÷‚&®7Ð;ÔH8/R½œŠˆ:Žtœóp‚#D+A¢¦.FÚw)‡!Îý,¥†­sljh¨õ´q$ì™Ô°w:ß5”_JuòVLÜã¨qß„¶^Ä�;†1ô/éjàÎ ±vP}LNld6Œáhï%°œø$È0| È©w؆ñ(Ú| œK¶ñLPäe´'ÕÜ…6_Äa†_† ý%ògS¾Šb±—jb;Xìב?:—岉:gÄÖ‡úFØ0*#~‹ìrÚÀµj¼�pÑßFþ<‹Nš?“-œŒ~9úw=è `ñô&[ø3`øÿ%Go<‡Nâh0?¯Ã/¸œþwè`H6pü|dü/Ó?À½?f5Ý¿— Þ¤ ÀýŠÀ#tÿþP’LPÁscgÒ¦®ûI.ÁJ ÎŒõ£sí¹0¾AŸKhM—à½�IäS`Ãø7XC&måy /£�‚ÜPa“¢Ñ"ˆ{NjˆÐΠ ðߟÔaA~z¡E`¸†Á:Ý£�S‘À #"W‰GƒÖ�0­"*ª�AÇ~èi†â`À¾@«ˆ¢Ï7«a Z…~ˆ{Bk‘0m¯l#ƒ�øChº¹’Ü ZÍ>9³9>Ê×!~6‡kÿC«¨a$ïcîL´ ½£Î„ñS\„–QË æÇµO:D’÷ ‡gÝÐ2Žó6‡˜ÈÚ$F²WËOÐ2ŽSPÉ¡&aZ‡>Z,àpl™˜i«O³|žu¯<ò1‹aˆÁ@�¡¿m¨¡3Z‡.Þd±Ë˜�ÖqŠÓYUNEëÐC ù)@ ’ÞÕ1ô¶úù8"&Fx¨�³ -¤®&ⱸÐBtÀó ÀèàA ©ËyD%NG QÏLze KÑBêQ±ŽGÕàåh%ªéñ�S•œz�G–‘�¢âŽð“¸ÑBp%Co` è&GÅPÇ‚Ÿ yZICÎbR–`ë[¡×'1Ù¤{Odó|EãPË¢õh)ꨢ΄=Añb´”Æ0<©å)Ûžx>áòý$³x΃«é‚–¢ êf¨“È|KÃñB †â×ÐRÔp×·¤€×�èǦoÅj´Ìà*ž§mÇ%Ш‰ÖÂÏêZ˜Sü­%WÌe“¸¿ -†›‰ï²™“¦{QtÈ�WHœâ.1Ý.<\ÏçÍgh1A=ˆOe;[5‰æ1Œ9A_Á½s\Ç�~Þñ ÕðQ¾†Ñ˜h5M0�ëFÀÏ.´6ʹn€ü$l@ËiŠÓ•ç ÕpÁòvê¢Õ4IÅPN­69ü�Ó“�ÂúÂuÝYK6Z>VK¤< Fy{V¹Öß,Wþ «!?S6‹í@¸†´ åù¬v[`®êX_Ãö¡p�7™×�5hA!�ÂòîíoXøL°}©N=ÆOE+ ….¼¢�ç'¢…Ë^Þ‚È0ÞC+ ‰‚ï3Ëîº -)<ŠøîjyLÄD˜æùœcúE]–M@K ‡Õw0ÛPÜ-)Tv1+7Ÿ@K2ÏûœÇâ5XçdtlGníÞlZ”9Ê}¼?‡«¹>8t>åoK,Õ"2±¿–Ú®ô¿þ®¯£E…Î qüúû E™âËØ ú$ã6dš¤5[ûç)–]‰VeŽ\~ c»%ÖÍ�ål‹9Ik´,³pÌ�nDïYhYÍÓ’ct#$>jšC#„1ÈíA kšrW_º‡ìE 3϶§bõ¸~ ZXSLûN‰èâ›ÑÂÂ�¾= ñ=Å^‰—?Ë1<«ÐÊÂbá(5nw }1šiüW#¦ ¥…ÇlöÃÐã¬p ¼)sq,Ï Ä$�ÃBã "G ã¢$´¶†Ü¤êï�´y`f(_¢Ì”â5¢†ä¤¼Ã~ô+¯UœØQ™-F‚»ZÞ \ãÕé¼ÔÒÛtnPUøÙ™‹–WK–‚“ÿ“$[àì«)v+ô¦ú÷À«h}QQÿ¨T¢�yøä(µÇ¸+¯;ÇúÏ&°þ2­ùjÿ�FÌ œ¸›Ò‹»Ä¢'u™ÆÝ×oúZŒ²ÿ2lÿnš})èìqp ßä˜`LÉÕþ|Ä“õ¸rYs×¢sÇË’Ôfø±KkÇ\æ��DÙf}B[ fãs´5�'å�Ó¡(�76ò>Òá—a öixDTRz‘5K,ý*²>™èñÌH˜|³ÒáReçýGA¿_@.²Pxó¤ìÑd›aŒë“¥èŸŽgBþ>m2†ˆn|1Ïô˵Ygw­eÿ ̿尾ìFÛ­MتþÇ`]b\#ø‚–[¨¨×'ƒ óÅO©Vý<¶êS†å—Ýû ÷sçæÙ�Ζ þ¥ÝÆjâú”ö ?䔌üXuýÁ9ŠÎ•¾E|ªYùÉ·Oô3ÙD6æÛß.QÒÙÿCgJ‡A†úé{Á×î7׎höGb^‹µoº¿¥¤»?D¾DçIåÌ#“Â`PÜ _voé¼µåWE-ªªFE-¬ªz¸è«–[[·9­íßÅ1λ“5bÛÞéä)x5l7±Õ˜ô†ÌgÛ-fW>ØñÎI�ò;tks�˜NWUT(˜�az ÍAãò »q»íÿýûÉ{í³T¾°ÑpS”#Ï“ãAgFÛ'àŸh¯%rØÆ¿ÿÁ»DÁØb9Fè¼§f~ˆeñþ�Ýd$£=—Dbgt>ôs¦‚Q‚Veœ€7Žú©džš‰:óF5ìû,Ê%ÊÇÂ3ÐÞKà‘8þ F¹í>ž|: PzFø��–AåXGt�ì7�ÂÞ€£—e¢q¢`»Š5ðfÛºûËÏé}v#„ñ÷£}—öÛÐÙÐOï[Ñ®K"z :º¹ÊÛO4òÚ2tJt²nÚoy ‹ ~ák6 Ý–H¹+�=ˆß{cæcèÜè`ÿ1´Ïr©ØnûF!oÛ¾û � ½ÑRË‘›ÑK§‡ù2[1s³#âå‘×�Γ*.·èF&žÒèT©`’Ï9ú•9£³ÅÏwÛЮZЬŽè„ñ²'7’ÞýpPàÒ9ZR1‚\Yˆ”›ô x gVF-U¯›ÑÂÝg¢}´.å�A§�ÊžÎΗ?…‚RÔ´F*}ÎÁ/• ×è4†Ë2w&Ú=[í‹G§2.ÏfUmAFÉnÁýßÌôõG§Ó, ²/ãv¡“o¿^‘~bsoßÌ=îèÐï,Õ2¶îÁ½Ì”m¾}®a|¢+‹á“ZëÀ¾ì‘Ìÿá…¹–¹)Žs�e?Íw|Mݧºò.e§–+Ä–27¾z²,q.˽ÅraFÌÉ>™ÞÒ'Éþ¶®ýs¸wŸ'õICç·iŠÓS™%ÏÎ^W÷ |™ä¡†õú+KKxÿÛ¾Ô²´1<Æ}ÉüÅW²ô•ÿ‹øCú²;›’\˜Ê{V÷/¢(Ø¿ó’r4FlטNÓô ¼¬ƒ�yʶlq‡Cäv¢ªôÆ€ÿ£´×õåÓ4݂ٓ“Á[å¥êÝC×$Å1¼Å™'µ0hkä :3jŽ×š2i§›ùRtÌ�KD|xßr1?ôánr7ùkú2jŽ‚EÍý;Ée¾™æˆþ v3×}YÍým‹“Ú]raóvÅçpƒµp»¹ý¾Ê¾£ùÿíQM 5I§Ðz¸öä>&»â™n€W…Éà>ìÛ3´óå�tåÔ!ï�¸¼÷aIÔòÔìÁ:³—“Á~Ó›”ò ÇÅz2jŽf:ønÜRÅÀ¶6÷¬Ð‘üIKrÿÓ¯þÑ·åF! .Vnrîk"÷ù�Ÿ²$WŸ=*“ÿAºoÂB~ó’r&™‹ã-y}f7ïæþÆ?ª6>û÷P«ð½“¯«ù`Z+N§iÆ ÇS�µìmõÞ×7²m�í;êïµâ¾à¯¥öšß�~Ô60¡ýí*pÿTsO�øáŸ8ÀLƒ×ü:ˆSÐ¥"Gukõë»p·$7ሥwØx„\±�L×üæ�=šŒÑëG\ãã5¿y>Ãh>æ-©q€÷šß<˜‡Bå§#5ûÒ8À~ÍoÈC¡ÎhÕ†„Æ×üað¶~åË/E‹®Ú8 èšß<€‡Bn´æS€^ó›Ç­[ý˜´äº”^ó›g…îë²vhÅ ÑÚ8 üšß¶)PtYÄÒ8»æ�4½²¢+Bbãôš¿9ÞÕ]÷')Gî®÷ðÐ×üM²BX[”èŠ0¬Æ×üÁùpö ·ÜŸÉf„\óf¸î ŽèŠÐD〘kþȨû‚3QrÕÒNÑ_f‚ê¾àH®›m�|À)­î ŽèDM4¼æ?…Ⱥ/8’+ �2¯ùk‘[÷'OrEبq@ì5¿!¿î ÎT—ÜŠ°nã€è_/¸÷-êErEx¼q@ò5¿uê¾àDï.ökï ­[¿ ·^¸ÛRu_p$W„bÙ—o§Q™¢+B�X·î ÎT×ch[­‚Åë¾àHî­ƒÐñL,—|F(�ØRö•´Òø*û´ËRg¯éAq*Â@Xm& §"l€më¾à8áIì]÷Ç©kˆ€º/8_Æç¨ß™*›H®#«î N§È¬¹-¸AWFjÝœÌܪ¼F²82*B§î Žý+Â꺯í²l:¹."DãÔ}!aӊЩûB§Ä~¡S÷™ÄVa|Î h?-HuE(÷‰¶ œº/|:ù´ï%ãÆ’[O%aéŠÐ©û8=¥­)œº��Å‚GvÁ©ûx±VEèÔ}*�ü‚»{²F{eW’rDmª „S÷©ExEëÚ‹vÈþÜ*µ"tê>]HãˆßaY¤Èª�º€˜ŠÐ©ûPˆ¨�º ¸"žs í@ă«�ºO �ŠÐ©ûD¡¹"Ô¶¦Ö!dJJµÍ#ìsê>‘Üš]©>ûNÝ'Õ¡S÷É'ÅwDUú‡†³|ÊA?J*B§î³ë¹+B§î³³ù*Âá¼›¨4ÁSV×}ì»èt±�Z:uŸÕñL¿"L,ÌÊCÇï@'ÌŠppðýrVÃtEèÔ}vc¡‰ŠÐ©ûìÉ_œS÷E6Õa3ÛA�ºÏî4Y:u_D¤"tê¾ÈaaFzZƒºo`©S÷Eõ*Â!ÙEèx´s¢"tê¾È¥êà”)«ÐQ@ù?,>=�7ùêIEND®B`‚pydantic-pydantic-e28e879/docs/logos/qualcomm_logo.png000066400000000000000000000162241526274674700231630ustar00rootroot00000000000000‰PNG  IHDRôôü/¸úPLTE2SÜ2SÜ3SÞ2SÜ/Pß2SÜ2SÜ2SÜ1Râ0Mà2SÝ2SÝ3PÞ2SÝ2RÞ2SÜ4TÝ0QÞ2SÜ1TÜ5UÜ2VÛ2TÜ-SÞ2TÜ2TÜ2SÝ1SÜ1SÝ2SÜ2SÜ1SÝ2TÜ3TÞ2SÜ1RÜ1SÜ2RÜ3TÙ/WÚ2RÝ2TÝ3QÜ3TÝ3SÞ3TÝ2SÜ2SÝ1SÜ2SÝ3RØ2RÜ1RÜ2RÜ2SÜ2TÞ2RÚ3Pß1SÛ2RÜ2SÜ3RÝ1RÛ0SÛ4RØ,Zß2RÙ1SÜ3VÝ2SÛ1SÜ3TÞ1SÜ1SÜ2SÜ1SÝ3SÞ2TÝ2TÜ2SÝ2SÜ1SÚ1TÜ2RÛ2QÛ3WÞ0SÛ2SÝ3QÛ4SÝ5Tß2TÛ4WÜ1SÛ4SÛ7\ß2SÝ*Fâ3SÜ4]Ö2QÙ2PÚ.R×3QÚ5WÛ1SÝ2NÜ6[Ù4VØ6[×.Ká$<è7NÖ+[â&>ã3é1QÞ5TÚ4WÚ1OÞ-Kà,Xá.Já+Xá4SÞ%_ê";æ5OÖ3UÜ4QÛ6XÚ:^Ù6PØ8]×(Cã)Dâ3NØ9^Ø(>å9Rã'\ä,Yá0LÚ&?å,\ç'Cã":ç)BâARê/ë(Bå'[ä3Tå eê0ë$ï/SÚ0UÞ/VÞ6OÙ6PÙ-Kà,Ià-Wá6NÖ+Yá6ZÚ4O×7[Ù%_æ%?å4O×6[×4[Öcê=Tè8NÔ6^×&;æ#:ç5YÚ3OÝ/Uß7]Ø5XÚ5NÚ4Sß.Là)Cã:aÕ2VÛ2WÙ2QØ-Ká+Zß'\ã-Zß8]ØÛtRNSäÜt€Ϧ÷ iç ûÑÑîž7 ¿Rë¯ÊÇÂŒo&ßÄÍC)¸¢’ˆ@+ªšbð[Nó¨†y/€žÍ½ÉÙ*e.^ñ»âGfgGîjåS¡=H9¸9‰œ«Æ{üâ›}›8Ëš¯k€(ߨŠÎ=‹2â·àƒ£ÄYT®çÒç÷ÝãYkœš½=du‰³¦ßn éó½™åÐ%ÍY&â¬h:÷yåjJÄ£ÛU1¾ëº�óðèö$öØŸHNãÛÒ& H>ŸÒ‹½7Éaxt;ʤ@' Á›VÊ]º´»TšqöÝ#ÉYxtZë‚û¤ëR°rý”Ô¶U�b)"Ôž†ý«Î£[7RÒ5Ÿ·©iÔï_ Z/+‘“ðè–UÞ�¾ùÈÐà ’R’„G·*MÈÒeÈÔ ¢Xâ�drݪ>^°žÔ¥¨…TÙï çàÑ-šü¬ ù(õrHPˆïî‘cðèÖÜ †Àpç¡tõžëã¥s.ë<º5˽(Ц’É+ÂO!s’Sðè–ôzF·T²$F Š`5rÝŠä–`¤%’EC÷€Ñ2•œ�G·"3ï+‘e‹Ÿ@ñÐ)?¯óèäO€B(N6TðBö¸¥C†uÝ‚! .#[r܇ìåqrÝ‚RÈ>n![j>„"#ý=yš ®—¯lþøFOÍS¶m忉dYR‹úåòÒ  +É&·Ùëô7$.\Û'CWü�ÖÑÕ«~\¢'UÊœ­cŽíZf(âª;8™¢kS¢G±Ri ) Õs¸=�*妚² o$ÙÔÚÙ«ÕÌX»J¶ï w.IÑ4ùõ²*MS¬�æFJ÷‚ô[¹:žªß-˜8ÝfôÖžüaü$�Ú»Z“©|=»AEÌ‘­&YШoíl?Ôž°�¢¨¿öB¶Ÿª¸®‘¹ÔÌ¿WeŠbš§J¶Ÿúö4^×,i�½™C¶5„Ì× ýÖ ½É\ DÔ*GFzå‚ îV¿FÆÓ"~’¾^µ=yêÜOÐñ‡…³›ò“‘Å`d\¦tOwå�ÁçÈÔЖ"">O'SE”Ã}™H¦F¿‚¬¥áò—!{Q‚líEDèñVúm�’*{´ó�HïZV¿C}óÑhåÉÖ£O»kúwßP©& TÆD4hLQÕ xt�ÌT óÍ&3 }9E&r?yEU2PŠv‰d[o¯ˆáý’Ú²h©duH§Çs?LrÔS}¿PÈjô<Ã_„ïÃÌc”oA*I‡˜‹l£(¼£0™Hí K—Ø¢`“ÈD¯b×,¤WZ€¬Å ˆýYäY2ÀÒ™ž²Ì¤Q2kæ ¢~�e°}ÐØADU=1Nîó"*a*™j•”¼dlÌ+0ž_"c;>xÁK&Jƒ%Œ!�¤êP ¡d¾¯D¯ž·èõjÕÃÞ5mG¯öLDz:�¢ÉŸ„t¸ÈL#¨¼?JÆ €Þm2˜N�õfjµ>¤“O€L8ñ§#ŸØ,^Ñ›¶C:îâ›ÑÂR$ „Âd¢”7jñ¬§R “Qô!XÂy2ÔE€ŠPN?3Aæ­Óð™˜ÙÓ1qŠÞÖ+ìE¯+3³…5�ÈP½OÐhKFÖ¿‚Н,Bmi^ã­µ'�¢í‹û)&¹ü�õ‹Oô�c�£ ½ ,`> ú¡æ÷?}î$hÝw‘‘K¯¡æíIFÆIšè�¦·ø¬wÇ ÷†ÉGËõ²Ú“ÂPôˆOôЪUÔS¡NOW±4ûÑ•‰‚%=ð*\§ÉÀÖGTíè{ˆœ>ò³=¬‰.=ÍØýrUW•¬ Á>)Ý»¹¤h"ùD¨IâÒKM ‘• ¬z �÷'H£SH™WŠSL*°×·¸D/‚J»lóF–r «VlÑkCÅ?¾•rÃtêð²§?|´�"F=�ÂëCŸ^Íé—Ä‚ÙfzÁz~“túC¯5é-x �Ç IoŒ-eÒI=탖'Êý½w=Ťß}È Ä#zž%`=ó”%V‹±D¯÷ ÿ¨…¤’œ½€G«•ë^ a|bÕŸ–0ŠtŠx¡%&�,Õ¡ó$é ¡õné  á¯•Djn°yb²ñ9dEãýâ0ª×$­JííGïÆ£*ɤ•œ¹æ› >/6‘VÓŒ`øK�FÙÇÐ[’HZ­ ÷j5iåôÑýgH§“±©u€¢ÅäØ;ÈÜqˆ¾#àƒ"c}ÒK\ù h/zA¶Á³ d$o[’u×|a£—»€EÂ7öî;(Ž*Žø�("5t)ˆ‘D@cшшFcK¢ÆØ[ìÆÞ{{ï½�½÷Þ{ùm¹~ÜQ% `›Q¼ã½ßî¾··„ŒãÈ}þÊ\nn÷îûöõ]Ì¥èò5h5t,˜=Ø�VÙ`v¨–�IÊ(0uý‡þô/ë7ôGt £uÇLº¯wt¡')¼à¼ ±Ô#×µ¶*ö´h—y`tŠ ­ô…Ö+XãsÀ\!˜dèá!7Ž÷œ&Ou£@Ètá$!·¬“ãBëµzŸ< Uz—ÜíßFz«°–ÛÌC–ß¾±Tr+˜;;¨eAMò†ÉìÐz=íÏÞ¦]ÌþÝoNóËÞ F¸N¯u±ƒÞ9Œ.d½ÏÀÄdÞGx\ZZ=À:iâCïzèÈ-!iö}2ù½£½–¶˜­Kf22îFàäÓ™îã�Ú�] ¾ É’hÿ•æAzFùoÿÌ/]úZÉ áà±0ˆ#4ÓX±Šî{+A& jÜ<ôi°NÊ�Y³bì¡×„x毂܊!Íyè› £m1Í@&�`W!�Ù ˆ”>ÖÇþög?rÇ‹‰@ÝìsóÍf©|Ô¢•ƒA_„«€©*û¸ 0hTXº6Ôy´ûõ0o�•Í`�l‰È5æÐS“ùøX­¹ÛÖ‡ÞŠŒ×_ 1óÚÝ7äRB*ïÊ¥·�Â/îj²ÜÖõëLɇg€‡øa3$ϋп§Sçn¼¨vù=K žé@ÂC÷¿ë¤ï6cý~B�¯€�~Ç¡—“ÉæÓ!¦¬l©í<w¥�`…AÙ à‡� ZÅ îr€OøXÕØø¿å¥ýÿô]‘Y Dï/2ìÛ Ÿ|;©dÏF"¬ƒüld”†1‡Þ„LÿO`g¾â8ôÒ]1åñ(»jÁÎ缈ª�Âiþî¥Ã§ªj¬kšÜ z˜–�ÄU<ôCÄ]ŒsS ­Šº59ºa¢ícvTô_ ÄA yÜH+8#_œÍsè»xè·:îmÙ‡N+£ÛBL{„yè•`'qkV>Tr oÞÇ Ò kïq ÜC ë¾Ü;Z~£�xYø§çÐìcí¾˜tv}ðëZJ æ rÏs6fûú²)æÔ4�Qy™Y©c}*ísÚ›ê4ôD2¶Ú b+Ó0JOÎ[;÷ >9k •eé(å°jÜGN …Wç[$F_T6Æ8˜û{XíþI¤_êmšÏ;å5‘Þ–‹÷‰ë� ³{ƒÔv6�)¦¯ÝA§~Æ:�¬ìíî4ôm'!³7Ä6]!+YöYè®-XO®AE¦†=ãòŽ„®ñúôXº]žœÍC˜O wš×éöáñÞÁ‡êoò$çGÍÇB¿ˆÍ‘QlîFËÖøÛ �H½‹‡>°rÌ¡§ñãlööwz+re[oòŠÁÞ……®�È®�õE7�ˆ{ý¥µÃˆ—=ì»¶E{4Ëí$V†g/ú¢=Œå>·õf²\4Õßö�ýÂÄü 2îù ³72Ê ôÿŸ}Çz é™N{3œ†¾rûŒj<â9ì" « ¢Úk­ÀŽ´N¬?Çk÷�­{)¯g±^ŒÐØîƒ,Í_Ù&¬Y¥£îWu 38:ëÙÿ ÈìK»k[Ñzßp‹ú˜CÏMvþ´á¥NCoFúRl›"Óö>Ó­»¡Žáµ¶Z Ë{yI(´¬É ëq²Çô“¤Ï c„Š)‚®˜²µe6ü@¾ÿ·Ïø*/4Ad~» $¶êãñÞQdÔ"„îÛä2¬�ßl$’½v¯ÃÐç ÷ɽý �ØÛ‡Ñíò£ÓÒ Fidj6ÿ ýPãÞÂ`ïÙÀ¼Ókºõ»��ŒZL2ÊöƪXSrE�wp!µ$ôð�Ù %³Ô‡Ü6$tºgSn¡Ý8]Ýì8 �N*¥[-=;lMä�뢑Åö’—–°÷zŒ#ú”ŒPÏîÆ!~®ûî�RÜ…ÀÍÖÙàîí:]â-Ùo ðÛÍÀU“êHëý$æ{¬wè<=€ŒL…ÞóÈMÌÈ©ì±"ÆŒ\Ðaè°�×R»fBLå*2y`ƒ.ßuÖ°é3¦¸/Ö"Ós:É”+‘†Ì™°gÈÍîJ®É”Æ;Av"3�[ÆZû(!· é>¥†åÞ© ¬þÅ$ß! •² Ý:øîšvÎZ‹NCß›,z} 1µ„iõeçd:Ë,]ÿcùà3æ›¶¯è@b 5± ¢{w r�÷gä?Ï~ðl ¶æIÜ�H›ë5Èy’@¢Ñ´òw‘‡.YN6T>dK�T›b ½’¼VvÎèq:½‰dí{Sê®*¿ ì”ñ7† Í­”F è ùùD¨×ÙÛ¦UB:!Z?F¨¡<É6�Ð…×ñab-P‹‘ñÊâÄÀtûÒÏqü_×½È =&ôô|R{ÐÐϺÒn¹=;|NC§ËJ¾“Ó!¦ú�©«xæÑå³+Td*€š×Ï·ŸÀJ>ÐþH6K Ö@믾‘h–M ¡§Þ`Ó¼­@µê|ËÐ@¤ß�Ôî –Dâ8à²Õ^rÜ—$w½ø:ª@fgAèPFæH�›ˆè8ô¬ld|û@LåÈ„3@îêßøˆ&ºN_Ô�#J¥ DÊQ�@ÖᤷYv“ÑAh0"ß©xóu𼳬,·Ù|ýÍ!¥¥7"å©ɈÀ-iéx‚†>ƒeíY “çsºèö–“2�qP‹(smîÝÔxMw]ôq[ìôÕ%`ô¯v<�~ŽùS�/(Úž`ô(ïÓlÈkÖkÀè@éÌTq?®™’lnÚÕ3xèZH,Öh袣ø¾¹ÄwÄÑ„¾}íÆÿ¶»Ñ'UƒÄAdNN5Ïož”jùýT¤èÀŒ*FåMK'²­¼«'›Ë¿´ô @¥§�vÊ&T‚À– J,£*?Ý'Ah+E¡C9Jï}²–a”w¸¤)£ÚöÛÒAËw]>Hþ|Q- Ëõò¾ítûIþô½™(0Ðf/{Ñbõ 0[Áûé®ýŒÅæ4Z<,ZPbÁVv7äÿv"ˆdHBߪ[!Åï ™Ž£ ýÀ.ä´¹K‰†Ü«™ pe??ÏŽŽ”È0Á�#Ô}Á¬NE å°`Ûqˆ-¬%ïX–¦íó) ]¼y 4t¢QÑù6ST`Èúýj‘s�šVG!ŠC‡ú�Ó“*¬MîmèY«�]ë ¥¥-¼Ë@bB˜åoÙF¦ÿ}øÇ©ƒä”¬|hæÍ‹Gû‘“¯ü¤ Z?ípÑCãx´»š2Ýß|Bj´[ÀhiZýÚX´jäL/X&™+\ÒÐsÿt#£õ&›Ú£‡ÎÌ #5}[0*LBD¥UVïbªøŽ¿ åÅDÓì:¬ÑÌóXÝl ]É“îÔ¦ü—#êñés…ëh”ªn:mf50ÕKT´þq \¤ §fÏ0ÿf~�4t8î$ÔîEå<¢”%ºêë›ó25t¶£?]í¾Äòg!áIN±§ú�З�XÃ2?€À»¹ÃèÌ™`oe¥4—^iÙ9CU,TU”r­= Žs:�Ïpň]Ÿ ÄÓw¢ÍåÚ˜4V‹úN™„É\òü?:°ßã•y‡¤’¢Œ·G7rä8Øšrüý:Ƙ1œ³ Šy.ú îíµÝï|ÃÁݽ(Ò{qŠaÔ½…p¿‘º?Xd5N’_¶w^•få ~ %.KÏq¯½dêud‚u •†ŒšR7‘k ÊIêJ™Êœ"-¤ ½P)Ä’~Ur¯98�Ë?+Ç%«Gž¯ào‘kf»ÑÈ�jÆ|SÇ)ô0peì1ñê- P•“¬yÐ*xÒ¥ �yu h“&¶uú]|óƒ\1;=,¹ä@îµAÕÉvíÒN…ÏóÈ¥^:Û³/y‚‚\Ä´ç1ß»PÓÈŠÿÔcr£EbóEfÿm“׿J¿üÎÉ ?b'",euõIËØ´= ˆ«J"/ïuˆU7•`Àx‘û½SËO‰ü5ÉhRÒ4Ï\˜ÎÈH–QZ–6Þ�ž^I{>ØXRý¸Ûú4õ²’ŒèQmßV[:òqû�½ª%‡ÔìT­'¥íTüxC.ÐÔËÀ‰g?ØyB²æriŠ‚;øø÷öÅ¥úùøöõõôêãÄuHBùùùøööõóðå´ûûùùøöõãùöõóðØ]÷óëÆ†‚ve^? üøóä¹­�•N3+̺·™lfo³y*pIDATxÚìÁ�€ ý©©fï^vÒŠ¢0¯1"oÔKê K±¨\Š­#«ˆ1ñÒqõœØakãÜhÒĤÓ>ÁŸ•_©±ÖV‹À9pÀž½×÷ ²rÖÚ{¯#D£¹2]Å`ÖÕNB®Öi7~íHöß“P]ç÷0 ÉbŠ„ºÆñ¨Ýñ®UJÊ0£ iÿ«mÿ�ÐÂJêà ÿð(Oõûh "vGŠG$žR¨'êÃé'³T�Á8Ìøz|¸FâI �LÃÀCÞ¼ Z­Ž2ÌaOÔ"Ñlíû“x ³of€jqƒ±¤wŽD3�úP#zD–m1¬aŽE{†H4I{3*`c¼‡¬6`c7é%Ñ ‹}¨ÊˆXJã9£V¾ãy�Ö†áodÖÔ%Ýš'ÑHY˜Ä>!SüŒz� “h˜,¬g¨ª�1Ø€=m2 o�ÓkXãù²Mya†á^~KÂv³½°Œ£óTV(;qGFºw»EP Ïäé1k9�{±g㔄�6Pf$»gKÊFî �ÀS™A6ñ2£VÙË¥îŠï\vó�Âìn» a‡Ð$£>b}g ¿=¾ƒÆbžz)3Z|`{â@S0— $êÓy §1 #$ê1Åp Þ®µvdæ7ÞɉL�†®à\…L ëfàh½ËRå­‹ÃÙ{r�Ö¢œçëØ"aÁ”ï&aÖTá ’0ÇïØ~­”û R eðN@Náª;V*ôiÜ«È/):P”C¸Š‚*ôk¥r³ª‚u(ÉØ)J‘/Çeyºd•‘’c÷ЏWúv%ÇîUø²$þÕ µ1 . ¾„<�y e:øNâ¯-3¥˜?w’¸“„..¥kÿmí´1*»Ln�¨9‚-Ã/+)o$´ �Gå ÑÜ43AÚ jñí~Ÿ“î^C?iÍ+° qLï–}B»ê~«‡4v¦ièÐø‰óŠ®™ƒûIW­Ú†Öö¸Õ™{lÁ?4�Ä÷Ccì'--CkEÒ‘Oßêþ“½»~�*â>gw7vcwwwwc#v vaü "ˆ��b¡ØbÌÌžÝØb‹Øþ`çÝ{êÝÛSwçó_6ÞìÞìGm\ÖÛ�9r)°O´÷ÛdH�–ãöÖý"Z�­{/"!Š`—Ú(�-{"d�å{÷�¸0Xe, D.)�â=Ι!³ûG…À"%ô�æYtØÖ•­ºïîÄ®ªœålßpB°FI™Ý?K¶¨)“ûWµÀP|Q,±Å'ö|´ÙÑ}â7Í;t�%ݾE= Н8Ø Šo¸Ø ³,éßK È0Åw¸˜/¥ ôïXr¼:Å÷üñÁxVvŸpfǿڲÈGú�8Ÿùgê�Qüˆg‚áÊ¡ø™ñ¯?Èå¸Ü '—ã°é)º TŒ–ÅOÌ/ÏXÞ}ÂA 0YM�¸ ˜Ì†§™Bat�`ÃÞ ›üÐGgA5s‘m\P~“MÉÞÝA¶ `*«û‚ºbsË3Ò[È‘±å™$UQ8( †JŒ"8ƒÿçR…£ò`¤Œ2»;ã`¤<ò½æ¢ I®>»É&ʘ_®Áº© :¬Ž pf䳌 gœ̳嚄îÂÌ6$®Jè®’ƒq–­’Ð]™x{fÉôîÆÈ·=ÖÓ"%ÅWÆ5 ÝG´Ü'¡»0°<³›hv‚3(\´NFY‹(JO™ß]±a/éo¢÷–û¤놛‚QVÓ{QîËPwaÚNn }ÔʇÂç¯ÙIEY(CÝ�?˜cë*úä†ï8 g‰Àé³hÕQN83˜c5}qéœLðŽŒ*Ïì¡oZÉM 7qÀ»è›hÏd‚waLë÷e±è;g�KêLê-¶�~ÐÍwR–õà jý¾š~ôZ‘Ô�Òú}3ý$ÚÙÁ;êÿ· µËÇ©9ªËúÙå§²¬õŸ>⓾f�<¹ÓVë7®T�iÙð=õŠ ¼-©;( ÿ� �ûçJ›3sŽª%ðGì�]ôIêÁ¥þÚ�´L–§hÓÂ% ƒ3•ÚR0”¬ëÁýÛ­ß‹eiR8G6tÅjmT ª›’± w„T…<}%GdüŽ]…Üð“Ôö¯–gâ¤Mšßcü Ǻ·%ÇÔ•¤à|C¿v®•Ð�¿O͉JŽKê�þ­òLÞTEÚábÕ& ¹¥~FRÿÑ¿t{¦x�Â!ý€ØSÉE´Lꄤþ³œð/¨“5!¢CpnP=rM]öð¸ü}qr¶ÃP©…³È]Eù^ÿY‚ð—ujÌŒ!SÛ¢Ò/Ünß×Û‰£#—�N…u:c…çÉ ëæøcÝÏî�Š1jŪgt ÓŧêŒU÷&�U:»4êËè_ZÕ?Êtʪrü‰1w‚>Iª2êŪ~(C=ð£Ý¢Z�Z|~ÕVÐ&%£nGb7ˆFá{þÌž¥]=½L[@›FŒº±:š¼PñŠ-õxÕ;*m]â¦FýØ77 yâÆm;¾ÚÕà(´ ~ôoß— ÀÇbL&oÜzt܆ÿD¨ëÑh5èŸ1X �E9{áŒñyVã‰h/h2Ý�á…¼‹]ûß"Ú z´h�ÁÇb6$ï¼|`vìêö"Úz$fŒ Vuc‘‡.½cïNƒ£(¢8€÷ìfw³€Šâ�ŠJðDÅûH´ I°Œ‰·BBTnHL@¹-En<8-�*¯ò“åg¿¼~ogöÈ&! B€p„K¼ªÜ]CŒæ`vwf§gw~Ÿ(Š£’^÷ëîÙ餎�ö‡×¸ß3} EH¤™v®�Ȳ=Y?…´!zºNg.ã QÐç^fãšj‡ Ý9Ïš·Ò#©r5åÿBä7i¹+Ôº—ÿË>— Ã ¦�A`%ü¡F]íiCs6ó ÑiÞY¹K†ý.aZxÁHÅ\_{�ýJæ[»+D-ü?6ºª¡“Ï^añûÁHÅK¹ÞN9HTc¦Çg±†2ø•LòB'F³x½}.i~!×ßž#Hä5ËôŽþ.™óôL‚ÿ@r/‹Ï=�‚1�&�MãúÛÖrÊKä7C½#Qÿ?Û\‚ÿ{îeŸ;À‘Ô—¤ñD¨Íh ˆŸ;ù§ò®ÊÝ2tqÝk,‚Qr–Ùxblk9»¯Sª©µ–wéäº@¼‹Åa<F!—�ҨϽ¾•D}Бh'ïN¤“ëÎGãX³�q¯k«�'Ð�S½"6vJ5ÉSy·"{rÝÂó.`1z ¤TKëì<¡¶Ù/“Xû´(Õïå=°ô`Ô,F—��Ð'MYÌìøîæƒDä÷�ÐCô[#ïY¾ä�ž Ãb2Œ„Ê®Hã ·ç÷ú}Dä•ÁX(û©µ�÷&£—ÐáÖWY,^B0ÒÂ/mÜÛüy¨šˆjŒ }D¿Lä½Ësú g8žÅà!c!¹¾µscLùçá EJ!±"ENû§6ñ³¨˜ï‡^à€«Xô>C0–âu¯wpcD‚ß]¿#@!B‚ §†È³«‘ŸUd#¶78j9‹ÚåCUVp#5ÕŽ.ö§\z\±¯Èµs‘4�ž˜tçáÖµ øä¨¿*Ÿ—"ðpó_-Ûxô"¡«0”EåJ=2įcˆÿŸÚ‘Çþ:²ë�;¼Ô‰7 ú|>9ÌsFè×¡ß ~:£ú—¶æß�íÙÆc£:t¸KÀw ©êj³ÇÞÏõÖéíi8–´yWý¡­û<^êY�Òz¢mgóÑüÝjyœ²T†Ž—³(¼‚@ ×l!‹½‹¦ãµÛO6î90rjËĆ�Œˆ††‰-SGîi<¹}Z×ÊQ ÔÁëú2õžQ(iN¡0ýœs ÔºèJ¦Ú‡ ô�+ËÅž öɪ]ûSí6z¥9V±w?E¡žÒ‡©u3eršdfO„ÂQ^Pï{Ûl«¶Žb§J‘Ûø„*uÊÄ'zé{4ÐC΂yÜR$AT/4㬆Õ4«L¬ :cØæDUÏëçƒhÐïš\b�ñŽ-ÑzþI¦Îb ð!装[ÓyŠÛä @ÔnÆTY.\èX'—¦øŸë–!z× 䦮 ‡¤Ì”îãS!zøSåÉsLÐGî‚Å©»W3vab¡¼ÁT$bè�¦g­JÑØmYÄ'0Un4uôÒæÒÔÜ¢[\L±Q®aj<,fè~©òËTŒ=W’!F¨¨Ûš/jê€2¹s–¤\#ïÈ!„Xáý0Æ\ÂB9¿Ù”b±—¹‚‡w¸>?NJ59'§Ôúͱ…â้©ñƒÈ©‡c_8#ubOûV’!ÍÔx„†rM.L‘Ø—Î"„øÜÏÔ-úu(áØ×¤DµÛg’qÂqL�¯…¿é ä^S•ü-Ý2W!^ø SãEáS�Äž™ìëö’I„7¼Ÿ©r½à|ûNª,š—Ä›³é™¤€p8ScÄ-ÊD›·&íSöõ„ ÄåL�WLPêí{ò“ÖnLÊÉÝ–%ù4�˜*ÄŸÖÿ�uäÊÌM¾ÉÝ–ë h¯fª¼«˜a„o߯qg1/¹Fù´r§A3· 3õ)kwP&éÜyöäÉÝVæ$´£Œgª ûÌÑKîâ¬EI2»‡ÆvR@K8‚©rÏJ0ô‘4ý›ÒEIPîö,W�šÂ7˜:ËÍÒ̵C¨!iþìMfïêìk¥€¢ùPØGÌ»w5€²Ÿ\9¹«Í<̯š"ù´¦ a*Ýdžf®VMŸ‘kÖnÞ–·’<ÚÃÑL¥‹M˜: xI*.(MO3ß­}¶‹Aã˜Zoš1u?¹>�™ç0W½Û ·„§s}\;Ì$/ƒ�ÊD®ì™fZ½;f;Ƀ ìÏT;L }‘ÜKÙÍ0ÎÛò*%/‚nð2¦Þ�`báÜÝÓ×”O} ·-]#‘Œ §óS%õ–q’73«j±¸¹ÛV8)¨€¾†°(<&y¡¾{Öºò‡ˆ½}õ ©AoÏ]™R©‡ùü$9§�mŠ|EbnÄ &ºÐI+u$I+g,ÈK&xGÞŒH䉀O³èR7çz½r ‘3{í‚ÐÞðämóŠrœ‰¼ôu–ì»4ÝB9‹]W¶ØfÜjÎfÏ›ÜOJè•¿8ˆE§?$ †ƒŸ¿æ²B»%o³/Y›í$/"$žÇ¢t·YžŸR-r£Š´¢òðÜÒM‹¸�·¯ªZW¹Âˆë^?êË¢ts�ðDär®Ìœ[¾išC÷ÑÞf/)Ÿ|®Û ½=Y´JºZo‡r8y·ó¹ÊõY #KÒuZÍÛÓ7f¬ËvºÉïC0Æ�,j�ÜÉ =�ðh/IÓç¬Ïʘºd±Có»£pêçk‹]íwýæ<½ŸA²“e/I䜕ʾôÀØU[ZZ¬ñ‡þ¦c^ÕÄÏ ¶,”$¢j0Ø{cXô.)A–«‰þ©û✙•-©X•îàဴ³FþS鎒ªÜfæ¬t…ó®“…˜/d±x0Û¹žxd_EH.çüO3'×4o˜�_T^VÕ8¶b颽?:ÒÿõãÞE…«ÊŠò4̘’=Éé¦Pa\Ãb2R)örµŸÎp;�’{úüY›w|ºeNfNΔ�œÌ9Ù;6Ïšä–ÂQGÔødѾUžXl‡T|Á:?uÃ[íó 1ŽwÏ3®/‹Í#‹ölQÉó~£Á¬ÔMêÖkXÌî‹)�ºšueÒ{~,jM`qèó•» eñü´•º ]ÌâÓßJÝ|ÎaqØÏŠÝlâ�]e¢—”X´=â%°˜Š¡³‡ú�ÅDn`ZèûNjžÀ˜ÔcL7Y©›ÇP¦‘>Y©›Å¦™á'Z:é÷2ÓΗZÅn—^Â44ø+u¸ÿ ¦ŽioÝ·tñÀëL[}/‹Øpø³Lk×€Ehx7Ó^ß;À"0ÏÍLç_k5tâêt_—5³§Œ{˜N&óçÍí¦› †[C¼�›^7²ÉmTQŽdbŽ,Ìu¸…e¿´7�Èâ*3 —£|öuýìG†¡�¥Èz‘YD÷!möÉ6Zí[Xö!LX>žÿ&ò1üÇ;ë$܇Ոlc»ÿƒTWÈŽ–´„÷‹X1÷:¤Ö{Ìÿ•2 LúØ÷¡túOÞu²½\Ç‹"ÚŸ$o¿+Üßl$_0ê«~¸MŽñ$·ÊXv明ö_T^±Ó%®“ãTœ¼ßåþ19Óô¾C *E|r®F4ë¼^H¹öœœÎÕ°£þÈ• ¾y²›wJq�Ì;ðw‘•ÈaœmŸ¡—ÄÁož{f7m}Òíõp>.Óþ¶M¿û*œp\äÑ^Ö†Þ‡%ÿwôt–mtÒ7–†�é—òl"7sNÎÅ\ÚtH+Ü´ö¥¾YSvZ”ÊúZТ±"ñSlò‘-Õ;‹µÀ‹Üv˜©Ê-tªñ)fÑ9àŸÌtÖ:£]Á"z.r~µ�ñwÂ㻬i~K²·ës©\im'{7ãÑÖ_ø‡‰íÕl7|]BfÕ2Vîõ÷÷’šggÞ·Z�o û›±wùÙÚ|×£Õ#©gÜÖæN? ¥ü7r•r=YÒÚábÑãñ}û‹kmm7ù´^É-GC�ïe¾¶‚ü­¹`!6”¦>(ìÏIEND®B`‚pydantic-pydantic-e28e879/docs/logos/revolut_logo.png000066400000000000000000000101661526274674700230440ustar00rootroot00000000000000‰PNG  IHDRæ$ÈÞPLTEÿÿÿýýýæææÖÖÖÑÑÑúúú¯¯¯___ÙÙÙkkkŒŒŒƒƒƒ¿¿¿øøøîîîüüü–––:::ÍÍÍõõõëëë777ñññqqqààà---!!!³³³èèèÝÝÝÃÃÃËËË›››ŸŸŸlll£££ âââÇÇÇóóó§§§’’’III???ªªªeeetttÐÐÐyyyPPP444···‡‡‡ZZZEEEÕÕÕ­­­½½½ŠŠŠ���iiiººº111TTT)))MMM$$$888òY£óSIDATxÚìÁ�€ ý©©`öà@ÈÿµTUUUUUUUUUUUUUUUUUUUUUUUUUUUUUص·¦´Á Œã»  �P)Š-熃µU :mýþŸ¨uÚÝœ�Aöù]ç"™ùgfßy>:×Z‡ëºÁ>1×1½½zÈ{ãÇ´éì“ßæé¤{T$øðL~»ÞÉcƒà¿Î¡I»Ïä�ôm‹àYŠ…Ú}&oꪀy@uÌ?Û8¨€9U!õTÀ×mÒNw\îj•Àì+ŸÕÀyݼkNC(n=¶UÞ5€4 þöà)¶íì€Ó¤øëvDj!€gR <ë H«=  _ uÖãh>iµGdÝ0–3ªä†Ý‡ð ú&)µOPœâ2Ë!Ƥ”ªˆÜá„M´Þ ( €¨šâ@aê°Qdù$C:é €œpI:) €NË,ýR:h €V@骸ÊràŽTR€õ™¥©¤2òYZÒž0@¬K7Ã1Ó­ûnie{�ñM;WÜ¡E"«r0¬w;ž½òÎgËv³j €HK–êaô­{òÄ/ô'öÒÜ�ªéñ¢Væz¿ý›S „®Àq+5ç`ÙLƒ‚˜©ž¨–F&€K!Š…ÅœCLKigÓZÁ¤HÍŒp@¶þÊñ¶x¤@Æà¼Æzùƒç�¥SŠgÌXòBž½³çévÖØ,€< G©ÀBIá¬øŸvŸã,š$ŒYêRsŽ‘¼tª×(Ûgë¢3ôdîÀ[ö9'P(!uKú¤?Ыçkaðª†Ôü}ó?D�²mxCÔ�ŠƒÂTc’¢Aöm€_Ò�Ê^ ¸BïNÛªf&«º2¤Ö\¡/ãŒ0øO2†ªNz²†~dx%²H@*¯.[CôiQ0pjÁY^‰ú3O*žçW #HtðV¼�¾õ&VM½C8�~uà•³’çŒ**7¯—¸�~aç šcä4ÞNë”Ñ·Ô^U¥ƒz”¨ªJÀË.nä!³ÓÉèmY1¿5�‘×_•£…tºyYªýUGÖàÍõç”ÛPÕ3 ^ŽpCckW�l7[•'$èÓŽ kϬÏÃÝ!çF¼î‰•®‘Ê“åÌ›©ýÁx̺=ÕQ"¶ÖçŒB‚dz7d"/[žÖ)uäÊ6“ ý¹ðo€_D´�Ôó½%€².†H,løÅ9æ³ÆË ¥í ¥®Ïnjá|þ¬2^¡Ì“ó½0ͽc}eh;kÝ!µh‚‹âRº¸°‚DÝ5áqùô‘uŠ®Nn˯+Ô¬\>‚îjß+ßဈ©õf˜CWZW<ÙÒ~Ý=¸8•—€-tsÎÀ:�§ÐE7`°®Ÿ†ßì'$ÆŽôJV’¥%≑Ðÿ—Þ¬"³�ר²ùŒŽÐEÏ`ͪ(½µAªœ"sBÚ¬ç€âgêiuð´,a�5�U˜¼ñx)à7Až/�=É-n?êžEa=Ig(ŲNàF#«fðêxOÈ÷Œµ($ÈM>“–� {ò0‡¬q$¢çÈY9&¿ô‹ »]sJ2â*¤e`(±�Ä“Eþ-O¤Š|Ê&?eÓð–MÚÌaÔÒ¤ƒÞ„_ĉ[ œGé™É¥jhŸ·×EÆ� À[µ$·êowM\ú… Û@´ä%`Ã(] ãÑ6øG$ª\*V/€Ž’ä7Þ~ÖÙ‚ ‚HÄT÷ñ Ô’cd\šà*oÃ{¶PK§p]_¾Ð{,˜§1‘7ÔØ·AC®ÁEgçpÂ�ždRäŸZ’O’5æE$R�–ziÁoÖ#RqÿÇ¡Lw<«NBïà�Õ‘–—®d—‰ˆHÊ;I©x¥øw�ÐRDêØÚåD®ÛÀºÇÓ’ïEä&IË�‰ïÎùbz‡p+ÀEýQ,åÍœ Õ‚ j‘bh“��{dRï 뤠ìÍm®Cv"ʺ—ö‰²éxb×ÙäH¬ÒŸ€Eú�Ü#rnÁÅ~˜ŠâœÛðÆD5^<ןT¤œ.á?1x/ŒœTXb…¦§z —á�ªY�ü—|°k»»�œ¬Ž]Ç3WU—1ùZ°TÞzò1 $½‹½Ý´�UŽƒ' /ë éw6…·ÄÀû(€¼‚˜ïH’wÈy°�‘ù´@O¶2LdUMžsMm$b;ØK¹õÒ¨Äç`‰;?RªÃd¬c."ÚÎv8CÎQæ [~×gª))Uk°&¹B¢e €@9U ÚŸ¸p¯ó“3U â`££�«»[¸ïu@Ø�Ï @fèú–¢([®ë#‘ßèdäÛÝ @æ\²tMòùó·®“ò�æ=µaÚFHTw'p�¬K ú´¯õ©IªQ·¾¸MŸï¶Æ õääsÉgþP©ëoû9wIx/û‰¯ô*žÛ.C5�ÓŸíMÎD»ö€H]|»@Y%�¯ù>Ì…Ëùþ�zL»¸ÉÑè!ÿȃTõû@d‘ÓwÔG4ÝÀ‡ItÙZ/Q×X0-Ü`,xŠT@3s$*žÇ�+Û ©³¥ßà„>�-؈|Æ'•¸×êáçøc­´¤H4lÍü@âdDÿ~ ç1¡>¥/ Z’?Ç@ç¹µ`ŽæžPDwÃÈmíì¬úcQGWÝ„jÝmé«à,‘3:…Ú°’[ÿœÈÜÏ�u îÂÚ% UB‰Æ¨r}¸Ý›”®bGês‘õ N‘ð½W¼ ÕÛ_ˆ#«L†uY©Q8š?³ÔŒÏO�wjiŽRwBÕ‘Ù\ØëÛÃ˸‘œFÔï´&¿„¬Ï €ÑÙ&í¢«Ôò.8��†èª›Ó�.§â •>Â�e-¯HFÐ/ÚË»ßî+cBȺ¤Vð/,ó†îÛ <•vCiá5B¿èêëæv ‚È9ϬG>¸Ù;Y¤¬%ºªõ�Ít/<@ÌÑ·Ž gál3Ь댿¶è×2¡½>ƒ*‚Jò7‘* €Ä ú±I%»Ý@E«¡*,ÑŸaT $ô�|°‚è_êÀGü?z†9fÇþv�xDN Ö5ýe¾Qµ ²TÌïøÕ¸>5ô¥$€ˆo7�GNêÖˆæ½KÅACyÏmÐaõП“–¿HÞ gÀ°²Û €=CÎ( ë ôªKϲÈÚ E„ëèC? à;`‘ákX³ù¼Õ@ Y%Å\ªÚñD€–²¢ +4@Ϧ Ø$`ß G xñ-@=´ùd“¶ª“BMÐH!#’m‰ zÓÍ[°YÀª¡]ÉR•ÚVQd…�¸|Bm½6h›*fÔDé=È’pª@•_PÛ, î’•­nܶ‰íjµÌè+#õœO2Õ.jêÇ“à#TbŽzR•6È$϶å¡!ûÀÈS¨´ ;oe`¼ ô´"0¸p|€¡jA¥u¼Å@U²M„(Îë(µ gÀ£ŽŸ�JwPaT²|€J–OQ!x)@-Ü,黿ˆДÉþÅ©¯ž¡›a¬l ð*@þvP€vùæ]õkE*•¿ˆ"Hˆbu€®–�&è“‘[¾QÌ�éôcQ)·aÛœPmÔEb¼È ŸÂŠ^eO�xç‹IÐ'özÇÿ“üËε®zÓEp4xZŒ{�x4#à›h[WûÓÈÓàè`ùpwS½˜,ø\v®®ÄF³åÁËr6 VÂå¦ žÙÑ|oÔ9cð]ðSÒvìosãß¶ãXð¥„å86l&é¬ù®ß®a†a†a†a†a†a†a†a†a†a†a†a†a†a†a†a†a†a†a†a†a†a†ñ7{p äÿÚªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªÒò·^a€ Ø,=“˜Áe íIEND®B`‚pydantic-pydantic-e28e879/docs/logos/robusta_logo.png000066400000000000000000000035501526274674700230220ustar00rootroot00000000000000‰PNG  IHDRk¬XT?PLTEGpL/ /K×£//////K×£KפLפLפ.Lפ/LפKפ/Lפ�¨2ðtRNSÏ àXõ1{%“沚lµËCafïPÅIDATxÚí›é–¬* …”A)Ç:ïÿ¬× D¬>«{�ºÖþ~u[d“„€øõð?¦Ýðx n,>ÔüæñgáÑtŸ'ÁØmÖo¸ñ3;?�àsÜ î†?,CWDâ{ü9åÑܪþÔÆÁÕG¬Ë"õíptÀ+˜üHráݨÃv?DüŽ ¼‡¡q'P'én& ñ†Q p4Io+€Q æ[C`”åpÑ)ãÛ Ð®÷òoS çÅåÿkê´Šìsi54ÞH€Ž)÷Â(Hû>á>{ táXßÔs Ø4ÝX;R#ì.PÜF€Ñgö:TÀÇE8D uÑüìHøï-*šü§[Æl6šð<½ÿcéè³ú™ìö£F—À›Sš áÂP(»Y0:înÞ ûˆMoM“«‹fê¤,R�JG�éyû—;à)쥲ݻ´œÝgÎz¬HñÌP§ó»Æ´pÏ=àf€–mÀgl�œ`“UWVÕ/>Ãz@Ò'$\*@LJ@—Î�šŒhQ©)­÷2pUÝ*£Ú’fG/€¨Ìdˆ&!’Ë›g¯Ñ"×Îúä[õÙX¨éBðô¦ã8’¾÷¦ô¬nÌaÅÞTŸº*"Àz�ݽE«K(i69©¼ü-}À*@ýº #@}êý1Ôû.P‘HKmd†�ØêJ+ß9/„Ô3ºG†ÀO p ƒA1SÒ|Y$:_ø¡_Ù3? TÁ¨q”±í3ªµ+’›DÙ½Ãy0©‡Sˆ`„ÜPÉé—u€¬t’SOÐ*©ÕhÆû›$è2•à7HÛÇz�9É ¥y^ÀÒ1Ͻ^tç‹"9ð! ³!À  -MhÕñ¼ÖK°™ P%!@›Ø$!^°ïǃŒï2óAFŸuª8ÊÙ$Ø3IpõLæÎÒx ªï%AUöEný'47W sà�p«o³Ã ¬H*âÞ{í·é!·)Õ.h>mŽ/I†Áí--„sƼý‡‰dà³þVi¾ÒK!äƒz­…÷Öëv®köK7gWSicƒg¶ÄåE+ª¯¤ªDX].˜—BtIÏÌ7"G×{—ýtïxQ4ÚÀõ/“þj‡€´3çËÞRr¿Ëý‡é'ÉÞ1½$½ï³ù_¼Ø•úÀO½{âê?­q‹_{=þ4Ùþghn¶_r<ËA 6¿µQî(†+è “ávf;úy@"A´�ÖÝÍþx àÑŒÇNÉ¢Ž? n¸]x’MÑnª»Î¹áñ[ÛcÞk(l^Ý,ÝÜôû™h7ìé;â;;3^}2pÿ¯§ênxd:ÿ¾šÜ€ÿnæö É€qƒ©ó?êëÉb¤Ÿ|†ï“Ê¿¨ÝÀ|=òQÔóNQ÷q�ð^ü,R Ñî•IEND®B`‚pydantic-pydantic-e28e879/docs/logos/salesforce_logo.png000066400000000000000000000155501526274674700234740ustar00rootroot00000000000000‰PNG  IHDRæ$È8PLTE¡à¡à¡à â à¡à¡á¡á¡á¡à¡á­á¡à¡à¡à¡á¢à¢á¡à¡à¡à¢á¡à¡à¡à¡à¡à¡à¡à¡à¡à¡á¡à¢à¡à¡à¡à à á¡à¡à¡à¡à¡à¡á¡àÿÿþ¾çö ¥álÉí™ÙòfÇíÎíø¨âýþþïùü÷üýúýýØñùQ¿ê¬ä¸åöÓïùaÅì:·çvÍï£áTÀê3´æ§â¨ßô�Ûò!®äóûý®áô)°åìøüˆÓðªãÜòúÉëø‚Ñï@¹èæöû£Ýó³ãõ—ÙñŒÕð]ÄìDºè.²æ}ÏïqËîê÷ûâõû$¯å’×ñYÂëßôúÄê÷H¼éL½éÁé÷ù%wŒ.tRNSeõÞ ùåKï3üD³w'Vª.=q ÒÂØÍ£™^ÉRé»”�ký‰9�„s‹­›±IDATxÚìÁ�€ ý©©f×Nt…‚(€ ¬‚ D¥q™¾ÿÿy3éNgÒQ»EÙ”{¾ ’wó–zEDDDDDDDDDDDDDDDDDDDÔ2–³™óa4×4ûC[,#?‹•Í´'ôÒ,o–/U\§í²ý‰1xIÓýJÃMôe¶…^ˆ5YÙ(FK&}¡W0Ž—¸‹»S,¡ç6ŽçøÀ tPo²ÃÃtßzFã?6ʱ˜qx:ÎÊEyô$z"fŠ’é«±Ð“ðRTààW�^NçäŒÃ7k ô S„ŠèÉ›”)4÷G?ÕÔo13–Ã,žL„;>*¤¾÷¥c%‹lüÀ�û±ÇVTQ½wÕ26�/þÌßâ&nz4‚< Õ†r¿�—¬Qß)oB·°rÔB î hbã‡hÆWèïLu‰B).| @whòZø£^†©JáxxŒs¸ÎY ^¾U$�J)åé9›QW(:ê¦9r£þÈ(¯å�é%h€º–[ f[”i8ú.HÑŒl ¿Zk(™›ðYø�c )‘õ[m)* Ž8·úŸ©¢9ó@~`%TCã�Ê—½‹&S¹j³EurΨ|¡a¶'—Y>δìSâÑ8õrÌ-ª¶â?Q†ÐM93øƒ,ºþ"lÅú_J@˜¢º"]Ö‚ýÿr<uñ;| Äh õÔX_zÞÙ¢=Zd;–/ƒµ2:z0]´‰ȧþ5SMé GE»,?c+EíÜ^mãÔµ@öÒ1½í3 44c&Ý’£…f ¡)±t‰‚V²54g$Ýáè 3k銿ì݉rª@Ð Џà®�1Mÿÿ罊V½ª$.$Aè{¾�b–¾ÓíÅBß5ÕTçBç¸C¨°:/T¯­….ˆ5T†fBE(½–�æÃ g„®h–½0ô.tÕzƒTüq=è.gÔn;ŽÓ ö�B¤ŒÇ¶Õíá*¿x~�W¾ÛU—½7§euÀ¤'t‹ƒ ÁsÏÈmarp, ™ …nr;g{RÍŒüDµ‡ö½?›ݶlàõZ•ßp£­]c¡ŸÆC6Û¤"¿YÔ�Àƈ�ÂN¼nT‘?3KŠ ,¤5ÇVÏ•ŒL.™ùHmK–ÜyîK�éÅsW27Y!W‘PÎÌÈCn:;¡ÜU·rr²�qȃ ÙÁt‘ƒ…�5&}¤Â[à²jÎkx¬Ž�UÂR(e3:IÆx '!Û¸[\Á@�d€K¸¨°ðS!;½xx€��­¦c\Tö~ôaÝÂy +ÑáÞX°Û¼�»ê Ù-ññ·ÊœiXË᪘î‡/‚ `ÝǽԄ àËÀ8°:a÷1*„/_@¹ûÂÒõ© _)dø�÷€Å5dÎ*Ž¥‡#^kÕà ÛBhõŽ“rN£´}ë™T«RÇQÉæÃRj¦€q Å"d)*š6/u;nø*L1ã#3UD/˜Ò,@Vì›L)T}~º¸è¶Ûs¨ÛSƒÇ@Ýþ±wŸKKQ€cï½;c/c=‡$„ÐK轩(MÔû¿GY²dÉÆ…ÉGžŸúA`óîÙÝ4îÏ8lçψ;l/‚‡D¶K7ƒ«ÂÛáxߺ-xw¾õ\ðî:üë¶àÙ[ø×óàqî­àYðƒÑ~v#8pØ.Ý . >lï‚;CÛñSÁOƶW‚Gw!àg÷‚'D¸ ÁùÀÃö"8pØÎŸ xØž Þœ< ?{\æN«^¬HàÇOút�Ï~^‘`׊ÝÐÿ¨.›ßÁçžúôAaŸ�¨ÁneÒhÐ{àÓÛÃ> ‚]GѨ*‚¿�¿(xóö`_H(È(ƒß½õç³÷€„Œ¬Ïàwo.>ƒÝÛOŠ ²¦à{O_Ž{€¨â–&øÞ¥s¾<¸‡|Eª?,—S*Êu𿳾\ì>Z×:dí×*ÂðÞ——í>]\+ù}égt_ðèÖ%ص}`ŠÄòhí8~Ñ�ì<=\ÃsÁ�?°ó„‘¨ÁQsÌëpvmè#±€£æ…àɱã°s»@‰øQ8 làmxó ìÁî°@" GÎyÁ½;§av€9s8zn .�»nHxôÏ I`m‰Dv'»qYpçòp¨øu¨61>QCÍB8ꟺƒe»_Ee¢vÊ‘büÐ-…Cí~¬ÑþŽÌÀBýCéÏGÂØ·å(3–(ýCâ»DˆìsåŸê·F;�šg8߬²¢­_‘é6›_Y Xb¯[K7dDŒõ;5NKi?º¥h»ë«Ãæ <8æ²ü¿GÄm4R»u`I‘Ò�ðØQê�o‘ÎI`*¿è°›õ`Ów9”PãQ̸ů&[¬áJL€Ù\…œ.¦l¹ŠŒéè3óÉ )7(µàÚ{Á…“À™EMD°)1Œ£©RÒv*%Y±˜È¶ÑÄô«º9òÈ" ܷľˆÀˆ"‘©,ã†PÙš2³ š4e\z 8÷ò 8"�#ú�VÑ(rÅ6ðUA3?[ÀúGsÓ¬…�§ Džó>ßzÜô&Hè%�ç2šR4Ð%Sh&žwî»Xý9þó)ä¢çT'hAÎØ €8DŽo30j"ß' ÈSƒ‰›9Ç @†ILÖfiä(�.Ëm§0¸rBpêÂ3p¦„|4ÿ)´"þ{´(rM� È¡…1¬$‘« ´Tä›› ΫîE~ÞèÿCA®2¸q\pèöyp¦€„ulh©/þ-â-¨Põ8òE�øŽ\‰UâÒh¥ËÀÔˆzy&y ² Zøn\t¸ü;ΈSÔ©ƒf³\ë(¨ËÒ¿‹!ÕHG£í*ÛœÖ(ã†vhPN¥eNÿH¡®_jvG¥Pu_m”‰Š>³§ªß¢ý¸1&6Є©�ñ¾Úþ¦0µ$9AJ‰Ã¥å)9 .œs¶ÿOƒCp­“…•ü8R«’É5Z}ñe71É ø¡ƒº‰È [hâó)Ñ_bf3é,í *…Qõâ]Þ…KéY ¯­2Aªó!¹zëÍEh£Å€œ.�楎𨠓2H�WJÙH¹/�Mf¥jF$_fˆºtœ»+8ðö88ÕA"%Â11Ô‹Ý-¡O,ª´?Y@ìÓ¶©ƒ.I#ÔÙ^Þµ[°);R‡ÀÈqÆX©A;ÿtZue^¾}ÕÀ �Ô ÉlÈd”œ‹ [(èåPåM'óÿóà”(Óc'Œqyjøª¡R¶dãH„-ð…uÛj*®}"Mÿ…Ñê~û Œ;6éþÏrþÇæˆ`”oÓòŽ<LGÆôÈtyêÜÁ¶kgÀ±:)pg„DÚ*b‰8“¢YLov ª¸;¢æ÷�h1fÝH éž6 @XŸPŠ÷G?ó@°éÏ‚co»NÝç>Ó¶p§H�¾Y ƒk�ñ…½•OsÔ_ò -ÞÜI…^@`€”EȰfc0�×¹dŽÝlºx\XÐfr'_E¢b€Š Ma¦�3$â"ü݉ ,ÑP8ƒ@Ä$cþ6°šžòûÒ™ö|:ð¸‘ð|'�ŠD–M¶(45f�œd––ÖæW²wgÛ:jUºv>Q΢η�–)§Î ö<W²¸s™€%ßùø�kØò•9¢*Æq-Õ4[ œ1‡™f6¶ðâ¸ËàJÑR´Me‰å=7�ƒ+šŒºÁì’*•JK _<Á­¹lé±ÓÈ4ê–ücgtN•ï�U—®³PDþJ CÀW¥9ÞVb–*,ÏCÀÉ{àÒOÜ�ú‘ÿkb ÍÔW”v¨ÜUm e5V�ˆÑ�G¥#X™"Qdû#¡Yþ.°ˆZUÉ/`c �³_§(¯xn-Ð Vþn‘�|¢¦ ËFúHLÃÛÊHÈë¶”qS|øI‰Y„loLÔ·õ¨Eÿ�Ø™'%h/ oë¸?'xûßþEFƒ›�B gÈËh‹+ad(Ü ô�P�`¶˜2 2=|ŶÂÜjÀЬ©ÛR/ÇÎýbï>»•†Á8€G�{ïí9îqÔ'J-`©Êeƒ²—\†òý¿�ÇÕ´MRŠ«å÷ÆÖ ¶ÿÛ$OÒô1l¯VÁ”OƒP”ÆÛ@Ãb4R¤¤ÚÜó^;�ÆÉR‚ ³Ÿ_²¾·3*$ ,A*�÷!ˆœŠ=TMp:lám0ÆbšÖõË,QsÞ,&Œ{|‰ßsX»`pÆ©nETHüºüû·�{_Ú’6Ú o 7ü¥<«s„öŽQº™ƒÝ]ÿJrJ½=Ò̰•~Wðlóà.$5ÒØC§m;$‰·@ Iƒ�¬b©8kðu„=r~’Ô’°-ÐÅBúà×ñ?² DyžÂ´Ô[GˆP«rNS¥l¶‡“ħ�Ý–`W4>1×ñЃ¯ «›Ÿ/KëžÂ€x�ÀB&àÓy´Éõ£° мÂjê®Iò1“ó`〺kÙ“ñ]œ$ÏA§ì9øúÛu³èŠtç$¢²—¸ñÍTŸÿÁׄkrÖ}Â3’û°Rü@Ùº ,ºuìT©ñ‘Ñד6ôºÒÖ¿@ƒî¤Ð&¿i{ÂÛhƒËça‡Š‹ƒ ¶3\µì¥„h E:ݾåGýŽkÍ7Qe•XëÜv»LÍýó™ÎÏX~ÔÅ?¾ŒäØr9ãšÍZ!�4ó[ùœÅÄÛ&XZ¬ŠÿÊ»BHMN½‡ÍøŒ*ùmF3Ôë¿ñŽè‘îZ`;bL•ˆà€ªõøUËRO†8¦iH(ÜÃrhõ·¼4EZ0…Që êæ_ÙJÊ:wCÆ U4ÓÜK¶rÌ)Ø÷ܹ™5h^`)²ÿxË:(;ôq]~ ¿yäZv\Ò>0ÞůǺÃ'3ls–:5©ù]~úÔ„{PvèZ€!@䦷Nt€;Ìv°‘›A¯*š³Ë=êñFbJ5êü�NÀL–wŒÈsââyv‚’ðÒwܳõ*NÔŠYž&xyOWÓÖìË6a7ÜÒ'+šPò�G<óuªgØÆQàl�nH@Ë:º×9zñ¾¿ÔÞRµY¶!>h­A·êuvOOK[WÙý—é"?ðQ¤”7 Två>â9w¶Gr»,€…:}Mç±b A.IÀ·ÆX5¨ƒ¤µjOã�õºd(ëŒS[Ú‚PT�¯¯¥¨ ‚»ô;·%#â$®Q€îê€áª„xj)lѩӓë/säD~OÛ2.�Ü^Ìÿ…Wí©¥É–�(¤¨)檯 e —”Á©8Ì®À¿Sˆç*D~3— ,µ•ûŽÇ–Œ,¡´u¡ÀĹÑH²~@¼ûÉÑRduù¤æ�Çe3ÍlIpZ¡>�ˆ°�Ðo‘•-_¢G3n‡­Xâì î¡w¥¢ašœW¸ƒ‹ƒ”'.îcÍÙ ÁqÞ|4Àñ@£x/Q€8f’¼^¸7—¿ƒà”V†‡ð'Šú0ñ¾ú`ñºÌð8–„{qÀó")÷Gu›W<]–i€V80l1~³Ó…•ÔçøTùt:ÝÅ6.ß*ëໞÕožBGiWA’€²šå6D±cEÍW&`_H§âð Ðh ‰˜¦‹÷ ‘,¶µ#µ`UøáN�•òØxw%›q;ØÕ^Xའ¯ëd÷Âùü tàÝükÆÞPkž¨ÐMk.íx>Ì`_ø'Ђ#®p[ÆÊpcŽëÿ/öî9Q Àð€‚FEPcÌÆ$}ÿãmÕVekÍ&Š`fø¿XVóèééþ4\ .±´`ýw¬Ë+p�T›¯;ó õR{jg9†\)"00 ¨Ñ�¢’ç<{þWH{²+<%´qú?öàìx~à[<üÿËÛf\#üÆ£EÑŸ³¦ãç•/'õšÕ˜Ô�YºúÿÙ`4þX?vä+¿µË¢îTyMJ+ ­ þÖžN†ãÜùEŽ“o“Ñþï—�IS¬ì^ü_k"ÍÐɾõ(ºk½ÞþŽá©_%ÊEsþtþîÊ-yãÖ~6õ£É”R›–\É�™û�.=ŒÔIæÊå–‘ñiŸ¥óz¢³X}òòØ•K,>lIú*W$:;z†íÂN7�ìJù)‘§ó* T_ÍóìL€³·‹Výv ÁD}§ÝwñÂý?¾™®£áTÁš! ;ýÇçoݱãÌ"Ço‡Ö{Öõ¦uy¦'4 Ø�Ãûúõõ¬6Ña)w–ÕÕ'· gXÝ’Êèâ ¦ÑðL¨cö¦Nô+?ÊP„½-©b…J õêDÀP˜•µ'ƒD¡b�.—\¾Ï\s}ÎB…$ºÜ(ky …Ùw*ÔkÒ.½¼‹|Ò8k3Сú,w8jä¥r 6ÖðVR¯g…Z=,¤N™BÍöK)Œço£iKêò® �ýJêqPЂ·“K4³ƒ«Õ/R9Ÿý¿N6R±Àzq|©Ò¢¹œtÕoIuBÎÿôãÅR‘€åŸž*jK×zSÐS%©Ö ÿúj)×»?½MVR¦5éߺl|)˂Ϳ æ±”Â�¨àhˆ~*wçgÔÿ0Èp!wõú3Ëàžm邘*~JB¹ 7ãñjòâÊ­Z3?óœTnà®» †›FK¹J°ËùøíÐ�Ò@.Ó ‚~6¹¤5a�nÞˆùXhßÝ„9)X¬g ¿ÍÚûù¤Ÿt·ãcÛaÒÍøð€ßíÁ�€ 먀)ûuÞf}g;ìIEND®B`‚pydantic-pydantic-e28e879/docs/logos/starbucks_logo.png000066400000000000000000000776121526274674700233560ustar00rootroot00000000000000‰PNG  IHDRôôü/¸úPLTE—ƶ›Å¸r®›xUóùøK—}åðí uP}ZÿÿÿxU}\g¨’8Œn%ƒd9�qsMzV8�qK˜}fª“žÉ»%„d`¥�…º©éôñÿÿÿ*†f6ŽpI™~<Žs uP~]~¶£H–} pJyU€_ÿÿÿH—}ÿÿÿ+…f°ÓÈÿÿÿÿÿÿF—|)…fÿÿÿm¬˜lE6’sœÈºÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ…¼«N™ÿÿÿÿÿÿ1‹lÿÿÿÿÿÿ*…eÿÿÿV¡‡ÿÿÿÿÿÿÿÿÿ0Žm€]gBÿÿÿÿÿÿÚêåËâÛÌãÚpJÿÿÿrL]2S&V)sNlEY-_5oHnGP"X+h@e=[/d:U(jBb8g>R$kCN a7ûýüøûúòøösN xSÜëæyVÕçàïöóüþþ Ë½ôù÷ÉàØ¶ÕÊëõòV¢‰ÀÛÑa§�Þîé¨Ï»×Í®ÓǤͿfª”¼ÚÐKš€^ÐäÝÅà×2Žp«ÑÄçòîÂÞÕ�¸¥åñì>”wöúù;’u~\Ùéã'‰i�²�ȹ–ŵ!…d|Y™Æ·ÖéäÌã۔óéóðãîéÐæàE—{}¶£o®˜7Žp'…d±ÕÊ…»¨`©’\£‹nHr±œj¬•,ŒmPœ‚@–z tOTŸ†-ˆhuQ¶ØÎ�À¯>Œm2‹lwRо¬/ƒb%~\âðìK�‚EšZ¥Ž qKï÷õ!�`‹À¯6‘tìóð²Òņ½¬{XrLk¦�P ‡§Ê¼y´ u­—\ž„i®˜D�qƒa+€^iA"{Wt´ uPÆÜÓf¤Œb¡ˆùýýO–z kD­ÎÀœÃ³n°›–À¯˜É»Œº§8‰iÎáÙ‚»©‡·¤{³Ÿv²�X›�¼ÜÓ�³Ÿ¢Ç¸xSnHóûúÈãÜŽ½«~º¨K“vD’u5…eàìæpª“’½«{¯šT˜|y·¤Øíç? HvK§ZPtRNS 'ÎÚ´àÁ§\N€>ö縚|6Ñ‘`&ïám!ñ—M.ëÝÜÊ�m\&ÂA²k`=ôÆH輪UÒ…r_ó׎L4´{«µ¡˜áåÝ*�¯ªœ}Œ½º{ïIDATxÚìÛÉ‹Að !¤I›N<«1¨ ¹ xÿ‚W'ÏT%ÕÆJO9î+¨¸€ n Š"îˆ ˆŠ^‚î'Ñ›Š n'½ &£R¸o]Õ&©ßqÃÀ—Wõ¾îL¢¤ ãrÙ’ç‹®“É$Óé‘cÇæ‡Œ;2�Nf2Žë=¯”Í�+¤VK�Ë•¼¢“Iç�R&QJ�‘3ŠÈ(…öOã’ ”’#"¥�Ogœ¢×—gÓï(©¡°[Y#¢�í\¥~�} PJ‰¬�¾ë•r6ûÿ]+îvÚ…�²=Í�2Öþ%Hç¥�bŸ�þÿTÈzn2Ï�KD ‘ù8ú­è]/[HXÿ�TÎs'“⫸£�^ ´’·3ÿ(”Š™<“B0Ð�2’å“Å’ù¨À“€B"c(¢t‚kƒ�A*Ûœ 1 ‚Q–¶oTÎsò’K1bÈq^ÆË%,�Ôˆ§çŒBì(•¼=ðv·Ó*UrÇJ.ÿƒÀÕ/1ïôÙƒ^“B_ûPGøï Gßæ®AªÏ™ÇC„è0Ña\€Í=RÃJn^„QòÃЈ6÷y޽ß#’+ŽT‰G¦¼þÜ ?òs^Ž-fÖ?*xI ˆÞ´�Ëû)D9Nðì1ÿ/².œ‚Õ}„Ü-ƒT pJ ë/‡|‚há×¶r z0�ã§ŒKX*çÒ@€.¡XNÈv¿šP&б·û®ëI5äø+HËíšÚP!Ò}ÃÖïvò‘\PÐËIË‚¦�(Šñv©û-ãŠùP€^õMdÈÙ™>h…œºö�̯ä¦B(@·i«É�uu š1.§ÚØ&çðA#Õ×ÚTkÓ‰rž±;Ý�ä2"üÚòÉ®˜À…�ý»²Æ˜ŠÅä“íó`•2icÿ6rè�\õµ6ÕÚ  mì_ßåLÁò!úÛ¦C¢=äUIsE@ÁÕ×Tk3…réØM¾­PÄ€�AÓ6Eµ6#G×>®6ñT€`ŠêkÊÞ`ãàõø7-&�oH0D½_ûž0 ùø¾DïÊ%¥ÃB¹˜|aŽjm¦ ïÙE>5Zp †ùWˆ¢Z›a\ôæÕ>fRƒ�AêýÚW4GCÖ{g|. Ä@õ5åð4ÌCžî­3>5š‹™ª¯ÅÔÚ!ÜÚã[;;ƒ¨¾gkSh0©WÎøáN( ~í)QbkmŠ 3=ñÊ1¬A!&Áç¾{kûŒrá%ºÝðLC€yª¯}×Ñšqa<ÙåÃ> ñPï×¾µª)!>¡ìæaî4„ˆ°¯©wmñÁ {oö1§bsJ“³¿>½\l„£`NvöìxÝK»OƒÁ¡˜û[1r˜¿áø±³çÎl»¸{õš'oçÎ&¿°dîÁ�ë6ᄌíèÉÃÇÎ_]è‹fyÆôþOæƒV”Oêºÿzœ„ ^¸tõü±Ã'�nÛõbóº�ç.!ÿbÙ–E+¯-=pâôÉõ­�À¥…4“¢˜è&ÓƒºÉû«‰6Ï_qÐ�é.Úç&Ÿj€~~ÐXK4Y÷¨éƒ~!ŽIt‰Ñ æ´D‹ýÕ ˜ 7Ñ †gš ̨„ïˆϦ5*` ºáù܈IM0Æ—³’ÈÝšÅ+`Lˆ“n¢:Ú� ³¿&‘Zrgú`�§$:Ù°©ƒèƒY/W‘-¿WÃX�éà5ÃÓƒL«ô?zC"³ÿzߥ Æwì?ÂŒÀÄ 2£YuÛÔ+.:´»M ¸q¨Të{H$6Wˈƒ/;ób=(}ˆG¥1ðŒDࢪçÆa£óû°QU±ñù¬äŸÝ*$;l�ž®Bœ|œuçßë¹ð!NÁøŽzNó�»;��¢Šã¾­1jâ}$^ñЉ�ÿ411þ¡þõû½÷æ¾wgö ”ÒZ)*"JQ•zP-­¨(FшG=Pñ¬¢DÄÒ€gƒˆ`-¦j#‰Z+í¶3»;ë¾Ù)Ÿ7mšùvÞ¼÷~¿}sáET›þÚ,üvuë�ê2ÍIôuˆËL�@µ¶¦Ë6»O‡êËLžIüi®YýÌDÃûË´ûë¤1�±&IÏäån*™ˆ”ÎŲܜ³c‘9€äœš˜NU¤xd æ„W± �†“Ì´ÉPl½‚j¢¥—QkÝžvb“ùðN|"æWbôÒ4’Ê`H_豘’ŒrŽõ âµ'Rˆ¢e»¿ UIý%›ÇÓœ)1Þ¦©=G‰Ûõúë[Š%kèMCüXÇÄ6õÚ) ÄQ¶%DYM�Ñ”d”wMLS¯97ž™Û÷a·GÞ1%b¨ælc»è4çI*”/}?†ÐÌ |ªä¹ÔpE¨8b]ÃÔùd®:×ß²ì�zW ÅÓÊl4l•< @óY�sõï,»q5—ïiZGÇ.u>™ÐyˆØµiÇÂg¯§‚‘Ë@Xìc e5ƒ°2®!Px|Þö7,@Ä•6Œ8°ïõCϱ ð@²àˆ-?¬òÁ• Užƒ¡Üfk‚䂵jÞ–ž»pÄ»Yà‚8gÇ*õÚ)ÜÖjÍ«•Íï_×ç2;¥RÚ0¤v ¥JQ–ûp`óVãuÅ>ˆuvM"6j¯± p" Ïã8›¶u§’riU¢ÿ€!-O—ö›363¿¼a*æ[ÆDàŹ*>+·ƒ)p”õ™}ßûûz�Q­x:)g6†´À4‹'®)ÌêÞÒˆ4ë*ð“¹&.;²‡ ø!®7 }4n{�&‹6kïah�$‹¶à%iïà|ôq�ÄuSR2/Nĸõ7Ðßœu_3 bÍÚÍ”c©�ô·Z'À•{J"Ž�UàKJþˆìKR Ä©¯Ãðf¸Œ²�{~û� pæ–¨º“l 8#ršÚß+ØA±¶ËðiðTŽ&Wý~j7p¦yÇ%ªìx]þ²`;^KR~4:ËШHà‡(lU?°8 üi^•ûæN–Mü9fÒßçßìBÛ±,ÏȾËäôÆÍXÈuZŽïÈD]hDÓëLô"ÃôµÛ<6±÷�¤¿Ç²t2ŸEsöÔy,d£¹©éUì‡?dƒK &mÀÂöò„ŸòîÂ@»ÞÆ@M’ù†±°×]"ARVÕ6dk�± Dƒ°EXLOoÚa,áM ´dÍ×wb �Œ%¦ô¾o°˜7�ˆ¤ªÖJs° BT46‹ÚCe’úͤ3'Ûôg rkÞ:”ØòG_¯ÔD…8ç$ªâJ¢Cäv,îÎ>}Ì“=7ƒ|Á\Q´ô½�Q¶)ð"éç`q÷ ¢“»"Qç ©ô\,îÚÒÜ?�ûýuôÿoMï[‚þM“Ñ/»ìÂâž`*DI¹<¹K¢DèƒXŠ\c$u)׈¾š­ÿîIb䣯ÙVf$sYÙŒ¥h• DI²"_¸�ﺢ¥/ÆR,ýI‡aò3èë#¦ˆc™\‡¾ 0,½q&–bn¢E2ÎY‰h#‹1¥Ä}ô]#¿±Nß[ø×l†ÀØvo‡oˆìßO»ßÆ’´QsΈ¶ÎzJô™É~�¥ù\7 XÚ4œèŽ òÁih�$)}–¦9 ‘#ÎÁ‰�ÄTˆ^®~*–f!sD¶'úÄçè 1Ç>ò­ºˆfö1,Q…’MÎÉÜ™J *J´dêZU-²û*–h±�£·âx]ݺI|O”ýu6Ž×á¸é…è+ü]U3ž«È–%¹‘�#{ˆSéIœµhåË­õ5ÛM'¯LÇ’SØ'âx-;`îÀñ>ûó%,ÕgvpÞ)× jÕ·>¿òn*Š˜^Tû±çV|q¢|‡ˆïoíyé±_ZS²`[Zˆ ¼¿…Oã8ƒ2!€¨Ÿà8ËW`©žH‚/ͲÙlí^ñÒ73»®EìVà_“ngî8*�¤ç�ö<®Ý¾þ%i›0‘ý–ëíõº'{Ä™’àì¤$ð!êw£�†m½²�!y-4aÍü©Äɪ¯¹C[¡�þ}’a¬¼×w8ÈŠÀ‡Â¹SòL;œ¨ÙwÑ×7C Û?Ê{™& é%eôS5Mʘžå¸ÃË3ó^®)Út †t8ûÇu¦¬_‹¾î×5àD¥\»§j/â×ùG,y)úÛ4à°¹Õ—c(פQÕRVŽÊ‚ Û4gjõÓg´µµ¶¶µÍ˜^¯™.þ„*NJSEKÿêK ¥3½?rwoÐ@ÑA¼xP“àçXžåCQ~®Ì_çŽ4>ÒV céÆ}ÔdšzåñeóV,ïœÛsë’†Óî©›ú·º{¦u5Ì¿¡gnçòÏ.{|FŠÊ‚L÷­Y‚a´ÛÑkIe`+ùÐ�’⸠rZŽÄìhëW²@5^ÄnÊ>÷ü³Û÷4Nâ®klyhû³ÏOß÷†pç¿ë5YÚ„�žäÛ'«ÊÇ'8©‘$ê§Í¼~lÍŽ¬-˜Š@´A¥³]LÌ[ª& Š)ä¬kŽ]?üö>ü8ŒfeTRÊ›žl¸“qPuÃãÆå¾n2”h¨Èv�ªÑtyFÜ2l¨ ¦ÖËgæîpˆ©Ãâ¥øÃÕ,�(¦®mYsöÞé!¯ü¼éRÊ…O ¸Q®ý[�é®Y*òš°Ç¬C‰ïu˜ÓŸ¦ÃÇ·Ø §kÙÇÜh¯޳w÷ ÜnÂñYT#w-%\�=eÊ¢g­§/èn2”EW§a`×…é%5µ9æ‚_:Ö£ ¦®ñ(1x‡˜‚³÷Øå·ãÝET RDû]‚èÇ颯Çû†)l9v1*„;6àäI)q€}ÃD…<7d1$¢b¼Tö…Ǩ5‘ÿeÉRB냓:kÅ%‡pŠÑÐs\Ç‚…&޽¨e“WõîÐŽÄ­™Â��Ó¡=§¢äaŒò§ñÂ#dÑ9Ä>ÏDFTr{)Õ¡PÅñ¶zçGWsl.Î2ñ¢©ï~åÁ¥ÓÍ”K¢õöѾ-º)òq^!›?¸²¢öHSæ�öˆˆùb²%-¤÷‰©>-±‘6xqƒ©óLŒYûă‹‘Òê}ûôl,A¯³5™Vdlð®ò÷mVc¢Dc£WßÁÎgºpl>pXß!/®iœxˆ� ”‰Ç½ãdK%�ÌŽÆ4–¸c¥ñÕ¿aðá¬&>Á¹d [Øê·¯Ób¢Dc}ã1þ�Yª©Õ�5 Qôr–(à^Åxùñ(I Ãsú— �EÉØsC:ÞØ¡ë_8õ“ðšËêz’î©%vŒ¿¤ŸSd&J4–�­…¸qÊIŸhÇCæôh2)냵©X#¥BÌ�Ë>¿®&�²¤)ä™ó* ƒÄ°ÿ,X.”ØÌȰˆs-üÓ”%HH'ˆAá¤DåÞ`šÃ/íLâÇâšÁ1^#Y$TH'’ÁOª¦Pâ0lXhrØ<…!kÏ&ÖÞ›ÌÀ!¬°-T$•–N‘K“ÌâÌ|0˜Myý>ï´áÇdå o²_J9•oëž+mŒ+K•?ií#“«¢V꫱3Ã5Š9.bD铪ŶÈð”äíjã7…¡Æža•>ÿ~|Îf´”/Õñî› a¶õI}Ûˆ6j›XŠ%?Gå}q‹ÂÝ£'#ˆ¯jRqÍ BÁ™éâü<ƒ}ˆážRôÔä‚NséOþ«­:`<¡b^Y˜ŽÃX¢ P˜Xƒ}¾b£PdñEÊ ÕÆJŸøpú›VqÍ�•…–"ãªK”E8!&èî5ÎØ¹¼¢ãO–µÿ°¯?­¦PíæG„¢ÄaΗŸ©^ëN"+ß—G<$ÕœQà1ºÍ¸ÿË^YˆBgRîš pbü¡X¨™b{ â0ǽ×�ûÕI Õv (y¶prÕkà˜Cáè3p#lTcóÂ~|îM½¸Ä¤pô-ª“ܸœ2'È‹^ynÝ�‚}'_ÑØƒÛﲨÖ‘£'ÿ¤ p´¯T˜±e{G°)ƒ*#@±ðìòþ]`§3šYXâYîØ0Æa'áDY«¸q5q|aó îRæNŒÇ\¥MHô!°aƒ *ƒdã¹j3: GÒGG¶["rÄïZ†¨+§º® ŠÉ $çðR¬”YÝǃ¥�E;�/æ˜_ΤÜü'Ì[™¬×âÎý�UL‚ ¦žn¦³L,ñŽ“#g*‚ ë‚ÀqŠ.Q"^Yo‹ìB-Ê(œÜwªÍc¡p´á-8ŠÅQQE…ÓÕƒ½³×ßX·`ÑÂ…K–mïxÔd}ïðÜ lE®Ú„È+6²¨@Ýdw;fd×µZ�“\Á´{ˆlôÞ¹¼Mß�®Öw“5Â)9fïšÍ›:^[¶dáÂE ÖÝX?»÷ E8E ññÅyÑ û…ÃWYøðu‚"fãH6fh²NàOl½r±i²¼íRwÌa£þ÷õA‘‚]´ÓÙWp�„Éÿ€Û‰kÀ+…Ë„wƒ&�% ¦Ž %KŸÓ¶æÁ¢¶Yå ×´ÿÞ±~^àh2nvŽd ‡" _«Î_3Pl…ãsº(d�ÕN nÄ4�¾ÕÇs‚ZiŸ×åí‰Óµ¤È·¼ô=W�k¸×nÂ,×\ƒ¡îï8ϹCE;’Ëg<ÿXiÕK0³W¯ïoŽ.Øè×XÝ Þ§R L�öýÒ¸x£ Gó’]š…Yíêµ·«Jh^¾o™Nв½ÝÃ“á ¹õ¿WµXÃ>Æ1@EV F¹­>�¢z巂Ƹ×úïò«žVø´AR*«ÿ¨ª$ïÛWú–”š†Fð zkÇBèß®¦ªEG�ŠeãcMX.N?q+F×{ŒòàÛ¶ßÎ<¹p�OçÔâ…þ7OŸT8~•\#f˜…­î5;;P|ó²ìò6´§·æ7”‡é´ƒ‡?ŒQ’w«Ÿ˜ðê(¯Vì>¹bb¦ÜÓVE�Ùˆ+°„+N_bµ�÷ãX4�4‚yêôñµ'œüwm´ÞÉÚãåyTW¨ø[\#–’Ân²¼ò‹E§‘lx!ï«âêɵçÝõœS§cÖ¶³Øâè³âéÕé&ËγU„Ý£•ÄŸk—“Í›8™ bJÎ�åìTyšü<Çä7Ù}ÿMlô×1ì˸6@Ö4Ù³ ƒñµ:œ’ÿŒre˾ûñ;1Õ;e &ŸV|âKBŠøåê?cœîTæå£²Žvâx´ž¬ 8¼)¢oä“3%vùtÎ*îïEðZq£·âšÑi¨MöÏo+ð¸?¿÷S�|÷…¢ž (,Ò§â¦z›ÞÍh ²_™¯£Œ¯<^4ŽIÁÙ,ð¬=0+vFK˜`�ó"~«NÎ/¿Sˆø÷ªŸê¹ÑîFçfàYc˜û �²¥ ξ@Rî$Éé¸T°—¹†c²ï¨ÃòzÇ׺ Š"÷üc GÏ�¸"«?ÎOÃ19÷qÚ>'îîR¼T7˜¼IøO×~bŠÝ§¦¦^JÜ~\CZõÂnм¹Ÿ+ ÎxrÓ�qD�¿Ã2AAWúýØ9þ®›Â§««8†T E@~R©¯�ƒ"PªÙL /Äú+O–E°Sæ©YÞäº÷À7 Ô;-HSW-{ö´àÇ`N}à÷˜û(jPI£; ]ÊoêC#ñ;ý 5Ï»8.£/lÇ•™Í¡¬áÑ ÖçD»°šSé�ø~°]æç¤¸Sc\³ *zÞ(>fǘU2õ2»ÑµåÛ¯�™òÊÞÁ>q�Â�—O7ãXÔ·^~°yMá÷_™ræÚh×ÛZÇ"äŸû¹Ç*¾‚ì륀TÝŸ;‘)ûJ‚¸$þp0�†œÑ¿�k*çø’ç([¦8L)wg'2¢º§ ²EÛâïÞ±Kdׯh±>ìãÅ|"ÇÐ4#G“Ëm9¯±j£ùòù¶bº¿o&FõhÛàêÆ@$Á‘¼—füªô– „ɇä'�Æ×{†Ž y¿¤IÚ Áì[á8Î Qj£Ü„²­ŽÈ×þ+t~–êÞÊ\Ö˜òvÆZœ<ÑÕE¹oF„`‘…‘”vœ8 i"3)ý^þ‰¦´_脌wÍüª6Ùª%7lî å²ÁV-€1·RŠÓ®�6)#åßTgLÞ³�iÝ|—áä€�ÞC<ß¿ ¢ô¿âÄéÈ»‡Ãyþ—:Æ—EY\Üè–ÑYþ+‡.BJu7Cîi;…ªýKöJY2™WLpLþ;ä}ʱu ås¤oàÄ™/ Äï…'ØH¤÷Nš4ÍIJØ1Òëœ =ÀÛ©\ú?-v¶ˆÂqyqä²r³ºã˜Êù:ž)S¬{I ŠÀ9EïX5'³®Ù’Ï}’KÑ´ gpÒL`‡–j{f›ŠÂÉ%ï¯Ý„`;ÀhúJ0ÕS™â ¿l2Åk„÷ü_•pÙWÖo\·lÙº�ë×lMüûus©¥AuR`UÎØ1wý�Á¿tcý+¼â/¥cWûuþ(ð™ô�¢MùŠ|Ýyœ4ó '‹žŽyº×H pîxí• ÿ¢™™Bª²¨…éÊeQq*]ÿËð܉{]Øc_ûëF°¢ý_¿£ø;ÿ’ü]œXëøµÖúï}{¿¯+‰0—’ìàÉ´bnÆ)¼` ú žvmÔ]MÚu[˜‰}¾‡GfÀ¦œïªÕéo©r�-Ù õ¶@m>:ß§jf":ŽÈæ‹OdÍ™º¥]öP 9ÚóžÓ !1ê½\ã=­!�fo,)èaߋМäø#¯ Þ¯/ƒ:}Øêá“S‚–èªOW"–PûF¼Â&Ù9öãC×Üuêe£°y½Þ §ûFìÑeYÈ#k7y?o_ÒqýzÇ¢ýo³îËÕ;)ÏùÅ_Þo¡³õâ½ëÝ�¦µµ¯(þÄÉ–FnZ±G‹\”UÞ"¸ûÂmÑ£0a{=Ñ{ýOMÈ�(‹þQeHbì ë%¹s :\÷Œ]õZ´úÉvQ.µÁ wAÛÀ UÌGDÛÝ{죷ó.çYÞ�Ìe ò[yM—Îö"ƒp&Ç™ŠÈ÷}t.ï2²¾ª“I¥5=¼WçW_T…°�÷‡-2z)9Vä§­Ü3ÃÕð•IæÑÇ„Žwb¸ß»’Ñõ�Zʼ*'ÿ\](þ¡�1~÷8aE«ÐH’³Ž88}åÌ~0rd0I7šÈƒÌž~´_S8¢òÅÿ»ªdNMÂxº¿ÚˆÛN« ”„µÅŸm+üÌþBH „€�896†O[°(A¹çl)´sɆ°ïÜaékbÇQ™ Zá -èëU�.,�@Øò(zŽzfg¥âÂ, ï®ÊÈG²(€žÙ¾tƒ?hv—ªp©w»«e ×|£h! ܃c¤›™¤ ‰ß.wØ AÊŒÂÉÑOmÅ p!J‚w¿,PŸöz%�¾’#Eÿ¹”— ^Tl#@ÎR«59ðwpüè¯äoܳI_\©|ŠÝy'ÆÌ´„B¿[ÞÝ=ú¡æãäèK3Ñ[ E•=‚mUFa`ŠL_Un )¯…4b ‡áƒÉ@} ÖÒ.Ÿ¿·1ÔoÜ©.Vxúò*N޹¡©ñ«rýDÑqHNŒÍu.Ÿüª7vœ×ÞÂàif3^CPl$e{X›üÊнýFË*�ÏndÝo5¶r‹½$sn»r¢ÃËÏ3lFrÓ/Ã鮓(?æÚ@4 ZÄAÝî Ø›C±‘@·oNlì©#±Ç°—¼‡gn÷Ÿï‘oŠ"Õ�ÉñØW•Æ-M ‹ĉñZ:ËT,¤˜À•õ9™lR'‰´4(6’¾0þ¢S§‰³uä­ÔéC­ÀìˆpïvðO„½aÞ‘¼ÔòüTå]œ£Ûµ»ûUw……—}×.Å€Z>ÜA±‘ˆ'k„‹LÆA¼°Ø"Šû=Ú¹ˆ|–ÃNÀI±2¬£‡ó•À•.Y!‡û_’û0$ª‰²ø’»}‹miÙ�>òŽqâq0G:|"Ê` F#IÑC(a¼‚=¯¬N_åÇ€iF*§'·¹þâ¬óü³A/½Ö‡ûž»B*J�·Ú=Ý•2!Z§7[R‚ uŽ´&Št´,ËÅå’vacX\™6X?¥ ‘˜ˆÃ0^AåÇ{šêbÜÖtÏ÷?fP8)ýÍ1µ>à%ñ ¡^zò‡;”o‡b9�®ïͺ&ÛˆažñîdKºíMYËï¦ ó{t¡¬„ ‘(9o/ú˜ÌycQT„€wÆH¦Öq Wð;ê¼6ÓÂÁ²ø‡²ó‰ÛìKÇ…»ë8)št§Oý;6¢‘�åbààæù’ :4ðƒ©�ó•–åÓ“[—›1n¾xŸ˜ðsIS¸ ÷×Í|qæõƒ¬–¢´Dë0‹'¬ÓѾöÞ}•%<òÈ ìƒ^â%Ãw7ñùfãåo¥¤� NÏ‚NA2c RMÞ‚×~XY›2{’3Üëx…9Ê}~Åœ— ÚðíŠDÝ`Ó|‹n¿ÙäMø1XŽˆ9‘(¦¾ûü¥N׳ºe°îj‡ÝWÊ!m…Ý­¹Â¯‹:ÇÚWo»óÂ}BhÞn£´æ@SsÀ,Fû]+b&‡¢�Á„O¢óµfùéÒ\z e#t»NˆßpÑ#ÖTï/–JBo7L°Ÿ–Ò^—¦{7¯öìíY³ù–¯sÛÊ>–¦—õÎÎ6œj§ï[Ó³wqoßÙ�Þó(ÃÐfßÕ‰ºŠiÈ„Â8æpBÌ2rLH§Øè\ºœ•˜·AO¡(¸Wíy£Õwë‚§r§çªñ>Q&µ¨ß¦å Žæ…ÝòÈúŽœå0CG½‘·7ÕX¶BOsmNˆ TåµXZÈøÝÀ¢CÏ´€á*a€…‹‹åÚ”õ h�÷…Yïf•éß–òhµ�ÿ¶ÿ¨¢Až‡e­ÄÀPð«°Ç<;Fœ H¨í}úgš %~5$4ÅEH¤£n8*?Ëu½‹›WœO˃i {00‹q� \±€(¹!·TÓ ®£]haÐä™3Hñ.p­¾zä 0 ÿdBäR‘íߟ–²åúõ•‰Eâ2Y ¤$'èRY<¯ò-:}¨Ÿkòð]FŒÛ}2Hû¸åÿ¢SBrx«Ta½¬ h²™Ä"sŸˆ6•syΑËMÉĪ˜–k"ƒ¢aWü'Ä�£åÁ´m;[ƒ”œñ] |I‘ s*k‘�2B¾Žw±7¨ƒ«ÌÔp˜œ�ˆñRP%_ˆ°ã˜ôØÄ݇pdÒœ mvøŽI'5+$‚ ¯C|Æšbz-®Hó6°äÈŸl›F˹.P¤@ö½ÕuHŸÌµ>®Ž‰hIñ]±L¹u°ö©>ZmX/¡$@_!Þ~–}ߊ£œ·ñ™ø)YR͉0nÅWBÕÉ84!ö(]*&b½CEC¡$Û˦Â-¹oÚAUœ‘˜F󷌸Ò!3 rSÊ)žu~¦Á,Ð¡ëøæ|´´*ýÙT!8ˆèn„¸˜¢¨qPgõ2U˜ž˜ Â ¶ùÐ~àÙqÃÕ`¢/v”`ÖÛ£—tÜèÞ´©ûú½‹§‡yOjGHš…*3läÕb¼um Ì”)Àh"û=aÂ]&ùâ;ªE[ô¶ÌìÝ`Q%Rúnxzž~¤¿|ª7:–ŒvUü1øg0&f1Oãq0âÞ‹%¶}ýfïnGLnS!ðý£Wä}l¸WÂQ iQ†Õ¥Üé2$Ã]Ž÷\cæ€@&ë¯Gj³y¸Ó)!y8·fêråUOçïŽÎýGÏOå ¢¸�UÔ³ùúè�ý–�çŠR)[ò;‹[«·|Û�öm ¦":YÈJJ¼j ¬Î÷Ýꚨð¨"¼Q<Ð&鸶™ƒ˜­8UDž$q®1`®Akf¸¼)Òž¦¬Tàv©ªÏÍl¼v|ƒÎ ¶«¿÷TüŠIä¾£íÕÛ/ëë‚’)j^5ÅöT»âûÏ$Э/€¤ê&2R*}{2+#Ý<RThYM¸ÆŒGŽ/î¬æ¨f=äaÌÕ”ê»P•—MÁ‘ YÕYrðØÅ–j}'¿ä\üZ±¿�í‹ÄÝ­N|ß6pG`mE¡Z ª DßÖ™´tÚX%ÄjÆ4)`“nn( ñ"„U4ûŽ›K‘ÇX*ŠB6LaÇ™öêÂÎþ¾•Æw(AØTŽT‰ë¼Ò/²¶„¢o9ÈWeð~kó¾ê²šò¢È#H–†Hç•õ´�®lõ½À ,é¿VÍý¾T,Uh¿*ïV©á>WäôÙ îD¡D€}0Y¡EU�”zf®ô$.Ük¸Æ,SÂ(ͳ©÷ˆ<`ÿw›(!™°ü±6\‘µ¦ÆøRêAã�¯;P9=y\d5” Üȧ�D†&ACY´i�¬„¸m-�õâ¦ø/ûTiÑT«Æ—5L8À¡qXÒwWbA:ËÍ÷ç@A!U¬O­¿²“Sx%”BŠB&©R&ùífÎgAÕ”)¾æôp�¤O(½ä²ÜÛ$]F ÂðwòJsÅðìBôýG"8k÷+¸ä±%ÅùÞ*x ÈQØ£«´WÄF<\V½ƒ®) ÄV­]a�вZIÈp")_ôs2J‘Ý}ôà ï+8nâ�üÅ-)¶?Zdy&ËÚ(Aà(‡�±wj Ulè—Áô«r([×å³7žv�“‡7Ï~T¥¯×7ô z§"ÐK€û‹G~Ò0FÆ:=åòªW7*þ¤à±å¼ïD¹h75¨PIR52æºò"ÈÍKàR_R•Xï¼cš +öŒíî^ßc³ gjïWåüLò,‹ŒÜì°’w’ôú,? îtŸß—4ŒÃÚ磾Ź;ÅnÆ7 ›æ:èoÞú«2¨€{Ö;â6aëY‡´ˆÉ¡Œ,š9Ý«†(§|0‹å&·àŠlb½BxN�/¥|ˆÕ&xï~]_ò0–IúGˆ.¸9'ï³=½Í*¨òÄP½ùÞ ¬·¤Éj­åºWáOXÄ!ä¦~1¹8µŠÝú©ÊÐاËpEæ“`»8Š2ÂÜ^*Só>¶2Öóšy ÕF¸�Wö…�i,dܬmƒ>Û³R6”þ6è÷Á!Êz%}[ÇQ£0Ó žÒÂ- &çíi•ïs»N·˜à’“:RÙX¡Z!#«æ %æIµò�ÛT»�0ˆ°»ZÃ.6=¤áùÁÑ|Ï«2BŒfN oòKÇ Ö¨Xà'[ªöGåeé1Ž÷e‚•€Ôpd©ãý7jƒ]¼j�àŠL¸FeET‚Í:WþWd‘‰ L‹ÿ‚)Ñäj¾òùÒï¾€M<$™Wíª%KŠFcí¾Kôí>1?ÉVÒ¾�oG !”Þ¢Åm÷ŸÝÂ)Ñ-=,[ç]TѶ†††á¼AŽ#|jh†Ü$½´Ø\z¾/ܵÅ"ý÷¸šžä8M–!k wêè´êZ´qÅfÏÆ!¡¨™A=dÙ†bÈ1é^÷ý©–À+r»›úŽc·»ÊO+]tÔ]7]ÊÞ?³¨µs˜»ÁOo?Ó›8CŠ”õ˜jÿÀí&†±/ˆLfBQ…-+]Ø’K]µ™ó <òjin¿½}û¥ö}8œ�ý¬Ï§½ P^ Œ|úlˆ.V�}�zV~Яš‚™�á«÷ìö¶Æ7KÑÙºäÌ}^F(÷Ýbb•±9ECSg¬š²jvïÞV8¢JQgˆÎf5^cQ úæëÞâ‹¥ÿUDìö€I΢ÂïqM€ 4† 6�m­uzÙQF1`Ãênš.ßçM�g¢ÏaÎæGôÎ~´¨3¦"MàòBx{0¹ú�âs曂 ‹†Ê£(�¯Þ �üµðvÌÖ? $ù=¦{ê°¶0sf>׈NÕÝWš>ÛÖëû'ÞNÏM…w$^ì]S›Ãý‰�úìJ66¯¢.±�b÷Dí››‰ë½{æ4Žàïu Š·®¬¦ú¬ÂÌ=¨í ´ÛH3Љµ6ü#2yt—c!œÒ�† v Ni(ñ'�¶ æBD'¼óÌ3ßWã|IçN^‹¾ ÷©Š×M5Cô_-ÚÏ�µítTwG5àšb<+×,‡<4TO¯‚2Çù:›ÆÁ�t!q³�œ+ˆ¢~ÿ™§žf¬K.pý—p(0b'ÊfJ€±ë‰s�܈àЖq§Fò™Ñng(Æ|9ø6äÁý)èØ»p |�hãmõ?ã Üþ@b(Z²Ì³�r|Õ�ûàpåÒ5ÇA1ð§Â»Ôl©ˆ ˜¨ Àœ8åt¹¶¦Ü댄óÑ®H”¶ÐR ô{�”�‡ZEqÛÅ«Jõ»�Ï>ÿÔ󖌪C7a2q’åþêKZS£[ÃJ*¯§.(:±&ÏJÂ#hïK‹üÃéî c!J—äV‡‰Ðœ^åÝ.9_xê9µºE'ìN8Ø#otÅÄ>& 1„K�:I7+vðl±Ñÿì°ò”}U|ôs ^™…kB+m‹ðF@³IqDš‡k(&*ÜêQî7I•‹þ³§~æH¨"ŒÈž¼Œ+ãWb¨lØÈ†ˆdÚt¹Ä”û]È :^§UÛîl¸æÚÌÖFªTÿaëÄugîß=EOI7ŠŠ4¿Á=ú!†èjn÷:f:ÁTæÒNVdªÑÑ~﩯çP%;sêÊH\ ¿IEÓ›‘ùAÚC“Z‚]gèOaý§á8¢É ‹çN;nÓÆ#«qdã¦qc§Ìíi� ÿôÓ)˜ÆºÀ„@˜µ<’ž{“Jt}û‰Œâƒ`*óÑ�LŽA¡@‘Ë�ÄÊbœ»·Zªvhãmt(qi†¨¦åøÜ£#éÒ·ÿ�u2Ü­.´RãEcÓ2ƒd^ÕD]Pî¦i>úOEtQS³2BRzs=5] t;VsøxS&³)$÷¦ò�>]Eü­¾Wɹk‡26ƒ¢Éýè©_•vùÝ£•ß4°·r(>Êjvšõ­l£‘E2¯0ôæÀP8V‡*�ž�e™“j±Ž¬ºþw6�”rwLXyˆg�µŒú\y¨Yßï/bá9n{Á×98p®ÅãvŸHW«ÒlŸs�ã�iÃq€w?>æZÀæå�ö�� Òº›ŽwÂúV¦ˆ½4$¶íØ($0ó»ÒûÂ|Õ¯›SÔ@ï®øp¯ã¸œ8¥pÔ>èêgžú))ÏÚÂî�o7ãØŒ7,4$ô’/5 žW@ ÓJxä¡:Ëé”bÃÑ»9úª§™:È2ƒ²Ω†Âœô]àŽû~o•‚†/6áØ´¾yH0EŸ¸ÊÍ­~–ð², "Ë–& ¦`�8s˜f¼%˜¡–0ìA\”~Çx¾^jÝÛý½$W ýV˜.ÒVR´Qb˜2fŸÛÛeSÒ ­3m°Ÿ¿ší¤ä  ЄÓ|q ?+˜‚¨YÞ"ó¹_?õM^#DOÑÚѳêáá.dúõIð»KÐÇZ2«¹�"æ¿\šFhÓ{"rÚ ïNe÷õÇ‘·žjE(«ÿj—…Ž*òâ0Ìõœ»Î…ybÔ¶<ôÒ¤ø­èȸ¾šôÊ–‚ýÓ”aGL1U^àëŒ6Êøj²z.-ψã'm‚•󽥬�Üh˜ãD ëÐ"–#D�܇žÍ!õÑ—=—É Ÿÿ½hõrZ¤çn/4›GÒ›6¸ÛŠ5+¹ 8›õ‰¹’›£ ÄèRKy /QÃ'«;‚nªó«VéVç®2Ë¿e¥žCNkwÜ(ó<²Ens� AEªÖá+•�~ SúP´úê;ØŸo#œ�â�GçÞ£Hxl  Ù™ßVmÐwN\Ëç×}ÈéPÝZÔ V¥Og²´8 ÍJíCtÉø¼Û÷ã 7)Z8rtpЇà (²2‚Gp»³8füÌã3@»xüøÖö¶á7~4ñÁIš¬Úzò~HÒfÎ[òþX†9€;õýsf 9­å´!�MãÛ&ÿtóLÛ”«h�Ù²9ýûÛf ³Ð ÐnÇ® ÛŠ–T“ò�àëÇžKL˜ý>#iþiºä ‰‡¾À£hÒbúqá*±y=Ò‰í7X †/.ôÊ1¢¾v  § ǧ9ó¦£LŠëôôµóC¼¶&w¤hÙ®ïûn`•Œê6qž¸l DIèòÌdŸ;´1œ¾?ÊuÐÏ'MÒè ¯Ê¥)·ïøç¥Ü²sÉf$›wÇ-´Òûn[sk—ôtu¯<�câ¤+¼{�!ºê\³†rË?+[,]O_Xž±š10QEɪd�wVܴЕJ©†]·ãöQŒ4r¦³2ßl—tÀ†ç ~|´z¶ÝI%Y=æ³hseÐ-Çz°¤íê»2ŸPv&èøU”u!�¤Øº’æ¤öj-‹ªl«�V„½­“ð�Õ)î€kbtcÀƾ·‰ô¢42‹Gf_4çOñRt=¥}¸møjƒž ò¯Órï²A�êˆ�=gk.àŠØ9 Ñ^Vê:ècPEPñÛãÎØÔPÜÊö€‚æó/ŠnŽOFVà–_¯ÚÆ\rç&š´ß”‘¿¶hº5<èO' :åUð8¬ç 7& úƒ"½ƒ?ÛÌÌÄ.QóÍ_¬b•¥½°Þò·£•|*ïüÚ̹ÞÔ³ô›Ñ § ïöCC¢m€×ôtx‡A‡½}¶4MóÐÒNKsk(‰z°ËèÅpgÞqÝM¼˜QÞ(Øc5s [°ÿEœ6Ó¯¬-O¨HÜ:ËðžÚs°}Šì$ úŠÇ­i%éÁ~Îhp+KFx#é¹�|ké(G5«4Y–Å@O“׊=ÿÕ¨âðˆˆÞ ¼O—éœëãÌ&ÖѤ™óJ‚¨˜Ûc籕;ä ~f˜:–fÀ.%}¢ý¼œ˜Î~ìáÎHçÁ[ï¼õ¶Iާ)É‹¥§N¿íÞ;ïyD,çЇ‚âuàãÝwšï_1h”“Õ4¦iþZ² Æ?ñãžu2}3åîŸ[X Æg”Ça]¡!Ùq'Ú#ÉdºöžÓì¿cÕŒ·gw—%‡žðºåHåî…sFÿ=O^Eݰ&ÔÞ¡O‚X¹áBa-×iX|6À1™%¯˜´£žßcÑuXôPÖ(KeÂ�Ÿæêìò¸ûèNËèd¤Ç2Xyáú`‰¡d÷�ϦLw<Õ· ]﵎´|ÇS',û¬=,B$�²�¥ê±áv°„–ûçBUe9³px KÇœù¾D$µöÖÇ­[Ðñ[/J₟ZY"øÅψb(º?ãñ”VÄ|Ÿ[tÒK 1úí�¾ï64Õôä?ñLUS.üþ—·»â7)©/r\PB[Æ¡1ò ¼t+’»Ìé^––÷çvk’hé•9ŽÛÁôʶe,+pEUR�ç¶±Ôœ6äþ¬ò8¿q,©¸&ѲٮI-Má ]! z¤ºþtâ»ôã{ï½çÒÉŸ�ø‘Ðn™®(nåxY£Ô.A‚V Ïñ‘!§±ÔŒøeÙU2E7økˆí²,õì®2òû§'ñJI1ø3™8wõ˜h©ª;‡]vûgêEw¡á]t=)îBò‹¸ù†®êèšY @G4ã’&0óð%fÈQ°@6g^qûåw8§™¥£kÎ܉�Ìl4”’ÂOzzþ°å¸?Y�±Á]ãšoh3–¥dô狺 ª,;šïfuûŶ†’¾†‚|9ícšxµÁJ”51Ñ$[÷°‰ýb=! ¤¶íà‚›Uƒ³ëkŽ,«V÷¼wºXJÆŽnº¡y\×àž«=ÇRþ´d¹ ©@Fý5Zæ[÷Ú°ù»ÂSf9ðNàñª‰{%jTiÁCl­Ð§“¼ß>KôBY–'$;Ó Ð=ÏúÂ�¿|aÊŸ5‚6=´Ru€Ò›ààg~O‘éìˆèo §ö5q5¬H Ž’¤»ð[g ûÞ\G³t<5†^S!ËŒR÷ˆÇæ38­~œÕÌ“á�!ä‹8qRÿr]ä´Ô2IÍñuCU=‡UcwîoNfUøðUèÁÉ!@ëö RYèx}¤Bs?m-òÏÐx,�Sƒ}€¿g?‰í¢˜Rá*p¤l.ú§¯M»ŽR‘¬ÏXNàþfo–ÈsÓŠ~]ÞOZœýñÞ(øþÒ°ª9˜ëáßÁi§F®4ÑTŽHŽ>߀6OTØýhðâ^†LçëGÎÍw¿Íٕ㪧ï‹U•¯'¹üå8US ½{û°ñÊLVÉT˜è`�\#£Š¨Ý$²ª³§Ã†_F…à(HÙt”¤²›óu�@‚#Ïoe ÅýÍ* Åú…¾T_’œ:}, Ó;`jxA´ÌˆñÊo(ˆ×±~q­*$:ç4;Aø¯U,O6° ø7g™õuÃ+/jb�¼s± S]s_…›úõApU4xOôN„œ: ?Ç‘ ÉÁý U‡a‚ÕF»gð@Á‰”?¾E>_Qî–{¿ˆt*ç9n�©%Y  M%ï Õ÷ŽÙ¥¢-ðõEÉ_ƒòÞ¢Ñ{™\ÅSù|/ܽÛY%K0… ’W;—‡_NŽš<þJq~Ëep”A ïe»[§‚­…ô-´ã¸9†Ø¨¾½Ø–`Èë…€¥øó{]SŒ\Ü2AB›RpY„g©ó€"_ÂúI“ˆ"GÏçÁtÚZè#i%…áùRïà÷÷®¾~@iö»9CQyÿ—=fpÛ™ª\øz“ó^‰IŽr`l » P|8/:¾޶/°~óZOÜè{v‡Áö—°ñ°Rµ {0"ê†P2Í©‹ž›Á0q=Tb‡Œkûhñ$Ñóu¾þ"öÎ<»÷)çÌ×[XìVGhí¾GÁ]SƲþ3S x/àßEsÒ [òúª˜ã×'}÷Ñsa»½Í¹^NœòÀÝ#G;û‚GÎ,ižj|Ut£ØnпŒ˜¼× ô†oíw¬jc¹ ÃK�3…Q,.’-4¨¿%/ëèëà±Õñâp‰l ý Þ®Œ4÷7lÕ S¹àìa#GÞýÀü9`µÕìAÝ‚‘ÆJ•UÍâÏ8ó ¾AoøÛªõ¦µ¥Šð=è-'cñ!”Û(µ€eÂ=¨ÛÅŠš½=…>˜f�Æ^²i)úÙg ¾vô?¼`õÈøù%¾*FÁÿ^i ØÅæSc©žÝ}óGW·u<6hÈ%A©U™›ÚÀB0mx©bB…t!ð"v¸-h ŸS§¶°l¸]ÿ^gÂØH0Pm"A‹TègQZ5±}’†vî�Ac:Ú®¾eq·í©ŸšÒ:°�e¤Üù‹’òýÒVØÖÕrœ^¶ïÏç %JX:�†ç 5ØìeÀ9} ÕqMƒ‚7#ˆËàKocaȹÚoOŸ­í?7!µešn­ÍË7R%„²óÃÒ³¹,øâ ¸Ô¡÷NŠ ÷Äóò…pml"p–›½ŒÀ›jzY¿»A ÊTøº‡ØÇׂ�oOwý¼LôRmµ ~e.Ä&nIimqà ktWÌ>õ,á߉Z±tÞ ú¡*wGõºåUL/`c ©'æv)‡ Œ1õ·‚t..î—j¾2=ÃŒøµœFf¨´*fC-…gÀwoDÛF½ÖªÌ“‰‰.ðæë&Ê•`·Ln€ræ,SžöÐ^Ð�ýû¦èP!hþc•eåšÐÕh“ïûid†ì­¸0k¹U¥†Hu‚kjôŒÍÉ ÒmiaYLžiÐmW>‡eÊhÆ4&ÒÀ!9$$¨ø@ÿìí^®¶A7©õ«½ºÌ�µf9£”¨˜ŸEK M6õÚŽYÄßãŠW¯·T”ÅP£tÔJsš0i˘‡½ Êvð*´kɨ”�.:×*²Hñùëy+é52ô8ÄNn©ÎBˆY”„ˆM2�åÁÚ�=7h¾�pž»t-áô ¢@ïZ>õjØ·�EÇ”˜–F¥´WÁ&>U€“ìÐÏ™N{>, O{�ê4ƒ”äÕVÏ_ÅêÄYU3‡'Š9œ³àï¨@³Å¹Äň f:ðÍ«EªÅÍ^Ÿ«dC‡rqü®‰e=èB¹4„nŽÈ/KjR°"Aõk8{ƒ¯g£Á±¢åÿ±¨ÉÃunª¼ôßc0ÑÕ�Ášœó«©òÄ­¸JöÓôÊ•·ˆÚi3ÈÞ¡;”îx¶;ãûŸŒâðØcxšõéˆN�vT„Ã’9øéZÌ«=ªhd–½Ͻ"E2sm3®’U-ü^_ÿ†!²Ù§ ò}8‚Ãw®ˆ‰Ï ÆCé~@Ç) xw°:r‘iK¾ô’Ãb*xluò­‡°éÑå‡ K¾¨P’+èËqöù^Ù\ðáØ4Ýár_½äÜ„‚;\ûªh=|¬ÞŒÙngDéZ*ñ€�’ÕÈ7aiÆ ²|tø>žÑc+”QHjÒ¬¾º7œUçÍŸ»‘z„¶ e#SïA 4YVW5â7bòÇ÷»ÜêëD/¾“Ç”œº®˜`¦:B8¸O8�Õ—©¢@5ºW¡›v&HWÃØâ†~¬k‘žà¶a÷~<¹m\UÛûÅLO ýOxo#.ÊÆ¦¤ªŽã7N[ôyK¤ë�yO4Ó“MPÔL‰åŽF—?KÄÛññ™tÛ"P<�Õ™;$�½Ä*¹ÐpûlÌØ*(lÙ}Ýÿø¦ì™šÕýÉ;?VS„Z8m’ï8ªêIûqç½sã�W¿ýÆŒêï�"{eh«J}Säv¸0fùcˆy?¤c\›¸ª^Wž•Qó”Ö”üZø”XΨk£(ðnm]4F�ÒPỪ1yÆo_}ã�ïœËQœÀRв´Û”-¾V,w ª=Ç^üÍcÄ†è ¦źúÑá(h¡z"zë1é*ÔK¡±Í_Ï€¡… ö*Ë –¦êü=�£8Š¥Ë ùÚ$ïƒÙ\ðÏA»^ÕŠ¤È¥&­€¶ϲà~O RR,”îhj˜,Úè °(ðµ£_O£Ö}G±üáÕå(¤Úd±h͵«C]ÂÓæ4ÑËÑýì¢@\E¯39OŠÐ’8Bþ]ü™%þé*B)§F-�Å*AUÁ! U“2T¨¿B iƒµcy> =¼ˆ/U'Žˆâµ¬®@øÆkUW¤[_pÖ‡ AÑ€éy¡‰U;ªùI'KäŽ&Yœ`ά|¿/:ŸgÀsµhƒp‡ÅÜ™ˆß[w®‘pVúqôe´Ð²?¿3NhÅ:ÿÞþ!(Å/“µÚwåhVañ|5Oî¿àaÁ �Þe²£†çòÅ&z�£ öµ"šr…1l@l £]]öÑ'w®Äq 4¶æÅ èT,¾Ÿä4éס,ž•¸ˆ¯å¾žW„lýGºHſؔÆAw´ÛSoEý¹ÙÄ)Ê%‘Xà¡ÓL }¯¦�wdÉmbÀ³jjÅ/ã·o;s@ºøÞ²ÐtrÙz©â×^{92#Å�dÉ—âp(ÝɈÉþÃ÷D¸,Wˆ`”Zqñ–¬�Ks¢<ï+FÑ=u|?AWsðb¡_noXBŒ,_í�ÀNkgD‡« ðýHtáÑи�V—†ï—þ#(ù×É4¢;Áî”RølGø,(XÍ¡Š„ÄéèB†¼yÀѰÏˈÓÏpÑ_n¹áaëë¡q–JDËÈØ''šóˆVˆî{S}µLsÂ7¯M4â3.ò•ä>‘l%Þnj˜*ÖIw¢A×±W߸°OH8îµ\ág¥EP$ºÕ!º¬B¸ùe§R®=^żةz£‰š œHÝ}8Ü«¯¾º`€ åT|»�¶Ü{†Óév9¼LýOã—µ1 ÝéúLûb¸+“Îm 8»ÒK¸gÀ0›Ð x/²ãE�nQÄN°€<ïEEjÙ·ýÚÁf÷óñ°ïÎÅ‚µßg¼3Eó2Õ�s.£ìÓÀj…¶ .”š6Û€<™ WáV!yX$}×-Ê3Æ–6|{@å³CPd營Cå½¹Dþ®¿~òâ鲊†PÚ=ýýw>™ª"ïdŠò†\5–+(‰{O›ÿy8Þ^o¦Ì,¦u 7GÊX¿¬½Ú–í6`|\mËÖ\À[¶»‰Ú-kH—7ëæ5 2çû*Ê#†½W•}Ť øë q‰¯¤ ívþ“øuÙ¿"á®”!�ÄX(ÎÀê00Ü-“œ¯QåDœ¾Ò{Q:/C¼ƒ!Z?Ñ’ª)åM¸êl¯é±¾Ò²öH8S¬4¢îâÒOTKïJ(jÉ“IŸ~'Œ‹E\†}8²‘—q¾�ºûF‡c¿w+Ã,ÑL!Å­4En¥O‘âßq3.Ûq’Üo�¾j,( ¯ƒ`±,Zªo Éëæàúˆ�0ƒ ƒò<¤Š=ž|[iOÐñ "5‹˜%¶ÇÓXëqiØT¤Wó†Wà\›^œiQþu«¤Õÿ«p{¡Vå<å6Ÿj´±â"ܽ!Fc ¶“÷¯k¡Þtˆ˜7™Ž�²˜�¹aYž¶c7äÒ°œU"tYžÍHFzÕlâfÍ!çŒô³+ÚFñží)r:Ò€ßï¬øÃ‘ 4¶âXøæXçõ q0Uüù"OY¦pŠž+kDˆWìݸTlàP¡}£¹ÆLvÑf¡�ÔØÎ™«ñºèܹJâèD«B}�@>/"/†óé¢s&ñ@øÍŸÊ”kŠŠ4£^•£?çlÉ‘¤¸ª®çÄ {´ºJ¼â jÆz},…ßÇfT¿.Yèɽ[e>¬.6 ÅYk Ãd%ûžJvJzÃ'pÒ­ŒfüwªIнBþCó{w¾òçtg?.%'i•úRß½ß!*qù›)ÿ/kÐ.±½�—ËUºÚ'³…¯?×KxÒÝÌ*¹Ï!BÕ5©«mñm¨ËT9.£ „øž×–_óñåõ¹´lfV´à|–¸‹qb<ƒÄùIJ-×ù±ý¬Wã¸Ü‰ï¦N´×úR‚‰îM.î‹|'y¡wÙ=#éjuÛâ²k{úýé‡î`•åR³­*È_M–x)QÉú¤�ÐYM!èBá[pѳ{—Ur�Æf×ufÎÝý‡"ãvKÍÊÒÐØÅA:›%Òº¨$‰Äâ.'ÿÜù_C…·qy.5ÉhŠMyŒ%2Â4x„¢Iâ´dUÖ•-ÞÉâ¯ô•¯‹v°äÂìºÎÜ‹>•�¿—Uò²ˆV�pÝF ×òªŠ¥t-�¦I•·Üôj"+Cçç{ 5‚´)—žUtû_ËV7^SìǶoæ»{ØŠnRW%¿û'Jb’ž­ôºÝŒ¾¬.G¾é˜§T…Á¬îŒå]”>úM‘ò¹KÛšXKíí�­ÂJ\8Öz~Hrßûy~(i²gšæ_"ɺnX®(ËÚÔï?|#­CJ>´¨—àTÝ –/‹ÞO¯˜u°U¢ \´E<.%8üŽ•ÐçÉÒѺô»©eY}KÑõ¿úMÓôd±0í§¸çÜô«(Y}Â=¹¾°›¯•M)X7cçLÑ$Ñ2þ9Lñ�Ý©ˆ7•á 5÷!´/YxÛL½ì¨²ç¹¹d(DI[ö9£iÿÕ’ÌrYÜœë{ŠÝ‹·ÿ ›�cø—½xË£× oÿ±Ï�ýY9,Ý18ÊBxÍŽ¦/OÀ3%¢ìÁ:B€à]ΰúD(’ƒÞ\_ì#§uµ¿}Í£—Þr™êlð¦=·ôþ¼¸[Ü—ëGwÅkU-TÍðQž4²æÞ#�� xí²AëÁTGÓÊ9¿úÐ2©ÚD\°~_Ë è¢r�¼XDGÝ&º½†³×Gvf1\òEÅ•¿FÏj,KÀÛ…§(á5Ðo¡EÖá¼ÆêÊy�Vœ¡ƒõÂø,P;“ÕÊËZÅíµY³æúÊŒæ›ÈÍ6¥|«9b ±b*,Ú >b´kc…—1¬Ž *¸|²¶ÔP$ ¦KmØx}ÕX�Œ«4ÂË9*½¿ü~Oõ…ù¿2‰ŒŠ §7úá©>ˆšÉ 3—¬$—+ÞÏê–øF&ÿÁ»¸B/8ôM]c«‘kähSRÃrêÃAY$ù²6X»s¿„ì}Ð ŒU!ƒ ÖN8°ÀäœÃ00Ñû9ÕoøRhGÀ‡YmàäG¨Tz>Ó‹ä¹Ñ=6"¯§È?6»2Zôö *€.ŠhµÒª)´ý[‘¼ê ®&fˆ¶ ädBªp¤‡Î~ù’¨!<Èé§GC*Êå\{(« CJe�ŒÝÀáÔ(ŽÂé—XÀª™µ�uWp:§¡¿½SýUÌÅ e3ÕU(\‚@’ï·¹Ü,{@“k¹“²¦à?„#’�ÁDO$Êi2Nâ!u¯=�oùƒ½ó’¢ˆÂø( ¥–Ô²,ËPŠZ–9”9—Z5=a'íÌÎÌf= ’„#Š Q̨  "bFQËœsŽ˜1C•ÞçÛ×óvvnnî�ß–ÇÝîôôëׯ_ß …ê·ÖŠù>,PÑ  ƒò9©r‚Í šb¢èc� {’Œò‘(¬»�·�žx¹ÅœP°U±¢gf°¸<¡9!NjVtº+Äå¨�=*)V¸˜ÅçµÆÜFΨ5ê¦éʪëR—›ë"MXb0‹CWÑJK)¥x¨<Ʀ¿ÖŽ˜^G%û ña¹ ÏÈáZCú8ØÁÒ!üN=ÍÉÁå¡„ërd�A²[tϤKJ}Œ·Î¯ø÷žóh–_ !åºo¯®žï-Äg§ÃÞçoW²)1 '3ŒÅfiå3u8÷Â>(UË9 AóC=…<ß°„™¨Qp‡`¾kFÈ*´¸œ©øçñm�rf¸Ê�¢=ó)û—„pöû³nÌ(™°i^4l[^µ”ŧò$CòïäS5”©=È‚>](ÀË�ã'ÄBÜÁ•�Ú�Á°Ò¾$åŽ|¼á%×V�P+äŒâÝ7ëý³…ް�_’‹a눬d^¹íÇñCú°øLQˆºí¼i›õÙ8ƒOßÍåÖÜÃóšú5ŸªI|¦F·�Vb<\Jчktž'É\š7MÏâJùk–o¾ä)‘DÝ^è0{É%O ¼û!K„eèχU‘|¬`ˆ^¢I�O,¸cÃ?}!�çáW2‰o•ª}û�bR#cl#tœd�*ÿ¼´˜%Â7ðÆJ¥¿B6Ê)Âjq¦›Gß;Û�xæë5mÌH/MKKÁz©=�%ÂŒŸ)ƒ|K>DH€mU)øÁ¿aÉ𠥡�—û„$CEâÜü/®}}2÷ ÖlåÛ¦átbRΣô<žgÉð¹+&Œ{°�ݳ÷±íÌ“,¾"¯Ò§®Â7¢`áu³f€YßÌ�Î7LþÏ>D¹£KÙô;� -�¯ªÜÈz‰pt�Ó{c*K„a‹ðÝZ|ð‚kÛd† ÌÄ|Ùy4ùš»:1¼F )K¸—FÕè}Oú�„žàßË çC=„„8}ùô+1(}‹žt‘†í8ÝI¯­$à!¸GÕòÆ0. ¸Õ¾Ÿšy–%Â÷+Òè¹í&$Å!¶VÂî]Æá7ÐË =Yiw>Èï©6ðÃ;^sÏŠÑw P¥ûù¬È‹%Ã/%ˆ––}ˆ�'Rÿ5á½Sõ°·]`Ì"Ú1ú ©Yù=±kÉ–h`¹†pHn.É Ém©˜~el»º Ÿ¨šý׬šR·’£ûêc$)[z›Q|úñWóÞ�ÛÐŽÄ3{:ÞÉå,Š…#i�ö–TüCVz½¸„ñL@¹¹É7p<.÷*ÙF;¶@çö}uÞWŸÓR.Ï”VgÞÓ]H�ž³U÷ñyê%üxEÎWåL)²Øþ€h‹IaÆó‡U¨! r&è8ͽq™f;¨¶™›S+¤BÞÒ±d‡‹‹†D.g”2†í—}Nu~±º«©p´�(+Rsq­¡ñ›§Wk�ãé÷¿*=Ð"á“Oß]3‰5û£4QØ‹ ”Ò`= ‹=E} À>[~æÑö¸¼jrá»o–Q~rJ”ìÓ…défdRª7žÅy-]–À%7ï¿›sLÑBÏù~ÊH6ëÔ“Áõ‹Íä’H¬×!YÒ?½�f¶ªÈÞï‘Bc›¡„”K/'Fáæ¼"9n/!aŽ^Uze*±žØº„®é×âÉŠA¹5¿ ½ 9.›àåÅ𔉾…BrüĆl7'û_§ Ix÷!å›z[U6§Ê¢÷"ôI)ð”]•Hü‡­(­Ú^HœÓ_ ºÖW”*S𬷸֙àKº^ÕŽ»üÜ�†D +Ý«–ñfÞ:n{·ÅÙWx-ÐzRµÂ»zVÞ¬¦¬­Û÷Ö*pÎp$غh1ýîÐ/‡™ù4Ôê¢\Òzò%YE%8Œ{ëx´Ö{Zq1"ôdÝÕD´ÎÆ�"î¾[ê�Ùò¯ÜÍÌ2z%úß †´Ùî½ïE¹ò!õ»X€3…:pR`gìñW^<ñÜê]¯ï¯ÐA¿‚Â9¯ñ]¢„dè-÷©%O¡Ž‹©ÊýšàVaq.�FáÁ°‰n<Æ^öà?©a×}²á�_æ¥ÔƒjÂG ua?.{•ጧæÅëO{Cu-©†|ýùÃTSrç�Cjº@îÄ3Ÿ[þ‚XZÏ6þ-öD*þ‡éØõ5PF0‘Õ0Ù‘L×ú™Œfz:è©Ê æ+Ô‡nœ(/QEõòÔ>òŠïÍ)9±&êô–­ P˜ÎMdUíŒàTŸãó‹q Æ©ø—Œ NtÏ ëû©ˆX|f”k‰µð”Ü'Ÿ÷£¶¸ïæˆ:®>¢žÁ؇ `ÌQÜy`Õßüæ^LJµ6 ÿ"6\±(b�mÖXÕ'b%C3ÎTç‡z3½¢Ê†¸ÓF¯îµà:†¤¹~þ“/x�®†Eh¥Gý$¡nVÛéÓ’”ýô‡3Ú>m¿'¿ùó©²ïfÅh؃9ýOËåêÓ—£°™wf÷ê.®uFWÇv€ÜÄx,|[ö<œÊÌDŠss»Ã£‘u}cá;_<ÙïüÿÜO—C•‡ux÷êG÷sÚr84æ¸aÒ>ï²ÁC‡}߬ì#¹CleóY-ÛC)½p˜ê7Ôj¶ôí��5üG–Ò2‚€Â5pÍ* tt6˜ðEAót_ÎÎ�7úß§xÛ%sõªOÚ€u½›PGŽÇ9MÞµÿE—3YKŒøNpdÚØˆS,ì…g\Ü$€cÊ«£óp�¨S|"TT¼éxTô†� _T¬lFÖíq3¦ˆ Gý¡®œÖê_rž•‰‹oÑ�ͱQ|¿wËaù S‡ÿ�¼@'Ûβ\ƒ˜ÁÙ%*3âW�VñkX8ɃAo7©¢ì„ŒºÞÒŸuªPgŽmv!,WÖ²’½OÔâúh¤„O¹: Æ‹£r㨛"Z!–¶S¿IiËà¢þ .˜<§pÚ[ÞÛ�fݧ)FÕQÏ©·0v¨Povö¶ZíXT2üåŒ�Ô¶½ØÍC8 ù¹÷qK¶*¤˜ò9½=±#ãlÎIŠ&(|þä£-3“A"(ï^ñÍk¾!U;žU¾šz¦Pw¶XY%|§œÂ¿7§±3ò1þ¼õ®˜9¯gY™"®çŒª¥º¥yíjB\ìdké¥ 0,ì : Ô ƒ™rS‹VLÌAwrÍÎ?\^ȧªtà¬p¶´ŒQ\‰Gºsá`€Pna‘%~ˆÎµÔ~¼¾xÃ6½—öèVÛuSŒÝ*¸ìyÖèŸ8@X#ì)K”øÅkC@\¢,F0Ì ì“�-jwIM%Mý2ÖF«"=��ѶH[¤ƒ¯>oÁ;>Sd°lÅR&¥o#¬zyžìøsRÉŽ�£MjÙà‡ÆÍÓ¡*7ÍΩeš™‹Ì¹½=â÷;À¾›U÷6õ)-!~mè6�Ò�/y é^o¶04^ŸTù7…jÔ„+“�EõuV¨—uÌL‘é> ²ÈLãŠIrÐä²O¯ú>·ÂÌöQÒ1‚1؈F„îú\寀 =…5F…Û9ð £TKl7Ê—­k"J¥l®&÷¸jb·¹áŒg–/"ü¨ ›à'‰Ý}1£Ê\iþžK«< LúÚ Kj$_)õÖ »èR嘃a4’Ë‹ ÎÄgfý¿‹ÝžÌxî±M~à¢Aì­ˆVÐk¡Y=è`ù? 2þHÐG„7£êwÊßQX“lxÔaSžœmƒÞuÄv’ëË`¦ÓáV|ìJ�¹™{Àn;2¹»lNö¿ÎÄöËt§Páf:ÞÛGÇyuBð«Ù9xîò«Ý…5Êr[2'å•�X€ óŒv×!†‚y+™ÈуŽui!)ˆ%ô&ݰ$ó|I :�È�5*ÂD§|a©2ÒÏ´=÷Œzˆ°†é©¥Õog<ïýœÏ¶;º»V×Q +$xNѹØ�ñ T¹&™ÇÊœkE°ø3[Ń®_òZZîH8nm'ÅüKÏ“Ž‚#µþßôѧG«Øº–þ2Ðòú‰ªB“lTô+ÿëÜ7ñÞ±TkÍô©šÃm».�¼c»ÆãÊyc‰™¾ìOËqš‡Ë»Ñ‘²¶¿b`@9Ý2ÛÌta-p@K‰½ÄgI�oÛÈÌ)*Jÿ¶ä[AŽù \jÎúgÁêL`Ð#oÔ/èK:½¦ÓYGÃü îjeDŒü]2mõ…e|®Y2›+qÛ k…•””~‰Ÿf¯¡VøÈÈ}ùm6m-?Øæ‚+n£ƒôð®97²‚Øå9"¼Óû8sÖwÿÛè7¹qê3ZiùL¾Q’Rê^ÂÚ¡ûA²ý@#·‰Íø’‡ôt²à¥ðKö}2ty<ã�ÑpFÔÄ"s“Áv‚ýqsZ¸¹õ— ®Ìƒ;D$µÌ†EªqP7a-±S:7ˆ!F€ôMtðuÅ1ÈOVnÑŸÍb›HÈy‹ÌenÍ-Ûušnc? erÆlþ�uɵÇ:¥�„µÆ! ¸1·�cŽEf÷ÑÉêÜ4+k83¿œÅ¡Ïa‘¹Û&²4ʰä�Ü�åb�K2Å8¤r¼;ÿׇk‘ñgÑc޹dC¯3ªR«£æ…´ /ÃÎb‘™­PeØp›,冰Ž-}²|Š7ê\ö>ÂZå$L-Ë1ç¹ÊAç[ŽÀ+Ž_ ú°2A„z‹LÝ =p�XèKu3pœI K”c‘2äÐ ¦µÌip�ó;;Ö˜c¡Åk¢¡þ·¤kÆXš �ÊgÅ÷G ó²x—¯ ¤: Ü1ý ¬]Üϯ:ø hÙ¦u2•:*ƒK!OC2Ä ‡*ýóWžÞ‰Æ\ºŸá§È—Sþ˜±�Š#òЖZ“©G¼ÈM0{ rµŒ_ ” "Æwüi˨懵`ÙXú÷E¯ïë ÀASl–±úÐpɇ©îÖKèTtÛCM—ÕßýºÕcE¬†ã]é{TS-:Wô¸I8œŒî4‡¼D­ß¨&þyÈKˆ…*ãœ_i$—¯º¬·ÚŒýΧæA; �Œ�‚£žòß¶ú£ªL*’ ›]ù òùA5VRƒJã^,ˆåÚv[ÞñUÖ‡Y�—á`/Û�’æ(Qkð$H)«ïM,~M ¸iè�ỏQOùËÛ†mÙvŠþ–óhÙdxNø1’j¸?5½È@= ȈDƵiáD§?Cn¢HÀøF…~î»�¶=°E©ÓÏófºm£Kh z¦êL9'Q»5oB5Ùä|f0ϼ4lšÆ÷0þ’ûCÊUDån~™ûC?ñ‹Ñ#•S]™Ã€G_5¨§áéP`_öz1$}�N9æÍëº.UV‹#½¥,±%Eª¾l�˜è@oƒ{̳)3G·—cø�NÊ8µ/;ÿo–?£§º†Ü†�OŽ~_%·sÎóf6ØÄ–þ›ÄòL,Ñ,[ÁÊâÃ(í¶¥Ê‰Î¯è“¹§œ‡’Wÿ$‹ÁƒŠDôéb.°_ËðmÕ±gKØ~¡MSä§ú_„G8à¡<¬Hr,å¥eœoMë³´7î4µ×ªÖ}–$¦”qS×¢R +Ú,M&Í8p5®¼çÈëú˜‹ù,¦{Ï@߬-t<›O,‹PL"‚Wªðv$°ç®AAëKÝeC¡³s€¯¥ ¼"?úŠº”)ÊDUÃRï5‚i>ó‘R÷.‹œ>gL®v¹�ÂÄT×¼ZØ}e±ªëƒð–W8Þ Â9¥ù]€~ϰeÇ\2^Eó¢I—Â’¢AùL‘ñþ‘¾ŠÅdd�Þ�…¿ˆÞ$zªƒƒ#ÑàLP–�›=;¡K°ý*œøÜH¨Mi…¼í`Ìm$E—Ñš_{~}Yà” (Ïo$ÄÌMnÉ)*ð×È´˜zbRéy81]ÙCè"ôDu•¡%²+ÑfÐ �Ì0} 'Âýf…[‰g±™s”üH°§Íä ö`ã`Ò©½w£Ìôh¡Ë°ÿ1KI#ÎÖ°­æ%JЏáÌQ¸í‘u)9Ñ%4;çžÃâÓ× £Fø62hÖäJ´q0uc¬Òã 8BèBì´8cxÄ7Sn˜&é)”è~M¦ñ¢Z›éÜ4LãƒZPÉ‚º}m1Ý¿–¯”’�OºÝ÷n{ÕÑ1 Ø:¡ ƒœ�ܦ€œ7l›Ñš�yÏ›x£&1ÕåkÈ’9-½—áG—hã`اbRz[¾wd§.É�ŽÍ+iï,êg”áÄ®½ÀŽW¨„;>Sø­À”ÐýLeÌßÂåÚ Û7wžVçörcl xMÓ�²4z²€Å½æ/ëx¢ƒ‡PL®‘©©N¯Ù0•2Ž;Q˜rÜ~ôúp ?Mè’ÈÁ¼’º¡ &ª€©Œ NZðlŠ2Ñÿbq¡�ÌéU}„brÓ”Ï$†¨hªûãÈ—/—ŸÃöº('|¼R$( ¯nY*éWóçÒ 9J®ùôD÷,¨¡ÕuU¿Ò/ÆÂµE0¦·™€´òùý….K÷]ì , +õ®&úë°âÓ¡€žè³Y‡™L'ð´L"]+„Ÿ ãD@*ú»tâ“Ôôp;6|èzUI$ý™°í" ÁÉYHêžÉ6°Ž3·!—§ÅØ�q•ÐFœ]¨š\öîÙ]¦ W�žyYDÈMaõ e$¨²•©. ':=Ýâ·ðZþX›Ÿêƒ ¼’b^©s�×SèòôÚ›m¦ÓÞÄô¹Øâœ#Òž[ôD‡Žä˜à3/B1‰/‰á�Wëbu/öþ RP÷÷ÜAXØÎΤ ðŠ—òF´€—Â�i:`©D:XøÁçDx=ÊT k"@Ù�ŽT¸ÎÙ ÐØ;ÿ4£žÜùÏ£Ñ3+ó]ä´Á™Çw÷1²‘':n‡L„ó³ybU§Íû€¢Ü�ßò|݈îÔ—½.tÀR‹6v5‰º/Ò—{wðfñ~EEn–‰*o@Ï”åÈ©n?äÝ.Ï?‡°„‘4{“u#´·±�ÑšÅç® ‰{Yo7ÑËäD'ëÛØu1!¦ÊZ„^œ%*?Õ§2Dƒ™±ûjPØBòôíÖ•ÐÞÆµ|5ÿ6¼™¡–éÞ ðº¥;Ú�–AÐ㩌¤yùU�ŽtÃæEJËûôêÂ:Ç'ÊŽ$ªSCZ#hH2Ä„¼#"\¨Ë‡Ô7üá,1ª&YGÿNn1Cô3´êW›‡ë¦äè]¼ S�]‹¹¢Óõ“âQÃ|�–hÅzžÁ½ÆiâdIý›é¤¢ÆöaœŽÿÿEH‚2[v¶ÖQ6Ú8Ý=PgI÷s=h¢'ÒW‡è»â`µœ ÷¸¬b\Ø«�òH³gZ7åòÒÆëV‡ÙjN[C­pï�@@tÃCä,âçíÌ` r¾•�àÍ=½Pã£6ˆy|‡i®?NX§ÙaoΈ°çÔ�óqòª:_ʃ,Q+Rõ;NPdâ‚R™7�½‹s®8:r]žæ¼°èez¨|À(Ýk?îAE<M{K”‰®Åí+¯£\žàÕ£Óüñ6N[w�BôsMpæa«#¶·w¬AÜÜP¸ýš>$ì&øè'ÌË2):�¹‚¿Ÿ©. 5óÏŸ·ºq¿.Öü›}Z:¤Çæ4ÚS„Lî–®1¸¼y6K˜‹ \: õ4|1Qô~%M\±^xc—m�i?Ýo1;4)=gÚ¼Žç0#T¡åú±„ù5Sä"7Ù"ø¸s¹þ¤jóîóðN+5PŽ?ÌiåÝËl‘Ðâ$äcXäÇ‘`×F‡o:0õÉ9¯øÍºÔU†D8é®UmçìP”&J¤•õ¢KÆ—,æ® ³|2æÐÚÑ’µê’£ÖµJ{z�X6ª{]å‹•ªzßRàž´×�%ΰ|‘ÎhUrìã ö+€¼íºYu­Íî;º™jž©£¹AÏH T/ªKÄÔĹÓɯPnø°Ô©½vþ¿l¿‡îH`‰M›×ƒ¦:Ï̲ÆÍ®Xâ@ RJñôt”¡µÊñØ»­³…öhlÐÃÑ‹RÐü~,o=­Lg¤ø/Ât°:01ðaî îA©ü‡�39Íié”pzl üßéµ]ÆÕ¤Lï¼Xû\òä\AEw™[æŸË<·èó@`R–K*•Y8¿ïíI–œ;àÿº˜cvض,Ws±RåóËt†E9°%Ï]|5 <�ZúeîÓ\›GÊÆ‰‡ëiå�ƒKÜܹÚêmÔ_$æä�Œ®$A Âë})ôU»üŸó· [€C¥ÅïÒ§G˜€&x!&ËØ²FNbÞ1Èä–$,šyò¾Âz0GìÍ€±žÆÉ)aiÅ §ÉÓp^>Bò0†[m,c Ž~ WÍÛù¬3…õD£ûÑ—Ýlå5b ½Ît¸ä]šÀêÄŒ—¾g³WPnýf…ž„.ïytg×ìîdì~@Q÷ &¶éÓøz\îrV7šr"µÃL�=‡gç·]ÄÖ8½zìiÈYØüð\ȯ³Æ™¸U­*Ð|S/Û"ƾŸ(èf^7öZ?É;ÎîÛíf¬$²÷ûm~ÐG³º14P"jÏ­”w;yý1Z2tï¹é,bÐU“Ø׉‹¢ ú›÷\ß‘ ½öÙ�Ú !ìz :Ô]u)ãØoŸõíÿ´s?/ ‚aÀ‹Íb/«?`².CÔPæE�2‡CR|ðà~°×�M:ŒQ!t :E�ºvìÒ!è¬y‘¼EÓMö~þ_^õyŸç}×®Æ+ѯ©ŸçJOwqÇ_�X%Nva2BIgF2sì�R¡@fÒßôá$9æb(ün�TÉÕ²Än?¿¹÷qz öb²*ï.þ"-!¸õÓ7ÒnlxÁˆ©6{Ħ4Nëå%ž†¡¿jw. #‹Õä»�ƒi°,×OHà›wpÌU7œæ×�‘KìͱËT¸#²û²EJm®Ò{„Œ<õ*\›,ð­´/òçŠ`��àð&©Ê¶%J–* þ%B¬ªK"‰»P¨®É[¶¢!þÀ@šbë|«KÒ.´ÃZ×lñ–Àj„d™¦iÃøyÈ2B�ÕÑ-^2ÅÚ.Lµ}.Çý0±_¦ÀIEND®B`‚pydantic-pydantic-e28e879/docs/logos/ti_logo.png000066400000000000000000000122571526274674700217630ustar00rootroot00000000000000‰PNG  IHDRôôü/¸¥PLTEÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌ~Ýl�6tRNSmbw¼Q”G†‚é·eû¬�XÚ÷í] Â.ÍÔ!ò*Š=L8ÇrD2&¡˜²}TãÞ¦œyi@± ƒIDATxÚìÝQN"Q…á‚a°�(P&:0:£8 &„ÚÿÒ\@w¤Ëtýœÿ[A'ÿËy¹ÕÀQ/û«SÛ?Ϊã§wk8«±ŸÞÐpV]?½Ÿ†¢ƒè :ˆ¢ƒè²ˆ.ˆè‚ˆ.ˆè‚ˆ.ˆè‚ˆ.ˆè‚ˆ.ˆè‚ˆ.ˆè‚ˆ.ˆè‚ˆ.ˆè‚ˆ.(Ëè�ƒ�7CþÑ;ònÈ?ú™ò�þ×C¶†ì£/ïŒ#–V¶Þõ[µ{°Ðу2ï8]`ÇéèîÀä )ò=ÊûctôàŒ7@’cJÇéèá;ÓÑuÜ©ãtôÐÌwϧãttº7¤uœŽnC;NGÞq;´ŽÓÑ3wÜ.£ŽÓÑÃtÜ”Ôq::�vœŽþM[ž:n/ÇB:z`SO7Åb:ºwô+3< Éñ'ÔÑÃ:æßq:º›Ž{&Þõ;NG§óÞqm$¹¦~~´ŽNç½ãƬ:NGÑqMꨣ“ù︒\¿DG« &¬:NG'êy긣M§£‡ÕwÐqw°î 7ÐуÊ÷Á`ñýŽkâ&:zHg¾:®†èè>ÍÓÿ:Žôîöfú_‡:º9PÙw] ]¥Œ^+?©g¥‡¨ßªìAèè÷ V.Й x(eôÙw]ÍåC#J½öGàåÓÆ&ÀC£çû`ãINÁÊÝÙ F׎³±<”1úXÙF’¬tÑ�ðP‚m¬>é·4¼u§ny·W™Ž[ÿ ‚ V]Ô—ayº‚®ïi)/Õ|ˆ¹ãþª >þtUÜ£vÜ»ÃWxóˆÕÖ‚ˆ;r,×íã{?VÚ0yM6šL�—ÿC^¶&Éf¯)–ìtK) ×sÙq‘ß×X:AáÚž:nŒñyîP´/W3yb-‰ø2T¢Ž¯Žë`|j è¯úo _÷Œñùý¼…‚�Á _ÍŽ[¶Q0cÇõªÙq«£ÃŠõ,©ã>�~‰bu\�˜tÖ’Øÿ…¥xƒýŠvÜçÑ�†(”‹Ž»çÒqŸG‡ÊEÇíré¸/£CEzrÑq?¸tÖ‰oqúê^TÇ­�~"òˆf—ðöaÒÕâcôutø‰=‚Á¨ª÷otI/’\7sðrÅ”MÇ­Ž.÷É‹¹ãÒï_-%ÃèÐ@a.¾îvƦ㌣ÃÊ’‚I�øn 6gý\ÂÛXWd:®Á§ãÌ£C[Öê#YW0: *þ’è¢+³}ÇelÎã G‡™ Õ�t܈OÇŽ9WxiW<:´£|Ldßq³êv܆ÑáDÊ�›±ã«Ûq¿Ø;í´�Š>À…P `Àì[ ì!aËüÿ§õ¤=é’°ì±-Íp M^À×Is-ttì8rkÙæqWCÇ££,À±Íã|B·nïT~ìÍõ8¿Ðmk¥iÛæqC·h¢¯Á㦠¦3áfèÈ*³i•áC‘èqrÎU…Ž‚ÙT]h¸Í¨/Éã‚„ŽµÑ%Yû<.Pè¨ñýÿG' ÆŠ„#Êã‚…ŽŽÁ+ÇÖðáÑã$Õã.„.ꑉ�k‹ò¸‹¡[Ó.i¡ÇEe$ψ>lÚ’åq„Ðñ¦LäÍ×\5xã]'ÃsYqbÌ]Âê¢êqB7|’Ùÿvñ£=Ž:ÖÆ]Ö¸€®ÑG }ÓvUœ,ô8jèx2,uÿ¶ÿ(o}víRCÇÆ¬oø™…G}Æï"d¼‘�Ë ó¸à¡›¹nn ÃãÖÂ<îv貎¨l�ÈÖ* 󸀡{ ³�“u®ú%tëêð+=îJè6´FW{ðál¸ÇB7qßÜÐJ� zψ×õ£�›ˆó¸O¡Ûvø’³Ò㮆nþìKÑ%,/Îゆ.gft�Ë)ycABRÒêx3™‹ó¸�¡rU§¿Ç iב÷%8t1wUDõ¸^5t†”ÛÎþ ݺ£—:‚›ÎWɉá6å]Ø–w"B<®[�« ü)Ö¹$dxœ÷¼FšÌUD–ÁBX\AÅÃpÙCʸŠ@4¹Î(:SPa^¦vHŸhK‚ qëð$¸{Üqd5f®¿ô"Œ=ΫoÀ…n‚…“­œ36Ý7)ÖÀ‡Ð_ðYÐÄüopõ¸ïçÔíMË>’B0šH =§3ò\ÜxN°£e&%t×èÈÃ9Ë1™£½%hp*[ýf¿d9ÐólWˆ8Y­iÒ7žŸòPwOî; ý:Ÿ &;t«ÓC“¹I ÈJ¨½ŸUt¶cð¦Bùî'¶~|Œ<ÎaR}Óôù›!�*ål<®É¡Æ~›FrÃeöíR=Î;C³Ib…Cî&ÍãŽÜæÿ0x3hà‰ûC=ŠÇ Å‹ºAs-œ˜O*»"çéC²îªk¸�Ä»¯]†ƒÇ9}¤=¼\DnÉ¿"Ö”ô=ÎË@(�Å…€4ÒÔ_åOÝã\Aç³ ÷ >1|ƒ€ÎÊïRœiµ!œyæØ=xêoè.×Ўø÷ÝUt\N�1áyì�û³ùS±0f¼Œ‚îqÕ7Ü À‘m§Ýãº|zyS£\×”(? TKãÄ5u¢ÇíW¸”×¾)šÇíXwJ°#O9Ä!1Š@wbk¹ÿÞ@BŒ)ÖþŠ;qÞ èÌ/ô‹ "KíiBŸ®qB—„Ç•øöº2¦®ˆ4 ×b÷¸:î„ú¨3\­xàøFau†á©Ò/#&Æ,k&1RaÙ—¦ÙÙ¸:=®µÆ�”nƒl Jù\¦Q˜oj�$çU›fœ©‘aÑlü—jë0è:¥�{Ü>çëÓ‡bñá¡xÎeÈ Õmwmg·Û%nº?Ù»¥´¡ ÀKËTÅh” ¤‚CGÅ‚ZÏû?ZÇ™R ÈMv÷žï2ùÛ»g÷T(’ma•'ìü8†1ÇBûº…-çBûëÁ^óBŒa¯¹ˆÎ9}+YßüêL Vô„ŠÒ€ }!1³9£íDhAÓ ¡€ì€,Tú¥–ã‰]B¿±�H\Ç.æ3©úÜA9&—¨C5eâ©Å>ò}!žZ,“ÈaÌ _C™C+†‚©A©‰P(ÉO¨ÔQ¶hÉ—Tâ }™ÿZì½PH÷Ч!´‚ïZ¬�¥Æék�çßZ=;üÁ‡»=}è që)ÜeÌ&wÚP$eSÜN[à9Tf=�-ð�Båx�üŠ+Ë©šcF˜r©|^¡8´<Ý*°r‡'¬l‹ÛHÅ�HÜÎñgÇ㪎Wž‡b€¿íUøÑ—Y¢IEND®B`‚pydantic-pydantic-e28e879/docs/logos/twilio_logo.png000066400000000000000000000107201526274674700226470ustar00rootroot00000000000000‰PNG  IHDRôôü/¸«PLTEî1Gï/Fî1Gî1Gî2Hî2Hí0Fí1Gî2Hî1Fí1Gí1Gî2Hî2Hî1Gî1Fí1Fî1Gî1Gî1Gî0Fí1Gí1Fî0Eî0Fî2Hî1Gî0Gî2Hî1Fî1Gî0Eî2Hî1Gî2Hî1Gî1Gî0Eî2Gî1Gî1Gî2Gî1Gî1Gí1Fî1Hî1Fí1Fî2Hî1Fî1Gî1Gî0Fî1Gî2Hï3Hï@·e7tRNS³/m�òîhý4 ÆÜ€U芢e<)#ùv`Ë… ä|ö�ZBÏ­•½¸§GØqLÞQšÂ7ÓV«ÿ†�IDATxÚìÁ�€ ý©©`vâ­…`0è·ICI’k¢F¹li.ùüÿ_¦x�›sü½,½tòC™Çþ­HÊëº5LÇ�¦êUyyoÇ·Ç»—î9-g�†ÉªÃn?ºo'ó@S¬ZE;~嘧�ú›ö›øƒþº ÔÚ°ˆ¿;åY ¦žìÜgw¢@†áWQT,‹ØA –Ø[ÿÿ/Ûvöd•i ²¸g®¯Ñc’[`˜ìA јozDÿšŒ¢+�,Ò^L¥xÀcÌ�ÞÚ_‹á M—´W1!N�´×Ð@|úÐþ ²UÄ)¯7öÔórˆÛ»Ð¥›UCü¦zcO³™‰§øFZZíð,9ÒÒ)‡çÉèSöTZ!„~ÞÌOBþBZÚxsµØ£õ¤=+·Ü‚Wp[ÙN}Ò<›jïÔ—X¤�»…TéãÛÆ¢ /»[8�2õU)SƒD~í·ˆÏÞœ¤Ý§ºzšxr–u—dìÍà ©¾!-5æâäF…ùUé1|j¬„É…°ù„À'ié°„ÀÄ‹u-~EZlÀ—ÉRx•F\'Òþ½,¸ªeЦ—ùÏfdÝ›K¿ñ~lÓ/žËùy…þ ÏÏ;Eg”ÀS¦GÌ–UŸÖ›OólÓy�ˆ¼ ïÇŽO?ìÞûÍ7úVà)Ò#º8¶•=kl˜”0|ÉÎ’~ȀϦäà8\è1Ö(æ|§1Æ/cJXQ½,¸6Á娔¸8Ö=lŽ6…•�¬Æø£F +FßÒ3)Œþ¶&Åá‹Â(¿Í@G�GýÉ#llÕ07PŽèè±±§`j<ýßUV-> £Çiñü3é!˜F$e·s[:z¼6`ZPœŽ`2”Î%uôØ�Eá“ï—é{$‘×ÑŸà“YÃíõ $Vèu[ÄòmÜPÓÑŸ`†R™îµüÅa ä·ëºElî>7Ê¥qf�¥{V,®Žž|ôXêtgsÆ—þªCA…Ü_æ¾Ú ÐBGO>zUé€þ†WÆìèÈ®qoƒ¥§£'= –ÝZËÄ¿!À±T&þ:zÒÑ`Ø©ÄZßnÅWmmºÑÃèe¢À7Sˆ¾JÉ*[ gº•˵I_öW°ÌmºÑCçU¢w%žƒ¥ÝÏ—8úï” ¥Â:ˆÛžþ°x/É(œu¼Jt"‹Ç&…èT°x(Av^aúu,¿¦5žŽÂXÎz™è|Òèé±C—n ÁsÝÐoÝxætËAÐ@GOÒ›ÂÀªÆ�~ª¥_¡zØ«à·àÙRÊ<-ºÝ*ÏŒ·æ"“Y4—“ã¥ëÒ>å•:à»öè§J |E…»h.ÄЛý2�S?Ö¥ücå®Ìéý^3w÷ohÃ0Ú–Rô™Áyÿ†øºƒŒƒ;ÓQãèQ4]…aÕíÀ2�ô|~¨8_FLÆ…›žS]×ô7»†°¶*Ñ[àâUogp8Ë E±Søøµüq"Ã+øª÷†âþÝ@\† K¼žpfZ®TQˆÞׄ�<¡�:Ýñ6å}‹ˆ*n˜µj“îœ!° ŸŠ¢è•»$[0D\Þé/ï`Ú 'åL•èep¬ä'HUgt£ð­:Ø7‰jMâpû #éVÒ••Ë)ŠÏŒîÐÛ¤Ó‹ó4Dws}¨XÕéFƒ «åÄqTYé¬Ê·tC}L÷L¼ÅýÓGY~Ã^߀‚¶£ä¢×óÑödÖ’:ƒÁ®Ý q1Ë™19/°”÷ѽw¬cˆž[�c§pgîFá“s§Ä¢ŸBµ÷Wôù½\Ãõ‰ãŒ€�è›Á{ùM•Ì8†èECá$y,úúÊf:ˤ¢ŸJCØ.¹¶W!—ؼ<²toéÌ‹ „9ZU¦è=ݰ¸E<ùôÉXþÅÈÓ"™è½*Âj?pqœIAcð\ç ‡€2dàǰ{çÿ¦…ç"ξþ-ïTM$ú HM[í„yž’/Ÿµ;¨­K7�~â°ëò)eä¤ì'=‹H RÒP»wÍ›^Ár-9 çuu ê Gô ¾U§ ¾ƒô,ý’LtÑÔIÅBñë2¸‚©Ô¦?²(±_2'†BðÅó8¢wdK}º’AÔÔN$zQuIÁ\ñ"{t•>,hÈŽ>v?Ùô�.~´N„Ú$•6)‰è'Dæ�\ÁĽ~�Xì«úH~f—oSÝ8¢ç$Akò9òÁ±I"úÈEzÁ�Ø s|Øò…™‹ú2~'Žè3ñdA"cñ¦6õˆ8ðŽƒ¿ˆçã$I—òQþöâ¼aGt{* :€P–~:p³%}�‡lIfên“ÝÍ|nSPvQ—Ïo¡®ÒjÇ�ÖÂm`¡7áÞÀO º‹ #<b)~úÇwöîtIM ŠðqPTÔ€(*¨ƒŠû®Qï¼ÿ“¥²'St÷m@ÆTü~§H�š^/7ú*XØ=Äóúk“¾úÔ>k62ýLBßÉæ.|’;ÉZƒÈÉ!ô-¥8ús36ä¼ëñxµ S®Ïsr=Æ.‚ iÚBÒ¾8¯Ä�,µ;‡îQjý*bäÃg,®ISK6Ê-9À†1•é”(^'‡Ð‹”Ú'ý½R}äÃçÌÃVŠ­¯L1[(NÊÒ—B倆’þ¿•Cè&É”.«Éäó°DR¯Ú¡ �Sèé·@�DÉÑ!%_ø°mpÿÐ;$qüˆóuf¦Xx1êI3:ìP x N/ÉÞbƒBß�Xa„_¬…´µ’ª<Ô;ÝÎ(ô‰(ï)µA½û‡îDì(׉Û÷�nk°*4ËâL|ÝÑÎ^^†›Ï•Ý£ “ŒBŸ‰R)VIév xÕÑýCŸ“˜ÅÞã@gÈœµŠ|�ŒB@?DÛâìÚ&ý4œXZ%OŒŒB/G+ˆH­ZfvÿÐC:â?’ bÄ«Ú"Ý1ýeßÃ{¯[úK©¢S–´™QèXÒÌr½@"k�¿² ÛÆÞø9ÁëºôÞV£¤Ã.«ÐtåBêœy:'œ÷ªôžéìmue‘6ÿ¾µ¬B·({äúžJ¿œ/Q© çÄ­ôTQïÏ)�)N‹{œªje:”9#�ÐÇüÖ]6¾«ZºEÞgˆQm—êá—½`»Ô1W`úÐ+”µêk¡�\éîþq2mæÉEzA9:®’Ǧ_² Ý£¬]�Gè& „ÐÚ£ü™ ¯%é’ÀùPnøhó:ïÓìBÇ‚2ÖÿØÐ[ˆa³C×?^$Ÿœ2 ¬Y¬~Ü!ÃÐmʘŸGèÎXç¹A1aóî±z‰eå5Yk(Ý C÷)[ ä:NZçE˜É+¤NŒ¹H™h�$Zœ-A=ÃÐq£Lò }¯óìÖ«ì#Eú_�©r[f$±æÜF dºM™ªøÐÉ™Pgˆ²†œÁÙ0¿&‰­z�´£¶Å*Ièc‰eø‰XÊù„¾$‘Hg2â3äjœ)¿!IÔ•(\N'¡Ÿ$ôÒ(ÝK½gÇù„nkœñ¿J¯¤ýRßd:�9ýÎy’ÐÉ‚À�J¸G%§Ðk$fã/~•„<(¬¿äF]f¢óFb7F9Ú’“(tbhɈÁË)t˜$6ÃzfšóGõM…•zÇm“$ Œ–i)m�„‚~{…æï#oŸùy…¾$‰¿œ[A@º�ÐÔYªÜ©ÏˆM­{‰žt *#|ãwQ¿�yåþf¤fçz“d>,pæ[’¹B©­LIºsØtÔŸ;üÅŠ¹\T‡ØždÌõr¹\ïßOêµHéÆ\†õs .I�Má¢ø7fÒϦ¿‹ M"oáïÓé"ãjmH,ˆ©¢×¾‡pbÜù…>¡Ô¦Pë1¶Öùê%G˜$2&uç�h$*°ä’Ê ïLI˜cèå*¥å�aÈèooÕ‡àgoÌuí ËD¡OIaÌ,ý[Ë1t´(¥vòïÞ¼%—Èú#š7Ö}®(£˜(ôó v•÷Fž¡×)%+Å×u=Ίú[Oý{ÌŸŒ‰Èt…—×?k½‘T˜cèéõx Š1dŒçƒ+ Ú$wà,L!õ’,ô)¯fÕäjù†—R¸€É‰ˆ‘ÖÕ%Rl|½(‡èõ’þ‘ 8¥D¡ÏHÊæµ&r}N)xà %+K¿YúË2¦MîGô§a—µ`gB¡�(ôIõx%¼†y‡Ž�+‚Íqy«²ÝÉ‚~hôkˆc뀾s?ïxþ{;Cá˜(tÇåÍ­^IÆÎ=t¬R Ñù ön­~^ÙƒˆYçÉêsËè:Üÿg¥±Nè¼ïÀ¼z/ÿÐ1¤D–ÐaÉ~û´¬ ¥i¢Ð�Ì·ßJ^Ì#ÿÐ_]J` þ�:G¦ö‰;œµD¡�ÞúãœÄŠ:¼1i»A�ðlÅÙ)¯)Nà�¡•$tl™W& Õ>$t”Û¤©]‡®9Å |de´OUš¾‘$ô#sãB"'|Hèúu¦Pá�ŠÌ²áÜ(^,e7A裀·ò’HñÃBÇ 6÷ ÞšyTC&ÖÂÕP&/ÒaÌ)¿ùÇ…CL ÉT(^uŽô,Qæ°ÕÆúm\‡9E=‰ 茉axFbCèCû³r®>ÇÖ^m(Wy‡üEW^}lèpšRXï�‚E"[¤3‘÷�ùzK’XÎÙç½–ï/Ìmݱ ‘RÀU±ÒÕ®ùw^“XÔ¾"�‰ì{HaE"-èš·MŠÕ°_£I±º¼,«Ð8íSuxŠA¢Ÿà«;½~ƒâkÛ~:Õ&’êÞHÄDõætÑŸJÃiŇ€QŒqÄ{e»#æ1ò¢À_uíÐŽöËøjÚ±Â$zƒwaÝFñl!K*‘„õ™Ò _¯Í�qè÷û‡Êì\+ã¿PîgÃ0*�ÙÑw��‰µËÐÖ—]ðO� V%1·ï@ËàDbÕ3žÑdÆ}ð׊1õÓ£�Ô©ÿ¯² ©%žÇŽN¡*wßh�BO�¤OJ·â|„xNí°&¥ž‹A æºÕ|©ãO£Þ±¿C O�f@L¥ýz»jÙ;,n7 “˜Úxz<]“ÒyöÛÿAþ‰î%šãé1Õ7t®‡§‡Ò= Ÿ™?4Ã¥¬_صӜ„¡0  Õ–:€”A ØH `Jзÿ�¹£?|Í9{¸Éýµý¿ë½†Ëzóòp[¸v˜\®Ï->"±nÂEÔ ñL÷á\£ú9!.é™i¯V Ñœ1¾u²§„(­Ò·ðy½Lˆ×n»§i®æ½„Èu«æ÷û|l‹Ùã1ü¬¿ÙÉx«L†Å1ß)?ÇkÕ­•nºój»è¿ä�² !Ü•�|Ô,¶Y:»Oh¯åõašÖUQd›,+ªúývxí¢_ìÁ��ÿk#¨ªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªJ{p Èßzƒ *à¾cô«â3>ùIEND®B`‚pydantic-pydantic-e28e879/docs/logos/twitter_logo.png000066400000000000000000000113771526274674700230530ustar00rootroot00000000000000‰PNG  IHDRôôü/¸–PLTE›ð›ð›ð›ð›ð›ð›ð›ð›ð›ð›ð›ð›ð›ð›ð›ð›ð›ð›ð›ð›ð›ð›ð›ð›ð›ð›ð›ð›ð›ð›ð›ð›ð›ð›ð›ð›ð›ð›ð›ð›ð›ð›ð›ð›ð›ð›ð›ð›ðÉ_1tRNSíøò‚Š&LÎàkÛ- !Ôwe:Á2p·¤}FÉ©7Q葽[›?üÅ`–ŸV­ä³GˆÓÀçIDATxÚìÝÙrâ0ж ̾˜%l&0`0Üÿÿ¹©™T¥’ŒÙ$C,ùžç<¥K¨¥nµ…ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ(cÜv8Ùuýõú8zw\¯KÝÝ$l7…ìÓŠv¥—~ÝC¯¾�—za[È­Mwx¸Î æã #o¼Ö¤´*à…Õ²Ò2Õ`8r Â #!óDþ :?2I¹;ƒ¾ [2Äâä!ÞèàÊùL5µÆu¤©ê?:$›NEHCcí!mÞ>’Ç)ïQRÎñÇP£éÇ€/¤*<âƒ!aïý¦‹ª/x¬ã@Rv˜á¯™�’f)ÆÃ-§’¢JïvB*vU<Ãk-ý�£À ŸŠ¨�g™m$ ‹>>¬…îçã™J®è:ôñICè^›ž«^n/Àg+¡{�q]†{«[ÇWQ4ŸH>•gø Á@”4–¾éˆ¢~O%�vü ¯¦²•Ÿð¿�(ª}É¡%~΋+w)'×�ꢨ{É›V?)hËÍÜÅÑ�æBÿ�¿º’/á+~V¡"·‰JUœQU_èï’';ü¼švÏ/�…þn ù1F”ä²vmゎîBœ¢äÅÙð"çµj+—MDQª®äÃY1r%Ñ`¼�qÍHUð!7·²cëÊwÓòŽ[´EÑŸÍÅ~nYò5êÓÐyúÁe |µÛe,æ@ß•wÅp’ìÖ59«#‘}]/°ÃQ®*üjËYœcYU;ìåšèí(¥t-ù&& `…µ\V¬m £“ÇYÓmIçËE“½ƒ¿â²Jµ%ÙÊÜ¡¯°AíòhúzÂßé§´S§Kwa�K¯šËÃÙÍù}„û8f~§ iÃq­Þ�3Ý~ü9HS­~1[Z£m¨¢Ÿš’(ô|µIµ1ÔÔY6,t_L½Uï?[—p3çÒ˜¿£;ù®Ž_®¯óÔckX�Zß��9ÓžªfuÄ_FÊ'­ŠrpV(Wu $6*�ëÀh«Æ§/ ×nÔCÌn†¬þ[_ÅÆ¢4¼Tò­¢U'c6ö,�¹W¼=”{ËãÌI±-º]€²ª!÷4E,®:©·E !6£Äž�YqOÊ-"hy3aø˜=o×Rº,@O�ý·nf§q�È­#hòz’qkäċܨmëŒÿÄ;ȇ•<1èèdúzn‚|¨»OÞð†’]9ùu-* ¡ÐsjIV_k¹‰W–§ÎB²)BÄ‘ÊÿÄÚ|.73Ø»×®T¡ À¯ �B¢xAM4-5oÇöÿÿsg�rÓ¥68 ó|nõ¡ Ø—¹L‘FËTD& fd¬J`‡TšE§~6–©øë ¯4 Èõ˜äÓ'0^ÿÞù6±!Þ¶bÏCj+¥×#­e<ÿOºG¢ïù‚а'Fͤtž‹m”v3:w0ìoØútö±*®žâÍÃ�ÌUÞlG5[ÅÚŽØ 0 qTÃz÷6ŵL•‘?÷Çûœo[Ì%Éîçwß´7_³�hûóýwUSl=¶è.Z�ðC2 'É*"]Ü÷'Dj2‰ëŠ ùöj/Râ>zÈ]Äq›8EÊ3¨¯‘3‡aÚÌÄ/XFQÞa;O< :>®“¾Ï ‰æEl¬÷Ø÷‘Häb­Z…Í4pŸ,\&AOô�ŒŠÊWÅvp�=IeŽO…�sñ¶í"–´�»`åàC±“ÃS\&ÉR¹ÌM2ªê‚¾…¯$蹎Mš¨û¨.žñ•=yƒÎeÅÓ[8’oú-k ú²ìí|þ—U‚þ¢îêÕ‹ð�ýjÐ9eV¶#ô›ý2šT^óröž>AŠR¡KZ«v5ÞCpYÊ�~ÞèÒbT³:ÄÃê}sà5$s&— [¤^…½vWÆx$�k�gÝ®ø¥žb#› ·9îdíìúð¨A§ù2Ç5ŸÁB…jÐ >êŸfƒöÈ(û�ËŸJñ¨ÌÞÛK£ÌGr”åQ?¨¼>M-¤á�Ú’üÊ7 ÒiJ73Xô»nµW\<à\ɺ®UÇ›~×*×žÍÆ©rñ›õ­½s"ÒWÆ…zñÊ<«ã¡½î¶|ö¹36ζîA·7|ñjaËg[ÍÖÆ©²lÛ®3Ýú`h·×£çF32XM_ìàD)×rWU÷Áøõ}ÈfùÞÇ~ÙâÆ1ª2lœ³²QÉ¡7]rHùzÆ|’àÅ%!b±É‡§Ì2ÖdØ•©à*.�Ï:k®�x2¡”§±Š_±..ë!Ž,æØzG"6W,l‘ GNæy@")ôå¨�œŒ” bŽu¾FЧa7‘ Æ'o¼àBèªJ;B¼‘D�„jú4”Rûv$Q'Î5´ýŸÙCqº²s# Ž�SNª›0öG䔿þÞ¡‘5;þÞ).‹˜N7+’hdUÔ‘k‡“á9èC#ß=oäæÈM+A;èTWçVO¡�s5.5µ„Ncu�»™7qÊ‘{zT3äÞUŒñ¦Óð%G–Zm“;ül¼¥ããS(yé�Í›±ÕUîj²iw¦]kɧ¯CÁl¡•§nW•cšt¨p‘dç"˜ã@—GZY²§ÏŒp$ݱË!€f%¨ûƒÿ¸MtWóŸ¥ÇLy¬@–ïåò Í|FÃm˜ªúÐíU ÚêÐîA Ú¶ø ±eâA;KÌ7‚~’CÛ›…òQ/‘_”½Ç{Y,�Cvê¤õqJû—ÀYØ)AWÕ@|I¤ ì'¤S`ØÈÆT ²vȆ!�èjâL‰†¬–Õ#ÎH& |'í™ëà÷ØÏ$åÆAf ÙªÓäâÉ„ænˆ 5• ¨ƒïäT޹²ä(AO€‹¤¨�³ ¾“榈#3´¹2-|#_uæzÈÜV ZžGÊØzF™°ÊÒyØ+AÈ ¤˜‘§¿ì݉Vâ@Ð2 KD`D�Míÿÿ¹9ÇQG�¬¤cUõ»¿�“¤—ªWsŠ€m›ZÑ6¬åÔz¥’´ pÑ¢² 陋§�ÊâÏĆʳ5ÀBŸ’¡œB™€Jä!ËŸƒ&%Ãͺ25J‚ߺ:J ½mj4)ìÖéSéºXÌe&xíŽ3¦ô2’yîŽL.2Fƒ¢}YƒWÊ׬ (-[7ƒ’¶55/\©7FT3xÖWFîpàzV-¦ôWäf滩ísLéÏ&¼&½JËÂ9³˜òøŽ¬›�pžÞ~¦çØ”Ï>Û|~1éêAMïý|qˆ–šî õfº¶§–ø“‚Ùÿåž5àåâV5’$Ècgø�?fv’êV|(á%£ã«yJt\ß[¨¨½äå%´±'q6ß±it¸�™ž(´†Bý1r|¾+�žKxŸh äDŒÚ›>"#”Ù_ þlü3Îk�(If\?y�BzšÈ;ºk'2Ç´:Ýá¼ÓsºYNkg‡�üÅ@¦¹»æâŽî¯AÌ©í1Bع…ü‰Kôi� rŽïVX‡�gÈŸ„<H\en‰ý%-gØþxr¸�ŽÑf½5ŠÉ¯›ýZÿ@õ׈6¤/\[YôF2­P73’É7»«çÝ[µYš”„�‘׫…1ÑMÝDÖ¨3;л±#ì×y��ò\¯ÞZr3"i^�±]oÎ+‚Î7Ôm‘ÖÛ’Ìs‡;êÄ åÐótóØÉ«ùž�r¿]ÿ)µ;–ç'Y„oüÓ¼qwÆÇ)òëø­¬�ûŸ"×;Z¸g½1)�ï÷ƒøC·ÃCîšfÙ÷w‚PcìÛ¾ØzjßÏøHQ‘ÈéßC3�_ãO‰Sà ÿ^zálÔògl•ÜÄ6ý§¬‹a¢>”ßhâÇæñ§�-{ÿõëüÖœ"Ä÷}Gf뱕%†XÞ^ÏH2+ ñyß«ù2Zä›ýD¼E°Õä[ã�˻Ү›ÍC×tâ`£¨½AÙ†x2Vg[¶ŠÝZG*慨4_/£bjÉrA²_ý–(ê3%Yí“ °åxa¢]8Ò‘Å©èKº¦…®ë¦æ“ƒ5|fL3uÝ�¶žë¸G€_íÁ!€ ÿ¯�a&袚T…ÿ�0IEND®B`‚pydantic-pydantic-e28e879/docs/logos/ukhomeoffice_logo.png000066400000000000000000000214031526274674700240040ustar00rootroot00000000000000‰PNG  IHDRôôü/¸äPLTEj5™?˜?˜?—{B—~?˜?˜€>–>˜€A—?˜ƒêåTJtRNS–Ú�͉ÇB=zã¼�O”÷ úÑtçÕ«î™ê²Ißi8‘0Y#¶®fÂ4¢ò܃cU^L¦†F'ÙRo-*l´$¨Û“jeHtÚi!„IDATxÚìÁ�€ ý©©`ví¬GM0 ÃðÓqCAG@†ºŽ#î(Û¦éÓÿÿŠÚ%“ô„Öƒ¯É{…¸Æ£;ÂÇ B!„B!„B!„B!„B!Äÿîͧ+ü+Ý´ئ¡º¯?~þüùã—7øGfº†a=mB¨îó·«Žn>IeC¨îíµù»ŒÞÛQ›í(÷ Ôv£èÝœ d™´êBm7ŠîÔ2y»À0Êg\Bm7Šn¶ÉZí¼±!ÑUwÃè³Y¼IôÿÀ­vï³j^;ïÞ Ù½«ïf 9(q hYÈ©îFÑG-@›Z[ØÈ)›ên=–nF°›w2œQß­¢§úœðY•9¬òn}Jft GZrÉEu7ŠþÌ_Ñ9„PÛ_FÏwðJØ÷ž÷ö+¯¹À+�<„Z’G�Â!–¤�‡¯¥Ì^[/a¸â´Ð ”‘<úÙÉ’«Y†�«Qð´÷}«Th™¸JaMÏdºKÖ!”‘4úä=õþu²løÓkö1c‹uèògßh[ý°&³H¢Kô.„"’E×§8§VjÔ‹`‡Cø¤á¤;ÀÉût!]$Y:i§LŽq,ØÐzvž9åV–õŠH=" x>I?mGæö96´—-Éb†m’YÇ.2×ñÝ%ôMÝ'™[$帮ˆdÑãÞÃÎ�¬Z’�ôˠȆ9e¬6-LkŒyö=‹À¤Sš‘lgîɱ3ô=5$о*½Àq9î07¥ ùþÙîy{äË“NŽäÌDïøb®û$›ÃvÙgz§Ô‚PA’è]2‡1û:®´À"Ý»VÏ4$‹Ûú¶H²Ÿuƒ-ɪ×ÃU”csº#$‰Þ«±žg¥‡ßº‹sîJ�±¹†Ègìòî¾¾ÓñËÞ­ì,Ê\^ I¢ÃyFÈ^ëxÛ\Κ‘ÛUi5%Ýêü`¥7^ir¥¯¤¹’DO= Qbˆ?±H× -—ÌáOB0<ÉuW%$‰~$��×èZ„³�wì fœd.=G®y^ g‘†X�Þ�”¼’D ×!ëÀªßž—^ 5«#5àÙ@�g[SÆšöõC±�®È#„’Dׇe,i!äYmÓäEiÀ«À\ñjPúñœoðl‹+”‡2“SB²áÌim°±ào —?øÖÜïÏ­º'éòjÑà$�ÿ¹"E$×}²8æÅ}ÇçÕôƒîìýÃàçW»žÏ2Ò È;$�>ɳ£:ž­§ÍX…l”<7.¯ÉYعc-tî¬;«n `¬–J�ùµ ‘WØ¡L BÉ£/9ÕHÞ‡Z›<¡ÏØ$Or�óãfǘ�Yôg�O²ÛdBÉ£Û :Y’n�—ÐÆv}r®c²zbÌCž±ÙŒävÂ9„:¾³wKÊ*†¿…QTÀ€ *æ€aLËïþ/è ÎI;ý7ºà©²ìqûØÓ6ð~t¬¸Għ\’’IS…‚‹GvIê°ã“#û¥å«üAô±S+A¬‘4]a+iÐ’²Š)÷b’fgi„•ÃTczÙFØoòÑ!Ó™âxžŽŽ°H*°6#˜’,þz;À„äÖvjO„éœ2_ä¢o˜ ð0¨‘ ž¶éx�'ŸäW’µ2ßã¢k$]üò�;Hü­cøøe0Û=ñ]þ :‚&+‹Ò€Üï0—¿TÓñ€ßÑ"a=[™ù*}a4èÐt<¯‘šsþ;2kEïw”~Öx¨qî5Ø0²‰Ü7ùƒè3’Ždò©Xç¯Æ?£b“¿–?|Ø!ó=þhq†œûy„ªRh0¥!¯®ºL�ÓÏö�Q‚\§ï‘Nv¨‘÷£ ÷ÖÑ5ÜG�ԅ˨Ï™rƒµ¨;Lõÿi~Ï�çd=ÛùEÞ�ŽdÎw9Ù¥‹ßä�fï- ­Ð×îŒþ´o<í¼�¶7R®k¬Dã1êOWM–³ÙûWù“èèp‡°í:[àˆ_‚>žxW°gv·Øïò'ѯM–aîòm’­£Ìé¡r /@iØ«Iáz´^¯oúj»N…;&¥ìÆÐ_å¢OŠä ¦AnÕ‘?o·›pÎ.ëQg®ën9}Ý­Z—=Ù="ó=Þ�x,rµ][ýæl5-ˆÚ^Üã\U. ìÖFUuõ3}Ei”ÙÈn ýEÞŽ~t8›0É™3U‹‡t¼¢Ääñ¤¿Á�0±×kPÝ5 ú[6²3ü÷x7ºÕ¥‹m(¡IÎÛ«Uu@=?“{tqƒR´f$m@éߣ ±¹@æK¼]ˆYÏaÂ�à0Ög››M7_ ÕGôGÀö‡‡Gô `°�Ì—x3ºÁù˜pˆChûrÁi­˜ŒÖ¹Ü3º év¤Äßèˆ9Eæ;¼½Cª¥.B¬ Zv»²µi[¨.�?Oï°jç{sózÒ|qû=çÑGæ+¼=×àËîÀ:N¦YSKº$öÎgÍîÑ/b œ·k,^|ÎÆ…;H�ØÍ#ó ÞŠn°�ÏÓ»Ëfv¬¾_é$•DîWKò1Y‰ãã�Ômí¢‰gô¹�œwf\!ó Þ¼yàÕ"mXŒ›åŸ9Sæ²Ñ0ç5ž û³i1,³¹k�ö¦Œ|­U§4k5ΰ0™]ÄøÞ‰ÞfÅaâE!#A‘©fÙŸ0®t¶Ý5äceU¾Oëpë±k­¶pÅ3DÊÁnYlÎ�ùoD÷Y[,â1¬69ƒ.oê”Wj"i"‹PºÜâþ�^P�¹&¹+¸ð ôY}BƒÙrì7x#ú�.ò¸³9Z??vÀ¡)Å·«°nÆ“üïì}ƒq�,äq(lÑçœ6î² –¿ÃëѤåÏ÷cc¶QQš¶gƒÁ ¿¬çÿéÊSºU‰3;P÷÷èµÀÑ]ç½Z¶mê ¼]c„R¡aî&°Ø‚#aJrv‘(†£ÑíðOô«‡3ŒwQC ö!ú\'½ÖAd™�{9ºðémƒ­‡�™Ãlß´�¨•J’Êê?‹3¿Ävݽ¬îѵ°Èú:L(!óq/G÷iæàïW ’Dzú¢m&-Ý‘ÚC=ÚµcÝü¹VÓèýr€Ûmv®�#}î”<,³©Üx9ºÆ46c§^™mâÜdjéjìêúÌ\C. ´]ÅWU_[ºªÚ9¨»ý)È#UÈÎï_àåè•+`,‘c[{¡“?âÈ Žl %­±†žØ=­¿ÚïW…½¸ŸjÚ^Ü}êÝÄz€Â2ïúTôœC+j"%ÌÃwXr©¯TàJ.£)l²ƒ–]Ó;›0 7Û¡} Sƒ›)OËûÀ$Wkd ð÷jt•ÝüÒÅ]¼Ïqˆ�¯>òUå äOò‹´øOjî÷Ý΋œŒ-(Ó"1/ȼëCÑ׌Ðî>*;¡Eoçî¬5w†áî†Ã™aÌ"Gï—[Oîîù>3Ü"xh›*\ž�yÓ§¢ïiàÂèš?Jóü†õm˜tþ§²^ÛÝU’Œ6Ij½MÂûVèôê´�E°©sØÙÓ>ïÕè3Ú€ïqΆ—;Àßœþµ9�!¶ÆôνÞjŒþV ‹–çxŽ9µ°a™7}*ºÎ5€|z ?þhAäÿ™!¬ø›è‘Ô­ÛÛÑè¶É}ÆG“Âå\½fÓ÷Ï{5ºÄÂè Å<š, d­È¿µ÷56‘‹eÐv#'5IÄí=z·ŠT ‚¶d÷Žü¼W£7yUæiPNQèr‡V­ðÁìÞ4ìb!ó-žvº$µfö[ŽÚKo ‘^ Àyn¸PFæmŸŠ>К8SÅ´¾èrá‚›r$Í´Ûévšò9yìçSN{J¶"±©C¤cˆØpÌ¢Þ«Ñë ŽÌ^_(²�ÔŠ·µzVFJaÒ¯³™F¿ª7”ÉÆ®g¨ùUŒä!úÏ#}\P\#ó!ï§'èDÀ_-„.#@vÙ±V�Õi=Úny�®#6b£RE•ô–åÉ‘,ÃåO~T]pçgßéŸ÷úì}‹ÔH ÈŒ�3ÉŒÎ4±;…ŽÃ:rr`)á#îxâ« ¾…eØõ®9/Jîe’ÍÞ?ïÕè;Ú÷æ4sZ¬çQ ZÜ@Y¦a/‰ÑãkOCA’eib¹„¼€Tüèœï/×Þüì‘MŸ÷jôEOGjOÏàrô“iE»Æ¼G×�M"0ɆÞðlÛÓsù%§H"€I˜=Àçó^�~fyezQÉ ]²(ÅG6)!'Ö¼¡¼ß�r“«¢¨Šß00ÙAê@CçBÌÖÞ?ïÕè ‹JÊ9jÌ¥æ\cÜ,R`´d*=£¨p¦7Ói,uyY\Ö¼ªJOØÊ·*õz‰2ïúPt«Æêinþ´·ã@A‹eÂ’@[!)?¢Ã’™òäsÎs“ø#LYFÝûéî*9 ÄFöD¾�{5:d&�v{ÇC‡^89P>œ;Ò3ú`T?¹\ºÉ¸©Oç7”‹té#f£Ø¯ú"ó¶OE/<Ãù Èy˜)8샨ñˆí¦T�êÏÜ+üns|a…:àiÕKZ¶Gî ¼=aCPeÆêÍ+6e·Äfq¸j�dü8½�…Ai|œ `!%×ù­…Nm€™ŽŸl7ìx9ú¢Au-)À\�÷¸p"›({å½$[›ŸA�¬9Û ÅPa—Ãq¶ïý¼gHi¬aC¯„¹¤“à“ÔÓè¹´%¯€Þ­·ÙŸQ-2:E'r7¸Fæã^�>¡i‹ù ‡¸xAÌÂ~dEdacþF?æâ=C�ngívNÑ¢Ž»é< €…ifײ}�×£Cæ Ðæk½Ñ·€œG)aU£éüFŸ ·w¼’gLé•¡š+Ù¤ˆs¶ûÞˆ~¢‡|�]Іä wA‹wQ=ðhîm®Þgr‚]¤Mç§Ùu…nv+НðFtH´-I+!¡yÅê�ñ�ü7:tÎÙ·¹4ò€¼Äy¨ª—°Ê.OÿïDOh(4ª¨6%TÈ¡…TÀTû7z2]Šñº‘s³ÈÚv‡9¤¦™è_á�èˆ8 KHM¨@u¸LœÿŽ>Ú©xÆ@f1ÀÐt�÷áJ†Ùl±w§ËÉš†Ÿé("n˜ ¸oq�»ÆÝ$¦ÓNçéùŸO4n€ø•ZÛ�ëgb¼á}ÄMÑëd BþKs[ ¨·ÉY놪ȵ>EF‘̵<Ïä h±ƒ­/J˜2ì~�Ëc¸):’ÌÆ±zÆÆkß;‘�®JÎh�s#x$O \P)Ì�ñ’ƒÜNæÄ °Gòt?{óAÜ ¶QãpúÄŸURì—í5Ý/ú$’óV¤¡ð=&2+•21 M\�áÆèž0+˜³-±€ž„�5êóóèÖ¾Tæ_±µd9r?å6™½a«þ^wçq*™ŸÀõ0~4:–=Rœ ?§X‡Ét YÁN¼< I¦?Ü“ôGbÝÚB&ó¡N> Jz°ÑaIV±×Ê‘‰W÷åü±D·o‘áF¡ŽoQdº'™”jp=Ãèö-» ©È_Uèbm%ʶ[c‰”Ÿàz8&ÑíóS#ŽÊZêA&<j"ÙpÙÒߎ‘˜-¨ÜçÆqè„·!Ù Âõ�þvt�Öšá§n‚¤Úö?yK†É¨û–ä‡eݾW€PN6²$•Fš|v“?0G¢—Y`+òä—TÒW‡ë�9]'àzhNF_Ëqlˆi¸š“ÑÇ `#íFpNE÷è·  Ýèι-}o²_C(¹ÑœCч˜öÃYfÃÊÜè�Ρè+D©“áîÞ�Cƒ3)T¥<ɼDÖ½¯Ìƒs$zDa葜UöàzhŽDÇŒÍÏiŠdªøÙf®‡æLô5©r¯×cs&:^¹ç¾iíñ9µuM÷M Ï©èð$¥T:ê^õàLt]Ìã^öúŸpˆîúi¸ÑBnôŸ�ý'äFÿ ¹ÑBnôŸ�ý'äFÿ ¹ÑBnôŸ�ý'äFÿ1^O$� þ›3Lnô›Å§¡^;Îg³ùpBŽ&Øâý\¼�ŸÊqœŠ—§ã÷Åg 6Ü?úSôy«÷k‹žþ¸ÿåÍfZ¯…Ï”2ã«Ý…§h¢Ï­°\Ç·eRs«ŸNb#ÍmžºhR€¡ûGÏQ—ƒµ95ÿÇÏO^úò44ìF`% ñ`�¯¿Ïo6’Ô„½0tÿè~ê|°¢.Šÿ™ØH¡©|æ¾x,Ý Í#l¼P#ºÑÄûŠ–¤2LLh=Ö¦ý± ^£|ÀP«o}D7úcóÈ<‘_Ií¶X:Ëù #žZ`+Þç É�þ`â ¤zo�H €0hB •ãOž× çï�àbâÿ<}�o¾ƒ�§ä—ý±DÒü&½Åq¢ãOUp.@]#‚cj”‰Á_Â�þ¯$î¥^p©%iºÔ/Ôä=8‘ ¦rúX7ú£Èq¯‡¡÷<÷>p¦k¸ç�•¨ âX|ƒ‹*ιÑï¬F^]ôz‚;ê'N� ÖÖ½†-nôûŠä¹3·z”ÈQ0¡œFW–°Á�~o=ÚZ x˜;_81r£ÿçt޶`Kîä#FÑýnôÿŽ&ujWø¸3r£;ÄL¿Ã?¦Ê�g\ SàH×p÷.”ôèuØðß�¾žŒf²$JrÆÿÚ�!!æõ¥ô¼Ï ‰ai%6çO±ÓÞSí;¥´œûè\©÷âÏlÿl!— Ä`Û3uYÏ ÷ãxÝ­ŒÞ ÁOM;úWã»yôÈÙ‚kKî…¡Ï7¦½}æzóÉ'¬yƒÉJS–ÄvÆ÷Õù—£v%…ªè/ãRe˜ÞZ뵞Ã/¶USÛ'éÙ8ly9<Þ¹è™æVuœˆK4õvïèë,½QhÔy –/£gË25¥Yèõíe.ó[ÙG]¸Qé†FQ‘ßšf“%Š�‡F99Ëo]»å[Gr€7ÅôL£ 2¿)âÌ ù2i~KÇpÄ+r/+çF›åm+üV¼oôØŠ{ùyºu·Ä½pü2º¾h‰I º È�5™âºrã°ï7<´Z}Ô¡‹¿JÜ{²9¿6¿õ`ÿBÛË™+•Ò.¤ÿY“Ë=oø¢}j>ý«cÓèÑCßd:¡|øjG —ÓþõäŠ;ýÖ�F÷ÃZÒ(z�{•ãº?÷Ñu¾¾ <²*އ%qPV©ó{p ¼d©KE`I¾æ^7†#�’ÁšûA�’p0èªÔÉ?}kѧgGŨI{-†]²-˜ Ðü7X�àå[ÎDÿ¢NÂ…ÃJ½òžÂŸùšŸ<[S„5cËѳW˜+ZO¥[ì@úug¢·©›ZÎU±UW¬@‚Ô­ï}~eW:¢.w½jTÖtÉ&gуԤalFMæ¦ûè°+¸�¾v ú¡£h½ŠMŽŸÆDjB÷‰.HÔu®/%¼ûèæØ—ùÙø,úÜúsrý¬­xsôÀ>úÒ‘èîKòNߟ6ÆulÉÖ»®.5�;D7Z]Í^¨•êiô¨ùœõ*† OgÑÛÖ0k…š…“¯éEê²Î¼¦ç¨ëຸ²¿×r·��üHôLpQ4·FÏ£©ó_Ï©�F÷›GOx­£®bí{`"AM¦:7½×'”NDoSSŠáº©õ«bYj‚?½ k/çÑ?öI¯n£Óè>‹èÂÕèAjRÅrÐH9�¾zY×R¹õ<ý‹ºD̉èûn˜ÌO”�—·³{½ËØ»ÿ0§reOu2z�öÈ0 ß:"7§N†Ñ×*5>ØP¡=ó»DïíO]¯^3^p2z’ö¤…ëob›À¦u=G¢©û€ ÚÓ»KôæáQƒ5²“Ñ»´'å¹Þp›Ôu‰>½åŽí)Ü%zá0ºa*¿{ˆèOÔ�®ÃNœŒ>RSsäM«‰f[8‡3Ñá+w\õÔ[uÏÑnA©?Dô¥J�tí™U;NFGãòÙ¾ÝíoêmꔥCÑ![ŸêæW/šv4ú5êÆzCQÃ",½›Ý}Äüò½ŽcÑÇÔ=[ÎmõãÇ£QC†âRZŕԺOôuùˆõÆÆÎF�¤,ÿá5ukX“¸ófsp¤Ç¢Gú–ÏœL�|z¬ÿd¹#zï]Z®°ÝÃi‘£Ñ¥¦ß²Ú¿4pE™;Êž¹Ó�;êüVÓýÉÓ·Ç‹‚ÕJÙÅ}¢#Ä�€Å¿Îްš<J‡íך�;jÑÎÄæŒ>¥N­šgTëgOs×êrîå½¢{RÔõ«8WS—õ8m‹¹rþhëc9ë9ÎH“{38uÃ�éÕ*…‹£Ššù«T÷ŠŽ78Õrç ŽGr§b:Ô–ÄuË<÷ k¯¸'œ�þÄ)ŽSïÊÅî3É�WÓY�Àý¢£Á½®—Â�6œ�ŽgîÈUóΩ+yaCYá^ß_Ç™@“ßòu88–¤ù{÷È\ÇâÍÃï=’ç^ú#�çUä^¶îxôÓ»Aä‚v"/—ï­³¶PùMéÕZØóv’òŸp:z<Ë=ß;ž7‰FwÃY+ÜÉŽ–Ø[vóÔõë÷Œ~r#‘|aþõö2j¦x0…sÑ�÷Ì{Ý—··!Žl –x$+Î|ÝPh”k¬TI¯áxtUî)m_r{{†fØì~+5~ë·s¡Íò&+rŸ{cÜ5:yšSÆp<º®“§¹(l«·yU!8ZèâÔ -$qçè¨i&À?ÕÍ<ã#ZS’€ÓÑuc•fB8WShæ 'Ñ¿Ctx¢4Ö‹àŸ‹Oކò¯¸M§@ ³5þ©è¨¶i(UÃ¥uƒ†Aìüö§ÎFôgêr6·ˆ .,d^jOqN6ÿKæŸQ8¦F‰àL Á Jn‰›½Ë4¦60#®Á‘üÙœ˜åÍ…ׄÑ"´`h"òB)4ÀÞ¿j~±=Yn•B°ö²{Üн0�å›c\š'¤�Ä.Õ†«�aCÀ…€þ-Ƀ ‹h˜Ç£Oü�E®Ä iæšT7.n?RÒ¿<űZI{ê ^œóNÊÙ­ÂŒ0)dyDiEðC„˜wk Àš0ðnÅ,B=9Q —ÒíÙè)~ûaþË-¾…AàC»A®ÔnV^«øq±@(#fUjÔ¼ÔK–Xiu>7:œÖÕÍW«Õ�ý×k¾Œ”.•†¢ý(_ÉÐz å Ú݃góZ� ‰D¸¿íì¹¼­j°ø4]?ãîJx"žØ Ëûßü„w—Ëår¹\.—Ëår¹\®¿Øƒ ÿ×FPUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU•öà�@Ðÿ×f?²­e5âÛIEND®B`‚pydantic-pydantic-e28e879/docs/migration.md000066400000000000000000001414631526274674700210130ustar00rootroot00000000000000--- description: Migrating from Pydantic V1. --- Pydantic V2 introduces a number of changes to the API, including some breaking changes. This page provides a guide highlighting the most important changes to help you migrate your code from Pydantic V1 to Pydantic V2. ## Install Pydantic V2 Pydantic V2 is now the current production release of Pydantic. You can install Pydantic V2 from PyPI: ```bash pip install -U pydantic ``` If you encounter any issues, please [create an issue in GitHub](https://github.com/pydantic/pydantic/issues) using the `bug V2` label. This will help us to actively monitor and track errors, and to continue to improve the library's performance. If you need to use latest Pydantic V1 for any reason, see the [Continue using Pydantic V1 features](#continue-using-pydantic-v1-features) section below for details on installation and imports from `pydantic.v1`. ## Code transformation tool We have created a tool to help you migrate your code. This tool is still in beta, but we hope it will help you to migrate your code more quickly. You can install the tool from PyPI: ```bash pip install bump-pydantic ``` The usage is simple. If your project structure is: * repo_folder * my_package * ... Then you'll want to do: cd /path/to/repo_folder bump-pydantic my_package See more about it on the [Bump Pydantic](https://github.com/pydantic/bump-pydantic) repository. ## Continue using Pydantic V1 features Pydantic V1 is still available when you need it, though we recommend migrating to Pydantic V2 for its improvements and new features. If you need to use latest Pydantic V1, you can install it with: ```bash pip install "pydantic==1.*" ``` The Pydantic V2 package also continues to provide access to the Pydantic V1 API by importing through `pydantic.v1`. For example, you can use the `BaseModel` class from Pydantic V1 instead of the Pydantic V2 `pydantic.BaseModel` class: ```python {test="skip" lint="skip" upgrade="skip"} from pydantic.v1 import BaseModel ``` You can also import functions that have been removed from Pydantic V2, such as `lenient_isinstance`: ```python {test="skip" lint="skip" upgrade="skip"} from pydantic.v1.utils import lenient_isinstance ``` See the [Pydantic V1 documentation](https://pydantic.dev/docs/validation/1.10/overview/). ### Using Pydantic v1 features in a v1/v2 environment As of `pydantic>=1.10.17`, the `pydantic.v1` namespace can be used within V1. This makes it easier to migrate to V2, which also supports the `pydantic.v1` namespace. In order to unpin a `pydantic<2` dependency and continue using V1 features, take the following steps: 1. Replace `pydantic<2` with `pydantic>=1.10.17` 2. Find and replace all occurrences of: ```python {test="skip" lint="skip" upgrade="skip"} from pydantic. import ``` with: ```python {test="skip" lint="skip" upgrade="skip"} from pydantic.v1. import ``` Here's how you can import `pydantic`'s v1 features based on your version of `pydantic`: === "`pydantic>=1.10.17,<3`" As of `v1.10.17` the `.v1` namespace is available in V1, allowing imports as below: ```python {test="skip" lint="skip" upgrade="skip"} from pydantic.v1.fields import ModelField ``` === "`pydantic<3`" All versions of Pydantic V1 and V2 support the following import pattern, in case you don't know which version of Pydantic you are using: ```python {test="skip" lint="skip" upgrade="skip"} try: from pydantic.v1.fields import ModelField except ImportError: from pydantic.fields import ModelField ``` !!! note When importing modules using `pydantic>=1.10.17,<2` with the `.v1` namespace these modules will *not* be the **same** module as the same import without the `.v1` namespace, but the symbols imported *will* be. For example `pydantic.v1.fields is not pydantic.fields` but `pydantic.v1.fields.ModelField is pydantic.fields.ModelField`. Luckily, this is not likely to be relevant in the vast majority of cases. It's just an unfortunate consequence of providing a smoother migration experience. ## Migration guide The following sections provide details on the most important changes in Pydantic V2. ### Changes to `pydantic.BaseModel` Various method names have been changed; all non-deprecated `BaseModel` methods now have names matching either the format `model_.*` or `__.*pydantic.*__`. Where possible, we have retained the deprecated methods with their old names to help ease migration, but calling them will emit `DeprecationWarning`s. | Pydantic V1 | Pydantic V2 | | ----------- | ------------ | | `__fields__` | `model_fields` | | `__private_attributes__` | `__pydantic_private__` | | `__validators__` | `__pydantic_validator__` | | `construct()` | `model_construct()` | | `copy()` | `model_copy()` | | `dict()` | `model_dump()` | | `json_schema()` | `model_json_schema()` | | `json()` | `model_dump_json()` | | `parse_obj()` | `model_validate()` | | `update_forward_refs()` | `model_rebuild()` | * Some of the built-in data-loading functionality has been slated for removal. In particular, `parse_raw` and `parse_file` are now deprecated. In Pydantic V2, `model_validate_json` works like `parse_raw`. Otherwise, you should load the data and then pass it to `model_validate`. * The `from_orm` method has been deprecated; you can now just use `model_validate` (equivalent to `parse_obj` from Pydantic V1) to achieve something similar, as long as you've set `from_attributes=True` in the model config. * The `__eq__` method has changed for models. * Models can only be equal to other `BaseModel` instances. * For two model instances to be equal, they must have the same: * Type (or, in the case of generic models, non-parametrized generic origin type) * Field values * Extra values (only relevant when `model_config['extra'] == 'allow'`) * Private attribute values; models with different values of private attributes are no longer equal. * Models are no longer equal to the dicts containing their data. * Non-generic models of different types are never equal. * Generic models with different origin types are never equal. We don't require *exact* type equality so that, for example, instances of `MyGenericModel[Any]` could be equal to instances of `MyGenericModel[int]`. * We have replaced the use of the `__root__` field to specify a "custom root model" with a new type called [`RootModel`](concepts/models.md#rootmodel-and-custom-root-types) which is intended to replace the functionality of using a field called `__root__` in Pydantic V1. Note, `RootModel` types no longer support the `arbitrary_types_allowed` config setting. See [this issue comment](https://github.com/pydantic/pydantic/issues/6710#issuecomment-1700948167) for an explanation. * We have significantly expanded Pydantic's capabilities related to customizing serialization. In particular, we have added the [`@field_serializer`](api/functional_serializers.md#pydantic.functional_serializers.field_serializer), [`@model_serializer`](api/functional_serializers.md#pydantic.functional_serializers.model_serializer), and [`@computed_field`](api/fields.md#pydantic.fields.computed_field) decorators, which each address various shortcomings from Pydantic V1. * See [Custom serializers](concepts/serialization.md#serializers) for the usage docs of these new decorators. * Due to performance overhead and implementation complexity, we have now deprecated support for specifying `json_encoders` in the model config. This functionality was originally added for the purpose of achieving custom serialization logic, and we think the new serialization decorators are a better choice in most common scenarios. * We have changed the behavior related to serializing subclasses of models when they occur as nested fields in a parent model. In V1, we would always include all fields from the subclass instance. In V2, when we dump a model, we only include the fields that are defined on the annotated type of the field. This helps prevent some accidental security bugs. You can read more about this (including how to opt out of this behavior) in the [relevant section](concepts/serialization.md#subclasses-of-model-like-types) of the model exporting docs. * `GetterDict` has been removed as it was just an implementation detail of `orm_mode`, which has been removed. * In many cases, arguments passed to the constructor will be **copied** in order to perform validation and, where necessary, coercion (see the [documentation](./concepts/models.md#attribute-copies)). This is notable in the case of passing mutable objects as arguments to a constructor. * The `.json()` method is deprecated, and attempting to use this deprecated method with arguments such as `indent` or `ensure_ascii` may lead to confusing errors. For best results, switch to V2's equivalent, `model_dump_json()`. If you'd still like to use said arguments, you can use [this workaround](https://github.com/pydantic/pydantic/issues/8825#issuecomment-1946206415). * JSON serialization of non-string key values is generally done with `str(key)`, leading to some changes in behavior such as the following: ```python {test="skip"} from pydantic import BaseModel as V2BaseModel from pydantic.v1 import BaseModel as V1BaseModel class V1Model(V1BaseModel): a: dict[str | None, int] class V2Model(V2BaseModel): a: dict[str | None, int] v1_model = V1Model(a={None: 123}) v2_model = V2Model(a={None: 123}) # V1 print(v1_model.json()) #> {"a": {"null": 123}} # V2 print(v2_model.model_dump_json()) #> {"a":{"None":123}} ``` * `model_dump_json()` results are compacted in order to save space, and don't always exactly match that of `json.dumps()` output. That being said, you can easily modify the separators used in `json.dumps()` results in order to align the two outputs: ```python {test="skip"} import json from pydantic import BaseModel as V2BaseModel from pydantic.v1 import BaseModel as V1BaseModel class V1Model(V1BaseModel): a: list[str] class V2Model(V2BaseModel): a: list[str] v1_model = V1Model(a=['fancy', 'sushi']) v2_model = V2Model(a=['fancy', 'sushi']) # V1 print(v1_model.json()) #> {"a": ["fancy", "sushi"]} # V2 print(v2_model.model_dump_json()) #> {"a":["fancy","sushi"]} # Plain json.dumps print(json.dumps(v2_model.model_dump())) #> {"a": ["fancy", "sushi"]} # Modified json.dumps print(json.dumps(v2_model.model_dump(), separators=(',', ':'))) #> {"a":["fancy","sushi"]} ``` ### Changes to `pydantic.generics.GenericModel` The `pydantic.generics.GenericModel` class is no longer necessary, and has been removed. Instead, you can now create generic `BaseModel` subclasses by just adding `Generic` as a parent class on a `BaseModel` subclass directly. This looks like `class MyGenericModel(BaseModel, Generic[T]): ...`. Mixing of V1 and V2 models is not supported which means that type parameters of such generic `BaseModel` (V2) cannot be V1 models. While it may not raise an error, we strongly advise against using *parametrized* generics in `isinstance` checks. * For example, you should not do `isinstance(my_model, MyGenericModel[int])`. However, it is fine to do `isinstance(my_model, MyGenericModel)`. (Note that for standard generics, it would raise an error to do a subclass check with a parameterized generic.) * If you need to perform `isinstance` checks against parametrized generics, you can do this by subclassing the parametrized generic class. This looks like `class MyIntModel(MyGenericModel[int]): ...` and `isinstance(my_model, MyIntModel)`. Find more information in the [Generic models](concepts/models.md#generic-models) documentation. ### Changes to `pydantic.Field` `Field` no longer supports arbitrary keyword arguments to be added to the JSON schema. Instead, any extra data you want to add to the JSON schema should be passed as a dictionary to the `json_schema_extra` keyword argument. In Pydantic V1, the `alias` property returns the field's name when no alias is set. In Pydantic V2, this behavior has changed to return `None` when no alias is set. The following properties have been removed from or changed in `Field`: * `const` * `min_items` (use `min_length` instead) * `max_items` (use `max_length` instead) * `unique_items` * `allow_mutation` (use `frozen` instead) * `regex` (use `pattern` instead) * `final` (use the [typing.Final][] type hint instead) Field constraints are no longer automatically pushed down to the parameters of generics. For example, you can no longer validate every element of a list matches a regex by providing `my_list: list[str] = Field(pattern=".*")`. Instead, use [`typing.Annotated`][] to provide an annotation on the `str` itself: `my_list: list[Annotated[str, Field(pattern=".*")]]` ### Changes to dataclasses Pydantic [dataclasses](concepts/dataclasses.md) continue to be useful for enabling the data validation on standard dataclasses without having to subclass `BaseModel`. Pydantic V2 introduces the following changes to this dataclass behavior: * When used as fields, dataclasses (Pydantic or vanilla) no longer accept tuples as validation inputs; dicts should be used instead. * The `__post_init__` in Pydantic dataclasses will now be called *after* validation, rather than before. * As a result, the `__post_init_post_parse__` method would have become redundant, so has been removed. * Pydantic no longer supports `extra='allow'` for Pydantic dataclasses, where extra fields passed to the initializer would be stored as extra attributes on the dataclass. `extra='ignore'` is still supported for the purpose of ignoring unexpected fields while parsing data, they just won't be stored on the instance. * Pydantic dataclasses no longer have an attribute `__pydantic_model__`, and no longer use an underlying `BaseModel` to perform validation or provide other functionality. * To perform validation, generate a JSON schema, or make use of any other functionality that may have required `__pydantic_model__` in V1, you should now wrap the dataclass with a [`TypeAdapter`][pydantic.type_adapter.TypeAdapter] ([discussed more below](#introduction-of-typeadapter)) and make use of its methods. * In Pydantic V1, if you used a vanilla (i.e., non-Pydantic) dataclass as a field, the config of the parent type would be used as though it was the config for the dataclass itself as well. In Pydantic V2, this is no longer the case. * In Pydantic V2, to override the config (like you would with `model_config` on a `BaseModel`), you can use the `config` parameter on the `@dataclass` decorator. See [Dataclass Config](concepts/dataclasses.md#dataclass-config) for examples. ### Changes to config * In Pydantic V2, to specify config on a model, you should set a class attribute called `model_config` to be a dict with the key/value pairs you want to be used as the config. The Pydantic V1 behavior to create a class called `Config` in the namespace of the parent `BaseModel` subclass is now deprecated. * When subclassing a model, the `model_config` attribute is inherited. This is helpful in the case where you'd like to use a base class with a given configuration for many models. Note, if you inherit from multiple `BaseModel` subclasses, like `class MyModel(Model1, Model2)`, the non-default settings in the `model_config` attribute from the two models will be merged, and for any settings defined in both, those from `Model2` will override those from `Model1`. * The following config settings have been removed: * `allow_mutation` — this has been removed. You should be able to use [`frozen`](api/config.md#pydantic.config.ConfigDict.frozen) equivalently (inverse of current use). * `error_msg_templates` * `fields` — this was the source of various bugs, so has been removed. You should be able to use `Annotated` on fields to modify them as desired. * `getter_dict` — `orm_mode` has been removed, and this implementation detail is no longer necessary. * `smart_union` - the default `union_mode` in Pydantic V2 is `'smart'`. * `underscore_attrs_are_private` — the Pydantic V2 behavior is now the same as if this was always set to `True` in Pydantic V1. * `json_loads` * `json_dumps` * `copy_on_model_validation` * `post_init_call` * The following config settings have been renamed: * `allow_population_by_field_name` → `populate_by_name` (or `validate_by_name` starting in v2.11) * `anystr_lower` → `str_to_lower` * `anystr_strip_whitespace` → `str_strip_whitespace` * `anystr_upper` → `str_to_upper` * `keep_untouched` → `ignored_types` * `max_anystr_length` → `str_max_length` * `min_anystr_length` → `str_min_length` * `orm_mode` → `from_attributes` * `schema_extra` → `json_schema_extra` * `validate_all` → `validate_default` See the [`ConfigDict` API reference][pydantic.config.ConfigDict] for more details. ### Changes to validators #### `@validator` and `@root_validator` are deprecated * `@validator` has been deprecated, and should be replaced with [`@field_validator`](concepts/validators.md), which provides various new features and improvements. * The new `@field_validator` decorator does not have the `each_item` keyword argument; validators you want to apply to items within a generic container should be added by annotating the type argument. See [validators in Annotated metadata](concepts/types.md#using-the-annotated-pattern) for details. This looks like `list[Annotated[int, Field(ge=0)]]` * Even if you keep using the deprecated `@validator` decorator, you can no longer add the `field` or `config` arguments to the signature of validator functions. If you need access to these, you'll need to migrate to `@field_validator` — see the [next section](#changes-to-validators-allowed-signatures) for more details. * If you use the `always=True` keyword argument to a validator function, note that standard validators for the annotated type will *also* be applied even to defaults, not just the custom validators. For example, despite the fact that the validator below will never error, the following code raises a `ValidationError`: !!! note To avoid this, you can use the `validate_default` argument in the `Field` function. When set to `True`, it mimics the behavior of `always=True` in Pydantic v1. However, the new way of using `validate_default` is encouraged as it provides more flexibility and control. ```python {test="skip"} from pydantic import BaseModel, validator class Model(BaseModel): x: str = 1 @validator('x', always=True) @classmethod def validate_x(cls, v): return v Model() ``` * `@root_validator` has been deprecated, and should be replaced with [`@model_validator`](api/functional_validators.md#pydantic.functional_validators.model_validator), which also provides new features and improvements. Be aware that the allowed signatures have changed (see the [relevant documentation](./concepts/validators.md#model-validators)). * Under some circumstances (such as assignment when `model_config['validate_assignment'] is True`), the `@model_validator` decorator will receive an instance of the model, not a dict of values. You may need to be careful to handle this case. * Even if you keep using the deprecated `@root_validator` decorator, due to refactors in validation logic, you can no longer run with `skip_on_failure=False` (which is the default value of this keyword argument, so must be set explicitly to `True`). #### Changes to `@validator`'s allowed signatures In Pydantic V1, functions wrapped by `@validator` could receive keyword arguments with metadata about what was being validated. Some of these arguments have been removed from `@field_validator` in Pydantic V2: * `config`: Pydantic V2's config is now a dictionary instead of a class, which means this argument is no longer backwards compatible. If you need to access the configuration you should migrate to `@field_validator` and use `info.config`. * `field`: this argument used to be a `ModelField` object, which was a quasi-internal class that no longer exists in Pydantic V2. Most of this information can still be accessed by using the field name from `info.field_name` to index into `cls.model_fields` ```python from pydantic import BaseModel, ValidationInfo, field_validator class Model(BaseModel): x: int @field_validator('x') def val_x(cls, v: int, info: ValidationInfo) -> int: assert info.config is not None print(info.config.get('title')) #> Model print(cls.model_fields[info.field_name].is_required()) #> True return v Model(x=1) ``` #### `TypeError` is no longer converted to `ValidationError` in validators Previously, when raising a `TypeError` within a validator function, that error would be wrapped into a `ValidationError` and, in some cases (such as with FastAPI), these errors might be displayed to end users. This led to a variety of undesirable behavior — for example, calling a function with the wrong signature might produce a user-facing `ValidationError`. However, in Pydantic V2, when a `TypeError` is raised in a validator, it is no longer converted into a `ValidationError`: ```python import pytest from pydantic import BaseModel, field_validator class Model(BaseModel): x: int @field_validator('x') def val_x(cls, v: int) -> int: return str.lower(v) # raises a TypeError with pytest.raises(TypeError): Model(x=1) ``` This applies to all validation decorators. #### Validator behavior changes Pydantic V2 includes some changes to type coercion. For example: * coercing `int`, `float`, and `Decimal` values to strings is now optional and disabled by default, see [Coerce Numbers to Strings][pydantic.config.ConfigDict.coerce_numbers_to_str]. * iterable of pairs is no longer coerced to a dict. See the [Conversion table](concepts/conversion_table.md) for details on Pydantic V2 type coercion defaults. #### The `allow_reuse` keyword argument is no longer necessary Previously, Pydantic tracked "reused" functions in decorators as this was a common source of mistakes. We did this by comparing the function's fully qualified name (module name + function name), which could result in false positives. The `allow_reuse` keyword argument could be used to disable this when it was intentional. Our approach to detecting repeatedly defined functions has been overhauled to only error for redefinition within a single class, reducing false positives and bringing the behavior more in line with the errors that type checkers and linters would give for defining a method with the same name multiple times in a single class definition. In nearly all cases, if you were using `allow_reuse=True`, you should be able to simply delete that keyword argument and have things keep working as expected. #### `@validate_arguments` has been renamed to `@validate_call` In Pydantic V2, the `@validate_arguments` decorator has been renamed to `@validate_call`. In Pydantic V1, the decorated function had various attributes added, such as `raw_function`, and `validate` (which could be used to validate arguments without actually calling the decorated function). Due to limited use of these attributes, and performance-oriented changes in implementation, we have not preserved this functionality in `@validate_call`. ### Input types are not preserved In Pydantic V1 we made great efforts to preserve the types of all field inputs for generic collections when they were proper subtypes of the field annotations. For example, given the annotation `Mapping[str, int]` if you passed in a `collection.Counter()` you'd get a `collection.Counter()` as the value. Supporting this behavior in V2 would have negative performance implications for the general case (we'd have to check types every time) and would add a lot of complexity to validation. Further, even in V1 this behavior was inconsistent and partially broken: it did not work for many types (`str`, `UUID`, etc.), and for generic collections it's impossible to re-build the original input correctly without a lot of special casing (consider `ChainMap`; rebuilding the input is necessary because we need to replace values after validation, e.g. if coercing strings to ints). In Pydantic V2 we no longer attempt to preserve the input type in all cases; instead, we only promise that the output type will match the type annotations. Going back to the `Mapping` example, we promise the output will be a valid `Mapping`, and in practice it will be a plain `dict`: ```python from collections.abc import Mapping from pydantic import TypeAdapter class MyDict(dict): pass ta = TypeAdapter(Mapping[str, int]) v = ta.validate_python(MyDict()) print(type(v)) #> ``` If you want the output type to be a specific type, consider annotating it as such or implementing a custom validator: ```python from collections.abc import Mapping from typing import Annotated, Any, TypeVar from pydantic import ( TypeAdapter, ValidationInfo, ValidatorFunctionWrapHandler, WrapValidator, ) def restore_input_type( value: Any, handler: ValidatorFunctionWrapHandler, _info: ValidationInfo ) -> Any: return type(value)(handler(value)) T = TypeVar('T') PreserveType = Annotated[T, WrapValidator(restore_input_type)] ta = TypeAdapter(PreserveType[Mapping[str, int]]) class MyDict(dict): pass v = ta.validate_python(MyDict()) assert type(v) is MyDict ``` While we don't promise to preserve input types everywhere, we *do* preserve them for subclasses of `BaseModel`, and for dataclasses: ```python import pydantic.dataclasses from pydantic import BaseModel class InnerModel(BaseModel): x: int class OuterModel(BaseModel): inner: InnerModel class SubInnerModel(InnerModel): y: int m = OuterModel(inner=SubInnerModel(x=1, y=2)) print(m) #> inner=SubInnerModel(x=1, y=2) @pydantic.dataclasses.dataclass class InnerDataclass: x: int @pydantic.dataclasses.dataclass class SubInnerDataclass(InnerDataclass): y: int @pydantic.dataclasses.dataclass class OuterDataclass: inner: InnerDataclass d = OuterDataclass(inner=SubInnerDataclass(x=1, y=2)) print(d) #> OuterDataclass(inner=SubInnerDataclass(x=1, y=2)) ``` ### Changes to Handling of Standard Types #### Dicts Iterables of pairs (which include empty iterables) no longer pass validation for fields of type `dict`. #### Unions While union types will still attempt validation of each choice from left to right, they now preserve the type of the input whenever possible, even if the correct type is not the first choice for which the input would pass validation. As a demonstration, consider the following example: ```python from pydantic import BaseModel class Model(BaseModel): x: int | str print(Model(x='1')) #> x='1' ``` In Pydantic V1, the printed result would have been `x=1`, since the value would pass validation as an `int`. In Pydantic V2, we recognize that the value is an instance of one of the cases and short-circuit the standard union validation. To revert to the non-short-circuiting left-to-right behavior of V1, annotate the union with `Field(union_mode='left_to_right')`. See [Union Mode](./concepts/unions.md#union-modes) for more details. #### Required, optional, and nullable fields Pydantic V2 changes some of the logic for specifying whether a field annotated as `Optional` is required (i.e., has no default value) or not (i.e., has a default value of `None` or any other value of the corresponding type), and now more closely matches the behavior of `dataclasses`. Similarly, fields annotated as `Any` no longer have a default value of `None`. The following table describes the behavior of field annotations in V2: | State | Field Definition | |-------------------------------------------------------|-----------------------------| | Required, cannot be `None` | `f1: str` | | Not required, cannot be `None`, is `'abc'` by default | `f2: str = 'abc'` | | Required, can be `None` | `f3: Optional[str]` | | Not required, can be `None`, is `None` by default | `f4: Optional[str] = None` | | Not required, can be `None`, is `'abc'` by default | `f5: Optional[str] = 'abc'` | | Required, can be any type (including `None`) | `f6: Any` | | Not required, can be any type (including `None`) | `f7: Any = None` | !!! note A field annotated as `typing.Optional[T]` will be required, and will allow for a value of `None`. It does not mean that the field has a default value of `None`. *(This is a breaking change from V1.)* !!! note Any default value if provided makes a field not required. Here is a code example demonstrating the above: ```python {lint="skip"} from typing import Optional from pydantic import BaseModel, ValidationError class Foo(BaseModel): f1: str # required, cannot be None f2: Optional[str] # required, can be None - same as str | None f3: Optional[str] = None # not required, can be None f4: str = 'Foobar' # not required, but cannot be None try: Foo(f1=None, f2=None, f4='b') except ValidationError as e: print(e) """ 1 validation error for Foo f1 Input should be a valid string [type=string_type, input_value=None, input_type=NoneType] """ ``` #### Patterns / regex on strings Pydantic V1 used Python's regex library. Pydantic V2 uses the Rust [regex crate]. This crate is not just a "Rust version of regular expressions", it's a completely different approach to regular expressions. In particular, it promises linear time searching of strings in exchange for dropping a couple of features (namely look arounds and backreferences). We believe this is a tradeoff worth making, in particular because Pydantic is used to validate untrusted input where ensuring things don't accidentally run in exponential time depending on the untrusted input is important. On the flipside, for anyone not using these features complex regex validation should be orders of magnitude faster because it's done in Rust and in linear time. If you still want to use Python's regex library, you can use the [`regex_engine`](./api/config.md#pydantic.config.ConfigDict.regex_engine) config setting. [regex crate]: https://github.com/rust-lang/regex ### Type conversion from floats to integers In V1, whenever a field was annotated as `int`, any float value would be accepted, which could lead to a potential data loss if the float value contains a non-zero decimal part. In V2, type conversion from floats to integers is only allowed if the decimal part is zero: ```python from pydantic import BaseModel, ValidationError class Model(BaseModel): x: int print(Model(x=10.0)) #> x=10 try: Model(x=10.2) except ValidationError as err: print(err) """ 1 validation error for Model x Input should be a valid integer, got a number with a fractional part [type=int_from_float, input_value=10.2, input_type=float] """ ``` ### Introduction of `TypeAdapter` Pydantic V1 had weak support for validating or serializing non-`BaseModel` types. To work with them, you had to either create a "root" model or use the utility functions in `pydantic.tools` (namely, `parse_obj_as` and `schema_of`). In Pydantic V2 this is *a lot* easier: the [`TypeAdapter`][pydantic.type_adapter.TypeAdapter] class lets you create an object with methods for validating, serializing, and producing JSON schemas for arbitrary types. This serves as a complete replacement for `parse_obj_as` and `schema_of` (which are now deprecated), and also covers some of the use cases of "root" models. ([`RootModel`](concepts/models.md#rootmodel-and-custom-root-types), [discussed above](#changes-to-pydanticbasemodel), covers the others.) ```python from pydantic import TypeAdapter adapter = TypeAdapter(list[int]) assert adapter.validate_python(['1', '2', '3']) == [1, 2, 3] print(adapter.json_schema()) #> {'items': {'type': 'integer'}, 'type': 'array'} ``` Due to limitations of inferring generic types with common type checkers, to get proper typing in some scenarios, you may need to explicitly specify the generic parameter: ```python {test="skip"} from pydantic import TypeAdapter adapter = TypeAdapter[str | int](str | int) ... ``` See [Type Adapter](concepts/type_adapter.md) for more information. ### Defining custom types We have completely overhauled the way custom types are defined in pydantic. We have exposed hooks for generating both `pydantic-core` and JSON schemas, allowing you to get all the performance benefits of Pydantic V2 even when using your own custom types. We have also introduced ways to use [`typing.Annotated`][] to add custom validation to your own types. The main changes are: * `__get_validators__` should be replaced with `__get_pydantic_core_schema__`. See [Custom Data Types](concepts/types.md#customizing_validation_with_get_pydantic_core_schema) for more information. * `__modify_schema__` becomes `__get_pydantic_json_schema__`. See [JSON Schema Customization](concepts/json_schema.md#customizing-json-schema) for more information. Additionally, you can use [`typing.Annotated`][] to modify or provide the `__get_pydantic_core_schema__` and `__get_pydantic_json_schema__` functions of a type by annotating it, rather than modifying the type itself. This provides a powerful and flexible mechanism for integrating third-party types with Pydantic, and in some cases may help you remove hacks from Pydantic V1 introduced to work around the limitations for custom types. See [Custom Data Types](concepts/types.md#custom-types) for more information. ### Changes to JSON schema generation We received many requests over the years to make changes to the JSON schemas that pydantic generates. In Pydantic V2, we have tried to address many of the common requests: * The JSON schema for `Optional` fields now indicates that the value `null` is allowed. * The `Decimal` type is now exposed in JSON schema (and serialized) as a string. * The JSON schema no longer preserves namedtuples as namedtuples. * The JSON schema we generate by default now targets draft 2020-12 (with some OpenAPI extensions). * When they differ, you can now specify if you want the JSON schema representing the inputs to validation, or the outputs from serialization. However, there have been many reasonable requests over the years for changes which we have not chosen to implement. In Pydantic V1, even if you were willing to implement changes yourself, it was very difficult because the JSON schema generation process involved various recursive function calls; to override one, you'd have to copy and modify the whole implementation. In Pydantic V2, one of our design goals was to make it easier to customize JSON schema generation. To this end, we have introduced the class [`GenerateJsonSchema`](api/json_schema.md#pydantic.json_schema.GenerateJsonSchema), which implements the translation of a type's pydantic-core schema into a JSON schema. By design, this class breaks the JSON schema generation process into smaller methods that can be easily overridden in subclasses to modify the "global" approach to generating JSON schema. The various methods that can be used to produce JSON schema (such as `BaseModel.model_json_schema` or `TypeAdapter.json_schema`) accept a keyword argument `schema_generator: type[GenerateJsonSchema] = GenerateJsonSchema`, and you can pass your custom subclass to these methods in order to use your own approach to generating JSON schema. Hopefully this means that if you disagree with any of the choices we've made, or if you are reliant on behaviors in Pydantic V1 that have changed in Pydantic V2, you can use a custom `schema_generator`, modifying the `GenerateJsonSchema` class as necessary for your application. ### `BaseSettings` has moved to `pydantic-settings` [`BaseSettings`](api/pydantic_settings.md#pydantic_settings.BaseSettings), the base object for Pydantic [settings management](concepts/pydantic_settings.md), has been moved to a separate package, [`pydantic-settings`](https://github.com/pydantic/pydantic-settings). Also, the `parse_env_var` classmethod has been removed. So, you need to [customise settings sources](concepts/pydantic_settings.md#customise-settings-sources) to have your own parsing function. ### Color and Payment Card Numbers moved to `pydantic-extra-types` The following special-use types have been moved to the [Pydantic Extra Types](https://github.com/pydantic/pydantic-extra-types) package, which may be installed separately if needed. * [Color Types](api/pydantic_extra_types_color.md) * [Payment Card Numbers](api/pydantic_extra_types_payment.md) ### Url and Dsn types in `pydantic.networks` no longer inherit from `str` In Pydantic V1 the [`AnyUrl`][pydantic.networks.AnyUrl] type inherited from `str`, and all the other `Url` and `Dsn` types inherited from these. In Pydantic V2 these types are built on two new `Url` and `MultiHostUrl` classes using `Annotated`. Inheriting from `str` had upsides and downsides, and for V2 we decided it would be better to remove this. To use these types in APIs which expect `str` you'll now need to convert them (with `str(url)`). Pydantic V2 uses Rust's [Url](https://crates.io/crates/url) crate for URL validation. Some of the URL validation differs slightly from the previous behavior in V1. One notable difference is that the new `Url` types append slashes to the validated version if no path is included, even if a slash is not specified in the argument to a `Url` type constructor. See the example below for this behavior: ```python from pydantic import AnyUrl assert str(AnyUrl(url='https://google.com')) == 'https://google.com/' assert str(AnyUrl(url='https://google.com/')) == 'https://google.com/' assert str(AnyUrl(url='https://google.com/api')) == 'https://google.com/api' assert str(AnyUrl(url='https://google.com/api/')) == 'https://google.com/api/' ``` If you still want to use the old behavior without the appended slash, take a look at this [solution](https://github.com/pydantic/pydantic/issues/7186#issuecomment-1690235887). ### Constrained types The `Constrained*` classes were *removed*, and you should replace them by `Annotated[, Field(...)]`, for example: ```python {test="skip"} from pydantic import BaseModel, ConstrainedInt class MyInt(ConstrainedInt): ge = 0 class Model(BaseModel): x: MyInt ``` ...becomes: ```python from typing import Annotated from pydantic import BaseModel, Field MyInt = Annotated[int, Field(ge=0)] class Model(BaseModel): x: MyInt ``` Read more about it in the [Composing types via `Annotated`](concepts/types.md#using-the-annotated-pattern) docs. For `ConstrainedStr` you can use [`StringConstraints`][pydantic.types.StringConstraints] instead. ### Mypy plugins Pydantic V2 contains a [mypy](https://mypy.readthedocs.io/en/stable/extending_mypy.html#configuring-mypy-to-use-plugins) plugin in `pydantic.mypy`. When using [V1 features](migration.md#continue-using-pydantic-v1-features) the `pydantic.v1.mypy` plugin might need to also be enabled. To configure the mypy plugins: === "`mypy.ini`" ```ini [mypy] plugins = pydantic.mypy, pydantic.v1.mypy # include `.v1.mypy` if required. ``` === "`pyproject.toml`" ```toml [tool.mypy] plugins = [ "pydantic.mypy", "pydantic.v1.mypy", # include `.v1.mypy` if required. ] ``` ## Other changes * Dropped support for [`email-validator<2.0.0`](https://github.com/JoshData/python-email-validator). Make sure to update using `pip install -U email-validator`. ## Moved in Pydantic V2 | Pydantic V1 | Pydantic V2 | | --- | --- | | `pydantic.BaseSettings` | [`pydantic_settings.BaseSettings`](#basesettings-has-moved-to-pydantic-settings) | | `pydantic.color` | [`pydantic_extra_types.color`][pydantic_extra_types.color] | | `pydantic.types.PaymentCardBrand` | [`pydantic_extra_types.PaymentCardBrand`](#color-and-payment-card-numbers-moved-to-pydantic-extra-types) | | `pydantic.types.PaymentCardNumber` | [`pydantic_extra_types.PaymentCardNumber`](#color-and-payment-card-numbers-moved-to-pydantic-extra-types) | | `pydantic.utils.version_info` | [`pydantic.version.version_info`][pydantic.version.version_info] | | `pydantic.error_wrappers.ValidationError` | [`pydantic.ValidationError`][pydantic_core.ValidationError] | | `pydantic.utils.to_camel` | [`pydantic.alias_generators.to_pascal`][pydantic.alias_generators.to_pascal] | | `pydantic.utils.to_lower_camel` | [`pydantic.alias_generators.to_camel`][pydantic.alias_generators.to_camel] | | `pydantic.PyObject` | [`pydantic.ImportString`][pydantic.types.ImportString] | ## Deprecated and moved in Pydantic V2 | Pydantic V1 | Pydantic V2 | | --- | --- | | `pydantic.tools.schema_of` | `pydantic.deprecated.tools.schema_of` | | `pydantic.tools.parse_obj_as` | `pydantic.deprecated.tools.parse_obj_as` | | `pydantic.tools.schema_json_of` | `pydantic.deprecated.tools.schema_json_of` | | `pydantic.json.pydantic_encoder` | `pydantic.deprecated.json.pydantic_encoder` | | `pydantic.validate_arguments` | `pydantic.deprecated.decorator.validate_arguments` | | `pydantic.json.custom_pydantic_encoder` | `pydantic.deprecated.json.custom_pydantic_encoder` | | `pydantic.json.ENCODERS_BY_TYPE` | `pydantic.deprecated.json.ENCODERS_BY_TYPE` | | `pydantic.json.timedelta_isoformat` | `pydantic.deprecated.json.timedelta_isoformat` | | `pydantic.decorator.validate_arguments` | `pydantic.deprecated.decorator.validate_arguments` | | `pydantic.class_validators.validator` | `pydantic.deprecated.class_validators.validator` | | `pydantic.class_validators.root_validator` | `pydantic.deprecated.class_validators.root_validator` | | `pydantic.utils.deep_update` | `pydantic.v1.utils.deep_update` | | `pydantic.utils.GetterDict` | `pydantic.v1.utils.GetterDict` | | `pydantic.utils.lenient_issubclass` | `pydantic.v1.utils.lenient_issubclass` | | `pydantic.utils.lenient_isinstance` | `pydantic.v1.utils.lenient_isinstance` | | `pydantic.utils.is_valid_field` | `pydantic.v1.utils.is_valid_field` | | `pydantic.utils.update_not_none` | `pydantic.v1.utils.update_not_none` | | `pydantic.utils.import_string` | `pydantic.v1.utils.import_string` | | `pydantic.utils.Representation` | `pydantic.v1.utils.Representation` | | `pydantic.utils.ROOT_KEY` | `pydantic.v1.utils.ROOT_KEY` | | `pydantic.utils.smart_deepcopy` | `pydantic.v1.utils.smart_deepcopy` | | `pydantic.utils.sequence_like` | `pydantic.v1.utils.sequence_like` | ## Removed in Pydantic V2 * `pydantic.ConstrainedBytes` * `pydantic.ConstrainedDate` * `pydantic.ConstrainedDecimal` * `pydantic.ConstrainedFloat` * `pydantic.ConstrainedFrozenSet` * `pydantic.ConstrainedInt` * `pydantic.ConstrainedList` * `pydantic.ConstrainedSet` * `pydantic.ConstrainedStr` * `pydantic.JsonWrapper` * `pydantic.NoneBytes` * This was an alias to `None | bytes`. * `pydantic.NoneStr` * This was an alias to `None | str`. * `pydantic.NoneStrBytes` * This was an alias to `None | str | bytes`. * `pydantic.Protocol` * `pydantic.Required` * `pydantic.StrBytes` * This was an alias to `str | bytes`. * `pydantic.compiled` * `pydantic.config.get_config` * `pydantic.config.inherit_config` * `pydantic.config.prepare_config` * `pydantic.create_model_from_namedtuple` * `pydantic.create_model_from_typeddict` * `pydantic.dataclasses.create_pydantic_model_from_dataclass` * `pydantic.dataclasses.make_dataclass_validator` * `pydantic.dataclasses.set_validation` * `pydantic.datetime_parse.parse_date` * `pydantic.datetime_parse.parse_time` * `pydantic.datetime_parse.parse_datetime` * `pydantic.datetime_parse.parse_duration` * `pydantic.error_wrappers.ErrorWrapper` * `pydantic.errors.AnyStrMaxLengthError` * `pydantic.errors.AnyStrMinLengthError` * `pydantic.errors.ArbitraryTypeError` * `pydantic.errors.BoolError` * `pydantic.errors.BytesError` * `pydantic.errors.CallableError` * `pydantic.errors.ClassError` * `pydantic.errors.ColorError` * `pydantic.errors.ConfigError` * `pydantic.errors.DataclassTypeError` * `pydantic.errors.DateError` * `pydantic.errors.DateNotInTheFutureError` * `pydantic.errors.DateNotInThePastError` * `pydantic.errors.DateTimeError` * `pydantic.errors.DecimalError` * `pydantic.errors.DecimalIsNotFiniteError` * `pydantic.errors.DecimalMaxDigitsError` * `pydantic.errors.DecimalMaxPlacesError` * `pydantic.errors.DecimalWholeDigitsError` * `pydantic.errors.DictError` * `pydantic.errors.DurationError` * `pydantic.errors.EmailError` * `pydantic.errors.EnumError` * `pydantic.errors.EnumMemberError` * `pydantic.errors.ExtraError` * `pydantic.errors.FloatError` * `pydantic.errors.FrozenSetError` * `pydantic.errors.FrozenSetMaxLengthError` * `pydantic.errors.FrozenSetMinLengthError` * `pydantic.errors.HashableError` * `pydantic.errors.IPv4AddressError` * `pydantic.errors.IPv4InterfaceError` * `pydantic.errors.IPv4NetworkError` * `pydantic.errors.IPv6AddressError` * `pydantic.errors.IPv6InterfaceError` * `pydantic.errors.IPv6NetworkError` * `pydantic.errors.IPvAnyAddressError` * `pydantic.errors.IPvAnyInterfaceError` * `pydantic.errors.IPvAnyNetworkError` * `pydantic.errors.IntEnumError` * `pydantic.errors.IntegerError` * `pydantic.errors.InvalidByteSize` * `pydantic.errors.InvalidByteSizeUnit` * `pydantic.errors.InvalidDiscriminator` * `pydantic.errors.InvalidLengthForBrand` * `pydantic.errors.JsonError` * `pydantic.errors.JsonTypeError` * `pydantic.errors.ListError` * `pydantic.errors.ListMaxLengthError` * `pydantic.errors.ListMinLengthError` * `pydantic.errors.ListUniqueItemsError` * `pydantic.errors.LuhnValidationError` * `pydantic.errors.MissingDiscriminator` * `pydantic.errors.MissingError` * `pydantic.errors.NoneIsAllowedError` * `pydantic.errors.NoneIsNotAllowedError` * `pydantic.errors.NotDigitError` * `pydantic.errors.NotNoneError` * `pydantic.errors.NumberNotGeError` * `pydantic.errors.NumberNotGtError` * `pydantic.errors.NumberNotLeError` * `pydantic.errors.NumberNotLtError` * `pydantic.errors.NumberNotMultipleError` * `pydantic.errors.PathError` * `pydantic.errors.PathNotADirectoryError` * `pydantic.errors.PathNotAFileError` * `pydantic.errors.PathNotExistsError` * `pydantic.errors.PatternError` * `pydantic.errors.PyObjectError` * `pydantic.errors.PydanticTypeError` * `pydantic.errors.PydanticValueError` * `pydantic.errors.SequenceError` * `pydantic.errors.SetError` * `pydantic.errors.SetMaxLengthError` * `pydantic.errors.SetMinLengthError` * `pydantic.errors.StrError` * `pydantic.errors.StrRegexError` * `pydantic.errors.StrictBoolError` * `pydantic.errors.SubclassError` * `pydantic.errors.TimeError` * `pydantic.errors.TupleError` * `pydantic.errors.TupleLengthError` * `pydantic.errors.UUIDError` * `pydantic.errors.UUIDVersionError` * `pydantic.errors.UrlError` * `pydantic.errors.UrlExtraError` * `pydantic.errors.UrlHostError` * `pydantic.errors.UrlHostTldError` * `pydantic.errors.UrlPortError` * `pydantic.errors.UrlSchemeError` * `pydantic.errors.UrlSchemePermittedError` * `pydantic.errors.UrlUserInfoError` * `pydantic.errors.WrongConstantError` * `pydantic.main.validate_model` * `pydantic.networks.stricturl` * `pydantic.parse_file_as` * `pydantic.parse_raw_as` * `pydantic.stricturl` * `pydantic.tools.parse_file_as` * `pydantic.tools.parse_raw_as` * `pydantic.types.JsonWrapper` * `pydantic.types.NoneBytes` * `pydantic.types.NoneStr` * `pydantic.types.NoneStrBytes` * `pydantic.types.PyObject` * `pydantic.types.StrBytes` * `pydantic.typing.evaluate_forwardref` * `pydantic.typing.AbstractSetIntStr` * `pydantic.typing.AnyCallable` * `pydantic.typing.AnyClassMethod` * `pydantic.typing.CallableGenerator` * `pydantic.typing.DictAny` * `pydantic.typing.DictIntStrAny` * `pydantic.typing.DictStrAny` * `pydantic.typing.IntStr` * `pydantic.typing.ListStr` * `pydantic.typing.MappingIntStrAny` * `pydantic.typing.NoArgAnyCallable` * `pydantic.typing.NoneType` * `pydantic.typing.ReprArgs` * `pydantic.typing.SetStr` * `pydantic.typing.StrPath` * `pydantic.typing.TupleGenerator` * `pydantic.typing.WithArgsTypes` * `pydantic.typing.all_literal_values` * `pydantic.typing.display_as_type` * `pydantic.typing.get_all_type_hints` * `pydantic.typing.get_args` * `pydantic.typing.get_origin` * `pydantic.typing.get_sub_types` * `pydantic.typing.is_callable_type` * `pydantic.typing.is_classvar` * `pydantic.typing.is_finalvar` * `pydantic.typing.is_literal_type` * `pydantic.typing.is_namedtuple` * `pydantic.typing.is_new_type` * `pydantic.typing.is_none_type` * `pydantic.typing.is_typeddict` * `pydantic.typing.is_typeddict_special` * `pydantic.typing.is_union` * `pydantic.typing.new_type_supertype` * `pydantic.typing.resolve_annotations` * `pydantic.typing.typing_base` * `pydantic.typing.update_field_forward_refs` * `pydantic.typing.update_model_forward_refs` * `pydantic.utils.ClassAttribute` * `pydantic.utils.DUNDER_ATTRIBUTES` * `pydantic.utils.PyObjectStr` * `pydantic.utils.ValueItems` * `pydantic.utils.almost_equal_floats` * `pydantic.utils.get_discriminator_alias_and_values` * `pydantic.utils.get_model` * `pydantic.utils.get_unique_discriminator_alias` * `pydantic.utils.in_ipython` * `pydantic.utils.is_valid_identifier` * `pydantic.utils.path_type` * `pydantic.utils.validate_field_name` * `pydantic.validate_model` pydantic-pydantic-e28e879/docs/plugins/000077500000000000000000000000001526274674700201505ustar00rootroot00000000000000pydantic-pydantic-e28e879/docs/plugins/algolia.py000066400000000000000000000146261526274674700221430ustar00rootroot00000000000000# pyright: reportUnknownMemberType=false # pyright: reportAttributeAccessIssue=false # pyright: reportOptionalMemberAccess=false from __future__ import annotations as _annotations import os import sys from pathlib import Path from typing import TYPE_CHECKING, cast from bs4 import Tag from typing_extensions import TypedDict from pydantic import TypeAdapter if TYPE_CHECKING: from mkdocs.config import Config from mkdocs.structure.files import Files from mkdocs.structure.pages import Page class AlgoliaRecord(TypedDict): content: str pageID: str abs_url: str title: str objectID: str rank: int records: list[AlgoliaRecord] = [] records_ta = TypeAdapter(list[AlgoliaRecord]) # these values should match docs/extra/algolia.js. ALGOLIA_APP_ID = 'KPPUDTIAVX' ALGOLIA_INDEX_NAME = 'pydantic-docs' # Algolia has a limit of 100kb per record in the paid plan, # leave some space for the other fields as well. MAX_CONTENT_LENGTH = 90_000 def get_heading_text(heading: Tag): return heading.get_text().replace('¶', '').strip().replace('\n', ' ') def on_page_content(html: str, page: Page, config: Config, files: Files) -> str: if not os.getenv('CI'): return html from bs4 import BeautifulSoup assert page.title is not None, 'Page title must not be None' title = cast(str, page.title) soup = BeautifulSoup(html, 'html.parser') # If the page does not start with a heading, add the h1 with the title # Some examples don't have a heading. or start with h2 first_element = soup.find() if ( not first_element or not first_element.name # type: ignore[reportAttributeAccessIssue] or first_element.name not in ['h1', 'h2', 'h3'] # type: ignore[reportAttributeAccessIssue] ): soup.insert(0, BeautifulSoup(f'

{title}

', 'html.parser')) # Clean up presentational and UI elements for element in soup.find_all(['autoref']): element.decompose() # this removes the large source code embeds from Github for element in soup.find_all('details'): element.decompose() # Cleanup code examples for extra in soup.find_all('div', attrs={'class': 'language-python highlight'}): extra.replace_with(BeautifulSoup(f'
{extra.find("code").get_text()}
', 'html.parser')) # Cleanup code examples, part 2 for extra in soup.find_all('div', attrs={'class': 'language-python doc-signature highlight'}): extra.replace_with(BeautifulSoup(f'
{extra.find("code").get_text()}
', 'html.parser')) # The API reference generates HTML tables with line numbers, this strips the line numbers cell and goes back to a code block for extra in soup.find_all('table', attrs={'class': 'highlighttable'}): extra.replace_with(BeautifulSoup(f'
{extra.find("code").get_text()}
', 'html.parser')) headings = soup.find_all(['h1', 'h2', 'h3']) # Use the rank to put the sections in the beginning higher in the search results rank = 100 # Process each section for current_heading in headings: heading_id = current_heading.get('id', '') section_title = get_heading_text(current_heading) # type: ignore[reportArgumentType] # Get content until next heading content: list[str] = [] sibling = current_heading.find_next_sibling() while sibling and sibling.name not in {'h1', 'h2', 'h3'}: content.append(str(sibling)) sibling = sibling.find_next_sibling() section_html = ''.join(content) section_soup = BeautifulSoup(section_html, 'html.parser') section_plain_text = section_soup.get_text(' ', strip=True) # Create anchor URL anchor_url: str = f'{page.abs_url}#{heading_id}' if heading_id else page.abs_url or '' record_title = title if current_heading.name == 'h2': record_title = f'{title} - {section_title}' elif current_heading.name == 'h3': previous_heading: Tag = current_heading.find_previous(['h1', 'h2']) # type: ignore[reportAssignmentType] record_title = f'{title} - {get_heading_text(previous_heading)} - {section_title}' # print(f'Adding record {record_title}') # Create record for this section records.append( AlgoliaRecord( content=section_plain_text, pageID=title, abs_url=anchor_url, title=record_title, objectID=anchor_url, rank=rank, ) ) rank -= 5 return html ALGOLIA_RECORDS_FILE = 'algolia_records.json' def on_post_build(config: Config) -> None: if records: algolia_records_path = Path(config['site_dir']) / ALGOLIA_RECORDS_FILE with algolia_records_path.open('wb') as f: f.write(records_ta.dump_json(records)) def algolia_upload() -> None: from algoliasearch.search.client import SearchClientSync algolia_write_api_key = os.environ['ALGOLIA_WRITE_API_KEY'] client = SearchClientSync(ALGOLIA_APP_ID, algolia_write_api_key) filtered_records: list[AlgoliaRecord] = [] algolia_records_path = Path.cwd() / 'site' / ALGOLIA_RECORDS_FILE with algolia_records_path.open('rb') as f: all_records = records_ta.validate_json(f.read()) for record in all_records: content = record['content'] if len(content) > MAX_CONTENT_LENGTH: print( f"Record with title '{record['title']}' has more than {MAX_CONTENT_LENGTH} characters, {len(content)}." ) print(content) else: filtered_records.append(record) print(f'Uploading {len(filtered_records)} out of {len(all_records)} records to Algolia...') client.clear_objects(index_name=ALGOLIA_INDEX_NAME) client.set_settings( index_name=ALGOLIA_INDEX_NAME, index_settings={ 'searchableAttributes': ['title', 'content'], 'attributesToSnippet': ['content:40'], 'customRanking': [ 'desc(rank)', ], }, ) client.batch( index_name=ALGOLIA_INDEX_NAME, batch_write_params={'requests': [{'action': 'addObject', 'body': record} for record in filtered_records]}, ) if __name__ == '__main__': if sys.argv[-1] == 'upload': algolia_upload() else: print('Run with "upload" argument to upload records to Algolia.') sys.exit(1) pydantic-pydantic-e28e879/docs/plugins/conversion_table.py000066400000000000000000001045621526274674700240660ustar00rootroot00000000000000from __future__ import annotations as _annotations import collections import typing from collections import Counter, OrderedDict, deque from collections.abc import Callable, Hashable, Iterable, Mapping, Sequence from dataclasses import dataclass from datetime import date, datetime, time, timedelta from decimal import Decimal from enum import Enum, IntEnum from fractions import Fraction from ipaddress import IPv4Address, IPv4Interface, IPv4Network, IPv6Address, IPv6Interface, IPv6Network from pathlib import Path from re import Pattern from typing import Any from uuid import UUID from typing_extensions import TypedDict @dataclass class Row: field_type: type[Any] | str input_type: type[Any] | str python_input: bool = False json_input: bool = False strict: bool = False condition: str | None = None @property def field_type_str(self) -> str: return f'{self.field_type.__name__}' if hasattr(self.field_type, '__name__') else f'{self.field_type}' @property def input_type_str(self) -> str: return f'{self.input_type.__name__}' if hasattr(self.input_type, '__name__') else f'{self.input_type}' @property def input_source_str(self) -> str: if self.python_input: if self.json_input: return 'Python & JSON' else: return 'Python' elif self.json_input: return 'JSON' else: return '' @dataclass class ConversionTable: rows: list[Row] col_names = [ 'Field Type', 'Input', 'Strict', 'Input Source', 'Conditions', ] open_nowrap_span = '' close_nowrap_span = '' def col_values(self, row: Row) -> list[str]: o = self.open_nowrap_span c = self.close_nowrap_span return [ f'{o}`{row.field_type_str}`{c}', f'{o}`{row.input_type_str}`{c}', '✓' if row.strict else '', f'{o}{row.input_source_str}{c}', row.condition if row.condition else '', ] @staticmethod def row_as_markdown(cols: list[str]) -> str: return f'| {" | ".join(cols)} |' def as_markdown(self) -> str: lines = [self.row_as_markdown(self.col_names), self.row_as_markdown(['-'] * len(self.col_names))] + [ self.row_as_markdown(self.col_values(row)) for row in self.rows ] return '\n'.join(lines) @staticmethod def row_sort_key(row: Row) -> Any: field_type = row.field_type_str or ' ' input_type = row.input_type_str or ' ' input_source = row.input_source_str # Include the .isupper() to make it so that leading-lowercase items come first return field_type[0].isupper(), field_type, input_type[0].isupper(), input_type, input_source def sorted(self) -> ConversionTable: return ConversionTable(sorted(self.rows, key=self.row_sort_key)) def filtered(self, predicate: Callable[[Row], bool]) -> ConversionTable: return ConversionTable([row for row in self.rows if predicate(row)]) table_rows: list[Row] = [ Row( str, str, strict=True, python_input=True, json_input=True, ), Row( str, bytes, python_input=True, condition='Assumes UTF-8, error on unicode decoding error.', ), Row( str, bytearray, python_input=True, condition='Assumes UTF-8, error on unicode decoding error.', ), Row( str, Enum, python_input=True, condition='Uses the value of the enum member.', ), Row( str, int, python_input=True, json_input=True, condition='Only if `coerce_numbers_to_str` is enabled.', ), Row( str, float, python_input=True, json_input=True, condition='Only if `coerce_numbers_to_str` is enabled.', ), Row( str, Decimal, python_input=True, condition='Only if `coerce_numbers_to_str` is enabled.', ), Row( bytes, bytes, strict=True, python_input=True, ), Row( bytes, str, strict=True, json_input=True, condition='Decoded according to the `val_json_bytes` setting (UTF-8 by default).', ), Row( bytes, str, python_input=True, condition='Decoded according to the `val_json_bytes` setting (UTF-8 by default).', ), Row( bytes, bytearray, python_input=True, ), Row( int, int, strict=True, python_input=True, json_input=True, condition='`bool` is explicitly forbidden.', ), Row( int, float, python_input=True, json_input=True, condition='Must be exact int, e.g. `val % 1 == 0`, raises error for `nan`, `inf`.', ), Row( int, Decimal, python_input=True, condition='Must be exact int, e.g. `val % 1 == 0`.', ), Row( int, bool, python_input=True, json_input=True, ), Row( int, str, python_input=True, json_input=True, condition=( 'Must be a valid integer, e.g. `123`. Leading and trailing whitespace, underscores and a zero ' 'fractional part (e.g. `1.0`) are allowed.' ), ), Row( int, bytes, python_input=True, condition=( 'Must be a valid integer, e.g. `123`. Leading and trailing whitespace, underscores and a zero ' 'fractional part (e.g. `1.0`) are allowed. Assumes UTF-8.' ), ), Row( int, Fraction, python_input=True, condition='Must be exact int, e.g. `val % 1 == 0`.', ), Row( int, Enum, python_input=True, condition='Uses the value of the enum member.', ), Row( float, float, strict=True, python_input=True, json_input=True, condition='`bool` is explicitly forbidden.', ), Row( float, int, strict=True, python_input=True, json_input=True, ), Row( float, str, python_input=True, json_input=True, condition=( 'Must be a valid float, e.g. `3.141`, `1e3` or `inf`. Leading and trailing whitespace and underscores ' 'are allowed.' ), ), Row( float, bytes, python_input=True, condition=( 'Must be a valid float, e.g. `3.141`, `1e3` or `inf`. Leading and trailing whitespace and underscores ' 'are allowed. Assumes UTF-8.' ), ), Row( float, Decimal, strict=True, python_input=True, ), Row( float, bool, python_input=True, json_input=True, ), Row( float, Fraction, strict=True, python_input=True, ), Row( float, Any, strict=True, python_input=True, condition='Must implement `__float__()` or `__index__()`.', ), Row( bool, bool, strict=True, python_input=True, json_input=True, ), Row( bool, int, python_input=True, json_input=True, condition='Allowed values: `0, 1`.', ), Row( bool, float, python_input=True, json_input=True, condition='Allowed values: `0.0, 1.0`.', ), Row( bool, Decimal, python_input=True, condition='Allowed values: `Decimal(0), Decimal(1)`.', ), Row( bool, str, python_input=True, json_input=True, condition=( "Case-insensitive. Allowed values: `'0'`, `'off'`, `'f'`, `'false'`, `'n'`, `'no'`, `'1'`, `'on'`, " "`'t'`, `'true'`, `'y'`, `'yes'`." ), ), Row( bool, bytes, python_input=True, condition='Same allowed values as for `str`. Assumes UTF-8.', ), Row( None, None, strict=True, python_input=True, json_input=True, ), Row( date, date, strict=True, python_input=True, ), Row( date, datetime, python_input=True, condition='Must be exact date, eg. no `H`, `M`, `S`, `f`.', ), Row( date, str, python_input=True, json_input=True, condition=( 'Format: `YYYY-MM-DD`, a datetime with a zero time component, or a unix timestamp. Must be exact date. ' 'See [speedate](https://docs.rs/speedate/latest/speedate/).' ), ), Row( date, bytes, python_input=True, condition=( 'Format: `YYYY-MM-DD`, a datetime with a zero time component, or a unix timestamp. Must be exact date. ' 'See [speedate](https://docs.rs/speedate/latest/speedate/). Assumes UTF-8.' ), ), Row( date, int, python_input=True, json_input=True, condition=( 'Interpreted as seconds or milliseconds from epoch, depending on the `val_temporal_unit` setting. Must ' 'be exact date.' ), ), Row( date, float, python_input=True, json_input=True, condition=( 'Interpreted as seconds or milliseconds from epoch, depending on the `val_temporal_unit` setting. Must ' 'be exact date.' ), ), Row( date, Decimal, python_input=True, condition=( 'Interpreted as seconds or milliseconds from epoch, depending on the `val_temporal_unit` setting. Must ' 'be exact date.' ), ), Row( date, str, strict=True, json_input=True, condition='Format: `YYYY-MM-DD`, or a unix timestamp. Must be exact date.', ), Row( datetime, datetime, strict=True, python_input=True, ), Row( datetime, date, python_input=True, ), Row( datetime, str, python_input=True, json_input=True, condition=( 'Format: `YYYY-MM-DDTHH:MM:SS.f`, `YYYY-MM-DD`, or a unix timestamp. See ' '[speedate](https://docs.rs/speedate/latest/speedate/).' ), ), Row( datetime, bytes, python_input=True, condition=( 'Format: `YYYY-MM-DDTHH:MM:SS.f`, `YYYY-MM-DD`, or a unix timestamp. See ' '[speedate](https://docs.rs/speedate/latest/speedate/). Assumes UTF-8.' ), ), Row( datetime, int, python_input=True, json_input=True, condition='Interpreted as seconds or milliseconds from epoch, depending on the `val_temporal_unit` setting.', ), Row( datetime, float, python_input=True, json_input=True, condition='Interpreted as seconds or milliseconds from epoch, depending on the `val_temporal_unit` setting.', ), Row( datetime, Decimal, python_input=True, condition='Interpreted as seconds or milliseconds from epoch, depending on the `val_temporal_unit` setting.', ), Row( datetime, str, strict=True, json_input=True, condition=( 'Format: `YYYY-MM-DDTHH:MM:SS.f`, or a unix timestamp. See ' '[speedate](https://docs.rs/speedate/latest/speedate/).' ), ), Row( time, time, strict=True, python_input=True, ), Row( time, str, python_input=True, json_input=True, condition=( 'Format: `HH:MM[:SS[.FFFFFF]]`, with an optional timezone offset. See ' '[speedate](https://docs.rs/speedate/latest/speedate/).' ), ), Row( time, bytes, python_input=True, condition=( 'Format: `HH:MM[:SS[.FFFFFF]]`, with an optional timezone offset. See ' '[speedate](https://docs.rs/speedate/latest/speedate/). Assumes UTF-8.' ), ), Row( time, int, python_input=True, json_input=True, condition='Interpreted as seconds, range `0 - 86399`.', ), Row( time, float, python_input=True, json_input=True, condition='Interpreted as seconds, range `0 - 86399.9*`.', ), Row( time, Decimal, python_input=True, condition='Interpreted as seconds, range `0 - 86399.9*`.', ), Row( time, str, strict=True, json_input=True, condition=( 'Format: `HH:MM[:SS[.FFFFFF]]`, with an optional timezone offset. See ' '[speedate](https://docs.rs/speedate/latest/speedate/).' ), ), Row( timedelta, timedelta, strict=True, python_input=True, ), Row( timedelta, str, python_input=True, json_input=True, condition='Format: `ISO8601`. See [speedate](https://docs.rs/speedate/latest/speedate/).', ), Row( timedelta, bytes, python_input=True, condition='Format: `ISO8601`. See [speedate](https://docs.rs/speedate/latest/speedate/), (UTF-8).', ), Row( timedelta, int, python_input=True, json_input=True, condition='Interpreted as seconds.', ), Row( timedelta, float, python_input=True, json_input=True, condition='Interpreted as seconds.', ), Row( timedelta, Decimal, python_input=True, condition='Interpreted as seconds.', ), Row( timedelta, str, strict=True, json_input=True, condition='Format: `ISO8601`. See [speedate](https://docs.rs/speedate/latest/speedate/).', ), Row( dict, dict, strict=True, python_input=True, ), Row( dict, 'Object', strict=True, json_input=True, ), Row( dict, Mapping, python_input=True, condition='Must implement the mapping interface and have an `items()` method.', ), Row( 'frozendict', 'frozendict', strict=True, python_input=True, condition='`frozendict` is only available in Python 3.15 and above.', ), Row( 'frozendict', 'Object', strict=True, json_input=True, condition='`frozendict` is only available in Python 3.15 and above.', ), Row( 'frozendict', dict, python_input=True, condition='`frozendict` is only available in Python 3.15 and above.', ), Row( 'frozendict', Mapping, python_input=True, condition=( '`frozendict` is only available in Python 3.15 and above. ' 'The input must implement the mapping interface and have an `items()` method.' ), ), Row( OrderedDict, OrderedDict, strict=True, python_input=True, ), Row( OrderedDict, 'Object', strict=True, json_input=True, ), Row( OrderedDict, dict, python_input=True, ), Row( OrderedDict, Mapping, python_input=True, condition='Must implement the mapping interface and have an `items()` method.', ), Row( Counter, Counter, strict=True, python_input=True, ), Row( Counter, 'Object', strict=True, json_input=True, ), Row( Counter, dict, python_input=True, ), Row( Counter, Mapping, python_input=True, condition='Must implement the mapping interface and have an `items()` method.', ), Row( TypedDict, dict, strict=True, python_input=True, ), Row( TypedDict, 'Object', strict=True, json_input=True, ), Row( TypedDict, Mapping, python_input=True, condition='Must implement the mapping interface and have an `items()` method.', ), Row( list, list, strict=True, python_input=True, ), Row( list, 'Array', strict=True, json_input=True, ), Row( list, tuple, python_input=True, ), Row( list, set, python_input=True, ), Row( list, frozenset, python_input=True, ), Row( list, deque, python_input=True, ), Row( list, 'dict_keys', python_input=True, ), Row( list, 'dict_values', python_input=True, ), Row( list, Iterable, python_input=True, condition='Any iterable except `str`, `bytes`, `bytearray`, `dict` and mappings, e.g. generators.', ), Row( tuple, tuple, strict=True, python_input=True, ), Row( tuple, 'Array', strict=True, json_input=True, ), Row( tuple, list, python_input=True, ), Row( tuple, set, python_input=True, ), Row( tuple, frozenset, python_input=True, ), Row( tuple, deque, python_input=True, ), Row( tuple, 'dict_keys', python_input=True, ), Row( tuple, 'dict_values', python_input=True, ), Row( tuple, Iterable, python_input=True, condition='Any iterable except `str`, `bytes`, `bytearray`, `dict` and mappings, e.g. generators.', ), Row( set, set, strict=True, python_input=True, ), Row( set, 'Array', strict=True, json_input=True, ), Row( set, list, python_input=True, ), Row( set, tuple, python_input=True, ), Row( set, frozenset, python_input=True, ), Row( set, deque, python_input=True, ), Row( set, 'dict_keys', python_input=True, ), Row( set, 'dict_values', python_input=True, ), Row( set, Iterable, python_input=True, condition='Any iterable except `str`, `bytes`, `bytearray`, `dict` and mappings, e.g. generators.', ), Row( frozenset, frozenset, strict=True, python_input=True, ), Row( frozenset, 'Array', strict=True, json_input=True, ), Row( frozenset, list, python_input=True, ), Row( frozenset, tuple, python_input=True, ), Row( frozenset, set, python_input=True, ), Row( frozenset, deque, python_input=True, ), Row( frozenset, 'dict_keys', python_input=True, ), Row( frozenset, 'dict_values', python_input=True, ), Row( frozenset, Iterable, python_input=True, condition='Any iterable except `str`, `bytes`, `bytearray`, `dict` and mappings, e.g. generators.', ), Row( 'InstanceOf', Any, strict=True, python_input=True, condition='`isinstance()` check must return `True`.', ), Row( 'InstanceOf', Any, strict=True, json_input=True, condition='Validated as the wrapped type.', ), Row( callable, Any, strict=True, python_input=True, condition='`callable()` check must return `True`.', ), Row( callable, '-', json_input=True, condition='Never valid.', ), Row( deque, deque, strict=True, python_input=True, ), Row( deque, 'Array', strict=True, json_input=True, ), Row( deque, list, python_input=True, ), Row( deque, tuple, python_input=True, ), Row( deque, set, python_input=True, ), Row( deque, frozenset, python_input=True, ), Row( deque, Iterable, python_input=True, condition='Any iterable except `str`, `bytes`, `bytearray`, `dict` and mappings, e.g. generators.', ), Row( Any, Any, strict=True, python_input=True, json_input=True, ), Row( typing.NamedTuple, typing.NamedTuple, strict=True, python_input=True, ), Row( typing.NamedTuple, 'Array', strict=True, json_input=True, ), Row( typing.NamedTuple, 'Object', strict=True, json_input=True, ), Row( typing.NamedTuple, collections.namedtuple, strict=True, python_input=True, ), Row( typing.NamedTuple, tuple, strict=True, python_input=True, ), Row( typing.NamedTuple, list, strict=True, python_input=True, ), Row( typing.NamedTuple, dict, strict=True, python_input=True, ), Row( typing.NamedTuple, Iterable, strict=True, python_input=True, condition='Any iterable except `str`, `bytes`, `bytearray`, `dict` and mappings, e.g. generators.', ), Row( typing.NamedTuple, Mapping, strict=True, python_input=True, condition='Must implement the mapping interface and have an `items()` method.', ), Row( collections.namedtuple, collections.namedtuple, strict=True, python_input=True, ), Row( collections.namedtuple, 'Array', strict=True, json_input=True, ), Row( collections.namedtuple, 'Object', strict=True, json_input=True, ), Row( collections.namedtuple, typing.NamedTuple, strict=True, python_input=True, ), Row( collections.namedtuple, tuple, strict=True, python_input=True, ), Row( collections.namedtuple, list, strict=True, python_input=True, ), Row( collections.namedtuple, dict, strict=True, python_input=True, ), Row( collections.namedtuple, Iterable, strict=True, python_input=True, condition='Any iterable except `str`, `bytes`, `bytearray`, `dict` and mappings, e.g. generators.', ), Row( collections.namedtuple, Mapping, strict=True, python_input=True, condition='Must implement the mapping interface and have an `items()` method.', ), Row( Sequence, list, strict=True, python_input=True, ), Row( Sequence, 'Array', strict=True, json_input=True, ), Row( Sequence, tuple, strict=True, python_input=True, ), Row( Sequence, deque, python_input=True, ), Row( Iterable, 'Array', strict=True, json_input=True, ), Row( Iterable, Any, strict=True, python_input=True, condition='Any object for which `iter()` succeeds. Items are validated lazily.', ), Row( type, type, strict=True, python_input=True, ), Row( type, '-', json_input=True, condition='Never valid.', ), Row( Pattern, str, strict=True, python_input=True, json_input=True, condition='Input must be a valid pattern. Not valid for `Pattern[bytes]`.', ), Row( Pattern, bytes, strict=True, python_input=True, condition='Input must be a valid pattern. Not valid for `Pattern[str]`.', ), Row( Pattern, Pattern, strict=True, python_input=True, condition='The pattern type (`str` or `bytes`) must match.', ), Row( IPv4Address, IPv4Address, strict=True, python_input=True, ), Row( IPv4Address, IPv4Interface, strict=True, python_input=True, ), Row( IPv4Address, str, strict=True, json_input=True, ), Row( IPv4Address, str, python_input=True, json_input=True, ), Row( IPv4Address, bytes, python_input=True, ), Row( IPv4Address, int, python_input=True, json_input=True, condition='integer representing the IP address, must be less than `2**32`', ), Row( IPv4Interface, IPv4Interface, strict=True, python_input=True, ), Row( IPv4Interface, str, strict=True, json_input=True, ), Row( IPv4Interface, IPv4Address, python_input=True, ), Row( IPv4Interface, str, python_input=True, json_input=True, ), Row( IPv4Interface, bytes, python_input=True, ), Row( IPv4Interface, tuple, python_input=True, ), Row( IPv4Interface, int, python_input=True, json_input=True, condition='integer representing the IP address, must be less than `2**32`', ), Row( IPv4Interface, IPv4Network, python_input=True, ), Row( IPv4Network, IPv4Network, strict=True, python_input=True, ), Row( IPv4Network, str, strict=True, json_input=True, condition='Host bits must be zero.', ), Row( IPv4Network, IPv4Address, python_input=True, ), Row( IPv4Network, IPv4Interface, python_input=True, condition='Host bits must be zero.', ), Row( IPv4Network, str, python_input=True, json_input=True, condition='Host bits must be zero.', ), Row( IPv4Network, bytes, python_input=True, ), Row( IPv4Network, int, python_input=True, json_input=True, condition='integer representing the IP network, must be less than `2**32`', ), Row( IPv4Network, tuple, python_input=True, condition='Host bits must be zero.', ), Row( IPv6Address, IPv6Address, strict=True, python_input=True, ), Row( IPv6Address, IPv6Interface, strict=True, python_input=True, ), Row( IPv6Address, str, strict=True, json_input=True, ), Row( IPv6Address, str, python_input=True, json_input=True, ), Row( IPv6Address, bytes, python_input=True, ), Row( IPv6Address, int, python_input=True, json_input=True, condition='integer representing the IP address, must be less than `2**128`', ), Row( IPv6Interface, IPv6Interface, strict=True, python_input=True, ), Row( IPv6Interface, str, strict=True, json_input=True, ), Row( IPv6Interface, IPv6Address, python_input=True, ), Row( IPv6Interface, str, python_input=True, json_input=True, ), Row( IPv6Interface, bytes, python_input=True, ), Row( IPv6Interface, tuple, python_input=True, ), Row( IPv6Interface, int, python_input=True, json_input=True, condition='integer representing the IP address, must be less than `2**128`', ), Row( IPv6Interface, IPv6Network, python_input=True, ), Row( IPv6Network, IPv6Network, strict=True, python_input=True, ), Row( IPv6Network, str, strict=True, json_input=True, condition='Host bits must be zero.', ), Row( IPv6Network, IPv6Address, python_input=True, ), Row( IPv6Network, IPv6Interface, python_input=True, condition='Host bits must be zero.', ), Row( IPv6Network, str, python_input=True, json_input=True, condition='Host bits must be zero.', ), Row( IPv6Network, bytes, python_input=True, ), Row( IPv6Network, int, python_input=True, json_input=True, condition='integer representing the IP address, must be less than `2**128`', ), Row( IPv6Network, tuple, python_input=True, condition='Host bits must be zero.', ), Row( Enum, Enum, strict=True, python_input=True, ), Row( Enum, Any, strict=True, json_input=True, condition='Input value must be convertible to enum values.', ), Row( Enum, Any, python_input=True, condition='Input value must be convertible to enum values.', ), Row( IntEnum, IntEnum, strict=True, python_input=True, ), Row( IntEnum, Any, strict=True, json_input=True, condition='Input value must be one of the enum values, without type coercion.', ), Row( IntEnum, Any, python_input=True, condition='Input value must be convertible to enum values.', ), Row( Decimal, Decimal, strict=True, python_input=True, ), Row( Decimal, int, strict=True, json_input=True, ), Row( Decimal, str, strict=True, json_input=True, ), Row( Decimal, float, strict=True, json_input=True, ), Row( Decimal, int, python_input=True, json_input=True, ), Row( Decimal, str, python_input=True, json_input=True, condition=( 'Must be a valid decimal, e.g. `3.141` or `1e3`. Leading and trailing whitespace and underscores are ' 'allowed.' ), ), Row( Decimal, float, python_input=True, json_input=True, ), Row( Decimal, tuple, python_input=True, condition='Decimal tuple form, e.g. `(0, (1, 4, 1), -2)`.', ), Row( Path, Path, strict=True, python_input=True, ), Row( Path, str, strict=True, json_input=True, ), Row( Path, str, python_input=True, ), Row( UUID, UUID, strict=True, python_input=True, ), Row( UUID, str, strict=True, json_input=True, ), Row( UUID, str, python_input=True, ), Row( UUID, bytes, python_input=True, condition='16 raw bytes, or a UTF-8 encoded UUID string.', ), Row( 'ByteSize', str, strict=True, python_input=True, json_input=True, ), Row( 'ByteSize', int, strict=True, python_input=True, json_input=True, ), Row( 'ByteSize', float, python_input=True, json_input=True, condition='Must be exact int, e.g. `val % 1 == 0`.', ), Row( 'ByteSize', Decimal, python_input=True, condition='Must be exact int, e.g. `val % 1 == 0`.', ), Row( complex, complex, strict=True, python_input=True, ), Row( complex, str, strict=True, json_input=True, condition='Must be a valid complex string, e.g. `1+2j`.', ), Row( complex, str, python_input=True, condition='Must be a valid complex string, e.g. `1+2j`.', ), Row( complex, int, python_input=True, json_input=True, ), Row( complex, float, python_input=True, json_input=True, ), Row( complex, Decimal, python_input=True, ), Row( Fraction, Fraction, strict=True, python_input=True, ), Row( Fraction, str, strict=True, json_input=True, condition='Must be a valid fraction, e.g. `1/3` or `0.5`.', ), Row( Fraction, int, strict=True, json_input=True, ), Row( Fraction, float, strict=True, json_input=True, ), Row( Fraction, str, python_input=True, condition='Must be a valid fraction, e.g. `1/3` or `0.5`.', ), Row( Fraction, int, python_input=True, ), Row( Fraction, float, python_input=True, ), Row( Fraction, Decimal, python_input=True, ), Row( 'Literal', Any, strict=True, python_input=True, json_input=True, condition='Input must be equal to one of the literal values.', ), Row( Hashable, Any, strict=True, python_input=True, json_input=True, condition='`isinstance()` check against `Hashable` must return `True`.', ), ] conversion_table = ConversionTable(table_rows).sorted() pydantic-pydantic-e28e879/docs/plugins/devtools_output.html000066400000000000000000000067251526274674700243270ustar00rootroot00000000000000 devtools_example.py:30 <module> user: User( id=123, name='John Doe', signup_ts=datetime.datetime(2019, 6, 1, 12, 22), friends=[ 1234, 4567, 7890, ], address=Address( street='Testing', country='uk', lat=51.5, lng=0.0, ), ) (User) should be much easier read than: user: id=123 name='John Doe' signup_ts=datetime.datetime(2019, 6, 1, 12, 22) friends=[1234, 4567, 7890] address=Address(street='Testing', country='uk', lat=51.5, lng=0.0) pydantic-pydantic-e28e879/docs/plugins/main.py000066400000000000000000000372241526274674700214560ustar00rootroot00000000000000from __future__ import annotations as _annotations import json import logging import os import re import textwrap from pathlib import Path from textwrap import indent import autoflake import pyupgrade._main as pyupgrade_main # type: ignore import requests import tomli import yaml from build.__main__ import ( build_package, ) # Might be private, but there's currently no public API to programmatically build wheels.. from jinja2 import Template # type: ignore from mkdocs.config.defaults import MkDocsConfig from mkdocs.exceptions import PluginError from mkdocs.structure.files import Files from mkdocs.structure.pages import Page from packaging.version import Version logger = logging.getLogger('mkdocs.plugin') THIS_DIR = Path(__file__).parent DOCS_DIR = THIS_DIR.parent PROJECT_ROOT = DOCS_DIR.parent try: from .conversion_table import conversion_table except ImportError: # Due to how MkDocs requires this file to be specified (as a path and not a # dot-separated module name), relative imports don't work: # MkDocs is adding the dir. of this file to `sys.path` and uses # `importlib.spec_from_file_location` and `module_from_spec`, which isn't ideal. from conversion_table import conversion_table # Start definition of MkDocs hooks def on_pre_build(config: MkDocsConfig) -> None: """ Before the build starts. """ add_changelog() if not config.site_url: raise PluginError("'site_url' must be set") add_mkdocs_run_deps(config.site_url) def on_page_markdown(markdown: str, page: Page, config: MkDocsConfig, files: Files) -> str: """ Called on each file after it is read and before it is converted to HTML. """ markdown = upgrade_python(markdown) markdown = insert_json_output(markdown) if md := render_index(markdown, page): return md if md := render_why(markdown, page): return md if md := render_pydantic_settings(markdown, page): return md elif md := build_schema_mappings(markdown, page): return md elif md := build_conversion_table(markdown, page): return md elif md := devtools_example(markdown, page): return md elif md := populate_pydantic_people(markdown, page): return md else: return markdown # End definition of MkDocs hooks def add_changelog() -> None: history = (PROJECT_ROOT / 'HISTORY.md').read_text(encoding='utf-8') history = re.sub(r'(\s)@([\w\-]+)', r'\1[@\2](https://github.com/\2)', history, flags=re.I) history = re.sub(r'\[GitHub release]\(', r'[:simple-github: GitHub release](', history) history = re.sub('@@', '@', history) new_file = DOCS_DIR / 'changelog.md' # avoid writing file unless the content has changed to avoid infinite build loop if not new_file.is_file() or new_file.read_text(encoding='utf-8') != history: new_file.write_text(history, encoding='utf-8') def add_mkdocs_run_deps(site_url: str) -> None: # set the pydantic, pydantic-core, pydantic-extra-types versions to configure for running examples in the browser pyproject_toml = (PROJECT_ROOT / 'pyproject.toml').read_text() m = re.search(r'pydantic-core==(.+?)["\']', pyproject_toml) if not m: logger.info( "Could not find pydantic-core version in pyproject.toml, this is expected if you're using a git ref" ) return pydantic_core_version = m.group(1) version_py = (PROJECT_ROOT / 'pydantic' / 'version.py').read_text() pydantic_version_str: str = re.search(r'^VERSION ?= (["\'])(.+)\1', version_py, flags=re.M).group(2) # pyright: ignore[reportOptionalMemberAccess] if os.getenv('CI') and Version(pydantic_version_str).local == 'dev': build_package( PROJECT_ROOT, DOCS_DIR, distributions=['wheel'], ) wheel_file = next(DOCS_DIR.glob('*.whl')) pydantic_dep = f'{site_url.removesuffix("/").removesuffix("/latest")}/dev/{wheel_file.name}' else: pydantic_dep = f'pydantic=={pydantic_version_str}' uv_lock = (PROJECT_ROOT / 'uv.lock').read_text() pydantic_extra_types_version: str = re.search(r'name = "pydantic-extra-types"\nversion = "(.+?)"', uv_lock).group(1) # pyright: ignore[reportOptionalMemberAccess] mkdocs_run_deps = json.dumps( [ pydantic_dep, 'email-validator>=2.0.0', f'pydantic-core=={pydantic_core_version}', f'pydantic-extra-types=={pydantic_extra_types_version}', ] ) logger.info('Setting mkdocs_run_deps=%s', mkdocs_run_deps) html = f"""\ """ path = DOCS_DIR / 'theme/mkdocs_run_deps.html' path.write_text(html) MIN_MINOR_VERSION = 9 MAX_MINOR_VERSION = 13 def upgrade_python(markdown: str) -> str: """ Apply pyupgrade to all Python code blocks, unless explicitly skipped, create a tab for each version. """ def add_tabs(match: re.Match[str]) -> str: prefix = match.group(1) if 'upgrade="skip"' in prefix: return match.group(0) if m := re.search(r'requires="3.(\d+)"', prefix): min_minor_version = int(m.group(1)) else: min_minor_version = MIN_MINOR_VERSION py_code = match.group(2) numbers = match.group(3) # import devtools # devtools.debug(numbers) output = [] last_code = py_code for minor_version in range(min_minor_version, MAX_MINOR_VERSION + 1): if minor_version == min_minor_version: tab_code = py_code else: tab_code = _upgrade_code(py_code, minor_version) if tab_code == last_code: continue last_code = tab_code content = indent(f'{prefix}\n{tab_code}```{numbers}', ' ' * 4) output.append(f'=== "Python 3.{minor_version} and above"\n\n{content}') if len(output) == 1: return match.group(0) else: return '\n\n'.join(output) # Note: we should move away from this regex approach. It does not handle edge cases (indented code blocks inside # other blocks, etc) and can lead to bugs in the rendering of annotations. Edit with care and make sure the rendered # documentation does not break: return re.sub(r'(``` *py.*?)\n(.+?)^```(\s+(?:^\d+\. (?:[^\n][\n]?)+\n?)*)', add_tabs, markdown, flags=re.M | re.S) def _upgrade_code(code: str, min_version: int) -> str: upgraded = pyupgrade_main._fix_plugins( code, settings=pyupgrade_main.Settings( min_version=(3, min_version), keep_percent_format=True, keep_mock=False, keep_runtime_typing=True, ), ) return autoflake.fix_code(upgraded, remove_all_unused_imports=True) def insert_json_output(markdown: str) -> str: """ Find `output="json"` code fence tags and replace with a separate JSON section """ def replace_json(m: re.Match[str]) -> str: start, attrs, code = m.groups() def replace_last_print(m2: re.Match[str]) -> str: ind, json_text = m2.groups() json_text = indent(json.dumps(json.loads(json_text), indent=2), ind) # no trailing fence as that's not part of code return f'\n{ind}```\n\n{ind}JSON output:\n\n{ind}```json\n{json_text}\n' code = re.sub(r'\n( *)"""(.*?)\1"""\n$', replace_last_print, code, flags=re.S) return f'{start}{attrs}{code}{start}\n' return re.sub(r'(^ *```)([^\n]*?output="json"[^\n]*?\n)(.+?)\1', replace_json, markdown, flags=re.M | re.S) def get_orgs_data() -> list[dict[str, str]]: with (THIS_DIR / 'orgs.toml').open('rb') as f: orgs_data = tomli.load(f) return orgs_data['orgs'] tile_template = """ """ def render_index(markdown: str, page: Page) -> str | None: if page.file.src_uri != 'index.md': return None if version := os.getenv('PYDANTIC_VERSION'): url = f'https://github.com/pydantic/pydantic/releases/tag/{version}' version_str = f'Documentation for version: [{version}]({url})' elif (version_ref := os.getenv('GITHUB_REF')) and version_ref.startswith('refs/tags/'): version = re.sub('^refs/tags/', '', version_ref.lower()) url = f'https://github.com/pydantic/pydantic/releases/tag/{version}' version_str = f'Documentation for version: [{version}]({url})' elif sha := os.getenv('GITHUB_SHA'): url = f'https://github.com/pydantic/pydantic/commit/{sha}' sha = sha[:7] version_str = f'Documentation for development version: [{sha}]({url})' else: version_str = 'Documentation for development version' logger.info('Setting version prefix: %r', version_str) markdown = re.sub(r'{{ *version *}}', version_str, markdown) elements = [tile_template.format(**org) for org in get_orgs_data()] orgs_grid = f'
{"".join(elements)}
' return re.sub(r'{{ *organisations *}}', orgs_grid, markdown) def render_why(markdown: str, page: Page) -> str | None: if page.file.src_uri != 'why.md': return None with (THIS_DIR / 'using.toml').open('rb') as f: using = tomli.load(f)['libs'] libraries = '\n'.join('* [`{repo}`](https://github.com/{repo}) {stars:,} stars'.format(**lib) for lib in using) markdown = re.sub(r'{{ *libraries *}}', libraries, markdown) default_description = '_(Based on the criteria described above)_' elements = [ f'### {org["name"]} {{#org-{org["key"]}}}\n\n{org.get("description") or default_description}' for org in get_orgs_data() ] return re.sub(r'{{ *organisations *}}', '\n\n'.join(elements), markdown) def render_pydantic_settings(markdown: str, page: Page) -> str | None: if page.file.src_uri != 'concepts/pydantic_settings.md': return None req = requests.get('https://raw.githubusercontent.com/pydantic/pydantic-settings/main/docs/index.md') if req.status_code != 200: logger.warning( 'Got HTTP status %d when trying to fetch content of the `pydantic-settings` docs', req.status_code ) return docs_content = req.text.strip() return re.sub(r'{{ *pydantic_settings *}}', docs_content, markdown) def _generate_table_row(col_values: list[str]) -> str: return f'| {" | ".join(col_values)} |\n' def _generate_table_heading(col_names: list[str]) -> str: return _generate_table_row(col_names) + _generate_table_row(['-'] * len(col_names)) def build_schema_mappings(markdown: str, page: Page) -> str | None: if page.file.src_uri != 'concepts/json_schema.md': return None col_names = [ 'Python type', 'JSON Schema Type', 'Additional JSON Schema', 'Defined in', 'Notes', ] table_text = _generate_table_heading(col_names) with (THIS_DIR / 'schema_mappings.toml').open('rb') as f: table = tomli.load(f) for t in table.values(): py_type = t['py_type'] json_type = t['json_type'] additional = t['additional'] defined_in = t['defined_in'] notes = t['notes'] if additional and not isinstance(additional, str): additional = json.dumps(additional) cols = [f'`{py_type}`', f'`{json_type}`', f'`{additional}`' if additional else '', defined_in, notes] table_text += _generate_table_row(cols) return re.sub(r'{{ *schema_mappings_table *}}', table_text, markdown) def build_conversion_table(markdown: str, page: Page) -> str | None: if page.file.src_uri != 'concepts/conversion_table.md': return None filtered_table_predicates = { 'all': lambda r: True, 'json': lambda r: r.json_input, 'json_strict': lambda r: r.json_input and r.strict, 'python': lambda r: r.python_input, 'python_strict': lambda r: r.python_input and r.strict, } for table_id, predicate in filtered_table_predicates.items(): table_markdown = conversion_table.filtered(predicate).as_markdown() table_markdown = textwrap.indent(table_markdown, ' ') markdown = re.sub(rf'{{{{ *conversion_table_{table_id} *}}}}', table_markdown, markdown) return markdown def devtools_example(markdown: str, page: Page) -> str | None: if page.file.src_uri != 'integrations/devtools.md': return None html = (THIS_DIR / 'devtools_output.html').read_text().strip('\n') full_html = f'
\n
{html}
\n
' return re.sub(r'{{ *devtools_example *}}', full_html, markdown) experts_template = Template( """
{% for user in people.experts %}
@{{ user.login }}
Questions replied: {{ user.count }}
{% endfor %}
""" ) most_active_users_template = Template( """
{% for user in people.last_month_active %}
@{{ user.login }}
Questions replied: {{ user.count }}
{% endfor %}
""" ) top_contributors_template = Template( """
{% for user in people.top_contributors %}
@{{ user.login }}
Contributions: {{ user.count }}
{% endfor %}
""" ) top_reviewers_template = Template( """
{% for user in people.top_reviewers %}
@{{ user.login }}
Reviews: {{ user.count }}
{% endfor %}
""" ) maintainers_template = Template( """
{% for user in people.maintainers %} {% endfor %}
""" ) def populate_pydantic_people(markdown: str, page: Page) -> str | None: if page.file.src_uri != 'pydantic_people.md': return None # read people.yml file data with (THIS_DIR / 'people.yml').open('rb') as f: people = yaml.load(f, Loader=yaml.FullLoader) # Render the templates for name, template in [ ('experts', experts_template), ('most_active_users', most_active_users_template), ('top_contributors', top_contributors_template), ('top_reviewers', top_reviewers_template), ('maintainers', maintainers_template), ]: rendered = template.render(people=people) markdown = re.sub(f'{{{{ {name} }}}}', rendered, markdown) return markdown pydantic-pydantic-e28e879/docs/plugins/orgs.toml000066400000000000000000000144001526274674700220160ustar00rootroot00000000000000[[orgs]] key = "adobe" name = "Adobe" description = """ [`adobe/dy-sql`](https://github.com/adobe/dy-sql) uses Pydantic. """ [[orgs]] key = "amazon" name = "Amazon and AWS" description = """ * [powertools-lambda-python](https://github.com/aws-powertools/powertools-lambda-python) * [awslabs/gluonts](https://github.com/awslabs/gluonts) * AWS [sponsored Samuel Colvin $5,000](https://twitter.com/samuel_colvin/status/1549383169006239745) to work on Pydantic in 2022 """ [[orgs]] key = "anthropic" name = "Anthropic" description = """ [`anthropics/anthropic-sdk-python`](https://github.com/anthropics/anthropic-sdk-python) uses Pydantic. """ [[orgs]] key = "apple" name = "Apple" [[orgs]] key = "asml" name = "ASML" [[orgs]] key = "astrazeneca" name = "AstraZeneca" description = """ [Multiple repos](https://github.com/search?q=org%3AAstraZeneca+pydantic&type=code) in the `AstraZeneca` GitHub org depend on Pydantic. """ [[orgs]] key = "cisco" name = "Cisco Systems" description = """ * Pydantic is listed in their report of [Open Source Used In RADKit](https://www.cisco.com/c/dam/en_us/about/doing_business/open_source/docs/RADKit-149-1687424532.pdf). * [`cisco/webex-assistant-sdk`](https://github.com/cisco/webex-assistant-sdk) """ [[orgs]] key = "capital_one" name = "Capital One" [[orgs]] key = "comcast" name = "Comcast" [[orgs]] key = "datadog" name = "Datadog" description = """ * Extensive use of Pydantic in [`DataDog/integrations-core`](https://github.com/DataDog/integrations-core) and other repos * Communication with engineers from Datadog about how they use Pydantic. """ [[orgs]] key = "facebook" name = "Facebook" description = """ [Multiple repos](https://github.com/search?q=org%3Afacebookresearch+pydantic&type=code) in the `facebookresearch` GitHub org depend on Pydantic. """ [[orgs]] key = "github" name = "GitHub" description = """ GitHub sponsored Pydantic $750 in 2022 """ [[orgs]] key = "google" name = "Google" description = """ Extensive use of Pydantic in [`google/turbinia`](https://github.com/google/turbinia) and other repos. """ [[orgs]] key = "hsbc" name = "HSBC" [[orgs]] key = "ibm" name = "IBM" description = """ [Multiple repos](https://github.com/search?q=org%3AIBM+pydantic&type=code) in the `IBM` GitHub org depend on Pydantic. """ [[orgs]] key = "intel" name = "Intel" [[orgs]] key = "intuit" name = "Intuit" [[orgs]] key = "ipcc" name = "Intergovernmental Panel on Climate Change" description = """ [Tweet](https://twitter.com/daniel_huppmann/status/1563461797973110785) explaining how the IPCC use Pydantic. """ [[orgs]] key = "jpmorgan" name = "JPMorgan" [[orgs]] key = "jupyter" name = "Jupyter" description = """ * The developers of the Jupyter notebook are using Pydantic [for subprojects](https://github.com/pydantic/pydantic/issues/773) * Through the FastAPI-based Jupyter server [Jupyverse](https://github.com/jupyter-server/jupyverse) * [FPS](https://github.com/jupyter-server/fps)'s configuration management. """ [[orgs]] key = "microsoft" name = "Microsoft" description = """ * [DeepSpeed](https://github.com/microsoft/DeepSpeed) deep learning optimisation library uses Pydantic extensively * [Multiple repos](https://github.com/search?q=org%3Amicrosoft%20pydantic&type=code) in the `microsoft` GitHub org depend on Pydantic, in particular their * Pydantic is also [used](https://github.com/search?q=org%3AAzure%20pydantic&type=code) in the `Azure` GitHub org * [Comments](https://github.com/tiangolo/fastapi/pull/26) on GitHub show Microsoft engineers using Pydantic as part of Windows and Office """ [[orgs]] key = "molssi" name = "Molecular Science Software Institute" description = """ [Multiple repos](https://github.com/search?q=org%3AMolSSI%20pydantic&type=code) in the `MolSSI` GitHub org depend on Pydantic. """ [[orgs]] key = "nasa" name = "NASA" description = """ [Multiple repos](https://github.com/search?q=org%3Anasa%20pydantic&type=code) in the `NASA` GitHub org depend on Pydantic. NASA are also using Pydantic via FastAPI in their JWST project to process images from the James Webb Space Telescope, see [this tweet](https://twitter.com/benjamin_falk/status/1546947039363305472). """ [[orgs]] key = "netflix" name = "Netflix" description = """ [Multiple repos](https://github.com/search?q=org%3Anetflix%20pydantic&type=code) in the `Netflix` GitHub org depend on Pydantic. """ [[orgs]] key = "nsa" name = "NSA" description = """ The [`nsacyber/WALKOFF`](https://github.com/nsacyber/WALKOFF) repo depends on Pydantic. """ [[orgs]] key = "nvidia" name = "NVIDIA" description = """ [Multiple repositories](https://github.com/search?q=org%3ANVIDIA%20pydantic&type=code) in the `NVIDIA` GitHub org depend on Pydantic. Their "Omniverse Services" depends on Pydantic according to [their documentation](https://web.archive.org/web/20220628161919/https://docs.omniverse.nvidia.com/prod_services/prod_services/core/index.html). """ [[orgs]] key = "openai" name = "OpenAI" description = """ OpenAI use Pydantic for their ChatCompletions API, as per [this](https://github.com/pydantic/pydantic/discussions/6372) discussion on GitHub. Anecdotally, OpenAI use Pydantic extensively for their internal services. """ [[orgs]] key = "oracle" name = "Oracle" [[orgs]] key = "palantir" name = "Palantir" [[orgs]] key = "qualcomm" name = "Qualcomm" [[orgs]] key = "redhat" name = "Red Hat" [[orgs]] key = "revolut" name = "Revolut" description = """ Anecdotally, all internal services at Revolut are built with FastAPI and therefore Pydantic. """ [[orgs]] key = "robusta" name = "Robusta" description = """ The [`robusta-dev/robusta`](https://github.com/robusta-dev/robusta) repo depends on Pydantic. """ [[orgs]] key = "salesforce" name = "Salesforce" description = """ Salesforce [sponsored Samuel Colvin $10,000](https://twitter.com/samuel_colvin/status/1501288247670063104) to work on Pydantic in 2022. """ [[orgs]] key = "starbucks" name = "Starbucks" [[orgs]] key = "ti" name = "Texas Instruments" [[orgs]] key = "twilio" name = "Twilio" [[orgs]] key = "twitter" name = "Twitter" description = """ Twitter's [`the-algorithm`](https://github.com/twitter/the-algorithm) repo where they [open sourced](https://blog.twitter.com/engineering/en_us/topics/open-source/2023/twitter-recommendation-algorithm) their recommendation engine uses Pydantic. """ [[orgs]] key = "ukhomeoffice" name = "UK Home Office" pydantic-pydantic-e28e879/docs/plugins/people.yml000066400000000000000000000473451526274674700221740ustar00rootroot00000000000000maintainers: - login: adriangb answers: 42 prs: 199 avatarUrl: https://avatars.githubusercontent.com/u/1755071?u=612704256e38d6ac9cbed24f10e4b6ac2da74ecb&v=4 url: https://github.com/adriangb - login: alexmojaki answers: 0 prs: 18 avatarUrl: https://avatars.githubusercontent.com/u/3627481?u=9bb2e0cf1c5ef3d0609d2e639a135b7b4ca8b463&v=4 url: https://github.com/alexmojaki - login: dmontagu answers: 55 prs: 316 avatarUrl: https://avatars.githubusercontent.com/u/35119617?u=540f30c937a6450812628b9592a1dfe91bbe148e&v=4 url: https://github.com/dmontagu - login: Viicos answers: 234 prs: 531 avatarUrl: https://avatars.githubusercontent.com/u/65306057?u=fcd677dc1b9bef12aa103613e5ccb3f8ce305af9&v=4 url: https://github.com/Viicos - login: hramezani answers: 23 prs: 199 avatarUrl: https://avatars.githubusercontent.com/u/3122442?u=f387fc2dbc0c681f23e80e2ad705790fafcec9a2&v=4 url: https://github.com/hramezani - login: Kludex answers: 23 prs: 112 avatarUrl: https://avatars.githubusercontent.com/u/7353520?u=df8a3f06ba8f55ae1967a3e2d5ed882903a4e330&v=4 url: https://github.com/Kludex - login: davidhewitt answers: 2 prs: 94 avatarUrl: https://avatars.githubusercontent.com/u/1939362?u=b4b48981c3a097daaad16c4c5417aa7a3e5e32d9&v=4 url: https://github.com/davidhewitt - login: samuelcolvin answers: 296 prs: 408 avatarUrl: https://avatars.githubusercontent.com/u/4039449?u=42eb3b833047c8c4b4f647a031eaef148c16d93f&v=4 url: https://github.com/samuelcolvin experts: - login: samuelcolvin count: 296 avatarUrl: https://avatars.githubusercontent.com/u/4039449?u=42eb3b833047c8c4b4f647a031eaef148c16d93f&v=4 url: https://github.com/samuelcolvin - login: Viicos count: 234 avatarUrl: https://avatars.githubusercontent.com/u/65306057?u=fcd677dc1b9bef12aa103613e5ccb3f8ce305af9&v=4 url: https://github.com/Viicos - login: PrettyWood count: 143 avatarUrl: https://avatars.githubusercontent.com/u/18406791?u=4853940cf5eeffb5bbb9ba06ad862f28bc68d69e&v=4 url: https://github.com/PrettyWood - login: uriyyo count: 96 avatarUrl: https://avatars.githubusercontent.com/u/32038156?u=c26ca9b821fcf6499b84db75f553d4980bf8d023&v=4 url: https://github.com/uriyyo - login: dmontagu count: 55 avatarUrl: https://avatars.githubusercontent.com/u/35119617?u=540f30c937a6450812628b9592a1dfe91bbe148e&v=4 url: https://github.com/dmontagu - login: adriangb count: 42 avatarUrl: https://avatars.githubusercontent.com/u/1755071?u=612704256e38d6ac9cbed24f10e4b6ac2da74ecb&v=4 url: https://github.com/adriangb - login: sydney-runkle count: 38 avatarUrl: https://avatars.githubusercontent.com/u/54324534?u=acc3756515d6f87acc91e36a4478557cba9d9dac&v=4 url: https://github.com/sydney-runkle - login: Kludex count: 23 avatarUrl: https://avatars.githubusercontent.com/u/7353520?u=df8a3f06ba8f55ae1967a3e2d5ed882903a4e330&v=4 url: https://github.com/Kludex - login: hramezani count: 23 avatarUrl: https://avatars.githubusercontent.com/u/3122442?u=f387fc2dbc0c681f23e80e2ad705790fafcec9a2&v=4 url: https://github.com/hramezani - login: lesnik512 count: 21 avatarUrl: https://avatars.githubusercontent.com/u/2184855?u=5670768b7efda993c4887d91df3cf330dc7bc9de&v=4 url: https://github.com/lesnik512 - login: harunyasar count: 17 avatarUrl: https://avatars.githubusercontent.com/u/1765494?u=5b1ab7c582db4b4016fa31affe977d10af108ad4&v=4 url: https://github.com/harunyasar - login: janas-adam count: 15 avatarUrl: https://avatars.githubusercontent.com/u/48211033?u=5ca15d25319ce589da76d7891144ddc8480d8b6d&v=4 url: https://github.com/janas-adam - login: nymous count: 13 avatarUrl: https://avatars.githubusercontent.com/u/4216559?u=360a36fb602cded27273cbfc0afc296eece90662&v=4 url: https://github.com/nymous - login: harrison-vc-backup count: 12 avatarUrl: https://avatars.githubusercontent.com/u/231837450?u=35875b528330a9951c105a94fa3d3f95dda819e5&v=4 url: https://github.com/harrison-vc-backup - login: ybressler count: 3 avatarUrl: https://avatars.githubusercontent.com/u/40807730?v=4 url: https://github.com/ybressler last_month_active: [] top_contributors: - login: Viicos count: 531 avatarUrl: https://avatars.githubusercontent.com/u/65306057?u=fcd677dc1b9bef12aa103613e5ccb3f8ce305af9&v=4 url: https://github.com/Viicos - login: samuelcolvin count: 408 avatarUrl: https://avatars.githubusercontent.com/u/4039449?u=42eb3b833047c8c4b4f647a031eaef148c16d93f&v=4 url: https://github.com/samuelcolvin - login: sydney-runkle count: 382 avatarUrl: https://avatars.githubusercontent.com/u/54324534?u=acc3756515d6f87acc91e36a4478557cba9d9dac&v=4 url: https://github.com/sydney-runkle - login: dmontagu count: 316 avatarUrl: https://avatars.githubusercontent.com/u/35119617?u=540f30c937a6450812628b9592a1dfe91bbe148e&v=4 url: https://github.com/dmontagu - login: adriangb count: 199 avatarUrl: https://avatars.githubusercontent.com/u/1755071?u=612704256e38d6ac9cbed24f10e4b6ac2da74ecb&v=4 url: https://github.com/adriangb - login: hramezani count: 199 avatarUrl: https://avatars.githubusercontent.com/u/3122442?u=f387fc2dbc0c681f23e80e2ad705790fafcec9a2&v=4 url: https://github.com/hramezani - login: PrettyWood count: 122 avatarUrl: https://avatars.githubusercontent.com/u/18406791?u=4853940cf5eeffb5bbb9ba06ad862f28bc68d69e&v=4 url: https://github.com/PrettyWood - login: Kludex count: 112 avatarUrl: https://avatars.githubusercontent.com/u/7353520?u=df8a3f06ba8f55ae1967a3e2d5ed882903a4e330&v=4 url: https://github.com/Kludex - login: davidhewitt count: 94 avatarUrl: https://avatars.githubusercontent.com/u/1939362?u=b4b48981c3a097daaad16c4c5417aa7a3e5e32d9&v=4 url: https://github.com/davidhewitt - login: tpdorsey count: 71 avatarUrl: https://avatars.githubusercontent.com/u/370316?u=eb206070cfe47f242d5fcea2e6c7514f4d0f27f5&v=4 url: https://github.com/tpdorsey - login: lig count: 49 avatarUrl: https://avatars.githubusercontent.com/u/38705?v=4 url: https://github.com/lig - login: pyup-bot count: 46 avatarUrl: https://avatars.githubusercontent.com/u/16239342?u=8454ae029661131445080f023e1efccc29166485&v=4 url: https://github.com/pyup-bot - login: tiangolo count: 22 avatarUrl: https://avatars.githubusercontent.com/u/1326112?u=cb5d06e73a9e1998141b1641aa88e443c6717651&v=4 url: https://github.com/tiangolo - login: Bobronium count: 19 avatarUrl: https://avatars.githubusercontent.com/u/36469655?u=3e75730b174cd290198fb0597b417ea48da6586b&v=4 url: https://github.com/Bobronium - login: alexmojaki count: 18 avatarUrl: https://avatars.githubusercontent.com/u/3627481?u=9bb2e0cf1c5ef3d0609d2e639a135b7b4ca8b463&v=4 url: https://github.com/alexmojaki - login: Gr1N count: 17 avatarUrl: https://avatars.githubusercontent.com/u/1087619?u=cd78c4f602bf9f9667277dd0af9302a7fe9dd75a&v=4 url: https://github.com/Gr1N - login: misrasaurabh1 count: 16 avatarUrl: https://avatars.githubusercontent.com/u/1271289?u=b83b0a82b2c95990d93cefbeb8f548d9f2f090c2&v=4 url: https://github.com/misrasaurabh1 - login: uriyyo count: 15 avatarUrl: https://avatars.githubusercontent.com/u/32038156?u=c26ca9b821fcf6499b84db75f553d4980bf8d023&v=4 url: https://github.com/uriyyo - login: pilosus count: 12 avatarUrl: https://avatars.githubusercontent.com/u/6400248?u=88cadd1dd6376e7000934e93712c5eb0138c1616&v=4 url: https://github.com/pilosus - login: yezz123 count: 12 avatarUrl: https://avatars.githubusercontent.com/u/52716203?u=21b53ce4115062b1e20cb513e64ca0000c2ef127&v=4 url: https://github.com/yezz123 - login: cdce8p count: 12 avatarUrl: https://avatars.githubusercontent.com/u/30130371?v=4 url: https://github.com/cdce8p - login: kc0506 count: 12 avatarUrl: https://avatars.githubusercontent.com/u/89458301?u=75f53e971fcba3ff61836c389505a420bddd865c&v=4 url: https://github.com/kc0506 - login: StephenBrown2 count: 10 avatarUrl: https://avatars.githubusercontent.com/u/1148665?u=b69e6fe797302f025a2d125e377e27f8ea0b8058&v=4 url: https://github.com/StephenBrown2 - login: koxudaxi count: 9 avatarUrl: https://avatars.githubusercontent.com/u/630670?u=507d8577b4b3670546b449c4c2ccbc5af40d72f7&v=4 url: https://github.com/koxudaxi - login: aminalaee count: 8 avatarUrl: https://avatars.githubusercontent.com/u/19784933?v=4 url: https://github.com/aminalaee - login: NeevCohen count: 8 avatarUrl: https://avatars.githubusercontent.com/u/70970900?u=573a3175906348e0d1529104d56b391e93ca0250&v=4 url: https://github.com/NeevCohen - login: layday count: 7 avatarUrl: https://avatars.githubusercontent.com/u/31134424?u=e8afd95a97b5556c467d1be27788950e67378ef1&v=4 url: https://github.com/layday - login: daviskirk count: 7 avatarUrl: https://avatars.githubusercontent.com/u/1049817?u=b42e1148d23ea9039b325975bbea3ff8c5b4e3ec&v=4 url: https://github.com/daviskirk - login: tlambert03 count: 7 avatarUrl: https://avatars.githubusercontent.com/u/1609449?u=922abf0524b47739b37095e553c99488814b05db&v=4 url: https://github.com/tlambert03 - login: dgasmith count: 6 avatarUrl: https://avatars.githubusercontent.com/u/1769841?u=44e83d7974f0ab5c431340f1669d98f781594980&v=4 url: https://github.com/dgasmith - login: Atheuz count: 6 avatarUrl: https://avatars.githubusercontent.com/u/202696?v=4 url: https://github.com/Atheuz - login: cclauss count: 6 avatarUrl: https://avatars.githubusercontent.com/u/3709715?u=0745d1d2473894c33f3b35f0b965d71cc9aec553&v=4 url: https://github.com/cclauss - login: AdolfoVillalobos count: 6 avatarUrl: https://avatars.githubusercontent.com/u/16639270?u=faa71bcfb3273a32cd81711a56998e115bca7fcc&v=4 url: https://github.com/AdolfoVillalobos - login: DouweM count: 6 avatarUrl: https://avatars.githubusercontent.com/u/159434?u=45706bfe14e7ff6afceb81b01f8316efa808ee65&v=4 url: https://github.com/DouweM - login: nuno-andre count: 5 avatarUrl: https://avatars.githubusercontent.com/u/6339494?u=893876f31ce65fa8ad8cfcc592392a77f0f8af38&v=4 url: https://github.com/nuno-andre - login: ofek count: 5 avatarUrl: https://avatars.githubusercontent.com/u/9677399?u=386c330f212ce467ce7119d9615c75d0e9b9f1ce&v=4 url: https://github.com/ofek - login: JensHeinrich count: 5 avatarUrl: https://avatars.githubusercontent.com/u/59469646?u=86d6a20768cc4cc65622eafd86672147321bd8f8&v=4 url: https://github.com/JensHeinrich - login: ornariece count: 5 avatarUrl: https://avatars.githubusercontent.com/u/25489980?u=1e9b5cbbbb1516fbea6da00429e4eef0ef79e4e6&v=4 url: https://github.com/ornariece - login: mschoettle count: 5 avatarUrl: https://avatars.githubusercontent.com/u/9328433?u=8546519cb04223cd878285d72c27850b5f3f0882&v=4 url: https://github.com/mschoettle - login: karta9821 count: 5 avatarUrl: https://avatars.githubusercontent.com/u/44468031?u=1590b6d141e6cbcc1862a95959b9a134fdb1f108&v=4 url: https://github.com/karta9821 - login: Rohan5commit count: 5 avatarUrl: https://avatars.githubusercontent.com/u/181558744?u=e91b9d6f486298d4687e06be4a32857049ae4c2a&v=4 url: https://github.com/Rohan5commit - login: hmvp count: 4 avatarUrl: https://avatars.githubusercontent.com/u/1734544?v=4 url: https://github.com/hmvp - login: retnikt count: 4 avatarUrl: https://avatars.githubusercontent.com/u/24581770?v=4 url: https://github.com/retnikt - login: therefromhere count: 4 avatarUrl: https://avatars.githubusercontent.com/u/197540?v=4 url: https://github.com/therefromhere - login: JeanArhancet count: 4 avatarUrl: https://avatars.githubusercontent.com/u/10811879?v=4 url: https://github.com/JeanArhancet - login: commonism count: 4 avatarUrl: https://avatars.githubusercontent.com/u/164513?v=4 url: https://github.com/commonism - login: MarkusSintonen count: 4 avatarUrl: https://avatars.githubusercontent.com/u/12939780?v=4 url: https://github.com/MarkusSintonen top_reviewers: - login: samuelcolvin count: 706 avatarUrl: https://avatars.githubusercontent.com/u/4039449?u=42eb3b833047c8c4b4f647a031eaef148c16d93f&v=4 url: https://github.com/samuelcolvin - login: sydney-runkle count: 691 avatarUrl: https://avatars.githubusercontent.com/u/54324534?u=acc3756515d6f87acc91e36a4478557cba9d9dac&v=4 url: https://github.com/sydney-runkle - login: Viicos count: 622 avatarUrl: https://avatars.githubusercontent.com/u/65306057?u=fcd677dc1b9bef12aa103613e5ccb3f8ce305af9&v=4 url: https://github.com/Viicos - login: hramezani count: 540 avatarUrl: https://avatars.githubusercontent.com/u/3122442?u=f387fc2dbc0c681f23e80e2ad705790fafcec9a2&v=4 url: https://github.com/hramezani - login: dmontagu count: 532 avatarUrl: https://avatars.githubusercontent.com/u/35119617?u=540f30c937a6450812628b9592a1dfe91bbe148e&v=4 url: https://github.com/dmontagu - login: adriangb count: 428 avatarUrl: https://avatars.githubusercontent.com/u/1755071?u=612704256e38d6ac9cbed24f10e4b6ac2da74ecb&v=4 url: https://github.com/adriangb - login: davidhewitt count: 291 avatarUrl: https://avatars.githubusercontent.com/u/1939362?u=b4b48981c3a097daaad16c4c5417aa7a3e5e32d9&v=4 url: https://github.com/davidhewitt - login: Kludex count: 265 avatarUrl: https://avatars.githubusercontent.com/u/7353520?u=df8a3f06ba8f55ae1967a3e2d5ed882903a4e330&v=4 url: https://github.com/Kludex - login: PrettyWood count: 211 avatarUrl: https://avatars.githubusercontent.com/u/18406791?u=4853940cf5eeffb5bbb9ba06ad862f28bc68d69e&v=4 url: https://github.com/PrettyWood - login: lig count: 103 avatarUrl: https://avatars.githubusercontent.com/u/38705?v=4 url: https://github.com/lig - login: tpdorsey count: 77 avatarUrl: https://avatars.githubusercontent.com/u/370316?u=eb206070cfe47f242d5fcea2e6c7514f4d0f27f5&v=4 url: https://github.com/tpdorsey - login: hyperlint-ai-deprecated count: 57 avatarUrl: https://avatars.githubusercontent.com/in/718456?v=4 url: https://github.com/apps/hyperlint-ai-deprecated - login: tiangolo count: 45 avatarUrl: https://avatars.githubusercontent.com/u/1326112?u=cb5d06e73a9e1998141b1641aa88e443c6717651&v=4 url: https://github.com/tiangolo - login: DouweM count: 43 avatarUrl: https://avatars.githubusercontent.com/u/159434?u=45706bfe14e7ff6afceb81b01f8316efa808ee65&v=4 url: https://github.com/DouweM - login: alexmojaki count: 33 avatarUrl: https://avatars.githubusercontent.com/u/3627481?u=9bb2e0cf1c5ef3d0609d2e639a135b7b4ca8b463&v=4 url: https://github.com/alexmojaki - login: Bobronium count: 27 avatarUrl: https://avatars.githubusercontent.com/u/36469655?u=3e75730b174cd290198fb0597b417ea48da6586b&v=4 url: https://github.com/Bobronium - login: friendlymatthew count: 25 avatarUrl: https://avatars.githubusercontent.com/u/38759997?u=d7ed300a53abb0765bfb12362203dd5255c29dee&v=4 url: https://github.com/friendlymatthew - login: coderabbitai count: 18 avatarUrl: https://avatars.githubusercontent.com/in/347564?v=4 url: https://github.com/apps/coderabbitai - login: Gr1N count: 17 avatarUrl: https://avatars.githubusercontent.com/u/1087619?u=cd78c4f602bf9f9667277dd0af9302a7fe9dd75a&v=4 url: https://github.com/Gr1N - login: StephenBrown2 count: 17 avatarUrl: https://avatars.githubusercontent.com/u/1148665?u=b69e6fe797302f025a2d125e377e27f8ea0b8058&v=4 url: https://github.com/StephenBrown2 - login: MarkusSintonen count: 16 avatarUrl: https://avatars.githubusercontent.com/u/12939780?v=4 url: https://github.com/MarkusSintonen - login: ybressler count: 15 avatarUrl: https://avatars.githubusercontent.com/u/40807730?u=fa12d64259ccf9eca18847102335ee6408cb9eaa&v=4 url: https://github.com/ybressler - login: uriyyo count: 11 avatarUrl: https://avatars.githubusercontent.com/u/32038156?u=c26ca9b821fcf6499b84db75f553d4980bf8d023&v=4 url: https://github.com/uriyyo - login: copilot-pull-request-reviewer count: 11 avatarUrl: https://avatars.githubusercontent.com/in/946600?v=4 url: https://github.com/apps/copilot-pull-request-reviewer - login: koxudaxi count: 10 avatarUrl: https://avatars.githubusercontent.com/u/630670?u=507d8577b4b3670546b449c4c2ccbc5af40d72f7&v=4 url: https://github.com/koxudaxi - login: daviskirk count: 10 avatarUrl: https://avatars.githubusercontent.com/u/1049817?u=b42e1148d23ea9039b325975bbea3ff8c5b4e3ec&v=4 url: https://github.com/daviskirk - login: yezz123 count: 10 avatarUrl: https://avatars.githubusercontent.com/u/52716203?u=21b53ce4115062b1e20cb513e64ca0000c2ef127&v=4 url: https://github.com/yezz123 - login: Zac-HD count: 8 avatarUrl: https://avatars.githubusercontent.com/u/12229877?u=abc44dbce4bb3eca2def638bd0d4ab4cfef91b74&v=4 url: https://github.com/Zac-HD - login: layday count: 7 avatarUrl: https://avatars.githubusercontent.com/u/31134424?u=e8afd95a97b5556c467d1be27788950e67378ef1&v=4 url: https://github.com/layday - login: kc0506 count: 7 avatarUrl: https://avatars.githubusercontent.com/u/89458301?u=75f53e971fcba3ff61836c389505a420bddd865c&v=4 url: https://github.com/kc0506 - login: pilosus count: 6 avatarUrl: https://avatars.githubusercontent.com/u/6400248?u=88cadd1dd6376e7000934e93712c5eb0138c1616&v=4 url: https://github.com/pilosus - login: Kilo59 count: 6 avatarUrl: https://avatars.githubusercontent.com/u/13108583?u=0d34d39c0628091596c9d5ebb4e802009e8c4aca&v=4 url: https://github.com/Kilo59 - login: JeanArhancet count: 6 avatarUrl: https://avatars.githubusercontent.com/u/10811879?v=4 url: https://github.com/JeanArhancet - login: andresliszt count: 6 avatarUrl: https://avatars.githubusercontent.com/u/36001403?u=51045ee35d6c53867638517e8dcf817927d77e85&v=4 url: https://github.com/andresliszt - login: themavik count: 6 avatarUrl: https://avatars.githubusercontent.com/u/179817126?u=5fd66e7c32b041af1b9679aa0b1c8587e8578f14&v=4 url: https://github.com/themavik - login: tlambert03 count: 5 avatarUrl: https://avatars.githubusercontent.com/u/1609449?u=922abf0524b47739b37095e553c99488814b05db&v=4 url: https://github.com/tlambert03 - login: christianbundy count: 5 avatarUrl: https://avatars.githubusercontent.com/u/537700?u=d6cc48076a656f94710d8e1266c92792b8c9d7c4&v=4 url: https://github.com/christianbundy - login: nix010 count: 5 avatarUrl: https://avatars.githubusercontent.com/u/16438204?u=f700f440b89e715795c3bc091800b8d3f39c58d9&v=4 url: https://github.com/nix010 - login: karta9821 count: 5 avatarUrl: https://avatars.githubusercontent.com/u/44468031?u=1590b6d141e6cbcc1862a95959b9a134fdb1f108&v=4 url: https://github.com/karta9821 - login: graingert count: 4 avatarUrl: https://avatars.githubusercontent.com/u/413772?v=4 url: https://github.com/graingert - login: hmvp count: 4 avatarUrl: https://avatars.githubusercontent.com/u/1734544?v=4 url: https://github.com/hmvp - login: wozniakty count: 4 avatarUrl: https://avatars.githubusercontent.com/u/5042313?u=8917c345dcb528733073ff1ce8a512e33f548512&v=4 url: https://github.com/wozniakty - login: nuno-andre count: 4 avatarUrl: https://avatars.githubusercontent.com/u/6339494?u=893876f31ce65fa8ad8cfcc592392a77f0f8af38&v=4 url: https://github.com/nuno-andre - login: antdking count: 4 avatarUrl: https://avatars.githubusercontent.com/u/2099618?u=a9899c1fea247d500e5368a1157a392bcd82e81d&v=4 url: https://github.com/antdking - login: dimaqq count: 4 avatarUrl: https://avatars.githubusercontent.com/u/662249?u=15313dec91bae789685e4abb3c2152251de41948&v=4 url: https://github.com/dimaqq - login: DetachHead count: 4 avatarUrl: https://avatars.githubusercontent.com/u/57028336?u=387c51980cb3734c41543ae2276a23736906bdb9&v=4 url: https://github.com/DetachHead - login: JensHeinrich count: 4 avatarUrl: https://avatars.githubusercontent.com/u/59469646?u=86d6a20768cc4cc65622eafd86672147321bd8f8&v=4 url: https://github.com/JensHeinrich - login: cclauss count: 4 avatarUrl: https://avatars.githubusercontent.com/u/3709715?u=0745d1d2473894c33f3b35f0b965d71cc9aec553&v=4 url: https://github.com/cclauss - login: CloseChoice count: 4 avatarUrl: https://avatars.githubusercontent.com/u/31857876?v=4 url: https://github.com/CloseChoice pydantic-pydantic-e28e879/docs/plugins/schema_mappings.toml000066400000000000000000000310141526274674700242020ustar00rootroot00000000000000[None] py_type = "None" json_type = "null" additional = "" defined_in = "JSON Schema Core" notes = "Same for `type(None)` or `Literal[None]`" [bool] py_type = "bool" json_type = "boolean" additional = "" defined_in = "JSON Schema Core" notes = "" [str] py_type = "str" json_type = "string" additional = "" defined_in = "JSON Schema Core" notes = "" [float] py_type = "float" json_type = "number" additional = "" defined_in = "JSON Schema Core" notes = "" [int] py_type = "int" json_type = "integer" additional = "" defined_in = "JSON Schema Validation" notes = "" [dict] py_type = "dict" json_type = "object" additional = "" defined_in = "JSON Schema Core" notes = "" [list] py_type = "list" json_type = "array" defined_in = "JSON Schema Core" notes = "" [list.additional.items] [tuple-positional] py_type = "tuple-positional" json_type = "array" defined_in = "JSON Schema Core" notes = "" [tuple-positional.additional.items] [tuple-variable] py_type = "tuple-variable" json_type = "array" defined_in = "JSON Schema Core" notes = "" [tuple-variable.additional.items] [set] py_type = "set" json_type = "array" defined_in = "JSON Schema Validation" notes = "" [set.additional] uniqueItems = true [set.additional.items] [frozenset] py_type = "frozenset" json_type = "array" defined_in = "JSON Schema Validation" notes = "" [frozenset.additional] uniqueItems = true [frozenset.additional.items] ["List[str]"] py_type = "List[str]" json_type = "array" defined_in = "JSON Schema Validation" notes = "And equivalently for any other sub type, e.g. `List[int]`." ["List[str]".additional.items] type = "string" ["Tuple[str, ...]"] py_type = "Tuple[str, ...]" json_type = "array" defined_in = "JSON Schema Validation" notes = "And equivalently for any other sub type, e.g. `Tuple[int, ...]`." ["Tuple[str, ...]".additional.items] type = "string" ["Tuple[str, int]"] py_type = "Tuple[str, int]" json_type = "array" defined_in = "JSON Schema Validation" notes = "And equivalently for any other set of subtypes. Note: If using schemas for OpenAPI, you shouldn't use this declaration, as it would not be valid in OpenAPI (although it is valid in JSON Schema)." ["Tuple[str, int]".additional] minItems = 2 maxItems = 2 [["Tuple[str, int]".additional.items]] type = "string" [["Tuple[str, int]".additional.items]] type = "integer" ["Dict[str, int]"] py_type = "Dict[str, int]" json_type = "object" defined_in = "JSON Schema Validation" notes = "And equivalently for any other subfields for dicts. Have in mind that although you can use other types as keys for dicts with Pydantic, only strings are valid keys for JSON, and so, only str is valid as JSON Schema key types." ["Dict[str, int]".additional.additionalProperties] type = "integer" ["Union[str, int]"] py_type = "Union[str, int]" json_type = "anyOf" defined_in = "JSON Schema Validation" notes = "And equivalently for any other subfields for unions." [["Union[str, int]".additional.anyOf]] type = "string" [["Union[str, int]".additional.anyOf]] type = "integer" [Enum] py_type = "Enum" json_type = "enum" additional = "{\"enum\": [...]}" defined_in = "JSON Schema Validation" notes = "All the literal values in the enum are included in the definition." [SecretStr] py_type = "SecretStr" json_type = "string" defined_in = "JSON Schema Validation" notes = "" [SecretStr.additional] writeOnly = true [SecretBytes] py_type = "SecretBytes" json_type = "string" defined_in = "JSON Schema Validation" notes = "" [SecretBytes.additional] writeOnly = true [EmailStr] py_type = "EmailStr" json_type = "string" defined_in = "JSON Schema Validation" notes = "" [EmailStr.additional] format = "email" [NameEmail] py_type = "NameEmail" json_type = "string" defined_in = "Pydantic standard \"format\" extension" notes = "" [NameEmail.additional] format = "name-email" [AnyUrl] py_type = "AnyUrl" json_type = "string" defined_in = "JSON Schema Validation" notes = "" [AnyUrl.additional] format = "uri" [Pattern] py_type = "Pattern" json_type = "string" defined_in = "JSON Schema Validation" notes = "" [Pattern.additional] format = "regex" [bytes] py_type = "bytes" json_type = "string" defined_in = "OpenAPI" notes = "" [bytes.additional] format = "binary" [Decimal] py_type = "Decimal" json_type = "number" additional = "" defined_in = "JSON Schema Core" notes = "" [UUID1] py_type = "UUID1" json_type = "string" defined_in = "Pydantic standard \"format\" extension" notes = "" [UUID1.additional] format = "uuid1" [UUID3] py_type = "UUID3" json_type = "string" defined_in = "Pydantic standard \"format\" extension" notes = "" [UUID3.additional] format = "uuid3" [UUID4] py_type = "UUID4" json_type = "string" defined_in = "Pydantic standard \"format\" extension" notes = "" [UUID4.additional] format = "uuid4" [UUID5] py_type = "UUID5" json_type = "string" defined_in = "Pydantic standard \"format\" extension" notes = "" [UUID5.additional] format = "uuid5" [UUID] py_type = "UUID" json_type = "string" defined_in = "Pydantic standard \"format\" extension" notes = "Suggested in OpenAPI." [UUID.additional] format = "uuid" [FilePath] py_type = "FilePath" json_type = "string" defined_in = "Pydantic standard \"format\" extension" notes = "" [FilePath.additional] format = "file-path" [DirectoryPath] py_type = "DirectoryPath" json_type = "string" defined_in = "Pydantic standard \"format\" extension" notes = "" [DirectoryPath.additional] format = "directory-path" [Path] py_type = "Path" json_type = "string" defined_in = "Pydantic standard \"format\" extension" notes = "" [Path.additional] format = "path" [datetime] py_type = "datetime" json_type = "string" defined_in = "JSON Schema Validation" notes = "" [datetime.additional] format = "date-time" [date] py_type = "date" json_type = "string" defined_in = "JSON Schema Validation" notes = "" [date.additional] format = "date" [time] py_type = "time" json_type = "string" defined_in = "JSON Schema Validation" notes = "" [time.additional] format = "time" [timedelta] py_type = "timedelta" json_type = "number" defined_in = "Difference in seconds (a `float`), with Pydantic standard \"format\" extension" notes = "Suggested in JSON Schema repository's issues by maintainer." [timedelta.additional] format = "time-delta" [Json] py_type = "Json" json_type = "string" defined_in = "Pydantic standard \"format\" extension" notes = "" [Json.additional] format = "json-string" [IPv4Address] py_type = "IPv4Address" json_type = "string" defined_in = "JSON Schema Validation" notes = "" [IPv4Address.additional] format = "ipv4" [IPv6Address] py_type = "IPv6Address" json_type = "string" defined_in = "JSON Schema Validation" notes = "" [IPv6Address.additional] format = "ipv6" [IPvAnyAddress] py_type = "IPvAnyAddress" json_type = "string" defined_in = "Pydantic standard \"format\" extension" notes = "IPv4 or IPv6 address as used in `ipaddress` module" [IPvAnyAddress.additional] format = "ipvanyaddress" [IPv4Interface] py_type = "IPv4Interface" json_type = "string" defined_in = "Pydantic standard \"format\" extension" notes = "IPv4 interface as used in `ipaddress` module" [IPv4Interface.additional] format = "ipv4interface" [IPv6Interface] py_type = "IPv6Interface" json_type = "string" defined_in = "Pydantic standard \"format\" extension" notes = "IPv6 interface as used in `ipaddress` module" [IPv6Interface.additional] format = "ipv6interface" [IPvAnyInterface] py_type = "IPvAnyInterface" json_type = "string" defined_in = "Pydantic standard \"format\" extension" notes = "IPv4 or IPv6 interface as used in `ipaddress` module" [IPvAnyInterface.additional] format = "ipvanyinterface" [IPv4Network] py_type = "IPv4Network" json_type = "string" defined_in = "Pydantic standard \"format\" extension" notes = "IPv4 network as used in `ipaddress` module" [IPv4Network.additional] format = "ipv4network" [IPv6Network] py_type = "IPv6Network" json_type = "string" defined_in = "Pydantic standard \"format\" extension" notes = "IPv6 network as used in `ipaddress` module" [IPv6Network.additional] format = "ipv6network" [IPvAnyNetwork] py_type = "IPvAnyNetwork" json_type = "string" defined_in = "Pydantic standard \"format\" extension" notes = "IPv4 or IPv6 network as used in `ipaddress` module" [IPvAnyNetwork.additional] format = "ipvanynetwork" [StrictBool] py_type = "StrictBool" json_type = "boolean" additional = "" defined_in = "JSON Schema Core" notes = "" [StrictStr] py_type = "StrictStr" json_type = "string" additional = "" defined_in = "JSON Schema Core" notes = "" [ConstrainedStr] py_type = "ConstrainedStr" json_type = "string" additional = "" defined_in = "JSON Schema Core" notes = "If the type has values declared for the constraints, they are included as validations. See the mapping for `constr` below." ["constr(pattern='^text$', min_length=2, max_length=10)"] py_type = "constr(pattern='^text$', min_length=2, max_length=10)" json_type = "string" defined_in = "JSON Schema Validation" notes = "Any argument not passed to the function (not defined) will not be included in the schema." ["constr(pattern='^text$', min_length=2, max_length=10)".additional] pattern = "^text$" minLength = 2 maxLength = 10 [ConstrainedInt] py_type = "ConstrainedInt" json_type = "integer" additional = "" defined_in = "JSON Schema Core" notes = "If the type has values declared for the constraints, they are included as validations. See the mapping for `conint` below." ["conint(gt=1, ge=2, lt=6, le=5, multiple_of=2)"] py_type = "conint(gt=1, ge=2, lt=6, le=5, multiple_of=2)" json_type = "integer" defined_in = "" notes = "Any argument not passed to the function (not defined) will not be included in the schema." ["conint(gt=1, ge=2, lt=6, le=5, multiple_of=2)".additional] maximum = 5 exclusiveMaximum = 6 minimum = 2 exclusiveMinimum = 1 multipleOf = 2 [PositiveInt] py_type = "PositiveInt" json_type = "integer" defined_in = "JSON Schema Validation" notes = "" [PositiveInt.additional] exclusiveMinimum = 0 [NegativeInt] py_type = "NegativeInt" json_type = "integer" defined_in = "JSON Schema Validation" notes = "" [NegativeInt.additional] exclusiveMaximum = 0 [NonNegativeInt] py_type = "NonNegativeInt" json_type = "integer" defined_in = "JSON Schema Validation" notes = "" [NonNegativeInt.additional] minimum = 0 [NonPositiveInt] py_type = "NonPositiveInt" json_type = "integer" defined_in = "JSON Schema Validation" notes = "" [NonPositiveInt.additional] maximum = 0 [ConstrainedFloat] py_type = "ConstrainedFloat" json_type = "number" additional = "" defined_in = "JSON Schema Core" notes = "If the type has values declared for the constraints, they are included as validations. See the mapping for `confloat` below." ["confloat(gt=1, ge=2, lt=6, le=5, multiple_of=2)"] py_type = "confloat(gt=1, ge=2, lt=6, le=5, multiple_of=2)" json_type = "number" defined_in = "JSON Schema Validation" notes = "Any argument not passed to the function (not defined) will not be included in the schema." ["confloat(gt=1, ge=2, lt=6, le=5, multiple_of=2)".additional] maximum = 5 exclusiveMaximum = 6 minimum = 2 exclusiveMinimum = 1 multipleOf = 2 [PositiveFloat] py_type = "PositiveFloat" json_type = "number" defined_in = "JSON Schema Validation" notes = "" [PositiveFloat.additional] exclusiveMinimum = 0 [NegativeFloat] py_type = "NegativeFloat" json_type = "number" defined_in = "JSON Schema Validation" notes = "" [NegativeFloat.additional] exclusiveMaximum = 0 [NonNegativeFloat] py_type = "NonNegativeFloat" json_type = "number" defined_in = "JSON Schema Validation" notes = "" [NonNegativeFloat.additional] minimum = 0 [NonPositiveFloat] py_type = "NonPositiveFloat" json_type = "number" defined_in = "JSON Schema Validation" notes = "" [NonPositiveFloat.additional] maximum = 0 [ConstrainedDecimal] py_type = "ConstrainedDecimal" json_type = "number" additional = "" defined_in = "JSON Schema Core" notes = "If the type has values declared for the constraints, they are included as validations. See the mapping for `condecimal` below." ["condecimal(gt=1, ge=2, lt=6, le=5, multiple_of=2)"] py_type = "condecimal(gt=1, ge=2, lt=6, le=5, multiple_of=2)" json_type = "number" defined_in = "JSON Schema Validation" notes = "Any argument not passed to the function (not defined) will not be included in the schema." ["condecimal(gt=1, ge=2, lt=6, le=5, multiple_of=2)".additional] maximum = 5 exclusiveMaximum = 6 minimum = 2 exclusiveMinimum = 1 multipleOf = 2 [BaseModel] py_type = "BaseModel" json_type = "object" additional = "" defined_in = "JSON Schema Core" notes = "All the properties defined will be defined with standard JSON Schema, including submodels." [Color] py_type = "Color" json_type = "string" defined_in = "Pydantic standard \"format\" extension" notes = "" [Color.additional] format = "color" pydantic-pydantic-e28e879/docs/plugins/using.toml000066400000000000000000000052121526274674700221720ustar00rootroot00000000000000[[libs]] repo = "huggingface/transformers" stars = 138570 [[libs]] repo = "hwchase17/langchain" stars = 99542 [[libs]] repo = "tiangolo/fastapi" stars = 80497 [[libs]] repo = "apache/airflow" stars = 38577 [[libs]] repo = "lm-sys/FastChat" stars = 37650 [[libs]] repo = "microsoft/DeepSpeed" stars = 36521 [[libs]] repo = "OpenBB-finance/OpenBBTerminal" stars = 35971 [[libs]] repo = "gradio-app/gradio" stars = 35740 [[libs]] repo = "ray-project/ray" stars = 35176 [[libs]] repo = "pola-rs/polars" stars = 31698 [[libs]] repo = "Lightning-AI/lightning" stars = 28902 [[libs]] repo = "mindsdb/mindsdb" stars = 27141 [[libs]] repo = "embedchain/embedchain" stars = 24379 [[libs]] repo = "pynecone-io/reflex" stars = 21558 [[libs]] repo = "heartexlabs/label-studio" stars = 20571 [[libs]] repo = "Sanster/lama-cleaner" stars = 20313 [[libs]] repo = "mlflow/mlflow" stars = 19393 [[libs]] repo = "RasaHQ/rasa" stars = 19337 [[libs]] repo = "spotDL/spotify-downloader" stars = 18604 [[libs]] repo = "chroma-core/chroma" stars = 17393 [[libs]] repo = "airbytehq/airbyte" stars = 17120 [[libs]] repo = "openai/evals" stars = 15437 [[libs]] repo = "tiangolo/sqlmodel" stars = 15127 [[libs]] repo = "ydataai/ydata-profiling" stars = 12687 [[libs]] repo = "pyodide/pyodide" stars = 12653 [[libs]] repo = "dagster-io/dagster" stars = 12440 [[libs]] repo = "PaddlePaddle/PaddleNLP" stars = 12312 [[libs]] repo = "matrix-org/synapse" stars = 11857 [[libs]] repo = "lucidrains/DALLE2-pytorch" stars = 11207 [[libs]] repo = "great-expectations/great_expectations" stars = 10164 [[libs]] repo = "modin-project/modin" stars = 10002 [[libs]] repo = "aws/serverless-application-model" stars = 9402 [[libs]] repo = "sqlfluff/sqlfluff" stars = 8535 [[libs]] repo = "replicate/cog" stars = 8344 [[libs]] repo = "autogluon/autogluon" stars = 8326 [[libs]] repo = "lucidrains/imagen-pytorch" stars = 8164 [[libs]] repo = "brycedrennan/imaginAIry" stars = 8050 [[libs]] repo = "vitalik/django-ninja" stars = 7685 [[libs]] repo = "NVlabs/SPADE" stars = 7632 [[libs]] repo = "bridgecrewio/checkov" stars = 7340 [[libs]] repo = "bentoml/BentoML" stars = 7322 [[libs]] repo = "skypilot-org/skypilot" stars = 7113 [[libs]] repo = "apache/iceberg" stars = 6853 [[libs]] repo = "deeppavlov/DeepPavlov" stars = 6777 [[libs]] repo = "PrefectHQ/marvin" stars = 5454 [[libs]] repo = "NVIDIA/NeMo-Guardrails" stars = 4383 [[libs]] repo = "microsoft/FLAML" stars = 4035 [[libs]] repo = "jina-ai/discoart" stars = 3846 [[libs]] repo = "docarray/docarray" stars = 3007 [[libs]] repo = "aws-powertools/powertools-lambda-python" stars = 2980 [[libs]] repo = "roman-right/beanie" stars = 2172 [[libs]] repo = "art049/odmantic" stars = 1096 pydantic-pydantic-e28e879/docs/plugins/using_update.py000066400000000000000000000016151526274674700232140ustar00rootroot00000000000000from pathlib import Path from time import sleep import requests import tomli THIS_DIR = Path(__file__).parent session = requests.Session() def update_lib(lib, *, retry=0): repo = lib['repo'] url = f'https://api.github.com/repos/{repo}' resp = session.get(url) if resp.status_code == 403 and retry < 3: print(f'retrying {repo} {retry}') sleep(5) return update_lib(lib, retry=retry + 1) resp.raise_for_status() data = resp.json() stars = data['watchers_count'] print(f'{repo}: {stars}') lib['stars'] = stars with (THIS_DIR / 'using.toml').open('rb') as f: table = tomli.load(f) libs = table['libs'] for lib in libs: update_lib(lib) libs.sort(key=lambda lib: lib['stars'], reverse=True) with (THIS_DIR / 'using.toml').open('w') as f: for lib in libs: f.write('[[libs]]\nrepo = "{repo}"\nstars = {stars}\n'.format(**lib)) pydantic-pydantic-e28e879/docs/pydantic_people.md000066400000000000000000000026371526274674700222000ustar00rootroot00000000000000# Pydantic People Pydantic has an amazing community of contributors, reviewers, and experts that help propel the project forward. Here, we celebrate those people and their contributions. ## Maintainers These are the current maintainers of the Pydantic repository. Feel free to tag us if you have questions, review requests, or feature requests for which you'd like feedback! {{ maintainers }} ## Experts These are the users that have helped others the most with questions in GitHub through *all time*. {{ experts }} ### Most active users last month These are the users that have helped others the most with questions in GitHub during the last month. {{ most_active_users }} ## Top contributors These are the users that have created the most pull requests that have been *merged*. {{ top_contributors }} ## Top Reviewers These are the users that have reviewed the most Pull Requests from others, assisting with code quality, documentation, bug fixes, feature requests, etc. {{ top_reviewers }} ## About the data The data displayed above is calculated monthly via the Github GraphQL API (see [source code](https://github.com/pydantic/pydantic/tree/main/.github/actions/people/people.py), many thanks to [Sebastián Ramírez](https://github.com/tiangolo) for the script from which we based this logic). Depending on changing conditions, the thresholds for the different categories of contributors may change in the future. pydantic-pydantic-e28e879/docs/theme/000077500000000000000000000000001526274674700175715ustar00rootroot00000000000000pydantic-pydantic-e28e879/docs/theme/announce.html000066400000000000000000000010711526274674700222640ustar00rootroot00000000000000 What's new — we've launched Pydantic Logfire 🔥 to help you monitor and understand your Pydantic validations. pydantic-pydantic-e28e879/docs/theme/main.html000066400000000000000000000005011526274674700213770ustar00rootroot00000000000000{% extends "base.html" %} {% block announce %} {% include 'announce.html' ignore missing %} {% endblock %} {% block content %} {{ super() }} {% include 'mkdocs_run_deps.html' ignore missing %} {% endblock %} pydantic-pydantic-e28e879/docs/theme/partials/000077500000000000000000000000001526274674700214105ustar00rootroot00000000000000pydantic-pydantic-e28e879/docs/theme/partials/search.html000066400000000000000000000034131526274674700235440ustar00rootroot00000000000000 pydantic-pydantic-e28e879/docs/version-policy.md000066400000000000000000000147531526274674700220050ustar00rootroot00000000000000First of all, we recognize that the transitions from Pydantic V1 to V2 has been and will be painful for some users. We're sorry about this pain :pray:, it was an unfortunate but necessary step to correct design mistakes of V1. **There will not be another breaking change of this magnitude!** ## Pydantic V1 Active development of V1 has already stopped, however critical bug fixes and security vulnerabilities will be fixed in V1 until the release of Pydantic V3. ## Pydantic V2 We will not intentionally make breaking changes in minor releases of V2. Functionality marked as deprecated will not be removed until the next major V3 release. Of course, some apparently safe changes and bug fixes will inevitably break some users' code — obligatory link to [xkcd](https://xkcd.com/1172/). The following changes will **NOT** be considered breaking changes, and may occur in minor releases: * Bug fixes that may result in existing code breaking, provided that such code was relying on undocumented features/constructs. * Changing the format of JSON Schema [references](https://json-schema.org/understanding-json-schema/structuring#dollarref). * Changing the `msg`, `ctx`, and `loc` fields of [`ValidationError`][pydantic_core.ValidationError] exceptions. `type` will not change — if you're programmatically parsing error messages, you should use `type`. * Adding new keys to [`ValidationError`][pydantic_core.ValidationError] exceptions — e.g. we intend to add `line_number` and `column_number` to errors when validating JSON once we migrate to a new JSON parser. * Adding new [`ValidationError`][pydantic_core.ValidationError] errors. * Changing how `__repr__` behaves, even of public classes. * The contents of the [core schemas](./internals/architecture.md#communicating-between-pydantic-and-pydantic-core-the-core-schema) (usually available under the [`__pydantic_core_schema__`][pydantic.BaseModel.__pydantic_core_schema__] attribute for Pydantic models and `core_schema` for [type adapters](./concepts/type_adapter.md)) may change between releases (this is a low-level format Pydantic uses to plan how to execute validation and serialization). In all cases we will aim to minimize churn and do so only when justified by the increase of quality of Pydantic for users. ## Pydantic V3 and beyond Any associated breaking changes in the V3 release will be introduced with care. This will include bug fixes that can't be solved in V2 without introducing a change in behavior (e.g. [fixing configuration not following the MRO](https://github.com/pydantic/pydantic/issues/9992)), or changes that don't remove existing functionality or doesn't provide proper alternatives. In V3, it is expected to merged `pydantic-core` as an internal sub-module of Pydantic, meaning it won't be published as a standalone library anymore. ## Tagging conventions Pydantic uses Git tags to identify all published versions on PyPI (including alpha and beta releases), prefixed with the `v` character. Since v2.13, `pydantic-core` has been merged as a workspace member inside the `pydantic` repository, and subsequent `pydantic-core` releases are tagged as `core-vx.y.z`. ## Experimental Features At Pydantic, we like to move quickly and innovate! To that end, we may introduce experimental features in minor releases. !!! abstract "Usage Documentation" To learn more about our current experimental features, see the [experimental features documentation](./concepts/experimental.md). Please keep in mind, experimental features are active works in progress. If these features are successful, they'll eventually become part of Pydantic. If unsuccessful, said features will be removed with little notice. While in its experimental phase, a feature's API and behaviors may not be stable, and it's very possible that changes made to the feature will not be backward-compatible. ### Naming Conventions We use one of the following naming conventions to indicate that a feature is experimental: 1. The feature is located in the [`experimental`](api/experimental.md) module. In this case, you can access the feature like this: ```python {test="skip" lint="skip"} from pydantic.experimental import feature_name ``` 2. The feature is located in the main module, but prefixed with `experimental_`. This case occurs when we add a new field, argument, or method to an existing data structure already within the main `pydantic` module. New features with these naming conventions are subject to change or removal, and we are looking for feedback and suggestions before making them a permanent part of Pydantic. See the [feedback section](./concepts/experimental.md#feedback) for more information. ### Lifecycle of Experimental Features 1. A new feature is added, either in the [`experimental`](api/experimental.md) module or with the `experimental_` prefix. 2. The behavior is often modified during patch/minor releases, with potential API/behavior changes. 3. If the feature is successful, we promote it to Pydantic with the following steps: a. If it was in the [`experimental`](api/experimental.md) module, the feature is cloned to Pydantic's main module. The original experimental feature still remains in the [`experimental`](api/experimental.md) module, but it will show a warning when used. If the feature was already in the main Pydantic module, we create a copy of the feature without the `experimental_` prefix, so the feature exists with both the official and experimental names. A deprecation warning is attached to the experimental version. b. At some point, the code of the experimental feature is removed, but there will still be a stub of the feature that provides an error message with appropriate instructions. c. As a last step, the experimental version of the feature is entirely removed from the codebase. If the feature is unsuccessful or unpopular, it's removed with little notice. A stub will remain in the location of the deprecated feature with an error message. Thanks to [streamlit](https://docs.streamlit.io/develop/quick-reference/prerelease) for the inspiration for the lifecycle and naming conventions of our new experimental feature patterns. ## Support for Python versions Pydantic will drop support for a Python version when the following conditions are met: * The Python version has reached its [expected end of life](https://devguide.python.org/versions/). * less than 5% of downloads of the most recent minor release are using that version. pydantic-pydantic-e28e879/docs/why.md000066400000000000000000000355441526274674700176330ustar00rootroot00000000000000# Why use Pydantic Validation? Today, Pydantic is downloaded many times a month and used by some of the largest and most recognisable organisations in the world. It's hard to know why so many people have adopted Pydantic since its inception six years ago, but here are a few guesses. ## Type hints powering schema validation {#type-hints} The schema that Pydantic validates against is generally defined by Python [type hints](https://docs.python.org/3/glossary.html#term-type-hint). Type hints are great for this since, if you're writing modern Python, you already know how to use them. Using type hints also means that Pydantic integrates well with static typing tools (like [mypy](https://www.mypy-lang.org/) and [Pyright](https://github.com/microsoft/pyright/)) and IDEs (like [PyCharm](https://www.jetbrains.com/pycharm/) and [VSCode](https://code.visualstudio.com/)). ???+ example "Example - just type hints" ```python from typing import Annotated, Literal from annotated_types import Gt from pydantic import BaseModel class Fruit(BaseModel): name: str # (1)! color: Literal['red', 'green'] # (2)! weight: Annotated[float, Gt(0)] # (3)! bazam: dict[str, list[tuple[int, bool, float]]] # (4)! print( Fruit( name='Apple', color='red', weight=4.2, bazam={'foobar': [(1, True, 0.1)]}, ) ) #> name='Apple' color='red' weight=4.2 bazam={'foobar': [(1, True, 0.1)]} ``` 1. The `name` field is simply annotated with `str` — any string is allowed. 2. The [`Literal`][typing.Literal] type is used to enforce that `color` is either `'red'` or `'green'`. 3. Even when we want to apply constraints not encapsulated in Python types, we can use [`Annotated`][typing.Annotated] and [`annotated-types`](https://github.com/annotated-types/annotated-types) to enforce constraints while still keeping typing support. 4. I'm not claiming "bazam" is really an attribute of fruit, but rather to show that arbitrarily complex types can easily be validated. !!! tip "Learn more" See the [documentation on supported types](concepts/types.md). ## Performance Pydantic's core validation logic is implemented in a separate package ([`pydantic-core`](https://pypi.org/project/pydantic-core)), where validation for most types is implemented in Rust. As a result, Pydantic is among the fastest data validation libraries for Python. ??? example "Performance Example - Pydantic vs. dedicated code" In general, dedicated code should be much faster than a general-purpose validator, but in this example Pydantic is >300% faster than dedicated code when parsing JSON and validating URLs. ```python {title="Performance Example" test="skip"} import json import timeit from urllib.parse import urlparse import requests from pydantic import HttpUrl, TypeAdapter reps = 7 number = 100 r = requests.get('https://api.github.com/emojis') r.raise_for_status() emojis_json = r.content def emojis_pure_python(raw_data): data = json.loads(raw_data) output = {} for key, value in data.items(): assert isinstance(key, str) url = urlparse(value) assert url.scheme in ('https', 'http') output[key] = url emojis_pure_python_times = timeit.repeat( 'emojis_pure_python(emojis_json)', globals={ 'emojis_pure_python': emojis_pure_python, 'emojis_json': emojis_json, }, repeat=reps, number=number, ) print(f'pure python: {min(emojis_pure_python_times) / number * 1000:0.2f}ms') #> pure python: 5.32ms type_adapter = TypeAdapter(dict[str, HttpUrl]) emojis_pydantic_times = timeit.repeat( 'type_adapter.validate_json(emojis_json)', globals={ 'type_adapter': type_adapter, 'HttpUrl': HttpUrl, 'emojis_json': emojis_json, }, repeat=reps, number=number, ) print(f'pydantic: {min(emojis_pydantic_times) / number * 1000:0.2f}ms') #> pydantic: 1.54ms print( f'Pydantic {min(emojis_pure_python_times) / min(emojis_pydantic_times):0.2f}x faster' ) #> Pydantic 3.45x faster ``` Unlike other performance-centric libraries written in compiled languages, Pydantic also has excellent support for customizing validation via [functional validators](#customisation). !!! tip "Learn more" Samuel Colvin's [talk at PyCon 2023](https://youtu.be/pWZw7hYoRVU) explains how [`pydantic-core`](https://pypi.org/project/pydantic-core) works and how it integrates with Pydantic. ## Serialization Pydantic provides functionality to serialize model in three ways: 1. To a Python `dict` made up of the associated Python objects. 2. To a Python `dict` made up only of "jsonable" types. 3. To a JSON string. In all three modes, the output can be customized by excluding specific fields, excluding unset fields, excluding default values, and excluding `None` values. ??? example "Example - Serialization 3 ways" ```python from datetime import datetime from pydantic import BaseModel class Meeting(BaseModel): when: datetime where: bytes why: str = 'No idea' m = Meeting(when='2020-01-01T12:00', where='home') print(m.model_dump(exclude_unset=True)) #> {'when': datetime.datetime(2020, 1, 1, 12, 0), 'where': b'home'} print(m.model_dump(exclude={'where'}, mode='json')) #> {'when': '2020-01-01T12:00:00', 'why': 'No idea'} print(m.model_dump_json(exclude_defaults=True)) #> {"when":"2020-01-01T12:00:00","where":"home"} ``` !!! tip "Learn more" See the [documentation on serialization](concepts/serialization.md). ## JSON Schema A [JSON Schema](https://json-schema.org/) can be generated for any Pydantic schema — allowing self-documenting APIs and integration with a wide variety of tools which support the JSON Schema format. ??? example "Example - JSON Schema" ```python from datetime import datetime from pydantic import BaseModel class Address(BaseModel): street: str city: str zipcode: str class Meeting(BaseModel): when: datetime where: Address why: str = 'No idea' print(Meeting.model_json_schema()) """ { '$defs': { 'Address': { 'properties': { 'street': {'title': 'Street', 'type': 'string'}, 'city': {'title': 'City', 'type': 'string'}, 'zipcode': {'title': 'Zipcode', 'type': 'string'}, }, 'required': ['street', 'city', 'zipcode'], 'title': 'Address', 'type': 'object', } }, 'properties': { 'when': {'format': 'date-time', 'title': 'When', 'type': 'string'}, 'where': {'$ref': '#/$defs/Address'}, 'why': {'default': 'No idea', 'title': 'Why', 'type': 'string'}, }, 'required': ['when', 'where'], 'title': 'Meeting', 'type': 'object', } """ ``` Pydantic is compliant with the latest version of JSON Schema specification ([2020-12](https://json-schema.org/draft/2020-12/release-notes.html)), which is compatible with [OpenAPI 3.1](https://spec.openapis.org/oas/v3.1.0.html). !!! tip "Learn more" See the [documentation on JSON Schema](concepts/json_schema.md). ## Strict mode and data coercion {#strict-lax} By default, Pydantic is tolerant to common incorrect types and coerces data to the right type — e.g. a numeric string passed to an `int` field will be parsed as an `int`. Pydantic also has as [strict mode](concepts/strict_mode.md), where types are not coerced and a validation error is raised unless the input data exactly matches the expected schema. But strict mode would be pretty useless when validating JSON data since JSON doesn't have types matching many common Python types like [`datetime`][datetime.datetime], [`UUID`][uuid.UUID] or [`bytes`][]. To solve this, Pydantic can parse and validate JSON in one step. This allows sensible data conversion (e.g. when parsing strings into [`datetime`][datetime.datetime] objects). Since the JSON parsing is implemented in Rust, it's also very performant. ??? example "Example - Strict mode that's actually useful" ```python from datetime import datetime from pydantic import BaseModel, ValidationError class Meeting(BaseModel): when: datetime where: bytes m = Meeting.model_validate({'when': '2020-01-01T12:00', 'where': 'home'}) print(m) #> when=datetime.datetime(2020, 1, 1, 12, 0) where=b'home' try: m = Meeting.model_validate( {'when': '2020-01-01T12:00', 'where': 'home'}, strict=True ) except ValidationError as e: print(e) """ 2 validation errors for Meeting when Input should be a valid datetime [type=datetime_type, input_value='2020-01-01T12:00', input_type=str] where Input should be a valid bytes [type=bytes_type, input_value='home', input_type=str] """ m_json = Meeting.model_validate_json( '{"when": "2020-01-01T12:00", "where": "home"}' ) print(m_json) #> when=datetime.datetime(2020, 1, 1, 12, 0) where=b'home' ``` !!! tip "Learn more" See the [documentation on strict mode](concepts/strict_mode.md). ## Dataclasses, TypedDicts, and more {#dataclasses-typeddict-more} Pydantic provides four ways to create schemas and perform validation and serialization: 1. [`BaseModel`](concepts/models.md) — Pydantic's own super class with many common utilities available via instance methods. 2. [Pydantic dataclasses](concepts/dataclasses.md) — a wrapper around standard dataclasses with additional validation performed. 3. [`TypeAdapter`][pydantic.type_adapter.TypeAdapter] — a general way to adapt any type for validation and serialization. This allows types like [`TypedDict`](api/standard_library_types.md#typeddict) and [`NamedTuple`](api/standard_library_types.md#named-tuples) to be validated as well as simple types (like [`int`][] or [`timedelta`][datetime.timedelta]) — [all types](concepts/types.md) supported can be used with [`TypeAdapter`][pydantic.type_adapter.TypeAdapter]. 4. [`validate_call`](concepts/validation_decorator.md) — a decorator to perform validation when calling a function. ??? example "Example - schema based on a [`TypedDict`][typing.TypedDict]" ```python from datetime import datetime from typing_extensions import NotRequired, TypedDict from pydantic import TypeAdapter class Meeting(TypedDict): when: datetime where: bytes why: NotRequired[str] meeting_adapter = TypeAdapter(Meeting) m = meeting_adapter.validate_python( # (1)! {'when': '2020-01-01T12:00', 'where': 'home'} ) print(m) #> {'when': datetime.datetime(2020, 1, 1, 12, 0), 'where': b'home'} meeting_adapter.dump_python(m, exclude={'where'}) # (2)! print(meeting_adapter.json_schema()) # (3)! """ { 'properties': { 'when': {'format': 'date-time', 'title': 'When', 'type': 'string'}, 'where': {'format': 'binary', 'title': 'Where', 'type': 'string'}, 'why': {'title': 'Why', 'type': 'string'}, }, 'required': ['when', 'where'], 'title': 'Meeting', 'type': 'object', } """ ``` 1. [`TypeAdapter`][pydantic.type_adapter.TypeAdapter] for a [`TypedDict`][typing.TypedDict] performing validation, it can also validate JSON data directly with [`validate_json`][pydantic.type_adapter.TypeAdapter.validate_json]. 2. [`dump_python`][pydantic.type_adapter.TypeAdapter.dump_python] to serialise a [`TypedDict`][typing.TypedDict] to a python object, it can also serialise to JSON with [`dump_json`][pydantic.type_adapter.TypeAdapter.dump_json]. 3. [`TypeAdapter`][pydantic.type_adapter.TypeAdapter] can also generate a JSON Schema. ## Customisation Functional validators and serializers, as well as a powerful protocol for custom types, means the way Pydantic operates can be customized on a per-field or per-type basis. ??? example "Customisation Example - wrap validators" "wrap validators" are new in Pydantic V2 and are one of the most powerful ways to customize validation. ```python from datetime import datetime, timezone from typing import Any from pydantic_core.core_schema import ValidatorFunctionWrapHandler from pydantic import BaseModel, field_validator class Meeting(BaseModel): when: datetime @field_validator('when', mode='wrap') def when_now( cls, input_value: Any, handler: ValidatorFunctionWrapHandler ) -> datetime: if input_value == 'now': return datetime.now() when = handler(input_value) # in this specific application we know tz naive datetimes are in UTC if when.tzinfo is None: when = when.replace(tzinfo=timezone.utc) return when print(Meeting(when='2020-01-01T12:00+01:00')) #> when=datetime.datetime(2020, 1, 1, 12, 0, tzinfo=TzInfo(3600)) print(Meeting(when='now')) #> when=datetime.datetime(2032, 1, 2, 3, 4, 5, 6) print(Meeting(when='2020-01-01T12:00')) #> when=datetime.datetime(2020, 1, 1, 12, 0, tzinfo=datetime.timezone.utc) ``` !!! tip "Learn more" See the documentation on [validators](concepts/validators.md), [custom serializers](concepts/serialization.md#serializers), and [custom types](concepts/types.md#custom-types). ## Ecosystem At the time of writing there are 466,400 repositories on GitHub and 8,119 packages on PyPI that depend on Pydantic. Some notable libraries that depend on Pydantic: {{ libraries }} More libraries using Pydantic can be found at [`Kludex/awesome-pydantic`](https://github.com/Kludex/awesome-pydantic). The team behind Pydantic also builds [Pydantic Logfire](integrations/logfire.md), an observability platform with a native Pydantic integration for tracing and debugging validation in production. ## Organisations using Pydantic {#using-pydantic} Some notable companies and organisations using Pydantic together with comments on why/how we know they're using Pydantic. The organisations below are included because they match one or more of the following criteria: * Using Pydantic as a dependency in a public repository. * Referring traffic to the Pydantic documentation site from an organization-internal domain — specific referrers are not included since they're generally not in the public domain. * Direct communication between the Pydantic team and engineers employed by the organization about usage of Pydantic within the organization. We've included some extra detail where appropriate and already in the public domain. {{ organisations }} pydantic-pydantic-e28e879/mkdocs.yml000066400000000000000000000337071526274674700175540ustar00rootroot00000000000000site_name: Pydantic Validation site_description: Data validation using Python type hints strict: true site_url: https://docs.pydantic.dev/ theme: name: 'material' custom_dir: 'docs/theme' palette: - media: '(prefers-color-scheme)' primary: pink accent: pink toggle: icon: material/brightness-auto name: 'Switch to light mode' - media: '(prefers-color-scheme: light)' scheme: default primary: pink accent: pink toggle: icon: material/brightness-7 name: 'Switch to dark mode' - media: '(prefers-color-scheme: dark)' scheme: slate primary: pink accent: pink toggle: icon: material/brightness-4 name: 'Switch to system preference' features: - content.tabs.link - content.code.annotate - content.code.copy - announce.dismiss - navigation.tabs - navigation.instant - navigation.instant.prefetch - navigation.instant.preview - navigation.instant.progress - navigation.path - navigation.sections - navigation.top - navigation.tracking - search.suggest - toc.follow logo: 'logo-white.svg' favicon: 'favicon.png' repo_name: pydantic/pydantic repo_url: https://github.com/pydantic/pydantic edit_uri: edit/main/docs/ extra: version: provider: mike analytics: feedback: title: Was this page helpful? ratings: - icon: material/thumb-up-outline name: This page was helpful data: 1 note: >- Thanks for your feedback! - icon: material/thumb-down-outline name: This page could be improved data: 0 note: >- Thanks for your feedback! # https://www.mkdocs.org/user-guide/configuration/#validation validation: omitted_files: warn absolute_links: warn unrecognized_links: warn anchors: warn extra_css: - 'extra/terminal.css' - 'extra/tweaks.css' extra_javascript: - 'https://cdn.jsdelivr.net/npm/algoliasearch@5.20.0/dist/lite/builds/browser.umd.js' - 'https://cdn.jsdelivr.net/npm/instantsearch.js@4.77.3/dist/instantsearch.production.min.js' - 'extra/algolia.js' - 'extra/feedback.js' - 'extra/fluff.js' - 'extra/mathjax.js' - 'https://samuelcolvin.github.io/mkdocs-run-code/run_code_main.js' - 'https://unpkg.com/mathjax@3/es5/tex-mml-chtml.js' nav: - Get Started: - Welcome to Pydantic: index.md - Why use Pydantic: why.md - Help with Pydantic: help_with_pydantic.md - Enterprise Support: enterprise-support.md - Installation: install.md - Migration Guide: migration.md - Version Policy: version-policy.md - Contributing: contributing.md - Changelog: changelog.md - Concepts: - Models: concepts/models.md - Fields: concepts/fields.md - JSON Schema: concepts/json_schema.md - JSON: concepts/json.md - Types: concepts/types.md - Unions: concepts/unions.md - Alias: concepts/alias.md - Configuration: concepts/config.md - Serialization: concepts/serialization.md - Validators: concepts/validators.md - Dataclasses: concepts/dataclasses.md - Forward Annotations: concepts/forward_annotations.md - Strict Mode: concepts/strict_mode.md - Type Adapter: concepts/type_adapter.md - Validation Decorator: concepts/validation_decorator.md - Conversion Table: concepts/conversion_table.md - Settings Management: concepts/pydantic_settings.md - Performance: concepts/performance.md - Experimental: concepts/experimental.md - API Documentation: - Pydantic: - BaseModel: api/base_model.md - RootModel: api/root_model.md - Pydantic Dataclasses: api/dataclasses.md - TypeAdapter: api/type_adapter.md - Validate Call: api/validate_call.md - Fields: api/fields.md - Aliases: api/aliases.md - Configuration: api/config.md - JSON Schema: api/json_schema.md - Errors: api/errors.md - Functional Validators: api/functional_validators.md - Functional Serializers: api/functional_serializers.md - Standard Library Types: api/standard_library_types.md - Pydantic Types: api/types.md - Network Types: api/networks.md - Version Information: api/version.md - Annotated Handlers: api/annotated_handlers.md - Experimental: api/experimental.md - Pydantic Core: - pydantic_core: api/pydantic_core.md - pydantic_core.core_schema: api/pydantic_core_schema.md - Pydantic Settings: api/pydantic_settings.md - Pydantic Extra Types: - Color: api/pydantic_extra_types_color.md - Country: api/pydantic_extra_types_country.md - Payment: api/pydantic_extra_types_payment.md - Phone Numbers: api/pydantic_extra_types_phone_numbers.md - Routing Numbers: api/pydantic_extra_types_routing_numbers.md - Coordinate: api/pydantic_extra_types_coordinate.md - Mac Address: api/pydantic_extra_types_mac_address.md - ISBN: api/pydantic_extra_types_isbn.md - Pendulum: api/pydantic_extra_types_pendulum_dt.md - Currency: api/pydantic_extra_types_currency_code.md - Language: api/pydantic_extra_types_language_code.md - Script Code: api/pydantic_extra_types_script_code.md - Semantic Version: api/pydantic_extra_types_semantic_version.md - Timezone Name: api/pydantic_extra_types_timezone_name.md - ULID: api/pydantic_extra_types_ulid.md - Internals: - Architecture: internals/architecture.md - Resolving Annotations: internals/resolving_annotations.md - Examples: - Validating File Data: examples/files.md - Web and API Requests: examples/requests.md - Queues: examples/queues.md - Databases: examples/orms.md - Custom Validators: examples/custom_validators.md - Dynamic models: examples/dynamic_models.md - Cyclic references: examples/cyclic_references.md - Agent libraries – Pydantic AI: examples/pydantic_ai.md - Error Messages: - Error Handling: errors/errors.md - Validation Errors: errors/validation_errors.md - Usage Errors: errors/usage_errors.md - Troubleshooting with Logfire: errors/troubleshooting.md - Integrations: - Pydantic Logfire: integrations/logfire.md - LLMs: integrations/llms.md - Dev Tools: - Mypy: integrations/mypy.md - Pyrefly: integrations/pyrefly.md - PyCharm: integrations/pycharm.md - Hypothesis: integrations/hypothesis.md - Visual Studio Code: integrations/visual_studio_code.md - datamodel-code-generator: integrations/datamodel_code_generator.md - devtools: integrations/devtools.md - Rich: integrations/rich.md - Linting: integrations/linting.md - Documentation: integrations/documentation.md - Production Tools: - AWS Lambda: integrations/aws_lambda.md - Blog: https://blog.pydantic.dev/ - Pydantic People: pydantic_people.md markdown_extensions: - tables - toc: permalink: true title: Page contents - admonition - pymdownx.details - pymdownx.superfences - pymdownx.highlight: pygments_lang_class: true - pymdownx.extra - pymdownx.emoji: emoji_index: !!python/name:material.extensions.emoji.twemoji emoji_generator: !!python/name:material.extensions.emoji.to_svg - pymdownx.tabbed: alternate_style: true - pymdownx.arithmatex: generic: true - pydantic_docs.mdext watch: - pydantic hooks: - 'docs/plugins/main.py' - 'docs/plugins/algolia.py' plugins: - mike: alias_type: symlink canonical_version: latest # llmstxt must come after the mike plugin: - llmstxt: enabled: !ENV [CI, false] full_output: llms-full.txt markdown_description: |- Pydantic is the most widely used data validation library for Python. Fast and extensible, Pydantic plays nicely with your linters/IDE/brain. Define how data should be in pure, canonical Python 3.10+; validate it with Pydantic. sections: Concepts documentation: - concepts/*.md API documentation: - api/*.md Internals: - internals/*.md Optional: - errors/*.md - examples/*.md - integrations/*.md - search - exclude: glob: - theme/announce.html - plugins/* - __pycache__/* - mkdocstrings: handlers: python: paths: [.] # see also: build-docs.sh options: members_order: source separate_signature: true filters: ['!^_'] docstring_options: ignore_init_summary: true merge_init_into_class: true show_signature_annotations: true signature_crossrefs: true import: - url: https://docs.python.org/3/objects.inv domains: [py, std] - url: https://typing-extensions.readthedocs.io/en/latest/objects.inv - redirects: redirect_maps: 'usage/mypy.md': 'integrations/mypy.md' 'mypy_plugin.md': 'integrations/mypy.md' 'datamodel_code_generator.md': 'integrations/datamodel_code_generator.md' 'visual_studio_code.md': 'integrations/visual_studio_code.md' 'hypothesis_plugin.md': 'integrations/hypothesis.md' 'pycharm_plugin.md': 'integrations/pycharm.md' 'usage/model_config.md': 'api/config.md' 'usage/devtools.md': 'integrations/devtools.md' 'usage/rich.md': 'integrations/rich.md' 'usage/linting.md': 'integrations/linting.md' 'usage/types.md': 'concepts/types.md' 'usage/types/secrets.md': 'api/types.md#pydantic.types.Secret' 'usage/types/string_types.md': 'api/types.md#pydantic.types.StringConstraints' 'usage/types/file_types.md': 'api/types.md#pydantic.types.FilePath' 'api/main.md': 'api/base_model.md' 'api/color.md': 'api/pydantic_extra_types_color.md' 'api/alias_generators.md': 'api/config.md#pydantic.config.ConfigDict.alias_generator' 'api/pydantic_core_init.md': 'api/pydantic_core.md' 'usage/types/booleans.md': 'api/standard_library_types.md#booleans' 'usage/types/callables.md': 'api/standard_library_types.md#callable' 'usage/types/custom.md': 'concepts/types.md#custom-types' 'usage/types/datetime.md': 'api/standard_library_types.md#datetime-types' 'usage/types/enum.md': 'api/standard_library_types.md#enum' 'usage/types/json.md': 'api/types.md#pydantic.types.Json' 'usage/types/list_types.md': 'api/standard_library_types.md#list' 'usage/types/standard_types.md': 'api/standard_library_types.md' 'usage/types/strict_types.md': 'concepts/types.md#strict-types' 'usage/types/types.md': 'concepts/types.md' 'usage/types/urls.md': 'api/networks.md' 'usage/types/unions.md': 'api/standard_library_types.md#union' 'usage/types/typevars.md': 'api/standard_library_types.md#type-and-typevar' 'usage/types/types_fields.md': 'api/standard_library_types.md' 'usage/validation_errors.md': 'errors/validation_errors.md' 'usage/errors.md': 'errors/usage_errors.md' 'usage/types/extra_types/color_types.md': 'api/pydantic_extra_types_color.md' 'usage/types/extra_types/extra_types.md': 'api/pydantic_extra_types_color.md' 'usage/types/extra_types/coordinate.md': 'api/pydantic_extra_types_coordinate.md' 'usage/types/extra_types/mac_address.md': 'api/pydantic_extra_types_mac_address.md' 'usage/types/extra_types/payment_cards.md': 'api/pydantic_extra_types_payment.md' 'usage/types/extra_types/phone_numbers.md': 'api/pydantic_extra_types_phone_numbers.md' 'usage/types/extra_types/routing_numbers.md': 'api/pydantic_extra_types_routing_numbers.md' 'version-compatibility.md': 'version-policy.md' 'api/pydantic_extra_types_routing_number.md': 'api/pydantic_extra_types_routing_numbers.md' 'usage/computed_fields.md': 'api/fields.md#pydantic.fields.computed_field' 'usage/conversion_table.md': 'concepts/conversion_table.md' 'usage/dataclasses.md': 'concepts/dataclasses.md' 'usage/fields.md': 'concepts/fields.md' 'usage/json_schema.md': 'concepts/json_schema.md' 'usage/models.md': 'concepts/models.md' 'usage/postponed_annotations.md': 'concepts/forward_annotations.md' 'concepts/postponed_annotations.md': 'concepts/forward_annotations.md' 'usage/pydantic_settings.md': 'concepts/pydantic_settings.md' 'usage/serialization.md': 'concepts/serialization.md' 'usage/strict_mode.md': 'concepts/strict_mode.md' 'usage/type_adapter.md': 'concepts/type_adapter.md' 'usage/validation_decorator.md': 'concepts/validation_decorator.md' 'usage/validators.md': 'concepts/validators.md' 'usage/types/bytesize.md': 'api/types.md#pydantic.types.ByteSize' 'usage/types/dicts_mapping.md': 'api/standard_library_types.md#mapping-types' 'usage/types/encoded.md': 'api/types.md#pydantic.types.EncodedBytes' 'usage/types/enums.md': 'api/standard_library_types.md#enum' 'usage/types/number_types.md': 'api/standard_library_types.md#number-types' 'usage/types/sequence_iterable.md': 'api/standard_library_types.md#other-iterables' 'usage/types/set_types.md': 'api/standard_library_types.md#sets' 'usage/types/uuids.md': 'api/standard_library_types.md#uuid' 'blog/pydantic-v2-alpha.md': 'https://pydantic.dev/articles/pydantic-v2-alpha' 'blog/pydantic-v2-final.md': 'https://pydantic.dev/articles/pydantic-v2-final' 'blog/pydantic-v2.md': 'https://pydantic.dev/articles/pydantic-v2' 'examples/secrets.md': 'api/types.md#pydantic.types.Secret' 'examples/validators.md': 'examples/custom_validators.md' 'architecture.md': 'internals/architecture.md' pydantic-pydantic-e28e879/pydantic-core/000077500000000000000000000000001526274674700203005ustar00rootroot00000000000000pydantic-pydantic-e28e879/pydantic-core/.cargo/000077500000000000000000000000001526274674700214515ustar00rootroot00000000000000pydantic-pydantic-e28e879/pydantic-core/.cargo/config.toml000066400000000000000000000011631526274674700236140ustar00rootroot00000000000000[build] rustflags = [] # Keep frame pointers so that native profilers can unwind through pydantic-core, # matching CPython 3.15+ (see https://peps.python.org/pep-0831/). # Note: this is ignored if `RUSTFLAGS` or `CARGO_ENCODED_RUSTFLAGS` is set. [target.'cfg(not(target_family = "wasm"))'] rustflags = ["-C", "force-frame-pointers=yes"] # see https://pyo3.rs/main/building_and_distribution.html#macos [target.x86_64-apple-darwin] rustflags = [ "-C", "link-arg=-undefined", "-C", "link-arg=dynamic_lookup", ] [target.aarch64-apple-darwin] rustflags = [ "-C", "link-arg=-undefined", "-C", "link-arg=dynamic_lookup", ] pydantic-pydantic-e28e879/pydantic-core/.codecov.yml000066400000000000000000000002711526274674700225230ustar00rootroot00000000000000codecov: require_ci_to_pass: false coverage: precision: 2 range: [90, 100] status: patch: false project: false comment: layout: 'header, diff, flags, files, footer' pydantic-pydantic-e28e879/pydantic-core/.gitignore000066400000000000000000000006031526274674700222670ustar00rootroot00000000000000*.py[cod] *.egg-info/ .coverage .python-version package-lock.json test.py .cache/ .hypothesis/ build/ dist/ docs/_build/ htmlcov/ node_modules/ /.benchmarks/ /.idea/ /.pytest_cache/ /.vscode/ /env*/ /env/ /flame/ /pytest-speed/ /sandbox/ /sandbox/ /site/ /target/ /worktree/ /.editorconfig /*.lcov /*.profdata /*.profraw /foobar.py /python/pydantic_core/*.so # samply /profile.json pydantic-pydantic-e28e879/pydantic-core/.mypy-stubtest-allowlist000066400000000000000000000013601526274674700251620ustar00rootroot00000000000000# TODO: don't want to expose this staticmethod, requires https://github.com/PyO3/pyo3/issues/2384 pydantic_core._pydantic_core.PydanticUndefinedType.new # See #1540 for discussion pydantic_core._pydantic_core.from_json pydantic_core._pydantic_core.SchemaValidator.validate_python pydantic_core._pydantic_core.SchemaValidator.validate_json pydantic_core._pydantic_core.SchemaValidator.validate_strings # the `warnings` kwarg for SchemaSerializer functions has custom logic pydantic_core._pydantic_core.SchemaSerializer.to_python pydantic_core._pydantic_core.SchemaSerializer.to_json # pyo3 submodules are only reachable as attributes, not through a dotted import (see https://github.com/PyO3/pyo3/issues/759) pydantic_core._pydantic_core._schema_gather pydantic-pydantic-e28e879/pydantic-core/.pre-commit-config.yaml000066400000000000000000000013711526274674700245630ustar00rootroot00000000000000fail_fast: true repos: - repo: https://github.com/pre-commit/pre-commit-hooks rev: v4.0.1 hooks: - id: check-yaml - id: check-toml - id: end-of-file-fixer - id: trailing-whitespace - id: check-added-large-files - repo: local hooks: - id: lint-python name: Lint Python entry: make lint-python types: [python] language: system pass_filenames: false - id: typecheck-python name: Typecheck Python entry: make pyright types: [python] language: system pass_filenames: false - id: lint-rust name: Lint Rust entry: make lint-rust types: [rust] language: system pass_filenames: false pydantic-pydantic-e28e879/pydantic-core/.rustfmt.toml000066400000000000000000000000201526274674700227470ustar00rootroot00000000000000max_width = 120 pydantic-pydantic-e28e879/pydantic-core/Cargo.lock000066400000000000000000000566611526274674700222230ustar00rootroot00000000000000# This file is automatically @generated by Cargo. # It is not intended for manual editing. version = 4 [[package]] name = "ahash" version = "0.8.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5a15f179cd60c4584b8a8c596927aadc462e27f2ca70c04e0071964a73ba7a75" dependencies = [ "cfg-if", "getrandom", "once_cell", "version_check", "zerocopy", ] [[package]] name = "aho-corasick" version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" dependencies = [ "memchr", ] [[package]] name = "autocfg" version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" [[package]] name = "base64" version = "0.23.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ac07cdecf99051d9a5238b80f35af32cdeba5b336e55d957b318b50137e18da5" [[package]] name = "bitflags" version = "2.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b8e56985ec62d17e9c1001dc89c88ecd7dc08e47eba5ec7c29c7b5eeecde967" [[package]] name = "bitvec" version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c" dependencies = [ "funty", "radium", "tap", "wyz", ] [[package]] name = "bumpalo" version = "3.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "46c5e41b57b8bba42a04676d81cb89e9ee8e859a1a66f80a5a72e1cb76b34d43" [[package]] name = "cfg-if" version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] name = "displaydoc" version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", "syn 2.0.82", ] [[package]] name = "enum_dispatch" version = "0.3.13" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "aa18ce2bc66555b3218614519ac839ddb759a7d6720732f979ef8d13be147ecd" dependencies = [ "once_cell", "proc-macro2", "quote", "syn 2.0.82", ] [[package]] name = "foldhash" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb" [[package]] name = "form_urlencoded" version = "1.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cb4cb245038516f5f85277875cdaa4f7d2c9a0fa0468de06ed190163b1581fcf" dependencies = [ "percent-encoding", ] [[package]] name = "funty" version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" [[package]] name = "getrandom" version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "26145e563e54f2cadc477553f1ec5ee650b00862f0a58bcd12cbdc5f0ea2d2f4" dependencies = [ "cfg-if", "libc", "r-efi", "wasi", ] [[package]] name = "hashbrown" version = "0.17.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed5909b6e89a2db4456e54cd5f673791d7eca6732202bbf2a9cc504fe2f9b84a" dependencies = [ "foldhash", ] [[package]] name = "heck" version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" [[package]] name = "hex" version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" [[package]] name = "icu_collections" version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "db2fa452206ebee18c4b5c2274dbf1de17008e874b4dc4f0aea9d01ca79e4526" dependencies = [ "displaydoc", "yoke", "zerofrom", "zerovec", ] [[package]] name = "icu_locid" version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "13acbb8371917fc971be86fc8057c41a64b521c184808a698c02acc242dbf637" dependencies = [ "displaydoc", "litemap", "tinystr", "writeable", "zerovec", ] [[package]] name = "icu_locid_transform" version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "01d11ac35de8e40fdeda00d9e1e9d92525f3f9d887cdd7aa81d727596788b54e" dependencies = [ "displaydoc", "icu_locid", "icu_locid_transform_data", "icu_provider", "tinystr", "zerovec", ] [[package]] name = "icu_locid_transform_data" version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fdc8ff3388f852bede6b579ad4e978ab004f139284d7b28715f773507b946f6e" [[package]] name = "icu_normalizer" version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "19ce3e0da2ec68599d193c93d088142efd7f9c5d6fc9b803774855747dc6a84f" dependencies = [ "displaydoc", "icu_collections", "icu_normalizer_data", "icu_properties", "icu_provider", "smallvec", "utf16_iter", "utf8_iter", "write16", "zerovec", ] [[package]] name = "icu_normalizer_data" version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f8cafbf7aa791e9b22bec55a167906f9e1215fd475cd22adfcf660e03e989516" [[package]] name = "icu_properties" version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "93d6020766cfc6302c15dbbc9c8778c37e62c14427cb7f6e601d849e092aeef5" dependencies = [ "displaydoc", "icu_collections", "icu_locid_transform", "icu_properties_data", "icu_provider", "tinystr", "zerovec", ] [[package]] name = "icu_properties_data" version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "67a8effbc3dd3e4ba1afa8ad918d5684b8868b3b26500753effea8d2eed19569" [[package]] name = "icu_provider" version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6ed421c8a8ef78d3e2dbc98a973be2f3770cb42b606e3ab18d6237c4dfde68d9" dependencies = [ "displaydoc", "icu_locid", "icu_provider_macros", "stable_deref_trait", "tinystr", "writeable", "yoke", "zerofrom", "zerovec", ] [[package]] name = "icu_provider_macros" version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6" dependencies = [ "proc-macro2", "quote", "syn 2.0.82", ] [[package]] name = "idna" version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3b0875f23caa03898994f6ddc501886a45c7d3d62d04d2d90788d47be1b1e4de" dependencies = [ "idna_adapter", "smallvec", "utf8_iter", ] [[package]] name = "idna_adapter" version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "daca1df1c957320b2cf139ac61e7bd64fed304c5040df000a745aa1de3b4ef71" dependencies = [ "icu_normalizer", "icu_properties", ] [[package]] name = "itoa" version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" [[package]] name = "jiter" version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "820ddcacd75c9782308d3fa594f3885630ea3f49adba78a8a29abdfe4b81630c" dependencies = [ "ahash", "bitvec", "lexical-parse-float", "num-bigint", "num-traits", "pyo3", "pyo3-build-config", "smallvec", ] [[package]] name = "js-sys" version = "0.3.77" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f" dependencies = [ "once_cell", "wasm-bindgen", ] [[package]] name = "lexical-parse-float" version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "de6f9cb01fb0b08060209a057c048fcbab8717b4c1ecd2eac66ebfe39a65b0f2" dependencies = [ "lexical-parse-integer", "lexical-util", "static_assertions", ] [[package]] name = "lexical-parse-integer" version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "72207aae22fc0a121ba7b6d479e42cbfea549af1479c3f3a4f12c70dd66df12e" dependencies = [ "lexical-util", "static_assertions", ] [[package]] name = "lexical-util" version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5a82e24bf537fd24c177ffbbdc6ebcc8d54732c35b50a3f28cc3f4e4c949a0b3" dependencies = [ "static_assertions", ] [[package]] name = "libc" version = "0.2.185" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "52ff2c0fe9bc6cb6b14a0592c2ff4fa9ceb83eea9db979b0487cd054946a2b8f" [[package]] name = "litemap" version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "643cb0b8d4fcc284004d5fd0d67ccf61dfffadb7f75e1e71bc420f4688a3a704" [[package]] name = "log" version = "0.4.27" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94" [[package]] name = "lru" version = "0.18.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ef9ac18847474e638e3702b76c65d4eb93428471a74778ef0f1be711717f89b5" dependencies = [ "hashbrown", ] [[package]] name = "memchr" version = "2.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" [[package]] name = "num-bigint" version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" dependencies = [ "num-integer", "num-traits", ] [[package]] name = "num-integer" version = "0.1.46" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" dependencies = [ "num-traits", ] [[package]] name = "num-traits" version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" dependencies = [ "autocfg", ] [[package]] name = "once_cell" version = "1.21.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" [[package]] name = "percent-encoding" version = "2.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" [[package]] name = "portable-atomic" version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7170ef9988bc169ba16dd36a7fa041e5c4cbeb6a35b76d4c03daded371eae7c0" [[package]] name = "proc-macro2" version = "1.0.107" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "985e7ec9bb745e6ce6535b544d84d6cd6f7ad8bd711c398938ae983b91a766d9" dependencies = [ "unicode-ident", ] [[package]] name = "pydantic-core" version = "2.50.1" dependencies = [ "ahash", "base64", "enum_dispatch", "hashbrown", "hex", "idna", "jiter", "lru", "num-bigint", "num-traits", "percent-encoding", "pyo3", "pyo3-build-config", "regex", "serde", "serde_json", "smallvec", "speedate", "strum", "strum_macros", "url", "uuid", "version_check", ] [[package]] name = "pyo3" version = "0.29.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4688ddedf473e32662b9b067670129a8afb8c18e351482c70d62ba4a88171e8b" dependencies = [ "libc", "num-bigint", "num-traits", "once_cell", "portable-atomic", "pyo3-build-config", "pyo3-ffi", "pyo3-macros", "smallvec", ] [[package]] name = "pyo3-build-config" version = "0.29.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f41027e41b4bd03f6e60f9f417fe24a6341a6bb744edd62b6f709f2a52ea30e9" dependencies = [ "target-lexicon", ] [[package]] name = "pyo3-ffi" version = "0.29.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e591a95526fead067432c3b3a33fc74770b87b1e04e73671090d9c2055a2b327" dependencies = [ "libc", "pyo3-build-config", ] [[package]] name = "pyo3-macros" version = "0.29.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "73225868fc1cd84eef2c3c230ddb91273bf1de46aeb8a4248da76d32a0924a1c" dependencies = [ "proc-macro2", "pyo3-macros-backend", "quote", "syn 2.0.82", ] [[package]] name = "pyo3-macros-backend" version = "0.29.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "571575aa3749fa6216757dd47d2a3e7ef360f329a40f0666a9fbd14889024952" dependencies = [ "heck", "proc-macro2", "quote", "syn 2.0.82", ] [[package]] name = "quote" version = "1.0.44" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "21b2ebcf727b7760c461f091f9f0f539b77b8e87f2fd88131e7f1b433b3cece4" dependencies = [ "proc-macro2", ] [[package]] name = "r-efi" version = "5.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "74765f6d916ee2faa39bc8e68e4f3ed8949b48cccdac59983d287a7cb71ce9c5" [[package]] name = "radium" version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" [[package]] name = "regex" version = "1.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f020237b6c8eed93db2e2cb53c00c60a8e1bc73da7d073199a1180401450218d" dependencies = [ "aho-corasick", "memchr", "regex-automata", "regex-syntax", ] [[package]] name = "regex-automata" version = "0.4.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ad8553b9b26413251cbf30e620595c7a41b3887f03da04579c0e6b0d6a06b4b2" dependencies = [ "aho-corasick", "memchr", "regex-syntax", ] [[package]] name = "regex-syntax" version = "0.8.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d6f6ff9a378485b298a5286656da665ba74413d36db0979633275d2e708145d4" [[package]] name = "serde" version = "1.0.229" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4148590afebada386688f18773da617792bf2ef03ffc1e4cbd2b1d45b023e0ba" dependencies = [ "serde_core", "serde_derive", ] [[package]] name = "serde_core" version = "1.0.229" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "67dca2c9c51e58a4791a4b1ed58308b39c64224d349a935ab5039aa360942a48" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" version = "1.0.229" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e7a5d71263a5a7d47b41f6b3f06ba276f10cc18b0931f1799f710578e2309348" dependencies = [ "proc-macro2", "quote", "syn 3.0.6", ] [[package]] name = "serde_json" version = "1.0.151" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c841b55ecdae098c80dcae9cf767f6f8a0c2cdb3416bbef72181df4d0fe73f14" dependencies = [ "itoa", "memchr", "serde", "serde_core", "zmij", ] [[package]] name = "smallvec" version = "1.16.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f9395f0f0eee849a9b707b2f06bb92a6a422090e2123bb2ef8e87a0e61892a8e" [[package]] name = "speedate" version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "aba069c070b5e213f2a094deb7e5ed50ecb092be36102a4f4042e8d2056d060e" dependencies = [ "lexical-parse-float", "strum", "strum_macros", ] [[package]] name = "stable_deref_trait" version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" [[package]] name = "static_assertions" version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" [[package]] name = "strum" version = "0.27.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "af23d6f6c1a224baef9d3f61e287d2761385a5b88fdab4eb4c6f11aeb54c4bcf" dependencies = [ "strum_macros", ] [[package]] name = "strum_macros" version = "0.27.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7695ce3845ea4b33927c055a39dc438a45b059f7c1b3d91d38d10355fb8cbca7" dependencies = [ "heck", "proc-macro2", "quote", "syn 2.0.82", ] [[package]] name = "syn" version = "2.0.82" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "83540f837a8afc019423a8edb95b52a8effe46957ee402287f4292fae35be021" dependencies = [ "proc-macro2", "quote", "unicode-ident", ] [[package]] name = "syn" version = "3.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8593e8e72159ed2257d083c7a454a85cbf854f37a0966d8d483aff8c8a3ebcee" dependencies = [ "proc-macro2", "quote", "unicode-ident", ] [[package]] name = "synstructure" version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" dependencies = [ "proc-macro2", "quote", "syn 2.0.82", ] [[package]] name = "tap" version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" [[package]] name = "target-lexicon" version = "0.13.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b1dd07eb858a2067e2f3c7155d54e929265c264e6f37efe3ee7a8d1b5a1dd0ba" [[package]] name = "tinystr" version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9117f5d4db391c1cf6927e7bea3db74b9a1c1add8f7eda9ffd5364f40f57b82f" dependencies = [ "displaydoc", "zerovec", ] [[package]] name = "unicode-ident" version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" [[package]] name = "url" version = "2.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ff67a8a4397373c3ef660812acab3268222035010ab8680ec4215f38ba3d0eed" dependencies = [ "form_urlencoded", "idna", "percent-encoding", "serde", ] [[package]] name = "utf16_iter" version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c8232dd3cdaed5356e0f716d285e4b40b932ac434100fe9b7e0e8e935b9e6246" [[package]] name = "utf8_iter" version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" [[package]] name = "uuid" version = "1.23.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bf80a72845275afea99e7f2b434723d3bc7e38470fcd1c7ed39a599c73319a53" dependencies = [ "js-sys", "wasm-bindgen", ] [[package]] name = "version_check" version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" [[package]] name = "wasi" version = "0.14.2+wasi-0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9683f9a5a998d873c0d21fcbe3c083009670149a8fab228644b8bd36b2c48cb3" dependencies = [ "wit-bindgen-rt", ] [[package]] name = "wasm-bindgen" version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5" dependencies = [ "cfg-if", "once_cell", "wasm-bindgen-macro", ] [[package]] name = "wasm-bindgen-backend" version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6" dependencies = [ "bumpalo", "log", "proc-macro2", "quote", "syn 2.0.82", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-macro" version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407" dependencies = [ "quote", "wasm-bindgen-macro-support", ] [[package]] name = "wasm-bindgen-macro-support" version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" dependencies = [ "proc-macro2", "quote", "syn 2.0.82", "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d" dependencies = [ "unicode-ident", ] [[package]] name = "wit-bindgen-rt" version = "0.39.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6f42320e61fe2cfd34354ecb597f86f413484a798ba44a8ca1165c58d42da6c1" dependencies = [ "bitflags", ] [[package]] name = "write16" version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d1890f4022759daae28ed4fe62859b1236caebfc61ede2f63ed4e695f3f6d936" [[package]] name = "writeable" version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e9df38ee2d2c3c5948ea468a8406ff0db0b29ae1ffde1bcf20ef305bcc95c51" [[package]] name = "wyz" version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "05f360fc0b24296329c78fda852a1e9ae82de9cf7b27dae4b7f62f118f77b9ed" dependencies = [ "tap", ] [[package]] name = "yoke" version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6c5b1314b079b0930c31e3af543d8ee1757b1951ae1e1565ec704403a7240ca5" dependencies = [ "serde", "stable_deref_trait", "yoke-derive", "zerofrom", ] [[package]] name = "yoke-derive" version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "28cc31741b18cb6f1d5ff12f5b7523e3d6eb0852bbbad19d73905511d9849b95" dependencies = [ "proc-macro2", "quote", "syn 2.0.82", "synstructure", ] [[package]] name = "zerocopy" version = "0.8.25" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a1702d9583232ddb9174e01bb7c15a2ab8fb1bc6f227aa1233858c351a3ba0cb" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" version = "0.8.25" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "28a6e20d751156648aa063f3800b706ee209a32c0b4d9f24be3d980b01be55ef" dependencies = [ "proc-macro2", "quote", "syn 2.0.82", ] [[package]] name = "zerofrom" version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "91ec111ce797d0e0784a1116d0ddcdbea84322cd79e5d5ad173daeba4f93ab55" dependencies = [ "zerofrom-derive", ] [[package]] name = "zerofrom-derive" version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0ea7b4a3637ea8669cedf0f1fd5c286a17f3de97b8dd5a70a6c167a1730e63a5" dependencies = [ "proc-macro2", "quote", "syn 2.0.82", "synstructure", ] [[package]] name = "zerovec" version = "0.10.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "aa2b893d79df23bfb12d5461018d408ea19dfafe76c2c7ef6d4eba614f8ff079" dependencies = [ "yoke", "zerofrom", "zerovec-derive", ] [[package]] name = "zerovec-derive" version = "0.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6" dependencies = [ "proc-macro2", "quote", "syn 2.0.82", ] [[package]] name = "zmij" version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "aac060176f7020d62c3bcc1cdbcec619d54f48b07ad1963a3f80ce7a0c17755f" pydantic-pydantic-e28e879/pydantic-core/Cargo.toml000066400000000000000000000054461526274674700222410ustar00rootroot00000000000000[package] name = "pydantic-core" version = "2.50.1" edition = "2024" license = "MIT" homepage = "https://github.com/pydantic/pydantic" repository = "https://github.com/pydantic/pydantic.git" readme = "README.md" include = [ "/pyproject.toml", "/README.md", "/LICENSE", "/Makefile", "/build.rs", "/rust-toolchain", "/src", "/python/pydantic_core", "/tests", "/.cargo", "!__pycache__", "!tests/.hypothesis", "!tests/.pytest_cache", "!*.so", ] rust-version = "1.88" [dependencies] # TODO it would be very nice to remove the "py-clone" feature as it can panic, # but needs a bit of work to make sure it's not used in the codebase pyo3 = { version = "0.29.2", features = ["num-bigint", "py-clone", "smallvec"] } regex = "1.13.1" lru = "0.18.5" strum = { version = "0.27", features = ["derive"] } strum_macros = "0.27" serde_json = { version = "1.0.151", features = ["arbitrary_precision"] } enum_dispatch = "0.3.13" serde = { version = "1.0.229", features = ["derive"] } speedate = "0.17.0" smallvec = "1.16.2" ahash = "0.8.12" url = "2.5.8" # idna is already required by url, added here to be explicit idna = "1.1.0" base64 = "0.23.1" num-bigint = "0.4.6" num-traits = "0.2.19" uuid = "1.23.2" jiter = { version = "0.16.0", features = ["python"] } hex = "0.4.3" percent-encoding = "2.3.2" hashbrown = { version = "0.17", default-features = false, features = ["inline-more"] } [lib] name = "_pydantic_core" crate-type = ["cdylib", "rlib"] [profile.release] lto = "fat" codegen-units = 1 strip = true [profile.bench] debug = true strip = false # This is separate to benchmarks because `bench` ends up building testing # harnesses into code, as it's a special cargo profile. [profile.profiling] inherits = "release" debug = true strip = false [dev-dependencies] pyo3 = { version = "0.29", features = ["auto-initialize"] } [build-dependencies] version_check = "0.9.5" # used where logic has to be version/distribution specific, e.g. pypy pyo3-build-config = { version = "0.29" } [lints.clippy] dbg_macro = "warn" print_stdout = "warn" # in general we lint against the pedantic group, but we will whitelist # certain lints which we don't want to enforce (for now) pedantic = { level = "warn", priority = -1 } cast_possible_truncation = "allow" cast_possible_wrap = "allow" cast_precision_loss = "allow" cast_sign_loss = "allow" doc_markdown = "allow" float_cmp = "allow" fn_params_excessive_bools = "allow" if_not_else = "allow" match_bool = "allow" missing_errors_doc = "allow" missing_panics_doc = "allow" module_name_repetitions = "allow" must_use_candidate = "allow" needless_pass_by_value = "allow" similar_names = "allow" single_match_else = "allow" struct_excessive_bools = "allow" too_many_lines = "allow" unnecessary_wraps = "allow" unused_self = "allow" used_underscore_binding = "allow" pydantic-pydantic-e28e879/pydantic-core/LICENSE000066400000000000000000000020701526274674700213040ustar00rootroot00000000000000The MIT License (MIT) Copyright (c) 2022 Samuel Colvin Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. pydantic-pydantic-e28e879/pydantic-core/Makefile000066400000000000000000000101221526274674700217340ustar00rootroot00000000000000.DEFAULT_GOAL := all sources = python/pydantic_core tests wasm-preview/run_tests.py mypy-stubtest = uv run python -m mypy.stubtest pydantic_core._pydantic_core --allowlist .mypy-stubtest-allowlist # using --no-sync to avoid uv automatically rebuilding pydantic-core # TODO: it might be nice to use `MATURIN_PEP517_ARGS` to set the profile and # then use uv directly, but probably want # https://github.com/astral-sh/uv/issues/16359 first uv-run-no-sync = uv run --no-sync # using pip install cargo (via maturin via pip) doesn't get the tty handle # so doesn't render color without some help export CARGO_TERM_COLOR=$(shell (test -t 0 && echo "always") || echo "auto") .PHONY: .uv ## Check that uv is installed .uv: @uv -V || echo 'Please install uv: https://docs.astral.sh/uv/getting-started/installation/' .PHONY: install ## Install the package, dependencies, and pre-commit for local development install: .uv uv sync --frozen --all-groups uv run pre-commit install --install-hooks .PHONY: rebuild-lockfiles ## Rebuild lockfiles from scratch, updating all dependencies rebuild-lockfiles: .uv uv lock --upgrade .PHONY: install-rust-coverage ## Install Rust coverage tools install-rust-coverage: cargo install rustfilt coverage-prepare rustup component add llvm-tools-preview .PHONY: install-pgo ## Install Rust PGO tools install-pgo: rustup component add llvm-tools-preview .PHONY: build-dev ## Build the development version of the package build-dev: @rm -f python/pydantic_core/*.so $(uv-run-no-sync) maturin develop --uv .PHONY: build-prod ## Build the production version of the package build-prod: @rm -f python/pydantic_core/*.so $(uv-run-no-sync) maturin develop --uv --release .PHONY: build-profiling ## Build the profiling version of the package build-profiling: @rm -f python/pydantic_core/*.so $(uv-run-no-sync) maturin develop --uv --profile profiling .PHONY: build-coverage ## Build the coverage version of the package build-coverage: @rm -f python/pydantic_core/*.so RUSTFLAGS='-C instrument-coverage' $(uv-run-no-sync) maturin develop --uv --release .PHONY: build-pgo ## Build the PGO version of the package build-pgo: @rm -f python/pydantic_core/*.so $(uv-run-no-sync) maturin develop --uv --pgo .PHONY: build-wasm ## Build the WebAssembly version of the package build-wasm: @echo 'This requires python 3.13, maturin and emsdk to be installed' uvx maturin build --release --target wasm32-unknown-emscripten --out dist -i 3.13 ls -lh dist .PHONY: format ## Auto-format rust and python source files format: uv run ruff check --fix $(sources) uv run ruff format $(sources) cargo fmt .PHONY: lint-python ## Lint python source files lint-python: uv run ruff check $(sources) uv run ruff format --check $(sources) uv run griffe dump -f -d google -LWARNING -o/dev/null python/pydantic_core $(mypy-stubtest) .PHONY: lint-rust ## Lint rust source files lint-rust: cargo fmt --version cargo fmt --all -- --check cargo clippy --version cargo clippy --tests -- -D warnings .PHONY: lint ## Lint rust and python source files lint: lint-python lint-rust .PHONY: pyright ## Perform type-checking with pyright pyright: uv run pyright .PHONY: test ## Run all tests test: uv run pytest .PHONY: testcov ## Run tests and generate a coverage report testcov: build-coverage @rm -rf htmlcov @mkdir -p htmlcov coverage run -m pytest coverage report coverage html -d htmlcov/python coverage-prepare html python/pydantic_core/*.so .PHONY: all ## Run the standard set of checks performed in CI all: format build-dev lint test .PHONY: clean ## Clear local caches and build artifacts clean: rm -rf `find . -name __pycache__` rm -f `find . -type f -name '*.py[co]' ` rm -f `find . -type f -name '*~' ` rm -f `find . -type f -name '.*~' ` rm -rf .cache rm -rf htmlcov rm -rf .pytest_cache rm -rf *.egg-info rm -f .coverage rm -f .coverage.* rm -rf build rm -rf perf.data* rm -rf python/pydantic_core/*.so .PHONY: help ## Display this message help: @grep -E \ '^.PHONY: .*?## .*$$' $(MAKEFILE_LIST) | \ sort | \ awk 'BEGIN {FS = ".PHONY: |## "}; {printf "\033[36m%-19s\033[0m %s\n", $$2, $$3}' pydantic-pydantic-e28e879/pydantic-core/README.md000066400000000000000000000111231526274674700215550ustar00rootroot00000000000000# pydantic-core [![CI](https://github.com/pydantic/pydantic-core/workflows/ci/badge.svg?event=push)](https://github.com/pydantic/pydantic-core/actions?query=event%3Apush+branch%3Amain+workflow%3Aci) [![Coverage](https://codecov.io/gh/pydantic/pydantic-core/branch/main/graph/badge.svg)](https://codecov.io/gh/pydantic/pydantic-core) [![pypi](https://img.shields.io/pypi/v/pydantic-core.svg)](https://pypi.python.org/pypi/pydantic-core) [![versions](https://img.shields.io/pypi/pyversions/pydantic-core.svg)](https://github.com/pydantic/pydantic-core) [![license](https://img.shields.io/github/license/pydantic/pydantic-core.svg)](https://github.com/pydantic/pydantic-core/blob/main/LICENSE) This package provides the core functionality for [pydantic](https://pydantic.dev/docs/validation/latest/get-started/) validation and serialization. Pydantic-core is currently around 17x faster than pydantic V1. See [`tests/benchmarks/`](./tests/benchmarks/) for details. ## Example of direct usage *NOTE: You should not need to use pydantic-core directly; instead, use pydantic, which in turn uses pydantic-core.* ```py from pydantic_core import SchemaValidator, ValidationError v = SchemaValidator( { 'type': 'typed-dict', 'fields': { 'name': { 'type': 'typed-dict-field', 'schema': { 'type': 'str', }, }, 'age': { 'type': 'typed-dict-field', 'schema': { 'type': 'int', 'ge': 18, }, }, 'is_developer': { 'type': 'typed-dict-field', 'schema': { 'type': 'default', 'schema': {'type': 'bool'}, 'default': True, }, }, }, } ) r1 = v.validate_python({'name': 'Samuel', 'age': 35}) assert r1 == {'name': 'Samuel', 'age': 35, 'is_developer': True} # pydantic-core can also validate JSON directly r2 = v.validate_json('{"name": "Samuel", "age": 35}') assert r1 == r2 try: v.validate_python({'name': 'Samuel', 'age': 11}) except ValidationError as e: print(e) """ 1 validation error for model age Input should be greater than or equal to 18 [type=greater_than_equal, context={ge: 18}, input_value=11, input_type=int] """ ``` ## Getting Started ### Prerequisites You'll need: 1. **[Rust](https://rustup.rs/)** - Rust stable (or nightly for coverage) 2. **[uv](https://docs.astral.sh/uv/getting-started/installation/)** - Fast Python package manager 3. **[git](https://git-scm.com/)** - For version control 4. **[make](https://www.gnu.org/software/make/)** - For running development commands (or use `nmake` on Windows) ### Quick Start ```bash # Clone the repository (or from your fork) git clone git@github.com:pydantic/pydantic-core.git cd pydantic-core # Install all dependencies using uv, setup pre-commit hooks, and build the development version make install ``` Verify your installation by running: ```bash make ``` This runs a full development cycle: formatting, building, linting, and testing ### Development Commands Run `make help` to see all available commands, or use these common ones: ```bash make build-dev # to build the package during development make build-prod # to perform an optimised build for benchmarking make test # to run the tests make testcov # to run the tests and generate a coverage report make lint # to run the linter make format # to format python and rust code make all # to run to run build-dev + format + lint + test ``` ### Useful Resources * [`python/pydantic_core/_pydantic_core/`](./python/pydantic_core/_pydantic_core/) - Python API types (stubs) * [`python/pydantic_core/core_schema.py`](./python/pydantic_core/core_schema.py) - Core schema definitions * [`tests/`](./tests) - Comprehensive usage examples ## Profiling It's possible to profile the code using the [`flamegraph` utility from `flamegraph-rs`](https://github.com/flamegraph-rs/flamegraph). (Tested on Linux.) You can install this with `cargo install flamegraph`. Run `make build-profiling` to install a release build with debugging symbols included (needed for profiling). Once that is built, you can profile pytest benchmarks with (e.g.): ```bash flamegraph -- pytest tests/benchmarks/test_micro_benchmarks.py -k test_list_of_ints_core_py --benchmark-enable ``` The `flamegraph` command will produce an interactive SVG at `flamegraph.svg`. ## Releasing TBC (needs to be integrated into `pydantic` repository release process). pydantic-pydantic-e28e879/pydantic-core/benches/000077500000000000000000000000001526274674700217075ustar00rootroot00000000000000pydantic-pydantic-e28e879/pydantic-core/benches/main.rs000066400000000000000000000741041526274674700232070ustar00rootroot00000000000000#![feature(test)] extern crate test; use std::ffi::{CStr, CString}; use test::{Bencher, black_box}; use pyo3::prelude::*; use pyo3::types::{PyDict, PyString}; use _pydantic_core::SchemaValidator; fn build_schema_validator_with_globals( py: Python, code: &CStr, globals: Option<&Bound<'_, PyDict>>, ) -> SchemaValidator { let schema = py.eval(code, globals, None).unwrap().extract().unwrap(); SchemaValidator::py_new(py, &schema, None, true).unwrap() } fn build_schema_validator(py: Python, code: &CStr) -> SchemaValidator { build_schema_validator_with_globals(py, code, None) } fn json<'a>(py: Python<'a>, code: &'a str) -> Bound<'a, PyAny> { black_box(PyString::new(py, code).into_any()) } #[bench] fn ints_json(bench: &mut Bencher) { Python::attach(|py| { let validator = build_schema_validator(py, c"{'type': 'int'}"); let result = validator .validate_json(py, &json(py, "123"), None, None, None, None, false.into(), None, None) .unwrap(); let result_int: i64 = result.extract(py).unwrap(); assert_eq!(result_int, 123); bench.iter(|| { black_box( validator .validate_json(py, &json(py, "123"), None, None, None, None, false.into(), None, None) .unwrap(), ) }) }) } #[bench] fn ints_python(bench: &mut Bencher) { Python::attach(|py| { let validator = build_schema_validator(py, c"{'type': 'int'}"); let Ok(input) = 123_i64.into_pyobject(py); let result = validator .validate_python(py, &input, None, None, None, None, None, false.into(), None, None) .unwrap(); let result_int: i64 = result.extract(py).unwrap(); assert_eq!(result_int, 123); let input = black_box(input); bench.iter(|| { black_box( validator .validate_python(py, &input, None, None, None, None, None, false.into(), None, None) .unwrap(), ) }) }) } #[bench] fn list_int_json(bench: &mut Bencher) { Python::attach(|py| { let validator = build_schema_validator(py, c"{'type': 'list', 'items_schema': {'type': 'int'}}"); let code = format!( "[{}]", (0..100).map(|x| x.to_string()).collect::>().join(",") ); bench.iter(|| { black_box( validator .validate_json(py, &json(py, &code), None, None, None, None, false.into(), None, None) .unwrap(), ) }) }) } fn list_int_input(py: Python<'_>) -> (SchemaValidator, Py) { let validator = build_schema_validator(py, c"{'type': 'list', 'items_schema': {'type': 'int'}}"); let code = CString::new(format!( "[{}]", (0..100).map(|x| x.to_string()).collect::>().join(",") )) .unwrap(); let input = py.eval(&code, None, None).unwrap(); (validator, input.unbind()) } #[bench] fn list_int_python(bench: &mut Bencher) { Python::attach(|py| { let (validator, input) = list_int_input(py); let input = black_box(input.bind(py)); bench.iter(|| { let v = validator .validate_python(py, &input, None, None, None, None, None, false.into(), None, None) .unwrap(); black_box(v) }) }) } #[bench] fn list_int_python_isinstance(bench: &mut Bencher) { Python::attach(|py| { let (validator, input) = list_int_input(py); let input = black_box(input.bind(py)); let v = validator .isinstance_python(py, &input, None, None, None, None, None, None, None) .unwrap(); assert!(v); bench.iter(|| { let v = validator .isinstance_python(py, &input, None, None, None, None, None, None, None) .unwrap(); black_box(v) }) }) } #[bench] fn list_error_json(bench: &mut Bencher) { Python::attach(|py| { let validator = build_schema_validator(py, c"{'type': 'list', 'items_schema': {'type': 'int'}}"); let code = format!( "[{}]", (0..100) .map(|v| format!(r#""{}""#, as_str(v))) .collect::>() .join(", ") ); match validator.validate_json(py, &json(py, &code), None, None, None, None, false.into(), None, None) { Ok(_) => panic!("unexpectedly valid"), Err(e) => { let v = e.value(py); // println!("error: {}", v.to_string()); assert_eq!(v.getattr("title").unwrap().to_string(), "list[int]"); let error_count: i64 = v.call_method0("error_count").unwrap().extract().unwrap(); assert_eq!(error_count, 100); } }; bench.iter(|| { match validator.validate_json(py, &json(py, &code), None, None, None, None, false.into(), None, None) { Ok(_) => panic!("unexpectedly valid"), Err(e) => black_box(e), } }) }) } fn list_error_python_input(py: Python<'_>) -> (SchemaValidator, Py) { let validator = build_schema_validator(py, c"{'type': 'list', 'items_schema': {'type': 'int'}}"); let code = CString::new(format!( "[{}]", (0..100) .map(|v| format!(r#""{}""#, as_str(v))) .collect::>() .join(", ") )) .unwrap(); let input = py.eval(&code, None, None).unwrap().extract().unwrap(); match validator.validate_python(py, &input, None, None, None, None, None, false.into(), None, None) { Ok(_) => panic!("unexpectedly valid"), Err(e) => { let v = e.value(py); // println!("error: {}", v.to_string()); assert_eq!(v.getattr("title").unwrap().to_string(), "list[int]"); let error_count: i64 = v.call_method0("error_count").unwrap().extract().unwrap(); assert_eq!(error_count, 100); } }; (validator, input.unbind()) } #[bench] fn list_error_python(bench: &mut Bencher) { Python::attach(|py| { let (validator, input) = list_error_python_input(py); let input = black_box(input.bind(py)); bench.iter(|| { let result = validator.validate_python(py, &input, None, None, None, None, None, false.into(), None, None); match result { Ok(_) => panic!("unexpectedly valid"), Err(e) => black_box(e), } }) }) } #[bench] fn list_error_python_isinstance(bench: &mut Bencher) { Python::attach(|py| { let (validator, input) = list_error_python_input(py); let input = black_box(input.bind(py)); let r = validator .isinstance_python(py, &input, None, None, None, None, None, None, None) .unwrap(); assert!(!r); bench.iter(|| { black_box( validator .isinstance_python(py, &input, None, None, None, None, None, None, None) .unwrap(), ); }) }) } #[bench] fn list_any_json(bench: &mut Bencher) { Python::attach(|py| { let validator = build_schema_validator(py, c"{'type': 'list'}"); let code = format!( "[{}]", (0..100).map(|x| x.to_string()).collect::>().join(",") ); bench.iter(|| { black_box( validator .validate_json(py, &json(py, &code), None, None, None, None, false.into(), None, None) .unwrap(), ) }) }) } #[bench] fn list_any_python(bench: &mut Bencher) { Python::attach(|py| { let validator = build_schema_validator(py, c"{'type': 'list'}"); let code = CString::new(format!( "[{}]", (0..100).map(|x| x.to_string()).collect::>().join(",") )) .unwrap(); let input = py.eval(&code, None, None).unwrap(); let input = black_box(input); bench.iter(|| { let v = validator .validate_python(py, &input, None, None, None, None, None, false.into(), None, None) .unwrap(); black_box(v) }) }) } fn as_char(i: u8) -> char { (i % 26 + 97) as char } fn as_str(i: u8) -> String { format!("{}{}", as_char(i / 26), as_char(i)) } #[bench] fn dict_json(bench: &mut Bencher) { Python::attach(|py| { let validator = build_schema_validator( py, c"{'type': 'dict', 'keys_schema': {'type': 'str'}, 'values_schema': {'type': 'int'}}", ); let code = format!( "{{{}}}", (0..100_u8) .map(|i| format!(r#""{}": {i}"#, as_str(i))) .collect::>() .join(", ") ); bench.iter(|| { black_box( validator .validate_json(py, &json(py, &code), None, None, None, None, false.into(), None, None) .unwrap(), ) }) }) } #[bench] fn dict_python(bench: &mut Bencher) { Python::attach(|py| { let validator = build_schema_validator( py, c"{'type': 'dict', 'keys_schema': {'type': 'str'}, 'values_schema': {'type': 'int'}}", ); let code = CString::new(format!( "{{{}}}", (0..100_u8) .map(|i| format!(r#""{}{}": {i}"#, as_char(i / 26), as_char(i))) .collect::>() .join(", ") )) .unwrap(); let input = py.eval(&code, None, None).unwrap(); let input = black_box(input); bench.iter(|| { let v = validator .validate_python(py, &input, None, None, None, None, None, false.into(), None, None) .unwrap(); black_box(v) }) }) } #[bench] fn dict_value_error(bench: &mut Bencher) { Python::attach(|py| { let validator = build_schema_validator( py, cr"{ 'type': 'dict', 'keys_schema': {'type': 'str'}, 'values_schema': {'type': 'int', 'lt': 0}, }", ); let code = CString::new(format!( "{{{}}}", (0..100_u8) .map(|i| format!(r#""{}": {i}"#, as_str(i))) .collect::>() .join(", ") )) .unwrap(); let input = py.eval(&code, None, None).unwrap(); match validator.validate_python(py, &input, None, None, None, None, None, false.into(), None, None) { Ok(_) => panic!("unexpectedly valid"), Err(e) => { let v = e.value(py); // println!("error: {}", v.to_string()); assert_eq!(v.getattr("title").unwrap().to_string(), "dict[str,constrained-int]"); let error_count: i64 = v.call_method0("error_count").unwrap().extract().unwrap(); assert_eq!(error_count, 100); } }; let input = black_box(input); bench.iter(|| { let result = validator.validate_python(py, &input, None, None, None, None, None, false.into(), None, None); match result { Ok(_) => panic!("unexpectedly valid"), Err(e) => black_box(e), } }) }) } #[bench] fn typed_dict_json(bench: &mut Bencher) { Python::attach(|py| { let validator = build_schema_validator( py, cr"{ 'type': 'typed-dict', 'extra_behavior': 'ignore', 'fields': { 'a': {'type': 'typed-dict-field', 'schema': {'type': 'int'}}, 'b': {'type': 'typed-dict-field', 'schema': {'type': 'int'}}, 'c': {'type': 'typed-dict-field', 'schema': {'type': 'int'}}, 'd': {'type': 'typed-dict-field', 'schema': {'type': 'int'}}, 'e': {'type': 'typed-dict-field', 'schema': {'type': 'int'}}, 'f': {'type': 'typed-dict-field', 'schema': {'type': 'int'}}, 'g': {'type': 'typed-dict-field', 'schema': {'type': 'int'}}, 'h': {'type': 'typed-dict-field', 'schema': {'type': 'int'}}, 'i': {'type': 'typed-dict-field', 'schema': {'type': 'int'}}, 'j': {'type': 'typed-dict-field', 'schema': {'type': 'int'}}, }, }", ); let code = r#"{"a": 1, "b": 2, "c": 3, "d": 4, "e": 5, "f": 6, "g": 7, "h": 8, "i": 9, "j": 0}"#; bench.iter(|| { black_box( validator .validate_json(py, &json(py, code), None, None, None, None, false.into(), None, None) .unwrap(), ) }) }) } #[bench] fn typed_dict_python(bench: &mut Bencher) { Python::attach(|py| { let validator = build_schema_validator( py, cr"{ 'type': 'typed-dict', 'extra_behavior': 'ignore', 'fields': { 'a': {'type': 'typed-dict-field', 'schema': {'type': 'int'}}, 'b': {'type': 'typed-dict-field', 'schema': {'type': 'int'}}, 'c': {'type': 'typed-dict-field', 'schema': {'type': 'int'}}, 'd': {'type': 'typed-dict-field', 'schema': {'type': 'int'}}, 'e': {'type': 'typed-dict-field', 'schema': {'type': 'int'}}, 'f': {'type': 'typed-dict-field', 'schema': {'type': 'int'}}, 'g': {'type': 'typed-dict-field', 'schema': {'type': 'int'}}, 'h': {'type': 'typed-dict-field', 'schema': {'type': 'int'}}, 'i': {'type': 'typed-dict-field', 'schema': {'type': 'int'}}, 'j': {'type': 'typed-dict-field', 'schema': {'type': 'int'}}, }, }", ); let code = cr#"{"a": 1, "b": 2, "c": 3, "d": 4, "e": 5, "f": 6, "g": 7, "h": 8, "i": 9, "j": 0}"#; let input = py.eval(&code, None, None).unwrap(); let input = black_box(input); bench.iter(|| { let v = validator .validate_python(py, &input, None, None, None, None, None, false.into(), None, None) .unwrap(); black_box(v) }) }) } #[bench] fn typed_dict_deep_error(bench: &mut Bencher) { Python::attach(|py| { let validator = build_schema_validator( py, cr"{ 'type': 'typed-dict', 'fields': { 'field_a': {'type': 'typed-dict-field', 'schema': {'type': 'str'}}, 'field_b': { 'type': 'typed-dict-field', 'schema': { 'type': 'typed-dict', 'fields': { 'field_c': {'type': 'typed-dict-field','schema': {'type': 'str'}}, 'field_d': { 'type': 'typed-dict-field', 'schema': { 'type': 'typed-dict', 'fields': {'field_e': {'type': 'typed-dict-field','schema': {'type': 'str'}}, 'field_f': {'type': 'typed-dict-field','schema': {'type': 'int'}}}, } }, }, } }, }, }", ); let code = c"{'field_a': '1', 'field_b': {'field_c': '2', 'field_d': {'field_e': '4', 'field_f': 'xx'}}}"; let input = py.eval(code, None, None).unwrap(); let input = black_box(input); match validator.validate_python(py, &input, None, None, None, None, None, false.into(), None, None) { Ok(_) => panic!("unexpectedly valid"), Err(e) => { let v = e.value(py); // println!("error: {}", v.to_string()); assert_eq!(v.getattr("title").unwrap().to_string(), "typed-dict"); let error_count: i64 = v.call_method0("error_count").unwrap().extract().unwrap(); assert_eq!(error_count, 1); } }; bench.iter(|| { let result = validator.validate_python(py, &input, None, None, None, None, None, false.into(), None, None); match result { Ok(_) => panic!("unexpectedly valid"), Err(e) => black_box(e), } }) }) } #[bench] fn complete_model(bench: &mut Bencher) { Python::attach(|py| { let sys_path = py.import("sys").unwrap().getattr("path").unwrap(); sys_path.call_method1("append", ("./tests/benchmarks/",)).unwrap(); let complete_schema = py.import("complete_schema").unwrap(); let schema = complete_schema.call_method0("schema").unwrap(); let validator = SchemaValidator::py_new(py, &schema, None, true).unwrap(); let input = complete_schema.call_method0("input_data_lax").unwrap(); let input = black_box(input); bench.iter(|| { black_box( validator .validate_python(py, &input, None, None, None, None, None, false.into(), None, None) .unwrap(), ); }) }) } #[bench] fn nested_model_using_definitions(bench: &mut Bencher) { Python::attach(|py| { let sys_path = py.import("sys").unwrap().getattr("path").unwrap(); sys_path.call_method1("append", ("./tests/benchmarks/",)).unwrap(); let complete_schema = py.import("nested_schema").unwrap(); let schema = complete_schema.call_method0("schema_using_defs").unwrap(); let validator = SchemaValidator::py_new(py, &schema, None, true).unwrap(); let input = complete_schema.call_method0("input_data_valid").unwrap(); let input = black_box(input); validator .validate_python(py, &input, None, None, None, None, None, false.into(), None, None) .unwrap(); bench.iter(|| { black_box( validator .validate_python(py, &input, None, None, None, None, None, false.into(), None, None) .unwrap(), ); }) }) } #[bench] fn nested_model_inlined(bench: &mut Bencher) { Python::attach(|py| { let sys_path = py.import("sys").unwrap().getattr("path").unwrap(); sys_path.call_method1("append", ("./tests/benchmarks/",)).unwrap(); let complete_schema = py.import("nested_schema").unwrap(); let schema = complete_schema.call_method0("inlined_schema").unwrap(); let validator = SchemaValidator::py_new(py, &schema, None, true).unwrap(); let input = complete_schema.call_method0("input_data_valid").unwrap(); let input = black_box(input); validator .validate_python(py, &input, None, None, None, None, None, false.into(), None, None) .unwrap(); bench.iter(|| { black_box( validator .validate_python(py, &input, None, None, None, None, None, false.into(), None, None) .unwrap(), ); }) }) } #[bench] fn literal_ints_few_python(bench: &mut Bencher) { Python::attach(|py| { let validator = build_schema_validator(py, c"{'type': 'literal', 'expected': list(range(5))}"); let Ok(input) = 4_i64.into_pyobject(py); let result = validator .validate_python(py, &input, None, None, None, None, None, false.into(), None, None) .unwrap(); let result_int: i64 = result.extract(py).unwrap(); assert_eq!(result_int, 4); let input = black_box(input); bench.iter(|| { black_box( validator .validate_python(py, &input, None, None, None, None, None, false.into(), None, None) .unwrap(), ) }) }) } #[bench] fn literal_strings_few_small_python(bench: &mut Bencher) { Python::attach(|py| { let validator = build_schema_validator(py, c"{'type': 'literal', 'expected': [f'{idx}' for idx in range(5)]}"); let input = py.eval(c"'4'", None, None).unwrap(); let input_str: String = input.extract().unwrap(); let result = validator .validate_python(py, &input, None, None, None, None, None, false.into(), None, None) .unwrap(); let result_str: String = result.extract(py).unwrap(); assert_eq!(result_str, input_str); let input = black_box(input); bench.iter(|| { black_box( validator .validate_python(py, &input, None, None, None, None, None, false.into(), None, None) .unwrap(), ) }) }) } #[bench] fn literal_strings_few_large_python(bench: &mut Bencher) { Python::attach(|py| { let validator = build_schema_validator( py, c"{'type': 'literal', 'expected': ['a' * 25 + f'{idx}' for idx in range(5)]}", ); let input = py.eval(c"'a' * 25 + '4'", None, None).unwrap(); let input_str: String = input.extract().unwrap(); let result = validator .validate_python(py, &input, None, None, None, None, None, false.into(), None, None) .unwrap(); let result_str: String = result.extract(py).unwrap(); assert_eq!(result_str, input_str); let input = black_box(input); bench.iter(|| { black_box( validator .validate_python(py, &input, None, None, None, None, None, false.into(), None, None) .unwrap(), ) }) }) } #[bench] fn literal_enums_few_python(bench: &mut Bencher) { Python::attach(|py| { let globals = PyDict::new(py); py.run( cr" from enum import Enum class Foo(Enum): v1 = object() v2 = object() v3 = object() v4 = object() ", Some(&globals), None, ) .unwrap(); let validator = build_schema_validator_with_globals( py, c"{'type': 'literal', 'expected': [Foo.v1, Foo.v2, Foo.v3, Foo.v4]}", Some(&globals), ); let input = py.eval(c"Foo.v4", Some(&globals), None).unwrap(); let result = validator .validate_python(py, &input, None, None, None, None, None, false.into(), None, None) .unwrap(); assert!(input.eq(result).unwrap()); let input = black_box(input); bench.iter(|| { black_box( validator .validate_python(py, &input, None, None, None, None, None, false.into(), None, None) .unwrap(), ) }) }) } #[bench] fn literal_ints_many_python(bench: &mut Bencher) { Python::attach(|py| { let validator = build_schema_validator(py, c"{'type': 'literal', 'expected': list(range(100))}"); let Ok(input) = 99_i64.into_pyobject(py); let result = validator .validate_python(py, &input, None, None, None, None, None, false.into(), None, None) .unwrap(); let result_int: i64 = result.extract(py).unwrap(); assert_eq!(result_int, 99); let input = black_box(input); bench.iter(|| { black_box( validator .validate_python(py, &input, None, None, None, None, None, false.into(), None, None) .unwrap(), ) }) }) } #[bench] fn literal_strings_many_small_python(bench: &mut Bencher) { Python::attach(|py| { let validator = build_schema_validator(py, c"{'type': 'literal', 'expected': [f'{idx}' for idx in range(100)]}"); let input = py.eval(c"'99'", None, None).unwrap(); let input_str: String = input.extract().unwrap(); let result = validator .validate_python(py, &input, None, None, None, None, None, false.into(), None, None) .unwrap(); let result_str: String = result.extract(py).unwrap(); assert_eq!(result_str, input_str); let input = black_box(input); bench.iter(|| { black_box( validator .validate_python(py, &input, None, None, None, None, None, false.into(), None, None) .unwrap(), ) }) }) } #[bench] fn literal_strings_many_large_python(bench: &mut Bencher) { Python::attach(|py| { let validator = build_schema_validator( py, c"{'type': 'literal', 'expected': ['a' * 25 + f'{idx}' for idx in range(100)]}", ); let input = py.eval(c"'a' * 25 + '99'", None, None).unwrap(); let input_str: String = input.extract().unwrap(); let result = validator .validate_python(py, &input, None, None, None, None, None, false.into(), None, None) .unwrap(); let result_str: String = result.extract(py).unwrap(); assert_eq!(result_str, input_str); let input = black_box(input); bench.iter(|| { black_box( validator .validate_python(py, &input, None, None, None, None, None, false.into(), None, None) .unwrap(), ) }) }) } #[bench] fn literal_ints_many_json(bench: &mut Bencher) { Python::attach(|py| { let validator = build_schema_validator(py, c"{'type': 'literal', 'expected': list(range(100))}"); let input_json = py.eval(c"'99'", None, None).unwrap(); let result = validator .validate_json(py, &input_json, None, None, None, None, false.into(), None, None) .unwrap(); let result_int: i64 = result.extract(py).unwrap(); assert_eq!(result_int, 99); let input_json = black_box(input_json); bench.iter(|| { black_box( validator .validate_json(py, &input_json, None, None, None, None, false.into(), None, None) .unwrap(), ) }) }) } #[bench] fn literal_strings_many_large_json(bench: &mut Bencher) { Python::attach(|py| { let validator = build_schema_validator( py, c"{'type': 'literal', 'expected': ['a' * 25 + f'{idx}' for idx in range(100)]}", ); let input = py.eval(c"'a' * 25 + '99'", None, None).unwrap(); let input_json = py.eval(c"'\"' + 'a' * 25 + '99' + '\"'", None, None).unwrap(); let input_str: String = input.extract().unwrap(); let result = validator .validate_json(py, &input_json, None, None, None, None, false.into(), None, None) .unwrap(); let result_str: String = result.extract(py).unwrap(); assert_eq!(result_str, input_str); let input_json = black_box(input_json); bench.iter(|| { black_box( validator .validate_json(py, &input_json, None, None, None, None, false.into(), None, None) .unwrap(), ) }) }) } #[bench] fn literal_mixed_few_python(bench: &mut Bencher) { Python::attach(|py| { let globals = PyDict::new(py); py.run( cr" from enum import Enum class Foo(Enum): v1 = object() v2 = object() v3 = object() v4 = object() ", Some(&globals), None, ) .unwrap(); let validator = build_schema_validator_with_globals( py, c"{'type': 'literal', 'expected': [None, 'null', -1, Foo.v4]}", Some(&globals), ); // String { let input = py.eval(c"'null'", None, None).unwrap(); let input_str: String = input.extract().unwrap(); let result = validator .validate_python(py, &input, None, None, None, None, None, false.into(), None, None) .unwrap(); let result_str: String = result.extract(py).unwrap(); assert_eq!(result_str, input_str); let input = black_box(input); bench.iter(|| { black_box( validator .validate_python(py, &input, None, None, None, None, None, false.into(), None, None) .unwrap(), ) }) } // Int { let input = py.eval(c"-1", None, None).unwrap(); let input_int: i64 = input.extract().unwrap(); let result = validator .validate_python(py, &input, None, None, None, None, None, false.into(), None, None) .unwrap(); let result_int: i64 = result.extract(py).unwrap(); assert_eq!(result_int, input_int); let input = black_box(input); bench.iter(|| { black_box( validator .validate_python(py, &input, None, None, None, None, None, false.into(), None, None) .unwrap(), ) }) } // None { let input = py.eval(c"None", None, None).unwrap(); let result = validator .validate_python(py, &input, None, None, None, None, None, false.into(), None, None) .unwrap(); assert!(input.eq(result).unwrap()); let input = black_box(input); bench.iter(|| { black_box( validator .validate_python(py, &input, None, None, None, None, None, false.into(), None, None) .unwrap(), ) }) } // Enum { let input = py.eval(c"Foo.v4", Some(&globals), None).unwrap(); let result = validator .validate_python(py, &input, None, None, None, None, None, false.into(), None, None) .unwrap(); assert!(input.eq(result).unwrap()); let input = black_box(input); bench.iter(|| { black_box( validator .validate_python(py, &input, None, None, None, None, None, false.into(), None, None) .unwrap(), ) }) } }) } pydantic-pydantic-e28e879/pydantic-core/build.rs000066400000000000000000000021471526274674700217510ustar00rootroot00000000000000fn main() { pyo3_build_config::use_pyo3_cfgs(); if let Some(true) = version_check::supports_feature("coverage_attribute") { println!("cargo:rustc-cfg=has_coverage_attribute"); } println!("cargo:rustc-check-cfg=cfg(has_coverage_attribute)"); if std::env::var("RUSTFLAGS") .unwrap_or_default() .contains("-Cprofile-use=") { println!("cargo:rustc-cfg=specified_profile_use"); } println!("cargo:rustc-check-cfg=cfg(specified_profile_use)"); println!("cargo:rustc-env=PROFILE={}", std::env::var("PROFILE").unwrap()); // The macOS `ld_prime` new Linker (used in macOS 15 GitHub CI runners), // reserves significantly less Mach-O header padding than the old linker. // Tools like Homebrew use install_name_tool to rewrite dylib paths post-install, // and that requires spare space in the header. Without this flag the relink // fails with "updated load commands do not fit in the header". if std::env::var("CARGO_CFG_TARGET_OS").as_deref() == Ok("macos") { println!("cargo:rustc-link-arg=-Wl,-headerpad_max_install_names"); } } pydantic-pydantic-e28e879/pydantic-core/pyproject.toml000066400000000000000000000136141526274674700232210ustar00rootroot00000000000000[build-system] requires = ['maturin>=1.15.0,<2'] build-backend = 'maturin' [project] name = 'pydantic_core' description = "Core functionality for Pydantic validation and serialization" requires-python = '>=3.10' license = 'MIT' license-files = ['LICENSE'] authors = [ { name = 'Samuel Colvin', email = 's@muelcolvin.com' }, { name = 'Adrian Garcia Badaracco', email = '1755071+adriangb@users.noreply.github.com' }, { name = 'David Montague', email = 'david@pydantic.dev' }, { name = 'David Hewitt', email = 'mail@davidhewitt.dev' }, { name = 'Sydney Runkle', email = 'sydneymarierunkle@gmail.com' }, { name = 'Victorien Plot', email = 'contact@vctrn.dev' }, ] classifiers = [ 'Development Status :: 3 - Alpha', 'Programming Language :: Python', 'Programming Language :: Python :: 3', 'Programming Language :: Python :: 3 :: Only', 'Programming Language :: Python :: 3.10', 'Programming Language :: Python :: 3.11', 'Programming Language :: Python :: 3.12', 'Programming Language :: Python :: 3.13', 'Programming Language :: Python :: 3.14', 'Programming Language :: Python :: Implementation :: CPython', 'Programming Language :: Python :: Implementation :: PyPy', 'Programming Language :: Python :: Implementation :: GraalPy', 'Programming Language :: Rust', 'Framework :: Pydantic', 'Intended Audience :: Developers', 'Intended Audience :: Information Technology', 'Operating System :: POSIX :: Linux', 'Operating System :: Microsoft :: Windows', 'Operating System :: MacOS', 'Typing :: Typed', ] dependencies = ['typing-extensions>=4.16.0'] dynamic = ['readme', 'version'] [project.urls] Homepage = 'https://github.com/pydantic' Funding = 'https://github.com/sponsors/samuelcolvin' Source = 'https://github.com/pydantic/pydantic/tree/main/pydantic-core' [dependency-groups] dev = ["maturin>=1.15"] testing-extra = [ { include-group = "dev" }, 'coverage', 'dirty-equals', 'exceptiongroup; python_version < "3.11"', 'hypothesis', 'inline-snapshot', # numpy doesn't offer prebuilt wheels for all versions and platforms we test in CI e.g. aarch64 musllinux 'numpy; python_version < "3.13" and implementation_name == "cpython" and platform_machine == "x86_64"', # pandas doesn't offer prebuilt wheels for all versions and platforms we test in CI e.g. aarch64 musllinux 'pandas; python_version < "3.13" and implementation_name == "cpython" and platform_machine == "x86_64"', 'pytest', # pytest-examples currently depends on aiohttp via black; we don't want to build it on platforms like aarch64 musllinux in CI 'pytest-examples; implementation_name == "cpython" and platform_machine == "x86_64"', 'pytest-mock', 'pytest-pretty', 'pytest-run-parallel', 'pytest-benchmark', 'pytest-timeout', 'python-dateutil', 'typing-inspection>=0.4.1', 'tzdata', ] linting = [ { include-group = "dev" }, 'griffe', 'mypy', 'pre-commit', 'pyright', 'ruff', ] wasm = [{ include-group = "dev" }, 'ruff'] codspeed = [ # codspeed is only run on CI, with latest version of CPython 'pytest-codspeed; python_version == "3.13" and implementation_name == "cpython"', ] [tool.maturin] python-source = "python" module-name = "pydantic_core._pydantic_core" bindings = 'pyo3' # when using `uv` to build `pydantic-core`, use the `dev` profile # can override by e.g. `make build-pgo` and then using `uv run --no-sync` editable-profile = 'dev' # uses uv export followed by uv pip install to achieve a locked install # because uv sync will overwrite the temporary venv created by maturin # numpy not needed by the benchmarks and doesn't support the manylinux # versions we build PGO wheels for anyway pgo-command = "uv export --frozen --group testing-extra --no-emit-workspace --no-emit-package numpy --no-emit-package pandas --no-header --no-annotate -o target/pgo-requirements.txt && uv pip install -r target/pgo-requirements.txt && uv run --active --no-sync pytest tests/benchmarks" [tool.ruff] line-length = 120 target-version = 'py310' [tool.ruff.lint] extend-select = ['Q', 'RUF100', 'C90', 'I', 'UP'] extend-ignore = [ 'E721', # using type() instead of isinstance() - we use this in tests ] flake8-quotes = { inline-quotes = 'single', multiline-quotes = 'double' } mccabe = { max-complexity = 13 } isort = { known-first-party = ['pydantic_core', 'tests'] } [tool.ruff.lint.pyupgrade] keep-runtime-typing = true [tool.ruff.format] quote-style = 'single' [tool.pytest.ini_options] testpaths = 'tests' log_format = '%(name)s %(levelname)s: %(message)s' filterwarnings = ['error'] timeout = 30 xfail_strict = true markers = [ 'skip_gc_traverse_check: skip the automatic GC traversal completeness check', ] # min, max, mean, stddev, median, iqr, outliers, ops, rounds, iterations addopts = [ '--benchmark-columns', 'min,mean,stddev,outliers,rounds,iterations', '--benchmark-group-by', 'group', '--benchmark-warmup', 'on', '--benchmark-disable', # this is enable by `make benchmark` when you actually want to run benchmarks ] [tool.coverage.run] source = ['pydantic_core'] branch = true [tool.coverage.report] precision = 2 exclude_also = [ 'raise\sNotImplementedError', '@(typing\.)?overload', 'class .*\bProtocol\):', '(typing\.)?.assert_never', ] # configuring https://github.com/pydantic/hooky [tool.hooky] reviewers = ['Viicos', 'davidhewitt'] require_change_file = false [tool.pyright] include = ['python/pydantic_core', 'tests/test_typing.py'] reportUnnecessaryTypeIgnoreComment = true [tool.inline-snapshot.shortcuts] fix = ["create", "fix"] [tool.uv] required-version = '>=0.7.2' cache-keys = [ { file = "pyproject.toml" }, { file = "Cargo.toml" }, { file = "Cargo.lock" }, { file = "build.rs" }, { dir = ".cargo" }, { dir = "src" }, { dir = "python" }, { env = "MATURIN_PEP517_ARGS" }, { env = "RUSTFLAGS" } ] pydantic-pydantic-e28e879/pydantic-core/python/000077500000000000000000000000001526274674700216215ustar00rootroot00000000000000pydantic-pydantic-e28e879/pydantic-core/python/pydantic_core/000077500000000000000000000000001526274674700244445ustar00rootroot00000000000000pydantic-pydantic-e28e879/pydantic-core/python/pydantic_core/__init__.py000066400000000000000000000133451526274674700265630ustar00rootroot00000000000000from __future__ import annotations import sys as _sys from typing import Any as _Any from typing_extensions import Sentinel from ._pydantic_core import ( ArgsKwargs, MultiHostUrl, PydanticCustomError, PydanticKnownError, PydanticOmit, PydanticSerializationError, PydanticSerializationUnexpectedValue, PydanticUndefined, PydanticUndefinedType, PydanticUseDefault, SchemaError, SchemaSerializer, SchemaValidator, Some, TzInfo, Url, ValidationError, __version__, from_json, to_json, to_jsonable_python, ) from .core_schema import CoreConfig, CoreSchema, CoreSchemaType, ErrorType if _sys.version_info < (3, 11): from typing_extensions import NotRequired as _NotRequired else: from typing import NotRequired as _NotRequired if _sys.version_info < (3, 12): from typing_extensions import TypedDict as _TypedDict else: from typing import TypedDict as _TypedDict __all__ = [ '__version__', 'UNSET', 'CoreConfig', 'CoreSchema', 'CoreSchemaType', 'SchemaValidator', 'SchemaSerializer', 'Some', 'Url', 'MultiHostUrl', 'ArgsKwargs', 'PydanticUndefined', 'PydanticUndefinedType', 'SchemaError', 'ErrorDetails', 'InitErrorDetails', 'ValidationError', 'PydanticCustomError', 'PydanticKnownError', 'PydanticOmit', 'PydanticUseDefault', 'PydanticSerializationError', 'PydanticSerializationUnexpectedValue', 'TzInfo', 'to_json', 'from_json', 'to_jsonable_python', ] class ErrorDetails(_TypedDict): type: str """ The type of error that occurred, this is an identifier designed for programmatic use that will change rarely or never. `type` is unique for each error message, and can hence be used as an identifier to build custom error messages. """ loc: tuple[int | str, ...] """Tuple of strings and ints identifying where in the schema the error occurred.""" msg: str """A human readable error message.""" input: _Any """The input data at this `loc` that caused the error.""" ctx: _NotRequired[dict[str, _Any]] """ Values which are required to render the error message, and could hence be useful in rendering custom error messages. Also useful for passing custom error data forward. """ url: _NotRequired[str] """ The documentation URL giving information about the error. No URL is available if a [`PydanticCustomError`][pydantic_core.PydanticCustomError] is used. """ class InitErrorDetails(_TypedDict): type: str | PydanticCustomError """The type of error that occurred, this should be a "slug" identifier that changes rarely or never.""" loc: _NotRequired[tuple[int | str, ...]] """Tuple of strings and ints identifying where in the schema the error occurred.""" input: _Any """The input data at this `loc` that caused the error.""" ctx: _NotRequired[dict[str, _Any]] """ Values which are required to render the error message, and could hence be useful in rendering custom error messages. Also useful for passing custom error data forward. """ class ErrorTypeInfo(_TypedDict): """ Gives information about errors. """ type: ErrorType """The type of error that occurred, this should be a "slug" identifier that changes rarely or never.""" message_template_python: str """String template to render a human readable error message from using context, when the input is Python.""" example_message_python: str """Example of a human readable error message, when the input is Python.""" message_template_json: _NotRequired[str] """String template to render a human readable error message from using context, when the input is JSON data.""" example_message_json: _NotRequired[str] """Example of a human readable error message, when the input is JSON data.""" example_context: dict[str, _Any] | None """Example of context values.""" class MultiHostHost(_TypedDict): """ A host part of a multi-host URL. """ username: str | None """The username part of this host, or `None`.""" password: str | None """The password part of this host, or `None`.""" host: str | None """The host part of this host, or `None`.""" port: int | None """The port part of this host, or `None`.""" MISSING = Sentinel('MISSING') """ /// version-added | v2.12 /// /// version-changed | v2.14 The `MISSING` sentinel is no longer experimental. /// The `MISSING` sentinel is a singleton indicating a field value was not provided during validation. This singleton can be used as a default value, as an alternative to `None` when it has an explicit meaning. During serialization, any field with `MISSING` as a value is excluded from the output. At runtime, the `MISSING` sentinel is implemented as a [`sentinel`](https://docs.python.org/3.15/library/functions.html#sentinel) instance. ```python from pydantic import MISSING, BaseModel class Configuration(BaseModel): timeout: int | None | MISSING = MISSING # configuration defaults, stored somewhere else: defaults = {'timeout': 200} conf = Configuration() # `timeout` is excluded from the serialization output: conf.model_dump() # {} # The `MISSING` value doesn't appear in the JSON Schema: Configuration.model_json_schema()['properties']['timeout'] #> {'anyOf': [{'type': 'integer'}, {'type': 'null'}], 'title': 'Timeout'} # `is` can be used to discriminate between the sentinel and other values: timeout = conf.timeout if conf.timeout is not MISSING else defaults['timeout'] ``` !!! note When [applying constraints](./fields.md#field-constraints) to a union containing the `MISSING` sentinel, such constraints are automatically applied to the remaining type(s) of the union. """ pydantic-pydantic-e28e879/pydantic-core/python/pydantic_core/_pydantic_core/000077500000000000000000000000001526274674700274265ustar00rootroot00000000000000pydantic-pydantic-e28e879/pydantic-core/python/pydantic_core/_pydantic_core/__init__.pyi000066400000000000000000001363361526274674700317240ustar00rootroot00000000000000import datetime from collections.abc import Callable, Mapping from typing import Any, Generic, Literal, TypeAlias, TypeVar, final, overload from _typeshed import SupportsAllComparisons from typing_extensions import LiteralString, Self from pydantic_core import ErrorDetails, ErrorTypeInfo, InitErrorDetails, MultiHostHost from pydantic_core.core_schema import CoreConfig, CoreSchema, ErrorType, ExtraBehavior from . import _schema_gather as _schema_gather __all__ = [ '__version__', 'build_profile', 'build_info', '_recursion_limit', 'ArgsKwargs', 'SchemaValidator', 'SchemaSerializer', 'Url', 'MultiHostUrl', 'SchemaError', 'ValidationError', 'PydanticCustomError', 'PydanticKnownError', 'PydanticOmit', 'PydanticUseDefault', 'PydanticSerializationError', 'PydanticSerializationUnexpectedValue', 'PydanticUndefined', 'PydanticUndefinedType', 'Some', 'to_json', 'from_json', 'to_jsonable_python', 'list_all_errors', 'TzInfo', '_schema_gather', ] __version__: str build_profile: str build_info: str _recursion_limit: int _T = TypeVar('_T', default=Any, covariant=True) _StringInput: TypeAlias = 'dict[str, _StringInput]' @final class Some(Generic[_T]): """ Similar to Rust's [`Option::Some`](https://doc.rust-lang.org/std/option/enum.Option.html) type, this identifies a value as being present, and provides a way to access it. Generally used in a union with `None` to different between "some value which could be None" and no value. """ __match_args__ = ('value',) @property def value(self) -> _T: """ Returns the value wrapped by `Some`. """ @classmethod def __class_getitem__(cls, item: Any, /) -> type[Self]: ... @final class SchemaValidator: """ `SchemaValidator` is the Python wrapper for `pydantic-core`'s Rust validation logic, internally it owns one `CombinedValidator` which may in turn own more `CombinedValidator`s which make up the full schema validator. """ # note: pyo3 currently supports __new__, but not __init__, though we include __init__ stubs # and docstrings here (and in the following classes) for documentation purposes def __init__(self, schema: CoreSchema, config: CoreConfig | None = None, _use_prebuilt: bool = True) -> None: """Initializes the `SchemaValidator`. Arguments: schema: The `CoreSchema` to use for validation. config: Optionally a [`CoreConfig`][pydantic_core.core_schema.CoreConfig] to configure validation. _use_prebuilt: Whether to use pre-built validators (False during rebuilds to avoid stale references). """ def __new__(cls, schema: CoreSchema, config: CoreConfig | None = None, _use_prebuilt: bool = True) -> Self: ... @property def title(self) -> str: """ The title of the schema, as used in the heading of [`ValidationError.__str__()`][pydantic_core.ValidationError]. """ def validate_python( self, input: Any, *, strict: bool | None = None, extra: ExtraBehavior | None = None, from_attributes: bool | None = None, context: Any | None = None, self_instance: Any | None = None, allow_partial: bool | Literal['off', 'on', 'trailing-strings'] = False, by_alias: bool | None = None, by_name: bool | None = None, ) -> Any: """ Validate a Python object against the schema and return the validated object. Arguments: input: The Python object to validate. strict: Whether to validate the object in strict mode. If `None`, the value of [`CoreConfig.strict`][pydantic_core.core_schema.CoreConfig] is used. extra: Whether to ignore, allow, or forbid extra data during model validation. If `None`, the value of [`CoreConfig.extra_fields_behavior`][pydantic_core.core_schema.CoreConfig] is used. from_attributes: Whether to validate objects as inputs to models by extracting attributes. If `None`, the value of [`CoreConfig.from_attributes`][pydantic_core.core_schema.CoreConfig] is used. context: The context to use for validation, this is passed to functional validators as [`info.context`][pydantic_core.core_schema.ValidationInfo.context]. self_instance: An instance of a model set attributes on from validation, this is used when running validation from the `__init__` method of a model. allow_partial: Whether to allow partial validation; if `True` errors in the last element of sequences and mappings are ignored. `'trailing-strings'` means any final unfinished JSON string is included in the result. by_alias: Whether to use the field's alias when validating against the provided input data. by_name: Whether to use the field's name when validating against the provided input data. Raises: ValidationError: If validation fails. Exception: Other error types maybe raised if internal errors occur. Returns: The validated object. """ def isinstance_python( self, input: Any, *, strict: bool | None = None, extra: ExtraBehavior | None = None, from_attributes: bool | None = None, context: Any | None = None, self_instance: Any | None = None, by_alias: bool | None = None, by_name: bool | None = None, ) -> bool: """ Similar to [`validate_python()`][pydantic_core.SchemaValidator.validate_python] but returns a boolean. Arguments match `validate_python()`. This method will not raise `ValidationError`s but will raise internal errors. Returns: `True` if validation succeeds, `False` if validation fails. """ def validate_json( self, input: str | bytes | bytearray, *, strict: bool | None = None, extra: ExtraBehavior | None = None, context: Any | None = None, self_instance: Any | None = None, allow_partial: bool | Literal['off', 'on', 'trailing-strings'] = False, by_alias: bool | None = None, by_name: bool | None = None, ) -> Any: """ Validate JSON data directly against the schema and return the validated Python object. This method should be significantly faster than `validate_python(json.loads(json_data))` as it avoids the need to create intermediate Python objects It also handles constructing the correct Python type even in strict mode, where `validate_python(json.loads(json_data))` would fail validation. Arguments: input: The JSON data to validate. strict: Whether to validate the object in strict mode. If `None`, the value of [`CoreConfig.strict`][pydantic_core.core_schema.CoreConfig] is used. extra: Whether to ignore, allow, or forbid extra data during model validation. If `None`, the value of [`CoreConfig.extra_fields_behavior`][pydantic_core.core_schema.CoreConfig] is used. context: The context to use for validation, this is passed to functional validators as [`info.context`][pydantic_core.core_schema.ValidationInfo.context]. self_instance: An instance of a model set attributes on from validation. allow_partial: Whether to allow partial validation; if `True` incomplete JSON will be parsed successfully and errors in the last element of sequences and mappings are ignored. `'trailing-strings'` means any final unfinished JSON string is included in the result. by_alias: Whether to use the field's alias when validating against the provided input data. by_name: Whether to use the field's name when validating against the provided input data. Raises: ValidationError: If validation fails or if the JSON data is invalid. Exception: Other error types maybe raised if internal errors occur. Returns: The validated Python object. """ def validate_strings( self, input: _StringInput, *, strict: bool | None = None, extra: ExtraBehavior | None = None, context: Any | None = None, allow_partial: bool | Literal['off', 'on', 'trailing-strings'] = False, by_alias: bool | None = None, by_name: bool | None = None, ) -> Any: """ Validate a string against the schema and return the validated Python object. This is similar to `validate_json` but applies to scenarios where the input will be a string but not JSON data, e.g. URL fragments, query parameters, etc. Arguments: input: The input as a string, or bytes/bytearray if `strict=False`. strict: Whether to validate the object in strict mode. If `None`, the value of [`CoreConfig.strict`][pydantic_core.core_schema.CoreConfig] is used. extra: Whether to ignore, allow, or forbid extra data during model validation. If `None`, the value of [`CoreConfig.extra_fields_behavior`][pydantic_core.core_schema.CoreConfig] is used. context: The context to use for validation, this is passed to functional validators as [`info.context`][pydantic_core.core_schema.ValidationInfo.context]. allow_partial: Whether to allow partial validation; if `True` errors in the last element of sequences and mappings are ignored. `'trailing-strings'` means any final unfinished JSON string is included in the result. by_alias: Whether to use the field's alias when validating against the provided input data. by_name: Whether to use the field's name when validating against the provided input data. Raises: ValidationError: If validation fails or if the JSON data is invalid. Exception: Other error types maybe raised if internal errors occur. Returns: The validated Python object. """ def validate_assignment( self, obj: Any, field_name: str, field_value: Any, *, strict: bool | None = None, extra: ExtraBehavior | None = None, from_attributes: bool | None = None, context: Any | None = None, by_alias: bool | None = None, by_name: bool | None = None, ) -> dict[str, Any] | tuple[dict[str, Any], dict[str, Any] | None, set[str]]: """ Validate an assignment to a field on a model. Arguments: obj: The model instance being assigned to. field_name: The name of the field to validate assignment for. field_value: The value to assign to the field. strict: Whether to validate the object in strict mode. If `None`, the value of [`CoreConfig.strict`][pydantic_core.core_schema.CoreConfig] is used. extra: Whether to ignore, allow, or forbid extra data during model validation. If `None`, the value of [`CoreConfig.extra_fields_behavior`][pydantic_core.core_schema.CoreConfig] is used. from_attributes: Whether to validate objects as inputs to models by extracting attributes. If `None`, the value of [`CoreConfig.from_attributes`][pydantic_core.core_schema.CoreConfig] is used. context: The context to use for validation, this is passed to functional validators as [`info.context`][pydantic_core.core_schema.ValidationInfo.context]. by_alias: Whether to use the field's alias when validating against the provided input data. by_name: Whether to use the field's name when validating against the provided input data. Raises: ValidationError: If validation fails. Exception: Other error types maybe raised if internal errors occur. Returns: Either the model dict or a tuple of `(model_data, model_extra, fields_set)` """ def get_default_value(self, *, strict: bool | None = None, context: Any = None) -> Some | None: """ Get the default value for the schema, including running default value validation. Arguments: strict: Whether to validate the default value in strict mode. If `None`, the value of [`CoreConfig.strict`][pydantic_core.core_schema.CoreConfig] is used. context: The context to use for validation, this is passed to functional validators as [`info.context`][pydantic_core.core_schema.ValidationInfo.context]. Raises: ValidationError: If validation fails. Exception: Other error types maybe raised if internal errors occur. Returns: `None` if the schema has no default value, otherwise a [`Some`][pydantic_core.Some] containing the default. """ # In reality, `bool` should be replaced by `Literal[True]` but mypy fails to correctly apply bidirectional type inference # (e.g. when using `{'a': {'b': True}}`). _IncEx: TypeAlias = set[int] | set[str] | Mapping[int, _IncEx | bool] | Mapping[str, _IncEx | bool] @final class SchemaSerializer: """ `SchemaSerializer` is the Python wrapper for `pydantic-core`'s Rust serialization logic, internally it owns one `CombinedSerializer` which may in turn own more `CombinedSerializer`s which make up the full schema serializer. """ def __init__(self, schema: CoreSchema, config: CoreConfig | None = None, _use_prebuilt: bool = True) -> None: """Initializes the `SchemaSerializer`. Arguments: schema: The `CoreSchema` to use for serialization. config: Optionally a [`CoreConfig`][pydantic_core.core_schema.CoreConfig] to configure serialization. _use_prebuilt: Whether to use pre-built validators (False during rebuilds to avoid stale references). """ def __new__(cls, schema: CoreSchema, config: CoreConfig | None = None, _use_prebuilt: bool = True) -> Self: ... def to_python( self, value: Any, *, mode: str | None = None, include: _IncEx | None = None, exclude: _IncEx | None = None, by_alias: bool | None = None, exclude_unset: bool = False, exclude_defaults: bool = False, exclude_none: bool = False, exclude_computed_fields: bool = False, round_trip: bool = False, warnings: bool | Literal['none', 'warn', 'error'] = True, fallback: Callable[[Any], Any] | None = None, serialize_as_any: bool = False, polymorphic_serialization: bool | None = None, context: Any | None = None, ) -> Any: """ Serialize/marshal a Python object to a Python object including transforming and filtering data. Arguments: value: The Python object to serialize. mode: The serialization mode to use, either `'python'` or `'json'`, defaults to `'python'`. In JSON mode, all values are converted to JSON compatible types, e.g. `None`, `int`, `float`, `str`, `list`, `dict`. include: A set of fields to include, if `None` all fields are included. exclude: A set of fields to exclude, if `None` no fields are excluded. by_alias: Whether to use the alias names of fields. exclude_unset: Whether to exclude fields that are not set, e.g. are not included in `__pydantic_fields_set__`. exclude_defaults: Whether to exclude fields that are equal to their default value. exclude_none: Whether to exclude fields that have a value of `None`. exclude_computed_fields: Whether to exclude computed fields. round_trip: Whether to enable serialization and validation round-trip support. warnings: How to handle invalid fields. False/"none" ignores them, True/"warn" logs errors, "error" raises a [`PydanticSerializationError`][pydantic_core.PydanticSerializationError]. fallback: A function to call when an unknown value is encountered, if `None` a [`PydanticSerializationError`][pydantic_core.PydanticSerializationError] error is raised. serialize_as_any: Whether to serialize fields with duck-typing serialization behavior. polymorphic_serialization: Whether to use model and dataclass polymorphic serialization for this call. context: The context to use for serialization, this is passed to functional serializers as [`info.context`][pydantic_core.core_schema.SerializationInfo.context]. Raises: PydanticSerializationError: If serialization fails and no `fallback` function is provided. Returns: The serialized Python object. """ def to_json( self, value: Any, *, indent: int | None = None, ensure_ascii: bool = False, include: _IncEx | None = None, exclude: _IncEx | None = None, by_alias: bool | None = None, exclude_unset: bool = False, exclude_defaults: bool = False, exclude_none: bool = False, exclude_computed_fields: bool = False, round_trip: bool = False, warnings: bool | Literal['none', 'warn', 'error'] = True, fallback: Callable[[Any], Any] | None = None, serialize_as_any: bool = False, polymorphic_serialization: bool | None = None, context: Any | None = None, ) -> bytes: """ Serialize a Python object to JSON including transforming and filtering data. Arguments: value: The Python object to serialize. indent: If `None`, the JSON will be compact, otherwise it will be pretty-printed with the indent provided. ensure_ascii: If `True`, the output is guaranteed to have all incoming non-ASCII characters escaped. If `False` (the default), these characters will be output as-is. include: A set of fields to include, if `None` all fields are included. exclude: A set of fields to exclude, if `None` no fields are excluded. by_alias: Whether to use the alias names of fields. exclude_unset: Whether to exclude fields that are not set, e.g. are not included in `__pydantic_fields_set__`. exclude_defaults: Whether to exclude fields that are equal to their default value. exclude_none: Whether to exclude fields that have a value of `None`. exclude_computed_fields: Whether to exclude computed fields. round_trip: Whether to enable serialization and validation round-trip support. warnings: How to handle invalid fields. False/"none" ignores them, True/"warn" logs errors, "error" raises a [`PydanticSerializationError`][pydantic_core.PydanticSerializationError]. fallback: A function to call when an unknown value is encountered, if `None` a [`PydanticSerializationError`][pydantic_core.PydanticSerializationError] error is raised. serialize_as_any: Whether to serialize fields with duck-typing serialization behavior. polymorphic_serialization: Whether to use model and dataclass polymorphic serialization for this call. context: The context to use for serialization, this is passed to functional serializers as [`info.context`][pydantic_core.core_schema.SerializationInfo.context]. Raises: PydanticSerializationError: If serialization fails and no `fallback` function is provided. Returns: JSON bytes. """ def to_json( value: Any, *, indent: int | None = None, ensure_ascii: bool = False, include: _IncEx | None = None, exclude: _IncEx | None = None, # Note: In Pydantic 2.11, the default value of `by_alias` on `SchemaSerializer` was changed from `True` to `None`, # to be consistent with the Pydantic "dump" methods. However, the default of `True` was kept here for # backwards compatibility. In Pydantic V3, `by_alias` is expected to default to `True` everywhere: by_alias: bool = True, exclude_none: bool = False, round_trip: bool = False, timedelta_mode: Literal['iso8601', 'float'] = 'iso8601', temporal_mode: Literal['iso8601', 'seconds', 'milliseconds'] = 'iso8601', bytes_mode: Literal['utf8', 'base64', 'hex'] = 'utf8', inf_nan_mode: Literal['null', 'constants', 'strings'] = 'constants', serialize_unknown: bool = False, fallback: Callable[[Any], Any] | None = None, serialize_as_any: bool = False, polymorphic_serialization: bool | None = None, context: Any | None = None, ) -> bytes: """ Serialize a Python object to JSON including transforming and filtering data. This is effectively a standalone version of [`SchemaSerializer.to_json`][pydantic_core.SchemaSerializer.to_json]. Arguments: value: The Python object to serialize. indent: If `None`, the JSON will be compact, otherwise it will be pretty-printed with the indent provided. ensure_ascii: If `True`, the output is guaranteed to have all incoming non-ASCII characters escaped. If `False` (the default), these characters will be output as-is. include: A set of fields to include, if `None` all fields are included. exclude: A set of fields to exclude, if `None` no fields are excluded. by_alias: Whether to use the alias names of fields. exclude_none: Whether to exclude fields that have a value of `None`. round_trip: Whether to enable serialization and validation round-trip support. timedelta_mode: The format of serialized timedeltas. Accepts the string values of `'iso8601'` and `'float'`. - `'iso8601'` will serialize timedeltas to [ISO 8601 text format](https://en.wikipedia.org/wiki/ISO_8601#Durations). - `'float'` will serialize timedeltas to the total number of seconds. /// version-changed | v2.12 It is now recommended to use the `temporal_mode` argument. `timedelta_mode` will be deprecated in v3. /// temporal_mode: The format of serialized temporal types from the [`datetime`][] module. This includes: - [`datetime.datetime`][] - [`datetime.date`][] - [`datetime.time`][] - [`datetime.timedelta`][] Can be one of: - `'iso8601'` will serialize date-like types to [ISO 8601 text format](https://en.wikipedia.org/wiki/ISO_8601#Durations). - `'milliseconds'` will serialize date-like types to a floating point number of milliseconds since the epoch. - `'seconds'` will serialize date-like types to a floating point number of seconds since the epoch. /// version-added | v2.12 This argument replaces `timedelta_mode`, which will be deprecated in v3. `temporal_mode` adds more configurability for the other temporal types. It takes precedence over `timedelta_mode`. /// bytes_mode: How to serialize `bytes` objects, either `'utf8'`, `'base64'`, or `'hex'`. inf_nan_mode: How to serialize `Infinity`, `-Infinity` and `NaN` values, either `'null'`, `'constants'`, or `'strings'`. serialize_unknown: Attempt to serialize unknown types, `str(value)` will be used, if that fails `""` will be used. fallback: A function to call when an unknown value is encountered, if `None` a [`PydanticSerializationError`][pydantic_core.PydanticSerializationError] error is raised. serialize_as_any: Whether to serialize fields with duck-typing serialization behavior. polymorphic_serialization: Whether to use model and dataclass polymorphic serialization for this call. context: The context to use for serialization, this is passed to functional serializers as [`info.context`][pydantic_core.core_schema.SerializationInfo.context]. Raises: PydanticSerializationError: If serialization fails and no `fallback` function is provided. Returns: JSON bytes. """ def from_json( data: str | bytes | bytearray, *, allow_inf_nan: bool = True, cache_strings: bool | Literal['all', 'keys', 'none'] = True, allow_partial: bool | Literal['off', 'on', 'trailing-strings'] = False, ) -> Any: """ Deserialize JSON data to a Python object. This is effectively a faster version of `json.loads()`, with some extra functionality. Arguments: data: The JSON data to deserialize. allow_inf_nan: Whether to allow `Infinity`, `-Infinity` and `NaN` values as `json.loads()` does by default. cache_strings: Whether to cache strings to avoid constructing new Python objects, this should have a significant impact on performance while increasing memory usage slightly, `all/True` means cache all strings, `keys` means cache only dict keys, `none/False` means no caching. allow_partial: Whether to allow partial deserialization, if `True` JSON data is returned if the end of the input is reached before the full object is deserialized, e.g. `["aa", "bb", "c` would return `['aa', 'bb']`. `'trailing-strings'` means any final unfinished JSON string is included in the result. Raises: ValueError: If deserialization fails. Returns: The deserialized Python object. """ def to_jsonable_python( value: Any, *, include: _IncEx | None = None, exclude: _IncEx | None = None, # Note: In Pydantic 2.11, the default value of `by_alias` on `SchemaSerializer` was changed from `True` to `None`, # to be consistent with the Pydantic "dump" methods. However, the default of `True` was kept here for # backwards compatibility. In Pydantic V3, `by_alias` is expected to default to `True` everywhere: by_alias: bool = True, exclude_none: bool = False, round_trip: bool = False, timedelta_mode: Literal['iso8601', 'float'] = 'iso8601', temporal_mode: Literal['iso8601', 'seconds', 'milliseconds'] = 'iso8601', bytes_mode: Literal['utf8', 'base64', 'hex'] = 'utf8', inf_nan_mode: Literal['null', 'constants', 'strings'] = 'constants', serialize_unknown: bool = False, fallback: Callable[[Any], Any] | None = None, serialize_as_any: bool = False, polymorphic_serialization: bool | None = None, context: Any | None = None, ) -> Any: """ Serialize/marshal a Python object to a JSON-serializable Python object including transforming and filtering data. This is effectively a standalone version of [`SchemaSerializer.to_python(mode='json')`][pydantic_core.SchemaSerializer.to_python]. Args: value: The Python object to serialize. include: A set of fields to include, if `None` all fields are included. exclude: A set of fields to exclude, if `None` no fields are excluded. by_alias: Whether to use the alias names of fields. exclude_none: Whether to exclude fields that have a value of `None`. round_trip: Whether to enable serialization and validation round-trip support. timedelta_mode: The format of serialized timedeltas. Accepts the string values of `'iso8601'` and `'float'`. - `'iso8601'` will serialize timedeltas to [ISO 8601 text format](https://en.wikipedia.org/wiki/ISO_8601#Durations). - `'float'` will serialize timedeltas to the total number of seconds. /// version-changed | v2.12 It is now recommended to use the `temporal_mode` argument. `timedelta_mode` will be deprecated in v3. /// temporal_mode: The format of serialized temporal types from the [`datetime`][] module. This includes: - [`datetime.datetime`][] - [`datetime.date`][] - [`datetime.time`][] - [`datetime.timedelta`][] Can be one of: - `'iso8601'` will serialize date-like types to [ISO 8601 text format](https://en.wikipedia.org/wiki/ISO_8601#Durations). - `'milliseconds'` will serialize date-like types to a floating point number of milliseconds since the epoch. - `'seconds'` will serialize date-like types to a floating point number of seconds since the epoch. /// version-added | v2.12 This argument replaces `timedelta_mode`, which will be deprecated in v3. `temporal_mode` adds more configurability for the other temporal types. It takes precedence over `timedelta_mode`. /// bytes_mode: How to serialize `bytes` objects, either `'utf8'`, `'base64'`, or `'hex'`. inf_nan_mode: How to serialize `Infinity`, `-Infinity` and `NaN` values, either `'null'`, `'constants'`, or `'strings'`. serialize_unknown: Attempt to serialize unknown types, `str(value)` will be used, if that fails `""` will be used. fallback: A function to call when an unknown value is encountered, if `None` a [`PydanticSerializationError`][pydantic_core.PydanticSerializationError] error is raised. serialize_as_any: Whether to serialize fields with duck-typing serialization behavior. polymorphic_serialization: Whether to use model and dataclass polymorphic serialization for this call. context: The context to use for serialization, this is passed to functional serializers as [`info.context`][pydantic_core.core_schema.SerializationInfo.context]. Raises: PydanticSerializationError: If serialization fails and no `fallback` function is provided. Returns: The serialized Python object. """ class Url(SupportsAllComparisons): """ A URL type, internal logic uses the [url rust crate](https://docs.rs/url/latest/url/) originally developed by Mozilla. """ def __init__(self, url: str) -> None: ... def __new__(cls, url: str) -> Self: ... @property def scheme(self) -> str: ... @property def username(self) -> str | None: ... @property def password(self) -> str | None: ... @property def host(self) -> str | None: ... def unicode_host(self) -> str | None: ... @property def port(self) -> int | None: ... @property def path(self) -> str | None: ... @property def query(self) -> str | None: ... def query_params(self) -> list[tuple[str, str]]: ... @property def fragment(self) -> str | None: ... def unicode_string(self) -> str: ... def __repr__(self) -> str: ... def __str__(self) -> str: ... def __deepcopy__(self, memo: dict) -> str: ... @classmethod def build( cls, *, scheme: str, username: str | None = None, password: str | None = None, host: str, port: int | None = None, path: str | None = None, query: str | None = None, fragment: str | None = None, ) -> Self: ... class MultiHostUrl(SupportsAllComparisons): """ A URL type with support for multiple hosts, as used by some databases for DSNs, e.g. `https://foo.com,bar.com/path`. Internal URL logic uses the [url rust crate](https://docs.rs/url/latest/url/) originally developed by Mozilla. """ def __init__(self, url: str) -> None: ... def __new__(cls, url: str) -> Self: ... @property def scheme(self) -> str: ... @property def path(self) -> str | None: ... @property def query(self) -> str | None: ... def query_params(self) -> list[tuple[str, str]]: ... @property def fragment(self) -> str | None: ... def hosts(self) -> list[MultiHostHost]: ... def unicode_string(self) -> str: ... def __repr__(self) -> str: ... def __str__(self) -> str: ... def __deepcopy__(self, memo: dict) -> Self: ... @classmethod @overload def build( cls, *, scheme: str, hosts: list[MultiHostHost], username: None = None, password: None = None, host: None = None, port: None = None, path: str | None = None, query: str | None = None, fragment: str | None = None, ) -> Self: ... @classmethod @overload def build( cls, *, scheme: str, hosts: None = None, host: str, username: str | None = None, password: str | None = None, port: int | None = None, path: str | None = None, query: str | None = None, fragment: str | None = None, ) -> Self: ... @final class SchemaError(Exception): """ Information about errors that occur while building a [`SchemaValidator`][pydantic_core.SchemaValidator] or [`SchemaSerializer`][pydantic_core.SchemaSerializer]. """ def error_count(self) -> int: """ Returns: The number of errors in the schema. """ def errors(self) -> list[ErrorDetails]: """ Returns: A list of [`ErrorDetails`][pydantic_core.ErrorDetails] for each error in the schema. """ class ValidationError(ValueError): """ `ValidationError` is the exception raised by `pydantic-core` when validation fails, it contains a list of errors which detail why validation failed. """ @classmethod def from_exception_data( cls, title: str, line_errors: list[InitErrorDetails], input_type: Literal['python', 'json'] = 'python', hide_input: bool = False, ) -> Self: """ Python constructor for a Validation Error. Arguments: title: The title of the error, as used in the heading of `str(validation_error)` line_errors: A list of [`InitErrorDetails`][pydantic_core.InitErrorDetails] which contain information about errors that occurred during validation. input_type: Whether the error is for a Python object or JSON. hide_input: Whether to hide the input value in the error message. """ @property def title(self) -> str: """ The title of the error, as used in the heading of `str(validation_error)`. """ def error_count(self) -> int: """ Returns: The number of errors in the validation error. """ def errors( self, *, include_url: bool = True, include_context: bool = True, include_input: bool = True ) -> list[ErrorDetails]: """ Details about each error in the validation error. Args: include_url: Whether to include a URL to documentation on the error each error. include_context: Whether to include the context of each error. include_input: Whether to include the input value of each error. Returns: A list of [`ErrorDetails`][pydantic_core.ErrorDetails] for each error in the validation error. """ def json( self, *, indent: int | None = None, include_url: bool = True, include_context: bool = True, include_input: bool = True, ) -> str: """ Same as [`errors()`][pydantic_core.ValidationError.errors] but returns a JSON string. Args: indent: The number of spaces to indent the JSON by, or `None` for no indentation - compact JSON. include_url: Whether to include a URL to documentation on the error each error. include_context: Whether to include the context of each error. include_input: Whether to include the input value of each error. Returns: a JSON string. """ def __repr__(self) -> str: """ A string representation of the validation error. Whether or not documentation URLs are included in the repr is controlled by the environment variable `PYDANTIC_ERRORS_INCLUDE_URL` being set to `1` or `true`; by default, URLs are shown. Due to implementation details, this environment variable can only be set once, before the first validation error is created. """ class PydanticCustomError(ValueError): """A custom exception providing flexible error handling for Pydantic validators. You can raise this error in custom validators when you'd like flexibility in regards to the error type, message, and context. Example: ```py from pydantic_core import PydanticCustomError def custom_validator(v) -> None: if v <= 10: raise PydanticCustomError('custom_value_error', 'Value must be greater than {value}', {'value': 10, 'extra_context': 'extra_data'}) return v ``` Arguments: error_type: The error type. message_template: The message template. context: The data to inject into the message template. """ def __init__( self, error_type: LiteralString, message_template: LiteralString, context: dict[str, Any] | None = None, / ) -> None: ... @property def context(self) -> dict[str, Any] | None: """Values which are required to render the error message, and could hence be useful in passing error data forward.""" @property def type(self) -> str: """The error type associated with the error. For consistency with Pydantic, this is typically a snake_case string.""" @property def message_template(self) -> str: """The message template associated with the error. This is a string that can be formatted with context variables in `{curly_braces}`.""" def message(self) -> str: """The formatted message associated with the error. This presents as the message template with context variables appropriately injected.""" @final class PydanticKnownError(ValueError): """A helper class for raising exceptions that mimic Pydantic's built-in exceptions, with more flexibility in regards to context. Unlike [`PydanticCustomError`][pydantic_core.PydanticCustomError], the `error_type` argument must be a known `ErrorType`. Example: ```py from pydantic_core import PydanticKnownError def custom_validator(v) -> None: if v <= 10: raise PydanticKnownError('greater_than', {'gt': 10}) return v ``` Arguments: error_type: The error type. context: The data to inject into the message template. """ def __init__(self, error_type: ErrorType, context: dict[str, Any] | None = None, /) -> None: ... @property def context(self) -> dict[str, Any] | None: """Values which are required to render the error message, and could hence be useful in passing error data forward.""" @property def type(self) -> ErrorType: """The type of the error.""" @property def message_template(self) -> str: """The message template associated with the provided error type. This is a string that can be formatted with context variables in `{curly_braces}`.""" def message(self) -> str: """The formatted message associated with the error. This presents as the message template with context variables appropriately injected.""" @final class PydanticOmit(Exception): """An exception to signal that a field should be omitted from a generated result. This could span from omitting a field from a JSON Schema to omitting a field from a serialized result. Upcoming: more robust support for using PydanticOmit in custom serializers is still in development. Right now, this is primarily used in the JSON Schema generation process. Example: ```py from typing import Callable from pydantic_core import PydanticOmit from pydantic import BaseModel from pydantic.json_schema import GenerateJsonSchema, JsonSchemaValue class MyGenerateJsonSchema(GenerateJsonSchema): def handle_invalid_for_json_schema(self, schema, error_info) -> JsonSchemaValue: raise PydanticOmit class Predicate(BaseModel): name: str = 'no-op' func: Callable = lambda x: x instance_example = Predicate() validation_schema = instance_example.model_json_schema(schema_generator=MyGenerateJsonSchema, mode='validation') print(validation_schema) ''' {'properties': {'name': {'default': 'no-op', 'title': 'Name', 'type': 'string'}}, 'title': 'Predicate', 'type': 'object'} ''' ``` For a more in depth example / explanation, see the [customizing JSON schema](../concepts/json_schema.md#customizing-the-json-schema-generation-process) docs. """ def __new__(cls) -> Self: ... @final class PydanticUseDefault(Exception): """An exception to signal that standard validation either failed or should be skipped, and the default value should be used instead. This warning can be raised in custom validation functions to redirect the flow of validation. Example: ```py from pydantic_core import PydanticUseDefault from datetime import datetime from pydantic import BaseModel, field_validator class Event(BaseModel): name: str = 'meeting' time: datetime @field_validator('name', mode='plain') def name_must_be_present(cls, v) -> str: if not v or not isinstance(v, str): raise PydanticUseDefault() return v event1 = Event(name='party', time=datetime(2024, 1, 1, 12, 0, 0)) print(repr(event1)) # > Event(name='party', time=datetime.datetime(2024, 1, 1, 12, 0)) event2 = Event(time=datetime(2024, 1, 1, 12, 0, 0)) print(repr(event2)) # > Event(name='meeting', time=datetime.datetime(2024, 1, 1, 12, 0)) ``` For an additional example, see the [validating partial json data](../concepts/json.md#partial-json-parsing) section of the Pydantic documentation. """ def __new__(cls) -> Self: ... @final class PydanticSerializationError(ValueError): """An error raised when an issue occurs during serialization. In custom serializers, this error can be used to indicate that serialization has failed. Arguments: message: The message associated with the error. """ def __init__(self, message: str, /) -> None: ... @final class PydanticSerializationUnexpectedValue(ValueError): """An error raised when an unexpected value is encountered during serialization. This error is often caught and coerced into a warning, as `pydantic-core` generally makes a best attempt at serializing values, in contrast with validation where errors are eagerly raised. Example: ```py from pydantic import BaseModel, field_serializer from pydantic_core import PydanticSerializationUnexpectedValue class BasicPoint(BaseModel): x: int y: int @field_serializer('*') def serialize(self, v): if not isinstance(v, int): raise PydanticSerializationUnexpectedValue(f'Expected type `int`, got {type(v)} with value {v}') return v point = BasicPoint(x=1, y=2) # some sort of mutation point.x = 'a' print(point.model_dump()) ''' UserWarning: Pydantic serializer warnings: PydanticSerializationUnexpectedValue(Expected type `int`, got with value a) return self.__pydantic_serializer__.to_python( {'x': 'a', 'y': 2} ''' ``` This is often used internally in `pydantic-core` when unexpected types are encountered during serialization, but it can also be used by users in custom serializers, as seen above. Arguments: message: The message associated with the unexpected value. """ def __init__(self, message: str, /) -> None: ... @final class ArgsKwargs: """A construct used to store arguments and keyword arguments for a function call. This data structure is generally used to store information for core schemas associated with functions (like in an arguments schema). This data structure is also currently used for some validation against dataclasses. Example: ```py from pydantic.dataclasses import dataclass from pydantic import model_validator @dataclass class Model: a: int b: int @model_validator(mode="before") @classmethod def no_op_validator(cls, values): print(values) return values Model(1, b=2) #> ArgsKwargs((1,), {"b": 2}) Model(1, 2) #> ArgsKwargs((1, 2), {}) Model(a=1, b=2) #> ArgsKwargs((), {"a": 1, "b": 2}) ``` """ def __init__(self, args: tuple[Any, ...], kwargs: dict[str, Any] | None = None) -> None: """Initializes the `ArgsKwargs`. Arguments: args: The arguments (inherently ordered) for a function call. kwargs: The keyword arguments for a function call """ def __new__(cls, args: tuple[Any, ...], kwargs: dict[str, Any] | None = None) -> Self: ... @property def args(self) -> tuple[Any, ...]: """The arguments (inherently ordered) for a function call.""" @property def kwargs(self) -> dict[str, Any] | None: """The keyword arguments for a function call.""" @final class PydanticUndefinedType: """A type used as a sentinel for undefined values.""" def __copy__(self) -> Self: ... def __deepcopy__(self, memo: Any) -> Self: ... PydanticUndefined: PydanticUndefinedType def list_all_errors() -> list[ErrorTypeInfo]: """ Get information about all built-in errors. Returns: A list of `ErrorTypeInfo` typed dicts. """ @final class TzInfo(datetime.tzinfo): """An `pydantic-core` implementation of the abstract [`datetime.tzinfo`][] class.""" def __init__(self, seconds: float = 0.0) -> None: """Initializes the `TzInfo`. Arguments: seconds: The offset from UTC in seconds. Defaults to 0.0 (UTC). """ def __new__(cls, seconds: float = 0.0) -> Self: ... # Docstrings for attributes sourced from the abstract base class, [`datetime.tzinfo`](https://docs.python.org/3/library/datetime.html#datetime.tzinfo). def tzname(self, dt: datetime.datetime | None) -> str | None: """Return the time zone name corresponding to the [`datetime`][datetime.datetime] object _dt_, as a string. For more info, see [`tzinfo.tzname`][datetime.tzinfo.tzname]. """ def utcoffset(self, dt: datetime.datetime | None) -> datetime.timedelta | None: """Return offset of local time from UTC, as a [`timedelta`][datetime.timedelta] object that is positive east of UTC. If local time is west of UTC, this should be negative. More info can be found at [`tzinfo.utcoffset`][datetime.tzinfo.utcoffset]. """ def dst(self, dt: datetime.datetime | None) -> datetime.timedelta | None: """Return the daylight saving time (DST) adjustment, as a [`timedelta`][datetime.timedelta] object or `None` if DST information isn’t known. More info can be found at[`tzinfo.dst`][datetime.tzinfo.dst].""" def fromutc(self, dt: datetime.datetime) -> datetime.datetime: """Adjust the date and time data associated datetime object _dt_, returning an equivalent datetime in self’s local time. More info can be found at [`tzinfo.fromutc`][datetime.tzinfo.fromutc].""" def __deepcopy__(self, _memo: dict[Any, Any]) -> TzInfo: ... pydantic-pydantic-e28e879/pydantic-core/python/pydantic_core/_pydantic_core/_schema_gather.pyi000066400000000000000000000031551526274674700331060ustar00rootroot00000000000000from typing import final from pydantic_core.core_schema import CoreSchema, DefinitionReferenceSchema __all__ = ['MissingDefinitionError', 'gather_schemas_for_cleaning'] @final class MissingDefinitionError(LookupError): """A reference was pointing to a non-existing core schema.""" def __init__(self, schema_reference: str, /) -> None: ... @property def schema_reference(self) -> str: ... def gather_schemas_for_cleaning( schema: CoreSchema, definitions: dict[str, CoreSchema] ) -> tuple[dict[str, DefinitionReferenceSchema | None], list[CoreSchema]]: """Traverse the core schema and definitions and return the necessary information for schema cleaning. During the core schema traversing, any `'definition-ref'` schema is: - Validated: the reference must point to an existing definition. If this is not the case, a `MissingDefinitionError` exception is raised. - Stored in the context: the actual reference is stored in the context. Depending on whether the `'definition-ref'` schema is encountered more than once, the schema itself is also saved in the context to be inlined (i.e. replaced by the definition it points to). Returns a `(collected_references, deferred_discriminator_schemas)` tuple: - `collected_references`: the collected definition references. If a definition reference schema can be inlined, it means that there is only one in the whole core schema. As such, it is stored as the value. Otherwise, the value is set to `None`. - `deferred_discriminator_schemas`: the list of core schemas having the discriminator application deferred. """ pydantic-pydantic-e28e879/pydantic-core/python/pydantic_core/core_schema.py000066400000000000000000005273161526274674700273040ustar00rootroot00000000000000""" This module contains definitions to build schemas which `pydantic_core` can validate and serialize. """ from __future__ import annotations as _annotations import sys import warnings from collections.abc import Callable, Generator, Mapping from datetime import date, datetime, time, timedelta from decimal import Decimal from fractions import Fraction from re import Pattern from typing import TYPE_CHECKING, Any, Literal, Union, overload from typing_extensions import TypeVar, deprecated if sys.version_info < (3, 12): from typing_extensions import TypedDict else: from typing import TypedDict if sys.version_info < (3, 11): from typing import TypeAlias from typing_extensions import Protocol, Required else: from typing import Protocol, Required, TypeAlias if TYPE_CHECKING: from pydantic_core import PydanticUndefined else: # The initial build of pydantic_core requires PydanticUndefined to generate # the core schema; so we need to conditionally skip it. mypy doesn't like # this at all, hence the TYPE_CHECKING branch above. try: from pydantic_core import PydanticUndefined except ImportError: PydanticUndefined = object() ExtraBehavior: TypeAlias = Literal['allow', 'forbid', 'ignore'] class CoreConfig(TypedDict, total=False): """ Base class for schema configuration options. Attributes: title: The name of the configuration. strict: Whether the configuration should strictly adhere to specified rules. extra_fields_behavior: The behavior for handling extra fields. typed_dict_total: Whether the TypedDict should be considered total. Default is `True`. from_attributes: Whether to use attributes for models, dataclasses, and tagged union keys. loc_by_alias: Whether to use the used alias (or first alias for "field required" errors) instead of `field_names` to construct error `loc`s. Default is `True`. revalidate_instances: Whether instances of models and dataclasses should re-validate. Default is 'never'. validate_default: Whether to validate default values during validation. Default is `False`. str_max_length: The maximum length for string fields. str_min_length: The minimum length for string fields. str_strip_whitespace: Whether to strip whitespace from string fields. str_to_lower: Whether to convert string fields to lowercase. str_to_upper: Whether to convert string fields to uppercase. allow_inf_nan: Whether to allow infinity and NaN values for float fields. Default is `True`. ser_json_timedelta: The serialization option for `timedelta` values. Default is 'iso8601'. Note that if ser_json_temporal is set, then this param will be ignored. ser_json_temporal: The serialization option for datetime like values. Default is 'iso8601'. The types this covers are datetime, date, time and timedelta. If this is set, it will take precedence over ser_json_timedelta ser_json_bytes: The serialization option for `bytes` values. Default is 'utf8'. ser_json_inf_nan: The serialization option for infinity and NaN values in float fields. Default is 'null'. val_json_bytes: The validation option for `bytes` values, complementing ser_json_bytes. Default is 'utf8'. hide_input_in_errors: Whether to hide input data from `ValidationError` representation. validation_error_cause: Whether to add user-python excs to the __cause__ of a ValidationError. Requires exceptiongroup backport pre Python 3.11. coerce_numbers_to_str: Whether to enable coercion of any `Number` type to `str` (not applicable in `strict` mode). regex_engine: The regex engine to use for regex pattern validation. Default is 'rust-regex'. See `StringSchema`. cache_strings: Whether to cache strings. Default is `True`, `True` or `'all'` is required to cache strings during general validation since validators don't know if they're in a key or a value. validate_by_alias: Whether to use the field's alias when validating against the provided input data. Default is `True`. validate_by_name: Whether to use the field's name when validating against the provided input data. Default is `False`. Replacement for `populate_by_name`. serialize_by_alias: Whether to serialize by alias. Default is `False`, expected to change to `True` in V3. polymorphic_serialization: Whether to enable polymorphic serialization for models and dataclasses. Default is `False`. url_preserve_empty_path: Whether to preserve empty URL paths when validating values for a URL type. Defaults to `False`. """ title: str strict: bool # settings related to typed dicts, model fields, dataclass fields extra_fields_behavior: ExtraBehavior typed_dict_total: bool # default: True # used for models, dataclasses, and tagged union keys from_attributes: bool # whether to use the used alias (or first alias for "field required" errors) instead of field_names # to construct error `loc`s, default True loc_by_alias: bool # whether instances of models and dataclasses (including subclass instances) should re-validate, default 'never' revalidate_instances: Literal['always', 'never', 'subclass-instances'] # whether to validate default values during validation, default False validate_default: bool # used on typed-dicts and arguments # fields related to string fields only str_max_length: int str_min_length: int str_strip_whitespace: bool str_to_lower: bool str_to_upper: bool # fields related to float fields only allow_inf_nan: bool # default: True # the config options are used to customise serialization to JSON ser_json_timedelta: Literal['iso8601', 'float'] # default: 'iso8601' ser_json_temporal: Literal['iso8601', 'seconds', 'milliseconds'] # default: 'iso8601' ser_json_bytes: Literal['utf8', 'base64', 'hex'] # default: 'utf8' ser_json_inf_nan: Literal['null', 'constants', 'strings'] # default: 'null' val_json_bytes: Literal['utf8', 'base64', 'hex'] # default: 'utf8' # used to hide input data from ValidationError repr hide_input_in_errors: bool validation_error_cause: bool # default: False coerce_numbers_to_str: bool # default: False regex_engine: Literal['rust-regex', 'python-re'] # default: 'rust-regex' cache_strings: bool | Literal['all', 'keys', 'none'] # default: 'True' validate_by_alias: bool # default: True validate_by_name: bool # default: False serialize_by_alias: bool # default: False polymorphic_serialization: bool # default: False url_preserve_empty_path: bool # default: False IncExCall: TypeAlias = 'set[int | str] | dict[int | str, IncExCall] | None' ContextT = TypeVar('ContextT', covariant=True, default='Any | None') class SerializationInfo(Protocol[ContextT]): """Extra data used during serialization.""" @property def include(self) -> IncExCall: """The `include` argument set during serialization.""" ... @property def exclude(self) -> IncExCall: """The `exclude` argument set during serialization.""" ... @property def context(self) -> ContextT: """The current serialization context.""" ... @property def mode(self) -> Literal['python', 'json'] | str: """The serialization mode set during serialization.""" ... @property def by_alias(self) -> bool: """The `by_alias` argument set during serialization.""" ... @property def exclude_unset(self) -> bool: """The `exclude_unset` argument set during serialization.""" ... @property def exclude_defaults(self) -> bool: """The `exclude_defaults` argument set during serialization.""" ... @property def exclude_none(self) -> bool: """The `exclude_none` argument set during serialization.""" ... @property def exclude_computed_fields(self) -> bool: """The `exclude_computed_fields` argument set during serialization.""" ... @property def serialize_as_any(self) -> bool: """The `serialize_as_any` argument set during serialization.""" ... @property def polymorphic_serialization(self) -> bool | None: """The `polymorphic_serialization` argument set during serialization, if any.""" ... @property def round_trip(self) -> bool: """The `round_trip` argument set during serialization.""" ... def mode_is_json(self) -> bool: ... def __str__(self) -> str: ... def __repr__(self) -> str: ... class FieldSerializationInfo(SerializationInfo[ContextT], Protocol): """Extra data used during field serialization.""" @property def field_name(self) -> str: """The name of the current field being serialized.""" ... class ValidationInfo(Protocol[ContextT]): """Extra data used during validation.""" @property def context(self) -> ContextT: """The current validation context.""" ... @property def config(self) -> CoreConfig | None: """The CoreConfig that applies to this validation.""" ... @property def mode(self) -> Literal['python', 'json']: """The type of input data we are currently validating.""" ... @property def data(self) -> dict[str, Any]: """The data being validated for this model.""" ... @property def field_name(self) -> str | None: """ The name of the current field being validated if this validator is attached to a model field. """ ... ExpectedSerializationTypes: TypeAlias = Literal[ 'none', 'int', 'bool', 'float', 'str', 'bytes', 'bytearray', 'list', 'deque', 'tuple', 'set', 'frozenset', 'generator', 'dict', 'frozendict', 'ordered-dict', 'counter', 'datetime', 'date', 'time', 'timedelta', 'url', 'multi-host-url', 'json', 'uuid', 'any', ] class SimpleSerSchema(TypedDict, total=False): type: Required[ExpectedSerializationTypes] def simple_ser_schema(type: ExpectedSerializationTypes) -> SimpleSerSchema: """ Returns a schema for serialization with a custom type. Note that any core schema can be used as a serialization schema, e.g. `int_schema()` is equivalent to `simple_ser_schema('int')`. Args: type: The type to use for serialization """ return SimpleSerSchema(type=type) # (input_value: Any, /) -> Any GeneralPlainNoInfoSerializerFunction: TypeAlias = Callable[[Any], Any] # (input_value: Any, info: FieldSerializationInfo, /) -> Any GeneralPlainInfoSerializerFunction: TypeAlias = Callable[[Any, SerializationInfo[Any]], Any] # (model: Any, input_value: Any, /) -> Any FieldPlainNoInfoSerializerFunction: TypeAlias = Callable[[Any, Any], Any] # (model: Any, input_value: Any, info: FieldSerializationInfo, /) -> Any FieldPlainInfoSerializerFunction: TypeAlias = Callable[[Any, Any, FieldSerializationInfo[Any]], Any] SerializerFunction: TypeAlias = ( GeneralPlainNoInfoSerializerFunction | GeneralPlainInfoSerializerFunction | FieldPlainNoInfoSerializerFunction | FieldPlainInfoSerializerFunction ) WhenUsed: TypeAlias = Literal['always', 'unless-none', 'json', 'json-unless-none'] """ Values have the following meanings: * `'always'` means always use * `'unless-none'` means use unless the value is `None` * `'json'` means use when serializing to JSON * `'json-unless-none'` means use when serializing to JSON and the value is not `None` """ class PlainSerializerFunctionSerSchema(TypedDict, total=False): type: Required[Literal['function-plain']] function: Required[SerializerFunction] is_field_serializer: bool # default False info_arg: bool # default False return_schema: CoreSchema # if omitted, AnySchema is used when_used: WhenUsed # default: 'always' def plain_serializer_function_ser_schema( function: SerializerFunction, *, is_field_serializer: bool | None = None, info_arg: bool | None = None, return_schema: CoreSchema | None = None, when_used: WhenUsed = 'always', ) -> PlainSerializerFunctionSerSchema: """ Returns a schema for serialization with a function, can be either a "general" or "field" function. Args: function: The function to use for serialization is_field_serializer: Whether the serializer is for a field, e.g. takes `model` as the first argument, and `info` includes `field_name` info_arg: Whether the function takes an `info` argument return_schema: Schema to use for serializing return value when_used: When the function should be called """ if when_used == 'always': # just to avoid extra elements in schema, and to use the actual default defined in rust when_used = None # type: ignore return _dict_not_none( type='function-plain', function=function, is_field_serializer=is_field_serializer, info_arg=info_arg, return_schema=return_schema, when_used=when_used, ) class SerializerFunctionWrapHandler(Protocol): # pragma: no cover def __call__(self, input_value: Any, index_key: int | str | None = None, /) -> Any: ... # (input_value: Any, serializer: SerializerFunctionWrapHandler, /) -> Any GeneralWrapNoInfoSerializerFunction: TypeAlias = Callable[[Any, SerializerFunctionWrapHandler], Any] # (input_value: Any, serializer: SerializerFunctionWrapHandler, info: SerializationInfo, /) -> Any GeneralWrapInfoSerializerFunction: TypeAlias = Callable[ [Any, SerializerFunctionWrapHandler, SerializationInfo[Any]], Any ] # (model: Any, input_value: Any, serializer: SerializerFunctionWrapHandler, /) -> Any FieldWrapNoInfoSerializerFunction: TypeAlias = Callable[[Any, Any, SerializerFunctionWrapHandler], Any] # (model: Any, input_value: Any, serializer: SerializerFunctionWrapHandler, info: FieldSerializationInfo, /) -> Any FieldWrapInfoSerializerFunction: TypeAlias = Callable[ [Any, Any, SerializerFunctionWrapHandler, FieldSerializationInfo[Any]], Any ] WrapSerializerFunction: TypeAlias = ( GeneralWrapNoInfoSerializerFunction | GeneralWrapInfoSerializerFunction | FieldWrapNoInfoSerializerFunction | FieldWrapInfoSerializerFunction ) class WrapSerializerFunctionSerSchema(TypedDict, total=False): type: Required[Literal['function-wrap']] function: Required[WrapSerializerFunction] is_field_serializer: bool # default False info_arg: bool # default False schema: CoreSchema # if omitted, the schema on which this serializer is defined is used return_schema: CoreSchema # if omitted, AnySchema is used when_used: WhenUsed # default: 'always' def wrap_serializer_function_ser_schema( function: WrapSerializerFunction, *, is_field_serializer: bool | None = None, info_arg: bool | None = None, schema: CoreSchema | None = None, return_schema: CoreSchema | None = None, when_used: WhenUsed = 'always', ) -> WrapSerializerFunctionSerSchema: """ Returns a schema for serialization with a wrap function, can be either a "general" or "field" function. Args: function: The function to use for serialization is_field_serializer: Whether the serializer is for a field, e.g. takes `model` as the first argument, and `info` includes `field_name` info_arg: Whether the function takes an `info` argument schema: The schema to use for the inner serialization return_schema: Schema to use for serializing return value when_used: When the function should be called """ if when_used == 'always': # just to avoid extra elements in schema, and to use the actual default defined in rust when_used = None # type: ignore return _dict_not_none( type='function-wrap', function=function, is_field_serializer=is_field_serializer, info_arg=info_arg, schema=schema, return_schema=return_schema, when_used=when_used, ) class FormatSerSchema(TypedDict, total=False): type: Required[Literal['format']] formatting_string: Required[str] when_used: WhenUsed # default: 'json-unless-none' def format_ser_schema(formatting_string: str, *, when_used: WhenUsed = 'json-unless-none') -> FormatSerSchema: """ Returns a schema for serialization using python's `format` method. Args: formatting_string: String defining the format to use when_used: Same meaning as for [general_function_plain_ser_schema], but with a different default """ if when_used == 'json-unless-none': # just to avoid extra elements in schema, and to use the actual default defined in rust when_used = None # type: ignore return _dict_not_none(type='format', formatting_string=formatting_string, when_used=when_used) class ToStringSerSchema(TypedDict, total=False): type: Required[Literal['to-string']] when_used: WhenUsed # default: 'json-unless-none' def to_string_ser_schema(*, when_used: WhenUsed = 'json-unless-none') -> ToStringSerSchema: """ Returns a schema for serialization using python's `str()` / `__str__` method. Args: when_used: Same meaning as for [general_function_plain_ser_schema], but with a different default """ s = dict(type='to-string') if when_used != 'json-unless-none': # just to avoid extra elements in schema, and to use the actual default defined in rust s['when_used'] = when_used return s # type: ignore class ModelSerSchema(TypedDict, total=False): type: Required[Literal['model']] cls: Required[type[Any]] schema: Required[CoreSchema] def model_ser_schema(cls: type[Any], schema: CoreSchema) -> ModelSerSchema: """ Returns a schema for serialization using a model. Note that any core schema can be used as a serialization schema, e.g. `model_schema()` can be used instead. Args: cls: The expected class type, used to generate warnings if the wrong type is passed schema: Internal schema to use to serialize the model dict """ return ModelSerSchema(type='model', cls=cls, schema=schema) SerSchema: TypeAlias = 'SimpleSerSchema | PlainSerializerFunctionSerSchema | WrapSerializerFunctionSerSchema | FormatSerSchema | ToStringSerSchema | ModelSerSchema | CoreSchema' """The schemas that can be used as the `serialization` key of a core schema.""" class InvalidSchema(TypedDict, total=False): type: Required[Literal['invalid']] ref: str metadata: dict[str, Any] # note, we never plan to use this, but include it for type checking purposes to match # all other CoreSchema union members serialization: SerSchema def invalid_schema(ref: str | None = None, metadata: dict[str, Any] | None = None) -> InvalidSchema: """ Returns an invalid schema, used to indicate that a schema is invalid. Args: ref: optional unique identifier of the schema, used to reference the schema in other places metadata: Any other information you want to include with the schema, not used by pydantic-core """ return _dict_not_none(type='invalid', ref=ref, metadata=metadata) class ComputedField(TypedDict, total=False): type: Required[Literal['computed-field']] property_name: Required[str] return_schema: Required[CoreSchema] alias: str serialization_exclude_if: Callable[[Any], bool] metadata: dict[str, Any] def computed_field( property_name: str, return_schema: CoreSchema, *, alias: str | None = None, serialization_exclude_if: Callable[[Any], bool] | None = None, metadata: dict[str, Any] | None = None, ) -> ComputedField: """ ComputedFields are properties of a model or dataclass that are included in serialization. Args: property_name: The name of the property on the model or dataclass return_schema: The schema used for the type returned by the computed field alias: The name to use in the serialized output metadata: Any other information you want to include with the schema, not used by pydantic-core """ return _dict_not_none( type='computed-field', property_name=property_name, return_schema=return_schema, alias=alias, serialization_exclude_if=serialization_exclude_if, metadata=metadata, ) class AnySchema(TypedDict, total=False): type: Required[Literal['any']] ref: str metadata: dict[str, Any] serialization: SerSchema def any_schema( *, ref: str | None = None, metadata: dict[str, Any] | None = None, serialization: SerSchema | None = None ) -> AnySchema: """ Returns a schema that matches any value, e.g.: ```py from pydantic_core import SchemaValidator, core_schema schema = core_schema.any_schema() v = SchemaValidator(schema) assert v.validate_python(1) == 1 ``` Args: ref: optional unique identifier of the schema, used to reference the schema in other places metadata: Any other information you want to include with the schema, not used by pydantic-core serialization: Custom serialization schema """ return _dict_not_none(type='any', ref=ref, metadata=metadata, serialization=serialization) class NoneSchema(TypedDict, total=False): type: Required[Literal['none']] ref: str metadata: dict[str, Any] serialization: SerSchema def none_schema( *, ref: str | None = None, metadata: dict[str, Any] | None = None, serialization: SerSchema | None = None ) -> NoneSchema: """ Returns a schema that matches a None value, e.g.: ```py from pydantic_core import SchemaValidator, core_schema schema = core_schema.none_schema() v = SchemaValidator(schema) assert v.validate_python(None) is None ``` Args: ref: optional unique identifier of the schema, used to reference the schema in other places metadata: Any other information you want to include with the schema, not used by pydantic-core serialization: Custom serialization schema """ return _dict_not_none(type='none', ref=ref, metadata=metadata, serialization=serialization) class BoolSchema(TypedDict, total=False): type: Required[Literal['bool']] strict: bool ref: str metadata: dict[str, Any] serialization: SerSchema def bool_schema( strict: bool | None = None, ref: str | None = None, metadata: dict[str, Any] | None = None, serialization: SerSchema | None = None, ) -> BoolSchema: """ Returns a schema that matches a bool value, e.g.: ```py from pydantic_core import SchemaValidator, core_schema schema = core_schema.bool_schema() v = SchemaValidator(schema) assert v.validate_python('True') is True ``` Args: strict: Whether the value should be a bool or a value that can be converted to a bool ref: optional unique identifier of the schema, used to reference the schema in other places metadata: Any other information you want to include with the schema, not used by pydantic-core serialization: Custom serialization schema """ return _dict_not_none(type='bool', strict=strict, ref=ref, metadata=metadata, serialization=serialization) class IntSchema(TypedDict, total=False): type: Required[Literal['int']] multiple_of: int le: int ge: int lt: int gt: int strict: bool ref: str metadata: dict[str, Any] serialization: SerSchema def int_schema( *, multiple_of: int | None = None, le: int | None = None, ge: int | None = None, lt: int | None = None, gt: int | None = None, strict: bool | None = None, ref: str | None = None, metadata: dict[str, Any] | None = None, serialization: SerSchema | None = None, ) -> IntSchema: """ Returns a schema that matches a int value, e.g.: ```py from pydantic_core import SchemaValidator, core_schema schema = core_schema.int_schema(multiple_of=2, le=6, ge=2) v = SchemaValidator(schema) assert v.validate_python('4') == 4 ``` Args: multiple_of: The value must be a multiple of this number le: The value must be less than or equal to this number ge: The value must be greater than or equal to this number lt: The value must be strictly less than this number gt: The value must be strictly greater than this number strict: Whether the value should be a int or a value that can be converted to a int ref: optional unique identifier of the schema, used to reference the schema in other places metadata: Any other information you want to include with the schema, not used by pydantic-core serialization: Custom serialization schema """ return _dict_not_none( type='int', multiple_of=multiple_of, le=le, ge=ge, lt=lt, gt=gt, strict=strict, ref=ref, metadata=metadata, serialization=serialization, ) class FloatSchema(TypedDict, total=False): type: Required[Literal['float']] allow_inf_nan: bool # whether 'NaN', '+inf', '-inf' should be forbidden. default: True multiple_of: float le: float ge: float lt: float gt: float strict: bool ref: str metadata: dict[str, Any] serialization: SerSchema def float_schema( *, allow_inf_nan: bool | None = None, multiple_of: float | None = None, le: float | None = None, ge: float | None = None, lt: float | None = None, gt: float | None = None, strict: bool | None = None, ref: str | None = None, metadata: dict[str, Any] | None = None, serialization: SerSchema | None = None, ) -> FloatSchema: """ Returns a schema that matches a float value, e.g.: ```py from pydantic_core import SchemaValidator, core_schema schema = core_schema.float_schema(le=0.8, ge=0.2) v = SchemaValidator(schema) assert v.validate_python('0.5') == 0.5 ``` Args: allow_inf_nan: Whether to allow inf and nan values multiple_of: The value must be a multiple of this number le: The value must be less than or equal to this number ge: The value must be greater than or equal to this number lt: The value must be strictly less than this number gt: The value must be strictly greater than this number strict: Whether the value should be a float or a value that can be converted to a float ref: optional unique identifier of the schema, used to reference the schema in other places metadata: Any other information you want to include with the schema, not used by pydantic-core serialization: Custom serialization schema """ return _dict_not_none( type='float', allow_inf_nan=allow_inf_nan, multiple_of=multiple_of, le=le, ge=ge, lt=lt, gt=gt, strict=strict, ref=ref, metadata=metadata, serialization=serialization, ) class DecimalSchema(TypedDict, total=False): type: Required[Literal['decimal']] allow_inf_nan: bool # whether 'NaN', '+inf', '-inf' should be forbidden. default: False multiple_of: Decimal le: Decimal ge: Decimal lt: Decimal gt: Decimal max_digits: int decimal_places: int strict: bool ref: str metadata: dict[str, Any] serialization: SerSchema def decimal_schema( *, allow_inf_nan: bool | None = None, multiple_of: Decimal | None = None, le: Decimal | None = None, ge: Decimal | None = None, lt: Decimal | None = None, gt: Decimal | None = None, max_digits: int | None = None, decimal_places: int | None = None, strict: bool | None = None, ref: str | None = None, metadata: dict[str, Any] | None = None, serialization: SerSchema | None = None, ) -> DecimalSchema: """ Returns a schema that matches a decimal value, e.g.: ```py from decimal import Decimal from pydantic_core import SchemaValidator, core_schema schema = core_schema.decimal_schema(le=0.8, ge=0.2) v = SchemaValidator(schema) assert v.validate_python('0.5') == Decimal('0.5') ``` Args: allow_inf_nan: Whether to allow inf and nan values multiple_of: The value must be a multiple of this number le: The value must be less than or equal to this number ge: The value must be greater than or equal to this number lt: The value must be strictly less than this number gt: The value must be strictly greater than this number max_digits: The maximum number of decimal digits allowed decimal_places: The maximum number of decimal places allowed strict: Whether the value should be a float or a value that can be converted to a float ref: optional unique identifier of the schema, used to reference the schema in other places metadata: Any other information you want to include with the schema, not used by pydantic-core serialization: Custom serialization schema """ return _dict_not_none( type='decimal', gt=gt, ge=ge, lt=lt, le=le, max_digits=max_digits, decimal_places=decimal_places, multiple_of=multiple_of, allow_inf_nan=allow_inf_nan, strict=strict, ref=ref, metadata=metadata, serialization=serialization, ) class FractionSchema(TypedDict, total=False): type: Required[Literal['fraction']] multiple_of: Fraction le: Fraction ge: Fraction lt: Fraction gt: Fraction strict: bool ref: str metadata: dict[str, Any] serialization: SerSchema def fraction_schema( *, multiple_of: Fraction | None = None, le: Fraction | None = None, ge: Fraction | None = None, lt: Fraction | None = None, gt: Fraction | None = None, strict: bool | None = None, ref: str | None = None, metadata: dict[str, Any] | None = None, serialization: SerSchema | None = None, ) -> FractionSchema: """ Returns a schema that matches a fraction value, e.g.: ```py from fractions import Fraction from pydantic_core import SchemaValidator, core_schema schema = core_schema.fraction_schema(le=Fraction(3, 4), ge=Fraction(1, 4)) v = SchemaValidator(schema) assert v.validate_python('1/2') == Fraction(1, 2) ``` Args: multiple_of: The value must be a multiple of this number le: The value must be less than or equal to this number ge: The value must be greater than or equal to this number lt: The value must be strictly less than this number gt: The value must be strictly greater than this number strict: Whether the value should be a Fraction or a value that can be converted to a Fraction ref: optional unique identifier of the schema, used to reference the schema in other places metadata: Any other information you want to include with the schema, not used by pydantic-core serialization: Custom serialization schema """ return _dict_not_none( type='fraction', multiple_of=multiple_of, gt=gt, ge=ge, lt=lt, le=le, strict=strict, ref=ref, metadata=metadata, serialization=serialization, ) class ComplexSchema(TypedDict, total=False): type: Required[Literal['complex']] strict: bool ref: str metadata: dict[str, Any] serialization: SerSchema def complex_schema( *, strict: bool | None = None, ref: str | None = None, metadata: dict[str, Any] | None = None, serialization: SerSchema | None = None, ) -> ComplexSchema: """ Returns a schema that matches a complex value, e.g.: ```py from pydantic_core import SchemaValidator, core_schema schema = core_schema.complex_schema() v = SchemaValidator(schema) assert v.validate_python('1+2j') == complex(1, 2) assert v.validate_python(complex(1, 2)) == complex(1, 2) ``` Args: strict: Whether the value should be a complex object instance or a value that can be converted to a complex object ref: optional unique identifier of the schema, used to reference the schema in other places metadata: Any other information you want to include with the schema, not used by pydantic-core serialization: Custom serialization schema """ return _dict_not_none( type='complex', strict=strict, ref=ref, metadata=metadata, serialization=serialization, ) class StringSchema(TypedDict, total=False): type: Required[Literal['str']] pattern: str | Pattern[str] max_length: int min_length: int strip_whitespace: bool to_lower: bool to_upper: bool ascii_only: bool regex_engine: Literal['rust-regex', 'python-re'] # default: 'rust-regex' strict: bool coerce_numbers_to_str: bool ref: str metadata: dict[str, Any] serialization: SerSchema def str_schema( *, pattern: str | Pattern[str] | None = None, max_length: int | None = None, min_length: int | None = None, strip_whitespace: bool | None = None, to_lower: bool | None = None, to_upper: bool | None = None, ascii_only: bool | None = None, regex_engine: Literal['rust-regex', 'python-re'] | None = None, strict: bool | None = None, coerce_numbers_to_str: bool | None = None, ref: str | None = None, metadata: dict[str, Any] | None = None, serialization: SerSchema | None = None, ) -> StringSchema: """ Returns a schema that matches a string value, e.g.: ```py from pydantic_core import SchemaValidator, core_schema schema = core_schema.str_schema(max_length=10, min_length=2) v = SchemaValidator(schema) assert v.validate_python('hello') == 'hello' ``` Args: pattern: A regex pattern that the value must match max_length: The value must be at most this length min_length: The value must be at least this length strip_whitespace: Whether to strip whitespace from the value to_lower: Whether to convert the value to lowercase to_upper: Whether to convert the value to uppercase ascii_only: Whether the value must contain only ASCII characters regex_engine: The regex engine to use for pattern validation. Default is 'rust-regex'. - `rust-regex` uses the [`regex`](https://docs.rs/regex) Rust crate, which is non-backtracking and therefore more DDoS resistant, but does not support all regex features. - `python-re` use the [`re`](https://docs.python.org/3/library/re.html) module, which supports all regex features, but may be slower. strict: Whether the value should be a string or a value that can be converted to a string coerce_numbers_to_str: Whether to enable coercion of any `Number` type to `str` (not applicable in `strict` mode). ref: optional unique identifier of the schema, used to reference the schema in other places metadata: Any other information you want to include with the schema, not used by pydantic-core serialization: Custom serialization schema """ return _dict_not_none( type='str', pattern=pattern, max_length=max_length, min_length=min_length, strip_whitespace=strip_whitespace, to_lower=to_lower, to_upper=to_upper, ascii_only=ascii_only, regex_engine=regex_engine, strict=strict, coerce_numbers_to_str=coerce_numbers_to_str, ref=ref, metadata=metadata, serialization=serialization, ) class BytesSchema(TypedDict, total=False): type: Required[Literal['bytes']] max_length: int min_length: int strict: bool ref: str metadata: dict[str, Any] serialization: SerSchema def bytes_schema( *, max_length: int | None = None, min_length: int | None = None, strict: bool | None = None, ref: str | None = None, metadata: dict[str, Any] | None = None, serialization: SerSchema | None = None, ) -> BytesSchema: """ Returns a schema that matches a bytes value, e.g.: ```py from pydantic_core import SchemaValidator, core_schema schema = core_schema.bytes_schema(max_length=10, min_length=2) v = SchemaValidator(schema) assert v.validate_python(b'hello') == b'hello' ``` Args: max_length: The value must be at most this length min_length: The value must be at least this length strict: Whether the value should be a bytes or a value that can be converted to a bytes ref: optional unique identifier of the schema, used to reference the schema in other places metadata: Any other information you want to include with the schema, not used by pydantic-core serialization: Custom serialization schema """ return _dict_not_none( type='bytes', max_length=max_length, min_length=min_length, strict=strict, ref=ref, metadata=metadata, serialization=serialization, ) class DateSchema(TypedDict, total=False): type: Required[Literal['date']] strict: bool le: date ge: date lt: date gt: date now_op: Literal['past', 'future'] # defaults to current local utc offset from `time.localtime().tm_gmtoff` # value is restricted to -86_400 < offset < 86_400: now_utc_offset: int ref: str metadata: dict[str, Any] serialization: SerSchema def date_schema( *, strict: bool | None = None, le: date | None = None, ge: date | None = None, lt: date | None = None, gt: date | None = None, now_op: Literal['past', 'future'] | None = None, now_utc_offset: int | None = None, ref: str | None = None, metadata: dict[str, Any] | None = None, serialization: SerSchema | None = None, ) -> DateSchema: """ Returns a schema that matches a date value, e.g.: ```py from datetime import date from pydantic_core import SchemaValidator, core_schema schema = core_schema.date_schema(le=date(2020, 1, 1), ge=date(2019, 1, 1)) v = SchemaValidator(schema) assert v.validate_python(date(2019, 6, 1)) == date(2019, 6, 1) ``` Args: strict: Whether the value should be a date or a value that can be converted to a date le: The value must be less than or equal to this date ge: The value must be greater than or equal to this date lt: The value must be strictly less than this date gt: The value must be strictly greater than this date now_op: The value must be in the past or future relative to the current date now_utc_offset: The value must be in the past or future relative to the current date with this utc offset ref: optional unique identifier of the schema, used to reference the schema in other places metadata: Any other information you want to include with the schema, not used by pydantic-core serialization: Custom serialization schema """ return _dict_not_none( type='date', strict=strict, le=le, ge=ge, lt=lt, gt=gt, now_op=now_op, now_utc_offset=now_utc_offset, ref=ref, metadata=metadata, serialization=serialization, ) class TimeSchema(TypedDict, total=False): type: Required[Literal['time']] strict: bool le: time ge: time lt: time gt: time tz_constraint: Literal['aware', 'naive'] | int microseconds_precision: Literal['truncate', 'error'] ref: str metadata: dict[str, Any] serialization: SerSchema def time_schema( *, strict: bool | None = None, le: time | None = None, ge: time | None = None, lt: time | None = None, gt: time | None = None, tz_constraint: Literal['aware', 'naive'] | int | None = None, microseconds_precision: Literal['truncate', 'error'] = 'truncate', ref: str | None = None, metadata: dict[str, Any] | None = None, serialization: SerSchema | None = None, ) -> TimeSchema: """ Returns a schema that matches a time value, e.g.: ```py from datetime import time from pydantic_core import SchemaValidator, core_schema schema = core_schema.time_schema(le=time(12, 0, 0), ge=time(6, 0, 0)) v = SchemaValidator(schema) assert v.validate_python(time(9, 0, 0)) == time(9, 0, 0) ``` Args: strict: Whether the value should be a time or a value that can be converted to a time le: The value must be less than or equal to this time ge: The value must be greater than or equal to this time lt: The value must be strictly less than this time gt: The value must be strictly greater than this time tz_constraint: The value must be timezone aware or naive, or an int to indicate required tz offset microseconds_precision: The behavior when seconds have more than 6 digits or microseconds is too large ref: optional unique identifier of the schema, used to reference the schema in other places metadata: Any other information you want to include with the schema, not used by pydantic-core serialization: Custom serialization schema """ return _dict_not_none( type='time', strict=strict, le=le, ge=ge, lt=lt, gt=gt, tz_constraint=tz_constraint, microseconds_precision=microseconds_precision, ref=ref, metadata=metadata, serialization=serialization, ) class DatetimeSchema(TypedDict, total=False): type: Required[Literal['datetime']] strict: bool le: datetime ge: datetime lt: datetime gt: datetime now_op: Literal['past', 'future'] tz_constraint: Literal['aware', 'naive'] | int # defaults to current local utc offset from `time.localtime().tm_gmtoff` # value is restricted to -86_400 < offset < 86_400 by bounds in generate_self_schema.py now_utc_offset: int microseconds_precision: Literal['truncate', 'error'] # default: 'truncate' ref: str metadata: dict[str, Any] serialization: SerSchema def datetime_schema( *, strict: bool | None = None, le: datetime | None = None, ge: datetime | None = None, lt: datetime | None = None, gt: datetime | None = None, now_op: Literal['past', 'future'] | None = None, tz_constraint: Literal['aware', 'naive'] | int | None = None, now_utc_offset: int | None = None, microseconds_precision: Literal['truncate', 'error'] = 'truncate', ref: str | None = None, metadata: dict[str, Any] | None = None, serialization: SerSchema | None = None, ) -> DatetimeSchema: """ Returns a schema that matches a datetime value, e.g.: ```py from datetime import datetime from pydantic_core import SchemaValidator, core_schema schema = core_schema.datetime_schema() v = SchemaValidator(schema) now = datetime.now() assert v.validate_python(str(now)) == now ``` Args: strict: Whether the value should be a datetime or a value that can be converted to a datetime le: The value must be less than or equal to this datetime ge: The value must be greater than or equal to this datetime lt: The value must be strictly less than this datetime gt: The value must be strictly greater than this datetime now_op: The value must be in the past or future relative to the current datetime tz_constraint: The value must be timezone aware or naive, or an int to indicate required tz offset TODO: use of a tzinfo where offset changes based on the datetime is not yet supported now_utc_offset: The value must be in the past or future relative to the current datetime with this utc offset microseconds_precision: The behavior when seconds have more than 6 digits or microseconds is too large ref: optional unique identifier of the schema, used to reference the schema in other places metadata: Any other information you want to include with the schema, not used by pydantic-core serialization: Custom serialization schema """ return _dict_not_none( type='datetime', strict=strict, le=le, ge=ge, lt=lt, gt=gt, now_op=now_op, tz_constraint=tz_constraint, now_utc_offset=now_utc_offset, microseconds_precision=microseconds_precision, ref=ref, metadata=metadata, serialization=serialization, ) class TimedeltaSchema(TypedDict, total=False): type: Required[Literal['timedelta']] strict: bool multiple_of: timedelta le: timedelta ge: timedelta lt: timedelta gt: timedelta microseconds_precision: Literal['truncate', 'error'] ref: str metadata: dict[str, Any] serialization: SerSchema def timedelta_schema( *, strict: bool | None = None, multiple_of: timedelta | None = None, le: timedelta | None = None, ge: timedelta | None = None, lt: timedelta | None = None, gt: timedelta | None = None, microseconds_precision: Literal['truncate', 'error'] = 'truncate', ref: str | None = None, metadata: dict[str, Any] | None = None, serialization: SerSchema | None = None, ) -> TimedeltaSchema: """ Returns a schema that matches a timedelta value, e.g.: ```py from datetime import timedelta from pydantic_core import SchemaValidator, core_schema schema = core_schema.timedelta_schema(le=timedelta(days=1), ge=timedelta(days=0)) v = SchemaValidator(schema) assert v.validate_python(timedelta(hours=12)) == timedelta(hours=12) ``` Args: strict: Whether the value should be a timedelta or a value that can be converted to a timedelta multiple_of: The value must be a multiple of this timedelta le: The value must be less than or equal to this timedelta ge: The value must be greater than or equal to this timedelta lt: The value must be strictly less than this timedelta gt: The value must be strictly greater than this timedelta microseconds_precision: The behavior when seconds have more than 6 digits or microseconds is too large ref: optional unique identifier of the schema, used to reference the schema in other places metadata: Any other information you want to include with the schema, not used by pydantic-core serialization: Custom serialization schema """ return _dict_not_none( type='timedelta', strict=strict, multiple_of=multiple_of, le=le, ge=ge, lt=lt, gt=gt, microseconds_precision=microseconds_precision, ref=ref, metadata=metadata, serialization=serialization, ) class LiteralSchema(TypedDict, total=False): type: Required[Literal['literal']] expected: Required[list[Any]] ref: str metadata: dict[str, Any] serialization: SerSchema def literal_schema( expected: list[Any], *, ref: str | None = None, metadata: dict[str, Any] | None = None, serialization: SerSchema | None = None, ) -> LiteralSchema: """ Returns a schema that matches a literal value, e.g.: ```py from pydantic_core import SchemaValidator, core_schema schema = core_schema.literal_schema(['hello', 'world']) v = SchemaValidator(schema) assert v.validate_python('hello') == 'hello' ``` Args: expected: The value must be one of these values ref: optional unique identifier of the schema, used to reference the schema in other places metadata: Any other information you want to include with the schema, not used by pydantic-core serialization: Custom serialization schema """ return _dict_not_none(type='literal', expected=expected, ref=ref, metadata=metadata, serialization=serialization) class EnumSchema(TypedDict, total=False): type: Required[Literal['enum']] cls: Required[Any] members: Required[list[Any]] sub_type: Literal['str', 'int', 'float'] missing: Callable[[Any], Any] strict: bool ref: str metadata: dict[str, Any] serialization: SerSchema @overload @deprecated('The `missing` argument on `enum_schema()` is deprecated and no longer used.') def enum_schema( cls: Any, members: list[Any], *, sub_type: Literal['str', 'int', 'float'] | None = None, missing: Callable[[Any], Any] | None, strict: bool | None = None, ref: str | None = None, metadata: dict[str, Any] | None = None, serialization: SerSchema | None = None, ) -> EnumSchema: ... @overload def enum_schema( cls: Any, members: list[Any], *, sub_type: Literal['str', 'int', 'float'] | None = None, strict: bool | None = None, ref: str | None = None, metadata: dict[str, Any] | None = None, serialization: SerSchema | None = None, ) -> EnumSchema: ... def enum_schema( cls: Any, members: list[Any], *, sub_type: Literal['str', 'int', 'float'] | None = None, missing: Callable[[Any], Any] | None = None, strict: bool | None = None, ref: str | None = None, metadata: dict[str, Any] | None = None, serialization: SerSchema | None = None, ) -> EnumSchema: """ Returns a schema that matches an enum value, e.g.: ```py from enum import Enum from pydantic_core import SchemaValidator, core_schema class Color(Enum): RED = 1 GREEN = 2 BLUE = 3 schema = core_schema.enum_schema(Color, list(Color.__members__.values())) v = SchemaValidator(schema) assert v.validate_python(2) is Color.GREEN ``` Args: cls: The enum class members: The members of the enum, generally `list(MyEnum.__members__.values())` sub_type: The type of the enum, either 'str' or 'int' or None for plain enums missing: Deprecated and no longer used, the `_missing_` hook of the enum class is now called by the enum validator strict: Whether to use strict mode, defaults to False ref: optional unique identifier of the schema, used to reference the schema in other places metadata: Any other information you want to include with the schema, not used by pydantic-core serialization: Custom serialization schema """ if missing is not None: warnings.warn( 'The `missing` argument on `enum_schema()` is deprecated and no longer used.', DeprecationWarning, stacklevel=2, ) return _dict_not_none( type='enum', cls=cls, members=members, sub_type=sub_type, missing=missing, strict=strict, ref=ref, metadata=metadata, serialization=serialization, ) class MissingSentinelSchema(TypedDict, total=False): type: Required[Literal['missing-sentinel']] schema: CoreSchema metadata: dict[str, Any] serialization: SerSchema def missing_sentinel_schema( schema: CoreSchema | None = None, *, metadata: dict[str, Any] | None = None, serialization: SerSchema | None = None, ) -> MissingSentinelSchema: """ Returns a schema that matches the `MISSING` sentinel, or, if provided, the wrapped schema, e.g.: ```py from pydantic_core import MISSING, SchemaValidator, core_schema schema = core_schema.missing_sentinel_schema(core_schema.int_schema()) v = SchemaValidator(schema) assert v.validate_python(MISSING) is MISSING assert v.validate_python(1) == 1 ``` If no schema is provided, only the `MISSING` sentinel is a valid input. Args: schema: The schema to wrap metadata: Any other information you want to include with the schema, not used by pydantic-core serialization: Custom serialization schema """ return _dict_not_none( type='missing-sentinel', schema=schema, metadata=metadata, serialization=serialization, ) class EllipsisSchema(TypedDict, total=False): type: Required[Literal['ellipsis']] metadata: dict[str, Any] serialization: SerSchema def ellipsis_schema( metadata: dict[str, Any] | None = None, serialization: SerSchema | None = None, ) -> EllipsisSchema: """Returns a schema for the [`Ellipsis`][] literal.""" return _dict_not_none( type='ellipsis', metadata=metadata, serialization=serialization, ) # must match input/parse_json.rs::JsonType::try_from JsonType = Literal['null', 'bool', 'int', 'float', 'str', 'list', 'dict'] class IsInstanceSchema(TypedDict, total=False): type: Required[Literal['is-instance']] cls: Required[Any] cls_repr: str ref: str metadata: dict[str, Any] serialization: SerSchema def is_instance_schema( cls: Any, *, cls_repr: str | None = None, ref: str | None = None, metadata: dict[str, Any] | None = None, serialization: SerSchema | None = None, ) -> IsInstanceSchema: """ Returns a schema that checks if a value is an instance of a class, equivalent to python's `isinstance` method, e.g.: ```py from pydantic_core import SchemaValidator, core_schema class A: pass schema = core_schema.is_instance_schema(cls=A) v = SchemaValidator(schema) v.validate_python(A()) ``` Args: cls: The value must be an instance of this class cls_repr: If provided this string is used in the validator name instead of `repr(cls)` ref: optional unique identifier of the schema, used to reference the schema in other places metadata: Any other information you want to include with the schema, not used by pydantic-core serialization: Custom serialization schema """ return _dict_not_none( type='is-instance', cls=cls, cls_repr=cls_repr, ref=ref, metadata=metadata, serialization=serialization ) class IsSubclassSchema(TypedDict, total=False): type: Required[Literal['is-subclass']] cls: Required[type[Any]] cls_repr: str ref: str metadata: dict[str, Any] serialization: SerSchema def is_subclass_schema( cls: type[Any], *, cls_repr: str | None = None, ref: str | None = None, metadata: dict[str, Any] | None = None, serialization: SerSchema | None = None, ) -> IsInstanceSchema: """ Returns a schema that checks if a value is a subtype of a class, equivalent to python's `issubclass` method, e.g.: ```py from pydantic_core import SchemaValidator, core_schema class A: pass class B(A): pass schema = core_schema.is_subclass_schema(cls=A) v = SchemaValidator(schema) v.validate_python(B) ``` Args: cls: The value must be a subclass of this class cls_repr: If provided this string is used in the validator name instead of `repr(cls)` ref: optional unique identifier of the schema, used to reference the schema in other places metadata: Any other information you want to include with the schema, not used by pydantic-core serialization: Custom serialization schema """ return _dict_not_none( type='is-subclass', cls=cls, cls_repr=cls_repr, ref=ref, metadata=metadata, serialization=serialization ) class CallableSchema(TypedDict, total=False): type: Required[Literal['callable']] ref: str metadata: dict[str, Any] serialization: SerSchema def callable_schema( *, ref: str | None = None, metadata: dict[str, Any] | None = None, serialization: SerSchema | None = None ) -> CallableSchema: """ Returns a schema that checks if a value is callable, equivalent to python's `callable` method, e.g.: ```py from pydantic_core import SchemaValidator, core_schema schema = core_schema.callable_schema() v = SchemaValidator(schema) v.validate_python(min) ``` Args: ref: optional unique identifier of the schema, used to reference the schema in other places metadata: Any other information you want to include with the schema, not used by pydantic-core serialization: Custom serialization schema """ return _dict_not_none(type='callable', ref=ref, metadata=metadata, serialization=serialization) class UuidSchema(TypedDict, total=False): type: Required[Literal['uuid']] version: Literal[1, 3, 4, 5, 7] strict: bool ref: str metadata: dict[str, Any] serialization: SerSchema def uuid_schema( *, version: Literal[1, 3, 4, 5, 6, 7, 8] | None = None, strict: bool | None = None, ref: str | None = None, metadata: dict[str, Any] | None = None, serialization: SerSchema | None = None, ) -> UuidSchema: return _dict_not_none( type='uuid', version=version, strict=strict, ref=ref, metadata=metadata, serialization=serialization ) class IncExSeqSerSchema(TypedDict, total=False): type: Required[Literal['include-exclude-sequence']] include: set[int] exclude: set[int] def filter_seq_schema(*, include: set[int] | None = None, exclude: set[int] | None = None) -> IncExSeqSerSchema: return _dict_not_none(type='include-exclude-sequence', include=include, exclude=exclude) IncExSeqOrElseSerSchema: TypeAlias = Union[IncExSeqSerSchema, SerSchema] # noqa: UP007 (TypeError when evaluating) class ListSchema(TypedDict, total=False): type: Required[Literal['list']] items_schema: CoreSchema min_length: int max_length: int fail_fast: bool strict: bool ref: str metadata: dict[str, Any] serialization: IncExSeqOrElseSerSchema def list_schema( items_schema: CoreSchema | None = None, *, min_length: int | None = None, max_length: int | None = None, fail_fast: bool | None = None, strict: bool | None = None, ref: str | None = None, metadata: dict[str, Any] | None = None, serialization: IncExSeqOrElseSerSchema | None = None, ) -> ListSchema: """ Returns a schema that matches a list value, e.g.: ```py from pydantic_core import SchemaValidator, core_schema schema = core_schema.list_schema(core_schema.int_schema(), min_length=0, max_length=10) v = SchemaValidator(schema) assert v.validate_python(['4']) == [4] ``` Args: items_schema: The value must be a list of items that match this schema min_length: The value must be a list with at least this many items max_length: The value must be a list with at most this many items fail_fast: Stop validation on the first error strict: The value must be a list with exactly this many items ref: optional unique identifier of the schema, used to reference the schema in other places metadata: Any other information you want to include with the schema, not used by pydantic-core serialization: Custom serialization schema """ return _dict_not_none( type='list', items_schema=items_schema, min_length=min_length, max_length=max_length, fail_fast=fail_fast, strict=strict, ref=ref, metadata=metadata, serialization=serialization, ) class DequeSchema(TypedDict, total=False): type: Required[Literal['deque']] items_schema: CoreSchema min_length: int max_length: int fail_fast: bool strict: bool ref: str metadata: dict[str, Any] serialization: IncExSeqOrElseSerSchema def deque_schema( items_schema: CoreSchema | None = None, *, min_length: int | None = None, max_length: int | None = None, fail_fast: bool | None = None, strict: bool | None = None, ref: str | None = None, metadata: dict[str, Any] | None = None, serialization: IncExSeqOrElseSerSchema | None = None, ) -> DequeSchema: """ Returns a schema that matches a [`collections.deque`][] value, e.g.: ```py from collections import deque from pydantic_core import SchemaValidator, core_schema schema = core_schema.deque_schema(core_schema.int_schema(), min_length=0, max_length=10) v = SchemaValidator(schema) assert v.validate_python(['4']) == deque([4]) ``` In lax mode, any iterable (except strings, bytes and mappings) is accepted and converted to a deque. If the input is a deque instance, its `maxlen` is preserved on the output. Args: items_schema: The value must be a deque of items that match this schema min_length: The value must be a deque with at least this many items max_length: The value must be a deque with at most this many items fail_fast: Stop validation on the first error strict: The value must be a deque instance ref: optional unique identifier of the schema, used to reference the schema in other places metadata: Any other information you want to include with the schema, not used by pydantic-core serialization: Custom serialization schema """ return _dict_not_none( type='deque', items_schema=items_schema, min_length=min_length, max_length=max_length, fail_fast=fail_fast, strict=strict, ref=ref, metadata=metadata, serialization=serialization, ) # @deprecated('tuple_positional_schema is deprecated. Use pydantic_core.core_schema.tuple_schema instead.') def tuple_positional_schema( items_schema: list[CoreSchema], *, extras_schema: CoreSchema | None = None, strict: bool | None = None, ref: str | None = None, metadata: dict[str, Any] | None = None, serialization: IncExSeqOrElseSerSchema | None = None, ) -> TupleSchema: """ Returns a schema that matches a tuple of schemas, e.g.: ```py from pydantic_core import SchemaValidator, core_schema schema = core_schema.tuple_positional_schema( [core_schema.int_schema(), core_schema.str_schema()] ) v = SchemaValidator(schema) assert v.validate_python((1, 'hello')) == (1, 'hello') ``` Args: items_schema: The value must be a tuple with items that match these schemas extras_schema: The value must be a tuple with items that match this schema This was inspired by JSON schema's `prefixItems` and `items` fields. In python's `typing.Tuple`, you can't specify a type for "extra" items -- they must all be the same type if the length is variable. So this field won't be set from a `typing.Tuple` annotation on a pydantic model. strict: The value must be a tuple with exactly this many items ref: optional unique identifier of the schema, used to reference the schema in other places metadata: Any other information you want to include with the schema, not used by pydantic-core serialization: Custom serialization schema """ if extras_schema is not None: variadic_item_index = len(items_schema) items_schema = items_schema + [extras_schema] else: variadic_item_index = None return tuple_schema( items_schema=items_schema, variadic_item_index=variadic_item_index, strict=strict, ref=ref, metadata=metadata, serialization=serialization, ) # @deprecated('tuple_variable_schema is deprecated. Use pydantic_core.core_schema.tuple_schema instead.') def tuple_variable_schema( items_schema: CoreSchema | None = None, *, min_length: int | None = None, max_length: int | None = None, strict: bool | None = None, ref: str | None = None, metadata: dict[str, Any] | None = None, serialization: IncExSeqOrElseSerSchema | None = None, ) -> TupleSchema: """ Returns a schema that matches a tuple of a given schema, e.g.: ```py from pydantic_core import SchemaValidator, core_schema schema = core_schema.tuple_variable_schema( items_schema=core_schema.int_schema(), min_length=0, max_length=10 ) v = SchemaValidator(schema) assert v.validate_python(('1', 2, 3)) == (1, 2, 3) ``` Args: items_schema: The value must be a tuple with items that match this schema min_length: The value must be a tuple with at least this many items max_length: The value must be a tuple with at most this many items strict: The value must be a tuple with exactly this many items ref: Optional unique identifier of the schema, used to reference the schema in other places metadata: Any other information you want to include with the schema, not used by pydantic-core serialization: Custom serialization schema """ return tuple_schema( items_schema=[items_schema or any_schema()], variadic_item_index=0, min_length=min_length, max_length=max_length, strict=strict, ref=ref, metadata=metadata, serialization=serialization, ) class TupleSchema(TypedDict, total=False): type: Required[Literal['tuple']] items_schema: Required[list[CoreSchema]] variadic_item_index: int min_length: int max_length: int fail_fast: bool strict: bool ref: str metadata: dict[str, Any] serialization: IncExSeqOrElseSerSchema def tuple_schema( items_schema: list[CoreSchema], *, variadic_item_index: int | None = None, min_length: int | None = None, max_length: int | None = None, fail_fast: bool | None = None, strict: bool | None = None, ref: str | None = None, metadata: dict[str, Any] | None = None, serialization: IncExSeqOrElseSerSchema | None = None, ) -> TupleSchema: """ Returns a schema that matches a tuple of schemas, with an optional variadic item, e.g.: ```py from pydantic_core import SchemaValidator, core_schema schema = core_schema.tuple_schema( [core_schema.int_schema(), core_schema.str_schema(), core_schema.float_schema()], variadic_item_index=1, ) v = SchemaValidator(schema) assert v.validate_python((1, 'hello', 'world', 1.5)) == (1, 'hello', 'world', 1.5) ``` Args: items_schema: The value must be a tuple with items that match these schemas variadic_item_index: The index of the schema in `items_schema` to be treated as variadic (following PEP 646) min_length: The value must be a tuple with at least this many items max_length: The value must be a tuple with at most this many items fail_fast: Stop validation on the first error strict: The value must be a tuple with exactly this many items ref: Optional unique identifier of the schema, used to reference the schema in other places metadata: Any other information you want to include with the schema, not used by pydantic-core serialization: Custom serialization schema """ return _dict_not_none( type='tuple', items_schema=items_schema, variadic_item_index=variadic_item_index, min_length=min_length, max_length=max_length, fail_fast=fail_fast, strict=strict, ref=ref, metadata=metadata, serialization=serialization, ) class SetSchema(TypedDict, total=False): type: Required[Literal['set']] items_schema: CoreSchema min_length: int max_length: int fail_fast: bool strict: bool ref: str metadata: dict[str, Any] serialization: SerSchema def set_schema( items_schema: CoreSchema | None = None, *, min_length: int | None = None, max_length: int | None = None, fail_fast: bool | None = None, strict: bool | None = None, ref: str | None = None, metadata: dict[str, Any] | None = None, serialization: SerSchema | None = None, ) -> SetSchema: """ Returns a schema that matches a set of a given schema, e.g.: ```py from pydantic_core import SchemaValidator, core_schema schema = core_schema.set_schema( items_schema=core_schema.int_schema(), min_length=0, max_length=10 ) v = SchemaValidator(schema) assert v.validate_python({1, '2', 3}) == {1, 2, 3} ``` Args: items_schema: The value must be a set with items that match this schema min_length: The value must be a set with at least this many items max_length: The value must be a set with at most this many items fail_fast: Stop validation on the first error strict: The value must be a set with exactly this many items ref: optional unique identifier of the schema, used to reference the schema in other places metadata: Any other information you want to include with the schema, not used by pydantic-core serialization: Custom serialization schema """ return _dict_not_none( type='set', items_schema=items_schema, min_length=min_length, max_length=max_length, fail_fast=fail_fast, strict=strict, ref=ref, metadata=metadata, serialization=serialization, ) class FrozenSetSchema(TypedDict, total=False): type: Required[Literal['frozenset']] items_schema: CoreSchema min_length: int max_length: int fail_fast: bool strict: bool ref: str metadata: dict[str, Any] serialization: SerSchema def frozenset_schema( items_schema: CoreSchema | None = None, *, min_length: int | None = None, max_length: int | None = None, fail_fast: bool | None = None, strict: bool | None = None, ref: str | None = None, metadata: dict[str, Any] | None = None, serialization: SerSchema | None = None, ) -> FrozenSetSchema: """ Returns a schema that matches a frozenset of a given schema, e.g.: ```py from pydantic_core import SchemaValidator, core_schema schema = core_schema.frozenset_schema( items_schema=core_schema.int_schema(), min_length=0, max_length=10 ) v = SchemaValidator(schema) assert v.validate_python(frozenset(range(3))) == frozenset({0, 1, 2}) ``` Args: items_schema: The value must be a frozenset with items that match this schema min_length: The value must be a frozenset with at least this many items max_length: The value must be a frozenset with at most this many items fail_fast: Stop validation on the first error strict: The value must be a frozenset with exactly this many items ref: optional unique identifier of the schema, used to reference the schema in other places metadata: Any other information you want to include with the schema, not used by pydantic-core serialization: Custom serialization schema """ return _dict_not_none( type='frozenset', items_schema=items_schema, min_length=min_length, max_length=max_length, fail_fast=fail_fast, strict=strict, ref=ref, metadata=metadata, serialization=serialization, ) class GeneratorSchema(TypedDict, total=False): type: Required[Literal['generator']] items_schema: CoreSchema min_length: int max_length: int ref: str metadata: dict[str, Any] serialization: IncExSeqOrElseSerSchema def generator_schema( items_schema: CoreSchema | None = None, *, min_length: int | None = None, max_length: int | None = None, ref: str | None = None, metadata: dict[str, Any] | None = None, serialization: IncExSeqOrElseSerSchema | None = None, ) -> GeneratorSchema: """ Returns a schema that matches a generator value, e.g.: ```py from typing import Iterator from pydantic_core import SchemaValidator, core_schema def gen() -> Iterator[int]: yield 1 schema = core_schema.generator_schema(items_schema=core_schema.int_schema()) v = SchemaValidator(schema) v.validate_python(gen()) ``` Unlike other types, validated generators do not raise ValidationErrors eagerly, but instead will raise a ValidationError when a violating value is actually read from the generator. This is to ensure that "validated" generators retain the benefit of lazy evaluation. Args: items_schema: The value must be a generator with items that match this schema min_length: The value must be a generator that yields at least this many items max_length: The value must be a generator that yields at most this many items ref: optional unique identifier of the schema, used to reference the schema in other places metadata: Any other information you want to include with the schema, not used by pydantic-core serialization: Custom serialization schema """ return _dict_not_none( type='generator', items_schema=items_schema, min_length=min_length, max_length=max_length, ref=ref, metadata=metadata, serialization=serialization, ) IncExDict: TypeAlias = set[int | str] class IncExDictSerSchema(TypedDict, total=False): type: Required[Literal['include-exclude-dict']] include: IncExDict exclude: IncExDict def filter_dict_schema(*, include: IncExDict | None = None, exclude: IncExDict | None = None) -> IncExDictSerSchema: return _dict_not_none(type='include-exclude-dict', include=include, exclude=exclude) IncExDictOrElseSerSchema: TypeAlias = Union[IncExDictSerSchema, SerSchema] # noqa: UP007 (TypeError when evaluating) class DictSchema(TypedDict, total=False): type: Required[Literal['dict']] keys_schema: CoreSchema # default: AnySchema values_schema: CoreSchema # default: AnySchema min_length: int max_length: int fail_fast: bool strict: bool ref: str metadata: dict[str, Any] serialization: IncExDictOrElseSerSchema def dict_schema( keys_schema: CoreSchema | None = None, values_schema: CoreSchema | None = None, *, min_length: int | None = None, max_length: int | None = None, fail_fast: bool | None = None, strict: bool | None = None, ref: str | None = None, metadata: dict[str, Any] | None = None, serialization: SerSchema | None = None, ) -> DictSchema: """ Returns a schema that matches a dict value, e.g.: ```py from pydantic_core import SchemaValidator, core_schema schema = core_schema.dict_schema( keys_schema=core_schema.str_schema(), values_schema=core_schema.int_schema() ) v = SchemaValidator(schema) assert v.validate_python({'a': '1', 'b': 2}) == {'a': 1, 'b': 2} ``` Args: keys_schema: The value must be a dict with keys that match this schema values_schema: The value must be a dict with values that match this schema min_length: The value must be a dict with at least this many items max_length: The value must be a dict with at most this many items fail_fast: Stop validation on the first error strict: Whether the keys and values should be validated with strict mode ref: optional unique identifier of the schema, used to reference the schema in other places metadata: Any other information you want to include with the schema, not used by pydantic-core serialization: Custom serialization schema """ return _dict_not_none( type='dict', keys_schema=keys_schema, values_schema=values_schema, min_length=min_length, max_length=max_length, fail_fast=fail_fast, strict=strict, ref=ref, metadata=metadata, serialization=serialization, ) class FrozenDictSchema(TypedDict, total=False): type: Required[Literal['frozendict']] keys_schema: CoreSchema # default: AnySchema values_schema: CoreSchema # default: AnySchema min_length: int max_length: int fail_fast: bool strict: bool ref: str metadata: dict[str, Any] serialization: IncExDictOrElseSerSchema def frozendict_schema( keys_schema: CoreSchema | None = None, values_schema: CoreSchema | None = None, *, min_length: int | None = None, max_length: int | None = None, fail_fast: bool | None = None, strict: bool | None = None, ref: str | None = None, metadata: dict[str, Any] | None = None, serialization: SerSchema | None = None, ) -> FrozenDictSchema: """ Returns a schema that matches a `frozendict` value, e.g.: ```py {requires="3.15" lint="skip"} from pydantic_core import SchemaValidator, core_schema schema = core_schema.frozendict_schema( keys_schema=core_schema.str_schema(), values_schema=core_schema.int_schema() ) v = SchemaValidator(schema) assert v.validate_python({'a': '1', 'b': 2}) == frozendict({'a': 1, 'b': 2}) ``` !!! note The `frozendict` builtin type is only available in Python 3.15 and above. Using this schema on older Python versions will raise a [`SchemaError`][pydantic_core.SchemaError] when the validator or serializer is built. Args: keys_schema: The value must be a frozendict with keys that match this schema values_schema: The value must be a frozendict with values that match this schema min_length: The value must be a frozendict with at least this many items max_length: The value must be a frozendict with at most this many items fail_fast: Stop validation on the first error strict: Whether the input should be validated with strict mode ref: optional unique identifier of the schema, used to reference the schema in other places metadata: Any other information you want to include with the schema, not used by pydantic-core serialization: Custom serialization schema """ return _dict_not_none( type='frozendict', keys_schema=keys_schema, values_schema=values_schema, min_length=min_length, max_length=max_length, fail_fast=fail_fast, strict=strict, ref=ref, metadata=metadata, serialization=serialization, ) class OrderedDictSchema(TypedDict, total=False): type: Required[Literal['ordered-dict']] keys_schema: CoreSchema # default: AnySchema values_schema: CoreSchema # default: AnySchema min_length: int max_length: int fail_fast: bool strict: bool ref: str metadata: dict[str, Any] serialization: IncExDictOrElseSerSchema def ordered_dict_schema( keys_schema: CoreSchema | None = None, values_schema: CoreSchema | None = None, *, min_length: int | None = None, max_length: int | None = None, fail_fast: bool | None = None, strict: bool | None = None, ref: str | None = None, metadata: dict[str, Any] | None = None, serialization: SerSchema | None = None, ) -> OrderedDictSchema: """ Returns a schema that matches a [`collections.OrderedDict`][] value, e.g.: ```py from collections import OrderedDict from pydantic_core import SchemaValidator, core_schema schema = core_schema.ordered_dict_schema( keys_schema=core_schema.str_schema(), values_schema=core_schema.int_schema() ) v = SchemaValidator(schema) assert v.validate_python({'a': '1', 'b': 2}) == OrderedDict({'a': 1, 'b': 2}) ``` In lax mode, any mapping is accepted and converted to an `OrderedDict`. Args: keys_schema: The value must be an `OrderedDict` with keys that match this schema values_schema: The value must be an `OrderedDict` with values that match this schema min_length: The value must be an `OrderedDict` with at least this many items max_length: The value must be an `OrderedDict` with at most this many items fail_fast: Stop validation on the first error strict: The value must be an `OrderedDict` instance ref: optional unique identifier of the schema, used to reference the schema in other places metadata: Any other information you want to include with the schema, not used by pydantic-core serialization: Custom serialization schema """ return _dict_not_none( type='ordered-dict', keys_schema=keys_schema, values_schema=values_schema, min_length=min_length, max_length=max_length, fail_fast=fail_fast, strict=strict, ref=ref, metadata=metadata, serialization=serialization, ) class CounterSchema(TypedDict, total=False): type: Required[Literal['counter']] keys_schema: CoreSchema # default: AnySchema values_schema: CoreSchema # default: AnySchema min_length: int max_length: int fail_fast: bool strict: bool ref: str metadata: dict[str, Any] serialization: IncExDictOrElseSerSchema def counter_schema( keys_schema: CoreSchema | None = None, values_schema: CoreSchema | None = None, *, min_length: int | None = None, max_length: int | None = None, fail_fast: bool | None = None, strict: bool | None = None, ref: str | None = None, metadata: dict[str, Any] | None = None, serialization: SerSchema | None = None, ) -> CounterSchema: """ Returns a schema that matches a [`collections.Counter`][] value, e.g.: ```py from collections import Counter from pydantic_core import SchemaValidator, core_schema schema = core_schema.counter_schema( keys_schema=core_schema.str_schema(), values_schema=core_schema.int_schema() ) v = SchemaValidator(schema) assert v.validate_python({'a': '1', 'b': 2}) == Counter({'a': 1, 'b': 2}) ``` In lax mode, any mapping is accepted and converted to a `Counter`. Args: keys_schema: The value must be a `Counter` with keys that match this schema values_schema: The value must be a `Counter` with values that match this schema min_length: The value must be a `Counter` with at least this many items max_length: The value must be a `Counter` with at most this many items fail_fast: Stop validation on the first error strict: The value must be a `Counter` instance ref: optional unique identifier of the schema, used to reference the schema in other places metadata: Any other information you want to include with the schema, not used by pydantic-core serialization: Custom serialization schema """ return _dict_not_none( type='counter', keys_schema=keys_schema, values_schema=values_schema, min_length=min_length, max_length=max_length, fail_fast=fail_fast, strict=strict, ref=ref, metadata=metadata, serialization=serialization, ) # (input_value: Any, /) -> Any NoInfoValidatorFunction: TypeAlias = Callable[[Any], Any] class NoInfoValidatorFunctionSchema(TypedDict): type: Literal['no-info'] function: NoInfoValidatorFunction # (input_value: Any, info: ValidationInfo, /) -> Any WithInfoValidatorFunction: TypeAlias = Callable[[Any, ValidationInfo[Any]], Any] class WithInfoValidatorFunctionSchema(TypedDict, total=False): type: Required[Literal['with-info']] function: Required[WithInfoValidatorFunction] field_name: str # deprecated ValidationFunction: TypeAlias = NoInfoValidatorFunctionSchema | WithInfoValidatorFunctionSchema class _ValidatorFunctionSchema(TypedDict, total=False): function: Required[ValidationFunction] schema: Required[CoreSchema] ref: str metadata: dict[str, Any] serialization: SerSchema class BeforeValidatorFunctionSchema(_ValidatorFunctionSchema, total=False): type: Required[Literal['function-before']] json_schema_input_schema: CoreSchema def no_info_before_validator_function( function: NoInfoValidatorFunction, schema: CoreSchema, *, ref: str | None = None, json_schema_input_schema: CoreSchema | None = None, metadata: dict[str, Any] | None = None, serialization: SerSchema | None = None, ) -> BeforeValidatorFunctionSchema: """ Returns a schema that calls a validator function before validating, no `info` argument is provided, e.g.: ```py from pydantic_core import SchemaValidator, core_schema def fn(v: bytes) -> str: return v.decode() + 'world' func_schema = core_schema.no_info_before_validator_function( function=fn, schema=core_schema.str_schema() ) schema = core_schema.typed_dict_schema({'a': core_schema.typed_dict_field(func_schema)}) v = SchemaValidator(schema) assert v.validate_python({'a': b'hello '}) == {'a': 'hello world'} ``` Args: function: The validator function to call schema: The schema to validate the output of the validator function ref: optional unique identifier of the schema, used to reference the schema in other places json_schema_input_schema: The core schema to be used to generate the corresponding JSON Schema input type metadata: Any other information you want to include with the schema, not used by pydantic-core serialization: Custom serialization schema """ return _dict_not_none( type='function-before', function={'type': 'no-info', 'function': function}, schema=schema, ref=ref, json_schema_input_schema=json_schema_input_schema, metadata=metadata, serialization=serialization, ) @overload @deprecated( 'The `field_name` argument on `with_info_before_validator_function` is deprecated, ' 'it will be passed to the function through `ValidationState` instead.' ) def with_info_before_validator_function( function: WithInfoValidatorFunction, schema: CoreSchema, *, field_name: str | None, ref: str | None = None, json_schema_input_schema: CoreSchema | None = None, metadata: dict[str, Any] | None = None, serialization: SerSchema | None = None, ) -> BeforeValidatorFunctionSchema: ... @overload def with_info_before_validator_function( function: WithInfoValidatorFunction, schema: CoreSchema, *, ref: str | None = None, json_schema_input_schema: CoreSchema | None = None, metadata: dict[str, Any] | None = None, serialization: SerSchema | None = None, ) -> BeforeValidatorFunctionSchema: ... def with_info_before_validator_function( function: WithInfoValidatorFunction, schema: CoreSchema, *, field_name: str | None = None, ref: str | None = None, json_schema_input_schema: CoreSchema | None = None, metadata: dict[str, Any] | None = None, serialization: SerSchema | None = None, ) -> BeforeValidatorFunctionSchema: """ Returns a schema that calls a validator function before validation, the function is called with an `info` argument, e.g.: ```py from pydantic_core import SchemaValidator, core_schema def fn(v: bytes, info: core_schema.ValidationInfo) -> str: assert info.data is not None assert info.field_name is not None return v.decode() + 'world' func_schema = core_schema.with_info_before_validator_function( function=fn, schema=core_schema.str_schema() ) schema = core_schema.typed_dict_schema({'a': core_schema.typed_dict_field(func_schema)}) v = SchemaValidator(schema) assert v.validate_python({'a': b'hello '}) == {'a': 'hello world'} ``` Args: function: The validator function to call field_name: The name of the field this validator is applied to, if any (deprecated) schema: The schema to validate the output of the validator function ref: optional unique identifier of the schema, used to reference the schema in other places json_schema_input_schema: The core schema to be used to generate the corresponding JSON Schema input type metadata: Any other information you want to include with the schema, not used by pydantic-core serialization: Custom serialization schema """ if field_name is not None: warnings.warn( 'The `field_name` argument on `with_info_before_validator_function` is deprecated, it will be passed to the function through `ValidationState` instead.', DeprecationWarning, stacklevel=2, ) return _dict_not_none( type='function-before', function=_dict_not_none(type='with-info', function=function, field_name=field_name), schema=schema, ref=ref, json_schema_input_schema=json_schema_input_schema, metadata=metadata, serialization=serialization, ) class AfterValidatorFunctionSchema(_ValidatorFunctionSchema, total=False): type: Required[Literal['function-after']] def no_info_after_validator_function( function: NoInfoValidatorFunction, schema: CoreSchema, *, ref: str | None = None, json_schema_input_schema: CoreSchema | None = None, metadata: dict[str, Any] | None = None, serialization: SerSchema | None = None, ) -> AfterValidatorFunctionSchema: """ Returns a schema that calls a validator function after validating, no `info` argument is provided, e.g.: ```py from pydantic_core import SchemaValidator, core_schema def fn(v: str) -> str: return v + 'world' func_schema = core_schema.no_info_after_validator_function(fn, core_schema.str_schema()) schema = core_schema.typed_dict_schema({'a': core_schema.typed_dict_field(func_schema)}) v = SchemaValidator(schema) assert v.validate_python({'a': b'hello '}) == {'a': 'hello world'} ``` Args: function: The validator function to call after the schema is validated schema: The schema to validate before the validator function ref: optional unique identifier of the schema, used to reference the schema in other places json_schema_input_schema: The core schema to be used to generate the corresponding JSON Schema input type metadata: Any other information you want to include with the schema, not used by pydantic-core serialization: Custom serialization schema """ return _dict_not_none( type='function-after', function={'type': 'no-info', 'function': function}, schema=schema, ref=ref, json_schema_input_schema=json_schema_input_schema, metadata=metadata, serialization=serialization, ) @overload @deprecated( 'The `field_name` argument on `with_info_after_validator_function` is deprecated, ' 'it will be passed to the function through `ValidationState` instead.' ) def with_info_after_validator_function( function: WithInfoValidatorFunction, schema: CoreSchema, *, field_name: str | None, ref: str | None = None, metadata: dict[str, Any] | None = None, serialization: SerSchema | None = None, ) -> AfterValidatorFunctionSchema: ... @overload def with_info_after_validator_function( function: WithInfoValidatorFunction, schema: CoreSchema, *, ref: str | None = None, metadata: dict[str, Any] | None = None, serialization: SerSchema | None = None, ) -> AfterValidatorFunctionSchema: ... def with_info_after_validator_function( function: WithInfoValidatorFunction, schema: CoreSchema, *, field_name: str | None = None, ref: str | None = None, metadata: dict[str, Any] | None = None, serialization: SerSchema | None = None, ) -> AfterValidatorFunctionSchema: """ Returns a schema that calls a validator function after validation, the function is called with an `info` argument, e.g.: ```py from pydantic_core import SchemaValidator, core_schema def fn(v: str, info: core_schema.ValidationInfo) -> str: assert info.data is not None assert info.field_name is not None return v + 'world' func_schema = core_schema.with_info_after_validator_function( function=fn, schema=core_schema.str_schema() ) schema = core_schema.typed_dict_schema({'a': core_schema.typed_dict_field(func_schema)}) v = SchemaValidator(schema) assert v.validate_python({'a': b'hello '}) == {'a': 'hello world'} ``` Args: function: The validator function to call after the schema is validated schema: The schema to validate before the validator function field_name: The name of the field this validator is applied to, if any (deprecated) ref: optional unique identifier of the schema, used to reference the schema in other places metadata: Any other information you want to include with the schema, not used by pydantic-core serialization: Custom serialization schema """ if field_name is not None: warnings.warn( 'The `field_name` argument on `with_info_after_validator_function` is deprecated, it will be passed to the function through `ValidationState` instead.', DeprecationWarning, stacklevel=2, ) return _dict_not_none( type='function-after', function=_dict_not_none(type='with-info', function=function, field_name=field_name), schema=schema, ref=ref, metadata=metadata, serialization=serialization, ) class ValidatorFunctionWrapHandler(Protocol): def __call__(self, input_value: Any, outer_location: str | int | None = None, /) -> Any: # pragma: no cover ... # (input_value: Any, validator: ValidatorFunctionWrapHandler, /) -> Any NoInfoWrapValidatorFunction: TypeAlias = Callable[[Any, ValidatorFunctionWrapHandler], Any] class NoInfoWrapValidatorFunctionSchema(TypedDict): type: Literal['no-info'] function: NoInfoWrapValidatorFunction # (input_value: Any, validator: ValidatorFunctionWrapHandler, info: ValidationInfo, /) -> Any WithInfoWrapValidatorFunction: TypeAlias = Callable[[Any, ValidatorFunctionWrapHandler, ValidationInfo[Any]], Any] class WithInfoWrapValidatorFunctionSchema(TypedDict, total=False): type: Required[Literal['with-info']] function: Required[WithInfoWrapValidatorFunction] field_name: str # deprecated WrapValidatorFunction: TypeAlias = NoInfoWrapValidatorFunctionSchema | WithInfoWrapValidatorFunctionSchema class WrapValidatorFunctionSchema(TypedDict, total=False): type: Required[Literal['function-wrap']] function: Required[WrapValidatorFunction] schema: Required[CoreSchema] ref: str json_schema_input_schema: CoreSchema metadata: dict[str, Any] serialization: SerSchema def no_info_wrap_validator_function( function: NoInfoWrapValidatorFunction, schema: CoreSchema, *, ref: str | None = None, json_schema_input_schema: CoreSchema | None = None, metadata: dict[str, Any] | None = None, serialization: SerSchema | None = None, ) -> WrapValidatorFunctionSchema: """ Returns a schema which calls a function with a `validator` callable argument which can optionally be used to call inner validation with the function logic, this is much like the "onion" implementation of middleware in many popular web frameworks, no `info` argument is passed, e.g.: ```py from pydantic_core import SchemaValidator, core_schema def fn( v: str, validator: core_schema.ValidatorFunctionWrapHandler, ) -> str: return validator(input_value=v) + 'world' schema = core_schema.no_info_wrap_validator_function( function=fn, schema=core_schema.str_schema() ) v = SchemaValidator(schema) assert v.validate_python('hello ') == 'hello world' ``` Args: function: The validator function to call schema: The schema to validate the output of the validator function ref: optional unique identifier of the schema, used to reference the schema in other places json_schema_input_schema: The core schema to be used to generate the corresponding JSON Schema input type metadata: Any other information you want to include with the schema, not used by pydantic-core serialization: Custom serialization schema """ return _dict_not_none( type='function-wrap', function={'type': 'no-info', 'function': function}, schema=schema, json_schema_input_schema=json_schema_input_schema, ref=ref, metadata=metadata, serialization=serialization, ) @overload @deprecated( 'The `field_name` argument on `with_info_wrap_validator_function` is deprecated, ' 'it will be passed to the function through `ValidationState` instead.' ) def with_info_wrap_validator_function( function: WithInfoWrapValidatorFunction, schema: CoreSchema, *, field_name: str | None, json_schema_input_schema: CoreSchema | None = None, ref: str | None = None, metadata: dict[str, Any] | None = None, serialization: SerSchema | None = None, ) -> WrapValidatorFunctionSchema: ... @overload def with_info_wrap_validator_function( function: WithInfoWrapValidatorFunction, schema: CoreSchema, *, json_schema_input_schema: CoreSchema | None = None, ref: str | None = None, metadata: dict[str, Any] | None = None, serialization: SerSchema | None = None, ) -> WrapValidatorFunctionSchema: ... def with_info_wrap_validator_function( function: WithInfoWrapValidatorFunction, schema: CoreSchema, *, field_name: str | None = None, json_schema_input_schema: CoreSchema | None = None, ref: str | None = None, metadata: dict[str, Any] | None = None, serialization: SerSchema | None = None, ) -> WrapValidatorFunctionSchema: """ Returns a schema which calls a function with a `validator` callable argument which can optionally be used to call inner validation with the function logic, this is much like the "onion" implementation of middleware in many popular web frameworks, an `info` argument is also passed, e.g.: ```py from pydantic_core import SchemaValidator, core_schema def fn( v: str, validator: core_schema.ValidatorFunctionWrapHandler, info: core_schema.ValidationInfo, ) -> str: return validator(input_value=v) + 'world' schema = core_schema.with_info_wrap_validator_function( function=fn, schema=core_schema.str_schema() ) v = SchemaValidator(schema) assert v.validate_python('hello ') == 'hello world' ``` Args: function: The validator function to call schema: The schema to validate the output of the validator function field_name: The name of the field this validator is applied to, if any (deprecated) json_schema_input_schema: The core schema to be used to generate the corresponding JSON Schema input type ref: optional unique identifier of the schema, used to reference the schema in other places metadata: Any other information you want to include with the schema, not used by pydantic-core serialization: Custom serialization schema """ if field_name is not None: warnings.warn( 'The `field_name` argument on `with_info_wrap_validator_function` is deprecated, it will be passed to the function through `ValidationState` instead.', DeprecationWarning, stacklevel=2, ) return _dict_not_none( type='function-wrap', function=_dict_not_none(type='with-info', function=function, field_name=field_name), schema=schema, json_schema_input_schema=json_schema_input_schema, ref=ref, metadata=metadata, serialization=serialization, ) class PlainValidatorFunctionSchema(TypedDict, total=False): type: Required[Literal['function-plain']] function: Required[ValidationFunction] ref: str json_schema_input_schema: CoreSchema metadata: dict[str, Any] serialization: SerSchema def no_info_plain_validator_function( function: NoInfoValidatorFunction, *, ref: str | None = None, json_schema_input_schema: CoreSchema | None = None, metadata: dict[str, Any] | None = None, serialization: SerSchema | None = None, ) -> PlainValidatorFunctionSchema: """ Returns a schema that uses the provided function for validation, no `info` argument is passed, e.g.: ```py from pydantic_core import SchemaValidator, core_schema def fn(v: str) -> str: assert 'hello' in v return v + 'world' schema = core_schema.no_info_plain_validator_function(function=fn) v = SchemaValidator(schema) assert v.validate_python('hello ') == 'hello world' ``` Args: function: The validator function to call ref: optional unique identifier of the schema, used to reference the schema in other places json_schema_input_schema: The core schema to be used to generate the corresponding JSON Schema input type metadata: Any other information you want to include with the schema, not used by pydantic-core serialization: Custom serialization schema """ return _dict_not_none( type='function-plain', function={'type': 'no-info', 'function': function}, ref=ref, json_schema_input_schema=json_schema_input_schema, metadata=metadata, serialization=serialization, ) @overload @deprecated( 'The `field_name` argument on `with_info_plain_validator_function` is deprecated, ' 'it will be passed to the function through `ValidationState` instead.' ) def with_info_plain_validator_function( function: WithInfoValidatorFunction, *, field_name: str | None, ref: str | None = None, json_schema_input_schema: CoreSchema | None = None, metadata: dict[str, Any] | None = None, serialization: SerSchema | None = None, ) -> PlainValidatorFunctionSchema: ... @overload def with_info_plain_validator_function( function: WithInfoValidatorFunction, *, ref: str | None = None, json_schema_input_schema: CoreSchema | None = None, metadata: dict[str, Any] | None = None, serialization: SerSchema | None = None, ) -> PlainValidatorFunctionSchema: ... def with_info_plain_validator_function( function: WithInfoValidatorFunction, *, field_name: str | None = None, ref: str | None = None, json_schema_input_schema: CoreSchema | None = None, metadata: dict[str, Any] | None = None, serialization: SerSchema | None = None, ) -> PlainValidatorFunctionSchema: """ Returns a schema that uses the provided function for validation, an `info` argument is passed, e.g.: ```py from pydantic_core import SchemaValidator, core_schema def fn(v: str, info: core_schema.ValidationInfo) -> str: assert 'hello' in v return v + 'world' schema = core_schema.with_info_plain_validator_function(function=fn) v = SchemaValidator(schema) assert v.validate_python('hello ') == 'hello world' ``` Args: function: The validator function to call field_name: The name of the field this validator is applied to, if any (deprecated) ref: optional unique identifier of the schema, used to reference the schema in other places json_schema_input_schema: The core schema to be used to generate the corresponding JSON Schema input type metadata: Any other information you want to include with the schema, not used by pydantic-core serialization: Custom serialization schema """ if field_name is not None: warnings.warn( 'The `field_name` argument on `with_info_plain_validator_function` is deprecated, it will be passed to the function through `ValidationState` instead.', DeprecationWarning, stacklevel=2, ) return _dict_not_none( type='function-plain', function=_dict_not_none(type='with-info', function=function, field_name=field_name), ref=ref, json_schema_input_schema=json_schema_input_schema, metadata=metadata, serialization=serialization, ) class WithDefaultSchema(TypedDict, total=False): type: Required[Literal['default']] schema: Required[CoreSchema] default: Any default_factory: Callable[[], Any] | Callable[[dict[str, Any]], Any] default_factory_takes_data: bool on_error: Literal['raise', 'omit', 'default'] # default: 'raise' validate_default: bool # default: False strict: bool ref: str metadata: dict[str, Any] serialization: SerSchema def with_default_schema( schema: CoreSchema, *, default: Any = PydanticUndefined, default_factory: Callable[[], Any] | Callable[[dict[str, Any]], Any] | None = None, default_factory_takes_data: bool | None = None, on_error: Literal['raise', 'omit', 'default'] | None = None, validate_default: bool | None = None, strict: bool | None = None, ref: str | None = None, metadata: dict[str, Any] | None = None, serialization: SerSchema | None = None, ) -> WithDefaultSchema: """ Returns a schema that adds a default value to the given schema, e.g.: ```py from pydantic_core import SchemaValidator, core_schema schema = core_schema.with_default_schema(core_schema.str_schema(), default='hello') wrapper_schema = core_schema.typed_dict_schema( {'a': core_schema.typed_dict_field(schema)} ) v = SchemaValidator(wrapper_schema) assert v.validate_python({}) == v.validate_python({'a': 'hello'}) ``` Args: schema: The schema to add a default value to default: The default value to use default_factory: A callable that returns the default value to use default_factory_takes_data: Whether the default factory takes a validated data argument on_error: What to do if the schema validation fails. One of 'raise', 'omit', 'default' validate_default: Whether the default value should be validated strict: Whether the underlying schema should be validated with strict mode ref: optional unique identifier of the schema, used to reference the schema in other places metadata: Any other information you want to include with the schema, not used by pydantic-core serialization: Custom serialization schema """ s = _dict_not_none( type='default', schema=schema, default_factory=default_factory, default_factory_takes_data=default_factory_takes_data, on_error=on_error, validate_default=validate_default, strict=strict, ref=ref, metadata=metadata, serialization=serialization, ) if default is not PydanticUndefined: s['default'] = default return s class NullableSchema(TypedDict, total=False): type: Required[Literal['nullable']] schema: Required[CoreSchema] strict: bool ref: str metadata: dict[str, Any] serialization: SerSchema def nullable_schema( schema: CoreSchema, *, strict: bool | None = None, ref: str | None = None, metadata: dict[str, Any] | None = None, serialization: SerSchema | None = None, ) -> NullableSchema: """ Returns a schema that matches a nullable value, e.g.: ```py from pydantic_core import SchemaValidator, core_schema schema = core_schema.nullable_schema(core_schema.str_schema()) v = SchemaValidator(schema) assert v.validate_python(None) is None ``` Args: schema: The schema to wrap strict: Whether the underlying schema should be validated with strict mode ref: optional unique identifier of the schema, used to reference the schema in other places metadata: Any other information you want to include with the schema, not used by pydantic-core serialization: Custom serialization schema """ return _dict_not_none( type='nullable', schema=schema, strict=strict, ref=ref, metadata=metadata, serialization=serialization ) class UnionSchema(TypedDict, total=False): type: Required[Literal['union']] choices: Required[list[CoreSchema | tuple[CoreSchema, str]]] # default true, whether to automatically collapse unions with one element to the inner validator auto_collapse: bool custom_error_type: str custom_error_message: str custom_error_context: dict[str, str | int | float] mode: Literal['smart', 'left_to_right'] # default: 'smart' strict: bool ref: str metadata: dict[str, Any] serialization: SerSchema def union_schema( choices: list[CoreSchema | tuple[CoreSchema, str]], *, auto_collapse: bool | None = None, custom_error_type: str | None = None, custom_error_message: str | None = None, custom_error_context: dict[str, str | int] | None = None, mode: Literal['smart', 'left_to_right'] | None = None, ref: str | None = None, metadata: dict[str, Any] | None = None, serialization: SerSchema | None = None, ) -> UnionSchema: """ Returns a schema that matches a union value, e.g.: ```py from pydantic_core import SchemaValidator, core_schema schema = core_schema.union_schema([core_schema.str_schema(), core_schema.int_schema()]) v = SchemaValidator(schema) assert v.validate_python('hello') == 'hello' assert v.validate_python(1) == 1 ``` Args: choices: The schemas to match. If a tuple, the second item is used as the label for the case. auto_collapse: whether to automatically collapse unions with one element to the inner validator, default true custom_error_type: The custom error type to use if the validation fails custom_error_message: The custom error message to use if the validation fails custom_error_context: The custom error context to use if the validation fails mode: How to select which choice to return * `smart` (default) will try to return the choice which is the closest match to the input value * `left_to_right` will return the first choice in `choices` which succeeds validation ref: optional unique identifier of the schema, used to reference the schema in other places metadata: Any other information you want to include with the schema, not used by pydantic-core serialization: Custom serialization schema """ return _dict_not_none( type='union', choices=choices, auto_collapse=auto_collapse, custom_error_type=custom_error_type, custom_error_message=custom_error_message, custom_error_context=custom_error_context, mode=mode, ref=ref, metadata=metadata, serialization=serialization, ) class TaggedUnionSchema(TypedDict, total=False): type: Required[Literal['tagged-union']] choices: Required[dict[Any, CoreSchema]] discriminator: Required[str | list[str | int] | list[list[str | int]] | Callable[[Any], Any]] custom_error_type: str custom_error_message: str custom_error_context: dict[str, str | int | float] strict: bool from_attributes: bool # default: True ref: str metadata: dict[str, Any] serialization: SerSchema def tagged_union_schema( choices: dict[Any, CoreSchema], discriminator: str | list[str | int] | list[list[str | int]] | Callable[[Any], Any], *, custom_error_type: str | None = None, custom_error_message: str | None = None, custom_error_context: dict[str, int | str | float] | None = None, strict: bool | None = None, from_attributes: bool | None = None, ref: str | None = None, metadata: dict[str, Any] | None = None, serialization: SerSchema | None = None, ) -> TaggedUnionSchema: """ Returns a schema that matches a tagged union value, e.g.: ```py from pydantic_core import SchemaValidator, core_schema apple_schema = core_schema.typed_dict_schema( { 'foo': core_schema.typed_dict_field(core_schema.str_schema()), 'bar': core_schema.typed_dict_field(core_schema.int_schema()), } ) banana_schema = core_schema.typed_dict_schema( { 'foo': core_schema.typed_dict_field(core_schema.str_schema()), 'spam': core_schema.typed_dict_field( core_schema.list_schema(items_schema=core_schema.int_schema()) ), } ) schema = core_schema.tagged_union_schema( choices={ 'apple': apple_schema, 'banana': banana_schema, }, discriminator='foo', ) v = SchemaValidator(schema) assert v.validate_python({'foo': 'apple', 'bar': '123'}) == {'foo': 'apple', 'bar': 123} assert v.validate_python({'foo': 'banana', 'spam': [1, 2, 3]}) == { 'foo': 'banana', 'spam': [1, 2, 3], } ``` Args: choices: The schemas to match When retrieving a schema from `choices` using the discriminator value, if the value is a str, it should be fed back into the `choices` map until a schema is obtained (This approach is to prevent multiple ownership of a single schema in Rust) discriminator: The discriminator to use to determine the schema to use * If `discriminator` is a str, it is the name of the attribute to use as the discriminator * If `discriminator` is a list of int/str, it should be used as a "path" to access the discriminator * If `discriminator` is a list of lists, each inner list is a path, and the first path that exists is used * If `discriminator` is a callable, it should return the discriminator when called on the value to validate; the callable can return `None` to indicate that there is no matching discriminator present on the input custom_error_type: The custom error type to use if the validation fails custom_error_message: The custom error message to use if the validation fails custom_error_context: The custom error context to use if the validation fails strict: Whether the underlying schemas should be validated with strict mode from_attributes: Whether to use the attributes of the object to retrieve the discriminator value ref: optional unique identifier of the schema, used to reference the schema in other places metadata: Any other information you want to include with the schema, not used by pydantic-core serialization: Custom serialization schema """ return _dict_not_none( type='tagged-union', choices=choices, discriminator=discriminator, custom_error_type=custom_error_type, custom_error_message=custom_error_message, custom_error_context=custom_error_context, strict=strict, from_attributes=from_attributes, ref=ref, metadata=metadata, serialization=serialization, ) class ChainSchema(TypedDict, total=False): type: Required[Literal['chain']] steps: Required[list[CoreSchema]] ref: str metadata: dict[str, Any] serialization: SerSchema def chain_schema( steps: list[CoreSchema], *, ref: str | None = None, metadata: dict[str, Any] | None = None, serialization: SerSchema | None = None, ) -> ChainSchema: """ Returns a schema that chains the provided validation schemas, e.g.: ```py from pydantic_core import SchemaValidator, core_schema def fn(v: str, info: core_schema.ValidationInfo) -> str: assert 'hello' in v return v + ' world' fn_schema = core_schema.with_info_plain_validator_function(function=fn) schema = core_schema.chain_schema( [fn_schema, fn_schema, fn_schema, core_schema.str_schema()] ) v = SchemaValidator(schema) assert v.validate_python('hello') == 'hello world world world' ``` Args: steps: The schemas to chain ref: optional unique identifier of the schema, used to reference the schema in other places metadata: Any other information you want to include with the schema, not used by pydantic-core serialization: Custom serialization schema """ return _dict_not_none(type='chain', steps=steps, ref=ref, metadata=metadata, serialization=serialization) class LaxOrStrictSchema(TypedDict, total=False): type: Required[Literal['lax-or-strict']] lax_schema: Required[CoreSchema] strict_schema: Required[CoreSchema] strict: bool ref: str metadata: dict[str, Any] serialization: SerSchema def lax_or_strict_schema( lax_schema: CoreSchema, strict_schema: CoreSchema, *, strict: bool | None = None, ref: str | None = None, metadata: dict[str, Any] | None = None, serialization: SerSchema | None = None, ) -> LaxOrStrictSchema: """ Returns a schema that uses the lax or strict schema, e.g.: ```py from pydantic_core import SchemaValidator, core_schema def fn(v: str, info: core_schema.ValidationInfo) -> str: assert 'hello' in v return v + ' world' lax_schema = core_schema.int_schema(strict=False) strict_schema = core_schema.int_schema(strict=True) schema = core_schema.lax_or_strict_schema( lax_schema=lax_schema, strict_schema=strict_schema, strict=True ) v = SchemaValidator(schema) assert v.validate_python(123) == 123 schema = core_schema.lax_or_strict_schema( lax_schema=lax_schema, strict_schema=strict_schema, strict=False ) v = SchemaValidator(schema) assert v.validate_python('123') == 123 ``` Args: lax_schema: The lax schema to use strict_schema: The strict schema to use strict: Whether the strict schema should be used ref: optional unique identifier of the schema, used to reference the schema in other places metadata: Any other information you want to include with the schema, not used by pydantic-core serialization: Custom serialization schema """ return _dict_not_none( type='lax-or-strict', lax_schema=lax_schema, strict_schema=strict_schema, strict=strict, ref=ref, metadata=metadata, serialization=serialization, ) class JsonOrPythonSchema(TypedDict, total=False): type: Required[Literal['json-or-python']] json_schema: Required[CoreSchema] python_schema: Required[CoreSchema] ref: str metadata: dict[str, Any] serialization: SerSchema def json_or_python_schema( json_schema: CoreSchema, python_schema: CoreSchema, *, ref: str | None = None, metadata: dict[str, Any] | None = None, serialization: SerSchema | None = None, ) -> JsonOrPythonSchema: """ Returns a schema that uses the Json or Python schema depending on the input: ```py from pydantic_core import SchemaValidator, ValidationError, core_schema v = SchemaValidator( core_schema.json_or_python_schema( json_schema=core_schema.int_schema(), python_schema=core_schema.int_schema(strict=True), ) ) assert v.validate_json('"123"') == 123 try: v.validate_python('123') except ValidationError: pass else: raise AssertionError('Validation should have failed') ``` Args: json_schema: The schema to use for Json inputs python_schema: The schema to use for Python inputs ref: optional unique identifier of the schema, used to reference the schema in other places metadata: Any other information you want to include with the schema, not used by pydantic-core serialization: Custom serialization schema """ return _dict_not_none( type='json-or-python', json_schema=json_schema, python_schema=python_schema, ref=ref, metadata=metadata, serialization=serialization, ) class TypedDictField(TypedDict, total=False): type: Required[Literal['typed-dict-field']] schema: Required[CoreSchema] required: bool validation_alias: str | list[str | int] | list[list[str | int]] serialization_alias: str serialization_exclude: bool # default: False metadata: dict[str, Any] serialization_exclude_if: Callable[[Any], bool] # default None def typed_dict_field( schema: CoreSchema, *, required: bool | None = None, validation_alias: str | list[str | int] | list[list[str | int]] | None = None, serialization_alias: str | None = None, serialization_exclude: bool | None = None, metadata: dict[str, Any] | None = None, serialization_exclude_if: Callable[[Any], bool] | None = None, ) -> TypedDictField: """ Returns a schema that matches a typed dict field, e.g.: ```py from pydantic_core import core_schema field = core_schema.typed_dict_field(schema=core_schema.int_schema(), required=True) ``` Args: schema: The schema to use for the field required: Whether the field is required, otherwise uses the value from `total` on the typed dict validation_alias: The alias(es) to use to find the field in the validation data serialization_alias: The alias to use as a key when serializing serialization_exclude: Whether to exclude the field when serializing serialization_exclude_if: A callable that determines whether to exclude the field when serializing based on its value. metadata: Any other information you want to include with the schema, not used by pydantic-core """ return _dict_not_none( type='typed-dict-field', schema=schema, required=required, validation_alias=validation_alias, serialization_alias=serialization_alias, serialization_exclude=serialization_exclude, serialization_exclude_if=serialization_exclude_if, metadata=metadata, ) class TypedDictSchema(TypedDict, total=False): type: Required[Literal['typed-dict']] fields: Required[dict[str, TypedDictField]] cls: type[Any] cls_name: str computed_fields: list[ComputedField] strict: bool extras_schema: CoreSchema # all these values can be set via config, equivalent fields have `typed_dict_` prefix extra_behavior: ExtraBehavior total: bool # default: True ref: str metadata: dict[str, Any] serialization: SerSchema config: CoreConfig def typed_dict_schema( fields: dict[str, TypedDictField], *, cls: type[Any] | None = None, cls_name: str | None = None, computed_fields: list[ComputedField] | None = None, strict: bool | None = None, extras_schema: CoreSchema | None = None, extra_behavior: ExtraBehavior | None = None, total: bool | None = None, ref: str | None = None, metadata: dict[str, Any] | None = None, serialization: SerSchema | None = None, config: CoreConfig | None = None, ) -> TypedDictSchema: """ Returns a schema that matches a typed dict, e.g.: ```py from typing_extensions import TypedDict from pydantic_core import SchemaValidator, core_schema class MyTypedDict(TypedDict): a: str wrapper_schema = core_schema.typed_dict_schema( {'a': core_schema.typed_dict_field(core_schema.str_schema())}, cls=MyTypedDict ) v = SchemaValidator(wrapper_schema) assert v.validate_python({'a': 'hello'}) == {'a': 'hello'} ``` Args: fields: The fields to use for the typed dict cls: The class to use for the typed dict cls_name: The name to use in error locations. Falls back to `cls.__name__`, or the validator name if no class is provided. computed_fields: Computed fields to use when serializing the model, only applies when directly inside a model strict: Whether the typed dict is strict extras_schema: The extra validator to use for the typed dict ref: optional unique identifier of the schema, used to reference the schema in other places metadata: Any other information you want to include with the schema, not used by pydantic-core extra_behavior: The extra behavior to use for the typed dict total: Whether the typed dict is total, otherwise uses `typed_dict_total` from config serialization: Custom serialization schema """ return _dict_not_none( type='typed-dict', fields=fields, cls=cls, cls_name=cls_name, computed_fields=computed_fields, strict=strict, extras_schema=extras_schema, extra_behavior=extra_behavior, total=total, ref=ref, metadata=metadata, serialization=serialization, config=config, ) class ModelField(TypedDict, total=False): type: Required[Literal['model-field']] schema: Required[CoreSchema] validation_alias: str | list[str | int] | list[list[str | int]] serialization_alias: str serialization_exclude: bool # default: False serialization_exclude_if: Callable[[Any], bool] # default: None frozen: bool metadata: dict[str, Any] def model_field( schema: CoreSchema, *, validation_alias: str | list[str | int] | list[list[str | int]] | None = None, serialization_alias: str | None = None, serialization_exclude: bool | None = None, serialization_exclude_if: Callable[[Any], bool] | None = None, frozen: bool | None = None, metadata: dict[str, Any] | None = None, ) -> ModelField: """ Returns a schema for a model field, e.g.: ```py from pydantic_core import core_schema field = core_schema.model_field(schema=core_schema.int_schema()) ``` Args: schema: The schema to use for the field validation_alias: The alias(es) to use to find the field in the validation data serialization_alias: The alias to use as a key when serializing serialization_exclude: Whether to exclude the field when serializing serialization_exclude_if: A Callable that determines whether to exclude a field during serialization based on its value. frozen: Whether the field is frozen metadata: Any other information you want to include with the schema, not used by pydantic-core """ return _dict_not_none( type='model-field', schema=schema, validation_alias=validation_alias, serialization_alias=serialization_alias, serialization_exclude=serialization_exclude, serialization_exclude_if=serialization_exclude_if, frozen=frozen, metadata=metadata, ) class ModelFieldsSchema(TypedDict, total=False): type: Required[Literal['model-fields']] fields: Required[dict[str, ModelField]] model_name: str computed_fields: list[ComputedField] strict: bool extras_schema: CoreSchema extras_keys_schema: CoreSchema extra_behavior: ExtraBehavior from_attributes: bool ref: str metadata: dict[str, Any] serialization: SerSchema def model_fields_schema( fields: dict[str, ModelField], *, model_name: str | None = None, computed_fields: list[ComputedField] | None = None, strict: bool | None = None, extras_schema: CoreSchema | None = None, extras_keys_schema: CoreSchema | None = None, extra_behavior: ExtraBehavior | None = None, from_attributes: bool | None = None, ref: str | None = None, metadata: dict[str, Any] | None = None, serialization: SerSchema | None = None, ) -> ModelFieldsSchema: """ Returns a schema that matches the fields of a Pydantic model, e.g.: ```py from pydantic_core import SchemaValidator, core_schema wrapper_schema = core_schema.model_fields_schema( {'a': core_schema.model_field(core_schema.str_schema())} ) v = SchemaValidator(wrapper_schema) print(v.validate_python({'a': 'hello'})) #> ({'a': 'hello'}, None, {'a'}) ``` Args: fields: The fields of the model model_name: The name of the model, used for error messages, defaults to "Model" computed_fields: Computed fields to use when serializing the model, only applies when directly inside a model strict: Whether the model is strict extras_schema: The schema to use when validating extra input data extras_keys_schema: The schema to use when validating the keys of extra input data ref: optional unique identifier of the schema, used to reference the schema in other places metadata: Any other information you want to include with the schema, not used by pydantic-core extra_behavior: The extra behavior to use for the model fields from_attributes: Whether the model fields should be populated from attributes serialization: Custom serialization schema """ return _dict_not_none( type='model-fields', fields=fields, model_name=model_name, computed_fields=computed_fields, strict=strict, extras_schema=extras_schema, extras_keys_schema=extras_keys_schema, extra_behavior=extra_behavior, from_attributes=from_attributes, ref=ref, metadata=metadata, serialization=serialization, ) class ModelSchema(TypedDict, total=False): type: Required[Literal['model']] cls: Required[type[Any]] generic_origin: type[Any] schema: Required[CoreSchema] custom_init: bool root_model: bool post_init: str revalidate_instances: Literal['always', 'never', 'subclass-instances'] # default: 'never' strict: bool frozen: bool extra_behavior: ExtraBehavior config: CoreConfig ref: str metadata: dict[str, Any] serialization: SerSchema def model_schema( cls: type[Any], schema: CoreSchema, *, generic_origin: type[Any] | None = None, custom_init: bool | None = None, root_model: bool | None = None, post_init: str | None = None, revalidate_instances: Literal['always', 'never', 'subclass-instances'] | None = None, strict: bool | None = None, frozen: bool | None = None, extra_behavior: ExtraBehavior | None = None, config: CoreConfig | None = None, ref: str | None = None, metadata: dict[str, Any] | None = None, serialization: SerSchema | None = None, ) -> ModelSchema: """ A model schema generally contains a typed-dict schema. It will run the typed dict validator, then create a new class and set the dict and fields set returned from the typed dict validator to `__dict__` and `__pydantic_fields_set__` respectively. Example: ```py from pydantic_core import CoreConfig, SchemaValidator, core_schema class MyModel: __slots__ = ( '__dict__', '__pydantic_fields_set__', '__pydantic_extra__', '__pydantic_private__', ) schema = core_schema.model_schema( cls=MyModel, config=CoreConfig(str_max_length=5), schema=core_schema.model_fields_schema( fields={'a': core_schema.model_field(core_schema.str_schema())}, ), ) v = SchemaValidator(schema) assert v.isinstance_python({'a': 'hello'}) is True assert v.isinstance_python({'a': 'too long'}) is False ``` Args: cls: The class to use for the model schema: The schema to use for the model generic_origin: The origin type used for this model, if it's a parametrized generic. Ex, if this model schema represents `SomeModel[int]`, generic_origin is `SomeModel` custom_init: Whether the model has a custom init method root_model: Whether the model is a `RootModel` post_init: The call after init to use for the model revalidate_instances: whether instances of models and dataclasses (including subclass instances) should re-validate defaults to config.revalidate_instances, else 'never' strict: Whether the model is strict frozen: Whether the model is frozen extra_behavior: The extra behavior to use for the model, used in serialization config: The config to use for the model ref: optional unique identifier of the schema, used to reference the schema in other places metadata: Any other information you want to include with the schema, not used by pydantic-core serialization: Custom serialization schema """ return _dict_not_none( type='model', cls=cls, generic_origin=generic_origin, schema=schema, custom_init=custom_init, root_model=root_model, post_init=post_init, revalidate_instances=revalidate_instances, strict=strict, frozen=frozen, extra_behavior=extra_behavior, config=config, ref=ref, metadata=metadata, serialization=serialization, ) class DataclassField(TypedDict, total=False): type: Required[Literal['dataclass-field']] name: Required[str] schema: Required[CoreSchema] kw_only: bool # default: True init: bool # default: True init_only: bool # default: False frozen: bool # default: False validation_alias: str | list[str | int] | list[list[str | int]] serialization_alias: str serialization_exclude: bool # default: False metadata: dict[str, Any] serialization_exclude_if: Callable[[Any], bool] # default: None def dataclass_field( name: str, schema: CoreSchema, *, kw_only: bool | None = None, init: bool | None = None, init_only: bool | None = None, validation_alias: str | list[str | int] | list[list[str | int]] | None = None, serialization_alias: str | None = None, serialization_exclude: bool | None = None, metadata: dict[str, Any] | None = None, serialization_exclude_if: Callable[[Any], bool] | None = None, frozen: bool | None = None, ) -> DataclassField: """ Returns a schema for a dataclass field, e.g.: ```py from pydantic_core import SchemaValidator, core_schema field = core_schema.dataclass_field( name='a', schema=core_schema.str_schema(), kw_only=False ) schema = core_schema.dataclass_args_schema('Foobar', [field]) v = SchemaValidator(schema) assert v.validate_python({'a': 'hello'}) == ({'a': 'hello'}, None) ``` Args: name: The name to use for the argument parameter schema: The schema to use for the argument parameter kw_only: Whether the field can be set with a positional argument as well as a keyword argument init: Whether the field should be validated during initialization init_only: Whether the field should be omitted from `__dict__` and passed to `__post_init__` validation_alias: The alias(es) to use to find the field in the validation data serialization_alias: The alias to use as a key when serializing serialization_exclude: Whether to exclude the field when serializing serialization_exclude_if: A callable that determines whether to exclude the field when serializing based on its value. metadata: Any other information you want to include with the schema, not used by pydantic-core frozen: Whether the field is frozen """ return _dict_not_none( type='dataclass-field', name=name, schema=schema, kw_only=kw_only, init=init, init_only=init_only, validation_alias=validation_alias, serialization_alias=serialization_alias, serialization_exclude=serialization_exclude, serialization_exclude_if=serialization_exclude_if, metadata=metadata, frozen=frozen, ) class DataclassArgsSchema(TypedDict, total=False): type: Required[Literal['dataclass-args']] dataclass_name: Required[str] fields: Required[list[DataclassField]] computed_fields: list[ComputedField] collect_init_only: bool # default: False ref: str metadata: dict[str, Any] serialization: SerSchema extra_behavior: ExtraBehavior def dataclass_args_schema( dataclass_name: str, fields: list[DataclassField], *, computed_fields: list[ComputedField] | None = None, collect_init_only: bool | None = None, ref: str | None = None, metadata: dict[str, Any] | None = None, serialization: SerSchema | None = None, extra_behavior: ExtraBehavior | None = None, ) -> DataclassArgsSchema: """ Returns a schema for validating dataclass arguments, e.g.: ```py from pydantic_core import SchemaValidator, core_schema field_a = core_schema.dataclass_field( name='a', schema=core_schema.str_schema(), kw_only=False ) field_b = core_schema.dataclass_field( name='b', schema=core_schema.bool_schema(), kw_only=False ) schema = core_schema.dataclass_args_schema('Foobar', [field_a, field_b]) v = SchemaValidator(schema) assert v.validate_python({'a': 'hello', 'b': True}) == ({'a': 'hello', 'b': True}, None) ``` Args: dataclass_name: The name of the dataclass being validated fields: The fields to use for the dataclass computed_fields: Computed fields to use when serializing the dataclass collect_init_only: Whether to collect init only fields into a dict to pass to `__post_init__` ref: optional unique identifier of the schema, used to reference the schema in other places metadata: Any other information you want to include with the schema, not used by pydantic-core serialization: Custom serialization schema extra_behavior: How to handle extra fields """ return _dict_not_none( type='dataclass-args', dataclass_name=dataclass_name, fields=fields, computed_fields=computed_fields, collect_init_only=collect_init_only, ref=ref, metadata=metadata, serialization=serialization, extra_behavior=extra_behavior, ) class DataclassSchema(TypedDict, total=False): type: Required[Literal['dataclass']] cls: Required[type[Any]] generic_origin: type[Any] schema: Required[CoreSchema] fields: Required[list[str]] cls_name: str post_init: bool # default: False revalidate_instances: Literal['always', 'never', 'subclass-instances'] # default: 'never' strict: bool # default: False frozen: bool # default False ref: str metadata: dict[str, Any] serialization: SerSchema slots: bool config: CoreConfig def dataclass_schema( cls: type[Any], schema: CoreSchema, fields: list[str], *, generic_origin: type[Any] | None = None, cls_name: str | None = None, post_init: bool | None = None, revalidate_instances: Literal['always', 'never', 'subclass-instances'] | None = None, strict: bool | None = None, ref: str | None = None, metadata: dict[str, Any] | None = None, serialization: SerSchema | None = None, frozen: bool | None = None, slots: bool | None = None, config: CoreConfig | None = None, ) -> DataclassSchema: """ Returns a schema for a dataclass. As with `ModelSchema`, this schema can only be used as a field within another schema, not as the root type. Args: cls: The dataclass type, used to perform subclass checks schema: The schema to use for the dataclass fields fields: Fields of the dataclass, this is used in serialization and in validation during re-validation and while validating assignment generic_origin: The origin type used for this dataclass, if it's a parametrized generic. Ex, if this model schema represents `SomeDataclass[int]`, generic_origin is `SomeDataclass` cls_name: The name to use in error locs, etc; this is useful for generics (default: `cls.__name__`) post_init: Whether to call `__post_init__` after validation revalidate_instances: whether instances of models and dataclasses (including subclass instances) should re-validate defaults to config.revalidate_instances, else 'never' strict: Whether to require an exact instance of `cls` ref: optional unique identifier of the schema, used to reference the schema in other places metadata: Any other information you want to include with the schema, not used by pydantic-core serialization: Custom serialization schema frozen: Whether the dataclass is frozen slots: Whether `slots=True` on the dataclass, means each field is assigned independently, rather than simply setting `__dict__`, default false """ return _dict_not_none( type='dataclass', cls=cls, generic_origin=generic_origin, fields=fields, cls_name=cls_name, schema=schema, post_init=post_init, revalidate_instances=revalidate_instances, strict=strict, ref=ref, metadata=metadata, serialization=serialization, frozen=frozen, slots=slots, config=config, ) class NamedTupleField(TypedDict, total=False): type: Required[Literal['named-tuple-field']] name: Required[str] schema: Required[CoreSchema] validation_alias: str | list[str | int] | list[list[str | int]] metadata: dict[str, Any] def named_tuple_field( name: str, schema: CoreSchema, *, validation_alias: str | list[str | int] | list[list[str | int]] | None = None, metadata: dict[str, Any] | None = None, ) -> NamedTupleField: """ Returns a schema for a named tuple field, e.g.: ```py from pydantic_core import core_schema field = core_schema.named_tuple_field(name='x', schema=core_schema.int_schema()) ``` Args: name: The name of the field schema: The schema to use for the field validation_alias: The alias(es) to use to find the field in the validation data, only used when validating from a dictionary or mapping metadata: Any other information you want to include with the schema, not used by pydantic-core """ return _dict_not_none( type='named-tuple-field', name=name, schema=schema, validation_alias=validation_alias, metadata=metadata, ) class NamedTupleSchema(TypedDict, total=False): type: Required[Literal['named-tuple']] cls: Required[type[Any]] fields: Required[list[NamedTupleField]] cls_name: str ref: str metadata: dict[str, Any] serialization: SerSchema def named_tuple_schema( cls: type[Any], fields: list[NamedTupleField], *, cls_name: str | None = None, ref: str | None = None, metadata: dict[str, Any] | None = None, serialization: SerSchema | None = None, ) -> NamedTupleSchema: """ Returns a schema for a named tuple, e.g.: ```py from typing import NamedTuple from pydantic_core import SchemaValidator, core_schema class Point(NamedTuple): x: int y: int schema = core_schema.named_tuple_schema( Point, [ core_schema.named_tuple_field(name='x', schema=core_schema.int_schema()), core_schema.named_tuple_field(name='y', schema=core_schema.int_schema()), ], ) v = SchemaValidator(schema) assert v.validate_python((1, '2')) == Point(x=1, y=2) ``` Fields are validated positionally when the input is a (named) tuple, list or JSON array, and by name when the input is a dictionary, mapping or JSON object. Instances of `cls` always revalidate. Strict mode is currently ignored, matching the behavior of the `'call'` core schema previously used for named tuples. Args: cls: The named tuple class, used to construct instances and perform instance checks fields: The fields to use for the named tuple, in order cls_name: The name to use in error locs, etc; this is useful for generics (default: `cls.__name__`) ref: optional unique identifier of the schema, used to reference the schema in other places metadata: Any other information you want to include with the schema, not used by pydantic-core serialization: Custom serialization schema """ return _dict_not_none( type='named-tuple', cls=cls, fields=fields, cls_name=cls_name, ref=ref, metadata=metadata, serialization=serialization, ) class ArgumentsParameter(TypedDict, total=False): name: Required[str] schema: Required[CoreSchema] mode: Literal['positional_only', 'positional_or_keyword', 'keyword_only'] # default positional_or_keyword alias: str | list[str | int] | list[list[str | int]] def arguments_parameter( name: str, schema: CoreSchema, *, mode: Literal['positional_only', 'positional_or_keyword', 'keyword_only'] | None = None, alias: str | list[str | int] | list[list[str | int]] | None = None, ) -> ArgumentsParameter: """ Returns a schema that matches an argument parameter, e.g.: ```py from pydantic_core import SchemaValidator, core_schema param = core_schema.arguments_parameter( name='a', schema=core_schema.str_schema(), mode='positional_only' ) schema = core_schema.arguments_schema([param]) v = SchemaValidator(schema) assert v.validate_python(('hello',)) == (('hello',), {}) ``` Args: name: The name to use for the argument parameter schema: The schema to use for the argument parameter mode: The mode to use for the argument parameter alias: The alias to use for the argument parameter """ return _dict_not_none(name=name, schema=schema, mode=mode, alias=alias) VarKwargsMode: TypeAlias = Literal['uniform', 'unpacked-typed-dict'] class ArgumentsSchema(TypedDict, total=False): type: Required[Literal['arguments']] arguments_schema: Required[list[ArgumentsParameter]] validate_by_name: bool validate_by_alias: bool var_args_schema: CoreSchema var_kwargs_mode: VarKwargsMode var_kwargs_schema: CoreSchema ref: str metadata: dict[str, Any] serialization: SerSchema def arguments_schema( arguments: list[ArgumentsParameter], *, validate_by_name: bool | None = None, validate_by_alias: bool | None = None, var_args_schema: CoreSchema | None = None, var_kwargs_mode: VarKwargsMode | None = None, var_kwargs_schema: CoreSchema | None = None, ref: str | None = None, metadata: dict[str, Any] | None = None, serialization: SerSchema | None = None, ) -> ArgumentsSchema: """ Returns a schema that matches an arguments schema, e.g.: ```py from pydantic_core import SchemaValidator, core_schema param_a = core_schema.arguments_parameter( name='a', schema=core_schema.str_schema(), mode='positional_only' ) param_b = core_schema.arguments_parameter( name='b', schema=core_schema.bool_schema(), mode='positional_only' ) schema = core_schema.arguments_schema([param_a, param_b]) v = SchemaValidator(schema) assert v.validate_python(('hello', True)) == (('hello', True), {}) ``` Args: arguments: The arguments to use for the arguments schema validate_by_name: Whether to populate by the parameter names, defaults to `False`. validate_by_alias: Whether to populate by the parameter aliases, defaults to `True`. var_args_schema: The variable args schema to use for the arguments schema var_kwargs_mode: The validation mode to use for variadic keyword arguments. If `'uniform'`, every value of the keyword arguments will be validated against the `var_kwargs_schema` schema. If `'unpacked-typed-dict'`, the `var_kwargs_schema` argument must be a [`typed_dict_schema`][pydantic_core.core_schema.typed_dict_schema] var_kwargs_schema: The variable kwargs schema to use for the arguments schema ref: optional unique identifier of the schema, used to reference the schema in other places metadata: Any other information you want to include with the schema, not used by pydantic-core serialization: Custom serialization schema """ return _dict_not_none( type='arguments', arguments_schema=arguments, validate_by_name=validate_by_name, validate_by_alias=validate_by_alias, var_args_schema=var_args_schema, var_kwargs_mode=var_kwargs_mode, var_kwargs_schema=var_kwargs_schema, ref=ref, metadata=metadata, serialization=serialization, ) class ArgumentsV3Parameter(TypedDict, total=False): name: Required[str] schema: Required[CoreSchema] mode: Literal[ 'positional_only', 'positional_or_keyword', 'keyword_only', 'var_args', 'var_kwargs_uniform', 'var_kwargs_unpacked_typed_dict', ] # default positional_or_keyword alias: str | list[str | int] | list[list[str | int]] def arguments_v3_parameter( name: str, schema: CoreSchema, *, mode: Literal[ 'positional_only', 'positional_or_keyword', 'keyword_only', 'var_args', 'var_kwargs_uniform', 'var_kwargs_unpacked_typed_dict', ] | None = None, alias: str | list[str | int] | list[list[str | int]] | None = None, ) -> ArgumentsV3Parameter: """ Returns a schema that matches an argument parameter, e.g.: ```py from pydantic_core import SchemaValidator, core_schema param = core_schema.arguments_v3_parameter( name='a', schema=core_schema.str_schema(), mode='positional_only' ) schema = core_schema.arguments_v3_schema([param]) v = SchemaValidator(schema) assert v.validate_python({'a': 'hello'}) == (('hello',), {}) ``` Args: name: The name to use for the argument parameter schema: The schema to use for the argument parameter mode: The mode to use for the argument parameter alias: The alias to use for the argument parameter """ return _dict_not_none(name=name, schema=schema, mode=mode, alias=alias) class ArgumentsV3Schema(TypedDict, total=False): type: Required[Literal['arguments-v3']] arguments_schema: Required[list[ArgumentsV3Parameter]] validate_by_name: bool validate_by_alias: bool extra_behavior: Literal['forbid', 'ignore'] # 'allow' doesn't make sense here. ref: str metadata: dict[str, Any] serialization: SerSchema def arguments_v3_schema( arguments: list[ArgumentsV3Parameter], *, validate_by_name: bool | None = None, validate_by_alias: bool | None = None, extra_behavior: Literal['forbid', 'ignore'] | None = None, ref: str | None = None, metadata: dict[str, Any] | None = None, serialization: SerSchema | None = None, ) -> ArgumentsV3Schema: """ Returns a schema that matches an arguments schema, e.g.: ```py from pydantic_core import SchemaValidator, core_schema param_a = core_schema.arguments_v3_parameter( name='a', schema=core_schema.str_schema(), mode='positional_only' ) param_b = core_schema.arguments_v3_parameter( name='kwargs', schema=core_schema.bool_schema(), mode='var_kwargs_uniform' ) schema = core_schema.arguments_v3_schema([param_a, param_b]) v = SchemaValidator(schema) assert v.validate_python({'a': 'hi', 'kwargs': {'b': True}}) == (('hi',), {'b': True}) ``` This schema is currently not used by other Pydantic components. In V3, it will most likely become the default arguments schema for the `'call'` schema. Args: arguments: The arguments to use for the arguments schema. validate_by_name: Whether to populate by the parameter names, defaults to `False`. validate_by_alias: Whether to populate by the parameter aliases, defaults to `True`. extra_behavior: The extra behavior to use. ref: optional unique identifier of the schema, used to reference the schema in other places. metadata: Any other information you want to include with the schema, not used by pydantic-core. serialization: Custom serialization schema. """ return _dict_not_none( type='arguments-v3', arguments_schema=arguments, validate_by_name=validate_by_name, validate_by_alias=validate_by_alias, extra_behavior=extra_behavior, ref=ref, metadata=metadata, serialization=serialization, ) class CallSchema(TypedDict, total=False): type: Required[Literal['call']] arguments_schema: Required[CoreSchema] function: Required[Callable[..., Any]] function_name: str # default function.__name__ return_schema: CoreSchema ref: str metadata: dict[str, Any] serialization: SerSchema def call_schema( arguments: CoreSchema, function: Callable[..., Any], *, function_name: str | None = None, return_schema: CoreSchema | None = None, ref: str | None = None, metadata: dict[str, Any] | None = None, serialization: SerSchema | None = None, ) -> CallSchema: """ Returns a schema that matches an arguments schema, then calls a function, e.g.: ```py from pydantic_core import SchemaValidator, core_schema param_a = core_schema.arguments_parameter( name='a', schema=core_schema.str_schema(), mode='positional_only' ) param_b = core_schema.arguments_parameter( name='b', schema=core_schema.bool_schema(), mode='positional_only' ) args_schema = core_schema.arguments_schema([param_a, param_b]) schema = core_schema.call_schema( arguments=args_schema, function=lambda a, b: a + str(not b), return_schema=core_schema.str_schema(), ) v = SchemaValidator(schema) assert v.validate_python((('hello', True))) == 'helloFalse' ``` Args: arguments: The arguments to use for the arguments schema function: The function to use for the call schema function_name: The function name to use for the call schema, if not provided `function.__name__` is used return_schema: The return schema to use for the call schema ref: optional unique identifier of the schema, used to reference the schema in other places metadata: Any other information you want to include with the schema, not used by pydantic-core serialization: Custom serialization schema """ return _dict_not_none( type='call', arguments_schema=arguments, function=function, function_name=function_name, return_schema=return_schema, ref=ref, metadata=metadata, serialization=serialization, ) class CustomErrorSchema(TypedDict, total=False): type: Required[Literal['custom-error']] schema: Required[CoreSchema] custom_error_type: Required[str] custom_error_message: str custom_error_context: dict[str, str | int | float] ref: str metadata: dict[str, Any] serialization: SerSchema def custom_error_schema( schema: CoreSchema, custom_error_type: str, *, custom_error_message: str | None = None, custom_error_context: dict[str, Any] | None = None, ref: str | None = None, metadata: dict[str, Any] | None = None, serialization: SerSchema | None = None, ) -> CustomErrorSchema: """ Returns a schema that matches a custom error value, e.g.: ```py from pydantic_core import SchemaValidator, core_schema schema = core_schema.custom_error_schema( schema=core_schema.int_schema(), custom_error_type='MyError', custom_error_message='Error msg', ) v = SchemaValidator(schema) v.validate_python(1) ``` Args: schema: The schema to use for the custom error schema custom_error_type: The custom error type to use for the custom error schema custom_error_message: The custom error message to use for the custom error schema custom_error_context: The custom error context to use for the custom error schema ref: optional unique identifier of the schema, used to reference the schema in other places metadata: Any other information you want to include with the schema, not used by pydantic-core serialization: Custom serialization schema """ return _dict_not_none( type='custom-error', schema=schema, custom_error_type=custom_error_type, custom_error_message=custom_error_message, custom_error_context=custom_error_context, ref=ref, metadata=metadata, serialization=serialization, ) class JsonSchema(TypedDict, total=False): type: Required[Literal['json']] schema: CoreSchema ref: str metadata: dict[str, Any] serialization: SerSchema def json_schema( schema: CoreSchema | None = None, *, ref: str | None = None, metadata: dict[str, Any] | None = None, serialization: SerSchema | None = None, ) -> JsonSchema: """ Returns a schema that matches a JSON value, e.g.: ```py from pydantic_core import SchemaValidator, core_schema dict_schema = core_schema.model_fields_schema( { 'field_a': core_schema.model_field(core_schema.str_schema()), 'field_b': core_schema.model_field(core_schema.bool_schema()), }, ) class MyModel: __slots__ = ( '__dict__', '__pydantic_fields_set__', '__pydantic_extra__', '__pydantic_private__', ) field_a: str field_b: bool json_schema = core_schema.json_schema(schema=dict_schema) schema = core_schema.model_schema(cls=MyModel, schema=json_schema) v = SchemaValidator(schema) m = v.validate_python('{"field_a": "hello", "field_b": true}') assert isinstance(m, MyModel) ``` Args: schema: The schema to use for the JSON schema ref: optional unique identifier of the schema, used to reference the schema in other places metadata: Any other information you want to include with the schema, not used by pydantic-core serialization: Custom serialization schema """ return _dict_not_none(type='json', schema=schema, ref=ref, metadata=metadata, serialization=serialization) class UrlSchema(TypedDict, total=False): type: Required[Literal['url']] max_length: int allowed_schemes: list[str] host_required: bool # default False default_host: str default_port: int default_path: str strict: bool ref: str metadata: dict[str, Any] serialization: SerSchema def url_schema( *, max_length: int | None = None, allowed_schemes: list[str] | None = None, host_required: bool | None = None, default_host: str | None = None, default_port: int | None = None, default_path: str | None = None, preserve_empty_path: bool | None = None, strict: bool | None = None, ref: str | None = None, metadata: dict[str, Any] | None = None, serialization: SerSchema | None = None, ) -> UrlSchema: """ Returns a schema that matches a URL value, e.g.: ```py from pydantic_core import SchemaValidator, core_schema schema = core_schema.url_schema() v = SchemaValidator(schema) print(v.validate_python('https://example.com')) #> https://example.com/ ``` Args: max_length: The maximum length of the URL allowed_schemes: The allowed URL schemes host_required: Whether the URL must have a host default_host: The default host to use if the URL does not have a host default_port: The default port to use if the URL does not have a port default_path: The default path to use if the URL does not have a path preserve_empty_path: Whether to preserve an empty path or convert it to '/', default False strict: Whether to use strict URL parsing ref: optional unique identifier of the schema, used to reference the schema in other places metadata: Any other information you want to include with the schema, not used by pydantic-core serialization: Custom serialization schema """ return _dict_not_none( type='url', max_length=max_length, allowed_schemes=allowed_schemes, host_required=host_required, default_host=default_host, default_port=default_port, default_path=default_path, preserve_empty_path=preserve_empty_path, strict=strict, ref=ref, metadata=metadata, serialization=serialization, ) class MultiHostUrlSchema(TypedDict, total=False): type: Required[Literal['multi-host-url']] max_length: int allowed_schemes: list[str] host_required: bool # default False default_host: str default_port: int default_path: str strict: bool ref: str metadata: dict[str, Any] serialization: SerSchema def multi_host_url_schema( *, max_length: int | None = None, allowed_schemes: list[str] | None = None, host_required: bool | None = None, default_host: str | None = None, default_port: int | None = None, default_path: str | None = None, preserve_empty_path: bool | None = None, strict: bool | None = None, ref: str | None = None, metadata: dict[str, Any] | None = None, serialization: SerSchema | None = None, ) -> MultiHostUrlSchema: """ Returns a schema that matches a URL value with possibly multiple hosts, e.g.: ```py from pydantic_core import SchemaValidator, core_schema schema = core_schema.multi_host_url_schema() v = SchemaValidator(schema) print(v.validate_python('redis://localhost,0.0.0.0,127.0.0.1')) #> redis://localhost,0.0.0.0,127.0.0.1 ``` Args: max_length: The maximum length of the URL allowed_schemes: The allowed URL schemes host_required: Whether the URL must have a host default_host: The default host to use if the URL does not have a host default_port: The default port to use if the URL does not have a port default_path: The default path to use if the URL does not have a path preserve_empty_path: Whether to preserve an empty path or convert it to '/', default False strict: Whether to use strict URL parsing ref: optional unique identifier of the schema, used to reference the schema in other places metadata: Any other information you want to include with the schema, not used by pydantic-core serialization: Custom serialization schema """ return _dict_not_none( type='multi-host-url', max_length=max_length, allowed_schemes=allowed_schemes, host_required=host_required, default_host=default_host, default_port=default_port, default_path=default_path, preserve_empty_path=preserve_empty_path, strict=strict, ref=ref, metadata=metadata, serialization=serialization, ) class DefinitionsSchema(TypedDict, total=False): type: Required[Literal['definitions']] schema: Required[CoreSchema] definitions: Required[list[CoreSchema]] metadata: dict[str, Any] serialization: SerSchema def definitions_schema(schema: CoreSchema, definitions: list[CoreSchema]) -> DefinitionsSchema: """ Build a schema that contains both an inner schema and a list of definitions which can be used within the inner schema. ```py from pydantic_core import SchemaValidator, core_schema schema = core_schema.definitions_schema( core_schema.list_schema(core_schema.definition_reference_schema('foobar')), [core_schema.int_schema(ref='foobar')], ) v = SchemaValidator(schema) assert v.validate_python([1, 2, '3']) == [1, 2, 3] ``` Args: schema: The inner schema definitions: List of definitions which can be referenced within inner schema """ return DefinitionsSchema(type='definitions', schema=schema, definitions=definitions) class DefinitionReferenceSchema(TypedDict, total=False): type: Required[Literal['definition-ref']] schema_ref: Required[str] ref: str metadata: dict[str, Any] serialization: SerSchema def definition_reference_schema( schema_ref: str, ref: str | None = None, metadata: dict[str, Any] | None = None, serialization: SerSchema | None = None, ) -> DefinitionReferenceSchema: """ Returns a schema that points to a schema stored in "definitions", this is useful for nested recursive models and also when you want to define validators separately from the main schema, e.g.: ```py from pydantic_core import SchemaValidator, core_schema schema_definition = core_schema.definition_reference_schema('list-schema') schema = core_schema.definitions_schema( schema=schema_definition, definitions=[ core_schema.list_schema(items_schema=schema_definition, ref='list-schema'), ], ) v = SchemaValidator(schema) assert v.validate_python([()]) == [[]] ``` Args: schema_ref: The schema ref to use for the definition reference schema metadata: Any other information you want to include with the schema, not used by pydantic-core serialization: Custom serialization schema """ return _dict_not_none( type='definition-ref', schema_ref=schema_ref, ref=ref, metadata=metadata, serialization=serialization ) MYPY = False # See https://github.com/python/mypy/issues/14034 for details, in summary mypy is extremely slow to process this # union which kills performance not just for pydantic, but even for code using pydantic if not MYPY: CoreSchema: TypeAlias = ( InvalidSchema | AnySchema | NoneSchema | BoolSchema | IntSchema | FloatSchema | DecimalSchema | FractionSchema | StringSchema | BytesSchema | DateSchema | TimeSchema | DatetimeSchema | TimedeltaSchema | LiteralSchema | MissingSentinelSchema | EllipsisSchema | EnumSchema | IsInstanceSchema | IsSubclassSchema | CallableSchema | ListSchema | DequeSchema | TupleSchema | SetSchema | FrozenSetSchema | GeneratorSchema | DictSchema | FrozenDictSchema | OrderedDictSchema | CounterSchema | AfterValidatorFunctionSchema | BeforeValidatorFunctionSchema | WrapValidatorFunctionSchema | PlainValidatorFunctionSchema | WithDefaultSchema | NullableSchema | UnionSchema | TaggedUnionSchema | ChainSchema | LaxOrStrictSchema | JsonOrPythonSchema | TypedDictSchema | ModelFieldsSchema | ModelSchema | DataclassArgsSchema | DataclassSchema | NamedTupleSchema | ArgumentsSchema | ArgumentsV3Schema | CallSchema | CustomErrorSchema | JsonSchema | UrlSchema | MultiHostUrlSchema | DefinitionsSchema | DefinitionReferenceSchema | UuidSchema | ComplexSchema ) elif False: CoreSchema: TypeAlias = Mapping[str, Any] # to update this, call `pytest -k test_core_schema_type_literal` and copy the output CoreSchemaType: TypeAlias = Literal[ 'invalid', 'any', 'none', 'bool', 'int', 'float', 'decimal', 'fraction', 'str', 'bytes', 'date', 'time', 'datetime', 'timedelta', 'literal', 'missing-sentinel', 'ellipsis', 'enum', 'is-instance', 'is-subclass', 'callable', 'list', 'deque', 'tuple', 'set', 'frozenset', 'generator', 'dict', 'frozendict', 'ordered-dict', 'counter', 'function-after', 'function-before', 'function-wrap', 'function-plain', 'default', 'nullable', 'union', 'tagged-union', 'chain', 'lax-or-strict', 'json-or-python', 'typed-dict', 'model-fields', 'model', 'dataclass-args', 'dataclass', 'named-tuple', 'arguments', 'arguments-v3', 'call', 'custom-error', 'json', 'url', 'multi-host-url', 'definitions', 'definition-ref', 'uuid', 'complex', ] CoreSchemaFieldType: TypeAlias = Literal[ 'model-field', 'dataclass-field', 'typed-dict-field', 'named-tuple-field', 'computed-field' ] # used in _pydantic_core/__init__.pyi::PydanticKnownError # to update this, call `pytest -k test_all_errors` and copy the output ErrorType: TypeAlias = Literal[ 'no_such_attribute', 'json_invalid', 'json_type', 'needs_python_object', 'recursion_loop', 'missing', 'frozen_field', 'frozen_instance', 'extra_forbidden', 'invalid_key', 'get_attribute_error', 'model_type', 'model_attributes_type', 'dataclass_type', 'dataclass_exact_type', 'named_tuple_type', 'default_factory_not_called', 'none_required', 'greater_than', 'greater_than_equal', 'less_than', 'less_than_equal', 'multiple_of', 'finite_number', 'too_short', 'too_long', 'iterable_type', 'iteration_error', 'string_type', 'string_unicode', 'string_too_short', 'string_too_long', 'string_pattern_mismatch', 'string_not_ascii', 'enum', 'dict_type', 'frozen_dict_type', 'ordered_dict_type', 'counter_type', 'mapping_type', 'list_type', 'deque_type', 'tuple_type', 'set_type', 'set_item_not_hashable', 'bool_type', 'bool_parsing', 'int_type', 'int_parsing', 'int_parsing_size', 'int_from_float', 'float_type', 'float_parsing', 'bytes_type', 'bytes_too_short', 'bytes_too_long', 'bytes_invalid_encoding', 'value_error', 'assertion_error', 'literal_error', 'missing_sentinel_error', 'ellipsis_error', 'date_type', 'date_parsing', 'date_from_datetime_parsing', 'date_from_datetime_inexact', 'date_past', 'date_future', 'time_type', 'time_parsing', 'datetime_type', 'datetime_parsing', 'datetime_object_invalid', 'datetime_from_date_parsing', 'datetime_past', 'datetime_future', 'timezone_naive', 'timezone_aware', 'timezone_offset', 'time_delta_type', 'time_delta_parsing', 'frozen_set_type', 'is_instance_of', 'is_subclass_of', 'callable_type', 'union_tag_invalid', 'union_tag_not_found', 'arguments_type', 'missing_argument', 'unexpected_keyword_argument', 'missing_keyword_only_argument', 'unexpected_positional_argument', 'missing_positional_only_argument', 'multiple_argument_values', 'url_type', 'url_parsing', 'url_syntax_violation', 'url_too_long', 'url_scheme', 'uuid_type', 'uuid_parsing', 'uuid_version', 'decimal_type', 'decimal_parsing', 'decimal_max_digits', 'decimal_max_places', 'decimal_whole_digits', 'fraction_type', 'fraction_parsing', 'complex_type', 'complex_str_parsing', ] def _dict_not_none(**kwargs: Any) -> Any: return {k: v for k, v in kwargs.items() if v is not None} def iter_union_choices(union_schema: UnionSchema) -> Generator[CoreSchema]: """Iterate over the choices of a `'union'` schema.""" for choice in union_schema['choices']: if isinstance(choice, tuple): yield choice[0] else: yield choice ############################################################################### # All this stuff is deprecated by #980 and will be removed eventually # They're kept because some code external code will be using them @deprecated('`field_before_validator_function` is deprecated, use `with_info_before_validator_function` instead.') def field_before_validator_function(function: WithInfoValidatorFunction, field_name: str, schema: CoreSchema, **kwargs): return with_info_before_validator_function(function, schema, field_name=field_name, **kwargs) @deprecated('`general_before_validator_function` is deprecated, use `with_info_before_validator_function` instead.') def general_before_validator_function(*args, **kwargs): return with_info_before_validator_function(*args, **kwargs) @deprecated('`field_after_validator_function` is deprecated, use `with_info_after_validator_function` instead.') def field_after_validator_function(function: WithInfoValidatorFunction, field_name: str, schema: CoreSchema, **kwargs): return with_info_after_validator_function(function, schema, field_name=field_name, **kwargs) @deprecated('`general_after_validator_function` is deprecated, use `with_info_after_validator_function` instead.') def general_after_validator_function(*args, **kwargs): return with_info_after_validator_function(*args, **kwargs) @deprecated('`field_wrap_validator_function` is deprecated, use `with_info_wrap_validator_function` instead.') def field_wrap_validator_function( function: WithInfoWrapValidatorFunction, field_name: str, schema: CoreSchema, **kwargs ): return with_info_wrap_validator_function(function, schema, field_name=field_name, **kwargs) @deprecated('`general_wrap_validator_function` is deprecated, use `with_info_wrap_validator_function` instead.') def general_wrap_validator_function(*args, **kwargs): return with_info_wrap_validator_function(*args, **kwargs) @deprecated('`field_plain_validator_function` is deprecated, use `with_info_plain_validator_function` instead.') def field_plain_validator_function(function: WithInfoValidatorFunction, field_name: str, **kwargs): return with_info_plain_validator_function(function, field_name=field_name, **kwargs) @deprecated('`general_plain_validator_function` is deprecated, use `with_info_plain_validator_function` instead.') def general_plain_validator_function(*args, **kwargs): return with_info_plain_validator_function(*args, **kwargs) _deprecated_import_lookup = { 'FieldValidationInfo': ValidationInfo, 'FieldValidatorFunction': WithInfoValidatorFunction, 'GeneralValidatorFunction': WithInfoValidatorFunction, 'FieldWrapValidatorFunction': WithInfoWrapValidatorFunction, } if TYPE_CHECKING: FieldValidationInfo = ValidationInfo def __getattr__(attr_name: str) -> object: new_attr = _deprecated_import_lookup.get(attr_name) if new_attr is None: raise AttributeError(f"module 'pydantic_core' has no attribute '{attr_name}'") else: import warnings msg = f'`{attr_name}` is deprecated, use `{new_attr.__name__}` instead.' warnings.warn(msg, DeprecationWarning, stacklevel=1) return new_attr pydantic-pydantic-e28e879/pydantic-core/python/pydantic_core/py.typed000066400000000000000000000000001526274674700261310ustar00rootroot00000000000000pydantic-pydantic-e28e879/pydantic-core/src/000077500000000000000000000000001526274674700210675ustar00rootroot00000000000000pydantic-pydantic-e28e879/pydantic-core/src/argument_markers.rs000066400000000000000000000045321526274674700250070ustar00rootroot00000000000000use pyo3::exceptions::PyNotImplementedError; use pyo3::prelude::*; use pyo3::sync::PyOnceLock; use pyo3::types::{PyDict, PyTuple}; use crate::tools::safe_repr; #[pyclass( module = "pydantic_core._pydantic_core", get_all, frozen, freelist = 100, skip_from_py_object )] #[derive(Debug, Clone)] pub struct ArgsKwargs { pub(crate) args: Py, pub(crate) kwargs: Option>, } #[pymethods] impl ArgsKwargs { #[new] #[pyo3(signature = (args, kwargs = None))] fn py_new(args: Bound<'_, PyTuple>, kwargs: Option>) -> Self { Self { args: args.unbind(), kwargs: kwargs.filter(|d| !d.is_empty()).map(Bound::unbind), } } fn __eq__(&self, py: Python, other: &Self) -> PyResult { if !self.args.bind(py).eq(&other.args)? { return Ok(false); } match (&self.kwargs, &other.kwargs) { (Some(d1), Some(d2)) => d1.bind(py).eq(d2), (None, None) => Ok(true), _ => Ok(false), } } pub fn __repr__(&self, py: Python) -> String { let args = safe_repr(self.args.bind(py)); match self.kwargs { Some(ref d) => format!("ArgsKwargs({args}, {})", safe_repr(d.bind(py))), None => format!("ArgsKwargs({args})"), } } } static UNDEFINED_CELL: PyOnceLock> = PyOnceLock::new(); #[pyclass(module = "pydantic_core._pydantic_core", frozen)] #[derive(Debug)] pub struct PydanticUndefinedType {} #[pymethods] impl PydanticUndefinedType { #[new] pub fn py_new(_py: Python) -> PyResult { Err(PyNotImplementedError::new_err( "Creating instances of \"UndefinedType\" is not supported", )) } #[staticmethod] #[pyo3(name = "new")] pub fn get(py: Python<'_>) -> &Py { UNDEFINED_CELL.get_or_init(py, || Py::new(py, PydanticUndefinedType {}).unwrap()) } fn __repr__(&self) -> &'static str { "PydanticUndefined" } fn __copy__(&self, py: Python) -> Py { UNDEFINED_CELL.get(py).unwrap().clone_ref(py) } #[pyo3(signature = (_memo, /))] fn __deepcopy__(&self, py: Python, _memo: &Bound<'_, PyAny>) -> Py { self.__copy__(py) } fn __reduce__(&self) -> &'static str { "PydanticUndefined" } } pydantic-pydantic-e28e879/pydantic-core/src/build_tools.rs000066400000000000000000000142761526274674700237660ustar00rootroot00000000000000use std::error::Error; use std::fmt; use std::str::FromStr; use pyo3::exceptions::PyException; use pyo3::prelude::*; use pyo3::types::{PyDict, PyList, PyString}; use pyo3::{PyErrArguments, intern}; use crate::ValidationError; use crate::errors::{PyLineError, ValError}; use crate::input::InputType; use crate::tools::SchemaDict; pub fn schema_or_config<'py, T>( schema: &Bound<'py, PyDict>, config: Option<&Bound<'py, PyDict>>, schema_key: &Bound<'py, PyString>, config_key: &Bound<'py, PyString>, ) -> PyResult> where T: FromPyObjectOwned<'py>, { match schema.get_as(schema_key)? { Some(v) => Ok(Some(v)), None => match config { Some(config) => config.get_as(config_key), None => Ok(None), }, } } pub fn schema_or_config_same<'py, T>( schema: &Bound<'py, PyDict>, config: Option<&Bound<'py, PyDict>>, key: &Bound<'py, PyString>, ) -> PyResult> where T: FromPyObjectOwned<'py>, { schema_or_config(schema, config, key, key) } pub fn is_strict(schema: &Bound<'_, PyDict>, config: Option<&Bound<'_, PyDict>>) -> PyResult { let py = schema.py(); Ok(schema_or_config_same(schema, config, intern!(py, "strict"))?.unwrap_or(false)) } enum SchemaErrorEnum { Message(String), ValidationError(ValidationError), } // we could perhaps do clever things here to store each schema error, or have different types for the top // level error group, and other errors, we could perhaps also support error groups!? #[pyclass(extends=PyException, module="pydantic_core._pydantic_core")] pub struct SchemaError(SchemaErrorEnum); impl fmt::Debug for SchemaError { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { write!(f, "SchemaError({:?})", self.message()) } } impl fmt::Display for SchemaError { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { f.write_str(self.message()) } } impl Error for SchemaError { #[cfg_attr(has_coverage_attribute, coverage(off))] fn source(&self) -> Option<&(dyn Error + 'static)> { None } } impl SchemaError { pub fn new_err(args: A) -> PyErr where A: PyErrArguments + Send + Sync + 'static, { PyErr::new::(args) } pub fn from_val_error(py: Python, error: ValError) -> PyErr { match error { ValError::LineErrors(raw_errors) => { let line_errors = match raw_errors .into_iter() .map(|e| PyLineError::from_val_line_error(py, e)) .collect::>() { Ok(errors) => errors, Err(err) => return err, }; let validation_error = ValidationError::new( line_errors, PyString::new(py, "Schema").into(), InputType::Python, false, ); let schema_error = SchemaError(SchemaErrorEnum::ValidationError(validation_error)); match Py::new(py, schema_error) { Ok(err) => PyErr::from_value(err.into_bound(py).into_any()), Err(err) => err, } } ValError::InternalErr(err) => err, ValError::Omit => Self::new_err("Unexpected Omit error."), ValError::UseDefault => Self::new_err("Unexpected UseDefault error."), } } fn message(&self) -> &str { match &self.0 { SchemaErrorEnum::Message(message) => message.as_str(), SchemaErrorEnum::ValidationError(_) => "", } } } #[pymethods] impl SchemaError { #[new] fn py_new(message: String) -> Self { Self(SchemaErrorEnum::Message(message)) } fn error_count(&self) -> usize { match &self.0 { SchemaErrorEnum::Message(_) => 0, SchemaErrorEnum::ValidationError(error) => error.error_count(), } } fn errors(&self, py: Python) -> PyResult> { match &self.0 { SchemaErrorEnum::Message(_) => Ok(PyList::empty(py).unbind()), SchemaErrorEnum::ValidationError(error) => error.errors(py, false, false, true), } } fn __str__(&self, py: Python) -> String { match &self.0 { SchemaErrorEnum::Message(message) => message.clone(), SchemaErrorEnum::ValidationError(error) => error.display(py, Some("Invalid Schema:"), false), } } fn __repr__(&self, py: Python) -> String { match &self.0 { SchemaErrorEnum::Message(message) => format!("SchemaError({message:?})"), SchemaErrorEnum::ValidationError(error) => error.display(py, Some("Invalid Schema:"), false), } } } macro_rules! py_schema_error_type { ($( $msg_args:expr ),+ ) => { crate::tools::py_error_type!(crate::build_tools::SchemaError; $( $msg_args ),+) }; } pub(crate) use py_schema_error_type; macro_rules! py_schema_err { ($( $msg_args:expr ),+ ) => { Err(crate::build_tools::py_schema_error_type!($( $msg_args ),+)) }; } pub(crate) use py_schema_err; #[derive(Debug, Clone, Copy, Eq, PartialEq)] pub enum ExtraBehavior { Allow, Forbid, Ignore, } impl ExtraBehavior { pub fn from_schema_or_config( py: Python, schema: &Bound<'_, PyDict>, config: Option<&Bound<'_, PyDict>>, default: Self, ) -> PyResult { let extra_behavior = schema_or_config::>>( schema, config, intern!(py, "extra_behavior"), intern!(py, "extra_fields_behavior"), )? .flatten(); let res = match extra_behavior.as_ref().map(|s| s.to_str()).transpose()? { Some(s) => Self::from_str(s)?, None => default, }; Ok(res) } } impl FromStr for ExtraBehavior { type Err = PyErr; fn from_str(s: &str) -> Result { match s { "allow" => Ok(Self::Allow), "forbid" => Ok(Self::Forbid), "ignore" => Ok(Self::Ignore), s => py_schema_err!("Invalid extra_behavior: `{s}`"), } } } pydantic-pydantic-e28e879/pydantic-core/src/common/000077500000000000000000000000001526274674700223575ustar00rootroot00000000000000pydantic-pydantic-e28e879/pydantic-core/src/common/counter.rs000066400000000000000000000005531526274674700244070ustar00rootroot00000000000000use pyo3::prelude::*; use pyo3::sync::PyOnceLock; use pyo3::types::PyType; static COUNTER_TYPE: PyOnceLock> = PyOnceLock::new(); // No PyO3 interface can be provided (similar to https://github.com/PyO3/pyo3/issues/2655) pub fn get_counter_type(py: Python<'_>) -> PyResult<&Bound<'_, PyType>> { COUNTER_TYPE.import(py, "collections", "Counter") } pydantic-pydantic-e28e879/pydantic-core/src/common/deque.rs000066400000000000000000000020731526274674700240320ustar00rootroot00000000000000use pyo3::intern; use pyo3::prelude::*; use pyo3::sync::PyOnceLock; use pyo3::types::{PyDict, PyList, PyType}; static DEQUE_TYPE: PyOnceLock> = PyOnceLock::new(); // No PyO3 interface can be provided (https://github.com/PyO3/pyo3/issues/2655) pub fn get_deque_type(py: Python<'_>) -> PyResult<&Bound<'_, PyType>> { DEQUE_TYPE.import(py, "collections", "deque") } /// Get the `maxlen` of a `deque` instance. pub fn deque_maxlen(value: &Bound<'_, PyAny>) -> PyResult> { value.getattr(intern!(value.py(), "maxlen"))?.extract() } /// Build a new `deque` from `items`, with the given `maxlen`. pub fn new_deque<'py>(py: Python<'py>, items: Bound<'py, PyList>, maxlen: Option) -> PyResult> { let deque_type = get_deque_type(py)?; let deque = match maxlen { Some(maxlen) => { let kwargs = PyDict::new(py); kwargs.set_item(intern!(py, "maxlen"), maxlen)?; deque_type.call((items,), Some(&kwargs))? } None => deque_type.call1((items,))?, }; Ok(deque.unbind()) } pydantic-pydantic-e28e879/pydantic-core/src/common/frozendict.rs000066400000000000000000000006031526274674700250730ustar00rootroot00000000000000use pyo3::prelude::*; use pyo3::sync::PyOnceLock; use pyo3::types::PyType; static FROZENDICT_TYPE: PyOnceLock> = PyOnceLock::new(); // TODO: remove when https://github.com/PyO3/pyo3/pull/6174 gets released and use `PyFrozenDict` instead: pub fn get_frozendict_type(py: Python<'_>) -> PyResult<&Bound<'_, PyType>> { FROZENDICT_TYPE.import(py, "builtins", "frozendict") } pydantic-pydantic-e28e879/pydantic-core/src/common/missing_sentinel.rs000066400000000000000000000004301526274674700262740ustar00rootroot00000000000000use pyo3::prelude::*; use pyo3::sync::PyOnceLock; static MISSING_SENTINEL_OBJECT: PyOnceLock> = PyOnceLock::new(); pub fn get_missing_sentinel_object(py: Python<'_>) -> PyResult<&Bound<'_, PyAny>> { MISSING_SENTINEL_OBJECT.import(py, "pydantic_core", "MISSING") } pydantic-pydantic-e28e879/pydantic-core/src/common/mod.rs000066400000000000000000000002661526274674700235100ustar00rootroot00000000000000pub(crate) mod counter; pub(crate) mod deque; pub(crate) mod frozendict; pub(crate) mod missing_sentinel; pub(crate) mod ordered_dict; pub(crate) mod prebuilt; pub(crate) mod union; pydantic-pydantic-e28e879/pydantic-core/src/common/ordered_dict.rs000066400000000000000000000005761526274674700253640ustar00rootroot00000000000000use pyo3::prelude::*; use pyo3::sync::PyOnceLock; use pyo3::types::PyType; static ORDERED_DICT_TYPE: PyOnceLock> = PyOnceLock::new(); // No PyO3 interface can be provided (similar to https://github.com/PyO3/pyo3/issues/2655) pub fn get_ordered_dict_type(py: Python<'_>) -> PyResult<&Bound<'_, PyType>> { ORDERED_DICT_TYPE.import(py, "collections", "OrderedDict") } pydantic-pydantic-e28e879/pydantic-core/src/common/prebuilt.rs000066400000000000000000000033311526274674700245530ustar00rootroot00000000000000use pyo3::intern; use pyo3::prelude::*; use pyo3::types::{PyAny, PyDict, PyType}; use crate::tools::SchemaDict; pub fn get_prebuilt( type_: &str, schema: &Bound<'_, PyDict>, prebuilt_attr_name: &str, extractor: impl FnOnce(Bound<'_, PyAny>) -> PyResult>, ) -> PyResult> { let py = schema.py(); // we can only use prebuilt validators/serializers from models and Pydantic dataclasses. // However, we don't want to use a prebuilt structure from dataclasses if we have a `generic_origin` // as this means the dataclass was parametrized (so a generic alias instance), and `cls` in the // core schema is still the (unparametrized) class, meaning we would fetch the wrong validator/serializer. if !matches!(type_, "model" | "dataclass") || (type_ == "dataclass" && schema.contains(intern!(py, "generic_origin"))?) { return Ok(None); } let class: Bound<'_, PyType> = schema.get_as_req(intern!(py, "cls"))?; // Note: we NEED to use the __dict__ here (and perform get_item calls rather than getattr) // because we don't want to fetch prebuilt validators from parent classes. // We don't downcast here because __dict__ on a class is a readonly mappingproxy, // so we can just leave it as is and do get_item checks. let class_dict = class.getattr(intern!(py, "__dict__"))?; let is_complete: bool = class_dict .get_item(intern!(py, "__pydantic_complete__")) .is_ok_and(|b| b.extract().unwrap_or(false)); if !is_complete { return Ok(None); } // Retrieve the prebuilt validator / serializer if available let prebuilt: Bound<'_, PyAny> = class_dict.get_item(prebuilt_attr_name)?; extractor(prebuilt) } pydantic-pydantic-e28e879/pydantic-core/src/common/union.rs000066400000000000000000000024771526274674700240670ustar00rootroot00000000000000use pyo3::prelude::*; use pyo3::{PyTraverseError, PyVisit}; use smallvec::SmallVec; use crate::lookup_key::{LookupPath, ValidationAlias}; use crate::py_gc::PyGcTraverse; #[derive(Debug)] pub enum Discriminator { /// use `LookupPaths` to find the tag, same as we do to find values in typed_dict aliases LookupPaths(SmallVec<[LookupPath; 1]>), /// call a function to find the tag to use Function(Py), } impl Discriminator { pub fn new(raw: &Bound<'_, PyAny>) -> PyResult { if raw.is_callable() { return Ok(Self::Function(raw.clone().unbind())); } let lookup: ValidationAlias = raw.extract()?; Ok(Self::LookupPaths(lookup.into_paths())) } pub fn to_string_py(&self, py: Python) -> PyResult { match self { Self::Function(f) => Ok(format!("{}()", f.getattr(py, "__name__")?)), Self::LookupPaths(paths) => Ok(paths.iter().map(ToString::to_string).collect::>().join(" | ")), } } } impl PyGcTraverse for Discriminator { fn py_gc_traverse(&self, visit: &PyVisit<'_>) -> Result<(), PyTraverseError> { match self { Self::Function(obj) => visit.call(obj)?, Self::LookupPaths(_) => {} } Ok(()) } } pub(crate) const SMALL_UNION_THRESHOLD: usize = 4; pydantic-pydantic-e28e879/pydantic-core/src/definitions.rs000066400000000000000000000216301526274674700237520ustar00rootroot00000000000000/// Definition / reference management /// Our definitions system is very similar to json schema's: there's ref strings and a definitions section /// Unlike json schema we let you put definitions inline, not just in a single '#/$defs/' block or similar. /// We use DefinitionsBuilder to collect the references / definitions into a single vector /// and then get a definition from a reference using an integer id (just for performance of not using a HashMap) use std::{ borrow::Borrow, collections::hash_map::Entry, fmt::Debug, sync::{ Arc, OnceLock, Weak, atomic::{AtomicBool, Ordering}, }, }; use pyo3::{PyTraverseError, PyVisit, prelude::*}; use ahash::AHashMap; use crate::{build_tools::py_schema_err, py_gc::PyGcTraverse}; /// Definitions are validators and serializers that are /// shared by reference. /// They come into play whenever there is recursion, e.g. /// if you have validators A -> B -> A then A will be shared /// by reference so that the SchemaValidator itself can own it. /// These primarily get used by DefinitionRefValidator and DefinitionRefSerializer, /// other validators / serializers primarily pass them around without interacting with them. /// They get indexed by a ReferenceId, which are integer identifiers /// that are handed out and managed by DefinitionsBuilder when the Schema{Validator,Serializer} /// gets build. pub struct Definitions(AHashMap, Definition>); struct Definition { value: Arc>, name: Arc, } /// Reference to a definition. pub struct DefinitionRef { reference: Arc, // We use a weak reference to the definition to avoid a reference cycle // when recursive definitions are used. value: Weak>, name: Arc, } // DefinitionRef can always be cloned (#[derive(Clone)] would require T: Clone) impl Clone for DefinitionRef { fn clone(&self) -> Self { Self { reference: self.reference.clone(), value: self.value.clone(), name: self.name.clone(), } } } impl DefinitionRef { pub fn id(&self) -> usize { Weak::as_ptr(&self.value) as usize } pub fn get_or_init_name(&self, init: impl FnOnce(&T) -> String) -> &str { let Some(definition) = self.value.upgrade() else { return "..."; }; match definition.get() { Some(value) => self.name.get_or_init(|| init(value)), None => "...", } } pub fn read(&self, f: impl FnOnce(Option<&T>) -> R) -> R { f(self.value.upgrade().as_ref().and_then(|value| value.get())) } } impl Debug for DefinitionRef { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { // To avoid possible infinite recursion from recursive definitions, // a DefinitionRef just displays debug as its name self.name.fmt(f) } } impl Debug for Definitions { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { // Formatted as a list for backwards compatibility; in principle // this could be formatted as a map. Maybe change in a future // minor release of pydantic. write!(f, "[")?; let mut first = true; for def in self.0.values() { write!(f, "{sep}{def:?}", sep = if first { "" } else { ", " })?; first = false; } write!(f, "]")?; Ok(()) } } impl Debug for Definition { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { match self.value.get() { Some(value) => value.fmt(f), None => "...".fmt(f), } } } impl PyGcTraverse for DefinitionRef { fn py_gc_traverse(&self, visit: &PyVisit<'_>) -> Result<(), PyTraverseError> { if let Some(value) = self.value.upgrade().as_ref().and_then(|v| v.get()) { value.py_gc_traverse(visit)?; } Ok(()) } } impl PyGcTraverse for Definitions { fn py_gc_traverse(&self, visit: &PyVisit<'_>) -> Result<(), PyTraverseError> { for value in self.0.values() { if let Some(value) = value.value.get() { value.py_gc_traverse(visit)?; } } Ok(()) } } #[derive(Debug)] pub struct DefinitionsBuilder { definitions: Definitions, use_prebuilt: bool, } impl DefinitionsBuilder { pub fn new(use_prebuilt: bool) -> Self { Self { definitions: Definitions(AHashMap::new()), use_prebuilt, } } /// Whether prebuilt validators/serializers should be used pub fn use_prebuilt(&self) -> bool { self.use_prebuilt } /// Get a ReferenceId for the given reference string. pub fn get_definition(&mut self, reference: &str) -> DefinitionRef { // We either need a String copy or two hashmap lookups // Neither is better than the other // We opted for the easier outward facing API let reference = Arc::new(reference.to_string()); let value = match self.definitions.0.entry(reference.clone()) { Entry::Occupied(entry) => entry.into_mut(), Entry::Vacant(entry) => entry.insert(Definition { value: Arc::new(OnceLock::new()), name: Arc::new(LazyName::new()), }), }; DefinitionRef { reference, value: Arc::downgrade(&value.value), name: value.name.clone(), } } /// Add a definition, returning the ReferenceId that maps to it pub fn add_definition(&mut self, reference: String, value: T) -> PyResult> { let reference = Arc::new(reference); let value = match self.definitions.0.entry(reference.clone()) { Entry::Occupied(entry) => { let definition = entry.into_mut(); match definition.value.set(value) { Ok(()) => definition, Err(_) => return py_schema_err!("Duplicate ref: `{reference}`"), } } Entry::Vacant(entry) => entry.insert(Definition { value: Arc::new(OnceLock::from(value)), name: Arc::new(LazyName::new()), }), }; Ok(DefinitionRef { reference, value: Arc::downgrade(&value.value), name: value.name.clone(), }) } /// Consume this Definitions into a vector of items, indexed by each items ReferenceId pub fn finish(self) -> PyResult> { for (reference, def) in &self.definitions.0 { if def.value.get().is_none() { return py_schema_err!("Definitions error: definition `{reference}` was never filled"); } } Ok(self.definitions) } } /// Because definitions can create recursive structures, we often need to be able to populate /// values lazily from these structures in a way that avoids infinite recursion. This structure /// avoids infinite recursion by returning a default value when a recursion loop is detected. pub(crate) struct RecursionSafeCache { cache: OnceLock, in_recursion: AtomicBool, } impl Clone for RecursionSafeCache { fn clone(&self) -> Self { Self { cache: self.cache.clone(), in_recursion: AtomicBool::new(false), } } } impl RecursionSafeCache { /// Creates a new RecursionSafeCache pub(crate) fn new() -> Self { Self { cache: OnceLock::new(), in_recursion: AtomicBool::new(false), } } /// Gets or initialized the cached value, returning the default in the case of recursion loops pub(crate) fn get_or_init(&self, init: impl FnOnce() -> T, recursive_default: &'static D) -> &D where T: Borrow, { if let Some(cached) = self.cache.get() { return cached.borrow(); } if self .in_recursion .compare_exchange(false, true, Ordering::SeqCst, Ordering::SeqCst) .is_err() { return recursive_default; } let result = self.cache.get_or_init(init).borrow(); self.in_recursion.store(false, Ordering::SeqCst); result } /// Gets the value, if it is set fn get(&self) -> Option<&T> { self.cache.get() } } #[derive(Clone)] struct LazyName(RecursionSafeCache); impl LazyName { fn new() -> Self { Self(RecursionSafeCache::new()) } /// Gets the validator name, returning the default in the case of recursion loops fn get_or_init(&self, init: impl FnOnce() -> String) -> &str { self.0.get_or_init(init, "...") } } impl Debug for LazyName { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { self.0.get().map_or("...", String::as_str).fmt(f) } } pydantic-pydantic-e28e879/pydantic-core/src/errors/000077500000000000000000000000001526274674700224035ustar00rootroot00000000000000pydantic-pydantic-e28e879/pydantic-core/src/errors/line_error.rs000066400000000000000000000116641526274674700251210ustar00rootroot00000000000000use std::convert::Infallible; use pyo3::CastError; use pyo3::CastIntoError; use pyo3::exceptions::PyTypeError; use pyo3::prelude::*; use jiter::JsonValue; use crate::input::BorrowInput; use crate::input::Input; use super::location::{LocItem, Location}; use super::types::ErrorType; pub type ValResult = Result; pub trait ToErrorValue { fn to_error_value(&self) -> InputValue; } impl<'a, T: BorrowInput<'a>> ToErrorValue for T { fn to_error_value(&self) -> InputValue { Input::as_error_value(self.borrow_input()) } } impl ToErrorValue for &'_ dyn ToErrorValue { fn to_error_value(&self) -> InputValue { (**self).to_error_value() } } #[cfg_attr(debug_assertions, derive(Debug))] pub enum ValError { LineErrors(Vec), InternalErr(PyErr), Omit, UseDefault, } impl From for ValError { fn from(py_err: PyErr) -> Self { Self::InternalErr(py_err) } } impl From> for ValError { fn from(py_downcast: CastError) -> Self { Self::InternalErr(PyTypeError::new_err(py_downcast.to_string())) } } impl From> for ValError { fn from(py_downcast: CastIntoError) -> Self { Self::InternalErr(PyTypeError::new_err(py_downcast.to_string())) } } impl From> for ValError { fn from(line_errors: Vec) -> Self { Self::LineErrors(line_errors) } } impl From for ValError { fn from(infallible: Infallible) -> Self { match infallible {} } } impl ValError { pub fn new(error_type: ErrorType, input: impl ToErrorValue) -> ValError { Self::LineErrors(vec![ValLineError::new(error_type, input)]) } pub fn new_with_loc(error_type: ErrorType, input: impl ToErrorValue, loc: impl Into) -> ValError { Self::LineErrors(vec![ValLineError::new_with_loc(error_type, input, loc)]) } pub fn new_custom_input(error_type: ErrorType, input_value: InputValue) -> ValError { Self::LineErrors(vec![ValLineError::new_custom_input(error_type, input_value)]) } /// helper function to call with_outer on line items if applicable pub fn with_outer_location(self, into_loc_item: impl Into) -> Self { let loc_item = into_loc_item.into(); match self { Self::LineErrors(mut line_errors) => { for line_error in &mut line_errors { line_error.location.with_outer(loc_item.clone()); } Self::LineErrors(line_errors) } other => other, } } } /// A `ValLineError` is a single error that occurred during validation which is converted to a `PyLineError` /// to eventually form a `ValidationError`. /// I don't like the name `ValLineError`, but it's the best I could come up with (for now). #[cfg_attr(debug_assertions, derive(Debug))] pub struct ValLineError { pub error_type: ErrorType, // location is reversed so that adding an "outer" location item is pushing, it's reversed before showing to the user pub location: Location, pub input_value: InputValue, } impl ValLineError { pub fn new(error_type: ErrorType, input: impl ToErrorValue) -> ValLineError { Self { error_type, input_value: input.to_error_value(), location: Location::default(), } } pub fn new_with_loc(error_type: ErrorType, input: impl ToErrorValue, loc: impl Into) -> ValLineError { Self { error_type, input_value: input.to_error_value(), location: Location::new_some(loc.into()), } } pub fn new_with_full_loc(error_type: ErrorType, input: impl ToErrorValue, location: Location) -> ValLineError { Self { error_type, input_value: input.to_error_value(), location, } } pub fn new_custom_input(error_type: ErrorType, input_value: InputValue) -> ValLineError { Self { error_type, input_value, location: Location::default(), } } /// location is stored reversed so it's quicker to add "outer" items as that's what we always do /// hence `push` here instead of `insert` pub fn with_outer_location(mut self, into_loc_item: impl Into) -> Self { self.location.with_outer(into_loc_item.into()); self } // change the error_type on a error in place pub fn with_type(mut self, error_type: ErrorType) -> Self { self.error_type = error_type; self } pub fn first_loc_item(&self) -> Option<&LocItem> { match &self.location { Location::Empty => None, // last because order is reversed Location::List(loc_items) => loc_items.last(), } } } #[cfg_attr(debug_assertions, derive(Debug))] #[derive(Clone, IntoPyObject)] pub enum InputValue { Python(Py), Json(JsonValue<'static>), } pydantic-pydantic-e28e879/pydantic-core/src/errors/location.rs000066400000000000000000000137331526274674700245700ustar00rootroot00000000000000use pyo3::exceptions::PyTypeError; use pyo3::pybacked::PyBackedStr; use pyo3::sync::PyOnceLock; use std::fmt; use pyo3::prelude::*; use pyo3::types::{PyList, PyTuple}; use serde::ser::SerializeSeq; use serde::{Serialize, Serializer}; /// Used to store individual items of the error location, e.g. a string for key/field names /// or a number for array indices. #[derive(Clone, Eq, PartialEq, IntoPyObjectRef)] #[cfg_attr(debug_assertions, derive(Debug))] pub enum LocItem { /// string type key, used to identify items from a dict or anything that implements `__getitem__` S(String), /// Python-owned variant of the above PyS(PyBackedStr), /// integer key, used to get: /// * items from a list /// * items from a tuple /// * dict with int keys `dict[int, ...]` (python only) /// * with integer keys in tagged unions I(i64), } impl fmt::Display for LocItem { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { match self { Self::S(s) if s.contains('.') => write!(f, "`{s}`"), Self::S(s) => write!(f, "{s}"), Self::PyS(s) if s.contains('.') => write!(f, "`{s}`"), Self::PyS(s) => write!(f, "{s}"), Self::I(i) => write!(f, "{i}"), } } } impl From for LocItem { fn from(s: String) -> Self { Self::S(s) } } impl From<&str> for LocItem { fn from(s: &str) -> Self { Self::S(s.to_string()) } } impl From for LocItem { fn from(i: i64) -> Self { Self::I(i) } } impl From for LocItem { fn from(u: usize) -> Self { Self::I(u as i64) } } impl From for LocItem { fn from(s: PyBackedStr) -> Self { Self::PyS(s) } } impl Serialize for LocItem { fn serialize(&self, serializer: S) -> Result where S: Serializer, { match self { Self::S(s) => serializer.serialize_str(s.as_str()), Self::PyS(s) => serializer.serialize_str(s), Self::I(loc) => serializer.serialize_i64(*loc), } } } /// Error locations are represented by a vector of `LocItem`s. /// e.g. if the error occurred in the third member of a list called `foo`, /// the location would be `["foo", 2]`. /// Note: location in List is stored in **REVERSE** so adding an "outer" item to location involves /// pushing to the vec which is faster than inserting and shifting everything along. /// Then when "using" location in `Display` and `ToPyObject` order has to be reversed #[derive(Clone, Default)] #[cfg_attr(debug_assertions, derive(Debug))] pub enum Location { // no location, avoid creating an unnecessary vec #[default] Empty, // store the in a vec of LocItems, Note: this is the REVERSE of location, see above // we could perhaps use a smallvec or similar here, probably only worth it if we store a Cow in LocItem List(Vec), } static EMPTY_TUPLE: PyOnceLock> = PyOnceLock::new(); impl<'py> IntoPyObject<'py> for &'_ Location { type Target = PyTuple; type Output = Bound<'py, PyTuple>; type Error = PyErr; fn into_pyobject(self, py: Python<'py>) -> PyResult> { match self { Location::List(loc) => PyTuple::new(py, loc.iter().rev()), Location::Empty => Ok(EMPTY_TUPLE .get_or_init(py, || PyTuple::empty(py).unbind()) .bind(py) .clone()), } } } impl fmt::Display for Location { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { match self { Self::List(loc) => { let loc_str = loc.iter().rev().map(ToString::to_string).collect::>(); writeln!(f, "{}", loc_str.join(".")) } Self::Empty => Ok(()), } } } impl Location { /// create a new location vec with a value, 3 is plucked out of thin air, should it just be 1? pub fn new_some(item: LocItem) -> Self { let mut loc = Vec::with_capacity(3); loc.push(item); Self::List(loc) } pub fn with_outer(&mut self, loc_item: LocItem) { match self { Self::List(loc) => loc.push(loc_item), Self::Empty => { *self = Self::new_some(loc_item); } } } } impl Serialize for Location { fn serialize(&self, serializer: S) -> Result where S: Serializer, { match self { Self::Empty => serializer.serialize_seq(Some(0))?.end(), Self::List(loc) => { let mut seq = serializer.serialize_seq(Some(loc.len()))?; for e in loc.iter().rev() { seq.serialize_element(e)?; } seq.end() } } } } impl TryFrom>> for Location { type Error = PyErr; /// Only ever called by ValidationError -> PyLineError to convert user input to our internal Location /// Thus this expects the location to *not* be reversed and reverses it before storing it. fn try_from(location: Option<&Bound<'_, PyAny>>) -> PyResult { if let Some(location) = location { let mut loc_vec: Vec = if let Ok(tuple) = location.cast::() { tuple.iter().map(Into::into).collect() } else if let Ok(list) = location.cast::() { list.iter().map(Into::into).collect() } else { return Err(PyTypeError::new_err( "Location must be a list or tuple of strings and ints", )); }; if loc_vec.is_empty() { Ok(Self::Empty) } else { // Don't force Python users to give use the location reversed // just be we internally store it like that loc_vec.reverse(); Ok(Self::List(loc_vec)) } } else { Ok(Self::Empty) } } } pydantic-pydantic-e28e879/pydantic-core/src/errors/mod.rs000066400000000000000000000021461526274674700235330ustar00rootroot00000000000000use pyo3::prelude::*; mod line_error; mod location; mod types; mod validation_exception; mod value_exception; pub use self::line_error::{InputValue, ToErrorValue, ValError, ValLineError, ValResult}; pub use self::location::{LocItem, Location}; pub use self::types::{ErrorType, ErrorTypeDefaults, Number, list_all_errors}; pub use self::validation_exception::{PyLineError, ValidationError}; pub use self::value_exception::{PydanticCustomError, PydanticKnownError, PydanticOmit, PydanticUseDefault}; pub fn py_err_string(py: Python, err: PyErr) -> String { let value = err.value(py); match value.get_type().qualname() { Ok(type_name) => match value.str() { Ok(py_str) => { let str_cow = py_str.to_string_lossy(); let str = str_cow.as_ref(); if !str.is_empty() { format!("{type_name}: {str}") } else { type_name.to_string() } } Err(_) => format!("{type_name}: "), }, Err(_) => "Unknown Error".to_string(), } } pydantic-pydantic-e28e879/pydantic-core/src/errors/types.rs000066400000000000000000001101541526274674700241170ustar00rootroot00000000000000use std::any::type_name; use std::borrow::Cow; use std::fmt; use pyo3::exceptions::{PyKeyError, PyTypeError}; use pyo3::prelude::*; use pyo3::sync::PyOnceLock; use pyo3::types::{PyDict, PyList}; use ahash::AHashMap; use num_bigint::BigInt; use strum::{Display, EnumMessage, IntoEnumIterator}; use strum_macros::EnumIter; use crate::input::{InputType, Int}; use crate::tools::{py_err, py_error_type}; use super::PydanticCustomError; #[pyfunction] pub fn list_all_errors(py: Python<'_>) -> PyResult> { let mut errors: Vec> = Vec::with_capacity(100); for error_type in ErrorType::iter() { if !matches!(error_type, ErrorType::CustomError { .. }) { let d = PyDict::new(py); d.set_item("type", error_type.to_string())?; let message_template_python = error_type.message_template_python(); d.set_item("message_template_python", message_template_python)?; d.set_item( "example_message_python", error_type.render_message(py, InputType::Python)?, )?; let message_template_json = error_type.message_template_json(); if message_template_python != message_template_json { d.set_item("message_template_json", message_template_json)?; d.set_item("example_message_json", error_type.render_message(py, InputType::Json)?)?; } d.set_item("example_context", error_type.py_dict(py)?)?; errors.push(d); } } PyList::new(py, errors) } fn field_from_context<'py, T: FromPyObjectOwned<'py>>( context: Option<&Bound<'py, PyDict>>, field_name: &str, enum_name: &str, type_name_fn: fn() -> &'static str, ) -> PyResult { context .ok_or_else(|| py_error_type!(PyTypeError; "{enum_name}: '{field_name}' required in context"))? .get_item(field_name)? .ok_or_else(|| py_error_type!(PyTypeError; "{enum_name}: '{field_name}' required in context"))? .extract::() .map_err( |_| py_error_type!(PyTypeError; "{enum_name}: '{field_name}' context value must be a {}", type_name_fn()), ) } fn cow_field_from_context<'py, T: FromPyObjectOwned<'py>, B: ToOwned + ?Sized + 'static>( context: Option<&Bound<'py, PyDict>>, field_name: &str, enum_name: &str, _type_name_fn: fn() -> &'static str, ) -> PyResult> { let res: T = field_from_context(context, field_name, enum_name, || { type_name::().split("::").last().unwrap() })?; Ok(Cow::Owned(res)) } macro_rules! basic_error_default { ( $item:ident $(,)? ) => { pub const $item: ErrorType = ErrorType::$item { context: None }; }; ( $item:ident, $($key:ident),* $(,)? ) => {}; // With more parameters enum item must be explicitly created } macro_rules! error_types { ( $( $item:ident { $($key:ident: {ctx_type: $ctx_type:ty, ctx_fn: $ctx_fn:path}),* $(,)? }, )+ ) => { #[derive(Clone, Debug, Display, EnumMessage, EnumIter)] #[strum(serialize_all = "snake_case")] pub enum ErrorType { $( $item { context: Option>, $($key: $ctx_type,)* } ),+, } impl ErrorType { pub fn new(py: Python, value: &str, context: Option>) -> PyResult { let lookup = ERROR_TYPE_LOOKUP.get_or_init(py, Self::build_lookup); let error_type = match lookup.get(value) { Some(error_type) => error_type.clone(), None => return py_err!(PyKeyError; "Invalid error type: '{value}'"), }; match error_type { $( Self::$item { .. } => { Ok(Self::$item { $( $key: $ctx_fn(context.as_ref(), stringify!($key), stringify!($item), || stringify!($ctx_type))?, )* context: context.map(|c| c.unbind()), }) }, )+ } } fn py_dict_update_ctx(&self, py: Python, dict: &Bound<'_, PyDict>) -> PyResult { use pyo3::types::PyMapping; match self { $( Self::$item { context, $($key,)* } => { $( dict.set_item(stringify!($key), $key)?; )* if let Some(ctx) = context { dict.update(ctx.bind(py).cast::()?)?; Ok(true) } else { Ok(false) } }, )+ } } } pub struct ErrorTypeDefaults {} // Allow unused default constants as they are generated by macro. // Also allow camel case as constants so we dont need to do case conversion of macro // generated names. Enums are also then easier to find when searching. #[allow(dead_code, non_upper_case_globals)] impl ErrorTypeDefaults { $( basic_error_default!($item, $($key),*); )+ } }; } // Definite each validation error. // NOTE: if an error has parameters: // * the variables in the message need to match the enum struct // * you need to add an entry to the `render` enum to render the error message as a template error_types! { // --------------------- // Assignment errors NoSuchAttribute { attribute: {ctx_type: String, ctx_fn: field_from_context}, }, // --------------------- // JSON errors JsonInvalid { error: {ctx_type: String, ctx_fn: field_from_context}, }, JsonType {}, NeedsPythonObject { method_name: {ctx_type: String, ctx_fn: field_from_context} }, // --------------------- // recursion error RecursionLoop {}, // --------------------- // typed dict specific errors Missing {}, FrozenField {}, FrozenInstance {}, ExtraForbidden {}, InvalidKey {}, GetAttributeError { error: {ctx_type: String, ctx_fn: field_from_context}, }, // --------------------- // model class specific errors ModelType { class_name: {ctx_type: String, ctx_fn: field_from_context}, }, ModelAttributesType {}, // --------------------- // dataclass errors (we don't talk about ArgsKwargs here for simplicity) DataclassType { class_name: {ctx_type: String, ctx_fn: field_from_context}, }, DataclassExactType { class_name: {ctx_type: String, ctx_fn: field_from_context}, }, // --------------------- // namedtuple errors NamedTupleType { class_name: {ctx_type: String, ctx_fn: field_from_context}, }, // --------------------- // Default factory not called (happens when there's already an error and the factory takes data) DefaultFactoryNotCalled {}, // --------------------- // None errors NoneRequired {}, // --------------------- // generic comparison errors GreaterThan { gt: {ctx_type: Number, ctx_fn: field_from_context}, }, GreaterThanEqual { ge: {ctx_type: Number, ctx_fn: field_from_context}, }, LessThan { lt: {ctx_type: Number, ctx_fn: field_from_context}, }, LessThanEqual { le: {ctx_type: Number, ctx_fn: field_from_context}, }, MultipleOf { multiple_of: {ctx_type: Number, ctx_fn: field_from_context}, }, FiniteNumber {}, // --------------------- // generic length errors - used for everything with a length except strings and bytes which need custom messages TooShort { field_type: {ctx_type: String, ctx_fn: field_from_context}, min_length: {ctx_type: usize, ctx_fn: field_from_context}, actual_length: {ctx_type: usize, ctx_fn: field_from_context}, }, TooLong { field_type: {ctx_type: String, ctx_fn: field_from_context}, max_length: {ctx_type: usize, ctx_fn: field_from_context}, actual_length: {ctx_type: Option, ctx_fn: field_from_context}, }, // --------------------- // generic collection and iteration errors IterableType {}, IterationError { error: {ctx_type: String, ctx_fn: field_from_context}, }, // --------------------- // string errors StringType {}, StringUnicode {}, StringTooShort { min_length: {ctx_type: usize, ctx_fn: field_from_context}, }, StringTooLong { max_length: {ctx_type: usize, ctx_fn: field_from_context}, }, StringPatternMismatch { pattern: {ctx_type: String, ctx_fn: field_from_context}, }, StringNotAscii {}, // --------------------- // enum errors Enum { expected: {ctx_type: String, ctx_fn: field_from_context}, }, // --------------------- // dict errors DictType {}, FrozenDictType {}, OrderedDictType {}, CounterType {}, MappingType { error: {ctx_type: Cow<'static, str>, ctx_fn: cow_field_from_context}, }, // --------------------- // list errors ListType {}, // --------------------- // deque errors DequeType {}, // --------------------- // tuple errors TupleType {}, // --------------------- // set errors SetType {}, SetItemNotHashable {}, // --------------------- // bool errors BoolType {}, BoolParsing {}, // --------------------- // int errors IntType {}, IntParsing {}, IntParsingSize {}, IntFromFloat {}, // --------------------- // float errors FloatType {}, FloatParsing {}, // --------------------- // bytes errors BytesType {}, BytesTooShort { min_length: {ctx_type: usize, ctx_fn: field_from_context}, }, BytesTooLong { max_length: {ctx_type: usize, ctx_fn: field_from_context}, }, BytesInvalidEncoding { encoding: {ctx_type: String, ctx_fn: field_from_context}, encoding_error: {ctx_type: String, ctx_fn: field_from_context}, }, // --------------------- // python errors from functions ValueError { error: {ctx_type: Option>, ctx_fn: field_from_context}, // Use Option because EnumIter requires Default to be implemented }, AssertionError { error: {ctx_type: Option>, ctx_fn: field_from_context}, // Use Option because EnumIter requires Default to be implemented }, // Note: strum message and serialize are not used here CustomError { // context is a common field in all enums error_type: {ctx_type: String, ctx_fn: field_from_context}, message_template: {ctx_type: String, ctx_fn: field_from_context}, }, // --------------------- // literals LiteralError { expected: {ctx_type: String, ctx_fn: field_from_context}, }, // --------------------- // missing sentinel MissingSentinelError {}, // --------------------- // ellipsis EllipsisError {}, // date errors DateType {}, DateParsing { error: {ctx_type: Cow<'static, str>, ctx_fn: cow_field_from_context}, }, DateFromDatetimeParsing { error: {ctx_type: Cow<'static, str>, ctx_fn: cow_field_from_context}, }, DateFromDatetimeInexact {}, DatePast {}, DateFuture {}, // --------------------- // date errors TimeType {}, TimeParsing { error: {ctx_type: Cow<'static, str>, ctx_fn: cow_field_from_context}, }, // --------------------- // datetime errors DatetimeType {}, DatetimeParsing { error: {ctx_type: Cow<'static, str>, ctx_fn: cow_field_from_context}, }, DatetimeObjectInvalid { error: {ctx_type: String, ctx_fn: field_from_context}, }, DatetimeFromDateParsing { error: {ctx_type: Cow<'static, str>, ctx_fn: cow_field_from_context}, }, DatetimePast {}, DatetimeFuture {}, // --------------------- // timezone errors TimezoneNaive {}, TimezoneAware {}, TimezoneOffset { tz_expected: {ctx_type: i32, ctx_fn: field_from_context}, tz_actual: {ctx_type: i32, ctx_fn: field_from_context}, }, // --------------------- // timedelta errors TimeDeltaType {}, TimeDeltaParsing { error: {ctx_type: Cow<'static, str>, ctx_fn: cow_field_from_context}, }, // --------------------- // frozenset errors FrozenSetType {}, // --------------------- // introspection types - e.g. isinstance, callable IsInstanceOf { class: {ctx_type: String, ctx_fn: field_from_context}, }, IsSubclassOf { class: {ctx_type: String, ctx_fn: field_from_context}, }, CallableType {}, // --------------------- // union errors UnionTagInvalid { discriminator: {ctx_type: String, ctx_fn: field_from_context}, tag: {ctx_type: String, ctx_fn: field_from_context}, expected_tags: {ctx_type: String, ctx_fn: field_from_context}, }, UnionTagNotFound { discriminator: {ctx_type: String, ctx_fn: field_from_context}, }, // --------------------- // argument errors ArgumentsType {}, MissingArgument {}, UnexpectedKeywordArgument {}, MissingKeywordOnlyArgument {}, UnexpectedPositionalArgument {}, MissingPositionalOnlyArgument {}, MultipleArgumentValues {}, // --------------------- // URL errors UrlType {}, UrlParsing { // would be great if this could be a static cow, waiting for https://github.com/servo/rust-url/issues/801 error: {ctx_type: String, ctx_fn: field_from_context}, }, UrlSyntaxViolation { error: {ctx_type: Cow<'static, str>, ctx_fn: cow_field_from_context}, }, UrlTooLong { max_length: {ctx_type: usize, ctx_fn: field_from_context}, }, UrlScheme { expected_schemes: {ctx_type: String, ctx_fn: field_from_context}, }, // UUID errors, UuidType {}, UuidParsing { error: {ctx_type: String, ctx_fn: field_from_context}, }, UuidVersion { expected_version: {ctx_type: usize, ctx_fn: field_from_context}, }, // Decimal errors DecimalType {}, DecimalParsing {}, DecimalMaxDigits { max_digits: {ctx_type: u64, ctx_fn: field_from_context}, }, DecimalMaxPlaces { decimal_places: {ctx_type: u64, ctx_fn: field_from_context}, }, DecimalWholeDigits { whole_digits: {ctx_type: u64, ctx_fn: field_from_context}, }, // Fraction errors FractionType {}, FractionParsing {}, // Complex errors ComplexType {}, ComplexStrParsing {}, } macro_rules! render { ($template:ident, $($value:ident),* $(,)?) => { Ok( $template $( .replace(concat!("{", stringify!($value), "}"), $value) )* ) }; } macro_rules! to_string_render { ($template:ident, $($value:ident),* $(,)?) => { Ok( $template $( .replace(concat!("{", stringify!($value), "}"), &$value.to_string()) )* ) }; } fn plural_s + PartialEq>(value: T) -> &'static str { if value == 1.into() { "" } else { "s" } } static ERROR_TYPE_LOOKUP: PyOnceLock> = PyOnceLock::new(); impl ErrorType { pub fn new_custom_error(py: Python, custom_error: PydanticCustomError) -> Self { Self::CustomError { error_type: custom_error.error_type().to_owned(), message_template: custom_error.message_template().to_owned(), context: custom_error.context(py), } } pub fn message_template_python(&self) -> &'static str { #[allow(clippy::match_same_arms)] // much nicer to have the messages explicitly listed match self { Self::NoSuchAttribute { .. } => "Object has no attribute '{attribute}'", Self::JsonInvalid { .. } => "Invalid JSON: {error}", Self::JsonType { .. } => "JSON input should be string, bytes or bytearray", Self::NeedsPythonObject { .. } => { "Cannot check `{method_name}` when validating from json, use a JsonOrPython validator instead" } Self::RecursionLoop { .. } => "Recursion error - cyclic reference detected", Self::Missing { .. } => "Field required", Self::FrozenField { .. } => "Field is frozen", Self::FrozenInstance { .. } => "Instance is frozen", Self::ExtraForbidden { .. } => "Extra inputs are not permitted", Self::InvalidKey { .. } => "Keys should be strings", Self::GetAttributeError { .. } => "Error extracting attribute: {error}", Self::ModelType { .. } => "Input should be a valid dictionary or instance of {class_name}", Self::ModelAttributesType { .. } => "Input should be a valid dictionary or object to extract fields from", Self::DataclassType { .. } => "Input should be a dictionary or an instance of {class_name}", Self::DataclassExactType { .. } => "Input should be an instance of {class_name}", Self::NamedTupleType { .. } => "Input should be a tuple, list, dictionary or an instance of {class_name}", Self::DefaultFactoryNotCalled { .. } => { "The default factory uses validated data, but at least one validation error occurred" } Self::NoneRequired { .. } => "Input should be None", Self::GreaterThan { .. } => "Input should be greater than {gt}", Self::GreaterThanEqual { .. } => "Input should be greater than or equal to {ge}", Self::LessThan { .. } => "Input should be less than {lt}", Self::LessThanEqual { .. } => "Input should be less than or equal to {le}", Self::MultipleOf { .. } => "Input should be a multiple of {multiple_of}", Self::FiniteNumber { .. } => "Input should be a finite number", Self::TooShort { .. } => { "{field_type} should have at least {min_length} item{expected_plural} after validation, not {actual_length}" } Self::TooLong { .. } => { "{field_type} should have at most {max_length} item{expected_plural} after validation, not {actual_length}" } Self::IterableType { .. } => "Input should be iterable", Self::IterationError { .. } => "Error iterating over object, error: {error}", Self::StringType { .. } => "Input should be a valid string", Self::StringUnicode { .. } => { "Input should be a valid string, unable to parse raw data as a unicode string" } Self::StringTooShort { .. } => "String should have at least {min_length} character{expected_plural}", Self::StringTooLong { .. } => "String should have at most {max_length} character{expected_plural}", Self::StringPatternMismatch { .. } => "String should match pattern '{pattern}'", Self::StringNotAscii { .. } => "String should contain only ASCII characters", Self::Enum { .. } => "Input should be {expected}", Self::DictType { .. } => "Input should be a valid dictionary", Self::FrozenDictType { .. } => "Input should be a valid frozendict", Self::OrderedDictType { .. } => "Input should be a valid OrderedDict", Self::CounterType { .. } => "Input should be a valid Counter", Self::MappingType { .. } => "Input should be a valid mapping, error: {error}", Self::ListType { .. } => "Input should be a valid list", Self::DequeType { .. } => "Input should be a valid deque", Self::TupleType { .. } => "Input should be a valid tuple", Self::SetType { .. } => "Input should be a valid set", Self::SetItemNotHashable { .. } => "Set items should be hashable", Self::BoolType { .. } => "Input should be a valid boolean", Self::BoolParsing { .. } => "Input should be a valid boolean, unable to interpret input", Self::IntType { .. } => "Input should be a valid integer", Self::IntParsing { .. } => "Input should be a valid integer, unable to parse string as an integer", Self::IntFromFloat { .. } => "Input should be a valid integer, got a number with a fractional part", Self::IntParsingSize { .. } => "Unable to parse input string as an integer, exceeded maximum size", Self::FloatType { .. } => "Input should be a valid number", Self::FloatParsing { .. } => "Input should be a valid number, unable to parse string as a number", Self::BytesType { .. } => "Input should be a valid bytes", Self::BytesTooShort { .. } => "Data should have at least {min_length} byte{expected_plural}", Self::BytesTooLong { .. } => "Data should have at most {max_length} byte{expected_plural}", Self::BytesInvalidEncoding { .. } => "Data should be valid {encoding}: {encoding_error}", Self::ValueError { .. } => "Value error, {error}", Self::AssertionError { .. } => "Assertion failed, {error}", Self::CustomError { .. } => "", // custom errors are handled separately Self::LiteralError { .. } => "Input should be {expected}", Self::MissingSentinelError { .. } => "Input should be the 'MISSING' sentinel", Self::EllipsisError { .. } => "Input should be the 'Ellipsis' literal", Self::DateType { .. } => "Input should be a valid date", Self::DateParsing { .. } => "Input should be a valid date in the format YYYY-MM-DD, {error}", Self::DateFromDatetimeParsing { .. } => "Input should be a valid date or datetime, {error}", Self::DateFromDatetimeInexact { .. } => { "Datetimes provided to dates should have zero time - e.g. be exact dates" } Self::DatePast { .. } => "Date should be in the past", Self::DateFuture { .. } => "Date should be in the future", Self::TimeType { .. } => "Input should be a valid time", Self::TimeParsing { .. } => "Input should be in a valid time format, {error}", Self::DatetimeType { .. } => "Input should be a valid datetime", Self::DatetimeParsing { .. } => "Input should be a valid datetime, {error}", Self::DatetimeObjectInvalid { .. } => "Invalid datetime object, got {error}", Self::DatetimeFromDateParsing { .. } => "Input should be a valid datetime or date, {error}", Self::DatetimePast { .. } => "Input should be in the past", Self::DatetimeFuture { .. } => "Input should be in the future", Self::TimezoneNaive { .. } => "Input should not have timezone info", Self::TimezoneAware { .. } => "Input should have timezone info", Self::TimezoneOffset { .. } => "Timezone offset of {tz_expected} required, got {tz_actual}", Self::TimeDeltaType { .. } => "Input should be a valid timedelta", Self::TimeDeltaParsing { .. } => "Input should be a valid timedelta, {error}", Self::FrozenSetType { .. } => "Input should be a valid frozenset", Self::IsInstanceOf { .. } => "Input should be an instance of {class}", Self::IsSubclassOf { .. } => "Input should be a subclass of {class}", Self::CallableType { .. } => "Input should be callable", Self::UnionTagInvalid { .. } => { "Input tag '{tag}' found using {discriminator} does not match any of the expected tags: {expected_tags}" } Self::UnionTagNotFound { .. } => "Unable to extract tag using discriminator {discriminator}", Self::ArgumentsType { .. } => "Arguments must be a tuple, list or a dictionary", Self::MissingArgument { .. } => "Missing required argument", Self::UnexpectedKeywordArgument { .. } => "Unexpected keyword argument", Self::MissingKeywordOnlyArgument { .. } => "Missing required keyword only argument", Self::UnexpectedPositionalArgument { .. } => "Unexpected positional argument", Self::MissingPositionalOnlyArgument { .. } => "Missing required positional only argument", Self::MultipleArgumentValues { .. } => "Got multiple values for argument", Self::UrlType { .. } => "URL input should be a string or URL", Self::UrlParsing { .. } => "Input should be a valid URL, {error}", Self::UrlSyntaxViolation { .. } => "Input violated strict URL syntax rules, {error}", Self::UrlTooLong { .. } => "URL should have at most {max_length} character{expected_plural}", Self::UrlScheme { .. } => "URL scheme should be {expected_schemes}", Self::UuidType { .. } => "UUID input should be a string, bytes or UUID object", Self::UuidParsing { .. } => "Input should be a valid UUID, {error}", Self::UuidVersion { .. } => "UUID version {expected_version} expected", Self::DecimalType { .. } => "Decimal input should be an integer, float, string or Decimal object", Self::DecimalParsing { .. } => "Input should be a valid decimal", Self::DecimalMaxDigits { .. } => { "Decimal input should have no more than {max_digits} digit{expected_plural} in total" } Self::DecimalMaxPlaces { .. } => { "Decimal input should have no more than {decimal_places} decimal place{expected_plural}" } Self::DecimalWholeDigits { .. } => { "Decimal input should have no more than {whole_digits} digit{expected_plural} before the decimal point" } Self::FractionParsing { .. } => "Input is not a valid fraction", Self::FractionType { .. } => "Fraction input should be an integer, float, string or Fraction object", Self::ComplexType { .. } => { "Input should be a valid python complex object, a number, or a valid complex string following the rules at https://docs.python.org/3/library/functions.html#complex" } Self::ComplexStrParsing { .. } => { "Input should be a valid complex string following the rules at https://docs.python.org/3/library/functions.html#complex" } } } pub fn message_template_json(&self) -> &'static str { match self { Self::NoneRequired { .. } => "Input should be null", Self::ListType { .. } | Self::DequeType { .. } | Self::TupleType { .. } | Self::IterableType { .. } | Self::SetType { .. } | Self::FrozenSetType { .. } => "Input should be a valid array", Self::ModelType { .. } | Self::ModelAttributesType { .. } | Self::DictType { .. } | Self::FrozenDictType { .. } | Self::OrderedDictType { .. } | Self::CounterType { .. } | Self::DataclassType { .. } => "Input should be an object", Self::NamedTupleType { .. } => "Input should be an array or an object", Self::TimeDeltaType { .. } => "Input should be a valid duration", Self::TimeDeltaParsing { .. } => "Input should be a valid duration, {error}", Self::ArgumentsType { .. } => "Arguments must be an array or an object", _ => self.message_template_python(), } } pub fn valid_type(py: Python, error_type: &str) -> bool { let lookup = ERROR_TYPE_LOOKUP.get_or_init(py, Self::build_lookup); lookup.contains_key(error_type) } fn build_lookup() -> AHashMap { let mut lookup = AHashMap::new(); for error_type in Self::iter() { if !matches!(error_type, Self::CustomError { .. }) { lookup.insert(error_type.to_string(), error_type); } } lookup } pub fn type_string(&self) -> String { match self { Self::CustomError { error_type, .. } => error_type.clone(), _ => self.to_string(), } } pub fn render_message(&self, py: Python, input_type: InputType) -> PyResult { let tmpl = match input_type { InputType::Python => self.message_template_python(), _ => self.message_template_json(), }; match self { Self::NoSuchAttribute { attribute, .. } => render!(tmpl, attribute), Self::JsonInvalid { error, .. } | Self::GetAttributeError { error, .. } | Self::IterationError { error, .. } | Self::DatetimeObjectInvalid { error, .. } | Self::UrlParsing { error, .. } | Self::UuidParsing { error, .. } => render!(tmpl, error), Self::MappingType { error, .. } | Self::DateParsing { error, .. } | Self::DateFromDatetimeParsing { error, .. } | Self::TimeParsing { error, .. } | Self::DatetimeParsing { error, .. } | Self::DatetimeFromDateParsing { error, .. } | Self::TimeDeltaParsing { error, .. } | Self::UrlSyntaxViolation { error, .. } => render!(tmpl, error), Self::NeedsPythonObject { method_name, .. } => render!(tmpl, method_name), Self::ModelType { class_name, .. } | Self::DataclassType { class_name, .. } | Self::DataclassExactType { class_name, .. } | Self::NamedTupleType { class_name, .. } => render!(tmpl, class_name), Self::GreaterThan { gt, .. } => to_string_render!(tmpl, gt), Self::GreaterThanEqual { ge, .. } => to_string_render!(tmpl, ge), Self::LessThan { lt, .. } => to_string_render!(tmpl, lt), Self::LessThanEqual { le, .. } => to_string_render!(tmpl, le), Self::MultipleOf { multiple_of, .. } => to_string_render!(tmpl, multiple_of), Self::TooShort { field_type, min_length, actual_length, .. } => { let expected_plural = plural_s(*min_length); to_string_render!(tmpl, field_type, min_length, actual_length, expected_plural,) } Self::TooLong { field_type, max_length, actual_length, .. } => { let expected_plural = plural_s(*max_length); let actual_length = actual_length.map_or(Cow::Borrowed("more"), |v| Cow::Owned(v.to_string())); to_string_render!(tmpl, field_type, max_length, actual_length, expected_plural,) } Self::StringTooShort { min_length, .. } | Self::BytesTooShort { min_length, .. } => { let expected_plural = plural_s(*min_length); to_string_render!(tmpl, min_length, expected_plural) } Self::StringTooLong { max_length, .. } | Self::BytesTooLong { max_length, .. } | Self::UrlTooLong { max_length, .. } => { let expected_plural = plural_s(*max_length); to_string_render!(tmpl, max_length, expected_plural) } Self::StringPatternMismatch { pattern, .. } => render!(tmpl, pattern), Self::Enum { expected, .. } => to_string_render!(tmpl, expected), Self::BytesInvalidEncoding { encoding, encoding_error, .. } => render!(tmpl, encoding, encoding_error), Self::ValueError { error, .. } => { let error = &error .as_ref() .map_or(Cow::Borrowed("None"), |v| Cow::Owned(v.bind(py).to_string())); render!(tmpl, error) } Self::AssertionError { error, .. } => { let error = &error .as_ref() .map_or(Cow::Borrowed("None"), |v| Cow::Owned(v.bind(py).to_string())); render!(tmpl, error) } Self::CustomError { message_template, context, .. } => PydanticCustomError::format_message(message_template, context.as_ref().map(|c| c.bind(py))), Self::LiteralError { expected, .. } => render!(tmpl, expected), Self::TimezoneOffset { tz_expected, tz_actual, .. } => to_string_render!(tmpl, tz_expected, tz_actual), Self::IsInstanceOf { class, .. } | Self::IsSubclassOf { class, .. } => render!(tmpl, class), Self::UnionTagInvalid { discriminator, tag, expected_tags, .. } => render!(tmpl, discriminator, tag, expected_tags), Self::UnionTagNotFound { discriminator, .. } => render!(tmpl, discriminator), Self::UrlScheme { expected_schemes, .. } => render!(tmpl, expected_schemes), Self::UuidVersion { expected_version, .. } => to_string_render!(tmpl, expected_version), Self::DecimalMaxDigits { max_digits, .. } => { let expected_plural = plural_s(*max_digits); to_string_render!(tmpl, max_digits, expected_plural) } Self::DecimalMaxPlaces { decimal_places, .. } => { let expected_plural = plural_s(*decimal_places); to_string_render!(tmpl, decimal_places, expected_plural) } Self::DecimalWholeDigits { whole_digits, .. } => { let expected_plural = plural_s(*whole_digits); to_string_render!(tmpl, whole_digits, expected_plural) } _ => Ok(tmpl.to_string()), } } pub fn py_dict(&self, py: Python) -> PyResult>> { let dict = PyDict::new(py); let custom_ctx_used = self.py_dict_update_ctx(py, &dict)?; if let Self::CustomError { .. } = self { if custom_ctx_used { // Custom error type and message are handled separately by the caller. // They are added to the root of the ErrorDetails. dict.del_item("error_type")?; dict.del_item("message_template")?; Ok(Some(dict.into())) } else { Ok(None) } } else if custom_ctx_used || !dict.is_empty() { Ok(Some(dict.into())) } else { Ok(None) } } } #[derive(Clone, Debug, IntoPyObject, IntoPyObjectRef)] pub enum Number { Int(i64), BigInt(BigInt), Float(f64), String(String), } impl Default for Number { fn default() -> Self { Self::Int(0) } } impl From for Number { fn from(f: f64) -> Self { Self::Float(f) } } impl From for Number { fn from(s: String) -> Self { Self::String(s) } } impl From for Number { fn from(i: Int) -> Self { match i { Int::I64(i) => Number::Int(i), Int::Big(b) => Number::BigInt(b), } } } impl FromPyObject<'_, '_> for Number { type Error = PyErr; #[allow(clippy::same_functions_in_if_condition)] // https://github.com/rust-lang/rust-clippy/issues/10928 fn extract(obj: Borrowed<'_, '_, PyAny>) -> PyResult { if let Ok(int) = obj.extract() { Ok(Number::Int(int)) } else if let Ok(float) = obj.extract() { Ok(Number::Float(float)) } else if let Ok(string) = obj.extract() { Ok(Number::String(string)) } else { py_err!(PyTypeError; "Expected int or float or String, got {}", obj.get_type()) } } } impl fmt::Display for Number { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { match self { Self::Float(s) => write!(f, "{s}"), Self::Int(i) => write!(f, "{i}"), Self::BigInt(i) => write!(f, "{i}"), Self::String(s) => write!(f, "{s}"), } } } pydantic-pydantic-e28e879/pydantic-core/src/errors/validation_exception.rs000066400000000000000000000555761526274674700272030ustar00rootroot00000000000000use std::borrow::Cow; use std::cell::RefCell; use std::fmt; use std::fmt::{Display, Write}; use std::str::from_utf8; use pyo3::exceptions::{PyKeyError, PyTypeError, PyValueError}; use pyo3::ffi::{self, c_str}; use pyo3::intern; use pyo3::prelude::*; use pyo3::sync::PyOnceLock; use pyo3::types::{PyDict, PyList, PyString, PyTuple, PyType}; use serde::ser::{Error, SerializeMap, SerializeSeq}; use serde::{Serialize, Serializer}; use serde_json::ser::PrettyFormatter; use crate::build_tools::py_schema_error_type; use crate::errors::LocItem; use crate::get_pydantic_version; use crate::input::InputType; use crate::serializers::{Extra, SerMode, SerializationConfig, SerializationState, WarningsMode}; use crate::tools::{SchemaDict, safe_repr, write_truncated_to_limited_bytes}; use super::line_error::ValLineError; use super::location::Location; use super::types::ErrorType; use super::value_exception::PydanticCustomError; use super::{InputValue, ValError}; #[pyclass(extends=PyValueError, module="pydantic_core._pydantic_core", subclass, skip_from_py_object, frozen)] #[derive(Clone)] #[cfg_attr(debug_assertions, derive(Debug))] pub struct ValidationError { line_errors: Vec, title: Py, input_type: InputType, hide_input: bool, } impl ValidationError { pub fn new(line_errors: Vec, title: Py, input_type: InputType, hide_input: bool) -> Self { Self { line_errors, title, input_type, hide_input, } } pub fn from_val_error( py: Python, title: Py, input_type: InputType, error: ValError, outer_location: Option, hide_input: bool, validation_error_cause: bool, ) -> PyErr { match error { ValError::LineErrors(raw_errors) => { let line_errors = match outer_location { Some(outer_location) => raw_errors .into_iter() .map(|e| PyLineError::from_val_line_error(py, e.with_outer_location(outer_location.clone()))) .collect(), None => raw_errors .into_iter() .map(|e| PyLineError::from_val_line_error(py, e)) .collect(), }; let line_errors = match line_errors { Ok(errors) => errors, Err(err) => return err, }; let validation_error = Self::new(line_errors, title, input_type, hide_input); match Bound::new(py, validation_error) { Ok(err) => { // Will return an import error if the backport was needed and not installed: if validation_error_cause && let Some(cause_problem) = ValidationError::maybe_add_cause(err.borrow(), py) { return cause_problem; } PyErr::from_value(err.into_any()) } Err(err) => err, } } ValError::InternalErr(err) => err, ValError::Omit => Self::omit_error(), ValError::UseDefault => Self::use_default_error(), } } pub fn display(&self, py: Python, prefix_override: Option<&'static str>, hide_input: bool) -> String { let url_prefix = get_url_prefix(py, include_url_env(py)); let line_errors = pretty_py_line_errors(py, self.input_type, self.line_errors.iter(), url_prefix, hide_input); if let Some(prefix) = prefix_override { format!("{prefix}\n{line_errors}") } else { let count = self.line_errors.len(); let plural = if count == 1 { "" } else { "s" }; let title: &str = self.title.extract(py).unwrap(); format!("{count} validation error{plural} for {title}\n{line_errors}") } } pub fn omit_error() -> PyErr { py_schema_error_type!("Uncaught Omit error, please check your usage of `default` validators.") } pub fn use_default_error() -> PyErr { py_schema_error_type!( "Uncaught `PydanticUseDefault` exception: the error was raised in a field validator and no default value is available for that field." ) } fn maybe_add_cause(self_: PyRef<'_, Self>, py: Python) -> Option { let mut user_py_errs = vec![]; for line_error in &self_.line_errors { if let ErrorType::AssertionError { error: Some(err), context: _, } | ErrorType::ValueError { error: Some(err), context: _, } = &line_error.error_type { let note = if let Location::Empty = &line_error.location { Cow::Borrowed("Pydantic: cause of loc: root") } else { Cow::Owned(format!( "Pydantic: cause of loc: {}", // Location formats with a newline at the end, hence the trim() line_error.location.to_string().trim() )) }; // Notes only support 3.11 upwards: #[cfg(Py_3_11)] { // Add the location context as a note, no direct c api for this, // fine performance wise, add_note() goes directly to C: "(PyCFunction)BaseException_add_note": // https://github.com/python/cpython/blob/main/Objects/exceptions.c if err.call_method1(py, "add_note", (format!("\n{note}"),)).is_ok() { user_py_errs.push(err.clone_ref(py)); } } // Pre 3.11 notes support, use a UserWarning exception instead: #[cfg(not(Py_3_11))] { use pyo3::exceptions::PyUserWarning; let wrapped = PyUserWarning::new_err((note,)); wrapped.set_cause(py, Some(PyErr::from_value(err.clone_ref(py).into_bound(py)))); user_py_errs.push(wrapped); } } } // Only add the cause if there are actually python user exceptions to show: if !user_py_errs.is_empty() { let title = "Pydantic User Code Exceptions"; // Native ExceptionGroup(s) only supported 3.11 and later: #[cfg(Py_3_11)] let cause = { use pyo3::exceptions::PyBaseExceptionGroup; Some(PyBaseExceptionGroup::new_err((title, user_py_errs)).into_value(py)) }; // Pre 3.11 ExceptionGroup support, use the python backport instead: // If something's gone wrong with the backport, just don't add the cause: #[cfg(not(Py_3_11))] let cause = { use pyo3::exceptions::PyImportError; match py.import("exceptiongroup") { Ok(py_mod) => match py_mod.getattr("ExceptionGroup") { Ok(group_cls) => group_cls.call1((title, user_py_errs)).ok(), Err(_) => None, }, Err(_) => { return Some(PyImportError::new_err( "validation_error_cause flag requires the exceptiongroup module backport to be installed when used on Python <3.11.", )); } } }; // Set the cause to the ValidationError: if let Some(cause) = cause { unsafe { // PyException_SetCause _steals_ a reference to cause, so must use .into_ptr() ffi::PyException_SetCause(self_.as_ptr(), cause.into_ptr()); } } } None } } static URL_ENV_VAR: PyOnceLock = PyOnceLock::new(); fn include_url_env(py: Python) -> bool { *URL_ENV_VAR.get_or_init(py, || { // Check the legacy env var first. // Using `var_os` here instead of `var` because we don't care about // the value (or whether we're able to decode it as UTF-8), just // whether it exists (and if it does, whether it's non-empty). match std::env::var_os("PYDANTIC_ERRORS_OMIT_URL") { Some(val) => { // We don't care whether warning succeeded or not, hence the assignment let _ = PyErr::warn( py, &py.get_type::(), c_str!("PYDANTIC_ERRORS_OMIT_URL is deprecated, use PYDANTIC_ERRORS_INCLUDE_URL instead"), 1, ); // If OMIT_URL exists but is empty, we include the URL: val.is_empty() } // If the legacy env var doesn't exist, check the documented one: None => match std::env::var("PYDANTIC_ERRORS_INCLUDE_URL") { Ok(val) => val == "1" || val.to_lowercase() == "true", Err(_) => true, }, } }) } static URL_PREFIX: PyOnceLock = PyOnceLock::new(); fn get_formated_url(py: Python) -> &'static str { let pydantic_version = match get_pydantic_version(py) { // include major and minor version only Some(value) => value.split('.').collect::>()[..2].join("."), None => "latest".to_string(), }; URL_PREFIX.get_or_init(py, || format!("https://errors.pydantic.dev/{pydantic_version}/v/")) } fn get_url_prefix(py: Python<'_>, include_url: bool) -> Option<&str> { if include_url { Some(get_formated_url(py)) } else { None } } // used to convert a validation error back to ValError for wrap functions impl ValidationError { pub(crate) fn into_val_error(self) -> ValError { self.line_errors.into_iter().map(Into::into).collect::>().into() } } #[pymethods] impl ValidationError { #[new] #[pyo3(signature = (title, line_errors, input_type="python", hide_input=false))] fn py_new(title: Py, line_errors: Vec, input_type: &str, hide_input: bool) -> PyResult { Ok(Self { line_errors, title, input_type: InputType::try_from(input_type)?, hide_input, }) } #[classmethod] #[pyo3(signature = (title, line_errors, input_type="python", hide_input=false))] fn from_exception_data<'py>( cls: &Bound<'py, PyType>, title: Py, line_errors: Bound<'_, PyList>, input_type: &str, hide_input: bool, ) -> PyResult> { cls.call1(( title, line_errors .iter() .map(|error| PyLineError::try_from(&error)) .collect::>>()?, InputType::try_from(input_type)?, hide_input, )) } #[getter] fn title(&self, py: Python) -> Py { self.title.clone_ref(py) } pub fn error_count(&self) -> usize { self.line_errors.len() } #[pyo3(signature = (*, include_url = true, include_context = true, include_input = true))] pub fn errors( &self, py: Python, include_url: bool, include_context: bool, include_input: bool, ) -> PyResult> { let url_prefix = get_url_prefix(py, include_url); let mut iteration_error = None; let list = PyList::new( py, // PyList::new takes ExactSizeIterator, so if an error occurs during iteration we // fill the list with None before returning the error; the list will then be thrown // away safely. self.line_errors.iter().map(|e| -> Py { if iteration_error.is_some() { return py.None(); } e.as_dict(py, url_prefix, include_context, self.input_type, include_input) .map_or_else( |err| { iteration_error = Some(err); py.None() }, Into::into, ) }), )?; if let Some(err) = iteration_error { Err(err) } else { Ok(list.unbind()) } } #[pyo3(signature = (*, indent = None, include_url = true, include_context = true, include_input = true))] pub fn json<'py>( &self, py: Python<'py>, indent: Option, include_url: bool, include_context: bool, include_input: bool, ) -> PyResult> { let config = SerializationConfig::default(); let extra = Extra::new( py, SerMode::Json, None, false, false, false, false, false, true, None, false, None, None, ); let mut state = SerializationState::new(config, WarningsMode::None, None, None, extra)?; let mut serializer = ValidationErrorSerializer { py, line_errors: &self.line_errors, url_prefix: get_url_prefix(py, include_url), include_context, include_input, state: &mut state, input_type: &self.input_type, }; let writer: Vec = Vec::with_capacity(self.line_errors.len() * 200); let bytes = match indent { Some(indent) => { let indent = vec![b' '; indent]; let formatter = PrettyFormatter::with_indent(&indent); let mut ser = crate::serializers::ser::PythonSerializer::with_formatter(writer, formatter); serializer.serialize(&mut ser).map_err(json_py_err)?; ser.into_inner() } None => { let mut ser = crate::serializers::ser::PythonSerializer::new(writer); serializer.serialize(&mut ser).map_err(json_py_err)?; ser.into_inner() } }; let s = from_utf8(&bytes).map_err(json_py_err)?; Ok(PyString::new(py, s)) } fn __repr__(&self, py: Python) -> String { self.display(py, None, self.hide_input) } fn __str__(&self, py: Python) -> String { self.__repr__(py) } fn __reduce__<'py>(slf: &Bound<'py, Self>) -> PyResult<(Bound<'py, PyAny>, Bound<'py, PyTuple>)> { let py = slf.py(); let callable = slf.getattr("from_exception_data")?; let borrow = slf.try_borrow()?; let args = ( &borrow.title, borrow.errors(py, include_url_env(py), true, true)?, borrow.input_type, borrow.hide_input, ) .into_pyobject(py)?; Ok((callable, args)) } } pub fn pretty_py_line_errors<'a>( py: Python, input_type: InputType, line_errors_iter: impl Iterator, url_prefix: Option<&str>, hide_input: bool, ) -> String { line_errors_iter .map(|i| i.pretty(py, input_type, url_prefix, hide_input)) .collect::, _>>() .unwrap_or_else(|err| vec![format!("[error formatting line errors: {err}]")]) .join("\n") } /// `PyLineError` are the public version of `ValLineError`, as help and used in `ValidationError`s #[pyclass(from_py_object)] #[derive(Clone)] #[cfg_attr(debug_assertions, derive(Debug))] pub struct PyLineError { error_type: ErrorType, location: Location, input_value: Py, } impl From for ValLineError { /// Used to extract line errors from a validation error for wrap functions fn from(other: PyLineError) -> ValLineError { ValLineError { error_type: other.error_type, location: other.location, input_value: InputValue::Python(other.input_value), } } } impl TryFrom<&Bound<'_, PyAny>> for PyLineError { type Error = PyErr; fn try_from(value: &Bound<'_, PyAny>) -> PyResult { let dict = value.cast::()?; let py = value.py(); let type_raw = dict .get_item(intern!(py, "type"))? .ok_or_else(|| PyKeyError::new_err("type"))?; let error_type = if let Ok(type_str) = type_raw.cast::() { let context: Option> = dict.get_as(intern!(py, "ctx"))?; ErrorType::new(py, type_str.to_str()?, context)? } else if let Ok(custom_error) = type_raw.cast::() { ErrorType::new_custom_error(py, custom_error.get().clone()) } else { return Err(PyTypeError::new_err( "`type` should be a `str` or `PydanticCustomError`", )); }; let location = Location::try_from(dict.get_item("loc")?.as_ref())?; let input_value = match dict.get_item("input")? { Some(i) => i.unbind(), None => py.None(), }; Ok(Self { error_type, location, input_value, }) } } impl PyLineError { pub fn from_val_line_error(py: Python, error: ValLineError) -> PyResult { Ok(Self { error_type: error.error_type, location: error.location, input_value: error.input_value.into_pyobject(py)?.unbind(), }) } fn get_error_url(&self, url_prefix: &str) -> String { format!("{url_prefix}{}", self.error_type.type_string()) } pub fn as_dict<'py>( &self, py: Python<'py>, url_prefix: Option<&str>, include_context: bool, input_type: InputType, include_input: bool, ) -> PyResult> { let dict = PyDict::new(py); dict.set_item("type", self.error_type.type_string())?; dict.set_item("loc", &self.location)?; dict.set_item("msg", self.error_type.render_message(py, input_type)?)?; if include_input { dict.set_item("input", &self.input_value)?; } if include_context && let Some(context) = self.error_type.py_dict(py)? { dict.set_item("ctx", context)?; } if let Some(url_prefix) = url_prefix // Don't add URLs for custom errors && !matches!(self.error_type, ErrorType::CustomError { .. }) { dict.set_item("url", self.get_error_url(url_prefix))?; } Ok(dict) } fn pretty( &self, py: Python, input_type: InputType, url_prefix: Option<&str>, hide_input: bool, ) -> Result { let mut output = String::with_capacity(200); write!(output, "{}", self.location)?; let message = match self.error_type.render_message(py, input_type) { Ok(message) => message, Err(err) => format!("(error rendering message: {err})"), }; write!(output, " {message} [type={}", self.error_type.type_string())?; // special case: don't show input for DefaultFactoryNotCalled errors - there is no valid input if !hide_input && !matches!(self.error_type, ErrorType::DefaultFactoryNotCalled { .. }) { let input_value = self.input_value.bind(py); let input_str = safe_repr(input_value); write!(output, ", input_value=")?; write_truncated_to_limited_bytes(&mut output, &input_str.to_string(), 50)?; if let Ok(type_) = input_value.get_type().qualname() { write!(output, ", input_type={type_}")?; } } output.push(']'); if let Some(url_prefix) = url_prefix // Don't display URLs for custom errors && !matches!(self.error_type, ErrorType::CustomError { .. }) { write!( output, "\n For further information visit {}", self.get_error_url(url_prefix) )?; } Ok(output) } } pub(super) fn json_py_err(error: impl Display) -> PyErr { PyValueError::new_err(format!("Error serializing ValidationError to JSON: {error}")) } pub(super) fn py_err_json(error: PyErr) -> S::Error where S: Serializer, { S::Error::custom(error.to_string()) } struct ValidationErrorSerializer<'slf, 'py> { py: Python<'py>, line_errors: &'py [PyLineError], url_prefix: Option<&'py str>, include_context: bool, include_input: bool, state: &'slf mut SerializationState<'py>, input_type: &'py InputType, } impl ValidationErrorSerializer<'_, '_> { fn serialize(&mut self, serializer: S) -> Result where S: Serializer, { let mut seq = serializer.serialize_seq(Some(self.line_errors.len()))?; for line_error in self.line_errors { let line_s = PyLineErrorSerializer { py: self.py, line_error, url_prefix: self.url_prefix, include_context: self.include_context, include_input: self.include_input, state: RefCell::new(self.state), input_type: self.input_type, }; seq.serialize_element(&line_s)?; } seq.end() } } struct PyLineErrorSerializer<'slf, 'py> { py: Python<'py>, line_error: &'py PyLineError, url_prefix: Option<&'py str>, include_context: bool, include_input: bool, state: RefCell<&'slf mut SerializationState<'py>>, input_type: &'py InputType, } impl Serialize for PyLineErrorSerializer<'_, '_> { fn serialize(&self, serializer: S) -> Result where S: Serializer, { let py = self.py; let size = 3 + [self.url_prefix.is_some(), self.include_context, self.include_input] .into_iter() .filter(|b| *b) .count(); let mut map = serializer.serialize_map(Some(size))?; let mut state = self.state.borrow_mut(); map.serialize_entry("type", &self.line_error.error_type.type_string())?; map.serialize_entry("loc", &self.line_error.location)?; let msg = self .line_error .error_type .render_message(py, *self.input_type) .map_err(py_err_json::)?; map.serialize_entry("msg", &msg)?; if self.include_input { map.serialize_entry("input", &state.serialize_infer(self.line_error.input_value.bind(py)))?; } if self.include_context && let Some(context) = self.line_error.error_type.py_dict(py).map_err(py_err_json::)? { map.serialize_entry("ctx", &state.serialize_infer(context.bind(py)))?; } if let Some(url_prefix) = self.url_prefix { map.serialize_entry("url", &self.line_error.get_error_url(url_prefix))?; } map.end() } } pydantic-pydantic-e28e879/pydantic-core/src/errors/value_exception.rs000066400000000000000000000125341526274674700261500ustar00rootroot00000000000000use pyo3::exceptions::{PyException, PyValueError}; use pyo3::prelude::*; use pyo3::types::{PyDict, PyString}; use crate::input::InputType; use super::line_error::ToErrorValue; use super::{ErrorType, ValError}; #[pyclass(extends=PyException, module="pydantic_core._pydantic_core", skip_from_py_object)] #[derive(Debug, Clone)] pub struct PydanticOmit {} impl PydanticOmit { pub(crate) fn new_err() -> PyErr { PyErr::new::(()) } } #[pymethods] impl PydanticOmit { #[new] pub fn py_new() -> Self { Self {} } fn __str__(&self) -> &'static str { self.__repr__() } fn __repr__(&self) -> &'static str { "PydanticOmit()" } } #[pyclass(extends=PyException, module="pydantic_core._pydantic_core", skip_from_py_object)] #[derive(Debug, Clone)] pub struct PydanticUseDefault {} #[pymethods] impl PydanticUseDefault { #[new] pub fn py_new() -> Self { Self {} } fn __str__(&self) -> &'static str { self.__repr__() } fn __repr__(&self) -> &'static str { "PydanticUseDefault()" } } #[pyclass(extends=PyValueError, module="pydantic_core._pydantic_core", subclass, frozen, skip_from_py_object)] #[derive(Debug, Clone, Default)] pub struct PydanticCustomError { error_type: String, message_template: String, context: Option>, } #[pymethods] impl PydanticCustomError { #[new] #[pyo3(signature = (error_type, message_template, context = None, /))] pub fn py_new(error_type: String, message_template: String, context: Option>) -> Self { Self { error_type, message_template, context: context.map(Bound::unbind), } } #[getter(r#type)] pub fn error_type(&self) -> &str { &self.error_type } #[getter] pub fn message_template(&self) -> &str { &self.message_template } #[getter] pub fn context(&self, py: Python) -> Option> { self.context.as_ref().map(|c| c.clone_ref(py)) } pub fn message(&self, py: Python) -> PyResult { Self::format_message(&self.message_template, self.context.as_ref().map(|c| c.bind(py))) } fn __str__(&self, py: Python) -> PyResult { self.message(py) } fn __repr__(&self, py: Python) -> PyResult { let msg = self.message(py)?; match self.context.as_ref() { Some(ctx) => Ok(format!("{msg} [type={}, context={}]", self.error_type, ctx.bind(py))), None => Ok(format!("{msg} [type={}, context=None]", self.error_type)), } } } impl PydanticCustomError { pub fn into_val_error(self, input: impl ToErrorValue) -> ValError { let error_type = ErrorType::CustomError { error_type: self.error_type, message_template: self.message_template, context: self.context, }; ValError::new(error_type, input) } pub fn format_message(message_template: &str, context: Option<&Bound<'_, PyDict>>) -> PyResult { let mut message = message_template.to_string(); if let Some(ctx) = context { for (key, value) in ctx.iter() { let key = key.cast::()?; if let Ok(py_str) = value.cast::() { message = message.replace(&format!("{{{}}}", key.to_str()?), py_str.to_str()?); } else if let Ok(value_int) = value.extract::() { message = message.replace(&format!("{{{}}}", key.to_str()?), &value_int.to_string()); } else { // fallback for anything else just in case message = message.replace(&format!("{{{}}}", key.to_str()?), &value.to_string()); } } } Ok(message) } } #[pyclass(extends=PyValueError, module="pydantic_core._pydantic_core", skip_from_py_object, frozen)] #[derive(Debug, Clone)] pub struct PydanticKnownError { error_type: ErrorType, } #[pymethods] impl PydanticKnownError { #[new] #[pyo3(signature = (error_type, context=None, /))] pub fn py_new(py: Python, error_type: &str, context: Option>) -> PyResult { let error_type = ErrorType::new(py, error_type, context)?; Ok(Self { error_type }) } #[getter(r#type)] pub fn error_type(&self) -> String { self.error_type.to_string() } #[getter] pub fn message_template(&self) -> &'static str { self.error_type.message_template_python() } #[getter] pub fn context(&self, py: Python) -> PyResult>> { self.error_type.py_dict(py) } pub fn message(&self, py: Python) -> PyResult { self.error_type.render_message(py, InputType::Python) } fn __str__(&self, py: Python) -> PyResult { self.message(py) } fn __repr__(&self, py: Python) -> PyResult { let msg = self.message(py)?; match self.context(py)?.as_ref() { Some(ctx) => Ok(format!("{msg} [type={}, context={}]", self.error_type(), ctx.bind(py))), None => Ok(format!("{msg} [type={}, context=None]", self.error_type())), } } } impl PydanticKnownError { pub fn into_val_error(self, input: impl ToErrorValue) -> ValError { ValError::new(self.error_type, input) } } pydantic-pydantic-e28e879/pydantic-core/src/input/000077500000000000000000000000001526274674700222265ustar00rootroot00000000000000pydantic-pydantic-e28e879/pydantic-core/src/input/datetime.rs000066400000000000000000000663711526274674700244050ustar00rootroot00000000000000use pyo3::intern; use pyo3::prelude::*; use pyo3::IntoPyObjectExt; use pyo3::exceptions::PyValueError; use pyo3::pyclass::CompareOp; use pyo3::types::PyDateAccess; use pyo3::types::PyTimeAccess; use pyo3::types::PyTuple; use pyo3::types::PyTzInfoAccess; use pyo3::types::{PyDate, PyDateTime, PyDelta, PyDeltaAccess, PyDict, PyTime, PyTzInfo}; use speedate::DateConfig; use speedate::{ Date, DateTime, DateTimeConfig, Duration, MicrosecondsPrecisionOverflowBehavior, ParseError, Time, TimeConfig, }; use std::borrow::Cow; use std::collections::hash_map::DefaultHasher; use std::fmt::Write; use std::hash::Hash; use std::hash::Hasher; use strum::EnumMessage; use super::Input; use crate::errors::ToErrorValue; use crate::errors::{ErrorType, ValError, ValResult}; use crate::tools::py_err; use crate::validators::TemporalUnitMode; #[cfg_attr(debug_assertions, derive(Debug))] pub enum EitherDate<'py> { Raw(Date), Py(Bound<'py, PyDate>), } impl From for EitherDate<'_> { fn from(date: Date) -> Self { Self::Raw(date) } } impl<'py> From> for EitherDate<'py> { fn from(date: Bound<'py, PyDate>) -> Self { Self::Py(date) } } pub fn pydate_as_date(py_date: &Bound<'_, PyAny>) -> PyResult { if let Ok(py_date) = py_date.cast_exact::() { return pydateaccess_as_date(py_date); } py_any_date_as_date(py_date) } /// Fast path for reading date information from `datetime.date` and `datetime.datetime` objects #[inline] fn pydateaccess_as_date(py_date: &impl PyDateAccess) -> PyResult { Ok(Date { year: py_date.get_year().try_into()?, month: py_date.get_month(), day: py_date.get_day(), }) } /// Slow path for reading date information from subclasses of the builtin datetime types #[cold] fn py_any_date_as_date(py_date: &Bound<'_, PyAny>) -> PyResult { let py = py_date.py(); Ok(Date { year: py_date.getattr(intern!(py, "year"))?.extract()?, month: py_date.getattr(intern!(py, "month"))?.extract()?, day: py_date.getattr(intern!(py, "day"))?.extract()?, }) } impl<'py> EitherDate<'py> { pub fn try_into_py(self, py: Python<'py>, input: &(impl Input<'py> + ?Sized)) -> ValResult> { match self { Self::Raw(date) => { if date.year == 0 { return Err(ValError::new( ErrorType::DateParsing { error: Cow::Borrowed("year 0 is out of range"), context: None, }, input, )); } let py_date = PyDate::new(py, date.year.into(), date.month, date.day)?; Ok(py_date.into()) } Self::Py(py_date) => Ok(py_date.into()), } } pub fn as_raw(&self) -> PyResult { match self { Self::Raw(date) => Ok(*date), Self::Py(py_date) => pydate_as_date(py_date), } } } #[cfg_attr(debug_assertions, derive(Debug))] pub enum EitherTime<'py> { Raw(Time), Py(Bound<'py, PyTime>), } impl From

pydantic-core unit tests

loading...