Ë
    µŒj¿G  ã                  ó.  — d Z ddlm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mZmZ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mZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$ dd
l%m&Z&m'Z'm(Z( ddl)m*Z* ddl+m,Z, ddl-m.Z.m/Z/ ddl0m1Z1 ddl2m3Z3m4Z4m5Z5m6Z6 erddl7m8Z8 ddl9m:Z:  ejv                  e<«      Z=dZ>dZ?dZ@ G d„ deA«      ZB	 	 	 	 	 	 d!d„ZC	 	 	 	 	 	 d"d„ZD	 	 	 	 	 	 d#d„ZE	 d$	 	 	 	 	 d%d„ZF G d„ dee3«      ZGdddœ	 	 	 	 	 	 	 d&d„ZH	 	 d'	 	 	 	 	 	 	 	 	 	 	 	 	 d(d „ZIy))zWrapper around Prem's Chat API.é    )ÚannotationsN)ÚTYPE_CHECKINGÚAnyÚCallableÚDictÚIteratorÚListÚOptionalÚSequenceÚTupleÚTypeÚUnion)ÚCallbackManagerForLLMRun)ÚLanguageModelInput)ÚBaseChatModel)Úcreate_base_retry_decorator)Ú	AIMessageÚAIMessageChunkÚBaseMessageÚBaseMessageChunkÚChatMessageÚChatMessageChunkÚHumanMessageÚHumanMessageChunkÚSystemMessageÚSystemMessageChunkÚToolMessage)ÚChatGenerationÚChatGenerationChunkÚ
ChatResult)ÚRunnable)ÚBaseTool)Úget_from_dict_or_envÚpre_init)Úconvert_to_openai_tool)Ú	BaseModelÚ
ConfigDictÚFieldÚ	SecretStr)ÚChatCompletionResponseStream)ÚChatCompletionResponsezM
Given the set of tools you used and the response, provide the final answer

z
{json}
z3
tool id: {tool_id}
tool_response: {tool_response}
c                  ó   — e Zd ZdZy)ÚChatPremAPIErrorzError with the `PremAI` API.N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__© ó    úp/var/www/html/Fitness-lenito-AI-main/venv/lib/python3.12/site-packages/langchain_community/chat_models/premai.pyr-   r-   J   s   „ Ú&r3   r-   c                óT   — |€| S |D ]  }| j                  |«      }|dk7  sŒ| d| } Œ  | S )z0Truncates text at the earliest stop token found.Néÿÿÿÿ)Úfind)ÚtextÚstopÚ
stop_tokenÚstop_token_idxs       r4   Ú_truncate_at_stop_tokensr<   N   sA   € ð
 €|Øˆãˆ
ØŸ™ :Ó.ˆØ˜RÓØ˜˜Ð(‰Dð ð €Kr3   c           
     ó2  — | j                   st        d«      ‚g }| j                   D �]  }|j                  j                  }|€t        d|› d�«      ‚t	        |j                  j
                  xs d|¬«      }|€t        d|› �«      ‚|dk(  r^|j                  d	   }|€g }n"|D �cg c]  }|d
   |d   d   |d   d   dœ‘Œ }}|j                  t        |t        ||¬«      ¬«      «       ŒÃ|dk(  r'|j                  t        |t        |¬«      ¬«      «       Œï|j                  t        |t        ||¬«      ¬«      «       �Œ | j                  �5t        |d| j                  D �	cg c]  }	|	j                  «       ‘Œ c}	i¬«      S t        |ddi¬«      S c c}w c c}	w )z4Converts a Prem API response into a LangChain resultz-ChatResponse must have at least one candidateNzChatResponse z must have a role.Ú )r8   r9   z"ChatResponse must have a content: Ú	assistantÚ
tool_callsÚidÚfunctionÚnameÚ	arguments)rA   rC   Úargs)Úcontentr@   )r8   ÚmessageÚuser©rF   ©ÚrolerF   Údocument_chunks)ÚgenerationsÚ
llm_output)Úchoicesr-   rG   rK   r<   rF   Úappendr   r   r   r   rL   r    Úto_dict)
Úresponser9   rM   ÚchoicerK   rF   r@   ÚtoolsÚ	tool_callÚchunks
             r4   Ú_response_to_resultrW   ]   sÓ  € ð ×ÒÜÐNÓOÐOØ(*€KØ×"Õ"ˆØ�~‰~×"Ñ"ˆØˆ<Ü" ]°6°(Ð:LÐ#MÓNÐNô +°·±×0FÑ0FÒ0LÈ"ÐSWÔXˆØˆ?Ü"Ð%GÈÀyÐ#QÓRÐRà�;ÒØŸ™¨Ñ5ˆJØÐ!Ø‘ñ &0óñ &0˜	ð	 (¨™oØ )¨*Ñ 5°fÑ =Ø )¨*Ñ 5°kÑ Bóð
 &0ð ð ð ×ÑÜØ ¬)¸GÐPUÔ*Vôõð
 �VŠ^Ø×ÑÜ G´\È'Ô5RÔSõð ×ÑÜØ ¬+¸4ÈÔ*QôöðC #ðN ×ÑÐ+ÜØ#à!Ø19×1IÒ1Ió$Ù1I¨�E—M‘M•OÐ1Iñ$ðô
ð 	
ô  kÐ?PÐRVÐ>WÔXÐXùòEùò8$s   Â#FÅ Fc                ó¦  — | j                   d   j                  }|j                  dd«      }|j                  dd«      }i }| j                   d   j                  }|dk(  s	|t        k(  rt	        |¬«      |fS |dk(  s	|t
        k(  rt        ||¬«      |fS |d	k(  s	|t        k(  rt        |¬«      |fS |s	|t        k(  rt        ||¬
«      |fS  ||¬«      |fS )z(Converts delta response to message chunkr   rK   r>   rF   rH   rI   r?   )rF   Úadditional_kwargsÚsystem)rF   rK   )rO   ÚdeltaÚgetÚfinish_reasonr   r   r   r   )rR   Údefault_classÚ_deltarK   rF   rY   Úfinish_reasonss          r4   Ú(_convert_delta_response_to_message_chunkra   š   së   € ð ×Ñ˜aÑ ×&Ñ&€FØ�:‰:�f˜bÓ!€DØ�j‰j˜ BÓ'€GØ ÐØ$,×$4Ñ$4°QÑ$7×$EÑ$E€Nàˆv‚~˜Ô*;Ò;Ü ¨Ô1°>ÐAÐAØ	�Ò	 ´Ò ?ä 7Ð>OÔPØð
ð 	
ð 
�Ò	˜]Ô.@Ò@Ü!¨'Ô2°NÐBÐBÙ	�Ô"2Ò2Ü¨°dÔ;¸^ÐKÐKá WÔ-¨~Ð=Ð=r3   c                óD  — d}g }| D �]£  }t        |t        «      rt        |j                  «      }Œ*t        |t        «      r™|€(|j                  dt        |j                  «      dœ«       Œdi }|j                  �|j                  dk7  sJ t        dd«      «       ‚t        |j                  «      |t        |j                  «      <   |j                  d||dœ«       ŒÓt        |t        «      r¦|j                  �t        |j                  «      dk(  r)|j                  d	t        |j                  «      dœ«       �Œ0|j                  |j                  |j                  |j                  d
œ}|j                  d	t        j                  |¬«      dœ«       �Œ‰t        |t        «      r�Œ›t        d«      ‚ d}| D ]E  }t        |t        «      sŒ|j                   }|j                  }	|t"        j                  ||	¬«      z  }ŒG |dk7  rt$        }
|
|z  }
|j                  d|
dœ«       ||fS )zcConverts a list of LangChain Messages into a simple dict
    which is the message structure in PremNrH   rJ   r>   z9When using prompt template there should be id associated zwith each HumanMessage)rK   Útemplate_idÚparamsr   r?   )rA   rF   Úresponse_metadatar@   )ÚjsonzNo such role explicitly exists)Útool_idÚtool_response)Ú
isinstancer   ÚstrrF   r   rP   rA   Ú
ValueErrorr   r@   Úlenre   Ú!INTERMEDIATE_TOOL_RESULT_TEMPLATEÚformatr   r-   Útool_call_idÚSINGLE_TOOL_PROMPT_TEMPLATEÚTOOL_PROMPT_HEADER)Úinput_messagesrc   Úsystem_promptÚexamples_and_messagesÚ	input_msgrd   Úai_msg_to_jsonÚtool_promptrg   Útool_resultÚprompts              r4   Ú_messages_to_prompt_dictrz   ¶   s,  € ð $(€MØ24Ðä#ˆ	Ü�i¤Ô/Ü 	× 1Ñ 1Ó2‰Mä˜	¤<Ô0ØÐ"Ø%×,Ñ,à &Ü#& y×'8Ñ'8Ó#9ñõð *,�Ø!Ÿ™Ð0°y·|±|ÀrÒ7Ið ÌJØOØ,óMó ÐJô -0°	×0AÑ0AÓ,B�”s˜9Ÿ<™<Ó(Ñ)Ø%×,Ñ,à &Ø'2Ø"(ñõô ˜	¤9Ô-Ø×#Ñ#Ð+¬s°9×3GÑ3GÓ/HÈAÒ/MØ%×,Ñ,à +Ü#& y×'8Ñ'8Ó#9ñöð $Ÿ,™,Ø(×0Ñ0Ø)2×)DÑ)DØ"+×"6Ñ"6ñ	"�ð &×,Ñ,à +Ü#D×#KÑ#KØ!/ð $Ló $ñöô ˜	¤;Ô/Ùô #Ð#CÓDÐDðk $ðp €KÛ#ˆ	Ü�i¤Õ-Ø×,Ñ,ˆGØ#×+Ñ+ˆKØÔ6×=Ñ=Ø¨{ð >ó ñ ‰Kð	 $ð �bÒÜ#ˆØ�+ÑˆØ×$Ñ$¨fÀÑ%HÔIàÐ/Ð/Ð/r3   c                  óÊ  ‡ — e Zd ZU dZded<   	  edd¬«      Zded<   	  edd	¬«      Zd
ed<   	 dZd
ed<   	  ed¬«      Z	ded<   	 dZ
ded<   	  ed¬«      Zded<   	  ed¬«      Zded<   	 dZd
ed<   	 dZded<   	 dZded<   	 dZded<    eddd¬ «      Zed(d!„«       Zed)d"„«       Zed*d#„«       Zd+d$„Z	 	 d,	 	 	 	 	 	 	 	 	 d-d%„Z	 	 d,	 	 	 	 	 	 	 	 	 d.d&„Z	 	 	 	 	 	 d/ˆ fd'„Zˆ xZS )0Ú
ChatPremAIzªPremAI Chat models.

    To use, you will need to have an API key. You can find your existing API Key
    or generate a new one here: https://app.premai.io/api_keys/
    ÚintÚ
project_idNÚapi_key)ÚdefaultÚaliaszOptional[SecretStr]Úpremai_api_keyÚ
model_nameúOptional[str]ÚmodelÚ
session_id)r€   zOptional[float]ÚtemperatureÚtop_pzOptional[int]Ú
max_tokensé   Úmax_retriesr>   rs   zOptional[dict]ÚrepositoriesFúOptional[bool]Ú	streamingr   ÚclientTÚforbid)Úpopulate_by_nameÚarbitrary_types_allowedÚextrac                óô   — 	 ddl m} 	 t        |dd«      } |t	        |t
        «      r|n|j                  ¬«      |d<   |S # t        $ r}t        d«      |‚d}~ww xY w# t        $ r}t        d	«      |‚d}~ww xY w)
zFValidate that the package is installed and that the API token is validr   )ÚPremzQCould not import Prem Python package.Please install it with: `pip install premai`Nr‚   ÚPREMAI_API_KEY)r   r�   z,Your API Key is incorrect. Please try again.)	Úpremair•   ÚImportErrorr#   ri   rj   Ú_secret_valueÚ	Exceptionrk   )ÚclsÚvaluesr•   Úerrorr‚   s        r4   Úvalidate_environmentsz ChatPremAI.validate_environmentsF  sž   € ð	Ý#ð
	XÜ4HØÐ(Ð*:ó5ˆNñ  $ä˜n¬cÔ2ñ 'à#×1Ñ1ô ˆF�8Ñð ˆøô# ò 	Üð?óð ðûð	ûô ò 	XÜÐKÓLÐRWÐWûð	Xús.   ‚A  ‰5A Á 	AÁ	AÁAÁ	A7Á&A2Á2A7c                 ó   — y)Nr—   r2   ©Úselfs    r4   Ú	_llm_typezChatPremAI._llm_type^  s   € àr3   c                óv   — | j                   | j                  | j                  | j                  | j                  dœS )N©r…   rs   r‡   r‰   rŒ   r¤   r    s    r4   Ú_default_paramszChatPremAI._default_paramsb  s7   € ð —Z‘ZØ!×/Ñ/Ø×+Ñ+ØŸ/™/Ø ×-Ñ-ñ
ð 	
r3   c                óŽ  — g d¢}g }|D ]1  }||v sŒt        j                  d|› d�«       |j                  |«       Œ3 |D ]  }|j                  |«       Œ i | j                  ¥|¥}t        | j                  j                  «       «      D ]:  }|j                  |«      �|j                  |«      dk(  sŒ)|j                  |d «       Œ< |S )N)rˆ   Úfrequency_penaltyÚpresence_penaltyÚ
logit_biasr9   ÚseedzWARNING: Parameter z is not supported in kwargs.r>   )ÚwarningsÚwarnrP   Úpopr¥   ÚlistÚkeysr\   )r¡   ÚkwargsÚkwargs_to_ignoreÚkeys_to_removeÚkeyÚ
all_kwargss         r4   Ú_get_all_kwargszChatPremAI._get_all_kwargsl  sÊ   € ò
Ðð ˆãˆCØÐ&Ò&Ü—‘Ð 3°C°5Ð8TÐUÔVØ×%Ñ% cÕ*ð ó
 "ˆCØ�J‰J�s�Oð "ð 8˜×,Ñ,Ð7°Ð7ˆ
Ü˜×,Ñ,×1Ñ1Ó3Ö4ˆCØ�~‰~˜cÓ"Ð*¨j¯n©n¸SÓ.AÀRÓ.GØ—‘˜s DÕ)ð 5ð Ðr3   c                óÚ   — d|v rt        ||d   ¬«      \  }}nt        |«      \  }}|�
|dk7  r||d<    | j                  di |¤Ž}t        | f| j                  |d|dœ|¤Ž}t	        ||¬«      S )	Nrc   ©rc   r>   rs   F©r~   ÚmessagesÚstreamÚrun_manager)rR   r9   r2   )rz   rµ   Úchat_with_retryr~   rW   )	r¡   r¹   r9   r»   r°   rs   Úmessages_to_passr´   rR   s	            r4   Ú	_generatezChatPremAI._generate…  s    € ð ˜FÑ"Ü.FØ f¨]Ñ&;ô/Ñ+ˆMÑ+ô /GÀxÓ.PÑ+ˆMÐ+àÐ$¨¸"Ò)<Ø&3ˆF�?Ñ#à)�T×)Ñ)Ñ3¨FÑ3ˆ
Ü"Øð
à—‘Ø%ØØ#ñ
ð ñ
ˆô #¨H¸4Ô@Ð@r3   c              +  óä  K  — d|v rt        ||d   ¬«      \  }}nt        |«      \  }}|�t        j                  d«       d|vr|�
|dk7  r||d<    | j                  di |¤Ž}t        }t        | f| j                  |d|dœ|¤ŽD ]S  }		 t        |	|¬«      \  }
}|�t        |¬	«      nd }t        |
|¬
«      }|r|j                  |j                  |¬«       |–— ŒU y # t        $ r
}Y d }~Œed }~ww xY w­w)Nrc   r·   z,stop is not supported in langchain streamingrs   r>   Tr¸   )rR   r^   )r]   )rG   Úgeneration_info)rV   r2   )rz   ÚloggerÚwarningrµ   r   r¼   r~   ra   Údictr   Úon_llm_new_tokenr8   rš   )r¡   r¹   r9   r»   r°   rs   r½   r´   Údefault_chunk_classÚstreamed_responserV   r]   rÀ   Úcg_chunkÚ_s                  r4   Ú_streamzChatPremAI._stream¢  s6  è ø€ ð ˜FÑ"Ü.FØ f¨]Ñ&;ô/Ñ+ˆMÑ+ô /GÀxÓ.PÑ+ˆMÐ+àÐÜ�N‰NÐIÔJà &Ñ(ØÐ(¨]¸bÒ-@Ø*7��Ñ'à)�T×)Ñ)Ñ3¨FÑ3ˆ
ä,Ðä!0Øð"
à—‘Ø%ØØ#ñ"
ð ô"
ÐðÜ'OØ.Ð>Qô(Ñ$��}ð
 %Ð0ô  }Õ5àð  ô
 /Ø!°?ô�ñ Ø×0Ñ0°·±ÀhÐ0ÔOØ“ñ-"
øô. ò Üûðüs+   ‚BC0ÂACÃC0Ã	C-Ã#C0Ã(C-Ã-C0c                ó`   •— |D �cg c]  }t        |«      ‘Œ }}t        ‰| �  dd|i|¤ŽS c c}w )NrT   r2   )r%   ÚsuperÚbind)r¡   rT   r°   ÚtoolÚformatted_toolsÚ	__class__s        €r4   Ú
bind_toolszChatPremAI.bind_toolsÕ  s>   ø€ ñ
 EJÓJÁE¸DÔ1°$Õ7ÀEˆÐJÜ‰w‰|Ñ< /Ð<°VÑ<Ð<ùò Ks   †+)rœ   r   Úreturnr   )rÑ   rj   )rÑ   úDict[str, Any])r°   r   rÑ   rÒ   )NN)
r¹   úList[BaseMessage]r9   úOptional[List[str]]r»   ú"Optional[CallbackManagerForLLMRun]r°   r   rÑ   r    )
r¹   rÓ   r9   rÔ   r»   rÕ   r°   r   rÑ   zIterator[ChatGenerationChunk])rT   zDSequence[Union[Dict[str, Any], Type[BaseModel], Callable, BaseTool]]r°   r   rÑ   z)Runnable[LanguageModelInput, BaseMessage])r.   r/   r0   r1   Ú__annotations__r(   r‚   r…   r†   r‡   rˆ   r‰   r‹   rs   rŒ   rŽ   r�   r'   Úmodel_configr$   rž   Úpropertyr¢   r¥   rµ   r¾   rÉ   rÐ   Ú__classcell__)rÏ   s   @r4   r|   r|     sË  ø… ñð ƒOðLá*/¸ÀIÔ*N€NÐ'ÓNØGá ¨°\ÔB€Eˆ=ÓBð/ð
 !%€J�Ó$ØKá#(°Ô#6€K�Ó6Ø<à!€Eˆ?Ó!ðñ !&¨dÔ 3€J�Ó3à2á QÔ'€K�Ó'Ø/à#%€M�=Ó%ðð $(€L�.Ó'ðð !&€Iˆ~Ó%Ø1à€FˆCÓáØØ $Øô€Lð òó ðð. òó ðð ò
ó ð
óð8 %)Ø:>ð	Aà#ðAð "ðAð 8ð	Að
 ðAð 
óAð@ %)Ø:>ð	1à#ð1ð "ð1ð 8ð	1ð
 ð1ð 
'ó1ðf=àSð=ð ð=ð 
3÷	=ñ =r3   r|   rŠ   ©r‹   r»   c               ó  — ddl }|j                  j                  j                  |j                  j                  j
                  |j                  j                  j                  |j                  j                  j                  |j                  j                  j                  |j                  j                  j                  |j                  j                  j                  |j                  j                   j"                  |j                  j$                  j&                  |j                  j(                  j*                  |j                  j,                  j.                  |j                  j0                  j2                  g}t5        |||¬«      }|S )z/Create a retry decorator for PremAI API errors.r   N)Úerror_typesr‹   r»   )Úpremai.modelsÚmodelsÚapi_response_validation_errorÚAPIResponseValidationErrorÚconflict_errorÚConflictErrorÚmodel_not_found_errorÚModelNotFoundErrorÚpermission_denied_errorÚPermissionDeniedErrorÚprovider_api_connection_errorÚProviderAPIConnectionErrorÚprovider_api_status_errorÚProviderAPIStatusErrorÚprovider_api_timeout_errorÚProviderAPITimeoutErrorÚprovider_internal_server_errorÚProviderInternalServerErrorÚprovider_not_found_errorÚProviderNotFoundErrorÚrate_limit_errorÚRateLimitErrorÚunprocessable_entity_errorÚUnprocessableEntityErrorÚvalidation_errorÚValidationErrorr   )Úllmr‹   r»   r—   ÚerrorsÚ	decorators         r4   Úcreate_prem_retry_decoratorrú   Þ  s  € ó ð 	�‰×3Ñ3×NÑNØ�‰×$Ñ$×2Ñ2Ø�‰×+Ñ+×>Ñ>Ø�‰×-Ñ-×CÑCØ�‰×3Ñ3×NÑNØ�‰×/Ñ/×FÑFØ�‰×0Ñ0×HÑHØ�‰×4Ñ4×PÑPØ�‰×.Ñ.×DÑDØ�‰×&Ñ&×5Ñ5Ø�‰×0Ñ0×IÑIØ�‰×&Ñ&×6Ñ6ð€Fô ,Ø¨Àô€Ið Ðr3   c                óx   ‡ — t        ‰ ‰ j                  |¬«      }|	 d	 	 	 	 	 	 	 	 	 dˆ fd„«       } |d|||dœ|¤ŽS )z+Using tenacity for retry in completion callrÚ   c                óp   •—  ‰j                   j                  j                  j                  d| ||dœ|¤Ž}|S )N©r~   r¹   rº   r2   )r�   ÚchatÚcompletionsÚcreate)r~   r¹   rº   r°   rR   r÷   s        €r4   Ú_completion_with_retryz/chat_with_retry.<locals>._completion_with_retry	  sD   ø€ ð 6�3—:‘:—?‘?×.Ñ.×5Ñ5ð 
Ø!ØØñ
ð ñ	
ˆð ˆr3   rý   )F)
r~   r}   r¹   ú
List[dict]rº   r�   r°   r   rÑ   r   r2   )rú   r‹   )r÷   r~   r¹   rº   r»   r°   Úretry_decoratorr  s   `       r4   r¼   r¼   ü  sˆ   ø€ ô 2Ø˜Ÿ™°kô€Oð ð "'ðØðàðð ðð ð	ð
 
ôó ðñ "ð ØØØñð ñ	ð r3   )r8   rj   r9   rÔ   rÑ   rj   )rR   r+   r9   rÔ   rÑ   r    )rR   r*   r^   zType[BaseMessageChunk]rÑ   zdTuple[Union[BaseMessageChunk, HumanMessageChunk, AIMessageChunk, SystemMessageChunk], Optional[str]])N)rr   rÓ   rc   r„   rÑ   z*Tuple[Optional[str], List[Dict[str, Any]]])r÷   r|   r‹   r}   r»   z)Optional[Union[CallbackManagerForLLMRun]]rÑ   zCallable[[Any], Any])FN)r÷   r|   r~   r}   r¹   r  rº   Úboolr»   rÕ   r°   r   rÑ   r   )Jr1   Ú
__future__r   Úloggingr«   Útypingr   r   r   r   r   r	   r
   r   r   r   r   Úlangchain_core.callbacksr   Úlangchain_core.language_modelsr   Ú*langchain_core.language_models.chat_modelsr   Ú#langchain_core.language_models.llmsr   Úlangchain_core.messagesr   r   r   r   r   r   r   r   r   r   r   Úlangchain_core.outputsr   r   r    Úlangchain_core.runnablesr!   Úlangchain_core.toolsr"   Úlangchain_core.utilsr#   r$   Ú%langchain_core.utils.function_callingr%   Úpydanticr&   r'   r(   r)   Ú6premai.api.chat_completions.v1_chat_completions_creater*   Ú&premai.models.chat_completion_responser+   Ú	getLoggerr.   rÁ   rq   rm   rp   rš   r-   r<   rW   ra   rz   r|   rú   r¼   r2   r3   r4   Ú<module>r     sÍ  ðÙ %å "ã Û ÷÷ ÷ ñ õõ >Ý DÝ K÷÷ ÷ ñ ÷ SÑ RÝ -Ý )ß ?Ý H÷ó ñ õõ Nà	ˆ×	Ñ	˜8Ó	$€ðÐ ð%Ð !ðÐ ô'�yô 'ðØ
ðà
ðð 	óð:YØ$ð:Yà
ð:Yð ó:Yðz>Ø*ð>Ø;Qð>ðó>ð< "&ðO0Ø%ðO0àðO0ð 0óO0ôdS=� 	ô S=ðr Ø=Añ	Ø	ðð ðð ;ð	ð
 óðD Ø6:ð!Ø	ð!àð!ð ð!ð ð	!ð
 4ð!ð ð!ð 	ô!r3   