
    jc                    (   U d Z ddlm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	m
Z
mZmZ ddlmZ ddl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 eeej        e         f         Z ed
e          Z	  eded          Z 	  ede          Z!	 d ej"        ej#        fD             Z$	 i Z%de&d<   	 dZdZ'	 d[d\dZ(	 d[d]d$Z)d^d&Z*d_d*Z+ ed+          d`d,            Z,	 	 d`dad3Z-dbd8Z.	 	 d`dcd:Z/ddd;Z0ded>Z1dfd?Z2 ed@          dgdB            Z3	 d[dhdEZ4 edF          	 d[didI            Z5	 d[djdNZ6 G dO dPe7          Z8 G dQ dRe7          Z9 edS           G dT dUee!                               Z: G dV dWe;          Z< G dX dYe;          Z=dS )kzC
This module provides utility methods for dealing with path-specs.
    )annotationsN)
CollectionIterableIteratorSequence)	dataclass)AnyCallableGenericOptionalTypeVarUnioncast   )Pattern)AnyStr
deprecatedTPattern)boundTPattern_coT)r   	covariantTStrPathc                \    g | ])}|r%|t           j        k    t          t          |          *S  )	posixpathsepr   str).0__seps     W/lsinfo/ai/hellotax_ai/base_platform/venv/lib/python3.11/site-packages/pathspec/util.py
<listcomp>r!   4   sC       
	 y}$$ c5$$$    z1dict[str, Callable[[Union[str, bytes]], Pattern]]_registered_patternspathpathlib.Pathreturnr   c                j    t          |           }|                                 r|t          j        z  }|S )a4  
	Appends the path separator to the path if the path is a directory. This can be
	used to aid in distinguishing between directories and files on the file-system
	by relying on the presence of a trailing path separator.

	*path* (:class:`pathlib.Path`) is the path to use.

	Returns the path (:class:`str`).
	)r   is_dirosr   )r$   str_paths     r    append_dir_sepr+   G   s0     IIKKMM 
bf(r"   patternsIterable[tuple[int, Pattern]]fileis_reversedOptional[bool]$tuple[Optional[bool], Optional[int]]c                    |r1| D ],\  }}|j          |                    |          |j         |fc S -dS d}d}| D ]*\  }}|j         |                    |          	|j         }|}+||fS )a  
	Check the file against the patterns.

	*patterns* (:class:`~collections.abc.Iterable`) yields each indexed pattern
	(:class:`tuple`) which contains the pattern index (:class:`int`) and actua
	pattern (:class:`.Pattern`).

	*file* (:class:`str`) is the normalized file path to be matched against
	*patterns*.

	*is_reversed* (:class:`bool` or :data:`None`) is whether the order of the
	patterns has been reversed. Default is :data:`None` for :data:`False`.
	Reversing the order of the patterns is an optimization.

	Returns a :class:`tuple` containing whether to include *file* (:class:`bool`
	or :data:`None`), and the index of the last matched pattern (:class:`int` or
	:data:`None`).
	NNNinclude
match_file)r,   r.   r/   indexpatternout_include	out_indexs          r    check_match_filer;   X   s    .    ! " "neWo!g&8&8&>&>&J?E!!!!	 !%+!)   neWo!g&8&8&>&>&J/KI	i	r"   Iterable[Pattern]filesIterable[str]all_matchesdict[str, MatchDetail]c                X   t          |t                    r|nt          |          }i }| D ]~}|j        u|                    |          }|j        rQ|D ]M}||v r4|r!||         j                            |           )|||         j        d<   :t          |g          ||<   Nv|D ]}||= |S )a  
	Matches the files to the patterns, and returns which patterns matched the
	files.

	*patterns* (:class:`~collections.abc.Iterable` of :class:`.Pattern`) contains
	the patterns to use.

	*files* (:class:`~collections.abc.Iterable` of :class:`str`) contains the
	normalized file paths to be matched against *patterns*.

	*all_matches* (:class:`bool` or :data:`None`) is whether to return all matches
	patterns (:data:`True`), or only the last matched pattern (:data:`False`).
	Default is :data:`None` for :data:`False`.

	Returns the matched files (:class:`dict`) which maps each matched file
	(:class:`str`) to the patterns that matched in order (:class:`.MatchDetail`).
	Nr   )
isinstancer   listr5   matchr,   appendMatchDetail)	r,   r=   r?   	all_filesreturn_filesr8   result_filesresult_filer.   s	            r    detailed_match_filesrK      s    , !
33DUUe(*  W_ --	**<o # 9 9|##	 7K )009999/6|K )!,,"-wi"8"8l;9   	d		r"   list[tuple[int, Pattern]]c                4    d t          |           D             S )a&  
	Filters out null-patterns.

	*patterns* (:class:`~collections.abc.Iterable` of :class:`.Pattern`) contains
	the patterns.

	Returns a :class:`list` containing each indexed pattern (:class:`tuple`) which
	contains the pattern index (:class:`int`) and the actual pattern
	(:class:`.Pattern`).
	c                *    g | ]\  }}|j         ||fS Nr5   )r   __index__pats      r    r!   z*_filter_check_patterns.<locals>.<listcomp>   s3     	 	 	gu
] Er"   )	enumerater,   s    r    _filter_check_patternsrU      s+    	 	!(++	 	 	 r"   valuer	   boolc                f    t          | t                    ot          | t          t          f           S )z
	Check whether the value is an iterable (excludes strings).

	*value* is the value to check,

	Returns whether *value* is an iterable (:class:`bool`).
	)rB   r   r   bytes)rV   s    r    _is_iterablerZ      s*     	5(##KJusEl,K,K(KKr"   zGpathspec.util.iter_tree() is deprecated. Use iter_tree_files() instead.c                &    t          | ||          S )z`
	.. version-deprecated:: 0.10.0
		This is an alias for the :func:`.iter_tree_files` function.
	)on_errorfollow_links)iter_tree_filesrootr\   r]   s      r    	iter_treera      s     	xlKKKKr"   r`   StrPathr\   #Optional[Callable[[OSError], None]]r]   Iterator['TreeEntry']c              #     K   |"t          |          st          d|d          |d}t          t          j                            |           di ||          E d{V  dS )a  
	Walks the specified directory for all files and directories.

	*root* (:class:`str` or :class:`os.PathLike`) is the root directory to search.

	*on_error* (:class:`~collections.abc.Callable` or :data:`None`) optionally is
	the error handler for file-system exceptions. It will be called with the
	exception (:exc:`OSError`). Reraise the exception to abort the walk. Default
	is :data:`None` to ignore file-system exceptions.

	*follow_links* (:class:`bool` or :data:`None`) optionally is whether to walk
	symbolic links that resolve to directories. Default is :data:`None` for
	:data:`True`.

	Raises :exc:`.RecursionError` if recursion is detected.

	Returns an :class:`~collections.abc.Iterator` yielding each file or directory
	entry (:class:`.TreeEntry`) relative to *root*.
	N	on_error: is not callable.T )callable	TypeError_iter_tree_entries_nextr)   r$   abspathr_   s      r    iter_tree_entriesrm      s|      0 (!3!3;h;;;<<<,#BGOOD$9$92r8\ZZZZZZZZZZZr"   	root_fulldir_relmemodict[str, str]c           	   #    K   t           j                            | |          }t           j                            |          }||vr|||<   nt	          |||         |          t          j        |          5 }|D ]>}t           j                            ||j                  }		 |                    d          }
n$# t          $ r}| ||           Y d}~\d}~ww xY w|	                                r:	 |                                }n&# t          $ r}| ||           Y d}~d}~ww xY w|
}|
                    |          r3t          |j        |	|
|          V  t          | |	|||          E d{V  |                                s|	                                rt          |j        |	|
|          V  @	 ddd           n# 1 swxY w Y   ||= dS )ap  
	Scan the directory for all descendant files.

	*root_full* (:class:`str`) the absolute path to the root directory.

	*dir_rel* (:class:`str`) the path to the directory to scan relative to
	*root_full*.

	*memo* (:class:`dict`) keeps track of ancestor directories encountered. Maps
	each ancestor real path (:class:`str`) to relative path (:class:`str`).

	*on_error* (:class:`~collections.abc.Callable` or :data:`None`) optionally is
	the error handler for file-system exceptions.

	*follow_links* (:class:`bool`) is whether to walk symbolic links that resolve
	to directories.

	Yields each entry (:class:`.TreeEntry`).
		real_path
first_pathsecond_pathFfollow_symlinksN)r)   r$   joinrealpathRecursionErrorscandirnamestatOSError
is_symlinkr(   	TreeEntryrk   is_file)rn   ro   rp   r\   r]   dir_fulldir_real	scan_iternode_entnode_rel
node_lstate	node_stats                r    rk   rk      s}     4 GLLG,,GX&& D$x..d8nRYZZZZj !Di D Dhgll7HM228u55JJ
   Xa[[[HHHH
  	YY   hqkkkXXXX
 Ioolo33 	D HM8Z
C
CCCC&y(D(LYYYYYYYYYY Dh1133 D
HM8Z
C
CCCC?D!D !D !D !D !D !D !D !D !D !D !D !D !D !D !DP 
(^^^sg   8+G$B;:G;
CCGCG4D	G	
D*D% G%D**BGGGIterator[str]c              #     K   |"t          |          st          d|d          |d}t          t          j                            |           di ||          E d{V  dS )a  
	Walks the specified directory for all files.

	*root* (:class:`str` or :class:`os.PathLike`) is the root directory to search
	for files.

	*on_error* (:class:`~collections.abc.Callable` or :data:`None`) optionally is
	the error handler for file-system exceptions. It will be called with the
	exception (:exc:`OSError`). Reraise the exception to abort the walk. Default
	is :data:`None` to ignore file-system exceptions.

	*follow_links* (:class:`bool` or :data:`None`) optionally is whether to walk
	symbolic links that resolve to directories. Default is :data:`None` for
	:data:`True`.

	Raises :exc:`.RecursionError` if recursion is detected.

	Returns an :class:`~collections.abc.Iterator` yielding the path to each file
	(:class:`str`) relative to *root*.
	Nrf   rg   Trh   )ri   rj   _iter_tree_files_nextr)   r$   rl   r_   s      r    r^   r^   M  s|      2 (!3!3;h;;;<<<,!"'//$"7"7R<XXXXXXXXXXXr"   c           	   #  F  K   t           j                            | |          }t           j                            |          }||vr|||<   nt	          |||         |          t          j        |          5 }|D ]}t           j                            ||j                  }	|                    |          rt          | |	|||          E d{V  W|	                                r|	V  p|s|
                                r|	V  	 ddd           n# 1 swxY w Y   ||= dS )am  
	Scan the directory for all descendant files.

	*root_full* (:class:`str`) the absolute path to the root directory.

	*dir_rel* (:class:`str`) the path to the directory to scan relative to
	*root_full*.

	*memo* (:class:`dict`) keeps track of ancestor directories encountered. Maps
	each ancestor real path (:class:`str`) to relative path (:class:`str`).

	*on_error* (:class:`~collections.abc.Callable` or :data:`None`) optionally is
	the error handler for file-system exceptions.

	*follow_links* (:class:`bool`) is whether to walk symbolic links that resolve
	to directories.

	Yields each file path (:class:`str`).
	rs   rw   N)r)   r$   ry   rz   r{   r|   r}   r(   r   r   r   )
rn   ro   rp   r\   r]   r   r   r   r   r   s
             r    r   r   o  s     4 GLLG,,GX&& D$x..d8nRYZZZZj i  hgll7HM228oolo33  %Y$,WWWWWWWWWW 
NNNN X0022 
NNN              . 
(^^^s   8BDDDr}   Callable[[AnyStr], Pattern]c                    t           |          S )z
	Looks up a registered pattern factory by name.

	*name* (:class:`str`) is the name of the pattern factory.

	Returns the registered pattern factory (:class:`~collections.abc.Callable`).
	If no pattern factory is registered, raises :exc:`KeyError`.
	)r#   )r}   s    r    lookup_patternr     s     	T""r"   c                Z    d}| D ]%}|j         |                    |          |j         }&|S )a&  
	Matches the file to the patterns.

	*patterns* (:class:`~collections.abc.Iterable` of :class:`.Pattern`) contains
	the patterns to use.

	*file* (:class:`str`) is the normalized file path to be matched against
	*patterns*.

	Returns :data:`True` if *file* matched; otherwise, :data:`False`.
	Fr4   )r,   r.   matchedr8   s       r    r6   r6     s@       W_ W%7%7%=%=%I_7r"   z[pathspec.util.match_files() is deprecated. Use match_file() with a loop for better results.set[str]c                    d | D             }t                      }|D ]'}t          ||          r|                    |           (|S )a  
	.. version-deprecated:: 0.10.0
		This function is no longer used. Use the :func:`.match_file` function with a
		loop for better results.

	Matches the files to the patterns.

	*patterns* (:class:`~collections.abc.Iterable` of :class:`.Pattern`) contains
	the patterns to use.

	*files* (:class:`~collections.abc.Iterable` of :class:`str`) contains the
	normalized file paths to be matched against *patterns*.

	Returns the matched files (:class:`set` of :class:`str`).
	c                     g | ]}|j         	|S rO   rP   )r   rR   s     r    r!   zmatch_files.<locals>.<listcomp>  s    JJJ50I0I0I0Ir"   )setr6   add)r,   r=   use_patternsrH   r.   s        r    match_filesr     s]    . KJHJJJ  Td## Dr"   
separatorsOptional[Collection[str]]c                    |t           }|
J |            t          j        |           }|D ]"}|                    |t          j                  }#|                    d          r|dd         }n|                    d          r
|dd         }|S )a  
	Normalizes the file path to use the POSIX path separator (i.e., ``"/"``), and
	make the paths relative (remove leading ``"/"``).

	*file* (:class:`str` or :class:`os.PathLike`) is the file path.

	*separators* (:class:`~collections.abc.Collection` of :class:`str`; or
	:data:`None`) optionally contains the path separators to normalize. This does
	not need to include the POSIX path separator (``"/"``), but including it will
	not affect the results. Default is ``None`` for :data:`.NORMALIZE_PATH_SEPS`.
	To prevent normalization, pass an empty container (e.g., an empty tuple
	``()``).

	Returns the normalized file path (:class:`str`).
	N/r   z./   )NORMALIZE_PATH_SEPSr)   fspathreplacer   r   
startswith)r.   r   	norm_filer   s       r    normalize_filer     s    ( "*
 )D// 4 4SY]33)) m))4   m)r"   zcpathspec.util.normalize_files() is deprecated. Use normalize_file() with a loop for better results.Iterable[StrPath]dict[str, list[StrPath]]c                    i }| D ]9}t          ||          }||v r||                             |           3|g||<   :|S )a  
	.. version-deprecated:: 0.10.0
		This function is no longer used. Use the :func:`.normalize_file` function
		with a loop for better results.

	Normalizes the file paths to use the POSIX path separator.

	*files* (:class:`~collections.abc.Iterable` of :class:`str` or
	:class:`os.PathLike`) contains the file paths to be normalized.

	*separators* (:class:`~collections.abc.Collection` of :class:`str`; or
	:data:`None`) optionally contains the path separators to normalize. See
	:func:`.normalize_file` for more information.

	Returns a :class:`dict` mapping each normalized file path (:class:`str`) to
	the original file paths (:class:`list` of :class:`str` or
	:class:`os.PathLike`).
	)r   )r   rE   )r=   r   
norm_filesr$   r   s        r    normalize_filesr     sf    4 )+ " "TTj999)*i%%%% 6:ir"   pattern_factory<Union[Callable[[Union[str, bytes]], Pattern], type[Pattern]]overrideNonec                    t          | t                    st          d| d          t          |          st          d|d          | t          v r|st          | t          |                    |t          | <   dS )aE  
	Registers the specified pattern factory.

	*name* (:class:`str`) is the name to register the pattern factory under.

	*pattern_factory* (:class:`~collections.abc.Callable`) is used to compile
	patterns. It must accept an uncompiled pattern (:class:`str`) and return the
	compiled pattern (:class:`.Pattern`).

	*override* (:class:`bool` or :data:`None`) optionally is whether to allow
	overriding an already registered pattern under the same name (:data:`True`),
	instead of raising an :exc:`.AlreadyRegisteredError` (:data:`False`). Default
	is :data:`None` for :data:`False`.
	zname=z is not a string.zpattern_factory=rg   N)rB   r   rj   ri   r#   AlreadyRegisteredError)r}   r   r   s      r    register_patternr   =  s    & 	4 1/T///000!! <:_:::;;;    t%9$%?@@@-dr"   c                  l     e Zd ZdZd fdZedd	            Zedd
            Zedd            Z xZ	S )r   z|
	The :exc:`AlreadyRegisteredError` exception is raised when a pattern factory
	is registered under a name already in use.
	r}   r   r   &Callable[[Union[str, bytes]], Pattern]r&   r   c                L    t                                          ||           dS )z
		Initializes the :exc:`AlreadyRegisteredError` instance.

		*name* (:class:`str`) is the name of the registered pattern.

		*pattern_factory* (:class:`~collections.abc.Callable`) is the registered
		pattern factory.
		Nsuper__init__)selfr}   r   	__class__s      r    r   zAlreadyRegisteredError.__init__b  s%     ''4)))))r"   c                &    | j         d| j        dS )4
		*message* (:class:`str`) is the error message.
		z+ is already registered for pattern factory=.)r}   r   r   s    r    messagezAlreadyRegisteredError.messageq  s-     i    
     r"   c                    | j         d         S )zB
		*name* (:class:`str`) is the name of the registered pattern.
		r   argsr   s    r    r}   zAlreadyRegisteredError.name{  s    
 
1r"   c                    | j         d         S )za
		*pattern_factory* (:class:`~collections.abc.Callable`) is the registered
		pattern factory.
		r   r   r   s    r    r   z&AlreadyRegisteredError.pattern_factory       
1r"   )r}   r   r   r   r&   r   r&   r   )r&   r   )
__name__
__module____qualname____doc__r   propertyr   r}   r   __classcell__r   s   @r    r   r   \  s         
* * * * * *    (    (    (    r"   r   c                       e Zd ZdZd fdZedd	            Zedd
            Zedd            Zedd            Z	 xZ
S )r{   zM
	The :exc:`RecursionError` exception is raised when recursion is detected.
	rt   r   ru   rv   r&   r   c                N    t                                          |||           dS )a'  
		Initializes the :exc:`RecursionError` instance.

		*real_path* (:class:`str`) is the real path that recursion was encountered
		on.

		*first_path* (:class:`str`) is the first path encountered for *real_path*.

		*second_path* (:class:`str`) is the second path encountered for *real_path*.
		Nr   )r   rt   ru   rv   r   s       r    r   zRecursionError.__init__  s'      ''9j+66666r"   c                    | j         d         S )zx
		*first_path* (:class:`str`) is the first path encountered for
		:attr:`self.real_path <RecursionError.real_path>`.
		r   r   r   s    r    ru   zRecursionError.first_path  r   r"   c                8    d| j         d| j        d| j        dS )r   z
Real path z was encountered at z
 and then r   rs   r   s    r    r   zRecursionError.message  s=    % % %do % %% % %r"   c                    | j         d         S )zV
		*real_path* (:class:`str`) is the real path that recursion was
		encountered on.
		r   r   r   s    r    rt   zRecursionError.real_path  r   r"   c                    | j         d         S )zz
		*second_path* (:class:`str`) is the second path encountered for
		:attr:`self.real_path <RecursionError.real_path>`.
		r   r   r   s    r    rv   zRecursionError.second_path  r   r"   )rt   r   ru   r   rv   r   r&   r   r   )r   r   r   r   r   r   ru   r   rt   rv   r   r   s   @r    r{   r{     s         7 7 7 7 7 7$    (    (    (    (    r"   r{   )frozenc                  :    e Zd ZU dZdZded<   	 ded<   	 ded<   d	S )
CheckResultze
	The :class:`CheckResult` class contains information about the file and which
	pattern matched it.
	)r.   r5   r7   r   r.   r0   r5   zOptional[int]r7   N)r   r   r   r   	__slots____annotations__r   r"   r    r   r     sX            
  r"   r   c                      e Zd ZdZdZd	dZdS )
rF   z>
	The :class:`.MatchDetail` class contains information about
	rT   r,   Sequence[Pattern]r&   r   c                    || _         dS )z
		Initialize the :class:`.MatchDetail` instance.

		*patterns* (:class:`~collections.abc.Sequence` of :class:`.Pattern`)
		contains the patterns that matched the file in the order they were encountered.
		NrT   )r   r,   s     r    r   zMatchDetail.__init__  s     $- r"   N)r,   r   r&   r   )r   r   r   r   r   r   r   r"   r    rF   rF     s9         
      r"   rF   c                  D    e Zd ZdZdZddZdddZdddZddZdddZ	dS )r   zP
	The :class:`TreeEntry` class contains information about a file-system entry.
	_lstatr}   r$   _statr}   r   r$   lstatos.stat_resultr~   r&   r   c                D    || _         	 || _        	 || _        	 || _        dS )aM  
		Initialize the :class:`TreeEntry` instance.

		*name* (:class:`str`) is the base name of the entry.

		*path* (:class:`str`) is the relative path of the entry.

		*lstat* (:class:`os.stat_result`) is the stat result of the direct entry.

		*stat* (:class:`os.stat_result`) is the stat result of the entry,
		potentially linked.
		Nr   )r   r}   r$   r   r~   s        r    r   zTreeEntry.__init__  s?    ( !&$+ $) $)  $$* r"   Nr]   r0   rW   c                \    |d}|r| j         n| j        }t          j        |j                  S )a<  
		Get whether the entry is a directory.

		*follow_links* (:class:`bool` or :data:`None`) is whether to follow symbolic
		links. If this is :data:`True`, a symlink to a directory will result in
		:data:`True`. Default is :data:`None` for :data:`True`.

		Returns whether the entry is a directory (:class:`bool`).
		NT)r   r   r~   S_ISDIRst_moder   r]   r   s      r    r(   zTreeEntry.is_dir-  4     <(9djjdk)	i'	(	((r"   c                \    |d}|r| j         n| j        }t          j        |j                  S )aE  
		Get whether the entry is a regular file.

		*follow_links* (:class:`bool` or :data:`None`) is whether to follow symbolic
		links. If this is :data:`True`, a symlink to a regular file will result in
		:data:`True`. Default is :data:`None` for :data:`True`.

		Returns whether the entry is a regular file (:class:`bool`).
		NT)r   r   r~   S_ISREGr   r   s      r    r   zTreeEntry.is_file=  r   r"   c                >    t          j        | j        j                  S )zC
		Returns whether the entry is a symbolic link (:class:`bool`).
		)r~   S_ISLNKr   r   r   s    r    r   zTreeEntry.is_symlinkM  s     
dk)	*	**r"   c                *    |d}|r| j         n| j        S )a9  
		Get the cached stat result for the entry.

		*follow_links* (:class:`bool` or :data:`None`) is whether to follow symbolic
		links. If this is :data:`True`, the stat result of the linked file will be
		returned. Default is :data:`None` for :data:`True`.

		Returns that stat result (:class:`os.stat_result`).
		NT)r   r   )r   r]   s     r    r~   zTreeEntry.statS  s"     <#	44r"   )
r}   r   r$   r   r   r   r~   r   r&   r   rO   )r]   r0   r&   rW   )r&   rW   )r]   r0   r&   r   )
r   r   r   r   r   r   r(   r   r   r~   r   r"   r    r   r     s         
 1& & & &P) ) ) ) ) ) ) ) ) ) + + + +5 5 5 5 5 5 5r"   r   )r$   r%   r&   r   rO   )r,   r-   r.   r   r/   r0   r&   r1   )r,   r<   r=   r>   r?   r0   r&   r@   )r,   r<   r&   rL   )rV   r	   r&   rW   r3   )r`   rb   r\   rc   r]   r0   r&   rd   )rn   r   ro   r   rp   rq   r\   rc   r]   rW   r&   rd   )r`   rb   r\   rc   r]   r0   r&   r   )rn   r   ro   r   rp   rq   r\   rc   r]   rW   r&   r   )r}   r   r&   r   )r,   r<   r.   r   r&   rW   )r,   r<   r=   r>   r&   r   )r.   rb   r   r   r&   r   )r=   r   r   r   r&   r   )r}   r   r   r   r   r0   r&   r   )>r   
__future__r   r)   os.pathpathlibr   r~   collections.abcr   r   r   r   dataclassesr   typingr	   r
   r   r   r   r   r   r8   r   _typingr   r   r   PathLikerb   r   r   r   r   altsepr   r#   r   r+   r;   rK   rU   rZ   ra   rm   rk   r^   r   r   r6   r   r   r   r   	Exceptionr   r{   r   objectrF   r   r   r"   r    <module>r      s     # " " " " " 				                  
                      
 
 
 
 
 
        R[%%
&7:W---
 gm7dCCC
 7:W--- vry!   
 KM  L L L L   (  $)  )  )  )  ) ^  $, , , , ,^   (L L L L J L L L L 26 $[ [ [ [ [BL L L Lb 26 $Y Y Y Y YD; ; ; ;|	# 	# 	# 	#   (    	 > *.' ' ' ' 'T   *.   	 H !. . . . .>, , , , ,Y , , ,^7 7 7 7 7Y 7 7 7t $    '(#   >    &   0c5 c5 c5 c5 c5 c5 c5 c5 c5 c5r"   