§
    Ètºfè7  ã                   óz  — d Z ddlZddlZddlZddlZddlmZ ddlmZ ddl	m
Z
mZmZmZ ddlmZmZ ddlmZmZ ddlmZmZmZ dd	lmZ dd
lmZmZ  eeej        ej        ej         ¦  «         G d„ dej!        ¦  «        ¦   «         Z" G d„ d¦  «        Z# eej$        ¦  «         G d„ de#e"¦  «        ¦   «         Z%dS )z
UDP support for IOCP reactor
é    N)ÚOptional)Úimplementer)ÚaddressÚdeferÚerrorÚ
interfaces)ÚisIPAddressÚisIPv6Address)ÚabstractÚiocpsupport)ÚERROR_CONNECTION_REFUSEDÚERROR_IO_PENDINGÚERROR_PORT_UNREACHABLE)ÚIReadWriteHandle)ÚfailureÚlogc                   óä   — e Zd ZU dZej        Zej        ZdZ	dZ
ee         ed<   dd„Zd„ Zd	efd
„Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd d„Zd„ Zd„ Zd„ Zd„ Zd„ Zd d„Z d„ Z!d„ Z"d„ Z#d„ Z$d„ Z%dS )!ÚPortzÈ
    UDP port, listening for packets.

    @ivar addressFamily: L{socket.AF_INET} or L{socket.AF_INET6}, depending on
        whether this port is listening on an IPv4 address or an IPv6 address.
    FNÚ_realPortNumberÚ é    c                 óÚ  — || _         || _        || _        || _        |                      ¦   «          d| _        |                      ¦   «          t          j         	                    | |¦  «         t          j
        | j        | j        ¦  «        }t          j        |                     ¦   «         ¦  «        }t!          |¦  «        | _        t!          t%          j        d¦  «        ¦  «        | _        dS )z>
        Initialize with a numeric port to listen on.
        NÚi)ÚportÚprotocolÚreadBufferSizeÚ	interfaceÚ	setLogStrÚ_connectedAddrÚ_setAddressFamilyr   Ú
FileHandleÚ__init__ÚsocketÚaddressFamilyÚ
socketTypeÚ_iocpÚ
maxAddrLenÚfilenoÚ	bytearrayÚaddressBufferÚstructÚcalcsizeÚaddressLengthBuffer)Úselfr   Úprotor   ÚmaxPacketSizeÚreactorÚsktÚaddrLens           ú_/var/www/surfInsights/venv3-11/lib/python3.11/site-packages/twisted/internet/iocpreactor/udp.pyr"   zPort.__init__2   sÂ   € ð ˆŒ	ØˆŒØ+ˆÔØ"ˆŒØ�ŠÑÔÐØ"ˆÔØ×ÒÑ Ô Ð åÔ×$Ò$ T¨7Ñ3Ô3Ð3åŒm˜DÔ.°´Ñ@Ô@ˆÝÔ" 3§:¢:¡<¤<Ñ0Ô0ˆÝ& wÑ/Ô/ˆÔå#,­V¬_¸SÑ-AÔ-AÑ#BÔ#BˆÔ Ð Ð ó    c                 óä   — t          | j        ¦  «        rt          j        | _        dS t          | j        ¦  «        rt          j        | _        dS | j        rt          j        | j        d¦  «        ‚dS )z8
        Resolve address family for the socket.
        znot an IPv4 or IPv6 addressN)	r
   r   r#   ÚAF_INET6r$   r	   ÚAF_INETr   ÚInvalidAddressError©r.   s    r4   r    zPort._setAddressFamilyF   sy   € õ ˜œÑ(Ô(ð 	Ý!'¤ˆDÔÐÐÝ˜œÑ(Ô(ð 	Ý!'¤ˆDÔÐÐØŒ^ð 	ÝÔ+Ø”Ð =ñô ð ð	ð 	r5   Úreturnc                 ó`   — | j         �d| j        j        › d| j         › d�S d| j        j        › d�S )Nú<z on ú>z not connected>)r   r   Ú	__class__r:   s    r4   Ú__repr__zPort.__repr__S   sB   € ØÔÐ+ØK�t”}Ô.ÐKÐK°DÔ4HÐKÐKÐKÐKà?�t”}Ô.Ð?Ð?Ð?Ð?r5   c                 ó   — | j         S )z)
        Return a socket object.
        )r#   r:   s    r4   Ú	getHandlezPort.getHandleY   ó   € ð Œ{Ðr5   c                 óV   — |                       ¦   «          |                      ¦   «          dS )zÐ
        Create and bind my socket, and begin listening on it.

        This is called on unserialization, and must be called after creating a
        server to begin listening on the specified port.
        N)Ú_bindSocketÚ_connectToProtocolr:   s    r4   ÚstartListeningzPort.startListening_   s.   € ð 	×ÒÑÔÐØ×ÒÑ!Ô!Ð!Ð!Ð!r5   c                 óL   — | j                              | j        | j        ¦  «        S ©N)r1   ÚcreateSocketr$   r%   r:   s    r4   rJ   zPort.createSocketi   s   € ØŒ|×(Ò(¨Ô);¸T¼_ÑMÔMÐMr5   c                 óÀ  — 	 |                       ¦   «         }|                     | j        | j        f¦  «         n2# t          $ r%}t          j        | j        | j        |¦  «        ‚d }~ww xY w|                     ¦   «         d         | _        t          j
        |                      | j        ¦  «        ›d| j        ›�¦  «         d| _        || _        | j        j        | _        d S )Né   z starting on T)rJ   Úbindr   r   ÚOSErrorr   ÚCannotListenErrorÚgetsocknamer   r   ÚmsgÚ_getLogPrefixr   Ú	connectedr#   r(   ÚgetFileHandle)r.   r2   Úles      r4   rE   zPort._bindSocketl   sê   € ð	IØ×#Ò#Ñ%Ô%ˆCØ�HŠH�d”n d¤iÐ0Ñ1Ô1Ð1Ð1øÝð 	Ið 	Ið 	IÝÔ)¨$¬.¸$¼)ÀRÑHÔHÐHøøøøð	Iøøøð
  #ŸšÑ0Ô0°Ô3ˆÔåŒà×!Ò! $¤-Ñ0Ô0Ð0Ð0°$Ô2FÐ2FðHñ	
ô 	
ð 	
ð
 ˆŒØˆŒØ!œ[Ô/ˆÔÐÐs   ‚58 ¸
A'Á A"Á"A'c                 ó–   — | j                              | ¦  «         |                      ¦   «          | j                             | ¦  «         d S rI   )r   ÚmakeConnectionÚstartReadingr1   ÚaddActiveHandler:   s    r4   rF   zPort._connectToProtocol€   sF   € ØŒ×$Ò$ TÑ*Ô*Ð*Ø×ÒÑÔÐØŒ×$Ò$ TÑ*Ô*Ð*Ð*Ð*r5   c                 ón   — | j         r-|                      |||¦  «         |                      ¦   «          d S d S rI   )ÚreadingÚ
handleReadÚdoRead©r.   ÚrcÚdataÚevts       r4   ÚcbReadzPort.cbRead…   s=   € ØŒ<ð 	Ø�OŠO˜B  cÑ*Ô*Ð*Ø�KŠK‰MŒMˆMˆMˆMð	ð 	r5   c                 óö  — |t           j        t           j        t          t          fv r$| j        r| j                             ¦   «          d S d S |r;t          j	        dt           j
                             |d¦  «        ›d|›d�¦  «         d S 	 | j                             t          |j        d |…         ¦  «        t          j        |j        ¦  «        ¦  «         d S # t$          $ r t          j        ¦   «          Y d S w xY w)Nzerror in recvfrom -- zunknown errorz (ú))ÚerrnoÚWSAECONNREFUSEDÚWSAECONNRESETr   r   r   r   ÚconnectionRefusedr   rQ   Ú	errorcodeÚgetÚdatagramReceivedÚbytesÚbuffr&   ÚmakesockaddrÚ	addr_buffÚBaseExceptionÚerrr^   s       r4   r\   zPort.handleReadŠ   s!  € ØÝÔ!ÝÔÝ$Ý"ð	
ð 
ð 
ð Ô"ð 2Ø”×/Ò/Ñ1Ô1Ð1Ð1Ð1ð2ð 2àð 	ÝŒGˆGå”?×&Ò& r¨?Ñ;Ô;Ð;Ð;¸R¸R¸RðAñô ð ð ð ð
Ø”×.Ò.Ý˜#œ( 5 D 5œ/Ñ*Ô*­EÔ,>¸s¼}Ñ,MÔ,Mñô ð ð ð øõ !ð ð ð Ý”‘	”	�	�	�	�	ðøøøs   Â	AC ÃC8Ã7C8c                 ó\  — t          j        | j        | ¦  «        }| j        d         x|_        }| j        x|_        }| j        x|_        }t          j	        |  
                    ¦   «         ||||¦  «        \  }}|r0|t          k    r'| j                             d| j        |||¦  «         d S d S d S ©Nr   )r&   ÚEventrb   Ú_readBuffersrm   r*   ro   r-   Úaddr_len_buffÚrecvfromrT   r   r1   Ú	callLater)r.   ra   rm   ro   rv   r_   r`   s          r4   r]   zPort.doRead    sÄ   € ÝŒk˜$œ+ tÑ,Ô,ˆàÔ+¨AÔ.Ð.ˆŒ�4Ø$(Ô$6Ð6ˆŒ˜	Ø,0Ô,DÐDˆÔ˜MÝ”>Ø×ÒÑ Ô  $¨	°=À#ñ
ô 
‰ˆˆDð ð 	B�"Õ(Ò(Ð(ð ŒL×"Ò" 1 d¤k°2°t¸SÑAÔAÐAÐAÐAð	Bð 	BÐ(Ð(r5   c                 óü  — | j         rÜ|d| j         fv sJ ‚	 | j                             |¦  «        S # t          $ r§}|j        d         }|t
          j        k    r|                      |¦  «        cY d}~S |t
          j        k    rt          j
        d¦  «        ‚|t
          j        t
          j        t          t          fv r| j                             ¦   «          n‚ Y d}~dS d}~ww xY w|dk    sJ ‚t#          |d         ¦  «        s<t%          |d         ¦  «        s'|d         dk    rt          j        |d         d¦  «        ‚t#          |d         ¦  «        r0| j        t          j        k    rt          j        |d         d¦  «        ‚t%          |d         ¦  «        r0| j        t          j        k    rt          j        |d         d¦  «        ‚	 | j                             ||¦  «        S # t          $ rŽ}|j        d         }|t
          j        k    r|                      ||¦  «        cY d}~S |t
          j        k    rt          j
        d¦  «        ‚|t
          j        t
          j        t          t          fv rY d}~dS ‚ d}~ww xY w)z~
        Write a datagram.

        @param addr: should be a tuple (ip, port), can be None in connected
        mode.
        Nr   zmessage too longz<broadcast>z0write() only accepts IP addresses, not hostnamesz*IPv6 port write() called with IPv4 addressz*IPv4 port write() called with IPv6 address)r   r#   ÚsendrN   Úargsre   ÚWSAEINTRÚwriteÚWSAEMSGSIZEr   ÚMessageLengthErrorrf   rg   r   r   r   rh   r	   r
   r9   r$   r7   r8   Úsendto)r.   ÚdatagramÚaddrÚseÚnos        r4   r}   z
Port.write²   sË  € ð Ôð 8	Ø˜D $Ô"5Ð6Ð6Ð6Ð6Ð6ðØ”{×'Ò'¨Ñ1Ô1Ð1øÝð ð ð Ø”W˜Q”Z�Ø�œÒ'Ð'ØŸ:š: hÑ/Ô/Ð/Ð/Ð/Ð/Ð/Ð/Ø�5Ô,Ò,Ð,ÝÔ2Ð3EÑFÔFÐFØÝÔ)ÝÔ'Ý,Ý*ð	ð ð ð ”M×3Ò3Ñ5Ô5Ð5Ð5àð 6Ð5Ð5Ð5Ð5Ð5øøøøðøøøð  ˜4’<�<�<�<å  Q¤Ñ(Ô(ðå% d¨1¤gÑ.Ô.ðð ˜”G˜}Ò,Ð,åÔ/Ø˜”GÐOñô ð õ ˜4 œ7Ñ#Ô#ð ¨Ô(:½f¼oÒ(MÐ(MÝÔ/Ø˜”GÐIñô ð õ ˜T !œWÑ%Ô%ð ¨$Ô*<ÅÄÒ*NÐ*NÝÔ/Ø˜”GÐIñô ð ðØ”{×)Ò)¨(°DÑ9Ô9Ð9øÝð ð ð Ø”W˜Q”Z�Ø�œÒ'Ð'ØŸ:š: h°Ñ5Ô5Ð5Ð5Ð5Ð5Ð5Ð5Ø�5Ô,Ò,Ð,ÝÔ2Ð3EÑFÔFÐFØÝÔ)ÝÔ'Ý,Ý*ð	ð ð ð �F�F�F�F�Fàøøøøð#øøøsL   –0 °
C!º1CÁ+C!Á1A%CÃC!ÇG# Ç#
I;Ç-2I6ÈI;È%A
I6É5I6É6I;c                 óX   — |                       d                     |¦  «        |¦  «         d S )Nr5   )r}   Újoin)r.   Úseqr‚   s      r4   ÚwriteSequencezPort.writeSequenceó   s&   € Ø�
Š
�3—8’8˜C‘=”= $Ñ'Ô'Ð'Ð'Ð'r5   c                 óâ   — | j         rt          d¦  «        ‚t          |¦  «        s$t          |¦  «        st	          j        |d¦  «        ‚||f| _         | j                             ||f¦  «         dS )z-
        'Connect' to remote server.
        z\already connected, reconnecting is not currently supported (talk to itamar if you want this)znot an IPv4 or IPv6 address.N)r   ÚRuntimeErrorr	   r
   r   r9   r#   Úconnect)r.   Úhostr   s      r4   r‹   zPort.connectö   s‰   € ð Ôð 	Ýð4ñô ð õ ˜4Ñ Ô ð 	R­°tÑ)<Ô)<ð 	RÝÔ+¨DÐ2PÑQÔQÐQØ# T˜lˆÔØŒ×Ò˜T 4˜LÑ)Ô)Ð)Ð)Ð)r5   c                 ó´   — |                       ¦   «          | j                             | ¦  «         | j        r"| j                             d| j        ¦  «         d S d S rs   )ÚstopReadingr1   ÚremoveActiveHandlerS   rx   ÚconnectionLostr:   s    r4   Ú_loseConnectionzPort._loseConnection  s_   € Ø×ÒÑÔÐØŒ×'Ò'¨Ñ-Ô-Ð-ØŒ>ð 	;ØŒL×"Ò" 1 dÔ&9Ñ:Ô:Ð:Ð:Ð:ð	;ð 	;r5   c                 óv   — | j         rt          j        ¦   «         x}| _        nd }|                      ¦   «          |S rI   )rS   r   ÚDeferredÚdr‘   )r.   Úresults     r4   ÚstopListeningzPort.stopListening
  s>   € ØŒ>ð 	Ý#œnÑ.Ô.Ð.ˆF�T”V�VàˆFØ×ÒÑÔÐØˆr5   c                 óf   — t          j        dt          d¬¦  «         |                      ¦   «          d S )Nz-Please use stopListening() to disconnect porté   )Ú
stacklevel)ÚwarningsÚwarnÚDeprecationWarningr–   r:   s    r4   ÚloseConnectionzPort.loseConnection  s>   € ÝŒØ;ÝØð	
ñ 	
ô 	
ð 	
ð
 	×ÒÑÔÐÐÐr5   c                 óT  — t          j        d| j        z  ¦  «         d| _        t          j                             | |¦  «         | j                             ¦   «          | j         	                    ¦   «          | `| `
t          | d¦  «        r| j                             d¦  «         | `dS dS )z&
        Cleans up my socket.
        z(UDP Port %s Closed)Nr”   )r   rQ   r   r   r!   r�   r   ÚdoStopr#   ÚcloserT   Úhasattrr”   Úcallback)r.   Úreasons     r4   r�   zPort.connectionLost  sª   € õ 	ŒÐ&¨Ô)=Ñ=Ñ>Ô>Ð>Ø#ˆÔÝÔ×*Ò*¨4°Ñ8Ô8Ð8ØŒ×ÒÑÔÐØŒ×ÒÑÔÐØˆKØÐÝ�4˜ÑÔð 	ØŒF�OŠO˜DÑ!Ô!Ð!Ø���ð	ð 	r5   c                 óN   — |                       | j        ¦  «        }d|z  | _        dS )zP
        Initialize the C{logstr} attribute to be used by C{logPrefix}.
        z%s (UDP)N)rR   r   Úlogstr)r.   Ú	logPrefixs     r4   r   zPort.setLogStr)  s)   € ð ×&Ò& t¤}Ñ5Ô5ˆ	Ø  9Ñ,ˆŒˆˆr5   c                 ó   — | j         S )zK
        Returns the name of my class, to prefix log entries with.
        )r¥   r:   s    r4   r¦   zPort.logPrefix0  rC   r5   c                 óä   — | j                              ¦   «         }| j        t           j        k    rt	          j        dg|¢R Ž S | j        t           j        k    rt	          j        dg|dd…         ¢R Ž S dS )z¬
        Return the local address of the UDP connection

        @returns: the local address of the UDP connection
        @rtype: L{IPv4Address} or L{IPv6Address}
        ÚUDPNr˜   )r#   rP   r$   r8   r   ÚIPv4Addressr7   ÚIPv6Address©r.   r‚   s     r4   ÚgetHostzPort.getHost6  sy   € ð Œ{×&Ò&Ñ(Ô(ˆØÔ¥¤Ò/Ð/ÝÔ& uÐ4¨tÐ4Ð4Ð4Ð4ØÔ¥6¤?Ò2Ð2ÝÔ& uÐ:°°R°a°R´Ð:Ð:Ð:Ð:ð 3Ð2r5   c                 óf   — | j                              t           j        t           j        |¦  «         dS )z«
        Set whether this port may broadcast. This is disabled by default.

        @param enabled: Whether the port may broadcast.
        @type enabled: L{bool}
        N)r#   Ú
setsockoptÚ
SOL_SOCKETÚSO_BROADCAST)r.   Úenableds     r4   ÚsetBroadcastAllowedzPort.setBroadcastAllowedC  s*   € ð 	Œ×Ò�vÔ0µ&Ô2EÀwÑOÔOÐOÐOÐOr5   c                 óz   — t          | j                             t          j        t          j        ¦  «        ¦  «        S )z“
        Checks if broadcast is currently allowed on this port.

        @return: Whether this port may broadcast.
        @rtype: L{bool}
        )Úboolr#   Ú
getsockoptr°   r±   r:   s    r4   ÚgetBroadcastAllowedzPort.getBroadcastAllowedL  s*   € õ �D”K×*Ò*­6Ô+<½fÔ>QÑRÔRÑSÔSÐSr5   )r   r   NrI   )&Ú__name__Ú
__module__Ú__qualname__Ú__doc__r#   r8   r$   Ú
SOCK_DGRAMr%   ÚdynamicReadBuffersr   r   ÚintÚ__annotations__r"   r    Ústrr@   rB   rG   rJ   rE   rF   rb   r\   r]   r}   rˆ   r‹   r‘   r–   r�   r�   r   r¦   r­   r³   r·   © r5   r4   r   r      sÙ  € € € € € € ðð ð ”N€MØÔ"€JØÐð &*€O�X˜c”]Ð)Ð)Ñ)ðCð Cð Cð Cð(ð ð ð@˜#ð @ð @ð @ð @ðð ð ð"ð "ð "ðNð Nð Nð0ð 0ð 0ð(+ð +ð +ð
ð ð ð
ð ð ð,Bð Bð Bð$?ð ?ð ?ð ?ðB(ð (ð (ð*ð *ð *ð;ð ;ð ;ðð ð ðð ð ðð ð ð ð-ð -ð -ðð ð ð;ð ;ð ;ðPð Pð PðTð Tð Tð Tð Tr5   r   c                   óX   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
dd
„Zd„ Zd„ Zdd„ZdS )ÚMulticastMixinz,
    Implement multicast functionality.
    c                 ó®   — | j                              t           j        t           j        ¦  «        }t          j        t          j        d|¦  «        ¦  «        S )Nz@i)r#   r¶   Ú
IPPROTO_IPÚIP_MULTICAST_IFÚ	inet_ntoar+   Úpack)r.   r   s     r4   ÚgetOutgoingInterfacez#MulticastMixin.getOutgoingInterface[  s<   € ØŒK×"Ò"¥6Ô#4µfÔ6LÑMÔMˆÝÔ¥¤¨D°!Ñ 4Ô 4Ñ5Ô5Ð5r5   c                 óf   — | j                              |¦  «                             | j        ¦  «        S )z.
        Returns Deferred of success.
        )r1   ÚresolveÚaddCallbackÚ_setInterfacer¬   s     r4   ÚsetOutgoingInterfacez#MulticastMixin.setOutgoingInterface_  s+   € ð Œ|×#Ò# DÑ)Ô)×5Ò5°dÔ6HÑIÔIÐIr5   c                 óŽ   — t          j        |¦  «        }| j                              t           j        t           j        |¦  «         dS )NrL   )r#   Ú	inet_atonr¯   rÅ   rÆ   )r.   r‚   r   s      r4   rÍ   zMulticastMixin._setInterfacee  s7   € ÝÔ˜TÑ"Ô"ˆØŒ×Ò�vÔ0µ&Ô2HÈ!ÑLÔLÐLØˆqr5   c                 ó`   — | j                              t           j        t           j        ¦  «        S rI   )r#   r¶   rÅ   ÚIP_MULTICAST_LOOPr:   s    r4   ÚgetLoopbackModezMulticastMixin.getLoopbackModej  s    € ØŒ{×%Ò%¥fÔ&7½Ô9QÑRÔRÐRr5   c                 óª   — t          j        dt          |¦  «        ¦  «        }| j                             t          j        t          j        |¦  «         d S )NÚb)r+   rÈ   rµ   r#   r¯   rÅ   rÒ   )r.   Úmodes     r4   ÚsetLoopbackModezMulticastMixin.setLoopbackModem  s?   € ÝŒ{˜3¥ T¡
¤
Ñ+Ô+ˆØŒ×Ò�vÔ0µ&Ô2JÈDÑQÔQÐQÐQÐQr5   c                 ó`   — | j                              t           j        t           j        ¦  «        S rI   )r#   r¶   rÅ   ÚIP_MULTICAST_TTLr:   s    r4   ÚgetTTLzMulticastMixin.getTTLq  s    € ØŒ{×%Ò%¥fÔ&7½Ô9PÑQÔQÐQr5   c                 ó�   — t          j        d|¦  «        }| j                             t          j        t          j        |¦  «         d S )NÚB)r+   rÈ   r#   r¯   rÅ   rÙ   )r.   Úttls     r4   ÚsetTTLzMulticastMixin.setTTLt  s9   € ÝŒk˜#˜sÑ#Ô#ˆØŒ×Ò�vÔ0µ&Ô2IÈ3ÑOÔOÐOÐOÐOr5   r   c                 ój   — | j                              |¦  «                             | j        |d¦  «        S )zF
        Join a multicast group. Returns Deferred of success.
        rL   ©r1   rË   rÌ   Ú
_joinAddr1©r.   r‚   r   s      r4   Ú	joinGroupzMulticastMixin.joinGroupx  ó/   € ð Œ|×#Ò# DÑ)Ô)×5Ò5°d´oÀyÐRSÑTÔTÐTr5   c                 ój   — | j                              |¦  «                             | j        ||¦  «        S rI   )r1   rË   rÌ   Ú
_joinAddr2)r.   r‚   r   r†   s       r4   rá   zMulticastMixin._joinAddr1~  s-   € ØŒ|×#Ò# IÑ.Ô.×:Ò:¸4¼?ÈDÐRVÑWÔWÐWr5   c                 ób  — t          j        |¦  «        }t          j        |¦  «        }|rt           j        }nt           j        }	 | j                              t           j        |||z   ¦  «         d S # t          $ r4}t          j        t          j
        ||g|j        ¢R Ž ¦  «        cY d }~S d }~ww xY wrI   )r#   rÐ   ÚIP_ADD_MEMBERSHIPÚIP_DROP_MEMBERSHIPr¯   rÅ   rN   r   ÚFailurer   ÚMulticastJoinErrorr{   )r.   r   r‚   r†   ÚcmdÚes         r4   ræ   zMulticastMixin._joinAddr2�  sÃ   € ÝÔ Ñ%Ô%ˆÝÔ$ YÑ/Ô/ˆ	Øð 	,ÝÔ*ˆCˆCåÔ+ˆCð	WØŒK×"Ò"¥6Ô#4°c¸4À)Ñ;KÑLÔLÐLÐLÐLøÝð 	Wð 	Wð 	WÝ”?¥5Ô#;¸DÀ)Ð#UÈaÌfÐ#UÐ#UÐ#UÑVÔVÐVÐVÐVÐVÐVÐVøøøøð	Wøøøs   Á)A0 Á0
B.Á:)B)Â#B.Â)B.c                 ój   — | j                              |¦  «                             | j        |d¦  «        S )zD
        Leave multicast group, return Deferred of success.
        r   rà   râ   s      r4   Ú
leaveGroupzMulticastMixin.leaveGroup�  rä   r5   N)r   )r¸   r¹   rº   r»   rÉ   rÎ   rÍ   rÓ   r×   rÚ   rÞ   rã   rá   ræ   rï   rÁ   r5   r4   rÃ   rÃ   V  sì   € € € € € ðð ð6ð 6ð 6ðJð Jð Jðð ð ð
Sð Sð SðRð Rð RðRð Rð RðPð Pð PðUð Uð Uð UðXð Xð Xð
Wð 
Wð 
WðUð Uð Uð Uð Uð Ur5   rÃ   c                   ó(   — e Zd ZdZ	 	 	 	 dd„Zd„ ZdS )	ÚMulticastPortz.
    UDP Port that supports multicasting.
    r   r   NFc                 óR   — t                                | |||||¦  «         || _        d S rI   )r   r"   ÚlistenMultiple)r.   r   r/   r   r0   r1   ró   s          r4   r"   zMulticastPort.__init__š  s.   € õ 	�Š�d˜D %¨°MÀ7ÑKÔKÐKØ,ˆÔÐÐr5   c                 ó  — t                                | ¦  «        }| j        rk|                     t          j        t          j        d¦  «         t          t          d¦  «        r+|                     t          j        t          j        d¦  «         |S )NrL   ÚSO_REUSEPORT)	r   rJ   ró   r¯   r#   r°   ÚSO_REUSEADDRr¡   rõ   )r.   r2   s     r4   rJ   zMulticastPort.createSocket¦  sq   € Ý×Ò Ñ%Ô%ˆØÔð 	JØ�NŠN�6Ô,­fÔ.AÀ1ÑEÔEÐEÝ•v˜~Ñ.Ô.ð JØ—’�vÔ0µ&Ô2EÀqÑIÔIÐIØˆ
r5   )r   r   NF)r¸   r¹   rº   r»   r"   rJ   rÁ   r5   r4   rñ   rñ   ”  sO   € € € € € ðð ð ØØØð
-ð 
-ð 
-ð 
-ðð ð ð ð r5   rñ   )&r»   re   r#   r+   rš   Útypingr   Úzope.interfacer   Útwisted.internetr   r   r   r   Útwisted.internet.abstractr	   r
   Útwisted.internet.iocpreactorr   r   r&   Ú"twisted.internet.iocpreactor.constr   r   r   Ú'twisted.internet.iocpreactor.interfacesr   Útwisted.pythonr   r   ÚIListeningPortÚIUDPTransportÚISystemHandler!   r   rÃ   ÚIMulticastTransportrñ   rÁ   r5   r4   ú<module>r     sû  ððð ð €€€Ø €€€Ø €€€Ø €€€Ø Ð Ð Ð Ð Ð à &Ð &Ð &Ð &Ð &Ð &à >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ø @Ð @Ð @Ð @Ð @Ð @Ð @Ð @Ø GÐ GÐ GÐ GÐ GÐ GÐ GÐ Gðð ð ð ð ð ð ð ð ð ð
 EÐ DÐ DÐ DÐ DÐ DØ 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'ð €ØØÔØÔØÔñ	ô ðqTð qTð qTð qTð qTˆ8Ôñ qTô qTñô ðqTðh	;Uð ;Uð ;Uð ;Uð ;Uñ ;Uô ;Uð ;Uð| €ˆZÔ+Ñ,Ô,ðð ð ð ð �N Dñ ô ñ -Ô,ðð ð r5   