Ë
    Y�”j&I  ã                  ó¨  — U d Z ddlmZ ddlZddlZddlmZ ddlmZ ddl	m
Z
mZmZ ddlmZ ddlmZ dd	lmZmZ dd
lmZmZmZmZmZ ddlmZmZmZmZmZm Z  ddl!m"Z" ddl#m$Z$m%Z% ddl&m'Z' ddl(m)Z)m*Z*m+Z+ ddl,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5 ddl6m7Z7m8Z8m9Z9 ddl:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZAmBZBmCZCmDZD ddlEmFZF ddlGmHZHmIZI e0dz  ZJ ed¬«      ZKeKj™                  e"dgdgdg¬«        ed¬«      ZM eF eNe/xs d«      e.xs d«      ZOdaPdeQd<    e«       ZRdad„ZSdad „ZTdbd!„ZUdcd"„ZVeRj¯                   e«       «      ddd#„«       ZXeRj¯                   ed$«      «      ddd%„«       ZYeRj¯                  ej´                  «      ddd&„«       Z[ edd'¬(«      f	 	 	 ded)„Z\dfdgd*„Z]dhd+„Z^did,„Z_eMjÁ                  d-«      djd.„«       ZaeMjÁ                  d/«       ee\«      fdkd0„«       ZbeMjÁ                  d1«       ee\«      fdkd2„«       ZceMjÉ                  d3«       ee\«      fdld4„«       ZeeMjÉ                  d5«       ee\«      fdld6„«       ZfeMjÉ                  d7«       ee\«      fdld8„«       ZgeMjÉ                  d9«       ee\«      fdkd:„«       ZheMjÉ                  d;«       ee\«      fdkd<„«       ZieMjÁ                  d=«       ee\«      fdkd>„«       ZjeMjÉ                  d=«       ee\«      fdld?„«       ZkeMjÁ                  d@«       ee\«      fdkdA„«       ZleMjÁ                  dB«      dfdmdC„«       ZmeMjÁ                  dD«      dfdndE„«       ZndodF„ZodpdG„ZpdHdIœdqdJ„ZqdrdK„ZrdsdL„ZsdsdM„ZteMjÉ                  dN«       ee\«      fdldO„«       ZueMjÁ                  dP«       ee\«      fdtdQ„«       ZveMjÉ                  dR«      dudS„«       ZweMjÁ                  dT«      d ee\«      fdvdU„«       ZxeMjÉ                  dV«       ee\«      fdldW„«       ZyeKjõ                  eM«       eKjÁ                  dX«      dwdY„«       Z{eKjù                  dX e'eJ¬Z«      d¬[«       eKjû                  d\«      dsd]„«       Z~eKjû                  d^«      dsd_„«       Zdsd`„Z€y)xuc   Ð‘Ð¾Ñ‚ Ð»Ð¾Ð²Ñ†Ð° + API Ð¼Ð¸Ð½Ð¸-Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ�. Ð¡Ð°Ð¼Ð¾Ñ�Ñ‚Ð¾Ñ�Ñ‚ÐµÐ»ÑŒÐ½Ñ‹Ð¹ Ð¿Ñ€Ð¾ÐµÐºÑ‚.é    )ÚannotationsN)ÚPath)ÚOptional)ÚBotÚ
DispatcherÚF)ÚDefaultBotProperties)Ú	ParseMode)ÚCommandÚCommandStart)ÚInlineKeyboardButtonÚInlineKeyboardMarkupÚMenuButtonWebAppÚMessageÚ
WebAppInfo)Ú	APIRouterÚDependsÚFastAPIÚHeaderÚHTTPExceptionÚRequest)ÚCORSMiddleware)ÚFileResponseÚResponse)ÚStaticFiles)Úmake_media_tokenÚparse_media_tokenÚvalidate_init_data)	ÚADMIN_TG_IDÚAPI_HASHÚAPI_IDÚAPP_DIRÚ	BOT_TOKENÚPORTÚSSL_CERTFILEÚSSL_KEYFILEÚ
WEBAPP_URL)Úcreate_invoiceÚget_invoicesÚverify_webhook_signature)
Úadd_balanceÚget_invoiceÚ	get_ownerÚget_watch_settingsÚlist_active_invoicesÚlist_ownersÚmark_invoice_paidÚsave_invoiceÚsave_watch_settingsÚupsert_owner)ÚCatcherPool)Úformat_watch_alertÚset_alert_senderÚwebappÚCatcher)ÚtitleÚ*)Úallow_originsÚallow_methodsÚallow_headersz/api)ÚprefixÚ zOptional[Bot]Úbotc                 óP   — t         xs dj                  «       } | st        d«      ‚| S )Nr@   uT   Ð—Ð°Ð´Ð°Ð¹ BOT_TOKEN Ð² catcher/config.py (Ð¾Ñ‚Ð´ÐµÐ»ÑŒÐ½Ñ‹Ð¹ Ð±Ð¾Ñ‚ Ð² @BotFather).)r#   ÚstripÚRuntimeError)Útokens    ú-/var/www/api.ozpay.ru/ozpay/catcher/server.pyÚ_require_tokenrG   F   s(   € ÜŠ_˜"×#Ñ#Ó%€EÙÜÐqÓrÐrØ€Ló    c                 óz   — t         xs dj                  «       xs
 dt        › d�} | j                  d«      s| dz  } | S )Nr@   zhttps://api.ozpay.ru:ú/)r'   rC   r$   Úendswith©Úurls    rF   Ú_webapp_urlrN   M   s>   € ÜÒ˜×
"Ñ
"Ó
$Ò
GÐ*?Ä¸vÀQÐ(G€CØ�<‰<˜ÔØˆs‰
ˆØ€JrH   c            	     óX   — t        t        dt        t        «       ¬«      ¬«      gg¬«      S )Nu&   ÐžÑ‚ÐºÑ€Ñ‹Ñ‚ÑŒ Ð¿Ð°Ð½ÐµÐ»ÑŒ Ð»Ð¾Ð²Ñ†Ð°rL   ©ÚtextÚweb_app©Úinline_keyboard)r   r   r   rN   © rH   rF   Ú_open_app_markuprV   T   s.   € Üä Ø=Ü"¤{£}Ô5ôð
ð ôð rH   c           
   ƒ  óº  K  — t         €y | j                  d«      }|€y t        | «      \  }}d }|rŸ	 g }|j                  d«      xs g D ]x  }g }|D ]^  }|d   |d   dœ}	i }
|j                  d«      r|d   |
d<   |j                  d«      r|d   |
d<   	 |j                  t	        di |	¤|
¤Ž«       Œ` |j                  |«       Œz t        |¬«      }	 t         j                  t        |«      |t        j                  d	|¬
«      ƒ d {  –—†  y # t
        $ r |j                  t	        di |	¤Ž«       Y Œàw xY w# t
        $ r d }Y Œqw xY w7 Œ?# t
        $ r‰}t        d|› d|› �«       |€Y d }~y 	 t         j                  t        |«      |t        j                  d	¬«      ƒ d {  –—†7   n,# t
        $ r}t        d|› d|› �«       Y d }~nd }~ww xY wY d }~y Y d }~y d }~ww xY w­w)NÚalert_chat_idrT   rQ   rM   )rQ   rM   ÚstyleÚicon_custom_emoji_idrS   T)Úchat_idrQ   Ú
parse_modeÚdisable_web_page_previewÚreply_markupzcatcher alert failed chat=z: )r[   rQ   r\   r]   z catcher alert retry failed chat=rU   )rA   Úgetr6   Úappendr   Ú	Exceptionr   Úsend_messageÚintr
   ÚHTMLÚprint)Úpayloadr[   rQ   Úmarkup_dataÚmarkupÚrowsÚrowÚbuttonsÚbtnÚkwargsÚextraÚexcÚ	retry_excs                rF   Ú_send_watch_alertrq   _   s  è ø€ Ü
€{ØØ�k‰k˜/Ó*€GØ€ØÜ*¨7Ó3Ñ€Dˆ+Ø€FÙð	ØˆDØ"—‘Ð'8Ó9Ò?¸Rò %�Ø�Øò 
G�CØ&)¨&¡k¸#¸e¹*ÑE�FØ�EØ—w‘w˜wÔ'Ø),¨W©˜˜g™Ø—w‘wÐ5Ô6Ø8;Ð<RÑ8S˜Ð4Ñ5ðGØŸ™Ô';Ñ'N¸fÐ'NÈÑ'NÕOð
Gð —‘˜GÕ$ð%ô *¸$Ô?ˆFðMÜ×ÑÜ˜“LØÜ —~‘~Ø%)Øð ó 
÷ 	
ñ 	
øô %ò GØŸ™Ô';Ñ'E¸fÑ'EÖFðGûô ò 	ØŠFð	úð	
ùô ò MÜÐ*¨7¨)°2°c°UÐ;Ô<Øˆ>Üð	MÜ×"Ñ"Ü˜G›ØÜ$Ÿ>™>Ø)-ð	 #ó ÷ ò øô ò 	MÜÐ4°W°I¸RÀ	¸{ÐK×LÑLûð	MúÜLôûðMüs¿   ‚.G±A D3 ÂD
Â.!D3 Ã4E ÄEÄE Ä	GÄ
#D0Ä-D3 Ä/D0Ä0D3 Ä3EÄ>GÅ EÅGÅE Å	GÅGÅ"GÅ(3F"ÆFÆF"Æ!GÆ"	GÆ+GÆ<GÇGÇGÇ	
GÇGÇGc              ƒ  óV   K  — | j                  dt        «       ¬«      ƒ d {  –—†  y 7 Œ­w)Nuy  Ð­Ñ‚Ð¾ Ð¾Ñ‚Ð´ÐµÐ»ÑŒÐ½Ñ‹Ð¹ Ð±Ð¾Ñ‚ Ð»Ð¾Ð²Ð»Ð¸ Ñ�Ð¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ð¹.
ÐšÐ°Ð¶Ð´Ñ‹Ð¹ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»ÑŒ Ð¿Ð¾Ð´ÐºÐ»ÑŽÑ‡Ð°ÐµÑ‚ Ð¾Ð´Ð¸Ð½ Ñ�Ð²Ð¾Ð¹ Telegram-Ð°ÐºÐºÐ°ÑƒÐ½Ñ‚ ÐºÐ°Ðº ÑŽÐ·ÐµÑ€Ð±Ð¾Ñ‚ Ð¸ Ð»Ð¾Ð²Ð¸Ñ‚ ÐºÐ»ÑŽÑ‡ÐµÐ²Ñ‹Ðµ Ñ�Ð»Ð¾Ð²Ð° Ð² Ð²Ñ‹Ð±Ñ€Ð°Ð½Ð½Ñ‹Ñ… Ñ‡Ð°Ñ‚Ð°Ñ….

ÐžÑ‚ÐºÑ€Ð¾Ð¹Ñ‚Ðµ Ð¼Ð¸Ð½Ð¸-Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ðµ, Ñ‡Ñ‚Ð¾Ð±Ñ‹ Ð²Ð¾Ð¹Ñ‚Ð¸ Ð¸ Ð½Ð°Ñ�Ñ‚Ñ€Ð¾Ð¸Ñ‚ÑŒ Ð¼Ð¾Ð½Ð¸Ñ‚Ð¾Ñ€Ð¸Ð½Ð³.)r^   )ÚanswerrV   ©Úmessages    rF   Úon_startrv   ’   s/   è ø€ à
�.‰.ð	|ô &Ó'ð ó ÷ ò ús   ‚)¡'¢)Úidc              ƒ  óv   K  — | j                   }| j                  d|j                  › d�«      ƒ d {  –—†  y 7 Œ­w)Nu#   chat_id Ñ�Ñ‚Ð¾Ð³Ð¾ Ñ‡Ð°Ñ‚Ð°: <code>u·   </code>
Ð’Ñ�Ñ‚Ð°Ð²ÑŒÑ‚Ðµ ÐµÐ³Ð¾ Ð² Ð¼Ð¸Ð½Ð¸-Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ð¸ â€” Ñ�ÑŽÐ´Ð° Ð±ÑƒÐ´ÑƒÑ‚ Ð¿Ñ€Ð¸Ñ…Ð¾Ð´Ð¸Ñ‚ÑŒ Ð¾Ð¿Ð¾Ð²ÐµÑ‰ÐµÐ½Ð¸Ñ�. Ð‘Ð¾Ñ‚ Ð´Ð¾Ð»Ð¶ÐµÐ½ Ð¾Ñ�Ñ‚Ð°Ð²Ð°Ñ‚ÑŒÑ�Ñ� Ð² Ñ‡Ð°Ñ‚Ðµ.)Úchatrs   rw   )ru   ry   s     rF   Úon_idrz   �   s<   è ø€ à�<‰<€DØ
�.‰.Ø
-¨d¯g©g¨Yð 7@ð 	@ó÷ ò ús   ‚/9±7²9c              ƒ  óB   K  — | j                  d«      ƒ d {  –—†  y 7 Œ­w)NuK   Ð�Ð°Ñ�Ñ‚Ñ€Ð¾Ð¹ÐºÐ¸ Ñ�Ð¾Ñ…Ñ€Ð°Ð½Ñ�ÑŽÑ‚Ñ�Ñ� Ð² Ð¼Ð¸Ð½Ð¸-Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ð¸.)rs   rt   s    rF   Úon_web_app_datar|   §   s   è ø€ à
�.‰.ÐfÓ
g×gÒgús   ‚—˜zX-Telegram-Init-Data)ÚdefaultÚaliasc              ƒ  ó¦   K  — 	 t        | xs dt        «       «      }t        |«       |S # t        $ r}t        dt	        |«      ¬«      |‚d }~ww xY w­w)Nr@   é‘  ©Ústatus_codeÚdetail)r   rG   Ú
ValueErrorr   Ústrr4   )Úx_telegram_init_dataÚuserro   s      rF   Úcurrent_userrˆ   ¬   sV   è ø€ ðGÜ!Ð"6Ò"<¸"¼nÓ>NÓOˆô �ÔØ€Køô ò GÜ¨´C¸³HÔ=À3ÐFûðGüs$   ‚A„) œA©	A²A	Á	AÁAc              ƒ  óŒ   K  — 	 t        | t        «       «      }d|iS # t        $ r}t        dt	        |«      ¬«      |‚d }~ww xY w­w)Nr€   r�   rw   )r   rG   r„   r   r…   )ÚtÚuser_idro   s      rF   Ú
media_userrŒ   ·   sM   è ø€ ðGÜ# A¤~Ó'7Ó8ˆð �'ˆ?Ðøô ò GÜ¨´C¸³HÔ=À3ÐFûðGüs"   ‚A„ ˜Aœ	A¥<¼AÁAc                ó@   — | st        dd¬«      ‚t        | dddi¬«      S )Né”  u   Ð�ÐµÑ‚ Ñ„Ð¾Ñ‚Ð¾r�   z
image/jpegzCache-Controlzprivate, max-age=900)ÚcontentÚ
media_typeÚheaders)r   r   )Údatas    rF   Ú_photo_responser“   ¿   s/   € ÙÜ¨Ð4EÔFÐFÜØØØ Ð"8Ð9ôð rH   c                ó‚   — t        | t        «      rt        dt        | «      ¬«      S t        dt        | «      xs d¬«      S )Né�  r�   u   ÐžÑˆÐ¸Ð±ÐºÐ° ÑŽÐ·ÐµÑ€Ð±Ð¾Ñ‚Ð°)Ú
isinstancer„   r   r…   ©ro   s    rF   Ú_http_errorr˜   É   s4   € Ü�#”zÔ"Ü¨´S¸³XÔ>Ð>Ü S´°S³Ò1\Ð=\Ô]Ð]rH   z/healthc               ƒ  ó   K  — ddiS ­w)NÚstatusÚokrU   rU   rH   rF   Úhealthrœ   Ï   s   è ø€ à�dÐÐùs   ‚z/mec              ƒ  óä  K  — t         j                  | d   «      ƒ d {  –—† }t        | d   «      }|d   |d   xs | j                  d«      xs d|d   xs | j                  d«      xs d|d   xs | j                  d«      xs d|j                  d«      xs ddœt        | d   t	        «       «      t        | d   «      t        t        «      k(  |j                  «       t        | d   «      d	œS 7 ŒÏ­w)
Nrw   Ú
first_namer@   Ú	last_nameÚusernameÚbalancer   )rw   rž   rŸ   r    r¡   )r‡   Úmedia_tokenÚadminÚsessionÚwatch)	Úpoolr_   r-   r   rG   rc   r   Úsnapshotr.   )r‡   ÚruntimeÚowners      rF   Úapi_merª   Ô   sè   è ø€ ä—H‘H˜T $™ZÓ(×(€GÜ�d˜4‘jÓ!€Eð ˜‘+Ø Ñ-ÒM°·±¸,Ó1GÒMÈ2Ø˜{Ñ+ÒJ¨t¯x©x¸Ó/DÒJÈØ˜jÑ)ÒG¨T¯X©X°jÓ-AÒGÀRØ—y‘y Ó+Ò0¨qñ
ô (¨¨T©
´NÓ4DÓEÜ�T˜$‘Z“¤C¬Ó$4Ñ4Ø×#Ñ#Ó%Ü# D¨¡JÓ/ñð ð )ús   ‚C0žC.ŸCC0z/sessionc              ƒ  ón   K  — t         j                  | d   «      ƒ d {  –—† }|j                  «       S 7 Œ­w©Nrw   )r¦   r_   r§   ©r‡   r¨   s     rF   Úapi_sessionr®   ç   s/   è ø€ ä—H‘H˜T $™ZÓ(×(€GØ×ÑÓÐð )ús   ‚5ž3Ÿ5z/session/loginc              ƒ  ó8  K  — | j                  «       ƒ d {  –—† }t        j                  |d   «      ƒ d {  –—† }	 |j                  t	        |j                  d«      xs d«      «      ƒ d {  –—† S 7 ŒZ7 Œ<7 Œ# t
        t        f$ r}t        |«      |‚d }~ww xY w­w)Nrw   Úphoner@   )Újsonr¦   r_   Úrequest_coder…   r„   rD   r˜   ©Úrequestr‡   Úbodyr¨   ro   s        rF   Úapi_session_loginr¶   í   sƒ   è ø€ à—‘“×€DÜ—H‘H˜T $™ZÓ(×(€Gð(Ø×)Ñ)¬#¨d¯h©h°wÓ.?Ò.EÀ2Ó*FÓG×GÐGð  øØ(øàGùÜœÐ%ò (Ü˜#Ó CÐ'ûð(üóT   ‚B–A1—B¶A3·B¼0A7 Á,A5Á-A7 Á0BÁ3BÁ5A7 Á7BÂBÂBÂBz/session/codec              ƒ  ó8  K  — | j                  «       ƒ d {  –—† }t        j                  |d   «      ƒ d {  –—† }	 |j                  t	        |j                  d«      xs d«      «      ƒ d {  –—† S 7 ŒZ7 Œ<7 Œ# t
        t        f$ r}t        |«      |‚d }~ww xY w­w)Nrw   Úcoder@   )r±   r¦   r_   Úsubmit_coder…   r„   rD   r˜   r³   s        rF   Úapi_session_coder»   ÷   sƒ   è ø€ à—‘“×€DÜ—H‘H˜T $™ZÓ(×(€Gð(Ø×(Ñ(¬¨T¯X©X°fÓ-=Ò-CÀÓ)DÓE×EÐEð  øØ(øàEùÜœÐ%ò (Ü˜#Ó CÐ'ûð(ür·   z/session/passwordc              ƒ  ó8  K  — | j                  «       ƒ d {  –—† }t        j                  |d   «      ƒ d {  –—† }	 |j                  t	        |j                  d«      xs d«      «      ƒ d {  –—† S 7 ŒZ7 Œ<7 Œ# t
        t        f$ r}t        |«      |‚d }~ww xY w­w)Nrw   Úpasswordr@   )r±   r¦   r_   Úsubmit_passwordr…   r„   rD   r˜   r³   s        rF   Úapi_session_passwordr¿     sƒ   è ø€ à—‘“×€DÜ—H‘H˜T $™ZÓ(×(€Gð(Ø×,Ñ,¬S°·±¸*Ó1EÒ1KÈÓ-LÓM×MÐMð  øØ(øàMùÜœÐ%ò (Ü˜#Ó CÐ'ûð(ür·   z/session/cancelc              ƒ  ó‚   K  — t         j                  | d   «      ƒ d {  –—† }|j                  «       ƒ d {  –—† S 7 Œ7 Œ­wr¬   )r¦   r_   Úcancel_loginr­   s     rF   Úapi_session_cancelrÂ     s6   è ø€ ä—H‘H˜T $™ZÓ(×(€GØ×%Ñ%Ó'×'Ð'ð )øØ'ús   ‚?ž;Ÿ?¶=·?½?z/session/logoutc              ƒ  ó¾   K  — t         j                  | d   «      ƒ d {  –—† }	 |j                  «       ƒ d {  –—† S 7 Œ7 Œ# t        $ r}t	        |«      |‚d }~ww xY w­wr¬   )r¦   r_   ÚlogoutrD   r˜   )r‡   r¨   ro   s      rF   Úapi_session_logoutrÅ     sU   è ø€ ä—H‘H˜T $™ZÓ(×(€Gð(Ø—^‘^Ó%×%Ð%ð )øà%ùÜò (Ü˜#Ó CÐ'ûð(üs>   ‚Až<ŸA¤A  ·>¸A  »A¾A  Á 	AÁ	AÁAÁAz/watchc              ƒ  ó&   K  — t        | d   «      S ­wr¬   )r.   ©r‡   s    rF   Ú	api_watchrÈ     s   è ø€ ä˜d 4™jÓ)Ð)ùs   ‚c              ƒ  ó–   K  — | j                  «       ƒ d {  –—† }t        |t        «      st        dd¬«      ‚t	        |d   |«      S 7 Œ0­w)Nr•   u+   Ð�ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ñ‹Ðµ Ð½Ð°Ñ�Ñ‚Ñ€Ð¾Ð¹ÐºÐ¸r�   rw   )r±   r–   Údictr   r3   )r´   r‡   rµ   s      rF   Úapi_watch_saverË     sB   è ø€ à—‘“×€DÜ�dœDÔ!Ü¨Ð4aÔbÐbÜ˜t D™z¨4Ó0Ð0ð  ús   ‚A	–A—1A	z/dialogsc              ƒ  óÆ   K  — t         j                  | d   «      ƒ d {  –—† }	 |j                  «       ƒ d {  –—† }d|iS 7 Œ!7 Œ
# t        $ r}t	        |«      |‚d }~ww xY w­w)Nrw   Údialogs)r¦   r_   Úlist_dialogsrD   r˜   )r‡   r¨   rÍ   ro   s       rF   Úapi_dialogsrÏ   '  sc   è ø€ ä—H‘H˜T $™ZÓ(×(€Gð(Ø×,Ñ,Ó.×.ˆð �wÐÐð )øà.ùÜò (Ü˜#Ó CÐ'ûð(üsA   ‚A!žA ŸA!¤A ·A¸A ¼A!ÁA Á	AÁAÁAÁA!z/dialogs/{chat_id}/photoc              ƒ  ó   K  — t        |«      ƒ d {  –—† }t        j                  |d   «      ƒ d {  –—† }	 |j                  | «      ƒ d {  –—† }t        |«      S 7 ŒI7 Œ+7 Œ# t        $ r}t        |«      |‚d }~ww xY w­wr¬   )rŒ   r¦   r_   Údialog_photorD   r˜   r“   )r[   rŠ   r‡   r¨   r’   ro   s         rF   Úapi_dialog_photorÒ   1  su   è ø€ ä˜A“×€DÜ—H‘H˜T $™ZÓ(×(€Gð(Ø×)Ñ)¨'Ó2×2ˆô ˜4Ó Ð ð øØ(øà2ùÜò (Ü˜#Ó CÐ'ûð(üsT   ‚A>‘A’A>±A²A>·A! ÁAÁA! ÁA>ÁA>ÁA! Á!	A;Á*A6Á6A;Á;A>z/session/photoc              ƒ  óþ   K  — t        | «      ƒ d {  –—† }t        j                  |d   «      ƒ d {  –—† }	 |j                  «       ƒ d {  –—† }t        |«      S 7 ŒH7 Œ*7 Œ# t        $ r}t        |«      |‚d }~ww xY w­wr¬   )rŒ   r¦   r_   Ú
self_photorD   r˜   r“   )rŠ   r‡   r¨   r’   ro   s        rF   Úapi_session_photorÕ   <  ss   è ø€ ä˜A“×€DÜ—H‘H˜T $™ZÓ(×(€Gð(Ø×'Ñ'Ó)×)ˆô ˜4Ó Ð ð øØ(øà)ùÜò (Ü˜#Ó CÐ'ûð(üsT   ‚A=‘A’A=±A²A=·A  Á
AÁA  ÁA=ÁA=ÁA  Á 	A:Á)A5Á5A:Á:A=c                óZ   — t        | d   «      t        t        «      k7  rt        dd¬«      ‚y )Nrw   i“  u   Ð�ÐµÑ‚ Ð´Ð¾Ñ�Ñ‚ÑƒÐ¿Ð°r�   )rc   r   r   rÇ   s    rF   Ú_require_adminr×   G  s*   € Ü
ˆ4�‰:ƒœ#œkÓ*Ò*Ü¨Ð4KÔLÐLð +rH   c                ó~   — 	 t        t        | j                  d«      xs d«      d«      S # t        t        f$ r Y yw xY w)NÚamountr   é   g        )ÚroundÚfloatr_   Ú	TypeErrorr„   )Úinvs    rF   Ú_invoice_amount_usdrß   L  s>   € ðÜ”U˜3Ÿ7™7 8Ó,Ò1°Ó2°AÓ6Ð6øÜ”zÐ"ò Ùðús   ‚'* ª<»<F©r£   c             ƒ  ó¦   K  — t         €y |rdnd}	 t         j                  t        | «      |› d|d›d�«      ƒ d {  –—†  y 7 Œ# t        $ r Y y w xY w­w)Nu(   Ð�Ð´Ð¼Ð¸Ð½ Ð¿Ð¾Ð¿Ð¾Ð»Ð½Ð¸Ð» Ð±Ð°Ð»Ð°Ð½Ñ�u   Ð‘Ð°Ð»Ð°Ð½Ñ� Ð¿Ð¾Ð¿Ð¾Ð»Ð½ÐµÐ½z: <b>$z.2fz</b>)rA   rb   rc   ra   )Útg_idrÙ   r£   r?   s       rF   Ú_notify_balancerã   S  sb   è ø€ Ü
€{ØÙ;@Ñ7ÐFe€FðÜ×ÑÜ�‹JØˆh�f˜V C˜L¨Ð-ó
÷ 	
ò 	
ùô ò Ùðüs7   ‚A‘)A ºA »A ¿AÁ A Á	AÁAÁAÁAc              ƒ  óæ  K  — t        | j                  d«      xs d«      dk7  ry 	 t        | j                  d«      xs d«      }|dk  ry t        |«      }|€š	 t        | j                  d«      xs d«      }t        | «      }|dk  s|dk  ry t        |||t        | j                  d«      xs | j                  d«      xs d«      t        | j                  d	«      xs d«      «       t        |«      }|r|j                  d«      dk(  r|S t        |«      }|r+|j                  d
«      rt        |d   |d   «      ƒ d {  –—†  |S # t        t        f$ r Y y w xY w# t        t        f$ r d}Y Œõw xY w7 Œ2­w)Nrš   r@   ÚpaidÚ
invoice_idr   rf   Úbot_invoice_urlÚpay_urlÚmini_app_invoice_urlÚcreditedÚowner_tg_idÚ
amount_usd)
r…   r_   rc   rÝ   r„   r,   rß   r2   r1   rã   )rÞ   ræ   ÚlocalÚowner_idrÙ   rê   s         rF   Úapply_paid_invoicerï   `  sv  è ø€ Ü
ˆ3�7‰7�8ÓÒ" Ó# vÒ-ØðÜ˜Ÿ™ Ó.Ò3°!Ó4ˆ
ð �Q‚ØÜ˜
Ó#€EØ€}ð	Ü˜3Ÿ7™7 9Ó-Ò2°Ó3ˆHô % SÓ)ˆØ�qŠ=˜F ašKØÜØØØÜ�—‘Ð)Ó*ÒF¨c¯g©g°iÓ.@ÒFÀBÓGÜ�—‘Ð.Ó/Ò5°2Ó6ô	
ô ˜JÓ'ˆÙ�E—I‘I˜hÓ'¨6Ò1ØˆÜ  Ó,€HÙ�H—L‘L Ô,Ü˜h }Ñ5°xÀÑ7MÓN×NÐNØ€Oøô5 ”zÐ"ò Ùðûô œ:Ð&ò 	ØŠHð	úð" 	OúsY   ‚#E1¦E ÁE1ÁE Á6CE1Ä<E/Ä=E1ÅEÅE1ÅEÅE1ÅE,Å)E1Å+E,Å,E1c               ƒ  ó¸  K  — t        «       } | sy 	 t        | D �cg c]  }|d   ‘Œ	 c}«      ƒ d {  –—† }i }|D ]6  }t	        |t
        «      sŒ|j                  d«      €Œ&||t        |d   «      <   Œ8 | D ]5  }|j                  t        |d   «      «      }|sŒ#t        |«      ƒ d {  –—†  Œ7 y c c}w 7 Œ�# t        $ r}t        d|› �«       Y d }~y d }~ww xY w7 Œ2­w)Nræ   zcatcher pay poll: )	r/   r)   ra   re   r–   rÊ   r_   rc   rï   )ÚpendingÚitemÚremotero   Úby_idrí   rÞ   s          rF   Úsync_active_invoicesrõ   ‚  sã   è ø€ Ü"Ó$€GÙØðÜ#ÀGÖ$L¸D T¨,Ó%7Ò$LÓM×Mˆð €EØò 2ˆÜ�dœDÕ! d§h¡h¨|Ó&<Ñ&HØ-1ˆE”#�d˜<Ñ(Ó)Ò*ð2ð ò *ˆØ�i‰iœ˜E ,Ñ/Ó0Ó1ˆÚÜ$ SÓ)×)Ñ)ñ*ùò %MÐMùÜò ÜÐ" 3 %Ð(Ô)Üûðúð *úse   ‚C‘	B4 šB-¦
B4 °B2±B4 µCÁCÁ7CÂCÂ%CÂ&CÂ-B4 Â4	CÂ=CÃCÃCÃCc               ƒ  ó¾   K  — 	 t        j                  d«      ƒ d {  –—†  	 t        «       ƒ d {  –—†  Œ17 Œ7 Œ# t        $ r} t	        d| › �«       Y d } ~ Œ!d } ~ ww xY w­w)Né   zcatcher pay poller: )ÚasyncioÚsleeprõ   ra   re   r—   s    rF   Ú_invoice_pollerrú   •  sZ   è ø€ Ø
Ü�m‰m˜BÓ×Ðð	0Ü&Ó(×(Ð(ð Øøà(ùÜò 	0ÜÐ(¨¨Ð.×/Ñ/ûð	0üs@   ‚Aœ5�A¢9 ¯7°9 ´A·9 ¹	AÁAÁAÁAÁAz/payc           	   ƒ  ó  K  — | j                  «       ƒ d {  –—† }	 t        t        |j                  d«      xs d«      d«      }|dk  rt        dd¬«      ‚|dkD  rt        dd	¬«      ‚	 t        ||d
   ¬«      ƒ d {  –—† }t        |j                  d«      xs d«      }|dk  rt        dd¬«      ‚t        |j                  d«      xs |j                  d«      xs d«      }t        |j                  d«      xs |j                  d«      xs d«      }t        ||d
   |||«       ||||dt        |d
   «      j                  d«      xs ddœS 7 �Œ7# t        t
        f$ r d}Y �Œ w xY w7 Œë# t        $ r}t        |«      |‚d }~ww xY w­w)NrÙ   r   rÚ   é   r•   u   ÐœÐ¸Ð½Ð¸Ð¼ÑƒÐ¼ $1r�   éô  u   ÐœÐ°ÐºÑ�Ð¸Ð¼ÑƒÐ¼ $500rw   )rì   rë   ræ   iö  u%   Crypto Pay Ð½Ðµ Ñ�Ð¾Ð·Ð´Ð°Ð» Ñ�Ñ‡Ñ‘Ñ‚rç   rè   r@   ré   Úweb_app_invoice_urlÚactiver¡   )ræ   rÙ   rè   Úmini_urlrš   r¡   )r±   rÛ   rÜ   r_   rÝ   r„   r   r(   rD   r˜   rc   r…   r2   r-   )	r´   r‡   rµ   rÙ   Úinvoicero   ræ   rè   r   s	            rF   Úapi_pay_creater  ž  s�  è ø€ à—‘“×€DðÜ”u˜TŸX™X hÓ/Ò4°1Ó5°qÓ9ˆð �‚zÜ¨Ð4GÔHÐHØ�‚|Ü¨Ð4KÔLÐLð(Ü&°&ÀdÈ4ÁjÔQ×Qˆô �W—[‘[ Ó.Ò3°!Ó4€JØ�Q‚Ü¨Ð4[Ô\Ð\Ü�'—+‘+Ð/Ó0ÒP°G·K±KÀ	Ó4JÒPÈbÓQ€GÜØ�‰Ð*Ó+ò 	Ø�;‰;Ð,Ó-ò	àó€Hô
 �˜T $™Z¨°¸(ÔCà ØØØØÜ˜T $™ZÓ(×,Ñ,¨YÓ7Ò<¸1ñð ð/  úô ”zÐ"ò Ø‹ðúð RùÜò (Ü˜#Ó CÐ'ûð(üsi   ‚F–E—Fœ(E Á$FÁ)E* Á<E(Á=E* ÂCFÅE%Å!FÅ$E%Å%FÅ(E* Å*	FÅ3E?Å?FÆFz/pay/{invoice_id}c              ƒ  óv  K  — t        | «      }|rt        |d   «      t        |d   «      k7  rt        dd¬«      ‚|d   dk7  r1	 t        | g«      ƒ d {  –—† }|rt        |d   «      ƒ d {  –—† }|r|}t        |d   «      }|d	   |d   |d
   |j                  d«      xs ddœS 7 ŒQ# t        $ r g }Y Œ\w xY w7 ŒL­w)Nrë   rw   rŽ   u   Ð¡Ñ‡Ñ‘Ñ‚ Ð½Ðµ Ð½Ð°Ð¹Ð´ÐµÐ½r�   rš   rå   r   ræ   rì   r¡   )ræ   rš   rÙ   r¡   )r,   rc   r   r)   rD   rï   r-   r_   )ræ   r‡   rí   ró   rê   r©   s         rF   Úapi_pay_statusr  Á  sÖ   è ø€ ä˜
Ó#€EÙ”C˜˜mÑ,Ó-´°T¸$±Z³Ò@Ü¨Ð4PÔQÐQØˆX�˜&Ò ð	Ü'¨¨Ó5×5ˆFñ Ü/°°q±	Ó:×:ˆHÙØ �Ü�d˜4‘jÓ!€Eà˜LÑ)Ø˜‘/Ø˜Ñ%Ø—9‘9˜YÓ'Ò,¨1ñ	ð ð 6ùÜò 	ØŠFð	úð ;úsH   ‚A B9ÁB& ÁB$ÁB& ÁB9Á*B7Á+9B9Â$B& Â&B4Â1B9Â3B4Â4B9z/crypto/webhookc              ƒ  óÎ  K  — | j                  «       ƒ d {  –—† }| j                  j                  d«      xs | j                  j                  d«      xs d}	 t        ||«      st	        dd¬«      ‚	 	 t        j                  |j                  d«      xs d	«      }t        |j                  d«      xs d«      dk(  rU|j                  d«      xs i }t        |t        «      r0t        |«      }|j                  dd«       t        |«      ƒ d {  –—†  ddiS 7 Œþ# t
        $ r}t	        dt        |«      ¬«      |‚d }~ww xY w# t        j                  $ r t	        d
d¬«      ‚w xY w7 ŒV­w)Nzcrypto-pay-api-signaturezCrypto-Pay-Api-Signaturer@   r€   u   Ð�ÐµÐ²ÐµÑ€Ð½Ð°Ñ� Ð¿Ð¾Ð´Ð¿Ð¸Ñ�ÑŒr�   rý   zutf-8z{}r•   u   Ð�ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ñ‹Ð¹ JSONÚupdate_typeÚinvoice_paidrf   rš   rå   r›   T)rµ   r‘   r_   r*   r   rD   r…   r±   ÚloadsÚdecodeÚJSONDecodeErrorr–   rÊ   Ú
setdefaultrï   )r´   ÚrawÚ	signaturero   r’   rf   s         rF   Úapi_crypto_webhookr  Ø  sK  è ø€ à—‘“×
€CØ—‘×#Ñ#Ð$>Ó?ÒxÀ7Ç?Á?×CVÑCVÐWqÓCrÒxÐvx€IðGÜ'¨¨YÔ7Ü¨CÐ8YÔZÐZð 8ðUÜ�z‰z˜#Ÿ*™* WÓ-Ò5°Ó6ˆô ˆ4�8‰8�MÓ"Ò( bÓ)¨^Ò;Ø—(‘(˜9Ó%Ò+¨ˆÜ�gœtÔ$Ü˜7“mˆGØ×Ñ˜x¨Ô0Ü$ WÓ-×-Ð-Ø�$ˆ<Ðð# ùô
 ò GÜ¨´C¸³HÔ=À3ÐFûðGûô ×Ñò UÜ¨Ð4SÔTÐTðUúð .úsY   ‚E%–D—A E%ÁD Á1E%Á3(D? ÂA1E%ÄE#Ä	E%Ä	D<Ä D7Ä7D<Ä<E%Ä?!E Å E%z/admin/usersc              ƒ  ó:   K  — t        |«       dt        | «      iS ­w)NÚusers)r×   r0   )Úqr‡   s     rF   Úapi_admin_usersr  î  s   è ø€ ä�4ÔØ”[ “^Ð$Ð$ùs   ‚z/admin/creditc              ƒ  óä  K  — t        |«       | j                  «       ƒ d {  –—† }	 t        |j                  d«      xs d«      }|dk  rt        dd¬«      ‚	 t        t        |j                  d«      xs d«      d«      }|dk  rt        dd	¬«      ‚t        ||d
|d   ¬«      }t        ||d¬«      ƒ d {  –—†  d|iS 7 Œœ# t        t
        f$ r d}Y ŒŽw xY w# t        t
        f$ r d}Y Œjw xY w7 Œ8­w)Nrâ   r   r•   u   Ð£ÐºÐ°Ð¶Ð¸Ñ‚Ðµ Telegram IDr�   rÙ   rÚ   g{®Gáz„?u   Ð£ÐºÐ°Ð¶Ð¸Ñ‚Ðµ Ñ�ÑƒÐ¼Ð¼Ñƒ Ð² $r£   rw   )ÚreasonÚactor_tg_idTrà   r‡   )r×   r±   rc   r_   rÝ   r„   r   rÛ   rÜ   r+   rã   )r´   r‡   rµ   ÚtargetrÙ   r©   s         rF   Úapi_admin_creditr  ô  sú   è ø€ ä�4ÔØ—‘“×€DðÜ�T—X‘X˜gÓ&Ò+¨!Ó,ˆð �‚{Ü¨Ð4PÔQÐQðÜ”u˜TŸX™X hÓ/Ò4°1Ó5°qÓ9ˆð �‚}Ü¨Ð4TÔUÐUÜ˜ ¨wÀDÈÁJÔO€EÜ
˜& &°Ô
5×5Ð5Ø�Eˆ?Ðð  ùô ”zÐ"ò ØŠðûô ”zÐ"ò ØŠðúð
 6úsb   ‚C0¡B>¢C0§C  ÁC0Á(C Â 5C0Â5C.Â6	C0Ã CÃC0ÃCÃC0ÃC+Ã(C0Ã*C+Ã+C0rJ   c               ƒ  ó.   K  — t        t        dz  «      S ­w)Nz
index.html)r   Ú
WEBAPP_DIRrU   rH   rF   Úindexr    s   è ø€ äœ
 \Ñ1Ó2Ð2ùs   ‚)Ú	directory)ÚnameÚstartupc            	   ƒ  ól  K  — t        «       } t        | t        t        j                  ¬«      ¬«      at        t        «       	 t
        j                  t        dt        t        «       ¬«      ¬«      ¬«      ƒ d {  –—†  t        j                  «       ƒ d {  –—†  t!        j"                  t$        j'                  t
        «      «       t!        j"                  t)        «       «       t        dt*        › �«       t        d	t        «       › d
�«       y 7 Œ“# t        $ r}t        d|› �«       Y d }~Œ­d }~ww xY w7 Œ�­w)N)r\   )rE   r}   u   ÐŸÐ°Ð½ÐµÐ»ÑŒrL   rP   )Úmenu_buttonzcatcher menu button: u'   catcher bot + mini-app Ð½Ð° Ð¿Ð¾Ñ€Ñ‚Ñƒ zcrypto webhook: uX   api/crypto/webhook  (Ð²ÐºÐ»ÑŽÑ‡Ð¸ Ð² @CryptoBot â†’ Crypto Pay â†’ My Apps â†’ Webhooks))rG   r   r	   r
   rd   rA   r7   rq   Úset_chat_menu_buttonr   r   rN   ra   re   r¦   Úboot_allrø   Úcreate_taskÚdpÚstart_pollingrú   r$   )rE   ro   s     rF   r  r    sú   è ø€ ô Ó€EÜ
�EÔ#7Ä9Ç>Á>Ô#RÔ
S€CÜÔ&Ô'ð-Ü×&Ñ&Ü(¨nÄjÔU`ÓUbÔFcÔdð 'ó 
÷ 	
ð 	
ô
 �-‰-‹/×ÐÜ×Ñœ×(Ñ(¬Ó-Ô.Ü×ÑœÓ)Ô*Ü	Ð3´D°6Ð
:Ô;Ü	ØÜ‹=ˆ/ð Oð	Oõð	
ùô ò -ÜÐ% c UÐ+×,Ñ,ûð-úàúsN   ‚?D4Á6D Á8DÁ9D Á=D4ÂD2ÂA7D4ÄD Ä	D/ÄD*Ä%D4Ä*D/Ä/D4Úshutdownc               ƒ  ó¦   K  — t         j                  «       ƒ d {  –—†  t        �'t        j                  j	                  «       ƒ d {  –—†  y y 7 Œ27 Œ­w)N)r¦   Úshutdown_allrA   r¤   ÚcloserU   rH   rF   r%  r%  +  sA   è ø€ ä
×
Ñ
Ó
×ÐÜ
€Ü�k‰k×ÑÓ!×!Ñ!ð ð øà!ús!   ‚AšA›+AÁAÁAÁAc                 óB  — dd l } dt        t        «      dt        ddddœ}t        rt        t        «      nd }t        rt        t        «      nd }|r>|r<|j                  «       r,|j                  «       rt        |«      |d<   t        |«      |d	<    | j                  d
i |¤Ž y )Nr   z
server:appz0.0.0.0FTz	127.0.0.1)ÚappÚapp_dirÚhostÚportÚreloadÚproxy_headersÚforwarded_allow_ipsÚssl_certfileÚssl_keyfilerU   )	Úuvicornr…   r"   r$   r%   r   r&   ÚexistsÚrun)r3  rm   ÚcertÚkeys       rF   r5  r5  2  s‡   € Ûð Ü”w“<ØÜØØØ*ñ€Fõ ".Œ4”Ô°4€DÝ*Œ$Œ{Ô
°€CÙ‘˜Ÿ™œ¨#¯*©*¬,Ü!$ T£ˆˆ~ÑÜ # C£ˆˆ}ÑØ€G‡K�KÑ�&ÓrH   )Úreturnr…   )r8  r   )rf   rÊ   r8  ÚNone)ru   r   r8  r9  )r†   zOptional[str]r8  rÊ   )r@   )rŠ   r…   r8  rÊ   )r’   zOptional[bytes]r8  r   )ro   ÚBaseExceptionr8  r   )r8  rÊ   )r‡   rÊ   r8  rÊ   )r´   r   r‡   rÊ   r8  rÊ   )r[   rc   rŠ   r…   r8  r   )rŠ   r…   r8  r   )r‡   rÊ   r8  r9  )rÞ   rÊ   r8  rÜ   )râ   rc   rÙ   rÜ   r£   Úboolr8  r9  )rÞ   rÊ   r8  zOptional[dict])r8  r9  )ræ   rc   r‡   rÊ   r8  rÊ   )r´   r   r8  rÊ   )r  r…   r‡   rÊ   r8  rÊ   )r8  r   )�Ú__doc__Ú
__future__r   rø   r±   Úpathlibr   Útypingr   Úaiogramr   r   r   Úaiogram.client.defaultr	   Úaiogram.enumsr
   Úaiogram.filtersr   r   Úaiogram.typesr   r   r   r   r   Úfastapir   r   r   r   r   r   Úfastapi.middleware.corsr   Úfastapi.responsesr   r   Úfastapi.staticfilesr   Úauthr   r   r   Úconfigr   r    r!   r"   r#   r$   r%   r&   r'   Úcryptor(   r)   r*   Údbr+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r¨   r5   r¥   r6   r7   r  r*  Úadd_middlewareÚapirc   r¦   rA   Ú__annotations__r#  rG   rN   rV   rq   ru   rv   rz   Úweb_app_datar|   rˆ   rŒ   r“   r˜   r_   rœ   rª   r®   Úpostr¶   r»   r¿   rÂ   rÅ   rÈ   rË   rÏ   rÒ   rÕ   r×   rß   rã   rï   rõ   rú   r  r  r  r  r  Úinclude_routerr  ÚmountÚon_eventr  r%  r5  rU   rH   rF   ú<module>rU     sÀ  ðÚ iå "ã Û Ý Ý ç &Ñ &Ý 7Ý #ß 1÷õ ÷ P× OÝ 2ß 4Ý +ç HÑ H÷
÷ 
õ 
÷ JÑ I÷÷ ÷ õ  ß 6à�xÑ€
á�IÔ€Ø × Ñ ØØ�%Ø�%Ø�%ð	 ô ñ �vÔ€á‘3�v’{ Ó# X¢^°Ó4€Ø€€]Ó Ùƒ\€óóóó0Mðf ‡�‰L‹NÓòó ðð ‡�‰G�D‹MÓòó ðð ‡�ˆA�N‰NÓòhó ðhñ
 +1¸ÐCYÔ*ZðØ'ðà	óôóó^ð ‡�ˆÓòó ðð ‡�ˆƒÙ% lÓ3ó ó ðð$ ‡�ˆÓÙ#*¨<Ó#8ó ó ðð
 ‡�Ð
ÓÙ;BÀ<Ó;Pó (ó ð(ð ‡�ˆ/ÓÙ:AÀ,Ó:Oó (ó ð(ð ‡�Ð
ÓÙ>EÀlÓ>Só (ó ð(ð ‡�Ð
ÓÙ*1°,Ó*?ó (ó ð(ð
 ‡�Ð
ÓÙ*1°,Ó*?ó (ó ð(ð ‡�ˆÓÙ!(¨Ó!6ó *ó ð*ð ‡�ˆ(ÓÙ8?ÀÓ8Mó 1ó ð1ð ‡�ˆÓÙ#*¨<Ó#8ó  ó ð ð ‡�Ð	#Ó$ó!ó %ð!ð ‡�Ð	Óó!ó ð!óMó
ð GLõ 
óóD*ó&0ð ‡�ˆ&ÓÙ8?ÀÓ8Mó ó ððD ‡�Ð	ÓÙ7>¸|Ó7Ló ó ðð, ‡�Ð
Óòó ðð* ‡�ˆÓØ#%±G¸LÓ4Ió %ó ð%ð
 ‡�ˆ/ÓÙ:AÀ,Ó:Oó ó ðð( × Ñ �3Ô ð ‡�ˆƒò3ó ð3ð ‡	�	ˆ#‰{ ZÔ0°x€	Ô @ð ‡�ˆiÓòó ðð, ‡�ˆjÓò"ó ð"ôrH   