§
    ‰eîiè>  ã                   ó   — d Z ddlZddlZddlZddlZddlmZ ddlmZm	Z	m
Z
mZmZmZ ddlmZmZ  ej        e¦  «        Zdddd	œZ ed
¦  «        Zdadefd„Zdedee	eef         ef         fd„Zde	eef         defd„Zd(dedz  dee         fd„Zdee         fd„Zde
e         fd„Zde
e         fd„Z de	eef         de	ee
f         fd„Z!de	eef         de
e	eef                  fd„Z"de
e	eef                  fd„Z#dZ$de	eef         defd„Z%de
e	eef                  de	eef         fd„Z&de	eef         defd„Z'd ed!efd"„Z( ej)        d#¦  «        Z*d$edeee         ef         fd%„Z+d&ee         defd'„Z,dS ))a  Lightweight skill metadata utilities shared by prompt_builder and skills_tool.

This module intentionally avoids importing the tool registry, CLI config, or any
heavy dependency chain.  It is safe to import at module level without triggering
tool registration or provider resolution.
é    N)ÚPath)ÚAnyÚDictÚListÚOptionalÚSetÚTuple)Úget_config_pathÚget_skills_dirÚdarwinÚlinuxÚwin32)Úmacosr   Úwindows)z.gitz.githubz.hubÚcontentc                 óŠ   ‡‡— t           €,ddlŠt          ‰dd¦  «        p‰j        Šdt          fˆˆfd„}|a t          | ¦  «        S )z7Parse YAML with lazy import and CSafeLoader preference.Nr   ÚCSafeLoaderÚvaluec                 ó2   •— ‰                      | ‰¬¦  «        S )N)ÚLoader)Úload)r   ÚloaderÚyamls    €€ú3/home/div/.hermes/hermes-agent/agent/skill_utils.pyÚ_loadzyaml_load.<locals>._load*   s   ø€ Ø—9’9˜U¨6�9Ñ2Ô2Ð2ó    )Ú_yaml_load_fnr   ÚgetattrÚ
SafeLoaderÚstr)r   r   r   r   s     @@r   Ú	yaml_loadr!   "   sl   øø€ õ ÐØˆˆˆå˜˜}¨dÑ3Ô3ÐF°t´ˆð	3�ð 	3ð 	3ð 	3ð 	3ð 	3ð 	3ð 	3ð ˆÝ˜Ñ!Ô!Ð!r   Úreturnc                 óX  — i }| }|                       d¦  «        s||fS t          j        d| dd…         ¦  «        }|s||fS | d|                     ¦   «         dz   …         }| |                     ¦   «         dz   d…         }	 t          |¦  «        }t          |t          ¦  «        r|}n�# t          $ rt | 	                    ¦   «          
                    d¦  «        D ]I}d|vrŒ| 
                    dd¦  «        \  }}| 	                    ¦   «         || 	                    ¦   «         <   ŒJY nw xY w||fS )zýParse YAML frontmatter from a markdown string.

    Uses yaml with CSafeLoader for full YAML support (nested metadata, lists)
    with a fallback to simple key:value splitting for robustness.

    Returns:
        (frontmatter_dict, remaining_body)
    z---z
\n---\s*\né   NÚ
ú:é   )Ú
startswithÚreÚsearchÚstartÚendr!   Ú
isinstanceÚdictÚ	ExceptionÚstripÚsplit)	r   ÚfrontmatterÚbodyÚ	end_matchÚyaml_contentÚparsedÚlineÚkeyr   s	            r   Úparse_frontmatterr9   4   s[  € ð #%€KØ€Dà×Ò˜eÑ$Ô$ð !Ø˜DÐ Ð å”	˜-¨°°°¬Ñ5Ô5€IØð !Ø˜DÐ Ð à˜1˜yŸšÑ0Ô0°1Ñ4Ð4Ô5€LØ�9—=’=‘?”? QÑ&Ð(Ð(Ô)€Dð
5Ý˜<Ñ(Ô(ˆÝ�f�dÑ#Ô#ð 	!Ø ˆKøøÝð 5ð 5ð 5à ×&Ò&Ñ(Ô(×.Ò.¨tÑ4Ô4ð 	5ð 	5ˆDØ˜$ˆˆØØŸš C¨Ñ+Ô+‰JˆC�Ø',§{¢{¡}¤}ˆK˜Ÿ	š	™œÑ$Ð$ð		5ð 	5ð5øøøð ˜ÐÐs   Â &B' Â'A;D%Ä$D%r2   c                 óV  — |                       d¦  «        }|sdS t          |t          ¦  «        s|g}t          j        }|D ]h}t          |¦  «                             ¦   «                              ¦   «         }t                                ||¦  «        }| 	                    |¦  «        r dS ŒidS )aŽ  Return True when the skill is compatible with the current OS.

    Skills declare platform requirements via a top-level ``platforms`` list
    in their YAML frontmatter::

        platforms: [macos]          # macOS only
        platforms: [macos, linux]   # macOS and Linux

    If the field is absent or empty the skill is compatible with **all**
    platforms (backward-compatible default).
    Ú	platformsTF)
Úgetr-   ÚlistÚsysÚplatformr    Úlowerr0   ÚPLATFORM_MAPr(   )r2   r;   Úcurrentr?   Ú
normalizedÚmappeds         r   Úskill_matches_platformrE   \   s°   € ð —’ Ñ,Ô,€IØð ØˆtÝ�i¥Ñ&Ô&ð  Ø�Kˆ	ÝŒl€GØð ð ˆÝ˜‘]”]×(Ò(Ñ*Ô*×0Ò0Ñ2Ô2ˆ
Ý×!Ò! *¨jÑ9Ô9ˆØ×Ò˜fÑ%Ô%ð 	Ø�4�4ð	àˆ5r   r?   c                 óð  — t          ¦   «         }|                     ¦   «         st          ¦   «         S 	 t          |                     d¬¦  «        ¦  «        }nA# t
          $ r4}t                               d||¦  «         t          ¦   «         cY d}~S d}~ww xY wt          |t          ¦  «        st          ¦   «         S | 
                    d¦  «        }t          |t          ¦  «        st          ¦   «         S ddlm} | pt          j        d¦  «        p
 |d	¦  «        }|r;| 
                    d
¦  «        pi  
                    |¦  «        }|�t          |¦  «        S t          | 
                    d¦  «        ¦  «        S )a•  Read disabled skill names from config.yaml.

    Args:
        platform: Explicit platform name (e.g. ``"telegram"``).  When
            *None*, resolves from ``HERMES_PLATFORM`` or
            ``HERMES_SESSION_PLATFORM`` env vars.  Falls back to the
            global disabled list when no platform is determined.

    Reads the config file directly (no CLI config imports) to stay
    lightweight.
    úutf-8©Úencodingz"Could not read skill config %s: %sNÚskillsr   )Úget_session_envÚHERMES_PLATFORMÚHERMES_SESSION_PLATFORMÚplatform_disabledÚdisabled)r
   ÚexistsÚsetr!   Ú	read_textr/   ÚloggerÚdebugr-   r.   r<   Úgateway.session_contextrK   ÚosÚgetenvÚ_normalize_string_set)r?   Úconfig_pathr6   ÚeÚ
skills_cfgrK   Úresolved_platformrN   s           r   Úget_disabled_skill_namesr]   y   s‰  € õ "Ñ#Ô#€KØ×ÒÑÔð Ý‰uŒuˆðÝ˜;×0Ò0¸'Ð0ÑBÔBÑCÔCˆˆøÝð ð ð Ý�ŠÐ9¸;ÈÑJÔJÐJÝ‰uŒuˆˆˆˆˆˆøøøøðøøøõ �f�dÑ#Ô#ð Ý‰uŒuˆà—’˜HÑ%Ô%€JÝ�j¥$Ñ'Ô'ð Ý‰uŒuˆà7Ð7Ð7Ð7Ð7Ð7àð 	6ÝŒ9Ð&Ñ'Ô'ð	6àˆ?Ð4Ñ5Ô5ð ð
 ð <Ø'Ÿ^š^Ð,?Ñ@Ô@ÐFÀB×KÒKØñ
ô 
Ðð Ð(Ý(Ð):Ñ;Ô;Ð;Ý  §¢°
Ñ!;Ô!;Ñ<Ô<Ð<s   ²#A Á
BÁ )BÂ	BÂBc                 ój   — | €t          ¦   «         S t          | t          ¦  «        r| g} d„ | D ¦   «         S )Nc                 ó’   — h | ]D}t          |¦  «                             ¦   «         ¯#t          |¦  «                             ¦   «         ’ŒES © )r    r0   )Ú.0Úvs     r   ú	<setcomp>z(_normalize_string_set.<locals>.<setcomp>¨   s9   € Ð=Ð=Ð=˜q­c°!©f¬f¯lªl©n¬nÐ=�C�‰FŒF�LŠL‰NŒNÐ=Ð=Ð=r   )rQ   r-   r    )Úvaluess    r   rX   rX   £   s=   € Ø€~Ý‰uŒuˆÝ�&�#ÑÔð Ø�ˆØ=Ð= FÐ=Ñ=Ô=Ð=r   c                  ó
  — t          ¦   «         } |                      ¦   «         sg S 	 t          |                      d¬¦  «        ¦  «        }n# t          $ r g cY S w xY wt          |t          ¦  «        sg S |                     d¦  «        }t          |t          ¦  «        sg S |                     d¦  «        }|sg S t          |t          ¦  «        r|g}t          |t          ¦  «        sg S t          ¦   «                              ¦   «         }t          ¦   «         }g }|D ]é}t          |¦  «                             ¦   «         }|sŒ&t          j                             t          j                             |¦  «        ¦  «        }t%          |¦  «                             ¦   «         }	|	|k    rŒŠ|	|v rŒ�|	                     ¦   «         r+|                     |	¦  «         |                     |	¦  «         ŒÎt,                               d|	¦  «         Œê|S )a<  Read ``skills.external_dirs`` from config.yaml and return validated paths.

    Each entry is expanded (``~`` and ``${VAR}``) and resolved to an absolute
    path.  Only directories that actually exist are returned.  Duplicates and
    paths that resolve to the local ``~/.hermes/skills/`` are silently skipped.
    rG   rH   rJ   Úexternal_dirsz0External skills dir does not exist, skipping: %s)r
   rP   r!   rR   r/   r-   r.   r<   r    r=   r   ÚresolverQ   r0   rV   ÚpathÚ
expanduserÚ
expandvarsr   Úis_dirÚaddÚappendrS   rT   )
rY   r6   r[   Úraw_dirsÚlocal_skillsÚseenÚresultÚentryÚexpandedÚps
             r   Úget_external_skills_dirsru   ®   sþ  € õ "Ñ#Ô#€KØ×ÒÑÔð Øˆ	ðÝ˜;×0Ò0¸'Ð0ÑBÔBÑCÔCˆˆøÝð ð ð Øˆ	ˆ	ˆ	ðøøøå�f�dÑ#Ô#ð Øˆ	à—’˜HÑ%Ô%€JÝ�j¥$Ñ'Ô'ð Øˆ	à�~Š~˜oÑ.Ô.€HØð Øˆ	Ý�(�CÑ Ô ð Ø�:ˆÝ�h¥Ñ%Ô%ð Øˆ	å!Ñ#Ô#×+Ò+Ñ-Ô-€LÝ‘e”e€DØ€Fàð Pð PˆÝ�E‘
”
× Ò Ñ"Ô"ˆØð 	Øå”7×%Ò%¥b¤g×&8Ò&8¸Ñ&?Ô&?Ñ@Ô@ˆÝ�‰NŒN×"Ò"Ñ$Ô$ˆØ�ÒÐØØ�ˆ9ˆ9ØØ�8Š8‰:Œ:ð 	PØ�HŠH�Q‰KŒKˆKØ�MŠM˜!ÑÔÐÐå�LŠLÐKÈQÑOÔOÐOÐOà€Ms   ¦#A
 Á
AÁAc                  óf   — t          ¦   «         g} |                      t          ¦   «         ¦  «         | S )uî   Return all skill directories: local ``~/.hermes/skills/`` first, then external.

    The local dir is always first (and always included even if it doesn't exist
    yet â€” callers handle that).  External dirs follow in config order.
    )r   Úextendru   )Údirss    r   Úget_all_skills_dirsry   ã   s0   € õ ÑÔÐ€DØ‡K‚KÕ(Ñ*Ô*Ñ+Ô+Ð+Ø€Kr   c                 ód  — |                       d¦  «        }t          |t          ¦  «        si }|                      d¦  «        pi }t          |t          ¦  «        si }|                      dg ¦  «        |                      dg ¦  «        |                      dg ¦  «        |                      dg ¦  «        dœS )z>Extract conditional activation fields from parsed frontmatter.ÚmetadataÚhermesÚfallback_for_toolsetsÚrequires_toolsetsÚfallback_for_toolsÚrequires_tools)r}   r~   r   r€   )r<   r-   r.   )r2   r{   r|   s      r   Úextract_skill_conditionsr�   ñ   s®   € à�Š˜zÑ*Ô*€Hå�h¥Ñ%Ô%ð ØˆØ�\Š\˜(Ñ#Ô#Ð) r€FÝ�f�dÑ#Ô#ð Øˆà!'§¢Ð,CÀRÑ!HÔ!HØ#ŸZšZÐ(;¸RÑ@Ô@Ø$ŸjšjÐ)=¸rÑBÔBØ Ÿ*š*Ð%5°rÑ:Ô:ð	ð ð r   c                 óÔ  — |                       d¦  «        }t          |t          ¦  «        sg S |                      d¦  «        }t          |t          ¦  «        sg S |                      d¦  «        }|sg S t          |t          ¦  «        r|g}t          |t          ¦  «        sg S g }t	          ¦   «         }|D �]3}t          |t          ¦  «        sŒt          |                      dd¦  «        ¦  «                             ¦   «         }|r||v rŒUt          |                      dd¦  «        ¦  «                             ¦   «         }|sŒ�||dœ}	|                      d¦  «        }
|
�|
|	d<   |                      d
¦  «        }t          |t
          ¦  «        r,|                     ¦   «         r|                     ¦   «         |	d
<   n||	d
<   |                     |¦  «         |                     |	¦  «         �Œ5|S )a   Extract config variable declarations from parsed frontmatter.

    Skills declare config.yaml settings they need via::

        metadata:
          hermes:
            config:
              - key: wiki.path
                description: Path to the LLM Wiki knowledge base directory
                default: "~/wiki"
                prompt: Wiki directory path

    Returns a list of dicts with keys: ``key``, ``description``, ``default``,
    ``prompt``.  Invalid or incomplete entries are silently skipped.
    r{   r|   Úconfigr8   Ú Údescription)r8   r…   ÚdefaultNÚprompt)	r<   r-   r.   r=   rQ   r    r0   rl   rm   )r2   r{   r|   Úrawrq   rp   Úitemr8   Údescrr   r†   Úprompt_texts               r   Úextract_skill_config_varsrŒ     sô  € ð  �Š˜zÑ*Ô*€HÝ�h¥Ñ%Ô%ð Øˆ	Ø�\Š\˜(Ñ#Ô#€FÝ�f�dÑ#Ô#ð Øˆ	Ø
�*Š*�XÑ
Ô
€CØð Øˆ	Ý�#•tÑÔð ØˆeˆÝ�c�4Ñ Ô ð Øˆ	à#%€FÝ‘”€DØð ñ ˆÝ˜$¥Ñ%Ô%ð 	ØÝ�$—(’(˜5 "Ñ%Ô%Ñ&Ô&×,Ò,Ñ.Ô.ˆØð 	�c˜T�k�kØå�4—8’8˜M¨2Ñ.Ô.Ñ/Ô/×5Ò5Ñ7Ô7ˆØð 	ØàØð!
ð !
ˆð —(’(˜9Ñ%Ô%ˆØÐØ&ˆE�)ÑØ—h’h˜xÑ(Ô(ˆÝ�k¥3Ñ'Ô'ð 	#¨K×,=Ò,=Ñ,?Ô,?ð 	#Ø)×/Ò/Ñ1Ô1ˆE�(‰OˆOà"ˆE�(‰OØ�Š�‰ŒˆØ�Š�eÑÔÐÑØ€Mr   c                  ór  — g } t          ¦   «         }t          ¦   «         }t          ¦   «         D �]}|                     ¦   «         sŒt	          |d¦  «        D ]ß}	 |                     d¬¦  «        }t          |¦  «        \  }}n# t          $ r Y Œ8w xY w|                     d¦  «        p|j	        j
        }t          |¦  «        |v rŒot          |¦  «        sŒt          |¦  «        }	|	D ]N}
|
d         |vrBt          |¦  «        |
d<   |                      |
¦  «         |                     |
d         ¦  «         ŒOŒà�Œ
| S )aY  Scan all enabled skills and collect their config variable declarations.

    Walks every skills directory, parses each SKILL.md frontmatter, and returns
    a deduplicated list of config var dicts.  Each dict also includes a
    ``skill`` key with the skill name for attribution.

    Disabled and platform-incompatible skills are excluded.
    zSKILL.mdrG   rH   Únamer8   Úskill)rQ   r]   ry   rk   Úiter_skill_index_filesrR   r9   r/   r<   ÚparentrŽ   r    rE   rŒ   rm   rl   )Úall_varsÚ	seen_keysrO   Ú
skills_dirÚ
skill_filerˆ   r2   Ú_Ú
skill_nameÚconfig_varsÚvars              r   Údiscover_all_skill_config_varsrš   @  si  € ð &(€HÝ‘U”U€Iå'Ñ)Ô)€HÝ)Ñ+Ô+ð .ñ .ˆ
Ø× Ò Ñ"Ô"ð 	ØÝ0°¸ZÑHÔHð 	.ð 	.ˆJðØ ×*Ò*°GÐ*Ñ<Ô<�Ý!2°3Ñ!7Ô!7‘�˜Q˜QøÝð ð ð Ø�ðøøøð %Ÿš¨Ñ0Ô0ÐJ°JÔ4EÔ4JˆJÝ�:‰Œ (Ð*Ð*ØÝ)¨+Ñ6Ô6ð Øå3°KÑ@Ô@ˆKØ"ð .ð .�Ø�u”: YÐ.Ð.Ý#& z¡?¤?�C˜‘LØ—O’O CÑ(Ô(Ð(Ø—M’M # e¤*Ñ-Ô-Ð-øð	.ñ	.ð( €Os   Á(BÂ
BÂBzskills.configrƒ   Ú
dotted_keyc                 ó†   — |                      d¦  «        }| }|D ]&}t          |t          ¦  «        r||v r	||         }Œ$ dS |S )zPWalk a nested dict following a dotted key.  Returns None if any part is missing.ú.N)r1   r-   r.   )rƒ   r›   ÚpartsrB   Úparts        r   Ú_resolve_dotpathr    m  sZ   € à×Ò˜SÑ!Ô!€EØ€GØð ð ˆÝ�g�tÑ$Ô$ð 	¨°¨¨Ø˜d”mˆGˆGà�4�4Ø€Nr   r˜   c                 óz  — t          ¦   «         }i }|                     ¦   «         rL	 t          |                     d¬¦  «        ¦  «        }t	          |t
          ¦  «        r|}n# t          $ r Y nw xY wi }| D ]Å}|d         }t          › d|› �}t          ||¦  «        }|�)t	          |t          ¦  «        r*| 
                    ¦   «         s|                     dd¦  «        }t	          |t          ¦  «        rDd|v sd	|v r<t          j                             t          j                             |¦  «        ¦  «        }|||<   ŒÆ|S )
aV  Resolve current values for skill config vars from config.yaml.

    Skill config is stored under ``skills.config.<key>`` in config.yaml.
    Returns a dict mapping **logical** keys (as declared by skills) to their
    current values (or the declared default if the key isn't set).
    Path values are expanded via ``os.path.expanduser``.
    rG   rH   r8   r�   Nr†   r„   Ú~z${)r
   rP   r!   rR   r-   r.   r/   ÚSKILL_CONFIG_PREFIXr    r    r0   r<   rV   rh   ri   rj   )	r˜   rY   rƒ   r6   Úresolvedr™   Úlogical_keyÚstorage_keyr   s	            r   Úresolve_skill_config_valuesr§   y  sR  € õ "Ñ#Ô#€KØ€FØ×ÒÑÔð ð	Ý˜{×4Ò4¸gÐ4ÑFÔFÑGÔGˆFÝ˜&¥$Ñ'Ô'ð  Ø�øøÝð 	ð 	ð 	ØˆDð	øøøð  "€HØð &ð &ˆØ˜%”jˆÝ,Ð<Ð<¨{Ð<Ð<ˆÝ  ¨Ñ5Ô5ˆàˆ=�Z¨­sÑ3Ô3ˆ=¸E¿KºK¹M¼Mˆ=Ø—G’G˜I rÑ*Ô*ˆEõ �e�SÑ!Ô!ð 	B s¨e | |°t¸u°}°}Ý”G×&Ò&¥r¤w×'9Ò'9¸%Ñ'@Ô'@ÑAÔAˆEà %ˆ�ÑÐà€Os   ¦:A! Á!
A.Á-A.c                 óâ   — |                       dd¦  «        }|sdS t          |¦  «                             ¦   «                              d¦  «        }t          |¦  «        dk    r|dd…         dz   S |S )z8Extract a truncated description from parsed frontmatter.r…   r„   z'"é<   Né9   z...)r<   r    r0   Úlen)r2   Úraw_descrŠ   s      r   Úextract_skill_descriptionr­   ¢  sn   € à�Š˜}¨bÑ1Ô1€HØð ØˆrÝˆx‰=Œ=×ÒÑ Ô ×&Ò& uÑ-Ô-€DÝ
ˆ4�y„y�2‚~€~Ø�C�R�CŒy˜5Ñ Ð Ø€Kr   r”   Úfilenamec              #   óô   ‡ K  — g }t          j        ‰ d¬¦  «        D ]@\  }}}d„ |D ¦   «         |dd…<   ||v r%|                     t          |¦  «        |z  ¦  «         ŒAt	          |ˆ fd„¬¦  «        D ]}|V — ŒdS )zzWalk skills_dir yielding sorted paths matching *filename*.

    Excludes ``.git``, ``.github``, ``.hub`` directories.
    T)Úfollowlinksc                 ó$   — g | ]}|t           v¯|‘ŒS r`   )ÚEXCLUDED_SKILL_DIRS)ra   Úds     r   ú
<listcomp>z*iter_skill_index_files.<locals>.<listcomp>·  s#   € ÐCÐCÐC˜ aÕ/BÐ&BÐ&B�1Ð&BÐ&BÐ&Br   Nc                 óH   •— t          |                      ‰¦  «        ¦  «        S ©N)r    Úrelative_to)rt   r”   s    €r   ú<lambda>z(iter_skill_index_files.<locals>.<lambda>º  s   ø€ ­c°!·-²-À
Ñ2KÔ2KÑ.LÔ.L€ r   )r8   )rV   Úwalkrm   r   Úsorted)r”   r®   ÚmatchesÚrootrx   Úfilesrh   s   `      r   r�   r�   °  s²   øè è € ð
 €GÝœW Z¸TÐBÑBÔBð 2ð 2Ñˆˆd�EØCÐC˜dÐCÑCÔCˆˆQˆQˆQ‰Ø�uÐÐØ�NŠN�4 ™:œ:¨Ñ0Ñ1Ô1Ð1øÝ�wÐ$LÐ$LÐ$LÐ$LÐMÑMÔMð ð ˆØˆ
ˆ
ˆ
ˆ
ðð r   z^[a-zA-Z0-9_-]+$rŽ   c                 óX   — d| vrd| fS t          |                      dd¦  «        ¦  «        S )z~Split ``'namespace:skill-name'`` into ``(namespace, bare_name)``.

    Returns ``(None, name)`` when there is no ``':'``.
    r&   Nr'   )Útupler1   )rŽ   s    r   Úparse_qualified_namerÀ   Ã  s3   € ð
 �$€€Ø�TˆzÐÝ�—’˜C Ñ#Ô#Ñ$Ô$Ð$r   Ú	candidatec                 óX   — | sdS t          t                               | ¦  «        ¦  «        S )zDCheck whether *candidate* is a valid namespace (``[a-zA-Z0-9_-]+``).F)ÚboolÚ_NAMESPACE_REÚmatch)rÁ   s    r   Úis_valid_namespacerÆ   Í  s+   € àð ØˆuÝ•×#Ò# IÑ.Ô.Ñ/Ô/Ð/r   r¶   )-Ú__doc__ÚloggingrV   r)   r>   Úpathlibr   Útypingr   r   r   r   r   r	   Úhermes_constantsr
   r   Ú	getLoggerÚ__name__rS   rA   Ú	frozensetr²   r   r    r!   r9   rÃ   rE   r]   rX   ru   ry   r�   rŒ   rš   r£   r    r§   r­   r�   ÚcompilerÄ   rÀ   rÆ   r`   r   r   ú<module>rÐ      s™  ððð ð €€€Ø 	€	€	€	Ø 	€	€	€	Ø 
€
€
€
Ø Ð Ð Ð Ð Ð Ø 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8à <Ð <Ð <Ð <Ð <Ð <Ð <Ð <à	ˆÔ	˜8Ñ	$Ô	$€ð
 ØØðð €ð  �iÐ ;Ñ<Ô<Ð ð €ð"�sð "ð "ð "ð "ð$"˜sð " u¨T°#°s°(¬^¸SÐ-@Ô'Að "ð "ð "ð "ðP¨¨S°#¨X¬ð ¸4ð ð ð ð ð:'=ð '= s¨T¡zð '=¸SÀ¼Xð '=ð '=ð '=ð '=ðT> S¨¤Xð >ð >ð >ð >ð2 $ t¤*ð 2ð 2ð 2ð 2ðj˜T $œZð ð ð ð ð¨$¨s°C¨x¬.ð ¸TÀ#ÀtÀ)¼_ð ð ð ð ð(8¨4°°S°¬>ð 8¸dÀ4ÈÈSÈÄ>Ô>Rð 8ð 8ð 8ð 8ðv$¨¨T°#°s°(¬^Ô(<ð $ð $ð $ð $ðT &Ð ð	˜T # s (œ^ð 	¸ð 	ð 	ð 	ð 	ð#Ø�d˜3 ˜8”nÔ%ð#à	ˆ#ˆsˆ(„^ð#ð #ð #ð #ðR¨4°°S°¬>ð ¸cð ð ð ð ð tð °sð ð ð ð ð  �”
Ð.Ñ/Ô/€ð%˜sð % u¨X°c¬]¸CÐ-?Ô'@ð %ð %ð %ð %ð0 (¨3¤-ð 0°Dð 0ð 0ð 0ð 0ð 0ð 0r   