
    hjp                       d Z ddlmZ ddlZddlZddlZddlZddlZddl	Zddl
mZmZ ddlmZ ddlmZmZ  eej                            d ee                                          j                            Zej                            dd	          Z eej                            d
d                    Zej                            dd                                          Zej                            dd                                          Zej                            dd                                          Zedz  Ze                     d           edz  Z!e!                     d           edz  Z"e!dz  Z# ej$                    Z%d3dZ&d4dZ'd5d!Z(d3d"Z)d5d#Z*d6d%Z+d7d8d*Z,d9d.Z- G d/ d0e          Z.d1 Z/e0d2k    r e/             dS dS ):u  
Leap Voice server — static models + AI + device activation.

  POST /activate/register   {deviceId, label?}
  GET  /activate/status?deviceId=
  POST /activate/approve    {deviceId, secret}   ACTIVATE_SECRET env
  POST /assistant           {text, lang}
  GET  /health
    )annotationsN)SimpleHTTPRequestHandlerThreadingHTTPServer)Path)parse_qsurlparseROOTHOSTz0.0.0.0PORT8088GEMINI_API_KEY ACTIVATE_SECRETzbleak-activateADMIN_PASSWORDBlackTeam2026uploadsT)exist_okdatazactivated.jsonzbot-events.jsonreturndictc                    t                                           s	i i i ddidS 	 t          j        t                               d          pd          } n# t          j        $ r i } Y nw xY w|                     di            |                     di            |                     d	i            |                     d
i            | d
                             dd           | S )Ntotal_approvesr   )pending	activatedcommandsstatsutf-8encoding{}r   r   r   r   )
STATE_FILEis_filejsonloads	read_textJSONDecodeError
setdefaultr   s    e:\newleap\Leap-Voice\serve.py_load_stater*   &   s     
&*	
 
 	
z*...@@HDII   OOIr"""OOK$$$OOJ###OOGR   M-q111Ks   /A A('A(st	device_idstrmetac                <   t          |                    d          pd          dz   }||d<   t          t          j                              |d<   |                     di            t          | d                             d          pd          dz   | d         d<   |S )z+Har Approve da hisob +1 (qurilma + umumiy).activate_countr      last_activate_atr   r   )intgettimer'   )r+   r,   r.   ns       r)   _bump_activater7   :   s    DHH%&&+!,,q0AD	"49;;//D	MM'2$'78H(I(I(NQ$O$ORS$SBwK !K    Nonec                h    t                               t          j        | dd          d           d S )NF   ensure_asciiindentr   r   )r!   
write_textr#   dumpsr(   s    r)   _save_staterA   D   s@    
4eA666      r8   c                 *   t                                           sg i dS 	 t          j        t                               d          pd          } n# t          j        $ r i } Y nw xY w|                     dg            |                     di            | S )Neventsusersr   r   r    rD   rE   )EVENTS_FILEr"   r#   r$   r%   r&   r'   r(   s    r)   _load_eventsrG   K   s       +r***z+///AAITJJ   OOHb!!!OOGR   Ks   /A A$#A$c                    |                      d          pg }t          |          dk    r|dd          | d<   t                              t	          j        | dd          d           d S )	NrD   i  i$Fr;   r<   r   r   )r4   lenrF   r?   r#   r@   )r   evs     r)   _save_eventsrK   W   sy    	(			!rB
2ww~ $EFFX
4eA666      r8   keyc                   |pd                                 }|sdS ||                     di           v s||                     di           v r|S |                                }|                     d          pi |                     d          pi fD ]f}|                                D ]O\  }}t	          |pi                     d          pd                                          }|r||k    s||v r|c c S Pg|S )z"deviceId yoki VIN bo'yicha topish.r   r   r   vin)stripr4   upperitemsr-   )r+   rL   kubucketdidr.   rN   s          r)   _resolve_device_idrU   a   s$   9"



C r
bffY### sbff[".E.E'E 
	B66)$$*BFF;,?,?,E2F   	 	ICtzr&&u--344::<<C r	 R3Y 




	 Jr8   bodydict | Noneqsboolc                   d}|                      d          pd                                }|                                                    d          r|dd                                         }|s)|                      d          pd                                }|sM|rKt	          |                     d          p|                     d          pd                                          }|sG|rE|                     d          p|                     d          pdgd	                                         }t          |          o|t          t          fv S )
z$ADMIN_PASSWORD yoki ACTIVATE_SECRET.r   Authorizationzbearer    NzX-Admin-Passwordpasswordsecretr   )r4   rO   lower
startswithr-   rY   r   r   )headersrV   rX   pwauths        r)   	_admin_okrd   q   s;   	BKK((.B5577Dzz||y)) !""X^^ =kk,--3::<< K$ K*%%A(););ArBBHHJJ I" IffZ  <BFF8$4$4<a@FFHH88?~???r8   textlang
str | Nonec                   t           r|                                 sd S ddd                    |d          }d| d}dd|igid	d|                                 igd
gdddd}d}t          j                            |t          j        |                              d          dt           dd          }	 t          j        	                    |d          5 }t          j
        |                                                    dd                    }d d d            n# 1 swxY w Y   n-# t          j        j        t          t          j        f$ r Y d S w xY w|                    d          pi gd                             di                               d          pg }	d                    d |	D                                                       }
d                    |
                                          d d         }
|
pd S )Nu   русскомEnglish)ruenzo'zbek (lotin)z8Sen mashina saloni ovozli yordamchisisan. Javobni faqat z7 tilida ber. Qisqa: 1 jumla, max 140 belgi. Emoji yo'q.partsre   user)rolerl   g      ?`   )temperaturemaxOutputTokens)system_instructioncontentsgenerationConfigz]https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash-lite:generateContentr   zapplication/json)Content-Typezx-goog-api-keyPOST)r   ra   method   )timeoutignore
candidatesr   content c              3  B   K   | ]}|                     d d          V  dS )re   r   N)r4   ).0ps     r)   	<genexpr>zgemini_reply.<locals>.<genexpr>   s0      44155$$444444r8      )
GEMINI_KEYrO   r4   urllibrequestRequestr#   r@   encodeurlopenr$   readdecodeerrorURLErrorTimeoutErrorr&   joinsplit)re   rf   	lang_namesystemrV   urlreqresprawrl   outs              r)   gemini_replyr      su    TZZ\\ t'y99==dDTUUI	6"	6 	6 	6   '&&)9(:;$0F/GHHI,/BGG D	0  .
 
 Z$$W--.(
 
  !  C^##C#44 	D*TYY[[//BBCCC	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	DL!<1EF   tt 	%"		Y		CCLL/,. 
 ((44e444
4
4
:
:
<
<C
((399;;


%C;$s6   7!D+ ;DD+ D##D+ &D#'D+ +&EEc                  H     e Zd Z fdZd Zd
dZd Zd Z fdZd	 Z	 xZ
S )Handlerc                b     t                      j        |dt          t                    i| d S )N	directory)super__init__r-   r	   )selfargskwargs	__class__s      r)   r   zHandler.__init__   s0    $>#d))>v>>>>>r8   c                Z    t          d|                                  d||z              d S )Nz[serve] r}   )printaddress_string)r   fmtr   s      r)   log_messagezHandler.log_message   s7    =,,..==t==>>>>>r8   coder3   c                   t          j        |d                              d          }|                     |           |                     dd           |                     dt          t          |                               |                     dd           |                                  | j        	                    |           d S )	NF)r=   r   ru   zapplication/json; charset=utf-8Content-LengthAccess-Control-Allow-Origin*)
r#   r@   r   send_responsesend_headerr-   rI   end_headerswfilewrite)r   r   objr   s       r)   _jsonzHandler._json   s    z#E22299'BB4   )JKKK)3s4yy>>:::6<<<
r8   c                   t          | j                            d          pd          }|r| j                            |          nd}	 t          j        |                    dd          pd          S # t
          j        $ r i cY S w xY w)Nr   r   s   {}r   rz   r    )	r3   ra   r4   rfiler   r#   r$   r   r&   )r   r6   r   s      r)   
_read_jsonzHandler._read_json   s      !1227a88$%0djooa   5	:cjj(;;CtDDD# 	 	 	III	s   	)A3 3BBc                    |                      d           |                     dd           |                     dd           |                     dd           |                                  d S )N   r   r   zAccess-Control-Allow-MethodszGET,POST,OPTIONSzAccess-Control-Allow-Headersz+Content-Type,Authorization,X-Admin-Password)r   r   r   )r   s    r)   
do_OPTIONSzHandler.do_OPTIONS   s}    36<<<79KLLL*9	
 	
 	
 	r8   c                L   t          | j                  }|j                            d          pd}|dk    r,|                     ddt	          t
                    dd          S |dv r|                     ddg i          S |dk    rVt          |j                  }|                    d	          pd
gd         	                                }|s|                     dddd          S t          5  t                      }|                    d          pi                     |          pd
}|d                             |          }d d d            n# 1 swxY w Y   |dv r |                     ddd|dv rdndd          S |rC|                     ddd|                    dd
          |                    d          d
d          S |                     dddd
d          S |dk    r|t          5  t                      }|                     dd|                    di           t          |                    di                     d          cd d d            S # 1 swxY w Y   |dk    rt          |j                  }t          | j        |          s|                     ddd d          S t          5  t                      }t                      }d d d            n# 1 swxY w Y   i }	|                    d          pi                                 D ]v\  }
}d|pi                     d!d
          |pi                     d"d
          d
t#          |pi                     d#          pd          |pi                     d          d$|	|
<   w|                    d          pi                                 D ]\  }
}d%|pi                     d!d
          p)|	                    |
i                               d!d
          |pi                     d"d
          p)|	                    |
i                               d"d
          |pi                     dd
          t#          |pi                     d#          pd&          |pi                     d          |pi                     d'          d(|	|
<   |                    d          pi                                 D ]\  }
}|	                    |
          pi }|dk    rd)nt%          |          |                    d!d
          |                    d"d
          |                    dd
          |                    d#d          |                    d          |d*|	|
<   |                    d+          pi                                 D ]_\  }}|pi                     d,          pd
}
|
r?|
|	vr;d-d.|pi                     d/          p| d
d
d|pi                     d0          d$|	|
<   `|                    d1          pi }|                     dd|                    di           |                    di           |                    di           |	t#          |                    d2          pd          t          |                    d          pi           t          |                    d          pi           d3d4d5d6d7|                    d+i           t'          t)          |                    d8g           d9d                              d:	          S |d;k    rt          |j                  }t          | j        |          s|                     ddd d          S |                    d<          p|                    d"          pd
gd         	                                                                }|s|                     ddd=d          S t          5  t                      }d d d            n# 1 swxY w Y   g }|                    d          pi df|                    d          pi d%ffD ]\  }}|                                D ]\  }
}|pi }t%          |                    d"          pd
                                          }t%          |                    d!          pd
          }||v s,||
                                v s||                                v r.|                    |
||||                    d          d>           |                     dd||d?          S |d@v rIt.          dAz  t.          dBz  dCz  t.          dBz  dDz  g}d }d }|D ]P}|                                s|                                }|d dE         }dF|v rdG|vr|}t%          |          } nQ|s|                     dHddIdJdK          S t5          dL|            |                     d           |                     dMdN           |                     dOt%          t          |                               |                     dPdQ           |                                  | j                            |           d S tA                      !                                S )RN/z/health   T)okgeminiactivate)z/thread-historythreadsz/activate/statusdeviceIdr   r     FdeviceId_requiredr   r   r   r   )rm	uninstalllockrevoke)r   r   r   r   )r   r   commandtokenat)r   r   r   r   r   z/activate/pendingr   )r   r   activated_countz/activate/dashboard)rX     bad_passwordlabelrN   r0   )statusr   rN   r   r0   r   activer1   r2   )r   r   rN   r   r0   r   r2   locked)r   r   rN   r   r0   r   r   rE   last_deviceIdseenzTG name	last_seenr   r   )r   
active_nowpending_nowLeapVoice_botzhttps://t.me/LeapVoice_botu:   Bitta bot — barcha qurilmalar. Alohida token kerak emas.)rm   r   noterD   i8)	r   r   r   r   devicesr   botrE   rD   z/activate/searchq
q_required)r   rN   r   r   r   )r   r   hits)z/activation-adminz/activation-admin/z/leap-adminz/leap-admin/zLEAP_VOICE_ADMIN_YUKLA.htmlpubliczleap-admin.htmlzactivation-admin.htmli	  s
   Leap Voices
   VIN ruxsat  
wrong_htmlzWinSCP: E:\newleap\Leap-Voice\LEAP_VOICE_ADMIN_YUKLA.html -> /root/Leap-Voice/LEAP_VOICE_ADMIN_YUKLA.html  then: pkill -f 'python3 serve.py'; nohup python3 serve.py &)r   r   hintz[serve] admin html=ru   ztext/html; charset=utf-8r   zCache-Controlzno-store)"r   pathrstripr   rY   r   r   queryr4   rO   _lockr*   rI   rd   ra   rG   rQ   r3   r-   listreversedrP   appendr	   r"   
read_bytesr   r   r   r   r   r   r   do_GET)r   parsedr   rX   r,   r+   cmdactrJ   r   rT   r.   prevuidur   r   r   rS   r   rN   r   r{   r   usedhtmlr   headr   s                               r)   r   zHandler.do_GET   sw   $)$${!!#&&-#9 	::":.. $    '' 	4::cIr?333%% 	T&,''B
++3tQ7==??I Tzz#e>Q'R'RSSS 5 5 ]]vvj))/R44Y??E2o)))445 5 5 5 5 5 5 5 5 5 5 5 5 5 5
 ;; zz"%*+.2E+E#Q446     
zz"%)!$"!5!5!ggdmm#% 	 	 	 ::c$Ur#R#RSSS&& 
	 	 	 ]]zz"#%66)R#8#8+.rvvk2/F/F+G+G  	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 (( J	&,''BT\b111 Ozz#en'M'MNNN $ $ ]]!^^$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ G ffY//52<<>>  	T'"jb--gr:: JB++E266&)4:2*:*:;K*L*L*QPQ&R&R:2**400    !ff[117R>>@@  	T&"jb--gr:: ={{3++//<< JB++E266 ;{{3++//r::"jb--gr::&)4:2*:*:;K*L*L*QPQ&R&R:2**400)-(8(89K(L(L
  
   VVJ//52<<>> 
 
S{{3''-2*--EhhSXX!XXgr2288E2..!XXgr22&*hh/?&C&C((4.."    66'??0b7799 
 
QwBmmO44: 3g- "(!ER}}V'<'<'C!E!E!!#*+ wBmmK88$ $GCL FF7OO)rE::!vvi44!#R!8!8 "z2 6 6&*-eii8H.I.I.NQ*O*O&)"&&*=*=*C&D&D'*266)+<+<+B'C'C  !0; \ 
  VVGR00"8BFF8R,@,@,G#H#HII#   , %%  	G&,''BT\b111 Ozz#en'M'MNNN5u5"q9??AAGGIIA Mzz#el'K'KLLL # # ]]# # # # # # # # # # # # # # #D	""(b)4$$*H5#   "(  IC:2Ddhhuoo344::<<C 1 1 7R88ES		+ -
 ,/'*).*0&*hhtnn   $ ::c$Q#E#EFFF 
 
 +	 44x"33x"99J
 DD"  ||~~ oo''5D5z D( ]$-F Dt99DE zz#!-Z	    ...///s###^-GHHH-s3t99~~>>>_j999JT"""Fww~~sJ   -AEEE*AIII0KK K(``
`c                %   t          | j                  j                            d          }|dv r|                                 }|                    d          p+|                    d          p|                    d          pd}|                    d          p|                    d          pd	d d
                                         }t          t          |          |          }|s|                     dddd          S |                     dd||d          S |dk    rt          | j
                            d          pd          }|r| j                            |          nd}dt          t          t                              d                              dz    d}t          |z                      |           |                     dd|t          |          d          S |dk    r5|                                 }t          |                    d          pd                                          }	t          |                    d          pd                                          d d         }
t          |                    d          pd                                                                          d d          }|	s|                     d!dd"d          S t(          5  t+                      }|	|d#         v r|r3||d#         |	         d<   |
r|
|d#         |	         d<   t-          |           |                     ddd|d#         |	                             d$d          |d#         |	                             dd          d%          cd d d            S |
|t          t/          j                              d&|d'         |	<   t-          |           d d d            n# 1 swxY w Y   t1          d(|	 d)| d*|
            |                     dddd|d+          S |d,k    r|                                 }t          |                    d-          p|                    d.          pd                                          }t          |                    d          p|                    d          pd                                          }|t2          t4          fvr|                     d/dd0d          S |s|                     d!dd"d          S t(          5  t+                      }t7          ||          }	d1|	d d2          d3t          t/          j                               }|d'                             |	d           pi }|d#                             |	          pi }|                    d4i                               |	d            |                    d          p|                    d          pd}|                    d          p|                    d          pd}|t          t/          j                              ||t          |                    d5          pd          d6}t;          ||	|          }||d#         |	<   t          |d7                             d8          pd          }t          |                    d5          pd          }t-          |           d d d            n# 1 swxY w Y   t1          d9|	 d)| d:|            |                     ddd||	|||d;          S |d<k    r|                                 }t=          | j
        |          s|                     d/dd=d          S t          |                    d          pd                                                                          }	t          |                    d          pd                                                                          d d          }t          |                    d          pd                                          d d         }
t?          |                    d>d                    }|	s|s|                     d!dd?d          S |	sd@|                                z   d dA         }	|	d dB         }	t(          5  t+                      }|	|d#         v r|rtA          |d#         |	                   }|r||d<   |
r|
|d<   d1|	d d2          d3t          t/          j                               }||d$<   t;          ||	|          }||d#         |	<   t-          |           |                     ddd|	||                    dd          |                    d5          dC          cd d d            S |
pdD|p	|	d dE         z   |t          t/          j                              d&}|rd1|	d d2          d3t          t/          j                               }||dF         |d         |dd6}t;          ||	|          }|d'                             |	d            ||d#         |	<   t-          |           |                     ddd|	|||                    d5          |d7                             d8          dG          cd d d            S ||d'         |	<   t-          |           d d d            n# 1 swxY w Y   |                     ddd|	|dH          S |dIk    rL|                                 }t=          | j
        |          s|                     d/dd=d          S t          |                    d          pd                                          }	|	s|                     d!dd"d          S t(          5  t+                      }|d#                             |	d            |d'                             |	d            dJ|!                    d4i           |	<   t-          |           d d d            n# 1 swxY w Y   t1          dK|	            |                     ddddJdL          S |dMk    rL|                                 }t=          | j
        |          s|                     d/dd=d          S t          |                    d          pd                                          }	|	s|                     d!dd"d          S t(          5  t+                      }|d'                             |	d            |d#                             |	d            dJ|!                    d4i           |	<   t-          |           d d d            n# 1 swxY w Y   t1          dN|	            |                     ddddJdO          S |dPk    rK|                                 }t=          | j
        |          s|                     d/dd=d          S t          |                    d          pd                                          }	|	s|                     d!dd"d          S t(          5  t+                      }|d#                             |	d            |d'                             |	d            dQ|!                    d4i           |	<   t-          |           d d d            n# 1 swxY w Y   t1          dR|	            |                     dddQdS          S |dTk    r|                                 }t          |                    d          pd                                          }	|	s|                     d!dd"d          S t(          5  t+                      }|                    d4i                               |	d            t-          |           d d d            n# 1 swxY w Y   |                     ddUdi          S |dVk    r|                                 }t(          5  tE                      }t          |                    dF          pt/          j                    dWz            t          |                    dX          pd          d dA         |                    dY          t          |                    dZ          pd          d d[         t          |                    d\          pd          d d]         t          |                    d          pd          d dB         t          |                    d          pd          d d^         t          |                    d_          pd          d d         d`}|da         #                    |           t          |                    dY          pd          }|r|db                             |          pi }|dZ         p|                    dZd          |d\         p|                    d\d          |dF         |d         p|                    dcd          t          |                    dd          pd          dz   de|db         |<   tI          |           d d d            n# 1 swxY w Y   |                     ddUdi          S |                     dfddgd           d S )hNr   )z
/assistantz/assistant/streamre   messager   r   rf   localerj   r;   i  Fno_replyr   r   T)r   replyre   z/upload-wavr   r   r8   up_z*.wavr1   z.wav)r   filebytesz/activate/registerr   r      rN       r   r   r   r   )r   r   r   rN   )r   rN   r   r   z[activate] PENDING deviceId=z vin=z label=)r   r   r   rN   z/activate/approver^   r]   r   
bad_secretzok-   -r   r0   )r   r   r   rN   r0   r   r   z[activate] APPROVED deviceId=z count=)r   r   r   r   rN   r0   r   z/activate/addr   approvedeviceId_or_vinzvin-(   @   )r   r   r   r   rN   r0   zQo'lda    r   )r   r   r   r   rN   r0   r   )r   r   r   rN   z/activate/revoker   z [activate] REVOKE/LOCK deviceId=)r   revokedr   z/activate/rejectz [activate] REJECT+LOCK deviceId=)r   rejectedr   z/activate/rmr   z![activate] RM uninstall deviceId=)r   r   z/activate/command-ackr   z/activate/eventi  typetg_idusernameP   r   x   r   photo)r   r	  r
  r  r   r   re   r  rD   rE   r   msgs)r  r   r   r   r  i  	not_found)%r   r   r   r   r4   r_   r   r-   r   r3   ra   r   r   rI   r   UPLOADSglobwrite_bytesrO   rP   r   r*   rA   r5   r   r   r   rU   popr7   rd   rY   r   r'   rG   r   rK   )r   r   rV   re   rf   r   r6   r   r   r,   r   rN   r+   r^   raw_idr   r   old	vin_savedlabel_savedr.   total_apcount_ap
do_approveentryrJ   itemr   s                               r)   do_POSTzHandler.do_POST  s   	""'..s3366 	P??$$D   88I&&88G$$ 	  HHV$$B(:(:BdBQBGMMOOD TD11E Kzz#ej'I'IJJJ::c$#N#NOOO=  	SDL$$%566;!<<A)*34:??1%%%DCT',,w"7"78899A=CCCDt^((...::c$s4yy#Q#QRRR'' #	??$$DDHHZ006B77==??I))/R006688#>Edhhuoo+,,2244::<<SbSAC Tzz#e>Q'R'RSSS     ]];/  (<?;	259  HBGB{OI6w?#B::"&)-%'_Y%?%C%CGR%P%P#%k?9#=#A#A%#L#L	                 & #dikk**, ,9i(
 B/                             0 TTTTTUTTUUU::%DMM  
 && ,	??$$D(++Itxx
/C/CIrJJPPRRF*--F%FBGGMMOOFo~>> Mzz#el'K'KLLL Tzz#e>Q'R'RSSS     ]].r6::	AinAAs49;;/?/?AA)}((D99?Ro)))44:z2&&**9d;;; HHUOOCswwu~~C	"hhw//I37773C3CIr"dikk**($&)#''2B*C*C*Hq&I&I  &b)T::-1;	*r'{/?@@EAFFtxx(899>Q??B)                             * $	 $ $	 $ $!$ $   ::!%" )$&.&.    ?" H	??$$DT\400 Ozz#en'M'MNNNDHHZ006B77==??EEGGIdhhuoo+,,2244::<<SbSAC))/R006688#>Edhhy$7788J RS Rzz#e>O'P'PQQQ 8#ciikk13B37	!#2#I 7  7  ]];/ J ;	 :;;D *&)U .(-WE)CRC.EE3ty{{3C3CEEE$)DM)"i>>D15B{OI.OOO::"&)-(1%*#'88E2#6#6.2hh7G.H.H 
 
7  7  7  7  7  7  7  7 2 #JyC4H9RaR='Idikk** 
  E)CRC.EE3ty{{3C3CEEE!&#Dk!&w"*+ D *"i>>DyM%%i66615B{OI.OOO::"&)-(1%*#&.2hh7G.H.H.0koo>N.O.O  U7  7  7  7  7  7  7  7 l ,19i(Bo7  7  7  7  7  7  7  7  7  7  7  7  7  7  7 p ::DTyQTUU   %% 	U??$$DT\400 Ozz#en'M'MNNNDHHZ006B77==??I Tzz#e>Q'R'RSSS     ]];##It4449!!)T222;Aj"--i8B                              @Y@@AAA::c$4F#S#STTT%% 	 ??$$DT\400 Ozz#en'M'MNNNDHHZ006B77==??I Tzz#e>Q'R'RSSS     ]]9!!)T222;##It444;Aj"--i8B                              @Y@@AAA::DdvFF   >! 	B??$$DT\400 Ozz#en'M'MNNNDHHZ006B77==??I Tzz#e>Q'R'RSSS     ]];##It4449!!)T222;?j"--i8B                              AiAABBB::c$4#@#@AAA** 
	1??$$DDHHZ006B77==??I Tzz#e>Q'R'RSSS     ]]z2&&**9d;;;B                              ::cD$<000$$ 	1??$$D ! !!^^dhhtnnB	d0BCC 0 0 :F;;CRC@!XXg.. #DHHZ$8$8$>B ? ? D 0 0 6B77= #DHHZ$8$8$>B ? ? D 0 0 6B77= '!2!2!8b99$3$?	 	 8##D)))$((7++1r22 	g;??3//52D$($4$PR8P8P $V D0D0D%)$Z)-j)9 *988OR88 #DHHV$4$4$9 : :Q >( (BwK$ R   1! ! ! ! ! ! ! ! ! ! ! ! ! ! !2 ::cD$<000

3u{;;<<<<<s   +B(O( <O((O,/O,"G[99[= [=C%k7=Dk7k77k;>k;>A/p99p= p=A/vvv$A/{{#&{#A"@ IAJJAJJAJ)r   r3   )__name__
__module____qualname__r   r   r   r   r   r   r  __classcell__)r   s   @r)   r   r      s        ? ? ? ? ?? ? ?       P  P  P  P  P dS= S= S= S= S= S= S=r8   r   c            
     "   t                                           st          i i i d           t                                          st	          g i d           t          dt           dt           dt                      t          d           t          dt          t                     dt          t                     d	t          t                                t          t          t          ft                                                     d S )
N)r   r   r   rC   zServing z on http://:z_  /activation-admin  /activate/dashboard|register|status|approve|reject|revoke|rm|pending|eventz	  GEMINI=z SECRET=z
 ADMIN_PW=)r!   r"   rA   rF   rK   r   r	   r
   r   rY   r   r   r   r   r   serve_forever r8   r)   mainr'    s    FDDEEE   2R00111	
3T
3
3d
3
3T
3
3444		K   
	+D$$ 	+ 	+d?.C.C 	+ 	+((	+ 	+   tg..<<>>>>>r8   __main__)r   r   )r+   r   r,   r-   r.   r   r   r   )r   r   r   r9   )r+   r   rL   r-   r   r-   )NN)rV   rW   rX   rW   r   rY   )re   r-   rf   r-   r   rg   )1__doc__
__future__r   r#   os	threadingr5   urllib.errorr   urllib.requesthttp.serverr   r   pathlibr   urllib.parser   r   environr4   __file__resolveparentr	   r
   r3   r   rO   r   r   r   r  mkdirDATA_DIRr!   rF   Lockr   r*   r7   rA   rG   rK   rU   rd   r   r   r'  r  r&  r8   r)   <module>r9     s    # " " " " "  				              E E E E E E E E       + + + + + + + +tBJNN644>>#9#9#;#;#BCCDD	z~~fi((
s2:>>&&))**Z^^,b117799
*..!24DEEKKMM 0/BBHHJJ

 t   &=    $$
**	   (      	 	 	 	       @ @ @ @ @% % % %PG= G= G= G= G=& G= G= G=T? ? ?" z DFFFFF r8   