a
    kÄ#dZŁ  ă                   @   s  d 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mZmZ ddlmZmZ ddlmZmZmZmZmZmZmZmZmZmZ G dd	 d	Zed
ZG dd dee Z G dd de e ee Z!ede"e#Z$G dd de!e$ Z%G dd de%e" Z&G dd de%e# Z'G dd de'Z(G dd de&Z)G dd de&Z*G dd de&Z+G dd de&Z,G d d! d!e&Z-G d"d# d#e&Z.G d$d% d%e&Z/G d&d' d'e&Z0G d(d) d)e&Z1G d*d+ d+e&Z2G d,d- d-e&Z3G d.d/ d/e&Z4G d0d1 d1e,Z5G d2d3 d3e,Z6G d4d5 d5e,Z7G d6d7 d7e,Z8G d8d9 d9e,Z9G d:d; d;e,Z:G d<d= d=e,Z;G d>d? d?e,Z<G d@dA dAe,Z=G dBdC dCe!e Z>edDe?e@ZAG dEdF dFe!eA eeA ZBG dGdH dHeBe? ZCG dIdJ dJeCZDG dKdL dLeDZEG dMdN dNeBe@ ZFG dOdP dPeBe@ ZGG dQdR dReBe@ ZHG dSdT dTeBe@ ZIG dUdV dVe!e@ ZJG dWdX dXe>ZKG dYdZ dZeKZLG d[d\ d\eLZMG d]d^ d^eLZNG d_d` d`eLZOG dadb dbeLZPG dcdd ddeLZQG dedf dfeLZRG dgdh dheLZSG didj djeLZTG dkdl dleKZUG dmdn dne!e e  ZVG dodp dpe!ejW ZXG dqdr dre%e ee ZYG dsdt dteYe# ZZG dudv dveYe" Z[G dwdx dxeYe@ Z\G dydz dzeYe@ Z]G d{d| d|e e Z^G d}d~ d~e e" Z_G dd de e? Z`G dd de`ZadS )z"
Fields that hold random numbers.
é    )Úabsolute_importN)ÚNet)Úbytes_encodeÚchbÚ	plain_str)Úcorrupt_bitsÚcorrupt_bytes)
ÚListÚTypeVarÚGenericÚSetÚUnionÚAnyÚDictÚOptionalÚTupleÚcastc                   @   s.   e Zd ZdZdddZdd Zd	d
 ZeZdS )ÚRandomEnumerationaF  iterate through a sequence in random order.
       When all the values have been drawn, if forever=1, the drawing is done again.  # noqa: E501
       If renewkeys=0, the draw will be in the same order, guaranteeing that the same  # noqa: E501
       number will be drawn in not less than the number of integers of the sequenceNé   r   c                 C   s   || _ || _|| _t |Ą| _d| _|| d | _d}d|> | jk rN|d7 }q6|| _t	d|d d | _
d| j
 d | _t| jd| _d| _d| _d S )Né   r   r   é   é   )ÚforeverÚ	renewkeysÚinfÚrandomÚRandomÚrndÚ	sbox_sizeÚtopÚnÚminÚfsÚfsmaskÚmaxÚroundsÚturnsÚi)Úselfr   ÚsupÚseedr   r   r    Š r+   úE/var/www/html/gsl.tools/lib/python3.9/site-packages/scapy/volatile.pyÚ__init__2   s    
zRandomEnumeration.__init__c                 C   s   | S ŠNr+   Šr(   r+   r+   r,   Ú__iter__G   s    zRandomEnumeration.__iter__c                    sţ    j dks jdkrN jrN j dd j d Ą _ fddt jD  _	  j d7  _  jd j k rč j jA }  jd7  _t j
D ]@}| j@ }| jL }| j	| j  N }|| j j > O }q| jk r\ j| S q\d _ js tq d S )Nr   r   r   c                    s   g | ]} j  d  jĄqS )r   )r   Úrandintr#   ŠÚ.0Ú_r/   r+   r,   Ú
<listcomp>P   s   ˙z*RandomEnumeration.next.<locals>.<listcomp>)r&   r'   r   r   r1   r    Zcnt_keyÚranger   Zsboxr%   r#   r"   r   r   r   ÚStopIteration)r(   Úctr4   Zlsbr+   r/   r,   ÚnextK   s&    
˙


zRandomEnumeration.next)Nr   r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r-   r0   r9   Ú__next__r+   r+   r+   r,   r   ,   s
   
r   Ú_Tc                   @   sh   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdZdd Z	dd Z
dd Zdd Zdd Zdd ZdS )ÚVolatileValuec                 C   s   d| j j S )Nú<%s>)Ú	__class__r:   r/   r+   r+   r,   Ú__repr__h   s    zVolatileValue.__repr__c                 C   s   dS ŠNÚ r+   r/   r+   r+   r,   Ú_command_argsl   s    zVolatileValue._command_argsc                 C   s   d| j j|  Ą f S )Nz%s(%s))rB   r:   rF   r/   r+   r+   r,   Úcommandp   s    zVolatileValue.commandc                 C   s<   |   Ą }t|tr|  Ą n|}t|t|s0dS t||kS )NF)Ú_fixÚ
isinstancer@   ÚtypeÚbool)r(   ÚotherÚxÚyr+   r+   r,   Ú__eq__t   s
    zVolatileValue.__eq__c                 C   s
   | |k S r.   r+   Šr(   rL   r+   r+   r,   Ú__ne__|   s    zVolatileValue.__ne__Nc                 C   s   |dv rt |t|  Ą |S )N)Ú__setstate__Ú__getstate__)ÚAttributeErrorÚgetattrrH   )r(   Úattrr+   r+   r,   Ú__getattr__   s    zVolatileValue.__getattr__c                 C   s   t |  Ą S r.   ŠÚstrrH   r/   r+   r+   r,   Ú__str__   s    zVolatileValue.__str__c                 C   s   t |  Ą S r.   Šr   rH   r/   r+   r+   r,   Ú	__bytes__   s    zVolatileValue.__bytes__c                 C   s   t |  Ą S r.   )ÚlenrH   r/   r+   r+   r,   Ú__len__   s    zVolatileValue.__len__c                 C   s
   t   | ĄS r.   )Úcopyr/   r+   r+   r,   r_      s    zVolatileValue.copyc                 C   s
   t td S r.   )r   r?   r/   r+   r+   r,   rH      s    zVolatileValue._fix)r:   r;   r<   rC   rF   rG   rO   rQ   Ú__hash__rW   rZ   r\   r^   r_   rH   r+   r+   r+   r,   r@   g   s   r@   c                   @   s   e Zd ZdS )Ú	RandFieldNŠr:   r;   r<   r+   r+   r+   r,   ra      s   ra   Ú_Ic                   @   s   e Zd ZdZdd Zdd Zdd ZeZdd	 Zd
d Z	dd Z
dd Zdd Zdd Zdd ZeZdd Zdd Zdd Zdd ZdS )Ú_RandNumeralz*Implements integer management in RandFieldc                 C   s   t |  Ą S r.   )ÚintrH   r/   r+   r+   r,   Ú__int__Š   s    z_RandNumeral.__int__c                 C   s   t | S r.   )re   r/   r+   r+   r,   Ú	__index__­   s    z_RandNumeral.__index__c                 C   s   t |  Ą S r.   )rK   rH   r/   r+   r+   r,   Ú__nonzero__ą   s    z_RandNumeral.__nonzero__c                 C   s   |   Ą | S r.   ŠrH   rP   r+   r+   r,   Ú__add__ś   s    z_RandNumeral.__add__c                 C   s   ||   Ą  S r.   ri   rP   r+   r+   r,   Ú__radd__ş   s    z_RandNumeral.__radd__c                 C   s   |   Ą | S r.   ri   rP   r+   r+   r,   Ú__sub__ž   s    z_RandNumeral.__sub__c                 C   s   ||   Ą  S r.   ri   rP   r+   r+   r,   Ú__rsub__Â   s    z_RandNumeral.__rsub__c                 C   s   |   Ą | S r.   ri   rP   r+   r+   r,   Ú__mul__Ć   s    z_RandNumeral.__mul__c                 C   s   ||   Ą  S r.   ri   rP   r+   r+   r,   Ú__rmul__Ę   s    z_RandNumeral.__rmul__c                 C   s   |   Ą | S r.   ri   rP   r+   r+   r,   Ú__floordiv__Î   s    z_RandNumeral.__floordiv__c                 C   s   |   Ą |k S r.   ri   rP   r+   r+   r,   Ú__lt__Ó   s    z_RandNumeral.__lt__c                 C   s   |   Ą |kS r.   ri   rP   r+   r+   r,   Ú__le__×   s    z_RandNumeral.__le__c                 C   s   |   Ą |kS r.   ri   rP   r+   r+   r,   Ú__ge__Ű   s    z_RandNumeral.__ge__c                 C   s   |   Ą |kS r.   ri   rP   r+   r+   r,   Ú__gt__ß   s    z_RandNumeral.__gt__N)r:   r;   r<   r=   rf   rg   rh   Ú__bool__rj   rk   rl   rm   rn   ro   rp   Z__div__rq   rr   rs   rt   r+   r+   r+   r,   rd   Ś   s"   rd   c                       sh   e Zd ZdZdZdZdd Z fddZdd Zd	d
 Z	dd Z
dd Zdd Zdd Zdd Z  ZS )ÚRandNumz7Instances evaluate to random integers in selected ranger   c                 C   s   || _ || _d S r.   Šr!   r$   Šr(   r!   r$   r+   r+   r,   r-   é   s    zRandNum.__init__c                    s*   | j jdkrd| j| jf S tt|  Ą S )Nrv   úmin=%r, max=%r)rB   r:   r!   r$   Úsuperrv   rF   r/   ŠrB   r+   r,   rF   î   s    zRandNum._command_argsc                 C   s   t  | j| jd ĄS )Nr   )r   Ú	randranger!   r$   r/   r+   r+   r,   rH   ô   s    zRandNum._fixc                 C   s   |   Ą |> S r.   ri   rP   r+   r+   r,   Ú
__lshift__ř   s    zRandNum.__lshift__c                 C   s   |   Ą |? S r.   ri   rP   r+   r+   r,   Ú
__rshift__ü   s    zRandNum.__rshift__c                 C   s   |   Ą |@ S r.   ri   rP   r+   r+   r,   Ú__and__   s    zRandNum.__and__c                 C   s   ||   Ą @ S r.   ri   rP   r+   r+   r,   Ú__rand__  s    zRandNum.__rand__c                 C   s   |   Ą |B S r.   ri   rP   r+   r+   r,   Ú__or__  s    zRandNum.__or__c                 C   s   ||   Ą B S r.   ri   rP   r+   r+   r,   Ú__ror__  s    zRandNum.__ror__)r:   r;   r<   r=   r!   r$   r-   rF   rH   r}   r~   r   r   r   r   Ú__classcell__r+   r+   r{   r,   rv   ä   s   rv   c                   @   s   e Zd Zdd Zdd ZdS )Ú	RandFloatc                 C   s   || _ || _d S r.   rw   rx   r+   r+   r,   r-     s    zRandFloat.__init__c                 C   s   t  | j| jĄS r.   )r   Úuniformr!   r$   r/   r+   r+   r,   rH     s    zRandFloat._fixN)r:   r;   r<   r-   rH   r+   r+   r+   r,   r     s   r   c                   @   s   e Zd Zdd ZdS )ÚRandBinFloatc                 C   s   t tt dttdĄd S )Nz!fé   r   )r   ÚfloatÚstructÚunpackÚbytesÚRandBinr/   r+   r+   r,   rH     s    ţzRandBinFloat._fixNŠr:   r;   r<   rH   r+   r+   r+   r,   r     s   r   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )ÚRandNumGammac                 C   s   || _ || _d S r.   ŠÚalphaÚbeta)r(   r   r   r+   r+   r,   r-   &  s    zRandNumGamma.__init__c                 C   s   d| j | jf S )Nzalpha=%r, beta=%rr   r/   r+   r+   r,   rF   +  s    zRandNumGamma._command_argsc                 C   s   t tt | j| jĄS r.   )re   Úroundr   Úgammavariater   r   r/   r+   r+   r,   rH   /  s    zRandNumGamma._fixNŠr:   r;   r<   r-   rF   rH   r+   r+   r+   r,   r   %  s   r   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )ÚRandNumGaussc                 C   s   || _ || _d S r.   ŠÚmuÚsigma)r(   r   r   r+   r+   r,   r-   5  s    zRandNumGauss.__init__c                 C   s   d| j | jf S )Nzmu=%r, sigma=%rr   r/   r+   r+   r,   rF   :  s    zRandNumGauss._command_argsc                 C   s   t tt | j| jĄS r.   )re   r   r   Úgaussr   r   r/   r+   r+   r,   rH   >  s    zRandNumGauss._fixNr   r+   r+   r+   r,   r   4  s   r   c                   @   s&   e Zd Zd	ddZdd Zdd ZdS )
ÚRandNumExpor   c                 C   s   || _ || _d S r.   ŠÚlambdÚbase)r(   r   r   r+   r+   r,   r-   D  s    zRandNumExpo.__init__c                 C   s&   d| j  }| jdkr"|d| j 7 }|S )Nzlambd=%rr   z	, base=%rr   Šr(   Úretr+   r+   r,   rF   I  s    

zRandNumExpo._command_argsc                 C   s   | j ttt | jĄ S r.   )r   re   r   r   Úexpovariater   r/   r+   r+   r,   rH   P  s    zRandNumExpo._fixN)r   r   r+   r+   r+   r,   r   C  s   
r   c                       s2   e Zd ZdZd	 fdd	Zdd Zdd Z  ZS )
ÚRandEnumzRInstances evaluate to integer sampling without replacement from the given intervalNc                    s*   || _ t|||| _tt|  ||Ą d S r.   )Ú_seedr   Úseqrz   rĄ   r-   )r(   r!   r$   r*   r{   r+   r,   r-   X  s    zRandEnum.__init__c                 C   s(   d| j | jf }| jr$|d| j 7 }|S )Nry   ú	, seed=%r)r!   r$   r˘   r   r+   r+   r,   rF   ^  s    zRandEnum._command_argsc                 C   s
   t | jS r.   )r9   rŁ   r/   r+   r+   r,   rH   e  s    zRandEnum._fix)N)r:   r;   r<   r=   r-   rF   rH   r   r+   r+   r{   r,   rĄ   U  s   rĄ   c                   @   s   e Zd Zdd ZdS )ÚRandBytec                 C   s   t  | ddĄ d S ŠNr   é˙   Šrv   r-   r/   r+   r+   r,   r-   k  s    zRandByte.__init__NŠr:   r;   r<   r-   r+   r+   r+   r,   rĽ   j  s   rĽ   c                   @   s   e Zd Zdd ZdS )Ú	RandSBytec                 C   s   t  | ddĄ d S ŠNi˙˙˙é   r¨   r/   r+   r+   r,   r-   q  s    zRandSByte.__init__NrŠ   r+   r+   r+   r,   rŞ   p  s   rŞ   c                   @   s   e Zd Zdd ZdS )Ú	RandShortc                 C   s   t  | ddĄ d S ŠNr   é˙˙  r¨   r/   r+   r+   r,   r-   w  s    zRandShort.__init__NrŠ   r+   r+   r+   r,   r­   v  s   r­   c                   @   s   e Zd Zdd ZdS )Ú
RandSShortc                 C   s   t  | ddĄ d S ŠNi ˙˙i˙  r¨   r/   r+   r+   r,   r-   }  s    zRandSShort.__init__NrŠ   r+   r+   r+   r,   r°   |  s   r°   c                   @   s   e Zd Zdd ZdS )ÚRandIntc                 C   s   t  | ddĄ d S ŠNr   l   ˙˙ r¨   r/   r+   r+   r,   r-     s    zRandInt.__init__NrŠ   r+   r+   r+   r,   r˛     s   r˛   c                   @   s   e Zd Zdd ZdS )ÚRandSIntc                 C   s   t  | ddĄ d S ŠNi   i˙˙˙r¨   r/   r+   r+   r,   r-     s    zRandSInt.__init__NrŠ   r+   r+   r+   r,   r´     s   r´   c                   @   s   e Zd Zdd ZdS )ÚRandLongc                 C   s   t  | ddĄ d S ŠNr   l   ˙˙˙˙ r¨   r/   r+   r+   r,   r-     s    zRandLong.__init__NrŠ   r+   r+   r+   r,   rś     s   rś   c                   @   s   e Zd Zdd ZdS )Ú	RandSLongc                 C   s   t  | ddĄ d S ŠNlű˙˙˙         l   ˙˙˙˙ r¨   r/   r+   r+   r,   r-     s    zRandSLong.__init__NrŠ   r+   r+   r+   r,   r¸     s   r¸   c                   @   s   e Zd Zdd ZdS )ÚRandEnumBytec                 C   s   t  | ddĄ d S rŚ   ŠrĄ   r-   r/   r+   r+   r,   r-     s    zRandEnumByte.__init__NrŠ   r+   r+   r+   r,   rş     s   rş   c                   @   s   e Zd Zdd ZdS )ÚRandEnumSBytec                 C   s   t  | ddĄ d S rŤ   rť   r/   r+   r+   r,   r-   Ą  s    zRandEnumSByte.__init__NrŠ   r+   r+   r+   r,   rź      s   rź   c                   @   s   e Zd Zdd ZdS )ÚRandEnumShortc                 C   s   t  | ddĄ d S rŽ   rť   r/   r+   r+   r,   r-   §  s    zRandEnumShort.__init__NrŠ   r+   r+   r+   r,   r˝   Ś  s   r˝   c                   @   s   e Zd Zdd ZdS )ÚRandEnumSShortc                 C   s   t  | ddĄ d S rą   rť   r/   r+   r+   r,   r-   ­  s    zRandEnumSShort.__init__NrŠ   r+   r+   r+   r,   rž   Ź  s   rž   c                   @   s   e Zd Zdd ZdS )ÚRandEnumIntc                 C   s   t  | ddĄ d S rł   rť   r/   r+   r+   r,   r-   ł  s    zRandEnumInt.__init__NrŠ   r+   r+   r+   r,   rż   ˛  s   rż   c                   @   s   e Zd Zdd ZdS )ÚRandEnumSIntc                 C   s   t  | ddĄ d S rľ   rť   r/   r+   r+   r,   r-   š  s    zRandEnumSInt.__init__NrŠ   r+   r+   r+   r,   rŔ   ¸  s   rŔ   c                   @   s   e Zd Zdd ZdS )ÚRandEnumLongc                 C   s   t  | ddĄ d S rˇ   rť   r/   r+   r+   r,   r-   ż  s    zRandEnumLong.__init__NrŠ   r+   r+   r+   r,   rÁ   ž  s   rÁ   c                   @   s   e Zd Zdd ZdS )ÚRandEnumSLongc                 C   s   t  | ddĄ d S rš   rť   r/   r+   r+   r,   r-   Ĺ  s    zRandEnumSLong.__init__NrŠ   r+   r+   r+   r,   rÂ   Ä  s   rÂ   c                   @   s*   e Zd ZdZd	ddZdd Zdd ZdS )
ÚRandEnumKeysz*Picks a random value from dict keys list. Nc                 C   s(   t || _t | dt| jd |Ą d S )Nr   r   )ÚlistÚenumrĄ   r-   r]   )r(   rĹ   r*   r+   r+   r,   r-   Í  s    
zRandEnumKeys.__init__c                 C   s"   d| j  }| jr|d| j 7 }|S )Nzenum=%rr¤   )rĹ   r˘   r   r+   r+   r,   rF   Ň  s    
zRandEnumKeys._command_argsc                 C   s   | j t| j S r.   )rĹ   r9   rŁ   r/   r+   r+   r,   rH   Ú  s    zRandEnumKeys._fix)NŠr:   r;   r<   r=   r-   rF   rH   r+   r+   r+   r,   rĂ   Ę  s   
rĂ   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )Ú
RandChoicec                 G   s   |st dt|| _d S )Nz$RandChoice needs at least one choice)Ú	TypeErrorrÄ   Ú_choice)r(   Úargsr+   r+   r,   r-   ŕ  s    zRandChoice.__init__c                 C   s   d  | jĄS )Nú, )ÚjoinrÉ   r/   r+   r+   r,   rF   ć  s    zRandChoice._command_argsc                 C   s   t  | jĄS r.   )r   ÚchoicerÉ   r/   r+   r+   r,   rH   ę  s    zRandChoice._fixNr   r+   r+   r+   r,   rÇ   ß  s   rÇ   Ú_Sc                   @   s$   e Zd Zdd Zdd Zdd ZdS )Ú_RandStringc                 C   s   t |  Ą S r.   )r   rH   r/   r+   r+   r,   rZ   ó  s    z_RandString.__str__c                 C   s   t |  Ą S r.   r[   r/   r+   r+   r,   r\   ÷  s    z_RandString.__bytes__c                 C   s   |   Ą | S r.   ri   )r(   r    r+   r+   r,   rn   ű  s    z_RandString.__mul__N)r:   r;   r<   rZ   r\   rn   r+   r+   r+   r,   rĎ   ň  s   rĎ   c                   @   sB   e Zd Zejej ej  dĄZdefddZ	dd Z
dd ZdS )	Ú
RandStringzutf-8Nc                 C   s    |d u rt d}|| _|| _d S )Nç{ŽGáz?)r   ÚsizeÚchars)r(   rŇ   rÓ   r+   r+   r,   r-     s    zRandString.__init__c                 C   sh   d}t | jtr<| jjdks(| jjdkrJ|d| j Ą  7 }n|d| j 7 }| j| jkrd|d| j 7 }|S )NrE   rŃ   r   úsize=%rz
, chars=%r)rI   rŇ   r@   r   r   rG   rÓ   Ú_DEFAULT_CHARSr   r+   r+   r,   rF     s    zRandString._command_argsc                 C   sB   d}t t| jD ]*}t | jĄ}|t|tr2|nt|7 }q|S )Nó    )	r6   re   rŇ   r   rÍ   rÓ   rI   rY   r   )r(   Úsr4   Zrdm_chrr+   r+   r,   rH     s
    zRandString._fix)r:   r;   r<   ÚstringÚascii_uppercaseÚascii_lowercaseÚdigitsÚencoderŐ   r-   rF   rH   r+   r+   r+   r,   rĐ      s   
˙˙rĐ   c                       s&   e Zd Zd fdd	Zdd Z  ZS )r   Nc                    s,   t t| j|d dd tdD Ąd d S )NrÖ   c                 s   s   | ]}t |V  qd S r.   )r   )r3   Úcr+   r+   r,   Ú	<genexpr>&  rÖ   z#RandBin.__init__.<locals>.<genexpr>r   )rŇ   rÓ   )rz   r   r-   rĚ   r6   )r(   rŇ   r{   r+   r,   r-   "  s    
ţzRandBin.__init__c                 C   sL   t | jtsd| j S t | jtr>| jjdkr>| jjdkr>dS d| j Ą  S )NrÔ   rŃ   r   rE   )rI   rŇ   r@   r   r   r   rG   r/   r+   r+   r,   rF   )  s    

˙
˙zRandBin._command_args)N)r:   r;   r<   r-   rF   r   r+   r+   r{   r,   r   !  s   r   c                       s0   e Zd Z fddZ fddZdd Z  ZS )ÚRandTermStringc                    s    t || _tt| j|d d S )N)rŇ   )r   Útermrz   rß   r-   )r(   rŇ   rŕ   r{   r+   r,   r-   6  s    
zRandTermString.__init__c                    s   d  tt|  Ą d| j fĄS )NrË   zterm=%r)rĚ   rz   rß   rF   rŕ   r/   r{   r+   r,   rF   ;  s    ˙zRandTermString._command_argsc                 C   s   t  | Ą| j S r.   )r   rH   rŕ   r/   r+   r+   r,   rH   @  s    zRandTermString._fixŠr:   r;   r<   r-   rF   rH   r   r+   r+   r{   r,   rß   5  s   rß   c                       s4   e Zd ZdZef fdd	Zdd Zdd Z  ZS )ÚRandIPz	0.0.0.0/0c                    s   t t|  Ą  t|| _d S r.   )rz   râ   r-   r   Úip)r(   Z
iptemplater{   r+   r,   r-   H  s    zRandIP.__init__c                 C   s*   d| j j| j jf }|| jkr"dS d| S )Nz%s/%srE   ziptemplate=%r)ră   ÚnetÚmaskÚ_DEFAULT_IPTEMPLATE)r(   Úrepr+   r+   r,   rF   M  s    
zRandIP._command_argsc                 C   s
   | j  Ą S r.   )ră   rÍ   r/   r+   r+   r,   rH   T  s    zRandIP._fix)r:   r;   r<   rć   r-   rF   rH   r   r+   r+   r{   r,   râ   E  s   râ   c                       s.   e Zd Zd fdd	Zdd Zdd Z  ZS )	ÚRandMACÚ*c                    sŞ   t t|  Ą  || _|d7 }| dĄ}d| _tdD ]p}d}|| dkrPt }nDd|| v r||  dĄ\}}tt	|dt	|d}nt	|| d}|  j|f7  _q4d S )	Nz
:*:*:*:*:*ú:r+   é   r   ré   ú-é   )
rz   rč   r-   Ú	_templateÚsplitÚmacr6   rĽ   rv   re   )r(   rî   Útemplater'   ÚvrM   rN   r{   r+   r,   r-   Z  s    
zRandMAC.__init__c                 C   s   | j dkrdS d| j  S )Nré   rE   útemplate=%r)rî   r/   r+   r+   r,   rF   l  s    
zRandMAC._command_argsc                 C   s
   d| j  S )Nz%02x:%02x:%02x:%02x:%02x:%02x)rđ   r/   r+   r+   r,   rH   r  s    zRandMAC._fix)ré   rá   r+   r+   r{   r,   rč   Y  s   rč   c                       s.   e Zd Zd fdd	Zdd Zdd Z  ZS )	ÚRandIP6ú**c                    sŕ   t t|  Ą  || _g | _| j dĄD ]}|r6|dkrD| j |Ą q&d|v r\| dĄ\}}n|dkrnd }}n| }}|s~d}|sd}||kr˘| j t|dĄ q&| j tt|dt|dĄ q&d| jv | _	| j 
dĄ| _d S )	Nrę   rő   rě   ré   rE   Ú0Zffffrí   )rz   rô   r-   ÚtmplÚsprď   Úappendre   rv   ÚvariableÚcountÚmulti)r(   Zip6templaterň   ÚaÚbr{   r+   r,   r-   x  s*    
 zRandIP6.__init__c                 C   s   | j dkrdS d| j  S )Nrő   rE   zip6template=%r)r÷   r/   r+   r+   r,   rF     s    
zRandIP6._command_argsc              	   C   s*  | j }g }t| jD ]Ü\}}|dkr|d8 }dt| j| d  t| | }d| jv r`|d7 }|sj| jrvt d|Ą}t|D ]}| dt ddĄ Ą q~qt	|t
rş| dt| Ą q|dkrÎ| dĄ q|sŢ| dĄ q| dt| Ą qt|d	kr
| dĄ |d
 dkr d|d
< d |ĄS )Nrő   r   é   rE   r   z%04xrŻ   rö   é	   é˙˙˙˙rę   )rü   Ú	enumeraterř   r]   rú   r   r1   r6   rů   rI   rv   re   ÚremoverĚ   )r(   Znbmră   r'   r    ZremainÚjr+   r+   r,   rH     s0    "



zRandIP6._fix)rő   rá   r+   r+   r{   r,   rô   w  s   rô   c                       sD   e Zd Zdededf fdd	Zdd Zdd	 Zd
d Z  ZS )ÚRandOIDNçš?rŃ   c                    sH   t t|  Ą  || _d | _|d ur8dd | dĄD | _|| _|| _d S )Nc                 S   s,   g | ]$}d |v r$t tt| d Ąn|qS )rě   )ÚtupleÚmapre   rď   Šr3   rM   r+   r+   r,   r5   ˝  s   ˙z$RandOID.__init__.<locals>.<listcomp>Ú.)rz   r  r-   Úori_fmtÚfmtrď   ÚdepthÚidnum)r(   r  r  r  r{   r+   r,   r-   ˇ  s    ţzRandOID.__init__c                 C   sĐ   g }| j r| d| j Ą t| jts8| d| j Ą n8t| jtr\| jjdks\| jjdkrp| d| j 	Ą  Ą t| j
ts| d| j
 Ą n8t| j
tr˛| j
jdks˛| j
jdkrĆ| d| j
 	Ą  Ą d	 |ĄS )
Nzfmt=%rzdepth=%rr  r   zdepth=%szidnum=%rrŃ   zidnum=%srË   )r  rů   r  rI   r  r@   r   r   r   rG   r  rĚ   r   r+   r+   r,   rF   Ä  s(    
˙
˙
˙
˙zRandOID._command_argsc                 C   s,   | j d u rd| jj S d| jj| j f S d S )NrA   z	<%s [%s]>)r  rB   r:   r/   r+   r+   r,   rC   Ř  s    
zRandOID.__repr__c                    s¸    j d u r,d  fddtd j D ĄS g } j D ]r}|dkrT| t jĄ q6|dkr~| fddtd j D 7 }q6t|tr| tt	j
| Ą q6| |Ą q6d |ĄS d S )	Nr
  c                 3   s   | ]}t  jV  qd S r.   ŠrY   r  r2   r/   r+   r,   rŢ   â  rÖ   zRandOID._fix.<locals>.<genexpr>r   ré   rő   c                    s   g | ]}t  jqS r+   r  Šr3   r'   r/   r+   r,   r5   é  rÖ   z RandOID._fix.<locals>.<listcomp>)r  rĚ   r6   r  rů   rY   r  rI   r  r   r|   )r(   Úoidr'   r+   r/   r,   rH   ß  s    
"
"
zRandOID._fix)	r:   r;   r<   r   r-   rF   rC   rH   r   r+   r+   r{   r,   r  ś  s   r  c                   @   sh   e Zd ZdddZdd Zdddd	d
ddddddddddZedd Zedd Zdd Z	dd Z
dS )Ú
RandRegExpç333333Ó?c                 C   s   || _ || _d S r.   ŠÚ_regexpÚ_lambda)r(   ÚregexpZlambda_r+   r+   r,   r-   ň  s    zRandRegExp.__init__c                 C   s&   d| j  }| jdkr"|d| j 7 }|S )Nz	regexp=%rr  z, lambda_=%rr  r   r+   r+   r,   rF   ÷  s    

zRandRegExp._command_argsz[a-zA-Z0-9]z[a-zA-Z]z[ -]z[ 	]z[ -]z[0-9]z[!-~]z[a-z]z[ -~]z&[!"\#$%&'()*+,\-./:;<=>?@\[\\\]^_{|}~]z[ 	
]z[A-Z]z[A-Za-z0-9_]z[A-Fa-f0-9])z	[:alnum:]z	[:alpha:]z	[:ascii:]z	[:blank:]z	[:cntrl:]z	[:digit:]z	[:graph:]z	[:lower:]z	[:print:]z	[:punct:]z	[:space:]z	[:upper:]z[:word:]z
[:xdigit:]c                    sđ   d}| o| d dk}|   dĄ}|dk r(qÄ|dks@|t| d krdd}|rV| d d } qÂ| dd  } q| |d  }| |d  }d tttt|t|d Ą}| d |d  | | |d d   } q||   |rěd  fddtd	D Ą  S )
NrE   r   ú^rě   r   r  c                 3   s"   | ]}t | vrt |V  qd S r.   ŠÚchrr	  ŠÚresr+   r,   rŢ   %  rÖ   z+RandRegExp.choice_expand.<locals>.<genexpr>r   )Úfindr]   rĚ   r  r  r6   Úord)r×   ÚmÚinvertÚpÚc1Úc2Úrngr+   r  r,   Úchoice_expand  s$    
"&zRandRegExp.choice_expandc                 C   sR  d}d}| D ]>}t |tr|dkrH|d }|t |dd  | |Ą7 }t |dd  |Ą}t|D ]\}}||u rd|||< qd||7 }d}qt |tr|\}}	|dkrş|||	d  7 }n^|dkrČ|	}nP|dkrL|dkrţt |	Ą}
|t |
dd  |Ą7 }n|t |g| |Ą7 }d}q|dkr@|t |g| |Ą7 }d}q|t|7 }q|S )NrE   r   ÚciteÚrepeatrÍ   )	rI   rÄ   r  Ú	stack_fixr  r  r   rÍ   rY   )ÚlstÚindexÚrÚmulÚeÚfr'   ÚidxÚkindÚvalrÝ   r+   r+   r,   r(  (  s<    





zRandRegExp.stack_fixc                 C   s  d g}g }|}d}| j }| j Ą D ]\}}| ||Ą}q"t|}d}	||k rz|| }
|d7 }|
dkr||g}|d  |Ą qD|
dkrČ|d }|d }t|ts˛d|gf}||d< n|d  |Ą |g}qD|
dkr
|d d }t|trö|d  |Ą | |Ą |d }qD|
d	ks|
d
kr8|g}|d  |Ą d}	qD|
dkr~|d }t 	d 
| Ą dd  ĄĄ}| tt| Ą d}	qD|
dkr6|d }d 
| Ą dd  Ą}| Ą }d|vrÔ| |g|gt|  Ą n\| dĄ\}}|sěd}|rtt|t|}nt| jt|d}| d|fĄ | |Ą d}	qD|
dkr|| }
|
dkrd| tddĄ n|
dv r| dt|
d Ą |d7 }qD|	s| |
Ą qD|
dkrŘ| Ą }| |g|gtt | jĄd   Ą qD|
dkr| Ą }| |g|gtt | jĄ  Ą qD|
dkr0t ddĄrx| Ą  qD|
dkrX| tdd td D  Ą qD|
d!ksx|
d"krnqD| |
Ą qDt |dd  |ĄS )#Nr   Tr   ú(ú|r  rÍ   ú)ú[Ú{Fú]rE   Ú}ú,rö   )r   r'  ú\r×   ú ú	Ú
0123456789r&  é0   ú+ré   ú?r
  c                 S   s   g | ]}t |qS r+   r  r	  r+   r+   r,   r5     rÖ   z#RandRegExp._fix.<locals>.<listcomp>r   ú$r  )r  Úspecial_setsÚitemsÚreplacer]   rů   rI   r  r  r%  rĚ   ÚpoprÇ   rÄ   re   rď   rv   r   r  r  r   r    r1   r6   r(  )r(   Ústackr*  Úcurrentr'   r  Úkrň   ÚlnZinterprÝ   r!  ÚchrÍ   Únumr-  Znum_minZnum_maxr    r+   r+   r,   rH   O  s    
















(
$


zRandRegExp._fixc                 C   s   d| j j| jf S )Nz	<%s [%r]>)rB   r:   r  r/   r+   r+   r,   rC   Ś  s    zRandRegExp.__repr__N)r  )r:   r;   r<   r-   rF   rB  Ústaticmethodr%  r(  rH   rC   r+   r+   r+   r,   r  ń  s.   
ň

&Wr  c                   @   s   e Zd ZdS )ÚRandSingularityNrb   r+   r+   r+   r,   rM  Ť  s   rM  c                       s4   e Zd Zedd Z fddZ fddZ  ZS )ÚRandSingNumc                    sT   d | dkrd} | dk r"|  } d t t | Ąt dĄ d } fddt|D S )Nr   r   r  r   c                    s   h | ]} d |  qS )r   r+   r  ŠÚsignr+   r,   Ú	<setcomp>ş  rÖ   z0RandSingNum.make_power_of_two.<locals>.<setcomp>)re   ÚmathÚlogr6   )ÚendZend_nr+   rO  r,   Úmake_power_of_two°  s    zRandSingNum.make_power_of_twoc                    sś   || _ || _d||t|| d h}||  |ĄO }||  |ĄO }| Ą D ] }| |d Ą | |d Ą qH| Ą D ]$}||  kr|ksrn | |Ą qrtt| j	|  | j
 Ą  d S )Nr   r   r   )Ú_mnÚ_mxre   rU  r_   Úaddr  rz   rN  r-   rÉ   Úsort)r(   ZmnZmxZsingr'   r{   r+   r,   r-   ź  s    zRandSingNum.__init__c                    s*   | j jdkrd| j| jf S tt|  Ą S )NrN  zmn=%r, mx=%r)rB   r:   rV  rW  rz   rN  rF   r/   r{   r+   r,   rF   Ě  s    zRandSingNum._command_args)r:   r;   r<   rL  rU  r-   rF   r   r+   r+   r{   r,   rN  Ż  s   
rN  c                   @   s   e Zd Zdd ZdS )ÚRandSingBytec                 C   s   t  | ddĄ d S rŚ   ŠrN  r-   r/   r+   r+   r,   r-   Ô  s    zRandSingByte.__init__NrŠ   r+   r+   r+   r,   rZ  Ó  s   rZ  c                   @   s   e Zd Zdd ZdS )ÚRandSingSBytec                 C   s   t  | ddĄ d S rŤ   r[  r/   r+   r+   r,   r-   Ú  s    zRandSingSByte.__init__NrŠ   r+   r+   r+   r,   r\  Ů  s   r\  c                   @   s   e Zd Zdd ZdS )ÚRandSingShortc                 C   s   t  | ddĄ d S rŽ   r[  r/   r+   r+   r,   r-   ŕ  s    zRandSingShort.__init__NrŠ   r+   r+   r+   r,   r]  ß  s   r]  c                   @   s   e Zd Zdd ZdS )ÚRandSingSShortc                 C   s   t  | ddĄ d S rą   r[  r/   r+   r+   r,   r-   ć  s    zRandSingSShort.__init__NrŠ   r+   r+   r+   r,   r^  ĺ  s   r^  c                   @   s   e Zd Zdd ZdS )ÚRandSingIntc                 C   s   t  | ddĄ d S rł   r[  r/   r+   r+   r,   r-   ě  s    zRandSingInt.__init__NrŠ   r+   r+   r+   r,   r_  ë  s   r_  c                   @   s   e Zd Zdd ZdS )ÚRandSingSIntc                 C   s   t  | ddĄ d S rľ   r[  r/   r+   r+   r,   r-   ň  s    zRandSingSInt.__init__NrŠ   r+   r+   r+   r,   r`  ń  s   r`  c                   @   s   e Zd Zdd ZdS )ÚRandSingLongc                 C   s   t  | ddĄ d S rˇ   r[  r/   r+   r+   r,   r-   ř  s    zRandSingLong.__init__NrŠ   r+   r+   r+   r,   ra  ÷  s   ra  c                   @   s   e Zd Zdd ZdS )ÚRandSingSLongc                 C   s   t  | ddĄ d S rš   r[  r/   r+   r+   r,   r-   ţ  s    zRandSingSLong.__init__NrŠ   r+   r+   r+   r,   rb  ý  s   rb  c                       s4   e Zd Z fddZdd Zdd Zdd Z  ZS )	ÚRandSingStringc                    s   g d˘}t t| j|  d S )N)6rE   z%xz%%z%sz%iz%nz%x%x%x%x%x%x%x%x%xz*%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%sú%z%%%A   AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAs                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   s   ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙s   s   a                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   a   \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\a   ((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((a   ../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../a   ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////a   ${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}${HOME}z
 or 1=1 --z' or 1=1 --z" or 1=1 --z
 or 1=1; #z' or 1=1; #z" or 1=1; #z;reboot;z	$(reboot)z`reboot`zindex.php%00ó    z%00r:  z=../../../../../../../../../../../../../../../../../etc/passwdzž%2e%2e%2f%2e%2e%2f%2e%2e%2f%2e%2e%2f%2e%2e%2f%2e%2e%2f%2e%2e%2f%2e%2e%2f%2e%2e%2f%2e%2e%2f%2e%2e%2f%2e%2e%2f%2e%2e%2f%2e%2e%2f%2e%2e%2f%2e%2e%2f%2e%2e%2f%2e%2e%2f%2e%2e%2f%2e%2e%2fetc/passwda4  %252e%252e%252f%252e%252e%252f%252e%252e%252f%252e%252e%252f%252e%252e%252f%252e%252e%252f%252e%252e%252f%252e%252e%252f%252e%252e%252f%252e%252e%252f%252e%252e%252f%252e%252e%252f%252e%252e%252f%252e%252e%252f%252e%252e%252f%252e%252e%252f%252e%252e%252f%252e%252e%252f%252e%252e%252f%252e%252e%252fboot.inizŞ..%c0%af..%c0%af..%c0%af..%c0%af..%c0%af..%c0%af..%c0%af..%c0%af..%c0%af..%c0%af..%c0%af..%c0%af..%c0%af..%c0%af..%c0%af..%c0%af..%c0%af..%c0%af..%c0%af..%c0%afetc/passwdz¨..%c0%af..%c0%af..%c0%af..%c0%af..%c0%af..%c0%af..%c0%af..%c0%af..%c0%af..%c0%af..%c0%af..%c0%af..%c0%af..%c0%af..%c0%af..%c0%af..%c0%af..%c0%af..%c0%af..%c0%afboot.iniz//etc/passwdz;..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\boot.inizAUX:zCLOCK$zCOM:úCON:zLPT:zLST:zNUL:rf  z
C:\CON\CONzC:\boot.iniz\\myserver\sharezfoo.exe:zfoo.exe\)rz   rc  r-   )r(   Zchoices_listr{   r+   r,   r-     s    6zRandSingString.__init__c                 C   s   dS rD   r+   r/   r+   r+   r,   rF   >  s    zRandSingString._command_argsc                 C   s   t |  Ą S r.   rX   r/   r+   r+   r,   rZ   B  s    zRandSingString.__str__c                 C   s   t |  Ą S r.   r[   r/   r+   r+   r,   r\   F  s    zRandSingString.__bytes__)r:   r;   r<   r-   rF   rZ   r\   r   r+   r+   r{   r,   rc    s   :rc  c                   @   s$   e Zd Zdd Zdd Zdd ZdS )ÚRandPoolc                 G   sL   || _ g }|D ]2}d}t|tr(|\}}|ttt |g| 7 }q|| _dS )zIEach parameter is a volatile object or a couple (volatile object, weight)r   N)Ú_argsrI   r  r   r@   r   Ú_pool)r(   rĘ   Úpoolr!  Úwr+   r+   r,   r-   L  s    
zRandPool.__init__c                 C   sR   g }| j D ]<}t|tr8| d|d  Ą |d f Ą q
| | Ą Ą q
d |ĄS )Nz(%s, %r)r   r   rË   )rh  rI   r  rů   rG   rĚ   )r(   r   r!  r+   r+   r,   rF   X  s    

 zRandPool._command_argsc                 C   s   t  | jĄ}| Ą S r.   )r   rÍ   ri  rH   )r(   r+  r+   r+   r,   rH   b  s    zRandPool._fixNr   r+   r+   r+   r,   rg  K  s   
rg  c                	   @   s`   e Zd ZdZdZe d e dĄe dĄe dĄĄejĄZ	g d˘Z
dd	d
Zdd Zdd ZdS )ÚRandUUIDaJ  Generates a random UUID.

    By default, this generates a RFC 4122 version 4 UUID (totally random).

    See Python's ``uuid`` module documentation for more information.

    Args:
        template (optional): A template to build the UUID from. Not valid with
                             any other option.
        node (optional): A 48-bit Host ID. Only valid for version 1 (where it
                         is optional).
        clock_seq (optional): An integer of up to 14-bits for the sequence
                              number. Only valid for version 1 (where it is
                              optional).
        namespace: A namespace identifier, which is also a UUID. Required for
                   versions 3 and 5, must be omitted otherwise.
        name: string, required for versions 3 and 5, must be omitted otherwise.
        version: Version of UUID to use (1, 3, 4 or 5). If omitted, attempts to
                 guess which version to generate, defaulting to version 4
                 (totally random).

    Raises:
        ValueError: on invalid constructor arguments
    z4([0-9a-f]{{{0}}}|\*|[0-9a-f]{{{0}}}:[0-9a-f]{{{0}}})z+^{0}-?{1}-?{1}-?{2}{2}-?{2}{2}{2}{2}{2}{2}$r˙   r   r   )r   r   r   é   Nc                 C   sô  || _ || _d | _d | _d | _d | _d | _d | _|r|sJ|sJ|sJ|sJ|rRtdt	j
 |Ą}|rl| Ą }ntdtgtgd  tgd  }g }	t|D ]f\}
}|dkrź|	 ||
  Ą qd|v rđ| dĄ\}}|	 tt|dt|dĄ q|	 t|dĄ qt|	| _nâ|r2|t	jvr*tdn|| _n.|s>|rFd	| _n|rZ|rZd
| _nd| _| jd	kr|sx|rtd|| _|| _nb| jdv rÄ|sŚ|rśtd | jĄ|| _|| _n,| jdkrđ|sč|sč|sč|rđtdd S )Nz6UUID template must be the only parameter, if specifiedzUUID template is invalidr   r˙   ré   rę   rí   zversion is not supportedr   rm  r   z1namespace and name may not be used with version 1)r   rm  z2node and clock_seq may not be used with version {}znode, clock_seq, node and clock_seq may not be used with version 4. If you did not specify version, you need to specify it explicitly.)rî   Ú_ori_versionÚuuid_templateÚ	clock_seqÚ	namespaceÚnameÚnodeÚversionÚ
ValueErrorrl  Ú_REGÚmatchÚgroupsr˛   r­   rĽ   r  rů   rď   rv   re   r  ÚVERSIONSÚformat)r(   rń   rs  rp  rq  rr  rt  ÚtmpZrnd_fro  r'   ÚtZminiZmaxir+   r+   r,   r-     sf    	
˙
˙zRandUUID.__init__c                 C   s   g }| j r| d| j  Ą | jr0| d| j Ą | jrF| d| j Ą | jr\| d| j Ą | jrr| d| j Ą | jr| d| j Ą d |ĄS )Nró   znode=%rzclock_seq=%rznamespace=%rzname=%rz
version=%rrË   )rî   rů   rs  rp  rq  rr  rn  rĚ   r   r+   r+   r,   rF   Ý  s    zRandUUID._command_argsc                 C   sŞ   | j rt d| j  ĄS | jdkr0t | j| jĄS | jdkr^| jrF| jsNt	dt 
| j| jĄS | jdkrpt Ą S | jdkr| jr| jst	dt | j| jĄS t	dd S )Nz,%08x%04x%04x%02x%02x%02x%02x%02x%02x%02x%02xr   r   zMissing namespace or namer   rm  zUnhandled version)ro  ÚuuidÚUUIDrt  Úuuid1rs  rp  rq  rr  ru  Úuuid3Úuuid4Úuuid5r/   r+   r+   r,   rH   î  s"    ˙



zRandUUID._fix)NNNNNN)r:   r;   r<   r=   Z_BASEÚreÚcompilerz  ÚIrv  ry  r-   rF   rH   r+   r+   r+   r,   rl  h  s$   ˙ü      ú
Qrl  c                   @   s   e Zd ZdddZdd ZdS )Ú	_AutoTimeNc                 C   s>   || _ || _|d ur|| _n|d u r,d| _nt Ą | | _d S )Ng        )Ú_baseÚ	_ori_diffÚdiffÚtime)r(   r   r  r+   r+   r,   r-     s    z_AutoTime.__init__c                 C   s:   g }| j r| d| j  Ą | jr0| d| j Ą d |ĄS )Nzbase=%rzdiff=%rrË   )r  rů   r  rĚ   r   r+   r+   r,   rF     s    z_AutoTime._command_args)NN)r:   r;   r<   r-   rF   r+   r+   r+   r,   r    s   
r  c                   @   s   e Zd Zdd ZdS )ÚAutoTimec                 C   s   t   Ą | j S r.   )r  r  r/   r+   r+   r,   rH     s    zAutoTime._fixNr   r+   r+   r+   r,   r    s   r  c                   @   s   e Zd Zdd ZdS )ÚIntAutoTimec                 C   s   t t Ą | j S r.   )re   r  r  r/   r+   r+   r,   rH   %  s    zIntAutoTime._fixNr   r+   r+   r+   r,   r  $  s   r  c                       s&   e Zd Zd fdd	Zdd Z  ZS )ÚZuluTimer   c                    s   t t| j|d d S ŠN)r  )rz   r  r-   Šr(   r  r{   r+   r,   r-   +  s    zZuluTime.__init__c                 C   s   t  dt  t   Ą | j ĄĄS )Nz%y%m%d%H%M%SZŠr  ÚstrftimeÚgmtimer  r/   r+   r+   r,   rH   /  s    ˙zZuluTime._fix)r   Šr:   r;   r<   r-   rH   r   r+   r+   r{   r,   r  *  s   r  c                       s&   e Zd Zd fdd	Zdd Z  ZS )ÚGeneralizedTimer   c                    s   t t| j|d d S r  )rz   r  r-   r  r{   r+   r,   r-   6  s    zGeneralizedTime.__init__c                 C   s   t  dt  t   Ą | j ĄĄS )Nz%Y%m%d%H%M%SZr  r/   r+   r+   r,   rH   :  s    ˙zGeneralizedTime._fix)r   r  r+   r+   r{   r,   r  5  s   r  c                   @   s(   e Zd ZdZdd Zdd Zdd ZdS )	ÚDelayedEvalz. Example of usage: DelayedEval("time.time()") c                 C   s
   || _ d S r.   ŠÚexpr)r(   r  r+   r+   r,   r-   C  s    zDelayedEval.__init__c                 C   s
   d| j  S )Nzexpr=%rr  r/   r+   r+   r,   rF   G  s    zDelayedEval._command_argsc                 C   s
   t | jS r.   )Úevalr  r/   r+   r+   r,   rH   K  s    zDelayedEval._fixNrĆ   r+   r+   r+   r,   r  @  s   r  c                   @   s&   e Zd ZdddZdd Zdd	 Zd
S )ÚIncrementalValuer   r   r  c                 C   s   | | _ | _|| _|| _d S r.   )Ústartr1  ÚstepÚrestart)r(   r  r  r  r+   r+   r,   r-   Q  s    zIncrementalValue.__init__c                 C   sX   g }| j r| d| j  Ą | jdkr4| d| j Ą | jdkrN| d| j Ą d |ĄS )Nzstart=%rr   zstep=%rr  z
restart=%rrË   )r  rů   r  r  rĚ   r   r+   r+   r,   rF   W  s    

zIncrementalValue._command_argsc                 C   s0   | j }| j | jkr| j| _ n|  j | j7  _ |S r.   )r1  r  r  r  )r(   rň   r+   r+   r,   rH   b  s
    
zIncrementalValue._fixN)r   r   r  r   r+   r+   r+   r,   r  P  s   
r  c                   @   s&   e Zd Zd	ddZdd Zdd ZdS )
ÚCorruptedBytesrŃ   Nc                 C   s   || _ || _|| _d S r.   )r×   r!  r    )r(   r×   r!  r    r+   r+   r,   r-   m  s    zCorruptedBytes.__init__c                 C   sN   g }|  d| j Ą | jdkr.|  d| j Ą | jrD|  d| j Ą d |ĄS )Nzs=%rrŃ   zp=%rzn=%rrË   )rů   r×   r!  r    rĚ   r   r+   r+   r,   rF   s  s    
zCorruptedBytes._command_argsc                 C   s   t | j| j| jS r.   )r   r×   r!  r    r/   r+   r+   r,   rH   }  s    zCorruptedBytes._fix)rŃ   Nr   r+   r+   r+   r,   r  l  s   

r  c                   @   s   e Zd Zdd ZdS )ÚCorruptedBitsc                 C   s   t | j| j| jS r.   )r   r×   r!  r    r/   r+   r+   r,   rH     s    zCorruptedBits._fixNr   r+   r+   r+   r,   r    s   r  )br=   Ú
__future__r   r_   r   r  rR  r  r}  r   rŘ   Zscapy.base_classesr   Zscapy.compatr   r   r   Zscapy.utilsr   r   r	   r
   r   r   r   r   r   r   r   r   r   r?   r@   ra   re   r   rc   rd   rv   r   r   r   r   r   rĄ   rĽ   rŞ   r­   r°   r˛   r´   rś   r¸   rş   rź   r˝   rž   rż   rŔ   rÁ   rÂ   rĂ   rÇ   r   rY   rÎ   rĎ   rĐ   r   rß   râ   rč   rô   r  r  rM  rN  rZ  r\  r]  r^  r_  r`  ra  rb  rc  rg  r~  rl  r  r  r  r  r  r  r  r  r  r+   r+   r+   r,   Ú<module>   s    088>-	!?; ;$H ˙