
    	^c@s                     :   d dl Z d dlZd dlZd dlZddlmZ ddlmZmZm	Z	m
Z
mZmZmZmZmZmZmZmZmZmZmZmZ ddlmZ ddlmZmZmZmZmZ ddlm Z  dd	lmZm!Z! ddZ"ddZ#ddZ$d Z%d Z&d Z'd Z(d Z)d Z*d Z+d Z,ddZ-	 ddZ.d Z/d Z0d Z1d Z2	 d dZ3dS )!    N   )nullrev   )COMP_MODE_PLAINENTRY_DATA_COMPRESSED_LENGTHENTRY_DATA_COMPRESSION_MODEENTRY_DATA_OFFSETENTRY_DATA_UNCOMPRESSED_LENGTHENTRY_DELTA_BASEENTRY_LINK_REVENTRY_NODE_IDENTRY_PARENT_1ENTRY_PARENT_2 ENTRY_SIDEDATA_COMPRESSED_LENGTHENTRY_SIDEDATA_COMPRESSION_MODEENTRY_SIDEDATA_OFFSETREVIDX_ISCENSOREDREVLOGV0REVLOGV1)_)errormdiffpycompatrevlogutilsutil)storageutil)	constantsdeltas    c                    | j         t          j        k    sJ | j                     ddlm} |                     |          }t          j        d|id          }|                    | j        | j	        | j
        dd          }| j         |_         | j        |_        | j        |_        | j        |_        |                                 D ]}|                     |          }|                     |          \  }	}
||k    r|                    |||                     |          |	|
|t          j                   |                    |          t*          k    r4t-          d          }t-          d	          }t/          j        ||
          |                     |          rW|                     |          t*          k    r#t-          d          }t/          j        |          |                     |          }n|                     |          }|                    |||                     |          |	|
||                     |                     |                    | j        d           | j        s|                    | j         d           | j        !                    |j        | j                   | j        s%| j        !                    |j         | j                    | "                                 | #                                 dS )z*censors a revision in a "version 1" revlogr   )revlog   censoredr   s   tmpcensoredT)targetradixpostfix
censorables0   censored revision stored as delta; cannot censorsE   censoring of revlogs is not fully implemented; please report this bug)hints:   cannot censor due to censored revision having delta storeds   store)locationN)$_format_versionr   r    r!   revr   packmetaopenerr#   r$   _format_flags_generaldelta_parse_indexrevsnodeparentsaddrawrevisionlinkrevr   deltaparentr   r   r   Abort
iscensored_chunkrawdataflags	addbackup
_indexfile_inline	_datafilerenameclearcaches
_loadindex)rltr
censornode	tombstoner!   	censorrevnewrlr+   r2   p1p2mhrawtexts                 ?/usr/lib/python3/dist-packages/mercurial/revlogutils/rewrite.py	v1_censorrO   6   s   !3333R5G333 z""I$k9%=sCCI MM
	yh   E .E*E*EEwwyy %
 %
wws||D!!B)  

9%%+     %%00IJJ/  k!!,,,,== 		&~~c""g--4  k!nn$iinnGGjjooGRC"b$	
 	
 	
 	
 LLL222: 6
R\H555IU%r}555: 8
	",777NNMMOOOOOr   c                     | j         t          k    sJ | j                     | j         t          k    sJ | j                     |                     |          h}t	          | |||           dS )z*censors a revision in a "version 2" revlogN)r)   r   r   r+   _rewrite_v2)r!   rD   rE   rF   censor_revss        rN   	v2_censorrS      sn    !X---v/E---!X---v/E---::j))*KK33333r   c                 *   | j         t          k    sJ | j                     | j         t          k    sJ | j                     | j        }| j        }t          j        d|id          }t          |          }| j        |         }| j        j        |z  }|t                   dz	  }	| 
                    |          }
t          j        d          5 }t          | |||          }t          | ||	|
          } |            5 }|\  }}}}}t          |t!          |                    D ].}||v rt#          | ||||           t%          | |||||           /	 ddd           n# 1 swxY w Y   ddd           n# 1 swxY w Y   |                    dd           dS )	a[  rewrite a revlog to censor some of its content

    General principle

    We create new revlog files (index/data/sidedata) to copy the content of
    the existing data without the censored data.

    We need to recompute new delta for any revision that used the censored
    revision as delta base. As the cumulative size of the new delta may be
    large, we store them in a temporary file until they are stored in their
    final destination.

    All data before the censored data can be blindly copied. The rest needs
    to be copied as we go and the associated index entry needs adjustement.
    r"   r      s   w+bmodeNT)transaction	stripping)r)   r   r   index_docketr   r,   min
entry_sizer	   sidedata_cut_offr   unnamedtempfile_precompute_rewritten_delta_setup_new_filesrangelen_rewrite_censor_rewrite_simplewrite)r!   rD   rR   rF   	old_indexdocketfirst_excl_revfirst_excl_entryindex_cutoffdata_cutoffsidedata_cutofftmp_storagerewritten_entries	all_files
open_filesold_data_fileold_sidedata_filenew_index_filenew_data_filenew_sidedata_filer+   s                        rN   rQ   rQ      sl     !X---v/E---!X---v/E---I^F$k9%=sCCI%%N|N3<*^;L"#45;K--n==O		!v	.	.	. /+7	
 
 %	
 
	 Y[[ 	J !! ^S^^<<  +%%#!"!    $!")#   	 	 	 	 	 	 	 	 	 	 	 	 	 	 	%/ / / / / / / / / / / / / / /` LLTTL22222s7   	/E18AEE1E	E1!E	"E11E58E5c                    t          j        |           }i }t          |          }| j                                        5 }t          |t          |                    D ]m}||v r||         }	|	t                   |vr |	t                   dk    rt          ddt          f||<   E|                     ||          }
t          j        |	t                   |                     |	t                              |                     |	t"                             |
gt          |
          d|	t$                   dz            }|                    ||||          }| j        j        }t          j        ||          \  }}|                                }|                    |j        d                    |                                }|j        |||f||<   o	 ddd           n# 1 swxY w Y   |S )u   Compute new delta for revisions whose delta is based on revision that
    will not survive as is.

    Return a mapping: {rev → (new_base, data_start, data_end, compression_mode)}
    r   )_dfN  )r2   rI   rJ   btexttextlen
cachedeltar;   )excluded_bases
target_revr   )r   deltacomputerr\   _segmentfile
_open_readrb   rc   r   r
   r   r   r:   r   revisioninfor   r2   r   r   r	   finddeltainfor[   default_compression_headerdelta_compressiontellrf   database)r!   rg   excluded_revsrn   dcro   ri   dfhr+   entrytextinfoddefault_comp	comp_modestartends                    rN   r`   r`      s?    
	f	%	%B''N			'	'	)	) #ISY88 "	I "	ICm## cNE%&m;; 3499*11a)I!#&& ~~cs~33"/}-{{5#899{{5#899&II# 12V;   $$#m %    &~H%7aHH	1#((**!!!&),,,!&&((*+&%i)H!#&&E"	I#I #I #I #I #I #I #I #I #I #I #I #I #I #I #IH s   FGG Gc           	        	
 | j         }| j                            |                                          }| j                            |                                          
| j                            |                                          | j                            |                                          | j                            |                                          | j                            |                                          	t          j
        |           t          j
        
           t          j
        	           | j                            |                                           | j                            |                                           | j                            |                                           |_        |_        |_        |                                  |                     |           t"          j        	
fd            }|S )a+  

    return a context manager to open all the relevant files:
    - old_data_file,
    - old_sidedata_file,
    - new_index_file,
    - new_data_file,
    - new_sidedata_file,

    The old_index_file is not here because it is accessed through the
    `old_index` object if the caller function.
    )nb_bytes)rh   c            
   3     K   t          
d          5 } t          d          5 }t          d          5 }t          d          5 }t          	d          5 }|                    dt          j                   |                                k    sJ |                    dt          j                   |                                k    sJ |                    dt          j                   |                                k    sJ | ||||fV  d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Nrbzr+br   )openseekosSEEK_ENDr   )rr   rs   rt   ru   rv   rl   rk   new_data_filepathnew_index_filepathnew_sidedata_filepathold_data_filepathold_sidedata_filepathrm   s        rN   all_files_openerz*_setup_new_files.<locals>.all_files_openerB  s      #T** 	m+T22 6G,e44 /77 =!15  .*//2;???#1#6#6#8#8L#H#H#H#H)..q"+>>>#0#5#5#7#7;#F#F#F#F-221bkBBB#4#9#9#;#;#N#N#N#N - 1 . - 1#                                                           	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   E9E!E
D3	B8DD3	D  D3	#D $D3	'E
3D77E
:D7;E
>E!
EE!EE!E9!E%	%E9(E%	)E99E= E=)r[   r-   joinindex_filepathdata_filepathsidedata_filepathrt   ru   rv   r   copyfileregister_file	index_enddata_endsidedata_endrA   rB   
contextlibcontextmanager)r!   rk   rl   rm   rh   old_index_filepathr   r   r   r   r   r   s    ```   @@@@@rN   ra   ra     s/   $ ^F++F,A,A,C,CDD**6+?+?+A+ABB"M..v/G/G/I/IJJ++F,A,A,C,CDD**6+?+?+A+ABB"M..v/G/G/I/IJJM$&8<PPPPM#%6MMMMM    
 M 5 5 7 7888
M 4 4 6 6777
M 8 8 : :;;;#F!FO)F 
V$$$           0 r   c                    |\  }}}}	}
||         }|t                    dz  }|t                    dz	  }||vrR|                    |           |t                   }|                    |          }|t                   }|t
                   }n<||         \  }}}}||z
  }|                    |           |                    |          }|	                                }|	                    |           |t                   }|
                                }d|k     rL|t                   }|                    |           |                    |          }|
                    |           |t                   }|t                   }||k    sJ ||f            t          j        ||||||t                   |t                   |t                    |t"                   ||||          }| j                            |           | j                            |          }|                    |           |                                | j        _        |	                                | j        _        |
                                | j        _        dS )z@append a normal revision to the index after the rewritten one(s)ry   rU   r   r;   data_offsetdata_compressed_lengthdata_uncompressed_lengthdata_delta_baselink_revparent_rev_1parent_rev_2node_idsidedata_offsetsidedata_compressed_lengthdata_compression_modesidedata_compression_modeN)r	   r   r   readr   r   r   rf   r   r   r
   r   r   r   r   r   r   r   rZ   appendentry_binaryr[   r   r   r   )r!   rg   rp   r+   ro   rn   rr   rs   rt   ru   rv   r   r;   old_data_offsetnew_data_sizenew_datar   d_comp_moder   r   new_data_offsetsidedata_sizenew_sidedata_offsetold_sidedata_offsetnew_sidedatar   sd_com_mode	new_entry	entry_bins                                rN   re   re   ^  s    	cNE#$v-E-."4O
###?+++:; %%m44 0178 c"	
e##M22 $((**O!!!:;M+0022=#$9:2333(--m<<---$%CD78Kc!!!OS#9!!!!#,!9'~&>*>*m$+#0)"-  I L	"""))#..I###-2244FN+0022FN"3"8"8":":FNr   c                 n   |\  }}}}}	||         }
t          |          }|                                }|                    |           |
t                   }|
t                   }|
t
                   }t          j        t          j	        ||||||||
t                   ddt          t                    }| j                            |           | j                            |          }|                    |           |                                | j        _        |                                | j        _        dS )z&rewrite and append a censored revisionr   r   N)rc   r   rf   r   r   r   r   r   r   r   r   r   rZ   r   r   r[   r   r   )r!   rg   rp   r+   rF   rr   rs   rt   ru   rv   r   r   r   r   rI   rJ   r   r   s                     rN   rd   rd     s/    	cNE 	NNM#((**O	""" ^$H	~	B	~	B!)#,!.m$#$-"1  I L	"""))#..I###-2244FN+0022FNr   c                     |                      dd          d                             dd          }t          |          dk     r(t          d          }|| z  }t	          j        |          |d         S )N   .r   r      /r   s,   cannot recognize filelog from filename: '%s')rsplitsplitrc   r   r   r7   )path	path_partmsgs      rN    _get_filename_from_filelog_indexr     sl    D!$$Q'--dA66I
9~~?@@tk#Q<r   c                 H    ddl m} |                    | j        |          }|S )zAReturns the filelog for the given `path`. Stolen from `engine.py`r   )filelog)r*   r   svfs)repor   r   fls       rN   _filelog_from_filenamer     s0     	D	)	)BIr   c                 h   ddl m} |                     | j                  d}t	          j        |          |j        j        }|j        |         }t          |          }	|d         |d         c|	d<   |	d<    |j
        |	dd          }
|                    |           |                    |
           dS )zASwaps p1 and p2 and overwrites the revlog entry for `rev` in `fp`r   parsersNz*repo needs to be locked to rewrite parents         )purer   _currentlock_lockrefr   ProgrammingErrorIndexObjectindex_formatrZ   listpackr   rf   )r   rC   r+   offsetfpr   r   r   r   r   packeds              rN   _write_swapped_parentsr     s    ''/:$S)))&3LHSMEUI!&q58IaL)A,\	"1".FGGFOOOHHVr   c           
         ddl m} | j        }t          |          dk    sJ |j        }|j        t          j        k    rd|j        z  }t          j	        |          |j
        }|dz   }t          d          }	|                                5  	 t          j        |j                            |          |j                            |          |j                   |                    |d	          5 }
|j        r|                    |
                                          }|                                D ]H}||v rB|                    |          }t/          | ||||
           |                    |	||fz             InH|j        j        }|D ]9}||j        z  }t/          | ||||
           |                    |	||fz             :d
d
d
           n# 1 swxY w Y   |j                            ||           |                                 |                                 t          j        |           n# t          j        |           w xY w	 d
d
d
           d
S # 1 swxY w Y   d
S )z
    Swaps p1 and p2 for all `to_fix` revisions of filelog `fl` and writes the
    new version to disk, overwriting the old one with a rename.
    r   r   r   z+expected version 1 revlog, got version '%d's   .tmp-parents-fixs%   repaired revision %d of 'filelog %s'
)
checkambigs   r+rV   N) r   r   uirc   _revlogr)   r   r   r   r   r=   r   uninterruptibler   r   r-   r   _checkambigr>   InlinedIndexObjectr   r1   _calculate_indexr   rf   r   r   sizer@   rA   rB   	tryunlink)r   r   to_fixr   r   rC   r   
index_filenew_file_pathrepaired_msgr   rZ   r+   r   r   s                  rN   _reorder_filelog_parentsr     s   
 	Bv;;????	B	Y///;b>PP$S)))J!44M>??L					 * *	*M	z**	}-->    =u55 C: C#66rwwyyAAE!wwyy G G&==%*%;%;C%@%@F24S&"MMMHH\S*4E%EFFF	G $+#6#CL% C C!$|'8!8.tRfbIIIj0A!ABBBBC C C C C C C C C C C C C C C I]J777NNMMOOON=))))DN=)))))7* * * * * * * * * * * * * * * * * *sQ   IA#H51CGH5G	H5G	AH5 I5III #I c                 B      fd} fd}t          |||          S )Nc                  8    j                                        S N)r   r:   filerevr   s   rN   <lambda>z'_is_revision_affected.<locals>.<lambda>8  s    
**733 r   c                  8    j                                        S r   )r   
parentrevsr   s   rN   r  z'_is_revision_affected.<locals>.<lambda>9  s    "*//88 r   )_is_revision_affected_inner)r   r   metadata_cache	full_textparent_revss   ``   rN   _is_revision_affectedr  7  sA    33333I88888K&;  r   c                     	  |             }n# t           j        $ r Y dS w xY wt          |dd                   dk    }||||<   |r% |            \  }}|t          k    r|t          k    rdS dS )a  Mercurial currently (5.9rc0) uses `p1 == nullrev and p2 != nullrev` as a
    special meaning compared to the reverse in the context of filelog-based
    copytracing. issue6528 exists because new code assumed that parent ordering
    didn't matter, so this detects if the revision contains metadata (since
    it's only used for filelog-based copytracing) and its parents are in the
    "wrong" order.FNr   s   
T)r   CensoredNodeErrorbytesr   )r  parents_revsr   r  raw_texthas_metarI   rJ   s           rN   r  r  ?  s    9;;"   uu
 Xbqb\""i/H!"*w <>>R==R7]]45s   
   c           	      z   	 |j         		fd}	fd}	fd}	fd}	fd}t          ||||||          S )Nc                  .                                    S r   )r8   r   rC   s   rN   r  z,_is_revision_affected_fast.<locals>.<lambda>^      "--00 r   c                  .                                    S r   )r6   r  s   rN   r  z,_is_revision_affected_fast.<locals>.<lambda>_  s    00 r   c                  .                                    S r   )r9   r  s   rN   r  z,_is_revision_affected_fast.<locals>.<lambda>`  s    BIIg&& r   c                  .                                    S r   )r:   r  s   rN   r  z,_is_revision_affected_fast.<locals>.<lambda>a  s    

7++ r   c                  .                                    S r   )r  r  s   rN   r  z,_is_revision_affected_fast.<locals>.<lambda>b  r  r   )r    _is_revision_affected_fast_inner)
r   r   r   r  is_censored
delta_basedeltar  r  rC   s
     `      @rN   _is_revision_affected_fastr  \  s    	B00000K00000J&&&&&E+++++I00000K+  r   c                     |             rd||<   dS  |            \  }}|t           k    s|t           k    rdS  |            }	|                    |	          }
|
t          ||||          S  |            }t          |          s|
S d}t          |          |k     r!t	          j        t          d                    t          j        d|d|                   \  }}}|dk     rt          ||||          }|S |
||<   |
S )aG  Optimization fast-path for `_is_revision_affected`.

    `metadata_cache` is a dict of `{rev: has_metadata}` which allows any
    revision to check if its base has metadata, saving computation of the full
    text, instead looking at the current delta.

    This optimization only works if the revisions are looked at in order.FN   s   patch cannot be decodeds   >lllr   )	r   getr  rc   r   r7   r   structunpack)r  r  r  r  r  r   r  rI   rJ   delta_parentparent_has_metadatachunkheader_lengthr   _end_lengthis_affecteds                    rN   r  r  n  s:   " {}} "'wu[]]FB	W}}gu:<<L(,,\::"*	
 
 	
 EGGEu:: #""M
5zzM!!k!677888!=%2GHHE4qyy 2	
 
  2N7r   c           
         |                      t          d          |z              |            5  t          |d          5 }|                                                    d          D ]R}|s|                    dd          \  }}t          ||          t          fd|                    d          D                       }	t                      }
|	D ]}t          |          rd	}|                     |||fz             /t          d
          }|t          j
                            |                    |fz  }|                     |           |
                    |           |	|
z
  }	|	s)t          d          }|                      ||z             2|st          |t          |	                     T	 ddd           n# 1 swxY w Y   ddd           dS # 1 swxY w Y   dS )a  
    Fix the revisions given in the `from_report` file, but still checks if the
    revisions are indeed affected to prevent an unfortunate cyclic situation
    where we'd swap well-ordered parents again.

    See the doc for `debug_fix_issue6528` for the format documentation.
    s   loading report file '%s'
r   rV      
    r   c              3   f   K   | ]+}                     t          j        |                    V  ,d S r   )r+   binascii	unhexlify).0nr   s     rN   	<genexpr>z_from_report.<locals>.<genexpr>  sK        23x)!,,--     r      ,,   found affected revision %d for filelog '%s'
s)   revision %s of file '%s' is not affected
s*   no affected revisions were found for '%s'
N)rf   r   r   r   r   r   setr  warnr,  hexlifyr2   addr   sorted)r   r   contextfrom_reportdry_runfline	filenodesfilenamer   excludedr   r   r   s                @rN   _from_reportr@    s    HHQ,--;<<<	 C CD4000 CAFFHHNN5)) 	C 	CD "&**T1"5"5Ix'h77B    7@t7L7L    F uuH! * *(W55 *JCGGC7H"556666IJJCH,RWWW-=-=>>IICGGCLLLLL))))h&F FGGx((( C(r6&>>BBB5	CC C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C Cs6   G$E<G G$G	G$G	G$$G(+G(c           
   #   J   K   i }t          j                   t          |t                               D ]`\  }}|\  }}} j                            |          s(t          j        | j        t          d                     
                    |           j                                      s(t          j         j        t          d                     
                               j                                      s(t          j         j        t          d                     
                              fd} fdfdfd}	 fd}
t          |fd|
|	||          }|r
|||f}|V  bdS )	z7filter incomind deltas to repaire issue 6528 on the flys   unknown parentc                  2    t           t          z            S r   )boolr   )r;   s   rN   r  z(filter_delta_issue6528.<locals>.<lambda>  s    d5+<#<== r   c                  .                                    S r   )r+   )r  r!   s   rN   r  z(filter_delta_issue6528.<locals>.<lambda>  s    VZZ
33 r   c                       S r    )base_revs   rN   r  z(filter_delta_issue6528.<locals>.<lambda>  s    X r   c                       fS r   rF  )p1_revp2_revs   rN   r  z(filter_delta_issue6528.<locals>.<lambda>  s    vv. r   c            	         t          j        
                                        } t          j        	d g| f          }
j        J 
j        r
j        d         }n
j        d         }                    ||          S )Nr   r   )r   patchedsizer   r   r   _writinghandlesr>   	buildtext)r{   revinfofhrG  r  r   r;   r2   p1_nodep2_noder!   s      rN   r  z)filter_delta_issue6528.<locals>.full_text  s    
 'H(=(=uEEG!.5! G )555~ /+A.+A. **7B777r   c                       S r   rF  )r  s   rN   r  z(filter_delta_issue6528.<locals>.<lambda>  s    E r   N)r   r   	enumeraterc   rZ   has_noder   LookupErrorr$   r   r+   r  )r!   deltas_iterr  r+   r   linknode	deltabasesidedatar  r  r  r'  rG  r  r  r   r;   r2   rQ  rI  rR  rJ  s   `           @@@@@@@@@@rN   filter_delta_issue6528r[    s>     N(00MKV55 I IQ 		
 |$$Y// 	#6<+<)=)=   ::i((|$$W-- 	Q#GV\1=N;O;OPPPG$$|$$W-- 	Q#GV\1=N;O;OPPPG$$====33333
%%%%
.....	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	80 7MMM
 
  
		A SI Ir   Fc           
      8   ddl m t          j        fd            }|rt	          | ||          S g } |            5  t          fdj                                        D                       }|                     t          d          t          d          t          |                    }	d}
|D ]\  }}|
                    d	          r
|j        z  s&|	                                 t          |          }t          |          }t                      }i }|                                D ]}t#          |||          }|ret%          ||          }||k    rOt          d
          }t'          j        |                    |                    }t-          j        |||fz            |rrd}|                     |||fz             d}
sRr;|                    t'          j        |                    |                               |                    |           |r;t5          |          }r|                    ||f           t9          ||           |
r"|                     t          d                     ra|r_t=          d          5 }|D ]2\  }}|                    dd                    |          |fz             3	 d d d            n# 1 swxY w Y   |	                                  d d d            d S # 1 swxY w Y   d S )Nr   )storec               3      K    srd V  d S                                  5                                  5  d V  d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S r   )wlocklock)r:  r   	to_reports   rN   r8  z!repair_issue6528.<locals>.context-  s       	i 	EEEEE  tyy{{                                  s3   A AA A	A A	A  A$'A$c              3   f   K   | ]+\  }}}|                     d           |j        z  %||fV  ,dS )   .iN)endswithFILEFLAGS_FILELOG)r.  	file_typer   _sr]  s       rN   r0  z#repair_issue6528.<locals>.<genexpr>;  sf       
 
%D"}}U##
 )2E4K(K

 
 
 
 
 
r   s   looking for affected revisionss   filelogs)unittotalTrc  s)   paranoid check failed for '%s' at node %sr2  Fs!   no affected revisions were found
wbrV   s   %s %s
r1  )!r*   r]  r   r   r@  r   	datafilesmakeprogressr   rc   rd  re  	incrementr   r   r3  r1   r  r  r,  r5  r2   r   r7   r4  r6  r7  r   r   rf   r   r   complete)r   r   r:  ra  r9  paranoidr8  report_entriesfilesprogressfound_nothingrf  r   r>  r   r   r  r   affectedslowr   r2   r;  r]  s    ```                   @rN   repair_issue6528rv  (  s?            EBg{GDDDN	 > > 
 
 
 
)-)=)=)?)?
 
 
 
 
 ??/00;e** # 
 

 $ &	? &	?OItMM%(( 5#::    7==H'h77B UUFN7799 0 05"g~   B0W==Dx'' LMM'/0@0@AA#k#40@*@AAA 0JCGGC7D/1222$)M" 0$ 0"JJx'78H8H'I'IJJJJ"JJw/// ? ?"))8V*<====,T2v>>> 	?HHQ<==>>> 	D 	Did+++ Dq$2 D DLD&GGJ$))F*;*;T)BBCCCCDD D D D D D D D D D D D D D D 	}> > > > > > > > > > > > > > > > > >s7   IL 6K#L#K'	'L*K'	+LLL)r   r   )FNNF)4r,  r   r   r  r2   r   r   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   i18nr   r*   r   r   r   r   r   utilsr   r   rO   rS   rQ   r`   ra   re   rd   r   r   r   r   r  r  r  r  r@  r[  rv  rF  r   rN   <module>ry     s        				                                         $                               K K K K\4 4 4 4O3 O3 O3 O3d2 2 2jG G GTM; M; M;`03 03 03f      $-* -* -*`    	   :  $= = =@%C %C %CPO O Of INP P P P P Pr   