ó
    …~i¦b  ã            
       ó&  • 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  \" \R"                  " S5      5      r\" 5       r/ S	Qr\R,                  S
:H  r\R,                  S:H  r\R2                  R5                  S5      r\R2                  R5                  S5      r\r\R2                  R5                  S5      r\R2                  R5                  S5      r\R2                  R5                  S5      r \=(       d    \=(       d    \ r!\R2                  R5                  S5      r"\R2                  R5                  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r/Sr0S r1S!r2S"r3S#r4S$r5S%r6S&r7S'r8S(r9S)r:S*r;S+r<S,r= " S- S.\R|                  5      r?\@" 5       Rƒ                  \?R„                  5         " S/ S0\R|                  5      rC\@" 5       Rƒ                  \CR„                  5        \Rˆ                  " 5       rE\RŒ                  " 5       rG\
\\/\\/4\
\/\/4\
/\/4\
\/\/4\
/\/4\
\/\\/4\
/\\/4\/\\/4S1.rH\b  \HRƒ                  \/\/4\/\/4S2.5        \b  \"(       d  \HRƒ                  S3\/\\/405         " S4 S5\I5      rJ " S6 S7\J5      rK " S8 S9\K5      rL " S: S;\J5      rM " S< S=\J5      rNSZS> jrOS? rPS@ rQSA rRSB rSSC rTSD rUSE rVSF rWSZSG jrXSH rYSI rZ " SJ SK5      r[SL r\\[" 5       r]\]R¼                  \\l^        \]R¾                  \\l_        SMr`SN raSO rb\\b4SP jrc\4SQ jrdS[SR jreSS rfST rg\P\RÐ                  4SU j5       riS\SW jrjSSV\RÐ                  4SX jrkSY rlg! \ a    Sr GN@f = f! \ a    Sr GNHf = 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)ÚAF_INET)Ú
SOCK_DGRAM)ÚSOCK_STREAM)ÚAF_INET6)ÚAF_UNIXÚPSUTIL_DEBUG)?Ú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   Ú	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éz   é   é   r   © N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__r   r    r!   Ú__static_attributes__rn   ó    ÚK/home/mande/repo/quber/.venv/lib/python3.13/site-packages/psutil/_common.pyrj   rj   z   s   † Ø€OØ€OØÓrt   rj   c                   ó   • \ rS rSrSrSrSrg)ÚBatteryTimeé„   éÿÿÿÿéþÿÿÿrn   N)ro   rp   rq   rr   ÚPOWER_TIME_UNKNOWNÚPOWER_TIME_UNLIMITEDrs   rn   rt   ru   rw   rw   „   s   † ØÐØÓrt   rw   )Ú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)	ÚErroré°   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$ )NÚpidr   )ÚcollectionsÚOrderedDictÚgetattr)ÚselfÚattrsÚinfoÚnameÚvalues        ru   Ú	_infodictÚError._infodict·   sC   € Ü×&Ò&Ó(ˆÛˆDÜ˜D¨Ó-ˆEÞ˜ �¨5°A­:Ø"�T“
ñ ð ˆrt   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         ru   Ú__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__ro   )r‘   r“   r¢   r£   r¤   s        ru   Ú__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)
rn   N)	ro   rp   rq   rr   Ú__doc__r–   r¦   r­   rs   rn   rt   ru   r‰   r‰   °   s   † ñð €Jòò	Oõ>rt   r‰   c                   ó,   • \ rS rSrSrSrSS jrS rSrg)	ÚNoSuchProcesséÑ   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       ru   rµ   ÚNoSuchProcess.__init__Ø   s%   € Ü�‰�tÔØŒØŒ	Ø×4Ð4ˆ�rt   c                 ó`   • U R                   U R                  U R                  U R                  44$ ©N©r¬   r�   r”   r�   ©r‘   s    ru   Ú
__reduce__ÚNoSuchProcess.__reduce__Þ   ó$   € Ø—‘ §¡¨4¯9©9°d·h±hÐ ?Ð@Ð@rt   ©r�   r”   r�   ©NN©ro   rp   rq   rr   r¯   rµ   r¼   rs   rn   rt   ru   r±   r±   Ñ   s   † ñð €Jô5õArt   r±   c                   ó,   • \ rS rSrSrSrSS jrS rSrg)	ÚZombieProcesséâ   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        ru   rµ   ÚZombieProcess.__init__ì   s$   € Ü×Ñ˜t¨$Ô4ØŒ	Ø×>Ð>ˆ�rt   c                 óv   • U R                   U R                  U R                  U R                  U R                  44$ r¹   )r¬   r�   r”   r™   r�   r»   s    ru   r¼   ÚZombieProcess.__reduce__ñ   s*   € Ø—‘ §¡¨4¯9©9°d·i±iÀÇÁÐ JÐKÐKrt   )r�   r™   ©NNNrÁ   rn   rt   ru   rÃ   rÃ   â   s   † ñð €Jô?õ
Lrt   rÃ   c                   ó,   • \ rS rSrSrSrSS jrS rSrg)	ÚAccessDeniedéõ   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       ru   rµ   ÚAccessDenied.__init__ú   s#   € Ü�‰�tÔØŒØŒ	Ø—9˜"ˆ�rt   c                 ó`   • U R                   U R                  U R                  U R                  44$ r¹   rº   r»   s    ru   r¼   ÚAccessDenied.__reduce__   r¾   rt   r¿   rÉ   rÁ   rn   rt   ru   rË   rË   õ   s   † ÙJà€JôõArt   rË   c                   ó,   • \ rS rSrSrSrSS jrS rSrg)	ÚTimeoutExpiredi  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       ru   rµ   ÚTimeoutExpired.__init__  s-   € Ü�‰�tÔØŒØŒØŒ	Ø# G 9¨HÐ5ˆ�rt   c                 ó`   • U R                   U R                  U R                  U R                  44$ r¹   )r¬   r©   r�   r”   r»   s    ru   r¼   ÚTimeoutExpired.__reduce__  s$   € Ø—‘ §¡¨t¯x©x¸¿¹Ð CÐDÐDrt   )r�   r”   r�   r©   rÀ   rÁ   rn   rt   ru   rÒ   rÒ     s   † ñð €Jô6õErt   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)ÚusedÚtotalÚround_Úrets       ru   r8   r8     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Úkeyrß   ÚerrÚcacheÚfuns        €€ru   Ú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)rê   s   €ru   Úcache_clearÚmemoize.<locals>.cache_clearK  s   ø€ à�‰�rt   )Ú	functoolsÚwrapsrð   )rë   rì   rð   rê   s   `  @ru   r5   r5   '  s7   ù€ ô0 ‡_‚_�SÓõ	ó ð	õð €EØ%ÔØ€Nrt   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‘   rß   ré   rë   s      €ru   rì   Ú'memoize_when_activated.<locals>.wrappero  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)rö   ©Úprocs    ru   Úcache_activateÚ.memoize_when_activated.<locals>.cache_activate‰  s   € ð ˆ�rt   c                 ó*   •  U ? g! [         a     gf = f)zDeactivate and clear cache.N)rö   r÷   rú   s    ru   Úcache_deactivateÚ0memoize_when_activated.<locals>.cache_deactivate�  s   € ð	Ø‘øÜó 	Ùð	ús   ‚ …
‘)rò   ró   rü   rÿ   )rë   rì   rü   rÿ   s   `   ru   Úmemoize_when_activatedr  T  s=   ø€ ô6 ‡_‚_�SÓôó ðò2òð ,ÔØ/ÔØ€Nrt   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)ÚpathÚsts     ru   r4   r4   ›  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  r  )r	  s    ru   r7   r7   ª  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   Úbindr  )Úsocks    ru   r9   r9   ¹  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›   rm   )r   ÚfindÚupper)Údatarß   ÚposÚWINDOWS_Únext_posÚ	equal_posrè   r•   s           ru   r6   r6   Å  s‰   € ð €CØ
€Cô €HØ
Ø—9‘9˜T 3Ó'ˆà‹?Øð €Jð —I‘I˜c 3Ó1ˆ	Ø‹?Ø˜9Ð%ˆCØ Q™¨Ð2ˆEæØ—i‘i“k�Ø�‰HØ˜‰lˆñ rt   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.
)r  ÚAddressFamilyÚ
ValueError©Únums    ru   r:   r:   á  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.
)r  Ú
SocketKindr  r  s    ru   r;   r;   ë  s,   € ðÜ× Ò  Ó%Ð%øÜó ØŠ
ðúr  c           	      óœ  • SSK Jn  U[        R                  [        1;   a,  U(       a  UR
                  " U6 nU(       a  UR
                  " 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  UR                  XX#XE5      $ UR                  XX#XEU5      $ )z2Convert a raw connection tuple to a proper ntuple.rm   )Ú_ntuples)rž   r#  r  r   r   Úaddrr   Úgetr   r:   r;   ÚpconnÚsconn)	ÚfdÚfamÚtype_ÚladdrÚraddrÚstatusÚ
status_mapr�   Úntps	            ru   rB   rB   õ  s¨   € å!à
Œv�~‰~œxÐ(Ó(ÞØ—H’H˜eÐ$ˆEÞØ—H’H˜eÐ$ˆEØ”×"Ñ"Ó" s¬w¼Ð.AÓ'AØ—‘ ¬	Ó2‰äˆÜ
˜#Ó
€CÜ˜UÓ#€EØ
�{Ø�y‰y˜ %°Ó>Ð>à�y‰y˜ %°¸sÓCÐCrt   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)Ú	ipaddressÚaddressÚnetmaskÚfamilyr  r   ÚstrÚIPv4NetworkÚbroadcast_addressr   ÚIPv6Network)r$  r3  s     ru   Úbroadcast_addrr;  
  sº   € ó à�<�<˜tŸ|Ÿ|ØØ‡{�{”f—n‘nÓ$ÜØ×!Ñ!Ø—<‘<�.  $§,¡, Ð0¸ð "ð çÑó
ð 	
ð
 ‡{�{”f—o‘oÓ%ÜØ×!Ñ!Ø—<‘<�.  $§,¡, Ð0¸ð "ð çÑó
ð 	
ð &rt   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$ )Nrl   )ÚcategoryÚ
stacklevel)ÚwarningsÚwarnÚDeprecationWarningr�   )r‘   ræ   rç   r�   Úreplacements      €€ru   ÚinnerÚ/deprecated_method.<locals>.outer.<locals>.inner-  s+   ø€ ä�MŠM˜#Ô(:ÀqÒIÜ˜4 Ô-¨tÐ>°vÑ>Ð>rt   )ro   r¯   rò   ró   )rë   rE  r�   rD  s     @€ru   ÚouterÚ deprecated_method.<locals>.outer%  sW   ù€ à�|‰|ˆnð Øˆ}˜Jð(ð 	ð �;‰;ÑØˆCŒKä	�Š˜Ó	õ	?ó 
ð	?ð ˆrt   rn   )rD  rG  s   ` ru   r3   r3      s   ø€ õ
ð €Lrt   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)Ú_WrapNumbersi7  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Úlockrê   Ú	remindersÚreminder_keysr»   s    ru   rµ   Ú_WrapNumbers.__init__<  s&   € Ü—N’NÓ$ˆŒ	ØˆŒ
ØˆŒØˆÕrt   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¹   )rê   rO  rP  rŽ   ÚdefaultdictÚintÚset)r‘   Ú
input_dictr”   s      ru   Ú	_add_dictÚ_WrapNumbers._add_dictB  st   € ØŸ:™:Ó%Ð%Ð%ØŸ>™>Ó)Ð)Ð)Ø×-Ñ-Ó-Ð-Ð-Ø%�
‰
�4ÑÜ*×6Ò6´sÓ;ˆ�‰�tÑÜ#.×#:Ò#:¼3Ó#?ˆ×Ñ˜4Ò rt   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)rê   rU  ÚkeysrP  rO  )r‘   rV  r”   Úold_dictÚ	gone_keysÚgone_keyÚremkeys          ru   Ú_remove_dead_remindersÚ#_WrapNumbers._remove_dead_remindersJ  s{   € ð —:‘:˜dÑ#ˆÜ˜Ÿ™›Ó(¬3¨z¯©Ó/@Ó+AÑAˆ	Û!ˆHØ×,Ñ,¨TÑ2°8Ô<�Ø—N‘N 4Ñ(¨Ò0ñ =à×"Ñ" 4Ñ(¨Ò2ò "rt   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`.
)rê   rW  r_  rä   ÚrangeÚlenrO  rP  ÚaddÚappendÚtuple)r‘   rV  r”   r[  Únew_dictrè   Úinput_tupleÚ	old_tupleÚbitsÚiÚinput_valueÚ	old_valuer^  s                ru   ÚrunÚ_WrapNumbers.runU  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)rN  rê   rï   rO  rP  Úpop)r‘   r”   s     ru   rð   Ú_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)rN  rê   rO  rP  r»   s    ru   Ú
cache_infoÚ_WrapNumbers.cache_infoˆ  s+   € à�Y‹YØ—J‘J §¡°×0BÑ0BÐC÷ �Y�Yús	   �#:º
A)rê   rN  rP  rO  r¹   )ro   rp   rq   rr   r¯   rµ   rW  r_  rn  rð   rt  rs   rn   rt   ru   rJ  rJ  7  s(   † ñò ò@ò	3ò%ôN
3õDrt   rJ  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)Ú_wnrN  rn  )rV  r”   s     ru   r<   r<   Ž  s!   € ô
 
�‹Ü�w‰w�zÓ(÷ 
��ús   ‘0°
>i €  c                 ó    • [        U S[        S9$ )NÚrb)Ú	buffering)ÚopenÚFILE_READ_BUFFER_SIZE)Úfnames    ru   r>   r>   ©  s   € Ü��tÔ'<Ñ=Ð=rt   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.
)rz  ÚencodingÚerrors)r{  r|  r0   r1   Ú_CHUNK_SIZEr÷   rå   Úclose)r}  Úfobjs     ru   r=   r=   ­  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Úreadr  )r}  ÚfallbackÚ_openÚfs       ru   r?   r?   Ç  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ˆ  )r?   r>   )r}  r‡  s     ru   r@   r@   Ø  s   € äˆu¬{Ñ;Ð;rt   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ÚYrm   Né
   r   )Úsymbolr•   )Ú	enumerateÚreversedÚabsrÙ   ÚlocalsÚdict)ÚnrŸ   ÚsymbolsÚprefixrk  Úsr–  r•   s           ru   rA   rA   Ý  s‘   € ð <€GØ€FÜ˜' ! "˜+Ö&‰ˆØ˜!˜a™% 2™Ñ%ˆ‹	ñ 'ä˜7 1 2˜;Ö'ˆÜˆq‹6�V‘^Õ#Ü˜!“H˜v™~Ñ-ˆEØœF›HÑ$Ò$ñ (ð ”D ¨¡
°!Ñ4Ñ4Ð4rt   c                  ó<   • [         R                  S   R                  $ )z+Return updated psutil.PROCFS_PATH constant.r‹   )ÚsysÚmodulesÚPROCFS_PATHrn   rt   ru   Úget_procfs_pathr¤  ð  s   € ä�;‰;�xÑ ×,Ñ,Ð,rt   c                 ó2   • U R                  [        [        S9$ )N)r  r€  )Údecoder0   r1   )rŸ  s    ru   r¦  r¦  õ  s   € Ø�8‰8œX¬mˆ8Ð<Ð<rt   c                 ó”   • [        U S5      (       a  U R                  5       (       d  g U R                  5         g! [         a     gf = f)NÚisattyFT)Úhasattrr¨  Úfilenorå   ©Úfiles    ru   rE   rE   þ  sC   € ä�4˜×"Ñ"¨$¯+©+¯-©-ØðØ�‰Œð øô ó Ùðús   ©: º
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)rE   r›  rä   ÚlistrZ  r  re  r    )rŸ  ÚcolorÚboldÚattrÚcolorsr�   s         ru   rD   rD   	  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é   rl   é   é   )rº  r½  r¸  r¿  rÁ  z; choose between é   iôÿÿÿiõÿÿÿ)rE   Úprintr   rD   ÚctypesÚwindllÚKernel32ÚGetStdHandleÚSetConsoleTextAttributer›  rä   rÅ  rZ  r  r¡  ÚstderrÚc_ulongÚrestype)rŸ  rÆ  rÇ  r¬  rÐ  ÚDEFAULT_COLORrÓ  rÔ  rÉ  r�   Ú	handle_idÚhandles               ru   rF   rF   %  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å   r  rÏ  r¡  rÕ  )r�   rÝ  r}  ÚlinenoÚ_Ú_linesÚ_indexs          ru   rC   rC   M  s�   € ç‚|Ûà+2×+?Ñ+?Ø× Ñ Ó"×)Ñ)ó,
Ñ(ˆ�q &ô �cœ9×%Ñ%Ü˜#œw×'Ñ'à! # Ð'‘à! #¡Ð)�ÜØ˜U˜G 1 V H¨C°¨uÐ5¼C¿J¹Jó	
ð rt   r¹   )z%(value).1f%(symbol)s)NF)mr¯   rŽ   Úenumrò   r  r  r  r¡  rL  rA  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)   r/   r   r   r   r   r   r   r   r   r   r   r   r   ÚIntEnumrj   ÚglobalsÚupdateÚ__members__rw   Úgetfilesystemencodingr0   Úgetfilesystemencodeerrorsr1   r2   rå   r‰   r±   rÃ   rË   rÒ   r8   r5   r  r4   r7   r9   r6   r:   r;   rB   r;  r3   rJ  r<   rw  rð   rt  r|  r>   r=   r?   r@   rA   r¤  r¦  ÚstdoutrE   rD   rF   rC   rn   rt   ru   Ú<module>rö     sP  ðñ
ó Û Û Û 	Û Û Û 
Û Û Ý Ý Ý ðÝðÝñ
 �B—I’I˜nÓ-Ó.€Ù‹8€ò€ðD 	�‰�7Ñ€Ø
�'‰'�T‰/€Ø�‰×Ñ Ó(€Ø�‰×Ñ Ó)€Ø€Ø
�,‰,×
!Ñ
!Ð"<Ó
=€Ø
�,‰,×
!Ñ
! )Ó
,€Ø	�‰×	 Ñ	  Ó	*€Ø×"�×"˜F€Ø�‰×ÑÐ 4Ó5€Ø	‡l�l×Ñ˜eÓ$€ð €Ø€Ø Ð Ø€Ø$Ð Ø€Ø€ØÐ Ø€Ø€Ø€Ø€ØÐ Ø€ð !Ð Ø€Ø€Ø€Ø€Ø€Ø€
Ø€Ø€Ø€Ø€Ø€	ô�—‘ô ñ ƒ	× Ñ �×&Ñ&Ô 'ô�$—,‘,ô ñ
 ƒ	× Ñ �×(Ñ(Ô )ð ×$Ò$Ó&€Ø×-Ò-Ó/€ð �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òôDò*
ò,÷.TDñ TDòn)ñ ƒn€ØŸ?™?€Ô ØŸ.™.€Ô ð "Ð ò>òð4 !¨	ô ð" "ô <ô
5ò&-ò
=ð 	Ø!Ÿj™jó ó 	ðô/ð: ˜ C§J¡Jô%;óP
øðg ó ØƒHðûð ó ØƒGðús#   ºM5 ÁN Í5NÎ NÎNÎN