+
    /O|jie  ã                  ó¦  € R t ^ RIHt ^ RIHt ^ RIt^ RIt^ RIt^ RIt^ RI	H
u Ht ^ RIHt ^ RIHt ^ RIHt ^ RIHt ^ RIHt ^ R	IHt ^ R
IHt ^ RIHt ^ RIHt ^ RIHt ^ RIHt ^ RI t ]R,          ! 4       t!R R lt"R R lt#RRRR./RR. R2O//t$]$R,          PK                  4       ]$R&   ]#! ]$R,          ]$R,          4       ]$R,          ]$R&    ! R R4      t&R R lt'] PP                  R R  l4       t)] PP                  R! R" l4       t*R# R$ lt+] PP                  ! R%R&7      R' R( l4       t,R) R* lt-R+ R, lt.R- R. lt/R/ R0 lt0 ! R1 R4      t1R# )3a  Report test results in JUnit-XML format, for use with Jenkins and build
integration servers.

Based on initial code from Ross Lawley.

Output conforms to
https://github.com/jenkinsci/xunit-plugin/blob/master/src/main/resources/org/jenkinsci/plugins/xunit/types/model/xsd/junit-10.xsd
)Úannotations)ÚCallableN)Únodes)Útiming)ÚExceptionRepr)ÚReprFileLocation)ÚConfig)Úfilename_arg)ÚParser)ÚFixtureRequest)Ú
TestReport)ÚStashKey)ÚTerminalReporterÚLogXMLc               ó    € V ^8„  d   QhRRRR/# )é   ÚargÚobjectÚreturnÚstr© )Úformats   "ÚIC:\Users\alokc\chatbot\backend\venv\Lib\site-packages\_pytest/junitxml.pyÚ__annotate__r   %   s   € ÷ 2ñ 2˜ð 2 3ñ 2ó    c                óR   € R R lpRp\         P                  ! W!\        V 4      4      # )a  Visually escape invalid XML characters.

For example, transforms
    'hello\aworld\b'
into
    'hello#x07world#x08'
Note that the #xABs are *not* XML escapes - missing the ampersand &#xAB.
The idea is to escape visually for the user rather than for XML itself.
c               ó    € V ^8„  d   QhRRRR/# )r   Úmatchobjzre.Match[str]r   r   r   )r   s   "r   r   Ú$bin_xml_escape.<locals>.__annotate__0   s   € ÷  ñ  �}ð  ¨ñ  r   c                óZ   € \        V P                  4       4      pV^ÿ8:  d   RVR 2# RVR 2# )éÿ   z#xÚ02XÚ04X)ÚordÚgroup)r   Úis   & r   ÚreplÚbin_xml_escape.<locals>.repl0   s6   € Ü�—‘Ó Ó!ˆØ�Œ9Ø˜˜#�w�<Ðà˜˜#�w�<Ðr   u   [^	
 -~Â€-íŸ¿î€€-ï¿½ð�€€-ô�¿¿])ÚreÚsubr   )r   r&   Úillegal_xml_res   &  r   Úbin_xml_escaper+   %   s$   € õ ð i€NÜ�6Š6�.¬¨C«Ó1Ð1r   c               ó   € V ^8„  d   QhRR/# ©r   r   ÚNoner   )r   s   "r   r   r   >   s   € ÷ ñ  ñ r   c                óø   € / pV P                  4        FR  w  r4VP                  4        F9  w  rV\        V\        4      '       g   \        \	        V4      4      hWF,           W#&   K;  	  KT  	  V P                  V4       R # ©N)ÚitemsÚ
isinstanceÚlistÚ	TypeErrorÚtypeÚupdate)ÚleftÚrightÚresultÚklÚvlÚkrÚvrs   &&     r   Úmerge_familyr>   >   s^   € Ø€FØ—*‘*–,‰ˆØ—k‘k–m‰FˆBÜ˜b¤$×'Ò'Ü¤ R£Ó)Ð)Ø�ˆF‹Jó $ñ ð
 	‡K�K�Ör   Ú_baseÚtestcaseÚ	classnameÚnameÚ_base_legacyÚxunit1Úxunit2c                  óò   € ] tR t^TtR R ltR R ltR R ltR R ltR	 R
 ltR R lt	R R lt
R'R R lltR R ltR R ltR R ltR R ltR R ltR R ltR R ltR  R! ltR" R# ltR$ R% ltR&tR# )(Ú_NodeReporterc               ó$   € V ^8„  d   QhRRRRRR/# )r   Únodeidzstr | TestReportÚxmlr   r   r.   r   )r   s   "r   r   Ú_NodeReporter.__annotate__U   s"   € ÷ (ñ (Ð/ð (°fð (Àñ (r   c                	óÂ   € Wn         W n        V P                  P                  V n        V P                  P                  V n        R V n        . V n        . V n        / V n        R# )ç        N)ÚidrJ   Ú	add_statsÚfamilyÚdurationÚ
propertiesr   Úattrs)ÚselfrI   rJ   s   &&&r   Ú__init__Ú_NodeReporter.__init__U   sH   € ØŒØŒØŸ™×+Ñ+ˆŒØ—h‘h—o‘oˆŒØˆŒØ13ˆŒØ')ˆŒ
Ø%'ˆŽ
r   c               ó    € V ^8„  d   QhRRRR/# )r   Únodeú
ET.Elementr   r.   r   )r   s   "r   r   rK   _   s   € ÷  ñ  ˜:ð  ¨$ñ  r   c                	ó†   € V P                   P                  VP                  4       V P                  P	                  V4       R # r0   )rJ   rO   Útagr   Úappend)rT   rX   s   &&r   r\   Ú_NodeReporter.append_   s*   € Ø�‰×Ñ˜4Ÿ8™8Ô$Ø�
‰
×Ñ˜$Ör   c               ó$   € V ^8„  d   QhRRRRRR/# ©r   rB   r   Úvaluer   r   r.   r   )r   s   "r   r   rK   c   s&   € ÷ Cñ C ð C¨Vð C¸ñ Cr   c                	ód   € V P                   P                  \        V4      \        V4      34       R # r0   )rR   r\   r   r+   ©rT   rB   r`   s   &&&r   Úadd_propertyÚ_NodeReporter.add_propertyc   s"   € Ø�‰×Ñ¤ D£	¬>¸%Ó+@ÐAÖBr   c               ó$   € V ^8„  d   QhRRRRRR/# r_   r   )r   s   "r   r   rK   f   s!   € ÷ 6ñ 6 #ð 6¨fð 6¸ñ 6r   c                	óH   € \        V4      V P                  \        V4      &   R # r0   )r+   rS   r   rb   s   &&&r   Úadd_attributeÚ_NodeReporter.add_attributef   s   € Ü .¨uÓ 5ˆ�
‰
”3�t“9Ór   c               ó   € V ^8„  d   QhRR/# ©r   r   zET.Element | Noner   )r   s   "r   r   rK   i   s   € ÷ ñ Ð&7ñ r   c           	     óÒ   € V P                   '       dU   \        P                  ! R4      pV P                    F,  w  r#VP                  \        P                  ! RW#R7      4       K.  	  V# R# ©z9Return a Junit node containing custom properties, if any.rR   Úproperty©rB   r`   N)rR   ÚETÚElementr\   ©rT   rR   rB   r`   s   &   r   Úmake_properties_nodeÚ"_NodeReporter.make_properties_nodei   sK   € à�?�?ˆ?ÜŸš LÓ1ˆJØ#Ÿœ‘�Ø×!Ñ!¤"§*¢*¨Z¸dÔ"PÖQñ  /àÐÙr   c               ó    € V ^8„  d   QhRRRR/# )r   Ú
testreportr   r   r.   r   )r   s   "r   r   rK   r   s   € ÷  ñ  ¨Jð  ¸4ñ  r   c                	ó  € \        VP                  4      pV P                  pVR R	 pV P                  P                  '       d'   VP                  ^ V P                  P                  4       RRP                  V4      R\        VR	,          4      RVP                  ^ ,          /pVP                  ^,          e    \        VP                  ^,          4      VR&   \        VR4      '       d   VP                  VR&   WPn        V P                  P                  V4       V P                  R8X  d   R # / pV P                   F=  pV\        V P                  ,          R,          9   g   K(  V P                  V,          Wg&   K?  	  W`n        R # )
NrA   Ú.rB   ÚfileÚlineÚurlrD   r@   éÿÿÿÿ)Úmangle_test_addressrI   rS   rJ   ÚprefixÚinsertÚjoinr+   Úlocationr   Úhasattrrz   r6   rP   Úfamilies)rT   ru   ÚnamesÚexisting_attrsÚ
classnamesrS   Ú
temp_attrsÚkeys   &&      r   Úrecord_testreportÚ_NodeReporter.record_testreportr   s-  € Ü# J×$5Ñ$5Ó6ˆØŸ™ˆØ˜3˜B�Zˆ
Ø�8‰8�?�?ˆ?Ø×Ñ˜a §¡§¡Ô1à˜Ÿ™ *Ó-Ø”N 5¨¥9Ó-Ø�J×'Ñ'¨Õ*ð!
ˆð
 ×Ñ˜qÕ!Ò-Ü 
× 3Ñ 3°AÕ 6Ó7ˆE�&‰MÜ�:˜u×%Ò%Ø%Ÿ>™>ˆE�%‰LØŒ
Ø�
‰
×Ñ˜.Ô)ð �;‰;˜(Ô"Ùð ˆ
Ø—:”:ˆCØ”h˜tŸ{™{Õ+¨JÕ7Ö7Ø"&§*¡*¨S¥/�
“ñ ð  Ž
r   c               ó   € V ^8„  d   QhRR/# )r   r   rY   r   )r   s   "r   r   rK   �   s   € ÷ ñ ˜
ñ r   c                	óä   € \         P                  ! R V P                  V P                  R R7      pV P	                  4       pVe   VP                  V4       VP                  V P                  4       V# )r@   ú.3f)Útime)ro   rp   rS   rQ   rr   r\   Úextendr   )rT   r@   rR   s   &  r   Úto_xmlÚ_NodeReporter.to_xml�   sV   € Ü—:’:˜j¨$¯*©*¸d¿m¹mÈCÐ=PÔRˆØ×.Ñ.Ó0ˆ
ØÒ!Ø�O‰O˜JÔ'Ø�‰˜Ÿ
™
Ô#Øˆr   Nc               ó(   € V ^8„  d   QhRRRRRRRR/# )r   r[   r   ÚmessageÚdataú
str | Noner   r.   r   )r   s   "r   r   rK   ˜   s(   € ÷ ñ ˜sð ¨Sð ¸
ð Èdñ r   c                	óv   € \         P                  ! WR 7      p\        V4      Vn        V P	                  V4       R# ))r’   N©ro   rp   r+   Útextr\   )rT   r[   r’   r“   rX   s   &&&& r   Ú_add_simpleÚ_NodeReporter._add_simple˜   s(   € Ü�zŠz˜#Ô/ˆÜ" 4Ó(ˆŒ	Ø�‰�DÖr   c               ó    € V ^8„  d   QhRRRR/# ©r   Úreportr   r   r.   r   )r   s   "r   r   rK   �   s   € ÷ Cñ C¨Jð C¸4ñ Cr   c                	óš  € V P                   P                  '       g   VP                  '       d   R # VP                  pVP                  pVP
                  pV P                   P                  R8X  d   R # RpV P                   P                  R9   d   V P                  VR4      pV P                   P                  R	9   d-   WPP                  VR4      ,          pV P                  WR4       RpV P                   P                  R
9   d-   WPP                  VR4      ,          pV P                  WR4       RpV'       d   V P                  WR4       R # R # )NÚnoÚ z Captured Log ú
system-outz Captured Out ú
system-errz Captured Err )ÚlogÚall)r    úout-errr£   )r¡   r¤   r£   )	rJ   Úlog_passing_testsÚpassedÚ	capstdoutÚcaplogÚ	capstderrÚloggingÚ_prepare_contentÚ_write_content)rT   rœ   Úcontent_outÚcontent_logÚcontent_errÚcontent_alls   &&    r   Úwrite_captured_outputÚ#_NodeReporter.write_captured_output�   s  € Ø�x‰x×)×)Ð)¨f¯m¯m¨mÙà×&Ñ&ˆØ—m‘mˆØ×&Ñ&ˆØ�8‰8×Ñ˜tÔ#ÙØˆØ�8‰8×Ñ˜~Ô-Ø×/Ñ/°Ð=MÓNˆKØ�8‰8×ÑÐ?Ô?Ø×0Ñ0°Ð>NÓOÕOˆKØ×Ñ °\ÔBØˆKØ�8‰8×ÑÐ?Ô?Ø×0Ñ0°Ð>NÓOÕOˆKØ×Ñ °\ÔBØˆKßØ×Ñ °\ÖBñ r   c               ó$   € V ^8„  d   QhRRRRRR/# )r   Úcontentr   Úheaderr   r   )r   s   "r   r   rK   ´   s&   € ÷ @ñ @¨ð @°Sð @¸Sñ @r   c                	óJ   € R P                  VP                  ^PR4      VR.4      # )Ú
Ú-rŸ   )r   Úcenter)rT   r´   rµ   s   &&&r   r«   Ú_NodeReporter._prepare_content´   s#   € Ø�y‰y˜&Ÿ-™-¨¨CÓ0°'¸2Ð>Ó?Ð?r   c               ó(   € V ^8„  d   QhRRRRRRRR/# )r   rœ   r   r´   r   Újheaderr   r.   r   )r   s   "r   r   rK   ·   s)   € ÷ ñ  Zð ¸#ð Èð ÐPTñ r   c                	ót   € \         P                  ! V4      p\        V4      Vn        V P	                  V4       R # r0   r–   )rT   rœ   r´   r¼   r[   s   &&&& r   r¬   Ú_NodeReporter._write_content·   s(   € Ü�jŠj˜Ó!ˆÜ! 'Ó*ˆŒØ�‰�CÖr   c               ó    € V ^8„  d   QhRRRR/# r›   r   )r   s   "r   r   rK   ¼   s   € ÷ !ñ ! *ð !°ñ !r   c                	ó(   € V P                  R 4       R# )r¦   N)rO   ©rT   rœ   s   &&r   Úappend_passÚ_NodeReporter.append_pass¼   s   € Ø�‰�xÖ r   c               ó    € V ^8„  d   QhRRRR/# r›   r   )r   s   "r   r   rK   ¿   s   € ÷ Gñ G Zð G°Dñ Gr   c                	óN  € \        VR 4      '       d   V P                  RR4       R# VP                  f   Q h\        VP                  RR4      pVe   VP                  pM\        VP                  4      p\        V4      pV P                  RV\        VP                  4      4       R# )ÚwasxfailÚskippedz%xfail-marked test passes unexpectedlyNÚ	reprcrashÚfailure)r�   r˜   ÚlongreprÚgetattrr’   r   r+   )rT   rœ   rÈ   r’   s   &&  r   Úappend_failureÚ_NodeReporter.append_failure¿   s‹   € ä�6˜:×&Ò&Ø×Ñ˜YÐ(OÖPà—?‘?Ò.Ð.Ð.Ü18Ø—‘ ¨dó2ˆIð Ò$Ø#×+Ñ+‘ä˜fŸo™oÓ.�Ü$ WÓ-ˆGØ×Ñ˜Y¨´°V·_±_Ó1EÖFr   c               ó    € V ^8„  d   QhRRRR/# r›   r   )r   s   "r   r   rK   Ï   s   € ÷ Nñ N¨:ð N¸$ñ Nr   c                	ór   € VP                   f   Q hV P                  RR\        VP                   4      4       R # )NÚerrorzcollection failure)rÊ   r˜   r   rÁ   s   &&r   Úappend_collect_errorÚ"_NodeReporter.append_collect_errorÏ   s.   € à�‰Ò*Ð*Ð*Ø×Ñ˜Ð"6¼¸F¿O¹OÓ8LÖMr   c               ó    € V ^8„  d   QhRRRR/# r›   r   )r   s   "r   r   rK   Ô   s   € ÷ Pñ P¨Zð P¸Dñ Pr   c                	óR   € V P                  R R\        VP                  4      4       R# )rÇ   zcollection skippedN)r˜   r   rÊ   rÁ   s   &&r   Úappend_collect_skippedÚ$_NodeReporter.append_collect_skippedÔ   s   € Ø×Ñ˜Ð$8¼#¸f¿o¹oÓ:NÖOr   c               ó    € V ^8„  d   QhRRRR/# r›   r   )r   s   "r   r   rK   ×   s   € ÷ Mñ M :ð M°$ñ Mr   c                	ó:  € VP                   f   Q h\        VP                   RR 4      pVe   VP                  pM\        VP                   4      pVP                  R8X  d   RV R2pMRV R2pV P                  R\        V4      \        VP                   4      4       R # )NrÈ   Úteardownzfailed on teardown with "Ú"zfailed on setup with "rÐ   )rÊ   rË   r’   r   Úwhenr˜   r+   )rT   rœ   rÈ   ÚreasonÚmsgs   &&   r   Úappend_errorÚ_NodeReporter.append_error×   sŒ   € Ø�‰Ò*Ð*Ð*Ü-4°V·_±_ÀkÐSWÓ-Xˆ	ØÒ Ø×&Ñ&‰Fä˜Ÿ™Ó)ˆFà�;‰;˜*Ô$Ø-¨f¨X°QÐ7‰Cà*¨6¨(°!Ð4ˆCØ×Ñ˜¤.°Ó"5´s¸6¿?¹?Ó7KÖLr   c               ó    € V ^8„  d   QhRRRR/# r›   r   )r   s   "r   r   rK   å   s   € ÷ /ñ / Zð /°Dñ /r   c                	óN  € \        VR 4      '       dd   VP                  pVP                  R4      '       d
   VR,          p\        V4      p\        P
                  ! RRVR7      pV P                  V4       R# \        VP                  \        4      '       g   Q hVP                  w  rEpVP                  R4      '       d
   VR,          pV RV R	V 2p\        P
                  ! RR
\        V4      R7      p\        V4      Vn
        V P                  V4       V P                  V4       R# )rÆ   zreason: :é   NNrÇ   zpytest.xfail)r5   r’   z	Skipped: :é	   NNÚ:z: zpytest.skipN)r�   rÆ   Ú
startswithr+   ro   rp   r\   r2   rÊ   Útupler—   r±   )rT   rœ   ÚxfailreasonrÇ   ÚfilenameÚlinenoÚ
skipreasonÚdetailss   &&      r   Úappend_skippedÚ_NodeReporter.append_skippedå   sñ   € Ü�6˜:×&Ò&Ø Ÿ/™/ˆKØ×%Ñ% j×1Ò1Ø)¨"�o�Ü(¨Ó5ˆKÜ—j’j °ÈÔUˆGØ�K‰K˜Ö ä˜fŸo™o¬u×5Ò5Ð5Ð5Ø+1¯?©?Ñ(ˆH˜jØ×$Ñ$ [×1Ò1Ø'¨�^�
Ø!˜
 ! F 8¨2¨j¨\Ð:ˆGä—j’jØ ´~ÀjÓ7QôˆGô *¨'Ó2ˆGŒLØ�K‰K˜Ô Ø×&Ñ& vÖ.r   c               ó   € V ^8„  d   QhRR/# r-   r   )r   s   "r   r   rK   û   s   € ÷ #ñ #˜$ñ #r   c                	ór   a€ V P                  4       oV P                  P                  4        V3R  lV n         R# )c                 ó   <€ S # r0   r   )r“   s   €r   Ú<lambda>Ú(_NodeReporter.finalize.<locals>.<lambda>   s   ø€ ™dr   N)r�   Ú__dict__Úclear)rT   r“   s   &@r   ÚfinalizeÚ_NodeReporter.finalizeû   s'   ø€ Ø�{‰{‹}ˆØ�‰×ÑÔô #ˆŽr   )	rO   rS   rQ   rP   rN   r   rR   r�   rJ   r0   )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__rU   r\   rc   rg   rr   rˆ   r�   r˜   r±   r«   r¬   rÂ   rÌ   rÑ   rÕ   rÞ   rì   rõ   Ú__static_attributes__r   r   r   rG   rG   T   sh   † õ(õ õCõ6õõ õ<÷õ
Cõ.@õõ
!õGõ Nõ
PõMõ/÷,#ñ #r   rG   c               ó$   € V ^8„  d   QhRRRRRR/# )r   Úrequestr   Úfixture_namer   r   r.   r   )r   s   "r   r   r     s$   € ÷ 
ñ 
Øð
Ø+.ð
à	ñ
r   c                óú   € ^ RI Hp V P                  P                  P	                  \
        R4      pVeG   VP                  R9  d4   V P                  P                  V! V RVP                   R24      4       R# R# R# )z[Emit a PytestWarning about the given fixture being incompatible with newer xunit revisions.)ÚPytestWarningNz$ is incompatible with junit_family 'z' (use 'legacy' or 'xunit1'))rD   Úlegacy)	Ú_pytest.warning_typesr   ÚconfigÚstashÚgetÚxml_keyrP   rX   Úwarn)rý   rþ   r   rJ   s   &&  r   Ú!_warn_incompatibility_with_xunit2r    sl   € õ 4à
�.‰.×
Ñ
×
"Ñ
"¤7¨DÓ
1€CØ
‚˜3Ÿ:™:Ð-AÔAØ�‰×ÑÙØ�.Ð DÀSÇZÁZÀLÐPlÐmóö	
ñ B�r   c               ó    € V ^8„  d   QhRRRR/# ©r   rý   r   r   zCallable[[str, object], None]r   )r   s   "r   r   r     s   € ÷ ñ ˜^ð Ð0Mñ r   c                ó2   a € \        S R4       R V 3R llpV# )aN  Add extra properties to the calling test.

User properties become part of the test report and are available to the
configured reporters, like JUnit XML.

The fixture is callable with ``name, value``. The value is automatically
XML-encoded.

Example::

    def test_function(record_property):
        record_property("example_key", 1)
Úrecord_propertyc               ó$   € V ^8„  d   QhRRRRRR/# r_   r   )r   s   "r   r   Ú%record_property.<locals>.__annotate__#  s!   € ÷ ;ñ ;˜cð ;¨&ð ;°Tñ ;r   c                óT   <€ SP                   P                  P                  W34       R # r0   )rX   Úuser_propertiesr\   )rB   r`   rý   s   &&€r   Úappend_propertyÚ(record_property.<locals>.append_property#  s   ø€ Ø�‰×$Ñ$×+Ñ+¨T¨MÖ:r   )r  )rý   r  s   f r   r  r    s"   ø€ ô & gÐ/@ÔA÷;ð ;ð Ðr   c               ó    € V ^8„  d   QhRRRR/# r
  r   )r   s   "r   r   r   *  s   € ÷ ñ  .ð Ð5Rñ r   c                ó:  € ^ RI Hp V P                  P                  V! R4      4       \	        V R4       R R lpTpV P
                  P                  P                  \        R4      pVe2   VP                  V P                  P                  4      pVP                  pV# )z‘Add extra xml attributes to the tag for the calling test.

The fixture is callable with ``name, value``. The value is
automatically XML-encoded.
)ÚPytestExperimentalApiWarningz/record_xml_attribute is an experimental featureÚrecord_xml_attributec               ó$   € V ^8„  d   QhRRRRRR/# r_   r   )r   s   "r   r   Ú*record_xml_attribute.<locals>.__annotate__9  s!   € ÷ ñ ˜Cð ¨ð °4ñ r   c                ó   € R # r0   r   rn   s   &&r   Úadd_attr_noopÚ+record_xml_attribute.<locals>.add_attr_noop9  s   € Ùr   N)r  r  rX   r  r  r  r  r  r  Únode_reporterrI   rg   )rý   r  r  Ú	attr_funcrJ   r  s   &     r   r  r  )  sˆ   € õ Cà‡L�L×ÑÙ$Ð%VÓWôô & gÐ/EÔFõð €Ià
�.‰.×
Ñ
×
"Ñ
"¤7¨DÓ
1€CØ
‚Ø×)Ñ)¨'¯,©,×*=Ñ*=Ó>ˆØ!×/Ñ/ˆ	àÐr   c               ó$   € V ^8„  d   QhRRRRRR/# )r   Úparamr   Úvr   r.   r   )r   s   "r   r   r   F  s&   € ÷ Eñ E Cð E¨Cð E°Dñ Er   c                ó˜   € Rp\        V\        4      '       g2   Rp\        VP                  V \	        V4      P
                  R7      4      hR# )z_Used by record_testsuite_property to check that the given parameter name is of the proper
type.Tz5{param} parameter needs to be a string, but {g} given)r  ÚgN)r2   r   r4   r   r5   r÷   )r  r   Ú__tracebackhide__rÝ   s   &&  r   Ú_check_record_param_typer$  F  sC   € ð ÐÜ�aœ×ÒØEˆÜ˜Ÿ
™
¨´$°q³'×2BÑ2B˜
ÓCÓDÐDñ r   Úsession)Úscopec               ó    € V ^8„  d   QhRRRR/# r
  r   )r   s   "r   r   r   P  s   € ÷ #ñ # ~ð #Ð:Wñ #r   c                óŠ   € RpR R lpV P                   P                  P                  \        R4      pVe   VP                  pV# )aë  Record a new ``<property>`` tag as child of the root ``<testsuite>``.

This is suitable to writing global information regarding the entire test
suite, and is compatible with ``xunit2`` JUnit family.

This is a ``session``-scoped fixture which is called with ``(name, value)``. Example:

.. code-block:: python

    def test_foo(record_testsuite_property):
        record_testsuite_property("ARCH", "PPC")
        record_testsuite_property("STORAGE_TYPE", "CEPH")

:param name:
    The property name.
:param value:
    The property value. Will be converted to a string.

.. warning::

    Currently this fixture **does not work** with the
    `pytest-xdist <https://github.com/pytest-dev/pytest-xdist>`__ plugin. See
    :issue:`7767` for details.
Tc               ó$   € V ^8„  d   QhRRRRRR/# r_   r   )r   s   "r   r   Ú/record_testsuite_property.<locals>.__annotate__k  s!   € ÷ /ñ /˜#ð / fð /°ñ /r   c                ó"   € Rp\        RV 4       R# )zFNo-op function in case --junit-xml was not passed in the command-line.TrB   N)r$  )rB   r`   r#  s   && r   Úrecord_funcÚ.record_testsuite_property.<locals>.record_funck  s   € à ÐÜ  ¨Ö.r   N)r  r  r  r  Úadd_global_property)rý   r#  r,  rJ   s   &   r   Úrecord_testsuite_propertyr/  O  sC   € ð4 Ðõ/ð
 �.‰.×
Ñ
×
"Ñ
"¤7¨DÓ
1€CØ
‚Ø×-Ñ-ˆØÐr   c               ó    € V ^8„  d   QhRRRR/# )r   Úparserr
   r   r.   r   )r   s   "r   r   r   v  s   € ÷ ,ñ ,˜Vð ,¨ñ ,r   c                ó†  € V P                  R 4      pVP                  RRRRR\        P                  ! \        RR7      RRR	7       VP                  R
RRRRRR7       V P                  RRRR7       V P                  RRRR7       V P                  RRRRR7       V P                  RRRR7       V P                  RRR R7       R# )!zterminal reportingz
--junitxmlz--junit-xmlÚstoreÚxmlpathÚpath)ÚoptnameNz0Create junit-xml style report file at given path)ÚactionÚdestÚmetavarr5   ÚdefaultÚhelpz--junitprefixz--junit-prefixr   z0Prepend prefix to classnames in junit-xml output)r7  r9  r:  r;  Újunit_suite_namez Test suite name for JUnit reportÚpytest)r:  Újunit_loggingz\Write captured log messages to JUnit report: one of no|log|system-out|system-err|out-err|allrž   Újunit_log_passing_testsz;Capture log information for passing tests to JUnit report: ÚboolT)r5   r:  Újunit_duration_reportz*Duration time to report: one of total|callÚtotalÚjunit_familyz0Emit XML for schema: one of legacy|xunit1|xunit2rE   )ÚgetgroupÚ	addoptionÚ	functoolsÚpartialr	   Úaddini)r1  r$   s   & r   Úpytest_addoptionrI  v  sü   € Ø�O‰OÐ0Ó1€EØ	‡O�OØØØØØÜ×Òœ|°\ÔBØØ?ð ô 	ð 
‡O�OØØØØØØ?ð ô ð ‡M�MØÐ>Èð ô ð ‡M�MØð	:àð	 ô ð ‡M�MØ!ØEØØð	 ô ð ‡M�MØØ4Øð ô ð
 ‡M�MØØ:Øð ö r   c               ó    € V ^8„  d   QhRRRR/# ©r   r  r   r   r.   r   )r   s   "r   r   r   ¥  s   € ÷ =ñ =˜Vð =¨ñ =r   c                óÔ  € V P                   P                  pV'       dÊ   \        V R 4      '       g¶   V P                  R4      p\	        VV P                   P
                  V P                  R4      V P                  R4      V P                  R4      VV P                  R4      4      V P                  \        &   V P                  P                  V P                  \        ,          4       R# R# R# )ÚworkerinputrC  r<  r>  rA  r?  N)
Úoptionr4  r�   Úgetinir   Újunitprefixr  r  ÚpluginmanagerÚregister)r  r4  rC  s   &  r   Úpytest_configurerS  ¥  s­   € Ø�m‰m×#Ñ#€Gç”w˜v }×5Ò5Ø—}‘} ^Ó4ˆÜ &ØØ�M‰M×%Ñ%Ø�M‰MÐ,Ó-Ø�M‰M˜/Ó*Ø�M‰MÐ1Ó2ØØ�M‰MÐ3Ó4ó!
ˆ�‰”WÑð 	×Ñ×%Ñ% f§l¡l´7Õ&;Ö<ñ 6�wr   c               ó    € V ^8„  d   QhRRRR/# rK  r   )r   s   "r   r   r   ¶  s   € ÷ -ñ -˜vð -¨$ñ -r   c                ó²   € V P                   P                  \        R 4      pV'       d/   V P                   \         V P                  P	                  V4       R # R # r0   )r  r  r  rQ  Ú
unregister)r  rJ   s   & r   Úpytest_unconfigurerW  ¶  s@   € Ø
�,‰,×
Ñ
œ7 DÓ
)€Cß
Ø�L‰LœÐ!Ø×Ñ×'Ñ'¨Ö,ñ r   c               ó    € V ^8„  d   QhRRRR/# )r   Úaddressr   r   z	list[str]r   )r   s   "r   r   r   ½  s   € ÷ ñ  ð ¨ñ r   c                ó  € V P                  R 4      w  rpVP                  R4      pV^ ,          P                  \        P                  R4      V^ &   \
        P                  ! RRV^ ,          4      V^ &   VR;;,          W#,           ,          uu&   V# )Ú[z::rw   z\.py$rŸ   r{   )Ú	partitionÚsplitÚreplacer   ÚSEPr(   r)   )rY  r5  Úpossible_open_bracketÚparamsrƒ   s   &    r   r|   r|   ½  st   € Ø*1×*;Ñ*;¸CÓ*@Ñ'€D Ø�J‰J�tÓ€Eà�Q�x×Ñ¤§	¡	¨3Ó/€Eˆ!�HÜ�vŠv�h  E¨!¥HÓ-€Eˆ!�Hà	ˆ"‡IÐ&Õ/Õ/ƒIØ€Lr   c                  óÂ   € ] tR tRtR R R lltR R ltR R ltR R	 ltR
 R ltR R lt	R R lt
R R ltR R ltR R ltR R ltR R ltR R ltR R ltRtR# )!r   iÈ  c               ó0   € V ^8„  d   QhRRRRRRRRRRR	R
/# )r   r}   r”   Ú
suite_namer   rª   Úreport_durationr¥   r@  r   r.   r   )r   s   "r   r   ÚLogXML.__annotate__É  sH   € ÷ #ñ #ð ð#ð ð	#ð
 ð#ð ð#ð  ð#ð 
ñ#r   c                	óü  € \         P                  P                  \         P                  P                  V4      4      p\         P                  P	                  \         P                  P                  V4      4      V n        W n        W0n        W@n	        Wpn
        WPn        W`n        \        P                  . RO^ 4      V n        / V n        . V n        . V n        . V n        ^ V n        V P                  R8X  d
   RV n        R# R# )rÐ   r  rD   N)rÐ   r¦   rÉ   rÇ   )Úosr5  Ú
expanduserÚ
expandvarsÚnormpathÚabspathÚlogfiler}   rd  rª   r¥   re  rP   ÚdictÚfromkeysÚstatsÚnode_reportersÚnode_reporters_orderedÚglobal_propertiesÚopen_reportsÚcnt_double_fail_tests)rT   rm  r}   rd  rª   re  rP   r¥   s   &&&&&&&&r   rU   ÚLogXML.__init__É  sÇ   € ô —'‘'×$Ñ$¤R§W¡W×%7Ñ%7¸Ó%@ÓAˆÜ—w‘w×'Ñ'¬¯©¯©¸Ó(@ÓAˆŒØŒØ$ŒØŒØ!2ÔØ.ÔØŒÜ%)§]¡]Ú5°qó&
ˆŒ
ð UWˆÔØ;=ˆÔ#Ø8:ˆÔð /1ˆÔØ%&ˆÔ"ð �;‰;˜(Ô"Ø"ˆDŽKñ #r   c               ó    € V ^8„  d   QhRRRR/# r›   r   )r   s   "r   r   rf  ê  s   € ÷ 
 ñ 
 ˜zð 
 ¨dñ 
 r   c                	óþ   € \        VR V4      p\        VRR4      pV P                  P                  W#34      pVP                   F   w  rVVP	                  V\        V4      4       K"  	  Ve   VP                  4        R# R# ©rI   rX   N)rË   rq  Úpopr  rc   r   rõ   )rT   rœ   rI   Ú
workernodeÚreporterÚpropnameÚ	propvalues   &&     r   rõ   ÚLogXML.finalizeê  sw   € Ü˜ ¨6Ó2ˆä˜V V¨TÓ2ˆ
Ø×&Ñ&×*Ñ*¨FÐ+?Ó@ˆà#)×#9Ô#9ÑˆHØ×!Ñ! (¬C°	«NÖ;ñ $:ð ÒØ×ÑÖñ  r   c               ó    € V ^8„  d   QhRRRR/# )r   rœ   zTestReport | strr   rG   r   )r   s   "r   r   rf  ö  s   € ÷ ñ Ð$4ð ¸ñ r   c                	óî   € \        VR V4      p\        VRR4      pW#3pW@P                  9   d   V P                  V,          # \        W 4      pWPP                  V&   V P                  P	                  V4       V# ry  )rË   rq  rG   rr  r\   )rT   rœ   rI   r{  r‡   r|  s   &&    r   r  ÚLogXML.node_reporterö  st   € Ü#*¨6°8¸VÓ#Dˆä˜V V¨TÓ2ˆ
àÐ ˆà×%Ñ%Ô%à×&Ñ& sÕ+Ð+ä  Ó.ˆà#+×Ñ˜CÑ Ø×#Ñ#×*Ñ*¨8Ô4àˆr   c               ó    € V ^8„  d   QhRRRR/# )r   r‡   r   r   r.   r   )r   s   "r   r   rf    s   € ÷ !ñ !˜Sð ! Tñ !r   c                	óh   € WP                   9   d"   V P                   V;;,          ^,          uu&   R# R# )é   N)rp  )rT   r‡   s   &&r   rO   ÚLogXML.add_stats  s#   € Ø—*‘*ÔØ�J‰J�s�O˜qÕ �Oñ r   c               ó    € V ^8„  d   QhRRRR/# )r   rœ   r   r   rG   r   )r   s   "r   r   rf    s   € ÷ ñ  Jð °=ñ r   c                	óJ   € V P                  V4      pVP                  V4       V# r0   )r  rˆ   ©rT   rœ   r|  s   && r   Ú_opentestcaseÚLogXML._opentestcase  s%   € Ø×%Ñ% fÓ-ˆØ×"Ñ" 6Ô*Øˆr   c               ó    € V ^8„  d   QhRRRR/# r›   r   )r   s   "r   r   rf    s   € ÷ ]7ñ ]7¨zð ]7¸dñ ]7r   c           
     óþ  aaa€ RpSP                   '       d6   SP                  R8X  d#   V P                  S4      pVP                  S4       EMxSP                  '       Ed2   SP                  R8X  d�   \        SRR4      o\        SRR4      o\        VVV3R lV P                   4       R4      pV'       d   V P                  V4       MFV ;P                  \        SP                  \        SRR4      3V P                  9   4      ,          un	        V P                  S4      pSP                  R8X  dQ   VP                  S4       V P                  P                  S4       V P                  '       g   VP!                  S4       MFVP#                  S4       M4SP$                  '       d#   V P                  S4      pVP'                  S4       V P)                  S4       SP                  R8X  d—   V P                  S4      pVP!                  S4       V P                  S4       \        SRR4      o\        SRR4      o\        VVV3R lV P                   4       R4      pV'       d   V P                  P+                  V4       R# R# R# )	aï  Handle a setup/call/teardown report, generating the appropriate
XML tags as necessary.

Note: due to plugins like xdist, this hook may be called in interlaced
order with reports from other nodes. For example:

Usual call order:
    -> setup node1
    -> call node1
    -> teardown node1
    -> setup node2
    -> call node2
    -> teardown node2

Possible call order in xdist:
    -> setup node1
    -> call node1
    -> setup node2
    -> call node2
    -> teardown node2
    -> teardown node1
NÚcallrÙ   Ú	worker_idÚ
item_indexc              3  ó²   <"  € T FL  pVP                   SP                   8X  g   K   \        VR R4      S8X  g   K4  \        VRR4      S8X  g   KH  Vx € KN  	  R# 5i©r�  Nr�  ©rI   rË   ©Ú.0Úreprœ   Ú	report_iiÚ
report_wids   & €€€r   Ú	<genexpr>Ú2LogXML.pytest_runtest_logreport.<locals>.<genexpr>3  sZ   øé € ð á#4˜CàŸJ™J¨&¯-©-Ñ7ô ô !(¨¨\¸4Ó @ÀIÑ Mô	 ô
 !(¨¨[¸$Ó ?À:Ñ M÷ šÛ#4ùó   ƒA¥A¹AÁ
ArX   c              3  ó²   <"  € T FL  pVP                   SP                   8X  g   K   \        VR R4      S8X  g   K4  \        VRR4      S8X  g   KH  Vx € KN  	  R# 5ir’  r“  r”  s   & €€€r   r™  rš  b  sZ   øé € ð á0˜àŸ
™
 f§m¡mÑ3ô ô $ C¨°tÓ<À	ÑIô	 ô
 $ C¨°dÓ;¸zÑI÷ ’CÛ0ùr›  )r¦   rÛ   rŠ  rÂ   ÚfailedrË   Únextrt  rõ   ru  ÚintrI   rq  rÌ   r\   r¥   r±   rÞ   rÇ   rì   Úupdate_testcase_durationÚremove)rT   rœ   Úclose_reportr|  r—  r˜  s   &f  @@r   Úpytest_runtest_logreportÚLogXML.pytest_runtest_logreport  s  ú€ ð. ˆØ�=�=ˆ=Ø�{‰{˜fÔ$Ø×-Ñ-¨fÓ5�Ø×$Ñ$ VÔ,ùØ�]�]‰]Ø�{‰{˜jÔ(ä$ V¨[¸$Ó?�
Ü# F¨L¸$Ó?�	Ü#öà#'×#4Ò#4óð ó �÷  ð —M‘M ,Õ/ð
 ×.Ò.´#à"ŸM™MÜ# F¨F°DÓ9ðð  ×.Ñ.ñ	/ó3õ Õ.ð ×)Ñ)¨&Ó1ˆHØ�{‰{˜fÔ$Ø×'Ñ'¨Ô/Ø×!Ñ!×(Ñ(¨Ô0Ø×-×-Ð-Ø×2Ñ2°6Ô:øà×%Ñ% fÕ-Ø�^�^ˆ^Ø×)Ñ)¨&Ó1ˆHØ×#Ñ# FÔ+Ø×%Ñ% fÔ-Ø�;‰;˜*Ô$Ø×)Ñ)¨&Ó1ˆHØ×*Ñ*¨6Ô2à�M‰M˜&Ô!Ü  ¨°dÓ;ˆJÜ ¨°dÓ;ˆIÜöà#×0Ò0óð óˆL÷ Ø×!Ñ!×(Ñ(¨Ö6ñ ñ' %r   c               ó    € V ^8„  d   QhRRRR/# r›   r   )r   s   "r   r   rf  p  s   € ÷ Bñ B¨zð B¸dñ Br   c                ó®   € V P                   RVP                  09   d8   V P                  V4      pV;P                  \	        VRR4      ,          un        R# R# )z{Accumulate total duration for nodeid from given report and update
the Junit.testcase with the new total if already created.rB  rQ   rM   N)re  rÛ   r  rQ   rË   r‰  s   && r   r   ÚLogXML.update_testcase_durationp  sJ   € ð ×Ñ G¨V¯[©[Ð#9Ô9Ø×)Ñ)¨&Ó1ˆHØ×Ò¤¨°¸SÓ!AÕA×ñ :r   c               ó    € V ^8„  d   QhRRRR/# r›   r   )r   s   "r   r   rf  w  s   € ÷ 8ñ 8¨:ð 8¸$ñ 8r   c                	ó¼   € VP                   '       gJ   V P                  V4      pVP                  '       d   VP                  V4       R # VP	                  V4       R # R # r0   )r¦   rŠ  r�  rÑ   rÕ   r‰  s   && r   Úpytest_collectreportÚLogXML.pytest_collectreportw  sE   € Ø�}�}ˆ}Ø×)Ñ)¨&Ó1ˆHØ�}�}ˆ}Ø×-Ñ-¨fÖ5à×/Ñ/°Ö7ñ r   c               ó    € V ^8„  d   QhRRRR/# )r   Úexcreprr   r   r.   r   )r   s   "r   r   rf    s   € ÷ Fñ F¨Mð F¸dñ Fr   c                	óš   € V P                  R 4      pVP                  P                  RR R7       VP                  RR\	        V4      4       R# )Úinternalr=  )rA   rB   rÐ   zinternal errorN)r  rS   r6   r˜   r   )rT   r­  r|  s   && r   Úpytest_internalerrorÚLogXML.pytest_internalerror  s@   € Ø×%Ñ% jÓ1ˆØ�‰×Ñ¨°zÐÔBØ×Ñ˜WÐ&6¼¸G»ÖEr   c               ó   € V ^8„  d   QhRR/# r-   r   )r   s   "r   r   rf  „  s   € ÷ ,ñ , Tñ ,r   c                	ó:   € \         P                  ! 4       V n        R # r0   )r   ÚInstantÚsuite_start)rT   s   &r   Úpytest_sessionstartÚLogXML.pytest_sessionstart„  s   € Ü!Ÿ>š>Ó+ˆÖr   c               ó   € V ^8„  d   QhRR/# r-   r   )r   s   "r   r   rf  ‡  s   € ÷ $Gñ $G dñ $Gr   c                	ó~  € \         P                  P                  \         P                  P                  V P                  4      4      p\         P
                  ! VR R7       \        V P                  RRR7      ;_uu_ 4       pV P                  P                  4       pV P                  R,          V P                  R,          ,           V P                  R,          ,           V P                  R,          ,           V P                  ,
          pVP                  R	4       \        P                  ! R
V P                  \        V P                  R,          4      \        V P                  R,          4      \        V P                  R,          4      \        V4      VP                   R V P                  P#                  4       P%                  4       P'                  4       \(        P*                  ! 4       R7	      pV P-                  4       pVe   VP/                  V4       V P0                   F"  pVP/                  VP3                  4       4       K$  	  \        P                  ! R4      pVP5                  RR4       VP/                  V4       VP                  \        P6                  ! VRR7      4       RRR4       R#   + '       g   i     R# ; i)T)Úexist_okÚwzutf-8)Úencodingr¦   rÉ   rÇ   rÐ   z&<?xml version="1.0" encoding="utf-8"?>Ú	testsuiterŒ   )rB   ÚerrorsÚfailuresrÇ   Útestsr�   Ú	timestampÚhostnameNÚ
testsuitesrB   zpytest testsÚunicode)rh  r5  Údirnamerl  rm  ÚmakedirsÚopenrµ  Úelapsedrp  ru  Úwritero   rp   rd  r   ÚsecondsÚas_utcÚ
astimezoneÚ	isoformatÚplatformrX   Ú_get_global_properties_noder\   rr  r�   ÚsetÚtostring)	rT   rÅ  rm  rQ   ÚnumtestsÚ
suite_noders  r  rÃ  s	   &        r   Úpytest_sessionfinishÚLogXML.pytest_sessionfinish‡  sí  € Ü—'‘'—/‘/¤"§'¡'§/¡/°$·,±,Ó"?Ó@ˆä
�Š�G dÕ+ä�$—,‘, ¨g×6Õ6¸'Ø×'Ñ'×/Ñ/Ó1ˆHð —
‘
˜8Õ$Ø—*‘*˜YÕ'õ(à—*‘*˜YÕ'õ(ð —*‘*˜WÕ%õ&ð ×,Ñ,õ	-ð ð �M‰MÐBÔCäŸšØØ—_‘_Ü˜4Ÿ:™: gÕ.Ó/Ü˜TŸZ™Z¨	Õ2Ó3Ü˜DŸJ™J yÕ1Ó2Ü˜(“mØ ×(Ñ(¨Ð-Ø×*Ñ*×1Ñ1Ó3×>Ñ>Ó@×JÑJÓLÜ!Ÿš›ô
ˆJð !%× @Ñ @Ó BÐØ Ò,Ø×!Ñ!Ð"3Ô4Ø!%×!<Ô!<�Ø×!Ñ! -×"6Ñ"6Ó"8Ö9ñ "=äŸš LÓ1ˆJØ�N‰N˜6 >Ô2Ø×Ñ˜jÔ)Ø�M‰Mœ"Ÿ+š+ j¸9ÔEÔF÷? 7×6×6Ò6ús   Á?H"J+Ê+J<	c               ó$   € V ^8„  d   QhRRRRRR/# )r   Úterminalreporterr   r  zpytest.Configr   r.   r   )r   s   "r   r   rf  ­  s)   € ÷ Sñ SØ 0ðSØ:GðSà	ñSr   c                	ór   € VP                  4       ^ 8¼  d"   VP                  RRV P                   24       R# R# )é    r¸   zgenerated xml file: N)Úget_verbosityÚ	write_seprm  )rT   r×  r  s   &&&r   Úpytest_terminal_summaryÚLogXML.pytest_terminal_summary­  s6   € ð ×ÑÓ! QÔ&Ø×&Ñ& sÐ.BÀ4Ç<Á<À.Ð,QÖRñ 'r   c               ó$   € V ^8„  d   QhRRRRRR/# r_   r   )r   s   "r   r   rf  ³  s&   € ÷ Eñ E¨ð E°Fð E¸tñ Er   c                	ón   € R p\        RV4       V P                  P                  V\        V4      34       R# )TrB   N)r$  rs  r\   r+   )rT   rB   r`   r#  s   &&& r   r.  ÚLogXML.add_global_property³  s0   € Ø ÐÜ  ¨Ô.Ø×Ñ×%Ñ% t¬^¸EÓ-BÐ&CÖDr   c               ó   € V ^8„  d   QhRR/# rj   r   )r   s   "r   r   rf  ¸  s   € ÷ ñ Ð->ñ r   c           	     óÒ   € V P                   '       dU   \        P                  ! R4      pV P                    F,  w  r#VP                  \        P                  ! RW#R7      4       K.  	  V# R# rl   )rs  ro   rp   r\   rq   s   &   r   rÏ  Ú"LogXML._get_global_properties_node¸  sP   € à×!×!Ð!ÜŸš LÓ1ˆJØ#×5Ô5‘�Ø×!Ñ!¤"§*¢*¨Z¸dÔ"PÖQñ  6àÐÙr   )ru  rP   rs  r¥   rm  rª   rq  rr  rt  r}   re  rp  rd  rµ  N)r=  rž   rB  rD   T)r÷   rø   rù   rú   rU   rõ   r  rO   rŠ  r£  r   rª  r°  r¶  rÔ  rÜ  r.  rÏ  rû   r   r   r   r   r   È  sV   † ÷#õB
 õõ$!õõ
]7õ~Bõ8õFõ
,õ$GõLSõE÷
ñ r   )rx   ry   rz   )2Ú__doc__Ú
__future__r   Úcollections.abcr   rF  rh  rÎ  r(   Úxml.etree.ElementTreeÚetreeÚElementTreero   Ú_pytestr   r   Ú_pytest._code.coder   r   Ú_pytest.configr   r	   Ú_pytest.config.argparsingr
   Ú_pytest.fixturesr   Ú_pytest.reportsr   Ú_pytest.stashr   Ú_pytest.terminalr   r=  r  r+   r>   r‚   ÚcopyrG   r  Úfixturer  r  r$  r/  rI  rS  rW  r|   r   r   r   r   Ú<module>rô     sJ  ðñõ #å $Û Û 	Û Û 	ß "Ð "å Ý Ý ,Ý /Ý !Ý 'Ý ,Ý +Ý &Ý "Ý -Û ð �8Ö
Ó
€õ2õ2ð ˆj˜;¨Ð/Ð0Ø�ZÒ!8Ð9ð€ð
 ˜gÕ&×+Ñ+Ó-€ˆÑ Ù ˆX�hÕ ¨.Õ!9Ô :ð ˜gÕ&€ˆÑ ÷l#ñ l#õ^
ð ‡�ôó ðð, ‡�ôó ðõ8Eð ‡‚�iÔ ô#ó !ð#õL,õ^=õ"-õ÷wó wr   