ó
    øùgâo  ã            
       óP	  • S r SSKrSSKrSSKrSSKrSSKrSSKrSSKrSSKrSSK	r	SSKJ
r
  SSKJr  SSKJr  SSKJr   SSKJr   SSKJr  \" \R$                  " S	5      5      r\" 5       r/ S
Qr\R.                  S:H  r\R.                  S:H  r\R4                  R7                  S5      r\R4                  R7                  S5      r\r\R4                  R7                  S5      r\R4                  R7                  S5      r \R4                  R7                  S5      r!\=(       d    \ =(       d    \!r"\R4                  R7                  S5      r#\R4                  R7                  S5      r$Sr%Sr&Sr'Sr(Sr)Sr*Sr+Sr,Sr-Sr.Sr/Sr0S r1S!r2S"r3S#r4S$r5S%r6S&r7S'r8S(r9S)r:S*r;S+r<S,r=S-r> " S. S/\R~                  5      r@\A" 5       R…                  \@R†                  5         " S0 S1\R~                  5      rD\A" 5       R…                  \DR†                  5        \RŠ                  " 5       rF\RŽ                  " 5       rH\
" S2/ S3Q5      rI\
" S4/ S5Q5      rJ\
" S6/ S7Q5      rK\
" S8/ S9Q5      rL\
" S:/ S;Q5      rM\
" S</ S=Q5      rN\
" S>/ S?Q5      rO\
" S@/ SAQ5      rP\
" SB/ SCQ5      rQ\
" SD/ SEQ5      rR\
" SF/ SGQ5      rS\
" SH/ SIQ5      rT\
" SJ/ SKQ5      rU\
" SLSMSN/5      rV\
" SO/ SPQ5      rW\
" SQSRSS/5      rX\
" ST/ SUQ5      rY\
" SV/ SWQ5      rZ\
" SX/ SWQ5      r[\
" SY/ SZQ5      r\\
" S[S\S]/5      r]\
" S^S_S`/5      r^\
" Sa/ SbQ5      r_\
" ScSdSe/5      r`\\\/\\/4\\/\/4\/\/4\\/\/4\/\/4\\/\\/4\/\\/4\/\\/4Sf.ra\b  \aR…                  \/\/4\/\/4Sg.5        \b  \#(       d  \aR…                  Sh\/\\/405         " Si Sj\b5      rc " Sk Sl\c5      rd " Sm Sn\d5      re " So Sp\c5      rf " Sq Sr\c5      rgS�Ss jrhSt riSu rjSv rkSw rl\iSx 5       rmSy rnSz roS{ rpS�S| jrqS} rrS~ rs " S S€5      rtS� ru\t" 5       rv\vRî                  \ulw        \vRð                  \ulx        S‚rySƒ rzS„ r{\\{4S… jr|\4S† jr}S�S‡ jr~Sˆ rS‰ r€\i\GR                  4SŠ j5       r‚S‘SŒ jrƒSS‹\GR                  4S� jr„SŽ r…g! \ a    Sr GNOf = f! \ a    Sr GNWf = f)’z�Common objects shared by __init__.py and _ps*.py modules.

Note: this module is imported by setup.py, so it should not import
psutil or third-party modules.
é    N)Ú
namedtuple)ÚAF_INET)Ú
SOCK_DGRAM)ÚSOCK_STREAM)ÚAF_INET6)ÚAF_UNIXÚPSUTIL_DEBUG)RÚFREEBSDÚBSDÚLINUXÚNETBSDÚOPENBSDÚMACOSÚOSXÚPOSIXÚSUNOSÚWINDOWSÚ
CONN_CLOSEÚCONN_CLOSE_WAITÚCONN_CLOSINGÚCONN_ESTABLISHEDÚCONN_FIN_WAIT1ÚCONN_FIN_WAIT2ÚCONN_LAST_ACKÚCONN_LISTENÚ	CONN_NONEÚCONN_SYN_RECVÚCONN_SYN_SENTÚCONN_TIME_WAITÚNIC_DUPLEX_FULLÚNIC_DUPLEX_HALFÚNIC_DUPLEX_UNKNOWNÚSTATUS_DEADÚSTATUS_DISK_SLEEPÚSTATUS_IDLEÚSTATUS_LOCKEDÚSTATUS_RUNNINGÚSTATUS_SLEEPINGÚSTATUS_STOPPEDÚSTATUS_SUSPENDEDÚSTATUS_TRACING_STOPÚSTATUS_WAITINGÚSTATUS_WAKE_KILLÚSTATUS_WAKINGÚSTATUS_ZOMBIEÚSTATUS_PARKEDÚENCODINGÚENCODING_ERRSr   ÚpconnÚ	pcputimesÚpctxswÚpgidsÚpioÚpioniceÚ	popenfileÚpthreadÚpuidsÚsconnÚ	scpustatsÚsdiskioÚ	sdiskpartÚ
sdiskusageÚsnetioÚsnicaddrÚ	snicstatsÚsswapÚsuserÚ	conn_tmapÚdeprecated_methodÚisfile_strictÚmemoizeÚparse_environ_blockÚpath_exists_strictÚusage_percentÚsupports_ipv6Úsockfam_to_enumÚsocktype_to_enumÚwrap_numbersÚ	open_textÚopen_binaryÚcatÚbcatÚbytes2humanÚconn_to_ntupleÚdebugÚhiliteÚterm_supports_colorsÚprint_colorÚposixÚntÚlinuxÚdarwin)ÚfreebsdÚmidnightbsdÚopenbsdÚnetbsd)ÚsunosÚsolarisÚaixÚrunningÚsleepingz
disk-sleepÚstoppedztracing-stopÚzombieÚdeadz	wake-killÚwakingÚidleÚlockedÚwaitingÚ	suspendedÚparkedÚESTABLISHEDÚSYN_SENTÚSYN_RECVÚ	FIN_WAIT1Ú	FIN_WAIT2Ú	TIME_WAITÚCLOSEÚ
CLOSE_WAITÚLAST_ACKÚLISTENÚCLOSINGÚNONEc                   ó    • \ rS rSrSrSrSrSrg)Ú	NicDuplexé€   é   é   r   © N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__r    r!   r"   Ú__static_attributes__r‚   ó    Ú0/usr/lib/python3/dist-packages/psutil/_common.pyr~   r~   €   s   † Ø€OØ€OØÓrˆ   r~   c                   ó   • \ rS rSrSrSrSrg)ÚBatteryTimeéŠ   éÿÿÿÿéþÿÿÿr‚   N)rƒ   r„   r…   r†   ÚPOWER_TIME_UNKNOWNÚPOWER_TIME_UNLIMITEDr‡   r‚   rˆ   r‰   r‹   r‹   Š   s   † ØÐØÓrˆ   r‹   rD   )ÚtotalÚusedÚfreeÚpercentÚsinÚsoutr@   )r‘   r’   r“   r”   r>   )Ú
read_countÚwrite_countÚ
read_bytesÚwrite_bytesÚ	read_timeÚ
write_timer?   )ÚdeviceÚ
mountpointÚfstypeÚoptsrA   )Ú
bytes_sentÚ
bytes_recvÚpackets_sentÚpackets_recvÚerrinÚerroutÚdropinÚdropoutrE   )ÚnameÚterminalÚhostÚstartedÚpidr<   )ÚfdÚfamilyÚtypeÚladdrÚraddrÚstatusr­   rB   )r¯   ÚaddressÚnetmaskÚ	broadcastÚptprC   )ÚisupÚduplexÚspeedÚmtuÚflagsr=   )Úctx_switchesÚ
interruptsÚsoft_interruptsÚsyscallsÚscpufreq)ÚcurrentÚminÚmaxÚshwtemp)ÚlabelrÂ   ÚhighÚcriticalÚsbattery)r”   ÚsecsleftÚpower_pluggedÚsfanrÆ   rÂ   r4   )ÚuserÚsystemÚchildren_userÚchildren_systemr9   Úpathr®   r:   )ÚidÚ	user_timeÚsystem_timer;   )ÚrealÚ	effectiveÚsavedr6   r7   )r—   r˜   r™   rš   r8   ÚioclassÚvaluer5   Ú	voluntaryÚinvoluntaryr3   )r®   r¯   r°   r±   r²   r³   ÚaddrÚipÚport)ÚallÚtcpÚtcp4ÚudpÚudp4ÚinetÚinet4Úinet6)Útcp6Úudp6Úunixc                   ó.   • \ rS rSrSrSrS rS rS rSrg)	ÚErrori  zIBase exception class. All other psutil exceptions inherit
from this one.
Úpsutilc                 ó�   • [         R                  " 5       nU H*  n[        XS 5      nU(       d  US:X  d  M  US:X  d  M&  XBU'   M,     U$ )Nr­   r   )ÚcollectionsÚOrderedDictÚgetattr)ÚselfÚattrsÚinfor©   rÙ   s        r‰   Ú	_infodictÚError._infodict  sC   € Ü×&Ò&Ó(ˆÛˆDÜ˜D¨Ó-ˆEÞ˜ �¨5°A­:Ø"�T“
ñ ð ˆrˆ   c                 óN  • U R                  S5      nU(       aJ  SR                  SR                  UR                  5        VVs/ s H  u  p#U SU< 3PM     snn5      5      nOS nSR                  [	        U SS5      U4 Vs/ s H  oU(       d  M  UPM     sn5      $ s  snnf s  snf )N)r­   Úppidr©   z({})ú, Ú=Ú ÚmsgÚ )rô   ÚformatÚjoinÚitemsrð   )rñ   ró   ÚkÚvÚdetailsÚxs         r‰   Ú__str__ÚError.__str__  s’   € à�~‰~Ð5Ó6ˆÞØ—m‘mØ—	‘	°D·J±J´LÔA²L©D¨A˜a˜S  !¡›<±LÒAÓBó‰Gð ˆGØ�x‰x¤W¨T°5¸"Ó%=¸wÑ$GÓMÒ$G˜qË1ŸÑ$GÑMÓNÐNùó	 Bùò Ns   ÁBÂ
B"ÂB"c           	      óÞ   • U R                  S5      nSR                  UR                  5        VVs/ s H  u  p#U SU< 3PM     snn5      nSU R                  R                   SU S3$ s  snnf )N)r­   r÷   r©   Úsecondsrû   rø   rù   zpsutil.Ú(Ú))rô   rþ   rÿ   Ú	__class__rƒ   )rñ   ró   r   r  r  s        r‰   Ú__repr__ÚError.__repr__  sf   € à�~‰~ÐGÓHˆØ—)‘)°d·j±j´lÔC²l©d¨a ˜s ! A¡5›\±lÒCÓDˆØ˜Ÿ™×0Ñ0Ð1°°7°)¸1Ð=Ð=ùó Ds   °A)
r‚   N)	rƒ   r„   r…   r†   Ú__doc__rô   r  r  r‡   r‚   rˆ   r‰   rë   rë     s   † ñð €Jòò	Oõ>rˆ   rë   c                   ó,   • \ rS rSrSrSrSS jrS rSrg)	ÚNoSuchProcessi&  zPException raised when a process with a certain PID doesn't
or no longer exists.
rì   Nc                 óf   • [         R                  U 5        Xl        X l        U=(       d    SU l        g )Nzprocess no longer exists©rë   Ú__init__r­   r©   rû   ©rñ   r­   r©   rû   s       r‰   r  ÚNoSuchProcess.__init__-  s%   € Ü�‰�tÔØŒØŒ	Ø×4Ð4ˆ�rˆ   c                 ó`   • U R                   U R                  U R                  U R                  44$ ©N©r
  r­   r©   rû   ©rñ   s    r‰   Ú
__reduce__ÚNoSuchProcess.__reduce__3  ó$   € Ø—‘ §¡¨4¯9©9°d·h±hÐ ?Ð@Ð@rˆ   ©rû   r©   r­   ©NN©rƒ   r„   r…   r†   r  r  r  r‡   r‚   rˆ   r‰   r  r  &  s   † ñð €Jô5õArˆ   r  c                   ó,   • \ rS rSrSrSrSS jrS rSrg)	ÚZombieProcessi7  a  Exception raised when querying a zombie process. This is
raised on macOS, BSD and Solaris only, and not always: depending
on the query the OS may be able to succeed anyway.
On Linux all zombie processes are querable (hence this is never
raised). Windows doesn't have zombie processes.
rì   Nc                 ó\   • [         R                  XX$5        X0l        U=(       d    SU l        g )Nz"PID still exists but it's a zombie)r  r  r÷   rû   )rñ   r­   r©   r÷   rû   s        r‰   r  ÚZombieProcess.__init__A  s$   € Ü×Ñ˜t¨$Ô4ØŒ	Ø×>Ð>ˆ�rˆ   c                 óv   • U R                   U R                  U R                  U R                  U R                  44$ r  )r
  r­   r©   r÷   rû   r  s    r‰   r  ÚZombieProcess.__reduce__F  s*   € Ø—‘ §¡¨4¯9©9°d·i±iÀÇÁÐ JÐKÐKrˆ   )rû   r÷   ©NNNr  r‚   rˆ   r‰   r   r   7  s   † ñð €Jô?õ
Lrˆ   r   c                   ó,   • \ rS rSrSrSrSS jrS rSrg)	ÚAccessDeniediJ  z@Exception raised when permission to perform an action is denied.rì   Nc                 óf   • [         R                  U 5        Xl        X l        U=(       d    SU l        g )Nrü   r  r  s       r‰   r  ÚAccessDenied.__init__O  s#   € Ü�‰�tÔØŒØŒ	Ø—9˜"ˆ�rˆ   c                 ó`   • U R                   U R                  U R                  U R                  44$ r  r  r  s    r‰   r  ÚAccessDenied.__reduce__U  r  rˆ   r  r%  r  r‚   rˆ   r‰   r'  r'  J  s   † ÙJà€JôõArˆ   r'  c                   ó,   • \ rS rSrSrSrSS jrS rSrg)	ÚTimeoutExpirediY  zORaised on Process.wait(timeout) if timeout expires and process
is still alive.
rì   Nc                 óh   • [         R                  U 5        Xl        X l        X0l        SU S3U l        g )Nztimeout after z seconds)rë   r  r  r­   r©   rû   )rñ   r  r­   r©   s       r‰   r  ÚTimeoutExpired.__init__`  s-   € Ü�‰�tÔØŒØŒØŒ	Ø# G 9¨HÐ5ˆ�rˆ   c                 ó`   • U R                   U R                  U R                  U R                  44$ r  )r
  r  r­   r©   r  s    r‰   r  ÚTimeoutExpired.__reduce__g  s$   € Ø—‘ §¡¨t¯x©x¸¿¹Ð CÐDÐDrˆ   )rû   r©   r­   r  r  r  r‚   rˆ   r‰   r-  r-  Y  s   † ñð €Jô6õErˆ   r-  c                 óf   •  [        U 5      U-  S-  nUb  [        X25      nU$ ! [         a     gf = f)z5Calculate percentage usage of 'used' against 'total'.éd   g        )ÚfloatÚroundÚZeroDivisionError)r’   r‘   Úround_Úrets       r‰   rL   rL   p  sE   € ðÜ�T‹{˜UÑ" cÑ)ˆð ÑÜ˜Ó$ˆCØˆ
øô ó Ùðús   ‚# £
0¯0c                 óf   ^ ^• [         R                  " T 5      UU 4S j5       nU4S jn0 mX!l        U$ )aq  A simple memoize decorator for functions supporting (hashable)
positional arguments.
It also provides a cache_clear() function for clearing the cache:

>>> @memoize
... def foo()
...     return 1
    ...
>>> foo()
1
>>> foo.cache_clear()
>>>

It supports:
 - functions
 - classes (acts as a @singleton)
 - staticmethods
 - classmethods

It does NOT support:
 - methods
c                  óÄ   >• U [        [        UR                  5       5      5      4n TU   $ ! [         a)     T" U 0 UD6=nTU'   O! [         a  nUS eS nAff = fUs $ f = fr  )Ú	frozensetÚsortedrÿ   ÚKeyErrorÚ	Exception)ÚargsÚkwargsÚkeyr8  ÚerrÚcacheÚfuns        €€r‰   ÚwrapperÚmemoize.<locals>.wrapper”  su   ø€ à”Yœv f§l¡l£nÓ5Ó6Ð7ˆð	Ø˜‘:ÐøÜó 	ð$Ù#&¨Ð#7°Ñ#7Ð7��e˜C’jøÜó $Ø˜tÐ#ûð$úàŠJð	ús2   §, ¬
A·AÁAÁ
AÁAÁAÁAÁAc                  ó&   >• T R                  5         g)zClear cache.N)Úclear)rC  s   €r‰   Úcache_clearÚmemoize.<locals>.cache_clear   s   ø€ à�‰�rˆ   )Ú	functoolsÚwrapsrI  )rD  rE  rI  rC  s   `  @r‰   rI   rI   |  s7   ù€ ô0 ‡_‚_�SÓõ	ó ð	õð €EØ%ÔØ€Nrˆ   c                 ój   ^ • [         R                  " T 5      U 4S j5       nS nS nX!l        X1l        U$ )až  A memoize decorator which is disabled by default. It can be
activated and deactivated on request.
For efficiency reasons it can be used only against class methods
accepting no arguments.

>>> class Foo:
...     @memoize
...     def foo()
...         print(1)
...
>>> f = Foo()
>>> # deactivated (default)
>>> foo()
1
>>> foo()
1
>>>
>>> # activated
>>> foo.cache_activate(self)
>>> foo()
1
>>> foo()
>>> foo()
>>>
c                 ó  >•  U R                   T   nU$ ! [         a!     T" U 5      s $ ! [         a  nUS eS nAff = f[         aD     T" U 5      nO! [         a  nUS eS nAff = f XR                   T'    U$ ! [         a      U$ f = ff = fr  )Ú_cacheÚAttributeErrorr>  r=  )rñ   r8  rB  rD  s      €r‰   rE  Ú'memoize_when_activated.<locals>.wrapperÄ  s¶   ø€ ð	à—+‘+˜cÑ"ˆCð( ˆ
øô' ó 	$ð$Ù˜4“yÒ øÜó $Ø˜tÐ#ûð$úäó 	ð$Ù˜$“i‘øÜó $Ø˜tÐ#ûð$úðØ#&—‘˜CÒ ð
 ˆ
øô	 "ó ñ Øˆ
ð	úð	úse   ƒ ”
BŸ)¦B©
;³6¶;»BÁAÁBÁ
A#ÁAÁA#Á#BÁ'A8Á8
BÂBÂBÂBc                 ó   • 0 U l         g)zcActivate cache. Expects a Process instance. Cache will be
stored as a "_cache" instance attribute.
N)rO  ©Úprocs    r‰   Úcache_activateÚ.memoize_when_activated.<locals>.cache_activateÞ  s   € ð ˆ�rˆ   c                 ó*   •  U ? g! [         a     gf = f)zDeactivate and clear cache.N)rO  rP  rS  s    r‰   Úcache_deactivateÚ0memoize_when_activated.<locals>.cache_deactivateä  s   € ð	Ø‘øÜó 	Ùð	ús   ‚ …
‘)rK  rL  rU  rX  )rD  rE  rU  rX  s   `   r‰   Úmemoize_when_activatedrZ  ©  s=   ø€ ô6 ‡_‚_�SÓôó ðò2òð ,ÔØ/ÔØ€Nrˆ   c                 ó¤   •  [         R                  " U 5      n[        R                  " UR                  5      $ ! [         a    e [
         a     gf = f)z‘Same as os.path.isfile() but does not swallow EACCES / EPERM
exceptions, see:
http://mail.python.org/pipermail/python-dev/2012-June/120787.html.
F)ÚosÚstatÚS_ISREGÚst_modeÚPermissionErrorÚOSError)rÑ   Ústs     r‰   rH   rH   ð  sH   € ð
(Ü�WŠW�T‹]ˆô �|Š|˜BŸJ™JÓ'Ð'øô ó ØÜó Ùðús   ‚8 ¸AÁAc                 óf   •  [         R                  " U 5        g! [         a    e [         a     gf = f)z‘Same as os.path.exists() but does not swallow EACCES / EPERM
exceptions. See:
http://mail.python.org/pipermail/python-dev/2012-June/120787.html.
TF)r\  r]  r`  ra  )rÑ   s    r‰   rK   rK   ÿ  s6   € ð
Ü
�Š�Œð øô ó ØÜó Ùðús   ‚ ™0¯0c                  ó  • [         R                  (       a  [        c  g [         R                   " [        [         R                  5       n U R	                  S5        SSS5        g! , (       d  f       g= f! [
         a     gf = f)z2Return True if IPv6 is supported on this platform.NF)z::1r   T)ÚsocketÚhas_ipv6r   r   Úbindra  )Úsocks    r‰   rM   rM     s_   € ô �?�?œhÑ.ØðÜ�]Š]œ8¤V×%7Ñ%7Ô8¸DØ�I‰I�jÔ!÷ 9à÷ 9Ô8àûÜó Ùðús/   Ÿ)A4 ÁA#ÁA4 Á#
A1Á-A4 Á1A4 Á4
BÂ Bc                 óÔ   • 0 nSn[         n U R                  SU5      nXB::  a   U$ U R                  SX$5      nXR:”  a&  XU nXS-   U nU(       a  UR                  5       nXqU'   US-   nM^  )zCParse a C environ block of environment variables into a dictionary.r   Ú rù   r�   )r   ÚfindÚupper)Údatar8  ÚposÚWINDOWS_Únext_posÚ	equal_posrA  rÙ   s           r‰   rJ   rJ     s‰   € ð €CØ
€Cô €HØ
Ø—9‘9˜T 3Ó'ˆà‹?Øð €Jð —I‘I˜c 3Ó1ˆ	Ø‹?Ø˜9Ð%ˆCØ Q™¨Ð2ˆEæØ—i‘i“k�Ø�‰HØ˜‰lˆñ rˆ   c                 óT   •  [         R                  " U 5      $ ! [         a    U s $ f = f)zyConvert a numeric socket family value to an IntEnum member.
If it's not a known member, return the numeric value itself.
)re  ÚAddressFamilyÚ
ValueError©Únums    r‰   rN   rN   7  s,   € ðÜ×#Ò# CÓ(Ð(øÜó ØŠ
ðúó   ‚ ˜'¦'c                 óT   •  [         R                  " U 5      $ ! [         a    U s $ f = f)zwConvert a numeric socket type value to an IntEnum member.
If it's not a known member, return the numeric value itself.
)re  Ú
SocketKindrt  ru  s    r‰   rO   rO   A  s,   € ðÜ× Ò  Ó%Ð%øÜó ØŠ
ðúrw  c           	      ó\  • U[         R                  [        1;   a  U(       a  [        U6 nU(       a  [        U6 nU[         R                  :X  a'  U[        [        1;   a  UR                  U[        5      nO[        n[        U5      n[        U5      nUc  [        XX#XE5      $ [        XX#XEU5      $ )z2Convert a raw connection tuple to a proper ntuple.)re  r   r   rÜ   r   Úgetr   rN   rO   r3   r<   )r®   ÚfamÚtype_r±   r²   r³   Ú
status_mapr­   s           r‰   rV   rV   K  s“   € à
Œv�~‰~œxÐ(Ó(ÞÜ˜%�LˆEÞÜ˜%�LˆEØ”×"Ñ"Ó" s¬w¼Ð.AÓ'AØ—‘ ¬	Ó2‰äˆÜ
˜#Ó
€CÜ˜UÓ#€EØ
�{Ü�R˜e¨EÓ:Ð:ä�R˜e¨E¸3Ó?Ð?rˆ   c                 óº  • SSK nU R                  (       a  U R                  (       d  gU R                  [        R
                  :X  a<  [        UR                  U R                   SU R                   3SS9R                  5      $ U R                  [        R                  :X  a<  [        UR                  U R                   SU R                   3SS9R                  5      $ g)zZGiven the address ntuple returned by ``net_if_addrs()``
calculates the broadcast address.
r   NÚ/F)Ústrict)Ú	ipaddressr´   rµ   r¯   re  r   ÚstrÚIPv4NetworkÚbroadcast_addressr   ÚIPv6Network)rÜ   r‚  s     r‰   Úbroadcast_addrr‡  ^  sº   € ó à�<�<˜tŸ|Ÿ|ØØ‡{�{”f—n‘nÓ$ÜØ×!Ñ!Ø—<‘<�.  $§,¡, Ð0¸ð "ð çÑó
ð 	
ð
 ‡{�{”f—o‘oÓ%ÜØ×!Ñ!Ø—<‘<�.  $§,¡, Ð0¸ð "ð çÑó
ð 	
ð &rˆ   c                 ó   ^ • U 4S jnU$ )z{A decorator which can be used to mark a method as deprecated
'replcement' is the method name which will be called instead.
c                 ó–   >^• U R                    ST S3mU R                  c  TU l        [        R                  " U 5      UU4S j5       nU$ )Nz*() is deprecated and will be removed; use z
() insteadc                 ó\   >• [         R                  " T[        SS9  [        U T5      " U0 UD6$ )Nr€   )ÚcategoryÚ
stacklevel)ÚwarningsÚwarnÚDeprecationWarningrð   )rñ   r?  r@  rû   Úreplacements      €€r‰   ÚinnerÚ/deprecated_method.<locals>.outer.<locals>.inner�  s+   ø€ ä�MŠM˜#Ô(:ÀqÒIÜ˜4 Ô-¨tÐ>°vÑ>Ð>rˆ   )rƒ   r  rK  rL  )rD  r‘  rû   r�  s     @€r‰   ÚouterÚ deprecated_method.<locals>.outery  sW   ù€ à�|‰|ˆnð Øˆ}˜Jð(ð 	ð �;‰;ÑØˆCŒKä	�Š˜Ó	õ	?ó 
ð	?ð ˆrˆ   r‚   )r�  r“  s   ` r‰   rG   rG   t  s   ø€ õ
ð €Lrˆ   c                   ó@   • \ rS rSrSrS rS rS rS rSS jr	S	 r
S
rg)Ú_WrapNumbersi‹  zFWatches numbers so that they don't overflow and wrap
(reset to zero).
c                 ób   • [         R                  " 5       U l        0 U l        0 U l        0 U l        g r  )Ú	threadingÚLockÚlockrC  Ú	remindersÚreminder_keysr  s    r‰   r  Ú_WrapNumbers.__init__�  s&   € Ü—N’NÓ$ˆŒ	ØˆŒ
ØˆŒØˆÕrˆ   c                 ó"  • X R                   ;  d   eX R                  ;  d   eX R                  ;  d   eXR                   U'   [        R                  " [
        5      U R                  U'   [        R                  " [        5      U R                  U'   g r  )rC  r›  rœ  rî   ÚdefaultdictÚintÚset)rñ   Ú
input_dictr©   s      r‰   Ú	_add_dictÚ_WrapNumbers._add_dict–  st   € ØŸ:™:Ó%Ð%Ð%ØŸ>™>Ó)Ð)Ð)Ø×-Ñ-Ó-Ð-Ð-Ø%�
‰
�4ÑÜ*×6Ò6´sÓ;ˆ�‰�tÑÜ#.×#:Ò#:¼3Ó#?ˆ×Ñ˜4Ò rˆ   c                 ó  • U R                   U   n[        UR                  5       5      [        UR                  5       5      -
  nU H<  nU R                  U   U    H  nU R                  U   U	 M     U R                  U   U	 M>     g)zvIn case the number of keys changed between calls (e.g. a
disk disappears) this removes the entry from self.reminders.
N)rC  r¡  Úkeysrœ  r›  )rñ   r¢  r©   Úold_dictÚ	gone_keysÚgone_keyÚremkeys          r‰   Ú_remove_dead_remindersÚ#_WrapNumbers._remove_dead_remindersž  s{   € ð —:‘:˜dÑ#ˆÜ˜Ÿ™›Ó(¬3¨z¯©Ó/@Ó+AÑAˆ	Û!ˆHØ×,Ñ,¨TÑ2°8Ô<�Ø—N‘N 4Ñ(¨Ò0ñ =à×"Ñ" 4Ñ(¨Ò2ò "rˆ   c                 ó(  • X R                   ;  a  U R                  X5        U$ U R                  X5        U R                   U   n0 nU H¤  nX   n X5   n/ n[	        [        U5      5       Hq  n	Xi   n
Xy   nXY4nX«:  a;  U R                  U   U==   U-  ss'   U R                  U   U   R                  U5        UR                  X R                  U   U   -   5        Ms     [        U5      XE'   M¦     XR                   U'   U$ ! [         a    XdU'    MÉ  f = f)z\Cache dict and sum numbers which overflow and wrap.
Return an updated copy of `input_dict`.
)rC  r£  r«  r=  ÚrangeÚlenr›  rœ  ÚaddÚappendÚtuple)rñ   r¢  r©   r§  Únew_dictrA  Úinput_tupleÚ	old_tupleÚbitsÚiÚinput_valueÚ	old_valuerª  s                r‰   ÚrunÚ_WrapNumbers.run©  s%  € ð —z‘zÓ!à�N‰N˜:Ô,ØÐà×#Ñ# JÔ5à—:‘:˜dÑ#ˆØˆÛˆCØ$™/ˆKðØ$™M�	ð ˆDÜœ3˜{Ó+Ö,�Ø)™n�Ø%™L�	Ø˜�ØÓ*à—N‘N 4Ñ(¨Ó0°IÑ=Ó0Ø×&Ñ& tÑ,¨SÑ1×5Ñ5°fÔ=Ø—‘˜K¯.©.¸Ñ*>¸vÑ*FÑFÖGñ -ô " $›KˆH‹Mñ+ ð. &�
‰
�4ÑØˆøô) ó ð !,˜‘Úð	ús   ÁC?Ã?DÄDNc                 óœ  • U R                      UcO  U R                  R                  5         U R                  R                  5         U R                  R                  5         OTU R                  R                  US5        U R                  R                  US5        U R                  R                  US5        SSS5        g! , (       d  f       g= f)z>Clear the internal cache, optionally only for function 'name'.N)rš  rC  rH  r›  rœ  Úpop)rñ   r©   s     r‰   rI  Ú_WrapNumbers.cache_clearÐ  s†   € à�Y‹YØ‰|Ø—
‘
× Ñ Ô"Ø—‘×$Ñ$Ô&Ø×"Ñ"×(Ñ(Õ*à—
‘
—‘˜t TÔ*Ø—‘×"Ñ" 4¨Ô.Ø×"Ñ"×&Ñ& t¨TÔ2÷ �YŽYús   �B'B=Â=
Cc                 ó–   • U R                      U R                  U R                  U R                  4sSSS5        $ ! , (       d  f       g= f)z5Return internal cache dicts as a tuple of 3 elements.N)rš  rC  r›  rœ  r  s    r‰   Ú
cache_infoÚ_WrapNumbers.cache_infoÜ  s+   € à�Y‹YØ—J‘J §¡°×0BÑ0BÐC÷ �Y�Yús	   �#:º
A)rC  rš  rœ  r›  r  )rƒ   r„   r…   r†   r  r  r£  r«  rº  rI  rÀ  r‡   r‚   rˆ   r‰   r–  r–  ‹  s(   † ñò ò@ò	3ò%ôN
3õDrˆ   r–  c                 ó‚   • [         R                     [         R                  X5      sSSS5        $ ! , (       d  f       g= f)z¹Given an `input_dict` and a function `name`, adjust the numbers
which "wrap" (restart from zero) across different calls by adding
"old value" to "new value" and return an updated dict.
N)Ú_wnrš  rº  )r¢  r©   s     r‰   rP   rP   â  s!   € ô
 
�‹Ü�w‰w�zÓ(÷ 
��ús   ‘0°
>i €  c                 ó    • [        U S[        S9$ )NÚrb)Ú	buffering)ÚopenÚFILE_READ_BUFFER_SIZE)Úfnames    r‰   rR   rR   ý  s   € Ü��tÔ'<Ñ=Ð=rˆ   c                 ó¤   • [        U [        [        [        S9n [        Ul        U$ ! [
         a     U$ [         a    UR                  5         e f = f)zYOpen a file in text mode by using the proper FS encoding and
en/decoding error handlers.
)rÆ  ÚencodingÚerrors)rÇ  rÈ  r1   r2   Ú_CHUNK_SIZErP  r>  Úclose)rÉ  Úfobjs     r‰   rQ   rQ     sa   € ô ØÜ'ÜÜñ	€Dðô 1ˆÔð €Køô ó Øð
 €Kô	 ó Ø�
‰
ŒØðús   š' §
A´Ac                 ó  • U[         L a"  U" U 5       nUR                  5       sSSS5        $  U" U 5       nUR                  5       sSSS5        $ ! , (       d  f       g= f! , (       d  f       g= f! [         a    Us $ f = f)zËRead entire file content and return it as a string. File is
opened in text mode. If specified, `fallback` is the value
returned in case of error, either if the file does not exist or
it can't be read().
N)Ú_DEFAULTÚreadra  )rÉ  ÚfallbackÚ_openÚfs       r‰   rS   rS     sf   € ð ”8ÒÙ�5Œ\˜QØ—6‘6“8÷ ‰\ð	Ù�u” Ø—v‘v“x÷ ‘÷	 �\ú÷ •ûäó 	ØŠOð	ús9   ’A­A1 µA Á	A1 Á
AÁ 
A.Á*A1 Á.A1 Á1B Á?B c                 ó   • [        X[        S9$ )z,Same as above but opens file in binary mode.)rÓ  rÔ  )rS   rR   )rÉ  rÓ  s     r‰   rT   rT   ,  s   € äˆu¬{Ñ;Ð;rˆ   c                 óü   • Sn0 n[        USS 5       H  u  pESUS-   S-  -  X5'   M     [        USS 5       H3  n[        U 5      X6   :¼  d  M  [        U 5      X6   -  nU[	        5       -  s  $    U[        US   U S9-  $ )zÆUsed by various scripts. See: https://code.activestate.com/recipes/578019-bytes-to-human-human-to-bytes-converter/?in=user-4178764.

>>> bytes2human(10000)
'9.8K'
>>> bytes2human(100001221)
'95.4M'
)	ÚBÚKÚMÚGÚTÚPÚEÚZÚYr�   Né
   r   )ÚsymbolrÙ   )Ú	enumerateÚreversedÚabsr4  ÚlocalsÚdict)Únrý   ÚsymbolsÚprefixr·  Úsrâ  rÙ   s           r‰   rU   rU   1  s‘   € ð <€GØ€FÜ˜' ! "˜+Ö&‰ˆØ˜!˜a™% 2™Ñ%ˆ‹	ñ 'ä˜7 1 2˜;Ö'ˆÜˆq‹6�V‘^Õ#Ü˜!“H˜v™~Ñ-ˆEØœF›HÑ$Ò$ñ (ð ”D ¨¡
°!Ñ4Ñ4Ð4rˆ   c                  ó<   • [         R                  S   R                  $ )z+Return updated psutil.PROCFS_PATH constant.rì   )ÚsysÚmodulesÚPROCFS_PATHr‚   rˆ   r‰   Úget_procfs_pathrð  D  s   € ä�;‰;�xÑ ×,Ñ,Ð,rˆ   c                 ó2   • U R                  [        [        S9$ )N)rË  rÌ  )Údecoder1   r2   )rë  s    r‰   rò  rò  I  s   € Ø�8‰8œX¬mˆ8Ð<Ð<rˆ   c                 óÖ   • [         R                  S:X  a  g SS KnU R                  5       (       d   eUR	                  5         UR                  S5      S:”  d   e g! [         a     gf = f)Nr\   Tr   ÚcolorsF)r\  r©   ÚcursesÚisattyÚ	setuptermÚtigetnumr>  )Úfilerõ  s     r‰   rY   rY   R  sd   € ä	‡w�w�$ƒØð	Ûà�{‰{�}‰}Ðˆ}Ø×ÑÔØ�‰˜xÓ(¨1Ó,Ð,Ñ,ð øô ó Ùðús   —AA Á
A(Á'A(Fc                 óT  • [        5       (       d  U $ / n[        SSSSSSSSS	S
9	nSUS'    XA   nUR                  U5        U(       a  UR                  S5        SSR                  U5       SU  S3$ ! [         a-    SU< S[        UR	                  5       5       3n[        U5      Sef = f)z*Return an highlighted version of 'string'.Ú34Ú33Ú30Ú32Ú37Ú36Ú91Ú35Ú93)	ÚblueÚbrownÚdarkgreyÚgreenÚgreyÚ	lightblueÚredÚvioletÚyellowÚ29Núinvalid color z; choose amongst Ú1z[Ú;Úmz[0m)rY   rç  r=  Úlistr¦  rt  r±  rþ   )rë  ÚcolorÚboldÚattrrô  rû   s         r‰   rX   rX   b  sÈ   € ä×!Ñ!ØˆØ€DÜØØØØØØØØØñ
€Fð €Fˆ4�Lð(Ø‘ˆð 	‡K�K�ÔÞØ�‰�CÔØ�3—8‘8˜D“>Ð" ! A 3 gÐ.Ð.øô ó (Ø˜u™iÐ'8¼¸f¿k¹k»mÓ9LÐ8MÐNˆÜ˜‹o 4Ð'ð(ús   «A0 Á07B'c                 ót  • [        5       (       d
  [        XS9  g[        (       a  [        [        XU5      US9  gSSKnSnUR
                  R                  R                  nUR
                  R                  R                  n[        SSSSS9nXXS'    X�   nU(       a  US::  a  US-  nU[        R                  L a  SOSn
UR                   Ul        U" U
5      nU" X±5         [        XS9  U" Xµ5        g! [         a.    S	U< S
[        UR                  5       5      < 3n	[        U	5      Sef = f! U" Xµ5        f = f)z$Print a colorized version of string.©rù  r   Né   r€   é   é   )r  r
  r  r  r  z; choose between é   iôÿÿÿiõÿÿÿ)rY   Úprintr   rX   ÚctypesÚwindllÚKernel32ÚGetStdHandleÚSetConsoleTextAttributerç  r=  r  r¦  rt  rí  ÚstderrÚc_ulongÚrestype)rë  r  r  rù  r  ÚDEFAULT_COLORr   r!  rô  rû   Ú	handle_idÚhandles               r‰   rZ   rZ   ~  s/  € ô  ×!Ñ!ÜˆaÓß	ŠÜŒf�Q˜tÓ$¨4Ó0ãàˆØ—}‘}×-Ñ-×:Ñ:ˆà�M‰M×"Ñ"×:Ñ:ð 	 ô ˜A 1¨A°aÑ8ˆØ$ˆt‰ð	,Ø‘MˆEö �E˜Q“JØ�Q‰JˆEà¤3§:¡:Ò-‘C°3ˆ	Ø%Ÿ~™~ˆÔÙ˜iÓ(ˆÙ Ô.ð	;Ü�!Òá# FÕ:øô! ó 	,à  ¡	ð *Ü˜Ÿ™›Ó'Ñ*ð,ð ô ˜S“/ tÐ+ð	,ûñ  $ FÕ:ús   ÂC2 Ã 	D- Ã28D*Ä-
D7c                 ó,  • [         (       a‰  SSKnUR                  UR                  5       R                  5      u  p#pEn[        U [        5      (       a!  [        U [        5      (       a  SU  3n OSU < 3n [        SU SU SU  3[        R                  S9  gg)z@If PSUTIL_DEBUG env var is set, print a debug message to stderr.r   Nz	ignoring zpsutil-debug [Ú:z]> r  )r	   ÚinspectÚgetframeinfoÚcurrentframeÚf_backÚ
isinstancer>  ra  r  rí  r"  )rû   r*  rÉ  ÚlinenoÚ_Ú_linesÚ_indexs          r‰   rW   rW   ¦  s�   € ç‚|Ûà+2×+?Ñ+?Ø× Ñ Ó"×)Ñ)ó,
Ñ(ˆ�q &ô �cœ9×%Ñ%Ü˜#œw×'Ñ'à! # Ð'‘à! #¡Ð)�ÜØ˜U˜G 1 V H¨C°¨uÐ5¼C¿J¹Jó	
ð rˆ   r  )z%(value).1f%(symbol)s)NF)†r  rî   ÚenumrK  r\  re  r]  rí  r˜  r�  r   r   r   r   r   ÚImportErrorr   ÚboolÚgetenvr	   ÚobjectrÑ  Ú__all__r©   r   r   ÚplatformÚ
startswithr   r   r   r
   r   r   r   r   ÚAIXr'   r(   r$   r)   r+   r/   r#   r-   r.   r%   r&   r,   r*   r0   r   r   r   r   r   r   r   r   r   r   r   r   ÚIntEnumr~   ÚglobalsÚupdateÚ__members__r‹   Úgetfilesystemencodingr1   Úgetfilesystemencodeerrorsr2   rD   r@   r>   r?   rA   rE   r<   rB   rC   r=   rÁ   rÅ   rÉ   rÌ   r4   r9   r:   r;   r6   r7   r8   r5   r3   rÜ   rF   r>  rë   r  r   r'  r-  rL   rI   rZ  rH   rK   rM   rJ   rN   rO   rV   r‡  rG   r–  rP   rÃ  rI  rÀ  rÈ  rR   rQ   rS   rT   rU   rð  rò  ÚstdoutrY   rX   rZ   rW   r‚   rˆ   r‰   Ú<module>rC     sì  ðñ
ó Û Û Û 	Û Û Û 
Û Û Ý "Ý Ý Ý ðÝðÝñ
 �B—I’I˜nÓ-Ó.€Ù‹8€ò€ðL 	�‰�7Ñ€Ø
�'‰'�T‰/€Ø�‰×Ñ Ó(€Ø�‰×Ñ Ó)€Ø€Ø
�,‰,×
!Ñ
!Ð"<Ó
=€Ø
�,‰,×
!Ñ
! )Ó
,€Ø	�‰×	 Ñ	  Ó	*€Ø×"�×"˜F€Ø�‰×ÑÐ 4Ó5€Ø	‡l�l×Ñ˜eÓ$€ð €Ø€Ø Ð Ø€Ø$Ð Ø€Ø€ØÐ Ø€Ø€Ø€Ø€ØÐ Ø€ð !Ð Ø€Ø€Ø€Ø€Ø€Ø€
Ø€Ø€Ø€Ø€Ø€	ô�—‘ô ñ ƒ	× Ñ �×&Ñ&Ô 'ô�$—,‘,ô ñ
 ƒ	× Ñ �×(Ñ(Ô )ð ×$Ò$Ó&€Ø×-Ò-Ó/€ñ 	�7ò %ó 	&€ñ ˜Ò&JÓK€
á
�Yò !<ó =€ñ �{Ò$NÓO€	á	�Hò 4ó 
5€ñ
 	�7ÒJÓK€á�7ò .ó 	/€ñ �jÚJóL€ñ �{ÚBóD€	ñ ØÒNóP€	ñ �jÒ";Ó<€á
ØÒ7ó9€ñ �jÒ"JÓK€á�&˜7 IÐ.Ó/€ñ ØÒGó€	ñ �{ V¨T NÓ3€	á
�YÒ BÓ
C€á�7Ò:Ó;€á�7Ò:Ó;€áØ	ÒEó€ñ �Y ¨GÐ 4Ó
5€á	�H˜{¨MÐ:Ó	;€áØÒAó	€ñ
 �&˜4 ˜.Ó)€ð �h Ð(¨;¸
Ð*CÐDØ�hÐ + Ð/ØˆY˜˜Ð&Ø�hÐ * Ð.ØˆY˜˜Ð%Ø�xÐ  ;°
Ð";Ð<Øˆi˜+ zÐ2Ð3Øˆj˜;¨
Ð3Ð4ñ	€	ð ÑØ×ÑØ�˜k˜]Ð+Ø�˜j˜\Ð*ñô ð
 ÑžuØ×Ñ�f ˜y¨;¸
Ð*CÐDÐEÔFô>ˆIô >ôBA�Eô Aô"L�Mô Lô&A�5ô AôE�Uô Eô.	ò*òZDòN(òð 	ñ	ó 	ð	òò8òô@ò&
ò,÷.TDñ TDòn)ñ ƒn€ØŸ?™?€Ô ØŸ.™.€Ô ð "Ð ò>òð4 !¨	ô ð" "ô <ô
5ò&-ò
=ð 	Ø!Ÿjšjó ó 	ðô/ð: ˜ C§J¢Jô%;óP
øðU ó ØƒHðûð ó ØƒGðús$   Á R
 ÁR Ò
RÒRÒR%Ò$R%