
     f~                     *   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mZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d d	lmZmZm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& d dl'm(Z( d dl)m*Z* d dl+m,Z,m-Z- d dl.m/Z/ d dl0m1Z1m2Z2m3Z3 d dl4m5Z5 d dl6m7Z7m8Z8 d dl9m:Z: d dl;m<Z< d dl=m>Z> d dl?m@Z@mAZAmBZBmCZCmDZD d dlEmFZF d dlGmHZHmIZI d dlJmKZKmLZLmMZM  e>eN          ZOde&deKfdZP G d  d!e          ZQ	 	 	 	 	 d7d#eRd$eeS         d%eeS         d&eRd'eeS         deeS         fd(ZTd%eeS         d&eRdeRfd)ZU	 	 	 	 d8d*eeR         d+eeS         d,eeS         d-eeS         d.eRdeRfd/ZVd0ee1         d1eeeS                  ddfd2ZWd3eXd4eRd5eRdeSfd6ZYdS )9    N)SUPPRESS_HELPValues)IterableListOptional)canonicalize_name)
print_json)
WheelCache)
cmdoptions)make_target_python)RequirementCommandwarn_if_run_as_rootwith_cleanup)ERRORSUCCESS)CommandErrorInstallationError)
get_scheme)get_environment)FormatControl)InstallationReport)get_build_tracker)ConflictDetailscheck_install_conflicts)install_given_reqs)InstallRequirementLegacySetupPyOptionsCheckModecheck_legacy_setup_py_options)WINDOWS)#LegacyInstallReasonFailedBdistWheel
deprecated)parse_distutils_argstest_writable_dir)	getLogger)check_externally_managed
ensure_dirget_pip_version(protect_pip_from_modification_on_windowswrite_output)TempDirectory)running_under_virtualenvvirtualenv_no_global)BdistWheelAllowedPredicatebuild should_build_for_install_commandformat_controlreturnc                 0     dt           dt          f fd}|S )Nreqr2   c                 b    t          | j        pd          }                    |          }d|v S )N binary)r   nameget_allowed_formats)r4   canonical_nameallowed_formatsr1   s      a/var/www/api.educacionweb.es/myenv/lib/python3.11/site-packages/pip/_internal/commands/install.pycheck_binary_allowedz;get_check_bdist_wheel_allowed.<locals>.check_binary_allowedC   s4    *38>r::(<<^LL?**    )r   bool)r1   r=   s   ` r<   get_check_bdist_wheel_allowedr@   @   s8    +"4 + + + + + + +
  r>   c                       e Zd ZdZdZddZededee	         de
fd            Zd	e	d
ededdfdZdee         dee         fdZdede	ddfdZdS )InstallCommandaI  
    Install packages from:

    - PyPI (and other indexes) using requirement specifiers.
    - VCS project urls.
    - Local project directories.
    - Local or remote source archives.

    pip also supports installing from "requirements files", which provide
    an easy way to specify a whole environment to be installed.
    a%  
      %prog [options] <requirement specifier> [package-index-options] ...
      %prog [options] -r <requirements file> [package-index-options] ...
      %prog [options] [-e] <vcs project url> ...
      %prog [options] [-e] <local project path> ...
      %prog [options] <archive url/path> ...r2   Nc                    | j                             t          j                               | j                             t          j                               | j                             t          j                               | j                             t          j                               | j                             t          j                               | j                             ddddd           | j                             ddd	d
d d           t          j        | j                    | j                             dddd           | j                             dddt                     | j                             ddd
d d           | j                             ddd
d d           | j                             t          j
                               | j                             ddddd           | j                             ddddd gd!"           | j                             d#d$dd%           | j                             d&d'd(dd)           | j                             t          j                               | j                             t          j                               | j                             t          j                               | j                             t          j                               | j                             t          j                               | j                             t          j                               | j                             t          j                               | j                             t          j                               | j                             t          j                               | j                             d*dd+d,d-           | j                             d.dd+d/0           | j                             d1dd2d,d3           | j                             d4dd5d,d6           | j                             t          j                               | j                             t          j                               | j                             t          j                               | j                             t          j                               | j                             t          j                               | j                             t          j                               t          j        t          j        | j                  }| j                            d7|           | j                            d7| j                    | j                             d8d9d:d d;           d S )<Nz	--dry-run
store_truedry_runFzDon't actually install anything, just print what would be. Can be used in combination with --ignore-installed to 'resolve' the requirements.)actiondestdefaulthelpz-tz--target
target_dirdirzInstall packages into <dir>. By default this will not replace existing files/folders in <dir>. Use --upgrade to replace existing packages in <dir> with new versions.)rG   metavarrH   rI   z--useruse_user_sitezInstall to the Python user install directory for your platform. Typically ~/.local/, or %APPDATA%\Python on Windows. (See the Python documentation for site.USER_BASE for full details.))rG   rF   rI   z	--no-userstore_falsez--root	root_pathz=Install everything relative to this alternate root directory.z--prefixprefix_pathzIInstallation prefix where lib, bin and other top-level folders are placedz-Uz	--upgradeupgradezUpgrade all specified packages to the newest available version. The handling of dependencies depends on the upgrade-strategy used.z--upgrade-strategyupgrade_strategyzonly-if-neededeageraG  Determines how dependency upgrading should be handled [default: %default]. "eager" - dependencies are upgraded regardless of whether the currently installed version satisfies the requirements of the upgraded package(s). "only-if-needed" -  are upgraded only when they do not satisfy the requirements of the upgraded package(s).)rG   rH   choicesrI   z--force-reinstallforce_reinstallz;Reinstall all packages even if they are already up-to-date.z-Iz--ignore-installedignore_installedzIgnore the installed packages, overwriting them. This can break your system if the existing package is of a different version or was installed with a different package manager!z	--compilecompileTz'Compile Python source files to bytecodez--no-compilez.Do not compile Python source files to bytecode)rF   rG   rI   z--no-warn-script-locationwarn_script_locationz0Do not warn when installing scripts outside PATHz--no-warn-conflictswarn_about_conflictsz%Do not warn about broken dependenciesr   z--reportjson_report_filefileaW  Generate a JSON file describing what pip did to install the provided requirements. Can be used in combination with --dry-run and --ignore-installed to 'resolve' the requirements. When - is used as file name it writes to stdout. When writing to stdout, please combine with the --quiet option to avoid mixing pip logging output with JSON output.)cmd_opts
add_optionr   requirementsconstraintsno_depspreeditableadd_target_python_optionsr   srcignore_requires_pythonno_build_isolation
use_pep517no_use_pep517check_build_depsoverride_externally_managedconfig_settingsinstall_optionsglobal_options	no_binaryonly_binaryprefer_binaryrequire_hashesprogress_barroot_user_actionmake_option_groupindex_groupparserinsert_option_group)self
index_optss     r<   add_optionszInstallCommand.add_options_   s     !8!:!:;;;  !7!9!9:::  !3!5!5666  !1!1222  !4!6!6777  1 	! 
	
 
	
 
	
 	  % 	! 	
 	
 	
 	,T];;;   % 	! 
	
 
	
 
	
 	    	 	! 	
 	
 	
 	  P 	! 	
 	
 	
 	  % 	! 		
 		
 		
 	  !1!1222  ) 	! 
	
 
	
 
	
 	   #$%w/G 	! 	
 	
 	
  	  "N	 	! 	
 	
 	
 	   #4 	! 	
 	
 	
 	  !B!D!DEEE  !>!@!@AAA  !6!8!8999  !9!;!;<<<  !<!>!>???  !G!I!IJJJ  !;!=!=>>>  !;!=!=>>>  !:!<!<===  : 	! 	
 	
 	
 	   A	 	! 	
 	
 	
 	  ' 'C 	! 	
 	
 	
 	  ! '8 	! 	
 	
 	
 	  !5!7!7888  !7!9!9:::  !9!;!;<<<  !:!<!<===  !8!:!:;;;  !<!>!>???1"K
 


 	'':666''4=999  #G 	! 	
 	
 	
 	
 	
r>   optionsargsc                   - |j         r|j        t          d          |j        o|j         o|j        d u o|j        d u o|j        d u }|r|j        st                       d}|j	        r|j
        }t          j        |d           |j        pg }t                              dt!                                 t#          |j         |j        |j        |j        |j                  |_         d }d }|j        rd|_        t(          j                            |j                  |_        t(          j                            |j                  r3t(          j                            |j                  st          d          t3          d	          }|j        }|                     |           |j        pg }|                     |          }	t;          |          }
|                     ||	|
|j        
          }|                     tA                                }t3          |j!         dd          }	 | "                    ||||	          }tG          ||tH          j%                   d|j&        v rtO          |j(                  }n:|j)        j*        rtW          ddddd           tO          |j(        |j)                  }|D ]	}d|_,        
t[          ||j                   | .                    ||||	||j         | j/                  }| 0                    |||||j         |j        |j        |j1        ||j2        
  
        }| 3                    |           |4                    ||j                   }|j        rtk          |j6                  }|j        dk    r#to          |8                                           nYts          |j        dd          5 }tu          j;        |8                                |dd           d d d            n# 1 swxY w Y   |j        rTty          d |j6        D                       }|r-t{          dd >                    d! |D                                  t~          S 	 |@                    d"          }|jA        d u }n# t          $ r d}Y nw xY wt          |#           t          |j)                  --fd$|jE        F                                D             }t          ||dg |%          \  }}d& |D             }|r5t          d'I                    d(>                    |                              |D ]}|j2        st          |_K        |L                    |          }d }|jM         o|jN        } | r| O                    |          }|jP        }!|j        s|j        rd}!t          ||||j        ||j        |!|j         |jR        )	  	        }"t          |j         ||j        |j        |j        *          }#t          |#          }$|"U                    t          jW        d+          ,           g }%|"D ]S}&|&jX        }'	 |$Y                    |'          }(|(|' d|(jZ         }'n# t          $ r Y nw xY w|%\                    |'           T|*| ]                    || ^                    |          -           d >                    |%          })|)rt{          d.|)           n[# t          $ rN}*| j/        d/k    }+t          |*|+|j                   },t          a                    |,|+0           t          cY d }*~*S d }*~*ww xY w|j        r%|sJ | c                    |j        ||j	                   |jd        d1k    rt                       t~          S )2Nz'Can not combine '--user' and '--target'zto-satisfy-onlyT)check_targetzUsing %s)rP   rJ   rO   isolated_modez=Target path exists but is not a directory, will not continue.target)kind)r{   sessiontarget_pythonre   install)deleter   globally_managedzno-binary-enable-wheel-cachez--no-binary currently disables reading from the cache of locally built wheels. In the future --no-binary will not influence the wheel cache.z to use the --no-cache-dir optioni,  z23.1)reasonreplacementfeature_flagissuegone_in)temp_build_dirr{   build_trackerr   finderrM   	verbosity)
preparerr   r{   wheel_cacherM   rV   re   rU   rR   rg   )check_supported_wheels-)datawzutf-8)encoding   F)indentensure_asciic              3   J   K   | ]}|j         d          |j         d         fV  dS )r8   versionN)metadata.0rs     r<   	<genexpr>z%InstallCommand.run.<locals>.<genexpr>  sI       - - Z'I)>?- - - - - -r>   zWould install %s c              3   @   K   | ]}d                      |          V  dS )r   N)join)r   items     r<   r   z%InstallCommand.run.<locals>.<genexpr>  s,       P PD$ P P P P P Pr>   pip)modifying_pipc                 4    g | ]}t          |          |S  )r0   )r   r   check_bdist_wheel_alloweds     r<   
<listcomp>z&InstallCommand.run.<locals>.<listcomp>  s:       3A7PQQ  r>   )r   verifybuild_optionsrm   c                 *    g | ]}|j         	|j        S r   )rg   r8   r   s     r<   r   z&InstallCommand.run.<locals>.<listcomp>  s1     5 5 5!,55 5 5r>   zYCould not build wheels for {}, which is required to install pyproject.toml-based projectsz, )roothomeprefixrX   rM   	pycompile)userr   r   r   isolatedr8   )key)resolver_variantzSuccessfully installed %s   )exc_infowarn)frM   rJ   r   rE   rZ   rO   rP   rj   r&   rQ   rR   r   check_dist_restrictionrl   loggerverboser(   decide_user_installr   rV   ospathabspathexistsisdirr+   enter_contextrm   get_default_sessionr   _build_package_finderre   r   no_cleanget_requirementsr   r   INSTALLfeatures_enabledr
   	cache_dirr1   rn   r!   permit_editable_wheels'reject_location_related_install_optionsmake_requirement_preparerr   make_resolverrU   rg   trace_basic_inforesolver   requirements_to_installr	   to_dictopenjsondumpsortedr*   r   r   get_requirementsatisfied_byKeyErrorr)   r@   r^   valuesr/   r   formatr    legacy_install_reasonget_installation_orderignore_dependenciesrY   _determine_conflictsrX   r   rW   get_lib_location_guessesr   sortoperator
attrgetterr8   get_distributionr   	Exceptionappend_warn_about_conflictsdetermine_resolver_variantOSErrorcreate_os_error_messageerrorr   _handle_target_dirrs   r   ).rx   r{   r|   #installing_into_current_environmentrR   rl   target_temp_dirtarget_temp_dir_pathrm   r   r   r   r   	directoryreqsr   r4   r   resolverrequirement_setreportfwould_install_itemspip_reqr   reqs_to_build_build_failurespep517_build_failure_namesr   
to_install	conflictsshould_warn_about_conflictsrX   	installedlib_locationsenvitemsresultr   installed_distinstalled_descr   show_tracebackmessager   s.                                                @r<   runzInstallCommand.run  s	     	JW%7%CHIII =W%=> ,!T),"d*, #t+	 	, 0	'7	' %&&&,? 	8&7)'EEEE!17Rz?#4#4555 3!+)'!/!
 !
 !
 48.2 	0'+G$!#1C!D!DG w122 GMM'"455 #S  
 ,:::O#2#7 /// /52**733*733++'#*#A	 , 
 
 **+<+>+>??!''!
 
 
	H	((wHHD)<D   .1III )):;;)3 N %G%C# &
 
 
 
 )):G<RSS
  2 2-1**3D':QRRR55(+%3. 6  H ))!'%3!(!9'.'E ' 7!1"- *  H !!&)))&..1C-C /  O ' U+O,STT+s22FNN$4$455555g6gNNN URS	&.."2"2AaeTTTTU U U U U U U U U U U U U U U  
&, - -,D- - - ' '# '  * P P<O P P PPP   =)99%@@ !( 4 <  & & & %& 5=QQQQ(E%) )%   (5<<>>  M !&' -! ! !A~5 5 .5 5 5& * '<<BF		"<=== =   $ R R| R.QA+!88IIJ 48I//PG4P ( + B 55jAA	 $+#? ! -W%8 -',$*&)*%9%3!/
 
 
I 5*)&* .  M "-00CNNx26::N;;;E# # #{%(%9%9$%?%?N%1"&AA)?AA    DT""""$**%)%D%DW%M%M +   
 !XXe__N /"    
	 
	 
	!^q0N-% G
 LL>L:::LLLLLL
	  	""""##"OW_   #v--!!!s   +F[ +O>2[ >P[ PA[ %R :
[ R[ RF*[ >#Y"![ "
Y/,[ .Y//A,[ 
\4&A\/)\4/\4rJ   r   rQ   c                    t          |           g }t          d|j                  }|j        }|j        }|j        }t          j                            |          r|                    |           t          j                            |          r||k    r|                    |           t          j                            |          r|                    |           |D ]y}	t          j	        |	          D ]`}
|	|k    rDt          j        
                    ||
          t          fd|d d         D                       rMt          j        
                    ||
          }t          j                            |          r|st                              d|           t          j                            |          rt                              d|           t          j                            |          rt!          j        |           nt          j        |           t!          j        t          j        
                    |	|
          |           b{d S )Nr6   )r   c              3   B   K   | ]}|                               V  d S N)
startswith)r   sddirs     r<   r   z4InstallCommand._handle_target_dir.<locals>.<genexpr>X  s/      II!1<<--IIIIIIr>   zKTarget directory %s already exists. Specify --upgrade to force replacement.zTarget directory %s already exists and is a link. pip will not automatically replace links, please remove if replacement is desired.)r'   r   r   purelibplatlibr   r   r   r   listdirr   anyr   warningislinkr   shutilrmtreeremovemove)rx   rJ   r   rQ   lib_dir_listschemepurelib_dirplatlib_dirdata_dirlib_dirr   target_item_dirr  s               @r<   r   z!InstallCommand._handle_target_dir=  sL    	:  B_%9:::nn;7>>+&& 	-,,,7>>+&& 	-;++E+E,,,7>>(## 	*)))# 	J 	JG
7++ J Jh&&7<<$77DIIII|CRC7HIIIII ! "$',,z4"@"@7>>/22 3" !>+  
 !w~~o66 !' ,   !w}}_55 3o6666	/222BGLL$77IIII9J	J 	Jr>   r   c                 x    	 t          |          S # t          $ r t                              d           Y d S w xY w)NzwError while checking for conflicts. Please file an issue on pip's issue tracker: https://github.com/pypa/pip/issues/new)r   r   r   	exception)rx   r   s     r<   r   z#InstallCommand._determine_conflictss  sW    	*:666 	 	 	N   44	s    $99conflict_detailsr   c                 H   |\  }\  }}|s|sd S g }|dk    r|                     d           n|dk    sJ |                     d           |D ]N}||         d         }||         D ]5}	d                    |||	d                   }
|                     |
           6O|D ]W}||         d         }||         D ]>\  }}}d	                    ||||||dk    rd
nd          }
|                     |
           ?Xt                              d                    |                     d S )Nlegacyzpip's legacy dependency resolver does not consider dependency conflicts when selecting packages. This behaviour is the source of the following dependency conflicts.z2020-resolverzpip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts.r   z@{name} {version} requires {requirement}, which is not installed.r   )r8   r   requirementzg{name} {version} requires {requirement}, but {you} have {dep_name} {dep_version} which is incompatible.youzyou'll)r8   r   r%  dep_namedep_versionr&  
)r   r   r   criticalr   )rx   r"  r   package_setmissingconflictingpartsproject_namer   
dependencyr  r'  r(  r4   s                 r<   r   z$InstallCommand._warn_about_conflicts  s    /?++g{ 	{ 	Fx''LL@    $6666LL@   $ 	& 	&L!,/2G%l3 	& 	&
.&%# *1     W%%%%	& ( 	& 	&L!,/2G.9,.G & &*+sF&%# #% +"2o"E"E8     W%%%%& 			%(()))))r>   )r2   N)__name__
__module____qualname____doc__usagerz   r   r   r   strintr  r+   r?   r   r   r   r   r   r   r   r>   r<   rB   rB   K   s       
 
0E{
 {
 {
 {
z ^6 ^c ^s ^ ^ ^ \^@	4J4J0=4JHL4J	4J 4J 4J 4Jl
12
	/	"
 
 
 
4* /4*CF4*	4* 4* 4* 4* 4* 4*r>   rB   Fr   r   r   r   r   c                 H    t          d| ||||          }|j        |j        gS )Nr6   )r   r   r   r   r   )r   r  r  )r   r   r   r   r   r  s         r<   r   r     s;     
  F NFN++r>   c           	      l    t          d t          t          | |                    D                       S )Nc              3   4   K   | ]}t          |          V  d S r
  r#   )r   ds     r<   r   z)site_packages_writable.<locals>.<genexpr>  s>         	!     r>   r   r   )allsetr   r<  s     r<   site_packages_writabler?    sF      -4(KKKLL     r>   rM   rP   rJ   rO   r   c                    | | st                               d           dS | rJ|rt          d          t                      rt	          d          t                               d           dS | J |s|rt                               d           dS t
          j        st                               d	           dS t          ||
          rt                               d           dS t                               d           dS )aZ  Determine whether to do a user install based on the input options.

    If use_user_site is False, no additional checks are done.
    If use_user_site is True, it is checked for compatibility with other
    options.
    If use_user_site is None, the default behaviour depends on the environment,
    which is provided by the other arguments.
    Nz$Non-user install by explicit requestFzVCan not combine '--user' and '--prefix' as they imply different installation locationszZCan not perform a '--user' install. User site-packages are not visible in this virtualenv.z User install by explicit requestTz3Non-user install due to --prefix or --target optionz4Non-user install because user site-packages disabledr<  z0Non-user install because site-packages writeablezMDefaulting to user installation because normal site-packages is not writeable)	r   debugr   r-   r   siteENABLE_USER_SITEr?  info)rM   rP   rJ   rO   r   s        r<   r   r     s<   " 	!M!;<<<u  	3    !! 	#6   	7888t      j JKKKu   KLLLu 9}EEE GHHHu
KK	   4r>   r^   r{   c           	      6   dt           t                   dt          t                   fd}g }| D ]^}|j        }t	          |          }|rD|                    d                     ||                                          |                     _|rTt	          |          }|rC|                    d                     ||                                                               |sdS t          d                    d	                    |                              )	zIf any location-changing --install-option arguments were passed for
    requirements or on the command-line, then show a deprecation warning.
    option_namesr2   c                     d | D             S )Nc                 `    g | ]+}d                      |                    dd                    ,S )z--{}r   r   )r   replace)r   r8   s     r<   r   zSreject_location_related_install_options.<locals>.format_options.<locals>.<listcomp>  s2    OOO$dll34455OOOr>   r   )rF  s    r<   format_optionsz?reject_location_related_install_options.<locals>.format_options  s    OO,OOOOr>   z{!r} from {}z{!r} from command lineNzLocation-changing options found in --install-option: {}. This is unsupported, use pip-level options like --user, --prefix, --root, and --target instead.z; )
r   r6  r   rl   r"   r   r   keysr   r   )r^   r{   rJ  	offendersr%  rl   location_optionss          r<   r   r     sM   PXc] PtCy P P P P I#  %5/@@ 	%%"N#3#8#8#:#:;;[     /88 	(//?O?T?T?V?V0W0WXX    
	3396$))I:N:N3O3O  r>   r   r  using_user_sitec                    g }|                     d           |s8|                     d           |                     t          |                      n|                     d           |dxx         dz  cc<   | j        t          j        k    rid}d}t	                      s-|s+|                    |d|                                g           n|                     |           |                     d	           t          rI| j        t          j        k    r4| j	        r-t          | j	                  d
k    r|                     d           d                    |                                          dz   S )zrFormat an error message for an OSError

    It may occur anytime during the execution of the install command.
    z,Could not install packages due to an OSErrorz: .r  r)  z"Consider using the `--user` optionzCheck the permissionsz or z.
i  zHINT: This error might have occurred since this system does not have Windows Long Path support enabled. You can find information on how to enable this at https://pip.pypa.io/warnings/enable-long-paths
r6   )r   r6  errnoEACCESr,   extendlowerr   ENOENTfilenamelenr   strip)r   r  rN  r.  user_option_partpermissions_parts         r<   r   r   3  s    E 
LL?@@@ TSZZ    S 
"IIIIII {el""?2')) 		+/ 		+LL$$**,,    LL)***U
 	
K5<''N (#%%?	
 	
 	
 775>>!!D((r>   )FNNFN)NNNF)ZrQ  r   r   r   r  rB  optparser   r   typingr   r   r   pip._vendor.packaging.utilsr   pip._vendor.richr	   pip._internal.cacher
   pip._internal.clir   pip._internal.cli.cmdoptionsr   pip._internal.cli.req_commandr   r   r   pip._internal.cli.status_codesr   r   pip._internal.exceptionsr   r   pip._internal.locationsr   pip._internal.metadatar   #pip._internal.models.format_controlr   (pip._internal.models.installation_reportr   ,pip._internal.operations.build.build_trackerr   pip._internal.operations.checkr   r   pip._internal.reqr   pip._internal.req.req_installr   r   r   pip._internal.utils.compatr   pip._internal.utils.deprecationr    r!   "pip._internal.utils.distutils_argsr"   pip._internal.utils.filesystemr$   pip._internal.utils.loggingr%   pip._internal.utils.miscr&   r'   r(   r)   r*   pip._internal.utils.temp_dirr+   pip._internal.utils.virtualenvr,   r-   pip._internal.wheel_builderr.   r/   r0   r1  r   r@   rB   r?   r6  r   r?  r   r   r   r   r   r>   r<   <module>rv     s       				   * * * * * * * * + + + + + + + + + + 9 9 9 9 9 9 ' ' ' ' ' ' * * * * * * ( ( ( ( ( ( ; ; ; ; ; ;         
 : 9 9 9 9 9 9 9 D D D D D D D D . . . . . . 2 2 2 2 2 2 = = = = = = G G G G G G J J J J J J S S S S S S S S 0 0 0 0 0 0         
 / . . . . .        D C C C C C < < < < < < 1 1 1 1 1 1              7 6 6 6 6 6                 
8		 !        h	* h	* h	* h	* h	*' h	* h	* h	*X  , ,
,
3-, 3-, 	,
 SM, 
#Y, , , ,$# $ 4     "& $#: :D>:#: : }	:
 : 
: : : :z$)*$5=d3i5H$	$ $ $ $N6)6)$(6);?6)6) 6) 6) 6) 6) 6)r>   