§
    ÇO»j.C  ã                  ó*  — d Z ddlmZ ddlZddlZddlZddlZddlZddlm	Z	 ddlm
Z
 ddlZdZ ej        ed¬¦  «          ej        d	d¬
¦  «        ZdZdZe
j        ej        _        e
j        e
j        e
j        gej        _        e
j        ej        _        e
j        e
j        e
j        ej         ej        ej        ¦  «        gej        _        ej        ej        _        e
j        e
j        ej        ej        gej        _        e
j        gej         _        dZ!dZ"dZ#dZ$dZ%dZ&dZ'dZ(dZ)e)dz
  Z*dZ+ G d„ dej,        ¦  «        Z-d„ Z.d„ Z/d„ Z0d„ Z1d„ Z2d„ Z3d„ Z4d „ Z5d!„ Z6d"„ Z7d#„ Z8d$„ Z9d%„ Z:d&„ Z;d1d(„Z<d2d*„Z=d+„ Z>d3d-„Z?d.„ Z@d/„ ZAeBd0k    r eA¦   «          dS dS )4züRE Phase 2 - Tim Pointer Base danh sach NPC (tight filters, 2-run validation).
ONLY ReadProcessMemory (VM_READ), never write. Requires Admin.
Usage: python scan_phase2.py [pid]   (no args = scan all vggame)
Output: logs/re_npc_list/phase2_pid<PID>.txt
é    )ÚannotationsN©ÚCounter)ÚwintypeszC:\Projects\JX\logs\re_npc_listT)Úexist_okÚkernel32)Úuse_last_erroré   i   iDìm ifìm iÌfi é   é   i   é   é   é  € ip  c                  ó‚   — e Zd Zdej        fdej        fdej        fdej        fdej        fdej        fdej        fgZdS )	ÚMBIÚBaseAddressÚAllocationBaseÚAllocationProtectÚ
RegionSizeÚStateÚProtectÚTypeN)	Ú__name__Ú
__module__Ú__qualname__ÚctypesÚc_void_pr   ÚDWORDÚc_size_tÚ_fields_© ó    ú1c:\Projects\JX\scripts\re_npc_list\scan_phase2.pyr   r   1   s[   € € € € € à	˜œÐ(Ø	˜6œ?Ð+Ø	˜hœnÐ-Ø	�v”Ð'Ø	�(”.Ð!Ø	�H”NÐ#Ø	�”Ð ð€H€H€Hr"   r   c                 ó~  — t          j        g d¢dd¬¦  «        } g }|                      ¦   «         D ]Œ}d„ |                     d¦  «        D ¦   «         }t	          |¦  «        dk    rX|d                              ¦   «         d	k    r:	 |                     t          |d
         ¦  «        ¦  «         Œ|# t          $ r Y Œˆw xY wŒ�|S )N)Útasklistz/FIzIMAGENAME eq vggame.exez/FOÚCSVz/NHTÚreplace)ÚtextÚerrorsc                ó8   — g | ]}|                      d ¦  «        ‘ŒS )ú")Ústrip)Ú.0Úps     r#   ú
<listcomp>zvggame_pids.<locals>.<listcomp>B   s"   € Ð9Ð9Ð9 !�—’˜‘”Ð9Ð9Ð9r"   z","é   r   z
vggame.exer   )	Ú
subprocessÚcheck_outputÚ
splitlinesÚsplitÚlenÚlowerÚappendÚintÚ
ValueError)ÚoutÚpidsÚlineÚpartss       r#   Úvggame_pidsr>   =   sÕ   € Ý
Ô
!Ð"eÐ"eÐ"eØ'+°Ið?ñ ?ô ?€Cà€DØ—’Ñ Ô ð ð ˆØ9Ð9 t§z¢z°%Ñ'8Ô'8Ð9Ñ9Ô9ˆÝˆu‰:Œ:˜Š?ˆ?˜u QœxŸ~š~Ñ/Ô/°<Ò?Ð?ðØ—’�C  a¤™MœMÑ*Ô*Ð*Ð*øÝð ð ð Ø�ðøøøøà€Ks   Â(B,Â,
B9Â8B9c           	     ó  — t          j        |z  ¦   «         }t          j        d¦  «        }t                               | t          j        |¦  «        ||t          j        |¦  «        ¦  «        sd S t          |¦  «        d |j        …         S ©Nr   )	r   Úc_charr   Úk32ÚReadProcessMemoryr   ÚbyrefÚbytesÚvalue)ÚhÚaddrÚsizeÚbufÚbrs        r#   Úread_memrL   K   sr   € ÝŒ=˜4ÑÑ
"Ô
"€CÝ	Œ˜Ñ	Ô	€BÝ× Ò  ¥F¤O°DÑ$9Ô$9¸3ÀÅfÄlÐSUÑFVÔFVÑWÔWð ØˆtÝ�‰:Œ:�j˜œ�jÔ!Ð!r"   c                óx  — g }d}t          ¦   «         }t          j        |¦  «        }d}||k     �r
t                               | t          j        |¦  «        t          j        |¦  «        |¦  «        dk    rnÄt          |j        pd¦  «        }t          |j	        ¦  «        }|dk    rd}|j
        t          k    o3|j        dz  dk    o%|j        t          z  dk    o|j        t          z  dk    }|r@|j        t           k    r|dk    s*|                     ||t          |j        ¦  «        f¦  «         ||z   }||k     �°
|S )Nr   i  ÿr   éî   r   )r   r   ÚsizeofrB   ÚVirtualQueryExr   rD   r8   r   r   r   Ú
MEM_COMMITr   ÚPAGE_NOACCESSÚ
PAGE_GUARDr   Ú
MEM_MAPPEDr7   )	rG   ÚregionsrH   ÚmbiÚszÚmaxaÚbaserI   Úreadables	            r#   Úenum_regionsr[   S   sC  € Ø€GØ€DÝ
‰%Œ%€CÝ	Œ�sÑ	Ô	€BØ€DØ
�Š+‰+Ý×Ò˜a¥¤°Ñ!6Ô!6½¼ÀSÑ8IÔ8IÈ2ÑNÔNÐRSÒSÐSØÝ�3”?Ð' aÑ(Ô(ˆÝ�3”>Ñ"Ô"ˆØ�1Š9ˆ9ØˆDØ”I¥Ò+ð _°´¸tÑ1CÈÒ0Ið _Øœ¥}Ñ4¸Ò:ð_Ø@CÄÍjÑ@XÐ]^Ò?^ð 	àð 	8˜SœX­Ò3Ð3¸Ð?OÒ8OÐ8OØ�NŠN˜D $­¨C¬H©¬Ð6Ñ7Ô7Ð7Ø�d‰{ˆð �Š+‰+ð €Nr"   c                óv   — t          | ¦  «        dz  }t          j        | d |…         t          j        ¬¦  «        S ©Néüÿÿÿ©Údtype)r5   ÚnpÚ
frombufferÚint32©rJ   Úns     r#   Úas_i32rf   h   s0   € ÝˆC‰Œ�2‰€AÝŒ=˜˜R˜a˜Rœ­¬Ð1Ñ1Ô1Ð1r"   c                óv   — t          | ¦  «        dz  }t          j        | d |…         t          j        ¬¦  «        S r]   )r5   ra   rb   Úuint32rd   s     r#   Úas_u32ri   m   s0   € ÝˆC‰Œ�2‰€AÝŒ=˜˜R˜a˜Rœ­¬	Ð2Ñ2Ô2Ð2r"   c                ó’   — t          | |d¦  «        }|rt          |¦  «        dk     rd S dd l}|                     d|¦  «        d         S )Né   r   ú<i)rL   r5   ÚstructÚunpack)rG   rH   Úbrm   s       r#   Úread_i32rp   q   sP   € Ý��D˜!ÑÔ€AØð •�A‘”˜’
�
ØˆtØ€M€M€MØ�=Š=˜˜qÑ!Ô! !Ô$Ð$r"   c                ó2  ‡‡— t          | |dz
  d¦  «        Š‰rt          ‰¦  «        dk     rdS ddlŠˆˆfd„}| |d¦  «         |d¦  «         |d¦  «         |d	¦  «         |d¦  «         |d
¦  «         |t          ¦  «         |t          d
z   ¦  «        dœ	S )zSDoc khoi S: hp(S-24), s1(S-20), s2(S-4), sta(S), ms(S+4), cx(S+0x270), cy(S+0x274).é(   é¨  Nr   c                ó^   •— ‰                      d‰d| z   d| z   dz   …         ¦  «        d         S )Nrl   rr   rk   r   )rn   )ÚrelÚrawrm   s    €€r#   Úatzread_fields.<locals>.at€   s2   ø€ Ø�}Š}˜T 3 t¨c¡z°$¸±*¸q±.Ð'@Ô#AÑBÔBÀ1ÔEÐEr"   ièÿÿÿiìÿÿÿiðÿÿÿr^   rk   )	ÚSÚhpÚs1Úv100Ús2ÚstaÚmsÚxÚy)rL   r5   rm   Ú	COORD_OFF)rG   rx   rw   rv   rm   s      @@r#   Úread_fieldsr‚   y   sÑ   øø€ å
�1�a˜$‘h Ñ
-Ô
-€CØð •#�c‘(”(˜\Ò)Ð)ØˆtØ€M€M€MðFð Fð Fð Fð Fð Fð ˜"˜"˜S™'œ'¨¨¨C©¬¸"¸"¸S¹'¼'ÈÈÈBÉÌØ�2�a‘5”5   1¡¤¨B¨B­y©M¬MÀÀÅ9ÈqÁ=Ñ@QÔ@QðSð Sð Sr"   c                óJ   — t          | dz  ¦  «        t          |dz  ¦  «        fS )Nç      p@ç      €@)Úround)r   r€   s     r#   Úhudr‡   ‡   s%   € Ý�!�e‘)ÑÔ�e A¨¡IÑ.Ô.Ð/Ð/r"   c                óp  — ddl }t          j                             t          d| › d�¦  «        }	 t          |dd¬¦  «                             ¦   «         }n# t          $ r Y dS w xY w|                     d|¦  «        }|sdS |d	         \  }}}t          |d
¦  «        t          |¦  «        t          |¦  «        fS )z<Lay (S, x, y) cua lan phase1 truoc tu log, de neo/tolerance.r   NÚ
phase1_pidú.txtúutf-8r'   )Úencodingr)   z2=> PlayerS=0x([0-9A-Fa-f]+) coords=\((\d+),(\d+)\)éÿÿÿÿr
   )
ÚreÚosÚpathÚjoinÚLOG_DIRÚopenÚreadÚOSErrorÚfindallr8   )ÚpidrŽ   r.   Útxtr~   Úsr   r€   s           r#   Úload_prev_anchorrš   ‹   sÆ   € à€I€I€IÝ
Œ�Š•WÐ4¨3Ð4Ð4Ð4Ñ5Ô5€AðÝ�1˜w¨yÐ9Ñ9Ô9×>Ò>Ñ@Ô@ˆˆøÝð ð ð Øˆtˆtðøøøà	�ŠÐIÈ3Ñ	OÔ	O€BØð ØˆtØ�Œf�G€A€qˆ!Ý��2‰JŒJ�˜A™œ¥ A¡¤Ð'Ð's   ¯$A Á
A"Á!A"c           
     óœ  — t          | ||¦  «        }|s |d|d›�¦  «         d S  |d|› d|d›dt          |¦  «        › d�¦  «         t          dt          |¦  «        d¦  «        D ]e}|||dz   …         }d	                     d
„ |D ¦   «         ¦  «        }d                     d„ |D ¦   «         ¦  «        }	 |d||z   d›d|› d|	› �¦  «         Œfd S )Nz   dump fail @0xÚXz   --- z @0xz (zB) ---r   é    ú c              3  ó   K  — | ]}|d ›V — Œ	dS )Ú02XNr!   ©r-   ro   s     r#   ú	<genexpr>zdump_compact.<locals>.<genexpr>¢   s&   è è € Ð2Ð2 q˜1˜
˜
Ð2Ð2Ð2Ð2Ð2Ð2r"   Ú c              3  óX   K  — | ]%}d |cxk    rdk     rn nt          |¦  «        ndV — Œ&dS )r�   é   ú.N)Úchrr¡   s     r#   r¢   zdump_compact.<locals>.<genexpr>£   sD   è è € ÐFÐF¸1  a  ¢ ¨#¢    •c˜!‘f”f�f°3ÐFÐFÐFÐFÐFÐFr"   z   Ú08Xz: z  )rL   r5   Úranger‘   )
rG   rH   rI   ÚlogÚlabelrv   ÚoffÚchunkÚhexsÚascs
             r#   Údump_compactr°   š   s!  € Ý
�1�d˜DÑ
!Ô
!€CØð ØˆÐ'˜tÐ'Ð'Ð'Ñ(Ô(Ð(ØˆØ€CÐ7�%Ð7Ð7˜TÐ7Ð7Ð7¥s¨3¡x¤xÐ7Ð7Ð7Ñ8Ô8Ð8Ý�Q�˜C™œ "Ñ%Ô%ð 3ð 3ˆØ�C˜˜b™�LÔ!ˆØ�xŠxÐ2Ð2¨EÐ2Ñ2Ô2Ñ2Ô2ˆØ�gŠgÐFÐFÀÐFÑFÔFÑFÔFˆØˆÐ1�$˜‘*Ð1Ð1Ð1 DÐ1Ð1¨CÐ1Ð1Ñ2Ô2Ð2Ð2ð	3ð 3r"   c              #  ó:  K  — t          | ¦  «        D ]ˆ\  }}}||z   |k    s||k    rŒt          ||¦  «        }t          ||z   |¦  «        }d}||z
  }	||	k     rBt          t          |	|z
  ¦  «        }
t	          | ||z   |
¦  «        }|r	||z   |fV — ||
z  }||	k     °BŒ‰d S r@   )r[   ÚmaxÚminÚCHUNKrL   )rG   ÚloÚhirY   rI   Ú_typÚs0rz   r¬   Útotalre   Údatas               r#   Úiter_windowr»   §   sÖ   è è € Ý(¨™OœOð ð Ñˆˆd�DØ�$‰;˜"ÒÐ ¨¢
 
ØÝ��r‰]Œ]ˆÝ�˜‘˜bÑ!Ô!ˆØˆØ�R‘ˆØ�EŠkˆkÝ•E˜5 3™;Ñ'Ô'ˆAÝ˜A˜r C™x¨Ñ+Ô+ˆDØð %Ø˜3‘h �nÐ$Ð$Ð$Ø�1‰HˆCð �EŠkˆkøðð r"   c                ó  — g d¢}g }|D �]w\  }}t          | ||¦  «        D �]Z\  }}t          |¦  «        }	|	j        }
|
dk     rŒ#t          j        d|
dz
  ¦  «        }|	|         dk    |	|         dk     z  |	|dz            dk    z  |	|dz            dk    z  |	|d	z            dk    z  |	|d
z            dk    z  |	|d
z            dk     z  |	|dz
           dk    z  |	|dz
           dk     z  |	|dz            dk    z  |	|dz            dk     z  |	|dz            |	|dz            k    z  |	|dz            dk     z  }t          j        |¦  «        d         D ]2}t          |¦  «        dz   }|                     ||dz   d
z  z   ¦  «         Œ3�Œ\|r n�Œyg }|dd…         D ]·}t          | |¦  «        }|sŒt          |d         |d         ¦  «        \  }}|d         dk    o|d         dk    o|d         dk    } |d|d›d|d         › d|d         › d|d         › d|d         › d|d         › d||f› d |rd!nd"› �¦  «         |r|                     |¦  «         Œ¸d}|r‰|r‡|D ]„}|d#         |d         k    rpt          |d         |d         z
  ¦  «        t          |d         |d         z
  ¦  «        }}|dk    r|dk    rd$nd%|› d&|› d'�} |d(|d         d›d)|› d'�¦  «         |} nŒ…|€ |r|d         } |d*|d#         d›d+�¦  «         |€ |d,¦  «         |||fS )-zZStrict sig [sig1,100,0,0,sig2,sta,ms] trong cac cua so heap; chon player (uu tien anchor).))i   i   )i   0i   8)i   Xi   hr
   r   é   r   éÈ   éd   r0   é   rk   é€ðúé   i † é   é@ Né<   r   r€   é€>  r}   z   sig S=0xrœ   ú hp=ry   ú sta=ú/r~   ú	 coords=(ú,ú) HUD=rž   ÚVALIDr£   rx   ÚSTABLEz	MOVED(dx=z,dy=ú)z   anchor 0xz trung khop player (z   chon player S=0xz# (khong co anchor hoac anchor lech)z#   [A] KHONG tim duoc player hop le)r»   rf   rI   ra   ÚarangeÚnonzeror8   r7   r‚   r‡   Úabs)rG   rª   ÚanchorÚrangesÚfoundrµ   r¶   rY   rº   Úare   ÚiÚmÚk0ÚkÚvalidrx   ÚfÚhxÚhyÚokÚplayerÚdxÚdyÚtags                            r#   Úpass_Arä   ·   sh  € à[Ð[Ð[€FØ€EØð ñ ‰ˆˆRÝ% a¨¨RÑ0Ô0ð 	1ñ 	1‰JˆD�$Ý�t‘”ˆAØ”ˆAØ�2ŠvˆvØÝ”	˜!˜Q ™UÑ#Ô#ˆAØ�A”$˜!’)  !¤ s¢
Ñ+¨q°°Q±¬x¸3ªÑ?À1ÀQÈÁUÄ8ÈqÂ=ÑQØ�A˜‘E”(˜a’-ñ!Ø$% a¨!¡e¤H°¢Mñ3Ø67¸¸A¹´hÀ²nñFà�A˜‘E”(˜Q’,ñ à#$ Q¨¡U¤8¨jÒ#8ñ:à=>¸qÀ1¹u¼XÈº\ñKð �A˜‘E”(˜WÒ$ñ&ð *+¨1¨q©5¬°Q°q¸1±u´XÒ)=ñ?ð CDÀAÈÁEÄ(ÈWÒBTñVˆAõ ”j ‘m”m AÔ&ð 1ð 1�Ý˜‘G”G˜a‘K�Ø—’˜T Q¨¡U¨a¡KÑ/Ñ0Ô0Ð0Ð0ñ1ð ð 	ØˆEñ	à€EØ�3�B�3ŒZð ð ˆÝ˜˜1ÑÔˆØð 	ØÝ�Q�s”V˜Q˜sœVÑ$Ô$‰ˆˆBØˆsŒV�uŠ_ÐA  3¤¨5¢ÐA°Q°u´XÀ²\ˆØˆð  F˜!ð  Fð  Fð  F 1 T¤7ð  Fð  F°°5´ð  Fð  F¸A¸d¼Gð  Fð  FÈaÐPSÌfð  Fð  FÐWXÐY\ÔW]ð  Fð  FÐegÐikÐdlð  Fð  FÐy{ð  oDÐnuÐnuð  BDð  Fð  Fñ  	Gô  	Gð  	GØð 	Ø�LŠL˜‰OŒOˆOøØ€FØð �%ð Øð 	ð 	ˆAØ�Œv˜ œÒ"Ð"Ý˜Q˜sœV f¨Q¤iÑ/Ñ0Ô0µ#°a¸´f¸vÀa¼yÑ6HÑ2IÔ2I�B�Ø"$¨¢( (¨r°Rªx¨x�h�hÐ=VÈÐ=VÐ=VÐQSÐ=VÐ=VÐ=V�Ø�ÐJ 6¨!¤9ÐJÐJÐJÀCÐJÐJÐJÑKÔKÐKØ�Ø�ð #ð €~˜%€~Ø�q”ˆØˆÐT &¨¤+ÐTÐTÐTÐTÑUÔUÐUØ€~ØˆÐ1Ñ2Ô2Ð2Ø�%˜ÐÐr"   c                óØ	  — g }t          | ¦  «        D �]§\  }}}d}||k     �r—t          t          ||z
  ¦  «        }t          d|dz
  ¦  «        }	t          |||z   dz   ¦  «        }
t	          | ||	z   |
|	z
  ¦  «        }|�r0t          |¦  «        }|j        }||	z
  dz  }t          d|¦  «        }t          |dz
  ||dz  z   ¦  «        }||k    �rât          j        ||¦  «        }||dz
           dk    ||dz
           dk     z  ||dz
           dk    z  ||dz
           d	k     z  ||d
z
           dk    z  ||d
z
           d	k     z  ||         dk    z  ||         dk     z  ||d
z            ||         k    z  ||d
z            dk     z  ||dz            dk    z  ||dz            dk     z  ||dz            dk    z  ||dz            dk     z  }t          j	        |¦  «        d         D ]Ó}t          |¦  «        |z   }||	z   |dz  z   }|                     |t          ||dz
           ¦  «        t          ||dz
           ¦  «        t          ||d
z
           ¦  «        t          ||         ¦  «        t          ||d
z            ¦  «        t          ||dz            ¦  «        t          ||dz            ¦  «        f¦  «         ŒÔ||z  }||k     �°—�Œ©|                     ¦   «          g }|D ]5}|r|d         |d         d         z
  dk     rŒ |                     |¦  «         Œ6 |dt          |¦  «        › dt          |¦  «        › d�¦  «         |d         |d         }}g }|D ]¸}t          t          |d         dz  ¦  «        t          |dz  ¦  «        z
  ¦  «        }t          t          |d         dz  ¦  «        t          |dz  ¦  «        z
  ¦  «        }|d         dz  dk    }|d         dz  dk    }|                     |dk    o
|dk    o|o| |||f¦  «         Œ¹d„ |D ¦   «         }|                     d„ ¬ ¦  «          |dt          |¦  «        › d!�¦  «         |d"d#…         D ]”\  } }}} |d$|d         d%›d&|d
         › d'|d(         › d)|d*         › d+|d         › d,|d         › d-|d         › d)|d         › d.t          |d         dz  ¦  «        › d)t          |d         dz  ¦  «        › d/|› d)|› d�¦  «         Œ•d0„ |D ¦   «         S )1zlQuet ung vien object: property + coords hop le, x>=16000, gan player. Tra ve cands sap xep theo khoang cach.r   i   rk   rÃ   éž   rÁ   rÂ   iüÿÿiè  r   rÄ   i@B éœ   rÆ   r   é�   r�   é@   z  [B] z ung vien (dedup tu rÏ   r   r€   r„   é   r…   r   i   é    c                ó"   — g | ]}|d          ¯
|‘ŒS ©r   r!   ©r-   r™   s     r#   r/   zpass_B.<locals>.<listcomp>  s!   € Ð&Ð&Ð&�!  1¤Ð&ˆAÐ&Ð&Ð&r"   c                ó0   — | d         dz  | d         dz  z   S )Nr0   rÀ   r!   )Úts    r#   ú<lambda>zpass_B.<locals>.<lambda>  s   € ˜Q˜qœT Q™Y¨¨1¬°©Ñ2€ r"   )Úkeyz4 ung vien trong ban kinh 160 HUD (loai snap 256/512)Né   z	     S=0xrœ   rÇ   z sig=(r0   rË   rÀ   z) sta=rÉ   rÊ   z) HUD=(z) d=(c                ó   — g | ]	\  }}}}|‘Œ
S r!   r!   )r-   Ú_kÚcÚ_d1Ú_d2s        r#   r/   zpass_B.<locals>.<listcomp>  s    € Ð*Ð*Ð*‘/�"�a˜˜cˆAÐ*Ð*Ð*r"   )r[   r³   r´   r²   rL   rf   rI   ra   rÐ   rÑ   r8   r7   Úsortr5   rÒ   r†   )!rG   rª   rà   ÚcandsrY   rI   r·   r¬   re   Úm0Úm1rº   rÖ   ÚcntÚoff_inÚj0Új1ÚjrØ   rÙ   rÚ   rx   r:   rö   ÚpxÚpyÚscoredÚdxhudÚdyhudÚsnapxÚsnapyÚnearÚkeeps!                                    r#   Úpass_Br  æ   s  € à€EÝ(¨™OœOð ñ Ñˆˆd�DØˆØ�DŠj‰jÝ•E˜4 #™:Ñ&Ô&ˆAÝ�Q˜˜e™Ñ$Ô$ˆBÝ�T˜3 ™7 U™?Ñ+Ô+ˆBÝ˜A˜t b™y¨"¨r©'Ñ2Ô2ˆDØñ cÝ˜4‘L”L�Ø”f�Ø ™( q™�Ý˜˜F‘^”^�Ý˜˜s™ F¨Q°!©V¡OÑ4Ô4�Ø˜’7‘7Ýœ	 " bÑ)Ô)�AØ˜A ™Eœ( Qš,¨1¨Q°©U¬8°jÒ+@ÑAØ˜A ™Eœ( UÒ*ñ,Ø/0°°Q±¬x¸$ªñ@à˜A ™Eœ( UÒ*ñ,à/0°°Q±¬x¸$ªñ@ð ˜Aœ$ !š)ñ%ð )*¨!¬¨wªñ8ð <=¸QÀ¹U¼8ÀqÈÄtÒ;KñMð QRÐRSÐVWÑRWÔPXÐ[dÒPdñfð ˜A ™Gœ*¨Ò-ñ	/ð 34°A¸±G´*¸xÒ2Gñ	Ið
 ˜A ™Gœ*¨Ò-ñ/ð
 34°A¸±G´*¸xÒ2GñI�Aõ !œj¨™mœm¨AÔ.ð cð c˜Ý ™GœG b™L˜Ø  2™I¨¨A©Ñ-˜ØŸš a­¨Q¨q°1©u¬X©¬½¸A¸aÀ!¹e¼H¹¼ÅsÈ1ÈQÐQRÉUÌ8Á}Ä}Ý&)¨!¨A¬$¡i¤iµ°Q°q¸1±u´X±´ÅÀAÀaÈ#ÁgÄJÁÄÕQTÐUVÐWXÐ[^ÑW^ÔU_ÑQ`ÔQ`ð&bñ cô cð cð cà�1‰HˆCð1 �DŠj‰jùð2 
‡J‚J�L„L€LØ
€CØð ð ˆØð 	�1�Q”4˜#˜bœ' !œ*Ñ$ tÒ+Ð+ØØ�
Š
�1‰ŒˆˆØ€CÐ<•�S‘”Ð<Ð<­s°5©z¬zÐ<Ð<Ð<Ñ=Ô=Ð=Ø�CŒ[˜& œ+ˆ€BØ€FØð bð bˆÝ•E˜!˜Aœ$ ™,Ñ'Ô'­%°°U±
Ñ*;Ô*;Ñ;Ñ<Ô<ˆÝ•E˜!˜Aœ$ ™,Ñ'Ô'­%°°U±
Ñ*;Ô*;Ñ;Ñ<Ô<ˆØ�!”�s‘
˜a’ˆØ�!”�s‘
˜a’ˆØ�Š�u ’|ÐN¨°ªÐN¸e¸oÈÐ9NÐPQÐSXÐZ_Ð`ÑaÔaÐaÐaØ&Ð&�vÐ&Ñ&Ô&€DØ‡I‚IÐ3Ð3€IÑ4Ô4Ð4Ø€CÐP•�T‘”ÐPÐPÐPÑQÔQÐQØ!% c r c¤ð eð eÑˆˆa�˜Øˆð d˜˜!œÐQð dð d A a¤Dð dð d°°!´ð dð d°q¸´tð dð dÀ1ÀQÄ4ð dð dÈ!ÈAÌ$ð dð dØ˜”tðdð dØ œdðdð dÝ+0°°1´°c±©?¬?ðdð dÝ=BÀ1ÀQÄ4ÈÁ8¹_¼_ðdð dØSXðdð dØ[`ðdð dð dñ 	eô 	eð 	eð 	eà*Ð* TÐ*Ñ*Ô*Ð*r"   c                ó
  ‡— t          ˆfd„| D ¦   «         ¦  «        }g }|D ]a\  }}|rC||d         d         dz   k    r.|d         d         t          |d         d         |¦  «        f|d<   ŒJ|                     ||f¦  «         Œb|S )Nc              3  óH   •K  — | ]}t          d |‰z
  ¦  «        |‰z   fV — ŒdS ©r   N)r²   )r-   rð   Úradiuss     €r#   r¢   z#merged_intervals.<locals>.<genexpr>  s:   øè è € ÐDÐD°q•3�q˜!˜f™*Ñ%Ô% q¨6¡zÐ2ÐDÐDÐDÐDÐDÐDr"   r�   r   rk   r   )Úsortedr²   r7   )Útargetsr  ÚintsÚmergedr™   Úes    `    r#   Úmerged_intervalsr    s¤   ø€ ÝÐDÐDÐDÐD¸GÐDÑDÔDÑDÔD€DØ€FØð "ð "‰ˆˆ1Øð 	"�a˜6 "œ: aœ=¨1Ñ,Ò,Ð,Ø  œ* Qœ-­¨V°B¬Z¸¬]¸AÑ)>Ô)>Ð?ˆF�2‰JˆJà�MŠM˜1˜a˜&Ñ!Ô!Ð!Ð!Ø€Mr"   Fc           	     óN  — t          ||¦  «        }|sg S t          j        d„ |D ¦   «         t          j        ¬¦  «        }t          j        d„ |D ¦   «         t          j        ¬¦  «        }g }t	          | ¦  «        D �]\  }}	}
|r|dk    rŒd}||	k     rýt          t          |	|z
  ¦  «        }t          | ||z   |¦  «        }|rÄt          |¦  «        }t          j	        ||d¬¦  «        dz
  }|dk    }| 
                    ¦   «         r�t          j        |¦  «        d         }||         }||         ||         k    }||         D ]D}t          |¦  «        }|                     ||z   |d	z  z   t          ||         ¦  «        f¦  «         ŒE||z  }||	k     °ý�Œ|                     ¦   «          |S )
Nc                ó   — g | ]\  }}|‘ŒS r!   r!   )r-   r™   Ú_s      r#   r/   z pointer_hits.<locals>.<listcomp>+  s   € Ð,Ð,Ð,™T˜Q �qÐ,Ð,Ð,r"   r_   c                ó   — g | ]\  }}|‘ŒS r!   r!   )r-   r  r  s      r#   r/   z pointer_hits.<locals>.<listcomp>,  s   € Ð*Ð*Ð*™4˜1˜a�QÐ*Ð*Ð*r"   é   r   Úright)Úsider   rk   )r  ra   Úarrayrh   r[   r³   r´   rL   ri   ÚsearchsortedÚanyrÑ   r8   r7   rù   )rG   r  r  Ústatic_onlyr  ÚstartsÚendsÚhitsrY   rI   r·   r¬   re   rº   rÖ   ÚposÚvmaskÚidxÚpvrß   rÚ   s                        r#   Úpointer_hitsr(  '  sÆ  € Ý˜g vÑ.Ô.€FØð Øˆ	ÝŒXÐ,Ð, VÐ,Ñ,Ô,µB´IÐ>Ñ>Ô>€FÝŒ8Ð*Ð* 6Ð*Ñ*Ô*µ"´)Ð<Ñ<Ô<€DØ€DÝ(¨™OœOð ñ Ñˆˆd�DØð 	˜4 :Ò-Ð-ØØˆØ�DŠjˆjÝ•E˜4 #™:Ñ&Ô&ˆAÝ˜A˜t c™z¨1Ñ-Ô-ˆDØð 
EÝ˜4‘L”L�Ý”o f¨a°gÐ>Ñ>Ô>ÀÑB�Ø˜qš�Ø—9’9‘;”;ð EÝœ* UÑ+Ô+¨AÔ.�CØ˜Sœ�BØ˜3œ 4¨¤8Ò+�BØ  œWð Eð E˜Ý ™FœF˜ØŸš T¨C¡Z°!°a±%Ñ%7½¸Q¸q¼T¹¼Ð$CÑDÔDÐDÐDØ�1‰HˆCð �DŠjˆjùð 	‡I‚I�K„K€KØ€Kr"   rÀ   c                ó$  — g }g }| D ]`}|r1|d         |d         d         z
  dk    r|                      |¦  «         Œ5t          |¦  «        |k    r|                      |¦  «         |g}Œat          |¦  «        |k    r|                      |¦  «         |S )Nr   r�   rk   )r7   r5   )r#  Úmin_lenÚrunsÚcurÚhhs        r#   Ú	find_runsr.  E  s£   € Ø€DØ
€CØð ð ˆØð 	�2�a”5˜3˜rœ7 1œ:Ñ%¨Ò*Ð*Ø�JŠJ�r‰NŒNˆNˆNå�3‰xŒx˜7Ò"Ð"Ø—’˜CÑ Ô Ð Ø�$ˆCˆCÝ
ˆ3�x„x�7ÒÐØ�Š�CÑÔÐØ€Kr"   c                ó  — ddl m} t          | ¦  «        }t          |¦  «        dk     r |d|› d�¦  «         d S  |d„ t	          |dd …         |¦  «        D ¦   «         ¦  «        } |d|› d|                     d	¦  «        › �¦  «         d S )
Nr   r   r0   z   [stride/z] it du lieuc              3  ó&   K  — | ]\  }}||z
  V — Œd S ©Nr!   )r-   ro   rö   s      r#   r¢   z&slope_stride_report.<locals>.<genexpr>Z  s*   è è € Ð/Ð/™˜˜Aˆq�1‰uÐ/Ð/Ð/Ð/Ð/Ð/r"   r   z] top diffs: r½   )Úcollectionsr   r  r5   ÚzipÚmost_common)Úaddrsrª   r«   Ú_CrÖ   Údiffss         r#   Úslope_stride_reportr8  T  s²   € Ø)Ð)Ð)Ð)Ð)Ð)Ýˆu‰Œ€AÝ
ˆ1�v„v�‚z€zØˆÐ-˜%Ð-Ð-Ð-Ñ.Ô.Ð.ØˆØˆBÐ/Ð/¥ Q q r r¤U¨A¡¤Ð/Ñ/Ô/Ñ/Ô/€EØ€CÐ@�eÐ@Ð@¨%×*;Ò*;¸AÑ*>Ô*>Ð@Ð@ÑAÔAÐAÐAÐAr"   rÃ   c                ó   — t          j        |¦  «         g }|D �]7}|d         }t          | |dz
  d¦  «        }|rt          |¦  «        dk     rŒ5dd l}|                     d|dd…         ¦  «        d         }	|                     d|dd…         ¦  «        d         }
|                     d|dt          z   dt          z   dz   …         ¦  «        d         }|                     d|dt          z   dz   dt          z   d	z   …         ¦  «        d         }|	|d
         k    r9||d         k    r-||d         k    r!|
|d         k    r|                     |¦  «         �Œ9 |dt          |¦  «        › dt          |¦  «        › d�¦  «         |S )Nr   rr   rs   rl   r
   ró   é,   rk   r½   r   rÃ   rê   z	  [stab] rÉ   z on dinh)ÚtimeÚsleeprL   r5   rm   rn   r�   r7   )rG   rú   rª   Úpause_sÚstablerö   rx   rv   rm   ry   ÚstÚcxÚcys                r#   Úverify_stabilityrB  ^  sŒ  € Ý„JˆwÑÔÐØ€FØð ñ ˆØˆaŒDˆÝ�q˜!˜d™( LÑ1Ô1ˆØð 	•c˜#‘h”h Ò-Ð-ØØˆˆˆØ�]Š]˜4  Y¨yÐ%8Ô!9Ñ:Ô:¸1Ô=ˆØ�]Š]˜4  T¨( ]Ô!3Ñ4Ô4°QÔ7ˆØ�]Š]˜4  T­IÑ%5°d½YÑ6FÈÑ6JÐ%JÔ!KÑLÔLÈQÔOˆØ�]Š]˜4  T­IÑ%5¸Ñ%9¸$ÅÑ:JÈQÑ:NÐ%NÔ!OÑPÔPÐQRÔSˆØ��1”Š:ˆ:˜"  !¤š*˜*¨¨q°¬tª¨¸¸aÀ¼dº
¸
Ø�MŠM˜!ÑÔÐùØ€CÐ6•C˜‘K”KÐ6Ð6¥# e¡*¤*Ð6Ð6Ð6Ñ7Ô7Ð7Ø€Mr"   c                ó†   — g }t          | ¦  «        D ].\  }}}|dk     r"|t          k    r|                     ||f¦  «         Œ/|S )Nr  )r[   Ú	MEM_IMAGEr7   )rG   ÚmodsrY   rI   Útyps        r#   Úmodule_rangesrG  q  sS   € Ø€DÝ'¨™?œ?ð &ð &‰ˆˆd�CØ�*ÒÐ ­	Ò!1Ð!1Ø�KŠK˜˜t˜Ñ%Ô%Ð%øØ€Kr"   c                 óT  ‡%‡&‡'— d„ t           j        dd …         D ¦   «         pd Š'ˆ'fd„t          ¦   «         D ¦   «         } t          d| › �d¬¦  «         | D �]Á}t          j                             t          d|› d�¦  «        }g }||fd	„} |d
|› d�¦  «         t           	                    t          t          z  d|¦  «        }|s  |dt          j        ¦   «         › �¦  «         ŒŽ	 t          |t          d¦  «        }t          |t           d¦  «        }t          |t"          d¦  «        }|r0|                     dd¦  «        d                              dd¦  «        nd}	 |d|	› d|rt(                               |d¦  «        nd› d|r#t(                               |d d…         d¦  «        nd› �¦  «         t-          |¦  «        }
|
r( |d|
d         d›d|
d         › d|
d         › d �¦  «         t/          |||
¦  «        \  }}}|€,	 t                               |¦  «          |d!|› d"�¦  «         �Œ×|d#         } |d$|d›d%|d&         › d'|d(         › d)|d*         › d|d+         › d|d,         › d-t3          |d+         |d,         ¦  «        › �¦  «         t5          ||d.z
  d/|d0|d›�¦  «         t7          |||¦  «        }|s7 |d1¦  «         	 t                               |¦  «          |d!|› d"�¦  «         �Œœt9          d2„ |D ¦   «         |d3¦  «         t;          ||d d4…         |¦  «        }t=          |¦  «        dk    r|n	|d d4…         }t=          |¦  «        dk     r |d5¦  «         n |d6t=          |¦  «        › d7�¦  «         t?          tA          d8„ |D ¦   «         ¦  «        |hz  ¦  «        }d9„ tC          ||d:¦  «        D ¦   «         }dd l"} |d;t=          |¦  «        › �¦  «         tG          |d<¬=¦  «        } |d>t=          |¦  «        › �¦  «         tI          |¦  «        tK          |¦  «        cŠ&Š%g }|D ]d}d?„ |D ¦   «         }tM          ˆ%ˆ&fd@„|D ¦   «         ¦  «        }| '                    |t=          |¦  «        |d         d         |d dA…         f¦  «         Œe| (                    d¬B¦  «         |d dC…         D ])\  }}}} |dD|d›dE|› dF|› dGdH„ |D ¦   «         › �¦  «         Œ*tS          |¦  «        } |dIdJ„ |D ¦   «         d dA…         › �¦  «         dK„ |d dL…         D ¦   «         }|rRtC          ||d.d¬M¦  «        }  |dNt=          | ¦  «        › dO�¦  «         | d dP…         D ]\  }!}" |dQ|!d›dR|"d›�¦  «         ŒnF# tT          $ r9}#dd l+}$ |dS|#› �¦  «          ||$ ,                    ¦   «         ¦  «         Y d }#~#nd }#~#ww xY wt                               |¦  «          |d!|› d"�¦  «         �Œ•# t                               |¦  «          |d!|› d"�¦  «         w xY wt          dTd¬¦  «         d S )UNc                ó,   — g | ]}t          |¦  «        ‘ŒS r!   )r8   )r-   r   s     r#   r/   zmain.<locals>.<listcomp>z  s   € Ð)Ð)Ð)�q�C�‰FŒFÐ)Ð)Ð)r"   r   c                ó    •— g | ]
}‰�|‰v ¯|‘ŒS r1  r!   )r-   r.   Úonlys     €r#   r/   zmain.<locals>.<listcomp>{  s"   ø€ ÐBÐBÐB�!¨¨¸¸T¸	¸	ˆA¸	¸	¸	r"   zvggame PIDs: T©ÚflushÚ
phase2_pidrŠ   c                ó,  — dt          j        d¦  «        › d| › �}t          |d¬¦  «         |                     |¦  «         t	          |dd¬¦  «        5 }|                     d	                     |¦  «        ¦  «         d d d ¦  «         d S # 1 swxY w Y   d S )
Nú[z%H:%M:%Sz] TrL  Úwr‹   )rŒ   ú
)r;  ÚstrftimeÚprintr7   r“   Úwriter‘   )ÚmsgÚ_linesÚ_pathr™   rÜ   s        r#   rª   zmain.<locals>.log�  sÚ   € Ø6•D”M *Ñ-Ô-Ð6Ð6°Ð6Ð6ˆAÝ�!˜4Ð Ñ Ô Ð Ø�MŠM˜!ÑÔÐÝ�e˜S¨7Ð3Ñ3Ô3ð +°qØ—’˜Ÿ	š	 &Ñ)Ô)Ñ*Ô*Ð*ð+ð +ð +ñ +ô +ð +ð +ð +ð +ð +ð +ð +øøøð +ð +ð +ð +ð +ð +s   Á)B	Â	BÂBz===== PHASE2 PID z =====FzOpenProcess FAILED err=r�   rk   r½   ó    r   Úlatin1r'   ú?zname='z' level=Úlittler�   z mapId=zanchor lan truoc: S=0xrœ   rÊ   rË   r0   rÏ   z
===== PID z done =====rx   z=> Player S=0xrÇ   ry   rÈ   r}   rÉ   r~   r   r€   rÌ   ré   i€  z
playerS=0xz  khong co ung vien gan -> dungc                ó   — g | ]
}|d          ‘ŒS rí   r!   ©r-   rö   s     r#   r/   zmain.<locals>.<listcomp>¢  s   € Ð 4Ð 4Ð 4¨!  1¤Ð 4Ð 4Ð 4r"   z
near-candsrÅ   z?  stab qua it -> dung top near (GHI CHU: chua xac minh on dinh)z  dung z ung vien on dinhc              3  ó&   K  — | ]}|d          V — ŒdS r  r!   r^  s     r#   r¢   zmain.<locals>.<genexpr>©  s&   è è € Ð1Ð1 q˜a œdÐ1Ð1Ð1Ð1Ð1Ð1r"   c                ó0   — g | ]}|d          dz  dk    ¯|‘ŒS )r   rÀ   r   r!   )r-   rð   s     r#   r/   zmain.<locals>.<listcomp>ª  s%   € ÐOÐOÐO˜!ÀÀ!ÄÀqÁÈQº¸�A¸¸¸r"   é   u     [C] refs (aligned, Â±0x800): rÀ   )r*  z  [C] runs >=3: c                ó   — g | ]\  }}|‘ŒS r!   r!   )r-   r  Úvs      r#   r/   zmain.<locals>.<listcomp>²  s   € Ð*Ð*Ð*™d˜a ˜Ð*Ð*Ð*r"   c              3  óH   •K  — | ]}‰d z
  |cxk    r	‰d z   k    ¯n ndV — ŒdS )ra  r   Nr!   )r-   rc  ÚcmaxÚcmins     €€r#   r¢   zmain.<locals>.<genexpr>³  sL   øè è € ÐMÐM˜a¨4°%©<¸1Ð+LÐ+LÒ+LÐ+LÀÀuÁÒ+LÐ+LÐ+LÐ+LÐ+L˜Ð+LÐ+LÐ+LÐ+LÐMÐMr"   é   )Úreverseé   z     RUN base=0xz len=z	 inrange=z vals=c                ó,   — g | ]}t          |¦  «        ‘ŒS r!   ©Úhex)r-   rc  s     r#   r/   zmain.<locals>.<listcomp>¸  s   € Ð4Ð4Ð4¨�S ™VœVÐ4Ð4Ð4r"   z   [mods] MEM_IMAGE <0x10000000: c                óP   — g | ]#\  }}t          |¦  «        t          |¦  «        f‘Œ$S r!   rk  )r-   ro   r™   s      r#   r/   zmain.<locals>.<listcomp>º  s-   € Ð3VÐ3VÐ3VÉÈÈAµS¸±V´V½SÀ¹V¼VÐ4DÐ3VÐ3VÐ3Vr"   c                ó6   — g | ]}|d          d k    ¯|d         ‘ŒS )r   r0   r!   rî   s     r#   r/   zmain.<locals>.<listcomp>»  s%   € Ð?Ð?Ð? !°a¸´d¸Q²h°h˜˜1œ°h°h°hr"   é
   )r   z!  [D] static refs toi run bases: z (PENDING: chua verify)ró   z     STATIC? 0xz -> 0xzEXCEPTION: zALL DONE)-ÚsysÚargvr>   rT  r�   r�   r‘   r’   rB   ÚOpenProcessÚPROCESS_QUERY_INFORMATIONÚPROCESS_VM_READr   Úget_last_errorrL   ÚSTATIC_NAMEÚSTATIC_LEVELÚ
STATIC_MAPr4   Údecoder8   Ú
from_bytesrš   rä   ÚCloseHandler‡   r°   r  r8  rB  r5   r  Úsetr(  Úbisectr.  r³   r²   Úsumr7   rù   rG  Ú	ExceptionÚ	tracebackÚ
format_exc)(r;   r—   Úlog_pathÚlinesrª   rG   ÚnmBÚlvBÚmpBÚnamerÓ   rÕ   rÛ   rà   ÚS_pr	  r>  r
  Útsetr#  r}  r+  r  ÚrunÚvalsrØ   ÚmmÚlnÚ	base_addrÚsamplerE  Ú	top_basesÚhitsDÚhitÚvalÚexr€  re  rf  rK  s(                                        @@@r#   Úmainr•  y  s4  øøø€ Ø)Ð)�CœH Q R RœLÐ)Ñ)Ô)Ð1¨T€DØBÐBÐBÐB•{‘}”}ÐBÑBÔB€DÝ	Ð
 ˜$Ð
 Ð
 ¨Ð-Ñ-Ô-Ð-Øð J/ñ J/ˆÝ”7—<’<¥Ð)?°cÐ)?Ð)?Ð)?Ñ@Ô@ˆØˆà!¨ð 	+ð 	+ð 	+ð 	+ð 	ˆÐ+ Ð+Ð+Ð+Ñ,Ô,Ð,Ý�OŠOÕ5½ÑGÈÐPSÑTÔTˆØð 	ØˆCÐC­&Ô*?Ñ*AÔ*AÐCÐCÑDÔDÐDØð:	/Ý˜1�k¨2Ñ.Ô.ˆCÝ˜1�l¨AÑ.Ô.ˆCÝ˜1�j¨!Ñ,Ô,ˆCØKNÐW�3—9’9˜W aÑ(Ô(¨Ô+×2Ò2°8¸YÑGÔGÐGÐTWˆDØˆCð K˜ð Kð KÀsÐ'R¥s§~¢~°c¸(Ñ'CÔ'CÐ'CÐPRð Kð KØ=@ÐH�Ÿš¨¨B¨Q¨B¬°Ñ9Ô9Ð9ÀbðKð Kñ Lô Lð Lå% cÑ*Ô*ˆFØð ]Ø�Ð[¨V°A¬YÐ[Ð[Ð[À6È!Ä9Ð[Ð[ÈvÐVWÌyÐ[Ð[Ð[Ñ\Ô\Ð\Ý#)¨!¨S°&Ñ#9Ô#9Ñ ˆE�5˜&Øˆ~ØõZ �OŠO˜AÑÔÐØˆCÐ-˜SÐ-Ð-Ð-Ñ.Ô.Ð.Ñ.ð[ ˜”+ˆCØˆCð \ Ð^ð \ð \¨F°4¬Lð \ð \¸vÀe¼}ð \ð \ÈvÐVZÌ|ð \ð \Ø! #œ;ð\ð \Ø)/°¬ð\ð \Ý<?ÀÀsÄÈVÐTWÌ[Ñ<YÔ<Yð\ð \ñ ]ô ]ð ]å˜˜C $™J¨¨sÐ4HÀÐ4HÐ4HÐ4HÑIÔIÐIÝ˜!˜S &Ñ)Ô)ˆDØð Ø�Ð5Ñ6Ô6Ð6ØõJ �OŠO˜AÑÔÐØˆCÐ-˜SÐ-Ð-Ð-Ñ.Ô.Ð.Ñ.õK  Ð 4Ð 4¨tÐ 4Ñ 4Ô 4°c¸<ÑHÔHÐHÝ% a¨¨c¨r¨c¬°CÑ8Ô8ˆFÝ  ™[œ[¨AÒ-Ð-�6�6°4¸¸¸´9ˆDÝ�6‰{Œ{˜QŠˆØ�ÐUÑVÔVÐVÐVà�Ð:�c $™iœiÐ:Ð:Ð:Ñ;Ô;Ð;Ý�#Ð1Ð1¨DÐ1Ñ1Ô1Ñ1Ô1°S°EÑ9Ñ:Ô:ˆDØOÐO�|¨A¨t°UÑ;Ô;ÐOÑOÔOˆDØˆMˆMˆMØˆCÐ=µ#°d±)´)Ð=Ð=Ñ>Ô>Ð>Ý˜T¨1Ð-Ñ-Ô-ˆDØˆCÐ.¥3 t¡9¤9Ð.Ð.Ñ/Ô/Ð/Ý˜T™œ¥C¨¡I¤IˆJˆD�$ØˆFØð Cð C�Ø*Ð* cÐ*Ñ*Ô*�ÝÐMÐMÐMÐMÐM 4ÐMÑMÔMÑMÔM�Ø—’˜q¥# c¡(¤(¨C°¬F°1¬I°t¸C¸R¸C´yÐAÑBÔBÐBÐBØ�KŠK ˆKÑ%Ô%Ð%Ø-3°C°R°C¬[ð 8ð 8Ñ)��B˜	 6Ø�ð 7 yÐKð 7ð 7¸ð 7ð 7Àbð 7ð 7Ø4Ð4¨VÐ4Ñ4Ô4ð7ð 7ñ 8ô 8ð 8ð 8å  Ñ#Ô#ˆDØˆCÐ]Ð3VÐ3VÐQUÐ3VÑ3VÔ3VÐWZÐXZÐWZÔ3[Ð]Ð]Ñ^Ô^Ð^Ø?Ð? v¨c¨r¨c¤{Ð?Ñ?Ô?ˆIØð @Ý$ Q¨	°4ÀTÐJÑJÔJ�Ø�Ð[½¸E¹
¼
Ð[Ð[Ð[Ñ\Ô\Ð\Ø % c r c¤
ð @ð @‘H�C˜Ø�CÐ>¨#Ð>Ð>Ð>°sÐ>Ð>Ð>Ñ?Ô?Ð?Ð?øøÝð 	(ð 	(ð 	(ØÐÐÐØˆCÐ"˜bÐ"Ð"Ñ#Ô#Ð#ØˆC�	×$Ò$Ñ&Ô&Ñ'Ô'Ð'Ð'Ð'Ð'Ð'Ð'øøøøð	(øøøõ
 �OŠO˜AÑÔÐØˆCÐ-˜SÐ-Ð-Ð-Ñ.Ô.Ð.Ñ.øõ �OŠO˜AÑÔÐØˆCÐ-˜SÐ-Ð-Ð-Ñ.Ô.Ð.Ð.øøøÝ	ˆ*˜DÐ!Ñ!Ô!Ð!Ð!Ð!s?   Ã#DU8È+BU8Ë0JU8Õ7W)Õ8
V;Ö/V6Ö1W)Ö6V;Ö;W)×)+XÚ__main__)F)rÀ   )rÃ   )CÚ__doc__Ú
__future__r   r   r�   r1   rp  r;  r2  r   r   Únumpyra   r’   ÚmakedirsÚWinDLLrB   rt  rs  ÚHANDLErr  Úrestyper   ÚBOOLÚargtypesrC   ÚLPCVOIDÚLPVOIDr   ÚPOINTERrP   r   r{  rv  rw  rx  rQ   rD  rT   rS   rR   r´   ÚSTEPr�   Ú	Structurer   r>   rL   r[   rf   ri   rp   r‚   r‡   rš   r°   r»   rä   r  r  r(  r.  r8  rB  rG  r•  r   r!   r"   r#   ú<module>r¥     s/  ððð ð
 #Ð "Ð "Ð "Ð "Ð "à €€€Ø 	€	€	€	Ø Ð Ð Ð Ø 
€
€
€
Ø €€€Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð à Ð Ð Ð à
,€Ø €„ˆG˜dÐ #Ñ #Ô #Ð #à€f„m�J¨tÐ4Ñ4Ô4€Ø€Ø"Ð à"œ/€„Ô Ø$œN¨H¬M¸8¼>ÐJ€„Ô Ø (¤€Ô Ô Ø"*¤/°8Ô3CÀXÄ_Ø"(¤/°>°6´>À&Ä/Ñ3RÔ3Rð"T€Ô Ô à#œ_€Ô Ô Ø'œ°Ô0@À&Ä/ÐSYÔSbÐc€Ô Ô Ø$œOÐ,€„Ô à€Ø€Ø€
à€
Ø€	Ø€
Ø€
Ø€à€Øˆu�}€Ø€	ð	ð 	ð 	ð 	ð 	ˆ&Ô
ñ 	ô 	ð 	ðð ð ð"ð "ð "ðð ð ð*2ð 2ð 2ð
3ð 3ð 3ð%ð %ð %ðSð Sð Sð0ð 0ð 0ð(ð (ð (ð
3ð 
3ð 
3ðð ð ð , ð , ð , ð^3+ð 3+ð 3+ðlð ð ðð ð ð ð<ð ð ð ðBð Bð Bðð ð ð ð&ð ð ðO"ð O"ð O"ðd ˆzÒÐØ€D�F„F€F€F€Fð Ðr"   