§
    ­eîi¤n  ã                   ót  — d Z ddlZddl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 ddlmZmZ 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 ddlmZmZmZ ddlmZ ddlmZm Z  ddl!m"Z"m#Z# ddl$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,  ej-        e.¦  «        Z/e#e0z  Z1ee1         Z2ee#         Z3eg e4dz  f         Z5dZ6dZ7dZ8dZ9dZ:dZ;dZ<dZ=dZ> e?¦   «         Z@ G d„ de0¦  «        ZA G d„ deA¦  «        ZBe	 G d„ d¦  «        ¦   «         ZC G d„ d ¦  «        ZDedd!d"œd#e4d$ejE        dz  d%eFd&eeGee#e0z           ee#         e5f         df         fd'„¦   «         ZHe ed(¦  «        dd)d*d!e dfd#e4d+eIe4e4f         dz  d,eJez  d-eJez  d%eFd.ed/ejK        dz  d&eeGee#e0z           ee#         e5f         df         fd0„¦   «         ¦   «         ZLdS )1zÕ
StreamableHTTP Client Transport Module

This module implements the StreamableHTTP transport for MCP clients,
providing support for HTTP POST requests with optional SSE streaming responses
and session management.
é    N)ÚAsyncGeneratorÚ	AwaitableÚCallable)Úasynccontextmanager)Ú	dataclass)Ú	timedelta)ÚAnyÚoverload)Úwarn)Ú	TaskGroup)ÚMemoryObjectReceiveStreamÚMemoryObjectSendStream)ÚEventSourceÚServerSentEventÚaconnect_sse)Ú
deprecated)ÚMcpHttpClientFactoryÚcreate_mcp_http_client)ÚClientMessageMetadataÚSessionMessage)Ú	ErrorDataÚInitializeResultÚJSONRPCErrorÚJSONRPCMessageÚJSONRPCNotificationÚJSONRPCRequestÚJSONRPCResponseÚ	RequestIdzmcp-session-idzmcp-protocol-versionzlast-event-idiè  é   zcontent-typeÚacceptzapplication/jsonztext/event-streamc                   ó   — e Zd ZdZdS )ÚStreamableHTTPErrorz3Base exception for StreamableHTTP transport errors.N©Ú__name__Ú
__module__Ú__qualname__Ú__doc__© ó    ú^/home/div/.hermes/hermes-agent/venv/lib/python3.11/site-packages/mcp/client/streamable_http.pyr"   r"   C   s   € € € € € Ø=Ð=Ð=Ð=r)   r"   c                   ó   — e Zd ZdZdS )ÚResumptionErrorz*Raised when resumption request is invalid.Nr#   r(   r)   r*   r,   r,   G   s   € € € € € Ø4Ð4Ð4Ð4r)   r,   c                   ó”   — e Zd ZU dZej        ed<   edz  ed<   eed<   e	dz  ed<   e
ed<   dZeeef         dz  ed<   dZedz  ed	<   dS )
ÚRequestContextz Context for a request operation.ÚclientNÚ
session_idÚsession_messageÚmetadataÚread_stream_writerÚheadersÚsse_read_timeout)r$   r%   r&   r'   ÚhttpxÚAsyncClientÚ__annotations__Ústrr   r   ÚStreamWriterr4   Údictr5   Úfloatr(   r)   r*   r.   r.   K   s’   € € € € € € à*Ð*àÔÐÐÑØ�d‘
ÐÐÑØ#Ð#Ð#Ñ#Ø# dÑ*Ð*Ð*Ñ*Ø$Ð$Ð$Ñ$Ø%)€GˆT�#�s�(Œ^˜dÑ"Ð)Ð)Ñ)Ø%)Ð�e˜d‘lÐ)Ð)Ñ)Ð)Ð)r)   r.   c                   óò  — e Zd ZdZededdfd„¦   «         Ze ed¦  «        	 	 	 	 d4ded	eeef         dz  d
e	e
z  de	e
z  dej        dz  ddfd„¦   «         ¦   «         Zeeeefded	ed
edededdfd„Zdeeef         fd„Zdedefd„Zdedefd„Zdej        ddfd„Zdeddfd„Z	 	 	 d5dedededz  deeged         f         dz  dedefd„Zdej        deddfd„Zdeddfd „Z deddfd!„Z!	 d6dej        dededdfd"„Z"	 d6dej        dededdfd#„Z#	 	 d7ded%ed&e$dz  d'e$ddf
d(„Z%d)ededdfd*„Z&ded+eddfd,„Z'dej        d-e(ded.e)e*         d/eg df         d0e+ddfd1„Z,dej        ddfd2„Z-dedz  fd3„Z.dS )8ÚStreamableHTTPTransportz/StreamableHTTP client transport implementation.ÚurlÚreturnNc                 ó   — d S ©Nr(   )Úselfr?   s     r*   Ú__init__z StreamableHTTPTransport.__init__[   s   € Ø*-¨#r)   zyParameters headers, timeout, sse_read_timeout, and auth are deprecated. Configure these on the httpx.AsyncClient instead.é   é,  r4   Útimeoutr5   Úauthc                 ó   — d S rB   r(   )rC   r?   r4   rG   r5   rH   s         r*   rD   z StreamableHTTPTransport.__init__^   s	   € ð ˆsr)   c                 ó„  — g }|t           ur|                     d¦  «         |t           ur|                     d¦  «         |t           ur|                     d¦  «         |t           ur|                     d¦  «         |r.t          dd                     |¦  «        › d�t          d¬	¦  «         || _        d
| _        d
| _        d
S )aS  Initialize the StreamableHTTP transport.

        Args:
            url: The endpoint URL.
            headers: Optional headers to include in requests.
            timeout: HTTP timeout for regular operations.
            sse_read_timeout: Timeout for SSE read operations.
            auth: Optional HTTPX authentication handler.
        r4   rG   r5   rH   zParameters ú, zV are deprecated and will be ignored. Configure these on the httpx.AsyncClient instead.r   )Ú
stacklevelN)Ú_UNSETÚappendr   ÚjoinÚDeprecationWarningr?   r0   Úprotocol_version)rC   r?   r4   rG   r5   rH   Údeprecated_paramss          r*   rD   z StreamableHTTPTransport.__init__l   sñ   € ð$ (*ÐØ�&Ð Ð Ø×$Ò$ YÑ/Ô/Ð/Ø�&Ð Ð Ø×$Ò$ YÑ/Ô/Ð/Ø¥6Ð)Ð)Ø×$Ò$Ð%7Ñ8Ô8Ð8Ø•vÐÐØ×$Ò$ VÑ,Ô,Ð,àð 	ÝðD˜dŸišiÐ(9Ñ:Ô:ð Dð Dð Då"Øð	ñ ô ð ð ˆŒØˆŒØ $ˆÔÐÐr)   c                 ó²   — i }t           › dt          › �|t          <   t           |t          <   | j        r| j        |t
          <   | j        r| j        |t          <   |S )z»Build MCP-specific request headers.

        These headers will be merged with the httpx.AsyncClient's default headers,
        with these MCP-specific headers taking precedence.
        rK   )ÚJSONÚSSEÚACCEPTÚCONTENT_TYPEr0   ÚMCP_SESSION_IDrQ   ÚMCP_PROTOCOL_VERSION)rC   r4   s     r*   Ú_prepare_headersz(StreamableHTTPTransport._prepare_headers”   s_   € ð #%ˆå!Ð*Ð*¥SÐ*Ð*ˆ•‰Ý $ˆ•ÑàŒ?ð 	6Ø&*¤oˆG•NÑ#ØÔ ð 	BØ,0Ô,AˆGÕ(Ñ)Øˆr)   Úmessagec                 óV   — t          |j        t          ¦  «        o|j        j        dk    S )z2Check if the message is an initialization request.Ú
initialize)Ú
isinstanceÚrootr   Úmethod©rC   r[   s     r*   Ú_is_initialization_requestz2StreamableHTTPTransport._is_initialization_request¥   s$   € å˜'œ,­Ñ7Ô7Ð_¸G¼LÔ<OÐS_Ò<_Ð_r)   c                 óV   — t          |j        t          ¦  «        o|j        j        dk    S )z4Check if the message is an initialized notification.znotifications/initialized)r^   r_   r   r`   ra   s     r*   Ú_is_initialized_notificationz4StreamableHTTPTransport._is_initialized_notification©   s%   € å˜'œ,Õ(;Ñ<Ô<ÐsÀÄÔATÐXsÒAsÐsr)   Úresponsec                 óž   — |j                              t          ¦  «        }|r+|| _        t                               d| j        › �¦  «         dS dS )z3Extract and store session ID from response headers.zReceived session ID: N)r4   ÚgetrX   r0   ÚloggerÚinfo)rC   re   Únew_session_ids      r*   Ú'_maybe_extract_session_id_from_responsez?StreamableHTTPTransport._maybe_extract_session_id_from_response­   sY   € ð
 "Ô)×-Ò-­nÑ=Ô=ˆØð 	CØ,ˆDŒOÝ�KŠKÐA°´ÐAÐAÑBÔBÐBÐBÐBð	Cð 	Cr)   c                 óÆ  — t          |j        t          ¦  «        rÄ|j        j        rº	 t	          j        |j        j        ¦  «        }t          |j        ¦  «        | _        t           
                    d| j        › �¦  «         dS # t          $ rO}t                               d|› �¦  «         t                               d|j        j        › �¦  «         Y d}~dS d}~ww xY wdS dS )z>Extract protocol version from initialization response message.zNegotiated protocol version: z=Failed to parse initialization response as InitializeResult: zRaw result: N)r^   r_   r   Úresultr   Úmodel_validater9   ÚprotocolVersionrQ   rh   ri   Ú	ExceptionÚwarning)rC   r[   Úinit_resultÚexcs       r*   Ú,_maybe_extract_protocol_version_from_messagezDStreamableHTTPTransport._maybe_extract_protocol_version_from_message·   s	  € õ
 �g”l¥OÑ4Ô4ð 
	E¸¼Ô9Lð 
	Eð	Eå.Ô=¸g¼lÔ>QÑRÔR�Ý(+¨KÔ,GÑ(HÔ(H�Ô%Ý—’ÐS¸DÔ<QÐSÐSÑTÔTÐTÐTÐTøÝð Eð Eð EÝ—’ØYÐTWÐYÐYñô ð õ —’ÐC¨g¬lÔ.AÐCÐCÑDÔDÐDÐDÐDÐDÐDÐDÐDøøøøð	Eøøøð
	Eð 
	Eð 
	Eð 
	Es   ¨AB Â
CÂACÃCFÚsser3   Úoriginal_request_idÚresumption_callbackÚis_initializationc              ƒ   ó"  K  — |j         dk    �r^|j        s!|j        r|r ||j        ¦  «        ƒ d{V —† dS 	 t          j        |j        ¦  «        }t
                               d|› �¦  «         |r|                      |¦  «         |�.t          |j	        t          t          z  ¦  «        r||j	        _        t          |¦  «        }|                     |¦  «        ƒ d{V —† |j        r|r ||j        ¦  «        ƒ d{V —† t          |j	        t          t          z  ¦  «        S # t          $ r@}t
                               d¦  «         |                     |¦  «        ƒ d{V —† Y d}~dS d}~ww xY wt
                               d|j         › �¦  «         dS )z@Handle an SSE event, returning True if the response is complete.r[   NFzSSE message: zError parsing SSE messagezUnknown SSE event: )ÚeventÚdataÚidr   Úmodel_validate_jsonrh   Údebugrt   r^   r_   r   r   r   Úsendrp   Ú	exceptionrq   )	rC   ru   r3   rv   rw   rx   r[   r1   rs   s	            r*   Ú_handle_sse_eventz)StreamableHTTPTransport._handle_sse_eventÈ   så  è è € ð Œ9˜	Ò!Ñ!à”8ð à”6ð 6Ð1ð 6Ø-Ð-¨c¬fÑ5Ô5Ð5Ð5Ð5Ð5Ð5Ð5Ð5Ø�uðÝ(Ô<¸S¼XÑFÔF�Ý—’Ð6¨WÐ6Ð6Ñ7Ô7Ð7ð %ð OØ×EÒEÀgÑNÔNÐNð 'Ð2µzÀ'Ä,ÕP_ÕbnÑPnÑ7oÔ7oÐ2Ø&9�G”L”Oå"0°Ñ"9Ô"9�Ø(×-Ò-¨oÑ>Ô>Ð>Ð>Ð>Ð>Ð>Ð>Ð>ð ”6ð 6Ð1ð 6Ø-Ð-¨c¬fÑ5Ô5Ð5Ð5Ð5Ð5Ð5Ð5Ð5õ " '¤,µÅ,Ñ0NÑOÔOÐOøåð ð ð Ý× Ò Ð!<Ñ=Ô=Ð=Ø(×-Ò-¨cÑ2Ô2Ð2Ð2Ð2Ð2Ð2Ð2Ð2Ø�u�u�u�u�uøøøøðøøøõ
 �NŠNÐ<°´Ð<Ð<Ñ=Ô=Ð=Ø�5s   ¸C'D  Ä 
E*Ä*5E%Å%E*r/   c              ƒ   ó˜  K  — d}d}d}|t           k     �rµ	 | j        sdS |                      ¦   «         }|r
||t          <   t	          |d| j        |¬¦  «        4 ƒd{V —†	 }|j                             ¦   «          t           	                    d¦  «         | 
                    ¦   «         2 3 d{V —†}|j        r|j        }|j        �|j        }|                      ||¦  «        ƒ d{V —† Œ@6 d}ddd¦  «        ƒd{V —† n# 1 ƒd{V —†swxY w Y   n9# t          $ r,}	t           	                    d|	› �¦  «         |dz  }Y d}	~	nd}	~	ww xY w|t           k    r%t           	                    dt           › d	�¦  «         dS |�|nt          }
t                               d
|
› d�¦  «         t#          j        |
dz  ¦  «        ƒ d{V —† |t           k     �°³dS dS )zDHandle GET stream for server-initiated messages with auto-reconnect.Nr   ÚGET©r4   zGET SSE connection establishedzGET stream error: é   z&GET stream max reconnection attempts (ú
) exceededz)GET stream disconnected, reconnecting in zms...ç     @�@)ÚMAX_RECONNECTION_ATTEMPTSr0   rZ   ÚLAST_EVENT_IDr   r?   re   Úraise_for_statusrh   r~   Ú	aiter_sser|   Úretryr�   rp   ÚDEFAULT_RECONNECTION_DELAY_MSri   ÚanyioÚsleep)rC   r/   r3   Úlast_event_idÚretry_interval_msÚattemptr4   Úevent_sourceru   rs   Údelay_mss              r*   Úhandle_get_streamz)StreamableHTTPTransport.handle_get_stream÷   sã  è è € ð %)ˆØ(,ÐØˆàÕ1Ò1Ñ1ð Ø”ð Ø�Fà×/Ò/Ñ1Ô1�Ø ð ;Ø-:�G�MÑ*å'ØØØ”HØ#ð	ñ ô ð  ð  ð  ð  ð  ð  ð  ð  ð
 "Ø Ô)×:Ò:Ñ<Ô<Ð<Ý—L’LÐ!AÑBÔBÐBà%1×%;Ò%;Ñ%=Ô%=ð Nð Nð Nð Nð Nð Nð N˜càœ6ð 3Ø,/¬F˜Màœ9Ð0Ø03´	Ð-à"×4Ò4°SÐ:LÑMÔMÐMÐMÐMÐMÐMÐMÐMÐMð &>ð  �Gð) ð  ð  ñ  ô  ð  ð  ð  ð  ð  ð  ð  ð  ð  ð  ð  ð  ð  ð  ð  ð  ð  ð  øøøð  ð  ð  ð  øøõ, ð ð ð Ý—’Ð7°#Ð7Ð7Ñ8Ô8Ð8Ø˜1‘������øøøøðøøøð Õ3Ò3Ð3Ý—’ÐkÕF_ÐkÐkÐkÑlÔlÐlØ�ð ->Ð,IÐ(Ð(ÕOlˆHÝ�KŠKÐSÀHÐSÐSÐSÑTÔTÐTÝ”+˜h¨Ñ/Ñ0Ô0Ð0Ð0Ð0Ð0Ð0Ð0Ð0ðU Õ1Ò1Ñ1Ð1Ð1Ð1Ð1sM   –D Ÿ>D ÁAC;Â&C&Â,=C;Ã)D Ã;
DÄD ÄDÄ	D Ä
EÄ"D>Ä>EÚctxc              ƒ   óþ  K  — |                       ¦   «         }|j        r!|j        j        r|j        j        |t          <   nt	          d¦  «        ‚d}t          |j        j        j        t          ¦  «        r|j        j        j        j
        }t          |j        d| j        |¬¦  «        4 ƒd{V —†	 }|j                             ¦   «          t                                d¦  «         |                     ¦   «         2 3 d{V —†}|                      ||j        ||j        r|j        j        nd¦  «        ƒ d{V —†}|r!|j                             ¦   «         ƒ d{V —†  nŒa6 	 ddd¦  «        ƒd{V —† dS # 1 ƒd{V —†swxY w Y   dS )z/Handle a resumption request using GET with SSE.z.Resumption request requires a resumption tokenNrƒ   r„   z)Resumption GET SSE connection established)rZ   r2   Úresumption_tokenr‰   r,   r^   r1   r[   r_   r   r|   r   r/   r?   re   rŠ   rh   r~   r‹   r�   r3   Úon_resumption_token_updateÚaclose)rC   r–   r4   rv   r“   ru   Úis_completes          r*   Ú_handle_resumption_requestz2StreamableHTTPTransport._handle_resumption_request-  sa  è è € à×'Ò'Ñ)Ô)ˆØŒ<ð 	T˜CœLÔ9ð 	TØ%(¤\Ô%BˆG•MÑ"Ð"å!Ð"RÑSÔSÐSð #ÐÝ�cÔ)Ô1Ô6½ÑGÔGð 	FØ"%Ô"5Ô"=Ô"BÔ"EÐåØŒJØØŒHØð	
ñ 
ô 
ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð
 ØÔ!×2Ò2Ñ4Ô4Ð4Ý�LŠLÐDÑEÔEÐEà)×3Ò3Ñ5Ô5ð 	ð 	ð 	ð 	ð 	ð 	ð 	�cØ$(×$:Ò$:ØØÔ*Ø'Ø?B¼|ÐU�C”LÔ;Ð;ÐQUñ	%ô %ð ð ð ð ð ð �ð ð Ø&Ô/×6Ò6Ñ8Ô8Ð8Ð8Ð8Ð8Ð8Ð8Ð8Ø�Eðð 6Ð5ð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	ð 	s    Â.AE,Ã6EÃ<AE,Å,
E6Å9E6c           	   ƒ   ó’  K  — |                       ¦   «         }|j        j        }|                      |¦  «        }|j                             d| j        |                     ddd¬¦  «        |¬¦  «        4 ƒd{V —†	 }|j        dk    r.t           
                    d¦  «         	 ddd¦  «        ƒd{V —† dS |j        d	k    rYt          |j        t          ¦  «        r+|                      |j        |j        j        ¦  «        ƒ d{V —† 	 ddd¦  «        ƒd{V —† dS |                     ¦   «          |r|                      |¦  «         t          |j        t          ¦  «        rÈ|j                             t*          d
¦  «                             ¦   «         }|                     t0          ¦  «        r#|                      ||j        |¦  «        ƒ d{V —† nY|                     t4          ¦  «        r|                      |||¦  «        ƒ d{V —† n!|                      ||j        ¦  «        ƒ d{V —† ddd¦  «        ƒd{V —† dS # 1 ƒd{V —†swxY w Y   dS )z/Handle a POST request with response processing.ÚPOSTTÚjson)Úby_aliasÚmodeÚexclude_none)rŸ   r4   NéÊ   zReceived 202 Acceptedi”  Ú )rZ   r1   r[   rb   r/   Ústreamr?   Ú
model_dumpÚstatus_coderh   r~   r^   r_   r   Ú_send_session_terminated_errorr3   r|   rŠ   rk   r4   rg   rW   ÚlowerÚ
startswithrT   Ú_handle_json_responserU   Ú_handle_sse_responseÚ_handle_unexpected_content_type)rC   r–   r4   r[   rx   re   Úcontent_types          r*   Ú_handle_post_requestz,StreamableHTTPTransport._handle_post_requestN  sŠ  è è € à×'Ò'Ñ)Ô)ˆØÔ%Ô-ˆØ ×;Ò;¸GÑDÔDÐà”:×$Ò$ØØŒHØ×#Ò#¨T¸ÈTÐ#ÑRÔRØð	 %ñ 
ô 
ð "	ð "	ð "	ð "	ð "	ð "	ð "	ð "	ð
 ØÔ# sÒ*Ð*Ý—’Ð4Ñ5Ô5Ð5Øð"	ð "	ð "	ñ "	ô "	ð "	ð "	ð "	ð "	ð "	ð "	ð "	ð "	ð "	ð Ô# sÒ*Ð*Ý˜gœl­NÑ;Ô;ð Ø×=Ò=ØÔ.Øœœñô ð ð ð ð ð ð ð ð ð!"	ð "	ð "	ñ "	ô "	ð "	ð "	ð "	ð "	ð "	ð "	ð "	ð "	ð "	ð$ ×%Ò%Ñ'Ô'Ð'Ø ð GØ×<Ò<¸XÑFÔFÐFõ ˜'œ,­Ñ7Ô7ð 
Ø'Ô/×3Ò3µLÀ"ÑEÔE×KÒKÑMÔM�Ø×*Ò*­4Ñ0Ô0ð Ø×4Ò4°X¸sÔ?UÐWhÑiÔiÐiÐiÐiÐiÐiÐiÐiÐiØ!×,Ò,­SÑ1Ô1ð Ø×3Ò3°H¸cÐCTÑUÔUÐUÐUÐUÐUÐUÐUÐUÐUà×>Ò>Ø$ØÔ.ñô ð ð ð ð ð ð ð ð?"	ð "	ð "	ñ "	ô "	ð "	ð "	ð "	ð "	ð "	ð "	ð "	ð "	ð "	ð "	ð "	ð "	ð "	ð "	ð "	ð "	ð "	ð "	ð "	øøøð "	ð "	ð "	ð "	ð "	ð "	s    Á8'H6Â2AH6ÄDH6È6
I ÉI c              ƒ   ó„  K  — 	 |                      ¦   «         ƒ d{V —†}t          j        |¦  «        }|r|                      |¦  «         t	          |¦  «        }|                     |¦  «        ƒ d{V —† dS # t          $ r@}t                               d¦  «         |                     |¦  «        ƒ d{V —† Y d}~dS d}~ww xY w)z%Handle JSON response from the server.NzError parsing JSON response)	Úareadr   r}   rt   r   r   rp   rh   r€   )rC   re   r3   rx   Úcontentr[   r1   rs   s           r*   r«   z-StreamableHTTPTransport._handle_json_responsex  s   è è € ð	/Ø$ŸNšNÑ,Ô,Ð,Ð,Ð,Ð,Ð,Ð,ˆGÝ$Ô8¸ÑAÔAˆGð !ð KØ×AÒAÀ'ÑJÔJÐJå,¨WÑ5Ô5ˆOØ$×)Ò)¨/Ñ:Ô:Ð:Ð:Ð:Ð:Ð:Ð:Ð:Ð:Ð:øÝð 	/ð 	/ð 	/Ý×ÒÐ:Ñ;Ô;Ð;Ø$×)Ò)¨#Ñ.Ô.Ð.Ð.Ð.Ð.Ð.Ð.Ð.Ð.Ð.Ð.Ð.Ð.Ð.øøøøð	/øøøs   „A/A5 Á5
B?Á?5B:Â:B?c              ƒ   ó0  K  — d}d}	 t          |¦  «        }|                     ¦   «         2 3 d{V —†}|j        r|j        }|j        �|j        }|                      ||j        |j        r|j        j        nd|¬¦  «        ƒ d{V —†}|r|                     ¦   «         ƒ d{V —†  dS Œz6 n4# t          $ r'}	t                               d|	› �¦  «         Y d}	~	nd}	~	ww xY w|�9t                               d¦  «         |                      |||¦  «        ƒ d{V —† dS dS )z$Handle SSE response from the server.N)rw   rx   zSSE stream ended: ú(SSE stream disconnected, reconnecting...)r   r‹   r|   rŒ   r�   r3   r2   r™   rš   rp   rh   r~   ri   Ú_handle_reconnection)
rC   re   r–   rx   r�   r‘   r“   ru   r›   Úes
             r*   r¬   z,StreamableHTTPTransport._handle_sse_response�  sµ  è è € ð %)ˆØ(,Ðð	3Ý& xÑ0Ô0ˆLØ)×3Ò3Ñ5Ô5ð ð ð ð ð ð ð �cà”6ð +Ø$'¤F�Mð ”9Ð(Ø(+¬	Ð%à$(×$:Ò$:ØØÔ*ØTWÔT`Ð)j¨¬Ô)PÐ)PÐfjØ&7ð	 %;ñ %ô %ð ð ð ð ð ð �ð ð Ø"Ÿ/š/Ñ+Ô+Ð+Ð+Ð+Ð+Ð+Ð+Ð+Ø�F�Fðð# 6Ð5øõ( ð 	3ð 	3ð 	3Ý�LŠLÐ1¨aÐ1Ð1Ñ2Ô2Ð2Ð2Ð2Ð2Ð2Ð2øøøøð	3øøøð Ð$Ý�KŠKÐBÑCÔCÐCØ×+Ò+¨C°Ð@QÑRÔRÐRÐRÐRÐRÐRÐRÐRÐRÐRð %Ð$s(   ˆ#B' «B%±A1B' Â$B' Â'
CÂ1CÃCr   r�   r‘   r’   c              ƒ   óÔ  K  — |t           k    r%t                               dt           › d�¦  «         dS |�|nt          }t	          j        |dz  ¦  «        ƒ d{V —† |                      ¦   «         }||t          <   d}t          |j	        j
        j        t          ¦  «        r|j	        j
        j        j        }	 t          |j        d| j        |¬¦  «        4 ƒd{V —†	 }|j                             ¦   «          t                               d¦  «         |}	|}
|                     ¦   «         2 3 d{V —†}|j        r|j        }	|j        �|j        }
|                      ||j        ||j        r|j        j        nd¦  «        ƒ d{V —†}|r3|j                             ¦   «         ƒ d{V —†  ddd¦  «        ƒd{V —† dS Œ�6 t                               d¦  «         |                      ||	|
d	¦  «        ƒ d{V —† ddd¦  «        ƒd{V —† dS # 1 ƒd{V —†swxY w Y   dS # t8          $ rI}t                               d
|› �¦  «         |                      ||||dz   ¦  «        ƒ d{V —† Y d}~dS d}~ww xY w)zFReconnect with Last-Event-ID to resume stream after server disconnect.zMax reconnection attempts (r†   Nr‡   rƒ   r„   zReconnected to SSE streamr´   r   zReconnection failed: r…   )rˆ   rh   r~   r�   rŽ   r�   rZ   r‰   r^   r1   r[   r_   r   r|   r   r/   r?   re   rŠ   ri   r‹   rŒ   r�   r3   r2   r™   rš   rµ   rp   )rC   r–   r�   r‘   r’   r”   r4   rv   r“   Úreconnect_last_event_idÚreconnect_retry_msru   r›   r¶   s                 r*   rµ   z,StreamableHTTPTransport._handle_reconnectionµ  s  è è € ð Õ/Ò/Ð/Ý�LŠLÐ\Õ7PÐ\Ð\Ð\Ñ]Ô]Ð]ØˆFð ):Ð(EÐ$Ð$ÕKhˆÝŒk˜( VÑ+Ñ,Ô,Ð,Ð,Ð,Ð,Ð,Ð,Ð,à×'Ò'Ñ)Ô)ˆØ!.ˆ•Ñð #ÐÝ�cÔ)Ô1Ô6½ÑGÔGð 	FØ"%Ô"5Ô"=Ô"BÔ"EÐð$	`Ý#Ø”
ØØ”Øð	ñ ô ð eð eð eð eð eð eð eð eð
 ØÔ%×6Ò6Ñ8Ô8Ð8Ý—’Ð7Ñ8Ô8Ð8ð 0=Ð'Ø%6Ð"à!-×!7Ò!7Ñ!9Ô!9ð ð ð ð ð ð ð ˜#Ø”vð 9Ø25´&Ð/Ø”yÐ,Ø-0¬YÐ*à(,×(>Ò(>ØØÔ.Ø+ØCFÄ<ÐY˜œÔ?Ð?ÐUYñ	)ô )ð #ð #ð #ð #ð #ð #�Kð #ð Ø*Ô3×:Ò:Ñ<Ô<Ð<Ð<Ð<Ð<Ð<Ð<Ð<Øð7eð eð eñ eô eð eð eð eð eð eð eð eð eð eð2ð ":õ" —’ÐFÑGÔGÐGØ×/Ò/°Ð5LÐN`ÐbcÑdÔdÐdÐdÐdÐdÐdÐdÐdð?eð eð eñ eô eð eð eð eð eð eð eð eð eð eð eð eð eð eð eð eð eð eð eð eøøøð eð eð eð eð eð eøõ@ ð 	`ð 	`ð 	`Ý�LŠLÐ4°Ð4Ð4Ñ5Ô5Ð5à×+Ò+¨C°Ð@QÐSZÐ]^ÑS^Ñ_Ô_Ð_Ð_Ð_Ð_Ð_Ð_Ð_Ð_Ð_Ð_Ð_Ð_Ð_øøøøð	`øøøsV   Â6#H ÃAHÄ&F5Ä,A5HÆ!H Æ4:HÇ.H È
HÈH ÈHÈH È
I'È>I"É"I'r®   c              ƒ   ó˜   K  — d|› �}t                                |¦  «         |                     t          |¦  «        ¦  «        ƒ d{V —† dS )z+Handle unexpected content type in response.zUnexpected content type: N)rh   Úerrorr   Ú
ValueError)rC   r®   r3   Ú	error_msgs       r*   r­   z7StreamableHTTPTransport._handle_unexpected_content_typeô  s[   è è € ð ?°Ð>Ð>ˆ	Ý�Š�YÑÔÐØ ×%Ò%¥j°Ñ&;Ô&;Ñ<Ô<Ð<Ð<Ð<Ð<Ð<Ð<Ð<Ð<Ð<r)   Ú
request_idc              ƒ   óº   K  — t          d|t          dd¬¦  «        ¬¦  «        }t          t          |¦  «        ¦  «        }|                     |¦  «        ƒ d{V —† dS )z)Send a session terminated error response.z2.0iX  zSession terminated)Úcoder[   )Újsonrpcr|   r»   N)r   r   r   r   r   )rC   r3   r¾   Újsonrpc_errorr1   s        r*   r¨   z6StreamableHTTPTransport._send_session_terminated_errorþ  sv   è è € õ %ØØÝ Ð0DÐEÑEÔEð
ñ 
ô 
ˆõ
 )­¸Ñ)FÔ)FÑGÔGˆØ ×%Ò% oÑ6Ô6Ð6Ð6Ð6Ð6Ð6Ð6Ð6Ð6Ð6r)   Úwrite_stream_readerÚwrite_streamÚstart_get_streamÚtgc           	   ƒ   ój  ‡ ‡‡K  — 	 |4 ƒd{V —† |2 3 d{V —†}|j         }t          |j        t          ¦  «        r|j        nd}	t	          |	o|	j        ¦  «        Št                               d|› �¦  «         ‰                      |¦  «        r
 |¦   «          t          |‰ j
        ||	|¬¦  «        Šˆˆˆ fd„}
t          |j        t          ¦  «        r|                     |
¦  «         ŒÓ |
¦   «         ƒ d{V —† Œä6 	 ddd¦  «        ƒd{V —† n# 1 ƒd{V —†swxY w Y   n*# t          $ r t                               d¦  «         Y nw xY w|                     ¦   «         ƒ d{V —† |                     ¦   «         ƒ d{V —† dS # |                     ¦   «         ƒ d{V —† |                     ¦   «         ƒ d{V —† w xY w)z&Handle writing requests to the server.NzSending client message: )r/   r0   r1   r2   r3   c               “   ó€   •K  — ‰r‰                      ‰ ¦  «        ƒ d {V —† d S ‰                     ‰ ¦  «        ƒ d {V —† d S rB   )rœ   r¯   )r–   Úis_resumptionrC   s   €€€r*   Úhandle_request_asynczAStreamableHTTPTransport.post_writer.<locals>.handle_request_async1  sh   øè è € Ø(ð AØ"&×"AÒ"AÀ#Ñ"FÔ"FÐFÐFÐFÐFÐFÐFÐFÐFÐFà"&×";Ò";¸CÑ"@Ô"@Ð@Ð@Ð@Ð@Ð@Ð@Ð@Ð@Ð@r)   zError in post_writer)r[   r^   r2   r   Úboolr˜   rh   r~   rd   r.   r0   r_   r   Ú
start_soonrp   r€   rš   )rC   r/   rÃ   r3   rÄ   rÅ   rÆ   r1   r[   r2   rÊ   r–   rÉ   s   `          @@r*   Úpost_writerz#StreamableHTTPTransport.post_writer  sø  øøøè è € ð+	(Ø*ð $5ð $5ð $5ð $5ð $5ð $5ð $5ð $5Ø-@ð #5ð #5ð #5ð #5ð #5ð #5ð #5˜/Ø-Ô5�Gõ & oÔ&>Õ@UÑVÔVð"˜Ô0Ð0à!ð õ %)¨Ð)O°hÔ6OÑ$PÔ$P�Må—L’LÐ!E¸GÐ!EÐ!EÑFÔFÐFð ×8Ò8¸ÑAÔAð +Ø(Ð(Ñ*Ô*Ð*å(Ø%Ø#'¤?Ø(7Ø!)Ø+=ðñ ô �CðAð Að Að Að Að Að Aõ " '¤,µÑ?Ô?ð 5ØŸšÐ&:Ñ;Ô;Ð;Ð;à2Ð2Ñ4Ô4Ð4Ð4Ð4Ð4Ð4Ð4Ð4Ð4ðG .AÐ-@ð$5ð $5ð $5ñ $5ô $5ð $5ð $5ð $5ð $5ð $5ð $5ð $5ð $5ð $5ð $5ð $5ð $5ð $5ð $5ð $5ð $5ð $5ð $5øøøð $5ð $5ð $5ð $5øøõL ð 	5ð 	5ð 	5Ý×ÒÐ3Ñ4Ô4Ð4Ð4Ð4ð	5øøøð %×+Ò+Ñ-Ô-Ð-Ð-Ð-Ð-Ð-Ð-Ð-Ø×%Ò%Ñ'Ô'Ð'Ð'Ð'Ð'Ð'Ð'Ð'Ð'Ð'øð %×+Ò+Ñ-Ô-Ð-Ð-Ð-Ð-Ð-Ð-Ð-Ø×%Ò%Ñ'Ô'Ð'Ð'Ð'Ð'Ð'Ð'Ð'Ð'øøøsW   ‡D �D
’C6˜CD
Ã8D Ä

DÄD ÄDÄD ÄE< Ä$EÅ E< ÅEÅE< Å<6F2c              ƒ   óœ  K  — | j         sdS 	 |                      ¦   «         }|                     | j        |¬¦  «        ƒ d{V —†}|j        dk    rt
                               d¦  «         dS |j        dvr$t
                               d|j        › �¦  «         dS dS # t          $ r(}t
                               d|› �¦  «         Y d}~dS d}~ww xY w)z2Terminate the session by sending a DELETE request.Nr„   i•  z)Server does not allow session termination)éÈ   éÌ   zSession termination failed: )	r0   rZ   Údeleter?   r§   rh   r~   rq   rp   )rC   r/   r4   re   rs   s        r*   Úterminate_sessionz)StreamableHTTPTransport.terminate_sessionC  s  è è € àŒð 	ØˆFð		AØ×+Ò+Ñ-Ô-ˆGØ#Ÿ]š]¨4¬8¸W˜]ÑEÔEÐEÐEÐEÐEÐEÐEˆHàÔ# sÒ*Ð*Ý—’ÐHÑIÔIÐIÐIÐIØÔ%¨ZÐ7Ð7Ý—’ÐT¸hÔ>RÐTÐTÑUÔUÐUÐUÐUð 8Ð7øåð 	Að 	Að 	AÝ�NŠNÐ?¸#Ð?Ð?Ñ@Ô@Ð@Ð@Ð@Ð@Ð@Ð@Ð@øøøøð	Aøøøs   �AB Á*+B Â
CÂ#CÃCc                 ó   — | j         S )zGet the current session ID.)r0   )rC   s    r*   Úget_session_idz&StreamableHTTPTransport.get_session_idS  s
   € àŒÐr)   )NrE   rF   N)NNF)F)Nr   )/r$   r%   r&   r'   r
   r9   rD   r   r;   r<   r   r6   ÚAuthrM   r	   rZ   r   rË   rb   rd   ÚResponserk   rt   r   r:   r   r   r   r�   r7   r•   r.   rœ   r¯   r«   r¬   Úintrµ   r­   r¨   ÚStreamReaderr   r   r   rÍ   rÒ   rÔ   r(   r)   r*   r>   r>   X   s  € € € € € Ø9Ð9àØ-˜CÐ- DÐ-Ð-Ð-ñ „XØ-àØ€Zð	<ñô ð *.Ø%'Ø.4Ø"&ðð àðð �c˜3�h” $Ñ&ðð ˜Ñ"ð	ð
   )Ñ+ðð Œj˜4Ñðð 
ðð ð ñ	ô ñ „Xð
ð ØØ &Øð&%ð &%àð&%ð ð&%ð ð	&%ð
 ð&%ð ð&%ð 
ð&%ð &%ð &%ð &%ðP $ s¨C x¤.ð ð ð ð ð"`°.ð `ÀTð `ð `ð `ð `ðt°Nð tÀtð tð tð tð tðCà”.ðCð 
ðCð Cð Cð CðEàðEð 
ðEð Eð Eð Eð* 15ØGKØ"'ð-ð -àð-ð )ð-ð '¨Ñ-ð	-ð
 & s e¨Y°t¬_Ð&<Ô=ÀÑDð-ð  ð-ð 
ð-ð -ð -ð -ð^41àÔ!ð41ð )ð41ð 
ð	41ð 41ð 41ð 41ðl°Nð Àtð ð ð ð ðB(¨nð (Àð (ð (ð (ð (ð\ #(ð	/ð /à”.ð/ð )ð/ð  ð	/ð
 
ð/ð /ð /ð /ð2 #(ð	&Sð &Sà”.ð&Sð ð&Sð  ð	&Sð
 
ð&Sð &Sð &Sð &SðX )-Øð=`ð =`àð=`ð ð=`ð  ™:ð	=`ð
 ð=`ð 
ð=`ð =`ð =`ð =`ð~=àð=ð )ð=ð 
ð	=ð =ð =ð =ð7à(ð7ð ð7ð 
ð	7ð 7ð 7ð 7ð5(àÔ!ð5(ð *ð5(ð )ð	5(ð
 -¨^Ô<ð5(ð # 2 t 8Ô,ð5(ð ð5(ð 
ð5(ð 5(ð 5(ð 5(ðnA¨eÔ.?ð AÀDð Að Að Að Að   d¡
ð ð ð ð ð ð r)   r>   T©Úhttp_clientÚterminate_on_closer?   rÚ   rÛ   r@   c               ó®  ‡	‡
‡‡K  — t          j        t          t          z           d¦  «        \  Š
}t          j        t                   d¦  «        \  }}|du}|Š	‰	€t	          ¦   «         Š	t          | ¦  «        Št          j        ¦   «         4 ƒd{V —†Š	 t                               d| › �¦  «         t          j
        ¦   «         4 ƒd{V —†}|s|                     ‰	¦  «        ƒ d{V —† dˆ	ˆ
ˆˆfd„}‰                     ‰j        ‰	|‰
||‰¦  «         	 ||‰j        fW V — ‰j        r|r‰                     ‰	¦  «        ƒ d{V —† ‰j                             ¦   «          nB# ‰j        r|r‰                     ‰	¦  «        ƒ d{V —† ‰j                             ¦   «          w xY w	 ddd¦  «        ƒd{V —† n# 1 ƒd{V —†swxY w Y   ‰
                     ¦   «         ƒ d{V —† |                     ¦   «         ƒ d{V —† n9# ‰
                     ¦   «         ƒ d{V —† |                     ¦   «         ƒ d{V —† w xY w	 ddd¦  «        ƒd{V —† dS # 1 ƒd{V —†swxY w Y   dS )a8  
    Client transport for StreamableHTTP.

    Args:
        url: The MCP server endpoint URL.
        http_client: Optional pre-configured httpx.AsyncClient. If None, a default
            client with recommended MCP timeouts will be created. To configure headers,
            authentication, or other HTTP settings, create an httpx.AsyncClient and pass it here.
        terminate_on_close: If True, send a DELETE request to terminate the session
            when the context exits.

    Yields:
        Tuple containing:
            - read_stream: Stream for reading messages from the server
            - write_stream: Stream for sending messages to the server
            - get_session_id_callback: Function to retrieve the current session ID

    Example:
        See examples/snippets/clients/ for usage patterns.
    r   Nz'Connecting to StreamableHTTP endpoint: r@   c                  ó@   •— ‰                      ‰j        ‰ ‰¦  «         d S rB   )rÌ   r•   )r/   r3   rÆ   Ú	transports   €€€€r*   rÅ   z0streamable_http_client.<locals>.start_get_stream�  s#   ø€ Ø—M’M )Ô"=¸vÐGYÑZÔZÐZÐZÐZr)   )r@   N)rŽ   Úcreate_memory_object_streamr   rp   r   r>   Úcreate_task_grouprh   r~   Ú
contextlibÚAsyncExitStackÚenter_async_contextrÌ   rÍ   rÔ   r0   rÒ   Úcancel_scopeÚcancelrš   )r?   rÚ   rÛ   Úread_streamrÄ   rÃ   Úclient_providedÚstackrÅ   r/   r3   rÆ   rÞ   s            @@@@r*   Ústreamable_http_clientré   X  s-  øøøøè è € õD ',Ô&GÍÕYbÑHbÔ&cÐdeÑ&fÔ&fÑ#Ð˜Ý(-Ô(IÍ.Ô(YÐZ[Ñ(\Ô(\Ñ%€LÐ%ð "¨Ð-€OØ€Fà€~å'Ñ)Ô)ˆå'¨Ñ,Ô,€IåÔ&Ñ(Ô(ð "(ð "(ð "(ð "(ð "(ð "(ð "(¨Bð!	(Ý�LŠLÐHÀ3ÐHÐHÑIÔIÐIå!Ô0Ñ2Ô2ð -ð -ð -ð -ð -ð -ð -°eà&ð <Ø×3Ò3°FÑ;Ô;Ð;Ð;Ð;Ð;Ð;Ð;Ð;ð[ð [ð [ð [ð [ð [ð [ð [ð [ð —’ØÔ)ØØ'Ø&Ø Ø$Øñô ð ð	-à#Ø$Ø!Ô0ðð ð ð ð ð !Ô+ð BÐ0Bð BØ'×9Ò9¸&ÑAÔAÐAÐAÐAÐAÐAÐAÐAØ”O×*Ò*Ñ,Ô,Ð,Ð,øð !Ô+ð BÐ0Bð BØ'×9Ò9¸&ÑAÔAÐAÐAÐAÐAÐAÐAÐAØ”O×*Ò*Ñ,Ô,Ð,Ð,øøøÐ,ð7-ð -ð -ñ -ô -ð -ð -ð -ð -ð -ð -ð -ð -ð -ð -ð -ð -ð -ð -ð -ð -ð -ð -øøøð -ð -ð -ð -ð: %×+Ò+Ñ-Ô-Ð-Ð-Ð-Ð-Ð-Ð-Ð-Ø×%Ò%Ñ'Ô'Ð'Ð'Ð'Ð'Ð'Ð'Ð'Ð'øð %×+Ò+Ñ-Ô-Ð-Ð-Ð-Ð-Ð-Ð-Ð-Ø×%Ò%Ñ'Ô'Ð'Ð'Ð'Ð'Ð'Ð'Ð'Ð'øøøÐ'ðE"(ð "(ð "(ñ "(ô "(ð "(ð "(ð "(ð "(ð "(ð "(ð "(ð "(ð "(ð "(ð "(ð "(ð "(ð "(ð "(ð "(ð "(ð "(ð "(øøøð "(ð "(ð "(ð "(ð "(ð "(sg   ÂIÂ6G7Ã	AF1ÄEÄ>F1Å?FÆF1ÆG7Æ1
F;	Æ;G7Æ>F;	Æ?G7Ç5IÇ76H-È-IÉ
IÉIz%Use `streamable_http_client` instead.rE   rF   r4   rG   r5   Úhttpx_client_factoryrH   c                óØ  K  — t          |t          ¦  «        r|                     ¦   «         n|}t          |t          ¦  «        r|                     ¦   «         n|} ||t          j        ||¬¦  «        |¬¦  «        }	|	4 ƒd {V —† t          | |	|¬¦  «        4 ƒd {V —†	 }
|
W V — d d d ¦  «        ƒd {V —† n# 1 ƒd {V —†swxY w Y   d d d ¦  «        ƒd {V —† d S # 1 ƒd {V —†swxY w Y   d S )N)Úread)r4   rG   rH   rÙ   )r^   r   Útotal_secondsr6   ÚTimeoutré   )r?   r4   rG   r5   rÛ   rê   rH   Útimeout_secondsÚsse_read_timeout_secondsr/   Ústreamss              r*   Ústreamablehttp_clientrò   ¬  s.  è è € õ& 2<¸GÅYÑ1OÔ1OÐ\�g×+Ò+Ñ-Ô-Ð-ÐU\€Oå,6Ð7GÍÑ,SÔ,SÐiÐ×&Ò&Ñ(Ô(Ð(ÐYið ð
 "Ð!ØÝ”˜oÐ4LÐMÑMÔMØðñ ô €Fð ð ð ð ð ð ð ð ð Ý)ØØØ1ð
ñ 
ô 
ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð ØˆMˆMˆMˆMð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ðð ð ñ ô ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð øøøð ð ð ð ð ð s6   ÂCÂB5Â#CÂ5
B?	Â?CÃB?	ÃCÃ
C#Ã&C#)Mr'   rá   ÚloggingÚcollections.abcr   r   r   r   Údataclassesr   Údatetimer   Útypingr	   r
   Úwarningsr   rŽ   r6   Ú	anyio.abcr   Úanyio.streams.memoryr   r   Ú	httpx_sser   r   r   Útyping_extensionsr   Úmcp.shared._httpx_utilsr   r   Úmcp.shared.messager   r   Ú	mcp.typesr   r   r   r   r   r   r   r   Ú	getLoggerr$   rh   rp   ÚSessionMessageOrErrorr:   rØ   r9   ÚGetSessionIdCallbackrX   rY   r‰   r�   rˆ   rW   rV   rT   rU   ÚobjectrM   r"   r,   r.   r>   r7   rË   Útupleré   r;   r<   rÕ   rò   r(   r)   r*   ú<module>r     s“  ððð ð Ð Ð Ð Ø €€€Ø ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ø *Ð *Ð *Ð *Ð *Ð *Ø !Ð !Ð !Ð !Ð !Ð !Ø Ð Ð Ð Ð Ð Ø  Ð  Ð  Ð  Ð  Ð  Ð  Ð  Ø Ð Ð Ð Ð Ð à €€€Ø €€€Ø Ð Ð Ð Ð Ð Ø RÐ RÐ RÐ RÐ RÐ RÐ RÐ RØ @Ð @Ð @Ð @Ð @Ð @Ð @Ð @Ð @Ð @Ø (Ð (Ð (Ð (Ð (Ð (ðð ð ð ð ð ð ð ð EÐ DÐ DÐ DÐ DÐ DÐ DÐ Dð	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 
ˆÔ	˜8Ñ	$Ô	$€ð '¨Ñ2Ð Ø%Ð&;Ô<€Ø(¨Ô8€Ø  C¨$¡J Ô/Ð à!€Ø-Ð Ø€ð !%Ð ØÐ Ø€Ø	€ð €Ø€ð 
ˆ‰Œ€ð>ð >ð >ð >ð >˜)ñ >ô >ð >ð5ð 5ð 5ð 5ð 5Ð)ñ 5ô 5ð 5ð ð	*ð 	*ð 	*ð 	*ð 	*ñ 	*ô 	*ñ „ð	*ð}ð }ð }ð }ð }ñ }ô }ð }ð@ ð -1Ø#ð	P(ð P(ð P(Ø	ðP(ð Ô" TÑ)ðP(ð ð	P(ð
 Ø	Ø! .°9Ñ"<Ô=Ø˜~Ô.Øð	ôð
 	ð
ôðP(ð P(ð P(ñ ÔðP(ðf Ø€Ð3Ñ4Ô4ð &*Ø!#Ø*0Ø#Ø1GØ"ð$ð $Ø	ð$à�#�s�(Œ^˜dÑ"ð$ð �YÑð$ð ˜iÑ'ð	$ð
 ð$ð /ð$ð Œ*�tÑ
ð$ð Ø	Ø! .°9Ñ"<Ô=Ø˜~Ô.Øð	ôð
 	ð
ôð$ð $ð $ñ 5Ô4ñ Ôð$ð $ð $r)   