+
    TŎi                     v    R t ^ RIt^ RIt^ RIHtHtHtHtHt ^RI	H
t
 R R ltRR R lltR R	 ltR
 R ltR# )z'Utility functions for aiohappyeyeballs.N)DictListOptionalTupleUnion)AddrInfoTypec                "   V ^8  d   QhR\         \        \        \        \        \        \        3,          \        \        \        \        3,          \        \        \        3,          3,          ,          R\         \
        \        ,          ,          /#    addrreturn)r   r   r   strintr   r   )formats   "e/Users/ahmad/.openclaw/workspace/scripts/.venv/lib/python3.14/site-packages/aiohappyeyeballs/utils.py__annotate__r   
   sa     H H
eCc3&'sC})=uS#XNOH d< !	H    c                B   V f   R# V ^ ,          pV ^,          pRV9   pV'       dE   ^ p^ p\        V 4      pV^8  d
   V ^,          pV^8  d
   V ^,          pWWE3p \        P                  pMW3p \        P                  pV\        P                  \        P
                  RV 3.# )z7Convert an address tuple to a list of addr_info tuples.N: )lensocketAF_INET6AF_INETSOCK_STREAMIPPROTO_TCP)r   hostportis_ipv6flowinfoscopeidaddr_lenfamilys   &       r   addr_to_addr_infosr#   
   s     |7D7DTkGt9q=1gGq=AwHH.|V''););RFGGr   c                `    V ^8  d   QhR\         \        ,          R\        \        ,          RR/# )r
   
addr_infos
interleaver   N)r   r   r   r   )r   s   "r   r   r   %   s-     % %\"%08%	%r   c                    / pVf   ^p. pV  FH  pV^ ,          pWR9  d   ^ W%&   W%,          V8  d   VP                  V4       W%;;,          ^,          uu&   KJ  	  V F  pV P                  V4       K  	  R# )z
Pop addr_info from the list of addr_infos by family up to interleave times.

The interleave parameter is used to know how many addr_infos for
each family should be popped of the top of the list.
N)appendremove)r%   r&   seen	to_remove	addr_infor"   s   &&    r   pop_addr_infos_interleaver-   %   sw     D
$&I	1DL<*$Y'   	)$ r   c          
      L   V ^8  d   QhR\         \        \        \        3,          \        \        \        \        \        3,          3,          R\         \        \        P
                  \        3,          \        \        P                  \        \        \        3,          3,          /# r	   )r   r   r   r   	ipaddressIPv4AddressIPv6Address)r   s   "r   r   r   =   sm     6 6
c3hsCc'9!::
;6
	)


$%uY-B-BCc-Q'RR6r   c                R    \         P                  ! V ^ ,          4      .V R,          O5# )z+Convert an address tuple to an IPv4Address.:   NN)r/   
ip_address)r   s   &r   _addr_tuple_to_ip_addressr5   =   s%       a)5DH55r   c          
          V ^8  d   QhR\         \        ,          R\        \        \        \
        3,          \        \        \
        \
        \
        3,          3,          RR/# )r
   r%   r   r   N)r   r   r   r   r   r   )r   s   "r   r   r   F   sP     @ @\"@
c3hsCc'9!::
;@ 
@r   c                   . pV  F$  pVR,          V8X  g   K  VP                  V4       K&  	  V'       d   V F  pV P                  V4       K  	  R# \        V4      pV  F-  pV\        VR,          4      8X  g   K  VP                  V4       K/  	  V'       d   V F  pV P                  V4       K  	  R# \        RV R24      h)zu
Remove an address from the list of addr_infos.

The addr value is typically the return value of
sock.getpeername().
NzAddress z not found in addr_infos)r(   r)   r5   
ValueError)r%   r   bad_addrs_infosr,   bad_addr_info
match_addrs   &&    r   remove_addr_infosr=   F   s     +-O	R=D ""9-   ,Mm, -*40J	29R=AA""9-   ,Mm, -
xv%=>
??r   )N)__doc__r/   r   typingr   r   r   r   r   typesr   r#   r-   r5   r=    r   r   <module>rB      s-    -   5 5 H6%06@r   