Ë
    UV.jö…  ã                  óŠ  — d Z ddlm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	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 ddlmZ ddl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& ddl'm(Z( ddl)m*Z* erddl+m,Z, dZ-dZ.dZ/dZ0dZ1dZ2 ee3«      Z4 edd«      Z5 edd«      Z6 G d „ d!«      Z7 G d"„ d#e8«      Z9 G d$„ d%e:«      Z; G d&„ d'«      Z< G d(„ d)«      Z= G d*„ d+ej|                  «      Z> G d,„ d-«      Z? G d.„ d/e?ej€                  «      ZA G d0„ d1ej„                  «      ZB G d2„ d3ej†                  «      ZCy)4zPVirtual transport implementation.

Emulates the AMQ API for non-AMQ transports.
é    )ÚannotationsN)Úarray)ÚOrderedDictÚdefaultdictÚ
namedtuple)Úcount)ÚFinalize)ÚEmpty)Ú	monotonicÚsleep)ÚTYPE_CHECKING)Úqueue_declare_ok_t)ÚChannelErrorÚResourceError)Ú
get_logger)Úbase)Úemergency_dump_state)Úbytes_to_strÚstr_to_bytes)Ú	FairCycle©Úuuidé   )ÚSTANDARD_EXCHANGE_TYPES)ÚTracebackTypeÚHzlMessage could not be delivered: No queues bound to exchange {exchange!r} using binding key {routing_key!r}.
zkCannot redeclare exchange {0!r} in vhost {1!r} with different type, durable, autodelete or arguments value.z;Requeuing undeliverable message for queue %r: No consumers.z)Restoring {0!r} unacknowledged message(s)z#UNABLE TO RESTORE {0} MESSAGES: {1}Úbinding_key_t)ÚqueueÚexchangeÚrouting_keyÚqueue_binding_t)r   r    Ú	argumentsc                  ó   — e Zd ZdZd„ Zd„ Zy)ÚBase64zBase64 codec.c                óP   — t        t        j                  t        |«      «      «      S ©N)r   Úbase64Ú	b64encoder   ©ÚselfÚss     ú^C:\xampp\htdocs\tradingbinance\backend\.venv\Lib\site-packages\kombu/transport/virtual/base.pyÚencodezBase64.encodeF   s   € ÜœF×,Ñ,¬\¸!«_Ó=Ó>Ð>ó    c                ó>   — t        j                  t        |«      «      S r&   )r'   Ú	b64decoder   r)   s     r,   ÚdecodezBase64.decodeI   s   € Ü×Ñ¤¨Q£Ó0Ð0r.   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r-   r1   © r.   r,   r$   r$   C   s   „ Ùò?ó1r.   r$   c                  ó   — e Zd ZdZy)ÚNotEquivalentErrorzAEntity declaration is not equivalent to the previous declaration.N©r2   r3   r4   r5   r6   r.   r,   r8   r8   M   s   „ ÚKr.   r8   c                  ó   — e Zd ZdZy)ÚUndeliverableWarningz.The message could not be delivered to a queue.Nr9   r6   r.   r,   r;   r;   Q   s   „ Ú8r.   r;   c                  óH   — e 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	„ Zy)ÚBrokerStatez2Broker state holds exchanges, queues and bindings.Nc                óP   — |€i n|| _         i | _        t        t        «      | _        y r&   )Ú	exchangesÚbindingsr   ÚsetÚqueue_index)r*   r?   s     r,   Ú__init__zBrokerState.__init__r   s$   € Ø(Ð0™°iˆŒØˆŒÜ&¤sÓ+ˆÕr.   c                ó    — | j                   j                  «        | j                  j                  «        | j                  j                  «        y r&   )r?   Úclearr@   rB   ©r*   s    r,   rE   zBrokerState.clearw   s4   € Ø�‰×ÑÔØ�‰×ÑÔØ×Ñ×ÑÕ r.   c                ó$   — |||f| j                   v S r&   )r@   )r*   r   r   r    s       r,   Úhas_bindingzBrokerState.has_binding|   s   € Ø�x Ð-°·±Ð>Ð>r.   c                ó’   — t        |||«      }| j                  j                  ||«       | j                  |   j	                  |«       y r&   )r   r@   Ú
setdefaultrB   Úadd)r*   r   r   r    r"   Úkeys         r,   Úbinding_declarezBrokerState.binding_declare   s=   € Ü˜E 8¨[Ó9ˆØ�‰× Ñ   iÔ0Ø×Ñ˜Ñ×#Ñ# CÕ(r.   c                ó”   — t        |||«      }	 | j                  |= | j                  |   j                  |«       y # t        $ r Y y w xY wr&   )r   r@   rB   ÚremoveÚKeyError)r*   r   r   r    rL   s        r,   Úbinding_deletezBrokerState.binding_delete„   sP   € Ü˜E 8¨[Ó9ˆð	0Ø—‘˜cÐ"ð ×Ñ˜UÑ#×*Ñ*¨3Õ/øô ò 	Ùð	ús   �; »	AÁAc                ó¸   — 	 | j                   j                  |«      }|D �cg c]  }| j                  j                  |d «      ‘Œ  c} y c c}w # t        $ r Y y w xY wr&   )rB   Úpopr@   rP   )r*   r   r@   Úbindings       r,   Úqueue_bindings_deletez!BrokerState.queue_bindings_delete�   s[   € ð	GØ×'Ñ'×+Ñ+¨EÓ2ˆHñ >FÓF¹X°'ˆT�]‰]×Ñ˜w¨Õ-¸XÓFùÒFøô ò 	Ùð	ús   ‚A ¡#AÁ	AÁAc                ó4   ‡ — ˆ fd„‰ j                   |   D «       S )Nc              3  óz   •K  — | ]2  }t        |j                  |j                  ‰j                  |   «      –— Œ4 y ­wr&   )r!   r   r    r@   )Ú.0rL   r*   s     €r,   Ú	<genexpr>z-BrokerState.queue_bindings.<locals>.<genexpr>–   s3   øè ø€ ð 
á.�ô ˜CŸL™L¨#¯/©/¸4¿=¹=ÈÑ;M×NÙ.ùs   ƒ8;)rB   ©r*   r   s   ` r,   Úqueue_bindingszBrokerState.queue_bindings•   s    ø€ ó
à×'Ñ'¨Ò.ó
ð 	
r.   r&   )r2   r3   r4   r5   r?   r@   rB   rC   rE   rH   rM   rQ   rU   r[   r6   r.   r,   r=   r=   U   s>   „ Ù<ð €Ið €Hð €Kó,ò
!ò
?ò)ò
0òGó
r.   r=   c                  óh   — e 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„ Zdd„Zd„ Zdd„Zd„ Zy)ÚQoSzêQuality of Service guarantees.

    Only supports `prefetch_count` at this point.

    Arguments:
    ---------
        channel (ChannelT): Connection channel.
        prefetch_count (int): Initial prefetch count (defaults to 0).
    r   NTc                ó,  — || _         |xs d| _        t        «       | _        d| j                  _        t        «       | _        | j                  j                  | _        | j                  j                  | _
        t        | | j                  d¬«      | _        y )Nr   Fr   )Úexitpriority)ÚchannelÚprefetch_countr   Ú
_deliveredÚrestoredrA   Ú_dirtyrK   Ú
_quick_ackÚ__setitem__Ú_quick_appendr	   Úrestore_unacked_onceÚ_on_collect)r*   r`   ra   s      r,   rC   zQoS.__init__·   sq   € ØˆŒØ,Ò1°ˆÔô &›-ˆŒØ#(ˆ�‰Ô Ü“eˆŒØŸ+™+Ÿ/™/ˆŒØ!Ÿ_™_×8Ñ8ˆÔÜ#Ø�$×+Ñ+¸!ô
ˆÕr.   c                ó€   — | j                   }| xs. t        | j                  «      t        | j                  «      z
  |k  S )z�Return true if the channel can be consumed from.

        Used to ensure the client adhers to currently active
        prefetch limits.
        )ra   Úlenrb   rd   ©r*   Úpcounts     r,   Úcan_consumezQoS.can_consumeÆ   s8   € ð ×$Ñ$ˆØˆzÒMœS §¡Ó1´C¸¿¹Ó4DÑDÀvÑMÐMr.   c                ó�   — | j                   }|r8t        |t        | j                  «      t        | j                  «      z
  z
  d«      S y)a’  Return the maximum number of messages allowed to be returned.

        Returns an estimated number of messages that a consumer may be allowed
        to consume at once from the broker.  This is used for services where
        bulk 'get message' calls are preferred to many individual 'get message'
        calls - like SQS.

        Returns
        -------
            int: greater than zero.
        r   N)ra   Úmaxrk   rb   rd   rl   s     r,   Úcan_consume_max_estimatezQoS.can_consume_max_estimateÏ   s@   € ð ×$Ñ$ˆÙÜ�v¤ T§_¡_Ó!5¼¸D¿K¹KÓ8HÑ!HÑIÈ1ÓMÐMð r.   c                ó`   — | j                   r| j                  «        | j                  ||«       y)z&Append message to transactional state.N)rd   Ú_flushrg   )r*   ÚmessageÚdelivery_tags      r,   Úappendz
QoS.appendß   s"   € à�;Š;Ø�K‰KŒMØ×Ñ˜<¨Õ1r.   c                ó    — | j                   |   S r&   )rb   ©r*   ru   s     r,   ÚgetzQoS.getå   s   € Ø�‰˜|Ñ,Ð,r.   c                óš   — | j                   }| j                  }	 	 |j                  «       }|j                  |d«       Œ$# t        $ r Y yw xY w)z'Flush dirty (acked/rejected) tags from.N)rd   rb   rS   rP   )r*   ÚdirtyÚ	deliveredÚ	dirty_tags       r,   rs   z
QoS._flushè   sP   € à—‘ˆØ—O‘Oˆ	ØðØ!ŸI™I›K�	ð �M‰M˜) TÔ*ð øô ò Ùðús   ›> ¾	A
Á	A
c                ó&   — | j                  |«       y)z8Acknowledge message and remove from transactional state.N)re   rx   s     r,   ÚackzQoS.ackó   s   € à�‰˜Õ%r.   c                óz   — |r(| j                   j                  | j                  |   «       | j                  |«       y)z4Remove from transactional state and requeue message.N)r`   Ú_restore_at_beginningrb   re   ©r*   ru   Úrequeues      r,   Úrejectz
QoS.reject÷   s,   € áØ�L‰L×.Ñ.¨t¯©¸|Ñ/LÔMØ�‰˜Õ%r.   c                óH  — | j                  «        | j                  }g }| j                  j                  }|j                  }|r	  |«       \  }}	  ||«       |rŒ|j                  «        |S # t
        $ r Y Œw xY w# t        $ r}|j                  ||f«       Y d}~ŒEd}~ww xY w)z$Restore all unacknowledged messages.N)	rs   rb   r`   Ú_restoreÚpopitemrP   ÚBaseExceptionrv   rE   )r*   r|   ÚerrorsÚrestoreÚpop_messageÚ_rt   Úexcs           r,   Úrestore_unackedzQoS.restore_unackedý   s¡   € à�‰ŒØ—O‘Oˆ	ØˆØ—,‘,×'Ñ'ˆØ×'Ñ'ˆáðÙ(›]‘
��7ð.Ù˜Ô ò ð 	�‰ÔØˆøô ò Ùðûô
 !ò .Ø—‘˜s G˜n×-Ñ-ûð.ús*   Á
A, ÁA; Á,	A8Á7A8Á;	B!ÂBÂB!c                óN  — | j                   j                  «        | j                  «        |€t        j                  n|}| j
                  }| j                  r| j                  j                  syt        |dd«      r|rJ ‚y	 |r�t        t        j                  t        | j
                  «      «      |¬«       | j                  «       }|rKt        t!        |Ž «      \  }}t        t"        j                  t        |«      |«      |¬«       t%        ||¬«       d|_        y# d|_        w xY w)zÅRestore all unacknowledged messages at shutdown/gc collect.

        Note:
        ----
            Can only be called once for each instance, subsequent
            calls will be ignored.
        Nrc   )Úfile)ÚstderrT)ri   Úcancelrs   Úsysr‘   rb   Úrestore_at_shutdownr`   Ú
do_restoreÚgetattrÚprintÚRESTORING_FMTÚformatrk   rŽ   ÚlistÚzipÚRESTORE_PANIC_FMTr   rc   )r*   r‘   ÚstateÚ
unrestoredr‰   Úmessagess         r,   rh   zQoS.restore_unacked_once  sì   € ð 	×Ñ×ÑÔ!Ø�‰ŒØ%˜~”—’°6ˆØ—‘ˆà×'Ò'¨t¯|©|×/FÒ/FØÜ�5˜* dÔ+ÙÐ�9Øð	"ÙÜ”m×*Ñ*¬3¨t¯©Ó+?Ó@Ø!õ#à!×1Ñ1Ó3�
áÜ'+¬C°Ð,<Ó'=Ñ$�F˜HÜÔ+×2Ñ2´3°v³;ÀÓGØ%õ'ä(¨¸&ÕAà!ˆE�Nø˜TˆE�Nús   ÂBD Ä	D$c                 ó   — y)a  Restore any pending unacknowledged messages.

        To be filled in for visibility_timeout style implementations.

        Note:
        ----
            This is implementation optional, and currently only
            used by the Redis transport.
        Nr6   )r*   ÚargsÚkwargss      r,   Úrestore_visiblezQoS.restore_visible2  ó   � r.   )r   ©Fr&   )r2   r3   r4   r5   ra   rb   rd   r”   rC   rn   rq   rv   ry   rs   r   r„   rŽ   rh   r£   r6   r.   r,   r]   r]   œ   s^   „ ñð €Nð €Jð €Fð Ðó
òNòNò 2ò-ò	+ò&ó&òó*"ó@	r.   r]   c                  ó*   ‡ — e Zd ZdZdˆ fd„	Zd„ Zˆ xZS )ÚMessagezMessage object.c                ó6  •— || _         |d   }|j                  d«      }|r!|j                  ||j                  d«      «      }t        ‰| �  d|||d   |j                  d«      |j                  d«      |j                  d«      ||j                  d«      d	d
œ	|¤Ž y )NÚ
propertiesÚbodyÚbody_encodingru   úcontent-typeúcontent-encodingÚheadersÚdelivery_infoúutf-8)	rª   r`   ru   Úcontent_typeÚcontent_encodingr®   r©   r¯   Ú
postencoder6   )Ú_rawry   Údecode_bodyÚsuperrC   )r*   Úpayloadr`   r¢   r©   rª   Ú	__class__s         €r,   rC   zMessage.__init__A  s¡   ø€ ØˆŒ	Ø˜\Ñ*ˆ
Ø�{‰{˜6Ó"ˆÙØ×&Ñ& t¨Z¯^©^¸OÓ-LÓMˆDÜ‰Ñð 
	ØØØ# NÑ3Ø Ÿ™ ^Ó4Ø$Ÿ[™[Ð);Ó<Ø—K‘K 	Ó*Ø!Ø$Ÿ.™.¨Ó9Øñ
	ð ó
	r.   c                ó  — | j                   }| j                  j                  | j                  |j	                  d«      «      \  }}t        | j                  «      }|j                  dd «       ||| j                  | j                  |dœS )Nr«   Úcompression)rª   r©   r¬   r­   r®   )
r©   r`   Úencode_bodyrª   ry   Údictr®   rS   r±   r²   )r*   Úpropsrª   rŒ   r®   s        r,   ÚserializablezMessage.serializableS  sw   € Ø—‘ˆØ—,‘,×*Ñ*¨4¯9©9Ø+0¯9©9°_Ó+EóG‰ˆˆaä�t—|‘|Ó$ˆà�‰�M 4Ô(àØØ ×-Ñ-Ø $× 5Ñ 5Øñ
ð 	
r.   r&   )r2   r3   r4   r5   rC   r¾   Ú__classcell__©r¸   s   @r,   r§   r§   >  s   ø„ Ùõö$
r.   r§   c                  óJ   — e Zd ZdZdd„Zd„ Zd„ Zd„ Zd„ Zd„ Z	d	„ Z
dd
„Zd„ Zy)ÚAbstractChannelzþAbstract channel interface.

    This is an abstract class defining the channel methods
    you'd usually want to implement in a virtual channel.

    Note:
    ----
        Do not subclass directly, but rather inherit
        from :class:`Channel`.
    Nc                ó   — t        d«      ‚)zGet next message from `queue`.z$Virtual channels must implement _get©ÚNotImplementedError)r*   r   Útimeouts      r,   Ú_getzAbstractChannel._geto  ó   € ä!Ð"HÓIÐIr.   c                ó   — t        d«      ‚)zPut `message` onto `queue`.z$Virtual channels must implement _putrÄ   )r*   r   rt   s      r,   Ú_putzAbstractChannel._puts  rÈ   r.   c                ó   — t        d«      ‚)z!Remove all messages from `queue`.z&Virtual channels must implement _purgerÄ   rZ   s     r,   Ú_purgezAbstractChannel._purgew  s   € ä!Ð"JÓKÐKr.   c                 ó   — y)z<Return the number of messages in `queue` as an :class:`int`.r   r6   rZ   s     r,   Ú_sizezAbstractChannel._size{  s   € àr.   c                ó&   — | j                  |«       y)z�Delete `queue`.

        Note:
        ----
            This just purges the queue, if you need to do more you can
            override this method.
        N©rÌ   )r*   r   r¡   r¢   s       r,   Ú_deletezAbstractChannel._delete  s   € ð 	�‰�EÕr.   c                 ó   — y)z´Create new queue.

        Note:
        ----
            Your transport can override this method if it needs
            to do something whenever a new queue is declared.
        Nr6   ©r*   r   r¢   s      r,   Ú
_new_queuezAbstractChannel._new_queue‰  r¤   r.   c                 ó   — y)z²Verify that queue exists.

        Returns
        -------
            bool: Should return :const:`True` if the queue exists
                or :const:`False` otherwise.
        Tr6   rÓ   s      r,   Ú
_has_queuezAbstractChannel._has_queue’  s   € ð r.   c                ó$   — |j                  |«      S )z-Poll a list of queues for available messages.)ry   )r*   ÚcycleÚcallbackrÆ   s       r,   Ú_pollzAbstractChannel._pollœ  s   € à�y‰y˜Ó"Ð"r.   c                ó8   — | j                  |«      } |||«       y r&   )rÇ   )r*   r   rÙ   rt   s       r,   Ú_get_and_deliverz AbstractChannel._get_and_deliver   s   € Ø—)‘)˜EÓ"ˆÙ�˜%Õ r.   r&   )r2   r3   r4   r5   rÇ   rÊ   rÌ   rÎ   rÑ   rÔ   rÖ   rÚ   rÜ   r6   r.   r,   rÂ   rÂ   c  s7   „ ñ	óJòJòLòòòòó#ó!r.   rÂ   c                  óä  — e Zd ZdZeZeZdZ ee«      Z	dZ
d e«       iZdZ ed«      ZdZdZdZdZd	Zd
„ Z	 	 	 d5d„Zd6d„Zd7d„Zd6d„Zd„ Z	 	 d8d„Z	 	 d8d„Z	 	 d9d„Z	 	 d9d„Zd„ Zd„ Z d„ Z!d„ Z"d„ Z#d„ Z$d„ Z%d:d„Z&d:d„Z'd:d„Z(d:d„Z)	 	 d;d„Z*d „ Z+d!„ Z,d<d"„Z-d=d#„Z.d$„ Z/d%„ Z0d>d&„Z1d'„ Z2	 	 d?d(„Z3d@d)„Z4d*„ Z5d=d+„Z6d=d,„Z7d-„ Z8d.„ Z9	 	 	 	 	 	 	 	 dAd/„Z:e;d0„ «       Z<e;d1„ «       Z=e;d2„ «       Z>d:d3„Z?d4„ Z@y)BÚChannelz‘Virtual channel.

    Arguments:
    ---------
        connection (ConnectionT): The transport instance this
            channel is part of.
    TFr'   r   N)r«   Údeadletter_queuer   é	   c                óÀ  — || _         t        «       | _        d | _        i | _        g | _        d | _        d| _        | j                  j                  «       D ��ci c]  \  }}| || «      “Œ c}}| _        | j                  «       | _        | j                   j                  j                  }| j                  D ]  }	 t        | |||   «       Œ y c c}}w # t         $ r Y Œ(w xY w©NF)Ú
connectionrA   Ú
_consumersÚ_cycleÚ_tag_to_queueÚ_active_queuesÚ_qosÚclosedÚexchange_typesÚitemsÚ_get_free_channel_idÚ
channel_idÚclientÚtransport_optionsÚfrom_transport_optionsÚsetattrrP   )r*   rã   r¢   ÚtypÚclsÚtoptsÚopt_names          r,   rC   zChannel.__init__Ô  sÖ   € Ø$ˆŒÜ›%ˆŒØˆŒØˆÔØ ˆÔØˆŒ	ØˆŒð ,0×+>Ñ+>×+DÑ+DÔ+Fô
Ù+F™x˜s CˆC‘�T“‰NÐ+Fò
ˆÔð ×3Ñ3Ó5ˆŒà—‘×&Ñ&×8Ñ8ˆØ×3Ô3ˆHðÜ˜˜h¨¨h©Õ8ñ 4ùó
øô ò Ùðús   ÁCÂ8CÃ	CÃCc                ó<  — |xs d}|xs d|z  }|rY|| j                   j                  vr@t        dj                  || j                  j
                  j                  xs d«      ddd«      ‚y	 | j                   j                  |   }| j                  |«      j                  ||||||«      sAt        t        j                  || j                  j
                  j                  xs d«      «      ‚y# t        $ r& ||||xs i g d	œ| j                   j                  |<   Y yw xY w)
zDeclare exchange.Údirectzamq.%sz*NOT_FOUND - no exchange {!r} in vhost {!r}Ú/©é2   é
   zChannel.exchange_declareÚ404N)ÚtypeÚdurableÚauto_deleter"   Útable)r�   r?   r   r™   rã   rî   Úvirtual_hostÚtypeofÚ
equivalentr8   ÚNOT_EQUIVALENT_FMTrP   )	r*   r   rý   rþ   rÿ   r"   ÚnowaitÚpassiveÚprevs	            r,   Úexchange_declarezChannel.exchange_declareë  s+  € ð Ò�xˆØÒ.˜x¨$™ˆÙØ˜tŸz™z×3Ñ3Ñ3Ü"Ø@×GÑGØ  $§/¡/×"8Ñ"8×"EÑ"EÒ"LÈóNàÐ8¸%óð ð
 ð	Ø—:‘:×'Ñ'¨Ñ1ˆDØ—;‘;˜xÓ(×3Ñ3°D¸(ÀDØ4;¸[Ø4=ô?ô )Ô);×)BÑ)BØ˜dŸo™o×4Ñ4×AÑAÒHÀSó*Jó Kð Kð?øô
 ò 	àØ"Ø*Ø&š_¨"Øñ.ˆD�J‰J× Ñ  Ó*ð	ús   Á,A?C, Ã,,DÄDc                ó¬   — | j                  |«      D ]  \  }}}| j                  |dd¬«       Œ | j                  j                  j	                  |d«       y)z'Delete `exchange` and all its bindings.T)Ú	if_unusedÚif_emptyN)Ú	get_tableÚqueue_deleter�   r?   rS   )r*   r   r
  r  ÚrkeyrŒ   r   s          r,   Úexchange_deletezChannel.exchange_delete	  sJ   € à"Ÿn™n¨XÖ6‰NˆD�!�UØ×Ñ˜e¨t¸dÐÕCð 7à�
‰
×Ñ× Ñ  ¨4Õ0r.   c                ó,  — |xs dt        «       z  }|rS | j                  |fi |¤Žs@t        dj                  || j                  j
                  j                  xs d«      ddd«      ‚ | j                  |fi |¤Ž t        || j                  |«      d«      S )zDeclare queue.z
amq.gen-%sz'NOT_FOUND - no queue {!r} in vhost {!r}rø   rù   zChannel.queue_declarerü   r   )
r   rÖ   r   r™   rã   rî   r  rÔ   r   rÎ   )r*   r   r  r¢   s       r,   Úqueue_declarezChannel.queue_declare  s“   € àÒ.˜¬«Ñ.ˆÙ˜?˜4Ÿ?™?¨5Ñ;°FÒ;ÜØ9×@Ñ@Ø˜4Ÿ?™?×1Ñ1×>Ñ>ÒEÀ#óGàÐ1°5óð ð ˆD�O‰O˜EÑ, VÒ,Ü! %¨¯©°EÓ):¸AÓ>Ð>r.   c                ó  — |r| j                  |«      ry| j                  j                  |«      D ]@  \  }}}| j                  |«      j	                  ||||«      } | j
                  ||g|¢­i |¤Ž ŒB | j                  j                  |«       y)zDelete queue.N)rÎ   r�   r[   r  Úprepare_bindrÑ   rU   )	r*   r   r
  r  r¢   r   r    r¡   Úmetas	            r,   r  zChannel.queue_delete  s†   € á˜Ÿ
™
 5Ô)ØØ+/¯:©:×+DÑ+DÀUÖ+KÑ'ˆH�k 4Ø—;‘;˜xÓ(×5Ñ5Ø�x ¨dóˆDð ˆD�L‰L˜ Ð:¨4Ò:°6Ó:ð	 ,Lð
 	�
‰
×(Ñ(¨Õ/r.   c                ó&   — | j                  |«       y r&   )r  rZ   s     r,   Úafter_reply_message_receivedz$Channel.after_reply_message_received'  s   € Ø×Ñ˜%Õ r.   c                ó   — t        d«      ‚)Nz(transport does not support exchange_bindrÄ   ©r*   ÚdestinationÚsourcer    r  r"   s         r,   Úexchange_bindzChannel.exchange_bind*  s   € ä!Ð"LÓMÐMr.   c                ó   — t        d«      ‚)Nz*transport does not support exchange_unbindrÄ   r  s         r,   Úexchange_unbindzChannel.exchange_unbind.  s   € ä!Ð"NÓOÐOr.   c                ó‚  — |xs d}| j                   j                  |||«      ry| j                   j                  ||||«       | j                   j                  |   j	                  dg «      }| j                  |«      j                  ||||«      }|j                  |«       | j                  r | j                  |g|¢­Ž  yy)z.Bind `queue` to `exchange` with `routing key`.z
amq.directNr   )
r�   rH   rM   r?   rJ   r  r  rv   Úsupports_fanoutÚ_queue_bind)r*   r   r   r    r"   r¢   r   r  s           r,   Ú
queue_bindzChannel.queue_bind2  s³   € ð Ò+˜|ˆØ�:‰:×!Ñ! %¨°;Ô?Øà�
‰
×"Ñ" 5¨(°KÀÔKà—
‘
×$Ñ$ XÑ.×9Ñ9¸'À2ÓFˆØ�{‰{˜8Ó$×1Ñ1Ø�8˜[¨)ó
ˆð 	�‰�TÔØ×ÒØˆD×Ñ˜XÐ-¨Ô-ð  r.   c                ó  — | j                   j                  |||«       	 | j                  |«      }| j	                  |«      j                  ||||«      }|D �cg c]
  }||k7  sŒ	|‘Œ c}|d d  y # t        $ r Y y w xY wc c}w r&   )r�   rQ   r  rP   r  r  )	r*   r   r   r    r"   r¢   r   Úbinding_metar  s	            r,   Úqueue_unbindzChannel.queue_unbindC  s‹   € ð 	�
‰
×!Ñ! %¨°;Ô?ð	Ø—N‘N 8Ó,ˆEð —{‘{ 8Ó,×9Ñ9Ø�8˜[¨)ó
ˆñ
 &+ÓC¡U˜T¨d°lÓ.B’D UÑCˆ‰a‰øô ò 	Ùð	üò Ds   ŸA- Á
A<Á"A<Á-	A9Á8A9c                óB   ‡ — ˆ fd„‰ j                   j                  D «       S )Nc              3  ó\   •K  — | ]#  }‰j                  |«      D ]  \  }}}|||f–— Œ Œ% y ­wr&   )r  )rX   r   r  Úpatternr   r*   s        €r,   rY   z(Channel.list_bindings.<locals>.<genexpr>S  s>   øè ø€ ð FÙ 4�HØ,0¯N©N¸8Ö,DÑ(�D˜' 5ð ˜ $Ô'à,Dð (Ù 4ùs   ƒ),©r�   r?   rF   s   `r,   Úlist_bindingszChannel.list_bindingsR  s"   ø€ óFØ $§
¡
× 4Ò 4óFð 	Fr.   c                ó$   — | j                  |«      S )z%Remove all ready messages from queue.rÐ   rÓ   s      r,   Úqueue_purgezChannel.queue_purgeW  s   € à�{‰{˜5Ó!Ð!r.   c                ó   — t        «       S r&   r   rF   s    r,   Ú_next_delivery_tagzChannel._next_delivery_tag[  s	   € Ü‹vˆr.   c                óœ   — | j                  |||«       |r$ | j                  |«      j                  |||fi |¤ŽS  | j                  ||fi |¤ŽS )zPublish message.)Ú_inplace_augment_messager  ÚdeliverrÊ   )r*   rt   r   r    r¢   s        r,   Úbasic_publishzChannel.basic_publish^  s^   € à×%Ñ% g¨x¸ÔEÙØ0�4—;‘;˜xÓ(×0Ñ0Ø˜ ;ñØ28ñð ð ˆt�y‰y˜ gÑ8°Ñ8Ð8r.   c                óÆ   — | j                  |d   | j                  «      \  |d<   }|d   }|j                  || j                  «       ¬«       |d   j                  ||¬«       y )Nrª   r©   )r«   ru   r¯   ©r   r    )r»   r«   Úupdater-  )r*   rt   r   r    r«   r½   s         r,   r/  z Channel._inplace_augment_messageh  sv   € Ø)-×)9Ñ)9Ø�F‰O˜T×/Ñ/ó*
Ñ&ˆ�‰˜ð ˜Ñ%ˆØ�‰Ø'Ø×0Ñ0Ó2ð 	ô 	
ð 	ˆoÑ×%Ñ%ØØ#ð 	&õ 	
r.   c                óô   ‡ ‡‡— |‰ j                   |<   ‰ j                  j                  |«       ˆˆˆ fd„}|‰ j                  j                  |<   ‰ j
                  j                  |«       ‰ j                  «        y)zConsume from `queue`.c                óŠ   •— ‰j                  | ‰¬«      }‰s&‰j                  j                  ||j                  «        ‰|«      S )N©r`   )r§   Úqosrv   ru   )Úraw_messagert   rÙ   Úno_ackr*   s     €€€r,   Ú	_callbackz(Channel.basic_consume.<locals>._callback{  s;   ø€ Ø—l‘l ;¸�lÓ=ˆGÙØ—‘—‘ ¨×)=Ñ)=Ô>Ù˜GÓ$Ð$r.   N)ræ   rç   rv   rã   Ú
_callbacksrä   rK   Ú_reset_cycle)r*   r   r:  rÙ   Úconsumer_tagr¢   r;  s   ` ``   r,   Úbasic_consumezChannel.basic_consumev  s`   ú€ à+0ˆ×Ñ˜<Ñ(Ø×Ñ×"Ñ" 5Ô)ö	%ð -6ˆ�‰×"Ñ" 5Ñ)Ø�‰×Ñ˜LÔ)à×ÑÕr.   c                óR  — || j                   v rŠ| j                   j                  |«       | j                  «        | j                  j	                  |d«      }	 | j
                  j                  |«       | j                  j                  j	                  |d«       yy# t        $ r Y Œ3w xY w)z Cancel consumer by consumer tag.N)	rä   rO   r=  ræ   rS   rç   Ú
ValueErrorrã   r<  )r*   r>  r   s      r,   Úbasic_cancelzChannel.basic_cancel†  s’   € à˜4Ÿ?™?Ñ*Ø�O‰O×"Ñ" <Ô0Ø×ÑÔØ×&Ñ&×*Ñ*¨<¸Ó>ˆEðØ×#Ñ#×*Ñ*¨5Ô1ð �O‰O×&Ñ&×*Ñ*¨5°$Õ7ð +øô ò Ùðús   ÁB Â	B&Â%B&c                óº   — 	 | j                  | j                  |«      | ¬«      }|s&| j                  j                  ||j                  «       |S # t
        $ r Y yw xY w)z+Get message by direct access (synchronous).r7  N)r§   rÇ   r8  rv   ru   r
   )r*   r   r:  r¢   rt   s        r,   Ú	basic_getzChannel.basic_get’  sT   € ð	Ø—l‘l 4§9¡9¨UÓ#3¸T�lÓBˆGÙØ—‘—‘ ¨×)=Ñ)=Ô>ØˆNøÜò 	Ùð	ús   ‚AA Á	AÁAc                ó:   — | j                   j                  |«       y)zAcknowledge message.N)r8  r   )r*   ru   Úmultiples      r,   Ú	basic_ackzChannel.basic_ackœ  s   € à�‰�‰�\Õ"r.   c                óP   — |r| j                   j                  «       S t        d«      ‚)zRecover unacked messages.z'Does not support recover(requeue=False))r8  rŽ   rÅ   )r*   rƒ   s     r,   Úbasic_recoverzChannel.basic_recover   s$   € áØ—8‘8×+Ñ+Ó-Ð-Ü!Ð"KÓLÐLr.   c                ó>   — | j                   j                  ||¬«       y)zReject message.©rƒ   N)r8  r„   r‚   s      r,   Úbasic_rejectzChannel.basic_reject¦  s   € à�‰�‰˜¨gˆÕ6r.   c                ó&   — || j                   _        y)zzChange QoS settings for this channel.

        Note:
        ----
            Only `prefetch_count` is supported.
        N)r8  ra   )r*   Úprefetch_sizera   Úapply_globals       r,   Ú	basic_qoszChannel.basic_qosª  s   € ð #1ˆ�‰Õr.   c                ó@   — t        | j                  j                  «      S r&   )rš   r�   r?   rF   s    r,   Úget_exchangeszChannel.get_exchanges´  s   € Ü�D—J‘J×(Ñ(Ó)Ð)r.   c                ó:   — | j                   j                  |   d   S )z%Get table of bindings for `exchange`.r   r(  )r*   r   s     r,   r  zChannel.get_table·  s   € à�z‰z×#Ñ# HÑ-¨gÑ6Ð6r.   c                ó|   — 	 | j                   j                  |   d   }| j                  |   S # t        $ r |}Y Œw xY w)z.Get the exchange type instance for `exchange`.rý   )r�   r?   rP   rê   )r*   r   Údefaultrý   s       r,   r  zChannel.typeof»  sI   € ð	Ø—:‘:×'Ñ'¨Ñ1°&Ñ9ˆDð ×"Ñ" 4Ñ(Ð(øô ò 	ØŠDð	ús   ‚- ­;º;c                óR  — |€| j                   }|s|xs |gS 	 | j                  |«      j                  | j                  |«      |||«      }|sI|�Gt        j                  t        t        j                  ||¬«      «      «       | j                  |«       |g}|S # t        $ r g }Y ŒZw xY w)záFind all queues matching `routing_key` for the given `exchange`.

        Returns
        -------
            list[str]: queue names -- must return `[default]`
                if default is set and no queues matched.
        r3  )rß   r  Úlookupr  rP   ÚwarningsÚwarnr;   ÚUNDELIVERABLE_FMTr™   rÔ   )r*   r   r    rU  ÚRs        r,   Ú_lookupzChannel._lookupÃ  s½   € ð ˆ?Ø×+Ñ+ˆGÙØÒ* 7Ð+Ð+ð	Ø—‘˜HÓ%×,Ñ,Ø—‘˜xÓ(Ø˜+ wóˆAñ �WÐ(Ü�M‰MÔ.Ô/@×/GÑ/GØ!¨{ð 0Hó 0<ó =ô ð �O‰O˜GÔ$Ø�	ˆAØˆøô ò 	ØŠAð	ús   ™2B ÂB&Â%B&c                ó¤   — |j                   }|j                  «       }d|d<   | j                  |d   |d   «      D ]  }| j                  ||«       Œ y)z.Redeliver message to its original destination.TÚredeliveredr   r    N)r¯   r¾   r\  rÊ   )r*   rt   r¯   r   s       r,   r†   zChannel._restoreà  sX   € à×-Ñ-ˆØ×&Ñ&Ó(ˆØ!%ˆ�ÑØ—\‘\Ø˜*Ñ%Ø˜mÑ,ö.ˆEð �I‰I�e˜WÕ%ñ.r.   c                ó$   — | j                  |«      S r&   )r†   )r*   rt   s     r,   r�   zChannel._restore_at_beginningê  s   € Ø�}‰}˜WÓ%Ð%r.   c                ó$  — |xs | j                   j                  }| j                  ra| j                  j	                  «       rGt        | d«      r| j                  | j                  |¬«      S | j                  | j                  ||¬«      S t        «       ‚)NÚ	_get_many©rÆ   )rã   Ú_deliverrä   r8  rn   Úhasattrra  rç   rÚ   rØ   r
   )r*   rÆ   rÙ   s      r,   Údrain_eventszChannel.drain_eventsí  so   € ØÒ7˜tŸ™×7Ñ7ˆØ�?Š?˜tŸx™x×3Ñ3Ô5Ü�t˜[Ô)Ø—~‘~ d×&9Ñ&9À7�~ÓKÐKØ—:‘:˜dŸj™j¨(¸G�:ÓDÐDÜ‹gˆr.   c                óX   — t        || j                  «      s| j                  || ¬«      S |S )z1Convert raw message to :class:`Message` instance.)r·   r`   )Ú
isinstancer§   )r*   r9  s     r,   Úmessage_to_pythonzChannel.message_to_pythonõ  s)   € ä˜+ t§|¡|Ô4Ø—<‘<¨¸T�<ÓBÐBØÐr.   c                ó’   — |xs i }|j                  di «       |j                  d|xs | j                  «       ||||xs i |xs i dœS )zPrepare message data.r¯   Úpriority)rª   r­   r¬   r®   r©   )rJ   Údefault_priority)r*   rª   rj  r±   r²   r®   r©   s          r,   Úprepare_messagezChannel.prepare_messageû  s[   € ð  Ò% 2ˆ
Ø×Ñ˜o¨rÔ2Ø×Ñ˜j¨(Ò*K°d×6KÑ6KÔLàØ$4Ø ,Ø"š= bØ(Ò.¨Bñ	0ð 	0r.   c                ó   — t        d«      ‚)z´Enable/disable message flow.

        Raises
        ------
            NotImplementedError: as flow
                is not implemented by the base virtual implementation.
        z%virtual channels do not support flow.rÄ   )r*   Úactives     r,   ÚflowzChannel.flow  s   € ô "Ð"IÓJÐJr.   c                ó‚  — | j                   s¬d| _         t        | j                  «      D ]  }| j                  |«       Œ | j                  r| j                  j                  «        | j                  �!| j                  j                  «        d| _        | j                  �| j                  j                  | «       d| _
        y)zTClose channel.

        Cancel all consumers, and requeue unacked messages.
        TN)ré   rš   rä   rB  rè   rh   rå   Úcloserã   Úclose_channelrê   )r*   Úconsumers     r,   rq  zChannel.close  s�   € ð
 �{Š{ØˆDŒKÜ  §¡Ö1�Ø×!Ñ! (Õ+ð 2à�yŠyØ—	‘	×.Ñ.Ô0Ø�{‰{Ð&Ø—‘×!Ñ!Ô#Ø"�”Ø�‰Ð*Ø—‘×-Ñ-¨dÔ3Ø"ˆÕr.   c                óŒ   — |r?|j                  «       dk7  r,| j                  j                  |«      j                  |«      |fS ||fS ©Nr°   )ÚlowerÚcodecsry   r-   ©r*   rª   Úencodings      r,   r»   zChannel.encode_body$  s@   € Ù˜Ÿ™Ó(¨GÒ3Ø—;‘;—?‘? 8Ó,×3Ñ3°DÓ9¸8ÐCÐCØ�Xˆ~Ðr.   c                ó„   — |r=|j                  «       dk7  r*| j                  j                  |«      j                  |«      S |S ru  )rv  rw  ry   r1   rx  s      r,   rµ   zChannel.decode_body)  s6   € Ù˜Ÿ™Ó(¨GÒ3Ø—;‘;—?‘? 8Ó,×3Ñ3°DÓ9Ð9Øˆr.   c                óX   — t        | j                  | j                  t        «      | _        y r&   )r   rÜ   rç   r
   rå   rF   s    r,   r=  zChannel._reset_cycle.  s!   € ÜØ×!Ñ! 4×#6Ñ#6¼ó?ˆ�r.   c                ó   — | S r&   r6   rF   s    r,   Ú	__enter__zChannel.__enter__2  s   € Øˆr.   c                ó$   — | j                  «        y r&   )rq  )r*   Úexc_typeÚexc_valÚexc_tbs       r,   Ú__exit__zChannel.__exit__5  s   € ð 	�
‰
�r.   c                ó.   — | j                   j                  S )z/Broker state containing exchanges and bindings.)rã   r�   rF   s    r,   r�   zChannel.state=  s   € ð �‰×$Ñ$Ð$r.   c                ó^   — | j                   €| j                  | «      | _         | j                   S )z&:class:`QoS` manager for this channel.)rè   r]   rF   s    r,   r8  zChannel.qosB  s'   € ð �9‰9ÐØŸ™ ›ˆDŒIØ�y‰yÐr.   c                óR   — | j                   €| j                  «        | j                   S r&   )rå   r=  rF   s    r,   rØ   zChannel.cycleI  s"   € à�;‰;ÐØ×ÑÔØ�{‰{Ðr.   c                óè   — 	 t        t        t        |d   d   «      | j                  «      | j                  «      }|r| j                  |z
  S |S # t
        t        t        f$ r | j                  }Y Œ5w xY w)z©Get priority from message.

        The value is limited to within a boundary of 0 to 9.

        Note:
        ----
            Higher value has more priority.
        r©   rj  )	rp   ÚminÚintÚmax_priorityÚmin_priorityÚ	TypeErrorrA  rP   rk  )r*   rt   Úreverserj  s       r,   Ú_get_message_priorityzChannel._get_message_priorityO  sy   € ð	-ÜÜ”C˜ Ñ-¨jÑ9Ó:Ø×%Ñ%ó'à×!Ñ!óˆHñ 29�×!Ñ! HÑ,ÐF¸hÐFøô œ:¤xÐ0ò 	-Ø×,Ñ,ŠHð	-ús   ‚9A Á A1Á0A1c                ó„  — t        | j                  j                  «      }t        d| j                  j                  dz   «      D ]/  }||vsŒ| j                  j                  j                  |«       |c S  t        dj                  t        | j                  j                  «      | j                  j                  «      d«      ‚)Nr   z/No free channel ids, current={}, channel_max={})é   rû   )
rA   rã   Ú_used_channel_idsÚrangeÚchannel_maxrv   r   r™   rk   Úchannels)r*   Úused_channel_idsrí   s      r,   rì   zChannel._get_free_channel_idc  s    € ô ˜tŸ™×@Ñ@ÓAÐä  4§?¡?×#>Ñ#>ÀÑ#BÖCˆJØÐ!1Ò1Ø—‘×1Ñ1×8Ñ8¸ÔDØ!Ò!ð Dô
 Ø=×DÑDÜ�D—O‘O×,Ñ,Ó-Ø—‘×+Ñ+ó-à.6ó
ð 	
r.   )Nr÷   FFNFF)FFrâ   )Ú r•  FN)Nr•  Nr¥   )r   r   F)r÷   r&   )NN)NNNNN)T)r  ztype[BaseException] | Noner€  zBaseException | Noner�  zTracebackType | NoneÚreturnÚNone)Ar2   r3   r4   r5   r§   r]   r•   r¼   r   rê   r  r$   rw  r«   r   Ú_delivery_tagsrß   rð   rk  rŠ  r‰  rC   r  r  r  r  r  r  r  r!  r$  r)  r+  r-  r1  r/  r?  rB  rD  rG  rI  rL  rP  rR  r  r  r\  r†   r�   re  rh  rl  ro  rq  r»   rµ   r=  r}  r‚  Úpropertyr�   r8  rØ   r�  rì   r6   r.   r,   rÞ   rÞ   ¥  sè  „ ñð €Gð €Cð €Jñ Ð1Ó2€Nð €Oð ™›Ð!€Fð €Mñ ˜1“X€Nð Ðð CÐð ÐØ€LØ€Lòð. FKØ6:Ø/4óó<1ó?ó	0ò!ð ACØ.2óNð CEØ04óPð <>Ø!ó.ð" >@Ø#óDòFò
"òò9ò
òò 
8óó#óMó7ð 9:Ø$ó1ò*ò7ó)óò:&ò&óòð AEØHLó0óKò#ó$ó
ò
?òðà,ðð &ðð %ð	ð
 
óð ñ%ó ð%ð ñó ðð ñó ðó
Gó(
r.   rÞ   c                  ó.   ‡ — e Zd ZdZˆ fd„Zd„ Zd„ Zˆ xZS )Ú
Managementz'Base class for the AMQP management API.c                ób   •— t         ‰| �  |«       |j                  j                  «       | _        y r&   )r¶   rC   rî   r`   )r*   Ú	transportr¸   s     €r,   rC   zManagement.__init__w  s&   ø€ Ü‰Ñ˜Ô#Ø ×'Ñ'×/Ñ/Ó1ˆ�r.   c           	     óx   — | j                   j                  «       D ���cg c]  \  }}}|||dœ‘Œ c}}}S c c}}}w )N)r  r  r    )r`   r)  )r*   ÚqÚeÚrs       r,   Úget_bindingszManagement.get_bindings{  sA   € à#Ÿ|™|×9Ñ9Ô;õ=Ù;‘G�A�q˜!ð !"¨Q¸qÓAØ;ó=ð 	=ùô =s   Ÿ5c                ó8   — | j                   j                  «        y r&   )r`   rq  rF   s    r,   rq  zManagement.close  s   € Ø�‰×ÑÕr.   )r2   r3   r4   r5   rC   r¢  rq  r¿   rÀ   s   @r,   r›  r›  t  s   ø„ Ù1ô2ò=ör.   r›  c                  óä   — e Zd ZdZeZeZeZdZdZ	dZ
dZdZdZej                  j                   j#                  d eddg«      d¬«      Zd	„ Zd
„ Zd„ Zd„ Zd„ Zdd„Zd„ Zd„ Zd„ Zdd„Zed„ «       Zy)Ú	Transportz|Virtual transport.

    Arguments:
    ---------
        client (kombu.Connection): The client this is a transport for.
    Ng      ð?iÿÿ  Fr÷   Útopic)ÚasynchronousÚexchange_typeÚ
heartbeatsc                ó*  — || _         t        «       | _        g | _        g | _        i | _        | j                  | j                  | j                  t        «      | _	        |j                  j                  d«      }|�|| _        t        t        «      | _        y )NÚpolling_interval)rî   r=   r�   r“  Ú_avail_channelsr<  ÚCycleÚ_drain_channelr
   rØ   rï   ry   r«  r   ÚARRAY_TYPE_Hr�  )r*   rî   r¢   r«  s       r,   rC   zTransport.__init__¨  sy   € ØˆŒä “]ˆŒ
ØˆŒØ!ˆÔØˆŒØ—Z‘Z × 3Ñ 3°T·]±]ÄEÓJˆŒ
Ø!×3Ñ3×7Ñ7Ð8JÓKÐØÐ'Ø$4ˆDÔ!Ü!&¤|Ó!4ˆÕr.   c                ó²   — 	 | j                   j                  «       S # t        $ r1 | j                  |«      }| j                  j                  |«       |cY S w xY wr&   )r¬  rS   Ú
IndexErrorrÞ   r“  rv   )r*   rã   r`   s      r,   Úcreate_channelzTransport.create_channelµ  sP   € ð	Ø×'Ñ'×+Ñ+Ó-Ð-øÜò 	Ø—l‘l :Ó.ˆGØ�M‰M× Ñ  Ô)ØŠNð	ús   ‚ œ7AÁAc                óì   — 	 	 | j                   j                  |j                  «       	 | j                  j                  |«       d |_        y # t        $ r Y Œ/w xY w# t        $ r Y Œ"w xY w# d |_        w xY wr&   )r�  rO   rí   rA  r“  rã   )r*   r`   s     r,   rr  zTransport.close_channel½  sy   € ð	&ðØ×&Ñ&×-Ñ-¨g×.@Ñ.@ÔAðØ—‘×$Ñ$ WÔ-ð "&ˆGÕøô ò áðûô
 ò Ùðûð "&ˆGÕús@   ƒ%A ©A Á	AÁA* ÁAÁA* Á	A'Á$A* Á&A'Á'A* Á*	A3c                óZ   — | j                   j                  | j                  | «      «       | S r&   )r¬  rv   r²  rF   s    r,   Úestablish_connectionzTransport.establish_connectionË  s(   € ð 	×Ñ×#Ñ# D×$7Ñ$7¸Ó$=Ô>Øˆr.   c                óÞ   — | j                   j                  «        | j                  | j                  fD ])  }|sŒ	 |j	                  «       }|j                  «        |rŒ$Œ+ y # t
        $ r Y Œw xY wr&   )rØ   rq  r¬  r“  rS   ÚLookupError)r*   rã   Ú	chan_listr`   s       r,   Úclose_connectionzTransport.close_connectionÒ  sb   € Ø�
‰
×ÑÔØ×-Ñ-¨t¯}©}Ó<ˆIÚð$Ø'Ÿm™m›o�Gð —M‘M”Oó ñ =øô #ò Ùðús   ºA Á 	A,Á+A,c                ó$  — t        «       }| j                  j                  }| j                  }|r	|r||kD  r|}	 	  || j                  |¬«       y # t
        $ r6 |�$t        «       |z
  |k\  rt        j                  «       ‚|�t        |«       Y nw xY wŒY)Nrb  )	r   rØ   ry   r«  rc  r
   ÚsocketrÆ   r   )r*   rã   rÆ   Ú
time_startry   r«  s         r,   re  zTransport.drain_eventsÝ  s˜   € Ü“[ˆ
Ø�j‰j�n‰nˆØ×0Ñ0ÐÙÑ'Ð,<¸wÒ,FØ&ÐØðÙ�D—M‘M¨7Õ3ð øô ò ,ØÐ&¬9«;¸Ñ+CÀwÒ+NÜ Ÿ.™.Ó*Ð*Ø#Ð/ÜÐ*Ô+ùð	,úð s   ºA Á<BÂBc                óà   — |st        dj                  |«      «      ‚	 | j                  |   } ||«       y # t         $ r. t        j	                  t
        |«       | j                  |«       Y y w xY w)Nz.Received message without destination queue: {})rP   r™   r<  ÚloggerÚwarningÚW_NO_CONSUMERSÚ_reject_inbound_message)r*   rt   r   rÙ   s       r,   rc  zTransport._deliverî  sm   € ÙÜØ@×GÑGØóóð ð	Ø—‘ uÑ-ˆHñ
 �WÕøô	 ò 	2Ü�N‰Nœ>¨5Ô1Ø×(Ñ(¨Ö1ð	2ús   ž6 ¶4A-Á,A-c                óÚ   — | j                   D ]\  }|sŒ|j                  ||¬«      }|j                  j                  ||j                  «       |j                  |j                  d¬«        y  y )Nr7  TrK  )r“  r§   r8  rv   ru   rL  )r*   r9  r`   rt   s       r,   rÁ  z!Transport._reject_inbound_messageû  s[   € Ø—}”}ˆGÚØ!Ÿ/™/¨+¸w˜/ÓG�Ø—‘×"Ñ" 7¨G×,@Ñ,@ÔAØ×$Ñ$ W×%9Ñ%9À4Ð$ÔHÙñ %r.   c                ó„   — |r|| j                   vrt        dj                  ||«      «      ‚ | j                   |   |«       y )Nz,Message for queue {!r} without consumers: {})r<  rP   r™   )r*   r`   rt   r   s       r,   Úon_message_readyzTransport.on_message_ready  sE   € Ù˜ T§_¡_Ñ4ÜØ>×EÑEØ˜7ó$ó%ð %ð 	ˆ�‰˜Ñ˜wÕ'r.   c                ó(   — |j                  ||¬«      S )N)rÙ   rÆ   )re  )r*   r`   rÙ   rÆ   s       r,   r®  zTransport._drain_channel
  s   € Ø×#Ñ#¨X¸wÐ#ÓGÐGr.   c                ó    — | j                   ddœS )NÚ	localhost)ÚportÚhostname)Údefault_portrF   s    r,   Údefault_connection_paramsz#Transport.default_connection_params  s   € à×)Ñ)°{ÑCÐCr.   r&   )r2   r3   r4   r5   rÞ   r   r­  r›  rØ   rÊ  r“  r<  r«  r’  r   r¥  Ú
implementsÚextendÚ	frozensetrC   r²  rr  rµ  r¹  re  rc  rÁ  rÄ  r®  r™  rË  r6   r.   r,   r¥  r¥  ƒ  s¾   „ ñð €GØ€EØ€Jð €Eð €Lð €Hð €Jð Ðð €Kà—‘×*Ñ*×1Ñ1ØÙ ¨7Ð 3Ó4Øð 2ó €Jò5òò&òò	$óò"òò(óHð ñDó ñDr.   r¥  )Dr5   Ú
__future__r   r'   r»  r“   rX  r   Úcollectionsr   r   r   Ú	itertoolsr   Úmultiprocessing.utilr	   r   r
   Útimer   r   Útypingr   Úamqp.protocolr   Úkombu.exceptionsr   r   Ú	kombu.logr   Úkombu.transportr   Úkombu.utils.divr   Úkombu.utils.encodingr   r   Úkombu.utils.schedulingr   Úkombu.utils.uuidr   r   r   Útypesr   r¯  rZ  r  rÀ  r˜   rœ   r2   r¾  r   r!   r$   Ú	Exceptionr8   ÚUserWarningr;   r=   r]   r§   rÂ   Ú
StdChannelrÞ   r›  r¥  r6   r.   r,   Ú<module>rá     sA  ðñõ
 #ã Û Û 
Û Ý ß <Ñ <Ý Ý )Ý ß !Ý  å ,ç 8Ý  Ý  Ý 0ß ;Ý ,Ý !å -áÝ#à€ðÐ ð
Ð ð
€ð <€Ø9Ð á	�HÓ	€ñ ˜?ð -ó €ñ
 Ð.ð 1ó €÷
1ñ 1ôL˜ô Lô9˜;ô 9÷D
ñ D
÷N_ñ _ôD"
ˆd�l‰lô "
÷J?!ñ ?!ôDL
ˆo˜tŸ™ô L
ô^�—‘ô ôLD�—‘õ LDr.   