§
    ¼Þ¾j  ã                  ó  — d Z ddlmZ ddlZddlmc mZ ddl	m
Z
 ddlmZmZ ddlZ e
e¦  «                             ¦   «         j        j        j        Zdd
„Z G d„ d¦  «        Z G d„ d¦  «        Z G d„ d¦  «        ZdS )a  
Unit tests for M4 High Priority Assets (Passive Tree, Dungeon/Arena Tilesets, 5 New NPCs).
Enforces:
1. 100% Power-of-Two (2^n) texture dimensions.
2. Tangent-space normal map Blue channel mean > 128.0.
3. Strict size budgets: Map tiles <= 50KB, UI icons <= 150KB, Standees <= 2048KB.
é    )ÚannotationsN)ÚPath)ÚImageÚ	ImageStatÚnÚintÚreturnÚboolc                ó&   — | dk    o| | dz
  z  dk    S )Nr   é   © )r   s    ú@C:\Projects\FreeExile\tests\unit\test_m4_high_priority_assets.pyÚis_power_of_twor      s   € ØˆqŠ5Ð'�a˜1˜q™5‘k aÒ'Ð'ó    c                  óÐ   — e Zd ZdZedz  dz  dz  dz  dz  Zej                             dg d¢¦  «        dd„¦   «         Z	ej                             dg d¢¦  «        dd„¦   «         Z
dS )ÚTestM4PassiveTreeAssetszKVerifies Passive Tree & Meridian node sprites and constellation background.ÚclientÚwebappÚassetsÚuiÚpassive_treeúfname, exp_w, exp_h))únode_passive_small.pngé@   r   )únode_notable_medium.pngr   r   )únode_keystone_large.pngé€   r   )únode_socket_gem.pngr   r   )únode_connector_line.pngr   é    )úconstellation_bg.pngé   r"   ÚfnameÚstrÚexp_wr   Úexp_hr	   ÚNonec                ó8  — | j         |z  }|j        } |¦   «         }|s£t          j        d|› �¦  «        dz   dt	          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        dœz  }t          t          j	        |¦  «        ¦  «        ‚d x}}t          j        |¦  «        5 }|j        \  }	}
g }t          |	¦  «        }|}|rt          |
¦  «        }|}|�sÈddt	          j        ¦   «         v st          j        t          ¦  «        rt          j        t          ¦  «        nddt	          j        ¦   «         v st          j        |	¦  «        rt          j        |	¦  «        ndt          j        |¦  «        dœz  }|                     |¦  «         |r´d	dt	          j        ¦   «         v st          j        t          ¦  «        rt          j        t          ¦  «        ndd
t	          j        ¦   «         v st          j        |
¦  «        rt          j        |
¦  «        nd
t          j        |¦  «        dœz  }|                     |¦  «         t          j        |d¦  «        i z  }t          j        |› d|	› d|
› d�¦  «        dz   d|iz  }t          t          j	        |¦  «        ¦  «        ‚d x}x}x}}|	|
f}||f}||k    }|s�t          j        d|fd||f¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }t          j        |› d|› d|› d|	› d|
› �	¦  «        dz   d|iz  }t          t          j	        |¦  «        ¦  «        ‚d x}x}}d d d ¦  «         d S # 1 swxY w Y   d S )Nz%Missing required passive tree asset: úC
>assert %(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.exists
}()
}Úp©Úpy0Úpy2Úpy4ú%%(py5)s
{%(py5)s = %(py2)s(%(py3)s)
}r   Úw©r-   Úpy3Úpy5ú'%(py10)s
{%(py10)s = %(py7)s(%(py8)s)
}Úh©Úpy7Úpy8Úpy10r   z resolution Úxz not PoTú
>assert %(py13)sÚpy13©ú==©z%(py1)s == %(py4)s©Úpy1r.   z
 expected z, got ú
>assert %(py6)sÚpy6)ÚPT_DIRÚexistsÚ
@pytest_arÚ_format_assertmsgÚ@py_builtinsÚlocalsÚ_should_repr_global_nameÚ	_safereprÚAssertionErrorÚ_format_explanationr   ÚopenÚsizer   ÚappendÚ_format_boolopÚ_call_reprcompare)Úselfr#   r%   r&   r*   Ú@py_assert1Ú@py_assert3Ú@py_format5Úimgr0   r5   Ú@py_assert4Ú@py_assert0Ú@py_assert9Ú@py_format6Ú@py_format11Ú@py_format12Ú@py_format14Ú@py_assert2Ú@py_format7s                       r   Ú(test_passive_tree_nodes_pot_and_presencez@TestM4PassiveTreeAssets.test_passive_tree_nodes_pot_and_presence   sU  € ð ŒK˜%ÑˆØŒxÐFˆxˆx‰zŒzÐFˆzÐFÕFÔFÐFÀ1ÐFÐFÑFÔFÐFÑFÐFÕFÔFÑFÔFÐFÐFÕFÔFˆqÑFÔFÐFÕFÔFˆqÑFÔFÐFÐFÕFÔFˆxÑFÔFÕFÔFˆzÑFÔFÐFÐFÑFÐFÕFÕFÔFÐFÑFÔFÑFÔFÐFÐFÐFÐFÐFÝŒZ˜‰]Œ]ð 	^˜cØ”8‰DˆAˆqØcÐc•? 1Ñ%Ô%Ð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 1ÑcÔcÐcÕcÔc 1Ñ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ÑcÐcÐc×cÒcÐcÑcÔcÐcÕcÔcÐcÐcÑcÔcÐcÑcÐcÕcÔcÀÐ>cÐ>cÐTUÐ>cÐ>cÐXYÐ>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Ø�q�6Ð]˜e U˜^Ð]�6˜^Ò+Ð]Ð]Ð]Õ]Ô]Ð]Ð]Ð]Ð]�6˜^Ð]Ñ]Ô]Õ]Ô]�6Ñ]Ô]Õ]Ô]˜^Ñ]Ô]Ð]Ð]Ñ]Ð]Õ]Ô]°Ð-]Ð-]ÀÐ-]Ð-]ÈÐ-]Ð-]ÐVWÐ-]Ð-]ÐZ[Ð-]Ð-]Ñ]Ô]Ð]Ñ]Ð]Ð]Ð]Ñ]Ð]Õ]Õ]Ô]Ð]Ñ]Ô]Ñ]Ô]Ð]Ð]Ð]Ð]Ð]Ð]Ð]ð	^ð 	^ð 	^ñ 	^ô 	^ð 	^ð 	^ð 	^ð 	^ð 	^ð 	^ð 	^øøøð 	^ð 	^ð 	^ð 	^ð 	^ð 	^s   ÃJ)NÎNÎNzfname, max_kb))r   ç     Àb@)r   rb   )r   rb   )r   rb   )r   rb   )r!   ç       @Úmax_kbÚfloatc                ó(  — | j         |z  }|                     ¦   «         j        dz  }||k    }|sát          j        d|fd||f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nddt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nddœz  }t          j	        |› d|d›d	|› d
�¦  «        dz   d|iz  }t          t          j        |¦  «        ¦  «        ‚d }d S )Nç      �@©ú<=)z%(py0)s <= %(py2)sÚsize_kbrd   )r,   r-   ú size ú.2fzKB exceeds budget ÚKBz
>assert %(py4)sr.   )rD   ÚstatÚst_sizerF   rR   rH   rI   rJ   rK   rG   rL   rM   )rS   r#   rd   r*   rj   rT   Ú@py_format3rV   s           r   Ú"test_passive_tree_file_size_budgetz:TestM4PassiveTreeAssets.test_passive_tree_file_size_budget-   s<  € ð ŒK˜%ÑˆØ—&’&‘(”(Ô" VÑ+ˆØ˜&Ò Ð[Ð[Ð[Õ[Ô[Ð[Ð[Ð[Ð[ˆw˜&Ð[Ñ[Ô[Ð[Õ[Ô[Ñ[Ô[Ð[Ð[Õ[Ô[ˆwÑ[Ô[Ð[Õ[Ô[ˆwÑ[Ô[Ð[Ð[Ð[Õ[Ô[Ñ[Ô[Ð[Ð[Õ[Ô[˜&Ñ[Ô[Ð[Õ[Ô[˜&Ñ[Ô[Ð[Ð[Ð[Ð[Ñ[Ð[Õ[Ô[ UÐ"[Ð"[°'Ð"[Ð"[Ð"[ÐQWÐ"[Ð"[Ð"[Ñ[Ô[Ð[Ñ[Ð[Ð[Ð[Ñ[Ð[Õ[Õ[Ô[Ð[Ñ[Ô[Ñ[Ô[Ð[Ð[Ð[Ð[Ð[r   N©r#   r$   r%   r   r&   r   r	   r'   )r#   r$   rd   re   r	   r'   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú	REPO_ROOTrD   ÚpytestÚmarkÚparametrizera   rq   r   r   r   r   r      sÎ   € € € € € ØUÐUà˜Ñ! HÑ,¨xÑ7¸$Ñ>ÀÑO€Fà„[×ÒØð	
ð 	
ð 	
ñ
ô 
ð^ð ^ð ^ñ
ô 
ð^ð „[×ÒØð	
ð 	
ð 	
ñ
ô 
ð\ð \ð \ñ
ô 
ð\ð \ð \r   r   c                  óÊ   — e Zd ZdZedz  dz  dz  dz  Zej                             dg d¢¦  «        dd„¦   «         Z	ej                             dg d¢¦  «        dd„¦   «         Z
dS )ÚTestM4DungeonAndArenaTileszGVerifies Dungeon walls, floors, and boss arena floors with normal maps.r   r   r   Úmapr   )
)ztile_dungeon_wall_01.pngr   r   )ztile_dungeon_wall_02.pngr   r   )ztile_dungeon_wall_03.pngr   r   )ztile_dungeon_wall_04.pngr   r   )ztile_dungeon_floor_01.pngr   r   )ztile_dungeon_floor_02.pngr   r   )ztile_dungeon_floor_03.pngr   r   )ztile_dungeon_floor_04.pngr   r   )ztile_arena_lava_floor.pngé   r   )ztile_arena_bone_floor.pngr~   r   r#   r$   r%   r   r&   r	   r'   c                óú  — | j         |z  }|j        } |¦   «         }|s£t          j        d|› �¦  «        dz   dt	          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        dœz  }t          t          j	        |¦  «        ¦  «        ‚d x}}| 
                    ¦   «         j        dz  }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  }
t          j        d|› d|d›d�¦  «        dz   d|
iz  }t          t          j	        |¦  «        ¦  «        ‚d x}}	t          j        |¦  «        5 }|j        \  }}g }t!          |¦  «        }|}|rt!          |¦  «        }|}|�sÉddt	          j        ¦   «         v st          j        t           ¦  «        rt          j        t           ¦  «        nddt	          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        dœz  }|                     |¦  «         |r´ddt	          j        ¦   «         v st          j        t           ¦  «        rt          j        t           ¦  «        nddt	          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        dœz  }|                     |¦  «         t          j        |d¦  «        i z  }t          j        d|› d|› d|› d�¦  «        dz   d|iz  }t          t          j	        |¦  «        ¦  «        ‚d x}x}x}}||f}||f}||k    }	|	s‘t          j        d|	fd||f¦  «        t          j        |¦  «        t          j        |¦  «        d œz  }t          j        d|› d!|› d"|› d#|› d"|› d$�¦  «        d%z   d&|iz  }t          t          j	        |¦  «        ¦  «        ‚d x}x}	}d d d ¦  «         d S # 1 swxY w Y   d S )'NzMissing tile: r)   r*   r+   rg   ç      I@rh   ©z%(py0)s <= %(py3)srj   ©r,   r2   zTile rk   rl   úKB exceeds 50KB budgetú
>assert %(py5)sr3   r/   r   r0   r1   r4   r5   r6   r   z (r:   z	) not PoTr;   r<   r=   r?   r@   z expected (z, z), got (ú)rB   rC   )ÚMAP_DIRrE   rF   rG   rH   rI   rJ   rK   rL   rM   rn   ro   rR   r   rN   rO   r   rP   rQ   )rS   r#   r%   r&   r*   rT   rU   rV   rj   r_   Ú@py_format4r[   rW   r0   r5   rX   rY   rZ   r\   r]   r^   r`   s                         r   Útest_tile_dimensions_and_budgetz:TestM4DungeonAndArenaTiles.test_tile_dimensions_and_budgetC   s\  € ð  ŒL˜5Ñ ˆØŒxÐ/ˆxˆx‰zŒzÐ/ˆzÐ/Õ/Ô/Ð/¨AÐ/Ð/Ñ/Ô/Ð/Ñ/Ð/Õ/Ô/Ñ/Ô/Ð/Ð/Õ/Ô/ˆqÑ/Ô/Ð/Õ/Ô/ˆqÑ/Ô/Ð/Ð/Õ/Ô/ˆxÑ/Ô/Õ/Ô/ˆzÑ/Ô/Ð/Ð/Ñ/Ð/Õ/Õ/Ô/Ð/Ñ/Ô/Ñ/Ô/Ð/Ð/Ð/Ð/Ð/Ø—&’&‘(”(Ô" VÑ+ˆØÐXˆw˜$ŠÐXÐXÐXÕXÔXÐXÐXÐXÐXˆw˜$ÐXÑXÔXÐXÕXÔXÑXÔXÐXÐXÕXÔXˆwÑXÔXÐXÕXÔXˆwÑXÔXÐXÐXÕXÔX˜$ÑXÔXÐXÐXÑXÐXÕXÔXÐ X¨Ð XÐ X°WÐ 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ÝŒZ˜‰]Œ]ð 	i˜cØ”8‰DˆAˆqØ_Ð_•? 1Ñ%Ô%Ð_Ð%Ð_Ð%Ð_­/¸!Ñ*<Ô*<Ð_Ð*<Ð_Ð_Ñ_Ð_Ð_Õ_Ô_Ñ_Ô_Ð_Ð_Õ_Ô_•?Ñ_Ô_Ð_Õ_Ô_•?Ñ_Ô_Ð_Ð_Ð_Õ_Ô_Ñ_Ô_Ð_Ð_Õ_Ô_ 1Ñ_Ô_Ð_Õ_Ô_ 1Ñ_Ô_Ð_Ð_Õ_Ô_Ð%Ñ_Ô_Ð_Ð_Ñ_Ð_Ð_×_Ò_Ð_Ñ_Ô_Ð_Ð%Ð_Ð_Ð_Õ_Ô_Ñ_Ô_Ð_Ð_Õ_Ô_­/Ñ_Ô_Ð_Õ_Ô_­/Ñ_Ô_Ð_Ð_Ð_Õ_Ô_Ñ_Ô_Ð_Ð_Õ_Ô_¸!Ñ_Ô_Ð_Õ_Ô_¸!Ñ_Ô_Ð_Ð_Õ_Ô_Ð*<Ñ_Ô_Ð_Ð_Ñ_Ð_Ð_×_Ò_Ð_Ñ_Ô_Ð_Õ_Ô_Ð_Ð_Ñ_Ô_Ð_Ñ_Ð_Õ_Ô_Ð>_ÀeÐ>_Ð>_ÈqÐ>_Ð>_ÐSTÐ>_Ð>_Ð>_Ñ_Ô_Ð_Ñ_Ð_Ð_Ð_Ñ_Ð_Õ_Õ_Ô_Ð_Ñ_Ô_Ñ_Ô_Ð_Ð_Ð_Ð_Ð_Ð_Ð_Ð_Ð_Ø�q�6Ðh˜e U˜^Ðh�6˜^Ò+ÐhÐhÐhÕhÔhÐhÐhÐhÐh�6˜^ÐhÑhÔhÕhÔh�6ÑhÔhÕhÔh˜^ÑhÔhÐhÐhÑhÐhÕhÔhÐ-h°UÐ-hÐ-hÀuÐ-hÐ-hÐPUÐ-hÐ-hÐ_`Ð-hÐ-hÐdeÐ-hÐ-hÐ-hÑhÔhÐhÑhÐhÐhÐhÑhÐhÕhÕhÔhÐhÑhÔhÑhÔhÐhÐhÐhÐhÐhÐhÐhð	ið 	ið 	iñ 	iô 	ið 	ið 	ið 	ið 	ið 	ið 	ið 	iøøøð 	ið 	ið 	ið 	ið 	ið 	is   Æ7J,Q0Ñ0Q4Ñ7Q4)
)ztile_dungeon_wall_01_normal.pngr   r   )ztile_dungeon_wall_02_normal.pngr   r   )ztile_dungeon_wall_03_normal.pngr   r   )ztile_dungeon_wall_04_normal.pngr   r   )z tile_dungeon_floor_01_normal.pngr   r   )z tile_dungeon_floor_02_normal.pngr   r   )z tile_dungeon_floor_03_normal.pngr   r   )z tile_dungeon_floor_04_normal.pngr   r   )z tile_arena_lava_floor_normal.pngr~   r   )z tile_arena_bone_floor_normal.pngr~   r   c                ól
  — | j         |z  }|j        } |¦   «         }|s£t          j        d|› �¦  «        dz   dt	          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        dœz  }t          t          j	        |¦  «        ¦  «        ‚d x}}| 
                    ¦   «         j        dz  }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  }
t          j        d|› d|d›d�¦  «        dz   d|
iz  }t          t          j	        |¦  «        ¦  «        ‚d x}}	t          j        |¦  «        5 }|j        \  }}g }t!          |¦  «        }|}|rt!          |¦  «        }|}|�sªddt	          j        ¦   «         v st          j        t           ¦  «        rt          j        t           ¦  «        nddt	          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        dœz  }|                     |¦  «         |r´ddt	          j        ¦   «         v st          j        t           ¦  «        rt          j        t           ¦  «        nddt	          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        dœz  }|                     |¦  «         t          j        |d¦  «        i z  }dd|iz  }t          t          j	        |¦  «        ¦  «        ‚d x}x}x}}||f}||f}||k    }	|	slt          j        d|	fd||f¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j	        |¦  «        ¦  «        ‚d x}x}	}t'          j        |¦  «        }t+          |j        ¦  «        d k    r|j        d!         nd"}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  }
t          j        d'|› d(|d)›d*�¦  «        dz   d|
iz  }t          t          j	        |¦  «        ¦  «        ‚d x}}	d d d ¦  «         d S # 1 swxY w Y   d S )+NzMissing normal map: r)   r*   r+   rg   r€   rh   r�   rj   r‚   zNormal tile rk   rl   rƒ   r„   r3   r/   r   r0   r1   r4   r5   r6   r   zassert %(py13)sr<   r=   r?   r@   zassert %(py6)srC   é   é   ç        ç      `@©ú>©z%(py0)s > %(py3)sÚb_meanzNormal map ú B-mean ú.1fú	 <= 128.0)r†   rE   rF   rG   rH   rI   rJ   rK   rL   rM   rn   ro   rR   r   rN   rO   r   rP   rQ   r   ÚStatÚlenÚmean)rS   r#   r%   r&   r*   rT   rU   rV   rj   r_   r‡   r[   rW   r0   r5   rX   rY   rZ   r\   r]   r^   r`   rn   r‘   s                           r   Útest_tile_normal_maps_qualityz8TestM4DungeonAndArenaTiles.test_tile_normal_maps_quality\   s  € ð  ŒL˜5Ñ ˆØŒxÐ5ˆxˆx‰zŒzÐ5ˆzÐ5Õ5Ô5Ð5°!Ð5Ð5Ñ5Ô5Ð5Ñ5Ð5Õ5Ô5Ñ5Ô5Ð5Ð5Õ5Ô5ˆqÑ5Ô5Ð5Õ5Ô5ˆqÑ5Ô5Ð5Ð5Õ5Ô5ˆxÑ5Ô5Õ5Ô5ˆzÑ5Ô5Ð5Ð5Ñ5Ð5Õ5Õ5Ô5Ð5Ñ5Ô5Ñ5Ô5Ð5Ð5Ð5Ð5Ð5Ø—&’&‘(”(Ô" VÑ+ˆØÐ_ˆw˜$ŠÐ_Ð_Ð_Õ_Ô_Ð_Ð_Ð_Ð_ˆw˜$Ð_Ñ_Ô_Ð_Õ_Ô_Ñ_Ô_Ð_Ð_Õ_Ô_ˆwÑ_Ô_Ð_Õ_Ô_ˆwÑ_Ô_Ð_Ð_Õ_Ô_˜$Ñ_Ô_Ð_Ð_Ñ_Ð_Õ_Ô_Ð _¨uÐ _Ð _¸GÐ _Ð _Ð _Ð _Ñ_Ô_Ð_Ñ_Ð_Ð_Ð_Ñ_Ð_Õ_Õ_Ô_Ð_Ñ_Ô_Ñ_Ô_Ð_Ð_Ð_Ð_Ð_ÝŒZ˜‰]Œ]ð 	V˜cØ”8‰DˆAˆqØ<Ð<•? 1Ñ%Ô%Ð<Ð%Ð<Ð%Ð<­/¸!Ñ*<Ô*<Ð<Ð*<Ð<Ð<Ñ<Ð<Ð<Õ<Ô<Ñ<Ô<Ð<Ð<Õ<Ô<•?Ñ<Ô<Ð<Õ<Ô<•?Ñ<Ô<Ð<Ð<Ð<Õ<Ô<Ñ<Ô<Ð<Ð<Õ<Ô< 1Ñ<Ô<Ð<Õ<Ô< 1Ñ<Ô<Ð<Ð<Õ<Ô<Ð%Ñ<Ô<Ð<Ð<Ñ<Ð<Ð<×<Ò<Ð<Ñ<Ô<Ð<Ð%Ð<Ð<Ð<Õ<Ô<Ñ<Ô<Ð<Ð<Õ<Ô<­/Ñ<Ô<Ð<Õ<Ô<­/Ñ<Ô<Ð<Ð<Ð<Õ<Ô<Ñ<Ô<Ð<Ð<Õ<Ô<¸!Ñ<Ô<Ð<Õ<Ô<¸!Ñ<Ô<Ð<Ð<Õ<Ô<Ð*<Ñ<Ô<Ð<Ð<Ñ<Ð<Ð<×<Ò<Ð<Ñ<Ô<Ð<Õ<Ô<Ð<Ð<Ñ<Ô<Ð<Ñ<Ð<Ð<Ð<Ð<Ð<Ñ<Ð<Õ<Õ<Ô<Ð<Ñ<Ô<Ñ<Ô<Ð<Ð<Ð<Ð<Ð<Ð<Ð<Ð<Ð<Ø�q�6Ð+˜e U˜^Ð+�6˜^Ò+Ð+Ð+Ð+Õ+Ô+Ð+Ð+Ð+Ð+�6˜^Ð+Ñ+Ô+Õ+Ô+�6Ñ+Ô+Õ+Ô+˜^Ñ+Ô+Ð+Ð+Ñ+Ð+Ð+Ð+Ð+Ð+Ñ+Ð+Õ+Õ+Ô+Ð+Ñ+Ô+Ñ+Ô+Ð+Ð+Ð+Ð+Ð+Ð+Ð+Ý”> #Ñ&Ô&ˆDÝ%(¨¬¡^¤^°qÒ%8Ð%8�T”Y˜q”\�\¸cˆFØ!ÐU�6˜E’>ÐUÐUÐUÕUÔUÐUÐUÐUÐU�6˜EÐUÑUÔUÐUÕUÔUÑUÔUÐUÐUÕUÔU�6ÑUÔUÐUÕUÔU�6ÑUÔUÐUÐUÕUÔU˜EÑUÔUÐUÐUÑUÐUÕUÔUÐ#U°Ð#UÐ#UÀÐ#UÐ#UÐ#UÐ#UÑUÔUÐUÑUÐUÐUÐUÑUÐUÕUÕUÔUÐUÑUÔUÑUÔUÐUÐUÐUÐUÐUð	Vð 	Vð 	Vñ 	Vô 	Vð 	Vð 	Vð 	Vð 	Vð 	Vð 	Vð 	Vøøøð 	Vð 	Vð 	Vð 	Vð 	Vð 	Vs   Æ7M%T)Ô)T-Ô0T-Nrr   )rs   rt   ru   rv   rw   r†   rx   ry   rz   rˆ   r˜   r   r   r   r|   r|   >   sÉ   € € € € € ØQÐQà˜(Ñ" XÑ-°Ñ8¸5Ñ@€Gà„[×ÒØð	
ð 	
ð 	
ñô ðið ið iñô ðið „[×ÒØð	
ð 	
ð 	
ñô ðVð Vð Vñô ðVð Vð Vr   r|   c                  ó  — e Zd ZdZedz  dz  dz  dz  Zg d¢Zej         	                    de¦  «        dd„¦   «         Z
ej         	                    de¦  «        dd„¦   «         Zej         	                    de¦  «        dd„¦   «         ZdS )ÚTestM4NewNPCCastzGVerifies the 5 new canonical NPCs (avatar, portrait, standee + normal).r   r   r   Ú
characters)Únpc_elder_bach_voÚnpc_alchemist_duoc_baÚnpc_blacksmith_thiet_tamÚnpc_exile_vuong_kyÚnpc_mystic_linh_coÚnpc_idr$   r	   r'   c                óJ	  — | j         |› d�z  }|j        } |¦   «         }|s£t          j        d|› �¦  «        dz   dt	          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        dœz  }t          t          j	        |¦  «        ¦  «        ‚d x}}| 
                    ¦   «         j        dz  }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  }t          j        d|› d�¦  «        dz   d|iz  }	t          t          j	        |	¦  «        ¦  «        ‚d x}}t          j        |¦  «        5 }
|
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}}g }|
j        }t#          |¦  «        }|}|r|
j        }t#          |¦  «        }|}|�sÐddt	          j        ¦   «         v st          j        t"          ¦  «        rt          j        t"          ¦  «        nddt	          j        ¦   «         v st          j        |
¦  «        rt          j        |
¦  «        ndt          j        |¦  «        t          j        |¦  «        dœz  }|                     |¦  «         |rÇddt	          j        ¦   «         v st          j        t"          ¦  «        rt          j        t"          ¦  «        nddt	          j        ¦   «         v st          j        |
¦  «        rt          j        |
¦  «        ndt          j        |¦  «        t          j        |¦  «        dœz  }|                     |¦  «         t          j        |d¦  «        i z  }dd|iz  }t          t          j	        |¦  «        ¦  «        ‚d x}x}x}x}x}}d d d ¦  «         d S # 1 swxY w Y   d S )Nz_avatar.pngzMissing avatar for r)   r*   r+   rg   rb   rh   r�   rj   r‚   zAvatar ú exceeds 150KB budgetr„   r3   )r   r   r=   ©z,%(py2)s
{%(py2)s = %(py0)s.size
} == %(py5)srW   ©r,   r-   r3   úassert %(py7)sr7   ú@%(py7)s
{%(py7)s = %(py2)s(%(py5)s
{%(py5)s = %(py3)s.width
})
}r   ©r-   r2   r3   r7   úF%(py14)s
{%(py14)s = %(py9)s(%(py12)s
{%(py12)s = %(py10)s.height
})
}©Úpy9r9   Úpy12Úpy14r   úassert %(py17)sÚpy17©Ú	CHARS_DIRrE   rF   rG   rH   rI   rJ   rK   rL   rM   rn   ro   rR   r   rN   rO   Úwidthr   ÚheightrP   rQ   ©rS   r¡   r*   rT   rU   rV   rj   r_   r‡   r[   rW   rX   Ú@py_format8Ú@py_assert6rY   Ú@py_assert11Ú@py_assert13Ú@py_format15Ú@py_format16Ú@py_format18s                       r   Útest_npc_avatarz TestM4NewNPCCast.test_npc_avatar…   sJ  € àŒN Ð3Ð3Ð3Ñ3ˆØŒxÐ9ˆxˆx‰zŒzÐ9ˆzÐ9Õ9Ô9Ð9°Ð9Ð9Ñ9Ô9Ð9Ñ9Ð9Õ9Ô9Ñ9Ô9Ð9Ð9Õ9Ô9ˆqÑ9Ô9Ð9Õ9Ô9ˆqÑ9Ô9Ð9Ð9Õ9Ô9ˆxÑ9Ô9Õ9Ô9ˆzÑ9Ô9Ð9Ð9Ñ9Ð9Õ9Õ9Ô9Ð9Ñ9Ô9Ñ9Ô9Ð9Ð9Ð9Ð9Ð9Ø—&’&‘(”(Ô" VÑ+ˆØÐHˆw˜%ÒÐHÐHÐHÕHÔHÐHÐHÐHÐHˆw˜%ÐHÑHÔHÐHÕHÔHÑHÔHÐHÐHÕHÔHˆwÑHÔHÐHÕHÔHˆwÑHÔHÐHÐHÕHÔH˜%ÑHÔHÐHÐHÑHÐHÕHÔHÐ!H¨6Ð!HÐ!HÐ!HÑHÔHÐHÑHÐHÐHÐHÑHÐHÕHÕHÔHÐHÑHÔHÑHÔHÐHÐHÐHÐHÐHÝŒZ˜‰]Œ]ð 	N˜cØ”8Ð)˜zÐ)�8˜zÒ)Ð)Ð)Ð)Õ)Ô)Ð)Ð)Ð)Ð)�8˜zÐ)Ñ)Ô)Ð)Õ)Ô)Ñ)Ô)Ð)Ð)Õ)Ô)�3Ñ)Ô)Ð)Õ)Ô)�3Ñ)Ô)Ð)Ð)Õ)Ô)�8Ñ)Ô)Õ)Ô)˜zÑ)Ô)Ð)Ð)Ñ)Ð)Ð)Ð)Ð)Ð)Ñ)Ð)Õ)Õ)Ô)Ð)Ñ)Ô)Ñ)Ô)Ð)Ð)Ð)Ð)Ð)Ð)Ð)ØMÐM 3¤9ÐM•? 9Ñ-Ô-ÐMÐ-ÐMÐ-ÐMÀ#Ä*ÐMµ/À*Ñ2MÔ2MÐMÐ2MÐMÐMÑMÐMÐMÕMÔMÑMÔMÐMÐMÕMÔM•?ÑMÔMÐMÕMÔM•?ÑMÔMÐMÐMÐMÕMÔMÑMÔMÐMÐMÕMÔM 3ÑMÔMÐMÕMÔM 3ÑMÔMÐMÐMÕMÔM 9ÑMÔMÕMÔMÐ-ÑMÔMÐMÐMÑMÐMÐM×MÒMÐMÑMÔMÐMÐ-ÐMÐMÐMÕMÔMÑMÔMÐMÐMÕMÔMµ/ÑMÔMÐMÕMÔMµ/ÑMÔMÐMÐMÐMÕMÔMÑMÔMÐMÐMÕMÔMÀ#ÑMÔMÐMÕMÔMÀ#ÑMÔMÐMÐMÕMÔMÀ*ÑMÔMÕMÔMÐ2MÑMÔMÐMÐMÑMÐMÐM×MÒMÐMÑMÔMÐMÕMÔMÐMÐMÑMÔMÐMÑMÐMÐMÐMÐMÐMÑMÐMÕMÕMÔMÐMÑMÔMÑMÔMÐMÐMÐMÐMÐMÐMÐMÐMÐMÐMÐMÐMÐMð	Nð 	Nð 	Nñ 	Nô 	Nð 	Nð 	Nð 	Nð 	Nð 	Nð 	Nð 	Nøøøð 	Nð 	Nð 	Nð 	Nð 	Nð 	Nó   Æ6KRÒRÒRc                óJ	  — | j         |› d�z  }|j        } |¦   «         }|s£t          j        d|› �¦  «        dz   dt	          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        dœz  }t          t          j	        |¦  «        ¦  «        ‚d x}}| 
                    ¦   «         j        dz  }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  }t          j        d|› d�¦  «        dz   d|iz  }	t          t          j	        |	¦  «        ¦  «        ‚d x}}t          j        |¦  «        5 }
|
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}}g }|
j        }t#          |¦  «        }|}|r|
j        }t#          |¦  «        }|}|�sÐddt	          j        ¦   «         v st          j        t"          ¦  «        rt          j        t"          ¦  «        nddt	          j        ¦   «         v st          j        |
¦  «        rt          j        |
¦  «        ndt          j        |¦  «        t          j        |¦  «        dœz  }|                     |¦  «         |rÇddt	          j        ¦   «         v st          j        t"          ¦  «        rt          j        t"          ¦  «        nddt	          j        ¦   «         v st          j        |
¦  «        rt          j        |
¦  «        ndt          j        |¦  «        t          j        |¦  «        dœz  }|                     |¦  «         t          j        |d¦  «        i z  }dd|iz  }t          t          j	        |¦  «        ¦  «        ‚d x}x}x}x}x}}d d d ¦  «         d S # 1 swxY w Y   d S )Nz_portrait.pngzMissing portrait for r)   r*   r+   rg   rb   rh   r�   rj   r‚   z	Portrait r£   r„   r3   )r~   r~   r=   r¤   rW   r¥   r¦   r7   r§   r   r¨   r©   rª   r   r®   r¯   r°   r´   s                       r   Útest_npc_portraitz"TestM4NewNPCCast.test_npc_portrait�   sJ  € àŒN Ð5Ð5Ð5Ñ5ˆØŒxÐ;ˆxˆx‰zŒzÐ;ˆzÐ;Õ;Ô;Ð;°6Ð;Ð;Ñ;Ô;Ð;Ñ;Ð;Õ;Ô;Ñ;Ô;Ð;Ð;Õ;Ô;ˆqÑ;Ô;Ð;Õ;Ô;ˆqÑ;Ô;Ð;Ð;Õ;Ô;ˆxÑ;Ô;Õ;Ô;ˆzÑ;Ô;Ð;Ð;Ñ;Ð;Õ;Õ;Ô;Ð;Ñ;Ô;Ñ;Ô;Ð;Ð;Ð;Ð;Ð;Ø—&’&‘(”(Ô" VÑ+ˆØÐJˆw˜%ÒÐJÐJÐJÕJÔJÐJÐJÐJÐJˆw˜%ÐJÑJÔJÐJÕJÔJÑJÔJÐJÐJÕJÔJˆwÑJÔJÐJÕJÔJˆwÑJÔJÐJÐJÕJÔJ˜%ÑJÔJÐJÐJÑJÐJÕJÔJÐ!J¨VÐ!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ÝŒZ˜‰]Œ]ð 	N˜cØ”8Ð)˜zÐ)�8˜zÒ)Ð)Ð)Ð)Õ)Ô)Ð)Ð)Ð)Ð)�8˜zÐ)Ñ)Ô)Ð)Õ)Ô)Ñ)Ô)Ð)Ð)Õ)Ô)�3Ñ)Ô)Ð)Õ)Ô)�3Ñ)Ô)Ð)Ð)Õ)Ô)�8Ñ)Ô)Õ)Ô)˜zÑ)Ô)Ð)Ð)Ñ)Ð)Ð)Ð)Ð)Ð)Ñ)Ð)Õ)Õ)Ô)Ð)Ñ)Ô)Ñ)Ô)Ð)Ð)Ð)Ð)Ð)Ð)Ð)ØMÐM 3¤9ÐM•? 9Ñ-Ô-ÐMÐ-ÐMÐ-ÐMÀ#Ä*ÐMµ/À*Ñ2MÔ2MÐMÐ2MÐMÐMÑMÐMÐMÕMÔMÑMÔMÐMÐMÕMÔM•?ÑMÔMÐMÕMÔM•?ÑMÔMÐMÐMÐMÕMÔMÑMÔMÐMÐMÕMÔM 3ÑMÔMÐMÕMÔM 3ÑMÔMÐMÐMÕMÔM 9ÑMÔMÕMÔMÐ-ÑMÔMÐMÐMÑMÐMÐM×MÒMÐMÑMÔMÐMÐ-ÐMÐMÐMÕMÔMÑMÔMÐMÐMÕMÔMµ/ÑMÔMÐMÕMÔMµ/ÑMÔMÐMÐMÐMÕMÔMÑMÔMÐMÐMÕMÔMÀ#ÑMÔMÐMÕMÔMÀ#ÑMÔMÐMÐMÕMÔMÀ*ÑMÔMÕMÔMÐ2MÑMÔMÐMÐMÑMÐMÐM×MÒMÐMÑMÔMÐMÕMÔMÐMÐMÑMÔMÐMÑMÐMÐMÐMÐMÐMÑMÐMÕMÕMÔMÐMÑMÔMÑMÔMÐMÐMÐMÐMÐMÐMÐMÐMÐMÐMÐMÐMÐMð	Nð 	Nð 	Nñ 	Nô 	Nð 	Nð 	Nð 	Nð 	Nð 	Nð 	Nð 	Nøøøð 	Nð 	Nð 	Nð 	Nð 	Nð 	Nr½   c           	     ó�  — | j         |› d�z  }| j         |› d�z  }g }|j        } |¦   «         }|}|r|j        } |¦   «         }	|	}|�s@ddt          j        ¦   «         v st	          j        |¦  «        rt	          j        |¦  «        ndt	          j        |¦  «        t	          j        |¦  «        dœz  }
|                     |
¦  «         |rddt          j        ¦   «         v st	          j        |¦  «        rt	          j        |¦  «        ndt	          j        |¦  «        t	          j        |	¦  «        dœz  }|                     |¦  «         t	          j        |d	¦  «        i z  }d
d|iz  }t          t	          j
        |¦  «        ¦  «        ‚d x}x}x}x}x}}	|j        } |¦   «         }|j        }d}||z  }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        |¦  «        t	          j        |¦  «        t	          j        |	¦  «        dœz  }dd|iz  }t          t	          j
        |¦  «        ¦  «        ‚d x}x}x}x}x}x}}	|j        } |¦   «         }|j        }d}||z  }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        |¦  «        t	          j        |¦  «        t	          j        |	¦  «        dœz  }dd|iz  }t          t	          j
        |¦  «        ¦  «        ‚d x}x}x}x}x}x}}	t          j        |¦  «        5 }|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}}g }|j        }t%          |¦  «        }|}|r|j        }	t%          |	¦  «        }|}|�sÐddt          j        ¦   «         v st	          j        t$          ¦  «        rt	          j        t$          ¦  «        nddt          j        ¦   «         v st	          j        |¦  «        rt	          j        |¦  «        ndt	          j        |¦  «        t	          j        |¦  «        dœz  }|                     |¦  «         |rÇddt          j        ¦   «         v st	          j        t$          ¦  «        rt	          j        t$          ¦  «        nddt          j        ¦   «         v st	          j        |¦  «        rt	          j        |¦  «        ndt	          j        |	¦  «        t	          j        |¦  «        dœz  }|                     |¦  «         t	          j        |d	¦  «        i z  }dd |iz  }t          t	          j
        |¦  «        ¦  «        ‚d x}x}x}x}x}	}d d d ¦  «         n# 1 swxY w Y   t          j        |¦  «        5 }|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}}g }|j        }t%          |¦  «        }|}|r|j        }	t%          |	¦  «        }|}|�sÐddt          j        ¦   «         v st	          j        t$          ¦  «        rt	          j        t$          ¦  «        ndd!t          j        ¦   «         v st	          j        |¦  «        rt	          j        |¦  «        nd!t	          j        |¦  «        t	          j        |¦  «        dœz  }|                     |¦  «         |rÇddt          j        ¦   «         v st	          j        t$          ¦  «        rt	          j        t$          ¦  «        ndd!t          j        ¦   «         v st	          j        |¦  «        rt	          j        |¦  «        nd!t	          j        |	¦  «        t	          j        |¦  «        dœz  }|                     |¦  «         t	          j        |d	¦  «        i z  }dd |iz  }t          t	          j
        |¦  «        ¦  «        ‚d x}x}x}x}x}	}t)          j        |¦  «        }t-          |j        ¦  «        d"k    r|j        d#         nd$}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  }t	          j        d*|› d+|d,›d-�¦  «        d.z   d/|iz  }t          t	          j
        |¦  «        ¦  «        ‚d x}}d d d ¦  «         d S # 1 swxY w Y   d S )0Nz_standee.pngz_standee_normal.pngz:%(py6)s
{%(py6)s = %(py4)s
{%(py4)s = %(py2)s.exists
}()
}Úp_st)r-   r.   rC   z>%(py12)s
{%(py12)s = %(py10)s
{%(py10)s = %(py8)s.exists
}()
}Úp_norm)r8   r9   r¬   r   zassert %(py15)sÚpy15rg   rc   rh   )zm(%(py6)s
{%(py6)s = %(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.stat
}()
}.st_size
} / %(py8)s) <= %(py12)s)r,   r-   r.   rC   r8   r¬   zassert %(py14)sr­   )r~   i   r=   r¤   rW   r¥   r¦   r7   r§   r   r¨   r©   rª   r®   r¯   Úimg_normrŠ   r‹   rŒ   r�   rŽ   r�   r‘   r‚   zStandee normal for r’   r“   r”   r„   r3   )r±   rE   rH   rI   rF   rJ   rK   rP   rQ   rL   rM   rn   ro   rR   r   rN   rO   r²   r   r³   r   r•   r–   r—   rG   )rS   r¡   rÁ   rÂ   rT   rU   Ú@py_assert5rY   rZ   r·   r`   Ú@py_format13r^   rº   Ú@py_assert7Ú@py_assert10r¹   rW   rX   r[   rµ   r¶   r¸   r»   rÄ   rn   r‘   r_   r‡   s                                r   Útest_npc_standee_and_normalz,TestM4NewNPCCast.test_npc_standee_and_normal™   si  € àŒ~ 6Ð 7Ð 7Ð 7Ñ7ˆØ” VÐ"@Ð"@Ð"@Ñ@ˆØ0Ð0ˆtŒ{Ð0ˆ{ˆ{‰}Œ}Ð0ˆ}Ð0ˆ}Ð0 ¤Ð0  ¡¤Ð0 Ð0Ð0Ñ0Ð0Ð0Õ0Ô0Ñ0Ô0Ð0Ð0Õ0Ô0ˆtÑ0Ô0Ð0Õ0Ô0ˆtÑ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Ô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àŒyÐ5ˆyˆy‰{Œ{Ð5ˆ{Ô"Ð5 VÐ5Ð" VÑ+Ð5¨vÐ5Ð+¨vÒ5Ð5Ð5Ð5Õ5Ô5Ð5Ð5Ð5Ð5Ð+¨vÐ5Ñ5Ô5Ð5Õ5Ô5Ñ5Ô5Ð5Ð5Õ5Ô5ˆtÑ5Ô5Ð5Õ5Ô5ˆtÑ5Ô5Ð5Ð5Õ5Ô5ˆyÑ5Ô5Õ5Ô5ˆ{Ñ5Ô5Õ5Ô5Ð"Ñ5Ô5Õ5Ô5 VÑ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ØŒ{Ð7ˆ{ˆ{‰}Œ}Ð7ˆ}Ô$Ð7 vÐ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ˆ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 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Ð7Ð7åŒZ˜ÑÔð 	N Ø”8Ð)˜zÐ)�8˜zÒ)Ð)Ð)Ð)Õ)Ô)Ð)Ð)Ð)Ð)�8˜zÐ)Ñ)Ô)Ð)Õ)Ô)Ñ)Ô)Ð)Ð)Õ)Ô)�3Ñ)Ô)Ð)Õ)Ô)�3Ñ)Ô)Ð)Ð)Õ)Ô)�8Ñ)Ô)Õ)Ô)˜zÑ)Ô)Ð)Ð)Ñ)Ð)Ð)Ð)Ð)Ð)Ñ)Ð)Õ)Õ)Ô)Ð)Ñ)Ô)Ñ)Ô)Ð)Ð)Ð)Ð)Ð)Ð)Ð)ØMÐM 3¤9ÐM•? 9Ñ-Ô-ÐMÐ-ÐMÐ-ÐMÀ#Ä*ÐMµ/À*Ñ2MÔ2MÐMÐ2MÐMÐMÑMÐMÐMÕMÔMÑMÔMÐMÐMÕMÔM•?ÑMÔMÐMÕMÔM•?ÑMÔMÐMÐMÐMÕMÔMÑMÔMÐMÐMÕMÔM 3ÑMÔMÐMÕMÔM 3ÑMÔMÐMÐMÕMÔM 9ÑMÔMÕMÔMÐ-ÑMÔMÐMÐMÑMÐMÐM×MÒMÐMÑMÔMÐMÐ-ÐMÐMÐMÕMÔMÑMÔMÐMÐMÕMÔMµ/ÑMÔMÐMÕMÔMµ/ÑMÔMÐMÐMÐMÕMÔMÑMÔMÐMÐMÕMÔMÀ#ÑMÔMÐMÕMÔMÀ#ÑMÔMÐMÐMÕMÔMÀ*ÑMÔMÕMÔMÐ2MÑMÔMÐMÐMÑMÐMÐM×MÒMÐMÑMÔMÐMÕMÔMÐMÐMÑMÔMÐMÑMÐMÐMÐMÐMÐMÑMÐMÕMÕMÔMÐMÑMÔMÑMÔMÐMÐMÐMÐMÐMÐMÐMÐMÐMÐMÐMÐMÐMð	Nð 	Nð 	Nñ 	Nô 	Nð 	Nð 	Nð 	Nð 	Nð 	Nð 	Nøøøð 	Nð 	Nð 	Nð 	Nõ ŒZ˜ÑÔð 	_ 8Ø”=Ð. JÐ.�= JÒ.Ð.Ð.Ð.Õ.Ô.Ð.Ð.Ð.Ð.�= JÐ.Ñ.Ô.Ð.Õ.Ô.Ñ.Ô.Ð.Ð.Õ.Ô.�8Ñ.Ô.Ð.Õ.Ô.�8Ñ.Ô.Ð.Ð.Õ.Ô.�=Ñ.Ô.Õ.Ô. JÑ.Ô.Ð.Ð.Ñ.Ð.Ð.Ð.Ð.Ð.Ñ.Ð.Õ.Õ.Ô.Ð.Ñ.Ô.Ñ.Ô.Ð.Ð.Ð.Ð.Ð.Ð.Ð.ØWÐW 8¤>ÐW•? >Ñ2Ô2ÐWÐ2ÐWÐ2ÐWÀxÄÐWµÀÑ7WÔ7WÐWÐ7WÐWÐWÑWÐWÐWÕWÔWÑWÔWÐWÐWÕWÔW•?ÑWÔWÐWÕWÔW•?ÑWÔWÐWÐWÐWÕWÔWÑWÔWÐWÐWÕWÔW 8ÑWÔWÐWÕWÔW 8ÑWÔWÐWÐWÕWÔW >ÑWÔWÕWÔWÐ2ÑWÔWÐWÐWÑWÐWÐW×WÒWÐWÑWÔWÐWÐ2ÐWÐWÐWÕWÔWÑWÔWÐWÐWÕWÔWµÑWÔWÐWÕWÔWµÑWÔWÐWÐWÐWÕWÔWÑWÔWÐWÐWÕWÔWÀxÑWÔWÐWÕWÔWÀxÑWÔWÐWÐWÕWÔWÀÑWÔWÕWÔWÐ7WÑWÔWÐWÐWÑWÐWÐW×WÒWÐWÑWÔWÐWÕWÔWÐWÐWÑWÔWÐWÑWÐWÐWÐWÐWÐWÑWÐWÕWÕWÔWÐWÑWÔWÑWÔWÐWÐWÐWÐWÐWÐWÐWÐWÐWÐWÐWÐWÐWÝ”> (Ñ+Ô+ˆDÝ%(¨¬¡^¤^°qÒ%8Ð%8�T”Y˜q”\�\¸cˆFØ!Ð^�6˜E’>Ð^Ð^Ð^Õ^Ô^Ð^Ð^Ð^Ð^�6˜EÐ^Ñ^Ô^Ð^Õ^Ô^Ñ^Ô^Ð^Ð^Õ^Ô^�6Ñ^Ô^Ð^Õ^Ô^�6Ñ^Ô^Ð^Ð^Õ^Ô^˜EÑ^Ô^Ð^Ð^Ñ^Ð^Õ^Ô^Ð#^¸Ð#^Ð#^ÈÐ#^Ð#^Ð#^Ð#^Ñ^Ô^Ð^Ñ^Ð^Ð^Ð^Ñ^Ð^Õ^Õ^Ô^Ð^Ñ^Ô^Ñ^Ô^Ð^Ð^Ð^Ð^Ð^ð	_ð 	_ð 	_ñ 	_ô 	_ð 	_ð 	_ð 	_ð 	_ð 	_ð 	_ð 	_øøøð 	_ð 	_ð 	_ð 	_ð 	_ð 	_s&   ÏKZ=Ú=[Û[ÛOj;ê;j?ëj?N)r¡   r$   r	   r'   )rs   rt   ru   rv   rw   r±   ÚNPC_IDSrx   ry   rz   r¼   r¿   rÉ   r   r   r   rš   rš   y   së   € € € € € ØQÐQà˜HÑ$ xÑ/°(Ñ:¸\ÑI€Iðð ð €Gð „[×Ò˜X wÑ/Ô/ðNð Nð Nñ 0Ô/ðNð „[×Ò˜X wÑ/Ô/ðNð Nð Nñ 0Ô/ðNð „[×Ò˜X wÑ/Ô/ð_ð _ð _ñ 0Ô/ð_ð _ð _r   rš   )r   r   r	   r
   )rv   Ú
__future__r   ÚbuiltinsrH   Ú_pytest.assertion.rewriteÚ	assertionÚrewriterF   Úpathlibr   ÚPILr   r   rx   Ú__file__ÚresolveÚparentrw   r   r   r|   rš   r   r   r   ú<module>rÕ      sE  ððð ð #Ð "Ð "Ð "Ð "Ð "Ø  € € € € € € € € € € € € Ð Ð Ð Ð Ð Ð Ø  Ð  Ð  Ð  Ð  Ð  Ð  Ð  Ø €€€àˆD�‰NŒN×"Ò"Ñ$Ô$Ô+Ô2Ô9€	ð(ð (ð (ð (ð&\ð &\ð &\ð &\ð &\ñ &\ô &\ð &\ðR8Vð 8Vð 8Vð 8Vð 8Vñ 8Vô 8Vð 8Vðv2_ð 2_ð 2_ð 2_ð 2_ñ 2_ô 2_ð 2_ð 2_ð 2_r   