+
    ?[jM                        ^ RI t ^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RI	t	^ RI
t
^ RIHtHt ^ RIHt ^ RIHt RtRtRt] P*                  P-                  ]R4      t] P*                  P-                  ]R	4      t] P*                  P-                  ]R
4      t] P*                  P-                  ]R4      t] P*                  P-                  ]R4      t] P*                  P-                  ]R4      t] P*                  P-                  ]R4      t] P*                  P-                  ]RR4      t]P>                  t ] P*                  PC                  ] 4      PE                  4       R8X  dY   ] P*                  P-                  ] P*                  PG                  ] 4      R4      t$] P*                  PK                  ]$4      '       d   ]$t ] PL                  ! ]RR7       ] PL                  ! ]RR7       ]PN                  ! 4       t(Rs)Rt*R t+R:R lt,R t-R t.R t/R t0R t1R t2R t3R  t4R! t5R" t6R# t7R$ t8R;R% lt9R<R& lt:R' t;R( t<R=R) lt=R* t>R>R+ lt?R?R, lt@R- tAR. tBR/ tC ! R0 R1]4      tD]ER28X  dz   ]-! R3]P>                  ,           4       ]0! R4R5RRR67       ]P                  ! ]CRR77      P                  4        ]! R8]3]D4      tH]-! R9]I! ]4      ,           4       ]HP                  4        R# R# )@    N)BaseHTTPRequestHandlerThreadingHTTPServer)urlparse)urlopenzC:\TripServeri@  iJ  zadmin_server.pycontrol_serverzpending_admin_server.pyzrequest.jsonzstatus.jsonzadmin_failsafe_status.jsonztripserver_control_server.logbackupsadmin_serverzpythonw.exez
python.exeT)exist_okg        g      (@c                  .    \         P                  ! R 4      # )z%Y-%m-%d %H:%M:%S)timestrftime     =C:\TripServer\control_server\tripserver_control_server.py.tmpnowr      s    $-- 344r   c                     \        T ;'       g    ^ 4      p\        P                  R8X  d   V\        \        R^ 4      ,          pV# )r   ntCREATE_NO_WINDOW)intosnamegetattr
subprocess)extraflagss   & r   hidden_flagsr      s4    

OE	ww$5G!KKLr   c                     \        \        R RR7      ;_uu_ 4       pVP                  \        4       R,           \	        V 4      ,           R,           4       RRR4       R#   + '       g   i     R# ; i  \
         d     R# i ; i)autf-8encodingz | control-v92 | 
N)openLOG_PATHwriter   str	Exception)msgfhs   & r   logr*   "   sU    (C'22bHHSU003s8;dBC 3222ds.   A2 8AA2 A/	)A2 /A2 2B Bc           
      n   V R ,           p\        VRRR7      ;_uu_ 4       p\        P                  ! WR^\        R7       VP	                  4        \
        P                  ! VP                  4       4       RRR4       \
        P                  ! W 4       R#   \         d     L-i ; i  + '       g   i     L9; i)z.tmpwr   r    Fensure_asciiindentdefaultN)
r#   jsondumpr&   flushr   fsyncfilenor'   replace)pathdatatmpr)   s   &&  r   atomic_jsonr:   (   st    
-C	c3	)	)R		$q#F

XXbiik" 
*
 JJs $	 
*	)s)   /B$$BB!B$ B!!B$$B4	c                      \        V R RR7      ;_uu_ 4       p\        P                  ! V4      pRRR4       \        X\        4      '       d   V# / #   + '       g   i     L*; i  \
         d    / u # i ; i)rr   r    N)r#   r1   load
isinstancedictr'   )r7   r)   r8   s   &  r   	read_jsonr@   1   sZ     $g.."99R=D /!$--t525 /. Ris-   A$ AA$ A$ A!	A$ $A43A4c            
      D   \        \        4      pR RR\        4       R\        R\        R\
        /pR F  pW19   g   K  W,          W#&   K  	  VP                  V 4       \        \        V4       V#   \         d'   p\        R\        T4      ,           4        Rp?T# Rp?ii ; i)	control_versionTripServerControl/92
updated_atcontrol_port
admin_portpythonzstatus write failed N)	update_idexpected_shaexpected_versionexpected_build_idbackup)r@   STATUS_JSONr   CONTROL_PORT
ADMIN_PORT
PYTHON_EXEupdater:   r'   r*   repr)kwpreviousr8   keyexcs   ,    r   write_statusrW   8   s    %H1cej*D `?DI `KKO	[$	'K DS!7$s)!CDDK Es   A. .B9BBc                   a \         P                  ! 4       p\        V R 4      ;_uu_ 4       o\        V3R lR4       F  q!P	                  V4       K  	  RRR4       VP                  4       #   + '       g   i     TP                  4       # ; i)rbc                  &   < S P                  R4      # )i   i   )read)r)   s   r   <lambda>sha256.<locals>.<lambda>K   s    "''+"6r   r   N)hashlibsha256r#   iterrQ   	hexdigest)r7   hchunkr)   s   &  @r   r_   r_   H   s\    A	dD		R6<Ehhuo< 
;;= 
	;;=s   (A++B
	c           
         R \         P                  P                  V 4      R\         P                  P                  V 4      RRRRRR/pVR,          '       g   V#  \	        V 4      VR&   \        V RRRR	7      P                  4       p\        P                  ! R
V\        P                  4      p\        P                  ! RV\        P                  4      pV'       d#   VP                  ^4      P                  4       VR&   V'       d#   VP                  ^4      P                  4       VR&   V#   \         d   p\        T4      TR&    Rp?T# Rp?ii ; i)r7   existsr_    versionbuild_idr<   r   r6   r!   errorsz1^\s*ADMIN_PANEL_VERSION\s*=\s*["\']([^"\']+)["\']z,^\s*ADMIN_BUILD_ID\s*=\s*["\']([^"\']+)["\']errorN)r   r7   abspathisfiler_   r#   r[   research	MULTILINEgroupstripr'   rR   )r7   resulttextmbrV   s   &     r   source_identityrw   N   s   bggood+Xrww~~d7KXWY[dfhjtvxyF(F]9!$<xD#	BGGIIIJDRTR^R^_IIEtR\\Z!''!*"2"2"4fY1771:#3#3#5fZ M 8tCyVG_M 9s   B(D& "D& &E
1EE
c                      \        V R RRR7      P                  4       p\        WR4       R#   \         d   pR\	        T4      3u Rp?# Rp?ii ; i)r<   r   r6   ri   execFN)TOK)r#   r[   compiler'   rR   )r7   srcrV   s   &  r   
compile_okr}   [   sJ    54wyAFFH6"4E49$444s   *- AA
A
Ac                 V   \         P                   ! \         P                  \         P                  4      pVP                  R 4       VP	                  R\        V 4      34      ^ 8H  VP                  4        #   \         d     # i ; i  TP                  4        i   \         d     i i ; i; i)ffffff?z	127.0.0.1)socketAF_INETSOCK_STREAM
settimeout
connect_exr   closer'   )portsocks   & r   	port_openr   b   sp    ==););<DOOCc$i 89Q>ZZ\$ ZZ\$sB   B #A44BBB(BB(B%"B($B%%B(c                 j   \        T ;'       g    R 4      P                  4       p V '       g   R#  V P                  R4      '       d<   \        P                  ! RV 4      pV'       d   \        VP                  ^4      4      # R# \        V P                  R^4      ^,          4      #   \         d     R# i ; i)rf   N[z	\]:(\d+)$:)	r&   rr   
startswithrn   ro   r   rq   rsplitr'   )endpointru   s   & r   endpoint_portr   j   s    8>>r"((*HDs##		,1A&'3qwwqz?1T18??3*1-.. s)   B# B# %B# ?B# !B# #B21B2c                    . p\         P                  R 8w  d   V# \        V 4      p \        P                  ! . RORR^
\        4       R7      pVP                  ;'       g    RP                  4        F  pVP                  4       p\        V4      ^8  d   K%  V^ ,          P                  4       R8w  g   RVR	,          P                  4       9  d   K_  \        V^,          4      V8w  d   Kx  \        VR
,          4      pT^ 8  g   K  Ya9  g   K  TP                  T4       K  	  V#   \         d     K  i ; i  \         d'   p\        R\!        T4      ,           4        Rp?T# Rp?ii ; i)r   Tcapture_outputrt   timeoutcreationflagsrf   TCPlistenzpids_on_port failed N)netstatz-anoz-ptcp)r   r   r   r   runr   stdout
splitlinessplitlenupperlowerr   r'   appendr*   rR   )r   pidswanted_portcplinepartspidrV   s   &       r   pids_on_portr   u   s   D	ww$td)K
E^^<TX\fh  yE  yG  HYY__"002DJJLE5zA~xQx~~5(HE"IOO<M,MxU1X&+5x59~Qw3?DKK,< 3 K &h&DS!7$s)!CDDK EsH   CD3 'D!9D3 D3 
D3 !D0,D3 /D00D3 3E$>EE$c            
      
   \        \        4      p \        R \        V 4      ,           4       V  F  pV\        P
                  ! 4       8X  d   K   \        P                  ! RR\        V4      R.RR^\        4       R7      p\        RV: RVP                  : RVP                  ;'       g    VP                  ;'       g    R	P                  4       R
,          : 24       K  	  \        P                  ! 4       ^,           p\        P                  ! 4       V8  d0   \!        \        4      '       g   R# \        P"                  ! R4       KI  \!        \        4      '       * #   \         d    p\        RT: RT: 24        Rp?EKP  Rp?ii ; i)zkill_admin pids=taskkillz/PIDz/FTr   ztaskkill pid=z rc=z out=rf   :NiX  Nztaskkill failed pid= Ng333333?)r   rO   r*   rR   r   getpidr   r   r&   r   
returncoder   stderrrr   r'   r   r   sleep)r   r   r   rV   deadlines        r   
kill_adminr      s   
#DT$Z'("))+x	OVSXt DUY`dnp  AM  AO  PB#r}}ryyGcGcTVT]T]GcGcacFjFjFlmqFrst	  yy{RH
))+
 $$T

3$$$ NC%M!N!NNs   A.E<EF#E==Fc            
      d   \         P                   ! 4       s^ p \        P                  R8X  d>   \	        \
        R^ 4      \	        \
        R^ 4      ,          \	        \
        R^ 4      ,          p \        \        P                  P                  \        R4      RRRR	7      p \
        P                  ! \        \        .\        W\
        P                  \        V 4      R
7      pVP                  4        \!        R\#        VP$                  4      ,           4       VP$                  #   TP                  4        i ; i)r   r   CREATE_NEW_PROCESS_GROUPr   DETACHED_PROCESSzadmin_stdout.logr   r   r6   ri   )cwdr   r   stdinr   zstarted admin pid=)r   LAST_START_ATTEMPTr   r   r   r   r#   r7   joinBASE_DIRPopenrP   ADMIN_SCRIPTDEVNULLr   r   r*   r&   r   )r   outprocs      r   start_adminr      s    E	ww$
$>BWZYkmnEoory  {E  GY  [\  s]  ]
rww||H&893Yb
cC\ :QThrhzhz  KW  X]  K^  _		s488},-88O 			s   A D D/c           	          \        R \        ,          V R7      ;_uu_ 4       pVP                  ^8w  d   / uuRRR4       # \        P                  ! VP                  4       P                  RRR7      4      p\        V\        4      '       d   TM/ uuRRR4       #   + '       g   i     R# ; i  \         d    / u # i ; i)zhttp://127.0.0.1:%s/ping.jsonr   Nr   r6   )rj   )
r   rO   statusr1   loadsr[   decoder>   r?   r'   )r   respr8   s   &  r   fetch_admin_runtimer      s     4zA7SSW[{{c!" TS::diik000KLD%dD114r TSSS Ris:    B- B
B-  AB
B- B*	$B- *B- -B=<B=c                 \   \         P                   ! 4       V,           p/ p\         P                   ! 4       V8  Ed   \        4       pV'       Ed   Tp\        VP                  R 4      \        4      '       d   VP                  R 4      MTp\        VP                  R4      ;'       g    R4      P                  4       p\        VP                  R4      ;'       g    R4      P                  4       p	\        VP                  R4      ;'       g    VP                  R4      ;'       g    R4      p
\        VP                  R4      ;'       g    VP                  R4      ;'       g    R4      p\        VP                  R4      4      p\        VP                  R4      4      pWP                  4       8H  ;'       d'    WP                  4       8H  ;'       d    T;'       d    TpV'       d   T;'       d    W8H  pV'       d   T;'       d    W8H  pV'       d   RV3# \         P                  ! R	4       EK  R
V3# )runtimeloaded_sha256rf   disk_sha256rg   rh   running_from_expected_fileloaded_matches_diskTr   F)	r   r   r>   getr?   r&   r   boolr   )rI   rJ   rK   r   r   lastpayloadr   
loaded_shadisk_sharg   rh   path_okloaded_disk_okoks   &&&&           r   wait_for_runtimer      s   yy{W$HD
))+
 %'7D0:7;;y;QSW0X0Xgkk),^eGW[[9??R@FFHJ7;;}5;;<BBDH'++i0PPGKK	4JPPbQG7;;z2SSgkk*6MSSQSTH7;;'CDEG!'++.C"DEN1133wwDVDVDX8Xww]dwwiwBb&H&HW-H r'K'Kh.K"$-'

3$;r   c                      R V RVR\        4       RR/pVP                  V4       \        \        V4       R#   \         d'   p\        R\        T4      ,           4        Rp?R# Rp?ii ; i)statemessagerD   sourcecontrol_server_v92zfailsafe status write failed N)r   rQ   r:   FAILSAFE_STATUS_JSONr'   r*   rR   )r   r(   r   r8   rV   s   &&,  r   write_failsafe_statusr      sX    N	3ceXOcdE($/MS!@49!LMMMs   37 A(A##A(c                 Z    T ;'       g    R P                  4       pRV9   ;'       g    RV9   # )rf   1116zno shutdown was in progress)r   )txtlows   & r   no_pending_shutdown_msgr      s.    99"


CS=@@9S@@r   c                 4   \         P                  R 8w  d   R#  \        P                  ! RR.RR^
\	        4       R7      pVP
                  ;'       g    VP                  ;'       g    RP                  4       pVP                  ^ 8X  g   \        V4      '       d&   \        VP                  ^ 8X  d   RMRR	W R
7       RV3# \        RRW!P                  R7       RV3#   \         d4   p\        RR\        T4      ,           4       R\        T4      3u Rp?# Rp?ii ; i)r   Fshutdownz/aTr   rf   auto_cancellednoneu;   Fail Safe בוטל רק לאחר אימות Runtime מלא.)windows_outputreasoncancel_failedu>   אימות Runtime עבר, אך ביטול Fail Safe נכשל.)r   return_codeu#   שגיאה בביטול Fail Safe: N)Fznot windows)r   r   r   r   r   r   r   rr   r   r   r   r'   rR   )r   r   r(   rV   s   &   r   cancel_pending_shutdownr      s	   	ww$33
 ^^Z.t$XZjvjxyyy++BII++224==A!8!=!=!bmmq6H"2f  WT  eh  x9o/o  AD  R_  R_  	`cz  o/TW[\_W`/`ad3i s0   7C C %AC =C D$(DDDc                 l   V '       d&   \         P                  P                  V 4      '       g   R#  \        P                  ! V \
        4       \        \
        4      p\        RV: RV: RV : 24       RV3#   \         d3   p\        R\        T4      ,           4       R \        T4      3u Rp?# Rp?ii ; i)Fzrollback restored reason=z sha=z backup=Tzrollback failed N)Fzbackup missing)
r   r7   rm   shutilcopy2r   r_   r*   r'   rR   )rL   r   actualrV   s   &&  r   restore_backupr      s    //8O1O V\*%fffUVV|  c*+d3i s   AA6 6B3'B.(B3.B3c                 	   \        V\        4      '       d   TM/ p\        VP                  R 4      ;'       g    R4      p\        VP                  R4      ;'       g    R4      P	                  4       p\        VP                  R4      ;'       g    R4      p\        VP                  R4      ;'       g    R4      p\        RRRRWWEVR	7	       \        P                  P                  \        4      '       g   R
p\        RRRRVR7       RV3# \        \        4      w  rV'       g   \        RRRRV	R7       RV	3# \        \        4      p
V
P                  RR4      P	                  4       pV'       d%   W8w  d   RV: RV: 2p\        RRRRWzR7       RV3# T;'       g    TpT;'       g%    \        V
P                  R4      ;'       g    R4      pT;'       g%    \        V
P                  R4      ;'       g    R4      p\        P                  ! R4      p\        P                  P                  \        RV,           R,           4      p \        P                  P                  \         4      '       d   \"        P$                  ! \         V4       \+        4       '       g   Rp\        RRRRY}R7       RT3#  \        P,                  ! \        \         4       Rp\/        \         4      P	                  4       pY8w  dC   \3        TR4      w  ppT'       d   \5        4        R T: RT: 2p\        RR!RRYtYTTR"7
       RT3# \        RR#RRYEYoYR$7
        \5        4       p\7        YET^#R(7      w  ppRpRpT'       d   \9        R)4      w  ppT'       d   R*MR&pT'       d   R+MR,p\        RTTTTY4YVYTTTTR-7       TT3#   \&         d1   pR\)        T4      ,           p\        RRRRY}R7       RT3u Rp?# Rp?ii ; i  \&         d1   pR\)        T4      ,           p\        RRRRY}R7       RT3u Rp?# Rp?ii ; i  \&         d'   p\1        R\)        T4      ,           4        Rp?ELkRp?ii ; i  \&         d%   pTR\)        T4      ,           ,          p Rp?ELvRp?ii ; i  \&         d2   pR%\)        T4      ,           p\        RR&RRYtYR'7       RT3u Rp?# Rp?ii ; i).rH   rf   rI   rJ   rK   apply_update
validatingFN)	last_actionr   r   verification_okr   rH   rI   rJ   rK   zpending admin not foundvalidation_failedr   r   r   r   rk   r_   zpending SHA mismatch expected=z actual=)r   r   r   r   rk   	candidaterg   rh   z%Y%m%d_%H%M%Sadmin_server_backup_z.pyzbackup failed: backup_failed)r   r   r   r   rk   rL   admin port did not closestop_failedzreplace failed: replace_failedzdisk sha failed disk_sha_mismatchz | restart=z)disk SHA mismatch after replace expected=disk_verify_failed)
r   r   r   r   rk   rI   r   rL   rollback_performedrollback_resultreplaced)
r   r   r   r   rI   rJ   rK   r   rL   r   zstart failed: installed_unverified)r   r   r   r   rk   rI   r   rL   r   runtime_identity_verifiedverifiedzverified updatez>new file is on disk, but loaded runtime identity did not match)r   r   r   r   r   rH   rI   rJ   rK   r   rL   started_pidr   failsafe_cancel_okfailsafe_cancel_msg)r>   r?   r&   r   r   rW   r   r7   rm   PENDING_ADMINr}   rw   r   r   r   
BACKUP_DIRr   r   r   r'   rR   r   r6   r_   r*   r   r   r   r   )r   request_datareqrH   rI   rJ   rK   r(   r   infor   new_shastamprL   rV   r   rollback_okrollback_infor   r  runtime_payload	cancel_ok
cancel_msgr   r   s   &&                       r   r   r      s   $\488,bCCGGK(..B/Isww~.44"5;;=L377#56<<"=CGG$78>>B?^<E[_hn  S_  Vg  h77>>-(('7Jufksvwcz-(HB7Jufkswxd{.ImmHb)//1G/>JGT7Jufksv  	Mcz**7L'NN3y}}Y/G/M/M2+N)QQSz1J1P1Pb-QMM/*EWW\\*&<u&Du&LMF77>>,''lF)K
 <<(}`emp  	Acz


=,/
 H<(..0%3F<O%P"]IUW_`7KPUgltw  ^f  JU  gt  	ucz^:%Y]lx  pA  ]c  ym
 !1Qbln oHoIJ 78S T	:"J(>E#+1qG^5XW_ip  }F  tD  t|  Y\  fu  JS  is  tWQ  $s)+5bgor  	Ccz   49,7GEchps  	Dcz @S!3d3i!?@@@
 O]md3i6O%O]O  c*7MRWinvy  `h  	xczs   (N/ ,N/ .O- P+ 	
Q 
R /O*:%O%O*%O*-P(8%P#P(#P(+Q6QQR*R		RS&SSSc           
      <   \         P                  P                  \        4      '       d   \	        \        4      MR p\        4       '       g   \        RRRRRR7       R# \        4       p\        V^R7      w  r4\        RV'       d   RMRW3WVR	7       Y3'       d   R
3# R3# )rf   restart_adminr   Fr   r   r   r  r  )r   r   r   r   rI   r  r   zrestart verifiedzrestart was not verified)Fr   )	r   r7   rm   r   r_   r   rW   r   r   )r   rI   r   r  r  s   &    r   r  r  *  s    +-77>>,+G+G6,'RL<<%af  oI  	J00
-C 0r JH_(JPfks  ]i  DS  T8'SS9SSSr   c                 l    \         ;_uu_ 4        V ! V/ VB uuR R R 4       #   + '       g   i     R # ; i)N)ACTION_LOCK)funcargskwargss   &*,r   
run_lockedr  4  s     	T$V$ 
s   "3	c            
         \         P                  P                  \        4      '       g   R # \	        \        4      p \        T P                  R^ 4      ;'       g    ^ 4      p\        P                  ! 4       T8  d   R # \         P                  ! \        4       T P                  R4      pTR8X  d$   \        \        T P                  RR4      T 4       R # TR8X  d#   \        \        T P                  RR4      4       R # \        RR	R
R
R\        T4      ,           R7       R #   \
         d'   p\        R\        T4      ,           4        R p?R # R p?ii ; i  \
         d    ^ p Li ; i  \
         d     Li ; i)Nzbad request 
not_beforeactionr   r   requestr  unknown_requestrequest_failedFzunknown action r   )r   r7   rm   REQUEST_JSONr@   r'   r*   rR   floatr   r   remover  r   r  rW   )r  rV   r  r   s       r   process_request_filer'  8  s   77>>,''&CGGL!499:yy{Z	<	 WWXFL#''(I:VX[!\	?	"J}cgghPY>Z$[
#4<LQVhm  vG  JN  OU  JV  vV  W DS$s)!;<fD$1j$ ds:   D %E <E# E'EEE E #E10E1c                  h     \        4        \        \        4      '       g   \        P                  ! 4       \        ,
          \
        8  dk   \        ;_uu_ 4        \        \        4      '       g?   \        P                  ! 4       \        ,
          \
        8  d   \        R4       \        4        RRR4       \        P                  ! ^4       K    + '       g   i     L(; i  \         dG   p \        R\        T 4      ,           R,           \        P                  ! 4       ,           4        Rp ? LwRp ? ii ; i)Tz:admin port closed outside update; starting canonical adminNzpoll error r"   )r'  r   rO   r   r   START_COOLDOWN_SECONDSr  r*   r   r'   rR   	traceback
format_excr   )rV   s    r   	poll_loopr,  F  s    
	` "Z((TYY[;M-MQg-g [$Z00TYY[CU5UYo5oXY# !
 	

1 ![ _]T#Y%>%E	H\H\H^%^!_!__s7   AC  AC-C  C	C  C   D1+<D,,D1c                   @   a  ] tR tRt o RtR	R ltR tR tR tRt	V t
R# )
HandleriR  rC   c                \   \        V\        4      '       d   VP                  R 4      pV P                  V4       V P	                  RV4       V P	                  R\        \        V4      4      4       V P	                  RR4       V P                  4        V P                  P                  V4       R# )r   zContent-TypezContent-LengthzCache-Controlzno-storeN)	r>   r&   encodesend_responsesend_headerr   end_headerswfiler%   )selfcodebodyctypes   &&&&r   	send_bodyHandler.send_bodyT  s    dC  W)=$4 /)3s4y>:*5

r   c                0   \        V P                  4      P                  pVR 8X  dJ   \        4       pV P                  ^\        P
                  ! RRRRR\        \        4      RV/RR7      4       R	# VR
8X  d   \        \        4      pVP                  RRR\        \        4      R\        \        4      R\        \        4      R\        4       /4       V P                  ^\        P
                  ! VR^\        R7      4       R	# VR8X  dX   \        \         RRRR7      P#                  4       RR	 pV P                  ^RVP)                  RR4      ,           R,           R4       R	# RpV P                  ^VR4       R	#   \$         d   p\'        T4      p R	p?LeR	p?ii ; i)z
/ping.jsonr   TrB   rC   admin_port_openadmin_runtimeFr.   Nz/status.jsonr   active_disk_identityr-   z/logr<   r   r6   ri   z0<pre style='white-space:pre-wrap;direction:ltr'><z&lt;z</pre>ztext/html; charset=utf-8u  <html><head><meta charset='utf-8'><title>TripServer Control v92</title></head><body style='font-family:Arial;background:#0b1220;color:#eef;direction:rtl;padding:30px'><h1>TripServer Control v92</h1><p>עדכון נחשב מוצלח רק לאחר אימות Runtime מלא.</p><p><a style='color:#93c5fd' href='/status.json'>Status JSON</a> · <a style='color:#93c5fd' href='/log'>Log</a></p></body></html>iЊ)r   r7   r   r9  r1   dumpsr   rO   r@   rM   rQ   r   rw   r   r&   r#   r$   r[   r'   rR   r6   )r5  r7   r   r8   r   rV   htmls   &      r   do_GETHandler.do_GET\  s   		"''<)+GNN3

D$8IKactv  AK  wL  N]  _f  ,g  v{  !|  }>![)DKK*,BDUW`akWlnt  wC  DN  wO  Qg  ix  yE  iF  HW  Yl  Yn  o  pNN3

4eAWZ [\6>HcGINSSUV\V]^NN3 RUXU`U`adflUm mpx x  {U  V ksD"<=	 449S4s   $E5 5F FFc           	     D   \        V P                  4      P                  pVR 8X  d   \        \        R4      w  r#M0VR8X  d   \        \        R/ 4      w  r#MV P                  RRR4       R# T P                  V'       d   ^MR\        P                  ! RVR	V/R
R7      4       R# )z/restarthttpz/apply-updatei  z	not foundztext/plain; charset=utf-8Ni  r   r   Fr>  )r   r7   r  r  r   r9  r1   rA  )r5  r7   r   r(   s   &   r   do_POSTHandler.do_POSTn  s    		"'':M6)Jwr3_$
<QS0Tgb#NN3-HIbsc4::tRC6P_d+efr   c                6    \        R W,          ,           4       R# )zhttp N)r*   )r5  fmtr  s   &&*r   log_messageHandler.log_messagev  s    s7cj+A'Br   r   N)zapplication/json; charset=utf-8)__name__
__module____qualname____firstlineno__server_versionr9  rC  rG  rK  __static_attributes____classdictcell__)__classdict__s   @r   r.  r.  R  s#     +N>$g CBr   r.  __main__z#starting control server v92 python=control_startready)r   r   r   r   )targetdaemonz0.0.0.0zlistening on port )r   )g      @)rf   rf   #   )verified_update)manualN)r\  )Kr   sysr   r1   r   r   r   	threadingr*  r^   rn   http.serverr   r   urllib.parser   urllib.requestr   r   rO   rN   r7   r   r   CONTROL_DIRr
  r$  rM   r   r$   r  
executablerP   basenamer   dirnamer   re   makedirsRLockr  r   r)  r   r   r*   r:   r@   rW   r_   rw   r}   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r'  r,  r.  rM  Threadstartserverr&   serve_foreverr   r   r   <module>rl     sv   Y Y Y Y Y Y C ! "
ww||H&78ggll8%56[*CDww||K8ggll;6ww||H.JK 77<<%DEWW\\(I~>
^^
77J%%'=8RWW__Z8,GI	ww~~i  y* K$ ' J &oo   4
  5	"% *NA 	 DLT%W
$C$ $CL z->?_GVZ[Id399; )\!:GDFs<001
 r   