
    *'&h                   	   U d Z ddlmZ ddlZddlZddlm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 dd	lmZ dd
lmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlm Z  ddlm!Z! ddlm"Z" ddlm#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* ddl%m+Z+  e"d           Z, e"d!d"#          Z- e"d$ed%ef         &          Z. e"d'd(&          Z/ e"d)d*&          Z0 e"d+d,&          Z1 e"d-d.&          Z2e'j3        r/dd/l4m5Z5 dd0l4m6Z6 d1 Z7e8j9        d2         j:        Z;d3 Z<dd:Z=d d;Z>ne'j?        rd d<Z>nd d=Z>d!d@Z@ G dA dB          ZAd"dFZBd#dHZC	 d$d%dLZDd&dRZEd'dVZFd(d[ZGd)daZH e"dbdP&          ZId*deZJd+dkZK e"dl          ZL e"dm          ZM G dn do          ZNdp ZOedd%dqd,dx            ZPeddydqd-dz            ZPddydqd-d{ZPd.d~ZQ	 d/d0dZR	 d1d2dZSd1dZT	 	 	 	 d3d4dZUd ZVd ZW	 	 	 d5d6dZX G d d          ZYd ZZd Z[	 	 	 	 d7dZ\d Z]d8dZ^ e"dd&          Z_ G d dee-                   Z` G d de`e-                   Za G d de`e-                   Zbe!r	e`Zce`ZdeeZfeeZgnebxZcZfeaxZdZgd9dZh G d d          Zie!reeZjneijk        Zj G d d          Zld:dZmd;dZnd<dZo	 	 d=d>dZpd?dZqd@dZrdAdZs	 d$dBdƄZtdCd˄Zud̄ Zv G d̈́ dee          Zw G dτ dee,                   Zx G dф dee,                   Zy G dӄ dee,                   Zz G dՄ de{          Z| G dׄ de8          Z} G dل de}ۦ          Z~e!r	ddlmZ eZne~Z e"dej        &          Z	 dDdEdZdadFdZdGdZdHdZ G d de          Zd$dIdZdJdZi Zded<   dKdZ e
j        d          Z	 	 dLdMdZdNdZ e
j        d          Z e
j        d           ZeefdOdZ e8d          Zd Z e
j        d          Z G d d	          Z G d
 d          Zd Zd ZdPdZdQdZdRdZ e
j        d          ZdSdZdTdZdDdZ G d dej                  Zej        Ze#e,e*ej                 f         ZdS (U  zRoutines to help with the creation, loading and introspection of
modules, classes, hierarchies, attributes, functions, and methods.

    )annotationsNupdate_wrapper)CodeType)Any)Callable)cast)Dict)	FrozenSet)Generic)Iterator)List)Mapping)NoReturn)Optional)overload)Sequence)Set)Tuple)Type)TYPE_CHECKING)TypeVar)Union   )_collections)compat)HAS_CYEXTENSION)Literal   )exc_T_T_coT)	covariant_F.)bound_MPzmemoized_property[Any]_MAz#HasMemoized.memoized_attribute[Any]_HPzhybridproperty[Any]_HMzhybridmethod[Any])call_annotate_function)Formatc                    t          | dd           }|;t          |||           }t          |t                    st	          | d          |S d S )N__annotate__)ownerz!.__annotate__ returned a non-dict)getattrr*   
isinstancedict
ValueError)objformatannotateanns       V/var/www/html/reinick/venv/lib/python3.11/site-packages/sqlalchemy/util/langhelpers.py_get_and_call_annotater8   F   sa    355(6EEECc4(( N C!L!L!LMMMJt    __annotations__c                   t          | t                    r#	 t          |           }n'# t          $ r i cY S w xY wt	          | dd           }|i S t          |t
                    st          | d          t          |          S )Nr:   z+.__annotations__ is neither a dict nor None)r0   type_BASE_GET_ANNOTATIONSAttributeErrorr/   r1   r2   r3   r6   s     r7   _get_dunder_annotationsr@   R   s    c4   		+C00!   			 #0$77C{	#t$$ 	EEE   Cyys   ' 66r3   r   r4   r+   returnMapping[str, Any]c               B   	 t          |           }|t          |          S n# t          $ r Y nw xY wt          | |          }|t          |           }|8t	          | t
                    st          |           ri S t          | d          |si S t          |          S )z:A sparse implementation of annotationlib.get_annotations()Nz does not have annotations)r@   r1   	Exceptionr8   r0   r<   callable	TypeError)r3   r4   r6   s      r7   _vendored_get_annotationsrG   d   s    
	!)#..C Cyy    	 	 	D	 %S&11; *#..C;#t$$  	s@@@AAA 	ICyys   # 
00c                8    t          | t          j                  S )N)r4   )rG   r+   
FORWARDREFr3   s    r7   get_annotationsrK      s     )V5FGGGGr9   c                *    t          j        |           S N)inspectrK   rJ   s    r7   rK   rK      s    &s+++r9   c                    t          | t                    r| j                            dd           }nt	          | dd           }|t
          j        S t          d|          S )Nr:   rB   )r0   r<   __dict__getr/   r   
EMPTY_DICTr	   r?   s     r7   rK   rK      sa     c4   	8,""#4d;;CC#0$77C;**+S111r9   xstrc                    |                      d          } t          j                    }|                    |            t	          t
          |                                          S )Nzutf-8)encoder   md5_not_for_securityupdater	   rT   	hexdigest)rS   ms     r7   md5_hexr[      sH    	A#%%AHHQKKKQ[[]]###r9   c                  2    e Zd ZU dZdZded<   ddZddZdS )safe_reraisea  Reraise an exception after invoking some
    handler code.

    Stores the existing exception info before
    invoking so that it is maintained across a potential
    coroutine context switch.

    e.g.::

        try:
            sess.commit()
        except:
            with safe_reraise():
                sess.rollback()

    TODO: we should at some point evaluate current behaviors in this regard
    based on current greenlet, gevent/eventlet implementations in Python 3, and
    also see the degree to which our own asyncio (based on greenlet also) is
    impacted by this. .rollback() will cause IO / context switch to occur in
    all these scenarios; what happens to the exception context from an
    "except:" block if we don't explicitly store it? Original issue was #2703.

    )	_exc_infozdUnion[None, Tuple[Type[BaseException], BaseException, types.TracebackType], Tuple[None, None, None]]r^   rA   Nonec                6    t          j                    | _        d S rM   )sysexc_infor^   selfs    r7   	__enter__zsafe_reraise.__enter__   s    r9   type_Optional[Type[BaseException]]valueOptional[BaseException]	tracebackOptional[types.TracebackType]r   c                    | j         J |+| j         \  }}}|J d | _         |                    |          d | _         |J |                    |          rM   )r^   with_traceback)rd   rf   rh   rj   exc_type	exc_valueexc_tbs          r7   __exit__zsafe_reraise.__exit__   ss     ~)))=*..'Hi(((!DN**6222!DN$$$&&y111r9   NrA   r_   )rf   rg   rh   ri   rj   rk   rA   r   )__name__
__module____qualname____doc__	__slots__r:   re   rq    r9   r7   r]   r]      sc          0 I   ( ( ( (2 2 2 2 2 2r9   r]   clsType[_T]Iterator[Type[_T]]c              #     K   t                      }| g}|r]|                                } | |v r|                    |            |                    |                                            | V  |[d S d S rM   )setpopaddextend__subclasses__)ry   seenstacks      r7   walk_subclassesr      s      UUDEE
 iikk$;;HHSMMMS''))***			      r9   elementc                z    t          | t                    r| S 	 t          |           S # t          $ r d| z  cY S w xY w)Nzunprintable element %r)r0   rT   rD   )r   s    r7   string_or_unprintabler      sV    '3 6	6w<< 	6 	6 	6+g5555	6s   ( ::	Type[Any]use_nameOptional[str]c                x    |p| j         }d                    d t          j        d|          D                       S )N c              3  >   K   | ]}|                                 V  d S rM   )lower).0ns     r7   	<genexpr>z(clsname_as_plain_name.<locals>.<genexpr>  s*      NN!AGGIINNNNNNr9   z([A-Z][a-z]+|SQL))rs   joinrefindall)ry   r   names      r7   clsname_as_plain_namer      s>     #s|D88NNrz2F'M'MNNNNNNr9   instance_or_clsUnion[Type[Any], object]against_methodCallable[..., Any]boolc                z    t          | t                    s| j        }n| }|j        }t	          ||          }||k    S )z1Return True if the two class methods don't match.)r0   r<   	__class__rs   r/   )r   r   current_clsmethod_namecurrent_methods        r7   method_is_overriddenr     sG     ot,, &%/% )K'.{K'H'HN^++r9   slcsliceTuple[Any, ...]c                    g }| j         | j        | j        fD ];}t          |d          r|                                }|                    |           <t          |          S )zrdecode a slice object as sent to __getitem__.

    takes into account the 2.5 __index__() method, basically.

    	__index__)startstopstephasattrr   appendtuple)r   retrS   s      r7   decode_slicer     sa     CY#(*  1k"" 	A

1::r9   usedSequence[str]basesIterator[str]c           
   '    K   t          |           }|D ]lt          j        ft          fdt	          d                              }|D ]!}||vr|                    |           |V   n"t          dz            md S )Nc                (    t          |           z   S rM   rT   )ibases    r7   <lambda>z!_unique_symbols.<locals>.<lambda>+  s    $Q- r9   i  z&exhausted namespace for symbol base %s)r}   	itertoolschainmapranger   	NameError)r   r   used_setpoolsymr   s        @r7   _unique_symbolsr   &  s      4yyH M MG''''t55
 
  	M 	MC(""S!!!			 #
 DtKLLL M Mr9   fnCallable[[int], Any]r   intIterator[Any]c              #  L   K   |r|| dz   z  } | |          V  ||z  }|dS dS )z6Call the given function given each nonzero bit from n.r   Nrx   )r   r   bs      r7   map_bitsr   6  sW        !aLbee	Q      r9   _FntargetCallable[[_Fn], _Fn]c                0     d fd}t          |           S )z'A signature-matching decorator factory.r   r   rA   c                P   t          j        |           s#t          j        |           st          d          t	          | dd           }|0d | _        	 t          j        |           }|| _        n # || _        w xY wt          j        |           }dt          |j	        pd          z  }t                              |j        pd          }|                    i ||          }t          t          d|d                             t          d|dd	                   z   | j        fz   }t#          |d
d          \  }}t          ||          }|                    t'          |d                     | j        |d<   t          j        |           rd|d<   d|d<   n
d|d<   d|d<   dt+          |d                   v rd|z  }	nd|z  }	||| d| j        i}
t          t.          j        t3          |	|
| j                            }| j        |_        | j        |_        t9          ||           S )Nznot a decoratable functionr-   rM   rx   )r   defaultskwonlydefaultszTuple[str, ...]r   r      r   r   )r   r   Fgroupedr   zasync prefixzawait target_prefix __zf%(prefix)sdef %(name)s%(grouped_args)s:
    return %(target_prefix)s%(target)s(%(fn)s, %(apply_pos)s)
ze%(prefix)sdef %(name)s%(grouped_args)s:
    return %(target_prefix)s%(target)s(%(fn)s, %(apply_kw)s)
rs   )rN   
isfunctionismethodrD   r/   r-   r   inspect_getfullargspeclenr   r1   fromkeysr   _replacer   r	   rs   r   rX   format_argspec_plusiscoroutinefunctionreprrt   typesFunctionType_exec_code_in_env__defaults____kwdefaults__r   )r   annofuncspecempty_defaultsempty_kwdefaultsnames	targ_namefn_namemetadatacodeenv	decoratedr   s               r7   decoratezdecorator.<locals>.decorateG  st   !"%% 	:g.>r.B.B 	:8999 2~t44"BO+4R88"*(****044D !3t}':#;#;;==)<)BCC}}#+  
 
 $($q'2233$d1Q3i001{n 	
 -UHdCC	7-1w-O-O-O+D%@@@AAA;&r** 	+!)HX(0H_%%!#HX(*H_% 4Q==   	 D 	  vR
 dC55
 
	 "$	#%#4	 i,,,s   A0 0	A9)r   r   rA   r   r   )r   r   s   ` r7   	decoratorr   D  s:    T- T- T- T- T- T-l (F+++r9   r   Union[str, types.CodeType]r   Dict[str, Any]r   c                2    t          | |           ||         S rM   )exec)r   r   r   s      r7   r   r     s     	sOOOw<r9   _PF_TEc                  8    e Zd Z	 dddZd ZddZddZddZdS )PluginLoaderNgrouprT   auto_fnOptional[Callable[..., Any]]c                0    || _         i | _        || _        d S rM   )r   implsr   )rd   r   r   s      r7   __init__zPluginLoader.__init__  s     
%'
r9   c                8    | j                                          d S rM   )r   clearrc   s    r7   r  zPluginLoader.clear  s    
r9   r   rA   r   c                x   || j         v r | j         |                     S | j        r+|                     |          }|r|| j         |<    |            S t          j        | j                  D ]2}|j        |k    r%|j        | j         |<   |                                c S 3t          j        d| j        d|          )NzCan't load plugin: :)	r   r   r   importlib_metadata_getr   r   loadr    NoSuchModuleError)rd   r   loaderimpls       r7   r  zPluginLoader.load  s    4:#4:d#%%%< 	 \\$''F  #)
4 vxx1$*== 	# 	#DyD  #'9
4 yy{{""" ! ##*.***dd;
 
 	
r9   
modulepathobjnamer_   c                *    fd}|| j         |<   d S )Nc                     t                    }                     d          dd          D ]}t          | |          } t          |           S )N.r   )
__import__splitr/   )modtokenr	  r
  s     r7   r  z#PluginLoader.register.<locals>.load  sW    Z((C#))#..qrr2 * *c5))3(((r9   r   )rd   r   r	  r
  r  s     `` r7   registerzPluginLoader.register  s6    	) 	) 	) 	) 	) 	)  
4r9   c                    | j         |= d S rM   r  )rd   r   s     r7   
deregisterzPluginLoader.deregister  s    Jtr9   rM   )r   rT   r   r   )r   rT   rA   r   )r   rT   r	  rT   r
  rT   rA   r_   )r   rT   rA   r_   )rs   rt   ru   r   r  r  r  r  rx   r9   r7   r   r     s{        BF      
 
 
 
&            r9   r   c                    	 t           j        }| j        }|j        }t	          |j        d |                   t          |j        |z            fS # t          $ r4 t          j
        |           }|d         t          |d                   fcY S w xY w)Nr   r   )rN   CO_VARKEYWORDS__code__co_argcountlistco_varnamesr   co_flagsr>   r   r   )r   co_varkeywordsconargsr   s        r7   _inspect_func_argsr     s    
 / ['((~-..
 	
  & & &
 ,R00AwT!W%%%%&s   A ;BB)_setraiseerrr<   r!  Optional[Set[str]]r"  Literal[True]Set[str]c                   d S rM   rx   ry   r!  r"  s      r7   get_cls_kwargsr(    s	     sr9   Fc                   d S rM   rx   r'  s      r7   r(  r(    s	     r9   c                  |du }|rt                      }|J | j                            dd          }|o8t          |t          j                  ot          |j        t          j                  }|rCt          |          \  }}|	                    |           |s|s|rt          d|  d          dS nd}|r|r| j        D ]}t          ||           n|                    d           |S )ae  Return the full set of inherited kwargs for the given `cls`.

    Probes a class's __init__ method, collecting all named arguments.  If the
    __init__ defines a \**kwargs catch-all, then the constructor is presumed
    to pass along unrecognized keywords to its base classes, and the
    collection process is repeated recursively on each of the bases.

    Uses a subset of inspect.getfullargspec() to cut down on method overhead,
    as this is used within the Core typing system to create copies of type
    objects which is a performance-sensitive operation.

    No anonymous tuple arguments please !

    Nr   Fz
given cls z  doesn't have an __init__ method)r!  rd   )r}   rP   rQ   r0   r   r   r  r   r   rX   rF   	__bases__r(  discard)	ry   r!  r"  toplevelctrhas_initr   has_kwcs	            r7   r(  r(    s=   " t|H uu
,

:u
-
-C 	 	5sE.//	5s|U^44   *3//vE 	h 	 FFFF   t v  	 	Aad+++3 4 	LLKr9   func	List[str]c                6    t          j        |           d         S )zReturn the set of legal kwargs for the given `func`.

    Uses getargspec so is safe to call for methods, functions,
    etc.

    r   )r   r   )r2  s    r7   get_func_kwargsr5  .  s     (..q11r9   no_self_is_initcompat.FullArgSpecc           	        t          j        |           rt          d| z            t          j        |           rq|r[|rYt	          j        |           }t	          j        |j        dd         |j        |j	        |j
        |j        |j        |j                  S t	          j        |           S t          j        |           r|rg|s| j        r^t	          j        | j                  }t	          j        |j        dd         |j        |j	        |j
        |j        |j        |j                  S t	          j        | j                  S t          j        |           rt%          | j        |d          S t)          | d          rt	          j        | j                  S t)          | d          rAt          j        | j                  rt%          | j        |          S t          d	| z            t          d	| z            )
zReturn the argument signature for any callable.

    All pure-Python callables are accepted, including
    functions, methods, classes, objects with __call__;
    builtins and other edge cases like functools.partial() objects
    raise a TypeError.

    zCan't inspect builtin: %sr   NT)r6  r7  __func____call__)r6  zCan't inspect callable: %s)rN   	isbuiltinrF   r   r   r   FullArgSpecargsvarargsvarkwr   
kwonlyargsr   r   r   __self__r:  isclassget_callable_argspecr   r   r;  )r   r6  r7  r   s       r7   rD  rD  9  s     *;3b8999		B		 (; 	5 	5044D%	!""
#    0444		"		 ; 	> 	>BK 	>0==D%	!""
#    0===			 ;#K4
 
 
 	
 
Z	 	  ;,R[999	Z	 	  ;BK(( 	?'WEEEE82=>>>4r9:::r9   -Union[Callable[..., Any], compat.FullArgSpec]r   Dict[str, Optional[str]]c           
        t          |           rt          j        |           }n| }t          j        | }t          j        |d         |d         |d         d|d                   }|d         rG|d         d         }t          j        |d         dd         |d         |d         d|d                   }n|d         rd|d         z  }|}nd}|}d}|d         r6|t	          t          t          t                   |d                             z  }|d         r|t	          |d                   z  }|d         |d         z   }|r|d|z
  d         }	nd}	t          j        ||d         |d         |	d	 
          }
|d         r/t          j        |dd         |d         |d         |	d 
          }n|
}|rt          ||||
||          S t          |||dd         |
dd         |dd         |dd                   S )a  Returns a dictionary of formatted, introspected function arguments.

    A enhanced variant of inspect.formatargspec to support code generation.

    fn
       An inspectable callable or tuple of inspect getargspec() results.
    grouped
      Defaults to True; include (parens, around, argument) lists

    Returns:

    args
      Full inspect.formatargspec for fn
    self_arg
      The name of the first positional argument, varargs[0], or None
      if the function defines no positional arguments.
    apply_pos
      args, re-written in calling rather than receiving syntax.  Arguments are
      passed positionally.
    apply_kw
      Like apply_pos, except keyword-ish args are passed as keywords.
    apply_pos_proxied
      Like apply_pos but omits the self/cls argument

    Example::

      >>> format_argspec_plus(lambda self, a, b, c=3, **d: 123)
      {'grouped_args': '(self, a, b, c=3, **d)',
       'self_arg': 'self',
       'apply_kw': '(self, a, b, c=c, **d)',
       'apply_pos': '(self, a, b, c, **d)'}

    r   r   r   N   z%s[0]r   rx   c                &    dt          |           z   S N=r   rS   s    r7   r   z%format_argspec_plus.<locals>.<lambda>  s    cCFFl r9   )formatvaluec                &    dt          |           z   S rJ  r   rL  s    r7   r   z%format_argspec_plus.<locals>.<lambda>  s    #A, r9   )grouped_argsself_arg	apply_posapply_kwapply_pos_proxiedapply_kw_proxied)	rE   r   r   inspect_formatargspecr   r	   r   r   r1   )r   r   r   r>  rQ  rP  rS  num_defaults	name_argsdefaulted_valsrR  rT  s               r7   r   r   q  sw   H || ,R00'.D,Qa$q'4a I Aw &71:"8GABBKa$q'4a
 
 
a &T!W$%%LAw 7DsT!W55666Aw %DG$Q$q'!I  "1|#3#5#56+QQ**  H Aw 	$!7abbMGG..
 
 
 $ 
/-
 
 
 	
 "oad^/"5-ad3
 
 
 	
r9   c                    | t           j        u rd}|rdnd}|rdnd}n0	 t          | |          S # t          $ r d}|r|nd}|rdnd	}Y nw xY wt	          d|||||
          S )a$  format_argspec_plus with considerations for typical __init__ methods

    Wraps format_argspec_plus with error handling strategies for typical
    __init__ cases:

    .. sourcecode:: text

      object.__init__ -> (self)
      other unreflectable (usually C) -> (self, *args, **kwargs)

    z(self)rd   z()r   r   z(self, *args, **kwargs)zself, *args, **kwargsz(*args, **kwargs)z*args, **kwargs)rP  rO  rQ  rR  rS  rT  )objectr   r   rF   r1   )methodr   rO  r>  proxieds        r7   format_argspec_initr^    s       ".xx!)$$r	L&vw???? 	L 	L 	L4L#*G<<0GD-4K)):KGGG	L !!    s   0 A
Arx   
target_clstarget_cls_sphinx_nameproxy_cls_sphinx_nameclassmethodsmethods
attributesuse_intermediate_variableCallable[[_T], _T]c                    d }|S )aS  A class decorator indicating attributes should refer to a proxy
    class.

    This decorator is now a "marker" that does nothing at runtime.  Instead,
    it is consumed by the tools/generate_proxy_methods.py script to
    statically generate proxy methods and attributes that are fully
    recognized by typing tools such as mypy.

    c                    | S rM   rx   )ry   s    r7   r   z&create_proxy_methods.<locals>.decorate  s    
r9   rx   )r_  r`  ra  rb  rc  rd  re  r   s           r7   create_proxy_methodsri    s    &   Or9   c                    	 t          j        |           S # t          $ r! | t          j        u r	dgdddfcY S dgdddfcY S w xY w)a  inspect.getargspec with considerations for typical __init__ methods

    Wraps inspect.getargspec with error handling for typical __init__ cases:

    .. sourcecode:: text

      object.__init__ -> (self)
      other unreflectable (usually C) -> (self, *args, **kwargs)

    rd   Nr>  kwargs)r   r   rF   r[  r   )r\  s    r7   getargspec_initrl     sn    6,V444 6 6 6V_$$HdD$////Hfh5555	6s    AA Ac                V    t          | t          j                  r| j        s| j        S | S )zSAdjust the incoming callable such that a 'self' argument is not
    required.

    )r0   r   
MethodTyperB  r:  )func_or_clss    r7   unbound_method_to_callablerp  4  s2     +u/00 9M ##r9   additional_kwSequence[Tuple[str, Any]]
to_inspect%Optional[Union[object, List[object]]]
omit_kwargc           	     h    | g}nt          j        |          }t                      g }t          j                    }d}t	          |          D ]%\  }}	 t          j        |j                  }	|	j        rt          |	j                  nd}
|dk    rW|	j
        r|	j
        }|
r$|                    |	j        d|
                     nR|                    |	j        dd                    n/|                    fd|	j        d|
          D                        |
rI|	j        sJ |                    d t          |	j        |
 d         |	j                  D                        # t          $ r Y #w xY wg }|                     fd|D                        |=t!           |          r-|                    d t#           |          D                        |                                D ]P\  }}||v r
	 t#           |          }|ur ||k    r|                    |d|           A# t(          $ r Y Mw xY w|rN|D ]K\  }}	 t#           |          }|ur ||k    r|                    |d|           <# t(          $ r Y Hw xY w j        j        d	d
                    |          dS )z}Produce a __repr__() based on direct association of the __init__()
    specification vs. same-named attributes present.

    Nr   r   c                    g | ]}|fS rx   rx   )r   argmissings     r7   
<listcomp>z generic_repr.<locals>.<listcomp>d  s    IIIc7^IIIr9   c                    g | ]	\  }}||f
S rx   rx   )r   rx  defaults      r7   rz  z generic_repr.<locals>.<listcomp>j  s0       (C g  r9   c              3  T   K   | ]"}t          t          |d                     V  #d S rM   )r   r/   )r   rx  r3   s     r7   r   zgeneric_repr.<locals>.<genexpr>s  s7      DDC$wsC..//DDDDDDr9   c                ,    g | ]}t          |          S rx   r   )r   vals     r7   rz  z generic_repr.<locals>.<listcomp>v  s    @@@StCyy@@@r9   rK  (, ))r   to_listr[  OrderedDict	enumerater   r   r   r   r   r?  r   r>  rX   ziprF   r   r/   itemsr   rD   r   rs   r   )r3   rq  rs  ru  pos_argskw_argsvargsr   inspr   default_lenoutputrx  defvalr  ry  s   `              @r7   generic_reprr  @  si    U

!)*55
hhGH2>2J2L2LGEZ((  4	0??D 15D#dm,,,1KAvv< ) LE 3OODIan$=>>>>OODIabbM2222IIIItyK</HIII    	}$$$ ,/ I{lmm4dm- -    %  	 	 	H	4 F
MMDDDD8DDDDDDWS%00@@GC,?,?@@@AAA}}  V*	#sG,,C'!!cVmmcc2333 	 	 	D	  ( 	 	KCc300g%%#--MMSSS##"6777    }---tyy/@/@/@/@AAs6   E''
E54E595H//
H<;H<	5I??
JJc                  0    e Zd ZdZdZd Zd Zd	dZd ZdS )
portable_instancemethodz_Turn an instancemethod into a (parent, name) pair
    to produce a serializable callable.

    )r   r   rk  __weakref__c                ,    | j         | j        | j        dS )Nr   r   rk  r  rc   s    r7   __getstate__z$portable_instancemethod.__getstate__  s     kIk
 
 	
r9   c                p    |d         | _         |d         | _        |                    dd          | _        d S )Nr   r   rk  rx   )r   r   rQ   rk  )rd   states     r7   __setstate__z$portable_instancemethod.__setstate__  s1    Ho&M	ii"--r9   rx   c                D    |j         | _        |j        | _        || _        d S rM   )rB  r   rs   r   rk  )rd   methrk  s      r7   r   z portable_instancemethod.__init__  s    mM	r9   c                v    |                     | j                    t          | j        | j                  |i |S rM   )rX   rk  r/   r   r   )rd   rx  kws      r7   r;  z portable_instancemethod.__call__  s9    
		$+.wt{DI..:r:::r9   N)rx   )	rs   rt   ru   rv   rw   r  r  r   r;  rx   r9   r7   r  r    sf         
 :I
 
 
. . .
   
; ; ; ; ;r9   r  c                *   | ht          | j                  }|r|                                }fd|j        D             }|D ],}|                    |                               |           -|j        dk    st          |d          stfdt          |t                    s|
                                n|
                    |          D             D ],}|                    |                               |           -|t                    S )a'  Return an unordered sequence of all classes related to cls.

    Traverses diamond hierarchies.

    Fibs slightly: subclasses of builtin types are not returned.  Thus
    class_hierarchy(class A(object)) returns (A, object), not A plus every
    class systemwide that derives from object.

    c              3  $   K   | ]
}|v|V  d S rM   rx   r   _hiers     r7   r   z"class_hierarchy.<locals>.<genexpr>  s'      99q1D======99r9   builtinsr   c                    g | ]}|v|	S rx   rx   r  s     r7   rz  z#class_hierarchy.<locals>.<listcomp>  s.     
 
 

 }}  }}r9   )r  __mro__r~   r+  r   r   rt   r   
issubclassr<   r   )ry   processr1  r   r   sr  s         @r7   class_hierarchyr    s?    5D3;G
 KKMM9999AK999 	 	ANN1HHQKKKK<:%%WQ8H-I-I%
 
 
 
 "!T**)  """%%a((
 
 
 
	 
	A NN1HHQKKKK+  , ::r9   c              #  ~   K   t          |           }|D ](}| j        D ]}||j        v r||j        |         fV   n)dS )ziterate all the keys and attributes associated
    with a class, without using getattr().

    Does not use getattr() so that class-sensitive
    descriptors (i.e. property.__get__()) are not called.

    N)dirr  rP   )ry   keyskeyr1  s       r7   iterate_attributesr    sl       s88D   	 	Aaj  AJsO,,,, ! r9   
self.proxyc                    |r|}n d fdt          |          D             }|D ]-}	 t          ||          }t          |d          s%t          |d|          }t          t          j        |          }	n# t          $ r Y ]w xY w	 t          j        |	          }
t          j	        |
d                   }t          j	        |
d         dd                   }n# t          $ r d}d	}Y nw xY wd
t                      z  }|dur||ipi }t          ||           	 |	j        ||         _        n# t          $ r Y nw xY wt           |||                    /dS )z9Automates delegation of __specials__ for a proxying type.N)rw   __del____getattribute____metaclass__r  r  c                    g | ]B}|                     d           r+|                    d           rt          |          s|v@|CS )r   )
startswithendswithr   )r   rZ   into_clsskips     r7   rz  z0monkeypatch_proxied_specials.<locals>.<listcomp>  sl     	
 	
 	
T""		

 JJt$$	
  !,,	
 TMM  "MMr9   r;  r:  r   r   z(self, *args, **kw)z(*args, **kw)z?def %(method)s%(fn_args)s: return %(name)s.%(method)s%(d_args)s)r  r/   r   r	   r   r   r>   r   r   rV  rF   localsr   r   setattr)r  from_clsr  onlyr   from_instancedundersr\  maybe_fnr   r   fn_argsd_argspyr   s   ` `            r7   monkeypatch_proxied_specialsr    s     
<D	
 	
 	
 	
 	
]]	
 	
 	
  / /	x00H8Z00 xX>>He((33BB 	 	 	H		%044D247;;G1$q'!""+>>FF 	% 	% 	%+G$FFF	%
35;XX> 	 %?4*?E2 	 	R	')CK$$ 	 	 	D	&#f+....?/ /s<    A;+A;;
BBACC.-C.D00
D=<D=c                F    t          | d|           t          |d|          u S )z;Return True if the two methods are the same implementation.r:  )r/   )meth1meth2s     r7   methods_equivalentr  %  s0     5*e,,z51 1  r9   c           	     J   |s|st          d          t          |t                    rt          | |          r| S t          |pd t	          |          D                       }t          t	          |                     }t
          j        }t          |t                    r|}n,|st                      }t
          j        }nt          |          } ||                    |          |          r| S t          | t                    s<|t
          j        u rdpd}t          | d|dd
                    |                     G d d	          }|rd
|j        z   |_        t                      }	t          |           D ]r\  }
}|
|vrt          d|
z            t          |          st          |
d|d          t          ||
t          |                     |	                    |
           s ||	|          r|S t          dd
                    ||	z
            z            )a  Ensure basic interface compliance for an instance or dict of callables.

    Checks that ``obj`` implements public methods of ``cls`` or has members
    listed in ``methods``. If ``required`` is not supplied, implementing at
    least one interface method is sufficient. Methods present on ``obj`` that
    are not in the interface are ignored.

    If ``obj`` is a dict and ``dict`` does not meet the interface
    requirements, the keys of the dictionary are inspected. Keys present in
    ``obj`` that are not in the interface will raise TypeErrors.

    Raises TypeError if ``obj`` does not meet the interface criteria.

    In all passing cases, an object with callable members is returned.  In the
    simple case, ``obj`` is returned as-is; if dict processing kicks in then
    an anonymous class is returned.

    obj
      A type, instance, or dictionary of callables.
    cls
      Optional, a type.  All public methods of cls are considered the
      interface.  An ``obj`` instance of cls will always pass, ignoring
      ``required``..
    methods
      Optional, a sequence of method names to consider as the interface.
    required
      Optional, a sequence of mandatory implementations. If omitted, an
      ``obj`` that provides at least one interface method is considered
      sufficient.  As a convenience, required may be a type, in which case
      all public methods of the type are required.

    z2a class or collection of method names are requiredc                <    g | ]}|                     d           |S )r  )r  )r   rZ   s     r7   rz  z as_interface.<locals>.<listcomp>T  s)    MMMa1<<;L;LMMMMr9   zany ofzall ofz does not implement z: r  c                      e Zd ZdZdS )(as_interface.<locals>.AnonymousInterfacezA callable-holding shell.Nrs   rt   ru   rv   rx   r9   r7   AnonymousInterfacer  k  s        ''''r9   r  	Anonymousz%r: unknown in this interfacerK  z is not callablez,dictionary does not contain required keys %s)rF   r0   r<   r}   r  operatorgegtintersectionr1   r   rs   dictlike_iteritemsrE   r  staticmethodr   )r3   ry   rc  required	interfaceimplementedcomplies	qualifierr  foundr\  r  s               r7   as_interfacer  -  sx   B  Nw NLMMM#t C!5!5 
GMMM3s88MMMNNIc#hh--K{H(D!! ! !55;x==x((33X>> 
 c4   
+8DH	ssIIItyy3335
 
 	

( ( ( ( ( ( ( (  A&1CL&@#EEE*3//  "";fDEEE~~ 	FvvvtttDEEE"FL,>,>???		&xx   "!!
6
))Hu$
%
%	&  r9   _GFDzgeneric_fn_descriptor[Any]c                      e Zd ZU dZded<   ded<   ded<   dd d
Zed!d            Zed"d            Zd#dZerd$dZ	d%dZ
d&dZed'd            ZdS )(generic_fn_descriptorag  Descriptor which proxies a function when the attribute is not
    present in dict

    This superclass is organized in a particular way with "memoized" and
    "non-memoized" implementation classes that are hidden from type checkers,
    as Mypy seems to not be able to handle seeing multiple kinds of descriptor
    classes used for the same attribute.

    Callable[..., _T_co]fgetr   rv   rT   rs   Ndocc                H    || _         |p|j        | _        |j        | _        d S rM   r  rv   rs   rd   r  r  s      r7   r   zgeneric_fn_descriptor.__init__  s$    	*dlr9   rd   r  r3   r_   ry   r   rA   c                    d S rM   rx   rd   r3   ry   s      r7   __get__zgeneric_fn_descriptor.__get__  s    :=#r9   r[  r"   c                    d S rM   rx   r  s      r7   r  zgeneric_fn_descriptor.__get__  s    7:sr9   Union[_GFD, _T_co]c                    t                      rM   NotImplementedErrorr  s      r7   r  zgeneric_fn_descriptor.__get__      !###r9   instancerh   c                    d S rM   rx   rd   r  rh   s      r7   __set__zgeneric_fn_descriptor.__set__        r9   c                    d S rM   rx   )rd   r  s     r7   
__delete__z generic_fn_descriptor.__delete__  r  r9   c                    t                      rM   r  rd   r3   s     r7   _resetzgeneric_fn_descriptor._reset  r  r9   r   c                    t                      rM   r  ry   r3   r   s      r7   resetzgeneric_fn_descriptor.reset  s    !###r9   rM   )r  r  r  r   )rd   r  r3   r_   ry   r   rA   r  )r3   r[  ry   r   rA   r"   )rd   r  r3   r   ry   r   rA   r  r  r   rh   r   rA   r_   r  r   rA   r_   )r3   r   rA   r_   )r3   r   r   rT   rA   r_   )rs   rt   ru   rv   r:   r   r   r  r   r  r  r  classmethodr  rx   r9   r7   r  r    s           MMM& & & & &
 === X=::: X:$ $ $ $  9AAAA8888$ $ $ $ $ $ $ [$ $ $r9   r  c                       e Zd ZdZesd ZdS dS )_non_memoized_propertyza plain descriptor that proxies a function.

    primary rationale is to provide a plain attribute that's
    compatible with memoized_property which is also recognized as equivalent
    by mypy.

    c                4    || S |                      |          S rM   r  r  s      r7   r  z_non_memoized_property.__get__  s    {99S>>!r9   N)rs   rt   ru   rv   r   r  rx   r9   r7   r  r    sA           "	" 	" 	" 	" 	"" "r9   r  c                  8    e Zd ZdZesd Zd Zed             ZdS )_memoized_propertyz2A read-only @property that is only evaluated once.c                V    || S |                      |          x|j        | j        <   }|S rM   )r  rP   rs   rd   r3   ry   results       r7   r  z_memoized_property.__get__  s.    {3799S>>ACL'&Mr9   c                F    t                               || j                   d S rM   )r  r  rs   r  s     r7   r  z_memoized_property._reset  s       dm44444r9   c                <    |j                             |d            d S rM   )rP   r~   r  s      r7   r  z_memoized_property.reset  s     t$$$$$r9   N)	rs   rt   ru   rv   r   r  r  r  r  rx   r9   r7   r  r    s[        << 	 	 	5 5 5 % % [% % %r9   r  c                .      fd}t          |           S )zDecorate a method memoize its return value.

    Best applied to no-arg methods: memoization is not sensitive to
    argument values, and will always return the same value even when
    called with different arguments.

    c                z     | g|R i |fd}j         |_         j        |_        || j        j         <   S )Nc                     S rM   rx   ar  r  s     r7   memoz6memoized_instancemethod.<locals>.oneshot.<locals>.memo  s    Mr9   )rs   rv   rP   rd   r>  r  r  r  r   s       @r7   oneshotz(memoized_instancemethod.<locals>.oneshot  sc    D&4&&&2&&	 	 	 	 	 z%)bk"r9   r   )r   r  s   ` r7   memoized_instancemethodr    s.    	 	 	 	 	 '2&&&r9   c                      e Zd ZU dZesdZ e            Zded<   ddZ	ddZ
ddZ G d dee                   Zedd            ZdS )HasMemoizedzA mixin class that maintains the names of memoized elements in a
    collection for easy cache clearing, generative, etc.

    rx   zFrozenSet[str]_memoized_keysrA   r_   c                P    | j         D ]}| j                            |d            d S rM   )r  rP   r~   rd   elems     r7   _reset_memoizationszHasMemoized._reset_memoizations  s9    ' 	* 	*DMdD))))	* 	*r9   c                0    | j         D ]}|| j        vsJ d S rM   )r  rP   r  s     r7   _assert_no_memoizationsz#HasMemoized._assert_no_memoizations  s4    ' 	- 	-Dt},,,,,	- 	-r9   r  rT   rh   r   c                <    || j         |<   | xj        |hz  c_        d S rM   )rP   r  )rd   r  rh   s      r7   _set_memoized_attributez#HasMemoized._set_memoized_attribute  s*    "cu$r9   c                  r    e Zd ZU dZded<   ded<   ded<   ddd
Zedd            Zedd            Zd ZdS )HasMemoized.memoized_attributezTA read-only @property that is only evaluated once.

        :meta private:

        Callable[..., _T]r  r   rv   rT   rs   Nr  c                H    || _         |p|j        | _        |j        | _        d S rM   r  r  s      r7   r   z'HasMemoized.memoized_attribute.__init__,  s$    DI.$,DL MDMMMr9   rd   r'   r3   r_   ry   r   rA   c                    d S rM   rx   r  s      r7   r  z&HasMemoized.memoized_attribute.__get__1  s    <?Cr9   r!   c                    d S rM   rx   r  s      r7   r  z&HasMemoized.memoized_attribute.__get__4  s    58Sr9   c                    || S |                      |          x|j        | j        <   }|xj        | j        hz  c_        |S rM   )r  rP   rs   r  r  s       r7   r  z&HasMemoized.memoized_attribute.__get__7  sF    {3799S>>ACL'&4=/1Mr9   rM   )r  r  r  r   )rd   r'   r3   r_   ry   r   rA   r'   )r3   r   ry   r   rA   r!   )rs   rt   ru   rv   r:   r   r   r  rx   r9   r7   memoized_attributer  !  s         	 	 	 	* 	* 	* 	* 	*
 
??? 
?	888 
8	 	 	 	 	r9   r$  r   r$   c                0    dfd}t          |          S )zMDecorate a method memoize its return value.

        :meta private:

        rd   r   r>  r  rA   c                     | g|R i |fd}j         |_         j        |_        || j        j         <   | xj        j         hz  c_        S )Nc                     S rM   rx   r  s     r7   r  zBHasMemoized.memoized_instancemethod.<locals>.oneshot.<locals>.memoI  s    r9   )rs   rv   rP   r  r  s       @r7   r  z4HasMemoized.memoized_instancemethod.<locals>.oneshotF  s{    R*t***r**F     KDM:DL)-DM"+&BK=0Mr9   )rd   r   r>  r   r  r   rA   r   r   )ry   r   r  s    ` r7   r  z#HasMemoized.memoized_instancemethod>  s3    
	 
	 
	 
	 
	 
	 gr***r9   Nrr   )r  rT   rh   r   rA   r_   r   r$   rA   r$   )rs   rt   ru   rv   r   rw   	frozensetr  r:   r  r  r  memoized_propertyr!   r$  r  r  rx   r9   r7   r  r    s          
   	%.Y[[N0000* * * *- - - -% % % %    .r2   : + + + [+ + +r9   r  c                  $    e Zd ZdZdZd Zd
dZd	S )MemoizedSlotszApply memoized items to an object using a __getattr__ scheme.

    This allows the functionality of memoized_property and
    memoized_instancemethod to be available to a class using __slots__.

    rx   c                     t          |          rM   )r>   )rd   r  s     r7   _fallback_getattrzMemoizedSlots._fallback_getattre  s    S!!!r9   r  rT   rA   r   c                                         d          s                     d          rt                    t           j        d           r. t	           d                       }t           |           |S t           j        d           r(t	           d            fd}j        |_        |S                                S )N_memoized_attr__memoized_method_c                 v     | i |fd}j         |_         j        |_        t          |           S )Nc                     S rM   rx   r  s     r7   r  z8MemoizedSlots.__getattr__.<locals>.oneshot.<locals>.memoz  s    !Mr9   )rs   rv   r  )r>  r  r  r  r   r  rd   s      @r7   r  z*MemoizedSlots.__getattr__.<locals>.oneshotw  sY    TR" " " " " !#!zc4(((r9   )r  r>   r   r   r/   r  rv   r.  )rd   r  rh   r  r   s   ``  @r7   __getattr__zMemoizedSlots.__getattr__h  s   >>+,, 	/1
 1
 	/ !%%% T^%<s%<%<== 	/:GD"9C"9"9::<<ED#u%%%LT^%>%>%>?? 	/838899B	 	 	 	 	 	 	 !jGON))#...r9   N)r  rT   rA   r   )rs   rt   ru   rv   rw   r.  r4  rx   r9   r7   r,  r,  [  sH          I" " "/ / / / / /r9   r,  c                    t          | t                    rD|                                                                 } | dv rdS | dv rdS t	          d| z            t          |           S )N)trueyesonyt1T)falsenooffr   f0FzString is not true/false: %r)r0   rT   stripr   r2   r   rJ   s    r7   asboolrB    sp    #s Ciikk!!66649995;cABBB99r9   text!Callable[[str], Union[str, bool]]c                      d fd}|S )zqReturn a callable that will evaluate a string as
    boolean, or one of a set of "alternate" string values.

    r3   rT   rA   Union[str, bool]c                .    | v r| S t          |           S rM   )rB  )r3   rC  s    r7   bool_or_valuez"bool_or_str.<locals>.bool_or_value  s    $;;J#;;r9   )r3   rT   rA   rF  rx   )rC  rH  s   ` r7   bool_or_strrI    s)          r9   rh   Optional[int]c                (    | | S t          |           S )zCoerce to integer.)r   )rh   s    r7   asintrL    s     }u::r9   r  r  rf   
flexi_booldestOptional[Dict[str, Any]]r_   c                    || }|| v rnt          |t                    rt          | |         |          sG| |         =|t          u r|rt          | |                   ||<   dS  || |                   ||<   dS dS dS dS )zIf 'key' is present in dict 'kw', coerce its value to type 'type\_' if
    necessary.  If 'flexi_bool' is True, the string '0' is considered false
    when coercing to boolean.
    N)r0   r<   r   rB  )r  r  rf   rM  rN  s        r7   coerce_kw_typerQ    s     | 	r		E4(( 	0:2c7E0J0J 	sGD==Z=r#wDIIIbgDIII 		 		r9   c                `     t          |          }|ft           fd|D                       z   S )zbProduce a tuple structure that is cacheable using the __dict__ of
    obj to retrieve values

    c              3  H   K   | ]}|j         v |j         |         fV  d S rM   rP   r   kr3   s     r7   r   z"constructor_key.<locals>.<genexpr>  sC        !"qCL/@/@CLO/@/@/@/@ r9   )r(  r   )r3   ry   r   s   `  r7   constructor_keyrW    sS    
 3E6E    &+      r9   r>  c                     t          |          }|                     fd|                    |          D                         ||i |S )zInstantiate cls using the __dict__ of obj as constructor arguments.

    Uses inspect to match the named arguments of ``cls``.

    c              3  H   K   | ]}|j         v |j         |         fV  d S rM   rT  rU  s     r7   r   z#constructor_copy.<locals>.<genexpr>  sC        !"a3<>O>OCLO>O>O>O>O r9   )r(  rX   
difference)r3   ry   r>  r  r   s   `    r7   constructor_copyr[    ss     3EII    &+&6&6r&:&:      3r9   Callable[[], int]c                 d    t          j                    t          j        d          fd} | S )z%Return a threadsafe counter function.r   c                 Z    5  t                     cd d d            S # 1 swxY w Y   d S rM   )next)counterlocks   r7   _nextzcounter.<locals>._next  sv     	! 	!==	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	!s    $$)	threadingLockr   count)rb  r`  ra  s    @@r7   r`  r`    sG     >Doa  G! ! ! ! ! ! Lr9   specimenr|  Optional[Type[Any]]c                   t          | d          r/| j        !t          | j        t                    rt          S | j        S t	          | t
                    rt          nt          } || t                    rt          S  || t                    rt          S  || t                    rt          S t          | d          rt          S t          | d          rt          S t          | d          rt          S |S )zGiven an instance or class, guess if it is or is acting as one of
    the basic collection types: list, set and dict.  If the __emulates__
    property is present, return that preferentially.
    __emulates__Nr   r   r}   )r   ri  r  r}   r0   r<   r  r1   )rf  r|  isas      r7   duck_type_collectionrk    s     x(( ) ,!32
 2
, J(("8T22
B**
C
s8T 	Xs		 
	Xt		 x"" 	5	!	! 
	5	!	! r9   rx  argtype'Union[Tuple[Type[Any], ...], Type[Any]]r   c           
     6   t          | |          r| S t          |t                    rHt          j        d|dd                    d |D                       dt          |           d          t          j        d|d|dt          |           d          )	Nz
Argument 'z ' is expected to be one of type z or c              3      K   | ]	}d |z  V  
dS )z'%s'Nrx   )r   r  s     r7   r   z"assert_arg_type.<locals>.<genexpr>  s&      $A$AAVaZ$A$A$A$A$A$Ar9   z, got ''z' is expected to be of type 'z', got ')r0   r   r    ArgumentErrorr   r<   )rx  rl  r   s      r7   assert_arg_typerr    s     #w 
gu%% 		##44$A$A$A$A$AAAAA49999N  
 ##44$s))))-  r9   c           	         t           d          r!t                                                     S t           dt           dd                    t	          d z            t           d          r fd} |            S t           d          r-t          fd	                                 D                       S t	          d z            )
z?Return a (key, value) iterator for almost any dict-like object.r  __getitem__rQ   NzObject '%r' is not dict-likeiterkeysc               3  `   K                                    D ]} J |  |           fV  d S rM   )ru  )r  dictlikegetters    r7   iteratorz$dictlike_iteritems.<locals>.iterator.  sT      ((** ' ')))66#;;&&&&&' 'r9   r  c              3  2   K   | ]}| |          fV  d S rM   rx   )r   r  rx  s     r7   r   z%dictlike_iteritems.<locals>.<genexpr>5  s0      BB3S&&++&BBBBBBr9   )r   r  r  r/   rF   iterr  )rw  ry  rx  s   ` @r7   r  r  "  s     x!! &HNN$$%%%X}ght.L.LMMF~6ABBBx$$ C	' 	' 	' 	' 	' 	'
 xzz	6	"	" CBBBB(--//BBBBBB6ABBBr9   c                  :     e Zd ZU dZded<   d fdZdddZ xZS )classpropertyaA  A decorator that behaves like @property except that operates
    on classes rather than instances.

    The decorator is currently special when using the declarative
    module, but note that the
    :class:`~.sqlalchemy.ext.declarative.declared_attr`
    decorator should be used for this purpose with declarative.

    Callable[[Any], Any]r  rx  r   r  c                Z     t                      j        |g|R i | |j        | _        d S rM   )superr   rv   )rd   r  rx  r  r   s       r7   r   zclassproperty.__init__G  s7    ****r***|r9   Nr3   ry   Optional[type]rA   c                ,    |                      |          S rM   r  r  s      r7   r  zclassproperty.__get__K  s    yy~~r9   )r  r~  rx  r   r  r   rM   )r3   r   ry   r  rA   r   )rs   rt   ru   rv   r:   r   r  __classcell__r   s   @r7   r}  r}  :  sp           $ $ $ $ $ $        r9   r}  c                  &    e Zd ZddZdd	ZddZdS )hybridpropertyr2  r  c                "    || _         || _        d S rM   )r2  clslevelrd   r2  s     r7   r   zhybridproperty.__init__P  s    	r9   r  r   r.   rA   r!   c                ^    ||                      |          }|S |                     |          S rM   r  r2  rd   r  r.   clsvals       r7   r  zhybridproperty.__get__T  0    ]]5))FM99X&&&r9   r   hybridproperty[_T]c                    || _         | S rM   r  r  s     r7   
classlevelzhybridproperty.classlevel[      r9   Nr2  r  r  r   r.   r   rA   r!   )r2  r   rA   r  )rs   rt   ru   r   r  r  rx   r9   r7   r  r  O  sP           ' ' ' '     r9   r  c                  6    e Zd ZddZdd	ZddZddZddZdS )rw_hybridpropertyr2  r  c                0    || _         || _        d | _        d S rM   )r2  r  setfnr  s     r7   r   zrw_hybridproperty.__init__a  s    	37


r9   r  r   r.   rA   r!   c                ^    ||                      |          }|S |                     |          S rM   r  r  s       r7   r  zrw_hybridproperty.__get__f  r  r9   rh   r_   c                D    | j         J |                      ||           d S rM   r  r  s      r7   r  zrw_hybridproperty.__set__m  s*    z%%%

8U#####r9   r   rw_hybridproperty[_T]c                    || _         | S rM   r  r  s     r7   setterzrw_hybridproperty.setterq  s    
r9   c                    || _         | S rM   r  r  s     r7   r  zrw_hybridproperty.classlevelu  r  r9   Nr  r  r  )r2  r   rA   r  )rs   rt   ru   r   r  r  r  r  rx   r9   r7   r  r  `  sx        8 8 8 8
' ' ' '$ $ $ $        r9   r  c                  *    e Zd ZdZddZdd	ZddZdS )hybridmethodz/Decorate a function as cls- or instance- level.r2  r  c                0    |x| _         | _        || _        d S rM   )r2  r:  r  r  s     r7   r   zhybridmethod.__init__}  s    $((	DMr9   r  r   r.   rA   c                |    | | j                             ||j                  S | j                            ||          S rM   )r  r  r   r2  )rd   r  r.   s      r7   r  zhybridmethod.__get__  s:    =((@@@9$$Xu555r9   r   hybridmethod[_T]c                    || _         | S rM   r  r  s     r7   r  zhybridmethod.classlevel  r  r9   Nr  )r  r   r.   r   rA   r  )r2  r   rA   r  )rs   rt   ru   rv   r   r  r  rx   r9   r7   r  r  z  sV        99   6 6 6 6     r9   r  c                  j    e Zd ZU dZded<   i Zded<    ej                    Z	 	 dddZ	d Z
d Zd ZdS )symbolaI  A constant symbol.

    >>> symbol("foo") is symbol("foo")
    True
    >>> symbol("foo")
    <symbol 'foo>

    A slight refinement of the MAGICCOOKIE=object() pattern.  The primary
    advantage of symbol() is its repr().  They are also singletons.

    Repeated calls of symbol('name') will all return the same instance.

    rT   r   zDict[str, symbol]symbolsNr  r   	canonicalrJ  rA   c                   | j         5  | j                            |          }|ct          |t                    sJ |t          |          }t                              t          |          }||_	        |r||_
        || j        |<   n|r||k    rt          d|d|           |cd d d            S # 1 swxY w Y   d S )Nz#Can't replace canonical symbol for z with new int value )_lockr  rQ   r0   rT   hashr   __new__r  r   rv   rF   )ry   r   r  r  r   s        r7   r  zsymbol.__new__  s0    Y 	 	+//$''C{!$,,,,,$ $T

Ikk&)44 &"%CK %(D!! c!1!1#:d : :.7: :   -	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   BB33B7:B7c                >    t           | j        dt          |           ffS )NrS   )r  r   r   rc   s    r7   
__reduce__zsymbol.__reduce__  s    	3D		222r9   c                     t          |           S rM   r  rc   s    r7   __str__zsymbol.__str__  s    Dzzr9   c                    d| j         dS )Nzsymbol(r  r   rc   s    r7   __repr__zsymbol.__repr__  s    '''''r9   )NN)r   rT   r  r   r  rJ  rA   r  )rs   rt   ru   rv   r:   r  rc  rd  r  r  r  r  r  rx   r9   r7   r  r    s           III!#G####INE
 "#'	    <3 3 3  ( ( ( ( (r9   r  c                      e Zd ZddZddZdS )_IntFlagMeta	classnamerT   r   Tuple[Type[Any], ...]dict_r   r  r   rA   r_   c                   g x| _         }|                                D ]\  }}t          j        d|          rt	          |t
                    rt          ||          }n%|                    d          st          d          gt          | ||           |
                    |           t          j        d |D                       | _        d S )Nz^__.*__$)r  r  z#Expected integer values for IntFlagc                    i | ]
}|j         |S rx   r  )r   r   s     r7   
<dictcomp>z)_IntFlagMeta.__init__.<locals>.<dictcomp>  s    ,,,sSXs,,,r9   )_itemsr  r   matchr0   r   r  r  rF   r  r   r   immutabledict__members__)	ry   r  r   r  r  r  rV  vr   s	            r7   r   z_IntFlagMeta.__init__  s      
UKKMM 
	 
	DAqxQ'' !S!! Q!,,,\\#&&  EFFFCC   LL&4,,e,,,
 
r9   Iterator[symbol]c                     t          d          )Nziter not implemented to ensure compatibility with Python 3.11 IntFlag.  Please use __members__.  See https://github.com/python/cpython/issues/99304r  rc   s    r7   __iter__z_IntFlagMeta.__iter__  s    !=
 
 	
r9   N)
r  rT   r   r  r  r   r  r   rA   r_   )rA   r  )rs   rt   ru   r   r  rx   r9   r7   r  r    s<        
 
 
 
2
 
 
 
 
 
r9   r  c                      e Zd ZdZdS )_FastIntFlagzAn 'IntFlag' copycat that isn't slow when performing bitwise
    operations.

    the ``FastIntFlag`` class will return ``enum.IntFlag`` under TYPE_CHECKING
    and ``_FastIntFlag`` otherwise.

    Nr  rx   r9   r7   r  r    s           r9   r  )	metaclass)IntFlag_EchoicesDict[_E, List[Any]]resolve_symbol_namesOptional[_E]c                    |                                 D ]&\  }}| |u r|c S |r| |j        k    r|c S | |v r|c S '| dS t          j        d| d|           )aO  Given a user parameter, parse the parameter into a chosen value
    from a list of choice objects, typically Enum values.

    The user argument can be a string name that matches the name of a
    symbol, or the symbol object itself, or any number of alternate choices
    such as True/False/ None etc.

    :param arg: the user argument.
    :param choices: dictionary of enum values to lists of possible
        entries for each.
    :param name: name of the argument.   Used in an :class:`.ArgumentError`
        that is raised if the parameter doesn't match any available argument.

    NzInvalid value for 'z': )r  r   r    rq  )rx  r  r   r  
enum_valuechoices         r7   parse_user_argument_for_enumr    s    ( &mmoo  
F*! 	cZ_&<&<F]]  {t

B$BB3BB
C
CCr9   r  c                2    t           | _         t           dz  a dS )zAssign a '_creation_order' sequence to the given instance.

    This allows multiple instances to be sorted in order of creation
    (typically within a single thread; the counter is not particularly
    threadsafe).

    r   N)_creation_order)r  s    r7   set_creation_orderr  $  s      /HqOOOr9   rk  c                    	  | |i |S # t           $ r/ t          dt          j                    dd         z             Y dS w xY w)zXexecutes the given function, catches all exceptions and converts to
    a warning.

    z%s('%s') ignoredr   r   N)rD   warnra   rb   )r2  r>  rk  s      r7   warn_exceptionr  1  sc    
7tT$V$$$ 7 7 7#,..1"556666667s   
 5AA   c                l    	 t          |           |k    rd| d|         z  S | S # t          $ r | cY S w xY w)Nz%s...r   )r   rF   )rh   len_s     r7   ellipses_stringr  <  sT    u::U1T6]**L   s   $ $ 33c                  @     e Zd ZU dZded<   d fd
ZddZddZ xZS )_hash_limit_stringa/  A string subclass that can only be hashed on a maximum amount
    of unique values.

    This is used for warnings so that we can send out parameterized warnings
    without the __warningregistry__ of the module,  or the non-overridable
    "once" registry within warnings.py, overloading memory,


    r   _hashrh   rT   numr>  Sequence[Any]rA   c                    ||z  d|z  z   }t                                          | |          }t          d|t          |          |z  fz            |_        |S )Nz6 (this warning may be suppressed after %d occurrences)z%s_%d)r  r  r  r  )ry   rh   r  r>  interpolatedrd   r   s         r7   r  z_hash_limit_string.__new__S  s_     DsJ
 wwsL11'UD,>,>,D$EEFF
r9   c                    | j         S rM   )r  rc   s    r7   __hash__z_hash_limit_string.__hash__]  s
    zr9   otherr   r   c                B    t          |           t          |          k    S rM   )r  )rd   r  s     r7   __eq__z_hash_limit_string.__eq__`  s    DzzT%[[((r9   )rh   rT   r  r   r>  r  rA   r  )rA   r   )r  r   rA   r   )	rs   rt   ru   rv   r:   r  r  r  r  r  s   @r7   r  r  F  s|           JJJ        ) ) ) ) ) ) ) )r9   r  msgc                    |r%t          t          j        | |                     dS t          | t          j                   dS )zdIssue a warning.

    If msg is a string, :class:`.exc.SAWarning` is used as
    the category.

    )r   N)_warnings_warnr    	SAWarning)r  r   s     r7   r  r  d  sG      +s}St44455555sCM*****r9   r  c                `    |rt          | d|          } t          | t          j                   dS )z\Issue a warning with a parameterized string, limiting the number
    of registrations.

    
   N)r  r  r    r  )r  r>  s     r7   warn_limitedr  q  s5    
  0 b$//3&&&&&r9   z)Dict[CodeType, Tuple[str, Type[Warning]]]_warning_tagsmessagecategoryType[Warning]Callable[[_F], _F]c                      fd}|S )Nc                *    ft           | j        <   | S rM   )r  r  )r   r  r  s    r7   goz#tag_method_for_warnings.<locals>.go  s    &-x%8bk"	r9   rx   )r  r  r  s   `` r7   tag_method_for_warningsr  ~  s)          Ir9   z&^(?:sqlalchemy\.(?!testing)|alembic\.)Union[str, Warning]Optional[Type[Warning]]
stacklevelc                   	 t          j        |          }dx}}|~|s5t          j        t          |j                            dd                    sd}|j        t          v r#d}t          |j                 \  }}|p|}|  d| d} |j	        }|s|dz  }n|r|rn|~n# t          $ r d}Y n d}Y nxY w|t          j        | ||dz   	           d S t          j        | |dz   	           d S )
NFrs   r   Tz (r  r   r   )r  )ra   	_getframer   r  _not_sa_pattern	f_globalsrQ   f_coder  f_backr2   warningsr  )r  r  r  framestacklevel_foundwarning_tag_found_suffix	_categorys           r7   r  r    s]   %j)) 054, $ (BH!4!4Z!D!D- - (
 $( 
 |},,$(!'4U\'B$)#0y$22222LE# a

! &7 3      


 


< gxJNCCCCCCg*q.999999s   B B.)B.r  retry_on_exceptionCallable[..., Optional[_T]]c                "      gd fd}|S )zNDecorate the given function to be a no-op after it is called exactly
    once.rx  r   r  rA   Optional[_T]c                     }r;                                 }	  || i |S #  r                    d|            xY wd S )Nr   )r~   insert)rx  r  	strong_fnonce_fnr   oncer  s       r7   r  zonly_once.<locals>.go  sf     	 	hhjjGw*r***% ,KK7+++ts   # >)rx  r   r  r   rA   r  rx   )r   r  r  r  s   `` @r7   	only_oncer    s=     4D        Ir9   z%sqlalchemy/([a-z_]+/){0,2}[a-z_]+\.pyzunit(?:2|test2?/)tbexclude_prefixre.Pattern[str]exclude_suffixc                `   d}t          |           dz
  }||k    rA|                    | |                   r&|dz  }||k    r|                    | |                   &||k    rA|                    | |                   r&|dz  }||k    r|                    | |                   &| ||dz            S )at  Chop extraneous lines off beginning and end of a traceback.

    :param tb:
      a list of traceback lines as returned by ``traceback.format_stack()``

    :param exclude_prefix:
      a regular expression object matching lines to skip at beginning of
      ``tb``

    :param exclude_suffix:
      a regular expression object matching lines to skip at end of ``tb``
    r   r   )r   search)r  r  r  r   ends        r7   chop_tracebackr    s    " E
b''A+C
3,,>00E;;,
 3,,>00E;;,
3,,>00C99,q 3,,>00C99,ecAgor9   c                |    d| z  }t                                                      }t          ||           |d         S )Nz&def set(obj, value):    obj.%s = valuer}   )r  copyr   )attrnamer   r   s      r7   
attrsetterr    s4    3h>D
((--//CsOOOu:r9   z^__.+__$c                  (     e Zd ZdZdZd fdZ xZS )
TypingOnlyzA mixin class that marks a class as 'typing only', meaning it has
    absolutely no methods, attributes, or runtime functionality whatsoever.

    rx   rA   r_   c                    t           | j        v r)d | j        D             }|rt          d|  d| d          t	                                                       d S )Nc                F    h | ]}t                               |          |S rx   )_dundersr  r   r   s     r7   	<setcomp>z/TypingOnly.__init_subclass__.<locals>.<setcomp>  s9       X^^D5I5I  r9   zClass z< directly inherits TypingOnly but has additional attributes r  )r  r+  rP   AssertionErrorr  __init_subclass__)ry   	remainingr   s     r7   r&  zTypingOnly.__init_subclass__  s    && !$  I  $:S : :-6: : :   	!!#####r9   rr   )rs   rt   ru   rv   rw   r&  r  r  s   @r7   r  r    sN         
 I
$ 
$ 
$ 
$ 
$ 
$ 
$ 
$ 
$ 
$r9   r  c                  J     e Zd ZU dZded<   	 d
 fdZedd	            Z xZS )EnsureKWArga6  Apply translation of functions to accept \**kw arguments if they
    don't already.

    Used to ensure cross-compatibility with third party legacy code, for things
    like compiler visit methods that need to accept ``**kw`` arguments,
    but may have been copied from old code that didn't accept them.

    rT   ensure_kwargrA   r_   c                2   | j         }| j        }|re|D ]b}t          j        ||          }|rI||         }t	          j        |          }|j        s&|                     |          }t          | ||           ct                      
                                 d S rM   )r*  rP   r   r  r   r   r@  
_wrap_w_kwr  r  r&  )	ry   fn_regclsdictr  rZ   r   r   wrappedr   s	           r7   r&  zEnsureKWArg.__init_subclass__+  s    !, 	3 3 3HVS)) 3 B!8<<D: 3"%.."4"4S'222!!#####r9   r   r   c                0    dfd}t          |          S )Nrx  r   r  rA   c                      |  S rM   rx   )rx  r  r   s     r7   wrapz$EnsureKWArg._wrap_w_kw.<locals>.wrap;  s    2s8Or9   )rx  r   r  r   rA   r   r   )ry   r   r2  s    ` r7   r,  zEnsureKWArg._wrap_w_kw9  s3    	 	 	 	 	 	 dB'''r9   rr   )r   r   rA   r   )	rs   rt   ru   rv   r:   r&  r  r,  r  r  s   @r7   r)  r)    s|           $ $ $ $ $ $ ( ( ( [( ( ( ( (r9   r)  c                0   t          |d          rt          | |          S | }|j        j        |_        t          |d          r|j        |_        t          |j        d          r|j        j        r|j        j        |_        n|j        r|j        |_        |S )zAugment functools.update_wrapper() to work with objects with
    a ``__call__()`` method.

    :param fn:
      object with __call__ method

    rs   rt   rv   )r   r   r   rs   rt   r;  rv   )wrapperr   _fs      r7   wrap_callabler6  A  s     r: gr***l+2|$$ 	*MBM2;	** 	$r{/B 	$,BJJZ 	$BJ	r9   c                   d| vr|                      d          S d}g g}d}t          |           }||k     r| |         }|dk    rE|dk    r9||dz
  k     r0| |dz            dk    r!|d                             d           |dz  }nC|dz  }n=|dk    r|dk    r|                    g            n|d                             |           |dz  }||k     d |D             S )a  Parse a dotted identifier with accommodation for quoted names.

    Includes support for SQL-style double quotes as a literal character.

    E.g.::

        >>> quoted_token_parser("name")
        ["name"]
        >>> quoted_token_parser("schema.name")
        ["schema", "name"]
        >>> quoted_token_parser('"Schema"."Name"')
        ['Schema', 'Name']
        >>> quoted_token_parser('"Schema"."Name""Foo"')
        ['Schema', 'Name""Foo']

    "r  r   r   rU  c                8    g | ]}d                      |          S )r   )r   )r   r  s     r7   rz  z'quoted_token_parser.<locals>.<listcomp>  s"    ///uBGGENN///r9   )r  r   r   )rh   r  r  idxlvchars         r7   quoted_token_parserr=  Y  s   $ %{{3 E!dF
C	UB
((Sz3;;zzcBFlluS1W~/D/Dr
!!#&&&q
S[[UaZZMM"2Jd###q (( 0/////r9   paramsc                >     t          j                     fd}|S )Nc                v    | j         d ur| j         pd}|rt          |fdD                       }|| _         | S )Nr   c                    i | ]}|S rx   rx   )r   paramrC  s     r7   r  z8add_parameter_text.<locals>.decorate.<locals>.<dictcomp>  s    )J)J)J%%)J)J)Jr9   )rv   inject_param_text)r   r  r>  rC  s     r7   r   z$add_parameter_text.<locals>.decorate  sT    j$39r 	L#C)J)J)J)J6)J)J)JKKC
	r9   )r   r  )r>  rC  r   s   `` r7   add_parameter_textrD    s9    !&))F      Or9   c                    |                      dd          }t          |          dk    r| S |\  }}|                    d          s|dz   t          j        |          z   S t          j        |           S )N
r   r   )r  r   r  textwrapdedent)rC  
split_text	firstliner'  s       r7   _dedent_docstringrK    su    D!$$J
:!)	9$$ %4(/)"<"<<<t$$$r9   given_doctext
injecttextposc                ,   t          | pd          }|                    d          }t          |          dk    r|                    d           t	          j        |                              d          }|d         r|                    dd           d t          |          D             }|                    dd           |t          |t          |          dz
                     }|d|         |z   ||d          z   }d	                    |          S )Nr   rF  r   r   c                @    g | ]\  }}|                                 |S rx   )rA  )r   r  lines      r7   rz  z)inject_docstring_text.<locals>.<listcomp>  s)    HHHic44::<<HcHHHr9   )
rK  r  r   r   rG  rH  r  r  minr   )rL  rM  rN  doctextlinesinjectlinesblanks
inject_poss           r7   inject_docstring_textrX    s    %]%8b99GMM$E
5zzQR/*--33D99K1~ "1b!!!HH9U#3#3HHHF
MM!QCVq112J!J,+-jkk0BBE99Ur9   z(\s+):param (.+?):rS  inject_paramsDict[str, str]c                z   t          j        |                                           }g }d }|rz|                                }t                              |          }||r|                    d                              d          }||v rwdt          |                    d                    z  dz   }|rBt          j        d|d                   }	|	r%dt          |	                    d                    z  }|||         z   }n|r|
                    d|dg           d }no|                                s|
                    ||dg           d }n@|                    d          r+|
                    ||                                g           e|                    |           |zd                    |          S )	Nr   *r   r   z(\s+)\Sr   rF  z::)collectionsdeque
splitlinespopleft
_param_regr  r   lstripr   r   r   rstripr  r   r   )
rS  rY  doclinesrT  	to_injectrQ  rZ   rB  indentm2s
             r7   rC  rC    s    !3!3!5!566HE I
 !!T"" >

))#..M)) 3qwwqzz??2S8F   <Xj(1+>> <%(3rxx{{+;+;%;F &u)= =I 
	LL$	40111II 	LL$	40111II]]4   	 LL$ 0 0 2 23444T?  B 99Ur9   r   c                *   t          |           dk    rdS t          |           dk    }|r
| dd         n| dd         | dd         z   } d | D             }|rd                    |          S d                    |dd                   d|d         S )	zTrims a list of strings from the middle and return a string of up to
    four elements. Strings greater than 11 characters will be truncatedr   NrH  r   rU  c                R    g | ]$}t          |          d k    rd|dd          z  n|%S )   z%s..N)r   r#  s     r7   rz  z$repr_tuple_names.<locals>.<listcomp>  s8    
L
L
LdTR6D"IT
L
L
Lr9   r  z, ..., )r   r   )r   flagress      r7   repr_tuple_namesrm    s     5zzQtu::?D;E!A#JJE!A#Jrss$;E
L
Le
L
L
LC >yy~~ $		#ac( 3 3 3 3SWW==r9   c                :    t           rdS | rt          d          dS )NTzDcython extensions were expected to be installed, but are not presentF)r   ImportError)raise_s    r7   has_compiled_extrq    s5     t	 "
 
 	

 ur9   c                  ,    e Zd Z ej                    ZdS )_MissingN)rs   rt   ru   enumautoMissingrx   r9   r7   rs  rs    s        dikkGGGr9   rs  )r3   r   r4   r+   rA   rB   )r3   r   rA   rB   )rS   r   rA   rT   )ry   rz   rA   r{   )r   r   rA   rT   rM   )ry   r   r   r   rA   rT   )r   r   r   r   rA   r   )r   r   rA   r   )r   r   r   rT   rA   r   )r   r   r   r   rA   r   )r   r   rA   r   )r   r   r   r   r   rT   rA   r   )ry   r<   r!  r#  r"  r$  rA   r%  )ry   r<   r!  r#  r"  r   rA   r#  )r2  r   rA   r3  )FF)r   r   r6  r   r7  r   rA   r8  )T)r   rE  r   r   rA   rF  )rx   rx   rx   rx   )r_  r   r`  rT   ra  rT   rb  r   rc  r   rd  r   re  r   rA   rf  )rx   Nrx   )
r3   r   rq  rr  rs  rt  ru  r   rA   rT   )NNr  N)NNNr(  )r3   r   rA   r   )rC  rT   rA   rD  )rh   r   rA   rJ  )TN)r  r   r  rT   rf   r   rM  r   rN  rO  rA   r_   )r3   r   ry   r   rA   r   )
r3   r!   ry   rz   r>  r   r  r   rA   r!   )rA   r\  )rf  r   r|  rg  rA   rg  )rx  r   rl  rm  r   rT   rA   r   )F)
rx  r   r  r  r   rT   r  r   rA   r  r  )r2  r   r>  r   rk  r   rA   r   )r  )r  rT   r   r   rA   r_   )r  rT   r>  r  rA   r_   )r  rT   r  r  rA   r  )Nr   )r  r  r  r  r  r   rA   r_   )r   r  r  r   rA   r	  )r  r3  r  r  r  r  rA   r3  )r>  r   rC  rT   rA   r  )rC  rT   rA   rT   )rL  r   rM  rT   rN  r   rA   rT   )rS  rT   rY  rZ  rA   rT   )r   r3  rA   r   )rv   
__future__r   r]  rt  	functoolsr   rN   r   r  r   ra   rG  rc  r   r   typingr   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r   r   r   _has_cyr   r   r    r!   r"   r$   r&   r'   r(   r)   py314annotationlibr*   r+   r8   r<   rP   r  r=   r@   rG   rK   py310r[   r]   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r(  r5  rD  r   r^  ri  rl  rp  r  r  r  r  r  r  r  r  r  r  r  r*  non_memoized_propertypropertyro_memoized_propertyro_non_memoized_propertyr  r  !HasMemoized_ro_memoized_attributer$  r,  rB  rI  rL  rQ  rW  r[  r`  rk  rr  r  r}  r  r  r  r   r  r  r  r  FastIntFlagEnumr  r  r  r  r  r  rT   r  r  r  r  r:   r  compiler  r  r  _SQLA_RE_UNITTEST_REr  NoneTyper  r"  r  r)  r6  r=  rD  rK  rX  ra  rC  rm  rq  rs  rv  	MissingOrrx   r9   r7   <module>r     s     # " " " " "      $ $ $ $ $ $       				 



                                                                                                                                                  $ $ $ $ $ $            WT]]4(((WT#s(+,,,ge3444ge@AAAge0111ge./// 
< c2 544444$$$$$$   !M*;<D  $   BH H H H H \ 2, , , , ,
2 2 2 2"$ $ $ $82 82 82 82 82 82 82 82v   6 6 6 6 /3O O O O O, , , ,$   M M M M     ge/000
Y, Y, Y, Y,x    genngenn( ( ( ( ( ( ( (V
 
 
( 
  $!	     
 
-1E     
 .2E2 2 2 2 2 2j2 2 2 2 EJ5; 5; 5; 5; 5;r HLr
 r
 r
 r
 r
j   J #% "/1    26 6 6(	 	 	 028< "	KB KB KB KB KB\; ; ; ; ; ; ; ;<# # #L  & 
		@/ @/ @/ @/F  S S S Sl wv9:::($ ($ ($ ($ ($GEN ($ ($ ($V" " " " "259 " " ""% % % % %.u5 % % %<  N .1
 $' 0BA,7MM4' ' ' '.J+ J+ J+ J+ J+ J+ J+ J+Z  G(0%%(3(F%*/ */ */ */ */ */ */ */\	 	 	 	       %)' ' ' ' '4          37         F   $C C C0    H   *    WR[   "       4    72;   $9( 9( 9( 9( 9(S 9( 9( 9(x
 
 
 
 
4 
 
 
D    \      KKK WT### "'	D D D D DD 
 
 
 
7 7 7 7   ) ) ) ) ) ) ) )<
+ 
+ 
+ 
+ 
+' ' ' ' <> = = = =    "*FGG
 )-0: 0: 0: 0: 0:f   4 2:>??rz.//
 '3&.    4 4::   2:j!!$ $ $ $ $ $ $ $*&( &( &( &( &( &( &( &(R  0)0 )0 )0X
 
 
 
	% 	% 	% 	%   ( RZ-..
( ( ( (V> > > >	 	 	 	    ty    
"gh.//0			r9   