o
     JAf]!                     @   s   	 d dl Z d dlZd dlZd dlZd dlmZmZ d dlmZ g dZ	e
e djdd Zdd	 ZG d
d deZe Zdeed< dd Zdd Zdd Zdd Zdd ZeedZdd ZeedZeedZdddZdS )     N)ascii_lettersdigits)errors)decode_qencode_qdecode_bencode_blen_qlen_bdecodeencodes   =([a-fA-F0-9]{2})c                 C   s   t | d S )N   )bytesfromhexgroupr   )m r   +/usr/lib/python3.10/email/_encoded_words.py<lambda>A   s    r   c                 C   s   |  dd} t| g fS )N   _    )replace_q_byte_subber)encodedr   r   r   r   C   s   r   c                   @   s,   e Zd Zded ed Zdd ZdS )	_QByteMaps   -!*+/asciic                 C   s4   || j v rt|| |< | | S d|| |< | | S )Nz={:02X})safechrformat)selfkeyr   r   r   __missing__M   s
   
z_QByteMap.__missing__N)__name__
__module____qualname__r   r   r   r   r!   r   r   r   r   r   I   s    r   _ c                 C   s   d dd | D S )N c                 s   s    | ]}t | V  qd S N)_q_byte_map.0xr   r   r   	<genexpr>Z   s    zencode_q.<locals>.<genexpr>)joinbstringr   r   r   r   Y   s   r   c                 C   s   t dd | D S )Nc                 s   s    | ]	}t t| V  qd S r(   )lenr)   r*   r   r   r   r-   ]   s    zlen_q.<locals>.<genexpr>)sumr/   r   r   r   r	   \   s   r	   c                 C   s   t | d }|rdd d|  nd}ztj| | dd|r$t gfW S g fW S  tjys   ztj| ddt gfW  Y S  tjyr   ztj| d ddt t gfW  Y  Y S  tjyq   | t gf Y  Y  Y S w w w )N   s   ===    T)validateFs   ==)	r1   base64Z	b64decoder   ZInvalidBase64PaddingDefectbinasciiErrorZInvalidBase64CharactersDefectZInvalidBase64LengthDefect)r   Zpad_errZmissing_paddingr   r   r   r   d   s2   
r   c                 C   s   t | dS )Nr   )r6   Z	b64encoder   r/   r   r   r   r      s   r   c                 C   s(   t t| d\}}|d |rd S d S )N   r3   r   )divmodr1   )r0   Zgroups_of_3Zleftoverr   r   r   r
      s   r
   )qbc           	   
   C   s   	 |  d\}}}}}|d\}}}| }|dd}t| |\}}z||}W n= tyG   |t	d|d ||d}Y n# t
tfyi   |dd}| dkrg|td|d	 Y nw ||||fS )
N?*r   surrogateescapez0Encoded word contains bytes not decodable using z charsetunknown-8bitzUnknown charset z* in encoded word; decoded as unknown bytes)split	partitionlowerr   _cte_decodersr   UnicodeDecodeErrorappendr   ZUndecodableBytesDefectLookupErrorUnicodeEncodeErrorZCharsetError)	Zewr%   charsetZcteZ
cte_stringlangr0   Zdefectsstringr   r   r   r      s(   
r   utf-8r'   c                 C   s~   	 |dkr|  dd}n|  |}|d u r+td |}td |}|| dk r)dnd}t| |}|r7d| }d||||S )	Nr@   r   r?   r;   r<      r>   z=?{}{}?{}?{}?=)r   _cte_encode_length_cte_encodersr   )rK   rI   encodingrJ   r0   ZqlenZblenr   r   r   r   r      s   
r   )rL   Nr'   )rer6   r7   	functoolsrK   r   r   Zemailr   __all__partialcompilesubr   r   dictr   r)   ordr   r	   r   r   r
   rD   r   rO   rN   r   r   r   r   r   <module>   s>    )&+