
    fh                       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  S SKJr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!  SSK"J#r#  SSK$J%r%  Sr&\&(       a  SSKJ'r'  \RP                  " \)5      r*\RV                  " S5      RX                  r-Sr.SSSSSSSSSSSSSS S!S".r/\RV                  " S#5      r0\Rb                  r2 S$\2-  r3  " S% S&\5      r4 " S' S(\5      r5STS) jr6SUSVS* jjr7 " S+ S,5      r8 " S- S.\95      r: " S/ S05      r; " S1 S2\5      r< " S3 S4\85      r=SWS5 jr> " S6 S7\R*                  5      r?S8S9S:S;S<S=S>S>S>S?S@SASBSCSDSE.r@SXSF jrA " SG SH5      rB " SI SJ5      rC " SK SL\5      rD                SYSM jrESZSN jrF\AS4           S[SO jjrGS\SP jrH\R                  " \?R                  \?\>5        \R                  " \?R                  \G5        \R                  " \?R                  \F5        \R                  " \?R                  SQSR/5        \R                  " \?R                  SS5        g)]    )annotationsN)Callable)IntEnum)IOAny
NamedTupleNoReturncast   )Image
ImageChops	ImageFileImagePaletteImageSequence)i16be)i32be)o8)o16be)o32be)	deprecate)DeferredErrorF)_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)Disposalk   r   r   r&    N)__name__
__module____qualname____firstlineno__OP_NONEOP_BACKGROUNDOP_PREVIOUS__static_attributes__r0       J/var/www/auris/envauris/lib/python3.13/site-packages/PIL/PngImagePlugin.pyr.   r.   k   s$    G M
 Kr9   r.   c                      \ rS rSrSr SrSrg)Blend   r   r   r0   N)r1   r2   r3   r4   	OP_SOURCEOP_OVERr8   r0   r9   r:   r<   r<      s    I
 Gr9   r<   c                    [         R                  " 5       nUR                  U [        5      nUR                  (       a  Sn[        U5      eU$ )Nz=Decompressed data too large for PngImagePlugin.MAX_TEXT_CHUNK)zlibdecompressobj
decompressMAX_TEXT_CHUNKunconsumed_tail
ValueError)sdobj	plaintextmsgs       r:   _safe_zlib_decompressrK      s>    D>2IMor9   c                4    [         R                  " X5      S-  $ )Nl    )rA   crc32)dataseeds     r:   _crc32rP      s    ::d!J..r9   c                  |    \ 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S j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)selfrW   s     r:   __init__ChunkStream.__init__   s    $&:<
r9   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 ))rW   rX   popseekreadtelli32is_cidr   LOAD_TRUNCATED_IMAGESreprSyntaxError)rY   cidposlengthrG   rJ   s         r:   r`   ChunkStream.read   s    ww"""::#zz~~/CfGGLLQAAB%C'',,.CVFc{{22/S	{!<!#&&r9   c                    U $ rU   r0   rY   s    r:   	__enter__ChunkStream.__enter__   s    r9   c                $    U R                  5         g rU   )close)rY   argss     r:   __exit__ChunkStream.__exit__   s    

r9   c                     S =U l         U l        g rU   )rX   rW   rl   s    r:   rp   ChunkStream.close   s    ##
TWr9   c                \    U R                   c   eU R                   R                  XU45        g rU   )rX   appendrY   rg   rh   ri   s       r:   pushChunkStream.push   s)    zz%%%

3V,-r9   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decoderx   s       r:   callChunkStream.call   s8     	&&9tvcjj&9%:;<SIIr9   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 r]   z(broken PNG file (incomplete checksum in )r   rd   crc_skiprW   rP   rb   r`   re   rf   structerror)rY   rg   rN   crc1crc2rJ   es          r:   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'   )rW   r`   )rY   rg   rN   s      r:   r   ChunkStream.crc_skip   s#     ww"""Qr9   c                :   / nU R                   c   e  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)	rW   r`   r   r   OSErrorr   r   
_safe_readrw   )rY   endchunkcidsrg   rh   ri   r   rJ   s           r:   verifyChunkStream.verify   s     ww"""*#'99; &
   HHS)..tww?@KK  << **cl)*s   A3 3BBBrV   NrW   	IO[bytes]returnNone)r   ztuple[bytes, int, int])r   rR   )rq   objectr   r   r   r   )rg   bytesrh   intri   r   r   r   )rg   r   rh   r   ri   r   r   r   )rg   r   rN   r   r   r   )   IEND)r   r   r   zlist[bytes])r1   r2   r3   r4   rZ   r`   rm   rr   rp   ry   r   r   r   r   r8   r0   r9   r:   rR   rR      s:    = *$.J** r9   rR   c                  V    \ rS rSr% SrS\S'   S\S'   \ S	       S
S j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   rY   s        r:   r   iTXt.__new__  s!     {{3%		r9   )r   r   )NN)r   r   r   
str | Noner   r   r   r   )	r1   r2   r3   r4   __doc____annotations__staticmethodr   r8   r0   r9   r:   r   r      sJ     
DH(7A	 r9   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 rU   chunksrl   s    r:   rZ   PngInfo.__init__  s	    79r9   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   rw   )rY   rg   rN   
after_idats       r:   addPngInfo.add!  s     	Cz23r9   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   rA   compress)rY   keyvaluer   r   zips         r:   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Tr9   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

Nr9   )r   r   r      zTXt        tEXtr   )r   r   r   r   r   r   r   UnicodeErrorr   rA   r   )rY   r   r   r   s       r:   add_textPngInfo.add_textP  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)rg   r   rN   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   )
r1   r2   r3   r4   r   rZ   r   r   r   r8   r0   r9   r:   r   r     s    
:
4  !U!U !U 	!U
 !U !U 
!UH HM!3!3'9!3@D!3	!3 !3r9   r   c                  4    \ rS rSr% S\S'   S\S'   S\S'   Srg	)
_RewindStateix  z dict[str | tuple[int, int], Any]infozlist[ImageFile._Tile]tilez
int | Noneseq_numr0   Nr1   r2   r3   r4   r   r8   r0   r9   r:   r   r   x  s    
**
r9   r   c                     ^  \ rS rSrSU 4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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$ )	PngStreami~  c                   > [         TU ]  U5        0 U l        0 U l        SU l        SU l        / U l        S U l        S U l        S U l	        S U l
        [        0 / S 5      U l        SU l        g )Nr   r   r   r   )superrZ   im_infoim_textim_sizeim_modeim_tile
im_paletteim_custom_mimetypeim_n_frames_seq_numr   rewind_statetext_memory)rY   rW   	__class__s     r:   rZ   PngStream.__init__  sl     :<.0.048.2'+$((R6r9   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_MEMORYrF   )rY   chunklenrJ   s      r:   check_text_memoryPngStream.check_text_memory  sN    H$o-7##$$46  S/! .r9   c                    [        U R                  R                  5       U R                  U R                  5      U l        g rU   )r   r   copyr   r   r   rl   s    r:   save_rewindPngStream.save_rewind  s-    (LLLLMM
r9   c                    U R                   R                  R                  5       U l        U R                   R                  U l        U R                   R                  U l        g rU   )r   r   r   r   r   r   r   r   rl   s    r:   rewindPngStream.rewind  sD    ((--224((--))11r9   c                   U R                   c   e[        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)rW   r   r   findr~   r   rf   rK   rF   rd   rA   r   r   )rY   rh   ri   rG   icomp_methodrJ   r   s           r:   
chunk_iCCPPngStream.chunk_iCCP  s    ww"""  &1 FF5M+QrU3Ah,k:!/}NKCc""	/a%'
;K '2]#  	.."zz 	K	s   B0 0!C,C,+C,c                   U R                   c   e[        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)rW   r   r   rd   rF   rb   r   _MODESr   
im_rawmode	Exceptionr   rf   rY   rh   ri   rG   rJ   s        r:   
chunk_IHDRPngStream.chunk_IHDR  s    ww"""  &1B;..(CS/!1ay#a)+	,2AaD!A$<,@)DL$/ R5()DLL%R5+Cc""  		s   9C	 	
CCc                N   SU R                   ;   a1  [        R                  " SU R                   S   XR                  5      /nOLU R                  b  SU R                   S'   [        R                  " SSU R
                  -   XR                  5      /nX0l        X l        Sn[        U5      e)Nbboxr   Tdefault_imager   zimage data found)	r   r   _Tiler  r   r   r   im_idatEOFError)rY   rh   ri   r   rJ   s        r:   
chunk_IDATPngStream.chunk_IDAT  s    T\\!OOE4<<+?ooVWD+04_-OOE6DLL+@#WXD smr9   c                    Sn[        U5      e)Nzend of PNG image)r  )rY   rh   ri   rJ   s       r:   
chunk_IENDPngStream.chunk_IEND  s     smr9   c                    U R                   c   e[        R                  " U R                   U5      nU R                  S:X  a	  SU4U l        U$ )Nr    r   )rW   r   r   r   r   rY   rh   ri   rG   s       r:   
chunk_PLTEPngStream.chunk_PLTE  sD    ww"""  &1<<3#QhDOr9   c                   U R                   c   e[        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'   )	rW   r   r   r   _simple_palettematchr   r   i16)rY   rh   ri   rG   r   s        r:   
chunk_tRNSPngStream.chunk_tRNS  s    ww"""  &1<<3$$Q'' FF5M634LL0  01^,
 	 \\//+.q6DLL(  \\U"+.q63q!9c!Qi+GDLL(r9   c                    U R                   c   e[        R                  " U R                   U5      n[        U5      S-  U R                  S'   U$ )N     j@gamma)rW   r   r   rb   r   r  s       r:   
chunk_gAMAPngStream.chunk_gAMA  sD    ww"""  &1 #A 1Wr9   c                    U R                   c   e[        R                  " U R                   U5      n[        R                  " S[        U5      S-   S3U5      n[        S U 5       5      U R                  S'   U$ )N>r'   Ic              3  *   #    U  H	  oS -  v   M     g7f)r!  Nr0   ).0elts     r:   	<genexpr>'PngStream.chunk_cHRM.<locals>.<genexpr>  s     ,Px8^xs   chromaticity)rW   r   r   r   unpacklentupler   )rY   rh   ri   rG   raw_valss        r:   
chunk_cHRMPngStream.chunk_cHRM  si     ww"""  &1==1SVq[M!3Q7',,Px,P'P^$r9   c                    U R                   c   e[        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)rW   r   r   rd   rF   r   r  s        r:   
chunk_sRGBPngStream.chunk_sRGB  se     ww"""  &1A:..(CS/! tVr9   c                ^   U R                   c   e[        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)rW   r   r   rd   rF   rb   r   )	rY   rh   ri   rG   rJ   pxpyunitr:  s	            r:   
chunk_pHYsPngStream.chunk_pHYs&  s    ww"""  &1A:..(CS/!QC1IBt19v+rF{*C"%LL  QY%'VDLL"r9   c                   U R                   c   e[        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'   XpR                  U'   U R                  [        U5      5        U$ ! [         a    UnSn N|f = f)Nr   r   r9   r   r   replaces   exif)
rW   r   r   splitrF   r   r   r   r   r/  )rY   rh   ri   rG   kvk_strv_strs           r:   
chunk_tEXtPngStream.chunk_tEXt8  s    ww"""  &1	775!$DA
 HHY1EHHY	2E'(G|!DLL"'LL""3u:.  	AA	s   B2 2CCc                f   U R                   c   e[        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   r9   r   r   z in zTXt chunkr   r   rB  )rW   r   r   rC  rF   rf   rK   rd   rA   r   r   r   r   r   r/  )
rY   rh   ri   rG   rD  rE  r   rJ   rF  rG  s
             r:   
chunk_zTXtPngStream.chunk_zTXtL  s-   ww"""  &1	775!$DA A$KK!/}NKCc""	%ae,A HHY1EHHY	2E8==DLL$,,u"5""3u:.7  	AA	  	..zz 	A	s)   C  -C4  C10C14!D0D0/D0c                Z   U R                   c   e[        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   )rW   r   r   rC  rF   r/  rK   rd   rA   r   r   r   r   r   r   r   )rY   rh   ri   rrG   rD  cfcmr   tkrE  rF  lang_strtk_strrG  s                  r:   
chunk_iTXtPngStream.chunk_iTXto  s   ww"""$$TWWf55	775!$DA q6A:HaD!A$!"	''%+KDa 7Qw-a0A $$"#LL	HHY1E{{7H5HYYw1FHHWh/E 59&4QQUdll51s5z*G  	H	  	H	 "  66 zz H  	H	sN   D8 'E
 	E ,AF 8EE
EE!F?FFF*)F*c                    U R                   c   e[        R                  " U R                   U5      nSU-   U R                  S'   U$ )N   Exif  exif)rW   r   r   r   r  s       r:   
chunk_eXIfPngStream.chunk_eXIf  s@    ww"""  &1.2Vr9   c                   U R                   c   e[        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)rW   r   r   rd   rF   r   warningswarnrb   r   r   )rY   rh   ri   rG   rJ   n_framess         r:   
chunk_acTLPngStream.chunk_acTL  s    ww"""  &1A:..6CS/!'#DMMPQHq6q=Hz1MMPQH#"1ayV".r9   c                   U R                   c   e[        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)rW   r   r   rd   rF   rb   r   rf   r   r   r  float)rY   rh   ri   rG   rJ   seqwidthheightr<  r=  im_wim_h	delay_num	delay_dens                 r:   
chunk_fcTLPngStream.chunk_fcTL  sj   ww"""  &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r9   c                   U R                   c   e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   re  )	rW   r   rd   r   rF   rb   r   rf   r  )rY   rh   ri   rG   rJ   rp  s         r:   
chunk_fdATPngStream.chunk_fdAT  s    ww"""A:..((&96CS/!  !,!f==C!G#7Cc""sQw
33r9   )r   r   r  r   r   r   r   r  r   r   r   r   r   r   )r   r   r   r   r   )rh   r   ri   r   r   r   )rh   r   ri   r   r   r	   )r1   r2   r3   r4   rZ   r   r   r   r   r  r  r  r  r  r#  r2  r6  r?  rH  rK  rU  rZ  ra  rw  rz  r8   __classcell__r   s   @r:   r   r   ~  ss    ""
2
8**"$(!F)V*<4 4r9   r   c                ,    U R                  [        5      $ rU   )
startswith_MAGIC)prefixs    r:   _acceptr    s    V$$r9   c                     ^  \ rS rSrSrSrSS jr\SS j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'   ).r  rW   r`   rf   _fp_PngImageFile__frameprivate_chunksr   pngr   r  AttributeErrorr~   r   r   r   islowerrw   r   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_idatra   _PngImageFile__rewind_seekis_animated)rY   rJ   rg   rh   ri   rG   rawmoderN   s           r:   _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$$	37
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                   c   eU R                   $ )Nr   )r  r  r  r_   r`  load)rY   frames     r:   r   PngImageFile.text8  so     :: 		$--!+,IIK		% zz%%%zzr9   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(   )rW   RuntimeErrorr_   r   r  r   rp   _exclusive_fp)rY   rJ   s     r:   r   PngImageFile.verifyH  s     77?=Cs## 	TYYq\!_q()xx###GGMMOr9   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_checkr  r  ranger  r_   )rY   r  
last_framefr   rJ   s         r:   r_   PngImageFile.seekZ  s    &&<<JJq$\\
t||a'3A+

1 4  +		*%3sm*+s   %A;;
B)B$$B)c                F   U R                   c   e[        U R                  [        5      (       a  U R                  R                  eU   S nUS:X  Ga8  U(       a  U R                  R                  U R                  5        U R                   R                  5         U R                  U l	        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      nSU l        GOpXR,                  S-   :w  a  SU 3n[/        U5      eU R1                  5         U R"                  (       a0  U R2                  R5                  U R"                  U R6                  5        U R2                  R9                  5       U l        U R                  U l        U R                  (       a2  [:        R<                  " U R                  U R                  5        SU l	        Sn U R                  R?                  S
5         U R                   R?                  5       u  pgnUS:X  a  Sn[G        U5      eUS:X  a  U(       a  Sn[E        U5      eS	n U R                   RI                  XgU5        M  U(       a  X0l        U R                   c3  U R(                  [R        RT                  :X  a  [R        RV                  U l        S U l        U R(                  [R        RT                  :X  a]  U R                   (       aK  U R                   R9                  5       U l        U RY                  U R"                  U R6                  5      U l        g g U R(                  [R        RV                  :X  ae  [Z        R\                  R_                  U R`                  U Rb                  5      U l        U RY                  U R"                  U R6                  5      U l        g g ! [@        RB                  [D        4 a     Of = f! [J         a     O[F         a?    US:X  a  US
-  nU(       a  Xl	         Ol[:        R<                  " U R                  U5         GN[L         a<    [N        RQ                  SXgU5        [:        R<                  " U R                  U5         GNf = 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      nU R                  (       a  GM  Sn[G        U5      e)Nr   r  Frl  rn  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)2r  r   r  r   exr_   r  r   r  r  _imr   r   r   r   rW   _prev_imdisposer  r  
dispose_opblend_opr  rF   r  impastedispose_extentr   r   r   r`   r   r   rf   r  r   UnicodeDecodeErrorr  r~   r   r.   r7   r6   _cropr   corefillmodesize)	rY   r  r   r  rJ   frame_startrg   rh   ri   s	            r:   r  PngImageFile._seeki  s
   xx###dhh..((++A:dmm,!&*&8&8# HH,,	 HH,,	(( DMDL!%!FD"iimmJ7DO IIMM'2DM!YY]]62NDLq((-eW5 o% IIK||dllD,?,?@ GGLLNDMhhDG ""$$TWWd.A.AB&'#KQ'+xx}}$Cf '>7C"3-''>"7)#.."&K:HHMM#F3' T ES == T__8L8L%L&44DO??h222}}#}}113#zz$,,8K8KL  __ 6 66 ::??499dii@DL::dllD4G4GHDL 7c k2  *  :g~!&28/!((&9% :LL!5sH((&9: !L((DI"iimmJ7DO IIMM'2DM!YY]]62N9995sm#s7   Q Q+ Q('Q(+
T7!T!T>ATTc                    U R                   $ rU   )r  rl   s    r:   ra   PngImageFile.tell  s    ||r9   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_preparerl   s    r:   r  PngImageFile.load_prepare  sK     99==%%!%!3!3d!:D))((.r9   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   DDATr  r9   r  )r  r  rW   r`   ry   r   r  min)rY   
read_bytesrg   rh   ri   s        r:   	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                n   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                  (       Ga_  U R6                  [8        R:                  :X  G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OU R>                  RB                  S:X  al  SU RD                  ;   a\  U RD                  S   n[I        U[J        5      (       a  URM                  U5        O&[I        U[N        5      (       a  URQ                  U5        URS                  S5      nU R4                  RU                  X`R@                  U5        U R4                  U l        ggg! [        R
                  [        4 a     GM  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MP  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Nf = f)z%internal: finished reading image dataNr   Tr'   r   r  r  r  r   r&   r   r  r%   r    )+r  r  rW   r`   r   r   rf   r  r  ry   r   r  r  r   r   r   rd   r  r~   r   r  r  rw   r   r  rp   r  r  r<   r?   r  r  r  r  r   convert_transparentr   r   putpalettealphasr   putpalettealphaconvertr  )	rY   rg   rh   ri   r   rG   updatedmaskts	            r:   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 ww||s*~/J IIn5%a//#44Q7'3//#33A6"??62D##G-@-@$G-- "@}G LL+.  &  	 '>aKF ((&9   66	 
 " ?13VD((&9q8##%%''..~>	?sU   "J  K  J?>J?
N4N4%!L		
L7L2(N40L22L77A9N43N4c                    SU R                   ;  a  U R                  5         SU R                   ;  a  SU R                   ;  a  g U R                  5       R                  5       $ )NrY  zRaw profile type exif)r   r  getexif_get_merged_dictrl   s    r:   _getexifPngImageFile._getexif9  sG    "IIK"'>dii'O||~..00r9   c                `   > SU R                   ;  a  U R                  5         [        TU ]  5       $ )NrY  )r   r  r   r  )rY   r   s    r:   r  PngImageFile.getexif@  s%    "IIKw  r9   )__frame__idat__prepare_idat__rewind__rewind_idatr  r  r  r  r  r  r  r  r  r  r  r  r  r  rW   r  r   r  r`  r  r  r  r   r   )r   zdict[str, str | iTXt])r  r   r   r   r   )r  r   r   r   r   r   )r   r   )r  r   r   r   )r   zdict[int, Any] | None)r   z
Image.Exif)r1   r2   r3   r4   formatformat_descriptionr  propertyr   r   r_   r  ra   r  r  r  r  r  r8   r|  r}  s   @r:   r  r    s`    F4A-F  $+bIH/ (D<(|1! !r9   r  )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$   r'  r   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)r9   N)joinwriteo32r/  rP   )rW   rg   rN   	byte_datar   s        r:   putchunkr  ^  sW     IHHSY 3&'HHY
F3K
(CHHSXr9   c                  (    \ rS rSrSS jrSS jrSrg)_idatii  c                    Xl         X l        g rU   )rW   chunk)rY   rW   r  s      r:   rZ   _idat.__init__l  s    
r9   c                >    U R                  U R                  SU5        g )Nr  r  rW   rY   rN   s     r:   r  _idat.writep  s    

477GT*r9   r  N)rW   r   r  Callable[..., None]r   r   rN   r   r   r   r1   r2   r3   r4   rZ   r  r8   r0   r9   r:   r  r  i  s    +r9   r  c                  (    \ rS rSrSS jrSS jrSrg)_fdatit  c                (    Xl         X l        X0l        g rU   )rW   r  r   )rY   rW   r  r   s       r:   rZ   _fdat.__init__w  s    
r9   c                    U R                  U R                  S[        U R                  5      U5        U =R                  S-  sl        g )Nr  r   )r  rW   r  r   r  s     r:   r  _fdat.write|  s/    

477GS%6=r9   )r  rW   r   N)rW   r   r  r  r   r   r   r   r  r  r0   r9   r:   r  r  t  s    
r9   r  c                  4    \ rS rSr% S\S'   S\S'   S\S'   Srg	)
_Framei  Image.Imager  z tuple[int, int, int, int] | Noner  zdict[str, Any]encoderinfor0   Nr   r0   r9   r:   r  r    s    O
**r9   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R                   R                  S5      nUR                   R                  S5      nU[        R"                  :X  a  [%        U5      S:  a  [        R&                  nU[        R&                  :X  a  UR(                  R                  5       n[*        R,                  R/                  S	U R0                  S
5      nUR2                  nU(       a  UR5                  U5      nOSU R0                  -   nUR7                  UU5        O0U[        R"                  :X  a  US   R(                  nOUR(                  n[8        R:                  " UR                  S	5      UR                  S	5      5      nUR=                  SS9nU(       dM  UUR                  S5      :X  a8  UUR                  S5      :X  a#  SU;   a  UR                   S==   US   -  ss'   GM  OS nUR?                  [A        UUU5      5        GM     GM      [%        U5      S:X  a  U(       d  US   R(                  $ U" US[C        [%        U5      5      [C        U5      5        U(       a|  U R                  U:w  a  U R                  U5      n [D        RF                  " U [I        [J        [L           [O        X5      5      [D        RP                  " SSU R0                  -   SU5      /5        Sn[S        U5       GH  u  nnUR(                  nUR2                  (       d  SUR0                  -   nOUR2                  nUR5                  U5      nUR0                  nUR                   n[U        [W        UR                  SS5      5      5      nUR                  SU	5      nUR                  SU
5      nU" US[C        U5      [C        US   5      [C        US   5      [C        US   5      [C        US   5      [Y        U5      [Y        S5      [[        U5      [[        U5      5        US-  nUS:X  ae  U(       d^  [D        RF                  " U[I        [J        [L           [O        X5      5      [D        RP                  " SSUR0                  -   SU5      /5        GM  []        XU5      n[D        RF                  " U[I        [J        [L           U5      [D        RP                  " SSUR0                  -   SU5      /5        UR^                  nGM     g )Nrj  r]  r   rl  rn  r   r&   r%   )r   r   r   r   r   F)
alpha_onlys   acTLr   r  ri  )0r	  r  r   r.   r5   r<   r>   	itertoolschainr   Iteratorr  r   r  r   listr0  r7   r/  r6   r  r   r  r  r  r  cropr  r   subtract_modulogetbboxrw   r  r  r   _saver
   r   r   r  r  	enumerater   roundo16r   r  r   ) r  rW   r  r  r  r  append_imagesrj  r]  rl  rn  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                                    r:   _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= ( 4 4 8 8 D%1155g>
 H$8$88S^a=O$,$:$:M H$:$::&kk..0G#jjoofbgg|LG#==D"),,t"4%/MM'40"h&:&::'m..G&kkG"22$$V,goof.E }}}6%)DD"koog&>>"k1((4J8OO4VHdK@Ae 7 j 9~=| 

C	ND		 77d?D!BEE",-__UFRWW$4aAB	
 G&y1z==HMM)D??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RYb 01(>7KL  73KOORY,(>7KL
 "))GU 2V r9   c                    [        XUSS9  g )NT)save_all)r  )r  rW   filenames      r:   	_save_allr,    s    	"(T*r9   c                n  ^( 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S:X  a  [/        SSSS9  UR1                  [2        5        U" US[5        US   5      [5        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!-   [6        R8                  " U5      -   nU" US"U5        UR;                  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R;                  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@                  RC                  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 [E        U[F        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)[I        U5      5        OU R                  S&:X  a2  Uu  n"n#n$U" US)[I        U"5      [I        U#5      -   [I        U$5      -   5        OwS(U R                   ;   a  S.n[-        U5      eOYU R                  S:X  aI  U R@                  RK                  5       S/:X  a+  U R@                  RC                  S/S05      n!Wn U" US)U!S U  5        U R                   R                  S15      n%U%(       aB  U" US2[5        [M        U%S   S3-  S4-   5      5      [5        [M        U%S   S3-  S4-   5      5      S55        U(       aB  S6S7/nUR<                   H.  nUS S u  nnUU;   d  M  UR;                  U5        U" UUU5        M0     U R                   R                  S85      n&U&(       aU  [E        U&[N        RP                  5      (       a  U&RS                  S95      n&U&RU                  S:5      (       a  U&S;S  n&U" US<U&5        U n'U(       a  [W        XX:UWW5      n'U'(       a[  [X        RZ                  " U'[]        [^        [F           [a        X5      5      [X        Rb                  " S=S>U'R                  -   SU5      /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        [e        US@5      (       a  URg                  5         g g ! [*         a  nSU
 S3n[-        U5      UeS nAff = f)ANr  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rU   r0   )r)  
frame_sizer   s     r:   r+  "_save.<locals>.<genexpr>.<genexpr>2  s     ?:As   N)max)r)  r   sizess    @r:   r+  _save.<locals>.<genexpr>2  s     RAS????s   "&r&   r    bitsr      r*   r)   r'   ;optimizeFcompress_levelr  compress_type
dictionaryr9   zcannot write mode z as PNGr'  zSaving I mode images as PNGr   )
stacklevels   IHDRr   r   )s   cHRMs   cICPs   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   pHYsr9  g      ?r  s   bKGDs   hISTrY  r(   rX  r+   s   eXIfr   r   r   flush)4r	  r  r   setr  r  r   r  r   r  r  r^   r0  r  r  r  r2  r/  getdataencoderconfig	_OUTMODESKeyErrorr   r   r  r  r  rA   r   remover   r  r  
getpaletter   r   r  getpalettemoder   r   Exiftobytesr  r(  r   r  r
   r   r  r  hasattrrB  ))r  rW   r+  r  r*  r  modesr  r  r  r  r  outmodecolorsr5  r  	bit_depth
color_typer   rJ   r   iccnamerN   r   chunks_multiple_allowed
info_chunkrg   r   palette_byte_numberpalette_bytesr  alpha_bytesalpharedgreenbluer:  rY  	single_imr3  s)                                           @r:   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 #~/B
 HHV	
DGDG
 D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 $&I*E-
	 EE",-__UFY^^$;QHI	
 ++J"2AIC1Qx!! _1Cjm
:"c4( & 
"gsr7

 _  ""4&0cl!"s   ` 
`4`//`4c                p   ^ SSK Jn  / mSU4S jjnU" 5       n Xl        [        XSU5        U ?T$ ! U ?f = f)z4Return a list of PNG chunks representing this image.r   )BytesIOc                   > SR                  U5      n[        [        U[        U5      5      5      nTR                  XU45        g )Nr9   )r  r  rP   rw   )rW   rg   rN   r  r   r   s        r:   rw   getchunks.<locals>.append  s6    HHTN	&F3K01ss+,r9   r   rW   r   rg   r   rN   r   r   r   )ior`  r	  r  )r  paramsr`  rw   rW   r   s        @r:   	getchunksrf    sB    F-
 
Bbb&!NM Ns   1 5z.pngz.apngz	image/png)rG   r   r   r   )r   )rN   r   rO   r   r   r   )r  r   r   r   rc  )r  r  rW   r   r  r  r  r   r  r   r  Image.Image | Noner  zlist[Image.Image]r   rg  )r  r  rW   r   r+  r   r   r   )r  r  rW   r   r+  r   r  r  r*  r   r   r   )r  r  re  r   r   z list[tuple[bytes, bytes, bytes]])O
__future__r   r  loggingrer   r^  rA   collections.abcr   enumr   typingr   r   r   r	   r
   r   r   r   r   r   r   _binaryr   r  r   rb   r   r   r  r   r  
_deprecater   _utilr   TYPE_CHECKINGr   	getLoggerr1   r~   compiler  rc   r  r  r  	SAFEBLOCKrD   r   r.   r<   rK   rP   rR   r   r   r   r   r   r  r  rF  r  r  r  r  r(  r,  r  rf  register_openr  register_saveregister_save_allregister_extensionsregister_mimer0   r9   r:   <module>rz     s  B #   	    $  6 6 G G ! !  ! ! !  			8	$	L	!	'	' 
 !+
2 **01$$
 ~%w *G /[ [|3 6Y3 Y3@: d4 d4V%S!9&& S!v
 
!$$$	 
"	$'($$$	 $&!	(+ +
 
 Z  KKK K 	K
 K &K %K K\+ "*PPP P 	P
 P 
Pn2   L''w ?   L'' /   ++Y 7   ,--/@ A   L'' 5r9   