
    (ph                       S SK Jr  S SKrS SKrS SKrS SKrS SKrS SKrS SKJ	r	  S SK
JrJrJrJr  SSKJrJrJrJrJr  SSKJr  SSKJr  SS	KJr  SS
KJr  SSKJr  \(       a  SSKJr  \R@                  " \!5      r"\RF                  " S5      RH                  r%Sr&SSSSSSSSSSSSSSSS.r'\RF                  " S5      r(\RR                  r* S \*-  r+  " S! S"\	5      r, " S# S$\	5      r-S% r.SMS& jr/ " S' S(5      r0 " S) S*\15      r2 " S+ S,5      r3 " S- S.\05      r4SNS/ jr5 " S0 S1\R$                  5      r6S2S3S4S5S6S7S8S8S8S9S:S;S<S=S>S?.r7S@ r8 " SA SB5      r9 " SC SD5      r:SE r;SOSF jr<\8SG4SH jr=SI r>\R~                  " \6R                  \6\55        \R                  " \6R                  \=5        \R                  " \6R                  \<5        \R                  " \6R                  SJSK/5        \R                  " \6R                  SL5        g)P    )annotationsN)IntEnum)IOTYPE_CHECKINGAnyNoReturn   )Image
ImageChops	ImageFileImagePaletteImageSequence)i16be)i32be)o8)o16be)o32be)_imagings   \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                  $    \ rS rSrSr Sr SrSrg)Disposalg   r   r	   r"    N)__name__
__module____qualname____firstlineno__OP_NONEOP_BACKGROUNDOP_PREVIOUS__static_attributes__r,       E/var/www/html/venv/lib/python3.13/site-packages/PIL/PngImagePlugin.pyr*   r*   g   s$    G M
 Kr5   r*   c                      \ rS rSrSr SrSrg)Blend|   r   r	   r,   N)r-   r.   r/   r0   	OP_SOURCEOP_OVERr4   r,   r5   r6   r8   r8   |   s    I
 Gr5   r8   c                    [         R                  " 5       nUR                  U [        5      nUR                  (       a  Sn[        U5      eU$ )NzDecompressed Data Too Large)zlibdecompressobj
decompressMAX_TEXT_CHUNKunconsumed_tail
ValueError)sdobj	plaintextmsgs       r6   _safe_zlib_decompressrG      s>    D>2I+or5   c                4    [         R                  " X5      S-  $ )Nl    )r=   crc32)dataseeds     r6   _crc32rL      s    ::d!J..r5   c                  x    \ rS rSrSS jrSS jrSS jrSS jrSS jrSS jr	S r
SS	 jrSS
 jrSSS jjrSrg)ChunkStream   c                    Xl         / U l        g Nfpqueue)selfrS   s     r6   __init__ChunkStream.__init__   s    $&:<
r5   c                   SnU R                   c   eU R                  (       a9  U R                  R                  5       u  pnU R                   R                  U5        OEU R                   R	                  S5      nUSS nU R                   R                  5       n[        U5      n[        U5      (       d/  [        R                  (       d  S[        U5       S3n[        U5      eXU4$ )z.Fetch a new chunk. Returns header information.Nr$   r#   zbroken PNG file (chunk ))rS   rT   popseekreadtelli32is_cidr   LOAD_TRUNCATED_IMAGESreprSyntaxError)rU   cidposlengthrC   rF   s         r6   r\   ChunkStream.read   s    ww"""::#zz~~/CfGGLLQAAB%C'',,.CVFc{{22/S	{!<!#&&r5   c                    U $ rQ   r,   rU   s    r6   	__enter__ChunkStream.__enter__   s    r5   c                $    U R                  5         g rQ   )close)rU   argss     r6   __exit__ChunkStream.__exit__   s    

r5   c                     S =U l         U l        g rQ   )rT   rS   rh   s    r6   rl   ChunkStream.close   s    ##
TWr5   c                \    U R                   c   eU R                   R                  XU45        g rQ   )rT   appendrU   rc   rd   re   s       r6   pushChunkStream.push   s)    zz%%%

3V,-r5   c                x    [         R                  SXU5        [        U SUR                  S5       35      " X#5      $ )z"Call the appropriate chunk handlerzSTREAM %r %s %schunk_ascii)loggerdebuggetattrdecodert   s       r6   callChunkStream.call   s8     	&&9tvcjj&9%:;<SIIr5   c                   [         R                  (       a"  US   S-	  S-  (       a  U R                  X5        gU R                  c   e [	        U[	        U5      5      n[        U R                  R                  S5      5      nX4:w  a  S[        U5       S3n[        U5      eg! [        R                   a   nS[        U5       S3n[        U5      UeSnAff = f)	zRead and verify checksumr      r	   Nr#   z(broken PNG file (bad header checksum in rY   z(broken PNG file (incomplete checksum in )r   r`   crc_skiprS   rL   r^   r\   ra   rb   structerror)rU   rc   rJ   crc1crc2rF   es          r6   crcChunkStream.crc   s     **A!aMM#$ww"""	*$s,Dtww||A'D|@c1M!#&&  || 	*<T#YKqICc")	*s   AB! !C5CCc                X    U R                   c   eU R                   R                  S5        g)zRead checksumNr#   )rS   r\   )rU   rc   rJ   s      r6   r   ChunkStream.crc_skip   s#     ww"""Qr5   c                   / n  U R                  5       u  p4nX1:X  a   U$ U R	                  U[
        R                  " U R                  U5      5        UR                  U5        M`  ! [        R                   a  nSn[        U5      UeS nAff = f)Nztruncated PNG file)	r\   r   r   OSErrorr   r   
_safe_readrS   rs   )rU   endchunkcidsrc   rd   re   r   rF   s           r6   verifyChunkStream.verify   s     *#'99; &
   HHS)..tww?@KK  << **cl)*s   A$ $B8BBrR   N)rS   	IO[bytes]returnNone)r   ztuple[bytes, int, int])r   rN   )rm   objectr   r   r   r   )rc   bytesrd   intre   r   r   r   )rc   r   rJ   r   r   r   )   IEND)r   r   r   zlist[bytes])r-   r.   r/   r0   rV   r\   ri   rn   rl   ru   r~   r   r   r   r4   r,   r5   r6   rN   rN      s:    = *$.J** r5   rN   c                  B    \ rS rSr% SrS\S'   S\S'   \S	S j5       rSrg)
iTXt   ze
Subclass of string to allow iTXt chunks to look like strings while
keeping their extra information

zstr | bytes | NonelangtkeyNc                H    [         R                  X5      nX$l        X4l        U$ )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__r   r   )clstextr   r   rU   s        r6   r   iTXt.__new__  s!     {{3%		r5   )r   r   )NN)	r-   r.   r/   r0   __doc____annotations__staticmethodr   r4   r,   r5   r6   r   r      s'     
 r5   r   c                  x    \ rS rSrSrS	S jrS
SS jjr   S           SS jjr S
       SS jjrSr	g)PngInfoi  z4
PNG chunk container (for use with save(pnginfo=))

c                    / U l         g rQ   chunksrh   s    r6   rV   PngInfo.__init__  s	    79r5   c                >    U R                   R                  XU45        g)zAppends 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

N)r   rs   )rU   rc   rJ   
after_idats       r6   addPngInfo.add  s     	Cz23r5   c                   [        U[        5      (       d  UR                  SS5      n[        U[        5      (       d  UR                  SS5      n[        U[        5      (       d  UR                  SS5      n[        U[        5      (       d  UR                  SS5      nU(       a9  U R                  SUS-   U-   S-   U-   S-   [        R
                  " U5      -   5        gU R                  SUS-   U-   S-   U-   S-   U-   5        g)	zAppends 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)
isinstancer   encoder   r=   compress)rU   keyvaluer   r   zips         r6   add_itxtPngInfo.add_itxt&  s    $ #u%%**Y1C%''LL(3E$&&;;w1D$&&;;w1DHHk!D(5047%?$--PUBVV
 HHWcIo4u<tCeKeSTr5   c                4   [        U[        5      (       aH  U R                  UUUR                  b  UR                  OSUR                  b  UR                  US9$ SUS9$ [        U[
        5      (       d   UR                  SS5      n[        U[
        5      (       d  UR                  SS5      nU(       a-  U R                  SUS-   [        R                  " U5      -   5        gU R                  SUS	-   U-   5        g! [         a    U R                  XUS9s $ f = f)
zAppends 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

Nr5   )r   r   r      zTXt        tEXtr   )r   r   r   r   r   r   r   UnicodeErrorr   r=   r   )rU   r   r   r   s       r6   add_textPngInfo.add_textI  s
    eT""==#jj4

##jj4

 !   ;> !   %'':Y9 #u%%**Y1CHHWcGmdmmE.BBCHHWcEkE12   :}}SS}99:s   4C: :DDr   Nr   F)rc   r   rJ   r   r   boolr   r   ) r   F)r   str | bytesr   r   r   r   r   r   r   r   r   r   )r   r   r   zstr | bytes | iTXtr   r   r   r   )
r-   r.   r/   r0   r   rV   r   r   r   r4   r,   r5   r6   r   r     s    
:
4  !U!U !U 	!U
 !U !U 
!UH HM!3!3'9!3@D!3	!3 !3r5   r   c                     ^  \ rS rSrU 4S jrSS jrSS jrSS jrSS jrSS jr	SS jr
SS	 jrSS
 jrSS jrSS jrSS jrSS jrSS jrSS jrSS jrSS jrSS jrSS jrSS jrSS jrSrU =r$ )	PngStreamiq  c                   > [         TU ]  U5        0 U l        0 U l        SU l        S U l        S U l        S U l        S U l        S U l	        S U l
        S U l        SU l        g )Nr   r   r   )superrV   im_infoim_textim_sizeim_modeim_tile
im_paletteim_custom_mimetypeim_n_frames_seq_numrewind_statetext_memory)rU   rS   	__class__s     r6   rV   PngStream.__init__r  sc     "& r5   c                    U =R                   U-  sl         U R                   [        :  a  SU R                    S3n[        U5      eg )Nz%Too much memory used in text chunks: z>MAX_TEXT_MEMORY)r   MAX_TEXT_MEMORYrB   )rU   chunklenrF   s      r6   check_text_memoryPngStream.check_text_memory  sN    H$o-7##$$46  S/! .r5   c                r    U R                   R                  5       U R                  U R                  S.U l        g )N)infotileseq_num)r   copyr   r   r   rh   s    r6   save_rewindPngStream.save_rewind  s*    LL%%'LL}}
r5   c                    U R                   S   R                  5       U l        U R                   S   U l        U R                   S   U l        g )Nr   r   r   )r   r   r   r   r   rh   s    r6   rewindPngStream.rewind  sA    ((0557((0)))4r5   c                   [         R                  " U R                  U5      nUR                  S5      n[        R                  SUS U 5        X4S-      n[        R                  SU5        US:w  a  SU S3n[        U5      e [        X4S-   S  5      nXpR                  S	'   U$ ! [         a    [         R                  (       a  S n N3e [        R                   a    S n NKf = f)
Nr   ziCCP profile name %rr	   zCompression method %sr   Unknown compression method z in iCCP chunkr"   icc_profile)r   r   rS   findrz   r{   rb   rG   rB   r`   r=   r   r   )rU   rd   re   rC   icomp_methodrF   r   s           r6   
chunk_iCCPPngStream.chunk_iCCP  s      &1 FF5M+QrU3Ah,k:!/}NKCc""	/a%'
;K '2]#  	.."zz 	K	s   B! !!CCCc                   [         R                  " U R                  U5      nUS:  a$  [         R                  (       a  U$ Sn[	        U5      e[        US5      [        US5      4U l         [        US   US   4   u  U l        U l	        US   (       a  SU R                  S	'   US
   (       a  Sn[        U5      eU$ ! [         a     N>f = f)N   zTruncated IHDR chunkr   r#   r$   	      r	   	interlace   zunknown filter category)r   r   rS   r`   rB   r^   r   _MODESr   
im_rawmode	Exceptionr   rb   rU   rd   re   rC   rF   s        r6   
chunk_IHDRPngStream.chunk_IHDR  s      &1B;..(CS/!1ay#a)+	,2AaD!A$<,@)DL$/ R5()DLL%R5+Cc""  		s   *B: :
CCc                   SU R                   ;   a  SU R                   S   XR                  4/nO9U R                  b  SU R                   S'   SSU R                  -   XR                  4/nX0l        X l        Sn[        U5      e)Nbboxr   Tdefault_imager   zimage data found)r   r   r   r   r   im_idatEOFError)rU   rd   re   r   rF   s        r6   
chunk_IDATPngStream.chunk_IDAT  sy    T\\!DLL0#GHD+04_-FT\\13HID smr5   c                    Sn[        U5      e)Nzend of PNG image)r  )rU   rd   re   rF   s       r6   
chunk_IENDPngStream.chunk_IEND  s     smr5   c                z    [         R                  " U R                  U5      nU R                  S:X  a	  SU4U l        U$ )Nr   r   )r   r   rS   r   r   rU   rd   re   rC   s       r6   
chunk_PLTEPngStream.chunk_PLTE  s4      &1<<3#QhDOr5   c                   [         R                  " U R                  U5      nU R                  S:X  aR  [        R                  U5      (       a'  UR                  S5      nUS:  a  X@R                  S'   U$ X0R                  S'    U$ U R                  S;   a  [        U5      U R                  S'   U$ U R                  S:X  a/  [        U5      [        US5      [        US5      4U R                  S'   U$ )	Nr   r   r   transparency)r   r   r   r   r"   r#   )	r   r   rS   r   _simple_palettematchr   r   i16)rU   rd   re   rC   r   s        r6   
chunk_tRNSPngStream.chunk_tRNS  s      &1<<3$$Q'' FF5M634LL0  01^,
 	 \\//+.q6DLL(  \\U"+.q63q!9c!Qi+GDLL(r5   c                ~    [         R                  " U R                  U5      n[        U5      S-  U R                  S'   U$ )N     j@gamma)r   r   rS   r^   r   r  s       r6   
chunk_gAMAPngStream.chunk_gAMA  s4      &1 #A 1Wr5   c                    [         R                  " U R                  U5      n[        R                  " S[        U5      S-  -  U5      n[        S U 5       5      U R                  S'   U$ )Nz>%dIr#   c              3  *   #    U  H	  oS -  v   M     g7f)r  Nr,   ).0elts     r6   	<genexpr>'PngStream.chunk_cHRM.<locals>.<genexpr>  s     ,Px8^xs   chromaticity)r   r   rS   r   unpacklentupler   )rU   rd   re   rC   raw_valss        r6   
chunk_cHRMPngStream.chunk_cHRM  sU       &1==3q6Q;!7;',,Px,P'P^$r5   c                    [         R                  " U R                  U5      nUS:  a$  [         R                  (       a  U$ Sn[	        U5      eUS   U R
                  S'   U$ )Nr	   zTruncated sRGB chunkr   srgb)r   r   rS   r`   rB   r   r   s        r6   
chunk_sRGBPngStream.chunk_sRGB  sU       &1A:..(CS/! tVr5   c                @   [         R                  " U R                  U5      nUS:  a$  [         R                  (       a  U$ Sn[	        U5      e[        US5      [        US5      peUS   nUS:X  a  US-  US-  4nXR                  S'   U$ US:X  a  XV4U R                  S	'   U$ )
Nr   zTruncated pHYs chunkr   r#   r$   r	   
F%u?dpiaspect)r   r   rS   r`   rB   r^   r   )	rU   rd   re   rC   rF   pxpyunitr.  s	            r6   
chunk_pHYsPngStream.chunk_pHYs  s      &1A:..(CS/!QC1IBt19v+rF{*C"%LL  QY%'VDLL"r5   c                n   [         R                  " U R                  U5      n UR                  SS5      u  pEU(       ac  UR                  SS5      nUR                  SS5      nUS:X  a  UOUU R                  U'   X`R                  U'   U R                  [        U5      5        U$ ! [         a    UnSn N|f = f)Nr   r	   r5   r   r   replaceexif)
r   r   rS   splitrB   r}   r   r   r   r#  )rU   rd   re   rC   kvv_strs          r6   
chunk_tEXtPngStream.chunk_tEXt#  s      &1	775!$DA
 H-AHHY	2E#$;aEDLLO#LLO""3u:.  	AA	s   B# #B43B4c                H   [         R                  " U R                  U5      n UR                  SS5      u  pEU(       a  US   nOSnUS:w  a  SU S3n[        U5      e [        USS  5      nU(       a\  UR                  SS5      nUR                  SS	5      nU=U R                  U'   U R                  U'   U R                  [        U5      5        U$ ! [         a    UnSn Nf = f! [         a    [         R                  (       a  Sn Ne [        R                   a    Sn Nf = f)
Nr   r	   r5   r   r   z in zTXt chunkr   r   r6  )r   r   rS   r8  rB   rb   rG   r`   r=   r   r}   r   r   r   r#  )rU   rd   re   rC   r9  r:  r   rF   s           r6   
chunk_zTXtPngStream.chunk_zTXt6  s     &1	775!$DA A$KK!/}NKCc""	%ae,A H-AI.A011DLLOdll1o""3q6*7  	AA	  	..zz 	A	s)   C C% C"!C"%!D!D! D!c                <   [         R                  " U R                  U5      =p4 UR                  SS5      u  pS[        U5      S:  a  U$ US   US   USS  p7n UR                  SS5      u  pn
US:w  a  US:X  a   [        U
5      n
OU$ US:X  a  XR                  S'    UR                  SS5      nUR                  S	S5      nU	R                  S	S5      n	U
R                  S	S5      n
[        XU	5      =U R                  U'   U R                  U'   U R                  [        U
5      5        U$ ! [         a    Us $ f = f! [         a    Us $ f = f! [         a    [         R                  (       a  Us $ e [        R                   a    Us $ f = f! [         a    Us $ f = f)
Nr   r	   r"   r   s   XML:com.adobe.xmpxmpr   r   r   )r   r   rS   r8  rB   r#  rG   r`   r=   r   r   r}   r   r   r   r   )rU   rd   re   rrC   r9  cfcmr   tkr:  s              r6   
chunk_iTXtPngStream.chunk_iTXtX  s   $$TWWf55	775!$DA q6A:HaD!A$!"	''%+KDa 7Qw-a0A $$"#LL	H-A;;w1D7H-B(+A -1",==Q$,,q/s1v&G  	H	  	H	 "  66 zz H  	H	sN   D) D; :E AF )D87D8;E
	E
!F	0F	F	FFc                l    [         R                  " U R                  U5      nSU-   U R                  S'   U$ )N   Exif  r7  )r   r   rS   r   r  s       r6   
chunk_eXIfPngStream.chunk_eXIf  s0      &1.2Vr5   c                   [         R                  " U R                  U5      nUS:  a$  [         R                  (       a  U$ Sn[	        U5      eU R
                  b  S U l        [        R                  " S5        U$ [        U5      nUS:X  d  US:  a  [        R                  " S5        U$ XPl        [        US5      U R                  S'   SU l
        U$ )	Nr$   z"APNG contains truncated acTL chunkz4Invalid APNG, will use default PNG image if possibler   l        r#   loopz
image/apng)r   r   rS   r`   rB   r   warningswarnr^   r   r   )rU   rd   re   rC   rF   n_framess         r6   
chunk_acTLPngStream.chunk_acTL  s      &1A:..6CS/!'#DMMPQHq6q=Hz1MMPQH#"1ayV".r5   c                   [         R                  " U R                  U5      nUS:  a$  [         R                  (       a  U$ Sn[	        U5      e[        U5      nU R                  c  US:w  d   U R                  b   U R                  US-
  :w  a  Sn[        U5      eXPl        [        US5      [        US5      pv[        US5      [        US	5      pU R                  u  pX-   U
:  d  X-   U:  a  S
n[        U5      eXX-   X-   4U R                  S'   [        US5      [        US5      pUS:X  a  Sn[        U5      [        U5      -  S-  U R                  S'   US   U R                  S'   US   U R                  S'   U$ )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   r   rS   r`   rB   r^   r   rb   r   r   r  float)rU   rd   re   rC   rF   seqwidthheightr0  r1  im_wim_h	delay_num	delay_dens                 r6   
chunk_fcTLPngStream.chunk_fcTL  sZ     &1B;..6CS/!!fMM!cQhMM%$--37*B7Cc""Aq	3q!9vQSBZB\\
:d 20Cc"" "
BK@V"1bz3q":9>I#(#3eI6F#F#MZ #$R5Z  !"Wr5   c                l   US:  aE  [         R                  (       a#  [         R                  " U R                  U5      nU$ Sn[	        U5      e[         R                  " U R                  S5      n[        U5      nU R                  US-
  :w  a  Sn[        U5      eXPl        U R                  US-   US-
  5      $ )Nr#   z"APNG contains truncated fDAT chunkr	   rV  )	r   r`   r   rS   rB   r^   r   rb   r  )rU   rd   re   rC   rF   ra  s         r6   
chunk_fdATPngStream.chunk_fdAT  s    A:..((&96CS/!  !,!f==C!G#7Cc""sQw
33r5   )r   r   r  r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   )rd   r   re   r   r   r   )rd   r   re   r   r   r   )r-   r.   r/   r0   rV   r   r   r   r   r   r  r	  r  r  r  r&  r*  r3  r<  r?  rG  rK  rR  rh  rk  r4   __classcell__r   s   @r6   r   r   q  ss    ""
5
6(( "& D(T(:4 4r5   r   c                    U S S [         :H  $ )Nr$   )_MAGIC)prefixs    r6   _acceptrr    s    "1:r5   c                     ^  \ rS rSrSrSrSS jr\S 5       rSS jr	SS jr
SSS jjrSS	 jrSS
 jrSS jrSS jrSS jrSU 4S jjrSrU =r$ )PngImageFilei  PNGzPortable network graphicsc                v   [        U R                  R                  S5      5      (       d  Sn[        U5      eU R                  U l        SU l        / U l        [        U R                  5      U l         U R                  R                  5       u  p#n U R                  R                  X#U5      nU R                  R%                  X%5        MW  ! [         a     O{[         ao    [        R                  SX#U5        [        R                  " U R                  U5      nUSS R!                  5       (       a  U R                  R#                  X%45         Nf = fU R                  R&                  U l        U R                  R*                  U l        U R                  R.                  U l        S U l        U R                  R4                  U l        U R                  R8                  U l        U R                  R<                  =(       d    SU l        U R0                  RA                  SS5      U l!        U R                  RD                  (       a3  U R                  RD                  u  pg[F        RH                  " Xg5      U l%        US	:X  a  US
-
  U l&        OX@l&        U R                  R<                  b  SU l'        U R                  RQ                  5         U RL                  U l)        U R                  RU                  5       U l+        U RB                  (       a  U =R>                  S-  sl        U RY                  S5        U R>                  S:  U l-        g )Nr$   znot a PNG filer   %r %s %s (unknown)r	   r"   r  F   fdATr#   ).rr  rS   r\   rb   _fp_PngImageFile__frameprivate_chunksr   pngr~   r  AttributeErrorrz   r{   r   r   islowerrs   r   r   _moder   _sizer   r   _textr   r   r   custom_mimetyper   rQ  getr  r   r   rawpalette_PngImageFile__prepare_idat!_close_exclusive_fp_after_loadingr   _PngImageFile__rewind_idatr]   _PngImageFile__rewind_seekis_animated)rU   rF   rc   rd   re   rC   rawmoderJ   s           r6   _openPngImageFile._open  s^   tww||A''"Cc""77
 VX%.tww%7  $xx}}Cf9HHMM#F3 HHLL !   ! 913VD((&9q8##%%''..x8	9 XX%%
XX%%
HH$$	
HH$$	#xx::,,1!YY]]?EB88 HH//MG'++G:DL'>"(1*D"(88+5:D2HH  "!%!4!4D HHMMODM!!"JJqM==1,s   C 
EA5EEc                   U R                   cm  U R                  (       a*  U R                  nU R                  U R                  S-
  5        U R                  5         U R                  (       a  U R                  W5        U R                   $ )Nr	   )r  r  rz  r[   rQ  load)rU   frames     r6   r   PngImageFile.text  s_     :: 		$--!+,IIK		% zzr5   c                ~   U R                   c  Sn[        U5      eU R                   R                  U R                  S   S   S-
  5        U R                  c   eU R                  R                  5         U R                  R                  5         U R                  (       a  U R                   R                  5         SU l         g)zVerify PNG fileNz)verify must be called directly after openr   r"   r$   )rS   RuntimeErrorr[   r   r|  r   rl   _exclusive_fp)rU   rF   s     r6   r   PngImageFile.verify+  s     77?=Cs## 	TYYq\!_q()xx###GGMMOr5   c                X   U R                  U5      (       d  g XR                  :  a  U R                  SS5        U R                  n[        U R                  S-   US-   5       H  n U R                  U5        M     g ! [         a$  nU R                  U5        Sn[	        U5      UeS nAff = f)Nr   Tr	   zno more images in APNG file)_seek_checkrz  r  ranger  r[   )rU   r  
last_framefr   rF   s         r6   r[   PngImageFile.seek=  s    &&<<JJq$\\
t||a'3A+

1 4  +		*%3sm*+s   %A;;
B)B$$B)c                   U R                   c   eU   US:X  GaU  U(       a  U R                  R                  U R                  5        U R                   R	                  5         U R
                  U l        S U l        U R                  (       a  S U l        U R                   R                  U l
        U R                   R                  U l        U R                  U l        S U l        S U l        U R                  R!                  SS5      U l        U R                  R!                  S5      U l        U R                  R!                  S5      U l        U R                  R!                  S5      U l        SU l        GOpXR*                  S-   :w  a  SU 3n[-        U5      eU R/                  5         U R                  (       a0  U R                  R1                  U R                  U R(                  5        U R                  R3                  5       U l        U R                  U l        U R                  (       a2  [4        R6                  " U R                  U R                  5        SU l        Sn U R                  R9                  S
5         U R                   R9                  5       u  pVnUS:X  a  Sn[A        U5      eUS:X  a  U(       a  Sn[?        U5      eS	n U R                   RC                  XVU5        M  U R                  c3  U R$                  [L        RN                  :X  a  [L        RP                  U l        S U l        U R$                  [L        RN                  :X  a]  U R                  (       aK  U R                  R3                  5       U l        U RS                  U R                  U R(                  5      U l        g g U R$                  [L        RP                  :X  ae  [T        RV                  RY                  U RZ                  U R\                  5      U l        U RS                  U R                  U R(                  5      U l        g g ! [:        R<                  [>        4 a     Of = f! [D         a     O[@         a?    US:X  a  US
-  nU(       a  Xpl         Ol[4        R6                  " U R                  U5         GN[F         a<    [H        RK                  SXVU5        [4        R6                  " U R                  U5         GNf = fXl        U R                   R                  U l        U R                  R!                  S5      U l        U R                  R!                  S5      U l        U R                  R!                  S5      U l        U R                  (       a  GM  Sn[A        U5      e)Nr   r  Fr]  r_  r  r	   zcannot seek to frame Tr#   r   zNo more images in APNG file   fcTLzAPNG missing frame datarx  rw  zimage not found in APNG frame)/r|  ry  r[   r  r   r  r  impyaccessr   r   r   r   rS   _prev_imdisposer  r  
dispose_opblend_opdispose_extentrz  rB   r  paster   r   r   r\   r   r   rb   r  r~   UnicodeDecodeErrorr}  rz   r{   r*   r3   r2   _cropr
   corefillmodesize)rU   r  r   rF   frame_startrc   rd   re   s           r6   r  PngImageFile._seekL  s   xx###A:dmm,!&*&8&8#==$(DM HH,,	 HH,,	(( DMDL!%!FD"iimmJ7DO IIMM'2DM"&))--"7DDLq((-eW5 o% IIK||dllD,?,?@ GGLLNDMhhDG ""$$TWWd.A.AB&'#KQ'+xx}}$Cf '>7C"3-''>"7)#.."&K:HHMM#F3' X == T__8L8L%L&44DO??h222}}#}}113#zz$,,8K8KL  __ 6 66 ::??499dii@DL::dllD4G4GHDL 7_ k2  *  :g~!&28/!((&9% :LL!5sH((&9: !L((DI"iimmJ7DO IIMM'2DM"&))--"7D9995sm#s7   3P$  Q $Q Q
S!S3!SASSc                    U R                   $ rQ   )rz  rh   s    r6   r]   PngImageFile.tell  s    ||r5   c                    U R                   R                  S5      (       a  U R                  S-   U l        U R                  U l        [
        R
                  R                  U 5        g)z"internal: prepare to read PNG filer   )r	   N)r   r  decoderconfigr  _PngImageFile__idatr   load_preparerh   s    r6   r  PngImageFile.load_prepare  sK     99==%%!%!3!3d!:D))((.r5   c                P   U R                   c   eU R                  S:X  a  U R                  R                  S5        U R                   R                  5       u  p#nUS;  a  U R                   R	                  X#U5        gUS:X  a(   U R                   R                  X#U5        US-
  U l        OX@l        U R                  S:X  a  M  US::  a  U R                  nO[        XR                  5      nU R                  U-
  U l        U R                  R                  U5      $ ! [         a     Nf = f)zinternal: read more image datar   r#   )   IDATs   DDATrx  r5   rx  )r|  r  rS   r\   ru   r~   r  min)rU   
read_bytesrc   rd   re   s        r6   	load_readPngImageFile.load_read  s     xx###kkQ GGLLO#xx}}Cf55c/g~HHMM#F3 %qj$% kkQ* ?JZ5JkkJ.ww||J''   s   D 
D%$D%c                   U R                   c   eU R                  S:w  a%  U R                  R                  U R                  5         U R                  R                  S5         U R                   R                  5       u  pnUS:X  a  OZUS:X  a5  U R                  (       a$  SU l        U R                   R                  XU5        O U R                   R                  XU5        M  U R                   R.                  U l        U R                  (       d"  U R                   R3                  5         SU l         gU R4                  (       a  U R6                  [8        R:                  :X  a  U R=                  U R>                  U R@                  5      nU R>                  RB                  S:X  a0  SU RD                  ;   a   URG                  SU RD                  S   5      nOURI                  S5      nU R4                  RK                  X`R@                  U5        U R4                  U l        U RL                  (       a  SU l&        gggg! [        R
                  [        4 a     GMo  f = f! [         a     GM  [         ab    US:X  a  US-  n [        R                  " U R                  U5         GN! [         a$  n[        R                   (       a   SnA GM  UeSnAff = f["         aq    [$        R'                  SXU5        [        R                  " U R                  U5      nUS	S
 R)                  5       (       a  U R*                  R-                  XS45         GNff = f)z%internal: finished reading image dataNr   Tr#   r   r  rx  rw  r	   r"   r   r  r!   )'r|  r  rS   r\   r   r   rb   r  r  ru   r~   r  r  r   r   r   r`   r}  rz   r{   r~  r{  rs   r   r  rl   r  r  r8   r;   r  r  r  r  r   convert_transparentconvertr  r  )rU   rc   rd   re   r   rC   updatedmasks           r6   load_endPngImageFile.load_end  s~   xx###;;!GGLL%GGLLO#'88==? & g~D$4$4&'#c/?c/# F XX%%
HHNNDH}}%--!?**TWWd.A.AB77<<5(^tyy-H"66		. 9D #??62D##G-@-@$G--==$(DM ! "@}G LL+.  &  	 '>aKF ((&9   66	 
 " ?13VD((&9q8##%%''..~>	?sU   "H1 I 1II
M!M6!J
K$K9MKKA9MMc                    SU R                   ;  a  U R                  5         SU R                   ;  a  SU R                   ;  a  g U R                  5       R                  5       $ )Nr7  zRaw profile type exif)r   r  getexif_get_merged_dictrh   s    r6   _getexifPngImageFile._getexif  sG    "IIK"'>dii'O||~..00r5   c                `   > SU R                   ;  a  U R                  5         [        TU ]  5       $ )Nr7  )r   r  r   r  )rU   r   s    r6   r  PngImageFile.getexif  s%    "IIKw  r5   )__frame__idat__prepare_idat__rewind__rewind_idatr  ry  r  r  r  r  r  r  r  r  r  r  r  rS   r  r   r  rQ  r  r|  r{  r  r   r   )r  r   r   r   r   )r  r   r   r   r   r   )r   r   )r  r   r   r   )r   zdict[str, Any] | None)r   z
Image.Exif)r-   r.   r/   r0   formatformat_descriptionr  propertyr   r   r[   r  r]   r  r  r  r  r  r4   rm  rn  s   @r6   rt  rt    s`    F4A-F  $+_IB/ (D8)t1! !r5   rt  )r      r   )L;1r  r   )r      r   )r      r   )r      r   )r    r  r  )r      r   )r   r     )r   r  r  )r   r  r  )r   r  r  )r   r  r  )r!   r     )r   r  r   r   r   r    Ir   r   r   r   r   r   r   r!   c                    SR                  U5      nU R                  [        [        U5      5      U-   5        U R                  U5        [	        U[	        U5      5      nU R                  [        U5      5        g)z'Write a PNG chunk (including CRC field)r5   N)joinwriteo32r#  rL   rS   rc   rJ   r   s       r6   putchunkr  :  sU     88D>DHHST^c!"HHTN
vc{
#CHHSXr5   c                  $    \ rS rSrS rSS jrSrg)_idatiE  c                    Xl         X l        g rQ   )rS   chunk)rU   rS   r  s      r6   rV   _idat.__init__H  s    
r5   c                >    U R                  U R                  SU5        g )Nr  r  rS   rU   rJ   s     r6   r  _idat.writeL  s    

477GT*r5   r  NrJ   r   r   r   r-   r.   r/   r0   rV   r  r4   r,   r5   r6   r  r  E  s    +r5   r  c                  $    \ rS rSrS rSS jrSrg)_fdatiP  c                (    Xl         X l        X0l        g rQ   )rS   r  r   )rU   rS   r  r   s       r6   rV   _fdat.__init__S  s    
r5   c                    U R                  U R                  S[        U R                  5      U5        U =R                  S-  sl        g )Nrx  r	   )r  rS   r  r   r  s     r6   r  _fdat.writeX  s/    

477GS%6=r5   )r  rS   r   Nr  r  r,   r5   r6   r  r  P  s    
r5   r  c                @   U R                   R                  S5      nU R                   R                  SU R                  R                  SS5      5      nU R                   R                  SU R                  R                  S[        R                  5      5      n	U R                   R                  SU R                  R                  S[
        R                  5      5      n
U(       a  [        R                  " U5      nO[        R                  " U /U5      n/ nSnU GH  n[        R                  " U5       GH  nUR                  U:X  a  UR                  5       nOUR                  U5      nU R                   R                  5       n[        U[        [         45      (       a  X}   US'   O%Uc"  SUR                  ;   a  UR                  S   US'   [        U	[        [         45      (       a  X   US'   [        U
[        [         45      (       a  X   US'   US-  nU(       Ga  US   nUS   R                  S5      nUS   R                  S5      nU[        R"                  :X  a  [%        U5      S	:  a  [        R&                  nU[        R&                  :X  a~  US
   R                  5       n[(        R*                  R-                  SU R.                  S5      nUS   nU(       a  UR1                  U5      nOSU R.                  -   nUR3                  UU5        O"U[        R"                  :X  a	  US   S
   nOUS
   n[4        R6                  " UR                  S5      UR                  S5      5      nUR9                  SS9nU(       dF  UUR                  S5      :X  a1  UUR                  S5      :X  a  SU;   a  US   S==   US   -  ss'   GM  OS nUR;                  UUUS.5        GM     GM     [%        U5      S:X  a  U(       d  US   S
   $ U" US[=        [%        U5      5      [=        U5      5        U(       aT  U R                  U:w  a  U R                  U5      n [>        R@                  " U [C        X5      SSU R.                  -   SU4/5        Sn[E        U5       GH  u  nnUS
   nUS   (       d  SUR.                  -   nOUS   nUR1                  U5      nUR.                  nUS   n[G        [I        UR                  SS5      5      5      nUR                  SU	5      nUR                  SU
5      nU" US[=        U5      [=        US   5      [=        US   5      [=        US   5      [=        US   5      [K        U5      [K        S5      [M        U5      [M        U5      5        US-  nUS:X  a=  U(       d6  [>        R@                  " U[C        X5      SSUR.                  -   SU4/5        GML  [O        XU5      n[>        R@                  " UUSSUR.                  -   SU4/5        URP                  nGM     g )Nr[  rN  r   r]  r_  r	   encoderinfor"   r  r!   )r   r   r   r   r  r   F)
alpha_only)r  r  r  s   acTLr   r  rZ  ))r  r  r   r*   r1   r8   r:   	itertoolschainr   Iteratorr  r   r  r   listr$  r3   r#  r2   r
   r  r  r  cropr  r   subtract_modulogetbboxrs   r  r   _saver  	enumerater   roundo16r   r  r   ) r  rS   r  r  r  r  append_imagesr[  rN  r]  r_  r  	im_framesframe_countim_seqim_framer  previousprev_disposal
prev_blendbase_imr  r  deltar   r  
frame_datar  frame_durationframe_disposalframe_blendfdat_chunkss                                    r6   _write_multiple_framesr  ]  s>   ~~!!*-H>>fbggkk&!&<=D~~!!*bggkk*hFVFV.WXHNNwGU__(MNE.m4IK%..v6H}}$#==?#++D1..--/K(T5M22*2*?J'!jHMM&A*2--
*CJ'(T5M22*2*?J'%$//','9G$1K$R= ( 7 ; ;J G%m488A
 H$8$88S^a=O$,$:$:M H$:$::&tn113G#jjoofbgg|LG#F+D"),,t"4%/MM'40"h&:&::'mD1G&tnG"22$$V,goof.E }}}6%)DD"koog&>>"k1]+J7;z;RR7Hd;WXe 7 j 9~=|D!! 

C	ND		 77d?D!BE",v7GG/T.UVG&y1zd#&!HMM)Df%D}}T*H}} /U;??:q#ABC$X>!oogu5LQLQLQLQLI~{O	
 	1A:mOOb (--/G<=  73KOO(--/G<=
 "))GU 2r5   c                    [        XUSS9  g )NT)save_all)r  )r  rS   filenames      r6   	_save_allr    s    	"(T*r5   Fc                  ^' U(       Ga  U R                   R                  SU R                  R                  S5      5      n[        5       n[        5       m'U R                   R                  S/ 5      n[        R
                  " U /U5       HV  n[        R                  " U5       H9  n	UR                  U	R                  5        T'R                  U	R                  5        M;     MX     S H
  n
X;   d  M
    O   UR                  5       n
[        U'4S j[        S5       5       5      nOU R                  nU R                  n
U
nU
S:X  a  SU R                   ;   a  [        SU R                   S   -  S	5      nOQU R                  (       a>  [!        [        [#        U R                  R%                  5       S   5      S
-  S	5      S5      nOS	nUS::  a  US::  a  SnOUS::  a  SnOSnUSU 3-  nU R                   R                  SS5      U R                   R                  SS5      U R                   R                  SS5      U R                   R                  SS5      4U l         [(        U   u  nnnUR/                  [0        5        U" US[3        US   5      [3        US   5      UUSSS5	        / SQnU R                   R                  SU R                  R                  S5      5      nU(       a9  SnUS-   [4        R6                  " U5      -   nU" USU5        UR9                  S5        U R                   R                  S 5      nU(       a  / S!QnUR:                   H  nUS S u  nnUU;   a  UR9                  U5        U" UUU5        M.  UU;   a  U" UUU5        M@  USS R=                  5       (       d  MZ  [#        U5      S
:H  =(       a    US   nU(       a  M}  U" UUU5        M     U R                  S:X  aR  WS
-  nU R>                  RA                  S"5      S U n[#        U5      U:  a  US-  n[#        U5      U:  a  M  U" US#U5        U R                   R                  S$U R                  R                  S$S 5      5      nU(       d  US:X  a  U R                  S:X  aR  Wn [C        U[D        5      (       a  U" US%US U  5        GO[!        S[        S&U5      5      nS'U-  S-   n!U" US%U!S U  5        OU R                  S(;   a*  [!        S[        S)U5      5      nU" US%[G        U5      5        OU R                  S":X  a2  Uu  n"n#n$U" US%[G        U"5      [G        U#5      -   [G        U$5      -   5        OwS$U R                   ;   a  S*n[-        U5      eOYU R                  S:X  aI  U R>                  RI                  5       S+:X  a+  U R>                  RA                  S+S,5      n!Wn U" US%U!S U  5        U R                   R                  S-5      n%U%(       aB  U" US.[3        [K        U%S   S/-  S0-   5      5      [3        [K        U%S   S/-  S0-   5      5      S15        U(       aB  S2S3/nUR:                   H.  nUS S u  nnUU;   d  M  UR9                  U5        U" UUU5        M0     U R                   R                  S45      n&U&(       aU  [C        U&[L        RN                  5      (       a  U&RQ                  S55      n&U&RS                  S65      (       a  U&S7S  n&U" US8U&5        U(       a  [U        XX:UWW5      n U (       a3  [V        RX                  " U [[        X5      S9S:U R                  -   SU4/5        U(       ab  UR:                   HR  nUS S u  nnUSS R=                  5       (       d  M%  [#        U5      S
:H  =(       a    US   nU(       d  MH  U" UUU5        MT     U" US;S5        []        US<5      (       a  UR_                  5         g g ! [*         a  nSU
 S3n[-        U5      UeS nAff = f)=Nr  r  )r!   r   r   c              3  P   >^#    U  H  m[        U4S  jT 5       5      v   M     g7f)c              3  ,   >#    U  H	  oT   v   M     g 7frQ   r,   )r  
frame_sizer   s     r6   r  "_save.<locals>.<genexpr>.<genexpr>  s     ?:As   N)max)r  r   sizess    @r6   r  _save.<locals>.<genexpr>  s     RAS????s   "&r"   r   bitsr	      r&   r%   r#   ;optimizeFcompress_levelr  compress_type
dictionaryr5   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      ?r  s   bKGDs   hISTr7  r$   rJ  r'   s   eXIfr   r   r   flush)0r  r  r   setr  r  r   r  r   r  r  rZ   r$  r  r  r  r  r#  getdataencoderconfig	_OUTMODESKeyErrorr   r  rp  r  r=   r   remover   r~  r  
getpaletter   r   r  getpalettemoder   r
   Exiftobytes
startswithr  r   r  r  hasattrr*  )(r  rS   r  r  r  r  modesr  r  r  r  r  outmodecolorsr  r  	bit_depth
color_typer   rF   r   iccnamerJ   r   chunks_multiple_allowed
info_chunkrc   r   palette_byte_numberpalette_bytesr  alpha_bytesalpharedgreenbluer.  r7  r  s(                                          @r6   r  r    s'    **RWW[[9
 **?B?oordM:F)226:		(--(		(--( ; ; )D} ) 99;DRqRRwwwwGs{ R^^#bnnV44c:F zzSRZZ%7%7%9!%<!=!BCH!LR<{14&z!G 	:u-
+R0
?B/
<-	B")27);&J HHV	
DGDG
 ;F
..

]BGGKK,F
GC
 g~c 22b'4  	g>>i(D"F++J"2AICf}c"b#t$//b#t$Qq!!## _1Cjm
!z"c4( & 
ww#~$qj((/0D1DE- #66U"M - #66b'=)>>%%nbggkk.RV6WXL|q(77c> K,..b'<#=>"1c#|&<=,.6b'5+#67WW//q#e\":;L"gs<01WW+C"gs3x#e*4s4y@A/ >cl"	 0 77c>bee224>EE$$VS1E K"gu\k23
..

U
#C
CFVOc)*+CFVOc)*+	
 7#++J"2AICf}c"b#t$	 & >>f%DdEJJ''<<?D???++8Db'4 #E-
 
E",v7GG/T.UV++J"2AIC1Qx!! _1Cjm
:"c4( & 
"gsr7

 Q  ""4&0cl!"s   _ 
_9"_44_9c                |     " S S5      nS nU" 5       n Xl         [        XSU5        U ? UR                  $ ! U ? f = f)z4Return a list of PNG chunks representing this image.c                  ,    \ rS rSr/ rSS jrSS jrSrg)getchunks.<locals>.collectori  c                    g rQ   r,   r  s     r6   r  "getchunks.<locals>.collector.write  s    r5   c                :    U R                   R                  U5        g rQ   )rJ   rs   )rU   r  s     r6   rs   #getchunks.<locals>.collector.append  s    IIU#r5   r,   Nr  )r  r   r   r   )r-   r.   r/   r0   rJ   r  rs   r4   r,   r5   r6   	collectorrI    s    		$r5   rN  c                    SR                  U5      n[        [        U[        U5      5      5      nU R                  XU45        g )Nr5   )r  r  rL   rs   r  s       r6   rs   getchunks.<locals>.append  s5    xx~&vc{+,
		3c"#r5   N)r  r  rJ   )r  paramsrN  rs   rS   s        r6   	getchunksrR    sG    $ $$
 
BbdF#N77N Ns   7 ;z.pngz.apngz	image/png)r   )rq  r   r   r   )r  zImage.ImagerS   r   r  r   r   r   )E
__future__r   r  loggingrer   rO  r=   enumr   typingr   r   r   r   r   r
   r   r   r   r   _binaryr   r  r   r^   r   r   r  r   r  r   	getLoggerr-   rz   compiler  r_   rp  r   r  	SAFEBLOCKr@   r   r*   r8   rG   rL   rN   r   r   r   r   rr  rt  r.  r  r  r  r  r  r  rR  register_openr  register_saveregister_save_allregister_extensionsregister_mimer,   r5   r6   <module>ra     s*  B #   	     3 3 G G ! !  ! !			8	$	L	!	'	' 
 !+
2 **01$$
 ~%w *G /Z Zz3 2Y3 Y3@U4 U4x
 K!9&& K!f
 
!$$$	 
"	$'($$$	 $&!	(+ +
 
~*B+ #+U CT>   L''w ?   L'' /   ++Y 7   ,--/@ A   L'' 5r5   