+
    ‰4iƒb  ã                   ó¶   € R t ^ RIHtHtHt ^ RIHtHt	 ^ RI
Ht ^ RIHt ^ RIHt ^ RIHt  ! R R]4      t ! R	 R
]4      t ! R R]4      t ! R R]4      tR# )z]
Classes and functions for dealing with MAC addresses, EUI-48, EUI-64, OUI, IAB
identifiers.
)ÚNotRegisteredErrorÚAddrFormatErrorÚDictDotLookup)Úeui48Úeui64)Ú	mac_eui48)Ú
eui64_base)Ú	IPAddress)Ú_open_binaryc                   ó:   a € ] tR t^t o RtRtR tR tR tRt	V t
R# )ÚBaseIdentifierz$Base class for all IEEE identifiers.c                ó   € R V n         R # ©N©Ú_value©Úselfs   &Ú6/usr/lib/python3/dist-packages/netaddr/eui/__init__.pyÚ__init__ÚBaseIdentifier.__init__   s	   € ØˆŽó    c                ó   € V P                   # )z):return: integer value of this identifierr   r   s   &r   Ú__int__ÚBaseIdentifier.__int__   s   € à�{‰{Ðr   c                ó   € V P                   # )z7
:return: return the integer value of this identifier.
r   r   s   &r   Ú	__index__ÚBaseIdentifier.__index__   s   € ð �{‰{Ðr   r   N)r   Ú__weakref__)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__Ú	__slots__r   r   r   Ú__static_attributes__Ú__classdictcell__)Ú__classdict__s   @r   r   r      s!   ø‡ € Ù.à)€Iòò÷ð r   r   c                   ó„   a a€ ] tR t^&t oRtRtV 3R ltR tR tR t	R t
R tR t]R	 4       tRR
 ltR tR tRtVtV ;t# )ÚOUIz€
An individual IEEE OUI (Organisationally Unique Identifier).

For online details see - http://standards.ieee.org/regauth/oui/

c                ó¸  <€ \         \        V `  4        ^ RIHp . V n        \        V\        4      '       d#   \        VP                  RR4      ^4      V n
        MM\        V\        4      '       d)   ^ Tu;8:  d   R8:  d   M MWn
        M\        RV: 24      h\        RV: 24      hV P                  VP                  9   dŒ   \        \        R4      pVP                  V P                  ,           FH  w  rEVP!                  V4       VP#                  V4      P%                  R4      pV P'                  WdV4       KJ  	  VP)                  4        R# \+        R	V: R
24      h)z¼
Constructor

:param oui: an OUI string ``XX-XX-XX`` or an unsigned integer.             Also accepts and parses full MAC/EUI-48 address strings (but not             MAC/EUI-48 integers)!
©ÚieeeÚ-Ú éÿÿÿ z OUI int outside expected range: zunexpected OUI format: zoui.txtúUTF-8zOUI z not registered!N)Úsuperr(   r   Únetaddr.euir+   ÚrecordsÚ
isinstanceÚstrÚintÚreplacer   Ú
ValueErrorÚ	TypeErrorÚ	OUI_INDEXr
   Ú__package__ÚseekÚreadÚdecodeÚ_parse_dataÚcloser   )r   Úouir+   ÚfhÚoffsetÚsizeÚdataÚ	__class__s   &&     €r   r   ÚOUI.__init__0   s  ø€ ô 	Œc�4Ñ!Ô#õ 	%àˆŒä�cœ3×Òô ˜cŸk™k¨#¨rÓ2°BÓ7ˆD�KÜ˜œS×!Ò!Ø�CÖ#˜8×#Ø!•å ÊÐ!NÓOÐOåº3Ð@ÓAÐAð �;‰;˜$Ÿ.™.Ô(Üœk¨9Ó5ˆBØ $§¡¨t¯{©{× ;Ð ;‘�Ø—‘˜”Ø—w‘w˜t“}×+Ñ+¨GÓ4�Ø× Ñ  ¨tÖ4ñ !<ð �H‰HŽJå$ÃÐ%FÓGÐGr   c                ó,   € \        V P                  4      # r   )Úhashr   r   s   &r   Ú__hash__ÚOUI.__hash__W   s   € Ü�D—K‘KÓ Ð r   c                ó²   € \        V\        4      '       g    V P                  V4      pV P
                  VP
                  8H  #   \         d
    \        u # i ; ir   ©r3   r(   rE   Ú	ExceptionÚNotImplementedr   ©r   Úothers   &&r   Ú__eq__Ú
OUI.__eq__Z   óN   € Ü˜%¤×%Ò%ð&ØŸ™ uÓ-�ð �{‰{˜eŸl™lÑ*Ð*øô ô &Ü%Ò%ð&úó   ˜A ÁAÁAc                ó²   € \        V\        4      '       g    V P                  V4      pV P
                  VP
                  8g  #   \         d
    \        u # i ; ir   rL   rO   s   &&r   Ú__ne__Ú
OUI.__ne__b   rS   rT   c                ó2   € V P                   V P                  3# )z+:returns: Pickled state of an `OUI` object.©r   r2   r   s   &r   Ú__getstate__ÚOUI.__getstate__j   s   € à�{‰{˜DŸL™LÐ(Ð(r   c                ó$   € Vw  V n         V n        R# )z;:param state: data used to unpickle a pickled `OUI` object.NrY   ©r   Ústates   &&r   Ú__setstate__ÚOUI.__setstate__n   s   € à$)Ñ!ˆŒ�T–\r   c                ó‚  € R^ RRRRR. RVRV/pVP                  R4       F€  pVP                  4       pV'       g   K  R	V9   d<   V P                  VR&   VP                  R
^4      ^,          VR&   \        V 4      VR&   K_  RV9   d   Kh  VR,          P	                  V4       K‚  	  V P
                  P	                  V4       R
# )z.Returns a dict record from raw OUI record dataÚidxr@   r-   ÚorgÚaddressrB   rC   Ú
ú(hex)Nú	(base 16))ÚsplitÚstripr   r4   Úappendr2   )r   rD   rB   rC   ÚrecordÚlines   &&&&  r   r>   ÚOUI._parse_datar   s»   € ð �1Ø�2Ø�2Ø�rØ�fØ�Dð
ˆð —J‘J˜tÖ$ˆDØ—:‘:“<ˆDßÙà˜$ŒØ $§¡��u‘Ø $§
¡
¨4°Ó 3°AÕ 6��u‘Ü # D£	��u“Ø Ô$Ùà�yÕ!×(Ñ(¨Ö.ñ %ð 	�‰×Ñ˜FÖ#r   c                ó,   € \        V P                  4      # )z0Number of registered organisations with this OUI)Úlenr2   r   s   &r   Ú	reg_countÚOUI.reg_count�   s   € ô �4—<‘<Ó Ð r   c                ó:   € \        V P                  V,          4      # )zì
The IEEE registration details for this OUI.

:param index: the index of record (may contain multiple registrations)
    (Default: 0 - first registration)

:return: Objectified Python data structure containing registration
    details.
)r   r2   )r   Úindexs   &&r   ÚregistrationÚOUI.registration’   s   € ô ˜TŸ\™\¨%Õ0Ó1Ð1r   c                óx   € V P                   pRV^,	          ^ÿ,          V^,	          ^ÿ,          V^ÿ,          3,          # )z*:return: string representation of this OUIú%02X-%02X-%02Xr   ©r   Úint_vals   & r   Ú__str__ÚOUI.__str__ž   s6   € à—+‘+ˆØ G¨r¥M°TÕ#9¸GÀq½LÈDÕ;PÐRYÐ\`ÕR`Ð"aÕaÐar   c                ó   € RV ,          # )ú@:return: executable Python string to recreate equivalent object.z	OUI('%s')© r   s   &r   Ú__repr__ÚOUI.__repr__£   ó   € à˜TÕ!Ð!r   rY   )r2   )é    )r   r   r    r!   r"   r#   r   rI   rQ   rV   rZ   r_   r>   Úpropertyrp   rt   rz   r   r$   r%   Ú__classcell__©rE   r&   s   @@r   r(   r(   &   s_   ù‡ € ñð €Iõ%HòN!ò+ò+ò)ò*ò$ð6 ñ!ó ð!ô
2òb÷
"ò "r   r(   c                   ó„   a a€ ] tR t^¨t oRt Rt]RR l4       tRV 3R lltR t	R t
R tR tR tR tR	 tR
 tRtVtV ;t# )ÚIABc                ó@  € V^,	          V P                   9   d   V^ 3# RpRV,          pV^,	          pW,          V,
          pV^,	          V P                   9   d.   V'       d#   V^ 8w  d   \        R\        V4      ,          4      hWV3# \        R\        V4      ,          4      h)zÍ
:param eui_int: a MAC IAB as an unsigned integer.

:param strict: If True, raises a ValueError if the last 12 bits of
    IAB MAC/EUI-48 address are non-zero, ignores them otherwise.
    (Default: False)
z%r is not a strict IAB!z%r is not an IAB address!iÿ  ì   ÿÿÿ )ÚIAB_EUI_VALUESr7   Úhex)ÚclsÚeui_intÚstrictÚ	user_maskÚiab_maskÚiab_bitsÚ	user_bitss   &&&    r   Úsplit_iab_macÚIAB.split_iab_mac³   s—   € ð �r�M˜c×0Ñ0Ô0Ø˜A�:Ðàˆ	Ø Õ*ˆØ˜b•=ˆØÕ'¨8Õ3ˆ	à˜�N˜s×1Ñ1Ô1ß˜) qœ.Ü Ð!:¼SÀ»^Õ!KÓLÐLð Ð"Ð"ô Ð8¼3¸w»<ÕGÓHÐHr   c                ó  <€ \         \        V `  4        ^ RIHp R^ RRRRR. R^ R^ /V n        \        V\        4      '       d8   \        VP                  R	R4      ^4      pV P                  WBR
7      w  rVWPn        MA\        V\        4      '       d   V P                  WR
7      w  rVWPn        M\        RV: R24      hV P                  VP                  9   d¨   \        \        R4      pVP                  V P                  ,          ^ ,          w  r‰W€P
                  R&   W�P
                  R&   VP!                  V4       VP#                  V	4      P%                  R4      p
V P'                  W¨V	4       VP)                  4        R# \+        RV: R24      h)ax  
Constructor

:param iab: an IAB string ``00-50-C2-XX-X0-00`` or an unsigned             integer. This address looks like an EUI-48 but it should not             have any non-zero bits in the last 3 bytes.

:param strict: If True, raises a ValueError if the last 12 bits             of IAB MAC/EUI-48 address are non-zero, ignores them otherwise.             (Default: False)
r*   rb   Úiabr-   rc   rd   rB   rC   r,   )rŽ   zunexpected IAB format: Ú!ziab.txtr/   zIAB z not unregistered!N)r0   r‡   r   r1   r+   rk   r3   r4   r5   r6   r“   r   r8   Ú	IAB_INDEXr
   r:   r;   r<   r=   r>   r?   r   )r   r–   rŽ   r+   ry   Úiab_intÚuser_intrA   rB   rC   rD   rE   s   &&&        €r   r   ÚIAB.__init__Ì   sR  ø€ ô 	Œc�4Ñ!Ô#õ 	%ð �1Ø�2Ø�2Ø�rØ�aØ�Að
ˆŒô �cœ3×Òô ˜#Ÿ+™+ c¨2Ó.°Ó3ˆGØ $× 2Ñ 2°7Ð 2Ó JÑˆGØ!�KÜ˜œS×!Ò!Ø $× 2Ñ 2°3Ð 2Ó FÑˆGØ!�Kå»CÐAÓBÐBð �;‰;˜$Ÿ.™.Ô(Üœk¨9Ó5ˆBØ!Ÿ^™^¨D¯K©KÕ8¸Õ;‰NˆVØ$*�K‰K˜Ñ!Ø"&�K‰K˜ÑØ�G‰G�FŒOØ—7‘7˜4“=×'Ñ'¨Ó0ˆDØ×Ñ˜T¨4Ô0Ø�H‰HŽJå$Ã3Ð%HÓIÐIr   c                ó²   € \        V\        4      '       g    V P                  V4      pV P
                  VP
                  8H  #   \         d
    \        u # i ; ir   ©r3   r‡   rE   rM   rN   r   rO   s   &&r   rQ   Ú
IAB.__eq__   rS   rT   c                ó²   € \        V\        4      '       g    V P                  V4      pV P
                  VP
                  8g  #   \         d
    \        u # i ; ir   r�   rO   s   &&r   rV   Ú
IAB.__ne__  rS   rT   c                ó2   € V P                   V P                  3# )z+:returns: Pickled state of an `IAB` object.©r   rk   r   s   &r   rZ   ÚIAB.__getstate__  s   € à�{‰{˜DŸK™KÐ'Ð'r   c                ó$   € Vw  V n         V n        R# )z;:param state: data used to unpickle a pickled `IAB` object.Nr¢   r]   s   &&r   r_   ÚIAB.__setstate__  s   € à#(Ñ ˆŒ�T–[r   c                ó€  € VP                  R4       F¨  pVP                  4       pV'       g   K  RV9   dZ   V P                  V P                  R&   VP                  R^4      ^,          V P                  R&   \	        V 4      V P                  R&   K}  RV9   d   K†  V P                  R,          P                  V4       Kª  	  R# )	z.Returns a dict record from raw IAB record datare   rf   rb   Nrc   r–   rg   rd   )rh   ri   r   rk   r4   rj   )r   rD   rB   rC   rl   s   &&&& r   r>   ÚIAB._parse_data  s‘   € à—J‘J˜tÖ$ˆDØ—:‘:“<ˆDßÙà˜$ŒØ%)§[¡[�—‘˜EÑ"Ø%)§Z¡Z°°aÓ%8¸Õ%;�—‘˜EÑ"Ü%(¨£Y�—‘˜EÓ"Ø Ô$Ùà—‘˜IÕ&×-Ñ-¨dÖ3ó %r   c                ó,   € \        V P                  4      # )z*The IEEE registration details for this IAB)r   rk   r   s   &r   rt   ÚIAB.registration(  s   € ä˜TŸ[™[Ó)Ð)r   c                óÂ   € V P                   ^,          pRV^ ,	          ^ÿ,          V^,	          ^ÿ,          V^,	          ^ÿ,          V^,	          ^ÿ,          V^ÿ,          3,          # )z*:return: string representation of this IABz%02X-%02X-%02X-%02X-%02X-00r   rx   s   & r   rz   ÚIAB.__str__,  sY   € à—+‘+ Õ"ˆà,Ø˜�]˜dÕ"Ø˜�]˜dÕ"Ø˜�]˜dÕ"Ø˜�\˜TÕ!Ø�d�Nð0
õ 
ð 	
r   c                ó   € RV ,          # )r}   z	IAB('%s')r~   r   s   &r   r   ÚIAB.__repr__8  r�   r   r¢   )iÂP  iUØ@ )rk   )F)r   r   r    r!   rŠ   r#   Úclassmethodr“   r   rQ   rV   rZ   r_   r>   rt   rz   r   r$   r%   r„   r…   s   @@r   r‡   r‡   ¨   s\   ù‡ € Ø)€Nðð €Iàó#ó ð#÷02Jòh+ò+ò(ò)ò4ò *ò

÷"ò "r   r‡   c                   óˆ  a a€ ] tR tRt oRtR)tR*V 3R lltR tR tR t	R t
]! ]	]
RR	4      tR
 tR tR t]! ]]RR4      t]R 4       t]R 4       tR t]R 4       t]R 4       tR tR tR tR tR tR tR tR tR tR+R lt]R 4       t ]R 4       t!]R 4       t"R  t#R! t$R" t%R# t&]R$ 4       t'R+R% lt(R& t)R' t*R(t+Vt,V ;t-# ),ÚEUIi=  zÃ
An IEEE EUI (Extended Unique Identifier).

Both EUI-48 (used for layer 2 MAC addresses) and EUI-64 are supported.

Input parsing for EUI-48 addresses is flexible, supporting many MAC
variants.

Nc                óh  <€ \         \        V `  4        RV n        \	        V\        4      '       di   Ve&   W!P                  P
                  8w  d   \        R4      hVP                  V n        VP                  V n        T;'       g    VP                  V n        R# Ve9   V^08X  d   \        V n        MvV^@8X  d   \        V n        Mc\        RV,          4      h\	        V\        4      '       d<   ^ Tu;8:  d   R8:  d   M M\        V n        MRTu;8  d   R8:  d   M M\        V n        Wn        W0n        R# )a  
Constructor.

:param addr: an EUI-48 (MAC) or EUI-64 address in string format or             an unsigned integer. May also be another EUI object (copy             construction).

:param version: (optional) the explicit EUI address version, either             48 or 64. Mainly used to distinguish EUI-48 and EUI-64 identifiers             specified as integers which may be numerically equivalent.

:param dialect: (optional) one of the :ref:`mac_formatting_dialects` to
    be used to configure the formatting of EUI-48 (MAC) addresses.
Nz2cannot switch EUI versions using copy constructor!zunsupported EUI version %rr‰   l   ÿÿÿÿ )r0   r°   r   Ú_moduler3   Úversionr7   r   ÚdialectÚ_eui48Ú_eui64r5   Úvalue)r   Úaddrr³   r´   rE   s   &&&&€r   r   ÚEUI.__init__J  sê   ø€ ô 	Œc�4Ñ!Ô#àˆŒä�dœC× Ò àÒ" w·,±,×2FÑ2FÔ'FÜ Ð!XÓYÐYØŸ<™<ˆDŒLØŸ+™+ˆDŒKØ"×2Ð2 d§l¡lˆDŒLÙàÒØ˜"Œ}Ü%�•Ø˜B”Ü%�•ä Ð!=ÀÕ!GÓHÐHô ˜$¤×$Ò$Ø˜Ö. ×.Ü#)�D•LØ# dÖ@Ð.@×@Ü#)�D”LàŒ
ð Žr   c                ó\   € V P                   V P                  P                  V P                  3# )z+:returns: Pickled state of an `EUI` object.)r   r²   r³   r´   r   s   &r   rZ   ÚEUI.__getstate__{  s!   € à�{‰{˜DŸL™L×0Ñ0°$·,±,Ð>Ð>r   c                ó’   € Vw  r#pW n         V^08X  d   \        V n        M"V^@8X  d   \        V n        M\	        RV: 24      hW@n        R# )z>
:param state: data used to unpickle a pickled `EUI` object.

z$unpickling failed for object state: N)r   rµ   r²   r¶   r7   r´   )r   r^   r·   r³   r´   s   &&   r   r_   ÚEUI.__setstate__  sB   € ð
 #(Ñˆ˜àŒà�bŒ=Ü!ˆD�LØ˜Œ]Ü!ˆD�LåÊÐPÓQÐQàŽr   c                ó   € V P                   # r   r   r   s   &r   Ú
_get_valueÚEUI._get_value‘  s   € Ø�{‰{Ðr   c                ó  € V P                   fP   \        \        3 F   p VP                  V4      V n        W n          M	  V P                   f   \        RV: 24      hR # \        V\        4      '       d$    V P                   P                  V4      V n        R # ^ \        V4      u;8:  d   V P                   P                  8:  d   M M\        V4      V n        R # \        RV: 24      h  \
         d\     ^ \        T4      u;8:  d   TP                  8:  d    M  Kÿ  \        T4      T n        Y n           Kõ   EK    \         d      EK-  i ; ii ; i  \
         d)    \        RYP                   P                  3,          4      hi ; i)Nzfailed to detect EUI version: zaddress %r is not an EUIv%dzbad address format: )r²   rµ   r¶   Ú
str_to_intr   r   r5   Úmax_intr7   r3   r4   r³   )r   r·   Úmodules   && r   Ú
_set_valueÚEUI._set_value”  sE  € Ø�<‰<Òä!¤6Ó*�ðØ"(×"3Ñ"3°EÓ":�D”KØ#)”LÙñ	 +ð �|‰|Ò#Ý%ÊEÐ&SÓTÐTñ $ô ˜%¤×%Ò%ðØ"&§,¡,×"9Ñ"9¸%Ó"@�D–Kð œ˜E›
Ö: d§l¡l×&:Ñ&:×:Ü"% e£*�D–Kå)ÂeÐ*MÓNÐNøô1 'ô ðØ¤ E£
Ö<¨f¯n©n×<Ñ<Ü*-¨e«*˜DœKØ+1œLÛ!ó =øô &ô Üðúðûô  'ô Ü)Ø5¸ÇÁ×@TÑ@TÐ8UÕUóð ðús;   ŸC'Á5 E Ã'EÃ3$D8ÄD8Ä8E	ÅEÅE	Å	EÅ3FzAa positive integer representing the value of this EUI identifier.c                ó   € V P                   # r   )Ú_dialectr   s   &r   Ú_get_dialectÚEUI._get_dialect½  s   € Ø�}‰}Ðr   c                ó¬   € Vf!   V P                   \        J d   \        # \        # \	        VR4      '       d   \	        VR4      '       d   V# \        R4      h)NÚ	word_sizeÚword_fmtz*custom dialects should subclass mac_eui48!)r²   r¶   r   r   Úhasattrr8   ©r   r·   s   &&r   Ú_validate_dialectÚEUI._validate_dialectÀ  sI   € ØŠ=Ø�|‰|œvÓ%Ü!Ð!ä Ð ä�u˜k×*Ò*¬w°u¸j×/IÒ/IØ�äÐ LÓMÐMr   c                ó2   € V P                  V4      V n        R # r   )rÐ   rÈ   rÏ   s   &&r   Ú_set_dialectÚEUI._set_dialectÌ  s   € Ø×.Ñ.¨uÓ5ˆŽr   zXa Python class providing support for the interpretation of various MAC
 address formats.c                óÊ   € V P                   \        8X  d   \        V P                  ^,	          4      # V P                   \        8X  d   \        V P                  ^(,	          4      # R# )z:The OUI (Organisationally Unique Identifier) for this EUI.N)r²   rµ   r(   r·   r¶   r   s   &r   r@   ÚEUI.oui×  sI   € ð �<‰<œ6Ô!Ü�t—z‘z RÕ'Ó(Ð(Ø�\‰\œVÔ#Ü�t—z‘z RÕ'Ó(Ð(ñ $r   c                ó¾   € V P                   \        8X  d   R\        V R,          4      ,          # V P                   \        8X  d   R\        V R,          4      ,          # R# )z*The EI (Extension Identifier) for this EUIrw   :é   é   Nz%02X-%02X-%02X-%02X-%02X:rØ   é   NN)r²   rµ   Útupler¶   r   s   &r   ÚeiÚEUI.eiß  sI   € ð �<‰<œ6Ô!Ø#¤e¨D°­IÓ&6Õ6Ð6Ø�\‰\œVÔ#Ø-´°d¸3µiÓ0@Õ@Ð@ñ $r   c                óJ   € V P                   ^,	          \        P                  9   # )z<:return: True if this EUI is an IAB address, False otherwise)r   r‡   rŠ   r   s   &r   Úis_iabÚ
EUI.is_iabç  s   € à—‘˜rÕ!¤c×&8Ñ&8Ñ8Ð8r   c                ój   € V P                  4       '       d   \        V P                  ^,	          4      # R# )zZ
If is_iab() is True, the IAB (Individual Address Block) is returned,
``None`` otherwise.
N)rß   r‡   r   r   s   &r   r–   ÚEUI.iabë  s(   € ð �;‰;�=Š=Ü�t—{‘{ bÕ(Ó)Ð)ñ r   c                ó.   € V P                   P                  # )z/The EUI version represented by this EUI object.)r²   r³   r   s   &r   r³   ÚEUI.versionô  s   € ð �|‰|×#Ñ#Ð#r   c                ó4  € \        V\        4      '       dr   V P                  P                  pV) Tu;8:  d   V^,
          8:  g   M \	        R4      hV P
                  P                  V P                  V P                  4      V,          # \        V\        4      '       dh   V P
                  P                  V P                  V P                  4      p\        VP                  \        V4      4      !   Uu. uF  qCV,          NK  	  up# \        RV: R24      hu upi )zë
:return: The integer value of the word referenced by index (both             positive and negative). Raises ``IndexError`` if index is out             of bounds. Also supports Python list slices for accessing             word groups.
z!index out range for address type!zunsupported type r—   )r3   r5   rÈ   Ú	num_wordsÚ
IndexErrorr²   Úint_to_wordsr   ÚsliceÚrangeÚindicesro   r8   )r   rb   ræ   ÚwordsÚis   &&   r   Ú__getitem__ÚEUI.__getitem__ù  sÏ   € ô �cœ3×ÒàŸ™×/Ñ/ˆIØ�J 3Ö9¨9°q­=Ö9Ü Ð!DÓEÐEØ—<‘<×,Ñ,¨T¯[©[¸$¿-¹-ÓHÈÕMÐMÜ˜œU×#Ò#Ø—L‘L×-Ñ-¨d¯k©k¸4¿=¹=ÓIˆEÜ&+¨S¯[©[¼¸U»Ó-DÒ&EÓFÑ&E ˜!—H�HÑ&EÑFÐFå³cÐ;Ó<Ð<ùò Gs   Ã1Dc                óœ  € \        V\        4      '       d   \        R4      h\        V\        4      '       g   \	        R4      h^ Tu;8:  d#   V P
                  P                  ^,
          8:  g   M \        RV3,          4      h\        V\        4      '       g   \	        R4      h^ Tu;8:  d   V P
                  P                  8:  g*   M \        RW P
                  P                  3,          4      h\        V P                  P                  V P                  V P
                  4      4      pW#V&   V P                  P                  V4      V n        R# )z=Set the value of the word referenced by index in this addressz"settable slices are not supported!zindex not an integer!z'index %d outside address type boundary!zvalue not an integer!z.value %d outside word size maximum of %d bits!N)r3   ré   ÚNotImplementedErrorr5   r8   rÈ   ræ   rç   Úmax_wordrÌ   Úlistr²   rè   r   Úwords_to_int)r   rb   r·   rì   s   &&& r   Ú__setitem__ÚEUI.__setitem__  s÷   € ä�cœ5×!Ò!ä%Ð&JÓKÐKä˜#œs×#Ò#ÜÐ3Ó4Ð4à�CÖ8˜DŸM™M×3Ñ3°aÕ7Ö8ÜÐFÈ#ÈÕOÓPÐPä˜%¤×%Ò%ÜÐ3Ó4Ð4à�EÖ3˜TŸ]™]×3Ñ3Ö3ÜØ@ÀEÏ=É=×KbÑKbÐCcÕcóð ô �T—\‘\×.Ñ.¨t¯{©{¸D¿M¹MÓJÓKˆØˆc‰
Ø—l‘l×/Ñ/°Ó6ˆŽr   c                óD   € \        V P                  V P                  34      # )zA:return: hash of this EUI object suitable for dict keys, sets etc)rH   r³   r   r   s   &r   rI   ÚEUI.__hash__$  s   € ä�T—\‘\ 4§;¡;Ð/Ó0Ð0r   c                óâ   € \        V\        4      '       g    V P                  V4      pV P
                  V P                  3VP
                  VP                  38H  #   \         d
    \        u # i ; i©zi
:return: ``True`` if this EUI object is numerically the same as other,             ``False`` otherwise.
©r3   r°   rE   rM   rN   r³   r   rO   s   &&r   rQ   Ú
EUI.__eq__(  ób   € ô
 ˜%¤×%Ò%ð&ØŸ™ uÓ-�ð —‘˜dŸk™kÐ*¨u¯}©}¸e¿l¹lÐ.KÑKÐKøô ô &Ü%Ò%ð&úó   ˜A ÁA.Á-A.c                óâ   € \        V\        4      '       g    V P                  V4      pV P
                  V P                  3VP
                  VP                  38g  #   \         d
    \        u # i ; irú   rû   rO   s   &&r   rV   Ú
EUI.__ne__4  rý   rþ   c                óâ   € \        V\        4      '       g    V P                  V4      pV P
                  V P                  3VP
                  VP                  38  #   \         d
    \        u # i ; i)zq
:return: ``True`` if this EUI object is numerically lower in value than             other, ``False`` otherwise.
rû   rO   s   &&r   Ú__lt__Ú
EUI.__lt__@  ób   € ô
 ˜%¤×%Ò%ð&ØŸ™ uÓ-�ð —‘˜dŸk™kÐ*¨e¯m©m¸U¿\¹\Ð-JÑJÐJøô ô &Ü%Ò%ð&úrþ   c                óâ   € \        V\        4      '       g    V P                  V4      pV P
                  V P                  3VP
                  VP                  38*  #   \         d
    \        u # i ; i)zx
:return: ``True`` if this EUI object is numerically lower or equal in             value to other, ``False`` otherwise.
rû   rO   s   &&r   Ú__le__Ú
EUI.__le__L  rý   rþ   c                óâ   € \        V\        4      '       g    V P                  V4      pV P
                  V P                  3VP
                  VP                  38„  #   \         d
    \        u # i ; i)zs
:return: ``True`` if this EUI object is numerically greater in value             than other, ``False`` otherwise.
rû   rO   s   &&r   Ú__gt__Ú
EUI.__gt__X  r  rþ   c                óâ   € \        V\        4      '       g    V P                  V4      pV P
                  V P                  3VP
                  VP                  38¬  #   \         d
    \        u # i ; i)zz
:return: ``True`` if this EUI object is numerically greater or equal             in value to other, ``False`` otherwise.
rû   rO   s   &&r   Ú__ge__Ú
EUI.__ge__d  rý   rþ   c                óN   € V P                   P                  V P                  V4      # )zÆ
:param word_sep: (optional) the separator to insert between words.             Default: None - use default separator for address type.

:return: human-readable binary digit string of this address.
)r²   Úint_to_bitsr   )r   Úword_seps   &&r   ÚbitsÚEUI.bitsp  s   € ð �|‰|×'Ñ'¨¯©°XÓ>Ð>r   c                óL   € V P                   P                  V P                  4      # )z8The value of this EUI address as a packed binary string.)r²   Úint_to_packedr   r   s   &r   ÚpackedÚ
EUI.packedy  s   € ð �|‰|×)Ñ)¨$¯+©+Ó6Ð6r   c                óL   € V P                   P                  V P                  4      # )z<A list of unsigned integer octets found in this EUI address.)r²   rè   r   r   s   &r   rì   Ú	EUI.words~  s   € ð �|‰|×(Ñ(¨¯©Ó5Ð5r   c                óL   € V P                   P                  V P                  4      # )z»
The value of this EUI address in standard Python binary
representational form (0bxxx). A back port of the format provided by
the builtin bin() function found in Python 2.6.x and higher.
)r²   Ú
int_to_binr   r   s   &r   ÚbinÚEUI.binƒ  s   € ð �|‰|×&Ñ& t§{¡{Ó3Ð3r   c                óÞ   € V P                   ^08X  d?   V P                  ^,	          pV P                  R,          pV^(,          R,          V,          pMV P                  pV P                  V^@R7      # )a  
- If this object represents an EUI-48 it is converted to EUI-64             as per the standard.
- If this object is already an EUI-64, a new, numerically             equivalent object is returned instead.

:return: The value of this EUI object as a new 64-bit EUI object.
r.   l      |ÿ©r³   )r³   r   rE   )r   Úfirst_threeÚ
last_threeÚ	new_values   &   r   r   Ú	EUI.eui64Œ  s^   € ð �<‰<˜2ÔàŸ+™+¨Õ+ˆKØŸ™ xÕ/ˆJØ$¨Õ*¨lÕ:¸ZÕG‰Ið Ÿ™ˆIØ�~‰~˜i°ˆ~Ó4Ð4r   c                óX   € V P                  4       pV;P                  R,          un        V# )z‰
- create a new EUI object with a modified EUI-64 as described in RFC 4291 section 2.5.1

:return: a new and modified 64-bit EUI object.
l          )r   r   )r   r   s   & r   Úmodified_eui64ÚEUI.modified_eui64Ÿ  s#   € ð —
‘
“ˆØ�ŠÐ:Õ:�Øˆr   c                ón   € \        V4      \        V P                  4       4      ,           p\        V^R7      # )a  
.. note:: This poses security risks in certain scenarios.             Please read RFC 4941 for details. Reference: RFCs 4291 and 4941.

:param prefix: ipv6 prefix

:return: new IPv6 `IPAddress` object based on this `EUI`             using the technique described in RFC 4291.
r  )r5   r$  r	   )r   Úprefixry   s   && r   Úipv6ÚEUI.ipv6¯  s-   € ô �f“+¤ D×$7Ñ$7Ó$9Ó :Õ:ˆÜ˜¨!Ô,Ð,r   c                ó$   € V P                  R4      # )a  
.. note:: This poses security risks in certain scenarios.             Please read RFC 4941 for details. Reference: RFCs 4291 and 4941.

:return: new link local IPv6 `IPAddress` object based on this `EUI`             using the technique described in RFC 4291.
l	                  @þ )r(  r   s   &r   Úipv6_link_localÚEUI.ipv6_link_local¼  s   € ð �y‰yÐ;Ó<Ð<r   c                ó¶   € RV P                   P                  4       /pV P                  4       '       d   V P                  P                  4       VR&   \	        V4      # )zh
A record dict containing IEEE registration details for this EUI
(MAC-48) if available, None otherwise.
r(   r‡   )r@   rt   rß   r–   r   )r   rD   s   & r   ÚinfoÚEUI.infoÆ  sG   € ð �t—x‘x×,Ñ,Ó.Ð/ˆØ�;‰;�=Š=ØŸ(™(×/Ñ/Ó1ˆD�‰Kä˜TÓ"Ð"r   c                óp   € V P                  V4      pV P                  P                  V P                  V4      # )a
  
Format the EUI into the representational format according to the given
dialect

:param dialect: one of the :ref:`mac_formatting_dialects` defining the
    formatting of EUI-48 (MAC) addresses.

:return: EUI in representational format according to the given dialect
)rÐ   r²   Ú
int_to_strr   )r   r´   Úvalidated_dialects   && r   ÚformatÚ
EUI.formatÒ  s1   € ð !×2Ñ2°7Ó;ÐØ�|‰|×&Ñ& t§{¡{Ð4EÓFÐFr   c                ób   € V P                   P                  V P                  V P                  4      # )z':return: EUI in representational format)r²   r1  r   rÈ   r   s   &r   rz   ÚEUI.__str__ß  s!   € à�|‰|×&Ñ& t§{¡{°D·M±MÓBÐBr   c                ó   € RV ,          # )r}   z	EUI('%s')r~   r   s   &r   r   ÚEUI.__repr__ã  r�   r   )rÈ   r²   r   r´   r·   )r²   rÈ   )NNr   ).r   r   r    r!   r"   r#   r   rZ   r_   r¿   rÅ   rƒ   r·   rÉ   rÐ   rÓ   r´   r@   rÜ   rß   r–   r³   rî   rõ   rI   rQ   rV   r  r  r	  r  r  r  rì   r  r   r$  r(  r+  r.  r3  rz   r   r$   r%   r„   r…   s   @@r   r°   r°   =  sx  ù‡ € ñð (€I÷/òb?òò$ò OñD ØØØØKó	€Eòò
Nò6ñ ØØØð	)ó	€Gð ñ)ó ð)ð ñAó ðAò9ð ñ*ó ð*ð ñ$ó ð$ò=ò&7ò01ò
Lò
Lò
Kò
Lò
Kò
Lô?ð ñ7ó ð7ð ñ6ó ð6ð ñ4ó ð4ò5ò&ò -ò=ð ñ	#ó ð	#ôGòC÷"ò "r   r°   N)r"   Únetaddr.corer   r   r   Únetaddr.strategyr   rµ   r   r¶   Únetaddr.strategy.eui48r   Únetaddr.strategy.eui64r   Ú
netaddr.ipr	   Únetaddr.compatr
   Úobjectr   r(   r‡   r°   r~   r   r   Ú<module>r@     sZ   ðñ÷
 LÑ Kß =Ý ,Ý -Ý  Ý 'ô�Vô ô&"ˆ.ô "ôDR"ˆ.ô R"ôjh"ˆ.ö h"r   