§
    ÚŽ’j'E  ã                   ó  — d 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
 ddlmZmZ ddlmZm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mZ d
dlmZmZm Z m!Z! d
dl"m#Z# erddl$m%Z% ddl&m'Z' neZ%eZ' G d„ de¦  «        Z(dS )z*The Moonshot AI chat model implementation.é    )ÚOrderedDict)Údatetime)ÚLiteralÚAnyÚAsyncGeneratorÚTYPE_CHECKINGÚListÚType)Ú	BaseModelÚFieldé   )ÚChatModelBaseÚ_TOOL_CHOICE_LITERAL_MODES)ÚChatResponseÚStructuredResponse)Ú	ChatUsageé   )Ú_generate_id)ÚMoonshotCredential)ÚFormatterBaseÚMoonshotChatFormatter)ÚMsgÚThinkingBlockÚToolCallBlockÚ	TextBlock)Ú
ToolChoice)ÚChatCompletion)ÚAsyncStreamc                   ó(  ‡ — e Zd ZU dZ G d„ de¦  «        ZdZed         ed<   	 	 	 	 	 	 	 	 d'de	de
dddedededededz  dee
ef         dz  ddfˆ fd„Zedeee         df         fd„¦   «         Z	 	 d(de
dee         dee         dz  dedz  dedeeedf         z  fd„Zded edeedf         fd!„Zded e defd"„Z!dee         dz  dedz  deee         dz  e
ez  dz  f         fd#„Z"	 d)de
dee         d$ee         ez  dedz  d%ede#fˆ fd&„Z$ˆ xZ%S )*ÚMoonshotChatModelzThe Moonshot AI chat model.c                   ó   — e Zd ZU dZ edddd¬¦  «        Zedz  ed<    edd	d
¬¦  «        Ze	ed<    eddd¬¦  «        Z
ed         dz  ed<    eddddd¬¦  «        Zedz  ed<    eddddd¬¦  «        Zedz  ed<   dS )úMoonshotChatModel.Parametersz.The parameters for the Moonshot AI chat model.Nz
Max Tokensz0The maximum number of tokens for the LLM output.r   )ÚdefaultÚtitleÚdescriptionÚgtÚ
max_tokensFÚThinkingz•Whether to enable thinking mode. For kimi-k2-thinking, thinking is always enabled. For kimi-k2.6, thinking is enabled by default but can be disabled.)r#   r$   r%   Úthinking_enablezReasoning EffortzZThe reasoning effort level for kimi-k3. Supports 'low', 'high', and 'max' (default 'max').)ÚlowÚhighÚmaxÚreasoning_effortÚTemperaturez#The temperature for the LLM output.é   )r#   r$   r%   ÚgeÚleÚtemperaturezTop Pz#The top P value for the LLM output.)r#   r$   r%   r&   r1   Útop_p)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r'   ÚintÚ__annotations__r)   Úboolr-   r   r2   Úfloatr3   © ó    úOC:\Projects\DSCons\.venv\Lib\site-packages\agentscope\model\_moonshot\_model.pyÚ
Parametersr"      sD  € € € € € € Ø<Ð<à!& ØØØJØð	"
ñ "
ô "
ˆ
�C˜$‘Jð 	
ð 	
ñ 	
ð !& ØØð:ð	!
ñ !
ô !
ˆ˜ð 	
ð 	
ñ 	
ð BGÀØØ$ð#ð	B
ñ B
ô B
Ð˜'Ð"6Ô7¸$Ñ>ð 	
ð 	
ñ 	
ð %* EØØØ=ØØð%
ñ %
ô %
ˆ�U˜T‘\ð 	
ð 	
ñ 	
ð $˜eØØØ=ØØð
ñ 
ô 
ˆˆu�t‰|ð 	
ð 	
ñ 	
ð 	
ð 	
r=   r?   Úmoonshot_chatÚtypeNTr   ç      ð?é   Ú
credentialÚmodelÚ
parametersz#MoonshotChatModel.Parameters | NoneÚstreamÚmax_retriesÚretry_delayÚcontext_sizeÚ	formatterÚclient_kwargsÚreturnc
           	      óD  •— t          ¦   «                              |||p|                      ¦   «         ||||¬¦  «         |pt          ¦   «         | _        |	pi | _        ddl}
 |
j        d| j        j	         
                    ¦   «         | j        j        dœ| j        ¤Ž| _        dS )a…  Initialize the Moonshot AI chat model.

        Args:
            credential (`MoonshotCredential`):
                The Moonshot AI credential used to authenticate API calls.
            model (`str`):
                The model name, e.g. ``moonshot-v1-8k``, ``kimi-k2.6``.
            parameters (`MoonshotChatModel.Parameters | None`, defaults to             `None`):
                The API parameters. When ``None``, the default parameters
                will be used.
            stream (`bool`, defaults to `True`):
                Whether to enable streaming output.
            max_retries (`int`, defaults to `3`):
                The maximum number of retries for the API.
            retry_delay (`float`, defaults to `1.0`):
                Seconds to sleep between retry attempts.
            context_size (`int`, defaults to `131072`):
                The model context size used for context compression.
            formatter (`FormatterBase | None`, defaults to `None`):
                The formatter that converts ``Msg`` objects to the format
                required by the API. When ``None``, a
                ``MoonshotChatFormatter`` instance will be used.
            client_kwargs (`dict[str, Any] | None`, defaults to `None`):
                Extra keyword arguments forwarded to ``openai.AsyncClient``
                (e.g. ``timeout``, ``default_headers``, ``http_client``).
        )rD   rE   rF   rG   rH   rI   rJ   r   N)Úapi_keyÚbase_urlr<   )ÚsuperÚ__init__r?   r   rK   rL   ÚopenaiÚAsyncClientrD   rO   Úget_secret_valuerP   Úclient)ÚselfrD   rE   rF   rG   rH   rI   rJ   rK   rL   rS   Ú	__class__s              €r>   rR   zMoonshotChatModel.__init__N   sÃ   ø€ õN 	‰Œ×ÒØ!ØØ!Ð6 T§_¢_Ñ%6Ô%6ØØ#Ø#Ø%ð 	ñ 	
ô 	
ð 	
ð #Ð=Õ&;Ñ&=Ô&=ˆŒØ*Ð0¨bˆÔàˆˆˆà*<¨&Ô*<ð +
Ø”OÔ+×<Ò<Ñ>Ô>Ø”_Ô-ð+
ð +
ð Ô ð+
ð +
ˆŒˆˆr=   .c                 ó>   — dd l }|j        |j        |j        |j        fS )Nr   )rS   ÚAPIConnectionErrorÚAPITimeoutErrorÚRateLimitErrorÚInternalServerError)ÚclsrS   s     r>   Ú_get_retryable_exceptionsz+MoonshotChatModel._get_retryable_exceptions‰   s/   € àˆˆˆð Ô%ØÔ"ØÔ!ØÔ&ð	
ð 	
r=   Ú
model_nameÚmessagesÚtoolsÚtool_choiceÚgenerate_kwargsc              ‹   ó–  K  — | j                              |¦  «        ƒ d{V —†}||| j        dœ}|dk    }| j        j        �!|r| j        j        |d<   n| j        j        |d<   | j        j        �| j        j        |d<   | j        j        �| j        j        |d<   |                     |¦  «         |r| j        j        �| j        j        |d<   nd| j        j	        rd	nd
}	| 
                    di ¦  «         |d          
                    di ¦  «         |d         d          
                    d|	¦  «         |                      ||¦  «        \  }
}|
r|
|d<   |�||d<   | j        rddi|d<   t          j        ¦   «         } | j        j        j        j        di |¤Žƒ d{V —†}| j        r|                      ||¦  «        S |                      ||¦  «        S )aF  Call the Moonshot AI chat API (OpenAI-compatible).

        Args:
            model_name (`str`):
                The model name to use for this call.
            messages (`list`):
                A list of message dicts with ``role`` and ``content`` keys.
            tools (`list[dict]`, default `None`):
                The tools JSON schemas.
            tool_choice (`ToolChoice | None`, optional):
                Controls which (if any) tool is called by the model.
            **generate_kwargs (`Any`):
                Extra keyword arguments forwarded to the API.

        Returns:
            `ChatResponse | AsyncGenerator[ChatResponse, None]`:
                A ``ChatResponse`` when streaming is disabled, or an async
                generator of ``ChatResponse`` objects when streaming is
                enabled.
        N)rE   ra   rG   zkimi-k3Úmax_completion_tokensr'   r2   r3   r-   ÚenabledÚdisabledÚ
extra_bodyÚthinkingrA   rb   rc   Úinclude_usageTÚstream_optionsr<   )rK   ÚformatrG   rF   r'   r2   r3   Úupdater-   r)   Ú
setdefaultÚ_format_toolsr   ÚnowrV   ÚchatÚcompletionsÚcreateÚ_parse_stream_responseÚ_parse_completion_response)rW   r`   ra   rb   rc   rd   Úformatted_messagesÚkwargsÚis_k3Úthinking_typeÚ	fmt_toolsÚfmt_tool_choiceÚstart_datetimeÚresponses                 r>   Ú	_call_apizMoonshotChatModel._call_api”   s2  è è € ð8 $(¤>×#8Ò#8¸Ñ#BÔ#BÐBÐBÐBÐBÐBÐBÐð  Ø*Ø”kð"
ð "
ˆð ˜iÒ'ˆàŒ?Ô%Ð1Øð BØ26´/Ô2L�Ð.Ñ/Ð/à'+¤Ô'A��|Ñ$àŒ?Ô&Ð2Ø$(¤OÔ$?ˆF�=Ñ!àŒ?Ô Ð,Ø"œoÔ3ˆF�7‰Oà�Š�oÑ&Ô&Ð&àð 	ØŒÔ/Ð;Ø-1¬_Ô-M�Ð)Ñ*øð "œ_Ô<ÐL�	�	À*ð ð ×Ò˜l¨BÑ/Ô/Ð/Ø�<Ô ×+Ò+¨J¸Ñ;Ô;Ð;Ø�<Ô  Ô,×7Ò7ØØñô ð ð
 &*×%7Ò%7¸¸{Ñ%KÔ%KÑ"ˆ	�?àð 	(Ø'ˆF�7‰OàÐ&Ø$3ˆF�=Ñ!àŒ;ð 	?Ø(7¸Ð'>ˆFÐ#Ñ$å!œ™œˆØ<˜œÔ)Ô5Ô<ÐFÐF¸vÐFÐFÐFÐFÐFÐFÐFÐFˆàŒ;ð 	IØ×.Ò.¨~¸xÑHÔHÐHà×.Ò.¨~¸xÑHÔHÐHr=   r}   r~   c                óP  K  — d}t          ¦   «         }t          ¦   «         }t          ¦   «         }t          ¦   «         }|4 ƒd{V —†}|2 3 d{V —†}	t          g d|¬¦  «        }
t          |	dd¦  «        p|}||
_        |	j        rY|	j        }t          |j        |j        t          j
        ¦   «         |z
                       ¦   «         t          |dd¦  «        ¬¦  «        }|	j        sŒ›|	j        d         }|j        }t          |dd¦  «        r|
                     ||j        ¬	¦  «         t          |d
d¦  «        r|
                     ||j        ¬¦  «         t          |dd¦  «        pg D ]„}|j        }t          |dd¦  «        }|rt          |dd¦  «        nd}|rt          |dd¦  «        nd}||vr|j        |pdf||<   ||         \  }}|
                     |j        p||p||pd¬¦  «         Œ…|
j        s|r||
_        |
W V — �Œ¸6 	 ddd¦  «        ƒd{V —† dS # 1 ƒd{V —†swxY w Y   dS )aÂ  Parse the Moonshot AI streaming response.

        Args:
            start_datetime (`datetime`):
                The start datetime of the response generation.
            response (`AsyncStream`):
                The OpenAI-compatible async stream object.

        Yields:
            `ChatResponse`:
                Incremental ``ChatResponse`` objects with ``is_last=False``
                followed by a final one with ``is_last=True``.
        NF)ÚcontentÚis_lastÚidrƒ   Úcached_tokensr   ©Úinput_tokensÚoutput_tokensÚtimeÚcache_input_tokensÚreasoning_content)Úblock_idrj   r�   )r‹   ÚtextÚ
tool_callsÚfunctionÚnameÚ	argumentsÚunknownÚ )r‹   r�   Úinput)r   r   r   Úgetattrrƒ   Úusager   Úprompt_tokensÚcompletion_tokensr   rq   Útotal_secondsÚchoicesÚdeltaÚappend_thinkingrŠ   Úappend_textr�   ÚindexÚappend_tool_call)rW   r}   r~   r•   Úresponse_idÚtext_idÚthinking_idÚtool_call_mappingrG   ÚchunkÚ	delta_resÚuÚchoicerš   Ú	tool_callr�   ÚfnÚ
delta_nameÚ
delta_argsÚ	stored_idÚstored_names                        r>   ru   z(MoonshotChatModel._parse_stream_responseé   s‘  è è € ð$ ˆÝ'™>œ>ˆÝ#‘~”~ˆÝ'™>œ>ˆå"-¡-¤-Ðàð F	$ð F	$ð F	$ð F	$ð F	$ð F	$ð F	$˜vØ%ð E$ð E$ð E$ð E$ð E$ð E$ð E$�eÝ(ØØ!Ø"ðñ ô �	õ & e¨T°4Ñ8Ô8ÐG¸K�Ø*�	”à”;ð Øœ�AÝ%Ø%&¤_Ø&'Ô&9Ý&œl™nœn¨~Ñ=×LÒLÑNÔNÝ+2ØØ+Øñ,ô ,ð		ñ 	ô 	�Eð ”}ð Øàœ qÔ)�Øœ�õ ˜5Ð"5°tÑ<Ô<ð Ø×-Ò-Ø!,Ø!&Ô!8ð .ñ ô ð õ ˜5 )¨TÑ2Ô2ð Ø×)Ò)Ø!(Ø"œ]ð *ñ ô ð õ ")¨°¸dÑ!CÔ!CÐ!IÀrð ð �IØ%œO�EÝ  ¨J¸Ñ=Ô=�BØ>@Ð!J¥¨¨V°TÑ!:Ô!:Ð!:Àd�JØCEÐ!O¥¨¨[¸$Ñ!?Ô!?Ð!?È4�Jð Ð$5Ð5Ð5à%œLØ&Ð3¨)ð4Ð)¨%Ñ0ð
 .?¸uÔ-EÑ*�I˜{à×.Ò.Ø!*¤Ð!:°Ø'Ð6¨;Ø(Ð.¨Bð /ñ ô ð ð ð Ô$ð $¨ð $Ø&+�I”OØ#�O�O�O�OùðK  &˜vðF	$ð F	$ð F	$ñ F	$ô F	$ð F	$ð F	$ð F	$ð F	$ð F	$ð F	$ð F	$ð F	$ð F	$ð F	$ð F	$ð F	$ð F	$ð F	$ð F	$ð F	$ð F	$ð F	$ð F	$øøøð F	$ð F	$ð F	$ð F	$ð F	$ð F	$s   ÁHÁH ÁF3HÈ
HÈ"Hc           
      óÌ  — g }|j         rÐ|j         d         }t          |j        dd¦  «        }|r#|                     t	          |¬¦  «        ¦  «         |j        j        r-|                     t          |j        j        ¬¦  «        ¦  «         |j        j        pg D ]@}|                     t          |j	        |j
        j        |j
        j        ¬¦  «        ¦  «         ŒAd}|j        rY|j        }t          |j        |j        t#          j        ¦   «         |z
                       ¦   «         t          |dd¦  «        ¬¦  «        }|d	|d
œ}	t          |dd¦  «        }
|
r|
|	d<   t)          di |	¤ŽS )aƒ  Parse the Moonshot AI non-streaming response.

        Args:
            start_datetime (`datetime`):
                The start datetime of the response generation.
            response (`ChatCompletion`):
                The OpenAI-compatible chat completion object.

        Returns:
            `ChatResponse`:
                A single ``ChatResponse`` with ``is_last=True``.
        r   rŠ   N)rj   )rŒ   )rƒ   r�   r“   r„   r…   T)r�   r‚   r•   rƒ   r<   )r™   r”   ÚmessageÚappendr   r�   r   r�   r   rƒ   rŽ   r�   r�   r•   r   r–   r—   r   rq   r˜   r   )rW   r}   r~   Úcontent_blocksr¦   Ú	reasoningr§   r•   r¥   Úresp_kwargsrŸ   s              r>   rv   z,MoonshotChatModel._parse_completion_responseJ  s   € ð" KMˆàÔð 	ØÔ% aÔ(ˆFÝ ¤Ð0CÀTÑJÔJˆIØð IØ×%Ò%¥m¸YÐ&GÑ&GÔ&GÑHÔHÐHàŒ~Ô%ð NØ×%Ò%¥i°V´^Ô5KÐ&LÑ&LÔ&LÑMÔMÐMà#œ^Ô6Ð<¸"ð ð �	Ø×%Ò%Ý!Ø$œ<Ø&Ô/Ô4Ø'Ô0Ô:ðñ ô ñô ð ð ð ˆØŒ>ð 	Ø”ˆAÝØœ_ØÔ1Ý”l‘n”n ~Ñ5×DÒDÑFÔFÝ#*¨1¨o¸qÑ#AÔ#Að	ñ ô ˆEð &ØØð'
ð '
ˆõ
 ˜h¨¨dÑ3Ô3ˆØð 	,Ø +ˆK˜ÑåÐ*Ð*˜kÐ*Ð*Ð*r=   c                 óÐ   ‡— |rA|r?|                       ||¦  «         |j        r"t          |j        ¦  «        Šˆfd„|D ¦   «         }|s|dfS |j        }|t          vr	|dd|idœfS ||fS )aç  Validate, filter, and format tools and tool_choice for the
        Moonshot AI API.

        When ``tool_choice.tools`` is specified the schemas list is filtered
        to only those tools. When ``tool_choice.mode`` is a specific tool name
        (str) the model is forced to call exactly that tool without needing to
        filter the list, preserving prompt-cache efficiency.

        Args:
            tools (`list[dict] | None`, optional):
                The raw tool schemas.
            tool_choice (`ToolChoice | None`, optional):
                The tool choice configuration.

        Returns:
            `tuple[list[dict] | None, str | dict | None]`:
                A tuple of (formatted_tools, formatted_tool_choice).
        c                 ó4   •— g | ]}|d          d         ‰v ¯|‘ŒS )rŽ   r�   r<   )Ú.0ÚtÚalloweds     €r>   ú
<listcomp>z3MoonshotChatModel._format_tools.<locals>.<listcomp>Ÿ  s,   ø€ ÐNÐNÐN˜q¨Q¨z¬]¸6Ô-BÀgÐ-MÐ-M˜Ð-MÐ-MÐ-Mr=   NrŽ   r�   )rA   rŽ   )Ú_validate_tool_choicerb   ÚsetÚmoder   )rW   rb   rc   r»   r·   s       @r>   rp   zMoonshotChatModel._format_tools„  s¨   ø€ ð. ð 	O˜5ð 	OØ×&Ò& {°EÑ:Ô:Ð:ØÔ ð OÝ˜kÔ/Ñ0Ô0�ØNÐNÐNÐN EÐNÑNÔN�àð 	Ø˜$�;ÐàÔˆàÕ1Ð1Ð1Ø :¸FÀD¸>ÐJÐJÐJÐJà�dˆ{Ðr=   Ústructured_modelrx   c              ‹   óŒ   •K  — |€| j         j        rt          d¬¦  «        } t          ¦   «         j        d||||dœ|¤Žƒ d{V —†S )a˜  Moonshot-specific override for structured output.

        Moonshot rejects ``tool_choice="required"`` or an object-form
        ``tool_choice`` when thinking mode is enabled. In that case we
        default ``tool_choice`` to ``"auto"`` and rely on the base class's
        injected system-reminder prompt to guide the model. When thinking
        is disabled, this falls through to the base implementation.

        Args:
            model_name (`str`):
                The model name to use for this call.
            messages (`list[Msg]`):
                The context for the LLM to generate the structured output.
            structured_model (`Type[BaseModel] | dict`):
                A Pydantic model class or a JSON schema dict describing the
                required output structure.
            tool_choice (`ToolChoice | None`, defaults to `None`):
                The tool_choice forwarded to ``_call_api``. When ``None``
                and thinking mode is enabled, it is downgraded to
                ``ToolChoice(mode="auto")``; otherwise the base default
                (force the structured-output tool) is used.
            **kwargs (`Any`):
                Additional keyword arguments forwarded to ``_call_api``.

        Returns:
            `StructuredResponse`:
                The structured response whose ``content`` is the validated
                output dict matching ``structured_model``.
        NÚauto)r»   )r`   ra   r¼   rc   r<   )rF   r)   r   rQ   Ú _call_api_with_structured_output)rW   r`   ra   r¼   rc   rx   rX   s         €r>   r¿   z2MoonshotChatModel._call_api_with_structured_output«  sƒ   øè è € ðJ Ð 4¤?Ô#BÐÝ$¨&Ð1Ñ1Ô1ˆKØ=•U‘W”WÔ=ð 
Ø!ØØ-Ø#ð	
ð 
ð
 ð
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 	
r=   )NTr   rB   rC   NN)NN)N)&r4   r5   r6   r7   r   r?   rA   r   r9   r   Ústrr:   r8   r;   r   Údictr   rR   ÚclassmethodÚtupler
   Ú	Exceptionr_   Úlistr   r   r   r   r   r   r   ru   r   rv   rp   r   r¿   Ú__classcell__)rX   s   @r>   r    r       s&  ø€ € € € € € Ø%Ð%ð,
ð ,
ð ,
ð ,
ð ,
�Yñ ,
ô ,
ð ,
ð\ &5€Dˆ'�/Ô
"Ð4Ð4Ñ4Ø%ð =AØØØ Ø"Ø*.Ø/3ð9
ð 9
à&ð9
ð ð9
ð :ð	9
ð
 ð9
ð ð9
ð ð9
ð ð9
ð ! 4Ñ'ð9
ð ˜C ˜H”~¨Ñ,ð9
ð 
ð9
ð 9
ð 9
ð 9
ð 9
ð 9
ðv ð
¨%°°Y´ÀÐ0DÔ*Eð 
ð 
ð 
ñ „[ð
ð $(Ø)-ðSIð SIàðSIð �s”)ðSIð �DŒz˜DÑ ð	SIð
   $Ñ&ðSIð ðSIð 
˜ |°TÐ'9Ô:Ñ	:ðSIð SIð SIð SIðj_$à ð_$ð ð_$ð 
˜ dÐ*Ô	+ð	_$ð _$ð _$ð _$ðB8+à ð8+ð !ð8+ð 
ð	8+ð 8+ð 8+ð 8+ðt%à�DŒz˜DÑ ð%ð   $Ñ&ð%ð 
ˆt�DŒz˜DÑ  #¨¡*¨tÑ"3Ð3Ô	4ð	%ð %ð %ð %ðX *.ð-
ð -
àð-
ð �s”)ð-
ð ˜yœ/¨DÑ0ð	-
ð
   $Ñ&ð-
ð ð-
ð 
ð-
ð -
ð -
ð -
ð -
ð -
ð -
ð -
ð -
ð -
r=   r    N))r7   Úcollectionsr   r   Útypingr   r   r   r   r	   r
   Úpydanticr   r   Ú_baser   r   Ú_model_responser   r   Ú_model_usager   Ú_utils._commonr   rD   r   rK   r   r   r®   r   r   r   r   Útoolr   Úopenai.types.chatr   rS   r   r    r<   r=   r>   ú<module>rÐ      s¢  ðà 0Ð 0Ø #Ð #Ð #Ð #Ð #Ð #Ø Ð Ð Ð Ð Ð Ø JÐ JÐ JÐ JÐ JÐ JÐ JÐ JÐ JÐ JÐ JÐ JÐ JÐ JÐ JÐ Jà %Ð %Ð %Ð %Ð %Ð %Ð %Ð %à =Ð =Ð =Ð =Ð =Ð =Ð =Ð =Ø >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ø $Ð $Ð $Ð $Ð $Ð $Ø *Ð *Ð *Ð *Ð *Ð *Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,Ø =Ð =Ð =Ð =Ð =Ð =Ð =Ð =Ø CÐ CÐ CÐ CÐ CÐ CÐ CÐ CÐ CÐ CÐ CÐ CØ Ð Ð Ð Ð Ð àð Ø0Ð0Ð0Ð0Ð0Ð0Ø"Ð"Ð"Ð"Ð"Ð"Ð"à€NØ€Kð~
ð ~
ð ~
ð ~
ð ~
˜ñ ~
ô ~
ð ~
ð ~
ð ~
r=   