Ë
    ¡ëi7ç  ã                   óÆ  — d Z dZddlZddlZddlmZmZmZmZm	Z	m
Z
 ddlmZ ddlmZmZmZmZmZ ddlmZ ddlmZ dd	l­ dd
lmZmZ  e edd«      «      Zdd	l­ ddlm Z  ddl!m"Z" ddl#m$Z$ ddl%m&Z&m'Z'  e$edd«      Z( e$edd«      Z) e$edd«      Z*dZ+dZ,i dd“dejZ                  “dd“dd“dd“dd“dd“dd“dd“dd“dd“d d“d!ejZ                  “d"e&“d#d“d$e“d%d&“Z.dd	l/­ d'„ Z0d(„ Z1 G d)„ d*«      Z2 G d+„ d,«      Z3d-„ Z4d.„ Z5d/„ Z6d0„ Z7 G d1„ d2e3e2«      Z8 G d3„ d4e8«      Z9dld5„Z:dld6„Z;dmd7„Z<d8„ Z= G d9„ d:e9e«      Z> G d;„ d<«      Z? G d=„ d>e@«      ZA eA«       ZA G d?„ d@e8«      ZB G dA„ dBeB«      ZC G dC„ dDeB«      ZD eE eFdE«      «      \  ZGZHZIZJdFZKg dG¢ZLdndH„ZMdde'e'dIe'dJe'e&e&dKe&dLe&iZN G dM„ dNeD«      ZO eO«       ZPdodO„ZQ G dP„ dQeO«      ZRg dddfdR„ZS G dS„ dTeD«      ZT G dU„ dVeD«      ZU G dW„ dXeD«      ZV G dY„ dZeD«      ZW G d[„ d\eD«      ZX G d]„ d^eD«      ZY G d_„ d`eB«      ZZ G da„ dbeO«      Z[defdc„Z\ G dd„ dee8«      Z] G df„ dge2«      Z^ G dh„ die8«      Z_dj„ Z`eadkk(  r e`«        yy)pz3.5.60z9Core of the graphics library - defines Drawing and Shapesé    N)ÚpiÚcosÚsinÚsqrtÚradiansÚfloor)ÚFlowable)ÚshapeCheckingÚverboseÚdefaultGraphicsFontNameÚ_unset_ÚdecimalSymbol)Úlogger)Úcolors)Ú*)ÚisSeqÚasBytesé   )Úfp_str)ÚstringWidth)Útt2ps)ÚFILL_EVEN_ODDÚFILL_NON_ZEROzNon-Zero WindingzEven-OddÚ	transform©r   r   r   r   r   r   ÚstrokeColorÚstrokeWidthÚstrokeLineCapÚstrokeLineJoinÚstrokeMiterLimité
   ÚstrokeDashArrayÚstrokeOpacityÚfillOpacityÚfillOverprintFÚstrokeOverprintÚoverprintMaskÚ	fillColorÚfillModeÚfontSizeÚfontNameÚ
textAnchorÚstartc           	      óx  — d}| D ]  }t        |t        |||«      «      }Œ t        | «      |z  }|}	|d   dk(  r	| }
|	|z
  }	n|d   dk(  rd}
n| dz  }
|	|
z   }	|d   dk(  r| }|dk(  rd}nI|dk(  r| }n@| dz  }n9|d   d	k(  rd}|dk(  r|}n'|dk(  rd}n|dz  }n| dz  }|dk(  r| }n
|dk(  r|}nd}||
||||	fS )
Nr   ÚsÚng       @éÿÿÿÿÚeÚendr-   Úw)Úmaxr   Úlen)ÚtextÚfontr*   Úleadingr,   Ú	boxAnchorr4   ÚtÚhÚytÚybÚxbÚxts                úY/var/www/html/chat/reports/venv/lib/python3.12/site-packages/reportlab/graphics/shapes.pyÚ_textBoxLimitsrB   C   s(  € Ø	€AØò 1ˆÜ�”+˜a  hÓ/Ó0‰ð1ô 	ˆD‹	�'Ñ€AØ	€BØ��|�SÒØˆRˆØ�!‰V‰Ø	�1‰�sÒ	Ø‰àˆR�‰VˆØ�"‰Wˆà��}�cÒØˆRˆØ�uÒ 1™bØ˜Ò ¨ r¡"Ø�2�c‘6‰bØ	�2‰˜Ò	ØˆØ�uÒ 1™bØ˜Ò  q¡"Ø�S‘5‰bàˆR�‰VˆØ�uÒ B 3™bØ˜Ò  r¡"Øˆbàˆr�1�a˜˜RÐÐó    c           	      ó  — t        t        |«      | |f| |z   |f| |z   ||z   f| ||z   ff«      }|D � cg c]  } | d   ‘Œ	 }} |D � cg c]  } | d   ‘Œ	 }} t        |«      t        |«      t        |«      t        |«      |fS c c} w c c} w )z�
    Find the corner points of the rotated w x h sized box at x,y
    return the corner points and the min max points in the original space
    r   r   )ÚzTransformPointsÚrotateÚminr5   )ÚxÚyr4   r<   ÚangleÚCÚXÚYs           rA   Ú_rotatedBoxLimitsrN   e   s”   € ô
 	œ ›¨¨1¨¨q°©s°1¨g°q¸±s¸1¸Q¹3°iÀÀ1ÀQÁ3ÀÐ'HÓI€AØÖ�!ˆˆ1‹Ð€AÐØÖ�!ˆˆ1‹Ð€AÐÜˆq‹6”3�q“6œ3˜q›6¤3 q£6¨1Ð,Ð,ùò 	ùÚs   ²A=ÁBc                   ó   — e Zd ZdZd„ Zy)Ú_DrawTimeResizeablez:Addin class to provide the horribleness of _drawTimeResizec                 óª   — t        | d«      rG| j                  }|j                  }||c|_        |_        t        |d«      r|j                  ||«       y y y )NÚ_canvasÚ_drawTimeResize)ÚhasattrrR   Ú_drawingÚwidthÚheightrS   )Úselfr4   r<   ÚcanvasÚdrawings        rA   rS   z#_DrawTimeResizeable._drawTimeResizeq   sS   € Ü�4˜	Ô"Ø—\‘\ˆFØ—o‘oˆGØ,-¨qÐ)ˆGŒM˜7œ>Ü�vÐ/Ô0Ø×&Ñ& q¨Õ+ð 1ð	 #rC   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__rS   © rC   rA   rP   rP   o   s
   „ ÙDó,rC   rP   c                   ó   — e Zd Zi fd„Zy)Ú_SetKeyWordArgsc                 óN   — |j                  «       D ]  \  }}t        | ||«       Œ y)z9In general properties may be supplied to the constructor.N)ÚitemsÚsetattr)rX   ÚkeywordsÚkeyÚvalues       rA   Ú__init__z_SetKeyWordArgs.__init__z   s(   € à"Ÿ.™.Ó*ò 	&‰JˆC�Ü�D˜#˜uÕ%ñ	&rC   N)r[   r\   r]   rh   r_   rC   rA   ra   ra   y   s
   „ Ø "ô &rC   ra   c                 ó®   — | D �cg c]  }|€Œ|‘Œ	 }}|sy |d   \  }}}}|dd  D ]$  \  }}}	}
||k  r|}|	|kD  r|	}||k  r|}|
|kD  sŒ#|
}Œ& ||||fS c c}w ©Nr   r   r_   )ÚrectListrH   ÚLÚxMinÚyMinÚxMaxÚyMaxÚx1Úy1Úx2Úy2s              rA   ÚgetRectsBoundsru   …   s”   € àÖ.ˆq ¡ŠÐ.€AÐ.Ù�Tà˜q™TÑ€Dˆ$��dØ˜a˜b˜Eò ÑˆˆR��RØ�Š9ØˆDØ�Š9ØˆDØ�Š9ØˆDØ�‹9Ø‰Dðð �$˜˜dÐ#Ð#ùò 	/s
   …A�Ac                 óÆ  — |d||z
  z  z
  | z
  }d|d|z  z
  | z   z  }|| z
  }| g}||z  d|z  |z  z
  }|dk\  rŠt        |«      }|dk  r| }d||z   z  }	g }
	 |
j                  |	|z  «       	 |
j                  ||	z  «       |dz  }|dz  }|
D ]4  }d|cxk  rdk  sŒn Œ|j                  ||||z  |z   z  |z   z  | z   «       Œ6 |j                  |«       |S #  Y ŒoxY w#  Y ŒaxY w)ag  
    this is used to find if a curveTo path operator has extrema in its range
    The curveTo operator is defined by the points y0, y1, y2, y3

        B(t):=(1-t)^3*y0+3*(1-t)^2*t*y1+3*(1-t)*t^2*y2+t^3*y3
            :=t^3*(y3-3*y2+3*y1-y0)+t^2*(3*y2-6*y1+3*y0)+t*(3*y1-3*y0)+y0
    and is a cubic bezier curve.

    The differential is a quadratic
        t^2*(3*y3-9*y2+9*y1-3*y0)+t*(6*y2-12*y1+6*y0)+3*y1-3*y0

    The extrema must be at real roots, r, of the above which lie in 0<=r<=1

    The quadratic coefficients are
        a=3*y3-9*y2+9*y1-3*y0 b=6*y2-12*y1+6*y0 c=3*y1-3*y0
    or
        a=y3-3*y2+3*y1-y0 b=2*y2-4*y1+2*y0 c=y1-y0  (remove common factor of 3)
    or
        a=y3-3*(y2-y1)-y0 b=2*(y2-2*y1+y0) c=y1-y0

    The returned value is [y0,x1,x2,y3] where if found x1, x2 are any extremals that were found;
    there can be 0, 1 or 2 extremals
    é   é   é   r   g      à¿g      ø?r   )r   Úappend)Úy0rr   rt   Úy3ÚaÚbÚcrM   ÚdÚqÚRr;   s               rA   Ú_getBezierExtremarƒ   –   s$  € ð0 	ˆˆBˆr‰E‰�l�2�o€AØˆˆAˆb‰D‰�‰�n€AØˆ�e€AØ	ˆ€Að 	
ˆ!‰ˆa�‰c�!‰e‰€AØˆ!‚tÜ�‹GˆØˆQŠ3�Q�B�Ø�!�A‘#‰JˆØˆð	Ø�H‰H�Q�q‘SŒMð	Ø�H‰H�Q�q‘SŒMð 	
ˆS‰ˆØ	ˆQ‰ˆØò 	-ˆAØ�!Œw�QŽwà—‘˜˜A˜q ™s 1™u™I a™K™¨Ñ+Õ,ð	-ð ‡H�HˆR„LØ€Høð	Ùûð	Ùús   ÁC Á+C ÃCÃC c           
      óö   — t        | «      }| fd„}t        t        |t        d|d«      «      «      }t        t        |t        d|d«      «      «      }t	        |«      t	        |«      t        |«      t        |«      fS )Nc                 ó   — ||    S ©Nr_   )ÚiÚps     rA   ú<lambda>zgetPathBounds.<locals>.<lambda>Í   s
   € ˜Q˜q™T€ rC   r   rx   r   )r6   ÚlistÚmapÚrangerG   r5   )Úpointsr0   ÚfÚxsÚyss        rA   ÚgetPathBoundsr‘   Ë   sd   € ÜˆF‹€AØÒ!€AÜ	Œc�!”E˜!˜A˜a“LÓ!Ó	"€BÜ	Œc�!”E˜!˜A˜a“LÓ!Ó	"€BÜ�‹G”S˜“Wœc "›g¤s¨2£wÐ/Ð/rC   c                 óè   — | d   }t        |«      rN| D �cg c]  }|d   ‘Œ	 }}| D �cg c]  }|d   ‘Œ	 }}t        |«      t        |«      t        |«      t        |«      fS t        | «      S c c}w c c}w )z"Helper function for list of pointsr   r   )r   rG   r5   r‘   )Ú	pointListÚfirstÚxyr�   r�   s        rA   ÚgetPointsBoundsr–   Ò   sr   € à�a‰L€EÜˆU„|Ø'Ö(˜ˆb�‹eÐ(ˆÐ(Ø'Ö(˜ˆb�‹eÐ(ˆÐ(Ü�B“œ˜R›¤# b£'¬3¨r«7Ð3Ð3ä˜YÓ'Ð'ùò	 )ùÚ(s
   •A*§A/c                   óR   — e Zd ZdZ e«       Zd„ Zd
d„Zd„ Zdd„Z	d„ Z
er	 d„ Zd„ Zy	)ÚShapea1  Base class for all nodes in the tree. Nodes are simply
    packets of data to be created, stored, and ultimately
    rendered - they don't do anything active.  They provide
    convenience methods for verification but do not
    check attribiute assignments or use any clever setattr
    tricks this time.c                 óF   — t        d| j                  j                  z  «      ‚)zReturn a clone of this shape.z!No copy method implemented for %s)ÚNotImplementedErrorÚ	__class__r[   ©rX   s    rA   Úcopyz
Shape.copyê   s   € ô "Ð"EÈÏÉ×H_ÑH_Ñ"_Ó`Ð`rC   c                 ój   — i }| j                   j                  «       D ]  \  }}|dd dk7  sŒ|||<   Œ |S )zDInterface to make it easy to extract automatic
        documentationr   r   Ú_)Ú__dict__rc   )rX   ÚrecurÚpropsrf   rg   s        rA   ÚgetPropertieszShape.getPropertiesð   sF   € ð ˆØŸ-™-×-Ñ-Ó/ò 	#‰JˆC�Ø�1�Qˆx˜3‹Ø"��c’
ð	#ð ˆrC   c                 ó:   — | j                   j                  |«       y)zfSupports the bulk setting if properties from,
        for example, a GUI application or a config file.N)r    Úupdate)rX   r¢   s     rA   ÚsetPropertieszShape.setPropertiesý   s   € ð 	�‰×Ñ˜UÕ#rC   c                 ó¸   — t        | j                  «       j                  «       «      }|j                  «        |r|dz   }|D ]  \  }}t	        |›|›d|›�«       Œ y)z�Convenience. Lists them on standard output.  You
        may provide a prefix - mostly helps to generate code
        samples for documentation.ú.z = N)rŠ   r£   rc   ÚsortÚprint)rX   ÚprefixÚpropListÚnamerg   s        rA   ÚdumpPropertieszShape.dumpProperties  sW   € ô
 ˜×*Ñ*Ó,×2Ñ2Ó4Ó5ˆØ�‰ŒÙØ˜c‘\ˆFØ%ò 	7‰MˆT�5Ü¡ª©uÐ5Õ6ñ	7rC   c                 óœ  — | j                   �À| j                  j                  «       D ]&  }|d   dk7  sŒ|| j                   v rŒJ d|›d| ›�«       ‚ | j                   j                  «       D ]_  \  }}t	        | |«      sJ d|›d| ›�«       ‚t        | |«      }|j                  |«      rŒ=J d|›d	|›d
| j                  j                  ›�«       ‚ yy)a.  If the programmer has provided the optional
        _attrMap attribute, this checks all expected
        attributes are present; no unwanted attributes
        are present; and (if a checking function is found)
        checks each attribute.  Either succeeds or raises
        an informative exception.Nr   rŸ   zUnexpected attribute z
 found in zMissing attribute z from zInvalid value z for attribute z
 in class )	Ú_attrMapr    Úkeysrc   rT   ÚgetattrÚvalidater›   r[   )rX   rf   ÚattrÚ	metavaluerg   s        rA   ÚverifyzShape.verify  sí   € ð �=‰=Ð$Ø—}‘}×)Ñ)Ó+ò e�Ø�q‘6˜S“=Ø $§-¡-Ò/ÑdÒZ]Ñ_cÐ1dÓdÐ/ðeð $(§=¡=×#6Ñ#6Ó#8ò K‘��iÜ˜t TÔ*ÑYÊdÑTXÐ,YÓYÐ*Ü  dÓ+�Ø ×)Ñ)¨%Õ0ñ  KÒejÒlpÐrv÷  sAñ  sA÷  sJò  sJð  3Kó  KÐ0ñKð	 %rC   c                 ó   — t        | ||«       y)zSBy default we verify.  This could be off
            in some parallel base classes.N)ÚvalidateSetattr)rX   r´   rg   s      rA   Ú__setattr__zShape.__setattr__%  s   € ô ˜D  eÕ,rC   c                 ó   — t        d«      ‚)ú5Returns bounding rectangle of object as (x1,y1,x2,y2)z+Shapes and widgets must implement getBounds©rš   rœ   s    rA   Ú	getBoundszShape.getBounds*  s   € ä!Ð"OÓPÐPrC   N©r   )Ú )r[   r\   r]   r^   ÚAttrMapr°   r�   r£   r¦   r®   r¶   r
   r¹   r½   r_   rC   rA   r˜   r˜   á   s@   „ ññ ‹y€Hòaóò$ó
7òKñ" ð	6ò	-ó
QrC   r˜   c                   ó  — e Zd ZdZ e eedd¬«       eed¬«       eed¬«       eedd¬«       eed	d¬«      ¬
«      Z	d„ Z
d„ Zdd„Zdd„Zdd„Zd„ Zd„ Zd„ Zd d„Zd„ Zd„ Zd!d„Zd"d„Zd#d„Zd"d„Zd"d„Zd„ Zd„ Zd„ Zy)$ÚGroupa  Groups elements together.  May apply a transform
    to its contents.  Has a publicly accessible property
    'contents' which may be used to iterate over contents.
    In addition, child nodes may be given a name in which
    case they are subsequently accessible as properties.z"Coordinate transformation to applyr   ©ÚdescÚadvancedUsagezContained drawable elements©rÄ   úTurn on stroke overprintingúTurn on fill overprintingúoverprinting for ordinary CMYK)r   Úcontentsr&   r%   r'   c                 óº   — | j                   j                  «       | _         g | _        d| _        |D ]  }| j	                  |«       Œ t
        j                  | |«       y)z‰Initial lists of elements may be provided to allow
        compact definitions in literal Python code.  May or
        may not be useful.r   N)r°   ÚclonerÊ   r   Úaddra   rh   )rX   Úelementsre   Úelts       rA   rh   zGroup.__init__=  sR   € ð Ÿ™×+Ñ+Ó-ˆŒØˆŒØ&ˆŒØò 	ˆCØ�H‰H�S�Mð	ô 	× Ñ   xÕ0rC   c                 óx   — |r8|| j                   vrt        t        «      | j                   |<   t        | ||«       yy)zLif name is not None add an attribute pointing to node and add to the attrMapN)r°   ÚAttrMapValueÚisValidChildrd   )rX   r­   Únodes      rA   Ú_addNamedNodezGroup._addNamedNodeM  s5   € áØ˜4Ÿ=™=Ñ(Ü&2´<Ó&@�—‘˜dÑ#Ü�D˜$ Õ%ð rC   Nc                 óˆ   — |�@t        |«      sJ d«       ‚| j                  j                  |«       | j                  ||«       yy)z“Appends non-None child node to the 'contents' attribute. In addition,
        if a name is provided, it is subsequently accessible by name
        Nz1Can only add Shape or UserNode objects to a Group)rÒ   rÊ   rz   rÔ   ©rX   rÓ   r­   s      rA   rÍ   z	Group.addT  sE   € ð
 ÐÜ Ô%ÐZÐ'ZÓZÐ%Ø�M‰M× Ñ  Ô&Ø×Ñ˜t DÕ)ð rC   c                 óF   — | j                  ||¬«       | j                  d   S )N)r­   r1   )rÍ   rÊ   rÖ   s      rA   Ú_nnz	Group._nn^  s!   € Ø�‰�˜DˆÔ!Ø�}‰}˜RÑ Ð rC   c                 ó¶   — |�Wt        |«      sJ d«       ‚|dk  r|g| j                  || n| j                  j                  ||«       | j                  ||«       yy)z4Inserts sub-node n in contents at specified locationNz4Can only insert Shape or UserNode objects in a Groupr   )rÒ   rÊ   ÚinsertrÔ   )rX   r‡   r0   r­   s       rA   rÚ   zGroup.insertb  s[   € àˆ=Ü ”?ÐZÐ$ZÓZ�?Ø�ŠsØ%& C�—‘˜a Ñ"à—‘×$Ñ$ Q qÔ)Ø×Ñ˜t AÕ&ð rC   c                 ó(  — t        | t        «      xr  t        | j                  | j                  «      xs
 t	        «       }| j
                  j                  «       |_        t        |d«      r| j                  dd |_        | j                  }|j                  j                  }|D ]\  }t        |t        «      r|j                  «       }n1t        |t        «      r|j                  «       }n|j                  «       } ||«       Œ^ | j                  |«       |S )z9Return a new object which only contains primitive shapes.r   N)Ú
isinstanceÚDrawingrV   rW   rÂ   r°   rÌ   rT   r   rÊ   rz   ÚUserNodeÚprovideNodeÚexpandUserNodesr�   Ú_copyNamedContents)rX   ÚobjÚself_contentsr}   ÚchildÚnewChilds         rA   rà   zGroup.expandUserNodesl  sÖ   € ô ˜œgÓ&ÒJ¬7°4·:±:¸d¿k¹kÓ+JÒUÌeËgˆØ—}‘}×*Ñ*Ó,ˆŒÜ�3�{Ô#°T·^±^ÁAÐ5F S¤]àŸ™ˆØ�L‰L×ÑˆØ"ò 	ˆEÜ˜%¤Ô*Ø ×,Ñ,Ó.‘Ü˜E¤5Ô)Ø ×0Ñ0Ó2‘à Ÿ:™:›<�Ùˆh�Kð	ð 	×Ñ Ô$Øˆ
rC   c                 ó8  — t        «       }t        | d«      r| j                  |_        t        |d«      r| j                  dd |_        | j	                  «       dd }|r½|j                  d«      }t        |t        «      r!|j                  d|j                  «       «       nxt        |t         «      rW|j                  «       }|j                  dk(  r&|j                  j                  |j                  «       n#|j                  |«       n|j                  |«       |rŒ½|S )z return a fully expanded objectÚ	__label__r   Nr   r   )rÂ   rT   rç   r   ÚgetContentsÚpoprÜ   rÞ   rÚ   rß   Ú_exploderÊ   ÚextendrÍ   )rX   râ   ÚPr0   s       rA   rê   zGroup._explode‚  sÑ   € ä‹gˆÜ�4˜Ô$ØŸ.™.ˆCŒMÜ�3�{Ô#°T·^±^ÁAÐ5F S¤]Ø×ÑÓ™qÐ!ˆÙØ—‘�a“ˆAÜ˜!œXÔ&Ø—‘˜˜1Ÿ=™=›?Õ+Ü˜AœuÔ%Ø—J‘J“L�Ø—;‘; Ò-Ø—L‘L×'Ñ'¨¯
©
Õ3à—G‘G˜A•Jà—‘˜”
ò ð ˆ
rC   c                 ó\   — | j                   D ]  }|j                   j                  |«       Œ y r†   )rÊ   rz   )rX   râ   rä   s      rA   Ú_copyContentszGroup._copyContents—  s'   € Ø—]‘]ò 	'ˆEØ�L‰L×Ñ Õ&ñ	'rC   c                 óP  — ddl m } | j                  }|s#t        | j                  j	                  «       «      }| j
                  j                  «       D ]R  \  }}||v r,|j                  |«      }t        |||j                  |   «       Œ6||v sŒ;||vsŒ@t        || ||«      «       ŒT y )Nr   )r�   )	r�   rÊ   rŠ   r°   r±   r    rc   Úindexrd   )	rX   râ   ÚaKeysÚnoCopyr�   rã   ÚkÚvÚposs	            rA   rá   zGroup._copyNamedContents›  s‘   € ÝØŸ™ˆÙœd 4§=¡=×#5Ñ#5Ó#7Ó8�eØ—M‘M×'Ñ'Ó)ò 	)‰DˆAˆqØ�MÑ!Ø#×)Ñ)¨!Ó,�Ü˜˜Q §¡¨SÑ 1Õ2Ø�e’ ¨¢Ü˜˜Q¡ Q£Õ(ñ	)rC   c                 óˆ   — | j                   j                  «       |_         | j                  |«       | j                  |«       |S )zcopies to obj)r°   rÌ   rî   rá   ©rX   râ   s     rA   Ú_copyzGroup._copy¦  s7   € à—}‘}×*Ñ*Ó,ˆŒØ×Ñ˜3ÔØ×Ñ Ô$Øˆ
rC   c                 ó@   — | j                  | j                  «       «      S )zreturns a copy)rø   r›   rœ   s    rA   r�   z
Group.copy­  s   € à�z‰z˜$Ÿ.™.Ó*Ó+Ð+rC   c                 óP   — t        | j                  t        |||«      «      | _        y©z&Convenience to help you set transformsN)Úmmultr   rF   )rX   ÚthetaÚcxÚcys       rA   rF   zGroup.rotate±  s   € ä˜tŸ~™~¬v°e¸B¸rÓ/BÓCˆ�rC   c                 óN   — t        | j                  t        ||«      «      | _        yrû   )rü   r   Ú	translate)rX   ÚdxÚdys      rA   r  zGroup.translateµ  s   € ä˜tŸ~™~¬y¸¸RÓ/@ÓAˆ�rC   c                 óN   — t        | j                  t        ||«      «      | _        yrû   )rü   r   Úscale)rX   ÚsxÚsys      rA   r  zGroup.scale¹  s   € ä˜tŸ~™~¬u°R¸«}Ó=ˆ�rC   c                 ór   — t        t        | j                  t        |«      «      t        |«      «      | _        yrû   )rü   r   ÚskewXÚskewY)rX   ÚkxÚkys      rA   Úskewz
Group.skew½  s#   € äœu T§^¡^´U¸2³YÓ?ÄÀbÃ	ÓJˆ�rC   c                 ó6   — | j                   dd ||fz   | _         y)z2Convenience function to set the origin arbitrarilyNéþÿÿÿ)r   ©rX   rH   rI   s      rA   ÚshiftzGroup.shiftÁ  s   € àŸ™¨¨Ð,¨a°¨UÑ2ˆ�rC   c                 ó€   — t         | _        | j                  j                  | j                  «       || _        || _        y)z| Convenience function to make a drawing from a group
            After calling this the instance will be a drawing!
        N)rÝ   r›   r°   r¥   Ú_xtraAttrMaprV   rW   )rX   rV   rW   s      rA   Ú	asDrawingzGroup.asDrawingÅ  s1   € ô !ˆŒØ�‰×Ñ˜T×.Ñ.Ô/ØˆŒ
Øˆ�rC   c                 óP   — t        | dd«      }| j                  }|r
||vr|g|z   }|S )z[Return the list of things to be rendered
        override to get more complicated behaviourÚ
backgroundN)r²   rÊ   )rX   r~   rK   s      rA   rè   zGroup.getContentsÎ  s3   € ô �D˜ dÓ+ˆØ�M‰MˆÙ�˜!‘ !  Q¡˜QØˆrC   c                 ó<  — | j                   r�g }| j                   D ]!  }|j                  |j                  «       «       Œ# t        |«      }|€y |\  }}}}| j                  }||g||g||g||gg}g }	|D ]  }
|	j                  t        ||
«      «       Œ t        |	«      S y r†   )rÊ   rz   r½   ru   r   ÚtransformPointr–   )rX   r~   Úelemrq   rr   rs   rt   ÚtransÚcornersÚ
newCornersÚcorners              rA   r½   zGroup.getBoundsÖ  s´   € Ø�=Š=ØˆAØŸ™ò +�Ø—‘˜Ÿ™Ó)Õ*ð+ä Ó"ˆBØˆz $Ø‰NˆB��B˜Ø—N‘NˆEØ˜2�w  R ¨2¨r¨(°R¸°GÐ<ˆGØˆJØ!ò A�Ø×!Ñ!¤.°¸Ó"?Õ@ðAä" :Ó.Ð.ð rC   r†   )N)rÊ   ©r   r   )r   r¾   )r[   r\   r]   r^   rÀ   rÑ   ÚisTransformÚisListOfShapesÚ	isBooleanr°   rh   rÔ   rÍ   rØ   rÚ   rà   rê   rî   rá   rø   r�   rF   r  r  r  r  r  rè   r½   r_   rC   rA   rÂ   rÂ   .  sµ   „ ñ<ñ Ù  Ð2VÐefÔgÙ Ð4QÔRÙ& yÐ6SÔTÙ$ YÐ4OÐ^_Ô`Ù$ YÐ4TÐcdÔeô
€Hò1ò &ó*ó!ó'òò,ò*'ó	)òò,óDóBó>óKó3òòórC   rÂ   c                 óº   — ddl m} | j                  } ||«      j                  }|xs |j                  }||vr|g||<   y|||   vr||   j	                  |«       yy)z7add an import of obj's class to a dictionary of importsr   )Ú	getmoduleN)Úinspectr#  r›   r[   rz   )râ   ÚIr0   r#  r   Úms         rA   Ú_addObjImportr'  ë  s[   € å!Ø�‰€AÙ�!‹×Ñ€AØ	ŠˆQ�Z‰Z€AØ��zØˆsˆˆ!ŠØ	
�!�A‘$‰Ø	ˆ!‰�‰�A�ð 
rC   c                 ó¬  ‡— t        | t        «      rt        | «      S t        | «      rKdj	                  ˆfd„| D «       «      }t        | t
        «      rd|› d�S d|› t        | «      dk(  rd› d�S d› d�S | t        u r‰rt        | ‰d	«       y	t        | t        «      �r‰rt        | ‰«       d
dl
m}  || j                  «      \  }}}}}}	}
|r|t        |«       d }|t        |«       d…= ng }| j                  «       }|dd D �cg c]  }t        |j                  |d«      ‰«      ‘Œ  c}|D �cg c]#  }|› dt        |j                  |d«      ‰«      › �‘Œ% c}z   |j!                  «       D ��cg c]  \  }}|› dt        ||   ‰«      › �‘Œ c}}z   }| j"                  j$                  › ddj	                  |«      › d�S t'        | «      S c c}w c c}w c c}}w )zEreturn a repr style string with named fixed args first, then keywordsú,c              3   ó6   •K  — | ]  }t        |‰«      –— Œ y ­wr†   )Ú_repr)Ú.0rô   r%  s     €rA   ú	<genexpr>z_repr.<locals>.<genexpr>û  s   øè ø€ Ò/ Q”e˜A˜a—jÑ/ùs   ƒú[ú]ú(r   r¿   ú)ÚEmptyClipPathr   )ÚgetfullargspecNú=)rÜ   Úfloatr   r   ÚjoinrŠ   r6   r2  r'  r˜   r$  r3  rh   r£   r+  ré   rc   r›   r[   Úrepr)rX   r%  r/   r3  ÚargsÚvarargsÚvarkwÚdefaultsÚ
kwonlyargsÚkwonlydefaultsÚannotationsÚkargsrì   r0   rô   s    `             rA   r+  r+  ö  sÄ  ø€ ä�$”uÔÜ�d‹|ÐÜ	ˆtŒØ�H‰HÓ/¨$Ô/Ó0ˆÜ�dœ4Ô Ø�q�c˜�8ˆOà�q�c¤ T£¨A¢˜#Ð5°QÐ7Ð7°"Ð5°QÐ7Ð7Ø	”Ñ	ÙŒm˜D  ?Ô3ØÜ	�DœÕ	ÙŒm˜D Ô#Ý*ÙR`Ðae×anÑanÓRoÑOˆˆg�u˜h¨
°NÀKÙØœ#˜h›-˜˜Ð)ˆEØ”c˜(“m�^‘_Ñ%àˆEØ×ÑÓ ˆØ.2°1°2¨hÖ7¨Œe�A—E‘E˜!˜D“M !Õ$Ò7Ø7<Ö=°!���1”U˜1Ÿ5™5  4›=¨Ó+Ð,Ò-Ò=ñ>à01·±³	×:©¨¨1���1”U˜1˜Q™4 “]�OÒ$Ó:ñ;ˆð —.‘.×)Ñ)Ð*¨!¨C¯H©H°Q«K¨=¸Ð:Ð:ä�D‹zÐùò 8ùÚ=ùÛ:s   Ä#GÄ-(GÅ,Gc           	      óX  — d}t        | dd «      }|r||› |› dt        |«      › d�z  }| j                  «       D ]o  }t        |t        «      rFd|› �}|dz  }t        |dd«      }	|	rd|	z   }	||› |› d	|› d
|	› d�z  }|t        |||||«      z  }|dz  }ŒY||› |› dt        ||«      › d�z  }Œq |S )Nr¿   r   z.transform = ú
rô   r   rç   ú#r4  z._nn(Group())z.add(z)
)r²   r+  rè   rÜ   rÂ   Ú_renderGroupPy)
ÚGÚpfxr%  r‡   Úindentr/   rK   r0   ÚnpfxÚls
             rA   rC  rC    së   € Ø
€AÜ��+˜dÓ#€AÙˆ!�&�˜#˜˜m¬E°!«H¨:°RÐ8Ñ
8ˆ!Ø�]‰]‹_ò 
6ˆÜ�aœÔØ�q�c�7ˆDØ�‰FˆAÜ˜˜+ bÓ)ˆAÙ�C˜‘E�!Ø�F�8˜D˜6  3 % }°Q°C°rÐ:Ñ:ˆAØ”  $ q¨¨6Ó2Ñ2ˆAØ�‰F‰Aà�F�8˜C˜5 ¤e¨A¨a£j \°Ð5Ñ5‰Að
6ð €HrC   c                 óÌ   — |j                  | j                  «       t        |«      }|j                  «       D ��ci c]  \  }}|j	                  |«      sŒ||d  |“Œ c}}S c c}}w r†   )r¥   r    r6   rc   Ú
startswith)rX   rE  Úkwr0   ró   rô   s         rA   Ú_extraKWrL  %  sN   € Ø‡I�Iˆd�m‰mÔÜˆC‹€AØ!Ÿx™x›z×?™˜˜!¨Q¯\©\¸#Õ->ˆAˆaˆbˆE�!‰GÓ?Ð?ùÓ?s   ºA ÁA c                   óž  — e Zd ZdZh d£Zeh d£z
  Z e eed¬«       eed¬«       ed«       ee	d¬«       e e
d	d
dd«      d¬«       e e
dddd«      d¬«       eed¬«       eed¬«       eed¬«      ¬«	      Z ee e e e
eŽ dd¬«      d¬«      ¬«      Zej#                  e«       d$d„Zd„ Zefd„Zd„ Zd„ Zd„ Zd „ Zd%d!„Zd&d"„Zd'd#„Zy)(rÝ   zOutermost container; the thing a renderer works on.
    This has no properties except a height, width and list
    of contents.>   ÚpsÚpyÚbmpÚepsÚgifÚjpgÚpctÚpdfÚpngÚsvgÚtifÚjpegÚpictÚtiffÚtiff1ÚtifflÚtiffp>   rN  rO  rQ  rU  rW  zDrawing width in points.rÆ   zDrawing height in points.Nz=Background widget for the drawing e.g. Rect(0,0,width,height)ÚLEFTÚRIGHTÚCENTERÚCENTREz+Horizontal alignment within parent documentÚTOPÚBOTTOMz)Vertical alignment within parent documentzGlobal scaling for renderingz.override the STATE_DEFAULTS value for fontNamez.override the STATE_DEFAULTS value for fontSize)	rV   rW   Úcanvr  ÚhAlignÚvAlignÚrenderScaleÚinitialFontNameÚinitialFontSizer   r   )ÚloÚemptyOKzOne or more plot modes)ÚBASEÚformatsc                 óŠ   — d | _         t        j                  | g|¢­i |¤Ž || _        || _        d| _        d| _        d| _        y )Nr_  rd  ç      ð?)r  rÂ   rh   rV   rW   rf  rg  rh  )rX   rV   rW   Únodesre   s        rA   rh   zDrawing.__init__Z  sC   € ØˆŒÜ�‰�tÐ.˜UÒ. XÒ.ØˆŒ
ØˆŒØˆŒØˆŒØˆÕrC   c                 óN  — g d¢g d¢dœ}t        | j                  «       d|«      }d| j                  j                  z   }d}|dj	                  d„ |j                  «       D «       «      z  }|d	|› d
�z  }|d| j                  › d| j                  › d�z  }|dz  }||z  }|d|› d�z  }|S )N)Ú_DrawingEditorMixinrÝ   rÂ   )ÚColorÚ	CMYKColorÚ
PCMYKColor)zreportlab.graphics.shapeszreportlab.lib.colorsrX   ÚExplodedDrawing_z0#Autogenerated by ReportLab guiedit do not edit
r¿   c              3   óR   K  — | ]  \  }}d |› ddj                  |«      › d�–— Œ! y­w)zfrom z import z, rA  N)r6  )r,  r&  Úos      rA   r-  z$Drawing._renderPy.<locals>.<genexpr>k  s+   è ø€ ÒP¹d¸aÀ˜˜a˜S ¨¯©°1«¨°bÔ9ÑPùs   ‚%'z
class z(_DrawingEditorMixin,Drawing):
z	def __init__(self,width=z,height=z,*args,**kw):
z1		Drawing.__init__(self,width,height,*args,**kw)
z(

if __name__=="__main__": #NORUNTESTS
	z0().save(formats=['pdf'],outDir='.',fnRoot=None)
)rC  rê   r›   r[   r6  rc   rV   rW   )rX   r%  rD  r0   r/   s        rA   Ú	_renderPyzDrawing._renderPyc  sÁ   € â)RÚ$Fñˆô ˜4Ÿ=™=›?¨6°!Ó4ˆØ §¡×!8Ñ!8Ñ8ˆØ?ˆØ	ˆR�W‰WÑPÀaÇgÁgÃiÔPÓQÑQˆØ	ˆx˜�sÐ:Ð;Ñ;ˆØ	Ð)¨$¯*©*¨°X¸d¿k¹k¸]È/ÐZÑZˆØ	ÐCÑCˆØ	ˆQ‰ˆØ	Ð;¸A¸3Ð>sÐtÑtˆØˆrC   c                 óŽ   — ddl m} |j                  | | j                  dd|t        ur|¬«       yt        | dt        «      ¬«       y)zšThis is used by the Platypus framework to let the document
        draw itself in a story.  It is specific to PDF and should not
        be used directly.r   ©Ú	renderPDFÚ_showBoundary©ÚshowBoundaryN)Úreportlab.graphicsr}  Údrawre  r   r²   )rX   r€  r}  s      rA   r‚  zDrawing.draws  sI   € õ 	1Ø�‰�t˜TŸY™Y¨¨1Ø-9ÄÑ-H˜\ð 	õ 	uÜNUÐVZÐ[jÔkrÓNsð 	õ 	urC   c                 óp   — | j                   }| j                  }| j                  }|dk7  r
||z  }||z  }||fS )Nrp  )rV   rW   rh  )rX   Ú
availWidthÚavailHeightrV   rW   rh  s         rA   ÚwrapzDrawing.wrap{  sE   € Ø—
‘
ˆØ—‘ˆØ×&Ñ&ˆØ˜ÒØ�[Ñ ˆEØ�kÑ!ˆFØ�fˆ}ÐrC   c                 ót   — t         j                  | «      }| j                  |_        | j                  |_        |S )z:Return a new drawing which only contains primitive shapes.)rÂ   rà   rV   rW   r÷   s     rA   rà   zDrawing.expandUserNodes„  s-   € ä×#Ñ# DÓ)ˆØ—J‘JˆŒ	Ø—[‘[ˆŒ
Øˆ
rC   c                 ól   — | j                  | j                  | j                  | j                  «      «      S )zReturns a copy)rø   r›   rV   rW   rœ   s    rA   r�   zDrawing.copy‹  s$   € à�z‰z˜$Ÿ.™.¨¯©°T·[±[ÓAÓBÐBrC   c                 ó6   — | j                  t        |i |¤Ž«      S r†   )rø   rÂ   )rX   r8  rK  s      rA   ÚasGroupzDrawing.asGroup�  s   € Ø�z‰zœ% Ð+¨Ñ+Ó,Ð,rC   c                 ó:  — |j                  dd«      }t        |t        «      rd|z  }nd}|dz  }ddlm} d}	|s`t        | d| j                  j                  dz   «      }t        | d	d«      }
t        |
d
«      r |
| «      }
t        |d
«      r	 ||
«      }n	 ||
z  }|€t        | dd«      }t        |d
«      r || «      }t        j                  j                  |«      r#t        j                  j                  |«      \  }}n|xs t        | dd«      }|j!                  «       j!                  t        j"                  «      }|sd}t        j                  j                  |«      sYt        j                  j%                  t        | dt        j                  j'                  t(        j*                  d   «      «      |«      }t        j                  j-                  |«      st        j.                  |«       t        j                  j1                  t        j                  j%                  ||«      «      }t        j                  j3                  |«      }|d   dd j5                  «       | j6                  v r|d   }|xs t        | ddg«      D �cg c]  }|j5                  «       ‘Œ }}|duxr |fxs t        | d|«      fd   }t8        j:                  j<                  t8        j>                  j<                  f}|xt8        j:                  _        t8        j>                  _        d|v r¦ddl m!} |dz   }|rtE        |d|fz  «        |jF                  | ||fdt        | d|jH                  «      itK        | dfi |¤Ž¤Ž |	dz   }	t(        jL                  dk(  r:ddl'}ddl(}|jS                  |«      jU                  dd«       |jW                  |«       | jX                  D ]º  }||v sŒddl m-} |›d|›�}|rtE        |||fz  «       t        | dd«      }|r2t        |d|g«      }||v rt        |d d«      s|j]                  «        nd} |jF                  | |f|t        | d|jH                  «      d!œtK        | d"fi |¤Ž¤Ž |	d#z   |z   }	|sŒª|j_                  |«       Œ¼ d$|v r§	 dd%l0m1} |d'z   }|rtE        |d(|fz  «        |jF                  | |f|t        | d)d*g«      d   t        | d)dd+g«      d   t        | d,|jh                  «      t        | d|jH                  «      t        | d-|jj                  «      d.œtK        | d/fi |¤Ž¤Ž |	d0z   }	d1|v rXdd2l m6} |d3z   }|rtE        |d4|fz  «        |jF                  | |fdt        | d|jH                  «      itK        | d5fi |¤Ž¤Ž |	d6z   }	d7|v rXdd&l m3} |d8z   }|rtE        |d(|fz  «        |jF                  | |fdt        | d|jH                  «      itK        | d/fi |¤Ž¤Ž |	d9z   }	d:|v rw|d;z   }|rtE        |d:|fz  «       to        |d<«      5 }|jq                  ts        | ju                  «       jw                  d=t        jx                  «      «      «       ddd«       |	d>z   }	|\  t8        j:                  _        t8        j>                  _        t        | d?«      r| j{                  ||	«       |	xr ||	dd z   xs dS # t        $ r)}t        |«      j                  d«      dk  r‚ Y d}~�ŒTd}~ww xY wc c}w # td        $ r
 dd&l m3} Y �Œxw xY w# 1 sw Y   Œ·xY w)@zÞSaves copies of self in desired location and formats.
        Multiple formats can be supported in one call

        the extra keywords can be of the form
        _renderPM_dpi=96 (which passes dpi=96 to renderPM)
        Ú	seqNumberr¿   z%4d: zgenerating %s file %sr   ©Ú	rl_configÚfileNamePatternz%03dÚchartIdÚ__call__znot all arguments convertedNÚoutDirr¨   Ú_override_CWDr   rn  rU  r   r|  z.pdfÚPDFr€  Ú
showBorderÚ_renderPDF_z/.pdfÚmacÚCAROzPDF ©ÚrenderPMÚ_drawTimeCollectorÚdisabled©Úfmtr€  Ú
_renderPM_z/.rQ  ©ÚrenderPS_SEP©ÚrenderPSz.epsÚEPSÚEPS_infoÚTestingÚ	ReportLabÚpreviewÚ	ttf_embed)ÚtitleÚdeptÚcompanyr¨  r€  r©  Ú
_renderPS_z/.epsrW  ©Ú	renderSVGz.svgÚSVGÚ_renderSVG_z/.svgrN  z.psz/.psrO  z.pyÚwbrA  z/.pyÚ
saveLogger)>ré   rÜ   ÚintÚ	reportlabrŽ  r²   r›   r[   rT   Ú	TypeErrorÚstrÚfindÚosÚpathÚisabsÚsplitÚrstripÚsepr6  ÚdirnameÚsysÚargvÚisdirÚmakedirsÚnormpathÚsplitextÚlowerÚ
_saveModesr   ÚwarnOnceÚenabledÚinfoOncer�  r}  rª   Ú
drawToFiler€  rL  ÚplatformÚmacfsÚ
macostoolsÚFSSpecÚSetCreatorTypeÚtouchedÚ_bmModesrš  ÚclearÚsaveÚrlextra.graphicsr¡  ÚImportErrorr£  Úeps_previewÚeps_ttf_embedr¯  ÚopenÚwriter   rz  ÚreplaceÚlinesepr³  )rX   rn  r   ÚfnRootr’  rª  rK  ÚgenFmtrŽ  Úextr�  ÚerrÚfnrootÚplotModerH   Ú_savedr}  ÚfilenamerÍ  rÎ  ÚbmFmtrš  ÚdtcÚdtcfmtsr£  r¯  rŽ   s                              rA   rÔ  zDrawing.save’  s*  € ð —‘˜ BÓ'ˆÜ�fœSÔ!Ø˜vÑ%‰FàˆFØÐ)Ñ)ˆÝ'ØˆÙÜ˜TÐ"3°T·^±^×5LÑ5LÈVÑ5SÓUˆFÜ˜d 9¨QÓ/ˆGÜ�w˜zÔ*Ù! $›-�Ü�v˜jÔ)Ù ›‘ðOØ# gÑ-�Fð ˆ>Ü˜T (¨4Ó0ˆFÜ�6˜*Ô%Ù˜D“\ˆFÜ�7‰7�=‰=˜Ô ÜŸW™WŸ]™]¨6Ó2‰NˆF‘FàÒ9œw t¨H°SÓ9ˆFØ—‘“×'Ñ'¬¯©Ó/ˆÙ �vÜ�w‰w�}‰}˜VÔ$¬r¯w©w¯|©|¼GÀDÈÔY[×Y`ÑY`×YhÑYhÔil×iqÑiqÐrsÑitÓYuÓ<vÐw}Ó/~ fÜ�w‰w�}‰}˜VÔ$¤b§k¡k°&Ô&9Ü—‘×!Ñ!¤"§'¡'§,¡,¨v°fÓ"=Ó>ˆÜ—7‘7×#Ñ# FÓ+ˆØ�A‰;�q�rˆ?× Ñ Ó" d§o¡oÑ5Ø˜a‘[ˆFà(/Ò(R´7¸4À	È5È'Ó3RÖT !�A—G‘G•IÐTˆÐTØ $Ð&Ò5¨G¨:Ò[¼'À$ÀyÐQXÓ:YÐ9[Ð]^Ñ_ˆÜ—‘×(Ñ(¬&¯/©/×*AÑ*AÐAˆØ<CÐCŒ�‰Ô¤&§/¡/Ô"9Ø�HÑÝ4Ø˜f‘}ˆHÙœ˜f¨¨hÐ'7Ñ7Ô8Ø ˆI× Ñ   x°ñ  \ÄWÈTÐR^Ð_h×_uÑ_uÓEvð  \ô  zBð  CGð  HUñ  z[ð  XZñ  z[ò  \Ø˜‘.ˆCÜ�|‰|˜UÒ"ß(Ø—‘˜XÓ&×5Ñ5°f¸fÔEØ×"Ñ" 8Ô,à—]‘]ò 	+ˆEØ˜Ò Ý7Ú&,©UÐ3�ÙœE &¨E°(Ð+;Ñ";Ô<Ü˜dÐ#7¸Ó=�ÙÜ% c¨)°U°GÓ<�GØ Ñ'´¸¸JÀqÔ0IØŸ	™	�à"˜Ø#�×#Ñ# D¨(ð  `°uÌ'ÐRVÐWcÐdm×dzÑdzÓJ{ñ  `ô  Gð  HLð  MYñ  _ð  \^ñ  _ò  `Ø˜D‘j 5Ñ(�Ú˜Ÿ™ Õ*ð	+ð  �HÑð8ÝEð ˜f‘}ˆHÙœ˜f¨¨hÐ'7Ñ7Ô8ØˆH×Ñ Ø (ðDà(.Ü'.¨t°JÀ	¸{Ó'KÈAÑ'NÜ*1°$°zÀ2ÀkÐBRÓ*SÐTUÑ*VÜ*1°$°yÀ×AVÑAVÓ*WÜ-4°T¸,Ày×G]ÑG]Ó-^Ü*1°$°{À9×CZÑCZÓ*[ñDô #+¨4°Ñ"B¸rÑ"BòDð ˜‘.ˆCà�HÑÝ4Ø˜f‘}ˆHÙœ˜f¨¨hÐ'7Ñ7Ô8Ø ˆI× Ñ  Ø (ñDä-4°T¸,Ày×G]ÑG]Ó-^ðDäaiÐjnÐo|ñ  bCð  @Bñ  bCòDð ˜‘.ˆCà�8ÑÝ3Ø˜e‘|ˆHÙœ˜f¨¨hÐ'7Ñ7Ô8ØˆH×Ñ  hñ  S¼WÀTÈ,ÐW`×WmÑWmÓ=nð  SÔqyÐz~ð  @Lñ  rRð  OQñ  rRò  SØ˜‘-ˆCà�8ÑØ˜e‘|ˆHÙœ˜f¨¨X Ñ6Ô7Ü�h˜tÓ$ð L¨Ø—‘œ §¡Ó 0× 8Ñ 8¸¼b¿j¹jÓ IÓJÔK÷Là˜‘-ˆCà;AÑ8Œ�‰Ô¤§¡Ô!8Ü�4˜Ô%Ø�O‰O˜F 3Ô'ØÒ%�v˜c ! "˜g‘~Ò+¨Ð+øôC !ò Oô ˜3“x—}‘}Ð%BÓCÀaÒGÈÕGûðOüò, UøôD ò 8ß7Ð7ð8ú÷DLð Lús=   Â[ Ê[6Ò[; ØA\Û	[3Û
[.Û.[3Û;\Ü\Ü\c           	      ó  — || j                   v s
J d|z  «       ‚ddlm} |dk(  rNddlm} |j                  dd«      } |j                  | |fdt        | d	|j                  «      it        | d
fi |¤Ž¤ŽS || j                  v r<ddlm}  |j                  | f|t        | d	|j                  «      dœt        | dfi |¤Ž¤ŽS |dk(  r0	 ddlm}	 |	j                  | |t        | d	|j                  «      ¬«      S |dk(  r.ddlm}	 |	j                  | t        | d	|j                  «      ¬«      S |dk(  r| j!                  «       S |dk(  r;ddlm}
  |
j                  | fdt        | d	|j                  «      it        | dfi |¤Ž¤ŽS y# t        $ r	 ddlm}	 Y ŒÃw xY w)z,Converts to an 8 bit string in given format.zUnknown file format "%s"r   r�  rU  r|  rª  r¿   r€  r•  r–  r™  r�  rŸ  rQ  r   r¢  )r¨  r€  rN  r  rO  rW  r®  r±  N)rÇ  rµ  rŽ  r�  r}  ré   ÚdrawToStringr²   r€  rL  rÒ  rš  rÕ  r¡  rÖ  r£  rz  r¯  )rX   Úformatr   r¨  rK  rŽ  r}  rª  rš  r£  r¯  s              rA   ÚasStringzDrawing.asString  s   € à˜Ÿ™Ñ(ÐMÐ*DÀvÑ*MÓMÐ(Ý'à�UŠ?Ý4Ø—F‘F˜7 2Ó&ˆEØ)�9×)Ñ)¨$°ñ  [ÄGÈDÐQ]Ð^g×^tÑ^tÓDuð  [ô  yAð  BFð  GTñ  yZð  WYñ  yZñ  [ð  [Ø�t—}‘}Ñ$Ý3Ø(�8×(Ñ(¨ð X°6ÄwÈtÐT`Ø%×2Ñ2óH4ñ XÜ6>¸tÀLÑ6VÐSUÑ6VñXð Xà�uŠ_ð8ÝEð ×(Ñ(¨Ø*1Ü-4°T¸,Ày×G]ÑG]Ó-^ð )ó `ð `ð �tŠ^Ý3Ø×(Ñ(¨¼GÀDÈÐV_×VlÑVlÓ<mÐ(ÓnÐnØ�tŠ^Ø—>‘>Ó#Ð#Ø�uŠ_Ý4Ø)�9×)Ñ)¨$ñ  S¼GÀDÈÐV_×VlÑVlÓ<mð  SÔpxÐy}ð  Lñ  qRð  OQñ  qRñ  Sð  Sð øô ò 8ß7ð8ús   ÃE: Å:FÆFc                 ó,  — | j                  «       }| j                  }| j                  }t        ||g|¢­Ž }	|	j	                  «       \  }
}}}|dk(  s|dk(  rO|
|k  s|||z
  kD  s||k  s|||z
  kD  r5||
z
  |z   |z   |	_        ||z
  |z   |z   |	_        dddd||
z
  ||z
  f|	_        |	S |dk(  s|dk(  r/|
|k  s|||z
  kD  r"||
z
  |z   |z   |	_        dddd||
z
  df|	_        |	S |dk(  s|dk(  r-||k  s|||z
  kD  r ||z
  |z   |z   |	_        ddddd||z
  f|	_        |	S )	z?return a base class drawing which ensures all the contents fitsÚfitÚexpandr   r   ÚfitxÚexpandxÚfityÚexpandy)rè   rV   rW   rÝ   r½   r   )rX   ÚkindÚlpadÚrpadÚbpadÚtpadrK   ÚoWÚoHrZ   ÚxLÚyLÚxHÚyHs                 rA   ÚresizedzDrawing.resized-  sg  € à×ÑÓˆØ�Z‰ZˆØ�[‰[ˆÜ˜"˜RÐ# Ò#ˆØ×'Ñ'Ó)‰ˆˆ2ˆb�Ø�Š;˜4 š>¨r°$ªw¸"¸RÀ¹Wº*ÈÈ4ÊÐSUÐVXÐY]ÑV]ÒS]Ø˜r™E $™J t™OˆGŒMØ ™U 4™Z¨™_ˆGŒNØ!" 1 Q q¨¨b©°°b±Ð 9ˆGÔð ˆð �6Š\˜d Išo°2°d²7¸bÀÀDÁºjØ˜r™E $™J t™OˆGŒMØ!" 1 Q q¨¨b©°Ð 3ˆGÔð ˆð �6Š\˜d Išo°2°d²7¸bÀÀDÁºjØ ™U 4™Z¨™_ˆGŒNØ!" 1 Q q¨¨4°©7Ð 3ˆGÔØˆrC   )i�  éÈ   )NNNNr¿   )Nr   )rí  r   r   r   r   )r[   r\   r]   r^   rÇ  rÒ  rÀ   rÑ   ÚisNumberÚisValidChildOrNoneÚOneOfÚisStringOrNoneÚisNumberOrNoner  rÂ   Ú
SequenceOfr°   r¥   rh   rz  r   r‚  r†  rà   r�   rŠ  rÔ  rë  rþ  r_   rC   rA   rÝ   rÝ   *  s  „ ñò€Jð( Ò9Ñ9€HáÙ˜XÐ+EÔFÙ˜hÐ,GÔHÙ˜DÓ!Ù!Ð"4Ð:yÔzÙ™e F¨G°X¸xÓHÐO|Ô}Ù™e E¨8°X¸xÓHÐOzÔ{ñ # 8Ð1OÔPÙ& ~Ð;kÔlÙ& ~Ð;kÔlô
€Lñ ˜EÙ"¡:Ù�zÐ"Ø˜Qô$ à&>ô@ô€Hð
 ‡O�O�LÔ!óòð   'ó uòòòCò-óz,óxSô>rC   rÝ   c                   ó   — e Zd ZdZdd„Zy)rs  z<This is a mixin to provide functionality for edited drawingsNc                 óx  — t        |«      }|r\t        |d«      rPd|j                  vr|j                  j	                  «       |_        |r|€t         }t        ||«      |j                  |<   t        |d«      r+|r)|r|j                  |||«       y|j                  ||«       y|rt        |||«       yt        d«      ‚)zb
        effectively setattr(obj,name,value), but takes care of things with _attrMaps etc
        r°   NrÍ   zCan't add, need name)
rÒ   rT   r    r°   rÌ   rÑ   rÚ   rÍ   rd   Ú
ValueError)rX   râ   rg   r­   r³   rÄ   rõ   Úivcs           rA   Ú_addz_DrawingEditorMixin._addB  s£   € ô ˜5Ó!ˆÙ”G˜C 
Ô+Ø §¡Ñ-Ø"Ÿ|™|×1Ñ1Ó3�”Ù�xÐ'´L¨Ü!-¨h°tÓ!<ˆC�L‰L˜ÑÜ�3�uÔ¡#ÙØ—
‘
˜3˜u TÕ*à—‘˜˜dÕ#ÙÜ�C˜˜UÕ#äÐ3Ó4Ð4rC   ©NNNN)r[   r\   r]   r^   r
  r_   rC   rA   rs  rs  @  s
   „ ÙFô5rC   rs  c                   ó   — e Zd Zd„ Zy)ÚisStrokeDashArrayc                 óœ   — t         j                  |«      xs6 t        |t        t        f«      xr t        |d   «      xr t        |d   «      S rj   )ÚisListOfNumbersOrNoneÚtestrÜ   rŠ   Útupler   ÚisListOfNumbers)rX   rH   s     rA   r  zisStrokeDashArray.testW  sG   € Ü$×)Ñ)¨!Ó,Òy´¸A¼tÄE¸lÓ1KÒ1xÔPXÐYZÐ[\ÑY]ÓP^Ò1xÔcrÐstÐuvÑswÓcxÐyrC   N)r[   r\   r]   r  r_   rC   rA   r  r  V  s   „ ózrC   r  c                   óÞ   — e Zd Z e ee«       ee«       e eddd«      d¬«       e eddd«      d¬«       eed¬«       eed¬«       ee	d	¬«       ee
d
¬«       ee
dd¬«      ¬«	      Zd„ Zy)Ú	LineShaper   r   rx   z#Line cap 0=butt, 1=round & 2=squarerÆ   z$Line join 0=miter, 1=round & 2=bevelz$miter limit control miter line joinsz[numbers] or [phase,[numbers]]zEThe level of transparency of the line, any real number betwen 0 and 1rÇ   rÉ   rÃ   )	r   r   r   r   r    r"   r#   r&   r'   c                 ó–   — t         d   | _        d| _        d| _        d| _        d| _        d | _        d | _        | j                  |«       y )Nr   r   r   )	ÚSTATE_DEFAULTSr   r   r   r   r    r"   r#   r¦   ©rX   rK  s     rA   rh   zLineShape.__init__j  sM   € Ü)¨-Ñ8ˆÔØˆÔØˆÔØˆÔØ !ˆÔØ#ˆÔØ!ˆÔØ×Ñ˜2ÕrC   N)r[   r\   r]   rÀ   rÑ   ÚisColorOrNoner   r  r  Ú	isOpacityr!  r°   rh   r_   rC   rA   r  r  [  s„   „ ñ Ù" =Ó1Ù" 8Ó,Ù$¡U¨1¨Q¨q£\Ð7\Ô]Ù%¡e¨A¨a°£lÐ8^Ô_Ù'¨Ð6\Ô]Ù&Ð'8Ð>^Ô_Ù$ YÐ4{Ô|Ù& yÐ6SÔTÙ$ YÐ4TÐcdÔeô

€HórC   r  c            
       ór   — e Zd Z ee eed¬«       eed¬«       eed¬«       eed¬«      ¬«      Zd„ Zd„ Z	y)ÚLiner¿   rÆ   )rm  rq   rr   rs   rt   c                 óh   — t         j                  | |«       || _        || _        || _        || _        y r†   )r  rh   rq   rr   rs   rt   )rX   rq   rr   rs   rt   rK  s         rA   rh   zLine.__init__|  s.   € Ü×Ñ˜4 Ô$ØˆŒØˆŒØˆŒØˆ�rC   c                 ó^   — | j                   | j                  | j                  | j                  fS )r»   )rq   rr   rs   rt   rœ   s    rA   r½   zLine.getBoundsƒ  s!   € à—‘˜Ÿ™ $§'¡'¨4¯7©7Ð3Ð3rC   N)
r[   r\   r]   rÀ   r  rÑ   r   r°   rh   r½   r_   rC   rA   r  r  t  s@   „ Ù˜IÙ˜(¨Ô+Ù˜(¨Ô+Ù˜(¨Ô+Ù˜(¨Ô+ô	
€Hòó4rC   r  c                   óŠ   — e Zd Z ee eed¬«       eed¬«       eed¬«       eedd¬«       e e	e
e«      «      ¬«      Zd	„ Zy
)Ú
SolidShapez$filling color of the shape, e.g. redrÆ   zGthe level of transparency of the color, any real number between 0 and 1rÈ   rÉ   r   rÃ   )rm  r(   r$   r%   r'   r)   c                 óZ   — t         d   | _        d | _        t        j	                  | |«       y )Nr(   )r  r(   r$   r  rh   r  s     rA   rh   zSolidShape.__init__’  s(   € Ü'¨Ñ4ˆŒØˆÔô 	×Ñ˜4 Õ$rC   N)r[   r\   r]   rÀ   r  rÑ   r  r  r!  r  r   r   r°   rh   r_   rC   rA   r  r  ‡  sS   „ ñ ˜IÙ  Ð4ZÔ[Ù" 9Ð2{Ô|Ù$ YÐ4OÔPÙ$ YÐ4TÐcdÔeÙ¡ m°MÓ BÓCô
€Hó%rC   r  ry   )rx   rx   é   r   )ÚmoveToÚlineToÚcurveToÚ	closePathc                 óR  — | j                   }d}d}d}| }| j                  D ]]  }	|	t        k(  r'|r |r
t        k7  r|dz  }|r |t           «        |dz  }t        |	   }||z   } ||	   ||| Ž  |}|	t        k(  r|dz  }|	}
Œ_ |r |r
t        k7  r|dz  }|r |t           «        ||k(  S )zHelper function for renderers.r   r   )r�   Ú	operatorsÚ_MOVETOÚ
_CLOSEPATHÚ_PATH_OP_ARG_COUNT)rº  Ú	drawFuncsÚ	countOnlyÚ
forceCloser�   r‡   ÚhadClosePathÚ	hadMoveToÚactiveÚopré   ÚnArgsÚjs                rA   Ú_renderPathr4  ž  sá   € ð �[‰[€FØ	€AØ€LØ€IØˆ]€FØ�n‰nò ˆØ”Š=ÙÙ ¤j¢Ø  AÑ%�LÙØ-˜	¤*Ñ-Ô/Ø˜‰NˆIÜ" 2Ñ&ˆØ�‰IˆØˆ	�"‰�v˜a �{Ñ#ØˆØ”ÒØ˜AÑˆLØ‰ðñ ‘i C¬¢OØ˜ÑˆÙØ!ˆI”jÑ!Ô#Ø˜Ñ$Ð$rC   znon-zeroÚnonzerozeven-oddÚevenoddc                   óÆ   — e Zd ZdZ ee ee«       ee«       ee«       e e	 e
dd«      «      «       e e
ee«      «      ¬«      Zddddefd„Zd„ Zd	„ Zd
„ Zd„ Zd„ Zd„ Zy)ÚPathz2Path, made up of straight lines and bezier curves.rW  rU  )rm  r�   r'  Ú
isClipPathÚ	autocloser)   Nr   c                 ó¶   — t         j                  | |«       |€g }|€g }t        |«      dz  dk(  sJ d«       ‚|| _        || _        || _        || _        || _        y ©Nrx   r   ú-Point list must have even number of elements!)r  rh   r6   r�   r'  r9  r:  r)   )rX   r�   r'  r9  r:  r)   rK  s          rA   rh   zPath.__init__Ð  sf   € Ü×Ñ˜D "Ô%Øˆ>ØˆFØÐØˆIÜ�6‹{˜Q‰ !Ò#ÐTÐ%TÓTÐ#ØˆŒØ"ˆŒØ$ˆŒØ ˆŒØ ˆ�rC   c                 óœ   — | j                  | j                  d d  | j                  d d  «      }|j                  | j	                  «       «       |S r†   )r›   r�   r'  r¦   r£   ©rX   Únews     rA   r�   z	Path.copyÝ  s?   € Ø�n‰n˜TŸ[™[©˜^¨T¯^©^¹AÐ->Ó?ˆØ×Ñ˜$×,Ñ,Ó.Ô/Øˆ
rC   c                 ó|   — | j                   j                  ||g«       | j                  j                  t        «       y r†   )r�   rë   r'  rz   r(  r  s      rA   r"  zPath.moveToâ  ó*   € Ø�‰×Ñ˜A˜q˜6Ô"Ø�‰×ÑœgÕ&rC   c                 ó|   — | j                   j                  ||g«       | j                  j                  t        «       y r†   )r�   rë   r'  rz   Ú_LINETOr  s      rA   r#  zPath.lineToæ  rB  rC   c                 ó„   — | j                   j                  ||||||g«       | j                  j                  t        «       y r†   )r�   rë   r'  rz   Ú_CURVETO)rX   rq   rr   rs   rt   Úx3r|   s          rA   r$  zPath.curveToê  s3   € Ø�‰×Ñ˜B  B¨¨B°Ð3Ô4Ø�‰×ÑœhÕ'rC   c                 óB   — | j                   j                  t        «       y r†   )r'  rz   r)  rœ   s    rA   r%  zPath.closePathî  s   € Ø�‰×ÑœjÕ)rC   c           	      ó  — | j                   }	 g }|j                  }|j                  }g }|j                  }|j                  }d}| j                  D ]  }	t        |	   }
||
z   }|
dk(  r |||   «        |||dz      «       nN|
dk(  rI|||d…   \  }}} |t        |d   |||«      «       ||dz   |d…   \  }}} |t        |d   |||«      «       |}Œ� t        |«      t        |«      t        |«      t        |«      fS #  t        |«      cY S xY w)Nr   rx   r   r!  r1   )	r�   rz   rë   r'  r*  rƒ   rG   r5   r‘   )rX   r�   rL   ÚaXÚeXrM   ÚaYÚeYr‡   r1  r2  r3  rq   rs   rG  rr   rt   r|   s                     rA   r½   zPath.getBoundsñ  s'  € Ø—‘ˆð	)ØˆAØ—‘ˆBØ—‘ˆBØˆAØ—‘ˆBØ—‘ˆBØˆAØ—n‘nò �Ü*¨2Ñ.�Ø˜‘I�Ø˜!’8á�v˜a‘y”MÙ�v˜a ™c‘{•OØ˜A’Xà% a¨¨! e™}‘H�B�r˜"ÙÔ(¨¨2©¨r°"°RÓ8Ô9Ø% a¨¡c¨!¨A g™‘H�B�r˜"ÙÔ(¨¨2©¨r°"°RÓ8Ô9Ø‘ðô �q“6œ#˜a›&¤ Q£¬¨A«Ð.Ð.øð	)Ü  Ó(Ò(ús   ŽC-C< Ã<D)r[   r\   r]   r^   rÀ   r  rÑ   r  r!  ÚNoneOrr  r   r   r°   rh   r�   r"  r#  r$  r%  r½   r_   rC   rA   r8  r8  Å  s}   „ Ù<á˜JÙ˜oÓ.Ù  Ó1Ù! )Ó,Ù ¡©¨e°EÓ(:Ó!;Ó<Ù¡ m°MÓ BÓCô
€Hð #¨d¸qÈDÐ[hó !òò
'ò'ò(ò*ó)rC   r8  c           	      óÆ  — |€|}g }t         dz  }	||	z  }
||	z  }||
k  r|dt         z  z   }||
k  rŒt        ||
z
  «      }|j                  }|dkD  r;t        ||xs d«      }||	z  }t	        t        ||z  dz   «      d«      }||z  }|dz  }nd}d}t        |«      D ]2  }|
||z  z   } || |t        |«      z  z   ||t        |«      z  z   f«       Œ4 |r|j                  «        |S )Nç     €f@rx   çü©ñÒMbP?rp  ç      à?r   r   )
r   r5  rz   rG   r5   r´  rŒ   r   r   Úreverse)ÚcenterxÚcenteryÚradiusÚstartangledegreesÚendangledegreesÚyradiusÚdegreedeltarS  r�   ÚdegreestoradiansÚ
startangleÚendanglerJ   r}   Úradiansdeltar0   s                   rA   ÚgetArcPointsr_    s!  € Ø€ &˜Ø€FÜ˜%‘xÐØ"Ð#3Ñ3€JØÐ/Ñ/€HØ
�:Ò
Ø˜Aœb™D‘=ˆð �:Ó
ä�(˜ZÑ'Ó(€EØ�‰€AØˆT‚zÜ˜% Ò 1¨rÓ2ˆØ"Ð#3Ñ3ˆÜ”�E˜,Ñ& sÑ*Ó+¨AÓ.ˆØ˜Q‘wˆØ	ˆQ‰‰àˆØˆä�q“ò BˆØ˜5 Ñ-Ñ-ˆÙ	ˆ7�6œ#˜e›*Ñ$Ñ$ W¨W´S¸³ZÑ-?Ñ%?Ð
@ÕAðBñ �—‘Ô Ø€MrC   c                   ó   — e Zd ZdZdd„Zy)ÚArcPathzPath with an addArc methodNc
           
      óÒ   — t        ||||||||	¬«      }
|st        | j                  «      s!| j                  |
d   d   |
d   d   «       |
d= |
D ]  \  }}| j	                  ||«       Œ y )N)rY  rZ  rS  r   r   )r_  r6   r'  r"  r#  )rX   rT  rU  rV  rW  rX  rY  rZ  r"  rS  rì   rH   rI   s                rA   ÚaddArczArcPath.addArc,  st   € Ü˜ '¨6Ð3DÀoÐ_fÐtð  JQô  RˆÙœ˜TŸ^™^Ô,Ø�K‰K˜˜!™˜Q™  !¡ Q¡Ô(Ø�!�ØÒ'‰DˆAˆq�t—{‘{ 1 QÕ'Ñ'rC   r  )r[   r\   r]   r^   rc  r_   rC   rA   ra  ra  *  s
   „ Ù$ô(rC   ra  c                 ó  — g }g }| D ]   }t        |«      s|}g }	n
|d   }|dd  }	|t        vrt        d|z  «      ‚t        j                  |«      }
t	        |	«      t
        |
   k7  rt        |›dt        |	«      ›�«      ‚|j                  |
«       |j                  t        |	«      «       Œ¢ |df|dffD ]+  \  }}t        |t	        |«      d«      D ]  }||   |z   ||<   Œ Œ- |j                  dd «      }|�rdD �]  }||   ||dz      f}|d   €|d   €Œ||d d…   }t        |«      t        |«      }}|d   �Š|d   �…t        |«      t        |«      }}||z
  }t        |«      dk\  r5||z
  |z  }t        |t	        |«      d«      D ]  }||||   |z
  z  z   ||<   Œ Œ¢t        |t	        |«      d«      D ]  }||z   d	z  ||<   Œ ŒÉ|d   �|d   |z
  n|d   |z
  }t        |t	        |«      d«      D ]  }||xx   |z  cc<   Œ �Œ t        |||fi |¤ŽS )
Nr   r   zbad operator name %sz bad arguments rx   Úbbox)r   r   g�íµ ÷Æ°>rR  )r   Ú_PATH_OP_NAMESr  rð   r6   r*  r·  rz   rë   rŠ   rŒ   ré   rG   r5   Úabsr8  )ÚpathSegsr9  r  r  rK  ÚOrì   ÚsegÚopNamer8  r1  r€   ry  r‡   re  r3  r}   r~   r   Úfacs                       rA   Ú
definePathrm  3  sp  € Ø
€AØ
€AØò ˆÜ�SŒzØˆFØ‰Dà˜‘VˆFØ�q�r�7ˆDØœÑ'ÜÐ3°fÑ<Ó=Ð=Ü×!Ñ! &Ó)ˆÜˆt‹9Ô(¨Ñ,Ò,Ü²f¼SÀ¼YÐGÓHÐHØ	�‰�ŒØ	�‰”�d“Õðð �1ˆv˜˜1�vˆ~ò ‰ˆˆ!Ü�qœ˜Q› Ó"ò 	ˆAØ�Q‘4˜‘6ˆAˆaŠDñ	ðð �6‰6�&˜Ó€DÚØó 	ˆAØ�Q‘˜˜Q˜q™S™	Ð!ˆAØ�‰tˆ|  !¡ ¨hØ�!�$�Q�$‘ˆAÜ�q“6œ3˜q›6ˆqˆAØ�‰tÐ A a¡DÐ$4Ü˜1“vœs 1›v�1�Ø˜‘s�Ü�s“8˜T’>Ø˜Q™3 ™)�CÜ" 1¤S¨£V¨AÓ.ò 0˜Ø  3¨¨!©¨Q©¡<Ñ/˜˜!šñ0ô # 1¤S¨£V¨AÓ.ò +˜Ø ! A¡ s™{˜˜!šñ+ð
 !" !¡Ð 0�A�a‘D˜1’H°a¸±d¸Q±h�Ü˜q¤ Q£¨Ó*ò �AØ�a“D˜A‘I”Dòð)	ô. ��!�JÑ$ Ñ$Ð$rC   c                   ó’   — e Zd ZdZ ee ee«       ee«       eed¬«       eed¬«       ee«       ee«      ¬«      Zd
d„Z	d„ Z
d„ Zy	)ÚRectz)Rectangle, possibly with rounded corners.úwidth of the object in pointsrÆ   úheight of the objects in points)rm  rH   rI   rV   rW   ÚrxÚryc                 ó„   — t         j                  | |«       || _        || _        || _        || _        || _        || _        y r†   )r  rh   rH   rI   rV   rW   rr  rs  )rX   rH   rI   rV   rW   rr  rs  rK  s           rA   rh   zRect.__init__q  s<   € Ü×Ñ˜D "Ô%ØˆŒØˆŒØˆŒ
ØˆŒØˆŒØˆ�rC   c                 ó¼   — | j                  | j                  | j                  | j                  | j                  «      }|j                  | j                  «       «       |S r†   )r›   rH   rI   rV   rW   r¦   r£   r?  s     rA   r�   z	Rect.copyz  sB   € Ø�n‰n˜TŸV™V T§V¡V¨T¯Z©Z¸¿¹ÓEˆØ×Ñ˜$×,Ñ,Ó.Ô/Øˆ
rC   c                 ó’   — | j                   | j                  | j                   | j                  z   | j                  | j                  z   fS r†   ©rH   rI   rV   rW   rœ   s    rA   r½   zRect.getBounds  s3   € Ø—‘˜Ÿ™ §¡¨¯©Ñ 3°T·V±V¸d¿k¹kÑ5IÐJÐJrC   Nr  )r[   r\   r]   r^   rÀ   r  rÑ   r   r°   rh   r�   r½   r_   rC   rA   ro  ro  e  sW   „ Ù3á˜JÙ˜Ó"Ù˜Ó"Ù˜XÐ+JÔKÙ˜hÐ,MÔNÙ˜(Ó#Ù˜(Ó#ô
€Hóòó
KrC   ro  c            
       ó‚   — e Zd ZdZ ee ee«       ee«       eed¬«       eed¬«       ed«      ¬«      Z	d„ Z
d„ Zd	„ Zy)
ÚImagezBitmap image.rp  rÆ   rq  N)rm  rH   rI   rV   rW   rº  c                 óv   — t         j                  | |«       || _        || _        || _        || _        || _        y r†   )r  rh   rH   rI   rV   rW   rº  )rX   rH   rI   rV   rW   rº  rK  s          rA   rh   zImage.__init__�  s5   € Ü×Ñ˜D "Ô%ØˆŒØˆŒØˆŒ
ØˆŒØˆ�	rC   c                 óÒ   — | j                  | j                  | j                  | j                  | j                  | j
                  «      }|j                  | j                  «       «       |S r†   )r›   rH   rI   rV   rW   rº  r¦   r£   r?  s     rA   r�   z
Image.copy•  sH   € Ø�n‰n˜TŸV™V T§V¡V¨T¯Z©Z¸¿¹ÀdÇiÁiÓPˆØ×Ñ˜$×,Ñ,Ó.Ô/Øˆ
rC   c                 ó’   — | j                   | j                  | j                   | j                  z   | j                  | j                  z   fS r†   rw  rœ   s    rA   r½   zImage.getBoundsš  s3   € à—‘˜Ÿ™ §¡¨¯©Ñ 3°T·V±V¸d¿k¹kÑ5IÐJÐJrC   )r[   r\   r]   r^   rÀ   r  rÑ   r   r  r°   rh   r�   r½   r_   rC   rA   ry  ry  ‚  sO   „ Ùá˜JÙ˜Ó"Ù˜Ó"Ù˜^Ð1PÔQÙ˜nÐ2SÔTÙ˜DÓ!ô
€Hòòó
KrC   ry  c            	       óf   — e Zd Z ee eed¬«       eed¬«       eed¬«      ¬«      Zd„ Zd„ Z	d„ Z
y	)
ÚCircleúx of the centrerÆ   úy of the centreúradius in points)rm  rþ   rÿ   Úrc                 óZ   — t         j                  | |«       || _        || _        || _        y r†   )r  rh   rþ   rÿ   r‚  )rX   rþ   rÿ   r‚  rK  s        rA   rh   zCircle.__init__¦  s'   € Ü×Ñ˜D "Ô%ØˆŒØˆŒØˆ�rC   c                 ó¦   — | j                  | j                  | j                  | j                  «      }|j	                  | j                  «       «       |S r†   )r›   rþ   rÿ   r‚  r¦   r£   r?  s     rA   r�   zCircle.copy¬  s<   € Ø�n‰n˜TŸW™W d§g¡g¨t¯v©vÓ6ˆØ×Ñ˜$×,Ñ,Ó.Ô/Øˆ
rC   c                 óÆ   — | j                   | j                  z
  | j                  | j                  z
  | j                   | j                  z   | j                  | j                  z   fS r†   )rþ   r‚  rÿ   rœ   s    rA   r½   zCircle.getBounds±  sH   € Ø—‘˜$Ÿ&™&Ñ  $§'¡'¨D¯F©FÑ"2°D·G±G¸d¿f¹fÑ4DÀdÇgÁgÐPT×PVÑPVÑFVÐWÐWrC   N©r[   r\   r]   rÀ   r  rÑ   r   r°   rh   r�   r½   r_   rC   rA   r~  r~  ž  s?   „ á˜JÙ˜(Ð(9Ô:Ù˜(Ð(9Ô:Ù˜Ð'9Ô:ô
€Hòòó
XrC   r~  c            
       óx   — e Zd Z ee eed¬«       eed¬«       eed¬«       eed¬«      ¬«      Zd„ Zd„ Z	d	„ Z
y
)ÚEllipser  rÆ   r€  zx radiuszy radius)rm  rþ   rÿ   rr  rs  c                 óh   — t         j                  | |«       || _        || _        || _        || _        y r†   )r  rh   rþ   rÿ   rr  rs  )rX   rþ   rÿ   rr  rs  rK  s         rA   rh   zEllipse.__init__¼  s.   € Ü×Ñ˜D "Ô%ØˆŒØˆŒØˆŒØˆ�rC   c                 ó¼   — | j                  | j                  | j                  | j                  | j                  «      }|j                  | j                  «       «       |S r†   )r›   rþ   rÿ   rr  rs  r¦   r£   r?  s     rA   r�   zEllipse.copyÃ  sB   € Ø�n‰n˜TŸW™W d§g¡g¨t¯w©w¸¿¹Ó@ˆØ×Ñ˜$×,Ñ,Ó.Ô/Øˆ
rC   c                 óÆ   — | j                   | j                  z
  | j                  | j                  z
  | j                   | j                  z   | j                  | j                  z   fS r†   )rþ   rr  rÿ   rs  rœ   s    rA   r½   zEllipse.getBoundsÈ  sH   € Ø—G‘G˜dŸg™gÑ% t§w¡w°·±Ñ'8¸$¿'¹'ÀDÇGÁGÑ:KÈTÏWÉWÐW[×W^ÑW^ÑM^Ð_Ð_rC   Nr†  r_   rC   rA   rˆ  rˆ  ´  sH   „ Ù˜JÙ˜(Ð(9Ô:Ù˜(Ð(9Ô:Ù˜(¨
Ô3Ù˜(¨
Ô3ô	
€Hòòó
`rC   rˆ  c                   óØ   — e Zd ZdZ ee eed¬«       eed¬«       eed¬«       ee«       ee«       ee«       ee«       ee«       ee	d¬«      ¬«
      Z
dZ	 	 dd
„Zd„ Zd„ Zd„ Zd„ Zy	)ÚWedgeznA "slice of a pie" by default translates to a polygon moves anticlockwise
       from start angle to end angler  rÆ   r€  r�  ztreat as annular ring)
rm  rT  rU  rV  rW  rX  rY  Úradius1Úyradius1Úannularr   Nc                 ó¸   — t         j                  | |«       ||k  r|dz   }||k  rŒ|||||f\  | _        | _        | _        | _        | _        || _        || _        y )Nih  )	r  rh   rT  rU  rV  rW  rX  rY  r�  )	rX   rT  rU  rV  rW  rX  rY  r�  rK  s	            rA   rh   zWedge.__init__Ý  sk   € ä×Ñ˜D "Ô%ØÐ/Ò/Ø-¨cÑ1ˆOð Ð/Ó/ð �W˜fÐ&7¸ÐHñ 	^ˆŒ�d”l D¤K°Ô1GÈÔI]àˆŒØˆ�rC   c                 ó~   — t        | dd «      }|€| j                  }t        | dd «      }t        | d|«      }|€|}|||fS )NrY  rŽ  r�  )r²   rV  )rX   rY  rŽ  r�  s       rA   Ú
_xtraRadiizWedge._xtraRadiiè  sO   € Ü˜$ 	¨4Ó0ˆØˆ? d§k¡k˜GÜ˜$˜y¨$Ó/ˆÜ˜4 
¨7Ó3ˆØˆ? h˜GØ˜ Ð)Ð)rC   c                 ó*  — | j                   }| j                  }| j                  }| j                  «       \  }}}| j                  }| j
                  }t        dz  }	||	z  }
||	z  }||
k  r|dt        z  z   }||
k  rŒt        ||
z
  «      }g }|dkD  rEt        | j                  xs d|«      }||	z  }t        dt        ||z  dz   «      «      }||z  }|dz  }nd}d}g }|j                  }|j                  }t        |«      D ]&  }|
||z  z   } |t        |«      t        |«      f«       Œ( |D ]!  \  }} ||||z  z   «        ||||z  z   «       Œ# |dk(  s|€|dk(  s|€ ||«        ||«       n6|j!                  «        |D ]!  \  }} ||||z  z   «        ||||z  z   «       Œ# | j"                  rÜt%        t'        | dt(        «      ¬	«      }|j+                  |d   |d   «       t        dd|z  d«      D ]  }|j-                  ||   ||dz      «       Œ |j/                  «        |j+                  |d|z     |d|z  dz      «       t        d|z  dz   d
|z  d«      D ]  }|j-                  ||   ||dz      «       Œ |j/                  «        |S t1        |«      S )NrP  rx   rQ  rp  r   rR  r   r)   )r)   ry   )rT  rU  rV  r“  rW  rX  r   r5  rG   rZ  r5   r´  rz   rŒ   r   r   rS  r�  r8  r²   r   r"  r#  r%  ÚPolygon)rX   rT  rU  rV  rY  rŽ  r�  rW  rX  r[  r\  r]  rJ   r�   rZ  r^  r0   ÚCAÚCAAr}   r   r/   rì   rH   s                           rA   Ú	asPolygonzWedge.asPolygonô  sÊ  € à—‘ˆØ—,‘,ˆØ—‘ˆØ%)§_¡_Ó%6Ñ"ˆ�˜(Ø ×2Ñ2ÐØ×.Ñ.ˆÜ˜e™8ÐØ&Ð'7Ñ7ˆ
Ø"Ð#3Ñ3ˆØ�zÒ!Ø ¤"¡‘}ˆHð �zÓ!ä�h˜zÑ)Ó*ˆØˆØ�Š;Ü˜d×.Ñ.Ò4°"°UÓ;ˆKØ&Ð'7Ñ7ˆLÜ�A”c˜% Ñ,¨SÑ0Ó1Ó2ˆAØ  ™7ˆLØ�‰F‰AàˆAØˆLØˆØ�i‰iˆØ�M‰MˆÜ˜1“Xò 	)ˆEØ˜u \Ñ1Ñ1ˆEÙ”�U“œC ›JÐ'Õ(ð	)ð ò 	!‰CˆAˆaÙˆg�f˜Q‘hÑÔÙˆg�g˜a‘iÑÕ ð	!ð �QŠJ˜'˜/°¸!²¸xÐ?OÙˆgŒJ™˜'�
à�J‰JŒLØò &‘��!Ù�'˜' !™)Ñ#Ô$Ù�'˜( 1™*Ñ$Õ%ð&ð �<Š<Üœg d¨:´}ÓEÔFˆAØ�H‰H�V˜A‘Y˜v a™yÔ)Ü˜1˜Q˜q™S “^ò 0�Ø—‘˜ ™ 6¨!¨A©#¡;Õ/ð0à�K‰KŒMØ�H‰H�V˜A˜a™C‘[ ¨¨!©¨A©¡Ô/Ü˜1˜Q™3˜q™5  1¡ QÓ'ò 0�Ø—‘˜ ™ 6¨!¨A©#¡;Õ/ð0à�K‰KŒMØˆHä˜6“?Ð"rC   c                 óÒ   — | j                  | j                  | j                  | j                  | j                  | j
                  «      }|j                  | j                  «       «       |S r†   )r›   rT  rU  rV  rW  rX  r¦   r£   r?  s     rA   r�   z
Wedge.copy*  sT   € Ø�n‰n˜TŸ\™\Ø—L‘LØ—K‘KØ×*Ñ*Ø×(Ñ(ó	*ˆð
 	×Ñ˜$×,Ñ,Ó.Ô/Øˆ
rC   c                 ó>   — | j                  «       j                  «       S r†   )r˜  r½   rœ   s    rA   r½   zWedge.getBounds3  s   € Ø�~‰~Ó×)Ñ)Ó+Ð+rC   )NF)r[   r\   r]   r^   rÀ   r  rÑ   r   r  r!  r°   rZ  rh   r“  r˜  r�   r½   r_   rC   rA   r�  r�  Ë  s�   „ ñ(ñ ˜JÙ˜xÐ->Ô?Ù˜xÐ->Ô?Ù˜hÐ,>Ô?Ù(¨Ó2Ù& xÓ0Ù˜~Ó.Ù˜~Ó.Ù Ó/Ù˜yÐ.EÔFô

€Hð €Kà]aØó	ò*ò4#òló,rC   r�  c                   óJ   — e Zd ZdZ ee eed¬«      ¬«      Zg fd„Z	d„ Z
d„ Zy)	r•  zKDefines a closed shape; Is implicitly
    joined back to the start for you.ú5list of numbers in the form x1, y1, x2, y2 ... xn, ynrÆ   ©rm  r�   c                 óv   — t         j                  | |«       t        |«      dz  dk(  sJ d«       ‚|xs g | _        y r<  )r  rh   r6   r�   )rX   r�   rK  s      rA   rh   zPolygon.__init__>  s9   € Ü×Ñ˜D "Ô%Ü�6‹{˜Q‰ !Ò#ÐTÐ%TÓTÐ#Ø’l ˆ�rC   c                 óz   — | j                  | j                  «      }|j                  | j                  «       «       |S r†   ©r›   r�   r¦   r£   r?  s     rA   r�   zPolygon.copyC  ó0   € Ø�n‰n˜TŸ[™[Ó)ˆØ×Ñ˜$×,Ñ,Ó.Ô/Øˆ
rC   c                 ó,   — t        | j                  «      S r†   ©r–   r�   rœ   s    rA   r½   zPolygon.getBoundsH  ó   € Ü˜tŸ{™{Ó+Ð+rC   N)r[   r\   r]   r^   rÀ   r  rÑ   r  r°   rh   r�   r½   r_   rC   rA   r•  r•  6  s4   „ ñ)ñ ˜JÙ˜oÐ3jÔkô
€Hð !ó #ò
ó
,rC   r•  c                   óJ   — e Zd ZdZ ee eed¬«      ¬«      Zg fd„Z	d„ Z
d„ Zy)	ÚPolyLinez–Series of line segments.  Does not define a
    closed shape; never filled even if apparently joined.
    Put the numbers in the list, not two-tuples.rœ  rÆ   r�  c                 ó   — t         j                  | |«       |xs g }t        |«      }|r^t        |d   «      r8g }|D ]'  \  }}|j	                  |«       |j	                  |«       Œ) |}|| _        y t        |«      dz  dk(  sJ d«       ‚|| _        y )Nr   rx   r=  )r  rh   r6   r   rz   r�   )rX   r�   rK  Ú	lenPointsrl   rH   rI   s          rA   rh   zPolyLine.__init__T  s–   € Ü×Ñ˜4 Ô$Ø’˜2ˆÜ˜“Kˆ	ÙÜ�V˜A‘YÔØ�Ø#ò  ‘E�Q�qØ—H‘H˜Q”KØ—H‘H˜Q•Kð ð �ð ˆ�ô ˜6“{ Q‘¨!Ò+Ð\Ð-\Ó\Ð+Øˆ�rC   c                 óz   — | j                  | j                  «      }|j                  | j                  «       «       |S r†   r   r?  s     rA   r�   zPolyLine.copyc  r¡  rC   c                 ó,   — t        | j                  «      S r†   r£  rœ   s    rA   r½   zPolyLine.getBoundsh  r¤  rC   N)r[   r\   r]   r^   rÀ   r  rÑ   r  r°   rh   r�   r½   r_   rC   rA   r¦  r¦  K  s4   „ ñ4ñ ˜IÙ˜oÐ3jÔkô
€Hð !ó òó
,rC   r¦  c                   ó¬   — e Zd ZdZ ee e ee e	ed¬«      fd«      d¬«       e ee
edf«      d¬«       e ee
ed	f«      d
¬«      ¬«      Zddg fd„Zy)ÚHatchingz\define a hatching of a set of polygons defined by lists of the form [x0,y0,x1,y1,....,xn,yn]r   )rk  z
xy list(s)z8list(s) of numbers in the form x1, y1, x2, y2 ... xn, ynrÆ   zangle(s)zCthe angle or list of angles at which hatching lines should be drawnzspacings(s)z-orthogonal distance(s) between hatching lines)rm  ÚxyListsÚanglesÚspacingsrx   é-   c           
      óL  — t        j                  | fi |¤Ž t        |«      r|f}t        |«      r|f}t        |«      r|f}t	        |«      t	        |«      z
  }|dkD  rt        |«      ||d   gz  z   }|| _        || _        || _        | j                  }| j                  }t        |«      D �]÷  \  }}||   }	t        |«      }t        |«      }
t        |«      }d}| }|D ]I  }t        dt	        |«      d«      D ].  }||dz      |
z  ||   |z  z
  }t!        ||«      }t#        ||«      }Œ0 ŒK t%        t'        ||	z  «      «      dz
  }t%        t'        ||	z  «      «      dz   }t        ||«      D �]4  }g }|	|z  }|D ]ª  }t	        |«      dz
  }t        dt	        |«      d«      D ]�  }||   }||dz      }||
z  ||z  z   }||
z  ||z  z
  }||   }||dz      }||
z  ||z  z   }||
z  ||z  z
  }||k  r||k\  s
||k  r(||k\  r#|j)                  |||z
  ||z
  z  ||z
  z  z   «       |}Œƒ Œ¬ |j+                  «        t        dt	        |«      d«      D ]R  }||   |
z  ||z  z
  }||
z  ||   |z  z   }||dz      |
z  ||z  z
  }||
z  ||dz      |z  z   } |||«        |||«       ŒT �Œ7 �Œú y )Nr   r1   iÿÿÿrx   r   )r8  rh   r  r   r6   rŠ   r­  r®  r¯  r"  r#  Ú	enumerater   r   r   rŒ   rG   r5   r´  r   rz   r©   )rX   r¯  r®  r­  Úkwdsr‡   r"  r#  rý   ÚspacingÚcosThetaÚsinThetaÚspanMinÚspanMaxrì   r3  rI   Ú	spanStartÚspanEndÚstepÚnodeXÚstripeYró   r}   r~   Úa1Úb1rH   rq   rr   s                                 rA   rh   zHatching.__init__t  s4  € Ü�‰�dÑ#˜dÒ#Ü˜7Ô#Ø�zˆGÜ�FÔØ�YˆFÜ�HÔØ �{ˆHÜ�‹Kœ˜H›Ñ%ˆØˆQŠ3Ü˜H“~ a¨°"©¨Ñ&6Ñ6ˆHàˆŒØˆŒØ ˆŒà—‘ˆØ—‘ˆä! &Ó)ó :	 ‰HˆAˆuØ˜q‘kˆGÜ˜E“NˆEÜ˜5“zˆHÜ˜5“zˆHà ˆGØ�hˆGð ò -�Ü˜q¤ Q£¨Ó*ò -�Aà˜!˜A™#™˜x™¨¨!©¨X©Ñ5�AÜ! ! G›n�GÜ! ! G›n‘Gñ	-ð-ô œE '¨'¡/Ó2Ó3°aÑ7ˆIÜœ5 ¨¡Ó1Ó2°QÑ6ˆGô ˜i¨Ó0ó $ �Ø�Ø! $™,�ð !ò �AÜ˜A›˜q™�AÜ" 1¤S¨£V¨AÓ.ò ˜Ø˜a™D˜Ø˜a ™c™F˜Ø˜x™Z¨!¨H©*Ñ4˜Ø˜x™Z¨!¨H©*Ñ4˜Ø˜a™D˜Ø˜a ™c™F˜à˜x™Z¨¨(©
Ñ2˜Ø˜x™Z¨¨(©
Ñ2˜ð ˜wšJ¨2¨wª;¸2¸gº:È"ÈgÊ+Ø!ŸL™L¨¨R°©U°W¸R±ZÑ,@À"ÀRÁ%Ñ,HÑ)HÔIà™ñðð& —
‘
”ô ˜q¤ U£¨AÓ.ò 	 �Aà˜a™ Ñ)¨G°HÑ,<Ñ<�AØ Ñ(¨¨q©°(Ñ):Ñ:�AØ˜a ™c™
 8Ñ+¨g°hÑ.>Ñ>�AØ Ñ(¨5°°1±©:°hÑ+>Ñ>�Añ ˜1˜Q”KÙ˜1˜Q•Kò	 ò7$ ñ-:	 rC   N)r[   r\   r]   r^   rÀ   r8  rÑ   ÚEitherOrr  r  r   r°   rh   r_   rC   rA   r¬  r¬  k  sƒ   „ Ùfá˜DÙ™x¨¹ÀOÐWXÔ9YÐ(ZÐ[gÓhð  oiô  jÙ™h¨°ÀÐ'LÓMð  TYô  ZÙ¡¨(°?À=Ð)QÓ Rð  YHô  Iô
€Hð !"¨"°bô M rC   r¬  c                 óŽ   — t        | d|«      }|j                  |«      }|dk\  r!t        | dd«      }	|	t        |d | |||«      z   }|S )NÚ_dpr   Ú_dpLen)r²   Úrfindr   )
ÚtAr7   r4   r+   r*   ÚencodingÚpivotCharacterÚdpr‡   ÚdpOffss
             rA   ÚnumericXShiftrÊ  Ã  sR   € Ü	��E˜.Ó	)€BØ�
‰
�2‹€AØˆ!‚tÜ˜˜H QÓ'ˆØ”[  b q ¨(°8¸HÓEÑEˆØ€HrC   c                   ó  — e Zd ZdZ e eed¬«       eed¬«       eed¬«       edd¬«       eed¬«       eed	¬«       e e	d
ddd«      d¬«       ee«       e e	dddddddd«      d¬«      ¬«	      Z
dZd„ Zd„ Zd„ Zd„ Zy)ÚStringziNot checked against the spec, just a way to make something work.
    Can be anchored left, middle or end.zx point of anchoringrÆ   zy point of anchoringzthe text of the stringNz_font name of the text - font is either acrobat standard or registered when using external font.z	font sizezcolor of the fontr-   Úmiddler3   Únumericz(treat (x,y) as one of the options below.r   r   rx   rw   ry   é   r!  é   z.Control whether text is filled/stroked etc etc)	rH   rI   r7   r+   r*   r(   r,   rÆ  ÚtextRenderModeÚutf8c                 ó²   — || _         || _        || _        d| _        t        d   | _        t        d   | _        t        d   | _        | j                  |«       y )Nr-   r+   r*   r(   )	rH   rI   r7   r,   r  r+   r*   r(   r¦   )rX   rH   rI   r7   rK  s        rA   rh   zString.__init__Ý  sP   € ØˆŒØˆŒØˆŒ	Ø!ˆŒÜ& zÑ2ˆŒÜ& zÑ2ˆŒÜ'¨Ñ4ˆŒØ×Ñ˜2ÕrC   c                 óˆ   — | j                   t        | j                  | j                  | j                  | j
                  «      z   S r†   )rH   r   r7   r+   r*   rÆ  rœ   s    rA   ÚgetEastzString.getEastç  s,   € Ø�v‰vœ D§I¡I¨d¯m©m¸D¿M¹MÈ4Ï=É=ÓYÑYÐYrC   c                 ó¦   — | j                  | j                  | j                  | j                  «      }|j	                  | j                  «       «       |S r†   )r›   rH   rI   r7   r¦   r£   r?  s     rA   r�   zString.copyê  s<   € Ø�n‰n˜TŸV™V T§V¡V¨T¯Y©YÓ7ˆØ×Ñ˜$×,Ñ,Ó.Ô/Øˆ
rC   c           	      ó¾  — | j                   }t        || j                  | j                  | j                  «      }| j
                  }| j                  }|dk7  rO|dk(  r	|d|z  z  }nA|dk(  r||z  }n6|dk(  r1|t        |||| j                  | j                  | j                  «      z  }|| j                  d| j                  z  z
  ||z   | j                  | j                  z   fS )Nr-   rÍ  rR  r3   rÎ  gš™™™™™É?)	r7   r   r+   r*   rÆ  r,   rH   rÊ  rI   )rX   r;   r4   rÅ  rH   s        rA   r½   zString.getBoundsï  sÂ   € à�I‰IˆÜ˜˜$Ÿ-™-¨¯©°d·m±mÓDˆØ�_‰_ˆØ�F‰FˆØˆwŠ;Ø�8Š|Ø�S˜‘U‘
‘Ø�U’Ø�Q‘‘Ø�Y’Ø”] 2 a¨¨$¯-©-¸¿¹ÀdÇmÁmÓTÑT�Ø�4—6‘6˜C $§-¡-Ñ/Ñ/°°1±°d·f±f¸t¿}¹}Ñ6LÐMÐMrC   )r[   r\   r]   r^   rÀ   rÑ   r   ÚisStringr  r  r°   rÆ  rh   rÕ  r�   r½   r_   rC   rA   rÌ  rÌ  Ë  s³   „ ñ,ñ Ù˜Ð'=Ô>Ù˜Ð'=Ô>Ù˜HÐ*BÔCÙ ð  +Lô  MÙ ¨kÔ:Ù  Ð4GÔHÙ!¡%¨°¸¸yÓ"IÐOyÔzÙ Ó)Ù%¡e¨A¨a°°!°A°a¸¸!Ó&<ÐBrÔsô

€Hð €HòòZòó
NrC   rÌ  c                   ó   — e Zd ZdZd„ Zy)rÞ   ak  A simple template for creating a new node.  The user (Python
    programmer) may subclasses this.  provideNode() must be defined to
    provide a Shape primitive when called by a renderer.  It does
    NOT inherit from Shape, as the renderer always replaces it, and
    your own classes can safely inherit from it without getting
    lots of unintended behaviour.c                 ó   — t        d«      ‚)zºOverride this to create your own node. This lets widgets be
        added to drawings; they must create a shape (typically a group)
        so that the renderer can draw the custom node.ú4this method must be redefined by the user/programmerr¼   rœ   s    rA   rß   zUserNode.provideNode  s   € ô
 "Ð"XÓYÐYrC   N)r[   r\   r]   r^   rß   r_   rC   rA   rÞ   rÞ   þ  s   „ ñ%óZrC   rÞ   c                   ó   — e Zd ZdZd„ Zy)Ú
DirectDrawz"try to draw directly on the canvasc                 ó   — t        d«      ‚)NrÛ  r¼   )rX   rY   s     rA   ÚdrawDirectlyzDirectDraw.drawDirectly  s   € Ü!Ð"XÓYÐYrC   N)r[   r\   r]   r^   rß  r_   rC   rA   rÝ  rÝ    s   „ Ù,óZrC   rÝ  c                  ó4  — t        dddd«      } dd l}|j                  }t        j                  j                  } |d«        || j                  «       «        |d«       | j                  «         |d«        |d«       | ` |d	«       | j                  «        y )
Nr!   rÿ  é2   r   za Rectangle: z
verifying...z OK
zdeleting rect.width zverifying...)ro  ÚpprintrÀ  ÚstdoutrÚ  r£   r¶   rV   )r‚  râ  Úppr4   s       rA   r  r    s~   € ÜˆR��3�rÓ€AÛØ	�‰€BÜ�
‰
×Ñ€AÙ€oÔÙ€q‡�ÓÔÙÐÔØ‡H�H„JÙ€g„Jñ ÐÔØ	ˆÙ€nÔØ‡H�H…JrC   Ú__main__r†   )r   z		)FF)NNN)bÚ__version__r^   r¹  rÀ  Úmathr   r   r   r   r   r   Úreportlab.platypusr	   Úreportlab.rl_configr
   r   r   Ú_baseGFontNamer   r   Úreportlab.libr   r   Úreportlab.lib.validatorsÚreportlab.lib.utilsr   r   rN  ÚisNumberInRanger  Úreportlab.lib.attrmapÚreportlab.lib.rl_accelr   Úreportlab.pdfbase.pdfmetricsr   Úreportlab.lib.fontsr   Úreportlab.pdfgen.canvasr   r   Ú_baseGFontNameBÚ_baseGFontNameIÚ_baseGFontNameBIÚNON_ZERO_WINDINGÚEVEN_ODDÚblackr  r   rB   rN   rP   ra   ru   rƒ   r‘   r–   r˜   rÂ   r'  r+  rC  rL  rÝ   rs  Ú	Validatorr  r  r  r  rŠ   rŒ   r(  rD  rF  r)  r*  rf  r4  Ú_fillModeMapr8  r2  r_  ra  rm  ro  ry  r~  rˆ  r�  r•  r¦  r¬  rÊ  rÌ  rÞ   rÝ  r  r[   r_   rC   rA   ú<module>rü     sw  ðð
 €ØG€ç ß 3× 3å 'ß yÕ yÝ  Ý  Ü &ß .Ù‘? 1 QÓ'Ó(€	Ü #Ý )Ý 4Ý %ß @Ù˜ q¨Ó+€Ù˜ q¨Ó+€Ù˜¨¨!Ó,Ð ð &Ð Ø€ðØ�ðð �6—<‘<ð	ð
 �1ðð �Qðð �aðð ˜ðð �tðð �Tðð �4ðð �Uðð �uðð �Qðð  �—‘ð!ð" �ð#ð& �ð'ð( �ð)ð* �7ð+€ô6 ò  òD-÷,ñ ,÷&ñ &ò$ò"3òj0ò(ôKQˆOÐ/ô KQôZ{ˆEô {óz	óó<ò"@ô
Tˆe�Xô T÷l5ñ 5ô,z˜	ô zñ &Ó'Ð ô�ô ô24ˆ9ô 4ô&%�ô %ñ& *.©e°A«h«Ñ &€ˆ�(˜JØ!Ð Ú8€ó%ð< 	ˆdØ�}Ø�MØ�=Ø�}Ø�MØ�=ð
€ôF)ˆ:ô F)ñP ‹f€óô6(ˆdô (ð  a¨A°!ó 0%ôdKˆ:ô Kô:KˆJô Kô8XˆZô Xô,`ˆjô `ô.i,ˆJô i,ôV,ˆjô ,ô*,ˆyô ,ô@V ˆtô V ðp 8<È=ó ô1NˆUô 1NôfZÐ"ô ZôZ�ô Zò
ð" ˆZÒÙ…Fð rC   