Ë
    Ç[;j÷}  ã                   ój  — d dl Z d dlZddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ dd	lm	Z	 d dl
Z
 e
j                  eeeeeef«      Z G d
„ d«      Z G d„ de«      Z G d„ de«      Z G d„ de«      Z G d„ de«      Z G d„ d«      Zi dd“dd“dd“dd“dd“d d!“d"d#“d$d%“d&d'“d(d)“d*d+“d,d-“d.d/“d0d1“d2d3“d4d5“d6d7“d8d9d:œ¥j2                  Zd;d<d=d>d?œj2                  Z G d@„ dAe«      Z G dB„ dCe«      ZdD„ Z G dE„ dFe«      ZdG„ Z dH„ Z! G dI„ dJe«      Z"e#dKk(  rd dl$Z$ e$jJ                  «        yy)Lé    Né   )Ú	TypeSlots)ÚBuiltin)ÚNodes)Ú	ExprNodes)ÚErrors)Ú
DebugFlags)ÚFuturec                   óÒ   ‡ — e Zd ZdZˆ fd„Zd„ Zd„ Zd„ Zej                  d„ «       Z
d„ Zej                  d„ «       Zej                  d	„ «       Zdd
„Zej                  d„ «       Zˆ xZS )ÚTreeVisitora£  
    Base class for writing visitors for a Cython tree, contains utilities for
    recursing such trees using visitors. Each node is
    expected to have a child_attrs iterable containing the names of attributes
    containing child nodes or lists of child nodes. Lists are not considered
    part of the tree structure (i.e. contained nodes are considered direct
    children of the parent node).

    visit_children visits each of the children of a given node (see the visit_children
    documentation). When recursing the tree using visit_children, an attribute
    access_path is maintained which gives information about the current location
    in the tree as a stack of tuples: (parent_node, attrname, index), representing
    the node, attribute and optional list index that was taken in each step in the path to
    the current node.

    Example:

    >>> class SampleNode(object):
    ...     child_attrs = ["head", "body"]
    ...     def __init__(self, value, head=None, body=None):
    ...         self.value = value
    ...         self.head = head
    ...         self.body = body
    ...     def __repr__(self): return "SampleNode(%s)" % self.value
    ...
    >>> tree = SampleNode(0, SampleNode(1), [SampleNode(2), SampleNode(3)])
    >>> class MyVisitor(TreeVisitor):
    ...     def visit_SampleNode(self, node):
    ...         print("in %s %s" % (node.value, self.access_path))
    ...         self.visitchildren(node)
    ...         print("out %s" % node.value)
    ...
    >>> MyVisitor().visit(tree)
    in 0 []
    in 1 [(SampleNode(0), 'head', None)]
    out 1
    in 2 [(SampleNode(0), 'body', 0)]
    out 2
    in 3 [(SampleNode(0), 'body', 1)]
    out 3
    out 0
    c                 ó>   •— t         ‰| �  «        i | _        g | _        y ©N)ÚsuperÚ__init__Údispatch_tableÚaccess_path)ÚselfÚ	__class__s    €ú`G:\00. PROJECTS\API\Inventory\templateJSON\kerjaOCR\Lib\site-packages\Cython/Compiler/Visitor.pyr   zTreeVisitor.__init__D   s   ø€ Ü‰ÑÔØ ˆÔØˆÕó    c                 óº  — t        |j                  xs g «      g d¢z   }g }t        |dd «      }|rS|d   }|r-dd l}|j                  j                  |j                  «       «      }|j                  |›d|d   ›d|d   ›�«       t        |«      }|D ]�  }||v rŒ|j                  d«      s|j                  d«      rŒ+	 t        ||«      }	|	�|	dk(  rŒ@t        |	t         «      rdt        |	«      z  }	nt        |	t        «      sŒpt        |	«      }	|j                  |›d	|	›�«       Œ’ |j                   j"                  ›d
dj%                  |«      ›d�S # t        $ r Y ŒÉw xY w)N)Úchild_attrsÚposÚgil_messageÚcpp_messageÚsubexprsr   r   Ú:r   é   Ú_z[...]/%dú = Ú(z,
    Ú))Úlistr   ÚgetattrÚos.pathÚpathÚbasenameÚget_descriptionÚappendÚdirÚ
startswithÚendswithÚAttributeErrorÚ
isinstanceÚlenÚ
_PRINTABLEÚreprr   Ú__name__Újoin)
r   ÚnodeÚignoredÚvaluesr   ÚsourceÚosÚattribute_namesÚattrÚvalues
             r   Ú	dump_nodezTreeVisitor.dump_nodeI   sK  € Ü�t×'Ñ'Ò-¨2Ó.ò 2Lñ LˆàˆÜ�d˜E 4Ó(ˆÙØ˜‘VˆFÙÛØŸ™×)Ñ)¨&×*@Ñ*@Ó*BÓC�Ø�M‰Mª°°A³¸¸AºÐ?Ô@Ü˜d›)ˆÛ#ˆDØ�w‰ØØ�‰˜sÔ# t§}¡}°SÔ'9ØðÜ  dÓ+�ð ˆ} ¨¢
ØÜ˜E¤4Ô(Ø"¤S¨£ZÑ/‘Ü ¤zÔ2Øä˜U›�Ø�M‰M¢t©UÐ3Õ4ð# $ð$  Ÿ>™>×2Ó2°I·N±NÀ6Õ4JÐKÐKøô "ò Ùðús   Â<EÅ	EÅEc                 ó¤  — dd l }|}g }t        |d«      r¹|j                  }|j                  j	                  d«      }t        |t        j                  «      r_|j                  }|j                  }|j                  j                  |j                  «      |j                  f}	|j                  |||	f«       |}|j                  }t        |d«      rŒ¹||fS )Nr   Útb_framer   )r%   Úhasattrr>   Úf_localsÚgetr.   r   ÚNodeÚf_codeÚco_namer&   r'   Úco_filenameÚf_linenor)   Útb_next)
r   Ú
stacktracer8   Úlast_tracebackÚnodesÚframer4   ÚcodeÚmethod_namer   s
             r   Ú_find_node_pathzTreeVisitor._find_node_pathi   sº   € ÛØ#ˆØˆÜ�j *Ô-Ø×'Ñ'ˆEØ—>‘>×%Ñ% fÓ-ˆDÜ˜$¤§
¡
Ô+Ø—|‘|�Ø"Ÿl™l�Ø—w‘w×'Ñ'¨×(8Ñ(8Ó9Ø—~‘~ð'�à—‘˜d K°Ð5Ô6Ø!+�Ø#×+Ñ+ˆJô �j *Õ-ð  Ð&Ð&r   c                 ó<  — dg}| j                   D ]_  \  }}}t        ||«      }|€d}n
||   }d|z  }|j                  |j                  j                  ›d|›|›d| j                  |«      ›�«       Œa | j                  t        j                  «       d   «      \  }}	|}
|	D ]5  \  }}}|}
|j                  d|d   |d   || j                  |«      fz  «       Œ7 t        j                  t        |
d	d «      | j                  j                  d
j                  |«      ||«      ‚)NÚ z[%d]Ú.r    r   zFile '%s', line %d, in %s: %sr   r   r   Ú
)r   r$   r)   r   r2   r<   rN   ÚsysÚexc_infor   ÚCompilerCrashr3   )r   ÚchildÚeÚtraceÚparentÚ	attributeÚindexr4   rH   Úcalled_nodesÚ	last_noderM   r   s                r   Ú_raise_compiler_errorz!TreeVisitor._raise_compiler_errorz   s(  € Ø�ˆØ(,×(8Ô(8Ñ$ˆF�I˜uÜ˜6 9Ó-ˆDØˆ}Ø‘à˜E‘{�Ø ™�Ø�L‰LØ× Ñ ×)Ó)©9²eØ—‘˜tÔ$ð&õ 'ð )9ð $(×#7Ñ#7¼¿¹»ÀqÑ8IÓ#JÑ ˆ
�LØˆ	Û&2Ñ"ˆD�+˜sØˆIØ�L‰LÐ8Ø�A‘˜˜A™ ¨T¯^©^¸DÓ-Að<Cñ Cõ Dð '3ô ×"Ñ"Ü�I˜u dÓ+¨T¯^©^×-DÑ-DØ�I‰I�eÓ˜a ó-ð 	-r   c                 ó²  — t        |«      }t        j                  |«      }|D ]"  }t        | d|j                  z   d «      }|€Œ |c S  t        t        | «      |«       | j                  r_t        | j                  «       t        | j                  d   d   j                  «       t        | j                  d   d   j                  «       t        d| ›d|›�«      ‚)NÚvisit_éÿÿÿÿr   zVisitor z does not accept object: )
ÚtypeÚinspectÚgetmror$   r2   Úprintr   r   Ú__dict__ÚRuntimeError)r   ÚobjÚclsÚmroÚmro_clsÚhandler_methods         r   Úfind_handlerzTreeVisitor.find_handler�   s½   € ô �3‹iˆÜ�n‰n˜SÓ!ˆÛˆGÜ$ T¨8°g×6FÑ6FÑ+FÈÓMˆNØÑ)Ø%Ò%ð ô
 	Œd�4‹j˜#ÔØ×ÒÜ�$×"Ñ"Ô#Ü�$×"Ñ" 2Ñ& qÑ)×-Ñ-Ô.Ü�$×"Ñ" 2Ñ& qÑ)×2Ñ2Ô3ÝÂdÉCÐPÓQÐQr   c                 ó$   — | j                  |«      S r   ©Ú_visit)r   rh   s     r   ÚvisitzTreeVisitor.visit¡   s   € à�{‰{˜3ÓÐr   c                 ót  — 	 	 | j                   t        |«         } ||«      S # t        $ r, | j                  |«      }|| j                   t        |«      <   Y Œ<w xY w# t        j
                  $ r ‚ t        j                  $ r ‚ t        $ r-}t        j                  r‚ | j                  ||«       Y d }~y d }~ww xY wr   )r   rb   ÚKeyErrorrm   r   ÚCompileErrorÚ
AbortErrorÚ	Exceptionr	   Údebug_no_exception_interceptr^   )r   rh   rl   rW   s       r   rp   zTreeVisitor._visit¥   s·   € ð	/ð@Ø!%×!4Ñ!4´T¸#³YÑ!?�ñ " #Ó&Ð&øô ò @Ø!%×!2Ñ!2°3Ó!7�Ø1?�×#Ñ#¤D¨£IÓ.ð@ûô ×"Ñ"ò 	ØÜ× Ñ ò 	ØÜò 	/Ü×6Ò6ØØ×&Ñ& s¨A×.Ñ.ûð	/ús2   ƒ# ›A £2AÁA ÁAÁA Á/B7Â
#B2Â2B7c                 ó˜   — | j                   j                  |||f«       | j                  |«      }| j                   j                  «        |S r   )r   r)   rp   Úpop)r   rV   rY   ÚattrnameÚidxÚresults         r   Ú_visitchildzTreeVisitor._visitchild¸   sD   € ð 	×Ñ×Ñ ¨°3Ð 7Ô8Ø—‘˜UÓ#ˆØ×Ñ×ÑÔØˆr   c                 ó(   — | j                  |||«      S r   )Ú_visitchildren©r   rY   ÚattrsÚexcludes       r   ÚvisitchildrenzTreeVisitor.visitchildrenÀ   s   € à×"Ñ" 6¨5°'Ó:Ð:r   c                 óf  — |€yi }|j                   D ]–  }|�||vrŒ
|�||v rŒt        ||«      }|€Œ t        |«      t        u r0t	        |«      D ��cg c]  \  }}| j                  ||||«      ‘Œ }	}}n1| j                  |||d«      }	t        |	t        «      rJ d|›d|›�«       ‚|	||<   Œ˜ |S c c}}w )af  
        Visits the children of the given parent. If parent is None, returns
        immediately (returning None).

        The return value is a dictionary giving the results for each
        child (mapping the attribute name to either the return value
        or a list of return values (in the case of multiple children
        in an attribute)).
        NzCannot insert list here: z in )r   r$   rb   r#   Ú	enumerater}   r.   )
r   rY   r�   r‚   r|   r:   rV   r{   ÚxÚchildretvals
             r   r   zTreeVisitor._visitchildrenÄ   sÕ   € ð ˆ> $ØˆØ×&Ô&ˆDØÐ  T°Ñ%6¸ØÐ" t¨w¡¸Ü˜F DÓ)ˆEØÑ Ü˜“;¤$Ñ&ÜXaÐbgÔXhÔ"iÑXhÉfÈcÐST 4×#3Ñ#3°A°v¸tÀSÕ#IÐXh�KÒ"ià"&×"2Ñ"2°5¸&À$ÈÓ"M�KÜ)¨+´tÔ<ÑrÒeiÑkqÐ>rÓrÐ<Ø*��t’ð 'ð ˆùó #js   ÁB-©NN)r2   Ú
__module__Ú__qualname__Ú__doc__r   r<   rN   r^   ÚcythonÚfinalrm   rq   rp   r}   rƒ   r   Ú__classcell__©r   s   @r   r   r      s‹   ø„ ñ)ôTò
Lò@'ò"-ð, ‡\�\ñRó ðRò  ð ‡\�\ñ/ó ð/ð$ ‡\�\ñó ðó;ð ‡\�\ñó ôr   r   c                   óv   — e Zd ZdZd	d„Zej                  d	d„«       Zej                  d„ «       Zd
d„Z	d„ Z
d„ Zy)ÚVisitorTransforma»  
    A tree transform is a base class for visitors that wants to do stream
    processing of the structure (rather than attributes etc.) of a tree.

    It implements __call__ to simply visit the argument node.

    It requires the visitor methods to return the nodes which should take
    the place of the visited node in the result tree (which can be the same
    or one or more replacement). Specifically, if the return value from
    a visitor method is:

    - [] or None; the visited node will be removed (set to None if an attribute and
    removed if in a list)
    - A single node; the visited node will be replaced by the returned node.
    - A list of nodes; the visited nodes will be replaced by all the nodes in the
    list. This will only work if the node was already a member of a list; if it
    was not, an exception will be raised. (Typically you want to ensure that you
    are within a StatListNode or similar before doing this.)
    Nc                 ó(   — | j                  |||«      S r   ©Ú_process_childrenr€   s       r   rƒ   zVisitorTransform.visitchildrenö   s   € à×%Ñ% f¨e°WÓ=Ð=r   c                 óº   — | j                  |||«      }|j                  «       D ]4  \  }}t        |«      t        u r| j	                  |«      }t        |||«       Œ6 |S r   )r   Úitemsrb   r#   Ú_flatten_listÚsetattr)r   rY   r�   r‚   r|   r:   Únewnodes          r   r”   z"VisitorTransform._process_childrenú   s[   € ð ×$Ñ$ V¨U°GÓ<ˆØ#Ÿ\™\ž^‰MˆD�'Ü�G‹}¤Ñ$Ø×,Ñ,¨WÓ5�Ü�F˜D 'Õ*ð ,ð ˆr   c                 ó†   — g }|D ]9  }|€Œt        |«      t        u r|j                  |«       Œ)|j                  |«       Œ; |S r   )rb   r#   Úextendr)   )r   Ú	orig_listÚnewlistr†   s       r   r—   zVisitorTransform._flatten_list  sB   € ð ˆÛˆAØ‰}Ü˜“7œd‘?Ø—N‘N 1Õ%à—N‘N 1Õ%ð ð ˆr   c                 óp   — t        ||«      }|�'| j                  ||||«      }||urt        |||«       |}|S r   )r$   r}   r˜   )r   rY   r:   r{   rV   r4   s         r   Ú
visitchildzVisitorTransform.visitchild  sH   € ä˜ Ó%ˆØÐØ×#Ñ# E¨6°4¸Ó=ˆDØ˜5Ñ Ü˜  dÔ+ØˆEØˆr   c                 ó(   — | j                  |«       |S r   r“   ©r   r4   s     r   Úrecurse_to_childrenz$VisitorTransform.recurse_to_children  ó   € Ø×Ñ˜tÔ$Øˆr   c                 ó$   — | j                  |«      S r   ro   )r   Úroots     r   Ú__call__zVisitorTransform.__call__  s   € Ø�{‰{˜4Ó Ð r   rˆ   )r   )r2   r‰   rŠ   r‹   rƒ   rŒ   r�   r”   r—   rŸ   r¢   r¦   © r   r   r‘   r‘   â   sK   „ ñó&>ð ‡\�\òó ðð ‡\�\ñ	ó ð	óòó!r   r‘   c                   ó8   ‡ — e Zd ZdZˆ fd„Zˆ fd„Zd„ Zd„ Zˆ xZS )ÚCythonTransformzÃ
    Certain common conventions and utilities for Cython transforms.

     - Sets up the context of the pipeline in self.context
     - Tracks directives in effect in self.current_directives
    c                 ó0   •— t         ‰| �  «        || _        y r   )r   r   Úcontext)r   r«   r   s     €r   r   zCythonTransform.__init__)  s   ø€ Ü‰ÑÔØˆ�r   c                 óh   •— ddl m } t        ||«      r|j                  | _        t        ‰| �  |«      S )Nr   )Ú
ModuleNode)r­   r.   Ú
directivesÚcurrent_directivesr   r¦   )r   r4   r­   r   s      €r   r¦   zCythonTransform.__call__-  s,   ø€ Ý*Ü�d˜JÔ'Ø&*§o¡oˆDÔ#Ü‰wÑ Ó%Ð%r   c                 óp   — | j                   }|j                  | _         | j                  |«       || _         |S r   )r¯   r®   r”   )r   r4   Úolds      r   Úvisit_CompilerDirectivesNodez,CythonTransform.visit_CompilerDirectivesNode3  s4   € Ø×%Ñ%ˆØ"&§/¡/ˆÔØ×Ñ˜tÔ$Ø"%ˆÔØˆr   c                 ó(   — | j                  |«       |S r   r“   r¡   s     r   Ú
visit_NodezCythonTransform.visit_Node:  r£   r   )	r2   r‰   rŠ   r‹   r   r¦   r²   r´   rŽ   r�   s   @r   r©   r©   "  s   ø„ ñôô&òör   r©   c                   ó0   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zy)ÚScopeTrackingTransformc                 óD   — d| _         || _        | j                  |«       |S )NÚmodule©Ú
scope_typeÚ
scope_noder”   r¡   s     r   Úvisit_ModuleNodez'ScopeTrackingTransform.visit_ModuleNodeD  s#   € Ø"ˆŒØˆŒØ×Ñ˜tÔ$Øˆr   c                 ó’   — | j                   | j                  f}|| _         || _        | j                  |«       |\  | _         | _        |S r   r¹   )r   r4   rº   Úprevs       r   Úvisit_scopez"ScopeTrackingTransform.visit_scopeJ  sC   € Ø�‰ §¡Ð/ˆØ$ˆŒØˆŒØ×Ñ˜tÔ$Ø+/Ñ(ˆŒ˜œØˆr   c                 ó&   — | j                  |d«      S )NÚcclass©r¿   r¡   s     r   Úvisit_CClassDefNodez*ScopeTrackingTransform.visit_CClassDefNodeR  ó   € Ø×Ñ  hÓ/Ð/r   c                 ó&   — | j                  |d«      S )NÚpyclassrÂ   r¡   s     r   Úvisit_PyClassDefNodez+ScopeTrackingTransform.visit_PyClassDefNodeU  s   € Ø×Ñ  iÓ0Ð0r   c                 ó&   — | j                  |d«      S )NÚfunctionrÂ   r¡   s     r   Úvisit_FuncDefNodez(ScopeTrackingTransform.visit_FuncDefNodeX  s   € Ø×Ñ  jÓ1Ð1r   c                 ó&   — | j                  |d«      S )NÚstructrÂ   r¡   s     r   Úvisit_CStructOrUnionDefNodez2ScopeTrackingTransform.visit_CStructOrUnionDefNode[  rÄ   r   N)	r2   r‰   rŠ   r¼   r¿   rÃ   rÇ   rÊ   rÍ   r§   r   r   r¶   r¶   ?  s    „ ò
òò0ò1ò2ó0r   r¶   c                   ój   ‡ — e Zd ZdZˆ fd„Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zd
„ Zd„ Zd„ Zd„ Zd„ Zˆ xZS )ÚEnvTransformz@
    This transformation keeps a stack of the environments.
    c                 óh   •— g | _         | j                  ||j                  «       t        ‰| �  |«      S r   )Ú	env_stackÚenter_scopeÚscoper   r¦   )r   r¥   r   s     €r   r¦   zEnvTransform.__call__c  s.   ø€ ØˆŒØ×Ñ˜˜tŸz™zÔ*Ü‰wÑ Ó%Ð%r   c                 ó&   — | j                   d   d   S )Nra   r   ©rÑ   ©r   s    r   Úcurrent_envzEnvTransform.current_envh  ó   € Ø�~‰~˜bÑ! !Ñ$Ð$r   c                 ó&   — | j                   d   d   S )Nra   r   rÕ   rÖ   s    r   Úcurrent_scope_nodezEnvTransform.current_scope_nodek  rØ   r   c                 ó>   — | j                  «       j                  «       S r   )r×   Úglobal_scoperÖ   s    r   rÜ   zEnvTransform.global_scopen  s   € Ø×ÑÓ!×.Ñ.Ó0Ð0r   c                 ó>   — | j                   j                  ||f«       y r   )rÑ   r)   )r   r4   rÓ   s      r   rÒ   zEnvTransform.enter_scopeq  s   € Ø�‰×Ñ˜t U˜mÕ,r   c                 ó8   — | j                   j                  «        y r   )rÑ   ry   rÖ   s    r   Ú
exit_scopezEnvTransform.exit_scopet  s   € Ø�‰×ÑÕr   c                 ó¼   — | j                  |«       | j                  ||j                  «       | j                  |d |j                  ¬«       | j                  «        |S )N)r�   r‚   )Úvisit_func_outer_attrsrÒ   Úlocal_scoperƒ   Úouter_attrsrß   r¡   s     r   rÊ   zEnvTransform.visit_FuncDefNodew  sP   € Ø×#Ñ# DÔ)Ø×Ñ˜˜t×/Ñ/Ô0Ø×Ñ˜4 t°T×5EÑ5EÐÔFØ�‰ÔØˆr   c                 ó>   — | j                  ||j                  ¬«       y )N)r�   )rƒ   rã   r¡   s     r   rá   z#EnvTransform.visit_func_outer_attrs~  s   € Ø×Ñ˜4 t×'7Ñ'7ÐÕ8r   c                 ó(   — | j                  |«       |S r   r“   r¡   s     r   Úvisit_GeneratorBodyDefNodez'EnvTransform.visit_GeneratorBodyDefNode�  r£   r   c                 ó€   — | j                  ||j                  «       | j                  |«       | j                  «        |S r   ©rÒ   rÓ   r”   rß   r¡   s     r   Úvisit_ClassDefNodezEnvTransform.visit_ClassDefNode…  ó3   € Ø×Ñ˜˜tŸz™zÔ*Ø×Ñ˜tÔ$Ø�‰ÔØˆr   c                 ó€   — | j                  ||j                  «       | j                  |«       | j                  «        |S r   rè   r¡   s     r   rÍ   z(EnvTransform.visit_CStructOrUnionDefNode‹  rê   r   c                 ó¾   — |j                   r?| j                  ||j                   «       | j                  |«       | j                  «        |S | j                  |«       |S r   )Ú
expr_scoperÒ   r”   rß   r¡   s     r   Úvisit_ScopedExprNodez!EnvTransform.visit_ScopedExprNode‘  sQ   € Ø�?Š?Ø×Ñ˜T 4§?¡?Ô3Ø×"Ñ" 4Ô(Ø�O‰OÔð ˆð ×"Ñ" 4Ô(Øˆr   c                 óH  — |j                   r|j                  D �cg c]
  }|dk7  sŒ	|‘Œ }}| j                  ||«       | j                  || j	                  «       j
                  «       | j                  |d«       | j                  «        |S | j                  |«       |S c c}w )NÚdefault)rð   )rð   r   r”   rÒ   r×   Úouter_scoperƒ   rß   )r   r4   r:   r�   s       r   Úvisit_CArgDeclNodezEnvTransform.visit_CArgDeclNodeš  s—   € à�<Š<Ø&*×&6Ò&6ÓLÑ&6˜d¸$À)Ó:K’TÐ&6ˆEÐLØ×"Ñ" 4¨Ô/Ø×Ñ˜T 4×#3Ñ#3Ó#5×#AÑ#AÔBØ×Ñ˜t \Ô2Ø�O‰OÔð ˆð ×"Ñ" 4Ô(Øˆùò Ms
   ›
B¦B)r2   r‰   rŠ   r‹   r¦   r×   rÚ   rÜ   rÒ   rß   rÊ   rá   ræ   ré   rÍ   rî   rò   rŽ   r�   s   @r   rÏ   rÏ   _  sI   ø„ ñô&ò
%ò%ò1ò-òòò9òòòòö
r   rÏ   c                   ó4   ‡ — e Zd ZdZˆ fd„Zd„ Zd„ Zd„ Zˆ xZS )ÚNodeRefCleanupMixinas  
    Clean up references to nodes that were replaced.

    NOTE: this implementation assumes that the replacement is
    done first, before hitting any further references during
    normal tree traversal.  This needs to be arranged by calling
    "self.visitchildren()" at a proper place in the transform
    and by ordering the "child_attrs" of nodes appropriately.
    c                 ó,   •— t        ‰| �  |Ž  i | _        y r   )r   r   Ú_replacements)r   Úargsr   s     €r   r   zNodeRefCleanupMixin.__init__±  s   ø€ Ü‰Ñ˜$ÑØˆÕr   c                 óž   — |j                   }|| j                  vr| j                  |«       | j                  j                  ||«      |_         |S r   )Úargrö   rƒ   rA   )r   r4   rù   s      r   Úvisit_CloneNodez#NodeRefCleanupMixin.visit_CloneNodeµ  sF   € Ø�h‰hˆØ�d×(Ñ(Ñ(Ø×Ñ˜sÔ#Ø×%Ñ%×)Ñ)¨#¨sÓ3ˆŒØˆr   c                 ó¾   — |j                   }|�|| j                  vr| j                  |«       |j                   }|�!| j                  j                  ||«      |_         |S r   )Ú
expressionrö   rƒ   rA   )r   r4   Úexprs      r   Úvisit_ResultRefNodez'NodeRefCleanupMixin.visit_ResultRefNode¼  sY   € Ø�‰ˆØˆ<˜4 t×'9Ñ'9Ñ9Ø×Ñ˜tÔ$Ø—?‘?ˆDØÐØ"×0Ñ0×4Ñ4°T¸4Ó@ˆDŒOØˆr   c                 ó$   — || j                   |<   |S r   )rö   )r   r4   Úreplacements      r   ÚreplacezNodeRefCleanupMixin.replaceÅ  s   € Ø#.ˆ×Ñ˜4Ñ ØÐr   )	r2   r‰   rŠ   r‹   r   rú   rþ   r  rŽ   r�   s   @r   rô   rô   §  s   ø„ ñô òòör   rô   Ú<Ú__lt__z<=Ú__le__z==Ú__eq__z!=Ú__ne__z>=Ú__ge__Ú>Ú__gt__Ú+Ú__add__Ú&Ú__and__Ú/Ú__div__z//Ú__floordiv__z<<Ú
__lshift__Ú%Ú__mod__Ú*Ú__mul__Ú|Ú__or__z**Ú__pow__z>>Ú
__rshift__Ú-Ú__sub__Ú__xor__Ú__contains__)Ú^ÚinÚ__not__Ú__inv__Ú__neg__Ú__pos__)ÚnotÚ~r  r
  c                   óX   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zd
„ Zd„ Zd„ Zd„ Zy)ÚMethodDispatcherTransformaÌ  
    Base class for transformations that want to intercept on specific
    builtin functions or methods of builtin types, including special
    methods triggered by Python operators.  Must run after declaration
    analysis when entries were assigned.

    Naming pattern for handler methods is as follows:

    * builtin functions: _handle_(general|simple|any)_function_NAME

    * builtin methods: _handle_(general|simple|any)_method_TYPENAME_METHODNAME
    c                 óP  — | j                  |«       |j                  }|j                  j                  s|S |j                  }t        |t        j                  «      s|S |j                  }|rt        |t        j                  «      s|S |j                  }| j                  ||||«      S r   )r”   rÉ   rb   Úis_pyobjectÚpositional_argsr.   r   Ú	TupleNodeÚkeyword_argsÚDictNoder÷   Ú_dispatch_to_handler)r   r4   rÉ   Ú	arg_tupler,  r÷   s         r   Úvisit_GeneralCallNodez/MethodDispatcherTransform.visit_GeneralCallNode÷  s�   € Ø×Ñ˜tÔ$Ø—=‘=ˆØ�}‰}×(Ò(ØˆKØ×(Ñ(ˆ	Ü˜)¤Y×%8Ñ%8Ô9ØˆKØ×(Ñ(ˆÙ¤
¨<¼×9KÑ9KÔ LàˆKØ�~‰~ˆØ×(Ñ(¨¨x¸¸|ÓLÐLr   c                 ó  — | j                  |«       |j                  }|j                  j                  r5|j                  }t        |t        j                  «      s|S |j                  }n|j                  }| j                  |||d «      S r   )
r”   rÉ   rb   r)  r/  r.   r   r+  r÷   r.  )r   r4   rÉ   r/  r÷   s        r   Úvisit_SimpleCallNodez.MethodDispatcherTransform.visit_SimpleCallNode  sm   € Ø×Ñ˜tÔ$Ø—=‘=ˆØ�=‰=×$Ò$ØŸ™ˆIÜ˜i¬×)<Ñ)<Ô=Ø�Ø—>‘>‰Dà—9‘9ˆDØ×(Ñ(¨¨x¸¸tÓDÐDr   c                 ób   — |j                   r| j                  |«       |S | j                  |«      S r   )Úcascader”   Ú_visit_binop_noder¡   s     r   Úvisit_PrimaryCmpNodez.MethodDispatcherTransform.visit_PrimaryCmpNode  s-   € Ø�<Š<à×"Ñ" 4Ô(ØˆKØ×%Ñ% dÓ+Ð+r   c                 ó$   — | j                  |«      S r   )r5  r¡   s     r   Úvisit_BinopNodez)MethodDispatcherTransform.visit_BinopNode  s   € Ø×%Ñ% dÓ+Ð+r   c           
      óª  — | j                  |«       t        |j                  «      }|rª|j                  |j                  }}|dk(  r||}}n;|dk(  r6t
        j                  | j                  «       j                  j                  v rd}|j                  }|j                  r|j                  s|j                  }nd}| j                  |d d||d ||gd «      }|S )Nr  r  Ú__truediv__ÚobjectF)r”   Ú'find_special_method_for_binary_operatorÚoperatorÚoperand1Úoperand2r
   Údivisionr×   r«   Úfuture_directivesrb   Úis_builtin_typeÚis_exception_typeÚnameÚ_dispatch_to_method_handler)r   r4   Úspecial_method_namer>  r?  Úobj_typeÚ	type_names          r   r5  z+MethodDispatcherTransform._visit_binop_node  sÉ   € Ø×Ñ˜tÔ$äEÀdÇmÁmÓTÐÙØ!%§¡°·±�hˆHØ" nÒ4Ø%-¨x˜(‘Ø$¨	Ò1Ü—?‘? d×&6Ñ&6Ó&8×&@Ñ&@×&RÑ&RÑRØ*7Ð'Ø—}‘}ˆHØ×'Ò'°×0JÒ0JØ$ŸM™M‘	à$�	Ø×3Ñ3Ø# T¨5°)Ø�d˜X xÐ0°$ó8ˆDð ˆr   c           
      ó  — | j                  |«       t        |j                  «      }|rX|j                  }|j                  }|j
                  r|j                  s|j                  }nd}| j                  |d d||d |gd «      }|S )Nr;  F)	r”   Ú&find_special_method_for_unary_operatorr=  Úoperandrb   rB  rC  rD  rE  )r   r4   rF  rK  rG  rH  s         r   Úvisit_UnopNodez(MethodDispatcherTransform.visit_UnopNode1  s~   € Ø×Ñ˜tÔ$ÜDÀTÇ]Á]ÓSÐÙØ—l‘lˆGØ—|‘|ˆHØ×'Ò'°×0JÒ0JØ$ŸM™M‘	à$�	Ø×3Ñ3Ø# T¨5°)Ø�d˜W˜I tó-ˆDð ˆr   c                 ó~   — |j                  «       sy |rdnd}t        | d|› d|› �d «      }|€t        | d|› �d «      }|S )NÚgeneralÚsimpleÚ_handle_r   Ú_handle_any_)Úisasciir$   )r   Ú
match_nameÚ
has_kwargsÚ	call_typeÚhandlers        r   Ú_find_handlerz'MethodDispatcherTransform._find_handlerB  sT   € Ø×!Ñ!Ô#àá!+‘I°ˆ	Ü˜$ (¨9¨+°Q°z°lÐ CÀTÓJˆØˆ?Ü˜d l°:°,Ð$?ÀÓFˆGØˆr   c                 ó¨  — |j                   d   }|j                  }|j                  r0|j                  r"t	        |j                  j
                  «      dkD  rj|S |j                  rZ|j                  j                  rD|j                  j                  r,t	        |j                  j                  j
                  «      dkD  r|S |S | j                  ||||«      S )Nr   r   )	Úcf_stateÚrhsÚis_nameÚentryr/   Úcf_assignmentsÚis_attributerh   r.  )r   r4   rÉ   Úarg_listÚkwargsÚ
assignmentr;   s          r   Ú_delegate_to_assigned_valuez5MethodDispatcherTransform._delegate_to_assigned_valueM  s¤   € Ø×&Ñ& qÑ)ˆ
Ø—‘ˆØ�=Š=Ø—;’;¤# e§k¡k×&@Ñ&@Ó"AÀAÒ"Eà�Ø×Ò E§I¡I×$5Ò$5Ø—9‘9—?’?¤c¨%¯)©)¯/©/×*HÑ*HÓ&IÈAÒ&Mà�àˆKØ×(Ñ(Ø�%˜ 6ó+ð 	+r   c           
      óÜ  — |j                   �r²|j                  s|S |j                  }|j                  xs9 || j                  «       j	                  «       j                  |j                  «      u }|sø|j                  r*|j                  j                  r| j                  ||||«      S |r¾|j                  r²|j                  r¦|j                  j                  j                  r†|j                  j                  j                  sf|j                  j                  |d   j                  u rA| j!                  |j                  d d|j                  j                  j                  ||||¬«      S |S | j#                  d|j                  › �|«      }|€| j%                  ||j                  |||«      S |r |||||«      S  ||||«      S |j&                  �r|j(                  }|j                  j*                  r|j,                  }	nR|j.                  rD|j                  r8|j                  j0                  }|r|j                  s|S |j.                  }	|dd  }n|S |	j                  }
d}|
j                  rj|
j                  s^|
t2        j4                  u r8|	j                   r,|r*|d   j                  j*                  r|	j                  }d }	d}n|
j                  }|dk(  rd}nd	}| j!                  ||	||||||«      S |S )
Nr   T)Úself_argÚis_unbound_methodrH  r4   rÉ   r_  r`  Ú	function_r   FÚstrÚunicoder;  )r[  r\  Ú
is_builtinr×   Úbuiltin_scopeÚlookup_hererD  rY  Ú	is_singlerb  Ú
is_cmethodrÓ   Úparent_typerB  rC  rb   rE  rW  Ú_handle_functionr^  rZ   r)  rh   r   Úas_variabler   Ú	type_type)r   r4   rÉ   r_  r`  r\  ri  Úfunction_handlerÚ	attr_namerd  rG  re  rH  s                r   r.  z.MethodDispatcherTransform._dispatch_to_handler]  s·  € Ø×Óð —>’>Ø�Ø—N‘NˆEà× Ñ ò WØ˜×)Ñ)Ó+×9Ñ9Ó;×GÑGÈÏÉÓVÐVð ñ Ø×$Ò$¨×):Ñ):×)DÒ)Dð  ×;Ñ;Ø˜h¨°&ó:ð :á ×!1Ò!1°e·k²kØŸ™×/Ñ/×?Ò?ÈÏÉ×H_ÑH_×HqÒHqØ—{‘{×.Ñ.°(¸1±+×2BÑ2BÑBà#×?Ñ?Ø!ŸJ™J°ÈØ&+§k¡k×&=Ñ&=×&BÑ&BØ!%°À8ÐTZð  @ó  \ð \ð �Ø#×1Ñ1Ø˜HŸM™M˜?Ð+¨Vó 5ÐàÐ'Ø×,Ñ,¨T°8·=±=À(ÈHÐV\Ó]Ð]ÙÙ'¨¨h¸À&ÓIÐIá'¨¨h¸ÓAÐAØ×"Ó"Ø ×*Ñ*ˆIØ�}‰}×(Ò(Ø#Ÿ<™<‘Ø—’˜xŸ~š~Ø Ÿ™×2Ñ2�Ù E×$4Ò$4Ø�KàŸ9™9�Ø# A B˜<‘à�Ø—}‘}ˆHØ %Ðà×'Ò'°×0JÒ0JØœw×0Ñ0Ñ0°X×5EÒ5EÉ(ÐW_Ð`aÑWb×WgÑWg×WsÒWsð !)§¡�IØ#�HØ(,Ñ%à (§¡�IØ Ò%à )‘Ià$�	Ø×3Ñ3Ø˜8Ð%6¸	Ø�h ¨&ó2ð 2ð ˆKr   c	           	      ó  — | j                  d|› d|› �|«      }	|	€D|t        j                  v s|dv r| j                  d|› �|«      }	|	€| j                  |||||||«      S |�|gt	        |«      z   }|r |	|||||«      }
|
S  |	||||«      }
|
S )NÚmethod_r   )Ú__new__r   Úslot)rW  r   Úspecial_method_namesÚ_handle_methodr#   )r   rs  rd  re  rH  r4   rÉ   r_  r`  Úmethod_handlerr|   s              r   rE  z5MethodDispatcherTransform._dispatch_to_method_handler£  sÝ   € ð ×+Ñ+Ø�i�[  ) Ð-¨vó7ˆàÐ!ØœY×;Ñ;Ñ;Ø Ð$<Ñ<Ø!%×!3Ñ!3Ø˜9˜+Ð&¨ó"0�àÐ%Ø×*Ñ*Ø˜) Y°ØÐ/°ó9ð 9ð ÐØ �z¤D¨£NÑ2ˆHÙÙ#Ø�h Ð*;¸VóEˆFð
 ˆñ $Ø�h Ð*;ó=ˆFàˆr   c                 ó   — |S ©zFallback handlerr§   )r   r4   Úfunction_namerÉ   r_  r`  s         r   ro  z*MethodDispatcherTransform._handle_function»  s   € àˆr   c                 ó   — |S r|  r§   )r   r4   rH  rs  rÉ   r_  re  r`  s           r   ry  z(MethodDispatcherTransform._handle_method¿  s	   € ð ˆr   N)r2   r‰   rŠ   r‹   r0  r2  r6  r8  r5  rL  rW  rb  r.  rE  ro  ry  r§   r   r   r'  r'  é  sG   „ ñòMò
Eò,ò,òò*ò"	ò+ò DòLò0ór   r'  c                   ó.   ‡ — e Zd ZdZˆ fd„Zd„ Zd„ Zˆ xZS )ÚRecursiveNodeReplacerzY
    Recursively replace all occurrences of a node in a subtree by
    another node.
    c                 ó@   •— t         ‰| �  «        ||c| _        | _        y r   )r   r   Ú	orig_nodeÚnew_node)r   r‚  rƒ  r   s      €r   r   zRecursiveNodeReplacer.__init__Ê  s   ø€ Ü‰ÑÔØ(1°8Ð%ˆŒ˜�r   c                 óŒ   — || j                   u r| j                  S |j                  | j                   u r| j                  |_        |S r   )r‚  rƒ  rù   r¡   s     r   rú   z%RecursiveNodeReplacer.visit_CloneNodeÎ  s8   € Ø�4—>‘>Ñ!Ø—=‘=Ð Ø�8‰8�t—~‘~Ñ%Ø—}‘}ˆDŒHØˆr   c                 ó\   — | j                  |«       || j                  u r| j                  S |S r   )r”   r‚  rƒ  r¡   s     r   r´   z RecursiveNodeReplacer.visit_NodeÕ  s+   € Ø×Ñ˜tÔ$Ø�4—>‘>Ñ!Ø—=‘=Ð àˆKr   )r2   r‰   rŠ   r‹   r   rú   r´   rŽ   r�   s   @r   r€  r€  Å  s   ø„ ñô<òör   r€  c                 ó,   — t        ||«      } || «       y r   )r€  )ÚtreeÚold_noderƒ  Ú
replace_ins       r   Úrecursively_replace_noderŠ  Ü  s   € Ü& x°Ó:€JÙˆtÕr   c                   ó(   ‡ — e Zd ZdZˆ fd„Zd„ Zˆ xZS )Ú
NodeFinderz2
    Find out if a node appears in a subtree.
    c                 ó>   •— t         ‰| �  «        || _        d| _        y )NF)r   r   r4   Úfound)r   r4   r   s     €r   r   zNodeFinder.__init__å  s   ø€ Ü‰ÑÔØˆŒ	Øˆ�
r   c                 óp   — | j                   ry || j                  u rd| _         y | j                  |d d «       y )NT)rŽ  r4   r   r¡   s     r   r´   zNodeFinder.visit_Nodeê  s1   € Ø�:Š:ØØ�T—Y‘YÑØˆD�Jà×Ñ  d¨DÕ1r   )r2   r‰   rŠ   r‹   r   r´   rŽ   r�   s   @r   rŒ  rŒ  á  s   ø„ ñôö
2r   rŒ  c                 óR   — t        |«      }|j                  | «       |j                  S r   )rŒ  rq   rŽ  )r‡  r4   Úfinders      r   Útree_containsr’  ò  s"   € Ü˜Ó€FØ
‡L�L�ÔØ�<‰<Ðr   c                 óN   — | \  }}}|€t        |||«       y|t        ||«      |<   y)zkReplaces a node. ptr is of the form used on the access path stack
    (parent, attrname, listidx|None)
    N)r˜   r$   )Úptrr;   rY   rz   Úlistidxs        r   Úreplace_noder–  ù  s2   € ð !$Ñ€FˆH�gØ€Ü�˜ %Õ(à-2Œ�˜Ó! 'Ò*r   c                   óD   — e Zd ZdZdd„Zd„ Zd„ Zdd„Zd„ Zd„ Z	d	„ Z
d
„ Zy)Ú	PrintTreez‡Prints a representation of the tree to standard output.
    Subclass and override repr_of to provide more information
    about nodes. Nc                 óv   — t         j                  | «       d| _        |€|�|xs d|xs df| _        y d | _        y )NrP   r   i   @)r   r   Ú_indentÚ_line_range)r   ÚstartÚends      r   r   zPrintTree.__init__  s>   € Ü×Ñ˜TÔ"ØˆŒØÐ  Ø %¢
¨¨CªL°5Ð9ˆDÕà#ˆDÕr   c                 ó.   — | xj                   dz  c_         y )Nz  ©rš  rÖ   s    r   ÚindentzPrintTree.indent  s   € Ø�Š˜ÑŽr   c                 ó,   — | j                   d d | _         y )NéþÿÿÿrŸ  rÖ   s    r   ÚunindentzPrintTree.unindent  s   € Ø—|‘| C RÐ(ˆ�r   c                 óD   — t        d|z  «       | j                  |«       |S )NzParse tree dump at phase '%s')re   rq   )r   r‡  Úphases      r   r¦   zPrintTree.__call__  s!   € ÜÐ-°Ñ5Ô6Ø�
‰
�4ÔØˆr   c                 óŠ   — | j                  |«       | j                  «        | j                  |«       | j                  «        |S r   )Ú_print_noder   rƒ   r£  r¡   s     r   r´   zPrintTree.visit_Node  s5   € Ø×Ñ˜ÔØ�‰ŒØ×Ñ˜4Ô Ø�‰ŒØˆr   c           	      óÐ  — | j                  |«       | j                  «        |j                  d   }| j                  �(| j                  d   |cxk  r| j                  d   k  r9n n6t	        | j
                  ›dd›d| j                  |j                  «      ›�«       | j                  «        | j                  |j                  «       | j                  «        | j                  «        |S )Nr   r   ú- rù   ú: )
r§  r   r   r›  re   rš  Úrepr_ofrù   rƒ   r£  )r   r4   Úlines      r   rú   zPrintTree.visit_CloneNode&  s§   € Ø×Ñ˜ÔØ�‰ŒØ�x‰x˜‰{ˆØ×ÑÐ# t×'7Ñ'7¸Ñ':¸dÔ'YÀd×FVÑFVÐWXÑFYÕ'YÜ $§,£,²°t·|±|ÀDÇHÁHÔ7MÐNÔOØ�‰ŒØ×Ñ˜4Ÿ8™8Ô$Ø�‰ŒØ�‰ŒØˆr   c           	      óX  — |j                   d   }| j                  �(| j                  d   |cxk  r| j                  d   k  rjn y t        | j                  «      dk(  rd}n| j                  d   \  }}}|�d||fz  }n|}t	        | j
                  ›d|›d| j                  |«      ›�«       y y )Nr   r   z(root)ra   z%s[%d]r©  rª  )r   r›  r/   r   re   rš  r«  )r   r4   r¬  rD  rY   r:   r{   s          r   r§  zPrintTree._print_node2  s§   € Ø�x‰x˜‰{ˆØ×ÑÐ# t×'7Ñ'7¸Ñ':¸dÔ'YÀd×FVÑFVÐWXÑFYÕ'YÜ�4×#Ñ#Ó$¨Ò)Ø‘à$(×$4Ñ$4°RÑ$8Ñ!�˜˜cØ�?Ø# t¨S kÑ1‘Dà�DÜ $§,£,²°d·l±lÀ4Ô6HÐIÕJð (Zr   c           	      ó&  — |€y|j                   j                  }t        |t        j                  «      r+|dt        |j                  «      ›d|j                  ›d�z  }|S t        |t        j                  «      r|d|j                  z  z  }|S t        |t        j                  «      r'|d|j                  «       ›dt        |dd «      ›d�z  }|S t        |t        j                  «      r+|dt        |j                  «      ›d	|j                  ›d�z  }|S t        |t        j                  t        j                   f«      r+|dt        |j                  «      ›d
|j"                  ›d�z  }|S t        |t        j$                  «      r|j                  }|dt        |«      z  z  }|S |j&                  rd|j&                  }|d   j)                  «       }d|v r|j+                  d«      d   }d|v r|j+                  d«      d   }|d|›d|d   ›d|d   ›d�z  }|S )Nz(none)z(type=z, name="z")z(name="%s")z(name="z	", type="rb   z, attribute="z, value=r"   z	(type=%s)r   r  ra   Ú\z(pos=(r   r   r   z)))r   r2   r.   r   ÚNameNoder1   rb   rD  r   ÚDefNodeÚCFuncDefNodeÚdeclared_namer$   ÚAttributeNoderZ   Ú	ConstNodeÚPyConstNoder;   ÚExprNoder   r(   Úsplit)r   r4   r|   Útr   r&   s         r   r«  zPrintTree.repr_of?  sÓ  € Øˆ<Øà—^‘^×,Ñ,ˆFÜ˜$¤	× 2Ñ 2Ô3Ù´d¸4¿9¹9µoÀtÇyÃyÐQÑQ�ð, ˆMô+ ˜D¤%§-¡-Ô0Ø˜/¨D¯I©IÑ5Ñ5�ð( ˆMô' ˜D¤%×"4Ñ"4Ô5ÙØ×&Ñ&Õ(¬'°$¸ÀÕ*EðGñ G�ð$ ˆMô! ˜D¤)×"9Ñ"9Ô:Ù¼4ÀÇ	Á	½?ÈDÏNËNÐ[Ñ[�ð ˆMô ˜D¤9×#6Ñ#6¼	×8MÑ8MÐ"NÔOÙ´4¸¿	¹	µ?ÀDÇJÃJÐOÑO�ð ˆMô ˜D¤)×"4Ñ"4Ô5Ø—I‘I�Ø˜+¬¨Q«Ñ/Ñ/�ð ˆMð —’Ø—h‘h�Ø˜1‘v×-Ñ-Ó/�Ø˜$‘;ØŸ:™: c›?¨2Ñ.�DØ˜4‘<ØŸ:™: dÓ+¨BÑ/�DÙ²°c¸!³f¸cÀ!»fÐEÑE�àˆMr   rˆ   r   )r2   r‰   rŠ   r‹   r   r   r£  r¦   r´   rú   r§  r«  r§   r   r   r˜  r˜    s0   „ ñó$òò)óòò
òKór   r˜  Ú__main__)&rS   rc   rP   r   r   r   r   r   r	   r
   rŒ   ÚdeclareÚtupleÚbytesrg  ÚintÚfloatÚcomplexr0   r   r‘   r©   r¶   rÏ   rô   rA   r<  rJ  r'  r€  rŠ  rŒ  r’  r–  r˜  r2   ÚdoctestÚtestmodr§   r   r   Ú<module>rÃ     sû  ðó Û å Ý Ý Ý Ý Ý Ý ã ð ˆV�^‰^˜E E¨3°°U¸GÐ#DÓE€
÷Fñ FôR=!�{ô =!ô@Ð&ô ô:0˜_ô 0ô@E�?ô E÷P ñ  ðF+Øˆ(ð+àˆ(ð+ð 	ˆ(ð+ð 	ˆ(ð	+ð
 	ˆ(ð+ð ˆ(ð+ð ˆ)ð+ð ˆ)ð+ð ˆ)ð+ð 	ˆ.ð+ð 	ˆ,ð+ð ˆ)ð+ð ˆ)ð+ð ˆ(ð+ð 	ˆ)ð+ð  	ˆ,ð!+ð" ˆ)ð#+ð$ Ø
ò'+÷( �#ð) (ð0 ØØØñ	*÷
 �#ð 'ôY ô YôxÐ,ô ò.ô
2�ô 2ò"ò3ôW�ô Wðr ˆzÒÛØ€G‡O�OÕð r   