§
    Î.¯j"p  ã                  óÒ  — d Z ddlmZ ddlZddlmc 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mZmZmZmZ ddlmZmZmZ ddlZddlmZmZ ddlmZ ddlmZm Z  dd	l!m"Z"  ej#        d
¬¦  «        d„ ¦   «         Z$ej#        d„ ¦   «         Z% G d„ d¦  «        Z& G d„ d¦  «        Z' G d„ d¦  «        Z( G d„ d¦  «        Z) G d„ d¦  «        Z* G d„ d¦  «        Z+ G d„ d¦  «        Z,dS )u-  AutoPOE2 - Endless Multi-Map Loop Integration Test Suite (Doc 69 / SSoT 2026).
================================================================================
[MÃ” PHá»ŽNG THUáº¬T TOÃ�N HEADLESS - KHÃ”NG PHáº¢I LIVE GAME] (Rule 5 Compliance)

Domain: QA & Governance Sentinel (SÆ° Ä‘oÃ n 4)
Kiá»ƒm thá»­ tÃ­ch há»£p khÃ©p kÃ­n vÃ²ng láº·p vÃ´ táº­n (Endless Multi-Map Farming Loop):
Stage 0 (Stash) -> Stage 1 (Waystone) -> Stage 2 (Map Device) -> Stage 3 (Activate)
-> Stage 4 (Enter) -> Stage 5 (Clear 4-Gate) -> Stage 6 (Hideout) -> Láº·p láº¡i chu ká»³ má»›i.

Ä�áº·c biá»‡t kiá»ƒm Ä‘á»‹nh vÃ  rÃ  soÃ¡t:
1. INV-MAP-LEGITIMATE-CLEAR: Tháº©m Ä‘á»‹nh 4 cá»•ng (90s-240s, Boss Slain, Fog 85%, Distance 1200u, Quiet 25s).
   Triá»‡t tiÃªu hoÃ n toÃ n bug "monsters <= 30 sau 15s".
2. INV-FOCUS-SAFETY-SEPARATION: Báº£o Ä‘áº£m khÃ´ng rÃ² rá»‰ báº¥t ká»³ input chuá»™t/phÃ­m ra desktop.
   KeyDown/MouseDown bá»‹ cháº·n khi unfocused; KeyUp/MouseUp luÃ´n giáº£i phÃ³ng pháº§n cá»©ng KMBox;
   Tá»± Ä‘á»™ng ReleaseAllKeys() khi máº¥t focus.
3. INV-WASD-NO-BLIND-LMB: Tiáº¿p cáº­n Stash vÃ  Map Device dÃ¹ng WASD tiáº¿p cáº­n <= 18u (200px)
   trÆ°á»›c khi Click LMB cÃ³ chá»§ Ä‘Ã­ch; cáº¥m click mÃ¹ xuá»‘ng Ä‘áº¥t hoáº·c chÃ¢n nhÃ¢n váº­t (960, 540).
4. TÃ­nh toÃ¡n vÃ  xÃ¡c minh Autonomy Readiness Score (ARS) Ä‘áº¡t 100.0%.
é    )ÚannotationsN)ÚAnyÚDictÚListÚOptionalÚTuple)Ú	MagicMockÚcallÚpatch)ÚMasterInvariantsSentinelÚInvariantStatus)ÚMapClearEvaluator)ÚStashActionÚStashConfig)ÚAutonomousMappingCoordinatorT)Úautousec               #  ób   K  — t          d¦  «        5  dV — ddd¦  «         dS # 1 swxY w Y   dS )uI   TrÃ¡nh quÃ©t bá»™ nhá»› tháº­t trong mÃ´i trÆ°á»�ng giáº£ láº­p headless.z<src.assistant_tool.screen_capturer.SyncMemorySnapshotManagerN)r   © ó    ú9C:\Projects\AutoPOE2\tests\test_endless_multi_map_loop.pyÚmock_sync_ramr   *   s„   è è € õ 
ÐMÑ	NÔ	Nð ð Øˆˆˆðð ð ñ ô ð ð ð ð ð ð ð øøøð ð ð ð ð ð s   ’$¤(«(c            	   #  óŒ  K  — t          j        d¬¦  «        } t          j                             | d¦  «        }t          j                             | d¦  «        }t          |dd¬¦  «        5 }|                     d¦  «         d	d	d	¦  «         n# 1 swxY w Y   t          d
d|dd|d¬¦  «        }t          d¬¦  «        |_	        t          ¦   «         |_
        t          d¬¦  «        |_        t          d¬¦  «        |_        t          ¦   «         |_        t          ¦   «         |_        | |||dœV — t          j        | d¬¦  «         d	S )uL   Táº¡o mÃ´i trÆ°á»�ng giáº£ láº­p cÃ´ láº­p cho AutonomousMappingCoordinator.Úendless_loop_test_)ÚprefixÚcapturesz
Client.txtÚwzutf-8)ÚencodingzF2026/09/19 01:00:00 [INFO Client] You have entered Shoreline Hideout.
Né 
  é   éx   ç     €V@T)Úscreen_wÚscreen_hÚcapture_dirÚmap_duration_secÚmin_map_duration_secÚclient_log_pathÚis_simulated©Úreturn_value)Útemp_dirr$   Úlog_fileÚcoordinator)Úignore_errors)ÚtempfileÚmkdtempÚosÚpathÚjoinÚopenÚwriter   r	   Úensure_focusÚdismiss_modalsÚ#recover_from_client_crash_if_neededÚ!wait_for_loading_screen_to_finishÚstart_3s_sentinelÚstop_3s_sentinelÚshutilÚrmtree)r+   r$   r,   Úfr-   s        r   Úcoordinator_envr?   1   sž  è è € õ ÔÐ';Ð<Ñ<Ô<€HÝ”'—,’,˜x¨Ñ4Ô4€KÝŒw�|Š|˜H lÑ3Ô3€Hå	ˆh˜ gÐ	.Ñ	.Ô	.ð [°!Ø	�ŠÐYÑZÔZÐZð[ð [ð [ñ [ô [ð [ð [ð [ð [ð [ð [øøøð [ð [ð [ð [õ /ØØØØØ!Ø Øðñ ô €Kõ  )°dÐ;Ñ;Ô;€KÔÝ!*¡¤€KÔÝ6?ÈTÐ6RÑ6RÔ6R€KÔ3Ý4=È4Ð4PÑ4PÔ4P€KÔ1Ý$-¡K¤K€KÔ!Ý#,¡;¤;€KÔ ð Ø"ØØ"ð	ð ð ð ð õ „M�(¨$Ð/Ñ/Ô/Ð/Ð/Ð/s   Á*BÂBÂBc                  ó   — e Zd ZdZd„ Zd„ ZdS )Ú!TestEndlessMultiMapContinuousLoopua   Kiá»ƒm thá»­ vÃ²ng láº·p vÃ´ táº­n Ä‘a báº£n Ä‘á»“ káº¿t ná»‘i liÃªn hoÃ n toÃ n diá»‡n 7 Stages.c           	     ó¤  — |d         }t          ddddddœ¬¦  «        |_        t          dddd	gd
ddœ¬¦  «        |_        t          ddddœ¬¦  «        |_        t          dddœ¬¦  «        |_        t          dddœ¬¦  «        |_        t          dddddddœdœ¬¦  «        |_        t          dddœ¬¦  «        |_        t          d¦  «        5  | 	                    ddd¬¦  «        }ddd¦  «         n# 1 swxY w Y   |d         }d}||k    }|slt          j        d|fd||f¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd |iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}}|d!         }d}||k    }|slt          j        d|fd||f¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd |iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}}|d"         }d}||k    }|slt          j        d|fd||f¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd |iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}}|d#         }d}||u }|slt          j        d$|fd%||f¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd |iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}}|d&         }	t          |	¦  «        }d}
||
k    }|sÇt          j        d|fd'||
f¦  «        d(t!          j        ¦   «         v st          j        t          ¦  «        rt          j        t          ¦  «        nd(t          j        |	¦  «        t          j        |¦  «        t          j        |
¦  «        d)œz  }d*d+|iz  }t          t          j        |¦  «        ¦  «        ‚dx}	x}x}}
g d,¢}|d&         D �]:}|d-         }|d         }d}||k    }|slt          j        d|fd||f¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd |iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}}|d.         }||k    }|s—t          j        d|fd/||f¦  «        t          j        |¦  «        d0t!          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nd0d1œz  }d2d3|iz  }t          t          j        |¦  «        ¦  «        ‚dx}}�Œ<|j        }	|	j        }d4}
||
k    }|s½t          j        d|fd5||
f¦  «        dt!          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |	¦  «        t          j        |¦  «        t          j        |
¦  «        d)œz  }d*d+|iz  }t          t          j        |¦  «        ¦  «        ‚dx}	x}x}}
|j        }	|	j        }d}
||
k    }|s½t          j        d|fd6||
f¦  «        dt!          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |	¦  «        t          j        |¦  «        t          j        |
¦  «        d)œz  }d*d+|iz  }t          t          j        |¦  «        ¦  «        ‚dx}	x}x}}
|j        }	|	j        }d}
||
k    }|s½t          j        d|fd7||
f¦  «        dt!          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |	¦  «        t          j        |¦  «        t          j        |
¦  «        d)œz  }d*d+|iz  }t          t          j        |¦  «        ¦  «        ‚dx}	x}x}}
|j        }	|	j        }d}
||
k    }|s½t          j        d|fd8||
f¦  «        dt!          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |	¦  «        t          j        |¦  «        t          j        |
¦  «        d)œz  }d*d+|iz  }t          t          j        |¦  «        ¦  «        ‚dx}	x}x}}
|j        }	|	j        }d}
||
k    }|s½t          j        d|fd9||
f¦  «        dt!          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |	¦  «        t          j        |¦  «        t          j        |
¦  «        d)œz  }d*d+|iz  }t          t          j        |¦  «        ¦  «        ‚dx}	x}x}}
|j        }	|	j        }d}
||
k    }|s½t          j        d|fd:||
f¦  «        dt!          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |	¦  «        t          j        |¦  «        t          j        |
¦  «        d)œz  }d*d+|iz  }t          t          j        |¦  «        ¦  «        ‚dx}	x}x}}
|j        }	|	j        }d}
||
k    }|s½t          j        d|fd;||
f¦  «        dt!          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |	¦  «        t          j        |¦  «        t          j        |
¦  «        d)œz  }d*d+|iz  }t          t          j        |¦  «        ¦  «        ‚dx}	x}x}}
dS )<uš  [MÃ” PHá»ŽNG THUáº¬T TOÃ�N HEADLESS - KHÃ”NG PHáº¢I LIVE GAME]
        XÃ¡c minh vÃ²ng láº·p 3 báº£n Ä‘á»“ liÃªn tá»¥c thá»±c thi Ä‘áº§y Ä‘á»§ chuá»—i:
        Stage 0 (Stash) -> Stage 1 (Waystone) -> Stage 2 (Map Device) -> Stage 3 (Activate)
        -> Stage 4 (Enter) -> Stage 5 (Clear 4-Gate) -> Stage 6 (Hideout) -> Stage 0 Post-Stash
        -> Láº·p láº¡i chu ká»³ má»›i cho tá»«ng báº£n Ä‘á»“.
        r-   ÚSUCCESSTé   F)ÚstatusÚstash_openedÚitems_depositedÚtabs_detectedÚwaystone_withdrawnr)   ©r   r   iÃ  é6  ç      Y@)é   r   i	  rK   ç     ÀW@é   )rE   Úselected_slotÚwaystones_foundÚoccupied_slotsÚis_full)rE   Úportal_already_openÚ
approachedÚmap_node_simulated)rE   Únode_idzSulphur Vents)rE   Úentered_zoneNÚ	COMPLETEDr   u(   Map Boss Ä‘Ã£ bá»‹ tiÃªu diá»‡t sau 110s)rE   Údeath_detectedÚrespawn_countÚclear_reason)rE   Úrunner_instanceÚrunner_result)rE   Úreturned_to_hideoutú
time.sleepé   )Úmax_mapsÚenable_stashingÚforce_new_maprE   ©ú==©z%(py1)s == %(py4)s©Úpy1Úpy4úassert %(py6)sÚpy6Útotal_maps_requestedÚmaps_completedÚ	exhausted©Úis©z%(py1)s is %(py4)sÚruns)z0%(py4)s
{%(py4)s = %(py0)s(%(py2)s)
} == %(py7)sÚlen©Úpy0Úpy2rj   Úpy7úassert %(py9)sÚpy9)ÚSTAGE0_STASHÚSTAGE1_PRECHECKÚSTAGE2_MAP_DEVICEÚSTAGE3_ATLAS_ACTIVATIONÚSTAGE4_MAP_ENTRANCEÚSTAGE5_MAP_CLEARÚSTAGE6_PORTAL_RETURNÚSTAGE0_POST_STASHÚpipeline_resultÚstages_completed)z%(py1)s == %(py3)sÚexpected_stages©ri   Úpy3úassert %(py5)sÚpy5é   )zd%(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.execute_stage0_stash_routine
}.call_count
} == %(py7)s)z_%(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.execute_stage1_precheck
}.call_count
} == %(py7)s)za%(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.execute_stage2_map_device
}.call_count
} == %(py7)s©zg%(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.execute_stage3_atlas_activation
}.call_count
} == %(py7)s©zc%(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.execute_stage4_map_entrance
}.call_count
} == %(py7)s©z`%(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.execute_stage5_map_clear
}.call_count
} == %(py7)s©zd%(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.execute_stage6_portal_return
}.call_count
} == %(py7)s)r	   Úexecute_stage0_stash_routineÚexecute_stage1_precheckÚexecute_stage2_map_deviceÚexecute_stage3_atlas_activationÚexecute_stage4_map_entranceÚexecute_stage5_map_clearÚexecute_stage6_portal_returnr   Úrun_multi_map_loopÚ
@pytest_arÚ_call_reprcompareÚ	_safereprÚAssertionErrorÚ_format_explanationrt   Ú@py_builtinsÚlocalsÚ_should_repr_global_nameÚ
call_count)Úselfr?   r-   Úloop_resÚ@py_assert0Ú@py_assert3Ú@py_assert2Ú@py_format5Ú@py_format7Ú@py_assert1Ú@py_assert6Ú@py_assert5Ú@py_format8Ú@py_format10r…   Úrun_infoÚp_resÚ@py_format4Ú@py_format6s                      r   Ú>test_continuous_multi_map_loop_executes_all_7_stages_per_cyclez`TestEndlessMultiMapContinuousLoop.test_continuous_multi_map_loop_executes_all_7_stages_per_cycle^   sL  € ð 5DÀMÔ4Rˆõ 4=ØØ Ø ØØ"'ðK
ð K
ð 4ñ 4ô 4ˆÔ0õ /8ØØ5Ø 8Ð:QÐRØ ØðF
ð F
ð /ñ /ô /ˆÔ+õ 1:ØØ#(ØðH
ð H
ð 1ñ 1ô 1ˆÔ-õ
 7@ØØ+ðN
ð N
ð 7ñ 7ô 7ˆÔ3õ 3<ØØ+ðJ
ð J
ð 3ñ 3ô 3ˆÔ/õ 09ØØ#à%Ø"'Ø!"Ø Jð	ð ð	G
ð 	G
ð 	0ñ 	0ô 	0ˆÔ,õ 4=ØØ#'ðK
ð K
ð 4ñ 4ô 4ˆÔ0õ �<Ñ Ô ð 	ð 	Ø"×5Ò5ØØ $Ø"ð 6ñ ô ˆHð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð ˜Ô!Ð0 [Ð0Ð! [Ò0Ð0Ð0Ð0Õ0Ô0Ð0Ð0Ð0Ð0Ð! [Ð0Ñ0Ô0Õ0Ô0Ð!Ñ0Ô0Õ0Ô0 [Ñ0Ô0Ð0Ð0Ñ0Ð0Ð0Ð0Ð0Ð0Ñ0Ð0Õ0Õ0Ô0Ð0Ñ0Ô0Ñ0Ô0Ð0Ð0Ð0Ð0Ð0Ð0Ð0ØÐ.Ô/Ð4°1Ð4Ð/°1Ò4Ð4Ð4Ð4Õ4Ô4Ð4Ð4Ð4Ð4Ð/°1Ð4Ñ4Ô4Õ4Ô4Ð/Ñ4Ô4Õ4Ô4°1Ñ4Ô4Ð4Ð4Ñ4Ð4Ð4Ð4Ð4Ð4Ñ4Ð4Õ4Õ4Ô4Ð4Ñ4Ô4Ñ4Ô4Ð4Ð4Ð4Ð4Ð4Ð4Ð4ØÐ(Ô)Ð.¨QÐ.Ð)¨QÒ.Ð.Ð.Ð.Õ.Ô.Ð.Ð.Ð.Ð.Ð)¨QÐ.Ñ.Ô.Õ.Ô.Ð)Ñ.Ô.Õ.Ô.¨QÑ.Ô.Ð.Ð.Ñ.Ð.Ð.Ð.Ð.Ð.Ñ.Ð.Õ.Õ.Ô.Ð.Ñ.Ô.Ñ.Ô.Ð.Ð.Ð.Ð.Ð.Ð.Ð.Ø˜Ô$Ð-¨Ð-Ð$¨Ð-Ð-Ð-Ð-Õ-Ô-Ð-Ð-Ð-Ð-Ð$¨Ð-Ñ-Ô-Õ-Ô-Ð$Ñ-Ô-Õ-Ô-¨Ñ-Ô-Ð-Ð-Ñ-Ð-Ð-Ð-Ð-Ð-Ñ-Ð-Õ-Õ-Ô-Ð-Ñ-Ô-Ñ-Ô-Ð-Ð-Ð-Ð-Ð-Ð-Ð-Ø˜FÔ#Ð)�sÐ#Ñ$Ô$Ð)¨Ð)Ð$¨Ò)Ð)Ð)Ð)Õ)Ô)Ð)Ð)Ð)Ð)Ð$¨Ð)Ñ)Ô)Ð)Õ)Ô)Ñ)Ô)Ð)Ð)Õ)Ô)�sÑ)Ô)Ð)Õ)Ô)�sÑ)Ô)Ð)Ð)Õ)Ô)Ð#Ñ)Ô)Õ)Ô)Ð$Ñ)Ô)Õ)Ô)¨Ñ)Ô)Ð)Ð)Ñ)Ð)Ð)Ð)Ð)Ð)Ñ)Ð)Õ)Õ)Ô)Ð)Ñ)Ô)Ñ)Ô)Ð)Ð)Ð)Ð)Ð)Ð)Ð)Ð)Ð)ð	
ð 	
ð 	
ˆð ! Ô(ð 	@ñ 	@ˆHØÐ.Ô/ˆEØ˜”?Ð/ iÐ/�? iÒ/Ð/Ð/Ð/Õ/Ô/Ð/Ð/Ð/Ð/�? iÐ/Ñ/Ô/Õ/Ô/�?Ñ/Ô/Õ/Ô/ iÑ/Ô/Ð/Ð/Ñ/Ð/Ð/Ð/Ð/Ð/Ñ/Ð/Õ/Õ/Ô/Ð/Ñ/Ô/Ñ/Ô/Ð/Ð/Ð/Ð/Ð/Ð/Ð/ØÐ+Ô,Ð?Ð,°Ò?Ð?Ð?Ð?Õ?Ô?Ð?Ð?Ð?Ð?Ð,°Ð?Ñ?Ô?Õ?Ô?Ð,Ñ?Ô?Ð?Õ?Ô?Ñ?Ô?Ð?Ð?Õ?Ô?°Ñ?Ô?Ð?Õ?Ô?°Ñ?Ô?Ð?Ð?Ð?Ð?Ñ?Ð?Ð?Ð?Ð?Ð?Ñ?Ð?Õ?Õ?Ô?Ð?Ñ?Ô?Ñ?Ô?Ð?Ð?Ð?Ð?Ð?Ñ?ð Ô7ÐGÐ7ÔBÐGÀaÐGÐBÀaÒGÐGÐGÐGÕGÔGÐGÐGÐGÐGÐBÀaÐGÑGÔGÐGÕGÔGÑGÔGÐGÐGÕGÔGˆ{ÑGÔGÐGÕGÔGˆ{ÑGÔGÐGÐGÕGÔGÐ7ÑGÔGÕGÔGÐBÑGÔGÕGÔGÀaÑGÔGÐGÐGÑGÐGÐGÐGÐGÐGÑGÐGÕGÕGÔGÐGÑGÔGÑGÔGÐGÐGÐGÐGÐGÐGÐGÐGÐGØÔ2ÐBÐ2Ô=ÐBÀÐBÐ=ÀÒBÐBÐBÐBÕBÔBÐBÐBÐBÐBÐ=ÀÐBÑBÔBÐBÕBÔBÑBÔBÐBÐBÕBÔBˆ{ÑBÔBÐBÕBÔBˆ{ÑBÔBÐBÐBÕBÔBÐ2ÑBÔBÕBÔBÐ=ÑBÔBÕBÔBÀÑBÔBÐBÐBÑBÐBÐBÐBÐBÐBÑBÐBÕBÕBÔBÐBÑBÔBÑBÔBÐBÐBÐBÐBÐBÐBÐBÐBÐBØÔ4ÐDÐ4Ô?ÐDÀ1ÐDÐ?À1ÒDÐDÐDÐDÕDÔDÐDÐDÐDÐDÐ?À1ÐDÑDÔDÐDÕDÔDÑDÔDÐDÐDÕDÔDˆ{ÑDÔDÐDÕDÔDˆ{ÑDÔDÐDÐDÕDÔDÐ4ÑDÔDÕDÔDÐ?ÑDÔDÕDÔDÀ1ÑDÔDÐDÐDÑDÐDÐDÐDÐDÐDÑDÐDÕDÕDÔDÐDÑDÔDÑDÔDÐDÐDÐDÐDÐDÐDÐDÐDÐDØÔ:ÐJÐ:ÔEÐJÈÐJÐEÈÒJÐJÐJÐJÕJÔJÐJÐJÐJÐJÐEÈÐJÑJÔJÐJÕJÔJÑJÔJÐJÐJÕJÔJˆ{ÑJÔJÐJÕJÔJˆ{ÑJÔJÐJÐJÕJÔJÐ:ÑJÔJÕJÔJÐEÑJÔJÕJÔJÈÑJÔJÐJÐJÑJÐJÐJÐJÐJÐJÑJÐJÕJÕJÔJÐJÑJÔJÑJÔJÐJÐJÐJÐJÐJÐJÐJÐJÐJØÔ6ÐFÐ6ÔAÐFÀQÐFÐAÀQÒFÐFÐFÐFÕFÔFÐFÐFÐFÐFÐAÀQÐFÑFÔFÐFÕFÔFÑFÔFÐFÐFÕFÔFˆ{ÑFÔFÐFÕFÔFˆ{ÑFÔFÐFÐFÕFÔFÐ6ÑFÔFÕFÔFÐAÑFÔFÕFÔFÀQÑFÔFÐFÐFÑFÐFÐFÐFÐFÐFÑFÐFÕFÕFÔFÐFÑFÔFÑFÔFÐFÐFÐFÐFÐFÐFÐFÐFÐFØÔ3ÐCÐ3Ô>ÐCÀ!ÐCÐ>À!ÒCÐCÐCÐCÕCÔCÐCÐCÐCÐCÐ>À!ÐCÑCÔCÐCÕCÔCÑCÔCÐCÐCÕCÔCˆ{ÑCÔCÐCÕCÔCˆ{ÑCÔCÐCÐCÕCÔCÐ3ÑCÔCÕCÔCÐ>ÑCÔCÕCÔCÀ!ÑCÔCÐCÐCÑCÐCÐCÐCÐCÐCÑCÐCÕCÕCÔCÐCÑCÔCÑCÔCÐCÐCÐCÐCÐCÐCÐCÐCÐCØÔ7ÐGÐ7ÔBÐGÀaÐGÐBÀaÒGÐGÐGÐGÕGÔGÐGÐGÐGÐGÐBÀaÐGÑGÔGÐGÕGÔGÑGÔGÐGÐGÕGÔGˆ{ÑGÔGÐGÕGÔGˆ{ÑGÔGÐGÐGÕGÔGÐ7ÑGÔGÕGÔGÐBÑGÔGÕGÔGÀaÑGÔGÐGÐGÑGÐGÐGÐGÐGÐGÑGÐGÕGÕGÔGÐGÑGÔGÑGÔGÐGÐGÐGÐGÐGÐGÐGÐGÐGÐGÐGs   ÃC4Ã4C8Ã;C8c                ó°  — |d         }t          ddi¬¦  «        |_        t          dddœ¬¦  «        |_        t          ddd	œ¬¦  «        |_        t          ¦   «         |_        t          ¦   «         |_        t          ¦   «         |_        t          ¦   «         |_        t          d
¦  «        5  | 	                    dd¬¦  «        }ddd¦  «         n# 1 swxY w Y   |d         }d}||k    }|slt          j        d|fd||f¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}}d}|d         }||v }|slt          j        d|fd||f¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}}d}|d         }||v}|slt          j        d|fd||f¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}}|j        }	|	j        }d}
||
k    }|s½t          j        d|fd||
f¦  «        dt!          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |	¦  «        t          j        |¦  «        t          j        |
¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚dx}	x}x}}
|j        }	|	j        }d}
||
k    }|s½t          j        d|fd ||
f¦  «        dt!          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |	¦  «        t          j        |¦  «        t          j        |
¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚dx}	x}x}}
|j        }	|	j        }d}
||
k    }|s½t          j        d|fd!||
f¦  «        dt!          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |	¦  «        t          j        |¦  «        t          j        |
¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚dx}	x}x}}
|j        }	|	j        }d}
||
k    }|s½t          j        d|fd"||
f¦  «        dt!          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |	¦  «        t          j        |¦  «        t          j        |
¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚dx}	x}x}}
dS )#u¹   [MÃ” PHá»ŽNG THUáº¬T TOÃ�N HEADLESS - KHÃ”NG PHáº¢I LIVE GAME]
        NguyÃªn táº¯c Fail-Closed: Náº¿u Stage 2 (Map Device) tháº¥t báº¡i, khÃ´ng kÃ­ch hoáº¡t Stage 3, 4, 5, 6.
        r-   rE   rC   r)   rJ   )rE   rP   ÚFAILEDz?Atlas UI not verified after LMB click (INV-MAPDEVICE-VERIFY-UI))rE   Úerrorr`   r   T)Útarget_slot_idxrc   Nre   rg   rh   rk   rl   u   Stage 2 tháº¥t báº¡ir³   ©Úin)z%(py1)s in %(py4)sr}   r„   )únot in)z%(py1)s not in %(py4)sr‹   ru   ry   rz   rŒ   r�   rŽ   )r	   r�   r�   r‘   r’   r“   r”   r•   r   Úexecute_pipeliner—   r˜   r™   rš   r›   rŸ   rœ   r�   rž   )r    r?   r-   Úreportr¢   r£   r¤   r¥   r¦   r§   r¨   r©   rª   r«   s                 r   Ú>test_fail_closed_at_any_stage_aborts_cycle_and_prevents_damagez`TestEndlessMultiMapContinuousLoop.test_fail_closed_at_any_stage_aborts_cycle_and_prevents_damage»   s>  € ð 5DÀMÔ4Rˆå3<È8ÐU^ÐJ_Ð3`Ñ3`Ô3`ˆÔ0Ý.7ØØ5ðF
ð F
ð /ñ /ô /ˆÔ+õ
 1:ØØVðH
ð H
ð 1ñ 1ô 1ˆÔ-õ 7@±k´kˆÔ3Ý2;±+´+ˆÔ/Ý/8©{¬{ˆÔ,Ý3<±;´;ˆÔ0å�<Ñ Ô ð 	[ð 	[Ø ×1Ò1À!ÐUYÐ1ÑZÔZˆFð	[ð 	[ð 	[ñ 	[ô 	[ð 	[ð 	[ð 	[ð 	[ð 	[ð 	[øøøð 	[ð 	[ð 	[ð 	[ð �hÔÐ+ 8Ð+Ð 8Ò+Ð+Ð+Ð+Õ+Ô+Ð+Ð+Ð+Ð+Ð 8Ð+Ñ+Ô+Õ+Ô+ÐÑ+Ô+Õ+Ô+ 8Ñ+Ô+Ð+Ð+Ñ+Ð+Ð+Ð+Ð+Ð+Ñ+Ð+Õ+Õ+Ô+Ð+Ñ+Ô+Ñ+Ô+Ð+Ð+Ð+Ð+Ð+Ð+Ð+Ø%Ð8¨°¬Ð8Ð%¨Ð8Ð8Ð8Ð8Õ8Ô8Ð8Ð8Ð8Ð8Ð%¨Ð8Ñ8Ô8Õ8Ô8Ð%Ñ8Ô8Õ8Ô8¨Ñ8Ô8Ð8Ð8Ñ8Ð8Ð8Ð8Ð8Ð8Ñ8Ð8Õ8Õ8Ô8Ð8Ñ8Ô8Ñ8Ô8Ð8Ð8Ð8Ð8Ð8Ð8Ð8Ø"ÐD¨&Ð1CÔ*DÐDÐ"Ð*DÐDÐDÐDÐDÕDÔDÐDÐDÐDÐDÐ"Ð*DÐDÑDÔDÕDÔDÐ"ÑDÔDÕDÔDÐ*DÑDÔDÐDÐDÑDÐDÐDÐDÐDÐDÑDÐDÕDÕDÔDÐDÑDÔDÑDÔDÐDÐDÐDÐDÐDÐDÐDàÔ:ÐJÐ:ÔEÐJÈÐJÐEÈÒJÐJÐJÐJÕJÔJÐJÐJÐJÐJÐEÈÐJÑJÔJÐJÕJÔJÑJÔJÐJÐJÕJÔJˆ{ÑJÔJÐJÕJÔJˆ{ÑJÔJÐJÐJÕJÔJÐ:ÑJÔJÕJÔJÐEÑJÔJÕJÔJÈÑJÔJÐJÐJÑJÐJÐJÐJÐJÐJÑJÐJÕJÕJÔJÐJÑJÔJÑJÔJÐJÐJÐJÐJÐJÐJÐJÐJÐJØÔ6ÐFÐ6ÔAÐFÀQÐFÐAÀQÒFÐFÐFÐFÕFÔFÐFÐFÐFÐFÐAÀQÐFÑFÔFÐFÕFÔFÑFÔFÐFÐFÕFÔFˆ{ÑFÔFÐFÕFÔFˆ{ÑFÔFÐFÐFÕFÔFÐ6ÑFÔFÕFÔFÐAÑFÔFÕFÔFÀQÑFÔFÐFÐFÑFÐFÐFÐFÐFÐFÑFÐFÕFÕFÔFÐFÑFÔFÑFÔFÐFÐFÐFÐFÐFÐFÐFÐFÐFØÔ3ÐCÐ3Ô>ÐCÀ!ÐCÐ>À!ÒCÐCÐCÐCÕCÔCÐCÐCÐCÐCÐ>À!ÐCÑCÔCÐCÕCÔCÑCÔCÐCÐCÕCÔCˆ{ÑCÔCÐCÕCÔCˆ{ÑCÔCÐCÐCÕCÔCÐ3ÑCÔCÕCÔCÐ>ÑCÔCÕCÔCÀ!ÑCÔCÐCÐCÑCÐCÐCÐCÐCÐCÑCÐCÕCÕCÔCÐCÑCÔCÑCÔCÐCÐCÐCÐCÐCÐCÐCÐCÐCØÔ7ÐGÐ7ÔBÐGÀaÐGÐBÀaÒGÐGÐGÐGÕGÔGÐGÐGÐGÐGÐBÀaÐGÑGÔGÐGÕGÔGÑGÔGÐGÐGÕGÔGˆ{ÑGÔGÐGÕGÔGˆ{ÑGÔGÐGÐGÕGÔGÐ7ÑGÔGÕGÔGÐBÑGÔGÕGÔGÀaÑGÔGÐGÐGÑGÐGÐGÐGÐGÐGÑGÐGÕGÕGÔGÐGÑGÔGÑGÔGÐGÐGÐGÐGÐGÐGÐGÐGÐGÐGÐGs   Â+CÃCÃCN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r°   rº   r   r   r   rA   rA   [   sD   € € € € € ØkÐkð[Hð [Hð [HðzHð Hð Hð Hð Hr   rA   c                  ó0   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ ZdS )ÚTestInvMapLegitimateClear4Gatesu\   Kiá»ƒm tra toÃ n diá»‡n báº¥t biáº¿n INV-MAP-LEGITIMATE-CLEAR vá»›i 4 cá»•ng tháº©m Ä‘á»‹nh.c                ó  — t          ddd¬¦  «        }|                     ddddd¬	¦  «         |                     dd¬
¦  «        \  }}d}||u }|s—t          j        d|fd||f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        dœz  }dd|iz  }t          t          j
        |¦  «        ¦  «        ‚dx}}d}||k    }|s—t          j        d|fd||f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        dœz  }dd|iz  }t          t          j
        |¦  «        ¦  «        ‚dx}}|                     ddddd¬¦  «         |                     dd¬
¦  «        \  }}d}||u }|s—t          j        d|fd||f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        dœz  }dd|iz  }t          t          j
        |¦  «        ¦  «        ‚dx}}d}||k    }|s—t          j        d|fd||f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        dœz  }dd|iz  }t          t          j
        |¦  «        ¦  «        ‚dx}}dS )ui   RÃ o cháº¯n thá»�i lÆ°á»£ng tá»‘i thiá»ƒu: Cáº¤M káº¿t luáº­n hoÃ n táº¥t khi elapsed < 90s (90s - 240s).r!   ç333333ë?ç     À’@©Úmin_duration_secÚtarget_coverageÚmin_traverse_unitsrL   r   çš™™™™™¹?g      .@©Úpos_xÚpos_yÚmonsters_nearÚcoverage_ratioÚnow_sec©Úelapsed_secrÎ   Frp   ©z%(py0)s is %(py3)sÚ
is_cleared©rv   r‡   rˆ   r‰   NÚ re   )z%(py0)s == %(py3)sÚreasong      i@Tg     €F@©rÊ   rË   rÌ   Ú
boss_slainrÎ   ©r   Úupdate_telemetryÚevaluate_clearr—   r˜   rœ   r�   rž   r™   rš   r›   )r    Ú	evaluatorrÒ   rÕ   r¤   r§   r®   r¯   s           r   Ú9test_gate_duration_strictly_rejects_early_clear_under_90szYTestInvMapLegitimateClear4Gates.test_gate_duration_strictly_rejects_early_clear_under_90sä   s¥  € å%°tÈTÐflÐmÑmÔmˆ	ð 	×"Ò"¨°eÈ1Ð]aÐkoÐ"ÑpÔpÐpØ&×5Ò5À$ÐPTÐ5ÑUÔUÑˆ
�FØ"Ð"ˆz˜UÐ"Ð"Ð"Ð"Õ"Ô"Ð"Ð"Ð"Ð"ˆz˜UÐ"Ñ"Ô"Ð"Õ"Ô"Ñ"Ô"Ð"Ð"Õ"Ô"ˆzÑ"Ô"Ð"Õ"Ô"ˆzÑ"Ô"Ð"Ð"Õ"Ô"˜UÑ"Ô"Ð"Ð"Ñ"Ð"Ð"Ð"Ð"Ð"Ñ"Ð"Õ"Õ"Ô"Ð"Ñ"Ô"Ñ"Ô"Ð"Ð"Ð"Ð"Ð"ØÐˆv˜Š|ÐÐÐÕÔÐÐÐÐˆv˜ÐÑÔÐÕÔÑÔÐÐÕÔˆvÑÔÐÕÔˆvÑÔÐÐÕÔ˜ÑÔÐÐÑÐÐÐÐÐÑÐÕÕÔÐÑÔÑÔÐÐÐÐÐð 	×"Ò"¨°eÈ1ÐY]ÐgkÐ"ÑlÔlÐlØ&×5Ò5À$ÐPTÐ5ÑUÔUÑˆ
�FØ"Ð"ˆz˜UÐ"Ð"Ð"Ð"Õ"Ô"Ð"Ð"Ð"Ð"ˆz˜UÐ"Ñ"Ô"Ð"Õ"Ô"Ñ"Ô"Ð"Ð"Õ"Ô"ˆzÑ"Ô"Ð"Õ"Ô"ˆzÑ"Ô"Ð"Ð"Õ"Ô"˜UÑ"Ô"Ð"Ð"Ñ"Ð"Ð"Ð"Ð"Ð"Ñ"Ð"Õ"Õ"Ô"Ð"Ñ"Ô"Ñ"Ô"Ð"Ð"Ð"Ð"Ð"ØÐˆv˜Š|ÐÐÐÕÔÐÐÐÐˆv˜ÐÑÔÐÕÔÑÔÐÐÕÔˆvÑÔÐÕÔˆvÑÔÐÐÕÔ˜ÑÔÐÐÑÐÐÐÐÐÑÐÕÕÔÐÑÔÑÔÐÐÐÐÐÐÐr   c                óf  — t          ddd¬¦  «        }g d¢}|D ]\  }}|                     ||d¬¦  «         Œ|                     dd	d
dd¬¦  «         |                     dd¬¦  «        \  }}d}||u }|s—t          j        d|fd||f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        dœz  }	dd|	iz  }
t          t          j
        |
¦  «        ¦  «        ‚dx}}d}||v }|s—t          j        d|fd||f¦  «        t          j        |¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nddœz  }	dd|	iz  }
t          t          j
        |
¦  «        ¦  «        ‚dx}}dS )u\   Cá»•ng 1: Map Boss Slain + elapsed >= 90s + traverse >= 1200u (INV-MAP-LEGITIMATE-CLEAR-V2).r!   gš™™™™™é?rÃ   rÄ   ©©rL   rL   )g     àu@rL   )g     À‚@rL   )g     �Š@rL   )g     0‘@rL   )ç     •@rL   é   ©rÊ   rË   rÌ   ç     à•@rL   rM   TrN   rÖ   rÏ   rp   rÑ   rÒ   rÓ   rˆ   r‰   Nõ   Map Boss Ä‘Ã£ bá»‹ tiÃªu diá»‡trµ   ©z%(py1)s in %(py3)srÕ   r†   rØ   )r    rÛ   Ú	positionsÚpxÚpyrÒ   rÕ   r¤   r§   r®   r¯   r¢   s               r   Ú-test_gate1_boss_slain_qualifies_map_after_90szMTestInvMapLegitimateClear4Gates.test_gate1_boss_slain_qualifies_map_after_90sô   s)  € å%°tÈTÐflÐmÑmÔmˆ	ð
ð 
ð 
ˆ	ð  ð 	Lð 	L‰FˆB�Ø×&Ò&¨R°rÈÐ&ÑKÔKÐKÐKà×"Ò"¨°uÈAÐZ^ÐhlÐ"ÑmÔmÐmØ&×5Ò5À$ÐPTÐ5ÑUÔUÑˆ
�Fà!Ð!ˆz˜TÐ!Ð!Ð!Ð!Õ!Ô!Ð!Ð!Ð!Ð!ˆz˜TÐ!Ñ!Ô!Ð!Õ!Ô!Ñ!Ô!Ð!Ð!Õ!Ô!ˆzÑ!Ô!Ð!Õ!Ô!ˆzÑ!Ô!Ð!Ð!Õ!Ô!˜TÑ!Ô!Ð!Ð!Ñ!Ð!Ð!Ð!Ð!Ð!Ñ!Ð!Õ!Õ!Ô!Ð!Ñ!Ô!Ñ!Ô!Ð!Ð!Ð!Ð!Ð!Ø0Ð:Ð0°FÐ:Ð:Ð:Ð:Õ:Ô:Ð:Ð:Ð:Ð:Ð0°FÐ:Ñ:Ô:Õ:Ô:Ð0Ñ:Ô:Ð:Õ:Ô:Ñ:Ô:Ð:Ð:Õ:Ô:°FÑ:Ô:Ð:Õ:Ô:°FÑ:Ô:Ð:Ð:Ð:Ð:Ñ:Ð:Ð:Ð:Ð:Ð:Ñ:Ð:Õ:Õ:Ô:Ð:Ñ:Ô:Ñ:Ô:Ð:Ð:Ð:Ð:Ð:Ð:Ð:r   c                ó  — t          ddd¬¦  «        }g d¢}|D ]\  }}|                     ||d¬¦  «         Œ|                     dd	d
dd¬¦  «         |                     dd¬¦  «        \  }}d}||u }|s—t          j        d|fd||f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        dœz  }	dd|	iz  }
t          t          j
        |
¦  «        ¦  «        ‚dx}}|                     dd	ddd¬¦  «         |                     dd¬¦  «        \  }}d}||u }|s—t          j        d|fd||f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        dœz  }	dd|	iz  }
t          t          j
        |
¦  «        ¦  «        ‚dx}}d}||v }|s—t          j        d|fd||f¦  «        t          j        |¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndd œz  }	dd|	iz  }
t          t          j
        |
¦  «        ¦  «        ‚dx}}dS )!uN   Cá»•ng 2: Minimap Fog Exploration >= 85% + elapsed >= 90s + traverse >= 1200u.r!   rÂ   rÃ   rÄ   rÞ   ra   râ   g     @•@rL   é   ç333333ã?rN   rÉ   rÏ   Frp   rÑ   rÒ   rÓ   rˆ   r‰   Ng     h•@rá   g®Gáz®ë?g     €a@Tz86.5%rµ   rå   rÕ   r†   rØ   )r    rÛ   ræ   rç   rè   rÒ   Ú_r¤   r§   r®   r¯   rÕ   r¢   s                r   Ú4test_gate2_fog_coverage_reaches_85_percent_after_90szTTestInvMapLegitimateClear4Gates.test_gate2_fog_coverage_reaches_85_percent_after_90s  s)  € å%°tÈTÐflÐmÑmÔmˆ	ð
ð 
ð 
ˆ	ð  ð 	Lð 	L‰FˆB�Ø×&Ò&¨R°rÈÐ&ÑKÔKÐKÐKð 	×"Ò"¨°uÈAÐ^bÐlpÐ"ÑqÔqÐqØ!×0Ò0¸TÈ4Ð0ÑPÔP‰ˆ
�AØ"Ð"ˆz˜UÐ"Ð"Ð"Ð"Õ"Ô"Ð"Ð"Ð"Ð"ˆz˜UÐ"Ñ"Ô"Ð"Õ"Ô"Ñ"Ô"Ð"Ð"Õ"Ô"ˆzÑ"Ô"Ð"Õ"Ô"ˆzÑ"Ô"Ð"Ð"Õ"Ô"˜UÑ"Ô"Ð"Ð"Ñ"Ð"Ð"Ð"Ð"Ð"Ñ"Ð"Õ"Õ"Ô"Ð"Ñ"Ô"Ñ"Ô"Ð"Ð"Ð"Ð"Ð"ð 	×"Ò"¨°uÈAÐ^cÐmrÐ"ÑsÔsÐsØ&×5Ò5À%ÐQVÐ5ÑWÔWÑˆ
�FØ!Ð!ˆz˜TÐ!Ð!Ð!Ð!Õ!Ô!Ð!Ð!Ð!Ð!ˆz˜TÐ!Ñ!Ô!Ð!Õ!Ô!Ñ!Ô!Ð!Ð!Õ!Ô!ˆzÑ!Ô!Ð!Õ!Ô!ˆzÑ!Ô!Ð!Ð!Õ!Ô!˜TÑ!Ô!Ð!Ð!Ñ!Ð!Ð!Ð!Ð!Ð!Ñ!Ð!Õ!Õ!Ô!Ð!Ñ!Ô!Ñ!Ô!Ð!Ð!Ð!Ð!Ð!ØÐ ˆw˜&Ð Ð Ð Ð Õ Ô Ð Ð Ð Ð ˆw˜&Ð Ñ Ô Õ Ô ˆwÑ Ô Ð Õ Ô Ñ Ô Ð Ð Õ Ô ˜&Ñ Ô Ð Õ Ô ˜&Ñ Ô Ð Ð Ð Ð Ñ Ð Ð Ð Ð Ð Ñ Ð Õ Õ Ô Ð Ñ Ô Ñ Ô Ð Ð Ð Ð Ð Ð Ð r   c                ó*  — t          dd¬¦  «        }g d¢}|D ]\  }}|                     ||d¬¦  «         Œ|j        }d}||k    }|sªt          j        d|fd||f¦  «        d	t          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nd	t          j        |¦  «        t          j        |¦  «        d
œz  }dd|iz  }	t          t          j
        |	¦  «        ¦  «        ‚dx}x}}|                     dddd¬¦  «         |                     dd¬¦  «        \  }
}d}|
|u }|s—t          j        d|fd|
|f¦  «        dt          j        ¦   «         v st          j        |
¦  «        rt          j        |
¦  «        ndt          j        |¦  «        dœz  }dd|iz  }t          t          j
        |¦  «        ¦  «        ‚dx}}d}||v }|s—t          j        d|fd||f¦  «        t          j        |¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndd œz  }dd|iz  }t          t          j
        |¦  «        ¦  «        ‚dx}}d!}||v }|s—t          j        d|fd||f¦  «        t          j        |¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndd œz  }dd|iz  }t          t          j
        |¦  «        ¦  «        ‚dx}}dS )"uO   Cá»•ng 3: QuÃ£ng Ä‘Æ°á»�ng tuáº§n tra >= 1200u + C++ Core State 9 + Boss Slain.r!   rÃ   ©rÅ   rÇ   rÞ   ra   râ   ©ú>=©z@%(py2)s
{%(py2)s = %(py0)s.total_distance_traversed
} >= %(py5)srÛ   ©rv   rw   r‰   úassert %(py7)srx   Nrã   rL   r   T)rÊ   rË   rÌ   r×   g     @Z@é	   )rÐ   Úcore_lifecycle_staterp   rÑ   rÒ   rÓ   rˆ   r‰   rä   rµ   rå   rÕ   r†   zState=9)r   rÙ   Útotal_distance_traversedr—   r˜   rœ   r�   rž   r™   rš   r›   rÚ   )r    rÛ   ræ   rç   rè   r§   Ú@py_assert4r£   r¯   rª   rÒ   rÕ   r¤   r®   r¢   s                  r   Ú7test_gate3_traversed_distance_and_core_signal_after_90szWTestInvMapLegitimateClear4Gates.test_gate3_traversed_distance_and_core_signal_after_90s  sÉ  € å%°tÐPVÐWÑWÔWˆ	ð
ð 
ð 
ˆ	ð  ð 	Lð 	L‰FˆB�Ø×&Ò&¨R°rÈÐ&ÑKÔKÐKÐKàÔ1Ð;°VÐ;Ð1°VÒ;Ð;Ð;Ð;Õ;Ô;Ð;Ð;Ð;Ð;Ð1°VÐ;Ñ;Ô;Ð;Õ;Ô;Ñ;Ô;Ð;Ð;Õ;Ô;ˆyÑ;Ô;Ð;Õ;Ô;ˆyÑ;Ô;Ð;Ð;Õ;Ô;Ð1Ñ;Ô;Õ;Ô;°VÑ;Ô;Ð;Ð;Ñ;Ð;Ð;Ð;Ð;Ð;Ñ;Ð;Õ;Õ;Ô;Ð;Ñ;Ô;Ñ;Ô;Ð;Ð;Ð;Ð;Ð;Ð;Ð;ð 	×"Ò"¨°uÈAÐZ^Ð"Ñ_Ô_Ð_Ø&×5Ò5À%Ð^_Ð5Ñ`Ô`Ñˆ
�FØ!Ð!ˆz˜TÐ!Ð!Ð!Ð!Õ!Ô!Ð!Ð!Ð!Ð!ˆz˜TÐ!Ñ!Ô!Ð!Õ!Ô!Ñ!Ô!Ð!Ð!Õ!Ô!ˆzÑ!Ô!Ð!Õ!Ô!ˆzÑ!Ô!Ð!Ð!Õ!Ô!˜TÑ!Ô!Ð!Ð!Ñ!Ð!Ð!Ð!Ð!Ð!Ñ!Ð!Õ!Õ!Ô!Ð!Ñ!Ô!Ñ!Ô!Ð!Ð!Ð!Ð!Ð!Ø0Ð:Ð0°FÐ:Ð:Ð:Ð:Õ:Ô:Ð:Ð:Ð:Ð:Ð0°FÐ:Ñ:Ô:Õ:Ô:Ð0Ñ:Ô:Ð:Õ:Ô:Ñ:Ô:Ð:Ð:Õ:Ô:°FÑ:Ô:Ð:Õ:Ô:°FÑ:Ô:Ð:Ð:Ð:Ð:Ñ:Ð:Ð:Ð:Ð:Ð:Ñ:Ð:Õ:Õ:Ô:Ð:Ñ:Ô:Ñ:Ô:Ð:Ð:Ð:Ð:Ð:ØÐ"ˆy˜FÐ"Ð"Ð"Ð"Õ"Ô"Ð"Ð"Ð"Ð"ˆy˜FÐ"Ñ"Ô"Õ"Ô"ˆyÑ"Ô"Ð"Õ"Ô"Ñ"Ô"Ð"Ð"Õ"Ô"˜FÑ"Ô"Ð"Õ"Ô"˜FÑ"Ô"Ð"Ð"Ð"Ð"Ñ"Ð"Ð"Ð"Ð"Ð"Ñ"Ð"Õ"Õ"Ô"Ð"Ñ"Ô"Ñ"Ô"Ð"Ð"Ð"Ð"Ð"Ð"Ð"r   c                ó¬  — t          dd¬¦  «        }t          d¦  «        D ] }|                     d|dz  z   dd¬¦  «         Œ!|j        }d}||k    }|sªt	          j        d	|fd
||f¦  «        dt          j        ¦   «         v st	          j        |¦  «        rt	          j	        |¦  «        ndt	          j	        |¦  «        t	          j	        |¦  «        dœz  }dd|iz  }t          t	          j        |¦  «        ¦  «        ‚dx}x}}|                     ddddd¬¦  «         |                     dd¬¦  «        \  }}	d}
||
u }|s—t	          j        d|fd||
f¦  «        dt          j        ¦   «         v st	          j        |¦  «        rt	          j	        |¦  «        ndt	          j	        |
¦  «        dœz  }dd|iz  }t          t	          j        |¦  «        ¦  «        ‚dx}}
|                     ddddd¬¦  «         |                     dd¬¦  «        \  }}d }
||
u }|s—t	          j        d|fd||
f¦  «        dt          j        ¦   «         v st	          j        |¦  «        rt	          j	        |¦  «        ndt	          j	        |
¦  «        dœz  }dd|iz  }t          t	          j        |¦  «        ¦  «        ‚dx}}
d!}||v }
|
s—t	          j        d"|
fd#||f¦  «        t	          j	        |¦  «        d$t          j        ¦   «         v st	          j        |¦  «        rt	          j	        |¦  «        nd$d%œz  }dd|iz  }t          t	          j        |¦  «        ¦  «        ‚dx}}
dS )&uW   Cá»•ng 4: QuÃ£ng Ä‘Æ°á»�ng >= 1200u + 25s yÃªn áº¯ng liÃªn tá»¥c + sÆ°Æ¡ng má»Ÿ >= 80%.r!   rÃ   rð   é   rL   g     €k@rD   râ   rñ   ró   rÛ   rô   rõ   rx   Ng     ¨–@r   gffffffæ?rÉ   g     À\@rÏ   Frp   rÑ   rÒ   rÓ   rˆ   r‰   g     Ð–@g=
×£p=ê?g     €_@Tu   hoÃ n toÃ n yÃªn áº¯ngrµ   rå   rÕ   r†   )r   ÚrangerÙ   rø   r—   r˜   rœ   r�   rž   r™   rš   r›   rÚ   )r    rÛ   Ústepr§   rù   r£   r¯   rª   rÒ   rí   r¤   r®   rÕ   r¢   s                 r   Ú,test_gate4_quiet_area_after_extensive_patrolzLTestInvMapLegitimateClear4Gates.test_gate4_quiet_area_after_extensive_patrol2  s  € å%°tÐPVÐWÑWÔWˆ	õ ˜!‘H”Hð 	að 	aˆDØ×&Ò&¨U°T¸E±\Ñ-AÈÐ^_Ð&Ñ`Ô`Ð`Ð`ØÔ1Ð;°VÐ;Ð1°VÒ;Ð;Ð;Ð;Õ;Ô;Ð;Ð;Ð;Ð;Ð1°VÐ;Ñ;Ô;Ð;Õ;Ô;Ñ;Ô;Ð;Ð;Õ;Ô;ˆyÑ;Ô;Ð;Õ;Ô;ˆyÑ;Ô;Ð;Ð;Õ;Ô;Ð1Ñ;Ô;Õ;Ô;°VÑ;Ô;Ð;Ð;Ñ;Ð;Ð;Ð;Ð;Ð;Ñ;Ð;Õ;Õ;Ô;Ð;Ñ;Ô;Ñ;Ô;Ð;Ð;Ð;Ð;Ð;Ð;Ð;ð 	×"Ò"¨°uÈAÐ^bÐlqÐ"ÑrÔrÐrð "×0Ò0¸UÈEÐ0ÑRÔR‰ˆ
�AØ"Ð"ˆz˜UÐ"Ð"Ð"Ð"Õ"Ô"Ð"Ð"Ð"Ð"ˆz˜UÐ"Ñ"Ô"Ð"Õ"Ô"Ñ"Ô"Ð"Ð"Õ"Ô"ˆzÑ"Ô"Ð"Õ"Ô"ˆzÑ"Ô"Ð"Ð"Õ"Ô"˜UÑ"Ô"Ð"Ð"Ñ"Ð"Ð"Ð"Ð"Ð"Ñ"Ð"Õ"Õ"Ô"Ð"Ñ"Ô"Ñ"Ô"Ð"Ð"Ð"Ð"Ð"ð 	×"Ò"¨°uÈAÐ^bÐlqÐ"ÑrÔrÐrØ&×5Ò5À%ÐQVÐ5ÑWÔWÑˆ
�FØ!Ð!ˆz˜TÐ!Ð!Ð!Ð!Õ!Ô!Ð!Ð!Ð!Ð!ˆz˜TÐ!Ñ!Ô!Ð!Õ!Ô!Ñ!Ô!Ð!Ð!Õ!Ô!ˆzÑ!Ô!Ð!Õ!Ô!ˆzÑ!Ô!Ð!Ð!Õ!Ô!˜TÑ!Ô!Ð!Ð!Ñ!Ð!Ð!Ð!Ð!Ð!Ñ!Ð!Õ!Õ!Ô!Ð!Ñ!Ô!Ñ!Ô!Ð!Ð!Ð!Ð!Ð!Ø'Ð1Ð'¨6Ð1Ð1Ð1Ð1Õ1Ô1Ð1Ð1Ð1Ð1Ð'¨6Ð1Ñ1Ô1Õ1Ô1Ð'Ñ1Ô1Ð1Õ1Ô1Ñ1Ô1Ð1Ð1Õ1Ô1¨6Ñ1Ô1Ð1Õ1Ô1¨6Ñ1Ô1Ð1Ð1Ð1Ð1Ñ1Ð1Ð1Ð1Ð1Ð1Ñ1Ð1Õ1Õ1Ô1Ð1Ñ1Ô1Ñ1Ô1Ð1Ð1Ð1Ð1Ð1Ð1Ð1r   N)	r»   r¼   r½   r¾   rÜ   ré   rî   rú   rÿ   r   r   r   rÀ   rÀ   á   se   € € € € € ØfÐfðð ð ð ;ð ;ð ;ð$!ð !ð !ð.#ð #ð #ð*2ð 2ð 2ð 2ð 2r   rÀ   c                  ó$   — e Zd ZdZd„ Zd„ Zd„ ZdS )Ú'TestInvWasdNoBlindLmbProximityInterlockuc   Kiá»ƒm tra báº¥t biáº¿n INV-WASD-NO-BLIND-LMB: Tiáº¿p cáº­n Stash vÃ  Map Device dÃ¹ng WASD <= 18u.c                óÎ  ‡— ddl m} ddlm} |                     ddd¬¦  «        Š |dd	ˆfd
„¬¦  «        }t          d¬¦  «        |_        t          ¦   «         |_        t          dd¬¦  «        5  t          d¦  «        5 }t          j	        |j
        dddg¬¦  «        5  t          d¦  «        5  |                     ‰d¬¦  «        }d}||u }|s—t          j        d|fd||f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        dœz  }dd|iz  }	t%          t          j        |	¦  «        ¦  «        ‚dx}}|j        }d}
||
k    }|sªt          j        d|fd ||
f¦  «        d!t          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nd!t          j        |¦  «        t          j        |
¦  «        d"œz  }	d#d$|	iz  }t%          t          j        |¦  «        ¦  «        ‚dx}x}}
|j        }|j        }d}||k    }|s½t          j        d|fd%||f¦  «        d&t          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nd&t          j        |¦  «        t          j        |¦  «        t          j        |¦  «        d'œz  }d(d)|iz  }t%          t          j        |¦  «        ¦  «        ‚dx}x}x}}ddd¦  «         n# 1 swxY w Y   ddd¦  «         n# 1 swxY w Y   ddd¦  «         n# 1 swxY w Y   ddd¦  «         dS # 1 swxY w Y   dS )*uf   StashOrchestrator: Khi nhÃ¢n váº­t cÃ¡ch Stash > 200px, báº¯t buá»™c dÃ¹ng WASD tiáº¿p cáº­n trÆ°á»›c.r   )ÚStashOrchestrator)ÚImageÚRGB)r   r   )é   r  r  )Úcolorr   r   c                 ó   •— ‰ S )Nr   )Úmock_imgs   €r   ú<lambda>zpTestInvWasdNoBlindLmbProximityInterlock.test_stash_approach_uses_wasd_when_distance_over_200px.<locals>.<lambda>Z  s   ø€  € r   )r"   r#   Úcapture_funcTr)   z?src.assistant_tool.stash.stash_orchestrator.find_button_by_text)i  i,  z*src.common.win32_input.send_wasd_directionÚis_stash_openF)Úside_effectr`   g      ð?)Úimg_currentÚtimeout_secrp   rÑ   ÚopenedrÓ   rˆ   r‰   NrM   rñ   )z2%(py2)s
{%(py2)s = %(py0)s.call_count
} >= %(py5)sÚ	mock_wasdrô   rõ   rx   )zN%(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s._click
}.call_count
} >= %(py7)sÚorchestratorru   ry   rz   )Ú+src.assistant_tool.stash.stash_orchestratorr  ÚPILr  Únewr	   Ú_ensure_focusÚ_clickr   ÚobjectÚ
ui_scannerÚ
open_stashr—   r˜   rœ   r�   rž   r™   rš   r›   rŸ   )r    r  r  r  r  r  r¤   r§   r®   r¯   rù   r£   rª   r¨   r©   r«   r	  s                   @r   Ú6test_stash_approach_uses_wasd_when_distance_over_200pxz^TestInvWasdNoBlindLmbProximityInterlock.test_stash_approach_uses_wasd_when_distance_over_200pxQ  s=  ø€ àQÐQÐQÐQÐQÐQØÐÐÐÐÐà—9’9˜U L¸�9ÑEÔEˆØ(Ð(ØØØ)Ð)Ð)Ð)ð
ñ 
ô 
ˆõ
 &/¸DÐ%AÑ%AÔ%AˆÔ"Ý'™kœkˆÔõ ÐTÐcnÐoÑoÔoð 		Cð 		CÝÐCÑDÔDð CÈ	Ý”\ ,Ô"9¸?ÐY^Ð`dÐXeÐfÑfÔfð Cð CÝ˜|Ñ,Ô,ð Cð CØ!-×!8Ò!8ÀXÐ[^Ð!8Ñ!_Ô!_˜Ø)-Ð-˜v¨˜~Ð-Ð-Ð-Õ-Ô-Ð-Ð-Ð-Ð-˜v¨Ð-Ñ-Ô-Ð-Õ-Ô-Ñ-Ô-Ð-Ð-Õ-Ô-˜vÑ-Ô-Ð-Õ-Ô-˜vÑ-Ô-Ð-Ð-Õ-Ô-¨Ñ-Ô-Ð-Ð-Ñ-Ð-Ð-Ð-Ð-Ð-Ñ-Ð-Õ-Õ-Ô-Ð-Ñ-Ô-Ñ-Ô-Ð-Ð-Ð-Ð-Ð-à(Ô3Ð8°qÐ8Ð3°qÒ8Ð8Ð8Ð8Õ8Ô8Ð8Ð8Ð8Ð8Ð3°qÐ8Ñ8Ô8Ð8Õ8Ô8Ñ8Ô8Ð8Ð8Õ8Ô8˜yÑ8Ô8Ð8Õ8Ô8˜yÑ8Ô8Ð8Ð8Õ8Ô8Ð3Ñ8Ô8Õ8Ô8°qÑ8Ô8Ð8Ð8Ñ8Ð8Ð8Ð8Ð8Ð8Ñ8Ð8Õ8Õ8Ô8Ð8Ñ8Ô8Ñ8Ô8Ð8Ð8Ð8Ð8Ð8Ð8Ð8à+Ô2ÐBÐ2Ô=ÐBÀÐBÐ=ÀÒBÐBÐBÐBÕBÔBÐBÐBÐBÐBÐ=ÀÐBÑBÔBÐBÕBÔBÑBÔBÐBÐBÕBÔB˜|ÑBÔBÐBÕBÔB˜|ÑBÔBÐBÐBÕBÔBÐ2ÑBÔBÕBÔBÐ=ÑBÔBÕBÔBÀÑBÔBÐBÐBÑBÐBÐBÐBÐBÐBÑBÐBÕBÕBÔBÐBÑBÔBÑBÔBÐBÐBÐBÐBÐBÐBÐBÐBÐBðCð Cð Cñ Cô Cð Cð Cð Cð Cð Cð Cøøøð Cð Cð Cð CðCð Cð Cñ Cô Cð Cð Cð Cð Cð Cð Cøøøð Cð Cð Cð CðCð Cð Cñ Cô Cð Cð Cð Cð Cð Cð Cøøøð Cð Cð Cð Cð		Cð 		Cð 		Cñ 		Cô 		Cð 		Cð 		Cð 		Cð 		Cð 		Cð 		Cð 		Cøøøð 		Cð 		Cð 		Cð 		Cð 		Cð 		Cs   Á0MÂ MÂL+Â/IL	ÌL+ÌLÌL+ÌLÌL+ÌMÌ+L/Ì/MÌ2L/Ì3MÌ6MÍM	ÍMÍ	M	Í
MÍMÍ!Mc                óF  — |d         }t          d¬¦  «        |_        t          d¬¦  «        |_        t          d¬¦  «        |_        t          d¬¦  «        |_        t          d¬¦  «        |_        t          d¬¦  «        |_        t          ¦   «         |_        t          ¦   «         |_        t          ¦   «         |_	        t          d¦  «        5  |                     ¦   «         }d	d	d	¦  «         n# 1 swxY w Y   |d
         }d}||k    }|slt          j        d|fd||f¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d	x}x}}|d         }d}||u }|slt          j        d|fd||f¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d	x}x}}|j                             dddddd¬¦  «         d	S )ua   MapDevice: Khi nhÃ¢n váº­t cÃ¡ch Map Device > 18.0u, báº¯t buá»™c dÃ¹ng WASD tiáº¿p cáº­n <= 18u.r-   rß   r)   )ç     à`@rL   TF)i°  iX  r`   NrE   rC   re   rg   rh   rk   rl   rU   rp   rr   rL   r  ç      2@g       @)Úinteract_radiusÚmax_duration_sec)r	   Úget_player_world_posÚfind_map_device_world_posÚ%navigate_towards_with_tangent_slidingÚ_core_owns_map_device_loopÚis_atlas_ui_openÚfind_map_device_screen_posÚhoverÚclickÚdynamic_camera_zoomr   r‘   r—   r˜   r™   rš   r›   Úassert_called_once_with)	r    r?   r-   Úresr¢   r£   r¤   r¥   r¦   s	            r   Ú?test_map_device_approach_uses_wasd_when_world_distance_over_18uzgTestInvWasdNoBlindLmbProximityInterlock.test_map_device_approach_uses_wasd_when_world_distance_over_18uk  s¡  € à4CÀMÔ4Rˆõ ,5À.Ð+QÑ+QÔ+QˆÔ(Ý09À~Ð0VÑ0VÔ0VˆÔ-Ý<EÐSWÐ<XÑ<XÔ<XˆÔ9Ý1:ÈÐ1NÑ1NÔ1NˆÔ.Ý'0¸dÐ'CÑ'CÔ'CˆÔ$Ý1:ÈÐ1TÑ1TÔ1TˆÔ.Ý%™KœKˆÔÝ%™KœKˆÔÝ*3©+¬+ˆÔ'å�<Ñ Ô ð 	:ð 	:Ø×7Ò7Ñ9Ô9ˆCð	:ð 	:ð 	:ñ 	:ô 	:ð 	:ð 	:ð 	:ð 	:ð 	:ð 	:øøøð 	:ð 	:ð 	:ð 	:ð �8Œ}Ð) 	Ð)ˆ} 	Ò)Ð)Ð)Ð)Õ)Ô)Ð)Ð)Ð)Ð)ˆ} 	Ð)Ñ)Ô)Õ)Ô)ˆ}Ñ)Ô)Õ)Ô) 	Ñ)Ô)Ð)Ð)Ñ)Ð)Ð)Ð)Ð)Ð)Ñ)Ð)Õ)Õ)Ô)Ð)Ñ)Ô)Ñ)Ô)Ð)Ð)Ð)Ð)Ð)Ð)Ð)Ø�<Ô Ð( DÐ(Ð  DÐ(Ð(Ð(Ð(Õ(Ô(Ð(Ð(Ð(Ð(Ð  DÐ(Ñ(Ô(Õ(Ô(Ð Ñ(Ô(Õ(Ô( DÑ(Ô(Ð(Ð(Ñ(Ð(Ð(Ð(Ð(Ð(Ñ(Ð(Õ(Õ(Ô(Ð(Ñ(Ô(Ñ(Ô(Ð(Ð(Ð(Ð(Ð(Ð(Ð(àÔ9×QÒQØ�5˜% ¸Èsð 	Rñ 	
ô 	
ð 	
ð 	
ð 	
s   ÃC0Ã0C4Ã7C4c                ó"
  — t          ¦   «         }|                     dddd¬¦  «        }|j        }t          j        }||k    }|sòt          j        d|fd||f¦  «        dt          j        ¦   «         v st          j	        |¦  «        rt          j
        |¦  «        ndt          j
        |¦  «        dt          j        ¦   «         v st          j	        t          ¦  «        rt          j
        t          ¦  «        ndt          j
        |¦  «        d	œz  }d
d|iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}}d}|j        }	||	v }
|
sªt          j        d|
fd||	f¦  «        t          j
        |¦  «        dt          j        ¦   «         v st          j	        |¦  «        rt          j
        |¦  «        ndt          j
        |	¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}
}	d}|j        }	||	v }
|
sªt          j        d|
fd||	f¦  «        t          j
        |¦  «        dt          j        ¦   «         v st          j	        |¦  «        rt          j
        |¦  «        ndt          j
        |	¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}
}	|                     ddd¬¦  «        }|j        }t          j        }||k    }|sòt          j        d|fd||f¦  «        dt          j        ¦   «         v st          j	        |¦  «        rt          j
        |¦  «        ndt          j
        |¦  «        dt          j        ¦   «         v st          j	        t          ¦  «        rt          j
        t          ¦  «        ndt          j
        |¦  «        d	œz  }d
d|iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}}|                     ddd¬¦  «        }|j        }t          j        }||k    }|sòt          j        d|fd||f¦  «        dt          j        ¦   «         v st          j	        |¦  «        rt          j
        |¦  «        ndt          j
        |¦  «        dt          j        ¦   «         v st          j	        t          ¦  «        rt          j
        t          ¦  «        ndt          j
        |¦  «        d	œz  }d
d|iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}}dS )ud   MasterInvariantsSentinel xÃ¡c nháº­n cá»± ly tiáº¿p cáº­n cáº£ Stash vÃ  Map Device Ä‘á»�u <= 18.0u.g      )@g      ,@T)Úapproach_distÚstash_approach_distÚmap_device_approach_distÚblind_lmb_preventedre   ©zJ%(py2)s
{%(py2)s = %(py0)s.status
} == %(py6)s
{%(py6)s = %(py4)s.PASSED
}Úres_okr   ©rv   rw   rj   rl   úassert %(py8)sÚpy8NzStash=14.0u <= 18urµ   ©z0%(py1)s in %(py5)s
{%(py5)s = %(py3)s.evidence
}©ri   r‡   r‰   rõ   rx   zMapDevice=12.5u <= 18ug      6@g      (@)r.  r/  r0  ©zK%(py2)s
{%(py2)s = %(py0)s.status
} == %(py6)s
{%(py6)s = %(py4)s.BLOCKED
}Úres_fail_stashg      9@Úres_fail_dev)r   Úaudit_inv_wasd_no_blind_lmbrE   r   ÚPASSEDr—   r˜   rœ   r�   rž   r™   rš   r›   ÚevidenceÚBLOCKED)r    Úsentinelr3  r§   r©   r£   r¦   Ú@py_format9r¢   rù   r¤   r¯   rª   r:  r;  s                  r   ÚKtest_master_sentinel_audits_wasd_no_blind_lmb_for_both_stash_and_map_devicezsTestInvWasdNoBlindLmbProximityInterlock.test_master_sentinel_audits_wasd_no_blind_lmb_for_both_stash_and_map_device„  sª  € å+Ñ-Ô-ˆð ×5Ò5ØØ $Ø%)Ø $ð	 6ñ 
ô 
ˆð Œ}Ð6¥Ô 6Ð6ˆ}Ð 6Ò6Ð6Ð6Ð6Õ6Ô6Ð6Ð6Ð6Ð6ˆ}Ð 6Ð6Ñ6Ô6Ð6Õ6Ô6Ñ6Ô6Ð6Ð6Õ6Ô6ˆvÑ6Ô6Ð6Õ6Ô6ˆvÑ6Ô6Ð6Ð6Õ6Ô6ˆ}Ñ6Ô6Ð6Õ6Ô6Ñ6Ô6Ð6Ð6Õ6Ô6¥Ñ6Ô6Ð6Õ6Ô6¥Ñ6Ô6Ð6Ð6Õ6Ô6Ð 6Ñ6Ô6Ð6Ð6Ñ6Ð6Ð6Ð6Ð6Ð6Ñ6Ð6Õ6Õ6Ô6Ð6Ñ6Ô6Ñ6Ô6Ð6Ð6Ð6Ð6Ð6Ð6Ð6Ø#Ð6 v¤Ð6Ð# Ð6Ð6Ð6Ð6Õ6Ô6Ð6Ð6Ð6Ð6Ð# Ð6Ñ6Ô6Õ6Ô6Ð#Ñ6Ô6Ð6Õ6Ô6Ñ6Ô6Ð6Ð6Õ6Ô6 vÑ6Ô6Ð6Õ6Ô6 vÑ6Ô6Ð6Ð6Õ6Ô6 Ñ6Ô6Ð6Ð6Ñ6Ð6Ð6Ð6Ð6Ð6Ñ6Ð6Õ6Õ6Ô6Ð6Ñ6Ô6Ñ6Ô6Ð6Ð6Ð6Ð6Ð6Ð6Ð6Ø'Ð:¨6¬?Ð:Ð'¨?Ð:Ð:Ð:Ð:Õ:Ô:Ð:Ð:Ð:Ð:Ð'¨?Ð:Ñ:Ô:Õ:Ô:Ð'Ñ:Ô:Ð:Õ:Ô:Ñ:Ô:Ð:Ð:Õ:Ô:¨6Ñ:Ô:Ð:Õ:Ô:¨6Ñ:Ô:Ð:Ð:Õ:Ô:¨?Ñ:Ô:Ð:Ð:Ñ:Ð:Ð:Ð:Ð:Ð:Ñ:Ð:Õ:Õ:Ô:Ð:Ñ:Ô:Ñ:Ô:Ð:Ð:Ð:Ð:Ð:Ð:Ð:ð "×=Ò=ØØ $Ø%)ð >ñ 
ô 
ˆð
 Ô$Ð?­Ô(?Ð?Ð$Ð(?Ò?Ð?Ð?Ð?Õ?Ô?Ð?Ð?Ð?Ð?Ð$Ð(?Ð?Ñ?Ô?Ð?Õ?Ô?Ñ?Ô?Ð?Ð?Õ?Ô?ˆ~Ñ?Ô?Ð?Õ?Ô?ˆ~Ñ?Ô?Ð?Ð?Õ?Ô?Ð$Ñ?Ô?Ð?Õ?Ô?Ñ?Ô?Ð?Ð?Õ?Ô?­Ñ?Ô?Ð?Õ?Ô?­Ñ?Ô?Ð?Ð?Õ?Ô?Ð(?Ñ?Ô?Ð?Ð?Ñ?Ð?Ð?Ð?Ð?Ð?Ñ?Ð?Õ?Õ?Ô?Ð?Ñ?Ô?Ñ?Ô?Ð?Ð?Ð?Ð?Ð?Ð?Ð?ð  ×;Ò;ØØ $Ø%)ð <ñ 
ô 
ˆð
 Ô"Ð=¥oÔ&=Ð=Ð"Ð&=Ò=Ð=Ð=Ð=Õ=Ô=Ð=Ð=Ð=Ð=Ð"Ð&=Ð=Ñ=Ô=Ð=Õ=Ô=Ñ=Ô=Ð=Ð=Õ=Ô=ˆ|Ñ=Ô=Ð=Õ=Ô=ˆ|Ñ=Ô=Ð=Ð=Õ=Ô=Ð"Ñ=Ô=Ð=Õ=Ô=Ñ=Ô=Ð=Ð=Õ=Ô=¥oÑ=Ô=Ð=Õ=Ô=¥oÑ=Ô=Ð=Ð=Õ=Ô=Ð&=Ñ=Ô=Ð=Ð=Ñ=Ð=Ð=Ð=Ð=Ð=Ñ=Ð=Õ=Õ=Ô=Ð=Ñ=Ô=Ñ=Ô=Ð=Ð=Ð=Ð=Ð=Ð=Ð=Ð=Ð=r   N)r»   r¼   r½   r¾   r  r,  rB  r   r   r   r  r  N  sJ   € € € € € ØmÐmðCð Cð Cð4
ð 
ð 
ð2>ð >ð >ð >ð >r   r  c                  ó   — e Zd ZdZd„ Zd„ ZdS )ÚTestInvFocusSafetySeparationu|   Kiá»ƒm tra báº¥t biáº¿n INV-FOCUS-SAFETY-SEPARATION: Báº£o Ä‘áº£m khÃ´ng rÃ² rá»‰ báº¥t ká»³ input chuá»™t/phÃ­m ra desktop.c                óz  — t          ¦   «         }|                     dddd¬¦  «        }|j        }t          j        }||k    }|sòt          j        d|fd||f¦  «        dt          j        ¦   «         v st          j	        |¦  «        rt          j
        |¦  «        ndt          j
        |¦  «        dt          j        ¦   «         v st          j	        t          ¦  «        rt          j
        t          ¦  «        ndt          j
        |¦  «        dœz  }dd	|iz  }t          t          j        |¦  «        ¦  «        ‚d
x}x}}|j        }d}||k    }|sªt          j        d|fd||f¦  «        dt          j        ¦   «         v st          j	        |¦  «        rt          j
        |¦  «        ndt          j
        |¦  «        t          j
        |¦  «        dœz  }	dd|	iz  }
t          t          j        |
¦  «        ¦  «        ‚d
x}x}}d}|j        }||v }|sªt          j        d|fd||f¦  «        t          j
        |¦  «        dt          j        ¦   «         v st          j	        |¦  «        rt          j
        |¦  «        ndt          j
        |¦  «        dœz  }	dd|	iz  }
t          t          j        |
¦  «        ¦  «        ‚d
x}x}}d
S )uu   Chá»‰ cháº·n KeyDown/MouseDown khi máº¥t tiÃªu Ä‘iá»ƒm; KeyUp/MouseUp luÃ´n Ä‘Æ°á»£c gá»­i Ä‘á»ƒ chá»‘ng káº¹t phÃ­m.T)Úkeydown_blocked_unfocusedÚkeyup_allowed_unfocusedÚrelease_all_on_unfocusÚtwo_factor_window_checkre   r2  r+  r   r4  r5  r6  NzINV-FOCUS-SAFETY-SEPARATION©z,%(py2)s
{%(py2)s = %(py0)s.code
} == %(py5)srô   rõ   rx   u7   KhÃ´ng rÃ² rá»‰ báº¥t ká»³ KeyDown/MouseDown ra desktoprµ   r7  r8  )r   Ú!audit_inv_focus_safety_separationrE   r   r=  r—   r˜   rœ   r�   rž   r™   rš   r›   Úcoder>  )r    r@  r+  r§   r©   r£   r¦   rA  rù   r¯   rª   r¢   r¤   s                r   ÚLtest_hardware_focus_interlock_blocks_keydown_and_allows_keyup_when_unfocusedziTestInvFocusSafetySeparation.test_hardware_focus_interlock_blocks_keydown_and_allows_keyup_when_unfocused«  s  € å+Ñ-Ô-ˆà×8Ò8Ø&*Ø$(Ø#'Ø$(ð	 9ñ 
ô 
ˆð ŒzÐ3�_Ô3Ð3ˆzÐ3Ò3Ð3Ð3Ð3Õ3Ô3Ð3Ð3Ð3Ð3ˆzÐ3Ð3Ñ3Ô3Ð3Õ3Ô3Ñ3Ô3Ð3Ð3Õ3Ô3ˆsÑ3Ô3Ð3Õ3Ô3ˆsÑ3Ô3Ð3Ð3Õ3Ô3ˆzÑ3Ô3Ð3Õ3Ô3Ñ3Ô3Ð3Ð3Õ3Ô3�_Ñ3Ô3Ð3Õ3Ô3�_Ñ3Ô3Ð3Ð3Õ3Ô3Ð3Ñ3Ô3Ð3Ð3Ñ3Ð3Ð3Ð3Ð3Ð3Ñ3Ð3Õ3Õ3Ô3Ð3Ñ3Ô3Ñ3Ô3Ð3Ð3Ð3Ð3Ð3Ð3Ð3ØŒxÐ8Ð8Ð8ˆxÐ8Ò8Ð8Ð8Ð8Õ8Ô8Ð8Ð8Ð8Ð8ˆxÐ8Ð8Ñ8Ô8Ð8Õ8Ô8Ñ8Ô8Ð8Ð8Õ8Ô8ˆsÑ8Ô8Ð8Õ8Ô8ˆsÑ8Ô8Ð8Ð8Õ8Ô8ˆxÑ8Ô8Õ8Ô8Ð8Ñ8Ô8Ð8Ð8Ñ8Ð8Ð8Ð8Ð8Ð8Ñ8Ð8Õ8Õ8Ô8Ð8Ñ8Ô8Ñ8Ô8Ð8Ð8Ð8Ð8Ð8Ð8Ð8ØHÐXÈCÌLÐXÐHÈLÐXÐXÐXÐXÕXÔXÐXÐXÐXÐXÐHÈLÐXÑXÔXÕXÔXÐHÑXÔXÐXÕXÔXÑXÔXÐXÐXÕXÔXÈCÑXÔXÐXÕXÔXÈCÑXÔXÐXÐXÕXÔXÈLÑXÔXÐXÐXÑXÐXÐXÐXÐXÐXÑXÐXÕXÕXÔXÐXÑXÔXÑXÔXÐXÐXÐXÐXÐXÐXÐXÐXÐXr   c                ót  — t          ¦   «         }|                     d¬¦  «        }|j        }t          j        }||k    }|sòt          j        d|fd||f¦  «        dt          j        ¦   «         v st          j	        |¦  «        rt          j
        |¦  «        ndt          j
        |¦  «        dt          j        ¦   «         v st          j	        t          ¦  «        rt          j
        t          ¦  «        ndt          j
        |¦  «        dœz  }dd	|iz  }t          t          j        |¦  «        ¦  «        ‚d
x}x}}d
S )ue   Khi vi pháº¡m báº¥t ká»³ tiÃªu chÃ­ an toÃ n nÃ o (vÃ­ dá»¥ rÃ² rá»‰ KeyDown) -> Láº­p tá»©c BLOCKED.F)rF  re   r9  Úres_leakr   r4  r5  r6  N)r   rK  rE   r   r?  r—   r˜   rœ   r�   rž   r™   rš   r›   )r    r@  rO  r§   r©   r£   r¦   rA  s           r   ÚBtest_hardware_focus_interlock_blocks_when_safety_criteria_violatedz_TestInvFocusSafetySeparation.test_hardware_focus_interlock_blocks_when_safety_criteria_violated¹  sQ  € å+Ñ-Ô-ˆð ×=Ò=Ø&+ð >ñ 
ô 
ˆð ŒÐ9¥/Ô"9Ð9ˆÐ"9Ò9Ð9Ð9Ð9Õ9Ô9Ð9Ð9Ð9Ð9ˆÐ"9Ð9Ñ9Ô9Ð9Õ9Ô9Ñ9Ô9Ð9Ð9Õ9Ô9ˆxÑ9Ô9Ð9Õ9Ô9ˆxÑ9Ô9Ð9Ð9Õ9Ô9ˆÑ9Ô9Ð9Õ9Ô9Ñ9Ô9Ð9Ð9Õ9Ô9¥/Ñ9Ô9Ð9Õ9Ô9¥/Ñ9Ô9Ð9Ð9Õ9Ô9Ð"9Ñ9Ô9Ð9Ð9Ñ9Ð9Ð9Ð9Ð9Ð9Ñ9Ð9Õ9Õ9Ô9Ð9Ñ9Ô9Ñ9Ô9Ð9Ð9Ð9Ð9Ð9Ð9Ð9Ð9Ð9r   N)r»   r¼   r½   r¾   rM  rP  r   r   r   rD  rD  ¨  sA   € € € € € ð Gð  GðYð Yð Yð:ð :ð :ð :ð :r   rD  c                  ó$   — e Zd ZdZd„ Zd„ Zd„ ZdS )Ú+TestAutonomyReadinessScoreAndMatrixSentineluh   Kiá»ƒm tra tÃ­nh toÃ¡n Ä‘á»‹nh lÆ°á»£ng Autonomy Readiness Score (ARS) vÃ  tháº©m Ä‘á»‹nh 19 Invariants.c                óÐ
  — t          ¦   «         }|                     ¦   «         }|j        }d}||u }|sªt          j        d|fd||f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j
        |¦  «        ¦  «        ‚dx}x}}|j        }d	}||k    }|sªt          j        d
|fd||f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j
        |¦  «        ¦  «        ‚dx}x}}|j        }d	}||k    }|sªt          j        d
|fd||f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j
        |¦  «        ¦  «        ‚dx}x}}|j        }d}||k    }|sªt          j        d
|fd||f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j
        |¦  «        ¦  «        ‚dx}x}}|j        }d}||k    }|sªt          j        d
|fd||f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j
        |¦  «        ¦  «        ‚dx}x}}|j        }d}||k    }|sªt          j        d
|fd||f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j
        |¦  «        ¦  «        ‚dx}x}}d}|j        }||v }	|	sªt          j        d|	fd||f¦  «        t          j        |¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        dœz  }dd|iz  }t          t          j
        |¦  «        ¦  «        ‚dx}x}	}dS )ug   Khi toÃ n bá»™ 20 Master Invariants Ä‘á»�u PASSED -> ARS Ä‘áº¡t 100.0% vÃ  cleared_for_autonomous=True.Trp   ©zA%(py2)s
{%(py2)s = %(py0)s.is_cleared_for_autonomous
} is %(py5)sr¹   rô   rõ   rx   Nr  re   )z8%(py2)s
{%(py2)s = %(py0)s.total_invariants
} == %(py5)s)z4%(py2)s
{%(py2)s = %(py0)s.passed_count
} == %(py5)sr   ©z5%(py2)s
{%(py2)s = %(py0)s.blocked_count
} == %(py5)s)z5%(py2)s
{%(py2)s = %(py0)s.warning_count
} == %(py5)srL   ©z@%(py2)s
{%(py2)s = %(py0)s.autonomy_readiness_score
} == %(py5)sz100% VERIFIEDrµ   ©z/%(py1)s in %(py5)s
{%(py5)s = %(py3)s.summary
}r8  )r   Úaudit_all_invariantsÚis_cleared_for_autonomousr—   r˜   rœ   r�   rž   r™   rš   r›   Útotal_invariantsÚpassed_countÚblocked_countÚwarning_countÚautonomy_readiness_scoreÚsummary©
r    r@  r¹   r§   rù   r£   r¯   rª   r¢   r¤   s
             r   ÚJtest_autonomy_readiness_score_reaches_100_percent_when_all_invariants_passzvTestAutonomyReadinessScoreAndMatrixSentinel.test_autonomy_readiness_score_reaches_100_percent_when_all_invariants_passË  sG  € å+Ñ-Ô-ˆØ×.Ò.Ñ0Ô0ˆàÔ/Ð7°4Ð7Ð/°4Ð7Ð7Ð7Ð7Õ7Ô7Ð7Ð7Ð7Ð7Ð/°4Ð7Ñ7Ô7Ð7Õ7Ô7Ñ7Ô7Ð7Ð7Õ7Ô7ˆvÑ7Ô7Ð7Õ7Ô7ˆvÑ7Ô7Ð7Ð7Õ7Ô7Ð/Ñ7Ô7Õ7Ô7°4Ñ7Ô7Ð7Ð7Ñ7Ð7Ð7Ð7Ð7Ð7Ñ7Ð7Õ7Õ7Ô7Ð7Ñ7Ô7Ñ7Ô7Ð7Ð7Ð7Ð7Ð7Ð7Ð7ØÔ&Ð,¨"Ð,Ð&¨"Ò,Ð,Ð,Ð,Õ,Ô,Ð,Ð,Ð,Ð,Ð&¨"Ð,Ñ,Ô,Ð,Õ,Ô,Ñ,Ô,Ð,Ð,Õ,Ô,ˆvÑ,Ô,Ð,Õ,Ô,ˆvÑ,Ô,Ð,Ð,Õ,Ô,Ð&Ñ,Ô,Õ,Ô,¨"Ñ,Ô,Ð,Ð,Ñ,Ð,Ð,Ð,Ð,Ð,Ñ,Ð,Õ,Õ,Ô,Ð,Ñ,Ô,Ñ,Ô,Ð,Ð,Ð,Ð,Ð,Ð,Ð,ØÔ"Ð( bÐ(Ð" bÒ(Ð(Ð(Ð(Õ(Ô(Ð(Ð(Ð(Ð(Ð" bÐ(Ñ(Ô(Ð(Õ(Ô(Ñ(Ô(Ð(Ð(Õ(Ô(ˆvÑ(Ô(Ð(Õ(Ô(ˆvÑ(Ô(Ð(Ð(Õ(Ô(Ð"Ñ(Ô(Õ(Ô( bÑ(Ô(Ð(Ð(Ñ(Ð(Ð(Ð(Ð(Ð(Ñ(Ð(Õ(Õ(Ô(Ð(Ñ(Ô(Ñ(Ô(Ð(Ð(Ð(Ð(Ð(Ð(Ð(ØÔ#Ð( qÐ(Ð# qÒ(Ð(Ð(Ð(Õ(Ô(Ð(Ð(Ð(Ð(Ð# qÐ(Ñ(Ô(Ð(Õ(Ô(Ñ(Ô(Ð(Ð(Õ(Ô(ˆvÑ(Ô(Ð(Õ(Ô(ˆvÑ(Ô(Ð(Ð(Õ(Ô(Ð#Ñ(Ô(Õ(Ô( qÑ(Ô(Ð(Ð(Ñ(Ð(Ð(Ð(Ð(Ð(Ñ(Ð(Õ(Õ(Ô(Ð(Ñ(Ô(Ñ(Ô(Ð(Ð(Ð(Ð(Ð(Ð(Ð(ØÔ#Ð( qÐ(Ð# qÒ(Ð(Ð(Ð(Õ(Ô(Ð(Ð(Ð(Ð(Ð# qÐ(Ñ(Ô(Ð(Õ(Ô(Ñ(Ô(Ð(Ð(Õ(Ô(ˆvÑ(Ô(Ð(Õ(Ô(ˆvÑ(Ô(Ð(Ð(Õ(Ô(Ð#Ñ(Ô(Õ(Ô( qÑ(Ô(Ð(Ð(Ñ(Ð(Ð(Ð(Ð(Ð(Ñ(Ð(Õ(Õ(Ô(Ð(Ñ(Ô(Ñ(Ô(Ð(Ð(Ð(Ð(Ð(Ð(Ð(ØÔ.Ð7°%Ð7Ð.°%Ò7Ð7Ð7Ð7Õ7Ô7Ð7Ð7Ð7Ð7Ð.°%Ð7Ñ7Ô7Ð7Õ7Ô7Ñ7Ô7Ð7Ð7Õ7Ô7ˆvÑ7Ô7Ð7Õ7Ô7ˆvÑ7Ô7Ð7Ð7Õ7Ô7Ð.Ñ7Ô7Õ7Ô7°%Ñ7Ô7Ð7Ð7Ñ7Ð7Ð7Ð7Ð7Ð7Ñ7Ð7Õ7Õ7Ô7Ð7Ñ7Ô7Ñ7Ô7Ð7Ð7Ð7Ð7Ð7Ð7Ð7ØÐ0 &¤.Ð0ˆ .Ð0Ð0Ð0Ð0Õ0Ô0Ð0Ð0Ð0Ð0ˆ .Ð0Ñ0Ô0Õ0Ô0ˆÑ0Ô0Ð0Õ0Ô0Ñ0Ô0Ð0Ð0Õ0Ô0 &Ñ0Ô0Ð0Õ0Ô0 &Ñ0Ô0Ð0Ð0Õ0Ô0 .Ñ0Ô0Ð0Ð0Ñ0Ð0Ð0Ð0Ð0Ð0Ñ0Ð0Õ0Õ0Ô0Ð0Ñ0Ô0Ñ0Ô0Ð0Ð0Ð0Ð0Ð0Ð0Ð0Ð0Ð0r   c                óR  — t          ¦   «         }|                     ddi¬¦  «        }|j        }d}||u }|sªt          j        d|fd||f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        dœz  }dd	|iz  }t          t          j
        |¦  «        ¦  «        ‚d
x}x}}|j        }d}||k    }|sªt          j        d|fd||f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        dœz  }dd	|iz  }t          t          j
        |¦  «        ¦  «        ‚d
x}x}}|j        }d}||k    }|sªt          j        d|fd||f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        dœz  }dd	|iz  }t          t          j
        |¦  «        ¦  «        ‚d
x}x}}d}|j        }||v }	|	sªt          j        d|	fd||f¦  «        t          j        |¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        dœz  }dd	|iz  }t          t          j
        |¦  «        ¦  «        ‚d
x}x}	}d
S )ui   Fail-Closed: Báº¥t ká»³ báº¥t biáº¿n nÃ o bá»‹ BLOCKED (vÃ­ dá»¥ phÃ­m F bá»‹ rÃ² rá»‰) -> ARS vá»� 0.0%.zINV-KEY-NO-F-FOR-INTERACTF)Úcustom_overridesrp   rT  r¹   rô   rõ   rx   NrM   re   rU  ç        rV  r?  rµ   rW  r8  )r   Úaudit_all_19_invariantsrY  r—   r˜   rœ   r�   rž   r™   rš   r›   r\  r^  r_  r`  s
             r   Ú2test_fail_closed_zero_ars_on_any_blocked_invariantz^TestAutonomyReadinessScoreAndMatrixSentinel.test_fail_closed_zero_ars_on_any_blocked_invariantØ  s·  € å+Ñ-Ô-ˆà×1Ò1Ø9¸5ÐAð 2ñ 
ô 
ˆð Ô/Ð8°5Ð8Ð/°5Ð8Ð8Ð8Ð8Õ8Ô8Ð8Ð8Ð8Ð8Ð/°5Ð8Ñ8Ô8Ð8Õ8Ô8Ñ8Ô8Ð8Ð8Õ8Ô8ˆvÑ8Ô8Ð8Õ8Ô8ˆvÑ8Ô8Ð8Ð8Õ8Ô8Ð/Ñ8Ô8Õ8Ô8°5Ñ8Ô8Ð8Ð8Ñ8Ð8Ð8Ð8Ð8Ð8Ñ8Ð8Õ8Õ8Ô8Ð8Ñ8Ô8Ñ8Ô8Ð8Ð8Ð8Ð8Ð8Ð8Ð8ØÔ#Ð( qÐ(Ð# qÒ(Ð(Ð(Ð(Õ(Ô(Ð(Ð(Ð(Ð(Ð# qÐ(Ñ(Ô(Ð(Õ(Ô(Ñ(Ô(Ð(Ð(Õ(Ô(ˆvÑ(Ô(Ð(Õ(Ô(ˆvÑ(Ô(Ð(Ð(Õ(Ô(Ð#Ñ(Ô(Õ(Ô( qÑ(Ô(Ð(Ð(Ñ(Ð(Ð(Ð(Ð(Ð(Ñ(Ð(Õ(Õ(Ô(Ð(Ñ(Ô(Ñ(Ô(Ð(Ð(Ð(Ð(Ð(Ð(Ð(ØÔ.Ð5°#Ð5Ð.°#Ò5Ð5Ð5Ð5Õ5Ô5Ð5Ð5Ð5Ð5Ð.°#Ð5Ñ5Ô5Ð5Õ5Ô5Ñ5Ô5Ð5Ð5Õ5Ô5ˆvÑ5Ô5Ð5Õ5Ô5ˆvÑ5Ô5Ð5Ð5Õ5Ô5Ð.Ñ5Ô5Õ5Ô5°#Ñ5Ô5Ð5Ð5Ñ5Ð5Ð5Ð5Ð5Ð5Ñ5Ð5Õ5Õ5Ô5Ð5Ñ5Ô5Ñ5Ô5Ð5Ð5Ð5Ð5Ð5Ð5Ð5ØÐ*˜FœNÐ*ˆy˜NÐ*Ð*Ð*Ð*Õ*Ô*Ð*Ð*Ð*Ð*ˆy˜NÐ*Ñ*Ô*Õ*Ô*ˆyÑ*Ô*Ð*Õ*Ô*Ñ*Ô*Ð*Ð*Õ*Ô*˜FÑ*Ô*Ð*Õ*Ô*˜FÑ*Ô*Ð*Ð*Õ*Ô*˜NÑ*Ô*Ð*Ð*Ñ*Ð*Ð*Ð*Ð*Ð*Ñ*Ð*Õ*Õ*Ô*Ð*Ñ*Ô*Ñ*Ô*Ð*Ð*Ð*Ð*Ð*Ð*Ð*Ð*Ð*r   c                óR  — t          ¦   «         }|                     dddddd¬¦  «        }|j        }t          j        }||k    }|sòt          j        d|fd||f¦  «        d	t          j        ¦   «         v st          j	        |¦  «        rt          j
        |¦  «        nd	t          j
        |¦  «        d
t          j        ¦   «         v st          j	        t          ¦  «        rt          j
        t          ¦  «        nd
t          j
        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}}|j        }d}||k    }|sªt          j        d|fd||f¦  «        d	t          j        ¦   «         v st          j	        |¦  «        rt          j
        |¦  «        nd	t          j
        |¦  «        t          j
        |¦  «        dœz  }	dd|	iz  }
t          t          j        |
¦  «        ¦  «        ‚dx}x}}|                     d¬¦  «        }|j        }t          j        }||k    }|sòt          j        d|fd||f¦  «        dt          j        ¦   «         v st          j	        |¦  «        rt          j
        |¦  «        ndt          j
        |¦  «        d
t          j        ¦   «         v st          j	        t          ¦  «        rt          j
        t          ¦  «        nd
t          j
        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}}dS )uK   Kiá»ƒm Ä‘á»‹nh phÆ°Æ¡ng thá»©c audit_inv_map_legitimate_clear Ä‘á»™c láº­p.rN   g      n@Tg)\�Âõ(ì?rà   )rÅ   r   r×   Úfog_coverage_ratioÚtraversed_distanceÚearly_clear_rejectedre   r2  r3  r   r4  r5  r6  NzINV-MAP-LEGITIMATE-CLEARrJ  rô   rõ   rx   g      >@)rÅ   r9  Ú	res_early)r   Úaudit_inv_map_legitimate_clearrE   r   r=  r—   r˜   rœ   r�   rž   r™   rš   r›   rL  r?  )r    r@  r3  r§   r©   r£   r¦   rA  rù   r¯   rª   rk  s               r   Ú*test_map_legitimate_clear_audit_standalonezVTestAutonomyReadinessScoreAndMatrixSentinel.test_map_legitimate_clear_audit_standaloneä  s�  € å+Ñ-Ô-ˆà×8Ò8Ø!Ø"ØØ#Ø%Ø!%ð 9ñ 
ô 
ˆð Œ}Ð6¥Ô 6Ð6ˆ}Ð 6Ò6Ð6Ð6Ð6Õ6Ô6Ð6Ð6Ð6Ð6ˆ}Ð 6Ð6Ñ6Ô6Ð6Õ6Ô6Ñ6Ô6Ð6Ð6Õ6Ô6ˆvÑ6Ô6Ð6Õ6Ô6ˆvÑ6Ô6Ð6Ð6Õ6Ô6ˆ}Ñ6Ô6Ð6Õ6Ô6Ñ6Ô6Ð6Ð6Õ6Ô6¥Ñ6Ô6Ð6Õ6Ô6¥Ñ6Ô6Ð6Ð6Õ6Ô6Ð 6Ñ6Ô6Ð6Ð6Ñ6Ð6Ð6Ð6Ð6Ð6Ñ6Ð6Õ6Õ6Ô6Ð6Ñ6Ô6Ñ6Ô6Ð6Ð6Ð6Ð6Ð6Ð6Ð6ØŒ{Ð8Ð8Ð8ˆ{Ð8Ò8Ð8Ð8Ð8Õ8Ô8Ð8Ð8Ð8Ð8ˆ{Ð8Ð8Ñ8Ô8Ð8Õ8Ô8Ñ8Ô8Ð8Ð8Õ8Ô8ˆvÑ8Ô8Ð8Õ8Ô8ˆvÑ8Ô8Ð8Ð8Õ8Ô8ˆ{Ñ8Ô8Õ8Ô8Ð8Ñ8Ô8Ð8Ð8Ñ8Ð8Ð8Ð8Ð8Ð8Ñ8Ð8Õ8Õ8Ô8Ð8Ñ8Ô8Ñ8Ô8Ð8Ð8Ð8Ð8Ð8Ð8Ð8ð ×;Ò;Ø!ð <ñ 
ô 
ˆ	ð ÔÐ:¥?Ô#:Ð:ÐÐ#:Ò:Ð:Ð:Ð:Õ:Ô:Ð:Ð:Ð:Ð:ÐÐ#:Ð:Ñ:Ô:Ð:Õ:Ô:Ñ:Ô:Ð:Ð:Õ:Ô:ˆyÑ:Ô:Ð:Õ:Ô:ˆyÑ:Ô:Ð:Ð:Õ:Ô:ÐÑ:Ô:Ð:Õ:Ô:Ñ:Ô:Ð:Ð:Õ:Ô:¥?Ñ:Ô:Ð:Õ:Ô:¥?Ñ:Ô:Ð:Ð:Õ:Ô:Ð#:Ñ:Ô:Ð:Ð:Ñ:Ð:Ð:Ð:Ð:Ð:Ñ:Ð:Õ:Õ:Ô:Ð:Ñ:Ô:Ñ:Ô:Ð:Ð:Ð:Ð:Ð:Ð:Ð:Ð:Ð:r   N)r»   r¼   r½   r¾   ra  rf  rm  r   r   r   rR  rR  È  sG   € € € € € ØrÐrð1ð 1ð 1ð
+ð 
+ð 
+ð;ð ;ð ;ð ;ð ;r   rR  c                  ó$   — e Zd ZdZd„ Zd„ Zd„ ZdS )Ú1TestInvCi0msBurstWatchdogWithReflexFallbackLadderul   Kiá»ƒm tra báº¥t biáº¿n INV-CI-0MS-BURST-WATCHDOG vÃ  Thang pháº£n xáº¡ Ä‘a táº§ng (Reflex Fallback Ladder).c                ót  — t          ¦   «         }|                     ddd¬¦  «        }|j        }t          j        }||k    }|sòt          j        d|fd||f¦  «        dt          j        ¦   «         v st          j	        |¦  «        rt          j
        |¦  «        ndt          j
        |¦  «        dt          j        ¦   «         v st          j	        t          ¦  «        rt          j
        t          ¦  «        ndt          j
        |¦  «        d	œz  }d
d|iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}}d}|j        }	||	v }
|
sªt          j        d|
fd||	f¦  «        t          j
        |¦  «        dt          j        ¦   «         v st          j	        |¦  «        rt          j
        |¦  «        ndt          j
        |	¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}
}	d}|j        }	||	v }
|
sªt          j        d|
fd||	f¦  «        t          j
        |¦  «        dt          j        ¦   «         v st          j	        |¦  «        rt          j
        |¦  «        ndt          j
        |	¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}
}	dS )ue   Khi Shock ES >= 50% vÃ  Dodge Roll khÃ´ng há»“i chiÃªu -> KÃ­ch hoáº¡t ngay 0ms Dodge Roll (I-frame).gš™™™™™á?FT)Úshock_ratioÚdodge_on_cooldownÚhuman_latency_bypassedre   r2  r+  r   r4  r5  r6  Nu    Bypass hoÃ n toÃ n human latencyrµ   r7  r8  rõ   rx   u#   0ms I-frame Dodge Roll thÃ nh cÃ´ng©r   Úaudit_inv_ci_0ms_burst_watchdogrE   r   r=  r—   r˜   rœ   r�   rž   r™   rš   r›   r>  ©r    r@  r+  r§   r©   r£   r¦   rA  r¢   rù   r¤   r¯   rª   s                r   Ú;test_ci_burst_watchdog_triggers_0ms_dodge_when_off_cooldownzmTestInvCi0msBurstWatchdogWithReflexFallbackLadder.test_ci_burst_watchdog_triggers_0ms_dodge_when_off_cooldown  s  € å+Ñ-Ô-ˆØ×6Ò6ØØ#Ø#'ð 7ñ 
ô 
ˆð
 ŒzÐ3�_Ô3Ð3ˆzÐ3Ò3Ð3Ð3Ð3Õ3Ô3Ð3Ð3Ð3Ð3ˆzÐ3Ð3Ñ3Ô3Ð3Õ3Ô3Ñ3Ô3Ð3Ð3Õ3Ô3ˆsÑ3Ô3Ð3Õ3Ô3ˆsÑ3Ô3Ð3Ð3Õ3Ô3ˆzÑ3Ô3Ð3Õ3Ô3Ñ3Ô3Ð3Ð3Õ3Ô3�_Ñ3Ô3Ð3Õ3Ô3�_Ñ3Ô3Ð3Ð3Õ3Ô3Ð3Ñ3Ô3Ð3Ð3Ñ3Ð3Ð3Ð3Ð3Ð3Ñ3Ð3Õ3Õ3Ô3Ð3Ñ3Ô3Ñ3Ô3Ð3Ð3Ð3Ð3Ð3Ð3Ð3Ø1ÐA°S´\ÐAÐ1°\ÐAÐAÐAÐAÕAÔAÐAÐAÐAÐAÐ1°\ÐAÑAÔAÕAÔAÐ1ÑAÔAÐAÕAÔAÑAÔAÐAÐAÕAÔA°SÑAÔAÐAÕAÔA°SÑAÔAÐAÐAÕAÔA°\ÑAÔAÐAÐAÑAÐAÐAÐAÐAÐAÑAÐAÕAÕAÔAÐAÑAÔAÑAÔAÐAÐAÐAÐAÐAÐAÐAØ4ÐD¸¼ÐDÐ4¸ÐDÐDÐDÐDÕDÔDÐDÐDÐDÐDÐ4¸ÐDÑDÔDÕDÔDÐ4ÑDÔDÐDÕDÔDÑDÔDÐDÐDÕDÔD¸ÑDÔDÐDÕDÔD¸ÑDÔDÐDÐDÕDÔD¸ÑDÔDÐDÐDÑDÐDÐDÐDÐDÐDÑDÐDÕDÕDÔDÐDÑDÔDÑDÔDÐDÐDÐDÐDÐDÐDÐDÐDÐDr   c                óv  — t          ¦   «         }|                     dddd¬¦  «        }|j        }t          j        }||k    }|sòt          j        d|fd||f¦  «        dt          j        ¦   «         v st          j	        |¦  «        rt          j
        |¦  «        ndt          j
        |¦  «        dt          j        ¦   «         v st          j	        t          ¦  «        rt          j
        t          ¦  «        ndt          j
        |¦  «        dœz  }d	d
|iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}}d}|j        }	||	v }
|
sªt          j        d|
fd||	f¦  «        t          j
        |¦  «        dt          j        ¦   «         v st          j	        |¦  «        rt          j
        |¦  «        ndt          j
        |	¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}
}	d}|j        }	||	v }
|
sªt          j        d|
fd||	f¦  «        t          j
        |¦  «        dt          j        ¦   «         v st          j	        |¦  «        rt          j
        |¦  «        ndt          j
        |	¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}
}	dS )uq   Khi Dodge Roll Ä‘ang há»“i chiÃªu (CD), máº¡ch 0ms chuyá»ƒn sang Defensive Guard / Logout, khÃ´ng káº¹t Spacebar.rì   T)rq  rr  Úfallback_guard_triggeredrs  re   r2  r+  r   r4  r5  r6  NzReflex Fallback Ladderrµ   r7  r8  rõ   rx   u   khÃ´ng káº¹t Spacebarrt  rv  s                r   ÚAtest_ci_burst_watchdog_falls_back_to_guard_when_dodge_on_cooldownzsTestInvCi0msBurstWatchdogWithReflexFallbackLadder.test_ci_burst_watchdog_falls_back_to_guard_when_dodge_on_cooldown  s  € å+Ñ-Ô-ˆØ×6Ò6ØØ"Ø%)Ø#'ð	 7ñ 
ô 
ˆð ŒzÐ3�_Ô3Ð3ˆzÐ3Ò3Ð3Ð3Ð3Õ3Ô3Ð3Ð3Ð3Ð3ˆzÐ3Ð3Ñ3Ô3Ð3Õ3Ô3Ñ3Ô3Ð3Ð3Õ3Ô3ˆsÑ3Ô3Ð3Õ3Ô3ˆsÑ3Ô3Ð3Ð3Õ3Ô3ˆzÑ3Ô3Ð3Õ3Ô3Ñ3Ô3Ð3Ð3Õ3Ô3�_Ñ3Ô3Ð3Õ3Ô3�_Ñ3Ô3Ð3Ð3Õ3Ô3Ð3Ñ3Ô3Ð3Ð3Ñ3Ð3Ð3Ð3Ð3Ð3Ñ3Ð3Õ3Õ3Ô3Ð3Ñ3Ô3Ñ3Ô3Ð3Ð3Ð3Ð3Ð3Ð3Ð3Ø'Ð7¨3¬<Ð7Ð'¨<Ð7Ð7Ð7Ð7Õ7Ô7Ð7Ð7Ð7Ð7Ð'¨<Ð7Ñ7Ô7Õ7Ô7Ð'Ñ7Ô7Ð7Õ7Ô7Ñ7Ô7Ð7Ð7Õ7Ô7¨3Ñ7Ô7Ð7Õ7Ô7¨3Ñ7Ô7Ð7Ð7Õ7Ô7¨<Ñ7Ô7Ð7Ð7Ñ7Ð7Ð7Ð7Ð7Ð7Ñ7Ð7Õ7Õ7Ô7Ð7Ñ7Ô7Ñ7Ô7Ð7Ð7Ð7Ð7Ð7Ð7Ð7Ø&Ð6¨#¬,Ð6Ð&¨,Ð6Ð6Ð6Ð6Õ6Ô6Ð6Ð6Ð6Ð6Ð&¨,Ð6Ñ6Ô6Õ6Ô6Ð&Ñ6Ô6Ð6Õ6Ô6Ñ6Ô6Ð6Ð6Õ6Ô6¨#Ñ6Ô6Ð6Õ6Ô6¨#Ñ6Ô6Ð6Ð6Õ6Ô6¨,Ñ6Ô6Ð6Ð6Ñ6Ð6Ð6Ð6Ð6Ð6Ñ6Ð6Õ6Õ6Ô6Ð6Ñ6Ô6Ñ6Ô6Ð6Ð6Ð6Ð6Ð6Ð6Ð6Ð6Ð6r   c                óö  — t          ¦   «         }|                     ddd¬¦  «        }|j        }t          j        }||k    }|sòt          j        d|fd||f¦  «        dt          j        ¦   «         v st          j	        |¦  «        rt          j
        |¦  «        ndt          j
        |¦  «        dt          j        ¦   «         v st          j	        t          ¦  «        rt          j
        t          ¦  «        ndt          j
        |¦  «        d	œz  }d
d|iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}}d}|j        }	||	v }
|
sªt          j        d|
fd||	f¦  «        t          j
        |¦  «        dt          j        ¦   «         v st          j	        |¦  «        rt          j
        |¦  «        ndt          j
        |	¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}
}	dS )uU   Vi pháº¡m: Dodge Roll Ä‘ang há»“i chiÃªu nhÆ°ng khÃ´ng cÃ³ fallback guard -> BLOCKED.rì   TF)rq  rr  ry  re   r9  r+  r   r4  r5  r6  Nu   spam Spacebar vÃ´ dá»¥ngrµ   r7  r8  rõ   rx   )r   ru  rE   r   r?  r—   r˜   rœ   r�   rž   r™   rš   r›   r>  rv  s                r   ÚCtest_ci_burst_watchdog_blocks_if_no_fallback_when_dodge_on_cooldownzuTestInvCi0msBurstWatchdogWithReflexFallbackLadder.test_ci_burst_watchdog_blocks_if_no_fallback_when_dodge_on_cooldown  s5  € å+Ñ-Ô-ˆØ×6Ò6ØØ"Ø%*ð 7ñ 
ô 
ˆð
 ŒzÐ4�_Ô4Ð4ˆzÐ4Ò4Ð4Ð4Ð4Õ4Ô4Ð4Ð4Ð4Ð4ˆzÐ4Ð4Ñ4Ô4Ð4Õ4Ô4Ñ4Ô4Ð4Ð4Õ4Ô4ˆsÑ4Ô4Ð4Õ4Ô4ˆsÑ4Ô4Ð4Ð4Õ4Ô4ˆzÑ4Ô4Ð4Õ4Ô4Ñ4Ô4Ð4Ð4Õ4Ô4�_Ñ4Ô4Ð4Õ4Ô4�_Ñ4Ô4Ð4Ð4Õ4Ô4Ð4Ñ4Ô4Ð4Ð4Ñ4Ð4Ð4Ð4Ð4Ð4Ñ4Ð4Õ4Õ4Ô4Ð4Ñ4Ô4Ñ4Ô4Ð4Ð4Ð4Ð4Ð4Ð4Ð4Ø)Ð9¨S¬\Ð9Ð)¨\Ð9Ð9Ð9Ð9Õ9Ô9Ð9Ð9Ð9Ð9Ð)¨\Ð9Ñ9Ô9Õ9Ô9Ð)Ñ9Ô9Ð9Õ9Ô9Ñ9Ô9Ð9Ð9Õ9Ô9¨SÑ9Ô9Ð9Õ9Ô9¨SÑ9Ô9Ð9Ð9Õ9Ô9¨\Ñ9Ô9Ð9Ð9Ñ9Ð9Ð9Ð9Ð9Ð9Ñ9Ð9Õ9Õ9Ô9Ð9Ñ9Ô9Ñ9Ô9Ð9Ð9Ð9Ð9Ð9Ð9Ð9Ð9Ð9r   N)r»   r¼   r½   r¾   rw  rz  r|  r   r   r   ro  ro  þ  sJ   € € € € € ØvÐvð
Eð 
Eð 
Eð7ð 7ð 7ð	:ð 	:ð 	:ð 	:ð 	:r   ro  c                  ó$   — e Zd ZdZd„ Zd„ Zd„ ZdS )Ú/TestInvDesyncDetectResyncWithBodyBlockBranchingur   Kiá»ƒm tra báº¥t biáº¿n INV-DESYNC-DETECT-RESYNC vÃ  phÃ¢n nhÃ¡nh QuÃ¡i váº­t vÃ¢y hÃ£m (Body-Block vs Mesh Snag).c                óú  — t          ¦   «         }|                     ddddd¬¦  «        }|j        }t          j        }||k    }|sòt          j        d|fd||f¦  «        d	t          j        ¦   «         v st          j	        |¦  «        rt          j
        |¦  «        nd	t          j
        |¦  «        d
t          j        ¦   «         v st          j	        t          ¦  «        rt          j
        t          ¦  «        nd
t          j
        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}}d}|j        }	||	v }
|
sªt          j        d|
fd||	f¦  «        t          j
        |¦  «        d	t          j        ¦   «         v st          j	        |¦  «        rt          j
        |¦  «        nd	t          j
        |	¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}
}	dS )u^   Káº¹t Ä‘á»‹a hÃ¬nh tá»± do (0 quÃ¡i váº­t, V_net < 0.8u/s) -> KÃ­ch hoáº¡t 3-Tier Mesh Resync.r  g      y@rÈ   r   T)Úspatial_divergenceÚmovement_dwell_msÚnet_velocityÚmonsters_near_15uÚmesh_resync_triggeredre   r2  r+  r   r4  r5  r6  Nz3-Tier Mesh Resyncrµ   r7  r8  rõ   rx   ©r   Úaudit_inv_desync_detect_resyncrE   r   r=  r—   r˜   rœ   r�   rž   r™   rš   r›   r>  rv  s                r   ÚAtest_desync_mesh_snag_without_monsters_triggers_3tier_mesh_resynczqTestInvDesyncDetectResyncWithBodyBlockBranching.test_desync_mesh_snag_without_monsters_triggers_3tier_mesh_resync-  s;  € å+Ñ-Ô-ˆØ×5Ò5Ø#Ø#ØØØ"&ð 6ñ 
ô 
ˆð ŒzÐ3�_Ô3Ð3ˆzÐ3Ò3Ð3Ð3Ð3Õ3Ô3Ð3Ð3Ð3Ð3ˆzÐ3Ð3Ñ3Ô3Ð3Õ3Ô3Ñ3Ô3Ð3Ð3Õ3Ô3ˆsÑ3Ô3Ð3Õ3Ô3ˆsÑ3Ô3Ð3Ð3Õ3Ô3ˆzÑ3Ô3Ð3Õ3Ô3Ñ3Ô3Ð3Ð3Õ3Ô3�_Ñ3Ô3Ð3Õ3Ô3�_Ñ3Ô3Ð3Ð3Õ3Ô3Ð3Ñ3Ô3Ð3Ð3Ñ3Ð3Ð3Ð3Ð3Ð3Ñ3Ð3Õ3Õ3Ô3Ð3Ñ3Ô3Ñ3Ô3Ð3Ð3Ð3Ð3Ð3Ð3Ð3Ø#Ð3 s¤|Ð3Ð# |Ð3Ð3Ð3Ð3Õ3Ô3Ð3Ð3Ð3Ð3Ð# |Ð3Ñ3Ô3Õ3Ô3Ð#Ñ3Ô3Ð3Õ3Ô3Ñ3Ô3Ð3Ð3Õ3Ô3 sÑ3Ô3Ð3Õ3Ô3 sÑ3Ô3Ð3Ð3Õ3Ô3 |Ñ3Ô3Ð3Ð3Ñ3Ð3Ð3Ð3Ð3Ð3Ñ3Ð3Õ3Õ3Ô3Ð3Ñ3Ô3Ñ3Ô3Ð3Ð3Ð3Ð3Ð3Ð3Ð3Ð3Ð3r   c                óx  — t          ¦   «         }|                     ddddd¬¦  «        }|j        }t          j        }||k    }|sòt          j        d|fd||f¦  «        d	t          j        ¦   «         v st          j	        |¦  «        rt          j
        |¦  «        nd	t          j
        |¦  «        d
t          j        ¦   «         v st          j	        t          ¦  «        rt          j
        t          ¦  «        nd
t          j
        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}}d}|j        }	||	v }
|
sªt          j        d|
fd||	f¦  «        t          j
        |¦  «        d	t          j        ¦   «         v st          j	        |¦  «        rt          j
        |¦  «        nd	t          j
        |	¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}
}	d}|j        }	||	v }
|
sªt          j        d|
fd||	f¦  «        t          j
        |¦  «        d	t          j        ¦   «         v st          j	        |¦  «        rt          j
        |¦  «        nd	t          j
        |	¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}
}	dS )uk   Bá»‹ bao vÃ¢y bá»Ÿi >= 3 quÃ¡i (Body-Block) -> Tá»« chá»‘i trÆ°á»£t 90Â°, kÃ­ch hoáº¡t AOE Clear phÃ¡ vÃ¢y.rd  ç      |@rÈ   rë   T©r€  r�  r‚  rƒ  Úaoe_breakout_triggeredre   r2  r+  r   r4  r5  r6  Nu(   Tá»« chá»‘i trÆ°á»£t tiáº¿p tuyáº¿n 90Â°rµ   r7  r8  rõ   rx   u*   Combat AOE Clear / Phasing Skill phÃ¡ vÃ¢yr…  rv  s                r   Ú8test_desync_body_block_siege_triggers_aoe_clear_breakoutzhTestInvDesyncDetectResyncWithBodyBlockBranching.test_desync_body_block_siege_triggers_aoe_clear_breakout:  s  € å+Ñ-Ô-ˆØ×5Ò5Ø"Ø#ØØØ#'ð 6ñ 
ô 
ˆð ŒzÐ3�_Ô3Ð3ˆzÐ3Ò3Ð3Ð3Ð3Õ3Ô3Ð3Ð3Ð3Ð3ˆzÐ3Ð3Ñ3Ô3Ð3Õ3Ô3Ñ3Ô3Ð3Ð3Õ3Ô3ˆsÑ3Ô3Ð3Õ3Ô3ˆsÑ3Ô3Ð3Ð3Õ3Ô3ˆzÑ3Ô3Ð3Õ3Ô3Ñ3Ô3Ð3Ð3Õ3Ô3�_Ñ3Ô3Ð3Õ3Ô3�_Ñ3Ô3Ð3Ð3Õ3Ô3Ð3Ñ3Ô3Ð3Ð3Ñ3Ð3Ð3Ð3Ð3Ð3Ñ3Ð3Õ3Õ3Ô3Ð3Ñ3Ô3Ñ3Ô3Ð3Ð3Ð3Ð3Ð3Ð3Ð3Ø9ÐI¸S¼\ÐIÐ9¸\ÐIÐIÐIÐIÕIÔIÐIÐIÐIÐIÐ9¸\ÐIÑIÔIÕIÔIÐ9ÑIÔIÐIÕIÔIÑIÔIÐIÐIÕIÔI¸SÑIÔIÐIÕIÔI¸SÑIÔIÐIÐIÕIÔI¸\ÑIÔIÐIÐIÑIÐIÐIÐIÐIÐIÑIÐIÕIÕIÔIÐIÑIÔIÑIÔIÐIÐIÐIÐIÐIÐIÐIØ;ÐK¸s¼|ÐKÐ;¸|ÐKÐKÐKÐKÕKÔKÐKÐKÐKÐKÐ;¸|ÐKÑKÔKÕKÔKÐ;ÑKÔKÐKÕKÔKÑKÔKÐKÐKÕKÔK¸sÑKÔKÐKÕKÔK¸sÑKÔKÐKÐKÕKÔK¸|ÑKÔKÐKÐKÑKÐKÐKÐKÐKÐKÑKÐKÕKÕKÔKÐKÑKÔKÑKÔKÐKÐKÐKÐKÐKÐKÐKÐKÐKr   c                ó|  — t          ¦   «         }|                     ddddd¬¦  «        }|j        }t          j        }||k    }|sòt          j        d|fd||f¦  «        d	t          j        ¦   «         v st          j	        |¦  «        rt          j
        |¦  «        nd	t          j
        |¦  «        d
t          j        ¦   «         v st          j	        t          ¦  «        rt          j
        t          ¦  «        nd
t          j
        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}}dS )uV   Vi pháº¡m: Bá»‹ quÃ¡i vÃ¢y cháº·t nhÆ°ng khÃ´ng kÃ­ch hoáº¡t AOE phÃ¡ vÃ¢y -> BLOCKED.rd  r‰  rÈ   rD   FrŠ  re   r9  r+  r   r4  r5  r6  N)r   r†  rE   r   r?  r—   r˜   rœ   r�   rž   r™   rš   r›   )r    r@  r+  r§   r©   r£   r¦   rA  s           r   Ú3test_desync_body_block_blocks_if_aoe_breakout_failszcTestInvDesyncDetectResyncWithBodyBlockBranching.test_desync_body_block_blocks_if_aoe_breakout_failsH  s[  € å+Ñ-Ô-ˆØ×5Ò5Ø"Ø#ØØØ#(ð 6ñ 
ô 
ˆð ŒzÐ4�_Ô4Ð4ˆzÐ4Ò4Ð4Ð4Ð4Õ4Ô4Ð4Ð4Ð4Ð4ˆzÐ4Ð4Ñ4Ô4Ð4Õ4Ô4Ñ4Ô4Ð4Ð4Õ4Ô4ˆsÑ4Ô4Ð4Õ4Ô4ˆsÑ4Ô4Ð4Ð4Õ4Ô4ˆzÑ4Ô4Ð4Õ4Ô4Ñ4Ô4Ð4Ð4Õ4Ô4�_Ñ4Ô4Ð4Õ4Ô4�_Ñ4Ô4Ð4Ð4Õ4Ô4Ð4Ñ4Ô4Ð4Ð4Ñ4Ð4Ð4Ð4Ð4Ð4Ñ4Ð4Õ4Õ4Ô4Ð4Ñ4Ô4Ñ4Ô4Ð4Ð4Ð4Ð4Ð4Ð4Ð4Ð4Ð4r   N)r»   r¼   r½   r¾   r‡  rŒ  rŽ  r   r   r   r~  r~  *  sJ   € € € € € Ø|Ð|ð4ð 4ð 4ðLð Lð Lð
5ð 
5ð 
5ð 
5ð 
5r   r~  )-r¾   Ú
__future__r   Úbuiltinsrœ   Ú_pytest.assertion.rewriteÚ	assertionÚrewriter—   Úmathr1   r<   r/   ÚtimeÚtypingr   r   r   r   r   Úunittest.mockr	   r
   r   ÚpytestÚ-src.agentic_engine.master_invariants_sentinelr   r   Ú1src.assistant_tool.navigation.map_clear_evaluatorr   Ú(src.assistant_tool.stash.stash_constantsr   r   Ú$tools.autonomous_mapping_coordinatorr   Úfixturer   r?   rA   rÀ   r  rD  rR  ro  r~  r   r   r   ú<module>rž     s³  ððð ð( #Ð "Ð "Ð "Ð "Ð "à  € € € € € € € € € € € € €€€€Ø 	€	€	€	Ø €€€Ø €€€Ø €€€Ø 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ø 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0à €€€ðð ð ð ð ð ð ð ð PÐ OÐ OÐ OÐ OÐ OØ MÐ MÐ MÐ MÐ MÐ MÐ MÐ MØ MÐ MÐ MÐ MÐ MÐ Mð €„˜ÐÑÔðð ñ Ôðð „ð"0ð "0ñ „ð"0ðRHð Hð Hð Hð Hñ Hô Hð HðLe2ð e2ð e2ð e2ð e2ñ e2ô e2ð e2ðZS>ð S>ð S>ð S>ð S>ñ S>ô S>ð S>ðt:ð :ð :ð :ð :ñ :ô :ð :ð@/;ð /;ð /;ð /;ð /;ñ /;ô /;ð /;ðl%:ð %:ð %:ð %:ð %:ñ %:ô %:ð %:ðX(5ð (5ð (5ð (5ð (5ñ (5ô (5ð (5ð (5ð (5r   