+
    ÂHàj´š  ã                  óÄ  € ^ RI Ht 0 R@mt^ RIt^ RIt^ RIHt ^ RIHt ^ RI	H
t
Ht ^RIHtHtHtHtHt ^RIHt ^RIHt ^R	IHt ^R
IHt Rt]'       d   ^ RI	HtHtHt ^RIHt ^RIH t   ! R R]4      t!]!PD                  t#R R lt$ ! R R]P                  4      t%RRRRRR/t&R R lt'](]),          ]*]+,          ,          ]P                   ,          t,R R lt-R R lt.R R lt/ ! R  R!]
4      t0R" R# lt1R$ R% lt2RAR& R' llt3R( R) lt4R* R+ lt5Rt6R, R- lt7R. R/ lt8R0 R1 lt9R2 R3 lt:R4 R5 lt;R6 R7 lt<R8 R9 lt=RBR: R; llt>RCR< R= llt?]P€                  ! ]%P‚                  ]%]$4       ]P„                  ! ]%P‚                  ]34       ]P†                  ! ]%P‚                  ]24       ]Pˆ                  ! ]%P‚                  R>4       ]PŠ                  ! ]%P‚                  R?4       R# )Dé    )ÚannotationsN)ÚIntEnum)Úcached_property)Ú
NamedTupleÚcast)ÚImageÚ
ImageChopsÚ	ImageFileÚImagePaletteÚImageSequence)Úi16le)Úo8)Úo16le)ÚDeferredErrorF)ÚIOÚAnyÚLiteral)Ú_imaging)ÚBufferc                  ó&   € ] tR t^>tRt^ t^t^tRtR# )ÚLoadingStrategyz.. versionadded:: 9.1.0© N)	Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__ÚRGB_AFTER_FIRSTÚ RGB_AFTER_DIFFERENT_PALETTE_ONLYÚ
RGB_ALWAYSÚ__static_attributes__r   ó    Ú”/home/ubuntu/.hermes/installs/5f0a1ff4045d044e/environments/50f6b671e3f94b538e344231dfcb664f/venv/lib/python3.14/site-packages/PIL/GifImagePlugin.pyr   r   >   s   † Ù!à€OØ'(Ð$Ø„Jr"   r   c               ó    € V ^8„  d   QhRRRR/# )é   ÚprefixÚbytesÚreturnÚboolr   )Úformats   "r#   Ú__annotate__r+   M   s   € ÷ 5ñ 5�Eð 5˜dñ 5r"   c                ó$   € V P                  R4      # )ó   GIF87a)r-   s   GIF89a)Ú
startswith)r&   s   &r#   Ú_acceptr/   M   s   € Ø×ÑÐ3Ó4Ð4r"   c                  óÂ   a € ] tR t^VtRtRtRtRtR R ltR R lt	R	 R
 lt
]R R l4       t]R R l4       tR R ltRR R lltR V 3R lltR R ltR R ltRtV ;t# )ÚGifImageFileÚGIFzCompuserve GIFFNc               ó   € V ^8„  d   QhRR/# )r%   r(   zbytes | Noner   )r*   s   "r#   r+   ÚGifImageFile.__annotate__]   s   € ÷ ñ �lñ r"   c                	óÎ   € V P                   f   Q hV P                   P                  ^4      pV'       d2   V^ ,          '       d#   V P                   P                  V^ ,          4      # R # ©N)ÚfpÚread)ÚselfÚss   & r#   ÚdataÚGifImageFile.data]   sH   € Ø�w‰wÒ"Ð"Ð"Ø�G‰G�L‰L˜‹Oˆß��1—”Ø—7‘7—<‘<  !¥Ó%Ð%Ùr"   c               ó    € V ^8„  d   QhRRRR/# )r%   Úpr'   r(   r)   r   )r*   s   "r#   r+   r4   d   s   € ÷ ñ  Eð ¨dñ r"   c                	óÌ   € \        ^ \        V4      ^4       FI  pV^,          W,          u;8X  d/   W^,           ,          u;8X  d   W^,           ,          8X  d   KC    R#   R# 	  R# )r   TF)ÚrangeÚlen)r9   r>   Úis   && r#   Ú_is_palette_neededÚGifImageFile._is_palette_neededd   sM   € Ü�qœ#˜a›& !Ö$ˆAØ˜•F˜a�dÖ: a¨A­¥hÖ:°!¸µEµ(×:Úð ;Úñ %ñ r"   c               ó   € V ^8„  d   QhRR/# ©r%   r(   ÚNoner   )r*   s   "r#   r+   r4   j   s   € ÷ ñ �tñ r"   c                	óÆ  € V P                   f   Q hV P                   P                  ^4      p\        V4      '       g   Rp\        V4      hVR,          V P                  R&   \        V^4      \        V^4      3V n        V^
,          pV^,          ^,           pV^€,          '       du   V^,          V P                  R&   V P                   P                  ^V,          4      pV P                  V4      '       d&   \        P                  ! RV4      pV;V n
        V n        V P                   V n        V P                   P                  4       V n        R V n        V P!                  ^ 4       R # )Nznot a GIF file:Né   NÚversionÚ
backgroundÚRGB)r7   r8   r/   ÚSyntaxErrorÚinfoÚi16Ú_sizerC   r   ÚrawÚglobal_paletteÚpaletteÚ_fpÚtellÚ_GifImageFile__rewindÚ	_n_framesÚ_seek)r9   r:   ÚmsgÚflagsÚbitsr>   rS   s   &      r#   Ú_openÚGifImageFile._openj   s  € à�w‰wÒ"Ð"Ð"Ø�G‰G�L‰L˜ÓˆÜ�q�zŠzØ"ˆCÜ˜cÓ"Ð"à  �uˆ�	‰	�)ÑÜ˜˜A“Y¤ A q£	Ð)ˆŒ
Ø�"•ˆØ˜•	˜Q�ˆà�3�;Œ;à&'¨¥eˆD�I‰I�lÑ#à—‘—‘˜Q $�YÓ'ˆAØ×&Ñ& q×)Ò)Ü&×*Ò*¨5°!Ó4�Ø5<Ð<�Ô# d¤là—7‘7ˆŒØŸ™Ÿ™›ˆŒØ%)ˆŒØ�
‰
�1Žr"   c               ó   € V ^8„  d   QhRR/# ©r%   r(   Úintr   )r*   s   "r#   r+   r4   †   s   € ÷ 	ñ 	˜#ñ 	r"   c                	ó*  € V P                   f<   V P                  4       p  V P                  V P                  4       ^,           R4       K*  V P                   #   \         d     T P                  4       ^,           T n          Mi ; iT P	                  T4       LK)NF©rW   rU   rX   ÚEOFErrorÚseek)r9   Úcurrents   & r#   Ún_framesÚGifImageFile.n_frames…   sq   € à�>‰>Ò!Ø—i‘i“kˆGð1ØØ—J‘J˜tŸy™y›{¨Q�°Ö6ð �~‰~Ðøô ô 1Ø!%§¡£¨q¥�–ð1úà�I‰I�gÕs    *A Á'B Á?B c               ó   € V ^8„  d   QhRR/# )r%   r(   r)   r   )r*   s   "r#   r+   r4   ’   s   € ÷ ñ ˜Tñ r"   c                	óæ   € V P                   e   V P                   ^8g  # V P                  4       pV'       d   R#  V P                  ^R4       RpV P	                  V4       V#   \         d    Rp L"i ; i)NTFrb   )r9   re   Úis_animateds   &  r#   rj   ÚGifImageFile.is_animated‘   sn   € à�>‰>Ò%Ø—>‘> QÑ&Ð&à—)‘)“+ˆßÙð	 Ø�J‰J�q˜%Ô ØˆKð 	�	‰	�'ÔØÐøô	 ô 	 ØŠKð	 ús   ¹A  Á A0Á/A0c               ó    € V ^8„  d   QhRRRR/# )r%   Úframer`   r(   rG   r   )r*   s   "r#   r+   r4   £   s   € ÷ 'ñ '˜#ð ' $ñ 'r"   c                	ó~  € V P                  V4      '       g   R # WP                  8  d   R V n        V P                  ^ 4       V P                  p \	        V P                  ^,           V^,           4       F  pV P                  V4       K  	  R #   \
         d%   pT P                  T4       Rp\        T4      ThR p?ii ; i)Núno more images in GIF file)Ú_seek_checkÚ_GifImageFile__frameÚ_imrX   r@   rc   rd   )r9   rm   Ú
last_frameÚfÚerY   s   &&    r#   rd   ÚGifImageFile.seek£   s–   € Ø×Ñ ×&Ò&ÙØ—<‘<ÔØˆDŒHØ�J‰J�qŒMà—\‘\ˆ
ð	'Ü˜4Ÿ<™<¨!Õ+¨U°Q­YÖ7�Ø—
‘
˜1–ó 8øäô 	'Ø�I‰I�jÔ!Ø.ˆCÜ˜3“- QÐ&ûð	'ús   Á<B ÂB<ÂB7Â7B<c               ó$   € V ^8„  d   QhRRRRRR/# )r%   rm   r`   Úupdate_imager)   r(   rG   r   )r*   s   "r#   r+   r4   ³   s&   € ÷ !ñ !˜3ð !¨dð !¸dñ !r"   c                	ó   a € \        S P                  \        4      '       d   S P                  P                  hV^ 8X  da   ^ S n        RS n        RS n        S P                  P                  S P                  4       ^ S n	        RS P                  9   d   S P                  R M*S P                  '       d   V'       d   S P                  4        VS P                  ^,           8w  d   RV 2p\        V4      hS P                  S n        S P                  '       dE   S P                  P                  S P                  4       S P                  4       '       d   K  ^ S n        S P                  P!                  ^4      pV'       d   VR8X  d   Rp\#        V4      hRp/ p. pRpRp	Rp
 V'       g   S P                  P!                  ^4      pV'       d   VR8X  d   EMwVR8X  Ed®   S P                  P!                  ^4      pS P                  4       pV^ ,          ^ù8X  d^   VeZ   V^ ,          pV^,          '       d
   V^,          p\%        V^4      ^
,          VR&   ^V,          pV^,	          pV'       d   VS n	        MýV^ ,          ^þ8X  dR   V'       d   V'       d   VP'                  R4       V'       d$   VP'                  V4       S P                  4       pK+  R	pEK2  V^ ,          ^ÿ8X  d‘   V^ 8X  dŠ   Ve†   VS P                  P)                  4       3VR
&   VP+                  R4      '       dP   S P                  4       pV'       d8   \-        V4      ^8¼  d(   V^ ,          ^8X  d   \%        V^4      S P                  R&   S P                  4       '       d   K  EM½VR8X  Ed¶   S P                  P!                  ^	4      p\%        V^ 4      \%        V^4      rþV\%        V^4      ,           V\%        V^4      ,           ppVS P.                  ^ ,          8”  g   VS P.                  ^,          8”  d`   V'       dX   \1        VS P.                  ^ ,          4      \1        VS P.                  ^,          4      3p\2        P4                  ! V4       VS n        WïVV3p
V^,          pV^@,          ^ 8g  p	V^€,          '       dd   V^,          ^,           pS P                  P!                  ^V,          4      pS P9                  V4      '       d   \:        P<                  ! RV4      pMRpS P                  P!                  ^4      ^ ,          pS P                  P)                  4       S n        MR	pEK¬  V	f   Rp\#        V4      hVS n        V'       g   R# . S n        S P
                  '       d1   S P>                  PA                  S P
                  S PB                  4       Ve   TMS PD                  S n#        VS n$        V^ 8X  d“   S PF                  '       d0   \J        \L        PN                  8X  d   Ve   RMRS n(        MRS n(        MRS n(        V'       d
   VS n)        EM7S PD                  '       d    ^ RI*H*p V! S PD                  4      S n)        EMRS n)        MþS PV                  R8X  dî   \J        \L        PX                  8w  g	   V'       dÍ   RS P                  9   d|   S P>                  P[                  S P                  R,          ^ 4       S P>                  P]                  R\2        P^                  P`                  4      S n        RS n(        S P                  R M@RS n(        S P>                  P]                  R\2        P^                  P`                  4      S n        R V 3R llpRS n        V
S n!        S PB                  '       EdÂ   S P                  ^8¼  Ed°    S P                  ^8X  dÜ   S PB                  w  rïppVV,
          VV,
          3p\2        P4                  ! V4       RpS P                  Pc                  RV4      pVe$   S PV                  R9   d   RpV! V4      R,           pM7S P                  Pc                  R^ 4      pS PV                  R9   d   RpV! V4      p\2        Pd                  Pg                  VVV4      S n        MÂS Ph                  e-   S Pk                  S P>                  S PB                  4      S n        MˆVe…   S PB                  w  rïppVV,
          VV,
          3p\2        P4                  ! V4       RpTpS PV                  R9   d   RpV! V4      R,           p\2        Pd                  Pg                  VVV4      S n        V	ez   RpVeD   V^ 8X  d*   \J        \L        PN                  8w  d   VS P                  R&   MS PV                  R9  d   Tp\n        Pp                  ! RXXXX3S P                  XV	V34      .S n        V'       d   R	Ps                  V4      S P                  R&   R FB  pVV9   d   VV,          S P                  V&   K"  VS P                  9   g   K5  S P                  V KD  	  R#   \l         d     Lúi ; i)r   NÚcommentzcannot seek to frame ó   ;ro   ó   !Údurationó   
r"   Ú	extensionó   NETSCAPE2.0Úloopó   ,rL   Fzimage not found in GIF frameÚRGBAÚPÚL)ÚcopyÚtransparencyc               ó    € V ^8„  d   QhRRRR/# )r%   Úcolorr`   r(   útuple[int, int, int]r   )r*   s   "r#   r+   Ú(GifImageFile._seek.<locals>.__annotate__a  s   € ÷ 		-ñ 		-˜ð 		-Ð 4ñ 		-r"   c           	     ó  <€ SP                   '       dv   V ^,          ^,           \        SP                   P                  4      8”  d   ^ p \        R\	        SP                   P                  V ^,          V ^,          ^,            4      4      # W V 3# )é   rŠ   )Ú_frame_paletterA   rS   r   Útuple)r‰   r9   s   &€r#   Ú_rgbÚ GifImageFile._seek.<locals>._rgba  sy   ø€ Ø×"×"Ð"Ø˜1•9˜q•=¤3 t×':Ñ':×'BÑ'BÓ#CÔCØ�EÜØ*Ü˜$×-Ñ-×5Ñ5°e¸aµiÀ%È!Å)ÈaÅ-ÐPÓQóð ð
  eÐ,Ð,r"   rK   Úgiféÿÿÿÿ©rL   rƒ   ©r   )r}   r   ):Ú
isinstancerT   r   ÚexÚ_GifImageFile__offsetÚdisposerq   rd   rV   Údisposal_methodrN   ÚtileÚloadÚ
ValueErrorr7   r;   r8   rc   rO   ÚappendrU   r.   rA   ÚsizeÚmaxr   Ú_decompression_bomb_checkrP   rC   r   rQ   ÚimÚpasteÚdispose_extentrR   rŽ   Ú_frame_transparencyÚLOADING_STRATEGYr   r    Ú_moderS   r†   Úmoder   ÚputpalettealphaÚconvertÚDitherÚFLOYDSTEINBERGÚgetÚcoreÚfillrr   Ú_cropÚAttributeErrorr
   Ú_TileÚjoin)r9   rm   rx   rY   r:   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   f&&                         r#   rX   ÚGifImageFile._seek³   s  ø€ Ü�d—h‘h¤×.Ò.Ø—(‘(—+‘+ÐØ�AŒ:àˆDŒMØ8<ˆDŒLØˆDŒLØ�H‰H�M‰M˜$Ÿ-™-Ô(Ø#$ˆDÔ Ø˜DŸI™IÔ%Ø—I‘I˜iÐ(øð �y�yˆyŸ\Ø—	‘	”à�D—L‘L 1Õ$Ô$Ø)¨%¨Ð1ˆCÜ˜S“/Ð!à—(‘(ˆŒØ�=�=ˆ=à�G‰G�L‰L˜Ÿ™Ô'Ø—)‘)—+’+ÙØˆDŒMà�G‰G�L‰L˜‹Oˆß�A˜”IØ.ˆCÜ˜3“-ÐàEIˆà!ˆØ&(ˆØ!ÐØˆ	Ø#ÐØßØ—G‘G—L‘L “O�ß˜˜Tœ	Ùà�d•ð —G‘G—L‘L “O�ØŸ	™	›�Ø�Q•4˜3”; 5Ò#4ð " !�H�EØ˜q—y”yØ-2°1­XÐ*Ü'*¨5°!£}°rÕ'9�D˜Ñ$ð $.°Õ#5�LØ#/°1Õ#4�Lß#ð
 0<˜Ô,øØ�q•T˜S”[÷ §à&×-Ñ-¨eÔ4ßØ&×-Ñ-¨eÔ4Ø $§	¡	£šØ�AÚØ�q•T˜S”[ U¨a¤Z°EÒ4Eð ).¨t¯w©w¯|©|«~Ð(=�D˜Ñ%Ø×'Ñ'¨×7Ò7Ø $§	¡	£˜ß ¤S¨£Z°1¤_¸¸q½ÀQ¼Ü03°E¸1³˜DŸI™I fÑ-Ø—i‘i—k’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 4§9¡9¨Q¥<Ó0´#°b¸$¿)¹)ÀA½,Ó2GÐG�DÜ×3Ò3°DÔ9Ø!%�D”JØ')¨r°2 ~Ð$Ø˜!��à" R�Z¨AÑ-�	à˜3—;”;Ø! A�I¨�?�DØŸ™Ÿ™ Q¨$¥YÓ/�AØ×.Ñ.¨q×1Ò1Ü".×"2Ò"2°5¸!Ó"<™à"'˜ð —w‘w—|‘| A“ qÕ)�Ø $§¡§¡£�”ØØ‹AàÒØ0ˆCÜ˜3“-ÐàˆŒßÙàˆŒ	à�<�<ˆ<Ø�G‰G�M‰M˜$Ÿ,™,¨×(;Ñ(;Ô<à)0Ò)<™gÀ$×BUÑBUˆÔØ#5ˆÔ Ø�AŒ:Ø×"×"Ð"Ü#¤×'AÑ'AÔAØ+=Ò+I¡Èu�D•Jà!$�D•Jà �”
çØ&�–Ø×$×$Ð$Ý%á# D×$7Ñ$7Ó8�–à#�•à�y‰y˜CÔä$¬×(XÑ(XÔXßà%¨¯©Ô2ØŸ™×/Ñ/°·	±	¸.Õ0IÈ1ÔMØ"&§'¡'§/¡/°&¼%¿,¹,×:UÑ:UÓ"V˜œØ%+˜œ
Ø ŸI™I nÑ5à%*˜œ
Ø"&§'¡'§/¡/°%¼¿¹×9TÑ9TÓ"U˜œ÷		-ð 		-ð ˆŒØ@TˆÔØ××Ñ 4×#7Ñ#7¸1Õ#<ð*Ø×'Ñ'¨1Ô,ð &*×%8Ñ%8‘N�B˜B Ø$&¨¥G¨R°"­WÐ#5�Lä×3Ò3°LÔAð $'�LØ ŸI™IŸM™M¨.Ð:LÓM�EØÒ(ØŸ9™9¨Ô7Ø+1˜LÙ$(¨£K°$Õ$6˜Eøà $§	¡	§¡¨l¸AÓ >˜ØŸ9™9¨Ô7Ø+0˜LÙ$(¨£K˜EÜ#(§:¡:§?¡?°<ÀÈuÓ#U�D•Lð —x‘xÒ+à'+§z¡z°$·'±'¸4×;NÑ;NÓ'O˜�Ø+Ò7Ø)-×)<Ñ)<™˜  BØ(*¨R­°°bµÐ'9˜ä×7Ò7¸ÔEØ'*˜Ø 2˜ØŸ9™9¨Ô7Ø+1˜LÙ$(Ð);Ó$<¸tÕ$C˜EÜ',§z¡z§¡Ø(¨,¸ó(˜œð Ò ØˆLØ!Ò-Ø˜A”:Ü'¬?×+EÑ+EÔEØ4F˜Ÿ	™	 .Ñ1øØ—Y‘Y oÔ5Ø#5�Lä—’ØØ˜˜R Ð$Ø—M‘MØ˜9 lÐ3ó	ðˆDŒI÷ Ø#&§8¡8¨NÓ#;ˆD�I‰I�iÑ Û*ˆAØ�DŒyØ# A�w�—	‘	˜!“Ø�d—i‘i–Ø—I‘I˜a’Ló	 +øô- "ô Ùðús    Þ$C+h? â9h? ã
Bh? è?iéic               ó   € V ^8„  d   QhRR/# rF   r   )r*   s   "r#   r+   r4   ´  s   € ÷ ñ ˜dñ r"   c                	óŽ  <€ V P                   '       d   R MRpRV n        V P                  ^ 8X  dI   V P                  e:   \        P
                  P                  WP                  V P                  4      V n        M¶V P                  R9   d¦   V P                  V n        V P                   '       d|   \        P
                  P                  R V P                  V P                  ;'       g    ^ 4      V n        V P                  P                  ! R.V P                   P                  4       O5!   MRV n        V P                  '       gë   V P                  eÝ   V P                  V P                  P                  8w  d¸   \        P
                  P                  V P                  P                  V P                  4      pV P                   '       d-   VP                  ! R.V P                   P                  4       O5!   VP                  V P                  ^ ^ .V P                  P                  O54       W n        Wn        RV n         \        SV `A  4        R# )r„   r…   NrL   r”   )rŽ   Ú_prev_imrq   r¥   r   r®   r¯   rŸ   r¢   r¨   Ú
putpaletteÚgetdatarr   r£   r§   ÚsuperÚload_prepare)r9   Ú	temp_modeÚexpanded_imÚ	__class__s   &  €r#   rÈ   ÚGifImageFile.load_prepare´  s‹  ø€ Ø×.×.Ð.‘C°Cˆ	ØˆŒØ�<‰<˜1ÔØ×'Ñ'Ò3ÜŸ*™*Ÿ/™/ØŸy™y¨$×*BÑ*Bó�”øð �Y‰Y˜/Ô)Ø ŸG™GˆDŒMØ×"×"Ð"ÜŸ*™*Ÿ/™/¨#¨t¯y©y¸$×:RÑ:R×:WÐ:WÐVWÓX�”Ø—‘×"Ò" 5ÐI¨4×+>Ñ+>×+FÑ+FÓ+HÕIà�”Ø�}�}ˆ} §¡Ò!5¸$¿)¹)ÀtÇwÁwÇ|Á|Ô:SÜŸ*™*Ÿ/™/¨$¯'©'¯,©,¸¿	¹	ÓBˆKØ×"×"Ð"Ø×&Ò& uÐM¨t×/BÑ/B×/JÑ/JÓ/LÔMØ×Ñ˜dŸg™g¨¨1Ð'<¨t¯w©w¯|©|Ñ'<Ô=à!ŒGØŒ
Ø"ˆÔä‰ÑÖr"   c               ó   € V ^8„  d   QhRR/# rF   r   )r*   s   "r#   r+   r4   Ï  s   € ÷ (9ñ (9˜$ñ (9r"   c                	ó‚  € V P                   ^ 8X  d³   V P                  R8X  d    \        \        P                  8X  d‡   V P
                  e/   V P                  P                  V P
                  ^ 4       RV n        MRV n        V P                  P                  V P                  \        P                  P                  4      V n        R# V P                  '       g   R# V P                  V P                  P                  8w  dë   V P
                  e,   \        P                  P!                  RV P                  4      pMf\        P                  P!                  RV P                  4      pVP#                  RRV P                  P%                  4       4       VP                  R4      pVP'                  V P                  ^ ^ .V P                  P                  O54       Wn        V P                  f   Q hV P
                  e{   V P                  R8X  d(   V P                  P)                  RV P
                  4      pM]V P                  P                  V P
                  ^ 4       V P                  P                  R4      pMV P                  P                  R4      pV P*                  f   Q hV P-                  W P*                  4      pV P                  V n        V P                  P                  V n        VP                  R9   d)   V P                  P'                  W P*                  V4       R# V P                  P'                  W P*                  4       R# )r   r„   Nrƒ   rL   r…   ÚLA)rÏ   rƒ   )rq   r¨   r¦   r   r    r¥   r¢   r©   r§   rª   r   r«   r¬   rÄ   rŸ   r®   r¯   rÅ   Ú
getpaletter£   Úconvert_transparentr¤   r°   )r9   rÊ   Úframe_ims   &  r#   Úload_endÚGifImageFile.load_endÏ  s9  € Ø�<‰<˜1ÔØ�y‰y˜CÔÔ$4¼×8RÑ8RÔ$RØ×+Ñ+Ò7Ø—G‘G×+Ñ+¨D×,DÑ,DÀaÔHØ!'�D•Jà!&�D”JØŸ'™'Ÿ/™/¨$¯)©)´U·\±\×5PÑ5PÓQ�”ÙØ�}�}ˆ}ÙØ�9‰9˜Ÿ™×*Ñ*Ô*Ø×'Ñ'Ò3Ü#Ÿj™jŸo™o¨f°d·i±iÓ@‘ä#Ÿj™jŸo™o¨c°4·9±9Ó=�Ø×&Ñ& u¨e°T·W±W×5GÑ5GÓ5IÔJØ)×1Ñ1°%Ó8�Ø×Ñ˜dŸm™m¨a°Ð-H°T·]±]×5GÑ5GÑ-HÔIà'ŒMØ—=‘=Ò,Ð,Ð,Ø×#Ñ#Ò/Ø�y‰y˜CÔØŸ7™7×6Ñ6°t¸T×=UÑ=UÓV‘à—‘×'Ñ'¨×(@Ñ(@À!ÔDØŸ7™7Ÿ?™?¨6Ó2‘à—w‘w—‘ uÓ-ˆHà×"Ñ"Ò.Ð.Ð.Ø—:‘:˜h×(;Ñ(;Ó<ˆà—-‘-ˆŒØ—W‘W—\‘\ˆŒ
Ø�=‰=˜NÔ*Ø�G‰G�M‰M˜(×$7Ñ$7¸ÖBà�G‰G�M‰M˜(×$7Ñ$7Ö8r"   c               ó   € V ^8„  d   QhRR/# r_   r   )r*   s   "r#   r+   r4   ù  s   € ÷ ñ �cñ r"   c                	ó   € V P                   # r6   )rq   )r9   s   &r#   rU   ÚGifImageFile.tellù  s   € Ø�|‰|Ðr"   )Ú__frameÚ__offsetÚ__rewindrT   rŽ   r¥   rr   r§   rW   rÄ   rP   rš   r™   r¤   r7   rR   r¢   rS   r›   )T)r   r   r   r   r*   Úformat_descriptionÚ!_close_exclusive_fp_after_loadingrR   r;   rC   r\   Úpropertyrf   r   rj   rd   rX   rÈ   rÓ   rU   r!   Ú__classcell__)rË   s   @r#   r1   r1   V   sv   ø† Ø€FØ)ÐØ(-Ð%à€Nõõõð6 ô	ó ð	ð ôó ðõ"'÷ !÷Bð õ6(9÷Tó r"   r1   Ú1r…   r„   c               ó    € V ^8„  d   QhRRRR/# )r%   r¢   úImage.Imager(   r   )r*   s   "r#   r+   r+     s   € ÷ ñ ˜ð ¨ñ r"   c                ó  € V P                   \        9   d   V P                  4        V # \        P                  ! V P                   4      R8X  d±   V P                  R\        P                  P                  R7      p V P                  f   Q hV P                  P                   R8X  dY   V P                  P                   F>  pV^,          ^ 8X  g   K  V P                  P                  V,          V P                  R&    V # 	  V # V P                  R4      # )zï
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   rƒ   r‡   r…   )r¨   ÚRAWMODErœ   r   Úgetmodebaserª   ÚPaletteÚADAPTIVErS   ÚcolorsrN   )r¢   Úrgbas   & r#   Ú_normalize_moderê     sÊ   € ð 
‡w�w”'ÔØ
�‰Œ	Øˆ	Ü×Ò˜Ÿ™Ó! UÔ*Ø�Z‰Z˜¤U§]¡]×%;Ñ%;ˆZÓ<ˆØ�z‰zÒ%Ð%Ð%Ø�:‰:�?‰?˜fÔ$ØŸ
™
×)Ô)�Ø˜•7˜a–<Ø.0¯j©j×.?Ñ.?ÀÕ.E�B—G‘G˜NÑ+ØØˆ	ñ	 *ð ˆ	Ø�:‰:�c‹?Ðr"   c               ó(   € V ^8„  d   QhRRRRRRRR/# )r%   r¢   rá   rS   ú_Palette | NonerN   údict[str, Any]r(   r   )r*   s   "r#   r+   r+   !  s2   € ÷ Dñ DØðDØ-ðDØ5CðDàñDr"   c                óä  € RpV'       di   \        V\        \        \        34      '       d   \        VR,          4      p\        V\        P                  4      '       d   \        VP
                  4      pV P                  R8X  d,   V'       g#   V P                  R4      pVf   Q h\        V4      pM@V'       g   \        R \        R4       4       4      p\        P                  ! RVR7      V n        Vf   Q hV'       dø   . pV P
                  f   Q h\        ^ \        V4      ^4       FU  p\        W6V^,            4      pV P
                  P                  P                  V4      pW…9   d   RpVP                  V4       KW  	  \        V4       F3  w  rhVe   K  \        \        V4      4       F  p	W•9  g   K  W•V&    K1  	  K5  	  . p
V F  pVf   Q hV
P                  V4       K  	  V P                  V
4      p MG\!        W4      pVe9   V P                  W³4      p RV9   d    VP#                  VR,          4      VR&   V # V # V P
                  f   Q hW0P
                  n        V #   \$         d    TR  T # i ; i)	aP  
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
N:Ni   Nr„   c              3  ó2   "  € T F  q^,          x € K  	  R# 5i)r�   Nr   )Ú.0rB   s   & r#   Ú	<genexpr>Ú%_normalize_palette.<locals>.<genexpr>>  s   é € Ð&B±z°!¨A§v¢v³zùs   ‚i   rL   rã   r‡   )r–   r'   Ú	bytearrayÚlistr   rS   r¨   rÐ   r@   rA   r�   rè   r­   rž   Ú	enumerateÚremap_paletteÚ_get_optimizeÚindexr�   )r¢   rS   rN   Úsource_paletteÚ
im_paletteÚused_palette_colorsrB   Úsource_colorrø   ÚjÚdest_mapÚoptimized_palette_colorss   &&&         r#   Ú_normalize_paletter   !  s>  € ð €Nßä�g¤¤y´$Ð7×8Ò8Ü& w¨t¥}Ó5ˆNÜ�gœ|×8Ñ8×9Ò9Ü& w§¡Ó7ˆNà	‡w�w�#„~ßØŸ™ tÓ,ˆJØÒ)Ð)Ð)Ü& zÓ2ˆNøçÜ&Ñ&B´u¸S´zÓ&BÓBˆNÜ!×.Ò.¨u¸nÔMˆŒ
ØÒ%Ð%Ð%çØ02ÐØ�z‰zÒ%Ð%Ð%Ü�qœ#˜nÓ-¨qÖ1ˆAÜ  °A¸µEÐ!:Ó;ˆLØ—J‘J×%Ñ%×)Ñ)¨,Ó7ˆEØÔ+Ø�Ø×&Ñ& uÖ-ñ 2ô "Ð"5Ö6‰HˆAØŒ}ÜœsÐ#6Ó7Ö8�AØÖ3Ø12¨AÑ.Úó 9ñ 7ð !ˆÛ(ˆEØÒ$Ð$Ð$Ø�O‰O˜EÖ"ñ )ð ×Ñ˜hÓ'‰ä#0°Ó#:Ð Ø#Ò/Ø×!Ñ!Ð":ÓKˆBØ Ô%ð-Ø+C×+IÑ+IØ˜^Õ,ó,�D˜Ñ(ð
 ˆI�2ˆIà�:‰:Ò!Ð!Ð!Ø'‡J�JÔØ€Iøô "ô -Ø˜^Ñ,ØˆIð-ús   ÈI ÉI/É.I/c               ó(   € V ^8„  d   QhRRRRRRRR/# )	r%   r¢   rá   r7   ú	IO[bytes]rS   rì   r(   rG   r   )r*   s   "r#   r+   r+   h  s0   € ÷ ñ Øðàðð ðð 
ñ	r"   c                óŒ  € \        V 4      pVP                  P                  4        F8  w  rE\        V\        4      '       g   K  V P
                  P                  WE4       K:  	  \        W2V P
                  4      p\        W0P
                  4       F  pVP                  V4       K  	  ^ p\        V 4      '       d
   V^@,          p\        WRV4       ^\        V 4      3Vn        \        P                  ! W1\        P                  ! R^ ^ .V P                   O5^ \"        VP$                  ,          4      .4       VP                  R4       R# )r   r’   ó    N©r   r   )rê   rN   Úitemsr–   ÚstrÚencoderinfoÚ
setdefaultr   Ú_get_global_headerÚwriteÚget_interlaceÚ_write_local_headerÚencoderconfigr
   Ú_saver²   rŸ   rä   r¨   )r¢   r7   rS   Úim_outrÀ   Úvr:   rZ   s   &&&     r#   Ú_write_single_framer  h  sö   € ô
 ˜RÓ €FØ—‘×!Ñ!Ö#‰ˆÜ�aœ×ÔØ�N‰N×%Ñ% aÖ+ñ $ô   °·±Ó@€Fä ¯©Ö7ˆØ
�‰�Žñ 8ð €EÜ�R×ÒØ˜•
ˆÜ˜ ¨Ô.àœ}¨RÓ0Ð1€FÔÜ‡O‚OØ”Y—_’_ U¨Q°Ð,<°B·G±GÑ,<¸aÄÈÏÉÕAUÓVÐWôð ‡H�HˆU†Or"   c               ó$   € V ^8„  d   QhRRRRRR/# )r%   Úbase_imrá   Úim_framer(   z4tuple[Image.Image, tuple[int, int, int, int] | None]r   )r*   s   "r#   r+   r+   „  s$   € ÷ 
2ñ 
2Øð
2Ø$/ð
2à9ñ
2r"   c                óP  € W3 Uu. uF5  q"P                   '       d    \        VP                   P                   4      MR NK7  	  ppV^ ,          V^,          8w  d#   VP                  R4      pV P                  R4      p \        P                  ! W4      pWDP                  RR7      3# u upi )r"   rƒ   F)Ú
alpha_only)rS   r'   rª   r	   Úsubtract_moduloÚgetbbox)r  r  r¢   Úpalette_bytesÚdeltas   &&   r#   Ú_getbboxr  „  s›   € ð ELÑCVóÙCV¸R§Z§Z ZŒˆb�j‰j× Ñ Ô!°SÒ8ÑCVð ð ð �QÕ˜=¨Õ+Ô+Ø×#Ñ# FÓ+ˆØ—/‘/ &Ó)ˆÜ×&Ò& xÓ9€EØ—-‘-¨5�-Ó1Ð1Ð1ùòs   †;B#c                  ó6   € ] tR tRt$ R]R&   R]R&   R]R&   RtR	# )
Ú_Framei‘  rá   r¢   z tuple[int, int, int, int] | NoneÚbboxrí   r  r   N)r   r   r   r   Ú__annotations__r!   r   r"   r#   r  r  ‘  s   ‡ ØƒOØ
*Ó*Ø×r"   r  c               ó(   € V ^8„  d   QhRRRRRRRR/# )	r%   r¢   rá   r7   r  rS   rì   r(   r)   r   )r*   s   "r#   r+   r+   —  s2   € ÷ oñ oØðoØ"ðoØ-<ðoà	ñor"   c           	     óþ  € V P                   P                  R 4      pV P                   P                  RV P                  P                  R4      4      p. pRp^ pRp\        P                  ! V .V P                   P                  R. 4      4       EF6  p	\
        P                  ! V	4       EF  p
\        V
P                  4       4      p
V^ 8X  d`   V
P                  P                  4        FA  w  r¼VR8X  d   K  \        V\        4      '       g   K&  V P                   P                  W¼4       KC  	  V P                   P                  4       pRV
P                  9   d$   VP                  RV
P                  R,          4       \        W¢V4      p
\        V\        \        34      '       d   W7,          VR &   M+Vf(   R V
P                  9   d   V
P                  R ,          VR &   \        V\        \        34      '       d   WG,          VR&   V^,          pRpV'       Edƒ   V'       Edz   \!        Wj4      w  ppV'       g`   VP                  R 4      '       dF   VR,          P                   P                  R ^ 4      VR ,          ,           VR,          P                   R &   EKé  VR,          P                   P                  R4      ^8X  dÒ   V P                   P                  RV P                  P                  R4      4      pVe†   Vfn   \#        V
V4      p\$        P&                  ! RV
P(                  V4      pV^ ,          P*                  P,                  pVf   Q hVP/                  VVP0                  4       \!        WŠ4      ^,          pEM!^ ^ .V
P(                  O5pEMVP                  R4      '       dõ   V
P0                  R8w  dä   RV9  d0   V
P,                  f   Q h V
P,                  P3                  V
4      VR&   RV9   d§   VP0                  R8X  dW   VP7                  4       w  pppp\8        P:                  ! \8        P:                  ! VV4      \8        P:                  ! VV4      4      pVP=                  ^ÿ.ROR4      pV
P                  4       pVP?                  VR,          VR	7       MRpT
pTPA                  \C        T;'       g    T
VV4      4       EK  	  EK9  	  \E        V4      ^8X  dB   R V^ ,          P                   9   d(   V^ ,          P                   R ,          V P                   R &   R
# V FÎ  pVP*                  p
VPF                  '       g2   \I        V
VP                   4       F  pVPK                  V4       K  	  RpMeV'       g   RVP                   R&   VPF                  ^ ^ .V
P(                  O58w  d   V
PM                  VPF                  4      p
VPF                  R,          p\O        WVVP                   4       KÐ  	  R#   \4         d     ELi ; i)r}   ÚdisposalNÚappend_imagesr‡   r„   Úoptimizerß   rƒ   )ÚmaskFTÚinclude_color_table:Nr%   Nr“   )ÿr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  )(r  r­   rN   Ú	itertoolsÚ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  rA   r  r
  r  ÚcropÚ_write_frame_data)r¢   r7   rS   r}   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_datar:   Úoffsets   &&&                         r#   Ú_write_multiple_framesrA  —  së  € ð �~‰~×!Ñ! *Ó-€HØ�~‰~×!Ñ! *¨b¯g©g¯k©k¸*Ó.EÓF€Hà €IØ&*€KØ€KØ€MÜ—o’o r d¨B¯N©N×,>Ñ,>¸ÐPRÓ,S×Tˆ
Ü%×.Ò.¨z×:ˆHä& x§}¡}£Ó7ˆHØ˜aÔØ$ŸM™M×/Ñ/Ö1‘D�AØ˜NÔ*Ù Ü! !¤S×)Ô)ØŸ™×1Ñ1°!Ö7ñ	 2ð Ÿ.™.×-Ñ-Ó/ˆKØ §¡Ô.Ø×&Ñ& ~°x·}±}À^Õ7TÔUÜ)¨(¸[ÓIˆHÜ˜(¤T¬5 M×2Ò2Ø*2Õ*?�˜JÒ'ØÒ! j°H·M±MÔ&AØ*2¯-©-¸
Õ*C�˜JÑ'Ü˜(¤T¬5 M×2Ò2Ø*2Õ*?�˜JÑ'Ø˜1ÕˆKàˆJßˆyŸ[˜[ä& {Ó=‘��tßà"—‘ z×2Ò2à% b�M×5Ñ5×9Ñ9¸*ÀaÓHØ)¨*Õ5õ6ð " "�×1Ñ1°*Ñ=ò Ø˜R•=×,Ñ,×0Ñ0°Ó<ÀÔAð ŸN™N×.Ñ.Ø&¨¯©¯©°NÓ(Có�Eð Ò(Ø(Ò0Ü)8¸À5Ó)I˜JÜ,1¯IªI°c¸8¿=¹=È*Ó,U˜MØ,5°a­L¯O©O×,CÑ,C˜MØ#0Ò#<Ð<Ð#<Ø)×4Ñ4°]ÀM×DVÑDVÔWÜ'¨Ó@ÀÕCšà ! 1Ð5 x§}¡}Ñ5šØ —_‘_ Z×0Ò0°X·]±]ÀcÔ5IØ%¨[Ô8Ø'×/Ñ/Ò;Ð;Ð;ð!à (× 0Ñ 0× AÑ AÀ(Ó Kð (¨Ñ7ð
 &¨Ô4à Ÿ:™:¨Ô/à).¯©«™J˜A˜q ! QÜ$.×$6Ò$6Ü *× 2Ò 2°1°aÓ 8Ü *× 2Ò 2°1°aÓ 8ó%˜Eð %*§K¡K°Ð0B°zÐ0BÀCÓ$H˜	Ø%-§]¡]£_˜
Ø"×(Ñ(¨°^Õ)DÈ9Ð(ÔUøà�Ø"ˆKØ×ÑœV J×$:Ð$:°(¸DÀ+ÓN×OôY ;ñ Uô^ ˆ9ƒ~˜ÔØ˜ 1�×1Ñ1Ô1à)2°1­×)AÑ)AÀ*Õ)MˆB�N‰N˜:Ñ&Ùãˆ
Ø—=‘=ˆØ��ˆä'¨°*×2HÑ2HÖI�Ø—‘˜–ñ Jà‰F÷ Ø@D�
×&Ñ&Ð'<Ñ=à�‰ 1 aÐ"8¨(¯-©-Ñ"8Ô8Ø#Ÿ=™=¨¯©Ó9�Ø—_‘_ RÕ(ˆFÜ˜"¨°
×0FÑ0FÖGñ  ñ  øôW  *ô !Ú ð!ús   ÏW-×-W<×;W<c               ó(   € V ^8„  d   QhRRRRRRRR/# )	r%   r¢   rá   r7   r  Úfilenameústr | bytesr(   rG   r   )r*   s   "r#   r+   r+   	  s(   € ÷ +ñ +�+ð + 9ð +¸ð +Èñ +r"   c                ó"   € \        WVR R7       R# )T)Úsave_allN)r  )r¢   r7   rC  s   &&&r#   Ú	_save_allrG  	  s   € Ü	ˆ"�( T×*r"   c          
     ó,   € V ^8„  d   QhRRRRRRRRR	R
/# )r%   r¢   rá   r7   r  rC  rD  rF  r)   r(   rG   r   )r*   s   "r#   r+   r+     s4   € ÷ ñ ØðØ"ðØ.9ðØEIðà	ñr"   c                ó¨  € R V P                   9   g   R V P                  9   d7   V P                   P                  R V P                  P                  R 4      4      pMRpV P                   P                  RR4       V'       d   \	        WV4      '       g   \        WV4       VP                  R4       \        VR4      '       d   VP                  4        R# R# )rS   Nr%  Tr{   Úflush)	r  rN   r­   r	  rA  r  r  ÚhasattrrJ  )r¢   r7   rC  rF  rS   s   &&&& r#   r  r    s—   € ð �B—N‘NÔ" i°2·7±7Ô&:Ø—.‘.×$Ñ$ Y°·±·±¸IÓ0FÓG‰àˆØ
�‰×!Ñ! *¨dÔ3çÔ1°"¸'×BÒBÜ˜B GÔ,à‡H�HˆT„Näˆr�7×ÒØ
�‰Ž
ñ r"   c               ó    € V ^8„  d   QhRRRR/# )r%   r¢   rá   r(   r`   r   )r*   s   "r#   r+   r+      s   € ÷ ñ �kð  cñ r"   c                óv   € V P                   P                  R ^4      p\        V P                  4      ^8  d   ^ pV# )r¶   )r  r­   ÚminrŸ   )r¢   r¶   s   & r#   r  r     s5   € Ø—‘×"Ñ" ;°Ó2€Iô ˆ2�7‰7ƒ|�bÔØˆ	àÐr"   c          
     ó,   € V ^8„  d   QhRRRRRRRRR	R
/# )r%   r7   r  r¢   rá   r@  útuple[int, int]rZ   r`   r(   rG   r   )r*   s   "r#   r+   r+   *  s4   € ÷ /ñ /Øð/Ø"ð/Ø,;ð/ØDGð/à	ñ/r"   c                ó¦  €  VP                   R ,          pRVP                   9   d%   \        VP                   R,          ^
,          4      pM^ p\        VP                   P                  R^ 4      4      pVf   V^ 8w  g	   V'       d“   Ve   ^M^ pWv^,          ,          pT P	                  R\        ^ù4      ,           \        ^4      ,           \        V4      ,           \        V4      ,           \        T;'       g    ^ 4      ,           \        ^ 4      ,           4       VP                   P                  R4      pV'       d0   \        V4      p	\        V	4      p
V
'       d   V^€,          pW:,          pV P	                  R\        V^ ,          4      ,           \        V^,          4      ,           \        VP                  ^ ,          4      ,           \        VP                  ^,          4      ,           \        V4      ,           4       V'       d#   X
'       d   V P	                  \        X	4      4       V P	                  \        ^4      4       R#   \         d    Rp EL:i ; i)r‡   Nr}   r#  r|   r'  r‚   )r  ÚKeyErrorr`   r­   r  r   Úo16Ú_get_palette_bytesÚ_get_color_table_sizerŸ   Ú_get_header_palette)r7   r¢   r@  rZ   r‡   r}   r#  Úpacked_flagr'  r  Úcolor_table_sizes   &&&&       r#   r  r  *  sÖ  € ðØ—~‘~ nÕ5ˆð �R—^‘^Ô#Ü�r—~‘~ jÕ1°BÕ6Ó7‰àˆä�2—>‘>×%Ñ% j°!Ó4Ó5€HàÒ 8¨q¤=·HØ'Ò3‘a¸ˆØ 1•}Õ$ˆà
�‰ØÜ�‹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øôU ô Ø‹ðús   ‚H? È?IÉIc               ó$   € V ^8„  d   QhRRRRRR/# )r%   r¢   rá   rN   rí   r(   zlist[int] | Noner   )r*   s   "r#   r+   r+   a  s"   € ÷ 3ñ 3�kð 3¨ð 3Ð<Lñ 3r"   c                ó>  € V P                   R9   Ed‹   V'       Ed‚   VP                  R4      '       Edj   V P                  ^ 8w  EdX   V P                  ^ 8w  EdF   \        ;'       g    V P                   R8H  pV'       g#   V P                  V P                  ,          R8  dÿ   . p\        V P                  4       4       F   w  rEV'       g   K  VP                  V4       K"  	  V'       g   \        V4      \        V4      8¼  d   V# V P                  f   Q h\        V P                  P                  4      \        P                  ! V P                  P                   4      ,          p^V^,
          P                  4       ,          p\        V4      V^,          8:  d
   V^8”  d   V# R# )a0  
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%  N)r„   r…   i   )r¨   r­   ÚwidthÚheightÚ_FORCE_OPTIMIZErõ   Ú	histogramrž   r    rA   rS   r   ÚgetmodebandsÚ
bit_length)r¢   rN   Úoptimiserû   rB   ÚcountÚnum_palette_colorsÚcurrent_palette_sizes   &&      r#   r÷   r÷   a  s;  € ð 	�‰�:ÕßˆDØ�H‰H�Z× Ó Ø�H‰H˜�MØ�I‰I˜�Nô #×4Ð4 b§g¡g°¡nˆß�r—x‘x "§)¡)Õ+¨iÔ7à"$ÐÜ% b§l¡l£nÖ5‘�ß‘5Ø'×.Ñ.¨qÖ1ñ 6÷ œ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Ô,à*Ð*Ùr"   c               ó    € V ^8„  d   QhRRRR/# )r%   r  r'   r(   r`   r   )r*   s   "r#   r+   r+   —  s   € ÷ Cñ C¨ð C°3ñ Cr"   c                ó¾   € V '       g   ^ # \        V 4      ^	8  d   ^# \        P                  ! \        P                  ! \        V 4      ^,          ^4      4      ^,
          # r•   )rA   ÚmathÚceilÚlog)r  s   &r#   rU  rU  —  sA   € çÙÜ	ˆ]Ó	˜aÔ	Ùä�yŠyœŸš¤# mÓ"4¸Õ"9¸1Ó=Ó>ÀÕBÐBr"   c               ó    € V ^8„  d   QhRRRR/# )r%   r  r'   r(   r   )r*   s   "r#   r+   r+   ¡  s   € ÷ ñ  uð °ñ r"   c                óª   € \        V 4      p^V,          \        V 4      ^,          ,
          pV^ 8”  d!   V \        ^ 4      ^,          V,          ,          p V # )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
)rU  rA   r   )r  rX  Úactual_target_size_diffs   &  r#   rV  rV  ¡  sR   € ô -¨]Ó;Ðð  !Ð$4Õ4¼¸MÓ8JÈaÕ8OÕOÐØ Ô"Øœ˜A› �Ð%<Õ<Õ<ˆØÐr"   c               ó    € V ^8„  d   QhRRRR/# )r%   r¢   rá   r(   r'   r   )r*   s   "r#   r+   r+   ³  s   € ÷ ñ ˜;ð ¨5ñ r"   c                ó  a€ V P                   '       g   R# \        V P                   P                   4      oV P                   P                  R8X  d5   RP                  V3R l\	        \        S4      ^,          4       4       4      o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  óX   <"  € T F  pSV^,          V^,          ^,            x € K!  	  R# 5i)é   Nr   )rð   rB   rS   s   & €r#   rñ   Ú%_get_palette_bytes.<locals>.<genexpr>¿  s&   øé € ÐXÑ?W¸!˜7 1 q¥5¨1¨q­5°1­9Õ5Ó?Wùs   ƒ'*)rS   r'   r¨   r³   r@   rA   )r¢   rS   s   &@r#   rT  rT  ³  s]   ø€ ð �:�:ˆ:Ùä�B—J‘J×&Ñ&Ó'€GØ	‡z�z‡�˜&Ô Ø—(‘(ÔX¼uÄSÈÃ\ÐUVÕEVÔ?WÓXÓXˆØ€Nr"   c               ó$   € V ^8„  d   QhRRRRRR/# )r%   r¢   rá   Úinfo_backgroundz=int | tuple[int, int, int] | tuple[int, int, int, int] | Noner(   r`   r   )r*   s   "r#   r+   r+   Ã  s&   € ÷ ñ ØðàRðð 	ñr"   c                óú   € ^ pV'       dG   \        V\        4      '       d/   V P                  f   Q h V P                  P                  W4      pV# TpV#   \         d   p\        T4      R9  d   h  Rp?T# Rp?ii ; i)r   N)z$cannot allocate more than 256 colorsz/cannot add non-opaque RGBA color to RGB palette)r–   r�   rS   Úgetcolorr�   r  )r¢   rs  rK   ru   s   &&  r#   r+  r+  Ã  sŽ   € ð €JßÜ�o¤u×-Ò-ð —:‘:Ò)Ð)Ð)ð
ØŸZ™Z×0Ñ0°ÓE�
ð Ðð )ˆJØÐøô ô Ü�q“6ð "ô ð óð Ðûðús   ²A ÁA:ÁA5Á5A:c               ó$   € V ^8„  d   QhRRRRRR/# )r%   r¢   rá   rN   rí   r(   úlist[bytes]r   )r*   s   "r#   r+   r+   Þ  s!   € ÷ :ñ :˜;ð :¨nð :Àñ :r"   c                ó  € RpV P                   P                  R4      R8X  gQ   V'       dK   RV9   gB   VP                  R4      f/   VP                  R4      '       g   VP                  R4      '       d   Rp\        WP                  R4      4      p\        V 4      p\	        V4      pR	V,           \        V P                  ^ ,          4      ,           \        V P                  ^,          4      ,           \        V^€,           4      \        V4      \        ^ 4      ,           \        V4      .pVP                  R4      e€   VP                  R
\        ^ÿ4      ,           \        ^4      ,           R,           \        ^4      ,           \        ^4      ,           \        VR,          4      ,           \        ^ 4      ,           4       VP                  R4      '       d½   VP                  R
\        ^þ4      ,           4       VR,          p\        V\        4      '       d   VP                  4       p\        ^ \        V4      ^ÿ4       F8  pWxV^ÿ,            p	VP                  \        \        V	4      4      V	,           4       K:  	  VP                  \        ^ 4      4       V# )z2Return a list of strings representing a GIF headers   87arJ   s   89ar‡   r�   r}   rz   rK   s   GIFr|   r€   )rN   r­   r+  rT  rU  rS  rŸ   r   rV  rž   r–   r  Úencoder@   rA   )
r¢   rN   rJ   rK   r  rX  Úheaderrz   rB   Úsubblocks
   &&        r#   r
  r
  Þ  s  € ð €GØ	‡w�w‡{�{�9Ó Ô'ßà˜dÔ"Ø�x‰x˜ÓÒ+Ø�x‰x˜
×#Ò#Ø�x‰x˜	×"Ò"ð ˆä  §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�	×ÒØ�‰�dœR ›W•nÔ%à�y•/ˆÜ�gœs×#Ò#Ø—n‘nÓ&ˆGÜ�qœ#˜g›,¨Ö,ˆAØ 1 s¥7Ð+ˆHØ�M‰Mœ"œS ›]Ó+¨hÕ6Ö7ñ -ð 	�‰”b˜“eÔØ€Mr"   c          
     ó,   € V ^8„  d   QhRRRRRRRRR	R
/# )r%   r7   r  r  rá   r@  rP  Úparamsrí   r(   rG   r   )r*   s   "r#   r+   r+     s:   € ÷ !ñ !Øð!àð!ð ð!ð ð	!ð
 
ñ!r"   c                ó
  €  W1n         \        WV^ 4       \        P                  ! VV \        P                  ! R^ ^ .VP
                  O5^ \        VP                  ,          4      .4       V P                  R4       V= R#   T= i ; i)r   r’   r  N)	r  r  r
   r  r²   rŸ   rä   r¨   r  )r7   r  r@  r}  s   &&&&r#   r2  r2    ss   € ð!Ø%Ôô 	˜B¨&°!Ô4ä�ŠØØÜ�_Š_˜U Q¨Ð$:¨H¯M©MÑ$:¸A¼wÀxÇ}Á}Õ?UÓVÐWô	
ð 	�‰�ŒàÒ øˆHÑ ús   ‚A8A> Á>Bc               ó(   € V ^8„  d   QhRRRRRRRR/# )	r%   r¢   rá   rS   rì   rN   zdict[str, Any] | Noner(   z$tuple[list[bytes], list[int] | None]r   )r*   s   "r#   r+   r+   6  s,   € ÷ 'ñ 'Øð'Ø-ð'Ø<Qð'à)ñ'r"   c                óø   € Vf   / p\        W4      pRV9  d(   RV P                  9   d   V P                  R,          VR&   \        WV4      pVP                  V n        VP                  V n        \        W4      pWS3# )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)

rK   )r÷   rN   r   rS   r¢   r
  )r¢   rS   rN   rû   Úim_modrz  s   &&&   r#   Ú	getheaderr‚  6  st   € ð ‚|Øˆä'¨Ó1Ðà˜4Ô L°B·G±GÔ$;ØŸW™W \Õ2ˆˆ\Ñä ¨TÓ2€FØ—‘€B„JØ�I‰I€B„EÜ Ó)€FàÐ&Ð&r"   c               ó(   € V ^8„  d   QhRRRRRRRR/# )	r%   r¢   rá   r@  rP  r}  r   r(   rw  r   )r*   s   "r#   r+   r+   T  s,   € ÷ "ñ "Øð"Ø,ð"ØADð"àñ"r"   c                ó‚   € ^ RI Hp  ! R RV4      pV P                  4        V! 4       p\        WPW4       VP                  # )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

)ÚBytesIOc                  ó&   € ] tR tRt. tR R ltRtR# )Úgetdata.<locals>.Collectorii  c               ó    € V ^8„  d   QhRRRR/# )r%   r;   r   r(   r`   r   )r*   s   "r#   r+   Ú'getdata.<locals>.Collector.__annotate__l  s   € ÷ 	ñ 	˜fð 	¨ñ 	r"   c                	óN   € V P                   P                  V4       \        V4      # r6   )r;   rž   rA   )r9   r;   s   &&r#   r  Ú getdata.<locals>.Collector.writel  s   € Ø�I‰I×Ñ˜TÔ"Ü�t“9Ðr"   r   N)r   r   r   r   r;   r  r!   r   r"   r#   Ú	Collectorr‡  i  s   † Øˆ÷	ñ 	r"   rŒ  )Úior…  rœ   r2  r;   )r¢   r@  r}  r…  rŒ  r7   s   &&,   r#   rÆ   rÆ   T  s8   € õ& ô�Gô ð ‡G�G„Iá	‹€Bä�b˜fÔ-à�7‰7€Nr"   z.gifz	image/gif>   rg  r(  Ú
subprocessú	PIL._utilúPIL._binary)F)NN)r  )FÚ
__future__r   Ú__lazy_modules__r(  rg  Úenumr   Ú	functoolsr   Útypingr   r   Ú r   r	   r
   r   r   Ú_binaryr   rO   r   r   rS  Ú_utilr   ÚTYPE_CHECKINGr   r   r   r   Ú_typingr   r   r   r¦   r/   r1   rä   rê   r'   ró   rô   r`   Ú_Paletter   r  r  r  rA  rG  r  r  r  r]  r÷   rU  rV  rT  r+  r
  r2  r‚  rÆ   Úregister_openr*   Úregister_saveÚregister_save_allÚregister_extensionÚregister_mimer   r"   r#   Ú<module>r¡     sŸ  ðõ4 #òÐ ó Û Ý Ý %ß #÷õ õ "Ý Ý !Ý  à€ßß'Ñ'åÝô�gô ð #×2Ñ2Ð õ5ôd�9×&Ñ&ô dðV ��S˜#˜s CÐ
(€õð4 �9Õ˜t C�yÕ(¨<×+DÑ+DÕD€õDõNõ8
2ô ˆZô  õoõd+÷õ&õ/ðh €õ3õlCõõ$õ õ6:õz!÷6'÷<"ðP × Ò �L×'Ñ'¨°wÔ ?Ø × Ò �L×'Ñ'¨Ô /Ø × Ò ˜×+Ñ+¨YÔ 7Ø × Ò ˜×,Ñ,¨fÔ 5Ø × Ò �L×'Ñ'¨Ö 5r"   