Ë
    ñEj"·  ã                  óÈ  — 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	 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 dd	lmZ dd
lmZ  ej4                  e«      Z ej:                  d«      j<                  ZdZ ddddddddddddddddœZ! ej:                  d«      Z"ejF                  Z$	 de$z  Z%	  G d„ d e	«      Z& G d!„ d"e	«      Z'd#„ Z(dKd$„Z) G d%„ d&«      Z* G d'„ d(e+«      Z, G d)„ d*«      Z- G d+„ d,e*«      Z.d-„ Z/ G d.„ d/ej                  «      Z0d0d1d2d3d4d5d6d6d6d7d8d9d:d;d<d=œZ1d>„ Z2 G d?„ d@«      Z3 G dA„ dB«      Z4dC„ Z5dD„ Z6e2dEfdF„Z7dG„ Z8 ejr                  e0jt                  e0e/«        ejv                  e0jt                  e7«        ejx                  e0jt                  e6«        ejz                  e0jt                  dHdIg«        ej|                  e0jt                  dJ«       y)Lé    )ÚannotationsN)ÚIntEnumé   )ÚImageÚ
ImageChopsÚ	ImageFileÚImagePaletteÚImageSequence)Úi16be)Úi32be)Úo8)Úo16be)Úo32bes   \w\w\w\ws   ‰PNG

)Ú1r   )ÚLúL;2)r   úL;4)r   r   )úI;16úI;16B)ÚRGBr   )r   zRGB;16B)ÚPúP;1)r   úP;2)r   úP;4)r   r   )ÚLAr   )ÚRGBAzLA;16B)r   r   )r   zRGBA;16B))r   r   )é   r   )é   r   )é   r   )é   r   )r   r   )r    r   )r   é   )r   r!   )r   r!   )r   r!   )r   r   )r    r   )r   é   )r    r"   s   ^ÿ* ÿ*$é@   c                  ó   — e Zd ZdZ	 dZ	 dZy)ÚDisposalr   r   r   N)Ú__name__Ú
__module__Ú__qualname__ÚOP_NONEÚOP_BACKGROUNDÚOP_PREVIOUS© ó    úU/var/www/html/peoplehubportal/venv/lib/python3.12/site-packages/PIL/PngImagePlugin.pyr%   r%   c   s$   „ Ø€Gðð €Mðð
 €Kðr-   r%   c                  ó   — e Zd ZdZ	 dZy)ÚBlendr   r   N)r&   r'   r(   Ú	OP_SOURCEÚOP_OVERr,   r-   r.   r0   r0   x   s   „ Ø€Iðð
 €Gðr-   r0   c                óŒ   — t        j                  «       }|j                  | t        «      }|j                  rd}t        |«      ‚|S )NzDecompressed Data Too Large)ÚzlibÚdecompressobjÚ
decompressÚMAX_TEXT_CHUNKÚunconsumed_tailÚ
ValueError)ÚsÚdobjÚ	plaintextÚmsgs       r.   Ú_safe_zlib_decompressr>   †   s>   € Ü×ÑÓ€DØ—‘ ¤>Ó2€IØ×ÒØ+ˆÜ˜‹oÐØÐr-   c                ó4   — t        j                  | |«      dz  S )Nl   ÿÿ )r4   Úcrc32)ÚdataÚseeds     r.   Ú_crc32rC   �   s   € Ü�:‰:�d˜DÓ! JÑ.Ð.r-   c                  óJ   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zdd
„Zy)ÚChunkStreamc                ó    — || _         g | _        y ©N)ÚfpÚqueue)ÚselfrH   s     r.   Ú__init__zChunkStream.__init__˜   s   € ØˆŒØˆ�
r-   c                ó�  — d}| j                   r:| j                   j                  «       \  }}}| j                  j                  |«       nE| j                  j	                  d«      }|dd }| j                  j                  «       }t        |«      }t        |«      s*t        j                  sdt        |«      › d�}t        |«      ‚|||fS )z.Fetch a new chunk. Returns header information.Nr   r   zbroken PNG file (chunk ú))rI   ÚpoprH   ÚseekÚreadÚtellÚi32Úis_cidr   ÚLOAD_TRUNCATED_IMAGESÚreprÚSyntaxError)rJ   ÚcidÚposÚlengthr:   r=   s         r.   rP   zChunkStream.readœ   s£   € àˆà�:Š:Ø#Ÿz™zŸ~™~Ó/ÑˆC��fØ�G‰G�L‰L˜Õà—‘—‘˜Q“ˆAØ�A�B�%ˆCØ—'‘'—,‘,“.ˆCÜ˜“VˆFä�cŒ{Ü×2Ò2Ø/´°S³	¨{¸!Ð<�Ü! #Ó&Ð&à�C˜ÐÐr-   c                ó   — | S rG   r,   ©rJ   s    r.   Ú	__enter__zChunkStream.__enter__°   s   € Øˆr-   c                ó$   — | j                  «        y rG   )Úclose)rJ   Úargss     r.   Ú__exit__zChunkStream.__exit__³   s   € Ø�
‰
�r-   c                ó    — d x| _         | _        y rG   )rI   rH   r[   s    r.   r^   zChunkStream.close¶   s   € Ø#Ð#ˆŒ
�T•Wr-   c                ó@   — | j                   j                  |||f«       y rG   )rI   Úappend©rJ   rW   rX   rY   s       r.   ÚpushzChunkStream.push¹   s   € Ø�
‰
×Ñ˜3  VÐ,Õ-r-   c                ó|   — t         j                  d|||«        t        | d|j                  d«      z   «      ||«      S )z"Call the appropriate chunk handlerzSTREAM %r %s %sÚchunk_Úascii)ÚloggerÚdebugÚgetattrÚdecoderd   s       r.   ÚcallzChunkStream.call¼   s;   € ô 	�‰Ð&¨¨S°&Ô9Ø<Œw�t˜X¨¯
©
°7Ó(;Ñ;Ó<¸SÀ&ÓIÐIr-   c                ó~  — t         j                  r|d   dz	  dz  r| j                  ||«       y	 t        |t        |«      «      }t	        | j
                  j                  d«      «      }||k7  rdt        |«      › d�}t        |«      ‚y# t        j                  $ r }dt        |«      › d�}t        |«      |‚d}~ww xY w)	zRead and verify checksumr   é   r   Nr   z(broken PNG file (bad header checksum in rM   z(broken PNG file (incomplete checksum in )r   rT   Úcrc_skiprC   rR   rH   rP   rU   rV   ÚstructÚerror)rJ   rW   rA   Úcrc1Úcrc2r=   Úes          r.   ÚcrczChunkStream.crcÂ   sµ   € ô ×*Ò*°°A±¸!±¸a²Ø�M‰M˜#˜tÔ$Øð	*Ü˜$¤ s£Ó,ˆDÜ�t—w‘w—|‘| A“Ó'ˆDØ�tŠ|Ø@ÄÀcÃÀÈ1ÐM�Ü! #Ó&Ð&ð øô �|‰|ò 	*Ø<¼TÀ#»Y¸KÀqÐIˆCÜ˜cÓ"¨Ð)ûð	*ús   °AB	 Â	B<ÂB7Â7B<c                ó:   — | j                   j                  d«       y)zRead checksumr   N)rH   rP   )rJ   rW   rA   s      r.   rp   zChunkStream.crc_skipÖ   s   € ð 	�‰�‰�Q�r-   c                ó  — g }	 	 | j                  «       \  }}}||k(  r	 |S | j	                  |t        j                  | j                  |«      «       |j                  |«       Œ_# t        j                  $ r}d}t        |«      |‚d }~ww xY w)Nztruncated PNG file)	rP   rq   rr   ÚOSErrorrv   r   Ú
_safe_readrH   rc   )rJ   ÚendchunkÚcidsrW   rX   rY   ru   r=   s           r.   ÚverifyzChunkStream.verifyÛ   s�   € ð ˆàð*Ø#'§9¡9£;Ñ ��S˜&ð
 �hŠØð ˆð �H‰H�Sœ)×.Ñ.¨t¯w©w¸Ó?Ô@Ø�K‰K˜Ôð øô —<‘<ò *Ø*�Ü˜c“l¨Ð)ûð*ús   …A# Á#B	Á6BÂB	N)ó   IEND)r&   r'   r(   rK   rP   r\   r`   r^   re   rm   rv   rp   r}   r,   r-   r.   rE   rE   —   s5   „ òò ò(òò$ò.òJò*ò(ô
r-   rE   c                  ó"   — e Zd ZdZedd„«       Zy)ÚiTXtzq
    Subclass of string to allow iTXt chunks to look like strings while
    keeping their extra information

    Nc                óN   — t         j                  | |«      }||_        ||_        |S )zÇ
        :param cls: the class to use when creating the instance
        :param text: value for this key
        :param lang: language code
        :param tkey: UTF-8 version of the key name
        )ÚstrÚ__new__ÚlangÚtkey)ÚclsÚtextr„   r…   rJ   s        r.   rƒ   ziTXt.__new__÷   s'   € ô �{‰{˜3 Ó%ˆØˆŒ	ØˆŒ	Øˆr-   )NN)r&   r'   r(   Ú__doc__Ústaticmethodrƒ   r,   r-   r.   r€   r€   ð   s   „ ñð òó ñr-   r€   c                  ó.   — e Zd ZdZd„ Zdd„Zdd„Zdd„Zy)	ÚPngInfoz<
    PNG chunk container (for use with save(pnginfo=))

    c                ó   — g | _         y rG   )Úchunksr[   s    r.   rK   zPngInfo.__init__  s	   € Øˆ�r-   c                óz   — ||g}|r|j                  d«       | j                  j                  t        |«      «       y)a"  Appends an arbitrary chunk. Use with caution.

        :param cid: a byte string, 4 bytes long.
        :param data: a byte string of the encoded data
        :param after_idat: for use with private chunks. Whether the chunk
                           should be written after IDAT

        TN)rc   r�   Útuple)rJ   rW   rA   Ú
after_idatÚchunks        r.   ÚaddzPngInfo.add  s2   € ð �d�ˆÙØ�L‰L˜ÔØ�‰×Ñœ5 ›<Õ(r-   c                óÐ  — t        |t        «      s|j                  dd«      }t        |t        «      s|j                  dd«      }t        |t        «      s|j                  dd«      }t        |t        «      s|j                  dd«      }|r8| j                  d|dz   |z   dz   |z   dz   t	        j
                  |«      z   «       y| j                  d|dz   |z   dz   |z   dz   |z   «       y)	zùAppends an iTXt chunk.

        :param key: latin-1 encodable text key name
        :param value: value for this key
        :param lang: language code
        :param tkey: UTF-8 version of the key name
        :param zip: compression flag

        úlatin-1Ústrictúutf-8ó   iTXts     ó    s      N)Ú
isinstanceÚbytesÚencoder’   r4   Úcompress)rJ   ÚkeyÚvaluer„   r…   Úzips         r.   Úadd_itxtzPngInfo.add_itxt  sÖ   € ô ˜#œuÔ%Ø—*‘*˜Y¨Ó1ˆCÜ˜%¤Ô'Ø—L‘L ¨(Ó3ˆEÜ˜$¤Ô&Ø—;‘;˜w¨Ó1ˆDÜ˜$¤Ô&Ø—;‘;˜w¨Ó1ˆDáØ�H‰HØØ�kÑ! DÑ(¨5Ñ0°4Ñ7¸%Ñ?Ä$Ç-Á-ÐPUÓBVÑVõð
 �H‰H�W˜c I™o°Ñ4°uÑ<¸tÑCÀeÑKÈeÑSÕTr-   c                óÔ  — t        |t        «      r*| j                  |||j                  |j                  |¬«      S t        |t
        «      s	 |j                  dd«      }t        |t
        «      s|j                  dd«      }|r,| j                  d|dz   t        j                  |«      z   «       y| j                  d|dz   |z   «       y# t        $ r | j                  |||¬«      cY S w xY w)	zæAppends a text chunk.

        :param key: latin-1 encodable text key name
        :param value: value for this key, text or an
           :py:class:`PIL.PngImagePlugin.iTXt` instance
        :param zip: compression flag

        )rŸ   r”   r•   ó   zTXtó     ó   tEXtr˜   N)r™   r€   r    r„   r…   rš   r›   ÚUnicodeErrorr’   r4   rœ   )rJ   r�   rž   rŸ   s       r.   Úadd_textzPngInfo.add_text:  sÌ   € ô �eœTÔ"Ø—=‘=  e¨U¯Z©Z¸¿¹È�=ÓMÐMô ˜%¤Ô'ð:ØŸ™ Y°Ó9�ô ˜#œuÔ%Ø—*‘*˜Y¨Ó1ˆCáØ�H‰H�W˜c G™m¬d¯m©m¸EÓ.BÑBÕCà�H‰H�W˜c E™k¨EÑ1Õ2øô  ò :Ø—}‘} S¨%°S�}Ó9Ò9ð:ús   ÁC ÃC'Ã&C'N©F)Ú r¨   F)r&   r'   r(   rˆ   rK   r’   r    r¦   r,   r-   r.   r‹   r‹     s   „ ñò
ó)óUô83r-   r‹   c                  ó–   ‡ — e Zd Zˆ fd„Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zd
„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zˆ xZS )Ú	PngStreamc                ó¾   •— t         ‰| �  |«       i | _        i | _        d| _        d | _        d | _        d | _        d | _        d | _	        d | _
        d | _        d| _        y )N©r   r   r   )ÚsuperrK   Úim_infoÚim_textÚim_sizeÚim_modeÚim_tileÚ
im_paletteÚim_custom_mimetypeÚim_n_framesÚ_seq_numÚrewind_stateÚtext_memory)rJ   rH   Ú	__class__s     €r.   rK   zPngStream.__init__[  sc   ø€ Ü‰Ñ˜Ôð ˆŒØˆŒØˆŒØˆŒØˆŒØˆŒØ"&ˆÔØˆÔØˆŒØ ˆÔàˆÕr-   c                óŠ   — | xj                   |z  c_         | j                   t        kD  rd| j                   › d�}t        |«      ‚y )Nz%Too much memory used in text chunks: z>MAX_TEXT_MEMORY)r¸   ÚMAX_TEXT_MEMORYr9   )rJ   Úchunklenr=   s      r.   Úcheck_text_memoryzPngStream.check_text_memoryl  sN   € Ø×Ò˜HÑ$ÕØ×ÑœoÒ-à7Ø×#Ñ#Ð$Ð$4ð6ð ô ˜S“/Ð!ð .r-   c                ór   — | j                   j                  «       | j                  | j                  dœ| _        y )N)ÚinfoÚtileÚseq_num)r®   Úcopyr²   r¶   r·   r[   s    r.   Úsave_rewindzPngStream.save_rewindu  s*   € à—L‘L×%Ñ%Ó'Ø—L‘LØ—}‘}ñ
ˆÕr-   c                ó˜   — | j                   d   j                  «       | _        | j                   d   | _        | j                   d   | _        y )Nr¿   rÀ   rÁ   )r·   rÂ   r®   r²   r¶   r[   s    r.   ÚrewindzPngStream.rewind|  sA   € Ø×(Ñ(¨Ñ0×5Ñ5Ó7ˆŒØ×(Ñ(¨Ñ0ˆŒØ×)Ñ)¨)Ñ4ˆ�r-   c                ó¶  — t        j                  | j                  |«      }|j                  d«      }t        j                  d|d | «       ||dz      }t        j                  d|«       |dk7  rd|› d�}t        |«      ‚	 t        ||dz   d  «      }|| j                  d	<   |S # t        $ r t         j                  rd }n‚ Y Œ0t        j                  $ r d }Y ŒFw xY w)
Nr˜   ziCCP profile name %rr   zCompression method %sr   úUnknown compression method z in iCCP chunkr   Úicc_profile)r   rz   rH   Úfindri   rj   rV   r>   r9   rT   r4   rr   r®   )rJ   rX   rY   r:   ÚiÚcomp_methodr=   rÈ   s           r.   Ú
chunk_iCCPzPngStream.chunk_iCCP�  sá   € ä× Ñ  §¡¨&Ó1ˆð �F‰F�5‹MˆÜ�‰Ð+¨Q¨r°¨UÔ3Ø˜˜A™‘hˆÜ�‰Ð,¨kÔ:Ø˜!ÒØ/°¨}¸NÐKˆCÜ˜cÓ"Ð"ð	Ü/°°!°a±%°'°
Ó;ˆKð '2ˆ�‰�]Ñ#Øˆøô ò 	Ü×.Ò.Ø"‘àñ ô �z‰zò 	ØŠKð	ús   Â B" Â"CÃCÃCc                óp  — t        j                  | j                  |«      }|dk  rt         j                  r|S d}t	        |«      ‚t        |d«      t        |d«      f| _        	 t        |d   |d   f   \  | _        | _	        |d   rd| j                  d	<   |d
   rd}t        |«      ‚|S # t        $ r Y Œ3w xY w)Né   zTruncated IHDR chunkr   r   r   é	   é   r   Ú	interlaceé   zunknown filter category)r   rz   rH   rT   r9   rR   r°   Ú_MODESr±   Ú
im_rawmodeÚ	Exceptionr®   rV   ©rJ   rX   rY   r:   r=   s        r.   Ú
chunk_IHDRzPngStream.chunk_IHDRœ  s¿   € ä× Ñ  §¡¨&Ó1ˆØ�BŠ;Ü×.Ò.Ø�Ø(ˆCÜ˜S“/Ð!Ü˜1˜a“y¤# a¨£)Ð+ˆŒð	Ü,2°A°a±D¸!¸A¹$°<Ñ,@Ñ)ˆDŒL˜$œ/ð ˆRŠ5Ø()ˆD�L‰L˜Ñ%ØˆRŠ5Ø+ˆCÜ˜cÓ"Ð"Øˆøô ò 	Ùð	ús   Á#B) Â)	B5Â4B5c                ó  — d| j                   v rd| j                   d   || j                  fg}n9| j                  �d| j                   d<   dd| j                  z   || j                  fg}|| _        || _        d}t        |«      ‚)NÚbboxrŸ   TÚdefault_imager¬   zimage data found)r®   rÔ   rµ   r°   r²   Úim_idatÚEOFError)rJ   rX   rY   rÀ   r=   s        r.   Ú
chunk_IDATzPngStream.chunk_IDAT°  s�   € à�T—\‘\Ñ!Ø˜DŸL™L¨Ñ0°#°t·±ÐGÐH‰Dà×ÑÐ+Ø04�—‘˜_Ñ-Ø˜F T§\¡\Ñ1°3¸¿¹ÐHÐIˆDØˆŒØˆŒØ ˆÜ�s‹mÐr-   c                ó   — d}t        |«      ‚)Nzend of PNG image)rÜ   )rJ   rX   rY   r=   s       r.   Ú
chunk_IENDzPngStream.chunk_IEND½  s   € Ø ˆÜ�s‹mÐr-   c                óv   — t        j                  | j                  |«      }| j                  dk(  r	d|f| _        |S )Nr   r   )r   rz   rH   r±   r³   ©rJ   rX   rY   r:   s       r.   Ú
chunk_PLTEzPngStream.chunk_PLTEÁ  s4   € ä× Ñ  §¡¨&Ó1ˆØ�<‰<˜3ÒØ# Q˜hˆDŒOØˆr-   c                óÊ  — t        j                  | j                  |«      }| j                  dk(  rMt        j                  |«      r'|j                  d«      }|dk\  r || j                  d<   |S || j                  d<   |S | j                  dv rt        |«      | j                  d<   |S | j                  dk(  r/t        |«      t        |d«      t        |d«      f| j                  d<   |S )	Nr   r˜   r   Útransparency)r   r   r   r   r   r   )	r   rz   rH   r±   Ú_simple_paletteÚmatchrÉ   r®   Úi16)rJ   rX   rY   r:   rÊ   s        r.   Ú
chunk_tRNSzPngStream.chunk_tRNSÈ  sÔ   € ä× Ñ  §¡¨&Ó1ˆØ�<‰<˜3ÒÜ×$Ñ$ QÔ'ð —F‘F˜5“M�Ø˜’6Ø34�D—L‘L Ñ0ð ˆð 01�—‘˜^Ñ,ð
 ˆð	 �\‰\Ð/Ñ/Ü+.¨q«6ˆD�L‰L˜Ñ(ð ˆð �\‰\˜UÒ"Ü+.¨q«6´3°q¸!³9¼cÀ!ÀQ»iÐ+GˆD�L‰L˜Ñ(Øˆr-   c                ó|   — t        j                  | j                  |«      }t        |«      dz  | j                  d<   |S )Nç     jø@Úgamma)r   rz   rH   rR   r®   rá   s       r.   Ú
chunk_gAMAzPngStream.chunk_gAMAÜ  s4   € ä× Ñ  §¡¨&Ó1ˆÜ # A£¨Ñ 1ˆ�‰�WÑØˆr-   c                óÎ   — t        j                  | j                  |«      }t        j                  dt        |«      dz  z  |«      }t        d„ |D «       «      | j                  d<   |S )Nz>%dIr   c              3  ó&   K  — | ]	  }|d z  –— Œ y­w)rê   Nr,   )Ú.0Úelts     r.   ú	<genexpr>z'PngStream.chunk_cHRM.<locals>.<genexpr>è  s   è ø€ Ò,PÀ¨S°8­^Ñ,Pùs   ‚Úchromaticity)r   rz   rH   rq   ÚunpackÚlenr�   r®   )rJ   rX   rY   r:   Úraw_valss        r.   Ú
chunk_cHRMzPngStream.chunk_cHRMâ  sU   € ô × Ñ  §¡¨&Ó1ˆÜ—=‘= ¬3¨q«6°Q©;Ñ!7¸Ó;ˆÜ',Ñ,PÀxÔ,PÓ'Pˆ�‰�^Ñ$Øˆr-   c                ó²   — t        j                  | j                  |«      }|dk  rt         j                  r|S d}t	        |«      ‚|d   | j
                  d<   |S )Nr   zTruncated sRGB chunkr   Úsrgb)r   rz   rH   rT   r9   r®   rÖ   s        r.   Ú
chunk_sRGBzPngStream.chunk_sRGBë  sU   € ô × Ñ  §¡¨&Ó1ˆØ�AŠ:Ü×.Ò.Ø�Ø(ˆCÜ˜S“/Ð!Ø  ™tˆ�‰�VÑØˆr-   c                ó4  — t        j                  | j                  |«      }|dk  rt         j                  r|S d}t	        |«      ‚t        |d«      t        |d«      }}|d   }|dk(  r|dz  |dz  f}|| j                  d<   |S |dk(  r||f| j                  d	<   |S )
NrÏ   zTruncated pHYs chunkr   r   r   r   ç¦
F%uš?ÚdpiÚaspect)r   rz   rH   rT   r9   rR   r®   )	rJ   rX   rY   r:   r=   ÚpxÚpyÚunitrü   s	            r.   Ú
chunk_pHYszPngStream.chunk_pHYsû  s¨   € ä× Ñ  §¡¨&Ó1ˆØ�AŠ:Ü×.Ò.Ø�Ø(ˆCÜ˜S“/Ð!Ü�Q˜“œC  1›IˆBˆØ�‰tˆØ�1Š9Ø�v‘+˜r F™{Ð*ˆCØ"%ˆD�L‰L˜Ñð ˆð �QŠYØ%'¨ VˆD�L‰L˜Ñ"Øˆr-   c                ób  — t        j                  | j                  |«      }	 |j                  dd«      \  }}|rc|j                  dd«      }|j                  dd«      }|dk(  r|n|| j                  |<   || j                  |<   | j                  t        |«      «       |S # t        $ r |}d}Y Œvw xY w)Nr˜   r   r-   r”   r•   ÚreplaceÚexif)
r   rz   rH   Úsplitr9   rl   r®   r¯   r½   rô   )rJ   rX   rY   r:   ÚkÚvÚv_strs          r.   Ú
chunk_tEXtzPngStream.chunk_tEXt  sª   € ä× Ñ  §¡¨&Ó1ˆð	Ø—7‘7˜5 !Ó$‰DˆAˆqñ
 Ø—‘˜ HÓ-ˆAØ—H‘H˜Y¨	Ó2ˆEà#$¨¢;™a°EˆD�L‰L˜‰OØ#ˆD�L‰L˜‰OØ×"Ñ"¤3 u£:Ô.àˆøô ò 	àˆAØŠAð	ús   ¢B ÂB.Â-B.c                ó$  — t        j                  | j                  |«      }	 |j                  dd«      \  }}|r|d   }nd}|dk7  rd|› d�}t        |«      ‚	 t        |dd  «      }|r\|j                  dd«      }|j                  dd	«      }|x| j                  |<   | j                  |<   | j                  t        |«      «       |S # t        $ r |}d}Y Œžw xY w# t        $ r t         j                  rd}n‚ Y Œ’t        j                  $ r d}Y Œ¨w xY w)
Nr˜   r   r-   r   rÇ   z in zTXt chunkr”   r•   r  )r   rz   rH   r  r9   rV   r>   rT   r4   rr   rl   r®   r¯   r½   rô   )rJ   rX   rY   r:   r  r  rË   r=   s           r.   Ú
chunk_zTXtzPngStream.chunk_zTXt  s$  € ä× Ñ  §¡¨&Ó1ˆð	Ø—7‘7˜5 !Ó$‰DˆAˆqñ Ø˜A™$‰KàˆKØ˜!ÒØ/°¨}¸NÐKˆCÜ˜cÓ"Ð"ð	Ü% a¨¨ eÓ,ˆAñ Ø—‘˜ HÓ-ˆAØ—‘˜ IÓ.ˆAà01Ð1ˆD�L‰L˜‰O˜dŸl™l¨1™oØ×"Ñ"¤3 q£6Ô*àˆøô7 ò 	ØˆAØŠAð	ûô ò 	Ü×.Ò.Ø‘àñ ô �z‰zò 	ØŠAð	ús)   ¢C ÁC ÃCÃCÃDÃ8DÄDc                ó  — t        j                  | j                  |«      x}}	 |j                  dd«      \  }}t        |«      dk  r|S |d   |d   |dd  }}}	 |j                  dd«      \  }}	}
|dk7  r|dk(  r	 t        |
«      }
n|S 	 |j                  dd«      }|j                  dd«      }|	j                  dd«      }	|
j                  dd«      }
t        |
||	«      x| j                  |<   | j                  |<   | j                  t        |
«      «       |S # t        $ r |cY S w xY w# t        $ r |cY S w xY w# t        $ r t         j                  r|cY S ‚ t        j                  $ r |cY S w xY w# t        $ r |cY S w xY w)Nr˜   r   r   r   r”   r•   r–   )r   rz   rH   r  r9   rô   r>   rT   r4   rr   rl   r¥   r€   r®   r¯   r½   )rJ   rX   rY   Úrr:   r  ÚcfÚcmr„   Útkr  s              r.   Ú
chunk_iTXtzPngStream.chunk_iTXtA  s˜  € ä×$Ñ$ T§W¡W¨fÓ5Ð5ˆˆAð	Ø—7‘7˜5 !Ó$‰DˆAˆqô ˆq‹6�AŠ:ØˆHØ�a‘D˜!˜A™$  ! " �ˆBˆð	ØŸ'™' %¨Ó+‰KˆD�"�að �Š7Ø�QŠwðÜ-¨aÓ0‘Að �ð	Ø—‘˜ HÓ-ˆAØ—;‘;˜w¨Ó1ˆDØ—‘˜7 HÓ-ˆBØ—‘˜ (Ó+ˆAô -1°°D¸"Ó,=Ð=ˆ�‰�Q‰˜$Ÿ,™, q™/Ø×Ñœs 1›vÔ&àˆøôC ò 	ØŠHð	ûô ò 	ØŠHð	ûô "ò Ü ×6Ò6Ø šàÜ—z‘zò Ø’Hðûô ò 	ØŠHð	úsN   ¤D ÁD' Á:D8 Â	AE0 ÄD$Ä#D$Ä'D5Ä4D5Ä8E-ÅE-Å,E-Å0E>Å=E>c                ój   — t        j                  | j                  |«      }d|z   | j                  d<   |S )Nó   Exif  r  )r   rz   rH   r®   rá   s       r.   Ú
chunk_eXIfzPngStream.chunk_eXIfi  s0   € Ü× Ñ  §¡¨&Ó1ˆØ.°Ñ2ˆ�‰�VÑØˆr-   c                óˆ  — t        j                  | j                  |«      }|dk  rt         j                  r|S d}t	        |«      ‚| j
                  �d | _        t        j                  d«       |S t        |«      }|dk(  s|dkD  rt        j                  d«       |S || _        t        |d«      | j                  d<   d| _
        |S )	Nr   z"APNG contains truncated acTL chunkz4Invalid APNG, will use default PNG image if possibler   l        r   Úloopz
image/apng)r   rz   rH   rT   r9   rµ   ÚwarningsÚwarnrR   r®   r´   )rJ   rX   rY   r:   r=   Ún_framess         r.   Ú
chunk_acTLzPngStream.chunk_acTLo  s´   € Ü× Ñ  §¡¨&Ó1ˆØ�AŠ:Ü×.Ò.Ø�Ø6ˆCÜ˜S“/Ð!Ø×ÑÐ'Ø#ˆDÔÜ�M‰MÐPÔQØˆHÜ�q“6ˆØ�qŠ=˜H zÒ1Ü�M‰MÐPÔQØˆHØ#ˆÔÜ" 1 a›yˆ�‰�VÑØ".ˆÔØˆr-   c                óè  — t        j                  | j                  |«      }|dk  rt         j                  r|S d}t	        |«      ‚t        |«      }| j                  €|dk7  s| j                  �| j                  |dz
  k7  rd}t        |«      ‚|| _        t        |d«      t        |d«      }}t        |d«      t        |d	«      }	}| j                  \  }
}||z   |
kD  s|	|z   |kD  rd
}t        |«      ‚||	||z   |	|z   f| j                  d<   t        |d«      t        |d«      }}|dk(  rd}t        |«      t        |«      z  dz  | j                  d<   |d   | j                  d<   |d   | j                  d<   |S )Né   z"APNG contains truncated fcTL chunkr   r   ú#APNG contains frame sequence errorsr   r   rÐ   r    zAPNG contains invalid framesrÙ   é   é   éd   éè  Údurationé   Údisposalé   Úblend)r   rz   rH   rT   r9   rR   r¶   rV   r°   r®   rç   Úfloat)rJ   rX   rY   r:   r=   ÚseqÚwidthÚheightrþ   rÿ   Úim_wÚim_hÚ	delay_numÚ	delay_dens                 r.   Ú
chunk_fcTLzPngStream.chunk_fcTLƒ  sn  € Ü× Ñ  §¡¨&Ó1ˆØ�BŠ;Ü×.Ò.Ø�Ø6ˆCÜ˜S“/Ð!Ü�!‹fˆØ�M‰MÐ! c¨Q¢hØ�M‰MÐ%¨$¯-©-¸3À¹7Ò*Bà7ˆCÜ˜cÓ"Ð"ØˆŒÜ˜A˜q›	¤3 q¨!£9ˆvˆÜ�Q˜“œS  B›ZˆBˆØ—\‘\‰
ˆˆdØ�‰:˜Ò  V¡¨dÒ 2Ø0ˆCÜ˜cÓ"Ð"Ø " B¨¨U©
°B¸±KÐ@ˆ�‰�VÑÜ" 1 b›z¬3¨q°"«:�9ˆ	Ø˜Š>ØˆIÜ#(¨Ó#3´e¸IÓ6FÑ#FÈÑ#Mˆ�‰�ZÑ Ø#$ R¡5ˆ�‰�ZÑ Ø ! "¡ˆ�‰�WÑØˆr-   c                ó\  — |dk  r?t         j                  r"t        j                  | j                  |«      }|S d}t	        |«      ‚t        j                  | j                  d«      }t        |«      }| j                  |dz
  k7  rd}t        |«      ‚|| _        | j                  |dz   |dz
  «      S )Nr   z"APNG contains truncated fDAT chunkr   r  )	r   rT   rz   rH   r9   rR   r¶   rV   rÝ   )rJ   rX   rY   r:   r=   r(  s         r.   Ú
chunk_fdATzPngStream.chunk_fdAT   s›   € Ø�AŠ:Ü×.Ò.Ü×(Ñ(¨¯©°&Ó9�Ø�Ø6ˆCÜ˜S“/Ð!Ü× Ñ  §¡¨!Ó,ˆÜ�!‹fˆØ�=‰=˜C !™GÒ#Ø7ˆCÜ˜cÓ"Ð"ØˆŒØ�‰˜s Q™w¨°©
Ó3Ð3r-   )r&   r'   r(   rK   r½   rÃ   rÅ   rÌ   r×   rÝ   rß   râ   rè   rì   rö   rù   r  r	  r  r  r  r  r/  r1  Ú__classcell__©r¹   s   @r.   rª   rª   Z  sn   ø„ ôò""ò
ò5ò
ò6ò(òòòò(òòò ò"ò& òD&òPòò(ö:4r-   rª   c                ó   — | d d t         k(  S )Nr   )Ú_MAGIC)Úprefixs    r.   Ú_acceptr7  ´  s   € Ø�"�1ˆ:œÑÐr-   c                  ót   ‡ — e Zd ZdZdZd„ Zed„ «       Zd„ Zd„ Z	dd„Z
d„ Zd	„ Zd
„ Zd„ Zd„ Zˆ fd„Zd„ Zˆ xZS )ÚPngImageFileÚPNGzPortable network graphicsc                óF  — t        | j                  j                  d«      «      sd}t        |«      ‚| j                  | _        d| _        g | _        t        | j                  «      | _        	 | j                  j                  «       \  }}}	 | j                  j                  |||«      }| j                  j%                  ||«       ŒY# t        $ r Y nvt        $ rk t        j                  d|||«       t        j                  | j                  |«      }|dd j!                  «       r| j                  j#                  ||f«       Y Œšw xY w| j                  j&                  | _        | j                  j*                  | _        | j                  j.                  | _        d | _        | j                  j4                  | _        | j                  j8                  | _        | j                  j<                  xs d| _        | j0                  jA                  dd«      | _!        | j                  jD                  r4| j                  jD                  \  }}tG        jH                  ||«      | _%        |d	k(  r|d
z
  | _&        n|| _&        | j                  j<                  �ƒd| _'        | j                  jQ                  «        | jL                  | _)        | j                  jU                  «       | _+        | jB                  r| xj>                  dz  c_        | jY                  d«       | j>                  dkD  | _-        y )Nr   znot a PNG filer   ú%r %s %s (unknown)r   r   rÚ   Fó   fdATr   ).r7  rH   rP   rV   Ú_fpÚ_PngImageFile__frameÚprivate_chunksrª   Úpngrm   rÜ   ÚAttributeErrorri   rj   r   rz   Úislowerrc   rv   r±   Ú_moder°   Ú_sizer®   r¿   Ú_textr²   rÀ   r´   Úcustom_mimetyperµ   r  ÚgetrÚ   r³   r	   ÚrawÚpaletteÚ_PngImageFile__prepare_idatÚ!_close_exclusive_fp_after_loadingrÃ   Ú_PngImageFile__rewind_idatrQ   Ú_PngImageFile__rewindÚ_seekÚis_animated)rJ   r=   rW   rX   rY   r:   ÚrawmoderA   s           r.   Ú_openzPngImageFile._openÀ  sf  € Ü�t—w‘w—|‘| A“Ô'Ø"ˆCÜ˜cÓ"Ð"Ø—7‘7ˆŒØˆŒð
 !ˆÔÜ˜TŸW™WÓ%ˆŒàð  $Ÿx™xŸ}™}›ÑˆC��fð9Ø—H‘H—M‘M # s¨FÓ3�ð �H‰H�L‰L˜˜aÔ ð! øô ò ÙÜ!ò 9Ü—‘Ð1°3¸¸VÔDÜ×(Ñ(¨¯©°&Ó9�Ø�q˜�8×#Ñ#Ô%Ø×'Ñ'×.Ñ.°°Q¨xÔ8ùð	9úð —X‘X×%Ñ%ˆŒ
Ø—X‘X×%Ñ%ˆŒ
Ø—H‘H×$Ñ$ˆŒ	ØˆŒ
Ø—H‘H×$Ñ$ˆŒ	Ø#Ÿx™x×:Ñ:ˆÔØŸ™×,Ñ,Ò1°ˆŒØ!ŸY™YŸ]™]¨?¸EÓBˆÔà�8‰8×ÒØ ŸH™H×/Ñ/‰MˆG�TÜ'×+Ñ+¨G°TÓ:ˆDŒLà�'Š>Ø"(¨1¡*ˆDÕà"(ˆDÔà�8‰8×ÑÐ+Ø5:ˆDÔ2Ø�H‰H× Ñ Ô"Ø!%×!4Ñ!4ˆDÔØ ŸH™HŸM™M›OˆDŒMØ×!Ò!à—’ Ñ"•Ø�J‰J�qŒMØŸ=™=¨1Ñ,ˆÕs   ÂC Ã	EÃA0EÅEc                óø   — | j                   €c| j                  r*| j                  }| j                  | j                  dz
  «       | j                  «        | j                  r| j                  «       | j                   S )Nr   )rF  rP  r?  rO   r  Úload)rJ   Úframes     r.   r‡   zPngImageFile.text  s_   € ð �:‰:Ðð ×ÒØŸ™�à—	‘	˜$Ÿ-™-¨!Ñ+Ô,Ø�I‰IŒKØ×ÒØ—	‘	˜%Ô Ø�z‰zÐr-   c                óT  — | j                   €d}t        |«      ‚| j                   j                  | j                  d   d   dz
  «       | j                  j                  «        | j                  j                  «        | j                  r| j                   j                  «        d| _         y)zVerify PNG fileNz)verify must be called directly after openr   r   r   )rH   ÚRuntimeErrorrO   rÀ   rA  r}   r^   Ú_exclusive_fp)rJ   r=   s     r.   r}   zPngImageFile.verify  sy   € ð �7‰7ˆ?Ø=ˆCÜ˜sÓ#Ð#ð 	�‰�‰�T—Y‘Y˜q‘\ !‘_ qÑ(Ô)à�‰�‰ÔØ�‰�‰Ôà×ÒØ�G‰G�M‰MŒOØˆ�r-   c                óH  — | j                  |«      sy || j                  k  r| j                  dd«       | j                  }t        | j                  dz   |dz   «      D ]  }	 | j                  |«       Œ y # t        $ r$}| j                  |«       d}t	        |«      |‚d }~ww xY w)Nr   Tr   zno more images in APNG file)Ú_seek_checkr?  rO  ÚrangerÜ   rO   )rJ   rU  Ú
last_frameÚfru   r=   s         r.   rO   zPngImageFile.seek#  s˜   € Ø×Ñ Ô&ØØ�4—<‘<ÒØ�J‰J�q˜$Ôà—\‘\ˆ
Ü�t—|‘| aÑ'¨°©Ó3ò 	+ˆAð+Ø—
‘
˜1•ñ	+øô ò +Ø—	‘	˜*Ô%Ø3�Ü˜s“m¨Ð*ûð+ús   Á A4Á4	B!Á=BÂB!c                ó^
  — |dk(  �rK|r±| j                   j                  | j                  «       | j                  j	                  «        | j
                  | _        d | _        | j                  rd | _        | j                  j                  | _
        | j                  j                  | _        | j                   | _        d | _        d | _        | j                  j!                  dd«      | _        | j                  j!                  d«      | _        | j                  j!                  d«      | _        | j                  j!                  d«      | _        d| _        �n_|| j*                  dz   k7  rd|› �}t-        |«      ‚| j/                  «        | j                  r0| j                  j1                  | j                  | j(                  «       | j                  j3                  «       | _        | j                   | _        | j                  r1t5        j6                  | j                  | j                  «       d| _        d}	 | j                  j9                  d
«       	 | j                  j9                  «       \  }}}|dk(  rd}tA        |«      ‚|dk(  r|rd}t?        |«      ‚d	}	 | j                  jC                  |||«       Œ�| j                  €2| j$                  tL        jN                  k(  rtL        jP                  | _        | j$                  tL        jN                  k(  rK| j                  j3                  «       | _        | jS                  | j                  | j(                  «      | _        y | j$                  tL        jP                  k(  retT        jV                  jY                  | jZ                  | j\                  «      | _        | jS                  | j                  | j(                  «      | _        y d | _        y # t:        j<                  t>        f$ r Y n–w xY w# tD        $ r Y n‡t@        $ r9 |dk(  r|d
z  }|r	|| _        Y njt5        j6                  | j                  |«       Y �Œ›tF        $ r< tH        jK                  d|||«       t5        j6                  | j                  |«       Y �ŒÞw xY w|| _        | j                  j                  | _        | j                  j!                  d«      | _        | j                  j!                  d«      | _        | j                  j!                  d«      | _        | j                  r�Œqd}tA        |«      ‚)Nr   rÚ   Fr$  r&  rÙ   r   zcannot seek to frame Tr   r~   zNo more images in APNG fileó   fcTLzAPNG missing frame datar=  r<  zimage not found in APNG frame)/r>  rO   rN  rA  rÅ   rM  rK  ÚimÚpyaccessr®   r¿   r²   rÀ   rH   Ú_prev_imÚdisposerH  rÚ   Ú
dispose_opÚblend_opÚdispose_extentr?  r9   rT  ÚpasterÂ   r   rz   rP   rq   rr   rV   rÜ   rm   ÚUnicodeDecodeErrorrB  ri   rj   r%   r+   r*   Ú_cropr   ÚcoreÚfillÚmodeÚsize)rJ   rU  rÅ   r=   Úframe_startrW   rX   rY   s           r.   rO  zPngImageFile._seek2  sÓ  € Ø�A‹:ÙØ—‘—‘˜dŸm™mÔ,Ø—‘—‘Ô!Ø&*×&8Ñ&8�Ô#Ø�”Ø—=’=Ø$(�D”MØ ŸH™H×,Ñ,�”	Ø ŸH™H×,Ñ,�”	ØŸ(™(�”Ø ˆDŒMØˆDŒLØ!%§¡§¡¨ÀÓ!FˆDÔØ"Ÿi™iŸm™m¨JÓ7ˆDŒOØ ŸI™IŸM™M¨'Ó2ˆDŒMØ"&§)¡)§-¡-°Ó"7ˆDÔØˆDŽLà˜Ÿ™ qÑ(Ò(Ø-¨e¨WÐ5�Ü  “oÐ%ð �I‰IŒKà�|Š|Ø—‘—‘˜dŸl™l¨D×,?Ñ,?Ô@Ø ŸG™GŸL™L›NˆDŒMà—h‘hˆDŒGð ×"Ò"Ü×$Ñ$ T§W¡W¨d×.AÑ.AÔBØ&'�Ô#ØˆKØØ—‘—‘˜Q”ðØ'+§x¡x§}¡}£Ñ$�C˜˜fð ˜'’>Ø7�CÜ" 3›-Ð'Ø˜'’>Ù"à7˜Ü)¨#Ó.Ð.Ø"&�Kð:Ø—H‘H—M‘M # s¨FÔ3ð' ðX �=‰=Ð  T§_¡_¼×8LÑ8LÒ%LÜ&×4Ñ4ˆDŒOà�?‰?œh×2Ñ2Ò2ØŸ=™=×-Ñ-Ó/ˆDŒLØŸ:™: d§l¡l°D×4GÑ4GÓHˆD�LØ�_‰_¤× 6Ñ 6Ò6Ü Ÿ:™:Ÿ?™?¨4¯9©9°d·i±iÓ@ˆDŒLØŸ:™: d§l¡l°D×4GÑ4GÓHˆD�LàˆD�Løôc Ÿ™¤kÐ2ò Ùðûô *ò ÙÜò :Ø˜g’~Ø !™˜Ù&Ø28˜DÔ/Ù!Ü×(Ñ(¨¯©°&×9Ü%ò :Ü—L‘LÐ!5°s¸CÀÔHÜ×(Ñ(¨¯©°&×9ð:úð !ˆDŒLØŸ™×(Ñ(ˆDŒIØ"Ÿi™iŸm™m¨JÓ7ˆDŒOØ ŸI™IŸM™M¨'Ó2ˆDŒMØ"&§)¡)§-¡-°Ó"7ˆDÔà—9”9Ø5�Ü˜s“mÐ#s7   ÉO! ÊP  Ï!O=Ï<O=Ð 	RÐRÐ( RÑA RÒRc                ó   — | j                   S rG   )r?  r[   s    r.   rQ   zPngImageFile.tell�  s   € Ø�|‰|Ðr-   c                óÂ   — | j                   j                  d«      r| j                  dz   | _        | j                  | _        t
        j
                  j                  | «       y)z"internal: prepare to read PNG filerÑ   )r   N)r¿   rH  ÚdecoderconfigrK  Ú_PngImageFile__idatr   Úload_preparer[   s    r.   rs  zPngImageFile.load_prepare“  sH   € ð �9‰9�=‰=˜Ô%Ø!%×!3Ñ!3°dÑ!:ˆDÔà×)Ñ)ˆŒÜ×Ñ×(Ñ(¨Õ.r-   c                ó,  — | j                   dk(  r | j                  j                  d«       | j                  j                  «       \  }}}|dvr| j                  j	                  |||«       y|dk(  r)	 | j                  j                  |||«       |dz
  | _         n|| _         | j                   dk(  rŒ |dk  r| j                   }nt        || j                   «      }| j                   |z
  | _         | j                  j                  |«      S # t        $ r Y Œ„w xY w)zinternal: read more image datar   r   )ó   IDATs   DDATr=  r-   r=  )rr  rH   rP   rA  re   rm   rÜ   Úmin)rJ   Ú
read_bytesrW   rX   rY   s        r.   Ú	load_readzPngImageFile.load_readœ  sò   € ð �k‰k˜QÒð �G‰G�L‰L˜ŒOà#Ÿx™xŸ}™}›ÑˆC��fàÐ5Ñ5Ø—‘—‘˜c 3¨Ô/Øà�gŠ~ðØ—H‘H—M‘M # s¨FÔ3ð % q™j�•à$�”ð% �k‰k˜QÓð* ˜Š?ØŸ™‰Jä˜Z¨¯©Ó5ˆJà—k‘k JÑ.ˆŒà�w‰w�|‰|˜JÓ'Ð'øô  ò Ùðús   Á1D Ä	DÄDc                ó  — | j                   dk7  r%| j                  j                  | j                   «       	 | j                  j                  d«       	 | j                  j                  «       \  }}}|dk(  rnU|dk(  r1| j                  r%d| _        | j                  j                  |||«       n	 | j                  j                  |||«       Œ•| j                  j.                  | _        | j                  s"| j                  j3                  «        d| _        y| j4                  ré| j6                  t8        j:                  k(  rË| j=                  | j>                  | j@                  «      }| j>                  jB                  dk(  r.d| jD                  v r |jG                  d| jD                  d   «      }n|jI                  d«      }| j4                  jK                  || j@                  |«       | j4                  | _        | jL                  rd| _&        yyyy# t        j
                  t        f$ r Y �Œ[w xY w# t        $ r Y �Œkt        $ rZ |dk(  r|dz  }	 t        j                  | j                  |«       n*# t        $ r}t        j                   rY d}~Y �Œ¿|‚d}~ww xY wY �ŒÍt"        $ rm t$        j'                  d|||«       t        j                  | j                  |«      }|d	d
 j)                  «       r| j*                  j-                  ||df«       Y �ŒAw xY w)z%internal: finished reading image datar   Tr   r~   r_  r=  Nr<  r   r   r   rä   r   )'rr  rH   rP   rA  rq   rr   rV   rP  rK  re   rm   rh  rÜ   r   rz   ry   rT   rB  ri   rj   rC  r@  rc   r¯   rF  r^   rb  re  r0   r2   ri  r`  rf  rl  r¿   Úconvert_transparentÚconvertrg  ra  )rJ   rW   rX   rY   ru   r:   ÚupdatedÚmasks           r.   Úload_endzPngImageFile.load_end½  s|  € à�;‰;˜!ÒØ�G‰G�L‰L˜Ÿ™Ô%ØØ�G‰G�L‰L˜ŒOðØ#'§8¡8§=¡=£?Ñ ��S˜&ð �gŠ~ØØ˜’ D×$4Ò$4à&'�Ô#Ø—‘—‘˜c 3¨Ô/Øð?Ø—‘—‘˜c 3¨Ô/ð# ðF —X‘X×%Ñ%ˆŒ
Ø×ÒØ�H‰H�N‰NÔØˆD�Hà�}Š} §¡´%·-±-Ò!?ØŸ*™* T§W¡W¨d×.AÑ.AÓB�Ø—7‘7—<‘< 5Ò(¨^¸t¿y¹yÑ-HØ"×6Ñ6Ø §	¡	¨.Ñ 9ó‘Dð #Ÿ?™?¨6Ó2�DØ—‘×#Ñ# G¨T×-@Ñ-@À$ÔGØŸ-™-�”Ø—=’=Ø$(�D•Mð !ð "@ˆ}øôG —L‘L¤+Ð.ò Úðûô &ò ÚÜò 	 Ø˜'’>Ø˜a‘K�Fð Ü×(Ñ(¨¯©°&Õ9øÜò  Ü ×6Ò6Þà˜ûð	 úò :ô "ò ?Ü—‘Ð1°3¸¸VÔDÜ×(Ñ(¨¯©°&Ó9�Ø�q˜�8×#Ñ#Ô%Ø×'Ñ'×.Ñ.°°Q¸¨~Ô>úð	?úsa   ÁH
 Â-H* È
H'È&H'È*	LÈ6LÉ	 I*É)LÉ*	JÉ3JÊLÊ
JÊJÊLÊA1LÌLc                ó´   — d| j                   vr| j                  «        d| j                   vrd| j                   vry | j                  «       j                  «       S )Nr  zRaw profile type exif)r¿   rT  ÚgetexifÚ_get_merged_dictr[   s    r.   Ú_getexifzPngImageFile._getexifö  sG   € Ø˜Ÿ™Ñ"Ø�I‰IŒKØ˜Ÿ™Ñ"Ð'>ÀdÇiÁiÑ'OØØ�|‰|‹~×.Ñ.Ó0Ð0r-   c                ó\   •— d| j                   vr| j                  «        t        ‰| �  «       S )Nr  )r¿   rT  r­   r€  )rJ   r¹   s    €r.   r€  zPngImageFile.getexifý  s%   ø€ Ø˜Ÿ™Ñ"Ø�I‰IŒKä‰w‰Ó Ð r-   c                ó^   — d| j                   v r| j                  | j                   d   «      S i S )z™
        Returns a dictionary containing the XMP tags.
        Requires defusedxml to be installed.

        :returns: XMP tags in a dictionary.
        zXML:com.adobe.xmp)r¿   Ú_getxmpr[   s    r.   ÚgetxmpzPngImageFile.getxmp  s7   € ð # d§i¡iÑ/ð �L‰L˜Ÿ™Ð#6Ñ7Ó8ð	
ð ð	
r-   r§   )r&   r'   r(   ÚformatÚformat_descriptionrR  Úpropertyr‡   r}   rO   rO  rQ   rs  rx  r~  r‚  r€  r†  r2  r3  s   @r.   r9  r9  ¼  s_   ø„ Ø€FØ4ÐòA-ðF ñó ðòò"+ó\ ò|ò/ò(òB7)òr1ô!ö
r-   r9  )r   ó    )úL;1rŠ  )r   s    )r   s    )r   s    )r   s   )r   s    )r   s   )r   s   )r   s   )r   s   )r   s   )r   s   )r   r‹  r   r   r   r   ÚIr   r   r   r   r   r   r   r   c                óò   — dj                  |«      }| j                  t        t        |«      «      |z   «       | j                  |«       t	        |t	        |«      «      }| j                  t        |«      «       y)z'Write a PNG chunk (including CRC field)r-   N)ÚjoinÚwriteÚo32rô   rC   ©rH   rW   rA   rv   s       r.   Úputchunkr’  (  sU   € ð �8‰8�D‹>€Dà‡H�HŒS”�T“‹^˜cÑ!Ô"Ø‡H�HˆT„NÜ
�”v˜c“{Ó
#€CØ‡H�HŒS�‹XÕr-   c                  ó   — e Zd Zd„ Zd„ Zy)Ú_idatc                ó    — || _         || _        y rG   )rH   r‘   )rJ   rH   r‘   s      r.   rK   z_idat.__init__6  s   € ØˆŒØˆ�
r-   c                ó>   — | j                  | j                  d|«       y )Nru  )r‘   rH   ©rJ   rA   s     r.   r�  z_idat.write:  s   € Ø�
‰
�4—7‘7˜G TÕ*r-   N©r&   r'   r(   rK   r�  r,   r-   r.   r”  r”  3  s   „ òó+r-   r”  c                  ó   — e Zd Zd„ Zd„ Zy)Ú_fdatc                ó.   — || _         || _        || _        y rG   )rH   r‘   rÁ   )rJ   rH   r‘   rÁ   s       r.   rK   z_fdat.__init__A  s   € ØˆŒØˆŒ
Øˆ�r-   c                ó�   — | j                  | j                  dt        | j                  «      |«       | xj                  dz  c_        y )Nr=  r   )r‘   rH   r�  rÁ   r—  s     r.   r�  z_fdat.writeF  s/   € Ø�
‰
�4—7‘7˜G¤S¨¯©Ó%6¸Ô=Ø�Š˜ÑŽr-   Nr˜  r,   r-   r.   rš  rš  >  s   „ òó
r-   rš  c                ó   — | j                   j                  d| j                  j                  dd«      «      }| j                   j                  d| j                  j                  dd«      «      }| j                   j                  d| j                  j                  dt        j                  «      «      }| j                   j                  d| j                  j                  dt
        j                  «      «      }	|rt        j                  |«      }
nt        j                  | g|«      }
g }d}|
D �]‰  }t        j                  |«      D �]m  }|j                  |k(  r|j                  «       }n|j                  |«      }| j                   j                  «       }t        |t        t         f«      r||   |d<   t        |t        t         f«      r||   |d<   t        |	t        t         f«      r|	|   |d<   |dz  }|�r�|d   }|d   j                  d«      }|d   j                  d«      }|t        j"                  k(  rt%        |«      d	k  rt        j&                  }|t        j&                  k(  ry|d
   j                  «       }t(        j*                  j-                  d| j.                  d«      }|d   }|r|j1                  |«      }nd| j.                  z   }|j3                  ||«       n!|t        j"                  k(  r	|d   d
   }n|d
   }t5        j6                  |j                  d«      |j                  d«      «      }|j9                  d¬«      }|sL||j                  d«      k(  r8||j                  d«      k(  r$|d   dxx   |j                  d|«      z  cc<   �ŒNd }d|vr||d<   |j;                  |||dœ«       �Œp �ŒŒ t%        |«      dk(  r
|s|d   d
   S  ||dt=        t%        |«      «      t=        |«      «       |rS| j                  |k7  r| j                  |«      } t?        j@                  | tC        ||«      dd| j.                  z   d|fg«       d}tE        |«      D �]t  \  }}|d
   }|d   sd|j.                  z   }n|d   }|j1                  |«      }|j.                  }|d   }tG        tI        |d   «      «      }|j                  d|«      }|j                  d|	«      } ||dt=        |«      t=        |d   «      t=        |d   «      t=        |d   «      t=        |d   «      tK        |«      tK        d«      tM        |«      tM        |«      «       |dz  }|dk(  r7|s5t?        j@                  |tC        ||«      dd|j.                  z   d|fg«       �Œ3tO        |||«      }t?        j@                  ||dd|j.                  z   d|fg«       |jP                  }�Œw y )Nr"  r   r  r$  r&  r   éÿÿÿÿÚencoderinfor   r`  r   )r   r   r   r   rÙ   r¬   éþÿÿÿF)Ú
alpha_only)r`  rÙ   rŸ  s   acTLrŸ   r_  r!  ))rŸ  rH  r¿   r%   r)   r0   r1   Ú	itertoolsÚchainr
   ÚIteratorrl  rÂ   r{  r™   Úlistr�   r+   rô   r*   r   rj  rk  rm  Úcroprg  r   Úsubtract_moduloÚgetbboxrc   r�  r   Ú_saver”  Ú	enumerateÚintÚroundÚo16r   rš  rÁ   )r`  rH   r‘   rQ  rÚ   Úappend_imagesr"  r  r$  r&  r£  Ú	im_framesÚframe_countÚim_seqÚim_framerŸ  ÚpreviousÚprev_disposalÚ
prev_blendÚbase_imrc  rÙ   ÚdeltarÁ   rU  Ú
frame_datarm  Úframe_durationÚframe_disposalÚframe_blendÚfdat_chunkss                                  r.   Ú_write_multiple_framesr½  K  sR  € Ø�~‰~×!Ñ! *¨b¯g©g¯k©k¸*ÀaÓ.HÓI€HØ�>‰>×Ñ˜f b§g¡g§k¡k°&¸!Ó&<Ó=€DØ�~‰~×!Ñ! *¨b¯g©g¯k©k¸*Äh×FVÑFVÓ.WÓX€HØ�N‰N×Ñ˜w¨¯©¯©°G¼U¿_¹_Ó(MÓN€EáÜ—‘ Ó.‰ä—‘   mÓ4ˆà€IØ€KØó 4YˆÜ%×.Ñ.¨vÓ6ó 3	YˆHØ�}‰} Ò'Ø#Ÿ=™=›?‘à#×+Ñ+¨GÓ4�ØŸ.™.×-Ñ-Ó/ˆKÜ˜(¤T¬5 MÔ2Ø*2°;Ñ*?�˜JÑ'Ü˜(¤T¬5 MÔ2Ø*2°;Ñ*?�˜JÑ'Ü˜%¤$¬ Ô/Ø',¨[Ñ'9�˜GÑ$Ø˜1ÑˆKâØ$ R™=�Ø (¨Ñ 7× ;Ñ ;¸JÓ G�Ø% mÑ4×8Ñ8¸ÓA�
Ø ¤H×$8Ñ$8Ò8¼SÀ»^ÈaÒ=OÜ$,×$:Ñ$:�Mà ¤H×$:Ñ$:Ò:Ø& t™n×1Ñ1Ó3�GÜ#Ÿj™jŸo™o¨f°b·g±g¸|ÓL�GØ# FÑ+�DÙØ")§,¡,¨tÓ"4™à%¨¯©Ñ/˜Ø—M‘M '¨4Õ0Ø"¤h×&:Ñ&:Ò:Ø'¨™m¨DÑ1‘Gà& t™n�GÜ"×2Ñ2Ø×$Ñ$ VÓ,¨g¯o©o¸fÓ.Eó�ð —}‘}°�}Ó6�áØ%¨¯©¸Ó)DÒDØ" k§o¡o°gÓ&>Ò>à˜]Ñ+¨JÓ7¸;¿?¹?Ø" Hó<ñ Ó7ñ à�Ø Ñ,Ø*2�˜JÑ'Ø×Ñ H°dÈ;ÑWÖXòg3	Yð4Yôl ˆ9ƒ~˜Ò¡=Ø˜‰|˜DÑ!Ð!ñ 
Ø
ØÜŒC�	‹NÓÜˆD‹	ô	ñ Ø�7‰7�gÒØ—‘˜GÓ$ˆBÜ�‰˜œE " eÓ,°°vÀÇÁÑ7GÈÈGÐ/TÐ.UÔVà€GÜ& yÓ1ó **ÑˆˆzØ˜dÑ#ˆØ˜&Ò!Ø˜HŸM™MÑ)‰Dà˜fÑ%ˆDØ—}‘} TÓ*ˆHØ�}‰}ˆØ  Ñ/ˆÜœU ;¨zÑ#:Ó;Ó<ˆØ$Ÿ™¨°XÓ>ˆØ!—o‘o g¨uÓ5ˆáØØÜ�‹LÜ��Q‘‹LÜ��Q‘‹LÜ��Q‘‹LÜ��Q‘‹LÜ�ÓÜ�‹IÜˆ~ÓÜˆ{‹Oô	
ð 	�1‰ˆà�AŠ:™mä�O‰OØÜ�b˜%Ó Ø˜ (§-¡-Ñ/°°GÐ<Ð=öô    E¨7Ó3ˆKÜ�O‰OØØØ˜ (§-¡-Ñ/°°GÐ<Ð=ôð
 "×)Ñ)ŠGñU**r-   c                ó"   — t        | ||d¬«       y )NT)Úsave_all)r©  )r`  rH   Úfilenames      r.   Ú	_save_allrÁ  Í  s   € Ü	ˆ"ˆb�( TÖ*r-   Fc                óx  ‡$— |�r| j                   j                  d| j                  j                  d«      «      }t        «       }t        «       Š$| j                   j                  dg «      }t	        j
                  | g|«      D ]R  }t        j                  |«      D ]8  }	|j                  |	j                  «       ‰$j                  |	j                  «       Œ: ŒT dD ]  }
|
|v sŒ n |j                  «       }
t        ˆ$fd„t        d«      D «       «      }n| j                  }| j                  }
|
dk(  r•d| j                   v rt        d| j                   d   z  d	«      }nL| j                  r>t!        t        t#        | j                  j%                  «       d   «      d
z  d	«      d«      }nd	}|dk  r|dk  rd}n
|dk  rd}nd}|
› d|› �}
| j                   j                  dd«      | j                   j                  dd«      | j                   j                  dd«      | j                   j                  dd«      f| _        	 t(        |
   \  }}
|j/                  t0        «        ||dt3        |d   «      t3        |d   «      |
ddd«       g d¢}| j                   j                  d| j                  j                  d«      «      }|r8d}|dz   t5        j6                  |«      z   } ||d|«       |j9                  d«       | j                   j                  d «      }|rrg d!¢}|j:                  D ]_  }|d d \  }}||v r|j9                  |«        ||||«       Œ+||v r ||||«       Œ:|dd j=                  «       sŒN|dd
 }|rŒV ||||«       Œa | j                  dk(  rOd
z  }| j>                  jA                  d"«      d | }t#        |«      |k  r|dz  }t#        |«      |k  rŒ ||d#|«       | j                   j                  d$| j                  j                  d$d «      «      }|s|dk(  rð| j                  dk(  rM}tC        |tD        «      r ||d%|d | «       �nt!        dt        d&|«      «      }d'|z  dz   } ||d%|d | «       në| j                  d(v r*t!        dt        d)|«      «      } ||d%tG        |«      «       n³| j                  d"k(  r2|\  }} }! ||d%tG        |«      tG        | «      z   tG        |!«      z   «       nrd$| j                   v rdd*}t-        |«      ‚| j                  dk(  rH| j>                  jI                  «       d+k(  r+| j>                  jA                  d+d,«      }} ||d%|d | «       | j                   j                  d-«      }"|"rB ||d.t3        tK        |"d   d/z  d0z   «      «      t3        tK        |"d   d/z  d0z   «      «      d1«       |r=d2d3g}|j:                  D ]*  }|d d \  }}||v sŒ|j9                  |«        ||||«       Œ, | j                   j                  d4«      }#|#rKtC        |#tL        jN                  «      r|#jQ                  d5«      }#|#jS                  d6«      r|#d7d  }# ||d8|#«       |rtU        | |||«      } | r3tW        jX                  | t[        ||«      d9d:| j                  z   d|fg«       |r?|j:                  D ]0  }|d d \  }}|dd j=                  «       sŒ|dd
 }|sŒ' ||||«       Œ2  ||d;d«       t]        |d<«      r|j_                  «        y y # t*        $ r}d|
› d�}t-        |«      |‚d }~ww xY w)=NrÚ   r®  )r   r   r   c              3  óH   •‡K  — | ]  Št        ˆfd „‰D «       «      –— Œ y­w)c              3  ó(   •K  — | ]	  }|‰   –— Œ y ­wrG   r,   )rï   Ú
frame_sizerÊ   s     €r.   rñ   z"_save.<locals>.<genexpr>.<genexpr>ä  s   øè ø€ Ò?¨:˜ A�Ñ?ùs   ƒN)Úmax)rï   rÊ   Úsizess    @€r.   rñ   z_save.<locals>.<genexpr>ä  s   ùè ø€ ÒRÀA”SÓ?¸Ô?×?ÑRùs   „"r   r   Úbitsr   é   r!   r    r   ú;ÚoptimizeFÚcompress_levelrž  Úcompress_typeÚ
dictionaryr-   zcannot write mode z as PNGs   IHDRr   r˜   )s   cHRMs   gAMAs   sBITó   sRGBs   tIMErÈ   s   ICC Profiler£   s   iCCPrÏ  Úpnginfo)s   sPLTr—   r¤   r¢   r   s   PLTErä   s   tRNSéÿ   ó   ÿ)r   r   rŒ  r   iÿÿ  z%cannot use transparency for this moder   ÚArü   s   pHYsrû   g      à?ó   s   bKGDs   hISTr  r   r  r"   s   eXIfrŸ   r¬   r~   Úflush)0rŸ  rH  r¿   Úsetr¢  r£  r
   r¤  r’   rl  rm  rN   r�   r[  rv  rJ  rÆ  rô   ÚgetdataÚencoderconfigÚ	_OUTMODESÚKeyErrorry   r�  r5  r�  r4   rœ   Úremover�   rC  r`  Ú
getpaletter™   rš   r­  Úgetpalettemoder«  r   ÚExifÚtobytesÚ
startswithr½  r   r©  r”  ÚhasattrrÕ  )%r`  rH   rÀ  r‘   r¿  rÚ   Úmodesr®  r±  r²  rl  rm  ÚcolorsrÈ  rQ  ru   r=   r�   ÚiccÚnamerA   r¿   Úchunks_multiple_allowedÚ
info_chunkrW   r�   Úpalette_byte_numberÚpalette_bytesrä   Úalpha_bytesÚalphaÚredÚgreenÚbluerü   r  rÇ  s%                                       @r.   r©  r©  Ñ  s
  ø€ ò ØŸ™×*Ñ*Ø˜RŸW™WŸ[™[¨Ó9ó
ˆô “ˆÜ“ˆØŸ™×*Ñ*¨?¸BÓ?ˆÜ—o‘o r d¨MÓ:ò 	)ˆFÜ)×2Ñ2°6Ó:ò )�Ø—	‘	˜(Ÿ-™-Ô(Ø—	‘	˜(Ÿ-™-Õ(ñ)ð	)ð )ò 	ˆDØ�uŠ}Ùð	ð —9‘9“;ˆDÜÓRÌÈqËÔRÓR‰à�w‰wˆØ�w‰wˆàˆs‚{ð �R—^‘^Ñ#ä˜˜bŸn™n¨VÑ4Ñ4°cÓ:‰Fð �zŠzÜœS¤ R§Z¡Z×%7Ñ%7Ó%9¸!Ñ%<Ó!=ÀÑ!BÀCÓHÈ!ÓL‘à�à�RŠ<Ø˜Š{Ø‘Ø˜1’Ø‘à�Ø�V˜1˜T˜FÐ#ˆDð 	�‰×Ñ˜: uÓ-Ø
�‰×ÑÐ+¨RÓ0Ø
�‰×Ñ˜?¨BÓ/Ø
�‰×Ñ˜<¨Ó-ð	€BÔð"Ü! $™‰ˆ�ð ‡H�HŒVÔá	Ø
ØÜˆD�‰G‹ÜˆD�‰G‹ØØØØô	ò ;€Fà
�.‰.×
Ñ
˜]¨B¯G©G¯K©K¸Ó,FÓ
G€CÙ
ð ˆØ�g‰~¤§¡¨cÓ 2Ñ2ˆÙˆb�'˜4Ô ð 	�‰�gÔà�>‰>×Ñ˜iÓ(€DÙÚ"FÐØŸ+™+ò 	)ˆJØ" 2 A˜‰IˆC�Ø�f‰}Ø—‘˜cÔ"Ù�b˜#˜tÕ$ØÐ/Ñ/Ù�b˜#˜tÕ$Ø�Q�q�×!Ñ!Õ#à'¨¨!˜_�
Ú!Ù˜"˜c 4Õ(ð	)ð 
‡w�w�#‚~Ø$ q™jÐØŸ™×(Ñ(¨Ó/Ð0DÐ1DÐEˆÜ�-Ó Ð#6Ò6Ø˜UÑ"ˆMô �-Ó Ð#6Ó6áˆb�'˜=Ô)à—>‘>×%Ñ% n°b·g±g·k±kÀ.ÐRVÓ6WÓX€Lá�| qÒ(Ø�7‰7�cŠ>à ˆKÜ˜,¬Ô.Ù�b˜' <°°Ð#=Ö>ä" 1¤c¨#¨|Ó&<Ó=�Ø ,Ñ.°Ñ6�Ù�b˜' 5¨¨+Ð#6Õ7Ø�W‰WÐ/Ñ/Ü˜q¤# e¨\Ó":Ó;ˆLÙ�"�gœs <Ó0Õ1Ø�W‰W˜ÒØ+ÑˆC�˜Ù�"�gœs 3›x¬#¨e«*Ñ4´s¸4³yÑ@ÕAà §¡Ñ/ð >�Ü˜c“lÐ"à�7‰7�cŠ>˜bŸe™e×2Ñ2Ó4¸Ò>Ø—E‘E×$Ñ$ V¨SÓ1ˆEØ ˆKÙ�"�g˜u \ kÐ2Ô3à
�.‰.×
Ñ
˜UÓ
#€CÙ
ÙØØÜ”�C˜‘F˜V‘O cÑ)Ó*Ó+Ü”�C˜‘F˜V‘O cÑ)Ó*Ó+Øô	
ñ Ø˜7Ð#ˆØŸ+™+ò 	%ˆJØ" 2 A˜‰IˆC�Ø�fŠ}Ø—‘˜cÔ"Ù�b˜#˜tÕ$ð		%ð �>‰>×Ñ˜fÓ%€DÙÜ�dœEŸJ™JÔ'Ø—<‘< “?ˆDØ�?‰?˜?Ô+Ø˜˜�8ˆDÙˆb�'˜4Ô áÜ#Ø��E˜7 M°=ó
ˆñ 
Ü�‰˜œE " eÓ,°°vÀÇÁÑ7GÈÈGÐ/TÐ.UÔVáØŸ+™+ò 	)ˆJØ" 2 A˜‰IˆC�Ø�1�Qˆx×ÑÕ!à'¨¨!˜_�
ÚÙ˜"˜c 4Õ(ð	)ñ 
ˆ"ˆg�sÔäˆr�7ÔØ
�‰�
ð øôO ò "Ø" 4 &¨Ð0ˆÜ�c‹l Ð!ûð"ús   È7\ Ü	\9Ü"\4Ü4\9c                ó€   —  G d„ d«      }d„ } |«       }	 || _         t        | |d|«       | ` |j                  S # | ` w xY w)z4Return a list of PNG chunks representing this image.c                  ó   — e Zd Zg Zd„ Zd„ Zy)úgetchunks.<locals>.collectorc                 ó   — y rG   r,   r—  s     r.   r�  z"getchunks.<locals>.collector.writeŸ  s   € Ør-   c                ó:   — | j                   j                  |«       y rG   )rA   rc   )rJ   r‘   s     r.   rc   z#getchunks.<locals>.collector.append¢  s   € Ø�I‰I×Ñ˜UÕ#r-   N)r&   r'   r(   rA   r�  rc   r,   r-   r.   Ú	collectorrñ  œ  s   „ Øˆò	ó	$r-   rô  c                óŠ   — dj                  |«      }t        t        |t        |«      «      «      }| j                  |||f«       y )Nr-   )rŽ  r�  rC   rc   r‘  s       r.   rc   zgetchunks.<locals>.append¥  s7   € Ø�x‰x˜‹~ˆÜ”&˜œv c›{Ó+Ó,ˆØ
�	‰	�3˜˜cÐ"Õ#r-   N)rŸ  r©  rA   )r`  Úparamsrô  rc   rH   s        r.   Ú	getchunksr÷  ™  sK   € ÷$ñ $ò$ñ
 
‹€BðØˆŒÜˆb�"�d˜FÔ#àˆNà�7‰7€Nøð ‰Nús   –9 ¹=z.pngz.apngz	image/png)r   )?Ú
__future__r   r¢  ÚloggingÚrerq   r  r4   Úenumr   r¨   r   r   r   r	   r
   Ú_binaryr   rç   r   rR   r   r   r­  r   r�  Ú	getLoggerr&   ri   Úcompileræ   rS   r5  rÓ   rå   Ú	SAFEBLOCKr7   r»   r%   r0   r>   rC   rE   r‚   r€   r‹   rª   r7  r9  rÙ  r’  r”  rš  r½  rÁ  r©  r÷  Úregister_openr‡  Úregister_saveÚregister_save_allÚregister_extensionsÚregister_mimer,   r-   r.   ú<module>r     s.  ðõB #ã Û Û 	Û Û Û Ý ç GÕ GÝ !Ý !Ý Ý !Ý !à	ˆ×	Ñ	˜8Ó	$€à	ˆ�‰�LÓ	!×	'Ñ	'€ð 
€ð ØØØØàØàØØØàØàØ!ñ+
€ð2 �"—*‘*Ð0Ó1€à×$Ñ$€ðð
 �~Ñ%€ðôˆwô ô*ˆGô òó/÷Vñ Vôrˆ3ô ÷,M3ñ M3ôhS4�ô S4òt
 ôR
�9×&Ñ&ô R
ðt
 
ØØØØ	Ø
Ø	Ø"Ø#ØØØØ	ØØ!ñ!€	ò(÷+ñ +÷
ñ 
ò*òD+ð #+°Uó AòPð> €× Ñ �L×'Ñ'¨°wÔ ?Ø €× Ñ �L×'Ñ'¨Ô /Ø €× Ñ ˜×+Ñ+¨YÔ 7à €× Ñ ˜,×-Ñ-°¸Ð/@Ô Aà €× Ñ �L×'Ñ'¨Õ 5r-   