§
    ­˜ºh‡i  ã                   óæ  — 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 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/m0Z0 d	dl1m2Z2m3Z3 d	dl4m5Z5 d	dl6m7Z7m8Z8 d	dl9m:Z: d	dl;m<Z< d	dl=m>Z>m?Z? dZ@er
d dlAZAd	dlBmCZC ee*e3de"dge<f         ZDee<gee?         f         ZE e*dde)i i dddd ejF        d¦  «        ¦
  «
        ZG G d„ deH¦  «        ZI G d „ d!eH¦  «        ZJ eJ¦   «         ZK ejL        ddd¬"¦  «         G d#„ d$¦  «        ¦   «         ZMeee*eMf         e3f         ZN G d%„ de$¦  «        ZOdS )&é    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)ÚServerr*   zasyncio.Task[None]ÚUNKNOWNú/TFc                   ó   — e Zd ZdZdS )r+   zPayload parsing error.N©Ú__name__Ú
__module__Ú__qualname__Ú__doc__© ó    ú\/var/www/html/services/rag-service/venv/lib/python3.11/site-packages/aiohttp/web_protocol.pyr+   r+   S   s   € € € € € Ø Ð Ð Ð r7   r+   c                   ó   — e Zd ZdZdS )r,   z-Payload was accessed after response was sent.Nr1   r6   r7   r8   r,   r,   W   s   € € € € € Ø7Ð7Ð7Ð7r7   r,   )Úauto_attribsÚfrozenÚslotsc                   ó.   — e Zd ZU eed<   eed<   eed<   dS )Ú_ErrInfoÚstatusÚexcÚmessageN)r2   r3   r4   ÚintÚ__annotations__ÚBaseExceptionÚstrr6   r7   r8   r>   r>   ^   s.   € € € € € € à€K€K�KØ	ÐÐÑØ€L€L�L€L€Lr7   r>   c            !       óF  ‡ — 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d          fd!„¦   «         Zedeeeeeeeef         eeef         f                  fd"„¦   «         Zedefd#„¦   «         ZdJd%ee         dd&fd'„Zd(e	j        dd&fˆ fd)„Zd*ee         dd&fˆ fd+„Z d,e!dd&fd-„Z"dKd.„Z#d/e$dd&fd0„Z%d1edd&fd2„Z&dKd3„Z'dKd4„Z(d5e)d6e*d7ee         dd&fd8„Z+d9e!d:e!dd&fd;„Z,d9e!d:e!dd&fd<„Z-dKd=„Z.d5e)d>ee         d?e/e)ge0e*         f         dee*ef         fd@„Z1dKdA„Z2d5e)dBe*d>ee         dee*ef         fdC„Z3	 	 	 dLd5e)dEed*ee         dFee         de*f
dG„Z4dHe5de/e)ge0e*         f         fdI„Z6ˆ xZ7S )Mr*   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_progressÚ_logging_enabledÚ_cachei.  TFiþ  i €  g      $@i   é   )Úkeepalive_timeoutr#   rZ   Úaccess_log_classr\   Úaccess_log_formatr[   Úmax_line_sizeÚmax_headersÚmax_field_sizeÚlingering_timeÚread_bufsizeÚauto_decompressÚtimeout_ceil_thresholdÚmanagerr-   Úloopre   r#   rZ   rf   r\   rg   r[   rh   ri   rj   rk   rl   rm   rn   c          
      óþ  •— t          ¦   «                              |¦  «         d| _        d| _        d | _        || _        |j        | _        |j        | _	        || _
        d| _        d | _        || _        t          |¦  «        | _        t!          ¦   «         | _        d| _        d | _        d | _        d | _        d| _        d | _        t1          | |||
||t2          |¬¦  «        | _        d| _        	 t          |¦  «        | _        n# t8          t:          f$ r Y nw xY w|| _        |	| _        || _         |r# |||¦  «        | _!        | j!        j"        | _#        nd | _!        d| _#        d| _$        d| _%        d| _&        i | _'        d S )Nr   Fg        r7   )rh   rj   ri   Úpayload_exceptionrm   rd   )(ÚsuperÚ__init__rG   rH   r_   rI   Úrequest_handlerrJ   Úrequest_factoryrK   rL   rM   rN   rO   ÚfloatrP   r   rQ   rR   rT   rS   rU   rV   rW   r   r+   rX   r`   Ú	TypeErrorÚ
ValueErrorrZ   r[   r\   r   Úenabledrb   r]   r^   ra   rc   )Úselfro   rp   re   r#   rZ   rf   r\   rg   r[   rh   ri   rj   rk   rl   rm   rn   Ú	__class__s                    €r8   rt   zRequestHandler.__init__±   s´  ø€ õ* 	‰Œ×Ò˜ÑÔÐð  ˆÔØˆŒØ7;ˆÔØ*1ˆŒØ;BÔ;RˆÔØ;BÔ;RˆÔà+ˆÔà*-ˆÔ'Ø;?ˆÔØ"3ˆÔÝ$ ^Ñ4Ô4ˆÔå*/©'¬'ˆŒØ ˆÔà7;ˆŒØ?CˆÔØ;?ˆÔàˆŒØ$(ˆÔÝ<MØØØØ'Ø)Ø#Ý1Ø+ð	=
ñ 	=
ô 	=
ˆÔð /0ˆÔ$ð	Ý+0Ð1GÑ+HÔ+HˆDÔ(Ð(øÝ�:Ð&ð 	ð 	ð 	ØˆDð	øøøð ˆŒØˆŒ
Ø$ˆŒØð 	*ØAQÐAQØÐ-ñBô BˆDÔð %)Ô$6Ô$>ˆDÔ!Ð!à!%ˆDÔØ$)ˆDÔ!àˆŒØ!ˆÔØ$)ˆÔ!Ø&(ˆŒˆˆs   Ã-D ÄDÄDÚreturnc                 óT   — d                      | j        j        | j        �dnd¦  «        S )Nz<{} {}>Ú	connectedÚdisconnected)Úformatr|   r2   Ú	transport©r{   s    r8   Ú__repr__zRequestHandler.__repr__  s0   € Ø×ÒØŒNÔ#Øœ>Ð5ˆKˆK¸>ñ
ô 
ð 	
r7   zssl.SSLContextc                 óH   — | j         €dn| j                              d¦  «        S )zReturn SSLContext if available.NÚ
sslcontext©r‚   Úget_extra_inforƒ   s    r8   Ússl_contextzRequestHandler.ssl_context  s+   € ð
 Œ~Ð%ð ˆDà”×.Ò.¨|Ñ<Ô<ð	
r7   c                 óH   — | j         €dn| j                              d¦  «        S )zReturn peername if available.NÚpeernamer‡   rƒ   s    r8   r‹   zRequestHandler.peername  s+   € ð Œ~Ð%ð ˆDà”×.Ò.¨zÑ:Ô:ð	
r7   c                 ó   — | j         S ©N)rO   rƒ   s    r8   re   z RequestHandler.keepalive_timeout  s   € àÔ&Ð&r7   ç      .@ÚtimeoutNc              ƒ   ól  K  — d| _         | j        �| j                             ¦   «          | j        rÈ| j                             ¦   «         | _        	 t          |¦  «        4 ƒd{V —† | j        ƒ d{V —† ddd¦  «        ƒd{V —† n# 1 ƒd{V —†swxY w Y   nb# t          j	        t          j
        f$ rD d| _        t          j        dk    r*t          j        ¦   «         x}r|                     ¦   «         r‚ Y nw xY w	 t          |¦  «        4 ƒd{V —† | j        �+| j                             t          j	        ¦   «         ¦  «         | j        �8| j                             ¦   «         st          j        | j        ¦  «        ƒ d{V —† ddd¦  «        ƒd{V —† n# 1 ƒd{V —†swxY w Y   n[# t          j	        t          j
        f$ r= t          j        dk    r*t          j        ¦   «         x}r|                     ¦   «         r‚ Y nw xY w| j        �| j                             ¦   «          |                      ¦   «          dS )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^   rN   Úcancelra   Ú_loopÚcreate_futurerS   r   ÚasyncioÚCancelledErrorÚTimeoutErrorÚsysÚversion_infoÚcurrent_taskÚ
cancellingr_   Ú_cancelrU   ÚdoneÚshieldÚforce_close)r{   r�   Útasks      r8   ÚshutdownzRequestHandler.shutdown   sg  è è € ð !ˆÔàÔ!Ð-ØÔ"×)Ò)Ñ+Ô+Ð+ð Ô$ð 	ð $(¤:×#;Ò#;Ñ#=Ô#=ˆDÔ ð
Ý'¨Ñ0Ô0ð /ð /ð /ð /ð /ð /ð /ð /ØÔ.Ð.Ð.Ð.Ð.Ð.Ð.Ð.ð/ð /ð /ñ /ô /ð /ð /ð /ð /ð /ð /ð /ð /ð /ð /ð /ð /ð /ð /ð /ð /ð /ð /øøøð /ð /ð /ð /øøåÔ*­GÔ,@ÐAð ð ð Ø'+�Ô$åÔ$¨Ò/Ð/Ý!(Ô!5Ñ!7Ô!7Ð7˜ð 0àŸšÑ)Ô)ð 0ð øøðøøøð	Ý# GÑ,Ô,ð =ð =ð =ð =ð =ð =ð =ð =ØÔ(Ð4ØÔ)×1Ò1µ'Ô2HÑ2JÔ2JÑKÔKÐKàÔ%Ð1¸$Ô:L×:QÒ:QÑ:SÔ:SÐ1Ý!œ.¨Ô);Ñ<Ô<Ð<Ð<Ð<Ð<Ð<Ð<Ð<ð=ð =ð =ñ =ô =ð =ð =ð =ð =ð =ð =ð =ð =ð =ð =ð =ð =ð =ð =ð =ð =ð =ð =øøøð =ð =ð =ð =øøõ Ô&­Ô(<Ð=ð 	ð 	ð 	åÔ  GÒ+Ð+Ý$Ô1Ñ3Ô3Ð3�Tð ,à—O’OÑ%Ô%ð ,ð øøð	øøøð ÔÐ)ØÔ×%Ò%Ñ'Ô'Ð'à×ÒÑÔÐÐÐso   ÁB Á%BÁ3B Â
BÂB ÂBÂB ÂAC6Ã5C6Ã:F% ÄA2FÆF% Æ
FÆF% Æ FÆ!F% Æ%AG=Ç<G=r‚   c                 óÐ  •— t          ¦   «                              |¦  «         t          t          j        |¦  «        }| j        rt          |¦  «         | j        €J ‚| j                             | |¦  «         | j        }t          j
        dk    r*t          j        |                      ¦   «         |d¬¦  «        }n'|                     |                      ¦   «         ¦  «        }|| _        d S )N©r’   é   T©rp   Úeager_start)rs   Úconnection_mader   r—   Ú	TransportrL   r#   rI   r•   rš   r›   ÚTaskÚstartÚcreate_taskrU   )r{   r‚   Úreal_transportrp   r¢   r|   s        €r8   r©   zRequestHandler.connection_madeR  sÊ   ø€ Ý‰Œ×Ò 	Ñ*Ô*Ð*å�gÔ/°Ñ;Ô;ˆØÔð 	*Ý˜.Ñ)Ô)Ð)àŒ}Ð(Ð(Ð(ØŒ×%Ò% d¨NÑ;Ô;Ð;àŒzˆÝÔ˜wÒ&Ð&Ý”< §
¢
¡¤°4ÀTÐJÑJÔJˆDˆDà×#Ò# D§J¢J¡L¤LÑ1Ô1ˆDØ!ˆÔÐÐr7   r@   c                 óR  •— | j         €d S | j                              | |¦  «         | j         j        }|                      ¦   «          t	          ¦   «                              |¦  «         d | _         d | _        d | _        d | _        | j        �| j         	                    ¦   «          | j
        �+|€t          d¦  «        }| j
                             |¦  «         |r | j        �| j         	                    ¦   «          d | _        | j        �"| j                             ¦   «          d | _        d S d S )NzConnection lost)rI   Úconnection_lostÚhandler_cancellationr¡   rs   rK   rJ   rX   rN   r”   r_   ÚConnectionResetErrorrž   rU   rW   Úfeed_eof)r{   r@   r±   r|   s      €r8   r°   zRequestHandler.connection_lostc  s0  ø€ ØŒ=Ð ØˆFØŒ×%Ò% d¨CÑ0Ô0Ð0ð  $œ}ÔAÐà×ÒÑÔÐÝ‰Œ×Ò Ñ$Ô$Ð$ØˆŒØ $ˆÔØ $ˆÔØ#ˆÔàÔ!Ð-ØÔ"×)Ò)Ñ+Ô+Ð+àÔ Ð,Øˆ{Ý*Ð+<Ñ=Ô=�ØÔ!×)Ò)¨#Ñ.Ô.Ð.àð 	( DÔ$6Ð$BØÔ×%Ò%Ñ'Ô'Ð'à!ˆÔàÔÐ+ØÔ ×)Ò)Ñ+Ô+Ð+Ø#'ˆDÔ Ð Ð ð ,Ð+r7   Úparserc                 ó„   — | j         �J ‚|| _         | j        r(| j                              | j        ¦  «         d| _        d S d S )Nr7   )rW   rR   Ú	feed_data)r{   r´   s     r8   Ú
set_parserzRequestHandler.set_parserƒ  sV   € àÔ#Ð+Ð+Ð+à%ˆÔàÔð 	%ØÔ ×*Ò*¨4Ô+=Ñ>Ô>Ð>Ø!$ˆDÔÐÐð	%ð 	%r7   c                 ó   — d S r�   r6   rƒ   s    r8   Úeof_receivedzRequestHandler.eof_received�  s   € Øˆr7   Údatac                 óÂ  — | j         s| j        rd S | j        €ì| j        så| j        €J ‚	 | j                             |¦  «        \  }}}n:# t          $ r-}t          d||j        ¬¦  «        t          fg}d}d}Y d }~nd }~ww xY w|pdD ]1\  }}| xj
        dz  c_
        | j                             ||f¦  «         Œ2| j        }|r+|�)|                     ¦   «         s|                     d ¦  «         || _        |r|r|| _        d S d S d S | j        €| j        r|r| xj        |z  c_        d S |r5| j                             |¦  «        \  }	}|	r|                      ¦   «          d S d S d S )Ni�  )r?   r@   rA   Fr7   r6   r   )r^   r]   rW   rV   rX   r¶   r   r>   rA   r!   rG   rQ   ÚappendrT   rŸ   Ú
set_resultrR   Úclose)
r{   rº   ÚmessagesÚupgradedÚtailr@   ÚmsgÚpayloadÚwaiterÚeofs
             r8   Údata_receivedzRequestHandler.data_received�  sî  € ØÔð 	 ¤ð 	ØˆFð ÔÐ'°´Ð'ØÔ'Ð3Ð3Ð3ðØ+/Ô+?×+IÒ+IÈ$Ñ+OÔ+OÑ(�˜( D DøÝ&ð ð ð å S¨c¸3¼;ÐGÑGÔGÍÐWð�ð !�Ø������øøøøðøøøð !) ¨Bð 6ð 6‘��WØÐ#Ô# qÑ(Ð#Ô#Ø”×%Ò% s¨G nÑ5Ô5Ð5Ð5à”\ˆFØð (˜FÐ.°v·{²{±}´}Ð.à×!Ò! $Ñ'Ô'Ð'à$ˆDŒMØð *˜Dð *Ø%)�Ô"Ð"Ð"ð*ð *ð *ð *ð Ô!Ð)¨d¬mÐ)ÀÐ)ØÐÔ $Ñ&ÐÔÐÐð ð 	ØÔ,×6Ò6°tÑ<Ô<‰IˆC�Øð Ø—
’
‘”���ð	ð 	ðð s   ©A Á
A?Á#A:Á:A?Úvalc                 óf   — || _         | j        r"| j                             ¦   «          d| _        dS dS )zMSet keep-alive connection mode.

        :param bool val: new state.
        N)rH   rN   r”   )r{   rÇ   s     r8   Ú
keep_alivezRequestHandler.keep_alive·  sC   € ð
 ˆŒØÔ!ð 	*ØÔ"×)Ò)Ñ+Ô+Ð+Ø%)ˆDÔ"Ð"Ð"ð	*ð 	*r7   c                 óX   — d| _         | j        r| j                             ¦   «          dS dS )z�Close connection.

        Stop accepting new pipelining messages and close
        connection when handlers done processing messages.
        TN)r]   rT   r”   rƒ   s    r8   r¾   zRequestHandler.closeÁ  s9   € ð ˆŒØŒ<ð 	"ØŒL×ÒÑ!Ô!Ð!Ð!Ð!ð	"ð 	"r7   c                 ó¦   — d| _         | j        r| j                             ¦   «          | j        �"| j                             ¦   «          d| _        dS dS )zForcefully close connection.TN)r^   rT   r”   r‚   r¾   rƒ   s    r8   r¡   zRequestHandler.force_closeË  sW   € à ˆÔØŒ<ð 	"ØŒL×ÒÑ!Ô!Ð!ØŒ>Ð%ØŒN× Ò Ñ"Ô"Ð"Ø!ˆDŒNˆNˆNð &Ð%r7   ÚrequestÚresponseÚtimec                 ó¶   — | j         �O| j         j        rEt          r|€J ‚| j                              ||| j                             ¦   «         |z
  ¦  «         d S d S d S r�   )r   rz   r   Úlogr•   rÎ   )r{   rÌ   rÍ   rÎ   s       r8   Ú
log_accesszRequestHandler.log_accessÔ  sl   € ð ÔÐ)¨dÔ.@Ô.HÐ)Ýð (ØÐ'Ð'Ð'ØÔ×"Ò" 7¨H°d´j·o²oÑ6GÔ6GÈ$Ñ6NÑOÔOÐOÐOÐOð *Ð)Ð)Ð)r7   ÚargsÚkwc                 ó<   — | j         r | j        j         |i |¤Ž d S d S r�   )r[   rZ   ©r{   rÒ   rÓ   s      r8   Ú	log_debugzRequestHandler.log_debugÜ  s6   € ØŒ:ð 	+ØˆDŒKÔ˜tÐ* rÐ*Ð*Ð*Ð*Ð*ð	+ð 	+r7   c                 ó*   —  | j         j        |i |¤Ž d S r�   )rZ   Ú	exceptionrÕ   s      r8   Úlog_exceptionzRequestHandler.log_exceptionà  s"   € ØˆŒÔ˜tÐ* rÐ*Ð*Ð*Ð*Ð*r7   c                 ó8  — d | _         | j        s| j        sd S | j        }|                     ¦   «         }| j        }||k     r"|                     || j        ¦  «        | _         d S | j        r/| j         	                    ¦   «         s|  
                    ¦   «          d S d S d S r�   )rN   r^   rH   r•   rÎ   rM   Úcall_atÚ_process_keepaliverT   rŸ   r¡   )r{   rp   ÚnowÚ
close_times       r8   rÜ   z!RequestHandler._process_keepaliveã  sµ   € Ø!%ˆÔØÔð 	 D¤Oð 	ØˆFàŒzˆØ�iŠi‰kŒkˆØÔ4ˆ
Ø�ÒÐà%)§\¢\°*¸dÔ>UÑ%VÔ%VˆDÔ"ØˆFð Œ<ð 	 ¤× 1Ò 1Ñ 3Ô 3ð 	Ø×ÒÑÔÐÐÐð	ð 	ð 	ð 	r7   Ú
start_timeru   c              ƒ   óª  K  — d| _         	 	 || _         ||¦  «        ƒ d {V —†}d | _        n# d | _        w xY w	 t          |dd¦  «        rt          j        dt
          ¦  «         |                      |||¦  «        ƒ d {V —†\  }}nõ# t          $ r,}|}|                      |||¦  «        ƒ d {V —†\  }}Y d }~nÄd }~wt          j	        $ r ‚ t          j
        $ rW}|                      d|¬¦  «         |                      |d¦  «        }|                      |||¦  «        ƒ d {V —†\  }}Y d }~nQd }~wt          $ rA}|                      |d|¦  «        }|                      |||¦  «        ƒ d {V —†\  }}Y d }~nd }~ww xY wd| _         | j        �| j                             d ¦  «         n.# d| _         | j        �| j                             d ¦  «         w w xY w||fS )	NTÚ__http_exception__Fzlreturning HTTPException object is deprecated (#2415) and will be removed, please raise the exception insteadzRequest handler timed out.©Úexc_infoiø  éô  )ra   r_   ÚgetattrÚwarningsÚwarnÚDeprecationWarningÚfinish_responser$   r—   r˜   r™   rÖ   Úhandle_errorÚ	ExceptionrS   r½   )r{   rÌ   rß   ru   ÚrespÚresetr@   s          r8   Ú_handle_requestzRequestHandler._handle_requestô  s—  è è € ð %)ˆÔ!ð 	6ð-Ø(/�Ô%Ø,˜_¨WÑ5Ô5Ð5Ð5Ð5Ð5Ð5Ð5�à(,�Ô%Ð%ø¨�Ô%Ð,Ð,Ð,Ð,Ð%õ �tÐ1°5Ñ9Ô9ð Ý”ð9õ 'ñ	ô ð ð !%× 4Ò 4°W¸dÀJÑ OÔ OÐOÐOÐOÐOÐOÐO‰KˆD�%�%øõ- ð 	Pð 	Pð 	PØˆDØ $× 4Ò 4°W¸dÀJÑ OÔ OÐOÐOÐOÐOÐOÐO‰KˆD�%�%�%�%�%�%øøøøÝÔ%ð 	ð 	ð 	ØÝÔ#ð 	Pð 	Pð 	PØ�NŠNÐ7À#ˆNÑFÔFÐFØ×$Ò$ W¨cÑ2Ô2ˆDØ $× 4Ò 4°W¸dÀJÑ OÔ OÐOÐOÐOÐOÐOÐO‰KˆD�%�%�%�%�%�%øøøøÝð 	Pð 	Pð 	PØ×$Ò$ W¨c°3Ñ7Ô7ˆDØ $× 4Ò 4°W¸dÀJÑ OÔ OÐOÐOÐOÐOÐOÐO‰KˆD�%�%�%�%�%�%øøøøð	Pøøøð ).ˆDÔ%ØÔ#Ð/ØÔ$×/Ò/°Ñ5Ô5Ð5øøð ).ˆDÔ%ØÔ#Ð/ØÔ$×/Ò/°Ñ5Ô5Ð5Ð5ð 0øøøð �Uˆ{Ðsa   Œ, ¤B ¬	5µB ¹AF# Â
E7Â"B6Â1F# Â6!E7ÃAD)Ä$F# Ä)E7Ä67E2Å-F# Å2E7Å7F# Æ#+Gc           	   ƒ   óì
  K  — | j         }| j        }|€J ‚| j        }d}| j        €J ‚| j        €J ‚| j        �s
| j        s;	 |                     ¦   «         | _        | j        ƒ d{V —† d| _        n# d| _        w xY w| j         	                    ¦   «         \  }}| j
        r|                     ¦   «         nd}|xj        dz  c_        t          | |¦  «        }t          |t          ¦  «        r|                      |¦  «        }	t"          }n| j        }	|                      ||| || j        pt'          j        |¦  «        ¦  «        }
	 |                      |
||	¦  «        }t,          j        dk    rt'          j        ||d¬¦  «        }n|                     |¦  «        }	 |ƒ d{V —†\  }}nK# t4          $ r> |                      d¦  «         Y d|
_        | j        €|�|                      d¦  «         �n[w xY w~|r=|                      d¦  «         	 d|
_        | j        €|�|                      d¦  «         �nt=          |j        ¦  «        | _         | !                    ¦   «         �s€| j"        }| j        �s-|�r*|                      d	|¦  «         |                     ¦   «         }||z   }	 | !                    ¦   «         sŠ||k     r„tG          ||z
  ¦  «        4 ƒd{V —† | $                    ¦   «         ƒ d{V —† ddd¦  «        ƒd{V —† n# 1 ƒd{V —†swxY w Y   |                     ¦   «         }| !                    ¦   «         s||k     °„n[# t&          j%        t&          j&        f$ r= t,          j        d
k    r*t'          j        ¦   «         x}r| '                    ¦   «         r‚ Y nw xY w| !                    ¦   «         s0| j        s)|                      d¦  «         |  (                    ¦   «          | )                    tT          ¦  «         n˜# t&          j%        $ r+ |                      d¦  «         |  +                    ¦   «          ‚ tX          $ r5}|  -                    d|¬¦  «         |  +                    ¦   «          Y d}~n&d}~wt\          $ r |  +                    ¦   «          ‚ w xY wd|
_        | j        €|�|                      d¦  «         n,# d|
_        | j        €|�|                      d¦  «         w w w xY w| j         rT| j/        sM| j        sF|                     ¦   «         |z   }|| _0        | j1        € | 2                    || j3        ¦  «        | _1        nn| j        �¯
| j        s)d| _        | j        �| j         (                    ¦   «          dS dS dS )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â   )4r•   rI   rO   rK   rJ   r^   rQ   r–   rT   Úpopleftrb   rÎ   Úrequests_countr   Ú
isinstancer>   Ú_make_error_handlerÚERRORrU   r—   rœ   rî   rš   r›   r«   r­   ÚConnectionErrorrÖ   Ú_taskr‚   ÚboolrÉ   rH   Úis_eofrP   r   Úreadanyr˜   r™   r�   r¾   Úset_exceptionÚ_PAYLOAD_ACCESS_ERRORr¡   rë   rÙ   rD   r]   rM   rN   rÛ   rÜ   )r{   rp   ro   re   rì   rA   rÃ   r¬   Úwriterru   rÌ   Úcoror¢   rí   rk   rÝ   Úend_tÚtr@   rÞ   s                       r8   r¬   zRequestHandler.start  sÎ  è è € ð ŒzˆØ”-ˆØÐ"Ð"Ð"Ø Ô3ÐØˆØÔ$Ð0Ð0Ð0ØÔ$Ð0Ð0Ð0àÔ#ñ p	Ø”>ð (ð(à#'×#5Ò#5Ñ#7Ô#7�D”LØœ,Ð&Ð&Ð&Ð&Ð&Ð&Ð&à#'�D”L�Lø 4�D”LÐ'Ð'Ð'Ð'à#œ~×5Ò5Ñ7Ô7ÑˆG�Wð $(Ô#8ÐB�D—I’I‘K”K�K¸dˆEàÐ"Ô" aÑ'Ð"Ô"Ý! $¨Ñ-Ô-ˆFÝ˜'¥8Ñ,Ô,ð 8à"&×":Ò":¸7Ñ"CÔ"C�Ý��à"&Ô"7�ð
 ×+Ò+ØØØØØÔ"Ð@¥gÔ&:¸4Ñ&@Ô&@ñô ˆGðCNà×+Ò+¨G°U¸OÑLÔL�ÝÔ# wÒ.Ð.Ý"œ<¨°4ÀTÐJÑJÔJ�D�Dà×+Ò+¨DÑ1Ô1�DðØ(, * * * * * *‘K�D˜%˜%øÝ&ð ð ð Ø—N’NÐ#KÑLÔLÐLØðl !%�”Ø”>Ð)¨dÐ.>Ø—N’NÐ#LÑMÔMÐMùðuøøøð
 Øð Ø—N’NÐ#MÑNÔNÐNØð` !%�”Ø”>Ð)¨dÐ.>Ø—N’NÐ#LÑMÔMÐMùõ_ #' t¤Ñ"7Ô"7�”ð —~’~Ñ'Ô'ñ %Ø%)Ô%9�NØÔ,ñ &°ñ &ØŸšØEÀ~ñô ð ð #Ÿiši™kœk˜Ø # nÑ 4˜ð&Ø&-§n¢nÑ&6Ô&6ð 2¸3Àº;¸;Ý+7¸À¹Ñ+DÔ+Dð !<ð !<ð !<ð !<ð !<ð !<ð !<ð !<à*1¯/ª/Ñ*;Ô*;Ð$;Ð$;Ð$;Ð$;Ð$;Ð$;Ð$;ð!<ð !<ð !<ñ !<ô !<ð !<ð !<ð !<ð !<ð !<ð !<ð !<ð !<ð !<ð !<ð !<ð !<ð !<ð !<ð !<ð !<ð !<ð !<øøøð !<ð !<ð !<ð !<ð '+§i¢i¡k¤k ð	 '.§n¢nÑ&6Ô&6ð 2¸3Àº;¸;øøõ
 !(Ô 6½Ô8LÐMð &ð &ð &å #Ô 0°GÒ ;Ð ;Ý*1Ô*>Ñ*@Ô*@Ð%@ Qð !<à$%§L¢L¡N¤Nð !<ð !&øøð&øøøð #Ÿ>š>Ñ+Ô+ð %°DÔ4Eð %ØŸšÐ'=Ñ>Ô>Ð>ØŸ
š
™œ˜à×%Ò%Õ&;Ñ<Ô<Ð<Ð<øåÔ)ð ð ð Ø—’ÐGÑHÔHÐHØ× Ò Ñ"Ô"Ð"ØÝð #ð #ð #Ø×"Ò"Ð#8À3Ð"ÑGÔGÐGØ× Ò Ñ"Ô"Ð"Ð"Ð"Ð"Ð"Ð"øøøøÝ ð ð ð Ø× Ò Ñ"Ô"Ð"Øðøøøð !%�”Ø”>Ð)¨dÐ.>Ø—N’NÐ#LÑMÔMÐMøøð !%�”Ø”>Ð)¨dÐ.>Ø—N’NÐ#LÑMÔMÐMÐMð *Ð.>øøøð Œð 	 t¤{ð 	¸4Ô;Lð 	à!ŸYšY™[œ[Ð+<Ñ<�
Ø2<�Ô/ØÔ)Ð1Ø-1¯\ª\Ø" DÔ$;ñ.ô .�DÔ*øð ða Ô#ñ p	ðf Ô ð 	'Ø!%ˆDÔØŒ~Ð)Ø”×$Ò$Ñ&Ô&Ð&Ð&Ð&ð	'ð 	'à)Ð)s³   Á &A. Á.	A7Ä?AO4 ÆF  ÆO4 Æ G(Æ?O4 Ç'G(Ç(O4 È+A/O4 Ê2L: ËK:Ë(L: Ë:
LÌL: ÌLÌ1L: Ì9O4 Ì:ANÎO4 ÎNÎA!O4 Ï3R2 Ï4AR	Ð6+Q&Ñ!R2 Ñ&#R	Ò	R2 Ò2)Srì   c              ƒ   óè  K  — |                      ¦   «          | j        �N| j                             d¦  «         d| _        | j        r&| j                             | j        ¦  «         d| _        	 |j        }nŒ# t          $ r |€|                      d¦  «         n(|                      d 	                    |¦  «        ¦  «         t          ¦   «         }t          |j        |j        |j        |j        ¬¦  «        }|j        }Y nw xY w	  ||¦  «        ƒ d{V —† |                     ¦   «         ƒ d{V —† n+# t"          $ r |                      |||¦  «         |dfcY S w xY w|                      |||¦  «         |dfS )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.
        NFr7   z+Missing return statement on request handlerz7Web-handler should return a response instance, got {!r})r?   ÚreasonÚtextÚheadersT)Ú_finishrX   Úset_upgradedrV   rR   r¶   ÚprepareÚAttributeErrorrÙ   r�   r%   r(   r?   r  r  r  Ú	write_eofrõ   rÑ   )r{   rÌ   rì   rß   Úprepare_methr@   s         r8   ré   zRequestHandler.finish_response¨  sÈ  è è € ð 	�ŠÑÔÐØÔÐ+ØÔ ×-Ò-¨eÑ4Ô4Ð4Ø!ˆDŒMØÔ!ð )ØÔ$×.Ò.¨tÔ/AÑBÔBÐBØ%(�Ô"ð	(Øœ<ˆLˆLøÝð 	(ð 	(ð 	(Øˆ|Ø×"Ò"Ð#PÑQÔQÐQÐQà×"Ò"ðß%šv d™|œ|ñô ð õ *Ñ+Ô+ˆCÝØ”z¨#¬*¸3¼8ÈSÌ[ðñ ô ˆDð  œ<ˆLˆLˆLð	(øøøð	Ø�,˜wÑ'Ô'Ð'Ð'Ð'Ð'Ð'Ð'Ð'Ø—.’.Ñ"Ô"Ð"Ð"Ð"Ð"Ð"Ð"Ð"Ð"øÝð 	ð 	ð 	Ø�OŠO˜G T¨:Ñ6Ô6Ð6Ø˜�:ÐÐÐð	øøøð 	�Š˜  zÑ2Ô2Ð2Ø�Uˆ{Ðs%   Á-A5 Á5BC>Ã=C>Ä+D. Ä.%EÅErä   r?   rA   c                 ó  — | j         dk    r8t          |t          ¦  «        r#| j                             d|j        |¬¦  «         n|                      d|j        |¬¦  «         |j        j        dk    rt          d¦  «        ‚d}|t          j        k    rÒd                     t          j        ¦  «        }t          j        j        }d}| j        r?t          t          ¦  «        5  t!          j        ¦   «         }ddd¦  «         n# 1 swxY w Y   d	|j                             d
d¦  «        v r1|rt)          |¦  «        }d|› d�}d                     ||¬¦  «        }d	}n|r|}|dz   |z   }t+          |||¬¦  «        }	|	                     ¦   «          |	S )z›Handle errors.

        Returns HTTP response with specific status code. Logs additional
        information. It always closes current connection.
        r   zError handling request from %srâ   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)rG   rò   r   rZ   r[   ÚremoterÙ   rü   Úoutput_sizerõ   r   ÚINTERNAL_SERVER_ERRORr�   Údescriptionr   rë   Ú	tracebackÚ
format_excr  ÚgetÚhtml_escaper(   r¡   )
r{   rÌ   r?   r@   rA   Úctr  rÂ   Útbrì   s
             r8   rê   zRequestHandler.handle_errorÒ  s  € ð Ô !Ò#Ð#­
°3½Ñ(FÔ(FÐ#ð
 ŒK×ÒØ0°'´.È3ð ñ ô ð ð ð ×ÒØ0°'´.È3ð ñ ô ð ð
 Œ>Ô%¨Ò)Ð)Ý!ð)ñô ð ð
 ˆØ•ZÔ5Ò5Ð5Ø*×1Ò1µ*Ô2RÑSÔSˆEÝÔ2Ô>ˆCØˆBØŒzð 0Ý�iÑ(Ô(ð 0ð 0Ý"Ô-Ñ/Ô/�Bð0ð 0ð 0ñ 0ô 0ð 0ð 0ð 0ð 0ð 0ð 0øøøð 0ð 0ð 0ð 0ð ˜gœo×1Ò1°(¸BÑ?Ô?Ð?Ð?Øð BÝ$ R™œ�BØA°rÐAÐAÐA�Cð0÷ ’&˜u¨#�&Ñ.Ô.ð ð !��àð Ø�CØ &™.¨3Ñ.�å˜v¨GÀ"ÐEÑEÔEˆØ×ÒÑÔÐàˆs   ÃC?Ã?DÄDÚerr_infoc                 ó4   ‡ ‡— dt           dt          fˆˆ fd„}|S )NrÌ   r}   c              “   óV   •K  — ‰                      | ‰j        ‰j        ‰j        ¦  «        S r�   )rê   r?   r@   rA   )rÌ   r  r{   s    €€r8   Úhandlerz3RequestHandler._make_error_handler.<locals>.handler  s/   øè è € Ø×$Ò$Ø˜œ¨(¬,¸Ô8Hñô ð r7   )r'   r)   )r{   r  r  s   `` r8   ró   z"RequestHandler._make_error_handler  s<   øø€ ð	¥;ð 	µ>ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð
 ˆr7   )rŽ   )r}   N)rä   NN)8r2   r3   r4   r5   Ú	__slots__r    r&   r   Ú
LOG_FORMATr—   ÚAbstractEventLooprw   r÷   r   r   r   rE   rB   rt   r„   r   r   r‰   r   r   r‹   Úpropertyre   r£   ÚBaseTransportr©   rD   r°   r	   r·   r¹   ÚbytesrÆ   rÉ   r¾   r¡   r'   r)   rÑ   rÖ   rÙ   rÜ   r   r
   rî   r¬   ré   rê   r>   ró   Ú__classcell__)r|   s   @r8   r*   r*   h   s(  ø€ € € € € ð%ð %ðN€IðN $(Ø"Ø&Ø7CØ*Ø!-Ô!8ØØ!Ø Ø"Ø $Ø!Ø $Ø()ð'O)ð O)ð O)àðO)ð Ô'ð	O)ð !ðO)ð ðO)ð ðO)ð Ð3Ô4ðO)ð ðO)ð ðO)ð ðO)ð ðO)ð ðO)ð ðO)ð  ð!O)ð" ð#O)ð$ ð%O)ð& !&ð'O)ð O)ð O)ð O)ð O)ð O)ðb
˜#ð 
ð 
ð 
ð 
ð ð
˜XÐ&6Ô7ð 
ð 
ð 
ñ Ôð
ð ð
à	�%˜˜U 3¨¨S°#Ð#5Ô6¸¸cÀ3¸h¼ÐGÔHÔ	Ið
ð 
ð 
ñ Ôð
ð ð' 5ð 'ð 'ð 'ñ „Xð'ð0ð 0 h¨u¤oð 0Àð 0ð 0ð 0ð 0ðd"¨Ô)>ð "À4ð "ð "ð "ð "ð "ð "ð"( 8¨MÔ#:ð (¸tð (ð (ð (ð (ð (ð (ð@% ð %¨ð %ð %ð %ð %ðð ð ð ð% %ð %¨Dð %ð %ð %ð %ðN*˜dð * tð *ð *ð *ð *ð"ð "ð "ð "ð"ð "ð "ð "ðPØ"ðPØ.<ðPØDLÈUÄOðPà	ðPð Pð Pð Pð+˜sð +¨#ð +°$ð +ð +ð +ð +ð+ 3ð +¨cð +°dð +ð +ð +ð +ðð ð ð ð")àð)ð ˜U”Oð)ð " ; -°¸>Ô1JÐ"JÔKð	)ð
 
ˆ~˜tÐ#Ô	$ð)ð )ð )ð )ðVG'ð G'ð G'ð G'ðR(Ø"ð(Ø*8ð(ØFNÈuÄoð(à	ˆ~˜tÐ#Ô	$ð(ð (ð (ð (ðZ Ø'+Ø!%ð<ð <àð<ð ð<ð �mÔ$ð	<ð
 ˜#”ð<ð 
ð<ð <ð <ð <ð|Ø ðà	�;�- ¨>Ô!:Ð:Ô	;ðð ð ð ð ð ð ð r7   )Pr—   Úasyncio.streamsrš   r  ræ   Úcollectionsr   Ú
contextlibr   Úhtmlr   r  Ú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*   r6   r7   r8   ú<module>r@     s  ðØ €€€Ø Ð Ð Ð Ø 
€
€
€
Ø Ð Ð Ð Ø €€€Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø &Ð &Ð &Ð &Ð &Ð &Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð €€€Ø €€€Ø +Ð +Ð +Ð +Ð +Ð +à ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'Ø !Ð !Ð !Ð !Ð !Ð !ðð ð ð ð ð ð ð ð ð ð ð ð ð ð +Ð *Ð *Ð *Ð *Ð *Ø -Ð -Ð -Ð -Ð -Ð -Ð -Ð -Ø 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ø &Ð &Ð &Ð &Ð &Ð &Ø BÐ BÐ BÐ BÐ BÐ BÐ BÐ BØ !Ð !Ð !Ð !Ð !Ð !Ø $Ð $Ð $Ð $Ð $Ð $Ø 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2à
I€àð #Ø€J€J€Jà"Ð"Ð"Ð"Ð"Ð"ð àØØØØðð ðô	€ð ˜K˜=¨)°NÔ*CÐCÔD€àÐØØØØØØØØ	Ø	Ø€D„HˆS�M„Mñ	ô 	€ð!ð !ð !ð !ð !˜)ñ !ô !ð !ð8ð 8ð 8ð 8ð 8˜ñ 8ô 8ð 8ð +Ð*Ñ,Ô,Ð ð €„�T $¨dÐ3Ñ3Ô3ðð ð ð ð ñ ô ñ 4Ô3ðð �Ð(¨(Ð2Ô3°\ÐAÔB€ðp
ð p
ð p
ð p
ð p
�\ñ p
ô p
ð p
ð p
ð p
r7   