<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet"
        integrity="sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3/Jr59b6EGGoI1aFkw7cmDA6j6gD" crossorigin="anonymous">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.3.0/css/all.min.css"
        integrity="sha512-SzlrxWUlpfuzQ+pcUCosxcglQRNAq/DZjVsC0lE40xsADsfeQoEypE+enwcOiGjk/bSuGGKHEyjSoQ1zVisanQ=="
        crossorigin="anonymous" referrerpolicy="no-referrer" />
</head>
</html>
a
    XC?hF)                     @   s   g d Z ddlZdZdZdZee ZdZed d Zd	Zd
Z	ee e	 e Z
dddZddlZddlmZ i ZG dd dZe  G dd dZdS ))ascii_lettersascii_lowercaseascii_uppercasecapwordsdigits	hexdigits	octdigits	printablepunctuation
whitespace	FormatterTemplate    Nz 	
ZabcdefghijklmnopqrstuvwxyzZABCDEFGHIJKLMNOPQRSTUVWXYZ
0123456789ZabcdefZABCDEFZ01234567z !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~c                 C   s   |pd dd | |D S )N c                 s   s   | ]}|  V  qd S N)
capitalize).0x r   +/opt/alt/python39/lib64/python3.9/string.py	<genexpr>0       zcapwords.<locals>.<genexpr>)joinsplit)ssepr   r   r   r   %   s    r   )ChainMapc                       sV   e Zd ZdZdZdZejZ fddZ	dd Z
dd	 Zefd
dZefddZ  ZS )r   $z(?a:[_a-z][_a-z0-9]*)Nc              	      sr   t    d| jv r| j}n<t| j}| j}| jp8| j}d| d| d| d| d	}t	|| j
tjB | _d S )Npatternz
            z(?:
              (?P<escaped>zC)  |   # Escape sequence of two delimiters
              (?P<named>zJ)       |   # delimiter and a Python identifier
              {(?P<braced>z)} |   # delimiter and a braced identifier
              (?P<invalid>)             # Other ill-formed delimiter exprs
            )
            )super__init_subclass____dict__r   _reescape	delimiter	idpatternbraceidpatterncompileflagsVERBOSE)clsr   ZdelimidZbid	__class__r   r   r    E   s     

zTemplate.__init_subclass__c                 C   s
   || _ d S r   )template)selfr.   r   r   r   __init__W   s    zTemplate.__init__c                 C   sd   | d}| jd | jdd}|s.d}d}n"|td|d d  }t|}td||f d S )NinvalidT)keepends    z.Invalid placeholder in string: line %d, col %d)startr.   
splitlineslenr   
ValueError)r/   moilinescolnolinenor   r   r   _invalid\   s    
zTemplate._invalidc                   s:    t u r| n|rt|   fdd}j|jS )Nc                    sd   |  dp|  d}|d ur(t | S |  dd ur<jS |  dd urT|  tdjd S NnamedZbracedZescapedr1   z#Unrecognized named group in pattern)groupstrr$   r?   r9   r   r:   rA   mappingr/   r   r   convertn   s    
z$Template.substitute.<locals>.convert_sentinel_dict	_ChainMapr   subr.   r/   rF   ZkwsrG   r   rE   r   
substituteh   s    
zTemplate.substitutec                   s:    t u r| n|rt|   fdd}j|jS )Nc                    s   |  dp|  d}|d urFzt | W S  tyD   |    Y S 0 |  dd urZjS |  dd urp|   S tdjd S r@   )rB   rC   KeyErrorr$   r9   r   rD   rE   r   r   rG      s    z)Template.safe_substitute.<locals>.convertrH   rL   r   rE   r   safe_substitute{   s    
zTemplate.safe_substitute)__name__
__module____qualname__r$   r%   r&   r"   
IGNORECASEr(   r    r0   r?   rI   rM   rO   __classcell__r   r   r,   r   r   9   s   r   c                   @   sV   e Zd Zdd Zdd ZdddZdd	 Zd
d Zdd Zdd Z	dd Z
dd ZdS )r   c                O   s   |  |||S r   )vformat)r/   format_stringargskwargsr   r   r   format   s    zFormatter.formatc                 C   s.   t  }| ||||d\}}| ||| |S )N   )set_vformatcheck_unused_args)r/   rV   rW   rX   	used_argsresult_r   r   r   rU      s    zFormatter.vformatr   c              	   C   s   |dk rt dg }| |D ]\}}	}
}|r8|| |	d ur|	dkrj|du rXt dt|}	|d7 }n|	 r|r~t dd}| |	||\}}|| | ||}| j|
||||d |d\}
}|| 	||
 qd
||fS )Nr   zMax string recursion exceededr4   FzJcannot switch from manual field specification to automatic field numberingr3   )auto_arg_index)r9   parseappendrC   isdigit	get_fieldaddconvert_fieldr\   format_fieldr   )r/   rV   rW   rX   r^   Zrecursion_depthra   r_   Zliteral_text
field_nameformat_spec
conversionobjZarg_usedr   r   r   r\      s6    



zFormatter._vformatc                 C   s   t |tr|| S || S d S r   )
isinstanceint)r/   keyrW   rX   r   r   r   	get_value   s    
zFormatter.get_valuec                 C   s   d S r   r   )r/   r^   rW   rX   r   r   r   r]      s    zFormatter.check_unused_argsc                 C   s
   t ||S r   )rY   )r/   valuerj   r   r   r   rh      s    zFormatter.format_fieldc                 C   sN   |d u r|S |dkrt |S |dkr,t|S |dkr<t|S td|d S )Nr   raz"Unknown conversion specifier {0!s})rC   reprasciir9   rY   )r/   rq   rk   r   r   r   rg      s    zFormatter.convert_fieldc                 C   s
   t |S r   )_stringZformatter_parser)r/   rV   r   r   r   rb     s    zFormatter.parsec           	      C   sJ   t |\}}| |||}|D ] \}}|r8t||}q || }q ||fS r   )rv   Zformatter_field_name_splitrp   getattr)	r/   ri   rW   rX   firstrestrl   Zis_attrr;   r   r   r   re     s    
zFormatter.get_fieldN)r   )rP   rQ   rR   rY   rU   r\   rp   r]   rh   rg   rb   re   r   r   r   r   r      s    
6	r   )N)__all__rv   r
   r   r   r   r   r   r   r	   r   r   rer"   collectionsr   rJ   rI   r   r    r   r   r   r   r   <module>   s"   
Y