ÿØÿà JFIF      ÿÛ „ 	 ( %!1!%)+//.383,7(-.+



-%%-////---/-.+/--+------/------/--0+--/-/-----.-----ÿÀ  ¥2" ÿÄ               ÿÄ J  	     ! 1AQ"aq2‘#BR‚¡ÁÑ3br’¢±Âð$CSƒ²á4c“%DsÓñÿÄ              ÿÄ *        !1AQa‘"2q3±ð#b¡ÿÚ   ? ¼QxJQaÍuò¸Zö Úü8,ÐÚú
"SSn<rçù–´âE—^ªBÖ9À\†¸ÔÁT­ÃÛ5
ëd´³Í#Ý;Þ38œî ¶H£M:wÎ3…³…âpÔF&‚FK¸9„â4àGEõªfÿ ‘ñ(ßw­pŽF|È¥ù®häðÍÑ¶¹‘[ÒinÙW¶ùñY˜Q{›K"išÒ[Ú8žë\F¹@-?v"ÔU”,ìöžkÿ {I‡£šÍ?e
ríV
..............................................................................................................................................................................
.............................................................................                                                  
                                                                                                                                                                                     ÿØÿà JFIF      ÿÛ „ 	 ( %!1!%)+//.383,7(-.+



-%%-////---/-.+/--+------/------/--0+--/-/-----.-----ÿÀ  ¥2" ÿÄ               ÿÄ J  	     ! 1AQ"aq2‘#BR‚¡ÁÑ3br’¢±Âð$CSƒ²á4c“%DsÓñÿÄ              ÿÄ *        !1AQa‘"2q3±ð#b¡ÿÚ   ? ¼QxJQaÍuò¸Zö Úü8,ÐÚú
"SSn<rçù–´âE—^ªBÖ9À\†¸ÔÁT­ÃÛ5
ëd´³Í#Ý;Þ38œî ¶H£M:wÎ3…³…âpÔF&‚FK¸9„â4àGEõªfÿ ‘ñ(ßw­pŽF|È¥ù®häðÍÑ¶¹‘[ÒinÙW¶ùñY˜Q{›K"išÒ[Ú8žë\F¹@-?v"ÔU”,ìöžkÿ {I‡£šÍ?e
ríV
..............................................................................................................................................................................
.............................................................................                                                  
                                                                                                                                                                                     U
    e5d#,                    @   s  d dddddddgZ dd	lZdd	lZdd	lZdd	lZdd	lZdd	lZdd	lZdd	l	Z
dd	lZdd
lmZ dZd	add ZeejjZdZdd ZdZdd ZdddddddgZdddddd d!d"d#d$d%d&gZg ZeD ]Zee  qdtd'd(Z dud)d*Z!d	d	d	d	d+Z"e#d,ej$Z%d-d. Z&d/d0 Z'e#d1ej$Z(e#d2ej)ej$B Z*e#d3ej+ej$B Z,d4d5 Z-e#d6ej+ej$B Z.d7d8 Z/d9d: Z0e#d;Z1e#d<Z2e#d=Z3e#d>Z4d?d@ Z5e#dAZ6dBdC Z7dDdE Z8dFdG Z9e#dHej$Z:dIdJ Z;dKdL Z<dMdN Z=dOdP Z>e#dQej$Z?dRdS Z@dTdU ZAdVdW ZBdXdY ZCdZZDe#d[ZEd\d] ZFd^d_ ZGd`da ZHdbdc ZIG ddd  d ZJG ded dZKG dfd deKZLdgdh ZMdidj ZNG dkdl dlZOG dmd dZPG dnd deQZRG dod dePZSdpdq ZTG drd deSZUG dsd deSZVd	S )vCookie	CookieJarCookiePolicyDefaultCookiePolicyFileCookieJarLWPCookieJar	LoadErrorMozillaCookieJar    N)timegmFc                  G   s(   t sd S tsdd l}|datj |  S )Nr	   zhttp.cookiejar)debugloggerloggingZ	getLogger)argsr    r   &/usr/lib64/python3.8/http/cookiejar.py_debug,   s    
r   zQa filename was not supplied (nor was the CookieJar instance initialised with one)c                  C   sJ   dd l } dd l}dd l}|  }|d | | }|jd| dd d S )Nr	   zhttp.cookiejar bug!
%s   )
stacklevel)iowarnings	tracebackStringIO	print_excgetvaluewarn)r   r   r   fmsgr   r   r   _warn_unhandled_exception:   s
    r   i  c                 C   s   | d d \}}}}}}|t krd|  kr4dkrn nhd|  krLdkrn nPd|  krddkrn n8d|  kr|dkrn n d|  krdkrn nt| S d S d S )	N            r	      ;   =   )
EPOCH_YEARr
   )ttyearmonthZmdayhourminsecr   r   r   _timegmI   s&    8 
 
 
r,   ZMonZTueZWedZThuZFriZSatZSunZJanZFebZMarZAprZMayZJunZJulZAugZSepZOctZNovZDecc                 C   s@   | d krt j  }nt j | }d|j|j|j|j|j|jf S )Nz%04d-%02d-%02d %02d:%02d:%02dZ)	datetimeutcnowutcfromtimestampr'   r(   dayr)   minutesecondtZdtr   r   r   	time2isozW   s         r5   c                 C   sR   | d krt j  }nt j | }dt|  |jt|jd  |j|j	|j
|jf S )Nz#%s, %02d-%s-%04d %02d:%02d:%02d GMTr   )r-   r.   r/   DAYSZweekdayr0   MONTHSr(   r'   r)   r1   r2   r3   r   r   r   time2netscapej   s    
     r8   )ZGMTUTCZUTZz^([-+])?(\d\d?):?(\d\d)?$c                 C   sj   d }| t krd}nTt| }|rfdt|d }|drR|dt|d  }|ddkrf| }|S )Nr	   i  r      <   r   -)	UTC_ZONESTIMEZONE_REsearchintgroup)tzoffsetmr   r   r   offset_from_tz_string   s    

rF   c                 C   s  t |}|tjkrd S zt| d }W n^ tk
r   zt |}W n tk
r`   Y Y d S X d|  krvdkrn n|}nY d S Y nX |d krd}|d krd}|d krd}t | } t |}t |}t |}|dk r6tt d }|d }	|}
|| |	 }|	|
 }	t	|	dkr6|	dkr.|d }n|d }t
||| ||||f}|d k	r|d krdd}| }t|}|d krd S || }|S )Nr   r    r	   i  d   2   r9   )rA   r-   ZMAXYEARMONTHS_LOWERindexlower
ValueErrortime	localtimeabsr,   upperrF   )r0   monyrhrr*   r+   rC   ZimonZcur_yrrE   Ztmpr4   rD   r   r   r   	_str2time   sV    

   

 



rT   zV^[SMTWF][a-z][a-z], (\d\d) ([JFMASOND][a-z][a-z]) (\d\d\d\d) (\d\d):(\d\d):(\d\d) GMT$z+^(?:Sun|Mon|Tue|Wed|Thu|Fri|Sat)[a-z]*,?\s*a  ^
    (\d\d?)            # day
       (?:\s+|[-\/])
    (\w+)              # month
        (?:\s+|[-\/])
    (\d+)              # year
    (?:
          (?:\s+|:)    # separator before clock
       (\d\d?):(\d\d)  # hour:min
       (?::(\d\d))?    # optional seconds
    )?                 # optional clock
       \s*
    (?:
       ([-+]?\d{2,4}|(?![APap][Mm]\b)[A-Za-z]+) # timezone
       \s*
    )?
    (?:
       \(\w+\)         # ASCII representation of timezone in parens.
       \s*
    )?$c                 C   s   t | }|rl| }t|d  d }t|d |t|d t|d t|d t|d f}t|S | 	 } t
d| d} d gd \}}}}}}	}
t| }|d k	r| \}}}}}}	}
nd S t||||||	|
S )	Nr   r   r	   r;             )STRICT_DATE_REr@   groupsrI   rJ   rK   rA   floatr,   lstrip
WEEKDAY_REsubLOOSE_HTTP_DATE_RErT   )textrE   grQ   r&   r0   rR   rS   r*   r+   rC   r   r   r   	http2time   s$    

 
 

rb   a  ^
    (\d{4})              # year
       [-\/]?
    (\d\d?)              # numerical month
       [-\/]?
    (\d\d?)              # day
   (?:
         (?:\s+|[-:Tt])  # separator before clock
      (\d\d?):?(\d\d)    # hour:min
      (?::?(\d\d(?:\.\d*)?))?  # optional seconds (and fractional)
   )?                    # optional clock
      \s*
   (?:
      ([-+]?\d\d?:?(:?\d\d)?
       |Z|z)             # timezone  (Z is "zero meridian", i.e. GMT)
      \s*
   )?$c           
      C   sd   |   } d gd \}}}}}}}t| }|d k	rL| \}}}}}}}}	nd S t|||||||S )NrX   )r\   ISO_DATE_REr@   rZ   rT   )
r`   r0   rQ   rR   rS   r*   r+   rC   rE   _r   r   r   iso2time+  s    
re   c                 C   s*   |  d\}}| jd | | j|d   S )Nr	   )spanstring)matchstartendr   r   r   	unmatchedL  s    rk   z^\s*([^=\s;,]+)z&^\s*=\s*\"([^\"\\]*(?:\\.[^\"\\]*)*)\"z^\s*=\s*([^\s;,]*)z\\(.)c           
      C   s  g }| D ]}|}g }|rt |}|rt|}|d}t|}|rft|}|d}td|}n.t|}|rt|}|d}| }nd }|	||f q|
 dr|
 dd  }|r|	| g }qtdd|\}}	|}q|r|	| q|S )Nr   z\1,z^[=\s;]*rW   )HEADER_TOKEN_REr@   rk   rB   HEADER_QUOTED_VALUE_REHEADER_ESCAPE_REr^   HEADER_VALUE_RErstripappendr\   
startswithresubn)
Zheader_valuesresultr`   Z	orig_textpairsrE   namevalueZnon_junkZnr_junk_charsr   r   r   split_header_wordsU  s>    .






 
 rz   ([\"\\])c                 C   s|   g }| D ]h}g }|D ]F\}}|d k	rPt d|sDtd|}d| }d||f }|| q|r|d| qd|S )Nz^\w+$\\\1z"%s"%s=%s; , )rt   r@   HEADER_JOIN_ESCAPE_REr^   rr   join)Zlistsheadersrw   attrkvr   r   r   join_header_words  s     r   c                 C   s0   |  dr| dd  } | dr,| d d } | S )N"r   )rs   endswithr`   r   r   r   strip_quotes  s
    

r   c                 C   s   d}g }| D ]}g }d}t |dD ]\}}| }|d\}}	}
| }|sb|dkr& qnq&|	rn|
 nd }
|dkr| }||kr|}|dkr|
d k	rt|
}
d}n|dkr|
d k	rtt|
}
|||
f q&|r|s|d	 || q|S )
N)expiresdomainpathsecureversionportmax-ageF;=r	   r   Tr   )r   0)	enumeratesplitstrip	partitionrK   r   rb   rr   )Z
ns_headersZknown_attrsrv   Z	ns_headerrw   version_setZiiZparamkeysepvallcr   r   r   parse_ns_headers  s>    
r   z\.\d+$c                 C   s:   t | rdS | dkrdS | d dks2| d dkr6dS dS )NFrW   r	   .r   TIPV4_REr@   r   r   r   r   is_HDN  s    
r   c                 C   sl   |   } |  }| |krdS t| s(dS | |}|dksB|dkrFdS |dsTdS t|dd  shdS dS )NTFr   r	   r   r   )rK   r   rfindrs   )ABir   r   r   domain_match  s    

r   c                 C   s   t | rdS dS NFTr   r   r   r   r   liberal_is_HDNF  s    
r   c                 C   s`   |   } |  }t| r t|s0| |kr,dS dS |d}|rL| |rLdS |s\| |kr\dS dS )NTFr   )rK   r   rs   r   )r   r   initial_dotr   r   r   user_domain_matchP  s    
r   z:\d+$c                 C   sB   |   }tj|d }|dkr,| dd}td|d}| S )Nr   rW   ZHost)get_full_urlurllibparseZurlparseZ
get_headercut_port_rer^   rK   )requesturlhostr   r   r   request_hoste  s    r   c                 C   s4   t |  }}|ddkr,t|s,|d }||fS )Nr   r   .local)r   findr   r@   )r   erhnreq_hostr   r   r   eff_request_hostu  s    r   c                 C   s4   |   }tj|}t|j}|ds0d| }|S )N/)r   r   r   Zurlsplitescape_pathr   rs   )r   r   partsr   r   r   r   request_path  s    

r   c                 C   s`   | j }|d}|dkrX||d d  }zt| W q\ tk
rT   td| Y d S X nt}|S )N:r	   r   znonnumeric port: '%s')r   r   rA   rL   r   DEFAULT_HTTP_PORT)r   r   r   r   r   r   r   request_port  s    


r   z%/;:@&=+$,!~*'()z%([0-9a-fA-F][0-9a-fA-F])c                 C   s   d|  d  S )Nz%%%sr   )rB   rP   )rh   r   r   r   uppercase_escaped_char  s    r   c                 C   s   t j| t} tt| } | S N)r   r   ZquoteHTTP_PATH_SAFEESCAPED_CHAR_REr^   r   )r   r   r   r   r     s    
r   c                 C   sP   |  d}|dkrL| |d d  }| d}t| rL|dksD|dkrLd| S | S )Nr   r	   r   Zlocal)r   r   )hr   br   r   r   reach  s    

r   c                 C   s$   t | }t|t| jsdS dS d S NTF)r   r   r   Zorigin_req_host)r   r   r   r   r   is_third_party  s    
r   c                   @   sJ   e Zd ZdddZdd ZdddZd	d
 ZdddZdd Zdd Z	dS )r   Fc                 C   s   |d k	rt |}|d k	r$t t|}|d kr<|dkr<td|| _|| _|| _|| _|| _| | _	|| _
|| _|	| _|
| _|| _|| _|| _|| _|| _|| _t|| _d S )NTz-if port is None, port_specified must be false)rA   r[   rL   r   rx   ry   r   port_specifiedrK   r   domain_specifieddomain_initial_dotr   path_specifiedr   r   discardcommentcomment_urlrfc2109copy_rest)selfr   rx   ry   r   r   r   r   r   r   r   r   r   r   r   r   restr   r   r   r   __init__  s.      
zCookie.__init__c                 C   s
   || j kS r   r   )r   rx   r   r   r   has_nonstandard_attr  s    zCookie.has_nonstandard_attrNc                 C   s   | j ||S r   )r   get)r   rx   defaultr   r   r   get_nonstandard_attr  s    zCookie.get_nonstandard_attrc                 C   s   || j |< d S r   r   )r   rx   ry   r   r   r   set_nonstandard_attr   s    zCookie.set_nonstandard_attrc                 C   s,   |d krt   }| jd k	r(| j|kr(dS dS r   )rM   r   )r   nowr   r   r   
is_expired#  s
     zCookie.is_expiredc                 C   sX   | j d krd}n
d| j  }| j| | j }| jd k	rFd| j| jf }n| j}d||f S )NrW   r   r}   z<Cookie %s for %s>)r   r   r   ry   rx   )r   plimitZ	namevaluer   r   r   __str__)  s    
 

zCookie.__str__c                 C   sl   g }dD ]$}t | |}|d|t|f  q|dt| j  |dt| j  d| jjd|f S )N)r   rx   ry   r   r   r   r   r   r   r   r   r   r   r   r   r}   zrest=%sz
rfc2109=%sz%s(%s)r   )getattrrr   reprr   r   	__class____name__r   )r   r   rx   r   r   r   r   __repr__3  s    
zCookie.__repr__)F)N)N)
r   
__module____qualname__r   r   r   r   r   r   r   r   r   r   r   r     s    
*


c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
r   c                 C   s
   t  d S r   NotImplementedErrorr   cookier   r   r   r   set_okK  s    zCookiePolicy.set_okc                 C   s
   t  d S r   r   r   r   r   r   	return_okT  s    zCookiePolicy.return_okc                 C   s   dS NTr   )r   r   r   r   r   r   domain_return_okX  s    zCookiePolicy.domain_return_okc                 C   s   dS r   r   )r   r   r   r   r   r   path_return_ok]  s    zCookiePolicy.path_return_okN)r   r   r   r   r   r   r   r   r   r   r   r   B  s   		c                   @   s   e Zd ZdZdZdZdZeeB Zddddddddde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 Z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, Zd-d. Zd/d0 Zd1d2 Zd3d4 Zd5d6 ZdS )7r   r   r   rU   r	   NTF)ZhttpsZwssc                 C   sv   || _ || _|| _|| _|| _|| _|	| _|
| _|| _|| _	|| _
|d k	rVt|| _nd| _|d k	rlt|}|| _d S )Nr   )netscaperfc2965rfc2109_as_netscapehide_cookie2strict_domainstrict_rfc2965_unverifiablestrict_ns_unverifiablestrict_ns_domainstrict_ns_set_initial_dollarstrict_ns_set_pathsecure_protocolstuple_blocked_domains_allowed_domains)r   blocked_domainsallowed_domainsr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   m  s"    zDefaultCookiePolicy.__init__c                 C   s   | j S r   )r   r   r   r   r   r     s    z#DefaultCookiePolicy.blocked_domainsc                 C   s   t || _d S r   )r   r   )r   r   r   r   r   set_blocked_domains  s    z'DefaultCookiePolicy.set_blocked_domainsc                 C   s    | j D ]}t||r dS qdS r   )r   r   )r   r   Zblocked_domainr   r   r   
is_blocked  s    

zDefaultCookiePolicy.is_blockedc                 C   s   | j S r   )r   r  r   r   r   r    s    z#DefaultCookiePolicy.allowed_domainsc                 C   s   |d k	rt |}|| _d S r   )r   r   )r   r  r   r   r   set_allowed_domains  s    z'DefaultCookiePolicy.set_allowed_domainsc                 C   s.   | j d krdS | j D ]}t||r dS qdS r   )r   r   )r   r   Zallowed_domainr   r   r   is_not_allowed  s    


z"DefaultCookiePolicy.is_not_allowedc                 C   s@   t d|j|j dD ]&}d| }t| |}|||s dS qdS )N - checking cookie %s=%s)r   verifiabilityrx   r   r   r   Zset_ok_FTr   rx   ry   r   r   r   r   nZfn_namefnr   r   r   r     s    

zDefaultCookiePolicy.set_okc                 C   sZ   |j d krtd|j|j dS |j dkr:| js:td dS |j dkrV| jsVtd dS dS )Nz0   Set-Cookie2 without version attribute (%s=%s)Fr	   $   RFC 2965 cookies are switched off$   Netscape cookies are switched offT)r   r   rx   ry   r   r   r   r   r   r   set_ok_version  s    
 z"DefaultCookiePolicy.set_ok_versionc                 C   sJ   |j rFt|rF|jdkr*| jr*td dS |jdkrF| jrFtd dS dS Nr	   z>   third-party RFC 2965 cookie during unverifiable transactionFz>   third-party Netscape cookie during unverifiable transactionTZunverifiabler   r   r   r   r   r   r   r   r   set_ok_verifiability  s    z(DefaultCookiePolicy.set_ok_verifiabilityc                 C   s0   |j dkr,| jr,|jdr,td|j dS dS )Nr	   $z'   illegal name (starts with '$'): '%s'FT)r   r   rx   rs   r   r   r   r   r   set_ok_name  s    
zDefaultCookiePolicy.set_ok_namec                 C   sL   |j rHt|}|jdks(|jdkrH| jrH| |j|sHtd|j| dS dS )Nr	   z7   path attribute %s is not a prefix of request path %sFT)r   r   r   r   r   r   r   )r   r   r   req_pathr   r   r   set_ok_path  s    
 zDefaultCookiePolicy.set_ok_pathc                 C   s  |  |jrtd|j dS | |jr8td|j dS |jrt|\}}|j}| jr|ddkr|d}|dd|}|dkr||d d  }||d | }	|		 dkrt
|dkrtd	| dS |dr|dd  }
n|}
|
ddk}|s|d
krtd| dS |jdkrX||sX|dsXd| |sXtd|| dS |jdksr| j| j@ rt||std|| dS |jdks| j| j@ r|d t
|  }|ddkrt|std|| dS dS )N"   domain %s is in user block-listF&   domain %s is not in user allow-listr   r   r	   r   )coZacZcomZeduZorgZnetZgovZmilrA   ZaeroZbizcatZcoopinfoZjobsZmobiZmuseumrx   ZproZtravelZeuz&   country-code second level domain %sr   z/   non-local domain %s contains no embedded dotzO   effective request-host %s (even with added initial dot) does not end with %sz5   effective request-host %s does not domain-match %sz.   host prefix %s for domain %s contains a dotT)r  r   r   r  r   r   r   countr   rK   lenrs   r   r   r   r   DomainRFC2965Matchr   DomainStrictNoDotsr   r@   )r   r   r   r   r   r   r   jZtldZsldZundotted_domainZembedded_dotsZhost_prefixr   r   r   set_ok_domain  s|    



 
 
 z!DefaultCookiePolicy.set_ok_domainc              	   C   s   |j rt|}|d krd}nt|}|jdD ]@}zt| W n" tk
rb   td| Y  dS X ||kr0 qq0td||j dS dS )N80rl   z   bad port %s (not numeric)Fz$   request port (%s) not found in %sT)r   r   strr   r   rA   rL   r   r   r   r   Zreq_portr   r   r   r   set_ok_port+  s&    

 zDefaultCookiePolicy.set_ok_portc                 C   s@   t d|j|j dD ]&}d| }t| |}|||s dS qdS )Nr  )r   r  r   r   r   r   Z
return_ok_FTr	  r
  r   r   r   r   @  s    	

zDefaultCookiePolicy.return_okc                 C   s<   |j dkr| jstd dS |j dkr8| js8td dS dS )Nr	   r  Fr  T)r   r   r   r   r   r   r   r   return_ok_versionR  s    z%DefaultCookiePolicy.return_ok_versionc                 C   sJ   |j rFt|rF|jdkr*| jr*td dS |jdkrF| jrFtd dS dS r  r  r   r   r   r   return_ok_verifiability[  s    z+DefaultCookiePolicy.return_ok_verifiabilityc                 C   s"   |j r|j| jkrtd dS dS )Nz(   secure cookie with non-secure requestFT)r   typer   r   r   r   r   r   return_ok_secureg  s    z$DefaultCookiePolicy.return_ok_securec                 C   s   | | jrtd dS dS )Nz   cookie expiredFT)r   _nowr   r   r   r   r   return_ok_expiresm  s    z%DefaultCookiePolicy.return_ok_expiresc                 C   sN   |j rJt|}|d krd}|j dD ]}||kr& qJq&td||j  dS dS )Nr"  rl   z0   request port %s does not match cookie port %sFT)r   r   r   r   r$  r   r   r   return_ok_ports  s     z"DefaultCookiePolicy.return_ok_portc                 C   s   t |\}}|j}|r*|ds*d| }n|}|jdkr^| j| j@ r^|js^||kr^td dS |jdkrt||std|| dS |jdkrd| 	|std|| dS dS )Nr   r	   zQ   cookie with unspecified domain does not string-compare equal to request domainFzQ   effective request-host name %s does not domain-match RFC 2965 cookie domain %sz;   request-host %s does not match Netscape cookie domain %sT)
r   r   rs   r   r   DomainStrictNonDomainr   r   r   r   )r   r   r   r   r   r   	dotdomainr   r   r   return_ok_domain  s6    


  z$DefaultCookiePolicy.return_ok_domainc                 C   s   t |\}}|dsd| }|ds0d| }|rH|dsHd| }n|}||sd||sddS | |r|td| dS | |rtd| dS dS )Nr   Fr  r  T)r   rs   r   r  r   r  )r   r   r   r   r   r.  r   r   r   r     s"    






z$DefaultCookiePolicy.domain_return_okc                 C   sb   t d| t|}t|}||kr&dS ||rR|dsN|||d  dkrRdS t d|| dS )Nz- checking cookie path=%sTr   r   z  %s does not path-match %sF)r   r   r  rs   r   )r   r   r   r  Zpathlenr   r   r   r     s    

z"DefaultCookiePolicy.path_return_ok)r   r   r   r  r-  r  ZDomainLiberalZDomainStrictr   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   c  sR     
#	;	c                 C   s   t |  }t| j|S r   )sortedkeysmapr   )Zadictr1  r   r   r   vals_sorted_by_key  s    r3  c              	   c   sV   t | }|D ]D}d} z
|j W n tk
r2   Y nX d} t|E d H  | s|V  qd S r   )r3  itemsAttributeError
deepvalues)mappingvaluesobjr   r   r   r6    s    
r6  c                   @   s   e Zd ZdS )AbsentNr   r   r   r   r   r   r   r:    s    r:  c                   @   s   e Zd ZedZedZedZedZedZ	edej
Zd2d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 Zdd Zdd Zdd Zd d! Zd"d# Zd3d$d%Zd&d' Zd(d) Zd*d+ Zd,d- Zd.d/ Zd0d1 Z dS )4r   z\Wr{   z\.?[^.]*z[^.]*z^\.+z^\#LWP-Cookies-(\d+\.\d+)Nc                 C   s(   |d krt  }|| _t | _i | _d S r   )r   _policy
_threadingRLock_cookies_lock_cookiesr   policyr   r   r   r     s
    
zCookieJar.__init__c                 C   s
   || _ d S r   )r<  rA  r   r   r   
set_policy  s    zCookieJar.set_policyc                 C   s   g }| j ||sg S td| | j| }| D ]T}| j ||sFq2|| }| D ].}| j ||srtd qVtd || qVq2|S )Nz!Checking %s for cookies to returnz   not returning cookiez   it's a match)	r<  r   r   r@  r1  r   r8  r   rr   )r   r   r   cookiesZcookies_by_pathr   Zcookies_by_namer   r   r   r   _cookies_for_domain  s     

zCookieJar._cookies_for_domainc                 C   s*   g }| j  D ]}|| || q|S r   )r@  r1  extendrE  )r   r   rD  r   r   r   r   _cookies_for_request  s    zCookieJar._cookies_for_requestc           	      C   s<  |j dd dd d}g }|D ]}|j}|sHd}|dkrH|d|  |jd k	rz| j|jrz|dkrz| jd|j}n|j}|jd kr||j n|d	|j|f  |dkr|j	r|d
|j
  |jdr|j}|js|dr|dd  }|d|  |jd k	rd}|jr,|d|j  }|| q|S )Nc                 S   s
   t | jS r   )r  r   )ar   r   r   <lambda>      z)CookieJar._cookie_attrs.<locals>.<lambda>T)r   reverseFr	   z$Version=%sr|   r}   z
$Path="%s"r   r   z$Domain="%s"z$Portz="%s")sortr   rr   ry   non_word_rer@   quote_rer^   rx   r   r   r   rs   r   r   r   )	r   rD  r   attrsr   r   ry   r   r   r   r   r   _cookie_attrs  sF    




zCookieJar._cookie_attrsc                 C   s   t d | j  ztt  | j_| _| |}| 	|}|r^|
ds^|dd| | jjr| jjs|
ds|D ]}|jdkr||dd  qq|W 5 | j  X |   d S )Nadd_cookie_headerr   r~   ZCookie2r   z$Version="1")r   r?  acquirereleaserA   rM   r<  r*  rG  rP  Z
has_headerZadd_unredirected_headerr   r   r   r   clear_expired_cookies)r   r   rD  rO  r   r   r   r   rQ  I  s*    



 

zCookieJar.add_cookie_headerc              
   C   s  g }d}d}|D ]z}|d \}}d}d}	i }
i }|dd  D ]0\}}|  }||ks`||krd|}||krx|d krxd}||
krq>|dkr|d krtd d}	 qr|  }|d	kr|rq>|d krtd
 q>|dkr d}zt|}W n* tk
r   td d}	Y  qrY nX d	}| j| }||ks4||krh|d kr^|dkr^td|  d}	 qr||
|< q>|||< q>|	rzq||||
|f q|S )N)r   r   )r   r   r   r   r   r   r   
commenturlr	   Fr   Tr   z%   missing value for domain attributer   zM   missing or invalid value for expires attribute: treating as session cookier   z?   missing or invalid (non-numeric) value for max-age attribute)r   r   rU  z!   missing value for %s attribute)rK   r   rA   rL   r*  rr   )r   	attrs_setcookie_tuplesboolean_attrsvalue_attrsZcookie_attrsrx   ry   Zmax_age_setZ
bad_cookiestandardr   r   r   r   r   r   r   _normalized_cookie_tuplesj  sh    






z#CookieJar._normalized_cookie_tuplesc                 C   s&  |\}}}}| dt}| dt}| dt}	| dt}
| dd }|d k	rtzt|}W n tk
rr   Y d S X | dd}| dd}| d	d }| d
d }|tk	r|dkrd}t|}nXd}t|}|d}|dkr|dkr|d | }n|d |d  }t|dkrd}|tk	}d}|r:t|	d}|tkrVt
|\}}|}n|	dsjd| }d}|	tk	r|	d krt|}	nd}tdd|	}	nd }	|
tkrd }
d}nH|
| jkr z| ||| W n tk
r   Y nX td||| d S t||||	||||||||
||||S )Nr   r   r   r   r   r   Fr   r   rU  rW   Tr   r   r	   r   r   z\s+z2Expiring cookie, domain='%s', path='%s', name='%s')r   r:  rA   rL   r   r   r   r  boolrs   r   r   rt   r^   r*  clearKeyErrorr   r   )r   tupr   rx   ry   rZ  r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   _cookie_from_cookie_tuple  s    


 




       z#CookieJar._cookie_from_cookie_tuplec                 C   s6   |  |}g }|D ]}| ||}|r|| q|S r   )r[  r`  rr   )r   rV  r   rW  rD  r_  r   r   r   r   _cookies_from_attrs_set'  s    
 z!CookieJar._cookies_from_attrs_setc                 C   sH   t | jdd }|d kr | jj }|D ]}|jdkr$d|_|r$d|_q$d S )Nr   r   Tr	   )r   r<  r   r   r   )r   rD  Zrfc2109_as_nsr   r   r   r   _process_rfc2109_cookies0  s    

z"CookieJar._process_rfc2109_cookiesc                 C   s:  |  }|dg }|dg }tt  | j_| _| jj}| jj}|sN|rf|sV|rf|s^|rf|sj|sjg S z| t	||}W n t
k
r   t  g }Y nX |r6|r6z| t||}	W n t
k
r   t  g }	Y nX | |	 |r&i }
|D ]}d |
|j|j|jf< q|
fdd}t||	}	|	r6||	 |S )NzSet-Cookie2z
Set-Cookiec                 S   s   | j | j| jf}||kS r   )r   r   rx   )Z	ns_cookielookupr   r   r   r   no_matching_rfc2965i  s    z3CookieJar.make_cookies.<locals>.no_matching_rfc2965)r  Zget_allrA   rM   r<  r*  r   r   ra  rz   	Exceptionr   r   rb  r   r   rx   filterrF  )r   responser   r   Zrfc2965_hdrsZns_hdrsr   r   rD  Z
ns_cookiesrc  r   rd  r   r   r   make_cookies<  s^     
 



zCookieJar.make_cookiesc                 C   sN   | j   z2tt  | j_| _| j||r:| | W 5 | j   X d S r   )	r?  rR  rS  rA   rM   r<  r*  r   
set_cookier   r   r   r   set_cookie_if_oks  s    
zCookieJar.set_cookie_if_okc                 C   sl   | j }| j  zJ|j|kr&i ||j< ||j }|j|krDi ||j< ||j }|||j< W 5 | j  X d S r   )r@  r?  rR  rS  r   r   rx   )r   r   cZc2Zc3r   r   r   ri    s    

 


 

zCookieJar.set_cookiec                 C   sb   t d|  | j  z8| ||D ]&}| j||r&t d| | | q&W 5 | j  X d S )Nzextract_cookies: %sz setting cookie: %s)	r   r  r?  rR  rS  rh  r<  r   ri  )r   rg  r   r   r   r   r   extract_cookies  s    

zCookieJar.extract_cookiesc                 C   st   |d k	r2|d ks|d kr t d| j| | |= n>|d k	rX|d krJt d| j| |= n|d k	rj| j|= ni | _d S )Nz8domain and path must be given to remove a cookie by namez.domain must be given to remove cookies by path)rL   r@  )r   r   r   rx   r   r   r   r]    s    
zCookieJar.clearc                 C   sD   | j   z(| D ]}|jr| |j|j|j qW 5 | j   X d S r   )r?  rR  rS  r   r]  r   r   rx   )r   r   r   r   r   clear_session_cookies  s    
zCookieJar.clear_session_cookiesc                 C   sP   | j   z4t }| D ]"}||r| |j|j|j qW 5 | j   X d S r   )	r?  rR  rS  rM   r   r]  r   r   rx   )r   r   r   r   r   r   rT    s    


zCookieJar.clear_expired_cookiesc                 C   s
   t | jS r   )r6  r@  r  r   r   r   __iter__  s    zCookieJar.__iter__c                 C   s   d}| D ]}|d }q|S )Nr	   r   r   )r   r   r   r   r   r   __len__  s     
zCookieJar.__len__c                 C   s2   g }| D ]}| t| qd| jjd|f S Nz<%s[%s]>r   )rr   r   r   r   r   r   rr   r   r   r   r     s     zCookieJar.__repr__c                 C   s2   g }| D ]}| t| qd| jjd|f S rp  )rr   r#  r   r   r   rq  r   r   r   r     s     zCookieJar.__str__)N)NNN)!r   r   r   rt   compilerM  rN  Zstrict_domain_reZ	domain_reZdots_reASCIImagic_rer   rC  rE  rG  rP  rQ  r[  r`  ra  rb  rh  rj  ri  rl  r]  rm  rT  rn  ro  r   r   r   r   r   r   r     s6   





;!a\	7
c                   @   s   e Zd ZdS )r   Nr;  r   r   r   r   r     s    c                   @   s4   e Zd ZdddZdddZdddZdd	d
ZdS )r   NFc                 C   s2   t | | |d k	rt|}|| _t|| _d S r   )r   r   osfspathfilenamer\  	delayload)r   rx  ry  rB  r   r   r   r     s
    
zFileCookieJar.__init__c                 C   s
   t  d S r   r   )r   rx  ignore_discardignore_expiresr   r   r   save  s    zFileCookieJar.savec              	   C   sJ   |d kr"| j d k	r| j }nttt|}| |||| W 5 Q R X d S r   )rx  rL   MISSING_FILENAME_TEXTopen_really_loadr   rx  rz  r{  r   r   r   r   load   s    
 
zFileCookieJar.loadc                 C   s   |d kr"| j d k	r| j }ntt| j  zFt| j}i | _z| 	||| W n t
k
rn   || _ Y nX W 5 | j  X d S r   )rx  rL   r}  r?  rR  rS  r   Zdeepcopyr@  r  OSError)r   rx  rz  r{  Z	old_stater   r   r   revert	  s    
 
zFileCookieJar.revert)NFN)NFF)NFF)NFF)r   r   r   r   r|  r  r  r   r   r   r   r     s   


	    c                 C   s   | j | jfd| jfd| jfg}| jd k	r8|d| jf | jrH|d | jrX|d | jrh|d | j	rx|d | j
r|dtt| j
f | jr|d	 | jr|d
| jf | jr|d| jf t| j }|D ]}||t| j| f q|dt| jf t|gS )Nr   r   r   )	path_specN)	port_specN)
domain_dotN)r   Nr   )r   Nr   rU  r   )rx   ry   r   r   r   rr   r   r   r   r   r   r5   r[   r   r   r   r0  r   r1  r#  r   r   )r   r   r1  r   r   r   r   lwp_cookie_str$  s:    

  
 
 
 
  
  r  c                   @   s(   e Zd Zd
ddZdddZdd	 ZdS )r   Tc                 C   sT   t   }g }| D ]2}|s |jr q|s0||r0q|dt|  qd|dg S )NzSet-Cookie3: %s
rW   )rM   r   r   rr   r  r   )r   rz  r{  r   rr  r   r   r   r   
as_lwp_strM  s    
zLWPCookieJar.as_lwp_strNFc              	   C   sX   |d kr"| j d k	r| j }nttt|d"}|d || || W 5 Q R X d S )Nwz#LWP-Cookies-2.0
)rx  rL   r}  r~  writer  r  r   r   r   r|  ]  s    
 
zLWPCookieJar.savec                 C   s0  |  }| j|s$d| }t|t }d}d}	d}
z|  }|dkrPq||s\q<|t|d   }t|gD ]f}|d \}}i }i }|	D ]}d||< q|dd  D ]n\}}|d k	r|	 }nd }||
ks||	kr|}||	kr|d krd	}|||< q||
kr|||< q|||< q|j
}|d
}|d}|d k	rJt|}|d krXd	}|d}|d}t|d|||d|d|||d|d|d|d|||d|d|}|s|jrqz|s||rqz| | qzq<W nB tk
r     Y n, tk
r*   t  td||f Y nX d S )Nz5%r does not look like a Set-Cookie3 (LWP) format filezSet-Cookie3:)r  r  r  r   r   )r   r   r   r   r   r   rU  rW   r	   Fr   Tr   r   r   r   r   r   r  r  r   r  r   r   rU  z&invalid Set-Cookie3 format file %r: %r)readlineru  r@   r   rM   rs   r  r   rz   rK   r   re   r   r   r   ri  r  re  r   )r   r   rx  rz  r{  magicr   r   headerrX  rY  linedatarx   ry   rZ  r   r   r   r   r   r   r   r   r   rk  r   r   r   r  i  s     



 






    
zLWPCookieJar._really_load)TT)NFF)r   r   r   r  r|  r  r   r   r   r   r   @  s   

c                   @   s,   e Zd ZedZdZdd Zd	ddZdS )
r   z#( Netscape)? HTTP Cookie Filezr# Netscape HTTP Cookie File
# http://curl.haxx.se/rfc/cookie_spec.html
# This is a generated file!  Do not edit.

c                 C   sb  t   }| }| j|s(td| z| }|dkr>q|drT|d d }| ds*| dkrpq*|d\}}	}
}}}}|dk}|	dk}	|dkr|}d }|d}d	}|dkrd }d
}t	d||d d	||	||
d	|||d d i }|s|j
rq*|s||rq*| | q*W nB tk
r2    Y n, tk
r\   t  td||f Y nX d S )Nz4%r does not look like a Netscape format cookies filerW   r  r   )#r  	TRUEr   FTr	   z+invalid Netscape format cookies file %r: %r)rM   r  ru  r@   r   r   r   rs   r   r   r   r   ri  r  re  r   )r   r   rx  rz  r{  r   r  r  r   r   r   r   r   rx   ry   r   r   rk  r   r   r   r    sr     
 

    

zMozillaCookieJar._really_loadNFc                 C   s   |d kr"| j d k	r| j }nttt|d}|| j t }| D ]}|sV|jrVqF|sf||rfqF|j	rrd}nd}|j
drd}nd}|jd k	rt|j}	nd}	|jd krd}
|j}n|j}
|j}|d|j
||j||	|
|gd  qFW 5 Q R X d S )Nr  r  ZFALSEr   rW   r  r  )rx  rL   r}  r~  r  r  rM   r   r   r   r   rs   r   r#  ry   rx   r   r   )r   rx  rz  r{  r   r   r   r   r   r   rx   ry   r   r   r   r|     sH    
 
  

   zMozillaCookieJar.save)NFF)	r   r   r   rt   rs  ru  r  r  r|  r   r   r   r   r     s   
A)N)N)W__all__rv  r   r-   rt   rM   Zurllib.parser   Zurllib.requestZ	threadingr=  Zhttp.clientZhttpZcalendarr
   r   r   r   r#  ZclientZ	HTTP_PORTr   r}  r   r%   r,   r6   r7   rI   r(   rr   rK   r5   r8   r>   rs  rt  r?   rF   rT   rY   Ir]   Xr_   rb   rc   re   rk   rm   rn   rp   ro   rz   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r3  r6  r:  r   r  r   r   r  r   r   r   r   r   r   <module>   s      
      

8 

8
!



U
D'


#b!  b    7x