
    ]hXh                       S r SSKJr  SSKJr  SSKrSSKr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  SSKJr  SSKJr  S	S
KJr  S	SKJr  S	SKJr  S	SKJr  S	SKJr  S	SKJr  S	SKJr  S	SKJ r   S	SK!J"r"  S	SK#J$r$  \RJ                  " S5      r&\RN                  S:X  a  Sr(Sr)OSr(Sr) " S S\RT                  \&   5      r+S)S*S jjr,        S+S jr-        S+S jr.        S,S jr/ " S  S!5      r0S-S.S" jjr1S/S# jr2\
Rf                  S$:X  a  SSK4r4\Rj                  S0S% j5       r6S1S& jr7gSSK8r8SSK9r9\Rj                  S0S' j5       r6S1S( jr7g)2z
This module contains implementations for the termui module. To keep the
import time of Click down, some infrequently used functionality is
placed in this module and only imported as needed.
    )annotationsN)gettext)StringIO)Path)which)TracebackType   )_default_text_stdout)CYGWIN)get_best_encoding)isatty)open_stream)
strip_ansi)term_len)WIN)ClickException)echoVnt
z[?25lz[?25h
c                  h   \ rS rSr               S                                 SS jjrSS jr        SS jrSS jrSS jrSS jr	\
SS	 j5       r\
SS
 j5       r\
SS j5       rSS jrSS jrSS jrSS jrSS jrSS jrS S jrS!S"S jjrSS jrSS jrSrg)#ProgressBar,   Nc                   X0l         X@l        XPl        X`l        Xpl        Xl        Xl        Xl        Xl        U=(       d    SU l	        Uc  [        5       nUc
  [        5       nXl        Xl        Xl        SU l        UU l        US:H  U l        Uc  SSKJn  U" US5      nUS:X  a  S nUc.  Uc  [)        S5      e[*        R,                  " S[/        U5      5      n[1        U5      U l        X l        SU l        / U l        U   U   [8        R8                  " 5       =U l        U l        SU l        SU l         S U l!        SU l"        S U l#        [I        U R                  5      U l%        S U l&        g )N r   )length_hintziterable or length is requiredzcabc.Iterable[V]F)'	fill_char
empty_charbar_templateinfo_sephiddenshow_etashow_percentshow_positem_show_funclabelr
   r   filecolorupdate_min_steps_completed_intervalswidth	autowidthoperatorr   	TypeErrortcastrangeiterlengthposavgtimestartlast_eta	eta_knownfinished	max_widthenteredcurrent_itemr   _is_atty
_last_line)selfiterabler5   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r-   r   s                     D/var/www/html/env/lib/python3.13/site-packages/click/_termui_impl.py__init__ProgressBar.__init__-   sC   & #$(  ( ,+2
<')D |z	
 0$%!
$z>, 2.F|~ @AAvv0%-@H&*8n	 "%)YY[0
T]$#%)"&*tyy)&*    c                4    SU l         U R                  5         U $ )NT)r>   render_progressrB   s    rD   	__enter__ProgressBar.__enter__t   s    rG   c                $    U R                  5         g N)render_finish)rB   exc_type	exc_valuetbs       rD   __exit__ProgressBar.__exit__y   s     	rG   c                z    U R                   (       d  [        S5      eU R                  5         U R                  5       $ )N.You need to use progress bars in a with block.)r>   RuntimeErrorrI   	generatorrJ   s    rD   __iter__ProgressBar.__iter__   s.    ||OPP~~rG   c                *    [        [        U 5      5      $ rN   )nextr4   rJ   s    rD   __next__ProgressBar.__next__   s     DJrG   c                    U R                   (       d  U R                  (       d  g U R                  R                  [        5        U R                  R                  5         g rN   )r#   r@   r)   write	AFTER_BARflushrJ   s    rD   rO   ProgressBar.render_finish   s0    ;;dmm			"		rG   c                    U R                   (       a  g[        U R                  [        U R                  =(       d    S5      =(       d    S-  S5      $ )N      ?r	   )r<   minr6   floatr5   rJ   s    rD   pctProgressBar.pct   s5    ==488uT[[%5A6;!<cBBrG   c                    U R                   (       d  g[        U R                   5      [        [        U R                   5      5      -  $ Ng        )r7   sumrg   lenrJ   s    rD   time_per_iterationProgressBar.time_per_iteration   s,    xx488}uS]333rG   c                    U R                   b7  U R                  (       d&  U R                  U R                   U R                  -
  -  $ grk   )r5   r<   rn   r6   rJ   s    rD   etaProgressBar.eta   s3    ;;"4==**dkkDHH.DEErG   c                    U R                   (       aV  [        U R                  5      nUS-  nUS-  nUS-  nUS-  nUS-  nUS-  nUS:  a  U SUS SUS SUS 3$ US SUS SUS 3$ g)N<      r   zd 02:r   )r;   intrq   )rB   r1   secondsminuteshourss        rD   
format_etaProgressBar.format_eta   s    >>DHHA"fG"HA"fG"HAFE"HA1uBuRj'"QwrlCC1WRL'">>rG   c                n    [        U R                  5      nU R                  b  USU R                   3-  nU$ )N/)strr6   r5   )rB   r6   s     rD   
format_posProgressBar.format_pos   s3    $((m;;"Qt{{m$$C
rG   c                @    [        U R                  S-  5      S S3SS  $ )Nd   z 4%r	   )rx   rh   rJ   s    rD   
format_pctProgressBar.format_pct   s&    dhhn%b)+AB//rG   c                ^   U R                   bQ  [        U R                  U R                  -  5      nU R                  U-  nX R
                  U R                  U-
  -  -  nU$ U R                  (       a  U R                  U R                  -  nU$ [        U R
                  U R                  =(       d    S-  5      nU R                  S:w  aV  U R                  U[        [        R                  " U R                  U R                  -  5      S-  S-   U R                  -  5      '   SR                  U5      nU$ )Nr	   r   g       @g      ?r   )r5   rx   rh   r-   r   r    r<   listrn   mathcosr6   join)rB   
bar_lengthbarcharss       rD   
format_barProgressBar.format_bar   s    ;;"TXX

23J..:-C??djj:&=>>C 
 ]]..4::-C 
 DJJO!<=E&&!+ NN $((T-D-D"DEKcQ**% ''%.C
rG   c                   U R                   n/ nU R                  b  Uc  U R                  (       + nU R                  (       a  UR                  U R	                  5       5        U(       a  UR                  U R                  5       5        U R                  (       aA  U R                  (       a0  U R                  (       d  UR                  U R                  5       5        U R                  b/  U R                  U R                  5      nUb  UR                  U5        U R                  U R                  U R                  5       U R                  R!                  U5      S.-  R#                  5       $ )N)r(   r   info)r%   r5   r&   appendr   r   r$   r;   r<   r|   r'   r?   r!   r(   r   r"   r   rstrip)rB   r%   	info_bits	item_infos       rD   format_progress_line ProgressBar.format_progress_line   s   ((	;;"|';#}},L==T__./T__./==T^^DMMT__./*++D,=,=>I$  + (**95 &(	rG   c                h   SS K nU R                  (       a  g U R                  (       dU  U R                  U R                  :w  a:  U R                  U l        [        U R                  U R                  U R                  S9  g / nU R                  (       a  U R                  nSU l	        [        U R                  5       5      n[        SUR                  5       R                  U-
  5      nXS:  aF  U R                  b9  UR!                  ["        5        UR!                  SU R                  -  5        XPl        XPl	        U R                  nU R                  b  U R                  nUR!                  ["        5        U R                  5       n[        U5      nU R                  b  U R                  U:  a  Xl        UR!                  U5        UR!                  SXh-
  -  5        SR%                  U5      nXpR                  :w  a@  Xpl        [        XpR                  U R                  SS9  U R                  R'                  5         g g )Nr   )r)   r*    r   F)r)   r*   nl)shutilr#   r@   rA   r(   r   r)   r*   r.   r-   r   r   maxget_terminal_sizecolumnsr=   r   
BEFORE_BARr   rb   )	rB   r   buf	old_widthclutter_length	new_widthclear_widthlineline_lens	            rD   rI   ProgressBar.render_progress   s   ;;}}$**,"&**TZZdiitzzB>>

IDJ%d&?&?&ABNAv779AANRSI$)C

:&

3/0!*"Jjj>>%..K

:((*D>>>!T^^h%>%N

4

3+012wws| ??""OIITZZEBIIOO #rG   c                (   U =R                   U-  sl         U R                  b!  U R                   U R                  :  a  SU l        [        R                  " 5       U R                  -
  S:  a  g [        R                  " 5       U l        U R                   (       a0  [        R                  " 5       U R
                  -
  U R                   -  nO"[        R                  " 5       U R
                  -
  nU R                  SS  U/-   U l        U R                  S LU l        g )NTre   i)r6   r5   r<   r8   r:   r9   r7   r;   )rB   n_stepssteps      rD   	make_stepProgressBar.make_step  s    G;;"txx4;;'> DMIIK$--'3.		
 88IIK$**,8D99;+D88BC=D6)D0rG   c                    Ub  X l         U =R                  U-  sl        U R                  U R                  :  a3  U R                  U R                  5        U R	                  5         SU l        gg)a  Update the progress bar by advancing a specified number of
steps, and optionally set the ``current_item`` for this new
position.

:param n_steps: Number of steps to advance.
:param current_item: Optional item to set as ``current_item``
    for the updated position.

.. versionchanged:: 8.0
    Added the ``current_item`` optional parameter.

.. versionchanged:: 8.0
    Only render when the number of steps meets the
    ``update_min_steps`` threshold.
Nr   )r?   r,   r+   r   rI   )rB   r   r?   s      rD   updateProgressBar.update1  s`      # ,!!W,!$$(=(==NN4445  "()D% >rG   c                .    SU l         S U l        SU l        g )NFT)r;   r?   r<   rJ   s    rD   finishProgressBar.finishK  s     rG   c              #  p  #    U R                   (       d  [        S5      eU R                  (       d  U R                   Sh  vN   gU R                   H>  nXl        U R
                  S:X  a  U R                  5         Uv   U R                  S5        M@     U R                  5         U R                  5         g Nt7f)zReturn a generator which yields the items added to the bar
during construction, and updates the progress bar *after* the
yielded block returns.
rV   Nr   r	   )	r>   rW   r@   r4   r?   r,   rI   r   r   )rB   rvs     rD   rX   ProgressBar.generatorP  s      ||OPP}}yy  ii$&!
 ,,1((*A   KKM  " !s   =B6B4 A5B6)r,   r@   rA   r.   r7   r!   r*   r?   r    r>   r;   r)   r   r<   r#   r"   r'   r4   r(   r:   r5   r=   r6   r$   r%   r&   r9   r+   r-   )N#r   z%(bar)sz  FTNFNNNNr	      )"rC   zcabc.Iterable[V] | Noner5   z
int | Noner   r   r    r   r!   r   r"   r   r#   boolr$   r   r%   bool | Noner&   r   r'   z)t.Callable[[V | None], str | None] | Noner(   
str | Noner)   zt.TextIO | Noner*   r   r+   rx   r-   rx   returnNone)r   zProgressBar[V])rP   ztype[BaseException] | NonerQ   zBaseException | NonerR   zTracebackType | Noner   r   )r   zcabc.Iterator[V])r   r   )r   r   )r   rg   r   r   )r   rx   r   r   rN   )r   rx   r?   zV | Noner   r   )__name__
__module____qualname____firstlineno__rE   rK   rS   rY   r]   rO   propertyrh   rn   rq   r|   r   r   r   r   rI   r   r   r   rX   __static_attributes__ rG   rD   r   r   ,   s    "%$(DH  $! !#E+)E+ E+ 	E+
 E+ E+ E+ E+ E+ "E+ E+ BE+ E+ E+ E+  !E+" #E+$ 
%E+N
, ( !	
 
   C C
 4 4
  
0&6,\1,*4
#rG   r   c                   [        5       nUc
  [        5       n[        [        R                  5      (       a  [        U5      (       d  [        X U5      $ [        R                  " [        R                  R                  SS5      SS9nU(       a0  [        (       a  [        XU5      (       a  gO[        XU5      (       a  g[        R                  R                  S5      S;   a  [        X U5      $ [        (       d$  [        R                  R                  S5      (       a  [        U S	/U5      (       a  g[        U S
/U5      (       a  gSSKnUR#                  5       u  pV[        R$                  " U5         [        U S	/U5      (       a   [        R&                  " U5        g[        X U5      [        R&                  " U5        $ ! [        R&                  " U5        f = f)z2Decide what method to use for paging through text.NPAGERr   F)posixTERM)dumbemacsos2morelessr   )r
   r   r   sysstdin
_nullpagershlexsplitosenvirongetr   _tempfilepager
_pipepagerplatform
startswithtempfilemkstempcloseunlink)rX   r*   stdoutpager_cmd_partsr   fdfilenames          rD   pagerr   r  s_   !#F ~#))F6NN&U33 kk"**..""=UKO3i%@@ A	E::	zz~~f!22&U33s||&&u-->F8U4 4 	)fXu--##%LBHHRLi&511 			( &U3
		(		(s   /F< F< <Gc           	        U(       d  gUS   nUSS n[        U5      nU(       d  g[        U5      R                  5       nUR                  nSSKn[        [        R                  5      n	UcV  US:X  aP  [        R                  R                  SS5       SR                  U5       3n
U
(       d  S	U	S'   S
nOSU
;   d  SU
;   a  S
nUR                  [        U5      /U-   S
UR                  U	SS
S9nUR                  c   e U  H0  nU(       d  [        U5      nUR                  R                  U5        M2      UR                  R'                  5           UR)                  5          g
! [          a     N;["         a  nUR%                  5         UeSnAff = f! [          a     NOf = f! [*         a     Of = fMd  !  UR                  R'                  5         O! [          a     Of = f  UR)                  5         f ! [*         a     Of = fM$  = f)zPage through text by feeding it to another program. Invoking a
pager through this might support colors.

Returns `True` if the command was found, `False` otherwise and thus another
pager should be attempted.
Fr   r	   Nr   LESSr   r   -RTrRreplace)shellr   enverrorstext)r   r   resolvename
subprocessdictr   r   r   r   Popenr   PIPEr   r   r`   BrokenPipeError	Exception	terminater   waitKeyboardInterrupt)rX   	cmd_partsr*   cmd
cmd_paramscmd_filepathcmd_pathcmd_namer   r   
less_flagscr   es                 rD   r   r     s
    
A,C12J:LL!))+H}}H rzz
C }V+

vr23CHHZ4H3IJ
CKEJ#"3E	X*$oo 	 	A 77'D!$'GGMM$	 "	GGMMO  G   
 	
  		 %  	GGMMO  		   %  s   <6E! 3F F  !
F+F2 -	F6FFF2 
FF 
F-,F-2H4GH
GHGH!G21H2
G?<H>G??Hc                   U(       d  gUS   n[        U5      nU(       d  g[        U5      R                  5       nSSKnSSKnUR                  5       u  pSR                  U 5      n
U(       d  [        U
5      n
[        [        R                  5      n[        U	S5      S    nUR                  U
R                  U5      5        SSS5         UR                  [        U5      U	/5        ["        R$                  " U5        ["        R&                  " U	5        g! , (       d  f       NX= f! [          a     NJf = f! ["        R$                  " U5        ["        R&                  " U	5        f = f)zPage through text by invoking a program on a temporary file.

Returns `True` if the command was found, `False` otherwise and thus another
pager should be attempted.
Fr   Nr   wbT)r   r   r   r   r   r   r   r   r   r   r   r   r`   encodecallr   OSErrorr   r   r   )rX   r   r*   r   r   r   r   r   r   r   r   encodingfs                rD   r   r     s    
A,C:LL!))+H##%LB779D$ ,H	Xt	$Q	'1	H%& 
(X12
 	
		( 
(	'   	
		(s0   !D	D# 
D #
D0-D3 /D00D3 3.E!c                \    U H&  nU(       d  [        U5      nU R                  U5        M(     g)z>Simply print unformatted text.  This is the ultimate fallback.N)r   r`   )streamrX   r*   r   s       rD   r   r      s'     d#DT rG   c                      \ rS rSr    S
         SS jjrSS jrSS jr\R                  SS j5       r	\R                  SS j5       r	SS jr	S	r
g)Editori*  Nc                4    Xl         X l        X0l        X@l        g rN   )editorr   require_save	extension)rB   r  r   r  r  s        rD   rE   Editor.__init__+  s     ("rG   c                    U R                   b  U R                   $ S H-  n[        R                  R                  U5      nU(       d  M+  Us  $    [        (       a  gS H  n[        U5      c  M  Us  $    g)N)VISUALEDITORnotepad)zsensible-editorvimnanovi)r  r   r   r   r   r   )rB   keyr   r  s       rD   
get_editorEditor.get_editor7  sd    ;;";;%C$Br	 & 36FV}( 7 rG   c                   SS K nU R                  5       nS nU R                  (       a9  [        R                  R                  5       nUR                  U R                  5        SR                  S U 5       5      n UR                  U SU 3USS9nUR                  5       nUS:w  a!  [        [        S5      R                  US95      eg ! [         a'  n[        [        S5      R                  X8S	95      UeS nAff = f)
Nr   r   c              3  .   #    U  H  nS U S 3v   M     g7f)"Nr   ).0r   s     rD   	<genexpr>$Editor.edit_files.<locals>.<genexpr>O  s     J	H!H:Q	s   T)argsr   r   z{editor}: Editing failed)r  z{editor}: Editing failed: {e})r  r  )r   r  r   r   r   copyr   r   r   r   r   _formatr  )	rB   	filenamesr   r  r   exc_filenamer  	exit_coder  s	            rD   
edit_filesEditor.edit_filesE  s    ")-88jjoo'GNN488$xxJ	JJ	  xq/WD ! A IA~$01888G    	 12999M	s   :AC 
C9"C44C9c                    g rN   r   rB   r   s     rD   editEditor.edit_  s    =@rG   c                    g rN   r   r-  s     rD   r.  r/  d  s    47rG   c                   SS K nUc  SnO~[        U[        [        45      (       a  UnO`U(       a  UR	                  S5      (       d  US-  n[
        (       a"  UR                  SS5      R                  S5      nOUR                  S5      nUR                  SU R                  S9u  pE [        R                  " US	5       nUR                  U5        S S S 5        [        R                  " U[        R                  R                  U5      [        R                  R!                  U5      S
-
  45        [        R                  R!                  U5      nU R#                  U45        U R$                  (       a;  [        R                  R!                  U5      U:X  a   [        R&                  " U5        g [)        US5       nUR+                  5       nS S S 5        [        U[        [        45      (       a  W[        R&                  " U5        $ WR-                  S5      R                  SS5      [        R&                  " U5        $ ! , (       d  f       GNq= f! , (       d  f       N= f! [        R&                  " U5        f = f)Nr   rG   r   z
z	utf-8-sigzutf-8zeditor-)prefixsuffixr     rb)r   
isinstancebytes	bytearrayendswithr   r   r  r   r  r   fdopenr`   utimepathgetatimegetmtimer*  r  r   openreaddecode)	rB   r   r   datar   r   r	  	timestampr   s	            rD   r.  r/  g  s   <Dui011DDMM$//s||D&188E{{7+##9T^^#L	2t$ % HHTBGG,,T2BGG4D4DT4JQ4NOP ((.IOOTG$  RWW%5%5d%;y%H IIdO dD!QVVX " $	 233 IIdO 99[)11&$?IIdO3 %$" "! IIdOsI   &I =H9CI *I 6I$I  I 9
II 
II I4)r  r   r  r  )NNTz.txt)
r  r   r   zcabc.Mapping[str, str] | Noner  r   r  r   r   r   r   )r'  cabc.Iterable[str]r   r   )r   zbytes | bytearrayr   zbytes | None)r   r   r   r   )r   zstr | bytes | bytearray | Noner   zstr | bytes | None)r   r   r   r   rE   r  r*  r1   overloadr.  r   r   rG   rD   r  r  *  s|     "-1!
#
# +
# 	
#
 
# 

#4 ZZ@ @ ZZ7 7-rG   r  c                   SS K nSS jn[        R                  S:X  a  S/nU(       a  UR                  S5        U(       a  UR                  S5        UR                  U" U 5      5        [	        SS5      n UR                  XVS	9R                  5       UR                  5         $ [        (       af  U(       a  U" U 5      n S
SU  3/nO=S/nU(       a  UR                  S5        UR                  S5        UR                  U 5         UR                  U5      $ [        (       ao  U(       a*  U" U 5      n S[        R                  R                  U 5      /nO,S/nU(       a  UR                  S5        UR                  U 5         UR                  U5      $  U(       a/  [        R                  R                  U" U 5      5      =(       d    Sn OU" U 5      n UR                  SU /5      nU(       a  UR                  5       $ g! UR                  5         f = f! [         a     gf = f! [         a     gf = f! [         a>    U R                  S5      (       a%  U(       d  U(       d  SS KnUR	                  U 5         g gf = f)Nr   c                T    SSK Jn  U R                  S5      (       a  U" U SS  5      n U $ )Nr   )unquotezfile://   )urllib.parserH  r   )urlrH  s     rD   _unquote_fileopen_url.<locals>._unquote_file  s)    (>>)$$#ab'"C
rG   darwinr?  z-Wr   z	/dev/nullw)stderrexplorerz/select,r9   z/WAITr      cygstartz-w.zxdg-open)zhttp://zhttps://r	   )rK  r   r   r   )r   r   r   r   r?  r   r   r   r   r  r  r   r   r<  dirnamer   
webbrowser)	rK  r   locater   rL  r#  nullr  rV  s	            rD   open_urlrY    s    ||xxKKKKM#&'K%	##D#6;;=JJL	$C(3% 01D9DG$KKOKK	??4(( 
$C 45D<DD!KK	??4((
''//-"45<C$Cj#./668OO JJL  		  		  >>1226$OOC sD   5G7 H <H A'H, 7H	
HH
H)(H),AI43I4c                    U S:X  a
  [        5       eU S:X  a  [        (       d
  [        5       eU S:X  a  [        (       a
  [        5       eg )N)r   r   EOFError)chs    rD   _translate_ch_to_excr`    s;    	V|!!	V|CCj	V|jrG   win32c               #     #    Sv   g 7f)Nr   r   r   rG   rD   raw_terminalrc    s
     s   c                H   U (       a=  [         R                  " [         R                  / [        4   [        R
                  5      nO<[         R                  " [         R                  / [        4   [        R                  5      nU" 5       nUS;   a	  X!" 5       -  n[        U5        U$ )N)    à)r1   r2   Callabler   msvcrtgetwchegetwchr`  )r   funcr   s      rD   getcharrl    ss    > 66!**RW-v~~>D66!**RW-v}}=DV!! $&LBR 	rG   c               #    #    [        [        R                  5      (       d  [        S5      n U R	                  5       nO [        R                  R	                  5       nS n  [
        R                  " U5      n [        R                  " U5        Uv   [
        R                  " U[
        R                  U5        [        R                  R                  5         U b  U R                  5         g g ! [
        R                  " U[
        R                  U5        [        R                  R                  5         U b  U R                  5         f f = f! [
        R                   a     g f = f7f)Nz/dev/tty)r   r   r   r?  filenotermios	tcgetattrttysetraw	tcsetattr	TCSADRAINr   rb   r   error)r	  r   old_settingss      rD   rc  rc  $  s     
 cii  Z AB!!#BA	",,R0L

2!!"g&7&7F

  "=GGI ! !!"g&7&7F

  "=GGI !}} 		sD   AEE 5C( AE &E(AEE EEEEc                j   [        5        n[        R                  " US5      R                  [	        [
        R                  5      S5      nU (       a=  [        [
        R                  5      (       a  [
        R                  R                  U5        [        U5        UsS S S 5        $ ! , (       d  f       g = f)N    r   )rc  r   r@  rA  r   r   r   r   r   r`   r`  )r   r   r_  s      rD   rl  rl  ?  sg    ^rR''(9#))(DiPBszz**

  $ $ ^^s   BB$$
B2rN   )rX   rD  r*   r   r   r   )rX   rD  r   z	list[str]r*   r   r   r   )r  zt.TextIOrX   rD  r*   r   r   r   )FF)rK  r   r   r   rW  r   r   rx   )r_  r   r   r   )r   zcabc.Iterator[int])r   r   r   r   ):__doc__
__future__r   collections.abcabccabc
contextlibr   r   r   r   r8   typingr1   r   r%  ior   pathlibr   r   r   typesr   _compatr
   r   r   r   r   r   r   r   
exceptionsr   utilsr   TypeVarr   r   r   ra   Genericr   r   r   r   r   r  rY  r`  r   rh  contextmanagerrc  rl  ro  rq  r   rG   rD   <module>r     s   #    	  
         )  &       & IIcN77d?JIJIC#!))A, C#L
'TW!W.7W@KW	Wt'!'.7'@K'	'T!3<G	j jZDN
 <<7 ,^  4rG   