§
    Nà¯j-l  ã                   ód  — d 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ZddlZddl	Z	ddl
Z
ddlmZ ddlmZmZ ddlmZmZmZmZ  ee¦  «                             ¦   «         j        j        Zej                             d ee¦  «        ¦  «         ddlmZmZmZ ddl m!Z! ddl"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.m/Z/ edz  dz  dz  edz  dz  dz  dz  edz  dz  gZ0defd„Z1 e1¦   «         Z2e2j        dz  Z3dZ4dedefd„Z5de6fd„Z7 G d„ d¦  «        Z8d„ Z9e:dk    r e9¦   «          dS dS )u   
AutoPOE2 - Process Supervisor Engine & Shadow Binary Controller
================================================================
Ä�iá»�u phá»‘i sinh tá»­ tiáº¿n trÃ¬nh tá»± hÃ nh, cÃ¡ch ly nhá»‹ phÃ¢n cháº¡y ngáº§m (Shadow Binary),
triá»‡t tiÃªu xung Ä‘á»™t build LNK1104, vÃ  cung cáº¥p Control Plane thá»�i gian thá»±c qua Shared Memory.

Kiáº¿n trÃºc:
1. Shadow Binary Execution: Tá»± Ä‘á»™ng copy AutoPOE2_Core.exe -> AutoPOE2_Core_Runtime.exe
   Ä‘á»ƒ tiáº¿n trÃ¬nh C++ Core cháº¡y Ä‘á»™c láº­p, giáº£i phÃ³ng hoÃ n toÃ n file gá»‘c cho Dev/AI build liÃªn tá»¥c.
2. SSoT Telemetry: Ä�á»�c trá»±c tiáº¿p tá»« Local\POE2_Auto_SharedMem_v1 (Zero file I/O, Zero Hallucination).
3. Hot-Swap Engine: Tá»± Ä‘á»™ng nháº­n diá»‡n báº£n build má»›i Ä‘Ã£ qua kiá»ƒm thá»­, chuyá»ƒn giao an toÃ n táº¡i Hideout.
4. Local Control Plane: Cung cáº¥p REST/JSON endpoint (máº·c Ä‘á»‹nh port 8088) phá»¥c vá»¥ truy váº¥n & Ä‘iá»�u khiá»ƒn.
é    N)ÚPath)Ú
HTTPServerÚBaseHTTPRequestHandler)ÚOptionalÚDictÚAnyÚList)Úis_poe2_runningÚfind_process_by_nameÚPOE2_PROCESS_NAMES)Úfind_poe2_window)Úget_virtual_monitorÚis_virtual_display_activeÚmove_window_to_virtual_displayÚis_window_on_virtual_displayÚcapture_virtual_display_jpeg)ÚPoe2ClientLauncher)ÚCoreShmBridgeÚCharacterLifecycleState)ÚPoe2GraphicsOptimizerÚPROFILESÚbinÚReleasezAutoPOE2_Core.exeÚbuildÚreturnc                  ó`   — t           D ]} |                      ¦   «         r| c S Œt           d         S )Nr   )ÚCANDIDATE_SOURCE_BINSÚexists)Úps    ú-C:\Projects\AutoPOE2\tools\poe2_supervisor.pyÚfind_default_source_binr!   4   s:   € Ý"ð ð ˆØ�8Š8‰:Œ:ð 	ØˆHˆHˆHð	å  Ô#Ð#ó    zAutoPOE2_Core_Runtime.exei˜  Úfilepathc                 óR  — |                       ¦   «         sdS t          j        ¦   «         }t          | d¦  «        5 }|                     d¦  «        x}r,|                     |¦  «         |                     d¦  «        x}°,ddd¦  «         n# 1 swxY w Y   |                     ¦   «         S )u.   TÃ­nh mÃ£ bÄƒm SHA256 cá»§a tá»‡p nhá»‹ phÃ¢n.Ú Úrbi   N)r   ÚhashlibÚsha256ÚopenÚreadÚupdateÚ	hexdigest)r#   ÚhÚfÚchunks       r    Úcalculate_sha256r0   ?   s×   € à�?Š?ÑÔð ØˆrÝŒÑÔ€AÝ	ˆh˜Ñ	Ô	ð  Ø—v’v˜e‘}”}Ð$ˆeð 	Ø�HŠH�U‰OŒOˆOð —v’v˜e‘}”}Ð$ˆeð 	ðð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð ð �;Š;‰=Œ=Ðs   ºAB
Â
BÂBc                  óH  — 	 ddl m} m} ddl}|                      ddd¬¦  «        }|                     |¦  «        }|                     dd	d
¬¦  «         |                     ¦   «         }|                     |dd¬¦  «         | 	                    ¦   «         S # t          $ r Y dS w xY w)uE   Táº¡o frame JPEG standby khi game client offline hoáº·c chÆ°a render.r   )ÚImageÚ	ImageDrawNÚRGB)i   iÐ  )é   é   é   )Úcolor)iÂ  iT  z3AutoPOE2 Standby (Game Client Offline / Background))é”   é£   é¸   )ÚfillÚJPEGéF   ©ÚformatÚqualityr"   )ÚPILr2   r3   ÚioÚnewÚDrawÚtextÚBytesIOÚsaveÚgetvalueÚ	Exception)r2   r3   rC   ÚimgÚdrawÚbufs         r    Úget_standby_jpeg_framerN   J   s¿   € ð
Ø(Ð(Ð(Ð(Ð(Ð(Ð(Ð(Øˆ	ˆ	ˆ	Ø�iŠi˜˜{°,ˆiÑ?Ô?ˆØ�~Š~˜cÑ"Ô"ˆØ�	Š	�*ÐSÐZiˆ	ÑjÔjÐjØ�jŠj‰lŒlˆØ�Š�˜V¨RˆÑ0Ô0Ð0Ø�|Š|‰~Œ~ÐøÝð ð ð Øˆsˆsðøøøs   ‚BB Â
B!Â B!c                   ó  — e Zd ZdZeeeddfdededede	de	f
d„Z
dd	e	d
e	fd„Zd
e	fd„Zd
ee         fd„Zd
e	fd„Zddeee                  d
e	fd„Zdded
e	fd„Zd
e	fd„Zd
eeef         fd„Zd
efd„Zd„ Zd„ Zd„ Zd„ ZdS )ÚPoe2Supervisoru:   Bá»™ Ä‘iá»�u phá»‘i vÃ  giÃ¡m sÃ¡t tiáº¿n trÃ¬nh AutoPOE2.FÚ
source_binÚruntime_binÚ	http_portÚauto_launch_gameÚuse_virtual_displayc                 óF  — t          |¦  «        | _        t          |¦  «        | _        || _        || _        || _        t          ¦   «         | _        d | _        d| _	        d | _
        d | _        d | _        d| _        t          j        ¦   «         | _        d| _        d | _        d S )NFr%   )r   rQ   rR   rS   rT   rU   r   Ú
shm_bridgeÚruntime_procÚ_runningÚ_watchdog_threadÚ_http_serverÚ_http_threadÚ_pausedÚ	threadingÚLockÚ_lockÚ_last_source_hashÚ_game_detected_time)ÚselfrQ   rR   rS   rT   rU   s         r    Ú__init__zPoe2Supervisor.__init__\   s˜   € õ ˜zÑ*Ô*ˆŒÝ Ñ,Ô,ˆÔØ"ˆŒØ 0ˆÔØ#6ˆÔ å'™/œ/ˆŒØ8<ˆÔØˆŒØ<@ˆÔØ26ˆÔØ8<ˆÔàˆŒÝ”^Ñ%Ô%ˆŒ
Ø!#ˆÔØ48ˆÔ Ð Ð r"   Úforcer   c                 óH  — | j                              ¦   «         sdS t          | j         ¦  «        }|s<| j                             ¦   «         r#t          | j        ¦  «        }||k    r	|| _        dS |                      ¦   «         r|                      ¦   «          t          d¦  «        D ]|}	 | j        j         	                    dd¬¦  «         t          j        | j         | j        ¦  «         || _         dS # t          $ r t          j        d¦  «         Y Œmt          $ r Y  nw xY wdS )u¹   
        Sao chÃ©p AutoPOE2_Core.exe sang AutoPOE2_Core_Runtime.exe.
        Giáº£i phÃ³ng file gá»‘c Ä‘á»ƒ trÃ¬nh biÃªn dá»‹ch MSVC/CMake cÃ³ thá»ƒ build báº¥t ká»³ lÃºc nÃ o.
        FTé   )ÚparentsÚexist_okg      à?)rQ   r   r0   rR   ra   Úis_runtime_runningÚstop_runtimeÚrangeÚparentÚmkdirÚshutilÚcopy2ÚPermissionErrorÚtimeÚsleeprJ   )rc   re   Úsource_hashÚruntime_hashÚattempts        r    Úprepare_shadow_binaryz$Poe2Supervisor.prepare_shadow_binaryv   sG  € ð
 Œ×%Ò%Ñ'Ô'ð 	Ø�5å& t¤Ñ7Ô7ˆØð 	˜Ô)×0Ò0Ñ2Ô2ð 	Ý+¨DÔ,<Ñ=Ô=ˆLØ˜lÒ*Ð*Ø)4�Ô&Ø�tð ×"Ò"Ñ$Ô$ð 	 Ø×ÒÑÔÐõ ˜Q‘x”xð 		ð 		ˆGðØÔ Ô'×-Ò-°dÀTÐ-ÑJÔJÐJÝ”˜Tœ_¨dÔ.>Ñ?Ô?Ð?Ø)4�Ô&Ø�t�tøÝ"ð  ð  ð  Ý”
˜3‘”���Ýð ð ð Ø��ðøøøàˆus   Â(AC2Ã2DÄ	DÄDc                 ó   — t          ¦   «         S )uR   Kiá»ƒm tra xem client Path of Exile 2 cÃ³ Ä‘ang cháº¡y tháº­t trÃªn OS hay khÃ´ng.)r
   ©rc   s    r    Úis_game_runningzPoe2Supervisor.is_game_running–   s   € åÑ Ô Ð r"   c                 ó–   — g }t           D ]$}|                     t          |¦  «        ¦  «         Œ%t          t	          |¦  «        ¦  «        S )u.   Láº¥y danh sÃ¡ch PID tháº­t cá»§a client POE2.)r   Úextendr   ÚlistÚset)rc   ÚpidsÚnames      r    Úget_game_pidszPoe2Supervisor.get_game_pidsš   sF   € àˆÝ&ð 	4ð 	4ˆDØ�KŠKÕ,¨TÑ2Ô2Ñ3Ô3Ð3Ð3Ý•C˜‘I”I‰ŒÐr"   c                 óJ   — | j         €dS | j                              ¦   «         du S )uD   Kiá»ƒm tra xem tiáº¿n trÃ¬nh Shadow Runtime cÃ³ Ä‘ang cháº¡y khÃ´ng.NF)rX   Úpollry   s    r    rj   z!Poe2Supervisor.is_runtime_running¡   s*   € àÔÐ$Ø�5ØÔ ×%Ò%Ñ'Ô'¨4Ð/Ð/r"   NÚ
extra_argsc                 ó>  — | j         5  |                      ¦   «         r	 ddd¦  «         dS |                      ¦   «         s	 ddd¦  «         dS t          | j        ¦  «        g}|r|                     |¦  «         	 d}t          j        dk    rt          j	        }t          j
        |t          | j        j        ¦  «        |t          j        t          j        ¬¦  «        | _        	 ddd¦  «         dS # t          $ r d| _        Y ddd¦  «         dS w xY w# 1 swxY w Y   dS )uC   Khá»Ÿi cháº¡y Shadow Binary AutoPOE2_Core_Runtime.exe Ä‘á»™c láº­p.NTFr   Úwin32)ÚcwdÚcreationflagsÚstdoutÚstderr)r`   rj   rw   ÚstrrR   r|   ÚsysÚplatformÚ
subprocessÚCREATE_NEW_PROCESS_GROUPÚPopenrm   ÚDEVNULLrX   rJ   )rc   r„   ÚcmdÚcreation_flagss       r    Ústart_runtimezPoe2Supervisor.start_runtime§   sÎ  € àŒZð 	ð 	Ø×&Ò&Ñ(Ô(ð Øð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð ×-Ò-Ñ/Ô/ð Øð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	õ �tÔ'Ñ(Ô(Ð)ˆCØð 'Ø—
’
˜:Ñ&Ô&Ð&ðØ!"�Ý”< 7Ò*Ð*Ý%/Ô%H�Nå$.Ô$4ØÝ˜DÔ,Ô3Ñ4Ô4Ø"0Ý%Ô-Ý%Ô-ð%ñ %ô %�Ô!ð ð/	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	øõ0 ð ð ð Ø$(�Ô!Øð5	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð0øøøð1	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	ð 	s;   ˆD«DÁ,DÁ:A'C/Ã/DÄ DÄDÄDÄDÄDç      @Útimeout_secc                 ó   — | j         5  |                      ¦   «         sd| _        	 ddd¦  «         dS | j        }|€	 ddd¦  «         dS 	 |                     ¦   «          |                     |¬¦  «         n\# t
          j        $ r? 	 |                     ¦   «          |                     d¬¦  «         n# t          $ r Y nw xY wY nt          $ r Y nw xY wd| _        n# d| _        w xY w	 ddd¦  «         dS # 1 swxY w Y   dS )u8   Dá»«ng tiáº¿n trÃ¬nh Shadow Runtime má»™t cÃ¡ch Ãªm Ã¡i.NT©Útimeoutç      ð?)	r`   rj   rX   Ú	terminateÚwaitrŽ   ÚTimeoutExpiredÚkillrJ   )rc   r–   Úprocs      r    rk   zPoe2Supervisor.stop_runtimeÅ   s¿  € àŒZð 	ð 	Ø×*Ò*Ñ,Ô,ð Ø$(�Ô!Øð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð
 Ô$ˆDØˆ|Øð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð)Ø—’Ñ Ô Ð Ø—	’	 +�	Ñ.Ô.Ð.Ð.øÝÔ,ð ð ð ðØ—I’I‘K”K�KØ—I’I c�IÑ*Ô*Ð*Ð*øÝ ð ð ð Ø�Dðøøøøøåð ð ð Ø�ðøøøð %)�Ô!Ð!ø D�Ô!Ð(Ð(Ð(Ð(àð/	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	ð 	s|   ˆC3²
C3Á
*A5Á4CÁ5CÂ*B0Â/CÂ0
B=Â:CÂ<B=Â=CÃ CÃ	CÃCÃCÃCÃC3Ã	C"Ã"C3Ã3C7Ã:C7c                 óv  — | j                              ¦   «         sdS t          | j         ¦  «        }| j                             ¦   «         rt          | j        ¦  «        nd}||k    r|                      ¦   «         rdS |                      ¦   «          |                      d¬¦  «        sdS |                      ¦   «         S )u   
        Thá»±c hiá»‡n hoÃ¡n Ä‘á»•i binary nÃ³ng:
        1. Kiá»ƒm tra xem cÃ³ báº£n build má»›i cá»§a AutoPOE2_Core.exe khÃ´ng.
        2. Dá»«ng runtime hiá»‡n táº¡i.
        3. Copy shadow binary má»›i.
        4. Khá»Ÿi Ä‘á»™ng láº¡i runtime.
        Fr%   T)re   )rQ   r   r0   rR   rj   rk   rw   r”   )rc   Únew_hashÚcur_hashs      r    Úhot_swap_runtimezPoe2Supervisor.hot_swap_runtimeà   s¼   € ð Œ×%Ò%Ñ'Ô'ð 	Ø�5å# D¤OÑ4Ô4ˆØ9=Ô9I×9PÒ9PÑ9RÔ9RÐZÕ# DÔ$4Ñ5Ô5Ð5ÐXZˆà�xÒÐ D×$;Ò$;Ñ$=Ô$=ÐØ�4à×ÒÑÔÐØ×)Ò)°Ð)Ñ5Ô5ð 	Ø�5Ø×!Ò!Ñ#Ô#Ð#r"   c                 óä  — |                       ¦   «         }t          |¦  «        dk    }|                      ¦   «         }|r| j        r| j        j        nd}| j                             ¦   «         }t          ¦   «         }|rt          ¦   «         nd}|r|rt          ||¦  «        nd}| j
        | j        | j        t          j        dt          j        ¦   «         ¦  «        dœ||||rd|d         › d�ndd	œ|du|r"|j        › d
|j        › d|j        › d|j        › d�nd|r|j        |j        |j        |j        gnd|dœ||t)          | j        ¦  «        | j                             ¦   «         t)          | j        ¦  «        | j                             ¦   «         | j                             ¦   «         rC| j                             ¦   «         r*t1          | j        ¦  «        t1          | j        ¦  «        k    nddœ|dœS )uM   Láº¥y toÃ n bá»™ tráº¡ng thÃ¡i thá»±c táº¿ cá»§a há»‡ thá»‘ng (Ground Truth).r   NFz%Y-%m-%dT%H:%M:%SZ)ÚactiveÚpausedrS   Útimestamp_isozONLINE (PID ú)ÚOFFLINE)Úrunningr   ÚhwndÚ
status_strÚxz at (z, )r¥   ÚmonitorÚrectÚgame_on_virtual_display)rª   ÚpidÚsource_binaryÚsource_existsÚruntime_binaryÚruntime_existsÚbinary_synced)Ú
supervisorÚgame_clientÚvirtual_displayÚshadow_runtimeÚ	telemetry)r�   Úlenrj   rX   r±   rW   Úget_status_dictr   r   r   rY   r]   rS   rr   ÚstrftimeÚgmtimeÚwidthÚheightÚleftÚtopr‹   rQ   r   rR   r0   )	rc   Ú	game_pidsÚgame_activeÚruntime_activeÚruntime_pidÚ
shm_statusÚvmÚ	game_hwndÚ
game_on_vds	            r    Ú
get_statuszPoe2Supervisor.get_statusö   sZ  € à×&Ò&Ñ(Ô(ˆ	Ý˜)‘n”n qÒ(ˆØ×0Ò0Ñ2Ô2ˆØ/=Ð]À$ÔBSÐ]�dÔ'Ô+Ð+ÐY]ˆà”_×4Ò4Ñ6Ô6ˆ
Ý Ñ"Ô"ˆØ*5Ð<Õ$Ñ&Ô&Ð&¸1ˆ	ØEGÐaÈIÐaÕ1°)¸RÑ@Ô@Ð@Ð\aˆ
ð œ-Øœ,Ø!œ^Ý!%¤Ð/CÅTÄ[Á]Ä]Ñ!SÔ!Sð	ð ð 'Ø!Ø!Ø@KÐZÐ<¨Y°q¬\Ð<Ð<Ð<Ð<ÐQZð	ð ð  D˜.ØQSÐ]˜bœhÐMÐM¨¬ÐMÐM¸¼ÐMÐMÀBÄFÐMÐMÐMÐMÐY]ØBDÐN˜œ "¤&¨"¬(°B´IÐ>Ð>È$Ø+5ð	 ð  ð *Ø"Ý!$ T¤_Ñ!5Ô!5Ø!%¤×!7Ò!7Ñ!9Ô!9Ý"% dÔ&6Ñ"7Ô"7Ø"&Ô"2×"9Ò"9Ñ";Ô";ØlpÔl{÷  mCò  mCñ  mEô  mEð  "nð  JNô  JZ÷  Jaò  Jañ  Jcô  Jcð  "nÕ!1°$´/Ñ!BÔ!BÕFVÐW[ÔWgÑFhÔFhÒ!hÐ!hð  inðð ð $ð9
ð 
ð 	
r"   c                 ó   — dS )uJ   Táº¡o giao diá»‡n HTML Picture-in-Picture Mini Streamer cho Headless Mode.aù  <!DOCTYPE html>
<html lang="vi">
<head>
  <meta charset="utf-8">
  <title>AutoPOE2 - Live Background Headless Stream</title>
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <style>
    body { margin: 0; background: #0f1117; color: #e2e8f0; font-family: ui-sans-serif, system-ui, sans-serif; display: flex; flex-direction: column; align-items: center; justify-content: center; min-height: 100vh; }
    .header { display: flex; align-items: center; justify-content: space-between; width: 90vw; max-width: 1280px; margin-bottom: 8px; }
    .title-box { display: flex; align-items: center; gap: 10px; }
    .status-dot { width: 10px; height: 10px; border-radius: 50%; background: #22c55e; box-shadow: 0 0 10px #22c55e; }
    .container { position: relative; width: 90vw; max-width: 1280px; aspect-ratio: 16/9; background: #000; border-radius: 8px; overflow: hidden; box-shadow: 0 10px 30px rgba(0,0,0,0.8); border: 1px solid #334155; }
    #stream { width: 100%; height: 100%; object-fit: contain; display: block; }
    .hud { position: absolute; bottom: 12px; left: 16px; background: rgba(15, 23, 42, 0.85); backdrop-filter: blur(4px); padding: 6px 14px; border-radius: 6px; font-size: 13px; border: 1px solid #475569; }
    .badge { padding: 2px 6px; border-radius: 4px; font-weight: bold; }
    .online { background: #166534; color: #86efac; }
    .offline { background: #991b1b; color: #fca5a5; }
  </style>
</head>
<body>
  <div class="header">
    <div class="title-box">
      <div class="status-dot" id="dot"></div>
      <h3 style="margin:0;">AutoPOE2 Virtual Screen (Headless Background Stream)</h3>
    </div>
    <div id="stats" style="font-size: 12px; color: #94a3b8;">Stream: Active</div>
  </div>
  <div class="container">
    <img id="stream" src="/preview.jpg" alt="Background Game Stream">
    <div class="hud" id="hud">Mode: Headless IPC | Status: Connecting...</div>
  </div>
  <script>
    const img = document.getElementById('stream');
    const hud = document.getElementById('hud');
    const stats = document.getElementById('stats');
    let frames = 0, lastTime = performance.now();
    function refreshFrame() {
      const next = new Image();
      next.onload = () => {
        img.src = next.src;
        frames++;
        const now = performance.now();
        if (now - lastTime >= 1000) {
          stats.innerText = `Stream: ${frames} FPS`;
          frames = 0;
          lastTime = now;
        }
        setTimeout(refreshFrame, 66);
      };
      next.onerror = () => setTimeout(refreshFrame, 1000);
      next.src = '/preview.jpg?t=' + Date.now();
    }
    refreshFrame();
    setInterval(async () => {
      try {
        const res = await fetch('/status');
        const s = await res.json();
        const g = s.game_client;
        hud.innerHTML = `Game: <span class="badge ${g.running ? 'online' : 'offline'}">${g.status_str}</span> | Core: ${s.shadow_runtime.running ? 'PID ' + s.shadow_runtime.pid : 'OFFLINE'} | Stream: HEADLESS IPC`;
      } catch(e) {}
    }, 2000);
  </script>
</body>
</html>© ry   s    r    Úget_pip_htmlzPoe2Supervisor.get_pip_html!  s   € ð?ð ?r"   c           	      óÖ  — | j         �r`	 |                      ¦   «         }|r | j        €t          j        ¦   «         | _        nd| _        | j        r|st          j        ¦   «          | j        râ|rà| j        rt          j        ¦   «         | j        z
  nd}|dk    r¶t          ¦   «         }|r¦t          j
        dk    rt          j        j        nd}|r|                     |¦  «        nd}|sht          ¦   «         }|rXt!          ||¦  «        sHt#          d|d›d|› d	|j        › d
�d¬¦  «         t'          ||dd¬¦  «        }t#          d|› �d¬¦  «         |rr| j        sk|                      ¦   «         sW| j        rt          j        ¦   «         | j        z
  nd}|dk    r-t#          d|d›d�d¬¦  «         |                      dg¬¦  «         | j                             ¦   «         rFt3          | j        ¦  «        }|r0|| j        k    r%t#          dd¬¦  «         |                      ¦   «          n+# t8          $ r}	t#          d|	› �d¬¦  «         Y d}	~	nd}	~	ww xY wt          j        d¦  «         | j         �°^dS dS )u'   VÃ²ng láº·p giÃ¡m sÃ¡t sinh tá»­ ná»�n.Ng        g      4@r†   Fu(   [Supervisor Watchdog] Game á»•n Ä‘á»‹nh z.1fu   s -> Dá»�i cá»­a sá»• HWND ú sang ú...T)Úflush©Ú
borderlessÚ	keep_sizeu4   [Supervisor Watchdog] Káº¿t quáº£ dá»�i cá»­a sá»•: g      6@u/   s -> Khá»Ÿi cháº¡y AutoPOE2_Core_Runtime.exe...z--user-mode)r„   uT   [Supervisor Watchdog] PhÃ¡t hiá»‡n binary má»›i -> Thá»±c hiá»‡n Hot Swap Runtime...z[Supervisor Watchdog Error] g       @)rY   rz   rb   rr   rT   r   Úlaunch_clientrU   r   rŒ   r�   ÚctypesÚwindllÚuser32ÚIsHungAppWindowr   r   ÚprintÚdevicer   r]   rj   r”   rQ   r   r0   ra   r£   rJ   rs   )
rc   Úgame_runningÚuptimerÊ   rÚ   Úis_hungrÉ   ÚokÚcurrent_source_hashÚes
             r    Ú_watchdog_loopzPoe2Supervisor._watchdog_loopd  sv  € àŒmñ /	ð,FØ#×3Ò3Ñ5Ô5�Øð 4ØÔ/Ð7Ý37´9±;´;˜Ô0øà/3�DÔ,ð Ô(ð 7°ð 7Ý&Ô4Ñ6Ô6Ð6ð Ô+ð s°ð sØGKÔG_Ðh�TœY™[œ[¨4Ô+CÑCÐCÐeh�FØ ’~�~Ý$4Ñ$6Ô$6˜	Ø$ð sÝ=@¼\ÈWÒ=TÐ=T¥V¤]Ô%9Ð%9ÐZ^˜FØKQÐ&\ f×&<Ò&<¸YÑ&GÔ&GÐ&GÐW\˜GØ#*ð sÝ%8Ñ%:Ô%: Ø#%ð !sÕ.JÈ9ÐVXÑ.YÔ.Yð !sÝ$)ð  +\ÐU[ð  +\ð  +\ð  +\ð  }Fð  +\ð  +\ð  NPô  NWð  +\ð  +\ð  +\ð  dhð  %iñ  %iô  %ið  %iÝ)GÈ	ÐSUÐbfÐrwÐ)xÑ)xÔ)x BÝ$)Ð*eÐacÐ*eÐ*eÐmqÐ$rÑ$rÔ$rÐ$rð  ð G¨¬ð G¸T×=TÒ=TÑ=VÔ=Vð GØGKÔG_Ðh�TœY™[œ[¨4Ô+CÑCÐCÐeh�FØ ’~�~Ýð  EÈð  Eð  Eð  Eð  Eð  MQð  Rñ  Rô  Rð  RØ×*Ò*°}°oÐ*ÑFÔFÐFð ”?×)Ò)Ñ+Ô+ð 0Ý*:¸4¼?Ñ*KÔ*KÐ'Ø*ð 0Ð/BÀdÔF\Ò/\Ð/\åÐtð  }Að  Bñ  Bô  Bð  BØ×-Ò-Ñ/Ô/Ð/øøåð Fð Fð FÝÐ8°QÐ8Ð8ÀÐEÑEÔEÐEÐEÐEÐEÐEÐEøøøøðFøøøõ ŒJ�s‰OŒOˆOð_ Œmñ /	ð /	ð /	ð /	ð /	s   ŠHH  È 
IÈ*IÉIc                 óê   — | j         rdS d| _         |                      ¦   «          t          j        | j        dd¬¦  «        | _        | j                             ¦   «          |                      ¦   «          dS )u!   Báº­t Supervisor vÃ  HTTP server.NTÚPoe2SupervisorWatchdog©ÚtargetÚdaemonr€   )rY   rw   r^   ÚThreadrä   rZ   ÚstartÚ_start_http_serverry   s    r    rë   zPoe2Supervisor.start—  sz   € àŒ=ð 	ØˆFàˆŒØ×"Ò"Ñ$Ô$Ð$õ !*Ô 0¸Ô8KÐTXÐ_wÐ xÑ xÔ xˆÔØÔ×#Ò#Ñ%Ô%Ð%ð 	×ÒÑ!Ô!Ð!Ð!Ð!r"   c                 óä   — d| _         |                      ¦   «          | j        rM	 | j                             ¦   «          | j                             ¦   «          n# t
          $ r Y nw xY wd| _        dS dS )u0   Táº¯t Supervisor vÃ  giáº£i phÃ³ng tÃ i nguyÃªn.FN)rY   rk   r[   ÚshutdownÚserver_closerJ   ry   s    r    ÚstopzPoe2Supervisor.stop¦  s�   € àˆŒØ×ÒÑÔÐàÔð 	%ðØÔ!×*Ò*Ñ,Ô,Ð,ØÔ!×.Ò.Ñ0Ô0Ð0Ð0øÝð ð ð Ø�ðøøøà $ˆDÔÐÐð	%ð 	%s   ¤2A Á
A$Á#A$c                 ój  ‡— | Š G ˆfd„dt           ¦  «        }	 t          d| j        f|¦  «        | _        t	          j        | j        j        dd¬¦  «        | _        | j                             ¦   «          d S # t          $ r1}t          d| j        › d|› �t          j        ¬	¦  «         Y d }~d S d }~ww xY w)
Nc                   óJ   •— e Zd Zd„ Zdedeeef         fd„Zˆ fd„Z	ˆ fd„Z
dS )ú<Poe2Supervisor._start_http_server.<locals>.SupervisorHandlerc                 ó   — d S ©NrÎ   )rc   r@   Úargss      r    Úlog_messagezHPoe2Supervisor._start_http_server.<locals>.SupervisorHandler.log_message·  s   € Ø�r"   Ústatus_codeÚdatac                 ó–  — t          j        |d¬¦  «                             d¦  «        }|                      |¦  «         |                      dd¦  «         |                      dt          t          |¦  «        ¦  «        ¦  «         |                      dd¦  «         |                      ¦   «          | j         	                    |¦  «         d S )	Né   ©Úindentúutf-8úContent-Typezapplication/json; charset=utf-8úContent-LengthúAccess-Control-Allow-OriginÚ*)
ÚjsonÚdumpsÚencodeÚsend_responseÚsend_headerr‹   r¼   Úend_headersÚwfileÚwrite)rc   rø   rù   Úbodys       r    Ú
_send_jsonzGPoe2Supervisor._start_http_server.<locals>.SupervisorHandler._send_jsonº  s·   € Ý”z $¨qÐ1Ñ1Ô1×8Ò8¸ÑAÔA�Ø×"Ò" ;Ñ/Ô/Ð/Ø× Ò  Ð1RÑSÔSÐSØ× Ò Ð!1µ3µs¸4±y´y±>´>ÑBÔBÐBØ× Ò Ð!>ÀÑDÔDÐDØ× Ò Ñ"Ô"Ð"Ø”
× Ò  Ñ&Ô&Ð&Ð&Ð&r"   c                 óp  •— | j         dv r,‰
                     ¦   «         }|                      d|¦  «         d S | j         dv r´‰
                     ¦   «         }|                     d¦  «        }|                      d¦  «         |                      dd¦  «         |                      dt          t          |¦  «        ¦  «        ¦  «         |  	                    ¦   «          | j
                             |¦  «         d S | j                              d¦  «        �r�d }t          ¦   «         }|rm	 d	d
lm} d	d l} ||d¬¦  «        }|r@|                     ¦   «         }	|                     |	dd¬¦  «         |	                     ¦   «         }n# t(          $ r d }Y nw xY w|s+‰
j        r$	 t-          d¬¦  «        }n# t(          $ r d }Y nw xY w|st/          ¦   «         }|r·|                      d¦  «         |                      dd¦  «         |                      dt          t          |¦  «        ¦  «        ¦  «         |                      dd¦  «         |                      dd¦  «         |  	                    ¦   «          | j
                             |¦  «         d S |                      dddi¦  «         d S |                      dddi¦  «         d S )N)z/statusú/éÈ   )z/previewz/piprþ   rÿ   ztext/html; charset=utf-8r   z/preview.jpgr   )Úcapture_window_bitbltT)Úclient_onlyr=   r>   r?   )rA   z
image/jpegzCache-Controlz#no-cache, no-store, must-revalidater  r  i÷  ÚerrorzGame screen capture unavailableé”  z	Not Found)ÚpathrÌ   r  rÏ   r  r  r  r‹   r¼   r  r	  r
  Ú
startswithr   Úsrc.common.screen_capturer  rC   rG   rH   rI   rJ   rU   r   rN   )rc   ÚstatusÚhtmlr  Ú	jpeg_datarÊ   r  rC   rK   rM   Úsupervisor_refs             €r    Údo_GETzCPoe2Supervisor._start_http_server.<locals>.SupervisorHandler.do_GETÃ  s  ø€ Ø”9Ð 0Ð0Ð0Ø+×6Ò6Ñ8Ô8�FØ—O’O C¨Ñ0Ô0Ð0Ð0Ð0Ø”YÐ"6Ð6Ð6Ø)×6Ò6Ñ8Ô8�DØŸ;š; wÑ/Ô/�DØ×&Ò& sÑ+Ô+Ð+Ø×$Ò$ ^Ð5OÑPÔPÐPØ×$Ò$Ð%5µs½3¸t¹9¼9±~´~ÑFÔFÐFØ×$Ò$Ñ&Ô&Ð&Ø”J×$Ò$ TÑ*Ô*Ð*Ð*Ð*Ø”Y×)Ò)¨.Ñ9Ô9ñ &AØ $�Iå 0Ñ 2Ô 2�IØ ð 
-ð	-ØWÐWÐWÐWÐWÐWØ%˜I˜I˜IØ"7Ð"7¸	ÈtÐ"TÑ"TÔ"T˜CØ"ð ;Ø&(§j¢j¡l¤l Ø #§¢¨°VÀR Ñ HÔ HÐ HØ,/¯LªL©N¬N 	øøÝ(ð -ð -ð -Ø(,˜I˜I˜Ið-øøøð %ð -¨Ô)Kð -ð-Ý(DÈRÐ(PÑ(PÔ(P˜I˜IøÝ(ð -ð -ð -Ø(,˜I˜I˜Ið-øøøð %ð =Ý$:Ñ$<Ô$<˜	à ð 	[Ø×*Ò*¨3Ñ/Ô/Ð/Ø×(Ò(¨¸ÑFÔFÐFØ×(Ò(Ð)9½3½sÀ9¹~¼~Ñ;NÔ;NÑOÔOÐOØ×(Ò(¨Ð:_Ñ`Ô`Ð`Ø×(Ò(Ð)FÈÑLÔLÐLØ×(Ò(Ñ*Ô*Ð*Øœ
×(Ò(¨Ñ3Ô3Ð3Ð3Ð3àŸš¨¨gÐ7XÐ-YÑZÔZÐZÐZÐZà—O’O C¨'°;Ð)?Ñ@Ô@Ð@Ð@Ð@s%   Ä"AE< Å<FÆ
FÆF) Æ)F8Æ7F8c                 óT  •— | j         dk    r6d‰_        ‰                     ¦   «          |                      ddddœ¦  «         d S | j         dk    r6d‰_        ‰                     ¦   «          |                      ddddœ¦  «         d S | j         dk    r/‰                     ¦   «         }|                      d|ddœ¦  «         d S | j         d	k    rG|                      dddd
œ¦  «         t          j        ‰j        ¬¦  «         	                    ¦   «          d S |                      dddi¦  «         d S )Nz/pauseTr  )Úsuccessr¦   z/resumeFú/swap)r  Úswappedú/stop)r  Ústopping)rè   r  r  zEndpoint not found)
r  r]   rk   r  r”   r£   r^   rê   rð   rë   )rc   r  r  s     €r    Údo_POSTzDPoe2Supervisor._start_http_server.<locals>.SupervisorHandler.do_POST÷  sG  ø€ Ø”9 Ò(Ð(Ø-1�NÔ*Ø"×/Ò/Ñ1Ô1Ð1Ø—O’O C°TÀTÐ)JÐ)JÑKÔKÐKÐKÐKØ”Y )Ò+Ð+Ø-2�NÔ*Ø"×0Ò0Ñ2Ô2Ð2Ø—O’O C°TÀUÐ)KÐ)KÑLÔLÐLÐLÐLØ”Y 'Ò)Ð)Ø,×=Ò=Ñ?Ô?�GØ—O’O C°WÈÐ)NÐ)NÑOÔOÐOÐOÐOØ”Y 'Ò)Ð)Ø—O’O C°TÀtÐ)LÐ)LÑMÔMÐMÝÔ$¨NÔ,?Ð@Ñ@Ô@×FÒFÑHÔHÐHÐHÐHà—O’O C¨'Ð3GÐ)HÑIÔIÐIÐIÐIr"   N)Ú__name__Ú
__module__Ú__qualname__r÷   Úintr   r‹   r   r  r  r"  )r  s   €r    ÚSupervisorHandlerró   ¶  s�   ø€ € € € € ðð ð ð'¨cð '¸¸cÀ3¸h¼ð 'ð 'ð 'ð 'ð2Að 2Að 2Að 2Að 2AðhJð Jð Jð Jð Jð Jð Jr"   r'  z	127.0.0.1TÚPoe2SupervisorHttprç   u8   [Supervisor] KhÃ´ng thá»ƒ má»Ÿ HTTP server táº¡i cá»•ng z: ©Úfile)r   r   rS   r[   r^   rê   Úserve_foreverr\   rë   rJ   rÜ   rŒ   rŠ   )rc   r'  rã   r  s      @r    rì   z!Poe2Supervisor._start_http_server³  s  ø€ ØˆðQ	Jð Q	Jð Q	Jð Q	Jð Q	Jð Q	Jð Q	JÕ 6ñ Q	Jô Q	Jð Q	Jðf	uÝ *¨K¸¼Ð+HÐJ[Ñ \Ô \ˆDÔÝ )Ô 0¸Ô8IÔ8WÐ`dÐkð  !Añ  !Aô  !AˆDÔØÔ×#Ò#Ñ%Ô%Ð%Ð%Ð%øÝð 	uð 	uð 	uÝÐbÈTÌ^ÐbÐbÐ_`ÐbÐbÕilÔisÐtÑtÔtÐtÐtÐtÐtÐtÐtÐtøøøøð	uøøøs   šAA7 Á7
B2Â&B-Â-B2)Frõ   )r•   )r#  r$  r%  Ú__doc__ÚDEFAULT_SOURCE_BINÚDEFAULT_RUNTIME_BINÚDEFAULT_HTTP_PORTr   r&  Úboolrd   rw   rz   r	   r�   rj   r   r‹   r”   Úfloatrk   r£   r   r   rÌ   rÏ   rä   rë   rð   rì   rÎ   r"   r    rP   rP   Y   sï  € € € € € ØDÐDð .Ø/Ø*Ø!&Ø$)ð9ð 9àð9ð ð9ð ð	9ð
 ð9ð "ð9ð 9ð 9ð 9ð4ð ¨4ð ¸Dð ð ð ð ð@! ð !ð !ð !ð !ð˜t Cœyð ð ð ð ð0 Dð 0ð 0ð 0ð 0ðð ¨°°c´Ô(;ð Àtð ð ð ð ð<ð ¨ð ¸ð ð ð ð ð6$ $ð $ð $ð $ð $ð,)
˜D  c œNð )
ð )
ð )
ð )
ðVA˜cð Að Að Að AðF1ð 1ð 1ðf"ð "ð "ð%ð %ð %ð[uð [uð [uð [uð [ur"   rP   c                  ó  — t          j        d¬¦  «        } |                      ddd¬¦  «         |                      ddd¬¦  «         |                      d	dd
¬¦  «         |                      ddd¬¦  «         |                      dt          t          dt          › d�¬¦  «         |                      ddd¬¦  «         |                      dddd¬¦  «         |                      ddd¬¦  «         |                      dt
          t          t          j        ¦   «         ¦  «        dgz   dd¬¦  «         |  	                    ¦   «         }|j
        dk    rˆ	 t          d|j
        › d�¦  «         t          j        |j
        ¦  «        }t          dt          |¦  «        › d �¦  «         n5# t          $ r(}t          d!|› �t           j        ¬"¦  «         Y d }~nd }~ww xY w|j        }t'          |j        |j        |¬#¦  «        }|j        rêt/          ¦   «         }|s/t          d$t           j        ¬"¦  «         t!          j        d%¦  «         t3          ¦   «         }|s/t          d&t           j        ¬"¦  «         t!          j        d%¦  «         t5          ||dd'¬(¦  «        }t          d)|› d*|j        › d+|j        › d,|j        › d-|j        › d.|j        › d/|rd0nd1› �¦  «         t!          j        |rd2nd%¦  «         |j         rK| !                    ¦   «         }	t          tE          j#        |	d3¬4¦  «        ¦  «         t!          j        d2¦  «         |j$        ród2d l%}
	 |
j&         '                    d5|j        › d6�d7d8d9i¬:¦  «        }|
j&         (                    |d;¬<¦  «        5 }t          | )                    ¦   «          *                    d=¦  «        ¦  «         d d d ¦  «         n# 1 swxY w Y   nI# t          $ r<}t          d>|› �t           j        ¬"¦  «         t!          j        d%¦  «         Y d }~nd }~ww xY wt!          j        d2¦  «         |j+        ród2d l%}
	 |
j&         '                    d5|j        › d?�d7d8d9i¬:¦  «        }|
j&         (                    |d;¬<¦  «        5 }t          | )                    ¦   «          *                    d=¦  «        ¦  «         d d d ¦  «         n# 1 swxY w Y   nI# t          $ r<}t          d@|› �t           j        ¬"¦  «         t!          j        d%¦  «         Y d }~nd }~ww xY wt!          j        d2¦  «         |j,        r™t          dA|j        › dB�¦  «         | ,                    ¦   «          	 	 t[          j.        dC¦  «         Œ# t^          $ r5 t          dD¦  «         | +                    ¦   «          t          dE¦  «         Y nw xY wt!          j        d2¦  «         | !                    ¦   «         }	t          tE          j#        |	d3¬4¦  «        ¦  «         d S )FNz6AutoPOE2 Process Supervisor & Shadow Binary Controller)Údescriptionz--probeÚ
store_trueuF   Kiá»ƒm tra tráº¡ng thÃ¡i hiá»‡n trÆ°á»�ng (Single-shot) vÃ  in ra JSON)ÚactionÚhelpz--startu   Khá»Ÿi cháº¡y Supervisor Daemonz--stopu*   Gá»­i lá»‡nh táº¯t Supervisor Ä‘ang cháº¡yz--swapu-   Gá»­i lá»‡nh hoÃ¡n Ä‘á»•i Shadow Binary má»›iz--portu*   Cá»•ng HTTP Control Plane (máº·c Ä‘á»‹nh: r¨   )ÚtypeÚdefaultr6  z--auto-launchu9   Tá»± Ä‘á»™ng má»Ÿ PathOfExile.exe náº¿u game chÆ°a cháº¡yz--virtual-displayFui   KÃ­ch hoáº¡t tÃ­nh nÄƒng cÃ¡ch ly sang mÃ n hÃ¬nh áº£o phá»¥ (máº·c Ä‘á»‹nh: False - dÃ¹ng Headless Mode))r5  r8  r6  z--move-game-to-vdu?   Dá»�i ngay cá»­a sá»• game Path of Exile 2 sang mÃ n hÃ¬nh áº£oz--optimize-graphicsÚnoneuZ   Tá»‘i Æ°u Ä‘á»“ há»�a game trÆ°á»›c khi váº­n hÃ nh (ultra_low, low_1080p, balanced_1080p))r7  Úchoicesr8  r6  uD   [Supervisor] Ä�ang tá»‘i Æ°u cáº¥u hÃ¬nh Ä‘á»“ há»�a vá»›i profile 'z'...u1   [Supervisor] Tá»‘i Æ°u Ä‘á»“ há»�a thÃ nh cÃ´ng (u     thÃ´ng sá»‘ Ä‘Ã£ cáº­p nháº­t).u=   [Supervisor Cáº£nh bÃ¡o] KhÃ´ng thá»ƒ tá»‘i Æ°u Ä‘á»“ há»�a: r)  )rS   rT   rU   uS   [Supervisor Error] KhÃ´ng tÃ¬m tháº¥y cá»­a sá»• game Path of Exile 2 Ä‘ang cháº¡y.é   uH   [Supervisor Error] KhÃ´ng tÃ¬m tháº¥y mÃ n hÃ¬nh áº£o phá»¥ (Monitor 2).TrÔ   u(   [Supervisor] Dá»�i cá»­a sá»• game HWND rÑ   z (r­   u    táº¡i ú,z): u   THÃ€NH CÃ”NGu   THáº¤T BÃ€Ir   rû   rü   zhttp://127.0.0.1:r  s   {}rÿ   zapplication/json)rù   Úheadersé   r˜   rþ   u!   Lá»—i gá»­i lá»‡nh hoÃ¡n Ä‘á»•i: r   u   Lá»—i gá»­i lá»‡nh dá»«ng: uG   [Supervisor] Khá»Ÿi Ä‘á»™ng AutoPOE2 Supervisor táº¡i http://127.0.0.1:rÒ   rš   u+   
[Supervisor] Ä�ang dá»«ng tiáº¿n trÃ¬nh...u"   [Supervisor] Ä�Ã£ dá»«ng an toÃ n.)0ÚargparseÚArgumentParserÚadd_argumentr&  r/  r‹   r}   r   ÚkeysÚ
parse_argsÚoptimize_graphicsrÜ   r   Úapply_profiler¼   rJ   rŒ   rŠ   r¹   rP   ÚportÚauto_launchÚmove_game_to_vdr   Úexitr   r   rÝ   rÀ   rÁ   rÂ   rÃ   ÚproberÌ   r  r  ÚswapÚurllib.requestÚrequestÚRequestÚurlopenr*   Údecoderð   rë   rr   rs   ÚKeyboardInterrupt)Úparserrö   Úchangesrã   Úuse_vdr·   rÊ   rÉ   rá   r  ÚurllibÚreqÚresps                r    ÚmainrX    s½  € ÝÔ$Ð1iÐjÑjÔj€FØ
×Ò˜	¨,ð  >FÐñ  Gô  Gð  GØ
×Ò˜	¨,Ð=^ÐÑ_Ô_Ð_Ø
×Ò˜¨Ð<hÐÑiÔiÐiØ
×Ò˜¨Ð<kÐÑlÔlÐlØ
×Ò˜¥sÕ4Eð  MNõ  zKð  MNð  MNð  MNÐñ  Oô  Oð  OØ
×Ò˜°ÐC~ÐÑÔÐØ
×ÒÐ+°LÈ%ð  WBÐñ  Cô  Cð  CØ
×ÒÐ+°Lð  HIÐñ  Jô  Jð  JØ
×ÒÐ-µCÅÅhÄmÁoÄoÑAVÔAVÐZ`ÐYaÑAaÐkqð  yUÐñ  Vô  Vð  VØ×ÒÑÔ€DàÔ Ò'Ð'ð	hÝÐuÐY]ÔYoÐuÐuÐuÑvÔvÐvÝ+Ô9¸$Ô:PÑQÔQˆGÝÐtÅcÈ'ÁlÄlÐtÐtÐtÑuÔuÐuÐuøÝð 	hð 	hð 	hÝÐUÐRSÐUÐUÕ\_Ô\fÐgÑgÔgÐgÐgÐgÐgÐgÐgøøøøð	høøøð Ô!€FÝØ”)ØÔ)Ø"ðñ ô €Jð Ôð !Ý$Ñ&Ô&ˆ	Øð 	ÝÐgÕnqÔnxÐyÑyÔyÐyÝŒH�Q‰KŒKˆKÝ Ñ"Ô"ˆØð 	ÝÐ\ÕcfÔcmÐnÑnÔnÐnÝŒH�Q‰KŒKˆKÝ+¨I°rÀeÐW[Ð\Ñ\Ô\ˆÝð  s¸ð  sð  sÈ"Ì)ð  sð  sÐWYÔW_ð  sð  sÐbdÔbkð  sð  sÐtvÔt{ð  sð  sð  Aô  Eð  sð  sð  \^ð  Jqð  JXð  JXð  dqð  sð  sñ  	tô  	tð  	tÝŒ�b���˜aÑ Ô Ð à„zð Ø×&Ò&Ñ(Ô(ˆÝ�dŒj˜¨Ð*Ñ*Ô*Ñ+Ô+Ð+ÝŒ�‰Œˆà„yð 	ØÐÐÐð	Ø”.×(Ò(Ð)M¸T¼YÐ)MÐ)MÐ)MÐTYÐdrð  uGð  dHÐ(ñ  Iô  IˆCØ”×'Ò'¨°QÐ'Ñ7Ô7ð 3¸4Ý�d—i’i‘k”k×(Ò(¨Ñ1Ô1Ñ2Ô2Ð2ð3ð 3ð 3ñ 3ô 3ð 3ð 3ð 3ð 3ð 3ð 3øøøð 3ð 3ð 3ð 3øøåð 	ð 	ð 	ÝÐ9°aÐ9Ð9ÅÄ
ÐKÑKÔKÐKÝŒH�Q‰KŒKˆKˆKˆKˆKˆKˆKøøøøð	øøøõ 	Œ�‰Œˆà„yð 	ØÐÐÐð	Ø”.×(Ò(Ð)M¸T¼YÐ)MÐ)MÐ)MÐTYÐdrð  uGð  dHÐ(ñ  Iô  IˆCØ”×'Ò'¨°QÐ'Ñ7Ô7ð 3¸4Ý�d—i’i‘k”k×(Ò(¨Ñ1Ô1Ñ2Ô2Ð2ð3ð 3ð 3ñ 3ô 3ð 3ð 3ð 3ð 3ð 3ð 3øøøð 3ð 3ð 3ð 3øøåð 	ð 	ð 	ÝÐ3°Ð3Ð3½#¼*ÐEÑEÔEÐEÝŒH�Q‰KŒKˆKˆKˆKˆKˆKˆKøøøøð	øøøõ 	Œ�‰Œˆà„zð 
ÝÐfÐX\ÔXaÐfÐfÐfÑgÔgÐgØ×ÒÑÔÐð	8ð Ý”
˜3‘”�ð øå ð 	8ð 	8ð 	8ÝÐ@ÑAÔAÐAØ�OŠOÑÔÐÝÐ6Ñ7Ô7Ð7Ð7Ð7ð	8øøøõ 	Œ�‰Œˆð ×"Ò"Ñ$Ô$€FÝ	�$Œ*�V AÐ
&Ñ
&Ô
&Ñ'Ô'Ð'Ð'Ð's¥   ÅAF Æ
GÆ(GÇGÍAO Î	5O
Î>O Ï
OÏO ÏOÏO Ï
PÏ 2PÐPÐ?AS Ò5SÒ8S ÓSÓS ÓSÓS Ó
TÓ2TÔTÕ!U7 Õ7<V6Ö5V6Ú__main__);r,  ÚosrŒ   rr   r  ro   r'   r?  rŽ   r^   rØ   Úpathlibr   Úhttp.serverr   r   Útypingr   r   r   r	   Ú__file__Úresolverm   ÚWORKSPACE_ROOTr  Úinsertr‹   Úsrc.common.win32_processr
   r   r   Úsrc.common.win32_windowr   Ú"src.common.virtual_display_managerr   r   r   r   r   Ú"src.assistant_tool.client_launcherr   Ú"src.assistant_tool.core_shm_bridger   r   Ú%src.assistant_tool.graphics_optimizerr   r   r   r!   r-  r.  r/  r0   ÚbytesrN   rP   rX  r#  rÎ   r"   r    ú<module>ri     sì  ððð ð 
€	€	€	Ø 
€
€
€
Ø €€€Ø €€€Ø €€€Ø €€€Ø €€€Ø Ð Ð Ð Ø Ð Ð Ð Ø €€€Ø Ð Ð Ð Ð Ð Ø :Ð :Ð :Ð :Ð :Ð :Ð :Ð :Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,ð ��h‘”×'Ò'Ñ)Ô)Ô0Ô7€Ø „‡‚��3�3�~Ñ&Ô&Ñ 'Ô 'Ð 'à ^Ð ^Ð ^Ð ^Ð ^Ð ^Ð ^Ð ^Ð ^Ð ^Ø 4Ð 4Ð 4Ð 4Ð 4Ð 4ðð ð ð ð ð ð ð ð ð ð ð ð ð ð BÐ AÐ AÐ AÐ AÐ AØ UÐ UÐ UÐ UÐ UÐ UÐ UÐ UØ QÐ QÐ QÐ QÐ QÐ QÐ QÐ Qð �UÑ˜YÑ&Ð)<Ñ<Ø�WÑ˜uÑ$ yÑ0Ð3FÑFØ�UÑÐ0Ñ0ðÐ ð$ ð $ð $ð $ð $ð -Ð,Ñ.Ô.Ð Ø(Ô/Ð2MÑMÐ ØÐ ð˜tð ¨ð ð ð ð ð ð ð ð ð ðuuð uuð uuð uuð uuñ uuô uuð uuðvR(ð R(ð R(ðj ˆzÒÐØ€D�F„F€F€F€Fð Ðr"   