grthtrhthjhtyjytjytkergtrhtrjytjerhrfh4:24 29/09/2026a ´i�ã@s¶dZddlZejdkredƒ‚ddlZddlZddlZddlZddlZddl Z ddl Z ddl Z ddl Z ddl mZddl mZddl mZdd l mZdd l mZdd l mZdd l mZdd l mZddlmZdZdZdZdZdZdZdZGdd„dejƒZ Gdd„dejƒZ!Gdd„de!ƒZ"Gdd„de!ƒZ#Gdd„de$ƒZ%Gdd „d ej&ƒZ'Gd!d"„d"ej(ƒZ)Gd#d$„d$ƒZ*Gd%d&„d&ej+ƒZ,e'Z-Gd'd(„d(ej.ƒZ/Gd)d*„d*ej.ƒZ0e0Z1dS)+z.Selector and proactor event loops for Windows.éNÚwin32z win32 onlyé)Úevents)Úbase_subprocess)Úfutures)Ú exceptions)Úproactor_events)Úselector_events)Útasks)Ú windows_utils)Úlogger)ÚSelectorEventLoopÚProactorEventLoopÚ IocpProactorÚDefaultEventLoopPolicyÚWindowsSelectorEventLoopPolicyÚWindowsProactorEventLoopPolicyìÿÿiÉiÔgü©ñÒMbP?gš™™™™™¹?cs`eZdZdZddœ‡fdd„ Z‡fdd„Zdd „Zd‡fd d „ Z‡fd d „Z‡fdd„Z ‡Z S)Ú_OverlappedFuturez†Subclass of Future which represents an overlapped operation. Cancelling it will immediately cancel the overlapped operation. N©Úloopcs&tƒj|d�|jr|jd=||_dS©Nréÿÿÿÿ)ÚsuperÚ__init__Ú_source_tracebackÚ_ov)ÚselfÚovr©Ú __class__©ú./usr/lib64/python3.9/asyncio/windows_events.pyr6sz_OverlappedFuture.__init__csHtƒ ¡}|jdurD|jjr dnd}| dd|›d|jjd›d�¡|S)NÚpendingZ completedrz overlapped=)rÚ _repr_inforr#ÚinsertÚaddress©rÚinfoÚstaterr!r"r&<s    z_OverlappedFuture._repr_infoc Cst|jdurdSz|j ¡WnLtyh}z4d||dœ}|jrH|j|d<|j |¡WYd}~n d}~00d|_dS)Nz&Cancelling an overlapped future failed©ÚmessageÚ exceptionÚfutureÚsource_traceback)rÚcancelÚOSErrorrÚ_loopÚcall_exception_handler)rÚexcÚcontextr!r!r"Ú_cancel_overlappedCs ý "z$_OverlappedFuture._cancel_overlappedcs| ¡tƒj|d�S©N)Úmsg)r7rr1©rr9rr!r"r1Ssz_OverlappedFuture.cancelcstƒ |¡| ¡dS©N)rÚ set_exceptionr7©rr.rr!r"r<Ws z_OverlappedFuture.set_exceptioncstƒ |¡d|_dSr;)rÚ set_resultr©rÚresultrr!r"r>[s z_OverlappedFuture.set_result)N) Ú__name__Ú __module__Ú __qualname__Ú__doc__rr&r7r1r<r>Ú __classcell__r!r!rr"r0s  rcspeZdZdZddœ‡fdd„ Zdd„Z‡fdd „Zd d „Zd d „Zd‡fdd„ Z ‡fdd„Z ‡fdd„Z ‡Z S)Ú_BaseWaitHandleFuturez2Subclass of Future which represents a wait handle.Nrcs8tƒj|d�|jr|jd=||_||_||_d|_dS)NrrT)rrrrÚ_handleÚ _wait_handleÚ _registered)rrÚhandleÚ wait_handlerrr!r"rcsz_BaseWaitHandleFuture.__init__cCst |jd¡tjkS©Nr)Ú_winapiZWaitForSingleObjectrGZ WAIT_OBJECT_0©rr!r!r"Ú_pollqs ÿz_BaseWaitHandleFuture._pollcsdtƒ ¡}| d|jd›�¡|jdurB| ¡r4dnd}| |¡|jdur`| d|jd›�¡|S)Nzhandle=r$ÚsignaledZwaitingz wait_handle=)rr&ÚappendrGrOrHr)rr!r"r&vs    z _BaseWaitHandleFuture._repr_infocCs d|_dSr;)r©rÚfutr!r!r"Ú_unregister_wait_cb€sz)_BaseWaitHandleFuture._unregister_wait_cbc Cs |js dSd|_|j}d|_zt |¡Wnfty�}zN|jtjkr|d||dœ}|jrb|j|d<|j  |¡WYd}~dSWYd}~n d}~00|  d¡dS©NFz$Failed to unregister the wait handler,r0) rIrHÚ _overlappedZUnregisterWaitr2ÚwinerrorÚERROR_IO_PENDINGrr3r4rT©rrKr5r6r!r!r"Ú_unregister_wait…s$ ý  $z&_BaseWaitHandleFuture._unregister_waitcs| ¡tƒj|d�Sr8)rZrr1r:rr!r"r1�sz_BaseWaitHandleFuture.cancelcs| ¡tƒ |¡dSr;)rZrr<r=rr!r"r<¡sz#_BaseWaitHandleFuture.set_exceptioncs| ¡tƒ |¡dSr;)rZrr>r?rr!r"r>¥sz _BaseWaitHandleFuture.set_result)N) rArBrCrDrrOr&rTrZr1r<r>rEr!r!rr"rF`s  rFcsFeZdZdZddœ‡fdd„ Zdd„Z‡fdd „Z‡fd d „Z‡ZS) Ú_WaitCancelFuturezoSubclass of Future which represents a wait for the cancellation of a _WaitHandleFuture using an event. Nrcstƒj||||d�d|_dS)Nr)rrÚ_done_callback)rrÚeventrKrrr!r"r¯sz_WaitCancelFuture.__init__cCs tdƒ‚dS)Nz'_WaitCancelFuture must not be cancelled)Ú RuntimeErrorrNr!r!r"r1´sz_WaitCancelFuture.cancelcs$tƒ |¡|jdur | |¡dSr;)rr>r\r?rr!r"r>·s  z_WaitCancelFuture.set_resultcs$tƒ |¡|jdur | |¡dSr;)rr<r\r=rr!r"r<¼s  z_WaitCancelFuture.set_exception) rArBrCrDrr1r>r<rEr!r!rr"r[ªs  r[cs6eZdZddœ‡fdd„ Z‡fdd„Zdd„Z‡ZS) Ú_WaitHandleFutureNrcs<tƒj||||d�||_d|_t dddd¡|_d|_dS)NrTF)rrÚ _proactorZ_unregister_proactorrVZ CreateEventÚ_eventÚ _event_fut)rrrJrKÚproactorrrr!r"rÃs z_WaitHandleFuture.__init__csF|jdur"t |j¡d|_d|_|j |j¡d|_tƒ |¡dSr;) rarMÚ CloseHandlerbr`Ú _unregisterrrrTrRrr!r"rTÊs   z%_WaitHandleFuture._unregister_wait_cbc Cs®|js dSd|_|j}d|_zt ||j¡Wnfty”}zN|jtjkr€d||dœ}|jrf|j|d<|j   |¡WYd}~dSWYd}~n d}~00|j   |j|j ¡|_dSrU)rIrHrVZUnregisterWaitExrar2rWrXrr3r4r`Ú _wait_cancelrTrbrYr!r!r"rZÜs( ý  $ ÿz"_WaitHandleFuture._unregister_wait)rArBrCrrTrZrEr!r!rr"r_Âs r_c@s<eZdZdZdd„Zdd„Zdd„Zdd „Zd d „ZeZ d S) Ú PipeServerzXClass representing a pipe server. This is much like a bound, listening socket. cCs,||_t ¡|_d|_d|_| d¡|_dS©NT)Ú_addressÚweakrefÚWeakSetÚ_free_instancesÚ_pipeÚ_accept_pipe_futureÚ_server_pipe_handle)rr(r!r!r"rûs  zPipeServer.__init__cCs|j| d¡}|_|S)NF)rmro)rÚtmpr!r!r"Ú_get_unconnected_pipesz PipeServer._get_unconnected_pipec Csr| ¡r dStjtjB}|r&|tjO}t |j|tjtjBtj Btj t j t j tj tj¡}t  |¡}|j |¡|Sr;)ÚclosedrMZPIPE_ACCESS_DUPLEXZFILE_FLAG_OVERLAPPEDZFILE_FLAG_FIRST_PIPE_INSTANCEZCreateNamedPiperiZPIPE_TYPE_MESSAGEZPIPE_READMODE_MESSAGEZ PIPE_WAITZPIPE_UNLIMITED_INSTANCESr ÚBUFSIZEZNMPWAIT_WAIT_FOREVERÚNULLÚ PipeHandlerlÚadd)rÚfirstÚflagsÚhÚpiper!r!r"ro s"   ÿú  zPipeServer._server_pipe_handlecCs |jduSr;)rirNr!r!r"rrszPipeServer.closedcCsR|jdur|j ¡d|_|jdurN|jD] }| ¡q*d|_d|_|j ¡dSr;)rnr1rirlÚclosermÚclear)rrzr!r!r"r{"s     zPipeServer.closeN) rArBrCrDrrqrorrr{Ú__del__r!r!r!r"rgös  rgc@seZdZdZdS)Ú_WindowsSelectorEventLoopz'Windows version of selector event loop.N)rArBrCrDr!r!r!r"r~1sr~csHeZdZdZd ‡fdd„ Z‡fdd„Zdd„Zd d „Zdd d „Z‡Z S)rz2Windows version of proactor event loop using IOCP.Ncs|durtƒ}tƒ |¡dSr;)rrr)rrcrr!r"r8szProactorEventLoop.__init__c sšzV| |j¡tƒ ¡W|jdur–|jj}|j ¡|durP|jsP|j  |¡d|_n>|jdur”|jj}|j ¡|durŽ|jsŽ|j  |¡d|_0dSr;) Ú call_soonZ_loop_self_readingrÚ run_foreverZ_self_reading_futurerr1r#r`re©rrrr!r"r€=s     õ   zProactorEventLoop.run_forevercÃs8|j |¡}|IdH}|ƒ}|j||d|id�}||fS)NÚaddr©Úextra)r`Ú connect_pipeÚ_make_duplex_pipe_transport)rÚprotocol_factoryr(ÚfrzÚprotocolÚtransr!r!r"Úcreate_pipe_connectionPs  ÿz(ProactorEventLoop.create_pipe_connectioncƒs.tˆƒ‰d‡‡‡‡‡fdd„ ‰ˆ ˆ¡ˆgS)Nc s d}zn|rN| ¡}ˆj |¡ˆ ¡r4| ¡WdSˆƒ}ˆj||dˆid�ˆ ¡}|durdWdSˆj |¡}Wn„t yØ}zN|r®|  ¡dkr®ˆ  d||dœ¡| ¡nˆj rÄt jd|dd�WYd}~n8d}~0tjyö|rò| ¡Yn0|ˆ_| ˆ¡dS) Nr‚rƒrzPipe accept failed)r-r.rzzAccept pipe failed on pipe %rT)Úexc_info)r@rlÚdiscardrrr{r†rqr`Ú accept_piper2Úfilenor4Z_debugr ÚwarningrÚCancelledErrorrnÚadd_done_callback)rˆrzr‰r5©r(Úloop_accept_piper‡rZserverr!r"r”[sB  ÿý ÿz>ProactorEventLoop.start_serving_pipe..loop_accept_pipe)N)rgr)rr‡r(r!r“r"Ústart_serving_pipeXs( z$ProactorEventLoop.start_serving_pipec Ës€| ¡} t||||||||f| |dœ| ¤Ž} z| IdHWn@ttfyR‚Yn*tyz|  ¡|  ¡IdH‚Yn0| S)N)Úwaiterr„)Ú create_futureÚ_WindowsSubprocessTransportÚ SystemExitÚKeyboardInterruptÚ BaseExceptionr{Ú_wait) rr‰ÚargsÚshellÚstdinÚstdoutÚstderrÚbufsizer„Úkwargsr–Ztranspr!r!r"Ú_make_subprocess_transport†s" ÿþý z,ProactorEventLoop._make_subprocess_transport)N)N) rArBrCrDrr€r‹r•r¤rEr!r!rr"r5s 0þrc@súeZdZdZd;dd„Zdd„Zdd„Zd d „Zddd„Z d?dd„Z d@dd„Z dAdd„Zdd„Zdd„Zdd „Zd!d"„Zd#d$„ZdBd%d&„Zd'd(„Zd)d*„Zd+d,„Zd-d.„Zd/d0„Zd1d2„ZdCd3d4„Zd5d6„Zd7d8„Zd9d:„Zd S)Drz#Proactor implementation using IOCP.rcCsDd|_g|_t tjtd|¡|_i|_t  ¡|_ g|_ t  ¡|_ dSrL) r3Ú_resultsrVÚCreateIoCompletionPortÚINVALID_HANDLE_VALUErtÚ_iocpÚ_cacherjrkrIÚ _unregisteredÚ_stopped_serving)rZ concurrencyr!r!r"r�s ÿ zIocpProactor.__init__cCs|jdurtdƒ‚dS)NzIocpProactor is closed)r¨r^rNr!r!r"Ú _check_closed§s zIocpProactor._check_closedcCsFdt|jƒdt|jƒg}|jdur0| d¡d|jjd |¡fS)Nzoverlapped#=%sz result#=%srrz<%s %s>ú )Úlenr©r¥r¨rQr rAÚjoin)rr*r!r!r"Ú__repr__«s   ÿ  zIocpProactor.__repr__cCs ||_dSr;)r3)rrr!r!r"Úset_loop²szIocpProactor.set_loopNcCs |js| |¡|j}g|_|Sr;)r¥rO)rÚtimeoutrpr!r!r"Úselectµs  zIocpProactor.selectcCs|j ¡}| |¡|Sr;)r3r—r>)rÚvaluerSr!r!r"Ú_result¼s  zIocpProactor._resultrcCs|| |¡t t¡}z4t|tjƒr6| | ¡||¡n| | ¡|¡Wnt yd|  d¡YS0dd„}|  |||¡S)Nóc SsTz | ¡WStyN}z,|jtjtjfvr8t|jŽ‚n‚WYd}~n d}~00dSr;©Ú getresultr2rWrVZERROR_NETNAME_DELETEDZERROR_OPERATION_ABORTEDÚConnectionResetErrorr�©rŠÚkeyrr5r!r!r"Ú finish_recvÌs ÿ z&IocpProactor.recv..finish_recv) Ú_register_with_iocprVÚ OverlappedrtÚ isinstanceÚsocketZWSARecvr�ZReadFileÚBrokenPipeErrorrµÚ _register©rÚconnÚnbytesrxrr¼r!r!r"ÚrecvÁs     zIocpProactor.recvcCs|| |¡t t¡}z4t|tjƒr6| | ¡||¡n| | ¡|¡Wnt yd|  d¡YS0dd„}|  |||¡S)Nrc SsTz | ¡WStyN}z,|jtjtjfvr8t|jŽ‚n‚WYd}~n d}~00dSr;r·rºr!r!r"r¼ãs ÿ z+IocpProactor.recv_into..finish_recv) r½rVr¾rtr¿rÀZ WSARecvIntor�Z ReadFileIntorÁrµrÂ)rrÄÚbufrxrr¼r!r!r"Ú recv_intoØs     zIocpProactor.recv_intocCs^| |¡t t¡}z| | ¡||¡WntyF| d¡YS0dd„}| |||¡S)N)r¶Nc SsTz | ¡WStyN}z,|jtjtjfvr8t|jŽ‚n‚WYd}~n d}~00dSr;r·rºr!r!r"r¼÷s ÿ z*IocpProactor.recvfrom..finish_recv) r½rVr¾rtZ WSARecvFromr�rÁrµrÂrÃr!r!r"Úrecvfromïs    zIocpProactor.recvfromcCs>| |¡t t¡}| | ¡|||¡dd„}| |||¡S)Nc SsTz | ¡WStyN}z,|jtjtjfvr8t|jŽ‚n‚WYd}~n d}~00dSr;r·rºr!r!r"Ú finish_send s ÿ z(IocpProactor.sendto..finish_send)r½rVr¾rtZ WSASendTor�rÂ)rrÄrÇrxr‚rrÊr!r!r"Úsendtos    zIocpProactor.sendtocCsZ| |¡t t¡}t|tjƒr4| | ¡||¡n| | ¡|¡dd„}|  |||¡S)Nc SsTz | ¡WStyN}z,|jtjtjfvr8t|jŽ‚n‚WYd}~n d}~00dSr;r·rºr!r!r"rÊs ÿ z&IocpProactor.send..finish_send) r½rVr¾rtr¿rÀZWSASendr�Z WriteFilerÂ)rrÄrÇrxrrÊr!r!r"Úsends    zIocpProactor.sendcsv| ˆ¡| ˆj¡‰t t¡}| ˆ ¡ˆ ¡¡‡‡fdd„}dd„}| |ˆ|¡}||ˆƒ}t j ||j d�|S)NcsD| ¡t dˆ ¡¡}ˆ tjtj|¡ˆ  ˆ  ¡¡ˆˆ  ¡fS)Nz@P) r¸ÚstructÚpackr�Ú setsockoptrÀÚ SOL_SOCKETrVZSO_UPDATE_ACCEPT_CONTEXTÚ settimeoutÚ gettimeoutÚ getpeername)rŠr»rrÇ©rÄÚlistenerr!r"Ú finish_accept/sÿz*IocpProactor.accept..finish_acceptcÓs2z|IdHWntjy,| ¡‚Yn0dSr;)rr‘r{)r/rÄr!r!r"Ú accept_coro8s z(IocpProactor.accept..accept_coror) r½Ú_get_accept_socketÚfamilyrVr¾rtZAcceptExr�rÂr Z ensure_futurer3)rrÕrrÖr×r/Úcoror!rÔr"Úaccept)s     zIocpProactor.acceptc sΈjtjkr4t ˆ ¡|¡|j ¡}| d¡|S|  ˆ¡zt  ˆ ¡ˆj ¡WnDt y˜}z,|j tjkrr‚ˆ ¡ddkr„‚WYd}~n d}~00t t¡}| ˆ ¡|¡‡fdd„}| |ˆ|¡S)Nrrcs| ¡ˆ tjtjd¡ˆSrL)r¸rÏrÀrÐrVZSO_UPDATE_CONNECT_CONTEXT©rŠr»r©rÄr!r"Úfinish_connect[s ÿz,IocpProactor.connect..finish_connect)ÚtyperÀÚ SOCK_DGRAMrVZ WSAConnectr�r3r—r>r½Z BindLocalrÙr2rWÚerrnoZ WSAEINVALÚ getsocknamer¾rtZ ConnectExrÂ)rrÄr(rSÚerrÞr!rÝr"ÚconnectEs"       zIocpProactor.connectc Csb| |¡t t¡}|d@}|d?d@}| | ¡t | ¡¡|||dd¡dd„}| |||¡S)Nré rc SsTz | ¡WStyN}z,|jtjtjfvr8t|jŽ‚n‚WYd}~n d}~00dSr;r·rºr!r!r"Úfinish_sendfilens ÿ z.IocpProactor.sendfile..finish_sendfile) r½rVr¾rtZ TransmitFiler�ÚmsvcrtZ get_osfhandlerÂ) rÚsockÚfileÚoffsetÚcountrZ offset_lowZ offset_highrær!r!r"Úsendfileds     ý zIocpProactor.sendfilecsJ| ˆ¡t t¡}| ˆ ¡¡}|r0| ˆ¡S‡fdd„}| |ˆ|¡S)Ncs | ¡ˆSr;)r¸rÜ©rzr!r"Úfinish_accept_pipe„sz4IocpProactor.accept_pipe..finish_accept_pipe)r½rVr¾rtZConnectNamedPiper�rµrÂ)rrzrZ connectedrîr!rír"rŽys    zIocpProactor.accept_pipec Ãstt}zt |¡}WqjWn2tyH}z|jtjkr4‚WYd}~n d}~00t|dtƒ}t  |¡IdHqt   |¡S)Né) ÚCONNECT_PIPE_INIT_DELAYrVZ ConnectPiper2rWZERROR_PIPE_BUSYÚminÚCONNECT_PIPE_MAX_DELAYr Úsleepr ru)rr(ÚdelayrJr5r!r!r"r…Šs  zIocpProactor.connect_pipecCs| ||d¡S)z°Wait for a handle. Return a Future object. The result of the future is True if the wait completed, or False if the wait did not complete (on timeout). F)Ú_wait_for_handle)rrJr²r!r!r"Úwait_for_handle�szIocpProactor.wait_for_handlecCs| |dd¡}||_|Srh)rõr\)rr]Z done_callbackrSr!r!r"rf¥szIocpProactor._wait_cancelcs¢| ¡|durtj}nt |d¡}t t¡}t ||j |j |¡}|r\t ||||j d�‰nt |||||j d�‰ˆjr~ˆjd=‡fdd„}ˆ|d|f|j|j <ˆS)Nç@�@rrcsˆ ¡Sr;)rOrÜ©rˆr!r"Úfinish_wait_for_handleÂsz=IocpProactor._wait_for_handle..finish_wait_for_handler)r¬rMÚINFINITEÚmathÚceilrVr¾rtZRegisterWaitWithQueuer¨r(r[r3r_rr©)rrJr²Z _is_cancelÚmsrrKrùr!rør"rõ¬s$  ÿ ÿ zIocpProactor._wait_for_handlecCs0||jvr,|j |¡t | ¡|jdd¡dSrL)rIrvrVr¦r�r¨©rÚobjr!r!r"r½Îs  z IocpProactor._register_with_iocpc CsŒ| ¡t||jd�}|jr$|jd=|jstz|dd|ƒ}Wn.tyh}z| |¡WYd}~nd}~00| |¡||||f|j|j <|Sr) r¬rr3rr#r2r<r>r©r()rrrÿÚcallbackrˆr´rãr!r!r"rÂØs  zIocpProactor._registercCs| ¡|j |¡dS)a Unregister an overlapped object. Call this method when its future has been cancelled. The event can already be signalled (pending in the proactor event queue). It is also safe if the event is never signalled (because it was cancelled). N)r¬rªrQr�r!r!r"reøszIocpProactor._unregistercCst |¡}| d¡|SrL)rÀrÑ)rrÙÚsr!r!r"rØs  zIocpProactor._get_accept_socketc Cs†|durt}n0|dkr tdƒ‚nt |d¡}|tkr>tdƒ‚t |j|¡}|durX�qZd}|\}}}}z|j |¡\}} } } WnVt yÖ|j   ¡r¶|j   dd||||fdœ¡|dtj fvrÎt |¡Yq>Yn0| |jvrì| ¡q>| ¡s>z| ||| ƒ} Wn<t�y@} z"| | ¡|j |¡WYd} ~ q>d} ~ 00| | ¡|j |¡q>|jD]} |j | jd¡�q`|j ¡dS)Nrznegative timeoutr÷ztimeout too bigz8GetQueuedCompletionStatus() returned an unexpected eventz)err=%s transferred=%s key=%#x address=%#x)r-Ústatus)rúÚ ValueErrorrûrürVZGetQueuedCompletionStatusr¨r©ÚpopÚKeyErrorr3Z get_debugr4r§rMrdr«r1Údoner2r<r¥rQr>rªr(r|)rr²rýrÚerrZ transferredr»r(rˆrrÿrr´rãr!r!r"rOsL     ÿý      "  zIocpProactor._pollcCs|j |¡dSr;)r«rvrþr!r!r"Ú _stop_serving>szIocpProactor._stop_servingc Cs|jdurdSt|j ¡ƒD]Š\}\}}}}| ¡r6qt|tƒrBqz | ¡Wqty¤}z>|j dur�d||dœ}|j r„|j |d<|j   |¡WYd}~qd}~00qd}t   ¡} | |} |jrü| t   ¡krðt d|t   ¡| ¡t   ¡|} | |¡q¼g|_t |j¡d|_dS)NzCancelling a future failedr,r0gð?z,%r is running after closing for %.1f seconds)r¨Úlistr©ÚitemsÚ cancelledr¿r[r1r2r3rr4ÚtimeÚ monotonicr ÚdebugrOr¥rMrd) rr(rSrrÿrr5r6Z msg_updateZ start_timeZnext_msgr!r!r"r{Ds>    ý $  ÿ   zIocpProactor.closecCs | ¡dSr;)r{rNr!r!r"r}sszIocpProactor.__del__)r)N)r)r)r)rN)r)N)N)rArBrCrDrr¬r°r±r³rµrÆrÈrÉrËrÌrÛrärìrŽr…rörfrõr½rÂrerØrOrr{r}r!r!r!r"ršs8        "    7/rc@seZdZdd„ZdS)r˜c  sPtj|f|||||dœ|¤Žˆ_‡fdd„}ˆjj tˆjjƒ¡} |  |¡dS)N)ržrŸr r¡r¢csˆj ¡}ˆ |¡dSr;)Ú_procÚpollZ_process_exited)rˆÚ returncoderNr!r"r~s z4_WindowsSubprocessTransport._start..callback) r ÚPopenrr3r`röÚintrGr’) rr�ržrŸr r¡r¢r£rrˆr!rNr"Ú_startysÿþþ z"_WindowsSubprocessTransport._startN)rArBrCrr!r!r!r"r˜wsr˜c@seZdZeZdS)rN)rArBrCr Ú _loop_factoryr!r!r!r"r‰src@seZdZeZdS)rN)rArBrCrrr!r!r!r"r�sr)2rDÚsysÚplatformÚ ImportErrorrVrMrárûrçrÀrÍr rjÚrrrrrr r r Úlogr Ú__all__rtrúZERROR_CONNECTION_REFUSEDZERROR_CONNECTION_ABORTEDrðròÚFuturerrFr[r_ÚobjectrgZBaseSelectorEventLoopr~ZBaseProactorEventLooprrZBaseSubprocessTransportr˜r ZBaseDefaultEventLoopPolicyrrrr!r!r!r"ÚsX          0J4;e`