+
    TŎii                        ^ RI t ^ RIt ^ RIt^ RIt^ RIt^ RIHt ^ RIHt ^ RI	H
t ^ RIHt ^ RIHt ^ RIHtHtHtHtHtHtHtHtHtHtHt ^ RIt^ RIt^ RIHt ^R	I H!t!H"t" ^R
I#H$t$ ^RI%H&t& ^RIH't'H(t(H)t)H*t*H+t+ ^RI,H-t- ^RI.H/t/H0t0 ^RI1H2t2H3t3 ^RI4H5t5 ^RI6H7t7H8t8 ^RI9H:t: ^RI;H<t< ^RI=H>t>H?t? R$t@]'       d   ^ RIAtA^RIBHCtC ]]*]3R]"R.]<3,          tD]]<.]]?,          3,          tE]*! RR])/ / RRRR]P                  ! R4      4
      tG ! R R]H4      tI ! R R]H4      tJ]J! 4       tK]P                  ! RRRR 7       ! R! R"4      4       tM]]]*]M3,          ]33,          tN ! R# R]$4      tOR# )%    N)deque)suppress)escape)
HTTPStatus)Logger)TYPE_CHECKINGAny	AwaitableCallableDequeOptionalSequenceTupleTypeUnioncast)under_cached_property)AbstractAccessLoggerAbstractStreamWriter)BaseProtocol)ceil_timeout)HttpProcessingErrorHttpRequestParserHttpVersion10RawRequestMessageStreamWriter)BadHttpMethod)access_loggerserver_logger)EMPTY_PAYLOADStreamReader)tcp_keepalive)HTTPExceptionHTTPInternalServerError)AccessLogger)BaseRequest)ResponseStreamResponseRequestHandlerRequestPayloadErrorPayloadAccessError)Serverzasyncio.Task[None]UNKNOWN/TFc                       ] tR t^StRtRtR# )r*   zPayload parsing error. N__name__
__module____qualname____firstlineno____doc____static_attributes__r0       c/Users/ahmad/.openclaw/workspace/scripts/.venv/lib/python3.14/site-packages/aiohttp/web_protocol.pyr*   r*   S   s     r8   c                       ] tR t^WtRtRtR# )r+   z-Payload was accessed after response was sent.r0   Nr1   r0   r8   r9   r+   r+   W   s    7r8   )auto_attribsfrozenslotsc                   ,   a  ] tR t^^t o V 3R ltRtV tR# )_ErrInfoc                >   < V ^8  d   Qh/ S[ ;R&   S[;R&   S[;R&   # )   statusexcmessage)intBaseExceptionstr)format__classdict__s   "r9   __annotate___ErrInfo.__annotate__^   s(     K  
  L	 r8   r0   N)r2   r3   r4   r5   __annotate_func__r7   __classdictcell__)rI   s   @r9   r?   r?   ^   s      r8   r?   c                   T  a a ] tR t^ht oRtREtRRRRR]R	]R]R
]P                  RRRRRRRRRRRRFRRR^/V3R lV 3R lllt
V3R lR lt]V3R lR l4       t]V3R lR l4       t]V3R lR l4       tRGV3R  lR! lltV3R" lV 3R# lltV3R$ lV 3R% lltV3R& lR' ltV3R( lR) ltV3R* lR+ ltV3R, lR- ltV3R. lR/ ltV3R0 lR1 ltV3R2 lR3 ltV3R4 lR5 ltV3R6 lR7 ltV3R8 lR9 ltV3R: lR; ltV3R< lR= ltV3R> lR? lt RHV3R@ lRA llt!V3RB lRC lt"RDt#Vt$V ;t%# )Ir)   a  HTTP protocol implementation.

RequestHandler handles incoming HTTP request. It reads request line,
request headers and request payload and calls handle_request() method.
By default it always returns with 404 response.

RequestHandler handles errors in incoming request, like bad
status line, bad headers or incomplete payload. If any error occurs,
connection gets closed.

keepalive_timeout -- number of seconds before closing
                     keep-alive connection

tcp_keepalive -- TCP keep-alive is on, default is on

debug -- enable debug mode

logger -- custom logger object

access_log_class -- custom class for access_logger

access_log -- custom logging object

access_log_format -- access log format string

loop -- Optional event loop

max_line_size -- Optional maximum header line size

max_field_size -- Optional maximum header field size

max_headers -- Optional maximum header size

timeout_ceil_threshold -- Optional value to specify
                          threshold to ceil() timeout
                          values

loggerdebug
access_logkeepalive_timeouti.  r"   Taccess_log_classaccess_log_formatFmax_line_sizei  max_headersi   max_field_sizelingering_timeg      $@read_bufsizeauto_decompresstimeout_ceil_thresholdc                    < V ^8  d   QhRRRS[ P                  RS[RS[RS[RS[S[,          RS[R	S[R
S[RS[RS[RS[RS[RS[RS[RS[/# )rA   managerr,   looprR   r"   rO   rS   rQ   rT   rP   rU   rV   rW   rX   rY   rZ   r[   )	asyncioAbstractEventLoopfloatboolr   r   r   rG   rE   )rH   rI   s   "r9   rJ   RequestHandler.__annotate__   s     O) O)O) ''	O) !O) O) O) 34O) O) O) O) O) O) O)  !O)" #O)$ %O)& !&'O)r8   c                 < \         SV `  V4       ^ V n        RV n        RV n        Wn        VP                  V n        VP                  V n	        W@n
        RV n        RV n        W0n        \        V4      V n        \!        4       V n        RV n        RV n        RV n        RV n        RV n        RV n        \1        V VVV
VV\2        VR7      V n        ^V n         \        V4      V n        WPn        Wn        Wpn         V'       d*   V! Wx4      V n!        V PB                  PD                  V n#        MRV n!        RV n#        RV n$        RV n%        RV n&        / V n'        R#   \8        \:        3 d     Li ; i)r   FNg        r8   )rU   rW   rV   payload_exceptionrZ   )(super__init___request_count
_keepalive_current_request_managerrequest_handler_request_handlerrequest_factory_request_factory_tcp_keepalive_next_keepalive_close_time_keepalive_handle_keepalive_timeoutra   _lingering_timer   	_messages_message_tail_waiter_handler_waiter_task_handler_upgrade_payload_parserr   r*   _request_parser_timeout_ceil_threshold	TypeError
ValueErrorrO   rP   rQ   r   enabled_logging_enabled_close_force_close_request_in_progress_cache)selfr]   r^   rR   r"   rO   rS   rQ   rT   rP   rU   rV   rW   rX   rY   rZ   r[   	__class__s   &&$$$$$$$$$$$$$$$r9   rg   RequestHandler.__init__   sp   * 	  7;*1;B;R;R;B;R;R+*-';?"3$^4*/' 7;?C;?$(<M')#1+	=
 /0$	+01G+HD( 
$AQBD %)$6$6$>$>D!!%D$)D!!$)!&(% :& 		s   E E('E(c                    < V ^8  d   QhRS[ /# rA   return)rG   )rH   rI   s   "r9   rJ   rc     s     
 
# 
r8   c                v    R P                  V P                  P                  V P                  e   R4      # R4      # )z<{} {}>	connecteddisconnected)rH   r   r2   	transportr   s   &r9   __repr__RequestHandler.__repr__  s;    NN##>>5K
 	
;I
 	
r8   c                .   < V ^8  d   QhRS[ R,          /# )rA   r   zssl.SSLContext)r   )rH   rI   s   "r9   rJ   rc   	  s     
 
X&67 
r8   c                X    V P                   f   R# V P                   P                  R4      # )zReturn SSLContext if available.N
sslcontextr   get_extra_infor   s   &r9   ssl_contextRequestHandler.ssl_context  s1    
 ~~% 	
 ..|<	
r8   c          	      ~   < V ^8  d   QhRS[ S[S[S[S[S[S[S[3,          S[S[S[3,          3,          ,          /# r   )r   r   rG   r   rE   )rH   rI   s   "r9   rJ   rc     s<     
 
	%U3S##56c3hGH	I
r8   c                X    V P                   f   R# V P                   P                  R4      # )zReturn peername if available.Npeernamer   r   s   &r9   r   RequestHandler.peername  s1     ~~% 	
 ..z:	
r8   c                    < V ^8  d   QhRS[ /# r   )ra   )rH   rI   s   "r9   rJ   rc     s     ' '5 'r8   c                    V P                   # N)rs   r   s   &r9   rR    RequestHandler.keepalive_timeout  s    &&&r8   c                4   < V ^8  d   QhRS[ S[,          RR/# )rA   timeoutr   N)r   ra   )rH   rI   s   "r9   rJ   rc      s     0 0huo 0 0r8   c                  "   RV n         V P                  e   V P                  P                  4        V P                  '       da   V P                  P                  4       V n         \        V4      ;_uu_4       GRj  xL
  V P                  G Rj  xL
  RRR4      GRj  xL
   \        V4      ;_uu_4       GRj  xL
  V P                  e/   V P                  P!                  \        P                  ! 4       4       V P"                  eI   V P"                  P%                  4       '       g)   \        P&                  ! V P"                  4      G Rj  xL
  RRR4      GRj  xL
  T P"                  e   T P"                  P                  4        T P)                  4        R#  EL" EL EL  + GRj  xL 
 '       g   i     EL; i  \        P                  \        P                  3 dU    RT n        \        P                  R8  d5   \        P                  ! 4       ;p'       d   TP                  4       '       d   h  ELi ; i EL L L  + GRj  xL 
 '       g   i     L; i  \        P                  \        P                  3 dN    \        P                  R8  d5   \        P                  ! 4       ;p'       d   TP                  4       '       d   h  ELpi ; i5i)zDo worker process exit preparations.

We need to clean up everything and stop accepting requests.
It is especially important for keep-alive connections.
TN      )r   rr   cancelr   _loopcreate_futurerx   r   r_   CancelledErrorTimeoutErrorsysversion_infocurrent_task
cancellingrj   _cancelry   doneshieldforce_close)r   r   tasks   && r9   shutdownRequestHandler.shutdown   s     !!!-""))+ $$$ $(::#;#;#=D 
'000.... 10	#G,,,((4))11'2H2H2JK%%1$:L:L:Q:Q:S:S!..););<<< -, )%%'= 1. 1000**G,@,@A '+$$$/!(!5!5!777)) -
 = -,,, &&(<(<= 	  G+$1133T3OO%%	sG  AKK$G ;F<G ?F&F F&G F# G %I" <H?=I"  A*I+#IIII" II" #:KG  F&#G &G 	,F/-
G 	8G 	:G >K G AH<!H<7H<8K;H<<K?I" II" I	I
I	I	I" KI" "AK9KKKKKc                8   < V ^8  d   QhRS[ P                  RR/# )rA   r   r   N)r_   BaseTransport)rH   rI   s   "r9   rJ   rc   R  s!     " ")>)> "4 "r8   c                  < \         SV `  V4       \        \        P                  V4      pV P
                  '       d   \        V4       V P                  f   Q hV P                  P                  W4       V P                  p\        P                  R8  d)   \        P                  ! V P                  4       VRR7      pMVP                  V P                  4       4      pW@n        R # )NTr^   eager_startr      )rf   connection_mader   r_   	Transportrp   r"   rk   r   r   r   Taskstartcreate_taskry   )r   r   real_transportr^   r   r   s   &&   r9   r   RequestHandler.connection_madeR  s    	*g//;.)}}(((%%d;zzw&<<

4TJD##DJJL1D!r8   c                4   < V ^8  d   QhRS[ S[,          RR/# )rA   rC   r   N)r   rF   )rH   rI   s   "r9   rJ   rc   c  s      ( (8M#: (t (r8   c                  < V P                   f   R # V P                   P                  W4       V P                   P                  pV P                  4        \        SV `  V4       R V n         R V n        R V n        R V n        V P                  e   V P                  P                  4        V P                  e+   Vf   \        R4      pV P                  P                  V4       V'       d)   V P                  e   V P                  P                  4        R V n        V P                  e$   V P                  P                  4        R V n        R # R # )NzConnection lost)rk   connection_losthandler_cancellationr   rf   ro   rm   r|   rr   r   rj   ConnectionResetErrorr   ry   r{   feed_eof)r   rC   r   r   s   && r9   r   RequestHandler.connection_lostc  s   == %%d0  $}}AA$ $ $#!!-""))+  ,{*+<=!!))#.D$6$6$B%%'!+  ))+#'D  ,r8   c                $   < V ^8  d   QhRS[ RR/# )rA   parserr   Nr	   )rH   rI   s   "r9   rJ   rc     s     % % % %r8   c                    V P                   e   Q hWn         V P                  '       d/   V P                   P                  V P                  4       RV n        R # R # )Nr8   )r{   rv   	feed_data)r   r   s   &&r9   
set_parserRequestHandler.set_parser  sM    ##+++%  **4+=+=>!$D r8   c                   < V ^8  d   QhRR/# rA   r   Nr0   )rH   rI   s   "r9   rJ   rc     s      d r8   c                    R # r   r0   r   s   &r9   eof_receivedRequestHandler.eof_received  s    r8   c                $   < V ^8  d   QhRS[ RR/# )rA   datar   N)bytes)rH   rI   s   "r9   rJ   rc     s     % %% %D %r8   c                   V P                   '       g   V P                  '       d   R # V P                  f   V P                  '       g   V P                  f   Q h V P                  P                  V4      w  r#pT;'       g    R F:  w  rgV ;P                  ^,          un
        V P                  P                  Wg34       K<  	  V P                  pV'       d,   Ve(   VP                  4       '       g   VP                  R 4       W0n        V'       d   V'       d	   W@n        R # R # R # V P                  f6   V P                  '       d$   V'       d   V ;P                   V,          un        R # V'       d:   V P                  P                  V4      w  rV	'       d   V P#                  4        R # R # R #   \         d.   p\        RYUP                  R7      \        3.pRpRp R p?ELdR p?ii ; i)Ni  )rB   rC   rD   Fr8   r0   )r   r   r{   rz   r|   r   r   r?   rD   r    rh   ru   appendrw   r   
set_resultrv   close)
r   r   messagesupgradedtailrC   msgpayloadwaitereofs
   &&        r9   data_receivedRequestHandler.data_received  sr    '''333+/+?+?+I+I$+O(D !)B##q(#%%sn5 !/ \\FF.v{{}}!!$'$MD%)" !x !!)dmmm$& ,,66t<IC

  3 ' Sc;;GW !s   F' 'G2"GGc                $   < V ^8  d   QhRS[ RR/# )rA   valr   N)rb   )rH   rI   s   "r9   rJ   rc     s     * *d *t *r8   c                |    Wn         V P                  '       d$   V P                  P                  4        RV n        R# R# )z=Set keep-alive connection mode.

:param bool val: new state.
N)ri   rr   r   )r   r   s   &&r9   
keep_aliveRequestHandler.keep_alive  s4    
 !!!""))+%)D" "r8   c                   < V ^8  d   QhRR/# r   r0   )rH   rI   s   "r9   rJ   rc     s     " "t "r8   c                p    RV n         V P                  '       d   V P                  P                  4        R# R# )zwClose connection.

Stop accepting new pipelining messages and close
connection when handlers done processing messages.
TN)r   rw   r   r   s   &r9   r   RequestHandler.close  s)     <<<LL! r8   c                   < V ^8  d   QhRR/# r   r0   )rH   rI   s   "r9   rJ   rc     s     " "T "r8   c                    RV n         V P                  '       d   V P                  P                  4        V P                  e$   V P                  P	                  4        RV n        R# R# )zForcefully close connection.TN)r   rw   r   r   r   r   s   &r9   r   RequestHandler.force_close  sI     <<<LL!>>%NN  "!DN &r8   c                @   < V ^8  d   QhRS[ RS[RS[S[,          RR/# )rA   requestresponsetimer   N)r&   r(   r   ra   )rH   rI   s   "r9   rJ   rc     s7     P P"P.<PDLUOP	Pr8   c                    V P                   '       d`   V P                  eP   \        '       d   Vf   Q hV P                  P                  WV P                  P                  4       V,
          4       R # R # R # r   )r   r   r   logr   r   )r   r   r   r   s   &&&&r9   
log_accessRequestHandler.log_access  s[        T%7%7%C}'''""7djjoo6G$6NO &D r8   c                *   < V ^8  d   QhRS[ RS[ RR/# rA   argskwr   Nr   )rH   rI   s   "r9   rJ   rc     s"     + +s +# +$ +r8   c                f    V P                   '       d   V P                  P                   ! V/ VB  R # R # r   )rP   rO   r   r   r   s   &*,r9   	log_debugRequestHandler.log_debug  s'    :::KKt*r* r8   c                *   < V ^8  d   QhRS[ RS[ RR/# r   r   )rH   rI   s   "r9   rJ   rc     s"     + +3 +c +d +r8   c                >    V P                   P                  ! V/ VB  R # r   )rO   	exceptionr  s   &*,r9   log_exceptionRequestHandler.log_exception  s    t*r*r8   c                   < V ^8  d   QhRR/# r   r0   )rH   rI   s   "r9   rJ   rc     s      D r8   c                   R V n         V P                  '       g   V P                  '       g   R # V P                  pVP	                  4       pV P
                  pW#8  d#   VP                  W0P                  4      V n         R # V P                  '       d5   V P                  P                  4       '       g   V P                  4        R # R # R # r   )rr   r   ri   r   r   rq   call_at_process_keepaliverw   r   r   )r   r^   now
close_times   &   r9   r  !RequestHandler._process_keepalive  s    !%DOOOzziik44
%)\\*>U>U%VD" <<< 1 1 3 3 !4<r8   c          
         < V ^8  d   QhRS[ RS[S[,          RS[S[ .S[S[,          3,          RS[S[S[3,          /# )rA   r   
start_timerl   r   )r&   r   ra   r   r
   r(   r   rb   )rH   rI   s   "r9   rJ   rc     sR     ) )) UO) ";->1J"JK	)
 
~t#	$)r8   c                  "   R V n           Wn        V! V4      G Rj  xL
 pRV n         \        VRR4      '       d   \        P                  ! R\
        4       V P                  WV4      G Rj  xL
 w  rERT n         T P                  e   T P                  P                  R4       YE3#  L  RT n        i ; i LG  \         d*   pTpT P                  YT4      G Rj  xL 
 w  rE Rp?LrRp?i\        P                   d    h \        P                   dM   pT P                  RTR7       T P                  TR4      pT P                  YT4      G Rj  xL 
 w  rE Rp?LRp?i\         d<   pT P                  TRT4      pT P                  YT4      G Rj  xL 
 w  rE Rp?EL*Rp?ii ; i  RT n         T P                  e   T P                  P                  R4       i i ; i5i)	TN__http_exception__Fzlreturning HTTPException object is deprecated (#2415) and will be removed, please raise the exception insteadzRequest handler timed out.exc_infoi    )r   rj   getattrwarningswarnDeprecationWarningfinish_responser#   r_   r   r   r  handle_error	Exceptionrx   r   )r   r   r  rl   respresetrC   s   &&&&   r9   _handle_requestRequestHandler._handle_request  s     %)! 	6-(/%,W55(,% t15999 '	 !% 4 4WJ OOKD(-D%##/$$//5{? 6(,%. P-  	PD $ 4 4WJ OOOKD%%% 	## 	PNN7#NF$$Wc2D $ 4 4WJ OOOKD% 	P$$Wc37D $ 4 4WJ OOOKD%	P ).D%##/$$//5 0s   GB) B'B) B7 AF& -B5.F& 43G'B) )	B22B7 5F& 7F#C&CC&!F& &F#=F#F#:EEEF& F#'F#((FFFF& F##F& &3GGc                   < V ^8  d   QhRR/# r   r0   )rH   rI   s   "r9   rJ   rc     s     G' G'T G'r8   c           	     v  "   V P                   pV P                  pVf   Q hV P                  pRpV P                  f   Q hV P                  f   Q hV P
                  '       Eg   V P                  '       g2    VP                  4       V n        V P                  G Rj  xL
  RV n        V P                  P                  4       w  rVV P                  '       d   VP                  4       MRpV;P                  ^,          un        \        W4      p\        V\        4      '       d   V P!                  V4      p	\"        pMV P                  p	T P                  TTT TV P$                  ;'       g    \&        P(                  ! V4      4      p
 V P+                  WV	4      p\,        P.                  R8  d   \&        P0                  ! WRR7      pMVP3                  V4      p VG Rj  xL
 w  rM?T'       dA   T P7                  R4        RT
n        T P:                  Ef'   TEe"   T P7                  R4       EM\=        TP>                  4      T n         TPC                  4       '       Eg   T PD                  pT P
                  '       g   T'       d   T P7                  RT4       TP                  4       pY,           p TPC                  4       '       ge   TT8  d^   \G        TT,
          4      ;_uu_4       GRj  xL
  TPI                  4       G Rj  xL
  RRR4      GRj  xL
  TP                  4       pKz  TPC                  4       '       g4   T P
                  '       g"   T P7                  R4       T PQ                  4        TPS                  \T        4       RT
n        T P:                  f   Te   T P7                  R4       T P@                  '       dx   T P^                  '       gf   T P
                  '       gT   TP                  4       T,           pTT n0        T Pb                  f%   TPe                  TT Pf                  4      T n1        EK  EK   V P
                  '       g4   RV n        V P:                  e   V P:                  PQ                  4        R# R# R#  EL  RT n        i ; i EL  \4         dD    T P7                  R4        RT
n        T P:                  e   K  Tf   K  T P7                  R4       K  i ; i EL EL EL  + GRj  xL 
 '       g   i     EL; i  \&        PJ                  \&        PL                  3 dN    \,        P.                  R8  d5   \&        P(                  ! 4       ;p'       d   TPO                  4       '       d   h  ELSi ; i  \&        PJ                   d$    T P7                  R4       T PW                  4        h \X         d/   pT P[                  R	TR
7       T PW                  4         Rp?ELcRp?i\\         d    T PW                  4        h i ; i  RT
n        T P:                  f   Te   T P7                  R4       i i i ; i5i)a/  Process incoming request.

It reads request line, request headers and request payload, then
calls handle_request() method. Subclass has to override
handle_request(). start() handles various exceptions in request
or response handling. Connection is being closed always unless
keep_alive(True) specified.
NTr   z&Ignored premature client disconnectionz'Ignored premature client disconnection.z(Ignored premature client disconnection 2z'Start lingering close timer for %s sec.zUncompleted request.zUnhandled exceptionr  r   r   )4r   rk   rs   ro   rm   r   ru   r   rw   popleftr   r   requests_countr   
isinstancer?   _make_error_handlerERRORry   r_   r   r   r   r   r   r   ConnectionErrorr  _taskr   rb   r   ri   is_eofrt   r   readanyr   r   r   r   set_exception_PAYLOAD_ACCESS_ERRORr   r  r  rF   r   rq   rr   r  r  )r   r^   r]   rR   r  rD   r   r   writerrl   r   coror   r  rX   r  end_ttrC   r  s   &                   r9   r   RequestHandler.start  s     zz--""" 33$$000$$000###>>>(#'#5#5#7DL,,&&#'DL#~~557G $(#8#8#8DIIKdE""a'"!$-F'8,,"&":":7"C"&"7"7
 ++""@@g&:&:4&@GCN++GOL##w."<<TJD++D1D(,*KD NN#MN` !%>>)d.>NN#LM_ #'t"7 ~~''%)%9%9N,,,E~ #iik # 4&&-nn&6&63;+7+D+D+D*1//*;$;$; ,E+D '+iik #>>++D4E4E4E'=>

%%&;< !%>>)d.>NN#LMt{{{4;L;L;L!YY[+<<
2</))1-1\\"D$;$;.D* 2
     !%D~~)$$& * !] '#'DLF #-& NN#KLl !%>>)d.>NN#LMu4 ,E$; ,E+D+D+D !( 6 68L8LM & # 0 0G ;*1*>*>*@%@Q%@$%LLNN %& )) GH  " #""#83"G  ""    " !%>>)d.>NN#LM /?)s  AX9"X95$R  Q=R  CX9%X9AU; R RR U; (U; :X9X9X9(AU; 7U; ?*U; *T  %T %S &T )S)=S#>S)T S&T $U; :U; 6U; ;X9>X9X9"A%X95X9=R   	R		X9R S+U; ,X9X9	X9SU;  T #S)&T )T	/S20
T	;T	=	T AU8U83U84U; 7U88U; ;?X;X<#W%X %X2XX .X66X9c          
      X   < V ^8  d   QhRS[ RS[RS[S[,          RS[S[S[3,          /# )rA   r   r  r  r   )r&   r(   r   ra   r   rb   )rH   rI   s   "r9   rJ   rc     s;     ( ("(*8(FNuo(	~t#	$(r8   c                  "   VP                  4        V P                  ea   V P                  P                  R4       RV n        V P                  '       d-   V P                  P                  V P                  4       RV n         VP                  p V! V4      G Rj  xL
  VP!                  4       G Rj  xL
  T P%                  YT4       TR3#   \         d    Tf   T P                  R4       M T P                  RP                  T4      4       \        4       p\        TP                  TP                  TP                  TP                  R7      pTP                  p Li ; i L L  \"         d    T P%                  YT4       TR3u # i ; i5i)zPrepare the response and write_eof, then log access.

This has to
be called within the context of any exception so the access logger
can get exception information. Returns True if the client disconnects
prematurely.
NFr8   z+Missing return statement on request handlerz7Web-handler should return a response instance, got {!r})rB   reasontextheadersT)_finishr|   set_upgradedrz   rv   r   prepareAttributeErrorr  rH   r$   r'   rB   r6  r7  r8  	write_eofr)  r   )r   r   r  r  prepare_methrC   s   &&&&  r9   r  RequestHandler.finish_response  sX     	+  --e4!DM!!!$$..t/A/AB%("	(<<L	w'''.."""
 	z2U{+  	(|""#PQ""%vd| *+Czz#**388S[[D  <<L	( (" 	OOG:6:	ss   AF,FC E% E!E% 2E#3E% 7FBEFEF!E% #E% %!F	FF		Fc          
      X   < V ^8  d   QhRS[ RS[RS[S[,          RS[S[,          RS[/# )rA   r   rB   rC   rD   r   )r&   rE   r   rF   rG   r(   )rH   rI   s   "r9   rJ   rc     sF     < << < m$	<
 #< 
<r8   c                   V P                   ^8X  d@   \        V\        4      '       d*   V P                  P	                  RVP
                  VR7       MV P                  RVP
                  VR7       VP                  P                  ^ 8  d   \        R4      hRpV\        P                  8X  d   RP                  \        P                  4      p\        P                  P                  pRpV P                  '       d6   \        \        4      ;_uu_ 4        \         P"                  ! 4       pRRR4       RVP$                  P'                  RR	4      9   d/   V'       d   \)        V4      pR
V R2pRP                  WgR7      pRpMV'       d   TpVR,           V,           p\+        W$VR7      p	V	P-                  4        V	#   + '       g   i     L; i)zHandle errors.

Returns HTTP response with specific status code. Logs additional
information. It always closes current connection.
zError handling request from %sr  zMResponse is sent already, cannot send another response with the error messagez
text/plainz{0.value} {0.phrase}Nz	text/htmlAccept z<h2>Traceback:</h2>
<pre>z</pre>zV<html><head><title>{title}</title></head><body>
<h1>{title}</h1>
{msg}
</body></html>
)titler   z

)rB   r7  content_type)rh   r&  r   rO   rP   remoter  r/  output_sizer)  r   INTERNAL_SERVER_ERRORrH   descriptionr   r  	traceback
format_excr8  gethtml_escaper'   r   )
r   r   rB   rC   rD   ctrD  r   tbr  s
   &&&&&     r9   r  RequestHandler.handle_error  s    !#
3(F(F
 KK0'..3   0'..3  
 >>%%)!) 
 Z555*11*2R2RSE22>>CBzzzi(("--/B ) goo11(B??$RB6rd&AC0 &u&.  !C&.3.v"E- )(s   F66G	c                N   < V ^8  d   QhRS[ RS[S[.S[S[,          3,          /# )rA   err_infor   )r?   r   r&   r
   r(   )rH   rI   s   "r9   rJ   rc     s.       	;->!::	;r8   c                   a a R  VV 3R llpV# )c                0    V ^8  d   QhR\         R\        /# )rA   r   r   )r&   r(   )rH   s   "r9   rJ   8RequestHandler._make_error_handler.<locals>.__annotate__  s     	 	; 	> 	r8   c                 p   <"   SP                  V SP                  SP                  SP                  4      # 5ir   )r  rB   rC   rD   )r   rR  r   s   &r9   handler3RequestHandler._make_error_handler.<locals>.handler  s0     $$(,,8H8H s   36r0   )r   rR  rW  s   ff r9   r'  "RequestHandler._make_error_handler  s    	 	
 r8   )r   r   rj   r   rx   ri   rr   rs   rt   r   rk   rv   ru   rq   r{   rh   ro   rm   r   r|   ry   rp   r}   rz   rw   rQ   r   rP   rO   r   )rh   ri   rk   rm   ro   rp   rq   rr   rs   rt   ru   rv   rx   rw   ry   rz   r{   r|   _reading_pausedrO   rP   rQ   r   r   r   rj   r}   r   r   r   i   )g      .@)r  NN)&r2   r3   r4   r5   r6   	__slots__r   r%   r   
LOG_FORMATrg   r   r   r   r   propertyrR   r   r   r   r   r   r   r   r   r   r   r  r  r  r   r   r  r  r'  r7   rM   __classcell__)r   rI   s   @@r9   r)   r)   h   s    %NIBO) $(O) #O) 'O) 8DO) +O) ".!8!8O) O) "O) !O) #O)  !%!O)" "#O)$ !%%O)& )*'O) O)b
 
 
 
 
 
 ' '0 0d" ""( (@% % % %N* *" "" "P P+ ++ + ") )VG' G'R( (T< <|  r8   )r)   r*   r+   )Pr_   asyncio.streamsr   rJ  r  collectionsr   
contextlibr   htmlr   rM  httpr   loggingr   typingr   r	   r
   r   r   r   r   r   r   r   r   attryarl	propcacher   abcr   r   base_protocolr   helpersr   r   r   r   r   r   http_exceptionsr   r   r   r   streamsr    r!   tcp_helpersr"   web_exceptionsr#   r$   web_logr%   web_requestr&   web_responser'   r(   __all__ssl
web_serverr,   _RequestFactory_RequestHandlerURLr(  r  r*   r+   r.  sr?   _MsgTyper)   r0   r8   r9   <module>r{     sb     
     &        + ; ' !  + - 0 & B ! $ 2
I"  	 K=)N*CCD		HHSM	!) !8 8 +,  T$d3  4 ((23\ABp
\ p
r8   