
    h<]                     f   S SK r S SKrS SKrS SKrS SKrS SKJr  S SKJr  S SK	J
r
JrJrJrJrJrJr  S SKrS SKJr  S SKJr  S SKJrJrJr  SS	KJrJr  SS
KJr  SSKJ r J!r!  SSK"J#r#J$r$J%r%J&r&J'r'J(r(  \'RR                  " S5      \%" SSSSS9\%" SSSSS9\&" SSSSS9\&" SSSSSSSS9\&" SSS S!S9\&" SS"S#S$S9\&" SS%S&S'S9\&" S(S)S*S+S9\&" SS,S-S.S/S9\&" SS0S1S1S2S94
S3\S4\S5\*S6\\   S7\+S8\\*   S9\\*   S:\*S;\+S<\+4S= jj5       r,S/ SSSSSSSS4
S3\S4\S6\\   S5\\   S8\\*   S9\\*   S7\+S>\+S?\+S<\+S;\+S@\+SAS4SB jjr-SA\+4SC jr.SA\+4SD jr/\R`                  " 5       4SE\SF\\*   SA\\*   4SG jjr1SH\\*   SA\\+\+4   4SI jr2SJ\SK\*SAS4SL jr3 S_SM\\*\4   SN\\*\
4   S<\+SA\\*\
4   4SO jjr4SN\\*\
4   SP\SA\\*\
4   4SQ jr5SR\\*\
4   SA\*4SS jr6ST\
SA\*4SU jr7SV/4ST\\*\
4   SF\\*   SA\*4SW jjr8ST\\*\
4   SA\*4SX jr9SY\*SA\+4SZ jr:S[Rw                  5       r<S\R{                  5       r>S]Rw                  5       r?/ S^Qr@g)`    N)defaultdict)Path)AnyDictListOptionalTupleUnioncast)RegistryError)Config)MarkdownRendererPrinterget_raw_input   )aboututil)importlib_metadata)ModelMetaSchemavalidate   )SDIST_SUFFIXWHEEL_SUFFIXArgOptappstring_to_listpackage.zDirectory with pipeline dataTF)helpexists	file_okayzOutput parent directory z--codez-cznComma-separated paths to Python file with additional code (registered functions) to be included in the package)r   z--meta-pathz--meta-mzPath to meta.json)r   r    dir_okayz--create-metaz-Cz$Create meta.json, even if one existsz--namez-nzPackage name to override metaz	--versionz-vz Package version to override metasdistz--buildz-bz>Comma-separated formats to build: sdist and/or wheel, or none.z--forcez-fz-Fz3Force overwriting existing data in output directoryz$--require-parent/--no-require-parentz-Rz;Include the parent package (e.g. spacy) in the requirements	input_dir
output_dir
code_paths	meta_pathcreate_metanameversionbuildforcerequire_parentc
                     [        [        U5      5      u  p[        U5       Vs/ s H  n[        UR                  5       5      PM     nn[	        U UUUUUUU
UUU	SS9  gs  snf )a  
Generate an installable Python package for a pipeline. Includes binary data,
meta and required installation files. A new directory will be created in the
specified output directory, and the data will be copied over. If
--create-meta is set and a meta.json already exists in the output directory,
the existing values will be used as the defaults in the command-line prompt.
After packaging, "python -m build --sdist" is run in the package directory,
which will create a .tar.gz archive that can be installed via "pip install".

If additional code files are provided (e.g. Python files containing custom
registered functions like pipeline components), they are copied into the
package and imported in the __init__.py.

DOCS: https://spacy.io/api/cli#package
F)
r)   r(   r+   r,   r*   create_sdistcreate_wheelr.   r/   silentN)get_build_formatsr   r   stripr   )r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r1   r2   ps                K/home/james-whalen/.local/lib/python3.13/site-packages/spacy/cli/package.pypackage_clir8      sm    < "3>%3H!IL+9*+EF+Ea$qwwy/+EJF!!% Gs   #Ar1   r2   r3   returnc                    [        X(       + S9n[        R                  " U 5      n[        R                  " U5      n[        R                  " U5      nU(       a1  [        5       (       d"  [	        5       (       d  SnUR                  USSS9  [	        5       (       d  UR                  S5        U(       a  UR                  5       (       d  UR                  SUSS9  U(       a  UR                  5       (       d  UR                  SUSS9  U(       d  U(       a@  U(       a  S	OS
U(       a  SOS
/nUR                  SSR                  S U 5       5       35        U HJ  nUR                  5       (       d  UR                  SUSS9  [        R                  " UR                  U5        ML     U(       a  UR                  S[        U5       S35        U(       a&  UR                  5       (       d  UR                  SUSS9  U=(       d    U S-  nUR                  5       (       a  UR                  5       (       d  UR                  SUSS9  [        R                   " U5      n[#        U UU	S9nUS   (       a4  UR                  S[        US   5       S3SR                  US   5      5        UbT  UR%                  5       (       d  UR                  SU S3SSS9  ['        U5      (       d  UR                  SU S3SSS9  UUS'   Ub  UUS'   U(       d  UR                  SU5        O[)        UU5      n[+        [,        U5      nU(       aA  UR                  S 5        [/        S!R                  U5      5        [0        R2                  " S5        US   nUR5                  US"   S#-   5      (       d
  US"    S#U 3nUS$-   US   -   nUU-  nUU-  nUR                  5       (       a8  U
(       a   [6        R8                  " [;        U5      5        OUR                  S%S&SS9  [<        R>                  " US'S(9  [6        R@                  " [;        U 5      [;        UU-  5      5        [B         HK  nUU-  U-  nUR                  5       (       d  M"  [6        RD                  " [;        U5      [;        U5      5        MM     US)-  nUR                  5       (       d;  [G        U5      n[I        UU5        [I        UU-  S)-  U5        UR                  S*5        OUR                  S+5        / nU HG  nURK                  UR                  5        [6        RD                  " [;        U5      [;        U5      5        MI     [I        US-  [        RL                  " US,S-95        [I        US.-  [N        5        [I        US/-  [P        5        [R        RU                  S!R                  S0 U 5       5      S19n[I        US2-  U5        UR                  S3U S43U5        U(       a  [        RV                  " U5         [X        RZ                  " [0        R\                  S5S6S7S8/[^        R`                  RE                  5       S99nURb                  S::w  a7  UR                  S;5        [        Rd                  " [0        R\                  S.S	/S<S=9  S S S 5        US>-  U [f         3-  nUR                  S?U5        U(       a  [        RV                  " U5         [X        RZ                  " [0        R\                  S5S6S7S@/[^        R`                  RE                  5       S99nURb                  S::w  a7  UR                  SA5        [        Rd                  " [0        R\                  S.SB/S<S=9  S S S 5        [h        Rj                  " SCS#U5      n US>-  U  [l         3-  n!UR                  SDU!5        SEU;   a  UR                  SU SF35        g g ! , (       d  f       GN9= f! , (       d  f       Nw= f)GN)no_printprettyzJGenerating wheels requires 'build' or 'wheel' (deprecated) to be installedzpip install buildr   exitszGenerating packages without the 'build' package is deprecated and will not be supported in the future. To install 'build': pip install buildzCan't locate pipeline datazOutput directory not foundr%   r"   wheelzBuilding package artifacts: , c              3   6   #    U  H  o(       d  M  Uv   M     g 7f)N ).0opts     r7   	<genexpr>package.<locals>.<genexpr>h   s     9U#QT##s   
	zCan't find code filez
Including z" Python module(s) with custom codezCan't find pipeline meta.jsonz	meta.jsonzCan't load pipeline meta.json)r/   requirementsz, package requirement(s) from meta and configzModel name ('zR') is not a valid module name. This is required so it can be imported as a module.zWe recommend names that use ASCII A-Z, a-z, _ (underscore), and 0-9. For specific details see: https://docs.python.org/3/reference/lexical_analysis.html#identifiersza') is not a permitted package name. This is required to correctly load the model with spacy.load.zWe recommend names that use ASCII A-Z, a-z, _ (underscore), and 0-9. For specific details see: https://www.python.org/dev/peps/pep-0426/#namer+   r,   zLoaded meta.json from filezInvalid pipeline meta.json
lang_-z Package directory already existszgPlease delete the directory and try again, or use the `--force` flag to overwrite existing directories.T)parents	README.mdz"Generated README.md from meta.jsonz0Using existing README.md from pipeline directoryr   )indentzsetup.pyzMANIFEST.inc              3   ,   #    U  H
  nS U 3v   M     g7f)zfrom . import NrB   )rC   ms     r7   rE   rF      s     @1N1#.s   )importsz__init__.pyz(Successfully created package directory ''r#   r-   .z--sdist)envr   zgCreating sdist with 'python -m build' failed. Falling back to deprecated use of 'python setup.py sdist'F)capturedistz*Successfully created zipped Python packagez--wheelzzCreating wheel with 'python -m build' failed. Falling back to deprecated use of 'wheel' with 'python setup.py bdist_wheel'bdist_wheelz_+z!Successfully created binary wheel__ze') contains a run of underscores. Runs of underscores are not significant in installed package names.)7r   r   ensure_path	has_wheel	has_buildfailwarnr    infojoinimport_filestemgoodlenis_filesrsly	read_jsonget_metaisidentifier_is_permitted_package_namegenerate_metar   r   printsysexit
startswithshutilrmtreestrr   mkdircopytreeFILENAMES_DOCScopygenerate_readmecreate_fileappend
json_dumpsTEMPLATE_SETUPTEMPLATE_MANIFESTTEMPLATE_INITformatworking_dir
subprocessrun
executableosenviron
returncoderun_commandr   resubr   )"r&   r'   r)   r(   r+   r,   r*   r1   r2   r/   r.   r3   msg
input_pathoutput_patherropts	code_pathmetaerrors
model_namemodel_name_v	main_pathpackage_path	file_name	file_pathreadme_pathreadmerQ   init_pyretzip_filewheel_name_squashedr?   s"                                     r7   r   r   E   s    6*
5C!!),J"":.K  +IIKK	X 	 	)3;;	

 Z..00-zCk0022-{!D|'RLbQ/		9U9U0U/VWX	!!HH+YaH@ 	3   :c*o..PQR))++0)1E4Y4IY%6%6%8%80)1E??9%DItNCDNT.123 4 IId>*+	

   ""HHv &F Fr    *$//HHv &P P[    V!Y-y9T3'ot,F-.dii fJ  f!344V~Qzl3
#d9o5L\)Iz)LMM#l+,HH2D	   	JJ|T*
OOC	NC|(C$DE#	 </);	KKII7 $ k)K &K(L</+=vF56CDG	y~~&C	NC$56   	K')9)9$q)IJ	J&7	M)+<=""		@@@ # G },g6HH7~QGSi( ..wY?JJOO%C ~~"H   #..*g!FPUV ) v%<.(GG=Ii( ..wY?JJOO%C ~~"4
   ^^Z? )  !ffT3=F"(;'<\N%KK4u=zJ< (R R	
 G )(  )(s   B_B_
_
_!c                  .     SS K n g! [         a     gf = f)Nr   TF)r?   ImportError)r?   s    r7   rZ   rZ      s     s    
c                  f     [         R                  " S5        g! [         R                   a     gf = f)Nr-   TF)r   r,   PackageNotFoundErrorrB       r7   r[   r[      s0    ""7+22 s    00configexcludec                    Sn[         R                  " 5       n[        [        5      nS HX  n[         R                  " X   5       H9  u  pgUS   R                  S5      (       d  M   XFS   SS    R                  U5        M;     MZ     U R                  S0 5      R                  5        H"  nSU;   d  M  US	   R                  US   5        M$     [        5       n	U S
   S   n
UR                  5        Ht  u  pU Hi  n [         R                  R                  XS-   U-   5      nUR                  S5      nU(       d  MC  U	R                  US   R                  S5      S   5        Mk     Mv     / nU	 H  nU[        R                  :X  a  M  UU;   d  M!  UR                  U5      nU(       d  M;  US   nUU;   d  UU;   a  MN  [         R                   " U5      n[         R"                  " U5      nUR%                  U U 35        M     U$ ! [         a9     [         R                  R                  X5      n GN! [         a  nUSeSnAff = ff = f)a  If the config includes references to registered functions that are
provided by third-party packages (spacy-transformers, other libraries), we
want to include them in meta["requirements"] so that the package specifies
them as dependencies and the user won't have to do it manually.

We do this by:
- traversing the config to check for registered function (@ keys)
- looking up the functions and getting their module
- looking up the module version and generating an appropriate version range

config (Config): The pipeline config.
exclude (list): List of packages to exclude (e.g. that already exist in meta).
RETURNS (list): The versioned requirements.
)spacyzspacy-legacyzspacy-nightlythincre   )nlp
components@r   Nr   factory	factoriesr   rI   rS   moduler   )r   packages_distributionsr   set	walk_dictrn   addgetvaluesitemsregistryfindr   splitr   	__title__get_package_versionget_minor_version_rangerx   )r   r   own_packagesdistributionsfuncssectionpathvalue	componentmodulesrI   reg_name
func_names	func_name	func_inforegerrmodule_namedependenciesrV   pkgr,   version_ranges                         r7   get_third_party_dependenciesr     s   " PL//1ME(>>&/:KDBx""3''2hqrl#''. ; ) ZZb188:		!+""9Y#78 ; eG%= D %#I+ MM..xi9OP	 $--1K{Ih/55c:1=> $ !. L%//)-' $$[1Dt1g,&#.2237 $ < <W E##seM?$;<  - ! ++ $ 2 28 GI$ + d*++s*   8%G>>
I	H++
H=	5H8	8H=	=Iformatsc                     / SQnU  H;  nX!;  d  M
  [        5       nSU SSR                  U5       3nUR                  USS9  M=     U (       a  SU ;   a  gS	U ;   S
U ;   4$ )N)r%   r?   nonezUnknown build format: z. Supported: r@   r   r=   r   )FFr%   r?   )r   r_   r\   )r   	supportedformr   r   s        r7   r4   r4   C  sn    *I )C*4&dii	>R=STCHHSH"	 
 f'w7 233r   r   contentsc                 b    U R                  5         U R                  SSS9R                  U5        g )Nwzutf-8)encoding)touchopenwrite)r   r   s     r7   rw   rw   O  s'    OONN3N)//9r   
model_pathexisting_metac           	         SSSSSSSSS.n[         R                  " [        U 5      5      nUR                  UR                  5        [         R
                  " [        R                  5      US'   UR                  U5        UR                  R                  [        UR                  R                  5      UR                  R                  R                  UR                  R                  R                  S.US	'   [        R                  S
:w  a  [        R                  US'   UR                  S/ 5        US    Vs/ s H  n[         R                   " U5      S   PM     nn[#        UR$                  US9nUS   R'                  U5        U(       a?  [        R                  US   ;  a(  US   R)                  [        R                  US   -   5        U$ s  snf )Nenpipeline0.0.0r"   MIT)rI   r+   r,   descriptionauthoremailurllicensespacy_version)widthvectorskeysr+   r   r   parent_packagerG   r   )r   )r   load_model_from_pathr   updater   r   r   __version__vocabvectors_lengthrc   r   n_keysr+   r   
setdefaultsplit_requirementr   r   extendrx   )r   r   r/   r   r   reqexisting_reqsreqss           r7   rg   rg   T  sy    	D 
#
#D$4
5CKK 889J9JKDKK))syy(()		!!((		!!&&	DO '!!&OONB'?CN?ST?ST++C03?SMT'

MJD%%//n1EE^##EOOd?6K$KLK Us   5#G
r   c                    U =(       d    0 nSSUR                  SS5      4SSUR                  SS5      4SSUR                  SS	5      4S
SUR                  S
S 5      4SSUR                  SS 5      4SSUR                  SS 5      4SSUR                  SS 5      4SSUR                  SS5      4/nUR                  S5        UR                  S5        U H$  u  pEn[        XV5      nUS:X  a	  U(       a  UOUX$'   M&     U$ )NrI   zPipeline languager   r+   zPipeline namer   r,   zPackage versionr   r   zPackage descriptionr   Authorr   zAuthor emailr   zAuthor websiter   Licenser   zGenerating meta.jsonzEnter the package settings for your pipeline. The following information will be read from your pipeline data: pipeline, vectors.r"   )r   dividertextr   )r   r   r   settingssettingdescdefaultresponses           r7   rj   rj   y  s   BD	$dhhvt&<=	$((6:">?	%txx	7'CD	-txxt/LM	8TXXh56	.$((7D"9:	 $((5$"78	Itxx	59:	H KK&'HH	C #+w /#+r>g8 #+ Kr   r   c                 P   [        5       nU S   nU SU S    3nU S   nSR                  U R                  S/ 5       Vs/ s H  oQR                  U5      PM     sn5      nSR                  U R                  S/ 5       Vs/ s H  oQR                  U5      PM     sn5      nU R                  S0 5      nUR                  S	S
5       SUR                  SS
5       SUR                  SS
5       S3n	U R                  S5      =(       d    Sn
U R                  SS5      nU R                  S5      n[	        U R                  S5      5      nU R                  S5      n[        [        [        [        [        4   U R                  S5      5      5      n[        [        [        [        [        4   U R                  S5      5      5      nUR                  S5      UR                  U5      4UR                  S5      UR                  U5      4UR                  S5      UR                  U S   5      4UR                  S5      U4UR                  S5      U4UR                  S5      U	4UR                  S5      U=(       d    S4UR                  S 5      U(       a  UR                  U5      OS4UR                  S!5      S"U ;   a  UR                  XS"   5      OU
4/	nU(       a  UR                  U5        UR                  UR                  US#S$/5      5        U(       a2  UR                  UR                  S%S&5      5        UR                  U5        U(       a2  UR                  UR                  S%S'5      5        UR                  U5        U(       a  UR                  U5        UR                   $ s  snf s  snf )(z
Generate a Markdown-formatted README text from a model meta.json. Used
within the GitHub release notes and as content for README.md file added
to model packages.
rI   rJ   r+   r,   r@   r   r   r   r   r   z keys, z unique vectors (r   z dimensions)r   n/anotesr"   r   sourcesr   labelsperformanceNameVersionspaCyr   zDefault Pipeline
ComponentsVectorsSourcesr   r   r   FeatureDescription   zLabel SchemeAccuracy)r   r_   r   code_format_sources_format_label_schemer   r   rq   r   _format_accuracyboldlinkr   tabletitler   )r   mdrI   r+   r,   r6   r   r   vecsr   r   r  license_namer  r   label_schemeaccuracy
table_datas                     r7   rv   rv     s    
	B<DV1T&\N#D9oGyydhhz2.FG.F''!*.FGHHr0JK0J1GGAJ0JKLJ88Ir"D&!$%WTXXi-C,DDUW[W_W_`gijWkUllxyGXXh(5FHHWb!E88I&Ldhhy12G((=)K'T#s(^TXXh=O(PQLT#s(^TXXm5L MNH	"''$-(		RWWW-.		2774#89:	#	$h/		
+		W%		W-.		lRWW\2N		ETMBGGFK8vV
J 
{FF288JM :;<
rxx>*+
|
rxx:&'
x
u77NE HKs   N>N#datac                    U (       a  [        U [        5      (       d  g/ nU  H  n[        U[        5      (       d  SU0nUR                  S5      nU(       d  M6  UR                  S5      nUR                  S5      nU(       d  UOSR	                  X45      nU(       a  USR	                  U5      -  nUR                  U5        M     SR                  U5      $ )Nr   r+   r   r   z[{}]({})z ({})z<br>)
isinstancelistdictr   r}   rx   r_   )r  r  sourcer+   r   r   results          r7   r  r    s    z$--G&$''f%Fzz&!jjH% j&7&7&BgnnV,,Fv  ;;wr   speedc           	         U (       d  g[        5       nU R                  5        VVs/ s H%  u  p4[        U[        [        45      (       d  M"  X44PM'     nnnU VVs/ s H2  u  pgXa;  d  M  UR                  UR                  5       5      US-  S 4PM4     nnnUR                  UR                  USS/5      5        UR                  $ s  snnf s  snnf )Nr"   d   z.2fTypeScore)
r   r   r  intfloatr  upperr   r  r   )	r  r   r  kvscalarsaccscorescoress	            r7   r  r    s    		B"&**,N,$!*Qe2Mvv,GN "!JC 	3	%)C2!  
 FF288FVW-./77N Os   !CCC)*Cc                    U (       d  g[        5       nSnSn/ nU R                  5        H  u  pVU(       d  M  UR                  UR                  U5      5      nSR	                  U Vs/ s H,  oR                  [        U5      R                  SS5      5      PM.     sn5      n	UR                  Xy45        U[        U5      -  nUS-  nM     U(       d  gSU SU S	3n
UR                  S
5        UR                  SU
 S35        UR                  UR                  USS/5      5        UR                  S5        UR                  $ s  snf )Nr"   r   r@   |z\|r   zView label scheme (z labels for z components)z	<details>z	<summary>z
</summary>	ComponentLabelsz
</details>)r   r   r  r  r_   rq   replacerx   rc   r   r  r   )r  r  n_labelsn_pipes
label_datapiper  col1labelcol2
label_infos              r7   r  r    s"   		BHGJ

wwrwwt}%yyBHI&WWSZ''U34&I
 	4,'CK1 % &xjWI\RJFF;FFYzl*-.FF288Jh 789FF<77N Js   &3E 
package_namec                 V    [         R                  " SU [         R                  5      nUS L$ )Nz)^([A-Z0-9]|[A-Z0-9][A-Z0-9._-]*[A-Z0-9])$)r   search
IGNORECASE)r?  permitted_matchs     r7   ri   ri     s(    ii4lBMMO $&&r   a  
#!/usr/bin/env python
import io
import json
from os import path, walk
from shutil import copy
from setuptools import setup


def load_meta(fp):
    with io.open(fp, encoding='utf8') as f:
        return json.load(f)


def load_readme(fp):
    if path.exists(fp):
        with io.open(fp, encoding='utf8') as f:
            return f.read()
    return ""


def list_files(data_dir):
    output = []
    for root, _, filenames in walk(data_dir):
        for filename in filenames:
            if not filename.startswith('.'):
                output.append(path.join(root, filename))
    output = [path.relpath(p, path.dirname(data_dir)) for p in output]
    output.append('meta.json')
    return output


def list_requirements(meta):
    # Up to version 3.7, we included the parent package
    # in requirements by default. This behaviour is removed
    # in 3.8, with a setting to include the parent package in
    # the requirements list in the meta if desired.
    requirements = []
    if 'setup_requires' in meta:
        requirements += meta['setup_requires']
    if 'requirements' in meta:
        requirements += meta['requirements']
    return requirements


def setup_package():
    root = path.abspath(path.dirname(__file__))
    meta_path = path.join(root, 'meta.json')
    meta = load_meta(meta_path)
    readme_path = path.join(root, 'README.md')
    readme = load_readme(readme_path)
    model_name = str(meta['lang'] + '_' + meta['name'])
    model_dir = path.join(model_name, model_name + '-' + meta['version'])

    copy(meta_path, path.join(model_name))
    copy(meta_path, model_dir)

    setup(
        name=model_name,
        description=meta.get('description'),
        long_description=readme,
        author=meta.get('author'),
        author_email=meta.get('email'),
        url=meta.get('url'),
        version=meta['version'],
        license=meta.get('license'),
        packages=[model_name],
        package_data={model_name: list_files(model_dir)},
        install_requires=list_requirements(meta),
        zip_safe=False,
        entry_points={'spacy_models': ['{m} = {m}'.format(m=model_name)]}
    )


if __name__ == '__main__':
    setup_package()
zN
include meta.json
include LICENSE
include LICENSES_SOURCES
include README.md
z
from pathlib import Path
from spacy.util import load_model_from_init_py, get_model_meta

{imports}

__version__ = get_model_meta(Path(__file__).parent)['version']


def load(**overrides):
    return load_model_from_init_py(__file__, **overrides)
)LICENSELICENSES_SOURCESrM   )F)Ar   r   ro   r   rl   collectionsr   pathlibr   typingr   r   r   r   r	   r
   r   re   	cataloguer   	thinc.apir   wasabir   r   r   r"   r   r   compatr   schemasr   r   _utilr   r   r   r   r   r   commandrq   boolr8   r   rZ   r[   SimpleFrozenListr   r4   rw   rg   rj   rv   r  r  r  ri   lstriprz   r5   r{   r|   rt   rB   r   r7   <module>rS     s   	 	   
 #  @ @ @  #  ; ;  ' / L L Y #$B4[`a3%>tW\]"h  4d  e #D-4Najny~ E?D?efdHd9XY {D?abWi4tueYd9not%KTSW  _\  ],, , 	,
 ~, , 3-, c], , , , ,d !%! k
k
k
 ~k
 T
	k

 3-k
 c]k
 k
 k
 k
 k
 k
 k
 
k
\4 4  *.)>)>)@99!#Y9	#Y9x	4tCy 	4U4:-> 	4:4 :3 :4 : !"c4i "S>" " 
#s(^	"Jc3h g $sCx. .,$sCx. ,S ,^ #  #  & BI	 4S> DI c tCH~ # 6'S 'T 'LX FHY ^
 
EG  FH  >r   