U e5dÜã@s€dZddlZdZdZGdd„deƒZGdd„deƒZd d „Zd7}|d|j kr‚qÞq‚dS)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_prefixlenr,r3r6r4Ú _ALL_ONES)r/r0r1Zip_bitsZ first_intZlast_intZnbitsÚnetr r r Úsummarize_address_rangeÊs8 ÿ ÿ   ÿ r@ccs�t|ƒ}i}|rV| ¡}| ¡}| |¡}|dkr<|||<q ||kr ||=| |¡q d}t| ¡ƒD]$}|dk r€|j|jkr€qf|V|}qfdS©N)ÚlistÚpopÚsupernetÚgetÚappendÚsortedÚvaluesÚbroadcast_address)r-Zto_mergeÚsubnetsr?rDZexistingr0r r r Ú_collapse_addresses_internals$    rKc Cs0g}g}g}|D]Ü}t|tƒrR|rF|dj|jkrFtd||dfƒ‚| |¡q|j|jkrº|r†|dj|jkr†td||dfƒ‚z| |j¡Wqìtk r¶| |j ¡YqìXq|râ|dj|jkrâtd||dfƒ‚| |¡qt t |ƒƒ}|�r$t |ƒD]\}}|  t||ƒ¡�qt||ƒS)Néÿÿÿÿr7)r9r:Ú_versionr;rFÚ _prefixlenr=r1ÚAttributeErrorÚnetwork_addressrGÚsetr2Úextendr@rK)r-ZaddrsZipsZnetsr1r/r0r r r Úcollapse_addresses2s@ ÿ  ÿÿ  rScCs(t|tƒr| ¡St|tƒr$| ¡StSrA)r9Ú _BaseNetworkÚ_get_networks_keyr:Ú_get_address_keyÚNotImplemented)Úobjr r r Úget_mixed_type_keyhs   rYc@s eZdZdZedd„ƒ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 cCs| ¡SrA)Ú_explode_shorthand_ip_string©Úselfr r r Úexploded‡sz_IPAddressBase.explodedcCst|ƒSrA©r#r\r r r Ú compressedŒsz_IPAddressBase.compressedcCs| ¡SrA)Ú_reverse_pointerr\r r r Úreverse_pointer‘s z_IPAddressBase.reverse_pointercCsdt|ƒf}t|ƒ‚dS)Nz%200s has no version specified©ÚtypeÚNotImplementedError©r]Úmsgr r r r<œsz_IPAddressBase.versioncCsF|dkrd}t|||jfƒ‚||jkrBd}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)rrMr>r=)r]rrgr r r Ú_check_int_address¡s  ÿz!_IPAddressBase._check_int_addresscCs.t|ƒ}||kr*d}t|||||jfƒ‚dS)Nz6%r (len %d != %d) is not permitted as an IPv%d address)r%rrM)r]rZ expected_lenZ address_lenrgr r r Ú_check_packed_addressªsÿz$_IPAddressBase._check_packed_addresscCs|j|j|?ASrA)r>)ÚclsÚ prefixlenr r r Ú_ip_int_from_prefix±s z"_IPAddressBase._ip_int_from_prefixc Cs\t||jƒ}|j|}||?}d|>d}||krX|jd}| |d¡}d}t||ƒ‚|S)Nr)érz&Netmask pattern %r mixes zeroes & ones)r6r=rr) rjÚip_intZtrailing_zeroesrkZ leading_onesZall_onesZbyteslenZdetailsrgr r r Ú_prefix_from_ip_int¾s ÿ     z"_IPAddressBase._prefix_from_ip_intcCsd|}t|ƒd‚dS)Nz%r is not a valid netmask)r )rjZ netmask_strrgr r r Ú_report_invalid_netmask×sz&_IPAddressBase._report_invalid_netmaskcCsl| ¡r| ¡s| |¡z t|ƒ}Wntk rD| |¡YnXd|kr\|jkshn| |¡|S©Nr)ÚisasciiÚisdigitrpÚintrr=)rjZ prefixlen_strrkr r r Ú_prefix_from_prefix_stringÜs   z)_IPAddressBase._prefix_from_prefix_stringcCsŠz| |¡}Wntk r,| |¡YnXz | |¡WStk rNYnX||jN}z | |¡WStk r„| |¡YnXdSrA)Ú_ip_int_from_stringrrprorr>)rjÚip_strrnr r r Ú_prefix_from_ip_stringõs   z%_IPAddressBase._prefix_from_ip_stringcCsHt|ttfƒr||jfSt|tƒs*t|ƒ}t|ƒdkr:|S|d|jfS)Nr)r)r9Úbytesrtr=Útupler'r%)rjrr r r Ú_split_addr_prefixs    z!_IPAddressBase._split_addr_prefixcCs|jt|ƒffSrA)Ú __class__r#r\r r r Ú __reduce__/sz_IPAddressBase.__reduce__N)rrrÚ __slots__Úpropertyr^r`rbr<rhriÚ classmethodrlrorprurxr{r}r r r r rZ�s0          ! rZc@s`eZdZdZdd„Zdd„Zdd„Zdd „Zd d „Zd d „Z dd„Z dd„Z dd„Z dd„Z dS)r:r cCs|jSrA©r,r\r r r Ú__int__>sz_BaseAddress.__int__cCs8z|j|jko|j|jkWStk r2tYSXdSrA)r,rMrOrW©r]Úotherr r r Ú__eq__As   ÿz_BaseAddress.__eq__cCsFt|tƒstS|j|jkr*td||fƒ‚|j|jkrB|j|jkSdS©Nr7F)r9r:rWrMr;r,rƒr r r Ú__lt__Hs  ÿ  z_BaseAddress.__lt__cCs t|tƒstS| t|ƒ|¡SrA©r9rtrWr|rƒr r r Ú__add__Ts z_BaseAddress.__add__cCs t|tƒstS| t|ƒ|¡SrArˆrƒr r r Ú__sub__Ys z_BaseAddress.__sub__cCsd|jjt|ƒfS©Nz%s(%r)©r|rr#r\r r r Ú__repr__^sz_BaseAddress.__repr__cCst| |j¡ƒSrA)r#Ú_string_from_ip_intr,r\r r r Ú__str__asz_BaseAddress.__str__cCsttt|jƒƒƒSrA)ÚhashÚhexrtr,r\r r r Ú__hash__dsz_BaseAddress.__hash__cCs |j|fSrA©rMr\r r r rVgsz_BaseAddress._get_address_keycCs|j|jffSrA)r|r,r\r r r r}jsz_BaseAddress.__reduce__N)rrrr~r‚r…r‡r‰rŠr�r�r’rVr}r r r r r:3s  r:c@s\eZdZdd„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.„ZdFd/d0„Zed1d2„ƒZed3d4„ƒZd5d6„Z d7d8„Z!ed9d:„ƒZ"ed;d<„ƒZ#ed=d>„ƒZ$ed?d@„ƒZ%edAdB„ƒZ&edCdD„ƒZ'd,S)GrTcCsd|jjt|ƒfSr‹rŒr\r r r r�vsz_BaseNetwork.__repr__cCsd|j|jfS©Nú%s/%d)rPrkr\r r r r�ysz_BaseNetwork.__str__ccs8t|jƒ}t|jƒ}t|d|ƒD]}| |¡Vq"dSr(©rtrPrIÚrangeÚ_address_class©r]ÚnetworkÚ broadcastÚxr r r Úhosts|s  z_BaseNetwork.hostsccs8t|jƒ}t|jƒ}t||dƒD]}| |¡Vq"dSr(r–r™r r r Ú__iter__ˆs  z_BaseNetwork.__iter__cCslt|jƒ}t|jƒ}|dkr>|||kr0tdƒ‚| ||¡S|d7}|||krZtdƒ‚| ||¡SdS)Nrzaddress out of ranger))rtrPrIÚ IndexErrorr˜)r]Únršr›r r r Ú __getitem__Žs    z_BaseNetwork.__getitem__cCs^t|tƒstS|j|jkr*td||fƒ‚|j|jkrB|j|jkS|j|jkrZ|j|jkSdSr†)r9rTrWrMr;rPÚnetmaskrƒr r r r‡›s  ÿ    z_BaseNetwork.__lt__cCsLz.|j|jko,|j|jko,t|jƒt|jƒkWStk rFtYSXdSrA)rMrPrtr¢rOrWrƒr r r r…§s  ÿþz_BaseNetwork.__eq__cCstt|jƒt|jƒAƒSrA)r�rtrPr¢r\r r r r’¯sz_BaseNetwork.__hash__cCs8|j|jkrdSt|tƒrdS|j|jj@|jjkSdS©NF)rMr9rTr,r¢rPrƒr r r Ú __contains__²s   z_BaseNetwork.__contains__cCs(|j|kp&|j|kp&|j|kp&|j|kSrA)rPrIrƒr r r Úoverlaps¾s    ýz_BaseNetwork.overlapscCs| t|jƒt|jƒB¡SrA)r˜rtrPÚhostmaskr\r r r rIÅs ÿz_BaseNetwork.broadcast_addresscCs| t|jƒ|jA¡SrA)r˜rtr¢r>r\r r r r¦Êsz_BaseNetwork.hostmaskcCsd|j|jfSr”)rPrNr\r r r Úwith_prefixlenÎsz_BaseNetwork.with_prefixlencCsd|j|jfS©Nú%s/%s)rPr¢r\r r r Ú with_netmaskÒsz_BaseNetwork.with_netmaskcCsd|j|jfSr¨)rPr¦r\r r r Ú with_hostmaskÖsz_BaseNetwork.with_hostmaskcCst|jƒt|jƒdSr()rtrIrPr\r r r Ú num_addressesÚsz_BaseNetwork.num_addressescCsdt|ƒf}t|ƒ‚dS)Nz%%200s has no associated address classrcrfr r r r˜ßsz_BaseNetwork._address_classcCs|jSrA)rNr\r r r rkçsz_BaseNetwork.prefixlenccs|j|jkstd||fƒ‚t|tƒs2td|ƒ‚| |¡sLtd||fƒ‚||krXdS| d|j|jf¡}|  ¡\}}||krÚ||krÚ| |¡r¨|V|  ¡\}}qz| |¡rÆ|V|  ¡\}}qzt d|||fƒ‚qz||krê|Vn"||krú|Vnt d|||fƒ‚dS)Nr7z%s is not a network objectz%s not contained in %sr©z3Error performing exclusion: s1: %s s2: %s other: %s) rMr;r9rTÚ subnet_ofrr|rPrkrJÚAssertionError)r]r„Ús1Ús2r r r Úaddress_excludeës@$ ÿ    ÿ   þþz_BaseNetwork.address_excludecCs`|j|jkrtd||fƒ‚|j|jkr,dS|j|jkr 0z0prefix length diff %d is invalid for netblock %s) rNr=rrtrPrIr¦r—r|) r]Úprefixlen_diffÚ new_prefixÚ new_prefixlenÚstartÚendÚstepZnew_addrZcurrentr r r rJps2     ÿÿ z_BaseNetwork.subnetscCsˆ|jdkr|S|dk rB||jkr(tdƒ‚|dkr8tdƒ‚|j|}|j|}|dkrftd|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)rNrrkr|rtrPr¢)r]r´rµr¶r r r rD¥s&    ÿÿþz_BaseNetwork.supernetcCs|jjo|jjSrA)rPÚ is_multicastrIr\r r r rºÎs ÿz_BaseNetwork.is_multicastcCshz:|j|jkr"t|›d|›d�ƒ‚|j|jko8|j|jkWStk rbtd|›d|›�ƒ‚YnXdS)Nz and z are not of the same versionz*Unable to test subnet containment between )rMr;rPrIrO)ÚaÚbr r r Ú _is_subnet_ofÚs   ÿz_BaseNetwork._is_subnet_ofcCs | ||¡SrA©r½rƒr r r r­æsz_BaseNetwork.subnet_ofcCs | ||¡SrAr¾rƒr r r Ú supernet_ofêsz_BaseNetwork.supernet_ofcCs|jjo|jjSrA)rPÚ is_reservedrIr\r r r rÀîs ÿz_BaseNetwork.is_reservedcCs|jjo|jjSrA)rPÚ is_link_localrIr\r r r rÁúsÿz_BaseNetwork.is_link_localcCs|jjo|jjSrA)rPÚ is_privaterIr\r r r rÂs ÿz_BaseNetwork.is_privatecCs|j SrA©rÂr\r r r Ú is_globals z_BaseNetwork.is_globalcCs|jjo|jjSrA)rPÚis_unspecifiedrIr\r r r rÅs ÿz_BaseNetwork.is_unspecifiedcCs|jjo|jjSrA)rPÚ is_loopbackrIr\r r r rÆ(s ÿz_BaseNetwork.is_loopback)r)N)r)N)(rrrr�r�r�ržr¡r‡r…r’r¤r¥Ú functoolsÚcached_propertyrIr¦rr§rªr«r¬r˜rkr±r²rUrJrDrºÚ staticmethodr½r­r¿rÀrÁrÂrÄrÅrÆr r r r rTnsb            K0 5 )       rTc@s€eZdZdZdZdedZeZiZdd„Z e dd„ƒZ e d d „ƒZ e d d „ƒZ e d d„ƒZdd„Zedd„ƒZedd„ƒZdS)Ú_BaseV4r rr"r)cCst|ƒSrAr_r\r r r r[Hsz$_BaseV4._explode_shorthand_ip_stringcCs�||jkr†t|tƒr<|}d|kr.|jksjn| |¡n.z| |¡}Wntk rh| |¡}YnXt|  |¡ƒ}||f|j|<|j|Srq) Ú_netmask_cacher9rtr=rprur rxr rl©rjÚargrkr¢r r r Ú _make_netmaskKs   z_BaseV4._make_netmaskc Cs~|s tdƒ‚| d¡}t|ƒdkr.td|ƒ‚zt t|j|ƒd¡WStk rx}ztd||fƒd‚W5d}~XYnXdS)NúAddress cannot be emptyÚ.rzExpected 4 octets in %rrú%s in %r)rr$r%rtÚ from_bytesÚmapÚ _parse_octetr)rjrwZoctetsÚexcr r r rves   z_BaseV4._ip_int_from_stringcCsŽ|s tdƒ‚| ¡r| ¡s,d}t||ƒ‚t|ƒdkrHd}t||ƒ‚|dkrl|ddkrld}t||ƒ‚t|dƒ}|d krŠtd |ƒ‚|S) NzEmpty octet not permittedz#Only decimal digits permitted in %réz$At most 3 characters permitted in %rÚ0rz%Leading zeros are not permitted in %ré éÿzOctet %d (> 255) not permitted)rrrrsr%rt)rjZ octet_strrgZ octet_intr r r rÔs      z_BaseV4._parse_octetcCsd tt| dd¡ƒ¡S)NrÐrr)ÚjoinrÓr#r)rjrnr r r rŽ£s z_BaseV4._string_from_ip_intcCs&t|ƒ d¡ddd…}d |¡dS)NrÐrLz .in-addr.arpa)r#r$rÚ)r]Zreverse_octetsr r r ra°sz_BaseV4._reverse_pointercCs|jSrA©r=r\r r r Ú max_prefixlen¹sz_BaseV4.max_prefixlencCs|jSrAr“r\r r r r<½sz_BaseV4.versionN)rrrr~rMÚ IPV4LENGTHr>r=rËr[r€rÎrvrÔrŽrarrÜr<r r r r rÊ5s&     #   rÊc@sˆeZdZdZdd„Zedd„ƒZedd„ƒZee  ¡dd „ƒƒZ ee  ¡d d „ƒƒZ ed d „ƒZ edd„ƒZ edd„ƒZedd„ƒZdS)r ©r,Ú __weakref__cCsrt|tƒr| |¡||_dSt|tƒrF| |d¡t |d¡|_dSt|ƒ}d|krbtd|ƒ‚|  |¡|_dS)Nrrr!úUnexpected '/' in %r© r9rtrhr,ryrirÒr#rrv©r]rZaddr_strr r r Ú__init__Ès     zIPv4Address.__init__cCs t|jƒSrA)rr,r\r r r ÚpackedëszIPv4Address.packedcCs ||jjkSrA)Ú _constantsÚ_reserved_networkr\r r r rÀðs zIPv4Address.is_reservedcst‡fdd„ˆjjDƒƒS)Nc3s|]}ˆ|kVqdSrAr ©Ú.0r?r\r r Ú sz)IPv4Address.is_private..©ÚanyråÚ_private_networksr\r r\r rÂûs zIPv4Address.is_privatecCs||jjko|j SrA)råÚ_public_networkrÂr\r r r rÄszIPv4Address.is_globalcCs ||jjkSrA©råÚ_multicast_networkr\r r r rº s zIPv4Address.is_multicastcCs ||jjkSrA)råÚ_unspecified_addressr\r r r rÅs zIPv4Address.is_unspecifiedcCs ||jjkSrA)råÚ_loopback_networkr\r r r rÆ"szIPv4Address.is_loopbackcCs ||jjkSrA©råÚ_linklocal_networkr\r r r rÁ,szIPv4Address.is_link_localN)rrrr~rãrrärÀrÇÚ lru_cacherÂrÄrºrÅrÆrÁr r r r r Âs(#       r c@sxeZdZdd„Zejdd„ƒZdd„Zdd„Zd d „Z d d „Z e j Z e d d„ƒZe dd„ƒZe dd„ƒZe dd„ƒZdS)rcCsD| |¡\}}t ||¡t||fdd�|_|jj|_|jj|_dS©NF)r)r{r rãrršr¢rN©r]rr&Úmaskr r r rã9s   zIPv4Interface.__init__cCs|jjSrA©ršr¦r\r r r r¦AszIPv4Interface.hostmaskcCsd| |j¡|jfSr”©rŽr,rNr\r r r r�Es ÿzIPv4Interface.__str__cCsFt ||¡}|r|tkr|Sz|j|jkWStk r@YdSXdSr£)r r…rWršrO©r]r„Z address_equalr r r r…Is  zIPv4Interface.__eq__cCsRt ||¡}|tkrtSz|j|jkp4|j|jko4|WStk rLYdSXdSr£)r r‡rWršrO©r]r„Z address_lessr r r r‡Us  ÿzIPv4Interface.__lt__cCst|j|jt|jjƒfƒSrA©r�r,rNrtršrPr\r r r r’aszIPv4Interface.__hash__cCs t|jƒSrA)r r,r\r r r r1fszIPv4Interface.ipcCsd| |j¡|jfSr¨rùr\r r r r§js ÿzIPv4Interface.with_prefixlencCsd| |j¡|jfSr¨©rŽr,r¢r\r r r rªos ÿzIPv4Interface.with_netmaskcCsd| |j¡|jfSr¨©rŽr,r¦r\r r r r«ts ÿzIPv4Interface.with_hostmaskN)rrrrãrÇrÈr¦r�r…r‡r’rZr}rr1r§rªr«r r r r r7s       rc@s.eZdZeZddd„Zee ¡dd„ƒƒZ dS)rTcs¤| |¡\‰}tˆƒ|_| |¡\|_|_t|jƒ}|t|jƒ@|krl|rXtd|ƒ‚nt|t|jƒ@ƒ|_|j|jdkr†|j |_ n|j|jkr ‡fdd„|_ dS)Nú%s has host bits setr)cs tˆƒgSrA)r r ©r&r r Ú»óz&IPv4Network.__init__..) r{r rPrÎr¢rNrtrr=ržr�©r]rrr÷rär rr rã‰s#  ÿ  zIPv4Network.__init__cCs&|jtdƒko|jtdƒk o$|j S)Nú 100.64.0.0/10)rPrrIrÂr\r r r rĽs  ÿþzIPv4Network.is_globalN)T) rrrr r˜rãrrÇrôrÄr r r r rzs   4rc@s”eZdZedƒZedƒZedƒZedƒZedƒedƒedƒedƒedƒedƒed ƒed ƒed ƒed ƒed ƒedƒedƒedƒgZedƒZ e dƒZ dS)Ú_IPv4Constantsz169.254.0.0/16z 127.0.0.0/8z 224.0.0.0/4rz 0.0.0.0/8z 10.0.0.0/8z 172.16.0.0/12z 192.0.0.0/29z192.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/32z0.0.0.0N) rrrrrórñrïrírìrær rðr r r r rÌs*òrc@sšeZdZdZdZdedZdZedƒZ eZ iZ e dd„ƒZ e d d „ƒZe d d „ƒZe d d„ƒZe ddd„ƒZdd„Zdd„Zedd„ƒZedd„ƒZdS)Ú_BaseV6r r8r"r)rmZ0123456789ABCDEFabcdefcCsl||jkrbt|tƒr<|}d|kr.|jksFn| |¡n | |¡}t| |¡ƒ}||f|j|<|j|Srq)rËr9rtr=rprur rlrÌr r r rÎs    z_BaseV6._make_netmaskc CsÜ|s tdƒ‚| d¡}d}t|ƒ|kr:d||f}t|ƒ‚d|dkr¶zt| ¡ƒj}Wn4tk rŒ}ztd||fƒd‚W5d}~XYnX| d|d ?d @¡| d|d @¡|jd }t|ƒ|kräd |d |f}t|ƒ‚d}td t|ƒd ƒD]*} || sú|dk �r d |}t|ƒ‚| }qú|dk �rÈ|} t|ƒ|d } |d�sl| d 8} | �rld}t||ƒ‚|d�s”| d 8} | �r”d}t||ƒ‚|j| | } | d k�r2d}t||jd |fƒ‚njt|ƒ|jk�rîd}t||j|fƒ‚|d�sd}t||ƒ‚|d�s"d}t||ƒ‚t|ƒ} d} d} znd} t| ƒD] } | d K} | |  || ¡O} �q@| d | K} t| dƒD] } | d K} | |  || ¡O} �qz| WSt k �rÖ}ztd||fƒd‚W5d}~XYnXdS)NrÏú:rÖz At least %d parts expected in %rrÐrLrÑú%xréÿÿr)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$r%r rCr,rFÚ _HEXTET_COUNTr—Ú _parse_hextetr)rjrwÚpartsZ _min_partsrgZipv4_intrÕZ _max_partsZ skip_indexÚiZparts_hiZparts_loZ parts_skippedrnr r r rvs„    $               z_BaseV6._ip_int_from_stringcCs>|j |¡std|ƒ‚t|ƒdkr4d}t||ƒ‚t|dƒS)NzOnly hex digits permitted in %rrz$At most 4 characters permitted in %rr)Ú _HEX_DIGITSÚ issupersetrr%rt)rjZ hextet_strrgr r r r ~s     z_BaseV6._parse_hextetc Cs¢d}d}d}d}t|ƒD]>\}}|dkrN|d7}|dkr<|}||krV|}|}qd}d}q|dkrž||}|t|ƒkr~|dg7}dg|||…<|dkrždg|}|S)NrLrr×r)Ú)Ú enumerater%) rjÚhextetsZbest_doublecolon_startZbest_doublecolon_lenZdoublecolon_startZdoublecolon_lenÚindexZhextetZbest_doublecolon_endr r r Ú_compress_hextets˜s0ÿ   z_BaseV6._compress_hextetsNcsZ|dkrt|jƒ}||jkr$tdƒ‚d|‰‡fdd„tdddƒDƒ}| |¡}d |¡S) NzIPv6 address is too largeú%032xcs&g|]}dtˆ||d…dƒ‘qS)rrr)rt©rèrœ©Zhex_strr r Ú Ýsz/_BaseV6._string_from_ip_int..rrrr)rtr,r>rr—rrÚ)rjrnrr rr rŽÈs   z_BaseV6._string_from_ip_intcsŒt|tƒrt|jƒ}nt|tƒr,t|jƒ}nt|ƒ}| |¡}d|‰‡fdd„tdddƒDƒ}t|ttfƒr‚dd  |¡|j fSd  |¡S) Nrcsg|]}ˆ||d…‘qS)rr rrr r rõsz8_BaseV6._explode_shorthand_ip_string..rrrr•r) r9rr#rPrr1rvr—rTrÚrN)r]rwrnr r rr r[âs     z$_BaseV6._explode_shorthand_ip_stringcCs&|jddd… dd¡}d |¡dS)NrLrrrÐz .ip6.arpa)r^ÚreplacerÚ)r]Z reverse_charsr r r raúsz_BaseV6._reverse_pointercCs|jSrArÛr\r r r rÜsz_BaseV6.max_prefixlencCs|jSrAr“r\r r r r<sz_BaseV6.version)N)rrrr~rMÚ IPV6LENGTHr>r Ú frozensetrr=rËr€rÎrvr rrŽr[rarrÜr<r r r r rîs.    g  /   rc@s°eZdZdZdd„Zedd„ƒZedd„ƒZedd „ƒZed d „ƒZ ed d „ƒZ ee   ¡dd„ƒƒZ edd„ƒZedd„ƒZedd„ƒZedd„ƒZedd„ƒZedd„ƒZdS)r rÞcCsrt|tƒr| |¡||_dSt|tƒrF| |d¡t |d¡|_dSt|ƒ}d|krbtd|ƒ‚|  |¡|_dS)Nrrr!ràrárâr r r rãs     zIPv6Address.__init__cCs t|jƒSrA)r r,r\r r r rä6szIPv6Address.packedcCs ||jjkSrArîr\r r r rº;s zIPv6Address.is_multicastcst‡fdd„ˆjjDƒƒS)Nc3s|]}ˆ|kVqdSrAr rr\r r réOsz*IPv6Address.is_reserved..)rëråÚ_reserved_networksr\r r\r rÀFs zIPv6Address.is_reservedcCs ||jjkSrAròr\r r r rÁQszIPv6Address.is_link_localcCs ||jjkSrA)råÚ_sitelocal_networkr\r r r Ú is_site_local[s zIPv6Address.is_site_localcst‡fdd„ˆjjDƒƒS)Nc3s|]}ˆ|kVqdSrAr rçr\r r réssz)IPv6Address.is_private..rêr\r r\r rÂis zIPv6Address.is_privatecCs|j SrArÃr\r r r rÄus zIPv6Address.is_globalcCs |jdkSrqr�r\r r r rÅ€s zIPv6Address.is_unspecifiedcCs |jdkSr(r�r\r r r rÆ‹s zIPv6Address.is_loopbackcCs |jd?dkrdSt|jd@ƒS)Nrr ìÿÿ©r,r r\r r r Ú ipv4_mapped–s zIPv6Address.ipv4_mappedcCs4|jd?dkrdSt|jd?d@ƒt|jd@ƒfS)Né`i é@rr r\r r r Úteredo£s ÿzIPv6Address.teredocCs$|jd?dkrdSt|jd?d@ƒS)Népi éPrr r\r r r Ú sixtofour²s zIPv6Address.sixtofourN)rrrr~rãrrärºrÀrÁrrÇrôrÂrÄrÅrÆr!r$r'r r r r r s6$           r c@s�eZdZdd„Zejdd„ƒZdd„Zdd„Zd d „Z d d „Z e j Z e d d„ƒZe dd„ƒZe dd„ƒZe dd„ƒZe dd„ƒZe dd„ƒZdS)rcCsD| |¡\}}t ||¡t||fdd�|_|jj|_|jj|_dSrõ)r{r rãrršr¢rNrör r r rãÂs   zIPv6Interface.__init__cCs|jjSrArør\r r r r¦ÊszIPv6Interface.hostmaskcCsd| |j¡|jfSr”rùr\r r r r�Îs ÿzIPv6Interface.__str__cCsFt ||¡}|r|tkr|Sz|j|jkWStk r@YdSXdSr£)r r…rWršrOrúr r r r…Òs  zIPv6Interface.__eq__cCsRt ||¡}|tkrtSz|j|jkp4|j|jko4|WStk rLYdSXdSr£)r r‡rWršrOrûr r r r‡Þs  ÿzIPv6Interface.__lt__cCst|j|jt|jjƒfƒSrArür\r r r r’êszIPv6Interface.__hash__cCs t|jƒSrA)r r,r\r r r r1ïszIPv6Interface.ipcCsd| |j¡|jfSr¨rùr\r r r r§ós ÿzIPv6Interface.with_prefixlencCsd| |j¡|jfSr¨rýr\r r r rªøs ÿzIPv6Interface.with_netmaskcCsd| |j¡|jfSr¨rþr\r r r r«ýs ÿzIPv6Interface.with_hostmaskcCs|jdko|jjSrq)r,ršrÅr\r r r rÅszIPv6Interface.is_unspecifiedcCs|jdko|jjSr()r,ršrÆr\r r r rÆszIPv6Interface.is_loopbackN)rrrrãrÇrÈr¦r�r…r‡r’rZr}rr1r§rªr«rÅrÆr r r r rÀs(        rc@s.eZdZeZd dd„Zdd„Zedd„ƒZdS) rTcs¤| |¡\‰}tˆƒ|_| |¡\|_|_t|jƒ}|t|jƒ@|krl|rXtd|ƒ‚nt|t|jƒ@ƒ|_|j|jdkr†|j |_ n|j|jkr ‡fdd„|_ dS)Nrÿr)cs tˆƒgSrA)r r rr r rIrz&IPv6Network.__init__..) r{r rPrÎr¢rNrtrr=ržr�rr rr rãs  ÿ  zIPv6Network.__init__ccs<t|jƒ}t|jƒ}t|d|dƒD]}| |¡Vq&dSr(r–r™r r r r�Ks  zIPv6Network.hostscCs|jjo|jjSrA)rPrrIr\r r r rWs ÿzIPv6Network.is_site_localN)T) rrrr r˜rãr�rrr r r r r s  0 rc@sÂeZdZedƒZedƒZedƒedƒedƒedƒedƒedƒed ƒed ƒed ƒedƒg Zed ƒed ƒedƒedƒedƒedƒedƒedƒedƒedƒedƒedƒedƒedƒedƒgZedƒZdS)Ú_IPv6Constantsz fe80::/10zff00::/8z::1/128z::/128z ::ffff:0:0/96z100::/64z 2001::/23z 2001:2::/48z 2001:db8::/32z 2001:10::/28zfc00::/7z::/8z100::/8z200::/7z400::/6z800::/5z1000::/4z4000::/3z6000::/3z8000::/3zA000::/3zC000::/3zE000::/4zF000::/5zF800::/6zFE00::/9z fec0::/10N) rrrrrórïrìrrr r r r r(gs<öø r()T)"Ú __version__rÇrÝrrrr rrrrr r'r2r6r@rKrSrYrZÚtotal_orderingr:rTrÊr rrrrårr rrr(r r r r Ú sT #7163:IuCR 5K\!