§
    øyIf^4  ã                  ó  — d Z ddlmZ ddlZddlZddlZddlZddlmZ ddl	m
Z
 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 er$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!  ej"        e#¦  «        Z$dZ%dZ&dZ'e%e&e'ddgZ(dZ)eee*df                  Z+ G d„ de,¦  «        Z- G d„ de.¦  «        Z/d>d„Z0d?d@d'„Z1 G d(„ d¦  «        Z2dAd+„Z3 G d,„ d-¦  «        Z4 e
d¬.¦  «        dBd2„¦   «         Z5dCd4„Z6dDd8„Z7dEd:„Z8dEd;„Z9dFd<„Z:d=Z;dS )Gz6Apply value substitution (replacement) on tox strings.é    )ÚannotationsN)ÚSectionProxy)Ú	lru_cache)ÚTYPE_CHECKINGÚAnyÚIteratorÚPatternÚSequenceÚUnion)Ú	stringify)Ú	shell_cmd)ÚPath)ÚConfigLoadArgs)Ú	IniLoader)ÚConfig)ÚSetEnv)Ú	ConfigSetú:Ú{Ú}ú[ú]éd   ÚMatchExpressionc                  ó   — e Zd ZdZdS )ÚMatchRecursionErrorz)Could not stabilize on replacement value.N©Ú__name__Ú
__module__Ú__qualname__Ú__doc__© ó    úQ/var/www/piapp/venv/lib/python3.11/site-packages/tox/config/loader/ini/replace.pyr   r   (   s   € € € € € Ø3Ð3Ð3Ð3r#   r   c                  ó   — e Zd ZdZdS )Ú
MatchErrorz1Could not find end terminator in MatchExpression.Nr   r"   r#   r$   r&   r&   ,   s   € € € € € Ø;Ð;Ð;Ð;r#   r&   ÚvalueÚstrÚreturnÚMatchArgc                óN   — t                                | ¦  «        d         d         S )z)Find all replaceable tokens within value.r   )r   Úparse_and_split_to_terminator)r'   s    r$   Úfind_replace_exprr-   0   s    € å×8Ò8¸Ñ?Ô?ÀÔBÀ1ÔEÐEr#   Úconfr   Úloaderr   Úargsr   ÚdepthÚintc                ó®   — |t           k    rd|› d|› d�}t          |¦  «        ‚t          | |||¬¦  «                             t	          |¦  «        ¦  «        S )z?Replace all active tokens within value according to the config.zCould not expand z after recursing z frames)Ú	conf_argsr1   )ÚMAX_REPLACE_DEPTHr   ÚReplacerÚjoinr-   )r.   r/   r'   r0   r1   Úmsgs         r$   Úreplacer9   5   sc   € àÕ Ò Ð ØH %ÐHÐH¸%ÐHÐHÐHˆÝ! #Ñ&Ô&Ð&Ý�D˜&¨D¸Ð>Ñ>Ô>×CÒCÕDUÐV[ÑD\ÔD\Ñ]Ô]Ð]r#   c                  ób   — e Zd ZdZddd	„Zdd„Zdd„Zedd„¦   «         Ze	 	 ddd„¦   «         Z	dS ) r   z8An expression that is handled specially by the Replacer.NÚexprúSequence[MatchArg]Úterm_posú
int | Noner)   ÚNonec                ó"   — || _         || _        d S ©N©r;   r=   )Úselfr;   r=   s      r$   Ú__init__zMatchExpression.__init__@   s   € ØˆŒ	Ø ˆŒˆˆr#   r(   c                ó(   — d| j         ›d| j        ›d�S )NzMatchExpression(expr=z, term_pos=ú)rB   )rC   s    r$   Ú__repr__zMatchExpression.__repr__D   s   € ØQ t¤yÐQÐQ¸t¼}ÐQÐQÐQÐQr#   ÚotherÚobjectÚboolc                ój   — t          |t          | ¦  «        ¦  «        r| j        |j        k    S t          S rA   )Ú
isinstanceÚtyper;   ÚNotImplemented)rC   rH   s     r$   Ú__eq__zMatchExpression.__eq__G   s/   € Ý�e�T $™ZœZÑ(Ô(ð 	+Ø”9 ¤
Ò*Ð*ÝÐr#   r'   úMatchExpression | Nonec                ó,  — |                      d¦  «        rt          dggd¬¦  «        S |                      t          ¦  «        sdS 	 |                      |dd…         t          t
          ¬¦  «        \  }}t          ||¬¦  «        S # t          $ r Y nw xY wdS )z-Process a curly brace replacement expression.z[]Úposargsé   rB   N)Ú
terminatorÚsplit)Ú
startswithr   ÚREPLACE_STARTr,   ÚREPLACE_ENDÚARG_DELIMITERr&   )Úclsr'   Úrec_exprr=   s       r$   Ú_next_replace_expressionz(MatchExpression._next_replace_expressionL   sÂ   € ð ×Ò˜DÑ!Ô!ð 	Cå"¨)¨¨ÀÐBÑBÔBÐBØ×Ò¥Ñ.Ô.ð 	Ø�4ð	Eà!$×!BÒ!BØ�a�b�b”	Ý&Ý#ð "Cñ "ô "ÑˆH�hõ #¨¸8ÐDÑDÔDÐDøõ	 ð 	ð 	ð 	àˆDð	øøøð
 ˆts   Á-B Â
BÂBÚ rT   rU   ú
str | Noneútuple[Sequence[MatchArg], int]c                ó”  — g }g }d}|t          |¦  «        k     �rtt          |¦  «        |dz   k    rw||         dk    rk||dz            t          v r$|                     ||dz            ¦  «         |dz  }Œl||dz            dk    r&|                     |||dz   …         ¦  «         |dz  }Œ¡||d…         }|r(|                     |¦  «        r|t          |¦  «        z  }nË|r@|                     |¦  «        r+|                     |¦  «         g }|t          |¦  «        z  }�Œ|                      |¦  «        }|�&||j        pddz   z  }|                     |¦  «         �ŒT|                     ||         ¦  «         |dz  }|t          |¦  «        k     �°t|r|›d|›�}	t          |	¦  «        ‚|                     |¦  «         d„ |D ¦   «         |fS )aG  
        Tokenize `value` to up `terminator` character.

        If `split` is given, multiple arguments will be returned.

        Returns list of arguments (list of str or MatchExpression) and final character position examined in value.

        This function recursively calls itself via `_next_replace_expression`.
        r   rS   ú\é   Nz remains unmatched in c                ó,   — g | ]}t          |¦  «        ‘ŒS r"   )Ú_flatten_string_fragments)Ú.0Úas     r$   ú
<listcomp>zAMatchExpression.parse_and_split_to_terminator.<locals>.<listcomp>š   s!   € Ð;Ð;Ð;°Õ)¨!Ñ,Ô,Ð;Ð;Ð;r#   )ÚlenÚBACKSLASH_ESCAPE_CHARSÚappendrV   r\   r=   r&   )
rZ   r'   rT   rU   r0   Úlast_argÚposÚfragmentr;   r8   s
             r$   r,   z-MatchExpression.parse_and_split_to_terminatorb   s  € ð  ˆØ02ˆØˆà•C˜‘J”JÒÑÝ�5‰zŒz˜C !™GÒ#Ð#¨¨c¬
°dÒ(:Ð(:Ø˜˜q™”>Õ%;Ð;Ð;à—O’O E¨#°©'¤NÑ3Ô3Ð3Ø˜1‘H�CØØ˜˜q™”> TÒ)Ð)ð —O’O E¨#°°a±¨-Ô$8Ñ9Ô9Ð9Ø˜1‘H�CØØ˜S˜T˜T”{ˆHØð ˜h×1Ò1°*Ñ=Ô=ð Ø•s˜:‘”Ñ&�ØØð ˜×,Ò,¨UÑ3Ô3ð à—’˜HÑ%Ô%Ð%Ø�Ø•s˜5‘z”zÑ!�ÙØ×/Ò/°Ñ9Ô9ˆDØÐØ˜œÐ*¨¨aÑ/Ñ/�Ø—’ Ñ%Ô%Ð%Ùà�OŠO˜E #œJÑ'Ô'Ð'Ø�1‰HˆCð= •C˜‘J”JÒÑð@ ð &Ø#ÐFÐF¸UÐFÐF�Ý  ‘o”oÐ%Ø�Š�HÑÔÐØ;Ð;°dÐ;Ñ;Ô;¸SÐ@Ð@r#   rA   )r;   r<   r=   r>   r)   r?   )r)   r(   )rH   rI   r)   rJ   )r'   r(   r)   rP   )r]   N)r'   r(   rT   r(   rU   r^   r)   r_   )
r   r   r    r!   rD   rG   rO   Úclassmethodr\   r,   r"   r#   r$   r   r   =   s³   € € € € € ØBÐBð!ð !ð !ð !ð !ðRð Rð Rð Rðð ð ð ð
 ðð ð ñ „[ðð* ð Ø ð	7Að 7Að 7Að 7Añ „[ð7Að 7Að 7Ar#   Úseq_of_str_or_otherúSequence[str | Any]c                óD  — g }g }| D ]n}t          |t          ¦  «        r|                     |¦  «         Œ-|r*|                     d                     |¦  «        ¦  «         g }|                     |¦  «         Œo|r(|                     d                     |¦  «        ¦  «         |S )zcJoin runs of contiguous str values in a sequence; nny non-str items in the sequence are left as-is.r]   )rL   r(   rj   r7   )ro   ÚresultÚlast_strÚobjs       r$   rd   rd   �   s­   € à€FØ€HØ"ð ð ˆÝ�c�3ÑÔð 	Ø�OŠO˜CÑ Ô Ð Ð àð Ø—’˜bŸgšg hÑ/Ô/Ñ0Ô0Ð0Ø�Ø�MŠM˜#ÑÔÐÐØð )Ø�Š�b—g’g˜hÑ'Ô'Ñ(Ô(Ð(Ø€Mr#   c                  ó4   — e Zd ZdZddd„Zdd„Zdd„Zdd„ZdS )r6   zARecursively expand MatchExpression against the config and loader.r   r.   r   r/   r   r4   r   r1   r2   r)   r?   c                ó>   — || _         || _        || _        || _        d S rA   )r.   r/   r4   r1   )rC   r.   r/   r4   r1   s        r$   rD   zReplacer.__init__±   s"   € ØˆŒ	ØˆŒØ"ˆŒØˆŒ
ˆ
ˆ
r#   r'   r*   úSequence[str]c                ó    ‡ — ˆ fd„|D ¦   «         S )Nc                ó‚   •— g | ];}t          |t          ¦  «        r‰                     |¦  «        nt          |¦  «        ‘Œ<S r"   )rL   r   Ú_replace_matchr(   )re   ÚmerC   s     €r$   rg   z%Replacer.__call__.<locals>.<listcomp>¸   sF   ø€ ÐhÐhÐhÐ\^­:°b½/Ñ+JÔ+JÐW�×#Ò# BÑ'Ô'Ð'ÕPSÐTVÑPWÔPWÐhÐhÐhr#   r"   ©rC   r'   s   ` r$   Ú__call__zReplacer.__call__·   s   ø€ ØhÐhÐhÐhÐbgÐhÑhÔhÐhr#   r(   c                ó>   — d                       | |¦  «        ¦  «        S )Nr]   ©r7   r|   s     r$   r7   zReplacer.joinº   s   € Ø�wŠw�t�t˜E‘{”{Ñ#Ô#Ð#r#   r   c                ó>  ‡ — ‰ j                              ¦   «         }ˆ fd„|j        D ¦   «         }|^}}|dk    rt          j        }nœ|s|dgk    rt          j        }n†|dk    rt          ‰ j        ||¦  «        }ni|dk    rt          |¦  «        }nS|dk    rt          ‰ j        ||¦  «        }n6t                               |¦  «        }t          ‰ j        ‰ j        ||¦  «        }|��t          d„ t          |¦  «        D ¦   «         ¦  «        }|rf	 t!          ‰ j        ‰ j        ||‰ j        dz   ¦  «        S # t$          $ r3}	t&                               t+          |	¦  «        ¦  «         |cY d }	~	S d }	~	ww xY w|S t,          › d	t.          › �t                               |¦  «        z  S )
Nc                ó:   •— g | ]}‰                      |¦  «        ‘ŒS r"   r   )re   ÚargrC   s     €r$   rg   z+Replacer._replace_match.<locals>.<listcomp>À   s#   ø€ Ð?Ð?Ð?¨S˜$Ÿ)š) C™.œ.Ð?Ð?Ð?r#   ú/r]   ÚenvÚttyrR   c              3  ó@   K  — | ]}t          |t          ¦  «        V — Œd S rA   )rL   r   )re   Úms     r$   ú	<genexpr>z*Replacer._replace_match.<locals>.<genexpr>Ð   s,   è è € Ð!kÐ!kÀQ¥*¨QµÑ"@Ô"@Ð!kÐ!kÐ!kÐ!kÐ!kÐ!kr#   rS   z%s)r4   Úcopyr;   ÚosÚsepÚpathsepÚreplace_envr.   Úreplace_ttyÚreplace_pos_argsrY   r7   Úreplace_referencer/   Úanyr-   r9   r1   r   ÚLOGGERÚwarningr(   rW   rX   )
rC   r'   r4   Úflattened_argsÚof_typer0   Úreplace_valueÚ	arg_valueÚneeds_expansionÚerrs
   `         r$   rz   zReplacer._replace_match½   sÇ  ø€ à”N×'Ò'Ñ)Ô)ˆ	Ø?Ð?Ð?Ð?°E´JÐ?Ñ?Ô?ˆØ'ˆˆ�$Ø�cŠ>ˆ>Ý(*¬ˆMˆMØð 
	\˜T b Tš\˜\ÝœJˆMˆMØ˜ÒÐÝ'¨¬	°4¸ÑCÔCˆMˆMØ˜ÒÐÝ'¨Ñ-Ô-ˆMˆMØ˜	Ò!Ð!Ý,¨T¬Y¸¸iÑHÔHˆMˆMå%×*Ò*¨>Ñ:Ô:ˆIÝ-¨d¬i¸¼ÀiÐQZÑ[Ô[ˆMØÐ$Ý!Ð!kÐ!kÕJ[Ð\iÑJjÔJjÐ!kÑ!kÔ!kÑkÔkˆOØð )ð)Ý" 4¤9¨d¬k¸=È)ÐUYÔU_ÐbcÑUcÑdÔdÐdøÝ*ð )ð )ð )Ý—N’N¥3 s¡8¤8Ñ,Ô,Ð,Ø(Ð(Ð(Ð(Ð(Ð(Ð(øøøøð)øøøð !Ð õ
  Ð0Ð0¥;Ð0Ð0µ=×3EÒ3EÀnÑ3UÔ3UÑUÐUs   Ä$D1 Ä1
E.Ä;(E)Å#E.Å)E.N©r   )
r.   r   r/   r   r4   r   r1   r2   r)   r?   )r'   r*   r)   rw   )r'   r*   r)   r(   )r'   r   r)   r(   )r   r   r    r!   rD   r}   r7   rz   r"   r#   r$   r6   r6   ®   sy   € € € € € ØKÐKðð ð ð ð ðið ið ið ið$ð $ð $ð $ðVð Vð Vð Vð Vð Vr#   r6   )Úmaxsizer„   r^   úPattern[str]c                óp   — t          j        dt          j        | pd¦  «        › d�t           j        ¦  «        S )Nz
    (\[(?P<full_env>z.*z‰(:(?P<env>[^]]+))?|(?P<section>[-\w]+))])? # env/section
    (?P<key>[-a-zA-Z0-9_]+) # key
    (:(?P<default>.*))? # default value
    $
)ÚreÚcompileÚescapeÚVERBOSE)r„   s    r$   Ú_replace_refr¢   ß   sB   € åŒ:ð	Ý”Y˜s˜{ dÑ+Ô+ð	ð 	ð 	õ 	Œ
ñô ð r#   r4   c                óð  — t          |j        j        p|j        j        ¦  «        }|                     |¦  «        }|�r8|                     ¦   «         }|d         }|d         €|d         r|d         |d<   d }	 t          |d         |d         |j        | |¦  «        D ]™}		 t          |	t          ¦  «        r$| 
                    | |j        |	|         ¦  «        c S |	                     ||j        ¦  «        }t          |¦  «        \  }
}|
                     dd¦  «        c S # t          $ r}|}Y d }~Œ’d }~ww xY wn# t           $ r}|}Y d }~nd }~ww xY w|�$t          |t          ¦  «        r|d         }|�|S n|‚d S )NÚkeyÚsectionÚfull_envr„   ú#z\#Údefault)r¢   r¥   ÚprefixÚnameÚmatchÚ	groupdictÚ_config_value_sourcesÚenv_namerL   r   Úprocess_rawÚloadÚchainr   r9   ÚKeyErrorÚ	Exception)r.   r/   r'   r4   Úpatternr«   Úsettingsr¤   Ú	exceptionÚsrcÚas_strÚ_Úexcr¨   s                 r$   r�   r�   ì   sÐ  € õ ˜6œ>Ô0ÐG°F´NÔ4GÑHÔH€GØ�MŠM˜%Ñ Ô €EØñ  Ø—?’?Ñ$Ô$ˆà�uŒoˆØ�IÔÐ&¨8°JÔ+?Ð&Ø"*¨:Ô"6ˆH�YÑà&*ˆ	ð	Ý,¨X°e¬_¸hÀyÔ>QÐS\ÔSeÐgkÐmsÑtÔtð 	6ð 	6�ð6Ý! #¥|Ñ4Ô4ð VØ%×1Ò1°$¸	Ô8JÈCÐPSÌHÑUÔUÐUÐUÐUØŸHšH S¨)¬/Ñ:Ô:�Eõ !*¨%Ñ 0Ô 0‘I�F˜AØ!Ÿ>š>¨#¨uÑ5Ô5Ð5Ð5Ð5øõ	  ð $ð $ð $Ø #�I�I�I�I�I�Iøøøøð$øøøð	6øõ ð 	ð 	ð 	ØˆIˆIˆIˆIˆIˆIøøøøð	øøøàÐ Ý˜)¥XÑ.Ô.ð  Ø" 9Ô-�ØÐ&Ø"�Nð 'ð  �Øˆ4sN   Á8&D7 Â6DÃD7 ÃDÃ3)D7 Ä
D3Ä'D.Ä)D7 Ä.D3Ä3D7 Ä7
EÅEÅEr¥   Úcurrent_envú"Iterator[SectionProxy | ConfigSet]c              #  óü   K  — | �| |v r|                      | ¦  «        V — |€$|j        V — |�|                      |¦  «        V — d S ||j        j        k    r	|j        V — |                     |¦  «        }|�|V — d S d S rA   )Úget_envÚcoreÚcore_sectionrª   Úget_section)r„   r¥   r»   r.   r/   r'   s         r$   r­   r­     s®   è è € ð €˜3 $˜;˜;Ø�lŠl˜3ÑÔÐÐÐà€ð ŒiˆˆˆàÐ"Ø—,’,˜{Ñ+Ô+Ð+Ð+Ð+Øˆð �&Ô%Ô*Ò*Ð*ØŒiˆˆˆØ×Ò˜wÑ'Ô'€EØÐØˆˆˆˆˆð Ðr#   ú	list[str]c                ó  — d }|j         �<|                      |j         ¦  «        }	 |d         r|d         }n# t          $ r Y nw xY w|                      |¦  «        }|€t                               |¦  «        nt          |¦  «        S )NÚargs_are_pathsÚ
change_dir)r®   r¾   r²   Úpos_argsrY   r7   r   )r.   r0   r4   Úto_pathÚenv_confrÆ   s         r$   r�   r�   1  s™   € Ø€GØÔÐ%Ø—<’< 	Ô 2Ñ3Ô3ˆð	ØÐ(Ô)ð 1Ø" <Ô0�øøÝð 	ð 	ð 	ØˆDð	øøøà�}Š}˜WÑ%Ô%€Hà'/Ð'7�=×Ò˜dÑ#Ô#Ð#½YÀxÑ=PÔ=PÐPs   ¥6 ¶
AÁAc                ó   — |r|d         sd}t          |¦  «        ‚|d         }d|› �}|j        �É||j        vrW|j                             |¦  «         |                      |j        ¦  «        }|d         }||v r|                     ||¦  «        S ni|j        d         |k    rXd                     d„ |j        |j                             |¦  «        d …         D ¦   «         ¦  «        }d|› �}t          |¦  «        ‚|t          j
        v rt          j
        |         S t          |¦  «        d	k    rd
n!t                               |d	d …         ¦  «        S )Nr   z3No variable name was supplied in {env} substitutionzenv:Úset_envéÿÿÿÿz, c              3  ó*   K  — | ]}|d d…         V — ŒdS )é   Nr"   )re   Úis     r$   rˆ   zreplace_env.<locals>.<genexpr>N  s*   è è € Ð bÐ b¨1  1 2 2¤Ð bÐ bÐ bÐ bÐ bÐ br#   zcircular chain between set env rS   r]   )r&   r®   r±   rj   r¾   r°   r7   Úindexr   rŠ   Úenvironrh   rY   )	r.   r0   r4   r8   r¤   Únew_keyrÈ   rÊ   Úcirculars	            r$   r�   r�   ?  sX  € Øð �t˜A”wð ØCˆÝ˜‰oŒoÐØ
ˆqŒ'€CØ�Sˆlˆl€GàÔÐ%Ø˜)œ/Ð)Ð)ØŒO×"Ò" 7Ñ+Ô+Ð+Ø—|’| IÔ$6Ñ7Ô7ˆHØ& yÔ1ˆGØ�gˆ~ˆ~Ø—|’| C¨Ñ3Ô3Ð3ð àŒ_˜RÔ  GÒ+Ð+Ø—y’yÐ bÐ b°	´À	Ä×@UÒ@UÐV]Ñ@^Ô@^Ð@`Ð@`Ô0aÐ bÑ bÔ bÑbÔbˆHØ>°HÐ>Ð>ˆCÝ% cÑ*Ô*Ð*à
�bŒjÐÐÝŒz˜#ŒÐå�T‘”˜a’�ˆ2ˆ2¥]×%7Ò%7¸¸Q¸R¸R¼Ñ%AÔ%AÐAr#   c                ó²   — t           j                             ¦   «         rt          | ¦  «        dk    r| d         ndnt          | ¦  «        dk    r| d         ndS )Nr   r]   rS   )ÚsysÚstdoutÚisattyrh   )r0   s    r$   rŽ   rŽ   X  sS   € Ý14´×1BÒ1BÑ1DÔ1DÐj•s˜4‘y”y 1’}�}ˆD�ŒGˆG¨"¨"ÕUXÐY]ÑU^ÔU^ÐabÒUbÐUbÈ$ÈqÌ'È'ÐhjÐjr#   )r*   r&   r   r-   r9   )r'   r(   r)   r*   rš   )r.   r   r/   r   r'   r(   r0   r   r1   r2   r)   r(   )ro   rp   r)   rp   )r„   r^   r)   rœ   )
r.   r   r/   r   r'   r(   r4   r   r)   r^   )r„   r^   r¥   r^   r»   r^   r.   r   r/   r   r)   r¼   )r.   r   r0   rÂ   r4   r   r)   r(   )r0   rÂ   r)   r(   )<r!   Ú
__future__r   ÚloggingrŠ   rž   rÔ   Úconfigparserr   Ú	functoolsr   Útypingr   r   r   r	   r
   r   Útox.config.loader.stringifyr   Útox.execute.requestr   Úpathlibr   Útox.config.loader.apir   Útox.config.loader.inir   Útox.config.mainr   Útox.config.set_envr   Útox.config.setsr   Ú	getLoggerr   r’   rY   rW   rX   ri   r5   r(   r*   Ú
ValueErrorr   r³   r&   r-   r9   r   rd   r6   r¢   r�   r­   r�   r�   rŽ   Ú__all__r"   r#   r$   ú<module>rç      s2  ðØ <Ð <à "Ð "Ð "Ð "Ð "Ð "à €€€Ø 	€	€	€	Ø 	€	€	€	Ø 
€
€
€
Ø %Ð %Ð %Ð %Ð %Ð %Ø Ð Ð Ð Ð Ð Ø IÐ IÐ IÐ IÐ IÐ IÐ IÐ IÐ IÐ IÐ IÐ IÐ IÐ IÐ IÐ Ià 1Ð 1Ð 1Ð 1Ð 1Ð 1Ø )Ð )Ð )Ð )Ð )Ð )àð *ØÐÐÐÐÐà4Ð4Ð4Ð4Ð4Ð4Ø/Ð/Ð/Ð/Ð/Ð/Ø&Ð&Ð&Ð&Ð&Ð&Ø)Ð)Ð)Ð)Ð)Ð)Ø)Ð)Ð)Ð)Ð)Ð)ð 
ˆÔ	˜8Ñ	$Ô	$€ð €Ø€Ø€Ø'¨¸ÀSÈ#ÐNÐ ØÐ ð �E˜#Ð0Ð0Ô1Ô2€ð4ð 4ð 4ð 4ð 4˜*ñ 4ô 4ð 4ð<ð <ð <ð <ð <�ñ <ô <ð <ðFð Fð Fð Fð
^ð ^ð ^ð ^ð ^ð]Að ]Að ]Að ]Að ]Añ ]Aô ]Að ]Að@ð ð ð ð".Vð .Vð .Vð .Vð .Vñ .Vô .Vð .Vðb €�4ÐÑÔð	ð 	ð 	ñ Ôð	ð&ð &ð &ð &ðRð ð ð ð8Qð Qð Qð QðBð Bð Bð Bð2kð kð kð kð€€€r#   