§
    æ˜ºh«<  ã                  ó8  — d dl mZ d dlZd dlZd dlmZ d dl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mZmZmZ d d	lmZ d d
lmZ d dlmZmZ erd dl m!Z! dZ"dZ#dZ$dd„Z%dd„Z& G d„ d¦  «        Z' G d„ dee¦  «        Z( G d„ dee(¦  «        Z)dS )é    )ÚannotationsN)ÚABC)ÚTYPE_CHECKINGÚAnyÚDictÚIteratorÚListÚMappingÚOptional)ÚCallbackManagerForLLMRun)ÚLLM)ÚGenerationChunk)Ú	BaseModelÚExtraÚFieldÚroot_validator)Úget_from_dict_or_env)Úenforce_stop_tokens)Úget_num_tokens_anthropicÚget_token_ids_anthropic)ÚConfigz

Human:z

Assistant:zCError: Prompt must alternate between '

Human:' and '

Assistant:'.Ú
input_textÚstrÚreturnc                ó¢   — | }dD ]I}|                      |d|z   ¦  «        }t          d¦  «        D ]}|                      d|z   d|z   ¦  «        }ŒŒJ|S )N)úHuman:ú
Assistant:ú

é   z


)ÚreplaceÚrange)r   Únew_textÚwordÚis       úh/var/www/html/services/rag-service/venv/lib/python3.11/site-packages/langchain_community/llms/bedrock.pyÚ_add_newlines_before_har&      sr   € Ø€HØ(ð Hð HˆØ×#Ò# D¨&°4©-Ñ8Ô8ˆÝ�q‘”ð 	Hð 	HˆAØ×'Ò'¨°4©¸À$¹ÑGÔGˆHˆHð	Hà€Oó    c                ó  — |                       d¦  «        dk    s0|                      d¦  «        |                      d¦  «        k    rd| v rt          dz   | z   } |                       d¦  «        dk    r
| t          z   } | d t	          d¦  «        …         dk    rd| z   } t          | ¦  «        } d}t          t	          | ¦  «        ¦  «        D ]®}| ||t	          t          ¦  «        z   …         t          k    r.|dz  dk    r|dz  }nt          j        t          d| › �z   ¦  «         | ||t	          t          ¦  «        z   …         t          k    r.|dz  dk    r|dz  }Œ�t          j        t          d| › �z   ¦  «         Œ¯|dz  dk    r
| t          z   } | S )	Nr   r   r   ú r   r   é   z
 Received )
ÚcountÚfindÚHUMAN_PROMPTÚASSISTANT_PROMPTÚlenr&   r!   ÚwarningsÚwarnÚALTERNATION_ERROR)r   r+   r$   s      r%   Ú_human_assistant_formatr3   '   s¤  € Ø×Ò˜Ñ!Ô! QÒ&Ð&Ø�Š˜Ñ!Ô! J§O¢O°LÑ$AÔ$AÒAÐAØ˜JÐ&Ð&å! CÑ'¨*Ñ4ˆ
Ø×Ò˜Ñ%Ô%¨Ò*Ð*ØÕ"2Ñ2ˆ
Ø�/•C˜‘M”M�/Ô" hÒ.Ð.Ø˜jÑ(ˆ
Ý(¨Ñ4Ô4€JØ€Eå•3�z‘?”?Ñ#Ô#ð 
Mð 
MˆØ�a˜!�c¥,Ñ/Ô/Ñ/Ð/Ô0µLÒ@Ð@Ø�q‰y˜AŠ~ˆ~Ø˜‘
��å”Õ/Ð2K¸zÐ2KÐ2KÑKÑLÔLÐLØ�a˜!�cÕ"2Ñ3Ô3Ñ3Ð3Ô4Õ8HÒHÐHØ�q‰y˜AŠ~ˆ~Ø˜‘
��å”Õ/Ð2K¸zÐ2KÐ2KÑKÑLÔLÐLøàˆq�y�A‚~€~ØÕ"2Ñ2ˆ
àÐr'   c                  ól   — e Zd ZdZdddddœZedd„¦   «         Zedd„¦   «         Ze	 ddd„¦   «         ZdS )ÚLLMInputOutputAdapterz»Adapter class to prepare the inputs from Langchain to a format
    that LLM model expects.

    It also provides helper function to extract
    the generated text from the model response.Ú
completionÚ
outputTextÚtextÚ
generation)Ú	anthropicÚamazonÚcohereÚmetaÚproviderr   ÚpromptÚmodel_kwargsúDict[str, Any]r   c                ó¾   — i |¥}|dk    rt          |¦  «        |d<   n0|dv r||d<   n&|dk    rt          ¦   «         }||d<   i |¥|d<   n||d<   |dk    r	d|vrd|d<   |S )	Nr:   r?   )Úai21r<   r=   r;   Ú	inputTextÚtextGenerationConfigÚmax_tokens_to_sampleé   )r3   Údict)Úclsr>   r?   r@   Ú
input_bodys        r%   Úprepare_inputz#LLMInputOutputAdapter.prepare_inputT   s©   € ð &˜Ð%ˆ
Ø�{Ò"Ð"Ý#:¸6Ñ#BÔ#BˆJ�xÑ Ð ØÐ3Ð3Ð3Ø#)ˆJ�xÑ Ð Ø˜Ò!Ð!Ý™œˆJØ&,ˆJ�{Ñ#Ø1A°LÐ1AˆJÐ-Ñ.Ð.à&,ˆJ�{Ñ#à�{Ò"Ð"Ð'=ÀZÐ'OÐ'OØ14ˆJÐ-Ñ.àÐr'   Úresponser   c                óÈ  — |dk    r`t          j        |                     d¦  «                             ¦   «                              ¦   «         ¦  «        }|                     d¦  «        S t          j        |                     d¦  «                             ¦   «         ¦  «        }|dk    rA|                     d¦  «        d                              d¦  «                             d¦  «        S |d	k    r.|                     d
¦  «        d                              d¦  «        S |dk    r|                     d¦  «        S |                     d¦  «        d                              d¦  «        S )Nr:   Úbodyr6   rC   Úcompletionsr   Údatar8   r<   Úgenerationsr=   r9   Úresultsr7   )ÚjsonÚloadsÚgetÚreadÚdecode)rI   r>   rL   Úresponse_bodys       r%   Úprepare_outputz$LLMInputOutputAdapter.prepare_outputi   s3  € à�{Ò"Ð"Ý œJ x§|¢|°FÑ';Ô';×'@Ò'@Ñ'BÔ'B×'IÒ'IÑ'KÔ'KÑLÔLˆMØ ×$Ò$ \Ñ2Ô2Ð2å œJ x§|¢|°FÑ';Ô';×'@Ò'@Ñ'BÔ'BÑCÔCˆMà�vÒÐØ ×$Ò$ ]Ñ3Ô3°AÔ6×:Ò:¸6ÑBÔB×FÒFÀvÑNÔNÐNØ˜Ò!Ð!Ø ×$Ò$ ]Ñ3Ô3°AÔ6×:Ò:¸6ÑBÔBÐBØ˜ÒÐØ ×$Ò$ \Ñ2Ô2Ð2à ×$Ò$ YÑ/Ô/°Ô2×6Ò6°|ÑDÔDÐDr'   NÚstopúOptional[List[str]]úIterator[GenerationChunk]c              #  ó²  K  — |                      d¦  «        }|sd S || j        vrt          d|› �¦  «        ‚|D ]�}|                      d¦  «        }|r„t          j        |                      d¦  «                             ¦   «         ¦  «        }|dk    r"|d         s|| j        |                  dk    r d S t          || j        |                  ¬¦  «        V — Œžd S )	NrN   z4Unknown streaming response output key for provider: ÚchunkÚbytesr<   Úis_finishedz<EOS_TOKEN>)r8   )rU   Úprovider_to_output_key_mapÚ
ValueErrorrS   rT   rW   r   )rI   r>   rL   rZ   ÚstreamÚeventr^   Ú	chunk_objs           r%   Úprepare_output_streamz+LLMInputOutputAdapter.prepare_output_streamz   s  è è € ð —’˜fÑ%Ô%ˆàð 	ØˆFà˜3Ô9Ð9Ð9ÝØQÀxÐQÐQñô ð ð ð 	ð 	ˆEØ—I’I˜gÑ&Ô&ˆEØð Ý œJ u§y¢y°Ñ'9Ô'9×'@Ò'@Ñ'BÔ'BÑCÔC�	Ø˜xÒ'Ð'Ø˜mÔ,ð (à  Ô!?ÀÔ!IÔJØ$ò%ð %ð �F�Fõ &Ø" 3Ô#AÀ(Ô#KÔLðñ ô ð ð ð øð	ð 	r'   )r>   r   r?   r   r@   rA   r   rA   )r>   r   rL   r   r   r   ©N)r>   r   rL   r   rZ   r[   r   r\   )	Ú__name__Ú
__module__Ú__qualname__Ú__doc__ra   ÚclassmethodrK   rY   rf   © r'   r%   r5   r5   F   s¥   € € € € € ð3ð 3ð "ØØØð	"ð "Ðð ðð ð ñ „[ðð( ðEð Eð Eñ „[ðEð  àGKðð ð ð ñ „[ðð ð r'   r5   c                  óL  — e Zd ZU dZ ed¬¦  «        Zded<   dZded<   	  edd¬	¦  «        Zded
<   	 dZ	ded<   	 ded<   	 dZ
ded<   	 dZded<   	 dZded<   	 dddddœZded<    e¦   «         d+d„¦   «         Zed,d„¦   «         Zd-d „Zed.d!„¦   «         Z	 	 d/d0d(„Z	 	 d/d1d*„ZdS )2ÚBedrockBasezBase class for Bedrock models.T)Úexcluder   ÚclientNzOptional[str]Úregion_name)Údefaultrp   Úcredentials_profile_namezOptional[Config]Úconfigr   Úmodel_idzOptional[Dict]r@   Úendpoint_urlFÚboolÚ	streamingÚstop_sequencesÚstopSequences)r:   r;   rC   r<   zMapping[str, str]Ú#provider_stop_sequence_key_name_mapÚvaluesr   r   c                óØ  — |d         �|S 	 ddl }|d         �|                     |d         ¬¦  «        }n|                     ¦   «         }t          |dd|j        ¬¦  «        |d<   i }|d         r|d         |d<   |d	         r|d	         |d	<   |d
         r|d
         |d
<    |j        di |¤Ž|d<   n:# t
          $ r t          d¦  «        ‚t          $ r}t          d¦  «        |‚d}~ww xY w|S )zJValidate that AWS credentials to and python package exists in environment.rq   Nr   rt   )Úprofile_namerr   ÚAWS_DEFAULT_REGION)rs   rw   ru   úbedrock-runtimezRCould not import boto3 python package. Please install it with `pip install boto3`.z‚Could not load credentials to authenticate with AWS client. Please check that credentials in the specified profile name are valid.)r�   )	Úboto3ÚSessionr   rr   rq   ÚImportErrorÚModuleNotFoundErrorÚ	Exceptionrb   )rI   r}   r‚   ÚsessionÚclient_paramsÚes         r%   Úvalidate_environmentz BedrockBase.validate_environmentÂ   si  € ð
 �(ÔÐ'ØˆMð$	ØˆLˆLˆLàÐ0Ô1Ð=ØŸ-š-°VÐ<VÔ5W˜-ÑXÔX��ð  Ÿ-š-™/œ/�å$8ØØØ$ØÔ+ð	%ñ %ô %ˆF�=Ñ!ð ˆMØ�mÔ$ð EØ/5°mÔ/D�˜mÑ,Ø�nÔ%ð GØ06°~Ô0F�˜nÑ-Ø�hÔð ;Ø*0°Ô*:�˜hÑ'à-˜wœ~ÐQÐQÀ=ÐQÐQˆF�8ÑÐøåð 	ð 	ð 	Ý%ð>ñô ð õ ð 	ð 	ð 	Ýð*ñô ð ð	øøøøð	øøøð ˆs   ŒB#B0 Â0"C'ÃC"Ã"C'úMapping[str, Any]c                ó    — | j         pi }i d|i¥S )zGet the identifying parameters.r@   )r@   )ÚselfÚ_model_kwargss     r%   Ú_identifying_paramszBedrockBase._identifying_paramsò   s(   € ð Ô)Ð/¨Rˆð
Ø˜}Ð-ð
ð 	
r'   c                óB   — | j                              d¦  «        d         S )Nú.r   )rv   Úsplit©r�   s    r%   Ú_get_providerzBedrockBase._get_providerú   s   € ØŒ}×"Ò" 3Ñ'Ô'¨Ô*Ð*r'   c                ó2   — |                       ¦   «         dk    S )Nr:   )r”   r“   s    r%   Ú_model_is_anthropiczBedrockBase._model_is_anthropicý   s   € à×!Ò!Ñ#Ô# {Ò2Ð2r'   r?   rZ   r[   Úrun_managerú"Optional[CallbackManagerForLLMRun]Úkwargsc                óÐ  — | j         pi }|                      ¦   «         }i |¥|¥}t                               |||¦  «        }t	          j        |¦  «        }	d}
d}	 | j                             |	| j        |
|¬¦  «        }t           	                    ||¦  «        }n<# t          $ r/}t          d|› �¦  «                             |j        ¦  «        ‚d }~ww xY w|�t          ||¦  «        }|S )Núapplication/json©rN   ÚmodelIdÚacceptÚcontentTypeú!Error raised by bedrock service: )r@   r”   r5   rK   rS   Údumpsrq   Úinvoke_modelrv   rY   r†   rb   Úwith_tracebackÚ__traceback__r   )r�   r?   rZ   r—   r™   rŽ   r>   ÚparamsrJ   rN   rž   rŸ   rL   r8   r‰   s                  r%   Ú_prepare_input_and_invokez%BedrockBase._prepare_input_and_invoke  s  € ð Ô)Ð/¨Rˆà×%Ò%Ñ'Ô'ˆØ,�MÐ, VÐ,ˆÝ*×8Ò8¸À6È6ÑRÔRˆ
ÝŒz˜*Ñ%Ô%ˆØ#ˆØ(ˆð		Ø”{×/Ò/Ø 4¤=¸È[ð 0ñ ô ˆHõ )×7Ò7¸À(ÑKÔKˆDˆDøåð 	ð 	ð 	ÝÐDÀÐDÐDÑEÔE×TÒTØ”ñô ð øøøøð	øøøð
 ÐÝ& t¨TÑ2Ô2ˆDàˆs   Á>B Â
CÂ"*CÃCr\   c              +  óP  K  — | j         pi }|                      ¦   «         }|r9|| j        vrt          d|› d�¦  «        ‚||| j                             |¦  «        <   |dk    rd|d<   i |¥|¥}t
                               |||¦  «        }t          j        |¦  «        }		 | j	         
                    |	| j        dd¬¦  «        }
n$# t          $ r}t          d|› �¦  «        ‚d }~ww xY wt
                               ||
|¦  «        D ]$}|V — |�|                     |j        |¬	¦  «         Œ%d S )
NzStop sequence key name for z is not supported.r<   Trc   r›   rœ   r    )r^   )r@   r”   r|   rb   rU   r5   rK   rS   r¡   rq   Ú!invoke_model_with_response_streamrv   r†   rf   Úon_llm_new_tokenr8   )r�   r?   rZ   r—   r™   rŽ   r>   r¥   rJ   rN   rL   r‰   r^   s                r%   Ú _prepare_input_and_invoke_streamz,BedrockBase._prepare_input_and_invoke_stream!  s˜  è è € ð Ô)Ð/¨RˆØ×%Ò%Ñ'Ô'ˆàð 	YØ˜tÔGÐGÐGÝ ØN°(ÐNÐNÐNñô ð ð UYˆM˜$ÔB×FÒFÀxÑPÔPÑQà�xÒÐØ&*ˆM˜(Ñ#à,�MÐ, VÐ,ˆÝ*×8Ò8¸À6È6ÑRÔRˆ
ÝŒz˜*Ñ%Ô%ˆð	FØ”{×DÒDØØœØ)Ø.ð	 Eñ ô ˆHˆHøõ ð 	Fð 	Fð 	FÝÐDÀÐDÐDÑEÔEÐEøøøøð	Føøøõ +×@Ò@Ø�h ñ
ô 
ð 	Fð 	FˆEð ˆKˆKˆKØÐ&Ø×,Ò,¨U¬Z¸uÐ,ÑEÔEÐEøð	Fð 	Fs   Â#C Ã
C"ÃCÃC")r}   r   r   r   )r   r‹   ©r   r   ©r   rx   ©NN©
r?   r   rZ   r[   r—   r˜   r™   r   r   r   ©
r?   r   rZ   r[   r—   r˜   r™   r   r   r\   )rh   ri   rj   rk   r   rq   Ú__annotations__rr   rt   ru   r@   rw   ry   r|   r   rŠ   Úpropertyr�   r”   r–   r¦   rª   rm   r'   r%   ro   ro   ™   sÒ  € € € € € € Ø(Ð(à�% Ð%Ñ%Ô%€FÐ%Ð%Ð%Ñ%à!%€KÐ%Ð%Ð%Ñ%ðð /4¨e¸DÈ$Ð.OÑ.OÔ.OÐÐOÐOÐOÑOðð  $€FÐ#Ð#Ð#Ñ#ØLà€M€M�MðLð $(€LÐ'Ð'Ð'Ñ'Ø1à"&€LÐ&Ð&Ð&Ñ&ØCà€IÐÐÐÑØ(ð &Ø!Ø Ø"ð	>ð >Ð'ð ð ð ñ ð €^ÑÔð-ð -ð -ñ Ôð-ð^ ð
ð 
ð 
ñ „Xð
ð+ð +ð +ð +ð ð3ð 3ð 3ñ „Xð3ð %)Ø:>ð	ð ð ð ð ðF %)Ø:>ð	*Fð *Fð *Fð *Fð *Fð *Fð *Fr'   ro   c                  óÈ   ‡ — e Zd ZdZ	 edd„¦   «         Zedd„¦   «         Zedd„¦   «         Zed d
„¦   «         Z	 G d„ d¦  «        Z
	 	 d!d"d„Z	 	 d!d#d„Zd$ˆ fd„Zd%ˆ fd„Zˆ xZS )&ÚBedrockaÍ  Bedrock models.

    To authenticate, the AWS client uses the following methods to
    automatically load credentials:
    https://boto3.amazonaws.com/v1/documentation/api/latest/guide/credentials.html

    If a specific credential profile should be used, you must pass
    the name of the profile from the ~/.aws/credentials file that is to be used.

    Make sure the credentials / roles used have the required policies to
    access the Bedrock service.
    r   r   c                ó   — dS )zReturn type of llm.Úamazon_bedrockrm   r“   s    r%   Ú	_llm_typezBedrock._llm_typej  s
   € ð  Ðr'   rx   c                ó   — dS )z9Return whether this model can be serialized by Langchain.Trm   ©rI   s    r%   Úis_lc_serializablezBedrock.is_lc_serializableo  s	   € ð ˆtr'   ú	List[str]c                ó
   — g d¢S )z*Get the namespace of the langchain object.)Ú	langchainÚllmsÚbedrockrm   r¸   s    r%   Úget_lc_namespacezBedrock.get_lc_namespacet  s   € ð 0Ð/Ð/Ð/r'   rA   c                ó,   — i }| j         r
| j         |d<   |S )Nrr   )rr   )r�   Ú
attributess     r%   Úlc_attributeszBedrock.lc_attributesy  s%   € à%'ˆ
àÔð 	9Ø(,Ô(8ˆJ�}Ñ%àÐr'   c                  ó    — e Zd ZdZej        ZdS )úBedrock.Configz'Configuration for this pydantic object.N)rh   ri   rj   rk   r   ÚforbidÚextrarm   r'   r%   r   rÄ   ‚  s   € € € € € Ø5Ð5à”ˆˆˆr'   r   Nr?   rZ   r[   r—   r˜   r™   r   r\   c                ó$   —  | j         d|||dœ|¤ŽS )a�  Call out to Bedrock service with streaming.

        Args:
            prompt (str): The prompt to pass into the model
            stop (Optional[List[str]], optional): Stop sequences. These will
                override any stop sequences in the `model_kwargs` attribute.
                Defaults to None.
            run_manager (Optional[CallbackManagerForLLMRun], optional): Callback
                run managers used to process the output. Defaults to None.

        Returns:
            Iterator[GenerationChunk]: Generator that yields the streamed responses.

        Yields:
            Iterator[GenerationChunk]: Responses from the model.
        ©r?   rZ   r—   rm   )rª   )r�   r?   rZ   r—   r™   s        r%   Ú_streamzBedrock._stream‡  s4   € ð. 5ˆtÔ4ð 
Ø °+ð
ð 
ØAGð
ð 
ð 	
r'   c                ót   — | j         r"d} | j        d|||dœ|¤ŽD ]}||j        z  }Œ|S  | j        d||dœ|¤ŽS )a`  Call out to Bedrock service model.

        Args:
            prompt: The prompt to pass into the model.
            stop: Optional list of stop words to use when generating.

        Returns:
            The string generated by the model.

        Example:
            .. code-block:: python

                response = llm("Tell me a joke.")
        Ú rÈ   )r?   rZ   rm   )ry   rÉ   r8   r¦   )r�   r?   rZ   r—   r™   r6   r^   s          r%   Ú_callzBedrock._call¢  s   € ð, Œ>ð 	ØˆJØ%˜œð Ø D°kðð ØEKðð ð )ð )�ð ˜eœjÑ(�
�
ØÐà-ˆtÔ-ÐQ°VÀ$ÐQÐQÈ&ÐQÐQÐQr'   r8   Úintc                ór   •— | j         rt          |¦  «        S t          ¦   «                              |¦  «        S rg   )r–   r   ÚsuperÚget_num_tokens©r�   r8   Ú	__class__s     €r%   rÐ   zBedrock.get_num_tokensÂ  s4   ø€ ØÔ#ð 	0Ý+¨DÑ1Ô1Ð1å‘7”7×)Ò)¨$Ñ/Ô/Ð/r'   ú	List[int]c                ór   •— | j         rt          |¦  «        S t          ¦   «                              |¦  «        S rg   )r–   r   rÏ   Úget_token_idsrÑ   s     €r%   rÕ   zBedrock.get_token_idsÈ  s4   ø€ ØÔ#ð 	/Ý*¨4Ñ0Ô0Ð0å‘7”7×(Ò(¨Ñ.Ô.Ð.r'   r«   r¬   )r   rº   )r   rA   r­   r¯   r®   )r8   r   r   rÍ   )r8   r   r   rÓ   )rh   ri   rj   rk   r±   r¶   rl   r¹   r¿   rÂ   r   rÉ   rÌ   rÐ   rÕ   Ú__classcell__)rÒ   s   @r%   r³   r³   N  sZ  ø€ € € € € ðð ðð ð ð  ð  ñ „Xð ð ðð ð ñ „[ðð ð0ð 0ð 0ñ „[ð0ð ðð ð ñ „Xððð ð ð ð ñ ô ð ð %)Ø:>ð	
ð 
ð 
ð 
ð 
ð< %)Ø:>ð	Rð Rð Rð Rð Rð@0ð 0ð 0ð 0ð 0ð 0ð/ð /ð /ð /ð /ð /ð /ð /ð /ð /r'   r³   )r   r   r   r   )*Ú
__future__r   rS   r0   Úabcr   Útypingr   r   r   r   r	   r
   r   Úlangchain_core.callbacksr   Ú#langchain_core.language_models.llmsr   Úlangchain_core.outputsr   Úlangchain_core.pydantic_v1r   r   r   r   Úlangchain_core.utilsr   Úlangchain_community.llms.utilsr   Ú'langchain_community.utilities.anthropicr   r   Úbotocore.configr   r-   r.   r2   r&   r3   r5   ro   r³   rm   r'   r%   ú<module>râ      s  ðØ "Ð "Ð "Ð "Ð "Ð "à €€€Ø €€€Ø Ð Ð Ð Ð Ð Ø NÐ NÐ NÐ NÐ NÐ NÐ NÐ NÐ NÐ NÐ NÐ NÐ NÐ NÐ NÐ NÐ NÐ Nà =Ð =Ð =Ð =Ð =Ð =Ø 3Ð 3Ð 3Ð 3Ð 3Ð 3Ø 2Ð 2Ð 2Ð 2Ð 2Ð 2Ø NÐ NÐ NÐ NÐ NÐ NÐ NÐ NÐ NÐ NÐ NÐ NØ 5Ð 5Ð 5Ð 5Ð 5Ð 5à >Ð >Ð >Ð >Ð >Ð >ðð ð ð ð ð ð ð ð
 ð 'Ø&Ð&Ð&Ð&Ð&Ð&à€Ø#Ð àMð ð
ð ð ð ðð ð ð ð>Pð Pð Pð Pð Pñ Pô Pð PðfrFð rFð rFð rFð rF�)˜Sñ rFô rFð rFðj~/ð ~/ð ~/ð ~/ð ~/ˆc�;ñ ~/ô ~/ð ~/ð ~/ð ~/r'   