ó
    pyüiœ¦  ã                   ór  • % S r SSKrSSKrSSKrSSKrSSKrSSKrSSKrSSKrSSK	J
r
JrJr  SSKJr  SSKJr  SSKJr  SSKJrJr  SSKJr  SSKrSS	KJr  S
SKJr  S
SKJrJrJ r J!r!J"r"J#r#J$r$J%r%  SSKJ&r&  SSK'J(r(  SSK)J*r*  \&RV                  " \,5      r-\" SS9 " S S5      5       r.\R^                  " S5      r0\R^                  " S5      r1S\\2\24   S\.S-  4S jr3Sr4Sr5Sr6\R^                  " S\Rn                  S9r8\R^                  " S\Rn                  S9r9\R^                  " S 5      r:\R^                  " S!5      r;1 S"kr<S#\2S\=\2S-  \2S-  4   4S$ jr>S#\2S\2S-  4S% jr?S&\R€                  SS4S' jrAS&\R€                  SS4S( jrBS)\R†                  SS4S* jrDS\RŠ                  4S+ jrFS\RŽ                  4S, jrH\
/ \RŠ                  4   rI\
/ \RŽ                  4   rJ\R–                  " 5       rL\FqM\I\NS-'   \HqO\J\NS.'   SqP\RŠ                  S-  \NS/'   S0\ISS4S1 jrQS2\JSS4S3 jrRS\RŠ                  4S4 jrSS\RŽ                  4S5 jrTS_S6 jrU\R¬                  " \U5        \W" \S75      (       a  \R°                  " \US89  \R²                  \R´                  4r[\=\\\]   S94   \NS:'   S;r^\=\_S94   \NS<'   S=SS>\[\^S?S@.SA\*S#\2SB\_SC\`SD\`SE\\\]   \=\\\]   S94   -  SF\_\=\_S94   -  SG\aS\\R†                  SS4   4SH jjrbS=SS>\[\^SI.SA\*S#\2SB\_SC\`SD\`SE\\\]   \=\\\]   S94   -  SF\_\=\_S94   -  S\R†                  4SJ jjrc\S=SS>\[\^SI.SA\*S#\2SB\_SC\`SD\`SE\\\]   \=\\\]   S94   -  SF\_\=\_S94   -  S\\R†                  SS4   4SK jj5       rdS?SL.SA\*S#\2SM\aS\R†                  4SN jjreS#\2SO\2S-  S\24SP jrfS`S)\R†                  SQ\2S-  SS4SR jjrg\h" 5       riS)\R†                  SS4SS jrj\" ST\"SU9rkSV\\\k   SW\2S)\R†                  SX\S\k4
SY jrlS&\R€                  S\24SZ jrm\R^                  " S[\RÜ                  5      roS\\2S-  S]\_S\2S-  4S^ jrpg)az>Contains utilities to handle HTTP requests in huggingface_hub.é    N)ÚCallableÚ	GeneratorÚMapping)Úcontextmanager)Ú	dataclass)Úquote)ÚAnyÚTypeVar)Úurlparse)ÚOfflineModeIsEnabledé   )Ú	constants)ÚBadRequestErrorÚBucketNotFoundErrorÚDisabledRepoErrorÚGatedRepoErrorÚHfHubHTTPErrorÚRemoteEntryNotFoundErrorÚRepositoryNotFoundErrorÚRevisionNotFoundErroré   )Úlogging)ÚSliceFileObj)ÚHTTP_METHOD_TT)Úfrozenc                   ó`   • \ rS rSr% Sr\\S'   \\S'   \\S'   Sr\S-  \S'   Sr	\S-  \S'   S	r
g)
ÚRateLimitInfoé6   aß  
Parsed rate limit information from HTTP response headers.

Attributes:
    resource_type (`str`): The type of resource being rate limited.
    remaining (`int`): The number of requests remaining in the current window.
    reset_in_seconds (`int`): The number of seconds until the rate limit resets.
    limit (`int`, *optional*): The maximum number of requests allowed in the current window.
    window_seconds (`int`, *optional*): The number of seconds in the current window.

Úresource_typeÚ	remainingÚreset_in_secondsNÚlimitÚwindow_seconds© )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__ÚstrÚ__annotations__Úintr"   r#   Ú__static_attributes__r$   ó    ÚX/home/mande/repo/quber/.venv/lib/python3.13/site-packages/huggingface_hub/utils/_http.pyr   r   6   s6   ‡ ñ
ð ÓØƒNØÓØ€Eˆ3�‰:ÓØ!%€N�C˜$‘JÖ%r.   r   zL\"(?P<resource_type>\w+)\"\s*;\s*r\s*=\s*(?P<r>\d+)\s*;\s*t\s*=\s*(?P<t>\d+)z'q\s*=\s*(?P<q>\d+).*?w\s*=\s*(?P<w>\d+)ÚheadersÚreturnc                 ó  • SnSnU  H+  nUR                  5       nUS:X  a  X   nM  US:X  d  M'  X   nM-     U(       d  g[        R                  U5      nU(       d  gUR                  S5      n[	        UR                  S5      5      n[	        UR                  S5      5      nSn	Sn
U(       aP  [
        R                  U5      nU(       a4  [	        UR                  S5      5      n	[	        UR                  S5      5      n
[        UUUU	U
S	9$ )
aê  Parse rate limit information from HTTP response headers.

Follows IETF draft: https://www.ietf.org/archive/id/draft-ietf-httpapi-ratelimit-headers-09.html
Only a subset is implemented.

Example:
```python
>>> from huggingface_hub.utils import parse_ratelimit_headers
>>> headers = {
...     "ratelimit": '"api";r=0;t=55',
...     "ratelimit-policy": '"fixed window";"api";q=500;w=300',
... }
>>> info = parse_ratelimit_headers(headers)
>>> info.remaining
0
>>> info.reset_in_seconds
55
```
NÚ	ratelimitzratelimit-policyr   ÚrÚtÚqÚw)r   r    r!   r"   r#   )ÚlowerÚ_RATELIMIT_REGEXÚsearchÚgroupr,   Ú_RATELIMIT_POLICY_REGEXr   )r0   r3   ÚpolicyÚkeyÚ	lower_keyÚmatchr   r    r!   r"   r#   Úpolicy_matchs               r/   Úparse_ratelimit_headersrB   R   sû   € ð* !€IØ€FÛˆØ—I‘I“Kˆ	Ø˜Ó#Ø™ŠIØÐ,Õ,Ø‘\ŠFñ ö Øä×#Ñ# IÓ.€EÞØà—K‘K Ó0€MÜ�E—K‘K Ó$Ó%€IÜ˜5Ÿ;™; sÓ+Ó,Ðà€EØ!%€NæÜ.×5Ñ5°fÓ=ˆÞÜ˜×*Ñ*¨3Ó/Ó0ˆEÜ  ×!3Ñ!3°CÓ!8Ó9ˆNäØ#ØØ)ØØ%ñð r.   zx-request-idzX-Amzn-Trace-Idzx-amz-cf-ida  
        # staging or production endpoint
        ^https://[^/]+
        (
            # on /api/repo_type/repo_id
            /api/(models|datasets|spaces)/(.+)
            |
            # or /repo_id/resolve/revision/...
            /(.+)/resolve/(.+)
        )
    )Úflagszz
        # staging or production endpoint
        ^https?://[^/]+
        # on /api/buckets/...
        /api/buckets/
    zA^https?://[^/]+/api/(models|datasets|spaces)/([^/]+)(?:/([^/]+))?z)^https?://[^/]+/api/buckets/([^/]+/[^/]+)>	   ÚrawÚblobÚrefsÚtreeÚcommitÚresolveÚrevisionÚsettingsÚdiscussionsÚurlc                 ó  • [         R                  U 5      nU(       d  g[        R                  R	                  UR                  S5      5      nUR                  S5      UR                  S5      pCU(       a  U[        ;  a
  U SU 3nX%4$ UnX%4$ )a  Extract (repo_type, repo_id) from an API URL.

Returns canonical repo_type values: "model", "dataset", "space" (or None).

Examples:
    >>> _parse_repo_info_from_url("https://huggingface.co/api/models/user/repo")
    ("model", "user/repo")
    >>> _parse_repo_info_from_url("https://huggingface.co/api/datasets/user/repo/resolve/main/data.csv")
    ("dataset", "user/repo")
    >>> _parse_repo_info_from_url("https://huggingface.co/api/models/bert-base-cased/resolve/main/config.json")
    ("model", "bert-base-cased")
©NNr   r   é   Ú/)Ú_REPO_ID_FROM_URL_REGEXr:   r   ÚREPO_TYPES_MAPPINGÚgetr;   Ú_REPO_URL_SUBPATHS)rM   r@   Ú	repo_typeÚfirstÚsecondÚrepo_ids         r/   Ú_parse_repo_info_from_urlrZ   ·   s…   € ô $×*Ñ*¨3Ó/€EÞØÜ×,Ñ,×0Ñ0°·±¸Q³Ó@€IØ—K‘K “N E§K¡K°£Nˆ6Þ�&Ô 2Ó2Ø�G˜1˜V˜HÐ%ˆð ÐÐð ˆØÐÐr.   c                 ó`   • [         R                  U 5      nU(       a  UR                  S5      $ S$ )z9Extract bucket_id (namespace/name) from a bucket API URL.r   N)Ú_BUCKET_ID_FROM_URL_REGEXr:   r;   )rM   r@   s     r/   Ú_parse_bucket_id_from_urlr]   Ð   s'   € ä%×,Ñ,¨SÓ1€EÞ"ˆ5�;‰;�q‹>Ð,¨Ð,r.   Úrequestc           	      ót  • [         R                  " 5       (       a  [        SU R                   S35      e[        U R
                  ;  aU  U R
                  R                  [        5      =(       d    [        [        R                  " 5       5      U R
                  [        '   U R
                  R                  [        5      n[        R                  SUU R                  U R                  U R
                  R                  S5      SL5        [         R                  (       a  [        R                  S[        U 5      5        U$ )zÝ
Event hook that will be used to make HTTP requests to the Hugging Face Hub.

What it does:
- Block requests if offline mode is enabled
- Add a request ID to the request headers
- Log the request if debug mode is enabled
zCannot reach za: offline mode is enabled. To disable it, please unset the `HF_HUB_OFFLINE` environment variable.z%Request %s: %s %s (authenticated: %s)ÚauthorizationNzSend: %s)r   Úis_offline_moder   rM   ÚX_AMZN_TRACE_IDr0   rT   ÚX_REQUEST_IDr*   ÚuuidÚuuid4ÚloggerÚdebugÚmethodÚHF_DEBUGÚ_curlify)r^   Ú
request_ids     r/   Úhf_request_event_hookrl   Ö   sè   € ô × Ò ×"Ñ"Ü"Ø˜GŸK™K˜=ð  )Jð  Kó
ð 	
ô
 ˜gŸo™oÓ-Ø+2¯?©?×+>Ñ+>¼|Ó+L×+aÔPSÔTX×T^ÒT^ÓT`ÓPaˆ�‰œÑ(Ø—‘×$Ñ$¤_Ó5€Jô ‡L�LØ/ØØ�‰Ø�‰Ø�‰×Ñ˜OÓ,°DÐ8ôô ××Ü�‰�Z¤¨'Ó!2Ô3àÐr.   c              ƒ   ó    #   • [        U 5      $ 7f)z+
Async version of `hf_request_event_hook`.
)rl   )r^   s    r/   Úasync_hf_request_event_hookrn   ÷   s   é € ô ! Ó)Ð)ùs   ‚Úresponsec              ƒ   óä   #   • U R                   S:¼  aJ  SU R                  ;   a9   [        U R                  S   5      nUS:  a  U R	                  5       I S h  v•N   g g g g ! [         a     g f = f N7f)Né�  zContent-lengthi@B )Ústatus_coder0   r,   Ú
ValueErrorÚaread)ro   Úlengths     r/   Úasync_hf_response_event_hookrv   þ   s€   é € Ø×Ñ˜sÓ"ð ˜x×/Ñ/Ó/ðÜ˜X×-Ñ-Ð.>Ñ?Ó@�ð ˜	Ó!Ø—n‘nÓ&×&Ñ&ð "ð 0ð #øô ó Ùðúñ 'ùs3   ‚!A0¤A ¼A0ÁA.ÁA0Á
A+Á(A0Á*A+Á+A0c                  ó<   • [         R                  " S[        /0SSS9$ )zI
Factory function to create a `httpx.Client` with the default transport.
r^   TN©Úevent_hooksÚfollow_redirectsÚtimeout)ÚhttpxÚClientrl   r$   r.   r/   Údefault_client_factoryr~     s'   € ô �<Š<ØÔ!6Ð 7Ð8ØØñð r.   c                  óH   • [         R                  " [        /[        /S.SSS9$ )zN
Factory function to create a `httpx.AsyncClient` with the default transport.
)r^   ro   TNrx   )r|   ÚAsyncClientrn   rv   r$   r.   r/   Údefault_async_client_factoryr�     s,   € ô ×ÒÜ!<Ð =ÔLhÐKiÑjØØñð r.   Ú_GLOBAL_CLIENT_FACTORYÚ_GLOBAL_ASYNC_CLIENT_FACTORYÚ_GLOBAL_CLIENTÚclient_factoryc                 ó\   • [            [        5         U qSSS5        g! , (       d  f       g= f)a  
Set the HTTP client factory to be used by `huggingface_hub`.

The client factory is a method that returns a `httpx.Client` object. On the first call to [`get_session`] the client factory
will be used to create a new `httpx.Client` object that will be shared between all calls made by `huggingface_hub`.

This can be useful if you are running your scripts in a specific environment requiring custom configuration (e.g. custom proxy or certifications).

Use [`get_session`] to get a correctly configured `httpx.Client`.
N)Ú_CLIENT_LOCKÚclose_sessionr‚   )r…   s    r/   Úset_client_factoryr‰   +  s   € ö 
ÜŒØ!/Ð÷ 
�Žús   ‡�
+Úasync_client_factoryc                 ó   • U q g)a‹  
Set the HTTP async client factory to be used by `huggingface_hub`.

The async client factory is a method that returns a `httpx.AsyncClient` object.
This can be useful if you are running your scripts in a specific environment requiring custom configuration (e.g. custom proxy or certifications).
Use [`get_async_client`] to get a correctly configured `httpx.AsyncClient`.

<Tip warning={true}>

Contrary to the `httpx.Client` that is shared between all calls made by `huggingface_hub`, the `httpx.AsyncClient` is not shared.
It is recommended to use an async context manager to ensure the client is properly closed when the context is exited.

</Tip>
N©rƒ   )rŠ   s    r/   Úset_async_client_factoryr�   <  s
   € ð  $8Ñ r.   c                  ó†   • [         c  [           [        5       q SSS5        [         $ [         $ ! , (       d  f       [         $ = f)zö
Get a `httpx.Client` object, using the transport factory from the user.

This client is shared between all calls made by `huggingface_hub`. Therefore you should not close it manually.

Use [`set_client_factory`] to customize the `httpx.Client`.
N)r„   r‡   r‚   r$   r.   r/   Úget_sessionr�   O  s3   € ô ÑÞÜ3Ó5ˆN÷ äÐŒ>Ð÷ Œ\äÐús	   Ž-­
A c                  ó   • [        5       $ )a°  
Return a `httpx.AsyncClient` object, using the transport factory from the user.

Use [`set_async_client_factory`] to customize the `httpx.AsyncClient`.

<Tip warning={true}>

Contrary to the `httpx.Client` that is shared between all calls made by `huggingface_hub`, the `httpx.AsyncClient` is not shared.
It is recommended to use an async context manager to ensure the client is properly closed when the context is exited.

</Tip>
rŒ   r$   r.   r/   Úget_async_sessionr‘   ^  s   € ô (Ó)Ð)r.   c                  óœ   • [         n Sq U b   U R                  5         gg! [         a"  n[        R	                  SU 35         SnAgSnAff = f)zÊ
Close the global `httpx.Client` used by `huggingface_hub`.

If a Client is closed, it will be recreated on the next call to [`get_session`].

Can be useful if e.g. an SSL certificate has been updated.
NzError closing client: )r„   ÚcloseÚ	Exceptionrf   Úwarning)ÚclientÚes     r/   rˆ   rˆ   n  sT   € ô €Fð €Nð Ñð	9Ø�L‰L�Nð øô ó 	9Ü�N‰NÐ3°A°3Ð7×8Ñ8ûð	9ús   � Ÿ
A©AÁAÚregister_at_fork)Úafter_in_child.Ú_DEFAULT_RETRY_ON_EXCEPTIONS)é­  iô  iö  i÷  iø  Ú_DEFAULT_RETRY_ON_STATUS_CODESé   é   F)Úmax_retriesÚbase_wait_timeÚmax_wait_timeÚretry_on_exceptionsÚretry_on_status_codesÚstreamrh   rŸ   r    r¡   r¢   r£   r¤   c          	   +   óN  ^ ^^^^^#   • [        U[        5      (       a  U4n[        T[        5      (       a  T4mSmUn	SmSn
SU;   a;  [        US   [        R                  [
        45      (       a  US   R                  5       n
[        5       n TS-  mSm U
b  US   R                  U
5        S[        R                  S[        4UU UUUU4S jjnU(       a;  UR                  " ST TS.UD6 nU" U5      (       d  Uv •   SSS5        g SSS5        O(UR                  " ST TS.UD6nU" U5      (       d  Uv •  g Tb.  [%        T5      S-   n[        R                  SU ST ST S35        O!U	n[        R                  SU ST ST S35        [&        R(                  " U5        [+        XIS-  5      n	GM%  ! , (       d  f       N‡= f! U aY  n[        R                  S	U S
T  ST 35        [        U[        R                   5      (       a
  [#        5         TT:”  a  Ue SnANäSnAff = f7f)zfInternal implementation of HTTP backoff logic shared between `http_backoff` and `http_stream_backoff`.r   NÚdatar   ro   r1   c                 ó  >• U R                   T;  a  g[        R                  SU R                    ST ST 35        TT:”  a  [        U 5        gU R                   S:X  a$  [	        U R
                  5      nUb  UR                  mg)zNHandle response and return True if should retry, False if should return/yield.FzHTTP Error z thrown while requesting Ú r›   T)rr   rf   r•   Úhf_raise_for_statusrB   r0   r!   )ro   Úratelimit_inforŸ   rh   Únb_triesÚratelimit_resetr£   rM   s     €€€€€€r/   Ú_should_retryÚ)_http_backoff_base.<locals>._should_retry¶  sŽ   ø€ ð ×'Ñ'Ð/DÓDØ ô —‘ ¨X×-AÑ-AÐ,BÐB[Ð\bÐ[cÐcdÐehÐdiÐjÔkØ˜kÓ)Ü'¨Ô1ð !ð ×'Ñ'¨3Ó.Ü%<¸X×=MÑ=MÓ%N�NØ%Ñ1Ø*8×*IÑ*I˜àr.   ©rh   rM   Ú'z' thrown while requesting r¨   zRate limited. Waiting zs before retry [Retry rQ   z].zRetrying in z	s [Retry r   r$   )Ú
isinstanceÚtyper,   ÚioÚIOBaser   Útellr�   Úseekr|   ÚResponseÚboolr¤   r^   rf   r•   ÚConnectErrorrˆ   ÚfloatÚtimeÚsleepÚmin)rh   rM   rŸ   r    r¡   r¢   r£   r¤   ÚkwargsÚ
sleep_timeÚio_obj_initial_posr–   r­   ro   ÚerrÚactual_sleepr«   r¬   s   ```   `         @@r/   Ú_http_backoff_baserÃ   �  s:  ýé € ô Ð%¤t×,Ñ,Ø2Ð4ÐäÐ'¬×-Ñ-Ø!6Ð 8Ðà€HØ€JØ"&€Oð
 ÐØ�ÓœJ v¨f¡~¼¿	¹	Ä<Ð7P×QÑQØ# F™^×0Ñ0Ó2Ðä‹]€FØ
Ø�A‰ˆØˆð0	ð "Ñ-Ø�v‘×#Ñ#Ð$6Ô7ð¬¯©ð ¼4÷ ô ö. Ø—]’]ÐD¨&°cÑD¸VÒDÈÙ(¨×2Ñ2Ø&šØ÷ EÐDØ2÷ EÐDð
 "Ÿ>š>ÐK°¸SÑKÀFÑK�Ù$ X×.Ñ.Ø"’NØð /ð Ñ&Ü  Ó1°AÑ5ˆLÜ�N‰NÐ3°L°>ÐAWÐX`ÐWaÐabÐcnÐboÐoqÐrÕsà%ˆLÜ�N‰N˜\¨,¨°yÀÀ
È!ÈKÈ=ÐXZÐ[Ô\ä�
Š
�<Ô ô ˜°Q©Ó7ˆ
ò ÷D EÕDûð #ó 	Ü�N‰N˜Q˜s˜eÐ#=¸f¸XÀQÀsÀeÐLÔMä˜#œu×1Ñ1×2Ñ2Ü”à˜+Ó%Ø�	ô &ûð	üso   ˆBH%ÂAG Ã+F2Ã>G ÄH%ÄG ÄH%Ä&G Ä7A;H%Æ2
G Æ<G Æ?H%Ç G ÇH"Ç	AHÈH%ÈH"È"H%)rŸ   r    r¡   r¢   r£   c                ó<   • [        [        SU UUUUUUSS.UD65      $ )ax
  Wrapper around httpx to retry calls on an endpoint, with exponential backoff.

Endpoint call is retried on exceptions (ex: connection timeout, proxy error,...)
and/or on specific status codes (ex: service unavailable). If the call failed more
than `max_retries`, the exception is thrown or `raise_for_status` is called on the
response object.

Re-implement mechanisms from the `backoff` library to avoid adding an external
dependencies to `hugging_face_hub`. See https://github.com/litl/backoff.

Args:
    method (`Literal["GET", "OPTIONS", "HEAD", "POST", "PUT", "PATCH", "DELETE"]`):
        HTTP method to perform.
    url (`str`):
        The URL of the resource to fetch.
    max_retries (`int`, *optional*, defaults to `5`):
        Maximum number of retries, defaults to 5 (no retries).
    base_wait_time (`float`, *optional*, defaults to `1`):
        Duration (in seconds) to wait before retrying the first time.
        Wait time between retries then grows exponentially, capped by
        `max_wait_time`.
    max_wait_time (`float`, *optional*, defaults to `8`):
        Maximum duration (in seconds) to wait before retrying.
    retry_on_exceptions (`type[Exception]` or `tuple[type[Exception]]`, *optional*):
        Define which exceptions must be caught to retry the request. Can be a single type or a tuple of types.
        By default, retry on `httpx.TimeoutException` and `httpx.NetworkError`.
    retry_on_status_codes (`int` or `tuple[int]`, *optional*, defaults to `(429, 500, 502, 503, 504)`):
        Define on which status codes the request must be retried. By default, retries
        on rate limit (429) and server errors (5xx).
    **kwargs (`dict`, *optional*):
        kwargs to pass to `httpx.request`.

Example:
```
>>> from huggingface_hub.utils import http_backoff

# Same usage as "httpx.request".
>>> response = http_backoff("GET", "https://www.google.com")
>>> response.raise_for_status()

# If you expect a Gateway Timeout from time to time
>>> http_backoff("PUT", upload_url, data=data, retry_on_status_codes=504)
>>> response.raise_for_status()
```

> [!WARNING]
> When using `requests` it is possible to stream data by passing an iterator to the
> `data` argument. On http backoff this is a problem as the iterator is not reset
> after a failed call. This issue is mitigated for file objects or any IO streams
> by saving the initial position of the cursor (with `data.tell()`) and resetting the
> cursor between each call (with `data.seek()`). For arbitrary iterators, http backoff
> will fail. If this is a hard constraint for you, please let us know by opening an
> issue on [Github](https://github.com/huggingface/huggingface_hub).
F©rh   rM   rŸ   r    r¡   r¢   r£   r¤   r$   )ÚnextrÃ   ©rh   rM   rŸ   r    r¡   r¢   r£   r¾   s           r/   Úhttp_backoffrÈ   î  sA   € ôB Üð 
	
ØØØ#Ø)Ø'Ø 3Ø"7Øñ
	
ð ñ
	
óð r.   c             +   óH   #   • [        SU UUUUUUSS.UD6 Sh  v•N   g N7f)aÎ
  Wrapper around httpx to retry calls on an endpoint, with exponential backoff.

Endpoint call is retried on exceptions (ex: connection timeout, proxy error,...)
and/or on specific status codes (ex: service unavailable). If the call failed more
than `max_retries`, the exception is thrown or `raise_for_status` is called on the
response object.

Re-implement mechanisms from the `backoff` library to avoid adding an external
dependencies to `hugging_face_hub`. See https://github.com/litl/backoff.

Args:
    method (`Literal["GET", "OPTIONS", "HEAD", "POST", "PUT", "PATCH", "DELETE"]`):
        HTTP method to perform.
    url (`str`):
        The URL of the resource to fetch.
    max_retries (`int`, *optional*, defaults to `5`):
        Maximum number of retries, defaults to 5 (no retries).
    base_wait_time (`float`, *optional*, defaults to `1`):
        Duration (in seconds) to wait before retrying the first time.
        Wait time between retries then grows exponentially, capped by
        `max_wait_time`.
    max_wait_time (`float`, *optional*, defaults to `8`):
        Maximum duration (in seconds) to wait before retrying.
    retry_on_exceptions (`type[Exception]` or `tuple[type[Exception]]`, *optional*):
        Define which exceptions must be caught to retry the request. Can be a single type or a tuple of types.
        By default, retry on `httpx.TimeoutException` and `httpx.NetworkError`.
    retry_on_status_codes (`int` or `tuple[int]`, *optional*, defaults to `(429, 500, 502, 503, 504)`):
        Define on which status codes the request must be retried. By default, retries
        on rate limit (429) and server errors (5xx).
    **kwargs (`dict`, *optional*):
        kwargs to pass to `httpx.request`.

Example:
```
>>> from huggingface_hub.utils import http_stream_backoff

# Same usage as "httpx.stream".
>>> with http_stream_backoff("GET", "https://www.google.com") as response:
...     for chunk in response.iter_bytes():
...         print(chunk)

# If you expect a Gateway Timeout from time to time
>>> with http_stream_backoff("PUT", upload_url, data=data, retry_on_status_codes=504) as response:
...     response.raise_for_status()
```

<Tip warning={true}>

When using `httpx` it is possible to stream data by passing an iterator to the
`data` argument. On http backoff this is a problem as the iterator is not reset
after a failed call. This issue is mitigated for file objects or any IO streams
by saving the initial position of the cursor (with `data.tell()`) and resetting the
cursor between each call (with `data.seek()`). For arbitrary iterators, http backoff
will fail. If this is a hard constraint for you, please let us know by opening an
issue on [Github](https://github.com/huggingface/huggingface_hub).

</Tip>
TrÅ   Nr$   )rÃ   rÇ   s           r/   Úhttp_stream_backoffrÊ   >  sA   é € ôL "ð 
ØØØØ%Ø#Ø/Ø3Øñ
ð ñ
÷ 
ó 
ùs   ‚"š ›")Úretry_on_errorsrË   c                óP  • U(       a  0 OSSS.n [        SU US.UDSS0DUD6n[        U5        SUR                  s=::  a  S::  a_  O   U$ [        UR                  S   5      nUR
                  S	:X  a2  [        U5      R                  UR                  S
9R                  5       nM–   U$ )a  Perform an HTTP request with backoff and follow relative redirects only.

Used to fetch HEAD /resolve on repo or bucket files.

This is useful to follow a redirection to a renamed repository without following redirection to a CDN.

A backoff mechanism retries the HTTP call on errors (429, 5xx, timeout, network errors).

Args:
    method (`str`):
        HTTP method, such as 'GET' or 'HEAD'.
    url (`str`):
        The URL of the resource to fetch.
    retry_on_errors (`bool`, *optional*, defaults to `False`):
        Whether to retry on errors. If False, no retry is performed (fast fallback to local cache).
        If True, uses default retry behavior (429, 5xx, timeout, network errors).
    **httpx_kwargs (`dict`, *optional*):
        Params to pass to `httpx.request`.
r$   )r¢   r£   r¯   rz   Fi,  i�  ÚLocationÚ )Úpath)	rÈ   r©   rr   r   r0   ÚnetlocÚ_replacerÏ   Úgeturl)rh   rM   rË   Úhttpx_kwargsÚno_retry_kwargsro   Úparsed_targets          r/   Ú-_httpx_follow_relative_redirects_with_backoffrÖ   ‘  sÏ   € ö0 ‰¸2ÐXZÑ#[ð ð Üð 
ØØñ
ð ñ
ð #ñ	
ð
 ñ
ˆô 	˜HÔ%ð �(×&Ñ&Õ-¨#Õ-ð 	à€Oô % X×%5Ñ%5°jÑ%AÓBˆMØ×#Ñ# rÓ)ä˜s“m×,Ñ,°-×2DÑ2DÐ,ÐE×LÑLÓN�Ùð 	à€Or.   Úendpointc                 ó  • U(       a  UR                  S5      O[        R                  nU[        R                  [        R                  4;  a@  U R                  [        R                  U5      n U R                  [        R                  U5      n U $ )zœReplace the default endpoint in a URL by a custom one.

This is useful when using a proxy and the Hugging Face Hub returns a URL with the default endpoint.
rQ   )Úrstripr   ÚENDPOINTÚ_HF_DEFAULT_ENDPOINTÚ_HF_DEFAULT_STAGING_ENDPOINTÚreplace)rM   r×   s     r/   Úfix_hf_endpoint_in_urlrÞ   Ä  sf   € ö
 (0ˆx�‰˜sÔ#´Y×5GÑ5G€Hàœ	×6Ñ6¼	×8^Ñ8^Ð_Ó_Ø�k‰kœ)×8Ñ8¸(ÓCˆØ�k‰kœ)×@Ñ@À(ÓKˆØ€Jr.   Úendpoint_namec           	      ó	  •  [        U 5         U R	                  5         g! [         a    [        R                  SSS9   N2f = f! [
        R                   Ga.  nU R                  S-  S:X  a   SnAgU R                  R                  S5      nU R                  R                  S5      nU R                  b6  U R                  R                  b  [        U R                  R                  5      OSnU(       a  [        U5      OS	u  pgUS
:X  a3  U R                   S3S-   SU R                   S3-   n[        [        X€XgS9UeUS:X  a3  U R                   S3S-   SU R                   S3-   n[        [         X€XgS9UeUS:X  a3  U R                   S3S-   SU R                   S3-   n[        ["        X€XgS9UeUS:X  a:  U R                   S3S-   SU R                   S3-   S-   S-   n[        [$        X€5      UeUS:X  a[  UbX  [&        R)                  U5      bB  U R                   S3S-   SU R                   S3-   S-   S-   n[        [*        X€[-        U5      S9UeUS:X  d/  U R                  S:X  aX  US:w  aR  UbO  [.        R)                  U5      b9  U R                   S3S-   SU R                   S3-   S-   S -   n[        [0        X€XgS9UeU R                  S!:X  a  Ub  S"U S#3OS$n[        [2        X€5      UeU R                  S%:X  a8  SU R                   S&U S3S'U R                   S3-   S(-   n[        [4        X€5      UeU R                  S):X  a½  [7        U R                  5      n	U	b„  S*U	R8                   S+3nUS,U	R:                   S-3-  nU	R<                  b;  U	R>                  b.  US.U	R@                   S/U	R<                   S0U	R>                   S13-  nOUS-  nUS2U R                   S3-  nOS3U R                   S3n[        [4        X€5      UeU R                  S4:X  aZ  U R                  R                  R                  S55      n
U S6U
 S7U R                  R                  S85       S3n[        [4        X€5      Ue[        [4        [        U5      U 5      UeSnAff = f)9ad  
Internal version of `response.raise_for_status()` that will refine a potential HTTPError.
Raised exception will be an instance of [`~errors.HfHubHTTPError`].

This helper is meant to be the unique method to raise_for_status when making a call to the Hugging Face Hub.

Args:
    response (`Response`):
        Response from the server.
    endpoint_name (`str`, *optional*):
        Name of the endpoint that has been called. If provided, the error message will be more complete.

> [!WARNING]
> Raises when the request has failed:
>
>     - [`~utils.RepositoryNotFoundError`]
>         If the repository to download from cannot be found. This may be because it
>         doesn't exist, because `repo_type` is not set correctly, or because the repo
>         is `private` and you do not have access.
>     - [`~utils.GatedRepoError`]
>         If the repository exists but is gated and the user is not on the authorized
>         list.
>     - [`~utils.RevisionNotFoundError`]
>         If the repository exists but the revision couldn't be found.
>     - [`~utils.EntryNotFoundError`]
>         If the repository exists but the entry (e.g. the requested file) couldn't be
>         find.
>     - [`~utils.BadRequestError`]
>         If request failed with a HTTP 400 BadRequest error.
>     - [`~utils.HfHubHTTPError`]
>         If request failed for a reason not listed above.
zFailed to parse warning headersT)Úexc_infoéd   rP   NzX-Error-CodeúX-Error-MessagerO   ÚRevisionNotFoundz Client Error.ú

zRevision Not Found for url: Ú.)rV   rY   ÚEntryNotFoundzEntry Not Found for url: Ú	GatedRepoz!Cannot access gated repo for url z$Access to this resource is disabled.z!Cannot access repository for url Ú
ÚRepoNotFoundzBucket Not Found for url: zG
Please make sure you specified the correct bucket id (namespace/name).zg
If the bucket is private, make sure you are authenticated and your token has the required permissions.)Ú	bucket_idi‘  z+Invalid credentials in Authorization headerzRepository Not Found for url: zÈ
Please make sure you specified the correct `repo_id` and `repo_type`.
If you are trying to access a private or gated repo, make sure you are authenticated and your token has the required permissions.zQ
For more details, see https://huggingface.co/docs/huggingface_hub/authenticationrq   z

Bad request for z
 endpoint:z

Bad request:i“  z Forbidden: z
Cannot access content at: z2
Make sure your token has the correct permissions.r›   z0

429 Too Many Requests: you have reached your 'z' rate limit.z
Retry after z secondsú (rQ   z requests remaining in current z
s window).z
Url: z!

429 Too Many Requests for url: i   ÚRangez. Requested range: z. Content-Range: zContent-Range)!Ú_warn_on_warning_headersr”   rf   rg   Úraise_for_statusr|   ÚHTTPStatusErrorrr   r0   rT   r^   rM   r*   rZ   Ú_formatr   r   r   r   ÚBUCKET_API_REGEXr:   r   r]   ÚREPO_API_REGEXr   r   r   rB   r   r!   r"   r#   r    )ro   rß   r—   Ú
error_codeÚerror_messageÚrequest_urlrV   rY   Úmessagerª   Úrange_headers              r/   r©   r©   Ñ  sn  € ðBGÜ  Ô*ð
u?Ø×!Ñ!Õ#øô ó Gä�‰Ð6ÀˆÓFðGûô × Ñ ô s?Ø×Ñ 3Ñ&¨!Ó+Üà×%Ñ%×)Ñ)¨.Ó9ˆ
Ø ×(Ñ(×,Ñ,Ð->Ó?ˆð *2×)9Ñ)9Ñ)EÈ(×JZÑJZ×J^ÑJ^ÑJjŒC�× Ñ ×$Ñ$Ô%Ðptð 	ö HSÔ6°{ÔCÐXdÑˆ	àÐ+Ó+Ø!×-Ñ-Ð.¨nÐ=ÀÑFÐKgÐhp×htÑhtÐguÐuvÐIwÑwˆGÜÔ/°ÈiÑiÐopÐpà˜?Ó*Ø!×-Ñ-Ð.¨nÐ=ÀÑFÐKdÐem×eqÑeqÐdrÐrsÐItÑtˆGÜÔ2°GÐQZÑlÐrsÐsà˜;Ó&à×'Ñ'Ð(¨Ð7¸&Ñ@ÐEfÐgo×gsÑgsÐftÐtuÐCvÑvð ô œ.¨'ÀyÑbÐhiÐiàÐDÓDà×'Ñ'Ð(¨Ð7Øñà5°h·l±l°^À1ÐEñFð ñð 9ñ	9ð ô Ô+¨WÓ?ÀQÐFð ˜.Ó(ØÑ'Ü ×'Ñ'¨Ó4Ñ@ð ×'Ñ'Ð(¨Ð7Øñà.¨x¯|©|¨n¸AÐ>ñ?ð ]ñ]ð }ñ	}ð ô Ü# WÔB[Ð\gÓBhñàðð ˜>Ó)Ø× Ñ  CÓ'ØÐ!NÓNØÑ'Ü×%Ñ% kÓ2Ñ>ð ×'Ñ'Ð(¨Ð7Øñà2°8·<±<°.ÀÐBñCð`ñ`ð gñgð ô Ô1°7ÐPYÑkÐqrÐrà×!Ñ! SÓ(àDQÑD]Ð& } o°ZÑ@Ðcuð ô œ/¨7Ó=À1ÐDà×!Ñ! SÓ(à�x×+Ñ+Ð,¨L¸¸ÀqÐIØ0°·±°¸aÐ@ñAàGñHð ô
 œ.¨'Ó<À!ÐCà×!Ñ! SÓ(Ü4°X×5EÑ5EÓFˆNØÑ)àHÈ×IeÑIeÐHfÐfsÐtð ð ˜^¨N×,KÑ,KÐ+LÈHÐUÑU�Ø!×'Ñ'Ñ3¸×8UÑ8UÑ8aØØ˜^×5Ñ5Ð6°a¸×8LÑ8LÐ7Mð N'Ø'5×'DÑ'DÐ&EÀZðQñ‘Gð
 ˜s‘N�GØ˜W X§\¡\ N°!Ð4Ñ4‘à?ÀÇÁ¸~ÈQÐO�Üœ.¨'Ó<À!ÐCà×!Ñ! SÓ(Ø#×+Ñ+×3Ñ3×7Ñ7¸Ó@ˆLØ˜Ð.¨|¨nÐ<MÈh×N^ÑN^×NbÑNbÐcrÓNsÐMtÐtuÐvˆGÜœ.¨'Ó<À!ÐCô ”n¤c¨!£f¨hÓ7¸QÐ>ûðgs?ús,   ‚ ŽA ŸA ¿A ÁRÁRÁ0PRÒRc                 óF  • U R                   R                  S5      nU H€  nSU;   a  UR                  SS5      OSU4u  p4UR                  5       nU[        ;  d  M=  UR                  5       nU(       d  MV  [        R                  U5        [        R                  U5        M‚     g)a}  
Emit warnings if warning headers are present in the HTTP response.

Expected header format: 'X-HF-Warning: topic; message'

Only the first warning for each topic will be shown. Topic is optional and can be empty. Note that several warning
headers can be present in a single response.

Args:
    response (`httpx.Response`):
        The HTTP response to check for warning headers.
zX-HF-WarningÚ;r   rÎ   N)r0   Úget_listÚsplitÚstripÚ_WARNED_TOPICSÚaddrf   r•   )ro   Úserver_warningsÚserver_warningÚtopicr÷   s        r/   rî   rî   s  s…   € ð ×&Ñ&×/Ñ/°Ó?€OÛ)ˆØ9<ÀÓ9N˜×-Ñ-¨c°1Ô5ÐUWÐYgÐTh‰ˆØ—‘“ˆØœÕ&Ø—m‘m“oˆGßˆwÜ×"Ñ" 5Ô)Ü—‘˜wÖ'ò *r.   Ú_HfHubHTTPErrorT)ÚboundÚ
error_typeÚcustom_messageÚattrsc                 óŒ  • / nUR                   R                  S5      nUb  UR                  U5          UR                  5       nUR                  S5      nUb8  [        U[        5      (       a  UR                  U5        OUR                  U5        UR                  S5      nUb%  U H  nSU;   d  M  UR                  US   5        M!     U V
s/ s H<  n
[        U
5      R                  5       (       d  M#  [        U
5      R                  5       PM>     nn
[        [         R#                  U5      5      nSR%                  U5      nUnU(       a9  UR                  5       UR                  5       ;  a  S	U;   a	  USU-   -  nOUS	U-   -  nSnSn[&        S
4[(        S4[*        S44 H>  u  nnUR                   R                  U5      nU(       d  M*  [        U5      nSU SU S3n  O   U(       aL  UR                  5       UR                  5       ;  a*  SU;   a   UR-                  S5      nUS U U-   UUS  -   nOXÎ-  nU " UR                  5       X+=(       d    S S9nUR/                  5        H  u  nn[1        UUU5        M     U$ ! [        R
                   a9     UR                  5         UR                  5       n GNn! [         a    0 n  GN~f = ff = f! [        R                   a`    UR                   R                  SS5      n	UR                  (       a/  SU	R                  5       ;  a  UR                  UR                  5         GNtf = fs  sn
f )Nrã   ÚerrorÚerrorsr÷   zContent-TyperÎ   Úhtmlré   rå   z
Request IDzAmzn Trace IDz	Amz CF IDrì   ú: Ú))ro   Úserver_message)r0   rT   ÚappendÚjsonr|   ÚResponseNotReadÚreadÚRuntimeErrorr±   ÚlistÚextendÚJSONDecodeErrorÚtextr8   r*   rý   ÚdictÚfromkeysÚjoinrc   rb   ÚX_AMZ_CF_IDÚindexÚitemsÚsetattr)r  r  ro   r  Úserver_errorsÚfrom_headersr¦   r	  r
  Úcontent_typeÚliner  Úfinal_error_messagerk   Úrequest_id_messageÚheaderÚlabelÚvalueÚnewline_indexrÁ   ÚkÚvs                         r/   rñ   rñ   Ž  s)  € ð €Mð ×#Ñ#×'Ñ'Ð(9Ó:€LØÑØ×Ñ˜\Ô*ð$0ð	Ø—=‘=“?ˆDð —‘˜Ó!ˆØÑÜ˜%¤×&Ñ&à×$Ñ$ UÕ+ð ×$Ñ$ UÔ+à—‘˜(Ó#ˆØÑã�Ø Õ%Ø!×(Ñ(¨¨yÑ)9Ö:ñ  ñ 4AÓV²=¨4ÄCÈÃIÇOÁO×DUÓ&”S˜“Y—_‘_Ö&±=€MÐVô œŸ™ }Ó5Ó6€Mð —Y‘Y˜}Ó-€Nð )ÐÞ˜.×.Ñ.Ó0¸×8LÑ8LÓ8NÓNØ�^Ó#Ø 4¨.Ñ#8Ñ8Ñà 6¨NÑ#:Ñ:Ðð €JØÐä	�|Ð$Ü	˜/Ð*Ü	�kÐ"ó‰ˆ�ð
 × Ñ ×$Ñ$ VÓ,ˆßˆ5Ü˜U›ˆJØ#% e W¨B¨u¨g°QÐ!7ÐÙñö �j×&Ñ&Ó(Ð0C×0IÑ0IÓ0KÓKØÐ&Ó&Ø/×5Ñ5°dÓ;ˆMà# N ]Ð3Ð6HÑHÐK^Ð_lÐ_mÐKnÑnñ  ð  Ñ5Ðñ Ð(×.Ñ.Ó0¸8×TjÐfjÑ
k€CØ—‘–‰ˆˆ1Ü��Q˜Öñ à€Jøôa ×$Ñ$ó 
	ð	Ø—‘”Ø—}‘}““øÜó ð ”ðúð	
	ûô8 ×Ñó 0à×'Ñ'×+Ñ+¨N¸BÓ?ˆØ�=�=˜V¨<×+=Ñ+=Ó+?Ó?Ø× Ñ  §¡Ô/úð	0üò Wsa   ´I: ÁA)K
 Â1K
 Ã"MÃ3MÉ:KÊ J2Ê/K
 Ê2KÊ>KÊ?K
 ËKËKËK
 Ë
A0L>Ì=L>c                 ó¼  • SSU R                   4/n[        U R                  R                  5       5       H(  u  p#UR	                  5       S:X  a  SnUSU SU 34/-  nM*     Sn U R
                  b1  U R
                  R                  SS	S
9n[        U5      S:”  a  USS  S3nUb  USUR                  SS5      4/-  nUSU R                  4/-  n/ nU H[  u  p#U(       a#  UR                  [        [        U5      5      5        U(       d  M8  UR                  [        [        U5      5      5        M]     SR                  U5      $ ! [        R                   a    Sn N¹f = f)zÎConvert a `httpx.Request` into a curl command (str).

Used for debug purposes only.

Implementation vendored from https://github.com/ofw/curlify/blob/master/curlify.py.
MIT License Copyright (c) 2016 Egor.
)ÚcurlNz-Xr`   z<TOKEN>z-Hr  Nzutf-8Úignore)r
  iè  z ... [truncated]z<streaming body>z-dré   rÎ   r¨   )rh   Úsortedr0   r  r8   ÚcontentÚdecodeÚlenr|   ÚRequestNotReadrÝ   rM   r  r   r*   r  )r^   Úpartsr)  r*  ÚbodyÚ
flat_partss         r/   rj   rj   ð  sd  € ð 	Ø	ˆw�~‰~Ðð$€Eô
 �w—‘×,Ñ,Ó.Ö/‰ˆØ�7‰7‹9˜Ó'ØˆAØ�4˜A˜3˜b  ˜Ð%Ð&Ñ&Šñ 0ð
 €Dð"Ø�?‰?Ñ&Ø—?‘?×)Ñ)¨'¸(Ð)ÐCˆDÜ�4‹y˜4ÓØ˜u ˜+˜Ð&6Ð7�ð ÑØ�4˜Ÿ™ d¨BÓ/Ð0Ð1Ñ1ˆà	ˆt�W—[‘[Ð!Ð"Ñ"€Eà€JÛ‰ˆÞØ×Ñœe¤C¨£F›mÔ,ßˆ1Ø×Ñœe¤C¨£F›mÖ,ñ	 ð �8‰8�JÓÐøô ×Ñó "Ø!Šð"ús   Á#>E ÅEÅEz%^\s*bytes\s*=\s*(\d*)\s*-\s*(\d*)\s*$Úoriginal_rangeÚresume_sizec                 óâ  • U (       d  SU S3$ SU ;   a  [        SU < S35      e[        R                  U 5      nU(       d  [        SU < S35      eUR	                  5       u  p4U(       dB  U(       d  [        SU < S35      e[        U5      U-
  nSU 3nUS	::  a  [        S
U< S35      eU$ [        U5      nX1-   nU(       a*  [        U5      nSU SU 3nXt:”  a  [        S
U< S35      eU$ SU S3$ )z:
Adjust HTTP Range header to account for resume position.
zbytes=Ú-Ú,zMultiple ranges detected - z, not supported yet.zInvalid range format - ræ   zbytes=-r   zEmpty new range - )rs   ÚRANGE_REGEXr@   r  Úgroupsr,   )r6  r7  r@   ÚstartÚendÚ
new_suffixÚ	new_rangeÚ	new_starts           r/   Ú_adjust_range_headerrB    s!  € ö Ø˜�} AÐ&Ð&à
ˆnÓÜÐ6°~Ñ6HÐH\Ð]Ó^Ð^ä×Ñ˜nÓ-€EÞÜÐ4°^Ñ4FÀaÐHÓIÐIØ—‘“�J€EæÞÜÐ!8¸Ñ8JÈ!ÐLÓMÐMä˜“X Ñ+ˆ
Ø˜j˜\Ð*ˆ	Ø˜‹?ÜÐ!3°I±=ÀÐBÓCÐCØÐä�‹J€EØÑ#€IÞ
Ü�#‹hˆØ˜Y˜K q¨¨Ð.ˆ	Ø‹?ÜÐ!3°I±=ÀÐBÓCÐCØÐà�I�;˜aÐ Ð r.   )r1   N)N)qr)   Úatexitr³   r  ÚosÚreÚ	threadingr»   rd   Úcollections.abcr   r   r   Ú
contextlibr   Údataclassesr   Úshlexr   Útypingr	   r
   Úurllib.parser   r|   Úhuggingface_hub.errorsr   rÎ   r   r
  r   r   r   r   r   r   r   r   r   Ú_lfsr   Ú_typingr   Ú
get_loggerr%   rf   r   Úcompiler9   r<   r*   rB   rc   rb   r  ÚVERBOSEró   rò   rR   r\   rU   ÚtuplerZ   r]   ÚRequestrl   rn   r·   rv   r}   r~   r€   r�   ÚCLIENT_FACTORY_TÚASYNC_CLIENT_FACTORY_TÚLockr‡   r‚   r+   rƒ   r„   r‰   r�   r�   r‘   rˆ   ÚregisterÚhasattrr˜   ÚTimeoutExceptionÚNetworkErrorrš   r²   r”   rœ   r,   rº   r¸   rÃ   rÈ   rÊ   rÖ   rÞ   r©   Úsetrþ   rî   r  rñ   rj   Ú
IGNORECASEr;  rB  r$   r.   r/   Ú<module>r^     s2  ðò Eã Û 	Û Û 	Û 	Û Û Û ß 8Ñ 8Ý %Ý !Ý ß Ý !ã å 7å ÷	÷ 	ó 	õ Ý Ý "ð 
×	Ò	˜HÓ	%€ñ �$Ñ÷&ð &ó ð&ð, —:’:ÐmÓnÐ àŸ*š*Ð%OÓPÐ ð8 W¨S°#¨XÑ%6ð 8¸=È4Ñ;Oô 8ðz €Ø#€Ø€à—’ð
ð �*‰*ñ€ð —:’:ðð �*‰*ñÐ ð Ÿ*š*Ð%iÓjÐ ð ŸJšJÐ'SÓTÐ ò qÐ ð 3ð ¨5°°t±¸SÀ4¹ZÐ1GÑ+Hô ð2- 3ð -¨3°©:ô -ð 5§=¡=ð °Tô ðB*¨u¯}©}ð *Àô *ð'°·±ð 'ÀDô 'ð §¡ô ð e×&7Ñ&7ô ð ˜B §¡Ð,Ñ-Ð Ø! " e×&7Ñ&7Ð"7Ñ8Ð à�~Š~Ó€Ø+AÐ Ð(Ó AØ7SÐ Ð4Ó SØ&*€�—‘˜tÑ#Ó *ð0Ð'7ð 0¸Dô 0ð"8Ð3Ið 8Èdô 8ð&�U—\‘\ô ð*˜5×,Ñ,ô *ô 9ð, ‡‚�Ô Ù
ˆ2Ð!×"Ñ"Ø×Ò }Ò5ð >C×=SÑ=SÐUZ×UgÑUgÐ<hÐ ˜e D¨¡O°SÐ$8Ñ9Ó hØ2KÐ   c¨3 h¡Ó Kð ØØØIeØ3QØò^8Øð^8à	ð^8ð ð	^8ð
 ð^8ð ð^8ð ˜i™¨5°°i±À#Ð1EÑ+FÑFð^8ð   s¨C x¡Ñ0ð^8ð ð^8ð ˆu�~‰~˜t TÐ)Ñ*õ^8ðJ ØØØIeØ3QòMØðMà	ðMð ð	Mð
 ðMð ðMð ˜i™¨5°°i±À#Ð1EÑ+FÑFðMð   s¨C x¡Ñ0ðMð ‡^�^õMð` ð
 ØØØIeØ3QòOØðOà	ðOð ð	Oð
 ðOð ðOð ˜i™¨5°°i±À#Ð1EÑ+FÑFðOð   s¨C x¡Ñ0ðOð ˆu�~‰~˜t TÐ)Ñ*ôOó ðOðf AFò0Øð0Ø #ð0Ø9=ð0à
‡^�^õ0ðf
 ð 
¨s°T©zð 
¸cô 
ñ\? %§.¡.ð \?ÀÀtÁð \?ÐW[õ \?ñ~ “€ð( u§~¡~ð (¸$ô (ñ0 Ð-°^ÑDÐ ð_ØÐ%Ñ&ð_Ø8;ð_ØGLÇ~Á~ð_Ø`cð_àô_ðD& �e—m‘mð & ¨ô & ðT �jŠjÐAÀ2Ç=Á=ÓQ€ð"!¨¨t©ð "!À#ð "!È#ÐPTÉ*õ "!r.   