Ë
    ‹V.j�f  ã                   ó�  — d dl Z d dlZ d dlZd dlZd dlZd dlmZ d dlmZ d dl	m
Z d dlmZ d dlmZ d dlmZmZmZmZmZmZmZmZmZmZmZ d dlZd dlZdd	lmZm Z  dd
l!m"Z" ddl#m$Z$ ddlm%Z%m&Z&m'Z'm(Z(m)Z) ddl*m+Z+ ddl,m-Z-m.Z. ddl/m0Z0m1Z1 ddl2m3Z3 ddl4m5Z5m6Z6 ddl7m8Z8 ddl9m:Z: ddl;m<Z<m=Z= dZ>erddl?m@Z@ ee(e1de dge:f   ZAee:gee=   f   ZB e(dde'i i dddd ej†                  d«      «
      ZD G d„ deE«      ZF G d„ d eE«      ZG eG«       ZH ej’                  ddd¬!«       G d"„ d#«      «       ZJeee(eJf   e1f   ZK G d$„ de"«      ZLy)%é    N)Údeque)Úsuppress)Úescape)Ú
HTTPStatus)ÚLogger)ÚTYPE_CHECKINGÚAnyÚ	AwaitableÚCallableÚDequeÚOptionalÚSequenceÚTupleÚTypeÚUnionÚcasté   )Ú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)ÚServerr)   zasyncio.Task[None]ÚUNKNOWNÚ/TFc                   ó   — e Zd ZdZy)r*   zPayload parsing error.N©Ú__name__Ú
__module__Ú__qualname__Ú__doc__© ó    úVC:\xampp\htdocs\tradingbinance\backend\.venv\Lib\site-packages\aiohttp/web_protocol.pyr*   r*   P   s   „ Ú r6   r*   c                   ó   — e Zd ZdZy)r+   z-Payload was accessed after response was sent.Nr0   r5   r6   r7   r+   r+   T   s   „ Ú7r6   r+   )Úauto_attribsÚfrozenÚslotsc                   ó,   — e Zd ZU eed<   eed<   eed<   y)Ú_ErrInfoÚstatusÚexcÚmessageN)r1   r2   r3   ÚintÚ__annotations__ÚBaseExceptionÚstrr5   r6   r7   r=   r=   [   s   … àƒKØ	ÓØ„Lr6   r=   c            !       ór  ‡ — e Zd ZdZdZddeeeej                  dddddd	dd
dœddde	j                  dedededee   dedededededededededef ˆ fd„Zdefd„Zedefd „«       ZdEd!ee   dd"fd#„Zd$e	j0                  dd"fˆ fd%„Zd&ee   dd"fˆ fd'„Zd(edd"fd)„ZdFd*„Zd+edd"fd,„Z d-edd"fd.„Z!dFd/„Z"dFd0„Z#d1e$d2e%d3edd"fd4„Z&d5ed6edd"fd7„Z'd5ed6edd"fd8„Z(dFd9„Z)d1e$d:ed;e*e$ge+e%   f   de,e%ef   fd<„Z-dFd=„Z.d1e$d>e%d:ede,e%ef   fd?„Z/	 	 	 dGd1e$d@ed&ee   dAee   de%f
dB„Z0dCe1de*e$ge+e%   f   fdD„Z2ˆ xZ3S )Hr)   aj  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

    )Ú_request_countÚ
_keepaliveÚ_managerÚ_request_handlerÚ_request_factoryÚ_tcp_keepaliveÚ_next_keepalive_close_timeÚ_keepalive_handleÚ_keepalive_timeoutÚ_lingering_timeÚ	_messagesÚ_message_tailÚ_handler_waiterÚ_waiterÚ_task_handlerÚ_upgradeÚ_payload_parserÚ_request_parserÚ_reading_pausedÚloggerÚdebugÚ
access_logr   Ú_closeÚ_force_closeÚ_current_requestÚ_timeout_ceil_thresholdÚ_request_in_progressi.  TFiþ  i €  g      $@i   é   )Úkeepalive_timeoutr"   rY   Úaccess_log_classr[   Úaccess_log_formatrZ   Úmax_line_sizeÚmax_headersÚmax_field_sizeÚlingering_timeÚread_bufsizeÚauto_decompressÚtimeout_ceil_thresholdÚmanagerr,   Úlooprb   r"   rY   rc   r[   rd   rZ   re   rf   rg   rh   ri   rj   rk   c          
      ó€  •— t         ‰| �  |«       d| _        d| _        d | _        || _        |j                  | _        |j                  | _	        || _
        d| _        d | _        || _        t        |«      | _        t!        «       | _        d| _        d | _        d | _        d | _        d| _        d | _        t1        | |||
||t2        |¬«      | _        d| _        	 t        |«      | _        || _        |	| _        || _         |r |||«      | _!        nd | _!        d| _"        d| _#        d| _$        y # t8        t:        f$ r Y ŒTw xY w)Nr   Fg        r6   )re   rg   rf   Úpayload_exceptionrj   ra   )%ÚsuperÚ__init__rF   rG   r^   rH   Úrequest_handlerrI   Úrequest_factoryrJ   rK   rL   rM   rN   ÚfloatrO   r   rP   rQ   rS   rR   rT   rU   rV   r   r*   rW   r_   Ú	TypeErrorÚ
ValueErrorrY   rZ   r[   r   r\   r]   r`   )Úselfrl   rm   rb   r"   rY   rc   r[   rd   rZ   re   rf   rg   rh   ri   rj   rk   Ú	__class__s                    €r7   rq   zRequestHandler.__init__¬   s\  ø€ ô* 	‰Ñ˜Ôð  ˆÔØˆŒØ7;ˆÔØ*1ˆŒØ;B×;RÑ;RˆÔØ;B×;RÑ;RˆÔà+ˆÔà*-ˆÔ'Ø;?ˆÔØ"3ˆÔÜ$ ^Ó4ˆÔä*/«'ˆŒØ ˆÔà7;ˆŒØ?CˆÔØ;?ˆÔàˆŒØ$(ˆÔÜ<MØØØØ'Ø)Ø#Ü1Ø+ô	=
ˆÔð /0ˆÔ$ð	Ü+0Ð1GÓ+HˆDÔ(ð ˆŒØˆŒ
Ø$ˆŒÙÙAQØÐ-óBˆDÕð "&ˆDÔàˆŒØ!ˆÔØ$)ˆÕ!øô œ:Ð&ò 	Ùð	ús   ÃD+ Ä+D=Ä<D=Úreturnc                 ór   — dj                  | j                  j                  | j                  �d«      S d«      S )Nz<{} {}>Ú	connectedÚdisconnected)Úformatrx   r1   Ú	transport©rw   s    r7   Ú__repr__zRequestHandler.__repr__ú   s;   € Ø×ÑØ�N‰N×#Ñ#ØŸ>™>Ð5ˆKó
ð 	
à;Ió
ð 	
r6   c                 ó   — | j                   S ©N)rN   r   s    r7   rb   z RequestHandler.keepalive_timeout   s   € à×&Ñ&Ð&r6   ÚtimeoutNc              ƒ   óþ  K  — d| _         | j                  �| j                  j                  «        | j                  rX| j                  j                  «       | _        	 t        |«      4 ƒd{  –—†  | j                  ƒ d{  –—†  ddd«      ƒd{  –—†  	 t        |«      4 ƒd{  –—†  | j                  �-| j                  j!                  t        j                  «       «       | j"                  �A| j"                  j%                  «       s't        j&                  | j"                  «      ƒ d{  –—†  ddd«      ƒd{  –—†  | j"                  �| j"                  j                  «        | j)                  «        y7 �Œ7 Œù7 Œë# 1 ƒd{  –—†7  sw Y   ŒûxY w# t        j                  t        j                  f$ rE d| _        t        j                  dk\  r't        j                  «       x}r|j                  «       r‚ Y �Œew xY w7 �ŒY7 ŒÕ7 ŒÇ# 1 ƒd{  –—†7  sw Y   Œ×xY w# t        j                  t        j                  f$ r> t        j                  dk\  r't        j                  «       x}r|j                  «       r‚ Y �Œ:w xY w­w)z±Do worker process exit preparations.

        We need to clean up everything and stop accepting requests.
        It is especially important for keep-alive connections.
        TN©é   é   )r]   rM   Úcancelr`   Ú_loopÚcreate_futurerR   r   ÚasyncioÚCancelledErrorÚTimeoutErrorÚsysÚversion_infoÚcurrent_taskÚ
cancellingr^   Ú_cancelrT   ÚdoneÚshieldÚforce_close)rw   rƒ   Útasks      r7   ÚshutdownzRequestHandler.shutdown  sö  è ø€ ð !ˆÔà×!Ñ!Ð-Ø×"Ñ"×)Ñ)Ô+ð ×$Ò$ð $(§:¡:×#;Ñ#;Ó#=ˆDÔ ð
Ü'¨×0Õ0Ø×.Ñ.×.Ð.÷ 1×0ð	Ü# G×,Õ,Ø×(Ñ(Ð4Ø×)Ñ)×1Ñ1´'×2HÑ2HÓ2JÔKà×%Ñ%Ð1¸$×:LÑ:L×:QÑ:QÔ:SÜ!Ÿ.™.¨×);Ñ);Ó<×<Ð<÷ -×,ð ×ÑÐ)Ø×Ñ×%Ñ%Ô'à×ÑÕð= 1ùØ.øð 1ø×0×0Ñ0ûä×*Ñ*¬G×,@Ñ,@ÐAò Ø'+�Ô$ä×$Ñ$¨Ò/Ü!(×!5Ñ!5Ó!7Ð7˜Ð7ØŸ™Ô)àúðúð -ùð
 =øð -ø×,×,Ñ,ûô ×&Ñ&¬×(<Ñ(<Ð=ò 	ä× Ñ  GÒ+Ü$×1Ñ1Ó3Ð3�TÐ3Ø—O‘OÔ%àúð	üsÿ   ‚AI=ÁF Á+E6Á,F Á/E=Á?E9Â E=ÂF ÂE;ÂF ÂH Â$G=Â%H Â(BHÄ*H Ä+HÄ/H Ä:HÄ;H Ä?7I=Å6F Å9E=Å;F Å=FÆFÆFÆF ÆA$G:Ç6I=Ç9G:Ç:I=Ç=H È HÈH ÈHÈ
HÈHÈH ÈAI:É6I=É9I:É:I=r~   c                 óÀ  •— t         ‰| �  |«       t        t        j                  |«      }| j
                  rt        |«       | j                  €J ‚| j                  j                  | |«       | j                  }t        j                  dk\  r.t        j                  | j                  «       |d¬«      }|| _        y |j                  | j                  «       «      }|| _        y )N©r†   é   T©rm   Úeager_start)rp   Úconnection_mader   r‹   Ú	TransportrK   r"   rH   r‰   rŽ   r�   ÚTaskÚstartÚcreate_taskrT   )rw   r~   Úreal_transportrm   r–   rx   s        €r7   r�   zRequestHandler.connection_made6  s°   ø€ Ü‰Ñ 	Ô*äœg×/Ñ/°Ó;ˆØ×ÒÜ˜.Ô)à�}‰}Ð(Ð(Ð(Ø�‰×%Ñ% d¨NÔ;à�z‰zˆÜ×Ñ˜wÒ&Ü—<‘< §
¡
£°4ÀTÔJˆDð "ˆÕð ×#Ñ# D§J¡J£LÓ1ˆDØ!ˆÕr6   r?   c                 óh  •— | j                   €y | j                   j                  | |«       | j                   j                  }| j                  «        t        ‰| �  |«       d | _         d | _        d | _        d | _        | j                  �| j                  j                  «        | j                  �(|€t        d«      }| j                  j                  |«       |r&| j                  �| j                  j                  «        d | _        | j                  �"| j                  j                  «        d | _        y y )NzConnection lost)rH   Úconnection_lostÚhandler_cancellationr•   rp   rJ   rI   rW   rM   rˆ   r^   ÚConnectionResetErrorr’   rT   rV   Úfeed_eof)rw   r?   r¥   rx   s      €r7   r¤   zRequestHandler.connection_lostG  s  ø€ Ø�=‰=Ð ØØ�‰×%Ñ% d¨CÔ0ð  $Ÿ}™}×AÑAÐà×ÑÔÜ‰Ñ Ô$ØˆŒØ $ˆÔØ $ˆÔØ#ˆÔà×!Ñ!Ð-Ø×"Ñ"×)Ñ)Ô+à× Ñ Ð,Øˆ{Ü*Ð+<Ó=�Ø×!Ñ!×)Ñ)¨#Ô.á D×$6Ñ$6Ð$BØ×Ñ×%Ñ%Ô'à!ˆÔà×ÑÐ+Ø× Ñ ×)Ñ)Ô+Ø#'ˆDÕ ð ,r6   Úparserc                 ó    — | j                   �J ‚|| _         | j                  r-| j                   j                  | j                  «       d| _        y y )Nr6   )rV   rQ   Ú	feed_data)rw   r¨   s     r7   Ú
set_parserzRequestHandler.set_parserg  sL   € à×#Ñ#Ð+Ð+Ð+à%ˆÔà×ÒØ× Ñ ×*Ñ*¨4×+=Ñ+=Ô>Ø!$ˆDÕð r6   c                  ó   — y r‚   r5   r   s    r7   Úeof_receivedzRequestHandler.eof_receivedq  s   € Ør6   Údatac                 ó
  — | j                   s| j                  ry | j                  €À| j                  s´| j                  €J ‚	 | j                  j                  |«      \  }}}|xs dD ]7  \  }}| xj                  dz  c_
        | j                  j                  ||f«       Œ9 | j                  }|r#|�!|j                  «       s|j                  d «       || _        |r|r|| _        y y y | j                  €$| j                  r|r| xj                   |z  c_        y |r2| j                  j                  |«      \  }	}|	r| j#                  «        y y y # t        $ r.}t        d||j                  ¬«      t        fg}d}d}Y d }~�Œd }~ww xY w)Ni�  )r>   r?   r@   Fr6   r5   r   )r]   r\   rV   rU   rW   rª   r   r=   r@   r    rF   rP   ÚappendrS   r“   Ú
set_resultrQ   Úclose)
rw   r®   ÚmessagesÚupgradedÚtailr?   ÚmsgÚpayloadÚwaiterÚeofs
             r7   Údata_receivedzRequestHandler.data_receivedt  ss  € Ø×Ò §¢Øð ×ÑÐ'°·²Ø×'Ñ'Ð3Ð3Ð3ðØ+/×+?Ñ+?×+IÑ+IÈ$Ó+OÑ(�˜( Dð !)¢¨B¢‘��WØ×#Ò# qÑ(Õ#Ø—‘×%Ñ% s¨G nÕ5ð !/ð —\‘\ˆFÙ˜FÐ.°v·{±{´}à×!Ñ! $Ô'à$ˆDŒMÙ™DØ%)�Õ"ð !ˆxð ×!Ñ!Ð)¨d¯mªmÁØ×Ò $Ñ&Öñ Ø×,Ñ,×6Ñ6°tÓ<‰IˆC�ÙØ—
‘
•ð ð øô3 'ò ä S¨c¸3¿;¹;ÔGÌÐWð�ð !�Ø–ûðús   ÁE Å	FÅ#E=Å=FÚvalc                 ón   — || _         | j                  r"| j                  j                  «        d| _        yy)zMSet keep-alive connection mode.

        :param bool val: new state.
        N)rG   rM   rˆ   )rw   r»   s     r7   Ú
keep_alivezRequestHandler.keep_alive›  s3   € ð
 ˆŒØ×!Ò!Ø×"Ñ"×)Ñ)Ô+Ø%)ˆDÕ"ð "r6   c                 ó`   — d| _         | j                  r| j                  j                  «        yy)z�Close connection.

        Stop accepting new pipelining messages and close
        connection when handlers done processing messages.
        TN)r\   rS   rˆ   r   s    r7   r²   zRequestHandler.close¥  s'   € ð ˆŒØ�<Š<Ø�L‰L×ÑÕ!ð r6   c                 óº   — d| _         | j                  r| j                  j                  «        | j                  �"| j                  j	                  «        d| _        yy)zForcefully close connection.TN)r]   rS   rˆ   r~   r²   r   s    r7   r•   zRequestHandler.force_close¯  sG   € à ˆÔØ�<Š<Ø�L‰L×ÑÔ!Ø�>‰>Ð%Ø�N‰N× Ñ Ô"Ø!ˆD�Nð &r6   ÚrequestÚresponseÚtimec                 ó¼   — | j                   �P| j                   j                  r9| j                   j                  ||| j                  j	                  «       |z
  «       y y y r‚   )r   ÚenabledÚlogr‰   rÂ   )rw   rÀ   rÁ   rÂ   s       r7   Ú
log_accesszRequestHandler.log_access¸  sO   € ð ×ÑÐ)¨d×.@Ñ.@×.HÒ.HØ×Ñ×"Ñ" 7¨H°d·j±j·o±oÓ6GÈ$Ñ6NÕOð /IÐ)r6   ÚargsÚkwc                 óV   — | j                   r | j                  j                   |i |¤Ž y y r‚   )rZ   rY   ©rw   rÇ   rÈ   s      r7   Ú	log_debugzRequestHandler.log_debug¾  s'   € Ø�:Š:ØˆD�K‰K×Ñ˜tÐ* rÓ*ð r6   c                 ó<   —  | j                   j                  |i |¤Ž y r‚   )rY   Ú	exceptionrÊ   s      r7   Úlog_exceptionzRequestHandler.log_exceptionÂ  s   € Øˆ�‰×Ñ˜tÐ* rÓ*r6   c                 óR  — d | _         | j                  s| j                  sy | j                  }|j	                  «       }| j
                  }||k  r"|j                  || j                  «      | _         y | j                  r,| j                  j                  «       s| j                  «        y y y r‚   )rM   r]   rG   r‰   rÂ   rL   Úcall_atÚ_process_keepaliverS   r“   r•   )rw   rm   ÚnowÚ
close_times       r7   rÑ   z!RequestHandler._process_keepaliveÅ  sŠ   € Ø!%ˆÔØ×Ò D§O¢OØà�z‰zˆØ�i‰i‹kˆØ×4Ñ4ˆ
Ø�*Òà%)§\¡\°*¸d×>UÑ>UÓ%VˆDÔ"Øð �<Š< §¡× 1Ñ 1Ô 3Ø×ÑÕð !4ˆ<r6   Ú
start_timerr   c              ƒ   óª  K  — d| _         	 	 || _         ||«      ƒ d {  –—† }d | _        	 t        |dd«      rt        j                  dt
        «       | j                  |||«      ƒ d {  –—† \  }}d| _         | j                  �| j                  j                  d «       ||fS 7 Œƒ# d | _        w xY w7 ŒG# t        $ r+}|}| j                  |||«      ƒ d {  –—†7  \  }}Y d }~Œqd }~wt        j                  $ r ‚ t        j                  $ rN}| j                  d|¬«       | j                  |d«      }| j                  |||«      ƒ d {  –—†7  \  }}Y d }~Œãd }~wt        $ r=}| j                  |d|«      }| j                  |||«      ƒ d {  –—†7  \  }}Y d }~�Œ'd }~ww xY w# d| _         | j                  �| j                  j                  d «       w w xY w­w)	NTÚ__http_exception__Fzlreturning HTTPException object is deprecated (#2415) and will be removed, please raise the exception insteadzRequest handler timed out.©Úexc_infoiø  éô  )r`   r^   ÚgetattrÚwarningsÚwarnÚDeprecationWarningÚfinish_responser#   r‹   rŒ   r�   rË   Úhandle_errorÚ	ExceptionrR   r±   )rw   rÀ   rÔ   rr   ÚrespÚresetr?   s          r7   Ú_handle_requestzRequestHandler._handle_requestÖ  sÄ  è ø€ ð %)ˆÔ!ð 	6ð-Ø(/�Ô%Ù,¨WÓ5×5�à(,�Õ%ô �tÐ1°5Ô9Ü—‘ð9ô 'ô	ð !%× 4Ñ 4°W¸dÀJÓ O×O‰KˆD�%à(-ˆDÔ%Ø×#Ñ#Ð/Ø×$Ñ$×/Ñ/°Ô5à�Uˆ{Ðð? 6ùà(,�Õ%úð. Pùô- ò 	PØˆDØ $× 4Ñ 4°W¸dÀJÓ O×OÐO‰KˆD•%ûÜ×%Ñ%ò 	ØÜ×#Ñ#ò 	PØ�N‰NÐ7À#ˆNÔFØ×$Ñ$ W¨cÓ2ˆDØ $× 4Ñ 4°W¸dÀJÓ O×OÐO‰KˆD•%ûÜò 	PØ×$Ñ$ W¨c°3Ó7ˆDØ $× 4Ñ 4°W¸dÀJÓ O×OÐO‰KˆD–%ûð	Pûð ).ˆDÔ%Ø×#Ñ#Ð/Ø×$Ñ$×/Ñ/°Õ5ð 0üsº   ‚GŒB$ žB"ŸB$ £B2 «=F Á(B0Á)F Á02GÂ"B$ Â$	B-Â-B2 Â0F Â2	FÂ;C!ÃCÃC!ÃF Ã!)FÄ
;EÅEÅEÅF ÅFÅ)FÆFÆ	FÆF ÆFÆF Æ1GÇGc              ƒ   óH  K  — | j                   }t        j                  |«      }|€J ‚| j                  }|€J ‚| j                  }d}| j
                  €J ‚| j                  €J ‚| j                  �s¶| j                  s1	 |j                  «       | _
        | j                  ƒ d{  –—†  d| _
        | j                  j                  «       \  }}|j                  «       }|xj                  dz  c_        t        | |«      }	t        |t         «      r| j#                  |«      }
t$        }n| j                  }
| j                  ||| |	|«      }	 | j'                  |||
«      }t(        j*                  dk\  rt        j,                  ||d¬«      }n|j/                  |«      }	 |ƒ d{  –—† \  }}~|r©| j3                  d«       	 | j4                  €|�| j3                  d«       �nM| j                  �s@| j6                  r[| j8                  sO|��%|j                  «       }||z   }|| _        | j<                  �€ü|j?                  || j@                  «      | _        �nÙ�n×tC        |jD                  «      | _        |jG                  «       sù| jH                  }| j                  s¤|r¢| j3                  d	|«       |j                  «       }||z   }	 |jG                  «       sj||k  retK        ||z
  «      4 ƒd{  –—†  |jM                  «       ƒ d{  –—†  ddd«      ƒd{  –—†  |j                  «       }|jG                  «       s||k  rŒe|jG                  «       s-| j                  s!| j3                  d«       | jU                  «        |jW                  tX        «       | j4                  €|�| j3                  d«       nq| j                  se| j6                  rX| j8                  sL|�K|j                  «       }||z   }|| _        | j<                  €#|j?                  || j@                  «      | _        nn| j                  s�Œ¶| j                  s/d| _0        | j4                  �| j4                  jU                  «        yyy7 �ŒÁ# d| _
        w xY w7 �ŒÖ# t0        $ r§ | j3                  d«       Y | j4                  €|�| j3                  d«       Œ‰| j                  rŒ–| j6                  rZ| j8                  sN|€Œ±|j                  «       }||z   }|| _        | j<                  �ŒÚ|j?                  || j@                  «      | _        ŒüŒýw xY w7 �ŒE7 �Œ07 �Œ## 1 ƒd{  –—†7  sw Y   �Œ4xY w# t        jN                  t        jP                  f$ r> t(        j*                  d
k\  r't        j                  «       x}r|jS                  «       r‚ Y �Œqw xY w# t        jN                  $ r | j3                  d«       ‚ tZ        $ r.}| j]                  d|¬«       | j_                  «        Y d}~�Œyd}~ww xY w# | j4                  €|�| j3                  d«       w | j                  sj| j6                  rZ| j8                  sN|�K|j                  «       }||z   }|| _        | j<                  €"|j?                  || j@                  «      | _        w w w  Y �Œyw xY w­w)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.
        Nr   r™   Tr›   z&Ignored premature client disconnectionz'Ignored premature client disconnection.z(Ignored premature client disconnection 2z'Start lingering close timer for %s sec.r…   zUncompleted request.zUnhandled exceptionr×   )1r‰   r‹   r�   rH   rN   rJ   rI   r]   rP   rŠ   rS   ÚpopleftrÂ   Úrequests_countr   Ú
isinstancer=   Ú_make_error_handlerÚERRORrã   rŽ   r�   rŸ   r¡   ÚConnectionErrorrË   r~   rG   r\   rL   rM   rÐ   rÑ   Úboolr½   Úis_eofrO   r   ÚreadanyrŒ   r�   r‘   r²   Úset_exceptionÚ_PAYLOAD_ACCESS_ERRORrà   rÎ   r•   rT   )rw   rm   Úhandlerrl   rb   rá   r@   r·   r    Úwriterrr   rÀ   Úcoror–   râ   rÒ   rÓ   rh   Úend_tÚtr?   s                        r7   r    zRequestHandler.start  sð  è ø€ ð �z‰zˆÜ×&Ñ& tÓ,ˆØÐ"Ð"Ð"Ø—-‘-ˆØÐ"Ð"Ð"Ø ×3Ñ3ÐØˆØ×$Ñ$Ð0Ð0Ð0Ø×$Ñ$Ð0Ð0Ð0à×#Ó#Ø—>’>ð(à#'×#5Ñ#5Ó#7�D”LØŸ,™,×&Ð&à#'�D”Là#Ÿ~™~×5Ñ5Ó7ÑˆG�Wà—I‘I“KˆEà×"Ò" aÑ'Õ"Ü! $¨Ó-ˆFÜ˜'¤8Ô,à"&×":Ñ":¸7Ó"C�Ü‘à"&×"7Ñ"7�à×+Ñ+¨G°W¸dÀFÈGÓTˆGðKà×+Ñ+¨G°U¸OÓL�Ü×#Ñ# wÒ.Ü"Ÿ<™<¨°4ÀTÔJ‘Dà×+Ñ+¨DÓ1�DðØ(,§*‘K�D˜%ð ÙØ—N‘NÐ#MÔNØðX —>‘>Ð)¨dÐ.>Ø—N‘NÐ#LÖMØ×*Ó*Ø—’¨t¯{ª{à,Ñ8Ø"&§)¡)£+˜CØ),Ð/@Ñ)@˜JØ>H˜DÔ;Ø#×5Ñ5Ñ=Ø9=¿¹Ø$.°×0GÑ0Gó:" Ö 6ñ ôo #' t§¡Ó"7�”ð —~‘~Ô'Ø%)×%9Ñ%9�NØ×,Ò,±ØŸ™ØEÀ~ôð #Ÿi™i›k˜Ø # nÑ 4˜ð&Ø&-§n¡nÔ&6¸3Àº;Ü+7¸À¹×+DÕ+Dà*1¯/©/Ó*;×$;Ð$;÷ ,E×+Dð '+§i¡i£k ð	 '.§n¡nÔ&6¸3À»;ð #Ÿ>™>Ô+°D×4EÒ4EØŸ™Ð'=Ô>ØŸ
™
œà×%Ñ%Ô&;Ô<ð —>‘>Ð)¨dÐ.>Ø—N‘NÐ#LÕMØ×*Ò*Ø—’¨t¯{ª{à,Ð8Ø"&§)¡)£+˜CØ),Ð/@Ñ)@˜JØ>H˜DÔ;Ø#×5Ñ5Ð=Ø9=¿¹Ø$.°×0GÑ0Gó:" Õ 6ð ðE ×#Ô#ðJ × Ò Ø!%ˆDÔØ�~‰~Ð)Ø—‘×$Ñ$Õ&ð *ð !ðA 'úà#'�D•Lúð0 #-úÜ&ò Ø—N‘NÐ#KÔLØðd —>‘>Ð)¨dÐ.>Ø—N‘NÐ#LÕMØ×*Ó*Ø—’¨t¯{ª{à,Ñ8Ø"&§)¡)£+˜CØ),Ð/@Ñ)@˜JØ>H˜DÔ;Ø#×5Ñ5Ñ=Ø9=¿¹Ø$.°×0GÑ0Gó:" Õ 6ð ðEúð4 ,Eùà$;ùð ,Eù×+D×+DÒ+Dûô !(× 6Ñ 6¼×8LÑ8LÐMò &ä #× 0Ñ 0°GÒ ;Ü*1×*>Ñ*>Ó*@Ð%@ QÐ%@Ø$%§L¡L¤Nà %úð&ûô ×)Ñ)ò Ø—‘ÐGÔHØÜò #Ø×"Ñ"Ð#8À3Ð"ÔGØ× Ñ ×"Ò"ûð#ûð —>‘>Ð)¨dÐ.>Ø—N‘NÐ#LÕMØ×*Ò*Ø—’¨t¯{ª{à,Ð8Ø"&§)¡)£+˜CØ),Ð/@Ñ)@˜JØ>H˜DÔ;Ø#×5Ñ5Ð=Ø9=¿¹Ø$.°×0GÑ0Gó:" Õ 6ð  >ð	 9ó ð +üsX  ‚A9Z"Á<$Q$ Â Q!Â!Q$ Â%BZ"ÅAV) ÆQ3 ÆQ0ÆQ3 Æ"V) Æ7BZ"ÉA+V) Ê:'U Ë!T&Ë"U Ë%T/Ë9T)Ë:T/Ë>U Ì	T,Ì
)U Ì4AV) ÎBZ"Ð%<Z"Ñ!Q$ Ñ$	Q-Ñ-Z"Ñ0Q3 Ñ3T#ÒV) Ò,Z"Ò;Z"Ó(Z"Ó?#Z"Ô"T#Ô#V) Ô&U Ô)T/Ô,U Ô/UÔ5T8Ô6UÔ=U ÕAV&Ö"V) Ö%V&Ö&V) Ö)-X×#W?×9X ×?XØX ØBZÚZ"ÚZÚZ"rá   c              ƒ   ó  K  — |j                  «        | j                  �Z| j                  j                  d«       d| _        | j                  r,| j                  j                  | j                  «       d| _        	 |j                  }	  ||«      ƒ d{  –—†  |j!                  «       ƒ d{  –—†  | j%                  |||«       |dfS # t        $ r„ |€| j                  d«       n | j                  dj                  |«      «       t        «       }t        |j                  |j                  |j                  |j                  ¬«      }|j                  }Y ŒÌw xY w7 ŒÃ7 Œ­# t"        $ r | j%                  |||«       |dfcY S w xY w­w)a   Prepare 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.
        NFr6   z+Missing return statement on request handlerz7Web-handler should return a response instance, got {!r})r>   ÚreasonÚtextÚheadersT)Ú_finishrW   Úset_upgradedrU   rQ   rª   ÚprepareÚAttributeErrorrÎ   r}   r$   r'   r>   rö   r÷   rø   Ú	write_eofrê   rÆ   )rw   rÀ   rá   rÔ   Úprepare_methr?   s         r7   rÞ   zRequestHandler.finish_response~  s[  è ø€ ð 	�‰ÔØ×ÑÐ+Ø× Ñ ×-Ñ-¨eÔ4Ø!ˆDŒMØ×!Ò!Ø×$Ñ$×.Ñ.¨t×/AÑ/AÔBØ%(�Ô"ð	(ØŸ<™<ˆLð	Ù˜wÓ'×'Ð'Ø—.‘.Ó"×"Ð"ð
 	�‰˜  zÔ2Ø�Uˆ{Ðøô+ ò 	(Øˆ|Ø×"Ñ"Ð#PÕQà×"Ñ"ðß%™v d›|ôô *Ó+ˆCÜØ—z‘z¨#¯*©*¸3¿8¹8ÈSÏ[É[ôˆDð  Ÿ<™<ŠLð	(úð (øØ"ùÜò 	Ø�O‰O˜G T¨:Ô6Ø˜�:Òð	üsm   ‚A7F Á:C ÂE ÂEÂE Â*EÂ+E Â/F ÃB
EÅF ÅEÅF ÅE ÅE Å E=Å:F Å<E=Å=F r>   r@   c                 óø  — | j                   dk(  r.t        |t        «      r| j                  j	                  d|¬«       n| j                  d|¬«       |j                  j                  dkD  rt        d«      ‚d}|t        j                  k(  rÆdj                  t        j                  «      }t        j                  j                  }d}| j                  r,t        t        «      5  t        j                   «       }ddd«       d	|j"                  j%                  d
d«      v r)|rt'        |«      }d|› d�}dj                  ||¬«      }d	}n|r|}|dz   |z   }t)        |||¬«      }	|	j+                  «        |	S # 1 sw Y   Œ|xY w)z›Handle errors.

        Returns HTTP response with specific status code. Logs additional
        information. It always closes current connection.
        r   zError handling requestr×   r   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

)r>   r÷   Úcontent_type)rF   rç   r   rY   rZ   rÎ   rñ   Úoutput_sizerê   r   ÚINTERNAL_SERVER_ERRORr}   Údescriptionr   rà   Ú	tracebackÚ
format_excrø   ÚgetÚhtml_escaper'   r•   )
rw   rÀ   r>   r?   r@   Úctr  r¶   Útbrá   s
             r7   rß   zRequestHandler.handle_error¨  sf  € ð ×Ñ !Ò#¬
°3¼Ô(Fð
 �K‰K×ÑÐ6ÀÐÕEà×ÑÐ7À#ÐÔFð �>‰>×%Ñ%¨Ò)Ü!ð)óð ð
 ˆØ”Z×5Ñ5Ò5Ø*×1Ñ1´*×2RÑ2RÓSˆEÜ×2Ñ2×>Ñ>ˆCØˆBØ�zŠzÜœiÕ(Ü"×-Ñ-Ó/�B÷ )ð ˜gŸo™o×1Ñ1°(¸BÓ?Ñ?ÙÜ$ R›�BØ6°r°d¸&ÐA�Cð0÷ ‘&˜u¨#�&Ó.ð ð !‘áØ�CØ &™.¨3Ñ.�ä˜v¨GÀ"ÔEˆØ×ÑÔàˆ÷- )Ð(ús   Ã E0Å0E9Úerr_infoc                 ó0   ‡ ‡— dt         dt        fˆˆ fd„}|S )NrÀ   ry   c              “   óp   •K  — ‰j                  | ‰j                  ‰j                  ‰j                  «      S ­wr‚   )rß   r>   r?   r@   )rÀ   r  rw   s    €€r7   rð   z3RequestHandler._make_error_handler.<locals>.handlerå  s1   øè ø€ Ø×$Ñ$Ø˜Ÿ™¨(¯,©,¸×8HÑ8Hóð ùs   ƒ36)r&   r(   )rw   r  rð   s   `` r7   rè   z"RequestHandler._make_error_handlerâ  s   ù€ ð	¤;ð 	´>ö 	ð
 ˆr6   )g      .@)ry   N)rÙ   NN)4r1   r2   r3   r4   Ú	__slots__r   r%   r   Ú
LOG_FORMATr‹   ÚAbstractEventLooprt   rë   r   r   r   rD   rA   rq   r€   Úpropertyrb   r   r—   ÚBaseTransportr�   rC   r¤   r	   r«   r­   Úbytesrº   r½   r²   r•   r&   r(   rÆ   rË   rÎ   rÑ   r   r
   r   rã   r    rÞ   rß   r=   rè   Ú__classcell__)rx   s   @r7   r)   r)   e   s  ø„ ñ%ðN€IðJ $(Ø"Ø&Ø7CØ*Ø!-×!8Ñ!8ØØ!Ø Ø"Ø $Ø!Ø $Ø()ò'L*àðL*ð ×'Ñ'ð	L*ð !ðL*ð ðL*ð ðL*ð Ð3Ñ4ðL*ð ðL*ð ðL*ð ðL*ð ðL*ð ðL*ð ðL*ð  ð!L*ð" ð#L*ð$ ð%L*ð& !&õ'L*ð\
˜#ó 
ð ð' 5ò 'ó ð'ñ0 h¨u¡oð 0Àó 0ðd"¨×)>Ñ)>ð "À4õ "ð"( 8¨MÑ#:ð (¸tõ (ð@% ð %¨ó %óð% %ð %¨Dó %ðN*˜dð * tó *ó"ó"ðPØ"ðPØ.<ðPØDIðPà	óPð+˜sð +¨#ð +°$ó +ð+ 3ð +¨cð +°dó +óð")àð)ð ð)ð " ; -°¸>Ñ1JÐ"JÑKð	)ð
 
ˆ~˜tÐ#Ñ	$ó)óV{'ðz(Ø"ð(Ø*8ð(ØFKð(à	ˆ~˜tÐ#Ñ	$ó(ðZ Ø'+Ø!%ñ8àð8ð ð8ð �mÑ$ð	8ð
 ˜#‘ð8ð 
ó8ðtØ ðà	�;�- ¨>Ñ!:Ð:Ñ	;÷r6   )Mr‹   Úasyncio.streamsrŽ   r  rÛ   Úcollectionsr   Ú
contextlibr   Úhtmlr   r
  Úhttpr   Úloggingr   Útypingr   r	   r
   r   r   r   r   r   r   r   r   ÚattrÚyarlÚ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__Ú
web_serverr,   Ú_RequestFactoryÚ_RequestHandlerÚURLré   rà   r*   r+   rï   Úsr=   Ú_MsgTyper)   r5   r6   r7   Ú<module>r1     s`  ðÛ Û Û 
Û Û Ý Ý Ý &Ý Ý ÷÷ ÷ ñ ó Û ç ;Ý 'Ý !÷õ õ +ß -ß 0Ý &ß BÝ !Ý $ß 2à
I€áÝ"ð àØØØØðð ðñ	€ð ˜K˜=¨)°NÑ*CÐCÑD€áØØØØØØØØ	Ø	Ø€D‡H�HˆSƒMó	€ô!˜)ô !ô8˜ô 8ñ +Ó,Ð ð €‡��T $¨dÔ3÷ð ó 4ðð �Ð(¨(Ð2Ñ3°\ÐAÑB€ôE
�\õ E
r6   