Ë
    ¦üàgf  ã                  óÒ  — d dl mZ d dlZd dlZd dlZd dlZd dlZd dlZd dlm	Z	m
Z
mZmZmZ ddlmZ ddlmZ ddlmZ e
rddlmZ d	Zd
ZdZ	 ddddddœZ	 d*d„Zd+d„Zd,d„Z G d„ de«      Z G d„ dej                  «      Z G d„ d«      Z G d„ de«      Z  G d„ d«      Z!d-d.d„Z"	 d/	 	 	 	 	 	 	 	 	 	 	 	 	 d0d „Z#d1d!„Z$ G d"„ d#«      Z% G d$„ d%«      Z& G d&„ d'e&«      Z' G d(„ d)e&«      Z(y)2é    )ÚannotationsN)ÚIOÚTYPE_CHECKINGÚAnyÚ
NamedTupleÚcasté   )ÚImage)Ú	deprecate)Úis_path)ÚStrOrBytesPathi   i   Fzimage buffer overrun errorzdecoding errorzunknown errorzbad configurationzout of memory error)éÿÿÿÿéþÿÿÿéýÿÿÿéøÿÿÿi÷ÿÿÿc               óÔ   — 	 t         j                  j                  | «      }|s|rdnd› d| › �}|d|rdnd› d�z  }t        |«      S # t        $ r t        j                  | «      }Y ŒEw xY w)NÚencoderÚdecoderz error z when ÚwritingÚreadingz image file)r
   ÚcoreÚgetcodecstatusÚAttributeErrorÚERRORSÚgetÚOSError)Úerrorr   Úmsgs      úK/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/PIL/ImageFile.pyÚ_get_oserrorr    H   sv   € ð Ü�j‰j×'Ñ'¨Ó.ˆñ Ù%‘¨9Ð5°W¸U¸GÐDˆØˆV¡‘I¨iÐ8¸ÐDÑD€CÜ�3‹<Ðøô ò  Ü�j‰j˜ÓŠð ús   ‚A ÁA'Á&A'c                ó8   — t        ddd¬«       t        | d¬«      ‚)NÚraise_oserroré   z€It is only useful for translating error codes returned by a codec's decode() method, which ImageFile already does automatically.)ÚactionF©r   )r   r    )r   s    r   r"   r"   S   s%   € ÜØØ
ðGõô �u eÔ
,Ð,ó    Ú_Tilec                ó   — | d   S )Né   © )Úts    r   Ú	_tilesortr,   ]   s   € àˆQ‰4€Kr&   c                  ó>   — e Zd ZU ded<   ded<   dZded<   dZd	ed
<   y)r'   ÚstrÚ
codec_nameú tuple[int, int, int, int] | NoneÚextentsr   ÚintÚoffsetNztuple[Any, ...] | str | NoneÚargs)Ú__name__Ú
__module__Ú__qualname__Ú__annotations__r3   r4   r*   r&   r   r'   r'   b   s!   … ØƒOØ-Ó-Ø€FˆCƒOØ)-€DÐ
&Ô-r&   c                  óv   ‡ — e Zd ZdZ	 d	 	 	 	 	 dˆ fd„Zdd„Zdd„Zdˆ fd„Zdd„Zdd„Z	dd„Z
dd	„Zdd
„Zˆ xZS )Ú	ImageFilez*Base class for image file format handlers.c                óÖ  •— t         ‰| �  «        d| _        d | _        g | _        	 d| _        d| _        t        | _        t        |«      r3t        |d«      | _        t        j                  |«      | _        d| _        n.t!        t"        t$           |«      | _        |�|nd| _        d| _        	 	 | j'                  «        | j6                  r$| j8                  d   dk  s| j8                  d   dk  rd}t5        |«      ‚y # t(        t*        t,        t.        t0        j2                  f$ r}t5        |«      |‚d }~ww xY w# t:        $ r( | j                  r| j                  j=                  «        ‚ w xY w)	Nr   r	   r*   ÚrbTÚ Fznot identified by this driver)ÚsuperÚ__init__Ú
_min_frameÚcustom_mimetypeÚtileÚreadonlyÚdecoderconfigÚMAXBLOCKÚdecodermaxblockr   ÚopenÚfpÚosÚfspathÚfilenameÚ_exclusive_fpr   r   ÚbytesÚ_openÚ
IndexErrorÚ	TypeErrorÚKeyErrorÚEOFErrorÚstructr   ÚSyntaxErrorÚmodeÚsizeÚBaseExceptionÚclose)ÚselfrH   rK   Úvr   Ú	__class__s        €r   r?   zImageFile.__init__q   sC  ø€ ô 	‰ÑÔàˆŒà+/ˆÔà!#ˆŒ	Ø*àˆŒà.0ˆÔÜ'ˆÔä�2Œ;ä˜2˜t“nˆDŒGÜŸI™I b›MˆDŒMØ!%ˆDÕô œ2œe™9 bÓ)ˆDŒGØ(0Ð(<™HÀ"ˆDŒMà!&ˆDÔð	ð	,Ø—
‘
”ð —9’9 §	¡	¨!¡°Ò 1°T·Y±Y¸q±\ÀQÒ5FØ5�Ü! #Ó&Ð&ð 6Gøô ÜÜÜÜ—‘ðò ,ô " !“n¨!Ð+ûð,ûô ò 	à×!Ò!Ø—‘—‘”Øð		ús*   Â-C; Â==D7 Ã;(D4Ä#D/Ä/D4Ä4D7 Ä71E(c                 ó   — y ©Nr*   ©rY   s    r   rN   zImageFile._open£   ó   € Ør&   c                óº   — | j                   r| j                   S | j                  �7t        j                  j	                  | j                  j                  «       «      S y r]   )rA   Úformatr
   ÚMIMEr   Úupperr^   s    r   Úget_format_mimetypezImageFile.get_format_mimetype¦   sD   € Ø×ÒØ×'Ñ'Ð'Ø�;‰;Ð"Ü—:‘:—>‘> $§+¡+×"3Ñ"3Ó"5Ó6Ð6Ør&   c                ó2   •— g | _         t        ‰| �	  |«       y r]   )rB   r>   Ú__setstate__)rY   Ústater[   s     €r   rf   zImageFile.__setstate__­   s   ø€ ØˆŒ	Ü‰Ñ˜UÕ#r&   c                ó^   — | j                   r| j                  j                  «        d| _        y)zCheck file integrityN)rL   rH   rX   r^   s    r   ÚverifyzImageFile.verify±   s!   € ð
 ×ÒØ�G‰G�M‰MŒOØˆ�r&   c                óJ
  — | j                   s| j                  €d}t        |«      ‚t        j                  j	                  | «      }| j                   s|S d| _        | j                  xr t        | j                   «      dk(  }|xr t        t        d«       }d}t        | d«      r| j                  }d}n| j                  j                  }t        | d«      r| j                  }d}n| j                  j                  }|�rf| j                   d   \  }}}	}
t        |
t         «      r|
ddf}
|d	k(  �r7t        |
t"        «      �r&t        |
«      d
k\  �r|
d   | j$                  k(  �r|
d   t        j&                  v rï	 ddl}t+        | j                  «      5 }|j)                  |j-                  «       d|j.                  ¬«      | _        ddd«       |	| j0                  d   |
d   z  z   | j
                  j1                  «       kD  rd}t        |«      ‚t        j2                  j5                  | j
                  | j0                  ||	|
«      | _        d}| j8                  rd| j8                  _        | jA                  «        d}| j
                  �s…| j                   jC                  tD        ¬«       tG        | dd«      }tI        jJ                  | j                   d„ «      D ��cg c]  \  }}tM        |«      d   ‘Œ c}}| _         | j                   D �]  \  }}}	}
 ||	«       t        jN                  | j$                  ||
| jP                  «      }	 |jS                  | j6                  |«       |jT                  r0|jW                  | j                  «       |jY                  d«      d   }n^|}	 	  || jZ                  «      }|s!tb        rn?dt        |«      › d�}t        |«      ‚||z   }|jY                  |«      \  }}|dk  rn||d }Œ[|je                  «        �Œ g | _         || _3        | ji                  «        | jj                  r&| jl                  r| j                  jo                  «        d| _        | j
                  stb        s|dk  rtq        |d¬«      ‚t        j                  j	                  | «      S # 1 sw Y   �ŒãxY w# t<        t        t>        f$ r d| _        Y �Œiw xY wc c}}w # t\        t^        j`                  f$ r}tb        rY d}~�Œd}t        |«      |‚d}~ww xY w# |je                  «        w xY w)z"Load image data based on tile listNzcannot load this imager	   Úpypy_version_infor   Ú	load_readFÚ	load_seekÚrawé   )Úaccesszbuffer is not large enoughr   ©ÚkeyÚtile_prefixr&   c                ó   — | d   | d   | d   fS )Nr   r	   ro   r*   )rB   s    r   ú<lambda>z ImageFile.load.<locals>.<lambda>  s   € ¨T°!©W°d¸1±g¸tÀA¹wÐ,G€ r&   r   zimage file is truncatedzimage file is truncated (z bytes not processed)r%   )9rB   Ú_imr   r
   ÚloadÚmaprK   ÚlenÚhasattrÚsysrl   rH   Úreadrm   ÚseekÚ
isinstancer.   ÚtuplerU   Ú	_MAPMODESÚmmaprG   ÚfilenoÚACCESS_READrV   r   Ú
map_bufferÚimÚpaletteÚdirtyr   ÚImportErrorÚload_prepareÚsortr,   ÚgetattrÚ	itertoolsÚgroupbyÚlistÚ_getdecoderrD   ÚsetimageÚpulls_fdÚsetfdÚdecoderF   rO   rS   r   ÚLOAD_TRUNCATED_IMAGESÚcleanuprC   Úload_endrL   Ú!_close_exclusive_fp_after_loadingrX   r    )rY   r   ÚpixelÚuse_mmaprC   r|   r}   Údecoder_namer1   r3   r4   r�   rH   Úerr_codeÚprefixÚ_Útilesr   ÚbÚsÚeÚns                         r   rw   zImageFile.loadº   sn  € ð �yŠy˜TŸX™XÐ-Ø*ˆCÜ˜#“,Ðä—‘× Ñ  Ó&ˆØ�yŠyØˆLà%)ˆŒØ—=‘=Ò8¤S¨¯©£^°qÑ%8ˆàÒE¤G¬CÐ1DÓ$EÐ Eˆàˆô �4˜Ô%Ø—>‘>ˆDà‰Hà—7‘7—<‘<ˆDä�4˜Ô%Ø—>‘>ˆDØ‰Hà—7‘7—<‘<ˆDâà26·)±)¸A±,Ñ/ˆL˜' 6¨4Ü˜$¤Ô$Ø˜a �|�à Ó%Ü˜t¤UÕ+Ü˜“I “NØ˜‘G˜tŸy™yÓ(Ø˜‘GœuŸ™Ñ.ð$ãä˜dŸm™mÓ,ð V°Ø#'§9¡9¨R¯Y©Y«[¸!ÀD×DTÑDT 9Ó#U˜œ÷Và §	¡	¨!¡¨t°A©wÑ 6Ñ6¸¿¹¿¹»ÒHØ:˜Ü% c›lÐ*Ü#Ÿj™j×3Ñ3ØŸ™ $§)¡)¨\¸6À4ó�D”Gð  !�Hð —|’|Ø-.˜Ÿ™Ô*ð 	×ÑÔØˆØ�x‹xà�I‰I�N‰NœyˆNÔ)ô ˜T =°#Ó6ˆFô
 !*× 1Ñ 1Ø—I‘IÑGó!÷á�A�uô �U“˜B“óˆDŒIð 8<·y±yó (&Ñ3�˜g v¨tÙ�V”Ü×+Ñ+Ø—I‘I˜|¨T°4×3EÑ3Eó�ð#&Ø×$Ñ$ T§W¡W¨gÔ6Ø×'Ò'ØŸ™ d§g¡gÔ.Ø#*§>¡>°#Ó#6°qÑ#9™à"˜Ø"ð>Ù$(¨×)=Ñ)=Ó$> ñ $%Ý#8Ø$)ð),Ü,/°«F¨8Ð3Hð)Jð %(ô +2°#«,Ð$6à ! A¡˜AØ*1¯.©.¸Ó*;™K˜A˜xØ  1šuØ %Ø ! ! " ˜Að3 #ð8 —O‘OÖ%ðQ(&ðT ˆŒ	Ø ˆŒà�‰Œà×Ò $×"HÒ"HØ�G‰G�M‰MŒOØˆŒà�xŠxÕ 5¸(ÀQº,ä˜x°Ô7Ð7ä�{‰{×Ñ Ó%Ð%÷oVñ Vûô '¬´Ð=ò $Ø#�D—Hð$üóøô* %/´·±Ð#=ò >å#8Ý$)à*C CÜ*1°#«,¸AÐ$=ûð>ûð2 —O‘OÕ%úso   Å4R- Æ2R Æ?B#R- ËSÌ=ATÎSÎ+ATÒ R*Ò%R- Ò-SÓSÓTÓ.TÓ4TÓ:TÔTÔTÔT"c                óì   — | j                   €9t        j                  j                  | j                  | j
                  «      | _        | j                  dk(  r t        j                  j                  | «       y y )NÚP)rv   r
   r   ÚnewrU   rV   r…   rw   r^   s    r   r‰   zImageFile.load_prepareC  sM   € à�8‰8ÐÜ—j‘j—n‘n T§Y¡Y°·	±	Ó:ˆDŒGà�9‰9˜ÒÜ�K‰K×Ñ˜TÕ"ð r&   c                 ó   — y r]   r*   r^   s    r   r–   zImageFile.load_endK  ó   € àr&   c                óÈ   — || j                   k  s4t        | d«      r| j                  �)|t        | d«      | j                   z   k\  rd}t	        |«      ‚| j                  «       |k7  S )NÚ	_n_framesÚn_framesz attempt to seek outside sequence)r@   rz   r©   r‹   rR   Útell)rY   Úframer   s      r   Ú_seek_checkzImageFile._seek_checkW  s]   € à�D—O‘OÒ#ô ˜T ;Ô/°D·N±NÐ4JØœW T¨:Ó6¸¿¹ÑHÒHð 5ˆCÜ˜3“-Ðà�y‰y‹{˜eÑ#Ð#r&   r]   )rH   zStrOrBytesPath | IO[bytes]rK   zstr | bytes | NoneÚreturnÚNone©r®   r¯   )r®   ú
str | None)rg   z	list[Any]r®   r¯   ©r®   zImage.core.PixelAccess | None)r¬   r2   r®   Úbool)r5   r6   r7   Ú__doc__r?   rN   rd   rf   ri   rw   r‰   r–   r­   Ú__classcell__)r[   s   @r   r:   r:   n   sU   ø„ Ù4ð NRð0Ø,ð0Ø8Jð0à	õ0ódóõ$óóG&óR#ó÷$r&   r:   c                  ó:   — e Zd Zdd„Zej
                  dd„«       Zy)ÚStubHandlerc                 ó   — y r]   r*   ©rY   r…   s     r   rG   zStubHandler.openh  r_   r&   c                 ó   — y r]   r*   r¹   s     r   rw   zStubHandler.loadk  r§   r&   N)r…   ÚStubImageFiler®   r¯   )r…   r»   r®   úImage.Image)r5   r6   r7   rG   ÚabcÚabstractmethodrw   r*   r&   r   r·   r·   g  s!   „ óð 	×Ñòó ñr&   r·   c                  ó(   — e Zd ZdZdd„Zdd„Zdd„Zy)	r»   z±
    Base class for stub image loaders.

    A stub loader is an image loader that can identify files of a
    certain format, but relies on external code to load the file.
    c                ó   — d}t        |«      ‚)Nz+StubImageFile subclass must implement _open©ÚNotImplementedError©rY   r   s     r   rN   zStubImageFile._openx  s   € Ø;ˆÜ! #Ó&Ð&r&   c                óê   — | j                  «       }|€d| j                  › d�}t        |«      ‚|j                  | «      }|€J ‚|j                  | _        |j
                  | _        |j                  «       S )Nzcannot find loader for this z file)Ú_loadra   r   rw   r[   Ú__dict__)rY   Úloaderr   Úimages       r   rw   zStubImageFile.load|  sj   € Ø—‘“ˆØˆ>Ø0°·±°¸UÐCˆCÜ˜#“,ÐØ—‘˜DÓ!ˆØÐ Ð Ð àŸ™ˆŒØŸ™ˆŒØ�z‰z‹|Ðr&   c                ó   — d}t        |«      ‚)z (Hook) Find actual image loader.z+StubImageFile subclass must implement _loadrÁ   rÃ   s     r   rÅ   zStubImageFile._loadˆ  s   € à;ˆÜ! #Ó&Ð&r&   Nr°   r²   )r®   zStubHandler | None)r5   r6   r7   r´   rN   rw   rÅ   r*   r&   r   r»   r»   p  s   „ ñó'ó
ô'r&   r»   c                  óp   — e Zd ZU dZdZdZded<   dZded<   dZded<   d	Z	d	Z
dd
„Zdd„Zdd„Zdd„Zdd„Zy)ÚParserzj
    Incremental image parser.  This class implements the standard
    feed/close consumer interface.
    NzImage.Image | NonerÈ   zbytes | NoneÚdataz,Image.core.ImagingDecoder | PyDecoder | Noner   r   c                ó*   — | j                   �J d«       ‚y)zµ
        (Consumer) Reset the parser.  Note that you can only call this
        method immediately after you've created a parser; parser
        instances cannot be reused.
        Nzcannot reuse parsers)rÌ   r^   s    r   ÚresetzParser.reset›  s   € ð �y‰yÐ Ð8Ð"8Ó8Ñ r&   c                óT  — | j                   ry| j                  €|| _        n| j                  |z   | _        | j                  ræ| j                  dkD  rmt	        t        | j                  «      | j                  «      }| j                  |d | _        | j                  |z
  | _        | j                  dkD  s| j                  sy| j                  j                  | j                  «      \  }}|dk  r(d| _        d| _         |dk  rd| _        t        |d¬«      ‚y| j                  |d | _        y| j                  ry	 t        j                  | j                  «      5 }t        j                  |«      }ddd«       t        d«      xs t        |d«      }|st        |j                  «      dk7  rd| _        || _        y|j                  «        |j                  d   \  }}}	}
g |_        t        j                   |j"                  ||
|j$                  «      | _        | j                  j'                  |j(                  |«       |	| _        | j                  t        | j                  «      k  r%| j                  | j                  d | _        d| _        || _        y# 1 sw Y   �Œ%xY w# t*        $ r Y yw xY w)z¦
        (Consumer) Feed data to the parser.

        :param data: A string buffer.
        :exception OSError: If the parser failed to parse the image file.
        Nr   r	   Fr%   rm   rl   )ÚfinishedrÌ   r   r3   Úminry   r“   rÈ   r    ÚioÚBytesIOr
   rG   rz   rB   r‰   r�   rU   rD   r�   r…   r   )rY   rÌ   Úskipr¢   r¡   rH   r…   ÚflagÚdÚoÚas              r   ÚfeedzParser.feed£  s(  € ð �=Š=Øà�9‰9ÐØˆD�IàŸ	™	 DÑ(ˆDŒIð �<Š<Ø�{‰{˜QŠäœ3˜tŸy™y›>¨4¯;©;Ó7�Ø ŸI™I d eÐ,�”	Ø"Ÿk™k¨DÑ0�”Ø—;‘; ’?¨$¯)ª)Øà—<‘<×&Ñ& t§y¡yÓ1‰DˆAˆqà�1Šuà �”	Ø !�”Ø�q’5à!%�D”JÜ& q°%Ô8Ð8ð ØŸ	™	 ! "˜ˆD�Ià�ZŠZð ð Ü—Z‘Z §	¡	Ó*ð (¨bÜŸ™ B›�B÷(ô
 ˜r ;Ó/ÒK´7¸2¸{Ó3K�Ùœ3˜rŸw™w›<¨1Ò,à"&�D”Kð  �•
ð —O‘OÔ%Ø!#§¡¨¡‘J�A�q˜!˜QØ �B”GÜ#(×#4Ñ#4°R·W±W¸aÀÀB×DTÑDTÓ#U�D”LØ—L‘L×)Ñ)¨"¯%©%°Ô3ð #$�D”KØ—{‘{¤c¨$¯)©)£nÒ4Ø$(§I¡I¨d¯k©k¨mÐ$<˜œ	Ø&'˜œà�•
÷/(ñ (ûäò Ùðús*   Ä6J ÅJÅ+J ÊJÊJ Ê	J'Ê&J'c                ó   — | S r]   r*   r^   s    r   Ú	__enter__zParser.__enter__ï  s   € Øˆr&   c                ó$   — | j                  «        y r]   )rX   ©rY   r4   s     r   Ú__exit__zParser.__exit__ò  s   € Ø�
‰
�r&   c                ó,  — | j                   r8| j                  d«       dx| _        | _         | j                  sd}t	        |«      ‚| j
                  sd}t	        |«      ‚| j                  rjt        j                  | j                  «      5 }	 t        j                  |«      | _        | j
                  j                  «        	 ddd«       | j
                  S | j
                  S # | j
                  j                  «        w xY w# 1 sw Y   | j
                  S xY w)a  
        (Consumer) Close the stream.

        :returns: An image object.
        :exception OSError: If the parser failed to parse the image file either
                            because it cannot be identified or cannot be
                            decoded.
        r&   Nzimage was incompletezcannot parse this image)r   rÙ   rÌ   rÐ   r   rÈ   rÒ   rÓ   r
   rG   rw   )rY   r   rH   s      r   rX   zParser.closeõ  sÐ   € ð �<Š<à�I‰I�cŒNØ'+Ð+ˆDŒI˜œØ—=’=Ø,�Ü˜c“lÐ"Ø�zŠzØ+ˆCÜ˜#“,ÐØ�9Š9ô —‘˜DŸI™IÓ&ð &¨"ð&Ü!&§¡¨B£�D”Jà—J‘J—O‘OÕ%÷	&ð
 �z‰zÐˆt�z‰zÐøð —J‘J—O‘OÕ%ú÷	&ð
 �z‰zÐús$   Â	C?ÂC Â%C?Ã C<Ã<C?Ã?Dr°   )rÌ   rM   r®   r¯   )r®   rË   )r4   Úobjectr®   r¯   )r®   r¼   )r5   r6   r7   r´   ÚincrementalrÈ   r8   rÌ   r   r3   rÐ   rÎ   rÙ   rÛ   rÞ   rX   r*   r&   r   rË   rË   Ž  sS   … ñð
 €KØ $€EÐÓ$Ø€Dˆ,ÓØ<@€GÐ9Ó@Ø€FØ€Hó9óJ óXóôr&   rË   c           	     ó¾  — | j                  «        t        | d«      sd| _        |j                  t        ¬«       t        t        || j                  d   dz  «      }	 |j                  «       }|j                  «        t        | ||||«       t        |d«      r|j                  «        yy# t        t        j                  f$ r}t        | |||d|«       Y d}~ŒLd}~ww xY w)z«Helper to save image based on tile list

    :param im: Image object.
    :param fp: File object.
    :param tile: Tile list.
    :param bufsize: Optional buffer size
    Úencoderconfigr*   rq   r   é   NÚflush)rw   rz   rã   rŠ   r,   ÚmaxrE   rV   r‚   rå   Ú_encode_tiler   rÒ   ÚUnsupportedOperation)r…   rH   rB   ÚbufsizeÚfhÚexcs         r   Ú_saverì     s¾   € ð ‡G�G„IÜ�2�Ô'ØˆÔØ‡I�I”)€IÔô
 ”(˜G R§W¡W¨Q¡Z°!¡^Ó4€Gð7Ø�Y‰Y‹[ˆØ
�‰Œ
Ü�R˜˜T 7¨BÔ/ô ˆr�7ÔØ
�‰�
ð øô œB×3Ñ3Ð4ò 7Ü�R˜˜T 7¨D°#×6Ñ6ûð7ús   Á/B) Â)CÃCÃCc                ó<  — |D �]  \  }}}}	|dkD  r|j                  |«       t        j                  | j                  ||	| j                  «      }
	 |
j                  | j                  |«       |
j                  r%|
j                  |«       |
j                  «       d   }nE|r-	 |
j                  |«      dd  \  }}|j                  |«       |rnŒ,|€J ‚|
j                  ||«      }|dk  rt        |d¬«      |‚	 |
j                  «        �Œ y # |
j                  «        w xY w)Nr   r	   Tr%   )r}   r
   Ú_getencoderrU   rã   r�   r…   Ú	pushes_fdr’   Úencode_to_pyfdÚencodeÚwriteÚencode_to_filer    r•   )r…   rH   rB   ré   rê   rë   Úencoder_namer1   r3   r4   r   ÚerrcoderÌ   s                r   rç   rç   3  s  € ð 04ó Ñ+ˆ�g˜v tØ�AŠ:Ø�G‰G�FŒOÜ×#Ñ# B§G¡G¨\¸4À×AQÑAQÓRˆð	Ø×Ñ˜RŸU™U GÔ,Ø× Ò Ø—‘˜bÔ!Ø!×0Ñ0Ó2°1Ñ5‘áàØ(/¯©°wÓ(?ÀÀÐ(C™˜ ØŸ™ œÙ"Ø!ð	 ð ˜>Ð)˜>Ø%×4Ñ4°R¸ÓA�GØ˜Š{Ü" 7°DÔ9¸sÐBð ð �O‰OÖñ1øð0 �O‰OÕús   ÁB%D	Ä	Dc                ó‚  — |dk  ry|t         k  r.| j                  |«      }t        |«      |k  rd}t        |«      ‚|S g }|}|dkD  rG| j                  t	        |t         «      «      }|sn%|j                  |«       |t        |«      z  }|dkD  rŒGt        d„ |D «       «      |k  rd}t        |«      ‚dj                  |«      S )a»  
    Reads large blocks in a safe way.  Unlike fp.read(n), this function
    doesn't trust the user.  If the requested size is larger than
    SAFEBLOCK, the file is read block by block.

    :param fp: File handle.  Must implement a <b>read</b> method.
    :param size: Number of bytes to read.
    :returns: A string containing <i>size</i> bytes of data.

    Raises an OSError if the file is truncated and the read cannot be completed

    r   r&   zTruncated File Readc              3  ó2   K  — | ]  }t        |«      –— Œ y ­wr]   )ry   )Ú.0Úblocks     r   ú	<genexpr>z_safe_read.<locals>.<genexpr>s  s   è ø€ Ò
*˜%Œ3ˆu�:Ñ
*ùs   ‚)Ú	SAFEBLOCKr|   ry   r   rÑ   ÚappendÚsumÚjoin)rH   rV   rÌ   r   ÚblocksÚremaining_sizerù   s          r   Ú
_safe_readr  V  sÇ   € ð ˆq‚yØØŒyÒØ�w‰w�t‹}ˆÜˆt‹9�tÒØ'ˆCÜ˜#“,ÐØˆØ€FØ€NØ
˜1Ò
Ø—‘œ˜N¬IÓ6Ó7ˆÙØØ�‰�eÔØœ#˜e›*Ñ$ˆð ˜1Ó
ô Ñ
* 6Ô
*Ó*¨TÒ1Ø#ˆÜ�c‹lÐØ�8‰8�FÓÐr&   c                  ó   — e Zd Zdd„Zdd„Zy)ÚPyCodecStatec                ó<   — d| _         d| _        d| _        d| _        y )Nr   )ÚxsizeÚysizeÚxoffÚyoffr^   s    r   r?   zPyCodecState.__init__z  s   € ØˆŒ
ØˆŒ
ØˆŒ	Øˆ�	r&   c                ó’   — | j                   | j                  | j                   | j                  z   | j                  | j                  z   fS r]   )r  r  r  r  r^   s    r   r1   zPyCodecState.extents€  s3   € Ø�y‰y˜$Ÿ)™) T§Y¡Y°·±Ñ%;¸T¿Y¹YÈÏÉÑ=SÐSÐSr&   Nr°   )r®   ztuple[int, int, int, int])r5   r6   r7   r?   r1   r*   r&   r   r  r  y  s   „ óôTr&   r  c                  óN   — e Zd ZU ded<   d	d„Zd
d„Zdd„Zdd„Z	 d	 	 	 	 	 dd„Zy)ÚPyCodeczIO[bytes] | NoneÚfdc                ón   — d | _         t        «       | _        d | _        || _        | j                  |«       y r]   )r…   r  rg   r  rU   Úinit)rY   rU   r4   s      r   r?   zPyCodec.__init__‡  s+   € Ø15ˆŒÜ!“^ˆŒ
ØˆŒØˆŒ	Ø�	‰	�$�r&   c                ó   — || _         y)z—
        Override to perform codec specific initialization

        :param args: Tuple of arg items from the tile entry
        :returns: None
        N)r4   rÝ   s     r   r  zPyCodec.initŽ  s   € ð ˆ�	r&   c                 ó   — y)zT
        Override to perform codec specific cleanup

        :returns: None
        Nr*   r^   s    r   r•   zPyCodec.cleanup—  s   € ð 	r&   c                ó   — || _         y)z�
        Called from ImageFile to set the Python file-like object

        :param fd: A Python file-like object
        :returns: None
        N)r  )rY   r  s     r   r’   zPyCodec.setfdŸ  s   € ð ˆ�r&   Nc                ó   — || _         |r|\  }}}}nd\  }}}}|dk(  r=|dk(  r8| j                   j                  \  | j                  _        | j                  _        nJ|| j                  _        || j                  _        ||z
  | j                  _        ||z
  | j                  _        | j                  j                  dk  s| j                  j                  dk  rd}t        |«      ‚| j                  j                  | j                  j
                  z   | j                   j                  d   kD  sG| j                  j                  | j                  j                  z   | j                   j                  d   kD  rd}t        |«      ‚y)zø
        Called from ImageFile to set the core output image for the codec

        :param im: A core image object
        :param extents: a 4 tuple of (x0, y0, x1, y1) defining the rectangle
            for this tile
        :returns: None
        )r   r   r   r   r   zSize cannot be negativer	   z Tile cannot extend outside imageN)r…   rV   rg   r  r  r  r  Ú
ValueError)rY   r…   r1   Úx0Úy0Úx1Úy1r   s           r   r�   zPyCodec.setimage¨  s,  € ð ˆŒáØ&ÑˆR��R™à+ÑˆR��R˜à�Š7�r˜Q’wØ15·±·±Ñ.ˆD�J‰JÔ˜dŸj™jÕ.à ˆD�J‰JŒOØ ˆD�J‰JŒOØ! B™wˆD�J‰JÔØ! B™wˆD�J‰JÔà�:‰:×Ñ˜qÒ  D§J¡J×$4Ñ$4¸Ò$9Ø+ˆCÜ˜S“/Ð!ð �J‰J×Ñ˜tŸz™zŸ™Ñ.°·±·±¸a±Ò@Ø�z‰z×Ñ $§*¡*§/¡/Ñ1°D·G±G·L±LÀ±OÒCà4ˆCÜ˜S“/Ð!ð Dr&   )rU   r.   r4   r   r®   r¯   )r4   útuple[Any, ...]r®   r¯   r°   )r  ú	IO[bytes]r®   r¯   r]   )r…   zImage.core.ImagingCorer1   r0   r®   r¯   )	r5   r6   r7   r8   r?   r  r•   r’   r�   r*   r&   r   r  r  „  sB   … ØÓóóóóð 59ð'"à"ð'"ð 2ð'"ð 
ô	'"r&   r  c                  óH   — e Zd ZdZdZedd„«       Zdd„Z	 d		 	 	 	 	 	 	 d
d„Zy)Ú	PyDecoderzË
    Python implementation of a format decoder. Override this class and
    add the decoding logic in the :meth:`decode` method.

    See :ref:`Writing Your Own File Codec in Python<file-codecs-py>`
    Fc                ó   — | j                   S r]   )Ú	_pulls_fdr^   s    r   r‘   zPyDecoder.pulls_fdÜ  s   € à�~‰~Ðr&   c                ó   — d}t        |«      ‚)a=  
        Override to perform the decoding process.

        :param buffer: A bytes object with the data to be decoded.
        :returns: A tuple of ``(bytes consumed, errcode)``.
            If finished with decoding return -1 for the bytes consumed.
            Err codes are from :data:`.ImageFile.ERRORS`.
        zunavailable in base decoderrÁ   )rY   Úbufferr   s      r   r“   zPyDecoder.decodeà  ó   € ð ,ˆÜ! #Ó&Ð&r&   Nc                ó^  — |s| j                   }t        j                  | j                   d||«      }| j                  €J ‚|j	                  | j                  | j
                  j                  «       «       |j                  |«      }|d   dk\  rd}t        |«      ‚|d   dk7  rd}t        |«      ‚y)aS  
        Convenience method to set the internal image from a stream of raw data

        :param data: Bytes to be set
        :param rawmode: The rawmode to be used for the decoder.
            If not specified, it will default to the mode of the image
        :param extra: Extra arguments for the decoder.
        :returns: None
        rn   Nr   znot enough image datar	   zcannot decode image data)	rU   r
   r�   r…   r�   rg   r1   r“   r  )rY   rÌ   ÚrawmodeÚextrarÖ   r    r   s          r   Ú
set_as_rawzPyDecoder.set_as_rawì  sŸ   € ñ Ø—i‘iˆGÜ×Ñ˜dŸi™i¨°¸Ó?ˆØ�w‰wÐ"Ð"Ð"Ø	�
‰
�4—7‘7˜DŸJ™J×.Ñ.Ó0Ô1Ø�H‰H�T‹NˆàˆQ‰4�1Š9Ø)ˆCÜ˜S“/Ð!ØˆQ‰4�1Š9Ø,ˆCÜ˜S“/Ð!ð r&   ©r®   r³   )r  z$bytes | Image.SupportsArrayInterfacer®   útuple[int, int])Nr*   )rÌ   rM   r"  r±   r#  r  r®   r¯   )	r5   r6   r7   r´   r  Úpropertyr‘   r“   r$  r*   r&   r   r  r  Ò  sQ   „ ñð €Iàòó ðó
'ð QSð"Øð"Ø$.ð"Ø>Mð"à	ô"r&   r  c                  ó>   — e Zd ZdZdZedd„«       Zd	d„Zd
d„Zdd„Z	y)Ú	PyEncoderzË
    Python implementation of a format encoder. Override this class and
    add the decoding logic in the :meth:`encode` method.

    See :ref:`Writing Your Own File Codec in Python<file-codecs-py>`
    Fc                ó   — | j                   S r]   )Ú
_pushes_fdr^   s    r   rï   zPyEncoder.pushes_fd  s   € à�‰Ðr&   c                ó   — d}t        |«      ‚)a   
        Override to perform the encoding process.

        :param bufsize: Buffer size.
        :returns: A tuple of ``(bytes encoded, errcode, bytes)``.
            If finished with encoding return 1 for the error code.
            Err codes are from :data:`.ImageFile.ERRORS`.
        zunavailable in base encoderrÁ   )rY   ré   r   s      r   rñ   zPyEncoder.encode  r   r&   c                ó¤   — | j                   sy| j                  d«      \  }}}|r)| j                  €J ‚| j                  j                  |«       ||fS )zø
        If ``pushes_fd`` is ``True``, then this method will be used,
        and ``encode()`` will only be called once.

        :returns: A tuple of ``(bytes consumed, errcode)``.
            Err codes are from :data:`.ImageFile.ERRORS`.
        )r   r   r   )rï   rñ   r  rò   )rY   Úbytes_consumedrõ   rÌ   s       r   rð   zPyEncoder.encode_to_pyfd"  sP   € ð �~Š~ØØ(,¯©°A«Ñ%ˆ˜ ÙØ—7‘7Ð&Ð&Ð&Ø�G‰G�M‰M˜$ÔØ˜wÐ&Ð&r&   c                ó†   — d}|dk(  r9| j                  |«      \  }}}|dkD  rt        j                  |||d «       |dk(  rŒ9|S )zì
        :param fh: File handle.
        :param bufsize: Buffer size.

        :returns: If finished successfully, return 0.
            Otherwise, return an error code. Err codes are from
            :data:`.ImageFile.ERRORS`.
        r   N)rñ   rI   rò   )rY   rê   ré   rõ   ÚstatusÚbufs         r   ró   zPyEncoder.encode_to_file2  sP   € ð ˆØ˜ŠlØ#'§;¡;¨wÓ#7Ñ ˆF�G˜SØ˜ŠzÜ—‘˜˜S  ˜\Ô*ð ˜‹lð ˆr&   Nr%  )ré   r2   r®   ztuple[int, int, bytes])r®   r&  )rê   r2   ré   r2   r®   r2   )
r5   r6   r7   r´   r+  r'  rï   rñ   rð   ró   r*   r&   r   r)  r)    s/   „ ñð €Jàòó ðó
'ó'ô r&   r)  )r   r2   r   r³   r®   r   )r   r2   r®   r   )r+   r'   r®   r2   )r   )
r…   r¼   rH   r  rB   úlist[_Tile]ré   r2   r®   r¯   r]   )r…   r¼   rH   r  rB   r2  ré   r2   rê   z
int | Nonerë   zBaseException | Noner®   r¯   )rH   r  rV   r2   r®   rM   ))Ú
__future__r   r½   rÒ   rŒ   rI   rS   r{   Útypingr   r   r   r   r   r=   r
   Ú
_deprecater   Ú_utilr   Ú_typingr   rE   rû   r”   r   r    r"   r,   r'   r:   r·   r»   rË   rì   rç   r  r  r  r  r)  r*   r&   r   ú<module>r8     s=  ðõ: #ã 
Û 	Û Û 	Û Û 
ß ;Õ ;å Ý !Ý áÝ'à€à€	àÐ Ø Nð 	%ØØØØñ
€ðóó-óô
.ˆJô .ôv$�—‘ô v$÷rñ ô'�Iô '÷<Cñ CôRðD !%ð Øð àð ð ð ð ð	 ð
 	ð ð 
ð ð 
ó óF ÷FTñ T÷K"ñ K"ô\3"�ô 3"ôl8�õ 8r&   