
    bCiR                     n   % S SK r S SKrS SKrS SKJrJrJrJrJrJ	r	J
r
JrJr  SSKJr  SSKJrJrJrJrJr  SSKJr  Sr\" S5      r " S	 S
\5      r " S S\\   5      r " S S5      r " S S5      r " S S\5      r " S S\5      r\" 5       r \\   \!S'    " S S\\   5      r" " S S\"\   5      r#g)    N)		AwaitableCallableDequeFinalGenericListOptionalTupleTypeVar   )BaseProtocol)_EXC_SENTINELBaseTimerContext	TimerNoopset_exception
set_result)internal_logger)EMPTY_PAYLOAD	EofStreamStreamReader	DataQueueFlowControlDataQueue_Tc                       \ rS rSrSrSrg)r   %   zeof stream indication. N)__name__
__module____qualname____firstlineno____doc____static_attributes__r       I/home/james-whalen/.local/lib/python3.13/site-packages/aiohttp/streams.pyr   r   %   s     r#   r   c                   N    \ rS rSrS\/ \\   4   SS4S jrS	S jrS\4S jr	Sr
g)
AsyncStreamIterator)   	read_funcreturnNc                     Xl         g Nr(   )selfr(   s     r$   __init__AsyncStreamIterator.__init__*   s    "r#   c                     U $ r+   r   r-   s    r$   	__aiter__AsyncStreamIterator.__aiter__-       r#   c                    #     U R                  5       I S h  vN nUS:X  a  [        eU$  N! [         a    [        ef = f7fNr#   )r(   r   StopAsyncIterationr-   rvs     r$   	__anext__AsyncStreamIterator.__anext__0   sF     	%~~''B 9$$	 ( 	%$$	%s#   A , *, A , =A r,   )r)   zAsyncStreamIterator[_T])r   r   r   r    r   r   r   r.   r2   r:   r"   r   r#   r$   r&   r&   )   s4    #(2y}+<"= #$ # r#   r&   c                   @    \ rS rSrSS jrS	S jrS\\\4   4S jr	Sr
g)
ChunkTupleAsyncStreamIterator:   r)   Nc                     Xl         g r+   _stream)r-   streams     r$   r.   &ChunkTupleAsyncStreamIterator.__init__;   s    r#   c                     U $ r+   r   r1   s    r$   r2   'ChunkTupleAsyncStreamIterator.__aiter__>   r4   r#   c                 n   #    U R                   R                  5       I S h  vN nUS:X  a  [        eU$  N7f)Nr#   F)rA   	readchunkr7   r8   s     r$   r:   'ChunkTupleAsyncStreamIterator.__anext__A   s2     <<))++$$	 ,s   535r@   )rB   r   r)   N)r)   r=   )r   r   r   r    r.   r2   r
   bytesboolr:   r"   r   r#   r$   r=   r=   :   s!    ud{!3 r#   r=   c                   b    \ rS rSrS\\   4S jrS\S\\   4S jrS\\   4S jr	S\
4S jrSrg	)
AsyncStreamReaderMixinH   r)   c                 ,    [        U R                  5      $ r+   )r&   readliner1   s    r$   r2    AsyncStreamReaderMixin.__aiter__I   s    "4==11r#   nc                 &   ^ ^ [        UU 4S j5      $ )z>Returns an asynchronous iterator that yields chunks of size n.c                  &   > TR                  T 5      $ r+   )read)rR   r-   s   r$   <lambda>5AsyncStreamReaderMixin.iter_chunked.<locals>.<lambda>N   s    499Q<r#   )r&   r-   rR   s   ``r$   iter_chunked#AsyncStreamReaderMixin.iter_chunkedL   s    "#788r#   c                 ,    [        U R                  5      $ )z3Yield all available data as soon as it is received.)r&   readanyr1   s    r$   iter_anyAsyncStreamReaderMixin.iter_anyP   s    "4<<00r#   c                     [        U 5      $ )zYield chunks of data as they are received by the server.

The yielded objects are tuples
of (bytes, bool) as returned by the StreamReader.readchunk method.
)r=   r1   s    r$   iter_chunks"AsyncStreamReaderMixin.iter_chunksT   s     -T22r#   r   N)r   r   r   r    r&   rJ   r2   intrY   r]   r=   r`   r"   r   r#   r$   rM   rM   H   sL    2.u5 29c 9&9%&@ 91-e4 13: 3r#   rM   c                      \ rS rSrSrSrSSS.S\S\S\\	   S	\\
R                     S
S4
S jjrS
\4S jrS
\\\4   4S jrS
\\   4S jr\4S\S\S
S4S jjrS\/ S4   S
S4S jrS,S jrS
\4S jrS
\4S jrS,S jrS\S
S4S jrS-S\S\S
S4S jjrS,S jrS,S jr S\S
S4S jr!S
\4S  jr"S.S!\S
\4S" jjr#S/S#\S
\4S$ jjr$S
\4S% jr%S
\\\4   4S& jr&S#\S
\4S' jr'S/S#\S
\4S( jjr(S#\S
\4S) jr)S#\S
\4S* jr*S+r+g)0r   ]   a
  An enhancement of asyncio.StreamReader.

Supports asynchronous iteration by line, chunk or as available::

    async for line in reader:
        ...
    async for chunk in reader.iter_chunked(1024):
        ...
    async for slice in reader.iter_any():
        ...

r   N)timerloopprotocollimitre   rf   r)   c                F   Xl         X l        US-  U l        Uc  [        R                  " 5       nX@l        SU l        SU l        S U l        [        R                  " 5       U l        SU l        SU l        S U l        S U l        S U l        Uc
  [#        5       OUU l        / U l        g )N   r   F)	_protocol
_low_water_high_waterasyncioget_event_loop_loop_size_cursor_http_chunk_splitscollectionsdeque_buffer_buffer_offset_eof_waiter_eof_waiter
_exceptionr   _timer_eof_callbacks)r-   rg   rh   re   rf   s        r$   r.   StreamReader.__init__m   s     " 19<))+D

7;%0%6%6%8	7;;?37%*]ik8:r#   c                 *   U R                   R                  /nU R                  (       a  UR                  SU R                  -  5        U R                  (       a  UR                  S5        U R
                  S:w  a*  UR                  SU R
                  U R                  4-  5        U R                  (       a  UR                  SU R                  -  5        U R                  (       a  UR                  SU R                  -  5        SSR                  U5      -  $ )	Nz%d byteseofi   zlow=%d high=%dzw=%rze=%r<%s> )
	__class__r   rq   appendrx   rl   rm   ry   r{   join)r-   infos     r$   __repr__StreamReader.__repr__   s    ''(::KK
TZZ/099KK??e#KK(DOOT=M=M+NNO<<KK-.??KK01&&r#   c                 2    U R                   U R                  4$ r+   )rl   rm   r1   s    r$   get_read_buffer_limits#StreamReader.get_read_buffer_limits   s    !1!122r#   c                     U R                   $ r+   r{   r1   s    r$   	exceptionStreamReader.exception       r#   exc	exc_causec                     Xl         U R                  R                  5         U R                  nUb  S U l        [	        X1U5        U R
                  nUb  S U l        [	        X1U5        g g r+   )r{   r}   clearry   r   rz   r-   r   r   waiters       r$   r   StreamReader.set_exception   sc    
 !!#DL&y1!!#D&y1 r#   callbackc                     U R                   (       a	   U" 5         g U R                  R                  U5        g ! [         a    [        R                  " S5         g f = fNException in eof callback)rx   	Exceptionr   r   r}   r   r-   r   s     r$   on_eofStreamReader.on_eof   sL    99G
 &&x0  G))*EFGs   7  AAc                 R   SU l         U R                  nUb  S U l        [        US 5        U R                  nUb  S U l        [        US 5        U R                   H  n U" 5         M     U R                  R                  5         g ! [
         a    [        R                  " S5         MM  f = f)NTr   )	rx   ry   r   rz   r}   r   r   r   r   )r-   r   cbs      r$   feed_eofStreamReader.feed_eof   s    	DLvt$!!#Dvt$%%BG & 	!!#  G))*EFGs   B B&%B&c                     U R                   $ )z&Return True if  'feed_eof' was called.rx   r1   s    r$   is_eofStreamReader.is_eof   s    yyr#   c                 J    U R                   =(       a    U R                  (       + $ )z=Return True if the buffer is empty and 'feed_eof' was called.rx   rv   r1   s    r$   at_eofStreamReader.at_eof   s    yy---r#   c                    #    U R                   (       a  g U R                  b   eU R                  R                  5       U l         U R                  I S h  vN   S U l        g  N! S U l        f = f7fr+   )rx   rz   rp   create_futurer1   s    r$   wait_eofStreamReader.wait_eof   s`     99'''::335	$""""#D ##Ds0   AA.A" A A" A. A" "	A++A.datac                    [         R                  " S[        SS9  U(       d  gU R                  (       a0  U R                  S   U R                  S U R                  S'   SU l        U =R
                  [        U5      -  sl        U =R                  [        U5      -  sl        U R                  R                  U5        SU l	        g)zDrollback reading some data from stream, inserting it to buffer head.zJunread_data() is deprecated and will be removed in future releases (#3260)rj   )
stacklevelNr   )
warningswarnDeprecationWarningrw   rv   rq   lenrr   
appendleft_eof_counter)r-   r   s     r$   unread_dataStreamReader.unread_data   s    =		
 "ll1od.A.A.CDDLLO"#D

c$i
D	!%r#   sizec                    U R                   (       a   S5       eU(       d  g U =R                  [        U5      -  sl        U R                  R	                  U5        U =R
                  [        U5      -  sl        U R                  nUb  S U l        [        US 5        U R                  U R                  :  a7  U R                  R                  (       d  U R                  R                  5         g g g )Nzfeed_data after feed_eof)rx   rq   r   rv   r   total_bytesry   r   rm   rk   _reading_pausedpause_readingr-   r   r   r   s       r$   	feed_dataStreamReader.feed_data   s    99888}

c$i
D!CI%DLvt$::(((1O1ONN((* 2P(r#   c                 f    U R                   c$  U R                  (       a  [        S5      e/ U l         g g )Nz?Called begin_http_chunk_receiving whensome data was already fed)rs   r   RuntimeErrorr1   s    r$   begin_http_chunk_receiving'StreamReader.begin_http_chunk_receiving  s6    ""*"X  ')D# +r#   c                 *   U R                   c  [        S5      eU R                   (       a  U R                   S   OSnU R                  U:X  a  g U R                   R                  U R                  5        U R                  nUb  S U l        [        US 5        g g )NzFCalled end_chunk_receiving without calling begin_chunk_receiving firstr   )rs   r   r   r   ry   r   )r-   posr   s      r$   end_http_chunk_receiving%StreamReader.end_http_chunk_receiving  s    ""*.  .2-D-Dd%%b)!s" &&t'7'78 DLvt$ r#   	func_namec                   #    U R                   b  [        SU-  5      eU R                  R                  5       =o l          U R                     UI S h  vN   S S S 5        S U l         g  N! , (       d  f       N= f! S U l         f = f7f)NzH%s() called while another coroutine is already waiting for incoming data)ry   r   rp   r   r|   )r-   r   r   s      r$   _waitStreamReader._wait*  s|     
 <<#46?@ 
 !%

 8 8 ::	    DL    DLsF   <BA9 A(A&A(A9 B&A((
A62A9 9	BBc                 >   #    U R                  5       I S h  vN $  N7fr+   )	readuntilr1   s    r$   rP   StreamReader.readline<  s     ^^%%%%s   	separatorc                 |  #    [        U5      nUS:X  a  [        S5      eU R                  b  U R                  eSnSnSnU(       a  U R                  (       a  U(       a  U R                  nU R                  S   R                  X5      S-   nU R                  U(       a
  Xv-
  U-   S-
  OS5      nX8-  nU[        U5      -  nU(       a  SnX@R                  :  a  [        S5      eU R                  (       a	  U(       a  M  U R                  (       a   U$ U(       a  U R                  S	5      I S h  vN   U(       a  M  U$  N7f)
Nr   z,Separator should be at least one-byte stringr#   Tr   r   FzChunk too bigr   )
r   
ValueErrorr{   rv   rw   find_read_nowait_chunkrm   rx   r   )	r-   r   seplenchunk
chunk_size
not_enoughoffseticharr   s	            r$   r   StreamReader.readuntil?  s    YQ;KLL??&//!

,,:,,Q,,Y?!C..38ENV+a/b c$i'
!&J 0 00$_55 ,,:: yy
  jj---) j,  .s   C7D<;/D<*D:+D<8D<rR   c                   #    U R                   b  U R                   e U R                  (       aK  U R                  (       d:  [        U SS5      S-   U l        U R                  S:  a  [
        R                  " SSS9  U(       d  gUS:  aG  / n U R                  5       I S h  vN nU(       d  OUR                  U5        M3  SR                  U5      $ U R                  (       dN  U R                  (       d=  U R                  S	5      I S h  vN   U R                  (       d  U R                  (       d  M=  U R                  U5      $  N N;7f)
NTr   r   r      zEMultiple access to StreamReader in eof state, might be infinite loop.)
stack_infor#   rU   )r{   rx   rv   getattrr   r   warningr\   r   r   r   _read_nowait)r-   rR   blocksblocks       r$   rU   StreamReader.readc  s    ??&//! yy$+D.!$Dq$H!$$q(#++2#' q5
 F"lln,e$	 
 88F##
 ,,tyy**V$$$ ,,tyyy   ## - %s+   BED>A&EE &E-E Ec                    #    U R                   b  U R                   eU R                  (       dN  U R                  (       d=  U R                  S5      I S h  vN   U R                  (       d  U R                  (       d  M=  U R	                  S5      $  N97f)Nr\   r   )r{   rv   rx   r   r   r1   s    r$   r\   StreamReader.readany  sc     ??&//!
 ,,tyy**Y''' ,,tyyy   $$ (s   ABB&B;Bc                 
  #     U R                   b  U R                   eU R                  (       a  U R                  R                  S5      nXR                  :X  a  gXR                  :  a  U R	                  XR                  -
  5      S4$ [
        R                  " S5        U R                  (       a  M  U R                  (       a  U R                  S5      S4$ U R                  (       a  gU R                  S	5      I Sh  vN   M   N7f)
zReturns a tuple of (data, end_of_http_chunk).

When chunked transfer
encoding is used, end_of_http_chunk is a boolean indicating if the end
of the data corresponds to the end of a HTTP chunk , otherwise it is
always False.
TNr   r#   TzESkipping HTTP chunk end due to data consumption beyond chunk boundaryr   FrG   rH   )r{   rs   poprr   r   r   r   rv   r   rx   r   )r-   r   s     r$   rH   StreamReader.readchunk  s      *oo%))--11!4,,&&% --cLL.@A4HH''8 ))) ||//3U;; yy $**[)))1 0 *s   B,D0A
D:D;Dc                 h  #    U R                   b  U R                   e/ nUS:  a{  U R                  U5      I S h  vN nU(       d4  SR                  U5      n[        R                  " U[        U5      U-   5      eUR                  U5        U[        U5      -  nUS:  a  M{  SR                  U5      $  Nw7f)Nr   r#   )r{   rU   r   rn   IncompleteReadErrorr   r   )r-   rR   r   r   partials        r$   readexactlyStreamReader.readexactly  s     ??&//! !e))A,&E((6*11'3w<!;KLLMM% UOA !e xx 's   6B2B0A$B2B2c                     U R                   b  U R                   eU R                  (       a*  U R                  R                  5       (       d  [        S5      eU R	                  U5      $ )Nz9Called while some coroutine is waiting for incoming data.)r{   ry   doner   r   rX   s     r$   read_nowaitStreamReader.read_nowait  sT    
 ??&//!<< 1 1 3 3K    ##r#   c                    U R                   S   nU R                  nUS:w  a.  [        U5      U-
  U:  a  X#X1-    nU =R                  U-  sl        OGU(       a&  U R                   R                  5         X#S  nSU l        OU R                   R                  5       nU =R                  [        U5      -  sl        U =R
                  [        U5      -  sl        U R                  nU(       a@  US   U R
                  :  a-  UR                  S5        U(       a  US   U R
                  :  a  M-  U R                  U R                  :  a5  U R                  R                  (       a  U R                  R                  5         U$ )Nr   r   )rv   rw   r   popleftrq   rr   rs   r   rl   rk   r   resume_reading)r-   rR   first_bufferr   r   chunk_splitss         r$   r   StreamReader._read_nowait_chunk  s   ||A$$7s<(61A54D1$LL  "(D"#D <<'')D

c$i
D	!..|A=Q |A= ::'DNN,J,JNN))+r#   c                 0   U R                   R                  5         / nU R                  (       aP  U R                  U5      nUR	                  U5        US:w  a  U[        U5      -  nUS:X  a  OU R                  (       a  MP  U(       a  SR                  U5      $ S$ )z6Read not more than n bytes, or whole buffer if n == -1r   r   r#   )r|   assert_timeoutrv   r   r   r   r   )r-   rR   chunksr   s       r$   r   StreamReader._read_nowait  s{    ""$ll++A.EMM% BwSZ6 lll $*sxx2s2r#   )rv   rw   rr   rx   r}   r   rz   r{   rm   rs   rp   rl   rk   rq   r|   ry   r)   Nr   )   
r   ),r   r   r   r    r!   r   r   rb   r	   r   rn   AbstractEventLoopr.   strr   r
   r   BaseExceptionr   r   r   r   r   r   rK   r   r   r   rJ   r   r   r   r   r   rP   r   rU   r\   rH   r   r   r   r   r"   r   r#   r$   r   r   ]   s    K -148;; ;
 (); w001; 
;4'# '3c3h 38M2  $122 !2 
	2$1xD1 1d 1$* . .	$ $ (+e +3 +t +$)%< S  T  $& &" "5 "H($C ($ ($T
%u 
% *ud{!3  *D 3  5  $S $% $C E 63c 3e 3r#   r   c                   4   \ rS rSrSS jrS\4S jrS\\   4S jr	\
4S\S\SS4S	 jjrS
\/ S4   SS4S jrSS jrS\4S jrS\4S jrSS jrSS\S\SS4S jjrS\4S jrSS\S\4S jjrS\4S jrS\\\4   4S jrS\S\4S jrSS\S\4S jjrSrg)EmptyStreamReaderi  r)   Nc                     SU l         g )NF_read_eof_chunkr1   s    r$   r.   EmptyStreamReader.__init__  s
    $r#   c                 4    SU R                   R                  -  $ )Nr   )r   r   r1   s    r$   r   EmptyStreamReader.__repr__  s    ////r#   c                     g r+   r   r1   s    r$   r   EmptyStreamReader.exception      r#   r   r   c                     g r+   r   )r-   r   r   s      r$   r   EmptyStreamReader.set_exception  s    
 	r#   r   c                 `     U" 5         g ! [          a    [        R                  " S5         g f = fr   )r   r   r   r   s     r$   r   EmptyStreamReader.on_eof  s-    	CJ 	C%%&AB	Cs   
  --c                     g r+   r   r1   s    r$   r   EmptyStreamReader.feed_eof      r#   c                     gNTr   r1   s    r$   r   EmptyStreamReader.is_eof  r  r#   c                     gr  r   r1   s    r$   r   EmptyStreamReader.at_eof!  r  r#   c                    #    g 7fr+   r   r1   s    r$   r   EmptyStreamReader.wait_eof$  s        r   rR   c                     g r+   r   )r-   r   rR   s      r$   r   EmptyStreamReader.feed_data'  r  r#   c                    #    g7fr6   r   r1   s    r$   rP   EmptyStreamReader.readline*       r!  c                    #    g7fr6   r   rX   s     r$   rU   EmptyStreamReader.read-  r&  r!  c                    #    g7fr6   r   r1   s    r$   r\   EmptyStreamReader.readany2  r&  r!  c                 >   #    U R                   (       d  SU l         gg7f)NTrG   r   r  r1   s    r$   rH   EmptyStreamReader.readchunk5  s     ###'D s   c                 8   #    [         R                  " SU5      e7fr6   )rn   r   rX   s     r$   r   EmptyStreamReader.readexactly<  s     ))#q11s   c                     gr6   r   rX   s     r$   r   EmptyStreamReader.read_nowait?  s    r#   r  r  r  r  )r   r   r   r    r.   r  r   r	   r  r   r   r   r   r   r   rK   r   r   r   rJ   rb   r   rP   rU   r\   r
   rH   r   r   r"   r   r#   r$   r	  r	    s   %0# 08M2  $1 ! 
	CxD1 Cd C  e  D  C  
u ud{!3 23 25 2S %  r#   r	  r   c                       \ rS rSrSrS\R                  SS4S jrS\4S jr	S\
4S jrS\
4S	 jrS\\   4S
 jr\4S\S\SS4S jjrSS\S\SS4S jjrSS jrS\4S jrS\\   4S jrSrg)r   iF  z>DataQueue is a general-purpose blocking queue with one reader.rf   r)   Nc                 |    Xl         SU l        S U l        S U l        SU l        [
        R                  " 5       U l        g )NFr   )rp   rx   ry   r{   rq   rt   ru   rv   )r-   rf   s     r$   r.   DataQueue.__init__I  s3    
	7;37
.9.?.?.Ar#   c                 ,    [        U R                  5      $ r+   )r   rv   r1   s    r$   __len__DataQueue.__len__Q  s    4<<  r#   c                     U R                   $ r+   r   r1   s    r$   r   DataQueue.is_eofT  s    yyr#   c                 J    U R                   =(       a    U R                  (       + $ r+   r   r1   s    r$   r   DataQueue.at_eofW  s    yy---r#   c                     U R                   $ r+   r   r1   s    r$   r   DataQueue.exceptionZ  r   r#   r   r   c                 d    SU l         Xl        U R                  nUb  S U l        [        X1U5        g g r  )rx   r{   ry   r   r   s       r$   r   DataQueue.set_exception]  s5    
 	DL&y1 r#   r   r   c                     U =R                   U-  sl         U R                  R                  X45        U R                  nUb  S U l        [	        US 5        g g r+   )rq   rv   r   ry   r   r   s       r$   r   DataQueue.feed_dataj  sI    

d
TL)DLvt$ r#   c                 X    SU l         U R                  nUb  S U l        [        US 5        g g r  )rx   ry   r   )r-   r   s     r$   r   DataQueue.feed_eofs  s.    	DLvt$ r#   c                   #    U R                   (       dX  U R                  (       dG  U R                  (       a   eU R                  R	                  5       U l         U R                  I S h  vN   U R                   (       a3  U R                   R                  5       u  pU =R                  U-  sl	        U$ U R                  b  U R                  e[        e Ng! [
        R                  [
        R                  4 a	    S U l        e f = f7fr+   )rv   rx   ry   rp   r   rn   CancelledErrorTimeoutErrorr   rq   r{   r   )r-   r   r   s      r$   rU   DataQueue.read{  s     ||DII||##::335DLll""
 <<--/JDJJ$JK*oo% #**G,@,@A #s1   ADC 'C(C ,A#DC -C>>Dc                 ,    [        U R                  5      $ r+   )r&   rU   r1   s    r$   r2   DataQueue.__aiter__  s    "499--r#   )rv   rx   r{   rp   rq   ry   r  r  )r   r   r   r    r!   rn   r  r.   rb   r5  rK   r   r   r	   r  r   r   r   r   r   r   rU   r&   r2   r"   r   r#   r$   r   r   F  s    HBW66 B4 B! ! . .8M2  $122 !2 
	2%b % %D %% B  (..r2 .r#   r   c                      ^  \ rS rSrSrS\S\S\R                  SS4U 4S jjr	SS	\
S
\SS4U 4S jjjrS\
4U 4S jjrSrU =r$ )r   i  zdFlowControlDataQueue resumes and pauses an underlying stream.

It is a destination for parsed data.
rg   rh   rf   r)   Nc                @   > [         TU ]  US9  Xl        US-  U l        g )N)rf   rj   )superr.   rk   _limit)r-   rg   rh   rf   r   s       r$   r.   FlowControlDataQueue.__init__  s%     	d#!air#   r   r   c                    > [         TU ]  X5        U R                  U R                  :  a7  U R                  R
                  (       d  U R                  R                  5         g g g r+   )rK  r   rq   rL  rk   r   r   )r-   r   r   r   s      r$   r   FlowControlDataQueue.feed_data  sE    $%::#DNN,J,JNN((* -K#r#   c                   >#     [         TU ]  5       I S h  vN U R                  U R                  :  a7  U R                  R
                  (       a  U R                  R                  5         $ $ $  NU! U R                  U R                  :  a7  U R                  R
                  (       a  U R                  R                  5         f f f = f7fr+   )rK  rU   rq   rL  rk   r   r   )r-   r   s    r$   rU   FlowControlDataQueue.read  s     	0'zzDKK'DNN,J,J--/ -K' (zzDKK'DNN,J,J--/ -K's-   CA. A,A. AC,A. .ACC)rL  rk   r  )r   r   r   r    r!   r   rb   rn   r  r.   r   r   rU   r"   __classcell__)r   s   @r$   r   r     sc    
 $ -0 ;B;T;T 	 +b + +D + +0B 0 0r#   r   )$rn   rt   r   typingr   r   r   r   r   r   r	   r
   r   base_protocolr   helpersr   r   r   r   r   logr   __all__r   r   r   r&   r=   rM   r   r	  r   __annotations__r   r   r   r#   r$   <module>rY     s      
 
 
 (  ! T]!	 !'"+ " 3 3*d3) d3N< <~ &7%8u\" 8J. J.Z09R= 0r#   