
    rp0jj              	       P   S r SSKrSSKrSSKJr  S\\\\\4   \\\\4   -  \\\4   -  S-  S\\   S-  4S jr	 SS\\   S	\S-  SS4S
 jjr
S\\\4   \\\\\4   -  S\\R                  \4   \\R                  \\\4   -  4S jrS\\   S\\\4   \\\\\4   -  SS4S jrg)z'Utility functions for aiohappyeyeballs.    N   )AddrInfoTypeaddrreturnc                    U c  gU S   nU S   nSU;   nU(       a:  SnSn[        U 5      nUS:  a  U S   nUS:  a  U S   nXXE4n [        R                  nOX4n [        R                  nU[        R                  [        R
                  SU 4/$ )	z7Convert an address tuple to a list of addr_info tuples.Nr   r   :          )lensocketAF_INET6AF_INETSOCK_STREAMIPPROTO_TCP)r   hostportis_ipv6flowinfoscopeidaddr_lenfamilys           P/home/wildlama/miniconda3/lib/python3.13/site-packages/aiohappyeyeballs/utils.pyaddr_to_addr_infosr   	   s     |7D7DTkGt9q=1gGq=AwHH.|V''););RFGG    
addr_infos
interleavec                     0 nUc  Sn/ nU  H6  nUS   nXR;  a  SX%'   X%   U:  a  UR                  U5        X%==   S-  ss'   M8     U H  nU R                  U5        M     g)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.
Nr   r   )appendremove)r   r   seen	to_remove	addr_infor   s         r   pop_addr_infos_interleaver%   "   sw     D
$&I	1DL<*$Y'   	)$ r   c                 B    [         R                  " U S   5      /U SS Q7$ )z+Convert an address tuple to an IPv4Address.r   r   N)	ipaddress
ip_address)r   s    r   _addr_tuple_to_ip_addressr)   :   s'       a)5DH55r   c                 h   / nU  H  nUS   U:X  d  M  UR                  U5        M!     U(       a  U H  nU R                  U5        M     g[        U5      nU  H(  nU[        US   5      :X  d  M  UR                  U5        M*     U(       a  U H  nU R                  U5        M     g[        SU S35      e)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!   r)   
ValueError)r   r   bad_addrs_infosr$   bad_addr_info
match_addrs         r   remove_addr_infosr0   A   s     +-O	R=D ""9-   ,Mm, -*40J	29R=AA""9-   ,Mm, -
xv%=>
??r   )N)__doc__r'   r   typesr   tuplestrintlistr   r%   IPv4AddressIPv6Addressr)   r0    r   r   <module>r:      s,   -   H
S#s"
#eCcM&:
:U38_
Lt
SH	,$H4 >B%\"%03d
%	%06
S/E#sC"45
56
9  #%&y/D/Dc3PS/S)TT6@\"@
S/E#sC"45
5@ 
@r   