grthtrhthjhtyjytjytkergtrhtrjytjerhrfh4:24 29/09/2026o ®û|jÅ;ã@s† dZddlZdZdZGdd„deƒZGdd„deƒZd d „Zd7}|d|j krqdS||ksGdSdS)Nz1first and last must be IP addresses, not networksú%%s and %s are not of the same versionz*last IP address must be greater than firstrézunknown IP versionr-) Ú isinstanceÚ _BaseAddressÚ TypeErrorÚversionrrrÚ_max_prefixlenr0r7r:r8Ú _ALL_ONES)r3r4r5Zip_bitsZ first_intZlast_intZnbitsÚnetr r r Úsummarize_address_rangeÈs<€ ÿ ÿ   ÿ ùrDccs–� t|ƒ}i}|r.| ¡}| ¡}| |¡}|dur |||<n ||kr,||=| |¡|s d}t| ¡ƒD]}|durC|j|jkrCq6|V|}q6dS©N)ÚlistÚpopÚsupernetÚgetÚappendÚsortedÚvaluesÚbroadcast_address)r1Zto_mergeÚsubnetsrCrHZexistingr4r r r Ú_collapse_addresses_internalÿs,€   ÷  ùrOc Cs* g}g}g}|D]l}t|tƒr*|r$|dj|jkr$td||dfƒ‚| |¡q |j|jkr\|rD|dj|jkrDtd||dfƒ‚z| |j¡Wq ty[| |j ¡Yq w|rp|dj|jkrptd||dfƒ‚| |¡q t t |ƒƒ}|r�t |ƒD] \}}|  t||ƒ¡q‚t||ƒS)Néÿÿÿÿr;)r=r>Ú_versionr?rJÚ _prefixlenrAr5ÚAttributeErrorÚnetwork_addressrKÚsetr6ÚextendrDrO)r1ZaddrsZipsZnetsr5r3r4r r r Úcollapse_addresses0s> ÿ  ÿ ÿÿ   rWcCs* t|tƒr | ¡St|tƒr| ¡StSrE)r=Ú _BaseNetworkÚ_get_networks_keyr>Ú_get_address_keyÚNotImplemented)Úobjr r r Úget_mixed_type_keyfs   r]c@s¢eZdZ dZedd„ƒZedd„ƒZedd„ƒZedd „ƒZd d „Z d d „Z e dd„ƒZ e dd„ƒZ e dd„ƒZe dd„ƒZe dd„ƒZe dd„ƒZdd„ZdS)Ú_IPAddressBaser cCó | ¡SrE)Ú_explode_shorthand_ip_string©Úselfr r r Úexploded…óz_IPAddressBase.explodedcCs t|ƒSrE©r'rar r r Ú compressedŠrdz_IPAddressBase.compressedcCr_rE)Ú_reverse_pointerrar r r Úreverse_pointer�óz_IPAddressBase.reverse_pointercCódt|ƒf}t|ƒ‚)Nz%200s has no version specified©ÚtypeÚNotImplementedError©rbÚmsgr r r r@šsz_IPAddressBase.versioncCsF|dkrd}t|||jfƒ‚||jkr!d}t|||j|jfƒ‚dS)Nrz-%d (< 0) is not permitted as an IPv%d addressz2%d (>= 2**%d) is not permitted as an IPv%d address)rrQrBrA)rbrror r r Ú_check_int_addressŸs  ÿþz!_IPAddressBase._check_int_addresscCs.t|ƒ}||krd}t|||||jfƒ‚dS)Nz6%r (len %d != %d) is not permitted as an IPv%d address)r)rrQ)rbrZ expected_lenZ address_lenror r r Ú_check_packed_address¨sÿþz$_IPAddressBase._check_packed_addresscCs |j|j|?ASrE)rB)ÚclsÚ prefixlenr r r Ú_ip_int_from_prefix¯s z"_IPAddressBase._ip_int_from_prefixc Cs^ t||jƒ}|j|}||?}d|>d}||kr-|jd}| |d¡}d}t||ƒ‚|S)Nr-érz&Netmask pattern %r mixes zeroes & ones)r:rAr r) rrÚip_intZtrailing_zeroesrsZ leading_onesZall_onesZbyteslenZdetailsror r r Ú_prefix_from_ip_int¼s ÿ     z"_IPAddressBase._prefix_from_ip_intcCsd|}t|ƒd‚)Nz%r is not a valid netmask)r )rrZ netmask_strror r r Ú_report_invalid_netmaskÕs z&_IPAddressBase._report_invalid_netmaskcCsl | ¡r | ¡s| |¡zt|ƒ}Wnty"| |¡Ynwd|kr.|jks4n| |¡|S©Nr)ÚisasciiÚisdigitrxÚintrrA)rrZ prefixlen_strrsr r r Ú_prefix_from_prefix_stringÚs   ÿ z)_IPAddressBase._prefix_from_prefix_stringcCs„ z| |¡}Wnty| |¡Ynwz| |¡WSty&Ynw||jN}z| |¡WStyA| |¡YdSwrE)Ú_ip_int_from_stringrrxrwrrB)rrÚip_strrvr r r Ú_prefix_from_ip_stringós"  ÿ  ÿ   ÿz%_IPAddressBase._prefix_from_ip_stringcCsJ t|ttfƒr ||jfSt|tƒst|ƒ}t|ƒdkr|S|d|jfS)Nr-r)r=Úbytesr|rAÚtupler+r))rrrr r r Ú_split_addr_prefixs   z!_IPAddressBase._split_addr_prefixcCs|jt|ƒffSrE)Ú __class__r'rar r r Ú __reduce__-óz_IPAddressBase.__reduce__N)rrr Ú __slots__Úpropertyrcrfrhr@rprqÚ classmethodrtrwrxr}r€rƒr…r r r r r^s4          !  r^csreZdZ dZdd„Zdd„Zdd„Zdd „Zd d „Zd d „Z dd„Z dd„Z dd„Z dd„Z ‡fdd„Z‡ZS)r>r cCó|jSrE)r0rar r r Ú__int__>sz_BaseAddress.__int__cCs2z |j|jko |j|jkWStytYSwrE)r0rQrSr[©rbÚotherr r r Ú__eq__As  ÿ ÿz_BaseAddress.__eq__cCsFt|tƒstS|j|jkrtd||fƒ‚|j|jkr!|j|jkSdS©Nr;F)r=r>r[rQr?r0rŒr r r Ú__lt__Hs  ÿ  z_BaseAddress.__lt__cCs t|tƒstS| t|ƒ|¡SrE©r=r|r[r„rŒr r r Ú__add__Tó z_BaseAddress.__add__cCs t|tƒstS| t|ƒ|¡SrEr‘rŒr r r Ú__sub__Yr“z_BaseAddress.__sub__cCód|jjt|ƒfS©Nz%s(%r)©r„rr'rar r r Ú__repr__^óz_BaseAddress.__repr__cCst| |j¡ƒSrE)r'Ú_string_from_ip_intr0rar r r Ú__str__ar†z_BaseAddress.__str__cCsttt|jƒƒƒSrE)ÚhashÚhexr|r0rar r r Ú__hash__dsz_BaseAddress.__hash__cCs |j|fSrE©rQrar r r rZgs z_BaseAddress._get_address_keycCs|j|jffSrE)r„r0rar r r r…jsz_BaseAddress.__reduce__csØ |r |ddkrtt|ƒ|ƒStdurddl}| d¡at |¡}|s*tƒ |¡S| ¡\}}}|dkr?|j dkr=d}nd}|dkrG|j }n|j d}|rV||dd 7}|r\|d 7}tt |ƒ|›d |›|›|›�ƒS) NrPÚsrz(#?)(_?)([xbnX])ÚnrÚbÚxr-r&Ú0) Úformatr'Ú_address_fmt_reÚreÚcompileÚ fullmatchÚsuperÚ __format__ÚgroupsrQrAr|)rbZfmtr§ÚmZ alternateZgroupingZfmt_baseZpadlen©r„r r r«ms,       z_BaseAddress.__format__)rrr r‡r‹rŽr�r’r”r˜r›ržrZr…r«Ú __classcell__r r r®r r>3s r>c@s^eZdZ dd„Zdd„Zdd„Zdd„Zd d „Zd d „Zd d„Z dd„Z dd„Z dd„Z e jdd„ƒZe jdd„ƒZedd„ƒZedd„ƒZedd„ƒZedd „ƒZed!d"„ƒZed#d$„ƒZd%d&„Zd'd(„Zd)d*„ZdEd-d.„ZdEd/d0„Zed1d2„ƒZed3d4„ƒZd5d6„Z d7d8„Z!ed9d:„ƒZ"ed;d<„ƒZ#ed=d>„ƒZ$ed?d@„ƒZ%edAdB„ƒZ&edCdD„ƒZ'd,S)FrXcCr•r–r—rar r r r˜§r™z_BaseNetwork.__repr__cCód|j|jfS©Nú%s/%d)rTrsrar r r r›ªr†z_BaseNetwork.__str__ccs<� t|jƒ}t|jƒ}t|d|ƒD]}| |¡VqdSr,©r|rTrMÚrangeÚ_address_class©rbÚnetworkÚ broadcastr£r r r Úhosts­s€  ÿz_BaseNetwork.hostsccs:�t|jƒ}t|jƒ}t||dƒD]}| |¡VqdSr,r³r¶r r r Ú__iter__¹s €  ÿz_BaseNetwork.__iter__cCsht|jƒ}t|jƒ}|dkr|||krtdƒ‚| ||¡S|d7}|||kr-tdƒ‚| ||¡S)Nrzaddress out of ranger-)r|rTrMÚ IndexErrorrµ)rbr¡r·r¸r r r Ú __getitem__¿s    z_BaseNetwork.__getitem__cCs^t|tƒstS|j|jkrtd||fƒ‚|j|jkr!|j|jkS|j|jkr-|j|jkSdSr�)r=rXr[rQr?rTÚnetmaskrŒr r r r�Ìs  ÿ    z_BaseNetwork.__lt__cCsFz|j|jko|j|jkot|jƒt|jƒkWSty"tYSwrE)rQrTr|r½rSr[rŒr r r rŽØs  ÿþ ÿz_BaseNetwork.__eq__cCstt|jƒt|jƒfƒSrE)rœr|rTr½rar r r ržàsz_BaseNetwork.__hash__cCs4|j|jkrdSt|tƒrdS|j|jj@|jjkS©NF)rQr=rXr0r½rTrŒr r r Ú __contains__ãs  z_BaseNetwork.__contains__cCs* |j|vp|j|vp|j|vp|j|vSrE)rTrMrŒr r r Úoverlapsïs    ýz_BaseNetwork.overlapscCs| t|jƒt|jƒB¡SrE)rµr|rTÚhostmaskrar r r rMös ÿz_BaseNetwork.broadcast_addresscCs| t|jƒ|jA¡SrE)rµr|r½rBrar r r rÁûsz_BaseNetwork.hostmaskcCr°r±)rTrRrar r r Úwith_prefixlenÿóz_BaseNetwork.with_prefixlencCr°©Nú%s/%s)rTr½rar r r Ú with_netmaskrÃz_BaseNetwork.with_netmaskcCr°rÄ)rTrÁrar r r Ú with_hostmaskrÃz_BaseNetwork.with_hostmaskcCs t|jƒt|jƒdSr,)r|rMrTrar r r Ú num_addresses sz_BaseNetwork.num_addressescCrj)Nz%%200s has no associated address classrkrnr r r rµsz_BaseNetwork._address_classcCrŠrE)rRrar r r rsóz_BaseNetwork.prefixlenccs"� |j|jkstd||fƒ‚t|tƒstd|ƒ‚| |¡s(td||fƒ‚||kr.dS| d|j|jf¡}|  ¡\}}||krv||krv| |¡rV|V|  ¡\}}n| |¡re|V|  ¡\}}n t d|||fƒ‚||krv||ksG||kr|VdS||krˆ|VdSt d|||fƒ‚)Nr;z%s is not a network objectz%s not contained in %srÅz3Error performing exclusion: s1: %s s2: %s other: %s) rQr?r=rXÚ subnet_ofrr„rTrsrNÚAssertionError)rbr�Ús1Ús2r r r Úaddress_excludesD€ #ÿ    ÿ   þ÷  þz_BaseNetwork.address_excludecCsb |j|jkrtd||fƒ‚|j|jkrdS|j|jkrdS|j|jkr'dS|j|jkr/dSdS)Nz"%s and %s are not of the same typerPr-r)rQr?rTr½rŒr r r Úcompare_networksgs ÿ    z_BaseNetwork.compare_networkscCs |j|j|jfSrE)rQrTr½rar r r rY—sz_BaseNetwork._get_networks_keyr-Nc csÖ� |j|jkr |VdS|dur'||jkrtdƒ‚|dkr"tdƒ‚||j}|dkr/tdƒ‚|j|}||jkrAtd||fƒ‚t|jƒ}t|jƒd}t|jƒd|?}t|||ƒD] }| ||f¡}|Vq\dS)Nznew prefix must be longerr-ú(cannot set prefixlen_diff and new_prefixrzprefix length diff must be > 0z0prefix length diff %d is invalid for netblock %s) rRrArr|rTrMrÁr´r„) rbÚprefixlen_diffÚ new_prefixÚ new_prefixlenÚstartÚendÚstepZnew_addrZcurrentr r r rN¡s6€     ÿÿ þz_BaseNetwork.subnetscCsŠ |jdkr|S|dur"||jkrtdƒ‚|dkrtdƒ‚|j|}|j|}|dkr4td|j|fƒ‚| t|jƒt|jƒ|>@|f¡S)Nrznew prefix must be shorterr-rÐz;current prefixlen is %d, cannot have a prefixlen_diff of %d)rRrrsr„r|rTr½)rbrÑrÒrÓr r r rHÖs(    ÿÿþz_BaseNetwork.supernetcCó |jjo|jjSrE)rTÚ is_multicastrMrar r r rØÿóÿz_BaseNetwork.is_multicastcCs^z|j|jkrt|›d|›d�ƒ‚|j|jko|j|jkWSty.td|›d|›�ƒ‚w)Nz and z are not of the same versionz*Unable to test subnet containment between )rQr?rTrMrS)Úar¢r r r Ú _is_subnet_of s   ÿ ÿÿÿz_BaseNetwork._is_subnet_ofcCs | ||¡SrE©rÛrŒr r r rÊó z_BaseNetwork.subnet_ofcCs | ||¡SrErÜrŒr r r Ú supernet_ofrÝz_BaseNetwork.supernet_ofcCr×rE)rTÚ is_reservedrMrar r r rßrÙz_BaseNetwork.is_reservedcCr×rE)rTÚ is_link_localrMrar r r rà+sÿz_BaseNetwork.is_link_localcCr×rE)rTÚ is_privaterMrar r r rá6rÙz_BaseNetwork.is_privatecCs |j SrE)rárar r r Ú is_globalBriz_BaseNetwork.is_globalcCr×rE)rTÚis_unspecifiedrMrar r r rãMrÙz_BaseNetwork.is_unspecifiedcCr×rE)rTÚ is_loopbackrMrar r r räYrÙz_BaseNetwork.is_loopback)r-N)(rrr r˜r›r¹rºr¼r�rŽržr¿rÀÚ functoolsÚcached_propertyrMrÁrˆrÂrÆrÇrÈrµrsrÎrÏrYrNrHrØÚ staticmethodrÛrÊrÞrßràrárârãrär r r r rXŸsf            K0 5)         rXc@s‚eZdZ dZdZdedZeZiZdd„Z e dd„ƒZ e d d „ƒZ e d d „ƒZ e d d„ƒZdd„Zedd„ƒZedd„ƒZdS)Ú_BaseV4r rr&r-cCst|ƒSrErerar r r r`xsz$_BaseV4._explode_shorthand_ip_stringcCs� ||jvrCt|tƒr|}d|kr|jksn| |¡nz| |¡}Wnty4| |¡}Ynwt|  |¡ƒ}||f|j|<|j|Sry) Ú_netmask_cacher=r|rArxr}r r€rrt©rrÚargrsr½r r r Ú _make_netmask{s   € ý z_BaseV4._make_netmaskc Csr |stdƒ‚| d¡}t|ƒdkrtd|ƒ‚z t t|j|ƒd¡WSty8}z td||fƒd‚d}~ww)NúAddress cannot be emptyÚ.rzExpected 4 octets in %rrú%s in %r)rr(r)r|Ú from_bytesÚmapÚ _parse_octetr)rrrZoctetsÚexcr r r r~•s    €ÿz_BaseV4._ip_int_from_stringcCs� |stdƒ‚| ¡r| ¡sd}t||ƒ‚t|ƒdkr%d}t||ƒ‚|dkr7|ddkr7d}t||ƒ‚t|dƒ}|d krFtd |ƒ‚|S) NzEmpty octet not permittedz#Only decimal digits permitted in %réz$At most 3 characters permitted in %rr¤rz%Leading zeros are not permitted in %ré éÿzOctet %d (> 255) not permitted)rrzr{r)r|)rrZ octet_strroZ octet_intr r r rò¯s        z_BaseV4._parse_octetcCs d tt| dd¡ƒ¡S)Nrîrr)Újoinrñr'r )rrrvr r r ršÓs z_BaseV4._string_from_ip_intcCs( t|ƒ d¡ddd…}d |¡dS)NrîrPz .in-addr.arpa)r'r(r÷)rbZreverse_octetsr r r rgàóz_BaseV4._reverse_pointercCrŠrE©rArar r r Ú max_prefixlenérÉz_BaseV4.max_prefixlencCrŠrErŸrar r r r@írÉz_BaseV4.versionN)rrr r‡rQÚ IPV4LENGTHrBrArér`r‰rìr~ròršrgrˆrúr@r r r r rèes*    #   rèc@sŠeZdZ dZdd„Zedd„ƒZedd„ƒZee  ¡dd „ƒƒZ ee  ¡d d „ƒƒZ ed d „ƒZ edd„ƒZ edd„ƒZedd„ƒZdS)r)r0Ú __weakref__cCsv t|tƒr| |¡||_dSt|tƒr$| |d¡t |d¡|_dSt|ƒ}d|vr3td|›�ƒ‚|  |¡|_dS)Nrrr%úUnexpected '/' in ) r=r|rpr0r�rqrðr'rr~©rbrZaddr_strr r r Ú__init__øs    zIPv4Address.__init__cCó t|jƒSrE)r"r0rar r r Úpackedó zIPv4Address.packedcCó ||jjvSrE)Ú _constantsÚ_reserved_networkrar r r rß ó zIPv4Address.is_reservedcs6 t‡fdd„ˆjjDƒƒot‡fdd„ˆjjDƒƒS)Nc3ó�|]}ˆ|vVqdSrEr ©Ú.0rCrar r Ú =ó€z)IPv4Address.is_private..c3ó�|]}ˆ|vVqdSrEr rrar r r >r )ÚanyrÚ_private_networksÚallÚ_private_networks_exceptionsrar rar rá+sþzIPv4Address.is_privatecCs ||jjvo |j SrE)rÚ_public_networkrárar r r râAs zIPv4Address.is_globalcCrrE)rÚ_multicast_networkrar r r rØSrzIPv4Address.is_multicastcCs ||jjkSrE)rÚ_unspecified_addressrar r r rã^rzIPv4Address.is_unspecifiedcCrrE)rÚ_loopback_networkrar r r räió zIPv4Address.is_loopbackcCrrE)rÚ_linklocal_networkrar r r ràsrzIPv4Address.is_link_localN)rrr r‡rÿrˆrrßråÚ lru_cacherárârØrãräràr r r r ròs,#         rc@sxeZdZdd„Zejdd„ƒZdd„Zdd„Zd d „Z d d „Z e j Z e d d„ƒZe dd„ƒZe dd„ƒZe dd„ƒZdS)rcCóD| |¡\}}t ||¡t||fdd�|_|jj|_|jj|_dS©NF)r)rƒrrÿrr·r½rR©rbrr*Úmaskr r r rÿ€ó   zIPv4Interface.__init__cCó|jjSrE©r·rÁrar r r rÁˆózIPv4Interface.hostmaskcCód| |j¡|jfSr±©ršr0rRrar r r r›Œs ÿzIPv4Interface.__str__cCó@t ||¡}|tus |s|Sz|j|jkWStyYdSwr¾)rrŽr[r·rS©rbr�Z address_equalr r r rŽ�ó   üzIPv4Interface.__eq__cCsLt ||¡}|tur tSz|j|jkp|j|jko|WSty%YdSwr¾)rr�r[r·rS©rbr�Z address_lessr r r r�œó  ÿ ýzIPv4Interface.__lt__cCót|j|jt|jjƒfƒSrE©rœr0rRr|r·rTrar r r rž¨ózIPv4Interface.__hash__cCó t|jƒSrE)rr0rar r r r5­ó zIPv4Interface.ipcCr rÄr!rar r r r±ó ÿzIPv4Interface.with_prefixlencCr rÄ©ršr0r½rar r r rƶr,zIPv4Interface.with_netmaskcCr rÄ©ršr0rÁrar r r rÇ»r,zIPv4Interface.with_hostmaskN)rrr rÿrårærÁr›rŽr�ržr^r…rˆr5rÂrÆrÇr r r r r~s"      rc@s0eZdZ eZddd„Zee ¡dd„ƒƒZ dS)rTcóª | |¡\‰}tˆƒ|_| |¡\|_|_t|jƒ}|t|jƒ@|kr6|r,td|ƒ‚t|t|jƒ@ƒ|_|j|jdkrD|j |_ dS|j|jkrS‡fdd„|_ dSdS)Nú%s has host bits setr-có tˆƒgSrE)rr ©r*r r Úó z&IPv4Network.__init__..) rƒrrTrìr½rRr|rrArºr¹©rbrrrrr r2r rÿÐs "   ÿ  ÿzIPv4Network.__init__cCs( |jtdƒvo|jtdƒv o|j S)Nú 100.64.0.0/10)rTrrMrárar r r râs  ÿþzIPv4Network.is_globalN©T) rrr rrµrÿrˆrårrâr r r r rÁs 4rc@s¤eZdZedƒZedƒZedƒZedƒZedƒedƒedƒedƒedƒedƒed ƒed ƒed ƒed ƒed ƒedƒedƒedƒgZedƒedƒgZ edƒZ e dƒZ dS)Ú_IPv4Constantsz169.254.0.0/16z 127.0.0.0/8z 224.0.0.0/4r6z 0.0.0.0/8z 10.0.0.0/8z 172.16.0.0/12z 192.0.0.0/24z192.0.0.170/31z 192.0.2.0/24z192.168.0.0/16z 198.18.0.0/15z198.51.100.0/24z203.0.113.0/24z 240.0.0.0/4z255.255.255.255/32z 192.0.0.9/32z 192.0.0.10/32z0.0.0.0N) rrr rrrrrrrrrrr r r r r8s2òþ r8c@s¨eZdZ dZdZdedZdZedƒZ eZ iZ e dd„ƒZ e d d „ƒZe d d „ƒZe d d„ƒZe ddd„ƒZdd„Zdd„Zedd„ƒZedd„ƒZedd„ƒZdS)Ú_BaseV6r r<r&r-ruZ0123456789ABCDEFabcdefcCsn ||jvr2t|tƒr|}d|kr|jksn| |¡n| |¡}t| |¡ƒ}||f|j|<|j|Sry)rér=r|rArxr}rrtrêr r r rìPs   €  z_BaseV6._make_netmaskc Cs |stdƒ‚t|ƒdkr2|}t|ƒdkr+|dd…›dt|ƒd›d|dd…›�}td|›�ƒ‚|jd }|jd |d �}d }t|ƒ|krPd ||f}t|ƒ‚d|dvr‰z t| ¡ƒj}Wntyt}z td||fƒd‚d}~ww| d|d?d@¡| d|d@¡t|ƒ|kr›d|d |f}t|ƒ‚d} td t|ƒd ƒD]} || sº| dur¸d|}t|ƒ‚| } q¦| du�r| } t|ƒ| d } |dsÜ| d 8} | rÜd}t||ƒ‚|dsî| d 8} | rîd}t||ƒ‚|j| | } | d k�rd}t||jd |fƒ‚n5t|ƒ|jk�rd}t||j|fƒ‚|d�s(d}t||ƒ‚|d�s5d}t||ƒ‚t|ƒ} d} d} z7d}t| ƒD]} |dK}||  || ¡O}�qD|d| K}t| dƒD]} |dK}||  || ¡O}�qa|WSt �yŠ}z td||fƒd‚d}~ww)Nríé-édú(éZz chars elided)iÓÿÿÿz"At most 45 characters expected in r-ú:)Úmaxsplitrôz At least %d parts expected in %rrîrPrïú%xr#éÿÿz!At most %d colons permitted in %rz At most one '::' permitted in %rrz0Leading ':' only permitted as part of '::' in %rz1Trailing ':' only permitted as part of '::' in %rz/Expected at most %d other parts with '::' in %rz,Exactly %d parts expected without '::' in %r) rr)Ú _HEXTET_COUNTr(rrGr0rJr´Ú _parse_hextetr)rrrZshortenZ _max_partsÚpartsZ _min_partsroÚipv4_intróZ skip_indexÚiZparts_hiZparts_loZ parts_skippedrvr r r r~ds    ,ÿ    €ÿ €    þ      €ÿz_BaseV6._ip_int_from_stringcCs@ |j |¡s td|ƒ‚t|ƒdkrd}t||ƒ‚t|dƒS)NzOnly hex digits permitted in %rrz$At most 4 characters permitted in %rr#)Ú _HEX_DIGITSÚ issupersetrr)r|)rrZ hextet_strror r r rCÕs     z_BaseV6._parse_hextetc Cs¤ d}d}d}d}t|ƒD]\}}|dkr(|d7}|dkr|}||kr'|}|}q d}d}q |dkrP||}|t|ƒkr@|dg7}dg|||…<|dkrPdg|}|S)NrPrr¤r-Ú)Ú enumerater)) rrÚhextetsZbest_doublecolon_startZbest_doublecolon_lenZdoublecolon_startZdoublecolon_lenÚindexZhextetZbest_doublecolon_endr r r Ú_compress_hextetsïs4€ÿ   z_BaseV6._compress_hextetsNcs\ |dur t|jƒ}||jkrtdƒ‚d|‰‡fdd„tdddƒDƒ}| |¡}d |¡S) NzIPv6 address is too largeú%032xcs&g|]}dtˆ||d…dƒ‘qS)r@rr#)r|©r r£©Zhex_strr r Ú 4s&z/_BaseV6._string_from_ip_int..rrrr>)r|r0rBrr´rMr÷)rrrvrKr rPr ršs    z_BaseV6._string_from_ip_intcsŽ t|tƒr t|jƒ}nt|tƒrt|jƒ}nt|ƒ}| |¡}d|‰‡fdd„tdddƒDƒ}t|ttfƒrBdd  |¡|j fSd  |¡S) NrNcsg|] }ˆ||d…‘qS)rr rOrPr r rQIsz8_BaseV6._explode_shorthand_ip_string..rrrr²r>) r=rr'rTrr5r~r´rXr÷rR)rbrrvrDr rPr r`9s      z$_BaseV6._explode_shorthand_ip_stringcCs( |jddd… dd¡}d |¡dS)NrPr>rIrîú .ip6.arpa)rcÚreplacer÷)rbÚ reverse_charsr r r rgNrøz_BaseV6._reverse_pointercCsB | d¡\}}}|sd}||fS|rd|vrtd|ƒ‚||fS)Nú%zInvalid IPv6 address: "%r")Ú partitionr)rr*ÚsepÚscope_idr r r Ú_split_scope_idWs  þ z_BaseV6._split_scope_idcCrŠrErùrar r r rúkrÉz_BaseV6.max_prefixlencCrŠrErŸrar r r r@orÉz_BaseV6.versionrE)rrr r‡rQÚ IPV6LENGTHrBrBÚ frozensetrGrArér‰rìr~rCrMršr`rgrçrYrˆrúr@r r r r r9<s6   p  /   r9cseZdZ dZdd„Z‡fdd„Z‡fdd„Zdd „Z‡fd d „Zd d „Z ‡fdd„Z e dd„ƒZ e dd„ƒZ e dd„ƒZe dd„ƒZe dd„ƒZe dd„ƒZe e ¡dd„ƒƒZe dd„ƒZe d d!„ƒZe d"d#„ƒZe d$d%„ƒZe d&d'„ƒZe d(d)„ƒZ‡ZS)*r)r0Ú _scope_idrücCs’ t|tƒr| |¡||_d|_dSt|tƒr*| |d¡t |d¡|_d|_dSt|ƒ}d|vr9t d|›�ƒ‚|  |¡\}|_|  |¡|_dS)Nr#rr%rý) r=r|rpr0r\r�rqrðr'rrYr~rþr r r rÿzs     zIPv6Address.__init__cs:|j}|dur tƒ ¡Sd}tƒ ¡}|d|…›|›�S)Né)Ú ipv4_mappedrªr`)rbr^Ú prefix_lenÚraw_exploded_strr®r r r`¢s   z(IPv6Address._explode_shorthand_ip_stringcsb|j}|dur tƒ ¡Sd}tƒ ¡d|…}|j}|›|d›�ddd… dd¡}d |¡dS)Nr]Z008xrPr>rIrîrR)r^rªrgr`r0rSr÷)rbr^r_r`rErTr®r r rgªs  zIPv6Address._reverse_pointercCs@ |j}|durtdt|ƒƒ‚|jd?}d| |¡t|ƒfS)Nz0Can not apply to non-IPv4-mapped IPv6 address %srz%s:%s)r^rr'r0rš)rbr^Zhigh_order_bitsr r r Ú_ipv4_mapped_ipv6_to_strµs   z$IPv6Address._ipv4_mapped_ipv6_to_strcs:|j}|dur tƒ ¡}n| ¡}|jr|d|jS|S)NrU)r^rªr›rar\)rbr^rr®r r r›Çs  zIPv6Address.__str__cCst|j|jfƒSrE)rœr0r\rar r r ržÏr†zIPv6Address.__hash__cs2tƒ |¡}|tur tS|sdS|jt|ddƒkS)NFr\)rªrŽr[r\Úgetattrr#r®r r rŽÒs zIPv6Address.__eq__cCs |jSrE)r\rar r r rXÚszIPv6Address.scope_idcCrrE)r$r0rar r r rærzIPv6Address.packedcCó" |j}|dur |jS||jjvSrE)r^rØrr©rbr^r r r rØës  zIPv6Address.is_multicastcs0 ˆj}|dur |jSt‡fdd„ˆjjDƒƒS)Nc3rrEr rOrar r r r z*IPv6Address.is_reserved..)r^rßr rÚ_reserved_networksrdr rar rßùs zIPv6Address.is_reservedcCrcrE)r^ràrrrdr r r ràs  zIPv6Address.is_link_localcCrrE)rÚ_sitelocal_networkrar r r Ú is_site_locals zIPv6Address.is_site_localcsJ ˆj}|dur |jSt‡fdd„ˆjjDƒƒo$t‡fdd„ˆjjDƒƒS)Nc3rrEr rrar r r 7r z)IPv6Address.is_private..c3r rEr rrar r r 8r )r^rár rrrrrdr rar rá"sþzIPv6Address.is_privatecCs |j}|dur |jS|j SrE)r^rârárdr r r râ;s  zIPv6Address.is_globalcCó |j}|dur |jS|jdkSry)r^rãr0rdr r r rãOó  zIPv6Address.is_unspecifiedcCrhr,)r^rär0rdr r r rä]rizIPv6Address.is_loopbackcCs" |jd?dkr dSt|jd@ƒS)NrrAìÿÿ©r0rrar r r r^kszIPv6Address.ipv4_mappedcCs6 |jd?dkr dSt|jd?d@ƒt|jd@ƒfS)Né`i é@rjrkrar r r Úteredoxs ÿzIPv6Address.teredocCs& |jd?dkr dSt|jd?d@ƒS)Népi éPrjrkrar r r Ú sixtofour‡szIPv6Address.sixtofour)rrr r‡rÿr`rgrar›ržrŽrˆrXrrØrßràrgrårrárârãrär^rnrqr¯r r r®r rtsJ (                rcsœeZdZdd„Zejdd„ƒZ‡fdd„Zdd„Zd d „Z d d „Z e j Z e d d„ƒZe dd„ƒZe dd„ƒZe dd„ƒZe dd„ƒZe ‡fdd„ƒZ‡ZS)rcCrr)rƒrrÿrr·r½rRrr r r rÿ—rzIPv6Interface.__init__cCrrErrar r r rÁŸrzIPv6Interface.hostmaskcsdtƒ ¡|jfSr±)rªr›rRrar®r r r›£s ÿzIPv6Interface.__str__cCr"r¾)rrŽr[r·rSr#r r r rާr$zIPv6Interface.__eq__cCsLt ||¡}|tur |Sz|j|jkp|j|jko|WSty%YdSwr¾)rr�r[r·rSr%r r r r�³r&zIPv6Interface.__lt__cCr'rEr(rar r r rž¿r)zIPv6Interface.__hash__cCr*rE)rr0rar r r r5Är+zIPv6Interface.ipcCr rÄr!rar r r rÂÈr,zIPv6Interface.with_prefixlencCr rÄr-rar r r rÆÍr,zIPv6Interface.with_netmaskcCr rÄr.rar r r rÇÒr,zIPv6Interface.with_hostmaskcCs|jdko|jjSry)r0r·rãrar r r rã×szIPv6Interface.is_unspecifiedcstƒjo|jjSrE)rªrär·rar®r r räÛrÃzIPv6Interface.is_loopback)rrr rÿrårærÁr›rŽr�ržr^r…rˆr5rÂrÆrÇrãrär¯r r r®r r•s*         rc@s0eZdZ eZd dd„Zdd„Zedd„ƒZdS) rTcr/)Nr0r-cr1rE)rr r2r r r3 r4z&IPv6Network.__init__..) rƒrrTrìr½rRr|rrArºr¹r5r r2r rÿðs    ÿ  ÿzIPv6Network.__init__ccs@� t|jƒ}t|jƒ}t|d|dƒD]}| |¡VqdSr,r³r¶r r r r¹ s€  ÿzIPv6Network.hostscCr×rE)rTrgrMrar r r rg, s ÿzIPv6Network.is_site_localNr7) rrr rrµrÿr¹rˆrgr r r r ràs 0 rc@sðeZdZedƒZedƒZedƒedƒedƒedƒedƒedƒed ƒed ƒed ƒed ƒedƒg Zed ƒedƒedƒedƒedƒedƒgZedƒedƒedƒedƒedƒedƒedƒedƒedƒedƒedƒedƒedƒed ƒed!ƒgZed"ƒZ d#S)$Ú_IPv6Constantsz fe80::/10zff00::/8z::1/128z::/128z ::ffff:0:0/96z64:ff9b:1::/48z100::/64z 2001::/23z 2001:db8::/32z 2002::/16z 3fff::/20zfc00::/7z 2001:1::1/128z 2001:1::2/128z 2001:3::/32z2001:4:112::/48z 2001:20::/28z 2001:30::/28z::/8z100::/8z200::/7z400::/6z800::/5z1000::/4z4000::/3z6000::/3z8000::/3zA000::/3zC000::/3zE000::/4zF000::/5zF800::/6zFE00::/9z fec0::/10N) rrr rrrrrrerfr r r r rr< s@óú      ø rrr7)#Ú __version__rårûrZrrr rrrr"r$r+r6r:rDrOrWr]r^r¦Útotal_orderingr>rXrèrrrr8rr9rrrrrr r r r Ús^ "7163kH CR&:#K\ /