§
    ÌtºfJ€  ã                   ó¬  — d dl mZmZ d dlmZ d dlmZ d dlZ ej        ¦   «          d dl	Z
d dlmZ d dl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 d dlmZ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#m$Z$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/m0Z0m1Z1 dZ2d„ Z3d„ Z4d„ Z5d„ Z6 G d„ de)¦  «        Z7 G d„ de
j8        j'        j9        ¦  «        Z:e G d„ de:e'j;        ¦  «        ¦   «         Z;e G d„ d e:e'j<        ¦  «        ¦   «         Z< G d!„ d"e=¦  «        Z>e G d#„ d$e>e'j?        e
j8        j'        j@        ¦  «        ¦   «         Z?e G d%„ d&e>e'jA        e
j8        j'        jB        ¦  «        ¦   «         ZA ee¦  «         G d'„ d(e=¦  «        ¦   «         ZC G d)„ d*eCe;¦  «        ZD G d+„ d,eCe<¦  «        ZE G d-„ d.e?¦  «        ZF G d/„ d0eA¦  «        ZGed>d2„¦   «         ZHed?d5„¦   «         ZIe G d6„ d7ejJ        e;¦  «        ¦   «         ZJe G d8„ d9ejK        e?¦  «        ¦   «         ZKe G d:„ d;ejL        e<¦  «        ¦   «         ZLe G d<„ d=ejM        eA¦  «        ¦   «         ZMdS )@é    )Ú	b64encodeÚ	b64decode)ÚOptional)ÚimplementerN)Ú	endpoints)Ú
ITransport)ÚConnectionDoneÚConnectionAbortedÚConnectionLost)ÚDeferred)ÚFailure)ÚconnectionDone)ÚpublicÚhltypeÚhlval)Ú_is_tls_errorÚ_maybe_tls_reason)Ú	websocket)ÚTransportDetails)ÚConnectionRequestÚConnectionResponseÚConnectionDeny)Úprotocol)ÚIWebSocketClientAgent)Úcreate_transport_detailsÚtransport_channel_id)ÚPerMessageDeflateOfferÚPerMessageDeflateOfferAcceptÚPerMessageDeflateResponseÚPerMessageDeflateResponseAccept)Úcreate_client_agentÚWebSocketAdapterProtocolÚWebSocketServerProtocolÚWebSocketClientProtocolÚWebSocketAdapterFactoryÚWebSocketServerFactoryÚWebSocketClientFactoryÚWrappingWebSocketAdapterÚWrappingWebSocketServerProtocolÚWrappingWebSocketClientProtocolÚWrappingWebSocketServerFactoryÚWrappingWebSocketClientFactoryÚlistenWSÚ	connectWSÚWampWebSocketServerProtocolÚWampWebSocketServerFactoryÚWampWebSocketClientProtocolÚWampWebSocketClientFactoryc                 ó    — t          | ¦  «        S )zB
    :returns: an instance implementing IWebSocketClientAgent
    )Ú_TwistedWebSocketClientAgent©Úreactors    úY/var/www/surfInsights/venv3-11/lib/python3.11/site-packages/autobahn/twisted/websocket.pyr!   r!   V   s   € õ (¨Ñ0Ô0Ð0ó    c                 ó   — t          | t          ¦  «        s/t          d                     t	          | ¦  «        ¦  «        ¦  «        ‚|                      d¦  «        s$|                      d¦  «        st          d¦  «        ‚dS )z>
    raises a ValueError if `transport_config` is invalid
    z-'transport_config' must be a string, found {}zws://zwss://z6'transport_config' must start with 'ws://' or 'wss://'N)Ú
isinstanceÚstrÚ
ValueErrorÚformatÚtypeÚ
startswith)Útransport_configs    r7   Úcheck_transport_configrA   ]   s�   € õ
 Ð&­Ñ,Ô,ð 
ÝØ;×BÒBÅ4ÐHXÑCYÔCYÑZÔZñ
ô 
ð 	
ð ×&Ò& wÑ/Ô/ð 
Ø×&Ò& xÑ0Ô0ð
åØDñ
ô 
ð 	
ð ˆ4r8   c                 óÐ   — t          | t          ¦  «        st          d¦  «        ‚g d¢}|                      ¦   «         D ](}||vr"t          d                     |¦  «        ¦  «        ‚Œ)dS )z5
    raises a ValueError if `options` is invalid
    z'options' must be a dict)ÚoriginÚ	protocolsÚ	useragentÚheadersÚproxyz'options' may not contain '{}'N)r:   Údictr<   Úkeysr=   )ÚoptionsÚ
valid_keysÚactual_ks      r7   Úcheck_client_optionsrM   q   s’   € õ
 �g�tÑ$Ô$ð 
ÝØ&ñ
ô 
ð 	
ð
ð ð €Jð —L’L‘N”Nð ð ˆØ˜:Ð%Ð%ÝØ0×7Ò7¸ÑAÔAñô ð ð &ðð r8   c                 óh  — |j         r ddlm} |                     |j        ¦  «        }|j        �4||_        t          j        | |j        d         |j        d         ¦  «        }nO|j         r(ddlm} t          j	        | |j        |j
        |¦  «        }n t          j        | |j        |j
        ¦  «        }|S )Nr   ©ÚsslÚhostÚport)ÚisSecureÚtwisted.internetrP   ÚoptionsForClientTLSrQ   rG   ÚcontextFactoryr   ÚHostnameEndpointÚSSL4ClientEndpointrR   )r6   Úfactoryr@   rJ   rP   Úcontext_factoryÚendpoints          r7   Ú_endpoint_from_configr\   Š   sÝ   € ð Ôð @à(Ð(Ð(Ð(Ð(Ð(Ø×1Ò1°'´,Ñ?Ô?ˆà„}Ð Ø!0ˆÔÝÔ-ØØŒM˜&Ô!ØŒM˜&Ô!ñ
ô 
ˆˆð Ôð 	Ø,Ð,Ð,Ð,Ð,Ð,Ý Ô3ØØ”Ø”Øñ	ô ˆHˆHõ !Ô1ØØ”Ø”ñô ˆHð €Or8   c                   ó    — e Zd ZdZd„ Zdd„ZdS )r4   z6
    This agent creates connections using Twisted
    c                 ó   — || _         d S ©N)Ú_reactor)Úselfr6   s     r7   Ú__init__z%_TwistedWebSocketClientAgent.__init__¸   s   € ØˆŒˆˆr8   Nc                 óD  ‡‡	— t          |¦  «         t          |¦  «         t          d|| j        dœ|¤Ž}|€t          n||_        t          | j        |||¦  «        }t          ¦   «         Š	|                     |¦  «        }ˆ	fd„Šˆˆ	fd„}| 	                    |‰¦  «         ‰	S )a-  
        Open a new connection.

        :param dict transport_config: valid transport configuration

        :param dict options: additional options for the factory

        :param protocol_class: a callable that returns an instance of
            the protocol (WebSocketClientProtocol if the default None
            is passed in)

        :returns: a Deferred that fires with an instance of
            `protocol_class` (or WebSocketClientProtocol by default)
            that has successfully shaken hands (completed the
            handshake).
        )Úurlr6   Nc                 ó2   •— ‰                      | ¦  «         d S r_   )Úerrback)ÚfÚrtn_ds    €r7   Úfailedz1_TwistedWebSocketClientAgent.open.<locals>.failedÜ   s   ø€ Ø�MŠM˜!ÑÔÐÐÐr8   c                 óL   •‡ — ˆ ˆfd„}‰ j                              |‰¦  «         ‰ S )Nc                 ó2   •— ‰                      ‰¦  «         | S r_   )Úcallback)ÚargÚprotorh   s    €€r7   Úhandshake_completedzQ_TwistedWebSocketClientAgent.open.<locals>.got_proto.<locals>.handshake_completedá   s   ø€ Ø—’˜uÑ%Ô%Ð%Ø�
r8   )Úis_openÚaddCallbacks)rn   ro   ri   rh   s   ` €€r7   Ú	got_protoz4_TwistedWebSocketClientAgent.open.<locals>.got_protoß   sB   øø€ ðð ð ð ð ð ð ŒM×&Ò&Ð':¸FÑCÔCÐCØˆLr8   © )
rA   rM   r'   r`   r$   r   r\   r   Úconnectrq   )
ra   r@   rJ   Úprotocol_classrY   r[   Úproto_drr   ri   rh   s
           @@r7   Úopenz!_TwistedWebSocketClientAgent.open»   sî   øø€ õ" 	Ð/Ñ0Ô0Ð0Ý˜WÑ%Ô%Ð%å(ð 
Ø Ø”Mð
ð 
ð ð
ð 
ˆð
 7EÐ6LÕ2Ð2ÐR`ˆÔõ )¨¬¸ÐAQÐSZÑ[Ô[ˆå‘
”
ˆØ×"Ò" 7Ñ+Ô+ˆð	ð 	ð 	ð 	ð 	ð	ð 	ð 	ð 	ð 	ð 	ð 	×Ò˜Y¨Ñ/Ô/Ð/Øˆr8   r_   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__rb   rw   rs   r8   r7   r4   r4   ³   sA   € € € € € ðð ð ð  ð  ð,ð ,ð ,ð ,ð ,ð ,r8   r4   c                   óÞ   — e Zd ZU dZ ej        ¦   «         ZdZee	         e
d<   dZee         e
d<   d„ Zefdefd„Zdefd	„Zdd„Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z dS )r"   aÄ  
    Adapter class for Twisted WebSocket client and server protocols.

    Called from Twisted:

    * :meth:`autobahn.twisted.websocket.WebSocketAdapterProtocol.connectionMade`
    * :meth:`autobahn.twisted.websocket.WebSocketAdapterProtocol.connectionLost`
    * :meth:`autobahn.twisted.websocket.WebSocketAdapterProtocol.dataReceived`

    Called from Network-independent Code (WebSocket implementation):

    * :meth:`autobahn.twisted.websocket.WebSocketAdapterProtocol._onOpen`
    * :meth:`autobahn.twisted.websocket.WebSocketAdapterProtocol._onMessageBegin`
    * :meth:`autobahn.twisted.websocket.WebSocketAdapterProtocol._onMessageFrameData`
    * :meth:`autobahn.twisted.websocket.WebSocketAdapterProtocol._onMessageFrameEnd`
    * :meth:`autobahn.twisted.websocket.WebSocketAdapterProtocol._onMessageEnd`
    * :meth:`autobahn.twisted.websocket.WebSocketAdapterProtocol._onMessage`
    * :meth:`autobahn.twisted.websocket.WebSocketAdapterProtocol._onPing`
    * :meth:`autobahn.twisted.websocket.WebSocketAdapterProtocol._onPong`
    * :meth:`autobahn.twisted.websocket.WebSocketAdapterProtocol._onClose`

    FIXME:

    * :meth:`autobahn.twisted.websocket.WebSocketAdapterProtocol._closeConnection`
    * :meth:`autobahn.twisted.websocket.WebSocketAdapterProtocol._create_transport_details`
    * :meth:`autobahn.twisted.websocket.WebSocketAdapterProtocol.registerProducer`
    * :meth:`autobahn.twisted.websocket.WebSocketAdapterProtocol.unregisterProducer`
    NÚpeerÚ	is_serverc                 óŒ  — t          | j        | j        ¦  «        | _        t          j        | j        _        | j        j        | _        	 | j                             | j	        ¦  «         n#  Y nxY w|  
                    ¦   «          | j                             dt          | j        ¦  «        t          | j        ¦  «        ¬¦  «         d S )Nz/{func} connection established for peer="{peer}"©Úfuncr}   )r   Ú	transportr~   Ú_transport_detailsr   ÚCHANNEL_FRAMING_WEBSOCKETÚchannel_framingr}   ÚsetTcpNoDelayÚ
tcpNoDelayÚ_connectionMadeÚlogÚdebugr   ÚconnectionMader   ©ra   s    r7   r‹   z'WebSocketAdapterProtocol.connectionMade  sÀ   € õ
 #;¸4¼>È4Ì>Ñ"ZÔ"ZˆÔÝ2BÔ2\ˆÔÔ/ð Ô+Ô0ˆŒ	ð	ØŒN×(Ò(¨¬Ñ9Ô9Ð9Ð9øð	àˆDøøøð 	×ÒÑÔÐð 	Œ�ŠÐHÝ" 4Ô#6Ñ7Ô7Ý! $¤)Ñ,Ô,ð 	ñ 	.ô 	.ð 	.ð 	.ð 	.s   ÁA( Á(A,Úreasonc                 ó  — d}t          |j        t          ¦  «        r%| j                             d| j        ¬¦  «         d}�n)t          |j        ¦  «        r-| j                             t          |j        ¦  «        ¦  «         nèt          |j        t          ¦  «        r"| j                             d| j        ¬¦  «         n¬t          |j        t          ¦  «        rXt          |j        ¦  «        }t          |j        d¦  «        r|j        j        }| j                             d| j        |¬¦  «         n:| j                             d	| j        t          |j        ¦  «        |j        ¬
¦  «         |                      |¦  «         |rC| j                             dt!          | j        ¦  «        t%          | j        ¦  «        ¬¦  «         d S | j                             dt!          | j        ¦  «        t%          | j        ¦  «        |¬¦  «         d S )NFz,Connection to/from {peer} was closed cleanly)r}   Tz-Connection to/from {peer} was aborted locallyÚmessagezDConnection to/from {peer} was lost in a non-clean fashion: {message})r}   r�   z7Connection to/from {peer} lost ({error_type}): {error}))r}   Ú
error_typeÚerrorz8{func} connection lost for peer="{peer}", closed cleanlyr€   zD{func} connection lost for peer="{peer}", closed with error {reason})r�   r}   r�   )r:   Úvaluer	   r‰   rŠ   r}   r   r‘   r   r
   r   r;   Úhasattrr�   r>   Ú_connectionLostr   ÚconnectionLostr   )ra   r�   Ú	was_cleanr�   s       r7   r•   z'WebSocketAdapterProtocol.connectionLost'  s  € ð ˆ	Ý�f”l¥NÑ3Ô3ð 	^ØŒH�NŠNÐIØ $¤	ð ñ +ô +ð +àˆI‰Iå˜6œ<Ñ(Ô(ð 	^ØŒH�NŠNÕ,¨V¬\Ñ:Ô:Ñ;Ô;Ð;Ð;å˜œÕ&7Ñ8Ô8ð 	^ØŒH�NŠNÐJØ $¤	ð ñ +ô +ð +ð +õ ˜œ¥nÑ5Ô5ð 	^Ý˜&œ,Ñ'Ô'ˆGÝ�v”| YÑ/Ô/ð /Ø œ,Ô.�ØŒH�NŠNØVØ”YØð ñ ô ð ð ð ŒH�NŠNÐTØ $¤	µd¸6¼<Ñ6HÔ6HÐPVÔP\ð ñ ^ô ^ð ^ð 	×Ò˜VÑ$Ô$Ð$ð ð 	*ØŒH�NŠNÐUÝ & tÔ':Ñ ;Ô ;Ý % d¤iÑ 0Ô 0ð ñ 2ô 2ð 2ð 2ð 2ð ŒH�NŠNÐaÝ & tÔ':Ñ ;Ô ;Ý % d¤iÑ 0Ô 0Ø"(ð ñ *ô *ð *ð *ð *r8   Údatac           
      óè   — | j                              dt          | j        ¦  «        t	          | j        ¦  «        t	          t          |¦  «        ¦  «        ¬¦  «         |                      |¦  «         d S )Nz2{func} received {data_len} bytes for peer="{peer}")r�   r}   Údata_len)r‰   rŠ   r   ÚdataReceivedr   r}   ÚlenÚ_dataReceived©ra   r—   s     r7   rš   z%WebSocketAdapterProtocol.dataReceivedU  sj   € ØŒ�ŠÐKÝ" 4Ô#4Ñ5Ô5Ý! $¤)Ñ,Ô,Ý %¥c¨$¡i¤iÑ 0Ô 0ð 	ñ 	2ô 	2ð 	2ð 	×Ò˜4Ñ Ô Ð Ð Ð r8   Fc                 óœ   — |r0t          | j        d¦  «        r| j                             ¦   «          d S | j                             ¦   «          d S )NÚabortConnection)r“   r‚   rŸ   ÚloseConnection)ra   Úaborts     r7   Ú_closeConnectionz)WebSocketAdapterProtocol._closeConnection^  sT   € Øð 	,•W˜Tœ^Ð->Ñ?Ô?ð 	,ØŒN×*Ò*Ñ,Ô,Ð,Ð,Ð,ð ŒN×)Ò)Ñ+Ô+Ð+Ð+Ð+r8   c                 ó¢   — | j         j        r.dt          | j        | j         j        d¦  «        i}|| j         _        |                      ¦   «          d S )Nz
tls-unique)rƒ   Ú	is_securer   r‚   r~   Ú
channel_idÚonOpen)ra   r¥   s     r7   Ú_onOpenz WebSocketAdapterProtocol._onOpene  sR   € ØÔ"Ô,ð 	<ð Õ2°4´>À4ÔCZÔCdÐfrÑsÔsðˆJð 2<ˆDÔ#Ô.à�Š‰Œˆˆˆr8   c                 ó0   — |                       |¦  «         d S r_   )ÚonMessageBegin)ra   ÚisBinarys     r7   Ú_onMessageBeginz(WebSocketAdapterProtocol._onMessageBeginp  s   € Ø×Ò˜HÑ%Ô%Ð%Ð%Ð%r8   c                 ó0   — |                       |¦  «         d S r_   )ÚonMessageFrameBegin)ra   Úlengths     r7   Ú_onMessageFrameBeginz-WebSocketAdapterProtocol._onMessageFrameBegins  s   € Ø× Ò  Ñ(Ô(Ð(Ð(Ð(r8   c                 ó0   — |                       |¦  «         d S r_   )ÚonMessageFrameData©ra   Úpayloads     r7   Ú_onMessageFrameDataz,WebSocketAdapterProtocol._onMessageFrameDatav  s   € Ø×Ò Ñ(Ô(Ð(Ð(Ð(r8   c                 ó.   — |                       ¦   «          d S r_   )ÚonMessageFrameEndrŒ   s    r7   Ú_onMessageFrameEndz+WebSocketAdapterProtocol._onMessageFrameEndy  s   € Ø×ÒÑ Ô Ð Ð Ð r8   c                 ó0   — |                       |¦  «         d S r_   )ÚonMessageFramer²   s     r7   Ú_onMessageFramez(WebSocketAdapterProtocol._onMessageFrame|  s   € Ø×Ò˜GÑ$Ô$Ð$Ð$Ð$r8   c                 ó.   — |                       ¦   «          d S r_   )ÚonMessageEndrŒ   s    r7   Ú_onMessageEndz&WebSocketAdapterProtocol._onMessageEnd  s   € Ø×ÒÑÔÐÐÐr8   c                 ó2   — |                       ||¦  «         d S r_   )Ú	onMessage)ra   r³   rª   s      r7   Ú
_onMessagez#WebSocketAdapterProtocol._onMessage‚  s   € Ø�Š�w Ñ)Ô)Ð)Ð)Ð)r8   c                 ó0   — |                       |¦  «         d S r_   )ÚonPingr²   s     r7   Ú_onPingz WebSocketAdapterProtocol._onPing…  ó   € Ø�Š�GÑÔÐÐÐr8   c                 ó0   — |                       |¦  «         d S r_   )ÚonPongr²   s     r7   Ú_onPongz WebSocketAdapterProtocol._onPongˆ  rÄ   r8   c                 ó4   — |                       |||¦  «         d S r_   )ÚonClose©ra   ÚwasCleanÚcoder�   s       r7   Ú_onClosez!WebSocketAdapterProtocol._onClose‹  s   € Ø�Š�X˜t VÑ,Ô,Ð,Ð,Ð,r8   c                 ó<   — | j                              ||¦  «         dS )zâ
        Register a Twisted producer with this protocol.

        :param producer: A Twisted push or pull producer.
        :type producer: object
        :param streaming: Producer type.
        :type streaming: bool
        N)r‚   ÚregisterProducer)ra   ÚproducerÚ	streamings      r7   rÏ   z)WebSocketAdapterProtocol.registerProducerŽ  s"   € ð 	Œ×'Ò'¨°)Ñ<Ô<Ð<Ð<Ð<r8   c                 ó8   — | j                              ¦   «          dS )zA
        Unregister Twisted producer with this protocol.
        N)r‚   ÚunregisterProducerrŒ   s    r7   rÓ   z+WebSocketAdapterProtocol.unregisterProducer™  s   € ð 	Œ×)Ò)Ñ+Ô+Ð+Ð+Ð+r8   )F)!rx   ry   rz   r{   ÚtxaioÚmake_loggerr‰   r}   r   r;   Ú__annotations__r~   Úboolr‹   r   r   r•   Úbytesrš   r¢   r§   r«   r¯   r´   r·   rº   r½   rÀ   rÃ   rÇ   rÍ   rÏ   rÓ   rs   r8   r7   r"   r"   ê   s�  € € € € € € ðð ð: ˆ%Ô
Ñ
Ô
€Cà€Dˆ(�3Œ-ÐÐÑØ $€Iˆx˜Œ~Ð$Ð$Ñ$ð.ð .ð .ð4 0>ð ,*ð ,* Wð ,*ð ,*ð ,*ð ,*ð\! ð !ð !ð !ð !ð,ð ,ð ,ð ,ð	ð 	ð 	ð&ð &ð &ð)ð )ð )ð)ð )ð )ð!ð !ð !ð%ð %ð %ðð ð ð*ð *ð *ðð ð ðð ð ð-ð -ð -ð	=ð 	=ð 	=ð,ð ,ð ,ð ,ð ,r8   r"   c                   ó4   — e Zd ZdZ ej        ¦   «         ZdZdS )r#   zŒ
    Base class for Twisted-based WebSocket server protocols.

    Implements :class:`autobahn.websocket.interfaces.IWebSocketChannel`.
    TN)rx   ry   rz   r{   rÔ   rÕ   r‰   r~   rs   r8   r7   r#   r#      s/   € € € € € ðð ð ˆ%Ô
Ñ
Ô
€CØ€I€I€Ir8   r#   c                   óF   — e Zd ZdZ ej        ¦   «         ZdZdefd„Z	d„ Z
dS )r$   zŒ
    Base class for Twisted-based WebSocket client protocols.

    Implements :class:`autobahn.websocket.interfaces.IWebSocketChannel`.
    FÚresponsec                 óŠ   — | j                              dt          | j        ¦  «        |¬¦  «         |                      |¦  «        S )Nz{meth}(response={response}))ÚmethrÛ   )r‰   rŠ   r   Ú
_onConnectÚ	onConnect)ra   rÛ   s     r7   rÞ   z"WebSocketClientProtocol._onConnectº  s:   € ØŒ�ŠÐ4½6À$Ä/Ñ;RÔ;RÐ]eˆÑfÔfÐfØ�~Š~˜hÑ'Ô'Ð'r8   c                 ó‚   — | j                              d¦  «         | j                             | j        j        ¦  «         d S )NzStarting TLS upgrade)r‰   rŠ   r‚   ÚstartTLSrY   rV   rŒ   s    r7   rá   z WebSocketClientProtocol.startTLS¾  s8   € ØŒ�ŠÐ-Ñ.Ô.Ð.ØŒ×Ò ¤Ô ;Ñ<Ô<Ð<Ð<Ð<r8   N)rx   ry   rz   r{   rÔ   rÕ   r‰   r~   r   rÞ   rá   rs   r8   r7   r$   r$   ¯  s`   € € € € € ðð ð ˆ%Ô
Ñ
Ô
€CØ€Ið(Ð#5ð (ð (ð (ð (ð=ð =ð =ð =ð =r8   r$   c                   ó   — e Zd ZdZdS )r%   zP
    Adapter class for Twisted-based WebSocket client and server factories.
    N©rx   ry   rz   r{   rs   r8   r7   r%   r%   Ã  ó   € € € € € ðð ð ð r8   r%   c                   ó6   — e Zd ZdZ ej        ¦   «         Zd„ ZdS )r&   z˜
    Base class for Twisted-based WebSocket server factories.

    Implements :class:`autobahn.websocket.interfaces.IWebSocketServerChannelFactory`
    c                 ó„   — |                      dd¦  «        }|€ddlm} || _        t          j        j        | g|¢R i |¤Ž dS )a  

        .. note::
            In addition to all arguments to the constructor of
            :meth:`autobahn.websocket.interfaces.IWebSocketServerChannelFactory`,
            you can supply a ``reactor`` keyword argument to specify the
            Twisted reactor to be used.
        r6   Nr   r5   )ÚpoprT   r6   r   r&   rb   )ra   ÚargsÚkwargsr6   s       r7   rb   zWebSocketServerFactory.__init__Ó  s_   € ð —*’*˜Y¨Ñ-Ô-ˆØˆ?Ø0Ð0Ð0Ð0Ð0Ð0ØˆŒåÔ'Ô0°ÐG¸ÐGÐGÐGÀÐGÐGÐGÐGÐGr8   N©rx   ry   rz   r{   rÔ   rÕ   r‰   rb   rs   r8   r7   r&   r&   É  sD   € € € € € ðð ð ˆ%Ô
Ñ
Ô
€CðHð Hð Hð Hð Hr8   r&   c                   ó6   — e Zd ZdZ ej        ¦   «         Zd„ ZdS )r'   z˜
    Base class for Twisted-based WebSocket client factories.

    Implements :class:`autobahn.websocket.interfaces.IWebSocketClientChannelFactory`
    c                 óò   — |                      dd¦  «        }|€ddlm} || _        t          j        j        | g|¢R i |¤Ž | j        r.| j        �)ddlm} | 	                    | j
        ¦  «        | _        dS dS dS )a  

        .. note::
            In addition to all arguments to the constructor of
            :func:`autobahn.websocket.interfaces.IWebSocketClientChannelFactory`,
            you can supply a ``reactor`` keyword argument to specify the
            Twisted reactor to be used.
        r6   Nr   r5   rO   )rç   rT   r6   r   r'   rb   rS   rG   rP   rU   rQ   rV   )ra   rè   ré   r6   rP   s        r7   rb   zWebSocketClientFactory.__init__ï  s±   € ð —*’*˜Y¨Ñ-Ô-ˆØˆ?Ø0Ð0Ð0Ð0Ð0Ð0ØˆŒåÔ'Ô0°ÐG¸ÐGÐGÐGÀÐGÐGÐGð Œ=ð 	E˜TœZÐ3ð -Ð,Ð,Ð,Ð,Ð,Ø"%×"9Ò"9¸$¼)Ñ"DÔ"DˆDÔÐÐð	Eð 	EÐ3Ð3r8   Nrê   rs   r8   r7   r'   r'   å  sD   € € € € € ðð ð ˆ%Ô
Ñ
Ô
€CðEð Eð Eð Eð Er8   r'   c                   óH   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zd
„ ZdS )r(   aŽ  
    An adapter for stream-based transport over WebSocket.

    This follows `websockify <https://github.com/kanaka/websockify>`_
    and should be compatible with that.

    It uses WebSocket subprotocol negotiation and supports the
    following WebSocket subprotocols:

      - ``binary`` (or a compatible subprotocol)
      - ``base64``

    Octets are either transmitted as the payload of WebSocket binary
    messages when using the ``binary`` subprotocol (or an alternative
    binary compatible subprotocol), or encoded with Base64 and then
    transmitted as the payload of WebSocket text messages when using
    the ``base64`` subprotocol.
    c                 ó  — t          |t          ¦  «        r`|}|j        D ]}|| j        j        v r|dk    | _        |c S Œ t          t          j        d                     | j        j        ¦  «        ¦  «        ‚t          |t          ¦  «        ri|}|j
        | j        j        vrB|                      t          j        j        d                     | j        j        ¦  «        ¦  «         |j
        dk    | _        d S t          d¦  «        ‚)NÚbase64z2this server only speaks {0} WebSocket subprotocolsz2this client only speaks {0} WebSocket subprotocolszlogic error)r:   r   rD   rY   Ú_subprotocolsÚ_binaryModer   ÚNOT_ACCEPTABLEr=   r   r   Ú_fail_connectionÚWebSocketProtocolÚ CLOSE_STATUS_CODE_PROTOCOL_ERRORÚ	Exception)ra   ÚrequestOrResponseÚrequestÚprÛ   s        r7   rß   z"WrappingWebSocketAdapter.onConnect$  sL  € åÐ'Õ):Ñ;Ô;ð 	+Ø'ˆGØÔ&ð ð �Ø˜œÔ2Ð2Ð2Ø()¨Xª�DÔ$Ø�H�H�Hð 3õ !¥Ô!>Ð@t×@{Ò@{ð  }Aô  }Iô  }Wñ  AXô  AXñ  Yô  Yð  YÝÐ)Õ+=Ñ>Ô>ð 	+Ø(ˆHØÔ ¨¬Ô(BÐBÐBØ×%Ò%¥hÔ&@Ô&að  dX÷  d_ò  d_ð  `dô  `lô  `zñ  d{ô  d{ñ  |ô  |ð  |Ø (Ô 1°XÒ =ˆDÔÐÐõ ˜MÑ*Ô*Ð*r8   c                 ó8   — | j                              ¦   «          d S r_   )Ú_protor‹   rŒ   s    r7   r¦   zWrappingWebSocketAdapter.onOpen6  s   € ØŒ×"Ò"Ñ$Ô$Ð$Ð$Ð$r8   c                 ób  — || j         k    r'|                      t          j        j        d¦  «         d S |s`	 t          |¦  «        }nO# t          $ rB}|                      t          j        j        d                     |¦  «        ¦  «         Y d }~nd }~ww xY w| j	         
                    |¦  «         d S )Nz>message payload type does not match the negotiated subprotocolz*message payload base64 decoding error: {0})rñ   ró   r   rô   Ú"CLOSE_STATUS_CODE_UNSUPPORTED_DATAr   rö   Ú!CLOSE_STATUS_CODE_INVALID_PAYLOADr=   rû   rš   )ra   r³   rª   Úes       r7   r¿   z"WrappingWebSocketAdapter.onMessage9  s  € Ø�tÔ'Ò'Ð'Ø×!Ò!¥(Ô"<Ô"_ð  bbñ  cô  cð  cð  cð  càð `ð`Ý'¨Ñ0Ô0�G�GøÝ ð `ð `ð `Ø×)Ò)­(Ô*DÔ*fð  iU÷  i\ò  i\ð  ]^ñ  i_ô  i_ñ  `ô  `ð  `ð  `ð  `ð  `ð  `ð  `øøøøð`øøøàŒK×$Ò$ WÑ-Ô-Ð-Ð-Ð-s   ¶A Á
BÁ8BÂBc                 ó:   — | j                              d ¦  «         d S r_   )rû   r•   rÊ   s       r7   rÉ   z WrappingWebSocketAdapter.onCloseE  s   € ØŒ×"Ò" 4Ñ(Ô(Ð(Ð(Ð(r8   c                 óÆ   — t          |¦  «        t          k    sJ ‚| j        r|                      |d¬¦  «         d S t	          |¦  «        }|                      |d¬¦  «         d S )NT)rª   F)r>   rØ   rñ   ÚsendMessager   r�   s     r7   ÚwritezWrappingWebSocketAdapter.writeH  sm   € å�D‰zŒz�UÒ"Ð"Ð"Ð"ØÔð 	3Ø×Ò˜T¨DÐÑ1Ô1Ð1Ð1Ð1å˜T‘?”?ˆDØ×Ò˜T¨EÐÑ2Ô2Ð2Ð2Ð2r8   c                 ó:   — |D ]}|                       |¦  «         Œd S r_   )r  )ra   r—   Úds      r7   ÚwriteSequencez&WrappingWebSocketAdapter.writeSequenceQ  s,   € àð 	ð 	ˆAØ�JŠJ�q‰MŒMˆMˆMð	ð 	r8   c                 ó.   — |                       ¦   «          d S r_   )Ú	sendCloserŒ   s    r7   r    z'WrappingWebSocketAdapter.loseConnectionV  s   € à�ŠÑÔÐÐÐr8   c                 ó4   — | j                              ¦   «         S r_   )r‚   ÚgetPeerrŒ   s    r7   r
  z WrappingWebSocketAdapter.getPeerZ  ó   € àŒ~×%Ò%Ñ'Ô'Ð'r8   c                 ó4   — | j                              ¦   «         S r_   )r‚   ÚgetHostrŒ   s    r7   r  z WrappingWebSocketAdapter.getHost^  r  r8   N)rx   ry   rz   r{   rß   r¦   r¿   rÉ   r  r  r    r
  r  rs   r8   r7   r(   r(     s¥   € € € € € ðð ð&+ð +ð +ð$%ð %ð %ð	.ð 	.ð 	.ð)ð )ð )ð3ð 3ð 3ðð ð ð
ð ð ð(ð (ð (ð(ð (ð (ð (ð (r8   r(   c                   ó   — e Zd ZdZdS )r)   zD
    Server protocol for stream-based transport over WebSocket.
    Nrã   rs   r8   r7   r)   r)   c  rä   r8   r)   c                   ó   — e Zd ZdZdS )r*   zD
    Client protocol for stream-based transport over WebSocket.
    Nrã   rs   r8   r7   r*   r*   i  rä   r8   r*   c                   ó4   — e Zd ZdZ	 	 	 	 d	d„Zd„ Zd„ Zd„ ZdS )
r+   zL
    Wrapping server factory for stream-based transport over WebSocket.
    NTr   c                 ó6  — || _         ddg| _        |r| j                             |¦  «         t                               | ||| j        ¬¦  «         |                      |¬¦  «         |                      d¬¦  «         |rd„ }|                      |¬¦  «         d	S d	S )
zÿ

        :param factory: Stream-based factory to be wrapped.
        :type factory: A subclass of ``twisted.internet.protocol.Factory``
        :param url: WebSocket URL of the server this server factory will work for.
        :type url: unicode
        Úbinaryrï   ©rd   r6   rD   ©ÚautoFragmentSizeF©Ú
failByDropc                 ó\   — | D ](}t          |t          ¦  «        rt          |¦  «        c S Œ)d S r_   )r:   r   r   )ÚoffersÚoffers     r7   Úacceptz7WrappingWebSocketServerFactory.__init__.<locals>.accept—  sM   € Ø#ð Cð C�EÝ! %Õ)?Ñ@Ô@ð CÝ;¸EÑBÔBÐBÐBÐBðCðCð Cr8   ©ÚperMessageCompressionAcceptN)Ú_factoryrð   Úappendr&   rb   ÚsetProtocolOptions)ra   rY   rd   r6   ÚenableCompressionr  Úsubprotocolr  s           r7   rb   z'WrappingWebSocketServerFactory.__init__t  sÞ   € ð  ˆŒØ&¨Ð1ˆÔØð 	3ØÔ×%Ò% kÑ2Ô2Ð2å×'Ò'¨Ø,/Ø07Ø26Ô2Dð 	(ñ 	Fô 	Fð 	Fð 	×ÒÐ1AÐÑBÔBÐBð 	×Ò¨5ÐÑ1Ô1Ð1àð 		HðCð Cð Cð
 ×#Ò#ÀÐ#ÑGÔGÐGÐGÐGð		Hð 		Hr8   c                 ó†   — t          ¦   «         }| |_        | j                             |¦  «        |_        ||j        _        |S r_   )r)   rY   r  ÚbuildProtocolrû   r‚   ©ra   Úaddrrn   s      r7   r$  z,WrappingWebSocketServerFactory.buildProtocolž  ó:   € Ý/Ñ1Ô1ˆØˆŒØ”}×2Ò2°4Ñ8Ô8ˆŒØ!&ˆŒÔØˆr8   c                 ól   — | j                              ¦   «          t                               | ¦  «         d S r_   )r  ÚstartFactoryr&   rŒ   s    r7   r)  z+WrappingWebSocketServerFactory.startFactory¥  s0   € ØŒ×"Ò"Ñ$Ô$Ð$Ý×+Ò+¨DÑ1Ô1Ð1Ð1Ð1r8   c                 ól   — | j                              ¦   «          t                               | ¦  «         d S r_   )r  ÚstopFactoryr&   rŒ   s    r7   r+  z*WrappingWebSocketServerFactory.stopFactory©  s0   € ØŒ×!Ò!Ñ#Ô#Ð#Ý×*Ò*¨4Ñ0Ô0Ð0Ð0Ð0r8   ©NTr   N)rx   ry   rz   r{   rb   r$  r)  r+  rs   r8   r7   r+   r+   o  sr   € € € € € ðð ð Ø#'Ø"#Ø!ð(Hð (Hð (Hð (HðTð ð ð2ð 2ð 2ð1ð 1ð 1ð 1ð 1r8   r+   c                   ó(   — e Zd ZdZ	 	 	 	 dd„Zd„ ZdS )r,   zL
    Wrapping client factory for stream-based transport over WebSocket.
    NTr   c                 ó€  — || _         ddg| _        |r| j                             |¦  «         t                               | ||| j        ¬¦  «         |                      |¬¦  «         |                      d¬¦  «         |r@t          ¦   «         g}|                      |¬¦  «         d„ }|                      |¬	¦  «         d
S d
S )a  

        :param factory: Stream-based factory to be wrapped.
        :type factory: A subclass of ``twisted.internet.protocol.Factory``
        :param url: WebSocket URL of the server this client factory will connect to.
        :type url: unicode
        r  rï   r  r  Fr  )ÚperMessageCompressionOffersc                 óN   — t          | t          ¦  «        rt          | ¦  «        S d S r_   )r:   r   r    )rÛ   s    r7   r  z7WrappingWebSocketClientFactory.__init__.<locals>.acceptÚ  s0   € Ý˜hÕ(AÑBÔBð EÝ:¸8ÑDÔDÐDðEð Er8   r  N)r  rð   r  r'   rb   r   r   )	ra   rY   rd   r6   r!  r  r"  r  r  s	            r7   rb   z'WrappingWebSocketClientFactory.__init__³  s  € ð  ˆŒØ&¨Ð1ˆÔØð 	3ØÔ×%Ò% kÑ2Ô2Ð2å×'Ò'¨Ø,/Ø07Ø26Ô2Dð 	(ñ 	Fô 	Fð 	Fð 	×ÒÐ1AÐÑBÔBÐBð 	×Ò¨5ÐÑ1Ô1Ð1àð 	Hõ -Ñ.Ô.Ð/ˆFØ×#Ò#ÀÐ#ÑGÔGÐGðEð Eð Eð ×#Ò#ÀÐ#ÑGÔGÐGÐGÐGð	Hð 	Hr8   c                 ó†   — t          ¦   «         }| |_        | j                             |¦  «        |_        ||j        _        |S r_   )r*   rY   r  r$  rû   r‚   r%  s      r7   r$  z,WrappingWebSocketClientFactory.buildProtocolà  r'  r8   r,  )rx   ry   rz   r{   rb   r$  rs   r8   r7   r,   r,   ®  sT   € € € € € ðð ð Ø#'Ø"#Ø!ð+Hð +Hð +Hð +HðZð ð ð ð r8   r,   é   c                 ó¢  — t          | d¦  «        r| j        }nddlm} | j        r|€ddlm} |                     ¦   «         }| j        �7|| _        |                     | j        d         | j        d         | ||¦  «        }nO| j        r%| 	                    | j
        | j        | |||¦  «        }n#|                     | j
        | j        | ||¦  «        }|S )a  
    Establish WebSocket connection to a server. The connection parameters like target
    host, port, resource and others are provided via the factory.

    :param factory: The WebSocket protocol factory to be used for creating client protocol instances.
    :type factory: An :class:`autobahn.websocket.WebSocketClientFactory` instance.

    :param contextFactory: SSL context factory, required for secure WebSocket connections ("wss").
    :type contextFactory: A `twisted.internet.ssl.ClientContextFactory <http://twistedmatrix.com/documents/current/api/twisted.internet.ssl.ClientContextFactory.html>`_ instance.

    :param timeout: Number of seconds to wait before assuming the connection has failed.
    :type timeout: int

    :param bindAddress: A (host, port) tuple of local address to bind to, or None.
    :type bindAddress: tuple

    :returns: The connector.
    :rtype: An object which implements `twisted.interface.IConnector <http://twistedmatrix.com/documents/current/api/twisted.internet.interfaces.IConnector.html>`_.
    r6   r   r5   NrO   rQ   rR   )r“   r6   rT   rS   rP   ÚClientContextFactoryrG   rV   Ú
connectTCPÚ
connectSSLrQ   rR   )rY   rV   ÚtimeoutÚbindAddressr6   rP   Úconns          r7   r.   r.   è  sù   € õ, ˆw˜	Ñ"Ô"ð -Ø”/ˆˆà,Ð,Ð,Ð,Ð,Ð,àÔð 8ØÐ!à,Ð,Ð,Ð,Ð,Ð,Ø ×5Ò5Ñ7Ô7ˆNà„}Ð Ø!/ˆÔØ×!Ò! '¤-°Ô"7¸¼ÀvÔ9NÐPWÐY`ÐbmÑnÔnˆˆàÔð 	aØ×%Ò% g¤l°G´LÀ'È>Ð[bÐdoÑpÔpˆDˆDà×%Ò% g¤l°G´LÀ'È7ÐT_Ñ`Ô`ˆDØ€Kr8   é2   Ú c                 óê   — t          | d¦  «        r| j        }nddlm} | j        r0|€t	          d¦  «        ‚|                     | j        | |||¦  «        }n|                     | j        | ||¦  «        }|S )aŽ  
    Listen for incoming WebSocket connections from clients. The connection parameters like
    listening port and others are provided via the factory.

    :param factory: The WebSocket protocol factory to be used for creating server protocol instances.
    :type factory: An :class:`autobahn.websocket.WebSocketServerFactory` instance.

    :param contextFactory: SSL context factory, required for secure WebSocket connections ("wss").
    :type contextFactory: A twisted.internet.ssl.ContextFactory.

    :param backlog: Size of the listen queue.
    :type backlog: int

    :param interface: The interface (derived from hostname given) to bind to, defaults to '' (all).
    :type interface: str

    :returns: The listening port.
    :rtype: An object that implements `twisted.interface.IListeningPort <http://twistedmatrix.com/documents/current/api/twisted.internet.interfaces.IListeningPort.html>`_.
    r6   r   r5   NzCSecure WebSocket listen requested, but no SSL context factory given)r“   r6   rT   rS   rö   Ú	listenSSLrR   Ú	listenTCP)rY   rV   ÚbacklogÚ	interfacer6   Úlisteners         r7   r-   r-     s’   € õ, ˆw˜	Ñ"Ô"ð -Ø”/ˆˆà,Ð,Ð,Ð,Ð,Ð,àÔð PØÐ!ÝÐaÑbÔbÐbØ×$Ò$ W¤\°7¸NÈGÐU^Ñ_Ô_ˆˆà×$Ò$ W¤\°7¸GÀYÑOÔOˆØ€Or8   c                   ó   — e Zd ZdZdS )r/   z�
    Twisted-based WAMP-over-WebSocket server protocol.

    Implements:

    * :class:`autobahn.wamp.interfaces.ITransport`
    Nrã   rs   r8   r7   r/   r/   8  ó   € € € € € ðð ð ð r8   r/   c                   ó   — e Zd ZdZeZd„ ZdS )r0   zD
    Twisted-based WAMP-over-WebSocket server protocol factory.
    c                 ó²   — |                      dd¦  «        }t          j                             | ||¦  «         | j        |d<   t          j        | g|¢R i |¤Ž dS )až  

        :param factory: A callable that produces instances that implement
            :class:`autobahn.wamp.interfaces.ITransportHandler`
        :type factory: callable

        :param serializers: A list of WAMP serializers to use (or ``None``
            for all available serializers).
        :type serializers: list of objects implementing
            :class:`autobahn.wamp.interfaces.ISerializer`
        ÚserializersNrD   )rç   r   r0   rb   Ú
_protocolsr&   ©ra   rY   rè   ré   rF  s        r7   rb   z#WampWebSocketServerFactory.__init__K  sg   € ð —j’j °Ñ5Ô5ˆåÔ,×5Ò5°d¸GÀ[ÑQÔQÐQà"œoˆˆ{Ñõ 	Ô'¨Ð>¨tÐ>Ð>Ð>°vÐ>Ð>Ð>Ð>Ð>r8   N)rx   ry   rz   r{   r/   r   rb   rs   r8   r7   r0   r0   C  s4   € € € € € ðð ð +€Hð?ð ?ð ?ð ?ð ?r8   r0   c                   ó   — e Zd ZdZdS )r1   z�
    Twisted-based WAMP-over-WebSocket client protocol.

    Implements:

    * :class:`autobahn.wamp.interfaces.ITransport`
    Nrã   rs   r8   r7   r1   r1   b  rC  r8   r1   c                   ó   — e Zd ZdZeZd„ ZdS )r2   zD
    Twisted-based WAMP-over-WebSocket client protocol factory.
    c                 óÀ   — |                      dd¦  «        }t          j                             | ||¦  «         | j        |d<   t          j        | g|¢R i |¤Ž d| _        dS )aÜ  

        :param factory: A callable that produces instances that implement
            :class:`autobahn.wamp.interfaces.ITransportHandler`
        :type factory: callable

        :param serializer: The WAMP serializer to use (or ``None`` for
           "best" serializer, chosen as the first serializer available from
           this list: CBOR, MessagePack, UBJSON, JSON).
        :type serializer: object implementing :class:`autobahn.wamp.interfaces.ISerializer`
        rF  NrD   F)rç   r   r2   rb   rG  r'   ÚnoisyrH  s        r7   rb   z#WampWebSocketClientFactory.__init__u  sl   € ð —j’j °Ñ5Ô5ˆåÔ,×5Ò5°d¸GÀ[ÑQÔQÐQà"œoˆˆ{ÑåÔ'¨Ð>¨tÐ>Ð>Ð>°vÐ>Ð>Ð>ð ˆŒ
ˆ
ˆ
r8   N)rx   ry   rz   r{   r1   r   rb   rs   r8   r7   r2   r2   m  s4   € € € € € ðð ð +€Hðð ð ð ð r8   r2   )Nr2  N)Nr:  r;  )Nrï   r   r   Útypingr   Úzope.interfacer   rÔ   Úuse_twistedÚtwisted.internet.protocolÚtwistedrT   r   Útwisted.internet.interfacesr   Útwisted.internet.errorr	   r
   r   Útwisted.internet.deferr   Útwisted.python.failurer   r   Úautobahn.utilr   r   r   r   r   Úautobahn.wampr   Úautobahn.wamp.typesr   Úautobahn.websocket.typesr   r   r   Úautobahn.websocketr   Úautobahn.websocket.interfacesr   Úautobahn.twisted.utilr   r   Úautobahn.websocket.compressr   r   r   r    Ú__all__r!   rA   rM   r\   r4   ÚinternetÚProtocolr"   r#   r$   Úobjectr%   r&   ÚServerFactoryr'   ÚClientFactoryr(   r)   r*   r+   r,   r.   r-   r/   r0   r1   r2   rs   r8   r7   ú<module>rd     s  ðð6 (Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ø Ð Ð Ð Ð Ð à &Ð &Ð &Ð &Ð &Ð &à €€€Ø €Ô Ñ Ô Ð à  Ð  Ð  Ð  Ø &Ð &Ð &Ð &Ð &Ð &Ø 2Ð 2Ð 2Ð 2Ð 2Ð 2ðð ð ð ð ð ð ð ð ð à +Ð +Ð +Ð +Ð +Ð +Ø *Ð *Ð *Ð *Ð *Ð *Ø 4Ð 4Ð 4Ð 4Ð 4Ð 4à /Ð /Ð /Ð /Ð /Ð /Ð /Ð /Ð /Ð /Ø :Ð :Ð :Ð :Ð :Ð :Ð :Ð :Ø #Ð #Ð #Ð #Ð #Ð #Ø 0Ð 0Ð 0Ð 0Ð 0Ð 0Ø ZÐ ZÐ ZÐ ZÐ ZÐ ZÐ ZÐ ZÐ ZÐ ZØ 'Ð 'Ð 'Ð 'Ð 'Ð 'Ø ?Ð ?Ð ?Ð ?Ð ?Ð ?Ø PÐ PÐ PÐ PÐ PÐ PÐ PÐ Pð$ð $ð $ð $ð $ð $ð $ð $ð $ð $ð $ð $ð€ð41ð 1ð 1ðð ð ð(ð ð ð2&ð &ð &ðR4ð 4ð 4ð 4ð 4Ð#8ñ 4ô 4ð 4ðns,ð s,ð s,ð s,ð s,˜wÔ/Ô8ÔAñ s,ô s,ð s,ðl ðð ð ð ð Ð6¸Ô8Xñ ô ñ „ðð ð=ð =ð =ð =ð =Ð6¸Ô8Xñ =ô =ñ „ð=ð&ð ð ð ð ˜fñ ô ð ð ðHð Hð Hð Hð HÐ4°hÔ6UÐW^ÔWgÔWpÔW~ñ Hô Hñ „ðHð6 ð Eð  Eð  Eð  Eð  EÐ4°hÔ6UÐW^ÔWgÔWpÔW~ñ  Eô  Eñ „ð EðR €ˆZÑÔðP(ð P(ð P(ð P(ð P(˜vñ P(ô P(ñ ÔðP(ðfð ð ð ð Ð&>Ð@Wñ ô ð ðð ð ð ð Ð&>Ð@Wñ ô ð ð<1ð <1ð <1ð <1ð <1Ð%;ñ <1ô <1ð <1ð~7ð 7ð 7ð 7ð 7Ð%;ñ 7ô 7ð 7ðt ð(ð (ð (ñ „ð(ðV ð ð  ð  ñ „ð ðF ðð ð ð ð  )Ô"GÐI`ñ ô ñ „ðð ð?ð ?ð ?ð ?ð ? Ô!EÐG]ñ ?ô ?ñ „ð?ð< ðð ð ð ð  )Ô"GÐI`ñ ô ñ „ðð ðð ð ð ð  Ô!EÐG]ñ ô ñ „ðð ð r8   