§
    þÜÒj4Ÿ  ã                  óü  — d dl mZ h d£Zd dlZd dlZd dlmZ d dlmZ d dl	m
Z
mZ ddlmZmZmZmZmZ dd	lmZ dd
lmZ ddlmZ ddlmZ dZerd dl	mZmZmZ ddlmZ ddlm Z   G d„ de¦  «        Z!e!j"        Z#dPd„Z$ G d„ dej        ¦  «        Z%ddddœZ&dQd„Z'e(e)z  e*e+         z  ej        z  Z,dRd$„Z-dSd(„Z.dTd,„Z/ G d-„ d.e
¦  «        Z0dUd/„Z1dVd2„Z2	 dWdXd4„Z3dYd6„Z4dZd:„Z5dZ6d[d<„Z7d\d>„Z8d]d?„Z9d^d@„Z:d_dC„Z;d`dE„Z<dadG„Z=	 dbdcdJ„Z>	 dddedM„Z? ej@        e%jA        e%e$¦  «          ejB        e%jA        e3¦  «          ejC        e%jA        e2¦  «          ejD        e%jA        dN¦  «          ejE        e%jA        dO¦  «         dS )fé    )Úannotations>   ú	PIL._utilúPIL._binaryÚmathÚ	itertoolsÚ
subprocessN)ÚIntEnum)Úcached_property)Ú
NamedTupleÚcasté   )ÚImageÚ
ImageChopsÚ	ImageFileÚImagePaletteÚImageSequence)Úi16le)Úo8)Úo16le)ÚDeferredErrorF)ÚIOÚAnyÚLiteral)Ú_imaging)ÚBufferc                  ó   — e Zd ZdZdZdZdZdS )ÚLoadingStrategyz.. versionadded:: 9.1.0r   r   é   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚRGB_AFTER_FIRSTÚ RGB_AFTER_DIFFERENT_PALETTE_ONLYÚ
RGB_ALWAYS© ó    ú^C:\Users\johnn\AppData\Local\Programs\Python\Python311\Lib\site-packages\PIL/GifImagePlugin.pyr   r   >   s$   € € € € € Ø!Ð!à€OØ'(Ð$Ø€J€J€Jr'   r   ÚprefixÚbytesÚreturnÚboolc                ó,   — |                       d¦  «        S )N)s   GIF87as   GIF89a)Ú
startswith)r)   s    r(   Ú_acceptr/   M   s   € Ø×ÒÐ3Ñ4Ô4Ð4r'   c                  óš   ‡ — e Zd ZdZdZdZdZdd„Zdd„Zdd„Z	e
dd„¦   «         Zedd„¦   «         Zdd„Zdd d„Zdˆ fd„Zdd„Zdd„Zˆ xZS )!ÚGifImageFileÚGIFzCompuserve GIFFNr+   úbytes | Nonec                ó    — | j         €J ‚| j                              d¦  «        }|r(|d         r | j                              |d         ¦  «        S d S )Nr   r   )ÚfpÚread)ÚselfÚss     r(   ÚdatazGifImageFile.data]   sQ   € ØŒwÐ"Ð"Ð"ØŒG�LŠL˜‰OŒOˆØð 	&��1”ð 	&Ø”7—<’<  !¤Ñ%Ô%Ð%Øˆtr'   Úpr*   r,   c                ó°   — t          dt          |¦  «        d¦  «        D ]6}|dz  ||         cxk    r||dz            cxk    r||dz            k    sn  dS Œ7dS )Nr   é   r   r   TF)ÚrangeÚlen)r7   r:   Úis      r(   Ú_is_palette_neededzGifImageFile._is_palette_neededd   sy   € Ý�q�#˜a™&œ& !Ñ$Ô$ð 	ð 	ˆAØ˜‘F˜a œdÐ:Ð:Ò:Ð: a¨¨A©¤hÐ:Ð:Ò:Ð:°!°A¸±E´(Ò:Ð:Ð:Ð:Ø�t�tð ;àˆur'   ÚNonec                óz  — | j         €J ‚| j                              d¦  «        }t          |¦  «        sd}t          |¦  «        ‚|d d…         | j        d<   t          |d¦  «        t          |d¦  «        f| _        |d         }|dz  dz   }|d	z  re|d
         | j        d<   | j                              d|z  ¦  «        }|                      |¦  «        r#t          j	        d|¦  «        }|x| _
        | _        | j         | _        | j                              ¦   «         | _        d | _        |                      d¦  «         d S )Né   znot a GIF fileé   Úversioné   é
   é   r   é€   é   Ú
backgroundr<   ÚRGBr   )r5   r6   r/   ÚSyntaxErrorÚinfoÚi16Ú_sizer@   r   ÚrawÚglobal_paletteÚpaletteÚ_fpÚtellÚ_GifImageFile__rewindÚ	_n_framesÚ_seek)r7   r8   ÚmsgÚflagsÚbitsr:   rS   s          r(   Ú_openzGifImageFile._openj   s(  € àŒwÐ"Ð"Ð"ØŒG�LŠL˜ÑÔˆÝ�q‰zŒzð 	#Ø"ˆCÝ˜cÑ"Ô"Ð"à   ! œuˆŒ	�)ÑÝ˜˜A‘Y”Y¥ A q¡	¤	Ð)ˆŒ
Ø�"”ˆØ˜‘	˜Q‰ˆà�3‰;ð 	=à&'¨¤eˆDŒI�lÑ#à”—’˜Q $™YÑ'Ô'ˆAØ×&Ò& qÑ)Ô)ð =Ý&Ô*¨5°!Ñ4Ô4�Ø5<Ð<�Ô# d¤là”7ˆŒØœŸš™œˆŒØ%)ˆŒØ�
Š
�1‰Œˆˆˆr'   Úintc                ó$  — | j         €ƒ|                      ¦   «         }	 	 |                      |                      ¦   «         dz   d¦  «         Œ,# t          $ r |                      ¦   «         dz   | _         Y nw xY w|                      |¦  «         | j         S )NTr   F©rW   rU   rX   ÚEOFErrorÚseek)r7   Úcurrents     r(   Ún_frameszGifImageFile.n_frames…   s’   € àŒ>Ð!Ø—i’i‘k”kˆGð1ð7Ø—J’J˜tŸyšy™{œ{¨Q™°Ñ6Ô6Ð6ð7øåð 1ð 1ð 1Ø!%§¢¡¤¨q¡�”��ð1øøøà�IŠI�gÑÔÐØŒ~Ðs   �-A
 Á
&A3Á2A3c                óÜ   — | j         �| j         dk    S |                      ¦   «         }|rdS 	 |                      dd¦  «         d}n# t          $ r d}Y nw xY w|                      |¦  «         |S )Nr   TFr_   )r7   rb   Úis_animateds      r(   re   zGifImageFile.is_animated‘   s�   € àŒ>Ð%Ø”> QÒ&Ð&à—)’)‘+”+ˆØð 	Ø�4ð	 Ø�JŠJ�q˜%Ñ Ô Ð ØˆKˆKøÝð 	 ð 	 ð 	 ØˆKˆKˆKð	 øøøð 	�	Š	�'ÑÔÐØÐs   ¬A ÁAÁAÚframec                ój  — |                       |¦  «        sd S || j        k     rd | _        |                      d¦  «         | j        }	 t	          | j        dz   |dz   ¦  «        D ]}|                      |¦  «         Œd S # t
          $ r,}|                      |¦  «         d}t          |¦  «        |‚d }~ww xY w)Nr   r   úno more images in GIF file)Ú_seek_checkÚ_GifImageFile__frameÚ_imrX   r=   r`   ra   )r7   rf   Ú
last_frameÚfÚerY   s         r(   ra   zGifImageFile.seek£   sÏ   € Ø×Ò Ñ&Ô&ð 	ØˆFØ�4”<ÒÐØˆDŒHØ�JŠJ�q‰MŒMˆMà”\ˆ
ð	'Ý˜4œ<¨!Ñ+¨U°Q©YÑ7Ô7ð ð �Ø—
’
˜1‘”��ðð øåð 	'ð 	'ð 	'Ø�IŠI�jÑ!Ô!Ð!Ø.ˆCÝ˜3‘-”- QÐ&øøøøð	'øøøs   Á3A< Á<
B2Â'B-Â-B2TÚupdate_imagec                ó  ‡ — t          ‰ j        t          ¦  «        r‰ j        j        ‚|dk    rMd‰ _        d ‰ _        d‰ _        ‰ j                             ‰ j        ¦  «         d‰ _	        d‰ j
        v r‰ j
        d= n‰ j        r|r‰                      ¦   «          |‰ j        dz   k    rd|› �}t          |¦  «        ‚‰ j        ‰ _        ‰ j        rO‰ j                             ‰ j        ¦  «         ‰                      ¦   «         r	 ‰                      ¦   «         °d‰ _        ‰ j                             d¦  «        }|r|dk    rd}t#          |¦  «        ‚d }i }g }d }d }	d }
	 |s‰ j                             d¦  «        }|r|dk    r�n#|d	k    �r�‰ j                             d¦  «        }‰                      ¦   «         }|d         d
k    rA|�?|d         }|dz  r|d         }t%          |d¦  «        dz  |d<   d|z  }|dz	  }|r|‰ _	        né|d         dk    rI|r|r|                     d¦  «         |r+|                     |¦  «         ‰                      ¦   «         }|°+d}Œþ|d         dk    rˆ|dk    r‚|�€|‰ j                             ¦   «         f|d<   |                     d¦  «        rM‰                      ¦   «         }|r7t-          |¦  «        dk    r$|d         dk    rt%          |d¦  «        ‰ j
        d<   ‰                      ¦   «         r	 ‰                      ¦   «         °�n‰|dk    �r‚‰ j                             d¦  «        }t%          |d¦  «        t%          |d¦  «        }}|t%          |d¦  «        z   |t%          |d¦  «        z   }}|‰ j        d         k    s|‰ j        d         k    rS|rQt1          |‰ j        d         ¦  «        t1          |‰ j        d         ¦  «        f}t3          j        |¦  «         |‰ _        ||||f}
|d         }|dz  dk    }	|dz  rR|dz  dz   }‰ j                             d|z  ¦  «        }‰                      |¦  «        rt;          j        d|¦  «        }nd }‰ j                             d¦  «        d         }‰ j                             ¦   «         ‰ _        nd}�ŒI|	€d!}t#          |¦  «        ‚|‰ _        |sd S g ‰ _        ‰ j        r%‰ j                              ‰ j        ‰ j!        ¦  «         |�|n‰ j"        ‰ _#        |‰ _$        |dk    rl‰ j#        r)tJ          tL          j'        k    r|�d"nd‰ _(        nd#‰ _(        nd$‰ _(        |r|‰ _)        nñ‰ j"        rdd%l*m*}  |‰ j"        ¦  «        ‰ _)        nÎd ‰ _)        nÆ‰ j+        d#k    r»tJ          tL          j,        k    s|r¤d&‰ j
        v re‰ j         -                    ‰ j
        d&         d¦  «         ‰ j         .                    d"t2          j/        j0        ¦  «        ‰ _        d"‰ _(        ‰ j
        d&= n6d‰ _(        ‰ j         .                    dt2          j/        j0        ¦  «        ‰ _        d1ˆ fd+„}d ‰ _        |
‰ _!        ‰ j!        �r€‰ j	        dk    �rt	 ‰ j	        dk    r»‰ j!        \  }}}}||z
  ||z
  f}t3          j        |¦  «         d#}‰ j
         1                    d&|¦  «        }|�‰ j+        d,v rd"} ||¦  «        d-z   }n1‰ j
         1                    d.d¦  «        }‰ j+        d,v rd} ||¦  «        }t2          j2         3                    |||¦  «        ‰ _        nœ‰ j4        �&‰  5                    ‰ j        ‰ j!        ¦  «        ‰ _        no|�m‰ j!        \  }}}}||z
  ||z
  f}t3          j        |¦  «         d#}|}‰ j+        d,v rd"} ||¦  «        d-z   }t2          j2         3                    |||¦  «        ‰ _        n# tl          $ r Y nw xY w|	�^d}|�1|dk    r tJ          tL          j'        k    r
|‰ j
        d&<   n‰ j+        d,vr|}to          j8        d/||||f‰ j        ||	|f¦  «        g‰ _        |rd 9                    |¦  «        ‰ j
        d<   d0D ](}||v r||         ‰ j
        |<   Œ|‰ j
        v r‰ j
        |= Œ)d S )2Nr   éÿÿÿÿÚcommentr   zcannot seek to frame ó   ;rh   Tó   !éù   r<   rG   Údurationé   r   éþ   ó   
r'   éÿ   Ú	extensionó   NETSCAPE2.0Úloopó   ,é	   é   rD   rF   é@   rI   rH   rL   Fzimage not found in GIF frameÚRGBAÚPÚL)ÚcopyÚtransparencyÚcolorr]   r+   útuple[int, int, int]c           	     óÖ   •— ‰j         r]| dz  dz   t          ‰j         j        ¦  «        k    rd} t          dt	          ‰j         j        | dz  | dz  dz   …         ¦  «        ¦  «        S | | | fS )Nr<   r   rˆ   )Ú_frame_paletter>   rS   r   Útuple)r‡   r7   s    €r(   Ú_rgbz GifImageFile._seek.<locals>._rgba  s   ø€ ØÔ"ð -Ø˜1‘9˜q‘=¥3 tÔ':Ô'BÑ#CÔ#CÒCÐCØ�EÝØ*Ý˜$Ô-Ô5°e¸a±iÀ%È!Á)ÈaÁ-Ð6OÔPÑQÔQñô ð ð
 ˜u eÐ,Ð,r'   ©rL   r‚   )r   rK   Úgif)rv   r{   )r‡   r]   r+   rˆ   ):Ú
isinstancerT   r   ÚexÚ_GifImageFile__offsetÚdisposerj   ra   rV   Údisposal_methodrN   ÚtileÚloadÚ
ValueErrorr5   r9   r6   r`   rO   ÚappendrU   r.   r>   ÚsizeÚmaxr   Ú_decompression_bomb_checkrP   r@   r   rQ   ÚimÚpasteÚdispose_extentrR   rŠ   Ú_frame_transparencyÚLOADING_STRATEGYr   r%   Ú_moderS   r…   Úmoder$   ÚputpalettealphaÚconvertÚDitherÚFLOYDSTEINBERGÚgetÚcoreÚfillrk   Ú_cropÚAttributeErrorr   Ú_TileÚjoin)r7   rf   ro   rY   r8   rS   rN   Úcomment_blocksÚframe_transparencyÚ	interlaceÚframe_dispose_extentÚblockrZ   Údispose_bitsÚx0Úy0Úx1Úy1r˜   r[   r:   r…   rŒ   Údispose_sizeÚdispose_moder‡   r†   Úks   `                           r(   rX   zGifImageFile._seek³   sc	  ø€ Ý�d”h¥Ñ.Ô.ð 	Ø”(”+ÐØ�AŠ:ˆ:àˆDŒMØ8<ˆDŒLØˆDŒLØŒH�MŠM˜$œ-Ñ(Ô(Ð(Ø#$ˆDÔ Ø˜DœIÐ%Ð%Ø”I˜iÐ(øð Œyð ˜\ð Ø—	’	‘”�à�D”L 1Ñ$Ò$Ð$Ø1¨%Ð1Ð1ˆCÝ˜S‘/”/Ð!à”(ˆŒØŒ=ð 	àŒG�LŠL˜œÑ'Ô'Ð'Ø—)’)‘+”+ð Øð —)’)‘+”+ð àˆDŒMàŒG�LŠL˜‰OŒOˆØð 	 �A˜’I�IØ.ˆCÝ˜3‘-”-ÐàEIˆà!ˆØ&(ˆØ!ÐØˆ	Ø#ÐðT	Øð $Ø”G—L’L ‘O”O�Øð P˜˜Tš	˜	Ùà�d’‘ð ”G—L’L ‘O”O�ØŸ	š	™œ�Ø�Q”4˜3’;�; 5Ð#4ð " !œH�EØ˜q‘yð 6Ø-2°1¬XÐ*Ý'*¨5°!¡}¤}°rÑ'9�D˜Ñ$ð $.°Ñ#5�LØ#/°1Ñ#4�LØ#ð <ð
 0<˜Ô,øØ�q”T˜S’[�[ð ð 5 ð 5à&×-Ò-¨eÑ4Ô4Ð4Øð ,Ø&×-Ò-¨eÑ4Ô4Ð4Ø $§	¢	¡¤˜ð  ð ,ð �AØØ�q”T˜S’[�[ U¨a¢Z Z°EÐ4Eð ).¨t¬w¯|ª|©~¬~Ð(=�D˜Ñ%Ø×'Ò'¨Ñ7Ô7ð >Ø $§	¢	¡¤˜Ø ð >¥S¨¡Z¤Z°1¢_ _¸¸q¼ÀQº¸Ý03°E¸1±´˜DœI fÑ-Ø—i’i‘k”kð Øð —i’i‘k”kð ùð �d’‘ð ”G—L’L ‘O”O�õ ˜Q ™œ¥C¨¨1¡I¤I�B�Ø�c ! Q™iœi™¨­c°!°Q©i¬i©�B�Ø˜œ 1œÒ%Ð%¨¨d¬i¸¬lÒ):Ð):ÀÐ):Ý˜r 4¤9¨Q¤<Ñ0Ô0µ#°b¸$¼)ÀA¼,Ñ2GÔ2GÐG�DÝÔ3°DÑ9Ô9Ð9Ø!%�D”JØ')¨2¨r°2 ~Ð$Ø˜!œ�à" R™Z¨AÒ-�	à˜3‘;ð (Ø! A™I¨™?�DØœŸš Q¨$¡YÑ/Ô/�AØ×.Ò.¨qÑ1Ô1ð (Ý".Ô"2°5¸!Ñ"<Ô"<˜˜à"'˜ð ”w—|’| A‘” qÔ)�Ø $¤§¢¡¤�”ØØˆAñiT	ðl ÐØ0ˆCÝ˜3‘-”-ÐàˆŒØð 	ØˆFàˆŒ	àŒ<ð 	=ØŒG�MŠM˜$œ,¨Ô(;Ñ<Ô<Ð<à)0Ð)<˜g˜gÀ$ÔBUˆÔØ#5ˆÔ Ø�AŠ:ˆ:ØÔ"ð !Ý#¥Ô'AÒAÐAØ+=Ð+I  Èu�D”J�Jà!$�D”J�Jà �”
àð $Ø&�”�ØÔ$ð $Ø%Ð%Ð%Ð%Ð%Ð%à#˜t DÔ$7Ñ8Ô8�”�à#�”�àŒy˜CÒÐå$­Ô(XÒXÐXØð Yð &¨¬Ð2Ð2Øœ×/Ò/°´	¸.Ô0IÈ1ÑMÔMÐMØ"&¤'§/¢/°&½%¼,Ô:UÑ"VÔ"V˜œØ%+˜œ
Ø œI nÐ5Ð5à%*˜œ
Ø"&¤'§/¢/°%½¼Ô9TÑ"UÔ"U˜œð		-ð 		-ð 		-ð 		-ð 		-ð 		-ð ˆŒØ@TˆÔØÔñ +	 4Ô#7¸1Ò#<Ñ#<ð*ØÔ'¨1Ò,Ð,ð &*Ô%8‘N�B˜˜B Ø$&¨¡G¨R°"©WÐ#5�LåÔ3°LÑAÔAÐAð $'�LØ œIŸMšM¨.Ð:LÑMÔM�EØÐ(Øœ9¨Ð7Ð7Ø+1˜LØ$( D¨¡K¤K°$Ñ$6˜Eøà $¤	§¢¨l¸AÑ >Ô >˜Øœ9¨Ð7Ð7Ø+0˜LØ$( D¨¡K¤K˜EÝ#(¤:§?¢?°<ÀÈuÑ#UÔ#U�D”L�Lð ”xÐ+à'+§z¢z°$´'¸4Ô;NÑ'OÔ'O˜œ˜Ø+Ð7Ø)-Ô)<™˜˜B  BØ(*¨R©°°b±Ð'9˜åÔ7¸ÑEÔEÐEØ'*˜Ø 2˜Øœ9¨Ð7Ð7Ø+1˜LØ$( DÐ);Ñ$<Ô$<¸tÑ$C˜EÝ',¤z§¢Ø(¨,¸ñ(ô (˜œøøõ "ð ð ð Ø�ðøøøð Ð ØˆLØ!Ð-Ø˜A’:�:Ý'­?Ô+EÒEÐEØ4F˜œ	 .Ñ1øØ”Y oÐ5Ð5Ø#5�Lå”ØØ˜˜R Ð$Ø”MØ˜9 lÐ3ñ	ô ðˆDŒIð ð 	<Ø#&§8¢8¨NÑ#;Ô#;ˆDŒI�iÑ Ø*ð 	!ð 	!ˆAØ�DˆyˆyØ# Aœw�”	˜!‘�Ø�d”i��Ø”I˜a�Løð		!ð 	!s   Ù.E"_ ß
_ß_c                ól  •— | j         rdnd}d | _        | j        dk    r8| j        �0t          j                             || j        | j        ¦  «        | _        n€| j	        dv rw| j        | _        | j         r]t          j                             d| j        | j        pd¦  «        | _         | j        j
        dg| j                              ¦   «         ¢R Ž  nd | _        | j        s¨| j        �¡| j        | j        j        k    rŒt          j                             | j        j	        | j        ¦  «        }| j         r% |j
        dg| j                              ¦   «         ¢R Ž  |                     | j        ddg| j        j        ¢R ¦  «         || _        || _        d | _         t          ¦   «                              ¦   «          d S )Nrƒ   r„   r   r�   rL   )rŠ   Ú_prev_imrj   rž   r   r§   r¨   r˜   r›   r¡   Ú
putpaletteÚgetdatark   rœ   r    ÚsuperÚload_prepare)r7   Ú	temp_modeÚexpanded_imÚ	__class__s      €r(   r¿   zGifImageFile.load_prepare´  sŸ  ø€ ØÔ.Ð7�C�C°Cˆ	ØˆŒØŒ<˜1ÒÐØÔ'Ð3Ýœ*Ÿ/š/Ø˜tœy¨$Ô*Bñô �”øð ŒY˜/Ð)Ð)Ø œGˆDŒMØÔ"ð  Ýœ*Ÿ/š/¨#¨t¬y¸$Ô:RÐ:WÐVWÑXÔX�”Ø"�”Ô" 5ÐI¨4Ô+>×+FÒ+FÑ+HÔ+HÐIÐIÐIÐIÐIà�”ØŒ}ð 	" ¤Ð!5¸$¼)ÀtÄwÄ|Ò:SÐ:SÝœ*Ÿ/š/¨$¬'¬,¸¼	ÑBÔBˆKØÔ"ð NØ&�Ô& uÐM¨tÔ/B×/JÒ/JÑ/LÔ/LÐMÐMÐMÐMØ×Ò˜dœg¨¨1Ð'<¨t¬w¬|Ð'<Ð'<Ñ=Ô=Ð=à!ˆDŒGØˆŒ
Ø"ˆÔå‰Œ×ÒÑÔÐÐÐr'   c                ó8  — | j         dk    rŒ| j        dk    rt          t          j        k    rj| j        �(| j                             | j        d¦  «         d| _        nd| _        | j         	                    | j        t          j        j        ¦  «        | _        d S | j        sd S | j        | j        j        k    rÏ| j        �&t          j                             d| j        ¦  «        }nht          j                             d| j        ¦  «        }|                     dd| j                             ¦   «         ¦  «         | 	                    d¦  «        }|                     | j        ddg| j        j        ¢R ¦  «         || _        | j        €J ‚| j        �g| j        dk    r!| j                             d| j        ¦  «        }nU| j                             | j        d¦  «         | j         	                    d¦  «        }n| j         	                    d¦  «        }| j        €J ‚|                      || j        ¦  «        }| j        | _        | j        j        | _        |j        dv r#| j                             || j        |¦  «         d S | j                             || j        ¦  «         d S )Nr   rƒ   r‚   rL   r„   ÚLA)rÄ   r‚   )rj   r¡   rŸ   r   r%   rž   r›   r¢   r    r£   r   r¤   r¥   r»   r˜   r§   r¨   r¼   Ú
getpaletterœ   Úconvert_transparentr�   r©   )r7   rÁ   Úframe_ims      r(   Úload_endzGifImageFile.load_endÏ  sN  € ØŒ<˜1ÒÐØŒy˜CÒÐÕ$4½Ô8RÒ$RÐ$RØÔ+Ð7Ø”G×+Ò+¨DÔ,DÀaÑHÔHÐHØ!'�D”J�Jà!&�D”JØœ'Ÿ/š/¨$¬)µU´\Ô5PÑQÔQ�”ØˆFØŒ}ð 	ØˆFØŒ9˜œÔ*Ò*Ð*ØÔ'Ð3Ý#œjŸošo¨f°d´iÑ@Ô@��å#œjŸošo¨c°4´9Ñ=Ô=�Ø×&Ò& u¨e°T´W×5GÒ5GÑ5IÔ5IÑJÔJÐJØ)×1Ò1°%Ñ8Ô8�Ø×Ò˜dœm¨a°Ð-H°T´]Ô5GÐ-HÐ-HÑIÔIÐIà'ˆDŒMØ”=Ð,Ð,Ð,ØÔ#Ð/ØŒy˜CÒÐØœ7×6Ò6°t¸TÔ=UÑVÔV��à”×'Ò'¨Ô(@À!ÑDÔDÐDØœ7Ÿ?š?¨6Ñ2Ô2��à”w—’ uÑ-Ô-ˆHàÔ"Ð.Ð.Ð.Ø—:’:˜h¨Ô(;Ñ<Ô<ˆà”-ˆŒØ”W”\ˆŒ
ØŒ=˜NÐ*Ð*ØŒG�MŠM˜( DÔ$7¸ÑBÔBÐBÐBÐBàŒG�MŠM˜( DÔ$7Ñ8Ô8Ð8Ð8Ð8r'   c                ó   — | j         S ©N)rj   )r7   s    r(   rU   zGifImageFile.tellù  s
   € ØŒ|Ðr'   )r+   r3   )r:   r*   r+   r,   )r+   rA   )r+   r]   )r+   r,   )rf   r]   r+   rA   )T)rf   r]   ro   r,   r+   rA   )r   r    r!   ÚformatÚformat_descriptionÚ!_close_exclusive_fp_after_loadingrR   r9   r@   r\   Úpropertyrc   r
   re   ra   rX   r¿   rÈ   rU   Ú__classcell__)rÂ   s   @r(   r1   r1   V   s+  ø€ € € € € Ø€FØ)ÐØ(-Ð%à€Nðð ð ð ðð ð ð ðð ð ð ð6 ð	ð 	ð 	ñ „Xð	ð ðð ð ñ „_ðð"'ð 'ð 'ð 'ð !ð !ð !ð !ð !ðBð ð ð ð ð ð6(9ð (9ð (9ð (9ðTð ð ð ð ð ð ð r'   r1   r„   rƒ   )Ú1r„   rƒ   r›   úImage.Imagec                óž  — | j         t          v r|                      ¦   «          | S t          j        | j         ¦  «        dk    rx|                      dt          j        j        ¬¦  «        } | j        €J ‚| j        j         dk    r7| j        j	        D ]*}|d         dk    r| j        j	        |         | j
        d<    nŒ+| S |                      d	¦  «        S )
a  
    Takes an image (or frame), returns an image in a mode that is appropriate
    for saving in a Gif.

    It may return the original image, or it may return an image converted to
    palette or 'L' mode.

    :param im: Image object
    :returns: Image object
    rL   rƒ   ©rS   Nr‚   r<   r   r†   r„   )r¡   ÚRAWMODEr•   r   Úgetmodebaser£   ÚPaletteÚADAPTIVErS   ÚcolorsrN   )r›   Úrgbas     r(   Ú_normalize_moderÚ     sÊ   € ð 
„w•'ÐÐØ
�Š‰	Œ	ˆ	Øˆ	ÝÔ˜œÑ!Ô! UÒ*Ð*Ø�ZŠZ˜¥U¤]Ô%;ˆZÑ<Ô<ˆØŒzÐ%Ð%Ð%ØŒ:Œ?˜fÒ$Ð$Øœ
Ô)ð ð �Ø˜”7˜a’<�<Ø.0¬jÔ.?ÀÔ.E�B”G˜NÑ+Ø�Eð  ð ˆ	Ø�:Š:�c‰?Œ?Ðr'   rS   ú_Palette | NonerN   údict[str, Any]c                ó´  — d}|rgt          |t          t          t          f¦  «        rt          |dd…         ¦  «        }t          |t          j        ¦  «        rt          |j        ¦  «        }| j        dk    r+|s(|                      d¦  «        }|€J ‚t          |¦  «        }nC|s&t          d„ t          d¦  «        D ¦   «         ¦  «        }t	          j        d|¬¦  «        | _        |€J ‚|r÷g }| j        €J ‚t          dt          |¦  «        d¦  «        D ]V}t          |||dz   …         ¦  «        }| j        j                             |¦  «        }||v rd}|                     |¦  «         ŒWt          |¦  «        D ]1\  }}|€*t          t          |¦  «        ¦  «        D ]}	|	|vr|	||<    nŒŒ2g }
|D ]}|€J ‚|
                     |¦  «         Œ|                      |
¦  «        } nat!          | |¦  «        }|�O|                      ||¦  «        } d	|v r3	 |                     |d	         ¦  «        |d	<   n# t$          $ r |d	= Y nw xY w| S | j        €J ‚|| j        _        | S )
at  
    Normalizes the palette for image.
      - Sets the palette to the incoming palette, if provided.
      - Ensures that there's a palette for L mode images
      - Optimizes the palette if necessary/desired.

    :param im: Image object
    :param palette: bytes object containing the source palette, or ....
    :param info: encoderinfo
    :returns: Image object
    Ni   rƒ   c              3  ó    K  — | ]	}|d z  V — Œ
dS )r<   Nr&   )Ú.0r?   s     r(   ú	<genexpr>z%_normalize_palette.<locals>.<genexpr>>  s&   è è € Ð&BÐ&B°! q¨A¡vÐ&BÐ&BÐ&BÐ&BÐ&BÐ&Br'   rL   rÓ   r   r<   r†   )r�   r*   Ú	bytearrayÚlistr   rS   r¡   rÅ   r=   r>   r‹   rØ   r¦   r—   Ú	enumerateÚremap_paletteÚ_get_optimizeÚindexr–   )r›   rS   rN   Úsource_paletteÚ
im_paletteÚused_palette_colorsr?   Úsource_colorræ   ÚjÚdest_mapÚoptimized_palette_colorss               r(   Ú_normalize_paletterî   !  så  € ð €NØð 8å�g¥¥yµ$Ð7Ñ8Ô8ð 	6Ý& w¨t°¨t¤}Ñ5Ô5ˆNÝ�g�|Ô8Ñ9Ô9ð 	8Ý& w¤Ñ7Ô7ˆNà	„w�#‚~€~Øð 	3ØŸš tÑ,Ô,ˆJØÐ)Ð)Ð)Ý& zÑ2Ô2ˆNøàð 	CÝ&Ð&BÐ&Bµu¸S±z´zÐ&BÑ&BÔ&BÑBÔBˆNÝ!Ô.¨u¸nÐMÑMÔMˆŒ
ØÐ%Ð%Ð%àð Ø02ÐØŒzÐ%Ð%Ð%Ý�q�#˜nÑ-Ô-¨qÑ1Ô1ð 	.ð 	.ˆAÝ  °°A¸±E°	Ô!:Ñ;Ô;ˆLØ”JÔ%×)Ò)¨,Ñ7Ô7ˆEØÐ+Ð+Ð+Ø�Ø×&Ò& uÑ-Ô-Ð-Ð-Ý!Ð"5Ñ6Ô6ð 	ð 	‰HˆAˆuØˆ}Ý�sÐ#6Ñ7Ô7Ñ8Ô8ð ð �AØÐ 3Ð3Ð3Ø12Ð+¨AÑ.Ø˜ð 4øð !ˆØ(ð 	#ð 	#ˆEØÐ$Ð$Ð$Ø�OŠO˜EÑ"Ô"Ð"Ð"Ø×Ò˜hÑ'Ô'ˆˆå#0°°TÑ#:Ô#:Ð Ø#Ð/Ø×!Ò!Ð":¸NÑKÔKˆBØ Ð%Ð%ð-Ø+C×+IÒ+IØ˜^Ô,ñ,ô ,�D˜Ñ(Ð(øõ "ð -ð -ð -Ø˜^Ð,Ð,Ð,ð-øøøàˆIàŒ:Ð!Ð!Ð!Ø'€B„JÔØ€Is   ÈH. È.H>È=H>r5   ú	IO[bytes]rA   c                óz  — t          | ¦  «        }|j                             ¦   «         D ]5\  }}t          |t          ¦  «        r| j                             ||¦  «         Œ6t          ||| j        ¦  «        }t          || j        ¦  «        D ]}| 	                    |¦  «         Œd}t          | ¦  «        r|dz  }t          || d|¦  «         dt          | ¦  «        f|_        t          j        ||t          j        dddg| j        ¢R dt"          |j                 ¦  «        g¦  «         | 	                    d¦  «         d S )Nr   r�   ©r   r   rF   rŽ   ó    )rÚ   rN   Úitemsr�   ÚstrÚencoderinfoÚ
setdefaultrî   Ú_get_global_headerÚwriteÚget_interlaceÚ_write_local_headerÚencoderconfigr   Ú_saver«   r˜   rÔ   r¡   )r›   r5   rS   Úim_outr¹   Úvr8   rZ   s           r(   Ú_write_single_framerÿ   h  s>  € õ
 ˜RÑ Ô €FØ”×!Ò!Ñ#Ô#ð ,ð ,‰ˆˆ1Ý�a�ÑÔð 	,ØŒN×%Ò% a¨Ñ+Ô+Ð+øÝ ¨°´Ñ@Ô@€Få ¨¬Ñ7Ô7ð ð ˆØ
�Š�‰Œˆˆð €EÝ�RÑÔð Ø˜‘
ˆÝ˜˜B ¨Ñ.Ô.Ð.à�}¨RÑ0Ô0Ð1€FÔÝ„OØ�•Y”_ U¨Q°Ð,<°B´GÐ,<Ð,<¸aÅÈÌÔAUÑVÔVÐWñô ð ð ‡H‚HˆU�O„O€O€O€Or'   Úbase_imÚim_frameú4tuple[Image.Image, tuple[int, int, int, int] | None]c                óð   — d„ | |fD ¦   «         }|d         |d         k    r*|                      d¦  «        }|                       d¦  «        } t          j        || ¦  «        }||                     d¬¦  «        fS )Nc                óR   — g | ]$}|j         rt          |j         j         ¦  «        nd ‘Œ%S )r'   )rS   r*   )rß   r›   s     r(   ú
<listcomp>z_getbbox.<locals>.<listcomp>‡  s>   € ð ð ð Ø=? R¤ZÐ8�ˆbŒjÔ Ñ!Ô!Ð!°Sðð ð r'   r   r   r‚   F)Ú
alpha_only)r£   r   Úsubtract_moduloÚgetbbox)r   r  Úpalette_bytesÚdeltas       r(   Ú_getbboxr  „  s‹   € ðð ØDKÈXÐCVðñ ô €Mð �QÔ˜=¨Ô+Ò+Ð+Ø×#Ò# FÑ+Ô+ˆØ—/’/ &Ñ)Ô)ˆÝÔ& x°Ñ9Ô9€EØ�%—-’-¨5�-Ñ1Ô1Ð1Ð1r'   c                  ó.   — e Zd ZU ded<   ded<   ded<   dS )Ú_FramerÑ   r›   z tuple[int, int, int, int] | NoneÚbboxrÜ   rõ   N)r   r    r!   Ú__annotations__r&   r'   r(   r  r  ‘  s3   € € € € € € Ø€O€O�OØ*Ð*Ð*Ñ*ØÐÐÑÐÐr'   r  c           	     óŠ
  — | j                              d¦  «        }| j                              d| j                             d¦  «        ¦  «        }g }d }d}d }t          j        | g| j                              dg ¦  «        ¦  «        D �]Ù}	t          j        |	¦  «        D �]À}
t          |
                     ¦   «         ¦  «        }
|dk    rV|
j         	                    ¦   «         D ]<\  }}|dk    rŒt          |t          ¦  «        r| j                              ||¦  «         Œ=| j                              ¦   «         }d|
j        v r!|                     d|
j        d         ¦  «         t          |
||¦  «        }
t          |t          t          f¦  «        r||         |d<   n|€d|
j        v r|
j        d         |d<   t          |t          t          f¦  «        r||         |d<   |dz  }d }|�rN|�rKt!          ||
¦  «        \  }}|sO|                     d¦  «        r8|d         j                              dd¦  «        |d         z   |d         j         d<   �Œ¯|d         j                              d¦  «        dk    r¹| j                              d| j                             d¦  «        ¦  «        }|�v|€\t#          |
|¦  «        }t%          j        d	|
j        |¦  «        }|d         j        j        }|€J ‚|                     ||j        ¦  «         t!          ||
¦  «        d         }�nddg|
j        ¢R }�n|                     d
¦  «        rô|
j        dk    réd|vr8|
j        €J ‚	 |
j                             |
¦  «        |d<   n# t4          $ r Y nw xY wd|v r©|j        dk    rT|                     ¦   «         \  }}}}t9          j        t9          j        ||¦  «        t9          j        ||¦  «        ¦  «        }|                     dgd¢d¦  «        }|
                     ¦   «         }|                     |d         |¬¦  «         nd }|
}|                      tC          |p|
||¦  «        ¦  «         �ŒÂ�ŒÛtE          |¦  «        dk    r,d|d         j         v r|d         j         d         | j         d<   dS |D ]¡}|j        }
|j#        s0tI          |
|j         ¦  «        D ]}| %                    |¦  «         Œd}nJ|s
d|j         d<   |j#        ddg|
j        ¢R k    r|
 &                    |j#        ¦  «        }
|j#        d d…         }tO          ||
||j         ¦  «         Œ¢dS )Nrv   Údisposalr   Úappend_imagesr†   r   rq   r   rƒ   ÚoptimizerÐ   r‚   rz   )ÿ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   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   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   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   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   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   )ÚmaskFrñ   TÚinclude_color_table)(rõ   r¦   rN   r   Úchainr   ÚIteratorrÚ   r…   ró   r�   rô   rö   rî   râ   r‹   r  Ú_get_backgroundr   Únewr˜   r›   rS   r¼   r¡   Ú_new_color_indexr–   Úsplitr   ÚlighterÚpointrœ   r—   r  r>   r  r÷   rø   ÚcropÚ_write_frame_data)r›   r5   rS   rv   r  Ú	im_framesÚprevious_imÚframe_countÚbackground_imÚ
imSequencer  r¹   rþ   rõ   Ú
diff_framer
  r  r‡   rK   Úfirst_paletteÚrÚgÚbÚaÚ	unchangedÚ
frame_datar8   Úoffsets                               r(   Ú_write_multiple_framesr.  —  sº  € ð Œ~×!Ò! *Ñ-Ô-€HØŒ~×!Ò! *¨b¬g¯kªk¸*Ñ.EÔ.EÑFÔF€Hà €IØ&*€KØ€KØ€MÝ”o r d¨B¬N×,>Ò,>¸ÐPRÑ,SÔ,SÑTÔTð MPñ MPˆ
Ý%Ô.¨zÑ:Ô:ð L	Pñ L	PˆHå& x§}¢}¡¤Ñ7Ô7ˆHØ˜aÒÐØ$œM×/Ò/Ñ1Ô1ð 8ð 8‘D�A�qØ˜NÒ*Ð*Ø Ý! !¥SÑ)Ô)ð 8Øœ×1Ò1°!°QÑ7Ô7Ð7øàœ.×-Ò-Ñ/Ô/ˆKØ ¤Ð.Ð.Ø×&Ò& ~°x´}À^Ô7TÑUÔUÐUÝ)¨(°G¸[ÑIÔIˆHÝ˜(¥T­5 MÑ2Ô2ð DØ*2°;Ô*?�˜JÑ'Ð'ØÐ! j°H´MÐ&AÐ&AØ*2¬-¸
Ô*C�˜JÑ'Ý˜(¥T­5 MÑ2Ô2ð @Ø*2°;Ô*?�˜JÑ'Ø˜1ÑˆKàˆJØñ 3˜[ñ 3å& {°HÑ=Ô=‘��tØð à"—’ zÑ2Ô2ð à% bœMÔ5×9Ò9¸*ÀaÑHÔHØ)¨*Ô5ñ6ð " "œÔ1°*Ñ=ñ Ø˜R”=Ô,×0Ò0°Ñ<Ô<ÀÒAÐAð œN×.Ò.Ø&¨¬¯ª°NÑ(CÔ(Cñô �Eð Ð(Ø(Ð0Ý)8¸À5Ñ)IÔ)I˜JÝ,1¬I°c¸8¼=È*Ñ,UÔ,U˜MØ,5°a¬L¬OÔ,C˜MØ#0Ð#<Ð#<Ð#<Ø)×4Ò4°]ÀMÔDVÑWÔWÐWÝ'¨°xÑ@Ô@ÀÔC˜™à ! 1Ð5 x¤}Ð5Ð5˜™Ø —_’_ ZÑ0Ô0ð V°X´]ÀcÒ5IÐ5IØ%¨[Ð8Ð8Ø'Ô/Ð;Ð;Ð;ð!à (Ô 0× AÒ AÀ(Ñ KÔ Kð (¨Ñ7Ð7øõ  *ð !ð !ð !Ø ˜Dð!øøøà%¨Ð4Ð4à œ:¨Ò/Ð/à).¯ª©¬™J˜A˜q ! QÝ$.Ô$6Ý *Ô 2°1°aÑ 8Ô 8Ý *Ô 2°1°aÑ 8Ô 8ñ%ô %˜Eð %*§K¢K°Ð0B°zÐ0BÀCÑ$HÔ$H˜	Ø%-§]¢]¡_¤_˜
Ø"×(Ò(¨°^Ô)DÈ9Ð(ÑUÔUÐUøà�Ø"ˆKØ×Ò�V JÐ$:°(¸DÀ+ÑNÔNÑOÔOÐOÑOñYL	Põ\ ˆ9�~„~˜ÒÐØ˜ 1œÔ1Ð1Ð1à)2°1¬Ô)AÀ*Ô)MˆBŒN˜:Ñ&Øˆuàð Hð Hˆ
Ø”=ˆØŒð 	)å'¨°*Ô2HÑIÔIð ð �Ø—’˜‘”��ØˆFˆFð ð EØ@D�
Ô&Ð'<Ñ=àŒ 1 aÐ"8¨(¬-Ð"8Ð"8Ò8Ð8Ø#Ÿ=š=¨¬Ñ9Ô9�Ø”_ R a RÔ(ˆFÝ˜"˜h¨°
Ô0FÑGÔGÐGÐGØˆ4s   ÍM4Í4
NÎ NÚfilenameústr | bytesc                ó,   — t          | ||d¬¦  «         d S )NT)Úsave_all)rü   )r›   r5   r/  s      r(   Ú	_save_allr3  	  s   € Ý	ˆ"ˆb�( TÐ*Ñ*Ô*Ð*Ð*Ð*r'   r2  c                óŠ  — d| j         v s	d| j        v r4| j                              d| j                             d¦  «        ¦  «        }nd }| j                              dd¦  «         |rt	          | ||¦  «        st          | ||¦  «         |                     d¦  «         t          |d¦  «        r|                     ¦   «          d S d S )NrS   r  Trs   Úflush)	rõ   rN   r¦   rö   r.  rÿ   rø   Úhasattrr5  )r›   r5   r/  r2  rS   s        r(   rü   rü     sË   € ð �B”NÐ"Ð" i°2´7Ð&:Ð&:Ø”.×$Ò$ Y°´·²¸IÑ0FÔ0FÑGÔGˆˆàˆØ
Œ×!Ò! *¨dÑ3Ô3Ð3àð -Õ1°"°b¸'ÑBÔBð -Ý˜B  GÑ,Ô,Ð,à‡H‚HˆT�N„N€Nåˆr�7ÑÔð Ø
�Š‰
Œ
ˆ
ˆ
ˆ
ðð r'   r]   c                óp   — | j                              dd¦  «        }t          | j        ¦  «        dk     rd}|S )Nr¯   r   é   r   )rõ   r¦   Úminr˜   )r›   r¯   s     r(   rù   rù      s9   € Ø”×"Ò" ;°Ñ2Ô2€Iõ ˆ2Œ7�|„|�bÒÐØˆ	àÐr'   r-  útuple[int, int]rZ   c                ó2  — 	 |j         d         }n# t          $ r d }Y nw xY wd|j         v rt          |j         d         dz  ¦  «        }nd}t          |j                              dd¦  «        ¦  «        }|€|dk    s|r…|�dnd}||dz  z  }|                      dt          d	¦  «        z   t          d
¦  «        z   t          |¦  «        z   t          |¦  «        z   t          |pd¦  «        z   t          d¦  «        z   ¦  «         |j                              d¦  «        }|r*t          |¦  «        }	t          |	¦  «        }
|
r
|dz  }||
z  }|                      dt          |d         ¦  «        z   t          |d         ¦  «        z   t          |j	        d         ¦  «        z   t          |j	        d         ¦  «        z   t          |¦  «        z   ¦  «         |r$|
r"|                      t          |	¦  «        ¦  «         |                      t          d¦  «        ¦  «         d S )Nr†   rv   rG   r   r  r   r   rt   ru   r€   r  rI   r~   rF   )rõ   ÚKeyErrorr]   r¦   rø   r   Úo16Ú_get_palette_bytesÚ_get_color_table_sizer˜   Ú_get_header_palette)r5   r›   r-  rZ   r†   rv   r  Úpacked_flagr  r	  Úcolor_table_sizes              r(   rú   rú   *  sH  € ðØ”~ nÔ5ˆˆøÝð ð ð Øˆˆˆðøøøð �R”^Ð#Ð#Ý�r”~ jÔ1°BÑ6Ñ7Ô7ˆˆàˆå�2”>×%Ò% j°!Ñ4Ô4Ñ5Ô5€HàÐ 8¨q¢= =°H =Ø'Ð3�a�a¸ˆØ�x 1‘}Ñ$ˆà
�ŠØÝ�‰gŒgñå�‰eŒeñõ �‰oŒoñõ �(‰mŒmñ	õ
 �Ð" Ñ#Ô#ñ$õ �‰eŒeññ	
ô 	
ð 	
ð œ.×,Ò,Ð-BÑCÔCÐØð -Ý*¨2Ñ.Ô.ˆÝ0°Ñ?Ô?ÐØð 	-Ø˜C‘KˆEØÐ,Ñ,ˆEà‡H‚HØÝ
ˆf�QŒi‰.Œ.ñ	å
ˆf�QŒi‰.Œ.ñ	õ ˆbŒg�aŒj‰/Œ/ñ	õ ˆbŒg�aŒj‰/Œ/ñ		õ
 ˆU‰)Œ)ñ	ñô ð ð ð 5Ð/ð 5Ø
�ŠÕ$ ]Ñ3Ô3Ñ4Ô4Ð4Ø‡H‚H�R�‰UŒU�O„O€O€O€Os   ‚ �žúlist[int] | Nonec                ó„  — | j         dv �r5|�r2|                     d¦  «        �r| j        dk    �r| j        dk    �rt          p
| j         dk    }|s| j        | j        z  dk     rÝg }t          |                      ¦   «         ¦  «        D ]\  }}|r|                     |¦  «         Œ|s t          |¦  «        t          |¦  «        k    r|S | j
        €J ‚t          | j
        j
        ¦  «        t          j        | j
        j         ¦  «        z  }d|dz
                       ¦   «         z  }t          |¦  «        |dz  k    r|dk    r|S dS )	aL  
    Palette optimization is a potentially expensive operation.

    This function determines if the palette should be optimized using
    some heuristics, then returns the list of palette entries in use.

    :param im: Image object
    :param info: encoderinfo
    :returns: list of indexes of palette entries in use, or None
    )rƒ   r„   r  r   r„   i   Nr   r   )r¡   r¦   ÚwidthÚheightÚ_FORCE_OPTIMIZErã   Ú	histogramr—   r™   r>   rS   r   ÚgetmodebandsÚ
bit_length)r›   rN   Úoptimiseré   r?   ÚcountÚnum_palette_colorsÚcurrent_palette_sizes           r(   rå   rå   a  so  € ð 	Œ�:ÐÑØñ 	à�HŠH�ZÑ Ô ñ 	ð ŒH˜ŠM‰MØŒI˜ŠN‰Nõ #Ð4 b¤g°¢nˆØð 	+�r”x "¤)Ñ+¨iÒ7Ð7à"$ÐÝ% b§l¢l¡n¤nÑ5Ô5ð 2ð 2‘��5Øð 2Ø'×.Ò.¨qÑ1Ô1Ð1øàð +�3Ð2Ñ3Ô3µsÐ;NÑ7OÔ7OÒOÐOØ*Ð*à”:Ð)Ð)Ð)Ý!$ R¤ZÔ%7Ñ!8Ô!8½EÔ<NØ”
”ñ=ô =ñ "Ðð $%Ð);¸aÑ)?×(KÒ(KÑ(MÔ(MÑ#MÐ õ Ð'Ñ(Ô(Ð,@ÀAÑ,EÒEÐEà(¨1Ò,Ð,à*Ð*Øˆ4r'   r	  c                ó¨   — | sdS t          | ¦  «        dk     rdS t          j        t          j        t          | ¦  «        dz  d¦  «        ¦  «        dz
  S )Nr   r   r   r<   r   )r>   r   ÚceilÚlog)r	  s    r(   r?  r?  —  sV   € àð CØˆqÝ	ˆ]Ñ	Ô	˜aÒ	Ð	ØˆqåŒy�œ¥# mÑ"4Ô"4¸Ñ"9¸1Ñ=Ô=Ñ>Ô>ÀÑBÐBr'   c                ó�   — t          | ¦  «        }d|z  t          | ¦  «        dz  z
  }|dk    r| t          d¦  «        dz  |z  z  } | S )zä
    Returns the palette, null padded to the next power of 2 (*3) bytes
    suitable for direct inclusion in the GIF header

    :param palette_bytes: Unpadded palette bytes, in RGBRGB form
    :returns: Null padded palette
    r   r<   r   )r?  r>   r   )r	  rB  Úactual_target_size_diffs      r(   r@  r@  ¡  s]   € õ -¨]Ñ;Ô;Ðð  !Ð$4Ñ4½¸MÑ8JÔ8JÈaÑ8OÑOÐØ Ò"Ð"Ø�˜A™œ ™Ð%<Ñ<Ñ<ˆØÐr'   c                óè   ‡— | j         sdS t          | j         j         ¦  «        Š| j         j        dk    r>d                     ˆfd„t	          t          ‰¦  «        dz  ¦  «        D ¦   «         ¦  «        Š‰S )zš
    Gets the palette for inclusion in the gif header

    :param im: Image object
    :returns: Bytes, len<=768 suitable for inclusion in gif header
    r'   r‚   c              3  ó>   •K  — | ]}‰|d z  |d z  dz   …         V — ŒdS )r€   r<   Nr&   )rß   r?   rS   s     €r(   rà   z%_get_palette_bytes.<locals>.<genexpr>¿  s9   øè è € ÐXÐX¸!˜7 1 q¡5¨1¨q©5°1©9Ð#4Ô5ÐXÐXÐXÐXÐXÐXr'   r<   )rS   r*   r¡   r¬   r=   r>   )r›   rS   s    @r(   r>  r>  ³  st   ø€ ð Œ:ð Øˆså�B”JÔ&Ñ'Ô'€GØ	„z„˜&Ò Ð Ø—(’(ÐXÐXÐXÐX½uÅSÈÁ\Ä\ÐUVÑEVÑ?WÔ?WÐXÑXÔXÑXÔXˆØ€Nr'   Úinfo_backgroundú=int | tuple[int, int, int] | tuple[int, int, int, int] | Nonec                óÚ   — d}|rft          |t          ¦  «        rO| j        €J ‚	 | j                             || ¦  «        }n+# t          $ r}t          |¦  «        dvr‚ Y d }~n
d }~ww xY w|}|S )Nr   )z$cannot allocate more than 256 colorsz/cannot add non-opaque RGBA color to RGB palette)r�   r‹   rS   Úgetcolorr–   rô   )r›   rV  rK   rn   s       r(   r  r  Ã  s³   € ð €JØð )Ý�o¥uÑ-Ô-ð 	)ð ”:Ð)Ð)Ð)ð
ØœZ×0Ò0°À"ÑEÔE�
�
øÝð ð ð Ý�q‘6”6ð "ð ð ð ðð ð ð ð øøøøðøøøð )ˆJØÐs   ¤A  Á 
A&Á
A!Á!A&úlist[bytes]c                óH  — d}| j                              d¦  «        dk    sE|rEd|v s?|                     d¦  «        €*|                     d¦  «        s|                     d¦  «        rd}t          | |                     d	¦  «        ¦  «        }t          | ¦  «        }t	          |¦  «        }d
|z   t          | j        d         ¦  «        z   t          | j        d         ¦  «        z   t          |dz   ¦  «        t          |¦  «        t          d¦  «        z   t          |¦  «        g}|                     d¦  «        �~| 	                    dt          d¦  «        z   t          d¦  «        z   dz   t          d¦  «        z   t          d¦  «        z   t          |d         ¦  «        z   t          d¦  «        z   ¦  «         |                     d¦  «        rØ| 	                    dt          d¦  «        z   ¦  «         |d         }t          |t          ¦  «        r|                     ¦   «         }t          dt          |¦  «        d¦  «        D ]A}|||dz   …         }	| 	                    t          t          |	¦  «        ¦  «        |	z   ¦  «         ŒB| 	                    t          d¦  «        ¦  «         |S )z2Return a list of strings representing a GIF headers   87arE   s   89ar†   r}   Nrv   rr   rK   s   GIFr   r   rI   rt   rz   rJ   r|   r<   rx   )rN   r¦   r  r>  r?  r=  r˜   r   r@  r—   r�   rô   Úencoder=   r>   )
r›   rN   rE   rK   r	  rB  Úheaderrr   r?   Úsubblocks
             r(   r÷   r÷   Þ  s‹  € ð €GØ	„w‡{‚{�9ÑÔ Ò'Ð'Øð (ð ˜dÐ"Ð"Ø�xŠx˜ÑÔÐ+Ø�xŠx˜
Ñ#Ô#ð ,à�xŠx˜	Ñ"Ô"ð ,ð
 ˆå   T§X¢X¨lÑ%;Ô%;Ñ<Ô<€Jå& rÑ*Ô*€MÝ,¨]Ñ;Ô;Ðð 	Ø
ñ	å
ˆbŒg�aŒj‰/Œ/ñ	õ ˆbŒg�aŒj‰/Œ/ñ	õ 	Ð˜cÑ!Ñ"Ô"å
ˆ:‰Œ�˜A™œÑå˜MÑ*Ô*ð€Fð ‡x‚x�ÑÔÐ#Ø�ŠØÝ�‰gŒgñå�‰fŒfñð ñõ �‰eŒeñ	õ
 �‰eŒeñõ �$�v”,ÑÔñ õ �‰eŒeññ		
ô 		
ð 		
ð ‡x‚x�	ÑÔð 
Ø�Š�d�R ™WœW‘nÑ%Ô%Ð%à�y”/ˆÝ�g�sÑ#Ô#ð 	'Ø—n’nÑ&Ô&ˆGÝ�q�#˜g™,œ,¨Ñ,Ô,ð 	8ð 	8ˆAØ˜q 1 s¡7˜{Ô+ˆHØ�MŠM�"�S ™]œ]Ñ+Ô+¨hÑ6Ñ7Ô7Ð7Ð7à�Š•b˜‘e”eÑÔÐØ€Mr'   Úparamsc                ó  — 	 ||_         t          | ||d¦  «         t          j        || t          j        dddg|j        ¢R dt          |j                 ¦  «        g¦  «         |                      d¦  «         |` d S # |` w xY w)Nr   rŽ   rò   )	rõ   rú   r   rü   r«   r˜   rÔ   r¡   rø   )r5   r  r-  r_  s       r(   r  r    sš   € ð!Ø%ˆÔõ 	˜B ¨&°!Ñ4Ô4Ð4åŒØØÝŒ_˜U Q¨Ð$:¨H¬MÐ$:Ð$:¸A½wÀxÄ}Ô?UÑVÔVÐWñ	
ô 	
ð 	
ð 	�Š�‰ŒˆàÐ Ð Ð øˆHÐ Ð Ð Ð Ð s   ‚A4A: Á:A>údict[str, Any] | Noneú$tuple[list[bytes], list[int] | None]c                óÞ   — |€i }t          | |¦  «        }d|vrd| j        v r| j        d         |d<   t          | ||¦  «        }|j        | _        |j        | _        t          | |¦  «        }||fS )a  
    Legacy Method to get Gif data from image.

    Warning:: May modify image data.

    :param im: Image object
    :param palette: bytes object containing the source palette, or ....
    :param info: encoderinfo
    :returns: tuple of(list of header items, optimized palette)

    NrK   )rå   rN   rî   rS   r›   r÷   )r›   rS   rN   ré   Úim_modr]  s         r(   Ú	getheaderre  6  s„   € ð €|Øˆå'¨¨DÑ1Ô1Ðà˜4ÐÐ L°B´GÐ$;Ð$;ØœW \Ô2ˆˆ\Ñå  G¨TÑ2Ô2€FØ”€B„JØŒI€B„EÝ  DÑ)Ô)€FàÐ&Ð&Ð&r'   rñ   r   c                ó˜   — ddl m}  G d„ d|¦  «        }|                      ¦   «           |¦   «         }t          || ||¦  «         |j        S )aë  
    Legacy Method

    Return a list of strings representing this image.
    The first string is a local image header, the rest contains
    encoded image data.

    To specify duration, add the time in milliseconds,
    e.g. ``getdata(im_frame, duration=1000)``

    :param im: Image object
    :param offset: Tuple of (x, y) pixels. Defaults to (0, 0)
    :param \**params: e.g. duration or other encoder info parameters
    :returns: List of bytes containing GIF encoded frame data

    r   )ÚBytesIOc                  ó   — e Zd Zg Zdd„ZdS )úgetdata.<locals>.Collectorr9   r   r+   r]   c                óT   — | j                              |¦  «         t          |¦  «        S rÊ   )r9   r—   r>   )r7   r9   s     r(   rø   z getdata.<locals>.Collector.writel  s$   € ØŒI×Ò˜TÑ"Ô"Ð"Ý�t‘9”9Ðr'   N)r9   r   r+   r]   )r   r    r!   r9   rø   r&   r'   r(   Ú	Collectorri  i  s-   € € € € € Øˆð	ð 	ð 	ð 	ð 	ð 	r'   rk  )Úiorg  r•   r  r9   )r›   r-  r_  rg  rk  r5   s         r(   r½   r½   T  su   € ð& ÐÐÐÐÐðð ð ð ð �Gñ ô ð ð ‡G‚G�I„I€Ià	ˆ‰Œ€Bå�b˜"˜f fÑ-Ô-Ð-àŒ7€Nr'   z.gifz	image/gif)r)   r*   r+   r,   )r›   rÑ   r+   rÑ   )r›   rÑ   rS   rÛ   rN   rÜ   r+   rÑ   )r›   rÑ   r5   rï   rS   rÛ   r+   rA   )r   rÑ   r  rÑ   r+   r  )r›   rÑ   r5   rï   rS   rÛ   r+   r,   )r›   rÑ   r5   rï   r/  r0  r+   rA   )F)
r›   rÑ   r5   rï   r/  r0  r2  r,   r+   rA   )r›   rÑ   r+   r]   )
r5   rï   r›   rÑ   r-  r:  rZ   r]   r+   rA   )r›   rÑ   rN   rÜ   r+   rC  )r	  r*   r+   r]   )r	  r*   r+   r*   )r›   rÑ   r+   r*   )r›   rÑ   rV  rW  r+   r]   )r›   rÑ   rN   rÜ   r+   rZ  )
r5   rï   r  rÑ   r-  r:  r_  rÜ   r+   rA   )NN)r›   rÑ   rS   rÛ   rN   ra  r+   rb  )rñ   )r›   rÑ   r-  r:  r_  r   r+   rZ  )FÚ
__future__r   Ú__lazy_modules__r   r   Úenumr	   Ú	functoolsr
   Útypingr   r   Ú r   r   r   r   r   Ú_binaryr   rO   r   r   r=  Ú_utilr   ÚTYPE_CHECKINGr   r   r   r   Ú_typingr   r   r#   rŸ   r/   r1   rÔ   rÚ   r*   rá   râ   r]   Ú_Paletterî   rÿ   r  r  r.  r3  rü   rù   rú   rG  rå   r?  r@  r>  r  r÷   r  re  r½   Úregister_openrË   Úregister_saveÚregister_save_allÚregister_extensionÚregister_mimer&   r'   r(   ú<module>r}     sY  ðð4 #Ð "Ð "Ð "Ð "Ð "ðð ð Ð ð Ð Ð Ð Ø €€€Ø Ð Ð Ð Ð Ð Ø %Ð %Ð %Ð %Ð %Ð %Ø #Ð #Ð #Ð #Ð #Ð #Ð #Ð #ðð ð ð ð ð ð ð ð ð ð ð ð ð ð "Ð !Ð !Ð !Ð !Ð !Ø Ð Ð Ð Ð Ð Ø !Ð !Ð !Ð !Ð !Ð !Ø  Ð  Ð  Ð  Ð  Ð  à€Øð  Ø'Ð'Ð'Ð'Ð'Ð'Ð'Ð'Ð'Ð'àÐÐÐÐÐØÐÐÐÐÐðð ð ð ð �gñ ô ð ð #Ô2Ð ð5ð 5ð 5ð 5ðdð dð dð dð d�9Ô&ñ dô dð dðV ˜# CÐ
(Ð
(€ðð ð ð ð4 �9Ñ˜t CœyÑ(¨<Ô+DÑD€ðDð Dð Dð DðNð ð ð ð8
2ð 
2ð 
2ð 
2ð ð  ð  ð  ð  ˆZñ  ô  ð  ðoð oð oð oðd+ð +ð +ð +ð
 MRðð ð ð ð ð&ð ð ð ð/ð /ð /ð /ðh €ð3ð 3ð 3ð 3ðlCð Cð Cð Cðð ð ð ð$ð ð ð ð ð ð ð ð6:ð :ð :ð :ðz!ð !ð !ð !ð8 UYð'ð 'ð 'ð 'ð 'ð> 06ð"ð "ð "ð "ð "ðP €Ô �LÔ'¨°wÑ ?Ô ?Ð ?Ø €Ô �LÔ'¨Ñ /Ô /Ð /Ø €Ô ˜Ô+¨YÑ 7Ô 7Ð 7Ø €Ô ˜Ô,¨fÑ 5Ô 5Ð 5Ø €Ô �LÔ'¨Ñ 5Ô 5Ð 5Ð 5Ð 5r'   