PNG  IHDRQgAMA a cHRMz&u0`:pQ<bKGDgmIDATxwUﹻ& ^CX(J I@ "% (** BX +*i"]j(IH{~R)[~>h{}gy)I$Ij .I$I$ʊy@}x.: $I$Ii}VZPC)I$IF ^0ʐJ$I$Q^}{"r=OzI$gRZeC.IOvH eKX $IMpxsk.쒷/&r[޳<v| .I~)@$updYRa$I |M.e JaֶpSYR6j>h%IRز if&uJ)M$I vLi=H;7UJ,],X$I1AҒJ$ XY XzI@GNҥRT)E@;]K*Mw;#5_wOn~\ DC&$(A5 RRFkvIR}l!RytRl;~^ǷJj اy뷦BZJr&ӥ8Pjw~vnv X^(I;4R=P[3]J,]ȏ~:3?[ a&e)`e*P[4]T=Cq6R[ ~ޤrXR Հg(t_HZ-Hg M$ãmL5R uk*`%C-E6/%[t X.{8P9Z.vkXŐKjgKZHg(aK9ڦmKjѺm_ \#$5,)-  61eJ,5m| r'= &ڡd%-]J on Xm|{ RҞe $eڧY XYrԮ-a7RK6h>n$5AVڴi*ֆK)mѦtmr1p| q:흺,)Oi*ֺK)ܬ֦K-5r3>0ԔHjJئEZj,%re~/z%jVMڸmrt)3]J,T K֦OvԒgii*bKiNO~%PW0=dii2tJ9Jݕ{7"I P9JKTbu,%r"6RKU}Ij2HKZXJ,妝 XYrP ެ24c%i^IK|.H,%rb:XRl1X4Pe/`x&P8Pj28Mzsx2r\zRPz4J}yP[g=L) .Q[6RjWgp FIH*-`IMRaK9TXcq*I y[jE>cw%gLRԕiFCj-ďa`#e~I j,%r,)?[gp FI˨mnWX#>mʔ XA DZf9,nKҲzIZXJ,L#kiPz4JZF,I,`61%2s $,VOϚ2/UFJfy7K> X+6 STXIeJILzMfKm LRaK9%|4p9LwJI!`NsiazĔ)%- XMq>pk$-$Q2x#N ؎-QR}ᶦHZډ)J,l#i@yn3LN`;nڔ XuX5pF)m|^0(>BHF9(cզEerJI rg7 4I@z0\JIi䵙RR0s;$s6eJ,`n 䂦0a)S)A 1eJ,堌#635RIgpNHuTH_SԕqVe ` &S)>p;S$魁eKIuX`I4춒o}`m$1":PI<[v9^\pTJjriRŭ P{#{R2,`)e-`mgj~1ϣLKam7&U\j/3mJ,`F;M'䱀 .KR#)yhTq;pcK9(q!w?uRR,n.yw*UXj#\]ɱ(qv2=RqfB#iJmmL<]Y͙#$5 uTU7ӦXR+q,`I}qL'`6Kͷ6r,]0S$- [RKR3oiRE|nӦXR.(i:LDLTJjY%o:)6rxzҒqTJjh㞦I.$YR.ʼnGZ\ֿf:%55 I˼!6dKxm4E"mG_ s? .e*?LRfK9%q#uh$)i3ULRfK9yxm܌bj84$i1U^@Wbm4uJ,ҪA>_Ij?1v32[gLRD96oTaR׿N7%L2 NT,`)7&ƝL*꽙yp_$M2#AS,`)7$rkTA29_Iye"|/0t)$n XT2`YJ;6Jx".e<`$) PI$5V4]29SRI>~=@j]lp2`K9Jaai^" Ԋ29ORI%:XV5]JmN9]H;1UC39NI%Xe78t)a;Oi Ҙ>Xt"~G>_mn:%|~ޅ_+]$o)@ǀ{hgN;IK6G&rp)T2i୦KJuv*T=TOSV>(~D>dm,I*Ɛ:R#ۙNI%D>G.n$o;+#RR!.eU˽TRI28t)1LWϚ>IJa3oFbu&:tJ*(F7y0ZR ^p'Ii L24x| XRI%ۄ>S1]Jy[zL$adB7.eh4%%누>WETf+3IR:I3Xה)3אOۦSRO'ٺ)S}"qOr[B7ϙ.edG)^ETR"RtRݜh0}LFVӦDB^k_JDj\=LS(Iv─aTeZ%eUAM-0;~˃@i|l @S4y72>sX-vA}ϛBI!ݎߨWl*)3{'Y|iSlEڻ(5KtSI$Uv02,~ԩ~x;P4ցCrO%tyn425:KMlD ^4JRxSهF_}شJTS6uj+ﷸk$eZO%G*^V2u3EMj3k%)okI]dT)URKDS 7~m@TJR~荪fT"֛L \sM -0T KfJz+nإKr L&j()[E&I ߴ>e FW_kJR|!O:5/2跌3T-'|zX ryp0JS ~^F>-2< `*%ZFP)bSn"L :)+pʷf(pO3TMW$~>@~ū:TAIsV1}S2<%ޟM?@iT ,Eūoz%i~g|`wS(]oȤ8)$ ntu`өe`6yPl IzMI{ʣzʨ )IZ2= ld:5+請M$-ї;U>_gsY$ÁN5WzWfIZ)-yuXIfp~S*IZdt;t>KūKR|$#LcԀ+2\;kJ`]YǔM1B)UbG"IRߊ<xܾӔJ0Z='Y嵤 Leveg)$znV-º^3Ւof#0Tfk^Zs[*I꯳3{)ˬW4Ւ4 OdpbZRS|*I 55#"&-IvT&/윚Ye:i$ 9{LkuRe[I~_\ؠ%>GL$iY8 9ܕ"S`kS.IlC;Ҏ4x&>u_0JLr<J2(^$5L s=MgV ~,Iju> 7r2)^=G$1:3G< `J3~&IR% 6Tx/rIj3O< ʔ&#f_yXJiގNSz; Tx(i8%#4 ~AS+IjerIUrIj362v885+IjAhK__5X%nV%Iͳ-y|7XV2v4fzo_68"S/I-qbf; LkF)KSM$ Ms>K WNV}^`-큧32ŒVؙGdu,^^m%6~Nn&͓3ŒVZMsRpfEW%IwdǀLm[7W&bIRL@Q|)* i ImsIMmKmyV`i$G+R 0tV'!V)֏28vU7͒vHꦼtxꗞT ;S}7Mf+fIRHNZUkUx5SAJㄌ9MqμAIRi|j5)o*^'<$TwI1hEU^c_j?Е$%d`z cyf,XO IJnTgA UXRD }{H}^S,P5V2\Xx`pZ|Yk:$e ~ @nWL.j+ϝYb퇪bZ BVu)u/IJ_ 1[p.p60bC >|X91P:N\!5qUB}5a5ja `ubcVxYt1N0Zzl4]7­gKj]?4ϻ *[bg$)+À*x쳀ogO$~,5 زUS9 lq3+5mgw@np1sso Ӻ=|N6 /g(Wv7U;zωM=wk,0uTg_`_P`uz?2yI!b`kĸSo+Qx%!\οe|އԁKS-s6pu_(ֿ$i++T8=eY; צP+phxWQv*|p1. ά. XRkIQYP,drZ | B%wP|S5`~́@i޾ E;Չaw{o'Q?%iL{u D?N1BD!owPHReFZ* k_-~{E9b-~P`fE{AܶBJAFO wx6Rox5 K5=WwehS8 (JClJ~ p+Fi;ŗo+:bD#g(C"wA^ r.F8L;dzdIHUX݆ϞXg )IFqem%I4dj&ppT{'{HOx( Rk6^C٫O.)3:s(۳(Z?~ٻ89zmT"PLtw䥈5&b<8GZ-Y&K?e8,`I6e(֍xb83 `rzXj)F=l($Ij 2*(F?h(/9ik:I`m#p3MgLaKjc/U#n5S# m(^)=y=đx8ŬI[U]~SцA4p$-F i(R,7Cx;X=cI>{Km\ o(Tv2vx2qiiDJN,Ҏ!1f 5quBj1!8 rDFd(!WQl,gSkL1Bxg''՞^ǘ;pQ P(c_ IRujg(Wz bs#P­rz> k c&nB=q+ؔXn#r5)co*Ũ+G?7< |PQӣ'G`uOd>%Mctz# Ԫڞ&7CaQ~N'-P.W`Oedp03C!IZcIAMPUۀ5J<\u~+{9(FbbyAeBhOSܳ1 bÈT#ŠyDžs,`5}DC-`̞%r&ڙa87QWWp6e7 Rϫ/oY ꇅ Nܶըtc!LA T7V4Jsū I-0Pxz7QNF_iZgúWkG83 0eWr9 X]㾮݁#Jˢ C}0=3ݱtBi]_ &{{[/o[~ \q鯜00٩|cD3=4B_b RYb$óBRsf&lLX#M*C_L܄:gx)WΘsGSbuL rF$9';\4Ɍq'n[%p.Q`u hNb`eCQyQ|l_C>Lb꟟3hSb #xNxSs^ 88|Mz)}:](vbۢamŖ࿥ 0)Q7@0=?^k(*J}3ibkFn HjB׻NO z x}7p 0tfDX.lwgȔhԾŲ }6g E |LkLZteu+=q\Iv0쮑)QٵpH8/2?Σo>Jvppho~f>%bMM}\//":PTc(v9v!gոQ )UfVG+! 35{=x\2+ki,y$~A1iC6#)vC5^>+gǵ@1Hy٪7u;p psϰu/S <aʸGu'tD1ԝI<pg|6j'p:tպhX{o(7v],*}6a_ wXRk,O]Lܳ~Vo45rp"N5k;m{rZbΦ${#)`(Ŵg,;j%6j.pyYT?}-kBDc3qA`NWQū20/^AZW%NQ MI.X#P#,^Ebc&?XR tAV|Y.1!؅⨉ccww>ivl(JT~ u`ٵDm q)+Ri x/x8cyFO!/*!/&,7<.N,YDŽ&ܑQF1Bz)FPʛ?5d 6`kQձ λc؎%582Y&nD_$Je4>a?! ͨ|ȎWZSsv8 j(I&yj Jb5m?HWp=g}G3#|I,5v珿] H~R3@B[☉9Ox~oMy=J;xUVoj bUsl_35t-(ՃɼRB7U!qc+x4H_Qo֮$[GO<4`&č\GOc[.[*Af%mG/ ňM/r W/Nw~B1U3J?P&Y )`ѓZ1p]^l“W#)lWZilUQu`-m|xĐ,_ƪ|9i:_{*(3Gѧ}UoD+>m_?VPۅ15&}2|/pIOʵ> GZ9cmíتmnz)yߐbD >e}:) r|@R5qVSA10C%E_'^8cR7O;6[eKePGϦX7jb}OTGO^jn*媓7nGMC t,k31Rb (vyܴʭ!iTh8~ZYZp(qsRL ?b}cŨʊGO^!rPJO15MJ[c&~Z`"ѓޔH1C&^|Ш|rʼ,AwĴ?b5)tLU)F| &g٣O]oqSUjy(x<Ϳ3 .FSkoYg2 \_#wj{u'rQ>o;%n|F*O_L"e9umDds?.fuuQbIWz |4\0 sb;OvxOSs; G%T4gFRurj(֍ڑb uԖKDu1MK{1^ q; C=6\8FR艇!%\YÔU| 88m)֓NcLve C6z;o&X x59:q61Z(T7>C?gcļxѐ Z oo-08jہ x,`' ҔOcRlf~`jj".Nv+sM_]Zk g( UOPyεx%pUh2(@il0ݽQXxppx-NS( WO+轾 nFߢ3M<;z)FBZjciu/QoF 7R¥ ZFLF~#ȣߨ^<쩡ݛкvџ))ME>ώx4m#!-m!L;vv#~Y[đKmx9.[,UFS CVkZ +ߟrY٧IZd/ioi$%͝ب_ֶX3ܫhNU ZZgk=]=bbJS[wjU()*I =ώ:}-蹞lUj:1}MWm=̛ _ ¾,8{__m{_PVK^n3esw5ӫh#$-q=A̟> ,^I}P^J$qY~Q[ Xq9{#&T.^GVj__RKpn,b=`żY@^՝;z{paVKkQXj/)y TIc&F;FBG7wg ZZDG!x r_tƢ!}i/V=M/#nB8 XxЫ ^@CR<{䤭YCN)eKOSƟa $&g[i3.C6xrOc8TI;o hH6P&L{@q6[ Gzp^71j(l`J}]e6X☉#͕ ׈$AB1Vjh㭦IRsqFBjwQ_7Xk>y"N=MB0 ,C #o6MRc0|$)ف"1!ixY<B9mx `,tA>)5ػQ?jQ?cn>YZe Tisvh# GMމȇp:ԴVuږ8ɼH]C.5C!UV;F`mbBk LTMvPʍϤj?ԯ/Qr1NB`9s"s TYsz &9S%U԰> {<ؿSMxB|H\3@!U| k']$U+> |HHMLޢ?V9iD!-@x TIî%6Z*9X@HMW#?nN ,oe6?tQwڱ.]-y':mW0#!J82qFjH -`ѓ&M0u Uγmxϵ^-_\])@0Rt.8/?ٰCY]x}=sD3ojަЫNuS%U}ԤwHH>ڗjܷ_3gN q7[q2la*ArǓԖ+p8/RGM ]jacd(JhWko6ڎbj]i5Bj3+3!\j1UZLsLTv8HHmup<>gKMJj0@H%,W΃7R) ">c, xixј^ aܖ>H[i.UIHc U1=yW\=S*GR~)AF=`&2h`DzT󑓶J+?W+}C%P:|0H܆}-<;OC[~o.$~i}~HQ TvXΈr=b}$vizL4:ȰT|4~*!oXQR6Lk+#t/g lԁߖ[Jڶ_N$k*". xsxX7jRVbAAʯKҎU3)zSNN _'s?f)6X!%ssAkʱ>qƷb hg %n ~p1REGMHH=BJiy[<5 ǁJҖgKR*倳e~HUy)Ag,K)`Vw6bRR:qL#\rclK/$sh*$ 6덤 KԖc 3Z9=Ɣ=o>X Ώ"1 )a`SJJ6k(<c e{%kϊP+SL'TcMJWRm ŏ"w)qc ef꒵i?b7b('"2r%~HUS1\<(`1Wx9=8HY9m:X18bgD1u ~|H;K-Uep,, C1 RV.MR5άh,tWO8WC$ XRVsQS]3GJ|12 [vM :k#~tH30Rf-HYݺ-`I9%lIDTm\ S{]9gOڒMNCV\G*2JRŨ;Rҏ^ڽ̱mq1Eu?To3I)y^#jJw^Ńj^vvlB_⋌P4x>0$c>K†Aļ9s_VjTt0l#m>E-,,x,-W)سo&96RE XR.6bXw+)GAEvL)͞K4$p=Ũi_ѱOjb HY/+@θH9޼]Nԥ%n{ &zjT? Ty) s^ULlb,PiTf^<À] 62R^V7)S!nllS6~͝V}-=%* ʻ>G DnK<y&>LPy7'r=Hj 9V`[c"*^8HpcO8bnU`4JȪAƋ#1_\ XϘHPRgik(~G~0DAA_2p|J묭a2\NCr]M_0 ^T%e#vD^%xy-n}-E\3aS%yN!r_{ )sAw ڼp1pEAk~v<:`'ӭ^5 ArXOI驻T (dk)_\ PuA*BY]yB"l\ey hH*tbK)3 IKZ򹞋XjN n *n>k]X_d!ryBH ]*R 0(#'7 %es9??ښFC,ՁQPjARJ\Ρw K#jahgw;2$l*) %Xq5!U᢯6Re] |0[__64ch&_}iL8KEgҎ7 M/\`|.p,~`a=BR?xܐrQ8K XR2M8f ?`sgWS%" Ԉ 7R%$ N}?QL1|-эټwIZ%pvL3Hk>,ImgW7{E xPHx73RA @RS CC !\ȟ5IXR^ZxHл$Q[ŝ40 (>+ _C >BRt<,TrT {O/H+˟Pl6 I B)/VC<6a2~(XwV4gnXR ϱ5ǀHٻ?tw똤Eyxp{#WK qG%5],(0ӈH HZ])ג=K1j&G(FbM@)%I` XRg ʔ KZG(vP,<`[ Kn^ SJRsAʠ5xՅF`0&RbV tx:EaUE/{fi2;.IAwW8/tTxAGOoN?G}l L(n`Zv?pB8K_gI+ܗ #i?ޙ.) p$utc ~DžfՈEo3l/)I-U?aԅ^jxArA ΧX}DmZ@QLےbTXGd.^|xKHR{|ΕW_h] IJ`[G9{).y) 0X YA1]qp?p_k+J*Y@HI>^?gt.06Rn ,` ?);p pSF9ZXLBJPWjgQ|&)7! HjQt<| ؅W5 x W HIzYoVMGP Hjn`+\(dNW)F+IrS[|/a`K|ͻ0Hj{R,Q=\ (F}\WR)AgSG`IsnAR=|8$}G(vC$)s FBJ?]_u XRvύ6z ŨG[36-T9HzpW̞ú Xg큽=7CufzI$)ki^qk-) 0H*N` QZkk]/tnnsI^Gu't=7$ Z;{8^jB% IItRQS7[ϭ3 $_OQJ`7!]W"W,)Iy W AJA;KWG`IY{8k$I$^%9.^(`N|LJ%@$I}ֽp=FB*xN=gI?Q{٥4B)mw $Igc~dZ@G9K X?7)aK%݅K$IZ-`IpC U6$I\0>!9k} Xa IIS0H$I H ?1R.Чj:4~Rw@p$IrA*u}WjWFPJ$I➓/6#! LӾ+ X36x8J |+L;v$Io4301R20M I$-E}@,pS^ޟR[/s¹'0H$IKyfŸfVOπFT*a$I>He~VY/3R/)>d$I>28`Cjw,n@FU*9ttf$I~<;=/4RD~@ X-ѕzἱI$: ԍR a@b X{+Qxuq$IЛzo /~3\8ڒ4BN7$IҀj V]n18H$IYFBj3̵̚ja pp $Is/3R Ӻ-Yj+L;.0ŔI$Av? #!5"aʄj}UKmɽH$IjCYs?h$IDl843.v}m7UiI=&=0Lg0$I4: embe` eQbm0u? $IT!Sƍ'-sv)s#C0:XB2a w I$zbww{."pPzO =Ɔ\[ o($Iaw]`E).Kvi:L*#gР7[$IyGPI=@R 4yR~̮´cg I$I/<tPͽ hDgo 94Z^k盇΄8I56^W$I^0̜N?4*H`237}g+hxoq)SJ@p|` $I%>-hO0eO>\ԣNߌZD6R=K ~n($I$y3D>o4b#px2$yڪtzW~a $I~?x'BwwpH$IZݑnC㧄Pc_9sO gwJ=l1:mKB>Ab<4Lp$Ib o1ZQ@85b̍ S'F,Fe,^I$IjEdù{l4 8Ys_s Z8.x m"+{~?q,Z D!I$ϻ'|XhB)=…']M>5 rgotԎ 獽PH$IjIPhh)n#cÔqA'ug5qwU&rF|1E%I$%]!'3AFD/;Ck_`9 v!ٴtPV;x`'*bQa w I$Ix5 FC3D_~A_#O݆DvV?<qw+I$I{=Z8".#RIYyjǪ=fDl9%M,a8$I$Ywi[7ݍFe$s1ՋBVA?`]#!oz4zjLJo8$I$%@3jAa4(o ;p,,dya=F9ً[LSPH$IJYЉ+3> 5"39aZ<ñh!{TpBGkj}Sp $IlvF.F$I z< '\K*qq.f<2Y!S"-\I$IYwčjF$ w9 \ߪB.1v!Ʊ?+r:^!I$BϹB H"B;L'G[ 4U#5>੐)|#o0aڱ$I>}k&1`U#V?YsV x>{t1[I~D&(I$I/{H0fw"q"y%4 IXyE~M3 8XψL}qE$I[> nD?~sf ]o΁ cT6"?'_Ἣ $I>~.f|'!N?⟩0G KkXZE]ޡ;/&?k OۘH$IRۀwXӨ<7@PnS04aӶp.:@\IWQJ6sS%I$e5ڑv`3:x';wq_vpgHyXZ 3gЂ7{{EuԹn±}$I$8t;b|591nءQ"P6O5i }iR̈́%Q̄p!I䮢]O{H$IRϻ9s֧ a=`- aB\X0"+5"C1Hb?߮3x3&gşggl_hZ^,`5?ߎvĸ%̀M!OZC2#0x LJ0 Gw$I$I}<{Eb+y;iI,`ܚF:5ܛA8-O-|8K7s|#Z8a&><a&/VtbtLʌI$I$I$I$I$I$IRjDD%tEXtdate:create2022-05-31T04:40:26+00:00!Î%tEXtdate:modify2022-05-31T04:40:26+00:00|{2IENDB`Mini Shell

HOME


Mini Shell 1.0
DIR:/opt/alt/python38/lib64/python3.8/__pycache__/
Upload File :
Current File : //opt/alt/python38/lib64/python3.8/__pycache__/tarfile.cpython-38.opt-2.pyc
U

��,a�n�@sfdZdZdZddlmZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZddl
Z
ddlZzddlZWnek
r�dZYnXzddlZWnek
r�dZYnXeefZzeef7ZWnek
r�YnXdddd	d
ddd
dddddddgZdZdZedZdZdZdZdZdZdZ dZ!dZ"dZ#dZ$d Z%d!Z&d"Z'd#Z(d$Z)d%Z*d&Z+d'Z,d(Z-d)Z.dZ/d*Z0d+Z1e1Z2e e!e"e#e&e'e(e$e%e)e*e+fZ3e e!e(e+fZ4e)e*e+fZ5d,Z6d-d.d/d0hZ7e8e8e8e9e9e9d1�Z:ej;d2k�r�d3Z<ne�=�Z<d4d5�Z>d6d7�Z?d8d9�Z@d:e2fd;d<�ZAd=d>�ZBdedfd?d@�ZCdAdB�ZDGdCd	�d	eE�ZFGdDd
�d
eF�ZGGdEd
�d
eF�ZHGdFd�deF�ZIGdGd�deF�ZJGdHd�deF�ZKGdIdJ�dJeK�ZLGdKdL�dLeK�ZMGdMdN�dNeK�ZNGdOdP�dPeK�ZOGdQdR�dReK�ZPGdSdT�dT�ZQGdUdV�dV�ZRGdWdX�dXeS�ZTGdYdZ�dZeS�ZUGd[d\�d\ejV�ZWGd]d�deS�ZXGd^d�deS�ZYd_d�ZZeYjZd`da�Z[e\dbk�rbe[�dS)cz0.9.0u"Lars Gustäbel (lars@gustaebel.de)u4Gustavo Niemeyer, Niels Gustäbel, Richard Townsend.�)�openN�TarFile�TarInfo�
is_tarfile�TarError�	ReadError�CompressionError�StreamError�ExtractError�HeaderError�ENCODING�USTAR_FORMAT�
GNU_FORMAT�
PAX_FORMAT�DEFAULT_FORMATr�i�sustar  sustar00�d��0�1�2�3�4�5�6�7�L�K�S�x�g�X��)�path�linkpath�size�mtime�uid�gid�uname�gnamer%r&r+r,)Zatime�ctimer(r)r*r'�nt�utf-8cCs(|�||�}|d|�|t|�tS�N)�encode�len�NUL)�s�length�encoding�errors�r8�,/opt/alt/python38/lib64/python3.8/tarfile.py�stn�sr:cCs*|�d�}|dkr|d|�}|�||�S)Nr���)�find�decode)r4r6r7�pr8r8r9�nts�s
r?cCs�|ddkrbd}tt|�d�D]}|dK}|||d7}q |ddkr�dt|�d|}n@z"t|dd�}t|��p|d	d�}Wntk
r�td
��YnX|S)Nr)��r#�rA��ascii�strict�0�invalid header)�ranger2r?�int�strip�
ValueError�InvalidHeaderError)r4�n�ir8r8r9�nti�srOrBcCs�t|�}d|kr$d|dkrDnntd|d|fd�t}n�|tkr�d|d|krrd|dkr�nnV|dkr�tdg�}ntdg�}d||}t|d�D]}|�d|d@�|dL}q�ntd	��|S)
NrrBr#z%0*orDrCr@rAzoverflow in number field)rI�bytesr3r�	bytearrayrH�insertrK)rM�digits�formatr4rNr8r8r9�itn�s 2
rUcCs0dtt�d|��}dtt�d|��}||fS)NrCZ
148B8x356BZ
148b8x356b)�sum�structZunpack_from)�bufZunsigned_chksumZ
signed_chksumr8r8r9�calc_chksums�s	rYc	Cs�|pd}|dkrdS|dkr.t�|||�dSt||�\}}t|�D],}|�|�}t|�|krf|d��|�|�qD|dkr�|�|�}t|�|kr�|d��|�|�dS)Ni@r�unexpected end of data)�shutil�copyfileobj�divmodrH�readr2�write)	�srcZdstr5�	exception�bufsize�blocks�	remainder�brXr8r8r9r\�s$


r\cCs8ttjdd�}|dk	r(|�|d��|�}t|dd�dS)Nr6�backslashreplace� )�end)�getattr�sys�stdoutr1r=�print)r4r6r8r8r9�_safe_printsrmc@seZdZdS)rN��__name__�
__module__�__qualname__r8r8r8r9r
sc@seZdZdS)r
Nrnr8r8r8r9r

sc@seZdZdS)rNrnr8r8r8r9rsc@seZdZdS)rNrnr8r8r8r9rsc@seZdZdS)r	Nrnr8r8r8r9r	sc@seZdZdS)rNrnr8r8r8r9rsc@seZdZdS)�EmptyHeaderErrorNrnr8r8r8r9rrsrrc@seZdZdS)�TruncatedHeaderErrorNrnr8r8r8r9rssrsc@seZdZdS)�EOFHeaderErrorNrnr8r8r8r9rt"srtc@seZdZdS)rLNrnr8r8r8r9rL%srLc@seZdZdS)�SubsequentHeaderErrorNrnr8r8r8r9ru(sruc@s,eZdZdd�Zdd�Zdd�Zdd�Zd	S)
�
_LowLevelFilecCsFtjtjtjBtjBd�|}ttd�r2|tjO}t�||d�|_dS)N��r�w�O_BINARYi�)	�os�O_RDONLY�O_WRONLY�O_CREAT�O_TRUNC�hasattrrzr�fd)�self�name�moder8r8r9�__init__5s��

z_LowLevelFile.__init__cCst�|j�dSr0)r{�closer��r�r8r8r9r�>sz_LowLevelFile.closecCst�|j|�Sr0)r{r^r��r�r'r8r8r9r^Asz_LowLevelFile.readcCst�|j|�dSr0)r{r_r��r�r4r8r8r9r_Dsz_LowLevelFile.writeN)rorprqr�r�r^r_r8r8r8r9rv/s	rvc@sneZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
ddd�Zdd�Zdd�Z
dd�ZdS)�_Streamc	Cs�d|_|dkrt||�}d|_|dkr6t|�}|��}|p<d|_||_||_||_||_d|_	d|_
d|_�zL|dkr�zddl}Wnt
k
r�td��YnX||_|�d�|_|d	kr�|��|j|_n|��n�|d
k�r:zddl}Wnt
k
�r
td��YnX|d	k�r.d|_|��|_t|_n
|��|_n||dk�r�zddl}Wnt
k
�rntd
��YnX|d	k�r�d|_|��|_|j|_n
|��|_n|dk�r�td|��Wn&|j�s�|j��d|_�YnXdS)NTF�*��r�gzzzlib module is not availablerx�bz2�bz2 module is not available�xz�lzma module is not available�tar�unknown compression type %r) �_extfileobjrv�_StreamProxy�getcomptyper�r��comptype�fileobjrbrX�pos�closed�zlib�ImportErrorr�crc32�crc�
_init_read_gz�errorra�_init_write_gzr��dbufZBZ2Decompressor�cmp�OSErrorZ
BZ2Compressor�lzmaZLZMADecompressor�	LZMAErrorZLZMACompressorr�)	r�r�r�r�r�rbr�r�r�r8r8r9r�Rsl












z_Stream.__init__cCst|d�r|js|��dS)Nr�)r�r�r�r�r8r8r9�__del__�sz_Stream.__del__cCs�|j�d|jj|jj|jjd�|_t�dtt	�	���}|�
d|d�|j�d�rf|jdd�|_t
j�|j�|_|�
|j�dd	�t�dS)
N�	r�<Ls�s��.gz���z
iso-8859-1�replace)r�ZcompressobjZDEFLATED�	MAX_WBITSZ
DEF_MEM_LEVELr�rW�packrI�time�_Stream__writer��endswithr{r%�basenamer1r3)r�Z	timestampr8r8r9r��s�z_Stream._init_write_gzcCsR|jdkr|j�||j�|_|jt|�7_|jdkrD|j�|�}|�|�dS)Nr�r�)	r�r�r�r�r�r2r��compressr�r�r8r8r9r_�s

z
_Stream.writecCsN|j|7_t|j�|jkrJ|j�|jd|j��|j|jd�|_qdSr0)rXr2rbr�r_r�r8r8r9Z__write�sz_Stream.__writecCs�|jr
dSd|_z�|jdkr:|jdkr:|j|j��7_|jdkr�|jr�|j�	|j�d|_|jdkr�|j�	t
�d|j��|j�	t
�d|j
d@��W5|js�|j��XdS)NTryr�r�r�r�l��)r�r�r�r�r�r�rXr��flushr_rWr�r�r�r�r8r8r9r��s
z
_Stream.closecCs�|j�|jj�|_d|_|�d�dkr0td��|�d�dkrFtd��t|�d��}|�d�|d	@r�t|�d��d
t|�d��}|�	|�|d@r�|�d�}|r�|t
kr�q�q�|d@r�|�d�}|r�|t
kr�q�q�|d@r�|�d�dS)
Nr�r$s��not a gzip filer#�zunsupported compression method��rCrB�)r�Z
decompressobjr�r�r��
_Stream__readrr�ordr^r3)r��flagZxlenr4r8r8r9r��s*
 


z_Stream._init_read_gzcCs|jSr0)r�r�r8r8r9�tell�sz_Stream.tellrcCsX||jdkrJt||j|j�\}}t|�D]}|�|j�q,|�|�ntd��|jS)Nrz seeking backwards is not allowed)r�r]rbrHr^r	)r�r�rcrdrNr8r8r9�seek�sz_Stream.seekcCs |�|�}|jt|�7_|Sr0)�_readr�r2)r�r'rXr8r8r9r^s
z_Stream.readcCs�|jdkr|�|�St|j�}|jg}||kr�|jrB|j}d|_n|j�|j�}|sVq�z|j�	|�}Wn|j
k
r�td��YnX|�|�|t|�7}q&d�
|�}||d�|_|d|�S)Nr�r�zinvalid compressed data)r�r�r2r�rXr�r^rbr��
decompressrar�append�join�r�r'�c�trXr8r8r9r�
s(




z
_Stream._readcCsjt|j�}|jg}||krF|j�|j�}|s.qF|�|�|t|�7}qd�|�}||d�|_|d|�S)Nr�)r2rXr�r^rbr�r�r�r8r8r9Z__read(s


z_Stream.__readN)r)rorprqr�r�r�r_r�r�r�r�r�r^r�r�r8r8r8r9r�GsF
	

r�c@s,eZdZdd�Zdd�Zdd�Zdd�Zd	S)
r�cCs||_|j�t�|_dSr0)r�r^�	BLOCKSIZErX)r�r�r8r8r9r�>sz_StreamProxy.__init__cCs|jj|_|jSr0)r�r^rXr�r8r8r9r^Bs
z_StreamProxy.readcCsP|j�d�rdS|jdd�dkr8|jdd�dkr8d	S|j�d
�rHdSdSdS)
Ns�r�r�sBZhr��
s1AY&SYr�)s]�s�7zXZr�r�)rX�
startswithr�r8r8r9r�Fs$z_StreamProxy.getcomptypecCs|j��dSr0)r�r�r�r8r8r9r�Psz_StreamProxy.closeN)rorprqr�r^r�r�r8r8r8r9r�9s
r�c@sfeZdZddd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Ze	j
fdd�Zddd�Zdd�Z
dd�ZdS)�_FileInFileNcCs�||_||_||_d|_t|dd�|_d|_|dkr>d|fg}d|_g|_d}|j}|D]L\}}||kr||j�	d||df�|j�	d||||f�||7}||}qX||jkr�|j�	d||jdf�dS)Nrr�FT)
r��offsetr'�positionrir�r��	map_index�mapr�)r�r�r�r'Z	blockinfoZlastposZrealposr8r8r9r�]s(


z_FileInFile.__init__cCsdSr0r8r�r8r8r9r�vsz_FileInFile.flushcCsdS�NTr8r�r8r8r9�readableysz_FileInFile.readablecCsdS)NFr8r�r8r8r9�writable|sz_FileInFile.writablecCs
|j��Sr0)r��seekabler�r8r8r9r�sz_FileInFile.seekablecCs|jSr0)r�r�r8r8r9r��sz_FileInFile.tellcCs�|tjkr tt|d�|j�|_nj|tjkr\|dkrFt|j|d�|_q�t|j||j�|_n.|tjkr�tt|j||j�d�|_ntd��|jS)NrzInvalid argument)	�io�SEEK_SET�min�maxr'r��SEEK_CUR�SEEK_ENDrK)r�r��whencer8r8r9r��s


z_FileInFile.seekc	Cs
|dkr|j|j}nt||j|j�}d}|dk�r|j|j\}}}}||jkr`|krhq�nq�q6|jd7_|jt|j�kr6d|_q6t|||j�}|r�|j�||j|�|j�|�}t|�|kr�t	d��||7}n|t
|7}||8}|j|7_q,|S)Nr�rr#rZ)r'r�r�r�r�r2r�r�r^rr3)	r�r'rX�data�start�stopr�r5rer8r8r9r^�s,

z_FileInFile.readcCs&|�t|��}||dt|��<t|�Sr0)r^r2)r�rerXr8r8r9�readinto�sz_FileInFile.readintocCs
d|_dSr�)r�r�r8r8r9r��sz_FileInFile.close)N)N)rorprqr�r�r�r�r�r�r�r�r�r^r�r�r8r8r8r9r�Ws

r�cseZdZ�fdd�Z�ZS)�ExFileObjectcs&t|j|j|j|j�}t��|�dSr0)r�r��offset_datar'�sparse�superr�)r��tarfile�tarinfor���	__class__r8r9r��s

�zExFileObject.__init__)rorprqr��
__classcell__r8r8r�r9r��sr�c@s�eZdZeddddddddd	d
ddd
dddddddd�Zdddd�Zedd��Zejdd��Zedd��Z	e	jdd��Z	dd�Z
dd �Zee
d!fd"d#�Zd$d%�Zd&d'�Zd(d)�Zed*d+��Zd,d-�Zed.d/��Zed0d1��Zed2d3��Zed4d5��Zed6d7��Zed8d9��Zd:d;�Zd<d=�Zd>d?�Zd@dA�ZdBdC�Z dDdE�Z!dFdG�Z"dHdI�Z#dJdK�Z$dLdM�Z%dNdO�Z&dPdQ�Z'dRdS�Z(dTdU�Z)dVdW�Z*dXdY�Z+dZd[�Z,d\d]�Z-d^d_�Z.d`da�Z/dbdc�Z0dS)erzName of the archive member.zPermission bits.z6User ID of the user who originally stored this member.z7Group ID of the user who originally stored this member.zSize in bytes.zTime of last modification.zHeader checksum.z�File type. type is usually one of these constants: REGTYPE, AREGTYPE, LNKTYPE, SYMTYPE, DIRTYPE, FIFOTYPE, CONTTYPE, CHRTYPE, BLKTYPE, GNUTYPE_SPARSE.zcName of the target file name, which is only present in TarInfo objects of type LNKTYPE and SYMTYPE.z
User name.zGroup name.zDevice major number.zDevice minor number.zThe tar header starts here.zThe file's data starts here.zMA dictionary containing key-value pairs of an associated pax extended header.zSparse member information.N)r�r�r)r*r'r(�chksum�type�linknamer+r,�devmajor�devminorr�r��pax_headersr�r��_sparse_structs�_link_targetr�cCsj||_d|_d|_d|_d|_d|_d|_t|_d|_	d|_
d|_d|_d|_
d|_d|_d|_i|_dS)Ni�rr�)r�r�r)r*r'r(r��REGTYPEr�r�r+r,r�r�r�r�r�r��r�r�r8r8r9r��s"zTarInfo.__init__cCs|jSr0�r�r�r8r8r9r%szTarInfo.pathcCs
||_dSr0r�r�r8r8r9r%
scCs|jSr0�r�r�r8r8r9r&szTarInfo.linkpathcCs
||_dSr0r�)r�r�r8r8r9r&scCsd|jj|jt|�fS)Nz<%s %r at %#x>)r�ror��idr�r8r8r9�__repr__szTarInfo.__repr__cCsl|j|jd@|j|j|j|j|j|j|j|j	|j
|j|jd�
}|dt
krh|d�d�sh|dd7<|S)N�)
r�r�r)r*r'r(r�r�r�r+r,r�r�r�r��/)r�r�r)r*r'r(r�r�r�r+r,r�r��DIRTYPEr�)r��infor8r8r9�get_infos"�zTarInfo.get_info�surrogateescapecCsT|��}|tkr|�|||�S|tkr4|�|||�S|tkrH|�||�Std��dS)Nzinvalid format)r�r
�create_ustar_headerr�create_gnu_headerr�create_pax_headerrK)r�rTr6r7r�r8r8r9�tobuf2sz
TarInfo.tobufcCsnt|d<t|d�||��tkr(td��t|d�||��tkr^|�|d||�\|d<|d<|�|t||�S)N�magicr�zlinkname is too longr��prefix)	�POSIX_MAGICr2r1�LENGTH_LINKrK�LENGTH_NAME�_posix_split_name�_create_headerr
)r�r�r6r7r8r8r9r�@szTarInfo.create_ustar_headercCs�t|d<d}t|d�||��tkr<||�|dt||�7}t|d�||��tkrl||�|dt||�7}||�|t	||�S)Nrr�r�r�)
�	GNU_MAGICr2r1r�_create_gnu_long_header�GNUTYPE_LONGLINKr�GNUTYPE_LONGNAMErr)r�r�r6r7rXr8r8r9r�MszTarInfo.create_gnu_headerc
	Cs*t|d<|j��}ddtfddtfddfD]j\}}}||kr>q*z||�dd	�Wn$tk
rv||||<Yq*YnXt||�|kr*||||<q*d
D]`\}}||kr�d||<q�||}d|kr�d|d
kr�nn
t|t	�r�t
|�||<d||<q�|�r|�|t|�}	nd}	|	|�
|tdd�S)Nrr�r%r�r&)r+r+� )r,r,rrDrE))r)rB)r*rB)r'�)r(rrrBr#r�r�)rr��copyrrr1�UnicodeEncodeErrorr2�
isinstance�float�str�_create_pax_generic_header�XHDTYPErr
)
r�r�r6r�r�Zhnamer5rS�valrXr8r8r9r�[s8
�
*
zTarInfo.create_pax_headercCs|�|td�S)Nr/)r�XGLTYPE)�clsr�r8r8r9�create_pax_global_header�sz TarInfo.create_pax_global_headercCs~|�d�}tdt|��D]T}d�|d|��}d�||d��}t|�||��tkrt|�||��tkrqvqtd��||fS)Nr�r#zname is too long)�splitrHr2r�r1�
LENGTH_PREFIXrrK)r�r�r6r7Z
componentsrNrr8r8r9r�s
�zTarInfo._posix_split_namecCsVt|�dd�d||�t|�dd�d@d|�t|�dd�d|�t|�d	d�d|�t|�d
d�d|�t|�dd�d|�d
|�dt�t|�dd�d||�|�dt�t|�dd�d||�t|�dd�d||�t|�dd�d|�t|�dd�d|�t|�dd�d||�g}t�dtd�|��}t	|td��d}|dd�t
d|d�|dd�}|S)Nr�r�rr�rr�rBr)r*r'rr(s        r�r�rr+rr,r�r�rrz%dsr�i����z%06orDi����)r:�getrUr�rrWr�r�r�rYrP)r�rTr6r7�partsrXr�r8r8r9r�s(

�&zTarInfo._create_headercCs.tt|�t�\}}|dkr*|t|t7}|S)Nr)r]r2r�r3)Zpayloadrcrdr8r8r9�_create_payload�szTarInfo._create_payloadcCsR|�||�t}i}d|d<||d<t|�|d<t|d<|�|t||�|�|�S)Nz
././@LongLinkr�r�r'r)r1r3r2rrr
r)rr�r�r6r7r�r8r8r9r�s�zTarInfo._create_gnu_long_headerc	Cs2d}|��D]8\}}z|�dd�Wqtk
rBd}YqFYqXqd}|rV|d7}|��D]�\}}|�d�}|r�|�|d�}n
|�d�}t|�t|�d}d	}	}
|tt|
��}	|	|
kr�q�|	}
q�|tt|
�d
�d|d|d
7}q^i}d|d<||d<t|�|d<t|d<|�|td
d�|�	|�S)NFr/rETr�s21 hdrcharset=BINARY
r�r�rrD� �=�
z././@PaxHeaderr�r�r'rr�)
�itemsr1rr2rrPrrr
r)rr�r�r6Zbinary�keyword�valueZrecords�lrMr>r�r8r8r9r�s<

(�z"TarInfo._create_pax_generic_headerc	Csvt|�dkrtd��t|�tkr(td��|�t�tkr>td��t|dd��}|t|�krbt	d��|�}t
|dd�||�|_t|dd	��|_t|d	d
��|_
t|d
d��|_t|dd��|_t|dd��|_||_|dd
�|_t
|d
d�||�|_t
|dd�||�|_t
|dd�||�|_t|dd��|_t|dd��|_t
|dd�||�}|jtk�r�|j�d��r�t|_|jtk�r8d}g}td�D]l}	z0t|||d��}
t||d|d��}Wntk
�r�Y�qYnX|�|
|f�|d7}�q�t|d�}t|dd��}
|||
f|_ |�!��rP|j�"d�|_|�rr|jt#k�rr|d|j|_|S)Nrzempty headerztruncated headerzend of file header��zbad checksumr�l�t�|��ii	i)iIiQiYi�r�i�r�r�i�i�i�)$r2rrr�rs�countr3rtrOrYrLr?r�r�r)r*r'r(r�r�r�r+r,r�r��AREGTYPEr�r��GNUTYPE_SPARSErHrKr��boolr��isdir�rstrip�	GNU_TYPES)rrXr6r7r��objrr��structsrNr��numbytes�
isextended�origsizer8r8r9�frombufsZ
zTarInfo.frombufcCs8|j�t�}|�||j|j�}|j��t|_|�|�Sr0)	r�r^r�r8r6r7r�r��_proc_member)rr�rXr3r8r8r9�fromtarfileKszTarInfo.fromtarfilecCsT|jttfkr|�|�S|jtkr,|�|�S|jtttfkrF|�	|�S|�
|�SdSr0)r�r
r	�
_proc_gnulongr.�_proc_sparserr�SOLARIS_XHDTYPE�	_proc_pax�
_proc_builtin)r�r�r8r8r9r9`s



zTarInfo._proc_membercCsR|j��|_|j}|��s$|jtkr4||�|j�7}||_|�	|j
|j|j�|Sr0)
r�r�r��isregr��SUPPORTED_TYPES�_blockr'r��_apply_pax_infor�r6r7)r�r�r�r8r8r9r?mszTarInfo._proc_builtincCs�|j�|�|j��}z|�|�}Wntk
r>td��YnX|j|_|jt	krft
||j|j�|_
n|jtkr�t
||j|j�|_|S)N� missing or bad subsequent header)r�r^rBr'r:rrur�r�r
r?r6r7r�r	r�)r�r�rX�nextr8r8r9r;~s

zTarInfo._proc_gnulongc
	Cs�|j\}}}|`|r�|j�t�}d}td�D]n}z0t|||d��}t||d|d��}	Wntk
rzYq�YnX|r�|	r�|�||	f�|d7}q,t|d�}q||_	|j�
�|_|j|�|j
�|_||_
|S)Nr�rr+i�)r�r�r^r�rHrOrKr�r/r�r�r�rBr'r�)
r�r�r4r6r7rXr�rNr�r5r8r8r9r<�s(
zTarInfo._proc_sparsecCs.|j�|�|j��}|jtkr&|j}n
|j��}t�	d|�}|dk	rX|�
d��d�|d<|�d�}|dkrr|j
}nd}t�d�}d}|�||�}|s��q6|��\}	}
t|	�}	|	dkr�td��||�d	�d|�d�|	d�}|�|
dd|j�}
|
tk�r|�|||j
|j�}n|�|dd|j�}|||
<||	7}q�z|�|�}Wntk
�rbtd
��YnXd|k�r||�||�nHd|k�r�|�|||�n.|�d
�dk�r�|�d�dk�r�|�|||�|jttfk�r*|� ||j
|j�|j!|_!d|k�r*|j"}
|�#��s|jt$k�r$|
|�|j�7}
|
|_!|S)Ns\d+ hdrcharset=([^\n]+)\nr#r/�
hdrcharsetZBINARYs(\d+) ([^=]+)=rrGr$rD�GNU.sparse.map�GNU.sparse.sizezGNU.sparse.major�1zGNU.sparse.minorrFr')%r�r^rBr'r�rr�r
�re�search�groupr=rr6�compile�match�groupsrIrLrhr��_decode_pax_fieldr7�PAX_NAME_FIELDSr:rru�_proc_gnusparse_01�_proc_gnusparse_00�_proc_gnusparse_10rr=rCr�r�r@rA)r�r�rXr�rOrGr6Zregexr�r5r!r"rEr�r8r8r9r>�sh



$	
�
�
�


 
zTarInfo._proc_paxcCshg}t�d|�D]}|�t|�d���qg}t�d|�D]}|�t|�d���q:tt||��|_dS)Ns\d+ GNU.sparse.offset=(\d+)\nr#s\d+ GNU.sparse.numbytes=(\d+)\n)rK�finditerr�rIrM�list�zipr�)r�rEr�rXZoffsetsrOr5r8r8r9rTszTarInfo._proc_gnusparse_00cCs@dd�|d�d�D�}tt|ddd�|ddd���|_dS)NcSsg|]}t|��qSr8)rI)�.0�xr8r8r9�
<listcomp>&sz.TarInfo._proc_gnusparse_01.<locals>.<listcomp>rH�,r$r#)rrWrXr�)r�rEr�r�r8r8r9rS#szTarInfo._proc_gnusparse_01cCs�d}g}|j�t�}|�dd�\}}t|�}t|�|dkrtd|krT||j�t�7}|�dd�\}}|�t|��q,|j��|_t	t
|ddd�|ddd���|_dS)Nrr#r$)r�r^r�rrIr2r�r�r�rWrXr�)r�rEr�r�Zfieldsr�rXZnumberr8r8r9rU)szTarInfo._proc_gnusparse_10c	Cs�|��D]�\}}|dkr&t|d|�q|dkr@t|dt|��q|dkrZt|dt|��q|tkr|tkr�zt||�}Wntk
r�d}YnX|dkr�|�d�}t|||�q|��|_dS)NzGNU.sparse.namer%rIr'zGNU.sparse.realsizerr�)	r �setattrrI�
PAX_FIELDS�PAX_NUMBER_FIELDSrKr1r
r�)r�r�r6r7r!r"r8r8r9rC9s"

zTarInfo._apply_pax_infocCs4z|�|d�WStk
r.|�||�YSXdS)NrE)r=�UnicodeDecodeError)r�r"r6Zfallback_encodingZfallback_errorsr8r8r9rQPszTarInfo._decode_pax_fieldcCs"t|t�\}}|r|d7}|tS)Nr#)r]r�)r�r,rcrdr8r8r9rBXszTarInfo._blockcCs
|jtkSr0)r��
REGULAR_TYPESr�r8r8r9r@asz
TarInfo.isregcCs|��Sr0)r@r�r8r8r9�isfileeszTarInfo.isfilecCs
|jtkSr0)r�r�r�r8r8r9r0isz
TarInfo.isdircCs
|jtkSr0)r��SYMTYPEr�r8r8r9�issymmsz
TarInfo.issymcCs
|jtkSr0)r��LNKTYPEr�r8r8r9�islnkqsz
TarInfo.islnkcCs
|jtkSr0)r��CHRTYPEr�r8r8r9�ischrusz
TarInfo.ischrcCs
|jtkSr0)r��BLKTYPEr�r8r8r9�isblkysz
TarInfo.isblkcCs
|jtkSr0)r��FIFOTYPEr�r8r8r9�isfifo}szTarInfo.isfifocCs
|jdk	Sr0)r�r�r8r8r9�issparse�szTarInfo.issparsecCs|jtttfkSr0)r�rgrirkr�r8r8r9�isdev�sz
TarInfo.isdev)r�)1rorprq�dict�	__slots__r��propertyr%�setterr&r�r�rrr�r�r�r��classmethodrr�staticmethodrrrrr8r:r9r?r;r<r>rTrSrUrCrQrBr@rbr0rdrfrhrjrlrmrnr8r8r8r9r�s��





1


	

2
>

h	c
@s�eZdZdZdZdZdZeZe	Z
dZeZ
eZd[dd�Zedddefd	d
��Zed\dd��Zed]dd��Zed^dd��Zed_dd��Zddddd�Zdd�Zdd�Zdd�Zdd �Zd`d!d"�Zdadd$�d%d&�Zdbdd'�d(d)�Zdcd*d+�Z dddd-�d.d/�Z!dedd-�d1d2�Z"d3d4�Z#dfd5d6�Z$d7d8�Z%d9d:�Z&d;d<�Z'd=d>�Z(d?d@�Z)dAdB�Z*dCdD�Z+dEdF�Z,dGdH�Z-dIdJ�Z.dgdKdL�Z/dMdN�Z0dhdOdP�Z1dQdR�Z2dSdT�Z3dUdV�Z4dWdX�Z5dYdZ�Z6dS)irrFr#Nrxr�c
Cs�ddddd�}||krtd��||_|||_|sh|jdkrTtj�|�sTd|_d|_t||j�}d	|_n@|dkr�t|d
�r�t	|j
ttf�r�|j
}t|d�r�|j|_d|_|r�tj�
|�nd|_
||_|dk	r�||_|dk	r�||_|dk	r�||_|dk	r�||_|dk	�r||_|	|_|
dk	�r0|jtk�r0|
|_ni|_|dk	�rF||_|dk	�rV||_|
|_d	|_g|_d	|_|j��|_i|_z�|jd
k�r�d|_ |�!�|_ |jdk�r2|j�"|j�z|j�#|�}|j�$|�WnXt%k
�r�|j�"|j�Y�q2Yn0t&k
�r,}zt't|���W5d}~XYnX�q�|jdk�r|d|_|j�r||j�(|j�)��}|j�*|�|jt+|�7_Wn&|j�s�|j�,�d|_�YnXdS)N�rbzr+b�wbZxb�rx�aryrZ�!mode must be 'r', 'a', 'w' or 'x'rxryFr�r�Trx�rxryrZ)-rKr��_moder{r%�exists�	bltn_openr�r�rr�rrP�abspathr�rTr��dereference�ignore_zerosr6r7rr��debug�
errorlevel�copybufsizer��members�_loadedr�r��inodes�firstmemberrEr�r:r�rtrrrr
r_r2r�)r�r�r�r�rTr�rr�r6r7r�r�r�r�Zmodes�erXr8r8r9r��s�
�





"
zTarFile.__init__c

s�|s|std��|dkr��fdd�}t�j|d�D]j}t��j|�}|dk	rV|��}	z||d|f|�WSttfk
r�|dk	r�|�|	�Yq2Yq2Xq2td���nd|k�r|�dd	�\}
}|
p�d}
|p�d
}|�jkr�t��j|�}ntd|��|||
|f|�Sd|k�r�|�dd	�\}
}|
�p.d}
|�p8d
}|
d
k�rLtd��t	||
|||�}z�||
|f|�}Wn|�
��YnXd|_|S|dk�r��j|||f|�Std��dS)Nznothing to open)rx�r:*cs�j|dkS)N�taropen)�	OPEN_METH)r��rr8r9�not_compressed<sz$TarFile.open.<locals>.not_compressed��keyrxz%file could not be opened successfully�:r#r�r��|rwzmode must be 'r' or 'w'Frzzundiscernible mode)
rK�sortedr�rir�rrr�rr�r�r�r�)
rr�r�r�rb�kwargsr�r��funcZ	saved_pos�filemode�streamr�r8r�r9rsP%







zTarFile.opencKs |dkrtd��||||f|�S)Nrwry)rK)rr�r�r�r�r8r8r9r�mszTarFile.taropenr�cKs�|dkrtd��zddlm}Wntk
r<td��YnXz|||d||�}Wn.tk
r�|dk	r||dkr|td���YnXz|j|||f|�}WnBtk
r�|��|dkr�td���Yn|���YnXd	|_	|S)
N�rxryrZ�mode must be 'r', 'w' or 'x'r)�GzipFilezgzip module is not availablererxr�F)
rKZgzipr�r�rr�rr�r�r�)rr�r�r��
compresslevelr�r�r�r8r8r9�gzopenus0zTarFile.gzopenc	Ks�|dkrtd��zddlm}Wntk
r<td��YnX||pF|||d�}z|j|||f|�}WnFttfk
r�|��|dkr�t	d���Yn|���YnXd	|_
|S)
Nr�r�r)�BZ2Filer�)r�rxznot a bzip2 fileF)rKr�r�r�rr�r��EOFErrorr�rr�)rr�r�r�r�r�r�r�r8r8r9�bz2open�s&zTarFile.bz2openc		Ks�|dkrtd��zddlm}m}Wntk
r@td��YnX||pJ|||d�}z|j|||f|�}WnF|tfk
r�|��|dkr�t	d���Yn|���YnXd	|_
|S)
Nr�r�r)�LZMAFiler�r�)�presetrxznot an lzma fileF)rKr�r�r�r�rr�r�r�rr�)	rr�r�r�r�r�r�r�r�r8r8r9�xzopen�s&zTarFile.xzopenr�r�r�r�)r�r�r�r�cCs�|jr
dSd|_z`|jdkrn|j�ttd�|jtd7_t	|jt
�\}}|dkrn|j�tt
|�W5|js�|j��XdS)NTrzr$r)r�r�r�r�r�r_r3r�r�r]�
RECORDSIZE)r�rcrdr8r8r9r��s
z
TarFile.closecCs"|�|�}|dkrtd|��|S)Nzfilename %r not found)�
_getmember�KeyError)r�r�r�r8r8r9�	getmember�s
zTarFile.getmembercCs|��|js|��|jSr0)�_checkr��_loadr�r�r8r8r9�
getmembers�szTarFile.getmemberscCsdd�|��D�S)NcSsg|]
}|j�qSr8r�)rYr�r8r8r9r[sz$TarFile.getnames.<locals>.<listcomp>)r�r�r8r8r9�getnamesszTarFile.getnamescCs^|�d�|dk	r|j}|dkr$|}tj�|�\}}|�tjd�}|�d�}|��}||_	|dkr�|j
stt�|�}q�t�|�}nt�
|���}d}|j}t�|�r�|j|jf}	|j
s�|jdkr�|	|jkr�||j|	kr�t}
|j|	}nt}
|	dr�||j|	<nht�|��rt}
nVt�|��r"t}
nDt�|��r>t}
t�|�}n(t�|��rPt}
nt� |��rbt!}
ndS||_||_"|j#|_$|j%|_&|
tk�r�|j'|_(nd|_(|j)|_*|
|_+||_,t-�r�zt-�.|j$�d|_/Wnt0k
�r�YnXt1�rzt1�2|j&�d|_3Wnt0k
�rYnX|
tt!fk�rZt4td��rZt4td��rZt�5|j6�|_7t�8|j6�|_9|S)N�awxr�r�r#r�major�minor):r�r�r{r%�
splitdriver��sep�lstripr�r�r�lstat�stat�fstat�fileno�st_mode�S_ISREG�st_ino�st_dev�st_nlinkr�rer��S_ISDIRr��S_ISFIFOrk�S_ISLNKrc�readlink�S_ISCHRrg�S_ISBLKrir��st_uidr)�st_gidr*�st_sizer'�st_mtimer(r�r��pwd�getpwuidr+r��grpZgetgrgidr,r�r��st_rdevr�r�r�)r�r��arcnamer�Zdrvr�Zstatresr�Zstmd�inoder�r8r8r9�
gettarinfo	s�	


��

zTarFile.gettarinfoT)r�cCs�|��|dkr|}|D]�}|r�tt�|j��td|jp>|j|jpH|jf�|�	�s`|�
�rztdd|j|jf�ntd|j
�tdt�|j�dd��t|j|��r�dnd�|r�|��r�td	|j�|��r�td
|j�t�qdS)Nz%s/%sz%10sz%d,%dz%10dz%d-%02d-%02d %02d:%02d:%02dr�r�r�z-> zlink to )r�rmr�r�r�r+r)r,r*rhrjr�r�r'r��	localtimer(r�r0rdr�rfrl)r��verboser�r�r8r8r9rWls0
���zTarFile.list��filterc	Cs6|�d�|dkr|}|jdk	rFtj�|�|jkrF|�dd|�dS|�d|�|�||�}|dkrz|�dd|�dS|dk	r�||�}|dkr�|�dd|�dS|��r�t|d��}|�	||�W5QRXn`|�
��r(|�	|�|�r2tt�|��D]*}|j
tj�||�tj�||�||d�q�n
|�	|�dS)	Nr�r$ztarfile: Skipped %rr#ztarfile: Unsupported type %rztarfile: Excluded %rrur�)r�r�r{r%r~�_dbgr�r@r}�addfiler0r��listdir�addr�)r�r�r��	recursiver�r��fr8r8r9r��s8



�
zTarFile.addcCs�|�d�t�|�}|�|j|j|j�}|j�|�|jt	|�7_|j
}|dk	r�t||j|j|d�t
|jt�\}}|dkr�|j�tt|�|d7}|j|t7_|j�|�dS)Nr�)rbrr#)r�r
r�rTr6r7r�r_r�r2r�r\r'r]r�r3r�r�)r�r�r�rXrbrcrdr8r8r9r��s

zTarFile.addfile�.��
numeric_ownercCs�g}|dkr|}|D]>}|��r:|�|�t�|�}d|_|j|||��|d�q|jdd�d�|��|D]�}tj�	||j
�}z,|j|||d�|�||�|�
||�Wqptk
r�}z"|jdkrЂn|�dd|�W5d}~XYqpXqpdS)	N���	set_attrsr�cSs|jSr0r�)rxr8r8r9�<lambda>�r�z$TarFile.extractall.<locals>.<lambda>r�r�r#�tarfile: %s)r0r�r
r��extract�sort�reverser{r%r�r��chown�utime�chmodr
r�r�)r�r%r�r�Zdirectoriesr��dirpathr�r8r8r9�
extractall�s.

�
zTarFile.extractallr�c
Cs|�d�t|t�r |�|�}n|}|��r>tj�||j�|_	z"|j
|tj�||j�||d�Wn�tk
r�}zH|j
dkr��n6|jdkr�|�dd|j�n|�dd|j|jf�W5d}~XYnBtk
�r}z"|j
dkr�n|�dd|�W5d}~XYnXdS)Nrxr�rr#r�ztarfile: %s %r)r�rrr�rfr{r%r�r�r��_extract_memberr�r�r��filenamer��strerrorr
)r��memberr%r�r�r�r�r8r8r9r�s*	

�


(
zTarFile.extractcCs�|�d�t|t�r |�|�}n|}|��s6|jtkrB|�||�S|��sR|�	�rzt|j
t�rhtd��q~|�
|�|��SndSdS)Nrxz'cannot extract (sym)link as file object)r�rrr�r@r�rA�
fileobjectrfrdr�r�r	�extractfile�_find_link_target)r�r�r�r8r8r9r�&s


zTarFile.extractfilecCsT|�d�}|�dtj�}tj�|�}|r>tj�|�s>t�|�|��sN|�	�rh|�
dd|j|jf�n|�
d|j�|�
�r�|�||�n�|��r�|�||�nx|��r�|�||�nb|��s�|��r�|�||�nD|��s�|�	�r�|�||�n&|jtk�r|�||�n|�||�|�rP|�|||�|�	��sP|�||�|�||�dS)Nr�r#z%s -> %s)r1r�r{r�r%�dirnamer|�makedirsrfrdr�r�r�r@�makefiler0�makedirrl�makefiforhrj�makedev�makelinkr�rA�makeunknownr�r�r�)r�r��
targetpathr�r�Z	upperdirsr8r8r9r�Es4


zTarFile._extract_membercCs*zt�|d�Wntk
r$YnXdS)Nr�)r{�mkdir�FileExistsError�r�r�r�r8r8r9r�vszTarFile.makedirc	Cs�|j}|�|j�|j}t|d��b}|jdk	rn|jD]"\}}|�|�t|||t|�q4|�|j�|�	�nt|||jt|�W5QRXdS)Nrv)
r�r�r�r�r}r�r\rr'�truncate)r�r�r��sourcerb�targetr�r'r8r8r9r��s


zTarFile.makefilecCs"|�||�|�dd|j�dS)Nr#z9tarfile: Unknown file type %r, extracted as regular file.)r�r�r�r�r8r8r9r��s�zTarFile.makeunknowncCs"ttd�rt�|�ntd��dS)N�mkfifozfifo not supported by system)r�r{r�r
r�r8r8r9r��s
zTarFile.makefifocCs^ttd�rttd�std��|j}|��r6|tjO}n
|tjO}t�||t�	|j
|j��dS)N�mknodr�z'special devices not supported by system)r�r{r
r�rjr��S_IFBLK�S_IFCHRr�r�r�r�)r�r�r�r�r8r8r9r��s
�zTarFile.makedevcCs�zb|��r0tj�|�r t�|�t�|j|�n0tj�|j�rNt�	|j|�n|�
|�|�|�WnHtk
r�z|�
|�|�|�Wnt
k
r�td��YnXYnXdS)Nz%unable to resolve link inside archive)rdr{r%�lexists�unlink�symlinkr�r|r��linkr�r��symlink_exceptionr�r
r�r8r8r9r��s"
��zTarFile.makelinkcCs�ttd�r�t��dkr�|j}|j}|s�ztr<t�|j�d}Wntk
rRYnXzt	rjt	�
|j�d}Wntk
r�YnXz4|��r�ttd�r�t�
|||�nt�|||�Wntk
r�td��YnXdS)N�geteuidrr$�lchownzcould not change owner)r�r{rr*r)r�Zgetgrnamr,r�r��getpwnamr+rdrr�r�r
)r�r�r�r��g�ur8r8r9r��s(z
TarFile.chowncCs4zt�||j�Wntk
r.td��YnXdS)Nzcould not change mode)r{r�r�r�r
r�r8r8r9r��sz
TarFile.chmodcCsHttd�sdSzt�||j|jf�Wntk
rBtd��YnXdS)Nr�z"could not change modification time)r�r{r�r(r�r
r�r8r8r9r��s
z
TarFile.utimec
Cs�|�d�|jdk	r$|j}d|_|S|j|j��krZ|j�|jd�|j�d�sZtd��d}z|j�	|�}W�q�t
k
r�}z6|jr�|�dd|j|f�|jt
7_WY�q^W5d}~XY�q�tk
�r6}zR|j�r|�dd|j|f�|jt
7_WY� q^n|jdk�r&tt|���W5d}~XYn�tk
�r^|jdk�rZtd��Ynjtk
�r�}z|jdk�r�tt|���W5d}~XYn0tk
�r�}ztt|���W5d}~XYnX�q�q^|dk	�r�|j�|�nd|_|S)	NZrar#rZr$z0x%X: %srz
empty fileT)r�r�r�r�r�r�r^rr�r:rtr�r�r�rLrrrrsrur�r�r�)r��mr�r�r8r8r9rE�sJ



zTarFile.nextcCsn|��}|dk	r"|d|�|��}|r2tj�|�}t|�D].}|rRtj�|j�}n|j}||kr:|Sq:dSr0)r��indexr{r%�normpath�reversedr�)r�r�r��	normalizer�r��member_namer8r8r9r�/	szTarFile._getmembercCs|��}|dkrqqd|_dSr�)rEr�)r�r�r8r8r9r�F	sz
TarFile._loadcCs:|jrtd|jj��|dk	r6|j|kr6td|j��dS)Nz%s is closedzbad operation for mode %r)r�r�r�ror�)r�r�r8r8r9r�P	szTarFile._checkcCs`|��r.d�tdtj�|j�|jf��}d}n
|j}|}|j||dd�}|dkr\t	d|��|S)Nr�T)r�rzlinkname %r not found)
rdr�r�r{r%r�r�r�r�r�)r�r�r��limitr�r8r8r9r�Y	s zTarFile._find_link_targetccs�|jr|jEdHdSd}|jdk	r:|��}|d7}|V|t|j�krT|j|}n"|jsr|��}|svd|_dSndS|d7}|Vq:dS)Nrr#T)r�r�r�rEr2)r�r	r�r8r8r9�__iter__l	s$
zTarFile.__iter__cCs||jkrt|tjd�dS)N��file)r�rlrj�stderr)r��level�msgr8r8r9r��	s
zTarFile._dbgcCs|��|Sr0)r�r�r8r8r9�	__enter__�	szTarFile.__enter__cCs,|dkr|��n|js"|j��d|_dSr�)r�r�r�r�)r�r�r"�	tracebackr8r8r9�__exit__�	s


zTarFile.__exit__)
NrxNNNNNNr�NNNN)rxN)rxNr�)rxNr�)rxNN)NNN)T)NT)N)r�N)r�T)TF)NF)N)7rorprqr�rr�r�rrTrr6r7rr�r�r�r�rsr�rr�r�r�r�r�r�r�r�r�r�rWr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rEr�r�r�r�rr�rrr8r8r8r9r�s��
oZ �


c 3
(&�
1
6


	cCs2zt|�}|��WdStk
r,YdSXdS)NTF)rr�r)r�r�r8r8r9r�	sc	Cs�ddl}d}|j|d�}|jdddddd	�|jd
d�}|jdd
ddd�|jdddddd�|jdddddd�|jddddd�|��}|jdk	�r|j}t|�r�t|d�� }|��t	|��t
jd�W5QRX|jr�t	d �
|��n|�d!d"�
|���n�|jdk	�r\|j}t|��rFt�|d#��}|j|jd$�W5QRXn|�d!d"�
|���nr|jdk	�r,t|j�d!k�r�|jd}tj}n,t|j�d%k�r�|j\}}n|�d!|���t|��rt�|d#��}|j|d&�W5QRX|j�r*|d'k�rd(�
|�}	nd)�
||�}	t	|	�n|�d!d"�
|��n�|jdk	�r�|j�d�}
tj�|
�\}}d*d*d+d+d,d,d,d,d-�}
||
k�r�d.|
|nd/}|j}t�|
|��}|D]}|�|��q�W5QRX|j�r�t	d0�
|
��dS)1Nrz3A simple command-line interface for tarfile module.)�descriptionz-vz	--verbose�
store_trueFzVerbose output)�action�default�helpT)Zrequiredz-lz--list�	<tarfile>zShow listing of a tarfile)�metavarrz-ez	--extract�+)rz<output_dir>zExtract tarfile into target dir)�nargsrrz-cz--create)z<name>z<file>zCreate tarfile from sourcesz-tz--testzTest if a tarfile is validrxrz{!r} is a tar archive.r#z{!r} is not a tar archive.
r�)r�r$)r%r�z{!r} file is extracted.z+{!r} file is extracted into {!r} directory.r�r�r�)r�z.tgzz.xzz.txzz.bz2z.tbzz.tbz2z.tb2zw:ryz{!r} file created.)�argparse�ArgumentParser�add_argumentZadd_mutually_exclusive_group�
parse_argsZtestrrr�rlrjrr�rT�exitrWrr�r2r{�curdirZformat_helpr�Zcreate�popr%�splitextr�)r!r�parserrM�argsr`r�Ztfr&rZtar_name�_ZextZcompressionsZtar_modeZ	tar_files�	file_namer8r8r9�main�	s��
�
�
�
�



�
�
r-�__main__)]�version�
__author__�__credits__�builtinsrr}rjr{r�r[r�r�rWr
rKr�r�r��AttributeError�NotImplementedErrorrr��	NameError�__all__r3r�r�rrrrrr�r-rercrgrir�rkZCONTTYPEr
r	r.rrr=r
rrrrArar2r^rRrrIr_r�r�getfilesystemencodingr:r?rOrUrYr\rm�	Exceptionrr
rrr	rrrrsrtrLrurvr��objectr�r��BufferedReaderr�rrrr-ror8r8r8r9�<module> s


�����
shD!W