
    if                        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	m
Z
mZ d dl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dlm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e!          Z" G d de"          Z# ed !           G d" d#                      Z$ ed !           G d$ d%e$                      Z%dS )&    N)CallableSequence)	dataclass)Enum)	AnnotatedAnyLiteral)FastAPIDeprecationWarning)Example)AliasChoices	AliasPath)	FieldInfo)
deprecated   )	Undefined_Unsetc                       e Zd ZdZdZdZdZdS )
ParamTypesqueryheaderpathcookieN)__name__
__module____qualname__r   r   r   r        K/root/projects/qq-shell/venv/lib/python3.11/site-packages/fastapi/params.pyr   r      s"        EFDFFFr   r   c            >       *    e Zd ZU eed<   efeddedddddddddddddeeeeededdddddedeg ef         dz  dedz  de	dz  d	e
dz  d
e	ez  ez  dz  de	dz  de	dz  de	dz  dedz  dedz  dedz  dedz  de
dz  de
dz  de	dz  dee	dz   ed          f         de	dz  dedz  dedz  dedz  de
dz  de
dz  dee         dz  deedz   ed          f         d ee	ef         dz  d!ee	z  ez  dz  d"ed#ee	ef         dz  d$ef< fd%Zd&e	fd'Z xZS )(Paramin_NTdefault_factory
annotationaliasalias_priorityvalidation_aliasserialization_aliastitledescriptiongtgeltle
min_length
max_lengthpatternregexdiscriminatorstrictmultiple_ofallow_inf_nan
max_digitsdecimal_placesexamplesexampleopenapi_examplesr   include_in_schemajson_schema_extradefaultr$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   EDeprecated in FastAPI 0.100.0 and Pydantic v2, use `pattern` instead.r4   r5   r6   r7   r8   r9   r:   r;   nDeprecated in OpenAPI 3.1.0 that now uses JSON Schema 2020-12, although still supported. Use examples instead.r<   r   r=   r>   extrac          	      b   |t           urt          j        dt          d           || _        || _        || _        t          di d|d|d|d|d|	d	|
d
|d|d|d|d|d|d|d|d|d||}|||d<   |t          j        dt          d           |p|} ||d<   |t           d fv rt          |t                    r|}|t           d fv r|}|
                    |||||| d           |p||d<   d |                                D             }! t                      j        di |! d S )N<`example` has been deprecated, please use `examples` instead   category
stacklevelr?   r$   r&   r*   r+   r,   r-   r.   r/   r0   r1   r4   r6   r7   r8   r9   r:   9`regex` has been deprecated, please use `pattern` insteadr   r%   r'   r(   r)   r5   r>   r2   c                 ,    i | ]\  }}|t           u||S r   r   .0kvs      r   
<dictcomp>z"Param.__init__.<locals>.<dictcomp>   #    IIItq!&ar   r   )r   warningswarnr
   r;   r=   r<   dict
isinstancestrupdateitemssuper__init__)#selfr?   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r   r=   r>   rB   kwargscurrent_json_schema_extra
use_kwargs	__class__s#                                     r   rZ   zParam.__init__   s/   Z &  MN2   
 !2 0 
 
 
G
+O
 %
 %	

 $
 r
 r
 r
 r
 "z
 "z
 (-
 $
 (-
 "z
  *>#
 
& !)F:MK2   
 %6$>!)|64.00Zs5K5K0"'~--$("0$4': %> 		
 		
 		
 $,uyIIv||~~III
&&:&&&&&r   returnc                 0    | j         j         d| j         dS N()r_   r   r?   r[   s    r   __repr__zParam.__repr__        .);;DL;;;;r   )r   r   r   r   __annotations__r   r   r   r   rV   intr   r   floatr   r   boollistrT   r   rZ   rg   __classcell__r_   s   @r   r!   r!      s        	OOO !f' 5;!% %+BF*. "&!%!%" $($$*%+!'%+%) 6:59"&37Uf' f' f'f' ""c'*T1	f'
 $Jf' Tzf' d
f' 	/L84?f' !4Zf' Tzf' 4Zf' DLf' DLf' DLf' DLf'  $J!f'" $J#f'$ t%f'& $JJW 
'f'2 Tz3f'4 t5f'6 T\7f'8 d{9f': $J;f'< d
=f'> s)d"?f'@ $JJB 
Af'N sG|,t3Of'P $t+d2Qf'R  Sf'T  S>D0Uf'V Wf' f' f' f' f' f'P<# < < < < < < < <r   r!   c            >            e Zd Zej        Z	 d&eddedddddddddddddeeeeededdddddedeg ef         dz  dedz  de	dz  d	e
dz  d
e	ez  ez  dz  de	dz  de	dz  de	dz  dedz  dedz  dedz  dedz  de
dz  de
dz  de	dz  dee	dz   ed          f         de	dz  dedz  dedz  dedz  de
dz  de
dz  dee         dz  deedz   ed          f         d ee	ef         dz  d!ee	z  ez  dz  d"ed#ee	ef         dz  d$ef< fd%Z xZS )'Path.NTr#   r?   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r@   r4   r5   r6   r7   r8   r9   r:   r;   rA   r<   r   r=   r>   rB   c                   |du s
J d            | j         | _          t                      j        d i d|d|d|d|d|d|d	|d
|d|	d|
d|d|d|d|d|d|d|d|d|d|d|d|d|d|d|d|d|d|d|| d S )!N.z+Path parameters cannot have a default valuer?   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r   r;   r:   r<   r=   r>   r   )r"   rY   rZ    r[   r?   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r   r=   r>   rB   r_   s                                   r   rZ   zPath.__init__   s   Z #~~~L~~~8 	
 	
 	
G	
+O	
 "z	
 %		

 *>	
 .-	
 !4 3	
 %	
 $	
 r	
 r	
 r	
 r	
 "z	
 "z	
  G!	
" %#	
$ (-%	
& 6'	
( $)	
* (-+	
, "z-	
. *>/	
0 "z1	
2 G3	
4 X5	
6 .-7	
8 0/9	
: 0/=	
 	
 	
 	
 	
r   ).)r   r   r   r   r   r"   r   r   r   rV   rj   r   r   rk   r   r   rl   rm   rT   r   rZ   rn   ro   s   @r   rq   rq      s       
/C N
 5;!% %+BF*. "&!%!%" $($$*%+!'%+%) 6:59"&37UN
 N
 N
N
 ""c'*T1	N

 $JN
 TzN
 d
N
 	/L84?N
 !4ZN
 TzN
 4ZN
 DLN
 DLN
 DLN
 DLN
  $J!N
" $J#N
$ t%N
& $JJW 
'N
2 Tz3N
4 t5N
6 T\7N
8 d{9N
: $J;N
< d
=N
> s)d"?N
@ $JJB 
AN
N sG|,t3ON
P $t+d2QN
R  SN
T  S>D0UN
V WN
 N
 N
 N
 N
 N
 N
 N
 N
 N
r   rq   c            >            e Zd Zej        Zefeddedddddddddddddeeeeededdddddede	g ef         dz  dedz  de
dz  dedz  d	e
ez  ez  dz  d
e
dz  de
dz  de
dz  dedz  dedz  dedz  dedz  dedz  dedz  de
dz  dee
dz   ed          f         de
dz  dedz  dedz  dedz  dedz  dedz  dee         dz  deedz   ed          f         dee
ef         dz  d ee
z  ez  dz  d!ed"ee
ef         dz  d#ef< fd$Z xZS )%QueryNTr#   r?   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r@   r4   r5   r6   r7   r8   r9   r:   r;   rA   r<   r   r=   r>   rB   c                     t                      j        di d|d|d|d|d|d|d|d|d	|	d
|
d|d|d|d|d|d|d|d|d|d|d|d|d|d|d|d|d|d|d|| d S Nr?   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r   r;   r:   r<   r=   r>   r   rY   rZ   rs   s                                   r   rZ   zQuery.__init__      Z 	 	
 	
 	
G	
+O	
 "z	
 %		

 *>	
 .-	
 !4 3	
 %	
 $	
 r	
 r	
 r	
 r	
 "z	
 "z	
  G!	
" %#	
$ (-%	
& 6'	
( $)	
* (-+	
, "z-	
. *>/	
0 "z1	
2 G3	
4 X5	
6 .-7	
8 0/9	
: 0/=	
 	
 	
 	
 	
r   )r   r   r   r   r   r"   r   r   r   r   rV   rj   r   r   rk   r   r   rl   rm   rT   r   rZ   rn   ro   s   @r   ru   ru      s       

C !L
 5;!% %+BF*. "&!%!%" $($$*%+!'%+%) 6:59"&37UL
 L
 L
L
 ""c'*T1	L

 $JL
 TzL
 d
L
 	/L84?L
 !4ZL
 TzL
 4ZL
 DLL
 DLL
 DLL
 DLL
  $J!L
" $J#L
$ t%L
& $JJW 
'L
2 Tz3L
4 t5L
6 T\7L
8 d{9L
: $J;L
< d
=L
> s)d"?L
@ $JJB 
AL
N sG|,t3OL
P $t+d2QL
R  SL
T  S>D0UL
V WL
 L
 L
 L
 L
 L
 L
 L
 L
 L
r   ru   c            @       &    e Zd Zej        Zefeddeddddddddddddddeeeeededdddddede	g ef         dz  dedz  de
dz  dedz  d	e
ez  ez  dz  d
e
dz  dede
dz  de
dz  dedz  dedz  dedz  dedz  dedz  dedz  de
dz  dee
dz   ed          f         de
dz  dedz  dedz  dedz  dedz  dedz  dee         dz  deedz   ed          f         d ee
ef         dz  d!ee
z  ez  dz  d"ed#ee
ef         dz  d$ef> fd%Z xZS )&HeaderNT)r$   r%   r&   r'   r(   r)   convert_underscoresr*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r   r=   r>   r?   r$   r%   r&   r'   r(   r)   r|   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r@   r4   r5   r6   r7   r8   r9   r:   r;   rA   r<   r   r=   r>   rB   c                    || _          t                      j        di d|d|d|d|d|d|d|d|	d	|
d
|d|d|d|d|d|d|d|d|d|d|d|d|d|d|d|d|d|d|d|| d S rw   )r|   rY   rZ   )!r[   r?   r$   r%   r&   r'   r(   r)   r|   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r   r=   r>   rB   r_   s!                                   r   rZ   zHeader.__init__2  s   \ $7  	
 	
 	
G	
+O	
 "z	
 %		

 *>	
 .-	
 !4 3	
 %	
 $	
 r	
 r	
 r	
 r	
 "z	
 "z	
  G!	
" %#	
$ (-%	
& 6'	
( $)	
* (-+	
, "z-	
. *>/	
0 "z1	
2 G3	
4 X5	
6 .-7	
8 0/9	
: 0/=	
 	
 	
 	
 	
r   )r   r   r   r   r   r"   r   r   r   r   rV   rj   r   r   rl   rk   r   r   rm   rT   r   rZ   rn   ro   s   @r   r{   r{   /  s	       

C !N
 5;!% %+BF*.$( "&!%!%" $($$*%+!'%+%) 6:59"&37WN
 N
 N
N
 ""c'*T1	N

 $JN
 TzN
 d
N
 	/L84?N
 !4ZN
 "N
 TzN
 4ZN
 DLN
 DLN
 DLN
  DL!N
" $J#N
$ $J%N
& t'N
( $JJW 
)N
4 Tz5N
6 t7N
8 T\9N
: d{;N
< $J=N
> d
?N
@ s)d"AN
B $JJB 
CN
P sG|,t3QN
R $t+d2SN
T  UN
V  S>D0WN
X YN
 N
 N
 N
 N
 N
 N
 N
 N
 N
r   r{   c            >            e Zd Zej        Zefeddedddddddddddddeeeeededdddddede	g ef         dz  dedz  de
dz  dedz  d	e
ez  ez  dz  d
e
dz  de
dz  de
dz  dedz  dedz  dedz  dedz  dedz  dedz  de
dz  dee
dz   ed          f         de
dz  dedz  dedz  dedz  dedz  dedz  dee         dz  deedz   ed          f         dee
ef         dz  d ee
z  ez  dz  d!ed"ee
ef         dz  d#ef< fd$Z xZS )%CookieNTr#   r?   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r@   r4   r5   r6   r7   r8   r9   r:   r;   rA   r<   r   r=   r>   rB   c                     t                      j        di d|d|d|d|d|d|d|d|d	|	d
|
d|d|d|d|d|d|d|d|d|d|d|d|d|d|d|d|d|d|d|| d S rw   rx   rs   s                                   r   rZ   zCookie.__init__  ry   r   )r   r   r   r   r   r"   r   r   r   r   rV   rj   r   r   rk   r   r   rl   rm   rT   r   rZ   rn   ro   s   @r   r   r     s       

C !L
 5;!% %+BF*. "&!%!%" $($$*%+!'%+%) 6:59"&37UL
 L
 L
L
 ""c'*T1	L

 $JL
 TzL
 d
L
 	/L84?L
 !4ZL
 TzL
 4ZL
 DLL
 DLL
 DLL
 DLL
  $J!L
" $J#L
$ t%L
& $JJW 
'L
2 Tz3L
4 t5L
6 T\7L
8 d{9L
: $J;L
< d
=L
> s)d"?L
@ $JJB 
AL
N sG|,t3OL
P $t+d2QL
R  SL
T  S>D0UL
V WL
 L
 L
 L
 L
 L
 L
 L
 L
 L
r   r   c            B       0    e Zd Zefeddddedddddddddddddeeeeededdddddedeg ef         dz  dedz  dedz  d	ed
edz  de	dz  dee
z  ez  dz  dedz  dedz  dedz  dedz  dedz  dedz  dedz  de	dz  de	dz  dedz  deedz   ed          f         dedz  dedz  dedz  dedz  de	dz  de	dz  dee         dz  d eedz   ed!          f         d"eeef         dz  d#eez  ez  dz  d$ed%eeef         dz  d&ef@ fd'Zd(efd)Z xZS )*BodyNzapplication/jsonT)r$   r%   embed
media_typer&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r   r=   r>   r?   r$   r%   r   r   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r@   r4   r5   r6   r7   r8   r9   r:   r;   rA   r<   r   r=   r>   rB   c          	      ~   || _         || _        |t          urt          j        dt
          d           || _        || _        || _        t          di d|d|d|d|
d|d	|d
|d|d|d|d|d|d|d|d|d|| }!|||!d<   |t          j        dt
          d           |p| }"||!d<   |	t          d fv rt          |t                    r|}	|t          d fv r|}|!                    ||||	||"d           |p||!d<   d |!                                D             }# t                      j        di |# d S )NrD   rE   rF   r?   r$   r&   r*   r+   r,   r-   r.   r/   r0   r1   r4   r6   r7   r8   r9   r:   rI   r   rJ   r2   c                 ,    i | ]\  }}|t           u||S r   r   rL   s      r   rP   z!Body.__init__.<locals>.<dictcomp>=  rQ   r   r   )r   r   r   rR   rS   r
   r;   r=   r<   rT   rU   rV   rW   rX   rY   rZ   )%r[   r?   r$   r%   r   r   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r   r=   r>   rB   r\   r]   r^   r_   s%                                       r   rZ   zBody.__init__  s=   ^ 
$&  MN2   
 !2 0 
 
 
G
+O
 %
 %	

 $
 r
 r
 r
 r
 "z
 "z
 (-
 $
 (-
 "z
  *>#
 
& !)F:MK2   
 %6$>!)|64.00Zs5K5K0"'~--$("0$4': %> 		
 		
 		
 $,uyIIv||~~III
&&:&&&&&r   r`   c                 0    | j         j         d| j         dS rb   re   rf   s    r   rg   zBody.__repr__A  rh   r   )r   r   r   r   r   r   r   rl   rV   rj   r   r   rk   r   r   rm   rT   r   rZ   rg   rn   ro   s   @r   r   r     s-        !i' 5;!%!, %+BF*. "&!%!%" $($$*%+!'%+%) 6:59"&37Yi' i' i'i' ""c'*T1	i'
 $Ji' d{i' i' Tzi' d
i' 	/L84?i' !4Zi' Tzi' 4Zi' DLi' DLi'  DL!i'" DL#i'$ $J%i'& $J'i'( t)i'* $JJW 
+i'6 Tz7i'8 t9i': T\;i'< d{=i'> $J?i'@ d
Ai'B s)d"Ci'D $JJB 
Ei'R sG|,t3Si'T $t+d2Ui'V  Wi'X  S>D0Yi'Z [i' i' i' i' i' i'V<# < < < < < < < <r   r   c            @           e Zd Zefedddedddddddddddddeeeeededdddddedeg ef         dz  dedz  ded	edz  d
edz  dee	z  e
z  dz  dedz  dedz  dedz  dedz  dedz  dedz  dedz  dedz  dedz  dedz  deedz   ed          f         dedz  dedz  dedz  dedz  dedz  dedz  dee         dz  deedz   ed           f         d!eeef         dz  d"eez  ez  dz  d#ed$eeef         dz  d%ef> fd&Z xZS )'FormNz!application/x-www-form-urlencodedTr$   r%   r   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r   r=   r>   r?   r$   r%   r   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r@   r4   r5   r6   r7   r8   r9   r:   r;   rA   r<   r   r=   r>   rB   c                     t                      j        di d|d|d|d|d|d|d|d|d	|	d
|
d|d|d|d|d|d|d|d|d|d|d|d|d|d|d|d|d|d|d|d|| d S  Nr?   r$   r%   r   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r   r;   r:   r<   r=   r>   r   rx   !r[   r?   r$   r%   r   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r   r=   r>   rB   r_   s!                                   r   rZ   zForm.__init__F     \ 	  	
  	
  	
G 	
+O 	
 "z 	
 "z	 	

 % 	
 *> 	
 .- 	
 !4 3 	
 % 	
 $ 	
 r 	
 r 	
 r 	
 r 	
 "z 	
  "z! 	
" G# 	
$ %% 	
& (-' 	
( 6) 	
* $+ 	
, (-- 	
. "z/ 	
0 *>1 	
2 "z3 	
4 G5 	
6 X7 	
8 .-9 	
: 0/; 	
< 0/? 	
  	
  	
  	
  	
r   r   r   r   r   r   r   r   rV   rj   r   r   rk   r   r   rl   rm   rT   r   rZ   rn   ro   s   @r   r   r   E  s        !N
 5;!%= %+BF*. "&!%!%" $($$*%+!'%+%) 6:59"&37WN
 N
 N
N
 ""c'*T1	N

 $JN
 N
 TzN
 d
N
 	/L84?N
 !4ZN
 TzN
 4ZN
 DLN
 DLN
 DLN
  DL!N
" $J#N
$ $J%N
& t'N
( $JJW 
)N
4 Tz5N
6 t7N
8 T\9N
: d{;N
< $J=N
> d
?N
@ s)d"AN
B $JJB 
CN
P sG|,t3QN
R $t+d2SN
T  UN
V  S>D0WN
X YN
 N
 N
 N
 N
 N
 N
 N
 N
 N
r   r   c            @           e Zd Zefedddedddddddddddddeeeeededdddddedeg ef         dz  dedz  ded	edz  d
edz  dee	z  e
z  dz  dedz  dedz  dedz  dedz  dedz  dedz  dedz  dedz  dedz  dedz  deedz   ed          f         dedz  dedz  dedz  dedz  dedz  dedz  dee         dz  deedz   ed           f         d!eeef         dz  d"eez  ez  dz  d#ed$eeef         dz  d%ef> fd&Z xZS )'FileNzmultipart/form-dataTr   r?   r$   r%   r   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r@   r4   r5   r6   r7   r8   r9   r:   r;   rA   r<   r   r=   r>   rB   c                     t                      j        di d|d|d|d|d|d|d|d|d	|	d
|
d|d|d|d|d|d|d|d|d|d|d|d|d|d|d|d|d|d|d|d|| d S r   rx   r   s!                                   r   rZ   zFile.__init__  r   r   r   ro   s   @r   r   r     s        !N
 5;!%/ %+BF*. "&!%!%" $($$*%+!'%+%) 6:59"&37WN
 N
 N
N
 ""c'*T1	N

 $JN
 N
 TzN
 d
N
 	/L84?N
 !4ZN
 TzN
 4ZN
 DLN
 DLN
 DLN
  DL!N
" $J#N
$ $J%N
& t'N
( $JJW 
)N
4 Tz5N
6 t7N
8 T\9N
: d{;N
< $J=N
> d
?N
@ s)d"AN
B $JJB 
CN
P sG|,t3QN
R $t+d2SN
T  UN
V  S>D0WN
X YN
 N
 N
 N
 N
 N
 N
 N
 N
 N
r   r   T)frozenc                   b    e Zd ZU dZedef         dz  ed<   dZeed<   dZ	e
d         dz  ed<   dS )DependsN.
dependencyT	use_cache)functionrequestscope)r   r   r   r   r   r   ri   r   rl   r   r	   r   r   r   r   r     s[         ,0Jc"T)000It37E7()D077777r   r   c                   0    e Zd ZU dZee         dz  ed<   dS )SecurityNscopes)r   r   r   r   r   rV   ri   r   r   r   r   r     s+         #'FHSMD '''''r   r   )&rR   collections.abcr   r   dataclassesr   enumr   typingr   r   r	   fastapi.exceptionsr
   fastapi.openapi.modelsr   pydanticr   r   pydantic.fieldsr   typing_extensionsr   _compatr   datastructuresr   r   r!   rq   ru   r{   r   r   r   r   r   r   r   r   r   <module>r      sL    . . . . . . . . ! ! ! ! ! !       * * * * * * * * * * 8 8 8 8 8 8 * * * * * * , , , , , , , , % % % % % % ( ( ( ( ( (      # " " " " "       l< l< l< l< l<I l< l< l<^Q
 Q
 Q
 Q
 Q
5 Q
 Q
 Q
hO
 O
 O
 O
 O
E O
 O
 O
dQ
 Q
 Q
 Q
 Q
U Q
 Q
 Q
hO
 O
 O
 O
 O
U O
 O
 O
dm< m< m< m< m<9 m< m< m<`O
 O
 O
 O
 O
4 O
 O
 O
dO
 O
 O
 O
 O
4 O
 O
 O
d $8 8 8 8 8 8 8 8 $( ( ( ( (w ( ( ( ( (r   