Ë
    ãÓñ^  ã            
       óì  — d Z ddlZddlZddlmZ ddlmZ	m
ZmZmZmZmZmZmZmZ dZdZeZdZdZdez  dz
  Z G d	„ d
e «      Z! G d„ de!«      Z" G d„ de"«      Z# G d„ de!«      Z$ G d„ de!«      Z%e!Z&ddjO                  dgdz  «      z   dz   ddjO                  dgdz  «      z   dz   ddjO                  dgdz  «      z   dz   ddjO                  dgdz  «      z   dz   ddjO                  dgdz  «      z   dz   ddjO                  dgdz  «      z   d z   fZ(e(D � cg c]  }  ejR                  | ejT                  «      ‘Œ! c} Z(d!„ Z+d"„ Z,d#„ Z-d0d$„Z.d%„ Z/d&„ Z0d0d'„Zd0d(„Z
d0d)„Zd0d*„Zd0d+„Zd0d,„Zd0d-„Zd.„ Zd/„ Zyc c} w )1z6
IEEE 64-bit EUI (Extended Unique Indentifier) logic.
é    N)ÚAddrFormatError)	Úvalid_wordsÚint_to_wordsÚwords_to_intÚ
valid_bitsÚbits_to_intÚint_to_bitsÚ	valid_binÚ
int_to_binÚ
bin_to_inté@   zEUI-64é   é   c                   ó:   — e Zd ZdZdZeez  Zdez  dz
  ZdZdZ	dZ
y)	Ú
eui64_basez%A standard IEEE EUI-64 dialect class.é   r   r   ú-z%.2Xé   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú	word_sizeÚwidthÚ	num_wordsÚmax_wordÚword_sepÚword_fmtÚ	word_base© ó    ú8/usr/lib/python3/dist-packages/netaddr/strategy/eui64.pyr   r   +   s;   „ Ù/à€Ið ˜Ñ"€Ið �I‰~ Ñ!€Hð €Hð €Hð �Ir!   r   c                   ó*   — e Zd ZdZdZeez  ZdZdZdZ	y)Ú
eui64_unixz'A UNIX-style MAC address dialect class.r   ú:z%xr   N©
r   r   r   r   r   r   r   r   r   r   r    r!   r"   r$   r$   @   s#   „ Ù1Ø€IØ˜Ñ"€IØ€HØ€HØ�Ir!   r$   c                   ó   — e Zd ZdZdZy)Úeui64_unix_expandedz;A UNIX-style MAC address dialect class with leading zeroes.ú%.2xN)r   r   r   r   r   r    r!   r"   r(   r(   I   s
   „ ÙEØ�Hr!   r(   c                   ó*   — e Zd ZdZdZeez  ZdZdZdZ	y)Úeui64_ciscoz2A Cisco 'triple hextet' MAC address dialect class.r   ú.ú%.4xNr&   r    r!   r"   r+   r+   N   s#   „ Ù<Ø€IØ˜Ñ"€IØ€HØ€HØ�Ir!   r+   c                   ó*   — e Zd ZdZdZeez  ZdZdZdZ	y)Ú
eui64_barez1A bare (no delimiters) MAC address dialect class.r   Ú z%.16Xr   Nr&   r    r!   r"   r/   r/   W   s#   „ Ù;Ø€IØ˜Ñ"€IØ€HØ€HØ�Ir!   r/   ú^r%   z([0-9A-F]{1,2})r   ú$r   z([0-9A-F]{1,4})é   z\.z^(r0   z[0-9A-F]r   z)$c                 óF   — |D ]  }|j                  | «      }|sŒ|d   c S  y )Nr   )Úfindall)ÚaddressÚformatsÚregexpÚmatchs       r"   Ú_get_match_resultr:   x   s+   € Øò ˆØ—‘˜wÓ'ˆÚØ˜‘8ŠOñr!   c                 óH   — 	 t        | t        «      ry	 y# t        $ r Y yw xY w)z�
    :param addr: An IEEE EUI-64 indentifier in string form.

    :return: ``True`` if EUI-64 indentifier is valid, ``False`` otherwise.
    TF)r:   ÚRE_EUI64_FORMATSÚ	TypeError)Úaddrs    r"   Ú	valid_strr?      s6   € ðÜ˜TÔ#3Ô4Øð 5ð
 øô ò Øàðús   ‚ •	! !c                 ó:  — g }	 t        | t        «      }|st        ‚	 t	        |t
        «      rn|f}t        |«      dk(  r8t        dj                  |D �cg c]  }dt        |d«      z  ‘Œ c}«      d«      }|S t        |«      dk(  r8t        dj                  |D �cg c]  }dt        |d«      z  ‘Œ c}«      d«      }|S t        |«      d	k(  rt        d
t        |d   d«      z  d«      }|S t        d| z  «      ‚# t        $ r t        d| ›d�«      ‚w xY wc c}w c c}w )zÏ
    :param addr: An IEEE EUI-64 indentifier in string form.

    :return: An unsigned integer that is equivalent to value represented
        by EUI-64 string address formatted according to the dialect
    z invalid IEEE EUI-64 identifier: ú!r   r0   r)   r   r3   r-   r   z%016xr   z)bad word count for EUI-64 identifier: %r!)	r:   r<   r=   r   Ú
isinstanceÚtupleÚlenÚintÚjoin)r>   ÚwordsÚwÚint_vals       r"   Ú
str_to_intrJ   Ž   s0  € ð €EðOÜ! $Ô(8Ó9ˆÙÜˆOð ô
 �%œÔØà�ˆä
ˆ5ƒz�Q‚ä�b—g‘g¸EÖB°q˜v¬¨A¨r«
Ó2ÒBÓCÀRÓHˆð €Nô 
ˆU‹�qŠä�b—g‘g¸EÖB°q˜v¬¨A¨r«
Ó2ÒBÓCÀRÓHˆð €Nô 
ˆU‹�qŠä�g¤ E¨!¡H¨bÓ 1Ñ1°2Ó6ˆð
 €Nô Ø7¸$Ñ>ó@ð 	@øô% ò OÝÂtÐMÓNÐNðOüò Cùò Cs   „C7 ÁDÂDÃ7Dc                 ó¦   — |€t         }t        | |«      }|D �cg c]  }|j                  |z  ‘Œ }}|j                  j	                  |«      }|S c c}w )zÉ
    :param int_val: An unsigned integer.

    :param dialect: (optional) a Python class defining formatting options

    :return: An IEEE EUI-64 identifier that is equivalent to unsigned integer.
    )r   r   r   r   rF   )rI   ÚdialectrG   ÚiÚtokensr>   s         r"   Ú
int_to_strrO   ³   sX   € ð €ÜˆÜ˜ 'Ó*€EØ,1Ö2 qˆg×Ñ Ó"Ð2€FÐ2Ø×Ñ× Ñ  Ó(€DØ€Kùò 3s   ™Ac                 óD   — t        | «      }t        j                  dg|¢­Ž S )z•
    :param int_val: the integer to be packed.

    :return: a packed string that is equivalent to value represented by an
    unsigned integer.
    ú>8B)r   Ú_structÚpack)rI   rG   s     r"   Úint_to_packedrT   Ã   s"   € ô ˜Ó!€EÜ�<‰<˜Ð& Ò&Ð&r!   c                 óž   — t        t        j                  d| «      «      }d}t        t	        |«      «      D ]  \  }}|}|d|z  z  }||z  }Œ |S )a  
    :param packed_int: a packed string containing an unsigned integer.
        It is assumed that string is packed in network byte order.

    :return: An unsigned integer equivalent to value of network address
        represented by packed binary string.
    rQ   r   r   )ÚlistrR   ÚunpackÚ	enumerateÚreversed)Ú
packed_intrG   rI   rM   ÚnumÚwords         r"   Úpacked_to_intr]   Î   s\   € ô ”—‘  zÓ2Ó3€Eà€GÜœH U›OÓ,ò !‰ˆˆ3ØˆØ�q˜1‘u‰}ˆØ˜D‘.‰ð!ð
 €Nr!   c                 óT   — |€t         }t        | |j                  |j                  «      S ©N)ÚDEFAULT_EUI64_DIALECTÚ_valid_wordsr   r   ©rG   rL   s     r"   r   r   á   s'   € Ø€Ü'ˆÜ˜˜w×0Ñ0°'×2CÑ2CÓDÐDr!   c                 óT   — |€t         }t        | |j                  |j                  «      S r_   )r`   Ú_int_to_wordsr   r   ©rI   rL   s     r"   r   r   ç   s'   € Ø€Ü'ˆÜ˜ '×"3Ñ"3°W×5FÑ5FÓGÐGr!   c                 óT   — |€t         }t        | |j                  |j                  «      S r_   )r`   Ú_words_to_intr   r   rb   s     r"   r   r   í   s'   € Ø€Ü'ˆÜ˜ × 1Ñ 1°7×3DÑ3DÓEÐEr!   c                 óH   — |€t         }t        | t        |j                  «      S r_   )r`   Ú_valid_bitsr   r   ©ÚbitsrL   s     r"   r   r   ó   s!   € Ø€Ü'ˆÜ�tœU G×$4Ñ$4Ó5Ð5r!   c                 óH   — |€t         }t        | t        |j                  «      S r_   )r`   Ú_bits_to_intr   r   rj   s     r"   r   r   ù   s!   € Ø€Ü'ˆÜ˜œe W×%5Ñ%5Ó6Ð6r!   c                 ój   — |€t         }t        | |j                  |j                  |j                  «      S r_   )r`   Ú_int_to_bitsr   r   r   re   s     r"   r	   r	   ÿ   s6   € Ø€Ü'ˆÜØ�×"Ñ" G×$5Ñ$5°w×7GÑ7GóIð Ir!   c                 ó2   — |€t         }t        | t        «      S r_   )r`   Ú
_valid_binr   )Úbin_valrL   s     r"   r
   r
     s   € Ø€Ü'ˆÜ�gœuÓ%Ð%r!   c                 ó"   — t        | t        «      S r_   )Ú_int_to_binr   )rI   s    r"   r   r     ó   € Ü�w¤Ó&Ð&r!   c                 ó"   — t        | t        «      S r_   )Ú_bin_to_intr   )rr   s    r"   r   r     ru   r!   r_   )1r   ÚstructrR   ÚreÚ_reÚnetaddr.corer   Únetaddr.strategyr   ra   r   rd   r   rg   r   ri   r   rm   r	   ro   r
   rq   r   rt   r   rw   ÚAF_EUI64r   ÚfamilyÚfamily_nameÚversionÚmax_intÚobjectr   r$   r(   r+   r/   r`   rF   r<   ÚcompileÚ
IGNORECASEr:   r?   rJ   rO   rT   r]   )Ú_s   0r"   ú<module>r†      sÜ  ðñó Û å (÷÷ õ ð €ð 	€ð 
€ð €ð €ð ˆu‰*�q‰.€ô�ô ô*�ô ô˜*ô ô
�*ô ô�ô ð #Ð ð ˆ#�(‰(Ð%Ð&¨Ñ*Ó
+Ñ+¨cÑ1Øˆ#�(‰(Ð%Ð&¨Ñ*Ó
+Ñ+¨cÑ1ð ˆ#�(‰(Ð%Ð&¨Ñ*Ó
+Ñ+¨cÑ1Øˆ#�(‰(Ð%Ð&¨Ñ*Ó
+Ñ+¨cÑ1Øˆ%�*‰*Ð'Ð(¨1Ñ,Ó
-Ñ-°Ñ3ð 	ˆ2�7‰7�J�< "Ñ$Ó%Ñ%¨Ñ,ðÐ ð =MÖM°q�K�C—K‘K  3§>¡>Õ2ÒMÐ òòò"óJò 'òó&EóHóFó6ó7óIó&ò'ó'ùòw Ns   Ä$E1