§
    ~ŠtjY3  ã                  óä  — d Z ddlmZ ddlmZ ddlmZmZmZm	Z	 ddl
mZ ddlmZmZmZ  G d„ ded	¬
¦  «        Z G d„ ded	¬
¦  «        Z G d„ de¦  «        Z G d„ ded	¬
¦  «        Z G d„ de¦  «        Z G d„ de¦  «        Z G d„ ded	¬
¦  «        Z G d„ de¦  «        Z G d„ de¦  «        Z G d„ de¦  «        Z G d„ ded	¬
¦  «        Z G d„ d e¦  «        Ze	eeef         Z G d!„ d"e¦  «        Z G d#„ d$e¦  «        Z G d%„ d&ed	¬
¦  «        ZeZ  G d'„ d(e¦  «        Z!dad-„Z"dbd/„Z#dcd3„Z$ddd5„Z%ded7„Z&d8d9d:d	d9d9d;œdfdH„Z'd9d9dIœdgdM„Z(d9d9d9dNœdhdO„Z)didS„Z*h dT£Z+djdV„Z,dkdY„Z-dZd[œdld\„Z.dmd`„Z/d9S )nz>Helpers and type definitions for sandbox mount configurations.é    )Úannotations)ÚSequence)ÚAnyÚLiteralÚ	TypedDictÚUnion)Úurlsplit)ÚSandboxProxyConfigÚSandboxProxyRuleÚSandboxProxySecretc                  ó(   — e Zd ZU dZded<   ded<   dS )ÚMountCacheConfigzBOptional per-mount cache configuration supported by bucket mounts.ÚintÚmax_size_bytesÚwriteback_secondsN©Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú__annotations__© ó    úW/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/langsmith/sandbox/_mounts.pyr   r      s0   € € € € € € ØLÐLàÐÐÑØÐÐÑÐÐr   r   F)Útotalc                  ó(   — e Zd ZU dZded<   ded<   dS )ÚBucketMountSpecBasez8Optional fields applied per bucket-backed sandbox mount.ÚboolÚ	read_onlyr   ÚcacheNr   r   r   r   r   r      s-   € € € € € € ØBÐBà€O€O�OØÐÐÑÐÐr   r   c                  ó2   — e Zd ZU dZded<   ded<   ded<   dS )ÚS3MountConfigRequiredz.Required S3 configuration for a sandbox mount.ÚstrÚendpoint_urlÚregionÚbucketNr   r   r   r   r"   r"      s4   € € € € € € Ø8Ð8àÐÐÑØ€K€K�KØ€K€K�K€K€Kr   r"   c                  ó(   — e Zd ZU dZded<   ded<   dS )ÚS3MountConfigz%S3 configuration for a sandbox mount.r#   Úprefixr   Ú
path_styleNr   r   r   r   r(   r(   &   s-   € € € € € € Ø/Ð/à€K€K�KØÐÐÑÐÐr   r(   c                  ó<   — e Zd ZU dZded<   ded<   ded<   ded<   d	S )
ÚS3MountSpecz&S3-backed sandbox mount specification.r#   ÚidzLiteral['s3']ÚtypeÚ
mount_pathr(   Ús3Nr   r   r   r   r,   r,   -   sB   € € € € € € Ø0Ð0à€G€G�GØÐÐÑØ€O€O�OØÐÐÑÐÐr   r,   c                  ó   — e Zd ZU dZded<   dS )ÚGCSMountConfigRequiredz/Required GCS configuration for a sandbox mount.r#   r&   Nr   r   r   r   r2   r2   6   s   € € € € € € Ø9Ð9à€K€K�K€K€Kr   r2   c                  ó   — e Zd ZU dZded<   dS )ÚGCSMountConfigz&GCS configuration for a sandbox mount.r#   r)   Nr   r   r   r   r4   r4   <   s   € € € € € € Ø0Ð0à€K€K�K€K€Kr   r4   c                  ó<   — e Zd ZU dZded<   ded<   ded<   ded<   d	S )
ÚGCSMountSpecz'GCS-backed sandbox mount specification.r#   r-   zLiteral['gcs']r.   r/   r4   ÚgcsNr   r   r   r   r6   r6   B   óB   € € € € € € Ø1Ð1à€G€G�GØÐÐÑØ€O€O�OØÐÐÑÐÐr   r6   c                  ó(   — e Zd ZU dZded<   ded<   dS )ÚGitMountRefSpecz%Git ref selected for a sandbox mount.zLiteral['branch', 'tag']r.   r#   ÚnameNr   r   r   r   r:   r:   K   s+   € € € € € € Ø/Ð/à"Ð"Ð"Ñ"Ø€I€I�I€I€Ir   r:   c                  ó   — e Zd ZU dZded<   dS )ÚGitMountConfigRequiredz/Required Git configuration for a sandbox mount.r#   Ú
remote_urlNr   r   r   r   r=   r=   R   s   € € € € € € Ø9Ð9à€O€O�O€O€Or   r=   c                  ó(   — e Zd ZU dZded<   ded<   dS )ÚGitMountConfigz&Git configuration for a sandbox mount.r:   Úrefr   Úrefresh_interval_secondsNr   r   r   r   r@   r@   X   s0   € € € € € € Ø0Ð0àÐÐÑØ!Ð!Ð!Ñ!Ð!Ð!r   r@   c                  ó<   — e Zd ZU dZded<   ded<   ded<   ded<   d	S )
ÚGitMountSpecz'Git-backed sandbox mount specification.r#   r-   zLiteral['git']r.   r/   r@   ÚgitNr   r   r   r   rD   rD   _   r8   r   rD   c                  ó(   — e Zd ZU dZded<   ded<   dS )ÚAWSMountAuthConfigz>AWS credentials used by the backend to authenticate S3 mounts.r   Úaccess_key_idÚsecret_access_keyNr   r   r   r   rG   rG   k   s0   € € € € € € ØHÐHà%Ð%Ð%Ñ%Ø)Ð)Ð)Ñ)Ð)Ð)r   rG   c                  ó   — e Zd ZU dZded<   dS )ÚGCPMountAuthConfigz?GCP credentials used by the backend to authenticate GCS mounts.r   Úservice_account_jsonNr   r   r   r   rK   rK   r   s$   € € € € € € ØIÐIà,Ð,Ð,Ñ,Ð,Ð,r   rK   c                  ó(   — e Zd ZU dZded<   ded<   dS )ÚSandboxMountAuthConfigz(Provider auth blocks for sandbox mounts.rG   ÚawsrK   ÚgcpNr   r   r   r   rN   rN   x   s0   € € € € € € Ø2Ð2àÐÐÑØÐÐÑÐÐr   rN   c                  ó(   — e Zd ZU dZded<   ded<   dS )ÚSandboxMountConfigz,Public mount config sent to the sandbox API.rN   Úauthúlist[SandboxMount]ÚmountsNr   r   r   r   rR   rR   ‚   s0   € € € € € € Ø6Ð6à Ð Ð Ñ ØÐÐÑÐÐr   rR   Úvaluer#   ÚfieldÚreturnc                ó    — t          | t          ¦  «        r|                      ¦   «         st          |› d�¦  «        ‚|                      ¦   «         S )Nz must be a non-empty string)Ú
isinstancer#   ÚstripÚ
ValueError)rV   rW   s     r   Ú_require_non_empty_stringr]   ‰   sJ   € Ý�e�SÑ!Ô!ð @¨¯ª©¬ð @Ý˜EÐ>Ð>Ð>Ñ?Ô?Ð?Ø�;Š;‰=Œ=Ðr   r    c                óF   — i }d| v r| d         |d<   d| v r| d         |d<   |S )Nr   r   r   )r    Úcopieds     r   Ú_copy_cache_configr`   �   sD   € Ø!€FØ˜5Ð Ð Ø#(Ð)9Ô#:ˆÐÑ Ø˜eÐ#Ð#Ø&+Ð,?Ô&@ˆÐ"Ñ#Ø€Mr   Úsecretr   r   c                óP  — t          | t          ¦  «        st          |› d�¦  «        ‚|                      d¦  «        }|dvrt          |› d�¦  «        ‚|                      d¦  «        }t          |t          ¦  «        r|                     ¦   «         st          |› d�¦  «        ‚||dœS )Nz must be a sandbox secretr.   >   ÚopaqueÚworkspace_secretz$ must use workspace_secret or opaquerV   z!.value must be a non-empty string)r.   rV   )rZ   Údictr\   Úgetr#   r[   )ra   rW   Úsecret_typerV   s       r   Ú_copy_mount_secretrh   ˜   s¸   € Ý�f�dÑ#Ô#ð >Ý˜EÐ<Ð<Ð<Ñ=Ô=Ð=Ø—*’*˜VÑ$Ô$€KØÐ8Ð8Ð8Ý˜EÐGÐGÐGÑHÔHÐHØ�JŠJ�wÑÔ€EÝ�e�SÑ!Ô!ð F¨¯ª©¬ð FÝ˜EÐDÐDÐDÑEÔEÐEØ¨%Ð0Ð0Ð0r   r>   c                óð  — t          | t          ¦  «        r| dk    rt          d¦  «        ‚| |                      ¦   «         k    st	          d„ | D ¦   «         ¦  «        rt          d¦  «        ‚t          | ¦  «        }|j        dk    s|j        st          d¦  «        ‚|j        s|j	        rt          d¦  «        ‚|j
        r|j
        dk    rt          d	¦  «        ‚|j        s|j        rt          d
¦  «        ‚| S )NÚ z%remote_url must be a non-empty stringc              3  óJ   K  — | ]}|                      ¦   «         p|d k    V — ŒdS )ú N)Úisspace)Ú.0Úchars     r   ú	<genexpr>z*_require_git_remote_url.<locals>.<genexpr>§   sD   è è € ð /ð /Ø-1ˆ�Š‰ŒÐ(˜$ &š.ð/ð /ð /ð /ð /ð /r   z3remote_url must not contain whitespace or NUL bytesÚhttpsz(remote_url must be an absolute HTTPS URLz0remote_url must not include embedded credentialsú/z)remote_url must include a repository pathz-remote_url must not include query or fragment)rZ   r#   r\   r[   Úanyr	   ÚschemeÚnetlocÚusernameÚpasswordÚpathÚqueryÚfragment)r>   Úparseds     r   Ú_require_git_remote_urlr|   ¤   s%  € Ý�j¥#Ñ&Ô&ð B¨*¸Ò*:Ð*:ÝÐ@ÑAÔAÐAØ�Z×%Ò%Ñ'Ô'Ò'Ð'­3ð /ð /Ø5?ð/ñ /ô /ñ ,ô ,Ð'õ ÐNÑOÔOÐOå�jÑ!Ô!€FØ„}˜ÒÐ v¤}ÐÝÐCÑDÔDÐDØ„ð M˜&œ/ð MÝÐKÑLÔLÐLØŒ;ð F˜&œ+¨Ò,Ð,ÝÐDÑEÔEÐEØ„|ð J�v”ð JÝÐHÑIÔIÐIØÐr   rA   c                óè   — t          | t          ¦  «        st          d¦  «        ‚|                      d¦  «        }|dvrt          d¦  «        ‚|t	          |                      dd¦  «        d¦  «        dœS )	Nzref must be a dictionaryr.   >   ÚtagÚbranchzref.type must be branch or tagr;   rj   zref.name)r.   r;   )rZ   re   r\   rf   r]   )rA   Úref_types     r   Ú_copy_git_refr�   ¸   sz   € Ý�c�4Ñ Ô ð 5ÝÐ3Ñ4Ô4Ð4Ø�wŠw�v‰Œ€HØÐ(Ð(Ð(ÝÐ9Ñ:Ô:Ð:àÝ)¨#¯'ª'°&¸"Ñ*=Ô*=¸zÑJÔJðð ð r   z	us-east-1Nzhttps://s3.amazonaws.com)r%   r)   r$   r*   r   r    r-   r/   r&   r%   r)   ú
str | Noner$   r*   r   r   úbool | NoneúMountCacheConfig | Nonec        	        ó  — t          |d¦  «        t          |d¦  «        t          |d¦  «        |dœ}	|�t          |d¦  «        |	d<   t          | d¦  «        dt          |d	¦  «        |	d
œ}
|�||
d<   |�t          |¦  «        |
d<   |
S )z/Build an S3-backed sandbox mount specification.r$   r%   r&   )r$   r%   r&   r*   Nr)   r-   r0   r/   )r-   r.   r/   r0   r   r    ©r]   r`   )r-   r/   r&   r%   r)   r$   r*   r   r    r0   Úmounts              r   Ús3_mountrˆ   Ä   s±   € õ 2°,ÀÑOÔOÝ+¨F°HÑ=Ô=Ý+¨F°HÑ=Ô=Ø ð	ð €Bð ÐÝ0°¸ÑBÔBˆˆ8‰õ (¨¨DÑ1Ô1ØÝ/°
¸LÑIÔIØð	ð €Eð ÐØ&ˆˆkÑØÐÝ+¨EÑ2Ô2ˆˆg‰Ø€Lr   )rA   rB   úGitMountRefSpec | NonerB   ú
int | Nonec                óÊ   — dt          |¦  «        i}|�t          |¦  «        |d<   |�|dk     rt          d¦  «        ‚||d<   t          | d¦  «        dt          |d	¦  «        |d
œS )z6Build a public Git-backed sandbox mount specification.r>   NrA   é   z+refresh_interval_seconds must be at least 1rB   r-   rE   r/   )r-   r.   r/   rE   )r|   r�   r\   r]   )r-   r/   r>   rA   rB   rE   s         r   Ú	git_mountr�   ç   s�   € ð 	Õ-¨jÑ9Ô9ð€Cð €Ý" 3Ñ'Ô'ˆˆE‰
ØÐ+Ø# aÒ'Ð'ÝÐJÑKÔKÐKØ*BˆÐ&Ñ'õ (¨¨DÑ1Ô1ØÝ/°
¸LÑIÔIØð	ð ð r   )r)   r   r    c                óÐ   — dt          |d¦  «        i}|�t          |d¦  «        |d<   t          | d¦  «        dt          |d¦  «        |dœ}|�||d<   |�t          |¦  «        |d	<   |S )
z/Build a GCS-backed sandbox mount specification.r&   Nr)   r-   r7   r/   )r-   r.   r/   r7   r   r    r†   )r-   r/   r&   r)   r   r    r7   r‡   s           r   Ú	gcs_mountr�     s’   € ð 	Õ+¨F°HÑ=Ô=ð€Cð ÐÝ1°&¸(ÑCÔCˆˆH‰õ (¨¨DÑ1Ô1ØÝ/°
¸LÑIÔIØð	ð €Eð ÐØ&ˆˆkÑØÐÝ+¨EÑ2Ô2ˆˆg‰Ø€Lr   rU   úSequence[SandboxMount]rT   c                ón  — t          | t          ¦  «        st          | t          ¦  «        s| st          d¦  «        ‚g }| D ]t}t          |t          ¦  «        r|st          d¦  «        ‚|                     d¦  «        }|dvrt          d¦  «        ‚t          |¦  «         |                     |¦  «         Œu|S )Nz5mounts must be a non-empty list of mount dictionariesr.   >   r0   r7   rE   z2mount_config only supports s3, gcs, and git mounts)rZ   re   r#   r\   rf   Ú%_reject_provider_credentials_in_mountÚappend)rU   Ú
normalizedr‡   Ú
mount_types       r   Ú_normalize_mountsr–     sÓ   € Ý�&�$ÑÔð R¥:¨fµcÑ#:Ô#:ð RÀ&ð RÝÐPÑQÔQÐQØ%'€JØð !ð !ˆÝ˜%¥Ñ&Ô&ð 	V¨eð 	VÝÐTÑUÔUÐUØ—Y’Y˜vÑ&Ô&ˆ
ØÐ1Ð1Ð1ÝÐQÑRÔRÐRÝ-¨eÑ4Ô4Ð4Ø×Ò˜%Ñ Ô Ð Ð ØÐr   >   Ú
credentialÚcredentialsÚaccess_tokenrH   Úrefresh_tokenÚsession_tokenrI   rL   ÚNonec                ó  — t          | t          ¦  «        rC|                      ¦   «         D ],\  }}|t          v rt	          d¦  «        ‚t          |¦  «         Œ-d S t          | t          ¦  «        r| D ]}t          |¦  «         Œd S d S )NzVprovider credentials must be supplied in mount_config.auth, not individual mount specs)rZ   re   ÚitemsÚ"_FORBIDDEN_MOUNT_CREDENTIAL_FIELDSr\   r’   Úlist)rV   ÚkeyÚchilds      r   r’   r’   :  s·   € Ý�%�ÑÔð 
9ØŸ+š+™-œ-ð 	9ð 	9‰JˆC�ØÕ8Ð8Ð8Ý ð1ñô ð õ 2°%Ñ8Ô8Ð8Ð8ð	9ð 	9õ 
�E�4Ñ	 Ô	 ð 9Øð 	9ð 	9ˆEÝ1°%Ñ8Ô8Ð8Ð8ð9ð 9ð	9ð 	9r   rS   úSequence[SandboxMountAuth]c                ó*  — t          | t          ¦  «        st          | t          ¦  «        rt          d¦  «        ‚i }| D �]S}t          |t          ¦  «        r|st          d¦  «        ‚|                     d¦  «        }|dvrt          d¦  «        ‚||v rt          d|› d�¦  «        ‚|dk    r„|                     d¦  «        }t          |t          ¦  «        st          d¦  «        ‚t          |                     d	¦  «        d	¦  «        t          |                     d
¦  «        d
¦  «        dœ|d<   Œò|                     d¦  «        }t          |t          ¦  «        st          d¦  «        ‚dt          |                     d¦  «        d¦  «        i|d<   �ŒU|S )Nz+auth must be a list of provider auth blocksr.   ¾   rO   rP   z2mount_config auth only supports aws and gcp blocksz
duplicate z auth rule in mount_configrO   z(aws mount auth must include an aws blockrH   rI   )rH   rI   rP   z'gcp mount auth must include a gcp blockrL   )rZ   re   r#   r\   rf   rh   )rS   Úby_providerÚblockÚproviderrO   rP   s         r   Ú_normalize_mount_authr©   H  sÇ  € õ �$�ÑÔð H¥¨Dµ#Ñ!6Ô!6ð HÝÐFÑGÔGÐGØ*,€KØð ñ ˆÝ˜%¥Ñ&Ô&ð 	L¨eð 	LÝÐJÑKÔKÐKØ—9’9˜VÑ$Ô$ˆØ˜>Ð)Ð)ÝÐQÑRÔRÐRØ�{Ð"Ð"ÝÐN¨(ÐNÐNÐNÑOÔOÐOØ�uÒÐØ—)’)˜EÑ"Ô"ˆCÝ˜c¥4Ñ(Ô(ð MÝ Ð!KÑLÔLÐLå!3Ø—G’G˜OÑ,Ô,¨oñ"ô "õ &8Ø—G’GÐ/Ñ0Ô0Ð2Eñ&ô &ð	"ð "ˆK˜ÑÐð —)’)˜EÑ"Ô"ˆCÝ˜c¥4Ñ(Ô(ð LÝ Ð!JÑKÔKÐKà&Õ(:Ø—G’GÐ2Ñ3Ô3Ð5Kñ)ô )ð"ˆK˜ÑÑð
 Ðr   r   )rS   c                ó  — t          | ¦  «        }t          |¦  «        }d„ |D ¦   «         }d|v rd|vrt          d¦  «        ‚d|v rd|vrt          d¦  «        ‚d|v rd|vrt          d¦  «        ‚d|v rd|vrt          d	¦  «        ‚||d
œS )zÎBuild a high-level mount config from provider auth and mount specs.

    The returned value is sent as the public ``mount_config`` field. The
    backend expands provider auth into runtime proxy rules.
    c                ó   — h | ]
}|d          ’ŒS )r.   r   )rn   r‡   s     r   ú	<setcomp>zmount_config.<locals>.<setcomp>z  s   € ÐDÐDÐD¨�u˜V”}ÐDÐDÐDr   r0   rO   z*s3 mounts require aws auth in mount_configr7   rP   z+gcs mounts require gcp auth in mount_configz7aws auth requires at least one s3 mount in mount_configz8gcp auth requires at least one gcs mount in mount_config)rS   rU   )r–   r©   r\   )rU   rS   Únormalized_mountsÚauth_by_providerÚmount_providerss        r   Úmount_configr°   n  sß   € õ *¨&Ñ1Ô1ÐÝ,¨TÑ2Ô2ÐØDÐDÐ2CÐDÑDÔD€OàˆÐÐ 5Ð0@Ð#@Ð#@ÝÐEÑFÔFÐFØ�ÐÐ EÐ1AÐ$AÐ$AÝÐFÑGÔGÐGØÐ Ð Ð  T°Ð%@Ð%@ÝÐRÑSÔSÐSØÐ Ð Ð  U°/Ð%AÐ%AÝÐSÑTÔTÐTð !Ø#ðð ð r   r°   Úproxy_configúSandboxProxyConfig | Nonec                óB  — |€dS |                       di ¦  «        }|                      dg ¦  «        }t          |t          ¦  «        st          d¦  «        ‚|D ]G}t          |t          ¦  «        sŒ|                      d¦  «        }|dv r||v rt          |› d�¦  «        ‚ŒHdS )z@Reject explicit provider proxy rules owned by mount_config auth.NrS   Úrulesz!proxy_config rules must be a listr.   r¥   z> auth cannot be provided in both mount_config and proxy_config)rf   rZ   r    r\   re   )r°   r±   rS   r´   ÚruleÚ	rule_types         r   Ú"validate_mount_config_proxy_configr·   ‹  sÓ   € ð
 ÐØˆØ×Ò˜F BÑ'Ô'€DØ×Ò˜W bÑ)Ô)€EÝ�e�TÑ"Ô"ð >ÝÐ<Ñ=Ô=Ð=Øð ð ˆÝ˜$¥Ñ%Ô%ð 	ØØ—H’H˜VÑ$Ô$ˆ	Ø˜Ð&Ð&¨9¸Ð+<Ð+<ÝØð 0ð 0ð 0ñô ð øðð r   )rV   r#   rW   r#   rX   r#   )r    r   rX   r   )ra   r   rW   r#   rX   r   )r>   r#   rX   r#   )rA   r:   rX   r:   )r-   r#   r/   r#   r&   r#   r%   r#   r)   r‚   r$   r#   r*   r   r   rƒ   r    r„   rX   r,   )r-   r#   r/   r#   r>   r#   rA   r‰   rB   rŠ   rX   rD   )r-   r#   r/   r#   r&   r#   r)   r‚   r   rƒ   r    r„   rX   r6   )rU   r�   rX   rT   )rV   r   rX   rœ   )rS   r£   rX   rN   )rU   r�   rS   r£   rX   rR   )r°   rR   r±   r²   rX   rœ   )0r   Ú
__future__r   Úcollections.abcr   Útypingr   r   r   r   Úurllib.parser	   Úlangsmith.sandbox._proxy_configr
   r   r   r   r   r"   r(   r,   r2   r4   r6   r:   r=   r@   rD   ÚSandboxMountrG   rK   rN   ÚSandboxMountAuthrR   r]   r`   rh   r|   r�   rˆ   r�   r�   r–   rŸ   r’   r©   r°   r·   r   r   r   ú<module>r¿      sø  ðØ DÐ Dà "Ð "Ð "Ð "Ð "Ð "à $Ð $Ð $Ð $Ð $Ð $Ø 1Ð 1Ð 1Ð 1Ð 1Ð 1Ð 1Ð 1Ð 1Ð 1Ð 1Ð 1Ø !Ð !Ð !Ð !Ð !Ð !ðð ð ð ð ð ð ð ð ð ðð ð ð ð �y¨ð ñ ô ð ðð ð ð ð ˜)¨5ð ñ ô ð ðð ð ð ð ˜Iñ ô ð ðð ð ð ð Ð)°ð ñ ô ð ðð ð ð ð Ð%ñ ô ð ðð ð ð ð ˜Yñ ô ð ðð ð ð ð Ð+°5ð ñ ô ð ðð ð ð ð Ð&ñ ô ð ðð ð ð ð �iñ ô ð ðð ð ð ð ˜Yñ ô ð ð"ð "ð "ð "ð "Ð+°5ð "ñ "ô "ð "ðð ð ð ð �9ñ ô ð ð �[ ,°Ð<Ô=€ð*ð *ð *ð *ð *˜ñ *ô *ð *ð-ð -ð -ð -ð -˜ñ -ô -ð -ðð ð ð ð ˜Y¨eð ñ ô ð ð $Ð ðð ð ð ð ˜ñ ô ð ðð ð ð ðð ð ð ð	1ð 	1ð 	1ð 	1ðð ð ð ð(	ð 	ð 	ð 	ð" ØØ2ØØ!Ø%)ð ð  ð  ð  ð  ð  ðP #'Ø+/ðð ð ð ð ð ð@ Ø!Ø%)ðð ð ð ð ð ð:ð ð ð ð	&ð 	&ð 	&Ð "ð9ð 9ð 9ð 9ð#ð #ð #ð #ðR (*ðð ð ð ð ð ð:ð ð ð ð ð r   