???<!-- GIF89;a -->
123123123123
.....................................................................................................................................???<!-- GIF89;a -->
123123123123
.....................................................................................................................................3
JZE              V   @   s.  d Z ddlmZ ddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ydd	lmZ W n ek
r   dZY nX ydd
lmZ W n ek
r   dZY nX e	jdk rddlZndZe	jd dkZdddddddddddddddddddd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRgFZejdSkZejdTkZe	jjdUZe	jjdVZe	jjdWZ e	jjdXZ!e	jjdYZ"e pe!pe"Z#e	jjdZpe	jjd[Z$e	jjd\Z%d]Z&d^Z'd_Z(d`Z)daZ*dbZ+dcZ,ddZ-deZ.dfZ/dgZ0dhZ1diZ2djZ3dkZ4dlZ5dmZ6dnZ7doZ8dpZ9dqZ:drZ;dsZ<dtZ=duZ>edkrdvZ?dwZ@dZAn G dxdy dyejBZCeD jEeCjF edkrdZGdZHn G dzd{ d{ejBZIeD jEeIjF e	jJ ZKes
d|ZLn2ye	jM ZLW n$ eNk
r:   er2d}nd|ZLY nX edFd~dddddgZOedBd~dddgZPed@ddddddgZQedAddddgZRedCddddddddgZSedGdddddgZTed>dddddddgZUedDdddddgZVedEddddgZWed?ddddgZXeddddgZYedddddgZZeddddgZ[edddgZ\ed6ddddgZ]ed;ddgZ^ed<dddgZ_ed=dddgZ`ed8dddgZaed9ddddgZbed:ddgZced7ddgZded5ddddddgZeedddgZfeeegeegfeegegfegegfeegegfegegfeegeegfegeegfegeegfd˜Zgedk	r~egjEegegfegegfd̜ edk	regjEdegeegfi [[[[dddNZhddK Ziddф ZjddJ ZkddM ZleiddO ZmddL ZnddP ZoddQ ZpddI ZqG ddڄ dڃZrddR Zser Ztetjues_uetjves_vdS )z9Common objects shared by __init__.py and _ps*.py modules.    )divisionN)defaultdict)
namedtuple)AF_INET)
SOCK_DGRAM)SOCK_STREAM)AF_INET6)AF_UNIX      FREEBSDBSDLINUXNETBSDOPENBSDOSXPOSIXSUNOSWINDOWSENCODINGENCODING_ERRSr   
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pconn	pcputimespctxswpgidspiopionice	popenfilepthreadpuidssconn	scpustatssdiskio	sdiskpart
sdiskusagesnetiosnic	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posixntlinuxdarwinZfreebsdZopenbsdZnetbsdsunossolarisaixZrunningZsleepingz
disk-sleepZstoppedztracing-stopZzombieZdeadz	wake-killZwakingZidlelockedZwaitingZ	suspendedZESTABLISHEDZSYN_SENTZSYN_RECVZ	FIN_WAIT1Z	FIN_WAIT2Z	TIME_WAITZCLOSEZ
CLOSE_WAITZLAST_ACKZLISTENZCLOSINGZNONE      c               @   s   e Zd ZdZdZdZdS )	NicDuplexrY   rZ   r   N)__name__
__module____qualname__r#   r$   r%    r_   r_   /usr/lib64/python3.6/_common.pyr[      s   r[   c               @   s   e Zd ZdZdZdS )BatteryTimerZ   rY   N)r\   r]   r^   POWER_TIME_UNKNOWNPOWER_TIME_UNLIMITEDr_   r_   r_   r`   ra      s   ra   replacesurrogateescapetotalusedZfreeZpercentZsinZsoutZ
read_countZwrite_countZ
read_bytesZwrite_bytesZ	read_timeZ
write_timeZdeviceZ
mountpointZfstypeZoptsZ
bytes_sentZ
bytes_recvZpackets_sentZpackets_recvZerrinZerroutZdropinZdropoutnameZterminalhostZstartedpidfdZfamilytypeZladdrZraddrZstatusZaddressZnetmaskZ	broadcastZptpZisupZduplexZspeedZmtuZctx_switchesZ
interruptsZsoft_interruptsZsyscallsscpufreqZcurrentminmaxshwtempZlabelZhighZcriticalsbatteryZsecsleftZpower_pluggedsfanusersystemchildren_userchildren_systempathidZ	user_timeZsystem_timerealZ	effectiveZsavedZioclassvalueZ	voluntaryZinvoluntaryaddrZipZport)allZtcpZtcp4ZudpZudp4ZinetZinet4Zinet6)Ztcp6Zudp6Zunixc             C   s\   y| | d }W n0 t k
r@   t| ts4t|tr8dnd}Y nX |dk	rTt||S |S dS )z5Calculate percentage usage of 'used' against 'total'.d   g        r   N)ZeroDivisionError
isinstancefloatround)ri   rh   Z_roundretr_   r_   r`   rL     s    "
c                s2   t j fdd} fdd}i  ||_|S )a  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()
    >>>
    c                 sH   | t t|j f}y | S  tk
rB   | | } |< |S X d S )N)	frozensetsorteditemsKeyError)argskwargskeyr   )cachefunr_   r`   wrapper"  s    zmemoize.<locals>.wrapperc                  s    j   dS )zClear cache.N)clearr_   )r   r_   r`   cache_clear+  s    zmemoize.<locals>.cache_clear)	functoolswrapsr   )r   r   r   r_   )r   r   r`   rI     s
    	c                sN   t j fddfdd} fdd}i  d_|_|_S )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()
    >>> foo()
    1
    >>> foo()
    >>> foo()
    >>>
    c                sH   j s| S y  }W n$ tk
r>   |  } < Y nX |S d S )N)cache_activatedr   )selfr   )r   r   r   r_   r`   r   N  s    z'memoize_when_activated.<locals>.wrapperc                  s
   d _ dS )zActivate cache.TN)r   r_   )r   r_   r`   cache_activateY  s    z.memoize_when_activated.<locals>.cache_activatec                  s   d_  j  dS )zDeactivate and clear cache.FN)r   r   r_   )r   r   r_   r`   cache_deactivate]  s    z0memoize_when_activated.<locals>.cache_deactivateF)r   r   r   r   r   )r   r   r   r_   )r   r   r   r`   memoize_when_activated4  s    r   c             C   sT   yt j| }W n4 tk
rB } z|jtjtjfkr4 dS d}~X nX tj|jS dS )zSame as os.path.isfile() but does not swallow EACCES / EPERM
    exceptions, see:
    http://mail.python.org/pipermail/python-dev/2012-June/120787.html
    FN)osstatOSErrorerrnoEPERMEACCESS_ISREGst_mode)ry   sterrr_   r_   r`   rH   i  s    c             C   sL   yt j|  W n4 tk
rB } z|jtjtjfkr4 dS d}~X nX dS dS )zSame as os.path.exists() but does not swallow EACCES / EPERM
    exceptions, see:
    http://mail.python.org/pipermail/python-dev/2012-June/120787.html
    FNT)r   r   r   r   r   r   )ry   r   r_   r_   r`   rK   x  s    c              C   sb   t j stdkrdS y2t j tt j} tj|  | jd W dQ R X dS  t jk
r\   dS X dS )z2Return True if IPv6 is supported on this platform.NF::1r   T)r   r   )socketZhas_ipv6r   r   
contextlibclosingZbinderror)Zsockr_   r_   r`   rM     s    c             C   sz   i }d}t }xh| jd|}||kr$P | jd||}||krj| || }| |d | }|rb|j }|||< |d }qW |S )zCParse a C environ block of environment variables into a dictionary.r    =rZ   )r   findupper)datar   posZWINDOWS_Znext_posZ	equal_posr   r|   r_   r_   r`   rJ     s     c             C   s4   t dkr| S y
tj| S  ttfk
r.   | S X dS )zConvert a numeric socket family value to an IntEnum member.
    If it's not a known member, return the numeric value itself.
    N)enumr   ZAddressFamily
ValueErrorAttributeError)numr_   r_   r`   rN     s    
c             C   s4   t dkr| S y
tj| S  ttfk
r.   | S X dS )zConvert a numeric socket type value to an IntEnum member.
    If it's not a known member, return the numeric value itself.
    N)r   r   ZAddressTyper   r   )r   r_   r_   r`   rO     s    
c                s    fdd}|S )zA decorator which can be used to mark a method as deprecated
    'replcement' is the method name which will be called instead.
    c                s:   d| j f  | jd kr | _tj|  fdd}|S )Nz8%s() is deprecated and will be removed; use %s() insteadc                s    t j tdd t| ||S )NrY   )category
stacklevel)warningswarnFutureWarninggetattr)r   r   r   )msgreplacementr_   r`   inner  s    z/deprecated_method.<locals>.outer.<locals>.inner)r\   __doc__r   r   )r   r   )r   )r   r`   outer  s    
z deprecated_method.<locals>.outerr_   )r   r   r_   )r   r`   rG     s    c               @   sB   e Zd ZdZdd Zdd Zdd Zdd	 ZdddZdd Z	d
S )_WrapNumberszNWatches numbers so that they don't overflow and wrap
    (reset to zero).
    c             C   s    t j | _i | _i | _i | _d S )N)	threadingZLocklockr   	remindersreminder_keys)r   r_   r_   r`   __init__  s    
z_WrapNumbers.__init__c             C   sT   || j kst|| jkst|| jks*t|| j |< tt| j|< tt| j|< d S )N)r   AssertionErrorr   r   r   intset)r   
input_dictrj   r_   r_   r`   	_add_dict  s    
z_WrapNumbers._add_dictc             C   sd   | j | }t|j t|j  }x<|D ]4}x"| j| | D ]}| j| |= q<W | j| |= q(W dS )zIn case the number of keys changed between calls (e.g. a
        disk disappears) this removes the entry from self.reminders.
        N)r   r   keysr   r   )r   r   rj   old_dictZ	gone_keysZgone_keyremkeyr_   r_   r`   _remove_dead_reminders  s    

z#_WrapNumbers._remove_dead_remindersc             C   s  || j kr| j|| |S | j|| | j | }i }x|j D ]}|| }y|| }W n tk
rt   |||< w>Y nX g }xvtt|D ]f}	||	 }
||	 }||	f}|
|k r| j| |  |7  < | j| | j	| |j
|
| j| |   qW t|||< q>W || j |< |S )zkCache dict and sum numbers which overflow and wrap.
        Return an updated copy of `input_dict`
        )r   r   r   r   r   rangelenr   r   addappendtuple)r   r   rj   r   Znew_dictr   Zinput_tupleZ	old_tuplebitsiZinput_valueZ	old_valuer   r_   r_   r`   run  s2    


z_WrapNumbers.runNc          
   C   sh   | j X |dkr0| jj  | jj  | jj  n*| jj|d | jj|d | jj|d W dQ R X dS )z>Clear the internal cache, optionally only for function 'name'.N)r   r   r   r   r   pop)r   rj   r_   r_   r`   r   "  s    

z_WrapNumbers.cache_clearc          
   C   s"   | j  | j| j| jfS Q R X dS )z5Return internal cache dicts as a tuple of 3 elements.N)r   r   r   r   )r   r_   r_   r`   
cache_info.  s    z_WrapNumbers.cache_info)N)
r\   r]   r^   r   r   r   r   r   r   r   r_   r_   r_   r`   r     s   '
r   c          
   C   s   t j t j| |S Q R X dS )zGiven 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   rj   r_   r_   r`   rP   4  s    )r
   r   rb   rc   )N)wr   Z
__future__r   r   r   r   r   r   r   sysr   r   collectionsr   r   r   r   r   r   ImportErrorr	   version_infor   ZPY3__all__rj   r   r   platform
startswithr   r   r   r   r   r   r   ZAIXr*   r+   r'   r,   r.   r2   r&   r0   r1   r(   r)   r/   r-   r   r!   r    r   r   r"   r   r   r   r   r   r   r#   r$   r%   IntEnumr[   globalsupdate__members__rd   re   ra   getfilesystemencodingr   r   getfilesystemencodeerrorsr   rD   r@   r>   r?   rA   rE   r<   rB   rC   r=   ro   rr   rs   rt   r4   r9   r:   r;   r6   r7   r8   r5   r3   r}   rF   rL   rI   r   rH   rK   rM   rJ   rN   rO   rG   r   rP   r   r   r   r_   r_   r_   r`   <module>   sH  


	

	






	





 5W	