§
    ¡Z­j5  ã                   óT   — d Z ddlmZmZmZmZmZ ddlmZ ddl	Z	 G d„ d¦  «        Z
dS )u_  
AutoPOE2 - Optical Inventory Scanner & Hooded One Identify All Trigger (Doc 48 / Doc 39 / Doc 43 P1-5)
========================================================================================================
- QuÃ©t quang há»�c 12 Ã´ HÃ ng 1 (Row 0) Ä‘á»ƒ Ä‘á»‹nh vá»‹ Waystone phá»¥c vá»¥ náº¡p Map Device (Doc 48).
- QuÃ©t quang há»�c toÃ n bá»™ 60 Ã´ hÃ nh trang (12 cá»™t x 5 hÃ ng) Ä‘á»ƒ phÃ¡t hiá»‡n tráº¡ng thÃ¡i tÃºi Ä‘á»“ Ä‘áº§y.
- Tá»± Ä‘á»™ng kÃ­ch hoáº¡t chu trÃ¬nh The Hooded One Identify All (Opcode 8, Mode 1) khi tÃºi Ä‘áº§y táº¡i Town/Hideout (P1-5).

TuÃ¢n thá»§ nghiÃªm ngáº·t:
- INV-UI-INVENTORY-ROW1: XÃ¡c minh Ä‘á»™ sÃ¡ng AvgRGB > 50.0 trÃªn Ã´ tháº­t.
- INV-NPC-01: Chá»‰ kÃ­ch hoáº¡t táº¡i vÃ¹ng an toÃ n Town/Hideout (is_in_town == True, monsters == 0).
- Zero Mock Data: Sá»­ dá»¥ng tá»· lá»‡ hÃ¬nh há»�c thá»±c táº¿ 1080p -> 1440p/4K.
é    )ÚAnyÚDictÚListÚOptionalÚTuple)ÚImageNc                   ó¢  — e Zd ZdZddedefd„Zdded	ed
eeef         fd„Zdej        ded	ed
e	fd„Z
ded
eeeeee	f                  fd„Zded
eeeef                  fd„Zded
eeeef                  fd„Zded
eeef         fd„Zded
eeef         fd„Zded
eeef         fd„Zded
efd„Z	 	 ddedee         deded
eeef         f
d„ZdS )ÚOpticalInventoryScanneru·   
    Bá»™ quÃ©t quang há»�c tÃºi Ä‘á»“ nhÃ¢n váº­t (60 Ã´: 12 cá»™t x 5 hÃ ng).
    CÄƒn chá»‰nh theo há»‡ tá»�a Ä‘á»™ chuáº©n hÃ³a tham chiáº¿u 1080p (data/ui/coordinates.toml).
    é 
  é   Úscreen_wÚscreen_hc                 óì   — || _         || _        |dk    r|dz  nd}|dk    r|dz  nd}d|z  | _        d|z  | _        d|z  | _        d|z  | _        d| _        d	| _        d
| _        d| _	        d| _
        d S )Nr   g      ž@g      ð?g     à�@g     à“@g     p‚@g     @J@é   é   g      >@g      9@é0   )r   r   Úorigin_xÚorigin_yÚcell_wÚcell_hÚcolsÚrowsÚthreshold_waystoneÚthreshold_occupied_itemÚfull_inventory_threshold)Úselfr   r   Úscale_xÚscale_ys        úDC:\Projects\AutoPOE2\src\assistant_tool\optical_inventory_scanner.pyÚ__init__z OpticalInventoryScanner.__init__   sŸ   € Ø ˆŒØ ˆŒð (0°!¢| |�(˜VÑ#Ð#¸ˆØ'/°!¢| |�(˜VÑ#Ð#¸ˆð  Ñ(ˆŒØ ™ˆŒØ˜W‘nˆŒØ˜W‘nˆŒØˆŒ	ØˆŒ	ð
 #'ˆÔØ'+ˆÔ$ð )+ˆÔ%Ð%Ð%ó    r   ÚcolÚrowÚreturnc                 óæ   — | j         || j        z  z   | j        dz  z   }| j        || j        z  z   | j        dz  z   }t	          t          |¦  «        ¦  «        t	          t          |¦  «        ¦  «        fS )u[   TÃ­nh toÃ¡n tá»�a Ä‘á»™ tÃ¢m tÆ°Æ¡ng tÃ¡c cá»§a Ã´ (col, row) trÃªn mÃ n hÃ¬nh thá»±c táº¿.g      à?)r   r   r   r   ÚintÚround)r   r"   r#   ÚcxÚcys        r   Úget_slot_centerz'OpticalInventoryScanner.get_slot_center3   sc   € àŒ]˜S 4¤;Ñ.Ñ.°$´+ÀÑ2CÑDˆØŒ]˜S 4¤;Ñ.Ñ.°$´+ÀÑ2CÑDˆÝ•5˜‘9”9‰~Œ~�s¥5¨¡9¤9™~œ~Ð-Ð-r!   Úrgb_imgc           
      ót  — |                       ||¦  «        \  }}t          dt          t          d| j        dz  z  ¦  «        ¦  «        ¦  «        }||z
  ||z
  ||z   ||z   f}|                     |¦  «        }|                     ¦   «         }	|	sdS t          |	¦  «        t          t          |	¦  «        ¦  «        z  S )uW   Ä�o Ä‘á»™ sÃ¡ng trung bÃ¬nh táº¡i tÃ¢m Ã´ (col, row) vá»›i bÃ¡n kÃ­nh láº¥y máº«u 12px.é   g      (@g      ¤@g        )
r*   Úmaxr&   r'   r   ÚcropÚtobytesÚsumÚfloatÚlen)
r   r+   r"   r#   r(   r)   Úhalf_sampleÚboxÚsample_regionÚraws
             r   Úscan_slot_brightnessz,OpticalInventoryScanner.scan_slot_brightness9   s´   € à×%Ò% c¨3Ñ/Ô/‰ˆˆBÝ˜!�S¥ t¨t¬}¸vÑ/EÑ'FÑ!GÔ!GÑHÔHÑIÔIˆØ�KÑ  kÑ!1°2¸Ñ3CÀRÈ+ÑEUÐVˆØŸš SÑ)Ô)ˆØ×#Ò#Ñ%Ô%ˆØð 	Ø�3Ý�3‰xŒx�%¥ C¡¤™/œ/Ñ)Ð)r!   Ú
image_pathc                 óN  — t           j                             |¦  «        sg S 	 ddlm} |                     |¦  «        rg S n# t          $ r Y nw xY w	 ddlm}  ||¦  «        rg S n# t          $ r Y nw xY wg }t          j
        |¦  «        5 }|                     d¦  «        }t          | j        ¦  «        D ]V}|                      ||d¦  «        }|                      |d¦  «        \  }	}
|| j        k    r|                     ||	|
|f¦  «         ŒW	 ddd¦  «         n# 1 swxY w Y   |S )u    
        QuÃ©t quang há»�c 12 Ã´ trong hÃ ng 1 (row = 0).
        Tráº£ vá»� danh sÃ¡ch cÃ¡c Ã´ cÃ³ Waystone: [(col, center_x, center_y, avg_rgb), ...]
        r   ©ÚScreenCapturer©Úis_loading_screenÚRGBN)ÚosÚpathÚexistsÚ"src.assistant_tool.screen_capturerr<   Úis_diagnostic_capture_fileÚ	ExceptionÚsrc.common.vision_ocrr>   r   ÚopenÚconvertÚranger   r8   r*   r   Úappend)r   r9   r<   r>   Úwaystones_foundÚimgr+   r"   Úavg_rgbr(   r)   s              r   Úscan_row1_waystonesz+OpticalInventoryScanner.scan_row1_waystonesD   sÙ  € õ
 Œw�~Š~˜jÑ)Ô)ð 	ØˆIð	ØIÐIÐIÐIÐIÐIØ×8Ò8¸ÑDÔDð Ø�	ðøåð 	ð 	ð 	ØˆDð	øøøð	Ø?Ð?Ð?Ð?Ð?Ð?Ø Ð  Ñ,Ô,ð Ø�	ðøåð 	ð 	ð 	ØˆDð	øøøð ˆÝŒZ˜
Ñ#Ô#ð 	C sØ—k’k %Ñ(Ô(ˆGÝ˜TœYÑ'Ô'ð Cð C�Ø×3Ò3°G¸SÀ!ÑDÔD�Ø×-Ò-¨c°1Ñ5Ô5‘��BØ˜TÔ4Ò4Ð4Ø#×*Ò*¨C°°R¸Ð+AÑBÔBÐBøð	Cð	Cð 	Cð 	Cñ 	Cô 	Cð 	Cð 	Cð 	Cð 	Cð 	Cð 	Cøøøð 	Cð 	Cð 	Cð 	Cð Ðs6   £A Á
AÁAÁA& Á&
A3Á2A3ÂBDÄDÄ!Dc                 óœ  — t           j                             |¦  «        sg S 	 ddlm} |                     |¦  «        rg S n# t          $ r Y nw xY w	 ddlm}  ||¦  «        rg S n# t          $ r Y nw xY wg }t          j
        |¦  «        5 }|                     d¦  «        }t          | j        ¦  «        D ]}}t          | j        ¦  «        D ]f}|                      |||¦  «        }	|	| j        k    rB|                      ||¦  «        \  }
}|                     |||
|t'          |	d¦  «        dœ¦  «         ŒgŒ~	 ddd¦  «         n# 1 swxY w Y   |S )uÌ   
        QuÃ©t linh hoáº¡t toÃ n bá»™ 60 Ã´ (12 cá»™t x 5 hÃ ng) Ä‘á»ƒ Ä‘á»‹nh vá»‹ táº¥t cáº£ Waystones cÃ³ trong tÃºi Ä‘á»“.
        KhÃ´ng Ã©p ngÆ°á»�i chÆ¡i pháº£i Ä‘áº·t á»Ÿ hÃ ng 1 (Row 0).
        r   r;   r=   r?   é   )r"   r#   Úcenter_xÚcenter_yrM   N)r@   rA   rB   rC   r<   rD   rE   rF   r>   r   rG   rH   rI   r   r   r8   r   r*   rJ   r'   )r   r9   r<   r>   Úall_waystonesrL   r+   r#   r"   rM   r(   r)   s               r   Úscan_all_waystonesz*OpticalInventoryScanner.scan_all_waystonese   s  € õ
 Œw�~Š~˜jÑ)Ô)ð 	ØˆIð	ØIÐIÐIÐIÐIÐIØ×8Ò8¸ÑDÔDð Ø�	ðøåð 	ð 	ð 	ØˆDð	øøøð	Ø?Ð?Ð?Ð?Ð?Ð?Ø Ð  Ñ,Ô,ð Ø�	ðøåð 	ð 	ð 	ØˆDð	øøøð ˆÝŒZ˜
Ñ#Ô#ð 	 sØ—k’k %Ñ(Ô(ˆGÝ˜TœYÑ'Ô'ð ð �Ý  ¤Ñ+Ô+ð 
ð 
�CØ"×7Ò7¸ÀÀcÑJÔJ�GØ Ô!8Ò8Ð8Ø!%×!5Ò!5°c¸3Ñ!?Ô!?™˜˜BØ%×,Ò,Ø#&Ø#&Ø(*Ø(*Ý',¨W°aÑ'8Ô'8ð.ð .ñ ô ð øð	
ðð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð Ðs6   £A Á
AÁAÁA& Á&
A3Á2A3ÂB(EÅEÅEc                 óD   — |                       |¦  «        }|r|d         ndS )uß   
        TÃ¬m Waystone Ä‘áº§u tiÃªn kháº£ dá»¥ng á»Ÿ báº¥t ká»³ vá»‹ trÃ­ nÃ o trong tÃºi Ä‘á»“ 60 Ã´.
        Tráº£ vá»� dict tá»�a Ä‘á»™ {col, row, center_x, center_y} hoáº·c None náº¿u khÃ´ng cÃ²n Waystone nÃ o.
        r   N)rT   ©r   r9   Ú	waystoness      r   Úfind_any_waystonez)OpticalInventoryScanner.find_any_waystoneŒ   s*   € ð
 ×+Ò+¨JÑ7Ô7ˆ	Ø(Ð2ˆy˜Œ|ˆ|¨dÐ2r!   c                 ód  — | j         | j        z  dddg ddœ}t          j                             |¦  «        s
d|› �|d<   |S 	 ddlm} |                     |¦  «        rd|d<   |S n# t          $ r Y nw xY w	 dd	l	m
}  ||¦  «        rd
|d<   |S n# t          $ r Y nw xY wt          j        |¦  «        5 }|                     d¦  «        }t          | j        ¦  «        D ]§}t          | j         ¦  «        D ]�}|                      |||¦  «        }	|                      ||¦  «        \  }
}|	| j        k    }|r|dxx         dz  cc<   n|dxx         dz  cc<   |d                              |||
|t'          |	d¦  «        |dœ¦  «         Œ‘Œ¨	 ddd¦  «         n# 1 swxY w Y   |d         | j        k    |d<   |S )uÍ   
        QuÃ©t quang há»�c toÃ n bá»™ 60 Ã´ hÃ nh trang (12 cá»™t x 5 hÃ ng).
        Tráº£ vá»� thá»‘ng kÃª chi tiáº¿t: sá»‘ Ã´ cÃ³ Ä‘á»“, sá»‘ Ã´ trá»‘ng, danh sÃ¡ch chi tiáº¿t vÃ  cá»� is_full.
        r   FÚ )Útotal_slotsÚoccupied_countÚempty_countÚis_fullÚslotsÚerrorúFile anh khong ton tai: r`   r;   uS   DIAGNOSTIC_FALLBACK_FRAME: KhÃ´ng thá»ƒ Ä‘á»�c tÃºi Ä‘á»“ trÃªn áº£nh cháº©n Ä‘oÃ¡nr=   zNLOADING_SCREEN_DETECTED: Man hinh dang o Loading Screen, khong the quet tui dor?   r\   rP   r]   r_   )r"   r#   rQ   rR   rM   ÚoccupiedNr^   )r   r   r@   rA   rB   rC   r<   rD   rE   rF   r>   r   rG   rH   rI   r8   r*   r   rJ   r'   r   )r   r9   Úresultr<   r>   rL   r+   r#   r"   rM   r(   r)   Úis_occupieds                r   Úscan_full_inventoryz+OpticalInventoryScanner.scan_full_inventory”   s²  € ð  œ9 t¤yÑ0ØØØØØð
ð 
ˆõ Œw�~Š~˜jÑ)Ô)ð 	ØE¸ÐEÐEˆF�7‰OØˆMð	ØIÐIÐIÐIÐIÐIØ×8Ò8¸ÑDÔDð Ø"w��w‘Ø�ðøõ ð 	ð 	ð 	ØˆDð	øøøð	Ø?Ð?Ð?Ð?Ð?Ð?Ø Ð  Ñ,Ô,ð Ø"r��w‘Ø�ðøõ ð 	ð 	ð 	ØˆDð	øøøõ ŒZ˜
Ñ#Ô#ð 	 sØ—k’k %Ñ(Ô(ˆGÝ˜TœYÑ'Ô'ð ð �Ý  ¤Ñ+Ô+ð ð �CØ"×7Ò7¸ÀÀcÑJÔJ�GØ!×1Ò1°#°sÑ;Ô;‘F�B˜Ø#*¨TÔ-IÒ#I�KØ"ð 3ØÐ/Ð0Ð0Ô0°AÑ5Ð0Ð0Ñ0Ð0à˜}Ð-Ð-Ô-°Ñ2Ð-Ð-Ñ-à˜7”O×*Ò*Ø"Ø"Ø$&Ø$&Ý#(¨°!Ñ#4Ô#4Ø$/ð,ð ,ñ ô ð ð ððð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð* $Ð$4Ô5¸Ô9VÒVˆˆyÑØˆs7   Á!A$ Á$
A1Á0A1Á5B Â
BÂBÂ2CFÆFÆFc                 ó¬   — |                       |¦  «        }| j        t          |¦  «        | j        t          |¦  «        z
  t          |¦  «        dk    |dœS )uÓ   
        QuÃ©t tráº¡ng thÃ¡i 12 Ã´ HÃ ng 1 (Row 0 - VÃ¹ng Báº£o LÆ°u theo INV-INVENTORY-ROW0-RESERVED).
        Tráº£ vá»� thá»‘ng kÃª sá»‘ lÆ°á»£ng Waystones / Tablets Ä‘Ã£ sáºµn sÃ ng Ä‘á»ƒ náº¡p map.
        r   )Útotal_reserved_slotsÚready_countr]   Úhas_waystonerW   )rN   r   r3   rV   s      r   Úscan_row0_statusz(OpticalInventoryScanner.scan_row0_statusÎ   sU   € ð
 ×,Ò,¨ZÑ8Ô8ˆ	à$(¤IÝ˜y™>œ>Øœ9¥s¨9¡~¤~Ñ5Ý 	™NœN¨QÒ.Ø"ð
ð 
ð 	
r!   c                 ób  — | j         | j        dz
  z  dddddœ}t          j                             |¦  «        s
d|› �|d<   |S 	 ddlm}  ||¦  «        rd	|d<   |S n# t          $ r Y nw xY wt          j	        |¦  «        5 }| 
                    d
¦  «        }t          d| j        ¦  «        D ]\}t          | j         ¦  «        D ]E}|                      |||¦  «        }|| j        k    r|dxx         dz  cc<   Œ5|dxx         dz  cc<   ŒFŒ]	 ddd¦  «         n# 1 swxY w Y   |d         dk    |d<   |S )u·   
        QuÃ©t dung lÆ°á»£ng 48 Ã´ HÃ ng 2-5 (Row 1..4 - VÃ¹ng Chá»©a Loot theo Doc 63).
        Tráº£ vá»� sá»‘ Ã´ trá»‘ng cÃ²n láº¡i vÃ  cá»� cáº£nh bÃ¡o Ä‘áº§y tÃºi Ä‘á»“.
        rP   r   FrZ   )Útotal_loot_slotsÚoccupied_loot_slotsÚempty_loot_slotsÚis_loot_fullr`   ra   r`   r=   zWLOADING_SCREEN_DETECTED: Man hinh dang o Loading Screen, khong the quet dung luong lootr?   rm   rn   Nr-   ro   )r   r   r@   rA   rB   rF   r>   rE   r   rG   rH   rI   r8   r   )	r   r9   rc   r>   rL   r+   r#   r"   rM   s	            r   Úscan_loot_capacityz*OpticalInventoryScanner.scan_loot_capacityÜ   sí  € ð !%¤	¨T¬Y¸©]Ñ ;Ø#$Ø !Ø!Øð
ð 
ˆõ Œw�~Š~˜jÑ)Ô)ð 	ØE¸ÐEÐEˆF�7‰OØˆMð	Ø?Ð?Ð?Ð?Ð?Ð?Ø Ð  Ñ,Ô,ð Ø"{��w‘Ø�ðøõ ð 	ð 	ð 	ØˆDð	øøøõ ŒZ˜
Ñ#Ô#ð 	8 sØ—k’k %Ñ(Ô(ˆGÝ˜Q ¤	Ñ*Ô*ð 8ð 8�Ý  ¤Ñ+Ô+ð 8ð 8�CØ"×7Ò7¸ÀÀcÑJÔJ�GØ Ô!=Ò=Ð=ØÐ4Ð5Ð5Ô5¸Ñ:Ð5Ð5Ñ5Ð5àÐ1Ð2Ð2Ô2°aÑ7Ð2Ð2Ñ2Ð2ð8ð8ð	8ð 	8ð 	8ñ 	8ô 	8ð 	8ð 	8ð 	8ð 	8ð 	8ð 	8øøøð 	8ð 	8ð 	8ð 	8ð #)Ð);Ô"<ÀÒ"Aˆˆ~ÑØˆs%   ÁA Á
A)Á(A)Â BDÄDÄDc                 ó    — |                       |¦  «        }|                     d¦  «        rdS t          |                     dd¦  «        ¦  «        S )uP   Kiá»ƒm tra nhanh xem tÃºi Ä‘á»“ (vÃ¹ng Loot) Ä‘Ã£ Ä‘áº§y hay chÆ°a (empty <= 4).r`   Fro   )rp   ÚgetÚbool)r   r9   Úcaps      r   Úis_inventory_fullz)OpticalInventoryScanner.is_inventory_full  sJ   € à×%Ò% jÑ1Ô1ˆØ�7Š7�7ÑÔð 	Ø�5Ý�C—G’G˜N¨EÑ2Ô2Ñ3Ô3Ð3r!   úShoreline HideoutÚcore_bridgeÚ	area_nameÚmonster_countc                 óô  — ddddddœ}|                      ¦   «         }d|v pd|v pd|v pd|v }||d	<   |sd
|› d�|d<   |S |dk    rd|› d�|d<   |S |                      |¦  «        }|                     d¦  «        r|d         |d<   |S |d         |d<   |d         |d<   |d         sd|d         › d�|d<   |S |r6t          |d¦  «        r&|                     dddd¬¦  «        }	|	|d<   |	sd|d<   n
d|d<   d|d<   |S )u_  
        Quy trÃ¬nh tá»± Ä‘á»™ng kÃ­ch hoáº¡t The Hooded One Identify All (Doc 43 P1-5 / Doc 39):
        - Kiá»ƒm tra vÃ¹ng an toÃ n Town/Hideout (INV-NPC-01).
        - QuÃ©t tÃºi Ä‘á»“: náº¿u tÃºi Ä‘á»“ Ä‘áº§y (is_full == True).
        - PhÃ¡t lá»‡nh Opcode 8 (EXECUTE_NPC_INTERACT_ROUTINE) vá»›i mode 1 (IdentifyAll) xuá»‘ng Core Engine.
        Fr   rZ   )Ú	triggeredÚ
is_in_townr^   Úoccupied_slotsr`   ÚhideoutÚtownÚ
encampmentÚcaravanr|   z!Khong the Identify All: Khu vuc 'z' khong phai la Town/Hideout!r`   zVi pham INV-NPC-01: Co z quai vat trong khu vuc!r\   r}   r^   zTui do chua day (z/60 o), khong can Identify All.Úsend_npc_interactrP   i˜:  )Únpc_idÚmodeÚ
option_idxÚ
timeout_msr{   zBGui lenh EXECUTE_NPC_INTERACT_ROUTINE (Opcode 8) qua SHM that bai.TÚOFFLINE_VERIFIEDr„   )Úlowerre   rr   Úhasattrr‚   )
r   r9   rw   rx   ry   Úoutcomerˆ   Úis_safe_townÚinv_dataÚsents
             r   Ú%check_and_trigger_hooded_one_identifyz=OpticalInventoryScanner.check_and_trigger_hooded_one_identify
  s¤  € ð ØØØØð
ð 
ˆð —’Ñ!Ô!ˆØ! UÐ*Ðs°¸%°ÐsÀ\ÐUZÐEZÐsÐ`iÐmrÐ`rˆØ ,ˆ�Ñàð 	ØkÀ9ÐkÐkÐkˆG�GÑØˆNà˜1ÒÐØ`¸Ð`Ð`Ð`ˆG�GÑØˆNð ×+Ò+¨JÑ7Ô7ˆØ�<Š<˜Ñ Ô ð 	Ø'¨Ô0ˆG�GÑØˆNà$,Ð-=Ô$>ˆÐ Ñ!Ø% iÔ0ˆ�	Ñà˜	Ô"ð 	Øn°8Ð<LÔ3MÐnÐnÐnˆG�GÑØˆNð ð 	1�7 ;Ð0CÑDÔDð 	1Ø×0Ò0¸ÀÈaÐ\aÐ0ÑbÔbˆDØ#'ˆG�KÑ Øð hØ#g�˜Ñ øà#'ˆG�KÑ Ø0ˆG�F‰Oàˆr!   N)r   r   )r   )rv   r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r&   r    r   r*   r   r2   r8   Ústrr   rN   r   r   rT   r   rX   re   rj   rp   rs   ru   rŽ   © r!   r   r
   r
      sC  € € € € € ðð ð
+ð + ð +°sð +ð +ð +ð +ð4.ð . 3ð .¨Sð .¸¸sÀC¸x¼ð .ð .ð .ð .ð	*¨E¬Kð 	*¸cð 	*Èð 	*ÐPUð 	*ð 	*ð 	*ð 	*ð¨cð °d¸5ÀÀcÈ3ÐPUÐAUÔ;VÔ6Wð ð ð ð ðB%¨Sð %°T¸$¸sÀC¸x¼.Ô5Ið %ð %ð %ð %ðN3¨Cð 3°H¸TÀ#ÀsÀ(¼^Ô4Lð 3ð 3ð 3ð 3ð8¨cð 8°d¸3À¸8´nð 8ð 8ð 8ð 8ðt
¨3ð 
°4¸¸S¸´>ð 
ð 
ð 
ð 
ð%¨Sð %°T¸#¸s¸(´^ð %ð %ð %ð %ðN4¨Cð 4°Dð 4ð 4ð 4ð 4ð -Øð9ð 9àð9ð ˜c”]ð9ð ð	9ð
 ð9ð 
ˆc�3ˆhŒð9ð 9ð 9ð 9ð 9ð 9r!   r
   )r’   Útypingr   r   r   r   r   ÚPILr   r@   r
   r”   r!   r   ú<module>r—      s’   ððð ð 4Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ø Ð Ð Ð Ð Ð Ø 	€	€	€	ðpð pð pð pð pñ pô pð pð pð pr!   