
    ^jc                        d Z ddlZddlZddlZddlZddlZddlZddlZddlm	Z	m
Z
 ddlmZmZ ddlmZ ddlmZ ddlmZmZ ddlZddlmZmZmZ dd	lmZmZ d
dlmZ d
dlmZm Z  d
dl!m"Z" dZ# ed      Z$dZ%dZ& ee&      Z'dZ(dZ)dZ* ejV                  e,      Z- G d de.e      Z/e
 G d d             Z0e'jc                  dg d      	 dkdejd                  dee. ed       f   d!ee3 e d"d#      f   d$dfd%       Z4e'jc                  d&g d'      	 dld(ee.dz   ed)      f   d$dfd*       Z5e'jc                  d+d,dd,d-d.d/g0      dejd                  d(ee. ed1      f   d$dfd2       Z6e'jc                  d3d4g      dmd5       Z7e'jc                  d6d7g      dmd8       Z8e'jc                  d9d:g      d(ee. ed;      f   d$dfd<       Z9d$e:e0   fd=Z;d$e:e<e.e.f      fd>Z=d?e:e.   d@e>e.   d$e?dz  fdAZ@dBe.d$edz  fdCZAd(e.d$e0fdDZBdEe0d$e/fdFZCdddGdHe.dIe.dBe.dJe.dKe.dz  dLe.dz  d$e0fdMZDd,dNdHe.dIe.dJe.dOe3d$e.dz  f
dPZEdHe.dIe.dJe.dBe.d$eFf
dQZGdRedBe.dSeFd$efdTZHdRedHe.dIe.dBe.dJe.d$efdUZIdHe.dIe.dJe.dVe.dz  d$e.dz  f
dWZJdBe.d$efdXZKdddYdZe.d[eLdz  d\eLdz  fd]ZMdHe.dIe.d$e<e.e.dz  f   fd^ZNdBe.d$e.fd_ZOdBe.d$efd`ZPdaedbe.d$efdcZQ ej                  dd      ZSdBe.dee.d$e.fdfZTde.d$e<e.e.e.f   fdgZUd(e.d$e.fdhZVdied?e:e.   d$e?fdjZWy)nz0Contains helper utilities for hf CLI extensions.    N)asdict	dataclass)datetimetimezone)Enum)Path)	AnnotatedLiteral)CLIErrorCLIExtensionInstallErrorConfirmationError)get_sessionlogging   )typer_factory)ArgumentOption)outhuggingfacez~/.local/share/hf/extensionszmanifest.jsonzManage hf CLI extensions.

Security Warning: extensions are third-party executables or Python packages. Install only from sources you trust.)helpzhf-extension
   i,  c                       e Zd ZdZdZdZy)_ExtensionUpdateStatusupdated
up_to_dateskippedN)__name__
__module____qualname__UPDATED
UP_TO_DATESKIPPED     i/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/huggingface_hub/cli/extensions.pyr   r   7   s    GJGr$   r   c                       e Zd ZU eed<   eed<   eed<   eed<   eed<   ed   ed<   eed<   d	Zed	z  ed
<   d	Zed	z  ed<   e	de
dd fd       Zde
dd	fdZy	)ExtensionManifestownerreporepo_id
short_nameexecutable_path)binarypythontypeinstalled_atNdescription
commit_shapathreturnc                 T   |t         z  }|j                         st        d| d      t        j                  |j                               }|j                         D ci c]  \  }}|| j                  v s|| }}}t        j                  |d         |d<   t        di |S c c}}w )NzManifest file not found at z". Your extension may be corrupted.r0   r#   )MANIFEST_FILENAMEis_filer   jsonloads	read_textitems__dataclass_fields__r   fromisoformatr'   )clsr3   manifest_pathdatakeyvalues         r%   loadzExtensionManifest.loadI   s    00$$&8Gijkkzz-1134-1ZZ\]zsESCD\D\=\U
]]'55d>6JK^ (4(( ^s   B$6B$c                     |t         z  }|j                  j                  dd       t        |       }| j                  j                         |d<   |j                  t        j                  |dd             y )NTparentsexist_okr0      )indent	sort_keys)	r6   parentmkdirr   r0   	isoformat
write_textr8   dumps)selfr3   r?   r@   s       r%   savezExtensionManifest.saveT   sc    00""4$"?d|#00::<^  Dd!KLr$   )r   r   r   str__annotations__r
   r   r1   r2   classmethodr   rC   rQ   r#   r$   r%   r'   r'   =   s    J
ILO
$
%%"Kt"!Jd
!) )!4 ) )M M$ Mr$   r'   install)zhf extensions install hf-claudez-hf extensions install hanouticelina/hf-claudez(hf extensions install alvarobartt/hf-mem)examplesFctxr*   z:GitHub extension repository in `[OWNER/]hf-<name>` format.forcez--forcezOverwrite if already installed.r4   c                 V   t        |      \  }}}| j                         }t        t        |j                  di       j                               }||v rt        d| d| d      t        |      }|j                         r|st        d| d      t        ||      \  }	}
|j                         rt        j                  |       t        ||||	|
      }|j                  j                         }t        j                   | d	| d
| d|        t        j"                  d|        y)zInstall an extension from a public GitHub repository.

    Security warning: this installs a third-party executable or Python package.
    Install only from sources you trust.
    commandszCannot install extension 'z,' because it conflicts with an existing `hf z
` command.Extension 'z1' is already installed. Use --force to overwrite.r(   	repo_namer(   r]   r+   branchr1   z extension installed/hf )sourcecommandzRun it with: hf N)_normalize_repo_id	find_rootsetgetattrrc   keysr   _get_extension_direxists_fetch_github_repo_infoshutilrmtree_install_extensionr/   
capitalizer   resulthint)rW   r*   rX   r(   r]   r+   root_ctxreserved_commandsextension_dirr_   r1   manifestext_types                r%   extension_installrw   \   s6   * $6g#> E9j}}HGH$4$4j"EJJLM&&(4`ak`llvw
 	
 'z2MeZL0abcc1SFKm$!yZ\gH }}'')HJJ*())%j\"
 HH
|,-r$   update)zhf extensions updatezhf extensions update hf-claudez'hf extensions update alvarobartt/hf-memnamezExtension to update (with or without `hf-` prefix, optionally as `OWNER/hf-<name>`). If omitted, all installed extensions are checked and the outdated ones are updated.c                 j   | t        |       }t        |      }|xt        j                  k(  r. t	        j
                  d|j                  |j                         yxt        j                  k(  r1 t	        j
                  d|j                   d|j                         yt        j                  k(  r	 yyt               }|s+t	        j                  d       t	        j                  d       yg }g }|D ]  }t	        j                  d	|j                   d
|j                   d       	 t        |      }|xt        j                  k(  r |j                  |j                         pxt        j                  k(  r |j                  |j                         t        j                  k(  s t	        j
                  d|rdj!                  |      nd|rdj!                  |             yd       y# t        $ r>}t	        j                  d|j                   d
|j                   d| d       Y d}~<d}~ww xY w)z6Update installed extension(s) to their latest version.NzExtension updated)ry   rb   r[   z' is already up to datery   zNo extensions installed.z1Install one with: hf extensions install <repo_id>z
Checking '' (z)...zCould not update '): . Skipping.zExtensions update completez, )r   r   )$_load_installed_extension_for_update_update_installed_extensionr   r    r   rp   r+   r*   r!   r"   _list_installed_extensionswarningrq   log	Exceptionappendjoin)ry   ru   update_status	manifestsr   r   errors          r%   extension_updater      s   ( 7=3H=/'//

.X5H5HQYQaQab
 		 3'22

[)<)<(==TU\d\o\op 	 (//*,I./DEGJ *X001X5E5E4FdKL	7AM
 /'//x2232'22!!("5"56'// JJ$&-		'"4,6499Z( =A  	KK,X-@-@,AXEUEUDVVYZ_Y``klm	s   %G++	H243H--H2execT)allow_extra_argsallow_interspersed_argsignore_unknown_optionsz#hf extensions exec claude -- --helpz/hf extensions exec claude --model zai-org/GLM-5)context_settingsrV   z.Extension name (with or without `hf-` prefix).c                     t        |      }t        |      }|j                         st        d| d      t	        |t        | j                              }t        j                  j                  |      )zExecute an installed extension.r[   ' is not installed.r,   args)code)
_normalize_extension_name"_resolve_installed_executable_pathr7   r   _execute_extension_binarylistr   click
exceptionsExit)rW   ry   r+   r,   	exit_codes        r%   extension_execr      sl      +40J8DO""$ZL0CDEE)/PTUXU]U]P^_I




Y

//r$   z	list | lszhf extensions listc            	      "   t               D  cg c]`  } d| j                   t        | j                        t        | j                        | j
                  j                  d      | j                  db }} t        j                  |d       yc c} w )z"List installed extension commands.ra   z%Y-%m-%d)rc   rb   r/   	installedr1   rc   id_keyN)
r   r+   rR   r*   r/   r0   strftimer1   r   table)ru   rowss     r%   extension_listr      s     34	  X0012(**+&!..77
C#//	
	D 	 IId9%	s   A%Bsearchzhf extensions searchc            	         t        ddt         dddd      } | j                         }t               D ch c]  }|j                   }}g }|j                  dg       D ]Y  }|d	   j                  d
      }|j                  ||d   |j                  dd      |j                  d      xs d||v rdndd       [ t        j                  |d       yc c}w )zISearch extensions available on GitHub (tagged with 'hf-extension' topic).z*https://api.github.com/search/repositoriesztopic:starsdescd   )qsortorderper_page)paramsr;   ry   hf-	full_namestargazers_countr   r1    yes)ry   r)   r   r1   r   r)   r   N)
_github_get_EXTENSIONS_GITHUB_TOPICr8   r   r+   getremoveprefixr   r   r   )responser@   mr   r   r)   r+   s          r%   extension_searchr      s     4678'TZhklH ==?D'A'CD!DIDD"% 

&\..u5
"[)"4a8#xx6<"&0I&=U2	


 IId6" Es   Czremove | rmzhf extensions remove claudez8Extension name to remove (with or without `hf-` prefix).c                     t        |       }t        |      }|j                         st        d| d      t	        j
                  |       t        j                  d|       y)zRemove an installed extension.r[   r   zExtension removedr{   N)r   ri   is_dirr   rl   rm   r   rp   )ry   r+   rt   s      r%   extension_remover     sT     +40J&z2M!ZL0CDEE
MM- JJ"4r$   c                     t         j                         } | j                         sg S g }t        | j	                               D ]S  }|j                         r|j
                  j                  d      s/	 |j                  t        j                  |             U |S # t        $ r/}t        j                  d|j
                   d|        Y d}~d}~ww xY w)zPReturn manifests for all validly-installed extensions, sorted by directory name.r   z'Failed to load manifest for extension '': N)EXTENSIONS_ROOT
expanduserr   sortediterdirry   
startswithr   r'   rC   r   loggerdebug)root_dirr   rt   es       r%   r   r   %  s    ))+H??	I 0 0 23 ##%]-?-?-J-J5-Q	.33MBC	   	LLB=CUCUBVVYZ[Y\]^	s   2$B	C#%CCc                      g } t               D ]N  }d|j                   d}|j                  |j                   d| n|}| j                  |j                  |f       P | S )Nz[extension ] )r   r*   r1   r   r+   )entriesru   tag	help_texts       r%   "list_installed_extensions_for_helpr   6  sq    G.0 9H,,-Q/7?7K7K7Wx++,AcU3]`	++Y789 Nr$   r   known_commandsc                    | sy | d   }|j                  d      ry |D ch c](  }|j                  d      D ]  }|j                          * }}}||v ry 	 t        |j	                  d      |      }	 t        |      }||j                         sy t        |t        | dd              S c c}}w # t
        $ r Y y w xY w# t        $ r t        |      }Y Ww xY w)Nr   -|r   original_inputr   r   )r   splitstrip_validate_extension_short_namer   r   r   r    _auto_install_official_extensionr7   r   r   )r   r   command_namecmda	all_knownr+   r,   s           r%   $dispatch_unknown_top_level_extensionr   ?  s    7Ls#&4MsciinMMMIMy 3L4M4Me4Teqr

G<ZH o&=&=&?$_4PTUVUWPX>ZZ% N    G::FGs)   -B*B0 3B? 0	B<;B<?CCr+   c           	      p   t         d|  }}t        |       j                         ry	 t        ||      \  }}	 t        j                  d|  d| d| d       	 t        ||| ||      }t        |j                        j                         S # t        $ r Y yw xY w# t        $ r Y yw xY w# t        $ r Y yw xY w)	zKTry to auto-install huggingface/hf-<name>. Returns executable path or None.r   Nr\   'z)' is an official Hugging Face extension (r`   z). Install it?r^   )DEFAULT_EXTENSION_OWNERri   rj   rk   r   r   confirmr   rn   r   r,   r   )r+   r(   r]   r_   r1   ru   s         r%   r   r   [  s    .#j\0B9E*%,,.5EYWa
|#LUGSTU^T__mno%9F`k
 H,,-88::  
    s4   B B 2B) 	BB	B&%B&)	B54B5c                     t        |       }t        |      }|j                         sB| j                         j	                  d      \  }}}|r| d| nd| }t        d| d|       t        j                  |      S )Nr`   z/hf-r   r[   zA' is not installed. Install it first with: hf extensions install )r   ri   r   r   
rpartitionr   r'   rC   )ry   r+   rt   r(   _install_targets         r%   r   r   s  s    *40J&z2M!jjl--c2q!7<E7$zl3C
|BT*%fgufvw
 	
 !!-00r$   ru   c                    | j                   | j                  | j                  }}}	 t        ||      \  }}t        |||d      }|/t        j                  d| d| d| d	       t        j                  S || j                  k(  rt        j                  S t        ||||||
       t        j                  S # t        $ r<}t        j                  d| d| d| d| d	       t        j                  cY d }~S d }~ww xY w)Nr\   zCould not check updates for 'r|   r`   r}   r~   F)r(   r]   r_   warnz#): GitHub is unreachable. Skipping.)r(   r]   r+   r_   r1   r2   )r(   r)   r+   rk   r   r   r   r   r"   _fetch_latest_commit_shar2   r!   rn   r    )ru   r(   r]   r+   r_   r1   r   
latest_shas           r%   r   r     s   #+>>8==(BUBUj9E.5EYW
 *SY`efJ+J<s5'9+Mpq	
 &---X(((%000 ")))-  .3J<s5'9+UXY^X__jkl%---.s   B6 6	C;?1C60C;6C;)r1   r2   r(   r]   r_   r1   r2   c                 ^   t        |      }|j                          }d}	 	 t        | |||      }	|	t	        |||	      }
nt        || |||      }
t        | ||  d| |t        |
      |	dndt        j                  t        j                        t        | |||	      |xs t        | ||
      	      }|j                  |       d}||s|rt        j                   |d       S S S # t        $ r d}	Y w xY w# t"        $ r  t$        j&                  $ r}t)        dt*         d|  d| d      |d}~wt$        j,                  $ r%}t)        d|  d| d|j.                   d      |d}~wt        $ r}t)        d|  d| d|       |d}~ww xY w# |s|rt        j                   |d       w w w xY w)a  Fetch and install an extension (binary or Python package), then persist its manifest.

    Installs in place: an existing install is overwritten without being removed first, so a failed
    update keeps the previous version working. A failed fresh install is cleaned up entirely.
    F)r(   r]   r_   r+   N)rt   r+   r-   )rt   r(   r]   r+   r_   r`   r-   r.   )r(   r]   r_   candidate_description)r(   r]   r_   )	r(   r)   r*   r+   r,   r/   r0   r1   r2   T)ignore_errorszPip install timed out after zs for 'z$'. See pip output above for details.z$Failed to install pip package from 'z' (exit code z$). See pip output above for details.z"Failed to install extension from 'r   )ri   rj   _fetch_remote_binaryr   _install_binary_extension_install_python_extensionr'   rR   r   nowr   utc_try_fetch_remote_descriptionr   rQ   rl   rm   r   
subprocessTimeoutExpiredr   _EXTENSIONS_PIP_INSTALL_TIMEOUTCalledProcessError
returncode)r(   r]   r+   r_   r1   r2   rt   fresh_installr   r-   r,   ru   r   s                r%   rn   rn     s    'z2M%,,..MI/=	)SYfpqF 7+
6O 8+5IZdmsO %gQyk*!0#/X!hll35yWb "n%=EU^gm%n
 	m$	  ]MM-t< +yW  	F	8  $$ &*+J*K7SXRYYZ[dZe f0 0
 	 (( &25'9+]STS_S_R` a0 0
 	  n&)KE7RST]S^^abcad'eflmmn ]MM-t< +ysY   C' BC8 'C52C8 4C55C8 8F
D..F
 E$$F
0FF

F F,)r   r   c                     	 t        d|  d| d| ddi      }|j                  j                         xs dS # t        $ r-}|r!t	        j
                  d| d	|  d| d
|        Y d}~yd}~ww xY w)zZBest-effort fetch of the latest commit SHA for a branch, used to detect available updates.https://api.github.com/repos/r`   z	/commits/Acceptzapplication/vnd.github.sha)headersNz'Could not fetch latest commit SHA for 'r|   r}   )r   textr   r   r   r   )r(   r]   r_   r   r   r   s         r%   r   r     s    	+E7!I;ixP;<
 }}""$,, KKA)CPUwVWXaWbbefkelmns   58 	A.#A))A.c                 b    t        |      }d|  d| d| d| }t        |      }|j                  S )N"https://raw.githubusercontent.com/r`   /refs/heads/)_get_executable_namer   content)r(   r]   r_   r+   executable_nameraw_urlr   s          r%   r   r     sE    *:6O25'9+\RXQYYZ[jZklG7#Hr$   rt   r-   c                     | j                  dd       | t        |      z  }|j                  |       t        j                  dk7  rt        j
                  |d       |S )NTrE   nti  )rL   r  write_bytesosry   chmod)rt   r+   r-   r,   s       r%   r   r     sR    t4#&::&FFO'	ww$
%(r$   c           	      f   d| d| d| d}| dz  }t        |t        j                  dk(  rdnd      }t        j                  d	      }t        j                         }	|j                         s|	j                  d
|        | j                  dd       |r$t        j                  |dt        |      gd       n.t        j                  d      j                  t        |             |	j!                  d|        |	j                  d|        |r|ddddt        |      |g}
nt        |      dddddd|g}
t        j                  |
dt"               |	j!                  d|        t%        |      }t        ||      }|j                         st'        d| d| d| d      |j)                         S )Nzhttps://github.com/r`   z/archive/refs/heads/z.zipvenvr  z
python.exer.   uvz Creating virtual environment in TrE   )check)with_pipzVirtual environment created in zInstalling package from piprU   z--reinstallz--pythonz-mz--disable-pip-version-checkz
--no-inputz--force-reinstall)r  timeoutzPackage installed from zInstalled package from 'z/' does not expose the required console script ''.)_get_venv_bin_pathr
  ry   rl   whichr   statusr7   rx   rL   r   runrR   r  
EnvBuildercreatedoner   r  r   resolve)rt   r(   r]   r+   r_   
source_urlvenv_dirvenv_pythonuv_pathr  install_cmdr  venv_executables                r%   r   r      s    'ugQyk9MfXUYZJv%H$Xrww$|T\]Kll4 GZZ\F 8
CDD48NNGVS];4HOOT*11#h-@5hZ@A
MM,ZL9:y-SQ\M]_ij )	
 NN;d4ST
KK)*67*:6O(?CO""$&ugQyk : $
 	
 ""$$r$   r   c                    d|  d| d| }	 t        | dt               }|j                         j                  d      }t	        |t
              r|S 	 	 t        | d      }|j                  j                         D ]Y  }|j                         }|j                  d      s%|j                  d      \  }}}	|	j                         j                  d      c S  	 |S # t        $ r Y w xY w# t        $ r Y |S w xY w)zTry to fetch project description either from:
    - manifest.json
    - pyproject.toml

    Only best effort, no error handling.
    r  r`   r  r1   z/pyproject.toml=z"')r   r6   r8   r   
isinstancerR   r   r   
splitlinesr   r   	partition)
r(   r]   r_   r   baser   r1   liner   rB   s
             r%   r   r   .  s    0wa	{,vhWD$q):(;<=mmo))-8k3' (
$78 MM,,. 	2D::<D}-"nnS11e{{}**511		2 ! #     ! 	s1   AC AC* !5C* C* 	C'&C'*	C76C7c                 P    t        | |        t        j                         d|  z  S )Nr   r   )r   r   r   )r+   s    r%   ri   ri   S  s)     #:jI%%'C
|*<<<r$   )r   r   urlr   r   c                j    t               j                  | ||dt              }|j                          |S )zPerform a GitHub GET request.

    Shared by every GitHub/Raw fetch in this module so the timeout and redirect policy are shared.
    T)r   r   follow_redirectsr  )r   r   _EXTENSIONS_DOWNLOAD_TIMEOUTraise_for_status)r*  r   r   r   s       r%   r   r   Z  s=    
 }  , ! H Or$   c                 p    t        d|  d|       }|j                         }|d   |j                  d      fS )zZFetch `default_branch` + `description` for a GitHub repo from `GET /repos/{owner}/{repo}`.r   r`   default_branchr1   )r   r8   r   )r(   r]   r   r@   s       r%   rk   rk   j  s?    :5'9+NOH==?D !488M#:::r$   c                 @    d|  }t         j                  dk(  r|dz  }|S )Nr   r  z.exer
  ry   )r+   ry   s     r%   r  r  q  s'    D	ww$Kr$   c                     t        |       }t        j                  |      }t        |j                        j                         S N)ri   r'   rC   r   r,   r   )r+   rt   ru   s      r%   r   r   x  s6    &z2M %%m4H(()4466r$   r  r  c                 H    t         j                  dk(  r| dz  |z  S | dz  |z  S )Nr  Scriptsbinr2  )r  r  s     r%   r  r  ~  s-    	ww$)#o55eo--r$   z^[A-Za-z0-9][A-Za-z0-9._-]*$r   c                    | j                         st        d      t        fddD              rt        d| d      dv sdv rt        d| d      t        j	                        st        d| d      S )	NzExtension name cannot be empty.c              3   &   K   | ]  }|v  
 y wr4  r#   ).0sepry   s     r%   	<genexpr>z1_validate_extension_short_name.<locals>.<genexpr>  s     
.33$;
.s   )r`   \zInvalid extension name 'r  z..:z9'. Allowed characters: letters, digits, '.', '_' and '-'.)r   r   any_ALLOWED_EXTENSION_NAME	fullmatch)r+   r   ry   s     @r%   r   r     s    D899

.+
..1.1ADEEt|sd{1.1ADEE",,T2&~&66op
 	
 Kr$   c                 r   d| v rt        d      | j                  d      }t        |      dk(  rt        }|d   }n.t        |      dk(  rt	        |      r|\  }}nt        d|  d      |j                  d	      st        d
| d      |j                  d	      }|st        d      t        ||        |||fS )Nz://zEOnly GitHub repositories in `[OWNER/]hf-<name>` format are supported.r`   r   r   rH   z%Expected `[OWNER/]REPO` format, got 'r  r   z6Extension repository name must start with 'hf-', got 'z(Invalid extension repository name 'hf-'.r   )r   r   lenr   allr   r   r   )r*   partsr(   r]   r+   s        r%   rd   rd     s    ^__MM#E
5zQ'!H		UqSZ y>wirJKK&OPY{Z\]^^''.JABB":gF)Z''r$   c                     | j                         j                  dd      d   }t        |j                  d      |       S )Nr`   r   r   r   )r   rsplitr   r   )ry   r]   s     r%   r   r     s8    

##C+B/I))*@*@*GX\]]r$   r,   c                    	 t        j                  t        |       g|z         S # t        $ r^}t        j
                  dk(  s|j                  t        j                  k7  r t        j                  dt        |       g|z         cY d }~S d }~ww xY w)Nr  sh)r   callrR   OSErrorr
  ry   errnoENOEXEC)r,   r   r   s      r%   r   r     sq    DO 45<== D77d?agg6c/&:;dBCCDs   !$ 	BAB BB)Fr4  )r4   N)X__doc__rM  r8   r
  rerl   r   r  dataclassesr   r   r   r   enumr   pathlibr   typingr	   r
   r   huggingface_hub.errorsr   r   r   huggingface_hub.utilsr   r   
_cli_utilsr   
_frameworkr   r   _outputr   r   r   r6   EXTENSIONS_HELPextensions_clir   r-  r   
get_loggerr   r   rR   r   r'   rc   Contextboolrw   r   r   r   r   r   r   r   tupler   rf   intr   r   r   r   rn   r   bytesr   r   r   r   ri   dictr   rk   r  r   r  compiler@  r   rd   r   r   r#   r$   r%   <module>rd     s   7   	 	    ) '   %  X X 6 % (  ( 56# + 
 O4) ! "% 			H	%S$  M M M<    Y^&.	&.RS	U&. T6)2STTU&. 
&.&.R   " 	3
d
f	
	3 
33l 
*.5lpq-9  0	0
FG	I0 
00$ /C.DE& F& ,B+CD# E#4 1N0OP5
PQ	S5
 
5 Q5(D):$; "DsCx,A [tCy [#c( [WZ]aWa [8  0	1s 	17H 	1**; *@V *H #!@=@= @= 	@=
 @= t@= d
@= @=F W[ s s C t _bei_i 3 3  QT Y^  # u Y] +%+%#&+%36+%DG+%QT+%	+%\"!"!"!(+"!DG$J"!4Z"!J=3 =4 = 48PT S TD[ $+  ;c ;c ;eCtO>T ;S S 73 74 7. . . . %"**%DE s s s ( (c3m(< (0^C ^C ^
Dt D49 D Dr$   