+
    lHàjÀb  ã                  óT  a € 0 t $ ^ RIHt ^ RIt^ RIt^ RIt^ RIHtHtH	t	H
t
HtHt ^ RIHtHtHtHt ^ RIHtHt ^ RIHtHt ^ RIHtHtHtHt ^ RIHtHt ^ R	I H!t!H"t"H#t#H$t$ ^ R
I%H&t& ]PN                  ! ](4      t)Rt*Rt+Rt,R]PZ                  ]P\                  3R]P^                  ]P\                  3R]P^                  ]P\                  3R]P^                  ]P\                  3R]P`                  ]Pb                  3/t2R]3R&   Rt4Rt5Rt6Rt7Rt8R]6RR/R R llt9R R lt:R R  lt;R! R" lt<R#R/R$ R% llt=R& R' lt>R( R) lt?R* R+ lt@R, R- ltAR. R/ ltBR0 R1 ltCR2 R3 ltDR4 R5 ltER6 R7 ltFR8 R9 ltGR: R; ltHR< R= ltIR> R? ltJR@ RA ltKRB RC ltLRD RE ltMRFRRGRRHRRIRRJRRKRRLRM/RN RO lltNR# )Pé    )ÚannotationsN)ÚAnyÚCallableÚDictÚListÚOptionalÚTuple)ÚActorÚSettleReasonÚTargetStateÚallowed)Úensure_guest_identityÚoperation_session_key)ÚRateLimitedÚToolGatewayError)ÚConnectionOperationÚDetachedOperationÚIllegalTransitionÚTarget)ÚKindÚrun_operation)ÚHostedTargetÚcatalog_namesÚhosted_namesÚmisrouted_to_hosted_error)Ú
tool_errorg      ð?g      $@ÚactiveÚfailedÚrevokedÚinactiveÚexpiredz$dict[str, tuple[TargetState, Actor]]Ú_ACCOUNT_OUTCOMEuU  Settled once. connected â†’ use the app now; skipped â†’ the user chose Not now, do not connect it or route around it; not_connected â†’ ask the user what to do, never re-mint on your own. A later request from the USER for that same app is not a re-ask â€” run it. If you named an account, tell the user its name and that they can rename it.ÚGUEST_SETUP_FAILEDÚ
agent_toolÚdesktop_pageÚ
card_retryÚ	initiatorÚcallc               ó$   € V ^8„  d   QhRRRRRR/# )é   Úcreates_guestÚboolr'   úOptional[str]r(   zOptional[Any]© )Úformats   "Ú=/home/ubuntu/.hermes/hermes-agent/tools/connectors/managed.pyÚ__annotate__r1   6   s"   € ÷ 
;ñ 
; Tð 
;°mð 
;ÐXeñ 
;ó    c                ó~   € ^ RI Hp ^ RIHp V '       d"   \	        4       ;p'       d   V! V\
        RR7      hV! WR7      # )a5  The real gateway client for a user action. ``creates_guest`` is the caller's declaration that
it may create the guest identity when the user has none (a connect, an explicit list); a page
read passes False and holds a token already. ``initiator`` names who asked, so every link the
client mints is attributed.)ÚConnectorClient)r   T)ÚcodeÚ	retryable)r'   r(   )Útools.connectors.gateway.clientr4   Útools.connectors.gateway.errorsr   r   r#   )r+   r'   r(   r4   r   Úsetup_errors   $$$   r0   Úmanaged_clientr:   6   s7   € õ
 @Ý@çÔ)>Ó)@Ð@˜+Ö@Ù˜{Ô1CÈtÔTÐTÙ YÔ:Ð:r2   c               ó(   € V ^8„  d   QhRRRRRRRR/# )	r*   Úclientr   ÚactionÚstrÚforcer,   Úreturnr   r.   )r/   s   "r0   r1   r1   C   s.   € ÷ 
Zñ 
Z˜ð 
Z cð 
Z°$ð 
Z¸4ñ 
Zr2   c           	     ó„   a a€ \        4       oR  V3R llp\        V! \        S W4      4      V! V 3R l4      \        R7      # )c               ó    € V ^8„  d   QhRRRR/# )r*   Ústepú%Callable[[ConnectionOperation], None]r@   r.   )r/   s   "r0   r1   Ú"managed_kind.<locals>.__annotate__F   s   € ÷ ñ Ð:ð Ð?dñ r2   c                ó   <a € R  VV 3R llpV# )c               ó    € V ^8„  d   QhRRRR/# ©r*   Ú	operationr   r@   ÚNoner.   )r/   s   "r0   r1   Ú2managed_kind.<locals>.noting.<locals>.__annotate__G   s   € ÷ 	.ñ 	.Ð.ð 	.°4ñ 	.r2   c                ó0   <€ S! V 4       \        V S4       R # ©N)Ú_note_connected)rI   ÚnotedrC   s   &€€r0   ÚrunÚ)managed_kind.<locals>.noting.<locals>.runG   s   ø€ Ù�ŒOÜ˜I uÖ-r2   r.   )rC   rP   rO   s   f €r0   ÚnotingÚmanaged_kind.<locals>.notingF   s   ù€ ÷	.ñ 	.ð ˆ
r2   c                ó   <€ \        SV 4      # rM   )Ú_observe)rI   r<   s   &€r0   Ú<lambda>Úmanaged_kind.<locals>.<lambda>M   s   ø€ ´¸&À)Ô1Lr2   )ÚprepareÚobserveÚnote)Úsetr   Ú_prepareÚNOTE)r<   r=   r?   rR   rO   s   f&& @r0   Úmanaged_kindr^   C   s?   ù€ Ü“e€E÷ð ô ™œx¨°Ó>Ó?ÙÔLÓMÔTXôZð Zr2   c               ó$   € V ^8„  d   QhRRRRRR/# )r*   rI   r   rO   úset[str]r@   rJ   r.   )r/   s   "r0   r1   r1   P   s"   € ÷ ñ Ð2ð ¸8ð Èñ r2   c                óú   € V P                    Uu0 uF/  q"P                  \        P                  8X  g   K#  VP                  kK1  	  upV,
          pV'       d!   ^ RIHp VP                  V4       V! 4        R# R# u upi )zFEach app that connects counts once toward the connector sign-in offer.)Únote_app_connectedN)ÚtargetsÚstater   Ú	connectedÚnameÚhermes_cli.free_tier_offerrb   Úupdate)rI   rO   ÚtÚfreshrb   s   &&   r0   rN   rN   P   s\   € à&×.Ò.ÓSÑ.˜·'±'¼[×=RÑ=RÑ2RŒVˆQ�VŒVÑ.ÑSÐV[Õ[€EßÝAà�‰�UÔÙÖñ	 ùò Ts
   � A8´A8c               ó    € V ^8„  d   QhRRRR/# )r*   r<   r   r@   zdict[str, dict[str, Any]]r.   )r/   s   "r0   r1   r1   Z   s   € ÷ mñ m˜Cð mÐ$=ñ mr2   c           	     óÌ   € V P                  4        Uu/ uFE  p\        V\        4      '       g   K  \        VP	                  RR4      4      P                  4       VbKG  	  up# u upi )z¢The toolkit list, by slug. Only the reconnect repair check reads it: it answers "is this app
already connected" before any account exists for the watcher to read.Ú	connectorÚ )Úlist_connectorsÚ
isinstanceÚdictr>   ÚgetÚlower)r<   Úis   & r0   Ú_status_by_slugru   Z   sU   € ð =C×<RÑ<RÔ<TÓlÑ<T°qÔXbÐcdÔfj×XkÔ2ŒC�—‘�k 2Ó&Ó'×-Ñ-Ó/°Ò2Ñ<TÑlÐlùÒls
   “A!°.A!Úconnection_idc               ó4   € V ^8„  d   QhRRRRRRRRR	R
RRRR/# )r*   r<   r   rI   r   Únamesú	list[str]Ú
reinitiater,   Úactorr
   rv   r-   r@   rJ   r.   )r/   s   "r0   r1   r1   `   sK   € ÷ 5añ 5a�ð 5aÐ!4ð 5a¸Yð 5aÐW[ð 5aÐdið 5aØ%ð5aØ15ñ5ar2   c          
     ó²  a€ ^ RI Hp S'       g   R# \        V3R lVP                   4       R4      pV'       dA   Vf=   \        V3R lVP                   4       R4      pT;'       g    Ve   VP                  MRpV'       g   Vf   RMVP
                  p	V P                  ! S3RVRV	RV/V! VP                  R7      B p
V
P                  R	. 4       EF‚  p\        VP                  R
4      ;'       g    R4      P                  4       pVP                  V4      pVf   KM  \        VP                  R4      ;'       g    R4      p\        VP                  R4      ;'       g    R4      pVR9  d/   T;'       g%    \        VP                  R4      ;'       g    R4      pVP                  R4      pVR8X  dV   VP                  V\        P                  V4       VP                  V\        P                  \         P"                  VR7       EK7  VR8X  dV   V'       g   \$        P'                  RV4       VP                  V\        P                  VVP                  R4      VVR7       EK“  VP(                  \        P*                  8X  d   VP-                  VRVR7       EKÉ  VP(                  \        P.                  8X  dj   VP                  V\        P                  V4       VP                  V\        P*                  \         P"                  VR7       VP-                  VRVR7       EKQ  VP                  V\        P*                  \         P"                  VR7       EK…  	  R# )aÿ  Mint links for ``names`` and apply the gateway's per-app answer to the operation. ``actor`` is
the watcher on the first mint and the user on Try again. The operation id rides along so the
vendor's done page can name it on the way back to the desktop. ``connection_id`` names the one
existing account a repair restarts; the gateway then needs no alias to find it. A repair without
one (Try again) reuses the account the named target already minted, so a rename in between
cannot point the retry at another login.)Úreturn_to_argsNc              3  ót   <"  € T F-  qP                   S9   g   K  VP                  '       g   K)  Vx € K/  	  R # 5irM   )rf   Úalias©Ú.0ri   rx   s   & €r0   Ú	<genexpr>Úmint.<locals>.<genexpr>m   s%   øé € ÐNÑ.˜·&±&¸E±/”!ÀaÇgÅg—!’!Ó.ùs   ƒ8š8®
8c              3  óˆ   <"  € T F7  qP                   S9   g   K  VP                  '       g   K)  VP                  x € K9  	  R # 5irM   )rf   Ú	repair_idr€   s   & €r0   r‚   rƒ   o   s,   øé € ÐcÑ.?¨Ç6Á6ÈUÁ?œÐWX×WbÕWbœ˜ŸžÓ.?ùs   ƒAšA®Arz   r   rv   )ÚopÚresultsrm   rn   ÚstatusÚstatus_reasonr   Ú	initiatedÚinstruction)rv   zuconnector %s: the mint named no account, so the watcher cannot read it; only the card or the deadline can end the rowÚconnect_url)rŒ   rv   Údetail)rŒ   r�   ©r�   )r   rŠ   )r7   r}   Únextrc   rv   r   ÚconnectionsÚop_idrr   r>   rs   ÚtargetÚ
transitionr   rŠ   re   r
   Úbackend_watcherÚloggerÚwarningrd   r   Úrefreshr!   )r<   rI   rx   rz   r{   rv   r}   ÚnamedÚrepairedr   ÚresponseÚentryrf   r’   rˆ   r�   s   &&f$$$          r0   Úmintrœ   `   s¼  ø€ õ ?çÙäÔN˜Y×.Ò.ÓNÐPTÓU€Eß�mÒ+ÜÔc¨i×.?Ò.?ÓcÐeiÓjˆØ ×XÐX¸EÒ<M U×%8Ò%8ÐSWˆß! U¢]‰D¸¿¹€EØ×!Ò! %ñ H°Jð HÀeð HÐ[hð HÙ$2°i·o±oÔ$FñH€Hà—‘˜i¨×,ˆÜ�5—9‘9˜[Ó)×/Ð/¨RÓ0×6Ñ6Ó8ˆØ×!Ñ! $Ó'ˆØŠ>ÙÜ�U—Y‘Y˜xÓ(×.Ð.¨BÓ/ˆÜ�U—Y‘Y˜Ó/×5Ð5°2Ó6ˆØÐ0Ô0à×BÐBœs 5§9¡9¨]Ó#;×#AÐ#A¸rÓBˆFØŸ	™	 /Ó2ˆØ�XÔØ× Ñ  ¤{×'<Ñ'<¸eÔDØ× Ñ  ¤{×'<Ñ'<¼e×>SÑ>SÐcpÐ ×qØ�{Ô"ß Ü—‘ð  OØPTôVà× Ñ Ø”k×+Ñ+¨UØ!ŸI™I mÓ4ÀMØð !÷ ð
 �\‰\œ[×/Ñ/Ô/à×Ñ˜d°¸VÐ×DØ�\‰\œ[×0Ñ0Ô0à× Ñ  ¤{×'<Ñ'<¸eÔDØ× Ñ  ¤{×'9Ñ'9¼5×;PÑ;PÐY_Ð Ô`Ø×Ñ˜d°¸VÐ×Dð × Ñ  ¤{×'9Ñ'9¼5×;PÑ;PÐY_Ð ×`óC -r2   c               ó(   € V ^8„  d   QhRRRRRRRR/# )	r*   r<   r   r’   r   ÚtimeoutÚfloatr@   zOptional[dict[str, Any]]r.   )r/   s   "r0   r1   r1   ˜   s)   € ÷ ñ ˜ð  Vð ¸ð ÐC[ñ r2   c               ó8  € VP                   '       d%   \        P                  ! 4       VP                  8  d   R#  V P                  VP                   VR7      #   \         d    h \
         d-   p\        P                  RTP                  T4        Rp?R# Rp?ii ; i)ub  The one route the watcher reads: that target's own account row. ``None`` means "nothing to
apply this tick" â€” no account to read, a rate-limit still in force, an account the gateway does
not know yet (404 until the deadline), or a read that failed. A 429 is raised to the tick: its
budget is the principal's, so it is not this one target's to wait out.N©rž   z(connector account read failed for %s: %s)	rv   ÚtimeÚnext_read_atÚaccount_statusr   Ú	Exceptionr•   r–   rf   )r<   r’   rž   Úexcs   &&$ r0   Ú_status_forr§   ˜   s{   € ð
 ××Ð¤4§9¢9£;°×1DÑ1DÔ#DÙðØ×$Ñ$ V×%9Ñ%9À7Ð$ÓKÐKøÜô ØÜô Ü�‰ÐAÀ6Ç;Á;ÐPSÔTÝûðús   ºA ÁBÁ,BÁ-!BÂBc          
     ó,   € V ^8„  d   QhRRRRRRRRRR	/# )
r*   rI   r   r’   r   rˆ   r>   Úreasonr@   rJ   r.   )r/   s   "r0   r1   r1   ¨   s9   € ÷ nñ nÐ.ð n¸ð nÈð nÐUXð nÐ]añ nr2   c                ó8  € \         P                  V4      pVf   R# Vw  rV \        VP                  VP                  V4      f:   V P                  VP                  \        P                  \        P                  4       T P                  VP                  YVT;'       g    VP                  R7       R#   \         d^    T P                  '       g   \        T4      '       d   h \        P!                  RTP                  Y!P                  P"                  4        R# i ; i)u~  Apply one account read to one target. The RPC thread can move the row while the read is in
flight â€” a Skip resolves it, a Continue freezes the whole result â€” and the read then has no
live row to move: it is dropped, not raised into the tool result (that would end the watch
with the operation still open and no card to answer it). Any other refusal is a real
contract violation.NrŽ   z,connector %s: %s read dropped, the row is %s)r"   rr   r   Úkindrd   r“   rf   r   rŠ   r
   r”   r�   r   ÚsettledÚ_liver•   ÚdebugÚvalue)rI   r’   rˆ   r©   ÚoutcomeÚtor{   s   &&&&   r0   Ú_apply_readr²   ¨   sÑ   € ô ×"Ñ" 6Ó*€GØ‚ÙØ�I€BðnÜ�6—;‘; §¡¨bÓ1Ò9à× Ñ  §¡¬k×.CÑ.CÄU×EZÑEZÔ[Ø×Ñ˜VŸ[™[¨"¸F×<SÐ<SÀfÇmÁmÐÖTøÜô nØ× × Ð ¤U¨6§]¢]ØÜ�‰ÐCÀVÇ[Á[ÐRX×ZfÑZf×ZlÑZl×mðnús   ¡A;B1 ÂB1 Â1DÃADÄDc               ó    € V ^8„  d   QhRRRR/# )r*   r’   r   r@   r,   r.   )r/   s   "r0   r1   r1   ½   s   € ÷ Hñ H�&ð H˜Tñ Hr2   c                ó\   € V P                   \        P                  \        P                  39   # )z”Only a live attempt (pending, initiated) can be advanced by a gateway read; a failed or
expired link waits for the user, and a resolved row is done.)rd   r   ÚpendingrŠ   )r’   s   &r0   r­   r­   ½   s$   € ð �<‰<œK×/Ñ/´×1FÑ1FÐGÑGÐGr2   c               ó$   € V ^8„  d   QhRRRRRR/# )r*   rI   r   ÚuntilrŸ   r@   rJ   r.   )r/   s   "r0   r1   r1   Ã   s"   € ÷ (ñ (Ð(ð (°ð (¸4ñ (r2   c                ó^   € V P                    F  p\        V4      '       g   K  Wn        K  	  R# )zZA 429 is per principal, not per account: every live target waits out the same Retry-After.N)rc   r­   r£   )rI   r·   r’   s   && r0   Ú_parkr¹   Ã   s!   € à×#Ô#ˆÜ��=Œ=Ø"'Öó $r2   c               ó$   € V ^8„  d   QhRRRRRR/# ©r*   r<   r   rI   r   r@   rJ   r.   )r/   s   "r0   r1   r1   Ê   s'   € ÷ qñ q�Sð qÐ%8ð q¸Tñ qr2   c                óH  € VP                    FÇ  pVP                  '       g   \        V4      '       g   K(  \        \        \        \        VP                  4       4      4      p \        WVR7      pTf   Kh  \        Y\        TP                  R4      ;'       g    R4      P!                  4       \        TP                  R4      ;'       g    R4      4       KÉ  	  R#   \         d=   p\        T\        P                  ! 4       TP                  ,           4        Rp? R# Rp?ii ; i)z¤One account read per live target per tick, sequential: this is the only thread reading them.
A 429 ends the tick: the next read would spend the same refused budget.r¡   Nrˆ   rn   ÚstatusReason)rc   r¬   r­   ÚminÚ_MAX_READ_SECONDSÚmaxÚ_MIN_READ_SECONDSÚremaining_secondsr§   r   r¹   r¢   Úretry_afterr²   r>   rr   rs   )r<   rI   r’   rž   Úrowr¦   s   &&    r0   rU   rU   Ê   sØ   € ð ×#Ô#ˆà××Ð¤E¨&§M¢MÙÜÔ'¬Ô->À	×@[Ñ@[Ó@]Ó)^Ó_ˆð	Ü˜f°gÔ>ˆCð Š;ÙÜ�I¤s¨3¯7©7°8Ó+<×+BÐ+BÀÓ'C×'IÑ'IÓ'KÌSÐQT×QXÑQXÐYgÓQh×QnÐQnÐlnÓMoÖpó $øô ô 	Ü�)œTŸYšY›[¨3¯?©?Õ:Ô;Þûð	ús   Á"CÃD!Ã%0DÄD!c               ó    € V ^8„  d   QhRRRR/# rH   r.   )r/   s   "r0   r1   r1   Ü   s   € ÷ 4ñ 4Ð2ð 4°tñ 4r2   c           	     óÚ  € V P                    Uu. uF:  pVP                  \        P                  8X  g   K$  VP                  '       d   K8  VNK<  	  ppV'       g   R # \        4       pV Uu. uF  qP                  V9   g   K  VNK  	  ppV'       g   R # \        4       pVf   R # V Uu. uF  qP                  V9  g   K  VNK  	  ppV FC  pV P                  VP                  R \        P                  \        VP                  4      R7       KE  	  V'       dG   \        V4      \        V P                   4      8X  d"   V P                  \        P                  4       R # R # R # u upi u upi u upi )N©rŒ   r{   r�   )rc   rd   r   r   rv   r   rf   r   r—   r
   r”   r   ÚlenÚsettler   Úall_resolved)rI   ri   ÚunmintedÚcatalogÚ
candidatesÚhostedÚ	misroutedr’   s   &       r0   Ú_mark_misroutedrÐ   Ü   s(  € Ø$×,Ò,ó JÑ,�aØ—7‘7œk×0Ñ0Ñ0ô Ø9:¿½÷ �Ñ,€Hð JçÙÜ‹o€GÙ%Ó;™X˜¯©°7Ñ):—!�!™X€JÐ;ßÙÜ‹^€FØ‚~ÙÙ&Ó?™J�q¯&©&¸Ñ*>—�™J€IÐ?ÛˆØ×Ñ˜&Ÿ+™+°4¼u×?TÑ?TÜ!:¸6¿;¹;Ó!Gð 	ö 	Iñ ÷ ”S˜“^¤s¨9×+<Ñ+<Ó'=Ô=Ø×Ñœ×2Ñ2Ö3ñ >�yùòJùò
 <ùò @s(   �!EµEÁ	EÁ)E#Â E#Â&E(Â=E(c               ó$   € V ^8„  d   QhRRRRRR/# )r*   rf   r>   Úknownr`   r@   r.   )r/   s   "r0   r1   r1   ð   s&   € ÷ Uñ U˜ð U Hð U°ñ Ur2   c                óx   a € \        V 3R  lV 4       4      pV'       d   RS  RRP                  V4       2# RS  R2# )c              3  óH   <"  € T F  pSV9   g
   VS9   g   K  Vx € K  	  R # 5irM   r.   )r�   Úslugrf   s   & €r0   r‚   Ú _unknown_slug.<locals>.<genexpr>ñ   s   øé € ÐJ¡E˜D¨T°T¬\¸TÀT¹\—4’4£Eùs   ƒ"˜
"Ú'z' is not a connector slug; use z or z?' is not a connector slug; manage_connections status lists them)ÚsortedÚjoin)rf   rÒ   Úcloses   f& r0   Ú_unknown_slugrÛ   ð   sD   ø€ ÜÔJ¡EÓJÓJ€EßØ�4�&Ð7¸¿¹ÀEÓ8JÐ7KÐLÐLØˆtˆfÐSÐTÐTr2   c               ó$   € V ^8„  d   QhRRRRRR/# r»   r.   )r/   s   "r0   r1   r1   ÷   s"   € ÷ 4ñ 4˜#ð 4Ð*=ð 4À$ñ 4r2   c           
     óÔ  € VP                    Uu. uF9  q"P                  \        P                  8X  g   K#  VP                  '       d   K7  VNK;  	  ppVP
                  '       g	   V'       g   R# \        4       pV Uu. uF  q"P                  V9  g   K  VNK  	  ppV'       g   R#  V P                  4        Uu0 uF,  p\        VP                  RR4      4      P                  4       kK.  	  ppT Uu. uF  q"P                  T9  g   K  TNK  	  ppT FD  p	TP                  T	P                  R\         P"                  \%        T	P                  T4      R7       KF  	  T'       dG   \'        T4      \'        TP                   4      8X  d"   TP)                  \*        P,                  4       R# R# R# u upi u upi u upi   \         d"   p\        P                  RT4        Rp?R# Rp?ii ; iu upi )z°The gateway refuses a slug it does not list as a policy block. The model guesses a slug from the
app's name (granola for granola_mcp), so the row names the listed slug instead.Nrm   rn   z.connector list for an unminted slug failed: %srÇ   )rc   rd   r   r   rv   r¬   r   rf   ro   r>   rr   rs   r   r•   r®   r—   r
   r”   rÛ   rÈ   rÉ   r   rÊ   )
r<   rI   ri   rË   rÌ   rt   rÒ   r¦   Úunknownr’   s
   &&        r0   Ú_mark_unknownrß   ÷   s€  € ð %×,Ò,ÓfÑ,�a·±¼;×;MÑ;MÑ0M”ÐVW×VeÕVe—�Ñ,€HÐfØ××Ð§ÙÜ‹o€GÙ#Ó=™8�a§v¡v°WÑ'<—�™8€HÐ=ßÙðØ>D×>TÑ>TÔ>VÓWÑ>V¸”�Q—U‘U˜;¨Ó+Ó,×2Ñ2Ö4Ñ>VˆÐWñ #Ó:™(�Q§f¡f°EÑ&9�qˆq™(€GÐ:ÛˆØ×Ñ˜&Ÿ+™+°4¼u×?TÑ?TÜ!.¨v¯{©{¸EÓ!Bð 	ö 	Dñ ÷ ”3�w“<¤3 y×'8Ñ'8Ó#9Ô9Ø×Ñœ×2Ñ2Ö3ñ :�wùò! gùò >ùò XøÜô Ü�‰ÐEÀsÔKÝûðüò ;sR   � F'´F'ÁF'Á:F,ÂF,Â$F6 Â62F1Ã(F6 Ã.G%ÄG%Æ1F6 Æ6G"ÇGÇG"c               ó(   € V ^8„  d   QhRRRRRRRR/# )	r*   r<   r   r=   r>   r?   r,   r@   rD   r.   )r/   s   "r0   r1   r1     s)   € ÷ %ñ %�Sð % #ð %¨dð %Ð7\ñ %r2   c                ó"   a aa€ R  VV V3R llpV# )c               ó    € V ^8„  d   QhRRRR/# rH   r.   )r/   s   "r0   r1   Ú_prepare.<locals>.__annotate__  s   € ÷ ")ñ ")Ð.ð ")°4ñ ")r2   c           	     ón  <a€ V P                    Uu. uF  qP                  NK  	  ppS	R 8X  d7   \        S
WR\        P                  R7       \        V 4       \        S
V 4       R# \        V P                   4      pS'       dc   \        R T;'       g    / P                  4        4       R4      p\        S
WR\        P                  VR7       \        V 4       \        S
V 4       R# T;'       g    \        S
4      o. pV Få  pV P                  V4      pVe6   VP                  '       d$   Yc;'       g    / 9  d   VP                  V4       KM  SP                  V/ 4      P                  R4      '       da   V P                  V\         P"                  \        P                  4       V P                  V\         P$                  \        P                  4       KÔ  VP                  V4       Kç  	  \        V3R lV 4       R4      p\        S
WR\        P                  VR7       \        V 4       \        S
V 4       R# u upi )	ÚconnectF)rz   r{   Nc              3  ód   "  € T F&  qP                  R 4      '       g   K  VR ,          x € K(  	  R# 5i©rv   N©rr   )r�   Úss   & r0   r‚   Ú,_prepare.<locals>.prepare.<locals>.<genexpr>  s)   é € ÐiÑ8N°1×RWÑRWÐXg×RhÔ.˜A˜o×.Ò.Ó8Nùs   ‚0Ÿ0T)rz   r{   rv   re   c              3  ó¦   <"  € T FF  pSP                  V/ 4      P                  R 4      '       g   K,  SV,          P                  R 4      x € KH  	  R# 5irç   rè   )r�   Únrˆ   s   & €r0   r‚   rê   .  s?   øé € ÐqÁ¸1È&Ï*É*ÐUVÐXZÓJ[×J_ÑJ_Ð`o×JpÔ6˜˜q�	Ÿ™ o×6Ð6Ãùs
   ƒ)A± A)rc   rf   rœ   r
   r”   rÐ   rß   Ú_alias_statusr�   Úvaluesru   r’   r…   Úappendrr   r“   r   rŠ   re   )rI   ri   rx   r˜   ÚaccountÚrepairrf   r’   rˆ   r=   r<   r?   s   &       @€€€r0   rX   Ú_prepare.<locals>.prepare  s¹  ù€ Ø!*×!2Ò!2Ó3Ñ!2˜A—”Ñ!2ˆÐ3Ø�YÔÜ�˜°eÄ5×CXÑCXÕYÜ˜IÔ&Ü˜& )Ô,Ùô ˜i×/Ñ/Ó0ˆßäÑi¸¿¸À"×8LÑ8LÔ8NÓiÐkoÓpˆGÜ�˜°dÄ%×BWÑBWÐgnÕoÜ˜IÔ&Ü˜& )Ô,ÙØ×1Ð1œ/¨&Ó1ˆØˆÛˆDØ×%Ñ% dÓ+ˆFØÒ! f×&6×&6Ð&6¸4ÏÈÐQSÔ;Tð —‘˜dÖ#Ø—‘˜D "Ó%×)Ñ)¨+×6Ò6Ø×$Ñ$ T¬;×+@Ñ+@Ä%×BWÑBWÔXØ×$Ñ$ T¬;×+@Ñ+@Ä%×BWÑBWÖXà—‘˜dÖ#ñ ô ÔqÁÓqÐswÓxˆÜˆV�Y°4¼u×?TÑ?TÐdkÕlÜ˜	Ô"Ü�f˜iÖ(ùòC 4s   ‘H2r.   )r<   r=   r?   rX   s   fff r0   r\   r\     s   ú€ ÷")ò ")ðH €Nr2   c               ó   € V ^8„  d   QhRR/# )r*   r@   zlist[dict[str, Any]]r.   )r/   s   "r0   r1   r1   6  s   € ÷ 3ñ 3Ð-ñ 3r2   c                 ó8   € ^ RI Hp  V ! 4       P                  4       # )r   ©ÚPortalConnectorClient)Útools.connectors.portal.clientrö   Úlist_accountsrõ   s    r0   Úportal_accountsrù   6  s   € ÝDá Ó"×0Ñ0Ó2Ð2r2   c               ó    € V ^8„  d   QhRRRR/# )r*   rc   úlist[Target]r@   z#Optional[dict[str, dict[str, Any]]]r.   )r/   s   "r0   r1   r1   <  s   € ÷ ñ ˜<ð Ð,Oñ r2   c                ó~  a€ V  Uu. uF  qP                   '       g   K  VNK  	  ppV'       g   R# \        4       p/ pV Fñ  oV Uu. uF?  qUP                  R4      SP                  8X  g   K$  VP                  R4      '       d   K=  VNKA  	  pp\	        V3R lV 4       R4      pVf9   \	        V3R lV 4       R4      pVe   RVP                  R4      uSn         Sn        R\        V4      ;'       d    VP                  R4      R	8H  R
V'       d   VP                  R4      MR/VSP                  &   Kó  	  V# u upi u upi )aR  ``{slug: {"connected": bool, "connection_id": str | None}}`` for an aliased target, read from
that account's own row (``connection_id`` is None when no account has that name yet); ``None``
when no target is aliased. A failed read raises: guessing "not connected" would send the user
through a new login for an account that may be healthy.Nrm   Údisabledc              3  ój   <"  € T F(  qP                  R 4      SP                  8X  g   K$  Vx € K*  	  R# 5i)r   N©rr   r   ©r�   Úrri   s   & €r0   r‚   Ú _alias_status.<locals>.<genexpr>H  s$   øé € ÐA™t˜!§u¡u¨W£~¸¿¹Ñ'@—A’A›tùs   ƒ!3©
3c              3  óœ   <"  € T FA  qP                  R 4      '       d   K  VP                  R4      SP                  8X  g   K=  Vx € KC  	  R# 5i)r   ÚlabelNrÿ   r   s   & €r0   r‚   r  K  s3   øé € Ð\¡4˜a¯u©u°W¯~œÀ!Ç%Á%ÈÃ.ÐTU×T[ÑT[ÑB[Ÿš£4ùs   ƒA AÁ
AÚconnectionIdre   rˆ   r   rv   )r   rù   rr   rf   r�   r…   r,   )rc   ri   ÚaliasedÚrowsrˆ   r  ÚminerÄ   s   &`      r0   rí   rí   <  s  ø€ ñ
 "Ó-™'�Q§W¥W�qˆq™'€GÐ-ßÙÜÓ€DØ(*€FÛˆÙÓZ™4�a§5¡5¨Ó#5¸¿¹Ñ#?”ÈÏÉÈj×HY—�™4ˆÐZÜÔA™tÓAÀ4ÓHˆØŠ;äÔ\¡4Ó\Ð^bÓcˆCØŠØ'+¨S¯W©W°^Ó-DÐ$�”˜œØ%¤t¨C£y×'RÐ'R°S·W±W¸XÓ5FÈ(Ñ5RØ)Çc¨3¯7©7°>Ô+BÈtðUˆˆq�v‰v‹ñ ð €Mùò .ùò [s   †D5žD5Á!D:Á+D:ÂD:c               ó$   € V ^8„  d   QhRRRRRR/# )r*   rc   úlist[HostedTarget]r=   r>   r@   rû   r.   )r/   s   "r0   r1   r1   S  s'   € ÷ Qñ QÐ(ð Q°#ð Q¸,ñ Qr2   c           
     óp   € V  Uu. uF%  p\        VP                  R WP                  R7      NK'  	  up# u upi )rm   ©r   )r   rf   r   )rc   r=   ri   s   && r0   Ú_targetsr  S  s+   € ÙHOÓPÉÀ1ŒF�1—6‘6˜;¨·g±g×>ÉÑPÐPùÒPs   …+3c               ó0   € V ^8„  d   QhRRRRRRRRR	RR
R/# )r*   r<   r   r=   r>   rc   r
  r?   r,   Ú
session_idr@   r.   )r/   s   "r0   r1   r1   W  s:   € ÷ 3ñ 3˜Cð 3¨ð 3Ð7Ið 3ÐRVð 3Ðdgð 3Ðloñ 3r2   c                óø  € \        \        W!4      VR 7      p\        WV4      ! V4       VP                  RR7      p\        ;QJ d&    R VP
                   4       F  '       g   K   RM	  RM! R VP
                   4       4      '       d   RMRVR&   RVR	&   \        ;QJ d    R
 V 4       F  '       g   K   RM	  RM! R
 V 4       4      '       d   VR	;;,          R,          uu&   \        P                  ! VRR7      # ))Úsession_keyT)Ú	with_urlsc              3  óZ   "  € T F!  qP                   \        P                  8H  x € K#  	  R # 5irM   )rd   r   rŠ   ©r�   ri   s   & r0   r‚   Ú"_no_card_result.<locals>.<genexpr>[  s    é € Ð*gÑUfÐPQ¯7©7´k×6KÑ6KÖ+KÓUfùs   ‚)+FrŠ   r¬   rˆ   zÀShow each connect_url to the user; they open it in a browser to authorize. Ask them to tell you when they are done, then check with action 'status'. Do not call connect again for the same app.rZ   c              3  ó8   "  € T F  qP                   x € K  	  R # 5irM   r  r  s   & r0   r‚   r  `  s   é € Ð
$™G�q�7Ž7›Gùs   ‚zL You named this account: tell the user its name and that they can rename it.©Úensure_ascii)r   r  r\   ÚresultÚanyrc   ÚjsonÚdumps)r<   r=   rc   r?   r  rI   Úpayloads   &&&&&  r0   Ú_no_card_resultr  W  sÂ   € Ü!¤(¨7Ó";ÈÔT€IÜˆV˜UÔ# IÔ.Ø×Ñ¨ÐÓ.€Gß'*£sÑ*gÐU^×UfÒUfÓ*g§s§s¢sÑ*gÐU^×UfÒUfÓ*g×'gÒ'g™Ðmv€GˆHÑð	kð ˆF�O÷ ƒsÑ
$™GÓ
$‡s‡s‚sÑ
$™GÓ
$×$Ò$Ø��ÐiÕi‹Ü�:Š:�g¨EÔ2Ð2r2   c               ó$   € V ^8„  d   QhRRRRRR/# )r*   r<   r   Ú
connectorsry   r@   r>   r.   )r/   s   "r0   r1   r1   e  s!   € ÷ ñ ˜3ð ¨Ið ¸#ñ r2   c                ó˜  € V P                  4       p^ RIHp V! V4       V Uu0 uF,  p\        VP	                  RR4      4      P                  4       kK.  	  ppV Uu/ uF  qfV9  g   K  V\        We4      bK  	  ppV'       dM   \        V4      pV Uu. uF5  p\        VP	                  RR4      4      P                  4       V9   g   K3  VNK7  	  pp \        4       p	/ p
V	 F­  pRVP	                  R4      RVP	                  R4      RVP	                  R4      RVP	                  R4      /pVP	                  R4      '       d   R	VR
&   V
P                  \        VP	                  RR4      4      P                  4       . 4      P                  V4       K¯  	  V Uu. uFF  p\        WJP	                  \        VP	                  RR4      4      P                  4       . 4      R7      NKH  	  pp\        P                   ! RVRR/V'       d   RV/M/ CRR7      # u upi u upi u upi u upi   \         d!   p\        P                  RT4        Rp?LdRp?ii ; i)r   )Únote_connected_apps_seenrm   rn   r   r  rˆ   r   rý   TÚretired)Úaccountsz(connector accounts for status failed: %sNr   Úhinta@  connected=false means calls to that connector will return CONNECTION_REQUIRED. Use action 'connect' to start an authorization. 'accounts' lists each account by its name (alias) and the vendor's label; address an unnamed account by its label. A retired account was replaced by a reconnect and is kept only for the record.rÞ   Fr  )ro   rg   r"  r>   rr   rs   rÛ   r[   rù   Ú
setdefaultrï   rq   r   r•   r®   r  r  )r<   r   Úitemsr"  rt   rÒ   rf   rÞ   Úwantedr  Úby_slugrÄ   r›   r¦   s   &&            r0   Ú_status_resultr*  e  s  € Ø×"Ñ"Ó$€EÝCá˜UÔ#Ù:?Ó@¹%°QŒS�—‘�{ BÓ'Ó(×.Ñ.Ö0¹%€EÐ@Ù<FÓ\¹J°DÐV[ÑJ[Ô/ˆt”] 4Ó/Ò/¹J€GÐ\ßÜ�Z“ˆÙ!ÓS™E�q¤S¨¯©¨{¸BÓ)?Ó%@×%FÑ%FÓ%HÈFÑ%R—�™EˆÐSðhÜÓ ˆð
 46ˆÛˆCØ˜cŸg™g gÓ.°¸¿¹ÀÓ9IÈ8ÐUX×U\ÑU\Ð]eÓUfØ˜sŸw™w xÓ0ð2ˆEà�w‰w�z×"Ò"Ø#'��iÑ Ø×Ñœs 3§7¡7¨;¸Ó#;Ó<×BÑBÓDÀbÓI×PÑPÐQVÖWñ ñ bgÓgÑafÐ\]”�a§+¡+¬c°!·%±%¸ÀRÓ2HÓ.I×.OÑ.OÓ.QÐSUÓ"V×WÑafˆÐgÜ�:Š:�| U¨Fð	Cðr÷ ahÈÐT[ÑH\Ðmoð	rð
 ôð ùò' AùÚ\ùò Tùò høô ô Fä�‰Ð?À×EÑEûðFús<   £2H
ÁHÁ(HÂ0HÃHÃ
H ÆAHÈI	È)IÉI	c               ó4   € V ^8„  d   QhRRRRRRRRRR	R
RRR/# )r*   r<   r   Ú	suggestedry   r  r-   Útool_call_idÚconnection_callbackú3Optional[Callable[[dict[str, Any]], Optional[str]]]r(   r@   r>   r.   )r/   s   "r0   r1   r1   …  sJ   € ÷ Kñ K˜Cð K¨Ið KÀmð KÐcpð KØ)\ðKØdgðKØloñKr2   c          	     ó¼   € ^ RI HpHp Vf=   \        P                  ! / \        P
                  ! \        V . 4      4      CRV/CRR7      # V! W\        V4      VWER7      # )zSThe desktop card when one can draw; elsewhere the status list and where to connect.)ÚOFF_DESKTOP_NOTEÚrun_displayrZ   Fr  )r  r-  r.  r(   )Útools.connectors.displayr1  r2  r  r  Úloadsr*  r   )r<   r,  r  r-  r.  r(   r1  r2  s   &&$$$$  r0   Ú_display_resultr5  …  s]   € ÷ GàÒ"Ü�zŠzÐ^œTŸZšZ¬°v¸rÓ(BÓCÐ^ÀVÐM]Ñ^ÐmrÔsÐsÙ�vÔ6KÈJÓ6WÐfrØ+>ôKð Kr2   c               ó    € V ^8„  d   QhRRRR/# )r*   r’   r   r@   r>   r.   )r/   s   "r0   r1   r1   �  s   € ÷ ñ ˜<ð ¨Cñ r2   c                ó  € ^ RI HpHp ^ RIHp \        4        Uu. uF?  p\        VP                  RR4      4      P                  4       V P                  8X  g   K=  VNKA  	  ppV Uu. uF&  qDP                  R4      V P                  8X  g   K$  VNK(  	  up;'       gM    V Uu. uF?  qDP                  R4      '       d   K  VP                  R4      V P                  8X  g   K=  VNKA  	  upp\        V4      ^8w  d±   \        V Uu0 uF6  p\        VP                  R4      ;'       g    VP                  R4      4      kK8  	  up4      pV'       d   RRP                  V4       R	2MR
V P                   R2pV'       g   RMRp	\        V	 RV P                   RV P                  : RV 24      #  V! 4       P                  V^ ,          R,          V P                   4      p
\(        P*                  ! RRT
R,          RT
P                  R4      RT
R,          /RRT P                   RT P                  : RT P                   : R	2/R R!7      # u upi u upi u upi u upi   T d+    \        RT P                   : RT P                   R24      u # T dE   pTP"                  R8X  d   \        RT P                   R24      u Rp?# \        R4      u Rp?# Rp?i\$         d(   pTP&                  R8X  d   \        R4      u Rp?# h Rp?ii ; i)"zšRename the one account of ``target.name`` called ``target.alias`` (or, when unnamed, labelled
so) to ``target.to``. Synchronous: no operation and no card.)ÚGatewayUnavailableÚIdempotencyConflictrõ   rm   rn   r   r  zIts accounts are: z, Ú.zThe user has no z	 account.ÚNozMore than oneÚ z account is called z. r  z	The name z is already used by another z account. Pick another name.Úconnection_not_foundzThat z> account no longer exists. Use action status to list accounts.Nz6This Nous Portal cannot rename connector accounts yet.i•  ÚrenamedÚnoticezTell the user their z	 account z is now called Fr  )r8   r8  r9  r÷   rö   rù   r>   rr   rs   rf   r   rÈ   rØ   rÙ   r   Úrename_accountr±   r5   r   rˆ   r  r  )r’   r8  r9  rö   r  r  Úmatchesrx   ÚfoundÚwhatrð   r¦   s   &           r0   Ú_rename_resultrD  �  s¬  € ÷ XÝDä&Ô(Ó_Ñ(�!¬C°·±°kÀ2Ó0FÓ,G×,MÑ,MÓ,OÐSY×S^ÑS^Ñ,^�AˆAÑ(€DÐ_ÙÓA™$�Q§%¡%¨£.°F·L±LÑ"@�qˆq™$ÑA÷ Rð RÙóFRÙˆaŸu™u WŸ~Œ°!·%±%¸³.ÀFÇLÁLÑ2P�ˆ‘4ñFR€Gä
ˆ7ƒ|�qÔÜÁtÓLÁtÀ!œ˜AŸE™E '›N×<Ð<¨a¯e©e°G«nÖ=ÁtÑLÓMˆß<AÐ$ T§Y¡Y¨uÓ%5Ð$6°aÑ8ÐIYÐZ`×ZeÑZeÐYfÐfoÐGpˆß"‰t¨ˆÜ˜T˜F ! F§K¡K =Ð0CÀFÇLÁLÑCSÐSUÐV[ÐU\Ð]Ó^Ð^ðÙ'Ó)×8Ñ8¸À½ÀNÕ9SÐU[×U^ÑU^Ó_ˆô �:Š:Ø�K ¨Õ!5°wÀÇÁÈGÓ@TÐV]Ð_fÐgnÕ_oÐpØÐ(¨¯©¨°Y¸v¿|¹|Ñ>NÈoÐ^d×^gÑ^gÑ]jÐjkÐlðð ôð ùò) `ùÚAùò FRùò Møð ô zÜ˜I f§i¡i¡]Ð2NÈvÏ{É{ÈmÐ[wÐxÓyÒyØô TØ�8‰8Ð-Ô-Ü  f§k¡k ]Ð2pÐqÓrÕrÜÐRÓSÕSûÜô Ø�:‰:˜ÔÜÐVÓWÕWØûðús‰   ›:IÁIÁ&!IÂIÂ!IÂ>IÃ IÄ!IÄ$IÆ*/I É.L ÊL ÊL Ê)KÊ5L Ê;
KËL ËL ËL ËK;Ë4L Ë:K;Ë;L Úclient_factoryr  r-  Úturn_idr.  Úconnectors_availableÚcard_surfaceFc               óD   € V ^8„  d   QhRRRRRRRRR	R
RR
RR
RRRRRRRR/# )r*   r=   r>   rc   r
  Úargszdict[str, Any]rE  zOptional[Callable[[], Any]]r  r-   r-  rF  r.  r/  rG  zOptional[Callable[[], bool]]rH  r,   r@   r.   )r/   s   "r0   r1   r1   °  sw   € ÷ 1
ñ 1
Øð1
àð1
ð ð1
ð
 0ð1
ð ð1
ð  ð1
ð ð1
ð Mð1
ð 7ð1
ð ð1
ð 	ñ1
r2   c               óh  € ^ RI Hp
 Ve   V! 4       '       g   \        R4      #  V R8X  d   \        V^ ,          4      # V
! WeR7      pV'       d   V! 4       M\	        RVR7      pV R8X  d3   \        YÁ Uu. uF  qÝP                  NK  	  upYEV	'       d   TMRVR	7      # V R
8X  d%   \        YÁ Uu. uF  qÝP                  NK  	  up4      # V'       g   \        RV  R24      # \        VP                  RR4      4      p\        V4      pVf   \        WÀWV4      # \        \        W4      \        WÀV4      Wõ\        VRVR7      # u upi u upi   \          d`   p\"        P%                  RT T4       \'        TRR4      \(        8X  d   \        \+        T4      4      u Rp?# \        RT R24      u Rp?# Rp?ii ; i)r   )ÚCallRefNz-Connectors are not available in this session.Úrename)rF  r-  T)r+   r(   Údisplay)r  r-  r.  r(   rˆ   r×   zm' requires 'connectors': the connector slugs to authorize (e.g. ["gmail"]). Use action 'status' to list them.r?   F)r  r-  Útick_secondsr.  Úwith_urls_in_resultr(   z manage_connections %s failed: %sr5   z&The connector gateway request failed: zG. If this persists, the user can manage connections in the Nous Portal.)Útools.managed_gateway_identityrL  r   rD  r:   r5  rf   r*  r,   rr   r   r  r   r  r^   ÚWATCH_TICK_SECONDSr¥   r•   r–   Úgetattrr#   r>   )r=   rc   rJ  rE  r  r-  rF  r.  rG  rH  rL  r(   r<   ri   r?   r  r¦   s   &&&$$$$$$$       r0   Úrun_managed_actionrT  °  s²  € õ 7àÒ'Ñ0D×0FÒ0FÜÐIÓJÐJð 
Ø�XÔÜ! '¨!¥*Ó-Ð-Ù˜wÔBˆß%3‘Ô!¼ÐVZÐaeÔ9fˆØ�YÔÜ" 6¸GÓ+D¹G°q¯F¬F¹GÑ+DÐQ[ßNZÑ7JÐ`dÐkoôqð qà�XÔÜ! &¸7Ó*C¹7°a¯6¬6¹7Ñ*CÓDÐDßÜØ�F�8ð 4ð 4óð ô �T—X‘X˜g uÓ-Ó.ˆÜ+¨JÓ7ˆØÒ&Ü" 6°7À;ÓOÐOÜÜ�WÓ%Ü˜¨Ó/Ø#ÔM_Ø 3ÈÐUYô	
ð 	
ùò ,Eùò +Døô  ô 
Ü�‰Ð9¸6À3ÔGÜ�3˜ Ó%Ô);Ô;Üœc #›hÓ'Õ'ÜØ4°S°Eð :Tð Tó
õ 	
ûð	
úsk   ¤E ½5E Á2D=
ÂE ÂE Â+E
Â?E ÃE ÃE Ã6E Ä(E Ä=
E ÅF1ÅA F,ÆF1ÆF,Æ&F1Æ,F1)OÚ__conditional_annotations__Ú
__future__r   r  Úloggingr¢   Útypingr   r   r   r   r   r	   Útools.connectors.contractr
   r   r   r   Útools.connectors.gateway.configr   r   r8   r   r   Útools.connectors.operationr   r   r   r   Útools.connectors.runr   r   Útools.connectors.targetsr   r   r   r   Útools.registryr   Ú	getLoggerÚ__name__r•   rR  rÁ   r¿   re   r”   r   r!   Úclockr"   Ú__annotations__r]   r#   Ú
AGENT_TOOLÚDESKTOP_PAGEÚ
CARD_RETRYr:   r^   rN   ru   rœ   r§   r²   r­   r¹   rU   rÐ   rÛ   rß   r\   rù   rí   r  r  r*  r5  rD  rT  )rU  s   @r0   Ú<module>rf     sá  øðß "Ð "ã Û Û ß =× =ç OÓ Oß Xß Iß hÓ hß 4ß iÓ iÝ %à	×	Ò	˜8Ó	$€ð Ð ð Ð ØÐ ð
 ˆ{×$Ñ$ e×&;Ñ&;Ð<Øˆ{×!Ñ! 5×#8Ñ#8Ð9Ø�×"Ñ" E×$9Ñ$9Ð:Ø�×#Ñ# U×%:Ñ%:Ð;à�×#Ñ# U§[¡[Ð1ð:Ð Ð6ó ðSð ð *Ð ð €
Ø€Ø€
ð
;Àjð 
;Ðhl÷ 
;õ
Zõõmð5aØ(,÷5aõpõ nõ*Hõ(õqõ$4õ(Uõ4õ.%õP3õõ.Qõ3õõ@Kõð@1
ð
 37ð1
ð !%ð1
ð #'ð1
ð "ð1
ð PTð1
ð :>ð1
ð ÷1
ñ 1
r2   