
    j	iR                        U d Z ddlmZ ddlmZ ddlZddlmZmZ ddlm	Z	 ddl
Z
ddlmZ d Z	 ddlZ	 dd	lmZ n# e$ r  e             dZY nw xY wn# e$ r dZY nw xY wi Zeeef         ed
<   i Zeeef         ed<   i Zeej        D ]Zeeej        d         <    G d de          Z G d de          Z G d de          Z G d de          Z G d de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( G d' d(e'          Z) G d) d*e'          Z* G d+ d,e&          Z+ G d- d.e+          Z, G d/ d0e&          Z- G d1 d2e-          Z. G d3 d4e&          Z/ G d5 d6e&          Z0 G d7 d8e&          Z1 G d9 d:e1          Z2 G d; d<e1          Z3 G d= d>e&          Z4 G d? d@e&          Z5 G dA dBe&          Z6 G dC dDe&          Z7 G dE dFe7          Z8 G dG dHe&          Z9 G dI dJe           Z: G dK dLe:          Z; G dM dNe:          Z< G dO dPe:          Z= G dQ dRe:          Z> G dS dTe:          Z? G dU dVe:          Z@ G dW dXe:          ZA G dY dZeA          ZB G d[ d\eC          ZDd] ZEd^ ZFd_ ZG	 djd`eHdaeHdbee         fdcZIdd ZJde ZKdf ZLdg ZMdh ZNdi ZOdS )kzExceptions raised by Google API core & clients.

This module provides base classes for all errors raised by libraries based
on :mod:`google.api_core`, including both HTTP and gRPC clients.
    )absolute_import)unicode_literalsN)OptionalDict)Union)error_details_pb2c                  :    t          j        dt                     d S )NzCPlease install grpcio-status to obtain helpful grpc error messages.)warningswarnImportWarning     R/srv/django_bis/venv311/lib/python3.11/site-packages/google/api_core/exceptions.py$_warn_could_not_import_grpcio_statusr       s&    MM    r   )
rpc_status_HTTP_CODE_TO_EXCEPTION_GRPC_CODE_TO_EXCEPTIONc                       e Zd ZdZdS )GoogleAPIErrorz;Base class for all exceptions raised by Google API Clients.N__name__
__module____qualname____doc__r   r   r   r   r   @   s        EEDr   r   c                       e Zd ZdZdS )DuplicateCredentialArgsz,Raised when multiple credentials are passed.Nr   r   r   r   r   r   F   s        66Dr   r   c                   >     e Zd ZdZ fdZed             Zd Z xZS )
RetryErrorzRaised when a function has exhausted all of its available retries.

    Args:
        message (str): The exception message.
        cause (Exception): The last exception raised when retrying the
            function.
    c                 t    t          t          |                               |           || _        || _        d S N)superr   __init__message_cause)selfr#   cause	__class__s      r   r"   zRetryError.__init__U   s3    j$((111r   c                     | j         S )z5The last exception raised when retrying the function.)r$   r%   s    r   r&   zRetryError.causeZ   s     {r   c                 B    d                     | j        | j                  S )Nz{}, last exception: {})formatr#   r&   r)   s    r   __str__zRetryError.__str___   s    '..t|TZHHHr   )	r   r   r   r   r"   propertyr&   r,   __classcell__r'   s   @r   r   r   L   ss             
   XI I I I I I Ir   r   c                       e Zd ZdZd ZdS )_GoogleAPICallErrorMetaz8Metaclass for registering GoogleAPICallError subclasses.c                     t                               | |||          }|j         t                              |j        |           |j         t                              |j        |           |S r    )type__new__coder   
setdefaultgrpc_status_coder   )mcsnamebases
class_dictclss        r   r4   z_GoogleAPICallErrorMeta.__new__f   s`    ll3eZ888#..sx===+#..s/CSIII
r   N)r   r   r   r   r4   r   r   r   r1   r1   c   s)        BB    r   r1   c                        e Zd ZU dZdZeedf         ed<   	 dZ	 d fd	Z	d Z
ed             Zed             Zed	             Zed
             Zed             Zed             Z xZS )GoogleAPICallErrora  Base class for exceptions raised by calling API methods.

    Args:
        message (str): The exception message.
        errors (Sequence[Any]): An optional list of error details.
        details (Sequence[Any]): An optional list of objects defined in google.rpc.error_details.
        response (Union[requests.Request, grpc.Call]): The response or
            gRPC call metadata.
        error_info (Union[error_details_pb2.ErrorInfo, None]): An optional object containing error info
            (google.rpc.error_details.ErrorInfo).
    Nr5   r   c                     t          t          |                               |           || _        	 || _        || _        || _        || _        d S r    )r!   r>   r"   r#   _errors_details	_response_error_info)r%   r#   errorsdetailsresponse
error_infor'   s         r   r"   zGoogleAPICallError.__init__   sO     $''00999)!%r   c                    d                     | j        | j                  }| j        rd                     || j                  }nC| j        r<d | j        D             }|r)d                     |d                    |                    }|S )Nz{} {}c                 p    g | ]3}t          |d           t          |d          "|j         d|j         4S )r5   r#   z: )hasattrr5   r#   ).0errors     r   
<listcomp>z.GoogleAPICallError.__str__.<locals>.<listcomp>   s^       uf-- 3:%2K2Kz44U]44  r   
)r+   r5   r#   rE   rD   join)r%   	error_msgrD   s      r   r,   zGoogleAPICallError.__str__   s    NN49dl;;	< 	My$,??II { M !%  
  M 'y$))F:K:K L LIr   c                 ,    | j         r| j         j        ndS )zThe reason of the error.

        Reference:
            https://github.com/googleapis/googleapis/blob/master/google/rpc/error_details.proto#L112

        Returns:
            Union[str, None]: An optional string containing reason of the error.
        N)rC   reasonr)   s    r   rR   zGoogleAPICallError.reason        +/*:Dt&&Dr   c                 ,    | j         r| j         j        ndS )a5  The logical grouping to which the "reason" belongs.

        Reference:
            https://github.com/googleapis/googleapis/blob/master/google/rpc/error_details.proto#L112

        Returns:
            Union[str, None]: An optional string containing a logical grouping to which the "reason" belongs.
        N)rC   domainr)   s    r   rU   zGoogleAPICallError.domain   rS   r   c                 ,    | j         r| j         j        ndS )a.  Additional structured details about this error.

        Reference:
            https://github.com/googleapis/googleapis/blob/master/google/rpc/error_details.proto#L112

        Returns:
            Union[Dict[str, str], None]: An optional object containing structured details about the error.
        N)rC   metadatar)   s    r   rW   zGoogleAPICallError.metadata   s     -1,<Ft(($Fr   c                 *    t          | j                  S )zuDetailed error information.

        Returns:
            Sequence[Any]: A list of additional error details.
        )listr@   r)   s    r   rD   zGoogleAPICallError.errors   s     DL!!!r   c                 *    t          | j                  S )al  Information contained in google.rpc.status.details.

        Reference:
            https://github.com/googleapis/googleapis/blob/master/google/rpc/status.proto
            https://github.com/googleapis/googleapis/blob/master/google/rpc/error_details.proto

        Returns:
            Sequence[Any]: A list of structured objects from error_details.proto
        )rY   rA   r)   s    r   rE   zGoogleAPICallError.details   s     DM"""r   c                     | j         S )zYOptional[Union[requests.Request, grpc.Call]]: The response or
        gRPC call metadata.)rB   r)   s    r   rF   zGoogleAPICallError.response   s     ~r   )r   r   NN)r   r   r   r   r5   r   int__annotations__r7   r"   r,   r-   rR   rU   rW   rD   rE   rF   r.   r/   s   @r   r>   r>   o   s0        
 
 "D%T	
!!! & & & & & &  " 	E 	E X	E 	E 	E X	E 	G 	G X	G " " X" 
# 
# X
#   X    r   r>   )	metaclassc                       e Zd ZdZdS )Redirectionz8Base class for for all redirection (HTTP 3xx) responses.Nr   r   r   r   r`   r`      s        BBBBr   r`   c                   *    e Zd ZdZej        j        ZdS )MovedPermanentlyz7Exception mapping a ``301 Moved Permanently`` response.N)r   r   r   r   httpclientMOVED_PERMANENTLYr5   r   r   r   rb   rb              AA;(DDDr   rb   c                   *    e Zd ZdZej        j        ZdS )NotModifiedz2Exception mapping a ``304 Not Modified`` response.N)r   r   r   r   rc   rd   NOT_MODIFIEDr5   r   r   r   rh   rh              <<;#DDDr   rh   c                   *    e Zd ZdZej        j        ZdS )TemporaryRedirectz8Exception mapping a ``307 Temporary Redirect`` response.N)r   r   r   r   rc   rd   TEMPORARY_REDIRECTr5   r   r   r   rl   rl              BB;)DDDr   rl   c                       e Zd ZdZdZdS )ResumeIncompletezException mapping a ``308 Resume Incomplete`` response.

    .. note:: :attr:`http.client.PERMANENT_REDIRECT` is ``308``, but Google
        APIs differ in their use of this status code.
    i4  N)r   r   r   r   r5   r   r   r   rp   rp      s          DDDr   rp   c                       e Zd ZdZdS )ClientErrorz5Base class for all client error (HTTP 4xx) responses.Nr   r   r   r   rr   rr     s        ????r   rr   c                   *    e Zd ZdZej        j        ZdS )
BadRequestz1Exception mapping a ``400 Bad Request`` response.N)r   r   r   r   rc   rd   BAD_REQUESTr5   r   r   r   rt   rt             ;;;"DDDr   rt   c                   2    e Zd ZdZeej        j        ndZdS )InvalidArgumentzCException mapping a :attr:`grpc.StatusCode.INVALID_ARGUMENT` error.N)r   r   r   r   grpc
StatusCodeINVALID_ARGUMENTr7   r   r   r   rx   rx     s,        MM;?;Kt77QUr   rx   c                   2    e Zd ZdZeej        j        ndZdS )FailedPreconditionzJException mapping a :attr:`grpc.StatusCode.FAILED_PRECONDITION`
    error.N)r   r   r   r   ry   rz   FAILED_PRECONDITIONr7   r   r   r   r}   r}     s3          ?C>Nt::TXr   r}   c                   2    e Zd ZdZeej        j        ndZdS )
OutOfRangez?Exception mapping a :attr:`grpc.StatusCode.OUT_OF_RANGE` error.N)r   r   r   r   ry   rz   OUT_OF_RANGEr7   r   r   r   r   r     s+        II7;7Gt33Tr   r   c                   *    e Zd ZdZej        j        ZdS )Unauthorizedz2Exception mapping a ``401 Unauthorized`` response.N)r   r   r   r   rc   rd   UNAUTHORIZEDr5   r   r   r   r   r   $  rj   r   r   c                   2    e Zd ZdZeej        j        ndZdS )UnauthenticatedzBException mapping a :attr:`grpc.StatusCode.UNAUTHENTICATED` error.N)r   r   r   r   ry   rz   UNAUTHENTICATEDr7   r   r   r   r   r   *  s,        LL:>:Jt66PTr   r   c                   *    e Zd ZdZej        j        ZdS )	Forbiddenz/Exception mapping a ``403 Forbidden`` response.N)r   r   r   r   rc   rd   	FORBIDDENr5   r   r   r   r   r   0  s        99; DDDr   r   c                   2    e Zd ZdZeej        j        ndZdS )PermissionDeniedzDException mapping a :attr:`grpc.StatusCode.PERMISSION_DENIED` error.N)r   r   r   r   ry   rz   PERMISSION_DENIEDr7   r   r   r   r   r   6  ,        NN<@<Lt88RVr   r   c                   J    e Zd ZdZej        j        Zeej	        j        ndZ
dS )NotFoundz`Exception mapping a ``404 Not Found`` response or a
    :attr:`grpc.StatusCode.NOT_FOUND` error.N)r   r   r   r   rc   rd   	NOT_FOUNDr5   ry   rz   r7   r   r   r   r   r   <  s;        0 0 ; D484Dt00$r   r   c                   *    e Zd ZdZej        j        ZdS )MethodNotAllowedz8Exception mapping a ``405 Method Not Allowed`` response.N)r   r   r   r   rc   rd   METHOD_NOT_ALLOWEDr5   r   r   r   r   r   D  rn   r   r   c                   *    e Zd ZdZej        j        ZdS )Conflictz.Exception mapping a ``409 Conflict`` response.N)r   r   r   r   rc   rd   CONFLICTr5   r   r   r   r   r   J  s        88;DDDr   r   c                   2    e Zd ZdZeej        j        ndZdS )AlreadyExistszAException mapping a :attr:`grpc.StatusCode.ALREADY_EXISTS` error.N)r   r   r   r   ry   rz   ALREADY_EXISTSr7   r   r   r   r   r   P  s+        KK9=9It55tr   r   c                   2    e Zd ZdZeej        j        ndZdS )Abortedz:Exception mapping a :attr:`grpc.StatusCode.ABORTED` error.N)r   r   r   r   ry   rz   ABORTEDr7   r   r   r   r   r   V  +        DD262Bt..r   r   c                   *    e Zd ZdZej        j        ZdS )LengthRequiredz5Exception mapping a ``411 Length Required`` response.N)r   r   r   r   rc   rd   LENGTH_REQUIREDr5   r   r   r   r   r   \          ??;&DDDr   r   c                   *    e Zd ZdZej        j        ZdS )PreconditionFailedz9Exception mapping a ``412 Precondition Failed`` response.N)r   r   r   r   rc   rd   PRECONDITION_FAILEDr5   r   r   r   r   r   b  s        CC;*DDDr   r   c                   *    e Zd ZdZej        j        ZdS )RequestRangeNotSatisfiablezCException mapping a ``416 Request Range Not Satisfiable`` response.N)r   r   r   r   rc   rd   REQUESTED_RANGE_NOT_SATISFIABLEr5   r   r   r   r   r   h  s        MM;6DDDr   r   c                   *    e Zd ZdZej        j        ZdS )TooManyRequestsz7Exception mapping a ``429 Too Many Requests`` response.N)r   r   r   r   rc   rd   TOO_MANY_REQUESTSr5   r   r   r   r   r   n  rf   r   r   c                   2    e Zd ZdZeej        j        ndZdS )ResourceExhaustedzEException mapping a :attr:`grpc.StatusCode.RESOURCE_EXHAUSTED` error.N)r   r   r   r   ry   rz   RESOURCE_EXHAUSTEDr7   r   r   r   r   r   t  s,        OO=A=Mt99SWr   r   c                   6    e Zd ZdZdZeej        j        ndZdS )	Cancelledz<Exception mapping a :attr:`grpc.StatusCode.CANCELLED` error.i  N)	r   r   r   r   r5   ry   rz   	CANCELLEDr7   r   r   r   r   r   z  s2        FF D484Dt00$r   r   c                       e Zd ZdZdS )ServerErrorzBase for 5xx responses.Nr   r   r   r   r   r     s        !!!!r   r   c                   J    e Zd ZdZej        j        Zeej	        j
        ndZdS )InternalServerErrorzlException mapping a ``500 Internal Server Error`` response. or a
    :attr:`grpc.StatusCode.INTERNAL` error.N)r   r   r   r   rc   rd   INTERNAL_SERVER_ERRORr5   ry   rz   INTERNALr7   r   r   r   r   r     s;        / / ;,D373Ct//r   r   c                   2    e Zd ZdZeej        j        ndZdS )Unknownz:Exception mapping a :attr:`grpc.StatusCode.UNKNOWN` error.N)r   r   r   r   ry   rz   UNKNOWNr7   r   r   r   r   r     r   r   r   c                   2    e Zd ZdZeej        j        ndZdS )DataLossz<Exception mapping a :attr:`grpc.StatusCode.DATA_LOSS` error.N)r   r   r   r   ry   rz   	DATA_LOSSr7   r   r   r   r   r     s+        FF484Dt00$r   r   c                   J    e Zd ZdZej        j        Zeej	        j
        ndZdS )MethodNotImplementedzjException mapping a ``501 Not Implemented`` response or a
    :attr:`grpc.StatusCode.UNIMPLEMENTED` error.N)r   r   r   r   rc   rd   NOT_IMPLEMENTEDr5   ry   rz   UNIMPLEMENTEDr7   r   r   r   r   r     s;        4 4 ;&D8<8Ht44dr   r   c                   *    e Zd ZdZej        j        ZdS )
BadGatewayz1Exception mapping a ``502 Bad Gateway`` response.N)r   r   r   r   rc   rd   BAD_GATEWAYr5   r   r   r   r   r     rv   r   r   c                   J    e Zd ZdZej        j        Zeej	        j
        ndZdS )ServiceUnavailablezlException mapping a ``503 Service Unavailable`` response or a
    :attr:`grpc.StatusCode.UNAVAILABLE` error.N)r   r   r   r   rc   rd   SERVICE_UNAVAILABLEr5   ry   rz   UNAVAILABLEr7   r   r   r   r   r     s;        2 2 ;*D6:6Ft22Dr   r   c                   *    e Zd ZdZej        j        ZdS )GatewayTimeoutz5Exception mapping a ``504 Gateway Timeout`` response.N)r   r   r   r   rc   rd   GATEWAY_TIMEOUTr5   r   r   r   r   r     r   r   r   c                   2    e Zd ZdZeej        j        ndZdS )DeadlineExceededzDException mapping a :attr:`grpc.StatusCode.DEADLINE_EXCEEDED` error.N)r   r   r   r   ry   rz   DEADLINE_EXCEEDEDr7   r   r   r   r   r     r   r   r   c                       e Zd ZdZdS )"AsyncRestUnsupportedParameterErrorzPRaised when an unsupported parameter is configured against async rest transport.Nr   r   r   r   r   r     s        ZZDr   r   c                 B    t                               | t                    S )zReturn the exception class for a specific HTTP status code.

    Args:
        status_code (int): The HTTP status code.

    Returns:
        :func:`type`: the appropriate subclass of :class:`GoogleAPICallError`.
    )r   getr>   status_codes    r   exception_class_for_http_statusr          #&&{4FGGGr   c                 R    t          |           } ||fi |}|j        | |_        |S )a  Create a :class:`GoogleAPICallError` from an HTTP status code.

    Args:
        status_code (int): The HTTP status code.
        message (str): The exception message.
        kwargs: Additional arguments passed to the :class:`GoogleAPICallError`
            constructor.

    Returns:
        GoogleAPICallError: An instance of the appropriate subclass of
            :class:`GoogleAPICallError`.
    )r   r5   r   r#   kwargserror_classrL   s        r   from_http_statusr     s<     2+>>KK**6**Ez 
Lr   c                 f    |r|                                 nd }d                    |||           }|S )Nz{method} {url}: {error})methodurlrL   )upperr+   )rL   r   r   r#   s       r   _format_rest_error_messager     sB    %/V\\^^^4F'.. /  G
 Nr   r   r   payloadc                    |si n|}|                     di                                dd          }|                     di                                dd          }|                     di                                dd          }t          t          d |                    }|r|d         nd	}t          |||          }	t	          | j        |	||| |
          }
|
S )a  Create a :class:`GoogleAPICallError` from a google auth rest response.

    Args:
        response Union[google.auth.transport.Response, google.auth.aio.transport.Response]: The HTTP response.
        method Optional(str): The HTTP request method.
        url Optional(str): The HTTP request url.
        payload Optional(dict): The HTTP response payload. If not passed in, it is read from response for a response type of google.auth.transport.Response.

    Returns:
        GoogleAPICallError: An instance of the appropriate subclass of
            :class:`GoogleAPICallError`, with the message and errors populated
            from the response.
    rL   r#   unknown errorrD   r   rE   c                 6    |                      dd          dk    S )Nz@type z(type.googleapis.com/google.rpc.ErrorInfo)r   )details    r   <lambda>z,format_http_response_error.<locals>.<lambda>
  s    6::gr229: r   r   NrD   rE   rF   rG   )r   rY   filterr   r   r   )rF   r   r   r   error_messagerD   rE   error_info_listrG   r#   	exceptions              r   format_http_response_errorr     s       ,bbWGKK,,00OLLM[["%%))(B77Fkk'2&&**9b99G: :	
 	
 O (7@##DJ(DDG   I r   c                     	 |                                  }n# t          $ r dd| j        pdii}Y nw xY wt          | | j        j        | j        j        |          S )aS  Create a :class:`GoogleAPICallError` from a :class:`requests.Response`.

    Args:
        response (requests.Response): The HTTP response.

    Returns:
        GoogleAPICallError: An instance of the appropriate subclass of
            :class:`GoogleAPICallError`, with the message and errors populated
            from the response.
    rL   r#   r   )json
ValueErrortextr   requestr   r   )rF   r   s     r   from_http_responser     sw    K--// K K KY(HIJK%(")8+;+?  s    11c                 B    t                               | t                    S )zReturn the exception class for a specific :class:`grpc.StatusCode`.

    Args:
        status_code (grpc.StatusCode): The gRPC status code.

    Returns:
        :func:`type`: the appropriate subclass of :class:`GoogleAPICallError`.
    )r   r   r>   r   s    r   exception_class_for_grpc_statusr   1  r   r   c                     t          | t                    rt                              | |           } t	          |           } ||fi |}|j        | |_        |S )a  Create a :class:`GoogleAPICallError` from a :class:`grpc.StatusCode`.

    Args:
        status_code (Union[grpc.StatusCode, int]): The gRPC status code.
        message (str): The exception message.
        kwargs: Additional arguments passed to the :class:`GoogleAPICallError`
            constructor.

    Returns:
        GoogleAPICallError: An instance of the appropriate subclass of
            :class:`GoogleAPICallError`.
    )
isinstancer\   _INT_TO_GRPC_CODEr   r   r7   r   s        r   from_grpc_statusr   =  sf     +s## F'++KEE1+>>KK**6**E%!,Lr   c                 B    t          | d          ot          | d          S )Nr5   rE   )rJ   )rpc_excs    r   _is_informative_grpc_errorr   W  s!    7F##C(C(CCr   c           
         t           st                       g d fS 	 t          j        |           }n# t          $ r g d fcY S w xY w|sg d fS t          j        t          j        t          j        t          j        t          j	        t          j
        t          j        t          j        t          j        t          j        g
}d }g }|j        D ]t!          t#          fd|                    }t%          |          dk    r}n% |d                     }                    |           |                    |           t+          |t          j                  r|}||fS )Nc                 8                         | j                  S r    )Is
DESCRIPTOR)xr   s    r   r   z+_parse_grpc_error_details.<locals>.<lambda>w  s    VYYq|44 r   r   )r   r   	from_callNotImplementedErrorr   rt   PreconditionFailureQuotaFailure	ErrorInfo	RetryInfoResourceInfoRequestInfo	DebugInfoHelpLocalizedMessagerE   rY   r   lenUnpackappendr   )r   statuspossible_errorsrG   error_detailsmatched_detail_clsinfor   s          @r   _parse_grpc_error_detailsr  [  sx    ,...4x%g..   4x  4x 	$-&##&%#*O JM.  !4444oFF
 
 !""a''DD(%a(**DMM$T"""d-788 	J*$$s   1 AAc                 :   t           t          | t           j                  st          |           rLt	          |           \  }}t          |                                 |                                 | f|| |          S t          t          |           | f|           S )a  Create a :class:`GoogleAPICallError` from a :class:`grpc.RpcError`.

    Args:
        rpc_exc (grpc.RpcError): The gRPC error.

    Returns:
        GoogleAPICallError: An instance of the appropriate subclass of
            :class:`GoogleAPICallError`.
    Nr   )rD   rF   )
ry   r   Callr   r  r   r5   rE   r>   str)r   rE   err_infos      r   from_grpc_errorr    s     	Z;;	#G	,	, 	5g>>LLNNOO:
 
 
 	
 "#g,,zGTTTTr   r    )Pr   
__future__r   r   http.clientrc   typingr   r   r   r
   
google.rpcr   r   ry   grpc_statusr   ImportErrorr   r\   	Exceptionr]   r   r   rz   r  valuer   r   r   r3   r1   r>   r`   rb   rh   rl   rp   rr   rt   rx   r}   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r   r   r   r   r  r   r   r   r   r   r  r  r   r   r   <module>r#     s	     ' & & & & & ' ' ' ' ' '     ! ! ! ! ! ! ! !        ( ( ( ( ( (  	KKK*******   ,,...


    DDD
 13 c9n- 2 2 202 c9n- 2 2 2
  _ * *()!'!*%%	 	 	 	 	Y 	 	 		 	 	 	 	n 	 	 	I I I I I I I I.	 	 	 	 	d 	 	 	u u u u u3J u u u upC C C C C$ C C C) ) ) ) ){ ) ) )$ $ $ $ $+ $ $ $* * * * * * * *    {   @ @ @ @ @$ @ @ @# # # # # # # #V V V V Vj V V VY Y Y Y Y Y Y YR R R R R R R R$ $ $ $ $; $ $ $U U U U Ul U U U! ! ! ! ! ! ! !W W W W Wy W W WO O O O O{ O O O* * * * *{ * * *         {      T T T T TH T T TM M M M Mh M M M' ' ' ' '[ ' ' '+ + + + + + + +7 7 7 7 7 7 7 7) ) ) ) )k ) ) )X X X X X X X XO O O O O O O O" " " " "$ " " "N N N N N+ N N NM M M M Mk M M MO O O O O{ O O OS S S S S; S S S# # # # # # # #Q Q Q Q Q Q Q Q' ' ' ' '[ ' ' 'W W W W W~ W W W	 	 	 	 	)< 	 	 		H 	H 	H  ,   @D' '' #'.6tn' ' ' 'T  (	H 	H 	H  4D D D'% '% '%TU U U U Us1   A < A AA AA AA