Ë
    Bü´j–r  ã                  ó,  — 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 ddlmZmZ ddlmZ ddlmZmZ dZerdd	lmZ  ej0                  e«      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ejH                  «      Z% G d„ de#ejL                  ¬«      Z' G d„ d«      Z(d.d/d „Z)	 d0	 	 	 	 	 	 	 	 	 	 	 	 	 d1d!„Z*d2d"„Z+ G d#„ d$«      Z, G d%„ d&«      Z- G d'„ d(e-«      Z. G d)„ d*e-«      Z/y)3é    )ÚannotationsN)ÚIOÚAnyÚ
NamedTupleÚcasté   )ÚExifTagsÚImage)Ú	deprecate)ÚDeferredErrorÚis_pathF)ÚStrOrBytesPathi   i   z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/root/workspace/ytshorts/venv/lib/python3.12/site-packages/PIL/ImageFile.pyÚ_get_oserrorr!   K   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#   V   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__r4   r5   r+   r'   r    r(   r(   e   s!   … ØƒOØ-Ó-Ø€FˆCƒOØ)-€DÐ
&Ô-r'   c                  óœ   ‡ — e Zd ZdZ	 d	 	 	 	 	 dˆ fd„Zdd„Zd„ Zdˆ fd„Zdd„Zdd„Z	dˆ f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)ÚselfrI   rL   Úvr   Ú	__class__s        €r    r@   zImageFile.__init__t   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+   ©rZ   s    r    rO   zImageFile._open¦   ó   € Ør'   c                ó8  — t        | dd«      rft        | j                  t        «      sL| j                  | j                  k7  r| j                  j                  «        t        t        d«      «      | _        | j                  r| j                  j                  «        y y )NÚ_fpFzOperation on closed image)ÚgetattrÚ
isinstancerb   r   rI   rY   Ú
ValueErrorr_   s    r    Ú	_close_fpzImageFile._close_fp©   sd   € Ü�4˜ Ô&¬z¸$¿(¹(ÄMÔ/RØ�x‰x˜4Ÿ7™7Ò"Ø—‘—‘Ô Ü$¤ZÐ0KÓ%LÓMˆDŒHØ�7Š7Ø�G‰G�M‰M�Oð r'   c                óª   •— 	 | j                  «        d| _        t
        ‰| �  «        y# t        $ r }t        j	                  d|«       Y d}~Œ3d}~ww xY w)a¥  
        Closes the file pointer, if possible.

        This operation will destroy the image core and release its memory.
        The image data will be unusable afterward.

        This function is required to close images that have multiple frames or
        have not had their file read and closed by the
        :py:meth:`~PIL.Image.Image.load` method. See :ref:`file-handling` for
        more information.
        NzError closing: %s)rf   rI   Ú	ExceptionÚloggerÚdebugr?   rY   )rZ   r   r\   s     €r    rY   zImageFile.close±   sH   ø€ ð	3Ø�N‰NÔØˆDŒGô 	‰‰�øô ò 	3Ü�L‰LÐ,¨c×2Ñ2ûð	3ús   ƒ) ©	A²AÁAc                óœ  — g }| j                  «       }g }t        j                  j                  |v r[|t        j                  j                     }|r<t	        |t
        «      s|f}|D ]$  }|j                  |j                  |«      |f«       Œ& |j                  t        j                  j                  «      }|r^|j                  t        j                  j                  «      r5|j                  €J ‚|j                  ||j                  j                  f«       d }|D �]w  \  }}	| j                  €J ‚| j                  j!                  «       }
|€|
}| j                  }|�Á|j                  t        j                  j                  «      }|�–|t#        | dd«      z  }| j                  j%                  |«       |j                  t        j                  j&                  «      }t	        |t(        «      sJ ‚| j                  j+                  |«      }t-        j.                  |«      }t1        j2                  |«      5 }ddlm} €/t	        ||j8                  «      r|	g|_        |j=                  d«       |j?                  «        |j                  |«       d d d «       �Œz |�)| j                  €J ‚| j                  j%                  |«       |S # 1 sw Y   �Œ²xY w)NÚ_exif_offsetr   r   )ÚTiffImagePlugin) Úgetexifr	   ÚBaseÚSubIFDsrd   ÚtupleÚappendÚ_get_ifd_dictÚget_ifdÚIFDÚIFD1r   ÚJpegIFOffsetÚ_infoÚnextrI   Útellrc   ÚseekÚJpegIFByteCountr3   ÚreadÚioÚBytesIOr
   rH   r>   rm   ÚTiffImageFileÚ
_frame_posÚ_seekÚload)rZ   Úchild_imagesÚexifÚifdsÚsubifd_offsetsÚsubifd_offsetÚifd1r4   ÚifdÚ
ifd_offsetÚcurrent_offsetrI   Úthumbnail_offsetÚlengthÚdataÚimrm   s                    r    Úget_child_imageszImageFile.get_child_imagesÅ   sP  € ØˆØ�|‰|‹~ˆØˆÜ�=‰=× Ñ  DÑ(Ø!¤(§-¡-×"7Ñ"7Ñ8ˆNÙÜ! .´%Ô8Ø&4Ð%6�NØ%3ò T�MØ—K‘K ×!3Ñ!3°MÓ!BÀMÐ RÕSðTà�|‰|œHŸL™L×-Ñ-Ó.ˆÙ�D—H‘HœXŸ]™]×7Ñ7Ô8Ø—:‘:Ð)Ð)Ð)Ø�K‰K˜˜tŸz™zŸ™Ð/Ô0àˆØ#ó 	(‰OˆC�Ø—7‘7Ð&Ð&Ð&Ø!ŸW™WŸ\™\›^ˆNØˆ~Ø'�à—‘ˆBØˆØ#&§7¡7¬8¯=©=×+EÑ+EÓ#FÐ Ø#Ð/Ø$¬°°nÀaÓ(HÑHÐ$Ø—G‘G—L‘LÐ!1Ô2à ŸW™W¤X§]¡]×%BÑ%BÓC�FÜ% f¬cÔ2Ð2Ð2ØŸ7™7Ÿ<™<¨Ó/�DÜŸ™ DÓ)�Bä—‘˜B“ð 	( 2Ý-à#Ð+´
Ø˜×5Ñ5ô1ð &0 L�B”MØ—H‘H˜Q”KØ—‘”	Ø×#Ñ# BÔ'÷	(ñ 	(ð%	(ð: ÐØ—7‘7Ð&Ð&Ð&Ø�G‰G�L‰L˜Ô ØÐ÷	(ñ 	(ús   È0AKËK	c                óº   — | j                   r| j                   S | j                  �7t        j                  j	                  | j                  j                  «       «      S y r^   )rB   Úformatr
   ÚMIMEr   Úupperr_   s    r    Úget_format_mimetypezImageFile.get_format_mimetypeø   sD   € Ø×ÒØ×'Ñ'Ð'Ø�;‰;Ð"Ü—:‘:—>‘> $§+¡+×"3Ñ"3Ó"5Ó6Ð6Ør'   c                ó<   •— t         ‰| �  «       | j                  gz   S r^   )r?   Ú__getstate__rL   )rZ   r\   s    €r    r˜   zImageFile.__getstate__ÿ   s   ø€ Ü‰wÑ#Ó%¨¯©¨Ñ7Ð7r'   c                ób   •— g | _         t        |«      dkD  r
|d   | _        t        ‰| �  |«       y )Né   )rC   ÚlenrL   r?   Ú__setstate__)rZ   Ústater\   s     €r    rœ   zImageFile.__setstate__  s-   ø€ ØˆŒ	Üˆu‹:˜Š>Ø! !™HˆDŒMÜ‰Ñ˜UÕ#r'   c                ó^   — | j                   r| j                  j                  «        d| _        y)zCheck file integrityN)rM   rI   rY   r_   s    r    ÚverifyzImageFile.verify  s!   € ð
 ×ÒØ�G‰G�M‰MŒOØˆ�r'   c                ó¾
  — | j                   s| j                  €d}t        |«      ‚t        j                  j	                  | «      }| j                   s|S d| _        | j                  xr t        | j                   «      dk(  }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«       |	| j.                  d   |
d   z  z   | j
                  j/                  «       kD  rd}t        |«      ‚t        j0                  j3                  | j
                  | j.                  ||	|
«      | _        d}| j6                  rd| j6                  _        | j?                  «        d}| j
                  �sÔ| j                   jA                  tB        ¬«       tE        | dd«      }tG        jH                  | j                   d„ «      D ��cg c]  \  }}tK        |«      d   ‘Œ c}}| _         tM        | j                   «      D �]I  \  }\  }}}	}
 ||	«       t        jN                  | j"                  ||
| jP                  «      }	 |jS                  | j4                  |«       |jT                  r0|jW                  | j                  «       |jY                  d«      d   }n¡|}	 | jZ                  }|dz   t        | j                   «      k  r&| j                   |dz      j\                  }||	kD  r||	z
  }	  ||«      }|s!td        rn?dt        |«      › d�}t        |«      ‚||z   }|jY                  |«      \  }}|dk  rn||d }Œž|jg                  «        �ŒL g | _         || _4        | jk                  «        | jl                  r&| jn                  r| j                  jq                  «        d| _
        | j
                  std        s|dk  rts        |d¬«      ‚t        j                  j	                  | «      S # 1 sw Y   �Œ2xY w# t:        t        t<        f$ r d| _        Y �Œ¸w xY wc c}}w # t^        t`        jb                  f$ r}td        rY d}~�Œd}t        |«      |‚d}~ww xY w# |jg                  «        w xY w)z"Load image data based on tile listNzcannot load this imager   r   Ú	load_readFÚ	load_seekÚrawé   )Úaccesszbuffer is not large enoughr   ©ÚkeyÚtile_prefixr'   c                ó   — | d   | d   | d   fS )Nr   r   r¤   r+   )rC   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&   ):rC   Ú_imr   r
   rƒ   ÚmaprL   r›   Úhasattrr¡   rI   r}   r¢   r{   rd   r/   rq   rV   Ú	_MAPMODESÚmmaprH   ÚfilenoÚACCESS_READrW   r   Ú
map_bufferr�   ÚpaletteÚdirtyr   ÚImportErrorÚload_prepareÚsortr-   rc   Ú	itertoolsÚgroupbyÚlistÚ	enumerateÚ_getdecoderrE   ÚsetimageÚpulls_fdÚsetfdÚdecoderG   r4   rP   rT   r   ÚLOAD_TRUNCATED_IMAGESÚcleanuprD   Úload_endrM   Ú!_close_exclusive_fp_after_loadingrY   r!   )rZ   r   ÚpixelÚuse_mmaprD   r}   r{   Údecoder_namer2   r4   r5   r¯   rI   Úerr_codeÚprefixÚ_ÚtilesÚir   ÚbÚ
read_bytesÚnext_offsetÚsÚeÚns                            r    rƒ   zImageFile.load  s¨  € ð �yŠy˜TŸX™XÐ-Ø*ˆCÜ˜#“,Ðä—‘× Ñ  Ó&ˆØ�yŠyØˆLà%)ˆŒØ—=‘=Ò8¤S¨¯©£^°qÑ%8ˆàˆô �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ô =FÀdÇiÁiÓ<Pó -&Ñ8�Ñ8�L '¨6°4Ù�V”Ü×+Ñ+Ø—I‘I˜|¨T°4×3EÑ3Eó�ð(&Ø×$Ñ$ T§W¡W¨gÔ6Ø×'Ò'ØŸ™ d§g¡gÔ.Ø#*§>¡>°#Ó#6°qÑ#9™à"˜Ø"Ø)-×)=Ñ)=˜JØ  1™u¤s¨4¯9©9£~Ò5Ø.2¯i©i¸¸A¹Ñ.>×.EÑ.E Ø#.°Ò#7Ø1<¸vÑ1E Jð>Ù$(¨Ó$4 ñ $%Ý#8Ø$)ð),Ü,/°«F¨8Ð3Hð)Jð %(ô +2°#«,Ð$6à ! A¡˜AØ*1¯.©.¸Ó*;™K˜A˜xØ  1šuØ %Ø ! ! " ˜Að= #ðB —O‘OÖ%ð[-&ð^ ˆŒ	Ø ˆŒà�‰Œà×Ò $×"HÒ"HØ�G‰G�M‰MŒOØˆŒà�xŠxÕ 5¸(ÀQº,ä˜x°Ô7Ð7ä�{‰{×Ñ Ó%Ð%÷yVñ Vûô '¬´Ð=ò $Ø#�D—Hð$üóøô4 %/´·±Ð#=ò >å#8Ý$)à*C CÜ*1°#«,¸AÐ$=ûð>ûð2 —O‘OÕ%úso   ÅS' Å82SÆ*B#S' Ê=T	Ì4B(U
ÏTÏ%AU
ÓS$ÓS' Ó'TÔTÔUÔ(UÔ.U
Ô4UÕUÕU
Õ
Uc                óì   — | j                   €9t        j                  j                  | j                  | j
                  «      | _        | j                  dk(  r t        j                  j                  | «       y y )NÚP)r«   r
   r   ÚnewrV   rW   r�   rƒ   r_   s    r    r¶   zImageFile.load_prepare�  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_end¥  ó   € à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)rA   r­   rÙ   rc   rS   rz   )rZ   Úframer   s      r    Ú_seek_checkzImageFile._seek_check±  s]   € à�D—O‘OÒ#ô ˜T ;Ô/°D·N±NÐ4JØœW T¨:Ó6¸¿¹ÑHÒHð 5ˆCÜ˜3“-Ðà�y‰y‹{˜eÑ#Ð#r'   r^   )rI   zStrOrBytesPath | IO[bytes]rL   zstr | bytes | NoneÚreturnÚNone©rÝ   rÞ   )rÝ   zlist[ImageFile])rÝ   ú
str | None)rÝ   ú	list[Any])r�   rá   rÝ   rÞ   ©rÝ   zImage.core.PixelAccess | None)rÛ   r3   rÝ   Úbool)r6   r7   r8   Ú__doc__r@   rO   rf   rY   r‘   r–   r˜   rœ   rŸ   rƒ   r¶   rÃ   rÜ   Ú__classcell__)r\   s   @r    r;   r;   q   sj   ø„ Ù4ð NRð0Ø,ð0Ø8Jð0à	õ0ódòõó(1ófõ8õ$óóJ&óX#ó÷$r'   r;   c                  ó:   — e Zd Zdd„Zej
                  dd„«       Zy)ÚStubHandlerc                 ó   — y r^   r+   ©rZ   r�   s     r    rH   zStubHandler.openÂ  r`   r'   c                 ó   — y r^   r+   ré   s     r    rƒ   zStubHandler.loadÅ  r×   r'   N)r�   ÚStubImageFilerÝ   rÞ   )r�   rë   rÝ   úImage.Image)r6   r7   r8   rH   ÚabcÚabstractmethodrƒ   r+   r'   r    rç   rç   Á  s!   „ óð 	×Ñòó ñr'   rç   c                  ód   — e Zd ZdZej
                  dd„«       Zdd„Zej
                  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                 ó   — y r^   r+   r_   s    r    rO   zStubImageFile._openÒ  r×   r'   c                óê   — | j                  «       }|€d| j                  › d�}t        |«      ‚|j                  | «      }|€J ‚|j                  | _        |j
                  | _        |j                  «       S )Nzcannot find loader for this z file)Ú_loadr“   r   rƒ   r\   Ú__dict__)rZ   Úloaderr   Úimages       r    rƒ   zStubImageFile.loadÖ  sj   € Ø—‘“ˆØˆ>Ø0°·±°¸UÐCˆCÜ˜#“,ÐØ—‘˜DÓ!ˆØÐ Ð Ð àŸ™ˆŒØŸ™ˆŒØ�z‰z‹|Ðr'   c                 ó   — y)z (Hook) Find actual image loader.Nr+   r_   s    r    rò   zStubImageFile._loadâ  s   € ð 	r'   Nrß   râ   )rÝ   zStubHandler | None)	r6   r7   r8   rä   rí   rî   rO   rƒ   rò   r+   r'   r    rë   rë   Ê  s@   „ ñð 	×Ñòó ðó
ð 	×Ñòó ñr'   rë   )Ú	metaclassc                  ó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 | Noner�   z,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&   r¢   r¡   )Úfinishedr�   r   r4   Úminr›   rÀ   rõ   r!   r~   r   r
   rH   r­   rC   r¶   r¼   rV   rE   r½   r�   r   )rZ   r�   ÚskiprÒ   rÑ   rI   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__I  s   € Øˆr'   c                ó$   — | j                  «        y r^   )rY   ©rZ   r5   s     r    Ú__exit__zParser.__exit__L  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
   rH   rƒ   )rZ   r   rI   s      r    rY   zParser.closeO  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�   rN   rÝ   rÞ   )rÝ   rù   )r5   ÚobjectrÝ   rÞ   )rÝ   rì   )r6   r7   r8   rä   Úincrementalrõ   r9   r�   r   r4   rý   rû   r  r  r	  rY   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+   r¦   r   é   NÚflush)rƒ   r­   r  r·   r-   ÚmaxrF   rW   r°   r  Ú_encode_tiler   r~   ÚUnsupportedOperation)r�   rI   rC   ÚbufsizeÚfhÚexcs         r    Ú_saver  q  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
   Ú_getencoderrV   r  r½   r�   Ú	pushes_fdr¿   Úencode_to_pyfdÚencodeÚwriteÚencode_to_filer!   rÂ   )r�   rI   rC   r  r  r  Úencoder_namer2   r4   r5   r   Úerrcoder�   s                r    r  r  �  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^   )r›   )Ú.0Úblocks     r    ú	<genexpr>z_safe_read.<locals>.<genexpr>Í  s   è ø€ Ò
*˜%Œ3ˆu�:Ñ
*ùs   ‚)Ú	SAFEBLOCKr}   r›   r   rþ   rr   ÚsumÚjoin)rI   rW   r�   r   ÚblocksÚremaining_sizer$  s          r    Ú
_safe_readr+  °  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__Ô  s   € ØˆŒ
ØˆŒ
ØˆŒ	Øˆ�	r'   c                ó’   — | j                   | j                  | j                   | j                  z   | j                  | j                  z   fS r^   )r1  r2  r/  r0  r_   s    r    r2   zPyCodecState.extentsÚ  s3   € Ø�y‰y˜$Ÿ)™) T§Y¡Y°·±Ñ%;¸T¿Y¹YÈÏÉÑ=SÐSÐSr'   Nrß   )rÝ   ztuple[int, int, int, int])r6   r7   r8   r@   r2   r+   r'   r    r-  r-  Ó  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-  r�   r6  rV   Úinit)rZ   rV   r5   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)r5   r  s     r    r8  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)r6  )rZ   r6  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�   rW   r�   r/  r0  r1  r2  re   )rZ   r�   r2   Ú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'   )rV   r/   r5   r   rÝ   rÞ   )r5   útuple[Any, ...]rÝ   rÞ   rß   )r6  ú	IO[bytes]rÝ   rÞ   r^   )r�   zImage.core.ImagingCorer2   r1   rÝ   rÞ   )	r6   r7   r8   r9   r@   r8  rÂ   r¿   r½   r+   r'   r    r5  r5  Þ  sB   … ØÓóóóóð 59ð'"à"ð'"ð 2ð'"ð 
ô	'"r'   r5  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_fd6  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 decoder©ÚNotImplementedError)rZ   Ú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
        r£   Nr   znot enough image datar   zcannot decode image data)	rV   r
   r¼   r�   r½   r�   r2   rÀ   re   )rZ   r�   ÚrawmodeÚextrar  rÐ   r   s          r    Ú
set_as_rawzPyDecoder.set_as_rawF  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ã   )rJ  z$bytes | Image.SupportsArrayInterfacerÝ   útuple[int, int])Nr+   )r�   rN   rM  rà   rN  rA  rÝ   rÞ   )	r6   r7   r8   rä   rF  Úpropertyr¾   rÀ   rO  r+   r'   r    rD  rD  ,  sQ   „ ñð €Iàòó ðó
'ð QSð"Øð"Ø$.ð"Ø>Mð"à	ô"r'   rD  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_fdl  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 encoderrH  )rZ   r  r   s      r    r  zPyEncoder.encodep  rK  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  r6  r  )rZ   Ú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  rJ   r  )rZ   r  r  r   ÚstatusÚbufs         r    r  zPyEncoder.encode_to_fileŒ  sP   € ð ˆØ˜ŠlØ#'§;¡;¨wÓ#7Ñ ˆF�G˜SØ˜ŠzÜ—‘˜˜S  ˜\Ô*ð ˜‹lð ˆr'   NrP  )r  r3   rÝ   ztuple[int, int, bytes])rÝ   rQ  )r  r3   r  r3   rÝ   r3   )
r6   r7   r8   rä   rV  rR  r  r  r  r  r+   r'   r    rT  rT  b  s/   „ ñð €Jàòó ðó
'ó'ô r'   rT  )r   r3   r   rã   rÝ   r   )r   r3   rÝ   r   )r,   r(   rÝ   r3   )r   )
r�   rì   rI   rB  rC   úlist[_Tile]r  r3   rÝ   rÞ   r^   )r�   rì   rI   rB  rC   r]  r  r3   r  z
int | Noner  zBaseException | NonerÝ   rÞ   )rI   rB  rW   r3   rÝ   rN   )0Ú
__future__r   rí   r~   r¸   ÚloggingrJ   rT   Útypingr   r   r   r   r>   r	   r
   Ú
_deprecater   Ú_utilr   r   ÚTYPE_CHECKINGÚ_typingr   Ú	getLoggerr6   ri   rF   r&  rÁ   r   r!   r#   r-   r(   r;   ÚABCrç   ÚABCMetarë   rù   r  r  r+  r-  r5  rD  rT  r+   r'   r    ú<module>rh     s`  ðõ: #ã 
Û 	Û Û Û 	Û ß ,Ó ,ç Ý !ß )à€ÙÝ'à	ˆ×	Ñ	˜8Ó	$€à€à€	àÐ Ø Nð 	%ØØØØñ
€ðóó-óô
.ˆJô .ôM$�—‘ô M$ô`
�#—'‘'ô ô�I¨¯©õ ÷<Cñ CôRðD !%ð Øð àð ð ð ð ð	 ð
 	ð ð 
ð ð 
ó óF ÷FTñ T÷K"ñ K"ô\3"�ô 3"ôl8�õ 8r'   