Ë
    °ëj•K  ã                  ó  — U d dl mZ g d¢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 d dlmZmZ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 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( erd dl)m*Z*m+Z+ d dlm,Z, d dlm-Z-m.Z. ed   Z/ed   Z0dZ1de2d<    e
d¬«       G d„ d«      «       Z3 e
d¬«       G d„ d«      «       Z4e
 G d„ d«      «       Z5 G d „ d!e «      Z6 e
d¬«       G d"„ d#«      «       Z7g d$¢Z8y)%é    )Úannotations)	Ú
contextlibzfilelock._errorzfilelock._identityzfilelock._softzfilelock._utilÚmathÚsecretsÚ	threadingÚweakrefN)Úsuppress)Ú	dataclass)Úisfinite)ÚEventÚThreadÚcurrent_thread)ÚTYPE_CHECKINGÚFinalÚLiteralÚcast)Ú
WeakMethod)Ú_check_timeout_maxÚ_seconds)ÚLeaseSettingsMismatch)Úowner_is_stale)ÚMarkerSoftFileLockÚ	OwnerModeÚOwnerRecordÚparse_marker)Ú_read_lock_file)Ú	pin_inodeÚtouch)ÚCallableÚMapping)ÚUnpack)ÚLockOptionsÚ_ExtraValue)úmarker-missingúowner-changedúrefresh-failedÚevicted)ÚokÚ	transientr$   r%   g      >@zFinal[float]Ú_DEFAULT_LEASE_DURATIONT)Úfrozenc                  ó>   — e Zd ZU dZded<   ded<   ded<   dZded	<   y)
ÚLeaseCompromisezdWhy a held lease stopped being this process's to hold, and the error that ended its refresh, if any.ÚstrÚ	lock_fileÚtokenÚCompromiseReasonÚreasonNzException | NoneÚerror)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú__annotations__r3   © ó    ú\/home/oem/CyberBrain26-unified/dev-env/.venv/lib/python3.12/site-packages/filelock/_lease.pyr-   r-   /   s    … ánàƒNØƒJØÓØ"€EÐÔ"r:   r-   c                  ó&   — e Zd ZU dZded<   ded<   y)Ú
_HeartbeatzPA running heartbeat and the event that stops it, which only ever exist together.r   Úthreadr   ÚstopN)r4   r5   r6   r7   r8   r9   r:   r;   r=   r=   9   s   … áZàƒNØ
„Kr:   r=   c                  ó<   — e Zd ZU dZdZded<   dZded<   dZded<   y)	Ú_LeaseClaimzNThe state of one claim: its token, its heartbeat, and how that claim was lost.Nú
str | Noner0   úLeaseCompromise | NoneÚ
compromisez_Heartbeat | NoneÚ	heartbeat)r4   r5   r6   r7   r0   r8   rD   rE   r9   r:   r;   rA   rA   A   s%   … áXà€Eˆ:ÓØ)-€JÐ&Ó-Ø#'€IÐ Ô'r:   rA   c                  ó<  ‡ — e Zd ZU dZdZded<   dZded<   dZd	ed
<   edddœ	 	 	 	 	 	 	 	 	 	 	 dˆ fd„Z	dˆ fd„Z
edd„«       Zed d„«       Zed!d„«       Zed"d„«       Zd#ˆ fd„Zd#ˆ fd„Zd#ˆ fd„Zd$ˆ fd„Zd#d„Zd%ˆ fd„Zd&d„Zd'd„Zd#d„Z	 	 	 	 	 	 	 	 	 	 d(d„Zˆ xZS ))ÚSoftFileLeaseaC  
    Existence lock whose claim expires, so a peer may take it while the previous holder still runs.

    A lease trades mutual exclusion for progress. The holder publishes a claim and refreshes it every
    ``heartbeat_interval`` seconds; a contender takes the marker once it has seen no refresh for ``lease_duration``
    seconds of its own monotonic clock, so clock skew between hosts cannot expire a live claim. Nothing stops the
    expired holder: it keeps running, and it keeps using whatever the lock protects. Treat the lease as a hint about
    who *should* be working, not as a guarantee that only one worker is.

    To make a protected resource reject a superseded holder, that resource must be linearizable and must fence on a
    monotonic generation it controls. :attr:`token` names a claim; it does not fence one. Where overlap is unacceptable,
    use :class:`StrictSoftFileLock <filelock.StrictSoftFileLock>` instead.

    Every contender for a path must agree on ``lease_duration``. A contender that finds a claim published under a
    different duration raises :class:`LeaseSettingsMismatch <filelock.LeaseSettingsMismatch>` rather than apply its own
    expiry to a peer that never agreed to it.

    Expiry reclaims less on Windows, which refuses to rename or delete a file another process holds open. A peer there
    takes an expired claim only once the previous holder's process exits and its handle closes; a holder that lives on
    but stops refreshing keeps the marker. Unix reclaims the marker either way.

    ``on_compromise`` fires from the heartbeat thread when a refresh fails, or when the marker vanishes or names another
    owner. The holder should stop touching the protected resource when it runs. Because it runs on that thread, a
    ``release()`` inside it only takes effect when the lease was built with ``thread_local=False``; the default
    thread-local context hides the claim from every thread but the one that acquired it, so the release does nothing.
    Signal the acquiring thread instead when the context stays thread-local.

    .. versionadded:: 3.30.0

    Úleaser   Ú_owner_modeFÚboolÚ_lifetime_supportedz(lease_duration sets when a lease expiresr.   Ú_lifetime_unsupported_reasonN)Úlease_durationÚheartbeat_intervalÚon_compromisec               ót  •— t        t        d|«      x}«      r|dk  rd|›�}t        |«      ‚|€|dz  nt        d|«      }d|cxk  r|k  sn d|›�}t        |«      ‚t        d|«       t	        ‰| �  |fi |¤Ž || _        || _        || _        | j                  «       st        «       | j                  _        yy)aÂ  
        Create a lease.

        :param lease_duration: seconds a contender must see the marker go unrefreshed before it may take the claim.
            Every contender for the path must pass the same value.
        :param heartbeat_interval: seconds between refreshes. Defaults to a third of ``lease_duration``, leaving room
            for two missed refreshes before a peer may take the claim. Must be shorter than ``lease_duration`` and at
            most :data:`threading.TIMEOUT_MAX`.
        :param on_compromise: called from the heartbeat thread with a :class:`LeaseCompromise` when the claim is lost.
        :param kwargs: every other :class:`BaseFileLock <filelock.BaseFileLock>` option, ``timeout`` and ``mode`` among
            them. The metaclass passes them all by keyword, and taking them here lets
            :class:`AsyncSoftFileLease <filelock.AsyncSoftFileLease>` add the async plumbing a fixed signature would
            hide.

        rM   r   z0lease_duration must be positive and finite, got Né   rN   zBheartbeat_interval must be positive and below lease_duration, got )r   r   Ú
ValueErrorr   ÚsuperÚ__init__Ú_lease_durationÚ_heartbeat_intervalÚ_on_compromiseÚis_thread_localrA   Ú_contextÚlease_claim)Úselfr/   rM   rN   rO   ÚkwargsÚmsgÚ	__class__s          €r;   rT   zSoftFileLease.__init__p   sÔ   ø€ ô2 ¬(Ð3CÀ^Ó*TÐT˜ÔUÐYgÐklÒYlØDÀ^ÐDVÐWˆCÜ˜S“/Ð!à"4Ð"<ˆN˜QÒÄ(ÐK_ÐasÓBtð 	ð Ð%Ô6¨Ô6ØVÐWiÐVlÐmˆCÜ˜S“/Ð!ÜÐ/Ð1CÔDÜ‰Ñ˜Ñ- fÒ-Ø-ˆÔØ#5ˆÔ Ø+ˆÔà×#Ñ#Ô%Ü(3«ˆD�M‰MÕ%ð &r:   c          
     ó6  •— t         ‰| �  |«      }t        dt        d|j	                  dt
        «      «      «      }|| j                  k7  r#t        |«      t        | j                  «      f|d<   |j	                  d«      x}€| j                  dz  nt        dt        d|«      «      }|| j                  k7  r#t        |«      t        | j                  «      f|d<   |j	                  d«      x}| j                  ur#t        |«      t        | j                  «      f|d<   |S )NrM   ÚfloatrN   rQ   rO   )
rS   Ú_singleton_extra_mismatchesr   r   Úgetr*   rU   r.   rV   rW   )r[   r\   Ú
mismatchesrM   ÚpassedrN   rO   r^   s          €r;   ra   z)SoftFileLease._singleton_extra_mismatches›   s  ø€ Ü‘WÑ8¸Ó@ˆ
Ü (Øœd 7¨F¯J©JÐ7GÔI`Ó,aÓbó!
ˆð ˜T×1Ñ1Ò1Ü,/°Ó,?ÄÀT×EYÑEYÓAZÐ+[ˆJÐ'Ñ(ð !Ÿ*™*Ð%9Ó:Ð:�ÐCð × Ñ  1Ò$äÐ.´°W¸fÓ0EÓFð 	ð
  ×!9Ñ!9Ò9Ü03°F³¼SÀ×AYÑAYÓ=ZÐ/[ˆJÐ+Ñ,à#ŸZ™Z¨Ó8Ð8ˆMÀ×ATÑATÑTÜ+.¨}Ó+=¼sÀ4×CVÑCVÓ?WÐ*XˆJ�Ñ'ØÐr:   c                ód   — | j                  «       }|j                  x}€t        «       x}|_        |S ©N)Ú_hold_staterZ   rA   )r[   ÚstateÚclaims      r;   Ú_claimzSoftFileLease._claim¯   s7   € ð ×'Ñ'Ó)ˆØ×&Ñ&Ð&ˆEÐ/Ü(3«Ð5ˆE�EÔ%Øˆr:   c                ó   — | j                   S )zEThe staleness in seconds after which a contender may take this claim.)rU   ©r[   s    r;   rM   zSoftFileLease.lease_duration·   s   € ð ×#Ñ#Ð#r:   c                ó.   — | j                   j                  S )z½
        The token naming the claim this process published.

        :returns: the token while the lease is held, ``None`` otherwise. It identifies a claim; it does not fence one.

        )rj   r0   rl   s    r;   r0   zSoftFileLease.token¼   s   € ð �{‰{× Ñ Ð r:   c                ó.   — | j                   j                  S )aá  
        The loss of claim the heartbeat observed.

        The value outlives ``release()``, so a holder can check after leaving the ``with`` block whether its work may
        have overlapped a successor; the next acquisition resets it, as :attr:`SoftReadWriteLock.compromise
        <filelock.SoftReadWriteLock.compromise>` does.

        :returns: the :class:`LeaseCompromise` of the latest claim, or ``None`` while that claim holds or held to its
            release

        )rj   rD   rl   s    r;   rD   zSoftFileLease.compromiseÆ   s   € ð �{‰{×%Ñ%Ð%r:   c                óf  •— | j                   }| j                  «        t        j                  d«      x|_        }d |_        	 t        ‰| �  «        | j                  j                  x}�.| j                  j                  x}	 �| j                  ||||«       y d |_        y # t        $ r	 d |_        ‚ w xY w)Né   )rj   Ú_stop_heartbeatr   Ú	token_hexr0   rD   rS   Ú_acquireÚBaseExceptionrY   Úlock_file_fdÚlock_file_fd_identityÚ_start_heartbeat)r[   ri   r0   ÚfdÚidentityr^   s        €r;   rs   zSoftFileLease._acquireÕ   s°   ø€ Ø—‘ˆØ×ÑÔä%×/Ñ/°Ó3Ð3ˆŒ�eØˆÔð	Ü‰GÑÔð —-‘-×,Ñ,Ð,ˆBÐ9ØŸ™×;Ñ;Ð;ˆHØð?ð ×!Ñ! %¨¨X°uÕ=àˆE�Køô ò 	ØˆEŒKØð	ús   ÁB ÂB0c                ód   •— | j                  «        d | j                  _        t        ‰| �  «        y rf   )rq   rj   r0   rS   Ú_release©r[   r^   s    €r;   r{   zSoftFileLease._releaseé   s&   ø€ Ø×ÑÔØ ˆ�‰ÔÜ‰ÑÕr:   c                óv   •— t         ‰| �  «        | j                  «       st        «       | j                  _        y y rf   )rS   Ú_reset_after_fork_in_childrX   rA   rY   rZ   r|   s    €r;   r~   z(SoftFileLease._reset_after_fork_in_childî   s-   ø€ Ü‰Ñ*Ô,à×#Ñ#Ô%Ü(3«ˆD�M‰MÕ%ð &r:   c                ó~   •— t         ‰| �  «       j                  | j                  j                  | j
                  ¬«      S )N)r0   rM   )rS   Ú_published_recordÚ_replacerj   r0   rU   r|   s    €r;   r€   zSoftFileLease._published_recordô   s2   ø€ Ü‰wÑ(Ó*×3Ñ3¸$¿+¹+×:KÑ:KÐ\`×\pÑ\pÐ3ÓqÐqr:   c                óÂ   — t        t        «      5  t        | j                  «      5 }| j	                  |«       d d d «       d d d «       y # 1 sw Y   ŒxY w# 1 sw Y   y xY wrf   )r	   ÚOSErrorr   Ú
_lock_pathÚ_try_break_pinned_lock)r[   Úpinneds     r;   Ú_try_break_stale_lockz#SoftFileLease._try_break_stale_lock÷   sQ   € ô ”gÓñ 	0¤	¨$¯/©/Ó :ð 	0¸fØ×'Ñ'¨Ô/÷	0÷ 	0÷ 	0ñ 	0ú÷ 	0ð 	0ús!   �A¦A	¸AÁ	A	ÁAÁAc                ó\  •— | j                  «       x}€t        ‰| �	  «        y |\  }}|d |j                  hvry |j                  dk7  rHt        |j                  |j                  |j                  «      r| j                  ||j                  «       y |j                  dk(  rM|j                  | j                  k7  r4| j                  › d|j                  ›d| j                  ›d�}t        |«      ‚|j                  dk(  r2| j                  |«      | j                  k\  r| j                  |d «       y y y )NÚunknownrH   z holds a lease of z s but this contender configured z:s; every contender for a path must agree on lease_duration)Ú
_read_peerrS   r‡   Úst_inoÚmoder   ÚpidÚhostnameÚstartÚ
_take_overrM   rU   r/   r   Ú_marker_unchanged_for)r[   r†   ÚpeerÚownerÚmarkerr]   r^   s         €r;   r…   z$SoftFileLease._try_break_pinned_locký   s  ø€ Ø—O‘OÓ%Ð%ˆDÐ.ô
 ‰GÑ)Ô+ØØ‰ˆˆvØ˜$ §¡Ð.Ñ.Øà�:‰:˜Ò"¤~°e·i±iÀÇÁÐQV×Q\ÑQ\Ô']Ø�O‰O˜F E§I¡IÔ.Øð �:‰:˜Ò  U×%9Ñ%9¸T×=QÑ=QÒ%Qà—>‘>Ð"Ð"4°U×5IÑ5IÐ4LÐLlØ×'Ñ'Ð*Ð*dðfð ô (¨Ó,Ð,Ø�:‰:˜Ò  T×%?Ñ%?ÀÓ%GÈ4×K_ÑK_Ò%_Ø�O‰O˜F DÕ)ð &`Ð r:   c                ó¼   — t        t        t        «      5  t        | j                  «      \  }}t        |«      x}�||fcd d d «       S 	 d d d «       y # 1 sw Y   y xY wrf   )r	   rƒ   rR   r   r„   r   )r[   Úcontentr”   r“   s       r;   rŠ   zSoftFileLease._read_peer  s\   € Ü”gœzÓ*ñ 	%Ü-¨d¯o©oÓ>‰OˆG�VÜ% gÓ.Ð.�Ð;Ø˜f�}÷	%ñ 	%à;÷	%ð ÷		%ð ús   •)AÁAc                óH  ‡— t        «       Št        t        | j                  ˆfd„«      | j                  ||||‰| j
                  | j                  ¬«	      }t        |j                  dt        j                  «       › �d¬«      }t        |‰«      |_        |j                  «        y )Nc                ó$   •— ‰j                  «       S rf   )Úset)Ú_r?   s    €r;   ú<lambda>z0SoftFileLease._start_heartbeat.<locals>.<lambda>&  s   ø€ ÀÇÁÃ€ r:   )	Úreportr/   ri   rx   ry   r0   r?   ÚintervalÚdurationzfilelock-lease-T)ÚtargetÚnameÚdaemon)r   Ú_RefreshLoopr   Ú_report_compromiser„   rV   rU   r   ÚrunÚosÚgetpidr=   rE   r�   )r[   ri   rx   ry   r0   Úloopr>   r?   s          @r;   rw   zSoftFileLease._start_heartbeat  sŒ   ø€ ô “gˆÜ"ô ˜d×5Ñ5Ó7KÓLØ—o‘oØØØØØØ×-Ñ-Ø×)Ñ)ô
ˆô  d§h¡h°ÄrÇyÁyÃ{ÀmÐ5TÐ]aÔbˆô % V¨TÓ2ˆŒØ�‰�r:   c                óN  — | j                   }|j                  x}€y |j                  j                  «        d |_        |j                  j
                  �S|j                  t        «       ur<t        j                  «       s'|j                  j                  | j                  ¬«       y y y y )N)Útimeout)rj   rE   r?   r™   r>   Úidentr   ÚsysÚis_finalizingÚjoinrV   )r[   ri   rE   s      r;   rq   zSoftFileLease._stop_heartbeat7  sŽ   € Ø—‘ˆØŸ™Ð(ˆIÐ1ØØ�‰×ÑÔØˆŒð ×Ñ×!Ñ!Ð-°)×2BÑ2BÌ.ÓJZÑ2ZÔcf×ctÑctÔcvØ×Ñ×!Ñ!¨$×*BÑ*BÐ!ÕCð dwÐ2ZÐ-r:   c                ó�   — t        | j                  |||¬«      |_        | j                  �| j                  |j                  «       y y )N)r/   r0   r2   r3   )r-   r/   rD   rW   )r[   ri   r2   r3   r0   s        r;   r£   z SoftFileLease._report_compromiseB  sB   € ô +°T·^±^È5ÐY_ÐglÔmˆÔØ×ÑÐ*Ø×Ñ × 0Ñ 0Õ1ð +r:   )r/   zstr | os.PathLike[str]rM   r`   rN   zfloat | NonerO   z(Callable[[LeaseCompromise], None] | Noner\   zUnpack[LockOptions]ÚreturnÚNone)r\   zMapping[str, _ExtraValue]r¯   zdict[str, tuple[str, str]])r¯   rA   )r¯   r`   )r¯   rB   )r¯   rC   ©r¯   r°   )r¯   r   )r†   z
int | Noner¯   r°   )r¯   z)tuple[OwnerRecord, os.stat_result] | None)
ri   rA   rx   Úintry   útuple[int, int]r0   r.   r¯   r°   )
ri   rA   r2   r1   r3   zOSError | Noner0   r.   r¯   r°   )r4   r5   r6   r7   rI   r8   rK   rL   r*   rT   ra   Úpropertyrj   rM   r0   rD   rs   r{   r~   r€   r‡   r…   rŠ   rw   rq   r£   Ú__classcell__)r^   s   @r;   rG   rG   J   s1  ø… ñð> %€K�Ó$ð !&Ð˜Ó%Ø(RÐ  #ÓRð !8Ø+/ØBFñ)6à)ð)6ð ð	)6ð
 )ð)6ð @ð)6ð &ð)6ð 
õ)6õVð( òó ðð ò$ó ð$ð ò!ó ð!ð ò&ó ð&õõ(õ
6õró0õ*ó6óó0	Dð2àð2ð !ð2ð ð	2ð
 ð2ð 
÷2r:   rG   c                  óŒ   — e Zd ZU dZded<   ded<   ded<   ded	<   d
ed<   ded<   ded<   ded<   ded<   dd„Zdd„Zdd„Zdd„Zy)r¢   zYWhat a heartbeat thread needs to refresh one claim, holding the lease itself only weakly.zPWeakMethod[Callable[[_LeaseClaim, CompromiseReason, OSError | None, str], None]]rœ   r.   r/   rA   ri   r²   rx   r³   ry   r0   r   r?   r`   r�   rž   c                óÊ  — t        j                  «       d}}| j                  j                  | j                  «      s¨| j                  «       \  }}|dk(  rt        j                  «       d}}ŒT|dv r|sd}Œ]|dk(  r2t        j                  «       |z
  | j                  | j                  z
  k  rŒ”| j                  «       x}�& || j                  |dk(  rdn||| j                  «       y y )NFr(   >   r%   r$   Tr)   r&   )
ÚtimeÚ	monotonicr?   Úwaitr�   Ú_refreshrž   rœ   ri   r0   )r[   Úlast_successÚmissingÚoutcomer3   rœ   s         r;   r¤   z_RefreshLoop.run_  sÒ   € ô !%§¡Ó 0°%�gˆØ—)‘)—.‘. §¡Ô/Ø!Ÿ]™]›_‰NˆG�UØ˜$ŠÜ(,¯©Ó(8¸%˜g�Øð Ð=Ñ=ÁgØ�ØØ˜+Ò%¬$¯.©.Ó*:¸\Ñ*IÈDÏMÉMÐ\`×\iÑ\iÑLiÒ*iØØŸ+™+›-Ð'�Ð4Ù�t—z‘z°wÀ+Ò7MÑ#3ÐSZÐ\aÐcg×cmÑcmÔnØð 0r:   c                ó&  — 	 t        j                  | j                  «      }|j                  |j                  f| j                  k7  ry| j                  «       S # t        $ r}| j	                  |«      cY d }~S d }~wt
        $ r}d|fcY d }~S d }~ww xY w)Nr)   )r%   N)
r¥   Úlstatr/   ÚFileNotFoundErrorÚ_refresh_unnamedrƒ   Úst_devr‹   ry   Ú_touch)r[   Ústr3   s      r;   r»   z_RefreshLoop._refreshs  sz   € ð	&Ü—‘˜$Ÿ.™.Ó)ˆBð �I‰I�r—y‘yÐ! T§]¡]Ò2Ø(Ø�{‰{‹}Ðøô !ò 	0Ø×(Ñ(¨Ó/Õ/ûÜò 	&Ø Ð%Õ%ûð	&ús/   ‚A Á	BÁ A6Á0BÁ6BÂBÂBÂBc                ó¼   — 	 t        j                  | j                  «      j                  dkD  }|sd|fS | j                  «       S # t        $ r}d|fcY d }~S d }~ww xY w)Nr   r)   r$   )r¥   Úfstatrx   Úst_nlinkrƒ   rÄ   )r[   Ú
name_errorÚlinkedr3   s       r;   rÂ   z_RefreshLoop._refresh_unnamed  s]   € ð	&Ü—X‘X˜dŸg™gÓ&×/Ñ/°!Ñ3ˆFñ Ø# ZÐ/Ð/Ø�{‰{‹}Ðøô	 ò 	&Ø Ð%Õ%ûð	&ús   ‚,A Á	AÁAÁAÁAc                ó|   — 	 t        | j                  | j                  ¬«       y# t        $ r}d|fcY d }~S d }~ww xY w)N)rx   r)   )r(   N)r   r/   rx   rƒ   )r[   r3   s     r;   rÄ   z_RefreshLoop._touchŠ  s;   € ð	&Ü�$—.‘. T§W¡WÕ-ð øô ò 	&Ø Ð%Õ%ûð	&ús   ‚!$ ¤	;­6°;¶;Nr±   )r¯   ú&tuple[_RefreshOutcome, OSError | None])rÉ   rÁ   r¯   rÌ   )	r4   r5   r6   r7   r8   r¤   r»   rÂ   rÄ   r9   r:   r;   r¢   r¢   Q  sI   … ácà\Ó\ØƒNØÓØƒGØÓØƒJØ
ƒKØƒOØƒOóó(
ó	ôr:   r¢   )r1   r-   rG   rA   )9Ú
__future__r   Ú__lazy_modules__r¥   r   r«   r¸   r   r	   Údataclassesr
   r   r   r   r   r   r   Útypingr   r   r   r   r   r   Úfilelock._apir   r   Úfilelock._errorr   Úfilelock._identityr   Úfilelock._markerr   r   r   r   Úfilelock._softr   Úfilelock._utilr   r   Úcollections.abcr   r    r!   r"   r#   r1   Ú_RefreshOutcomer*   r8   r-   r=   rA   rG   r¢   Ú__all__r9   r:   r;   ú<module>rÚ      s  ðÞ "ò
Ð ó 
Û Û 
Û Ý Ý !Ý ß 3Ñ 3ß 6Ó 6Ý ç 6Ý 1Ý -ß UÓ UÝ *ß +áß1Ýç6ð ÐYÑZÐ àÐNÑO€Ø(,Ð ˜Ó ,ñ �$Ô÷#ð #ó ð#ñ �$Ô÷ð ó ðð ÷(ð (ó ð(ôD2Ð&ô D2ñN �$Ô÷=ð =ó ð=ò@�r:   