
    o i?]              &       j   d Z ddlZddlZddlZddlmZ ddlmZ ddlm	Z	m
Z
mZmZ ddl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mZmZ  ej        e          Zd eD             Ze	e ej         d          f         Z!e	ee          ej"        d          f         Z#e	ee          ej"        dd$                    e           d          f         Z%e	ee&e                   ej"        ddd          f         Z'e	ee&e                   ej"        ddd          f         Z(e	ee          ej"        dd          f         Z)e	ee          ej"        d          f         Z*e	ee          ej"        d          f         Z+e	e, ej"        ddd          f         Z-e	ee          ej"        d           f         Z.e	ee&e                   ej"        d!d"          f         Z/e	ee          ej"        d#d$d%          f         Z0e	ee,          ej"        d&          f         Z1e	ee,          ej"        d'          f         Z2e	e ej         d(          f         Z3e	e ej         d)          f         Z4e	ee&e                   ej         d*          f         Z5e	e&e          ej         d+          f         Z6e	e ej         d,          f         Z7e	e ej         d-          f         Z8e	ee          ej"        d.          f         Z9 ed/          Z:e:;                    d0d1          	 	 	 	 	 	 	 	 	 dd3e!d4e6d5e'd6e(d7e)d8e*d9e%d:e+d;e-d<e.d=ed>dfd?            Z<e:;                    d@dA          	 	 ddBe7d<e.d=ed>dfdC            Z=dDe>eef         dEe>eef         d>e,fdFZ?dGe&e&eee@f                           dHe&e         dIee         d>dfdJZAe:;                    dKdL          	 	 	 	 	 ddMe	e, ej"        dNdOdP          f         d<e.d=edQe	ee&e                   ej"        dRdSdT          f         dUe	ee          ej"        dV          f         d>dfdW            ZBe:;                    dXdY          	 	 ddZe	e&e          ej         d[          f         d<e.d=ed>dfd\            ZCe:;                    d]d^          	 	 ddBe7d<e.d=ed>dfd_            ZD ed`          ZEe:F                    eEdab           eE;                    d0dc          	 	 	 	 	 	 	 	 	 	 	 	 	 	 ddde4dee5d3e#dfe9d9e%d5e'd6e(d7e)d8e*d:e+d;e-d<e.d=edge/dhe0d>df di            ZG edj          ZHe:F                    eHdkb           eH;                    d0dl          	 	 	 	 	 	 	 	 	 	 ddme3d3e!d4e6dne1doe2d5e'd6e(d7e)d8e*d9e%d:e+d<e.d=ed>dfdp            ZIeH;                    dKdq          	 	 	 	 	 ddMe	e, ej"        dNdOdr          f         d<e.d=edQe	ee&e                   ej"        dRdSdT          f         dUe	ee          ej"        dsdV          f         d>dfdt            ZJeH;                    dXdu          	 	 ddve	e&e          ej         dw          f         d<e.d=ed>dfdx            ZKeH;                    dydz          	 	 dd{e8d<e.d=ed>dfd|            ZLeH;                    dnd}          	 	 dd{e8d<e.d=ed>dfd~            ZMeH;                    dd          	 	 dd{e8d<e.d=ed>dfd            ZN ed          ZOeHF                    eOdab           eO;                    d0dc          	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ddme3dde4dee5dne1doe2d3e#dfe9d9e%d5e'd6e(d7e)d8e*d:e+d<e.d=edge/dhe0d>df$d            ZPdGe&e&eee@f                           dHe&e         d>efdZQd>e
eef         fdZRdS )a  Contains commands to interact with jobs on the Hugging Face Hub.

Usage:
    # run a job
    hf jobs run <image> <command>

    # List running or completed jobs
    hf jobs ps [-a] [-f key=value] [--format TEMPLATE]

    # Stream logs from a job
    hf jobs logs <job-id>

    # Inspect detailed information about a job
    hf jobs inspect <job-id>

    # Cancel a running job
    hf jobs cancel <job-id>

    # Run a UV script
    hf jobs uv run <script>

    # Schedule a job
    hf jobs scheduled run <schedule> <image> <command>

    # List scheduled jobs
    hf jobs scheduled ps [-a] [-f key=value] [--format TEMPLATE]

    # Inspect a scheduled job
    hf jobs scheduled inspect <scheduled_job_id>

    # Suspend a scheduled job
    hf jobs scheduled suspend <scheduled_job_id>

    # Resume a scheduled job
    hf jobs scheduled resume <scheduled_job_id>

    # Delete a scheduled job
    hf jobs scheduled delete <scheduled_job_id>

    Nasdict)Path)	AnnotatedDictOptionalUnion)SpaceHardware	get_token)HfHubHTTPError)logging)load_dotenv   )TokenOpt
get_hf_apityper_factoryc                 2    g | ]}|j         d k    |j         S )z	zero-a10g)value).0items     X/var/www/html/auto_sub_bot/venv/lib/python3.11/site-packages/huggingface_hub/cli/jobs.py
<listcomp>r   J   s&    WWWDTZ;=V=VTZ=V=V=V    zThe Docker image to use.)helpz.Use a custom Docker image with `uv` installed.zTFlavor for the hardware, as in HF Spaces. Defaults to `cpu-basic`. Possible values: , .z-ez--envz/Set environment variables. E.g. --env ENV=valuez-sz	--secretszvSet secret environment variables. E.g. --secrets SECRET=value or `--secrets HF_TOKEN` to pass your Hugging Face token.z
--env-filez(Read in a file of environment variables.z/Read in a file of secret environment variables.zVMax duration: int/float with s (seconds, default), m (minutes), h (hours) or d (days).z-dz--detachz3Run the Job in the background and print the Job ID.zVThe namespace where the job will be running. Defaults to the current user's namespace.z--withz%Run with the given packages installedz-pz--pythonz5The Python interpreter to use for the run environmentz!Suspend (pause) the scheduled Jobz8Allow multiple instances of this Job to run concurrentlyzWOne of annually, yearly, monthly, weekly, daily, hourly, or a CRON schedule expression.z$UV script to run (local file or URL)zArguments for the scriptzThe command to run.zJob IDzScheduled Job IDzCRepository name for the script (creates ephemeral if not specified)zRun and manage Jobs on the Hub.runz	Run a JobFimagecommandenvsecretsenv_filesecrets_fileflavortimeoutdetach	namespacetokenreturnc           	      p   i }|r_|                     t          t          |                                          t          j                                                             |pg D ]B}|                     t          |t          j                                                             Ci }t                      }|rC|                     t          t          |                                          |                     |pg D ]&}|                     t          ||                     't          |
          }|	                    | ||||||	          }t          d|j                    t          d|j                    |rd S |                    |j                  D ]}t          |           d S )Nenvironr(   )r   r   r    r!   r$   r%   r'   Job started with ID: 	View at: job_id)updater   r   	read_textosr,   copy_get_extended_environr   run_jobprintidurlfetch_job_logs)r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   env_map	env_valuesecrets_mapextended_environsecretapijoblogs                      r   jobs_runrD      s    )+G [{4>>#;#;#=#=rzGXGXYYYZZZYB J J	{9bjoo6G6GHHHIIII,.K,.. b;tL'9'9'C'C'E'EO_```aaa-R J J;v7GHHHIIII
5
!
!
!C
++   C 

*#&
*
*+++	
cg

    !!!00  c



 r   logszFetch the logs of a Jobr1   c                 x    t          |          }|                    | |          D ]}t          |           d S Nr-   r1   r'   )r   r;   r8   )r1   r'   r(   rA   rC   s        r   	jobs_logsrI     sM     5
!
!
!C!!9!EE  c



 r   job_propertiesfiltersc                 j   |                                 D ]\  }}|| vr dS d|v sd|v rX|                    dd                              dd          }t          j        d| d| |         t          j                  s dS l|                                | |                                         vr dS dS )	z5Check if scheduled job matches all specified filters.F*?z.*r   ^$T)itemsreplaceresearch
IGNORECASElower)rJ   rK   keypatternregex_patterns        r   _matches_filtersrZ   )  s      Wn$$55'>>SG^^#OOC66>>sCHHM91111>#3FVV uu ]]__N3$7$=$=$?$???55 @4r   rowsheadersfmtc           	         |rd|}| D ]]}|}t          g d          D ]8\  }}d| d}||v r)|                    |t          ||                             }9t          |           ^dS t          t	          | |                     dS )z,Print output according to the chosen format.)r9   r   r   createdstatusz{{.z}})r\   N)	enumeraterR   strr8   	_tabulate)	r[   r\   r]   templaterowlineifieldplaceholders	            r   _print_outputrj   ;  s    
 0 	 	CD%&U&U&UVV B B51e111$&&<<SQ[[AAD$KKKK	 	 	ig.../////r   psz	List Jobsallz-az--allz*Show all Jobs (default shows just running)filterz-fz--filterz>Filter output based on conditions provided (format: key=value)formatz%Format output using a custom templatec                 `   	 t          |          }|                    |          }g d}g }i }	|pg D ]J}
d|
v r1|
                    dd          \  }}||	|                                <   7t	          d|
 d           K|D ]}|j        r|j        j        nd}| s|d	vr|j        }|j        pd
}|j	        pg }|rd
                    |          nd
}|j        r|j                            d          nd
}|||                                |d}t          ||	          s|                    |||||g           |sL|	r4dd
                    d |	                                D                        nd}t	          d|            d S t!          |||           d S # t"          $ r}t	          d|            Y d }~d S d }~wt$          t&          t(          f$ r}t	          d|            Y d }~d S d }~wt*          $ r2}t	          dt-          |          j         d|            Y d }~d S d }~ww xY w)Nr-   r'   )zJOB IDIMAGE/SPACECOMMANDCREATEDSTATUS=r   )Warning: Ignoring invalid filter format ''. Use key=value format.UNKNOWN)RUNNINGUPDATINGN/A %Y-%m-%d %H:%M:%S)r9   r   r`   r    matching filters: r   c                 "    g | ]\  }}| d | S ru    r   kvs      r   r   zjobs_ps.<locals>.<listcomp>  &    0X0X0X1A0X0X0Xr    zNo jobs foundzError fetching jobs data: zError processing jobs data: Unexpected error - : )r   	list_jobssplitrV   r8   r`   stager9   docker_imager   join
created_atstrftimerZ   appendrQ   rj   r   KeyError
ValueError	TypeError	Exceptiontype__name__)rl   r'   r(   rm   rn   rA   jobstable_headersr[   rK   frW   r   rB   r`   r1   image_or_spacecmdcommand_strr   propsfilters_msges                          r   jobs_psr   L  s   6:=u%%%}}y}11QQQ,."$2 	_ 	_AaxxWWS!__
U',		$$]!]]]^^^^ 	S 	SC),BSZ%%F 6)@@@VF !-6N +#C+.9#((3---EK JMb001DEEE]bJ "NfllnnalmmE#E733  KKj&QRRRR  	_fn[dii0X0X0X0X0X&Y&Y[[[ln  /+//000FdM622222 0 0 0.1../////////j), 2 2 20Q00111111111 = = =;DGG$4;;;;<<<<<<<<<=s6   FF F 
H-$F<<H-G..H-;'H((H-inspectz0Display detailed information on one or more Jobsjob_idszThe jobs to inspectc                     t          |          fd| D             }t          t          j        d |D             dt                               d S )Nr-   c                 >    g | ]}                     |           S )rH   )inspect_job)r   r1   rA   r'   s     r   r   z jobs_inspect.<locals>.<listcomp>  s)    VVVFCOO6YO??VVVr   c                 ,    g | ]}t          |          S r   r   )r   rB   s     r   r   z jobs_inspect.<locals>.<listcomp>  s    222cfSkk222r      indentdefaultr   r8   jsondumpsrb   )r   r'   r(   r   rA   s    `  @r   jobs_inspectr     sf     5
!
!
!CVVVVVgVVVD	$*22T2221c
J
J
JKKKKKr   cancelzCancel a Jobc                 T    t          |          }|                    | |           d S rG   )r   
cancel_job)r1   r'   r(   rA   s       r   jobs_cancelr     s0     5
!
!
!CNN&IN66666r   zERun UV scripts (Python with inline dependencies) on HF infrastructureuv)namez8Run a UV script (local file or URL) on HF infrastructurescriptscript_argsrepowith_pythonc                 |   i }|r_|                     t          t          |                                          t          j                                                             |pg D ]B}|                     t          |t          j                                                             Ci }t                      }|rC|                     t          t          |                                          |                     |pg D ]&}|                     t          ||                     't          |          }|	                    | |pg |||||||	||          }t          d|j                    t          d|j                    |
rd S |                    |j                  D ]}t          |           d S )Nr+   r-   )r   r   dependenciesr   r   r    r!   r$   r%   r'   _repor.   r/   r0   )r2   r   r   r3   r4   r,   r5   r6   r   
run_uv_jobr8   r9   r:   r;   )r   r   r   r   r$   r    r!   r"   r#   r%   r&   r'   r(   r   r   r<   r=   r>   r?   r@   rA   rB   rC   s                          r   jobs_uv_runr     s   $ )+G [{4>>#;#;#=#=rzGXGXYYYZZZYB J J	{9bjoo6G6GHHHIIII,.K,.. b;tL'9'9'C'C'E'EO_```aaa-R J J;v7GHHHIIII
5
!
!
!C
..%2   C 

*#&
*
*+++	
cg

    !!!00  c



 r   z,Create and manage scheduled Jobs on the Hub.	scheduledzSchedule a Jobschedulesuspendconcurrencyc                    i }|r_|                     t          t          |                                          t          j                                                             |pg D ]B}|                     t          |t          j                                                             Ci }t                      }|rC|                     t          t          |                                          |                     |pg D ]&}|                     t          ||                     't          |          }|	                    ||| |||||	|
|
  
        }t          d|j                    d S )Nr+   r-   )
r   r   r   r   r   r    r!   r$   r%   r'   Scheduled Job created with ID: )r2   r   r   r3   r4   r,   r5   r6   r   create_scheduled_jobr8   r9   )r   r   r   r   r   r    r!   r"   r#   r$   r%   r'   r(   r<   r=   r>   r?   r@   rA   scheduled_jobs                       r   scheduled_runr     s     )+G [{4>>#;#;#=#=rzGXGXYYYZZZYB J J	{9bjoo6G6GHHHIIII,.K,.. b;tL'9'9'C'C'E'EO_```aaa-R J J;v7GHHHIIII
5
!
!
!C,, -  M 

>M,<
>
>?????r   zList scheduled Jobsz1Show all scheduled Jobs (default hides suspended)z--formatc           
         	 t          |          }|                    |          }g d}g }i }	|pg D ]J}
d|
v r1|
                    dd          \  }}||	|                                <   7t	          d|
 d           K|D ]}|j        pd}| s|r|j        }|j        pd	}|j        j	        pd	}|j        j
        pg }|rd
                    |          nd	}|j        j        r$|j        j        j                            d          nd	}|j        j        r|j        j                            d          nd	}||t#          |          |d}t%          ||	          s|                    |||||||g           |sL|	r4dd                    d |	                                D                        nd}t	          d|            d S t+          |||           d S # t,          $ r}t	          d|            Y d }~d S d }~wt.          t0          t2          f$ r}t	          d|            Y d }~d S d }~wt4          $ r2}t	          dt7          |          j         d|            Y d }~d S d }~ww xY w)Nr-   rp   )IDSCHEDULErq   rr   zLAST RUNzNEXT RUNSUSPENDru   r   rv   rw   Fr{   r|   r}   )r9   r   r   r   r~   r   c                 "    g | ]\  }}| d | S r   r   r   s      r   r   z scheduled_ps.<locals>.<listcomp>k  r   r   r   zNo scheduled jobs foundz$Error fetching scheduled jobs data: z&Error processing scheduled jobs data: r   r   )r   list_scheduled_jobsr   rV   r8   r   r9   r   job_specr   r   r   r`   last_jobatr   next_job_run_atrb   rZ   r   rQ   rj   r   r   r   r   r   r   r   )rl   r'   r(   rm   rn   rA   scheduled_jobsr   r[   rK   r   rW   r   r   r   sj_idr   r   r   r   last_job_atr   r   r   r   s                            r   scheduled_psr   (  s;   82=u%%%0090EEggg,."$2 	_ 	_AaxxWWS!__
U',		$$]!]]]^^^^+ 	o 	oM#+4uG 7 !$E$-6H*3@IEN(06BC+.9#((3---EK !'0$-099:MNNN  !'7$4==>QRRR 
 !>c'll_jkkE#E733 KK.+{Tcelmnnnn 	_fn[dii0X0X0X0X0X&Y&Y[[[ln  9K99:::FdM622222 : : :8Q88999999999j), < < <:q::;;;;;;;;; = = =;DGG$4;;;;<<<<<<<<<=s6   GG G 
I+"G::I+H,,I+9'I&&I+z:Display detailed information on one or more scheduled Jobsscheduled_job_idszThe scheduled jobs to inspectc                     t          |          fd| D             }t          t          j        d |D             dt                               d S )Nr-   c                 >    g | ]}                     |           S )scheduled_job_idr'   )inspect_scheduled_job)r   r   rA   r'   s     r   r   z%scheduled_inspect.<locals>.<listcomp>  s=        	!!3Cy!YY  r   c                 ,    g | ]}t          |          S r   r   )r   r   s     r   r   z%scheduled_inspect.<locals>.<listcomp>  s     PPPf]++PPPr   r   r   r   )r   r'   r(   r   rA   s    `  @r   scheduled_inspectr   y  s{     5
!
!
!C     1  N 
$*PPPPPYZdg
h
h
hiiiiir   deletezDelete a scheduled Jobr   c                 T    t          |          }|                    | |           d S Nr-   r   )r   delete_scheduled_jobr   r'   r(   rA   s       r   scheduled_deleter     4     5
!
!
!C.>)TTTTTr   zSuspend (pause) a scheduled Jobc                 T    t          |          }|                    | |           d S r   )r   suspend_scheduled_jobr   s       r   scheduled_suspendr     s4     5
!
!
!C/?9UUUUUr   resumez Resume (unpause) a scheduled Jobc                 T    t          |          }|                    | |           d S r   )r   resume_scheduled_jobr   s       r   scheduled_resumer     r   r   z(Schedule UV scripts on HF infrastructurec                    i }|
r_|                     t          t          |
                                          t          j                                                             |pg D ]B}|                     t          |t          j                                                             Ci }t                      }|rC|                     t          t          |                                          |                     |	pg D ]&}|                     t          ||                     't          |          }|	                    ||pg | |||||||||||          }t          d|j                    d S )Nr+   r-   )r   r   r   r   r   r   r   r   r    r!   r$   r%   r'   r   r   )r2   r   r   r3   r4   r,   r5   r6   r   create_scheduled_uv_jobr8   r9   )r   r   r   r   r   r   r   r$   r    r!   r"   r#   r%   r'   r(   r   r   r<   r=   r>   r?   r@   rA   rB   s                           r   scheduled_uv_runr     s   ( )+G [{4>>#;#;#=#=rzGXGXYYYZZZYB J J	{9bjoo6G6GHHHIIII,.K,.. b;tL'9'9'C'C'E'EO_```aaa-R J J;v7GHHHIIII
5
!
!
!C

%
%%2 &  C  

4CF
4
455555r   c                    d t          g | |R  D             }t          t          j                    j        t          |          dz            }t          |          t          |          z   |k    r|                    t          |                    }||xx         dz  cc<   t          |          t          |          z   |k    r.|t          |          z
  t          |          z
  ||         z   ||<   t          |          t          |          z   |k     dt          |          z  j        | }g }|	                     |j        |            |	                     |j        d |D                         | D ]9}d t          ||          D             }|	                     |j        |            :d
                    |          S )z
    Inspired by:

    - stackoverflow.com/a/8356620/593036
    - stackoverflow.com/questions/9535954/printing-lists-as-tabular-data
    c                 @    g | ]}t          d  |D                       S )c              3   N   K   | ] }t          t          |                    V  !d S )Nlenrb   )r   xs     r   	<genexpr>z'_tabulate.<locals>.<listcomp>.<genexpr>  s.      //ac#a&&kk//////r   )max)r   cols     r   r   z_tabulate.<locals>.<listcomp>  s/    OOOC#//3/////OOOr         z{{:{}}} c                     g | ]}d |z  S )-r   )r   ws     r   r   z_tabulate.<locals>.<listcomp>  s    $A$A$AS1W$A$A$Ar   c                     g | ]Q\  }}t          t          |                    |k    rt          |          d |dz
           dz   nt          |          RS )N   z...r   )r   r   	col_widths      r   r   z_tabulate.<locals>.<listcomp>  sf     
 
 
9 033q66{{Y/F/FCFF?Y]?#e++CPQFF
 
 
r   
)zipr   r4   get_terminal_sizecolumnsr   sumindexrn   r   r   )	r[   r\   
col_widthsterminal_widthcol_to_minimize
row_formatlinesre   row_format_argss	            r   rc   rc     s    PO3;N;Ng;N;N;NOOOJ-//7W9JKKN
g,,Z
(>
9
9$**3z??;;?###)###w<<#j//)^;;*83z??*JSQX\\*Y\fgv\w*wJ'	 g,,Z
(>
9
9
 4*s7||+3Z@JE	LL""G,---	LL""$A$Aj$A$A$ABCCC : :
 
 #C 4 4
 
 
 	&Z&8999999Ur   c                  l    t           j                                        } t                      x}|| d<   | S )NHF_TOKEN)r4   r,   r5   r   )r?   r(   s     r   r6   r6      s4    z(()',$r   )	NNNNNNFNN)NN)FNNNN)NNNNNNNNNFNNNN)
NNNNNNNNNN)NNNNNNNNNNNNNNN)S__doc__r   r4   rS   dataclassesr   pathlibr   typingr   r   r   r	   typerhuggingface_hubr
   r   huggingface_hub.errorsr   huggingface_hub.utilsr   huggingface_hub.utils._dotenvr   
_cli_utilsr   r   r   
get_loggerr   loggerSUGGESTED_FLAVORSrb   ArgumentImageArgOptionImageOptr   	FlavorOptlistEnvOpt
SecretsOpt
EnvFileOptSecretsFileOpt
TimeoutOptbool	DetachOptNamespaceOptWithOpt	PythonOpt
SuspendOptConcurrencyOptScheduleArg	ScriptArgScriptArgsArg
CommandArgJobIdArgScheduledJobIdArgRepoOptjobs_clir   rD   rI   dictrZ   intrj   r   r   r   uv_app	add_typerr   scheduled_appr   r   r   r   r   r   scheduled_uv_appr   rc   r6   r   r   r   <module>r;     sj  ' 'R  				 				             3 3 3 3 3 3 3 3 3 3 3 3  4 4 4 4 4 4 4 4 1 1 1 1 1 1 ) ) ) ) ) ) 5 5 5 5 5 5 ; ; ; ; ; ; ; ; ; ; 
	H	%	%WWMWWW  EN'   SMEL=   ]EL Ddhdmdmn  eA  eA  D  D  D  	 
T#YEL>  
 T#YEL F  
 SMEL7  
 SMEL>   SMELe  
 ELB  	 SMELe   T#YEL4   SMELD  	 TNEL0  
 TNELG   ENf   EN3  	 T#YEN'   IEN"  
 EN   EN    SMELR   =?@@@ 
%k** #'", ,,, 
, 	,
 , !, , , , , , 
, , , +*,^ 
&899 #   
	   :9T#s(^ d38n QU    $0T%S/23 0d3i 0hWZm 0`d 0 0 0 0" 
$[)) 	" 	 	1T= T=	=	
 	
 	
	
T= T= T= cQ	
 	
 	
	T=& 8	
 	
 	
	'T=2 
3T= T= T= *)T=n 
)"TUU #L LS	&	
 	
 	
	L L L 
L L L VUL 
(00 #7 777 7 
	7 7 7 107 
c	d	d	d   6  % % % VWW "&#'"2 222 2 	2
 2 
2 2 2 !2 2 2 2 2 2 2  
!2 2 2 XW2j #QRRR   ={  3 3 3 u#344
 "&#'"(@ (@(@(@ (@ 	(@
  (@ 
(@ (@ (@ !(@ (@ (@ (@ (@ 
(@ (@ (@ 54(@V t"788 	" 	 	3M= M=	D	
 	
 	
	
M= M= M= cQ	
 	
 	
	M=& 8	
 	
 	
	'M=4 
5M= M= M= 98M=` y'cdd #j j S	0	
 	
 	
	j j j 
j j j edj$ x&>?? #U U'UU U 
	U U U @?U y'HII #V V'VV V 
	V V V JIV x&HII #U U'UU U 
	U U U JIU !=&PQQQ    (t  4 4 4 %&`aa "&"&#'"#06 060606 06 	06
  06 06 06 06 
06 06 06 !06 06 06 06  !06" #06$ 
%06 06 06 ba06lDeCHo./ $s)     6tCH~      r   