§
    Ìtºfj6  ã                   ó†  — d dl Z d dlZe j                             dd¦  «        r�d dlmZ d dlmZ d dlm	Z	 d dl
mZ d dl
mZ d d	l
mZ d d
l
mZ d dlmZ d dlmZ d dlmZmZ d dlmZ d dlmZ  ed¦  «        d„ ¦   «         ZdZdZ G d„ dej        ¦  «        Z G d„ dej        ¦  «        Z G d„ dej        ¦  «        Z dS dS )é    NÚUSE_TWISTEDF)Úunittest)ÚIPv4Address)ÚClock)ÚWebSocketServerProtocol)ÚWebSocketServerFactory)ÚWebSocketClientProtocol)ÚWebSocketClientFactory)ÚPerMessageDeflate)ÚFakeTransport)Ú	MagicMockÚpatch)Úreplace_loop)Ú	b64decodezbase64.b64encodec                 óª  ‡— d| _         t          dg¬¦  «        }t          |_        |                     ¦   «          |                     t          ddd¦  «        ¦  «        }t          ¦   «         |_        | 	                    ¦   «          t          |_        |                     ¦   «          g Šˆfd„}||_         |j        d	i |¤Ž d                     ‰¦  «        S )
a[  
        Kind-of hack-y; maybe better to re-factor the Protocol to have a
        frame-encoder method-call? Anyway, makes a throwaway protocol
        encode a frame for us, collects the .sendData call and returns
        the data that would have gone out. Accepts all the kwargs that
        WebSocketClientProtocol.sendFrame() accepts.
        s   QIatSt9QkZPyS4QQfdufO8TgkL0=úwamp.2.json©Ú	protocolsÚTCPz	127.0.0.9éþÿ  c                 ó2   •— ‰                      | ¦  «         d S ©N)Úappend)ÚdÚargsÚdatas     €úk/var/www/surfInsights/venv3-11/lib/python3.11/site-packages/autobahn/websocket/test/test_websocket_frame.pyÚcollectz$create_client_frame.<locals>.collectI   s   ø€ Ø�KŠK˜‰NŒNˆNˆNˆNó    r   © )Úreturn_valuer
   r	   ÚprotocolÚdoStartÚbuildProtocolr   r   Ú	transportÚconnectionMadeÚmock_handshake_serverr   ÚprocessHandshakeÚsendDataÚ	sendFrameÚjoin)Úb64patchÚkwargsÚfactoryÚprotor   r   s        @r   Úcreate_client_framer0   0   sÚ   ø€ ð !@ˆÔå(°M°?ÐCÑCÔCˆÝ2ˆÔØ�ŠÑÔÐØ×%Ò%¥k°%¸ÀeÑ&LÔ&LÑMÔMˆÝ'™/œ/ˆŒØ×ÒÑÔÐÝ*ˆŒ
Ø×ÒÑ Ô Ð àˆð	ð 	ð 	ð 	ð 	à ˆŒàˆŒÐ!Ð!˜&Ð!Ð!Ð!Ø�xŠx˜‰~Œ~Ðr   s
  GET / HTTP/1.1
User-Agent: AutobahnPython/0.10.2
Host: localhost:80
Upgrade: WebSocket
Connection: Upgrade
Pragma: no-cache
Cache-Control: no-cache
Sec-WebSocket-Key: 6Jid6RgXpH0RVegaNSs/4g==
Sec-WebSocket-Protocol: wamp.2.json
Sec-WebSocket-Version: 13

s  HTTP/1.1 101 Switching Protocols
Server: AutobahnPython/0.10.2
X-Powered-By: AutobahnPython/0.10.2
Upgrade: WebSocket
Connection: Upgrade
Sec-WebSocket-Protocol: wamp.2.json
Sec-WebSocket-Accept: QIatSt9QkZPyS4QQfdufO8TgkL0=

�~[1,"crossbar",{"roles":{"subscriber":{"features":{"publisher_identification":true,"pattern_based_subscription":true,"subscription_revocation":true}},"publisher":{"features":{"publisher_identification":true,"publisher_exclusion":true,"subscriber_blackwhite_listing":true}},"caller":{"features":{"caller_identification":true,"progressive_call_results":true}},"callee":{"features":{"progressive_call_results":true,"pattern_based_registration":true,"registration_revocation":true,"shared_registration":true,"caller_identification":true}}}}]c                   ó   — e Zd Zd„ Zd„ ZdS )ÚTestDeflatec           	      ó´   — t          ddddddd¬¦  «        }d}|                     ¦   «          |                     |¦  «        }|                      |d¦  «         d S )NFé   é   é
   )Ú	is_serverÚserver_no_context_takeoverÚclient_no_context_takeoverÚserver_max_window_bitsÚclient_max_window_bitsÚ	mem_levelÚmax_message_sizeó   «¨£`Œ‚Q0
FÁP Ï@©®s
   xxxxxxxxxx©r   Ústart_decompress_messageÚdecompress_message_dataÚassertEqual©ÚselfÚdecoderÚcompressed_datar   s       r   Útest_max_sizezTestDeflate.test_max_sizeW   sv   € Ý'ØØ+0Ø+0Ø')Ø')ØØ!#ðñ ô ˆGð bˆOà×,Ò,Ñ.Ô.Ð.Ø×2Ò2°?ÑCÔCˆDð ×Ò˜T 9Ñ-Ô-Ð-Ð-Ð-r   c                 ó²   — t          dddddd ¬¦  «        }d}|                     ¦   «          |                     |¦  «        }|                      |d¦  «         d S )NFr4   )r7   r8   r9   r:   r;   r<   r>   sÐ  xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxr?   rC   s       r   Útest_no_max_sizezTestDeflate.test_no_max_sizel   sq   € Ý'ØØ+0Ø+0Ø')Ø')Øðñ ô ˆGð bˆOà×,Ò,Ñ.Ô.Ð.Ø×2Ò2°?ÑCÔCˆDà×Ò˜T ;Ñ/Ô/Ð/Ð/Ð/r   N)Ú__name__Ú
__module__Ú__qualname__rG   rI   r    r   r   r2   r2   U   s2   € € € € € ð	.ð 	.ð 	.ð*	0ð 	0ð 	0ð 	0ð 	0r   r2   c                   ó&   — e Zd Zd„ Zd„ Zd„ Zd„ ZdS )Ú
TestClientc                 ó\  — t          dg¬¦  «        | _        t          | j        _        | j                             ¦   «          | j                             t          ddd¦  «        ¦  «        | _        t          ¦   «         | _	        | j	        | j        _	        | j         
                    ¦   «          d S ©Nr   r   r   z	127.0.0.1r   )r
   r.   r	   r"   r#   r$   r   r/   r   r%   r&   ©rD   s    r   ÚsetUpzTestClient.setUp   s‰   € Ý1¸]¸OÐLÑLÔLˆDŒLÝ$;ˆDŒLÔ!ØŒL× Ò Ñ"Ô"Ð"àœ×3Ò3µKÀÀ{ÐTYÑ4ZÔ4ZÑ[Ô[ˆDŒJÝ*™_œ_ˆDŒNØ#'¤>ˆDŒJÔ ØŒJ×%Ò%Ñ'Ô'Ð'Ð'Ð'r   c                 ó”   — | j         j        r| j         j                             ¦   «          | j                             ¦   «          | `| ` d S r   ©r/   ÚopenHandshakeTimeoutCallÚcancelr.   ÚdoStoprQ   s    r   ÚtearDownzTestClient.tearDown‰   óH   € ØŒzÔ2ð =Ø”
Ô3×:Ò:Ñ<Ô<Ð<ØŒL×ÒÑ!Ô!Ð!à�Ø�
�
�
r   c                 óÈ   — d| j         _        | j         j        | j         _        d| j         _        t          ¦   «         | j         _        | j                              dd ¦  «         d S )NTé   éè  )r/   ÚechoCloseCodeReasonÚ
STATE_OPENÚstateÚwebsocket_versionr   ÚsendCloseFrameÚonCloseFramerQ   s    r   Útest_missing_reason_rawz"TestClient.test_missing_reason_raw‘   sQ   € à-1ˆDŒJÔ*Ø#œzÔ4ˆDŒJÔØ+,ˆDŒJÔ(å(1©¬ˆDŒJÔ%àŒJ×#Ò# D¨$Ñ/Ô/Ð/Ð/Ð/r   c                 ó  — 	 t	          d¦  «        | j        _        t          | j        _        | j                             ¦   «          |  	                    | j        j
        t          j        ¦  «         |                      | j        j        dk    ¦  «         t          t!          ¦   «         ¦  «        5 }| j                             ¦   «          | j                             dd¦  «         |  	                    t'          |j        ¦  «        d¦  «         |  	                    |j        d         j        | j        j        ¦  «         |  	                    |j        d                              ¦   «         | j        j        ¦  «         |                     | j        j        dz   ¦  «         |                      | j        j                             ¦   «         ¦  «         |  	                    | j        j
        t          j        ¦  «         ddd¦  «         dS # 1 swxY w Y   dS )zR
            make a delayed call to drop the connection (client-side)
            Fz6Jid6RgXpH0RVegaNSs/4g==r   r\   s
   raw reasonr[   N)Úprintr/   r.   Ú_logr   Úwebsocket_keyr'   r   r(   rB   r_   r   r^   Ú
assertTrueÚserverConnectionDropTimeoutr   r   ra   rb   ÚlenÚcallsÚfuncÚonServerConnectionDropTimeoutÚgetTimeÚadvanceÚcloseHandshakeTimeoutr%   Úabort_calledÚSTATE_CLOSED©rD   Úreactors     r   Útest_unclean_timeout_clientz&TestClient.test_unclean_timeout_client›   sý  € ð
0õ (1Ð1KÑ'LÔ'LˆDŒJÔ$Ý3ˆDŒJŒOØŒJ×'Ò'Ñ)Ô)Ð)Ø×Ò˜TœZÔ-Õ/FÔ/QÑRÔRÐRØ�OŠO˜DœJÔBÀQÒFÑGÔGÐGå�e™gœgÑ&Ô&ð Y¨'à”
×)Ò)Ñ+Ô+Ð+Ø”
×'Ò'¨¨mÑ<Ô<Ð<ð × Ò ¥ W¤]Ñ!3Ô!3°QÑ7Ô7Ð7Ø× Ò  ¤¨qÔ!1Ô!6¸¼
Ô8`ÑaÔaÐaØ× Ò  ¤¨qÔ!1×!9Ò!9Ñ!;Ô!;¸T¼ZÔ=cÑdÔdÐdð —’ ¤
Ô @À1Ñ DÑEÔEÐEð —’ ¤
Ô 4× AÒ AÑ CÔ CÑDÔDÐDà× Ò  ¤Ô!1Õ3JÔ3WÑXÔXÐXð#Yð Yð Yñ Yô Yð Yð Yð Yð Yð Yð Yð Yøøøð Yð Yð Yð Yð Yð Ys   Â-EHÈHÈHN)rJ   rK   rL   rR   rX   rc   ru   r    r   r   rN   rN   ~   sU   € € € € € ð	(ð 	(ð 	(ð	ð 	ð 	ð	0ð 	0ð 	0ð 	Yð  	Yð  	Yð  	Yð  	Yr   rN   c                   ó,   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ ZdS )ÚTestPingc                 ó\  — t          dg¬¦  «        | _        t          | j        _        | j                             ¦   «          | j                             t          ddd¦  «        ¦  «        | _        t          ¦   «         | _	        | j	        | j        _	        | j         
                    ¦   «          d S rP   )r   r.   r   r"   r#   r$   r   r/   r   r%   r&   rQ   s    r   rR   zTestPing.setUp¾   s‰   € Ý1¸]¸OÐLÑLÔLˆDŒLÝ$;ˆDŒLÔ!ØŒL× Ò Ñ"Ô"Ð"àœ×3Ò3µKÀÀ{ÐTYÑ4ZÔ4ZÑ[Ô[ˆDŒJÝ&™[œ[ˆDŒNØ#'¤>ˆDŒJÔ ØŒJ×%Ò%Ñ'Ô'Ð'Ð'Ð'r   c                 ó”   — | j         j        r| j         j                             ¦   «          | j                             ¦   «          | `| ` d S r   rT   rQ   s    r   rX   zTestPing.tearDownÈ   rY   r   c                 óø  — t           | j        _        | j                             ¦   «          |                      | j        j        t          j        k    ¦  «         t          t          ¦   «         ¦  «        5 }| j         
                    ¦   «          |                      t          |j        ¦  «        d¦  «         |                     | j        j        dz   ¦  «         |                      dt!          | j        j        j        d         ¦  «        ¦  «         |                      | j        j        j        j        ¦  «         |                      | j        j        t          j        ¦  «         ddd¦  «         dS # 1 swxY w Y   dS )zD
            make a delayed call to drop the connection
            r[   zcall.abortConnection()éÿÿÿÿN)Úmock_handshake_clientr/   r   r(   rh   r_   r   r^   r   r   ra   rB   rj   rk   ro   rp   Ústrr%   Úmethod_callsÚabortConnectionÚcalledrr   rs   s     r   Útest_unclean_timeoutzTestPing.test_unclean_timeoutÐ   s†  € õ 4ˆDŒJŒOØŒJ×'Ò'Ñ)Ô)Ð)Ø�OŠO˜DœJÔ,Õ0GÔ0RÒRÑSÔSÐSå�e™gœgÑ&Ô&ð Y¨'à”
×)Ò)Ñ+Ô+Ð+ð × Ò ¥ W¤]Ñ!3Ô!3°QÑ7Ô7Ð7ð —’ ¤
Ô @À1Ñ DÑEÔEÐEð × Ò Ð!9½3¸t¼zÔ?SÔ?`ÐacÔ?dÑ;eÔ;eÑfÔfÐfØ—’ ¤
Ô 4Ô DÔ KÑLÔLÐLà× Ò  ¤Ô!1Õ3JÔ3WÑXÔXÐXðYð Yð Yñ Yô Yð Yð Yð Yð Yð Yð Yð Yøøøð Yð Yð Yð Yð Yð Ys   Á3C/E/Å/E3Å6E3c                 óú  — d| j         _        d| j         _        t          t	          ¦   «         ¦  «        5 }t
          | j         _        | j                              ¦   «          |                      | j         j	        t          j        k    ¦  «         |                      dt          |j        ¦  «        ¦  «         |                     d¦  «         |                      | j        j        j        ¦  «         | j        j        j        d         d         }t)          |d         g¦  «        }t+          j        d|¦  «        \  }|dz  }|                      d|¦  «         |                      dt          |j        ¦  «        ¦  «         |                      | j         j	        | j         j        ¦  «         |                     d¦  «         |                      | j         j	        | j         j        ¦  «         d	d	d	¦  «         d	S # 1 swxY w Y   d	S )
z>
            autoping and autoping-timeout timing
            é   é   r[   r   ÚBiÿÿÿé	   é   N)r/   ÚautoPingIntervalÚautoPingTimeoutr   r   r|   r   r(   rh   r_   r   r^   rB   rj   rk   ro   r%   Úwriter€   Ú	call_argsÚbytesÚstructÚunpackÚassertNotEqualrr   )rD   rt   r   Ú_dataÚopcodes        r   Útest_auto_pingpong_timeoutz#TestPing.test_auto_pingpong_timeoutð   s  € ð
 +,ˆDŒJÔ'Ø)*ˆDŒJÔ&å�e™gœgÑ&Ô&ð !L¨'å"7�”
”Ø”
×+Ò+Ñ-Ô-Ð-Ø—’ ¤
Ô 0Õ4KÔ4VÒ VÑWÔWÐWð × Ò  ¥C¨¬Ñ$6Ô$6Ñ7Ô7Ð7ð —’ Ñ"Ô"Ð"ð —’ ¤Ô 4Ô ;Ñ<Ô<Ð<Ø”~Ô+Ô5°aÔ8¸Ô;�å˜t Aœw˜iÑ(Ô(�õ #œM¨#¨uÑ5Ô5‘	�Ø 5Ñ)�ð × Ò   FÑ+Ô+Ð+ð × Ò  ¥C¨¬Ñ$6Ô$6Ñ7Ô7Ð7Ø×#Ò# D¤JÔ$4°d´jÔ6MÑNÔNÐNð —’ Ñ"Ô"Ð"Ø× Ò  ¤Ô!1°4´:Ô3JÑKÔKÐKðC!Lð !Lð !Lñ !Lô !Lð !Lð !Lð !Lð !Lð !Lð !Lð !Løøøð !Lð !Lð !Lð !Lð !Lð !Ls   ´F/G0Ç0G4Ç7G4c                 ó  — d| j         _        d| j         _        t          t	          ¦   «         ¦  «        5 }t
          | j         _        | j                              ¦   «          |                      | j         j	        t          j        k    ¦  «         |                      dt          |j        ¦  «        ¦  «         |                     d¦  «         |                      dt          |j        ¦  «        ¦  «         |j        d         }t!          d| j         j        ¬¦  «        }|| j         _        | j                              ¦   «          | j                              ¦   «          |                      |j        ¦  «         ddd¦  «         dS # 1 swxY w Y   dS )zF
            auto-ping with correct reply cancels timeout
            rƒ   r„   r[   r   r6   )r‘   ÚpayloadN)r/   rˆ   r‰   r   r   r|   r   r(   rh   r_   r   r^   rB   rj   rk   ro   r0   ÚautoPingPendingÚprocessDataÚ	cancelled)rD   rt   Útimeout_callÚframes       r   Útest_auto_ping_got_pongz TestPing.test_auto_ping_got_pong  s�  € ð
 +,ˆDŒJÔ'Ø)*ˆDŒJÔ&å�e™gœgÑ&Ô&ð 8¨'å"7�”
”Ø”
×+Ò+Ñ-Ô-Ð-Ø—’ ¤
Ô 0Õ4KÔ4VÒ VÑWÔWÐWð × Ò  ¥C¨¬Ñ$6Ô$6Ñ7Ô7Ð7ð —’ Ñ"Ô"Ð"ð × Ò  ¥C¨¬Ñ$6Ô$6Ñ7Ô7Ð7Ø&œ}¨QÔ/�õ ,°2¸t¼zÔ?YÐZÑZÔZ�Ø"'�”
”à”
×&Ò&Ñ(Ô(Ð(Ø”
×&Ò&Ñ(Ô(Ð(ð —’ Ô 6Ñ7Ô7Ð7ð98ð 8ð 8ñ 8ô 8ð 8ð 8ð 8ð 8ð 8ð 8ð 8øøøð 8ð 8ð 8ð 8ð 8ð 8s   ´D=E>Å>FÆFN)rJ   rK   rL   rR   rX   r�   r’   rš   r    r   r   rw   rw   ½   sg   € € € € € ð	(ð 	(ð 	(ð	ð 	ð 	ð	Yð 	Yð 	Yð@)	Lð )	Lð )	LðV$	8ð $	8ð $	8ð $	8ð $	8r   rw   )!Úosr�   ÚenvironÚgetÚtwisted.trialr   Útwisted.internet.addressr   Útwisted.internet.taskr   Úautobahn.twisted.websocketr   r   r	   r
   Ú#autobahn.websocket.compress_deflater   Úautobahn.testutilr   Úunittest.mockr   r   Útxaio.testutilr   Úbase64r   r0   r|   r'   ÚTestCaser2   rN   rw   r    r   r   ú<module>r¨      sü  ðð6 
€	€	€	Ø €€€ð „:‡>‚>�- Ñ'Ô'ð `8Ø&Ð&Ð&Ð&Ð&Ð&Ø4Ð4Ð4Ð4Ð4Ð4Ø+Ð+Ð+Ð+Ð+Ð+àBÐBÐBÐBÐBÐBØAÐAÐAÐAÐAÐAØBÐBÐBÐBÐBÐBØAÐAÐAÐAÐAÐAØEÐEÐEÐEÐEÐEØ/Ð/Ð/Ð/Ð/Ð/à.Ð.Ð.Ð.Ð.Ð.Ð.Ð.Ø+Ð+Ð+Ð+Ð+Ð+à Ð Ð Ð Ð Ð à
€UÐÑÔðð ñ Ôðð@ @Ðð CÐð'0ð '0ð '0ð '0ð '0�hÔ'ñ '0ô '0ð '0ðR=Yð =Yð =Yð =Yð =Y�XÔ&ñ =Yô =Yð =Yð~B8ð B8ð B8ð B8ð B8�8Ô$ñ B8ô B8ð B8ð B8ð B8ð}`8ð `8r   