Ë
    Eü´j
  ã            	       óF  — 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y)z'Utility functions for aiohappyeyeballs.é    Né   )ÚAddrInfoTypeÚaddrÚreturnc                 ó  — | €y| d   }| d   }d|v }|r:d}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           úT/root/workspace/ytshorts/venv/lib/python3.12/site-packages/aiohappyeyeballs/utils.pyÚaddr_to_addr_infosr   	   s¦   € ð €|ØØ�‰7€DØ�‰7€DØ�Tˆk€GÙØˆØˆÜ�t“9ˆØ�qŠ=Ø˜1‘gˆGØ�qŠ=Ø˜A‘wˆHØ�d˜H gÐ.ˆÜ—‘‰à�dˆ|ˆÜ—‘ˆØ”V×'Ñ'¬×);Ñ);¸RÀÐFÐGÐGó    Ú
addr_infosÚ
interleavec                 ó–   — |€d}i }g }| D ]7  }|d   }|j                  |d«      }||k\  r|j                  |«       |dz   ||<   Œ9 || dd y)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   )ÚgetÚappend)r   r   ÚseenÚkeptÚ	addr_infor   Úcounts          r   Úpop_addr_infos_interleaver&   "   sm   € ð ÐØˆ
Ø€DØ!€DØò !ˆ	Ø˜1‘ˆØ—‘˜ Ó#ˆØ�JÒØ�K‰K˜	Ô"Ø˜q‘yˆˆVŠð!ð €J‰q�Mr   c                 ó@   — t        j                  | d   «      g| dd ¢­S )z+Convert an address tuple to an IPv4Address.r   r   N)Ú	ipaddressÚ
ip_address)r   s    r   Ú_addr_tuple_to_ip_addressr*   8   s'   € ô × Ñ   a¡Ó)Ð5¨D°°¨HÑ5Ð5r   c                 ó$  — | D �cg c]  }|d   |k7  sŒ|‘Œ }}t        |«      t        | «      k(  r,t        |«      }| D �cg c]  }t        |d   «      |k7  sŒ|‘Œ }}t        |«      t        | «      k(  rt        d|› d�«      ‚|| dd yc c}w c c}w )z…
    Remove an address from the list of addr_infos.

    The addr value is typically the return value of
    sock.getpeername().
    éÿÿÿÿzAddress z not found in addr_infosN)r   r*   Ú
ValueError)r   r   Úair#   Ú
match_addrs        r   Úremove_addr_infosr0   ?   s    € ð $Ö6�2 r¨"¡v°£~ŠBÐ6€DÐ6Ü
ˆ4ƒy”C˜
“OÒ#ä.¨tÓ4ˆ
à#ö
ØÔ'@ÀÀBÁÓ'HÈJÓ'VŠBð
ˆð 
ô ˆ4ƒy”C˜
“OÒ#Ü˜8 D 6Ð)AÐBÓCÐCØ€J‰q�Mùò 7ùò
s   …B“B¿BÁB)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ð4 >BñØ�\Ñ"ðØ03°d±
ðà	óð,6Ø
��S�‰/˜E # s¨C°Ð"4Ñ5Ñ
5ð6à
ˆ9× Ñ  #Ð%Ñ&¨¨y×/DÑ/DÀcÈ3ÐPSÐ/SÑ)TÑTó6ðØ�\Ñ"ðà
��S�‰/˜E # s¨C°Ð"4Ñ5Ñ
5ðð 
ôr   