Ë
    ™2ÚiM‹  ã                   óz  — d dl Z d dlZd dlZd dlZd dlmZ ddlmZmZm	Z	m
Z
mZ ddlmZ ddlmZ ddlmZ  G d„ d	e«      Zej&                  Zd
„ Z G d„ de	j                  «      ZddddœZd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd&d„Zd„ Zd„ Z d„ Z!dZ"d„ Z#d„ Z$d„ Z%d„ Z&d„ Z'd „ Z(d!„ Z)d'd"„Z*d(d#„Z+ ejX                  ejZ                  ee«        ej\                  ejZ                  e«        ej^                  ejZ                  e«        ej`                  ejZ                  d$«        ejb                  ejZ                  d%«       y))é    N)ÚIntEnumé   )ÚImageÚ
ImageChopsÚ	ImageFileÚImagePaletteÚImageSequence)Úi16le)Úo8)Úo16lec                   ó   — e Zd ZdZdZdZdZy)ÚLoadingStrategyz.. versionadded:: 9.1.0r   r   é   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚRGB_AFTER_FIRSTÚ RGB_AFTER_DIFFERENT_PALETTE_ONLYÚ
RGB_ALWAYS© ó    úI/var/www/html/acx/venv/lib/python3.12/site-packages/PIL/GifImagePlugin.pyr   r   '   s   „ Ù!à€OØ'(Ð$Ø�Jr   r   c                 ó   — | d d dv S )Né   )s   GIF87as   GIF89ar   )Úprefixs    r   Ú_acceptr   6   s   € Ø�"�1ˆ:Ð/Ð/Ð/r   c                   óz   ‡ — e Zd ZdZdZdZdZd„ Zd„ Zd„ Z	e
d„ «       Ze
d	„ «       Zd
„ Zdd„Zˆ fd„Zd„ Zd„ Zˆ xZS )ÚGifImageFileÚGIFzCompuserve GIFFNc                 ó„   — | j                   j                  d«      }|r#|d   r| j                   j                  |d   «      S y )Nr   r   )ÚfpÚread)ÚselfÚss     r   ÚdatazGifImageFile.dataF   s6   € Ø�G‰G�L‰L˜‹OˆÙ��1’Ø—7‘7—<‘<  !¡Ó%Ð%Ør   c                 óŠ   — t        dt        |«      d«      D ]*  }|dz  ||   cxk(  r||dz      cxk(  r||dz      k(  rŒ' y  y y)Nr   é   r   r   TF)ÚrangeÚlen)r$   ÚpÚis      r   Ú_is_palette_neededzGifImageFile._is_palette_neededL   sX   € Ü�qœ#˜a›& !Ó$ò 	ˆAØ˜‘F˜a ™dÔ: a¨¨A©¡hÔ:°!°A¸±E±(Ó:Ùð ;Ùð	ð r   c                 ób  — | j                   j                  d«      }t        |«      sd}t        |«      ‚|d d | j                  d<   t        |d«      t        |d«      f| _        g | _        |d   }|dz  dz   }|d	z  re|d
   | j                  d<   | j                   j                  d|z  «      }| j                  |«      r$t        j                  d|«      }|x| _        | _        | j                   | _        | j                   j                  «       | _        d | _        d | _        | j%                  d«       y )Né   znot a GIF filer   Úversioné   é
   é   r   é€   é   Ú
backgroundr(   ÚRGBr   )r"   r#   r   ÚSyntaxErrorÚinfoÚi16Ú_sizeÚtiler-   r   ÚrawÚglobal_paletteÚpaletteÚ_fpÚtellÚ_GifImageFile__rewindÚ	_n_framesÚ_is_animatedÚ_seek)r$   r%   ÚmsgÚflagsÚbitsr+   s         r   Ú_openzGifImageFile._openR   s  € à�G‰G�L‰L˜ÓˆÜ�qŒzØ"ˆCÜ˜cÓ"Ð"à   !˜uˆ�	‰	�)ÑÜ˜˜A“Y¤ A q£	Ð)ˆŒ
ØˆŒ	Ø�"‘ˆØ˜‘	˜Q‰ˆà�3Š;à&'¨¡eˆD�I‰I�lÑ#à—‘—‘˜Q $™YÓ'ˆAØ×&Ñ& qÔ)Ü ×$Ñ$ U¨AÓ.�Ø56Ð6�Ô# d¤là—7‘7ˆŒØŸ™Ÿ™›ˆŒØˆŒØ ˆÔØ�
‰
�1�r   c                 ó  — | j                   €6| j                  «       }	 	 | j                  | j                  «       dz   d«       Œ$| j                   S # t        $ r | j                  «       dz   | _         Y nw xY w| j	                  |«       ŒE)Nr   F)rC   rA   rE   ÚEOFErrorÚseek©r$   Úcurrents     r   Ún_frameszGifImageFile.n_framesn   sw   € à�>‰>Ð!Ø—i‘i“kˆGð1ØØ—J‘J˜tŸy™y›{¨Q™°Ô6ð ð
 �~‰~Ðøô ò 1Ø!%§¡£¨q¡�–ð1úà�I‰I�gÔøs   ž%A Á!A3Á2A3c                 óV  — | j                   €|| j                  � | j                  dk7  | _         | j                   S | j                  «       }|rd| _         | j                   S 	 | j                  dd«       d| _         | j                  |«       | j                   S # t        $ r
 d| _         Y Œ/w xY w)Nr   TF)rD   rC   rA   rE   rK   rL   rM   s     r   Úis_animatedzGifImageFile.is_animatedz   s«   € à×ÑÐ$Ø�~‰~Ð)Ø$(§N¡N°aÑ$7�Ô!ð × Ñ Ð ð Ÿ)™)›+�ÙØ(,�DÔ%ð × Ñ Ð ð2ØŸ
™
 1 eÔ,Ø,0˜Ô)ð —I‘I˜gÔ&Ø× Ñ Ð øô	 $ò 2Ø,1˜Ö)ð2ús   ÁB ÂB(Â'B(c                 óT  — | j                  |«      sy || j                  k  rd | _        | j                  d«       | j                  }t	        | j                  dz   |dz   «      D ]  }	 | j                  |«       Œ y # t
        $ r$}| j                  |«       d}t        |«      |‚d }~ww xY w)Nr   r   zno more images in GIF file)Ú_seek_checkÚ_GifImageFile__frameÚimrE   r)   rK   rL   )r$   ÚframeÚ
last_frameÚfÚerF   s         r   rL   zGifImageFile.seek�   sœ   € Ø×Ñ Ô&ØØ�4—<‘<ÒØˆDŒGØ�J‰J�qŒMà—\‘\ˆ
Ü�t—|‘| aÑ'¨°©Ó3ò 	+ˆAð+Ø—
‘
˜1•ñ	+øô ò +Ø—	‘	˜*Ô%Ø2�Ü˜s“m¨Ð*ûð+ús   Á&A:Á:	B'ÂB"Â"B'c                 óò  ‡ — |dk(  r]d‰ _         d ‰ _        d‰ _        ‰ j                  j	                  ‰ j
                  «       d‰ _        d‰ j                  v r,‰ j                  d= n‰ j                  r|r‰ j                  «        |‰ j                  dz   k7  rd|› �}t        |«      ‚‰ j                  ‰ _        ‰ j                   rN‰ j                  j	                  ‰ j                   «       ‰ j                  «       r	 ‰ j                  «       rŒd‰ _         ‰ j                  j                  d«      }|r|dk(  rt        ‚d }i }d }d }d }		 |s‰ j                  j                  d«      }|r|dk(  r�nÅ|dk(  �rA‰ j                  j                  d«      }‰ j                  «       }
|d   dk(  r5|
d   }|dz  r|
d	   }t        |
d«      d
z  |d<   d|z  }|dz	  }|r¼|‰ _        n´|d   dk(  r9d}|
r||
z  }‰ j                  «       }
|
rŒd|v r|dxx   d|z   z  cc<   n||d<   d }ŒÖ|d   dk(  rk|dk(  rf|
‰ j                  j!                  «       f|d<   |
d d dk(  r?‰ j                  «       }
t#        |
«      d	k\  r!|
d   dk(  rt        |
d«      ‰ j                  d<   ‰ j                  «       �rŽ	 ‰ j                  «       rŒ�nz|dk(  �rs‰ j                  j                  d«      }t        |d«      t        |d«      }}|t        |d«      z   |t        |d«      z   }}|‰ j$                  d   kD  s|‰ j$                  d   kD  rX|rVt'        |‰ j$                  d   «      t'        |‰ j$                  d   «      f‰ _        t+        j,                  ‰ j(                  «       ||||f}	|d   }|dz  dk7  }|dz  rP|dz  dz   }‰ j                  j                  d	|z  «      }‰ j/                  |«      rt1        j2                  d|«      }nd}‰ j                  j                  d«      d   }‰ j                  j!                  «       ‰ _         n	 d }�Œë|€t        ‚|‰ _        |sy g ‰ _        ‰ j                  r0‰ j4                  j7                  ‰ j                  ‰ j8                  «       |�|n‰ j:                  ‰ _        |‰ _        |dk(  rl‰ j<                  r+t@        tB        jD                  k(  r|�d nd‰ _#        nd!‰ _#        nd"‰ _#        |s$‰ j:                  rdd#l$m$}  |‰ j:                  «      }|‰ _%        nô‰ jL                  d!k(  råt@        tB        jN                  k7  s|rÌd ‰ _(        d$‰ j                  v rw‰ j4                  jS                  ‰ j                  d$   d«       ‰ j4                  jU                  d t*        jV                  jX                  «      ‰ _        d ‰ _#        ‰ j                  d$= n@d‰ _#        ‰ j4                  jU                  dt*        jV                  jX                  «      ‰ _        ˆ fd%„}|	‰ _        	 ‰ j                  dk  r	d ‰ _        �n…‰ j                  dk(  rÇ‰ j8                  \  }}}}||z
  ||z
  f}t+        j,                  |«       d!}‰ j                  j[                  d$|«      }|�‰ jL                  d&v rBd } ||«      d'z   }n4‰ j                  j[                  d(d«      }‰ jL                  d&v r
d} ||«      }t*        j\                  j_                  |||«      ‰ _        n¯‰ j4                  �,‰ ja                  ‰ j4                  ‰ j8                  «      ‰ _        nw|�u‰ j8                  \  }}}}||z
  ||z
  f}t+        j,                  |«       d!}|}‰ jL                  d&v rd } ||«      d'z   }t*        j\                  j_                  |||«      ‰ _        |�]d}|�<|dk(  r't@        tB        jD                  k7  r |‰ j                  d$<   n‰ jL                  d&vr|}d)f‰ j                   ||ffg‰ _        |j[                  d«      r|d   ‰ j                  d<   d*D ]5  }||v r||   ‰ j                  |<   Œ|‰ j                  v sŒ)‰ j                  |= Œ7 y # tb        $ r Y ŒÈw xY w)+Nr   éÿÿÿÿÚcommentr   zcannot seek to frame ó   ;ó   !éù   r(   r2   Údurationé   r   éþ   r   ó   
éÿ   Ú	extensionr5   ó   NETSCAPE2.0Úloopó   ,é	   é   r   r1   é@   r4   r3   r7   FÚRGBAÚPÚL)ÚcopyÚtransparencyc                 ó„   •— ‰j                   r-t        ‰j                   j                  | dz  | dz  dz    «      } | S | | | f} | S )Nr(   )Ú_frame_paletteÚtupler?   )Úcolorr$   s    €r   Ú_rgbz GifImageFile._seek.<locals>._rgbN  sP   ø€ Ø×"Ò"Ü˜d×1Ñ1×9Ñ9¸%À!¹)ÀeÈaÁiÐRSÁmÐTÓU�ð ˆLð   uÐ-�ØˆLr   ©r7   rl   )r   r6   Úgif)r`   re   )2Ú_GifImageFile__offsetÚdisposerT   r@   rL   rB   Údisposal_methodr9   r<   ÚloadÚ
ValueErrorr"   r&   r#   rK   r:   rA   r*   ÚsizeÚmaxr;   r   Ú_decompression_bomb_checkr-   r   r=   rU   ÚpasteÚdispose_extentr>   rr   Ú_frame_transparencyÚLOADING_STRATEGYr   r   Ú_modero   r?   Úmoder   ÚpyaccessÚputpalettealphaÚconvertÚDitherÚFLOYDSTEINBERGÚgetÚcoreÚfillÚ_cropÚAttributeError)r$   rV   Úupdate_imagerF   r%   r?   r9   Úframe_transparencyÚ	interlaceÚframe_dispose_extentÚblockrG   Údispose_bitsr\   Úx0Úy0Úx1Úy1rH   r+   ro   ru   Údispose_sizeÚdispose_modert   rp   Úks   `                          r   rE   zGifImageFile._seek�   sÚ  ø€ Ø�AŠ:àˆDŒMØˆDŒLØˆDŒLØ�H‰H�M‰M˜$Ÿ-™-Ô(Ø#$ˆDÔ Ø˜DŸI™IÑ%Ø—I‘I˜iÑ(ð �yŠy™\Ø—	‘	”à�D—L‘L 1Ñ$Ò$Ø)¨%¨Ð1ˆCÜ˜S“/Ð!à—(‘(ˆŒØ�=Š=à�G‰G�L‰L˜Ÿ™Ô'Ø—)‘)”+Øð —)‘)•+àˆDŒMà�G‰G�L‰L˜‹OˆÙ�A˜’IÜˆNàˆàˆØ!ÐØˆ	Ø#ÐØÙØ—G‘G—L‘L “O�Ù˜˜Tš	Ùà�d“ð —G‘G—L‘L “O�ØŸ	™	›�Ø�Q‘4˜3’;ð " !™H�EØ˜q’yØ-2°1©XÐ*Ü'*¨5°!£}°rÑ'9�D˜Ñ$ð $.°Ñ#5�LØ#/°1Ñ#4�LÙ#ð
 0<˜Õ,Ø�q‘T˜S’[ð "�Gñ  Ø 5Ñ(˜Ø $§	¡	£˜ò  ð ! DÑ(à˜Y›¨5°7©?Ñ:œà*1˜˜Y™Ø�AØØ�q‘T˜S’[ U¨a¢Zð ).¨t¯w©w¯|©|«~Ð(=�D˜Ñ%Ø˜S˜b�z ^Ò3Ø $§	¡	£˜Ü˜u›:¨š?¨u°Q©x¸1ª}Ü03°E¸1³˜DŸI™I fÑ-Ø—i‘i•kØð —i‘i—kð �d“ð —G‘G—L‘L “O�ô ˜Q ›¤C¨¨1£I�B�Øœc ! Q›i™¨¬c°!°Q«i©�B�Ø˜Ÿ™ 1™Ò%¨¨d¯i©i¸©lÒ):ÁÜ!$ R¨¯©°1©Ó!6¼¸BÀÇ	Á	È!ÁÓ8MÐ!M�D”JÜ×3Ñ3°D·J±JÔ?Ø')¨2¨r°2 ~Ð$Ø˜!™�à" R™Z¨AÑ-�	à˜3’;Ø! A™I¨™?�DØŸ™Ÿ™ Q¨$¡YÓ/�AØ×.Ñ.¨qÔ1Ü".×"2Ñ"2°5¸!Ó"<™à"'˜ð —w‘w—|‘| A“ qÑ)�Ø $§¡§¡£�”Øð àˆAñ{ ð~ ÐäˆNàˆŒÙØàˆŒ	à�<Š<Ø�G‰G�M‰M˜$Ÿ,™,¨×(;Ñ(;Ô<à)0Ð)<™gÀ$×BUÑBUˆÔØ#5ˆÔ Ø�AŠ:Ø×"Ò"Ü#¤×'AÑ'AÒAØ+=Ð+I¡Èu�D•Jà!$�D•Jà �”
á˜t×2Ò2Ý%á˜t×2Ñ2Ó3�Ø"ˆD�Là�y‰y˜CÒä$¬×(XÑ(XÒXÙà$(�D”MØ%¨¯©Ñ2ØŸ™×/Ñ/°·	±	¸.Ñ0IÈ1ÔMØ"&§'¡'§/¡/°&¼%¿,¹,×:UÑ:UÓ"V˜œØ%+˜œ
Ø ŸI™I nÑ5à%*˜œ
Ø"&§'¡'§/¡/°%¼¿¹×9TÑ9TÓ"U˜œô	ð 3ˆÔð+	Ø×#Ñ# aÒ'à#�–Ø×%Ñ%¨Ò*ð "&×!4Ñ!4‘��B˜˜BØ " R¡¨¨b©Ð1�ä×/Ñ/°Ô=ð  #�ØŸ	™	Ÿ™ nÐ6HÓI�ØÐ$Ø—y‘y OÑ3Ø'-˜Ù $ U£¨dÑ 2™à ŸI™IŸM™M¨,¸Ó:�EØ—y‘y OÑ3Ø',˜Ù $ U£˜Ü$Ÿz™zŸ™¨|¸\È5ÓQ�•ð —7‘7Ð&à#'§:¡:¨d¯g©g°t×7JÑ7JÓ#K�D•LØ'Ð3Ø%)×%8Ñ%8‘N�B˜˜B Ø$&¨¡G¨R°"©WÐ#5�Lä×3Ñ3°LÔAØ#&�LØ.�EØ—y‘y OÑ3Ø'-˜Ù $Ð%7Ó 8¸4Ñ ?˜Ü#(§:¡:§?¡?°<ÀÈuÓ#U�D”Lð Ð ØˆLØ!Ð-Ø˜A’:Ü'¬?×+EÑ+EÒEØ4F˜Ÿ	™	 .Ò1Ø—Y‘Y oÑ5Ø#5�Lð Ø˜˜R Ð$Ø—M‘MØ˜9 lÐ3ð	ðˆDŒIð �8‰8�IÔØ#'¨	¡?ˆD�I‰I�iÑ Ø*ò 	!ˆAØ�D‰yØ# A™w�—	‘	˜!’Ø�d—i‘i’Ø—I‘I˜a‘Lñ		!øô- ò 	Ùð	ús   ØFa* á*	a6á5a6c                 ó\  •— | j                   rdnd}d | _        | j                  dk(  rG| j                  �Ýt        j
                  j                  || j                  | j                  «      | _        n¢| j                  dv r”| j                  | _        | j                   rpt        j
                  j                  d| j                  | j                  xs d«      | _         | j                  j                  | j                   j                  «       Ž  nd | _        || _        d | _         t        ‰| �9  «        y )Nrm   rn   r   rv   )rr   Ú_prev_imrT   r‚   r   rŒ   r�   r}   rU   r…   Ú
putpaletteÚgetdatar„   ÚsuperÚload_prepare)r$   Ú	temp_modeÚ	__class__s     €r   r¢   zGifImageFile.load_prepareœ  sä   ø€ Ø×.Ò.‘C°Cˆ	ØˆŒØ�<‰<˜1ÒØ×'Ñ'Ð3ÜŸ*™*Ÿ/™/Ø˜tŸy™y¨$×*BÑ*Bó�•ð �Y‰Y˜/Ñ)Ø ŸG™GˆDŒMØ×"Ò"ÜŸ*™*Ÿ/™/¨#¨t¯y©y¸$×:RÑ:RÒ:WÐVWÓX�”Ø"�—‘×"Ñ" D×$7Ñ$7×$?Ñ$?Ó$AÒBà�”ØˆŒ
Ø"ˆÔä‰ÑÕr   c                 ó®  — | j                   dk(  r«| j                  dk(  r›t        t        j                  k(  r„| j
                  �.| j                  j                  | j
                  d«       d| _        nd| _        | j                  j                  | j                  t        j                  j                  «      | _        y | j                  sy | j
                  �B| j                  j                  | j
                  d«       | j                  j                  d«      }n| j                  j                  d«      }| j                  || j                  «      }| j                  | _        | j                  j                  | _        |j                  dk(  r(| j                  j!                  || j                  |«       y | j                  j!                  || j                  «       y )Nr   rm   rl   r7   )rT   r…   rƒ   r   r   r‚   rU   r‡   r„   rˆ   r   r‰   rŠ   rž   rŽ   r�   r€   )r$   Úframe_ims     r   Úload_endzGifImageFile.load_end°  sE  € Ø�<‰<˜1ÒØ�y‰y˜CÒÔ$4¼×8RÑ8RÒ$RØ×+Ñ+Ð7Ø—G‘G×+Ñ+¨D×,DÑ,DÀaÔHØ!'�D•Jà!&�D”JØŸ'™'Ÿ/™/¨$¯)©)´U·\±\×5PÑ5PÓQ�”ØØ�}Š}ØØ×#Ñ#Ð/Ø�G‰G×#Ñ# D×$<Ñ$<¸aÔ@Ø—w‘w—‘ vÓ.‰Hà—w‘w—‘ uÓ-ˆHØ—:‘:˜h¨×(;Ñ(;Ó<ˆà—-‘-ˆŒØ—W‘W—\‘\ˆŒ
Ø�=‰=˜FÒ"Ø�G‰G�M‰M˜( D×$7Ñ$7¸ÕBà�G‰G�M‰M˜( D×$7Ñ$7Õ8r   c                 ó   — | j                   S ©N)rT   )r$   s    r   rA   zGifImageFile.tellÊ  s   € Ø�|‰|Ðr   )T)r   r   r   ÚformatÚformat_descriptionÚ!_close_exclusive_fp_after_loadingr>   r&   r-   rI   ÚpropertyrO   rQ   rL   rE   r¢   r§   rA   Ú__classcell__)r¤   s   @r   r   r   ?   sk   ø„ Ø€FØ)ÐØ(-Ð%à€Nòòòð8 ñ	ó ð	ð ñ!ó ð!ò$+ó }!ô~ò(9ö4r   r   rn   rm   )Ú1rn   rm   c                 óÔ  — | j                   t        v r| j                  «        | S t        j                  | j                   «      dk(  r’| j                  dt        j                  j                  ¬«      } | j                  j                   dk(  rL| j                  j                  D ]3  }|d   dk(  sŒ| j                  j                  |   | j                  d<    | S  | S | j                  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
    r7   rm   ©r?   rl   r(   r   rp   rn   )r…   ÚRAWMODEr{   r   Úgetmodebaserˆ   ÚPaletteÚADAPTIVEr?   Úcolorsr9   )rU   Úrgbas     r   Ú_normalize_moder¸   Õ  s¿   € ð 
‡w�w”'ÑØ
�‰Œ	Øˆ	Ü×Ñ˜Ÿ™Ó! UÒ*Ø�Z‰Z˜¤U§]¡]×%;Ñ%;ˆZÓ<ˆØ�:‰:�?‰?˜fÒ$ØŸ
™
×)Ñ)ò �Ø˜‘7˜a“<Ø.0¯j©j×.?Ñ.?ÀÑ.E�B—G‘G˜NÑ+ØØˆ	ð	ð ˆ	Ø�:‰:�c‹?Ðr   c                 ób  — d}|rXt        |t        t        t        f«      rt        |dd «      }t        |t        j                  «      rt        |j
                  «      }| j                  dk(  r!|sX| j                  j                  d«      dd }n9|st        d„ t        d«      D «       «      }t	        j                  d|¬«      | _        |r¶g }t        dt        |«      d«      D ]O  }t        |||dz    «      }| j
                  j                  j                  |«      }||v rd}|j                  |«       ŒQ t        |«      D ],  \  }}|�Œ	t        t        |«      «      D ]  }||vsŒ|||<    Œ, Œ. | j!                  |«      } n t#        | |«      }|�| j!                  ||«      S || 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   rm   r7   c              3   ó&   K  — | ]	  }|d z  –— Œ y­w)r(   Nr   )Ú.0r,   s     r   ú	<genexpr>z%_normalize_palette.<locals>.<genexpr>  s   è ø€ Ò&B°! q¨A¥vÑ&Bùs   ‚r±   r   r(   )Ú
isinstanceÚbytesÚ	bytearrayÚlistr   r?   r…   rU   Ú
getpaletter)   r*   rs   r¶   r‹   ÚappendÚ	enumerateÚremap_paletteÚ_get_optimize)	rU   r?   r9   Úsource_paletteÚused_palette_colorsr,   Úsource_colorÚindexÚjs	            r   Ú_normalize_paletterË   î  s¬  € ð €NÙä�g¤¤y´$Ð7Ô8Ü& w¨t° }Ó5ˆNÜ�gœ|×8Ñ8Ô9Ü& w§¡Ó7ˆNà	‡w�w�#‚~ÙØŸU™U×-Ñ-¨eÓ4°T°cÐ:‰NáÜ&Ñ&B´u¸S³zÔ&BÓBˆNÜ!×.Ñ.¨u¸nÔMˆŒ
áØ ÐÜ�qœ#˜nÓ-¨qÓ1ò 	.ˆAÜ  °°A¸±EÐ!:Ó;ˆLØ—J‘J×%Ñ%×)Ñ)¨,Ó7ˆEØÐ+Ñ+Ø�Ø×&Ñ& uÕ-ð	.ô "Ð"5Ó6ò 	‰HˆAˆuØ‰}ÜœsÐ#6Ó7Ó8ò �AØÐ 3Ò3Ø12Ð+¨AÑ.Ùñð	ð ×ÑÐ1Ó2‰ä+¨B°Ó5ÐØÐ*Ø×#Ñ#Ð$7¸ÓHÐHà'€B‡J�JÔØ€Ir   c           	      ó  — t        | «      }|j                  j                  «       D ]!  \  }}| j                  j	                  ||«       Œ# t        ||| j                  «      }t        || j                  «      D ]  }|j                  |«       Œ d}t        | «      r|dz  }t        || d|«       dt        | «      f|_
        t        j                  ||dd| j                  z   dt        |j                     fg«       |j                  d«       y )Nr   rk   ©r   r   r1   rw   ó    )r¸   r9   ÚitemsÚencoderinfoÚ
setdefaultrË   Ú_get_global_headerÚwriteÚget_interlaceÚ_write_local_headerÚencoderconfigr   Ú_saver}   r²   r…   )rU   r"   r?   Úim_outrœ   Úvr%   rG   s           r   Ú_write_single_framerÚ   "  sè   € Ü˜RÓ €FØ—‘×!Ñ!Ó#ò (‰ˆˆ1Ø
�‰×!Ñ! ! QÕ'ð(ä ¨°·±Ó@€Fä ¨¯©Ó7ò ˆØ
�‰��ðð €EÜ�RÔØ˜‘
ˆÜ˜˜B ¨Ô.àœ}¨RÓ0Ð1€FÔÜ‡O�O�F˜B %¨°"·'±'Ñ)9¸1¼gÀfÇkÁkÑ>RÐ!SÐ TÔUà‡H�HˆU…Or   c                 óê   — t        |«      t        | «      k(  rt        j                  || «      }n4t        j                  |j                  d«      | j                  d«      «      }|j	                  d¬«      S )Nrl   F)Ú
alpha_only)Ú_get_palette_bytesr   Úsubtract_modulorˆ   Úgetbbox)Úbase_imÚim_frameÚdeltas      r   Ú_getbboxrã   7  sc   € Ü˜(Ó#Ô'9¸'Ó'BÒBÜ×*Ñ*¨8°WÓ=‰ä×*Ñ*Ø×Ñ˜VÓ$ g§o¡o°fÓ&=ó
ˆð �=‰= Eˆ=Ó*Ð*r   c           	      ó2  — | j                   j                  d«      }| j                   j                  d| j                  j                  d«      «      }g }d}d }t        j                  | g| j                   j                  dg «      «      D �]5  }t        j                  |«      D �]  }	t        |	j                  «       «      }	|dk(  rD|	j                  j                  «       D ]'  \  }
}|
dk(  rŒ| j                   j                  |
|«       Œ) | j                   j                  «       }t        |	||«      }	d|	j                  v r|j                  d|	j                  d   «       t        |t        t        f«      r	||   |d<   n"|€ d|	j                  v r|	j                  d   |d<   t        |t        t        f«      r||   |d<   |dz  }|rã|d   }t        |d   |	«      }|s&|j                  d«      r|d	   dxx   |d   z  cc<   �Œ\|j                  d«      d
k(  r•|€„| j                   j                  d| j                  j                  dd«      «      }t!        |	|«      }t#        j$                  d|	j&                  |«      }|j)                  |d   d   j*                  «       t        ||	«      }nd }|j-                  |	||dœ«       �Œ �Œ8 t/        |«      dkD  rq|D ]k  }|d   }	|d   s(t1        |	|d	   «      D ]  }|j3                  |«       Œ d}n&|sd|d	   d<   |	j5                  |d   «      }	|d   d d
 }t7        ||	||d	   «       Œm yd| j                   v rJt        | j                   d   t        t        f«      r&t9        | j                   d   «      | j                   d<   y y y )Nr`   Údisposalr   Úappend_imagesrp   r   r[   rU   rÐ   r   )r   r   r   rm   )rU   ÚbboxrÐ   rç   rÍ   TÚinclude_color_table)rÐ   r‹   r9   Ú	itertoolsÚchainr	   ÚIteratorr¸   ro   rÏ   rÑ   rË   r½   rÀ   rs   rã   Ú_get_backgroundr   Únewr}   rŸ   r?   rÂ   r*   rÒ   rÓ   ÚcropÚ_write_frame_dataÚsum)rU   r"   r?   r`   rå   Ú	im_framesÚframe_countÚbackground_imÚ
imSequencerá   rœ   rÙ   rÐ   Úpreviousrç   rt   r6   Ú
frame_datar%   Úoffsets                       r   Ú_write_multiple_framesrø   A  s‚  € Ø�~‰~×!Ñ! *Ó-€HØ�~‰~×!Ñ! *¨b¯g©g¯k©k¸*Ó.EÓF€Hà€IØ€KØ€MÜ—o‘o r d¨B¯N©N×,>Ñ,>¸ÐPRÓ,SÓTó *Yˆ
Ü%×.Ñ.¨zÓ:ó )	YˆHä& x§}¡}£Ó7ˆHØ˜aÒØ$ŸM™M×/Ñ/Ó1ò 4‘D�A�qØ˜NÒ*Ø Ø—N‘N×-Ñ-¨a°Õ3ð4ð
 Ÿ.™.×-Ñ-Ó/ˆKÜ)¨(°G¸[ÓIˆHØ §¡Ñ.Ø×&Ñ& ~°x·}±}À^Ñ7TÔUÜ˜(¤T¬5 MÔ2Ø*2°;Ñ*?�˜JÒ'ØÐ! j°H·M±MÑ&AØ*2¯-©-¸
Ñ*C�˜JÑ'Ü˜(¤T¬5 MÔ2Ø*2°;Ñ*?�˜JÑ'Ø˜1ÑˆKáà$ R™=�Ü ¨¡°Ó9�Ùà"—‘ zÔ2Ø  Ñ/°
Ó;¸{È:Ñ?VÑVÓ;ÙØ—?‘? :Ó.°!Ò3Ø$Ð,Ø "§¡× 2Ñ 2Ø*¨B¯G©G¯K©K¸È	Ó,Ró!˜ô &5°X¸uÓ%E˜
Ü(-¯	©	°#°x·}±}ÀjÓ(Q˜Ø%×0Ñ0°¸1±¸dÑ1C×1KÑ1KÔLÜ# M°8Ó<‘Dà�Ø×Ñ H°dÈ;ÑWÖXòS)	Yð*YôX ˆ9ƒ~˜ÒØ#ò 	OˆJØ! $Ñ'ˆHØ˜fÒ%ä+¨H°jÀÑ6OÓPò  �AØ—H‘H˜Q•Kð à‘ñ ØGK�J˜}Ñ-Ð.CÑDà#Ÿ=™=¨°FÑ);Ó<�Ø# FÑ+¨B¨QÐ/�Ü˜b (¨F°J¸}Ñ4MÕNð	Oð Ø	�r—~‘~Ñ	%¬*Ø
�‰�zÑ"¤T¬5 Mô+ô &)¨¯©¸
Ñ)CÓ%Dˆ�‰�zÒ"ð	+Ð	%r   c                 ó"   — t        | ||d¬«       y )NT)Úsave_all)r×   )rU   r"   Úfilenames      r   Ú	_save_allrü   Œ  s   € Ü	ˆ"ˆb�( TÖ*r   Fc                 ó’  — d| j                   v sd| j                  v r6| j                   j                  d| j                  j                  d«      «      }n+d }| j                   j                  dd«      | j                   d<   |rt        | ||«      st	        | ||«       |j                  d«       t        |d«      r|j                  «        y y )Nr?   ÚoptimizeTr]   Úflush)rÐ   r9   r‹   rø   rÚ   rÓ   Úhasattrrÿ   )rU   r"   rû   rú   r?   s        r   r×   r×   �  sž   € à�B—N‘NÑ" i°2·7±7Ñ&:Ø—.‘.×$Ñ$ Y°·±·±¸IÓ0FÓG‰àˆØ%'§^¡^×%7Ñ%7¸
ÀDÓ%Iˆ�‰�zÑ"áÔ1°"°b¸'ÔBÜ˜B  GÔ,à‡H�HˆT„Näˆr�7ÔØ
�‰�
ð r   c                 ór   — | j                   j                  dd«      }t        | j                  «      dk  rd}|S )Nr’   r   é   r   )rÐ   r‹   Úminr}   )rU   r’   s     r   rÔ   rÔ   ¡  s5   € Ø—‘×"Ñ" ;°Ó2€Iô ˆ2�7‰7ƒ|�bÒØˆ	àÐr   c                 ó4  — d}	 t        |j                  d   «      }d}t        ||j                  «      }|�	 |j                  |«      }d|j                  v rt        |j                  d   dz  «      }nd}t        |j                  j                  dd«      «      }|s|dk7  s|rk|rdnd}	|	|d	z  z  }	|sd}| j                  d
t        d«      z   t        d«      z   t        |	«      z   t        |«      z   t        «      z   t        d«      z   «       |j                  j                  d«      }
|
r"t        |«      }t        |«      }|r
|dz  }||z  }| j                  dt        |d   «      z   t        |d   «      z   t        |j                  d   «      z   t        |j                  d   «      z   t        |«      z   «       |
rr| j                  t        «      «       | j                  t        d«      «       y # t        $ r d}Y �Œ¸w xY w# t
        t        f$ r Y �ŒÎw xY w)NFrp   Tr`   r2   r   rå   r   r   r^   r_   rj   rè   r4   rh   r1   )ÚintrÐ   rÅ   rÉ   r|   ÚKeyErrorr‹   rÓ   r   Úo16rÝ   Ú_get_color_table_sizer}   Ú_get_header_palette)r"   rU   r÷   rG   Útransparent_color_existsrp   rÇ   r`   rå   Úpacked_flagrè   Úpalette_bytesÚcolor_table_sizes                r   rÕ   rÕ   «  s-  € Ø$Ðð1Ü˜2Ÿ>™>¨.Ñ9Ó:ˆð
 $(Ð ä+¨B°·±Ó?ÐØÐ*ð1Ø2×8Ñ8¸ÓF�ð �R—^‘^Ñ#Ü�r—~‘~ jÑ1°BÑ6Ó7‰àˆä�2—>‘>×%Ñ% j°!Ó4Ó5€Há 8¨q¢=±HÙ3‘a¸ˆØ�x 1‘}Ñ$ˆÙ'ØˆLà
�‰ØÜ�‹gñä�‹eñô �‹oñô �(‹mñ	ô
 �Óñô �‹eñô	
ð Ÿ.™.×,Ñ,Ð-BÓCÐÙÜ*¨2Ó.ˆÜ0°Ó?ÐÙØ˜C‘KˆEØÐ,Ñ,ˆEà‡H�HØÜ
ˆf�Q‰i‹.ñ	ä
ˆf�Q‰i‹.ñ	ô ˆb�g‰g�a‰j‹/ñ	ô ˆb�g‰g�a‰j‹/ñ		ô
 ˆU‹)ñ	ôñ Ñ/Ø
�‰Ô$ ]Ó3Ô4Ø‡H�HŒR�‹U…OøôY ò 1Ø+0Ó(ð1ûô ”jÐ!ò Úðús"   „H ·G2 Ç2HÈ HÈHÈHc                 ó$  — | j                  «       }	 t        |d«      5 }| j                  dk7  r)t        j                  d|g|t        j
                  ¬«       n×dd|g}dg}t        j                  |t        j                  t        j
                  ¬«      }t        j                  ||j                  |t        j
                  ¬«      }|j                  j                  «        |j                  «       }	|	rt        j                  |	|«      ‚|j                  «       }	|	rt        j                  |	|«      ‚d d d «       	 t        j                  |«       y # 1 sw Y   Œ xY w# t        $ r Y y w xY w# 	 t        j                  |«       w # t        $ r Y w w xY wxY w)NÚwbr7   Úppmtogif)ÚstdoutÚstderrÚppmquantÚ256)Ústdinr  r  )Ú_dumpÚopenr…   Ú
subprocessÚ
check_callÚDEVNULLÚPopenÚPIPEr  ÚcloseÚwaitÚCalledProcessErrorÚosÚunlinkÚOSError)
rU   r"   rû   ÚtempfilerX   Ú	quant_cmdÚ	togif_cmdÚ
quant_procÚ
togif_procÚretcodes
             r   Ú_save_netpbmr)  é  sf  € ð �x‰x‹z€Hð#Ü�(˜DÓ!ð 	L QØ�w‰w˜%ÒÜ×%Ñ%Ø Ð*°1¼Z×=OÑ=Oöð (¨°Ð9�	Ø'˜L�	Ü'×-Ñ-Ø¤j§o¡o¼j×>PÑ>Pô�
ô (×-Ñ-ØØ$×+Ñ+ØÜ%×-Ñ-ô	�
ð ×!Ñ!×'Ñ'Ô)à$Ÿ/™/Ó+�ÙÜ$×7Ñ7¸ÀÓKÐKà$Ÿ/™/Ó+�ÙÜ$×7Ñ7¸ÀÓKÐK÷;	Lð>	Ü�I‰I�hÕ÷A	Lð 	LûôB ò 	Ùð	ûð	Ü�I‰I�hÕøÜò 	Ùð	ýsY   ’E( žDEÄ.E( Ä7E ÅEÅE( Å	E%Å$E%Å(FÅ*F Å?FÆ 	FÆ	FÆFÆFc                 óT  — | j                   dv �r|�r|j                  dd«      �rt        xs | j                   dk(  }|s| j                  | j                  z  dk  rËg }t        | j                  «       «      D ]  \  }}|sŒ	|j                  |«       Œ |st        |«      t        |«      k\  r|S t        | j                  j                  «      t        j                  | j                  j                   «      z  }d|dz
  j                  «       z  }t        |«      |dz  k  r|dkD  r|S yyyyyy)	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
    )rm   rn   rþ   r   rn   i   r   r   N)r…   r‹   Ú_FORCE_OPTIMIZEÚwidthÚheightrÃ   Ú	histogramrÂ   r~   r*   r?   r   ÚgetmodebandsÚ
bit_length)rU   r9   ÚoptimiserÇ   r,   ÚcountÚnum_palette_colorsÚcurrent_palette_sizes           r   rÅ   rÅ     s*  € ð 
‡w�w�*Ò¢¨$¯(©(°:¸qÕ*Aô #Ò4 b§g¡g°¡nˆÙ�r—x‘x "§)¡)Ñ+¨iÒ7à"$ÐÜ% b§l¡l£nÓ5ò 2‘��5ÚØ'×.Ñ.¨qÕ1ð2ñ œ3Ð2Ó3´sÐ;NÓ7OÒOØ*Ð*ä!$ R§Z¡Z×%7Ñ%7Ó!8¼E×<NÑ<NØ—
‘
—‘ó=ñ "Ðð $%Ð);¸aÑ)?×(KÑ(KÓ(MÑ#MÐ ô Ð'Ó(Ð,@ÀAÑ,EÒEà(¨1Ò,à*Ð*ð -ð Fð! 8ð +B Ðr   c                 ó–   — | syt        | «      dk  ryt        j                  t        j                  t        | «      dz  d«      «      dz
  S )Nr   ri   r   r(   r   )r*   ÚmathÚceilÚlog)r  s    r   r  r  K  sA   € áØÜ	ˆ]Ó	˜aÒ	Øä�y‰yœŸ™¤# mÓ"4¸Ñ"9¸1Ó=Ó>ÀÑBÐBr   c                 óv   — t        | «      }d|z  t        | «      dz  z
  }|dkD  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  r  Úactual_target_size_diffs      r   r	  r	  U  sR   € ô -¨]Ó;Ðð  !Ð$4Ñ4¼¸MÓ8JÈaÑ8OÑOÐØ Ò"Øœ˜A› ™Ð%<Ñ<Ñ<ˆØÐr   c                 óJ   — | j                   r| j                   j                   S 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±   )rU   s    r   rÝ   rÝ   g  s   € ð "$§¢ˆ2�:‰:×ÑÐ4°Ð4r   c                 óº   — d}|r1t        |t        «      r	 | j                  j                  || «      }|S |}|S # t        $ r}t        |«      dvr‚ Y d }~|S d }~ww xY w)Nr   )z$cannot allocate more than 256 colorsz/cannot add non-opaque RGBA color to RGB palette)r½   rs   r?   Úgetcolorr|   Ústr)rU   Úinfo_backgroundr6   rY   s       r   rì   rì   q  sy   € Ø€JÙÜ�o¤uÔ-ð
ØŸZ™Z×0Ñ0°À"ÓE�
ð Ðð )ˆJØÐøô ò Ü�q“6ð "ñ ð óð Ðûðús   –8 ¸	AÁAÁAc                 ó  — d}| j                   j                  d«      dk(  s9|r9d|v s3|j                  d«      €"|j                  d«      s|j                  d«      rd}t        | |j                  d«      «      }t        | «      }t	        |«      }d	|z   t        | j                  d
   «      z   t        | j                  d   «      z   t        |dz   «      t        |«      t        d
«      z   t        |«      g}|j                  d«      �_|j                  dt        d«      z   t        d«      z   dz   t        d«      z   t        d«      z   t        |d   «      z   t        d
«      z   «       |j                  d«      r�dt        d«      z   }|d   }t        |t        «      r|j                  «       }t        d
t        |«      d«      D ]$  }	||	|	dz    }
|t        t        |
«      «      |
z   z  }Œ& |t        d
«      z  }|j                  |«       |S )z2Return a list of strings representing a GIF headers   87ar0   s   89arp   rg   r`   r\   r6   s   GIFr   r   r4   r^   rd   r5   rf   r(   rb   )r9   r‹   rì   rÝ   r  r  r}   r   r	  rÂ   r½   r>  Úencoder)   r*   )rU   r9   r0   r6   r  r  ÚheaderÚcomment_blockr\   r,   Úsubblocks              r   rÒ   rÒ   ˆ  s  € ð €GØ	‡w�w‡{�{�9Ó Ò'Ùà˜dÑ"Ø�x‰x˜ÓÐ+Ø�x‰x˜
Ô#Ø�x‰x˜	Ô"ð ˆä   T§X¡X¨lÓ%;Ó<€Jä& rÓ*€MÜ,¨]Ó;Ðð 	Ø
ñ	ä
ˆb�g‰g�a‰j‹/ñ	ô ˆb�g‰g�a‰j‹/ñ	ô 	Ð˜cÑ!Ó"ä
ˆ:‹œ˜A›Ñä˜MÓ*ð€Fð ‡x�x�ÓÐ#Ø�‰ØÜ�‹gñä�‹fñð ñô �‹eñ	ô
 �‹eñô �$�v‘,Óñ ô �‹eñô		
ð ‡x�x�	ÔØœr #›w™ˆà�y‘/ˆÜ�gœsÔ#Ø—n‘nÓ&ˆGÜ�qœ#˜g›,¨Ó,ò 	:ˆAØ˜q 1 s¡7Ð+ˆHØœR¤ H£Ó.°Ñ9Ñ9‰Mð	:ð 	œ˜A›ÑˆØ�‰�mÔ$Ø€Mr   c           	      óØ   — 	 ||_         t        | ||d«       t        j                  || dd|j                  z   dt
        |j                     fg«       | j                  d«       |` y # |` w xY w)Nr   rw   rÍ   rÎ   )rÐ   rÕ   r   r×   r}   r²   r…   rÓ   )r"   rá   r÷   Úparamss       r   rï   rï   Æ  sj   € ð!Ø%ˆÔô 	˜B ¨&°!Ô4ä�‰Ø�b˜E 6¨H¯M©MÑ#9¸1¼gÀhÇmÁmÑ>TÐUÐVô	
ð 	�‰�ŒàÑ øˆHÑ ús   ‚A A% Á%A)c                 óè   — t        | |«      }|€i }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)

    r6   )rÅ   r9   rË   r?   rU   rÒ   )rU   r?   r9   rÇ   Úim_modrB  s         r   Ú	getheaderrI  Ú  s}   € ô (¨¨DÓ1Ðà€|Øˆà˜4Ñ L°B·G±GÑ$;ØŸW™W \Ñ2ˆˆ\Ñä  G¨TÓ2€FØ—‘€B„JØ�I‰I€B„EÜ  DÓ)€FàÐ&Ð&Ð&r   c                 óx   —  G d„ d«      }| j                  «         |«       }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

    c                   ó   — e Zd Zg Zd„ Zy)úgetdata.<locals>.Collectorc                 ó:   — | j                   j                  |«       y r©   )r&   rÂ   )r$   r&   s     r   rÓ   z getdata.<locals>.Collector.write  s   € Ø�I‰I×Ñ˜TÕ"r   N)r   r   r   r&   rÓ   r   r   r   Ú	CollectorrL    s   „ Øˆó	#r   rN  )r{   rï   r&   )rU   r÷   rF  rN  r"   s        r   r    r    ö  s5   € ÷$#ñ #ð ‡G�G„Iá	‹€Bä�b˜"˜f fÔ-à�7‰7€Nr   z.gifz	image/gif)F)NN)rÍ   )2ré   r6  r   r  Úenumr   Ú r   r   r   r   r	   Ú_binaryr
   r:   r   r   r  r   r   rƒ   r   r   r²   r¸   rË   rÚ   rã   rø   rü   r×   rÔ   rÕ   r)  r+  rÅ   r  r	  rÝ   rì   rÒ   rï   rI  r    Úregister_openrª   Úregister_saveÚregister_save_allÚregister_extensionÚregister_mimer   r   r   ú<module>rW     sS  ðó6 Û Û 	Û Ý ç GÕ GÝ !Ý Ý !ô�gô ð #×2Ñ2Ð ò0ôL�9×&Ñ&ô Lðf ˜# CÑ
(€òò21òhò*+òHEòV+óò"ò;ò|,ðb €ò++ò\Còò$5òò.;ò|!ó('ó8ðH €× Ñ �L×'Ñ'¨°wÔ ?Ø €× Ñ �L×'Ñ'¨Ô /Ø €× Ñ ˜×+Ñ+¨YÔ 7Ø €× Ñ ˜×,Ñ,¨fÔ 5Ø €× Ñ �L×'Ñ'¨Õ 5r   