§
    AxÅj—,  ã                   óŠ  — d Z ddlZddlZddlZddlZddlmZmZmZm	Z	m
Z
mZm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mZ d
dlmZ d
dlm Z m!Z!m"Z"  e#ej$         %                    d¦  «        ¦  «         &                    de ¦  «        Z' e¦   «         Z( e"¦   «         Z)de
e#         fd„Z*dedee#         fd„Z+dde,fd„Z-	 ddede,de
ee	e#ef                           fd„Z.dede	e#ef         de/fd„Z0dede	e#ef         de	e#ef         fd„Z1dede	e#ef         dee	e#ee#ef         f         df         fd„Z2dS ) z
Job related helpers.
é    N)ÚAnyÚAsyncGeneratorÚCallableÚDictÚOptionalÚUnionÚList)ÚClientSessionÚTooManyRequests)ÚRunPodLoggeré   )Ú__version__é   )Úrp_debuggeré   )Úis_generator)Úsend_resultÚstream_result)Úcheck_return_size)Ú	WORKER_IDÚREF_COUNT_ZEROÚJobsProgressÚRUNPOD_WEBHOOK_GET_JOBz$IDÚreturnc                  óN   — dt           vrdS t                                dd¦  «        S )a  
    Prepare the URL for the worker's dedicated stop channel.

    Derived from the job-take URL so it points at the same endpoint and worker,
    preserving its query string (auth and routing params). Returns None when the
    job-take URL is not in the expected form.
    ú
/job-take/Nz
/job-stop/)ÚJOB_GET_URLÚreplace© ó    úQC:\Projects\Historical\venv\Lib\site-packages\runpod/serverless/modules/rp_job.pyÚ_job_stop_urlr"      s*   € ð �;Ð&Ð&ØˆtÝ×Ò˜|¨\Ñ:Ô:Ð:r    Úsessionc              ƒ   ó6  K  — t          ¦   «         }|sg S |                      |¦  «        4 ƒd{V —†}|j        dk    rg cddd¦  «        ƒd{V —† S |j        dk    r't          |j        |j        |j        |j        ¬¦  «        ‚|                     ¦   «          |j        dk    r6t           
                    d|j        › �¦  «         g cddd¦  «        ƒd{V —† S 	 |                     ¦   «         ƒ d{V —†}nT# t          j        t          f$ r;}t           
                    d|› �¦  «         g cY d}~cddd¦  «        ƒd{V —† S d}~ww xY wt          |t           ¦  «        sCt           
                    dt#          |¦  «        j        › �¦  «         g cddd¦  «        ƒd{V —† S |                     d	g ¦  «        }t          |t&          ¦  «        sCt           
                    d
t#          |¦  «        j        › �¦  «         g cddd¦  «        ƒd{V —† S d„ |D ¦   «         }t)          |¦  «        t)          |¦  «        k    r;t           
                    dt)          |¦  «        t)          |¦  «        z
  › d�¦  «         |cddd¦  «        ƒd{V —† S # 1 ƒd{V —†swxY w Y   dS )aŒ  
    Long-poll the dedicated stop channel for request ids the worker should stop.

    The server is expected to hold the request open (long-poll) until a stop
    signal is available or the poll times out, so cancellations and timeouts
    reach the worker without waiting for the next heartbeat.

    Returns:
        A list of request ids to stop. Empty when the poll returned no signals.
    NéÌ   é­  ©ÚstatusÚmessageúapplication/jsonz4rp_job | get_stop_signals: unexpected content type: z5rp_job | get_stop_signals: failed to parse response: z4rp_job | get_stop_signals: unexpected payload type: Ú
jobsToStopz5rp_job | get_stop_signals: jobsToStop is not a list: c                 ó<   — g | ]}t          |t          ¦  «        ¯|‘ŒS r   )Ú
isinstanceÚstr)Ú.0Újob_ids     r!   ú
<listcomp>z$get_stop_signals.<locals>.<listcomp>`   s'   € ÐKÐKÐK˜fµ:¸fÅcÑ3JÔ3JÐK�6ÐKÐKÐKr    z#rp_job | get_stop_signals: dropped z non-string job ids)r"   Úgetr(   r   Úrequest_infoÚhistoryÚreasonÚraise_for_statusÚcontent_typeÚlogÚwarnÚjsonÚaiohttpÚContentTypeErrorÚ
ValueErrorr-   ÚdictÚtypeÚ__name__ÚlistÚlen)r#   Ústop_urlÚresponseÚpayloadÚerrorÚraw_idsÚjob_idss          r!   Úget_stop_signalsrI   *   sZ  è è € õ ‰Œ€HØð Øˆ	à�{Š{˜8Ñ$Ô$ð ,ð ,ð ,ð ,ð ,ð ,ð ,¨ØŒ?˜cÒ!Ð!Øð,ð ,ð ,ð ,ñ ,ô ,ð ,ð ,ð ,ð ,ð ,ð ,ð ,ð ,ð Œ?˜cÒ!Ð!Ý!ØÔ%ØÔ Ø”Ø œð	ñ ô ð ð 	×!Ò!Ñ#Ô#Ð#àÔ Ð$6Ò6Ð6Ý�HŠHØ^ÀxÔG\Ð^Ð^ñô ð ð ð%,ð ,ð ,ð ,ñ ,ô ,ð ,ð ,ð ,ð ,ð ,ð ,ð ,ð ,ð(	Ø$ŸMšM™OœOÐ+Ð+Ð+Ð+Ð+Ð+ˆGˆGøÝÔ(­*Ð5ð 	ð 	ð 	Ý�HŠHÐTÈUÐTÐTÑUÔUÐUØˆIˆIˆIˆIˆIð1,ð ,ð ,ð ,ñ ,ô ,ð ,ð ,ð ,ð ,ð ,ð ,ð ,ð ,øøøøð,	øøøõ ˜'¥4Ñ(Ô(ð 	Ý�HŠHØ_ÅtÈGÁ}Ä}ÔG]Ð_Ð_ñô ð ð ð=,ð ,ð ,ð ,ñ ,ô ,ð ,ð ,ð ,ð ,ð ,ð ,ð ,ð ,ð@ —+’+˜l¨BÑ/Ô/ˆÝ˜'¥4Ñ(Ô(ð 	Ý�HŠHØ`ÍÈWÉÌÔH^Ð`Ð`ñô ð ð ðK,ð ,ð ,ð ,ñ ,ô ,ð ,ð ,ð ,ð ,ð ,ð ,ð ,ð ,ðN LÐK¨ÐKÑKÔKˆÝˆw‰<Œ<�3˜w™<œ<Ò'Ð'Ý�HŠHØfµc¸'±l´lÅSÈÁ\Ä\Ñ6QÐfÐfÐfñô ð ð ðY,ð ,ð ,ð ,ñ ,ô ,ð ,ð ,ð ,ð ,ð ,ð ,ð ,ð ,ð ,ð ,ð ,ð ,ð ,ð ,ð ,ð ,ð ,ð ,øøøð ,ð ,ð ,ð ,ð ,ð ,sW   °JÁA4JÃC3Ã2JÃ3EÄ	D?Ä'EÄ(JÄ?EÅAJÆAJÈA(JÊ
JÊJÚ
batch_sizec                 óì   — | dk    r$t                                dd¦  «        }|d| › �z  }nt           }t                               ¦   «         rdnd}|d|› �z  }t                               d|› �¦  «         |S )	a`  
    Prepare the URL for making a 'get' request to the serverless API (sls).

    This function constructs the appropriate URL for sending a 'get' request to the serverless API,
    ensuring that the request will be correctly routed and processed by the API.

    Returns:
        str: The prepared URL for the 'get' request to the serverless API.
    r   r   z/job-take-batch/z&batch_size=Ú1Ú0z&job_in_progress=zrp_job | get_job: )r   r   Újob_progressÚget_job_listr8   Údebug)rJ   Újob_take_urlÚjob_in_progresss      r!   Ú_job_get_urlrS   h   s‹   € ð �A‚~€~Ý"×*Ò*¨<Ð9KÑLÔLˆØÐ3 zÐ3Ð3Ñ3ˆˆå"ˆå)×6Ò6Ñ8Ô8ÐA�c�c¸c€OØÐ9¨Ð9Ð9Ñ9€Lå‡I‚IÐ1 <Ð1Ð1Ñ2Ô2Ð2ØÐr    Únum_jobsc              ƒ   óÌ  K  — |                       t          |¦  «        ¦  «        4 ƒd{V —†}t                               dt	          |¦  «        j        › d|j        › �¦  «         |j        dk    r.t                               d¦  «         	 ddd¦  «        ƒd{V —† dS |j        dk    r.t                               d¦  «         	 ddd¦  «        ƒd{V —† dS |j        dk    r't          |j        |j	        |j        |j
        ¬	¦  «        ‚|                     ¦   «          |j        d
k    r6t                               d|j        › �¦  «         	 ddd¦  «        ƒd{V —† dS |j        dk    r.t                               d¦  «         	 ddd¦  «        ƒd{V —† dS 	 |                     ¦   «         ƒ d{V —†}t                               d¦  «         nŠ# t          j        $ r7 t                               d|j        › �¦  «         Y ddd¦  «        ƒd{V —† dS t$          $ r9}t                               d|› �¦  «         Y d}~ddd¦  «        ƒd{V —† dS d}~ww xY wt'          |t(          ¦  «        r,d|vsd|vrt+          d¦  «        ‚|gcddd¦  «        ƒd{V —† S t'          |t,          ¦  «        r|cddd¦  «        ƒd{V —† S 	 ddd¦  «        ƒd{V —† dS # 1 ƒd{V —†swxY w Y   dS )a3  
    Get a job from the job-take API.

    `num_jobs = 1` will query the legacy singular job-take API.

    `num_jobs > 1` will query the batch job-take API.

    Args:
        session (ClientSession): The aiohttp ClientSession to use for the request.
        num_jobs (int): The number of jobs to get.
    Nzrp_job | Response: ú r%   z&rp_job | Received 204 status, no jobs.i�  zArp_job | Received 400 status, expected when FlashBoot is enabled.r&   r'   r*   z"rp_job | Unexpected content type: r   zrp_job | No content to parse.zrp_job | Received Job(s)z-rp_job | Response content is not valid JSON. z(rp_job | Failed to parse JSON response: ÚidÚinputz&Job has missing field(s): id or input.)r2   rS   r8   rP   r?   r@   r(   r   r3   r4   r5   r6   r7   Úcontent_lengthr:   r;   r<   Úcontentr=   r-   r>   Ú	ExceptionrA   )r#   rT   rD   ÚjobsÚ
json_errors        r!   Úget_jobr^   €   sC  è è € ð �{Š{�<¨Ñ1Ô1Ñ2Ô2ð 2ð 2ð 2ð 2ð 2ð 2ð 2°hÝ�	Š	ÐS­¨X©¬Ô(?ÐSÐSÀ(Ä/ÐSÐSÑTÔTÐTàŒ?˜cÒ!Ð!Ý�IŠIÐ>Ñ?Ô?Ð?Øð2ð 2ð 2ñ 2ô 2ð 2ð 2ð 2ð 2ð 2ð 2ð 2ð 2ð 2ð Œ?˜cÒ!Ð!Ý�IŠIÐYÑZÔZÐZØð2ð 2ð 2ñ 2ô 2ð 2ð 2ð 2ð 2ð 2ð 2ð 2ð 2ð 2ð Œ?˜cÒ!Ð!Ý!ØÔ%ØÔ Ø”Ø œð	ñ ô ð ð 	×!Ò!Ñ#Ô#Ð#ð Ô Ð$6Ò6Ð6Ý�IŠIÐR¸8Ô;PÐRÐRÑSÔSÐSØð32ð 2ð 2ñ 2ô 2ð 2ð 2ð 2ð 2ð 2ð 2ð 2ð 2ð 2ð8 Ô" aÒ'Ð'Ý�IŠIÐ5Ñ6Ô6Ð6Øð=2ð 2ð 2ñ 2ô 2ð 2ð 2ð 2ð 2ð 2ð 2ð 2ð 2ð 2ð@	Ø!Ÿš™œÐ(Ð(Ð(Ð(Ð(Ð(ˆDÝ�IŠIÐ0Ñ1Ô1Ð1Ð1øÝÔ'ð 	ð 	ð 	Ý�IŠIÐXÀhÔFVÐXÐXÑYÔYÐYØðK2ð 2ð 2ñ 2ô 2ð 2ð 2ð 2ð 2ð 2ð 2ð 2ð 2ð 2õL ð 	ð 	ð 	Ý�IŠIÐMÀÐMÐMÑNÔNÐNØˆFˆFˆFðQ2ð 2ð 2ñ 2ô 2ð 2ð 2ð 2ð 2ð 2ð 2ð 2ð 2ð 2øøøøðL	øøøõ
 �d�DÑ!Ô!ð 	Ø˜4ÐÐ 7°$Ð#6Ð#6ÝÐ HÑIÔIÐIØ�6ð]2ð 2ð 2ð 2ñ 2ô 2ð 2ð 2ð 2ð 2ð 2ð 2ð 2ð 2õb �d�DÑ!Ô!ð 	Øðe2ð 2ð 2ð 2ñ 2ô 2ð 2ð 2ð 2ð 2ð 2ð 2ð 2ð 2ðb	ðc2ð 2ð 2ñ 2ô 2ð 2ð 2ð 2ð 2ð 2ð 2ð 2ð 2ð 2ð 2ð 2ð 2ð 2ð 2ð 2ð 2ð 2ð 2ð 2øøøð 2ð 2ð 2ð 2ð 2ð 2sa   «AKÂ&KÃA4KÅ&KÆ4GÇ
KÇ1IÇ<KÈ	IÈIÈ6KÉIÉ1KÊKË
KË KÚconfigc              ƒ   ó.  K  — t          |d         ¦  «        �r4d}t          |d         |¦  «        }t                               d|d         ¦  «         dg i}|2 3 d {V —†}t                               d|› �|d         ¦  «         t	          |                     d¦  «        t          ¦  «        r8|d                              d¦  «        rdt          |d         d         ¦  «        i}|                     d¦  «        r|} nP|                     dd	¦  «        r!|d                              |d         ¦  «         t          | ||¦  «        ƒ d {V —† Œó6 nd	}t          |d         |¦  «        ƒ d {V —†}|                     d
d	¦  «        r&t                               d|d         ¦  «         d|d<   |                     di ¦  «                             dd	¦  «        rwt	          |t          ¦  «        rbt          j        ¦   «         |d         d<   t                               d|d         ¦  «         |d         t          z
  dz  }||d         d         d<   n4t                               d|d         ¦  «         t          j        ¦   «          t!          | |||¬¦  «        ƒ d {V —† d S )NÚhandlerTz*Handler is a generator, streaming results.rW   ÚoutputzStream output: rF   Úreturn_aggregate_streamFÚrefresh_workerz0refresh_worker flag set, stopping pod after job.ÚstopPodÚrp_argsr   z2rp_debugger | Flag set, returning debugger output.Úreference_counter_startiè  Úready_delay_msz5rp_debugger | Flag not set, skipping debugger output.)Ú	is_stream)r   Úrun_job_generatorr8   rP   r-   r2   r>   r.   Úappendr   Úrun_jobÚinfor   Úget_debugger_outputr   Úclear_debugger_outputr   )r#   r_   Újobri   Úgenerator_outputÚ
job_resultÚstream_outputÚready_delays           r!   Ú
handle_jobru   Ã   sØ  è è € Ý�F˜9Ô%Ñ&Ô&ñ ;Øˆ	Ý,¨V°IÔ->ÀÑDÔDÐÝ�	Š	Ð>ÀÀDÄ	ÑJÔJÐJà �^ˆ
Ø#3ð 	=ð 	=ð 	=ð 	=ð 	=ð 	=ð 	=�-Ý�IŠIÐ7¨Ð7Ð7¸¸T¼ÑCÔCÐCå˜-×+Ò+¨HÑ5Ô5µtÑ<Ô<ð UØ  Ô*×.Ò.¨wÑ7Ô7ð UØ%,­c°-ÀÔ2IÈ'Ô2RÑ.SÔ.SÐ$T�Mà× Ò  Ñ)Ô)ð Ø*�
Ø�à�zŠzÐ3°UÑ;Ô;ð EØ˜8Ô$×+Ò+¨M¸(Ô,CÑDÔDÐDå ¨¸Ñ<Ô<Ð<Ð<Ð<Ð<Ð<Ð<Ð<Ð<ð $4øð  ˆ	Ý" 6¨)Ô#4°cÑ:Ô:Ð:Ð:Ð:Ð:Ð:Ð:ˆ
ð ‡z‚zÐ" EÑ*Ô*ð %Ý�ŠÐCÀSÈÄYÑOÔOÐOØ $ˆ
�9Ñð ‡z‚z�)˜RÑ Ô ×$Ò$ ]°EÑ:Ô:ð 	,½zÈ*ÕVZÑ?[Ô?[ð 	,Ý.9Ô.MÑ.OÔ.Oˆ
�8Ô˜]Ñ+Ý�	Š	ÐFÈÈDÌ	ÑRÔRÐRð Ð7Ô8½>ÑIÈTÑQˆØ@Kˆ
�8Ô˜]Ô+Ð,<Ñ=Ð=å�	Š	ÐIÈ3ÈtÌ9ÑUÔUÐUÝÔ)Ñ+Ô+Ð+õ �g˜z¨3¸)Ð
DÑ
DÔ
DÐDÐDÐDÐDÐDÐDÐDÐDÐDs   ÁEra   rp   c           	   ƒ   óæ  K  — t                                d|d         ¦  «         i }	  | |¦  «        }t          j        |¦  «        r|ƒ d{V —†n|}t                                d|› �|d         ¦  «         t          |t          ¦  «        r@|                     dd¦  «        }|                     dd¦  «        }||d<   |r||d<   |rd|d	<   nt          |t          ¦  «        rd|i}nd|i}| 	                    d¦  «        i k    r|                     d¦  «         t          |¦  «         nþ# t          $ rñ}t          t          |¦  «        ¦  «        t          |¦  «        t          j        ¦   «         t           j         	                    d
d¦  «        t           j         	                    dd¦  «        t$          dœ}t                                d|d         ¦  «         t                                t)          j        |d¬¦  «        ¦  «         dt)          j        |¦  «        i}Y d}~nd}~ww xY wt                                d|› �|d         ¦  «         n)# t                                d|› �|d         ¦  «         w xY w|S )zß
    Run the job using the handler.

    Args:
        handler (Callable): The handler function to use.
        job (Dict[str, Any]): The job to run.

    Returns:
        Dict[str, Any]: The result of running the job.
    zStarted.rW   NzHandler output: rF   rd   rb   Tre   ÚRUNPOD_POD_HOSTNAMEÚunknownÚRUNPOD_POD_ID)Ú
error_typeÚerror_messageÚerror_tracebackÚhostnameÚ	worker_idÚrunpod_versionzCaptured Handler Exceptioné   )Úindentzrun_job return: )r8   rm   ÚinspectÚisawaitablerP   r-   r>   ÚpopÚboolr2   r   r[   r.   r?   Ú	tracebackÚ
format_excÚosÚenvironr   rF   r:   Údumps)	ra   rp   Ú
run_resultÚhandler_returnÚ
job_outputÚ	error_msgrd   ÚerrÚ
error_infos	            r!   rl   rl   ò   s€  è è € õ ‡H‚HˆZ˜˜TœÑ#Ô#Ð#Ø€Jð.>Ø ˜ ™œˆõ Ô" >Ñ2Ô2ð �.Ð Ð Ð Ð Ð Ð Ð àð 	õ 	�	Š	Ð1 ZÐ1Ð1°3°t´9Ñ=Ô=Ð=å�j¥$Ñ'Ô'ð 	0Ø"Ÿš w°Ñ5Ô5ˆIØ'Ÿ^š^Ð,<¸dÑCÔCˆNØ#-ˆJ�xÑ àð 0Ø&/�
˜7Ñ#Øð -Ø(,�
˜9Ñ%øå˜
¥DÑ)Ô)ð 	0Ø" JÐ/ˆJˆJð # JÐ/ˆJà�>Š>˜(Ñ#Ô# rÒ)Ð)Ø�NŠN˜8Ñ$Ô$Ð$å˜*Ñ%Ô%Ð%Ð%øåð 7ð 7ð 7å�d 3™iœi™.œ.Ý  ™XœXÝ(Ô3Ñ5Ô5Ýœ
ŸšÐ'<¸iÑHÔHÝœŸš¨¸ÑCÔCÝ,ð
ð 
ˆ
õ 	�	Š	Ð.°°D´	Ñ:Ô:Ð:Ý�	Š	•$”*˜Z°Ð2Ñ2Ô2Ñ3Ô3Ð3Ø�tœz¨*Ñ5Ô5Ð6ˆ
ˆ
ˆ
ˆ
ˆ
ˆ
øøøøð7øøøõ 	�	Š	Ð1 ZÐ1Ð1°3°t´9Ñ=Ô=Ð=Ð=ø��	Š	Ð1 ZÐ1Ð1°3°t´9Ñ=Ô=Ð=Ð=øøøàÐs1   §C=D% Ä$I Ä%
H Ä/C'HÈI ÈH È I É&I.c                ó¼  K  — t          j        | ¦  «        }t                               |rdnd|d         ¦  «         	  | |¦  «        }|r7|2 3 d{V —†}t                               d|› �|d         ¦  «         d|iW V — Œ36 n0|D ]-}t                               d|› �|d         ¦  «         d|iW V — Œ.nc# t          $ rV}t                               ||d         ¦  «         dd	t          |¦  «        › d
t          j        ¦   «         › �iW V — Y d}~nd}~ww xY wt           	                    d|d         ¦  «         dS # t           	                    d|d         ¦  «         w xY w)za
    Run generator job used to stream output.
    Yields output partials from the generator.
    zUsing Async GeneratorzUsing Standard GeneratorrW   NzAsync Generator output: rb   zGenerator output: rF   z	handler: z 
traceback: zFinished running generator.)
r‚   Úisasyncgenfunctionr8   rP   r[   rF   r.   r†   r‡   rm   )ra   rp   Úis_async_genr�   Úoutput_partialr�   s         r!   rj   rj   3  sÍ  è è € õ Ô-¨gÑ6Ô6€LÝ‡I‚IØ#/ÐOÐÐÐ5OØˆDŒ	ñô ð ð
;Ø�W˜S‘\”\ˆ
àð 	1Ø(2ð 1ð 1ð 1ð 1ð 1ð 1ð 1�nÝ—	’	ÐE°^ÐEÐEÀsÈ4ÄyÑQÔQÐQØ Ð0Ð0Ð0Ð0Ð0Ð0ð )3¨
ð #-ð 1ð 1�Ý—	’	Ð?¨~Ð?Ð?ÀÀTÄÑKÔKÐKØ Ð0Ð0Ð0Ð0Ð0Ð0øøåð Vð Vð VÝ�	Š	�#�s˜4”yÑ!Ô!Ð!ØÐT¥C¨¡H¤HÐTÐT½IÔ<PÑ<RÔ<RÐTÐTÐUÐUÐUÐUÐUÐUÐUÐUÐUÐUøøøøðVøøøõ 	�ŠÐ.°°D´	Ñ:Ô:Ð:Ð:Ð:ø��ŠÐ.°°D´	Ñ:Ô:Ð:Ð:øøøs=   ½B2 ÁA?ÁAB2 Â1D8 Â2
DÂ<ADÄD8 ÄDÄD8 Ä8#E)r   )3Ú__doc__r‚   r:   rˆ   r†   Útypingr   r   r   r   r   r   r	   r;   Úrunpod.http_clientr
   r   Ú#runpod.serverless.modules.rp_loggerr   Úversionr   r   Úutilsr   Ú
rp_handlerr   Úrp_httpr   r   Úrp_tipsr   Úworker_stater   r   r   r.   r‰   r2   r   r   r8   rN   r"   rI   ÚintrS   r^   r>   ru   rl   rj   r   r    r!   ú<module>r       sç  ððð ð €€€Ø €€€Ø 	€	€	€	Ø Ð Ð Ð Ø MÐ MÐ MÐ MÐ MÐ MÐ MÐ MÐ MÐ MÐ MÐ MÐ MÐ MÐ MÐ MÐ MÐ Mà €€€à =Ð =Ð =Ð =Ð =Ð =Ð =Ð =Ø <Ð <Ð <Ð <Ð <Ð <à 4Ð 4Ð 4Ð 4Ð 4Ð 4Ø Ð Ð Ð Ð Ð Ø $Ð $Ð $Ð $Ð $Ð $Ø /Ð /Ð /Ð /Ð /Ð /Ð /Ð /Ø &Ð &Ð &Ð &Ð &Ð &Ø AÐ AÐ AÐ AÐ AÐ AÐ AÐ AÐ AÐ Aàˆc�"”*—.’.Ð!9Ñ:Ô:Ñ;Ô;×CÒCÀEÈ9ÑUÔU€à€l�n„n€Øˆ|‰~Œ~€ð
;�x ”}ð 
;ð 
;ð 
;ð 
;ð; Mð ;°d¸3´ið ;ð ;ð ;ð ;ð|ð ˜Sð ð ð ð ð2 -.ð@ð @Øð@Ø&)ð@àˆd�4˜˜S˜”>Ô"Ô#ð@ð @ð @ð @ðF,E˜mð ,E°T¸#¸s¸(´^ð ,EÈTð ,Eð ,Eð ,Eð ,Eð^>˜8ð >¨$¨s°C¨x¬.ð >¸TÀ#ÀsÀ(¼^ð >ð >ð >ð >ðB;Øð;Ø   c œNð;à�D˜˜e C¨ HœoÐ-Ô.°Ð4Ô5ð;ð ;ð ;ð ;ð ;ð ;r    