
     hN                     J   d dl Z d dlmZ d dlmZmZ d dlmZmZm	Z	 d dl
mZ d dlmZmZ d dlmZ dd	lmZ dd
lmZ dgZ G d dee          ZdKdZ G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d d          Z  G d d ej!                  Z" G d! d"e ej#                  Z$e%                    e           e%                    e           e%                    e           e%                    e           e%                    e           e%                    e"           e%                    e$            G d# d$e          Z& G d% d&e&          Z' G d' d(          Z( G d) d*ej)                  Z* G d+ d,ej+                  Z, G d- d.e"          Z- G d/ d0e e(ej.                  Z/ G d1 d2e e(ej#                  Z0 G d3 d4e(ej1                  Z2 G d5 d6e e(ej3                  Z4 G d7 d8e(ej5                  Z6 G d9 d:e e(ej7                  Z8 G d; d<e(ej9                  Z: G d= d>e e(ej;                  Z< G d? d@          Z= G dA dBe=ej>                  Z? G dC dDe=ej@                  ZA G dE dFe=ejB                  ZC G dG dHe=ejD                  ZEe&%                    e,           e&%                    e-           e&%                    e/           e&%                    e*           e&%                    e0           e&%                    e2           e&%                    e4           e&%                    e6           e&%                    e8           e&%                    e:           e&%                    e<           e&%                    e?           e&%                    eA           e&%                    eC           e&%                    eE            G dI dJ          ZFdS )L    N)forms)checks
exceptions)NotSupportedErrorconnectionsrouter)lookups)PostgresOperatorLookup	Transform)gettext_lazy   )Field)CheckFieldDefaultMixin	JSONFieldc                        e Zd ZdZ ed          Zd ed          iZdZ	 	 	 	 d fd	Z fdZ	d	 Z
 fd
Zd Zd Zd Z fdZ fdZd Z fdZ xZS )r   FzA JSON objectinvalidzValue must be valid JSON.)dictz{}Nc                     |rt          |          st          d          |rt          |          st          d          || _        || _         t	                      j        ||fi | d S )Nz0The encoder parameter must be a callable object.z0The decoder parameter must be a callable object.)callable
ValueErrorencoderdecodersuper__init__)selfverbose_namenamer   r   kwargs	__class__s         X/var/www/html/Sam_Eipo/venv/lib/python3.11/site-packages/django/db/models/fields/json.pyr   zJSONField.__init__   s      	Q8G,, 	QOPPP 	Q8G,, 	QOPPPt66v66666    c                      t                      j        di |}|                    d          pg }|                    |                     |                     |S )N	databases )r   checkgetextend_check_supported)r   r   errorsr#   r   s       r    r%   zJSONField.check(   sY    ((((JJ{++1r	d++I66777r!   c                 h   g }|D ]}t          j        || j                  st          |         }| j        j        j        r| j        j        j        |j        k    rVd| j        j        j        v sC|j        j	        s7|
                    t          j        d|j        z  | j        d                     |S )Nsupports_json_fieldz%s does not support JSONFields.zfields.E180)objid)r   allow_migrate_modelmodelr   _metarequired_db_vendorvendorrequired_db_featuresfeaturesr+   appendr   Errordisplay_name)r   r#   r)   db
connections        r    r(   zJSONField._check_supported.   s     	 	B-b$*== $RJ
 3J$7:;LLL%)9)NNN&: O L9J<SS J(     r!   c                     t                                                      \  }}}}| j        
| j        |d<   | j        
| j        |d<   ||||fS )Nr   r   )r   deconstructr   r   )r   r   pathargsr   r   s        r    r;   zJSONField.deconstructF   sX    #(77#6#6#8#8 dD&<# $F9<# $F9T4''r!   c                     ||S t          |t                    rt          |t                    s|S 	 t          j        || j                  S # t          j        $ r |cY S w xY wNcls)
isinstanceKeyTransformstrjsonloadsr   JSONDecodeError)r   value
expressionr9   s       r    from_db_valuezJSONField.from_db_valueN   sy    =L j,// 	
5#8N8N 	L	:e6666# 	 	 	LLL	s   A A! A!c                     dS )Nr   r$   r   s    r    get_internal_typezJSONField.get_internal_typeZ   s    {r!   c                 @    ||S t          j        || j                  S r?   )rE   dumpsr   )r   rH   s     r    get_prep_valuezJSONField.get_prep_value]   s#    =Lz%T\2222r!   c                 l    t                                          |          }|r|S t          |          S N)r   get_transformKeyTransformFactory)r   r   	transformr   s      r    rS   zJSONField.get_transformb   s6    GG))$//	 	"4(((r!   c                     t                                          ||           	 t          j        || j                   d S # t
          $ r% t          j        | j        d         dd|i          w xY w)Nr@   r   rH   )codeparams)	r   validaterE   rO   r   	TypeErrorr   ValidationErrorerror_messages)r   rH   model_instancer   s      r    rY   zJSONField.validateh   s    ///	Ju$,////// 	 	 	,#I.'   	s   A /A1c                 ,    |                      |          S rR   )value_from_object)r   r,   s     r    value_to_stringzJSONField.value_to_strings   s    %%c***r!   c                 j     t                      j        di t          j        | j        | j        d|S )N)
form_classr   r   r$   )r   	formfieldr   r   r   r   )r   r   r   s     r    rc   zJSONField.formfieldv   sK     uww  
 
#o<<  	
 
 	
r!   )NNNN)__name__
__module____qualname__empty_strings_allowed_descriptiondefault_error_messages_default_hintr   r%   r(   r;   rJ   rM   rP   rS   rY   r`   rc   __classcell__r   s   @r    r   r      sG       !!O$$K11011 #M 7 7 7 7 7 7       0( ( ( ( (
 
 
  3 3 3
) ) ) ) )	 	 	 	 	+ + +
 
 
 
 
 
 
 
 
r!   Tc                 ,   |rdgng }| D ]v}	 t          |          }|                    d|z             +# t          $ r? |                    d           |                    t          j        |                     Y sw xY wd                    |          S )N$z[%s]. )intr5   r   rE   rO   join)key_transformsinclude_rootr<   key_transformnums        r    compile_json_pathrx      s     (C55bD' & &	&m$$C
 KK%%%%	  	3 	3 	3KKKK
=1122222	3
 774==s   5AA>=A>c                       e Zd ZdZdZd ZdS )DataContainscontainsz@>c                     |j         j        st          d          |                     ||          \  }}|                     ||          \  }}t          |          t          |          z   }d|d|d|fS )Nz:contains lookup is not supported on this database backend.JSON_CONTAINS(, )r4   supports_json_field_containsr   process_lhsprocess_rhstupler   compilerr9   lhs
lhs_paramsrhs
rhs_paramsrX   s           r    as_sqlzDataContains.as_sql   s    "? 	#L   **8Z@@Z**8Z@@Zz""U:%6%66*-##sss3V;;r!   Nrd   re   rf   lookup_namepostgres_operatorr   r$   r!   r    rz   rz      s.        K< < < < <r!   rz   c                       e Zd ZdZdZd ZdS )ContainedBycontained_byz<@c                     |j         j        st          d          |                     ||          \  }}|                     ||          \  }}t          |          t          |          z   }d|d|d|fS )Nz>contained_by lookup is not supported on this database backend.r}   r~   r   r   r   s           r    r   zContainedBy.as_sql   s    "? 	#P   **8Z@@Z**8Z@@Zz""U:%6%66*-##sss3V;;r!   Nr   r$   r!   r    r   r      s.         K< < < < <r!   r   c                   B     e Zd ZdZd ZddZd Zd Z fdZd Z	 xZ
S )	HasKeyLookupNc                 0    dt          j        |          z  S )Nz.%s)rE   rO   r   rv   s     r    compile_json_path_final_keyz(HasKeyLookup.compile_json_path_final_key   s    tz-0000r!   c                    t          | j        t                    r/| j                            ||          \  }}}t	          |          }n|                     ||          \  }}d}||z  }| j        }	g }
t          |	t          t          f          s|	g}	|	D ]z}t          |t                    r|                    ||          ^ }}n|g}|^ }}t	          |d          }|| 	                    |          z  }|

                    ||z              {| j        r.d| j                            |gt          |
          z            z  }|t          |          t          |
          z   fS )Nro   Fru   z(%s))rB   r   rC   preprocess_lhsrx   r   r   listr   r   r5   logical_operatorrs   len)r   r   r9   templater   r   lhs_key_transformslhs_json_pathsqlr   r   keyrh   rhs_key_transforms	final_keyrhs_json_paths                   r    r   zHasKeyLookup.as_sql   s   dh-- 	 26(2I2I*3 3/C/ ..@AAMM"..xDDOCMnh
#e}-- 	%C 	= 	=C#|,, +),););Hj)Q)Q&&&&)U"-?*-.@uUUUMT==iHHHMmm;<<<<  	O4055sec*oo6MNNNCE*%%j(9(9999r!   c                 2    |                      ||d          S )Nz"JSON_CONTAINS_PATH(%s, 'one', %%s)r   r   r   r   r9   s      r    as_mysqlzHasKeyLookup.as_mysql   s%    {{j+O  
 
 	
r!   c                 `    |                      ||d          \  }}|t          |          z  g fS )NzJSON_EXISTS(%s, '%%s')r   )r   r   )r   r   r9   r   rX   s        r    	as_oraclezHasKeyLookup.as_oracle   s>    kkj+C " 
 
V
 U6]]"B&&r!   c                     t          | j        t                    rR| j                            ||          ^ }}|d d         D ]}t          || j                  | _        |d         | _        t                                          ||          S )N)rB   r   rC   r   r   r   as_postgresql)r   r   r9   rh   r   r   r   s         r    r   zHasKeyLookup.as_postgresql   s    dh-- 	.%)X%<%<Xz%R%R"Q")#2#. 7 7'TX66)"-DHww$$Xz:::r!   c                 2    |                      ||d          S )NJSON_TYPE(%s, %%s) IS NOT NULLr   r   r   s      r    	as_sqlitezHasKeyLookup.as_sqlite   s%    {{j+K  
 
 	
r!   rR   )rd   re   rf   r   r   r   r   r   r   r   rl   rm   s   @r    r   r      s        1 1 1: : : :<
 
 

' ' '; ; ; ; ;
 
 
 
 
 
 
r!   r   c                       e Zd ZdZdZdZdS )HasKeyhas_key?FN)rd   re   rf   r   r   prepare_rhsr$   r!   r    r   r      s        KKKKr!   r   c                        e Zd ZdZdZdZd ZdS )HasKeyshas_keysz?& AND c                 $    d | j         D             S )Nc                 ,    g | ]}t          |          S r$   )rD   ).0items     r    
<listcomp>z+HasKeys.get_prep_lookup.<locals>.<listcomp>   s    ///dD		///r!   )r   rL   s    r    get_prep_lookupzHasKeys.get_prep_lookup   s    //dh////r!   N)rd   re   rf   r   r   r   r   r$   r!   r    r   r      s4        K0 0 0 0 0r!   r   c                       e Zd ZdZdZdZdS )
HasAnyKeyshas_any_keysz?| OR N)rd   re   rf   r   r   r   r$   r!   r    r   r      s!         Kr!   r   c                       e Zd Zd ZdS )HasKeyOrArrayIndexc                 &    t          |gd          S )NFr   )rx   r   s     r    r   z.HasKeyOrArrayIndex.compile_json_path_final_key  s     -uEEEEr!   N)rd   re   rf   r   r$   r!   r    r   r     s(        F F F F Fr!   r   c                   ,     e Zd ZdZ fdZ fdZ xZS )CaseInsensitiveMixinz
    Mixin to allow case-insensitive comparison of JSON values on MySQL.
    MySQL handles strings used in JSON context using the utf8mb4_bin collation.
    Because utf8mb4_bin is a binary collation, comparison of JSON values is
    case-sensitive.
    c                 z    t                                          ||          \  }}|j        dk    rd|z  |fS ||fS Nmysqlz	LOWER(%s))r   r   r2   )r   r   r9   r   r   r   s        r    r   z CaseInsensitiveMixin.process_lhs  H    ''--h
CCZ''$j00Jr!   c                 z    t                                          ||          \  }}|j        dk    rd|z  |fS ||fS r   )r   r   r2   r   r   r9   r   r   r   s        r    r   z CaseInsensitiveMixin.process_rhs  r   r!   )rd   re   rf   __doc__r   r   rl   rm   s   @r    r   r     s[                     r!   r   c                   "     e Zd ZdZ fdZ xZS )	JSONExactTc                     t                                          ||          \  }}|dk    r
|d gk    rdg}|j        dk    r%dgt          |          z  }|t	          |          z  }||fS )N%snullr   JSON_EXTRACT(%s, '$'))r   r   r2   r   r   )r   r   r9   r   r   funcr   s         r    r   zJSONExact.process_rhs  sw    ''--h
CCZ$;;:$// J''+,s:>Dd#CJr!   )rd   re   rf   can_use_none_as_rhsr   rl   rm   s   @r    r   r     s>                r!   r   c                       e Zd ZdS )JSONIContainsNrd   re   rf   r$   r!   r    r   r   )          Dr!   r   c                   D     e Zd ZdZdZ fdZd Zd Zd Zd Z	d Z
 xZS )	rC   z->z#>c                 b     t                      j        |i | t          |          | _        d S rR   )r   r   rD   key_name)r   r   r=   r   r   s       r    r   zKeyTransform.__init__:  s0    $)&)))Hr!   c                     | j         g}| j        }t          |t                    r7|                    d|j                    |j        }t          |t                    7|                    |          \  }}|j        dk    rd |D             }|||fS )Nr   oraclec                 :    g | ]}|                     d d          S )%z%%)replace)r   r   s     r    r   z/KeyTransform.preprocess_lhs.<locals>.<listcomp>G  s&    OOOckk#t44OOOr!   )r   r   rB   rC   insertcompiler2   )r   r   r9   rt   previousr   rX   s          r    r   zKeyTransform.preprocess_lhs>  s    -8<00 	$!!!X%6777|H <00 	$ &&x00V((OOOOONFN**r!   c                     |                      ||          \  }}}t          |          }d|z  t          |          |fz   fS )NzJSON_EXTRACT(%s, %%s)r   rx   r   r   r   r9   r   rX   rt   	json_paths          r    r   zKeyTransform.as_mysqlJ  sH    &*&9&9(J&O&O#V^%n55	&,eFmmyl.JJJr!   c                     |                      ||          \  }}}t          |          }d||fdz  z  t          |          dz  fS )Nz4COALESCE(JSON_QUERY(%s, '%s'), JSON_VALUE(%s, '%s'))   r   r   s          r    r   zKeyTransform.as_oracleO  sX    &*&9&9(J&O&O#V^%n55	BY!#%==1 	r!   c                 >   |                      ||          \  }}}t          |          dk    r#d|d| j        d}|t          |          |fz   fS 	 t	          | j                  }n# t          $ r
 | j        }Y nw xY wd|d| j        dt          |          |fz   fS )Nr   ( z %s))r   r   postgres_nested_operatorr   rr   r   r   r   )r   r   r9   r   rX   rt   r   lookups           r    r   zKeyTransform.as_postgresqlW  s    &*&9&9(J&O&O#V^~"""#&33(E(E(EFCf(9999	#''FF 	# 	# 	#]FFF	# #T%;%;%;<eFmmvi>WWWs   A' 'A;:A;c           	          |                      ||          \  }}}t          |          }d                    d |j        j        D                       }d|d|d|d|d	t          |          |fz   dz  fS )	N,c                 ,    g | ]}t          |          S r$   )repr)r   datatypes     r    r   z*KeyTransform.as_sqlite.<locals>.<listcomp>f  s    UUUT(^^UUUr!   z(CASE WHEN JSON_TYPE(z
, %s) IN (z) THEN JSON_TYPE(z, %s) ELSE JSON_EXTRACT(z
, %s) END)   )r   rx   rs   opsjsonfield_datatype_valuesr   )r   r   r9   r   rX   rt   r   datatype_valuess           r    r   zKeyTransform.as_sqliteb  s    &*&9&9(J&O&O#V^%n55	((UUJN,TUUU
 
 SS///333- 05V}}	|/Kq.PQ 	Qr!   )rd   re   rf   r   r   r   r   r   r   r   r   rl   rm   s   @r    rC   rC   6  s        #& & & & &
+ 
+ 
+K K K
  	X 	X 	X	Q 	Q 	Q 	Q 	Q 	Q 	Qr!   rC   c                       e Zd ZdZdZdS )KeyTextTransformz->>z#>>N)rd   re   rf   r   r   r$   r!   r    r   r   n  s        $r!   r   c                   "     e Zd ZdZ fdZ xZS )KeyTransformTextLookupMixinz
    Mixin for combining with a lookup expecting a text lhs from a JSONField
    key lookup. On PostgreSQL, make use of the ->> operator instead of casting
    key values to text and performing the lookup on the resulting
    representation.
    c                     t          |t                    st          d          t          |j        g|j        R i |j        } t                      j        |g|R i | d S )NzLTransform should be an instance of KeyTransform in order to use this lookup.)	rB   rC   rZ   r   r   source_expressionsextrar   r   )r   rv   r=   r   key_text_transformr   s        r    r   z$KeyTransformTextLookupMixin.__init__{  s    -66 	#   ."
-
 
 
 !
 

 	+=d===f=====r!   )rd   re   rf   r   r   rl   rm   s   @r    r   r   s  sB         > > > > > > > > >r!   r   c                       e Zd Zd Zd ZdS )KeyTransformIsNullc                    t          | j        j        | j        j                                      ||          \  }}| j        s||fS | j                            ||          \  }}}d|d|dt          |          t          |          z   fS )Nz(NOT r   z	 IS NULL))r   r   r   r   r   r   r   )r   r   r9   r   rX   r   r   rh   s           r    r   zKeyTransformIsNull.as_oracle  s    (HLH
 
 )Hj
)
) 	V x 	;!X44XzJJZ+.334eFmmeJFWFW6WWWr!   c                     d}| j         sd}t          | j        j        | j        j                                      |||          S )NzJSON_TYPE(%s, %%s) IS NULLr   r   )r   r   r   r   r   )r   r   r9   r   s       r    r   zKeyTransformIsNull.as_sqlite  sP    /x 	87H!$(,0ABBII J 
 
 	
r!   N)rd   re   rf   r   r   r$   r!   r    r  r    s5        	X 	X 	X
 
 
 
 
r!   r  c                        e Zd Z fdZ xZS )KeyTransformInc                    t                                          ||||          \  }}t          |d          s|j        j        su|j        dk    r>t          j        |          }d}t          |t          t          f          r|dz  }n2|dz  }n,|j        dk    s|j        dk    r|d         |j        j        vrd	}|j        dk    r|j        rd
|z  }||fS )Nr   r   9%s(JSON_OBJECT('value' VALUE %%s FORMAT JSON), '$.value')
JSON_QUERY
JSON_VALUEr   sqliter   r   zJSON_UNQUOTE(%s))r   resolve_expression_parameterhasattrr4   has_native_json_fieldr2   rE   rF   rB   r   r   r   r   mysql_is_mariadb)r   r   r9   r   paramrX   rH   r   s          r    r  z+KeyTransformIn.resolve_expression_parameter  s    gg::	
 
V x((	.'=	.  H,,
5))QedD\22 -,CC,CC"g--!X--1IZ^%MMM-''J,G'$s*CF{r!   )rd   re   rf   r  rl   rm   s   @r    r
  r
    s8                r!   r
  c                   (     e Zd Z fdZ fdZ xZS )KeyTransformExactc                    t          | j        t                    r.t          t          j        |                               ||          S t                                          ||          \  }}|j        dk    r}g }d}|D ]c}t          j	        |          }t          |t          t          f          r|                    |dz             K|                    |dz             d|t          |          z  }n]|j        dk    rRg }|D ];}||j        j        v r|                    d           &|                    d           <|t          |          z  }||fS )Nr   r  r  r  r  r   r   )rB   r   rC   r   r	   Exactr   r2   rE   rF   r   r   r5   r   r   r   )	r   r   r9   r   r   r   r   rH   r   s	           r    r   zKeyTransformExact.process_rhs  s`   dh-- 	P--99(JOOO''--h
CCZ((DMC# 4 4
5))edD\22 4KKl 23333KKl 23333d#CC(**D# 9 9JNDDDKK%%%%KK 78888d#CJr!   c                    t                                          ||          \  }}|dgk    rt          | j        j        | j        j                  }|                    ||          \  }} | j                            d          | j        d          }|                    ||          \  }	}
|d|	t          |          t          |
          z   fS t                                          ||          S )Nr   isnullTr   )	r   r   r   r   r   r   
get_lookupr   r   )r   r   r9   r   r   has_key_exprhas_key_sqlhas_key_paramsis_null_expris_null_sqlis_null_paramsr   s              r    r   zKeyTransformExact.as_oracle  s    ''--h
CCZ&!!-dhlDH<MNNL*6*@*@:*V*V'K848..x884HHL*6*=*=h
*S*S'K*{{KK8n%%n(=(==  ww~~h
333r!   )rd   re   rf   r   r   rl   rm   s   @r    r  r    sQ            04 4 4 4 4 4 4 4 4r!   r  c                       e Zd ZdS )KeyTransformIExactNr   r$   r!   r    r#  r#             	Dr!   r#  c                       e Zd ZdS )KeyTransformIContainsNr   r$   r!   r    r&  r&    r$  r!   r&  c                       e Zd ZdS )KeyTransformStartsWithNr   r$   r!   r    r(  r(    r   r!   r(  c                       e Zd ZdS )KeyTransformIStartsWithNr   r$   r!   r    r*  r*    r$  r!   r*  c                       e Zd ZdS )KeyTransformEndsWithNr   r$   r!   r    r,  r,    r   r!   r,  c                       e Zd ZdS )KeyTransformIEndsWithNr   r$   r!   r    r.  r.     r$  r!   r.  c                       e Zd ZdS )KeyTransformRegexNr   r$   r!   r    r0  r0    r   r!   r0  c                       e Zd ZdS )KeyTransformIRegexNr   r$   r!   r    r2  r2  
  r$  r!   r2  c                        e Zd Z fdZ xZS )KeyTransformNumericLookupMixinc                     t                                          ||          \  }}|j        j        sd |D             }||fS )Nc                 6    g | ]}t          j        |          S r$   )rE   rF   )r   rH   s     r    r   z>KeyTransformNumericLookupMixin.process_rhs.<locals>.<listcomp>  s"    DDD$*U++DDDr!   )r   r   r4   r  r   s        r    r   z*KeyTransformNumericLookupMixin.process_rhs  sL    ''--h
CCZ"8 	EDDDDDJJr!   )rd   re   rf   r   rl   rm   s   @r    r4  r4    s8                r!   r4  c                       e Zd ZdS )KeyTransformLtNr   r$   r!   r    r8  r8    r   r!   r8  c                       e Zd ZdS )KeyTransformLteNr   r$   r!   r    r:  r:    r   r!   r:  c                       e Zd ZdS )KeyTransformGtNr   r$   r!   r    r<  r<     r   r!   r<  c                       e Zd ZdS )KeyTransformGteNr   r$   r!   r    r>  r>  $  r   r!   r>  c                       e Zd Zd Zd ZdS )rT   c                     || _         d S rR   )r   )r   r   s     r    r   zKeyTransformFactory.__init__;  s     r!   c                 ,    t          | j        g|R i |S rR   )rC   r   )r   r=   r   s      r    __call__zKeyTransformFactory.__call__>  s"    DM;D;;;F;;;r!   N)rd   re   rf   r   rB  r$   r!   r    rT   rT   :  s2        ! ! !< < < < <r!   rT   )T)GrE   djangor   django.corer   r   	django.dbr   r   r   django.db.modelsr	   django.db.models.lookupsr
   r   django.utils.translationr   rh   rq   r   mixinsr   __all__r   rx   rz   r   r   r   r   r   r   r   r  r   	IContainsr   register_lookuprC   r   r   IsNullr  Inr
  r  IExactr#  r&  
StartsWithr(  IStartsWithr*  EndsWithr,  	IEndsWithr.  Regexr0  IRegexr2  r4  LessThanr8  LessThanOrEqualr:  GreaterThanr<  GreaterThanOrEqualr>  rT   r$   r!   r    <module>rZ     s1          * * * * * * * * < < < < < < < < < < $ $ $ $ $ $ F F F F F F F F 6 6 6 6 6 6       * * * * * *-n
 n
 n
 n
 n
& n
 n
 n
b
 
 
 
< < < < <) < < << < < < <( < < <=
 =
 =
 =
 =
) =
 =
 =
@    \   0 0 0 0 0l 0 0 0       F F F F F F F F
       *       	 	 	 	 	('*; 	 	 	 
  , ' ' ' 	  + & & & 	  & ! ! ! 	  ' " " " 	  * % % % 	  ) $ $ $ 	  - ( ( (5Q 5Q 5Q 5Q 5Q9 5Q 5Q 5Qp% % % % %| % % %
> > > > > > > >,
 
 
 
 
 
 
 
0    WZ   :%4 %4 %4 %4 %4	 %4 %4 %4P	 	 	 	 	5w~	 	 		 	 	 	 	5w7H	 	 		 	 	 	 	8':L 	 	 		 	 	 	 	5w7J	 	 		 	 	 	 	68H 	 	 		 	 	 	 	5w7H	 	 		 	 	 	 	3W] 	 	 		 	 	 	 	5w~	 	 	       	 	 	 	 	3W5E 	 	 		 	 	 	 	4g6M 	 	 		 	 	 	 	3W5H 	 	 		 	 	 	 	4g6P 	 	 	   ^ , , ,   . / / /   / 0 0 0   / 0 0 0   2 3 3 3   3 4 4 4   4 5 5 5   1 2 2 2   2 3 3 3   . / / /   / 0 0 0   ^ , , ,   _ - - -   ^ , , ,   _ - - -< < < < < < < < < <r!   