§
    _Þ¬jô  ã                   ó
  — d 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	m
Z
 	 ddlZddlZddlZn# e$ r	 dZdZdZY nw xY w	 ddlmZ n# e$ r dZY nw xY we G d„ d¦  «        ¦   «         ZddlmZmZmZ  G d	„ d
¦  «        ZdS )ug  
Module Cáº£m Biáº¿n Quang Há»�c Quáº£ Cáº§u MÃ¡u (Optical Health Globe Sensor)
Ä�o lÆ°á»�ng lÆ°á»£ng mÃ¡u (HP) tá»©c thá»�i trong Path of Exile 2 thÃ´ng qua ká»¹ thuáº­t chá»¥p mÃ n hÃ¬nh
cá»±c nhanh báº±ng Win32 GDI BitBlt (<2ms), multi-slit sampling loáº¡i bá»� sá»‘ hiá»ƒn thá»‹ mÃ¡u,
Ä‘áº£m báº£o hoÃ n toÃ n an toÃ n: ZERO memory write, ZERO injection.
é    N)Ú	dataclass)ÚAnyÚOptionalÚTuple)ÚImagec                   óô   — e Zd ZU dZdZeed<   dZeed<   dZe	ed<   dZ
eed<   dZeed<   dZeed	<   dZeed
<   dZeed<   dZeed<   dZeed<   dZeed<   dZeed<   dZeed<   dZeed<   dZeed<   dZeed<   dS )ÚOpticalVitalsuI   Káº¿t quáº£ nháº­n diá»‡n Vitals trá»±c tiáº¿p tá»« mÃ n hÃ¬nh game POE2.r   Ú
current_hpÚmax_hpç        Úhp_ratioÚcurrent_shieldÚ
max_shieldÚcurrent_wardÚmax_wardÚcurrent_manaÚmax_manaÚcurrent_spiritÚ
max_spiritÚcurrent_rageÚmax_rageÚ Úraw_textFÚis_detectedÚnoneÚdetection_methodN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r
   ÚintÚ__annotations__r   r   Úfloatr   r   r   r   r   r   r   r   r   r   r   Ústrr   Úboolr   © ó    ú<C:\Projects\AutoPOE2\src\assistant_tool\optical_hp_sensor.pyr	   r	      s  € € € € € € àSÐSØ€J�ÐÐÑØ€FˆC€O€O�OØ€HˆeÐÐÑØ€N�CÐÐÑØ€J�ÐÐÑØ€L�#ÐÐÑØ€HˆcÐÐÑØ€L�#ÐÐÑØ€HˆcÐÐÑØ€N�CÐÐÑØ€J�ÐÐÑØ€L�#ÐÐÑØ€HˆcÐÐÑØ€HˆcÐÐÑØ€K�ÐÐÑØ"Ð�cÐ"Ð"Ñ"Ð"Ð"r'   r	   )Úattach_to_default_desktopÚensure_window_focusÚfind_poe2_windowc                   ó”  — e Zd ZU dZdZeed<   dZeed<   	 	 	 	 dLd
edededefd„Z	dMdefd„Z
dNdefd„Zd„ Zdee         fd„ZdOdee         defd„Zdedeeeeef         fd„Zdedeeeeef         fd„ZdOdee         dee         fd„Z	 	 	 	 	 dPdeded ee         d!ee         d"ee         d#edee         fd$„Z	 dQdeded ed!ed"ed%edee         fd&„ZedRd(ee         d)edefd*„¦   «         Zed+ed,ed-edefd.„¦   «         Zed+ed,ed-edefd/„¦   «         Zed+ed,ed-edefd0„¦   «         Zed1edeeef         fd2„¦   «         Zed3edefd4„¦   «         Z ed5edefd6„¦   «         Z!ed7edeeeeef                  eeeef                  eeeef                  f         fd8„¦   «         Z"	 	 	 dSd!ed"ed(ed
ee         dee         dee         deeeef         fd9„Z#	 dOd:ed
ee         deeeef         fd;„Z$	 	 	 	 	 dTdee         d
ee         d(ee         d!ee         d"ee         deeeef         fd<„Z%	 	 	 	 	 dTdee         d(ee         d!ee         d"ee         d=ee         deeeef         fd>„Z&e'dOd?ee         dee(         fd@„¦   «         Z)	 	 	 dSdee         d:ee         dAee         de(fdB„Z*	 	 dUdEedFedGedHedIedJedeeef         fdK„Z+dS )VÚOpticalHPSensoruX  
    Cáº£m biáº¿n quang há»�c Ä‘o lÆ°á»�ng HP tá»« Quáº£ Cáº§u MÃ¡u (Health Globe) á»Ÿ gÃ³c dÆ°á»›i bÃªn trÃ¡i mÃ n hÃ¬nh.
    Sá»­ dá»¥ng ká»¹ thuáº­t Multi-Slit Sampling táº¡i 3 trá»¥c cá»™t (X_center - 15, X_center, X_center + 15)
    káº¿t há»£p ná»™i suy Ä‘á»ƒ hoÃ n toÃ n loáº¡i trá»« áº£nh hÆ°á»Ÿng cá»§a chá»¯ sá»‘ ("1234/1234") Ä‘Ã¨ lÃªn quáº£ cáº§u.
    Há»— trá»£ cáº£ Win32 GDI BitBlt siÃªu tá»‘c (<2ms) láº«n PrintWindow vá»›i PW_RENDERFULLCONTENT khi cháº¡y ngáº§m.
    TÃ­ch há»£p luá»“ng quÃ©t ngáº§m báº¥t Ä‘á»“ng bá»™ (2Hz) khÃ´ng bao giá»� lÃ m giáº­t lag giao diá»‡n Tkinter.
    é   ÚPW_CLIENTONLYé   ÚPW_RENDERFULLCONTENTr   çš™™™™™¹?çÍÌÌÌÌÌì?é   Úexpected_max_hpÚtop_margin_ratioÚbottom_margin_ratioÚslit_offsetc                 ó  — || _         || _        || _        || _        d| _        d| _        || _        d| _        d | _        t          ¦   «         | _
        d | _        d| _        d| _        t          j        ¦   «         | _        d S )Nr   r   Fç      à?)r5   r6   r7   r8   Ú
last_ratioÚlast_current_hpÚlast_max_hpÚlast_latency_msÚcached_hwndr	   Úlast_detected_vitalsÚ
_bg_threadÚ_bg_runningÚ_bg_intervalÚ	threadingÚLockÚ_bg_lock)Úselfr5   r6   r7   r8   s        r(   Ú__init__zOpticalHPSensor.__init__F   sƒ   € ð  /ˆÔØ 0ˆÔØ#6ˆÔ Ø&ˆÔà!$ˆŒØ$%ˆÔØ /ˆÔØ&)ˆÔØ*.ˆÔÝ3@±?´?ˆÔ!ð 7;ˆŒØ!&ˆÔØ#&ˆÔÝ(1¬Ñ(8Ô(8ˆŒˆˆr'   r:   Úintervalc                 ó@  — | j         5  | j        r.| j        r'| j                             ¦   «         r	 ddd¦  «         dS || _        d| _        t          j        | j        dd¬¦  «        | _        | j                             ¦   «          ddd¦  «         dS # 1 swxY w Y   dS )u!  
        Khá»Ÿi cháº¡y luá»“ng quÃ©t ngáº§m báº¥t Ä‘á»“ng bá»™ (Background OCR / Slit Sensor worker thread).
        Ä�á»‹nh ká»³ 2Hz (interval=0.5s) cáº­p nháº­t last_detected_vitals mÃ  khÃ´ng bao giá»�
        lÃ m treo hoáº·c giáº­t khá»±ng giao diá»‡n ngÆ°á»�i dÃ¹ng Tkinter!
        NTÚOpticalSensorBgWorker)ÚtargetÚnameÚdaemon)	rF   rB   rA   Úis_aliverC   rD   ÚThreadÚ_bg_worker_loopÚstart)rG   rI   s     r(   Ústart_background_workerz'OpticalHPSensor.start_background_worker_   s  € ð Œ]ð 
	$ð 
	$ØÔð  D¤Oð ¸¼×8PÒ8PÑ8RÔ8Rð Øð
	$ð 
	$ð 
	$ñ 
	$ô 
	$ð 
	$ð 
	$ð 
	$ð !)ˆDÔØ#ˆDÔÝ'Ô.ØÔ+Ø,Øðñ ô ˆDŒOð
 ŒO×!Ò!Ñ#Ô#Ð#ð
	$ð 
	$ð 
	$ñ 
	$ô 
	$ð 
	$ð 
	$ð 
	$ð 
	$ð 
	$ð 
	$ð 
	$øøøð 
	$ð 
	$ð 
	$ð 
	$ð 
	$ð 
	$s   ˆ)B¾ABÂBÂBç      ð?Útimeoutc                 ó  — | j         5  d| _        ddd¦  «         n# 1 swxY w Y   | j        rO| j                             ¦   «         r8	 | j                             |¬¦  «         n# t
          $ r Y nw xY wd| _        dS dS dS )u8   Dá»«ng an toÃ n luá»“ng quÃ©t ngáº§m báº¥t Ä‘á»“ng bá»™.FN©rU   )rF   rB   rA   rO   ÚjoinÚ	Exception)rG   rU   s     r(   Ústop_background_workerz&OpticalHPSensor.stop_background_workerq   sæ   € àŒ]ð 	%ð 	%Ø$ˆDÔð	%ð 	%ð 	%ñ 	%ô 	%ð 	%ð 	%ð 	%ð 	%ð 	%ð 	%øøøð 	%ð 	%ð 	%ð 	%àŒ?ð 	#˜tœ×7Ò7Ñ9Ô9ð 	#ðØ”×$Ò$¨WÐ$Ñ5Ô5Ð5Ð5øÝð ð ð Ø�ðøøøà"ˆDŒOˆOˆOð	#ð 	#ð 	#ð 	#s   ˆœ £ ÁA$ Á$
A1Á0A1c                 óª  — t          ¦   «          | j        r½	 |                      ¦   «         }|r8|j        r1|j        dk    r&| j        5  || _        ddd¦  «         n# 1 swxY w Y   n# t          $ r Y nw xY wt          dt          | j
        dz  ¦  «        ¦  «        }t          |¦  «        D ]}| j        s nt          j        d¦  «         Œ | j        °»dS dS )uK   VÃ²ng láº·p quÃ©t ngáº§m 2Hz liÃªn tá»¥c cáº­p nháº­t last_detected_vitals.r   Nr.   gš™™™™™©?)r)   rB   Údetect_vitals_from_screenr   r   rF   r@   rY   Úmaxr!   rC   ÚrangeÚtimeÚsleep)rG   ÚvÚsleep_chunksÚ_s       r(   rQ   zOpticalHPSensor._bg_worker_loop|   sJ  € å!Ñ#Ô#Ð#ØÔð 	!ðØ×2Ò2Ñ4Ô4�Øð 6˜œð 6¨1¬8°aª<¨<Øœð 6ð 6Ø45˜Ô1ð6ð 6ð 6ñ 6ô 6ð 6ð 6ð 6ð 6ð 6ð 6øøøð 6ð 6ð 6ð 6øøåð ð ð Ø�ðøøøå˜q¥# dÔ&7¸$Ñ&>Ñ"?Ô"?Ñ@Ô@ˆLÝ˜<Ñ(Ô(ð !ð !�ØÔ'ð Ø�EÝ”
˜4Ñ Ô Ð Ð ð Ôð 	!ð 	!ð 	!ð 	!ð 	!s5   —/A& ÁAÁA& ÁAÁA& Á!AÁ"A& Á&
A3Á2A3Úreturnc                 óø   — | j         rYt          rR	 t          j        | j         ¦  «        r t          j        | j         ¦  «        r| j         S n# t          $ r
 d| _         Y nw xY wt          ¦   «         }|r	|| _         |S dS )uÄ   
        XÃ¡c Ä‘á»‹nh HWND cá»§a cá»­a sá»• game Path of Exile 2:
        Sá»­ dá»¥ng thÆ° viá»‡n dÃ¹ng chung src.common.win32_window.
        LÆ°u cache self.cached_hwnd khi tÃ¬m tháº¥y.
        N)r?   Úwin32guiÚIsWindowÚIsWindowVisiblerY   Ú_find_poe2_window)rG   Úhwnds     r(   r+   z OpticalHPSensor.find_poe2_window�   s¡   € ð Ôð 	(¥ð 	(ð(ÝÔ$ TÔ%5Ñ6Ô6ð ,½8Ô;SÐTXÔTdÑ;eÔ;eð ,ØÔ+Ð+øøÝð (ð (ð (Ø#'�Ô Ð Ð ð(øøøõ !Ñ"Ô"ˆØð 	Ø#ˆDÔØˆKØˆts   �8A
 Á
AÁANrj   c                 óT   — |p|                       ¦   «         }|sdS t          |¦  «        S )uO   Tá»± Ä‘á»™ng chuyá»ƒn tab vÃ  Ä‘Æ°a cá»­a sá»• Path of Exile 2 lÃªn foreground.F)r+   r*   )rG   rj   Útarget_hwnds      r(   Úbring_game_to_foregroundz(OpticalHPSensor.bring_game_to_foreground    s3   € àÐ5˜d×3Ò3Ñ5Ô5ˆØð 	Ø�5Ý" ;Ñ/Ô/Ð/r'   c                 óÌ  — d}d}t           rZ|rX	 t          j        |¦  «        }|d         |d         z
  }|d         |d         z
  }|dk    r
|dk    r|}|}n# t          $ r Y nw xY w|dz  }t          d	t	          d
|z  ¦  «        ¦  «        }t          d	t	          d
|z  ¦  «        ¦  «        }	t	          d|z  ¦  «        }
t          d|t	          d|z  ¦  «        z
  ¦  «        }|
|||	fS )u   
        Ä�o kÃ­ch thÆ°á»›c cá»­a sá»• game, tÃ­nh toÃ¡n vÃ¹ng ROI cá»§a Quáº£ Cáº§u MÃ¡u á»Ÿ gÃ³c dÆ°á»›i bÃªn trÃ¡i mÃ n hÃ¬nh:
        scale = client_h / 1080.0
        rw = int(150 * scale), rh = int(150 * scale)
        rx = int(15 * scale), ry = client_h - int(170 * scale)
        é€  é8  r0   r   é   r.   éd   ç     à�@é
   é–   r4   éª   ©rf   ÚGetClientRectrY   r]   r!   )rG   rj   Ú	_client_wÚclient_hÚrectÚwÚhÚscaleÚrwÚrhÚrxÚrys               r(   Úget_globe_roizOpticalHPSensor.get_globe_roi§   s  € ð ˆ	Øˆåð 		˜ð 		ðÝÔ-¨dÑ3Ô3�Ø˜”G˜d 1œgÑ%�Ø˜”G˜d 1œgÑ%�Ø�s’7�7˜q 3šw˜wØ !�IØ �HøøÝð ð ð Ø�ðøøøð ˜6Ñ!ˆÝ�•S˜˜u™Ñ%Ô%Ñ&Ô&ˆÝ�•S˜˜u™Ñ%Ô%Ñ&Ô&ˆÝ��e‘‰_Œ_ˆÝ��H�s 3¨¡;Ñ/Ô/Ñ/Ñ0Ô0ˆà�B˜˜BÐÐó   �AA Á
A#Á"A#c                 óî  — d}d}t           rZ|rX	 t          j        |¦  «        }|d         |d         z
  }|d         |d         z
  }|dk    r
|dk    r|}|}n# t          $ r Y nw xY w|dz  }t          d	t	          d
|z  ¦  «        ¦  «        }t          d	t	          d
|z  ¦  «        ¦  «        }	t          d|t	          d|z  ¦  «        z
  ¦  «        }
t          d|t	          d|z  ¦  «        z
  ¦  «        }|
|||	fS )uO  
        Ä�o kÃ­ch thÆ°á»›c cá»­a sá»• game, tÃ­nh toÃ¡n vÃ¹ng ROI cá»§a Quáº£ Cáº§u Mana á»Ÿ gÃ³c dÆ°á»›i bÃªn pháº£i mÃ n hÃ¬nh:
        scale = client_h / 1080.0
        rw = max(10, int(150 * scale)), rh = max(10, int(150 * scale))
        rx = max(0, client_w - int(165 * scale)), ry = max(0, client_h - int(170 * scale))
        ro   rp   r0   r   rq   r.   rr   rs   rt   ru   é¥   rv   rw   )rG   rj   Úclient_wrz   r{   r|   r}   r~   r   r€   r�   r‚   s               r(   Úget_mana_roizOpticalHPSensor.get_mana_roiÄ   s#  € ð ˆØˆåð 		˜ð 		ðÝÔ-¨dÑ3Ô3�Ø˜”G˜d 1œgÑ%�Ø˜”G˜d 1œgÑ%�Ø�s’7�7˜q 3šw˜wØ �HØ �HøøÝð ð ð Ø�ðøøøð ˜6Ñ!ˆÝ�•S˜˜u™Ñ%Ô%Ñ&Ô&ˆÝ�•S˜˜u™Ñ%Ô%Ñ&Ô&ˆÝ��H�s 3¨¡;Ñ/Ô/Ñ/Ñ0Ô0ˆÝ��H�s 3¨¡;Ñ/Ô/Ñ/Ñ0Ô0ˆà�B˜˜BÐÐr„   c                 óŠ  ‡— t          ¦   «          |p|                      ¦   «         }|sdS t          t          j        dd¦  «        }t          t          j        dd¦  «        }|r|sdS ddlmŠ ‰                     ¦   «         }|                     |t          j        |¦  «        ¦  «        sdS |j	        |j
        z
  }|j        |j        z
  }|dk    s|dk    rdS d}d}	d}
d}d}	 	 |                     dddd¦  «        }|r|                     |¦  «         n# t          $ r Y nw xY w|                     d¦  «        }|s­	 |r*|	r(	 |                     |	|¦  «         n# t          $ r Y nw xY w|
r'	 |                     |
¦  «         n# t          $ r Y nw xY w|	r'	 |                     |	¦  «         n# t          $ r Y nw xY w|r*	 |                     d|¦  «         dS # t          $ r Y dS w xY wdS |                     |¦  «        }	|	s­	 |r*|	r(	 |                     |	|¦  «         n# t          $ r Y nw xY w|
r'	 |                     |
¦  «         n# t          $ r Y nw xY w|	r'	 |                     |	¦  «         n# t          $ r Y nw xY w|r*	 |                     d|¦  «         dS # t          $ r Y dS w xY wdS |                     |||¦  «        }
|
s­	 |r*|	r(	 |                     |	|¦  «         n# t          $ r Y nw xY w|
r'	 |                     |
¦  «         n# t          $ r Y nw xY w|	r'	 |                     |	¦  «         n# t          $ r Y nw xY w|r*	 |                     d|¦  «         dS # t          $ r Y dS w xY wdS |                     |	|
¦  «        }t/          d|j
        ¦  «        }t/          d|j        ¦  «        }d	}|                     |	dd||||||¦	  «	        s­	 |r*|	r(	 |                     |	|¦  «         n# t          $ r Y nw xY w|
r'	 |                     |
¦  «         n# t          $ r Y nw xY w|	r'	 |                     |	¦  «         n# t          $ r Y nw xY w|r*	 |                     d|¦  «         dS # t          $ r Y dS w xY wdS  G ˆfd
„dt          j        ¦  «        } |¦   «         }t          j        |¦  «        |_        ||_        | |_        d|_        d|_        d|_         t          j!        ||z  dz  ¦  «        }| "                    |	|
d||t          j        |¦  «        d¦  «        }|dk    r0tF          �)tG          j$        d||ftK          |¦  «        dddd¦  «        }n# t          $ r d}Y nw xY w|r*|	r(	 |                     |	|¦  «         n# t          $ r Y nw xY w|
r'	 |                     |
¦  «         n# t          $ r Y nw xY w|	r'	 |                     |	¦  «         n# t          $ r Y nw xY w|r(	 |                     d|¦  «         n¾# t          $ r Y n²w xY wn­# |r*|	r(	 |                     |	|¦  «         n# t          $ r Y nw xY w|
r'	 |                     |
¦  «         n# t          $ r Y nw xY w|	r'	 |                     |	¦  «         n# t          $ r Y nw xY w|r(	 |                     d|¦  «         w # t          $ r Y w w xY ww xY w|S )u0  
        Chá»¥p toÃ n bá»™ cá»­a sá»• game POE2 báº±ng Desktop DC user32.GetDC(0) káº¿t há»£p user32.GetWindowRect(hwnd).
        Kháº¯c phá»¥c triá»‡t Ä‘á»ƒ viá»‡c Direct3D 12 flip model tráº£ vá»� bitmap Ä‘en.
        Tráº£ vá»� Ä‘á»‘i tÆ°á»£ng PIL Image (RGBA) hoáº·c None náº¿u tháº¥t báº¡i.
        NÚuser32Úgdi32r   ©ÚwintypesÚDefaultFi   é  Ì c                   óÄ   •— e Zd Zd” j        fd” j        fd” j        fd” j        fd” j        fd” j        fd” j        fd” j        fd	” j        fd
” j        fd” j        fgZdS )ú=OpticalHPSensor.capture_full_screen.<locals>.BITMAPINFOHEADERÚbiSizeÚbiWidthÚbiHeightÚbiPlanesÚ
biBitCountÚbiCompressionÚbiSizeImageÚbiXPelsPerMeterÚbiYPelsPerMeterÚ	biClrUsedÚbiClrImportantN©r   r   r   ÚDWORDÚLONGÚWORDÚ_fields_rŒ   s   €r(   ÚBITMAPINFOHEADERr‘     ó„   ø€ € € € € à˜xœ~Ð.Ø ¤Ð.Ø ¤Ð/Ø ¤Ð/Ø! 8¤=Ð1Ø$ h¤nÐ5Ø" H¤NÐ3Ø&¨¬Ð6Ø&¨¬Ð6Ø  (¤.Ð1Ø% x¤~Ð6ð���r'   r¢   r.   é    é   ÚRGBAÚrawÚBGRA)&r)   r+   ÚgetattrÚctypesÚwindllr�   ÚRECTÚGetWindowRectÚbyrefÚrightÚleftÚbottomÚtopÚOpenDesktopWÚSetThreadDesktoprY   ÚGetDCÚSelectObjectÚDeleteObjectÚDeleteDCÚ	ReleaseDCÚCreateCompatibleDCÚCreateCompatibleBitmapr]   ÚBitBltÚ	StructureÚsizeofr’   r“   r”   r•   r–   r—   Úcreate_string_bufferÚ	GetDIBitsr   Ú
frombufferÚbytes)rG   rj   rl   rŠ   r‹   r{   r|   r}   Údesk_dcÚmem_dcÚbmpÚold_bmpÚimg_resÚhdeskÚsrc_xÚsrc_yÚSRCCOPYr¢   ÚbmiÚbufÚlinesr�   s                        @r(   Úcapture_full_screenz#OpticalHPSensor.capture_full_screená   s9
  ø€ õ 	"Ñ#Ô#Ð#ØÐ5˜d×3Ò3Ñ5Ô5ˆØð 	Ø�4å�œ¨°$Ñ7Ô7ˆÝ�œ w°Ñ5Ô5ˆØð 	˜Uð 	Ø�4à#Ð#Ð#Ð#Ð#Ð#Ø�}Š}‰ŒˆØ×#Ò# Kµ´¸dÑ1CÔ1CÑDÔDð 	Ø�4àŒJ˜œÑ"ˆØŒK˜$œ(Ñ"ˆØ�Š6ˆ6�Q˜!’V�VØ�4àˆØˆØˆØˆØˆðJ	ðØ×+Ò+¨I°q¸%ÀÑLÔL�Øð 3Ø×+Ò+¨EÑ2Ô2Ð2øøÝð ð ð Ø�ðøøøð —l’l 1‘o”oˆGØð ØðZ ð ˜6ð ðØ×&Ò& v¨wÑ7Ô7Ð7Ð7øÝ ð ð ð Ø�Dðøøøàð ðØ×&Ò& sÑ+Ô+Ð+Ð+øÝ ð ð ð Ø�Dðøøøàð ðØ—N’N 6Ñ*Ô*Ð*Ð*øÝ ð ð ð Ø�Dðøøøàð ðØ×$Ò$ Q¨Ñ0Ô0Ð0Ð0Ð0øÝ ð ð ð Ø�D�Dðøøøðð ðw ×-Ò-¨gÑ6Ô6ˆFØð ØðT ð ˜6ð ðØ×&Ò& v¨wÑ7Ô7Ð7Ð7øÝ ð ð ð Ø�Dðøøøàð ðØ×&Ò& sÑ+Ô+Ð+Ð+øÝ ð ð ð Ø�Dðøøøàð ðØ—N’N 6Ñ*Ô*Ð*Ð*øÝ ð ð ð Ø�Dðøøøàð ðØ×$Ò$ Q¨Ñ0Ô0Ð0Ð0Ð0øÝ ð ð ð Ø�D�Dðøøøðð ðq ×.Ò.¨w¸¸1Ñ=Ô=ˆCØð ØðN ð ˜6ð ðØ×&Ò& v¨wÑ7Ô7Ð7Ð7øÝ ð ð ð Ø�Dðøøøàð ðØ×&Ò& sÑ+Ô+Ð+Ð+øÝ ð ð ð Ø�Dðøøøàð ðØ—N’N 6Ñ*Ô*Ð*Ð*øÝ ð ð ð Ø�Dðøøøàð ðØ×$Ò$ Q¨Ñ0Ô0Ð0Ð0Ð0øÝ ð ð ð Ø�D�Dðøøøðð ðk ×(Ò(¨°Ñ5Ô5ˆGå˜˜4œ9Ñ%Ô%ˆEÝ˜˜4œ8Ñ$Ô$ˆEØ ˆGØ—<’< ¨¨1¨a°°G¸UÀEÈ7ÑSÔSð Øð@ ð ˜6ð ðØ×&Ò& v¨wÑ7Ô7Ð7Ð7øÝ ð ð ð Ø�Dðøøøàð ðØ×&Ò& sÑ+Ô+Ð+Ð+øÝ ð ð ð Ø�Dðøøøàð ðØ—N’N 6Ñ*Ô*Ð*Ð*øÝ ð ð ð Ø�Dðøøøàð ðØ×$Ò$ Q¨Ñ0Ô0Ð0Ð0Ð0øÝ ð ð ð Ø�D�Dðøøøðð ð[ð ð ð ð ð ð ¥6Ô#3ñ ô ð ð #Ð"Ñ$Ô$ˆCÝœÐ'7Ñ8Ô8ˆCŒJØˆCŒKØ˜2ˆCŒLØˆCŒLØˆCŒNØ !ˆCÔÝÔ-¨a°!©e°a©iÑ8Ô8ˆCà—O’O F¨C°°A°s½F¼LÈÑ<MÔ<MÈqÑQÔQˆEØ�qŠyˆy�UÐ.ÝÔ*¨6°A°q°6½5À¹:¼:ÀuÈfÐVWÐYZÑ[Ô[�øøÝð 	ð 	ð 	ØˆGˆGˆGð	øøøð ð ˜6ð ðØ×&Ò& v¨wÑ7Ô7Ð7Ð7øÝ ð ð ð Ø�Dðøøøàð ðØ×&Ò& sÑ+Ô+Ð+Ð+øÝ ð ð ð Ø�Dðøøøàð ðØ—N’N 6Ñ*Ô*Ð*Ð*øÝ ð ð ð Ø�Dðøøøàð ðØ×$Ò$ Q¨Ñ0Ô0Ð0Ð0øÝ ð ð ð Ø�Dðøøøðøð ð ˜6ð ðØ×&Ò& v¨wÑ7Ô7Ð7Ð7øÝ ð ð ð Ø�Dðøøøàð ðØ×&Ò& sÑ+Ô+Ð+Ð+øÝ ð ð ð Ø�Dðøøøàð ðØ—N’N 6Ñ*Ô*Ð*Ð*øÝ ð ð ð Ø�Dðøøøàð ðØ×$Ò$ Q¨Ñ0Ô0Ð0Ð0øÝ ð ð ð Ø�Dðøøøðøøøð ˆsZ  Ã"/D ÄU Ä
DÄU ÄDÄU Ä?E Å
E#Å"E#Å)E? Å?
FÆFÆF( Æ(
F5Æ4F5Æ;G Ç
G!Ç G!Ç&U ÈH È
H'È&H'È-I É
IÉIÉI, É,
I9É8I9É?J Ê
J%Ê$J%Ê*U Ë	K  Ë 
K-Ë,K-Ë3L	 Ì	
LÌLÌL2 Ì2
L?Ì>L?ÍM Í
M+Í*M+Í0AU ÏO, Ï,
O9Ï8O9Ï?P Ð
P"Ð!P"Ð(P> Ð>
QÑ
QÑQ) Ñ)
Q7Ñ6Q7Ñ<CU ÕX ÕU*Õ'X Õ)U*Õ*X Õ2V	 Ö	
VÖVÖV2 Ö2
V?Ö>V?×W ×
W(×'W(×.X Ø
XØXØ[ ØX3Ø2[ Ø3
Y Ø=[ Ø?Y Ù [ ÙYÙ[ Ù
Y)Ù&[ Ù(Y)Ù)[ Ù/ZÚ[ Ú
ZÚ[ ÚZÚ[ ÚZ/Ú.[ Ú/
Z<Ú9[ Ú;Z<Ú<[ Fr�   r‚   r   r€   Úfallback_printwindowc                 óà  ‡— t          |t          t          f¦  «        rOt          |¦  «        dk    r<|�t          |t          ¦  «        r|}|d         |d         |d         |d         f\  }}}}|r|�|�|�|€dS 	 t          |¦  «        }t          |¦  «        }t          |¦  «        }t          |¦  «        }n# t          t          f$ r Y dS w xY w|dk    s|dk    rdS t          �t          €dS t          ¦   «          t          t          d¦  «        st          t          d¦  «        �r%d}d}d}	d}
d}	 t          j        |¦  «        }|st          j        |¦  «        }|s¼	 |
r8	 t          j        |
                     ¦   «         ¦  «         n# t           $ r Y nw xY w|	r&	 |	                     ¦   «          n# t           $ r Y nw xY w|r&	 |                     ¦   «          n# t           $ r Y nw xY w|r+|r+	 t          j        ||¦  «         dS # t           $ r Y dS w xY wdS dS t          j        |¦  «        }|                     ¦   «         }	t          j        ¦   «         }
|
                     |||¦  «         |	                     |
¦  «         |	                     d||f|||ft2          rt2          j        nd	¦  «         |
                     d
¦  «        }n# t           $ r d}Y nw xY w|
r8	 t          j        |
                     ¦   «         ¦  «         n# t           $ r Y nw xY w|	r&	 |	                     ¦   «          n# t           $ r Y nw xY w|r&	 |                     ¦   «          n# t           $ r Y nw xY w|r)|r'	 t          j        ||¦  «         nÌ# t           $ r Y nÀw xY wn»# |
r8	 t          j        |
                     ¦   «         ¦  «         n# t           $ r Y nw xY w|	r&	 |	                     ¦   «          n# t           $ r Y nw xY w|r&	 |                     ¦   «          n# t           $ r Y nw xY w|r)|r(	 t          j        ||¦  «         w # t           $ r Y w w xY ww w xY w|S t9          t:          j        dd¦  «        }t9          t:          j        dd¦  «        }|r|sdS ddlmŠ ‰                      ¦   «         }| !                    |t;          j"        |¦  «        ¦  «        sdS |j#        |j$        }}||z   }||z   }d}d}d}d}d}	 |                     d¦  «        }|s­	 |r*|r(	 |                     ||¦  «         n# t           $ r Y nw xY w|r'	 |                     |¦  «         n# t           $ r Y nw xY w|r'	 |                     |¦  «         n# t           $ r Y nw xY w|r*	 |                     d|¦  «         dS # t           $ r Y dS w xY wdS |                     |¦  «        }|s­	 |r*|r(	 |                     ||¦  «         n# t           $ r Y nw xY w|r'	 |                     |¦  «         n# t           $ r Y nw xY w|r'	 |                     |¦  «         n# t           $ r Y nw xY w|r*	 |                     d|¦  «         dS # t           $ r Y dS w xY wdS |                     |||¦  «        }|s­	 |r*|r(	 |                     ||¦  «         n# t           $ r Y nw xY w|r'	 |                     |¦  «         n# t           $ r Y nw xY w|r'	 |                     |¦  «         n# t           $ r Y nw xY w|r*	 |                     d|¦  «         dS # t           $ r Y dS w xY wdS |                     ||¦  «        }d	}|                     |dd||||||¦	  «	        s­	 |r*|r(	 |                     ||¦  «         n# t           $ r Y nw xY w|r'	 |                     |¦  «         n# t           $ r Y nw xY w|r'	 |                     |¦  «         n# t           $ r Y nw xY w|r*	 |                     d|¦  «         dS # t           $ r Y dS w xY wdS  G ˆfd„dt:          j%        ¦  «        } |¦   «         }t;          j&        |¦  «        |_'        ||_(        | |_)        d|_*        d|_+        d|_,        t;          j-        ||z  dz  ¦  «        }| .                    ||d||t;          j"        |¦  «        d¦  «        }|dk    r|j/        }n# t           $ r d}Y nw xY w|r*|r(	 |                     ||¦  «         n# t           $ r Y nw xY w|r'	 |                     |¦  «         n# t           $ r Y nw xY w|r'	 |                     |¦  «         n# t           $ r Y nw xY w|r(	 |                     d|¦  «         n¾# t           $ r Y n²w xY wn­# |r*|r(	 |                     ||¦  «         n# t           $ r Y nw xY w|r'	 |                     |¦  «         n# t           $ r Y nw xY w|r'	 |                     |¦  «         n# t           $ r Y nw xY w|r(	 |                     d|¦  «         w # t           $ r Y w w xY ww xY w|�|  0                    |¦  «        r|r|  1                    |||||¦  «        S |S )u›  
        Chá»¥p nhanh vÃ¹ng ROI báº±ng Win32 GDI BitBlt (<2ms).
        Sá»­ dá»¥ng Desktop DC user32.GetDC(0) káº¿t há»£p user32.GetWindowRect(hwnd)
        Ä‘á»ƒ chá»¥p chÃ­nh xÃ¡c vÃ¹ng hiá»ƒn thá»‹ cá»§a game POE2, kháº¯c phá»¥c triá»‡t Ä‘á»ƒ viá»‡c
        Direct3D 12 flip model tráº£ vá»� bitmap Ä‘en.
        Há»— trá»£ cáº£ tuple ROI: capture_roi_bytes(hwnd, roi) láº«n (hwnd, rx, ry, rw, rh).
        r¥   Nr   r.   r0   rq   Ú
_mock_name©r   r   r�   TrŠ   r‹   rŒ   c                   óÄ   •— e Zd Zd” j        fd” j        fd” j        fd” j        fd” j        fd” j        fd” j        fd” j        fd	” j        fd
” j        fd” j        fgZdS )ú;OpticalHPSensor.capture_roi_bytes.<locals>.BITMAPINFOHEADERr’   r“   r”   r•   r–   r—   r˜   r™   rš   r›   rœ   Nr�   rŒ   s   €r(   r¢   rÕ   Æ  r£   r'   r¢   r¤   )2Ú
isinstanceÚtupleÚlistÚlenr%   r!   Ú
ValueErrorÚ	TypeErrorrf   Úwin32uir)   Úhasattrrµ   ÚGetWindowDCr·   Ú	GetHandlerY   r¸   r¹   ÚCreateDCFromHandlerº   ÚCreateBitmapr»   r¶   r¼   Úwin32conrË   ÚGetBitmapBitsr©   rª   r«   r�   r¬   r­   r®   r°   r²   r½   r¾   r’   r“   r”   r•   r–   r—   r¿   rÀ   r§   Úis_all_blackÚcapture_roi_printwindow)rG   rj   r�   r‚   r   r€   rÐ   Úhwnd_dcÚmfc_dcÚsave_dcÚbitmapÚraw_bitsrŠ   r‹   r{   Úwin_xÚwin_yrÉ   rÊ   rÃ   rÄ   rÅ   rÆ   rË   r¢   rÌ   rÍ   rÎ   r�   s                               @r(   Úcapture_roi_bytesz!OpticalHPSensor.capture_roi_bytesO  sU  ø€ õ  �b�5¥$˜-Ñ(Ô(ð 	8­S°©W¬W¸ª\¨\Øˆ~¥*¨RµÑ"6Ô"6ˆ~Ø')Ð$Ø œU B q¤E¨2¨a¬5°"°Q´%Ð7‰NˆB��B˜àð 	�r�z R Z°2°:ÀÀØ�4ð	Ý�R‘”ˆBÝ�R‘”ˆBÝ�R‘”ˆBÝ�R‘”ˆBˆBøÝ�IÐ&ð 	ð 	ð 	Ø�4�4ð	øøøà�Š7ˆ7�b˜A’g�gØ�4åÐ�w˜Ø�4å!Ñ#Ô#Ð#õ •8˜\Ñ*Ô*ð *	­gµg¸|Ñ.LÔ.Lñ *	ØˆGØˆFØˆGØˆFØˆHð#Ý"œ.¨Ñ.Ô.�Øð 9Ý&Ô2°4Ñ8Ô8�GØð  Øð ð ðÝ Ô-¨f×.>Ò.>Ñ.@Ô.@ÑAÔAÐAÐAøÝ$ð ð ð Ø˜ðøøøàð ðØ×(Ò(Ñ*Ô*Ð*Ð*øÝ$ð ð ð Ø˜ðøøøàð ðØŸšÑ)Ô)Ð)Ð)øÝ$ð ð ð Ø˜ðøøøàð ˜tð ðÝ Ô*¨4°Ñ9Ô9Ð9Ð9Ð9øÝ$ð ð ð Ø˜˜ðøøøðð ð ð õ3 !Ô3°GÑ<Ô<�Ø ×3Ò3Ñ5Ô5�Ý Ô-Ñ/Ô/�Ø×-Ò-¨f°b¸"Ñ=Ô=Ð=Ø×$Ò$ VÑ,Ô,Ð,Ø—’˜v¨¨B x°¸"¸b¸ÕW_ÐCoÅ8ÔCSÐCSÐeoÑpÔpÐpØ!×/Ò/°Ñ5Ô5��øÝð  ð  ð  Ø���ð øøøð ð ðÝ Ô-¨f×.>Ò.>Ñ.@Ô.@ÑAÔAÐAÐAøÝ$ð ð ð Ø˜ðøøøàð ðØ×(Ò(Ñ*Ô*Ð*Ð*øÝ$ð ð ð Ø˜ðøøøàð ðØŸšÑ)Ô)Ð)Ð)øÝ$ð ð ð Ø˜ðøøøàð ˜tð ðÝ Ô*¨4°Ñ9Ô9Ð9Ð9øÝ$ð ð ð Ø˜ðøøøøøð% ð ðÝ Ô-¨f×.>Ò.>Ñ.@Ô.@ÑAÔAÐAÐAøÝ$ð ð ð Ø˜ðøøøàð ðØ×(Ò(Ñ*Ô*Ð*Ð*øÝ$ð ð ð Ø˜ðøøøàð ðØŸšÑ)Ô)Ð)Ð)øÝ$ð ð ð Ø˜ðøøøàð ˜tð ðÝ Ô*¨4°Ñ9Ô9Ð9Ð9øÝ$ð ð ð Ø˜ðøøøðð øøøð
 ˆOå�œ¨°$Ñ7Ô7ˆÝ�œ w°Ñ5Ô5ˆØð 	˜Uð 	Ø�4à#Ð#Ð#Ð#Ð#Ð#Ø�}Š}‰ŒˆØ×#Ò# D­&¬,°tÑ*<Ô*<Ñ=Ô=ð 	Ø�4à”y $¤(ˆuˆØ˜‘
ˆØ˜‘
ˆàˆØˆØˆØˆØˆðA	Ø—l’l 1‘o”oˆGØð ØðV ð ˜6ð ðØ×&Ò& v¨wÑ7Ô7Ð7Ð7øÝ ð ð ð Ø�Dðøøøàð ðØ×&Ò& sÑ+Ô+Ð+Ð+øÝ ð ð ð Ø�Dðøøøàð ðØ—N’N 6Ñ*Ô*Ð*Ð*øÝ ð ð ð Ø�Dðøøøàð ðØ×$Ò$ Q¨Ñ0Ô0Ð0Ð0Ð0øÝ ð ð ð Ø�D�Dðøøøðð ðs ×-Ò-¨gÑ6Ô6ˆFØð ØðP ð ˜6ð ðØ×&Ò& v¨wÑ7Ô7Ð7Ð7øÝ ð ð ð Ø�Dðøøøàð ðØ×&Ò& sÑ+Ô+Ð+Ð+øÝ ð ð ð Ø�Dðøøøàð ðØ—N’N 6Ñ*Ô*Ð*Ð*øÝ ð ð ð Ø�Dðøøøàð ðØ×$Ò$ Q¨Ñ0Ô0Ð0Ð0Ð0øÝ ð ð ð Ø�D�Dðøøøðð ðm ×.Ò.¨w¸¸BÑ?Ô?ˆCØð ØðJ ð ˜6ð ðØ×&Ò& v¨wÑ7Ô7Ð7Ð7øÝ ð ð ð Ø�Dðøøøàð ðØ×&Ò& sÑ+Ô+Ð+Ð+øÝ ð ð ð Ø�Dðøøøàð ðØ—N’N 6Ñ*Ô*Ð*Ð*øÝ ð ð ð Ø�Dðøøøàð ðØ×$Ò$ Q¨Ñ0Ô0Ð0Ð0Ð0øÝ ð ð ð Ø�D�Dðøøøðð ðg ×(Ò(¨°Ñ5Ô5ˆGà ˆGØ—<’< ¨¨1¨b°"°g¸uÀeÈWÑUÔUð Øð@ ð ˜6ð ðØ×&Ò& v¨wÑ7Ô7Ð7Ð7øÝ ð ð ð Ø�Dðøøøàð ðØ×&Ò& sÑ+Ô+Ð+Ð+øÝ ð ð ð Ø�Dðøøøàð ðØ—N’N 6Ñ*Ô*Ð*Ð*øÝ ð ð ð Ø�Dðøøøàð ðØ×$Ò$ Q¨Ñ0Ô0Ð0Ð0Ð0øÝ ð ð ð Ø�D�Dðøøøðð ð[ð ð ð ð ð ð ¥6Ô#3ñ ô ð ð #Ð"Ñ$Ô$ˆCÝœÐ'7Ñ8Ô8ˆCŒJØˆCŒKØ˜3ˆCŒLØˆCŒLØˆCŒNØ !ˆCÔÝÔ-¨b°2©g¸©kÑ:Ô:ˆCà—O’O F¨C°°B¸½V¼\È#Ñ=NÔ=NÐPQÑRÔRˆEØ�qŠyˆyØœ7�øøÝð 	ð 	ð 	ØˆHˆHˆHð	øøøð ð ˜6ð ðØ×&Ò& v¨wÑ7Ô7Ð7Ð7øÝ ð ð ð Ø�Dðøøøàð ðØ×&Ò& sÑ+Ô+Ð+Ð+øÝ ð ð ð Ø�Dðøøøàð ðØ—N’N 6Ñ*Ô*Ð*Ð*øÝ ð ð ð Ø�Dðøøøàð ðØ×$Ò$ Q¨Ñ0Ô0Ð0Ð0øÝ ð ð ð Ø�Dðøøøðøð ð ˜6ð ðØ×&Ò& v¨wÑ7Ô7Ð7Ð7øÝ ð ð ð Ø�Dðøøøàð ðØ×&Ò& sÑ+Ô+Ð+Ð+øÝ ð ð ð Ø�Dðøøøàð ðØ—N’N 6Ñ*Ô*Ð*Ð*øÝ ð ð ð Ø�Dðøøøàð ðØ×$Ò$ Q¨Ñ0Ô0Ð0Ð0øÝ ð ð ð Ø�Dðøøøðøøøð Ð × 1Ò 1°(Ñ ;Ô ;ÐÐAUÐØ×/Ò/°°b¸"¸bÀ"ÑEÔEÐEàˆsž  Á:<B7 Â7CÃCÄ1,K Å!&F Æ
FÆFÆF0 Æ0
F=Æ<F=ÇG Ç
G%Ç$G%Ç-H È
HÈHÈB,K ËN ËKËN ËKËN Ë&L Ì
LÌLÌL* Ì*
L7Ì6L7Ì=M Í
MÍMÍ'M= Í=
N
Î	N
ÎQÎ&N9Î8QÎ9
OÏQÏOÏQÏO!Ï QÏ!
O.Ï+QÏ-O.Ï.QÏ4P	ÐQÐ	
PÐQÐPÐQÐP4Ð3QÐ4
QÐ>QÑ QÑQÓ.c ÔT" Ô"
T/Ô.T/Ô5U Õ
UÕUÕU4 Õ4
VÖ VÖV Ö
V-Ö,V-Ö2c ×W& ×&
W3×2W3×9X Ø
XØXØ"X8 Ø8
YÙYÙY# Ù#
Y1Ù0Y1Ù6c ÚZ, Ú,
Z9Ú8Z9Ú?[ Û
["Û!["Û([> Û>
\Ü
\Ü\) Ü)
\7Ü6\7Ü<5c Ý7^ Þ
^Þ^Þ!^7 Þ7
_ß_ß
_  ß 
_-ß,_-ß3` à
`à`àB5c ãf ãc#ã f ã"c#ã#f ã+d ä
dädäd+ ä+
d8ä7d8ä>e å
e!å e!å'e> å>
fæ
fæh9æf,æ+h9æ,
f9æ6h9æ8f9æ9h9æ?gçh9ç
g"çh9ç!g"ç"h9ç(g>ç=h9ç>
hèh9è
hèh9èh(è'h9è(
h5è2h9è4h5è5h9Úflagsc                 ó.  — t           r	t          r|sdS t          ¦   «          d}d}d}	d}
d}d}	 t          j        |¦  «        }|d         |d         z
  }|d         |d         z
  }|dk    s|dk    r6t          j        |¦  «        }|d         |d         z
  }|d         |d         z
  }|dk    s|dk    �r	 |r8	 t          j        |                     ¦   «         ¦  «         n# t          $ r Y nw xY w|r&	 |                     ¦   «          n# t          $ r Y nw xY w|
r8	 t          j        |
                     ¦   «         ¦  «         n# t          $ r Y nw xY w|	r&	 |	                     ¦   «          n# t          $ r Y nw xY w|r&	 |                     ¦   «          n# t          $ r Y nw xY w|r+|r+	 t          j	        ||¦  «         dS # t          $ r Y dS w xY wdS dS t          j
        |¦  «        }|st          j        |¦  «        }|�s	 |r8	 t          j        |                     ¦   «         ¦  «         n# t          $ r Y nw xY w|r&	 |                     ¦   «          n# t          $ r Y nw xY w|
r8	 t          j        |
                     ¦   «         ¦  «         n# t          $ r Y nw xY w|	r&	 |	                     ¦   «          n# t          $ r Y nw xY w|r&	 |                     ¦   «          n# t          $ r Y nw xY w|r+|r+	 t          j	        ||¦  «         dS # t          $ r Y dS w xY wdS dS t          j        |¦  «        }|                     ¦   «         }	t          j        ¦   «         }
|
                     |||¦  «         |	                     |
¦  «         t"          j        j                             ||	                     ¦   «         |¦  «        }|s>|dk    r8t"          j        j                             ||	                     ¦   «         d¦  «        }|�s	 |r8	 t          j        |                     ¦   «         ¦  «         n# t          $ r Y nw xY w|r&	 |                     ¦   «          n# t          $ r Y nw xY w|
r8	 t          j        |
                     ¦   «         ¦  «         n# t          $ r Y nw xY w|	r&	 |	                     ¦   «          n# t          $ r Y nw xY w|r&	 |                     ¦   «          n# t          $ r Y nw xY w|r+|r+	 t          j	        ||¦  «         dS # t          $ r Y dS w xY wdS dS |                     ¦   «         }t          j        ¦   «         }|                     |||¦  «         t,          �t,          j        nd}|                     d||f|	||f|¦  «         |                     d¦  «        }|�t5          |¦  «        nd	 |r8	 t          j        |                     ¦   «         ¦  «         n# t          $ r Y nw xY w|r&	 |                     ¦   «          n# t          $ r Y nw xY w|
r8	 t          j        |
                     ¦   «         ¦  «         n# t          $ r Y nw xY w|	r&	 |	                     ¦   «          n# t          $ r Y nw xY w|r&	 |                     ¦   «          n# t          $ r Y nw xY w|r)|r(	 t          j	        ||¦  «         S # t          $ r Y S w xY wS S # t          $ �r Y |r8	 t          j        |                     ¦   «         ¦  «         n# t          $ r Y nw xY w|r&	 |                     ¦   «          n# t          $ r Y nw xY w|
r8	 t          j        |
                     ¦   «         ¦  «         n# t          $ r Y nw xY w|	r&	 |	                     ¦   «          n# t          $ r Y nw xY w|r&	 |                     ¦   «          n# t          $ r Y nw xY w|r+|r+	 t          j	        ||¦  «         dS # t          $ r Y dS w xY wdS dS w xY w# |r8	 t          j        |                     ¦   «         ¦  «         n# t          $ r Y nw xY w|r&	 |                     ¦   «          n# t          $ r Y nw xY w|
r8	 t          j        |
                     ¦   «         ¦  «         n# t          $ r Y nw xY w|	r&	 |	                     ¦   «          n# t          $ r Y nw xY w|r&	 |                     ¦   «          n# t          $ r Y nw xY w|r)|r(	 t          j	        ||¦  «         w # t          $ r Y w w xY ww w xY w)	u  
        Chá»¥p mÃ n hÃ¬nh cá»­a sá»• game báº±ng Win32 PrintWindow vá»›i cá»� PW_RENDERFULLCONTENT (0x02).
        Há»— trá»£ desktop attachment vÃ  DWM redirection Ä‘á»ƒ chá»¥p trÆ¡n tru ngay cáº£ khi
        cá»­a sá»• game bá»‹ che khuáº¥t hoáº·c cháº¡y ngáº§m.
        Nr0   r   rq   r.   r�   rÓ   T)rf   rÜ   r)   rx   r­   r·   rß   rY   r¸   r¹   rÞ   rµ   rà   rº   rá   r»   r¶   rª   r«   rŠ   ÚPrintWindowÚ
GetSafeHdcrâ   rË   r¼   rã   rÂ   )rG   rj   r�   r‚   r   r€   rî   ræ   rç   rè   ré   Úcrop_dcÚcrop_bitmapr{   ÚcwÚchÚresÚsrccopyrê   s                      r(   rå   z'OpticalHPSensor.capture_roi_printwindowþ  s  € õ ð 	�wð 	¨dð 	Ø�4å!Ñ#Ô#Ð#àˆØˆØˆØˆØˆØˆðD	ÝÔ)¨$Ñ/Ô/ˆDØ�a”˜4 œ7Ñ"ˆBØ�a”˜4 œ7Ñ"ˆBØ�QŠwˆw˜" š'˜'ÝÔ-¨dÑ3Ô3�Ø˜!”W˜t AœwÑ&�Ø˜!”W˜t AœwÑ&�Ø�QŠwˆw˜" š'™'Øð< ð ðÝÔ)¨+×*?Ò*?Ñ*AÔ*AÑBÔBÐBÐBøÝ ð ð ð Ø�Dðøøøàð ðØ×$Ò$Ñ&Ô&Ð&Ð&øÝ ð ð ð Ø�Dðøøøàð ðÝÔ)¨&×*:Ò*:Ñ*<Ô*<Ñ=Ô=Ð=Ð=øÝ ð ð ð Ø�Dðøøøàð ðØ×$Ò$Ñ&Ô&Ð&Ð&øÝ ð ð ð Ø�Dðøøøàð ðØ—O’OÑ%Ô%Ð%Ð%øÝ ð ð ð Ø�Dðøøøàð ˜4ð ðÝÔ& t¨WÑ5Ô5Ð5Ð5Ð5øÝ ð ð ð Ø�D�Dðøøøðð ð ð õk Ô*¨4Ñ0Ô0ˆGØð /Ý"œ.¨Ñ.Ô.�Øñ Øð0 ð ðÝÔ)¨+×*?Ò*?Ñ*AÔ*AÑBÔBÐBÐBøÝ ð ð ð Ø�Dðøøøàð ðØ×$Ò$Ñ&Ô&Ð&Ð&øÝ ð ð ð Ø�Dðøøøàð ðÝÔ)¨&×*:Ò*:Ñ*<Ô*<Ñ=Ô=Ð=Ð=øÝ ð ð ð Ø�Dðøøøàð ðØ×$Ò$Ñ&Ô&Ð&Ð&øÝ ð ð ð Ø�Dðøøøàð ðØ—O’OÑ%Ô%Ð%Ð%øÝ ð ð ð Ø�Dðøøøàð ˜4ð ðÝÔ& t¨WÑ5Ô5Ð5Ð5Ð5øÝ ð ð ð Ø�D�Dðøøøðð ð ð õ_ Ô/°Ñ8Ô8ˆFØ×/Ò/Ñ1Ô1ˆGÝÔ)Ñ+Ô+ˆFØ×)Ò)¨&°"°bÑ9Ô9Ð9Ø× Ò  Ñ(Ô(Ð(å”-Ô&×2Ò2°4¸×9KÒ9KÑ9MÔ9MÈuÑUÔUˆCØð V˜5 Aš:˜:Ý”mÔ*×6Ò6°t¸W×=OÒ=OÑ=QÔ=QÐSTÑUÔU�Øñ Øð ð ðÝÔ)¨+×*?Ò*?Ñ*AÔ*AÑBÔBÐBÐBøÝ ð ð ð Ø�Dðøøøàð ðØ×$Ò$Ñ&Ô&Ð&Ð&øÝ ð ð ð Ø�Dðøøøàð ðÝÔ)¨&×*:Ò*:Ñ*<Ô*<Ñ=Ô=Ð=Ð=øÝ ð ð ð Ø�Dðøøøàð ðØ×$Ò$Ñ&Ô&Ð&Ð&øÝ ð ð ð Ø�Dðøøøàð ðØ—O’OÑ%Ô%Ð%Ð%øÝ ð ð ð Ø�Dðøøøàð ˜4ð ðÝÔ& t¨WÑ5Ô5Ð5Ð5Ð5øÝ ð ð ð Ø�D�Dðøøøðð ð ð ðG ×/Ò/Ñ1Ô1ˆGÝ!Ô.Ñ0Ô0ˆKØ×.Ò.¨v°r¸2Ñ>Ô>Ð>Ý*2Ð*>•hÔ&Ð&ÀJˆGØ�NŠN˜6 B¨ 8¨W°r¸2°hÀÑHÔHÐHØ"×0Ò0°Ñ6Ô6ˆHØ&.Ð&:•5˜‘?”?�?ÀÐDð ð ðÝÔ)¨+×*?Ò*?Ñ*AÔ*AÑBÔBÐBÐBøÝ ð ð ð Ø�Dðøøøàð ðØ×$Ò$Ñ&Ô&Ð&Ð&øÝ ð ð ð Ø�Dðøøøàð ðÝÔ)¨&×*:Ò*:Ñ*<Ô*<Ñ=Ô=Ð=Ð=øÝ ð ð ð Ø�Dðøøøàð ðØ×$Ò$Ñ&Ô&Ð&Ð&øÝ ð ð ð Ø�Dðøøøàð ðØ—O’OÑ%Ô%Ð%Ð%øÝ ð ð ð Ø�Dðøøøàð ˜4ð ðÝÔ& t¨WÑ5Ô5Ð5Ð5øÝ ð ð ð Ø�Dðøøøðð øõ9 ð 	ñ 	ð 	Øàð ðÝÔ)¨+×*?Ò*?Ñ*AÔ*AÑBÔBÐBÐBøÝ ð ð ð Ø�Dðøøøàð ðØ×$Ò$Ñ&Ô&Ð&Ð&øÝ ð ð ð Ø�Dðøøøàð ðÝÔ)¨&×*:Ò*:Ñ*<Ô*<Ñ=Ô=Ð=Ð=øÝ ð ð ð Ø�Dðøøøàð ðØ×$Ò$Ñ&Ô&Ð&Ð&øÝ ð ð ð Ø�Dðøøøàð ðØ—O’OÑ%Ô%Ð%Ð%øÝ ð ð ð Ø�Dðøøøàð ˜4ð ðÝÔ& t¨WÑ5Ô5Ð5Ð5Ð5øÝ ð ð ð Ø�D�Dðøøøðð ð ð ð9	øøøøð ð ðÝÔ)¨+×*?Ò*?Ñ*AÔ*AÑBÔBÐBÐBøÝ ð ð ð Ø�Dðøøøàð ðØ×$Ò$Ñ&Ô&Ð&Ð&øÝ ð ð ð Ø�Dðøøøàð ðÝÔ)¨&×*:Ò*:Ñ*<Ô*<Ñ=Ô=Ð=Ð=øÝ ð ð ð Ø�Dðøøøàð ðØ×$Ò$Ñ&Ô&Ð&Ð&øÝ ð ð ð Ø�Dðøøøàð ðØ—O’OÑ%Ô%Ð%Ð%øÝ ð ð ð Ø�Dðøøøàð ˜4ð ðÝÔ& t¨WÑ5Ô5Ð5Ð5øÝ ð ð ð Ø�Dðøøøðð øøøs,  ®B[ Â7&C Ã
C+Ã*C+Ã1D Ä
DÄDÄ&E  Å 
EÅEÅE( Å(
E5Å4E5Å;F Æ
FÆFÆ%F< Æ<
G
Ç	G
Ç-[ È&H) È)
H6È5H6È<I É
IÉIÉ$&J Ê
JÊJÊJ3 Ê3
K Ê?K ËK Ë
K(Ë'K(Ë0L Ì
LÌLÌC"[ Ð&P) Ð)
P6Ð5P6Ð<Q Ñ
QÑQÑ$&R Ò
RÒRÒR3 Ò3
S Ò?S ÓS Ó
S(Ó'S(Ó0T Ô
TÔTÔB[ Ö7&W×
W+×*W+×1XØ
XØXØ&Y Ù 
YÙYÙY(Ù(
Y5Ù4Y5Ù;ZÚ
ZÚZÚ%Z;Ú;
[Û[Û_7Û_: Û&\ Ü
\Ü\Ü\+ Ü+
\8Ü7\8Ü>&]% Ý%
]2Ý1]2Ý8^ Þ
^Þ^Þ ^5 Þ5
_ß_ß
_! ß!
_/ß._/ß6_7ß7_: ß:dß>&`%à$dà%
`2à/dà1`2à2dà8aádá
aádáaádá &bâdâ
bâdâbâdâb/â.dâ/
b<â9dâ;b<â<dãcãdã
c$ã!dã#c$ã$dã,dädä
dädädädé@   Ú	raw_bytesÚsample_stepc           
      óþ   — | rt          | ¦  «        dk     rdS t          d|¦  «        }t          d„ | dd|…         D ¦   «         ¦  «        rdS t          | dt          dt          | ¦  «        ¦  «        …         ¦  «         S )u»   
        Kiá»ƒm tra nhanh náº¿u buffer áº£nh toÃ n mÃ u Ä‘en (0x00) do GDI BitBlt bá»‹ DWM che khuáº¥t
        hoáº·c game Ä‘ang cháº¡y ngáº§m / cháº¿ Ä‘á»™ exclusive fullscreen.
        r¥   Tr.   c              3   ó"   K  — | ]
}|d k    V — ŒdS )r   Nr&   )Ú.0Úbs     r(   ú	<genexpr>z/OpticalHPSensor.is_all_black.<locals>.<genexpr>g  s&   è è € Ð1Ð1˜!ˆq�AŠvÐ1Ð1Ð1Ð1Ð1Ð1r'   NFé   )rÙ   r]   ÚanyÚmin)rù   rú   Ústeps      r(   rä   zOpticalHPSensor.is_all_black^  s‹   € ð ð 	�C 	™NœN¨QÒ.Ð.Ø�4Ý�1�kÑ"Ô"ˆÝÐ1Ð1˜y¨¨¨4¨Ô0Ð1Ñ1Ô1Ñ1Ô1ð 	Ø�5å�yÐ!:¥# c­3¨y©>¬>Ñ":Ô":Ð!:Ô;Ñ<Ô<Ð<Ð<r'   ÚrÚgrþ   c                 ó2   — | dk    o| d|z  k    o| d|z  k    S )u{   
        TiÃªu chuáº©n pixel mÃ u Ä‘á»� cá»§a cháº¥t lá»�ng mÃ¡u:
        R > 110 VÃ€ R > 1.5 * G VÃ€ R > 1.5 * B.
        én   g      ø?r&   ©r  r  rþ   s      r(   Úis_red_pixelzOpticalHPSensor.is_red_pixell  ó(   € ð �C’Ð<˜a #¨¡'škÐ<°°C¸!±G²Ð<r'   c                 ó2   — |dk    o|d| z  k    o|d|z  k    S )u~   
        TiÃªu chuáº©n pixel mÃ u xanh lam cá»§a cháº¥t lá»�ng mana:
        B > 110 VÃ€ B > 1.2 * R VÃ€ B > 1.2 * G.
        r  g333333ó?r&   r  s      r(   Úis_blue_pixelzOpticalHPSensor.is_blue_pixelt  r
  r'   c                 óª   — | dk    oM|dk    oG|dk    oAt          | |z
  ¦  «        dk     o+t          | |z
  ¦  «        dk     ot          ||z
  ¦  «        dk     S )u±   
        TiÃªu chuáº©n pixel chá»¯ sá»‘ (tráº¯ng/sÃ¡ng):
        Ä�á»™ sÃ¡ng cao (R, G, B > 150) vÃ  Ä‘á»™ bÃ£o hÃ²a mÃ u tháº¥p (chÃªnh lá»‡ch giá»¯a cÃ¡c kÃªnh < 50).
        ru   é2   )Úabsr  s      r(   Úis_text_pixelzOpticalHPSensor.is_text_pixel|  sc   € ð �C’Ð/˜A šGÐ/¨¨CªÐnµc¸!¸a¹%±j´jÀ2²oÐ6mÍ#ÈaÐRSÉeÉ*Ì*ÐWYÊ/Ð6mÕ^aÐbcÐfgÑbgÑ^hÔ^hÐkmÒ^mÐnr'   Úlevelc                 ó¾   — t          dt          d| ¦  «        ¦  «        }t          dd|dz
  z  z   d|z  z   ¦  «        }t          dd|dz
  z  z   d|z  z   ¦  «        }||fS )uU  
        Æ¯á»›c tÃ­nh khoáº£ng MÃ¡u vÃ  Mana cÆ¡ báº£n theo cáº¥p Ä‘á»™ nhÃ¢n váº­t trong POE2:
        PoE2 Character Base Stats:
        - Level 1: ~50 HP, ~100 Mana.
        - Má»—i level tÄƒng ~12 HP vÃ  ~6 Mana + trang bá»‹ chiáº¿n dá»‹ch.
        - Level 15-20: ~450 - 550 HP (nhÆ° 503 HP) vÃ  ~300 - 380 Mana (nhÆ° 344 Mana).
        r.   rr   r  é   r4   é   é   )r]   r  r!   )r  ÚlvlÚest_hpÚest_manas       r(   Úestimate_vitals_from_levelz*OpticalHPSensor.estimate_vitals_from_level„  sl   € õ �!•S˜˜e‘_”_Ñ%Ô%ˆÝ�R˜"  a¡™.Ñ(¨2°©8Ñ3Ñ4Ô4ˆÝ�s˜Q #¨¡'™]Ñ*¨Q°©WÑ4Ñ5Ô5ˆØ˜Ð!Ð!r'   Útxtc                 ó´  — | sdS t          j        dd| t           j        ¬¦  «        } t          j        dd| t           j        ¬¦  «        } t          j        dd| t           j        ¬¦  «        } |                      d	d¦  «                             d
d¦  «        } t          j        dd| ¦  «        } dt           j        dt
          fd„}t          j        d|| ¦  «        } | S )uW  
        LÃ m sáº¡ch vÃ  phá»¥c há»“i kÃ½ tá»± OCR bá»‹ mÃ©o tá»« HUD game POE2:
        - Phá»¥c há»“i biáº¿n thá»ƒ tá»« khÃ³a Shield: 'shjeId', 'shieId' -> 'Shield'.
        - Thay tháº¿ 'j' thÃ nh '1' (vÃ  cÃ¡c kÃ½ tá»± mÃ©o i/l/I trong cá»¥m sá»‘) trong cÃ¡c cá»¥m sá»‘
          dáº¡ng \d*j\d* (vÃ­ dá»¥: 3ji -> 311, 3j7 -> 317).
        r   z5(?:shjeId|shieId)(?:\s*At|\s*@)?|Shield(?:\s*At|\s*@)zShield: )rî   u   [<Â«(\[]?\s*S[bh]?[\.\s]*ieldÚShieldz\bQard\bÚWardÚshjeIdÚshieIdz(?<=\d),(?=\d)Úmrd   c                 óÐ   — |                       d¦  «        }|                     dd¦  «                             dd¦  «                             dd¦  «                             dd¦  «        S )Nr   ÚjÚ1ÚiÚIÚl)ÚgroupÚreplace)r   Úchunks     r(   Ú_replace_num_clusterz<OpticalHPSensor.clean_ocr_text.<locals>._replace_num_cluster¦  sW   € Ø—G’G˜A‘J”JˆEØ—=’=  cÑ*Ô*×2Ò2°3¸Ñ<Ô<×DÒDÀSÈ#ÑNÔN×VÒVÐWZÐ\_Ñ`Ô`Ð`r'   z%\d+[jjiIl\d]+|[jjiIl\d]*\d+[jjiIl\d]*)ÚreÚsubr%  r(  ÚMatchr$   )r  r*  s     r(   Úclean_ocr_textzOpticalHPSensor.clean_ocr_text’  sä   € ð ð 	Ø�2åŒfÐMÈzÐ[^ÕfhÔfjÐkÑkÔkˆÝŒfÐ5°xÀÍBÌDÐQÑQÔQˆÝŒf�[ &¨#µR´TÐ:Ñ:Ô:ˆØ�kŠk˜( HÑ-Ô-×5Ò5°hÀÑIÔIˆõ ŒfÐ&¨¨CÑ0Ô0ˆð	a¥B¤Hð 	aµð 	að 	að 	að 	aõ ŒfÐ=Ð?SÐUXÑYÔYˆØˆ
r'   Úval_strc                 ó˜   — |                       dd¦  «                              dd¦  «                             ¦   «         }t          |¦  «        S )u‚   Chuyá»ƒn Ä‘á»•i chuá»—i sá»‘ cÃ³ thá»ƒ chá»©a dáº¥u pháº©y/cháº¥m phÃ¢n cÃ¡ch hÃ ng nghÃ¬n sang sá»‘ nguyÃªn (vd '2,402' -> 2402).ú,r   ú.)r(  Ústripr!   )r/  Ú	clean_strs     r(   Ú_parse_ocr_intzOpticalHPSensor._parse_ocr_int­  s?   € ð —O’O C¨Ñ,Ô,×4Ò4°S¸"Ñ=Ô=×CÒCÑEÔEˆ	Ý�9‰~Œ~Ðr'   Útextc                 ó¦	  — d}d}d}d}| sdS t                                | ¦  «        } t          j        d| t          j        ¦  «        }|rÎ	 t                                |                     d¦  «        ¦  «        }t                                |                     d¦  «        ¦  «        }||f}t                                |                     d¦  «        ¦  «        }t                                |                     d¦  «        ¦  «        }	||	f}n# t          $ r Y nw xY w|€•t          j        d| t          j        ¦  «        }
|
rs	 t                                |
                     d¦  «        ¦  «        t                                |
                     d¦  «        ¦  «        f}n# t          t          f$ r Y nw xY w|€•t          j        d	| t          j        ¦  «        }|rs	 t                                |                     d¦  «        ¦  «        t                                |                     d¦  «        ¦  «        f}n# t          t          f$ r Y nw xY wt          j        d
| t          j        ¦  «        }|rs	 t                                |                     d¦  «        ¦  «        t                                |                     d¦  «        ¦  «        f}n# t          t          f$ r Y nw xY wt          j        d| t          j        ¦  «        }|r	 t                                |                     d¦  «        ¦  «        }t                                |                     d¦  «        ¦  «        }||k    r|}||f}n# t          t          f$ r Y nw xY wt          t          j        d| t          j        ¦  «        ¦  «        }|sþ|r|r|søt          j        d| ¦  «        }|D ]à\  }}	 t                                |¦  «        t                                |¦  «        }}n# t          $ r Y ŒGw xY w||f}||k    s||k    rŒ\|€|s|}Œc|€	||k    r|}Œn|€8t          j        d| t          j        ¦  «        st          |¦  «        dk    r|s|}Œ¨|€6||k    r0||k    r*||k    r$|s t          j        d| t          j        ¦  «        s|}Œá|r|dk    s|r|d         dk    r|�|d         dk    rd}|||fS )uÁ  
        PhÃ¢n tÃ­ch chuá»—i text nháº­n diá»‡n Ä‘Æ°á»£c thÃ nh cÃ¡c cáº·p sá»‘ (current, max):
        Há»— trá»£ sá»‘ cÃ³ dáº¥u pháº©y hÃ ng nghÃ¬n (vÃ­ dá»¥: 2,402 -> 2402, 1,250 -> 1250).
        Há»— trá»£:
        'Life: 495/503' hoáº·c '495/503'
        'Shield Ward 2,402/2,402 826/826' (CI build: HP=1, Shield ES=2402, Ward=826)
        'Shield: 105/200'
        'Mana: 344/344'
        Tráº£ vá»� (hp_tuple, es_tuple, mana_tuple).
        N©NNNú|(?:Life\s+)?Shield(?:\s*:)?\s+Ward\s+(\d+[\.,]?\d*)\s*[/|\\I!]\s*(\d+[\.,]?\d*)\s+(\d+[\.,]?\d*)\s*[/|\\I!]\s*(\d+[\.,]?\d*)r.   r0   rq   r¥   õd   (?:Shield|Energy\s*Shield|ES|Gi[aÃ¡]p)(?!\s*Ward)\s*[:\s]*(\d+[\.,]?\d*)\s*[/|\\I!]\s*(\d+[\.,]?\d*)z7Ward\s*[:\s]*(\d+[\.,]?\d*)\s*[/|\\I!]\s*(\d+[\.,]?\d*)õS   (?:Life|HP|M[aÃ¡]u)(?!\s*Shield)\s*[:\s]*(\d+[\.,]?\d*)\s*[/|\\I!]\s*(\d+[\.,]?\d*)úB(?:Mana|Man|MP)\s*[:\s]*(\d+[\.,]?\d*)\s*[/|\\I!]\s*(\d+[\.,]?\d*)z(?:Mana|Man|MP)ú*(\d+[\.,]?\d*)\s*[/|\\I!]\s*(\d+[\.,]?\d*)r  ©r.   r.   r   )r-   r.  r+  Úsearchr%  r5  r'  rY   rÚ   Ú
IndexErrorr%   ÚfindallrÙ   )r6  ÚhpÚesÚmanaÚwardÚm_swÚcur_esÚmax_esÚcur_wardr   Úm_esÚm_wardÚm_hpÚm_manaÚcr   Úhas_explicit_mana_labelÚ	all_pairsÚs_curÚs_maxÚpairs                        r(   Úparse_vitals_textz!OpticalHPSensor.parse_vitals_text³  s;  € ð )-ˆØ(,ˆØ*.ˆØ*.ˆàð 	&Ø%Ð%å×-Ò-¨dÑ3Ô3ˆõ Œyð  Yð  [_õ  acô  aeñ  fô  fˆØð 		ðÝ(×7Ò7¸¿
º
À1¹¼ÑFÔF�Ý(×7Ò7¸¿
º
À1¹¼ÑFÔF�Ø˜fÐ%�Ý*×9Ò9¸$¿*º*ÀQ¹-¼-ÑHÔH�Ý*×9Ò9¸$¿*º*ÀQ¹-¼-ÑHÔH�Ø  (Ð+��øÝð ð ð Ø�ðøøøð ˆ:Ý”9ð  Eð  GKõ  MOô  MQñ  Rô  RˆDØð ðÝ)×8Ò8¸¿ºÀA¹¼ÑGÔGÍ×IgÒIgÐhl×hrÒhrÐstÑhuÔhuÑIvÔIvÐw�B�BøÝ"¥JÐ/ð ð ð Ø�Dðøøøð ˆ<Ý”YÐYÐ[_ÕacÔaeÑfÔfˆFØð ðÝ+×:Ò:¸6¿<º<È¹?¼?ÑKÔKÍ_×MkÒMkÐlr×lxÒlxÐyzÑl{Ôl{ÑM|ÔM|Ð}�D�DøÝ"¥JÐ/ð ð ð Ø�Dðøøøõ ŒyÐoÐquÕwyÔw{Ñ|Ô|ˆØð 	ðÝ%×4Ò4°T·Z²ZÀ±]´]ÑCÔCÅ_×EcÒEcÐdh×dnÒdnÐopÑdqÔdqÑErÔErÐs��øÝ¥
Ð+ð ð ð Ø�ðøøøõ ”Ð`ÐbfÕhjÔhlÑmÔmˆØð 	ðÝ#×2Ò2°6·<²<À±?´?ÑCÔC�Ý#×2Ò2°6·<²<À±?´?ÑCÔC�Ø�q’5�5Ø�AØ˜1�v��øÝ¥
Ð+ð ð ð Ø�ðøøøõ #'¥r¤yÐ1CÀTÍ2Ì4Ñ'PÔ'PÑ"QÔ"QÐØð 	$˜Rð 	$ rð 	$°ð 	$Ýœ
Ð#PÐRVÑWÔWˆIØ )ð $ð $‘��uðÝ*×9Ò9¸%Ñ@Ô@Å/×B`ÒB`ÐafÑBgÔBg�q�A�AøÝ!ð ð ð Ø�Hðøøøà˜1�v�Ø˜2’:�: ¨¢ ØØ�: b�:Ø�B�BØ�Z D¨B¢J JØ�B�BØ�\¥r¤y°¸$ÅÄÑ'EÔ'E�\ÍÈYÉÌÐ[\ÒI\ÐI\Ðf}ÐI\Ø�D�DØ�\ d¨b¢j j°T¸R²Z°ZÀDÈDÂLÀLØ.ð $µb´iÀÈÍrÌtÑ6TÔ6Tð $Ø#˜øð ð 	�2˜’<�< R�<¨B¨q¬E°AªI¨I¸2¸:ÈÈAÌÐRSÊÈØˆBà�B˜ˆ~Ðsq   Á
B<D Ä
DÄDÄ<AF ÆF+Æ*F+ÇAH. È.IÉIÉ(AK ËKËKË=A&M$ Í$M8Í7M8Ï4PÐ
PÐPc           
      ól  — |r%t          |¦  «        ||z  dz  k     s|dk    s|dk    r|p| j        pd}d|dfS |�|n| j        }|�|n| j        }	t	          dt          |dz
  t          ||z  ¦  «        ¦  «        ¦  «        }
t	          dt          |dz
  t          ||	z  ¦  «        ¦  «        ¦  «        }||
k    rd}
|dz
  }||
z
  dz   }|dk    r|p| j        pd}d|dfS |dz  }t	          dt          t          | j        |dz  z  ¦  «        ¦  «        ¦  «        }t	          dt          |dz
  ||z
  ¦  «        ¦  «        |t	          dt          |dz
  ||z   ¦  «        ¦  «        g}g }|dz  }t          |
|dz   ¦  «        D ]d}||z  }d	}|D ]C}||dz  z   }||         }||dz            }||dz            }|  
                    |||¦  «        rd
} nŒD|                     |¦  «         Œet          |¦  «        }d}t          |¦  «        D ]<\  }}|r5|�1d||z
  dz
  cxk     rdk    rn nt          |dz   |¦  «        D ]}d
||<   Œ|}Œ=t          |¦  «        }t	          dt          d||z  ¦  «        ¦  «        } |r|dk    r|n| j        pd}t          t          | |z  ¦  «        ¦  «        }!| | _        |!| _        || _        |!|| fS )u_  
        PhÃ¢n tÃ­ch dáº£i pixel Ä‘á»� dá»�c theo trá»¥c giá»¯a vá»›i Multi-slit sampling:
        3 cá»™t: X_center - 15, X_center, X_center + 15 (tá»± Ä‘á»™ng co dÃ£n theo scale).
        Loáº¡i trá»« text sá»‘ mÃ¡u ("1234/1234") vÃ  ná»™i suy cÃ¡c khoáº£ng trá»‘ng do kÃ½ tá»± sá»‘ táº¡o ra.
        Tráº£ vá»� (current_hp, max_hp, ratio).
        r¥   r   rr   r   Nr.   r0   ç     Àb@FTr  rT   )rÙ   r5   r6   r7   r]   r  r!   Úroundr8   r^   r	  ÚappendrØ   Ú	enumerateÚsumr;   r<   r=   )"rG   r   r€   rù   r5   r6   r7   ÚmhpÚtop_rÚbot_rÚy_startÚy_endÚ
total_rowsÚx_centerÚoffsetÚx_slitsÚred_rows_maskÚstrideÚyÚ
row_offsetÚrow_has_redÚxÚidxrþ   r  r  Úfilled_maskÚlast_red_idxr$  Úis_redr"  Ú	red_countÚratior
   s"                                     r(   Úanalyze_pixelszOpticalHPSensor.analyze_pixels  sp  € ð ð 	!�C 	™NœN¨R°"©W°q©[Ò8Ð8¸BÀ!ºG¸GÀrÈQÂwÀwØ!Ð@ TÔ%9Ð@¸SˆCØ�s˜C�=Ð à$4Ð$@Ð Ð ÀdÔF[ˆØ':Ð'FÐ#Ð#ÈDÔLdˆå�a�˜R !™V¥S¨¨e©¡_¤_Ñ5Ô5Ñ6Ô6ˆÝ�A•s˜2 ™6¥3 r¨E¡z¡?¤?Ñ3Ô3Ñ4Ô4ˆà�GÒÐØˆGØ˜‘FˆEà˜W‘_ qÑ(ˆ
Ø˜Š?ˆ?Ø!Ð@ TÔ%9Ð@¸SˆCØ�s˜C�=Ð à˜‘7ˆÝ�Q��E $Ô"2°b¸5±jÑ"AÑBÔBÑCÔCÑDÔDˆå�•3�r˜A‘v˜x¨&Ñ0Ñ1Ô1Ñ2Ô2ØÝ�•3�r˜A‘v˜x¨&Ñ0Ñ1Ô1Ñ2Ô2ð
ˆð ˆØ�a‘ˆå�w ¨¡	Ñ*Ô*ð 	.ð 	.ˆAØ˜V™ˆJØˆKØð ð �Ø  A¨¡EÑ*�Ø˜c”N�Ø˜c A™gÔ&�Ø˜c A™gÔ&�à×$Ò$ Q¨¨1Ñ-Ô-ð Ø"&�KØ�Eðð × Ò  Ñ-Ô-Ð-Ð-å˜=Ñ)Ô)ˆØˆÝ" ;Ñ/Ô/ð 	!ð 	!‰IˆAˆvØð !ØÐ+°°Q¸Ñ5EÈÑ5IÐ0OÐ0OÒ0OÐ0OÈaÒ0OÐ0OÐ0OÐ0OÐ0OÝ" <°!Ñ#3°QÑ7Ô7ð .ð .˜Ø)-˜ A™˜Ø �øå˜Ñ$Ô$ˆ	Ý�C�˜S )¨jÑ"8Ñ9Ô9Ñ:Ô:ˆà"1Ðm°oÈÒ6IÐ6IˆoˆoÐQUÔQeÐQlÐilˆÝ�˜u s™{Ñ+Ô+Ñ,Ô,ˆ
àˆŒØ)ˆÔØˆÔà˜C Ð'Ð'r'   Úimgc                 ó`  — t           �t          |t           j         ¦  «        s|p| j        pd}d|dfS |j        \  }}|                     d¦  «        }|                     ¦   «         \  }}}	}
t          j        d|	|||
f¦  «        }|                     ¦   «         }|                      ||||¬¦  «        S )uV   
        Há»— trá»£ phÃ¢n tÃ­ch trá»±c tiáº¿p tá»« Ä‘á»‘i tÆ°á»£ng PIL Image.
        Nrr   r   r   r¦   ©r5   )	r   rÖ   r5   ÚsizeÚconvertÚsplitÚmergeÚtobytesrp  )rG   rq  r5   r[  r|   r}   Úimg_rgbar  r  rþ   ÚaÚbgrarù   s                r(   Úanalyze_pil_imagez!OpticalHPSensor.analyze_pil_imagek  s­   € õ ˆ=¥
¨3µ´Ñ <Ô <ˆ=Ø!Ð@ TÔ%9Ð@¸SˆCØ�s˜C�=Ð àŒx‰ˆˆ1Ø—;’;˜vÑ&Ô&ˆØ—^’^Ñ%Ô%‰
ˆˆ1ˆa�ÝŒ{˜6 A q¨!¨Q <Ñ0Ô0ˆØ—L’L‘N”Nˆ	à×"Ò" 1 a¨ÀOÐ"ÑTÔTÐTr'   c                 ó¼  — t          j        ¦   «         }|�=|�;|�9|                      ||||¬¦  «        }t          j        ¦   «         |z
  dz  | _        |S |p|                      ¦   «         }|p| j        pd}	|s#t          j        ¦   «         |z
  dz  | _        d|	dfS |                      |¦  «        \  }
}}}|                      ||
|||¦  «        }|r|                      |¦  «        r|  	                    ||
|||¦  «        }|r|}|s#t          j        ¦   «         |z
  dz  | _        d|	dfS |                      ||||¬¦  «        }t          j        ¦   «         |z
  dz  | _        |S )u@   
        Thá»±c hiá»‡n toÃ n bá»™ chu trÃ¬nh Ä‘á»�c HP.
        Nrs  g     @�@rr   r   r   )
r_   Úperf_counterrp  r>   r+   r5   rƒ   rí   rä   rå   )rG   rj   r5   rù   r   r€   Út0rö   rl   r[  r�   r‚   Úroi_wÚroi_hÚ
bytes_dataÚpw_datas                   r(   Úread_hpzOpticalHPSensor.read_hp  sœ  € õ ÔÑ Ô ˆàÐ  R ^¸¸Ø×%Ò% b¨"¨iÈÐ%ÑYÔYˆCÝ$(Ô$5Ñ$7Ô$7¸"Ñ$<ÀÑ#FˆDÔ ØˆJàÐ5˜d×3Ò3Ñ5Ô5ˆØÐ< Ô!5Ð<¸ˆàð 	!Ý$(Ô$5Ñ$7Ô$7¸"Ñ$<ÀÑ#FˆDÔ Ø�s˜C�=Ð à#×1Ò1°+Ñ>Ô>ÑˆˆB��uØ×+Ò+¨K¸¸RÀÈÑNÔNˆ
ð ð 	%˜T×.Ò.¨zÑ:Ô:ð 	%Ø×2Ò2°;ÀÀBÈÈuÑUÔUˆGØð %Ø$�
àð 	!Ý$(Ô$5Ñ$7Ô$7¸"Ñ$<ÀÑ#FˆDÔ Ø�s˜C�=Ð à×!Ò! %¨°
ÈOÐ!Ñ\Ô\ˆÝ $Ô 1Ñ 3Ô 3°bÑ 8¸FÑBˆÔØˆ
r'   Úexpected_max_manac           
      óˆ  — |pd}|p|                       ¦   «         }|s|€d|dfS |€9|r7|                      |¦  «        \  }}	}
}|                      |||	|
|¦  «        }|
|}}|r|�|�|dk    s|dk    rd|dfS t          dt	          |dz
  t          || j        z  ¦  «        ¦  «        ¦  «        }t          dt	          |dz
  t          || j        z  ¦  «        ¦  «        ¦  «        }||z
  dz   }|dk    rd|dfS |dz  }t          dt          t          | j	        |dz  z  ¦  «        ¦  «        ¦  «        }t          dt	          |dz
  ||z
  ¦  «        ¦  «        |t          dt	          |dz
  ||z   ¦  «        ¦  «        g}d}|dz  }t          ||dz   ¦  «        D ]l}||z  }d	}|D ]Y}||dz  z   }|dz   t          |¦  «        k     r9||         }||dz            }||dz            }|                      |||¦  «        rd
} nŒZ|r|dz  }Œmt          dt	          d||z  ¦  «        ¦  «        }t          t          ||z  ¦  «        ¦  «        }|||fS )uŸ   
        Ä�o lÆ°á»�ng lÆ°á»£ng Mana tá»« Quáº£ Cáº§u Mana á»Ÿ gÃ³c dÆ°á»›i bÃªn pháº£i mÃ n hÃ¬nh.
        Tráº£ vá»� (current_mana, max_mana, ratio).
        rr   Nr   r   r.   r0   rV  r¥   FTrT   )r+   rˆ   rí   r]   r  r!   r6   r7   rW  r8   r^   rÙ   r  )rG   rj   rù   r   r€   r…  Úmmanarl   r�   r‚   r€  r�  r^  r_  r`  ra  rb  rc  Ú	blue_rowsre  rf  rg  Úhas_blueri  rj  rþ   r  r  ro  Úcurs                                 r(   Úread_mana_ratiozOpticalHPSensor.read_mana_ratio©  s¼  € ð "Ð( SˆØÐ5˜d×3Ò3Ñ5Ô5ˆØð 	#˜yÐ0Ø�u˜c�?Ð"àÐ ÐØ#'×#4Ò#4°[Ñ#AÔ#AÑ ˆB��E˜5Ø×.Ò.¨{¸BÀÀEÈ5ÑQÔQˆIØ˜E�ˆBàð 	#˜B˜J¨"¨*¸¸aº¸À2ÈÂ7À7Ø�u˜c�?Ð"å�a�˜R !™V¥S¨¨dÔ.CÑ)CÑ%DÔ%DÑEÔEÑFÔFˆÝ�A•s˜2 ™6¥3 r¨DÔ,DÑ'DÑ#EÔ#EÑFÔFÑGÔGˆØ˜W‘_ qÑ(ˆ
Ø˜Š?ˆ?Ø�u˜c�?Ð"à˜‘7ˆÝ�Q��E $Ô"2°b¸5±jÑ"AÑBÔBÑCÔCÑDÔDˆå�•3�r˜A‘v˜x¨&Ñ0Ñ1Ô1Ñ2Ô2ØÝ�•3�r˜A‘v˜x¨&Ñ0Ñ1Ô1Ñ2Ô2ð
ˆð ˆ	Ø�a‘ˆÝ�w ¨¡	Ñ*Ô*ð 	ð 	ˆAØ˜V™ˆJØˆHØð ð �Ø  A¨¡EÑ*�Ø˜‘7�S ™^œ^Ò+Ð+Ø! #œ�AØ! #¨¡'Ô*�AØ! #¨¡'Ô*�AØ×)Ò)¨!¨Q°Ñ2Ô2ð Ø#'˜Ø˜øØð Ø˜Q‘�	øå�C�˜S )¨jÑ"8Ñ9Ô9Ñ:Ô:ˆÝ•%˜ ™Ñ&Ô&Ñ'Ô'ˆØ�U˜EÐ"Ð"r'   Ú
screenshotc                 ó^  ‡ ‡‡‡‡	‡
— 	 ddl }ddlŠddl}ddlŠ
ddlmŠ n# t          $ r Y dS w xY wdŠ	ˆˆ ˆˆ	ˆˆ
fd„}	 |                     ¦   «         }n# t          $ r d}Y nw xY w|€ |¦   «          n< |j	        |d¬¦  «        }| 
                    ¦   «          |                     d¬¦  «         ‰	S )	u©  
        Nháº­n diá»‡n chá»¯ sá»‘ Vitals chuáº©n xÃ¡c 100% báº±ng Windows Built-in OCR (winocr).
        Há»— trá»£ Ä‘á»�c (Life, Shield, Ward, Mana, Spirit) trá»±c tiáº¿p tá»« HUD POE2.
        Há»— trá»£ sá»‘ cÃ³ dáº¥u pháº©y hÃ ng nghÃ¬n (vÃ­ dá»¥: '2,402' -> 2402) vÃ  nháº­n diá»‡n CI build (HP=1).
        Cháº¡y trÃªn worker thread cÃ´ láº­p Ä‘á»ƒ Ä‘áº£m báº£o SetThreadDesktop vÃ  capture luÃ´n thÃ nh cÃ´ng.
        r   N)Ú	ImageGrabc            	      óÔ  •— 	 ‰.€~t          ¦   «          	  ‰+¦   «         } |                      ¦   «         }|r|                      |¦  «        Š.n# t          $ r Y nw xY w‰.€'	 ‰*                     ¦   «         Š.n# t          $ r Y d S w xY w‰.�t          ‰.d¦  «        sd S ‰.j        \  }}‰.                     dt          d|z  ¦  «        t          d|z  ¦  «        t          d|z  ¦  «        f¦  «        }‰.                     t          d|z  ¦  «        t          d|z  ¦  «        |t          d|z  ¦  «        f¦  «        }‰/ 	                    |d	¦  «        }‰/ 	                    |d	¦  «        }t          |t          ¦  «        r|                     d
d¦  «        nt          |d
d¦  «        }t          |t          ¦  «        r|                     d
d¦  «        nt          |d
d¦  «        }	‰+                     |¦  «        }‰+                     |	¦  «        }	 ‰,j        d|¦  «        }
 ‰,j        d|	¦  «        }t!          ¦   «         }d|_        d|                     ¦   «         › d|	                     ¦   «         › �|_        d }d }d }d }d }d } ‰,j        d|‰,j        ¦  «        }|rÈ	 ‰+                     |                     d¦  «        ¦  «        }‰+                     |                     d¦  «        ¦  «        }‰+                     |                     d¦  «        ¦  «        }‰+                     |                     d¦  «        ¦  «        }||f}||f}||_        ||_        n# t          $ r Y nw xY w|s{ ‰,j        d|‰,j        ¦  «        }|rb	 ‰+                     |                     d¦  «        ¦  «        ‰+                     |                     d¦  «        ¦  «        f}n# t          $ r Y nw xY w|�s ‰,j        d|‰,j        ¦  «        }|r­	 ‰+                     |                     d¦  «        ¦  «        }|                     d¦  «        r(‰+                     |                     d¦  «        ¦  «        n|}|dk    r||k     s|dk    r|}||f}|d         |_        |d         |_        �nP# t          $ r Y �nCw xY wt5          |
¦  «        dk    r£ ‰,j        d|‰,j        ¦  «        rŒ	 |
D ]w}‰+                     |d         ¦  «        ‰+                     |d         ¦  «        f}||k    r9|\  }}|dk    r||k     s|dk    r|}||f}|d         |_        |d         |_         nŒxn™# t          $ r Y n�w xY wt5          |
¦  «        dk    rv	 ‰+                     |
d         d         ¦  «        ‰+                     |
d         d         ¦  «        f}||k    r|}|d         |_        |d         |_        n# t          $ r Y nw xY w ‰,j        d|‰,j        ¦  «        }|rb	 ‰+                     |                     d¦  «        ¦  «        ‰+                     |                     d¦  «        ¦  «        f}nÎ# t          $ r Y nÂw xY w|sX|sVt5          |
¦  «        dk    rC‰+                     |
d         d         ¦  «        ‰+                     |
d         d         ¦  «        f}nd|s|r`t5          |
¦  «        dk    rM|sK|
D ]H}‰+                     |d         ¦  «        ‰+                     |d         ¦  «        f} | |k    r
| |k    r| } nŒI|sct5          |
¦  «        dk    rP‰+                     |
d         d         ¦  «        ‰+                     |
d         d         ¦  «        f}!|!|k    r|!|k    r|!}|r|d         dk    p|o|d         dk    }"|r|dk    s|"r|r|d         dk    rd}|rG|\  }#}$d|$cxk    rdk    sn |$dk    r-|#|_        |$|_        |#t;          d|$¦  «        z  |_        d|_        |r#|\  }#}$d|$cxk    rdk    rn n|#|_         |$|_!        |r#|\  }#}$d|$cxk    rdk    rn n|#|_        |$|_        tE           ‰,j        d|	‰,j        ¦  «        ¦  «        }% ‰,j        d|	‰,j        ¦  «        }&|&rn	 ‰+                     |&                     d¦  «        ¦  «        }'‰+                     |&                     d¦  «        ¦  «        }$|'|$k    r|'}$|'|$f}nƒ# t          $ r Y nww xY wt5          |¦  «        dk    r`	 ‰+                     |d         d         ¦  «        }'‰+                     |d         d         ¦  «        }$|'|$k    r|'}$|'|$f}n# t          $ r Y nw xY w ‰,j        d |	‰,j        ¦  «        }(|(rb	 ‰+                     |(                     d¦  «        ¦  «        ‰+                     |(                     d¦  «        ¦  «        f}nŸ# t          $ r Y n“w xY wt5          |¦  «        dk    r| ‰,j        d!|	‰,j        ¦  «        s ‰,j        d"|	¦  «        sT	 ‰+                     |d         d         ¦  «        ‰+                     |d         d         ¦  «        f}n# t          $ r Y nw xY w|%�r@t5          |¦  «        dk    rT‰+                     |d         d         ¦  «        }'‰+                     |d         d         ¦  «        }$|'t;          |'|$¦  «        f}t5          |¦  «        dk    rY ‰,j        d!|	‰,j        ¦  «        rB‰+                     |d         d         ¦  «        ‰+                     |d         d         ¦  «        f}t5          |¦  «        dk    rY ‰,j        d#|	‰,j        ¦  «        rB‰+                     |d         d         ¦  «        ‰+                     |d         d         ¦  «        f}n{ ‰,j        d$|	‰,j        ¦  «        })|)rb	 ‰+                     |)                     d¦  «        ¦  «        ‰+                     |)                     d¦  «        ¦  «        f}n# t          $ r Y nw xY w|r‡||k    s||k    s|d         d%k    rot5          |¦  «        dk    rZ ‰,j        d#|	‰,j        ¦  «        rC‰+                     |d         d         ¦  «        ‰+                     |d         d         ¦  «        f}nd }|r+|\  }#}$|#|$k    r|#}$d&|$cxk    rdk    rn n|#|_#        |$|_$        |r+|\  }#}$|#|$k    r|#}$d&|$cxk    rd'k    rn n|#|_%        |$|_&        |r|\  }#}$|#|_'        |$|_(        |j        s,|j        dk    s!|j$        dk    s|j!        dk    s|j&        dk    r|nd Š-d S # t          $ r Y d S w xY w)(Nrt  r   gÍÌÌÌÌÌä?g      Ð?g333333ë?g®Gáz®ç?g…ëQ¸å?g\�Âõ(\ï?Úenr6  r   r=  Úwinocr_screenzLeft: ú
 | Right: r9  r.   r0   rq   r¥   r:  z<Ward\s*[:\s]*(\d+[\.,]?\d*)(?:\s*[/|\\I!]\s*(\d+[\.,]?\d*))?r  r;  r>  r  i0u  Ti N  zMana[^\d]*(?:Spirit|Rage)r<  ú9Spirit\s*[:\s]*(\d+[\.,]?\d*)\s*[/|\\I!]\s*(\d+[\.,]?\d*)ÚSpiritz[a-zA-Z]ÚRageú7Rage\s*[:\s]*(\d+[\.,]?\d*)\s*[/|\\I!]\s*(\d+[\.,]?\d*)rr   rt   iÐ  ))r)   r+   rÏ   rY   ÚgrabrÝ   rt  Úcropr!   Úrecognize_pil_syncrÖ   ÚdictÚgetr©   r.  rA  r	   r   r3  r   r?  r%  r5  r'  r   r   rÙ   r
   r   r]   r   r   r   r   r%   r   r   r   r   r   r   )0Úsensor_instÚpoe_hwndr|   r}   Úcrop_lÚcrop_rÚres_lÚres_rÚtxt_lÚtxt_rÚpairs_lÚpairs_rra   Úshield_tupleÚ
ward_tupleÚ
life_tupleÚ
mana_tupleÚspirit_tupleÚ
rage_tuplerF  rG  rH  rI  r   Úm_shieldrK  Úw_curÚw_maxÚp_rawÚp_candÚp2Úm_lifeÚp_candidateÚp1Úhas_ci_guardrŠ  r   Úhas_stacked_labelsrM  rN  Úm_spiritÚm_ragerŽ  Úclsr+  Úresult_vitalsrŒ  Úwinocrs0                                             €€€€€€r(   Ú_workerz3OpticalHPSensor._detect_via_winocr.<locals>._workerù  s¡  ø€ ðtØÐ%Ý-Ñ/Ô/Ð/ðØ&) c¡e¤e˜Ø#.×#?Ò#?Ñ#AÔ#A˜Ø#ð SØ)4×)HÒ)HÈÑ)RÔ)R˜JøøÝ$ð ð ð Ø˜ðøøøð "Ð)ð#Ø)2¯ªÑ)9Ô)9˜J˜JøÝ(ð #ð #ð #Ø"˜F˜Fð#øøøð Ð%­W°ZÀÑ-HÔ-HÐ%Ø�Fà!”‘��1Ø#Ÿš¨!­S°¸±©]¬]½CÀÀqÁ¹M¼MÍ3ÈtÐVWÉxÉ=Ì=Ð)YÑZÔZ�Ø#Ÿš­#¨d°Q©h©-¬-½¸TÀA¹X¹¼ÈÍ3ÈtÐVWÉxÉ=Ì=Ð)YÑZÔZ�à×1Ò1°&¸$Ñ?Ô?�Ø×1Ò1°&¸$Ñ?Ô?�Ý1;¸EÅ4Ñ1HÔ1HÐh˜Ÿ	š	 &¨"Ñ-Ô-Ð-ÍgÐV[Ð]cÐegÑNhÔNh�Ý1;¸EÅ4Ñ1HÔ1HÐh˜Ÿ	š	 &¨"Ñ-Ô-Ð-ÍgÐV[Ð]cÐegÑNhÔNh�à×*Ò*¨5Ñ1Ô1�Ø×*Ò*¨5Ñ1Ô1�à$˜"œ*Ð%RÐTYÑZÔZ�Ø$˜"œ*Ð%RÐTYÑZÔZ�å!‘O”O�Ø%4�Ô"ØN e§k¢k¡m¤mÐNÐN¸u¿{º{¹}¼}ÐNÐN�”
à:>�Ø8<�
Ø8<�
Ø8<�
Ø:>�Ø8<�
ð !�r”yð  "að  chð  jlô  jnñ  oô  o�Øð ð
Ø!$×!3Ò!3°D·J²J¸q±M´MÑ!BÔ!B˜Ø!$×!3Ò!3°D·J²J¸q±M´MÑ!BÔ!B˜Ø#&×#5Ò#5°d·j²jÀ±m´mÑ#DÔ#D˜Ø#&×#5Ò#5°d·j²jÀ±m´mÑ#DÔ#D˜Ø(.°Ð'7˜Ø&.°Ð%9˜
Ø)1˜œØ%-˜œ
˜
øÝ$ð ð ð Ø˜ðøøøð $ð !Ø(˜rœyð  *Qð  SXð  Z\ô  Z^ñ   _ô   _�HØð !ð!Ø,/×,>Ò,>¸x¿~º~ÈaÑ?PÔ?PÑ,QÔ,QÐSV×SeÒSeÐfn×ftÒftÐuvÑfwÔfwÑSxÔSxÐ+y˜L˜LøÝ(ð !ð !ð !Ø ˜Dð!øøøð "ñ #!Ø&˜RœYÐ'fÐhmÐoqÔosÑtÔt�FØð !!ð	!Ø$'×$6Ò$6°v·|²|ÀA±´Ñ$GÔ$G˜EØKQÏ<Ê<ÐXYÉ?Ì?Ð$e C×$6Ò$6°v·|²|ÀA±´Ñ$GÔ$GÐ$GÐ`e˜EØ$ qšy˜y¨e°eªm¨m¸uÈºz¸zØ(- Ø*/°¨˜JØ-7¸¬]˜AœNØ)3°A¬˜AœJ™JøÝ(ð !ð !ð !Ø ™Dð!øøøå˜W™œ¨Ò*Ð*¨y¨r¬y¸À%ÈÌÑ/NÔ/NÐ*ð!Ø)0ð 	*ð 	* Ø*-×*<Ò*<¸UÀ1¼XÑ*FÔ*FÈ×HZÒHZÐ[`ÐabÔ[cÑHdÔHdÐ)e Ø#)¨\Ò#9Ð#9Ø39¡L E¨5Ø',¨q¢y y°e¸e²m°mÀuÐPQÂzÀzØ05¨Ø27¸° JØ5?À´] A¤NØ1;¸A´ A¤JØ$) Eð $:øøõ  )ð !ð !ð !Ø ˜Dð!øøøå˜W™œ¨Ò*Ð*ð!Ø"%×"4Ò"4°W¸Q´ZÀ´]Ñ"CÔ"CÀS×EWÒEWÐX_Ð`aÔXbÐcdÔXeÑEfÔEfÐ!g˜BØ! \Ò1Ð1Ø-/ 
Ø1;¸A´ ¤Ø-7¸¬] ¤
øøÝ(ð !ð !ð !Ø ˜Dð!øøøð #˜œÐ#yð  |Að  CEô  CGñ  Hô  H�Øð "ðØ&)×&8Ò&8¸¿ºÀa¹¼Ñ&IÔ&IÈ3×K]ÒK]Ð^d×^jÒ^jÐklÑ^mÔ^mÑKnÔKnÐ%o˜
˜
øÝ$ð ð ð Ø˜ðøøøà%ð "¨jð "½SÀ¹\¼\ÈQÒ=NÐ=NØ"%×"4Ò"4°W¸Q´ZÀ´]Ñ"CÔ"CÀS×EWÒEWÐX_Ð`aÔXbÐcdÔXeÑEfÔEfÐ!g�J�JØ"ð " jð "µc¸'±l´lÀaÒ6GÐ6GÐPTÐ6GØ!(ð "ð "˜Ø'*×'9Ò'9¸%À¼(Ñ'CÔ'CÀS×EWÒEWÐX]Ð^_ÔX`ÑEaÔEaÐ&b˜Ø&¨,Ò6Ð6¸;È*Ò;TÐ;TØ)4˜JØ!˜Eøð $ð *­¨G©¬¸Ò(9Ð(9Ø×,Ò,¨W°Q¬Z¸¬]Ñ;Ô;¸S×=OÒ=OÐPWÐXYÔPZÐ[\ÔP]Ñ=^Ô=^Ð_�BØ˜ZÒ'Ð'¨B°*Ò,<Ð,<Ø')˜ð !-Ð D°¸a´À1Ò1DÐkÈ*ÐJjÐYcÐdeÔYfÐijÒYj�Øð ( :°Ò#7Ð#7¸\Ð#7ÐS]Ð#7ÐakÐlmÔanÐrsÒasÐasØ!'�Jàð -Ø'‘F�C˜Ø˜aÐ(Ð(Ò(Ð( 5Ò(Ð(Ð(Ð(¨Q°!ªV¨VØ'*˜œØ#$˜œØ%(­3¨q°!©9¬9¡_˜œ
Ø(,˜œàð )Ø)‘F�C˜Ø˜A��’� ’����Ø+.˜Ô(Ø'(˜œàð 'Ø'‘F�C˜Ø˜A��’� ’����Ø),˜œØ%&˜œ
õ &*¨)¨"¬)Ð4PÐRWÐY[ÔY]Ñ*^Ô*^Ñ%_Ô%_Ð"ð #˜œÐ#hÐjoÐqsÔquÑvÔv�Øð ðØ×.Ò.¨v¯|ª|¸A©¬Ñ?Ô?˜Ø×.Ò.¨v¯|ª|¸A©¬Ñ?Ô?˜Ø˜qš5˜5Ø !˜AØ&'¨ V˜
˜
øÝ$ð ð ð Ø˜ðøøøå˜‘\”\ QÒ&Ð&ðØ×.Ò.¨w°q¬z¸!¬}Ñ=Ô=˜Ø×.Ò.¨w°q¬z¸!¬}Ñ=Ô=˜Ø˜qš5˜5Ø !˜AØ&'¨ V˜
˜
øÝ$ð ð ð Ø˜ðøøøð %˜2œ9Ð%aÐchÐjlÔjnÑoÔo�Øð 	ðØ(+×(:Ò(:¸8¿>º>È!Ñ;LÔ;LÑ(MÔ(MÈs×OaÒOaÐbj×bpÒbpÐqrÑbsÔbsÑOtÔOtÐ'u˜˜øÝ$ð ð ð Ø˜ðøøøå˜‘\”\ QÒ&Ð&¨I¨B¬I°iÀÈÌÑ,MÔ,MÐ&ÐU^ÐUWÔU^Ð_jÐlqÑUrÔUrÐ&ðØ(+×(:Ò(:¸7À1¼:Àa¼=Ñ(IÔ(IÈ3×K]ÒK]Ð^eÐfgÔ^hÐijÔ^kÑKlÔKlÐ'm˜˜øÝ$ð ð ð Ø˜ðøøøð &ñ !Ý˜7‘|”| qÒ(Ð(Ø×.Ò.¨w°q¬z¸!¬}Ñ=Ô=˜Ø×.Ò.¨w°q¬z¸!¬}Ñ=Ô=˜Ø&'­¨Q°©¬ ^˜
Ý˜7‘|”| qÒ(Ð(¨Y¨R¬Y°yÀ%ÈÌÑ-NÔ-NÐ(Ø(+×(:Ò(:¸7À1¼:Àa¼=Ñ(IÔ(IÈ3×K]ÒK]Ð^eÐfgÔ^hÐijÔ^kÑKlÔKlÐ'm˜Ý˜7‘|”| qÒ(Ð(¨Y¨R¬Y°wÀÀrÄtÑ-LÔ-LÐ(Ø&)×&8Ò&8¸À¼ÀA¼Ñ&GÔ&GÈ×I[ÒI[Ð\cÐdeÔ\fÐghÔ\iÑIjÔIjÐ%k˜
øà&˜RœYÐ'aÐchÐjlÔjnÑoÔo�FØð !ð!Ø*-×*<Ò*<¸V¿\º\È!¹_¼_Ñ*MÔ*MÈs×OaÒOaÐbh×bnÒbnÐopÑbqÔbqÑOrÔOrÐ)s˜J˜JøÝ(ð !ð !ð !Ø ˜Dð!øøøð ð .Ø! ZÒ/Ð/°:ÀÒ3MÐ3MÐQ[Ð\]ÔQ^ÐadÒQdÐQdÝ˜w™<œ<¨1Ò,Ð,°°´¸7ÀEÈ2Ì4Ñ1PÔ1PÐ,Ø*-×*<Ò*<¸WÀQ¼ZÈ¼]Ñ*KÔ*KÈS×M_ÒM_Ð`gÐhiÔ`jÐklÔ`mÑMnÔMnÐ)o˜J˜Jà)-˜Jàð 'Ø'‘F�C˜Ø˜Q’w�wØ˜Ø˜QÐ'Ð'Ò'Ð' %Ò'Ð'Ð'Ð'Ð'Ø),˜œØ%&˜œ
àð )Ø)‘F�C˜Ø˜Q’w�wØ˜Ø˜Q��’� $’����Ø+.˜Ô(Ø'(˜œàð #Ø'‘F�C˜Ø%(�A”NØ!"�A”Jà&'¤mð  !I°q´xÀ!²|°|ÀqÄzÐTUÂ~À~ÐYZÔYeÐhiÒYiÐYiÐmnÔmyÐ|}Òm}Ðm}  ð  EI���øÝð ð ð Ø��ðøøøsù  ƒu ”5A
 Á	u Á

AÁu ÁAÁu ÁA2 Á1u Á2
B Á<u Á?B Â u ÂG7u ÊB6M Íu Í
MÍu ÍMÍu Í2AO Ïu Ï
OÏu ÏOÏu Ï0BR Ò	u Ò
RÒu ÒRÒ-u ÓA:U Õu Õ
UÕu ÕUÕu Õ&A$W ×
u ×
W×u ×W×u ×5AY Ùu Ù
YÙu ÙYÙH,u â Ac ãu ã
c*ã'u ã)c*ã*u äAe åu å
eåu åeåu å:Ag ç
u ç
gçu çgç>u èAi éu é
i'é$u é&i'é'Eu ïAp ðu ð
p%ð"u ð$p%ð%D2u õ
u'õ&u'T)rL   rN   ç      .@rW   )Úasyncior+  rD   r»  ÚPILrŽ  ÚImportErrorÚget_running_loopÚRuntimeErrorrP   rR   rX   )r¹  rŒ  r¾  rD   r¼  ÚloopÚthrŽ  r+  rº  r»  s   ``     @@@@r(   Ú_detect_via_winocrz"OpticalHPSensor._detect_via_winocrå  s=  øøøøøø€ ð	ØˆNˆNˆNØˆIˆIˆIØÐÐÐàˆMˆMˆMØ%Ð%Ð%Ð%Ð%Ð%Ð%øÝð 	ð 	ð 	Ø�4�4ð	øøøð 26ˆðw	ð w	ð w	ð w	ð w	ð w	ð w	ð w	ð w	ð w	ðr	Ø×+Ò+Ñ-Ô-ˆDˆDøÝð 	ð 	ð 	ØˆDˆDˆDð	øøøð ˆ<ØˆG‰IŒIˆIˆIà!�Ô!¨¸Ð>Ñ>Ô>ˆBØ�HŠH‰JŒJˆJØ�GŠG˜DˆGÑ!Ô!Ð!àÐs   ˆ Ÿ
-¬-½A ÁA!Á A!Ú	mock_textc                 óŒ  — t          ¦   «          |€%|€#|€!| j        r| j        r| j        j        r| j        S t	          ¦   «         }|�rt          j        d|t
          j        ¦  «        }|�r™|                      | 	                    d¦  «        ¦  «        }|                      | 	                    d¦  «        ¦  «        }|                      | 	                    d¦  «        ¦  «        }|                      | 	                    d¦  «        ¦  «        }	||_
        ||_        ||_        |	|_        d|_        d|_        d|_        d|_        ||_        d	|_        t          j        d
|t
          j        ¦  «        }
|
rl|                      |
 	                    d¦  «        ¦  «        }|                      |
 	                    d¦  «        ¦  «        }||_        t)          ||¦  «        |_        t          j        d|t
          j        ¦  «        }|rl	 |                      | 	                    d¦  «        ¦  «        |_        |                      | 	                    d¦  «        ¦  «        |_        n# t0          $ r Y nw xY wt          j        d|t
          j        ¦  «        }|rl	 |                      | 	                    d¦  «        ¦  «        |_        |                      | 	                    d¦  «        ¦  «        |_        n# t0          $ r Y nw xY w|| _        |S |                      |¦  «        \  }}}||_        |r?|\  |_        |_        |j        t)          d|j        ¦  «        z  |_        d|_        d	|_        |r3|\  |_
        |_        |r|dk    rd|_        d|_        d|_        d|_        |r|\  |_        |_        t          j        d|t
          j        ¦  «        }|rl	 |                      | 	                    d¦  «        ¦  «        |_        |                      | 	                    d¦  «        ¦  «        |_        n# t0          $ r Y nw xY wt          j        d|t
          j        ¦  «        }|rl	 |                      | 	                    d¦  «        ¦  «        |_        |                      | 	                    d¦  «        ¦  «        |_        n# t0          $ r Y nw xY wt          j        d|t
          j        ¦  «        }|rl	 |                      | 	                    d¦  «        ¦  «        |_        |                      | 	                    d¦  «        ¦  «        |_        n# t0          $ r Y nw xY w|| _        |S |�žt8          �—t;          |t8          j        ¦  «        r}|                      |¦  «        }|r|j        r	|| _        |S |                      || j         ¬¦  «        \  }}}||_        ||_        ||_        |dk    o|dk    |_        d|_        || _        |S |p|  !                    ¦   «         }|s|S |                      d¦  «        }|r|j        r	|| _        |S |  "                    || j         ¬¦  «        \  }}}||_        ||_        ||_        d}d}	 ddl#}|  $                    |¦  «        \  }} }!}"|  %                    ||| |!|"¦  «        }#|#r6t8          r/t9          j&        d|!|"f|#dd¦  «        }$| '                    |$¦  «        }|  (                    |¦  «        \  }%}&}'}(|  %                    ||%|&|'|(¦  «        })|)r6t8          r/t9          j&        d|'|(f|)dd¦  «        }*| '                    |*¦  «        }n# t0          $ r d}d}Y nw xY w|r�||rd|› �ndz   |_        |                      |¦  «        \  }}}|r?|\  |_        |_        |j        t)          d|j        ¦  «        z  |_        d|_        d|_        |r|\  |_
        |_        |r|\  |_        |_        |r*|                      |¦  «        \  }+}+},|,r|,\  |_        |_        |j        s|dk    rd|_        d|_        || _        |S )u  
        Tá»± Ä‘á»™ng nháº­n diá»‡n toÃ n diá»‡n Vitals (Life, Shield, Ward, Mana) tá»« hÃ¬nh áº£nh mÃ n hÃ¬nh game.
        - Há»— trá»£ background worker 2Hz: tráº£ vá»� tá»©c thá»�i 0ms last_detected_vitals khi Ä‘ang cháº¡y ngáº§m.
        - Há»— trá»£ OCR text náº¿u cÃ³ thÆ° viá»‡n (pytesseract/easyocr) hoáº·c mock_text.
        - PhÃ¢n tÃ­ch pixel / tá»· lá»‡ cháº¥t lá»�ng tá»« quáº£ cáº§u mÃ¡u vÃ  mana.
        - Tráº£ vá»� Ä‘á»‘i tÆ°á»£ng OpticalVitals Ä‘áº§y Ä‘á»§ (current_hp, max_hp, shield, ward, mana).
        Nr9  r.   r0   rq   r¥   rT   TrÆ  r<  r“  r–  r>  zD(?<!Shield\s)Ward\s*[:\s]*(\d+[\.,]?\d*)\s*[/|\\I!]\s*(\d+[\.,]?\d*)rs  r   r   Ú	pil_image)rj   r5   r   r¦   r§   r¨   r’  ÚocrÚratio_estimate))r)   rB   r@   r   r	   r+  r?  r%  r5  r'  r   r   r   r   r
   r   r   r   r   r   r]   r   r   r   rY   r   r   rT  r   rÖ   rÅ  r|  r5   r+   r„  Úpytesseractrƒ   rí   Ú	frombytesÚimage_to_stringrˆ   )-rG   rj   rq  rÆ  ÚvitalsrF  rG  rH  rI  r   rM  rN  r   r·  r¸  rB  rC  rD  rK  Úv_ocrrŠ  r[  ro  rl   Úv_winocrÚcur_hpr   r   Úextracted_textÚ	mana_textrË  r�   r‚   r   r€   r§   Ú	img_globeÚmrxÚmryÚmrwÚmrhÚraw_manaÚimg_manarc   Úopt_manas-                                                r(   r\   z)OpticalHPSensor.detect_vitals_from_screen   sê  € õ 	"Ñ#Ô#Ð#àˆ<˜C˜K¨IÐ,=ØÔð 1 DÔ$=ð 1À$ÔB[ÔBgð 1ØÔ0Ð0å‘”ˆð ñ V	Ý”9ð  ]ð  _hõ  jlô  jnñ  oô  oˆDØñ (Ø×,Ò,¨T¯ZªZ¸©]¬]Ñ;Ô;�Ø×,Ò,¨T¯ZªZ¸©]¬]Ñ;Ô;�Ø×.Ò.¨t¯zªz¸!©}¬}Ñ=Ô=�Ø×.Ò.¨t¯zªz¸!©}¬}Ñ=Ô=�Ø(.�Ô%Ø$*�Ô!Ø&.�Ô#Ø"*�”Ø$%�Ô!Ø !�”Ø"%�”Ø%)�Ô"Ø"+�”Ø*5�Ô'åœÐ#hÐjsÕuwÔuyÑzÔz�Øð 0Ø×+Ò+¨F¯LªL¸©O¬OÑ<Ô<�AØ×+Ò+¨F¯LªL¸©O¬OÑ<Ô<�AØ*+�FÔ'Ý&)¨!¨Q¡i¤i�F”Oåœ9Ð%aÐclÕnpÔnrÑsÔs�Øð ðØ04×0CÒ0CÀHÇNÂNÐSTÑDUÔDUÑ0VÔ0V˜Ô-Ø,0×,?Ò,?ÀÇÂÈqÑ@QÔ@QÑ,RÔ,R˜Ô)Ð)øÝ$ð ð ð Ø˜ðøøøõ œÐ#]Ð_hÕjlÔjnÑoÔo�Øð ðØ.2×.AÒ.AÀ&Ç,Â,ÈqÁ/Ä/Ñ.RÔ.R˜Ô+Ø*.×*=Ò*=¸f¿lºlÈ1¹o¼oÑ*NÔ*N˜œ˜øÝ$ð ð ð Ø˜ðøøøð -3�Ô)Ø�à×1Ò1°)Ñ<Ô<‰LˆB��DØ'ˆFŒOØð 6Ø35Ñ0�Ô! 6¤=Ø"(Ô"3µc¸!¸V¼]Ñ6KÔ6KÑ"K�”Ø%)�Ô"Ø*5�Ô'Øð .Ø;=Ñ8�Ô% vÔ'8Øð .˜R 6š\˜\Ø()�FÔ%Ø$%�F”MØ&)�F”OØ)-�FÔ&Øð <Ø7;Ñ4�Ô# V¤_å”YÐfÐhqÕsuÔswÑxÔxˆFØð ðØ*.×*=Ò*=¸f¿lºlÈ1¹o¼oÑ*NÔ*N�FÔ'Ø&*×&9Ò&9¸&¿,º,Àq¹/¼/Ñ&JÔ&J�F”O�OøÝ ð ð ð Ø�Dðøøøõ ”yÐ!]Ð_hÕjlÔjnÑoÔoˆHØð ðØ,0×,?Ò,?ÀÇÂÈqÑ@QÔ@QÑ,RÔ,R�FÔ)Ø(,×(;Ò(;¸H¿NºNÈ1Ñ<MÔ<MÑ(NÔ(N�FÔ%Ð%øÝ ð ð ð Ø�Dðøøøõ ”YÐYÐ[dÕfhÔfjÑkÔkˆFØð ðØ*.×*=Ò*=¸f¿lºlÈ1¹o¼oÑ*NÔ*N�FÔ'Ø&*×&9Ò&9¸&¿,º,Àq¹/¼/Ñ&JÔ&J�F”O�OøÝ ð ð ð Ø�Dðøøøð )/ˆDÔ%ØˆMð ˆ?�uÐ0µZÀÅUÄ[Ñ5QÔ5QÐ0à×+Ò+¨CÑ0Ô0ˆEØð ˜Ô*ð Ø,1�Ô)Ø�à"×4Ò4°SÈ$ÔJ^Ð4Ñ_Ô_‰OˆC��eØ #ˆFÔØˆFŒMØ#ˆFŒOØ"%¨¢'Ð"9¨e°cªkˆFÔØ&1ˆFÔ#Ø(.ˆDÔ%ØˆMð Ð5˜d×3Ò3Ñ5Ô5ˆØð 	ØˆMð ×*Ò*¨4Ñ0Ô0ˆØð 	˜Ô,ð 	Ø(0ˆDÔ%ØˆOð $(§<¢<°[ÐRVÔRf <Ñ#gÔ#gÑ ˆ�˜Ø"ˆÔØˆŒØ"ˆŒð ˆØˆ	ð	ØÐÐÐØ!×/Ò/°Ñ<Ô<‰NˆB��B˜Ø×(Ò(¨°b¸"¸bÀ"ÑEÔEˆCØð H•uð HÝ!œO¨F°R¸°H¸cÀ5È&ÑQÔQ�	Ø!,×!<Ò!<¸YÑ!GÔ!G�à!%×!2Ò!2°;Ñ!?Ô!?ÑˆC��c˜3Ø×-Ò-¨k¸3ÀÀSÈ#ÑNÔNˆHØð B�Eð BÝ œ?¨6°C¸°:¸xÈÐPVÑWÔW�Ø'×7Ò7¸ÑAÔA�	øøÝð 	ð 	ð 	ØˆNØˆIˆIˆIð	øøøð ð 	<Ø,ÈIÐ0]Ð0H¸YÐ0HÐ0HÐ0HÐ[]Ñ^ˆFŒOØ×1Ò1°.ÑAÔA‰LˆB��DØð 0Ø35Ñ0�Ô! 6¤=Ø"(Ô"3µc¸!¸V¼]Ñ6KÔ6KÑ"K�”Ø%)�Ô"Ø*/�Ô'Øð >Ø;=Ñ8�Ô% vÔ'8Øð <Ø7;Ñ4�Ô# V¤_àð 	@Ø!×3Ò3°IÑ>Ô>‰NˆAˆq�(Øð @Ø7?Ñ4�Ô# V¤_àÔ!ð 	7 h°¢n nØ!%ˆFÔØ&6ˆFÔ#à$*ˆÔ!Øˆsr   ÈAI É
I)É(I)ÊAK* Ë*
K7Ë6K7ÏAP( Ð(
P5Ð4P5ÑAR6 Ò6
SÓSÓ)AU Õ
UÕUÙ8C] Ý]$Ý#]$r   r½  Ú
memory_curÚ
memory_maxÚoptical_curÚoptical_maxÚoptical_ratioÚthreshold_pctc           	      ó^  — |dk    rdS |dk    r|dv s|dk    rdS |dk    r&t          ||z
  ¦  «        }|dk    rdd|› d	|› d
|› d�fS |dk    r`|dk    rZ||z  dz  }|dz  }	t          ||	z
  ¦  «        }
|
|k    r5ddt          |¦  «        › dt          |	¦  «        › dt          |
¦  «        › d�fS dS )uƒ  
        Kiá»ƒm tra Ä‘á»™ lá»‡ch giá»¯a sá»‘ liá»‡u RAM (Shared Memory) vÃ  MÃ n hÃ¬nh thá»±c táº¿:
        - PhÃ¡t hiá»‡n khi C++ Core báº¯t nháº§m Ã´ nhá»› rÃ¡c (vd 778/778 trong khi mÃ n hÃ¬nh lÃ  495/503).
        - PhÃ¡t hiá»‡n khi tá»‰ lá»‡ mÃ¡u trong RAM lá»‡ch lá»›n so vá»›i má»©c cháº¥t lá»�ng quang há»�c (> threshold_pct).
        Tráº£ vá»� (has_mismatch, message).
        r   )Tu@   MÃ¡u trong RAM <= 0 (Dá»¯ liá»‡u rÃ¡c hoáº·c chÆ°a khá»Ÿi táº¡o)r.   )r   r.   rr   )FzOK (CI Build)é   Tu   Lá»‡ch Max HP: RAM u    != MÃ n hÃ¬nh u	    (lá»‡ch ú)r   g      Y@u   Lá»‡ch tá»‰ lá»‡ HP: RAM u   % != MÃ n hÃ¬nh u
   % (lá»‡ch z%))FÚOK)r  r!   )rG   rÜ  rÝ  rÞ  rß  rà  rá  ÚdiffÚmem_pctÚopt_pctÚpct_diffs              r(   Úcheck_memory_discrepancyz(OpticalHPSensor.check_memory_discrepancy¾  s5  € ð ˜Š?ˆ?Ø]Ð]ð ˜Š?ˆ? ¨{Ð :Ð :¸kÈQÒ>NÐ>NØ+Ð+ð ˜Š?ˆ?Ý�z KÑ/Ñ0Ô0ˆDØ�bŠyˆyØÐl°JÐlÐlÈ{ÐlÐlÐeiÐlÐlÐlÐmÐmð ˜3ÒÐ :°¢> >Ø! JÑ.°%Ñ7ˆGØ# eÑ+ˆGÝ˜7 WÑ,Ñ-Ô-ˆHØ˜-Ò'Ð'Øð  B½#¸g¹,¼,ð  Bð  BÕX[Ð\cÑXdÔXdð  Bð  BÕpsÐt|Ñp}Ôp}ð  Bð  Bð  Bð  Cð  Càˆ}r'   )r   r2   r3   r4   )r:   )rT   )N)NNNNF)r0   )rø   r8  )NNNNN)r   r½  ),r   r   r   r    r/   r!   r"   r1   r#   rH   rS   rZ   rQ   r   r+   r%   rm   r   rƒ   rˆ   r   rÏ   rÂ   rí   rå   Ústaticmethodrä   r	  r  r  r  r$   r.  r5  rT  rp  r|  r„  r‹  Úclassmethodr	   rÅ  r\   rê  r&   r'   r(   r-   r-   :   s´  € € € € € € ðð ð $€M�3Ð#Ð#Ñ#Ø *Ð˜#Ð*Ð*Ñ*ð  !Ø"&Ø%)Øð9ð 9àð9ð  ð9ð #ð	9ð
 ð9ð 9ð 9ð 9ð2$ð $°ð $ð $ð $ð $ð$	#ð 	#¨eð 	#ð 	#ð 	#ð 	#ð!ð !ð !ð" (¨3¤-ð ð ð ð ð&0ð 0¨X°c¬]ð 0Àdð 0ð 0ð 0ð 0ð  #ð  ¨%°°S¸#¸sÐ0BÔ*Cð  ð  ð  ð  ð:  ð  ¨¨s°C¸¸cÐ/AÔ)Bð  ð  ð  ð  ð:lð l¨°¬ð lÀÈ#Äð lð lð lð lðb Ø Ø Ø Ø%*ðmð màðmð ðmð �SŒMð	mð
 �SŒMðmð �SŒMðmð #ðmð 
�%Œðmð mð mð mðl ð^ð ^àð^ð ð^ð ð	^ð
 ð^ð ð^ð ð^ð 
�%Œð^ð ^ð ^ð ^ð@ ð=ð = ¨¤ð =¸cð =È4ð =ð =ð =ñ „\ð=ð ð=˜ð = ð =¨ð =°ð =ð =ð =ñ „\ð=ð ð=˜ð = ð =¨ð =°ð =ð =ð =ñ „\ð=ð ðo˜ð o ð o¨ð o°ð oð oð oñ „\ðoð ð"¨#ð "°%¸¸S¸´/ð "ð "ð "ñ „\ð"ð ð˜Cð  Cð ð ð ñ „\ðð4 ð ð ¨ð ð ð ñ „\ðð
 ðe ð e¨¨h°u¸SÀ#¸X´Ô.GÈÐRWÐX[Ð]`ÐX`ÔRaÔIbÐdlÐmrÐsvÐx{Ðs{Ôm|Ôd}Ð.}Ô(~ð eð eð eñ „\ðeðX *.Ø,0Ø/3ðN(ð N(àðN(ð ðN(ð ð	N(ð
 " #œðN(ð # 5œ/ðN(ð & eœ_ðN(ð 
ˆs�C˜ˆÔ	ðN(ð N(ð N(ð N(ðf *.ðUð UàðUð " #œðUð 
ˆs�C˜ˆÔ	ð	Uð Uð Uð Uð, #Ø)-Ø%)Ø Ø ð(ð (à�sŒmð(ð " #œð(ð ˜E”?ð	(ð
 �SŒMð(ð �SŒMð(ð 
ˆs�C˜ˆÔ	ð(ð (ð (ð (ðX #Ø%)Ø Ø Ø+/ð:#ð :#à�sŒmð:#ð ˜E”?ð:#ð �SŒMð	:#ð
 �SŒMð:#ð $ Cœ=ð:#ð 
ˆs�C˜ˆÔ	ð:#ð :#ð :#ð :#ðx ðXð X¨H°S¬Mð XÀXÈmÔE\ð Xð Xð Xñ „[ðXðx #Ø!Ø#'ð	|ð |à�sŒmð|ð �cŒ]ð|ð ˜C”=ð	|ð
 
ð|ð |ð |ð |ðH  #Ø#ð$ð $àð$ð ð$ð ð	$ð
 ð$ð ð$ð ð$ð 
ˆt�SˆyÔ	ð$ð $ð $ð $ð $ð $r'   r-   )r    rª   r+  rD   r_   Údataclassesr   Útypingr   r   r   râ   rf   rÜ   rÀ  r¿  r   r	   Úsrc.common.win32_windowr)   r*   r+   ri   r-   r&   r'   r(   ú<module>rð     s˜  ððð ð €€€Ø 	€	€	€	Ø Ð Ð Ð Ø €€€Ø !Ð !Ð !Ð !Ð !Ð !Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'ðØ€O€O€OØ€O€O€OØ€N€N€N€NøØð ð ð Ø€HØ€HØ€G€G€Gðøøøð
ØÐÐÐÐÐÐøØð ð ð Ø€E€E€Eðøøøð ð#ð #ð #ð #ð #ñ #ô #ñ „ð#ð(ð ð ð ð ð ð ð ð ð ðhð hð hð hð hñ hô hð hð hð hs   ¤1 ±?¾?ÁA
 Á
AÁA