Ë
    ümxiµO  ã                  ó  — d Z ddlmZ ddlZddlZddlZddlmZmZ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 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 ddlmZ dZdZ	 	 	 	 	 	 d'd„Z	 	 	 	 d(d„Z	 	 	 	 d)d„Z d*d„Z!	 	 	 	 d(d„Z"d+d„Z#	 	 	 	 d,d„Z$	 	 	 	 	 	 d-d„Z%	 	 	 	 d,d„Z&	 	 	 	 d,d„Z'	 	 	 	 d,d„Z(	 	 	 	 	 	 d-d„Z)	 	 	 	 d,d „Z*	 	 	 	 	 	 d-d!„Z+	 	 	 	 	 	 d-d"„Z,	 	 	 	 d.d#„Z-d/d$„Z. G d%„ d&«      Z/y)0zParses an LLM command line.é    )ÚannotationsN)ÚAbstractSetÚAnyÚCallableÚMutableMappingÚSequence)Úargument_parser)Úflag_def)Úinput_utils)Úmodel_registry)Úoutput_utils)Úparsed_args_lib)Úpost_process_utils)Úpy_utils)Úsheets_utils)Úllm_function)Úllmfn_inputs_source)Úllmfn_outputs)Úmodelé   é   c                óx   — | j                  «       D ]'  }|D ]   }||vsŒt        dj                  |«      «      ‚ Œ) y )Nz#Placeholder "{}" not found in input)Úto_normalized_inputsÚ
ValueErrorÚformat)ÚsourceÚplaceholdersÚinputsÚkeywords       úc/home/htdocs/ttos/venv/lib/python3.12/site-packages/google/generativeai/notebook/cmd_line_parser.pyÚ+_validate_input_source_against_placeholdersr!   *   sN   € ð ×-Ñ-Ó/ò XˆØ#ò 	XˆGØ˜fÒ$Ü Ð!F×!MÑ!MÈgÓ!VÓWÐWñ	XñXó    c                ó   ‡ — dˆ fd„}|S )Nc                óN   •— t        j                  | «      }‰rt        |‰«       |S ©N)r   Úget_inputs_source_from_py_varr!   )Úvar_namer   r   s     €r    Ú_fnz._get_resolve_input_from_py_var_fn.<locals>._fn7   s%   ø€ Ü×:Ñ:¸8ÓDˆÙÜ7¸ÀÔMØˆr"   )r'   ÚstrÚreturnú%llmfn_inputs_source.LLMFnInputsSource© ©r   r(   s   ` r    Ú!_get_resolve_input_from_py_var_fnr.   4   s   ø€ õð €Jr"   c                óˆ   — t        j                  | «      }t        |t        «      st	        dj                  | «      «      ‚| |fS )z*Resolves a value passed into --compare_fn.z0Variable "{}" does not contain a Callable object)r   Ú
get_py_varÚ
isinstancer   r   r   )ÚnameÚfns     r    Ú_resolve_compare_fn_varr4   @   s?   € ô 
×	Ñ	˜TÓ	"€BÜ�bœ(Ô#ÜÐK×RÑRÐSWÓXÓYÐYà�ˆ8€Or"   c                ó&  — t        j                  | «      }t        |t        «      r t        |t        «      st        |t
        «      rt        dj                  | «      «      ‚|D ],  }t        |t        «      rŒt        dj                  | «      «      ‚ |S )z,Resolves a value passed into --ground_truth.z4Variable "{}" does not contain a Sequence of strings)r   r0   r1   r   r)   Úbytesr   r   )r2   ÚvalueÚxs      r    Ú_resolve_ground_truth_varr9   K   sƒ   € ä×Ñ Ó%€Eô �eœXÔ&¬*°U¼CÔ*@ÄJÈuÔV[ÔD\ÜÐO×VÑVÐW[Ó\Ó]Ð]Øò bˆÜ˜!œSÕ!ÜÐS×ZÑZÐ[_Ó`ÓaÐaðbð €Lr"   c                ó   ‡ — dˆ fd„}|S )Nc                óx   •— t        j                  | «      }t        j                  |«      }‰rt        |‰«       |S r%   )r   Úget_sheets_id_from_strÚSheetsInputsr!   )r7   Ú	sheets_idr   r   s      €r    r(   z*_get_resolve_sheets_inputs_fn.<locals>._fn\   s5   ø€ Ü ×7Ñ7¸Ó>ˆ	Ü×*Ñ*¨9Ó5ˆÙÜ7¸ÀÔMØˆr"   )r7   r)   r*   r+   r,   r-   s   ` r    Ú_get_resolve_sheets_inputs_fnr?   Y   s   ø€ õð €Jr"   c                óV   — t        j                  | «      }t        j                  |«      S r%   )r   r<   ÚSheetsOutputs)r7   r>   s     r    Ú_resolve_sheets_outputsrB   f   s#   € Ü×3Ñ3°EÓ:€IÜ×%Ñ% iÓ0Ð0r"   c                ó  — t        j                  ddt        j                  t        j                  j
                  d¬«      j                  | «       dd„}t        j                  ddt        d|d	¬
«      j                  | «       t        j                  dddd¬«      j                  | «       dd„}t        j                  ddt        d|d¬
«      j                  | «       t        j                  dd¬«      j                  | «       y)z:Adds flags that are related to model selection and config.Ú
model_typeÚmtzThe type of model to use.)r2   Ú
short_nameÚ	enum_typeÚdefault_valueÚhelp_msgc                óD   — | dk  rt        dj                  | «      «      ‚| S )Nr   z5Value should be greater than or equal to zero, got {})r   r   ©r8   s    r    Ú'_check_is_greater_than_or_equal_to_zerozA_add_model_flags.<locals>._check_is_greater_than_or_equal_to_zerow   s&   € ØˆqŠ5ÜÐT×[Ñ[Ð\]Ó^Ó_Ð_Øˆr"   ÚtemperatureÚtNzËControls the randomness of the output. Must be positive. Typical values are in the range: [0.0, 1.0]. Higher values produce a more random and varied response. A temperature of zero will be deterministic.)r2   rF   Ú
parse_typerH   Úparse_to_dest_type_fnrI   r   ÚmzLThe name of the model to use. If not provided, a default model will be used.)r2   rF   rH   rI   c                ó„   — | t         k  s	| t        kD  r$t        dj                  t         t        | «      «      ‚t	        | «      S )Nz-Value should be in the range [{}, {}], got {})Ú_MIN_CANDIDATE_COUNTÚ_MAX_CANDIDATE_COUNTr   r   ÚintrK   s    r    Ú_check_candidate_count_rangez6_add_model_flags.<locals>._check_candidate_count_range•   sA   € ØÔ#Ò# qÔ+?Ò'?ÜØ?×FÑFÜ(Ô*>Àóóð ô
 �1‹vˆr"   Úcandidate_countÚccz$The number of candidates to produce.Úuniquez3Whether to dedupe candidates returned by the model.)r2   rI   )r8   Úfloatr*   rZ   )r8   r   r*   rU   )r
   ÚEnumFlagDefr   Ú	ModelNameÚModelRegistryÚDEFAULT_MODELÚadd_argument_to_parserÚSingleValueFlagDefrZ   rU   ÚBooleanFlagDef)ÚparserrL   rV   s      r    Ú_add_model_flagsrc   k   sö   € ô ×ÑØØÜ ×*Ñ*Ü$×2Ñ2×@Ñ@Ø,ô÷ Ñ˜VÔ$óô
 ×ÑØØÜð ØEðô÷ Ñ˜VÔ$ä×ÑØØØà]ô÷ Ñ˜VÔ$óô ×ÑØØÜð Ø:Ø7ô	÷ Ñ˜VÔ$ä×ÑØØFô÷ Ñ˜VÕ$r"   c                ó  — t        j                  ddt        j                  t	        |«      d¬«      j                  | «       t        j                  ddt        j                  t        |«      d¬«      j                  | «       y)	z;Adds flags to read inputs from a Python variable or Sheets.r   Úiz×Optional names of Python variables containing inputs to use to instantiate a prompt. The variable must be either: a dictionary {'key1': ['val1', 'val2'] ...}, or an instance of LLMFnInputsSource such as SheetsInput.©r2   rF   Ú	dest_typerP   rI   Úsheets_input_namesÚsiz¶Optional names of Google Sheets to read inputs from. This is equivalent to using --inputs with the names of variables that are instances of SheetsInputs, just more convenient to use.N)r
   ÚMultiValuesFlagDefr   ÚLLMFnInputsSourcer.   r_   r?   ©rb   r   s     r    Ú_add_input_flagsrm   ¯   ss   € ô
 ×ÑØØÜ%×7Ñ7Ü?ÀÓMð$ô÷ Ñ˜VÔ$ä×ÑØ!ØÜ%×7Ñ7Ü;¸LÓIðGô
÷ Ñ˜VÕ$r"   c                ó  — t        j                  ddt        j                  t        j
                  d¬«      j                  | «       t        j                  ddt        j                  t        d¬«      j                  | «       y)	z1Adds flags to write outputs to a Python variable.ÚoutputsÚoa  Optional names of Python variables to output to. If the Python variable has not already been defined, it will be created. If the variable is defined and is an instance of LLMFnOutputsSink, the outputs will be written through the sink's write_outputs() method.rf   Úsheets_output_namesÚsoz·Optional names of Google Sheets to write inputs to. This is equivalent to using --outputs with the names of variables that are instances of SheetsOutputs, just more convenient to use.N)r
   rj   r   ÚLLMFnOutputsSinkr   Úget_outputs_sink_from_py_varr_   rB   ©rb   s    r    Ú_add_output_flagsrv   Î   sp   € ô ×ÑØØÜ×0Ñ0Ü*×GÑGðRô÷ Ñ˜VÔ$ä×ÑØ"ØÜ×0Ñ0Ü5ðHô
÷ Ñ˜VÕ$r"   c                ód   — t        j                  dt        t        d¬«      j	                  | «       y )NÚ
compare_fnzµAn optional function that takes two inputs: (lhs_result, rhs_result) which are the results of the left- and right-hand side functions. Multiple comparison functions can be provided.)r2   rg   rP   rI   )r
   rj   Útupler4   r_   ru   s    r    Ú_add_compare_flagsrz   ì   s-   € ô ×ÑØÜÜ5ð=ô	÷ Ñ˜VÕ$r"   c                óf   — t        j                  ddt        t        d¬«      j	                  | «       y )NÚground_truthTzµA variable containing a Sequence of strings representing the ground truth that the output of this cell will be compared against. It should have the same number of entries as inputs.)r2   Úrequiredrg   rP   rI   )r
   r`   r   r9   r_   ru   s    r    Ú_add_eval_flagsr~   û   s1   € ô ×ÑØØÜÜ7ðAô
÷ Ñ˜VÕ$r"   c                óH   — t        | «       t        | |«       t        | «       y)zÝAdds flags for the `run` command.

    `run` sends one or more prompts to a model.

    Args:
      parser: The parser to which flags will be added.
      placeholders: Placeholders from prompts in the cell contents.
    N)rc   rm   rv   rl   s     r    Ú_create_run_parserr€     s   € ô �VÔÜ�V˜\Ô*Ü�fÕr"   c                óN   — dd„}d}| j                  d||¬«       t        | «       y)z¶Adds flags for the compile command.

    `compile` "compiles" a prompt and model call into a callable function.

    Args:
      parser: The parser to which flags will be added.
    c                ó    — 	 t        j                  | «       | S # t        $ r+}t        j                  d dj                  |«      «      |‚d }~ww xY w)Nú{})r   Úvalidate_var_namer   ÚargparseÚArgumentErrorr   )r'   Úes     r    Ú_compile_save_name_fnz5_create_compile_parser.<locals>._compile_save_name_fn(  sN   € ð	FÜ×&Ñ& xÔ0ð ˆøô ò 	Fä×(Ñ(¨¨t¯{©{¸1«~Ó>ÀAÐEûð	Fús   ‚ ™	A¢&AÁAz?The name of a Python variable to save the compiled function to.Úcompile_save_name©ÚhelpÚtypeN)r'   r)   r*   r)   )Úadd_argumentrc   )rb   rˆ   Úsave_name_helps      r    Ú_create_compile_parserr�     s.   € óð W€NØ
×ÑÐ+°.ÐG\ÐÔ]Ü�VÕr"   c                ó¬   — 	 	 	 	 dd„}d}| j                  d||¬«       | j                  d||¬«       t        | |«       t        | «       t        | «       y)z³Adds flags for the compare command.

    Args:
      parser: The parser to which flags will be added.
      placeholders: Placeholders from prompts in the compiled functions.
    c                óL  — 	 t        j                  | «       t        j                  | «      }t        |t        j                  «      s%t        j                  d dj                  | «      «      ‚| |fS # t        $ r+}t        j                  d dj                  |«      «      |‚d }~ww xY w)Nrƒ   z7{} is not a function created with the "compile" command)
r   r„   r   r…   r†   r   r0   r1   r   ÚLLMFunction)r'   r‡   r3   s      r    Ú_resolve_llm_function_fnz8_create_compare_parser.<locals>._resolve_llm_function_fnA  sš   € ð	FÜ×&Ñ& xÔ0ô
 × Ñ  Ó*ˆÜ˜"œl×6Ñ6Ô7Ü×(Ñ(ØØI×PÑPÐQYÓZóð ð ˜ˆ|Ðøô ò 	Fä×(Ñ(¨¨t¯{©{¸1«~Ó>ÀAÐEûð	Fús   ‚A/ Á/	B#Á8&BÂB#zbThe name of a Python variable containing a function previously created with the "compile" command.Úlhs_name_and_fnrŠ   Úrhs_name_and_fnN)r'   r)   r*   z$tuple[str, llm_function.LLMFunction])r�   rm   rv   rz   )rb   r   r“   Ú	name_helps       r    Ú_create_compare_parserr—   5  sk   € ðØðà	-óð$	'ð ð ×ÑÐ)°	Ð@XÐÔYØ
×ÑÐ)°	Ð@XÐÔYä�V˜\Ô*Ü�fÔÜ�vÕr"   c                ót   — t        | «       t        | |«       t        | «       t        | «       t	        | «       y)z«Adds flags for the eval command.

    Args:
      parser: The parser to which flags will be added.
      placeholders: Placeholders from prompts in the cell contents.
    N)rc   rm   rv   rz   r~   rl   s     r    Ú_create_eval_parserr™   ^  s.   € ô �VÔÜ�V˜\Ô*Ü�fÔÜ�vÔÜ�FÕr"   c                óL  — d}d}d}t        j                  |||¬«      }|j                  d¬«      }t        |j	                  t
        j                  j                  j                  «      | «       t        |j	                  t
        j                  j                  j                  «      «       t        |j	                  t
        j                  j                  j                  «      | «       t        |j	                  t
        j                  j                  j                  «      | «       |S )zCreate the full parser.Úllmz#A system for interacting with LLMs.Ú )ÚprogÚdescriptionÚepilogÚcmd)Údest)r	   ÚArgumentParserÚadd_subparsersr€   Ú
add_parserr   ÚCommandNameÚRUN_CMDr7   r�   ÚCOMPILE_CMDr—   ÚCOMPARE_CMDr™   ÚEVAL_CMD)r   Úsystem_namerž   rŸ   rb   Ú
subparserss         r    Ú_create_parserr¬   o  sô   € ð €KØ7€KØ€Fô ×+Ñ+ØØØô€Fð
 ×&Ñ&¨EÐ&Ó2€JÜØ×Ñœo×9Ñ9×AÑA×GÑGÓHØôô ˜:×0Ñ0´×1LÑ1L×1XÑ1X×1^Ñ1^Ó_Ô`ÜØ×Ñœo×9Ñ9×EÑE×KÑKÓLØôô Ø×Ñœo×9Ñ9×BÑB×HÑHÓIØôð €Mr"   c                ó”   — | j                   r<| j                  j                  �| j                  j                  dk(  rt        d«       y y y )Nr   zr"--unique" works across candidates only: it should be used with --candidate_count set to a value greater-than one.)rY   Ú
model_argsrW   Úprint)Úparsed_argss    r    Ú_validate_parsed_argsr±   Ž  sK   € ð ×ÒØ×Ñ×.Ñ.Ð6Ø×!Ñ!×1Ñ1°QÒ6äðBõ	
ð 7ð r"   c                  ó¸   — e Zd ZdZej
                  j                  ZdZe		 	 	 	 d	d„«       Z
e		 	 	 	 d
d„«       Ze		 	 	 	 dd„«       Z	 d	 	 	 	 	 dd„Z	 	 	 	 	 	 dd„Zy)ÚCmdLineParserz-Implementation of Magics command line parser.ú|c                óØ   — g }d}t        |«      D ]7  \  }}|€|}|t        j                  k(  sŒ|j                  |�||| ng «       d}Œ9 |j                  |�||d ng «       |d   |dd fS )a  Splits inputs into the command and post processing tokens.

        The command is represented as a sequence of tokens.
        See comments on the PostProcessingTokens type alias.

        E.g. Given: "run --temperature 0.5 | add_score | to_lower_case"
        The command will be: ["run", "--temperature", "0.5"].
        The post processing tokens will be: [["add_score"], ["to_lower_case"]]

        Args:
          tokens: The command line tokens.

        Returns:
          A tuple of (command line, post processing tokens).
        Nr   r   )Ú	enumerater³   ÚPIPE_OPÚappend)ÚclsÚtokensÚsplit_tokensÚ	start_idxÚ	token_numÚtokens         r    Ú_split_post_processing_tokensz+CmdLineParser._split_post_processing_tokens¤  s–   € ð( ˆØ $ˆ	Ü )¨&Ó 1ò 	!ÑˆI�uØÐ Ø%�	Øœ×-Ñ-Ó-Ø×#Ñ#À9ÐCX F¨9°YÑ$?Ð^`ÔaØ ‘	ð	!ð 	×Ñ°)Ð2G˜F 9 :Ñ.ÈRÔPà˜A‰ ¨Q¨RÐ 0Ð0Ð0r"   c                ó  — t        j                  |«      }|st        j                  j                  g}|d   }|d   j                  «       s"|dvrt        j                  j                  g|z   }t        j                  |«      S )zBParses `line` and returns command line and post processing tokens.r   )z-hz--help)ÚshlexÚsplitr³   ÚDEFAULT_CMDr7   Úisalphar¿   )r¹   Úlinerº   Úfirst_tokens       r    Ú_tokenize_linezCmdLineParser._tokenize_lineÆ  st   € ô —‘˜TÓ"ˆÙÜ#×/Ñ/×5Ñ5Ð6ˆFØ˜Q‘iˆà˜1‰~×%Ñ%Ô'¨KÐ?OÑ,OÜ#×/Ñ/×5Ñ5Ð6¸Ñ?ˆFä×:Ñ:¸6ÓBÐBr"   c                ó¦   — |j                  dd«      }|j                  dd«      }|j                  dd«      }t        j                  |||¬«      }||fS )al  Extracts fields for model args from `parsed_results`.

        Keys specific to model arguments will be removed from `parsed_results`.

        Args:
          parsed_results: A dictionary of parsed arguments (from ArgumentParser). It
            will be modified in place.

        Returns:
          A tuple of (updated parsed_results, model arguments).
        r   NrM   rW   )r   rM   rW   )ÚpopÚ	model_libÚModelArguments)r¹   Úparsed_resultsr   rM   rW   r®   s         r    Ú_get_model_argszCmdLineParser._get_model_args×  sa   € ð ×"Ñ" 7¨DÓ1ˆØ$×(Ñ(¨¸Ó=ˆØ(×,Ñ,Ð->ÀÓEˆä×-Ñ-ØØ#Ø+ô
ˆ
ð
 ˜zÐ)Ð)r"   Nc                óþ  — t         j                  |«      \  }}| j                  ||¬«      }|j                  t        j
                  j                  k(  r�|j                  €J ‚|j                  €J ‚|j                  \  }}|j                  \  }}| j                  |t        |j                  «       «      j                  |j                  «       «      ¬«      }t        |«       |D ]  }	t        j                  |	«       Œ ||fS )a>  Parses the commandline and returns ParsedArgs and post-processing tokens.

        Args:
          line: The line to parse (usually contents from cell Magics).
          placeholders: Placeholders from prompts in the cell contents.

        Returns:
          A tuple of (parsed_args, post_processing_tokens).
        )rº   r   )r³   rÇ   Ú%_get_parsed_args_from_cmd_line_tokensr    r   r¥   r¨   r”   r•   Ú	frozensetÚget_placeholdersÚunionr±   r   Ú'validate_one_post_processing_expression)
ÚselfrÅ   r   rº   Úpost_processing_tokensr°   Ú_Úlhs_fnÚrhs_fnÚexprs
             r    Ú
parse_linezCmdLineParser.parse_lineñ  s  € ô *7×)EÑ)EÀdÓ)KÑ&ˆÐ&à×@Ñ@Ø¨ð Aó 
ˆð �?‰?œo×9Ñ9×EÑEÒEØ×.Ñ.Ð:Ð:Ð:Ø×.Ñ.Ð:Ð:Ð:Ø#×3Ñ3‰IˆAˆvØ#×3Ñ3‰IˆAˆvØ×DÑDØÜ& v×'>Ñ'>Ó'@ÓA×GÑGÈ×H_ÑH_ÓHaÓbð Eó ˆKô
 	˜kÔ*à*ò 	MˆDÜ×FÑFÀtÕLð	Mð Ð2Ð2Ð2r"   c                óæ   — t        |«      j                  |«      }t        |«      }t        j                  |d   «      |d<   t
        j                  |«      \  }}||d<   t        j                  di |¤ŽS )z1Returns ParsedArgs from a tokenized command line.r    r®   r,   )r¬   Ú
parse_argsÚvarsr   r¥   r³   rÍ   Ú
ParsedArgs)rÔ   rº   r   ÚresultsÚresults_dictr®   s         r    rÏ   z3CmdLineParser._get_parsed_args_from_cmd_line_tokens  so   € ô ! Ó.×9Ñ9¸&ÓAˆä˜G“}ˆÜ-×9Ñ9¸,ÀuÑ:MÓNˆ�UÑä#0×#@Ñ#@ÀÓ#NÑ ˆ�jØ%/ˆ�\Ñ"ä×)Ñ)Ñ9¨LÑ9Ð9r"   )rº   úSequence[str]r*   ú:tuple[Sequence[str], parsed_args_lib.PostProcessingTokens])rÅ   r)   r*   râ   )rÌ   zMutableMapping[str, Any]r*   z9tuple[MutableMapping[str, Any], model_lib.ModelArguments]r%   )rÅ   r)   r   úAbstractSet[str] | Noner*   zGtuple[parsed_args_lib.ParsedArgs, parsed_args_lib.PostProcessingTokens])rº   rá   r   rã   r*   úparsed_args_lib.ParsedArgs)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r¥   r¦   rÃ   r·   Úclassmethodr¿   rÇ   rÍ   rÚ   rÏ   r,   r"   r    r³   r³   ›  sÚ   „ Ù7ð "×-Ñ-×5Ñ5€Kð €Gàð1àð1ð 
Dò1ó ð1ðB ðCØðCà	CòCó ðCð  ð*Ø5ð*à	Bò*ó ð*ð8 15ð*3àð*3ð .ð*3ð 
Qó	*3ðX:àð:ð .ð:ð 
$ô	:r"   r³   )r   r+   r   zAbstractSet[str]r*   ÚNone)r   rã   r*   z6Callable[[str], llmfn_inputs_source.LLMFnInputsSource])r2   r)   r*   z/tuple[str, parsed_args_lib.TextResultCompareFn])r2   r)   r*   rá   )r7   r)   r*   zllmfn_outputs.LLMFnOutputsSink)rb   úargparse.ArgumentParserr*   rê   )rb   rë   r   rã   r*   rê   )r   rã   r*   rë   )r°   rä   r*   rê   )0rè   Ú
__future__r   r…   rÁ   ÚsysÚtypingr   r   r   r   r   Úgoogle.generativeai.notebookr	   r
   r   r   r   r   r   r   r   Ú google.generativeai.notebook.libr   r   r   r   rÊ   rS   rT   r!   r.   r4   r9   r?   rB   rc   rm   rv   rz   r~   r€   r�   r—   r™   r¬   r±   r³   r,   r"   r    ú<module>rñ      sÍ  ðñ "Ý "ã Û Û 
ß GÕ Gå 8Ý 1Ý 4Ý 7Ý 5Ý 8Ý ;Ý 1Ý 5Ý 9Ý @Ý :Ý ?ð Ð ØÐ ðXØ1ðXà"ðXð 
óXð	Ø)ð	à;ó	ðØ
ðà4óóð
Ø)ð
à;ó
ó1ð
A%Ø#ðA%à	óA%ðH%Ø#ð%à)ð%ð 
ó%ð>%Ø#ð%à	ó%ð<%Ø#ð%à	ó%ð%Ø#ð%à	ó%ð Ø#ðà)ðð 
óð"Ø#ðà	óð2&Ø#ð&à)ð&ð 
ó&ðRØ#ðà)ðð 
óð"Ø)ðàóó>

÷R:ò R:r"   