Ë
    Ã?Æiî  ã                  ó    — d Z ddlmZ ddl­ ddlmZmZ dZdd„Zdd„Z	dd„Z
dd	„Zddd
„Zddd„Zdd„Z	 	 	 d	 	 	 	 	 	 	 	 	 dd„Zdd„Zdd„Zy)ab  MEID (Mobile Equipment Identifier).

The Mobile Equipment Identifier is used to identify a physical piece of
CDMA mobile station equipment.

>>> validate('AF 01 23 45 0A BC DE C')
'AF0123450ABCDE'
>>> validate('29360 87365 0070 3710 0')
'AF0123450ABCDE'
>>> validate('29360 87365 0070 3710 0', strip_check_digit=False)
'AF0123450ABCDEC'
>>> validate('29360 87365 0070 3710 1')
Traceback (most recent call last):
    ...
InvalidChecksum: ...
>>> format('af0123450abcDEC', add_check_digit=True)
'AF 01 23 45 0A BC DE C'
>>> format('af0123450abcDEC', format='dec', add_check_digit=True)
'29360 87365 0070 3710 0'
é    )Úannotations)Ú*)ÚcleanÚisdigitsÚ0123456789ABCDEFc                óR   — t        | d«      j                  «       j                  «       S )zWRemove any grouping information from the number and removes surrounding
    whitespace.z -)r   ÚstripÚupper©Únumbers    úR/var/www/html/myprovider/mon_projet_qr/lib/python3.12/site-packages/stdnum/meid.pyÚ_cleanupr   2   s#   € ô �˜Ó×$Ñ$Ó&×,Ñ,Ó.Ð.ó    c                ó&   — | D ]  }|t         vsŒ y y)NFT)Ú_hex_alphabet)r   Úxs     r   Ú_ishexr   8   s!   € Øò ˆØ”MÒ!Ùðð r   c                óÜ   — t        | «      } t        | «      dv rt        | «      s
t        «       ‚| dd | dd  fS t        | «      dv rt	        | «      s
t        «       ‚| dd | dd  fS t        «       ‚)N)é   é   r   r   )é   é   r   )r   Úlenr   ÚInvalidFormatr   ÚInvalidLengthr   s    r   Ú_parser   ?   sy   € Ü�fÓ€FÜ
ˆ6ƒ{�hÑä�fŒ~Ü“/Ð!Ø�a˜ˆ|˜V B C˜[Ð(Ð(Ü	ˆV‹˜Ñ	 ä˜ÔÜ“/Ð!Ø�a˜ˆ|˜V B C˜[Ð(Ð(ä‹oÐr   c                ót   — ddl m} t        | «      r|j                  | «      S |j                  | t        ¬«      S )z_Calculate the check digit for the number. The number should not
    already have a check digit.r   ©Úluhn©Úalphabet)Ústdnumr   r   Úcalc_check_digitr   )r   r   s     r   r#   r#   O   s6   € õ
 Ü�ÔØ×$Ñ$ VÓ,Ð,à×$Ñ$ V´mÐ$ÓDÐDr   c                ó¤   — t        | «      \  } }|rd}t        | «      dk(  r,dt        | dd «      t        | dd «      fz  } |rt        | «      }| |z   S )a  Convert the MEID number to the minimal (hexadecimal) representation.
    This strips grouping information, removes surrounding whitespace and
    converts to hexadecimal if needed. If the check digit is to be preserved
    and conversion is done a new check digit is recalculated.Ú r   ú%08X%06Xr   é
   )r   r   Úintr#   )r   Ústrip_check_digitÚcds      r   Úcompactr+   [   sa   € ô ˜“�J€FˆBáØˆä
ˆ6ƒ{�bÒØœs 6¨!¨B <Ó0´#°f¸RÀ°mÓ2DÐEÑEˆÙÜ! &Ó)ˆBà�B‰;Ðr   c                óÆ  — t        | «      \  } }ddlm} t        | «      dk(  ru|r|j	                  | |z   «       t        | dd «      }t        | dd «      }|j                  «       dkD  s|j                  «       dkD  r
t        «       ‚d||fz  } t        | «      }nBt        | «      rddlm
} |j	                  | |z   «       n|r|j	                  | |z   t        ¬	«       |rd
}| |z   S )z Check if the number is a valid MEID number. This converts the
    representation format of the number (if it is decimal it is not converted
    to hexadecimal).r   r   r   r'   é    é   r&   )Úimeir    r%   )r   r"   r   r   Úvalidater(   Ú
bit_lengthÚInvalidComponentr#   r   r/   r   )r   r)   r*   r   Úmanufacturer_codeÚ
serial_numr/   s          r   r0   r0   n   sÞ   € ô
 ˜“�J€FˆBÝÜ
ˆ6ƒ{�bÒáØ�M‰M˜& 2™+Ô&ä  q¨ Ó-ÐÜ˜  2˜Ó'ˆ
Ø×'Ñ'Ó)¨BÒ.°*×2GÑ2GÓ2IÈBÒ2NÜ"Ó$Ð$ØÐ0°*Ð=Ñ=ˆÜ˜fÓ%‰Ü	�&Ô	åØ�‰�f˜r‘kÕ"ñ Ø�M‰M˜& 2™+´ˆMÔ>ÙØˆØ�B‰;Ðr   c                óJ   — 	 t        t        | «      «      S # t        $ r Y yw xY w)z+Check if the number is a valid MEID number.F)Úboolr0   ÚValidationErrorr   s    r   Úis_validr8   �   s)   € ðÜ”H˜VÓ$Ó%Ð%øÜò Ùðús   ‚ –	"¡"Nc                ó  — t        | «      \  } }|dk(  r=t        | «      dk(  r/dt        | dd d«      t        | dd d«      fz  } |rKt        | «      }n?|dk(  r:t        | «      dk(  r,d	t        | dd
 «      t        | d
d «      fz  } |rt        | «      }|r|st        | «      }t        | «      dk(  r*t	        d«      D �cg c]  }| |dz  |dz  dz    ‘Œ c}|gz   }n| dd | dd
 | d
d | dd |g}|j                  d„ |D «       «      S c c}w )aH  Reformat the number to the standard presentation format. The separator
    used can be provided. If the format is specified (either 'hex' or 'dec')
    the number is reformatted in that format, otherwise the current
    representation is kept. If add_check_digit is True a check digit will be
    added if it is not present yet.Údecr   z	%010d%08dr   é   é   Úhexr   r&   r'   é   é   Né   c              3  ó&   K  — | ]	  }|sŒ|–— Œ y ­w)N© )Ú.0r   s     r   ú	<genexpr>zformat.<locals>.<genexpr>¶   s   è ø€ Ò0 ªaœ!Ñ0ùs   ‚Š)r   r   r(   r#   ÚrangeÚjoin)r   Ú	separatorÚformatÚadd_check_digitr*   ÚiÚpartss          r   rH   rH   •   s5  € ô ˜“�J€FˆBà�‚œ3˜v›;¨"Ò,à¤ F¨1¨Q K°Ó 4´c¸&ÀÀ2¸,ÈÓ6KÐLÑLˆÙÜ! &Ó)‰BØ	�5ŠœS ›[¨BÒ.àœs 6¨!¨B <Ó0´#°f¸RÀ°mÓ2DÐEÑEˆÙÜ! &Ó)ˆBá™rÜ˜fÓ%ˆä
ˆ6ƒ{�bÒä ›(ö$Øð ˜˜A™˜a !™e a™iÒ(ò $Ø') dñ+‰ð ˜˜�˜V A b˜\¨6°"°R¨=¸&ÀÀ¸+ÀrÐJˆØ�>‰>Ñ0 UÔ0Ó0Ð0ùò	$s   Â:Dc                ó4   — ddl m}  |t        | d¬«      «      S )zNConvert the number to its binary representation (without the check
    digit).r   )Úa2b_hexT)r)   )ÚbinasciirM   r+   )r   rM   s     r   Ú	to_binaryrO   ¹   s   € õ !Ù”7˜6°TÔ:Ó;Ð;r   c                ó‚   — ddl }d|j                  t        | «      «      j                  «       dd j	                  «       z   S )zpConvert the provided MEID to a pseudo ESN (pESN). The ESN is returned
    in compact hexadecimal representation.r   NÚ80iúÿÿÿ)ÚhashlibÚsha1rO   Ú	hexdigestr
   )r   rR   s     r   Úto_pseudo_esnrU   À   s9   € ó
 Ø�'—,‘,œy¨Ó0Ó1×;Ñ;Ó=¸b¸cÐB×HÑHÓJÑJÐJr   )r   ÚstrÚreturnrV   )r   rV   rW   r6   )r   rV   rW   ztuple[str, str])T)r   rV   r)   r6   rW   rV   )ú NF)
r   rV   rG   rV   rH   z
str | NonerI   r6   rW   rV   )r   rV   rW   Úbytes)Ú__doc__Ú
__future__r   Ústdnum.exceptionsÚstdnum.utilr   r   r   r   r   r   r#   r+   r0   r8   rH   rO   rU   rB   r   r   ú<module>r^      sŠ   ðñ(õ* #ä ß 'ð #€ó/óóó 	Eôô&ó>ð ØØ!ð	!1Øð!1àð!1ð ð!1ð ð	!1ð
 	ó!1óH<ôKr   