403Webshell
Server IP : 121.121.20.254  /  Your IP : 216.73.217.51
Web Server : Microsoft-IIS/10.0
System : Windows NT WEB-SERVER 10.0 build 20348 (Windows Server 2022) AMD64
User : IUSR ( 0)
PHP Version : 8.3.28
Disable Function : NONE
MySQL : ON  |  cURL : ON  |  WGET : OFF  |  Perl : OFF  |  Python : OFF  |  Sudo : OFF  |  Pkexec : OFF
Directory :  C:/Python313/Lib/test/__pycache__/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : C:/Python313/Lib/test/__pycache__/test_ipaddress.cpython-313.opt-2.pyc
�

��i��� �SSKrSSKrSSKrSSKrSSKrSSKrSSKrSSKrSSKJ	r	 SSK
JrJr "SS\R5r"SS5r"SS	\5r"S
S\5r"SS
\\5r"SS\\5r"SS\5r"SS\\5r"SS\\5r"SS\5r"SS\\5r"SS\\5r"SS\5r"SS\R5r"S S!\R5r\S":Xa\R<"5 gg)#�N)�Iterator)�LARGEST�SMALLESTc�Z�\rSrSr\S5r\RS5rSr	Sr
SrSrg)	�BaseTestCase�c��[e�N)�NotImplementedError��selfs �(C:\Python313\\Lib\test\test_ipaddress.py�factory�BaseTestCase.factory&s��!�!�c'�# �U(aX#-nURX5nUnUv� SSS5 WRRb&URURR5 gg!,(df   NL=f7fr
)�assertRaisesRegex�	exception�__context__�
assertTrue�__suppress_context__)r
�exc_type�details�args�cm�excs      r�assertCleanError�BaseTestCase.assertCleanError*sd�����n�G�
�
#�
#�H�
6��
�3��I���=�=�$�$�0��O�O�C�M�M�>�>�?�1��R�s�A=�A,�AA=�,
A:�6A=c�F�UR"[RU/UQ76$r
)r�	ipaddress�AddressValueError�r
rrs   r�assertAddressError�BaseTestCase.assertAddressError:�(���$�$�Y�%@�%@�%,�5�/3�5�	5rc�F�UR"[RU/UQ76$r
)rr �NetmaskValueErrorr"s   r�assertNetmaskError�BaseTestCase.assertNetmaskError?r%rc�d�URURU5URU55 gr
)�assertEqualr�r
�lhs�rhss   r�assertInstancesEqual�!BaseTestCase.assertInstancesEqualDs$��������c�*�D�L�L��,=�>r�N)
�__name__�
__module__�__qualname__�__firstlineno__�propertyr�
contextlib�contextmanagerrr#r(r/�__static_attributes__r1rrrrsA��&�"��"����
@��
@�5�
5�
?rrc�,�\rSrSrSrSrSrSrSrg)�CommonTestMixin�Ic�|�URS5 URS5 SSS5 g!,(df   g=f)N�Address cannot be empty��r#rrs r�test_empty_address�"CommonTestMixin.test_empty_addressKs*��
�
$�
$�%>�
?��L�L���@�
?�
?�s�-�
;c��UR[R"[S555 UR	S5 SSS5 g!,(df   g=f)Nz1.0g�?)r#�re�escape�reprrrs r�test_floats_rejected�$CommonTestMixin.test_floats_rejectedOs5��
�
$�
$�R�Y�Y�t�E�{�%;�
<��L�L���=�
<�
<�s�A
�

Ac��UR[[RUR	S55 UR[[
UR	S55 UR[[UR	S55 g)N�)�assertRaises�	TypeError�operator�indexr�hex�bytesrs r�test_not_an_index_issue15559�,CommonTestMixin.test_not_an_index_issue15559SsV��	
���)�X�^�^�T�\�\�!�_�E����)�S�$�,�,�q�/�:����)�U�D�L�L��O�<rc�6�[[RS-5HgnURUS9 UR	U5n[R
"[R"X255nURXC5 SSS5 Mi g!,(df   M{=f)NrJ)�proto)�range�pickle�HIGHEST_PROTOCOL�subTestr�loads�dumpsr+)r
�addrrT�x�ys     r�pickle_test�CommonTestMixin.pickle_testZsl���6�2�2�Q�6�7�E����E��*��L�L��&���L�L����a�!7�8��� � ��&�+�*�8�*�*�s�A
B	�	
B	r1N)	r2r3r4r5rArGrQr^r9r1rrr;r;Is����=�'rr;c�8�\rSrSrSrSrSrSrSrSr	Sr
g	)
�CommonTestMixin_v4�bc���Sn/SQnUHFnURUS9 URU5 URU5 SSS5 SSS5 MH g!,(df   N=f!,(df   Mk=f)Nz(Leading zeros are not permitted in '\d+')z000.000.000.000z192.168.000.001z016.016.016.016z001.000.008.016z	01.2.3.40z	1.02.3.40z	1.2.03.40z	1.2.3.040)�address)rXr#r)r
�msg�	addressesrds    r�test_leading_zeros�%CommonTestMixin_v4.test_leading_zerosds_��9��	
�	�!�G����g��.��,�,�S�1��L�L��)�2�/�.�!�1�1��/�.�s!�A%�A�A%�
A"�A%�%
A4	c�L�URSS5 URSS5 g)Nr�0.0.0.0�P�192.168.0.1�r/rs r�test_int�CommonTestMixin_v4.test_intvs"���!�!�!�Y�/��!�!�*�m�<rc��UR[RS5S5 UR[RS5S5 g)N�00000000rj�c0a80001rl)r/rP�fromhexrs r�test_packed�CommonTestMixin_v4.test_packedzs4���!�!�%�-�-�
�";�Y�G��!�!�%�-�-�
�";�]�Krc��SnUR[R"U55 URS5 SSS5 g!,(df   g=f)Nz,-1 (< 0) is not permitted as an IPv4 address����r#rDrEr�r
res  r�test_negative_ints_rejected�.CommonTestMixin_v4.test_negative_ints_rejected~�5��<��
�
$�
$�R�Y�Y�s�^�
4��L�L���5�
4�
4���A�
Ac��SnUR[R"US-55 URS5 SSS5 g!,(df   g=f)Nz1%d (>= 2**32) is not permitted as an IPv4 addresslrxrys  r�test_large_ints_rejected�+CommonTestMixin_v4.test_large_ints_rejected�s:��A��
�
$�
$�R�Y�Y�s�U�{�%;�
<��L�L���=�
<�
<�s�A�
Ac�2^�U4SjnU"S5 U"S5 g)Nc�>�SU-nSnTR[R"X!U4-55 TRU5 SSS5 g!,(df   g=f)N�z4%r (len %d != 4) is not permitted as an IPv4 addressrx��lengthr[rer
s   �r�assertBadLength�BCommonTestMixin_v4.test_bad_packed_length.<locals>.assertBadLength�sH����6�>�D�H�C��(�(����3���3G�)H�I����T�"�J�I�I�s�A
�
A��r1�r
r�s` r�test_bad_packed_length�)CommonTestMixin_v4.test_bad_packed_length�s���	#�	�����rr1N)r2r3r4r5rgrnrtrzrr�r9r1rrrarabs!��*�$=�L��
 �
rrac�D�\rSrSrSrSrSrSrSrSr	Sr
S	rS
rg)�CommonTestMixin_v6�c�L�URSS5 URSS5 g)Nz
0000::0000�::z000::c0a8:0001�::c0a8:1rmrs rrg�%CommonTestMixin_v6.test_leading_zeros�s#���!�!�,��5��!�!�"2�J�?rc�L�URSS5 URSS5 g)Nrr�rkr�rmrs rrn�CommonTestMixin_v6.test_int�s"���!�!�!�T�*��!�!�*�j�9rc��S[RS5-nURUS5 S[RS5-nURUS5 [RS5S-nURUS5 g)Nsrqr�rrr�zc0a8:1::)rPrsr/�r
r[s  rrt�CommonTestMixin_v6.test_packed�sk���%�-�-�
�3�3���!�!�$��-��%�-�-�
�3�3���!�!�$�
�3��}�}�Z�(�8�3���!�!�$�
�3rc��SnUR[R"U55 URS5 SSS5 g!,(df   g=f)Nz,-1 (< 0) is not permitted as an IPv6 addressrwrxrys  rrz�.CommonTestMixin_v6.test_negative_ints_rejected�r|r}c��SnUR[R"USS--55 URSS-5 SSS5 g!,(df   g=f)Nz2%d (>= 2**128) is not permitted as an IPv6 address��rxrys  rr�+CommonTestMixin_v6.test_large_ints_rejected�sB��B��
�
$�
$�R�Y�Y�s�Q��V�|�%<�
=��L�L��C�� �>�
=�
=�s�A�
Ac�2^�U4SjnU"S5 U"S5 g)Nc��>�SU-nSnTR[R"X!U4-55 TRU5 TRU5 SSS5 g!,(df   g=f)Nr�z5%r (len %d != 16) is not permitted as an IPv6 addressrxr�s   �rr��BCommonTestMixin_v6.test_bad_packed_length.<locals>.assertBadLength�sT����6�>�D�I�C��(�(����3���3G�)H�I����T�"����T�"�J�I�I�s�#A�
A,��r1r�s` rr��)CommonTestMixin_v6.test_bad_packed_length�s���	#�	�����rc��SnURSU5 URU5 SSS5 g!,(df   g=f)Nz::1%�Invalid IPv6 address: "%r"r@�r
rds  r�test_blank_scope_id�&CommonTestMixin_v6.test_blank_scope_id�s1����
�
$�
$�%A�7�
K��L�L��!�L�
K�
K���0�
>c��SnURSU5 URU5 SSS5 g!,(df   g=f)Nz
::1%scope%r�r@r�s  r�"test_invalid_scope_id_with_percent�5CommonTestMixin_v6.test_invalid_scope_id_with_percent�s1����
�
$�
$�%A�7�
K��L�L��!�L�
K�
K�r�r1N)
r2r3r4r5rgrnrtrzrr�r�r�r9r1rrr�r��s+��@�:�4��
!�
	�"�
"rr�c�h�\rSrSr\R
rSrSrSr	Sr
SrSrSr
S	rS
rSrSrg
)�AddressTestCase_v4��c��[R"S5n/SQnUH up4URU[X55 M" g)N�1.2.3.42))�b� 00000001000000100000001100101010)�nr�)r\�0102032a)�X�0102032A)�_b�'0000_0001_0000_0010_0000_0011_0010_1010)�_nr�)�_x�	0102_032a)�_X�	0102_032A)�#b�"0b00000001000000100000001100101010)�#nr�)�#x�
0x0102032a)�#X�
0X0102032A)�#_b�)0b0000_0001_0000_0010_0000_0011_0010_1010)�#_nr�)�#_x�0x0102_032a)�#_X�0X0102_032A)�sr�)r?r�)r �IPv4Addressr+�format)r
�v4�v4_pairs�fmt�txts     r�test_format�AddressTestCase_v4.test_format�s;��
�
"�
"�:�
.��
��(#�J�S����S�&��/�2�#rc��SnURSU5 [R"U5 SSS5 g!,(df   g=f)Nz127.0.0.1/24�Unexpected '/' in %r�r#r r�r�s  r�test_network_passed_as_address�1AddressTestCase_v4.test_network_passed_as_address�s3����
�
$�
$�%;�T�
B��!�!�$�'�C�
B�
B��	�5�
Ac�^�U4SjnU"S5 U"S5 U"S5 U"S5 U"S5 U"S5 U"S5 U"S	5 U"S
5 U"S5 U"S5 U"S
5 U"S5 U"S5 U"S5 U"S5 U"S5 U"S5 U"S5 U"S5 U"S5 U"S5 U"S5 g)Nc�>�TRSU5 [R"U5 SSS5 g!,(df   g=f)NzExpected 4 octets in %rr��r[r
s �r�assertBadSplit�AAddressTestCase_v4.test_bad_address_split.<locals>.assertBadSplit�s/����(�(�)B�D�I��%�%�d�+�J�I�I��	�4�
Az127.0.1z42.42.42.42.42z42.42.42z42.42�42z42..42.42.42z42.42.42.42.z42.42.42.42...z.42.42.42.42z...42.42.42.42z016.016.016z016.016�016�000z0x0a.0x0a.0x0az	0x0a.0x0a�0x0a�.�bogusz	bogus.com�1000�1000000000000000z192.168.0.1.comr1�r
r�s` r�test_bad_address_split�)AddressTestCase_v4.test_bad_address_split�s����	,�	�y�!��'�(��z�"��w���t���~�&��~�&��'�(��~�&��'�(��}�%��y�!��u���u���'�(��{�#��v���s���w���{�#��v���)�*��(�)rc�2^�U4SjnU"S5 U"S5 g)Nc�>�TRSU5 [R"U5 SSS5 g!,(df   g=f)NzEmpty octet not permitted in %rr�r�s �r�assertBadOctet�;AddressTestCase_v4.test_empty_octet.<locals>.assertBadOctets5����(�(�)J�)-�/��%�%�d�+�/�/�/�r�z	42..42.42z...r1�r
r�s` r�test_empty_octet�#AddressTestCase_v4.test_empty_octets���	,�
	�{�#��u�rc�^�U4SjnU"SS5 U"SS5 U"SS5 U"SS	5 U"S
S5 U"SS
5 U"SS5 U"SS5 U"SS5 g)Nc��>�SU<SU<3nTR[R"U55 [R"U5 SSS5 g!,(df   g=f)Nz!Only decimal digits permitted in � in �r#rDrEr r��r[�octetrer
s   �rr��BAddressTestCase_v4.test_invalid_characters.<locals>.assertBadOctets=���AF��M�C��(�(����3��8��%�%�d�+�9�8�8�s�A�
Az0x0a.0x0a.0x0a.0x0ar�z0xa.0x0a.0x0a.0x0a�0xaz42.42.42.-0�-0z42.42.42.+0�+0z42.42.42.-42z-42z
+1.+2.+3.4�+1z	1.2.3.4e0�4e0�	1.2.3.4::z4::�1.a.2.3�ar1r�s` r�test_invalid_characters�*AddressTestCase_v4.test_invalid_characterssf���	,�
	�,�f�5��+�U�3��}�d�+��}�d�+��~�u�-��|�T�*��{�E�*��{�E�*��y�#�&rc�6^�U4SjnU"SS5 U"SS5 g)Nc�>�SnTR[R"X!U4-55 [R"U5 SSS5 g!,(df   g=f)Nz*At most 3 characters permitted in %r in %rr�r�s   �rr��<AddressTestCase_v4.test_octet_length.<locals>.assertBadOctetsA���>�C��(�(����3���3F�)G�H��%�%�d�+�I�H�H���A
�
Az0000.000.000.000�0000z12345.67899.-54321.-98765�12345r1r�s` r�test_octet_length�$AddressTestCase_v4.test_octet_lengths ���	,�
	�)�6�2��2�G�<rc�6^�U4SjnU"SS5 U"SS5 g)Nc�>�SX4-nTR[R"U55 [R"U5 SSS5 g!,(df   g=f)Nz$Octet %d (> 255) not permitted in %rr�r�s   �rr��;AddressTestCase_v4.test_octet_limit.<locals>.assertBadOctet%s?���8�E�=�H�C��(�(����3��8��%�%�d�+�9�8�8�r	z	257.0.0.0iz
192.168.0.999i�r1r�s` r�test_octet_limit�#AddressTestCase_v4.test_octet_limit$s���	,�
	�{�C�(����,rc�&�URS5 g�N�	192.0.2.1�r^rs r�test_pickle�AddressTestCase_v4.test_pickle-s������%rc�N�[R"URS55 gr��weakref�refrrs r�test_weakref�AddressTestCase_v4.test_weakref0s�����D�L�L��-�.rc��UR[R"S5R[R"S55 UR[R"S5R[R"S55 UR[R"S5RR
[R"S55 g)N�192.168.1.1�::ffff:192.168.1.1�::ffff:c0a8:101)r+r r��ipv6_mapped�IPv6Address�ipv4_mappedrs r�test_ipv6_mapped�#AddressTestCase_v4.test_ipv6_mapped3s�������.�.�}�=�I�I�"�.�.�/C�D�	F�����.�.�}�=�I�I�"�.�.�/@�A�	C�����.�.�}�=�I�I�U�U�"�.�.�}�=�	?rr1N)r2r3r4r5r r�rr�r�r�r�rrrrrr&r9r1rrr�r��s?���#�#�G�3�2(�
*�:�'� =�-�&�/�?rr�c��\rSrSr\R
rSrSrSr	Sr
SrSrSr
S	rS
rSrSrS
rSrSrSrSrSrg)�AddressTestCase_v6i<c��[R"S5n/SQnUH up4URU[X55 M" g)Nz
::1.2.3.42))r�ڀ00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000100000001100101010)r�� 0000000000000000000000000102032a)r\r,)r�� 0000000000000000000000000102032A)r�ڟ0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0001_0000_0010_0000_0011_0010_1010)r��'0000_0000_0000_0000_0000_0000_0102_032a)r�r/)r��'0000_0000_0000_0000_0000_0000_0102_032A)r�ڂ0b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000100000001100101010)r��"0x0000000000000000000000000102032a)r�r2)r��"0X0000000000000000000000000102032A)r�ڡ0b0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0001_0000_0010_0000_0011_0010_1010)r��)0x0000_0000_0000_0000_0000_0000_0102_032a)r�r5)r��)0X0000_0000_0000_0000_0000_0000_0102_032A)r��	::102:32a)r?r7)r r$r+r�)r
�v6�v6_pairsr�r�s     rr��AddressTestCase_v6.test_format?s<��
�
"�
"�<�
0��!
��F#�J�S����S�&��/�2�#rc�2^�U4SjnU"S5 U"S5 g)Nc�>�SnTRX5 [R"U5 SSS5 g!,(df   g=f)Nr�)r#r r$�r[rer
s  �rr��IAddressTestCase_v6.test_network_passed_as_address.<locals>.assertBadSplitis0���(�C��(�(��3��%�%�d�+�4�3�3�r�z::1/24z::1%scope_id/24r1r�s` rr��1AddressTestCase_v6.test_network_passed_as_addresshs���	,�	�x� ��(�)rc�r^�U4SjnU"S5 U"S5 U"S5 U"S5 U"S5 U"S5 g)Nc�>�SnTRXRS5S5 [R"U5 SSS5 g!,(df   g=f)NzAt least 3 parts expected in %r�%r�r#�splitr r$r=s  �rr��UAddressTestCase_v6.test_bad_address_split_v6_not_enough_parts.<locals>.assertBadSplitqs>���3�C��(�(��j�j��o�a�.@�A��%�%�d�+�B�A�A���A�
A�:z:1z	FEDC:9878z:%scopez:1%scopezFEDC:9878%scoper1r�s` r�*test_bad_address_split_v6_not_enough_parts�=AddressTestCase_v6.test_bad_address_split_v6_not_enough_partsps;���	,�
	�s���t���{�#��y�!��z�"��(�)rc�^�U4SjnU"S5 U"S5 U"S5 U"S5 U"S5 U"S5 U"S5 U"S	5 U"S
5 U"S5 g)Nc�>�SnTRXRS5S5 [R"U5 SSS5 g!,(df   g=f)Nz At most 8 colons permitted in %rrBrrCr=s  �rr��TAddressTestCase_v6.test_bad_address_split_v6_too_many_colons.<locals>.assertBadSplit~�>���4�C��(�(��j�j��o�a�.@�A��%�%�d�+�B�A�A�rFz9:8:7:6:5:4:3::2:1z10:9:8:7:6:5:4:3:2:1z::8:7:6:5:4:3:2:1z8:7:6:5:4:3:2:1::z10:9:8:7:6:5:4:3:42.42.42.42z9:8:7:6:5:4:3::2:1%scopez10:9:8:7:6:5:4:3:2:1%scopez::8:7:6:5:4:3:2:1%scopez8:7:6:5:4:3:2:1::%scopez"10:9:8:7:6:5:4:3:42.42.42.42%scoper1r�s` r�)test_bad_address_split_v6_too_many_colons�<AddressTestCase_v6.test_bad_address_split_v6_too_many_colons}sd���	,�
	�+�,��-�.��*�+��*�+��5�6��1�2��3�4��0�1��0�1��;�<rc�t^�U4SjnSS-S-nU"U5 U"US-5 U"US-5 U"US-5 g)Nc�>�SnTRU[R"USS55 [R"U5 SSS5 g!,(df   g=f)Nz%At most 45 characters expected in '%s�-)r#rDrEr r$r=s  �rr��MAddressTestCase_v6.test_bad_address_split_v6_too_long.<locals>.assertBadSplit�sB���:�C��(�(��b�i�i��S�b�	�.B�C��%�%�d�+�D�C�C�r	z0:i'�0z%zoneidz:255.255.255.255z:ffff:255.255.255.255r1)r
r��	long_addrs`  r�"test_bad_address_split_v6_too_long�5AddressTestCase_v6.test_bad_address_split_v6_too_long�sI���	,��E�\�S�(�	��y�!��y�9�,�-��y�#5�5�6��y�#:�:�;rc�^�U4SjnU"S5 U"S5 U"S5 U"S5 U"S5 U"S5 U"S5 U"S	5 U"S
5 U"S5 g)Nc�>�SnTRXRS5S5 [R"U5 SSS5 g!,(df   g=f)Nz+Exactly 8 parts expected without '::' in %rrBrrCr=s  �rr��SAddressTestCase_v6.test_bad_address_split_v6_too_many_parts.<locals>.assertBadSplit�s>���?�C��(�(��j�j��o�a�.@�A��%�%�d�+�B�A�A�rFz3ffe:0:0:0:0:0:0:0:1z9:8:7:6:5:4:3:2:1z
7:6:5:4:3:2:1z9:8:7:6:5:4:3:42.42.42.42z7:6:5:4:3:42.42.42.42z3ffe:0:0:0:0:0:0:0:1%scopez9:8:7:6:5:4:3:2:1%scopez7:6:5:4:3:2:1%scopez9:8:7:6:5:4:3:42.42.42.42%scopez7:6:5:4:3:42.42.42.42%scoper1r�s` r�(test_bad_address_split_v6_too_many_parts�;AddressTestCase_v6.test_bad_address_split_v6_too_many_parts�sc���	,�
	�-�.��*�+���'��2�3��.�/��3�4��0�1��,�-��8�9��4�5rc�2^�U4SjnU"S5 U"S5 g)Nc�>�SnTRXRS5S5 [R"U5 SSS5 g!,(df   g=f)Nz.Expected at most 7 other parts with '::' in %rrBrrCr=s  �rr��eAddressTestCase_v6.test_bad_address_split_v6_too_many_parts_with_double_colon.<locals>.assertBadSplit�s>���B�C��(�(��j�j��o�a�.@�A��%�%�d�+�B�A�A�rFz1:2:3:4::5:6:7:8z1:2:3:4::5:6:7:8%scoper1r�s` r�:test_bad_address_split_v6_too_many_parts_with_double_colon�MAddressTestCase_v6.test_bad_address_split_v6_too_many_parts_with_double_colon�s���	,�
	�)�*��/�0rc�R^�U4SjnU"S5 U"S5 U"S5 U"S5 U"S5 U"S5 U"S5 U"S	5 U"S
5 U"S5 U"S5 U"S
5 U"S5 U"S5 U"S5 U"S5 U"S5 U"S5 U"S5 U"S5 g)Nc�>�SnTRXRS5S5 [R"U5 SSS5 g!,(df   g=f)Nz At most one '::' permitted in %rrBrrCr=s  �rr��ZAddressTestCase_v6.test_bad_address_split_v6_repeated_double_colon.<locals>.assertBadSplit�rMrFz
3ffe::1::1z1::2::3::4:5z2001::db:::1z	3ffe::1::z	::3ffe::1z:3ffe::1::1z3ffe::1::1:z:3ffe::1::1:z:::z2001:db8:::1z3ffe::1::1%scopez1::2::3::4:5%scopez2001::db:::1%scopez3ffe::1::%scopez::3ffe::1%scopez:3ffe::1::1%scopez3ffe::1::1:%scopez:3ffe::1::1:%scopez	:::%scopez2001:db8:::1%scoper1r�s` r�/test_bad_address_split_v6_repeated_double_colon�BAddressTestCase_v6.test_bad_address_split_v6_repeated_double_colon�s����	,�
	�|�$��~�&��~�&��{�#��{�#��}�%��}�%��~�&��u���~�&��)�*��+�,��+�,��(�)��(�)��*�+��*�+��+�,��{�#��+�,rc�^�U4SjnU"S5 U"S5 U"S5 U"S5 U"S5 U"S5 U"S5 U"S	5 g)
Nc�>�SnTRXRS5S5 [R"U5 SSS5 g!,(df   g=f)Nz0Leading ':' only permitted as part of '::' in %rrBrrCr=s  �rr��RAddressTestCase_v6.test_bad_address_split_v6_leading_colon.<locals>.assertBadSplit�s>���D�C��(�(��j�j��o�a�.@�A��%�%�d�+�B�A�A�rFz:2001:db8::1z:1:2:3:4:5:6:7z
:1:2:3:4:5:6:z:6:5:4:3:2:1::z:2001:db8::1%scopez:1:2:3:4:5:6:7%scopez:1:2:3:4:5:6:%scopez:6:5:4:3:2:1::%scoper1r�s` r�'test_bad_address_split_v6_leading_colon�:AddressTestCase_v6.test_bad_address_split_v6_leading_colon�sP���	,�
	�~�&��'�(���'��'�(��+�,��-�.��,�-��-�.rc�^�U4SjnU"S5 U"S5 U"S5 U"S5 U"S5 U"S5 U"S5 U"S	5 g)
Nc�>�SnTRXRS5S5 [R"U5 SSS5 g!,(df   g=f)Nz1Trailing ':' only permitted as part of '::' in %rrBrrCr=s  �rr��SAddressTestCase_v6.test_bad_address_split_v6_trailing_colon.<locals>.assertBadSplit�s>���E�C��(�(��j�j��o�a�.@�A��%�%�d�+�B�A�A�rFz2001:db8::1:z1:2:3:4:5:6:7:z
::1.2.3.4:z::7:6:5:4:3:2:z2001:db8::1:%scopez1:2:3:4:5:6:7:%scopez::1.2.3.4:%scopez::7:6:5:4:3:2:%scoper1r�s` r�(test_bad_address_split_v6_trailing_colon�;AddressTestCase_v6.test_bad_address_split_v6_trailing_colon�sP���	,�
	�~�&��'�(��|�$��'�(��+�,��-�.��)�*��-�.rc��^�U4SjnU"SS5 U"SS5 U"SS5 U"SS	5 U"S
S5 U"SS5 U"S
S5 U"SS5 U"SS	5 U"SS5 g)Nc�>�TRSXRS5S5 [R"U5 SSS5 g!,(df   g=f)Nz%s in %rrBrrC)r[�v4_errorr
s  �r�assertBadAddressPart�DAddressTestCase_v6.test_bad_v4_part_in.<locals>.assertBadAddressPart�s;����(�(��X�z�z�#��q�?Q�R��%�%�d�+�S�R�R�s�A�
Az3ffe::1.netzExpected 4 octets in '1.net'z
3ffe::127.0.1zExpected 4 octets in '127.0.1'z::1.2.3zExpected 4 octets in '1.2.3'z::1.2.3.4.5z Expected 4 octets in '1.2.3.4.5'z3ffe::1.1.1.netz5Only decimal digits permitted in 'net' in '1.1.1.net'z3ffe::1.net%scopez3ffe::127.0.1%scopez
::1.2.3%scopez::1.2.3.4.5%scopez3ffe::1.1.1.net%scoper1)r
rts` r�test_bad_v4_part_in�&AddressTestCase_v6.test_bad_v4_part_in�s����	,�	�]�,J�K��_�=�	?��Y�;�	=��]�?�	A��.�.�	/�	�0�2P�Q��2�=�	?��_�;�	=��0�?�	A��4�.�	/rc��^�U4SjnU"SS5 U"SS5 U"SS5 U"SS	5 U"S
S5 U"SS
5 U"SS5 U"SS5 U"SS5 U"SS	5 U"SS5 U"SS
5 g)Nc��>�SU<SURS5S<3nTR[R"U55 [R
"U5 SSS5 g!,(df   g=f)NzOnly hex digits permitted in r�rBr)rDr#rDrEr r$�r[�partrer
s   �r�
assertBadPart�AAddressTestCase_v6.test_invalid_characters.<locals>.assertBadPartsK���=A�4�:�:�c�?�ST�CU�V�C��(�(����3��8��%�%�d�+�9�8�8�s�A#�#
A1z
3ffe::goog�googz3ffe::-0r�z3ffe::+0r�z3ffe::-1�-1r�1.2.3.4�1234:axy::b�axyz3ffe::goog%scopez3ffe::-0%scopez3ffe::+0%scopez3ffe::-1%scopez1.2.3.4::%scope�1234:axy::b%scoper1�r
r|s` rr�*AddressTestCase_v6.test_invalid_characterss����	,�
	�l�F�+��j�$�'��j�$�'��j�$�'��k�9�-��m�U�+��(�&�1��&��-��&��-��&��-��'��3��)�5�1rc�^�U4SjnU"SS5 U"SS5 U"SS5 U"SS	5 U"S
S5 U"SS5 U"SS5 U"S
S	5 g)Nc�>�SnTRX!URS5S5 [R"U5 SSS5 g!,(df   g=f)Nz*At most 4 characters permitted in %r in %rrBrrCrzs   �rr|�:AddressTestCase_v6.test_part_length.<locals>.assertBadPart's@���>�C��(�(��D�J�J�s�O�A�4F�G��%�%�d�+�H�G�G�s�A�
Az::00000�00000z3ffe::10000�10000z02001:db8::�02001z2001:888888::1�888888z
::00000%scopez3ffe::10000%scopez02001:db8::%scopez2001:888888::1%scoper1r�s` r�test_part_length�#AddressTestCase_v6.test_part_length&s^���	,�
	�i��)��m�W�-��m�W�-��&��1��o�w�/��)�7�3��)�7�3��,�h�7rc�H�URS5 URS5 g�N�
2001:db8::�2001:db8::%scoperrs rr�AddressTestCase_v6.test_pickle6s������&����+�,rc��[R"URS55 [R"URS55 gr�rrs rr�AddressTestCase_v6.test_weakref:s-�����D�L�L��.�/����D�L�L�!3�4�5rc��URS5nURU[R"U55 URU[R"U55 g)Nr�)rr+�copy�deepcopyr�s  r�	test_copy�AddressTestCase_v6.test_copy>sB���|�|�.�/������t�y�y���/�����t�}�}�T�2�3rr1N)r2r3r4r5r r$rr�r�rHrNrVr[r`rerjrorvrr�rrr�r9r1rrr)r)<s^���#�#�G�'3�R*�*�=�(<�6�(1�-�8/� /� /�62�(8� -�6�4rr)c�>�\rSrSrSrSrSrSrSrSr	Sr
S	rg
)�NetmaskTestMixin_v4iDc��SHynURU5nUR[U5S5 UR[UR5S5 UR[UR5S5 M{ g)N)r����
1.2.3.4/32�255.255.255.255rj�rr+�str�netmask�hostmask)r
rd�nets   r�test_no_mask� NetmaskTestMixin_v4.test_no_maskGsb��C�G��,�,�w�'�C����S��X�|�4����S����-�/@�A����S����.�	�:�	Drc��SnURSU-5 URU5 SSS5 g!,(df   g=f)Nz
1.2.3.4/32/24�Only one '/' permitted in %rr@r�s  r�test_split_netmask�&NetmaskTestMixin_v4.test_split_netmaskPs4����
�
$�
$�%C�d�%J�
K��L�L���L�
K�
K�s	�2�
Ac�^�U4SjnU"SS5 U"SS5 U"SS5 U"SS5 U"SS5 U"S	S
5 U"S[R"S55 g)
Nc�~>�TRU5 TRU5 SSS5 g!,(df   g=fr
r@�r[rr
s  �r�assertBadAddress�ANetmaskTestMixin_v4.test_address_errors.<locals>.assertBadAddressV�)����(�(��1����T�"�2�1�1���.�
<�/r>�/8r�zExpected 4 octets�
google.com�10/8�	::1.2.3.4zOnly decimal digitsz	1.2.3.256z256 (> 255))rDrE�r
r�s` r�test_address_errors�'NetmaskTestMixin_v4.test_address_errorsUs_���	#�	��7�8���8�9���"5�6���':�;���!4�5���&;�<���b�i�i�
�&>�?rc	�.�UR[URS55S5 UR[URS55S5 UR[URS55S5 UR[URS55S5 [SS5H�nSU-nURU5nUR[U5U5 UR[URS	UR-55U5 UR[URS
U-55U5 US;aSSU-
-nUR[URS	UR
-55U5 M� g)
N��	192.0.2.0��192.0.2.0/24)r��24�r��
255.255.255.0z192.0.2.0/255.255.255.0r�!z
0.0.0.0/%dz
0.0.0.0/%sz0.0.0.0/0%d)� rr�)r+r�rrUr�r�)r
�i�net_strr�s    r�test_valid_netmask�&NetmaskTestMixin_v4.test_valid_netmaskbsR������T�\�\�*;�<�=�~�N�����T�\�\�*=�>�?��P�����T�\�\�*H�I�J�'�	)�����T�\�\�*C�D�E�'�	)��q�"��A�"�Q�&�G��,�,�w�'�C����S��X�w�/�����D�L�L�����!;�<�=�w�
H�
���S����m�a�.?�!@�A�7�K��G�|�&�"�q�&�1������D�L�L�����!<�=�>��
I�rc�^�U4SjnU"SS5 U"SS5 U"SS5 U"SS5 U"SS5 U"SS5 U"SS	5 U"SS
5 U"SS5 U"SS
5 U"SS5 U"SS5 U"SS5 U"SS5 g)Nc�>�SU-nTR[R"U55 TRU<SU<35 SSS5 g!,(df   g=f�N�%r is not a valid netmaskr��r(rDrEr�r[r�rer
s   �r�assertBadNetmask�ANetmaskTestMixin_v4.test_netmask_errors.<locals>.assertBadNetmask{�@���-��7�C��(�(����3��8�����g�6�7�9�8�8���A�
Ar�r?rr�� 1 �0x1�33z254.254.255.256r�1.1.1.1z254.xyz.2.3z240.255.0.0z
255.254.128.0z0.1.127.255�puddingr�r1�r
r�s` r�test_netmask_errors�'NetmaskTestMixin_v4.test_netmask_errorszs����	8�
	��B�'���D�)���D�)���E�*���E�*���D�)���$5�6���I�.���M�2���M�2���O�4���M�2���I�.���D�)rc�6^�U4SjnU"SS5 U"SS5 g)Nc�>�SU-nTR[R"U55 TRX45 SSS5 g!,(df   g=f�Nr�r�r�s   �rr��JNetmaskTestMixin_v4.test_netmask_in_tuple_errors.<locals>.assertBadNetmask��=���-��7�C��(�(����3��8����d�_�-�9�8�8���A�
Ar�rwr�r1r�s` r�test_netmask_in_tuple_errors�0NetmaskTestMixin_v4.test_netmask_in_tuple_errors�s���	.�	��B�'���B�'rc�j�URS5 URS5 URS5 g)Nz192.0.2.0/27z192.0.2.0/31r�rrs rr�NetmaskTestMixin_v4.test_pickle�s,������(�����(�����%rr1N�r2r3r4r5r�r�r�r�r�r�rr9r1rrr�r�Ds'��;��
@�I�0*�*(�&rr�c�,�\rSrSr\R
rSrg)�InterfaceTestCase_v4i�r1N)r2r3r4r5r �
IPv4Interfacerr9r1rrr�r���
���%�%�Grr�c�>�\rSrSr\R
rSrSrSr	Sr
g)�NetworkTestCase_v4i�c���URURS5RURS555 URURS5RURS555 URURS5RURS555 URURS5RURS555 g�N�10.0.0.0/30z10.0.1.0/24z10.0.0.0/24��assertFalser�	subnet_ofrrs r�test_subnet_of�!NetworkTestCase_v4.test_subnet_of�s�������L�L��'�1�1����]�+�
-�	.�	
����L�L��'�1�1����]�+�
-�	.�	
����L�L��'�1�1����]�+�
-�	.�	
����L�L��'�1�1����]�+�
-�	.rc���URURS5RURS555 URURS5RURS555 URURS5RURS555 URURS5RURS555 gr��r�r�supernet_ofrrs r�test_supernet_of�#NetworkTestCase_v4.test_supernet_of�s�������L�L��'�3�3����]�+�
-�	.�	
����L�L��'�3�3����]�+�
-�	.�	
����L�L��'�3�3����]�+�
-�	.�	
����L�L��'�3�3����]�+�
-�	.rc�F�UR[5 [R"S5R	[R
"S55 SSS5 UR[5 [R
"S5R	[R"S55 SSS5 UR[5 [R"S5R
[R
"S55 SSS5 UR[5 [R
"S5R
[R"S55 SSS5 g!,(df   GN=f!,(df   N�=f!,(df   N�=f!,(df   g=f)Nr��::1/128)rKrLr �IPv4Networkr��IPv6Networkr�rs r�test_subnet_of_mixed_types�-NetworkTestCase_v4.test_subnet_of_mixed_types�s��
�
�
�y�
)��!�!�-�0�<�<��%�%�i�0�
2�*��
�
�y�
)��!�!�)�,�8�8��%�%�m�4�
6�*��
�
�y�
)��!�!�-�0�:�:��%�%�i�0�
2�*��
�
�y�
)��!�!�)�,�6�6��%�%�m�4�
6�*�
)�*�
)��*�
)��*�
)��*�
)�s/�:E�-:E0�:F�:F�
E-�0
E>�
F�
F r1N)r2r3r4r5r r�rr�r�r�r9r1rrr�r��s���#�#�G�.�$.�$6rr�c�>�\rSrSrSrSrSrSrSrSr	Sr
S	rg
)�NetmaskTestMixin_v6i�c���SHynURU5nUR[U5S5 UR[UR5S5 UR[UR5S5 M{ URS5nUR[U5S5 UR[UR5S5 UR[UR5S5 g)N)�::1rJsr�z'ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffffr��	::1%scope�
::1%scope/128r�)r
rdr��
scoped_nets    rr�� NetmaskTestMixin_v6.test_no_mask�s���7�G��,�,�w�'�C����S��X�y�1����S����-�/X�Y����S����.��5�	8��\�\�+�.�
�����Z��/�:�����Z�/�/�0�2[�\�����Z�0�0�1�4�8rc��SnURSU-5 URU5 SSS5 SnURSU-5 URU5 SSS5 g!,(df   N?=f!,(df   g=f)Nzcafe:cafe::/128/190r�zcafe:cafe::%scope/128/190r@)r
r[�scoped_addrs   rr��&NetmaskTestMixin_v6.test_split_netmask�sq��$��
�
$�
$�%C�d�%J�
K��L�L���L�2��
�
$�
$�%C�k�%Q�
R��L�L��%�S�
R�	L�
K��S�
R�s�A"�A3�"
A0�3
Bc��^�U4SjnU"SS5 U"SS5 U"SS5 U"SS5 U"SS5 U"S	S
5 U"SS5 U"SS5 U"S
S5 U"SS5 U"SS5 U"SS
5 g)Nc�~>�TRU5 TRU5 SSS5 g!,(df   g=fr
r@r�s  �rr��ANetmaskTestMixin_v6.test_address_errors.<locals>.assertBadAddress�r�r�r�r>r�r�zAt least 3 partsr�r�r�zOnly hex digitsz/%scopez/%scope8zgoogle.com%scopez
1.2.3.4%scopez
10%scope/8r�r1r�s` rr��'NetmaskTestMixin_v6.test_address_errors�s����	#�	��7�8���8�9���'9�:���$6�7���!3�4���(9�:���$=�>���%>�?��+�-?�@���*<�=���'9�:��,�.?�@rc	��UR[URS55S5 UR[URS55S5 UR[URS55S5 [SS5H_nSU-nUR[URU55U5 UR[URSU-55U5 Ma UR[URS55S5 [SS5H_nSU-nUR[URU55U5 UR[URSU-55U5 Ma g)	N)r�r��
2001:db8::/32)r��32r�z::/%dz::/0%dz2001:db8::%scope/32)r+r�rrU)r
r�r�s   rr��&NetmaskTestMixin_v6.test_valid_netmasks:��	
����T�\�\�*<�=�>�(�	*�����T�\�\�*>�?�@�(�	*�����T�\�\�/�:�;�_�M��q�#��A���k�G����S����g�!6�7��A����S����h��l�!;�<�g�F��	
����T�\�\�*?�@�A�CX�Y��q�#��A���k�G����S����g�!6�7��A����S����h��l�!;�<�g�F�rc��^�U4SjnU"SS5 U"SS5 U"SS5 U"SS5 U"SS5 U"SS5 U"SS5 U"SS	5 U"SS
5 U"SS5 U"SS5 U"S
S5 g)Nc�>�SU-nTR[R"U55 TRU<SU<35 SSS5 g!,(df   g=fr�r�r�s   �rr��ANetmaskTestMixin_v6.test_netmask_errors.<locals>.assertBadNetmaskr�r�rr?�1::rr�r�r��129r�r�r�rr1r�s` rr��'NetmaskTestMixin_v6.test_netmask_errorss����	8�
	���#����&����&����%����%����&����&����&���	�*���	�*���t�$���i�0rc�H^�U4SjnU"SS5 U"SS5 U"SS5 g)Nc�>�SU-nTR[R"U55 TRX45 SSS5 g!,(df   g=fr�r�r�s   �rr��JNetmaskTestMixin_v6.test_netmask_in_tuple_errors.<locals>.assertBadNetmask0r�r�rrwrrr1r�s` rr��0NetmaskTestMixin_v6.test_netmask_in_tuple_errors/s(���	.�	���#����$���c�*rc��URS5 URS5 URS5 URS5 g)Nz2001:db8::1000/124z2001:db8::1000/127z2001:db8::1000z2001:db8::1000%scoperrs rr�NetmaskTestMixin_v6.test_pickle8s>�����-�.����-�.����)�*����/�0rr1Nr�r1rrrr�s'��9�&�A�&G�.1�(+�1rrc�,�\rSrSr\R
rSrg)�InterfaceTestCase_v6i@r1N)r2r3r4r5r �
IPv6Interfacerr9r1rrr!r!@r�rr!c�8�\rSrSr\R
rSrSrSr	g)�NetworkTestCase_v6iDc���URURS5RURS555 URURS5RURS555 URURS5RURS555 URURS5RURS555 URURS5RURS555 URURS5RURS555 g)N�
2000:999::/56�
2000:aaa::/48�
2000:aaa::/56�
2000:bbb::/56z2000:999::%scope/56z2000:aaa::%scope/48z2000:aaa::%scope/56r�rs rr��!NetworkTestCase_v6.test_subnet_ofGs2������L�L��)�3�3����_�-�
/�	0�	
����L�L��)�3�3����_�-�
/�	0�	
����L�L��)�3�3����_�-�
/�	0�	
����L�L��)�3�3����_�-�
/�	0�	
����L�L�.�/�9�9����2�3�
5�	6�	
����L�L�.�/�9�9����2�3�
5�	6rc���URURS5RURS555 URURS5RURS555 URURS5RURS555 URURS5RURS555 g)Nr&r'r(r)r�rs rr��#NetworkTestCase_v6.test_supernet_of`s�������L�L��)�5�5����_�-�
/�	0�	
����L�L��)�5�5����_�-�
/�	0�	
����L�L��)�5�5����_�-�
/�	0�	
����L�L��)�5�5����_�-�
/�	0rr1N)
r2r3r4r5r r�rr�r�r9r1rrr$r$Ds���#�#�G�6�20rr$c�,�\rSrSrSrSrSrSrSrg)�FactoryFunctionErrorsisc�~�SnSnUR[XCU5 U"U5 SSS5 g!,(df   g=f)N�camelotz+%r does not appear to be an IPv4 or IPv6 %s)r�
ValueError)r
r�kindr[res     r�assertFactoryError�(FactoryFunctionErrors.assertFactoryErrorus2����;��
�
"�
"�:�s�$�
?��D�M�@�
?�
?�s�	.�
<c�D�UR[RS5 g)Nrd)r3r �
ip_addressrs r�test_ip_address�%FactoryFunctionErrors.test_ip_address|������	� 4� 4�i�@rc�D�UR[RS5 g)N�	interface)r3r �ip_interfacers r�test_ip_interface�'FactoryFunctionErrors.test_ip_interfaces�����	� 6� 6��Drc�D�UR[RS5 g)N�network)r3r �
ip_networkrs r�test_ip_network�%FactoryFunctionErrors.test_ip_network�r9rr1N)	r2r3r4r5r3r7r=rBr9r1rrr.r.ss���A�E�Arr.c�.�\rSrSr\R
"S5r\R"S5r\R"S5r
\R"S5r\R"S5r\R"S5r\R"S5r\R"S5r\R"S5r\\
/r\\/-r\\/r\\/-r\\/r\\/-r\\-r\\-r\R
"S5r\R"S5r\R"S5r\R"S5r\R"S5r \R"S5r!\R"S5r"\R"S5r#\R"S5r$Sr%Sr&Sr'S	r(S
r)Sr*Sr+S
r,Sr-Sr.Sr/Sr0g)�ComparisonTestsi�rJrr��	::2%scopec��[5nURHqnURX!5 URX!:H5 UR	URU5[5 UR	URU5[5 Ms gr
)�object�objects_with_scoped�assertNotEqualr�r+�__eq__�NotImplemented�__ne__�r
�other�objs   r�test_foreign_type_equality�*ComparisonTests.test_foreign_type_equality�si������+�+�C�����+����S�\�*����S�Z�Z��.��?����S�Z�Z��.��?�	,rc�~�URH-nURHnXLaM	URX5 M M/ gr
)�objectsrJr,s   r�test_mixed_type_equality�(ComparisonTests.test_mixed_type_equality�s6���<�<�C��|�|���:���#�#�C�-�$� rc�x�[URUR5HupURX5 M gr
)�zip�
v6_objects�v6_scoped_objectsrJr,s   r�test_scoped_ipv6_equality�)ComparisonTests.test_scoped_ipv6_equality�s.���D�O�O�T�-C�-C�D�H�C�����)�Erc�r�URH'nURHnURX5 M M) gr
)�
v4_objectsrZrJr,s   r�test_v4_with_v6_scoped_equality�/ComparisonTests.test_v4_with_v6_scoped_equality�s.���?�?�C��-�-���#�#�C�-�.�#rc��URH6nURX5 URX5 URX5 M8 gr
)rIr+�assertLessEqual�assertGreaterEqual�r
rPs  r�test_same_type_equality�'ComparisonTests.test_same_type_equality�s<���+�+�C����S�&�� � ��*��#�#�C�-�,rc
��URUR4URUR4URUR
4URUR4URUR4URUR4URUR4URUR4UR UR"44	H�upUR%X5 UR'X5 UR)X5 UR+X!5 UR-X!5 UR/X:�5 UR/X!:5 UR/X:�5 UR/X!:*5 M� gr
)�v4addr�v4addr2�v4net�v4net2�v4intf�v4intf2�v6addr�v6addr2�v6net�v6net2�v6intf�v6intf2�
v6addr_scoped�v6addr2_scoped�v6net_scoped�
v6net2_scoped�
v6intf_scoped�v6intf2_scopedrJ�
assertLessrb�
assertGreaterrcr�r,s   r�test_same_type_ordering�'ComparisonTests.test_same_type_ordering�s2��
�[�[�$�,�,�'�
�Z�Z����%�
�[�[�$�,�,�'�
�[�[�$�,�,�'�
�Z�Z����%�
�[�[�$�,�,�'�
�
�
��!4�!4�5�
�
�
�� 2� 2�3�
�
�
��!4�!4�5�

�H�C�
����)��O�O�C�%�� � ��*����s�(��#�#�C�-����S�Y�'����S�Y�'����S�Z�(����S�Z�(�'

rc��URHnURXR5 M  URUR-HnURXR
5 M  URUR-HnURXR5 M  URUR
UR/-HnURXR
5 M  URUR
UR/-HnURXR5 M  URUR-UR/-HnURXR5 M  gr
)�v4_addresses�assertInrj�v6_addresses�v6_scoped_addressesrprvr^�assertNotInrYrZrds  r�test_containment� ComparisonTests.test_containment�s!���$�$�C��M�M�#�z�z�*�%��$�$�t�'?�'?�?�C��M�M�#�z�z�*�@��$�$�t�'?�'?�?�C��M�M�#�0�0�1�@��?�?�d�j�j�$�2C�2C�%D�D�C����S�*�*�-�E��?�?�d�j�j�$�2C�2C�%D�D�C����S�"3�"3�4�E��?�?�T�%;�%;�;�t�z�z�l�J�C����S�*�*�-�Krc�^^�URH�mURH�m[T[T55(d[T[T55(aM9UR[UU4Sj5 UR[UU4Sj5 UR[UU4Sj5 UR[UU4Sj5 M� M� g)Nc�>�TT:$r
r1�r-r.s��r�<lambda>�:ComparisonTests.test_mixed_type_ordering.<locals>.<lambda>��	���S�3�Yrc�>�TT:�$r
r1r�s��rr�r��r�rc�>�TT:*$r
r1r�s��rr�r���	���S�C�Zrc�>�TT:�$r
r1r�s��rr�r��r�r)rI�
isinstance�typerKrLr,s @@r�test_mixed_type_ordering�(ComparisonTests.test_mixed_type_ordering�s�����+�+�C��/�/���c�4��9�-�-��C��c��1K�1K���!�!�)�->�?��!�!�)�->�?��!�!�)�-?�@��!�!�)�-?�@�
0�,rc�b�[5nURGHLnUR[5 X!: SSS5 UR[5 X!:� SSS5 UR[5 X!:* SSS5 UR[5 X!:� SSS5 UR	U[
:5 UR
U[
:�5 UR	U[
:*5 UR
U[
:�5 UR
U[:5 UR	U[:�5 UR
U[:*5 UR	U[:�5 GMO g!,(df   GN;=f!,(df   GN+=f!,(df   GN=f!,(df   GN=fr
)rHrIrKrLrrr�rrNs   r�test_foreign_type_ordering�*ComparisonTests.test_foreign_type_ordering�s������+�+�C��"�"�9�-���.��"�"�9�-���.��"�"�9�-���.��"�"�9�-���.��O�O�C�'�M�*����S�7�]�+��O�O�C�7�N�+����S�G�^�,����S�8�^�,��O�O�C�(�N�+����S�H�_�-��O�O�C�8�O�,�!,�-�-��-�-��-�-��-�-�s/�E)�E;�4F
�F�)
E8	�;
F
	�
F	�
F.	c���URURUR/nURURUR
/nURURUR/nURU[UR[RS95 URU[UR[RS95 URU[UR[RS95 URX-[URUR-[RS95 UR[ [R"["55 g)N)�key)rhrjrlrnrprrrtrvrxr+�sortedr^r �get_mixed_type_keyrYrZrLrH)r
�
v4_ordered�
v6_ordered�v6_scoped_ordereds    r�test_mixed_type_key�#ComparisonTests.test_mixed_type_key
s)���k�k�4�:�:�t�{�{�;�
��k�k�4�:�:�t�{�{�;�
�!�/�/��1B�1B�D�DV�DV�W����������$-�$@�$@�B�	C�	
��������$-�$@�$@�B�	C�	
���*��� 6� 6�$-�$@�$@�B�	C�	
����7�����$�2H�2H� H�$-�$@�$@�B�	C�	
�����)E�)E�f�)M�Nrc�,�[R"S5n[R"S5n[R"S5n[R"S5n[R"S5n[R"S5nUR[UR
U5 UR[URU5 UR[UR
U5 UR[URU5 UR[UR
U5 UR[URU5 UR[UR
U5 UR[URU5 UR[UR
U5 UR[URU5 UR[UR
U5 UR[URU5 UR[UR
U5 UR[URU5 UR[UR
U5 UR[URU5 g)Nr�rr)r r6rArKrL�__lt__�__gt__)r
rhrjrnrprtrvs       r�test_incompatible_versions�*ComparisonTests.test_incompatible_versionss����%�%�i�0���$�$�Y�/���%�%�e�,���$�$�U�+��!�,�,�[�9�
� �+�+�K�8�����)�V�]�]�F�;����)�V�]�]�F�;����)�U�\�\�5�9����)�U�\�\�5�9����)�V�]�]�F�;����)�V�]�]�F�;����)�U�\�\�5�9����)�U�\�\�5�9����)�V�]�]�M�B����)�V�]�]�M�B����)�U�\�\�<�@����)�U�\�\�<�@����)�]�%9�%9�6�B����)�]�%9�%9�6�B����)�\�%8�%8�%�@����)�\�%8�%8�%�@rr1N)1r2r3r4r5r r�rhr�rjr�rlr$rnr�rpr"rrrtrvrxrr^r�rYr�rZrTrIrirkrmrorqrsrurwryrQrUr[r_rer|r�r�r�r�r�r9r1rrrErE�s���
�
"�
"�1�
%�F��!�!�!�$�E�
�
$�
$�Q�
'�F�
�
"�
"�1�
%�F��!�!�!�$�E�
�
$�
$�Q�
'�F��)�)�+�6�M��(�(��5�L��+�+�K�8�M��F�#�L����'�J��F�#�L����'�J�(�-�8��+�|�n�<���:�%�G�!�$5�5���#�#�A�&�G�
�
"�
"�1�
%�F��%�%�a�(�G��#�#�A�&�G�
�
"�
"�1�
%�F��%�%�a�(�G��*�*�;�7�N��)�)�+�6�M��,�,�[�9�N�@�.�*�.�
.�)�,
.�A�-�(O�&ArrEc���\rSrSrSrSrSrSrSrSr	Sr
S	rS
rSr
SrS
rSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSr Sr!S r"S!r#S"r$S#r%S$r&S%r'S&r(S'r)S(r*S)r+S*r,S+r-S,r.S-r/S.r0S/r1S0r2S1r3S2r4S3r5S4r6S5r7S6r8S7r9S8r:S9r;S:r<S;r=S<r>S=r?S>r@S?rAS@rBSArCSBrDSCrESDrFSErGSFrHSGrISHrJSIrKSJrLSKrMSLrNSMrOSNrPSOrQSPrRSQrSgR)S�IpaddrUnitTesti;c� �[R"S5Ul[R"S5Ul[R
"S5Ul[R"S5Ul[R"S5Ul	[R"S5Ul[R"S5Ul[R"S5Ul
[R"S	5Ul[R"S
5Ulg)Nr��
1.2.3.4/24�
1.2.3.0/24�2001:658:22a:cafe:200:0:0:1z2001:658:22a:cafe:200:0:0:1/64�2001:658:22a:cafe::/64�!2001:658:22a:cafe:200:0:0:1%scopez$2001:658:22a:cafe:200:0:0:1%scope/64z2001:658:22a:cafe::%scope/64r�)r r��ipv4_addressr��ipv4_interfacer��ipv4_networkr"�ipv6_address�ipv6_interfacer��ipv6_network�ipv6_scoped_address�ipv6_scoped_interface�ipv6_scoped_network�ipv6_with_ipv4_partrs r�setUp�IpaddrUnitTest.setUp=s���%�1�1�)�<���'�5�5�l�C���%�1�1�,�?���%�3�3�)�+���'�5�5�,�.���%�1�1�2J�K���#,�#:�#:�/�$1�� �%.�%<�%<�2�&4��"�#,�#8�#8�9W�#X�� �#,�#:�#:�;�#G�� rc��URS[[R"S555 URS[[R"S555 URS[[R"S555 g)NzIPv4Interface('1.2.3.4/32')r�zIPv6Interface('::1/128')rzIPv6Interface('::1%scope/128')r)r+rFr r�r"rs r�testRepr�IpaddrUnitTest.testReprNsp�����6��i�5�5�i�@�A�	C����3��i�5�5�e�<�=�	?����9��i�5�5�k�B�C�	Erc��[R"S5n[R"S5nUR[R"S5U5 UR[R"US45U5 UR[R"S5U5 UR[R"S5U5 UR[R"US45U5 UR[R"S5U5 UR	[
5 [R"S	5 SSS5 UR	[
5 [R"US
45 SSS5 UR	[
5 [R"S5 SSS5 UR	[
5 [R"S5 SSS5 UR	[
5 [R"US
45 SSS5 UR	[
5 [R"S5 SSS5 [R"S5nUR[R"S	SS9U5 UR[R"US
4SS9U5 UR[R"SSS9U5 UR[R"SSS9U5 UR[R"US
4SS9U5 UR[R"SSS9U5 [R"S5n[R"S5nUR[R"S5U5 UR[R"US
45U5 UR[R"S5U5 UR[R"S5U5 UR[R"US
45U5 UR[R"S5U5 UR[R"S	5[R"S55 UR[R"S5[R"S55 UR	[
5 [R"S5 SSS5 UR	[
5 [R"S5 SSS5 g!,(df   GN=f!,(df   GN�=f!,(df   GN�=f!,(df   GN�=f!,(df   GNt=f!,(df   GNR=f!,(df   N�=f!,(df   g=f)Nrz192.0.2.1/32)rr�r�)�r�)rr�r�)r�r�)rr�r�)r�r�)rr�r�)r�r�r�F��strictr�r�)�r�r�)r�r�z192.0.2.1/24)rz255.255.255.255.0)r r�r�r+rKr1r�rA)r
�ipr�s   r�
testIPv4Tuple�IpaddrUnitTest.testIPv4TupleWs���
�
"�
"�;�
/���#�#�N�3������.�.�/@�A�3�G�����.�.��B�x�8�#�>�����.�.�/?�@�#�F�����.�.�0C�D�EH�	J�����.�.��0A�0C�D�EH�	J�����.�.�0C�D�EH�	J��
�
�z�
*��!�!�"3�4�+�
�
�
�z�
*��!�!�2�r�(�+�+�
�
�
�z�
*��!�!�"2�3�+�
�
�
�z�
*��!�!�"@�A�+�
�
�
�z�
*��!�!�2��"7�8�+�
�
�
�z�
*��!�!�"?�@�+��#�#�N�3������.�.�/@�6;�=�>A�	C�����.�.��B�x�6;�=�>A�	C�����.�.�/?�6;�=�>A�	C�����.�.�0A�6;�=�>A�	C�	
����.�.��0?�0A�6;�=�>A�	C�	
����.�.�0A�6;�=�>A�	C�
�
"�
"�;�
/���#�#�N�3������.�.�0A�B�CF�	H�����.�.��0?�0A�B�CF�	H�����.�.�0A�B�CF�	H�����.�.�/@�A�3�G�����.�.��B�x�8�#�>�����.�.�/?�@�#�F�����0�0�1B�C�"�0�0��@�	B�����0�0�1A�B�"�0�0��@�	B��
�
�z�
*��!�!�"D�E�+��
�
�z�
*�� � �!C�D�+�
*�k+�
*��
*�
*��
*�
*��
*�
*��
*�
*��
*�
*��N+�
*��+�
*�s`�*T:�U�U�U0�<V�2V�&V&�V7�:
U	�
U�
U-�0
U?�
V�
V#�&
V4�7
Wc���[R"S5n[R"S5nUR[R"S5U5 UR[R"S5U5 UR[R"US45U5 [R"S5n[R"S5nUR[R"S5U5 UR[R"S5U5 UR[R"US	45U5 [R"S
5n[R"S5nUR	[
5 [R"S5 SSS5 UR	[
5 [R"S
5 SSS5 UR	[
5 [R"US45 SSS5 [R"S5nUR[R"SSS9U5 UR[R"S
SS9U5 UR[R"US4SS9U5 UR[R"S5[R"S55 UR[R"S5[R"S55 [R"S5nUR	[
5 [R"S5 SSS5 UR	[
5 [R"US45 SSS5 UR	[
5 [R"S5 SSS5 UR	[
5 [R"S5 SSS5 g!,(df   GN]=f!,(df   GN;=f!,(df   GN=f!,(df   N�=f!,(df   N�=f!,(df   N�=f!,(df   g=f)Nr�z2001:db8::/128)r��128)�	n� r�r�z
2001:db8::/96)r��96)r��`r�r��2001:db8::1)r�r�)�	n� r�r�Fr�)r�r�z2001:db8::1/96)r�r��2001:db8::1%scope)r�r�)r�r�)r r$r�r+rKr1r"rA)r
r�r��	ip_scopeds    r�
testIPv6Tuple�IpaddrUnitTest.testIPv6Tuple�sa��
�
"�
"�<�
0���#�#�$4�5������.�.�/D�E��	�����.�.�=�?��	�	
����.�.��E�{�;��	�
�
"�
"�<�
0���#�#�O�4������.�.�/C�D��	�����.�.�<�>��	�	
����.�.��D�z�:��	��)�)�*<�=�	��
"�
"�=�
1��
�
�
�z�
*��!�!�"5�6�+�
�
�
�z�
*��!�!�#<�
=�+��
�
�z�
*��!�!�2�r�(�+�+��#�#�O�4������.�.�/B�6;�=��	�	
����.�.�I�$)�+��	�	
����.�.��B�x��F��	�	
����0�0�1F�G�"�0�0�1A�B�	D�����0�0�>�@�"�0�0�1A�B�	D��)�)�*=�>�	�
�
�
�z�
*��!�!�";�<�+�
�
�
�z�
*��!�!�9�b�/�2�+�
�
�
�z�
*��!�!�"B�C�+��
�
�z�
*�� � �!A�B�+�
*�M+�
*��
*�
*��+�
*��,+�
*��
*�
*��
+�
*��+�
*�sT�O/�6P�*P�1P%�%P6�Q�Q�/
O>�
P�
P"�%
P3�6
Q�
Q�
Q&c���UR[R"S5S-[R"S55 UR[R"S5S-
[R"S55 UR[R"S5S-[R"S55 UR[R"S5S-
[R"S55 UR	[R"S	5S-[R"S
55 UR	[R"S
5S-
[R"S	55 g)Nr��z1.1.2.0�z1.1.0.1ri��z::ffffrz::ffff%scope)r+r r�r$rJrs r�testAddressIntMath�!IpaddrUnitTest.testAddressIntMath�s������.�.�y�9�C�?�"�.�.�y�9�	;�����.�.�y�9�C�?�"�.�.�y�9�	;�����.�.�u�5��C�"�.�.�x�8�	:�����.�.�x�8�I�F�"�.�.�u�5�	7����I�1�1�+�>�)�L�%�1�1�.�A�	C����I�1�1�.�A�Y�O�%�1�1�+�>�	@rc�p�UR[[RS5 UR[[RS[R-5 UR[[R
S5 UR[[R
S[R-5 g)Nrwr�)rKr1r �v4_int_to_packed�
IPV4LENGTH�v6_int_to_packed�
IPV6LENGTHrs r�testInvalidIntToBytes�$IpaddrUnitTest.testInvalidIntToBytes�s~�����*�i�&@�&@�"�E����*�i�&@�&@��y�3�3�3�	5����*�i�&@�&@�"�E����*�i�&@�&@��y�3�3�3�	5rc	�R�[R"S5n[R"S5n[R"S5nUR[[R"U/55X4/5 UR[[R"X/55X4X34/5 UR[[R"XU/55X4/5 URS[R
"SS55 URS[
UR55 g)Nz10.10.10.10z10.10.10.11z10.10.10.12r�rzIPv4Network('1.2.3.0/24'))r r�r+�list�_find_address_range�_count_righthand_zero_bitsrFr�)r
�ip1�ip2�ip3s    r�
testInternals�IpaddrUnitTest.testInternals�s����#�#�M�2���#�#�M�2���#�#�M�2������i�;�;�S�E�B�C��*��	'�����i�;�;�S�J�G�H��*�s�j�1�	3�����i�;�;�S�s�O�L�M��*��	'�����i�B�B�1�c�J�K����4�d�4�;L�;L�6M�Nrc���UR[URR5S5 UR[	URR5S5 UR[UR
R5S5 UR[	UR
R5S5 UR[	UR
R5S5 UR[URR5S5 UR[	URR5S5 UR[	URR5S5 g)Ni�1.2.3.0l	�/YE� �2001:658:22a:cafe::�::ffff:ffff:ffff:ffffz2001:658:22a:cafe::%scope)r+�intr��network_addressr�r�r�r�rs r�testGetNetwork�IpaddrUnitTest.testGetNetworks������T�.�.�>�>�?��J�����T�.�.�>�>�?��K�����T�.�.�>�>�?�?�	A�����T�.�.�>�>�?�.�	0�����T�.�.�7�7�8�0�	2�����T�5�5�E�E�F�?�	A�����T�5�5�E�E�F�4�	6�����T�5�5�>�>�?�0�	2rc��URURR[R"S5R5 [R
"S5n[R
"S5n[R
"S5nURU[R
"[
UR555 URU[R
"[
UR555 URU[R
"[
UR555 SnURURR[R"U5R5 URURR[R"U5R5 UR[R
"URR5RS5 UR[R
"URR5RS5 UR[R
"URR5RS5 g)Nr�r�r�r��	�/YE� ��)r+r��_ipr r�rAr�r�rJr�r"r�r��versionr�r�)r
�ipv4�ipv6�ipv6_scoped�v6_ints     r�
testIpFromInt�IpaddrUnitTest.testIpFromInts�������,�,�0�0�"�0�0��:�>�>�	@��#�#�I�.���#�#�$A�B���*�*�+N�O������y�3�3�C��8L�8L�4M�N�O�����y�3�3�C��8L�8L�4M�N�O����K��)=�)=�c�+�B]�B]�>^�)_�`�7������,�,�0�0�"�0�0��8�<�<�	>�����3�3�7�7�"�0�0��8�<�<�	>�	
����-�-�d�.?�.?�.C�.C�D�L�L��	�����-�-�d�.?�.?�.C�.C�D�L�L��	�����-�-�d�.F�.F�.J�.J�K�S�S��	rc���[RnURURR[R
"S5R5 URU"S5U"S55 URURR[R
"S5R5 URU"S5U"S55 URU"S5U"S55 g)	Nr��255.254.253.252������ X*��ffff:2:3:4:ffff::�����r�s)r r6r+r�r�r<r�r�r�s  r�testIpFromPacked�IpaddrUnitTest.testIpFromPacked-s����&�&������,�,�0�0�"�/�/�0C�D�H�H�	J�����!2�3� �!4�5�	7�����,�,�/�/�"�/�/�8�9�9;��	=�	
����!4�5� �"6�7�	8�	
������ ��.�	0rc�8�UR[URR5S5 UR[	URR5S5 UR[UR
R5S5 UR[	UR
R5S5 UR[URR5S5 UR[	URR5S5 g)Nr�r�r��2001:658:22a:cafe:200::1)r+r�r�r�r�r�r�rs r�	testGetIp�IpaddrUnitTest.testGetIp=s�������T�0�0�3�3�4�h�?�����T�0�0�3�3�4�i�@�����T�0�0�3�3�4�?�	A�����T�0�0�3�3�4�3�	5�����T�7�7�:�:�;�?�	A�����T�7�7�:�:�;�3�	5rc�,�SnSnSnX#-n[R"U5n[R"U5nUR[	U5U5 URUR
X-5 UR[	UR5U5 g)Nz0000:0000:0000:0000:0000:ffff:�::ffff:r�)r r$r"r+r��explodedr�)r
�long_prefix�short_prefixr��
ipv6_ipv4_str�ipv6_ipv4_addr�ipv6_ipv4_ifaces       r�&testIPv6IPv4MappedStringRepresentation�5IpaddrUnitTest.testIPv6IPv4MappedStringRepresentationJs���6�� ����$�+�
�"�.�.�}�=��#�1�1�-�@������^�,�m�<�����0�0�+�2D�E�����_�/�/�0�-�@rc�*�URURRS5 UR[URR5S5 URUR
RS5 UR[URR5S5 URURRRS5 UR[URRR5S5 g)N�scope)
r+r��scope_idr�r�r�r�r�r�r�rs r�testGetScopeId�IpaddrUnitTest.testGetScopeIdUs�������*�*�3�3��	�����T�5�5�>�>�?� �	"�����,�,�5�5��	�����T�7�7�@�@�A� �	"�����*�*�:�:�C�C��	�����T�5�5�E�E�N�N�O� �	"rc��UR[URR5S5 UR[	URR5S5 UR[UR
R5S5 URUR
RS5 UR[URR5S5 URURRS5 g)Nl�r�l	������@)r+r�r�r�r�r��	prefixlenr�rs r�testGetNetmask�IpaddrUnitTest.testGetNetmaskcs�������T�.�.�6�6�7��D�����T�.�.�6�6�7��I�����T�.�.�6�6�7�@�	B�����*�*�4�4�b�9�����T�5�5�=�=�>�@�	B�����1�1�;�;�R�@rc�h�[R"S5nUR[URR
5S5 URUR
S5S5 [R"S5nUR[URR
5S5 URUR
S5S5 [R"S5nUR[URR
5S5 URUR
S5S5 g)N�	1.2.3.4/0rrTz::1/0z::1%scope/0)r r�r+r�r@r��_prefix_from_prefix_stringr")r
�ipv4_zero_netmask�ipv6_zero_netmask�ipv6_scoped_zero_netmasks    r�testZeroNetmask�IpaddrUnitTest.testZeroNetmaskms���%�3�3�K�@������.�6�6�>�>�?��C����*�E�E�c�J�A�N�%�3�3�G�<������.�6�6�>�>�?��C����*�E�E�c�J�A�N�#,�#:�#:�=�#I� �����5�=�=�E�E�F��J����1�L�L�S�Q�ST�Urc�h�[R"S5nURURS5 g)Nz127.0.0.0/0.0.0.255r�)r r�r+r�r
r�s  r�testIPv4Net�IpaddrUnitTest.testIPv4Netzs'���#�#�$9�:���������+rc�8�UR[URR5S5 UR[	URR5S5 UR[UR
R5S5 UR[	UR
R5S5 UR[URR5S5 UR[	URR5S5 g)Ni��	1.2.3.255l	�����/YE� �%2001:658:22a:cafe:ffff:ffff:ffff:ffff)r+r�r��broadcast_addressr�r�r�rs r�testGetBroadcast�IpaddrUnitTest.testGetBroadcast~s�������T�.�.�@�@�A�8�L�����T�.�.�@�@�A�;�O�����T�.�.�@�@�A�?�	A�����T�.�.�@�@�A�@�	B�	
����T�5�5�G�G�H�?�	A�����T�5�5�G�G�H�@�	Brc�$�URURRRS5 URURRRS5 URUR
RRS5 g)Nr�r)r+r�r@rr�r�rs r�testGetPrefixlen�IpaddrUnitTest.testGetPrefixlen�sh������,�,�4�4�>�>��C�����,�,�4�4�>�>��C�����3�3�;�;�E�E�r�Jrc���URURR5RS5 UR[	URR5R
5S5 UR[R"S5RR5[R"S55 URURR5RS5 UR[	URR5R
5S5 UR[R"S5RR5[R"S55 URURR5RS5 UR[	URR5R
5S5 g)N�z1.2.2.0�	0.0.0.0/0�?r�z::0/0)r+r��supernetrr�r�r r�r@r�r�r"r�r�rs r�testGetSupernet�IpaddrUnitTest.testGetSupernet�sk������*�*�3�3�5�?�?��D�����T�.�.�7�7�9�I�I�J�"�	$�����#�#�K�0�8�8�A�A�C��!�!�+�.�	0�	
����*�*�3�3�5�?�?��D�����T�.�.�7�7�9�I�I�J�.�	0�����0�0��9�A�A�J�J�L�"�.�.�w�7�	9�����1�1�:�:�<�F�F��K�����T�5�5�>�>�@�P�P�Q�.�	0rc��URURRS5RS5 UR[	URRS5R
5S5 URURRS5RS5 UR[	URRS5R
5S5 URURRS5RS5 UR[	URRS5R
5S5 g)Nr��z1.2.0.0�=z2001:658:22a:caf8::)r+r�r1rr�r�r�r�rs r�testGetSupernet3�IpaddrUnitTest.testGetSupernet3�s������*�*�3�3�A�6�@�@�"�E�����T�.�.�7�7��:�J�J�K�"�	$�	
����*�*�3�3�A�6�@�@�"�E�����T�.�.�7�7��:�J�J�K�.�	0�����1�1�:�:�1�=�G�G��L�����T�5�5�>�>�q�A�Q�Q�R�.�	0rc�v�UR[URRSSS9 UR[URRSS9 UR	URRSS9URRSS95 UR[UR
RSSS9 UR[UR
RSS9 UR	UR
RSS9UR
RS	S95 UR[URRSSS9 UR[URRSS9 UR	URRSS9URRS	S95 g)
Nr�rJ��prefixlen_diff�
new_prefix��r<�r;��A�>)rKr1r�r1r+r�r�rs r�testGetSupernet4�IpaddrUnitTest.testGetSupernet4�s������*�d�&7�&7�&@�&@�)*�q�	�	:����*�d�&7�&7�&@�&@�%'�	�	)�����*�*�3�3�1�3�E��*�*�3�3�r�3�B�	D�	
���*�d�&7�&7�&@�&@�)*�q�	�	:����*�d�&7�&7�&@�&@�%'�	�	)�����*�*�3�3�1�3�E��*�*�3�3�r�3�B�	D����*�d�&>�&>�&G�&G�)*�q�	�	:����*�d�&>�&>�&G�&G�%'�	�	)�����1�1�:�:�!�:�L��1�1�:�:�b�:�I�	Krc�b�URR5nURU[5 UR	[
R"S5[U55 [URR55nUR	S[U55 UR	[
R"S5US5 UR	[
R"S5US5 [
R"S5nUR5nURU[5 UR	[
R"S5[U55 [UR55nUR	S[U55 UR	[
R"S5US5 UR	[
R"S	5US5 [
R"S
5nUR5nURU[5 UR	[
R"S5[U55 [UR55nUR	S[U55 UR	[
R"S5US5 UR	[
R"S	5US5 [
R"S5[
R"S5/nS
nSn[
R"U5R5nURU[5 UR	[U5US5 [
R"U5R5nURU[5 UR	[U5US5 UR	U[[
R"U5R555 UR	U[[
R"U5R555 UR	[[
R"U5R55[[
R"U5R555 [
R"S5/nSnSn[
R"U5R5nURU[5 UR	[U5US5 [
R"U5R5nURU[5 UR	[U5US5 UR	U[[
R"U5R555 UR	U[[
R"U5R555 UR	[[
R"U5R55[[
R"U5R555 [
R"S5[
R"S5/nSnSn[
R"U5R5nURU[5 UR	[U5US5 [
R"U5R5nURU[5 UR	[U5US5 UR	U[[
R"U5R555 UR	U[[
R"U5R555 UR	[[
R"U5R55[[
R"U5R555 [
R"S5/nSnSn[
R"U5R5nURU[5 UR	[U5US5 [
R"U5R5nURU[5 UR	[U5US5 UR	U[[
R"U5R555 UR	U[[
R"U5R555 UR	[[
R"U5R55[[
R"U5R555 g)Nz1.2.3.1�rz	1.2.3.254rw�2001:658:22a:cafe::/120�2001:658:22a:cafe::1r�z2001:658:22a:cafe::ffz2001:658:22a:cafe::%scope/120�2.0.0.0z2.0.0.1z
2.0.0.0/31)rI�r�r�)r�r�r�z2001:658:22a:cafe::/127)r���2001:658:22a:cafe::1/128)rHr�)
r��hosts�assertIsInstancerr+r r��nextr��lenr�r$rA)r
rMr�r��addrs�str_args�tpl_argss       r�	testHosts�IpaddrUnitTest.testHosts�s&���!�!�'�'�)�����e�X�.�����.�.�y�9�4��;�G��T�&�&�,�,�.�/������c�%�j�)�����.�.�y�9�5��8�D�����.�.�{�;�U�2�Y�G� �,�,�-F�G���"�"�$�����e�X�.�����.�.�/E�F��U��T��\�'�'�)�*������c�%�j�)�����.�.�/E�F��a��Q�����.�.�/F�G��r��S�'�3�3�4S�T��#�)�)�+�����e�X�.����)�/�/�0F�G�$�u�+�V��(�.�.�0�1������c�%�j�)�����.�.�/E�F��a��Q�����.�.�/F�G��r��S��&�&�y�1��&�&�y�1�3����"���$�$�X�.�4�4�6�����e�X�.�����e��e�A�h�/��$�$�X�.�4�4�6�����e�X�.�����e��e�A�h�/������Y�%9�%9�(�%C�%I�%I�%K� L�M������Y�%9�%9�(�%C�%I�%I�%K� L�M�����i�2�2�8�<�B�B�D�E��i�2�2�8�<�B�B�D�E�	G��&�&�y�1�2����"���$�$�X�.�4�4�6�����e�X�.�����e��e�A�h�/��$�$�X�.�4�4�6�����e�X�.�����e��e�A�h�/������Y�%9�%9�(�%C�%I�%I�%K� L�M������Y�%9�%9�(�%C�%I�%I�%K� L�M�����i�2�2�8�<�B�B�D�E��i�2�2�8�<�B�B�D�E�	G��&�&�'<�=��&�&�'=�>�@��,��/���$�$�X�.�4�4�6�����e�X�.�����e��e�A�h�/��$�$�X�.�4�4�6�����e�X�.�����e��e�A�h�/������Y�%9�%9�(�%C�%I�%I�%K� L�M������Y�%9�%9�(�%C�%I�%I�%K� L�M�����i�2�2�8�<�B�B�D�E��i�2�2�8�<�B�B�D�E�	G��&�&�'=�>�A��-��0���$�$�X�.�4�4�6�����e�X�.�����e��e�A�h�/��$�$�X�.�4�4�6�����e�X�.�����e��e�A�h�/������Y�%9�%9�(�%C�%I�%I�%K� L�M������Y�%9�%9�(�%C�%I�%I�%K� L�M�����i�2�2�8�<�B�B�D�E��i�2�2�8�<�B�B�D�E�	Grc	�N�UR[URRSS95[URRSS955 UR	[
[URRSS95 UR	[
[URRSSS95 UR[URRSS95[URRSS955 UR	[
[URRS	S95 UR	[
[URRSSS95 UR[URRSS95[URRSS955 UR	[
[URRS	S95 UR	[
[URRSSS95 g)
Nr�r?�r>r.r:r��Dr0)	r+r�r��subnetsrKr1r�r�r�rs r�testFancySubnetting�"IpaddrUnitTest.testFancySubnettings�������� 1� 1� 9� 9�� 9� K�L��� 1� 1� 9� 9�R� 9� H�I�	K����*�d��+�+�3�3�r�3�B�	D����*�d��+�+�3�3�1�>@�4�B�	C�	
����� 1� 1� 9� 9�� 9� K�L��� 1� 1� 9� 9�R� 9� H�I�	K����*�d��+�+�3�3�r�3�B�	D����*�d��+�+�3�3�1�>@�4�B�	C�	
����� 8� 8� @� @�PQ� @� R�S��� 8� 8� @� @�B� @� O�P�	R����*�d��2�2�:�:�b�:�I�	K����*�d��2�2�:�:�!�FH�;�J�	Krc��UR[URR55SRS5 UR[[URR55SR5S5 UR[[URR55SR5S5 UR[URR55SRS5 UR[URR55SRS5 g)Nrr=r�rJz	1.2.3.128rA)	r+r�r�rYrr�r�r�r�rs r�testGetSubnets�IpaddrUnitTest.testGetSubnets1s������d�/�/�7�7�9�:�1�=�G�G��L�����T��%�%�-�-�/�1�12�4�4C�O�E�"�	$�	
����T��%�%�-�-�/�1�12�4�4C�O�E�$�	&�	
����d�/�/�7�7�9�:�1�=�G�G��L�����d�6�6�>�>�@�A�!�D�N�N�PR�Src�2�[R"S5nUR5Vs/sHn[U5PM nnURS5Vs/sHn[U5PM nnUR	US/5 UR	X45 gs snfs snf)Nr�r�)r r�rYr�r+)r
r�r\�subnets1�subnets2s     r�testGetSubnetForSingle32�'IpaddrUnitTest.testGetSubnetForSingle32=sx��
�
"�
"�<�
0��$&�J�J�L�1�L�q�C��F�L��1�$&�J�J�q�M�2�M�q�C��F�M��2�����L�>�2�����,��2��2s�B�Bc�`�[R"S5nUR5Vs/sHn[U5PM nnURS5Vs/sHn[U5PM nnUR	US/5 UR	X45 [R"S5nUR5Vs/sHn[U5PM nnURS5Vs/sHn[U5PM nnUR	US/5 UR	X45 gs snfs snfs snfs snf)Nr�r�r)r r�rYr�r+)r
r�r\r`rar�s      r�testGetSubnetForSingle128�(IpaddrUnitTest.testGetSubnetForSingle128Ds���
�
"�
"�9�
-��$&�J�J�L�1�L�q�C��F�L��1�$&�J�J�q�M�2�M�q�C��F�M��2�����I�;�/�����,��)�)�/�:�	�$-�$5�$5�$7�8�$7�q�C��F�$7��8�$-�$5�$5�a�$8�9�$8�q�C��F�$8��9�����O�#4�5�����,��2��2��
9��9s�D�D!�6D&� D+c�8�URRS5Vs/sHn[U5PM nnURU/SQ5 URRS5Vs/sHn[U5PM nnURU/SQ5 gs snfs snf)Nr�)z
1.2.3.0/26z1.2.3.64/26z1.2.3.128/26z1.2.3.192/26)�2001:658:22a:cafe::/66z2001:658:22a:cafe:4000::/66z2001:658:22a:cafe:8000::/66z2001:658:22a:cafe:c000::/66)r�rYr�r+r�)r
r\�ips�ipsv6s    r�testSubnet2�IpaddrUnitTest.testSubnet2Qs���#�0�0�8�8��;�<�;�!�s�1�v�;��<�����I�	K�"&�!2�!2�!:�!:�1�!=�>�!=�A��Q��!=��>�����
,�	-��
=��
?s�B�&Bc�$�URRS5Vs/sHn[U5PM nnURUSS/SQ5 URUSS/SQ5 UR[	U5S5 [
R"S5nURS5Vs/sHn[U5PM nnURUSS/SQ5 URUSS/S	Q5 UR[	U5S5 gs snfs snf)
N�r�)z
1.2.3.0/32z
1.2.3.1/32z
1.2.3.2/32���)z1.2.3.253/32z1.2.3.254/32z1.2.3.255/32r�rG)z2001:658:22a:cafe::/128rLz2001:658:22a:cafe::2/128)z2001:658:22a:cafe::fd/128z2001:658:22a:cafe::fe/128z2001:658:22a:cafe::ff/128)r�rYr�r+rPr r�)r
r\rYr�s    r�testGetSubnets3�IpaddrUnitTest.testGetSubnets3_s��#'�#4�#4�#<�#<�Q�#?�@�#?�a�3�q�6�#?��@������!��6�	8��������<�	>�����W��s�+� �,�,�-F�G��#/�#7�#7��#:�;�#:�a�3�q�6�#:��;������!��
)�	*�	
�������
*�	+�	
����W��s�+��#A��<s�D�'D
c��UR[[URRRS55 UR[[URRS55 UR[[URRRS55 UR[[URRS55 UR[[URRRS55 UR[[URRS55 g)N�	rA�rKr1r�r�r@rYr�r�r�r�r�rs r�testSubnetFailsForLargeCidrDiff�.IpaddrUnitTest.testSubnetFailsForLargeCidrDiffss������*�d��-�-�5�5�=�=�a�@�	B����*�d��+�+�3�3�A�6�	8����*�d��-�-�5�5�=�=�b�A�	C����*�d��+�+�3�3�B�7�	9����*�d��4�4�<�<�D�D�R�H�	J����*�d��2�2�:�:�2�>�	@rc�B�UR[URRRS5 UR[UR
RRS5 UR[URRRS5 g)Nr=rA)rKr1r�r@r1r�r�rs r�!testSupernetFailsForLargeCidrDiff�0IpaddrUnitTest.testSupernetFailsForLargeCidrDiff�sz�����*��-�-�5�5�>�>��	D����*��-�-�5�5�>�>��	D����*��4�4�<�<�E�E�r�	Krc��UR[[URRRS55 UR[[URRS55 UR[[URRRS55 UR[[URRS55 UR[[URRRS55 UR[[URRS55 g)Nrwrtrs r�"testSubnetFailsForNegativeCidrDiff�1IpaddrUnitTest.testSubnetFailsForNegativeCidrDiff�s������*�d��-�-�5�5�=�=�b�A�	C����*�d��+�+�3�3�B�7�	9����*�d��-�-�5�5�=�=�b�A�	C����*�d��+�+�3�3�B�7�	9����*�d��4�4�<�<�D�D�R�H�	J����*�d��2�2�:�:�2�>�	@rc��URURRS5 UR[URR	55SRS5 URURR5RS5 URURRS5 UR[URR	55SRS5 URURR5RS5 URURRS5 UR[URR	55SRS5 URURR5RS5 g)Nr�rr�i�ll )r+r��
num_addressesr�rYr1r�r�rs r�testGetNum_Addresses�#IpaddrUnitTest.testGetNum_Addresses�sc������*�*�8�8�#�>�����d�/�/�7�7�9�:�1�=�K�K��	�����*�*�3�3�5�C�C�S�I�����*�*�8�8�:N�O�����d�/�/�7�7�9�:�1�=�K�K�,�	.�����*�*�3�3�5�C�C�-�	/�����1�1�?�?�AU�V�����d�6�6�>�>�@�A�!�D�R�R�,�	.�����1�1�:�:�<�J�J�-�	/rc��UR[R"S5UR5 UR	[R"S5UR5 [R
"S5nURXR5 UR
[R"S5R[R"S555 g)Nz1.2.3.128/25z
1.2.4.1/24z1.2.3.37z
1.1.0.0/16z
1.0.0.0/15)	r�r r�r�r�r�r�r��__contains__)r
�addr1s  r�testContains�IpaddrUnitTest.testContains�s����
�
�i�-�-�n�=��'�'�	)�����0�0��>��*�*�	,��%�%�j�1���
�
�e�.�.�/�	
����.�.�|�<�I�I��%�%�l�3�5�	6rc��UR[URS5S5 UR[URR
S5 UR[URS5S5 UR[URR
S5 UR[URS5S5 UR[URR
S5 g)Nr��1.2.3.5r�z2001:658:22a:cafe::5r~)r+r�r�rK�
IndexError�__getitem__r�r�rs r�testNth�IpaddrUnitTest.testNth�s�������T�.�.�q�1�2�I�>����*�d�&7�&7�&C�&C�S�I�����T�.�.�q�1�2�/�	1����*�d�&7�&7�&C�&C�W�M�����T�5�5�a�8�9�/�	1����*�d�&>�&>�&J�&J�G�Trc��[R"S5nURSUR5 [	U5nURS[US55 URS[US55 URS[US55 URS[US55 URUSUS5 g)Nz172.31.255.128/255.255.255.240�z172.31.255.128rz172.31.255.143rw)r r�r+rr�r�)r
r[�	addr_lists   r�testGetitem�IpaddrUnitTest.testGetitem�s����$�$�%E�F������T�^�^�,���J�	����)�3�y��|�+<�=����)�3�t�A�w�<�8����)�3�y��}�+=�>����)�3�t�B�x�=�9�����2���R��1rc�4�URUR[R"S5:H5 UR	UR[R"S5:H5 UR	UR[R
"S5:H5 UR	UR[R
"S5:H5 UR	URS:H5 UR	UR/:H5 UR	URS:H5 URUR[R
"S5:H5 UR	UR[R
"S5:H5 UR	UR[R"S5:H5 UR	URS:H5 UR	UR/:H5 UR	URS:H5 URUR[R
"S	5:H5 URUR[R
"S
5:H5 UR	UR[R
"S5:H5 UR	UR[R
"S5:H5 UR	UR[R
"S5:H5 UR	UR[R"S5:H5 UR	URS:H5 UR	UR/:H5 UR	URS:H5 g)Nr��
1.2.3.4/23�::1.2.3.4/24�::1.2.3.4%scope/24r?r��2001:658:22a:cafe:200::1/64�2001:658:22a:cafe:200::1/63�!2001:658:22a:cafe:200::1%scope/64z'0000:0000:0000:0000:0000:0000:0102:0304�!2001:658:22a:cafe:200::1%scope/63)	rr�r r�r�r"r�r�r�rs r�	testEqual�IpaddrUnitTest.testEqual�s
������+�+�!�/�/��=�>�	?�����,�,�"�0�0��>�?�	@�����,�,�"�0�0��@�A�	B�����,�,�"�0�0�1E�F�G�	H�����,�,��2�3�����,�,��2�3�����,�,��1�2�����+�+��#�#�$A�B�C�	D�����,�,��#�#�$A�B�C�	D�����,�,�"�0�0��>�?�	@�����,�,��2�3�����,�,��2�3�����,�,��1�2�����2�2��#�#�$G�H�I�	J�����0�0��#�#�$M�N�O�	P�����3�3��#�#�$G�H�I�	J�����3�3��#�#�$A�B�C�	D�����3�3��#�#�$A�B�C�	D�����3�3�"�0�0��>�?�	@�����3�3�r�9�:�����3�3�r�9�:�����3�3�q�8�9rc�
�URUR[R"S5:g5 UR	UR[R"S5:g5 UR	UR[R
"S5:g5 UR	UR[R
"S5:g5 UR	URS:g5 UR	UR/:g5 UR	URS:g5 UR	UR[R"S5:g5 UR	URS:g5 UR	UR/:g5 UR	URS:g5 URUR[R
"S5:g5 UR	UR[R
"S	5:g5 UR	UR[R"S5:g5 UR	URS:g5 UR	UR/:g5 UR	URS:g5 UR	UR[R"S
5:g5 UR	URS:g5 UR	UR/:g5 UR	URS:g5 URUR[R
"S5:g5 UR	UR[R
"S5:g5 UR	UR[R
"S5:g5 UR	UR[R
"S	5:g5 UR	UR[R"S5:g5 UR	URS:g5 UR	UR/:g5 UR	URS:g5 UR	UR[R"S
5:g5 UR	URS:g5 UR	UR/:g5 UR	URS:g5 g)
Nr�r�r�r�r?r�r�r�r�r�r�r�)r�r�r r�rr"r�r�r�r�r�r�rs r�testNotEqual�IpaddrUnitTest.testNotEqual�s������,�,�"�0�0��>�?�	@�����+�+�!�/�/��=�>�	?�����+�+�!�/�/��?�@�	A�����+�+�!�/�/�0D�E�F�	G�����+�+�r�1�2�����+�+�r�1�2�����+�+�q�0�1�����)�)�"�.�.�y�9�:�	;�����)�)�R�/�0�����)�)�R�/�0�����)�)�Q�.�/�����,�,��#�#�$A�B�C�	D�����+�+��#�#�$A�B�C�	D�����+�+�!�/�/��=�>�	?�����+�+�r�1�2�����+�+�r�1�2�����+�+�q�0�1�����)�)�!�-�-�i�8�9�	:�����)�)�R�/�0�����)�)�R�/�0�����)�)�Q�.�/�����3�3��#�#�$G�H�I�	J�����2�2��#�#�$G�H�I�	J�����2�2��#�#�$A�B�C�	D�����2�2��#�#�$A�B�C�	D�����2�2�!�/�/��=�>�	?�����2�2�b�8�9�����2�2�b�8�9�����2�2�a�7�8�����0�0�!�-�-�i�8�9�	:�����0�0�B�6�7�����0�0�B�6�7�����0�0�A�5�6rc�b�UR[[R"S55S5 g)Nz1.2.3.4/255.255.255.255r��r+r�r r�rs r�testSlash32Constructor�%IpaddrUnitTest.testSlash32Constructor)s*������Y�4�4�-�/�0�1=�	?rc��UR[[R"S55S5 UR[[R"S55S5 g)Nr�r)r+r�r r"rs r�testSlash128Constructor�&IpaddrUnitTest.testSlash128Constructor-sH������Y�4�4�Y�?�@�"+�	-�����Y�4�4�_�E�F�"1�	3rc�b�UR[[R"S55S5 g)Nz1.2.3.4/0.0.0.0rr�rs r�testSlash0Constructor�$IpaddrUnitTest.testSlash0Constructor3s&������Y�4�4�5F�G�H�%�	'rc�L�[R"S5n[R"S5n[R"S5n[R"S5n[R"S5n[R"S5n[R"XX4XV/5nUR[	U5[R
"S5[R
"S5/5 [R"S5n[R"S5n[R"S5n[R"S5n[R"XX4/5nUR[	U5[R
"S5/5 [R
"S5n[R
"S	5n[R
"S
5n[R
"S5n[R
"S5n[R
"S
5n[R"XX4UU/5nUR[	U5[R
"S
5[R
"S5/5 [R"X/5nUR[	U5[R
"S5/5 [R
"S5=p�UR[	[R"X�/55U/5 [R"S5=p�UR[	[R"X�/55[R"S5/5 [R"S5n[R"S5n[R"S5n[R"XU/5nUR[	U5U/5 [R"S5n[R"S5n[R"S5n[R"XU/5nUR[	U5U/5 [R"S5[R"S54[R
"S5[R"S54[R
"S5[R"S54/n
U
H+upUR[[RX/5 M- [R"S5[R"S54[R
"S5[R"S54[R
"S5[R"S54/n
U
H+upUR[[RX/5 M- g)N�1.1.1.0r��1.1.1.2z1.1.1.3z1.1.1.4z
1.1.1.0/30z
1.1.1.4/32z
1.1.0.0/24�
1.1.1.0/24�
1.1.2.0/24z
1.1.3.0/24z
1.1.4.0/24z
1.1.0.0/22z
1.1.0.0/23z
1.1.1.1/32z
2001::/100z
2001::/120�	2001::/96z2001::%scope/100z2001::%scope/120z2001::%scope/96rz
1.1.0.0/32z
2001::/128rz2001::%scope/128)r r��collapse_addressesr+r�r�rAr�r6rKrL)r
r�r�r��ip4�ip5�ip6�	collapsed�ip_same1�ip_same2�addr_tupless           r�testCollapsing�IpaddrUnitTest.testCollapsing7s����#�#�I�.���#�#�I�.���#�#�I�.���#�#�I�.���#�#�I�.���#�#�I�.���0�0�
�s��*�,�	�����i���&�&�|�4��&�&�|�4�6�	7�
�#�#�I�.���#�#�I�.���#�#�I�.���#�#�I�.���0�0�#�C�1E�F�	�����i��#�/�/��=�>�	@��#�#�L�1���#�#�L�1���#�#�L�1���#�#�L�1���#�#�L�1���#�#�L�1���0�0�#�C�c�58�2:�;�	�����i��#�/�/��=�#�/�/��=�?�	@�
�0�0�#��<�	�����i��#�/�/��=�>�	@�(�3�3�L�A�A������i�:�:��(�*�+�"��	%�
(�3�3�I�>�>������i�:�:��(�*�+�#�.�.�|�<�=�	?��#�#�L�1���#�#�L�1���#�#�K�0���0�0�#�C��A�	�����i��3�%�0��#�#�$6�7���#�#�$6�7���#�#�$5�6���0�0�#�C��A�	�����i��3�%�0��%�%�i�0��%�%�e�,�.��&�&�|�4��&�&�|�4�6��&�&�|�4��&�&�|�4�6�
��$�H�C����i��)E�)E�"�j�
*�$�
�%�%�i�0��%�%�k�2�4��&�&�|�4��&�&�'9�:�<��&�&�|�4��&�&�'9�:�<�
��$�H�C����i��)E�)E�"�j�
*�$rc
�r	�[Rn[R"S5n[R"S5n"SS[R5nU"S5nU"S5nUR	[
[U"XV55 UR	[[U"U[R"S555 UR	[[U"U[R"S555 UR[
U"X#55S[R"S55 [R"S	5nUR[
U"X#55[R"S
5[R"S	5/5 [R"S5n[R"[RR5nUR[R"S5/[
U"X#555 [R"S5n[R"S
5nUR[
U"X#55S[R"S55 [R"S5nUR[
U"X#55[R"S5[R"S5/5 [R"S5n[R"S5nUR[
U"X#55S[R"S55 [R"S5nUR[
U"X#55[R"S5[R"S5/5 UR	[
[U"[R"S5[R"S555 UR	[[U"[R"S5[R"S555 UR	[[U"[R"S5[R"S555 UR	[[U"[R"S5[R"S555 g)Nr�z	1.1.1.255c�$�\rSrSr\S5rSrg)�3IpaddrUnitTest.testSummarizing.<locals>.IPv7Addressi�c��g)N�r1rs rr��;IpaddrUnitTest.testSummarizing.<locals>.IPv7Address.version�s��rr1N)r2r3r4r5r6r�r9r1rr�IPv7Addressr��s��
�
��
rr�rrrr�z1.1.1.8z
1.1.1.0/29r/rz$1:ffff:ffff:ffff:ffff:ffff:ffff:ffffz1::/16z2::z2::/128z	1::%scopez*1:ffff:ffff:ffff:ffff:ffff:ffff:ffff%scopez	2::%scopez1.1.0.0r�)
r �summarize_address_ranger6r$rKr1r�rLr+rAr��	_ALL_ONESr�)r
�	summarizer�r�r��ip_invalid1�ip_invalid2s       r�testSummarizing�IpaddrUnitTest.testSummarizing�s����5�5�	��"�"�9�-���"�"�;�/��	�)�/�/�	�"�%�(��!�%�(�����*�d�#�K�=�	?�	
���)�T�#�C��)>�)>�u�)E�F�	H����)�T�#�C��)>�)>�{�)K�L�	N�	
����i��1�2�1�5�"�-�-�l�;�	=��"�"�9�-������i��1�2�#�.�.�|�<�#�.�.�y�9�;�	<��#�#�A�&���#�#�I�$9�$9�$C�$C�D�����)�/�/��<�=��i��1�2�	4��"�"�5�)���"�"�#I�J������i��1�2�1�5�"�-�-�h�7�	9��"�"�5�)������i��1�2�#�.�.�x�8�#�.�.�y�9�;�	<��"�"�;�/���"�"�#O�P������i��1�2�1�5�"�-�-�h�7�	9��"�"�;�/������i��1�2�#�.�.�x�8�#�.�.�y�9�;�	<�
	
���*�d�#�I�$8�$8��$C�$-�$8�$8��$C�E�	F�	
���)�T�#�I�$8�$8��$C�$-�$8�$8��$C�E�	F�	
���)�T�#�I�$8�$8��$C�$-�$8�$8��$C�E�	F�	
���)�T�#�I�$8�$8��$>�$-�$8�$8��$C�E�	Frc���UR[R"S5[R"S5:*5 UR[R"S5[R"S5:*5 UR[R"S5[R"S5:*5 UR[R"S5[R"S5:*5 UR[R"S5[R"S5:*5 UR[R"S5[R"S5:*5 g)Nr�r�r�::2rrF)rr r6rs r�testAddressComparison�$IpaddrUnitTest.testAddressComparison�s
�����	�,�,�Y�7�!�,�,�Y�7�8�	9����	�,�,�Y�7�!�,�,�Y�7�8�	9����	�,�,�U�3�!�,�,�U�3�4�	5����	�,�,�U�3�!�,�,�U�3�4�	5����	�,�,�[�9�!�,�,�[�9�:�	;����	�,�,�[�9�!�,�,�[�9�:�	;rc�l�UR[R"S5[R"S5:H5 UR[R"S5[R"S5:5 UR[R"S5[R"S5:5 UR[R"S5[R"S5:5 UR[R"S5[R"S5:�5 UR[R"S5[R"S5:�5 UR[R"S5[R"S5:�5 UR[R"S5[R"S5:H5 UR[R"S5[R"S5:5 UR[R"S5[R"S5:5 UR[R"S5[R"S5:5 UR[R"S5[R"S5:�5 UR[R"S5[R"S5:�5 UR[R"S5[R"S5:�5 UR[R"S	5[R"S	5:H5 UR[R"S	5[R"S
5:5 UR[R"S	5[R"S5:5 UR[R"S5[R"S	5:5 UR[R"S
5[R"S	5:�5 UR[R"S5[R"S	5:�5 UR[R"S	5[R"S5:�5 UR[R"S	5[R"S5:H5 UR[R"S	5[R"S5:5 UR[R"S	5[R"S5:5 UR[R"S5[R"S5:5 UR[R"S
5[R"S5:�5 UR[R"S5[R"S5:�5 UR[R"S	5[R"S5:�5 UR[R"S5[R"S	5:H5 UR[R"S5[R"S
5:5 UR[R"S5[R"S5:5 UR[R"S5[R"S	5:5 UR[R"S5[R"S	5:�5 UR[R"S5[R"S	5:�5 UR[R"S5[R"S5:�5 g)
Nz
1.1.1.1/24z
1.1.1.1/16z
1.1.1.2/24z
1.1.1.2/16z::1/64z::1/80z::2/64z::2/48z::1%scope/64z::1%scope/80z::2%scope/64z::2%scope/48)rr r<r�rs r�testInterfaceComparison�&IpaddrUnitTest.testInterfaceComparison�s �����	�.�.�|�<�!�.�.�|�<�=�	>����	�.�.�|�<�!�.�.�|�<�=�	>����	�.�.�|�<�!�.�.�|�<�=�	>����	�.�.�|�<�!�.�.�|�<�=�	>����	�.�.�|�<�!�.�.�|�<�=�	>����	�.�.�|�<�!�.�.�|�<�=�	>����	�.�.�|�<�!�.�.�|�<�=�	>�	
���	�.�.�x�8�!�.�.�x�8�9�	:����	�.�.�x�8�!�.�.�x�8�9�	:����	�.�.�x�8�!�.�.�x�8�9�	:����	�.�.�x�8�!�.�.�x�8�9�	:����	�.�.�x�8�!�.�.�x�8�9�	:����	�.�.�x�8�!�.�.�x�8�9�	:����	�.�.�x�8�!�.�.�x�8�9�	:�	
���	�.�.�~�>�!�.�.�~�>�?�	@����	�.�.�~�>�!�.�.�~�>�?�	@����	�.�.�~�>�!�.�.�~�>�?�	@����	�.�.�~�>�!�.�.�~�>�?�	@����	�.�.�~�>�!�.�.�~�>�?�	@����	�.�.�~�>�!�.�.�~�>�?�	@����	�.�.�~�>�!�.�.�~�>�?�	@�	
����/�/��?�!�.�.�x�8�9�	:����	�.�.�~�>�!�.�.�x�8�9�	:����	�.�.�~�>�!�.�.�x�8�9�	:����	�.�.�~�>�!�.�.�x�8�9�	:����	�.�.�~�>�!�.�.�x�8�9�	:����	�.�.�~�>�!�.�.�x�8�9�	:����	�.�.�~�>�!�.�.�x�8�9�	:�	
����/�/��9�!�.�.�~�>�?�	@����	�.�.�x�8�!�.�.�~�>�?�	@����	�.�.�x�8�!�.�.�~�>�?�	@����	�.�.�x�8�!�.�.�~�>�?�	@����	�.�.�x�8�!�.�.�~�>�?�	@����	�.�.�x�8�!�.�.�~�>�?�	@����	�.�.�x�8�!�.�.�~�>�?�	@rc��[R"S5n[R"S5n[R"S5nURX:5 URX2:�5 URUR	U5S5 URUR	U5S5 URUR	U5S5 URUR	U5S5 URUR	U5S5 URUR5UR5:5 [R"S5n[R"S5n[R"S	5nURX:5 URX2:�5 URUR	U5S5 URUR5UR5:5 UR[URRUR5 [R"S
5n[R"S5nUR[URU5 UR[URU5 UR[URU5 UR[URU5 [R"S5nUR!X:5 UR!X:�5 [R"S
5nURX:5 UR!X!:5 UR!X:�5 URX!:�5 [R"S5nURX#:5 UR!X2:5 UR!X#:�5 URX2:�5 [R"S5n[R"S5n[R"S5n[R"S5nXX6/nX&X/nUR#5 URXx5 XaX2/nUR#5 URXx5 UR%UR&"S55[(5 UR%UR&"S55[(5 UR[R"S5[R"S5:*5 UR[R"S5[R"S5:*5 UR![R"S5[R"S5:*5 UR[R"S5[R"S5:*5 UR[R"S5[R"S5:*5 UR![R"S5[R"S5:*5 g)Nr�z
1.1.1.0/32r�rrwrJz2001:2000::/96z2001:2001::/96z2001:ffff:2000::/96�::/0r/z
10.1.2.128/25z10.1.3.0/24z10.1.3.0/25z
10.10.10.0/31z
10.10.10.0z
10.10.10.2/31z
10.10.10.2r�r�rr�)r r�rr+�compare_networks�_get_networks_keyr�rKrLr�r�r"r�r�r�rAr��sort�assertIsr6rL)	r
r�r�r�r�r�r�r��unsorteds	         r�testNetworkComparison�$IpaddrUnitTest.testNetworkComparison=s����#�#�L�1���#�#�L�1���#�#�L�1������	�"�����	�"�����-�-�c�2�A�6�	
����-�-�c�2�B�7�����-�-�c�2�A�6�����-�-�c�2�B�7�����-�-�c�2�A�6�����-�-�/�#�2G�2G�2I�I�J��#�#�$4�5���#�#�$4�5���#�#�$9�:������	�"�����	�"�����-�-�c�2�B�7�����-�-�/�#�2G�2G�2I�I�J�	
���)��+�+�<�<��+�+�	-��&�&�v�.���&�&�{�3�����)�T�[�[�$�7����)�T�[�[�$�7����)�T�[�[�$�7����)�T�[�[�$�7��"�"�?�3�������#������#��"�"�=�1������	�"������#������#�����	�"��"�"�=�1������	�"������#������#�����	�"��"�"�?�3���"�"�<�0���"�"�?�3���"�"�<�0���C�%���c�'���
�
������*��c�'���
�
������*��
�
�c�j�j��!5�!5�l�!C�D�$�	&��
�
�c�j�j��!5�!5�l�!C�D�$�	&�	
���	�,�,�Y�7�!�,�,�Y�7�8�	9����	�,�,�Y�7�!�,�,�Y�7�8�	9�����-�-�i�8�!�,�,�Y�7�8�	9�	
���	�,�,�U�3�!�,�,�U�3�4�	5����	�,�,�U�3�!�,�,�U�3�4�	5�����-�-�e�4�"�-�-�e�4�5�	6rc���UR[[RS5 UR[[RS5 UR[[RS5 g)Nz192.168.1.1/24z::1/120z
::1%scope/120)rKr1r rArs r�testStrictNetworks�!IpaddrUnitTest.testStrictNetworks�sK�����*�i�&:�&:�<L�M����*�i�&:�&:�I�F����*�i�&:�&:�O�Lrc�p�[R"S5n[R"S5n[R"S5nURURR	U55 URURR	U55 URUR	U55 g)Nz
1.2.3.0/30z
1.2.2.0/24z1.2.2.64/26)r r�rr��overlapsr�)r
rO�other2�other3s    r�testOverlaps�IpaddrUnitTest.testOverlaps�s����%�%�l�3���&�&�|�4���&�&�}�5������)�)�2�2�5�9�:�����*�*�3�3�F�;�<��������/�0rc��Sn[R"U5n[R"SU-5nUR[	UR
5[	UR
55 [R"SU-5nUR
UR
UR
5 UR[R[RS5 g)Nrlz::%sz	::ffff:%sz2001:1.1.1.1:1.1.1.1)	r r�r"r+r�r�rJrKr!)r
�ipv4_stringr��
v4compat_ipv6�
v4mapped_ipv6s     r�testEmbeddedIpv4�IpaddrUnitTest.testEmbeddedIpv4�s���#���&�&�{�3��!�/�/���0D�E�
�����]�-�-�.��D�G�G��=�!�/�/��k�0I�J�
����M�,�,�d�g�g�6����)�5�5�y�7N�7N�0�	2rc�t�UR[R"S5[R"S55 UR[R"S5[R"S55 UR[R"S5[R"S55 UR[R"S5[R"S55 UR[R"S	5[R"S
55 UR[R"S5[R"S55 UR[R"S	5[R"S55 UR[R"S5[R"S55 UR[R"S5[R"S
55 UR[R"S5[R"S55 UR[R"S
5[R"S55 UR[R"S5[R"S55 g)Nz::FFFF:192.0.2.1z::FFFF:c000:201zFFFF::192.0.2.1zFFFF::c000:201z-0000:0000:0000:0000:0000:FFFF:192.168.255.255z::ffff:c0a8:ffffz-FFFF:0000:0000:0000:0000:0000:192.168.255.255zffff::c0a8:ffffz::FFFF:192.0.2.1%scopez::FFFF:c000:201%scopezFFFF::192.0.2.1%scopezFFFF::c000:201%scopez30000:0000:0000:0000:0000:FFFF:192.168.255.255%scopez::ffff:c0a8:ffff%scopez3FFFF:0000:0000:0000:0000:0000:192.168.255.255%scopezffff::c0a8:ffff%scope)r+r r6rJrs r�testIPv6AddressTooLarge�&IpaddrUnitTest.testIPv6AddressTooLarge�s������-�-�.@�A�#�.�.�/@�A�	C�	
����-�-�.?�@�#�.�.�/?�@�	B�	
����-�-�.]�^�#�.�.�/A�B�	D�����-�-�.]�^�#�.�.�/@�A�	C�	
����-�-�.F�G�#�.�.�/F�G�	I�����-�-�.E�F�#�.�.�/E�F�	H����I�0�0�1I�J�%�0�0�1B�C�	E����I�0�0�1H�I�%�0�0�1A�B�	D����I�0�0�1C�D�#�.�.�/F�G�	I����I�0�0�1B�C�#�.�.�/E�F�	H�����-�-�.c�d�#�.�.�/G�H�	J�����-�-�.c�d�#�.�.�/F�G�	Irc�4�URURRS5 URURRS5 URURRS5 URUR
RS5 g)Nr�r�)r+r�r�r�r�r�rs r�
testIPVersion�IpaddrUnitTest.testIPVersion�sr������*�*�2�2�A�6�����*�*�2�2�A�6�����1�1�9�9�1�=�����1�1�9�9�1�=rc���URURRS5 URURRS5 URURRS5 g)Nr�r�)r+r��
max_prefixlenr�r�rs r�testMaxPrefixLength�"IpaddrUnitTest.testMaxPrefixLength�sV������,�,�:�:�B�?�����,�,�:�:�C�@�����3�3�A�A�3�Grc���URURRS5 UR[R"S5RS5 URUR
RS5 UR[R"S5RS5 UR[R"S5RS5 URURRS5 UR[R"S	5RS5 UR[R"S
5RS5 g)Nr�r�r�r�r�r�z::1:0:0:0:0szffff:2:3:4:ffff::%scopez::1:0:0:0:0%scope)r+r��packedr r�r�r"r�rs r�
testPacked�IpaddrUnitTest.testPacked�s)������*�*�1�1�,�	.�����0�0�1B�C�J�J�,�	.�����*�*�1�1�=�	>�	
����0�0�1D�E�L�L�*�	+�	
����0�0��?�F�F�@�	B�����1�1�8�8�=�	>�	
����0�0�1J�K�R�R�*�	+�	
����0�0�1D�E�L�L�@�	Brc��[R"S5n[R"S5n[R"S5n[R"S5nUR[R[U55 UR[R[U55 UR[R[U55 UR[R[U55 g)Nr�r�)	r rAr6r+r�r�r�r�r$)r
�ipv4net�ipv4addr�ipv6net�ipv6addrs     r�
testIpType�IpaddrUnitTest.testIpType�s����&�&�y�1���'�'�	�2���&�&�{�3���'�'��4������.�.��W�
�>�����.�.��X��?�����.�.��W�
�>�����.�.��X��?rc��URS[R"S5R5 URS[R"S5R5 URS[R"S5R
5 URS[R"S5R5 URS[R"S5R5 URS[R"S5R5 URS[R"S5R5 URS[R"S5R
5 URS[R"S	5R5 URS[R"S
5R5 URS[R"S5R5 URS[R"S5R5 URS[R"S
5R5 URS[R"S5R5 URS[R"S5R5 URS[R"S5R5 URS[R"S5R5 URS[R"S5R5 URS[R"S5R5 URS[R"S5R5 URS[R"S5R5 URS[R"S5R5 URS[R"S5R5 URS[R"S5R
5 URS[R"S5R
5 URS[R"S5R5 URS[R"S5R5 URS[R"S5R5 URS[R"S5R5 URS[R"S	5R5 URS[R"S
5R5 UR[R"S5R5 UR[R"S5R5 UR[R"S5R5 UR[R"S5R5 URS[R"S5R5 URS[R"S5R5 UR[R"S5R5 UR[R"S 5R5 URS[R"S!5R5 URS[R"S"5R5 URS[R"S5R5 URS[R"S5R5 g)#NTz224.1.1.1/31Fz	240.0.0.0z192.168.1.1/17z192.169.0.0z10.255.255.255z11.0.0.0z172.31.255.255z
172.32.0.0z169.254.1.0/24z169.254.100.200/24z169.255.100.200/24z127.100.200.254/32z
127.42.0.0/16z	128.0.0.0z
100.64.0.0/10z192.0.2.128/25z192.0.3.0/24rjz	224.1.1.1z	240.0.0.1z239.255.255.255r z	192.0.0.0z	192.0.0.9z
192.0.0.10z192.0.0.255z169.254.100.200z169.255.100.200z	192.0.7.1z203.0.113.1z127.100.200.254z
127.42.0.0)r+r r<�is_multicastrA�is_reserved�
is_private�
is_link_local�is_loopback�	is_globalr6�is_unspecifiedr�rrs r�testReservedIpv4�IpaddrUnitTest.testReservedIpv4�s�������y�5�5��  � ,��	.�����	� 4� 4�[� A� N� N�O�����y�3�3�K�@�L�L�M�����y�5�5� � "�",�*�	.�����	� 4� 4�]� C� N� N�O�����y�3�3� � "�",�*�	.�����	� 4� 4�Z� @� K� K�L�����	� 4� 4�Z� @� L� L�M�����y�3�3� � "�",�*�	.�����	� 4� 4�\� B� M� M�N�����"�-�-�.>�?�M�M�	O�	
����#�0�0�2�4�4A�M�	C�	
����#�0�0�2�4�4A�M�	C�	
����#�.�.�2�4�4?�K�	A�	
����y�3�3�� !�!,��	.�����	� 4� 4�[� A� M� M�N�����"�-�-�o�>�I�I�	K�����	� 4� 4�_� E� O� O�P�����"�-�-�.>�?�J�J�	L�����"�-�-�n�=�G�G�	I�	
����y�3�3�I�>�M�M�N�����y�3�3�K�@�M�M�N�����	� 4� 4�[� A� N� N�O�����y�3�3�K�@�L�L�M�����"�-�-�.?�@�L�L�	N�	
����y�3�3�M�B�M�M�N�����	� 4� 4�]� C� N� N�O�����y�3�3� � "�",�*�	.�����	� 4� 4�Z� @� K� K�L�����y�3�3� � "�",�*�	.�����	� 4� 4�\� B� M� M�N�����-�-�k�:�D�D�E����	�,�,�[�9�C�C�D����	�,�,�\�:�D�D�E�����-�-�m�<�F�F�G�����"�-�-�.?�@�N�N�	P�����"�-�-�.?�@�N�N�	P�	
���	�,�,�[�9�C�C�D�����-�-�m�<�F�F�G�����#�.�.�/@�A�M�M�	O�����y�3�3�L�A�M�M�N�����	� 4� 4�[� A� M� M�N�����y�3�3�I�>�M�M�Nrc��
�URS[R"S5R5 URS[R"S5R5 URS[R"S5R5 URS[R"S5R5 URS[R"S5R5 URS[R"S5R5 URS[R"S	5R5 URS[R"S
5R5 URS[R"S5R5 URS[R"S5R5 URS[R"S
5R5 URS[R"S5R5 URS[R"S5R5 URS[R"S5R5 URS[R"S5R5 URS[R"S5R5 URS[R"S5R5 URS[R"S5R5 URS[R"S5R5 URS[R"S5R5 URS[R"S5R5 URS[R"S5R5 URS[R"S5R5 URS[R"S5R5 URS[R"S5R5 URS[R"S5R5 URS[R"S5R5 URS[R"S5R5 URS[R"S5R5 g) NFr/z	1.0.0.0/8Tz	0.0.0.0/8�
10.0.0.0/8z127.0.0.0/8z169.254.0.0/16z
172.16.0.0/12z192.0.0.0/29z192.0.0.9/32z192.0.0.170/31r�z192.168.0.0/16z
198.18.0.0/15z198.51.100.0/24z203.0.113.0/24z240.0.0.0/4z255.255.255.255/32r�z::ff/128r��::/128z
::ffff:0:0/96z100::/64z2001:2::/48z2001:3::/48rz2001:10::/28zfc00::/7z	fe80::/10)r+r rAr�rs r�testPrivateNetworks�"IpaddrUnitTest.testPrivateNetworksB	s�������	� 4� 4�[� A� L� L�M�����	� 4� 4�[� A� L� L�M�����y�3�3�K�@�K�K�L�����y�3�3�L�A�L�L�M�����y�3�3�M�B�M�M�N�����y�3�3�4D�E�P�P�Q�����y�3�3�O�D�O�O�P�����y�3�3�N�C�N�N�O�����	� 4� 4�^� D� O� O�P�����y�3�3�4D�E�P�P�Q�����y�3�3�N�C�N�N�O�����y�3�3�4D�E�P�P�Q�����y�3�3�O�D�O�O�P�����y�3�3�4E�F�Q�Q�R�����y�3�3�4D�E�P�P�Q�����y�3�3�M�B�M�M�N�����y�3�3�4H�I�T�T�U�����	� 4� 4�V� <� G� G�H�����	� 4� 4�Z� @� K� K�L�����y�3�3�I�>�I�I�J�����y�3�3�H�=�H�H�I�����y�3�3�O�D�O�O�P�����y�3�3�J�?�J�J�K�����y�3�3�M�B�M�M�N�����	� 4� 4�]� C� N� N�O�����y�3�3�O�D�O�O�P�����y�3�3�N�C�N�N�O�����y�3�3�J�?�J�J�K�����y�3�3�K�@�K�K�Lrc�@�URS[R"S5R5 URS[R"SS-S-
5R5 URS[R"S5R5 URS[R"S5R5 URS[R"S	5R5 URS[R"S
5R5 URS[R"S5R5 URS[R"S5R5 URS[R"S5R
5 URS[R"S
5R
5 URS[R"S5R
5 URS[R"S5R
5 URS[R"S5R5 URS[R"S5R5 URS[R"S5R5 URS[R"S5R5 URS[R"S5R5 URS[R"S5R5 URS[R"S5R5 URS[R"S5R5 URS[R"S5R5 URS[R"S5R5 URS[R"S5R5 URS[R"S5R
5 URS[R"S5R5 URS[R"S5R5 URS[R"SS-S-
5R5 URS[R"S5R5 URS[R"S5R5 URS[R"S	5R5 URS[R"S
5R5 URS[R"S5R5 URS[R"S5R5 URS[R"S5R
5 URS[R"S
5R
5 URS[R"S5R
5 URS[R"S5R
5 URS[R"S5R5 URS[R"S5R5 URS[R"S5R5 URS[R"S5R5 URS[R"S5R5 URS[R"S5R5 URS[R"S5R5 URS[R"S5R5 URS[R"S5R5 UR[R"S5R5 UR[R"S5R5 UR[R"S5R5 UR[R"S 5R5 UR[R"S!5R5 UR[R"S"5R5 UR[R"S#5R5 UR[R"S$5R5 UR[R"S%5R5 UR[R"S&5R5 UR[R"S'5R5 UR[R"S(5R5 UR[R"S)5R5 UR[R"S*5R5 URS[R"S+5R5 URS[R"S,5R5 g)-NTzffff::r�r�rJzff00::Fzfdff::zfecf::zfeff:ffff:ffff:ffff::z
fbf:ffff::zfc00::zfc00:ffff:ffff:ffff::zfbff:ffff::zfe00::zfea0::zfebf:ffff::zfe7f:ffff::zfec0::z	0:0::0:01z::1/127r�r�z0::0rz::/127z2001::1/128z
200::1/128z64:ff9b:1::z2001::z	2001:1::1z	2001:1::2z2001:2::z2001:3::z2001:4::z2001:4:112::z	2001:10::z	2001:20::z	2001:30::z	2001:40::z2002::z3fff::z100::z4000::1/128)r+r rAr��
is_site_localr�r�r<rrrr6r�rr�rs r�testReservedIpv6�IpaddrUnitTest.testReservedIpv6d	s������y�3�3�H�=�J�J�K�����y�3�3�A�s�F�Q�J�?�L�L�M�����y�3�3�H�=�J�J�K�����	� 4� 4�X� >� K� K�L�����y�3�3�H�=�K�K�L�����y�3�3�'� )�)6��	8�����	� 4� 4��!�+�m�	-�����	� 4� 4�X� >� L� L�M�����y�3�3�H�=�H�H�I�����y�3�3�'� )�)3��	5�����	� 4� 4�]� C� N� N�O�����	� 4� 4�X� >� I� I�J�����y�3�3�H�=�K�K�L�����y�3�3�� �,�}�	.�����	� 4� 4��!�,�}�	.�����	� 4� 4�X� >� L� L�M�����y�5�5�k�B�N�N�O�����	� 6� 6�y� A� M� M�N�����	� 4� 4�T� :� F� F�G�����	� 4� 4�U� ;� G� G�H�����y�3�3�F�;�J�J�K�����	� 4� 4�U� ;� J� J�K�����	� 4� 4�X� >� M� M�N�����"�-�-�m�<�G�G�	I�����"�-�-�l�;�E�E�	G�	
����y�3�3�H�=�J�J�K�����y�3�3�A�s�F�Q�J�?�L�L�M�����y�3�3�H�=�J�J�K�����	� 4� 4�X� >� K� K�L�����y�3�3�H�=�K�K�L�����y�3�3�'� )�)6��	8�����	� 4� 4��!�+�m�	-�����	� 4� 4�X� >� L� L�M�����y�3�3�H�=�H�H�I�����y�3�3�'� )�)3��	5�����	� 4� 4�]� C� N� N�O�����	� 4� 4�X� >� I� I�J�����y�3�3�H�=�K�K�L�����y�3�3�� �,�}�	.�����	� 4� 4��!�,�}�	.�����	� 4� 4�X� >� L� L�M�����y�3�3�K�@�L�L�M�����y�3�3�E�:�F�F�G�����	� 4� 4�U� ;� G� G�H�����y�3�3�F�;�J�J�K�����	� 4� 4�U� ;� J� J�K�����-�-�m�<�F�F�G�����-�-�h�7�A�A�B����	�,�,�[�9�C�C�D����	�,�,�[�9�C�C�D�����-�-�j�9�C�C�D����	�,�,�Z�8�B�B�C�����-�-�j�9�C�C�D����	�,�,�^�<�F�F�G�����-�-�k�:�D�D�E����	�,�,�[�9�C�C�D����	�,�,�[�9�C�C�D�����-�-�k�:�D�D�E�����-�-�h�7�A�A�B�����-�-�h�7�A�A�B�	
����y�3�3�G�<�H�H�I�����y�3�3�M�B�N�N�Orc�t�UR[R"S5R[R"S55 UR[R"S5RS5 UR[R"S5R[R"S55 g)Nr!r z
::c0a8:101r")r+r r6r%rs r�testIpv4Mapped�IpaddrUnitTest.testIpv4Mapped�	s�������$�$�%9�:�F�F��$�$�]�3�	5�	
����-�-�l�;�G�G��N�����-�-�.?�@�L�L�"�-�-�m�<�	>rc���SGHWnURU5 [R"U5n[R"SU35nUR	UR
UR
5 UR	URUR5 UR	URUR5 UR	URUR5 UR	URUR5 UR	URUR5 UR	URUR5 SSS5 GMZ g!,(df   GMm=f)N)z178.62.3.251z169.254.169.254�	127.0.0.1z	224.0.0.1rlrjz
100.64.0.1r)rXr r�r$r+rr�r�r�rr�r)r
�addr4r�r�s    r�testIpv4MappedProperties�'IpaddrUnitTest.testIpv4MappedProperties�	s��
�E����e�$� �,�,�U�3�� �,�,�w�u�g�->�?��� � �������@�� � ����$�/�/�B�� � ��!1�!1�4�3C�3C�D�� � ��!2�!2�D�4E�4E�F�� � ��!4�!4�d�6I�6I�J�� � ��!3�!3�T�5G�5G�H�� � ��!1�!1�4�3C�3C�D�%�$�
�%�$�s�D:E � 
E0	c���URS[R"S5R5 URS[R"S5R5 g)NTr!Fz::ffff:172.32.0.0)r+r r6r�rs r�testIpv4MappedPrivateCheck�)IpaddrUnitTest.testIpv4MappedPrivateCheck�	sN������i�*�*�+?�@�K�K�	M�����y�+�+�,?�@�K�K�	Mrc�D�URS[R"S5R5 URS[R"S5R5 URS[R"S5R5 URS[R"S5R5 URS[R"S5R5 URS[R"S5R5 g)NTz::ffff:127.100.200.254/128z::ffff:127.42.0.0/112Fz::ffff:128.0.0.0z::ffff:127.100.200.254z::ffff:127.42.0.0)r+r rArr6rs r�testIpv4MappedLoopbackCheck�*IpaddrUnitTest.testIpv4MappedLoopbackCheck�	s�������y�3�3�,� .�.9�k�	;�����y�3�3�'� )�)4��	6�����	� 4� 4�"�!$�$/�K�	1�	
����y�3�3�(� *�*5�+�	7�����y�3�3�#� %�%0�[�	2�����	� 4� 4�"�!$�$/�K�	1rc
���[R"S5n[R"S5n[R"S5n[R"S5n[R"S5n[R"S5nUR[	[UR
U555[R"S5[R"S5/5 UR[[
UR
U55 UR[[
UR
U55 UR[[
UR
U55 UR[UR
U55/5 UR[	[UR
U555[R"S	5[R"S
5[R"S5[R"S5[R"S
5[R"S5[R"S5[R"S5/5 g)N�10.1.1.0/24z10.1.1.0/26z10.2.1.0/24�10.1.1.0z2001:db8::0/32z10.1.1.5/32z10.1.1.64/26z
10.1.1.128/25z10.1.1.0/30z10.1.1.4/32z10.1.1.6/31z10.1.1.8/29z10.1.1.16/28z10.1.1.32/27)
r rAr6r+r�r��address_excluderKr1rL�r
r��addr2�addr3r�addr5�addr6s       r�testAddrExclude�IpaddrUnitTest.testAddrExclude�	s����$�$�]�3���$�$�]�3���$�$�]�3���$�$�Z�0���$�$�%5�6���$�$�]�3�������U�%:�%:�5�%A� B�C�#�.�.�~�>�#�.�.��?�A�	B�	
���*�d�E�,A�,A�%�,H�I����)�T�5�+@�+@��+G�H����)�T�5�+@�+@��+G�H�����e�3�3�E�:�;�R�@������U�%:�%:�5�%A� B�C�#�.�.�}�=�#�.�.�}�=�#�.�.�}�=�#�.�.�}�=�#�.�.�~�>�#�.�.�~�>�#�.�.�~�>�#�.�.��?�A�	Brc��UR[[R"S55[[R"S555 UR[[R"S55[[R"S555 UR[[R
"S55[[R
"S555 UR[[R
"S55[[R
"[
[R
"S5R5555 [R
"S5n[R
"S5n0nSX0R'SX0R'SX1'SX2'URURU5 URX#5 g)Nrrr�r)r+�hashr r<rAr6r�r�r�r�r�)r
r�r��dummys    r�testHash�IpaddrUnitTest.testHash
s`������i�4�4�]�C�D��i�4�4�]�C�D�	F�����i�2�2�=�A�B��i�2�2�=�A�B�	D�����i�2�2�:�>�?��i�2�2�:�>�?�	A�	
����i�2�2�9�=�>��i�2�2��	�,�,�Y�7�;�;�<�>�?�	@��"�"�:�.���"�"�5�)����#'���� �#'���� ���
���
��
�
�d�'�'��/��
�
�c�!rc��URnURSUR5 URnUR	[
URSS-S-5 g)Nr�r�r�rJ)r�r+�
compressedr�rKr1�_string_from_ip_intr!s  r�testIPBases�IpaddrUnitTest.testIPBases$
sL����������s�~�~�6��������*�c�&=�&=�q�#�v��z�Jrc��URnURSUR5 URSUR5 URSUR5 URS[U55 g)Nr�z)2001:658:22a:cafe::/ffff:ffff:ffff:ffff::z)2001:658:22a:cafe::/::ffff:ffff:ffff:ffff)r�r+�with_prefixlen�with_netmask�
with_hostmaskr�r!s  r�testIPv6NetworkHelpers�%IpaddrUnitTest.testIPv6NetworkHelpers*
sm���������1�3�3E�3E�F����D��)�)�	+����D��*�*�	,����1�3�s�8�<rc��URnURSUR5 URSUR5 URSUR5 URS[U55 g)Nr�z1.2.3.0/255.255.255.0z1.2.3.0/0.0.0.255)r�r+r2r3r4r�r!s  r�testIPv4NetworkHelpers�%IpaddrUnitTest.testIPv4NetworkHelpers3
se����������s�'9�'9�:����0�#�2B�2B�C����,�c�.?�.?�@�����s�3�x�0rc���[R"S5n[R"U5n[R"S5n[R"U5n[R"S5n[R"S5nURX5 URX45 URU[R"U55 URU[R"U55 g)Nrr�r�r)r rAr<r�r$r+r s       r�testCopyConstructor�"IpaddrUnitTest.testCopyConstructor:
s����$�$�]�3���$�$�U�+���&�&�'D�E���&�&�u�-���%�%�i�0���%�%�&@�A������&�����&�����	� 5� 5�e� <�=�����	� 5� 5�e� <�=rc	��0SS_SS_SS_SS_S	S
_SS_S
S_SS_SS_SS_SS_SS_SS_SS_SS_SS _S!S"_S#S$S%S&S'.En[UR55H4up#URU[[R
"U555 M6 g)(Nz1:2:3:4:5:6:7:8z1:2:3:4:5:6:7:8/128z2001:0:0:4:0:0:0:8z2001:0:0:4::8/128z2001:0:0:4:5:6:7:8z2001::4:5:6:7:8/128z2001:0:3:4:5:6:7:8z2001:0:3:4:5:6:7:8/128z0:0:3:0:0:0:0:ffffz0:0:3::ffff/128z0:0:0:4:0:0:0:ffffz::4:0:0:0:ffff/128z0:0:0:0:5:0:0:ffffz::5:0:0:ffff/128z1:0:0:4:0:0:7:8z1::4:0:0:7:8/128z0:0:0:0:0:0:0:0rz0:0:0:0:0:0:0:0/0r�z0:0:0:0:0:0:0:1r�z*2001:0658:022a:cafe:0000:0000:0000:0000/66rhr�z
::102:304/128z1:2:3:4:5:ffff:1.2.3.4z1:2:3:4:5:ffff:102:304/128z::7:6:5:4:3:2:1z0:7:6:5:4:3:2:1/128z::7:6:5:4:3:2:0z0:7:6:5:4:3:2:0/128z7:6:5:4:3:2:1::z7:6:5:4:3:2:1:0/128z0:6:5:4:3:2:1:0/128z::ffff:ffff/128z::ffff:255.255.255.255/128z+ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff/128)z0:6:5:4:3:2:1::z-0000:0000:0000:0000:0000:0000:255.255.255.255z-0000:0000:0000:0000:0000:ffff:255.255.255.255z-ffff:ffff:ffff:ffff:ffff:ffff:255.255.255.255)r��itemsr+r�r r")r
�test_addresses�uncompressedr-s    r�testCompressIPv6Address�&IpaddrUnitTest.testCompressIPv6AddressG
s6����4�� �"5��
!�"7��
!�":�	�

!�"3��
!�"6�
�
!�"4��
�1��
�x��
 ���
�y��
9�$��
���
%�&B�� 
�4�!�"
�4�#�$
�4�%�& 5�=N�=Y�=�/��2)-�^�-A�-A�-C�(D�$�L����Z��Y�-D�-D��.�*�
 �)Erc���[R"S5n[R"S5n[R"S5n[R"S5nURSUR5 URS[R"S5R5 URSUR5 URS	UR5 URSUR5 g)
Nz2001::1�2001:0:5ef5:79fd:0:59d:a0e5:ba1r�z
192.168.178.1z+2001:0000:0000:0000:0000:0000:0000:0001/128z+0000:0000:0000:0000:0000:0000:0000:0001/128r�z'2001:0000:5ef5:79fd:0000:059d:a0e5:0ba1z*2001:0000:0000:0000:0000:0000:0000:0000/96)r r"r$r�r�r+r)r
r�r!r"rs     r�testExplodeShortHandIpStr�(IpaddrUnitTest.testExplodeShortHandIpStre
s����'�'�	�2���%�%�&G�H���%�%�k�2���%�%�o�6�����F����	)����F�"�0�0��;�D�D�	F�	
���B����	)����E����	)�����%�.�.�9rc��SHPupURSUS9 [R"U5nURURU5 SSS5 MR SHPupBURSUS9 [R
"U5nURURU5 SSS5 MR g!,(df   M�=f!,(df   Mv=f)N))rz1.0.0.127.in-addr.arpa)z	10.2.0.52z52.0.2.10.in-addr.arpa�ipv4_reverse_pointer)r[))r�zH1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.8.b.d.0.1.0.0.2.ip6.arpa)z::FFFF:192.168.1.35zH3.2.1.0.8.a.0.c.f.f.f.f.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa)z4321:0:1:2:3:4:567:89abzHb.a.9.8.7.6.5.0.4.0.0.0.3.0.0.0.2.0.0.0.1.0.0.0.0.0.0.0.1.2.3.4.ip6.arpa�ipv6_reverse_pointer)rXr r�r+�reverse_pointerr$)r
�addr_v4�expectedr[�addr_v6s     r�testReversePointer�!IpaddrUnitTest.testReversePointeru
s���"
��G�
���4�7��C� �,�,�W�5��� � ��!5�!5�x�@�D�C�"
�"
��G�0���4�7��C� �,�,�W�5��� � ��!5�!5�x�@�D�C�1"
�	D�C��8D�C�s�3B.�.3C�.
B=	�
C	c��URS[UR55 URS[UR55 g)Nr�r�)r+r�r�r�rs r�testIntRepresentation�$IpaddrUnitTest.testIntRepresentation�
s<������3�t�'8�'8�#9�:����?��T�.�.�/�	1rc���UR[R"S5RS5 UR[R"S5RS5 g)NrJr�r�)r+r rAr�r�rs r�testForceVersion�IpaddrUnitTest.testForceVersion�
sD������-�-�a�0�8�8�!�<�����.�.�q�1�9�9�1�=rc���URURRS5 URURRS5 URURRS5 URUR
RS5 URUR
RS5 URUR
RS5 g)Nr�z1.2.3.4/255.255.255.0z1.2.3.4/0.0.0.255r�z.2001:658:22a:cafe:200::1/ffff:ffff:ffff:ffff::z.2001:658:22a:cafe:200::1/::ffff:ffff:ffff:ffff)r+r�r2r3r4r�rs r�testWithStar�IpaddrUnitTest.testWithStar�
s�������,�,�;�;�\�J�����,�,�9�9�0�	2�����,�,�:�:�,�	.�	
����,�,�;�;�6�	8�����,�,�9�9�I�	K�	
����,�,�:�:�I�	Krc��URSURR5 URSURR5 URURR[
R"S55 URURR[
R"S55 URSURR5 URSURR5 URSURR5 URSURR5 URURR[
R"S55 URURRR[
R"S55 URURR[
R"S55 URURR[
R"S55 URURRR[
R"S55 URURRR[
R"S55 URSURR5 URSURR5 URSURRR5 URSURRR5 g)Nr'r�r%z	0.0.0.255r�r&r�)r�r��__dict__r+r'r r�r�r�r�r�r$r�r@rs r�testNetworkElementCaching�(IpaddrUnitTest.testNetworkElementCaching�
s������,�d�.?�.?�.H�.H�I�����T�%6�%6�%?�%?�@�	
����*�*�<�<�"�.�.�{�;�	=�����*�*�3�3�"�.�.�{�;�	=�	
�
�
�)�4�+<�+<�+E�+E�F��
�
�j�$�"3�"3�"<�"<�=�	
���,�d�.?�.?�.H�.H�I�����T�%6�%6�%?�%?�@�	
����*�*�:�:�"�.�.�/D�E�	G�����,�,�4�4�D�D�"�.�.�/D�E�	G�	
������/�/��!�!�"I�J�	L�	
����*�*�3�3�"�.�.�/F�G�	I�������'�'�9�9��!�!�"I�J�	L�	
����,�,�4�4�=�=�"�.�.�/F�G�	I�	
�
�
�)�4�+<�+<�+E�+E�F��
�
�j�$�"3�"3�"<�"<�=��
�
�)�4�+>�+>�+F�+F�+O�+O�P��
�
�j�$�"5�"5�"=�"=�"F�"F�Grc�>�[R"S5n[R"S5nSnURX4[R"U5R5 SnUR[R"U5R5 SnUR[R"U5R5 [R"S5nUR[R"S5[R"S54UR5 g)	Nz
65.54.227.120z
192.0.2.45z'2001:0000:4136:e378:8000:63bf:3fff:fdd2z#2000::4136:e378:8000:63bf:3fff:fdd2z'2001:0001:4136:e378:8000:63bf:3fff:fdd2rDz94.245.121.253z95.26.244.94)r r�r+r6�teredor�r$)r
�server�client�teredo_addr�bad_addrs     r�
testTeredo�IpaddrUnitTest.testTeredo�
s����&�&��7���&�&�|�4��?�����&�)�"�-�-�k�:�A�A�	C�8������-�-�h�7�>�>�?�<������-�-�h�7�>�>�?� �+�+�,M�N�����)�/�/�0@�A�#�/�/��?�A�$�+�+�	-rc���[R"S5n[R"S5nUR[R"S5UR5 URUR5 g)Nz2002:ac1d:2d64::1z2000:ac1d:2d64::1z
172.29.45.100)r r6r+r��	sixtofourr�)r
�
sixtofouraddrrbs   r�
testsixtofour�IpaddrUnitTest.testsixtofour�
s\��!�,�,�-@�A�
��'�'�(;�<������.�.��?�&�0�0�	2�����+�+�,rc��[R"S5n[R"S5nURUR5UR55 g)Nr�z2.3.4.5)r r�rJ�__hash__)r
�
ipv4_address1�
ipv4_address2s   r�testV4HashIsNotConstant�&IpaddrUnitTest.testV4HashIsNotConstant�
sD��!�/�/�	�:�
�!�/�/�	�:�
����M�2�2�4�m�6L�6L�6N�Orc��[R"S5n[R"S5nURUR5UR55 g)Nr�z2001:658:22a:cafe:200:0:0:2)r r"rJrk)r
�
ipv6_address1�
ipv6_address2s   r�testV6HashIsNotConstant�&IpaddrUnitTest.testV6HashIsNotConstant�
sF��!�/�/�0M�N�
�!�/�/�0M�N�
����M�2�2�4�m�6L�6L�6N�Orc��UR[R"S5R5[R"S5R55 UR[R"S5R5[R"S5R55 UR[R"S5R5[R"S5R55 g)Nz192.168.1.255/32z192.168.1.0/24z172.24.255.0/24z
172.24.0.0/16z192.168.1.87/32z192.168.1.86/31)rJr r�rkrs r�testNetworkV4HashCollisions�*IpaddrUnitTest.testNetworkV4HashCollisionss�������!�!�"4�5�>�>�@��!�!�"2�3�<�<�>�	
�	
����!�!�"3�4�=�=�?��!�!�/�2�;�;�=�	
�	
����!�!�"3�4�=�=�?��!�!�"3�4�=�=�?�	
rc�\�UR[R"S5R5[R"S5R55 UR[R"S5R5[R"S5R55 g)Nz	fe80::/64zfe80::ffff:ffff:ffff:0/112rz'ffff:ffff:ffff:ffff:ffff:ffff:aff:0/112)rJr r�rkr�rs r�testNetworkV6HashCollisions�*IpaddrUnitTest.testNetworkV6HashCollisionss~������!�!�+�.�7�7�9��!�!�">�?�H�H�J�	
�	
����!�!�,�/�8�8�:��!�!�9�
��h�j�		
r)
r�r�r�r�r�r�r�r�r�r�N)Tr2r3r4r5r�r�r�r�r�r�r�r�r�r�rrrrrr"r(r+r2r7rCrTrZr]rbrerkrprurxr{r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rrrrrrrr%r*r/r5r8r;rArErNrQrTrWr[rcrhrnrsrvryr9r1rrr�r�;s���H�"E�DE�N@C�F@�5�O�2�"�00� 5�	A�"�A�V�,�B�K�
0�"
0�K�*UG�nK�.
T�-�-�-�,�(@�K�@�/�"6�	U�	2�%:�N57�n?�3�'�`*�DGF�R;�K@�ZU6�nM�
1�2�I�<>�H�
B�,@�KO�Z M�D[P�z>�E�0M�1� B�0"�*K�=�1�>� �<:� $A�L1�
>�K� (H�T-�$-�P�P�
�

rr��__main__)r��unittestrDr7rMrVr r�collections.abcr�test.supportrr�TestCaserr;rar�r�r)r�r�r�rr!r$r.rEr�r2�mainr1rr�<module>r�s0����	���
���$�*�3?�8�$�$�3?�l'�'�2.��.�b/"��/"�bu?��'9�u?�pE4��'9�E4�PV&�,�V&�r&�<�)<�&�36��':�36�lf1�,�f1�R&�<�)<�&�,0��':�,0�^A�L�A�&rA�h�'�'�rA�jb
�X�&�&�b
�J7�z���M�M�O�r

Youez - 2016 - github.com/yon3zu
LinuXploit