
    [Ah                         S SK r \  S SKrS SKrS SKrS SK	r	SSK
JrJrJrJr  SSKJrJrJrJrJrJrJr  SSKJrJrJrJrJrJr  SSKJrJ r J!r!J"r"J#r#  SSK$J%r%J&r&J'r'J(r(  SSK)J*r*   " S	 S
\RV                  5      r, " S S\RV                  5      r- " S S\RV                  5      r. " S S\RV                  5      r/Sr0\" \05      r1\2" \1\35      (       d   e\Rh                  " \15      r5\5Rl                  r7Sr8\9" \85      S-  S :X  d   e\	Rt                  " 5       r:\:Rw                  \85        \:Ry                  5       r=\2" \=\35      (       d   e\5R}                  \8\S9r?\2" \?\35      (       d   e\5R}                  \8\S9r@\2" \@\35      (       d   e\5R}                  \8\S9rA\2" \AS    \35      (       d   e/ rBSS 4S\4S\C4SS 4SS 4SS 4SS  4S!S" 44 H  u  rDrES#\D;   a  S$ rFO\ErFS%\?\S& 4S'\@\S( 4S)\A\S* 44 Hg  u  rGrHrIrJS+\7R                  \84S,\7R                  \=44 H=  u  rMrNrO\BR                  \R                  " \H\I\J\E\N\OS-R                  \D\G\M5      S.95        M?     Mi     M     \R                  R                  S/\B5      S0 5       rUS1rV\9" \V5      S2:X  d   e/ rWSS3 4S\4S\C4SS4 4SS5 4SS6 4SS7 4S!S8 44 H&  u  rDrX\WR                  \R                  " \X\DS.95        M(     \R                  R                  S9\W5      S: 5       rYSr0\" \05      r1\2" \1\35      (       d   e\R                  R                  S9\WSS; 5      S< 5       rZS=r[\R                  R                  S9\W5      S> 5       r\\R                  R                  S9\W5      S? 5       r]\R                  R                  S9\W5      S@ 5       r^\R                  R                  S9\W5      SA 5       r_SB r`SC raSD rbSE rcSF rdg! \ a    S SKr GNf = f! \ a    \r GNf = f)G    N   )VerifyingKey
SigningKeyMalformedPointErrorBadSignatureError)unpemUnexpectedDERencode_sequence
encode_oidencode_bitstringencode_integerencode_octet_string)sigencode_stringsigencode_dersigencode_stringssigdecode_stringsigdecode_dersigdecode_strings)NIST256pCurveBRAINPOOLP160r1Ed25519Ed448)PointPointJacobiCurveFpINFINITY)generator_brainpoolp160r1c                   v    \ rS rSrSr\S 5       rS rS rS r	S r
S rS	 rS
 rS rS rS rS rS rS rSrg)TestVerifyingKeyFromString,   zW
Verify that ecdsa.keys.VerifyingKey.from_string() can be used with
bytes-like objects
c                 \    SU l         [        R                  " U R                   5      U l        g )Ns0   LZ
zϗo8}X!h^pIYxao+Gv)	key_bytesr   from_stringvk)clss    VC:\Users\julio\Documents\inmobiliaria_backend\env\Lib\site-packages\ecdsa/test_keys.py
setUpClass%TestVerifyingKeyFromString.setUpClass2   s&    / 	
 ))#--8    c                 r   U R                  U R                  5        U R                  U R                  [        5        U R	                  U R                  R
                  R                  R                  5       S5        U R	                  U R                  R
                  R                  R                  5       S5        g )Nl   !Xp?|}rIWoWeD l   vq.y[Or~Vh]Ip<#'
)	assertIsNotNoner%   assertIsInstancer   assertEqualpubkeypointxyselfs    r'   
test_bytes%TestVerifyingKeyFromString.test_bytes;   s    TWW%dgg|4GGNN  ""$E	
 	GGNN  ""$F	
r*   c                     [         R                  " [        U R                  5      5      nU R	                  U R
                  R                  5       UR                  5       5        g N)r   r$   bufferr#   r.   r%   	to_stringr4   r%   s     r'   test_bytes_memoryview0TestVerifyingKeyFromString.test_bytes_memoryviewG   s>    %%fT^^&<=**,blln=r*   c                     [         R                  " [        U R                  5      5      nU R	                  U R
                  R                  5       UR                  5       5        g r8   r   r$   	bytearrayr#   r.   r%   r:   r;   s     r'   test_bytearray)TestVerifyingKeyFromString.test_bytearrayL   s>    %%i&?@**,blln=r*   c                     [         R                  " [        [        U R                  5      5      5      nU R                  U R                  R                  5       UR                  5       5        g r8   )r   r$   r9   r@   r#   r.   r%   r:   r;   s     r'   test_bytesarray_memoryview5TestVerifyingKeyFromString.test_bytesarray_memoryviewQ   sC    %%fYt~~-F&GH**,blln=r*   c                     [         R                   " SU R                  5      n[        R                  " U5      nU R	                  U R
                  R                  5       UR                  5       5        g NBarrayr#   r   r$   r.   r%   r:   r4   arrr%   s      r'   test_array_array_of_bytes4TestVerifyingKeyFromString.test_array_array_of_bytesV   I    kk#t~~.%%c***,blln=r*   c                     [         R                   " SU R                  5      n[        R                  " [	        U5      5      nU R                  U R                  R                  5       UR                  5       5        g rG   rJ   r#   r   r$   r9   r.   r%   r:   rK   s      r'   $test_array_array_of_bytes_memoryview?TestVerifyingKeyFromString.test_array_array_of_bytes_memoryview\   M    kk#t~~.%%fSk2**,blln=r*   c                     [         R                   " SU R                  5      n[        R                  " U5      nU R	                  U R
                  R                  5       UR                  5       5        g NIrI   rK   s      r'   test_array_array_of_ints3TestVerifyingKeyFromString.test_array_array_of_intsb   rO   r*   c                     [         R                   " SU R                  5      n[        R                  " [	        U5      5      nU R                  U R                  R                  5       UR                  5       5        g rV   rQ   rK   s      r'   #test_array_array_of_ints_memoryview>TestVerifyingKeyFromString.test_array_array_of_ints_memoryviewh   rT   r*   c                     [         R                  " SU R                  -   5      nU R                  U R                  R                  5       UR                  5       5        g N   r   r$   r#   r.   r%   r:   r;   s     r'   test_bytes_uncompressed2TestVerifyingKeyFromString.test_bytes_uncompressedn   s>    %%g&>?**,blln=r*   c                     [         R                  " [        SU R                  -   5      5      nU R	                  U R
                  R                  5       UR                  5       5        g r^   r?   r;   s     r'   test_bytearray_uncompressed6TestVerifyingKeyFromString.test_bytearray_uncompresseds   sC    %%i$..0H&IJ**,blln=r*   c                     [         R                  " SU R                  S S -   5      nU R                  U R                  R                  5       UR                  5       5        g N      r`   r;   s     r'   test_bytes_compressed0TestVerifyingKeyFromString.test_bytes_compressedx   sE    %%gs0C&CD**,blln=r*   c                     [         R                  " [        SU R                  S S -   5      5      nU R	                  U R
                  R                  5       UR                  5       5        g rg   r?   r;   s     r'   test_bytearray_compressed4TestVerifyingKeyFromString.test_bytearray_compressed}   sJ    %%i$..":M0M&NO**,blln=r*   c                     U R                  [        5         [        R                  " S[        5        S S S 5        g ! , (       d  f       g = f)Ns   AAA)assertRaisesr   r   r$   r   r3   s    r'   .test_ed25519_VerifyingKey_from_string_importedITestVerifyingKeyFromString.test_ed25519_VerifyingKey_from_string_imported   s-    23$$VW5 433s	   ;
A	 N)__name__
__module____qualname____firstlineno____doc__classmethodr(   r5   r<   rA   rD   rM   rR   rX   r[   ra   rd   rj   rm   rq   __static_attributes__rs   r*   r'   r    r    ,   s\    
 9 9

>
>
>
>>>>>
>
>
>
6r*   r    c                       \ rS rSrSr\S 5       rS rS rS r	S r
S rS	 rS
 rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS r S r!S r"S  r#S! r$S" r%S# r&S$ r'S% r(S&r)g')(TestVerifyingKeyFromDer   zU
Verify that ecdsa.keys.VerifyingKey.from_der() can be used with
bytes-like objects.
c                 r   SnSnX l         [        U5      U l        [        U R                  [        5      (       d   e[
        R                  " U5      U l        [        R                  " U5      U l	        Sn[
        R                  " U5      U l
        [        R                  " [        R                  5      U l        g )N-----BEGIN EC PRIVATE KEY-----
MF8CAQEEGF7IQgvW75JSqULpiQQ8op9WH6Uldw6xxaAKBggqhkjOPQMBAaE0AzIA
BLiBd9CE7xf15FY5QIAoNg+fWbSk1yZOYtoGUdzkejWkxbRc9RWTQjqLVXucIJnz
bA==
-----END EC PRIVATE KEY-----
z-----BEGIN PUBLIC KEY-----
MEkwEwYHKoZIzj0CAQYIKoZIzj0DAQEDMgAEuIF30ITvF/XkVjlAgCg2D59ZtKTX
Jk5i2gZR3OR6NaTFtFz1FZNCOotVe5wgmfNs
-----END PUBLIC KEY-----
z-----BEGIN PUBLIC KEY-----
MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE4H3iRbG4TSrsSRb/gusPQB/4YcN8
Poqzgjau4kfxBPyZimeRfuY/9g/wMmPuhGl4BUve51DsnKJFRr8psk0ieA==
-----END PUBLIC KEY-----
)key_pemr   r#   
isinstancebytesr   from_pemr%   r   skvk2generatecurvesk2)r&   prv_key_strkey_strs      r'   r(   "TestVerifyingKeyFromDer.setUpClass   s    - 	) 	 g#--////&&w/$$[1) 	 ''0%%bhh/r*   c                     Sn[         R                  " U5      n[         R                  " S[        S9nU R	                  X#5        g )N  -----BEGIN PUBLIC KEY-----
MIIBSzCCAQMGByqGSM49AgEwgfcCAQEwLAYHKoZIzj0BAQIhAP////8AAAABAAAA
AAAAAAAAAAAA////////////////MFsEIP////8AAAABAAAAAAAAAAAAAAAA////
///////////8BCBaxjXYqjqT57PrvVV2mIa8ZR0GsMxTsPY7zjw+J9JgSwMVAMSd
NgiG5wSTamZ44ROdJreBn36QBEEEaxfR8uEsQkf4vOblY6RA8ncDfYEt6zOg9KE5
RdiYwpZP40Li/hp/m47n60p8D54WK84zV2sxXs7LtkBoN79R9QIhAP////8AAAAA
//////////+85vqtpxeehPO5ysL8YyVRAgEBA0IABIr1UkgYs5jmbFc7it1/YI2X
T//IlaEjMNZft1owjqpBYH2ErJHk4U5Pp4WvWq1xmHwIZlsH7Ig4KmefCfR6SmU=
-----END PUBLIC KEY-----sA   RHlW;`Oȕ#0_Z0A`}NOZq|f[8*g	zJer   )r   r   r$   r   r.   )r4   pub_key_strpkpk_exps       r'   &test_load_key_with_explicit_parameters>TestVerifyingKeyFromDer.test_load_key_with_explicit_parameters   sH    ' 	 "";/))$
 
 	$r*   c                     SnU R                  [        5         [        R                  " US/S9  S S S 5        g ! , (       d  f       g = f)Nr   named_curvevalid_curve_encodings)rp   r	   r   r   )r4   r   s     r'   2test_load_key_with_explicit_with_explicit_disabledJTestVerifyingKeyFromDer.test_load_key_with_explicit_with_explicit_disabled   s=    ' 	 }-!!M? .--	   8
Ac                     U R                  [        5       n[        R                  " U R                  S/S9  S S S 5        U R                  S[        WR                  5      5        g ! , (       d  f       N4= f)Nraw)valid_encodingszenabled (raw) encodings)rp   r   r   from_derr#   assertInstr	exceptionr4   es     r'   "test_load_key_with_disabled_format:TestVerifyingKeyFromDer.test_load_key_with_disabled_format   sQ    23q!!$..5'J 4 	/Q[[1AB 43s   !A%%
A3c                     [         R                  " U R                  [        R                  5      nU R                  UR                  [        R                  5        g r8   )r   r   r#   hashlibsha256assertIsdefault_hashfuncr;   s     r'   test_custom_hashfunc,TestVerifyingKeyFromDer.test_custom_hashfunc   s4    ""4>>7>>Bb))7>>:r*   c                     [         R                  " U R                  [        R                  5      nU R                  UR                  [        R                  5        g r8   )r   r   r   r   r   r   r   r;   s     r'   "test_from_pem_with_custom_hashfunc:TestVerifyingKeyFromDer.test_from_pem_with_custom_hashfunc   s4    ""4<<@b))7>>:r*   c                     [         R                  " U R                  5      nU R                  U R                  R                  5       UR                  5       5        g r8   )r   r   r#   r.   r%   r:   r;   s     r'   r5   "TestVerifyingKeyFromDer.test_bytes   s9    ""4>>2**,blln=r*   c                     [         R                  " [        U R                  5      5      nU R	                  U R
                  R                  5       UR                  5       5        g r8   )r   r   r9   r#   r.   r%   r:   r;   s     r'   r<   -TestVerifyingKeyFromDer.test_bytes_memoryview   s>    ""6$..#9:**,blln=r*   c                     [         R                  " [        U R                  5      5      nU R	                  U R
                  R                  5       UR                  5       5        g r8   )r   r   r@   r#   r.   r%   r:   r;   s     r'   rA   &TestVerifyingKeyFromDer.test_bytearray   s>    ""9T^^#<=**,blln=r*   c                     [         R                  " [        [        U R                  5      5      5      nU R                  U R                  R                  5       UR                  5       5        g r8   )r   r   r9   r@   r#   r.   r%   r:   r;   s     r'   rD   2TestVerifyingKeyFromDer.test_bytesarray_memoryview   sC    ""6)DNN*C#DE**,blln=r*   c                     [         R                   " SU R                  5      n[        R                  " U5      nU R	                  U R
                  R                  5       UR                  5       5        g rG   )rJ   r#   r   r   r.   r%   r:   rK   s      r'   rM   1TestVerifyingKeyFromDer.test_array_array_of_bytes   sI    kk#t~~.""3'**,blln=r*   c                     [         R                   " SU R                  5      n[        R                  " [	        U5      5      nU R                  U R                  R                  5       UR                  5       5        g rG   )rJ   r#   r   r   r9   r.   r%   r:   rK   s      r'   rR   <TestVerifyingKeyFromDer.test_array_array_of_bytes_memoryview   sM    kk#t~~.""6#;/**,blln=r*   c                 p    U R                  U R                  U R                  R                  5       :H  5        g r8   )
assertTruer%   r   get_verifying_keyr3   s    r'   test_equality_on_verifying_keys7TestVerifyingKeyFromDer.test_equality_on_verifying_keys  s$    477#<#<#>>?r*   c                 T    U R                  U R                  U R                  :H  5        g r8   )assertFalser%   r   r3   s    r'   !test_inequality_on_verifying_keys9TestVerifyingKeyFromDer.test_inequality_on_verifying_keys	  s    DHH,-r*   c                 @    U R                  U R                  S :H  5        g r8   )r   r%   r3   s    r'   1test_inequality_on_verifying_keys_not_implementedITestVerifyingKeyFromDer.test_inequality_on_verifying_keys_not_implemented  s    D)r*   c                 d    U R                  U R                  U R                  R                  5        g r8   )assertNotEqualr%   r   verifying_keyr3   s    r'   *test_VerifyingKey_inequality_on_same_curveBTestVerifyingKeyFromDer.test_VerifyingKey_inequality_on_same_curve  s     DGGTXX%;%;<r*   c                 P    U R                  U R                  U R                  5        g r8   )r   r   r   r3   s    r'   (test_SigningKey_inequality_on_same_curve@TestVerifyingKeyFromDer.test_SigningKey_inequality_on_same_curve  s    DGGTXX.r*   c                 T    U R                  U R                  U R                  :H  5        g r8   )r   r%   r   r3   s    r'   test_inequality_on_wrong_types6TestVerifyingKeyFromDer.test_inequality_on_wrong_types  s    DGG+,r*   c                 @   U R                   R                  R                  n[        UR	                  5       UR                  5       UR                  5       5      n[        R                  " X R                   R                  5      nU R                  X0R                   :H  5        g r8   )
r%   r/   r0   r   r   r1   r2   r   from_public_pointr   )r4   pjr0   r%   s       r'   test_from_public_point_old2TestVerifyingKeyFromDer.test_from_public_point_old  s_    WW^^!!bhhj"$$&"$$&1++E77==Agg&r*   c                     [         R                  " [        R                  R	                  5       [        5      n[        UR                  5      nU R                  SU5        g )NzVerifyingKey.from_string(bytearray(b'K\x0c\xfbZH\x8e\x8c\x8c\x07\xee\xda\xfb\xe1\x97\xcd\x90\x18\x02\x15h]\xfe\xbe\xcbB\xba\xe6r\x10\xae\xf1P'), Ed25519, None))r   r$   r   	generatorto_bytesreprr   r.   )r4   r   strings      r'    test_ed25519_VerifyingKey_repr__8TestVerifyingKeyFromDer.test_ed25519_VerifyingKey_repr__   sK    ##G$5$5$>$>$@'Jb&&'1 	
r*   c                    [         R                  nU R                  [        5       n[        R
                  " U[         5        S S S 5        U R                  S[        WR                  5      5        g ! , (       d  f       N4= f)Nzincompatible with Edwards)	r   r   rp   
ValueErrorr   r   r   r   r   )r4   r0   r   s      r'   test_edwards_from_public_point6TestVerifyingKeyFromDer.test_edwards_from_public_point,  sU    !!z*a**5': + 	13q{{3CD +*s   A00
A>c                    [         R                  " [        R                  R	                  5       [        5      nUR
                  n[        R                  " UR                  5       [        5      nUR                  5         U R                  X#5        g r8   )
r   r$   r   r   r   r   r   r:   
precomputer.   r4   r   r%   r   s       r'   &test_edwards_precompute_no_side_effect>TestVerifyingKeyFromDer.test_edwards_precompute_no_side_effect3  s]    ##G$5$5$>$>$@'J&&r||~w?
!r*   c           	         [        [        [        [        R                  6 5      [	        [        [        R                  R                  5       5      S5      [	        SS5      5      nU R                  [        5       n[        R                  " U5        S S S 5        U R                  S[        WR                  5      5        g ! , (       d  f       N4= f)Nr       ztrailing junk after public key)r
   r   r   oidr   r   r   r   rp   r	   r   r   r   r   r   r4   der_strr   s      r'   $test_parse_malfomed_eddsa_der_pubkey<TestVerifyingKeyFromDer.test_parse_malfomed_eddsa_der_pubkey;  s    !J45U7#4#4#=#=#?@!DWa(
 }-!!'* . 	6AKK8HI .-s   9B>>
Cc                     U R                  [        5       n[        R                  " SS[        5        S S S 5        U R                  S[        WR                  5      5        g ! , (       d  f       N4= fNr*   zunsupported for Edwards)rp   r   r   from_public_key_recoveryr   r   r   r   r   s     r'   %test_edwards_from_public_key_recovery=TestVerifyingKeyFromDer.test_edwards_from_public_key_recoveryG  sL    z*a11#sGD + 	/Q[[1AB +*   A!!
A/c                     U R                  [        5       n[        R                  " SS[        5        S S S 5        U R                  S[        WR                  5      5        g ! , (       d  f       N4= fr   )rp   r   r   $from_public_key_recovery_with_digestr   r   r   r   r   s     r'   1test_edwards_from_public_key_recovery_with_digestITestVerifyingKeyFromDer.test_edwards_from_public_key_recovery_with_digestM  sO    z*a==S' +
 	/Q[[1AB +*r   c                    Sn[         R                  " U5      nU R                  UR                  [        5        U R                  UR                  [        5        Sn[         R                  " U[        5      nU R                  X$5        g )Nq-----BEGIN PUBLIC KEY-----
MCowBQYDK2VwAyEAIwBQ0NZkIiiO41WJfm5BV42u3kQm7lYnvIXmCy8qy2U=
-----END PUBLIC KEY-----
    # Pd"(U~nAWD&V'/*e)	r   r   r-   r   r   r   r   r$   r.   )r4   vk_pemr%   vk_strvk_2s        r'   test_load_ed25519_from_pem2TestVerifyingKeyFromDer.test_load_ed25519_from_pemU  sq    ) 	 ""6*bhh.bhh(P 	
 ''8"r*   c                     Sn[         R                  " U[        5      nSnU R                  X2R	                  5       5        g )Nr   sq   -----BEGIN PUBLIC KEY-----
MCowBQYDK2VwAyEAIwBQ0NZkIiiO41WJfm5BV42u3kQm7lYnvIXmCy8qy2U=
-----END PUBLIC KEY-----
)r   r$   r   r.   to_pemr4   r   r%   r   s       r'   test_export_ed255_to_pem0TestVerifyingKeyFromDer.test_export_ed255_to_pemj  sA    P 	
 %%fg6* 	 	-r*   c                     Sn[         R                  " U[        5      nSnU R                  X2R	                  5       5        g )Nr   sQ   ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICMAUNDWZCIojuNViX5uQVeNrt5EJu5WJ7yF5gsvKstl
)r   r$   r   r.   to_ssh)r4   r   r%   vk_sshs       r'   test_export_ed255_to_ssh0TestVerifyingKeyFromDer.test_export_ed255_to_sshz  s:    P 	
 %%fg6f-r*   c                     [         R                  " [        5      nUR                  n[        R
                  " UR                  5       5      nU R                  X#5        g r8   )r   r   r   r   r   r   r  r.   r   s       r'   test_ed25519_export_import2TestVerifyingKeyFromDer.test_ed25519_export_import  sA      )##BIIK0!r*   c                 |    Sn[         R                  " U5      nSnSnU R                  UR                  XC5      5        g )Nr      data
s@   dGj3yEl PǏ`u/'ӖXF\P)խF<hMꍨyr   r   r   verifyr4   r   r%   datasigs        r'   test_ed25519_sig_verify/TestVerifyingKeyFromDer.test_ed25519_sig_verify  sE    ) 	 ""6*P 	 			#,-r*   c                     Sn[         R                  " U5      nSnSnU R                  [        5         UR	                  XC5        S S S 5        g ! , (       d  f       g = f)Nr   r  s@   Gj3yEl PǏ`u/'ӖXF\P)խF<hMꍨy)r   r   rp   r   r  r  s        r'   !test_ed25519_sig_verify_malformed9TestVerifyingKeyFromDer.test_ed25519_sig_verify_malformed  sW    ) 	 ""6*P 	 01IIc  211s   A
Ac                    Sn[         R                  " U5      nU R                  UR                  [        5        U R                  UR                  [        5        Sn[         R                  " U[        5      nU R                  X$5        g )N-----BEGIN PUBLIC KEY-----
MEMwBQYDK2VxAzoAeQtetSu7CMEzE+XWB10Bg47LCA0giNikOxHzdp+tZ/eK/En0
dTdYD2ll94g58MhSnBiBQB9A1MMA
-----END PUBLIC KEY-----
9   y^+3] ؤ;vgIu7Xie9R@@ )	r   r   r-   r   r   r   r   r$   r.   )r4   pem_strr%   r   r   s        r'   test_ed448_from_pem+TestVerifyingKeyFromDer.test_ed448_from_pem  sp    ) 	 ""7+bhh.bhh&4 	 &&vu5!r*   c                     Sn[         R                  " U[        5      nSnU R                  X2R	                  5       5        g )Nr  s   -----BEGIN PUBLIC KEY-----
MEMwBQYDK2VxAzoAeQtetSu7CMEzE+XWB10Bg47LCA0giNikOxHzdp+tZ/eK/En0dTdYD2ll94g5
8MhSnBiBQB9A1MMA
-----END PUBLIC KEY-----
)r   r$   r   r.   r  r  s       r'   test_ed448_to_pem)TestVerifyingKeyFromDer.test_ed448_to_pem  s@    4 	 %%fe4* 	 	-r*   c                     [         R                  " [        5      nUR                  n[        R
                  " UR                  5       5      nU R                  X#5        g r8   )r   r   r   r   r   r   r  r.   r   s       r'   test_ed448_export_import0TestVerifyingKeyFromDer.test_ed448_export_import  sA      '##BIIK0!r*   c                 |    Sn[         R                  " U5      nSnSnU R                  UR                  XC5      5        g )Nr  r  sr   h,p5"5Q3= To0WE>Q`jC_28k	 x{]~1?0/U!L-LbS0fK@Э
 r  )r4   r  r%   r  r  s        r'   test_ed448_sig_verify-TestVerifyingKeyFromDer.test_ed448_sig_verify  sD    ) 	 ""7+ 	 			#,-r*   rs   N)*rt   ru   rv   rw   rx   ry   r(   r   r   r   r   r   r5   r<   rA   rD   rM   rR   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r	  r  r  r  r  r!  r$  r'  rz   rs   r*   r'   r|   r|      s    
 0 0>%0"C;
;
>
>
>
>
>>@.*=/-'

E"
JCC#*. 
.".*!,"0.$".r*   r|   c                       \ rS rSrSr\S 5       rS rS rS r	S r
S rS	 rS
 rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS r Sr!g) TestSigningKeyi  zS
Verify that ecdsa.keys.SigningKey.from_der() can be used with
bytes-like objects.
c                     Sn[         R                  " U5      U l        Sn[         R                  " U5      U l        Sn[         R                  " U5      U l        g )Nr   z-----BEGIN PRIVATE KEY-----
MG8CAQAwEwYHKoZIzj0CAQYIKoZIzj0DAQEEVTBTAgEBBBheyEIL1u+SUqlC6YkE
PKKfVh+lJXcOscWhNAMyAAS4gXfQhO8X9eRWOUCAKDYPn1m0pNcmTmLaBlHc5Ho1
pMW0XPUVk0I6i1V7nCCZ82w=
-----END PRIVATE KEY-----
z-----BEGIN EC PRIVATE KEY-----
MHcCAQEEIKlL2EAm5NPPZuXwxRf4nXMk0A80y6UUbiQ17be/qFhRoAoGCCqGSM49
AwEHoUQDQgAE4H3iRbG4TSrsSRb/gusPQB/4YcN8Poqzgjau4kfxBPyZimeRfuY/
9g/wMmPuhGl4BUve51DsnKJFRr8psk0ieA==
-----END EC PRIVATE KEY-----
)r   r   sk1	sk1_pkcs8r   )r&   r   s     r'   r(   TestSigningKey.setUpClass  s\    - 	 %%k2* 	 #++K8- 	 %%k2r*   c                 V    U R                  U R                  R                  SS9S5        g )Npkcs8formatsq   0o0*H=*H=U0S^BRB<V%wš42 wЄV9@(6Y&NbQz5Ŵ\B:U{ l)r.   r,  to_derr3   s    r'   test_to_der_pkcs8 TestSigningKey.test_to_der_pkcs8)  s'    HHOO7O+$	
r*   c                     Sn[         R                  " U5      n[         R                  " S[        S9nU R	                  X#5        g )N:  -----BEGIN PRIVATE KEY-----
MIIBeQIBADCCAQMGByqGSM49AgEwgfcCAQEwLAYHKoZIzj0BAQIhAP////8AAAAB
AAAAAAAAAAAAAAAA////////////////MFsEIP////8AAAABAAAAAAAAAAAAAAAA
///////////////8BCBaxjXYqjqT57PrvVV2mIa8ZR0GsMxTsPY7zjw+J9JgSwMV
AMSdNgiG5wSTamZ44ROdJreBn36QBEEEaxfR8uEsQkf4vOblY6RA8ncDfYEt6zOg
9KE5RdiYwpZP40Li/hp/m47n60p8D54WK84zV2sxXs7LtkBoN79R9QIhAP////8A
AAAA//////////+85vqtpxeehPO5ysL8YyVRAgEBBG0wawIBAQQgIXtREfUmR16r
ZbmvDGD2lAEFPZa2DLPyz0czSja58yChRANCAASK9VJIGLOY5mxXO4rdf2CNl0//
yJWhIzDWX7daMI6qQWB9hKyR5OFOT6eFr1qtcZh8CGZbB+yIOCpnnwn0ekpl
-----END PRIVATE KEY-----
s    !{Q&G^e`=G3J6 r   )r   r   r$   r   r.   )r4   r   r   r   s       r'   'test_decoding_explicit_curve_parameters6TestSigningKey.test_decoding_explicit_curve_parameters4  sH    	* 	   -$$ 	
 	!r*   c                     SnU R                  [        5         [        R                  " US/S9  S S S 5        g ! , (       d  f       g = f)Nr7  r   r   )rp   r	   r   r   )r4   r   s     r'   >test_decoding_explicit_curve_parameters_with_explicit_disabledMTestSigningKey.test_decoding_explicit_curve_parameters_with_explicit_disabledM  s=    	* 	 }-M? .--r   c                    [         R                  " U R                  R                  R                  U R                  R
                  5      nU R                  U R                  U5        U R                  U R                  U5        g r8   )r   from_secret_exponentr,  privkeysecret_multiplierr   r.   r-  r4   r   s     r'   test_equality_on_signing_keys,TestSigningKey.test_equality_on_signing_keys`  sY    ,,HH..
 	2&,r*   c                     U R                   R                  S5      nU R                  U5        U R                   R                  nU R                  UR	                  US5      5        g )Nr*   )r,  signr   r   r  r4   r  r%   s      r'   test_verify_with_empty_message-TestSigningKey.test_verify_with_empty_messageg  sF    hhmmC XX##		#s+,r*   c                     U R                   R                  S5      nU R                   R                  nUR                  5         U R	                  UR                  US5      5        g )N   message)r,  rE  r   r   r   r  rF  s      r'   test_verify_with_precompute*TestSigningKey.test_verify_with_precomputep  sC    hhmmJ'XX##
		#z23r*   c                     U R                   R                  nUR                  5         U R                  R                  nU R	                  X5        g r8   )r,  r   r   r-  r.   )r4   vk1r   s      r'   *test_compare_verifying_key_with_precompute9TestSigningKey.test_compare_verifying_key_with_precomputey  s8    hh$$nn**"r*   c                     U R                   R                  S5      nU R                   R                  nUR                  SS9  U R	                  UR                  US5      5        g )Ns   other messageT)lazy)r   rE  r   r   r   r  rF  s      r'    test_verify_with_lazy_precompute/TestSigningKey.test_verify_with_lazy_precompute  sJ    hhmm,-XX##
4 		#'789r*   c                 P    U R                  U R                  U R                  5        g r8   )r   r,  r   r3   s    r'   test_inequality_on_signing_keys.TestSigningKey.test_inequality_on_signing_keys  s    DHHdhh/r*   c                 <    U R                  U R                  S 5        g r8   )r   r,  r3   s    r'   /test_inequality_on_signing_keys_not_implemented>TestSigningKey.test_inequality_on_signing_keys_not_implemented  s    DHHd+r*   c                     Sn[         R                  " U5      n[         R                  " S[        5      nU R	                  X#5        g )Nw-----BEGIN PRIVATE KEY-----
MC4CAQAwBQYDK2VwBCIEIDS6x9FO1PG8T4xIPg8Zd0z8uL6sVGZFEZrX17gHC/XU
-----END PRIVATE KEY-----
    4NOH>wLTfE׸)r   r   r$   r   r.   r4   r  r   sk_strs       r'   test_ed25519_from_pem$TestSigningKey.test_ed25519_from_pem  sG    * 	   )''P
 	$r*   c           	      v   [        [        S5      [        [        [        R                  6 [        S5      5      [        [        S5      5      5      nU R                  [        5       n[        R                  " U5        S S S 5        U R                  S[        WR                  5      5        g ! , (       d  f       N4= f)Nr       AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzNon NULL parametersr
   r   r   r   r   r   rp   r	   r   r   r   r   r   r   s      r'   'test_ed25519_from_der_bad_alg_id_params6TestSigningKey.test_ed25519_from_der_bad_alg_id_params  s    !1J4nQ6GH 3I >?
 }-( . 	+S-=> .-s   %B**
B8c           	      h   [        [        S5      [        [        [        R                  6 5      [        [        S5      S-   5      5      nU R                  [        5       n[        R                  " U5        S S S 5        U R                  S[        WR                  5      5        g ! , (       d  f       N4= f)Nr   rc     Bz+trailing junk after the encoded private keyrd  r   s      r'   )test_ed25519_from_der_junk_after_priv_key8TestSigningKey.test_ed25519_from_der_junk_after_priv_key  s    !1GKK(   3I > EF
 }-( . 	93q{{;K	
 .-s   B##
B1c                     [         R                  " S[        5      nSnUR                  U[        S9nU R                  US5        g )Nr]  rJ  	sigencodes@   ,v>%~>&
a@|`X@<7%i{}ݱ|
})"+E )r   r$   r   rE  r   r.   )r4   r_  msgr  s       r'   test_ed25519_sign TestSigningKey.test_ed25519_sign  sK    ''P
 kk#k7D	
r*   c                    [         R                  " S[        5      nU R                  [        5       nUR                  S5        S S S 5        U R                  S[        WR                  5      5        g ! , (       d  f       N4= fNr]  s   aaaaaaaaaaaaaaaaaaaaMethod unsupported for Edwards)	r   r$   r   rp   r   sign_digest_deterministicr   r   r   r4   r_  r   s      r'   &test_ed25519_sign_digest_deterministic5TestSigningKey.test_ed25519_sign_digest_deterministic  sc    ''P

 z*a,,Y7 + 	6AKK8HI +*   A11
A?c                    [         R                  " S[        5      nU R                  [        5       nUR                  S5        S S S 5        U R                  S[        WR                  5      5        g ! , (       d  f       N4= frr  )	r   r$   r   rp   r   sign_digestr   r   r   ru  s      r'   test_ed25519_sign_digest'TestSigningKey.test_ed25519_sign_digest  sc    ''P

 z*ay) + 	6AKK8HI +*rx  c                    [         R                  " S[        5      nU R                  [        5       nUR                  S5        S S S 5        U R                  S[        WR                  5      5        g ! , (       d  f       N4= f)Nr]     rs  )	r   r$   r   rp   r   sign_numberr   r   r   ru  s      r'   test_ed25519_sign_number'TestSigningKey.test_ed25519_sign_number  sc    ''P

 z*ar" + 	6AKK8HI +*rx  c                     Sn[         R                  " U5      nU R                  [        5       nUR	                  SS9  S S S 5        U R                  S[        WR                  5      5        g ! , (       d  f       N4= f)Nr\  ssleayr1  zOnly PKCS#8 format)r   r   rp   r   r3  r   r   r   )r4   r  r   r   s       r'   test_ed25519_to_der_ssleay)TestSigningKey.test_ed25519_to_der_ssleay  sd    * 	   )z*aIIXI& + 	*C,<= +*s   A,,
A:c                 |    [         R                  " S[        5      nSnU R                  UR	                  SS9U5        g )Nr]  sw   -----BEGIN PRIVATE KEY-----
MC4CAQAwBQYDK2VwBCIEIDS6x9FO1PG8T4xIPg8Zd0z8uL6sVGZFEZrX17gHC/XU
-----END PRIVATE KEY-----
r0  r1  )r   r$   r   r.   r  r4   r   r  s      r'   test_ed25519_to_pem"TestSigningKey.test_ed25519_to_pem  sB    ##P
+ 	 	'2G<r*   c                 ~    [         R                  " S[        5      nSnU R                  UR	                  5       U5        g )Nr]  s  -----BEGIN OPENSSH PRIVATE KEY-----
b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAMwAAAAtzc2gtZWQyNTUx
OQAAACAjAFDQ1mQiKI7jVYl+bkFXja7eRCbuVie8heYLLyrLZQAAAIgAAAAAAAAAAAAAAAtzc2gt
ZWQyNTUxOQAAACAjAFDQ1mQiKI7jVYl+bkFXja7eRCbuVie8heYLLyrLZQAAAEA0usfRTtTxvE+M
SD4PGXdM/Li+rFRmRRGa19e4Bwv11CMAUNDWZCIojuNViX5uQVeNrt5EJu5WJ7yF5gsvKstlAAAA
AAECAwQF
-----END OPENSSH PRIVATE KEY-----
)r   r$   r   r.   r  )r4   r   ssh_strs      r'   test_ed25519_to_ssh"TestSigningKey.test_ed25519_to_ssh  s=    ##P
3 	 	g.r*   c                     [         R                  " [        5      n[         R                  " UR	                  SS95      nU R                  X5        g Nr0  r1  )r   r   r   r   r  r.   r4   r   decodeds      r'   test_ed25519_to_and_from_pem+TestSigningKey.test_ed25519_to_and_from_pem   s;      )%%biiwi&?@%r*   c                 t    [         R                  " [        [        R                  S9nU R                  U5        g )N)entropy)r   r   r   osurandomr,   rA  s     r'   test_ed25519_custom_entropy*TestSigningKey.test_ed25519_custom_entropy'  s&      "**=R r*   c                     U R                  [        5       n[        R                  " S[        S9  S S S 5        U R                  S[        WR                  5      5        g ! , (       d  f       N4= f)NiIr   z don't support setting the secret)rp   r   r   r>  r   r   r   r   r   s     r'   !test_ed25519_from_secret_exponent0TestSigningKey.test_ed25519_from_secret_exponent,  sJ    z*a++JgF + 	8#akk:JK +*s   A
A,c                     Sn[         R                  " U5      n[         R                  " S[        5      nU R	                  X#5        g )Nz-----BEGIN PRIVATE KEY-----
MEcCAQAwBQYDK2VxBDsEOTyFuXqFLXgJlV8uDqcOw9nG4IqzLiZ/i5NfBDoHPzmP
OP0JMYaLGlTzwovmvCDJ2zLaezu9NLz9aQ==
-----END PRIVATE KEY-----
9   <z-x	_..&_:?98	1T 2{;4i)r   r   r$   r   r.   r^  s       r'   r  "TestSigningKey.test_ed448_from_pem2  sH    * 	   )''4 
 	$r*   c                 |    [         R                  " S[        5      nSnU R                  UR	                  SS9U5        g )Nr  s   -----BEGIN PRIVATE KEY-----
MEcCAQAwBQYDK2VxBDsEOTyFuXqFLXgJlV8uDqcOw9nG4IqzLiZ/i5NfBDoHPzmPOP0JMYaLGlTz
wovmvCDJ2zLaezu9NLz9aQ==
-----END PRIVATE KEY-----
r0  r1  )r   r$   r   r.   r  r  s      r'   r!   TestSigningKey.test_ed448_to_pemE  sC    ##4 
+ 	 	'2G<r*   c                     [         R                  " [        5      n[         R                  " UR	                  SS95      nU R                  X!5        g r  )r   r   r   r   r  r.   r  s      r'   test_ed448_encode_decode'TestSigningKey.test_ed448_encode_decodeV  s;      '%%biiwi&?@%r*   rs   N)"rt   ru   rv   rw   rx   ry   r(   r4  r8  r;  rB  rG  rK  rO  rS  rV  rY  r`  re  ri  ro  rv  r{  r  r  r  r  r  r  r  r  r!  r  rz   rs   r*   r'   r*  r*    s    
 3 38	
"2&--4#:0,%"
?
 
$	J	J	J>=/&&!
L%&="&r*   r*  c                   H    \ rS rSr\S 5       rS rS rS rS r	S r
S rS	rg
)TestTrivialCurvei^  c           	          [        SSS5      n[        USSSSSS	9n[        S
XS5      U l        [        R
                  " SU R                  [        R                  S9U l        g )N   T   :      W   r      T)r   toy_p8)r   r  r      )hashfunc)	r   r   r   	toy_curver   r>  r   sha1r   )r&   r   gens      r'   r(   TestTrivialCurve.setUpClass_  sY     R$%B3$?hI>00MM\\
r*   c                 |    U R                   R                  nU R                  XR                  5       -  [        5        g r8   )r  r   r.   orderr   )r4   r  s     r'   test_generator_sanity&TestTrivialCurve.test_generator_sanityq  s*    nn&&yy{*H5r*   c                 l    U R                  U R                  R                  R                  5       S5        g )Ns   )r.   r   r   r:   r3   s    r'   test_public_key_sanity'TestTrivialCurve.test_public_key_sanityv  s%    ..88:KHr*   c                     U R                   R                  S5      nU R                  US5        U R                  U R                   R                  R                  US5      5        g )NrJ  s   -.r   sign_deterministicr.   r   r   r  )r4   r  s     r'   test_deterministic_sign(TestTrivialCurve.test_deterministic_signy  sI    gg((4e$--44S*EFr*   c                    [         R                  " S5      nU R                  R                  U5      nU R	                  [        U5      S5        U R                  U R                  R                  R                  X!5      5        g )N    r  )	r  r  r   r  r.   lenr   r   r  r4   rn  r  s      r'   &test_deterministic_sign_random_message7TestTrivialCurve.test_deterministic_sign_random_message  sX    jjngg((-S1%--44S>?r*   c                     SnU R                   R                  U5      nU R                  US5        U R                  U R                   R                  R                  X!5      5        g )Ns    Os   6r  r  s      r'   /test_deterministic_sign_that_rises_R_zero_error@TestTrivialCurve.test_deterministic_sign_that_rises_R_zero_error  sN     gg((-k*--44S>?r*   c                     SnU R                   R                  U5      nU R                  US5        U R                  U R                   R                  R                  X!5      5        g )Ns   ms   Ilr  r  s      r'   /test_deterministic_sign_that_rises_S_zero_error@TestTrivialCurve.test_deterministic_sign_that_rises_S_zero_error  sL    gg((-k*--44S>?r*   rs   N)rt   ru   rv   rw   ry   r(   r  r  r  r  r  r  rz   rs   r*   r'   r  r  ^  s7    
 
"6
IG@@@r*   r  r   sd   some string for signingcontents don't really matterbut do include also some crazy values:  	
      rl  r   c                     U $ r8   rs   r1   s    r'   <lambda>r        r*   zbytes memoryviewr@   zbytearray memoryviewc                 *    [        [        U 5      5      $ r8   r9   r@   r  s    r'   r  r        vil';r*   zarray.array of bytesc                 0    [         R                   " SU 5      $ rG   rJ   r  s    r'   r  r        u{{3':r*   zarray.array of bytes memoryviewc                 B    [        [        R                  " SU 5      5      $ rG   r9   rJ   r  s    r'   r  r        &S!9L2Mr*   zarray.array of intsc                 0    [         R                   " SU 5      $ rV   r  r  s    r'   r  r        ekk#q&9r*   zarray.array of ints memoryviewc                 B    [        [        R                  " SU 5      5      $ rV   r  r  s    r'   r  r        C8K1Lr*   intsc                     U $ r8   rs   r  s    r'   r  r    s    r*   r   c                     [        U 5      $ r8   convr  s    r'   r  r    s    T!Wr*   derc                     [        U 5      $ r8   r  r  s    r'   r  r    s    $q'r*   stringsc                 &    [        S U  5       5      $ )Nc              3   8   #    U  H  n[        U5      v   M     g 7fr8   r  ).0is     r'   	<genexpr><lambda>.<locals>.<genexpr>  s     /QDGGQs   )tupler  s    r'   r  r    s    e/Q//r*   r  verify_digestz{2}-{0}-{1})idz1signature,decoder,mod_apply,fun,vrf_mthd,vrf_datac                 <    U" U 5      nU" Xc" U5      US9(       d   eg )N)	sigdecoders   )	signaturedecoder	mod_applyfunvrf_mthdvrf_datar  s          r'   test_VerifyingKey_verifyr    s$     I
CCX':::r*   s   ^BRB<V%wri   c                     U $ r8   rs   r  s    r'   r  r    r  r*   c                 *    [        [        U 5      5      $ r8   r  r  s    r'   r  r    r  r*   c                 0    [         R                   " SU 5      $ rG   r  r  s    r'   r  r    r  r*   c                 B    [        [        R                  " SU 5      5      $ rG   r  r  s    r'   r  r    r  r*   c                 0    [         R                   " SU 5      $ rV   r  r  s    r'   r  r    r  r*   c                 B    [        [        R                  " SU 5      5      $ rV   r  r  s    r'   r  r    r  r*   convertc                 |    U " [         5      n[        R                  " U5      nUR                  5       [         :X  d   eg r8   )prv_key_bytesr   r$   r:   r  keyr   s      r'   test_SigningKey_from_stringr    s0    
-
 C				$B<<>]***r*   c                 |    U " [         5      n[        R                  " U5      nUR                  5       [        :X  d   eg r8   )r#   r   r   r:   r  r  s      r'   test_SigningKey_from_derr    s0    
)
C			S	!B<<>]***r*   s   
c                     [         R                  U " [        5      U " [        5      S9n[        R                  U[        5        g N)extra_entropy)r   r  r  r
  r%   r  r  r  s     r'   "test_SigningKey_sign_deterministicr    s5    


W]%;   C IIc4r*   c                     [         R                  U " [        5      U " [        5      S9n[        R                  U[        5        g r	  )r   rt  	data_hashr
  r%   r  r  r  s     r'   )test_SigningKey_sign_digest_deterministicr  (  s6    

&
&	'-*@ ' C IIc4r*   c                 v    [         R                  U " [        5      5      n[        R	                  U[        5        g r8   )r   rE  r  r%   r  r  s     r'   test_SigningKey_signr  1  s"    
'''$-
 CIIc4r*   c                 v    [         R                  U " [        5      5      n[        R	                  U[
        5        g r8   )r   rz  r  r%   r  r  r  s     r'   test_SigningKey_sign_digestr  8  s#    
..+
,CIIc4r*   c                      [         R                  " [        R                  S-
  [        S9n U R                  nU R                  S5      nUR                  US5      (       d   eg )Nr   r   s   hello)r   r>  r   r  r   rE  r  )r   r%   r  s      r'   #test_SigningKey_with_unlikely_valuer  ?  sM    		(	(!);8	LB			B
''(
C99S(####r*   c                  p   [         n [        U R                  5       U R                  5       U R	                  5       U R                  5       5      n [        SU R                  5       U S5      n[        R                  " SU5      n[        R                  " S[        5      nUR                  UR                  :X  d   eg )Nr   )
r      $   r  r  r     r   r   r      )r   r   r   r1   r2   r  r   r   r>  r   r?  )r   r   r   r   s       r'   +test_SigningKey_with_custom_curve_old_pointr  F  s    )I	I '	E 
	(	(U	3B

)
)"o
>C::$$$r*   c                      [         R                  " S[        5      n [         R                  " S[        5      nU R                  UR                  :X  a   eg )Nr  )r   r>  r   r   r   r,  r   s     r'   2test_VerifyingKey_inequality_with_different_curvesr  ]  sC    

)
)!_
=C

)
)!X
6C!!S%6%66776r*   c                      [         R                  " S[        5      n [         R                  " S[        5      nU R                  UR                  :X  a   eg )Nr  r  )r   r>  r   r   r  s     r'   9test_VerifyingKey_inequality_with_different_secret_pointsr   d  sC    

)
)!_
=C

)
)!_
=C!!S%6%66776r*   c                  `    Sn [         R                  " U 5      nUR                  [        :X  d   eg )Nz-----BEGIN PRIVATE KEY-----
    MFMCAQEwBQYDK2VwBCIEICc2F2ag1n1QP0jY+g9qWx5sDkx0s/HdNi3cSRHw+zsI
    oSMDIQA+HQ2xCif8a/LMWR2m5HaCm5I2pKe/cc8OiRANMHxjKQ==
    -----END PRIVATE KEY-----)r   r   r   r   )pemr   s     r'   &test_SigningKey_from_pem_pkcs8v2_EdDSAr#  k  s-    !C
 
		S	!B88wr*   )e	unittest2unittestImportErrorr9   	NameError
memoryviewr  rJ   pytestr   keysr   r   r   r   r  r   r	   r
   r   r   r   r   utilr   r   r   r   r   r   curvesr   r   r   r   r   ellipticcurver   r   r   r   ecdsar   TestCaser    r|   r*  r  r   r#   r   r   r   r   r   r%   r  r  r  updatedigestr  rE  sig_rawsig_dersig_strings	verifiersr@   modifierr  r  
sig_formatr  r  r  r  r  method_namer  r  appendparamr2  markparametrizer  r  
convertersr  r  r  r
  r  r  r  r  r  r  r  r   r#  rs   r*   r'   <module>r>     s   
 
        E D @ @ ,X6!2!2 X6v|.h// |.~U&X&& U&p
4@x(( 4@r%  +	)U## ###*  4y1} ||~ D KKM	)U## ##
''$"2'
3'5!! !!
''$-'
0'5!! !!ggd&7g8+a.%(( ((	k );<:;&(MN9:%'LM	MHc 	)+<=	(9:/		
	61
Iw	 ryy$'b..	:0
+K8 $++Hj+N
	0
	6	R 7;;#  =R 
k );<:;&(MN9:%'LM	Hg fll7x89	 J/+ 0+%  +	)U## ## JsO4+ 5+ 4 J/ 0 J/ 0 J/ 0 J/ 0$%.88Q#  
  Fs"   O O, 
O)(O),O87O8