
    @OOf                        d 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	Z	ddl
Z ej                  dd      Z edddd      aed!ddded	ed
dfd       Zed!deded	ed
efd       Zed!deded	ed
eez  fd       Z	 d!ddez  ez  ded	ed
dez  ez  fdZed!ddded	ed
dfd       Zed!deded	ed
eez  fd       Zed!deded	ed
efd       Z	 d!ddez  ez  d
dez  ez  fdZd Zded
efdZded
efdZded
efdZded
efdZded
efdZded
efdZded
efdZded
efdZeeeeeeedZeeeeeeedZdd gZy)"z1
Utility functions for decoding response bodies.
    N)BytesIO)overloadCachedDecodezencoded encoding errors decodedencodedencodingerrorsreturnc                      y N r   r   r   s      W/var/www/premiumrankchecker/venv/lib/python3.12/site-packages/mitmproxy/net/encoding.pydecoder          JM    c                      y r   r   r   s      r   r   r      s    HKr   c                      y r   r   r   s      r   r   r      s    RUr   c                 N   | y|j                         }t        | t              xr= t        j                  | k(  xr( t        j
                  |k(  xr t        j                  |k(  }|rt        j                  S 	 	 t        |   |       }|dv rt        | |||      a|S # t        $ r t        j                  | ||      }Y 6w xY w# t        $ r  t        $ rS}t        dj!                  t#        |      j$                  t'        |       dd t'        |      t'        |                  d}~ww xY w)z
    Decode the given input object

    Returns:
        The decoded value

    Raises:
        ValueError, if decoding fails.
    Ngzipdeflate
deflaterawbrzstdz{} when decoding {} with {}: {}
   )lower
isinstancebytes_cacher   r   r   decodedcustom_decodeKeyErrorcodecsr   r   	TypeError	Exception
ValueErrorformattype__name__repr)r   r   r   cachedr    es         r   r   r   #   )    ~~H 	7E" 	$NNg%	$OOx'	$ MMV#	  ~~
	?#H-g6G FF!'8VWEF	  	?mmGXv>G	?
   
-44Q  Wcr"XQ	
 	

7   7B B?  B<9B? ;B<<B? ?D$ADD$r    c                      y r   r   r    r   r   s      r   encoder1   Q   r   r   c                      y r   r   r0   s      r   r1   r1   U   s    PSr   c                      y r   r   r0   s      r   r1   r1   Y   s    LOr   c                 N   | y|j                         }t        | t              xr= t        j                  | k(  xr( t        j
                  |k(  xr t        j                  |k(  }|rt        j                  S 	 	 t        |   |       }|dv rt        ||||       a|S # t        $ r t        j                  | ||      }Y 6w xY w# t        $ r  t        $ rS}t        dj!                  t#        |      j$                  t'        |       dd t'        |      t'        |                  d}~ww xY w)z
    Encode the given input object

    Returns:
        The encoded value

    Raises:
        ValueError, if encoding fails.
    Nr   z{} when encoding {} with {}: {}r   )r   r   r   r   r    r   r   r   custom_encoder"   r#   r1   r   r$   r%   r&   r'   r(   r)   r*   )r    r   r   r+   r   r,   s         r   r1   r1   ]   r-   r.   c                     | S )zb
    Returns content unchanged. Identity is the default value of
    Accept-Encoding headers.
    r   contents    r   identityr9      s	    
 Nr   r8   c                 f    | syt        j                  t        |             }|j                         S )Nr   )fileobj)r   GzipFiler   read)r8   gfiles     r   decode_gzipr?      s'    MM''"23E::<r   c                     t               }t        j                  |dd      }|j                  |        |j	                          |j                         S )Nwbr   )r;   modemtime)r   r   r<   writeclosegetvalue)r8   sgfs      r   encode_gziprI      s<    	A	qt1	5BHHWHHJ::<r   c                 2    | syt        j                  |       S )Nr   )brotli
decompressr7   s    r   decode_brotlirM      s    W%%r   c                 ,    t        j                  |       S r   )rK   compressr7   s    r   encode_brotlirP      s    ??7##r   c                     | syt        j                         }	 |j                  |       S # t         j                  $ r |j                  | d      cY S w xY w)Nr   i   )max_output_size)r   ZstdDecompressorrL   	ZstdErrorr8   zstd_ctxs     r   decode_zstdrW      sZ    $$&HH""7++>> H ""7J"GGHs   * &AAc                 L    t        j                         }|j                  |       S r   )r   ZstdCompressorrO   rU   s     r   encode_zstdrZ      s!    ""$HW%%r   c                     | sy	 t        j                  |       S # t         j                  $ r t        j                  | d      cY S w xY w)a  
    Returns decompressed data for DEFLATE. Some servers may respond with
    compressed data without a zlib header or checksum. An undocumented
    feature of zlib permits the lenient decompression of data missing both
    values.

    http://bugs.python.org/issue5784
    r   i)zlibrL   errorr7   s    r   decode_deflater^      sB     -w'':: -w,,-s    )AAc                 ,    t        j                  |       S )zP
    Returns compressed content, always including zlib header and checksum.
    )r\   rO   r7   s    r   encode_deflater`      s     ==!!r   )noner9   r   r   r   r   r   r1   r   )strict)__doc__r#   collectionsr   r\   ior   typingr   rK   	zstandardr   
namedtupler   r   strr   r   r1   r9   r?   rI   rM   rP   rW   rZ   r^   r`   r!   r5   __all__r   r   r   <module>rk      s~           &{%%n6WX	dD$	- 
 MD MC M MD M 
 M 
 KC K3 K K3 K 
 K 
 UE US U# US5[ U 
 U ?G+
CZ%+
+.+
8;+
	CZ%+
\ 
 MD MC M MD M 
 M 
 SC S3 S S3; S 
 S 
 OE OS O# OU O 
 O 3;+
CZ%+
	CZ%+
\ 5  5 &5 &U &$5 $U $	H 	H5 	H& &5 &
-E -e -""E "e "  
  
 X
r   