Ë
    [üàgÔ  ã            
       ón  — d Z ddlZddlZddlmZmZmZmZmZ ddl	m
Z
 deeeeeeef   eeeef   eeef   f      deee
      fd„Z	 dd	ee
   d
ee   ddfd„Zdeeeef   eeeeef   f   deeej                  ef   eej                   eeef   f   fd„Zd	ee
   deeeef   eeeeef   f   ddfd„Zy)z'Utility functions for aiohappyeyeballs.é    N)ÚDictÚListÚOptionalÚTupleÚUnioné   )Ú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/var/www/skyplay_api_hub/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                 óº   — i }|€d}g }| D ]6  }|d   }||vrd||<   ||   |k  r|j                  |«       ||xx   dz  cc<   Œ8 |D ]  }| j                  |«       Œ 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   )Ú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                 ó@   — 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.   =   s'   € ô × Ñ   a¡Ó)Ð5¨D°°¨HÑ5Ð5r!   c                 ó<  — g }| D ]  }|d   |k(  sŒ|j                  |«       Œ |r|D ]  }| j                  |«       Œ yt        |«      }| D ]%  }|t        |d   «      k(  sŒ|j                  |«       Œ' |r|D ]  }| j                  |«       Œ y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_infosr5   F   sÊ   € ð +-€OØò .ˆ	Ø�R‰=˜DÓ Ø×"Ñ" 9Õ-ð.ñ Ø,ò 	-ˆMØ×Ñ˜mÕ,ð	-àä*¨4Ó0€JØò .ˆ	ØÔ2°9¸R±=ÓAÓAØ×"Ñ" 9Õ-ð.ñ Ø,ò 	-ˆMØ×Ñ˜mÕ,ð	-àÜ
�x ˜vÐ%=Ð>Ó
?Ð?r!   )N)Ú__doc__r,   r   Útypingr   r   r   r   r   Útypesr	   ÚstrÚintr    r*   ÚIPv4AddressÚIPv6Addressr.   r5   © r!   r   ú<module>r>      sK  ðÙ -ã Û ß 5Õ 5å ðHØ
Øˆe�C˜˜c 3Ð&Ñ'¨¨s°C¸¨}Ñ)=¸uÀSÈ#ÀX¹ÐNÑOñðHð ˆd�<Ñ Ñ!ó	Hð8 AEñ%Ø�\Ñ"ð%Ø08¸±ð%à	ó%ð06Ø
��c˜3�h‘  s¨C°°cÐ'9Ñ!:Ð:Ñ
;ð6à
Ø	ˆ)×
Ñ
 Ð
$Ñ% u¨Y×-BÑ-BÀCÈÈcÐ-QÑ'RÐRñó6ð@Ø�\Ñ"ð@à
��c˜3�h‘  s¨C°°cÐ'9Ñ!:Ð:Ñ
;ð@ð 
ô@r!   