
    @OOfm                        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Zd dlZd dlZ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 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$ 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+ ddl%m,Z, ddl%m-Z- ddl%m.Z. ddl%m/Z/ ddl0m1Z1 dd l0m2Z2 dd!l0m3Z3 dd"l0m4Z4 dd#l5m6Z6 dd$l5m7Z7 d d%l8m9Z9 d d&l8m:Z: d d'l;m<Z< d d(l=m>Z> d d)l=m?Z? d d*l@mAZA  G d+ d,e      ZBeCeDfZE G d- d.e2      ZFd/eGeHeIeIf      d0eJd1eGeHeIeIf      fd2ZKd/eGeHeIeIf      d1e"d   fd3ZLd4ed5e(d1e"eGeHeIeIf         fd6ZMd4ed5e-d1e"eGeHeIeIf         fd7ZN G d8 d9eF      ZO G d: d;eF      ZPd<eeHeIeIf      d1eHeQeIeIf   e9j                  f   fd=ZSd<eeHeIeIf      d1eHeTeUeIeIeIeIe9j                  f   fd>ZVd<eeHeIeIf      d1eHeUe9j                  f   fd?ZWg d@ZXy)A    N)Sequence)Enum)DEBUG)ERROR)ClassVar   )CloseConnection)Log)RequestWakeup)SendData)Context)ConnectionClosed)DataReceived)Event)Start)Wakeup)CommandGenerator)expect   )RequestData)RequestEndOfMessage)RequestHeaders)RequestProtocolError)RequestTrailers)ResponseData)ResponseEndOfMessage)ResponseHeaders)ResponseProtocolError)ResponseTrailers)format_error)HttpConnection)	HttpEvent)ReceiveHttp)BufferedH2Connection)H2ConnectionLogger)http)version)
Connection)status_codes)url)humanc                       e Zd ZdZdZy)StreamStater      N)__name__
__module____qualname__EXPECTING_HEADERSHEADERS_RECEIVED     c/var/www/premiumrankchecker/venv/lib/python3.12/site-packages/mitmproxy/proxy/layers/http/_http2.pyr-   r-   6   s    r5   r-   c                       e Zd ZU eej
                  j                     ed<    edddd      Z	e
ed<   eeef   ed<   	 eeez     ed<   eeez     ed<   eeez     ed<   eeez     ed	<   d
edef fdZdedefdZdedefdZdeded   fdZdej>                  j8                  dee   fdZ ejB                  jD                  jF                  fde$deded   fdZ%de$ded   fdZ& e'e(e)e*e+      ded   fd       Z, xZ-S )Http2Connectionh2_confF)header_encodingvalidate_outbound_headersnormalize_inbound_headersnormalize_outbound_headersh2_connstreamsReceiveProtocolErrorReceiveDataReceiveTrailersReceiveEndOfMessagecontextconnc                 x   t         |   ||       | j                  rMt        | j                  j
                  j                  | j                  j                        | j                  _
        | j                  j                  j                  | j                  _        t        | j                        | _        i | _        y N)super__init__debugr%   rD   clientpeername	__class__r/   r9   loggeroptionsvalidate_inbound_headersr$   r>   r?   )selfrD   rE   rM   s      r6   rI   zHttp2Connection.__init__P   s    $'::"4##,,dnn.E.E#DLL LL  99 	- ,DLL9r5   	stream_idreturnc                 R   | j                   j                  j                  |d      }||j                  j                  t
        j                  j                  j                  urE| j                   j                  j                  t
        j                  j                  j                  uryy)z$Check if a non-idle stream is closedNFT)r>   r?   getstate_machinestateh2streamr-   CLOSED
connectionConnectionStaterQ   rR   rY   s      r6   	is_closedzHttp2Connection.is_closed\   s{    %%)))T:$$**"))2G2G2N2NN**00==00778 r5   c                    | j                   j                  j                  |d      }||j                  j                  t
        j                  j                  j                  ur|j                  j                  t
        j                  j                  j                  urE| j                   j                  j                  t
        j                  j                  j                  uryy)z+Check if we can write to a non-idle stream.NTF)r>   r?   rU   rV   rW   rX   rY   r-   HALF_CLOSED_LOCALrZ   r[   r\   r]   s      r6   is_open_for_uszHttp2Connection.is_open_for_usi   s    %%)))T:$$**99((::;$$**"))2G2G2N2NN**00==00778 r5   eventNc              #   
  K   t        |t              rK| j                  j                          t	        | j
                  | j                  j                                y t        |t              rdt        |t        t        f      rN| j                  |j                        r| j                  j                  |j                  |j                         nt        |t        t        f      r\| j                  |j                        rg |j                   j"                  }| j                  j%                  |j                  |       nXt        |t&        t(        f      rC| j                  |j                        r&| j                  j+                  |j                         nt        |t,        t.        f      r| j1                  |j                        st2        j4                  t6        j8                  j:                  j<                  ij?                  |j@                  t6        j8                  j:                  jB                        }| j                  jD                  |j                     }t        |t.              xrS | j                  |j                        xr6 |jF                  jH                   xr |j@                  t2        jJ                  k7  }|r| j                  jM                  |j                  dd|j@                  z  fdtN        jP                  jS                         fdg       | j                  j                  |j                  tU        |j@                  |jV                        d       n5| j                  jY                  |j                  |       nt[        d|       | j                  j                         }|rt	        | j
                  |       y y t        |t\              r	 	 | j                  j_                  |j                        }	 |D ]u  }	| jf                  r!ti        | jf                   d	|	 tj               | jm                  |	      E d {   sJ| jf                  rti        | jf                   d
tj                y  | j                  j                         }|rt	        | j
                  |       y y t        |tn              r| jq                  d      E d {    y t[        d|      # t`        $ r(}t6        jb                  je                  d|       |d }~ww xY w# t6        jb                  jd                  $ r}|g}Y d }~Bd }~ww xY w7 7 xw)N   :status   %ds   server)s   content-types	   text/htmlT
end_streamUnexpected event: zuncaught hyper-h2 error: z[h2] z	[h2] donezpeer closed connection)9
isinstancer   r>   initiate_connectionr   rE   data_to_sendr"   r   r   ra   rR   	send_datadatar   r   trailersfieldssend_trailersr   r   rg   r   r   r^   r)   CLIENT_CLOSED_REQUESTrX   errors
ErrorCodesCANCELrU   codeINTERNAL_ERRORr?   rV   headers_sentNO_RESPONSEsend_headersr'   	MITMPROXYencoder    messagereset_streamAssertionErrorr   receive_dataCATCH_HYPER_H2_ERRORS
exceptionsProtocolErrorrJ   r
   r   handle_h2_eventr   close_connection)
rQ   rb   rn   ru   rY   send_error_messagerk   eventseh2_events
             r6   _handle_eventzHttp2Connection._handle_eventx   s!    eU#LL,,.499dll&?&?&ABBy)%+|!<=&&u7LL**5??EJJGEO5E#FG&&u77!6!67HLL..uIE$79M#NO&&u7LL++EOO<E$8:O#PQ~~eoo6$::BII<P<P<W<Wc%**bii&:&:&I&IJ  261E1Eeoo1VF"5*?@ C //@C & 4 4 A AAC "JJ,*B*BB	 ' *11!OO!+UUZZ-? @!*G,=,=,D,D,F G ? ..!OO(U]]C'+ /  11%//4H$'9%%ABB<<446Ltyy,77  |,!\\66uzzBF # ::E(<eDD#33H===zz!TZZL	":EBB  <<446Ltyy,77  /0,,-EFFF #5eY!?@@3 -  --553A37	 ==..  > Gsn   O!U%%S3 
AUUUBUU U3	T$<#TT$$T' 'UUUUUUc              #   0  K   t        |t        j                  j                        r| j                  j                  |j                  d      }|t        j                  u r2t        | j                  |j                  |j                               n,|t        j                  u r| j                  d      E d{    y| j                  j                  |j                   |j                         yt        |t        j                  j"                        rGt%        j&                  |j(                        }t        | j+                  |j                  |             yt        |t        j                  j,                        r| j                  j                  |j                  d      }|t        j                  u r't        | j/                  |j                               n|t        j                  u rt1        d      | j3                  |j                        r&| j                  j5                  |j                  d       yt        |t        j                  j6                        r|j                  | j                  v r	 t        j8                  j;                  |j<                        j>                  }t        j8                  j:                  jD                  tF        jH                  ij                  |j<                  | jJ                  jL                        }t        | jK                  |j                  d| d|             | j                  j5                  |j                         y	 yt        |t        jN                  jP                        r| j                  d|       E d{    yt        |t        j                  jR                        r| jU                  d	|      E d{    yt        |t        j                  jV                        r	 yt        |t        j                  jX                        r	 yt        |t        j                  jZ                        r	 yt        |t        j                  j\                        r	 yt        |t        j                  j^                        r	 yt        |t        j                  j`                        rtc        d
td               yt        |t        j                  jf                        r%tc        d|jh                  jj                          yt        |t        j                  jl                        rtc        dtn               yt1        d|      7 # t@        $ r tC        |j<                        }Y w xY w7 7 w)z5returns true if further processing should be stopped.Nz-Received HTTP/2 data frame, expected headers.Tunreachablezstream reset by client ())ru   zHTTP/2 protocol error: zHTTP/2 connection closed: zBReceived HTTP/2 push promise, even though we signalled no support.z$Ignoring unknown HTTP/2 frame type: z;Received HTTP/2 Alt-Svc frame, which will not be forwarded.rh   F)8ri   rX   r   r   r?   rU   rR   r-   r3   r#   rA   rm   r2   protocol_errorr>   acknowledge_received_dataflow_controlled_lengthTrailersReceivedr&   HeadersheadersrB   StreamEndedrC   r~   r^   popStreamResetrr   rs   
error_codename
ValueErrorstrrt   r)   rq   r@   ru   r   r   ConnectionTerminatedr   RemoteSettingsChangedSettingsAcknowledgedPriorityUpdatedPingReceivedPingAckReceivedPushedStreamReceivedr
   r   UnknownFrameReceivedframetypeAlternativeServiceAvailabler   )rQ   rb   rW   rn   err_strerr_codes         r6   r   zHttp2Connection.handle_h2_event   ss    eRYY334LL$$U__d;E444!$"2"25??EJJ"OPP+777..C   LL22,,eooL G ryy99:||EMM2Hd225??HMNNB A ryy445LL$$U__d;E444!$":":5??"KLL+777$]33~~eoo.  $7r q ryy445$,,.4 ii2253C3CDIIG II((//1S1S#e&&(A(A(F(FG  "--27)1=% .     1P M L K r}}::;**-DUG+LMMMryy==>,,/I%-STTT ryy>>?0 / ryy==>, + ryy889( ' ryy556$ # ryy889   ryy==>T   ryy==> <U[[=M=M<NOPP  ryyDDEMu 
  !#5eY!?@@S, " 4!%"2"23G4  N UsX   B5V7U(8G V93U+ ,C2VVA VV F	V+V	VVVVr|   r   c              #   h  K   t        t        j                  | j                  j                         d|        | j
                  j                  ||j                                t        | j                  | j
                  j                                | j                  |      E d {    y 7 w)Nz: )
r
   r+   format_addressrE   rL   r>   r   r{   r   rk   )rQ   r|   r   s      r6   r   zHttp2Connection.protocol_error  s     
 U))$))*<*<=>b	JKK%%j'..2BCtyy$,,";";"=>>((111s   B(B2*B0+B2msgc              #      K   t        | j                         | j                  D ]  }t        | j	                  ||             ! | j                  j                          | j                  | _        y wrG   )r	   rE   r?   r#   r@   cleardoner   )rQ   r   rR   s      r6   r   z Http2Connection.close_connection&  s^     dii(( 	IId77	3GHH	I!YYs   A2A4c              #   $   K   dE d {    y 7 w)Nr4   r4   )rQ   _s     r6   r   zHttp2Connection.done-  s     s   ).r/   r0   r1   r   rX   configH2Configuration__annotations__dicth2_conf_defaultsr$   intr-   r   r   r   r   r   r   r   r   r   r   r(   rI   boolr^   ra   r   r   r   r   r   rr   rs   PROTOCOL_ERRORr   r   r   r   r   r"   r   r   r   __classcell__rM   s   @r6   r8   r8   >   s   bii//00"'"'#( "!#{"##Q36KKLLkL011/,<<==14HHII
 
z 
3 4   OA5 OA-=d-C OAbQRYY__ Q9I$9O Ql ))..==22 2 
$		2'C ',<T,B ' L)%5v>)$/  ?r5   r8   r   	is_clientrS   c           	          t         j                  j                  | t         j                  j                  |d| d            } t	        |       } | S )NF)rX   	utilitiesr=   HeaderValidationFlagslist)r   r   s     r6   normalize_h1_headersr   2  sE    
 ll55
**9e]ERG 7mGNr5   c              #     K   t        t        |             D ]i  }| |   d   j                         rt        dt	        | |   d         j                  d       d       | |   d   j                         | |   d   f| |<   k y w)Nr   zLowercased bz0 header as uppercase is not allowed with HTTP/2.r   )rangelenislowerr
   reprlstriplower)r   is     r6   normalize_h2_headersr   A  s     3w<  @qz!}$$&d71:a=188=>>no  "!*Q---/A?GAJ@s   .BABrD   rb   c              #   x  K   d|j                   j                  j                  fd|j                   j                  j                  fd|j                   j                  j                  fg}|j                   j
                  r1|j                  d|j                   j                  j
                  f       |j                   j                  s|j                   j                  rWt        |j                   j                  j                        }| j                  j                  rt        |      E d {    ||z   S |j                   j                  }|j                   j
                  s6d|v r2|j                         }|j                  d|j!                  d      f       t#        t        |j                        d      }||z   S 7 w)N   :method   :scheme   :path
   :authorityhosts   hostT)requestrm   methodschemepath	authorityappendis_http2is_http3r   r   ro   rO   r=   r   copyr   r   )rD   rb   pseudo_headershdrsr   s        r6   format_h2_request_headersr   J  sU    
 
U]]''../	U]]''../	5==%%**+N
 }}}emm.@.@.J.JKL}}!7!7EMM))001??55+D111 D   --''}}&&6W+<llnG!!='++g2F"GH#D$8$?D   2s   D&F:(F8)BF:c              #   P  K   dd|j                   j                  z  fg|j                   j                  j                  }|j                   j                  s|j                   j
                  r+| j                  j                  rt        |      E d {    |S t        |d      }|S 7 w)Nrd   re   F)
responsestatus_coder   ro   r   r   rO   r=   r   r   )rD   rb   r   s      r6   format_h2_response_headersr   d  s     
 
UU^^7778				&	&G ~~%.."9"9??55+G444 N 'w6N 5s   BB&B$B&c                        e Zd Z ej                  j
                  d
i ej                  ddiZe	Z
eZeZeZdef fdZdeded   f fdZdej,                  j&                  dee   f fd	Z xZS )Http2Serverclient_sideFrD   c                 :    t         |   ||j                         y rG   )rH   rI   rK   rQ   rD   rM   s     r6   rI   zHttp2Server.__init__  s    '..1r5   rb   rS   Nc              #     K   t        |t              r| j                  |j                        r| j                  j                  |j                  t        | j                  |      E d {   |j                         t        | j                  | j                  j                                y y t        | 5  |      E d {    y 7 ^7 w)Nr   rg   )ri   r   ra   rR   r>   ry   r   rD   rg   r   rE   rk   rH   r   )rQ   rb   rM   s     r6   r   zHttp2Server._handle_event  s     e_-""5??3))OO#=dllE#RR$// *  tyy$,,*C*C*EFF 4 w,U333 S 4s%   A%C(C
)ACC	C	Cc              #   J  K   t        |t        j                  j                        r	 t	        |j
                        \  }}}}}}}t        j                  ||||||d|d d t        j                         d       }
t        j                  | j                  |j                  <   t        t!        |j                  |
t#        |j$                                     yt&        | Q  |      E d {   S # t        $ r'}	| j                  d|	       E d {  7   Y d }	~	yd }	~	ww xY w7 7w)Nz Invalid HTTP/2 request headers: T   HTTP/2.0)r   portr   r   r   r   http_versionr   contentrn   timestamp_starttimestamp_endrf   F)ri   rX   r   RequestReceivedparse_h2_request_headersr   r   r   r&   Requesttimer-   r3   r?   rR   r#   r   r   stream_endedrH   r   )rQ   rb   r   r   r   r   r   r   r   r   r   rM   s              r6   r   zHttp2Server.handle_h2_event  s    eRYY667 -U]];
 ll#( $		"G -8,H,HDLL)OOWe>P>P9Q 
 $w6u==>3  ..1QRSQT/UVVV2 >sG   %D#C. B#D#)D!*D#.	D7DDDD#DD#r4   )r/   r0   r1   rX   r   r   r8   r   r9   r   r@   r   rA   r   rB   r   rC   r   rI   r   r   r   r   r   r   r   r   s   @r6   r   r   t  s    'bii'' 

*
*G
 0K%O-2 245 4-=d-C 4%?RYY__ %?9I$9O %? %?r5   r   c                   v    e Zd ZU  ej                  j
                  di ej                  ddiZe	Z
eZeZeZeeef   ed<   eeef   ed<   ej*                  eee   f   ed<   	 dZedz  ed<   	 eed	<   	 d
ef fdZdeded   fdZdeded   f fdZdej>                  j.                  dee    f fdZ! xZ"S )Http2Clientr   Tour_stream_idtheir_stream_idstream_queue
   Nprovisional_max_concurrencylast_activityrD   c                    t         |   ||j                         d| j                  j                  _        | j                  j                  j                          i | _        i | _        t        j                  t              | _        y )Nr   )rH   rI   serverr>   local_settingsenable_pushacknowledger   r   collectionsdefaultdictr   r   r   s     r6   rI   zHttp2Client.__init__  sc    '..1 34##/##//1!'33D9r5   rb   rS   c              #     K   t        |t              r| j                  j                  |j                  d       }|| j
                  j                  | j                  xs  | j
                  j                  j                  k\  }|r)| j                  |j                     j                  |       y | j
                  j                         }|| j                  |j                  <   |j                  | j                  |<   ||_        | j                  |      D ]H  }t        |t              r2| j                  |j                   j                     |j                   _        | J | j                  xrE | j
                  j                  | j                  xs  | j
                  j                  j                  k  }|rX| j                  j#                  t%        t'        | j                                    }|D ]  }| j)                  |      E d {     y y 7 wrG   )ri   r"   r   rU   rR   r>   open_outbound_streamsr   remote_settingsmax_concurrent_streamsr   r   get_next_available_stream_idr   _handle_event2r#   rb   r   nextiterr   )rQ   rb   oursno_free_streamscmdcan_resume_queuer   s          r6   r   zHttp2Client._handle_event  s     eY'%%))%//4@D|"&,,"D"D44 K||33JJ# #%%eoo6==eD||@@B6:""5??3-2__$$T*"EO&&u- 	C#{+&*&:&:399;N;N&O		#I	
  ,, 
1S1S,, C||++BB2
 &&**4T5F5F0G+HIF 5--e4445  5s   G=H
?H 	H
c              #   j  K   t        |t              r;t        j                         | j                  z
  dz   | j                  j
                  j                  kD  }|rt        j                         | _        | j                  j                  d       | j                  j                         }|Tt        dt        j                  | j                  j                         t               t!        | j                  |       | j                  j
                  j                  t        j                         | j                  z
  z
  }t#        |       y t        j                         | _        t        |t$              rf| j                  j
                  j                  dkD  r+t#        | j                  j
                  j                         t&        | Q  |      E d {    y t        |t*              r| j                  j-                  |j.                  t1        | j                  |      E d {   |j2                         t4        j6                  | j8                  |j.                  <   t!        | j                  | j                  j                                y t&        | Q  |      E d {    y 7 7 7 	w)Nr   s   00000000zSend HTTP/2 keep-alive PING to r   r   )ri   r   r   r   rD   rO   http2_ping_keepaliver>   pingrk   r
   r+   r   rE   rL   r   r   r   r   rH   r   r   ry   rR   r   rg   r-   r2   r?   )rQ   rb   send_ping_nowrm   time_until_next_pingrM   s        r6   r  zHttp2Client._handle_event2  s    eV$ 		d00014,,&&;;< 
  &*YY["!!(+||002#9%:N:NtyyOaOa:b9cd  #499d33#'<<#7#7#L#L		d000$    455!YY[eU#||##881<#DLL$8$8$M$MNNw,U333~.LL%%$=dllE$RR ++ & 
 -8,I,IDLL)499dll&?&?&ABBw,U333 4 S 4s8   GJ3J-AJ3(J/
)A>J3'J1(J3/J31J3c           
   #   "  K   t        |t        j                  j                        r| j                  j                  |j                  d       t        j                  ur| j                  d      E d {    y	 t        |j                        \  }}t        j                  d|d|d d t        j                         d       }t        j                   | j                  |j                  <   t#        t%        |j                  |t'        |j(                                     yt        |t        j                  j*                        rdt        j,                  |j                        }d}	 t/        |d	         }t0        j2                  j                  |d
      }t7        d| d|        yt        |t        j                  j8                        r| j                  d      E d {    yt        |t        j                  j:                        rd | _        t>        |   |      E d {   S t>        |   |      E d {   S 7 # t        $ r'}| j                  d|       E d {  7   Y d }~yd }~ww xY w# t4        t        f$ r d
}Y w xY w7 7 j7 Uw)Nz$Received unexpected HTTP/2 response.Tz!Invalid HTTP/2 response headers: r   r5   )r   r   reasonr   r   rn   r   r   Fz<unknown status>z:status z*Swallowing HTTP/2 informational response:  z3HTTP/2 protocol error: received request from server)!ri   rX   r   ResponseReceivedr?   rU   rR   r-   r2   r   parse_h2_response_headersr   r   r&   Responser   r3   r#   r   r   r   InformationalResponseReceivedr   r   r)   	RESPONSESKeyErrorr
   r   r   r   rH   r   )	rQ   rb   r   r   r   r   statusr  rM   s	           r6   r   zHttp2Client.handle_h2_event"  s:    eRYY778  $7"445  ..1UWWW'@'O$W
 }}(' $		"	H -8,H,HDLL)4@R@R;ST  ryyFFG ll5==1G 2FWY/0%//33FB? B6(!F8TUUryy889**E   ryy>>? 04D,$w6u==>$w6u==>g X
  ..1RSTRU/VWWW> j) 
 >=s   A/J2H<3J9H? CJ#.I2 AJJ	AJ J!J7J8J?	I/I*I" I*%J*I//J2JJJJJJr4   )#r/   r0   r1   rX   r   r   r8   r   r9   r   r@   r   rA   r   rB   r   rC   r   r   r   r   r   r   r   r   floatr   rI   r   r   r  r   r   r   r   r   s   @r6   r   r     s   'bii'' 

*
*G
 1K&O.S>!#s(^#))#tE{*:;;b.0t0WP	: 	: 55  5-=d-C  5D'4E '4.>t.D '4R9?RYY__ 9?9I$9O 9? 9?r5   r   
h2_headersc                     i }d}| D ]4  \  }}|j                  d      r||v rt        d|      |||<   |dz  }4 n t        j                  | |d        }||fS )Nr      :z Duplicate HTTP/2 pseudo header: r   )
startswithr   r&   r   )r  r   r   headervaluer   s         r6   split_pseudo_headersr$  ^  s     *,N	A# T"' #CF:!NOO%*N6"FA  ll:ab>*G7""r5   c                 r   t        |       \  }}	 |j                  d      }|j                  d      }|j                  d      }|j                  dd      }|rt        d|       |r&t	        j
                  |d	
      \  }}	|	|dk(  rdnd}	nd}d}	||	|||||fS # t        $ r}t        d|       d}~ww xY w)CSplit HTTP/2 pseudo-headers from the actual headers and parse them.r   r   r   r   r5   #Required pseudo header is missing: NUnknown pseudo headers: T)checks   httpP   i  r  r   )r$  r   r  r   r*   parse_authority)
r  r   r   r   r   r   r   r   r   r   s
             r6   r   r   r  s     3:>NGD&**:6&**
 %((2)--mSA	 3N3CDEE(($?
d<7*2Dvvy$??  D>qcBCCDs   AB 	B6#B11B6c                     t        |       \  }}	 t        |j                  d            }|rt	        d|       ||fS # t        $ r}t	        d|       d}~ww xY w)r&  rd   r'  Nr(  )r$  r   r   r  r   )r  r   r   r   r   s        r6   r  r    sy     3:>NGD~11*=> 3N3CDEE  D>qcBCCDs   > 	AAA)r   r   r   r  r   r   )Yr   r   collections.abcr   enumr   loggingr   r   typingr   	h2.configrX   h2.connection	h2.errors	h2.eventsh2.exceptionsh2.settings	h2.streamh2.utilitiescommandsr	   r
   r   r   rD   r   r   r   r   r   r   r   layerr   utilsr   r  r   r   r   r   r   r   r   r   r   r   _baser    r!   r"   r#   _http_h2r$   r%   	mitmproxyr&   r'   mitmproxy.connectionr(   mitmproxy.net.httpr)   r*   mitmproxy.utilsr+   r-   r   
IndexErrorr   r8   r   tuplebytesr   r   r   r   r   r   r   r   r   r$  r   r   r   r  __all__r4   r5   r6   <module>rF     sV     $             '  %    & "    %   !  "   "  #   !   * (   + + " !$ 
 $Z0 qn qh%u%&37	%u
@$uUE\':"; @@PQU@V @!!! d5./0!4 d5./0 A?/ A?Hc?/ c?L#ue|,-#
4ut||+,#(@ue|,-@
3UE5%=>@< ue|,- 
3 "r5   