ÿØÿà 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
..............................................................................................................................................................................
.............................................................................                                                  
                                                                                                                                                                                     3

  \I                @   s4  d ddddddddd	d
dgZ ddlmZ ddlmZ eddZdd ZG dd dZ	d7dd Z
dd ZG dd dZddlZejdjfddZd8ddZdd Zd9d"dZd#d$ Zd:d%dZd&d' Zd;d*d	Zdefd+dZddefd,d-Zd.Zd/Zd0Zd1ZG d2d
 d
eZ[d3d Z d4d5 Z!e"d6kr0e!  dS )<get_close_matchesndiffrestoreSequenceMatcherDifferIS_CHARACTER_JUNKIS_LINE_JUNKcontext_diffunified_diff
diff_bytesHtmlDiffMatch    )nlargest)
namedtupleza b sizec             C   s   |rd|  | S dS )Ng       @g      ? )matcheslengthr   r   /usr/lib64/python3.6/difflib.py_calculate_ratio&   s    r   c               @   sp   e Z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d Z
dddZdd Zdd Zdd ZdS )r   N Tc             C   s(   || _ d  | _| _|| _| j|| d S )N)isjunkabautojunkset_seqs)selfr   r   r   r   r   r   r   __init__   s    ;zSequenceMatcher.__init__c             C   s   | j | | j| d S )N)set_seq1set_seq2)r   r   r   r   r   r   r      s    	
zSequenceMatcher.set_seqsc             C   s$   || j krd S || _ d  | _| _d S )N)r   matching_blocksopcodes)r   r   r   r   r   r      s    
zSequenceMatcher.set_seq1c             C   s2   || j krd S || _ d  | _| _d | _| j  d S )N)r   r   r    
fullbcount_SequenceMatcher__chain_b)r   r   r   r   r   r      s    
zSequenceMatcher.set_seq2c             C   s   | j }i  | _}x*t|D ]\}}|j|g }|j| qW t  | _}| j}|rx"|j D ]}||r\|j	| q\W x|D ]
}||= q|W t  | _
}t|}	| jr|	dkr|	d d }
x*|j D ]\}}t||
kr|j	| qW x|D ]
}||= qW d S )N   d      )r   b2j	enumerate
setdefaultappendsetbjunkr   keysaddZbpopularlenr   items)r   r   r&   ieltindicesZjunkr   ZpopularnZntestZidxsr   r   r   Z	__chain_b)  s,    



zSequenceMatcher.__chain_bc             C   sN  | j | j| j| jjf\}}}}||d  }	}
}i }g }xt||D ]}|j}i }xn|j|| |D ]Z}||k rpqb||krzP ||d dd  }||< ||krb|| d || d |  }	}
}qbW |}qBW xb|	|kr*|
|kr*|||
d   r*||	d  ||
d  kr*|	d |
d |d   }	}
}qW xX|	| |k r|
| |k r|||
|   r||	|  ||
|  kr|d7 }q.W xb|	|kr|
|kr|||
d  r||	d  ||
d  kr|	d |
d |d   }	}
}qW xV|	| |k r@|
| |k r@|||
|  r@||	|  ||
|  kr@|d }qW t|	|
|S )Nr   r%   )r   r   r&   r+   __contains__rangegetr   )r   aloahiblobhir   r   r&   ZisbjunkZbestiZbestjZbestsizeZj2lenZnothingr0   Zj2lengetZnewj2lenjkr   r   r   find_longest_matchP  sB    8$ 	"z"SequenceMatcher.find_longest_matchc             C   s  | j d k	r| j S t| jt| j }}d|d|fg}g }x|r|j \}}}}| j|||| \}	}
}}|r:|j| ||	k r||
k r|j||	||
f |	| |k r:|
| |k r:|j|	| ||
| |f q:W |j  d } }}g }x^|D ]V\}}}|| |kr|| |kr||7 }q|r2|j|||f |||  }}}qW |r\|j|||f |j||df tt	t
j|| _ | j S )Nr   )r   r.   r   r   popr=   r)   sortlistmapr   _make)r   lalbZqueuer   r7   r8   r9   r:   r0   r;   r<   xi1j1Zk1Znon_adjacenti2j2Zk2r   r   r   get_matching_blocks  s8    


z#SequenceMatcher.get_matching_blocksc             C   s   | j d k	r| j S d }}g  | _ }x| j D ]\}}}d}||k rP||k rPd}n||k r^d}n||k rjd}|r|j|||||f || ||  }}|r,|jd||||f q,W |S )Nr   r   replacedeleteinsertequal)r    rJ   r)   )r   r0   r;   Zansweraibjsizetagr   r   r   get_opcodes  s$    

zSequenceMatcher.get_opcodes   c       
   
   c   sr  | j  }|sdg}|d d dkrZ|d \}}}}}|t||| |t||| |f|d< |d d dkr|d \}}}}}||t||| |t||| f|d< || }g }	x|D ]\}}}}}|dko|| |kr(|	j||t||| |t||| f |	V  g }	t||| t|||  }}|	j|||||f qW |	rnt|	dkob|	d d dk rn|	V  d S )NrN   r   r%   )rN   r   r%   r   r%   rU   rU   )rS   maxminr)   r.   )
r   r3   ZcodesrR   rF   rH   rG   rI   Znngroupr   r   r   get_grouped_opcodes<  s(    &&((z#SequenceMatcher.get_grouped_opcodesc             C   s0   t dd | j D }t|t| jt| j S )Nc             s   s   | ]}|d V  qdS )r%   NrU   r   ).0Ztripler   r   r   	<genexpr>  s    z(SequenceMatcher.ratio.<locals>.<genexpr>)sumrJ   r   r.   r   r   )r   r   r   r   r   ration  s    zSequenceMatcher.ratioc             C   s   | j d kr8i  | _ }x"| jD ]}|j|dd ||< qW | j }i }|jd }}xH| jD ]>}||rl|| }n|j|d}|d ||< |dkrV|d }qVW t|t| jt| j S )Nr   r%   )r!   r   r6   r4   r   r   r.   )r   r!   r1   ZavailZavailhasr   Znumbr   r   r   quick_ratio  s    



zSequenceMatcher.quick_ratioc             C   s*   t | jt | j }}tt|||| S )N)r.   r   r   r   rW   )r   rC   rD   r   r   r   real_quick_ratio  s    z SequenceMatcher.real_quick_ratio)Nr   r   T)rT   )__name__
__module____qualname__r   r   r   r   r"   r=   rJ   rS   rY   r]   r^   r_   r   r   r   r   r   +   s   l
@,'nG7
2rT   333333?c             C   s   |dkst d|f d|  ko(dkn  s<t d|f g }t }|j|  xL|D ]D}|j| |j |krV|j |krV|j |krV|j|j |f qVW t||}dd |D S )Nr   zn must be > 0: %rg        g      ?z cutoff must be in [0.0, 1.0]: %rc             S   s   g | ]\}}|qS r   r   )rZ   ZscorerE   r   r   r   
<listcomp>  s    z%get_close_matches.<locals>.<listcomp>)	
ValueErrorr   r   r   r_   r^   r]   r)   	_nlargest)ZwordZpossibilitiesr3   cutoffresultsrE   r   r   r   r     s    



c             C   s4   dt |  }}x ||k r.| | |kr.|d7 }qW |S )Nr   r%   )r.   )linechr0   r3   r   r   r   _count_leading  s    
rl   c               @   sF   e Z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   Nc             C   s   || _ || _d S )N)linejunkcharjunk)r   rm   rn   r   r   r   r   M  s    zDiffer.__init__c       
      c   s   t | j||}x|j D ]\}}}}}|dkrD| j||||||}	n\|dkr^| jd|||}	nB|dkrx| jd|||}	n(|dkr| jd|||}	ntd|f |	E d H  qW d S )	NrK   rL   -rM   +rN    zunknown tag %r)r   rm   rS   _fancy_replace_dumpre   )
r   r   r   cruncherrR   r7   r8   r9   r:   gr   r   r   compared  s    zDiffer.comparec             c   s*   x$t ||D ]}d||| f V  qW d S )Nz%s %s)r5   )r   rR   rE   lohir0   r   r   r   rs     s    zDiffer._dumpc       
      c   sr   || || k r2| j d|||}| j d|||}n | j d|||}| j d|||}x||fD ]}	|	E d H  q\W d S )Nrp   ro   )rs   )
r   r   r7   r8   r   r9   r:   firstsecondru   r   r   r   _plain_replace  s    zDiffer._plain_replacec             c   sH  d\}}t | j}	d\}
}xt||D ]}|| }|	j| xxt||D ]j}|| }||krp|
d krH|| }
}qH|	j| |	j |krH|	j |krH|	j |krH|	j ||  }}}qHW q&W ||k  r|
d kr| j||||||E d H  d S |
|d  }}}nd }
| j	||||||E d H  || ||  }}|
d krd }}|	j
|| x|	j D ]\}}}}}|| ||  }}|dkr|d| 7 }|d| 7 }nb|dkr|d| 7 }nJ|d	kr|d
| 7 }n2|dkr|d| 7 }|d| 7 }ntd|f qTW | j||||E d H  n
d| V  | j	||d |||d |E d H  d S )NGz?      ?g      ?r   rK   ^rL   ro   rM   rp   rN   rq   zunknown tag %rz  r%   )r|   r}   )NN)r   rn   r5   r   r   r_   r^   r]   r{   _fancy_helperr   rS   re   _qformat)r   r   r7   r8   r   r9   r:   Z
best_ratiorg   rt   ZeqiZeqjr;   rP   r0   rO   Zbest_iZbest_jZaeltZbeltatagsbtagsrR   Zai1Zai2Zbj1Zbj2rC   rD   r   r   r   rr     sX    










zDiffer._fancy_replacec             c   sb   g }||k r<||k r*| j ||||||}qT| jd|||}n||k rT| jd|||}|E d H  d S )Nro   rp   )rr   rs   )r   r   r7   r8   r   r9   r:   ru   r   r   r   r     s    zDiffer._fancy_helperc             c   s   t t|dt|d}t |t|d | d}t |t|d | d}||d  j }||d  j }d| V  |rdd| |f V  d| V  |rdd| |f V  d S )N	rq   z- z? %s%s
z+ )rW   rl   rstrip)r   ZalineZbliner   r   commonr   r   r   r   
  s    


zDiffer._qformat)NN)
r`   ra   rb   r   rv   rs   r{   rr   r   r   r   r   r   r   r     s   ^
)^Nz\s*(?:#\s*)?$c             C   s   || d k	S )Nr   )rj   Zpatr   r   r   r   >  s     	c             C   s   | |kS )Nr   )rk   Zwsr   r   r   r   N  s    c             C   s:   | d }||  }|dkr"dj |S |s.|d8 }dj ||S )Nr%   z{}z{},{})format)startstop	beginningr   r   r   r   _format_range_unifiede  s    
r   r   
c             c   sh  t | |||||| d}xHtd | |j|D ]0}	|sd}|rJdj|nd}
|r\dj|nd}dj||
|V  dj|||V  |	d |	d  }}t|d |d	 }t|d
 |d }dj|||V  x|	D ]\}}}}}|dkrx| || D ]}d| V  qW q|dkr2x | || D ]}d| V  qW |dkrx ||| D ]}d| V  qHW qW q.W d S )NFTz	{}r   z
--- {}{}{}z
+++ {}{}{}r   r%      rT      z@@ -{} +{} @@{}rN   rq   rK   rL   ro   rM   rp   rU   >   rL   rK   >   rM   rK   )_check_typesr   rY   r   r   )r   r   fromfiletofilefromfiledate
tofiledater3   linetermstartedrX   fromdatetodatery   lastfile1_rangefile2_rangerR   rF   rH   rG   rI   rj   r   r   r   r	   p  s0    )

c             C   sB   | d }||  }|s|d8 }|dkr.dj |S dj ||| d S )Nr%   z{}z{},{})r   )r   r   r   r   r   r   r   _format_range_context  s    
r   c             c   s  t | |||||| tddddd}d}	xztd | |j|D ]b}
|	sd}	|rZdj|nd	}|rldj|nd	}d
j|||V  dj|||V  |
d |
d  }}d| V  t|d |d }dj||V  tdd |
D r&xD|
D ]<\}}}}}|dkrx$| || D ]}|| | V  q
W qW t|d |d }dj||V  tdd |
D r>xH|
D ]@\}}}}}|dkr^x$||| D ]}|| | V  qW q^W q>W d S )Nz+ z- z! z  )rM   rL   rK   rN   FTz	{}r   z
*** {}{}{}z
--- {}{}{}r   r%   z***************r   z*** {} ****{}c             s   s    | ]\}}}}}|dkV  qdS )rK   rL   N>   rL   rK   r   )rZ   rR   _r   r   r   r[     s    zcontext_diff.<locals>.<genexpr>rM   rT   r   z--- {} ----{}c             s   s    | ]\}}}}}|dkV  qdS )rK   rM   N>   rM   rK   r   )rZ   rR   r   r   r   r   r[     s    rL   rU   )r   dictr   rY   r   r   any)r   r   r   r   r   r   r3   r   prefixr   rX   r   r   ry   r   r   rR   rF   rH   r   rj   r   rG   rI   r   r   r   r     s4    ,

c             G   s   | r2t | d t r2tdt| d j| d f |rdt |d t rdtdt|d j|d f x$|D ]}t |tsjtd|f qjW d S )Nr   z)lines to compare must be str, not %s (%r)z"all arguments must be str, not: %r)
isinstancestr	TypeErrortyper`   )r   r   argsargr   r   r   r     s    

r          
c	          	   c   s   dd }	t t|	|}t t|	|}|	|}|	|}|	|}|	|}|	|}| ||||||||}
x|
D ]}|jddV  qhW d S )Nc             S   sP   y| j ddS  tk
rJ } z"dt| j| f }t||W Y d d }~X nX d S )Nasciisurrogateescapez(all arguments must be bytes, not %s (%r))decodeAttributeErrorr   r`   r   )ri   errmsgr   r   r   r   -  s    zdiff_bytes.<locals>.decoder   r   )r@   rA   encode)Zdfuncr   r   r   r   r   r   r3   r   r   linesrj   r   r   r   r
   "  s    
c             C   s   t ||j| |S )N)r   rv   )r   r   rm   rn   r   r   r   r   @  s    #c             #   s  dd l }|jdt| |||ddgffdd	fdd  fdd}| }|d krj|E d H  n.|d	7 }d}xdd g|  }	}
d
}xR|d
kryt|\}}}W n tk
r   d S X |	| }|||f|
|< |	d	7 }	qW |	|k rdV  |}n|	}d}	x.|r.|	| }|	d	7 }	|
| V  |d	8 }qW |d	 }yDx>|rxt|\}}}|r`|d	 }n|d	8 }|||fV  q<W W qz tk
r   d S X qzW d S )Nr   z(\++|\-+|\^+)c                s   ||  d7  < |d kr2|| | j ddd  fS |dkr| j d| j d }}g }|fdd} j|| xHt|D ]<\}\}	}
|d|	 d | ||	|
  d ||
d   }qvW |dd  }n*| j ddd  }|sd	}d| | d }|| |fS )
Nr%   r   r   ?c             S   s&   |j | jdd | j g | jdS )Nr%   r   )r)   rX   span)Zmatch_objectsub_infor   r   r   record_sub_info  s    z3_mdiff.<locals>._make_line.<locals>.record_sub_info rq   )r>   subreversed)r   Z
format_keysideZ	num_linestextZmarkersr   r   keyZbeginend)	change_rer   r   
_make_line  s     4z_mdiff.<locals>._make_linec              3   s  g } d\}}xlx t | dk r0| jtd qW djdd | D }|jdrX|}n|jdr | dd | dd	d
fV  qn|jdr|d	8 } | ddd d
fV  qnl|jdrވ | ddd  }}|d	 d }}n>|jdr | d d | dd	d
fV  qn|jdr8 | dd | d d	d
fV  qn|jdrd|d	8 } | ddd d
fV  qn|jdr|d	7 }d  | dd	d
fV  qn|jdrd  | dd	 }}|d	 d }}n^|jdr|d	7 }d  | dd	d
fV  qn2|jdr | d d  d d | d d	dfV  qx|dk r:|d	7 }dV  qW x|dkrZ|d	8 }dV  q>W |jdrld S ||d
fV  qW d S ) Nr   r   Xr   c             S   s   g | ]}|d  qS )r   r   )rZ   rj   r   r   r   rd     s    z2_mdiff.<locals>._line_iterator.<locals>.<listcomp>z-?+?r   r%   Tz--++ro   --?+--+- z-+?z-?+z+--rp   + +-rq   Fr   )r   r   )r   r   r   )r   r   r   r   )Nr   Tr   r   )r   NT)r.   r)   nextjoin
startswith)r   Znum_blanks_pendingZnum_blanks_to_yieldri   	from_lineto_line)r   diff_lines_iteratorr   r   _line_iterator  sf    



$z_mdiff.<locals>._line_iteratorc              3   s     } g g  }}xxpt |dks,t |dkryt| \}}}W n tk
rR   d S X |d k	rj|j||f |d k	r|j||f qW |jd\}}|jd\}}|||p|fV  qW d S )Nr   )r.   r   StopIterationr)   r>   )Zline_iterator	fromlinestolinesr   r   
found_diffZfromDiffZto_diff)r   r   r   _line_pair_iterator  s    
z#_mdiff.<locals>._line_pair_iteratorr%   F)NNN)recompiler   r   r   )r   r   contextrm   rn   r   r   Zline_pair_iteratorZlines_to_writeindexZcontextLinesr   r   r   r0   r   )r   r   r   r   r   _mdiffe  sT    "
8X!



r   an  
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
          "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html>

<head>
    <meta http-equiv="Content-Type"
          content="text/html; charset=%(charset)s" />
    <title></title>
    <style type="text/css">%(styles)s
    </style>
</head>

<body>
    %(table)s%(legend)s
</body>

</html>aH  
        table.diff {font-family:Courier; border:medium;}
        .diff_header {background-color:#e0e0e0}
        td.diff_header {text-align:right}
        .diff_next {background-color:#c0c0c0}
        .diff_add {background-color:#aaffaa}
        .diff_chg {background-color:#ffff77}
        .diff_sub {background-color:#ffaaaa}aZ  
    <table class="diff" id="difflib_chg_%(prefix)s_top"
           cellspacing="0" cellpadding="0" rules="groups" >
        <colgroup></colgroup> <colgroup></colgroup> <colgroup></colgroup>
        <colgroup></colgroup> <colgroup></colgroup> <colgroup></colgroup>
        %(header_row)s
        <tbody>
%(data_rows)s        </tbody>
    </table>a  
    <table class="diff" summary="Legends">
        <tr> <th colspan="2"> Legends </th> </tr>
        <tr> <td> <table border="" summary="Colors">
                      <tr><th> Colors </th> </tr>
                      <tr><td class="diff_add">&nbsp;Added&nbsp;</td></tr>
                      <tr><td class="diff_chg">Changed</td> </tr>
                      <tr><td class="diff_sub">Deleted</td> </tr>
                  </table></td>
             <td> <table border="" summary="Links">
                      <tr><th colspan="2"> Links </th> </tr>
                      <tr><td>(f)irst change</td> </tr>
                      <tr><td>(n)ext change</td> </tr>
                      <tr><td>(t)op</td> </tr>
                  </table></td> </tr>
    </table>c               @   s   e Zd ZeZeZeZeZdZdddefddZ	dd	d
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S )r   r      Nc             C   s   || _ || _|| _|| _d S )N)_tabsize_wrapcolumn	_linejunk	_charjunk)r   tabsizeZ
wrapcolumnrm   rn   r   r   r   r     s    zHtmlDiff.__init__r   F   zutf-8)charsetc            C   s:   | j t| j| j| j||||||d|d j|dj|S )N)r   numlines)ZstylesZlegendtabler   xmlcharrefreplace)_file_templater   _styles_legend
make_tabler   r   )r   r   r   fromdesctodescr   r   r   r   r   r   	make_file  s    
zHtmlDiff.make_filec                s8   fdd  fdd|D } fdd|D }||fS )Nc                s6   | j dd} | j j} | j dd} | j ddjdS )Nrq   r   r   r   )rK   
expandtabsr   r   )rj   )r   r   r   expand_tabs  s    z2HtmlDiff._tab_newline_replace.<locals>.expand_tabsc                s   g | ]} |qS r   r   )rZ   rj   )r   r   r   rd      s    z1HtmlDiff._tab_newline_replace.<locals>.<listcomp>c                s   g | ]} |qS r   r   )rZ   rj   )r   r   r   rd     s    r   )r   r   r   r   )r   r   r   _tab_newline_replace  s    
	zHtmlDiff._tab_newline_replacec             C   s  |s|j ||f d S t|}| j}||ksB||jdd  |krT|j ||f d S d}d}d}xd||k r||k r|| dkr|d7 }|| }|d7 }qb|| dkr|d7 }d}qb|d7 }|d7 }qbW |d | }	||d  }
|r|	d }	d| |
 }
|j ||	f | j|d|
 d S )Nr   rT   r   r   r%   r   >)r)   r.   r   count_split_line)r   Z	data_listZline_numr   rQ   rV   r0   r3   ZmarkZline1Zline2r   r   r   r     s8    

zHtmlDiff._split_linec             c   s   x|D ]\}}}|d kr&|||fV  q|| \}}\}}g g  }	}
| j |	|| | j |
|| x@|	sh|
r|	rx|	jd}nd}|
r|
jd}nd}|||fV  q`W qW d S )Nr   r   rq   )r   rq   )r   rq   )r   r>   )r   diffsfromdatatodataflagZfromlineZfromtextZtolineZtotextfromlisttolistr   r   r   _line_wrapper;  s     

zHtmlDiff._line_wrapperc             C   s   g g g   }}}xz|D ]r\}}}y4|j | jd|f|  |j | jd|f|  W n( tk
r|   |j d  |j d  Y nX |j | qW |||fS )Nr   r%   )r)   _format_liner   )r   r   r   r   flaglistr   r   r   r   r   r   _collect_linesW  s    
zHtmlDiff._collect_linesc             C   sr   yd| }d| j | |f }W n tk
r6   d}Y nX |jddjddjdd	}|jd
dj }d|||f S )Nz%dz
 id="%s%s"r   &z&amp;r   z&gt;<z&lt;rq   z&nbsp;z<<td class="diff_header"%s>%s</td><td nowrap="nowrap">%s</td>)_prefixr   rK   r   )r   r   r   Zlinenumr   idr   r   r   r   l  s    
zHtmlDiff._format_linec             C   s0   dt j }dt j }t  jd7  _||g| _d S )Nzfrom%d_zto%d_r%   )r   _default_prefixr   )r   Z
fromprefixtoprefixr   r   r   _make_prefix  s    

zHtmlDiff._make_prefixc             C   s   | j d }dgt| }dgt| }d\}	}
d}xbt|D ]V\}}|r|
sd}
|}td|| g}d||	f ||< |	d7 }	d||	f ||< q<d}
q<W |sdg}dg}dg}d}|rdg}|}n
d	g }}|d sd
| |d< d| ||< |||||fS )Nr%   r   r   FTz id="difflib_chg_%s_%d"z"<a href="#difflib_chg_%s_%d">n</a>z2<td></td><td>&nbsp;No Differences Found&nbsp;</td>z(<td></td><td>&nbsp;Empty File&nbsp;</td>z!<a href="#difflib_chg_%s_0">f</a>z#<a href="#difflib_chg_%s_top">t</a>)r   F)r   r.   r'   rV   )r   r   r   r   r   r   r   next_id	next_hrefZnum_chgZ	in_changer   r0   r   r   r   r   _convert_flags  s:    

zHtmlDiff._convert_flagsc          	   C   sV  | j   | j||\}}|r"|}nd }t|||| j| jd}| jrL| j|}| j|\}	}
}| j|	|
|||\}	}
}}}g }d}x`t	t
|D ]P}|| d kr|dkr|jd q|j||| || |	| || |
| f  qW |s|rddd| dd| f }nd	}| jtd	j||| jd
 d }|jddjddjddjddjddS )N)rm   rn   z1            <tr><td class="diff_next"%s>%s</td>%sz%<td class="diff_next">%s</td>%s</tr>
r   z)        </tbody>        
        <tbody>
z <thead><tr>%s%s%s%s</tr></thead>z!<th class="diff_next"><br /></th>z+<th colspan="2" class="diff_header">%s</th>r   r%   )Z	data_rows
header_rowr   z +z<span class="diff_add">z -z<span class="diff_sub">z ^z<span class="diff_chg">r   z</span>r   z&nbsp;zV            <tr><td class="diff_next"%s>%s</td>%s<td class="diff_next">%s</td>%s</tr>
)r   r   r   r   r   r   r   r   r  r5   r.   r)   _table_templater   r   r   rK   )r   r   r   r   r   r   r   Zcontext_linesr   r   r   r   r  r   ri   Zfmtr0   r  r   r   r   r   r     sJ    

 
zHtmlDiff.make_table)r   r   Fr   )r   r   Fr   )r`   ra   rb   r   r   r  r   r   r   r   r   r   r   r   r   r   r   r  r   r   r   r   r   r     s$    7/ c             c   sp   ydddt | }W n  tk
r6   td| Y nX d|f}x*| D ]"}|d d |krF|dd  V  qFW d S )Nz- z+ )r%   r   z)unknown delta choice (must be 1 or 2): %rz  r   )intKeyErrorre   )ZdeltaZwhichrR   prefixesrj   r   r   r   r     s    
c              C   s   dd l } dd l}| j|S )Nr   )doctestdifflibZtestmod)r  r	  r   r   r   _test,  s    r
  __main__)rT   rc   )r   )r   r   r   r   rT   r   )r   r   r   r   rT   r   )r   r   r   r   rT   r   )#__all__heapqr   rf   collectionsr   Z_namedtupler   r   r   r   rl   r   r   r   matchr   r   r   r	   r   r   r   r
   r   r   r   r   r  r   objectr   r   r
  r`   r   r   r   r   <module>   s\   
     

0  O
 
H 
K 
%  !	
  a 
