ó
    ×›‘h5  ã                  ó<  • S r SSKJr  SSKJrJr  SSKJrJrJ	r	  SSK
Jr  SSKJr  SSKJr  SSKJr  SS	KJr  SS
KJrJr  SSKJr  SSKJrJr  SSKJr  SSKJr  SSK J!r!J"r"  SSK#J$r$  SSK%J&r&  SSK'J(r(J)r)J*r*  SSK+J,r,  \	" SSS9r-Sr. " S S\&5      r/ " S S\&5      r0 \1" S5        SSK2J3r3J4r4J5r5J6r6J7r7J8r8J9r9  \ " S S\65      5       r: " S  S!\8\:   5      r; " S" S#\5\:   5      r<\ " S% S&\\-   5      5       r>\" \.S'5       " S( S)\5      5       r?g*! \= a    S$r. N5f = f)+z%
Tests for L{twisted.web.websocket}.
é    )Úannotations)Ú	dataclassÚfield)ÚAnyÚGenericÚTypeVar)ÚskipIf)Úimplementer)ÚDeferred)ÚConnectionDone)ÚIPushProducer)ÚAccumulatingProtocolÚMemoryReactorClock)ÚFailure)ÚConnectionCompleterÚIOPump)ÚSynchronousTestCase)ÚBAD_REQUEST)ÚAgentÚreadBody)ÚIRequest)ÚResource)ÚNOT_DONE_YETÚRequestÚSite)ÚDataÚWSPÚWebSocketProtocol)ÚboundFc                  ó   • \ rS rSrSS jrSrg)ÚWeirdResourceé"   c                ó&   • UR                  S5        g)aw  
Per U{the wsproto documentation
<https://python-hyper.org/projects/wsproto/en/latest/api.html#wsproto.events.RejectConnection.has_body>}:

    - The only scenario in which the caller receives a RejectConnection
      with C{has_body == False} is if the peer violates sends an
      informational status code (1xx) other than 101

This is a weird edge case so we provoke it.
éf   ó    )ÚsetResponseCode©ÚselfÚrequests     ÚcC:\Users\psant\Downloads\Noiseback\school\venv\Lib\site-packages\twisted/web/test/test_websocket.pyÚ
render_GETÚWeirdResource.render_GET#   s   € ð 	×Ñ Ô$Ør%   © N)r)   r   ÚreturnÚbytes)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__r+   Ú__static_attributes__r-   r%   r*   r!   r!   "   s   † ÷r%   r!   c                  ó"   • \ rS rSrSrSS jrSrg)ÚDelayedResponseé2   z®
A resource that will not respond to a C{GET} request right away.  You will
need to use the C{request.write(b'RESPONSE BODY')} and C{request.finish()}
to trigger a response.
c                ó   • Xl         [        $ ©N)r)   r   r'   s     r*   r+   ÚDelayedResponse.render_GET9   s   € ØŒÜÐr%   )r)   N)r)   r   r.   Úint)r0   r1   r2   r3   Ú__doc__r+   r4   r-   r%   r*   r6   r6   2   s   † ñ÷r%   r6   Úwsproto)ÚConnectionRejectedÚWebSocketClientEndpointÚWebSocketClientFactoryr   ÚWebSocketResourceÚWebSocketServerFactoryÚWebSocketTransportc                  óŽ   • \ rS rSr% Sr\" \S9rS\S'   Sr	S\S'   SS	 jr
SS
 jrSS jrSS jrSS jrSS jrSS jrSS jrSrg)ÚMyWSPéM   zg
Used to implement both client-side and server-side WebSocket
application that will help with testing.
©Údefault_factoryzlist[bytes]ÚpongsNzFailure | NoneÚwasLostc                ó   • Xl         g r9   )Ú	transport)r(   rL   s     r*   ÚnegotiationStartedÚMyWSP.negotiationStartedW   s   € Ø&�Nr%   c                ó   • g r9   r-   ©r(   s    r*   ÚnegotiationFinishedÚMyWSP.negotiationFinishedZ   s   € Ør%   c                ó   • Xl         g r9   )rJ   )r(   Úreasons     r*   ÚconnectionLostÚMyWSP.connectionLost]   s   € Ø!�Lr%   c                ó~   • US:X  a  U R                   R                  S5        g U R                  R                  U5        g )Nó   requestó    responseÿ)rL   ÚsendBytesMessageÚ	bDeferredÚcallback©r(   Údatas     r*   ÚbytesMessageReceivedÚMyWSP.bytesMessageReceived`   s/   € Ø�zÓ!Ø—‘×/Ñ/Ð0GÕHà—‘×'Ñ'¨Õ-r%   c                ó~   • US:X  a  U R                   R                  S5        g U R                  R                  U5        g )Nr)   Úresponse)rL   ÚsendTextMessageÚdeferredr\   r]   s     r*   ÚtextMessageReceivedÚMyWSP.textMessageReceivedf   s.   € Ø�yÓ Ø—‘×.Ñ.¨zÕ:à—‘×&Ñ& tÕ,r%   c                ó:   • U R                   R                  U5        g r9   )rI   Úappend)r(   Úpayloads     r*   ÚpongReceivedÚMyWSP.pongReceivedl   s   € Ø�J‰J×Ñ˜gÕ&r%   c                ón   • [        5       U l        U R                  R                  S5        U R                  $ )z:
Send a text message to the server and expect a response.
r)   )r   rd   rL   rc   rP   s    r*   ÚsendRequestÚMyWSP.sendRequesto   s)   € ô ,4«:ˆDŒMØ�N‰N×*Ñ*¨9Ô5Ø—=‘=Ð r%   c                ón   • [        5       U l        U R                  R                  S5        U R                  $ )z;
Send a bytes message to the server and expect a response.
rX   )r   r[   rL   rZ   rP   s    r*   ÚbytesRequestÚMyWSP.bytesRequestw   s)   € ô /7«jˆDŒNØ�N‰N×+Ñ+¨JÔ7Ø—>‘>Ð!r%   )r[   rd   rL   rJ   )rL   rC   r.   ÚNone©r.   rr   )rT   r   r.   rr   )r^   r/   r.   rr   )r^   Ústrr.   rr   )ri   r/   r.   rr   )r.   zDeferred[str])r.   zDeferred[bytes])r0   r1   r2   r3   r<   r   ÚlistrI   Ú__annotations__rJ   rM   rQ   rU   r_   re   rj   rm   rp   r4   r-   r%   r*   rE   rE   M   sJ   ‡ ñ	ñ
 #°4Ñ8ˆˆ{Ó8Ø"&ˆ�Ó&ô	'ô	ô	"ô	.ô	-ô	'ô	!÷	"r%   rE   c                  ó*   • \ rS rSr% S\S'   SS jrSrg)Ú	MyFactoryé   zWebSocketFixture[Any]Úfixturec                ód   • [        5       nU R                  R                  R                  U5        U$ r9   )rE   rz   Úserversrh   )r(   r)   Únews      r*   ÚbuildProtocolÚMyFactory.buildProtocol‚   s&   € Ü“'ˆCØ�L‰L× Ñ ×'Ñ'¨Ô,ØˆJr%   r-   N)r)   r   r.   rE   )r0   r1   r2   r3   rv   r~   r4   r-   r%   r*   rx   rx      s   ‡ Ø&Ó&÷	r%   rx   c                  ó   • \ rS rSrSS jrSrg)ÚMyClientFactoryé‡   c                ó   • [        5       $ r9   )rE   )r(   Úuris     r*   r~   ÚMyClientFactory.buildProtocolˆ   s	   € Ü“7ˆNr%   r-   N)r„   rt   r.   rE   )r0   r1   r2   r3   r~   r4   r-   r%   r*   r�   r�   ‡   s   † ÷	r%   r�   Tc                  óÄ   • \ rS rSr% \" 5       rS\S'   \" \S9rS\S'   \" \	S9r
S\S'   S	rS
\S'   \" \S9rS\S'   \" \S9rS\S'   \SS j5       rSSS jjrSSS jjrSrg)ÚWebSocketFixtureéŒ   úWebSocketClientFactory[WSP]ÚclientFactoryrG   r   Úreactorr   ÚresourceéP   r;   Ú
portNumberz	list[WSP]r|   r6   ÚslowResourcec                óä  • U " U5      n[        5       nX#l        UR                  R                  S[	        U5      5        UR                  R                  S[        SS5      5        UR                  R                  S[        5       5        UR                  R                  SUR                  5        UR                  R                  UR                  [        UR                  UR                  S95        U$ )Ns   connects   resources	   some-datazapplication/octet-streams
   processings   slow)r‹   )rx   rz   rŒ   ÚputChildrA   r   r!   r�   r‹   Ú	listenTCPrŽ   r   )ÚclsrŠ   r(   ÚserverFactorys       r*   r}   ÚWebSocketFixture.new•   sµ   € á�=Ó!ˆÜ!›ˆØ $ÔØ�‰×Ñ˜zÔ+<¸]Ó+KÔLØ�‰×ÑØœ˜lÐ,FÓGô	
ð 	�‰×Ñ˜}¬m«oÔ>Ø�‰×Ñ˜w¨×(9Ñ(9Ô:Ø�‰×ÑØ�O‰OœT $§-¡-¸¿¹ÑFô	
ð ˆr%   c              ƒ  ó–   #   • [         R                  " U R                  U5      nUR                  U R                  5      I S h  v•N $  N7fr9   )r?   r}   r‹   ÚconnectrŠ   )r(   r„   Úclients      r*   r—   ÚWebSocketFixture.connect¥   s6   é € Ü(×,Ò,¨T¯\©\¸3Ó?ˆØ—^‘^ D×$6Ñ$6Ó7×7Ð7Ñ7ùs   ‚A A	ÁAÁA	c                ób   • [        U R                  5      nUR                  US9nUc   S5       eU$ )a   
There should be a single websocket connection in progress; complete it.

@param greet: Should we immediately issue a greeting, i.e. deliver any
    pending buffered TCP data, upon connection?  If C{False}, the
    caller must call C{flush} on the result to deliver any pending
    data.
©ÚgreetzConnection not in progress.)r   r‹   ÚsucceedOnce)r(   rœ   Ú	completerÚ	succeededs       r*   ÚcompleteÚWebSocketFixture.complete©   s=   € ô (¨¯©Ó5ˆ	Ø×)Ñ)°Ð)Ð6ˆ	ØÑ$ÐCÐ&CÓCÐ$ØÐr%   r-   N)rŠ   r‰   r.   zWebSocketFixture[WSP])zhttp://localhost:80/connect)r„   rt   r.   r   )T)rœ   Úboolr.   r   )r0   r1   r2   r3   r   rŠ   rv   r   r‹   r   rŒ   rŽ   ru   r|   r6   r�   Úclassmethodr}   r—   r    r4   r-   r%   r*   r‡   r‡   Œ   sx   ‡ á16³€MÐ.Ó8Ù"'Ð8JÑ"K€GÐÓKÙ¨xÑ8€HˆhÓ8Ø€J�ÓÙ¨tÑ4€GˆYÓ4Ù$)¸/Ñ$J€L�/ÓJàóó ðö8÷ñ r%   r‡   z'wsproto library required for websocketsc                  ón   • \ rS rSrSS jrSS jrSS jrSS jrSS jrSS jr	SS jr
SS	 jrSS
 jrSrg)ÚWebSocketTestsé¸   c                óJ  • [         R                  [        5       5      n[        R                  " UR                  5       5      nU R                  U5        U R                  [        UR                  R                  5      S5        U R                  [        UR                  R                  5      S5        UR                  5       nU R                  U5      nUR                  5       nU R                  U5        UR                  5         U R                  U R                  U5      S5        g)z¯
Connecting to a websocket server (installed with L{WebSocketResource})
from a websocket client (connected with L{WebSocketClientEndpoint})
results in a websocket connection.
é   rb   N)r‡   r}   r�   r   ÚfromCoroutiner—   ÚassertNoResultÚassertEqualÚlenr‹   Ú
tcpServersÚ
tcpClientsr    ÚsuccessResultOfrm   Úflush)r(   rz   Ú	connectedÚpumpÚwsClientÚ	requesteds         r*   Útest_websocketÚWebSocketTests.test_websocketº   sØ   € ô #×&Ñ&¤Ó'8Ó9ˆÜ×*Ò*¨7¯?©?Ó+<Ó=ˆ	Ø×Ñ˜IÔ&Ø×Ñœ˜WŸ_™_×7Ñ7Ó8¸!Ô<Ø×Ñœ˜WŸ_™_×7Ñ7Ó8¸!Ô<Ø×ÑÓ!ˆØ×'Ñ'¨	Ó2ˆØ×(Ñ(Ó*ˆ	Ø×Ñ˜IÔ&Ø�
‰
ŒØ×Ñ˜×-Ñ-¨iÓ8¸*ÕEr%   c                ól  • [         R                  [        5       5      n[        R                  " UR                  5       5      nUR                  5       nU R                  U5      nUR                  5       nU R                  U5        UR                  5         U R                  U R                  U5      S5        g)zr
Connecting to a websocket server and sending it a bytes message results
in C{bytesMessageReceived} being called.
rY   N)r‡   r}   r�   r   r©   r—   r    r¯   rp   rª   r°   r«   )r(   rz   r±   r²   r³   Ú
bRequesteds         r*   Útest_bytesMessageÚ WebSocketTests.test_bytesMessageÌ   s�   € ô
 #×&Ñ&¤Ó'8Ó9ˆÜ×*Ò*¨7¯?©?Ó+<Ó=ˆ	Ø×ÑÓ!ˆØ×'Ñ'¨	Ó2ˆØ×*Ñ*Ó,ˆ
Ø×Ñ˜JÔ'Ø�
‰
ŒØ×Ñ˜×-Ñ-¨jÓ9Ð;RÕSr%   c                ó   ^• [         R                  [        5       5      n[        R                  " UR                  5       5        UR                  5       n/ m[        [        5       " U4S jS5      5       nU" 5       nUR                  S   R                  R                  U5        U R                  T/ 5        UR                  R                  R                  5         U R                  TS/5        UR                  R                  R!                  5         U R                  TSS/5        UR                  R                  R#                  5         U R                  T/ SQ5        U R%                  UR                  R                  U5        UR                  S   R                  R'                  5         U R%                  UR                  R                  S5        g)zW
Websocket transports can notify a producer of backpressure events via
attachProducer.
c                  óF   >• \ rS rSrSU 4S jjrSU 4S jjrSU 4S jjrSrg)Ú6WebSocketTests.test_backpressure.<locals>.TestProduceréä   c                ó(   >• TR                  S5        g )NÚpaused©rh   ©r(   Úeventss    €r*   ÚpauseProducingÚEWebSocketTests.test_backpressure.<locals>.TestProducer.pauseProducingæ   s   ø€ Ø—‘˜hÕ'r%   c                ó(   >• TR                  S5        g )NÚresumedrÁ   rÂ   s    €r*   ÚresumeProducingÚFWebSocketTests.test_backpressure.<locals>.TestProducer.resumeProducingé   ó   ø€ Ø—‘˜iÕ(r%   c                ó(   >• TR                  S5        g )NÚstoppedrÁ   rÂ   s    €r*   ÚstopProducingÚDWebSocketTests.test_backpressure.<locals>.TestProducer.stopProducingì   rÊ   r%   r-   Nrs   )r0   r1   r2   r3   rÄ   rÈ   rÍ   r4   )rÃ   s   €r*   ÚTestProducerr½   ä   s   ø† ÷(÷)÷)ò )r%   rÏ   r   rÀ   rÇ   )rÀ   rÇ   rÌ   N)r‡   r}   r�   r   r©   r—   r    r
   r   r|   rL   ÚattachProducerr«   ÚserverIOÚproducerrÄ   rÈ   rÍ   ÚassertIsÚdetachProducer)r(   rz   r²   rÏ   ÚtestProducerrÃ   s        @r*   Útest_backpressureÚ WebSocketTests.test_backpressureÚ   sW  ø€ ô
 #×&Ñ&¤Ó'8Ó9ˆÜ×Ò˜wŸ™Ó0Ô1Ø×ÑÓ!ˆØˆä	”]Ó	#÷	)ó 	)ó 
$ð	)ñ $“~ˆØ�‰˜Ñ×$Ñ$×3Ñ3°LÔAØ×Ñ˜ Ô$Ø�‰×Ñ×-Ñ-Ô/Ø×Ñ˜ ( Ô,Ø�‰×Ñ×.Ñ.Ô0Ø×Ñ˜ (¨IÐ!6Ô7Ø�‰×Ñ×,Ñ,Ô.Ø×Ñ˜Ò!AÔBØ�‰�d—m‘m×,Ñ,¨lÔ;Ø�‰˜Ñ×$Ñ$×3Ñ3Ô5Ø�‰�d—m‘m×,Ñ,¨dÕ3r%   c                ó�  • [         R                  [        5       5      n[        R                  " UR                  5       5      nUR                  5       nU R                  U5      nUR                  R                  S5        U R                  UR                  / 5        UR                  5         U R                  UR                  S/5        g)a  
Internally, Twisted's websocket resource responds to all ping requests
with a pong as required by the spec, so peers can issue a C{ping} and
receive a C{pong} message with the same payload; our websocket
transport also implements a C{ping} method to send that message.
s   123N)r‡   r}   r�   r   r©   r—   r    r¯   rL   Úpingr«   rI   r°   ©r(   rz   r±   r²   r³   s        r*   Útest_pingPongÚWebSocketTests.test_pingPongü   s“   € ô #×&Ñ&¤Ó'8Ó9ˆÜ×*Ò*¨7¯?©?Ó+<Ó=ˆ	Ø×ÑÓ!ˆØ×'Ñ'¨	Ó2ˆØ×Ñ×Ñ Ô'Ø×Ñ˜Ÿ™¨Ô,Ø�
‰
ŒØ×Ñ˜Ÿ™¨&¨Õ2r%   c                óº  • [         R                  [        5       5      n[        R                  " UR                  5       5      nUR                  5       nU R                  U5      nU R                  UR                  S   R                  S5        U R                  UR                  S5        UR                  R                  5         U R                  UR                  S   R                  S5        U R                  UR                  S5        UR                  5         U R                  UR                  S   R                  S5        U R                  UR                  S5        g)z]
When the underlying TCP connection is lost,
L{WebSocketProtocol.connectionLost} is invoked.
r   N)r‡   r}   r�   r   r©   r—   r    r¯   rÓ   r|   rJ   rL   ÚloseConnectionr°   ÚassertIsNotrÚ   s        r*   Útest_serverConnectionLostÚ(WebSocketTests.test_serverConnectionLost  sþ   € ô
 #×&Ñ&¤Ó'8Ó9ˆÜ×*Ò*¨7¯?©?Ó+<Ó=ˆ	Ø×ÑÓ!ˆØ×'Ñ'¨	Ó2ˆØ�‰�g—o‘o aÑ(×0Ñ0°$Ô7Ø�‰�h×&Ñ&¨Ô-Ø×Ñ×)Ñ)Ô+Ø�‰�g—o‘o aÑ(×0Ñ0°$Ô7Ø�‰�h×&Ñ&¨Ô-Ø�
‰
ŒØ×Ñ˜Ÿ™¨Ñ+×3Ñ3°TÔ:Ø×Ñ˜×)Ñ)¨4Õ0r%   c                óˆ  • [         R                  [        5       5      n[        UR                  5      nUR                  SS5      nU R                  U5        UR                  5         U R                  U5      nU R                  UR                  [        5        [        U5      nU R                  U R                  U5      S5        g)z‹
Attempting to issue an C{HTTP GET} against a websocket server
(installed with L{WebSocketResource}) results in a C{BAD_REQUEST}
response.
s   GETs   http://localhost/connects$   websocket protocol negotiation errorN)r‡   r}   r�   r   r‹   r)   rª   r    r¯   r«   Úcoder   r   )r(   rz   Úagentrb   ÚrÚbodys         r*   Útest_badÚWebSocketTests.test_bad  sœ   € ô #×&Ñ&¤Ó'8Ó9ˆÜ�g—o‘oÓ&ˆØ—=‘= Ð)DÓEˆØ×Ñ˜HÔ%Ø×ÑÔØ× Ñ  Ó*ˆØ×Ñ˜Ÿ™¤Ô-Ü˜‹{ˆØ×ÑØ× Ñ  Ó&Ð(Oõ	
r%   c                ó  • [         R                  [        5       5      n[        R                  " UR                  S5      5      nUR                  SS9nU R                  U5        UR                  5         U R                  U[        5        g)ú¡
Attempting to connect to a regular HTTP resource that does not support
websockets will result in the Deferred returned from
L{WebSocketClientEndpoint} failing.
zhttp://localhost/emptyFr›   N©r‡   r}   r�   r   r©   r—   r    rª   r°   ÚfailureResultOfr>   ©r(   rz   r±   r²   s       r*   Útest_connectionRefusedÚ%WebSocketTests.test_connectionRefused0  sl   € ô #×&Ñ&¤Ó'8Ó9ˆÜ×*Ò*¨7¯?©?Ð;SÓ+TÓUˆ	Ø×Ñ eÐÐ,ˆØ×Ñ˜IÔ&Ø�
‰
ŒØ×Ñ˜YÔ(:Õ;r%   c                ó  • [         R                  [        5       5      n[        R                  " UR                  S5      5      nUR                  SS9nU R                  U5        UR                  5         U R                  U[        5        g)rê   zhttp://localhost/processingFr›   Nrë   rí   s       r*   Útest_connectionRefusedWeirdÚ*WebSocketTests.test_connectionRefusedWeird=  sq   € ô #×&Ñ&¤Ó'8Ó9ˆÜ×*Ò*Ø�O‰OÐ9Ó:ó
ˆ	ð ×Ñ eÐÐ,ˆØ×Ñ˜IÔ&Ø�
‰
ŒØ×Ñ˜YÔ(:Õ;r%   c                ó  • [         R                  [        5       5      n[        R                  " UR                  S5      5      nUR                  SS9nU R                  U5        UR                  R                  R                  S5        UR                  5         U R                  U[        5      nUR                  R                  nUR!                  [#        5       =n5        U R%                  UR&                  S5        UR                  R                  nUR                  S5        UR                  5         U R%                  UR&                  S5        UR                  S5        UR                  5         U R%                  UR&                  S5        UR)                  5         U R+                  UR,                  S5        UR                  5         UR,                  c   S	5       eU R%                  UR,                  R.                  [0        5        g)
z�
When the client connection is refused by an asynchronous HTTP response,
the websocket client will not be notified until the response arrives.
zhttp://localhost/slowTr›   r%   s   hellos   worlds
   helloworldNzshould be closed now)r‡   r}   r�   r   r©   r—   r    rª   r�   r)   Úwriter°   rì   r>   Úvaluerb   ÚdeliverBodyr   r«   r^   ÚfinishrÓ   ÚclosedReasonÚtyper   )r(   rz   r±   r²   ÚrejectedÚrespÚpÚreqs           r*   Útest_connectionRefusedSlowÚ)WebSocketTests.test_connectionRefusedSlowL  sy  € ô
 #×&Ñ&¤Ó'8Ó9ˆÜ×*Ò*¨7¯?©?Ð;RÓ+SÓTˆ	Ø×Ñ dÐÐ+ˆØ×Ñ˜IÔ&Ø×Ñ×$Ñ$×*Ñ*¨3Ô/Ø�
‰
Œà×'Ñ'¨	Ô3EÓFˆØ�~‰~×&Ñ&ˆØ×ÑÔ2Ó4Ð4˜Ô5Ø×Ñ˜Ÿ™ Ô%Ø×"Ñ"×*Ñ*ˆØ�	‰	�(ÔØ�
‰
ŒØ×Ñ˜Ÿ™ Ô*Ø�	‰	�(ÔØ�
‰
ŒØ×Ñ˜Ÿ™ Ô/Ø�
‰
ŒØ�‰�a—n‘n dÔ+Ø�
‰
Œà�~‰~Ñ)ÐAÐ+AÓAÐ)Ø×Ñ˜Ÿ™×,Ñ,¬nÕ=r%   r-   Nrs   )r0   r1   r2   r3   rµ   r¹   rÖ   rÛ   rà   rç   rî   rñ   rþ   r4   r-   r%   r*   r¥   r¥   ¸   s2   † ôFô$Tô 4ôD3ô 1ô$
ô$<ô<÷>r%   r¥   N)@r<   Ú
__future__r   Údataclassesr   r   Útypingr   r   r   Úunittestr	   Úzope.interfacer
   Útwisted.internet.deferr   Útwisted.internet.errorr   Útwisted.internet.interfacesr   Útwisted.internet.testingr   r   Útwisted.python.failurer   Útwisted.test.iosimr   r   Útwisted.trial.unittestr   Útwisted.web._responsesr   Útwisted.web.clientr   r   Útwisted.web.iwebr   Útwisted.web.resourcer   Útwisted.web.serverr   r   r   Útwisted.web.staticr   r   Ú
shouldSkipr!   r6   Ú
__import__Útwisted.web.websocketr>   r?   r@   r   rA   rB   rC   rE   rx   r�   ÚImportErrorr‡   r¥   r-   r%   r*   Ú<module>r     s.  ðñõ #ç (ß (Ñ (Ý å &å +Ý 1Ý 5ß MÝ *ß :Ý 6Ý .ß .Ý %Ý )ß :Ñ :Ý #áˆeÐ.Ñ/€Ø€
ô�Hô ô 	�hô 	ðKÙˆyÔ÷÷ ñ ð ô/"Ð!ó /"ó ð/"ôbÐ*¨5Ñ1ô ôÐ0°Ñ7ô ð
 ô(�w˜s‘|ó (ó ð(ñV ˆ
Ð=Ó>ôo>Ð(ó o>ó ?ño>øðs ó Ø‚Jðús   ÂD ÄDÄD