Ë
    oj5  ã                   óÚ  — d Z ddlZddlZddlZddlmZ ddlmZmZm	Z	m
Z
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  G d
„ dej0                  «      Z e e
j4                  ed«       d«       G d„ dej6                  «      «       Z G d„ dej:                  «      Z G d„ dej>                  «      Z  e e
jB                  ed«       d«       G d„ dej6                  «      «       Z"y)zK
Tests for implementations of L{IReactorUNIX} and L{IReactorUNIXDatagram}.
é    N)ÚskipIf)ÚaddressÚdeferÚerrorÚ
interfacesÚprotocolÚreactorÚutils)Úlockfile)ÚnetworkString)ÚFilePath)ÚMyClientFactoryÚMyServerFactory)Úunittestc                   ó   — e Zd Zd„ Zd„ Zy)ÚFailedConnectionClientFactoryc                 ó   — || _         y ©N)ÚonFail)Úselfr   s     ú8/usr/lib/python3/dist-packages/twisted/test/test_unix.pyÚ__init__z&FailedConnectionClientFactory.__init__   s	   € Øˆ�ó    c                 ó:   — | j                   j                  |«       y r   )r   Úerrback)r   Ú	connectorÚreasons      r   ÚclientConnectionFailedz4FailedConnectionClientFactory.clientConnectionFailed   s   € Ø�‰×Ñ˜FÕ#r   N)Ú__name__Ú
__module__Ú__qualname__r   r   © r   r   r   r      s   „ òó$r   r   ú1This reactor does not support UNIX domain socketsc                   óp   — e Zd ZdZ ej
                  ed«      sdZd„ Zd„ Z	d„ Z
d„ Zd„ Zd	„ Zd
„ Zd„ Zd„ Zy)ÚUnixSocketTestsz
    Test unix sockets.
    Nr#   c                 ó  ‡ ‡‡— ‰ j                  «       }‰ j                  «       Št        «       Št        j                  «       x}‰_        t        j                  |‰«      }‰ j                  |j                  «       t        j                  t        j                  t        j                  «      }‰ j                  |j                  «       |j                  ‰«       |j                  |«       ˆˆ ˆfd„}|j                  |«       |S )zè
        The address passed to the server factory's C{buildProtocol} method and
        the address returned by the connected protocol's transport's C{getPeer}
        method match the address the client socket is bound to.
        c                 ó¾   •— t        j                  ‰«      }‰j                  ‰j                  |g«       ‰j                  | j                  j                  «       |«       y r   )r   ÚUNIXAddressÚassertEqualÚpeerAddressesÚ	transportÚgetPeer)ÚprotoÚexpectedÚpeernamer   ÚserverFactorys     €€€r   Ú
cbConnMadez1UnixSocketTests.test_peerBind.<locals>.cbConnMade;   sH   ø€ Ü×*Ñ*¨8Ó4ˆHØ×Ñ˜]×8Ñ8¸8¸*ÔEØ×Ñ˜UŸ_™_×4Ñ4Ó6¸ÕAr   )Úmktempr   r   ÚDeferredÚprotocolConnectionMader	   Ú
listenUNIXÚ
addCleanupÚstopListeningÚsocketÚAF_UNIXÚSOCK_STREAMÚcloseÚbindÚconnectÚaddCallback)r   ÚfilenameÚconnMadeÚunixPortÚ
unixSocketr1   r/   r0   s   `     @@r   Útest_peerBindzUnixSocketTests.test_peerBind*   s¼   ú€ ð —;‘;“=ˆØ—;‘;“=ˆÜ'Ó)ˆÜ:?¿.¹.Ó:JÐJˆ�=Ô7Ü×%Ñ% h°Ó>ˆØ�‰˜×.Ñ.Ô/Ü—]‘]¤6§>¡>´6×3EÑ3EÓFˆ
Ø�‰˜
×(Ñ(Ô)Ø�‰˜Ô!Ø×Ñ˜8Ô$ö	Bð
 	×Ñ˜ZÔ(Øˆr   c                 ó¬  ‡ ‡‡— ‰ j                  «       Št        «       }t        j                  «       }||_        t        j                  ‰|«      }‰ j                  |j                  «       t        «       Št        j                  «       }|‰_        t        j                  ‰‰«       t        j                  ||g«      }ˆˆˆ fd„}|j                  |«       |S )zŠ
        L{IReactorUNIX.connectUNIX} can be used to connect a client to a server
        started with L{IReactorUNIX.listenUNIX}.
        c                 óØ   •— | \  }}‰j                  ‰j                  t        j                  ‰«      g«       |j                  j                  «        |j                  j                  «        y r   )r)   r*   r   r(   r+   ÚloseConnection)ÚargsÚserverProtocolÚclientProtocolÚclientFactoryr?   r   s      €€€r   ÚallConnectedz1UnixSocketTests.test_dumber.<locals>.allConnectedT   s\   ø€ Ø-1Ñ*ˆN˜Nð ×ÑØ×+Ñ+¬g×.AÑ.AÀ(Ó.KÐ-Lôð ×$Ñ$×3Ñ3Ô5Ø×$Ñ$×3Ñ3Õ5r   )r2   r   r   r3   r4   r	   r5   r6   r7   r   ÚconnectUNIXÚgatherResultsr>   )	r   r0   ÚserverConnMaderA   ÚclientConnMadeÚdrK   rJ   r?   s	   `      @@r   Útest_dumberzUnixSocketTests.test_dumberC   s©   ú€ ð
 —;‘;“=ˆÜ'Ó)ˆÜŸ™Ó)ˆØ/=ˆÔ,Ü×%Ñ% h°Ó>ˆØ�‰˜×.Ñ.Ô/Ü'Ó)ˆÜŸ™Ó)ˆØ/=ˆÔ,Ü×Ñ˜H mÔ4Ü×Ñ °Ð @ÓAˆö		6ð 	
�‰�lÔ#Øˆr   c                 óþ  ‡ ‡‡‡	— ‰ j                  «       Št        «       }t        j                  «       }||_        t        j                  ‰|d¬«      Š	‰ j                  t        j                  ‰dz   «      «       t        «       Št        j                  «       }|‰_        t        j                  ‰‰d¬«       t        j                  ||g«      }ˆˆˆ ˆ	fd„}|j                  |«       ˆˆ fd„}|j                  |«       |S )zà
        A lockfile is created and locked when L{IReactorUNIX.listenUNIX} is
        called and released when the Deferred returned by the L{IListeningPort}
        provider's C{stopListening} method is called back.
        T©ÚwantPIDú.locké   ©ÚcheckPIDc                 óö   •— | \  }}‰j                  ‰j                  t        j                  ‰«      g«       |j                  j                  «        |j                  j                  «        ‰j                  «       S r   )r)   r*   r   r(   r+   rF   r7   )rG   rH   ÚclientProtorJ   r?   r   rA   s      €€€€r   Ú
_portStuffz0UnixSocketTests.test_pidFile.<locals>._portStuffy   sk   ø€ Ø*.Ñ'ˆN˜Kð ×ÑØ×+Ñ+¬g×.AÑ.AÀ(Ó.KÐ-Lôð ×!Ñ!×0Ñ0Ô2Ø×$Ñ$×3Ñ3Ô5Ø×)Ñ)Ó+Ð+r   c                 óV   •— ‰j                  t        j                  ‰dz   «      d«       y )NrU   Úlocked)ÚassertFalser   ÚisLocked)Úignoredr?   r   s    €€r   Ú_checkz,UnixSocketTests.test_pidFile.<locals>._checkˆ   s#   ø€ Ø×ÑœX×.Ñ.¨x¸'Ñ/AÓBÀHÕMr   )r2   r   r   r3   r4   r	   r5   Ú
assertTruer   r_   r   rL   rM   r>   )
r   r0   rN   rO   rP   r[   ra   rJ   r?   rA   s
   `      @@@r   Útest_pidFilezUnixSocketTests.test_pidFileb   sÍ   û€ ð —;‘;“=ˆÜ'Ó)ˆÜŸ™Ó)ˆØ/=ˆÔ,Ü×%Ñ% h°ÀtÔLˆØ�‰œ×)Ñ)¨(°WÑ*<Ó=Ô>ô
 (Ó)ˆÜŸ™Ó)ˆØ/=ˆÔ,Ü×Ñ˜H m¸aÕ@ä×Ñ °Ð @ÓAˆ÷	,ð 	
�‰�jÔ!õ	Nð 	
�‰�fÔØˆr   c                 ó  ‡‡— | j                  «       Št        «       Št        j                  ‰‰d¬«      }| j	                  t
        j                  t        j                  ‰‰d¬«       ˆˆfd„}|j                  «       j                  |«      S )z›
        L{IReactorUNIX.listenUNIX} raises L{error.CannotListenError} if passed
        the name of a file on which a server is already listening.
        TrS   c                 óT   •— t        j                  ‰‰d¬«      }|j                  «       S ©NTrS   )r	   r5   r7   )ÚignrA   r?   r0   s     €€r   ÚstoppedListeningz<UnixSocketTests.test_socketLocking.<locals>.stoppedListeningŸ   s&   ø€ Ü×)Ñ)¨(°MÈ4ÔPˆHØ×)Ñ)Ó+Ð+r   )	r2   r   r	   r5   ÚassertRaisesr   ÚCannotListenErrorr7   r>   )r   rA   rh   r?   r0   s      @@r   Útest_socketLockingz"UnixSocketTests.test_socketLockingŽ   s|   ù€ ð
 —;‘;“=ˆÜ'Ó)ˆÜ×%Ñ% h°ÀtÔLˆà×ÑÜ×#Ñ#Ü×ÑØØØð 	ô 	
õ	,ð ×%Ñ%Ó'×3Ñ3Ð4DÓEÐEr   c                 ó¼  — | j                  «       | _        t        d| j                  ›d�«      }dt        t        j
                  j                  t        j                  «      «      j                  «       j                  i}t        t        j                  «      j                  «       j                  }t        j                  |dd|f|¬«      }|j                  |«       |S )NzBfrom twisted.internet import protocol, reactor
reactor.listenUNIX(z), protocol.ServerFactory(),wantPID=True)
s
   PYTHONPATHs   -us   -c)Úenv)r2   r?   r   r   ÚosÚpathsepÚjoinÚsysÚpathÚasBytesModeÚ
executabler
   ÚgetProcessValuer>   )r   ÚcallbackÚsourcerm   ÚpyExerP   s         r   Ú_uncleanSocketTestz"UnixSocketTests._uncleanSocketTest¥   s¡   € ØŸ™›ˆŒÝð �}‹}ðó
ˆð œh¤r§z¡z§¡´s·x±xÓ'@ÓA×MÑMÓO×TÑTÐUˆÜœŸ™Ó(×4Ñ4Ó6×;Ñ;ˆä×!Ñ! %¨%°¸Ð)?ÀSÔIˆØ	�‰�hÔØˆr   c                 ó0   ‡ — ˆ fd„}‰ j                  |«      S )a"  
        If passed C{True} for the C{wantPID} parameter, a server can be started
        listening with L{IReactorUNIX.listenUNIX} when passed the name of a
        file on which a previous server which has not exited cleanly has been
        listening using the C{wantPID} option.
        c                 óx   •— t        j                  ‰j                  t        «       d¬«      }|j	                  «       S rf   )r	   r5   r?   r   r7   )rg   Úpr   s     €r   ÚranStupidChildzGUnixSocketTests.test_uncleanServerSocketLocking.<locals>.ranStupidChild¾   s+   ø€ ä×"Ñ" 4§=¡=´/Ó2CÈTÔRˆAØ—?‘?Ó$Ð$r   ©ry   ©r   r}   s   ` r   Útest_uncleanServerSocketLockingz/UnixSocketTests.test_uncleanServerSocketLocking¶   s   ø€ ô	%ð
 ×&Ñ& ~Ó6Ð6r   c                 ó0   ‡ — ˆ fd„}‰ j                  |«      S )z¶
        If passed C{True} for the C{checkPID} parameter, a client connection
        attempt made with L{IReactorUNIX.connectUNIX} fails with
        L{error.BadFileError}.
        c                 óÆ   •— t        j                  «       }t        |«      }t        j                  ‰j
                  |d¬«       ‰j                  |t        j                  «      S )NTrW   )	r   r3   r   r	   rL   r?   ÚassertFailurer   ÚBadFileError)rg   rP   Úfr   s      €r   r}   zCUnixSocketTests.test_connectToUncleanServer.<locals>.ranStupidChildÌ   sH   ø€ Ü—‘Ó ˆAÜ-¨aÓ0ˆAÜ×Ñ §¡¨q¸4Õ@Ø×%Ñ% a¬×);Ñ);Ó<Ð<r   r~   r   s   ` r   Útest_connectToUncleanServerz+UnixSocketTests.test_connectToUncleanServerÅ   s   ø€ ô	=ð ×&Ñ& ~Ó6Ð6r   c                 óD  ‡ ‡‡— ‰ j                  «       }t        j                  ||«      Šd‰› d|›d�}‰ j                  t	        ‰«      |«       ‰ j                  t        ‰«      |«       t        j                  ‰j                  «      }ˆˆ ˆfd„}|j                  |«       |S )z~
        Test the C{__str__} and C{__repr__} implementations of a UNIX port when
        used with the given factory.
        ú<ú on ú>c                 ó~   •— d‰› d�}‰j                  t        ‰«      |«       ‰j                  t        ‰«      |«       y ©Nrˆ   z (not listening)>©r)   ÚreprÚstr)rg   ÚunconnectedStringÚfactoryNamer   rA   s     €€€r   rh   z3UnixSocketTests._reprTest.<locals>.stoppedListeningâ   s=   ø€ Ø"# K =Ð0AÐ BÐØ×ÑœT (›^Ð->Ô?Ø×ÑœS ›]Ð,=Õ>r   )
r2   r	   r5   r)   rŽ   r�   r   ÚmaybeDeferredr7   r>   )r   r0   r‘   r?   ÚconnectedStringrP   rh   rA   s   ` `    @r   Ú	_reprTestzUnixSocketTests._reprTestÔ   s�   ú€ ð
 —;‘;“=ˆÜ×%Ñ% h°Ó>ˆà˜k˜]¨$¨x¨l¸!Ð<ˆØ×Ñœ˜h›¨Ô9Ø×Ñœ˜X›¨Ô8ä×Ñ × 6Ñ 6Ó7ˆö	?ð
 	
�‰Ð&Ô'Øˆr   c                 óp   —  G d„ d«      }| j                  |t        «       | j                   |«       d«      S )a!  
        The two string representations of the L{IListeningPort} returned by
        L{IReactorUNIX.listenUNIX} contains the name of the new-style factory
        class being used and the filename on which the port is listening or
        indicates that the port is not listening.
        c                   ó   — e Zd Zd„ Zd„ Zy)úEUnixSocketTests.test_reprWithNewStyleFactory.<locals>.NewStyleFactoryc                  ó   — y r   r"   ©r   s    r   ÚdoStartzMUnixSocketTests.test_reprWithNewStyleFactory.<locals>.NewStyleFactory.doStartó   ó   € Ør   c                  ó   — y r   r"   r™   s    r   ÚdoStopzLUnixSocketTests.test_reprWithNewStyleFactory.<locals>.NewStyleFactory.doStopö   r›   r   N)r   r    r!   rš   r�   r"   r   r   ÚNewStyleFactoryr—   ò   ó   „ òór   rž   z&twisted.test.test_unix.NewStyleFactory©ÚassertIsInstanceÚtyper”   )r   rž   s     r   Útest_reprWithNewStyleFactoryz,UnixSocketTests.test_reprWithNewStyleFactoryê   s8   € ÷	ñ 	ð 	×Ñ˜o¬tÔ4à�~‰~ÙÓÐGó
ð 	
r   )r   r    r!   Ú__doc__r   ÚIReactorUNIXr	   ÚskiprC   rQ   rc   rk   ry   r€   r†   r”   r£   r"   r   r   r%   r%      sO   „ ñ
ð #ˆ:×"Ñ" 7¨DÔ1ØBˆòò2ò>*òXFò.ò"7ò7òó,
r   r%   c                   ó0   — e Zd ZdxZZdZd„ Zd„ Zd„ Zd„ Z	y)ÚClientProtoFNc                 óh   — t        j                  «       | _        t        j                  «       | _        y r   )r   r3   ÚdeferredStartedÚdeferredGotBackr™   s    r   r   zClientProto.__init__  ó    € Ü$Ÿ~™~Ó/ˆÔÜ$Ÿ~™~Ó/ˆÕr   c                 ó   — d| _         y ©NT©Ústoppedr™   s    r   ÚstopProtocolzClientProto.stopProtocol	  ó	   € Øˆ�r   c                 óH   — d| _         | j                  j                  d «       y r®   ©Ústartedrª   rv   r™   s    r   ÚstartProtocolzClientProto.startProtocol  ó   € ØˆŒØ×Ñ×%Ñ% dÕ+r   c                 óH   — || _         | j                  j                  d «       y r   )Úgotbackr«   rv   )r   Údatas     r   ÚdatagramReceivedzClientProto.datagramReceived  r·   r   )
r   r    r!   rµ   r°   r¹   r   r±   r¶   r»   r"   r   r   r¨   r¨     s%   „ ØÐ€GˆgØ€Gò0òò,ó,r   r¨   c                   ó4   — e Zd ZdxZZdxZZd„ Zd„ Zd„ Z	d„ Z
y)ÚServerProtoFNc                 óh   — t        j                  «       | _        t        j                  «       | _        y r   )r   r3   rª   ÚdeferredGotWhatr™   s    r   r   zServerProto.__init__  r¬   r   c                 ó   — d| _         y r®   r¯   r™   s    r   r±   zServerProto.stopProtocol  r²   r   c                 óH   — d| _         | j                  j                  d «       y r®   r´   r™   s    r   r¶   zServerProto.startProtocol   r·   r   c                 óŽ   — || _         | j                  j                  d|«       || _        | j                  j                  d «       y )Nó   hi back)Úgotfromr+   ÚwriteÚgotwhatr¿   rv   )r   rº   Úaddrs      r   r»   zServerProto.datagramReceived$  s8   € ØˆŒØ�‰×Ñ˜Z¨Ô.ØˆŒØ×Ñ×%Ñ% dÕ+r   )r   r    r!   rµ   r°   rÆ   rÄ   r   r±   r¶   r»   r"   r   r   r½   r½     s*   „ ØÐ€GˆgØÐ€Gˆgò0òò,ó,r   r½   z3This reactor does not support UNIX datagram socketsc                   ó(   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zy)ÚDatagramUnixSocketTestsz%
    Test datagram UNIX sockets.
    c                 óô  ‡ ‡‡‡	— ‰ j                  «       Š‰ j                  «       }t        «       Š	t        «       Št        j                  |‰	«      }‰ j                  |j                  «       t        j                  |‰‰¬«      }‰ j                  |j                  «       t        j                  ‰	j                  ‰j                  g«      }ˆˆ	fd„}ˆˆˆ ˆ	fd„}|j                  |«       |j                  |«       |S )zf
        Test that a datagram can be sent to and received by a server and vice
        versa.
        )ÚbindAddressc                 ó�   •— ‰j                   j                  d«       t        j                  ‰j                  ‰j
                  g«      S )Nó   hi)r+   rÅ   r   rM   r¿   r«   )r`   ÚcpÚsps    €€r   rÅ   z4DatagramUnixSocketTests.test_exchange.<locals>.writeD  s7   ø€ Ø�L‰L×Ñ˜uÔ%Ü×&Ñ&¨×(:Ñ(:¸B×<NÑ<NÐ'OÓPÐPr   c                 ó®   •— ‰j                  d‰j                  «       ‰j                  ‰‰j                  «       ‰j                  d‰j                  «       y )NrÍ   rÃ   )r)   rÆ   rÄ   r¹   )r`   Ú
clientaddrrÎ   r   rÏ   s    €€€€r   Ú_cbTestExchangez>DatagramUnixSocketTests.test_exchange.<locals>._cbTestExchangeH  s?   ø€ Ø×Ñ˜U B§J¡JÔ/Ø×Ñ˜Z¨¯©Ô4Ø×Ñ˜Z¨¯©Õ4r   )r2   r½   r¨   r	   ÚlistenUNIXDatagramr6   r7   ÚconnectUNIXDatagramr   rM   rª   r>   )
r   Ú
serveraddrÚsÚcrP   rÅ   rÒ   rÑ   rÎ   rÏ   s
   `      @@@r   Útest_exchangez%DatagramUnixSocketTests.test_exchange4  sº   û€ ð
 —[‘[“]ˆ
Ø—[‘[“]ˆ
Ü‹]ˆÜ‹]ˆÜ×&Ñ& z°2Ó6ˆØ�‰˜Ÿ™Ô(Ü×'Ñ'¨
°BÀJÔOˆØ�‰˜Ÿ™Ô(ä×Ñ ×!3Ñ!3°R×5GÑ5GÐ HÓIˆõ	Q÷	5ð
 	
�‰�eÔØ	�‰�oÔ&Øˆr   c                 ó  — | j                  «       }t        «       }t        j                  ||«      }| j	                  t
        j                  t        j                  ||«       |j                  «        t        j                  |«       y)zž
        L{IReactorUNIXDatagram.listenUNIXDatagram} raises
        L{error.CannotListenError} if the unix socket specified is already in
        use.
        N)
r2   r½   r	   rÓ   ri   r   rj   r7   rn   Úunlink)r   rÇ   r|   rÖ   s       r   Útest_cannotListenz)DatagramUnixSocketTests.test_cannotListenQ  s^   € ð �{‰{‹}ˆÜ‹MˆÜ×&Ñ& t¨QÓ/ˆØ×Ñœ%×1Ñ1´7×3MÑ3MÈtÐUVÔWØ	�‰ÔÜ
�	‰	�$�r   c                 óD  ‡ ‡‡— ‰ j                  «       }t        j                  ||«      Šd‰› d|›d�}‰ j                  t	        ‰«      |«       ‰ j                  t        ‰«      |«       t        j                  ‰j                  «      }ˆˆ ˆfd„}|j                  |«       |S )zˆ
        Test the C{__str__} and C{__repr__} implementations of a UNIX datagram
        port when used with the given protocol.
        rˆ   r‰   rŠ   c                 ó~   •— d‰› d�}‰j                  t        ‰«      |«       ‰j                  t        ‰«      |«       y rŒ   r�   )rg   r�   ÚprotocolNamer   rA   s     €€€r   rh   z;DatagramUnixSocketTests._reprTest.<locals>.stoppedListeningn  s=   ø€ Ø"# L >Ð1BÐ CÐØ×ÑœT (›^Ð->Ô?Ø×ÑœS ›]Ð,=Õ>r   )
r2   r	   rÓ   r)   rŽ   r�   r   r’   r7   r>   )r   ÚserverProtorÞ   r?   r“   ÚstopDeferredrh   rA   s   ` `    @r   r”   z!DatagramUnixSocketTests._reprTest`  s�   ú€ ð
 —;‘;“=ˆÜ×-Ñ-¨h¸ÓDˆà˜l˜^¨4°¨|¸1Ð=ˆØ×Ñœ˜h›¨Ô9Ø×Ñœ˜X›¨Ô8ä×*Ñ*¨8×+AÑ+AÓBˆö	?ð
 	× Ñ Ð!1Ô2ØÐr   c                 óp   —  G d„ d«      }| j                  |t        «       | j                   |«       d«      S )a2  
        The two string representations of the L{IListeningPort} returned by
        L{IReactorUNIXDatagram.listenUNIXDatagram} contains the name of the
        new-style protocol class being used and the filename on which the port
        is listening or indicates that the port is not listening.
        c                   ó   — e Zd Zd„ Zd„ Zy)úODatagramUnixSocketTests.test_reprWithNewStyleProtocol.<locals>.NewStyleProtocolc                  ó   — y r   r"   )r   r+   s     r   ÚmakeConnectionz^DatagramUnixSocketTests.test_reprWithNewStyleProtocol.<locals>.NewStyleProtocol.makeConnection  r›   r   c                  ó   — y r   r"   r™   s    r   r�   zVDatagramUnixSocketTests.test_reprWithNewStyleProtocol.<locals>.NewStyleProtocol.doStop‚  r›   r   N)r   r    r!   rå   r�   r"   r   r   ÚNewStyleProtocolrã   ~  rŸ   r   rç   z'twisted.test.test_unix.NewStyleProtocolr    )r   rç   s     r   Útest_reprWithNewStyleProtocolz5DatagramUnixSocketTests.test_reprWithNewStyleProtocolv  s9   € ÷	ñ 	ð 	×ÑÐ.´Ô5à�~‰~ÙÓÐ Ió
ð 	
r   N)r   r    r!   r¤   rØ   rÛ   r”   rè   r"   r   r   rÉ   rÉ   +  s   „ ñ
òò:òó,
r   rÉ   )#r¤   rn   r8   rq   r   r   Útwisted.internetr   r   r   r   r   r	   r
   Útwisted.pythonr   Útwisted.python.compatr   Útwisted.python.filepathr   Útwisted.test.test_tcpr   r   Útwisted.trialÚClientFactoryr   r¥   ÚTestCaser%   ÚConnectedDatagramProtocolr¨   ÚDatagramProtocolr½   ÚIReactorUNIXDatagramrÉ   r"   r   r   ú<module>rô      sé   ðñó
 
Û Û 
Ý ç X× XÑ XÝ #Ý /Ý ,ß BÝ "ô$ H×$:Ñ$:ô $ñ Øˆ
×Ñ ¨Ó.Ð.Ø7óô\
�h×'Ñ'ó \
ó	ð\
ô~,�(×4Ñ4ô ,ô(,�(×+Ñ+ô ,ñ, Ø'ˆ
×'Ñ'¨°Ó6Ð6Ø9óô[
˜h×/Ñ/ó [
ó	ñ[
r   