
    עizr              
       8   U d dl mZ d dlmZ d dlmZmZ d dlm	Z	 	  ej                         Zeed<    ej                         Zeed<    ej                          Zeed<    ej$                         Zeed<    ej(                         Zeed	<   eez   Z ej.                         Zeed
<    ej2                         Zeed<    ej6                         Zeed<    ej:                         Zeed<    ej>                         Z eed<   e ez   Z! ejD                         Z#eed<    ejH                         Z%eed<    ejL                         Z'eed<    ejP                         Z)eed<    ejT                         Z+eed<   e+e)z   Z, ejZ                         Z.eed<    ej^                         Z0eed<    ejb                         Z2eed<    ejf                         Z4eed<    ejj                         Z6eed<   e6e4z   Z7 ejp                         Z9eed<    ejt                         Z;eed<    ejx                         Z=eed<    ej|                         Z?eed<    ej                         ZAeed<   eAe?z   Z7 ej                         ZCeed<    ej                         ZEeed<    ej                         ZGeed <    ej                         ZIeed!<    ej                         ZKeed"<   eKeIz   Z7d#eLd$eeL   d%eLd&eLd'eLf
d(ZMd)eLd$eeL   d%eLd&eLd'eLf
d*ZNd#eLd$eeL   d%eLd&eLd'eLf
d+ZOd)eLd$eeL   d%eLd&eLd'eLf
d,ZPd#eLd$eeL   d%eLd&eLd'eLf
d-ZQd)eLd$eeL   d%eLd&eLd'eLf
d.ZRd#eLd$eeL   d%eLd&eLd'eLf
d/ZSd)eLd$eeL   d%eLd&eLd'eLf
d0ZTd#eLd$eeL   d%eLd&eLd'eLf
d1ZUd)eLd$eeL   d%eLd&eLd'eLf
d2ZVd#eLd$eeL   d%eLd&eLd'eLf
d3ZWd)eLd$eeL   d%eLd&eLd'eLf
d4ZXy5)6    )Optional)
exceptions)ffilib)ensure*crypto_aead_chacha20poly1305_ietf_KEYBYTES+crypto_aead_chacha20poly1305_ietf_NSECBYTES+crypto_aead_chacha20poly1305_ietf_NPUBBYTES(crypto_aead_chacha20poly1305_ietf_ABYTES2crypto_aead_chacha20poly1305_ietf_MESSAGEBYTES_MAX%crypto_aead_chacha20poly1305_KEYBYTES&crypto_aead_chacha20poly1305_NSECBYTES&crypto_aead_chacha20poly1305_NPUBBYTES#crypto_aead_chacha20poly1305_ABYTES-crypto_aead_chacha20poly1305_MESSAGEBYTES_MAX+crypto_aead_xchacha20poly1305_ietf_KEYBYTES,crypto_aead_xchacha20poly1305_ietf_NSECBYTES,crypto_aead_xchacha20poly1305_ietf_NPUBBYTES)crypto_aead_xchacha20poly1305_ietf_ABYTES3crypto_aead_xchacha20poly1305_ietf_MESSAGEBYTES_MAXcrypto_aead_aegis256_KEYBYTEScrypto_aead_aegis256_NSECBYTEScrypto_aead_aegis256_NPUBBYTEScrypto_aead_aegis256_ABYTES%crypto_aead_aegis256_MESSAGEBYTES_MAXcrypto_aead_aegis128l_KEYBYTEScrypto_aead_aegis128l_NSECBYTEScrypto_aead_aegis128l_NPUBBYTEScrypto_aead_aegis128l_ABYTES&crypto_aead_aegis128l_MESSAGEBYTES_MAXcrypto_aead_aes256gcm_KEYBYTEScrypto_aead_aes256gcm_NSECBYTEScrypto_aead_aes256gcm_NPUBBYTEScrypto_aead_aes256gcm_ABYTES&crypto_aead_aes256gcm_MESSAGEBYTES_MAXmessageaadnoncekeyreturnc                    t        t        | t              dt        j                         t        |       }t        |t        k  dj                  t              t        j                         t        t        |t              xs |du dt        j                         t        t        |t              xr t        |      t        k(  dj                  t              t        j                         t        t        |t              xr t        |      t        k(  dj                  t              t        j                         |r|}t        |      }nt        j                  }d}|t        z   }t        j                  d	      }t        j                  d
|      }	t        j                   |	|| |||t        j                  ||	      }
t        |
dk(  dt        j"                         t        j$                  |	|d         dd S )aZ  
    Encrypt the given ``message`` using the IETF ratified chacha20poly1305
    construction described in RFC7539.

    :param message:
    :type message: bytes
    :param aad:
    :type aad: Optional[bytes]
    :param nonce:
    :type nonce: bytes
    :param key:
    :type key: bytes
    :return: authenticated ciphertext
    :rtype: bytes
     Input message type must be bytesraising%Message must be at most {} bytes longN%Additional data must be bytes or None,Nonce must be a {} bytes long bytes sequence*Key must be a {} bytes long bytes sequencer   unsigned long long *unsigned char[]Encryption failed.)r   
isinstancebytesexc	TypeErrorlenr   format
ValueErrorr
   r   r   NULLr   newr   )crypto_aead_chacha20poly1305_ietf_encryptCryptoErrorbufferr&   r'   r(   r)   mlen_aadaalenmxoutclen
ciphertextress              Z/sites/domain-asset-master/.venv/lib/python3.12/site-packages/nacl/bindings/crypto_aead.pyr?   r?   x   s   $ 7E"* w<D
BB/66>	
  3/3$;/ 5%  	FJEE6==7	
  3 	CHBB4;;6	
  Cxx;;E77)*D*E2J

7
7D'4uchhsC 3!8)3??C::j$q'*1--    rH   c                    t        t        | t              dt        j                         t        |       }t        |t        k  dj                  t              t        j                         t        t        |t              xs |du dt        j                         t        t        |t              xr t        |      t        k(  dj                  t              t        j                         t        t        |t              xr t        |      t        k(  dj                  t              t        j                         |t        z
  }t        j                  d      }t        j                  d	|      }|r|}t        |      }	nt        j                  }d
}	t        j                   ||t        j                  | |||	||	      }
t        |
d
k(  dt        j"                         t        j$                  ||d
         dd S )aR  
    Decrypt the given ``ciphertext`` using the IETF ratified chacha20poly1305
    construction described in RFC7539.

    :param ciphertext:
    :type ciphertext: bytes
    :param aad:
    :type aad: Optional[bytes]
    :param nonce:
    :type nonce: bytes
    :param key:
    :type key: bytes
    :return: message
    :rtype: bytes
    #Input ciphertext type must be bytesr-   (Ciphertext must be at most {} bytes longNr0   r1   r2   r3   r4   r   Decryption failed.)r   r6   r7   r8   r9   r:   *_aead_chacha20poly1305_ietf_CRYPTBYTES_MAXr;   r<   r
   r   r   r   r>   r=   r   )crypto_aead_chacha20poly1305_ietf_decryptr@   rA   rH   r'   r(   r)   rG   rF   rC   r&   rD   rE   rI   s              rJ   rQ   rQ      s   $ :u%- z?D
::2996	
  3/3$;/ 5%  	FJEE6==7	
  3 	CHBB4;;6	
  ;;E77)*Dgg'/G
Cxx

7
7sxxT4sC 3!8)3??C::gtAw'**rK   c                    t        t        | t              dt        j                         t        |       }t        |t        k  dj                  t              t        j                         t        t        |t              xs |du dt        j                         t        t        |t              xr t        |      t        k(  dj                  t              t        j                         t        t        |t              xr t        |      t        k(  dj                  t              t        j                         |r|}t        |      }nt        j                  }d}|t        z   }t        j                  d	      }t        j                  d
|      }	t        j                   |	|| |||t        j                  ||	      }
t        |
dk(  dt        j"                         t        j$                  |	|d         dd S )a[  
    Encrypt the given ``message`` using the "legacy" construction
    described in draft-agl-tls-chacha20poly1305.

    :param message:
    :type message: bytes
    :param aad:
    :type aad: Optional[bytes]
    :param nonce:
    :type nonce: bytes
    :param key:
    :type key: bytes
    :return: authenticated ciphertext
    :rtype: bytes
    r,   r-   r/   Nr0   r1   r2   r   r3   r4   r5   )r   r6   r7   r8   r9   r:   r   r;   r<   r   r   r   r=   r   r>   r   $crypto_aead_chacha20poly1305_encryptr@   rA   rB   s              rJ   rT   rT     s   $ 7E"* w<D
==/669	
  3/3$;/ 5%  	AJ@@6==2	
  3 	>H==4;;1	
  Cxx;;E77)*D*E2J

2
2D'4uchhsC 3!8)3??C::j$q'*1--rK   c                    t        t        | t              dt        j                         t        |       }t        |t        k  dj                  t              t        j                         t        t        |t              xs |du dt        j                         t        t        |t              xr t        |      t        k(  dj                  t              t        j                         t        t        |t              xr t        |      t        k(  dj                  t              t        j                         |t        z
  }t        j                  d      }t        j                  d	|      }|r|}t        |      }	nt        j                  }d
}	t        j                   ||t        j                  | |||	||	      }
t        |
d
k(  dt        j"                         t        j$                  ||d
         dd S )al  
    Decrypt the given ``ciphertext`` using the "legacy" construction
    described in draft-agl-tls-chacha20poly1305.

    :param ciphertext: authenticated ciphertext
    :type ciphertext: bytes
    :param aad:
    :type aad: Optional[bytes]
    :param nonce:
    :type nonce: bytes
    :param key:
    :type key: bytes
    :return: message
    :rtype: bytes
    rM   r-   rN   Nr0   r1   r2   r3   r4   r   rO   )r   r6   r7   r8   r9   r:   %_aead_chacha20poly1305_CRYPTBYTES_MAXr;   r<   r   r   r   r   r>   r=   r   $crypto_aead_chacha20poly1305_decryptr@   rA   rR   s              rJ   rW   rW   e  s   $ :u%- z?D
552991	
  3/3$;/ 5%  	AJ@@6==2	
  3 	>H==4;;1	
  66E77)*Dgg'/G
Cxx

2
2sxxT4sC 3!8)3??C::gtAw'**rK   c                    t        t        | t              dt        j                         t        |       }t        |t        k  dj                  t              t        j                         t        t        |t              xs |du dt        j                         t        t        |t              xr t        |      t        k(  dj                  t              t        j                         t        t        |t              xr t        |      t        k(  dj                  t              t        j                         |r|}t        |      }nt        j                  }d}|t        z   }t        j                  d	      }t        j                  d
|      }	t        j                   |	|| |||t        j                  ||	      }
t        |
dk(  dt        j"                         t        j$                  |	|d         dd S )aD  
    Encrypt the given ``message`` using the long-nonces xchacha20poly1305
    construction.

    :param message:
    :type message: bytes
    :param aad:
    :type aad: Optional[bytes]
    :param nonce:
    :type nonce: bytes
    :param key:
    :type key: bytes
    :return: authenticated ciphertext
    :rtype: bytes
    r,   r-   r/   Nr0   r1   r2   r   r3   r4   r5   )r   r6   r7   r8   r9   r:   r   r;   r<   r   r   r   r=   r   r>   r   *crypto_aead_xchacha20poly1305_ietf_encryptr@   rA   rB   s              rJ   rY   rY     s   $ 7E"* w<D
CC/66?	
  3/3$;/ 5%  	GJFF6==8	
  3 	DHCC4;;7	
  Cxx<<E77)*D*E2J

8
8D'4uchhsC 3!8)3??C::j$q'*1--rK   c                    t        t        | t              dt        j                         t        |       }t        |t        k  dj                  t              t        j                         t        t        |t              xs |du dt        j                         t        t        |t              xr t        |      t        k(  dj                  t              t        j                         t        t        |t              xr t        |      t        k(  dj                  t              t        j                         |t        z
  }t        j                  d      }t        j                  d	|      }|r|}t        |      }	nt        j                  }d
}	t        j                   ||t        j                  | |||	||	      }
t        |
d
k(  dt        j"                         t        j$                  ||d
         dd S )aU  
    Decrypt the given ``ciphertext`` using the long-nonces xchacha20poly1305
    construction.

    :param ciphertext: authenticated ciphertext
    :type ciphertext: bytes
    :param aad:
    :type aad: Optional[bytes]
    :param nonce:
    :type nonce: bytes
    :param key:
    :type key: bytes
    :return: message
    :rtype: bytes
    rM   r-   rN   Nr0   r1   r2   r3   r4   r   rO   )r   r6   r7   r8   r9   r:   +_aead_xchacha20poly1305_ietf_CRYPTBYTES_MAXr;   r<   r   r   r   r   r>   r=   r   *crypto_aead_xchacha20poly1305_ietf_decryptr@   rA   rR   s              rJ   r\   r\     s   $ :u%- z?D
;;2997	
  3/3$;/ 5%  	GJFF6==8	
  3 	DHCC4;;7	
  <<E77)*Dgg'/G
Cxx

8
8sxxT4sC 3!8)3??C::gtAw'**rK   c                    t        t        | t              dt        j                         t        |       }t        |t        k  dj                  t              t        j                         t        t        |t              xs |du dt        j                         t        t        |t              xr t        |      t        k(  dj                  t              t        j                         t        t        |t              xr t        |      t        k(  dj                  t              t        j                         |r|}t        |      }nt        j                  }d}|t        z   }t        j                  d	      }t        j                  d
|      }	t        j                   |	|| |||t        j                  ||	      }
t        |
dk(  dt        j"                         t        j$                  |	|d         dd S )a0  
    Encrypt the given ``message`` using the AEGIS-256
    construction.

    :param message:
    :type message: bytes
    :param aad:
    :type aad: Optional[bytes]
    :param nonce:
    :type nonce: bytes
    :param key:
    :type key: bytes
    :return: authenticated ciphertext
    :rtype: bytes
    r,   r-   r/   Nr0   r1   r2   r   r3   r4   r5   )r   r6   r7   r8   r9   r:   r   r;   r<   r   r   r   r=   r   r>   r   crypto_aead_aegis256_encryptr@   rA   rB   s              rJ   r^   r^   Q  s   $ 7E"* w<D
55/661	
  3/3$;/ 5%  	9J886==*	
  3L3s8/L#L4;;)	
  Cxx..E77)*D*E2J

*
*D'4uchhsC 3!8)3??C::j$q'*1--rK   c                    t        t        | t              dt        j                         t        |       }t        |t        k  dj                  t              t        j                         t        t        |t              xs |du dt        j                         t        t        |t              xr t        |      t        k(  dj                  t              t        j                         t        t        |t              xr t        |      t        k(  dj                  t              t        j                         |t        z
  }t        j                  d      }t        j                  d	|      }|r|}t        |      }	nt        j                  }d
}	t        j                   ||t        j                  | |||	||	      }
t        |
d
k(  dt        j"                         t        j$                  ||d
         dd S )aA  
    Decrypt the given ``ciphertext`` using the AEGIS-256
    construction.

    :param ciphertext: authenticated ciphertext
    :type ciphertext: bytes
    :param aad:
    :type aad: Optional[bytes]
    :param nonce:
    :type nonce: bytes
    :param key:
    :type key: bytes
    :return: message
    :rtype: bytes
    rM   r-   rN   Nr0   r1   r2   r3   r4   r   rO   )r   r6   r7   r8   r9   r:   _aead_aegis256_CRYPTBYTES_MAXr;   r<   r   r   r   r   r>   r=   r   crypto_aead_aegis256_decryptr@   rA   rR   s              rJ   ra   ra     s   $ :u%- z?D
--299)	
  3/3$;/ 5%  	9J886==*	
  3L3s8/L#L4;;)	
  ..E77)*Dgg'/G
Cxx

*
*sxxT4sC 3!8)3??C::gtAw'**rK   c                    t        t        | t              dt        j                         t        |       }t        |t        k  dj                  t              t        j                         t        t        |t              xs |du dt        j                         t        t        |t              xr t        |      t        k(  dj                  t              t        j                         t        t        |t              xr t        |      t        k(  dj                  t              t        j                         |r|}t        |      }nt        j                  }d}|t        z   }t        j                  d	      }t        j                  d
|      }	t        j                   |	|| |||t        j                  ||	      }
t        |
dk(  dt        j"                         t        j$                  |	|d         dd S )a1  
    Encrypt the given ``message`` using the AEGIS-128L
    construction.

    :param message:
    :type message: bytes
    :param aad:
    :type aad: Optional[bytes]
    :param nonce:
    :type nonce: bytes
    :param key:
    :type key: bytes
    :return: authenticated ciphertext
    :rtype: bytes
    r,   r-   r/   Nr0   r1   r2   r   r3   r4   r5   )r   r6   r7   r8   r9   r:   r    r;   r<   r   r   r   r=   r   r>   r   crypto_aead_aegis128l_encryptr@   rA   rB   s              rJ   rc   rc     s   $ 7E"* w<D
66/662	
  3/3$;/ 5%  	:J996==+	
  3M3s8/M#M4;;*	
  Cxx//E77)*D*E2J

+
+D'4uchhsC 3!8)3??C::j$q'*1--rK   c                    t        t        | t              dt        j                         t        |       }t        |t        k  dj                  t              t        j                         t        t        |t              xs |du dt        j                         t        t        |t              xr t        |      t        k(  dj                  t              t        j                         t        t        |t              xr t        |      t        k(  dj                  t              t        j                         |t        z
  }t        j                  d      }t        j                  d	|      }|r|}t        |      }	nt        j                  }d
}	t        j                   ||t        j                  | |||	||	      }
t        |
d
k(  dt        j"                         t        j$                  ||d
         dd S )aB  
    Decrypt the given ``ciphertext`` using the AEGIS-128L
    construction.

    :param ciphertext: authenticated ciphertext
    :type ciphertext: bytes
    :param aad:
    :type aad: Optional[bytes]
    :param nonce:
    :type nonce: bytes
    :param key:
    :type key: bytes
    :return: message
    :rtype: bytes
    rM   r-   rN   Nr0   r1   r2   r3   r4   r   rO   )r   r6   r7   r8   r9   r:   r`   r;   r<   r   r   r   r   r>   r=   r   crypto_aead_aegis128l_decryptr@   rA   rR   s              rJ   re   re   :  s   $ :u%- z?D
--299)	
  3/3$;/ 5%  	:J996==+	
  3M3s8/M#M4;;*	
  //E77)*Dgg'/G
Cxx

+
+sxxT4sC 3!8)3??C::gtAw'**rK   c                 V   t        t        j                         dk(  dt        j                         t        t        | t              dt        j                         t        |       }t        |t        k  dj                  t              t        j                         t        t        |t              xs |du dt        j                         t        t        |t              xr t        |      t        k(  dj                  t              t        j                         t        t        |t              xr t        |      t        k(  d	j                  t              t        j                         |r|}t        |      }nt        j                  }d
}|t         z   }t        j"                  d      }t        j"                  d|      }	t        j$                  |	|| |||t        j                  ||	      }
t        |
d
k(  dt        j&                         t        j(                  |	|d
         dd S )a{  
    Encrypt the given ``message`` using the AES-256-GCM
    construction.  Requires the Intel AES-NI extensions,
    or the ARM Crypto extensions.

    :param message:
    :type message: bytes
    :param aad:
    :type aad: Optional[bytes]
    :param nonce:
    :type nonce: bytes
    :param key:
    :type key: bytes
    :return: authenticated ciphertext
    :rtype: bytes
       +Construction requires hardware accelerationr-   r,   r/   Nr0   r1   r2   r   r3   r4   r5   )r   r   "crypto_aead_aes256gcm_is_availabler8   UnavailableErrorr6   r7   r9   r:   r%   r;   r<   r#   r!   r   r=   r$   r>   crypto_aead_aes256gcm_encryptr@   rA   rB   s              rJ   rk   rk     s   & ..0A55$$ 7E"* w<D
66/662	
  3/3$;/ 5%  	:J996==+	
  3M3s8/M#M4;;*	
  Cxx//E77)*D*E2J

+
+D'4uchhsC 3!8)3??C::j$q'*1--rK   c                 V   t        t        j                         dk(  dt        j                         t        t        | t              dt        j                         t        |       }t        |t        k  dj                  t              t        j                         t        t        |t              xs |du dt        j                         t        t        |t              xr t        |      t        k(  dj                  t              t        j                         t        t        |t              xr t        |      t        k(  d	j                  t              t        j                         |t        z
  }t        j                   d
      }t        j                   d|      }|r|}t        |      }	nt        j"                  }d}	t        j$                  ||t        j"                  | |||	||	      }
t        |
dk(  dt        j&                         t        j(                  ||d         dd S )a  
    Decrypt the given ``ciphertext`` using the AES-256-GCM
    construction.  Requires the Intel AES-NI extensions,
    or the ARM Crypto extensions.

    :param ciphertext: authenticated ciphertext
    :type ciphertext: bytes
    :param aad:
    :type aad: Optional[bytes]
    :param nonce:
    :type nonce: bytes
    :param key:
    :type key: bytes
    :return: message
    :rtype: bytes
    rg   rh   r-   rM   rN   Nr0   r1   r2   r3   r4   r   rO   )r   r   ri   r8   rj   r6   r7   r9   r:   r`   r;   r<   r#   r!   r$   r   r>   r=   crypto_aead_aes256gcm_decryptr@   rA   rR   s              rJ   rm   rm     s   & ..0A55$$ :u%- z?D
--299)	
  3/3$;/ 5%  	:J996==+	
  3M3s8/M#M4;;*	
  //E77)*Dgg'/G
Cxx

+
+sxxT4sC 3!8)3??C::gtAw'**rK   N)Ytypingr   naclr   r8   nacl._sodiumr   r   nacl.exceptionsr   *crypto_aead_chacha20poly1305_ietf_keybytesr   int__annotations__+crypto_aead_chacha20poly1305_ietf_nsecbytesr	   +crypto_aead_chacha20poly1305_ietf_npubbytesr
   (crypto_aead_chacha20poly1305_ietf_abytesr   2crypto_aead_chacha20poly1305_ietf_messagebytes_maxr   rP   %crypto_aead_chacha20poly1305_keybytesr   &crypto_aead_chacha20poly1305_nsecbytesr   &crypto_aead_chacha20poly1305_npubbytesr   #crypto_aead_chacha20poly1305_abytesr   -crypto_aead_chacha20poly1305_messagebytes_maxr   rV   +crypto_aead_xchacha20poly1305_ietf_keybytesr   ,crypto_aead_xchacha20poly1305_ietf_nsecbytesr   ,crypto_aead_xchacha20poly1305_ietf_npubbytesr   )crypto_aead_xchacha20poly1305_ietf_abytesr   3crypto_aead_xchacha20poly1305_ietf_messagebytes_maxr   r[   crypto_aead_aegis256_keybytesr   crypto_aead_aegis256_nsecbytesr   crypto_aead_aegis256_npubbytesr   crypto_aead_aegis256_abytesr   %crypto_aead_aegis256_messagebytes_maxr   r`   crypto_aead_aegis128l_keybytesr   crypto_aead_aegis128l_nsecbytesr   crypto_aead_aegis128l_npubbytesr   crypto_aead_aegis128l_abytesr   &crypto_aead_aegis128l_messagebytes_maxr    crypto_aead_aes256gcm_keybytesr!   crypto_aead_aes256gcm_nsecbytesr"   crypto_aead_aes256gcm_npubbytesr#   crypto_aead_aes256gcm_abytesr$   &crypto_aead_aes256gcm_messagebytes_maxr%   r7   r?   rQ   rT   rW   rY   r\   r^   ra   rc   re   rk   rm    rK   rJ   <module>r      s     " ! " 3C224 +C  4C335 ,S  4C335 ,S  1C002 )#  ;C::< 3C  7./ + .C--/ &s  /C..0 '  /C..0 '  ,C++- $S  6C557 .s  2)* & 4C335 ,S  5C446 -c  5C446 -c  2C113 *3  <C;;= 4S  8/0 ,
 &GS%F%F%H s H&Hc&H&H&J  J&Hc&H&H&J  J#B3#B#B#D S D-C--/ &s  *,GG  'Ic&H&H&J  J'Js'J'J'L  L'Js'J'J'L  L$DC$D$D$F c F.C..0 '  +-II  'Ic&H&H&J  J'Js'J'J'L  L'Js'J'J'L  L$DC$D$D$F c F.C..0 '  +-II 
L.L.!%L.16L.=BL.
L.^L+L+$UOL+49L+@EL+
L+^L.L.!%L.16L.=BL.
L.^L+L+$UOL+49L+@EL+
L+^L.L.!%L.16L.=BL.
L.^K+K+$UOK+49K+@EK+
K+\K.K.!%K.16K.=BK.
K.\J+J+$UOJ+49J+@EJ+
J+ZK.K.!%K.16K.=BK.
K.\J+J+$UOJ+49J+@EJ+
J+ZR.R.!%R.16R.=BR.
R.jQ+Q+$UOQ+49Q+@EQ+
Q+rK   