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:/snap/certbot/4557/lib/python3.12/site-packages/setuptools/__pycache__/
Upload File :
Current File : //snap/certbot/4557/lib/python3.12/site-packages/setuptools/__pycache__/msvc.cpython-312.pyc
�

�M�g����R�UdZddlmZddlZddlZddlZddlZddlZddlZddl	m
Z
mZddlm
Z
ddlZe
rddlmZmZe
sej&�dk(rddlZddlmZnGd	�d
�Ze�Zded<Gd
�d�ZGd�d�ZGd�d�ZGd�de�ZGd�d�Zy)zo
Environment info about Microsoft Compilers.

>>> getfixture('windows_only')
>>> ei = EnvironmentInfo('amd64')
�)�annotationsN)�
TYPE_CHECKING�	TypedDict)�unique_everseen)�
LiteralString�NotRequired�Windows)�environc��eZdZdZdZdZdZy)�winregN)�__name__�
__module__�__qualname__�
HKEY_USERS�HKEY_CURRENT_USER�HKEY_LOCAL_MACHINE�HKEY_CLASSES_ROOT���/build/snapcraft-certbot-2c33630aaf29c47357e5a1683f659d3d/parts/certbot/install/lib/python3.12/site-packages/setuptools/msvc.pyrr s���
� ��!�� �rrzdict[str, str]r
c��eZdZdZej
dd�j
�Zdd�Ze	d��Z
d�Zd�Zd
dd�Z
d
dd	�Zdd
�Zy)�PlatformInfoz�
    Current and Target Architectures information.

    Parameters
    ----------
    arch: str
        Target architecture.
    �processor_architecture�c�N�|j�jdd�|_y)N�x64�amd64)�lower�replace�arch)�selfr s  r�__init__zPlatformInfo.__init__5s���J�J�L�(�(���8��	rc�X�|j|jjd�dzdS)zs
        Return Target CPU architecture.

        Return
        ------
        str
            Target CPU
        �_�N)r �find�r!s r�
target_cpuzPlatformInfo.target_cpu8s(���y�y�������,�q�0�2�3�3rc� �|jdk(S)z�
        Return True if target CPU is x86 32 bits..

        Return
        ------
        bool
            CPU is x86 32 bits
        �x86�r(r's r�
target_is_x86zPlatformInfo.target_is_x86Ds�����%�'�'rc� �|jdk(S)z�
        Return True if current CPU is x86 32 bits..

        Return
        ------
        bool
            CPU is x86 32 bits
        r*��current_cpur's r�current_is_x86zPlatformInfo.current_is_x86Os�����5�(�(rc�l�|jdk(r|rdS|jdk(r|rdSd|j��S)uk
        Current platform specific subfolder.

        Parameters
        ----------
        hidex86: bool
            return '' and not '†' if architecture is x86.
        x64: bool
            return 'd' and not 'md64' if architecture is amd64.

        Return
        ------
        str
            subfolder: '	arget', or '' (see hidex86 parameter)
        r*rr�\x64�\r.�r!�hidex86rs   r�current_dirzPlatformInfo.current_dirZsR��$� � �E�)�g�
�	
�� � �G�+���	
�
�d�&�&�'�(�	
rc�l�|jdk(r|rdS|jdk(r|rdSd|j��S)ar
        Target platform specific subfolder.

        Parameters
        ----------
        hidex86: bool
            return '' and not '\x86' if architecture is x86.
        x64: bool
            return '\x64' and not '\amd64' if architecture is amd64.

        Return
        ------
        str
            subfolder: '\current', or '' (see hidex86 parameter)
        r*rrr2r3r+r4s   r�
target_dirzPlatformInfo.target_dirrsL��$���5�(�W�
�	
����7�*�s��	
�
�d�o�o�&�'�	
rc��|rdn|j}|j|k(rdS|j�jdd|�d��S)ap
        Cross platform specific subfolder.

        Parameters
        ----------
        forcex86: bool
            Use 'x86' as current architecture even if current architecture is
            not x86.

        Return
        ------
        str
            subfolder: '' if target architecture is current architecture,
            '\current_target' if not.
        r*rr3r$)r/r(r8r)r!�forcex86�currents   r�	cross_dirzPlatformInfo.cross_dir�sQ�� $�%��)9�)9�����'�)�
�	
����"�*�*�4�2�g�Y�a��A�	
rN��return�None)FF�r>�str�F)r
rr�__doc__r
�getrr/r"�propertyr(r,r0r6r8r<rrrrr)sW����'�+�+�6��;�A�A�C�K�9��	4��	4�	(�	)�
�0
�0
rrc��eZdZdZej
ejejejfZ	dd�Z
edd��Zed��Z
ed��Zed��Zedd��Zedd��Zed	��Zed
��Zedd��Zdd�Zd
�Zy)�RegistryInfoz�
    Microsoft Visual Studio related registry information.

    Parameters
    ----------
    platform_info: PlatformInfo
        "PlatformInfo" instance.
    c��||_y�N)�pi)r!�
platform_infos  rr"zRegistryInfo.__init__�s	����rc��y)z�
        Microsoft Visual Studio root registry key.

        Return
        ------
        str
            Registry key
        �VisualStudiorr's r�visualstudiozRegistryInfo.visualstudio�s��rc�V�tjj|jd�S)z
        Microsoft Visual Studio SxS registry key.

        Return
        ------
        str
            Registry key
        �SxS)�os�path�joinrNr's r�sxszRegistryInfo.sxs�s���w�w�|�|�D�-�-�u�5�5rc�V�tjj|jd�S)z|
        Microsoft Visual C++ VC7 registry key.

        Return
        ------
        str
            Registry key
        �VC7�rQrRrSrTr's r�vczRegistryInfo.vc�����w�w�|�|�D�H�H�e�,�,rc�V�tjj|jd�S)z
        Microsoft Visual Studio VS7 registry key.

        Return
        ------
        str
            Registry key
        �VS7rWr's r�vszRegistryInfo.vs�rYrc��y)z�
        Microsoft Visual C++ for Python registry key.

        Return
        ------
        str
            Registry key
        zDevDiv\VCForPythonrr's r�
vc_for_pythonzRegistryInfo.vc_for_python�s��%rc��y)zq
        Microsoft SDK registry key.

        Return
        ------
        str
            Registry key
        zMicrosoft SDKsrr's r�
microsoft_sdkzRegistryInfo.microsoft_sdk�s�� rc�V�tjj|jd�S)z�
        Microsoft Windows/Platform SDK registry key.

        Return
        ------
        str
            Registry key
        r	�rQrRrSr`r's r�windows_sdkzRegistryInfo.windows_sdk�s���w�w�|�|�D�.�.�	�:�:rc�V�tjj|jd�S)z�
        Microsoft .NET Framework SDK registry key.

        Return
        ------
        str
            Registry key
        �NETFXSDKrbr's r�	netfx_sdkzRegistryInfo.netfx_sdk
s���w�w�|�|�D�.�.�
�;�;rc��y)z�
        Microsoft Windows Kits Roots registry key.

        Return
        ------
        str
            Registry key
        zWindows Kits\Installed Rootsrr's r�windows_kits_rootszRegistryInfo.windows_kits_rootss��/rc��|jj�s|rdnd}tjj	d|d|�S)a
        Return key in Microsoft software registry.

        Parameters
        ----------
        key: str
            Registry key path where look.
        x86: str
            Force x86 software registry.

        Return
        ------
        str
            Registry key
        r�Wow6432Node�Software�	Microsoft)rJr0rQrRrS)r!�keyr*�node64s    r�	microsoftzRegistryInfo.microsoft"s5�� �w�w�-�-�/�3��M���w�w�|�|�J���S�A�Arc	��tj}tj}tj}|j}|j
D]>}d}	||||�d|�}	tj||�d|r||�cScSy#t$rC|jj�s$	||||d�d|�}n#t$rYY��wxYwY��Y�vwxYw#t$rYnwxYw	|s��||���#|r	||�wwxYw)a
        Look for values in registry in Microsoft software registry.

        Parameters
        ----------
        key: str
            Registry key path where look.
        name: str
            Value name to find.

        Return
        ------
        str
            value
        NrT)
r�KEY_READ�OpenKey�CloseKeyro�HKEYS�OSErrorrJr0�QueryValueEx)	r!rm�name�key_read�openkey�closekey�ms�hkey�bkeys	         r�lookupzRegistryInfo.lookup5s�� �?�?���.�.���?�?��
�^�^���J�J�	#�D��D�	
��t�R��W�a��:��
#��*�*�4��6�q�9���T�N��#	#�&���
��w�w�-�-�/�!�&�t�R��T�]�A�x�H���"�!� �!���	�
���
��
�����T�N����T�N��sZ�B�!C�#C�/C�C�	C�C�C�C�C�	C&�#C6�%C&�&C6�6
DNr=r@rB)r
rrrCrrrrrrtr"rErNrTrXr\r^r`rcrfrhror~rrrrGrG�s����	���� � ��!�!�� � �	
�E� ��	��	��	6��	6��	-��	-��	-��	-��	%��	%��	 ��	 ��	;��	;��	<��	<��	/��	/�B�&'rrGc���eZdZdZej
dd�Zej
dd�Zej
de�Zdd d�Z	d�Z
d	�Zd!d
�Ze
d��Zed��Zed
��Zd�Zd�Zed"d��Zed��Zed#d��Zed��Zed��Zed��Zed��Zed��Zed��Zed��Zed��Zed$d��Zed$d��Z d$d�Z!e
d%d��Z"y)&�
SystemInfoz�
    Microsoft Windows and Visual Studio related system information.

    Parameters
    ----------
    registry_info: RegistryInfo
        "RegistryInfo" instance.
    vc_ver: float
        Required Microsoft Visual C++ version.
    �WinDirr�ProgramFileszProgramFiles(x86)Nc��||_|jj|_|j�|_|xs|j	�x|_|_yrI)�rirJ�find_programdata_vs_vers�known_vs_paths�_find_latest_available_vs_ver�vs_ver�vc_ver)r!�
registry_infor�s   rr"zSystemInfo.__init__qsG������'�'�*�*���"�;�;�=���%+�$R�d�.P�.P�.R�R���d�krc���|j�}|s+|jstjj	d��t|�}|j
|j�t|�dS)zm
        Find the latest VC version

        Return
        ------
        float
            version
        z%No Microsoft Visual C++ version found���)�find_reg_vs_versr��	distutils�errors�DistutilsPlatformError�set�update�sorted)r!�reg_vc_vers�vc_verss   rr�z(SystemInfo._find_latest_available_vs_verzsf���+�+�-���t�2�2��"�"�9�9�7��
��k�"�����t�*�*�+��g��r�"�"rc
���|jj}|jj|jj|jjf}g}tj|jj|�D�]'\}}	tj|||�dtj�}|5tj|�\}}}	t|�D][}
tjt �5t#tj$||
�d�}||vr|j'|�ddd��]t|�D]X}
tjt �5t#tj(||
��}||vr|j'|�ddd��Z	ddd���*t+|�S#t$rY��BwxYw#1swY��xYw#1swY��xYw#1swY��hxYw)z�
        Find Microsoft Visual Studio versions available in registry.

        Return
        ------
        list of float
            Versions
        rN)r�rorXr^r\�	itertools�productrtrrrrqru�QueryInfoKey�range�
contextlib�suppress�
ValueError�float�	EnumValue�append�EnumKeyr�)r!r{�vckeys�vs_versr|rmr}�subkeys�valuesr$�i�vers            rr�zSystemInfo.find_reg_vs_vers�s����W�W�
�
���'�'�*�*�d�g�g�3�3�T�W�W�Z�Z�@����"�*�*�4�7�7�=�=�&�A�	0�I�D�#�
��~�~�d�B�s�G�Q����H���
0�%+�%8�%8��%>�"�����v��0�A�#�,�,�Z�8�0�#�F�$4�$4�T�1�$=�a�$@�A���g�-�#�N�N�3�/�0�0�0�
�w��0�A�#�,�,�Z�8�0�#�F�N�N�4��$;�<���g�-�#�N�N�3�/�0�0�0�
0�
0�	0�"�g�����
��
��
0�0��
0�0��
0�
0�sO�,F:�:AG"�;8G
	�31G"�$5G	�
G"�:	G�G�
G
�G"�G
�G"�"G,	c���i}d}	tj|�}|D]�}	tjj	||d�}t|dd��5}t
j|�}ddd�d}tjtjj	|d��|||j|d	�<��|S#t$r|cYSwxYw#1swY�mxYw#ttf$rY��wxYw)
z�
        Find Visual studio 2017+ versions from information in
        "C:\ProgramData\Microsoft\VisualStudio\Packages\_Instances".

        Return
        ------
        dict
            float version as key, path as value.
        z9C:\ProgramData\Microsoft\VisualStudio\Packages\_Instancesz
state.json�rtzutf-8)�encodingN�installationPath�
VC\Tools\MSVC�installationVersion)
rQ�listdirrurRrS�open�json�load�_as_float_version�KeyError)	r!�vs_versions�
instances_dir�hashed_namesrw�
state_path�
state_file�state�vs_paths	         rr�z#SystemInfo.find_programdata_vs_vers�s���)+��T�
�	��:�:�m�4�L�!�	�D�
��W�W�\�\�-��|�L�
��*�d�W�=�2�� �I�I�j�1�E�2�� 2�3���
�
�2�7�7�<�<��1A�B�C���D�2�2�5�9N�3O�P�Q�	�(���1�	���	��2�2���X�&�
��
�s;�C�/C�C�&AC�C�C�C	�C�C0�/C0c�Z�tdj|jd�dd��S)z�
        Return a string version as a simplified float version (major.minor)

        Parameters
        ----------
        version: str
            Version.

        Return
        ------
        float
            version
        �.N�)r�rS�split)�versions rr�zSystemInfo._as_float_version�s(���S�X�X�g�m�m�C�0��!�4�5�6�6rc���tjj|jd|jd���}|j
j
|j
j|jd��xs|S)zp
        Microsoft Visual Studio directory.

        Return
        ------
        str
            path
        �Microsoft Visual Studio �0.1f)rQrRrS�ProgramFilesx86r�r�r~r\)r!�defaults  r�VSInstallDirzSystemInfo.VSInstallDir�s]���'�'�,�,�� � �$<�T�[�[��<N�"O�
��
�w�w�~�~�d�g�g�j�j�T�[�[��,>�@�K�G�Krc���|j�xs|j�}tjj	|�s!d}t
jj|��|S)zm
        Microsoft Visual C++ directory.

        Return
        ------
        str
            path
        z(Microsoft Visual C++ directory not found)�	_guess_vc�_guess_vc_legacyrQrR�isdirr�r�r�)r!rR�msgs   r�VCInstallDirzSystemInfo.VCInstallDir�sO���~�~��:�4�#8�#8�#:���w�w�}�}�T�"�<�C��"�"�9�9�#�>�>��rc��|jdkry	|j|j}tj
j
|d�}	t	j|�d}|j|�|_	tj
j
||�S#t$r|j}Y��wxYw#ttf$rYywxYw)zl
        Locate Visual C++ for VS2017+.

        Return
        ------
        str
            path
        �,@rr�r�)r�r�r�r�rQrRrSr�r�r�ru�
IndexError)r!�vs_dir�guess_vcr�s    rr�zSystemInfo._guess_vcs����;�;�$���	'��(�(����5�F�
�7�7�<�<��(8�9��	��Z�Z��)�"�-�F��0�0��8�D�K��7�7�<�<��&�1�1���	'��&�&�F�	'����$�	��	�s$�B�A
B5�B2�1B2�5C�Cc���tjj|jd|jd�d��}tjj|j
j|jd��}|j
j|d�}|r tjj|d�n|}|j
j|j
j|jd��xs|S)z{
        Locate Visual C++ for versions prior to 2017.

        Return
        ------
        str
            path
        r�r�z\VC�
installdir�VC)	rQrRrSr�r�r�r^r~rX)r!r��reg_path�	python_vc�
default_vcs     rr�zSystemInfo._guess_vc_legacy*s����'�'�,�,�� � �'����D�'9��=�
���7�7�<�<���� 5� 5�$�+�+�d�9K�M���G�G�N�N�8�\�:�	�6?�R�W�W�\�\�)�T�2�W�
��w�w�~�~�d�g�g�j�j�T�[�[��,>�@�N�J�Nrc��|jdkry|jdk(ry|jdk(ry|jdk(ry|jd	k\ry
y)z�
        Microsoft Windows SDK versions for specified MSVC++ version.

        Return
        ------
        tuple of str
            versions
        �"@)z7.0z6.1z6.0a�$@)z7.1z7.0a�&@)z8.0z8.0a�(@)�8.1z8.1ar�)z10.0r�r�r�r's r�WindowsSdkVersionzSystemInfo.WindowsSdkVersion@sR���;�;�#��'�
�[�[�D�
 � �
�[�[�D�
 � �
�[�[�D�
 � �
�[�[�D�
 � �rc�t�|jtjj|jd��S)zt
        Microsoft Windows SDK last version.

        Return
        ------
        str
            version
        �lib)�_use_last_dir_namerQrRrS�
WindowsSdkDirr's r�WindowsSdkLastVersionz SystemInfo.WindowsSdkLastVersionVs*���&�&�r�w�w�|�|�D�4F�4F��'N�O�Orc��d}|jD]Y}tjj|jj
d|���}|jj
|d�}|s�Yn|rtjj|�s~tjj|jj|jd��}|jj
|d�}|r tjj|d�}|rtjj|�sv|jD]g}|d|jd�}d	|��}tjj|j|�}tjj|�s�f|}�i|rtjj|�sb|jD]S}d
|��}tjj|j|�}tjj|�s�R|}�U|s*tjj|jd�}|S)zn
        Microsoft Windows SDK directory.

        Return
        ------
        str
            path
        r�v�installationfolderr�r��WinSDKNr�zMicrosoft SDKs\Windows Kits\zMicrosoft SDKs\Windows\v�PlatformSDK)
r�rQrRrSr�rcr~r�r^r��rfindr�r�)r!�sdkdirr��locrR�install_base�intver�ds        rr�zSystemInfo.WindowsSdkDirbs��� ���)�)�	�C��'�'�,�,�t�w�w�2�2�a��u�I�>�C��W�W�^�^�C�)=�>�F���	��R�W�W�]�]�6�2��7�7�<�<���� 5� 5�$�+�+�d�9K�M�D��7�7�>�>�$��=�L�������l�H�=���R�W�W�]�]�6�2��-�-�
���-�s�y�y��~�.��6�v�h�?���G�G�L�L��!2�!2�D�9���7�7�=�=��#��F�
��R�W�W�]�]�6�2��-�-�
��2�3�%�8���G�G�L�L��!2�!2�D�9���7�7�=�=��#��F�	
�
��W�W�\�\�$�"3�"3�]�C�F��
rc�d�|jdkrd}d}nBd}|jdkrdnd}|jjd|��jd	d
�}d|�d|��}g}|jd
k\rJ|jD];}|t
jj|jj||�gz
}�=|jD]?}|t
jj|jjd|�d�|�gz
}�A|D]$}|jj|d�}|s�"|cSy)zy
        Microsoft Windows SDK executable directory.

        Return
        ------
        str
            path
        r��#r�(r�TF)rr5r3�-zWinSDK-NetFx�Toolsr�r��Ar�N)
r�rJr6r�NetFxSdkVersionrQrRrSr�rfr�rcr~)	r!�netfxverr r5�fx�regpathsr�rR�execpaths	         r�WindowsSDKExecutablePathz#SystemInfo.WindowsSDKExecutablePath�s8���;�;�$���H��D��H�"�k�k�T�1�d�u�G��7�7�&�&�4��&�A�I�I�$�PS�T�D��H�:�U�4�&�
1�����;�;�$���+�+�
G���R�W�W�\�\�$�'�'�*;�*;�S�"�E�F�F��
G��)�)�	L�C�������d�g�g�&9�&9�Q�s�e�1�:�r�J�K�K�H�	L��	 �D��w�w�~�~�d�,@�A�H����	 �
rc���tjj|jj|j
d�d��}|jj
|d�xsdS)zl
        Microsoft Visual F# directory.

        Return
        ------
        str
            path
        r�z	\Setup\F#�
productdirr)rQrRrSr�rNr�r~)r!rRs  r�FSharpInstallDirzSystemInfo.FSharpInstallDir�sJ���w�w�|�|�D�G�G�0�0�d�k�k�$�5G�y�2Q�R���w�w�~�~�d�L�1�7�R�7rc��|jdk\rdnd}|D]?}|jj|jjd|���}|s�9|xsdcSy)zt
        Microsoft Universal CRT SDK directory.

        Return
        ------
        str
            path
        r�)�10�81r�kitsrootrN)r�r�r~rh)r!�versr�r�s    r�UniversalCRTSdkDirzSystemInfo.UniversalCRTSdkDir�s^�� $�{�{�d�2�|����	$�C��W�W�^�^�D�G�G�$>�$>�(�3�%�@P�Q�F���|��#�	$�
rc�t�|jtjj|jd��S)z�
        Microsoft Universal C Runtime SDK last version.

        Return
        ------
        str
            version
        r�)r�rQrRrSrr's r�UniversalCRTSdkLastVersionz%SystemInfo.UniversalCRTSdkLastVersion�s*���&�&�r�w�w�|�|�D�4K�4K�U�'S�T�Trc�(�|jdk\rdSdS)z�
        Microsoft .NET Framework SDK versions.

        Return
        ------
        tuple of str
            versions
        r�)	z4.7.2z4.7.1z4.7z4.6.2z4.6.1z4.6z4.5.2z4.5.1z4.5rr�r's rr�zSystemInfo.NetFxSdkVersion�s%���{�{�d�"�
X�	
��	
rc���d}|jD]W}tjj|jj
|�}|jj
|d�}|s�V|S|S)zu
        Microsoft .NET Framework SDK directory.

        Return
        ------
        str
            path
        r�kitsinstallationfolder)r�rQrRrSr�rfr~)r!r�r�r�s    r�NetFxSdkDirzSystemInfo.NetFxSdkDir�sc�����'�'�	�C��'�'�,�,�t�w�w�0�0�#�6�C��W�W�^�^�C�)A�B�F����
�	�
�
rc��tjj|jd�}|jj|jjd�xs|S)zw
        Microsoft .NET Framework 32bit directory.

        Return
        ------
        str
            path
        zMicrosoft.NET\Framework�frameworkdir32�rQrRrSr�r�r~rX�r!�guess_fws  r�FrameworkDir32zSystemInfo.FrameworkDir32sB���7�7�<�<����-G�H���w�w�~�~�d�g�g�j�j�*:�;�G�x�Grc��tjj|jd�}|jj|jjd�xs|S)zw
        Microsoft .NET Framework 64bit directory.

        Return
        ------
        str
            path
        zMicrosoft.NET\Framework64�frameworkdir64rr
s  r�FrameworkDir64zSystemInfo.FrameworkDir64sB���7�7�<�<����-I�J���w�w�~�~�d�g�g�j�j�*:�;�G�x�Grc�$�|jd�S)z�
        Microsoft .NET Framework 32bit versions.

        Return
        ------
        tuple of str
            versions
        � ��_find_dot_net_versionsr's r�FrameworkVersion32zSystemInfo.FrameworkVersion32#����*�*�2�.�.rc�$�|jd�S)z�
        Microsoft .NET Framework 64bit versions.

        Return
        ------
        tuple of str
            versions
        �@rr's r�FrameworkVersion64zSystemInfo.FrameworkVersion64/rrc�|�|jj|jjd|���}t|d|���}|xs|j	|d�xsd}|j
dk\r|dfS|j
dk\r|j
�dd	d
k7rddfS|dfS|j
d
k(ry|j
dk(ryy)z�
        Find Microsoft .NET Framework versions.

        Parameters
        ----------
        bits: int
            Platform number of bits: 32 or 64.

        Return
        ------
        tuple of str
            versions
        �frameworkver�FrameworkDirr�rr�zv4.0r�Nr��v4z
v4.0.30319�v3.5r�)r �
v2.0.50727g @)zv3.0r!r)r�r~rX�getattrr�r�r)r!�bits�reg_ver�dot_net_dirr�s     rrz!SystemInfo._find_dot_net_versions;s����'�'�.�.������|�D�6�-B�C���d�l�4�&�$9�:���H��0�0��c�B�H�b���;�;�$����;��
�[�[�D�
 �#&�9�9�;�r��?�d�#:�<�V�K�K��V�K�K�
�[�[�C�
�'�
�[�[�C�
�'�rc�v�����fd�ttj���D�}t|d�xsdS)a)
        Return name of the last dir in path or '' if no dir found.

        Parameters
        ----------
        path: str
            Use dirs in this path
        prefix: str
            Use only dirs starting by this prefix

        Return
        ------
        str
            name
        c3��K�|]T}tjjtjj�|��r|j	��r|���Vy�wrI)rQrRr�rS�
startswith)�.0�dir_namerR�prefixs  ��r�	<genexpr>z0SystemInfo._use_last_dir_name.<locals>.<genexpr>jsF�����
���w�w�}�}�R�W�W�\�\�$��9�:��#�#�F�+�
�
�s�AANr)�reversedrQr��next)rRr+�
matching_dirss`` rr�zSystemInfo._use_last_dir_nameYs4���"
�$�R�Z�Z��%5�6�
�
��M�4�(�.�B�.rrIr=)r>zdict[float, str])r>ztuple[LiteralString, ...]�r>z
str | None)r>ztuple[str, ...])r)#r
rrrCr
rDr�r�r�r"r�r�r��staticmethodr�rEr�r�r�r�r�r�r�r�r�rrr�r	rrrrrr�rrrr�r�_s���	��W�[�[��2�
&�F��7�;�;�~�r�2�L�!�g�k�k�"5�|�D�O�S�#�(�>(�T�7��7� �L��L�"����"�<O�,����*�	P��	P��(��(�T�"��"�H�
8��
8�����(�	U��	U��
��
� ����"�
H��
H��
H��
H��	/��	/��	/��	/��<�/��/rr�c�@�eZdZUded<ded<ded<ded<ded<y)	�_EnvironmentDictrA�includer��libpathrRzNotRequired[str | None]�py_vcruntime_redistN)r
rr�__annotations__rrrr3r3ss��
�L�	�H�
�L�

�I�0�0rr3c��eZdZdZdd d�Zed��Zed��Zed��Zed��Z	ed��Z
ed	��Zed
��Zed��Z
ed��Zed
��Zed��Zd�Zed��Zed��Zed��Zed��Zed��Zed��Zed��Zed��Zed��Zed��Zed��Zed��Zed!d��Zd"d#d�Zd�Z y)$�EnvironmentInfoaY
    Return environment variables for specified Microsoft Visual C++ version
    and platform : Lib, Include, Path and libpath.

    This function is compatible with Microsoft Visual C++ 9.0 to 14.X.

    Script created by analysing Microsoft environment configuration files like
    "vcvars[...].bat", "SetEnv.Cmd", "vcbuildtools.bat", ...

    Parameters
    ----------
    arch: str
        Target architecture.
    vc_ver: float
        Required Microsoft Visual C++ version. If not set, autodetect the last
        version.
    vc_min_ver: float
        Minimum Microsoft Visual C++ version.
    Nc���t|�|_t|j�|_t	|j|�|_|j|kr!d}tjj|��y)Nz.No suitable Microsoft Visual C++ version found)
rrJrGr�r��sir�r�r�r�)r!r r��
vc_min_ver�errs     rr"zEnvironmentInfo.__init__�s]���t�$����t�w�w�'����T�W�W�f�-����;�;��#�B�C��"�"�9�9�#�>�>�$rc�.�|jjS)zk
        Microsoft Visual Studio.

        Return
        ------
        float
            version
        )r;r�r's rr�zEnvironmentInfo.vs_ver�����w�w�~�~�rc�.�|jjS)zp
        Microsoft Visual C++ version.

        Return
        ------
        float
            version
        )r;r�r's rr�zEnvironmentInfo.vc_ver�r?rc��ddg}|jdk\r2|jjdd��}|dgz
}|dgz
}|d|��gz
}|D�cgc]6}tjj|jj|���8c}Scc}w)zu
        Microsoft Visual Studio Tools.

        Return
        ------
        list of str
            paths
        zCommon7\IDEz
Common7\Toolsr�T�r5rz1Common7\IDE\CommonExtensions\Microsoft\TestWindowzTeam Tools\Performance Tools)r�rJr6rQrRrSr;r�)r!�paths�arch_subdirrRs    r�VSToolszEnvironmentInfo.VSTools�s��� �!1�2���;�;�$���'�'�-�-�d��-�E�K��J�K�K�E��5�6�6�E��5�k�]�C�D�D�E�EJ�K�T������T�W�W�1�1�4�8�K�K��Ks�
;Bc���tjj|jjd�tjj|jjd�gS)z�
        Microsoft Visual C++ & Microsoft Foundation Class Includes.

        Return
        ------
        list of str
            paths
        �IncludezATLMFC\Include)rQrRrSr;r�r's r�
VCIncludeszEnvironmentInfo.VCIncludes�sG��
�G�G�L�L����-�-�y�9��G�G�L�L����-�-�/@�A�
�	
rc�d�|jdk\r|jjd��}n|jjd��}d|��d|��g}|jdk\r	|d|��gz
}|D�cgc]6}tjj|jj|���8c}Scc}w)	z�
        Microsoft Visual C++ & Microsoft Foundation Class Libraries.

        Return
        ------
        list of str
            paths
        �.@T�r�r5�Libz
ATLMFC\Libr�z	Lib\store)r�rJr8rQrRrSr;r�)r!rDrCrRs    r�VCLibrarieszEnvironmentInfo.VCLibraries�s����;�;�$���'�'�,�,��,�6�K��'�'�,�,�T�,�:�K��{�m�$��K�=�&A�B���;�;�$����;�-�0�1�1�E�EJ�K�T������T�W�W�1�1�4�8�K�K��Ks�/;B-c��|jdkrgStjj|jj
d�gS)z�
        Microsoft Visual C++ store references Libraries.

        Return
        ------
        list of str
            paths
        r�zLib\store\references)r�rQrRrSr;r�r's r�VCStoreRefszEnvironmentInfo.VCStoreRefs�s8���;�;����I������T�W�W�1�1�3J�K�L�Lrc��|j}tjj|jd�g}|j
dkrdnd}|jj|�}|r1|tjj|jd|���gz
}|j
dk(rOd|jjd����}|tjj|j|�gz
}|S|j
dk\�r|jjjd	d
�j�}tjjdd|�d
��}|tjj|j||jjd��z�gz
}|jj|jjk7rK|tjj|j||jjd��z�gz
}|S|tjj|jd�gz
}|S)a�
        Microsoft Visual C++ Tools.

        Return
        ------
        list of str
            paths

        When host CPU is ARM, the tools should be found for ARM.

        >>> getfixture('windows_only')
        >>> mp = getfixture('monkeypatch')
        >>> mp.setattr(PlatformInfo, 'current_cpu', 'arm64')
        >>> ei = EnvironmentInfo(arch='irrelevant')
        >>> paths = ei.VCTools
        >>> any('HostARM64' in path for path in paths)
        True
        �
VCPackagesr�TF�Binr�rLrJrr�bin�Hostz%srK)r;rQrRrSr�r�rJr<r6r/r�upperr8r()r!r;�toolsr:rDrR�host_id�host_dirs        r�VCToolszEnvironmentInfo.VCTools�s���(�W�W�������b�o�o�|�<�=���;�;�$�.�4�E���g�g�'�'��1����b�g�g�l�l�2�?�?�c�+��4G�H�I�I�E��;�;�$������,�,�T�,�:�;�<�D��b�g�g�l�l�2�?�?�D�9�:�:�E�&��#�[�[�D�
 ��g�g�)�)�1�1�'�5�A�G�G�I�G��w�w�|�|�E�T�'��"�+=�>�H�������R�_�_�h����9K�9K�PT�9K�9U�.U�V��
�E��w�w�"�"�d�g�g�&8�&8�8���G�G�L�L�����D�G�G�4G�4G�D�4G�4Q�)Q�������
�b�g�g�l�l�2�?�?�E�:�;�;�E��rc���|jdkrU|jjdd��}tjj|jjd|���gS|jjd��}tjj|jjd�}|j}tjj||�d|���gS)zw
        Microsoft Windows SDK Libraries.

        Return
        ------
        list of str
            paths
        r�TrBrMrKr��um)	r�rJr8rQrRrSr;r��_sdk_subdir)r!rDr��libvers    r�OSLibrarieszEnvironmentInfo.OSLibraries-s����;�;�$���'�'�,�,�T�t�,�D�K��G�G�L�L����!6�!6�#�k�]�8K�L�M�M��'�'�,�,��,�6�K��'�'�,�,�t�w�w�4�4�e�<�C��%�%�F��G�G�L�L�����;�-�&@�A�B�Brc���tjj|jjd�}|j
dkr"|tjj|d�gS|j
dk\r
|j}nd}tjj||�d��tjj||�d��tjj||�d��gS)	zu
        Microsoft Windows SDK Include.

        Return
        ------
        list of str
            paths
        r4r��glr�r�sharedr\�winrt)rQrRrSr;r�r�r])r!r4�sdkvers   r�
OSIncludeszEnvironmentInfo.OSIncludesAs����'�'�,�,�t�w�w�4�4�i�@���;�;�$���R�W�W�\�\�'�4�8�9�9��{�{�d�"��)�)���������W����&7�8������W����m�4������W����&6�7��
rc���tjj|jjd�}g}|j
dkr||jz
}|j
dk\r$|tjj|d�gz
}|j
dk\r�||tjj|jjd�tjj|dd�tjj|d	d�tjj|d
d�tjj|jjdd|j
d
�ddd�gz
}|S)z}
        Microsoft Windows SDK Libraries Paths.

        Return
        ------
        list of str
            paths
        �
Referencesr�r�zCommonConfiguration\Neutralr��
UnionMetadataz'Windows.Foundation.UniversalApiContractz1.0.0.0z%Windows.Foundation.FoundationContractz,Windows.Networking.Connectivity.WwanContract�
ExtensionSDKszMicrosoft.VCLibsr��CommonConfiguration�neutral)rQrRrSr;r�r�r_)r!�refr5s   r�	OSLibpathzEnvironmentInfo.OSLibpath[s)���g�g�l�l�4�7�7�0�0�,�?�����;�;�#���t�'�'�'�G��;�;�$��������S�*H�I�J�J�G��;�;�$���������T�W�W�2�2�O�D������S�"K�Y�W������S�"I�9�U�������G���������G�G�)�)�#�&��{�{�4�(� �)����
�G�$�rc�4�t|j��S)zs
        Microsoft Windows SDK Tools.

        Return
        ------
        list of str
            paths
        )�list�
_sdk_toolsr's r�SdkToolszEnvironmentInfo.SdkTools�s���D�O�O�%�&�&rc#�:K�|jdkrI|jdkrdnd}tjj|jj
|���|jj�sW|jjd��}d|��}tjj|jj
|���|jdvrv|jj�rd}n|jjdd�	�}d
|��}tjj|jj
|���n�|jdk\r�tjj|jj
d�}|jjd��}|jj}tjj||�|�����|jjr|jj��yy�w)z�
        Microsoft Windows SDK Tools paths generator.

        Return
        ------
        generator of str
            paths
        rJr�rSzBin\x86TrK)r�r�rrBzBin\NETFX 4.0 ToolsN)r�rQrRrSr;r�rJr0r6r,r�r�)r!�bin_dirrDrRrds     rrpzEnvironmentInfo._sdk_tools�s������;�;���#�{�{�d�2�e�
�G��'�'�,�,�t�w�w�4�4�g�>�>��w�w�%�%�'��'�'�-�-�$�-�7�K���
�&�D��'�'�,�,�t�w�w�4�4�d�;�;��;�;�,�&��w�w�$�$�&� ��"�g�g�1�1�$�D�1�I��)�+��7�D��'�'�,�,�t�w�w�4�4�d�;�;�
�[�[�D�
 ��7�7�<�<���� 5� 5�u�=�D��'�'�-�-�$�-�7�K��W�W�2�2�F��'�'�,�,�t��x��}�%=�>�>��7�7�+�+��'�'�2�2�2�,�s�HHc�@�|jj}|r|�d�SdS)zu
        Microsoft Windows SDK version subdir.

        Return
        ------
        str
            subdir
        r3r)r;r��r!�ucrtvers  rr]zEnvironmentInfo._sdk_subdir�s&���'�'�/�/��#*�7�)�2��2��2rc��|jdkDrgStjj|jj
d�gS)zs
        Microsoft Windows SDK Setup.

        Return
        ------
        list of str
            paths
        r��Setup)r�rQrRrSr;r�r's r�SdkSetupzEnvironmentInfo.SdkSetup�s7���;�;����I������T�W�W�2�2�G�<�=�=rc�Z�|j}|j}|jdkr'd}|j�xr|j	�}nB|j�xs|j	�}|j
dk(xs|jdk(}g}|rE||jD�cgc],}tjj|j|���.c}z
}|rE||jD�cgc],}tjj|j|���.c}z
}|Scc}wcc}w)zv
        Microsoft .NET Framework Tools.

        Return
        ------
        list of str
            paths
        r�Tr)rJr;r�r,r0r/r(rrQrRrSrrr)r!rJr;�	include32�	include64rWr�s       r�FxToolszEnvironmentInfo.FxTools�s���W�W��
�W�W���;�;�$���I��,�,�.�.�J�r�7H�7H�7J�3J�I��(�(�*�A�b�.?�.?�.A�I����'�1�M�R�]�]�g�5M�I�����@B�@U�@U��9<������R�.�.��4��
�E���@B�@U�@U��9<������R�.�.��4��
�E������s�$1D#�+1D(c��|jdks|jjsgS|jj	d��}t
jj|jjd|���gS)z~
        Microsoft .Net Framework SDK Libraries.

        Return
        ------
        list of str
            paths
        r�TrKzlib\um)r�r;r	rJr8rQrRrS)r!rDs  r�NetFxSDKLibrariesz!EnvironmentInfo.NetFxSDKLibraries�sa���;�;���T�W�W�%8�%8��I��g�g�(�(�T�(�2�������T�W�W�0�0�V�K�=�2I�J�K�Krc��|jdks|jjsgStjj|jjd�gS)z}
        Microsoft .Net Framework SDK Includes.

        Return
        ------
        list of str
            paths
        r�z
include\um)r�r;r	rQrRrSr's r�NetFxSDKIncludesz EnvironmentInfo.NetFxSDKIncludes�sC���;�;���T�W�W�%8�%8��I������T�W�W�0�0�-�@�A�Arc�l�tjj|jjd�gS)z�
        Microsoft Visual Studio Team System Database.

        Return
        ------
        list of str
            paths
        z
VSTSDB\Deploy)rQrRrSr;r�r's r�VsTDbzEnvironmentInfo.VsTDbs'�������T�W�W�1�1�3C�D�E�Erc��|jdkrgS|jdkr3|jj}|jj	d��}n|jj
}d}d|jd�d|��}tjj||�g}|jdk\r%|tjj||d	�gz
}|S)
zn
        Microsoft Build Engine.

        Return
        ------
        list of str
            paths
        r�rJTrLrzMSBuild\r�z\bin�Roslyn)	r�r;r�rJr6r�rQrRrS)r!�	base_pathrDrR�builds     r�MSBuildzEnvironmentInfo.MSBuilds����;�;����I�
�[�[�4�
����/�/�I��'�'�-�-�d�-�;�K����,�,�I��K��4�;�;�t�,�D��
�>�������i��.�/���;�;�$���b�g�g�l�l�9�d�H�=�>�>�E��rc��|jdkrgStjj|jj
d�gS)zt
        Microsoft HTML Help Workshop.

        Return
        ------
        list of str
            paths
        r�zHTML Help Workshop)r�rQrRrSr;r�r's r�HTMLHelpWorkshopz EnvironmentInfo.HTMLHelpWorkshop4s8���;�;����I������T�W�W�4�4�6J�K�L�Lrc�(�|jdkrgS|jjd��}tjj|jjd�}|j}tjj||�d|���gS)z�
        Microsoft Universal C Runtime SDK Libraries.

        Return
        ------
        list of str
            paths
        r�TrKr��ucrt)	r�rJr8rQrRrSr;r�_ucrt_subdir)r!rDr�rvs    r�
UCRTLibrarieszEnvironmentInfo.UCRTLibrariesCsx���;�;����I��g�g�(�(�T�(�2���g�g�l�l�4�7�7�5�5�u�=���#�#�������S�W�I�T�+��"?�@�A�Arc���|jdkrgStjj|jj
d�}tjj||j�d��gS)z�
        Microsoft Universal C Runtime SDK Include.

        Return
        ------
        list of str
            paths
        r�r4r�)r�rQrRrSr;rr�)r!r4s  r�UCRTIncludeszEnvironmentInfo.UCRTIncludesUsY���;�;����I��'�'�,�,�t�w�w�9�9�9�E�������W��):�):�(;�4�&@�A�B�Brc�@�|jj}|r|�d�SdS)z�
        Microsoft Universal C Runtime SDK version subdir.

        Return
        ------
        str
            subdir
        r3r)r;rrus  rr�zEnvironmentInfo._ucrt_subdires&���'�'�4�4��#*�7�)�2��2��2rc�`�d|jcxkDrdkDrgS|jjgS)zk
        Microsoft Visual F#.

        Return
        ------
        list of str
            paths
        r�r�)r�r;r�r's r�FSharpzEnvironmentInfo.FSharprs4���$�+�+�$��$��I�%����(�(�)�)rc�@���d|j�d��|jjd��jd��g}|jj
}tjj|jdd��}tjj|�r[tjj|t
j|�d�}||tjj|d	�gz
}|tjj|d
�gz
}d|jdz�d
�dt|j�dz�d
�f}��fd�tj ||�D�}t#t%tjj&|�d�S)z{
        Microsoft Visual C++ runtime redistributable dll.

        Returns the first suitable path found or None.
        �	vcruntimez0.dllTrKr3z\Toolsz\Redistr��onecore�redistzMicrosoft.VC�
z.CRTc3�h�K�|])\}}tjj|�|�����+y�wrI)rQrRrS)r)r+�crt_dirrDr�s   ��rr,z2EnvironmentInfo.VCRuntimeRedist.<locals>.<genexpr>�s0�����
�!���
�G�G�L�L���g�y�A�
�s�/2N)r�rJr8�stripr;r�rQrR�dirnamerr�rSr��intr�r�r�r.�filter�isfile)r!�prefixes�
tools_path�redist_path�crt_dirs�candidate_pathsrDr�s      @@r�VCRuntimeRedistzEnvironmentInfo.VCRuntimeRedist�sN��� ����}�E�2�	��g�g�(�(�T�(�2�8�8��>�����W�W�)�)�
��g�g�o�o�j�&8�&8��J�&O�P��
�7�7�=�=��%��'�'�,�,�{�B�J�J�{�4K�B�4O�P�K���b�g�g�l�l�;�	�&J�K�K�H��R�W�W�\�\�*�h�7�8�8���4�;�;��+�,�D�1��3�t�{�{�+�b�0�1��6�
��
�%.�%6�%6�x��%J�
���F�2�7�7�>�>�?�;�T�B�Brc���t|jd|j|j|j|j
g|�|jd|j|j|j|j|jg|�|jd|j|j|j|jg|�|jd|j|j|j|j |j"|j|j$|j&|j(g	|���}|j*dk\r|j,r|j,|d<|S)z�
        Return environment dict.

        Parameters
        ----------
        exists: bool
            It True, only return existing paths.

        Return
        ------
        dict
            environment
        r4r�r5rR)r4r�r5rR�r6)r3�_build_pathsrHrer�r�rNr_r}r�rrPrmrZrEr�rqryr�r�r�r�r�)r!�exists�envs   r�
return_envzEnvironmentInfo.return_env�sR����%�%���O�O��O�O��%�%��)�)�	��	��!�!���$�$��$�$��L�L��&�&��*�*���
��%�%���!�!�4�<�<��1A�1A�4�>�>�R���
�"�"���L�L��L�L��J�J��M�M��M�M��L�L��L�L��)�)��K�K�
���7*
��V�;�;�"���!5�!5�)-�)=�)=�C�%�&��
rc���tjj|�}tj|d�jtj�}tj||�}|r-tttjj|��n|}|s2|j��d�}tjj|��t!|�}	tjj#|	�S)aC
        Given an environment variable name and specified paths,
        return a pathsep-separated string of paths containing
        unique, extant, directories from those paths and from
        the environment variable. Raise an error if no paths
        are resolved.

        Parameters
        ----------
        name: str
            Environment variable name
        spec_path_lists: list of str
            Paths
        exists: bool
            It True, only return existing paths.

        Return
        ------
        str
            Pathsep-separated paths
        rz environment variable is empty)r��chain�
from_iterabler
rDr�rQ�pathsepror�rRr�rVr�r�r�rrS)
r!rw�spec_path_listsr��
spec_paths�	env_pathsrC�extant_pathsr��unique_pathss
          rr�zEnvironmentInfo._build_paths�s���.�_�_�2�2�?�C�
��K�K��b�)�/�/��
�
�;�	����
�I�6��=C�t�F�2�7�7�=�=�%�8�9�����Z�Z�\�N�"@�A�C��"�"�9�9�#�>�>�&�|�4���z�z���|�,�,r)Nrr=r0)T)r��boolr>r3)!r
rrrCr"rEr�r�rErHrNrPrZr_rermrqrpr]ryr}rr�r�r�r�r�r�r�r�r�r�r�rrrr9r9{s���.?��	��	��	��	��L��L�&�
��
��L��L�(�M��M��0��0�d�C��C�&����2�%��%�N�	'��	'�!3�F�
3��
3��>��>�����<�
L��
L��B��B��	F��	F�����6�M��M��B��B�"�
C��
C��
3��
3��*��*�� C�� C�D;�z-rr9)rC�
__future__rr�r�r�rQ�os.path�platform�typingrr�more_itertoolsr�distutils.errorsr��typing_extensionsrr�systemrr
�dictr7rrGr�r3r9rrr�<module>r�s����#����	���+�*���<������*�i�7���!�!�#�f�G�^�$�v
�v
�rz�z�zQ/�Q/�h1�y�1�E
-�E
-r