+
    ‰4i6  ã                   óB  € R t ^ RIt^ RIHtHt ^ RIHtHt ^ RI	H
t
HtHtHt ^ RIHt R/ R/ R/ R	/ /t ! R
 R]P"                  4      t ! R R]4      t ! R R]4      t ! R R]4      t ! R R]4      t ! R R]4      t ! R R]4      tR tRR ltR tR t]! 4        R# )a  
Routines for accessing data published by IANA (Internet Assigned Numbers
Authority).

More details can be found at the following URLs :-

    - IANA Home Page - http://www.iana.org/
    - IEEE Protocols Information Home Page - http://www.iana.org/protocols/
N)Úmake_parserÚhandler)Ú	PublisherÚ
Subscriber)Ú	IPAddressÚ	IPNetworkÚIPRangeÚcidr_abbrev_to_verbose)Ú_open_binaryÚIPv4ÚIPv6ÚIPv6_unicastÚ	multicastc                   ó<   a € ] tR t^1t o RR ltR tR tR tRtV t	R# )ÚSaxRecordParserNc                óf   € ^ V n         RV n        RV n        RV n        RV n        RV n        Wn        R# )é    FN)Ú_levelÚ
_is_activeÚ_recordÚ
_tag_levelÚ_tag_payloadÚ_tag_feedingÚ	_callback)ÚselfÚcallbacks   &&Ú1/usr/lib/python3/dist-packages/netaddr/ip/iana.pyÚ__init__ÚSaxRecordParser.__init__2   s3   € ØˆŒØˆŒØˆŒØˆŒØ ˆÔØ ˆÔØ!Žó    c                ó  € V ;P                   ^,          un         V P                  RJ dJ   VR8X  dA   RV n        V P                   V n        / V n        RV9   d   VR,          V P                  R&   R# R# R# V P                   V P                  ^,           8X  dg   VR8X  dP   RV9   dG   RV9   d>   V P                  P	                  VR,          . 4      pVP                  VR,          4       R# R# R# . V n        RV n        R# RV n        R# )	é   FÚrecordTÚdateÚxrefÚtypeÚdataN)r   r   r   r   Ú
setdefaultÚappendr   r   )r   ÚnameÚattrsÚls   &&& r   ÚstartElementÚSaxRecordParser.startElement;   sÖ   € Ø�Š�qÕ�à�?‰?˜eÓ#Ø�xÔØ"&�”Ø"&§+¡+�”Ø!�”Ø˜U”?Ø+0°­=�D—L‘L Ó(ñ #ñ	  ð �[‰[˜DŸO™O¨aÕ/Ô/Ø�vŒ~Ø˜U”? v°¤ØŸ™×/Ñ/°°fµ¸rÓB�AØ—H‘H˜U 6�]Ö+ñ (7‘?ð %'�Ô!Ø$(�Ö!à %ˆDÖr   c                óô  € V P                   R J dÏ   VR8X  di   V P                  V P                  8X  dN   RV n         RV n        \        V P                  R4      '       d   V P	                  V P
                  4       RV n        M_V P                  V P                  ^,           8X  d>   VR8w  d7   RP                  V P                  4      V P
                  V&   RV n        RV n        V ;P                  ^,          un        R# )Tr"   FNÚ__call__r$   Ú )	r   r   r   Úhasattrr   r   Újoinr   r   )r   r)   s   &&r   Ú
endElementÚSaxRecordParser.endElementP   s²   € Ø�?‰?˜dÓ"Ø�xÔ D§O¡O°t·{±{Ô$BØ"'�”Ø"&�”Ü˜4Ÿ>™>¨:×6Ò6Ø—N‘N 4§<¡<Ô0Ø#�•Ø—‘ §¡°!Õ 3Ô3Ø˜6”>Ø)+¯©°×1BÑ1BÓ)C�D—L‘L Ñ&Ø(,�DÔ%Ø(-�DÔ%à�Š�qÕ�r   c                ó`   € V P                   R J d   V P                  P                  V4       R# R# )TN)r   r   r(   )r   Úcontents   &&r   Ú
charactersÚSaxRecordParser.characters`   s)   € Ø×Ñ Ó$Ø×Ñ×$Ñ$ WÖ-ñ %r   )r   r   r   r   r   r   r   ©N)
Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__r   r,   r3   r7   Ú__static_attributes__Ú__classdictcell__©Ú__classdict__s   @r   r   r   1   s   ø‡ € ô"ò&ò*÷ .ð .r   r   c                   óH   a a€ ] tR t^et oRtV 3R ltR tR tR tRt	Vt
V ;t# )ÚXMLRecordParserzH
A configurable Parser that understands how to parse XML based records.
c                óè   <€ \         \        V `  4        \        4       V n        V P                  P                  \        V P                  4      4       Wn        V P                  P                  V4       R# )zH
Constructor.

fh - a valid, open file handle to XML based record data.
N)ÚsuperrC   r   r   Ú	xmlparserÚsetContentHandlerr   Úconsume_recordÚfhÚ__dict__Úupdate©r   rI   ÚkwargsÚ	__class__s   &&,€r   r   ÚXMLRecordParser.__init__j   sO   ø€ ô 	Œo˜tÑ-Ô/ä$›ˆŒØ�‰×(Ñ(¬¸×9LÑ9LÓ)MÔNàŒà�‰×Ñ˜VÖ$r   c                ó   € V# )zë
This is the callback method invoked for every record. It is usually
over-ridden by base classes to provide specific record-based logic.

Any record can be vetoed (not passed to registered Subscriber objects)
by simply returning None.
© )r   Úrecs   &&r   Úprocess_recordÚXMLRecordParser.process_recordy   s	   € ð ˆ
r   c                óV   € V P                  V4      pVe   V P                  V4       R # R # r9   )rS   Únotify©r   rR   r"   s   && r   rH   ÚXMLRecordParser.consume_recordƒ   s)   € Ø×$Ñ$ SÓ)ˆØÒØ�K‰K˜Öñ r   c                óP   € V P                   P                  V P                  4       R# )zg
Parse and normalises records, notifying registered subscribers with
record data as it is encountered.
N)rF   ÚparserI   )r   s   &r   rZ   ÚXMLRecordParser.parseˆ   s   € ð
 	�‰×Ñ˜TŸW™WÖ%r   )rI   rF   )r:   r;   r<   r=   Ú__doc__r   rS   rH   rZ   r>   r?   Ú__classcell__©rN   rA   s   @@r   rC   rC   e   s#   ù‡ € ñõ%òò ÷
&ò &r   rC   c                   ó<   a a€ ] tR t^�t oRtV 3R ltR tRtVtV ;t	# )Ú
IPv4Parserzã
A XMLRecordParser that understands how to parse and retrieve data records
from the IANA IPv4 address space file.

It can be found online here :-

    - http://www.iana.org/assignments/ipv4-address-space/ipv4-address-space.xml
c                ó.   <€ \         \        V `  V4       R# )zw
Constructor.

fh - a valid, open file handle to an IANA IPv4 address space file.

kwargs - additional parser options.
N)rE   r`   r   rL   s   &&,€r   r   ÚIPv4Parser.__init__š   ó   ø€ ô 	Œj˜$Ñ(¨Ö,r   c                ó6  € / pR F.  p\        VP                  VR4      4      P                  4       W#&   K0  	  RVR,          9   d;   VR,          P                  R4      w  rER\	        V4      \	        V4      3,          VR&   VR,          P                  4       VR&   V# )úT
Callback method invoked for every record.

See base class method for more details.
ÚprefixÚstatusr0   Ú/z%d/%d)rf   Údesignationr#   Úwhoisrg   )ÚstrÚgetÚstripÚsplitÚintÚ
capitalize)r   rR   r"   ÚkeyÚoctetrf   s   &&    r   rS   ÚIPv4Parser.process_record¤   s“   € ð ˆÛGˆCÜ˜cŸg™g c¨2Ó.Ó/×5Ñ5Ó7ˆF‹Kñ Hð �&˜Õ"Ô"Ø$ XÕ.×4Ñ4°SÓ9‰OˆUØ&¬#¨e«*´c¸&³kÐ)BÕBˆF�8Ñà! (Õ+×6Ñ6Ó8ˆˆxÑàˆr   rQ   ©
r:   r;   r<   r=   r\   r   rS   r>   r?   r]   r^   s   @@r   r`   r`   �   s   ù‡ € ñõ-÷ò r   r`   c                   ó<   a a€ ] tR t^¹t oRtV 3R ltR tRtVtV ;t	# )Ú
IPv6Parserzã
A XMLRecordParser that understands how to parse and retrieve data records
from the IANA IPv6 address space file.

It can be found online here :-

    - http://www.iana.org/assignments/ipv6-address-space/ipv6-address-space.xml
c                ó.   <€ \         \        V `  V4       R# ©zw
Constructor.

fh - a valid, open file handle to an IANA IPv6 address space file.

kwargs - additional parser options.
N)rE   rv   r   rL   s   &&,€r   r   ÚIPv6Parser.__init__Ã   rc   r   c                ó  € R\        VP                  RR4      4      P                  4       R\        VP                  RR4      4      P                  4       R\        VP                  RR.4      R,          4      P                  4       /pV# )re   rf   r0   Ú
allocationÚdescriptionÚ	referenceÚrfcéÿÿÿÿ©rk   rl   rm   rW   s   && r   rS   ÚIPv6Parser.process_recordÍ   su   € ð ”c˜#Ÿ'™' (¨BÓ/Ó0×6Ñ6Ó8Øœ#˜cŸg™g m°RÓ8Ó9×?Ñ?ÓAð œ˜SŸW™W U¨R¨DÓ1°"Õ5Ó6×<Ñ<Ó>ð

ˆð ˆr   rQ   rt   r^   s   @@r   rv   rv   ¹   s   ù‡ € ñõ-÷ò r   rv   c                   ó<   a a€ ] tR t^ãt oRtV 3R ltR tRtVtV ;t	# )ÚIPv6UnicastParsera  
A XMLRecordParser that understands how to parse and retrieve data records
from the IANA IPv6 unicast address assignments file.

It can be found online here :-

    - http://www.iana.org/assignments/ipv6-unicast-address-assignments/ipv6-unicast-address-assignments.xml
c                ó.   <€ \         \        V `  V4       R# rx   )rE   rƒ   r   rL   s   &&,€r   r   ÚIPv6UnicastParser.__init__í   s   ø€ ô 	Ô Ñ/°Ö3r   c                ó¤  € R\        VP                  RR4      4      P                  4       R\        VP                  RR4      4      P                  4       R\        VP                  RR4      4      P                  4       R\        VP                  RR4      4      P                  4       R\        VP                  RR4      4      P                  4       /pV# )re   rg   r0   r|   rf   r#   rj   r€   rW   s   && r   rS   Ú IPv6UnicastParser.process_record÷   s¨   € ð ”c˜#Ÿ'™' (¨BÓ/Ó0×6Ñ6Ó8Øœ3˜sŸw™w }°bÓ9Ó:×@Ñ@ÓBØ”c˜#Ÿ'™' (¨BÓ/Ó0×6Ñ6Ó8Ø”C˜Ÿ™ ¨Ó+Ó,×2Ñ2Ó4Ø”S˜Ÿ™ ¨"Ó-Ó.×4Ñ4Ó6ð
ˆð ˆr   rQ   rt   r^   s   @@r   rƒ   rƒ   ã   s   ù‡ € ñõ4÷ò r   rƒ   c                   óB   a a€ ] tR tRt oRtV 3R ltR tR tRtVt	V ;t
# )ÚMulticastParseri  zÑ
A XMLRecordParser that knows how to process the IANA IPv4 multicast address
allocation file.

It can be found online here :-

    - http://www.iana.org/assignments/multicast-addresses/multicast-addresses.xml
c                ó.   <€ \         \        V `  V4       R# )z‹
Constructor.

fh - a valid, open file handle to an IANA IPv4 multicast address
     allocation file.

kwargs - additional parser options.
N)rE   r‰   r   rL   s   &&,€r   r   ÚMulticastParser.__init__  s   ø€ ô 	Œo˜tÑ-¨bÖ1r   c                óJ  € RV9   d½   VP                  R4      w  r#VP                  4       P                  R4      pVP                  4       P                  R4      pRP                  V Uu. uF  p\        \	        V4      4      NK  	  up4      : RRP                  V Uu. uF  p\        \	        V4      4      NK  	  up4      : 2# VP                  4       P                  R4      pRP                  V Uu. uF  p\        \	        V4      4      NK  	  up4      # u upi u upi u upi )zH
Removes variations from address entries found in this particular file.
Ú-Ú.)rn   rm   r2   rk   ro   )r   ÚaddrÚa1Úa2Úo1Úo2Úis   &&     r   Únormalise_addrÚMulticastParser.normalise_addr  sá   € ð �$Œ;Ø—z‘z #“‰HˆRØ—‘“×!Ñ! #Ó&ˆBØ—‘“×!Ñ! #Ó&ˆBà—‘©rÓ2©r¨!œ#œc !›fž+©rÑ2Ö3Ø—‘©rÓ2©r¨!œ#œc !›fž+©rÑ2Õ3ðð ð
 —‘“×#Ñ# CÓ(ˆBØ—8‘8±"Ó5±"¨QœS¤ Q£ž[±"Ñ5Ó6Ð6ùò 3ùÚ2ùò 6s   Á(DÂDÃ2D c           	     ó”   € RV9   dA   RV P                  \        VR,          4      4      R\        VP                  RR4      4      /pV# R# )re   r�   ÚaddressÚdescrr|   r0   N)r•   rk   rl   rW   s   && r   rS   ÚMulticastParser.process_record-  sL   € ð �SŒ=à˜4×.Ñ.¬s°3°vµ;Ó/?Ó@Øœ˜SŸW™W ]°BÓ7Ó8ðˆFð ˆMñ r   rQ   )r:   r;   r<   r=   r\   r   r•   rS   r>   r?   r]   r^   s   @@r   r‰   r‰     s   ù‡ € ñõ	2ò7÷ ò r   r‰   c                   ó0   a € ] tR tRt o RtR tR tRtV tR# )ÚDictUpdateri<  zW
Concrete Subscriber that inserts records received from a Publisher into a
dictionary.
c                ó*   € Wn         W n        W0n        R# )zÉ
Constructor.

dct - lookup dict or dict like object to insert records into.

topic - high-level category name of data to be processed.

unique_key - key name in data dict that uniquely identifies it.
N©ÚdctÚtopicÚ
unique_key)r   rŸ   r    r¡   s   &&&&r   r   ÚDictUpdater.__init__B  s   € ð ŒØŒ
Ø$Žr   c                óP  € WP                   ,          pV P                  R8X  d%   \        \        V4      4      pWP                  V&   R# V P                  R8X  d%   \        \        V4      4      pWP                  V&   R# V P                  R8X  d   \        V4      pWP                  V&   R# V P                  R8X  dm   RpRV9   dI   VP                  R4      w  rV\        WV4      pVP                  4       p\        V4      ^8X  d
   V^ ,          pM\        V4      pWP                  V&   R# R# )z–
Callback function used by Publisher to notify this Subscriber about
an update. Stores topic based information into dictionary passed to
constructor.
r   r   r   r   Nr�   )
r¡   r    r   r	   rŸ   rn   r   ÚcidrsÚlenr   )r   r&   Údata_idÚcidrÚiprangeÚfirstÚlastr¤   s   &&      r   rK   ÚDictUpdater.updateP  sì   € ð —‘Õ'ˆà�:‰:˜ÔÜÔ3°GÓ<Ó=ˆDØ!�H‰H�T‹NØ�Z‰Z˜6Ô!ÜÔ3°GÓ<Ó=ˆDØ!�H‰H�T‹NØ�Z‰Z˜>Ô)Ü˜WÓ%ˆDØ!�H‰H�T‹NØ�Z‰Z˜;Ô&ØˆGØ�gŒ~à '§¡¨cÓ 2‘�Ü! %Ó.�ØŸ™›�Ü�u“: ”?Ø# A�h�Gøä# GÓ,�Ø $�H‰H�WÓñ 'r   rž   N)	r:   r;   r<   r=   r\   r   rK   r>   r?   r@   s   @r   rœ   rœ   <  s   ø‡ € ñò
%÷%ð %r   rœ   c                 ó†  € \        \        \        R4      4      p V P                  \	        \
        R,          RR4      4       V P                  4        \        \        \        R4      4      pVP                  \	        \
        R,          RR4      4       VP                  4        \        \        \        R4      4      pVP                  \	        \
        R,          RR4      4       VP                  4        \        \        \        R4      4      pVP                  \	        \
        R	,          R	R
4      4       VP                  4        R# )zX
Parse and load internal IANA data lookups with the latest information from
data files.
zipv4-address-space.xmlr   rf   zipv6-address-space.xmlr   z$ipv6-unicast-address-assignments.xmlr   zmulticast-addresses.xmlr   r˜   N)
r`   r
   Ú__package__Úattachrœ   Ú	IANA_INFOrZ   rv   rƒ   r‰   )Úipv4Úipv6Úipv6uaÚmcasts       r   Ú	load_infor´   o  sÝ   € ô
 ”l¤;Ð0HÓIÓJ€DØ‡K�K”œI fÕ-¨v°xÓ@ÔAØ‡J�J„Lä”l¤;Ð0HÓIÓJ€DØ‡K�K”œI fÕ-¨v°xÓ@ÔAØ‡J�J„LäÜ”[Ð"HÓIó€Fð ‡M�M”+œi¨Õ7¸ÈÓRÔSØ
‡L�L„NäœL¬Ð6OÓPÓQ€EØ	‡L�L”œY {Õ3°[À)ÓLÔMØ	‡K�K†Mr   c                óÄ  € V f   \         P                  p \        \        4       F¸  pV P	                  R\        V4      ,          R,           4       V P	                  VR,           4       V P	                  R\        V4      ,          R,           4       \        V,          p\        V4       F1  pW#,          pV P	                  RV,          V,           R,           4       K3  	  Kº  	  R# )z/
Pretty prints IANA information to filehandle.
Nr�   Ú
z%-45r)Ú_sysÚstdoutÚsortedr¯   Úwriter¥   )rI   ÚcategoryÚiprangesr¨   Údetailss   &    r   Úpprint_infor¾   ‡  s¡   € ð 
‚zÜ�[‰[ˆäœ9Ö%ˆØ
�‰�”s˜8“}Õ$ tÕ+Ô,Ø
�‰�˜D•Ô!Ø
�‰�”s˜8“}Õ$ tÕ+Ô,Ü˜XÕ&ˆÜ˜hÖ'ˆGØÕ'ˆGØ�H‰H�W Õ(¨7Õ2°TÕ9Ö:ó (ó &r   c                 óz   € \        VR 4      '       d   W9   # \        VR4      '       d   W8H  # \        RV: R24      h)r©   Úvaluez!Unsupported IP range or address: Ú!)r1   Ú	Exception)ÚipÚip_ranges   &&r   Ú_within_boundsrÅ   ˜  s:   € äˆx˜×!Ò!à‰~ÐÜ	�˜7×	#Ò	#à‰~Ðå
»hÐHÓ
IÐIr   c                ó†  € / pV P                   ^8X  dÛ   \        R,          P                  4        FB  w  r#\        W4      '       g   K  VP	                  R. 4       VR,          P                  V4       KD  	  V P                  4       '       db   \        R,          P                  4        FB  w  rC\        W4      '       g   K  VP	                  R. 4       VR,          P                  V4       KD  	  V# V P                   ^8X  dÃ   \        R,          P                  4        FB  w  r#\        W4      '       g   K  VP	                  R. 4       VR,          P                  V4       KD  	  \        R,          P                  4        FB  w  r#\        W4      '       g   K  VP	                  R. 4       VR,          P                  V4       KD  	  V# )z7Returns informational data specific to this IP address.r   r   Ú	Multicastr   r   )Úversionr¯   ÚitemsrÅ   r'   r(   Úis_multicast)Úip_addrÚinfor§   r"   r¨   s   &    r   ÚqueryrÍ   ¤  sY  € à€Dà‡�˜!ÔÜ% fÕ-×3Ñ3Ö5‰LˆDÜ˜g×,Ô,Ø—‘ ¨Ô+Ø�V•×#Ñ# FÖ+ñ 6ð
 ×Ñ×!Ò!Ü#,¨[Õ#9×#?Ñ#?Ö#A‘�Ü! '×3Ô3Ø—O‘O K°Ô4Ø˜Õ%×,Ñ,¨VÖ4ñ $Bð  €Kð 
�‰˜AÔ	Ü% fÕ-×3Ñ3Ö5‰LˆDÜ˜g×,Ô,Ø—‘ ¨Ô+Ø�V•×#Ñ# FÖ+ñ 6ô
 & nÕ5×;Ñ;Ö=‰LˆDÜ˜g×,Ô,Ø—‘ °Ô3Ø�^Õ$×+Ñ+¨FÖ3ñ >ð
 €Kr   r9   )r\   Úsysr·   Úxml.saxr   r   Únetaddr.corer   r   Ú
netaddr.ipr   r   r   r	   Únetaddr.compatr
   r¯   ÚContentHandlerr   rC   r`   rv   rƒ   r‰   rœ   r´   r¾   rÅ   rÍ   rQ   r   r   Ú<module>rÔ      s¸   ðñ,ó ß (ç .ß LÓ LÝ 'ð
 ˆBØ
ˆBØ�BØ�ð	€	ô1.�g×,Ñ,ô 1.ôh(&�iô (&ôV&�ô &ôR'�ô 'ôT"˜ô "ôJ1�oô 1ôh0%�*ô 0%òfô0;ò"	Jòñ> 
†r   