ӊ^7 NdZddlmZmZddlmZmZdZ dZ dZ dZ dZ d Zd Zy ) z=Fallback routines for Python's standard library socket module)unpackpack) _bytes_join_is_str ct|stdt|zt|dk7r t ddt d|zS)zR Convert an IP address from 32-bit packed binary format to string format. zstring type expected, not %s*invalid length of packed IP address stringz %d.%d.%d.%d4B)r TypeErrortypelen ValueError_unpack) packed_ips 2/usr/lib/python3/dist-packages/netaddr/fbsocket.py inet_ntoarsK 9 6iHII 9~EFF 743 33cg}g}d}d}t|D]A\}}|dk(r ||}|dz }n|dkDr|j||fd}d}|j|C|dkDr|j||ft|dk7rw|jd|d}|D]}|d|dkDs|}|\} } |d| dgz|| | zdz}|ddk(r|j dd|ddk(r|jd|S)Nr0c |dS)Nr)xs rz&_compact_ipv6_tokens..9s QqTr)key) enumerateappendrsortinsert) tokens new_tokens positions start_index num_tokensidxtoken best_positionpositionlength start_idxs r_compact_ipv6_tokensr/sRJIKJ ' ! U C<"! !OJA~  *k!:;KJ%  !A~*k23 9~>*!! ! )H{]1-- (  ),),t3jVASAT6UU  a=B    a $ b>R    b ! rc D|tk(r t|S|tk(rt|dk7s t |s t dt d|Dcgc]}d|z }}tt d|}d}tt|D]\}}|}|d|zz}||z}d|cxkrdks n|dz dk(r;td g|d d Dcgc]}t|dc}}t|} |dd | gz}d jt|St d |zcc}wcc}w)zBConvert an packed IP address of the given family to string format.r z>8H%xrl z>2HN:zunknown address family %d)AF_INETrAF_INET6rrrrlistr reversed_packintjoinr/) afrir$wordsint_valnumword packed_ipv4ipv4_strs r inet_ntoprFLs4 W}## x y>R wy'9IJ J$+E9$=>q$(>>WUI./0 %FAsD26>DnG % G )z )W]f-DJVBC[(IQ(IJK -HAb\XJ.Fxx,V4554r9::%?)Js  DD ct|rtd|z}|jd}t|dk(rwg}|D]e}|j ds|j drt|dkDr| t |}|dz dk7r||j td |gt|S|td t|z#t$r|wxYw) a Convert an IP address in string format (123.45.67.89) to the 32-bit packed binary format used in low-level network functions. Differs from inet_aton by only support decimal octets. Using octal or hexadecimal values will raise a ValueError exception. illegal IP address string %r.r 0xrrrBz#argument should be a string, not %s) rrsplitr startswithr<r!r;rr) ip_string invalid_addrr$r@r*octets r_inet_pton_af_inetrRksy!"@9"LM % v;! E 0##D)e.>.>s.CE UV&&'JEQJ1$&& U3./ 0u% %  :T)_L MM"'&&'s 3 C  Cc (|tk(r t|S|tk(rtd|z}g}t |s|d|vr|d|vr|dk(rdj dzS |j d\}}g}g}|dk7r|j d}|dk7r|j d}t|rhd|d vrat|j}|jd td |d d d z|jd td |d dd zt|t|z} d | cxkrdks||dt|t|zz } |D cgc]} td t| dc} t| D cgc]} dj c} z|D cgc]} td t| dc} z} ||zD]} t| d} d | cxkrdkr|| t|Sd|vr8|j d}d|vr|dd }|dd gdk7r||d jdvr|t|dk7r|t|j}|jd td |d d d z|jd td |d dd z|D cgc]} td t| d}} nt|dk7r| |D cgc]} t| d}} |D]} d | cxkrdkr|| |D cgc]} td | }} t|S|td|z#t$r|wxYwcc} wcc} wcc} w#t$r|wxYwcc} wcc} w#t$r|wxYwcc} w)z| Convert an IP address from string format to a packed string suitable for use with low-level network functions. rHrz::r1rr6rIrr2z>Hrrr rKzr3N)rrrrr)rffffzUnknown address family %d)r7rRr8rrencoderMrpopr!rr;r<rangelowerr)r>rOrPvaluesprefixsuffixl_prefixl_suffixrE token_countgap_sizer?r*rCr$ ipv6_prefixs r inet_ptonrcs  W}!),, x!"@9"LM y!  )   9 D }}++ #!*!6HH|!<<,|!<<,8} !4-hlln=wtXa]'CA'F FGwtXa]'CA'F FGh-#h-7K ,u,""-""S]S]:""$>?2:;QtSBZ(;<   #%0+Eub>D..**/**+Z6""Ki"-)#"("+K"3B'+DD**"2,,.mC**6{a'**1&**,?HMM$x!})Ea)H"HIMM$x!})Ea)H"HI?EF!eD#a*5FFF6{a'**':@Ac%nAFA!'/ E3V3".. 4"../399Q%a.996""#"4r9::] #"" #4<>; #"" #.G B "'&&':s` M MM'M" M'*M'3M6$N(M;;NNN M' M3;N N N)__doc__structrrrr;netaddr.compatrrr7r8rr/rFrRrcrrrrgs8 D3/   4,^;>NDi;r