§
    0›jj  ã            	       ó|  — d Z ddlZddlZddlmZ deeeeef         eeeef         z  eeef         z  dz  dee         dz  fd„Z		 ddee         d	edz  ddfd
„Z
deeef         eeeeef         z  deej        ef         eej        eeef         z  fd„Zdee         deeef         eeeeef         z  ddfd„ZdS )z'Utility functions for aiohappyeyeballs.é    Né   )ÚAddrInfoTypeÚaddrÚreturnc                 ó  — | €dS | d         }| d         }d|v }|rBd}d}t          | ¦  «        }|dk    r| d         }|dk    r| d         }||||f} t          j        }n||f} t          j        }|t          j        t          j        d| fgS )	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           úS/home/lighthouse/health/venv/lib/python3.11/site-packages/aiohappyeyeballs/utils.pyÚaddr_to_addr_infosr   	   s«   € ð €|ØˆtØ�Œ7€DØ�Œ7€DØ�Tˆk€GØð  ØˆØˆÝ�t‘9”9ˆØ�qŠ=ˆ=Ø˜1”gˆGØ�qŠ=ˆ=Ø˜A”wˆHØ�d˜H gÐ.ˆÝ”ˆˆà�dˆ|ˆÝ”ˆØ•VÔ'­Ô);¸RÀÐFÐGÐGó    Ú
addr_infosÚ
interleavec                 óØ   — i }|€d}g }| D ]D}|d         }||vrd||<   ||         |k     r|                      |¦  «         ||xx         dz  cc<   ŒE|D ]}|                      |¦  «         ŒdS )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%   "   s°   € ð €DØÐØˆ
Ø$&€IØð ð ˆ	Ø˜1”ˆØ˜ÐÐØˆD�‰LØ�Œ<˜*Ò$Ð$Ø×Ò˜YÑ'Ô'Ð'ØˆVˆˆŒ˜Ñˆˆ‰ˆØð %ð %ˆ	Ø×Ò˜)Ñ$Ô$Ð$Ð$ð%ð %r   c                 óN   — t          j        | d         ¦  «        g| dd…         ¢R S )z+Convert an address tuple to an IPv4Address.r   r   N)Ú	ipaddressÚ
ip_address)r   s    r   Ú_addr_tuple_to_ip_addressr)   :   s,   € õ Ô   a¤Ñ)Ô)Ð5¨D°°°¬HÐ5Ð5Ð5r   c                 ót  — g }| D ]#}|d         |k    r|                      |¦  «         Œ$|r|D ]}|                      |¦  «         ŒdS t          |¦  «        }| D ]0}|t          |d         ¦  «        k    r|                      |¦  «         Œ1|r|D ]}|                      |¦  «         ŒdS t          d|› d�¦  «        ‚)z…
    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Ñ0Ô0€JØð .ð .ˆ	ØÕ2°9¸R´=ÑAÔAÒAÐAØ×"Ò" 9Ñ-Ô-Ð-øØð Ø,ð 	-ð 	-ˆMØ×Ò˜mÑ,Ô,Ð,Ð,ØˆÝ
Ð> Ð>Ð>Ð>Ñ
?Ô
?Ð?r   )N)Ú__doc__r'   r   Útypesr   ÚtupleÚstrÚintÚlistr   r%   ÚIPv4AddressÚIPv6Addressr)   r0   © r   r   ú<module>r:      sš  ðØ -Ð -à Ð Ð Ð Ø €€€à Ð Ð Ð Ð Ð ðHØ
��S˜#˜sÐ"Ô
# e¨C°°c¨MÔ&:Ñ
:¸UÀ3ÈÀ8¼_Ñ
LÈtÑ
SðHà	ˆ,Ô˜$ÑðHð Hð Hð Hð4 >Bð%ð %Ø�\Ô"ð%Ø03°d±
ð%à	ð%ð %ð %ð %ð06Ø
��S�Œ/˜E # s¨C°Ð"4Ô5Ñ
5ð6à
ˆ9Ô  #Ð%Ô&¨¨yÔ/DÀcÈ3ÐPSÐ/SÔ)TÑTð6ð 6ð 6ð 6ð@Ø�\Ô"ð@à
��S�Œ/˜E # s¨C°Ð"4Ô5Ñ
5ð@ð 
ð@ð @ð @ð @ð @ð @r   