§
    #ˆtjŒ;  ã            !       ó–  — d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	m
Z
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mZ d dlZd	d
lmZ d	dlmZmZmZm Z  erd dlm!Z! dZ" ej#        d¦  «        Z$dddd e¦   «         d ddddd	dddœdee%z  de%e
def         z  de&edf         de'e%ef         dz  ddde
e(e         gdf         dz  de
ee%ge)f         dz  d e*d!e+d"e+d#e)dz  d$e+d%e+d&e)d'e)d(e+f d)„Z,dddd e¦   «         d dddddd*œdee%z  de%e
def         z  de&edf         de'e%ef         dz  ddde
e(e         gef         dz  de
ee%ge)f         dz  d e*d!e+d"e+d#e)dz  d&e)d'e)d(e+fd+„Z- ed,¦  «        Z.d-e%d(e/e%         fd.„Z0	 dAde%e
def         z  dd/de&edf         de'e%ef         dz  d0e(e         dz  d(d1fd2„Z1de%e
def         z  d(d/fd3„Z2 G d4„ d1¦  «        Z3d5e%d6e%dz  de&edf         de'e%ef         d(df
d7„Z4d8e%d(efd9„Z5d(e%dz  fd:„Z6e j7        d6e%dz  d(ed;         fd<„¦   «         Z8d=e+d>ed(dfd?„Z9dBd@„Z:dS )Cé    N)ÚCallableÚ	Generator)Úimport_module)Úget_context)ÚSpawnProcess)ÚPath)Úsleep)ÚTYPE_CHECKINGÚAnyé   )ÚDefaultFilter)ÚChangeÚ
FileChangeÚawatchÚwatch)ÚLiteral)Úrun_processÚarun_processÚdetect_target_typeÚimport_stringzwatchfiles.main© Úautoi@  é2   é   TF)ÚargsÚkwargsÚtarget_typeÚcallbackÚwatch_filterÚgrace_periodÚdebounceÚstepÚdebugÚsigint_timeoutÚsigkill_timeoutÚ	recursiveÚignore_permission_deniedÚpathsÚtarget.r   r   r   z&Literal['function', 'command', 'auto']r   r   r    r!   r"   r#   r$   r%   r&   r'   Úreturnc                 ó  — |dk    rt          | ¦  «        }t                               d| |¦  «         t          ¦   «          t	          | |||¦  «        }d}|r*t                               d|¦  «         t          |¦  «         	 t          |||||	d||dœŽD ]>}|o
 ||¦  «         |                     |
|¬¦  «         t	          | ||||¦  «        }|dz  }Œ?	 |                     ¦   «          n# |                     ¦   «          w xY w|S )	u†  
    Run a process and restart it upon file changes.

    `run_process` can work in two ways:

    * Using `multiprocessing.Process` â€  to run a python function
    * Or, using `subprocess.Popen` to run a command

    !!! note

        **â€ ** technically `multiprocessing.get_context('spawn').Process` to avoid forking and improve
        code reload/import.

    Internally, `run_process` uses [`watch`][watchfiles.watch] with `raise_interrupt=False` so the function
    exits cleanly upon `Ctrl+C`.

    Args:
        *paths: matches the same argument of [`watch`][watchfiles.watch]
        target: function or command to run
        args: arguments to pass to `target`, only used if `target` is a function
        kwargs: keyword arguments to pass to `target`, only used if `target` is a function
        target_type: type of target. Can be `'function'`, `'command'`, or `'auto'` in which case
            [`detect_target_type`][watchfiles.run.detect_target_type] is used to determine the type.
        callback: function to call on each reload, the function should accept a set of changes as the sole argument
        watch_filter: matches the same argument of [`watch`][watchfiles.watch]
        grace_period: number of seconds after the process is started before watching for changes
        debounce: matches the same argument of [`watch`][watchfiles.watch]
        step: matches the same argument of [`watch`][watchfiles.watch]
        debug: matches the same argument of [`watch`][watchfiles.watch]
        sigint_timeout: the number of seconds to wait after sending sigint before sending sigkill
        sigkill_timeout: the number of seconds to wait after sending sigkill before raising an exception
        recursive: matches the same argument of [`watch`][watchfiles.watch]

    Returns:
        number of times the function was reloaded.

    ```py title="Example of run_process running a function"
    from watchfiles import run_process

    def callback(changes):
        print('changes detected:', changes)

    def foobar(a, b):
        print('foobar called with:', a, b)

    if __name__ == '__main__':
        run_process('./path/to/dir', target=foobar, args=(1, 2), callback=callback)
    ```

    As well as using a `callback` function, changes can be accessed from within the target function,
    using the `WATCHFILES_CHANGES` environment variable.

    ```py title="Example of run_process accessing changes"
    from watchfiles import run_process

    def foobar(a, b, c):
        # changes will be an empty list "[]" the first time the function is called
        changes = os.getenv('WATCHFILES_CHANGES')
        changes = json.loads(changes)
        print('foobar called due to changes:', changes)

    if __name__ == '__main__':
        run_process('./path/to/dir', target=foobar, args=(1, 2, 3))
    ```

    Again with the target as `command`, `WATCHFILES_CHANGES` can be used
    to access changes.

    ```bash title="example.sh"
    echo "changers: ${WATCHFILES_CHANGES}"
    ```

    ```py title="Example of run_process running a command"
    from watchfiles import run_process

    if __name__ == '__main__':
        run_process('.', target='./example.sh')
    ```
    r   úrunning "%s" as %sr   ú3sleeping for %s seconds before watching for changesF)r   r!   r"   r#   Úraise_interruptr&   r'   )r$   r%   r   )r   Úloggerr#   Úcatch_sigtermÚstart_processr	   r   Ústop)r)   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   ÚprocessÚreloadsÚchangess                     úL/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/watchfiles/run.pyr   r      s3  € ð@ �fÒÐÝ(¨Ñ0Ô0ˆå
‡L‚LÐ% v¨{Ñ;Ô;Ð;Ý�O„O€OÝ˜F K°°vÑ>Ô>€GØ€Gàð Ý�ŠÐJÈLÑYÔYÐYÝˆlÑÔÐðÝØØ%ØØØØ!ØØ%=ð	
ð 	
ð 	
ð 	ð 	ˆGð Ð*˜˜ 'Ñ*Ô*øØ�LŠL¨ÈˆLÑXÔXÐXÝ# F¨K¸¸vÀwÑOÔOˆGØ�q‰LˆGˆGð	ð 	�Š‰Œˆˆøˆ�Š‰ŒˆˆøøøØ€Ns   ÂAC( Ã(C>)r   r   r   r   r   r    r!   r"   r#   r&   r'   c           
   ‡   óö  K  — ddl }|dk    rt          | ¦  «        }t                               d| |¦  «         t	          ¦   «          t
          j                             t          | |||¦  «        ƒ d{V —†}d}|r5t                               d|¦  «         t          j	        |¦  «        ƒ d{V —† t          |||||	|
|dœŽ2 3 d{V —†}|�( ||¦  «        }|                     |¦  «        r|ƒ d{V —† t
          j                             |j        ¦  «        ƒ d{V —† t
          j                             t          | ||||¦  «        ƒ d{V —†}|dz  }Œ�6 t
          j                             |j        ¦  «        ƒ d{V —† |S )a  
    Async equivalent of [`run_process`][watchfiles.run_process], all arguments match those of `run_process` except
    `callback` which can be a coroutine.

    Starting and stopping the process and watching for changes is done in a separate thread.

    As with `run_process`, internally `arun_process` uses [`awatch`][watchfiles.awatch], however `KeyboardInterrupt`
    cannot be caught and suppressed in `awatch` so these errors need to be caught separately, see below.

    ```py title="Example of arun_process usage"
    import asyncio
    from watchfiles import arun_process

    async def callback(changes):
        await asyncio.sleep(0.1)
        print('changes detected:', changes)

    def foobar(a, b):
        print('foobar called with:', a, b)

    async def main():
        await arun_process('.', target=foobar, args=(1, 2), callback=callback)

    if __name__ == '__main__':
        try:
            asyncio.run(main())
        except KeyboardInterrupt:
            print('stopped via KeyboardInterrupt')
    ```
    r   Nr   r,   r-   )r   r!   r"   r#   r&   r'   r   )Úinspectr   r/   r#   r0   ÚanyioÚ	to_threadÚrun_syncr1   r	   r   Úisawaitabler2   )r)   r   r   r   r   r   r    r!   r"   r#   r&   r'   r(   r8   r3   r4   r5   Úrs                     r6   r   r   ž   sè  è è € ðZ €N€N€Nà�fÒÐÝ(¨Ñ0Ô0ˆå
‡L‚LÐ% v¨{Ñ;Ô;Ð;Ý�O„O€OÝ”O×,Ò,­]¸FÀKÐQUÐW]Ñ^Ô^Ð^Ð^Ð^Ð^Ð^Ð^€GØ€Gàð (Ý�ŠÐJÈLÑYÔYÐYÝŒk˜,Ñ'Ô'Ð'Ð'Ð'Ð'Ð'Ð'Ð'åØ	Ø!ØØØØØ!9ðð ð ð ð ð ð ð ð ð ˆgð ÐØ�˜Ñ!Ô!ˆAØ×"Ò" 1Ñ%Ô%ð Ø�������åŒo×&Ò& w¤|Ñ4Ô4Ð4Ð4Ð4Ð4Ð4Ð4Ð4Ýœ×0Ò0µÀÈÐUYÐ[aÐcjÑkÔkÐkÐkÐkÐkÐkÐkˆØ�1‰ˆˆð!õ" Œ/×
"Ò
" 7¤<Ñ
0Ô
0Ð0Ð0Ð0Ð0Ð0Ð0Ð0Ø€Ns   Â>EÚspawnÚcmdc                 ó”   — dd l }|                     ¦   «         j                             ¦   «         dk    }t	          j        | |¬¦  «        S )Nr   Úwindows)Úposix)ÚplatformÚunameÚsystemÚlowerÚshlexÚsplit)r?   rC   rB   s      r6   Ú	split_cmdrI   ó   sC   € Ø€O€O€Oà�NŠNÑÔÔ#×)Ò)Ñ+Ô+¨yÒ8€EÝŒ;�s %Ð(Ñ(Ô(Ð(ó    zLiteral['function', 'command']r5   ÚCombinedProcessc                 ó"  — |€d}nt          j        d„ |D ¦   «         ¦  «        }|t          j        d<   |dk    ri|pi }t	          | t
          ¦  «        r| t          ¦   «         ||f}t          }i }n| }t           	                    |||¬¦  «        }| 
                    ¦   «          n`|s|rt                               d¦  «         t	          | t
          ¦  «        s
J d¦   «         ‚t          | ¦  «        }t          j        |¦  «        }t!          |¦  «        S )Nz[]c                 ó@   — g | ]\  }}|                      ¦   «         |g‘ŒS r   )Úraw_str)Ú.0ÚcÚps      r6   ú
<listcomp>z!start_process.<locals>.<listcomp>  s)   € Ð%KÐ%KÐ%K¹4¸1¸a q§y¢y¡{¤{°AÐ&6Ð%KÐ%KÐ%KrJ   ÚWATCHFILES_CHANGESÚfunction)r)   r   r   z-ignoring args and kwargs for "command" targetz+target must be a string to run as a command)ÚjsonÚdumpsÚosÚenvironÚ
isinstanceÚstrÚget_tty_pathÚrun_functionÚspawn_contextÚProcessÚstartr/   ÚwarningrI   Ú
subprocessÚPopenrK   )	r)   r   r   r   r5   Úchanges_env_varÚtarget_r3   Ú
popen_argss	            r6   r1   r1   ú   s  € ð €Øˆˆåœ*Ð%KÐ%KÀ7Ð%KÑ%KÔ%KÑLÔLˆà'6…B„JÐ#Ñ$ð �jÒ Ð Ø�˜2ˆÝ�f�cÑ"Ô"ð 	Ø�<™>œ>¨4°Ð7ˆDÝ"ˆGØˆFˆFàˆGå×'Ò'¨w¸TÈ&Ð'ÑQÔQˆØ�Š‰Œˆˆàð 	L�6ð 	LÝ�NŠNÐJÑKÔKÐKå˜&¥#Ñ&Ô&ÐUÐUÐ(UÑUÔUÐ&Ý˜vÑ&Ô&ˆ
ÝÔ" :Ñ.Ô.ˆÝ˜7Ñ#Ô#Ð#rJ   c                 ó�   — t          | t          ¦  «        sdS |                      d¦  «        rdS t          j        d| ¦  «        rdS dS )a^  
    Used by [`run_process`][watchfiles.run_process], [`arun_process`][watchfiles.arun_process]
    and indirectly the CLI to determine the target type with `target_type` is `auto`.

    Detects the target type - either `function` or `command`. This method is only called with `target_type='auto'`.

    The following logic is employed:

    * If `target` is not a string, it is assumed to be a function
    * If `target` ends with `.py` or `.sh`, it is assumed to be a command
    * Otherwise, the target is assumed to be a function if it matches the regex `[a-zA-Z0-9_]+(\.[a-zA-Z0-9_]+)+`

    If this logic does not work for you, specify the target type explicitly using the `target_type` function argument
    or `--target-type` command line argument.

    Args:
        target: The target value

    Returns:
        either `'function'` or `'command'`
    rT   )z.pyz.shÚcommandz[a-zA-Z0-9_]+(\.[a-zA-Z0-9_]+)+)rY   rZ   ÚendswithÚreÚ	fullmatch)r)   s    r6   r   r     sS   € õ, �f�cÑ"Ô"ð ØˆzØ	�Š˜Ñ	(Ô	(ð ØˆyÝ	ŒÐ8¸&Ñ	AÔ	Að ØˆzàˆyrJ   c                   ó†   — e Zd Zdd„Zddededd	fd
„Zdefd„Zedefd„¦   «         Z	dedd	fd„Z
eded	z  fd„¦   «         Zd	S )rK   rQ   ú&SpawnProcess | subprocess.Popen[bytes]c                 ó6   — || _         | j        €
J d¦   «         ‚d S )Nzprocess not yet spawned©Ú_pÚpid)ÚselfrQ   s     r6   Ú__init__zCombinedProcess.__init__?  s&   € ØˆŒØŒxÐ#Ð#Ð%>Ñ#Ô#Ð#Ð#Ð#rJ   r   r   r$   r%   r*   Nc                 ó¨  — t           j                             dd ¦  «         |                      ¦   «         rýt                               d¦  «         t          j        | j        t          j	        ¦  «         	 |  
                    |¦  «         n0# t          j        $ r t                               d|¦  «         Y nw xY w| j        €Ut                               d¦  «         t          j        | j        t          j        ¦  «         |  
                    |¦  «         d S t                               d¦  «         d S t                               d| j        ¦  «         d S )NrS   zstopping process...z!SIGINT timed out after %r secondsz+process has not terminated, sending SIGKILLzprocess stoppedz#process already dead, exit code: %d)rW   rX   ÚpopÚis_aliver/   r#   Úkillrp   ÚsignalÚSIGINTÚjoinra   ÚTimeoutExpiredr`   ÚexitcodeÚSIGKILL)rq   r$   r%   s      r6   r2   zCombinedProcess.stopC  s(  € Ý
Œ
�ŠÐ+¨TÑ2Ô2Ð2Ø�=Š=‰?Œ?ð 	QÝ�LŠLÐ.Ñ/Ô/Ð/åŒG�D”H�fœmÑ,Ô,Ð,ðØ—	’	˜.Ñ)Ô)Ð)Ð)øÝÔ,ð ð ð õ —’ÐBÀNÑSÔSÐSØ�ð	øøøð Œ}Ð$Ý—’ÐLÑMÔMÐMÝ”˜œ¥&¤.Ñ1Ô1Ð1Ø—	’	˜/Ñ*Ô*Ð*Ð*Ð*å—’Ð.Ñ/Ô/Ð/Ð/Ð/å�NŠNÐ@À$Ä-ÑPÔPÐPÐPÐPs   Á4B
 Â
*B7Â6B7c                 óž   — t          | j        t          ¦  «        r| j                             ¦   «         S | j                             ¦   «         d u S ©N)rY   ro   r   ru   Úpoll©rq   s    r6   ru   zCombinedProcess.is_alive[  s?   € Ý�d”g�|Ñ,Ô,ð 	*Ø”7×#Ò#Ñ%Ô%Ð%à”7—<’<‘>”> TÐ)Ð)rJ   c                 ó   — | j         j        S r~   rn   r€   s    r6   rp   zCombinedProcess.pida  s   € ð ŒwŒ{ÐrJ   Útimeoutc                 ó¦   — t          | j        t          ¦  «        r| j                             |¦  «         d S | j                             |¦  «         d S r~   )rY   ro   r   ry   Úwait)rq   r‚   s     r6   ry   zCombinedProcess.joinf  sJ   € Ý�d”g�|Ñ,Ô,ð 	"ØŒG�LŠL˜Ñ!Ô!Ð!Ð!Ð!àŒG�LŠL˜Ñ!Ô!Ð!Ð!Ð!rJ   c                 óf   — t          | j        t          ¦  «        r| j        j        S | j        j        S r~   )rY   ro   r   r{   Ú
returncoder€   s    r6   r{   zCombinedProcess.exitcodel  s,   € å�d”g�|Ñ,Ô,ð 	&Ø”7Ô#Ð#à”7Ô%Ð%rJ   )rQ   rl   )r   r   )Ú__name__Ú
__module__Ú__qualname__rr   Úintr2   Úboolru   Úpropertyrp   ry   r{   r   rJ   r6   rK   rK   >  sí   € € € € € ð?ð ?ð ?ð ?ðQð Q 3ð Q¸Sð QÈð Qð Qð Qð Qð0*˜$ð *ð *ð *ð *ð ð�Sð ð ð ñ „Xðð"˜Cð " Dð "ð "ð "ð "ð ð&˜# ™*ð &ð &ð &ñ „Xð&ð &ð &rJ   rT   Útty_pathc                 ó„   — t          |¦  «        5  t          | ¦  «        } ||i |¤Ž d d d ¦  «         d S # 1 swxY w Y   d S r~   )Úset_ttyr   )rT   r�   r   r   Úfuncs        r6   r\   r\   t  s–   € Ý	�Ñ	Ô	ð ð Ý˜XÑ&Ô&ˆØˆˆdÐ�fÐÐÐðð ð ñ ô ð ð ð ð ð ð ð øøøð ð ð ð ð ð s   �5µ9¼9Údotted_pathc                 ó<  — 	 |                       d¦  «                             dd¦  «        \  }}n&# t          $ r}t          d| › d�¦  «        |‚d}~ww xY wt	          |¦  «        }	 t          ||¦  «        S # t          $ r}t          d|› d|› d	�¦  «        |‚d}~ww xY w)
zº
    Stolen approximately from django. Import a dotted module path and return the attribute/class designated by the
    last name in the path. Raise ImportError if the import fails.
    ú ú.r   ú"z!" doesn't look like a module pathNzModule "z" does not define a "z" attribute)ÚstripÚrsplitÚ
ValueErrorÚImportErrorr   ÚgetattrÚAttributeError)r‘   Úmodule_pathÚ
class_nameÚeÚmodules        r6   r   r   z  sß   € ð
VØ"-×"3Ò"3°CÑ"8Ô"8×"?Ò"?ÀÀQÑ"GÔ"GÑˆ�Z�ZøÝð Vð Vð VÝÐM˜kÐMÐMÐMÑNÔNÐTUÐUøøøøðVøøøõ ˜;Ñ'Ô'€FðgÝ�v˜zÑ*Ô*Ð*øÝð gð gð gÝÐ^ [Ð^Ð^ÀzÐ^Ð^Ð^Ñ_Ô_ÐefÐføøøøðgøøøs,   ‚,/ ¯
A¹AÁAÁ%A5 Á5
BÁ?BÂBc                  óž   — 	 t          j        t          j                             ¦   «         ¦  «        S # t
          $ r Y dS t          $ r Y dS w xY w)zr
    Return the path to the current TTY, if any.

    Virtually impossible to test in pytest, hence no cover.
    z/dev/ttyN)rW   ÚttynameÚsysÚstdinÚfilenoÚOSErrorr›   r   rJ   r6   r[   r[   ‹  s`   € ðÝŒz�#œ)×*Ò*Ñ,Ô,Ñ-Ô-Ð-øÝð ð ð àˆzˆzÝð ð ð àˆtˆtðøøøs   ‚/2 ²
A¿	AÁA)NNNc              #   ó¶   K  — | rP	 t          | ¦  «        5 }|t          _        d V — d d d ¦  «         d S # 1 swxY w Y   d S # t          $ r d V — Y d S w xY wd V — d S r~   )Úopenr¢   r£   r¥   )r�   Úttys     r6   r�   r�   ›  sË   è è € àð 
ð	Ý�h‘”ð  3Ø•”	Ø���ðð ð ñ ô ð ð ð ð ð ð ð øøøð ð ð ð ð ð øõ ð 	ð 	ð 	àˆEˆEˆEˆEˆEˆEð	øøøð
 	ˆˆˆˆˆs,   †A  •3¦A  ³7·A  º7»A  Á AÁAÚsignumÚ_framec                 ój   — t                                dt          j        | ¦  «        ¦  «         t          ‚)Nz-received signal %s, raising KeyboardInterrupt)r/   r`   rw   ÚSignalsÚKeyboardInterrupt)r©   rª   s     r6   Úraise_keyboard_interruptr®   ª  s(   € Ý
‡N‚NÐBÅFÄNÐSYÑDZÔDZÑ[Ô[Ð[Ý
ÐrJ   c                  ó¦   — t                                dt          j        ¦   «         ¦  «         t	          j        t          j        t          ¦  «         dS )a  
    Catch SIGTERM and raise KeyboardInterrupt instead. This means watchfiles will stop quickly
    on `docker compose stop` and other cases where SIGTERM is sent.

    Without this the watchfiles process will be killed while a running process will continue uninterrupted.
    z8registering handler for SIGTERM on watchfiles process %dN)r/   r#   rW   Úgetpidrw   ÚSIGTERMr®   r   rJ   r6   r0   r0   ¯  s:   € õ ‡L‚LÐKÍRÌYÉ[Ì[ÑYÔYÐYÝ
„M•&”.Õ":Ñ;Ô;Ð;Ð;Ð;rJ   r~   )r*   N);Ú
contextlibrU   ÚloggingrW   ri   rG   rw   ra   r¢   Úcollections.abcr   r   Ú	importlibr   Úmultiprocessingr   Úmultiprocessing.contextr   Úpathlibr   Útimer	   Útypingr
   r   r9   Úfiltersr   Úmainr   r   r   r   r   Ú__all__Ú	getLoggerr/   rZ   ÚtupleÚdictÚsetr‹   ÚfloatrŠ   r   r   r]   ÚlistrI   r1   r   rK   r\   r   r[   Úcontextmanagerr�   r®   r0   r   rJ   r6   ú<module>rÅ      s  ðØ Ð Ð Ð Ø €€€Ø €€€Ø 	€	€	€	Ø 	€	€	€	Ø €€€Ø €€€Ø Ð Ð Ð Ø 
€
€
€
Ø /Ð /Ð /Ð /Ð /Ð /Ð /Ð /Ø #Ð #Ð #Ð #Ð #Ð #Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'Ø 0Ð 0Ð 0Ð 0Ð 0Ð 0Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø %Ð %Ð %Ð %Ð %Ð %Ð %Ð %à €€€à "Ð "Ð "Ð "Ð "Ð "Ø 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3àð ØÐÐÐÐÐà
N€Ø	ˆÔ	Ð,Ñ	-Ô	-€ð Ø$(Ø<BØ9=Ø9F¸¹¼ØØØØØØØØ%*ð}ð }ð }Ø�3‰Jð}à�(˜3 ˜8Ô$Ñ$ð}ð ��S�Œ/ð}ð ��c�ŒN˜TÑ!ð	}ð
 :ð}ð ˜˜JœÐ(¨$Ð.Ô/°$Ñ6ð}ð ˜F C˜=¨$Ð.Ô/°$Ñ6ð}ð ð}ð ð}ð ð}ð �$‰;ð}ð ð}ð ð}ð ð}ð #ð}ð  	ð!}ð }ð }ð }ðF Ø$(Ø<BØ8<Ø9F¸¹¼ØØØØØØ%*ðMð Mð MØ�3‰JðMà�(˜3 ˜8Ô$Ñ$ðMð ��S�Œ/ðMð ��c�ŒN˜TÑ!ð	Mð
 :ðMð ˜˜JœÐ(¨#Ð-Ô.°Ñ5ðMð ˜F C˜=¨$Ð.Ô/°$Ñ6ðMð ðMð ðMð ðMð �$‰;ðMð ðMð #ðMð 	ðMð Mð Mð Mðd �˜GÑ$Ô$€ð)�3ð )˜4 œ9ð )ð )ð )ð )ð '+ð!$ð !$Ø�(˜3 ˜8Ô$Ñ$ð!$à1ð!$ð ��S�Œ/ð!$ð ��c�ŒN˜TÑ!ð	!$ð
 �Œ_˜tÑ#ð!$ð ð!$ð !$ð !$ð !$ðH˜s X¨c°3¨hÔ%7Ñ7ð Ð<\ð ð ð ð ð@3&ð 3&ð 3&ð 3&ð 3&ñ 3&ô 3&ð 3&ðl˜3ð ¨#°©*ð ¸EÀ#ÀsÀ(¼Oð ÐUYÐZ]Ð_bÐZbÔUcð Ðhlð ð ð ð ðg˜sð g sð gð gð gð gð"�c˜D‘jð ð ð ð ð  Ôð�c˜D‘jð  YÐ/?Ô%@ð ð ð ñ Ôðð Sð °#ð ¸$ð ð ð ð ð
<ð <ð <ð <ð <ð <rJ   