
    *Gj              	          U d Z ddlZddlZddlmZ ddlmZ ddlmZmZ ddl	m
Z
 dd	lmZ  ed
          j        Z ed          j        Z ed          j        Z ed          j        Z ed          j        Z ed          j        Z ed          j        ZdZee         ed<   dZee         ed<   dZee         ed<   ej        dee         fd            Zdede ddfdZ!ese
re!Z"n	 ddl#m$Z$ e$Z"n# e%$ r e!Z"Y nw xY w ej&        d          Z'eee(                  ed<    ej&        d          Z)eee(                  ed<   d(d!e(dz  d"e*de+ee*f         fd#Z,	 d)d%ed"e*d&e*de(fd'Z-dS )*z1Helpers for WebSocket protocol versions 13 and 8.    N)Pattern)Struct)TYPE_CHECKINGFinal   )NO_EXTENSIONS   )WSHandshakeErrorz!Qz!Hz!BBz!BBHz!BBQz!Li @  MSG_SIZE   MASK_LENs$   258EAFA5-E914-47DA-95CA-C5AB0DC85B11WS_KEYreturnc                  4    d t          d          D             S )Nc                 `    g | ]*t          fd t          d          D                       +S )c              3   "   K   | ]	}|z  V  
d S N ).0abs     b/home/rurouni/.hermes/hermes-agent/venv/lib/python3.11/site-packages/aiohttp/_websocket/helpers.py	<genexpr>z(_xor_table.<locals>.<listcomp>.<genexpr>   s'      ,,A!a%,,,,,,       )bytesrange)r   r   s    @r   
<listcomp>z_xor_table.<locals>.<listcomp>   s<    AAAE,,,,s,,,,,AAAr   r   )r   r   r   r   
_xor_tabler      s    AAeCjjAAAAr   maskdatac                    t          |t                    s
J |            t          |           dk    s
J |             |rt                      fd| D             \  }}}}|ddd                             |          |ddd<   |ddd                             |          |ddd<   |ddd                             |          |ddd<   |ddd                             |          |ddd<   dS dS )aw  Websocket masking function.

    `mask` is a `bytes` object of length 4; `data` is a `bytearray`
    object of any length. The contents of `data` are masked with `mask`,
    as specified in section 5.3 of RFC 6455.

    Note that this function mutates the `data` argument.

    This pure-python implementation may be replaced by an optimized
    version when available.

    r   c              3   (   K   | ]}|         V  d S r   r   )r   n
_XOR_TABLEs     r   r   z)_websocket_mask_python.<locals>.<genexpr>1   s'      22jm222222r   Nr	   r      )
isinstance	bytearraylenr   	translate)r    r!   r   r   cdr%   s         @r   _websocket_mask_pythonr-      s    dI&&,,,,&t99>>>4>>> -\\
2222T222
1a1I''**SSqS	!$Q$Z))!,,QTT
!$Q$Z))!,,QTT
!$Q$Z))!,,QTT


- -r   )_websocket_mask_cythonz^(?:;\s*(?:(server_no_context_takeover)|(client_no_context_takeover)|(server_max_window_bits(?:=(\d+))?)|(client_max_window_bits(?:=(\d+))?)))*$
_WS_EXT_REzpermessage-deflate([^,]+)?_WS_EXT_RE_SPLITFextstrisserverc                    | sdS d}d}t                               |           D ]0}|                    d          }|sd} nt                              |          }|rd}|r_|                    d          r1t          |                    d                    }|dk    s|dk     rd}|                    d          rd} n|                    d	          r=t          |                    d	                    }|dk    s|dk     rt          d
          |                    d          rd} n)|s%t          d|                    d          z             2||fS )N)r   Fr   Fr	      r   	   T   zInvalid window sizer   z#Extension for deflate not supported)r0   finditergroupr/   matchintr
   )r1   r2   compress
notakeoverextdefextr9   s          r   ws_ext_parser?   N   s    xHJ((00 (Y (Y1 	HE  (( !	YH  ;;q>> !"5;;q>>22H
  "}}1#$ ;;q>> &!%J;;q>> F"5;;q>>22H
  "}}1./DEEE;;q>> &!%J 	Y"#H399UV<<#WXXX	Y Zr   r4   r;   server_notakeoverc                    | dk     s| dk    rt          d          dg}|s|                    d           | dk     r%|                    dt          |           z              |r|                    d           d                    |          S )	Nr5   r4   zCCompress wbits must between 9 and 15, zlib does not support wbits=8zpermessage-deflateclient_max_window_bitszserver_max_window_bits=server_no_context_takeoverz; )
ValueErrorappendstrjoin)r;   r2   r@   
enabledexts       r   
ws_ext_genrI      s    
 !||x"}}Q
 
 	
 ''J 42333"}}3c(mmCDDD 86777 99Z   r   )F)r4   FF).__doc__	functoolsrer   structr   typingr   r   helpersr   modelsr
   unpack_fromUNPACK_LEN3unpackUNPACK_CLOSE_CODEpack	PACK_LEN1	PACK_LEN2	PACK_LEN3PACK_CLOSE_CODEPACK_RANDBITSr   r:   __annotations__r   r   r   	lru_cachelistr   r(   r-   websocket_maskr    r.   ImportErrorcompiler/   rF   r0   booltupler?   rI   r   r   r   <module>rc      s   7 7 7     				             ' ' ' ' ' ' ' ' # # # # # # $ $ $ $ $ $fTll&F4LL' F5MM	F6NN	F6NN	&,,#t!%*   %*   >e > > > BDK B B B B- -i -D - - - -2  0M 0+NN0000000/ 0 0 0/0 #-"*/# #
E'#,    )3
3P(Q(Q %% Q Q Q0  0 t 0 t 0 c4i@P 0  0  0  0 h KP! !!"&!CG!! ! ! ! ! !s   .C7 7D D