+
    O×iÓ&  ã                   óâ   € ^ RI t ^ RIt^ RIt^ RIHtHtHt ^RIHtH	t	 ^RI
HtHtHt ]P                  ! ]4      t ! R R4      t ! R R4      t ! R	 R
]4      t ! R R4      t ! R R]4      tR# )é    N)ÚDictÚListÚOptional)Ú
JsonObjectÚ	JsonValue)ÚCockpitProblemÚCockpitProtocolErrorÚCockpitProtocolServerc                   óB   a € ] tR t^t o RtR tR tV 3R lR ltRtV t	R# )ÚExecutionQueuea_  Temporarily delay calls to a given set of class methods.

Functions by replacing the named function at the instance __dict__
level, effectively providing an override for exactly one instance
of `method`'s object.
Queues the invocations.  Run them later with .run(), which also reverses
the redirection by deleting the named methods from the instance.
c                óŽ   € \         P                  ! 4       V n        Wn        V P                   F  pV P	                  V4       K  	  R # ©N)ÚcollectionsÚdequeÚqueueÚmethodsÚ_wrap)Úselfr   Úmethods   && Ú0/usr/lib/python3/dist-packages/cockpit/router.pyÚ__init__ÚExecutionQueue.__init__   s1   € Ü ×&Ò&Ó(ˆŒ
ØŒà—l”lˆFØ�J‰J�vÖó #ó    c                ój   a a€ \        SP                  SP                  P                  VV 3R  l4       R# )c                  ó>   <€ SP                   P                  SV 34      # r   )r   Úappend)Úargsr   r   s   *€€r   Ú<lambda>Ú&ExecutionQueue._wrap.<locals>.<lambda>%   s   ø€ ÈÏÉ×IZÑIZÐ\bÐdhÐ[iÔIjr   N)ÚsetattrÚ__self__Ú__func__Ú__name__)r   r   s   ffr   r   ÚExecutionQueue._wrap!   s    ù€ ô 	�—‘ §¡×!9Ñ!9Õ;jÖkr   c                ó   <€ V ^8„  d   QhRR/# ©é   ÚreturnN© )ÚformatÚ__classdict__s   "€r   Ú__annotate__ÚExecutionQueue.__annotate__'   s   ø€ ÷ ?ñ ?�Tñ ?r   c                ó  € \         P                  R \        V P                  4      4       V P                   F  w  rV! V!   K  	  V P                   F-  p\        VP                  VP                  P                  4       K/  	  R# )z.ExecutionQueue: Running %d queued method callsN)	ÚloggerÚdebugÚlenr   r   Údelattrr!   r"   r#   )r   r   r   s   &  r   ÚrunÚExecutionQueue.run'   sX   € Ü�‰ÐEÄsÈ4Ï:É:ÃÔWØ ŸJœJ‰LˆFÙ�DŒMñ 'ð —l”lˆFÜ�F—O‘O V§_¡_×%=Ñ%=Ö>ó #r   )r   r   N)
r#   Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r   r   r3   Ú__static_attributes__Ú__classdictcell__©r+   s   @r   r   r      s   ø‡ € ñòòl÷?ö ?r   r   c                   óè   a € ] tR t^0t o RtV 3R lR ltV 3R lR ltV 3R lR ltV 3R lR	 ltV 3R
 lR lt	V 3R lR lt
V 3R lR ltV 3R lR ltV 3R lR ltRV 3R lR lltV 3R ltRtV tR# )ÚEndpointNc                ó   <€ V ^8„  d   QhRR/# ©r'   ÚrouterÚRouterr)   )r*   r+   s   "€r   r,   ÚEndpoint.__annotate__4   s   ø€ ÷ ñ ˜xñ r   c                ó4   € VP                  V 4       Wn        R # r   )Úadd_endpointr@   ©r   r@   s   &&r   r   ÚEndpoint.__init__4   s   € Ø×Ñ˜DÔ!ØŽr   c                ó   <€ V ^8„  d   QhRR/# r&   r)   )r*   r+   s   "€r   r,   rB   8   s   ø€ ÷ uñ u ñ ur   c                ó´   € V P                   e   Q h\        P                  RV 4       \        V P                  V P
                  V P                  04      V n         R # )NzFreezing endpoint %s)Ú _Endpoint__endpoint_frozen_queuer/   r0   r   Údo_channel_controlÚdo_channel_dataÚdo_kill©r   s   &r   Úfreeze_endpointÚEndpoint.freeze_endpoint8   sK   € Ø×+Ñ+Ò3Ð3Ð3Ü�‰Ð+¨TÔ2Ü'5°t×7NÑ7NÐPT×PdÑPdÐfj×frÑfrÐ6sÓ'tˆÖ$r   c                ó   <€ V ^8„  d   QhRR/# r&   r)   )r*   r+   s   "€r   r,   rB   =   s   ø€ ÷ ,ñ ,˜tñ ,r   c                ó”   € V P                   f   Q h\        P                  RV 4       V P                   P                  4        R V n         R # )NzThawing endpoint %s)rI   r/   r0   r3   rM   s   &r   Úthaw_endpointÚEndpoint.thaw_endpoint=   s=   € Ø×+Ñ+Ò7Ð7Ð7Ü�‰Ð*¨DÔ1Ø×$Ñ$×(Ñ(Ô*Ø'+ˆÖ$r   c                ó   <€ V ^8„  d   QhRR/# r&   r)   )r*   r+   s   "€r   r,   rB   D   ó   ø€ ÷ "ñ "˜$ñ "r   c                ó   € \         hr   ©ÚNotImplementedErrorrM   s   &r   Údo_closeÚEndpoint.do_closeD   ó   € Ü!Ð!r   c                ó0   <€ V ^8„  d   QhRS[ RS[ RS[RR/# ©r'   ÚchannelÚcommandÚmessager(   N©Ústrr   )r*   r+   s   "€r   r,   rB   G   s*   ø€ ÷ "ñ "©#ð "¹ð "Ájð "ÐUYñ "r   c                ó   € \         hr   rW   )r   r^   r_   r`   s   &&&&r   rJ   ÚEndpoint.do_channel_controlG   r[   r   c                ó*   <€ V ^8„  d   QhRS[ RS[RR/# ©r'   r^   Údatar(   N©rb   Úbytes)r*   r+   s   "€r   r,   rB   J   s"   ø€ ÷ "ñ "¡sð "±%ð "¸Dñ "r   c                ó   € \         hr   rW   ©r   r^   rg   s   &&&r   rK   ÚEndpoint.do_channel_dataJ   r[   r   c                ó,   <€ V ^8„  d   QhRRRRRS[ RR/# ©r'   Úhostz
str | NoneÚgroupr`   r(   N©r   )r*   r+   s   "€r   r,   rB   M   s*   ø€ ÷ "ñ "˜Lð "°ð "É
ð "ÐW[ñ "r   c                ó   € \         hr   rW   )r   ro   rp   r`   s   &&&&r   rL   ÚEndpoint.do_killM   r[   r   c                ó*   <€ V ^8„  d   QhRS[ RS[RR/# rf   rh   )r*   r+   s   "€r   r,   rB   Q   s"   ø€ ÷ 6ñ 6©ð 6±Eð 6¸dñ 6r   c                ó<   € V P                   P                  W4       R # r   )r@   Úwrite_channel_datark   s   &&&r   Úsend_channel_dataÚEndpoint.send_channel_dataQ   s   € Ø�‰×&Ñ& wÖ5r   c          
      ó4   <€ V ^8„  d   QhRS[ RS[ RRRS[RR/# )r'   r^   r_   ÚmsgúJsonObject | NoneÚkwargsr(   N)rb   r   )r*   r+   s   "€r   r,   rB   T   s5   ø€ ÷ .ñ .Ùð.Ù%(ð.Ø/Bð.ÙNWð.à	ñ.r   c                óè   € V P                   P                  ! V3R VRV/VB  VR8X  dJ   V P                   P                  V ,          P                  V4       V P                   P	                  V4       R# R# )r^   r_   ÚcloseN)r@   Úwrite_controlÚ	endpointsÚremoveÚdrop_channel)r   r^   r_   rz   r|   s   &&&&,r   Úsend_channel_controlÚEndpoint.send_channel_controlT   sa   € ð 	�‰×!Ò! #ÑR¨wÐRÀÐRÈ6ÒRØ�gÔØ�K‰K×!Ñ! $Õ'×.Ñ.¨wÔ7Ø�K‰K×$Ñ$ WÖ-ñ r   c                ó(   <€ V ^8„  d   QhRRRS[ RR/# )r'   rz   r{   r|   r(   N)r   )r*   r+   s   "€r   r,   rB   \   s$   ø€ ÷ ;ñ ;Ð%8ð ;É9ð ;ÐY]ñ ;r   c                ó@   € V P                   P                  ! W3/ VB  R # r   )r@   Úshutdown_endpoint)r   rz   r|   s   &&,r   r‡   ÚEndpoint.shutdown_endpoint\   s   € Ø�‰×%Ò% dÑ:°6Ô:r   c                ó@   <€ V ^8„  d   Qh/ R;R&   S[ S[,          ;R&   # )r'   rA   r@   rI   )r   r   )r*   r+   s   "€r   r,   rB   0   s    ø‡ ‚ ØÑñ á%¡nÕ5Ñ<ò r   )Ú__endpoint_frozen_queuer@   r   )r#   r5   r6   r7   rI   r   rN   rR   rY   rJ   rK   rL   rw   rƒ   r‡   Ú__annotate_func__r9   r:   r;   s   @r   r=   r=   0   sy   ø‡ € à8<Ð÷ð ÷uð u÷
,ð ,÷"ð "÷"ð "÷"ð "÷"ð "÷6ð 6÷.ð .÷;ò ;÷Y ƒ r   r=   c                   ó   € ] tR t^`tRtR# )ÚRoutingErrorr)   N)r#   r5   r6   r7   r9   r)   r   r   r�   r�   `   s   † Ûr   r�   c                   ób   a € ] tR t^dt o V 3R lR ltV 3R lR ltV 3R lR ltV 3R ltRtV t	R	# )
ÚRoutingRulec                ó   <€ V ^8„  d   QhRR/# r?   r)   )r*   r+   s   "€r   r,   ÚRoutingRule.__annotate__g   s   ø€ ÷ ñ ˜xñ r   c                ó   € Wn         R # r   ©r@   rE   s   &&r   r   ÚRoutingRule.__init__g   s   € ØŽr   c                ó6   <€ V ^8„  d   QhRS[ RS[S[,          /# ©r'   Úoptionsr(   )r   r   r=   )r*   r+   s   "€r   r,   r‘   j   s    ø€ ÷ 	"ñ 	"¡*ð 	"±¹(Õ1Cñ 	"r   c                ó   € \         h)a5  Check if a routing rule applies to a given 'open' message.

This should inspect the options dictionary and do one of the following three things:

    - return an Endpoint to handle this channel
    - raise a RoutingError to indicate that the open should be rejected
    - return None to let the next rule run
rW   )r   r—   s   &&r   Ú
apply_ruleÚRoutingRule.apply_rulej   s
   € ô "Ð!r   c                ó   <€ V ^8„  d   QhRR/# r&   r)   )r*   r+   s   "€r   r,   r‘   u   rU   r   c                ó   € \         hr   rW   rM   s   &r   ÚshutdownÚRoutingRule.shutdownu   r[   r   c                ó$   <€ V ^8„  d   Qh/ R;R&   # )r'   rA   r@   r)   )r*   r+   s   "€r   r,   r‘   d   s   ø‡ ‚ ØÑò r   r“   N)
r#   r5   r6   r7   r   r™   r�   r‹   r9   r:   r;   s   @r   r�   r�   d   s*   ø‡ € ÷ð ÷	"ð 	"÷"ð "÷# ƒ r   r�   c                   ó  a € ] tR t^yt o RtV 3R lR ltV 3R lR ltV 3R lR ltV 3R lR	 ltV 3R
 lR lt	RV 3R lR llt
V 3R lR ltV 3R lR ltV 3R lR ltV 3R lR ltRtV 3R lR ltV 3R lR ltV 3R ltRtV tR# )rA   Fc                ó0   <€ V ^8„  d   QhRS[ S[,          /# )r'   Úrouting_rules)r   r�   )r*   r+   s   "€r   r,   ÚRouter.__annotate__€   s   ø€ ÷  ñ  ¡d©;Õ&7ñ  r   c                ó´   € V F	  pWn         K  	  Wn        / V n        / V n        \        P
                  ! 4       V n        V P                  P                  4        R # r   )r@   r¢   Úopen_channelsr€   ÚasyncioÚEventÚno_endpointsÚset)r   r¢   Úrules   && r   r   ÚRouter.__init__€   sF   € Û!ˆDØŽKñ "à*ÔØˆÔØˆŒÜ#ŸMšM›OˆÔØ×Ñ×ÑÖr   c                ó    <€ V ^8„  d   QhRS[ /# ©r'   r(   rq   )r*   r+   s   "€r   r,   r£   ‰   s   ø€ ÷ ñ ‘jñ r   c                ó   € / # )z7Used by the 'info' channel.  Gets overridden in Bridge.r)   rM   s   &r   ÚinfoÚRouter.info‰   s   € àˆ	r   c                ó&   <€ V ^8„  d   QhRS[ RS[/# r–   )r   r=   )r*   r+   s   "€r   r,   r£   �   s   ø€ ÷ 	0ñ 	0¡:ð 	0±(ñ 	0r   c                óò   € V P                    FH  p\        P                  R V4       VP                  V4      pVf   K0  \        P                  RV4       Vu # 	  \        P                  R4       \	        R4      h)z  applying rule %sz    resulting endpoint is %sz  No rules matchedznot-supported)r¢   r/   r0   r™   r�   )r   r—   rª   Úendpoints   &&  r   Úcheck_rulesÚRouter.check_rules�   sc   € Ø×&Ô&ˆDÜ�L‰LÐ-¨tÔ4Ø—‘ wÓ/ˆHØÔ#Ü—‘Ð;¸XÔFØ’ñ 'ô �L‰LÐ-Ô.Ü˜Ó/Ð/r   c                ó$   <€ V ^8„  d   QhRS[ RR/# )r'   r^   r(   N)rb   )r*   r+   s   "€r   r,   r£   ˜   s   ø€ ÷ hñ h¡Cð h¨Dñ hr   c                óÎ   €  V P                   P                  V4       \        P                  R V4       R#   \         d%    \        P                  RYP                   4        R# i ; i)zrouter dropped channel %sz.trying to drop non-existent channel %s from %sN)r¥   Úpopr/   r0   ÚKeyErrorÚerror)r   r^   s   &&r   r‚   ÚRouter.drop_channel˜   sQ   € ð	hØ×Ñ×"Ñ" 7Ô+Ü�L‰LÐ4°gÖ>øÜô 	hÜ�L‰LÐIÈ7×TfÑTf×gð	hús   ‚15 µ+A$Á#A$c                ó$   <€ V ^8„  d   QhRS[ RR/# )r'   r³   r(   N)r=   )r*   r+   s   "€r   r,   r£   Ÿ   s   ø€ ÷ "ñ "¡Xð "°$ñ "r   c                óh   € \        4       V P                  V&   V P                  P                  4        R # r   )r©   r€   r¨   Úclear)r   r³   s   &&r   rD   ÚRouter.add_endpointŸ   s$   € Ü#&£5ˆ�‰�xÑ Ø×Ñ×ÑÖ!r   Nc                ó.   <€ V ^8„  d   QhRS[ RRRS[RR/# )r'   r³   rz   r{   r|   r(   N)r=   r   )r*   r+   s   "€r   r,   r£   £   s,   ø€ ÷ 'ñ '©(ð 'Ð9Lð 'Ñ_hð 'Ðmqñ 'r   c                ó:  € V P                   P                  V4      p\        P                  R WV4       V F+  pV P                  ! V3RRRV/VB  V P                  V4       K-  	  V P                   '       g   V P                  P                  4        V P                  '       dz   \        P                  RV P                   4       V P                   '       gF   V P                  '       d2   \        P                  R4       V P                  P                  4        R# R# R# R# )z'shutdown_endpoint(%s, %s) will close %sr_   r~   r^   ú  endpoints remaining: %rz  close transportN)r€   r¸   r/   r0   r   r‚   r¨   r©   Ú_eofÚ	transportr~   )r   r³   rz   r|   Úchannelsr^   s   &&&,  r   r‡   ÚRouter.shutdown_endpoint£   sÒ   € Ø—>‘>×%Ñ% hÓ/ˆÜ�‰Ð>ÀÐRZÔ[ÛˆGØ×Ò˜sÑO¨GÐO¸WÐOÈÒOØ×Ñ˜gÖ&ñ  ð �~�~ˆ~Ø×Ñ×!Ñ!Ô#ð �9�9ˆ9Ü�L‰LÐ4°d·n±nÔEØ—>—>�> d§n§n nÜ—‘Ð0Ô1Ø—‘×$Ñ$Ö&ñ '5‘>ñ r   c                ó,   <€ V ^8„  d   QhRRRRRS[ RR/# rn   rq   )r*   r+   s   "€r   r,   r£   ´   s*   ø€ ÷ 3ñ 3˜Lð 3°ð 3É
ð 3ÐW[ñ 3r   c                ó¦   € \        V P                  4      p\        P                  R W\	        V4      4       V F  pVP                  WV4       K  	  R# )z+do_kill(%s, %s).  Considering %d endpoints.N)r©   r€   r/   r0   r1   rL   )r   ro   rp   r`   r€   r³   s   &&&&  r   rL   ÚRouter.do_kill´   sB   € Ü˜Ÿ™Ó'ˆ	Ü�‰ÐBÀDÔQTÐU^ÓQ_Ô`Û!ˆHØ×Ñ˜T¨'Ö2ó "r   c                ó0   <€ V ^8„  d   QhRS[ RS[ RS[RR/# r]   ra   )r*   r+   s   "€r   r,   r£   º   s*   ø€ ÷ ?ñ ?±ð ?¹cð ?ÉJð ?Ð[_ñ ?r   c                ó2  € V P                   f   \        R4      hVR8X  d„   WP                  9   d   \        R4      h \        P	                  RWP                  R4      4       V P                  V4      pY@P                  T&   T P                  T,          P                  T4       M V P                  V,          pTP                  YT4       R #   \         d.   pT P                  TP                  4       RTR7        R p?R # R p?ii ; i  \         d     R # i ; i)Nz,channel control message received before initÚopenzchannel is already openz5Trying to find endpoint for new channel %s payload=%sÚpayloadr~   )r_   r^   )Ú	init_hostr	   r¥   r/   r0   Úgetr´   r�   r   Ú	get_attrsr€   Úaddr¹   rJ   )r   r^   r_   r`   r³   Úexcs   &&&&  r   Úchannel_control_receivedÚRouter.channel_control_receivedº   sü   € Ø�>‰>Ò!Ü&Ð'UÓVÐVð
 �fÔØ×,Ñ,Ô,Ü*Ð+DÓEÐEðÜ—‘ÐTÐV]×_jÑ_jÐktÓ_uÔvØ×+Ñ+¨GÓ4�ð
 +3×Ñ˜wÑ'Ø�N‰N˜8Õ$×(Ñ(¨Õ1ðØ×-Ñ-¨gÕ6�ð 	×#Ñ# G°gÖ>øô  ô Ø×"Ñ" 3§=¡=£?¸GÈWÐ"ÔUÝûðûô ô âðús)   ½6C Â%D ÃDÃ"C?Ã?DÄDÄDc                ó*   <€ V ^8„  d   QhRS[ RS[RR/# rf   rh   )r*   r+   s   "€r   r,   r£   Ø   s"   ø€ ÷ 	0ñ 	0©Sð 	0¹ð 	0À$ñ 	0r   c                ó¦   € V P                   f   \        R4      h V P                  V,          pTP	                  Y4       R #   \         d     R # i ; i)Nz)channel data message received before init)rÎ   r	   r¥   r¹   rK   )r   r^   rg   r³   s   &&& r   Úchannel_data_receivedÚRouter.channel_data_receivedØ   sQ   € Ø�>‰>Ò!Ü&Ð'RÓSÐSð	Ø×)Ñ)¨'Õ2ˆHð 	× Ñ  Ö/øô ô 	Úð	ús   ›A ÁAÁAc                ó    <€ V ^8„  d   QhRS[ /# r­   )Úbool)r*   r+   s   "€r   r,   r£   ã   s   ø€ ÷ 	$ñ 	$™dñ 	$r   c                ó  € \         P                  R V 4       \        V P                  4      pV F  pVP	                  4        K  	  RV n        \         P                  RV P                  4       \        V P                  4      # )zeof_received(%r)TrÂ   )r/   r0   r©   r€   rY   rÃ   rÚ   )r   r€   r³   s   &  r   Úeof_receivedÚRouter.eof_receivedã   s`   € Ü�‰Ð'¨Ô.ä˜Ÿ™Ó'ˆ	Û!ˆHØ×ÑÖñ "ð ˆŒ	Ü�‰Ð0°$·.±.ÔAÜ�D—N‘NÓ#Ð#r   c                ó4   <€ V ^8„  d   QhRS[ S[,          RR/# )r'   rÒ   r(   N)r   Ú	Exception)r*   r+   s   "€r   r,   r£   ð   s    ø€ ÷ 	<ñ 	<™X¡iÕ0ð 	<°Tñ 	<r   c                óâ   € V P                   '       g   V P                  4        V P                  e?   Vf   V P                  P                  R 4       R # V P                  P	                  V4       R # R # r   )rÃ   rÜ   Ú_communication_doneÚ
set_resultÚset_exception)r   rÒ   s   &&r   Ú	do_closedÚRouter.do_closedð   sU   € à�y�yˆyØ×ÑÔà×#Ñ#Ò/ØŠ{Ø×(Ñ(×3Ñ3°DÖ9à×(Ñ(×6Ñ6°sÖ;ñ	 0r   c                ó   <€ V ^8„  d   QhRR/# r&   r)   )r*   r+   s   "€r   r,   r£   û   s   ø€ ÷ +ñ + 4ñ +r   c              ƒ  óŽ  "  € V P                   e   Q h\        P                  ! 4       P                  4       V n          V P                   G Rj  x€L
  RV n         V P                  P                  4       G Rj  x€L
  R#  L/  \        \
        3 d     L@i ; i L  RT n         T P                  P                  4       G Rj  x€L 
  i ; i5i)zNWait until communication is complete on the router and all endpoints are done.N)rá   r¦   Úget_running_loopÚcreate_futureÚBrokenPipeErrorÚConnectionResetErrorr¨   ÚwaitrM   s   &r   ÚcommunicateÚRouter.communicateû   s°   é € à×'Ñ'Ò/Ð/Ð/Ü#*×#;Ò#;Ó#=×#KÑ#KÓ#MˆÔ ð		+Ø×*Ñ*×*Ð*ð (,ˆDÔ$ð ×#Ñ#×(Ñ(Ó*×*Ò*ñ +øÜÔ!5Ð6ô 	Ùð	úñ +øð	 (,ˆDÔ$ð ×#Ñ#×(Ñ(Ó*×*Ò*üsd   ‚9C¼A= ÁA;ÁA= Á$CÁ4BÁ5CÁ;A= Á=BÂB ÂBÂB ÂCÂ%CÂ;B>Â<CÃCc                ó¾   <€ V ^8„  d   Qh/ S[ S[,          ;R&   S[S[S[3,          ;R&   R;R&   S[P                  ;R&   S[;R&   S[S[P                  ,          ;R&   # )r'   r¢   r¥   zdict[Endpoint, set[str]]r€   r¨   rÃ   rá   )
r   r�   r   rb   r=   r¦   r§   rÚ   r   ÚFuture)r*   r+   s   "€r   r,   r£   y   sl   ø‡ ‚ Ù™Õ$Ñ$ñ á™™X˜Õ&Ñ&ñ ð *Ñ)ñ ñ —-‘-Ññ	 ñ
 Ññ ñj "¡'§.¡.Õ1Ñ8òk r   )rá   rÃ   r€   r¨   r¥   r¢   r   )r#   r5   r6   r7   rÃ   r   r¯   r´   r‚   rD   r‡   rL   rÓ   r×   rÜ   rá   rä   rí   r‹   r9   r:   r;   s   @r   rA   rA   y   s–   ø‡ € ð
 €D÷ ð  ÷ð ÷	0ð 	0÷hð h÷"ð "÷'ò '÷"3ð 3÷?ð ?÷<	0ð 	0÷	$ð 	$ð 59Ð÷	<ð 	<÷+ð +÷E ƒ r   rA   )r¦   r   ÚloggingÚtypingr   r   r   Újsonutilr   r   Úprotocolr   r	   r
   Ú	getLoggerr#   r/   r   r=   r�   r�   rA   r)   r   r   Ú<module>rö      si   ðó Û Û ß 'Ñ 'ç +ß QÑ Qà	×	Ò	˜8Ó	$€÷?ñ ?÷>-;ñ -;ô`	�>ô 	÷"ñ "ô*O+Ð"ö O+r   