a  ze*@sddlZddlZddlZddlZddlZddlZddlZddlZddlZddl Z ddl Z ddl Z ddl m Z ddl mZddl mZddl mZddl mZddl mZdd l mZdd l mZdd l mZdd l mZdd lmZdZe jdkredddZGdddejZGdddejZ Gdddej!ej"Z#Gdddej$Z%GdddZ&Gddde&Z'dd Z(Gd!d"d"e&Z)Gd#d$d$e)Z*Gd%d&d&e)Z+Gd'd(d(e&Z,Gd)d*d*e&Z-Gd+d,d,ej.Z/eZ0e/Z1dS)-N) base_events)base_subprocess) constants) coroutines)events) exceptions)futures)selector_events)tasks) transports)logger)SelectorEventLoopAbstractChildWatcherSafeChildWatcherFastChildWatcherPidfdChildWatcherMultiLoopChildWatcherThreadedChildWatcherDefaultEventLoopPolicywin32z+Signals are not really supported on WindowscCsdSN)signumframerrG/opt/bitninja-python-dojo/embedded/lib/python3.9/asyncio/unix_events.py_sighandler_noop*srcseZdZd(fdd ZfddZddZdd Zd d Zd d ZddZ d)ddZ d*ddZ d+ddZ ddZ d,dddddddZd-ddddddddZd d!Zd"d#Zd$d%Zd&d'ZZS)._UnixSelectorEventLoopNcst|i|_dSr)super__init___signal_handlers)selfselector __class__rrr5s z_UnixSelectorEventLoop.__init__csZtts.t|jD]}||qn(|jrVtjd|dt |d|j dS)NzClosing the loop z@ on interpreter shutdown stage, skipping signal handlers removalsource) rclosesys is_finalizinglistr remove_signal_handlerwarningswarnResourceWarningclearr!sigr#rrr'9s z_UnixSelectorEventLoop.closecCs|D]}|sq||qdSr)_handle_signal)r!datarrrr_process_self_dataGsz)_UnixSelectorEventLoop._process_self_datac GsRt|st|rtd|||zt|j Wn4t t fyv}zt t |WYd}~n d}~00t|||d}||j|<zt|tt|dWnt yL}z|j|=|jsztdWn6t t fy}ztd|WYd}~n d}~00|jtjkr6t d|dnWYd}~n d}~00dS)Nz3coroutines cannot be used with add_signal_handler()Fset_wakeup_fd(-1) failed: %ssig  cannot be caught)rZ iscoroutineZiscoroutinefunction TypeError _check_signal _check_closedsignal set_wakeup_fdZ_csockfileno ValueErrorOSError RuntimeErrorstrrHandler r siginterruptr infoerrnoEINVAL)r!r1callbackargsexchandleZnexcrrradd_signal_handlerNs2  "  "z)_UnixSelectorEventLoop.add_signal_handlercCs8|j|}|durdS|jr*||n ||dSr)r getZ _cancelledr+Z_add_callback_signalsafe)r!r1rKrrrr2{s   z%_UnixSelectorEventLoop._handle_signalc Cs||z |j|=Wnty*YdS0|tjkr>tj}ntj}zt||WnDty}z,|jtj krt d|dnWYd}~n d}~00|jszt dWn4t tfy}zt d|WYd}~n d}~00dS)NFr7r8r5r6T)r:r KeyErrorr<SIGINTdefault_int_handlerSIG_DFLr@rFrGrAr=r?r rE)r!r1handlerrJrrrr+s(     "z,_UnixSelectorEventLoop.remove_signal_handlercCs6t|tstd||tvr2td|dS)Nzsig must be an int, not zinvalid signal number ) isinstanceintr9r< valid_signalsr?r0rrrr:s  z$_UnixSelectorEventLoop._check_signalcCst|||||Sr)_UnixReadPipeTransportr!pipeprotocolwaiterextrarrr_make_read_pipe_transportsz0_UnixSelectorEventLoop._make_read_pipe_transportcCst|||||Sr)_UnixWritePipeTransportrWrrr_make_write_pipe_transportsz1_UnixSelectorEventLoop._make_write_pipe_transportc st} | std|} t||||||||f| |d| } | | |j| z| IdHWn@t t fyYn*t y| | IdHYn0Wdn1s0Y| S)NzRasyncio.get_child_watcher() is not activated, subprocess support is not installed.)rZr[)rget_child_watcher is_activerA create_future_UnixSubprocessTransportadd_child_handlerZget_pid_child_watcher_callback SystemExitKeyboardInterrupt BaseExceptionr'_wait) r!rYrIshellstdinstdoutstderrbufsizer[kwargswatcherrZtransprrr_make_subprocess_transports.    &z1_UnixSelectorEventLoop._make_subprocess_transportcCs||j|dSr)call_soon_threadsafeZ_process_exited)r!pid returncoderprrrrdsz._UnixSelectorEventLoop._child_watcher_callback)sslsockserver_hostnamessl_handshake_timeoutc s |r|dur6tdn |dur&td|dur6td|dur|durNtdt|}ttjtjd}z |d|||IdHWq|Yq0n@|durtd|j tjks|j tjkrtd||d|j |||||d IdH\}}||fS) Nz/you have to pass server_hostname when using sslz+server_hostname is only meaningful with ssl1ssl_handshake_timeout is only meaningful with ssl3path and sock can not be specified at the same timerFzno path and sock were specified.A UNIX Domain Stream Socket was expected, got )rx) r?osfspathsocketAF_UNIX SOCK_STREAM setblockingZ sock_connectr'familytypeZ_create_connection_transport) r!protocol_factorypathrurvrwrx transportrYrrrcreate_unix_connectionsL      z-_UnixSelectorEventLoop.create_unix_connectiondT)rvbacklogrurx start_servingc st|trtd|dur&|s&td|durJ|dur@tdt|}ttjtj}|ddvrz t t |j rt |WnBt yYn2ty}ztd||WYd}~n d}~00z||Wnnty2} z@|| jtjkrd|d} ttj| dnWYd} ~ nd} ~ 0|Yn0n<|dur\td |jtjksx|jtjkrtd ||d t||g||||} |r| tdIdH| S) Nz*ssl argument must be an SSLContext or Noneryrzr)rz2Unable to check or remove stale UNIX socket %r: %rzAddress z is already in usez-path was not specified, and no sock specifiedr{F)rSboolr9r?r|r}r~rrstatS_ISSOCKst_moderemoveFileNotFoundErrorr@r errorbindr'rFZ EADDRINUSErrrrZServerZ_start_servingr sleep) r!rrrvrrurxrerrrJmsgZserverrrrcreate_unix_serversh            z)_UnixSelectorEventLoop.create_unix_serverc sz tjWnty&tdYn0z |}Wn4ttjfyh}ztdWYd}~n d}~00zt|j }Wnt ytdYn0|r|n|}|sdS| } | | d|||||d| IdHS)Nzos.sendfile() is not availableznot a regular filer) r|sendfileAttributeErrorrSendfileNotAvailableErrorr>ioUnsupportedOperationfstatst_sizer@ra_sock_sendfile_native_impl) r!rvfileoffsetcountr>rfsize blocksizefutrrr_sock_sendfile_nativeJs,        z,_UnixSelectorEventLoop._sock_sendfile_nativec Cs,|} |dur|||r4||||dS|rd||}|dkrd||||||dSzt| |||} WnDttfy|dur| ||| | |j || |||||| Yndt yj} z|dur| j t jkrt| turtdt j} | | _| } |dkr>td} |||||| n|||||| WYd} ~ nd} ~ 0ttfyYnty} z$|||||| WYd} ~ nrd} ~ 00| dkr||||||nD|| 7}|| 7}|dur | ||| | |j || |||||| dS)Nrzsocket is not connectedzos.sendfile call failed)r> remove_writer cancelled_sock_sendfile_update_filepos set_resultr|rBlockingIOErrorInterruptedError_sock_add_cancellation_callbackZ add_writerrr@rFZENOTCONNrConnectionError __cause__rr set_exceptionrerfrg)r!rZ registered_fdrvr>rrr total_sentfdsentrJnew_excrrrrrasp                z1_UnixSelectorEventLoop._sock_sendfile_native_implcCs|dkrt||tjdSNr)r|lseekSEEK_SET)r!r>rrrrrrsz4_UnixSelectorEventLoop._sock_sendfile_update_fileposcsfdd}||dS)Ncs&|r"}|dkr"|dS)Nr5)rr>r)rrr!rvrrcbszB_UnixSelectorEventLoop._sock_add_cancellation_callback..cb)add_done_callback)r!rrvrrrrrsz6_UnixSelectorEventLoop._sock_add_cancellation_callback)N)NN)NN)N)N)N)__name__ __module__ __qualname__rr'r4rLr2r+r:r\r^rqrdrrrrrr __classcell__rrr#rr/s@ -       . CFrcseZdZdZdfdd ZddZddZd d Zd d Zd dZ ddZ ddZ ddZ e jfddZdddZddZddZZS) rViNcst|||jd<||_||_||_||_d|_d|_ t |jj }t |st |st |sd|_d|_d|_tdt |jd|j|jj||j|jj|j|j|dur|jtj|ddS)NrXFz)Pipe transport is for pipes/sockets only.)rr_extra_loop_piper>_fileno _protocol_closing_pausedr|rrrS_ISFIFOrS_ISCHRr? set_blocking call_soonconnection_made _add_reader _read_readyr _set_result_unless_cancelled)r!looprXrYrZr[moder#rrrs6      z_UnixReadPipeTransport.__init__cCs|jjg}|jdur |dn|jr0|d|d|jt|jdd}|jdur|durt ||jt j }|r|dq|dn |jdur|dn |dd d |S) Nclosedclosingfd= _selectorpollingidleopen<{}> )r$rrappendrrgetattrrr _test_selector_event selectors EVENT_READformatjoin)r!rEr"rrrr__repr__s$          z_UnixReadPipeTransport.__repr__c Cszt|j|j}WnDttfy*YntyX}z||dWYd}~nfd}~00|rl|j |nJ|j rt d|d|_|j |j|j |jj|j |jddS)Nz"Fatal read error on pipe transport%r was closed by peerT)r|readrmax_sizerrr@ _fatal_errorrZ data_receivedr get_debugr rEr_remove_readerrZ eof_received_call_connection_lost)r!r3rJrrrrs"  z"_UnixReadPipeTransport._read_readycCs>|js |jrdSd|_|j|j|jr:td|dS)NTz%r pauses reading)rrrrrrr debugr!rrr pause_readings   z$_UnixReadPipeTransport.pause_readingcCsB|js |jsdSd|_|j|j|j|jr>td|dS)NFz%r resumes reading) rrrrrrrr rrrrrresume_readings   z%_UnixReadPipeTransport.resume_readingcCs ||_dSrrr!rYrrr set_protocol sz#_UnixReadPipeTransport.set_protocolcCs|jSrrrrrr get_protocolsz#_UnixReadPipeTransport.get_protocolcCs|jSrrrrrr is_closingsz!_UnixReadPipeTransport.is_closingcCs|js|ddSr)r_closerrrrr'sz_UnixReadPipeTransport.closecCs,|jdur(|d|t|d|jdSNzunclosed transport r%rr.r'r!_warnrrr__del__s z_UnixReadPipeTransport.__del__Fatal error on pipe transportcCsZt|tr4|jtjkr4|jrLtjd||ddn|j||||j d| |dSNz%r: %sTexc_info)message exceptionrrY) rSr@rFZEIOrrr rcall_exception_handlerrrr!rJrrrrrs z#_UnixReadPipeTransport._fatal_errorcCs(d|_|j|j|j|j|dSNT)rrrrrrr!rJrrrr-sz_UnixReadPipeTransport._closecCsPz,|j|W|jd|_d|_d|_n|jd|_d|_d|_0dSrrZconnection_lostrr'rrrrrr2s  z,_UnixReadPipeTransport._call_connection_lost)NN)r)rrrrrrrrrrrrr'r,r-rrrrrrrr#rrVs rVcseZdZd%fdd ZddZddZdd Zd d Zd d ZddZ ddZ ddZ ddZ ddZ ddZejfddZddZd&dd Zd'd!d"Zd#d$ZZS)(r]Nc st||||jd<||_||_||_t|_d|_ d|_ t |jj }t|}t|}t|} |s|s| sd|_d|_d|_tdt |jd|j|jj|| s|rtjds|j|jj|j|j|dur|jtj|ddS)NrXrFz?Pipe transport is only for pipes, sockets and character devicesZaix)rrrrr>rr bytearray_buffer _conn_lostrr|rrrrrrr?rrrrr(platform startswithrrr r) r!rrXrYrZr[rZis_charis_fifo is_socketr#rrr?s6        z _UnixWritePipeTransport.__init__cCs|jjg}|jdur |dn|jr0|d|d|jt|jdd}|jdur|durt ||jt j }|r|dn |d| }|d|n |jdur|dn |dd d |S) Nrrrrrrzbufsize=rrr)r$rrrrrrrr rr EVENT_WRITEget_write_buffer_sizerr)r!rEr"rrmrrrrds(          z _UnixWritePipeTransport.__repr__cCs t|jSr)lenrrrrrr |sz-_UnixWritePipeTransport.get_write_buffer_sizecCs6|jrtd||jr*|tn|dS)Nr)rrr rErrBrokenPipeErrorrrrrrs   z#_UnixWritePipeTransport._read_readyc Cs.t|trt|}|sdS|js&|jrN|jtjkr|j |j d7_ |j |j| |dWYd}~nnd}~00|t|jkr|j |j |j||jr|j |j|ddS|dkr|jd|=dS)Nrrr)r|rrrrrrerfrgr/rr_remove_writerrr Z_maybe_resume_protocolrrr)r!rrJrrrrs* "  z$_UnixWritePipeTransport._write_readycCsdSrrrrrr can_write_eofsz%_UnixWritePipeTransport.can_write_eofcCs8|jr dSd|_|js4|j|j|j|jddSr)rrrrrrrrrrr write_eofs z!_UnixWritePipeTransport.write_eofcCs ||_dSrrrrrrrsz$_UnixWritePipeTransport.set_protocolcCs|jSrrrrrrrsz$_UnixWritePipeTransport.get_protocolcCs|jSrrrrrrrsz"_UnixWritePipeTransport.is_closingcCs|jdur|js|dSr)rrrrrrrr'sz_UnixWritePipeTransport.closecCs,|jdur(|d|t|d|jdSrrrrrrrs z_UnixWritePipeTransport.__del__cCs|ddSr)rrrrrabortsz_UnixWritePipeTransport.abortrcCsNt|tr(|jr@tjd||ddn|j||||jd||dSr) rSr@rrr rrrrrrrrrs  z$_UnixWritePipeTransport._fatal_errorcCsFd|_|jr|j|j|j|j|j|j|j|dSr) rrrrrr/rrrrrrrrs  z_UnixWritePipeTransport._closecCsPz,|j|W|jd|_d|_d|_n|jd|_d|_d|_0dSrrrrrrrs  z-_UnixWritePipeTransport._call_connection_lost)NN)r)N)rrrrrr rrrrrrrrr'r,r-rrrrrrrrr#rr]<s"% #   r]c@seZdZddZdS)rbc Ksd}|tjkrt\}}zhtj|f||||d|d||_|durh|t|d|d|j_ d}W|dur||n|dur||0dS)NF)rirjrkrluniversal_newlinesrmwb) buffering) subprocessPIPEr~ socketpairPopen_procr'rdetachrj) r!rIrirjrkrlrmrnZstdin_wrrr_start s,   z_UnixSubprocessTransport._startN)rrrr!rrrrrb srbc@sDeZdZddZddZddZddZd d Zd d Zd dZ dS)rcGs tdSrNotImplementedErrorr!rsrHrIrrrrc9s z&AbstractChildWatcher.add_child_handlercCs tdSrr"r!rsrrrremove_child_handlerDsz)AbstractChildWatcher.remove_child_handlercCs tdSrr"r!rrrr attach_loopLsz AbstractChildWatcher.attach_loopcCs tdSrr"rrrrr'VszAbstractChildWatcher.closecCs tdSrr"rrrrr`]szAbstractChildWatcher.is_activecCs tdSrr"rrrr __enter__fszAbstractChildWatcher.__enter__cCs tdSrr"r!abcrrr__exit__lszAbstractChildWatcher.__exit__N) rrrrcr&r(r'r`r)r.rrrrr"s   rc@sTeZdZddZddZddZddZd d Zd d Zd dZ ddZ ddZ dS)rcCsd|_i|_dSrr _callbacksrrrrr}szPidfdChildWatcher.__init__cCs|Srrrrrrr)szPidfdChildWatcher.__enter__cCsdSrr)r!exc_type exc_value exc_tracebackrrrr.szPidfdChildWatcher.__exit__cCs|jduo|jSrrZ is_runningrrrrr`szPidfdChildWatcher.is_activecCs|ddSrr(rrrrr'szPidfdChildWatcher.closecCsd|jdur$|dur$|jr$tdt|jD] \}}}|j|t|q.|j ||_dSNzCA loop is being detached from a child watcher with pending handlers) rr0r,r-RuntimeWarningvaluesrr|r'r/)r!rpidfd_rrrr(s   zPidfdChildWatcher.attach_loopcGsZ|j|}|dur*|d||f|j|<n,t|}|j||j||||f|j|<dSr)r0rMr|Z pidfd_openrr_do_wait)r!rsrHrIZexistingr9rrrrcs   z#PidfdChildWatcher.add_child_handlercCs~|j|\}}}|j|zt|d\}}Wn"tyTd}td|Yn 0t |}t ||||g|RdS)NrzJchild process pid %d exit status already read: will report returncode 255) r0poprrr|waitpidChildProcessErrorr r_compute_returncoder')r!rsr9rHrIr:statusrtrrrr;s    zPidfdChildWatcher._do_waitcCsFz|j|\}}}Wnty*YdS0|j|t|dS)NFT)r0r=rNrrr|r')r!rsr9r:rrrr&s   z&PidfdChildWatcher.remove_child_handlerN) rrrrr)r.r`r'r(rcr;r&rrrrrqs   rcCs2t|rt| St|r*t|S|SdSr)r| WIFSIGNALEDWTERMSIG WIFEXITED WEXITSTATUS)rArrrr@s     r@c@sDeZdZddZddZddZddZd d Zd d Zd dZ dS)BaseChildWatchercCsd|_i|_dSrr/rrrrrszBaseChildWatcher.__init__cCs|ddSrr5rrrrr'szBaseChildWatcher.closecCs|jduo|jSrr4rrrrr`szBaseChildWatcher.is_activecCs tdSrr")r! expected_pidrrr _do_waitpidszBaseChildWatcher._do_waitpidcCs tdSrr"rrrr_do_waitpid_allsz BaseChildWatcher._do_waitpid_allcCsf|jdur$|dur$|jr$tdt|jdur<|jtj||_|durb|tj|j | dSr6) rr0r,r-r7r+r<SIGCHLDrL _sig_chldrIr'rrrr(s zBaseChildWatcher.attach_loopc Cs^z |WnLttfy$Yn6tyX}z|jd|dWYd}~n d}~00dS)N$Unknown exception in SIGCHLD handler)rr)rIrerfrgrrrrrrrKs zBaseChildWatcher._sig_chldN) rrrrr'r`rHrIr(rKrrrrrFsrFcsLeZdZfddZddZddZddZd d Zd d Zd dZ Z S)rcs|jtdSr)r0r/rr'rr#rrr' s zSafeChildWatcher.closecCs|Srrrrrrr)szSafeChildWatcher.__enter__cCsdSrrr*rrrr.szSafeChildWatcher.__exit__cGs||f|j|<||dSr)r0rHr$rrrrcsz"SafeChildWatcher.add_child_handlercCs(z|j|=WdSty"YdS0dSNTFr0rNr%rrrr&s  z%SafeChildWatcher.remove_child_handlercCst|jD]}||q dSrr*r0rHr%rrrrI$sz SafeChildWatcher._do_waitpid_allcCszt|tj\}}Wn&ty<|}d}td|Yn.0|dkrJdSt|}|jrjt d||z|j |\}}Wn,t y|jrtjd|ddYn0|||g|RdS)Nr<8Unknown child process pid %d, will report returncode 255r$process %s exited with returncode %s'Child watcher got an unexpected pid: %rTr) r|r>WNOHANGr?r rr@rrrr0r=rN)r!rGrsrArtrHrIrrrrH)s0      zSafeChildWatcher._do_waitpid) rrrr'r)r.rcr&rIrHrrrr#rrs rcsPeZdZfddZfddZddZddZd d Zd d Zd dZ Z S)rcs$tt|_i|_d|_dSr)rr threadingLock_lock_zombies_forksrr#rrrVs  zFastChildWatcher.__init__cs"|j|jtdSr)r0r/rWrr'rr#rrr'\s  zFastChildWatcher.closecCs<|j"|jd7_|WdS1s.0YdS)Nr)rVrXrrrrr)aszFastChildWatcher.__enter__cCst|jN|jd8_|js"|js2WddSt|j}|jWdn1sZ0Ytd|dS)Nrz5Caught subprocesses termination from unknown pids: %s)rVrXrWrBr/r r)r!r+r,r-Zcollateral_victimsrrrr.gs  (zFastChildWatcher.__exit__c Gs||jPz|j|}Wn.tyF||f|j|<YWddS0Wdn1s\0Y|||g|RdSr)rVrWr=rNr0)r!rsrHrIrtrrrrcus 2z"FastChildWatcher.add_child_handlercCs(z|j|=WdSty"YdS0dSrMrNr%rrrr&s  z%FastChildWatcher.remove_child_handlerc Csztdtj\}}Wnty*YdS0|dkr8dSt|}|jz|j|\}}WnNty|j r||j |<|j rt d||YWdqd}Yn0|j rt d||Wdn1s0Y|durt d||q|||g|RqdS)Nr5rz,unknown process %s exited with returncode %srQz8Caught subprocess termination from unknown pid: %d -> %d)r|r>rSr?r@rVr0r=rNrXrWrrr rr)r!rsrArtrHrIrrrrIs:      "z FastChildWatcher._do_waitpid_all) rrrrr'r)r.rcr&rIrrrr#rrLs  rc@sdeZdZddZddZddZddZd d Zd d Zd dZ ddZ ddZ ddZ ddZ dS)rcCsi|_d|_dSr)r0_saved_sighandlerrrrrrszMultiLoopChildWatcher.__init__cCs |jduSr)rYrrrrr`szMultiLoopChildWatcher.is_activecCsT|j|jdurdSttj}||jkr:tdnttj|jd|_dS)Nz+SIGCHLD handler was changed by outside code) r0r/rYr< getsignalrJrKr r)r!rRrrrr's     zMultiLoopChildWatcher.closecCs|Srrrrrrr)szMultiLoopChildWatcher.__enter__cCsdSrrr!r1exc_valexc_tbrrrr.szMultiLoopChildWatcher.__exit__cGs&t}|||f|j|<||dSr)rget_running_loopr0rH)r!rsrHrIrrrrrcsz'MultiLoopChildWatcher.add_child_handlercCs(z|j|=WdSty"YdS0dSrMrNr%rrrr&s  z*MultiLoopChildWatcher.remove_child_handlercCsN|jdurdSttj|j|_|jdurrSr?r rr@r0r=rN is_closedrrrr) r!rGrsrArtZ debug_logrrHrIrrrrHs6     z!MultiLoopChildWatcher._do_waitpidc CsHz |Wn6ttfy$Yn tyBtjdddYn0dS)NrLTr)rIrerfrgr r)r!rrrrrrK)s   zMultiLoopChildWatcher._sig_chldN)rrrrr`r'r)r.rcr&r(rIrHrKrrrrrs %rc@sjeZdZddZddZddZddZd d Zd d Ze j fd dZ ddZ ddZ ddZddZdS)rcCstd|_i|_dSr) itertoolsr _pid_counter_threadsrrrrr?s zThreadedChildWatcher.__init__cCsdSrrrrrrr`CszThreadedChildWatcher.is_activecCs |dSr) _join_threadsrrrrr'FszThreadedChildWatcher.closecCs.ddt|jD}|D] }|qdS)NcSsg|]}|r|js|qSr)is_alivedaemon.0threadrrr Ksz6ThreadedChildWatcher._join_threads..)r*rcr8r)r!threadsrirrrrdIsz"ThreadedChildWatcher._join_threadscCs|Srrrrrrr)PszThreadedChildWatcher.__enter__cCsdSrrr[rrrr.SszThreadedChildWatcher.__exit__cCs6ddt|jD}|r2||jdt|ddS)NcSsg|]}|r|qSr)rergrrrrjWsz0ThreadedChildWatcher.__del__..z0 has registered but not finished child processesr%)r*rcr8r$r.)r!rrkrrrrVs  zThreadedChildWatcher.__del__cGsFt}tj|jdt|j||||fdd}||j|<|dS)Nzwaitpid-T)targetnamerIrf) rr^rTThreadrHnextrbrcstart)r!rsrHrIrrirrrrc^s  z&ThreadedChildWatcher.add_child_handlercCsdSrrr%rrrr&gsz)ThreadedChildWatcher.remove_child_handlercCsdSrrr'rrrr(msz ThreadedChildWatcher.attach_loopcCszt|d\}}Wn&ty:|}d}td|Yn 0t|}|rZtd|||rrtd||n|j |||g|R|j |dS)Nrr<rPrQr_) r|r>r?r rr@rrr`rrrcr=)r!rrGrHrIrsrArtrrrrHps$  z ThreadedChildWatcher._do_waitpidN)rrrrr`r'rdr)r.r,r-rrcr&r(rHrrrrr2s  rcsDeZdZeZfddZddZfddZddZd d Z Z S) _UnixDefaultEventLoopPolicycstd|_dSr)rr_watcherrr#rrrs z$_UnixDefaultEventLoopPolicy.__init__cCs\tjB|jdur:t|_ttur:|j|jj Wdn1sN0YdSr) rrVrrrrTcurrent_thread main_threadr(_localrrrrr _init_watchers  z)_UnixDefaultEventLoopPolicy._init_watchercs6t||jdur2ttur2|j|dSr)rset_event_looprrrTrsrtr(r'r#rrrws   z*_UnixDefaultEventLoopPolicy.set_event_loopcCs|jdur||jSr)rrrvrrrrr_s z-_UnixDefaultEventLoopPolicy.get_child_watchercCs|jdur|j||_dSr)rrr')r!rorrrset_child_watchers  z-_UnixDefaultEventLoopPolicy.set_child_watcher) rrrrZ _loop_factoryrrvrwr_rxrrrr#rrqs    rq)2rFrrar|rr<r~rrr(rTr,rrrrrrr r r r logr __all__r ImportErrorrZBaseSelectorEventLooprZ ReadTransportrVZ_FlowControlMixinZWriteTransportr]ZBaseSubprocessTransportrbrrr@rFrrrrZBaseDefaultEventLoopPolicyrqrrrrrrs`             NON5Ji}Y2