§
    ì#Êj;¦  ã                   óˆ  — d Z ddlZddlZddlZddlZddlZddlZddlmZ ddl	Z
ddlZddlmZmZmZ ej                             ej                             ej                             e¦  «        ddd¦  «        ¦  «        Zeej        vrej                             de¦  «         ddlmZ dZdZd	Zdd„Zdd„Zd„ Z G d„ d¦  «        Zdd„Z e!dk    rp ej"        d¬¦  «        Z#e# $                    de%dd¬¦  «         e# $                    de&dd¬¦  «         e# '                    ¦   «         Z( e e(j)        e(j*        ¬¦  «         dS dS ) u¨  
Studio Historical-2d â€” Episode 01: Battle of Cannae (216 BC)
TACTICAL SANDTABLE MASTER RENDER ENGINE (2026 High-RPM Production Pipeline)
Lead Motion & Pipeline Automation Engineer: Elena Rostova

Architecture:
- High-performance multi-threaded CPU generation (Dual Xeon 56 threads)
- Direct streaming to FFmpeg NVENC (hevc_nvenc / h264_nvenc) on GTX 1660 Super
- Zero-waste memory management: VRAM < 4.0 GB guaranteed, no OOM risk
- Compliant with Diana Vance Quality & Copyright Standards (10 Golden Pillars)
- Seamless Host Seven Nguyen Integration across 4 Approved Cues
- Dynamic NATO APP-6 Counters, 7 Luminescent BÃ©zier Vectors, Realtime Pressure Heatmap, HUD Telemetry
é    N)ÚThreadPoolExecutor)ÚImageÚ	ImageDrawÚ	ImageFontú..)ÚSevenNguyenActori€  i8  é   Fc                 óâ   — |rdnd|rdnd|rdndg}|D ]I}t           j                             |¦  «        r(	 t          j        || ¦  «        c S # t
          $ r Y ŒEw xY wŒJt          j        ¦   «         S )NzC:\Windows\Fonts\georgiab.ttfzC:\Windows\Fonts\georgia.ttfzC:\Windows\Fonts\timesbd.ttfzC:\Windows\Fonts\times.ttfzC:\Windows\Fonts\arialbd.ttfzC:\Windows\Fonts\arial.ttf)ÚosÚpathÚexistsr   ÚtruetypeÚ	ExceptionÚload_default)ÚsizeÚboldÚcandidate_fontsÚ	font_paths       ú=episodes\EP01_Cannae_216BC\05_Renders\render_cannae_master.pyÚget_fontr   $   s±   € à.2ÐYÐ*Ð*Ð8YØ-1ÐVÐ)Ð)Ð7VØ-1ÐVÐ)Ð)Ð7Vð€Oð
 %ð ð ˆ	ÝŒ7�>Š>˜)Ñ$Ô$ð 	ðÝ Ô)¨)°TÑ:Ô:Ð:Ð:Ð:øÝð ð ð Ø�ðøøøð	õ
 Ô!Ñ#Ô#Ð#s   ¶AÁ
AÁAç      ð?c                 óf  — |�|dk    r| S |dk    r‹t          dt          |j        d         |z  ¦  «        ¦  «        }t          dt          |j        d         |z  ¦  «        ¦  «        }t          j        |||f|dk     rt          j        nt          j        ¬¦  «        }|j        \  }}	}
| j        \  }}}
t          d|¦  «        t          d|¦  «        }}t          |||	z   ¦  «        t          |||z   ¦  «        }}||k    s||k    r| S ||z
  }||z
  }|||z
  z   }|||z
  z   }|||…||…f         }|dd…dd…df                              t          j
        ¦  «        dz  |z  }t          j        |dd…dd…t          j        f         dd	¬
¦  «        }| ||…||…f                              t          j
        ¦  «        }|dd…dd…dd…f                              t          j
        ¦  «        }||z  |d|z
  z  z   }t          j        |dd¦  «                             t          j        ¦  «        | ||…||…f<   | S )u@   Gáº¯n káº¿t sprite BGRA lÃªn frame BGR cÃ³ tÃ­nh alpha vÃ  scaleNçü©ñÒMbP?r   é   r   ©Úinterpolationé   g     ào@é   )Úaxiséÿ   )ÚmaxÚintÚshapeÚcv2ÚresizeÚ
INTER_AREAÚINTER_LINEARÚminÚastypeÚnpÚfloat32ÚrepeatÚnewaxisÚclipÚuint8)Údst_bgrÚsrc_bgraÚxÚyÚscaleÚopacityÚnew_wÚnew_hÚshÚswÚ_ÚdhÚdwÚx1Úy1Úx2Úy2Úsx1Úsy1Úsx2Úsy2Úsrc_cropÚalphaÚalpha_3dÚdst_cropÚsrc_rgbÚblendeds                              r   Úoverlay_alpha_imagerK   2   sD  € àÐ˜7 eÒ+Ð+Øˆà�‚|€|Ý�A•s˜8œ>¨!Ô,¨uÑ4Ñ5Ô5Ñ6Ô6ˆÝ�A•s˜8œ>¨!Ô,¨uÑ4Ñ5Ô5Ñ6Ô6ˆÝ”:˜h¨°¨ÐX]Ð`cÒXcÐXcÅcÄnÀnÕilÔiyÐzÑzÔzˆà”�I€BˆˆAØ”�I€BˆˆAå��A‰YŒY�˜A˜q™	œ	ˆ€BÝ��Q˜‘V‰_Œ_�c " a¨"¡f™oœoˆ€Bà	ˆR‚x€x�2˜’8�8Øˆà
ˆq‰&€CØ
ˆq‰&€CØ
��b‘‰/€CØ
��b‘‰/€Cà˜˜C˜  S Ð(Ô)€HØ�a�a�a˜˜˜˜A�gÔ×%Ò%¥b¤jÑ1Ô1°EÑ9¸WÑD€EÝŒy˜˜q˜q˜q ! ! !¥R¤ZÐ/Ô0°!¸!Ð<Ñ<Ô<€Hà�r˜"�u˜b ˜e�|Ô$×+Ò+­B¬JÑ7Ô7€HØ�q�q�q˜!˜!˜!˜R˜a˜R�xÔ ×'Ò'­¬
Ñ3Ô3€Gà˜Ñ  8¨s°X©~Ñ#>Ñ>€GÝœG G¨Q°Ñ4Ô4×;Ò;½B¼HÑEÔE€GˆBˆrˆE�2�b�5ˆLÑØ€Nó    c                 ó  — d|z
  }||z  | d         z  d|z  |z  |d         z  z   ||z  |d         z  z   }||z  | d         z  d|z  |z  |d         z  z   ||z  |d         z  z   }t          |¦  «        t          |¦  «        fS )u8   Ä�iá»ƒm trÃªn Ä‘Æ°á»�ng cong BÃ©zier báº­c 2 (Quadratic)r   r   ç       @r   )r"   )Úp0Úp1Úp2ÚtÚinvr2   r3   s          r   Úget_bezier_pointrT   U   s“   € à
�‰'€CØˆc‰	�B�q”EÑ˜C #™I¨™M¨B¨q¬EÑ1Ñ1°A¸±E¸B¸q¼E±MÑA€AØˆc‰	�B�q”EÑ˜C #™I¨™M¨B¨q¬EÑ1Ñ1°A¸±E¸B¸q¼E±MÑA€AÝˆq‰6Œ6•3�q‘6”6ˆ>ÐrL   c                   óR   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zdd„Zd	„ Z	d
„ Z
d„ Zd„ Zd„ ZdS )ÚCannaeTacticalMasterRendererc                 ó0  — || _         t          |dd¬¦  «        5 }t          j        |¦  «        | _        d d d ¦  «         n# 1 swxY w Y   | j                             dg ¦  «        | _        | j                             dg ¦  «        | _        | j                             dg ¦  «        | _        | j                             dg ¦  «        | _	        | j                             dg ¦  «        | _
        t          j                             |¦  «        r,t          d	|› �¦  «         t          j        |¦  «        | _        n·t          j                             |¦  «        rVt          d
¦  «         t          j        |¦  «        }t          j        |t&          t(          ft          j        ¬¦  «        | _        nBt          d¦  «         t-          j        t(          t&          dfdt,          j        ¬¦  «        | _        t          j                             |d¦  «        }i | _        dD ]v\  }}	t          j                             ||	¦  «        }
t          j                             |
¦  «        r(t          j        |
t          j        ¦  «        | j        |<   Œld | j        |<   Œwt9          |¦  «        | _        t          j                             |dddd¦  «        }i | _        dD ]—\  }}t          j                             ||¦  «        }t          j                             |¦  «        rIt          j        |t          j        ¦  «        }t          j        |dt          j        ¬¦  «        | j        |<   Œ�d | j        |<   Œ˜t,          j                              d¦  «         d| _!        t,          j         "                    dt&          | j!        ¦  «        | _#        t,          j         "                    dt(          | j!        ¦  «        | _$        t,          j         "                    dd| j!        ¦  «        | _%        d S )NÚrzutf-8)ÚencodingÚoperational_phasesÚunit_rosterÚtactical_vectorsÚrealtime_casualty_progressionÚhost_integration_cuesz*[ENGINE] Loading base 1080p Tactical Map: z+[ENGINE] Resizing 4K map to 1080p canvas...r   zH[WARN] Terrain map not found! Generating procedural antique parchment...r   )é   é   é"   ©ÚdtypeÚoutput))rP   zfinal_sprite_p1.png)rQ   zfinal_sprite_p2.png)Úp3zfinal_sprite_p3.png)Úp4zfinal_sprite_p4.png)Úp6zfinal_sprite_p6.pngÚepisodesÚEP01_Cannae_216BCÚ02_Map_DataÚ
unit_icons))Úroman_legionaryzroman_legionary.png)Únumidian_cavalryznumidian_cavalry.png)Úceltic_gallic_warriorzceltic_gallic_warrior.png)Úcarthaginian_veteranzcarthaginian_veteran.png)Úiberian_falcataziberian_falcata.png)Úroman_cavalryzroman_cavalry.png)é*   rr   éØ   é´   r   g      @g      "@)&Ú	workspaceÚopenÚjsonÚloadÚtimeline_dataÚgetÚphasesr[   r\   Úcasualty_progressionÚ	host_cuesr   r   r   Úprintr$   ÚimreadÚbase_mapr%   ÚWIDTHÚHEIGHTr&   r*   Úfullr/   ÚjoinÚspritesÚIMREAD_UNCHANGEDr   Úactorrk   ÚrandomÚseedÚnum_particlesÚuniformÚpart_xÚpart_yÚpart_sp)ÚselfÚworkspace_rootÚtimeline_pathÚmap_4k_pathÚmap_1080_pathÚfÚraw_4kÚ
output_dirÚpose_keyÚfilenameÚsprite_fileÚ	icons_dirÚicon_keyÚicon_filenameÚipathÚraw_icons                   r   Ú__init__z%CannaeTacticalMasterRenderer.__init__]   s¢  € Ø'ˆŒõ �- ¨wÐ7Ñ7Ô7ð 	.¸1Ý!%¤¨1¡¤ˆDÔð	.ð 	.ð 	.ñ 	.ô 	.ð 	.ð 	.ð 	.ð 	.ð 	.ð 	.øøøð 	.ð 	.ð 	.ð 	.ð Ô(×,Ò,Ð-AÀ2ÑFÔFˆŒØÔ-×1Ò1°-ÀÑDÔDˆÔØ $Ô 2× 6Ò 6Ð7IÈ2Ñ NÔ NˆÔØ$(Ô$6×$:Ò$:Ð;ZÐ\^Ñ$_Ô$_ˆÔ!ØÔ+×/Ò/Ð0GÈÑLÔLˆŒõ Œ7�>Š>˜-Ñ(Ô(ð 		VÝÐN¸}ÐNÐNÑOÔOÐOÝœJ }Ñ5Ô5ˆDŒMˆMÝŒW�^Š^˜KÑ(Ô(ð 	VÝÐ@ÑAÔAÐAÝ”Z Ñ,Ô,ˆFÝœJ vµµv¨ÍcÌnÐ]Ñ]Ô]ˆDŒMˆMåÐ\Ñ]Ô]Ð]ÝœG¥V­U°AÐ$6¸ÍBÌHÐUÑUÔUˆDŒMõ ”W—\’\ .°(Ñ;Ô;ˆ
ØˆŒð#
ð 	.ð 	.ÑˆH�hõ œ'Ÿ,š, z°8Ñ<Ô<ˆKÝŒw�~Š~˜kÑ*Ô*ð .Ý),¬°KÅÔAUÑ)VÔ)V�”˜XÑ&Ð&à)-�”˜XÑ&Ð&õ & nÑ5Ô5ˆŒ
õ ”G—L’L °Ð=PÐR_ÐamÑnÔnˆ	ØˆŒð(
ð 	1ð 	1Ñ#ˆH�mõ ”G—L’L ¨MÑ:Ô:ˆEÝŒw�~Š~˜eÑ$Ô$ð 1Ýœ: e­SÔ-AÑBÔB�å,/¬J°xÀÕY\ÔYgÐ,hÑ,hÔ,h�” Ñ)Ð)à,0�” Ñ)Ð)õ 	Œ	�Š�sÑÔÐØ ˆÔÝ”i×'Ò'¨­5°$Ô2DÑEÔEˆŒÝ”i×'Ò'¨­6°4Ô3EÑFÔFˆŒÝ”y×(Ò(¨¨c°4Ô3EÑFÔFˆŒˆˆs   šA Á AÁAc           	      ób  — d}d}|                      ¦   «         }t          | j        ¦  «        D ]è}| j        |         |z  }| j        |          |z  }| j        |         |z   t
          z  | j        |<   | j        |         |z   t          z  | j        |<   t          | j        |         ¦  «        t          | j        |         ¦  «        }	}t          ||dz  z
  ¦  «        }
t          |	|dz  z
  ¦  «        }t          j
        ||
|f||	fddt          j        ¦  «         Œét          j        |d|dd|¦  «         dS )	u`   Táº¡o lá»›p bá»¥i cÃ¡t vi mÃ´ bay 45 Ä‘á»™ SW -> NE (Quy táº¯c chuyá»ƒn Ä‘á»™ng liÃªn tá»¥c 10s)gà-� æ?çÍÌÌÌÌÌü?)éP   é    éÍ   r   g)\�Âõ(Ì?gö(\�Âõè?r   N)ÚcopyÚrangerŠ   rŽ   rŒ   r�   r�   r‚   r"   r$   ÚlineÚLINE_AAÚaddWeighted)r�   ÚframeÚcos45Úsin45ÚoverlayÚiÚdxÚdyr=   r>   Úx0Úy0s               r   Úupdate_volturnus_driftz3CannaeTacticalMasterRenderer.update_volturnus_drift£   s$  € àˆØˆØ—*’*‘,”,ˆÝ�tÔ)Ñ*Ô*ð 		Rð 		RˆAØ”˜a” 5Ñ(ˆBØ”,˜q”/Ð! EÑ)ˆBØ"œk¨!œn¨rÑ1µUÑ:ˆDŒK˜‰NØ"œk¨!œn¨rÑ1µVÑ;ˆDŒK˜‰Nå˜œ QœÑ(Ô(­#¨d¬k¸!¬nÑ*=Ô*=�ˆBÝ�R˜"˜s™(‘]Ñ#Ô#ˆBÝ�R˜"˜s™(‘]Ñ#Ô#ˆBÝŒH�W˜r 2˜h¨¨R¨°.À!ÅSÄ[ÑQÔQÐQÐQÝŒ˜  u¨d°A°uÑ=Ô=Ð=Ð=Ð=rL   c                 óš  — |                      dg ¦  «        }|d         }|s|d         |d         |d         fS dgd„ |D ¦   «         z   }|gd„ |D ¦   «         z   }||d         k    r#|d         d         |d         d         |d         fS ||d         k    r#|d         d         |d         d         |d	         fS t          t          |¦  «        dz
  ¦  «        D ]Ô}||         ||dz            }	}||cxk    r|	k    r²n Œ%||z
  t          |	|z
  ¦  «        z  }
d
|
dz  z  d|
dz  z  z
  }||         ||dz            }}|d         |d         |d         z
  |z  z   }|d         |d         |d         z
  |z  z   }|dz  }t	          |d         |d         |d	         z
  |dz  z  z
  ¦  «        }|||fc S ŒÕ|d         d         |d         d         |d	         fS )ud   TÃ­nh vá»‹ trÃ­ ná»™i suy mÆ°á»£t mÃ  (Hermite curve) vÃ  quÃ¢n sá»‘ hiá»‡n táº¡i cá»§a khá»‘i quÃ¢nÚintermediate_positions_pxÚstart_pos_pxr   r   Úinitial_strengthc                 ó   — g | ]
}|d          ‘ŒS )Út_sec© ©Ú.0Úpts     r   ú
<listcomp>z?CannaeTacticalMasterRenderer.get_unit_state.<locals>.<listcomp>½   s   € Ð3Ð3Ð3 r�r˜'”{Ð3Ð3Ð3rL   c                 ó   — g | ]
}|d          ‘ŒS )Úposrº   r»   s     r   r¾   z?CannaeTacticalMasterRenderer.get_unit_state.<locals>.<listcomp>¾   s   € Ð"=Ð"=Ð"=° 2 e¤9Ð"=Ð"=Ð"=rL   éÿÿÿÿÚfinal_strengthg      @r   rN   r   ç      œ@çÍÌÌÌÌÌô?)rz   r¦   ÚlenÚfloatr"   )r�   ÚunitÚsim_time_secÚinterÚ	start_posÚtimesÚ	positionsr®   Út0Út1Út_relÚsrO   rP   Úcur_xÚcur_yÚtot_pÚcurr_strs                     r   Úget_unit_statez+CannaeTacticalMasterRenderer.get_unit_state´   sD  € à—’Ð4°bÑ9Ô9ˆØ˜Ô(ˆ	àð 	HØ˜Q”< ¨1¤¨tÐ4FÔ/GÐGÐGð �Ð3Ð3¨UÐ3Ñ3Ô3Ñ3ˆØ�KÐ"=Ð"=°uÐ"=Ñ"=Ô"=Ñ=ˆ	à˜5 œ8Ò#Ð#Ø˜Q”< ”? I¨a¤L°¤O°TÐ:LÔ5MÐMÐMØ˜5 œ9Ò$Ð$Ø˜R”= Ô# Y¨r¤]°1Ô%5°tÐ<LÔ7MÐMÐMå•s˜5‘z”z A‘~Ñ&Ô&ð 	.ð 	.ˆAØ˜1”X˜u Q¨¡Uœ|�ˆBØ�\Ð'Ð'Ò'Ð' RÒ'Ð'Ð'Ð'Ð'Ø%¨Ñ*­e°B¸±G©n¬nÑ<�à˜5 A™:Ñ&¨°¸±
Ñ);Ñ;�Ø" 1œ y°°Q±Ô'7�B�Ø˜1œ  A¤¨¨A¬¡°!Ñ 3Ñ3�Ø˜1œ  A¤¨¨A¬¡°!Ñ 3Ñ3�ð % vÑ-�Ý˜tÐ$6Ô7¸4Ð@RÔ;SÐVZÐ[kÔVlÑ;lÐqvÐz}Ñq}Ñ:~Ñ~ÑÔ�Ø˜e XÐ-Ð-Ð-Ð-ð (ð ˜Œ}˜QÔ ¨2¤¨qÔ!1°4Ð8HÔ3IÐIÐIrL   c                 ó¾   — |                      ¦   «         }d|v sd|v rdS d|v s
d|v r|dk    rdS d|v sd	|v sd
|v rdS d|v sd|v rdS d|v sd|v sd|v rdS |dk    rdS dS )NÚnumidÚmaharbalrm   ÚequitesÚcavalryÚromerq   Ú	hasdrubalziberian & gallic cavzspanish cavrp   ÚlibyanÚphalanxro   ÚceltÚgallicziberian & gallic crern   rl   )Úlower)r�   ÚnameÚsideÚ	unit_typeÚnls        r   Úget_unit_icon_keyz.CannaeTacticalMasterRenderer.get_unit_icon_keyÖ   s»   € Ø�ZŠZ‰\Œ\ˆØ�bˆ=ˆ=˜J¨"Ð,Ð,Ø%Ð%Ø˜"ˆ_ˆ_ ¨b  °T¸V²^°^Ø"�?Ø˜BÐÐÐ"8¸BÐ">Ð">À-ÐSUÐBUÐBUØ$Ð$Ø˜ˆ^ˆ^˜y¨B˜˜Ø)Ð)Ø�rˆ\ˆ\˜X¨˜^˜^Ð/EÈÐ/KÐ/KØ*Ð*Ø�VŠ^ˆ^Ø$Ð$à)Ð)rL   c           
      óR	  — t           j        }t           j        }d\  }}t          j        |||f|dz   |dz   fddt           j        ¦  «         t          j        |d|dz   |dz   f|d	d
dt           j        ¦  «         d\  }}t          j        |||f|dz   |dz   fddt           j        ¦  «         t          j        |d|dz   |dz   f|d	d
dt           j        ¦  «         d\  }}	t          j        |||	f|dz   |	dz   fddt           j        ¦  «         t          j        |d|dz   |	dz   f|d	ddt           j        ¦  «         d\  }
}t          j        ||
|f|
dz   |dz   fddt           j        ¦  «         t          j        |d|
dz   |dz   f|dddt           j        ¦  «         d\  }}t          j        |||fdddt           j        ¦  «         t          j        |||fdddt           j        ¦  «         t          j        |||fdddt           j        ¦  «         t          j        |d |d!z
  |d"z
  f|d#ddt           j        ¦  «         t          j        |d$|d!z
  |dz
  f|dddt           j        ¦  «         t          j        |d%d&|d'd(dt           j        ¦  «         t          j        |d)d*|d	d+dt           j        ¦  «         d,\  }}t          j        |||fdd+dt           j        ¦  «         t          j        |||d-z
  f||d-z   fd+dt           j        ¦  «         t          j        ||d-z
  |f|d-z   |fd+dt           j        ¦  «         t          j        |d.|d/z
  |dz
  f|d0ddt           j        ¦  «         d1\  }}t          j        |||f|d2z   |fd3dt           j        ¦  «         t          j        |||d4z
  f||d4z   fd3dt           j        ¦  «         t          j        ||d5z   |d/z
  f|d5z   |d/z   fd3dt           j        ¦  «         t          j        ||d2z   |d4z
  f|d2z   |d4z   fd3dt           j        ¦  «         t          j        |d6|dz
  |d7z
  f|d8d3dt           j        ¦  «         t          j        |d9|dz   |d7z
  f|d8d3dt           j        ¦  «         t          j        |d:|d;z   |d7z
  f|d8d3dt           j        ¦  «         d<S )=u  
        Váº½ cÃ¡c Ä‘á»‹a danh, tiá»�n Ä‘á»“n doanh tráº¡i, cao Ä‘á»™ Ä‘á»‹a hÃ¬nh theo chuáº©n báº£n Ä‘á»“ tÃ¡c chiáº¿n Marcus Sterling:
        - Roman Large Camp & Roman Small Camp
        - Carthaginian Camp & Hannibal's Headquarters
        - Ä�á»‰nh Ä‘á»“i phÃ¡o Ä‘Ã i Cannae Citadel (54m peak & kho thÃ³c chiáº¿n lÆ°á»£c)
        - DÃ²ng sÃ´ng Aufidus vÃ  chá»‰ dáº«n Ä‘á»‹a lÃ½ tá»± nhiÃªn
        - La bÃ n Ä‘á»‹nh hÆ°á»›ng quÃ¢n sá»± (Compass Rose) & ThÆ°á»›c Ä‘o tá»· lá»‡ thá»±c Ä‘á»‹a (Scale Bar)
        )i�  éÃ   é&   é   )r	   r	   éÈ   r   zROMAN SMALL CAMP (3,000 MEN)é.   é   çÃõ(\�ÂÕ?)rë   éÒ   éæ   r   )éL  ip  rr   r	   zROMAN LARGE CAMP (7,000 MEN)é2   é   )éÀ  é–   r`   ©éÔ   é¯   é7   zCARTHAGINIAN MAIN CAMPé   )iÖ  i†  r_   zHANNIBAL'S CAMPé   ç{®GázÔ?©rt   rë   éÜ   )i�  iW  r   rÁ   zCANNAE CITADEL (54M PEAK)éª   é$   çš™™™™™Ù?zCaptured Carthaginian Granaryz>AUFIDUS RIVER (RIVER OFANTO -- STEEP CUT-BANK NATURAL BARRIER))é  r  ç
×£p=
×?)éŒ   é¾   r£   zADRIATIC SEA ->)i®  é‚   )r  rÿ   rë   )i0  r  é   ÚNé   çR¸…ëQØ?)rù   iu  én   )rt   rï   rð   é   rù   Ú0é	   ç333333Ó?Ú500mz1,000mé_   N)r$   ÚFONT_HERSHEY_SIMPLEXÚFONT_HERSHEY_TRIPLEXÚ	rectangler¨   ÚputTextÚcircler§   )r�   rª   ÚfontÚfont_trÚrx1Úry1Úrx2Úry2Úcx1Úcy1Úcx2Úcy2Úcit_xÚcit_yÚcomp_xÚcomp_yÚsb_xÚsb_ys                     r   Údraw_cartographic_landmarksz8CannaeTacticalMasterRenderer.draw_cartographic_landmarksç   sF  € õ Ô'ˆÝÔ*ˆð ‰ˆˆSÝŒ�e˜c 3˜Z¨#°©(°C¸"±HÐ)=¸}ÈaÕQTÔQ\Ñ]Ô]Ð]ÝŒ�EÐ9¸CÀ"¹HÀcÈBÁhÐ;OÐQUÐW[Ð]lÐnoÕqtÔq|Ñ}Ô}Ð}ð ‰ˆˆSÝŒ�e˜c 3˜Z¨#°©(°C¸"±HÐ)=¸}ÈaÕQTÔQ\Ñ]Ô]Ð]ÝŒ�EÐ9¸CÀ"¹HÀcÈBÁhÐ;OÐQUÐW[Ð]lÐnoÕqtÔq|Ñ}Ô}Ð}ð ‰ˆˆSÝŒ�e˜c 3˜Z¨#°©(°C¸"±HÐ)=¸~ÈqÕRUÔR]Ñ^Ô^Ð^ÝŒ�EÐ3°c¸B±hÀÀbÁÐ5IÈ4ÐQUÐWeÐghÕjmÔjuÑvÔvÐvà‰ˆˆSÝŒ�e˜c 3˜Z¨#°©(°C¸"±HÐ)=¸~ÈqÕRUÔR]Ñ^Ô^Ð^ÝŒ�EÐ,¨s°R©x¸¸r¹Ð.BÀDÈ$ÐP_ÐabÕdgÔdoÑpÔpÐpð !‰ˆˆuÝŒ
�5˜5 %˜.¨"¨n¸aÅÄÑMÔMÐMÝŒ
�5˜5 %˜.¨"¨n¸aÅÄÑMÔMÐMÝŒ
�5˜5 %˜.¨!¨^¸RÅÄÑMÔMÐMÝŒ�EÐ6¸À¹ÀeÈbÁjÐ8QÐSZÐ\`ÐbpÐrsÕuxô  vAñ  	Bô  	Bð  	BÝŒ�EÐ:¸UÀS¹[È%ÐRTÉ*Ð<UÐW[Ð]aÐcrÐtuÕwzô  xCñ  	Dô  	Dð  	Dõ 	Œ�EÐ[Ð]gÐimÐosð  vEð  GHõ  JMô  JUñ  	Vô  	Vð  	VÝŒ�EÐ,¨k¸4ÀÀÐXYÕ[^Ô[fÑgÔgÐgð #‰ˆ�ÝŒ
�5˜6 6Ð*¨B°ÀÅCÄKÑPÔPÐPÝŒ�˜ ¨"¡Ð-°¸À¹Ð/DÀoÐWXÕZ]ÔZeÑfÔfÐfÝŒ�˜ "™ fÐ-°¸±¸VÐ/DÀoÐWXÕZ]ÔZeÑfÔfÐfÝŒ�E˜3 ¨!¡¨V°b©[Ð 9¸4ÀÀ~ÐWXÕZ]ÔZeÑfÔfÐfð ‰
ˆˆdÝŒ�˜˜t˜ t¨c¡z°4Ð&8¸/È1ÍcÌkÑZÔZÐZÝŒ�˜˜t a™xÐ(¨4°¸±Ð*:¸OÈQÕPSÔP[Ñ\Ô\Ð\ÝŒ�˜ ™ D¨1¡HÐ-°°r±	¸4À!¹8Ð/DÀoÐWXÕZ]ÔZeÑfÔfÐfÝŒ�˜ ™ T¨A¡XÐ.°¸±¸TÀA¹XÐ0FÈÐYZÕ\_Ô\gÑhÔhÐhÝŒ�E˜3 ¨¡¨4°!©8Ð 4°d¸DÀ/ÐSTÕVYÔVaÑbÔbÐbÝŒ�E˜6 D¨2¡I¨t°a©xÐ#8¸$ÀÀoÐWXÕZ]ÔZeÑfÔfÐfÝŒ�E˜8 d¨R¡i°¸±Ð%:¸DÀ$ÈÐYZÕ\_Ô\gÑhÔhÐhÐhÐhrL   Nç        c           
      óÆ	  — d}d}d}|�¸|                      d¦  «        }|�¡||k    r›||z
  }|                      dd¦  «        }|                      dd	¦  «        }|||z   k    rdS ||k    r)t          d
d||z
  t          |¦  «        z  z
  ¦  «        }d}nd}d}|                      di ¦  «        }|                      dd¦  «        }|dk    r|n|                     ¦   «         }t          |d¦  «        }t          |d¦  «        }t	          ||dz  z
  ¦  «        t	          ||dz  z
  ¦  «        }}t	          ||dz  z   ¦  «        t	          ||dz  z   ¦  «        }}t	          |	d         ¦  «        t	          |	d         ¦  «        t	          |	d         ¦  «        f}d}|                     ¦   «         }t          j        |||z   ||z   f||z   ||z   fdd¦  «         t          j        |d|dd|¦  «         t          j        |||f||fdd¦  «         t          j        ||dz   |dz   f|dz
  |dz
  f|d¦  «         |rd}n
|dk    rdnd}t          j        |||f||f||rdndt
          j        ¦  «         |  	                    |||¦  «        } | j
                              | ¦  «        }!|dz
  }"|t	          |dz
  dz  ¦  «        z   }#|!�t          ||!|"|#dd¬ ¦  «         n#t          j        ||d!z   ||dz  z   fddd¦  «         t
          j        }$|d"z   }%t          |¦  «        d#k    r
|dd#…         n|}&t          j        ||&|%|t	          |dz  ¦  «        z   f|$d$d%dt
          j        ¦  «         |�r(t          j        |d&|%|dz
  f|$d'd(dt
          j        ¦  «         t          j        |||f||fddt
          j        ¦  «         t          j        |||f||fddt
          j        ¦  «         t          d)t	          t          |¦  «        d*z  ¦  «        ¦  «        }'t          j        |||d+z
  f||'z   |d,z
  fd-d¦  «         t          j        |||d+z
  f||'z   |d,z
  fddt
          j        ¦  «         t          j        |||dz   |d.z
  f|$d/d(dt
          j        ¦  «         n;t          j        |t	          |
¦  «        d0›d1�|%|dz
  f|$d'd2dt
          j        ¦  «         |dk     rt          j        |||d|z
  d|¦  «         dS dS )3u…   Váº½ tháº» bÃ i gá»— chiáº¿n thuáº­t káº¿t há»£p ICON CHIáº¾N BINH Lá»ŠCH Sá»¬ Ä�áº¶C TRÆ¯NG & VÃ’NG Ä�á»œI TIÃŠU DIá»†T [TERMINATED]r   Fz[TERMINATED: ANNIHILATED]NÚtermination_time_secÚ termination_display_duration_secg      @Úfade_out_duration_secrN   r(  TÚdefeat_lifecycleÚtermination_badge_textg+‡ÙÎ÷ï?r  é,   r   r   r   é   )r  r  é   rÁ   ç¤p=
×£à?ç¸…ëQ¸Þ?)rí   ró   r_   )ró   ró   éð   Úcarthagerö   )r4  éõ   éú   é   rr   )r4   r5   rí   ra   é   r
  ©r    r    r    zCASUALTIES: 100%rü   )é<   r;  r    rt   gffffff @rê   r	  )é
   r<  ró   r<  r  ú,z men)é×   rð   r6  )rz   r!   rÆ   r¥   r"   r$   r  r©   r¨   ræ   rk   rK   r  r  rÅ   r  r§   )(r�   ÚimgÚcxÚcyÚwÚhrâ   rã   rä   Ú	color_rgbÚstrengthÚ	unit_datarÈ   r5   Úis_terminatedÚ
badge_textÚ	term_timeÚdtÚdisp_durÚfade_durÚdlÚtargetÚ
w_expandedÚ
h_expandedr=   r>   r?   r@   ÚbgrÚ
shadow_offÚ	s_overlayÚ
border_colr›   Úsoldier_iconÚicon_xÚicon_yr  ÚtxÚ
short_nameÚbw_bs(                                           r   Údraw_nato_counterz.CannaeTacticalMasterRenderer.draw_nato_counter$  sr  € ð ˆØˆØ0ˆ
àÐ Ø!ŸšÐ&<Ñ=Ô=ˆIØÐ$¨¸Ò)BÐ)BØ! IÑ-�Ø$Ÿ=š=Ð)KÈSÑQÔQ�Ø$Ÿ=š=Ð)@À#ÑFÔF�à˜( XÑ-Ò.Ð.ð �FØ˜(’]�]å! # s¨b°8©m½uÀX¹¼Ñ-NÑ'NÑOÔO�GØ$(�M�Mð "�GØ$(�Mà—]’]Ð#5°rÑ:Ô:�ØŸVšVÐ$<Ð>YÑZÔZ�
à 5Ò(Ð(��¨c¯hªh©j¬jˆå˜˜C‘[”[ˆ
Ý˜˜B‘Z”Zˆ
Ý�R˜* q™.Ñ(Ñ)Ô)­3¨r°JÀ±NÑ/BÑ+CÔ+CˆBˆÝ�R˜* q™.Ñ(Ñ)Ô)­3¨r°JÀ±NÑ/BÑ+CÔ+CˆBˆÝ�9˜Q”<Ñ Ô ¥# i°¤lÑ"3Ô"3µS¸À1¼Ñ5FÔ5FÐGˆð ˆ
Ø—K’K‘M”Mˆ	ÝŒ�i " z¡/°2¸
±?Ð!CØ˜J‘¨¨Z©Ð8¸)ÀRñ	Iô 	Ið 	IåŒ˜	 4¨°°q¸&ÑAÔAÐAõ 	Œ�f˜r 2˜h¨¨R¨°,ÀÑCÔCÐCÝŒ�f˜r A™v r¨A¡vÐ.°°a±¸¸a¹Ð0@À#ÀrÑJÔJÐJàð 	SØ&ˆJˆJà+/°:Ò+=Ð+=˜˜À?ˆJÝŒ�f˜r 2˜h¨¨R¨°*À=Ð>W¸a¸aÐVWÕY\ÔYdÑeÔeÐeð ×)Ò)¨$°°iÑ@Ô@ˆØ”×*Ò*¨8Ñ4Ô4ˆØ�b‘ˆØ•c˜:¨™?¨aÑ/Ñ0Ô0Ñ0ˆàÐ#Ý ¨°f¸fÈCÐY\Ð]Ñ]Ô]Ð]Ð]õ ŒJ�v  R¡¨¨j¸A©oÑ)=Ð>ÀÀNÐTVÑWÔWÐWõ Ô'ˆØ�"‰WˆÝ"% d¡)¤)¨b¢. .�T˜#˜2˜#”Y�Y°dˆ
ÝŒ�F˜J¨¨Rµ#°jÀ4Ñ6GÑ2HÔ2HÑ-HÐ(IÈ4ÐQUÐWfÐhiÕknÔkvÑwÔwÐwàñ 	uÝŒK˜Ð 2°R¸¸a¹°LÀ$ÈÈmÐ]^Õ`cÔ`kÑlÔlÐlåŒH�V˜b "˜X¨¨B x°ÀÅ3Ä;ÑOÔOÐOÝŒH�V˜b "˜X¨¨B x°ÀÅ3Ä;ÑOÔOÐOõ �s�C¥ J¡¤°#Ñ 5Ñ6Ô6Ñ7Ô7ˆDÝŒM˜& 2 r¨B¡w -°"°t±)¸RÀ!¹VÐ1DÀlÐTVÑWÔWÐWÝŒM˜& 2 r¨B¡w -°"°t±)¸RÀ!¹VÐ1DÀmÐUVÕX[ÔXcÑdÔdÐdÝŒK˜ 
¨R°!©V°R¸"±WÐ,=¸tÀTÈ=ÐZ[Õ]`Ô]hÑiÔiÐiÐiåŒK˜¥3 x¡=¤=Ð 8Ð 8Ð 8Ð 8¸2¸rÀA¹v¸,ÈÈdÐTcÐefÕhkÔhsÑtÔtÐtà�UŠ?ˆ?ÝŒO˜F G¨S°#¸±-ÀÀCÑHÔHÐHÐHÐHð ˆ?rL   c           
      óº	  — |d         }|d         }||k     rdS t          d||z
  t          |¦  «        z  ¦  «        }|dk    rdS |d         }|d         }|d         }	|d	         }
|d
         }t          |d         ¦  «        t          |d         ¦  «        t          |d         ¦  «        f}t          dt          d|z  ¦  «        ¦  «        }g }t	          |dz   ¦  «        D ]4}|dz  }||k    r n&|                     t          ||	|
|¦  «        ¦  «         Œ5t          |¦  «        dk     rdS t          j	        |t          j
        ¦  «                             d¦  «        }ddt          j        |dz  ¦  «        z  z   }t          d|z  ¦  «        }t          j        ||gdd|dz   t          j        ¦  «         t#          d„ |D ¦   «         ¦  «        }t          j        ||gd||t          j        ¦  «         t          j        ||gdddt          j        ¦  «         t          j        ||gd|dt          j        ¦  «         |d         }|d         }t          j        |d         |d         z
  |d         |d         z
  ¦  «        }d}t          j        dz  }t          |d         |t          j        ||z
  ¦  «        z  z
  ¦  «        t          |d         |t          j        ||z
  ¦  «        z  z
  ¦  «        f}t          |d         |t          j        ||z   ¦  «        z  z
  ¦  «        t          |d         |t          j        ||z   ¦  «        z  z
  ¦  «        f}t          j	        |||gt          j
        ¦  «        }t          j        ||g|t          j        ¦  «         t          j        ||gdddt          j        ¦  «         |                     dd ¦  «        }|�r|d!k    �r
|t          |¦  «        dz           }t          j        }t          j        ||d!d¦  «        \  \  } }!}"t          j        ||d         d"z   |d         |!z
  d"z
  f|d         | z   d#z   |d         dz   fd$d¦  «         t          j        ||d         d"z   |d         |!z
  d"z
  f|d         | z   d#z   |d         dz   f|d¦  «         t          j        |||d         d%z   |d         dz
  f|d!d&dt          j        ¦  «         dS dS dS )'uQ   Váº½ Ä‘Æ°á»�ng cong BÃ©zier phÃ¡t quang xung lá»±c vá»›i Ä‘áº§u mÅ©i tÃªn Ä‘á»™ngÚstart_time_secÚduration_secNr   g{®Gáz”?Ú
bezier_ptsÚfromÚctrlÚtorD  r   r   r   r1  é-   g     €F@)rÁ   r   r   ç      Ð?g      @é   F)r   r   r   r	  c              3   óV   K  — | ]$}t          d t          |dz  ¦  «        ¦  «        V — Œ%dS )r    çš™™™™™á?N)r(   r"   )r¼   Úcs     r   ú	<genexpr>zGCannaeTacticalMasterRenderer.draw_luminescent_vector.<locals>.<genexpr>¤  s6   è è € Ð>Ð>°Q�˜S¥# a¨$¡h¡-¤-Ñ0Ô0Ð>Ð>Ð>Ð>Ð>Ð>rL   r:  rÁ   éþÿÿÿr9  g      @TÚlabelÚ r  r0  r8  ©re  r8  rí   r<  )éë   r6  r    )r(   rÆ   r"   r!   r¦   ÚappendrT   rÅ   r*   ÚarrayÚint32ÚreshapeÚmathÚsinr$   Ú	polylinesr¨   ÚtupleÚatan2ÚpiÚcosÚfillPolyrz   r  ÚgetTextSizer  r  )#r�   r?  ÚvecrÈ   Út_startÚt_durÚprogressÚpts_specrO   rP   rQ   rD  rQ  Ú	num_stepsÚ	curve_ptsr®   Út_curveÚpts_arrÚ
glow_pulseÚ
glow_widthÚglow_bgrÚtipÚprevÚangleÚ	arrow_lenÚ	arrow_angÚw1Úw2Ú
arrow_polyrk  Úmidr  ÚtwÚthr:   s#                                      r   Údraw_luminescent_vectorz4CannaeTacticalMasterRenderer.draw_luminescent_vector~  sÛ  € àÐ&Ô'ˆØ�NÔ#ˆà˜'Ò!Ð!ØˆFå�s˜\¨GÑ3µu¸U±|´|ÑCÑDÔDˆØ�tÒÐØˆFà�|Ô$ˆØ�fÔˆØ�fÔˆØ�dŒ^ˆØ˜Ô$ˆ	Ý�9˜Q”<Ñ Ô ¥# i°¤lÑ"3Ô"3µS¸À1¼Ñ5FÔ5FÐGˆõ ˜�3˜r H™}Ñ-Ô-Ñ.Ô.ˆ	Øˆ	Ý�y 1‘}Ñ%Ô%ð 	Dð 	DˆAØ˜4‘xˆGØ˜Ò!Ð!Ø�Ø×ÒÕ-¨b°"°b¸'ÑBÔBÑCÔCÐCÐCåˆy‰>Œ>˜AÒÐØˆFå”(˜9¥b¤hÑ/Ô/×7Ò7¸
ÑCÔCˆð ˜4¥$¤(¨<¸#Ñ+=Ñ">Ô">Ñ>Ñ>ˆ
Ý˜˜j™Ñ)Ô)ˆ
ÝŒ�c˜G˜9 e¨Y¸
ÀQ¹ÍÌÑTÔTÐTåÐ>Ð>¸#Ð>Ñ>Ô>Ñ>Ô>ˆÝŒ�c˜G˜9 e¨X°zÅ3Ä;ÑOÔOÐOõ 	Œ�c˜G˜9 e¨_¸aÅÄÑMÔMÐMÝŒ�c˜G˜9 e¨S°!µS´[ÑAÔAÐAð ˜ŒmˆØ˜Œ}ˆÝ”
˜3˜qœ6 D¨¤GÑ+¨S°¬V°d¸1´gÑ-=Ñ>Ô>ˆØˆ	Ý”G˜c‘Mˆ	å�#�a”&˜9¥t¤x°¸	Ñ0AÑ'BÔ'BÑBÑBÑCÔCÅSÈÈQÌÐR[Õ^bÔ^fÐglÐoxÑgxÑ^yÔ^yÑRyÑIyÑEzÔEzÐ{ˆÝ�#�a”&˜9¥t¤x°¸	Ñ0AÑ'BÔ'BÑBÑBÑCÔCÅSÈÈQÌÐR[Õ^bÔ^fÐglÐoxÑgxÑ^yÔ^yÑRyÑIyÑEzÔEzÐ{ˆÝ”X˜s B¨˜m­R¬XÑ6Ô6ˆ
åŒ�S˜:˜,¨­S¬[Ñ9Ô9Ð9ÝŒ�c˜J˜<¨¨ÀÅ3Ä;ÑOÔOÐOð —’˜ Ñ$Ô$ˆØñ 	l�X ’^‘^Ø�C 	™NœN¨aÑ/Ô0ˆCÝÔ+ˆDåœ/¨%°°t¸QÑ?Ô?‰K‰HˆR��aÝŒM˜#  A¤¨¡
¨C°¬F°R©K¸!©OÐ<¸sÀ1¼vÈ¹{ÈRÑ?OÐQTÐUVÔQWÐZ[ÑQ[Ð>\Ð^jÐlnÑoÔoÐoÝŒM˜#  A¤¨¡
¨C°¬F°R©K¸!©OÐ<¸sÀ1¼vÈ¹{ÈRÑ?OÐQTÐUVÔQWÐZ[ÑQ[Ð>\Ð^aÐcdÑeÔeÐeÝŒK˜˜U S¨¤V¨b¡[°#°a´&¸1±*Ð$=¸tÀTÈ?Ð\]Õ_bÔ_jÑkÔkÐkÐkÐkð	lð 	l�^�^rL   c           
      ó  — |dk     rdS t          d|dz
  dz  ¦  «        }d\  }}t          dd|z  z
  ¦  «        }ddt          j        |d	z  ¦  «        z  z   }t          ||z  ¦  «        }|                     ¦   «         }	t          j        |	||ft          |d
z  ¦  «        dd¦  «         t          j        |	||f|dd¦  «         t          j        |	||ft          |dz  ¦  «        dd¦  «         t          j        |	dd¦  «        }	t          ddd|z  z   ¦  «        }
t          j        |	|
|d|
z
  d|¦  «         d\  }}d\  }}|                     ¦   «         }t          j	        |||f||z   ||z   fdd¦  «         t          j        |d|dd|¦  «         t          j	        |||f||z   ||z   fddt
          j
        ¦  «         dd|z  z   }t
          j        }t          j        |d|dz   |dz   f|dd dt
          j
        ¦  «         t          j        |d!|d"›d#�|dz   |d$z   f|d%d&dt
          j
        ¦  «         t          j        |d'|dz   |d(z   f|d)d*dt
          j
        ¦  «         t          j        |d+|dz   |d,z   f|d)d-dt
          j
        ¦  «         dS ).u¿   
        Váº½ báº£n Ä‘á»“ nhiá»‡t Ä‘o Ã¡p lá»±c nÃ©n váº­t lÃ½ (Heatmap of Pressure)
        KÃ­ch hoáº¡t máº¡nh tá»« Phase 3 sang Phase 5 khi 70.000 lÃ­nh La MÃ£ bá»‹ nhá»“i ngháº¹t
        rñ   Nr   g     À‚@)rô   iï  é‘   éA   g¸…ëQ¸¾?g       @g      ø?)ró   r  rþ   rÁ   )r	   r;  rð   rg  )r<  r<  rt   )rù   rù   r   rd  r  )r;  éx   )éh  r  rm  g)\�Âõ(ì?)é(   rò   rþ   r   gffffffö?gffffff@zHEATMAP OF PHYSICAL PRESSUREr8  r_   çáz®GáÚ?rö   z	DENSITY: z.2fz SOLDIERS / M2é4   r3  )r;  r¢   r4  zGLADIUS DRAW: IMPOSSIBLEéN   r
  )rþ   rþ   rþ   zCRITICAL ASPHYXIATION ZONEéh   )r  r£   r4  )r(   r"   rs  rt  r¥   r$   r  ÚGaussianBlurr©   r  r¨   r  r  )r�   r?  rÈ   Úheat_progressÚcenter_xÚcenter_yÚradiusÚpulseÚr_pulsedr­   rF   Úcard_x1Úcard_y1Úcard_wÚcard_hÚcard_overlayÚdensityr  s                     r   Údraw_pressure_heatmapz2CannaeTacticalMasterRenderer.draw_pressure_heatmapÄ  s  € ð ˜$ÒÐØˆFå˜C ,°Ñ"5¸Ñ!>Ñ?Ô?ˆØ%Ñˆ�(õ �S˜2 Ñ-Ñ-Ñ.Ô.ˆð �d�TœX l°SÑ&8Ñ9Ô9Ñ9Ñ9ˆÝ�v ‘~Ñ&Ô&ˆà—(’(‘*”*ˆåŒ
�7˜X xÐ0µ#°hÀ±nÑ2EÔ2EÀ~ÐWYÑZÔZÐZåŒ
�7˜X xÐ0°(¸MÈ2ÑNÔNÐNåŒ
�7˜X xÐ0µ#°hÀ±oÑ2FÔ2FÈÐWYÑZÔZÐZõ Ô" 7¨H°aÑ8Ô8ˆÝ�D˜$ ¨Ñ!5Ñ5Ñ6Ô6ˆÝŒ˜ ¨¨S°5©[¸!¸SÑAÔAÐAð #Ñˆ�Ø!‰ˆ�Ø—x’x‘z”zˆÝŒ�l W¨gÐ$6¸À6Ñ9IÈ7ÐU[ÑK[Ð8\Ð^jÐlnÑoÔoÐoÝŒ˜ d¨C°°q¸#Ñ>Ô>Ð>ÝŒ�c˜G WÐ-°¸&Ñ0@À'ÈFÑBRÐ/SÐUbÐdeÕgjÔgrÑsÔsÐsà˜˜mÑ+Ñ+ˆÝÔ'ˆÝŒ�CÐ7¸'ÀB¹,ÈÐRTÉÐ9UÐW[Ð]aÐcqÐstÕvyô  wBñ  	Cô  	Cð  	CÝŒ�CÐ@ WÐ@Ð@Ð@Ð@À7ÈRÁ<ÐQXÐ[]ÑQ]ÐB^Ð`dÐfjÐlyÐ{|õ  Bô  Jñ  	Kô  	Kð  	KÝŒ�CÐ3°gÀ±lÀGÈbÁLÐ5QÐSWÐY]Ð_nÐpqÕsvÔs~ÑÔÐÝŒ�CÐ5¸À"¹ÀgÐPSÁmÐ7TÐVZÐ\`ÐbqÐstÕvyô  wBñ  	Cô  	Cð  	Cð  	Cð  	CrL   c           
      ó@	  — |t          |¦  «        z  }d}d|cxk    rdk    rn nd}n8d|cxk    rdk    rn nd}n%d|cxk    rd	k    rn nd
}nd|cxk    rdk    rn nd}|sdS |\  }}}	}
}}||
z
  }||
z
  t          d|¦  «        z  }|dk     r|dz  }t          dd|z
  z  ¦  «        }n(|dk    rd|z
  dz  }t          dd|z
  z  ¦  «        }nd}d}t          |t          z  ¦  «        }|	dk    räd}d|z   }d}| j                             ||||||||¬¦  «         t          j        ||dz   df|dz   dfdd¦  «         t          j        ||dz   df|dz   dfddt          j        ¦  «         t          j	        |d |dz   d!ft          j
        d"ddt          j        ¦  «         t          j	        |d#|dz   d$ft          j        d%d&dt          j        ¦  «         dS |	d'k    räd(}d)|z   }d*}| j                             ||||||||¬¦  «         t          j        ||dz   df|dz   dfdd¦  «         t          j        ||dz   df|dz   dfddt          j        ¦  «         t          j	        |d |dz   d!ft          j
        d"ddt          j        ¦  «         t          j	        |d+|dz   d$ft          j        d%d,dt          j        ¦  «         dS |	d-k    �rÛd.}d)|z   }d/}| j                             ||||||||¬¦  «         t          j        ||dz   df|dz   dfdd¦  «         t          j        ||dz   df|dz   dfddt          j        ¦  «         t          j	        |d |dz   d!ft          j
        d"ddt          j        ¦  «         t          j	        |d#|dz   d$ft          j        d%ddt          j        ¦  «         d0\  }}d1\  }}|                     ¦   «         }t          j        |||f||z   ||z   fd2d¦  «         t          j        |d|dd|¦  «         t          j        |||f||z   ||z   fddt          j        ¦  «         t          j	        |d3|› �|dz   |d4z   ft          j
        d5ddt          j        ¦  «         t          j	        |d6|dz   |d7z   ft          j        d8d9dt          j        ¦  «         dS dS ):uÛ   
        TÃ­ch há»£p hÃ¬nh tÆ°á»£ng Host Seven Nguyen táº¡i 4 cues chuáº©n cá»§a Victor Vance
        TuÃ¢n thá»§ tuyá»‡t Ä‘á»‘i VÃ¹ng an toÃ n (Station A: Lower-Right, Station B: Lower-Left, Station C: Master)
        Nr(  ç{®Gáz´?)ÚCUE_1rP   Ú	station_cr(  r­  z"COLD OPEN: THE 86,000 ROMAN ENIGMArš  r3  )ÚCUE_2re   Ú	station_arš  r3  z#TURNING POINT: THE ELASTIC CRESCENTç¸…ëQ¸æ?ç¤p=
×£è?)ÚCUE_3rf   Ú	station_br²  r³  z%CRITICAL SECTOR: THE CRUSHED CAULDRONç…ëQ¸í?r   )ÚCUE_4rg   r¯  r¶  r   z%TACTICAL SYNTHESIS: THE CANNAE LEGACYr   ç333333Ã?é#   g333333ë?r   r±  id  iê  g333333ÿ?)Ú
base_scaler5   r¹   Ú	frame_idxró   rô   r˜  iü  rm  rÁ   rö   r   zSEVEN NGUYENiÙ  r2  zLEAD WAR ROOM STRATEGISTið  rî   rý   rµ  éK   iþ  gffffffþ?zCRITICAL TACTICAL DISPATCH)rþ   r£   r;  r¯  r–  gš™™™™™ý?)ià  éR   )rô   éD   ©r<  re  é   zWAR ROOM MASTER BRIEFING | r`   g)\�Âõ(Ü?uD   HISTORICAL 2D STUDIO â€” HIGH-RPM DOCUMENTARY SERIES (CANNAE 216 BC)r›  r  )rþ   rn  r7  )rÆ   r!   r"   ÚDEFAULT_FPSr‡   Ú
draw_actorr$   r  r¨   r  r  r  r¥   r©   )r�   r?  rÈ   Úreal_duration_secÚcurrent_time_secÚt_ratioÚ
active_cueÚcue_idr—   ÚstationÚr_startÚr_endÚ	cue_titleÚcue_lenÚcue_progressr5   Úslide_yr»  Údock_xÚdock_yr4   Úbx1Úby1ÚbwÚbhr©  s                             r   Údraw_host_dockz+CannaeTacticalMasterRenderer.draw_host_dockó  sŽ  € ð
 #¥UÐ+<Ñ%=Ô%=Ñ=ˆð ˆ
Ø�'Ð!Ð!Ò!Ð!˜TÒ!Ð!Ð!Ð!Ð!ØfˆJˆJØ�WÐ$Ð$Ò$Ð$ Ò$Ð$Ð$Ð$Ð$àhˆJˆJØ�WÐ$Ð$Ò$Ð$ Ò$Ð$Ð$Ð$Ð$ØjˆJˆJØ�WÐ$Ð$Ò$Ð$ Ò$Ð$Ð$Ð$Ð$ØjˆJàð 	ØˆFà?IÑ<ˆ�˜' 7¨E°9Ø˜'‘/ˆØ 'Ñ)­S°¸Ñ-@Ô-@Ñ@ˆð ˜$ÒÐØ" TÑ)ˆGÝ˜"  g¡Ñ.Ñ/Ô/ˆGˆGØ˜DÒ Ð Ø˜\Ñ)¨TÑ1ˆGÝ˜"  g¡Ñ.Ñ/Ô/ˆGˆGàˆGØˆGåÐ(­;Ñ6Ñ7Ô7ˆ	à�kÒ!Ð!àˆFØ˜7‘]ˆFØˆEØŒJ×!Ò! # x°¸ÈEÐ[bÐjzð  GPÐ!ñ  Qô  Qð  Qõ ŒM˜# ¨¡¨SÐ1°F¸S±LÀ$Ð3GÈÐWYÑZÔZÐZÝŒM˜# ¨¡¨SÐ1°F¸S±LÀ$Ð3GÈÐYZÕ\_Ô\gÑhÔhÐhÝŒK˜˜^¨f°r©k¸3Ð-?ÅÔAYÐ[_ÐaoÐqrÕtwÔtñ  Aô  Að  AÝŒK˜Ð7¸&À2¹+ÀtÐ9LÍcÔNfÐhlÐn}ð  @Aõ  CFô  CNñ  Oô  Oð  Oð  Oð  Oà˜Ò#Ð#àˆFØ˜7‘]ˆFØˆEØŒJ×!Ò! # x°¸ÈEÐ[bÐjzð  GPÐ!ñ  Qô  Qð  QåŒM˜# ¨¡¨SÐ1°F¸S±LÀ$Ð3GÈÐWYÑZÔZÐZÝŒM˜# ¨¡¨SÐ1°F¸S±LÀ$Ð3GÈÐYZÕ\_Ô\gÑhÔhÐhÝŒK˜˜^¨f°r©k¸3Ð-?ÅÔAYÐ[_ÐaoÐqrÕtwÔtñ  Aô  Að  AÝŒK˜Ð9¸FÀR¹KÈÐ;NÕPSÔPhÐjnÐp~ð  ABõ  DGô  DOñ  Pô  Pð  Pð  Pð  Pà˜Ò#Ñ#àˆFØ˜7‘]ˆFØˆEØŒJ×!Ò! # x°¸ÈEÐ[bÐjzð  GPÐ!ñ  Qô  Qð  QåŒM˜# ¨¡¨SÐ1°F¸S±LÀ$Ð3GÈÐWYÑZÔZÐZÝŒM˜# ¨¡¨SÐ1°F¸S±LÀ$Ð3GÈÐYZÕ\_Ô\gÑhÔhÐhÝŒK˜˜^¨f°r©k¸3Ð-?ÅÔAYÐ[_ÐaoÐqrÕtwÔtñ  Aô  Að  AÝŒK˜Ð7¸&À2¹+ÀtÐ9LÍcÔNfÐhlÐn|Ð~õ  BEô  BMñ  Nô  Nð  Nð ‰HˆC�Ø‰FˆB�ØŸ8š8™:œ:ˆLÝŒM˜,¨¨c¨
°S¸2±X¸sÀR¹xÐ4HÈ,ÐXZÑ[Ô[Ð[ÝŒO˜L¨$°°T¸1¸cÑBÔBÐBÝŒM˜#  S˜z¨C°"©H°c¸B±hÐ+?ÀÐQRÕTWÔT_Ñ`Ô`Ð`åŒK˜ÐF¸9ÐFÐFÈÈrÉÐSVÐY[ÑS[ÐH\Õ^aÔ^vÐx|ð  Mð  OPõ  RUô  R]ñ  ^ô  ^ð  ^ÝŒK˜ÐcÐfiÐlnÑfnÐpsÐvxÑpxÐeyÕ{~ô  |Tð  VZð  \kð  mnõ  psô  p{ñ  |ô  |ð  |ð  |ð  |ð+ $Ð#rL   c           
      ó<  — t          j        |dt          dfdd¦  «         t          j        |dt          dfddt           j        ¦  «         d}d	}| j        D ]X}|d
         }|d         |cxk    r|d         k    r5n Œ&|d                              ¦   «         }|                     dd¦  «        } nŒYt           j        }	t           j	        }
t          j
        |dd|	dddt           j        ¦  «         t          j
        |d|› d|› �d|
dddt           j        ¦  «         t          j
        |dt          dz
  df|	dddt           j        ¦  «         t          j
        |dt          dz
  df|
dddt           j        ¦  «         t          dz
  }t          j        |d|ft          t          fdd¦  «         t          j        |d|ft          |fd dt           j        ¦  «         t          d!|d"z  ¦  «        }t          d#|d$z  z  ¦  «        }t          d%|d&z  z  ¦  «        }t          d'|d(z  z  d!d)t          j        |d*z  ¦  «        z  z   z  ¦  «        }t          j        |d+|d,z   fd-|d-z   fd.d¦  «         t          j
        |d/d0|d1z   f|
d2d3dt           j        ¦  «         t          j
        ||d4›d5�d0|d6z   ft           j        d7d8dt           j        ¦  «         t          d9z
  }t          j        |||d,z   f|d,z   |d-z   fd:d¦  «         t          j
        |d;|d1z   |d1z   f|
d2d3dt           j        ¦  «         t          j
        ||d4›d5�|d1z   |d6z   ft           j        d7d<dt           j        ¦  «         t          d=z
  dz  }t          j
        |d>|› d?�|d@z   |d1z   f|
dddt           j        ¦  «         d9}t          j        |||dAz   f||z   |d@z   fdBd¦  «         t          ||z  ¦  «        }t          j        |||dAz   f||z   |d@z   fdd¦  «         t          j        |||dAz   f||z   |d@z   fdCd¦  «         dDS )Eug   Váº½ thanh tiÃªu Ä‘á»� HUD hoÃ ng gia, bá»™ Ä‘áº¿m thÆ°Æ¡ng vong vÃ  Ä‘á»“ng há»“ váº­n tá»‘c sÃ¡t sinh)r   r   r¼  r¿  rÁ   )r   r¼  rö   r   zPHASE 1: STRATEGIC DEPLOYMENTz08:00 AMÚtimestamp_range_secr   r   râ   Úhistoric_timerl  zBATTLE OF CANNAE (216 BC))r™  r   g
×£p=
ç?zCHRONOLOGY: z | )r™  r;  r  )rt   rè   rï   zSTUDIO HISTORICAL-2Di@  r   ç      à?zTACTICAL SANDTABLE ENGINE 2026r;  rî   )r  r£   rt   )rc  rù   éF   r   rÃ   i¬ gš™™™™™@iD  rÄ   r—  r¡   r¸  gš™™™™™¹?r™  rû   rù   )r™  r™  é¹   zROMAN REPUBLIC LOSSES:r¾  r`   r
  )rt   rt   rt   r=  z CASUALTIESé6   g×£p=
×ã?)r¼  éZ   rn  i¤  )rù   rø   r÷   zCARTHAGINIAN ALLIANCE LOSSES:)rù   rè   éá   i¸  zSLAUGHTER VELOCITY: z DEATHS / MINUTErò   ré   )r  r	   ré   )rÚ  éU   éd   N)r$   r  r�   r§   r¨   r{   Úupperrz   r  r  r  r‚   r(   r"   rs  rt  ÚFONT_HERSHEY_DUPLEX)r�   r?  rÈ   rÃ  rÄ  Úcurrent_phase_nameÚ	hist_timeÚpÚrngÚfont_headerÚfont_subÚdock_y1Út_progÚ	rome_deadÚ
carth_deadÚvelocityÚcx_carthÚmeter_xÚbar_wÚfill_ws                       r   Údraw_hudz%CannaeTacticalMasterRenderer.draw_hudO  s  € õ 	Œ�c˜6¥E¨2 ;°¸bÑAÔAÐAÝŒ��g¥ r˜{¨N¸A½s¼{ÑKÔKÐKð =ÐØˆ	Ø”ð 	ð 	ˆAØÐ)Ô*ˆCØ�1Œv˜Ð/Ð/Ò/Ð/¨¨Q¬Ò/Ð/Ð/Ð/Ð/Ø%& v¤Y§_¢_Ñ%6Ô%6Ð"ØŸEšE /°2Ñ6Ô6�	Ø�ð 0õ
 Ô.ˆÝÔ+ˆåŒ�CÐ4°hÀÈTÐSaÐcdÕfiÔfqÑrÔrÐrÝŒ�CÐJ¨	ÐJÐJÐ6HÐJÐJÈHÐV^Ð`dÐfuÐwxÕz}ô  {Fñ  	Gô  	Gð  	Gõ 	Œ�CÐ/µ%¸#±+¸rÐ1BÀKÐQUÐWeÐghÕjmÔjuÑvÔvÐvÝŒ�CÐ9½EÀC¹KÈÐ;LÈhÐX\Ð^mÐopÕruÔr}Ñ~Ô~Ð~õ ˜2‘+ˆÝŒ�c˜A˜w˜<­%µ¨¸,ÈÑKÔKÐKÝŒ��q˜'�l¥U¨GÐ$4°lÀAÅsÄ{ÑSÔSÐSõ �S˜,¨Ñ/Ñ0Ô0ˆÝ˜ ¨3¡Ñ/Ñ0Ô0ˆ	Ý˜ ¨3¡Ñ/Ñ0Ô0ˆ
Ý�s˜f¨™mÑ,°°d½T¼XÀlÐUXÑFXÑ=YÔ=YÑ6YÑ0YÑZÑ[Ô[ˆõ 	Œ�c˜B ¨"¡Ð-°°G¸b±LÐ/AÀ=ÐRTÑUÔUÐUÝŒ�CÐ1°B¸À"¹Ð3EÀxÐQUÐWfÐhiÕknÔkvÑwÔwÐwÝŒ�C˜IÐ4Ð4Ð4Ð4°r¸7ÀR¹<Ð6HÍ#ÔJaÐcgÐivÐxyÕ{~ô  |Gñ  	Hô  	Hð  	Hõ ˜3‘;ˆÝŒ�c˜H g°¡lÐ3°hÀ±mÀWÈrÁ\Ð5RÐTbÐdfÑgÔgÐgÝŒ�CÐ8¸8Àb¹=È'ÐTVÉ,Ð:WÐYaÐcgÐixÐz{õ  ~Aô  ~Iñ  	Jô  	Jð  	JÝŒ�C˜JÐ5Ð5Ð5Ð5¸À2¹ÀwÐQSÁ|Ð7TÕVYÔVmÐosð  vDð  FGõ  ILô  ITñ  	Uô  	Uð  	Uõ ˜3‘; 1Ñ$ˆÝŒ�CÐJ°ÐJÐJÐJÈWÐWYÉ\Ð[bÐegÑ[gÐLhÐjrÐtxð  {Ið  KLõ  NQô  NYñ  	Zô  	Zð  	Zð ˆÝŒ�c˜G W¨r¡\Ð2°W¸u±_ÀgÐPRÁlÐ4SÐUaÐceÑfÔfÐfÝ�U˜V‘^Ñ$Ô$ˆÝŒ�c˜G W¨r¡\Ð2°W¸vÑ5EÀwÐQSÁ|Ð4TÐVdÐfhÑiÔiÐiÝŒ�c˜G W¨r¡\Ð2°W¸u±_ÀgÐPRÁlÐ4SÐUbÐdeÑfÔfÐfÐfÐfrL   c                 ó¦  — |t          t          ¦  «        z  }|t          |¦  «        z  }|dz  }| j                             ¦   «         }|                      |¦  «         |                      |¦  «         | j        D ]}|                      |||¦  «         Œ|                      ||¦  «         | j	        D ]p}	|  
                    |	|¦  «        \  }
}}|	                     dddg¦  «        \  }}|                      ||
||||	d         |	d         |	d         |	d         ||	|¬	¦  «         Œq|                      ||||¦  «         |                      ||||¦  «         |S )
uD   Káº¿t xuáº¥t má»™t khung hÃ¬nh sa bÃ n chiáº¿n thuáº­t hoÃ n chá»‰nhrÃ   Úsize_pxr¢   r	   râ   rã   ÚtyperD  )rF  rÈ   )rÆ   rÁ  r€   r¥   r³   r'  r\   r“  r«  r[   rÕ   rz   r[  rÕ  rò  )r�   r»  Útotal_framesÚreal_durationÚcurrent_timeÚ
time_ratiorÈ   rª   r|  rÇ   ÚuxÚuyÚstr_valÚuwÚuhs                  r   Úrender_framez)CannaeTacticalMasterRenderer.render_frameŠ  s“  € à ¥5­Ñ#5Ô#5Ñ5ˆà¥ |Ñ!4Ô!4Ñ4ˆ
Ø! FÑ*ˆð ”×"Ò"Ñ$Ô$ˆð 	×#Ò# EÑ*Ô*Ð*ð 	×(Ò(¨Ñ/Ô/Ð/ð Ô(ð 	Cð 	CˆCØ×(Ò(¨°°\ÑBÔBÐBÐBð 	×"Ò" 5¨,Ñ7Ô7Ð7ð Ô$ð 	Nð 	NˆDØ"×1Ò1°$¸ÑEÔE‰OˆB��GØ—X’X˜i¨"¨b¨Ñ2Ô2‰FˆB�Ø×"Ò" 5¨"¨b°"°bØ#'¨¤<°°f´¸tÀF¼|Ø#'¨Ô#4°gØ-1Àð #ñ Nô Nð Nð Nð 	×Ò˜E <°ÀÑMÔMÐMð 	�Š�e˜\¨=¸,ÑGÔGÐGàˆrL   )Nr(  )Ú__name__Ú
__module__Ú__qualname__rŸ   r³   rÕ   ræ   r'  r[  r“  r«  rÕ  rò  rÿ  rº   rL   r   rV   rV   \   sì   € € € € € ðDGð DGð DGðL>ð >ð >ð" Jð  Jð  JðD*ð *ð *ð";ið ;ið ;iðzXIð XIð XIð XIðtDlð Dlð DlðL-Cð -Cð -Cð^Z|ð Z|ð Z|ðx9gð 9gð 9gðv&ð &ð &ð &ð &rL   rV   ç      N@ç      >@c                 ó  — t           j                             t           j                             t           j                             t
          ¦  «        ddd¦  «        ¦  «        }t           j                             |dddd¦  «        }t           j                             |dddd¦  «        }t           j                             |dddd¦  «        }|€#t           j                             |ddd
d¦  «        }t          j        t           j                             |¦  «        d¬¦  «         t          d¦  «         t          d¦  «         t          d|› �¦  «         t          d| d›dt          › �¦  «         t          d¦  «         t          ||||¦  «        }t          | t          z  ¦  «        }d}	t          j        g d¢t          j        t          j        d¬¦  «        }
d|
j        vrd|
j        vrt          d¦  «         d}	nd|
j        v rd}	t          d|	› �¦  «         t           j                             |ddddd¦  «        }t           j                             |ddddd¦  «        }|                     d d!¦  «        }t           j                             |¦  «        rQt           j                             |¦  «        r2d"d#d$|d$|d%d&| › d'| › d(�d)d*d+d,d-d.d/d0|g}t          j        |d¬1¦  «         �nt           j                             |¦  «        r1t          j        d"d#d$|d2t#          | ¦  «        d+d,d-d.d/d0|gd¬1¦  «         nÈt%          j        t          d3| z  ¦  «        t$          j        ¬4¦  «                             ¦   «         }d5d	l}|                     |d6¦  «        5 }|                     d7¦  «         |                     d8¦  «         |                     d3¦  «         |                     |¦  «         d	d	d	¦  «         n# 1 swxY w Y   |                     d d9¦  «        }d"d#d:d;d<d;d=t8          › d>t:          › �d?d@dAt#          t          ¦  «        d$dBdC|	g}dD|	v r|                     g dE¢¦  «         n|                     g dF¢¦  «         |                     d?dG|g¦  «         t          j        |t          j        t          j         ¬H¦  «        }t          dI|› dJ| › dKt          › dL�¦  «         dM}t           j                             t           j                             |¦  «        dN¦  «        }tC          |¦  «        D ]Ó}| "                    ||| ¦  «        }|sC|tG          t          ¦  «        z  tI          || dOz  ¦  «        k    rtK          j&        ||¦  «         d}|j'         (                    |                     ¦   «         ¦  «         |dPz  d5k    s	||d7z
  k    r7|d7z   tG          |¦  «        z  dQz  }t          dR|d7z   › dS|› dJ|d›dT�d¬U¦  «         ŒÔ|j'         )                    ¦   «          | *                    ¦   «          t          dV¦  «         d"d#d$|d$|dCdWd+dXdYdZd[|g}t          j        |d¬1¦  «         t           j                             |¦  «        rt          j+        |¦  «         t           j                             |¦  «        rt          j+        |¦  «         t          d\|› �¦  «         t           j                             |¦  «        rt          d]|› �¦  «         |S )^u¡   
    HÃ m thá»±c thi chÃ­nh: Pipeline xuáº¥t video Ä‘a luá»“ng vá»›i bá»™ mÃ£ hÃ³a pháº§n cá»©ng NVENC.
    Ä�áº£m báº£o VRAM < 4.0GB, khÃ´ng bao giá»� OOM!
    r   rh   ri   Ú03_Timeline_Dataz cannae_operational_timeline.jsonrj   zcannae_terrain_4k.pngzcannae_terrain_1080p.pngNÚ
05_Renderszcannae_tactical_map_master.mp4T)Úexist_okzP================================================================================uO     STUDIO HISTORICAL-2D â€” PRODUCTION TACTICAL RENDER PIPELINE (GTX 1660 SUPER)z  Target Output : z  Duration      : z.1fz seconds | FPS: Ú
hevc_nvenc)Úffmpegz-hide_bannerz	-encoders)ÚstdoutÚstderrÚtextÚ
h264_nvencz1[!] NVENC not found, using libx264 CPU encoder...Úlibx264z[*] Encoder Hardware Stream: Ú04_Audio_VoiceÚ
master_mixzcannae_ambient_soundbed_30m.wavÚvoice_enzscene_02_cue1_cold_open_en.mp3z.mp4z_ambient.wavr
  z-yz-iz-filter_complexz"[0:a]volume=1.0[vox];[1:a]atrim=0:zd,volume=0.25[bg];[vox][bg]amix=inputs=2:duration=longest:dropout_transition=2[mixed];[mixed]atrim=0:z(,loudnorm=I=-14.0:TP=-1.0:LRA=11.0[aout]z-mapz[aout]z-c:aÚ	pcm_s16lez-arÚ48000z-acÚ2)Úcheckz-ti€»  rb   r   Úwbr   r   z_raw.mp4z-fÚrawvideoz-vcodecz-sr2   z-pix_fmtÚbgr24z-rú-z-c:vÚnvenc)ú-presetrf   z-cqÚ19z-bfr  )r  Úfastz-crfÚ18Úyuv420p)Ústdinr  z[*] Rendering z	 frames (zs @ zfps)...Fzcannae_master_preview.jpgrÙ  r;  g      Y@z  -> Progress: ú/z%))ÚflushzC[*] Assembling final tactical map video with ambient sound track...r¥   Úaacz-b:aÚ192kz	-shortestz2[SUCCESS] Cannae Tactical Master Video generated: z"[SUCCESS] Preview Snapshot saved: ),r   r   Úabspathr„   ÚdirnameÚ__file__Úmakedirsr~   rÁ  rV   r"   Ú
subprocessÚrunÚPIPEr  Úreplacer   Ústrr*   ÚzerosÚint16ÚtobytesÚwaverv   ÚsetnchannelsÚsetsampwidthÚsetframerateÚwriteframesr�   r‚   ÚextendÚPopenÚDEVNULLr¦   rÿ  rÆ   r(   r$   Úimwriter!  ÚwriteÚcloseÚwaitÚremove)ÚdurationÚ
output_mp4Úpreview_frame_secru   Útimeline_fileÚmap_4k_fileÚmap_1080_fileÚrendererrö  ÚencoderÚ	test_procÚambient_bedÚcue01_voiceÚtemp_audio_wavÚmix_audio_cmdÚclean_bytesr2  ÚwfÚtemp_raw_videoÚ
ffmpeg_cmdÚprocÚpreview_savedÚpreview_png_pathÚf_idxrª   ÚpctÚmux_cmds                              r   Úrender_cannae_master_videorV  ²  sž  € õ
 ”—’¥¤§¢­R¬W¯_ª_½XÑ-FÔ-FÈÈdÐTXÑ YÔ YÑZÔZ€IÝ”G—L’L ¨JÐ8KÐM_ð  bDñ  Eô  E€MÝ”'—,’,˜y¨*Ð6IÈ=ÐZqÑrÔr€KÝ”G—L’L ¨JÐ8KÈ]Ð\vÑwÔw€MàÐÝ”W—\’\ )¨ZÐ9LÈlÐ\|Ñ}Ô}ˆ
å„K•”—’ 
Ñ+Ô+°dÐ;Ñ;Ô;Ð;å	Ð
\Ñ]Ô]Ð]Ý	Ð
[Ñ\Ô\Ð\Ý	Ð
+˜zÐ
+Ð
+Ñ,Ô,Ð,Ý	Ð
J˜xÐ
JÐ
JÐ
J½[Ð
JÐ
JÑKÔKÐKÝ	Ð
\Ñ]Ô]Ð]å+¨I°}ÀkÐS`ÑaÔa€Hå�x¥+Ñ-Ñ.Ô.€Lð €GÝ”ÐFÐFÐFÝ&0¤o½j¼oÐTXðZñ Zô Z€Ià˜9Ô+Ð+Ð+°ÀIÔDTÐ0TÐ0TÝÐAÑBÔBÐBØˆˆØ	˜Ô)Ð	)Ð	)àˆå	Ð
3¨'Ð
3Ð
3Ñ4Ô4Ð4õ ”'—,’,˜y¨*Ð6IÐK[Ð]ið  lMñ  Nô  N€KÝ”'—,’,˜y¨*Ð6IÐK[Ð]gð  jJñ  Kô  K€KØ×'Ò'¨°Ñ?Ô?€Nå	„w‡~‚~�kÑ"Ô"ð (¥r¤w§~¢~°kÑ'BÔ'Bð (à�dØ�+Ø�+Øð R°ð  Rð  Rð  `hð  Rð  Rð  RØ�HØ�KØ�7Ø�3Øð
ˆõ 	Œ�}¨DÐ1Ñ1Ô1Ð1Ñ1Ý	Œ�Š˜Ñ	$Ô	$ð (ÝŒØ�dØ�+Ø•#�h‘-”-Ø�K ¨°¸Øð
ð ð	ñ 	ô 	ð 	ð 	õ ”h�s 5¨8Ñ#3Ñ4Ô4½B¼HÐEÑEÔE×MÒMÑOÔOˆØˆˆˆØ�YŠY�~ tÑ,Ô,ð 	(°Ø�OŠO˜AÑÔÐØ�OŠO˜AÑÔÐØ�OŠO˜EÑ"Ô"Ð"Ø�NŠN˜;Ñ'Ô'Ð'ð		(ð 	(ð 	(ñ 	(ô 	(ð 	(ð 	(ð 	(ð 	(ð 	(ð 	(øøøð 	(ð 	(ð 	(ð 	(ð  ×'Ò'¨°
Ñ;Ô;€Nð 	�$ØˆjØ�:Ø•Ð!Ð!�Ð!Ð!Ø�GØ�c•+ÑÔØˆcØ�ð	€Jð �'ÐÐØ×ÒÐDÐDÐDÑEÔEÐEÐEà×ÒÐ;Ð;Ð;Ñ<Ô<Ð<à×Ò�z 9¨nÐ=Ñ>Ô>Ð>åÔ˜J­j¬oÅjÔFXÐYÑYÔY€Då	Ð
T˜<Ð
TÐ
T°(Ð
TÐ
TÅÐ
TÐ
TÐ
TÑUÔUÐUà€MÝ”w—|’|¥B¤G§O¢O°JÑ$?Ô$?ÐA\Ñ]Ô]Ðå�|Ñ$Ô$ð `ð `ˆØ×%Ò% e¨\¸8ÑDÔDˆð ð 	! %­%µÑ*<Ô*<Ñ"<ÅÐEVÐX`ÐcfÑXfÑAgÔAgÒ!gÐ!gÝŒKÐ(¨%Ñ0Ô0Ð0Ø ˆMàŒ
×Ò˜Ÿš™œÑ)Ô)Ð)à�2‰:˜Š?ˆ?˜e |°aÑ'7Ò7Ð7Ø˜1‘9¥ lÑ 3Ô 3Ñ3°eÑ;ˆCÝÐR E¨A¡IÐRÐR°ÐRÐRÀsÐRÐRÐRÐRÐZ^Ð_Ñ_Ô_Ð_øà„J×ÒÑÔÐØ‡I‚I�K„K€Kõ 
Ð
OÑPÔPÐPà�$ØˆnØˆnØ�Ø�Ø�ØØð	€Gõ „N�7 $Ð'Ñ'Ô'Ð'õ 
„w‡~‚~�nÑ%Ô%ð "Ý
Œ	�.Ñ!Ô!Ð!Ý	„w‡~‚~�nÑ%Ô%ð "Ý
Œ	�.Ñ!Ô!Ð!å	Ð
K¸zÐ
KÐ
KÑLÔLÐLÝ	„w‡~‚~Ð&Ñ'Ô'ð GÝÐEÐ3CÐEÐEÑFÔFÐFàÐs   ÎAO2Ï2O6Ï9O6Ú__main__z#Cannae Master Tactical Map Renderer)Údescriptionz
--durationz?Duration in seconds (e.g. 60.0 for master cut, 1800.0 for full))rõ  ÚdefaultÚhelpz--outputzOutput MP4 file path)r?  r@  )F)r   r   )r  Nr  )+Ú__doc__r   Úsysrs  rw   Úargparser*  Úconcurrent.futuresr   Únumpyr*   r$   ÚPILr   r   r   r   r&  r„   r'  r(  Úworkspace_root_dirÚinsertÚsrc.tactical_engine.seven_actorr   r�   r‚   rÁ  r   rK   rT   rV   rV  r   ÚArgumentParserÚparserÚadd_argumentrÆ   r.  Ú
parse_argsÚargsr?  rd   rº   rL   r   ú<module>ri     s5  ððð ð 
€	€	€	Ø 
€
€
€
Ø €€€Ø €€€Ø €€€Ø Ð Ð Ð Ø 1Ð 1Ð 1Ð 1Ð 1Ð 1Ø Ð Ð Ð Ø 
€
€
€
Ø +Ð +Ð +Ð +Ð +Ð +Ð +Ð +Ð +Ð +ð ”W—_’_ R¤W§\¢\°"´'·/²/À(Ñ2KÔ2KÈTÐSWÐY]Ñ%^Ô%^Ñ_Ô_Ð Ø˜SœXÐ%Ð%Ø„H‡O‚O�AÐ)Ñ*Ô*Ð*Ø <Ð <Ð <Ð <Ð <Ð <à€Ø	€Ø€ð$ð $ð $ð $ð!ð !ð !ð !ðFð ð ðT	ð T	ð T	ð T	ð T	ñ T	ô T	ð T	ðlNð Nð Nð Nð` ˆzÒÐØ$ˆXÔ$Ð1VÐWÑWÔW€FØ
×Ò˜¨5¸$ð  FGÐñ  Hô  Hð  HØ
×Ò˜
¨°dÐAWÐÑXÔXÐXØ×ÒÑÔ€DàÐ¨¬À$Ä+ÐNÑNÔNÐNÐNÐNð ÐrL   