???<!-- GIF89;a -->
123123123123
.....................................................................................................................................???<!-- GIF89;a -->
123123123123
.....................................................................................................................................3
f,                 @   s>  d dl m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Z	ej
dZejd dkr`eZeZG d	d
 d
eZG dd deZG dd deZG dd deZdd Zdd Zdd Zdd Zdd Zdd Zd7ddZd d! Zd"d# Zd$d% Zd&d' Z d8d(d)Z!d*d+ Z"d,d- Z#d.d/ Z$d9d1d2Z%d:d3d4Z&d;d5d6Z'dS )<   )idnadata    N)intranges_contain	   s   xn--u   [.。．｡]   c               @   s   e Zd ZdZdS )	IDNAErrorz7 Base exception for all IDNA-encoding related problems N)__name__
__module____qualname____doc__ r   r   /usr/lib/python3.6/core.pyr      s   r   c               @   s   e Zd ZdZdS )IDNABidiErrorz= Exception when bidirectional requirements are not satisfied N)r   r	   r
   r   r   r   r   r   r      s   r   c               @   s   e Zd ZdZdS )InvalidCodepointz> Exception when a disallowed or unallocated codepoint is used N)r   r	   r
   r   r   r   r   r   r      s   r   c               @   s   e Zd ZdZdS )InvalidCodepointContextzE Exception when the codepoint is not valid in the context it is used N)r   r	   r
   r   r   r   r   r   r      s   r   c             C   s   t jt| S )N)unicodedataZ	combiningunichr)cpr   r   r   _combining_class$   s    r   c             C   s   t t| tj| S )N)r   ordr   scripts)r   Zscriptr   r   r   
_is_script'   s    r   c             C   s
   | j dS )Npunycode)encode)sr   r   r   	_punycode*   s    r   c             C   s
   dj | S )Nz	U+{0:04X})format)r   r   r   r   _unot-   s    r   c             C   s   t | dkrdS dS )N?   FT)len)labelr   r   r   valid_label_length1   s    r!   c             C   s   t | |rdndkrdS dS )N      FT)r   )r    trailing_dotr   r   r   valid_string_length8   s    r%   Fc       	      C   sp  d}xJt | dD ]<\}}tj|}|dkr>tdjt| ||dkrd}P qW | r`| r`dS tj| d	 }|dkr|d}n |d
krd}ntdjt| d}d}xt | dD ]\}}tj|}|r&|dkrtdj||dk rd}n|dk rd}|dkrZ|s|}n||krZtdq|dkr>tdj||dkrNd}q|dkrd}qW |sltddS )NFr    z3Unknown directionality in label {0} at position {1}RALANTr   Lz>First codepoint in label {0} must be directionality L, R or ALENESCSETONBNNSMzHInvalid direction for codepoint at position {0} in a right-to-left labelz2Can not mix numeral types in a right-to-left labelzHInvalid direction for codepoint at position {0} in a left-to-right labelz0Label ends with illegal codepoint directionality)r'   r(   r)   )r'   r(   )
r'   r(   r)   r+   r,   r-   r.   r/   r0   r1   )r'   r(   r+   r)   )r)   r+   )r*   r+   r,   r-   r.   r/   r0   r1   )r*   r+   )	enumerater   Zbidirectionalr   r   repr)	r    Z	check_ltrZ
bidi_labelidxr   	directionZrtlZvalid_endingZnumber_typer   r   r   
check_bidi?   sR    








r6   c             C   s"   t j| d d dkrtddS )Nr   Mz0Label begins with an illegal combining characterT)r   categoryr   )r    r   r   r   check_initial_combiner|   s    r9   c             C   s<   | dd dkrt d| d dks0| d
 dkr8t dd	S )N      z--z4Label has disallowed hyphens in 3rd and 4th positionr   -r   z)Label must not start or end with a hyphenT)r   )r    r   r   r   check_hyphen_ok   s
    r>   c             C   s   t jd| | krtdd S )NNFCz%Label must be in Normalization Form C)r   	normalizer   )r    r   r   r   	check_nfc   s    rA   c             C   sH  t | | }|dkr
|dkr:tt | |d  tkr:dS d}xZt|d ddD ]F}tjjt | | }|t dkrxqPqP|t dt dgkrd}P qPP qPW |sdS d}x^t|d t| D ]H}tjjt | | }|t dkrqq|t d	t dgkr d}P qP qW |S |d
kr@|dkr<tt | |d  tkr<dS dS dS d S )Ni   r   r   TFTr*   Dr'   i   r=   r=   )r   r   _virama_combining_classranger   Zjoining_typesgetr   )r    poscp_valueokiZjoining_typer   r   r   valid_contextj   s@    


rK   c             C   s  t | | }|dkrdd|  k o.t| d k n  r`t | |d  dkr`t | |d  dkr`dS dS |dkr|t| d k rt| dkrt| |d  dS dS |d	ks|d
kr|dkrt| |d  dS dS |dkrx<| D ]4}|dkrqt|dst|dst|drdS qW dS d|  ko,dkn  rlx2| D ]*}dt |  koVdkn  r:dS q:W dS d|  kodkn  rx2| D ]*}dt |  kodkn  rdS qW dS d S )N   r   r   l   TFiu  ZGreeki  i  ZHebrewi0  u   ・ZHiraganaZKatakanaZHani`  ii  i  i  )r   r   r   )r    rG   Z	exceptionrH   r   r   r   r   valid_contexto   s>     (

"
 

 
rN   c             C   s  t | ttfr| jd} t| dkr,tdt|  t|  t|  xt	| D ]\}}t
|}t|tjd rrqNqNt|tjd rt| |stdjt||d t| qNt|tjd rt| |std	jt||d t| qNtd
jt||d t| qNW t|  d S )Nzutf-8r   zEmpty LabelZPVALIDZCONTEXTJz-Joiner {0} not allowed at position {1} in {2}r   ZCONTEXTOz0Codepoint {0} not allowed at position {1} in {2}z0Codepoint {0} at position {1} of {2} not allowed)
isinstancebytes	bytearraydecoder   r   rA   r>   r9   r2   r   r   r   Zcodepoint_classesrK   r   r   r   r3   rN   r   r6   )r    rG   r   rH   r   r   r   check_label   s&    

 
 "rS   c             C   s   yN| j d} yt|  W n" tk
r:   tdj| Y nX t| sLtd| S  tk
rb   Y nX | sptdt| } t|  t| } t	|  } t| std| S )Nasciiz$The label {0} is not a valid A-labelzLabel too longzNo Input)
r   ulabelr   r   r!   UnicodeEncodeErrorunicoderS   r   _alabel_prefix)r    r   r   r   alabel  s(    
rY   c             C   s   t | ttfs:y| jd} W n tk
r8   t|  | S X | j } | jtr^| t	td  } nt|  | j
dS | j
d} t|  | S )NrT   r   )rO   rP   rQ   r   rV   rS   lower
startswithrX   r   rR   )r    r   r   r   rU   "  s    


rU   Tc             C   s,  ddl m } d}yxt| D ]\}}t|}||dk r:|ntj||dfd  }|d }	t|dkrl|d nd}
|	d	ks|	d
kr| s|	dkr|r|
dkr||7 }q|
dk	r|	dks|	dkr|s|	d
kr|r||
7 }q|	dkrt qW tjd|S  tk
r&   t	dj
t||d t| Y nX dS )zBRe-map the characters in the string according to UTS46 processing.r   )	uts46datar&      Zr   r:   NVrC   3r7   Ir?   z0Codepoint {0} not allowed at position {1} in {2})r\   r2   r   bisectZbisect_leftr   
IndexErrorr   r@   r   r   r   r3   )Zdomain
std3_rulestransitionalr\   outputrG   charZ
code_pointZuts46rowZstatusZreplacementr   r   r   uts46_remap7  s0    


rh   c       	      C   s   t | ttfr| jd} |r(t| ||} d}g }|r@| jd}n
tj| }x|rb|d  rb|d= qLW |sptd|d dkr|d= d}x|D ]}|jt	| qW |r|jd	 d
j
|} t| |std| S )NrT   F.r   zEmpty domainr   r&   T       .zDomain too longr=   r=   )rO   rP   rQ   rR   rh   split_unicode_dots_rer   appendrY   joinr%   )	r   strictuts46rd   re   r$   resultlabelsr    r   r   r   r   S  s0    






r   c             C   s   t | ttfr| jd} |r(t| |d} d}g }|s@tj| }n
| jd}x|rb|d  rb|d= qLW |sptd|d	 s|d
= d}x|D ]}|jt	| qW |r|jd dj
|S )NrT   Fri   r   zEmpty domainr   Tr&   r=   r=   )rO   rP   rQ   rR   rh   rm   rl   r   rn   rU   ro   )r   rp   rq   rd   r$   rr   rs   r    r   r   r   rR   p  s*    




rR   )F)F)TF)FFFF)FFF)(r&   r   rb   r   resysZ	intrangesr   rD   rX   compilerm   version_infostrrW   chrr   UnicodeErrorr   r   r   r   r   r   r   r   r!   r%   r6   r9   r>   rA   rK   rN   rS   rY   rU   rh   r   rR   r   r   r   r   <module>   sB   

=	0
)

