
    jQ                        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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 d dlmZmZ d dlZd dlmZmZ dZdd	gZ e	j        d
          ZeZeZ e!Z"e	j        ee	j#        e         f         Z$e	j#        e         Z%e	j&        dej'        j(        f         Z)e	j*        e	j+        e	j&        def         ej'        j(        f         Z,e	j+        ej'        j(                 Z-e	j*        e-e)f         Z.e	j&        Z/ ej0        d          Z1 G d de2          Z3 G d de3          Z4 G d de5e3          Z6 G d de2          Z7ej8        dk    Z9d e:            dde.dede	j;        e	j&                 de	j<        e         de/f
dZ=de	j&        dede/fdZ>de	j;        e,         de	j+        ej'        j(                 fdZ?de	j;        e@         dej'        j#        fd ZAd!d"d#e	j*        ee	jB        f         d$ede	jB        fd%ZCdddd&d#e	j*        ee	j        f         d'e	j;        e,         d(e	j;        e,         d)e	j;        e,         de	j        f
d*ZDd#efd+ZE e	j        d,e-          ZFd<d/e	j+        eF         d0edeFfd1ZGd#edeHfd2ZId#edeHfd3ZJd#edeHfd4ZK G d5 d6ej'        jL                  ZM G d7 d8ej'        jN                  ZO G d9 d:ej'        jP                  ZQ G d; d	          ZRdS )=    N)Mapping)Enum)Path)ParseResulturlparse)_walk_to_rootload_dotenvz9.5.0EnvErrorEnv_T.z((?<!\\)\$\{([A-Za-z0-9_]+)(:-[^\}:]*)?\}c                       e Zd ZdZdS )r
   zSRaised when an environment variable or if a required environment variable is unset.N__name__
__module____qualname____doc__     [/lsinfo/ai/hellotax_ai/base_platform/venv/lib/python3.11/site-packages/environs/__init__.pyr
   r
   (   s        ]]]]r   c                   B     e Zd Zdedej        eef         f fdZ xZ	S )EnvValidationErrormessageerror_messagesc                 X    || _         t                                          |           d S N)r   super__init__)selfr   r   	__class__s      r   r   zEnvValidationError.__init__-   s)    ,!!!!!r   )
r   r   r   strtypingUnion	ErrorListErrorMappingr   __classcell__r   s   @r   r   r   ,   sW        " "V\)\BY5Z " " " " " " " " " "r   r   c                       e Zd ZdS )EnvSealedErrorN)r   r   r   r   r   r   r(   r(   2   s        Dr   r(   c                       e Zd ZdZdS )ParserConflictErrorzPRaised when adding a custom parser that conflicts with a built-in parser method.Nr   r   r   r   r*   r*   6   s        ZZZZr   r*   )      
preprocesspreprocess_kwarg_namesfield_or_factorymethod_namer.   r/   returnc                6    t           j        d ft           j        t           j        d dd d d ddddt          dt          j        dt          j        t                   dt          j        d	t          j        d
t          j        t          j        t          j        t          j        gt          j        f         t          j	        t          j        t          j        gt          j        f                  f                  dt          dt          j        t                   dt          j        t          j        t          t          f                  dt          j        t          j        t          t          j        f                  dt          j        t                   f fd}||_        |S )NF)load_defaultmissingvalidaterequired
allow_noner   metadatar   r   namedefaultsubcastr4   r5   r6   r7   r8   r   r9   r2   c                   | j         rt          d          t          ||||	|
          }fdD             }t          r|p||d<   n|p||d<   t	          t
                    r*t          t          j        j	                  r di |}nt          |          } dd|i|}|                     |t          r|j        n|j                  \  }}}|| j        |<   |p|}|t          j        u rM| j        r$t!          d                    |p|                    | j        |                             d           d S 	 r	 |fi |}|                    |          }|| j        |<   n}# t          j        $ rk}| j        r5t/          d	                    ||j        d
                   |j                  || j        |                             |j                   Y d }~nd }~ww xY w|S )N9Env has already been sealed. New values cannot be parsed.)r6   r7   r8   r   r9   c                 D    i | ]}|v |                     |          S r   )pop).0r:   kwargss     r   
<dictcomp>z1_field2method.<locals>.method.<locals>.<dictcomp>b   s3    iiiZ^bhZhZhT6::d#3#3ZhZhZhr   r4   r5   r<   !Environment variable "{}" not setEnvironment variable not set.%Environment variable "{}" invalid: {}r   r   )_sealedr(   dict_SUPPORTS_LOAD_DEFAULT
isinstancetype
issubclassmafieldsField_make_subcast_field_get_from_environr4   r5   _fieldseagerr
   format_errorsappenddeserialize_valuesValidationErrorr   argsmessagesextend)r   r:   r;   r<   r4   r5   r6   r7   r8   r   r9   rB   field_kwargspreprocess_kwargsfieldparsed_subcast
parsed_keyvalueproxied_key
source_keyerrorr0   r.   r/   s              `         r   methodz_field2method.<locals>.methodD   s   * < 	^ !\]]]!)
 
 
 jiii@Viii! 	9+7+B7L((&-&8L#&-- 	M*=Mry2_2_ 	M$$>>|>v>>EE099N$$LL^L|LLE)-)?)?(>Q%$$EM*
 *
&
E; $)Z  .J
BJz BII+JcYcddeeeZ(//0OPPPt	- ?"
5>>,=>>%%e,,E (-DL$$ ! 	< 	< 	<z (;BB:uzZ[}]]_d_m  L$++EN;;;;;;;;	< s     E+ +G%:A!G  G%)rM   r5   r    r!   AnyOptionalSubcastr"   CallableIterableboolDictr   r   r   )r0   r1   r.   r/   rf   s   ` `` r   _field2methodrn   =   s    !j,0	@ $&: j ,0AEEI%@ @ @@@ @ )	@ j@ @ /Lfj 89fj0H IJL
@ @  OD)!@" CH(=>#@$ /&.fj"AB%@( 
	)@ @ @ @ @ @ @ @D "FOMr   funcc                      t           j        d fdddt          dt          j        dt          j        t          j                 dt          j        t                   f
 fd}||_        |S )Nr   r   r:   r;   r<   r2   c                    | j         rt          d          |                     ||          \  }}}t          j                                        | j        |<   |p|}|t          j        u rM| j        r$t          d
                    |p|                    | j        |                             d           d S |s|dk    r|}	nd }		  |fi |}	|	| j        |<   n# t          t          j        f$ r}
t          |
t          j                  r|
j        n|
j        d         g}| j        r0t%          d
                    ||
j        d                   |          |
| j        |                             |           Y d }
~
nd }
~
ww xY w|	S )Nr>   rD   rE    r   rF   )rG   r(   rQ   rM   rN   rO   rR   r5   rS   r
   rT   rU   rV   rX   rY   rJ   r[   rZ   r   r\   )r   r:   r;   r<   rB   ra   	raw_valuerc   rd   rb   re   r[   ro   s               r   rf   z_func2method.<locals>.method   s    < 	^ !\]]]-1-C-CD'-R-R*
I{#%9??#4#4Z  .J

""z BII+JcYcddeeeZ(//0OPPPt 		REEE
	-D--f--E (-DL$$ ",- 	6 	6 	6)3E2;M)N)Ncu~~UZU_`aUbTcHz (;BB:uzZ[}]]_g  L$++H55555555	6 s   	C E?/BE::E?)	rM   r5   r    r!   rg   rh   Typer   r   )ro   r1   rf   s   `  r   _func2methodru      s     !j04	! !!! ! -	! 
	! ! ! ! ! !F "FOMr   r<   c                 z    t           t                    r+ t          j        j        v rt          j        j                  }nyt           t                    r"t           t          j        j                  r }nBt                     r" G  fddt          j        j                  }|}nt          j        j        }|S )Nc                       e Zd Z fdZdS ))_make_subcast_field.<locals>.SubcastFieldc                 r    t          j        t           j        dt          f                   } ||          S )N.)r!   castrj   r   )r   rb   rZ   rB   ro   r<   s        r   _deserializez6_make_subcast_field.<locals>.SubcastField._deserialize   s-    {6?37#;WEEtE{{"r   N)r   r   r   r{   )r<   s   r   SubcastFieldrx      s.        # # # # # # #r   r|   )	rJ   rK   rM   SchemaTYPE_MAPPINGrL   rN   rO   callable)r<   inner_fieldr|   s   `  r   rP   rP      s    '4   &W	0F%F%Fi,W5	GT	"	" &z'29?'K'K &	'		 	&	# 	# 	# 	# 	# 	# 	#29? 	# 	# 	#
 #ior   c                 N    t          |           }t          j        j        |fi |S r   )rP   rM   rN   List)r<   rB   r   s      r   _make_list_fieldr      s)    %g..K9>+00000r   ,)	delimiterrb   r   c                    t           j                            |           r| S | dk    r-t          j        t
          |                               |          ng S )Nrr   )rM   utilsis_iterable_but_not_stringr!   rz   r    split)rb   r   rB   s      r   _preprocess_listr      sN     
x**511 7<{{6;sE""((333Jr   )subcast_keyssubcast_keysubcast_valuesr   r   r   c                "    t           t                    r S |rt          j        dt                      t          |p|          di | t          |          di |fd fd                     d          D             D             S )Nz8`subcast_key` is deprecated. Use `subcast_keys` instead.c                     i | ]R\  }}                     |                                                               |                                          SS r   )rW   strip)rA   keyvalsubcast_keys_instancesubcast_values_instances      r   rC   z$_preprocess_dict.<locals>.<dictcomp>   sa       C 	))#))++668O8[8[\_\e\e\g\g8h8h  r   c              3   H   K   | ]}|                     d d          V  dS )=   N)r   )rA   itemrb   s     r   	<genexpr>z#_preprocess_dict.<locals>.<genexpr>   s6      RRERC++RRRRRRr   r   r   )rJ   r   warningswarnDeprecationWarningrP   r   )rb   r   r   r   rB   r   r   s   `    @@r   _preprocess_dictr      s     %!!  fPRdeee-]-@A\Q\-]-]-g-g`f-g-g/R/B>/R/R/\/\U[/\/\    RRRRC8H8HRRR   r   c                     	 t          j        |           S # t           j        $ r}t          j        d          |d }~ww xY w)NzNot valid JSON.)pyjsonloadsJSONDecodeErrorrM   rY   )rb   rB   re   s      r   _preprocess_jsonr      sM    ?|E"""! ? ? ? !233>?s    ?:?_EnumT)boundFrK   ignore_casec                     t          j        d|j         d          }|s	 ||          S # t          $ r}||d }~ww xY w|D ]5}|j                                        |                                 k    r|c S 6|)NzNot a valid 'z' enum.)rM   rY   r   KeyErrorr:   lower)rb   rK   r   invalid_excre   
enum_values         r   _enum_parserr      s    $%KT]%K%K%KLLK )	); 	) 	) 	)5(	)   
?  ""ekkmm33 4 s   ) 
;6;c                     	 dd l }n"# t          $ r}t          d          |d }~ww xY w	  |j        | fi |S # t          $ r}t          j        d          |d }~ww xY w)Nr   zoThe dj_db_url parser requires the dj-database-url package. You can install it with: pip install dj-database-urlzNot a valid database URL.)dj_database_urlImportErrorRuntimeErrorparse	ExceptionrM   rY   )rb   rB   r   re   s       r   _dj_db_url_parserr     s       C
 
 	
I$$U55f555 I I I !<==5HI%    
&!&8 
AAAc                     	 dd l }n"# t          $ r}t          d          |d }~ww xY w	  |j        | fi |S # t          $ r}t          j        d          |d }~ww xY w)Nr   zlThe dj_email_url parser requires the dj-email-url package. You can install it with: pip install dj-email-urlzNot a valid email URL.)dj_email_urlr   r   r   r   rM   rY   )rb   rB   r   re   s       r   _dj_email_url_parserr     s       @
 
 	
F!|!%226222 F F F !9::EFr   c                     	 dd l }n"# t          $ r}t          d          |d }~ww xY w	  |j        | fi |S # t          $ r%}t          j        |j        d                   |d }~ww xY w)Nr   ztThe dj_cache_url parser requires the django-cache-url package. You can install it with: pip install django-cache-url)django_cache_urlr   r   r   r   rM   rY   rZ   )rb   rB   r   re   s       r   _dj_cache_url_parserr     s       D
 
 	
;%%e66v666 ; ; ;  A//U:;s%    
&!&8 
A' A""A'c            	       |     e Zd ZdedefdZ	 	 ddedej        e         dej        ej                 def fdZ	 xZ
S )	URLFieldrb   r2   c                 *    |                                 S r   )geturl)r   rb   rZ   rB   s       r   
_serializezURLField._serialize.  s    ||~~r   Nattrdatac                 Z     t                      j        |||fi |}t          |          S r   )r   rW   r   )r   rb   r   r   rB   retr   s         r   rW   zURLField.deserialize3  s3     "egg!%t>>v>>}}r   )NN)r   r   r   r   r    r   r!   rh   r   rW   r%   r&   s   @r   r   r   -  s              &*04	  oc" ofn-	 
         r   r   c                   $     e Zd Zdef fdZ xZS )	PathFieldr2   c                     t          |t                    r|S  t                      j        |g|R i |}t          |          S r   )rJ   r   r   r{   )r   rb   rZ   rB   r   r   s        r   r{   zPathField._deserialize?  sL    eT"" 	L"egg"5:4:::6::Cyyr   )r   r   r   r   r{   r%   r&   s   @r   r   r   >  sD        d          r   r   c                   $     e Zd Zdef fdZ xZS )LogLevelFieldr2   c                 z   	 t                                          |          S # t          t          f$ r}|                                }t          t          |          rBt          t          t          |          t                    rt          t          |          cY d }~S t          j        d          |d }~ww xY w)NzNot a valid log level.)r   _format_num	TypeError
ValueErrorupperhasattrloggingrJ   getattrintrM   rY   )r   rb   re   r   s      r   r   zLogLevelField._format_numG  s    	N77&&u---:& 	N 	N 	NKKMMEw&& N:ggu6M6Ms+S+S Nw........()ABBM	Ns!    $ B:A%B5B: B55B:)r   r   r   r   r   r%   r&   s   @r   r   r   F  sO        NC N N N N N N N N N Nr   r   c                   8   e Zd ZU dZ eej        j        d          Ze	e
d<    eej        j        d          Z eej        j        d          Z eej        j        d          Z eej        j        d          Z eej        j        d          Z eeded	
          Z eej        j        ded
          Z eej        j        de          Z eej        j        d          Z eej        j        d          Z  eej        j!        d          Z" ee#d          Z$ ee%d          Z& eej        j'        d          Z( eej        j)        d          Z* ee+d          Z, e-e.d          Z/ e-e0d          Z1 e-e2d          Z3 e-e4d          Z5dddde6de6fd Z7d!e8fd"Z9e:	 	 	 	 d<de;j<        e8         d$e6d%e6d&e6d!d#f
d'            Z=e>j?        d(e8d!e;j@        d          fd)            ZAd* ZBd+e8fd,ZCd+e8d-e;jD        d!d#fd.ZEd+e8d!e;jD        e;jD        ge;jD        f         fd/ZFd+e8d0e;jG        ej        j                 fd1ZHd!e;jI        e8e;jJ        f         fd2ZKdd3d4e8d5e;jJ        d6e6d!e;jL        e8e;jJ        e;j<        e8         f         fd7ZMd8 ZNdd9d4e8d:e6d!e8fd;ZOd#S )=r   zAn environment variable reader.__call__r   rl   r    floatdecimallist)r<   r   r-   rH   )r<   r   r   r   json)r.   datetimedatetimepath	log_level	timedeltauuidurlenum	dj_db_urlr   dj_cache_urlTF)rS   expand_varsrS   r   c                    || _         d| _        || _        i | _        i | _        t          j        t                    | _        d | _	        i | _
        d S )NF)rS   rG   r   rR   rX   collectionsdefaultdictr   rU   _prefix__custom_parsers__)r   rS   r   s      r   r   zEnv.__init__s  sM    
"&SU:<%0%<T%B%B26GIr   r2   c                 2    d| j         j         d| j         dS )N< >)r   r   rX   )r   s    r   __repr__zEnv.__repr__}  s"    <4>*<<T\<<<<r   Nrecurseverboseoverridec                    | et          j                    }|t          d          |j        }|J t	          |j        j                  j                                        }|dz  }n?t	          |           	                                rt          d          t	          |           }|rt          j                            |          \  }}	|st          j                    }t          |          D ]=}
t	          |
          |	z  }|                                rt#          |||            dS >dS t#          t%          |          ||           dS )aG  Read a .env file into os.environ.

        If .env is not found in the directory from which this method is called,
        the default behavior is to recurse up the directory tree until a .env
        file is found. If you do not wish to recurse up the tree, you may pass
        False as a second positional argument.
        Nz!Could not get current call frame.z.envz)path must be a filename, not a directory.)r   r   )inspectcurrentframer   f_backr   f_codeco_filenameparentresolveis_dirr   osr   r   getcwdr   existsr	   r    )r   r   r   r   current_frameframe
caller_dirstart	start_direnv_namedirname
check_paths               r   read_envzEnv.read_env  s_    <#022M$"#FGGG!(E$$$el677>FFHHJ'EEDzz  "" N !LMMMJJE 
	H"$'--"6"6Ix (IKK	(33  !']]X5
$$&& 
GhOOOOFF  E

GhGGGGGGr   prefixc              #      K   	 | j         }||| _         n| | | _         | V  d| _         n# d| _         w xY w|| _         dS )z9Context manager for parsing envvars with a common prefix.Nr   )r   r  
old_prefixs      r   prefixedzEnv.prefixed  se      		 J!%",6f66JJJ  DLL4DL!s    , 	5c                 ~    d| _         | j        r.t          | j                  }i | _        t          d| |          dS )zvValidate parsed values and prevent new values from being added.

        :raises: environs.EnvValidationError
        TzEnvironment variables invalid: N)rG   rU   rH   r   )r   r   s     r   sealzEnv.seal  sR    
 < 	i!$,//NDL$%W~%W%WYghhh	i 	ir   r:   c                     	 t          j        | j        |         |           S # t          $ r}t	          |  d|           |d }~ww xY w)Nz has no attribute )	functoolspartialr   r   AttributeError)r   r:   re   s      r   __getattr__zEnv.__getattr__  sd    	O$T%<T%BDIII 	O 	O 	O D!B!BD!B!BCCN	Os   " 
AAAro   c                 ~    t          | |          rt          d| d          t          ||          | j        |<   dS )zRegister a new parser method with the name ``name``. ``func`` must
        receive the input value for an environment variable.
        z$Env already has a method with name 'z'. Use a different name.r1   N)r   r*   ru   r   )r   r:   ro   s      r   
add_parserzEnv.add_parser  sP     4 	m%&kT&k&k&klll(4Tt(L(L(L%tr   c                 H     dt           j        dt           j        f fd}|S )zDecorator that registers a new parser method with the name ``name``.
        The decorated function must receive the input value for an environment variable.
        ro   r2   c                 4                         |            | S r   )r  )ro   r:   r   s    r   	decoratorz!Env.parser_for.<locals>.decorator  s    OOD$'''Kr   )r!   rj   )r   r:   r  s   `` r   
parser_forzEnv.parser_for  sA    
	FO 	 	 	 	 	 	 	 	 r   	field_clsc                 8    t          ||          | j        |<   dS )zORegister a new parser method with name ``name``, given a marshmallow ``Field``.r  N)rn   r   )r   r:   r  s      r   add_parser_from_fieldzEnv.add_parser_from_field  s"    (5iT(R(R(R%%%r   c                     t          j                            | j                              }|                    | j                  S )znDump parsed environment variables to a dictionary of simple data types (numbers
        and strings).
        )rM   r}   	from_dictrR   dumprX   )r   schemas     r   r  zEnv.dump  s5     $$T\2244{{4<(((r   proxiedr   r;   r   c                |   |                      ||          }t          j                            ||          }t	          |d          r| j        ot                              |          }|rt|                                d         }|                                d         }||dd         }n||k    rt          j
        }||                     ||d          d         |fS | j        ot                              |          }	|	r|                     ||          S | j        rd	|v r|                    d	d
          }||dfS )a  Access a value from os.environ. Handles proxied variables, e.g. SMTP_LOGIN={{MAILGUN_LOGIN}}.

        Returns a tuple (envvar_key, envvar_value, proxied_key). The ``envvar_key`` will be different from
        the passed key for proxied variables. proxied_key will be None if the envvar isn't proxied.

        The ``proxied`` flag is recursively passed if a proxy lookup is required to get a
        proxy env key.
        omit_prefixr   r   r   N   Tr  z\$$)_get_keyr   environgetr   r   _EXPANDED_VAR_PATTERNmatchgroupsrM   r5   rQ   search_expand_varsreplace)
r   r   r;   r   env_keyrb   expand_matchrc   subs_defaultexpand_searchs
             r   rQ   zEnv._get_from_environ  sQ    ---99
w005'"" 	2+R0E0K0KE0R0RL i(4(;(;(=(=a(@:F:M:M:O:OPQ:R+*122.GGg%% jGT33KRV3WWXYZ\ghh ,T1F1M1Me1T1TM 9((%888 2EUNNeS11t##r   c                    d}d}t                               |          D ]}|                    d          }|                    d          }|t          j        }n
|dd          }|                     ||d          \  }}	}|	t          j        u r||	|fc S ||||                                         |	z   z  }|                                }|||d          z  }|||fS )Nrr   r   r   r$  Tr  )r)  finditergrouprM   r5   rQ   r   end)
r   ra   rb   r   
prev_startr*  r/  env_default_	env_values
             r   r-  zEnv._expand_vars  s    
*33E:: 	% 	%Ekk!nnG++a..K" j)!""o"44WkSW4XXOAy!BJ&&!9g55555ekkmm34y@@CJJuZ[[!!3''r   r"  r#  c                ,    | j         r|s
| j         |z   n|S r   r  )r   r   r#  s      r   r&  zEnv._get_key  s     %)\N+Nt|c!!3Nr   )NTFF)Pr   r   r   r   rn   rM   rN   rO   r   ParserMethod__annotations__Intr   Boolrl   Strr    Floatr   Decimalr   r   r   r   rm   r   rH   r   r   DateTimer   Dater   Timer   r   r   r   r   	TimeDeltar   UUIDr   r   r   ru   r   r   r   r   r   r   r   r   	_BoolTyper   _StrTyper   staticmethodr!   rh   r  
contextlibcontextmanagerIteratorr	  r  r  rj   r  r  rt   r  r   rg   r  TuplerQ   r-  r&  r   r   r   r   r   R  s        ))*]29?JGGHlGGG
-	u
-
-C=00D
-	u
-
-CM")/733EmBI-y99G=&-=Vn  D =
	#[	  D =&=MNNND}RY/<<H=00D=00D=F++Dm[99Ibi1;??I=00D
-%
(
(C<f--D.<<I< 4nEEL< 4nEEL-1E J J J J	 J J J J=( = = = = *.!"#	$H $Hoh'$H$H $H 	$H
 
$H $H $H \$HL "x "FOE,B " " " "	i 	i 	iO O O O Ox v 4    	x 	FOV_<Mv<^,_ 	 	 	 	S( Sv{29??[ S S S S)fnXvz%9: ) ) ) ) KP$ $ $$&,j$>G$	h
FOH,EE	F$ $ $ $>( ( (& CH O O OH Oi OH O O O O O Or   )F)Sr   rK  r  r   r   r   r   r   rer!   r   collections.abcr   r   r   pathlibr   urllib.parser   r   marshmallowrM   dotenv.mainr   r	   __version____all__TypeVarr   r    rI  rl   rH  r   _IntTyper   r$   r#   rj   rN   rO   FieldFactoryr"   rt   ri   	FieldTypeFieldOrFactoryr<  compiler)  r   r
   r   r   r(   r*   __version_info__rI   tuplerh   Sequencern   ru   rP   rK   r   rk   r   r   r   r   r   rH   r   r   r   URLr   r@  r   r>  r   r   r   r   r   <module>ra     s                     				 				   # # # # # #             . . . . . . . .     2 2 2 2 2 2 2 2u
 V^D	~c6;s#334K	sBIO34
,v{FOCG$<bioM
NK	(	i56 #
#NOO ^ ^ ^ ^ ^z ^ ^ ^" " " " " " " "	 	 	 	 	Y 	 	 	[ [ [ [ [* [ [ [ ,7  4838577J J J$JJ 0	J
 #OC0J J J J JZ%v %S %\ % % % %P!9 fk")/>Z    $1!6 1RY^ 1 1 1 1 DGK K K<V_,-K=@K_K K K K .2,0/3  <V^+, /'* )	
 OG, ^   ,?C ? ? ? ? 
	-	-	- fk&1  QW     IS It I I I IF F$ F F F F; ;$ ; ; ; ;     ry}   "    	   	N 	N 	N 	N 	NBIM 	N 	N 	NGO GO GO GO GO GO GO GO GO GOr   