
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
3
ct„jc‘  ã               @   s”  d Z ddlmZmZmZ ddlm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mZ ddlZddlZddlZdd	d
ddddddddddddgZdadadd„ Zdd„ Zdd„ Zdd„ Zeadadejdddfd d
„Zd4d!d„Zd5d"d„Z d#d„ Z!d$d%„ Z"d&d„ Z#G d'd„ dƒZ$G d(d	„ d	ƒZ%ejfd)d„Z&d6d*d„Z'ejfd+d„Z(d,d„ Z)d-d„ Z*d.d„ Z+d/d„ Z,d7d0d„Z-d1d2„ Z.e/d3k�r�e&ƒ  dS )8z2.6é    )ÚStringIOÚBytesIOÚTextIOWrapper)ÚMappingN)Ú
FeedParser)ÚMessage)ÚwarnÚMiniFieldStorageÚFieldStorageÚparseÚparse_qsÚ	parse_qslÚparse_multipartÚparse_headerÚtestÚprint_exceptionÚprint_environÚ
print_formÚprint_directoryÚprint_argumentsÚprint_environ_usageÚescapeÚ c              G   sH   t r.t r.ytt dƒaW n tk
r,   Y nX ts8tantat| Ž  d S )NÚa)ÚlogfileÚlogfpÚopenÚOSErrorÚnologÚlogÚdolog)Úallargs© r"   ú/usr/lib64/python3.6/cgi.pyÚinitlog:   s    
r$   c             G   s   t j| | d ƒ d S )NÚ
)r   Úwrite)ZfmtÚargsr"   r"   r#   r    ]   s    r    c              G   s   d S )Nr"   )r!   r"   r"   r#   r   a   s    r   c               C   s   da trtjƒ  d atad S )Nr   )r   r   Úcloser$   r   r"   r"   r"   r#   Úcloseloge   s
    r)   c       
      C   s\  | d krt j} t| dƒr | j}nd}t| tƒr4| j} d|krDd|d< |d dk�rt|d ƒ\}}|dkrxt| ||d�S |d	kr²t	|d
 ƒ}t
r |t
kr tdƒ‚| j|ƒj|ƒ}	nd}	d|krØ|	rÊ|	d }	|	|d  }	n*t jdd … �r|	rô|	d }	|	t jd  }	|	|d< n<d|k�r |d }	n(t jdd … �r<t jd }	nd}	|	|d< tjj|	|||d�S )NÚencodingzlatin-1ÚREQUEST_METHODÚGETÚPOSTÚCONTENT_TYPEzmultipart/form-data)Ú	separatorz!application/x-www-form-urlencodedÚCONTENT_LENGTHzMaximum content length exceededr   ÚQUERY_STRINGú&é   )r*   )ÚsysÚstdinÚhasattrr*   Ú
isinstancer   Úbufferr   r   ÚintÚmaxlenÚ
ValueErrorÚreadÚdecodeÚargvÚurllibr   r   )
ÚfpÚenvironÚkeep_blank_valuesÚstrict_parsingr/   r*   ÚctypeÚpdictÚclengthÚqsr"   r"   r#   r   x   sH    

  


c             C   s    t dtdƒ tjj| |||d�S )Nz=cgi.parse_qs is deprecated, use urllib.parse.parse_qs insteadé   )r/   )r   ÚDeprecationWarningr?   r   r   )rG   rB   rC   r/   r"   r"   r#   r   ¾   s    c             C   s    t dtdƒ tjj| |||d�S )Nz?cgi.parse_qsl is deprecated, use urllib.parse.parse_qsl insteadrH   )r/   )r   rI   r?   r   r   )rG   rB   rC   r/   r"   r"   r#   r   Å   s    c             C   sö  dd l }d}d|kr|d }t|ƒs2td|f ƒ‚d| }d| d }i }d}�x ||k�rðd}d }	|rÐ|jj| ƒ}
|
jdƒ}|r¤yt|ƒ}W n tk
r¢   Y nX |dkrÌtrÀ|tkrÀtdƒ‚| j|ƒ}	nd}	g }xD| j	ƒ }|sè|}P |j
dƒ�r|jƒ }|||fk�rP |j|ƒ qÖW |	d k�r&qR|dk �rŽ|�rŽ|d }|dd … d
k�r^|d d… }n|dd … dk�r||d d… }||d< dj|ƒ}	|
d }|�sžqRt|ƒ\}}|dk�r¶qRd|krR|d }nqR||k�rä|| j|	ƒ qR|	g||< qRW |S )Nr   ó    Úboundaryz&Invalid boundary in multipart form: %rs   --r3   zcontent-lengthzMaximum content length exceededrH   s   
ó   
zcontent-dispositionz	form-dataÚnameéÿÿÿÿrN   éþÿÿÿrO   rN   rN   rN   )Zhttp.clientÚvalid_boundaryr;   ZclientZparse_headersÚgetr9   r:   r<   ÚreadlineÚ
startswithÚrstripÚappendÚjoinr   )r@   rE   ZhttprK   ZnextpartZlastpartZpartdictÚ
terminatorÚbytesÚdataÚheadersrF   ÚlinesÚlineÚkeyZparamsrM   r"   r"   r#   r   Ì   s|    







c             c   s    xš| d d… dkrš| dd … } | j dƒ}x<|dkrd| jdd|ƒ| jdd|ƒ d rd| j d|d ƒ}q*W |dk rvt| ƒ}| d |… }|jƒ V  | |d … } qW d S )Nr3   ú;r   ú"z\"rH   )ÚfindÚcountÚlenÚstrip)ÚsÚendÚfr"   r"   r#   Ú_parseparam/  s    
*
rg   c             C   s¼   t d|  ƒ}|jƒ }i }xš|D ]’}|jdƒ}|dkr|d |… jƒ jƒ }||d d … jƒ }t|ƒdkr¨|d |d
   ko‚dkn  r¨|dd… }|jddƒjd	dƒ}|||< qW ||fS )Nr^   ú=r   r3   rH   r_   z\\ú\z\"rN   rN   )rg   Ú__next__r`   rc   Úlowerrb   Úreplace)r\   Úpartsr]   rE   ÚpÚirM   Úvaluer"   r"   r#   r   ;  s    

,c               @   s<   e Zd ZdZdZdZdZi ZdZi Z	i Z
dd„ Zdd„ ZdS )r	   Nc             C   s   || _ || _d S )N)rM   rp   )ÚselfrM   rp   r"   r"   r#   Ú__init__a  s    zMiniFieldStorage.__init__c             C   s   d| j | jf S )NzMiniFieldStorage(%r, %r))rM   rp   )rq   r"   r"   r#   Ú__repr__g  s    zMiniFieldStorage.__repr__)Ú__name__Ú
__module__Ú__qualname__ÚfilenameÚlistÚtypeÚfileÚtype_optionsÚdispositionÚdisposition_optionsrZ   rr   rs   r"   r"   r"   r#   r	   S  s   c               @   sú   e Zd Zdddejdddddddfdd„Zdd	„ Zd
d„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zd: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Zd&d'„ Zd(d)„ Zd<Zd,d-„ Zd.d/„ Zd0d1„ Zd2d3„ Zd4d5„ Zd6d7„ Zd8d9„ ZdS )=r
   NrJ   r   zutf-8rl   c             C   sR  d}|| _ || _|
| _|| _d|kr0|d jƒ }d | _|dksF|dkržd|krX|d }ntjdd … rrtjd }nd}|jt	j
ƒ dƒ}t|ƒ}|d krždd	i}|d kröi }|d
krºd	|d< d|krÎ|d |d< d|krà|d | _d|krô|d |d< nt|ttfƒ�stdƒ‚|| _|d k�r*tjj| _n<t|tƒ�r@|j| _n&t|dƒ�oTt|dƒ�s`tdƒ‚|| _|| _|	| _t|tƒ�s�tdt|ƒj ƒ‚|| _d| _|| _di  }}d| jk�rÊt| jd ƒ\}}|| _|| _ d | _!d|k�rð|d | _!d | _"d|k�r
|d | _"| j"d k	| _#d| jk�r6t| jd ƒ\}}n(| j�sH|d
k�rTdi  }}n
d	i  }}|| _|| _$d|k�rˆ|d j| jƒ| _%nd| _%d}d| jk�ràyt&| jd ƒ}W n t'k
�rÆ   Y nX t(�rà|t(k�ràt'dƒ‚|| _)| jd k�rþ|�rþ|| _d  | _*| _+d| _,|d	k�r$| j-ƒ  n*|d d… dk�rF| j.|||ƒ n| j/ƒ  d S )Nr,   r+   ZHEADr1   r3   r   Úsurrogateescapezcontent-typez!application/x-www-form-urlencodedr-   r.   r0   zcontent-lengthz?headers must be mapping or an instance of email.message.Messager<   rR   zfp must be file pointerz#outerboundary must be bytes, not %sr   zcontent-dispositionrM   rw   z
text/plainrK   rJ   zMaximum content length exceededé
   z
multipart/rN   )0rB   rC   Úmax_num_fieldsr/   ÚupperÚ
qs_on_postr4   r>   ÚencodeÚlocaleÚgetpreferredencodingr   r7   r   r   Ú	TypeErrorrZ   r5   r8   r@   r   r6   r*   ÚerrorsrX   ry   rt   ÚouterboundaryÚ
bytes_readÚlimitr   r|   r}   rM   rw   Ú_binary_filer{   Úinnerboundaryr9   r;   r:   Úlengthrx   rz   ÚdoneÚread_urlencodedÚ
read_multiÚread_single)rq   r@   rZ   rˆ   rA   rB   rC   rŠ   r*   r‡   r€   r/   ÚmethodrG   ZcdisprE   rD   Zclenr"   r"   r#   rr   —  s®    /












zFieldStorage.__init__c             C   s(   y| j jƒ  W n tk
r"   Y nX d S )N)rz   r(   ÚAttributeError)rq   r"   r"   r#   Ú__del__;  s    zFieldStorage.__del__c             C   s   | S )Nr"   )rq   r"   r"   r#   Ú	__enter__A  s    zFieldStorage.__enter__c             G   s   | j jƒ  d S )N)rz   r(   )rq   r'   r"   r"   r#   Ú__exit__D  s    zFieldStorage.__exit__c             C   s   d| j | j| jf S )NzFieldStorage(%r, %r, %r))rM   rw   rp   )rq   r"   r"   r#   rs   G  s    zFieldStorage.__repr__c             C   s   t | jƒ ƒS )N)ÚiterÚkeys)rq   r"   r"   r#   Ú__iter__L  s    zFieldStorage.__iter__c             C   sT   |dkrt |ƒ‚| jr:| jjdƒ | jjƒ }| jjdƒ n| jd k	rL| j}nd }|S )Nrp   r   )r“   rz   Úseekr<   rx   )rq   rM   rp   r"   r"   r#   Ú__getattr__O  s    

zFieldStorage.__getattr__c             C   sb   | j d krtdƒ‚g }x"| j D ]}|j|kr|j|ƒ qW |sFt|ƒ‚t|ƒdkrZ|d S |S d S )Nznot indexabler3   r   )rx   r†   rM   rU   ÚKeyErrorrb   )rq   r]   ÚfoundÚitemr"   r"   r#   Ú__getitem__\  s    

 zFieldStorage.__getitem__c             C   s8   || kr0| | }t |tƒr(dd„ |D ƒS |jS n|S d S )Nc             S   s   g | ]
}|j ‘qS r"   )rp   )Ú.0Úxr"   r"   r#   ú
<listcomp>o  s    z)FieldStorage.getvalue.<locals>.<listcomp>)r7   rx   rp   )rq   r]   Údefaultrp   r"   r"   r#   Úgetvaluej  s    
zFieldStorage.getvaluec             C   s4   || kr,| | }t |tƒr$|d jS |jS n|S d S )Nr   )r7   rx   rp   )rq   r]   r£   rp   r"   r"   r#   Úgetfirstu  s    

zFieldStorage.getfirstc             C   s:   || kr2| | }t |tƒr(dd„ |D ƒS |jgS ng S d S )Nc             S   s   g | ]
}|j ‘qS r"   )rp   )r    r¡   r"   r"   r#   r¢   …  s    z(FieldStorage.getlist.<locals>.<listcomp>)r7   rx   rp   )rq   r]   rp   r"   r"   r#   Úgetlist€  s    

zFieldStorage.getlistc             C   s*   | j d krtdƒ‚t tdd„ | j D ƒƒƒS )Nznot indexablec             s   s   | ]}|j V  qd S )N)rM   )r    rž   r"   r"   r#   ú	<genexpr>�  s    z$FieldStorage.keys.<locals>.<genexpr>)rx   r†   Úset)rq   r"   r"   r#   r˜   ‹  s    
zFieldStorage.keysc                s*   | j d krtdƒ‚t‡ fdd„| j D ƒƒS )Nznot indexablec             3   s   | ]}|j ˆ kV  qd S )N)rM   )r    rž   )r]   r"   r#   r§   •  s    z,FieldStorage.__contains__.<locals>.<genexpr>)rx   r†   Úany)rq   r]   r"   )r]   r#   Ú__contains__‘  s    
zFieldStorage.__contains__c             C   s   t | jƒ ƒS )N)rb   r˜   )rq   r"   r"   r#   Ú__len__—  s    zFieldStorage.__len__c             C   s   | j d krtdƒ‚t| j ƒS )NzCannot be converted to bool.)rx   r†   Úbool)rq   r"   r"   r#   Ú__bool__›  s    
zFieldStorage.__bool__c          	   C   s–   | j j| jƒ}t|tƒs0td| j t|ƒjf ƒ‚|j| j	| j
ƒ}| jrT|d| j 7 }tjj|| j| j| j	| j
| j| jd�}dd„ |D ƒ| _| jƒ  d S )Nz%s should return bytes, got %sr2   )r*   r‡   r€   r/   c             S   s   g | ]\}}t ||ƒ‘qS r"   )r	   )r    r]   rp   r"   r"   r#   r¢   ­  s    z0FieldStorage.read_urlencoded.<locals>.<listcomp>)r@   r<   r�   r7   rX   r;   ry   rt   r=   r*   r‡   r‚   r?   r   r   rB   rC   r€   r/   rx   Ú
skip_lines)rq   rG   Úqueryr"   r"   r#   r�      s    

zFieldStorage.read_urlencodedc             C   sB  | j }t|ƒstd|f ƒ‚g | _| jrftjj| j| j| j	| j
| j| j| jd�}| jjdd„ |D ƒƒ | jpp| j}| jjƒ }t|tƒsžtd| jt|ƒjf ƒ‚|  jt|ƒ7  _x6|jƒ d| j  kræ|ræ| jjƒ }|  jt|ƒ7  _q²W | j}|d k	�r|t| jƒ8 }�x,tƒ }	d}
x$| jjƒ }|
|7 }
|jƒ �sP �qW |
�sBP |  jt|
ƒ7  _|	j|
j| j
| jƒƒ |	jƒ }d|k�r‚|d= || j|||||| j| j | j
| j|| jd	�}|d k	�rê|d
8 }|j�rØ|t|jƒ8 }|dk �rêtdƒ‚|  j|j7  _| jj|ƒ |j �s.| j| j!  k�o&dkn  �r
P �q
W | j"ƒ  d S )Nz&Invalid boundary in multipart form: %r)r*   r‡   r€   r/   c             s   s   | ]\}}t ||ƒV  qd S )N)r	   )r    r]   rp   r"   r"   r#   r§   ½  s    z*FieldStorage.read_multi.<locals>.<genexpr>z%s should return bytes, got %ss   --rJ   zcontent-length)r/   r3   r   zMax number of fields exceeded)#rŒ   rP   r;   rx   r‚   r?   r   r   rB   rC   r*   r‡   r€   r/   ÚextendÚFieldStorageClassÚ	__class__r@   rR   r7   rX   ry   rt   r‰   rb   rc   r   Zfeedr=   r(   rŠ   rU   rŽ   r�   r®   )rq   rA   rB   rC   Zibr¯   ÚklassZ
first_liner€   ÚparserZhdr_textrY   rZ   Úpartr"   r"   r#   r�   ²  sj    










(zFieldStorage.read_multic             C   s4   | j dkr| jƒ  | jƒ  n| jƒ  | jjdƒ d S )Nr   )r�   Úread_binaryr®   Ú
read_linesrz   rš   )rq   r"   r"   r#   r‘   ö  s
    

zFieldStorage.read_singleé   i   c             C   s–   | j ƒ | _| j}|dkr’xx|dkr�| jjt|| jƒƒ}t|tƒsXt	d| jt
|ƒjf ƒ‚|  jt|ƒ7  _|svd| _P | jj|ƒ |t|ƒ }qW d S )Nr   z%s should return bytes, got %sr3   rN   )Ú	make_filerz   r�   r@   r<   ÚminÚbufsizer7   rX   r;   ry   rt   r‰   rb   rŽ   r&   )rq   ZtodorY   r"   r"   r#   r¶     s    


zFieldStorage.read_binaryc             C   s@   | j rtƒ  | _| _ntƒ  | _| _| jr4| jƒ  n| jƒ  d S )N)r‹   r   rz   Ú_FieldStorage__filer   rˆ   Úread_lines_to_outerboundaryÚread_lines_to_eof)rq   r"   r"   r#   r·     s    
zFieldStorage.read_linesc             C   sv   | j d k	rF| j jƒ t|ƒ dkrF| jƒ | _| j jƒ }| jj|ƒ d | _ | jrZ| jj|ƒ n| jj|j| j	| j
ƒƒ d S )Niè  )r¼   Útellrb   r¹   rz   r¤   r&   r‹   r=   r*   r‡   )rq   r\   rY   r"   r"   r#   Z__write  s    


zFieldStorage.__writec             C   s>   x8| j jdƒ}|  jt|ƒ7  _|s,d| _P | j|ƒ qW d S )Nr3   é   i   rN   )r@   rR   r‰   rb   rŽ   Ú_FieldStorage__write)rq   r\   r"   r"   r#   r¾   ,  s    zFieldStorage.read_lines_to_eofc       	      C   s,  d| j  }|d }d}d}d}�x|| jkr.P | jjdƒ}|  jt|ƒ7  _|t|ƒ7 }|sdd| _P |dkrx|| }d}|jdƒr¨|r¨|jƒ }||kr˜P ||kr¨d| _P |}|j	dƒrÌd}|d d… }d}nJ|j	d
ƒrìd
}|d d… }d}n*|j	dƒ�rd}|d d… }d}nd}d}| j
|| ƒ q"W d S )Ns   --rJ   Tr   r3   rÀ   ó   s   
rH   rL   Fi   rN   rO   rN   rN   )rˆ   rŠ   r@   rR   r‰   rb   rŽ   rS   rT   ÚendswithrÁ   )	rq   Únext_boundaryÚlast_boundaryZdelimÚlast_line_lfendZ_readr\   ÚstrippedlineZodelimr"   r"   r#   r½   6  sP    



z(FieldStorage.read_lines_to_outerboundaryc             C   s–   | j  s| jrd S d| j  }|d }d}xh| jjdƒ}|  jt|ƒ7  _|sTd| _P |jdƒr„|r„|jƒ }||krtP ||kr„d| _P |jdƒ}q*W d S )Ns   --Tr3   rÀ   rL   i   rN   )rˆ   rŽ   r@   rR   r‰   rb   rÃ   rc   )rq   rÄ   rÅ   rÆ   r\   rÇ   r"   r"   r#   r®   g  s&    
zFieldStorage.skip_linesc             C   s&   | j rtjdƒS tjd| jdd�S d S )Nzwb+zw+r%   )r*   Únewline)r‹   ÚtempfileZTemporaryFiler*   )rq   r"   r"   r#   r¹   }  s    
zFieldStorage.make_file)N)Ni    ) rt   ru   rv   ÚosrA   rr   r”   r•   r–   rs   r™   r›   rŸ   r¤   r¥   r¦   r˜   rª   r«   r­   r�   r±   r�   r‘   r»   r¶   r·   rÁ   r¾   r½   r®   r¹   r"   r"   r"   r#   r
   l  s>   + "

D	
1c             C   sÂ   t dƒ t ƒ  tjt_yNtƒ }tƒ  tƒ  t|ƒ t| ƒ t	ƒ  dd„ }|fdd„}t dƒ |ƒ  W n   t
ƒ  Y nX t dƒ day&tƒ }tƒ  tƒ  t|ƒ t| ƒ W n   t
ƒ  Y nX d S )	NzContent-type: text/htmlc               S   s   t dƒ d S )Nz,testing print_exception() -- <I>italics?</I>)Úexecr"   r"   r"   r#   rf   °  s    ztest.<locals>.fc             S   s
   | ƒ  d S )Nr"   )rf   r"   r"   r#   Úg²  s    ztest.<locals>.gz9<H3>What follows is a test, not an actual exception:</H3>z*<H1>Second try with a small maxlen...</H1>é2   )Úprintr4   ÚstdoutÚstderrr
   r   r   r   r   r   r   r:   )rA   Úformrf   rÌ   r"   r"   r#   r   Ÿ  s4    
c             C   sx   | d krt jƒ \} }}dd l}tƒ  tdƒ |j||ƒ|j| |ƒ }tdtjdj|d d… ƒƒtj|d ƒf ƒ ~d S )Nr   z+<H3>Traceback (most recent call last):</H3>z<PRE>%s<B>%s</B></PRE>r   r3   rN   rN   )	r4   Úexc_infoÚ	tracebackrÎ   Ú	format_tbÚformat_exception_onlyÚhtmlr   rV   )ry   rp   ÚtbrŠ   rÓ   rx   r"   r"   r#   r   Æ  s    
c             C   s`   t | jƒ ƒ}tƒ  tdƒ tdƒ x*|D ]"}tdtj|ƒdtj| | ƒƒ q(W tdƒ tƒ  d S )Nz<H3>Shell Environment:</H3>z<DL>z<DT>z<DD>z</DL>)Úsortedr˜   rÎ   rÖ   r   )rA   r˜   r]   r"   r"   r#   r   Ô  s    
"c             C   s¤   t | jƒ ƒ}tƒ  tdƒ |s&tdƒ tdƒ xb|D ]Z}tdtj|ƒ d dd� | | }tdtjtt|ƒƒƒ d	 ƒ td
tjt|ƒƒ ƒ q4W tdƒ tƒ  d S )Nz<H3>Form Contents:</H3>z<P>No form fields.z<DL>z<DT>ú:ú )re   z<i>z</i>z<DD>z</DL>)rØ   r˜   rÎ   rÖ   r   Úreprry   )rÑ   r˜   r]   rp   r"   r"   r#   r   ß  s    
c              C   sj   t ƒ  t dƒ ytjƒ } W n6 tk
rP } zt dtjt|ƒƒƒ W Y d d }~X nX t tj| ƒƒ t ƒ  d S )Nz#<H3>Current Working Directory:</H3>zOSError:)rÎ   rÊ   Úgetcwdr   rÖ   r   Ústr)ÚpwdÚmsgr"   r"   r#   r   ï  s    &c               C   s(   t ƒ  t dƒ t ƒ  t tjƒ t ƒ  d S )Nz <H3>Command Line Arguments:</H3>)rÎ   r4   r>   r"   r"   r"   r#   r   û  s
    
c               C   s   t dƒ d S )NaØ  
<H3>These environment variables could have been set:</H3>
<UL>
<LI>AUTH_TYPE
<LI>CONTENT_LENGTH
<LI>CONTENT_TYPE
<LI>DATE_GMT
<LI>DATE_LOCAL
<LI>DOCUMENT_NAME
<LI>DOCUMENT_ROOT
<LI>DOCUMENT_URI
<LI>GATEWAY_INTERFACE
<LI>LAST_MODIFIED
<LI>PATH
<LI>PATH_INFO
<LI>PATH_TRANSLATED
<LI>QUERY_STRING
<LI>REMOTE_ADDR
<LI>REMOTE_HOST
<LI>REMOTE_IDENT
<LI>REMOTE_USER
<LI>REQUEST_METHOD
<LI>SCRIPT_NAME
<LI>SERVER_NAME
<LI>SERVER_PORT
<LI>SERVER_PROTOCOL
<LI>SERVER_ROOT
<LI>SERVER_SOFTWARE
</UL>
In addition, HTTP headers sent by the server may be passed in the
environment as well.  Here are some common variable names:
<UL>
<LI>HTTP_ACCEPT
<LI>HTTP_CONNECTION
<LI>HTTP_HOST
<LI>HTTP_PRAGMA
<LI>HTTP_REFERER
<LI>HTTP_USER_AGENT
</UL>
)rÎ   r"   r"   r"   r#   r     s    'c             C   sF   t dtdd� | jddƒ} | jddƒ} | jdd	ƒ} |rB| jd
dƒ} | S )Nz1cgi.escape is deprecated, use html.escape insteadrH   )Ú
stacklevelr2   z&amp;ú<z&lt;ú>z&gt;r_   z&quot;)r   rI   rl   )rd   Zquoter"   r"   r#   r   1  s    
c             C   s(   dd l }t| tƒrd}nd}|j|| ƒS )Nr   s   ^[ -~]{0,200}[!-~]$z^[ -~]{0,200}[!-~]$)Úrer7   rX   Úmatch)rd   rã   Z_vb_patternr"   r"   r#   rP   =  s
    
rP   Ú__main__)r   r   N)r   r   N)NNNN)N)0Ú__version__Úior   r   r   Úcollectionsr   r4   rÊ   Zurllib.parser?   Zemail.parserr   Zemail.messager   Úwarningsr   rÖ   r„   rÉ   Ú__all__r   r   r$   r    r   r)   r   r:   rA   r   r   r   r   rg   r   r	   r
   r   r   r   r   r   r   r   r   rP   rt   r"   r"   r"   r#   Ú<module>   s`   #	E

c    7'
/

