§
    œ"²c}‘  ã                   ó°   — d dl Z d dlZd dlZddlmZmZ ddlmZ 	  G d„ d¦  «        Zdd„Z		 ej
        j        Zn# e$ r dZY nw xY wdd„Zdd	„Zd
„ Zd„ ZdS )é    Né   )ÚImageÚ
ImageColor)Ú	deprecatec                   óF  — e Zd ZdZd d„Zd„ Zd d„Zd!d„Zd d„Zd"d„Z	d"d	„Z
d#d„Zd$d„Zd"d„Zd d„Zd"d„Z	 d%d„Zd"d„Zd&d„Zd„ Zd„ Zd„ Z	 	 	 	 	 	 	 	 	 	 	 d'd„Z	 	 	 	 	 	 	 	 	 	 	 d'd„Z	 	 	 	 	 	 d(d„Z	 	 	 	 	 	 d(d„Z	 	 	 	 	 d)d„Z	 	 	 	 	 	 	 	 	 d*d„Z	 	 	 	 	 	 	 	 	 d*d„ZdS )+Ú	ImageDrawNc                 óP  — |                      ¦   «          |j        r|                     ¦   «          d}|€|j        }||j        k    r%|dk    r|j        dk    rd}nd}t	          |¦  «        ‚|dk    r|j        | _        nd| _        || _        |j        | _        t          j	         
                    | j        |¦  «        | _
        || _        |dv r | j
                             d¦  «        | _        n| j
                             d	¦  «        | _        |d
v rd| _        nd| _        d| _        dS )a˜  
        Create a drawing instance.

        :param im: The image to draw in.
        :param mode: Optional mode to use for color values.  For RGB
           images, this argument can be RGB or RGBA (to blend the
           drawing into the image).  For all other modes, this argument
           must be the same as the image mode.  If omitted, the mode
           defaults to the mode of the image.
        r   NÚRGBAÚRGBr   zmode mismatchÚP)ÚIÚFéÿÿÿÿ)Ú1r   r   r   r   ÚLF)ÚloadÚreadonlyÚ_copyÚmodeÚ
ValueErrorÚpaletteÚ_imageÚimr   ÚcoreÚdrawÚdraw_inkÚinkÚfontmodeÚfill)Úselfr   r   ÚblendÚmsgs        ú//usr/lib/python3/dist-packages/PIL/ImageDraw.pyÚ__init__zImageDraw.__init__3   s  € ð 	�Š‰	Œ	ˆ	ØŒ;ð 	Ø�HŠH‰JŒJˆJØˆØˆ<Ø”7ˆDØ�2”7Š?ˆ?Ø�vŠ~ˆ~ "¤'¨UÒ"2Ð"2Ø��à%�Ý  ‘o”oÐ%Ø�3Š;ˆ;Øœ:ˆDŒLˆLàˆDŒLØˆŒØ”%ˆŒÝ”J—O’O D¤G¨UÑ3Ô3ˆŒ	ØˆŒ	Ø�:ÐÐØ”y×)Ò)¨!Ñ,Ô,ˆDŒHˆHà”y×)Ò)¨"Ñ-Ô-ˆDŒHØÐ'Ð'Ð'àˆDŒMˆMàˆDŒMØˆŒ	ˆ	ˆ	ó    c                 ó\   — | j         sddlm} |                     ¦   «         | _         | j         S )a=  
        Get the current default font.

        To set the default font for this ImageDraw instance::

            from PIL import ImageDraw, ImageFont
            draw.font = ImageFont.truetype("Tests/fonts/FreeMono.ttf")

        To set the default font for all future ImageDraw instances::

            from PIL import ImageDraw, ImageFont
            ImageDraw.ImageDraw.font = ImageFont.truetype("Tests/fonts/FreeMono.ttf")

        If the current default font is ``None``,
        it is initialized with ``ImageFont.load_default()``.

        :returns: An image font.r   )Ú	ImageFont)ÚfontÚ r'   Úload_default)r    r'   s     r#   ÚgetfontzImageDraw.getfont]   s;   € ð$ Œyð 	1à#Ð#Ð#Ð#Ð#Ð#à!×.Ò.Ñ0Ô0ˆDŒIØŒyÐr%   c                 ót  — |€|€| j         r	| j        }�n!| j        }�n|�Št          |t          ¦  «        rt	          j        || j        ¦  «        }| j        r:t          |t          j	        ¦  «        s | j                             || j
        ¦  «        }| j                             |¦  «        }|�Št          |t          ¦  «        rt	          j        || j        ¦  «        }| j        r:t          |t          j	        ¦  «        s | j                             || j
        ¦  «        }| j                             |¦  «        }||fS ©N)r   r   Ú
isinstanceÚstrr   Úgetcolorr   r   ÚnumbersÚNumberr   r   r   )r    r   r   s      r#   Ú_getinkzImageDraw._getinkv   s#  € Øˆ;˜4˜<ØŒyð Ø”x�‘à”h�‘àˆÝ˜c¥3Ñ'Ô'ð >Ý$Ô-¨c°4´9Ñ=Ô=�CØ”<ð B­
°3½¼Ñ(GÔ(Gð BØœ,×/Ò/°°T´[ÑAÔA�CØ”i×(Ò(¨Ñ-Ô-�ØÐÝ˜d¥CÑ(Ô(ð @Ý%Ô.¨t°T´YÑ?Ô?�DØ”<ð D­
°4½¼Ñ(HÔ(Hð DØœ<×0Ò0°°t´{ÑCÔC�DØ”y×)Ò)¨$Ñ/Ô/�Ø�DˆyÐr%   r   c                 óz   — |                       |¦  «        \  }}|� | j                             |||||¦  «         dS dS )zDraw an arc.N)r3   r   Údraw_arc)r    ÚxyÚstartÚendr   Úwidthr   s          r#   ÚarczImageDraw.arc‹   sG   € à—L’L Ñ&Ô&‰	ˆˆTØˆ?ØŒI×Ò˜r 5¨#¨s°EÑ:Ô:Ð:Ð:Ð:ð ˆ?r%   c                 ó°   — |                      ¦   «          |                      |¦  «        \  }}|€|}|�#| j                             ||j        |¦  «         dS dS )zDraw a bitmap.N)r   r3   r   Údraw_bitmapr   )r    r6   Úbitmapr   r   s        r#   r=   zImageDraw.bitmap‘   s\   € à�Š‰ŒˆØ—L’L Ñ&Ô&‰	ˆˆTØˆ;ØˆCØˆ?ØŒI×!Ò! " f¤i°Ñ5Ô5Ð5Ð5Ð5ð ˆ?r%   c                 óÞ   — |                       ||¦  «        \  }}|�| j                             ||||d¦  «         |�-||k    r)|dk    r%| j                             ||||d|¦  «         dS dS dS dS )zDraw a chord.Nr   r   )r3   r   Ú
draw_chord©r    r6   r7   r8   r   Úoutliner9   r   s           r#   ÚchordzImageDraw.chordš   s‡   € à—L’L ¨$Ñ/Ô/‰	ˆˆTØÐØŒI× Ò   U¨C°°qÑ9Ô9Ð9Øˆ?˜s dš{˜{¨u¸ªz¨zØŒI× Ò   U¨C°°a¸Ñ?Ô?Ð?Ð?Ð?ð ˆ?˜{˜{¨z¨zr%   c                 óÖ   — |                       ||¦  «        \  }}|�| j                             ||d¦  «         |�+||k    r'|dk    r#| j                             ||d|¦  «         dS dS dS dS )zDraw an ellipse.Nr   r   )r3   r   Údraw_ellipse©r    r6   r   rA   r9   r   s         r#   ÚellipsezImageDraw.ellipse¢   s   € à—L’L ¨$Ñ/Ô/‰	ˆˆTØÐØŒI×"Ò" 2 t¨QÑ/Ô/Ð/Øˆ?˜s dš{˜{¨u¸ªz¨zØŒI×"Ò" 2 s¨A¨uÑ5Ô5Ð5Ð5Ð5ð ˆ?˜{˜{¨z¨zr%   r   c                 ó¼  ‡‡— |                       |¦  «        d         }|��5| j                             ‰|‰¦  «         |dk    �r‰dk    �rt          ‰d         t          t
          f¦  «        s*ˆfd„t          dt          ‰¦  «        d¦  «        D ¦   «         Št          dt          ‰¦  «        dz
  ¦  «        D �]£}‰|         }d„ ‰|dz
           |f|‰|dz            ffD ¦   «         }|d         |d         k    rŒBˆfd	„}	|d         |d         k    o|d         d
z
  |d         k    p&|d         |d         k     o|d         d
z   |d         k    }
|d         ‰dz  z
  dz   |d         ‰dz  z
  dz   f|d         ‰dz  z   dz
  |d         ‰dz  z   dz
  fg}|
r|d         dz   |d         dz   }}n|d         dz
  |d         dz
  }}|                      ||dz
  |dz
  |¦  «         ‰dk    rq|
r, |	||d         dz   ¦  «        | |	||d         dz   ¦  «        g}n+ |	||d         dz
  ¦  «        | |	||d         dz
  ¦  «        g}|  	                    ||d¬¦  «         �ŒŸdS dS dS dS )z6Draw a line, or a connected sequence of line segments.r   NÚcurveé   c                 óD   •— g | ]}t          ‰||d z   …         ¦  «        ‘ŒS )é   )Útuple)Ú.0Úir6   s     €r#   ú
<listcomp>z"ImageDraw.line.<locals>.<listcomp>±   s-   ø€ ÐMÐMÐM°1�%  1 q¨1¡u 9¤Ñ.Ô.ÐMÐMÐMr%   rK   r   c           
      ó¤   — g | ]M\  }}t          j        t          j        |d          |d          z
  |d         |d         z
  ¦  «        ¦  «        dz  ‘ŒNS )r   r   éh  )ÚmathÚdegreesÚatan2)rM   r7   r8   s      r#   rO   z"ImageDraw.line.<locals>.<listcomp>´   sg   € ð ð ð ñ '˜E 3õ œ¥T¤Z°°A´¸¸q¼Ñ0AÀ5ÈÄ8ÈcÐRSÌfÑCTÑ%UÔ%UÑVÔVØñðð ð r%   c                 ó  •— | \  }}|dz  }‰dz  dz
  }t          d„ ||t          j        t          j        |¦  «        ¦  «        z  f||t          j        t          j        |¦  «        ¦  «        z  ffD ¦   «         ¦  «        S )NéZ   rK   r   c              3   ó~   K  — | ]8\  }}||d k    rt          j        |¦  «        nt          j        |¦  «        z   V — Œ9dS ©r   N)rR   ÚfloorÚceil)rM   ÚpÚp_ds      r#   ú	<genexpr>z9ImageDraw.line.<locals>.coord_at_angle.<locals>.<genexpr>Á   s[   è è € ð %ð %á &  3ð °C¸!²G°G¥¤¨C¡¤ ÅÄÈ3ÁÄÑPð%ð %ð %ð %ð %ð %r%   )rL   rR   ÚcosÚradiansÚsin)ÚcoordÚangleÚxÚyÚdistancer9   s        €r#   Úcoord_at_anglez&ImageDraw.line.<locals>.coord_at_angle½   s–   ø€ Ø$™˜˜1Ø ™˜Ø#(¨1¡9¨q¡=˜Ý$ð %ð %ð "# H­t¬x½¼ÀUÑ8KÔ8KÑ/LÔ/LÑ$LÐ MØ!" H­t¬x½¼ÀUÑ8KÔ8KÑ/LÔ/LÑ$LÐ Mð+ð%ñ %ô %ñ  ô  ð r%   é´   rV   é   é   )r9   )
r3   r   Ú
draw_linesr.   ÚlistrL   ÚrangeÚlenÚpiesliceÚline)r    r6   r   r9   Újointr   rN   ÚpointÚanglesrf   ÚflippedÚcoordsr7   r8   Ú
gap_coordss    ` `           r#   ro   zImageDraw.lineª   s  øø€ à�lŠl˜4Ñ Ô  Ô#ˆØ‰?ØŒI× Ò   S¨%Ñ0Ô0Ð0Ø˜ÒÑ E¨A¢I¡IÝ! " Q¤%­$µ¨Ñ7Ô7ð NØMÐMÐMÐM½¸aÅÀRÁÄÈ!Ñ8LÔ8LÐMÑMÔM�BÝ˜q¥# b¡'¤'¨A¡+Ñ.Ô.ð 2=ñ 2=�AØ˜qœE�Eðð ð -/¨q°1©u¬I°uÐ+=ÀÀrÈ!ÈaÉ%ÄyÐ?QÐ*Rðñ ô �Fð
 ˜a”y F¨1¤IÒ-Ð-à ð
ð 
ð 
ð 
ð 
ð ˜qœ	 F¨1¤IÒ-ÐM°&¸´)¸c±/ÀFÈ1ÄIÒ2MðQà  œ) f¨Q¤iÒ/ÐO°F¸1´IÀ±OÀfÈQÄiÒ4Oð ð ˜qœ E¨A¡IÑ-°Ñ1°5¸´8¸eÀa¹iÑ3GÈ!Ñ3KÐLØ˜qœ E¨A¡IÑ-°Ñ1°5¸´8¸eÀa¹iÑ3GÈ!Ñ3KÐLð�Fð ð FØ&,¨Q¤i°"¡n°f¸Q´iÀ"±n˜s˜˜à&,¨Q¤i°"¡n°f¸Q´iÀ"±n˜s˜Ø—M’M &¨%°"©*°c¸B±hÀÑEÔEÐEà˜q’y�yà"ð à . ¨u°f¸Q´iÀ"±nÑ EÔ EØ %Ø . ¨u°f¸Q´iÀ"±nÑ EÔ Eð*˜J˜Jð !/ ¨u°f¸Q´iÀ"±nÑ EÔ EØ %Ø . ¨u°f¸Q´iÀ"±nÑ EÔ Eð*˜Jð
 Ÿ	š	 *¨d¸!˜	Ñ<Ô<Ð<ùðo ˆ?àÐ I Ið2=ð 2=r%   c                 óì   — |                      ¦   «          |                      ||¦  «        \  }}|�| j                             ||d¦  «         |�$||k    r | j                             ||d¦  «         dS dS dS )z(Experimental) Draw a shape.Nr   r   )Úcloser3   r   Údraw_outline)r    Úshaper   rA   r   s        r#   ry   zImageDraw.shapeæ   s~   € à�Š‰ŒˆØ—L’L ¨$Ñ/Ô/‰	ˆˆTØÐØŒI×"Ò" 5¨$°Ñ2Ô2Ð2Øˆ?˜s dš{˜{ØŒI×"Ò" 5¨#¨qÑ1Ô1Ð1Ð1Ð1ð ˆ?˜{˜{r%   c                 óÞ   — |                       ||¦  «        \  }}|�| j                             ||||d¦  «         |�-||k    r)|dk    r%| j                             ||||d|¦  «         dS dS dS dS )zDraw a pieslice.Nr   r   )r3   r   Údraw_pieslicer@   s           r#   rn   zImageDraw.piesliceï   s‡   € à—L’L ¨$Ñ/Ô/‰	ˆˆTØÐØŒI×#Ò# B¨¨s°D¸!Ñ<Ô<Ð<Øˆ?˜s dš{˜{¨u¸ªz¨zØŒI×#Ò# B¨¨s°C¸¸EÑBÔBÐBÐBÐBð ˆ?˜{˜{¨z¨zr%   c                 ót   — |                       |¦  «        \  }}|�| j                             ||¦  «         dS dS )z#Draw one or more individual pixels.N)r3   r   Údraw_points)r    r6   r   r   s       r#   rq   zImageDraw.point÷   sA   € à—L’L Ñ&Ô&‰	ˆˆTØˆ?ØŒI×!Ò! " cÑ*Ô*Ð*Ð*Ð*ð ˆ?r%   c                 ó˜  — |                       ||¦  «        \  }}|�| j                             ||d¦  «         |��‹||k    �r†|dk    �r�|dk    r| j                             ||d|¦  «         dS t          j        d| j        j        ¦  «        }|                       d¦  «        d         }|                     ¦   «         }t          |¦  «        }	|	j                             ||d¦  «         |                     ¦   «         }
t          |
¦  «        }	|dz  dz
  }|	j                             ||d|¦  «         | 	                    |
|¬¦  «         t          j        | j
        | j        j        ¦  «        }t          |¦  «        }	|	j                             ||d|¦  «         | j         	                    |j        d|j        z   |j        ¦  «         dS dS dS dS )zDraw a polygon.Nr   r   r   rK   )Úmask)r   r   )r3   r   Údraw_polygonr   Únewr   ÚsizeÚcopyÚDrawÚpaster   )r    r6   r   rA   r9   r   r   Úmask_inkÚfill_imr   Úink_imr   s               r#   ÚpolygonzImageDraw.polygoný   s£  € à—L’L ¨$Ñ/Ô/‰	ˆˆTØÐØŒI×"Ò" 2 t¨QÑ/Ô/Ð/Ø‰?˜s dš{™{¨u¸ªz©zØ˜ŠzˆzØ”	×&Ò& r¨3°°5Ñ9Ô9Ð9Ð9Ð9õ ”y  d¤g¤lÑ3Ô3�ØŸ<š<¨™?œ?¨1Ô-�àŸ)š)™+œ+�Ý˜G‘}”}�Ø”	×&Ò& r¨8°QÑ7Ô7Ð7àŸš™œ�Ý˜F‘|”|�Ø ™	 A™�Ø”	×&Ò& r¨8°Q¸Ñ>Ô>Ð>à—
’
˜6¨�
Ñ0Ô0Ð0å”Y˜tœy¨$¬'¬,Ñ7Ô7�Ý˜B‘x”x�Ø”	×&Ò& r¨3°°5Ñ9Ô9Ð9Ø”—’˜bœe V¨b¬gÑ%5°t´wÑ?Ô?Ð?Ð?Ð?ð/ ˆ?˜{˜{¨z¨zr%   c                 óV   — t          |||¦  «        }|                      |||¦  «         dS )zDraw a regular polygon.N)Ú!_compute_regular_polygon_verticesr‰   )r    Úbounding_circleÚn_sidesÚrotationr   rA   r6   s          r#   Úregular_polygonzImageDraw.regular_polygon  s1   € õ /¨ÀÈÑRÔRˆØ�Š�R˜˜wÑ'Ô'Ð'Ð'Ð'r%   c                 óÖ   — |                       ||¦  «        \  }}|�| j                             ||d¦  «         |�+||k    r'|dk    r#| j                             ||d|¦  «         dS dS dS dS )zDraw a rectangle.Nr   r   )r3   r   Údraw_rectanglerE   s         r#   Ú	rectanglezImageDraw.rectangle"  s   € à—L’L ¨$Ñ/Ô/‰	ˆˆTØÐØŒI×$Ò$ R¨¨qÑ1Ô1Ð1Øˆ?˜s dš{˜{¨u¸ªz¨zØŒI×$Ò$ R¨¨a°Ñ7Ô7Ð7Ð7Ð7ð ˆ?˜{˜{¨z¨zr%   c                 ó  ‡ ‡‡‡‡	‡
‡‡‡‡‡— t          |d         t          t          f¦  «        r|\  \  ŠŠ\  ŠŠn|\  ŠŠŠŠ|dz  Š‰‰‰z
  k    Š	‰	r‰‰z
  Š‰‰‰z
  k    Š
‰
r‰‰z
  Š‰	r‰
r‰                      |‰|‰¦  «        S ‰dk    r‰                      |‰|‰¦  «        S ‰dz  }‰                      |‰¦  «        \  ŠŠˆˆˆ	ˆ
ˆˆ ˆˆˆˆˆfd„}‰�È |d¦  «         ‰	r-‰ j                             ‰‰|z   dz   ‰‰|z
  dz
  f‰d¦  «         n,‰ j                             ‰|z   dz   ‰‰|z
  dz
  ‰f‰d¦  «         ‰	s`‰
s^‰ j                             ‰‰|z   dz   ‰|z   ‰|z
  dz
  f‰d¦  «         ‰ j                             ‰|z
  ‰|z   dz   ‰‰|z
  dz
  f‰d¦  «         ‰�å‰‰k    rá‰dk    rÝ |d¦  «         ‰	sd‰ j                             ‰|z   dz   ‰‰|z
  dz
  ‰‰z   dz
  f‰d¦  «         ‰ j                             ‰|z   dz   ‰‰z
  dz   ‰|z
  dz
  ‰f‰d¦  «         ‰
sl‰ j                             ‰‰|z   dz   ‰‰z   dz
  ‰|z
  dz
  f‰d¦  «         ‰ j                             ‰‰z
  dz   ‰|z   dz   ‰‰|z
  dz
  f‰d¦  «         dS dS dS dS dS )zDraw a rounded rectangle.r   rK   c                 ó`  •— ‰r‰
‰‰
‰z   ‰‰z   fddf‰
‰‰z
  ‰
‰z   ‰fddff}n[‰r‰
‰‰
‰z   ‰‰z   fddf‰‰z
  ‰‰‰‰z   fddff}n:‰‰z
  ‰‰‰‰z   fddf‰‰z
  ‰‰z
  ‰‰fddf‰
‰‰z
  ‰
‰z   ‰fddf‰
‰‰
‰z   ‰‰z   fddff}|D ]-}| r ‰j         j        |‰dfz   Ž  Œ ‰j         j        |‰‰	fz   Ž  Œ.d S )Nrg   rQ   r   rV   é  r   )r   r{   r5   )rn   ÚpartsÚpartÚdr   Úfull_xÚfull_yr   r    r9   Úx0Úx1Úy0Úy1s      €€€€€€€€€€€r#   Údraw_cornersz1ImageDraw.rounded_rectangle.<locals>.draw_cornersF  sk  ø€ Øð ð ˜"˜b 1™f b¨1¡fÐ-¨s°CÐ8Ø˜"˜q™& " q¡&¨"Ð-¨q°#Ð6ð��ð ð ð ˜"˜b 1™f b¨1¡fÐ-¨r°3Ð7Ø˜1‘f˜b " b¨1¡fÐ-¨s°BÐ7ð��ð ˜1‘f˜b " b¨1¡fÐ-¨s°CÐ8Ø˜1‘f˜b 1™f b¨"Ð-¨q°"Ð5Ø˜"˜q™& " q¡&¨"Ð-¨r°3Ð7Ø˜"˜b 1™f b¨1¡fÐ-¨s°CÐ8ð	�ð ð ?ð ?�Øð ?Ø+�D”IÔ+¨d°d¸A°YÑ.>Ð@Ð@Ð@à&�D”IÔ&¨°°e°Ñ)<Ð>Ð>Ð>ð	?ð ?r%   NTr   F)r.   rk   rL   rF   r’   r3   r   r‘   )r    r6   Úradiusr   rA   r9   ÚrrŸ   r˜   r™   rš   r   r›   rœ   r�   rž   s   `  ` `  @@@@@@@@r#   Úrounded_rectanglezImageDraw.rounded_rectangle*  s³  øøøøøøøøøøø€ å�b˜”e�d¥E˜]Ñ+Ô+ð 	 Ø!#Ñ‰HˆR�‘h�r˜2˜2à‰NˆB��B˜à�Q‰Jˆà�b˜2‘g’ˆØð 	à�R‘ˆAØ�b˜2‘g’ˆØð 	à�R‘ˆAØð 	:�fð 	:à—<’<  D¨'°5Ñ9Ô9Ð9à�Š6ˆ6à—>’> " d¨G°UÑ;Ô;Ð;à�‰FˆØ—L’L ¨$Ñ/Ô/‰	ˆˆTð	?ð 	?ð 	?ð 	?ð 	?ð 	?ð 	?ð 	?ð 	?ð 	?ð 	?ð 	?ð 	?ð 	?ð 	?ð6 ÐØˆL˜ÑÔÐàð TØ”	×(Ò(¨"¨b°1©f°q©j¸"¸bÀ1¹fÀq¹jÐ)IÈ4ÐQRÑSÔSÐSÐSà”	×(Ò(¨"¨q©&°1©*°b¸"¸q¹&À1¹*ÀbÐ)IÈ4ÐQRÑSÔSÐSØð X &ð XØ”	×(Ò(¨"¨b°1©f°q©j¸"¸q¹&À"ÀqÁ&È1Á*Ð)MÈtÐUVÑWÔWÐWØ”	×(Ò(¨"¨q©&°"°q±&¸1±*¸bÀ"ÀqÁ&È1Á*Ð)MÈtÐUVÑWÔWÐWØˆ?˜s dš{˜{¨u¸ªz¨zØˆL˜ÑÔÐàð Ø”	×(Ò(Ø˜!‘V˜a‘Z  R¨!¡V¨a¡Z°°e±¸a±Ð@À#Àqñô ð ð ”	×(Ò(Ø˜!‘V˜a‘Z  e¡¨a¡°°a±¸!±¸RÐ@À#Àqñô ð ð ð Ø”	×(Ò(Ø˜˜a™ !™ R¨%¡Z°!¡^°R¸!±V¸a±ZÐ@À#Àqñô ð ð ”	×(Ò(Ø˜%‘Z !‘^ R¨!¡V¨a¡Z°°R¸!±V¸a±ZÐ@À#Àqñô ð ð ð ð ˆ?˜{˜{¨z¨zðð r%   c                 ó<   — t          |t          ¦  «        rdnd}||v S )z
Draw text.ú
ó   
)r.   r/   ©r    ÚtextÚsplit_characters      r#   Ú_multiline_checkzImageDraw._multiline_check}  s%   € å",¨Tµ3Ñ"7Ô"7ÐB˜$˜$¸Uˆà $Ð&Ð&r%   c                 ó^   — t          |t          ¦  «        rdnd}|                     |¦  «        S )Nr¤   r¥   )r.   r/   Úsplitr¦   s      r#   Ú_multiline_splitzImageDraw._multiline_splitƒ  s,   € Ý",¨Tµ3Ñ"7Ô"7ÐB˜$˜$¸Uˆà�zŠz˜/Ñ*Ô*Ð*r%   c                 óÖ   — t          j        ¦   «         5  t          j        dt          ¬¦  «         |                      d||¬¦  «        d         |z   	 cd d d ¦  «         S # 1 swxY w Y   d S )NÚignore©ÚcategoryÚA)r(   Ústroke_widthr   )ÚwarningsÚcatch_warningsÚfilterwarningsÚDeprecationWarningÚtextsize)r    r(   Úspacingr²   s       r#   Ú_multiline_spacingzImageDraw._multiline_spacingˆ  sÄ   € åÔ$Ñ&Ô&ð 		ð 		ÝÔ# HÕ7IÐJÑJÔJÐJà—’ØØØ!-ð ñ ô ð ô	ð
 ñðð		ð 		ð 		ð 		ñ 		ô 		ð 		ð 		ð 		ð 		ð 		ð 		øøøð 		ð 		ð 		ð 		ð 		ð 		s   ”=AÁA"Á%A"rI   ÚleftFc                 ó¨  ‡ ‡‡‡‡‡‡	‡
‡‡‡— ‰                       ‰¦  «        r!‰                      ‰‰|‰‰||‰‰	‰
||‰¦  «        S ‰r‰ j        dvrd}t          |¦  «        ‚‰€‰                      ¦   «         Šˆ fd„}dˆˆˆˆˆ	ˆˆˆ
ˆ ˆˆfd„	} ||¦  «        }|�<d }|r|� ||¦  «        n|}|� |||¦  «          ||d¦  «         d S  ||¦  «         d S d S )N©r   r
   ú3Embedded color supported only in RGB and RGBA modesc                 ó@   •— ‰                      | ¦  «        \  }} |€| S |S r-   )r3   )r   r   r    s     €r#   ÚgetinkzImageDraw.text.<locals>.getink¿  s'   ø€ ØŸš TÑ*Ô*‰IˆC�Øˆ{Ø�ØˆJr%   r   c                 ó¨  •— ‰j         }|dk    r‰rd}g }g }t          d¦  «        D ]]}|                     t          ‰|         ¦  «        ¦  «         |                     t	          j        ‰|         ¦  «        d         ¦  «         Œ^	  ‰j        ‰|g‰¢R ‰‰‰|‰| |dœ‰¤Ž\  }}|d         |d         z   |d         |d         z   f}nQ# t          $ rD 	  ‰j        ‰|‰‰‰|‰| g‰¢R d|i‰¤Ž}n%# t          $ r ‰                     ‰¦  «        }Y nw xY wY nw xY w|r"|d         |d         z   |d         |d         z   f}|dk    rv|| 
                    d¦  «        }}	|	                     d| dz	  d	z  ¦  «         |\  }
}‰j                             |	|
||
|j        d         z   ||j        d         z   f|¦  «         d S ‰j                             ||| ¦  «         d S )
Nr   r
   rK   )Ú	directionÚfeaturesÚlanguager²   Úanchorr   r7   r   r7   ri   é   éÿ   )r   rl   ÚappendÚintrR   ÚmodfÚgetmask2ÚAttributeErrorÚgetmaskÚ	TypeErrorÚgetbandÚfillbandr   r…   r‚   r   r<   )r   r²   Ústroke_offsetr   ra   r7   rN   r   ÚoffsetÚcolorrc   rd   rÄ   ÚargsrÁ   Úembedded_colorrÂ   r(   ÚkwargsrÃ   r    r§   r6   s               €€€€€€€€€€€r#   Ú	draw_textz!ImageDraw.text.<locals>.draw_textÅ  s‚  ø€ Ø”=ˆDØ˜qÒ Ð  ^Ð Ø�ØˆEØˆEÝ˜1‘X”Xð 2ð 2�Ø—’�S  A¤™ZœZÑ(Ô(Ð(Ø—’�TœY r¨!¤uÑ-Ô-¨aÔ0Ñ1Ô1Ð1Ð1ð.Ø,˜tœ}ØØð ð ð ð  ð (Ø%Ø%Ø!-Ø!ØØð ð  ð ð ð  ‘��fð ˜aœ 6¨!¤9Ñ,¨e°A¬h¸À¼Ñ.BÐB��øÝ!ð .ð .ð .ð.Ø'˜4œ<ØØØ!Ø Ø Ø$ØØðð ðð ð ð $ðð !ðð �D�Døõ !ð .ð .ð .ØŸ<š<¨Ñ-Ô-�D�D�Dð.øøøøøð.øøøð" ð QØ˜aœ =°Ô#3Ñ3°U¸1´XÀÈaÔ@PÑ5PÐP�Ø�vŠ~ˆ~ð # D§L¢L°¡O¤O�t�Ø—’˜q 3¨"¡9°Ñ"4Ñ5Ô5Ð5Ø‘��1Ø”—’˜e a¨¨A°´	¸!´Ñ,<¸aÀ$Ä)ÈAÄ,Ñ>NÐ%OÐQUÑVÔVÐVÐVÐVà”	×%Ò% e¨T°3Ñ7Ô7Ð7Ð7Ð7s6   Â?C Ã
DÃC+Ã*DÃ+DÄ
DÄDÄDÄDrX   )r©   Úmultiline_textr   r   r+   )r    r6   r§   r   r(   rÄ   r¸   ÚalignrÁ   rÂ   rÃ   r²   Ústroke_fillrÔ   rÓ   rÕ   r"   r¿   rÖ   r   Ú
stroke_inks   ``` ``  ```  ```     r#   r§   zImageDraw.text•  s�  øøøøøøøøøøø€ ð$ × Ò  Ñ&Ô&ð 	Ø×&Ò&ØØØØØØØØØØØØØñô ð ð  ð 	"˜dœi¨Ð>Ð>ØGˆCÝ˜S‘/”/Ð!àˆ<Ø—<’<‘>”>ˆDð	ð 	ð 	ð 	ð 	ð3	8ð 3	8ð 3	8ð 3	8ð 3	8ð 3	8ð 3	8ð 3	8ð 3	8ð 3	8ð 3	8ð 3	8ð 3	8ð 3	8ð 3	8ð 3	8ðj ˆf�T‰lŒlˆØˆ?ØˆJØð UØ4?Ð4K˜V˜V KÑ0Ô0Ð0ÐQT�
àÐ%à�	˜* lÑ3Ô3Ð3ð �	˜#˜qÑ!Ô!Ð!Ð!Ð!ð �	˜#‘”���ð ˆ?r%   c                 óœ  — |dk    rd}t          |¦  «        ‚|€d}n?t          |¦  «        dk    rd}t          |¦  «        ‚|d         dv rd}t          |¦  «        ‚g }d	}|                      |¦  «        }|                      |||¦  «        }|D ]A}|                      ||||	|
¬
¦  «        }|                     |¦  «         t          ||¦  «        }ŒB|d         }|d         dk    r|t          |¦  «        dz
  |z  dz  z  }n$|d         dk    r|t          |¦  «        dz
  |z  z  }t          |¦  «        D ]˜\  }}|d	         }|||         z
  }|d	         dk    r	||dz  z  }n|d	         dk    r||z  }|dk    rn,|dk    r	||dz  z  }n|dk    r||z  }nd}t          |¦  «        ‚|                      ||f||||||	|
|||¬¦  «         ||z  }Œ™d S )NÚttbú/ttb direction is unsupported for multiline textÚlarK   ú#anchor must be a 2 character stringr   Útbú'anchor not supported for multiline textr   ©rÁ   rÂ   rÃ   Úmç       @r˜   r¡   rº   ÚcenterÚrightú)align must be "left", "center" or "right")rÁ   rÂ   rÃ   r²   rÙ   rÔ   )	r   rm   r¬   r¹   Ú
textlengthrÇ   ÚmaxÚ	enumerater§   )r    r6   r§   r   r(   rÄ   r¸   rØ   rÁ   rÂ   rÃ   r²   rÙ   rÔ   r"   ÚwidthsÚ	max_widthÚlinesÚline_spacingro   Ú
line_widthÚtopÚidxrº   Úwidth_differences                            r#   r×   zImageDraw.multiline_text
  sv  € ð  ˜ÒÐØCˆCÝ˜S‘/”/Ð!àˆ>ØˆFˆFÝ�‰[Œ[˜AÒÐØ7ˆCÝ˜S‘/”/Ð!Ø�AŒY˜$ÐÐØ;ˆCÝ˜S‘/”/Ð!àˆØˆ	Ø×%Ò% dÑ+Ô+ˆØ×.Ò.¨t°W¸lÑKÔKˆØð 	3ð 	3ˆDØŸšØ�d i¸(ÈXð )ñ ô ˆJð �MŠM˜*Ñ%Ô%Ð%Ý˜I zÑ2Ô2ˆIˆIà�ŒeˆØ�!Œ9˜ÒÐØ•C˜‘J”J ‘N lÑ2°SÑ8Ñ8ˆCˆCØ�AŒY˜#ÒÐØ•C˜‘J”J ‘N lÑ2Ñ2ˆCå" 5Ñ)Ô)ð "	 ð "	 ‰IˆC�Ø�a”5ˆDØ(¨6°#¬;Ñ6Ðð �aŒy˜CÒÐØÐ(¨3Ñ.Ñ.��Ø˜”˜cÒ!Ð!ØÐ(Ñ(�ð ˜ŠˆØØ˜(Ò"Ð"ØÐ(¨3Ñ.Ñ.��Ø˜'Ò!Ð!ØÐ(Ñ(��àA�Ý  ‘o”oÐ%à�IŠIØ�s�ØØØØØ#Ø!Ø!Ø)Ø'Ø-ð ñ ô ð ð �<ÑˆCˆCðE"	 ð "	 r%   c           
      óþ  — t          ddd¦  «         |                      |¦  «        rat          j        ¦   «         5  t          j        dt
          ¬¦  «         |                      |||||||¦  «        cddd¦  «         S # 1 swxY w Y   |€|                      ¦   «         }t          j        ¦   «         5  t          j        dt
          ¬¦  «         |                     |||||¦  «        cddd¦  «         S # 1 swxY w Y   dS )z*Get the size of a given string, in pixels.r·   é
   ztextbbox or textlengthr®   r¯   N)	r   r©   r³   r´   rµ   r¶   Úmultiline_textsizer+   Úgetsize)r    r§   r(   r¸   rÁ   rÂ   rÃ   r²   s           r#   r·   zImageDraw.textsize\  s“  € õ 	�*˜bÐ":Ñ;Ô;Ð;Ø× Ò  Ñ&Ô&ð 	ÝÔ(Ñ*Ô*ð 
ð 
ÝÔ'¨Õ;MÐNÑNÔNÐNØ×.Ò.ØØØØØØØ ñô ð
ð 
ð 
ð 
ñ 
ô 
ð 
ð 
ð 
ð 
ð 
ð 
øøøð 
ð 
ð 
ð 
ð ˆ<Ø—<’<‘>”>ˆDÝÔ$Ñ&Ô&ð 	ð 	ÝÔ# HÕ7IÐJÑJÔJÐJØ—<’<ØØØØØñô ð	ð 	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	ð 	s#   º6A=Á=BÂBÂ14C2Ã2C6Ã9C6c                 ó¢  — t          ddd¦  «         d}|                      |¦  «        }	|                      |||¦  «        }
t          j        ¦   «         5  t          j        dt          ¬¦  «         |	D ]0}|                      |||||||¦  «        \  }}t          ||¦  «        }Œ1	 d d d ¦  «         n# 1 swxY w Y   |t          |	¦  «        |
z  |z
  fS )Nrõ   rô   Úmultiline_textbboxr   r®   r¯   )
r   r¬   r¹   r³   r´   rµ   r¶   r·   ré   rm   )r    r§   r(   r¸   rÁ   rÂ   rÃ   r²   rì   rí   rî   ro   rï   Úline_heights                 r#   rõ   zImageDraw.multiline_textsize�  s3  € õ 	Ð&¨Ð,@ÑAÔAÐAØˆ	Ø×%Ò% dÑ+Ô+ˆØ×.Ò.¨t°W¸lÑKÔKˆÝÔ$Ñ&Ô&ð 	7ð 	7ÝÔ# HÕ7IÐJÑJÔJÐJØð 
7ð 
7�Ø*.¯-ª-ØØØØØØØ ñ+ô +Ñ'�
˜Kõ   	¨:Ñ6Ô6�	�	ð
7ð	7ð 	7ð 	7ñ 	7ô 	7ð 	7ð 	7ð 	7ð 	7ð 	7ð 	7øøøð 	7ð 	7ð 	7ð 	7ð �#˜e™*œ* |Ñ3°gÑ=Ð=Ð=s   ÁAB/Â/B3Â6B3c           	      ó,  — |                       |¦  «        rd}t          |¦  «        ‚|r| j        dvrd}t          |¦  «        ‚|€|                      ¦   «         }|rdn| j        }	 |                     |||||¦  «        S # t          $ r‹ t          dd¦  «         t          j	        ¦   «         5  t          j
        dt          ¬	¦  «         |                      |||||¬
¦  «        }	ddd¦  «         n# 1 swxY w Y   |dk    r
|	d         cY S |	d         cY S w xY w)z@Get the length of a given string, in pixels with 1/64 precision.z&can't measure length of multiline textr¼   r½   Nr
   z.textlength support for fonts without getlengthrô   r®   r¯   râ   rÜ   r   r   )r©   r   r   r+   r   Ú	getlengthrË   r   r³   r´   rµ   r¶   r·   )
r    r§   r(   rÁ   rÂ   rÃ   rÔ   r"   r   r‚   s
             r#   rè   zImageDraw.textlengthž  s†  € ð × Ò  Ñ&Ô&ð 	"Ø:ˆCÝ˜S‘/”/Ð!Øð 	"˜dœi¨Ð>Ð>ØGˆCÝ˜S‘/”/Ð!àˆ<Ø—<’<‘>”>ˆDØ'Ð:ˆvˆv¨T¬]ˆð	Ø—>’> $¨¨i¸À8ÑLÔLÐLøÝð 	ð 	ð 	ÝÐFÈÑKÔKÐKÝÔ(Ñ*Ô*ð ð ÝÔ'¨Õ;MÐNÑNÔNÐNØ—}’}ØØØ'Ø%Ø%ð %ñ ô �ðð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð ð ˜EÒ!Ð!Ø˜A”w���Ø˜”7ˆNˆNˆNð	øøøs<   Á%A> Á>-DÂ+6C-Ã!DÃ-C1	Ã1DÃ4C1	Ã5DÄDÄDc                 óž  — |r| j         dvrd}t          |¦  «        ‚|                      |¦  «        r|                      |||||||||	|
|¦  «        S |€|                      ¦   «         }|rdn| j        }|                     |||||	|
|¦  «        }|d         |d         z   |d         |d         z   |d         |d         z   |d         |d         z   fS )	z2Get the bounding box of a given string, in pixels.r¼   r½   Nr
   r   r   rK   ri   )r   r   r©   rø   r+   r   Úgetbbox)r    r6   r§   r(   rÄ   r¸   rØ   rÁ   rÂ   rÃ   r²   rÔ   r"   r   Úbboxs                  r#   ÚtextbboxzImageDraw.textbboxÃ  sÿ   € ð ð 	"˜dœi¨Ð>Ð>ØGˆCÝ˜S‘/”/Ð!à× Ò  Ñ&Ô&ð 	Ø×*Ò*ØØØØØØØØØØØñô ð ð ˆ<Ø—<’<‘>”>ˆDØ'Ð:ˆvˆv¨T¬]ˆØ�|Š|Ø�$˜	 8¨X°|ÀVñ
ô 
ˆð �AŒw˜˜Aœ‰  Q¤¨"¨Q¬%¡°°a´¸2¸a¼5±À$ÀqÄ'ÈBÈqÌEÁ/ÐQÐQr%   c                 óÈ  — |dk    rd}t          |¦  «        ‚|€d}n?t          |¦  «        dk    rd}t          |¦  «        ‚|d         dv rd}t          |¦  «        ‚g }d	}|                      |¦  «        }|                      |||
¦  «        }|D ]B}|                      |||||	|¬
¦  «        }|                     |¦  «         t          ||¦  «        }ŒC|d         }|d         dk    r|t          |¦  «        dz
  |z  dz  z  }n$|d         dk    r|t          |¦  «        dz
  |z  z  }d }t          |¦  «        D �]
\  }}|d	         }|||         z
  }|d	         dk    r	||dz  z  }n|d	         dk    r||z  }|dk    rn,|dk    r	||dz  z  }n|dk    r||z  }nd}t          |¦  «        ‚|                      ||f||||||	|
|¬¦	  «	        }|€|}nnt          |d	         |d	         ¦  «        t          |d         |d         ¦  «        t          |d         |d         ¦  «        t          |d         |d         ¦  «        f}||z  }�Œ|€|d	         |d         |d	         |d         fS |S )NrÜ   rÝ   rÞ   rK   rß   r   rà   rá   r   )rÁ   rÂ   rÃ   rÔ   rã   rä   r˜   r¡   rº   rå   ræ   rç   )rÁ   rÂ   rÃ   r²   rÔ   ri   )
r   rm   r¬   r¹   rè   rÇ   ré   rê   rÿ   Úmin)r    r6   r§   r(   rÄ   r¸   rØ   rÁ   rÂ   rÃ   r²   rÔ   r"   rë   rì   rí   rî   ro   rï   rð   rþ   rñ   rº   rò   Ú	bbox_lines                            r#   rø   zImageDraw.multiline_textbboxí  s  € ð ˜ÒÐØCˆCÝ˜S‘/”/Ð!àˆ>ØˆFˆFÝ�‰[Œ[˜AÒÐØ7ˆCÝ˜S‘/”/Ð!Ø�AŒY˜$ÐÐØ;ˆCÝ˜S‘/”/Ð!àˆØˆ	Ø×%Ò% dÑ+Ô+ˆØ×.Ò.¨t°W¸lÑKÔKˆØð 
	3ð 
	3ˆDØŸšØØØ#Ø!Ø!Ø-ð )ñ ô ˆJð �MŠM˜*Ñ%Ô%Ð%Ý˜I zÑ2Ô2ˆIˆIà�ŒeˆØ�!Œ9˜ÒÐØ•C˜‘J”J ‘N lÑ2°SÑ8Ñ8ˆCˆCØ�AŒY˜#ÒÐØ•C˜‘J”J ‘N lÑ2Ñ2ˆCàˆå" 5Ñ)Ô)ð *	 ñ *	 ‰IˆC�Ø�a”5ˆDØ(¨6°#¬;Ñ6Ðð �aŒy˜CÒÐØÐ(¨3Ñ.Ñ.��Ø˜”˜cÒ!Ð!ØÐ(Ñ(�ð ˜ŠˆØØ˜(Ò"Ð"ØÐ(¨3Ñ.Ñ.��Ø˜'Ò!Ð!ØÐ(Ñ(��àA�Ý  ‘o”oÐ%àŸšØ�s�ØØØØ#Ø!Ø!Ø)Ø-ð &ñ 
ô 
ˆIð ˆ|Ø ��õ ˜˜Qœ ¨1¤Ñ.Ô.Ý˜˜Qœ ¨1¤Ñ.Ô.Ý˜˜Qœ ¨1¤Ñ.Ô.Ý˜˜Qœ ¨1¤Ñ.Ô.ð	�ð �<ÑˆC‰Càˆ<Ø�a”5˜"˜Qœ%  A¤¨¨1¬Ð-Ð-Øˆr%   r-   )Nr   )NNr   )Nr   N©NN)r   NN)r   NNr   )NNNrI   rº   NNNr   NF)NrI   NNNr   )NNNNF)	NNrI   rº   NNNr   F)Ú__name__Ú
__module__Ú__qualname__r(   r$   r+   r3   r:   r=   rB   rF   ro   ry   rn   rq   r‰   r�   r’   r¢   r©   r¬   r¹   r§   r×   r·   rõ   rè   rÿ   rø   © r%   r#   r   r   0   sä  € € € € € Ø€Dð(ð (ð (ð (ðTð ð ð2ð ð ð ð*;ð ;ð ;ð ;ð6ð 6ð 6ð 6ð@ð @ð @ð @ð6ð 6ð 6ð 6ð:=ð :=ð :=ð :=ðx2ð 2ð 2ð 2ðCð Cð Cð Cð+ð +ð +ð +ð@ð @ð @ð @ð> HLð(ð (ð (ð (ð8ð 8ð 8ð 8ðQð Qð Qð Qðf'ð 'ð 'ð+ð +ð +ð
ð ð ð" ØØØØØØØØØØðsð sð sð sðr ØØØØØØØØØØðP ð P ð P ð P ðj ØØØØØð#ð #ð #ð #ðP ØØØØØð>ð >ð >ð >ð@ ØØØØð#ð #ð #ð #ðR ØØØØØØØØð(Rð (Rð (Rð (Rð\ ØØØØØØØØðað að að að að ar%   r   c                 ón   — 	 |                       |¦  «        S # t          $ r t          | |¦  «        cY S w xY w)a‹  
    A simple 2D drawing interface for PIL images.

    :param im: The image to draw in.
    :param mode: Optional mode to use for color values.  For RGB
       images, this argument can be RGB or RGBA (to blend the
       drawing into the image).  For all other modes, this argument
       must be the same as the image mode.  If omitted, the mode
       defaults to the mode of the image.
    )ÚgetdrawrË   r   )r   r   s     r#   r„   r„   Q  sJ   € ð#Ø�zŠz˜$ÑÔÐøÝð #ð #ð #Ý˜˜TÑ"Ô"Ð"Ð"Ð"ð#øøøs   ‚ —4³4c                 óˆ   — d}|rd|v r	 ddl m} n# t          $ r Y nw xY w|€ddl m} | r|                     | ¦  «        } | |fS )a  
    (Experimental) A more advanced 2D drawing interface for PIL images,
    based on the WCK interface.

    :param im: The image to draw in.
    :param hints: An optional list of hints.
    :returns: A (drawing context, drawing resource factory) tuple.
    NÚnicestr   )Ú_imagingagg)Ú
ImageDraw2)r)   r  ÚImportErrorr  r„   )r   ÚhintsÚhandlers      r#   r	  r	  i  s�   € ð €GØð �H Ð%Ð%ð	Ø0Ð0Ð0Ð0Ð0Ð0Ð0øÝð 	ð 	ð 	ØˆDð	øøøà€Ø+Ð+Ð+Ð+Ð+Ð+Ø	ð Ø�\Š\˜"ÑÔˆØˆwˆ;Ðs   Š ‘
�c                 ó~  — |                       ¦   «         }|\  }}	 |||f         }t          ||¦  «        |k    rdS ||||f<   n# t          t          f$ r Y dS w xY w||fh}	t	          ¦   «         }
|	rÍt	          ¦   «         }|	D ]´\  }}|dz   |f|dz
  |f||dz   f||dz
  ffD ]”\  }}||f|
v s|dk     s|dk     rŒ	 |||f         }|
                     ||f¦  «         |€t          ||¦  «        |k    }n||k    o||k    }|r||||f<   |                     ||f¦  «         Œ~# t          t          f$ r Y Œ‘w xY wŒµ|	}
|}	|	°ËdS dS )aÏ  
    (experimental) Fills a bounded region with a given color.

    :param image: Target image.
    :param xy: Seed position (a 2-item coordinate tuple). See
        :ref:`coordinate-system`.
    :param value: Fill color.
    :param border: Optional border value.  If given, the region consists of
        pixels with a color different from the border color.  If not given,
        the region consists of pixels having the same color as the seed
        pixel.
    :param thresh: Optional threshold value which specifies a maximum
        tolerable difference of a pixel value from the 'background' in
        order for it to be replaced. Useful for filling regions of
        non-homogeneous, but similar, colors.
    Nr   r   )r   Ú_color_diffr   Ú
IndexErrorÚsetÚadd)Úimager6   ÚvalueÚborderÚthreshÚpixelrc   rd   Ú
backgroundÚedgeÚ	full_edgeÚnew_edgeÚsÚtr[   r   s                   r#   Ú	floodfillr!  �  sí  € ð& �JŠJ‰LŒL€EØ�D€A€qðØ˜1˜a˜4”[ˆ
Ý�u˜jÑ)Ô)¨VÒ3Ð3ØˆFØˆˆa�ˆd‰ˆøÝ�
Ð#ð ð ð Øˆˆðøøøà�ˆFˆ8€Dõ ‘”€IØ
ð Ý‘5”5ˆØð 	-ð 	-‰FˆQ�Ø ™E 1˜:¨¨A©¨q z°A°q¸1±u°:ÀÀ1ÀqÁ5¸zÐJð -ð -‘��Aà�q�6˜YÐ&Ð&¨!¨aª%¨%°1°q²5°5Øð-Ø˜a ˜dœ�Að —M’M 1 a &Ñ)Ô)Ð)Ø�~Ý*¨1¨jÑ9Ô9¸VÒC˜˜à  EšzÐ9¨a°6ªk˜Øð -Ø&+˜˜a ˜d™Ø Ÿš a¨ VÑ,Ô,Ð,øøõ #¥JÐ/ð ð ð Ø�Dðøøøð-ð" ˆ	Øˆð+ ð ð ð ð ð s(   ›A »A ÁAÁAÂ8
DÄD1Ä0D1c                 óà  ‡‡‡‡	— t          |t          ¦  «        sd}t          |¦  «        ‚|dk     rd}t          |¦  «        ‚t          | t          t
          f¦  «        sd}t          |¦  «        ‚t          | ¦  «        dk    r| �^ ŠŠ	n*t          | ¦  «        dk    r| \  ŠŠ	nd}t          |¦  «        ‚t          d„ g ‰¢‰	‘R D ¦   «         ¦  «        sd}t          |¦  «        ‚t          ‰¦  «        dk    sd	}t          |¦  «        ‚‰	d
k    rd}t          |¦  «        ‚t          |t          t          f¦  «        sd}t          |¦  «        ‚d„ Šˆfd„Šd„ } |||¦  «        }ˆˆˆ	fd„|D ¦   «         S )uŽ  
    Generate a list of vertices for a 2D regular polygon.

    :param bounding_circle: The bounding circle is a tuple defined
        by a point and radius. The polygon is inscribed in this circle.
        (e.g. ``bounding_circle=(x, y, r)`` or ``((x, y), r)``)
    :param n_sides: Number of sides
        (e.g. ``n_sides=3`` for a triangle, ``6`` for a hexagon)
    :param rotation: Apply an arbitrary rotation to the polygon
        (e.g. ``rotation=90``, applies a 90 degree rotation)
    :return: List of regular polygon vertices
        (e.g. ``[(25, 50), (50, 50), (50, 25), (25, 25)]``)

    How are the vertices computed?
    1. Compute the following variables
        - theta: Angle between the apothem & the nearest polygon vertex
        - side_length: Length of each polygon edge
        - centroid: Center of bounding circle (1st, 2nd elements of bounding_circle)
        - polygon_radius: Polygon radius (last element of bounding_circle)
        - angles: Location of each polygon vertex in polar grid
            (e.g. A square with 0 degree rotation => [225.0, 315.0, 45.0, 135.0])

    2. For each angle in angles, get the polygon vertex at that angle
        The vertex is computed using the equation below.
            X= xcos(Ï†) + ysin(Ï†)
            Y= âˆ’xsin(Ï†) + ycos(Ï†)

        Note:
            Ï† = angle in degrees
            x = 0
            y = polygon_radius

        The formula above assumes rotation around the origin.
        In our case, we are rotating around the centroid.
        To account for this, we use the formula below
            X = xcos(Ï†) + ysin(Ï†) + centroid_x
            Y = âˆ’xsin(Ï†) + ycos(Ï†) + centroid_y
    zn_sides should be an intri   zn_sides should be an int > 2z!bounding_circle should be a tuplerK   z[bounding_circle should contain 2D coordinates and a radius (e.g. (x, y, r) or ((x, y), r) )c              3   óN   K  — | ] }t          |t          t          f¦  «        V — Œ!d S r-   )r.   rÈ   Úfloat)rM   rN   s     r#   r]   z4_compute_regular_polygon_vertices.<locals>.<genexpr>ù  s0   è è € ÐPÐP¨q�z˜!�c¥5˜\Ñ*Ô*ÐPÐPÐPÐPÐPÐPr%   z0bounding_circle should only contain numeric datazBbounding_circle centre should contain 2D coordinates (e.g. (x, y))r   z$bounding_circle radius should be > 0z"rotation should be an int or floatc                 óò  — t          | d         t          j        t          j        d|z
  ¦  «        ¦  «        z  | d         t          j        t          j        d|z
  ¦  «        ¦  «        z  z
  |d         z   d¦  «        t          | d         t          j        t          j        d|z
  ¦  «        ¦  «        z  | d         t          j        t          j        d|z
  ¦  «        ¦  «        z  z   |d         z   d¦  «        fS )Nr   rQ   r   rK   )ÚroundrR   r^   r_   r`   )rq   rS   Úcentroids      r#   Ú_apply_rotationz:_compute_regular_polygon_vertices.<locals>._apply_rotation  sæ   € åØ�a”�4œ8¥D¤L°°w±Ñ$?Ô$?Ñ@Ô@Ñ@Ø˜”(�TœX¥d¤l°3¸±=Ñ&AÔ&AÑBÔBÑBñCà˜1”+ñð ñ	ô õ Ø�a”�4œ8¥D¤L°°w±Ñ$?Ô$?Ñ@Ô@Ñ@Ø˜”(�TœX¥d¤l°3¸±=Ñ&AÔ&AÑBÔBÑBñCà˜1”+ñð ñ	ô ð
ð 	
r%   c                 ó&   •— |dg} ‰||| ¦  «        S ©Nr   r  )r'  Úpolygon_radiusrb   Ústart_pointr(  s       €r#   Ú_compute_polygon_vertexzB_compute_regular_polygon_vertices.<locals>._compute_polygon_vertex  s!   ø€ Ø% qÐ)ˆØˆ˜{¨E°8Ñ<Ô<Ð<r%   c                 óš   — g }d| z  }dd|z  z
  |z   }t          d| ¦  «        D ]'}|                     |¦  «         ||z  }|dk    r|dz  }Œ(|S )NrQ   r•   g      à?r   )rl   rÇ   )r�   rŽ   rr   rS   Úcurrent_angleÚ_s         r#   Ú_get_anglesz6_compute_regular_polygon_vertices.<locals>._get_angles  ss   € ØˆØ˜‘-ˆà˜s W™}Ñ,°Ñ8ˆÝ�q˜'Ñ"Ô"ð 	%ð 	%ˆAØ�MŠM˜-Ñ(Ô(Ð(Ø˜WÑ$ˆMØ˜sÒ"Ð"Ø Ñ$�øØˆr%   c                 ó*   •— g | ]} ‰‰‰|¦  «        ‘ŒS r  r  )rM   rb   r-  r'  r+  s     €€€r#   rO   z5_compute_regular_polygon_vertices.<locals>.<listcomp>/  s6   ø€ ð ð ð ØEJÐÐ ¨.¸%Ñ@Ô@ðð ð r%   )	r.   rÈ   rÍ   r   rk   rL   rm   Úallr$  )
rŒ   r�   rŽ   r"   r1  rr   r(  r-  r'  r+  s
         @@@@r#   r‹   r‹   ¹  sé  øøøø€ õR �g�sÑ#Ô#ð Ø(ˆÝ˜‰nŒnÐØ�‚{€{Ø,ˆÝ˜‰oŒoÐõ �o­­e }Ñ5Ô5ð Ø1ˆÝ˜‰nŒnÐå
ˆ?ÑÔ˜qÒ Ð Ø$3Ñ!ˆ�>�>Ý	ˆ_Ñ	Ô	 Ò	"Ð	"Ø#2Ñ ˆ�.�.ð<ð 	õ ˜‰oŒoÐåÐPÐPÐ4O°hÐ4OÀÐ4OÐ4OÐPÑPÔPÑPÔPð Ø@ˆÝ˜‰oŒoÐåˆx‰=Œ=˜AÒÐØRˆÝ˜‰oŒoÐà˜ÒÐØ4ˆÝ˜‰oŒoÐõ �h¥¥e Ñ-Ô-ð Ø2ˆÝ˜‰oŒoÐð
ð 
ð 
ð =ð =ð =ð =ð =ð
ð 
ð 
ð ˆ[˜ (Ñ+Ô+€Fðð ð ð ð ð ØNTðñ ô ð r%   c           	      óÂ   ‡ ‡— t          ‰t          ¦  «        r7t          ˆ ˆfd„t          dt	          ‰¦  «        ¦  «        D ¦   «         ¦  «        S t          ‰ ‰z
  ¦  «        S )zJ
    Uses 1-norm distance to calculate difference between two values.
    c              3   óT   •K  — | ]"}t          ‰|         ‰|         z
  ¦  «        V — Œ#d S r-   )Úabs)rM   rN   Úcolor1Úcolor2s     €€r#   r]   z_color_diff.<locals>.<genexpr>9  s8   øè è € ÐMÐM°!•3�v˜a”y 6¨!¤9Ñ,Ñ-Ô-ÐMÐMÐMÐMÐMÐMr%   r   )r.   rL   Úsumrl   rm   r6  )r7  r8  s   ``r#   r  r  4  s`   øø€ õ �&�%Ñ Ô ð $ÝÐMÐMÐMÐMÐMµu¸QÅÀFÁÄÑ7LÔ7LÐMÑMÔMÑMÔMÐMå�6˜F‘?Ñ#Ô#Ð#r%   r-   r  r*  )rR   r1   r³   r)   r   r   Ú
_deprecater   r   r„   r   rA   ÚOutlinerË   r	  r!  r‹   r  r  r%   r#   ú<module>r<     s!  ððB €€€Ø €€€Ø €€€à Ð Ð Ð Ð Ð Ð Ð Ø !Ð !Ð !Ð !Ð !Ð !ðð^ð ^ð ^ð ^ð ^ñ ^ô ^ð ^ðB#ð #ð #ð #ð$ØŒjÔ €G€GøØð ð ð Ø€G€G€Gðøøøðð ð ð ð05ð 5ð 5ð 5ðpxð xð xðv$ð $ð $ð $ð $s   ®; »AÁA