o
    àý°j0n  ã                   @   s  d Z ddlZg d¢Zedejdd…  ƒZze W n ey&   dd„ ZY nw G dd	„ d	e	ƒZ
d
d„ Zdd„ Zdd„ Zdd„ ZG dd„ deƒZdZG dd„ deƒZi Zded< dd„ Zeed< [dd„ Zeed< [dd„ Zeed< [dd„ Zeed< [d d!„ Zeed!< [ed"k r’d#d$„ Zeed$< [n$d%d&„ Zeed&< [d'd(„ Zeed(< [d)d*„ Zeed*< [d+d,„ Zeed,< [d-d.„ Zeed.< [d/d0„ Z e ed0< [ d1d2„ Z!e!ed2< [!d3d4„ Z"e"ed4< ["e
d5d6„ ƒZ#e#ed6< [#e
d7d8„ ƒZ$e$ed8< [$ed9e	feƒZ[G d:d;„ d;e%eƒZ&d<d=„ Z'dS )>zPython Enumerationsé    N)ÚEnumÚIntEnumÚuniqueú%s.%sé   c                 C   s   | D ]}|r	 dS qdS )NTF© )ÚiterableÚelementr   r   úŠ/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/impacket/dcerpc/v5/enum.pyÚany   s
   ÿr   c                   @   s4   e Zd ZdZddd„Zddd„Zdd„ Zd	d
„ ZdS )Ú_RouteClassAttributeToGetattraj  Route attribute access on a class to __getattr__.

    This is a descriptor, used to define attributes that act differently when
    accessed through an instance and through a class.  Instance access remains
    normal, but access to an attribute through a class will be routed to the
    class's __getattr__ method; this is done by raising AttributeError.

    Nc                 C   s
   || _ d S ©N)Úfget)Úselfr   r   r   r
   Ú__init__&   ó   
z&_RouteClassAttributeToGetattr.__init__c                 C   s   |d u rt ƒ ‚|  |¡S r   )ÚAttributeErrorr   )r   ÚinstanceÚ
ownerclassr   r   r
   Ú__get__)   s   
z%_RouteClassAttributeToGetattr.__get__c                 C   ó   t dƒ‚)Nzcan't set attribute©r   )r   r   Úvaluer   r   r
   Ú__set__.   ó   z%_RouteClassAttributeToGetattr.__set__c                 C   r   )Nzcan't delete attributer   )r   r   r   r   r
   Ú
__delete__1   r   z(_RouteClassAttributeToGetattr.__delete__r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   r   r   r   r   r
   r      s    

r   c                 C   s   t | dƒpt | dƒpt | dƒS )z5Returns True if obj is a descriptor, False otherwise.r   r   r   )Úhasattr)Úobjr   r   r
   Ú_is_descriptor5   s
   
ÿýr"   c                 C   sT   | dd… | dd…   kodkn  o)| dd… dko)| dd… dko)t | ƒdkS )	z3Returns True if a __dunder__ name, False otherwise.Nr   éþÿÿÿÚ__é   Ú_éýÿÿÿé   ©Úlen©Únamer   r   r
   Ú
_is_dunder=   s   (ÿþ
ýr-   c                 C   sL   | d | d   kodkn  o%| dd… dko%| dd… dko%t | ƒdkS )z1Returns True if a _sunder_ name, False otherwise.r   éÿÿÿÿr&   é   r   r#   r)   r+   r   r   r
   Ú
_is_sunderE   s    ÿþ
ýr0   c                 C   s   dd„ }|| _ d| _dS )z"Make the given class un-picklable.c                 S   s   t d|  ƒ‚)Nz%r cannot be pickled)Ú	TypeError©r   r   r   r
   Ú_break_on_call_reduceO   s   z6_make_class_unpicklable.<locals>._break_on_call_reducez	<unknown>N)Ú
__reduce__r   )Úclsr3   r   r   r
   Ú_make_class_unpicklableM   s   
r6   c                       s,   e Zd ZdZ‡ fdd„Z‡ fdd„Z‡  ZS )Ú	_EnumDictz§Track enum member order and ensure member names are not reused.

    EnumMeta will use the names found in self._member_names as the
    enumeration member names.

    c                    s   t t| ƒ ¡  g | _d S r   )Úsuperr7   r   Ú_member_namesr2   ©Ú	__class__r   r
   r   \   s   
z_EnumDict.__init__c                    s†   t dkr
|dkr
dS t|ƒrtdƒ‚t|ƒrn!|| jv r"td| ƒ‚t|ƒs8|| v r2td| |  ƒ‚| j |¡ tt	| ƒ 
||¡ dS )a  Changes anything not dundered or not a descriptor.

        If a descriptor is added with the same name as an enum member, the name
        is removed from _member_names (this may leave a hole in the numerical
        sequence of values).

        If an enum member name is used twice, an error is raised; duplicate
        values are not checked for.

        Single underscore (sunder) names are reserved.

        Note:   in 3.x __order__ is simply discarded as a not necessary piece
                leftover from 2.x

        ç      @Ú	__order__Nz(_names_ are reserved for future Enum usezAttempted to reuse key: %rzKey already defined as: %r)Úpyverr0   Ú
ValueErrorr-   r9   r1   r"   Úappendr8   r7   Ú__setitem__)r   Úkeyr   r:   r   r
   rA   `   s   
z_EnumDict.__setitem__)r   r   r   r   r   rA   Ú__classcell__r   r   r:   r
   r7   U   s    r7   c                       sØ   e Zd ZdZedd„ ƒZ‡ fdd„Zd'dd„Zd	d
„ Z‡ fdd„Z	dd„ Z
edd„ ƒZdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Z‡ fdd„Zd'dd „Zed!d"„ ƒZed#k rbed$d%„ ƒZ‡  ZS ed&d%„ ƒZ‡  ZS )(ÚEnumMetazMetaclass for Enumc                 C   s   t ƒ S r   )r7   )Úmetaclsr5   Úbasesr   r   r
   Ú__prepare__‰   ó   zEnumMeta.__prepare__c              	      s”  t ˆƒtu rˆ}tƒ ‰| ¡ D ]\}}|ˆ|< q|  |¡\}}|  ˆ||¡\}	}
}t‡fdd„ˆjD ƒƒ}ˆjD ]}ˆ|= q8ˆ d¡‰ ˆ d u rTˆj‰ tdk rQd}n!d}nˆd= d}tdk rrˆ  	dd¡ 
¡ ‰ ‡ fd	d
„|D ƒ}ˆ |7 ‰ t|ƒtdgƒ@ }|r‡tdd |¡f ƒ‚tt| ƒ | ||ˆ¡‰g ˆ_i ˆ_|ˆ_i ˆ_|tur®|j d¡d u r®tˆƒ |	d u rµˆj}	ˆ D ]{}|| }t|tƒsÆ|f}n|}|tu rÏ|f}|rÓ|sà|	ˆƒ}t|dƒsß||_n|	ˆg|¢R Ž }t|dƒsò||Ž |_|j}||_ˆ|_|j|Ž  ˆj ¡ D ]\}}|j|jk�r|} n�qˆj  |¡ |ˆj|< z|ˆj|< W q· t!�y2   Y q·w |�sLdd
„ t"‡fdd
„ˆjD ƒdd„ d�D ƒˆ_t#d u�rXt$ˆdt#j%ƒ dD ]$}t&ˆ|ƒ}t&||d ƒ}t&||d ƒ}|d u�r}||u �r}t$ˆ||ƒ �qZtdk �r”t'ˆt(ƒ�r“t$ˆdt&t(dƒƒ ntdk �r®t'ˆt(ƒ�r®dD ]}t$ˆ|t&t(|ƒƒ �q¡t#d u�rÈ|
�r¿t$ˆdˆjd ƒ t$ˆdt#jd ƒ ˆS )Nc                 3   s   � | ]	}|ˆ | fV  qd S r   r   )Ú.0Úk)Ú	classdictr   r
   Ú	<genexpr>¡   s   € z#EnumMeta.__new__.<locals>.<genexpr>r=   r<   FTú,ú c                    s   g | ]}|ˆ vr|‘qS r   r   ©rI   r,   )r=   r   r
   Ú
<listcomp>²   s    z$EnumMeta.__new__.<locals>.<listcomp>ÚmrozInvalid enum member name(s): %sú, Ú__getnewargs__Ú_value_c                 S   s   g | ]}|d  ‘qS )r   r   )rI   Úer   r   r
   rP   ú   s    ÿc                    s   g | ]	}|ˆ j | f‘qS r   ©Ú_member_map_rO   )Ú
enum_classr   r
   rP   ü   s    c                 S   s
   | d j S )Nr/   ©rT   )Útr   r   r
   Ú<lambda>ý   s   
 z"EnumMeta.__new__.<locals>.<lambda>)rB   )Ú__repr__Ú__str__Ú
__format__çÍÌÌÌÌÌ@Ú__cmp__)Ú__le__Ú__lt__Ú__gt__Ú__ge__Ú__eq__Ú__ne__Ú__hash__Ú__member_new__Ú__new__))ÚtypeÚdictr7   ÚitemsÚ_get_mixins_Ú
_find_new_r9   Úgetr>   ÚreplaceÚsplitÚsetr?   Újoinr8   rD   ri   Ú_member_names_rW   Ú_member_type_Ú_value2member_map_ÚobjectÚ__dict__r6   Ú
isinstanceÚtupler    rT   Ú_name_Ú__objclass__r   r   r@   r1   Úsortedr   ÚsetattrrS   ÚgetattrÚ
issubclassÚint)rE   r5   rF   rK   Úoriginal_dictrJ   ÚvÚmember_typeÚ
first_enumri   Úsave_newÚuse_argsÚmembersr,   Úorder_specifiedÚaliasesÚinvalid_namesÚmember_namer   ÚargsÚenum_memberÚcanonical_memberÚclass_methodÚ
obj_methodÚenum_methodÚmethodr:   )r=   rK   rX   r
   ri   �   sÆ   

ÿ

ÿ

€


þ
ÿþÿ

€
€
	
zEnumMeta.__new__Nc                 C   s&   |du r
|   | |¡S | j||||d�S )a¯  Either returns an existing member, or creates a new enum class.

        This method is used both when an enum class is given a value to match
        to an enumeration member (i.e. Color(3)) and for the functional API
        (i.e. Color = Enum('Color', names='red green blue')).

        When used for the functional API: `module`, if set, will be stored in
        the new class' __module__ attribute; `type`, if set, will be mixed in
        as the first base class.

        Note: if `module` is not set this routine will attempt to discover the
        calling module by walking the frame stack; if this is unsuccessful
        the resulting class will not be pickleable.

        N)Úmodulerj   )ri   Ú_create_)r5   r   Únamesr”   rj   r   r   r
   Ú__call__+  s   zEnumMeta.__call__c                 C   s   t || ƒo
|j| jv S r   )ry   r,   rW   )r5   Úmemberr   r   r
   Ú__contains__@  s   zEnumMeta.__contains__c                    s,   || j v rtd| j ƒ‚tt| ƒ |¡ d S )Nz%s: cannot delete Enum member.)rW   r   r   r8   rD   Ú__delattr__)r5   Úattrr:   r   r
   rš   C  s
   
ÿzEnumMeta.__delattr__c                 C   s   g d¢| j  S )N)r;   r   Ú__members__r   ©rt   r2   r   r   r
   Ú__dir__K  s   ÿzEnumMeta.__dir__c                 C   s
   | j  ¡ S )z­Returns a mapping of member name->value.

        This mapping lists all enum members, including aliases. Note that this
        is a copy of the internal mapping.

        )rW   Úcopy©r5   r   r   r
   rœ   O  s   
zEnumMeta.__members__c                 C   s4   t |ƒrt|ƒ‚z| j| W S  ty   t|ƒ‚w )a5  Return the enum member matching `name`

        We use __getattr__ instead of descriptors or inserting into the enum
        class' __dict__ in order to support `name` and `value` being both
        properties for enum members (which live in the class' __dict__) and
        enum members themselves.

        )r-   r   rW   ÚKeyError©r5   r,   r   r   r
   Ú__getattr__Y  s   	ÿzEnumMeta.__getattr__c                 C   s
   | j | S r   rV   r¢   r   r   r
   Ú__getitem__i  r   zEnumMeta.__getitem__c                    s   ‡ fdd„ˆ j D ƒS )Nc                 3   ó   � | ]}ˆ j | V  qd S r   rV   rO   r    r   r
   rL   m  ó   € z$EnumMeta.__iter__.<locals>.<genexpr>r�   r    r   r    r
   Ú__iter__l  s   zEnumMeta.__iter__c                    s   ‡ fdd„t ˆ jƒD ƒS )Nc                 3   r¥   r   rV   rO   r    r   r
   rL   p  r¦   z(EnumMeta.__reversed__.<locals>.<genexpr>)Úreversedrt   r    r   r    r
   Ú__reversed__o  ó   zEnumMeta.__reversed__c                 C   ó
   t | jƒS r   )r*   rt   r    r   r   r
   Ú__len__r  r   zEnumMeta.__len__c                 C   s
   d| j  S )Nz	<enum %r>)r   r    r   r   r
   r\   u  r   zEnumMeta.__repr__c                    s4   | j  di ¡}||v rtdƒ‚tt| ƒ ||¡ dS )zùBlock attempts to reassign Enum members.

        A simple assignment to the class namespace only changes one of the
        several possible ways to get an Enum member from the Enum class,
        resulting in an inconsistent Enumeration.

        rW   zCannot reassign members.N)rx   ro   r   r8   rD   Ú__setattr__)r5   r,   r   Ú
member_mapr:   r   r
   r­   x  s   zEnumMeta.__setattr__c              	   C   s.  | j }|du r| f}n|| f}| ||¡}g }t|tƒr$| dd¡ ¡ }t|ttfƒr;t|d tƒr;dd„ t|ƒD ƒ}|D ]}	t|	tƒrL|	||	 }
}n|	\}
}|||
< | 	|
¡ q=t|	tƒsfd 
|¡|d< | ||||¡}|du rˆz
t d¡jd	 }W n ttfy‡   Y nw |du r’t|ƒ |S ||_|S )
a}  Convenience method to create a new Enum class.

        `names` can be:

        * A string containing member names, separated either with spaces or
          commas.  Values are auto-numbered from 1.
        * An iterable of member names.  Values are auto-numbered from 1.
        * An iterable of (member name, value) pairs.
        * A mapping of member name -> value.

        NrM   rN   r   c                 S   s   g | ]
\}}||d  f‘qS )r/   r   )rI   ÚirU   r   r   r
   rP   �  ó    z%EnumMeta._create_.<locals>.<listcomp>r=   r   r   )r;   rG   ry   Ústrrp   rq   rz   ÚlistÚ	enumerater@   rs   ri   Ú_sysÚ	_getframeÚ	f_globalsr   r?   r6   r   )r5   Ú
class_namer–   r”   rj   rE   rF   rK   r=   ÚitemrŒ   Úmember_valuerX   r   r   r
   r•   …  s<   


ÿþzEnumMeta._create_c                 C   sº   | rt du r
tt fS d }}| D ]}|t ur"t|t ƒr"|jr"tdƒ‚qt|t ƒs,tdƒ‚t| d t ƒs?| d }| d }||fS | d jD ]}t|t ƒrR|du rQ|}qD|du rX|}qD||fS )zžReturns the type for creating enum members, and the first inherited
        enum class.

        bases: the tuple of bases that was given to __new__

        NzCannot extend enumerationszHnew enumerations must be created as `ClassName([mixin_type,] enum_type)`r   r.   )r   rw   r€   rt   r1   Ú__mro__)rF   r„   r…   Úbaser   r   r
   rm   º  s4   ÿþ€
ô
€€zEnumMeta._get_mixins_r<   c                 C   sþ   |   dd¡}|r
dS tddƒ}ttdƒ}tdu r|}ntjd }dD ]J}||fD ]=}z|j| }	W n ttfyB   t||dƒ}	Y nw |	d|||fvre|dkrW|	| d<   dS t|	tƒra|	 	|¡}	|	} nq(|durl nq"tj
}|tj
u rxd}
nd}
|d|
fS )	á  Returns the __new__ to be used for creating the enum members.

            classdict: the class dictionary given to __new__
            member_type: the data type whose __new__ will be used by default
            first_enum: enumeration to check for an overriding __new__

            ri   N)NTT©rh   ri   rh   )NFTFT)ro   r   rw   r   rx   r   r¡   ry   Ústaticmethodr   ri   )rK   r„   r…   ri   ÚN__new__ÚO__new__ÚE__new__r“   ÚpossibleÚtargetr‡   r   r   r
   rn   é  sJ   


ÿü

ôÿ

zEnumMeta._find_new_c           	      C   sŽ   |   dd¡}|du}|du r8dD ]$}||fD ]}t||dƒ}|ddjtjtjfvr-|} nq|dur4 nqtj}|tju r@d}nd}|||fS )r¼   ri   Nr½   FT)ro   r   ri   rw   r   )	rK   r„   r…   ri   r†   r“   rÂ   rÃ   r‡   r   r   r
   rn   #  s.   üùÿ

)NNN)r   r   r   r   ÚclassmethodrG   ri   r—   r™   rš   rž   Úpropertyrœ   r£   r¤   r§   r©   r¬   r\   r­   r•   r¾   rm   r>   rn   rC   r   r   r:   r
   rD   ‡   s6    
 

	
5
-9rD   zNGeneric enumeration.

    Derive from this class to define new enumerations.

r   c                 C   sx   t |ƒ| u r	|j}z|| jv r| j| W S W n ty2   | j ¡ D ]}|j|kr/|   Y S q"Y nw td|| jf ƒ‚)Nz%s is not a valid %s)rj   r   rv   r1   rW   Úvaluesr?   r   )r5   r   r˜   r   r   r
   ri   [  s   
ÿ
ÿÿþri   c                 C   s   d| j j| j| jf S )Nz<%s.%s: %r>)r;   r   r{   rT   r2   r   r   r
   r\   q  s   ÿr\   c                 C   s   d| j j| jf S )Nr   )r;   r   r{   r2   r   r   r
   r]   w  s   r]   c                 C   s   dd„ | j jD ƒ}g d¢| S )Nc                 S   s   g | ]
}|d  dkr|‘qS )r   r&   r   )rI   Úmr   r   r
   rP   }  r°   z__dir__.<locals>.<listcomp>)r;   r   r   r,   r   )r;   rx   )r   Úadded_behaviorr   r   r
   rž   |  s   rž   c                 C   s0   | j tu rt}t| ƒ}n| j }| j}| ||¡S r   )ru   rw   r±   r   r^   )r   Úformat_specr5   Úvalr   r   r
   r^   ‚  s   

r^   r_   c                 C   s"   t |ƒ| ju r| |u rdS dS tS )Nr   r.   )rj   r;   ÚNotImplementedr1   r   ©r   Úotherr   r   r
   r`   ™  s
   r`   c                 C   ó   t d| jj|jjf ƒ‚)Nzunorderable types: %s() <= %s()©r1   r;   r   rÌ   r   r   r
   ra   ¥  rª   ra   c                 C   rÎ   )Nzunorderable types: %s() < %s()rÏ   rÌ   r   r   r
   rb   ª  rª   rb   c                 C   rÎ   )Nzunorderable types: %s() >= %s()rÏ   rÌ   r   r   r
   rd   ¯  rª   rd   c                 C   rÎ   )Nzunorderable types: %s() > %s()rÏ   rÌ   r   r   r
   rc   ´  rª   rc   c                 C   s   t |ƒ| ju r| |u S tS r   ©rj   r;   rË   rÌ   r   r   r
   re   º  ó   re   c                 C   s   t |ƒ| ju r| |uS tS r   rÐ   rÌ   r   r   r
   rf   Á  rÑ   rf   c                 C   s   | j fS r   rY   r2   r   r   r
   rS   È  r   rS   c                 C   r«   r   )Úhashr{   r2   r   r   r
   rg   Í  r   rg   c                 C   ó   | j S r   )r{   r2   r   r   r
   r,   Ù  rH   r,   c                 C   rÓ   r   rY   r2   r   r   r
   r   ß  rH   r   r   c                   @   s   e Zd ZdZdS )r   z.Enum where members are also (and must be) intsN)r   r   r   r   r   r   r   r
   r   ë  s    r   c                 C   s^   g }| j  ¡ D ]\}}||jkr| ||jf¡ q|r-d dd„ |D ƒ¡}td| |f ƒ‚| S )zIClass decorator that ensures only unique members exist in an enumeration.rR   c                 S   s   g | ]
\}}d ||f ‘qS )z%s -> %sr   )rI   Úaliasr,   r   r   r
   rP   ÷  r°   zunique.<locals>.<listcomp>zduplicate names found in %r: %s)rœ   rl   r,   r@   rs   r?   )ÚenumerationÚ
duplicatesr,   r˜   Úduplicate_namesr   r   r
   r   ï  s   
€ÿÿr   )(r   Úsysr´   Ú__all__ÚfloatÚversion_infor>   r   Ú	NameErrorrw   r   r"   r-   r0   r6   rk   r7   r   rj   rD   Útemp_enum_dictri   r\   r]   rž   r^   r`   ra   rb   rd   rc   re   rf   rS   rg   r,   r   r�   r   r   r   r   r   r
   Ú<module>   sš   
ÿ/   T	

