
    #h|                     d   g d 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mZ ddlmZ ej$                  Z	 ddlZddlmZmZmZmZ d	Zd
Z ej8                         ZdZdgZ e ed      rdZedgz  Zej2                  dk(  rdZedgz  ZefdZ!d Z"d Z#d Z$d Z% G d d      Z&er G d de&      Z' G d de&      Z( G d de)      Z*d;dZ+ej2                  dk7  rd<dZ,nd<dZ, G d de)      Z-d  Z.ej2                  dk(  r G d! d"e)      Z/d# Z0d$Z1d%Z2d&Z3d'Z4d( Z5d) Z6 G d* d+e)      Z7d, Z8d- Z9 G d. d/e*      Z:d0 Z;ej2                  dk(  r d1 Z<ejz                  ej|                  hZ?d=d2Z@n*ddlAZA e eAd3      reAj                  ZCneAj                  ZCd=d4Z@ej2                  dk(  r3d5 ZEd6 ZF ej                  e(eE       d7 ZHd8 ZI ej                  e'eH       yd9 ZEd: ZF ej                  e(eE       y# e$ r ddl
Z
Y w xY w# e$ r ej2                  dk(  r dZY w xY w)>)ClientListenerPipewait    N   )util)AuthenticationErrorBufferTooShort)	reduction)WAIT_OBJECT_0WAIT_ABANDONED_0WAIT_TIMEOUTINFINITEwin32i    g      4@AF_INETAF_UNIXAF_PIPEc                 P     t        t        dt        j                               | z   S N	monotonicgetattrtime)timeouts    T/var/www/html/sandstorm/venv/lib/python3.12/site-packages/multiprocess/connection.py_init_timeoutr   >   s    .74DII.07::    c                 P     t        t        dt        j                               | kD  S r   r   )ts    r   _check_timeoutr    A   s    .74DII.0144r   c                     | dk(  ry| dk(  r)t        j                  dt        j                               S | dk(  r;t        j                  dt	        j
                         t        t              fz  d      S t        d	      )
z?
    Return an arbitrary free address for the given family
    r   )	localhostr   r   z	listener-)prefixdirr   z\\.\pipe\pyc-%d-%d- zunrecognized family)	tempfilemktempr   get_temp_dirosgetpidnext_mmap_counter
ValueErrorfamilys    r   arbitrary_addressr0   H   sy     	9	kt7H7H7JKK	9	&< "		T--@A'BGIK 	K .//r   c                     t         j                  dk7  r| dk(  rt        d| z        t         j                  dk(  r%| dk(  rt        t        |       st        d| z        yyy)zD
    Checks if the family is valid for the current environment.
    r   r   zFamily %s is not recognized.r   N)sysplatformr-   hasattrsocketr.   s    r   _validate_familyr6   V   sc     ||w6Y#67&@AA
||w6Y#6vv&;fDEE ' $7r   c                     t        |       t        k(  ryt        |       t        u r| j                  d      ryt        |       t        u st	        j
                  |       ryt        d| z        )z]
    Return the types of the address

    This can be 'AF_INET', 'AF_UNIX', or 'AF_PIPE'
    r   z\\r   r   zaddress type of %r unrecognized)typetuplestr
startswithr   is_abstract_socket_namespacer-   )addresss    r   address_typer>   b   s\     G}	g#	'"4"4V"<	g#	!B!B7!K:WDEEr   c                       e Zd ZdZddZd Zd Zd Zd Zd Z	e
d        Ze
d	        Ze
d
        Zd Zd ZddZd ZddZddZd ZddZd Zd Zy)_ConnectionBaseNc                     |j                         }|dk  rt        d      |s|st        d      || _        || _        || _        y )Nr   zinvalid handlez6at least one of `readable` and `writable` must be True)	__index__r-   _handle	_readable	_writable)selfhandlereadablewritables       r   __init__z_ConnectionBase.__init__x   sO    !!#A:-..HJ J!!r   c                 >    | j                   | j                          y y NrC   _closerF   s    r   __del__z_ConnectionBase.__del__   s    <<#KKM $r   c                 2    | j                   t        d      y )Nzhandle is closed)rC   OSErrorrO   s    r   _check_closedz_ConnectionBase._check_closed   s    <<,--  r   c                 2    | j                   st        d      y )Nzconnection is write-only)rD   rR   rO   s    r   _check_readablez_ConnectionBase._check_readable   s    ~~455 r   c                 2    | j                   st        d      y )Nzconnection is read-only)rE   rR   rO   s    r   _check_writablez_ConnectionBase._check_writable   s    ~~344 r   c                 t    | j                   rd| _        t        d      | j                          t        d      )NFzbad message length)rE   rD   closerR   rO   s    r   _bad_message_lengthz#_ConnectionBase._bad_message_length   s5    >>"DN *++ JJL*++r   c                     | j                   du S )z True if the connection is closedNrC   rO   s    r   closedz_ConnectionBase.closed   s     ||t##r   c                     | j                   S )z"True if the connection is readable)rD   rO   s    r   rH   z_ConnectionBase.readable        ~~r   c                     | j                   S )z"True if the connection is writable)rE   rO   s    r   rI   z_ConnectionBase.writable   r_   r   c                 :    | j                          | j                  S )z+File descriptor or handle of the connection)rS   rC   rO   s    r   filenoz_ConnectionBase.fileno   s    ||r   c                 f    | j                   	 | j                          d| _         yy# d| _         w xY w)zClose the connectionNrM   rO   s    r   rY   z_ConnectionBase.close   s1    <<#$#	 $  $s   ' 	0c                 v   | j                          | j                          t        |      }|j                  dkD  r|j	                  d      }|j
                  }|dk  rt        d      ||k  rt        d      |||z
  }n#|dk  rt        d      ||z   |kD  rt        d      | j                  ||||z           y)	z,Send the bytes data from a bytes-like objectr   Br   zoffset is negativezbuffer length < offsetNzsize is negativezbuffer length < offset + size)rS   rW   
memoryviewitemsizecastnbytesr-   _send_bytes)rF   bufoffsetsizemns         r   
send_bytesz_ConnectionBase.send_bytes   s    sO::>sAHHA:122v:566<v:DAX/00d]Q<==6&4-01r   c                     | j                          | j                          | j                  t        j	                  |             y)zSend a (picklable) objectN)rS   rW   rj   _ForkingPicklerdumpsrF   objs     r   sendz_ConnectionBase.send   s3    ..s34r   c                     | j                          | j                          ||dk  rt        d      | j                  |      }|| j	                          |j                         S )z7
        Receive bytes data as a bytes object.
        r   znegative maxlength)rS   rU   r-   _recv_bytesrZ   getvalue)rF   	maxlengthrk   s      r   
recv_bytesz_ConnectionBase.recv_bytes   sa     	 Y]122y);$$&||~r   c                    | j                          | j                          t        |      5 }|j                  }|t	        |      z  }|dk  rt        d      ||kD  rt        d      | j                         }|j                         }|||z   k  rt        |j                               |j                  d       |j                  |||z  ||z   |z          |cddd       S # 1 sw Y   yxY w)zq
        Receive bytes data into a writeable bytes-like object.
        Return the number of bytes read.
        r   znegative offsetzoffset too largeN)rS   rU   rf   rg   lenr-   rx   tellr
   ry   seekreadinto)rF   rk   rl   rn   rg   bytesizeresultrm   s           r   recv_bytes_intoz_ConnectionBase.recv_bytes_into   s    
 	_ 	zzH#a&(Hz !233(" !344%%'F;;=D&4-'$V__%677KKNOOAf0%}9; <!	 	 	s   B+C!!C*c                     | j                          | j                          | j                         }t        j	                  |j                               S )zReceive a (picklable) object)rS   rU   rx   rr   loads	getbuffer)rF   rk   s     r   recvz_ConnectionBase.recv   s?     $$S]]_55r   c                 d    | j                          | j                          | j                  |      S )z/Whether there is any input available to be read)rS   rU   _pollrF   r   s     r   pollz_ConnectionBase.poll   s)    zz'""r   c                     | S rL    rO   s    r   	__enter__z_ConnectionBase.__enter__      r   c                 $    | j                          y rL   rY   rF   exc_type	exc_valueexc_tbs       r   __exit__z_ConnectionBase.__exit__      

r   )TT)r   NrL   )r   )g        )__name__
__module____qualname__rC   rJ   rP   rS   rU   rW   rZ   propertyr]   rH   rI   rb   rY   rp   rv   r{   r   r   r   r   r   r   r   r   r@   r@   u   s    G	".65, $ $    
$2(526#r   r@   c                   L    e Zd ZdZdZej                  fdZd Zd	dZ	d Z
d Zy)
PipeConnectionz
        Connection class based on a Windows named pipe.
        Overlapped I/O is used, so the handles must have been created
        with FILE_FLAG_OVERLAPPED.
        Fc                 (     || j                          y rL   r\   )rF   _CloseHandles     r   rN   zPipeConnection._close  s    &r   c                    t        j                  | j                  |d      \  }}	 |t         j                  k(  r1t        j                  |j
                  gdt              }|t        k(  sJ |j                  d      \  }}|dk(  sJ |t        |      k(  sJ y #  |j                           xY w# |j                  d      \  }}w xY w)NT
overlappedFr   )_winapi	WriteFilerC   ERROR_IO_PENDINGWaitForMultipleObjectseventr   r   cancelGetOverlappedResultr}   )rF   rk   overrwaitresnwrittens         r   rj   zPipeConnection._send_bytes  s    ''cdKGB	='222%<<
E85G"m333
 !# 6 6t <#!8O8s3x'''		 " 6 6t <#s   AB B**B- -CNc                    | j                   rd| _         t        j                         S |dnt        |d      }	 t	        j
                  | j                  |d      \  }}	 |t        j                  k(  r1t	        j                  |j                  gdt              }|t        k(  sJ |j                  d      \  }}|dk(  r5t        j                         }|j                  |j                                |S |t        j                   k(  r| j#                  ||      S 	 t-        d      #  |j                           xY w# |j                  d      \  }}|dk(  r9t        j                         }|j                  |j                                |c cY S |t        j                   k(  r| j#                  ||      c cY S w xY w# t$        $ r)}|j&                  t        j(                  k(  rt*         d }~ww xY w)NF   Tr   r   z.shouldn't get here; expected KeyboardInterrupt)_got_empty_messageioBytesIOminr   ReadFilerC   r   r   r   r   r   r   r   writer   ERROR_MORE_DATA_get_more_datarR   winerrorERROR_BROKEN_PIPEEOFErrorRuntimeError)	rF   maxsizebsizer   r   r   nreadfes	            r   rx   zPipeConnection._recv_bytes(  s   &&*/'zz|#&C4E%..t||U;?AGBD'":"::&-&D&D!#
E8'=G#*m#;;#;
 &(%;%;D%A
s!8 "

AGGBLLN3#$H G$;$;;#'#6#6r7#CC < OPP!		%'%;%;D%A
s!8 "

AGGBLLN3#$H G$;$;;#'#6#6r7#CC < zzW%>%>>&	s\   %F8 AD" #AF8 1$F8 "D55D8 8AF5	F8 'F52F8 4F55F8 8	G*$G%%G*c                     | j                   s%t        j                  | j                        d   dk7  ryt	        t        | g|            S )Nr   T)r   r   PeekNamedPiperC   boolr   r   s     r   r   zPipeConnection._pollH  s>    ''--dll;A>!CdVW-..r   c                    |j                         }t        j                         }|j                  |       t	        j
                  | j                        d   }|dkD  sJ |!t        |      |z   |kD  r| j                          t	        j                  | j                  |d      \  }}|j                  d      \  }}|dk(  sJ ||k(  sJ |j                  |j                                |S )Nr   r   Tr   )r   r   r   r   r   r   rC   r}   rZ   r   r   )rF   r   r   rk   r   leftr   rbytess           r   r   zPipeConnection._get_more_dataN  s    ,,.C

AGGCL((6q9D!8O8"s3x$'@((*&&t||TdKGB006KFC!8O8T>!>GGBLLN#Hr   rL   )r   r   r   __doc__r   r   CloseHandlerN   rj   rx   r   r   r   r   r   r   r     s3    	
 #&-&9&9 	'	(	Q@	/	r   r   c                       e Zd ZdZer(ej                  fdZej                  Z	ej                  Zn'ej                  fdZej                  Z	ej                  Ze	fdZefdZd Zd
dZd	 Zy)
Connectionzo
    Connection class based on an arbitrary file descriptor (Unix only), or
    a socket handle (Windows).
    c                 (     || j                          y rL   r\   rF   rN   s     r   rN   zConnection._closee      4<< r   c                 (     || j                          y rL   r\   r   s     r   rN   zConnection._closej  r   r   c                 b    t        |      }	  || j                  |      }||z  }|dk(  ry ||d  }$Nr   )r}   rC   )rF   rk   r   	remainingro   s        r   _sendzConnection._sendo  sA    H	dllC(ANIA~ab'C r   c                     t        j                         }| j                  }|}|dkD  rK |||      }t        |      }|dk(  r||k(  rt        t        d      |j                  |       ||z  }|dkD  rK|S )Nr   zgot end of file during message)r   r   rC   r}   r   rR   r   )rF   rm   readrk   rG   r   chunkro   s           r   _recvzConnection._recvx  s|    jjl	!m+EE
AAv$"N!"BCCIIeNI !m 
r   c                    t        |      }|dkD  r`t        j                  dd      }t        j                  d|      }| j                  |       | j                  |       | j                  |       y t        j                  d|      }|dkD  r#| j                  |       | j                  |       y | j                  ||z          y )Ni!i!Qi @  )r}   structpackr   )rF   rk   ro   
pre_headerheaders        r   rj   zConnection._send_bytes  s    Hz>T2.J[[q)FJJz"JJvJJsO [[q)F5y 

6"

3 

6C<(r   Nc                    | j                  d      }t        j                  d|j                               \  }|dk(  r7| j                  d      }t        j                  d|j                               \  }|||kD  ry | j                  |      S )N   r   r      r   )r   r   unpackry   )rF   r   rk   rm   s       r   rx   zConnection._recv_bytes  sq    jjmdCLLN32:**Q-CMM$7ED4'>zz$r   c                 2    t        | g|      }t        |      S rL   )r   r   )rF   r   rs      r   r   zConnection._poll  s    $!Awr   rL   )r   r   r   r   r   _multiprocessingclosesocketrN   rv   _writer   _readr)   rY   r   r   r   r   rj   rx   r   r   r   r   r   r   ^  so    
  0 < < 	!!&& %% " 	!%   %  ). r   r   c                   P    e Zd ZdZd
dZd Zd Zed        Zed        Z	d Z
d	 Zy)r   z
    Returns a listener object.

    This is a wrapper for a bound socket which is 'listening' for
    connections, or for a Windows named pipe.
    Nc                    |xs |xr t        |      xs t        }|xs t        |      }t        |       |dk(  rt	        ||      | _        nt        |||      | _        |t        |t              st        d      || _
        y )Nr   authkey should be a byte string)r>   default_familyr0   r6   PipeListener	_listenerSocketListener
isinstancebytes	TypeError_authkey)rF   r=   r/   backlogauthkeys        r   rJ   zListener.__init__  s     #G=W(= #" 	6.v6 Y)'7;DN+GVWEDNz'5'A=>>r   c                     | j                   t        d      | j                   j                         }| j                  r,t	        || j                         t        || j                         |S )zz
        Accept a connection on the bound socket or named pipe of `self`.

        Returns a `Connection` object.
        zlistener is closed)r   rR   acceptr   deliver_challengeanswer_challenge)rF   cs     r   r   zListener.accept  sT     >>!.//NN!!#==a/Q.r   c                 P    | j                   }|d| _         |j                          yy)zA
        Close the bound socket or named pipe of `self`.
        N)r   rY   )rF   listeners     r   rY   zListener.close  s)     >>!DNNN  r   c                 .    | j                   j                  S rL   )r   _addressrO   s    r   r=   zListener.address  s    ~~&&&r   c                 .    | j                   j                  S rL   )r   _last_acceptedrO   s    r   last_acceptedzListener.last_accepted  s    ~~,,,r   c                     | S rL   r   rO   s    r   r   zListener.__enter__  r   r   c                 $    | j                          y rL   r   r   s       r   r   zListener.__exit__  r   r   )NNr   N)r   r   r   r   rJ   r   rY   r   r=   r  r   r   r   r   r   r   r     sH       ' ' - -r   r   c                     |xs t        |       }t        |       |dk(  rt        |       }nt        |       }|t	        |t
              st        d      |t        ||       t        ||       |S )z=
    Returns a connection to the address of a `Listener`
    r   r   )	r>   r6   
PipeClientSocketClientr   r   r   r   r   )r=   r/   r   r   s       r   r   r     sq     ,|G,FVw!:gu#=9::G$!W%Hr   c                 N   | rot        j                         \  }}|j                  d       |j                  d       t        |j	                               }t        |j	                               }||fS t        j                         \  }}t        |d      }t        |d      }||fS )L
        Returns pair of connection objects at either end of a pipe
        TFrI   rH   )r5   
socketpairsetblockingr   detachr)   pipe)duplexs1s2c1c2fd1fd2s          r   r   r     s     &&(FBNN4 NN4 BIIK(BBIIK(B 2v	 wwyHCC%0BC%0B2vr   c           
         t        d      }| r>t        j                  }t        j                  t        j                  z  }t
        t
        }}n(t        j                  }t        j                  }dt
        }}t        j                  ||t        j                  z  t        j                  z  t        j                  t        j                  z  t        j                  z  d||t        j                  t        j                        }t        j                  ||dt        j                  t        j                   t        j                  t        j                        }t        j"                  |t        j                  dd       t        j$                  |d      }|j'                  d      \  }	}
|
dk(  sJ t)        ||       }t)        ||       }||fS )	r  r   r   r   NTr   r	  r
  )r0   r   PIPE_ACCESS_DUPLEXGENERIC_READGENERIC_WRITEBUFSIZEPIPE_ACCESS_INBOUNDCreateNamedPipeFILE_FLAG_OVERLAPPEDFILE_FLAG_FIRST_PIPE_INSTANCEPIPE_TYPE_MESSAGEPIPE_READMODE_MESSAGE	PIPE_WAITNMPWAIT_WAIT_FOREVERNULL
CreateFileOPEN_EXISTINGSetNamedPipeHandleStateConnectNamedPiper   r   )r  r=   openmodeaccessobsizeibsizeh1h2r   _r   r  r  s                r   r   r     si    $I.11H))G,A,AAF$gFF22H**FFF$$X < <<112%%(E(EEvvw;;LL VQg.C.C((',, 	''--tT	 --bTB
//53axxB0B02vr   c                   $    e Zd ZdZddZd Zd Zy)r   zO
    Representation of a socket which is bound to an address and listening
    c                    t        j                   t        t         |            | _        	 t        j                  dk(  r9| j                  j                  t         j                  t         j                  d       | j                  j                  d       | j                  j                  |       | j                  j                  |       | j                  j                         | _        || _        d | _        |dk(  rCt#        j$                  |      s.t#        j&                  | t        j(                  |fd      | _        y d | _        y # t        $ r | j                  j                           w xY w)Nposixr   Tr   r   argsexitpriority)r5   r   _socketr)   name
setsockopt
SOL_SOCKETSO_REUSEADDRr  bindlistengetsocknamer   rR   rY   _familyr   r   r<   Finalizeunlink_unlink)rF   r=   r/   r   s       r   rJ   zSocketListener.__init__I  s   }}WVV%<=	ww'!''(9(9(.(;(;Q@LL$$T*LLg&LL( LL446DM "Yt'H'H'Q==biiwjqDL  DL  	LL 	s   B<E %E)c                     | j                   j                         \  }| _        |j                  d       t	        |j                               S )NT)r5  r   r   r  r   r  rF   ss     r   r   zSocketListener.acceptb  s9    !%!4!4!64	d!((*%%r   c                     	 | j                   j                          | j                  }|d | _         |        y y # | j                  }|d | _         |        w w xY wrL   )r5  rY   r@  )rF   r?  s     r   rY   zSocketListener.closeg  s[    	LL \\F!# " \\F!# "s	   : AN)r   )r   r   r   r   rJ   r   rY   r   r   r   r   r   E  s     2&
r   r   c                     t        |       }t        j                  t        t        |            5 }|j                  d       |j	                  |        t        |j                               cddd       S # 1 sw Y   yxY w)zO
    Return a connection object connected to the socket given by `address`
    TN)r>   r5   r   r  connectr   r  )r=   r/   rC  s      r   r  r  q  s^     '"F	/	1 &Q	d			'!((*%& & &s   ;A44A=c                   6    e Zd ZdZddZddZd Zed        Zy)	r   z0
        Representation of a named pipe
        Nc                    || _         | j                  d      g| _        d | _        t	        j
                  d| j                          t	        j                  | t        j                  | j                  | j                   fd      | _	        y )NT)firstz listener created with address=%rr   r2  )
r   _new_handle_handle_queuer   r   	sub_debugr>  r   _finalize_pipe_listenerrY   )rF   r=   r   s      r   rJ   zPipeListener.__init__  sl    #DM"&"2"2"2">!?D"&DNN=t}}Ml::(($--8qDJr   c           
      ~   t         j                  t         j                  z  }|r|t         j                  z  }t        j                  | j
                  |t         j                  t         j                  z  t         j                  z  t         j                  t        t        t         j                  t         j                        S rL   )r   r  r  r  r  r   r  r   r!  PIPE_UNLIMITED_INSTANCESr  r"  r#  )rF   rI  flagss      r   rJ  zPipeListener._new_handle  s    ..1M1MME>>>**u))G,I,II!!"00'7,,gll r   c                 h   | j                   j                  | j                                | j                   j                  d      }	 t	        j
                  |d      }	 t	        j                  |j                  gdt              }	 |j                  d      \  }}|dk(  sJ t        |      S #  |j                          t	        j                  |        xY w# |j                  d      \  }}|dk(  sJ w xY w# t        $ r2}|j                  t        j                  k7  r Y d }~t        |      S d }~ww xY w)Nr   Tr   F)rK  appendrJ  popr   r'  r   r   r   r   r   r   rR   r   ERROR_NO_DATAr   )rF   rG   r   resr.  r   r   s          r   r   zPipeListener.accept  s   %%d&6&6&89''++A.F$--fF	$!88
E85C  33D9FAs!8O8!&))IIK''/33D9FAs!8O8  ::!6!66 7 "&))!s0   C6 &B+ +(CC C36	D1?D,,D1c                 h    t        j                  d|       | D ]  }t        j                  |        y )Nz closing listener with address=%r)r   rL  r   r   )queuer=   rG   s      r   rM  z$PipeListener._finalize_pipe_listener  s.    NN=wG ,##F+,r   rL   )F)	r   r   r   r   rJ   rJ  r   staticmethodrM  r   r   r   r   r     s*    			
		*. 
	, 
	,r   r   c           	      .   t               }	 	 t        j                  | d       t        j                  | t        j                  t        j
                  z  dt        j                  t        j                  t        j                  t        j                        }	 t        j                  |t        j                  dd       t!        |      S # t        $ rB}|j                  t        j                  t        j                  fvst        |      r Y d}~nd}~ww xY w)zU
        Return a connection object connected to the pipe given by `address`
          r   N)r   r   WaitNamedPiper$  r  r  r#  r%  r  rR   r   ERROR_SEM_TIMEOUTERROR_PIPE_BUSYr    r&  r   r   )r=   r   hr   s       r   r  r    s     O%%gt4&&W11G4I4IIw||W%:%:00',,  	''w,,dD	 a    ::g&?&?&-&=&=&? ?BPQRBS CT s   BC 	D8DD   s   #CHALLENGE#s	   #WELCOME#s	   #FAILURE#c                    dd l }t        |t              s#t        dj	                  t        |                  t        j                  t              }| j                  t        |z          |j                  ||d      j                         }| j                  d      }||k(  r| j                  t               y | j                  t               t!        d      )Nr    Authkey must be bytes, not {0!s}md5   zdigest received was wrong)hmacr   r   r-   formatr8   r)   urandomMESSAGE_LENGTHrp   	CHALLENGEnewdigestr{   WELCOMEFAILUREr	   
connectionr   rd  messagerj  responses         r   r   r     s    gu%.55d7mDF 	Fjj(G)g-.XXgw.557F$$S)H6g&g&!"=>>r   c                    dd l }t        |t              s#t        dj	                  t        |                  | j                  d      }|d t        t               t        k(  s
J d|z         |t        t              d  }|j                  ||d      j                         }| j                  |       | j                  d      }|t        k7  rt        d      y )Nr   ra  rc  zmessage = %rrb  zdigest sent was rejected)rd  r   r   r-   re  r8   r{   r}   rh  ri  rj  rp   rk  r	   rm  s         r   r   r     s    gu%.55d7mDF 	F##C(G?C	N#y0J.72JJ0c)no&GXXgw.557F&!$$S)H7!"<== r   c                       e Zd Zd Zd Zd Zy)ConnectionWrapperc                 n    || _         || _        || _        dD ]  }t        ||      }t	        | ||        y )N)rb   rY   r   r{   rp   )_conn_dumps_loadsr   setattr)rF   connrs   r   attrru   s         r   rJ   zConnectionWrapper.__init__   s>    
K 	%D$%CD$$	%r   c                 \    | j                  |      }| j                  j                  |       y rL   )rv  ru  rp   )rF   ru   rC  s      r   rv   zConnectionWrapper.send  s"    KK

a r   c                 X    | j                   j                         }| j                  |      S rL   )ru  r{   rw  rB  s     r   r   zConnectionWrapper.recv
  s"    JJ!!#{{1~r   N)r   r   r   rJ   rv   r   r   r   r   rs  rs    s    %!r   rs  c                 T    t         j                  | fd d d d      j                  d      S )Nr   utf-8)	xmlrpclibrs   encode)ru   s    r   
_xml_dumpsr    s&    ??C64tQ7>>wGGr   c                 X    t         j                  | j                  d            \  \  }}|S )Nr~  )r  r   decode)rC  ru   methods      r   
_xml_loadsr    s$    __QXXg%67NFSFJr   c                       e Zd Zd Zy)XmlListenerc                 b    dd l ma t        j	                  |       }t        |t        t              S r   )xmlrpc.clientclientr  r   r   rs  r  r  rt   s     r   r   zXmlListener.accept  s"    )ood# j*==r   N)r   r   r   r   r   r   r   r  r    s    >r   r  c                  J    dd l ma t        t	        | i |t
        t              S r   )r  r  r  rs  r   r  r  )r3  kwdss     r   	XmlClientr    s    %VT2T2J
KKr   c                    t        |       }g }|rt        j                  |d|      }|t        k(  r	 |S t        |cxk  rt        t        |      z   k  rn n
|t        z  }nAt        |cxk  rt        t        |      z   k  rn t        d      |t        z  }nt        d      |j                  ||          ||dz   d  }d}|r|S )NFzShould not get herer   r   )	listr   r   r   r   r}   r   r   rR  )handlesr   LreadyrU  s        r   _exhaustive_waitr  '  s     M00E7CCl"  #>A(>>}$!SD+;c!f+DD ##899 ''"#899LL3 #a%&	AG  r   c                 V   |t         }n|dk  rd}nt        |dz  dz         }t        |       } i g }t               }t               }	 | D ]  }	 t	        |d      }	 t        j                   |       dd      \  }}|t
        j                  k(  r!|j                  |       ||j                  <   d|rDt        j                         dd dk\  r*	 |j                  d	      \  }
}|st!        |d
      rd|_        |j%                  |       d} t+        j-                         |      }|D ]  }|j/                           |D ]e  }	 |j                  d      \  }
}|t
        j0                  k7  s,|j                     }|j%                  |       |dk(  sRt!        |d
      s_d|_        g 	 |j3                  fd|D               | D cg c]	  }||v s| c}S # t        $ r"}	d|	j                  }}|t        vr Y d}	~	d}	~	ww xY w# t        $ r}	|	j                  }Y d}	~	>d}	~	ww xY w# t&        $ r ||j)                         <   Y w xY w# t        $ r }	|	j                  }|t        vr Y d}	~	d}	~	ww xY w# |D ]  }|j/                           |D ]  }	 |j                  d      \  }
}n+# t        $ r}	|	j                  }|t        vr Y d}	~	nd}	~	ww xY w|t
        j0                  k7  sX|j                     }|j%                  |       |dk(  s~t!        |d
      sd|_         w xY wc c}w )
        Wait till an object in object_list is ready/readable.

        Returns list of those objects in object_list which are ready/readable.
        Nr   rZ  g      ?rb   T   )   r  Fr   c              3   (   K   | ]	  }|     y wrL   r   ).0r^  waithandle_to_objs     r   	<genexpr>zwait.<locals>.<genexpr>  s     Ia.q1Is   )r   intr  setr   r   r   rR   r   _ready_errorsr   rR  r   r2   getwindowsversionr   r4   r   addAttributeErrorrB   r  keysr   ERROR_OPERATION_ABORTEDupdate)object_listr   ov_listready_objectsready_handlesorb   r   r   r   r.  r  s              @r   r   r   =  sB    ?Gq[G'D.3./G;'6	8  $$$Q1F
"")"2"268Q"EC
 g666r*67)"((3
 #"7"7"9"1"="G1)+)?)?)F3 $'716J+K7; 4%))!,"#=$@ -->-C-C-EwOM  		  833D9FAs
 '999)"((3A!%%a(ax #1&:;37A08  	I=II&=a!}*<==_ # ""&

Cm3! 4"  $+ 1&'jj1- & 978%akkm49N  **C-/ 0  		  833D9FAs **C-/ 0 '999)"((3A!%%a(ax #1&:;37A08" >s   I4 H%G:AI4 HAI4  I	L&L&	G?G:4I4 :G??I4 	H"HI4 H""I4 %II4 II4 	I1I,,I14L#J'&L#'	K	0K
	L#
K	L#&%L#L#
L#PollSelectorc                    t               5 }| D ]"  }|j                  |t        j                         $ |' t	        t
        dt
        j
                               |z   }	 |j                  |      }|r(|D cg c]  \  }}|j                   c}}cddd       S |7 t	        t
        dt
        j
                               z
  }|dk  r|cddd       S uc c}}w # 1 sw Y   yxY w)r  Nr   r   )_WaitSelectorregister	selectors
EVENT_READr   r   selectfileobj)r  r   selectorru   deadliner  keyeventss           r   r   r     s     _ 	)" =!!#y';';<= ">74DII>@7J 0=BCMS&CKKC	) 	) *"*-PWT+dii-P-R"R"Q;#(	) 	)  D	) 	)s$   A*C5CC/CCC!c                     | j                         }t        j                  |t        j                  t        j                        5 }ddlm} |j                  |      }t        || j                  | j                  ffcd d d        S # 1 sw Y   y xY w)Nr   )resource_sharer)rb   r5   fromfdr   SOCK_STREAMr%   r  	DupSocketrebuild_connectionrH   rI   )ry  rG   rC  r  dss        r   reduce_connectionr    sl    ]]66>>63E3EF 	J!) **1-B%DMM4=='II	J 	J 	Js   6BBc                 X    | j                         }t        |j                         ||      S rL   r  r   )r  rH   rI   socks       r   r  r    s"    yy{$++-8<<r   c                    | j                   rt        j                  nd| j                  rt        j                  ndz  }t        j                  | j                         |      }t        || j                   | j                  ffS r   )	rH   r   FILE_GENERIC_READrI   FILE_GENERIC_WRITEr   	DupHandlerb   rebuild_pipe_connection)ry  r)  dhs      r   reduce_pipe_connectionr    s^    047,,1157--AG  7&T]]DMM(JJJr   c                 <    | j                         }t        |||      S rL   )r  r   )r  rH   rI   rG   s       r   r  r    s    fh99r   c                     t        j                  | j                               }t        || j                  | j
                  ffS rL   )r   DupFdrb   r  rH   rI   )ry  dfs     r   r  r    s0    __T[[]+!Bt}}#EEEr   c                 <    | j                         }t        |||      S rL   r  )r  rH   rI   fds       r   r  r    s    YY["h11r   )NN)TrL   )J__all__r   r)   r2   r5   r   r   r&   	itertools_multiprocessr   ImportErrorr%   r   r	   r
   contextr   ForkingPicklerrr   r   r   r   r   r   r3   r  CONNECTION_TIMEOUTcountr,   r   familiesr4   r   r    r0   r6   r>   r@   r   r   objectr   r   r   r   r  r   r  rg  rh  rk  rl  r   r   rs  r  r  r  r  r  r   ERROR_NETNAME_DELETEDr  r   r  r  r  SelectSelectorr  r  r  r  r  r   r   r   <module>r     s   3 	 	 
     ,  1 **OO  	!;
69NH<<7NH - ;50
FF&T Tn M M`M Mh:v :z* <<7&&X)V )X& <<76,v 6,p!> 	

?>$ H>( >L <<7( ..0M0MNML>` 
 y.)!..!00)6 <<7J= Iz#45K
: I~'=>F2 Iz#45q    
||wGs#   H H 	HHH/.H/