ó
    ÌÅLgš  ã                   ó0  • S r SSKrSSKrSSKJrJr  SSKrSSKr\R                  " S5      r
S\S\4S jr\R                  " S5      r\R                  " S	5      r\R                  " S
5      rSS\\\4   S\S\4S jjrSrS\S\4S jrS\\\4   S\4S jrg)zIPv6 helper functions.é    N)ÚListÚUnionz0+([0-9a-f]+)ÚaddressÚreturnc                 ó0  • [        U 5      S:w  a  [        S5      e[        R                  " U 5      n/ nSn[        U5      nX4:  a[  XUS-    R	                  5       n[
        R                  U5      nUb  UR                  S5      nUR                  U5        US-  nX4:  a  M[  SnSnSn	Sn
[        S	5       H4  nX#   S
:w  a  U
(       a  UnX¹-
  nXÈ:”  a  U	nUnSn
M%  M'  U
(       a  M0  Un	Sn
M6     U
(       a  S	nX¹-
  nXÈ:”  a  U	nUnUS:”  a~  US:X  aG  US:X  d  US:X  a;  US   S:X  a2  US:X  a  SnOSnU[        R                  R                  U SS 5      -   nU$ SR                  USU 5      S-   SR                  X'U-   S 5      -   n U$ SR                  U5      nU$ )z½Convert an IPv6 address in binary form to text form.

*address*, a ``bytes``, the IPv6 address in binary form.

Raises ``ValueError`` if the address isn't 16 bytes long.
Returns a ``str``.
é   z IPv6 addresses are 16 bytes longr   é   Né   éÿÿÿÿFé   Ú0Té   é   Úffffz::z::ffff:é   Ú:)ÚlenÚ
ValueErrorÚbinasciiÚhexlifyÚdecodeÚ_leading_zeroÚmatchÚgroupÚappendÚrangeÚdnsÚipv4Ú	inet_ntoaÚjoin)r   ÚhexÚchunksÚiÚlÚchunkÚmÚ
best_startÚbest_lenÚstartÚlast_was_zeroÚendÚcurrent_lenÚprefixÚthexs                  Ú*/usr/lib/python3/dist-packages/dns/ipv6.pyr   r      sÚ  € ô ˆ7ƒ|�rÓÜÐ;Ó<Ð<Ü
×
Ò
˜7Ó
#€CØ€FØ	€AÜˆC‹€AØ
‹%Ø˜˜A™�×%Ñ%Ó'ˆô ×Ñ Ó&ˆØ‰=Ø—G‘G˜A“JˆEØ�‰�eÔØ	ˆQ‰ˆð �%ð €JØ€HØ€EØ€MÜ�1ŽXˆØ‰9˜ÓÞØ�Ø!™k�ØÓ)Ø!&�JØ*�HØ %’ñ ÷ �ØˆEØ ŠMñ ö ØˆØ‘kˆØÓ!ØˆJØ"ˆHØ�!ƒ|Ø˜‹? ¨A£°¸Q³À6È!Á9ÐPVÓCVà˜1‹}Ø‘à"�ØœCŸH™H×.Ñ.¨w°r°s¨|Ó<Ñ<ˆDð €Kð —‘˜  Ð,Ó-Øñà—(‘(˜6¨xÑ"7Ð"9Ð:Ó;ñ<ñ ð €Kð �x‰x˜ÓˆØ€Kó    s   (.*):(\d+\.\d+\.\d+\.\d+)$s   ::.*s   .*::$ÚtextÚignore_scopec                 óÐ  • [        U [        5      (       d  U R                  5       nOU nU(       aH  UR                  S5      n[	        U5      nUS:X  a  US   nO US:”  a  [
        R                  R                  eUS:X  a  [
        R                  R                  eUR                  S5      (       a0  UR                  S5      (       d  [
        R                  R                  eUR                  S5      (       a0  UR                  S5      (       d  [
        R                  R                  eUS:X  a  Sn[        R                  U5      nUbw  [
        R                  R                  UR                  S5      5      nUR                  S	5      R                  5        S
US   S US	   S S
US   S US   S 3R                  5       n[         R                  U5      nUb  US	S nO["        R                  U5      nUb  USS nUR                  S5      n[	        U5      nUS:”  a  [
        R                  R                  eSn/ n	U H¥  n
U
S:X  aO  U(       a  [
        R                  R                  eSn[%        SSU-
  S	-   5       H  nU	R'                  S5        M     MX  [	        U
5      nUS:”  a  [
        R                  R                  eUS:w  a  SSU-
  -  U
-   n
U	R'                  U
5        M§     US:  a!  U(       d  [
        R                  R                  eSR)                  U	5      n [*        R,                  " U5      $ ! [*        R.                  [0        4 a    [
        R                  R                  ef = f)a  Convert an IPv6 address in text form to binary form.

*text*, a ``str`` or ``bytes``, the IPv6 address in textual form.

*ignore_scope*, a ``bool``.  If ``True``, a scope will be ignored.
If ``False``, the default, it is an error for a scope to be present.

Returns a ``bytes``.
ó   %é   r   r0   ó   :s   ::s   0::Nr
   r   Ú02xé   r   r   FTs   0000r	   ó   0)Ú
isinstanceÚbytesÚencodeÚsplitr   r   Ú	exceptionÚSyntaxErrorÚendswithÚ
startswithÚ
_v4_endingr   r   Ú	inet_atonr   r   Ú_colon_colon_startÚ_colon_colon_endr   r   r    r   Ú	unhexlifyÚErrorÚ	TypeError)r1   r2   ÚbtextÚpartsr$   r&   Úbr"   Ú
seen_emptyÚ	canonicalÚcÚ_Úlcs                r/   rC   rC   h   sä  € ô �dœE×"Ñ"Ø—‘“‰àˆæØ—‘˜DÓ!ˆÜ�‹JˆØ�‹6Ø˜!‘H‰EØ�‹UÜ—-‘-×+Ñ+Ð+à�ƒ|Ü�m‰m×'Ñ'Ð'Ø	�‰˜×	Ñ	 e§n¡n°U×&;Ñ&;Ü�m‰m×'Ñ'Ð'Ø	×	Ñ	˜$×	Ñ	¨×(8Ñ(8¸×(?Ñ(?Ü�m‰m×'Ñ'Ð'Ø	�%‹Øˆô 	×Ñ˜Ó€AØ�}Ü�H‰H×Ñ˜qŸw™w q›zÓ*ˆà�w‰w�q‹z× Ñ Ó"Ð# 1 Q q¡T¨# J¨q°©t°C¨j¸¸!¸A¹$¸s¸ÀAÀaÁDÈÀ:ÐNß
‰&‹(ð 	ô 	× Ñ  Ó'€AØ�}Ø�a�b�	‰ä×"Ñ" 5Ó)ˆØ‰=Ø˜#˜2�JˆEð �[‰[˜Ó€FÜˆF‹€AØˆ1ƒuÜ�m‰m×'Ñ'Ð'Ø€JØ€IÛˆØ�‹8ÞÜ—m‘m×/Ñ/Ð/ØˆJÜ˜1˜a !™e a™iÖ(�Ø× Ñ  Ö)ó )ô �Q“ˆBØ�A‹vÜ—m‘m×/Ñ/Ð/Ø�Q‹wØ˜Q ™V‘_¨Ñ)�Ø×Ñ˜QÖñ ð 	ˆ1ƒu–ZÜ�m‰m×'Ñ'Ð'Ø�H‰H�YÓ€Eð
(Ü×!Ò! %Ó(Ð(øÜ�N‰NœIÐ&ó (Ü�m‰m×'Ñ'Ð'ð(ús   ÌL0 Ì05M%s             ÿÿc                 ó,   • U R                  [        5      $ )z€Is the specified address a mapped IPv4 address?

*address*, a ``bytes`` is an IPv6 address in binary form.

Returns a ``bool``.
)rA   Ú_mapped_prefix)r   s    r/   Ú	is_mappedrS   Æ   s   € ð ×ÑœnÓ-Ð-r0   c                 óz   • [         R                  R                  [         R                  R                  U 5      5      $ )a  Verify that *address* is a valid text form IPv6 address and return its
canonical text form.  Addresses with scopes are rejected.

*text*, a ``str`` or ``bytes``, the IPv6 address in textual form.

Raises ``dns.exception.SyntaxError`` if the text is not valid.
)r   Úipv6r   rC   )r1   s    r/   ÚcanonicalizerV   Ñ   s(   € ô �8‰8×ÑœcŸh™h×0Ñ0°Ó6Ó7Ð7r0   )F)Ú__doc__r   ÚreÚtypingr   r   Údns.exceptionr   Údns.ipv4Úcompiler   r;   Ústrr   rB   rD   rE   ÚboolrC   rR   rS   rV   © r0   r/   Ú<module>r`      sÌ   ðñ$ ã Û 	ß ã Û à—
’
Ð+Ó,€ðB�uð B ô BðJ �ZŠZÐ6Ó7€
Ø—Z’Z Ó)Ð Ø—:’:˜iÓ(Ð ñX(�E˜#˜u˜*Ñ%ð X(°Tð X(Àeõ X(ðv ,€ð.�uð . ô .ð8�u˜S %˜ZÑ(ð 8¨Sõ 8r0   